From 531d7cfb629e403084ca122912c096c3fd2f5c34 Mon Sep 17 00:00:00 2001 From: Aleksey Polyakov Date: Mon, 2 May 2022 15:10:33 +0300 Subject: [PATCH 01/87] replace OnMultiple with EventsOnMultiple (#1369) --- v2/internal/frontend/runtime/wrapper/runtime.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/v2/internal/frontend/runtime/wrapper/runtime.js b/v2/internal/frontend/runtime/wrapper/runtime.js index 8f47e62f1..7f13df1ac 100644 --- a/v2/internal/frontend/runtime/wrapper/runtime.js +++ b/v2/internal/frontend/runtime/wrapper/runtime.js @@ -41,7 +41,7 @@ export function EventsOnMultiple(eventName, callback, maxCallbacks) { } export function EventsOn(eventName, callback) { - OnMultiple(eventName, callback, -1); + EventsOnMultiple(eventName, callback, -1); } export function EventsOff(eventName) { @@ -49,7 +49,7 @@ export function EventsOff(eventName) { } export function EventsOnce(eventName, callback) { - OnMultiple(eventName, callback, 1); + EventsOnMultiple(eventName, callback, 1); } export function EventsEmit(eventName) { From e5cc18cfc53428360d1f78bc596a8330d6a13653 Mon Sep 17 00:00:00 2001 From: Arpit Jain Date: Tue, 3 May 2022 23:21:23 +0530 Subject: [PATCH 02/87] Fix docs formatting --- website/docs/reference/cli.mdx | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/website/docs/reference/cli.mdx b/website/docs/reference/cli.mdx index 44ba1f165..4dcc55931 100644 --- a/website/docs/reference/cli.mdx +++ b/website/docs/reference/cli.mdx @@ -175,8 +175,7 @@ Your system is ready for Wails development! | -frontenddevserverurl "url" | Use 3rd party dev server url to serve assets, EG Vite | "" | | -appargs "args" | Arguments passed to the application in shell style | | | -platform "platform" | Platform/Arch to target | `runtime.GOOS` | -| -save | Saves the given `assetdir`, `reloaddirs`, `wailsjsdir`, `debounce`, `devserver` and `frontenddevserverurl` flags in - `wails.json` to become the defaults for subsequent invocations. | | +| -save | Saves the given `assetdir`, `reloaddirs`, `wailsjsdir`, `debounce`, `devserver` and `frontenddevserverurl` flags in `wails.json` to become the defaults for subsequent invocations. | | Example: @@ -217,4 +216,4 @@ For more details on creating templates, consult the [Templates guide](../guides/ ## version -`wails version` will simply output the current CLI version. \ No newline at end of file +`wails version` will simply output the current CLI version. From 2d66d2146a76fc9810966f28708abc03790a2e89 Mon Sep 17 00:00:00 2001 From: stffabi Date: Tue, 3 May 2022 23:27:13 +0200 Subject: [PATCH 03/87] [v2] Improve multi platform builds (#1373) - Make sure to reset the default Arch of the build options and not keep the previous one. - Expand to the full platform in outputBinaries so e.g. `-platform windows` can be used with `-nsis` --- v2/cmd/wails/internal/commands/build/build.go | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/v2/cmd/wails/internal/commands/build/build.go b/v2/cmd/wails/internal/commands/build/build.go index 22134658a..d64716ef5 100644 --- a/v2/cmd/wails/internal/commands/build/build.go +++ b/v2/cmd/wails/internal/commands/build/build.go @@ -259,10 +259,9 @@ func AddBuildSubcommand(app *clir.Cli, w io.Writer) { // Calculate platform and arch platformSplit := strings.Split(platform, "/") buildOptions.Platform = platformSplit[0] + buildOptions.Arch = runtime.GOARCH if system.IsAppleSilicon { buildOptions.Arch = "arm64" - } else { - buildOptions.Arch = runtime.GOARCH } if len(platformSplit) == 2 { buildOptions.Arch = platformSplit[1] @@ -330,7 +329,7 @@ func AddBuildSubcommand(app *clir.Cli, w io.Writer) { // Output stats buildOptions.Logger.Println(fmt.Sprintf("Built '%s' in %s.\n", outputFilename, time.Since(start).Round(time.Millisecond).String())) - outputBinaries[platform] = outputFilename + outputBinaries[buildOptions.Platform+"/"+buildOptions.Arch] = outputFilename }) if targetErr != nil { From 6224d3aa82649e311557418273d5693baeb55ec7 Mon Sep 17 00:00:00 2001 From: Lea Anthony Date: Thu, 5 May 2022 06:52:40 +1000 Subject: [PATCH 04/87] Re-add plain template, Improve stalebot. --- .github/stale.yml | 2 +- .../initialise/templates/generate/generate.go | 20 +- .../templates/generate/plain/.gitignore | 12 + .../templates/generate/plain/README.md | 18 ++ .../templates/generate/plain/app.go | 44 ++++ .../plain/frontend/src/assets/fonts/OFL.txt | 93 ++++++++ .../fonts/nunito-v16-latin-regular.woff2 | Bin 0 -> 18972 bytes .../src/assets/images/logo-universal.png | Bin 0 -> 150356 bytes .../plain/frontend/src/index.tmpl.html | 21 ++ .../generate/plain/frontend/src/main.css | 82 +++++++ .../generate/plain/frontend/src/main.js | 32 +++ .../templates/generate/plain/go.mod.tmpl | 35 +++ .../templates/generate/plain/go.sum | 222 ++++++++++++++++++ .../templates/generate/plain/main.tmpl.go | 83 +++++++ .../templates/generate/plain/template.json | 7 + .../templates/generate/plain/wails.tmpl.json | 9 + .../templates/templates/plain/.gitignore | 12 + .../templates/templates/plain/README.md | 18 ++ .../templates/templates/plain/app.go | 44 ++++ .../plain/frontend/src/assets/fonts/OFL.txt | 93 ++++++++ .../fonts/nunito-v16-latin-regular.woff2 | Bin 0 -> 18972 bytes .../src/assets/images/logo-universal.png | Bin 0 -> 150356 bytes .../plain/frontend/src/index.tmpl.html | 21 ++ .../templates/plain/frontend/src/main.css | 82 +++++++ .../templates/plain/frontend/src/main.js | 32 +++ .../templates/templates/plain/go.mod.tmpl | 35 +++ .../templates/templates/plain/go.sum | 222 ++++++++++++++++++ .../templates/templates/plain/main.tmpl.go | 83 +++++++ .../templates/templates/plain/template.json | 7 + .../templates/templates/plain/wails.tmpl.json | 9 + 30 files changed, 1324 insertions(+), 14 deletions(-) create mode 100644 v2/cmd/wails/internal/commands/initialise/templates/generate/plain/.gitignore create mode 100644 v2/cmd/wails/internal/commands/initialise/templates/generate/plain/README.md create mode 100644 v2/cmd/wails/internal/commands/initialise/templates/generate/plain/app.go create mode 100644 v2/cmd/wails/internal/commands/initialise/templates/generate/plain/frontend/src/assets/fonts/OFL.txt create mode 100644 v2/cmd/wails/internal/commands/initialise/templates/generate/plain/frontend/src/assets/fonts/nunito-v16-latin-regular.woff2 create mode 100644 v2/cmd/wails/internal/commands/initialise/templates/generate/plain/frontend/src/assets/images/logo-universal.png create mode 100644 v2/cmd/wails/internal/commands/initialise/templates/generate/plain/frontend/src/index.tmpl.html create mode 100644 v2/cmd/wails/internal/commands/initialise/templates/generate/plain/frontend/src/main.css create mode 100644 v2/cmd/wails/internal/commands/initialise/templates/generate/plain/frontend/src/main.js create mode 100644 v2/cmd/wails/internal/commands/initialise/templates/generate/plain/go.mod.tmpl create mode 100644 v2/cmd/wails/internal/commands/initialise/templates/generate/plain/go.sum create mode 100644 v2/cmd/wails/internal/commands/initialise/templates/generate/plain/main.tmpl.go create mode 100644 v2/cmd/wails/internal/commands/initialise/templates/generate/plain/template.json create mode 100644 v2/cmd/wails/internal/commands/initialise/templates/generate/plain/wails.tmpl.json create mode 100644 v2/cmd/wails/internal/commands/initialise/templates/templates/plain/.gitignore create mode 100644 v2/cmd/wails/internal/commands/initialise/templates/templates/plain/README.md create mode 100644 v2/cmd/wails/internal/commands/initialise/templates/templates/plain/app.go create mode 100644 v2/cmd/wails/internal/commands/initialise/templates/templates/plain/frontend/src/assets/fonts/OFL.txt create mode 100644 v2/cmd/wails/internal/commands/initialise/templates/templates/plain/frontend/src/assets/fonts/nunito-v16-latin-regular.woff2 create mode 100644 v2/cmd/wails/internal/commands/initialise/templates/templates/plain/frontend/src/assets/images/logo-universal.png create mode 100644 v2/cmd/wails/internal/commands/initialise/templates/templates/plain/frontend/src/index.tmpl.html create mode 100644 v2/cmd/wails/internal/commands/initialise/templates/templates/plain/frontend/src/main.css create mode 100644 v2/cmd/wails/internal/commands/initialise/templates/templates/plain/frontend/src/main.js create mode 100644 v2/cmd/wails/internal/commands/initialise/templates/templates/plain/go.mod.tmpl create mode 100644 v2/cmd/wails/internal/commands/initialise/templates/templates/plain/go.sum create mode 100644 v2/cmd/wails/internal/commands/initialise/templates/templates/plain/main.tmpl.go create mode 100644 v2/cmd/wails/internal/commands/initialise/templates/templates/plain/template.json create mode 100644 v2/cmd/wails/internal/commands/initialise/templates/templates/plain/wails.tmpl.json diff --git a/.github/stale.yml b/.github/stale.yml index a0c92fdff..c99691f70 100644 --- a/.github/stale.yml +++ b/.github/stale.yml @@ -8,7 +8,7 @@ exemptLabels: - security - onhold - inprogress - - "Selected for development" + - "Selected For Development" # Label to use when marking an issue as stale staleLabel: wontfix # Comment to post when marking an issue as stale. Set to `false` to disable diff --git a/v2/cmd/wails/internal/commands/initialise/templates/generate/generate.go b/v2/cmd/wails/internal/commands/initialise/templates/generate/generate.go index 329cad6b4..8e0fec4fa 100644 --- a/v2/cmd/wails/internal/commands/initialise/templates/generate/generate.go +++ b/v2/cmd/wails/internal/commands/initialise/templates/generate/generate.go @@ -158,11 +158,14 @@ var templates = []*template{ func main() { - rebuildRuntime() + //rebuildRuntime() + // + //for _, t := range templates { + // createTemplate(t) + //} - for _, t := range templates { - createTemplate(t) - } + // copy plain template + s.COPYDIR("plain", "../templates/plain") } func rebuildRuntime() { @@ -220,15 +223,6 @@ func createTemplate(template *template) { err = g.Extract(".", nil) checkError(err) - //s.ECHO("HERE") - //s.EXEC("wails init -n " + shortName + "test -t ./" + shortName) - //s.ECHO("HERE") - //s.CD(shortName + "test") - //s.ECHO("HERE") - //s.REPLACEALL("go.mod", s.Sub{"// replace": "replace"}) - //s.ECHO("HERE") - //s.EXEC("wails build -debug") - //s.ECHO("HERE") s.CD(cwd) s.ECHO(`Until an auto fix is done, add "@babel/types": "^7.17.10" to vite-ts/frontend/package.json`) diff --git a/v2/cmd/wails/internal/commands/initialise/templates/generate/plain/.gitignore b/v2/cmd/wails/internal/commands/initialise/templates/generate/plain/.gitignore new file mode 100644 index 000000000..b92a6f8bf --- /dev/null +++ b/v2/cmd/wails/internal/commands/initialise/templates/generate/plain/.gitignore @@ -0,0 +1,12 @@ +# Wails bin directory +build/bin +# Wails Windows NSIS support files +build/windows/installer/wails_tools.nsh +build/windows/installer/tmp/ + +# IDEs +.idea +.vscode + +# The black hole that is... +node_modules diff --git a/v2/cmd/wails/internal/commands/initialise/templates/generate/plain/README.md b/v2/cmd/wails/internal/commands/initialise/templates/generate/plain/README.md new file mode 100644 index 000000000..9fcd85bdd --- /dev/null +++ b/v2/cmd/wails/internal/commands/initialise/templates/generate/plain/README.md @@ -0,0 +1,18 @@ +# README + +## About + +This template uses plain JS / HTML and CSS. + +You can configure the project by editing `wails.json`. More information about the project settings can be found +here: https://wails.io/docs/reference/project-config + +## Live Development + +To run in live development mode, run `wails dev` in the project directory. The frontend dev server will run +on http://localhost:34115. Open this in your browser to connect to your application. + +## Building + +For a production build, use `wails build`. + diff --git a/v2/cmd/wails/internal/commands/initialise/templates/generate/plain/app.go b/v2/cmd/wails/internal/commands/initialise/templates/generate/plain/app.go new file mode 100644 index 000000000..224be7156 --- /dev/null +++ b/v2/cmd/wails/internal/commands/initialise/templates/generate/plain/app.go @@ -0,0 +1,44 @@ +package main + +import ( + "context" + "fmt" +) + +// App struct +type App struct { + ctx context.Context +} + +// NewApp creates a new App application struct +func NewApp() *App { + return &App{} +} + +// startup is called at application startup +func (a *App) startup(ctx context.Context) { + // Perform your setup here + a.ctx = ctx +} + +// domReady is called after front-end resources have been loaded +func (a App) domReady(ctx context.Context) { + // Add your action here +} + +// beforeClose is called when the application is about to quit, +// either by clicking the window close button or calling runtime.Quit. +// Returning true will cause the application to continue, false will continue shutdown as normal. +func (a *App) beforeClose(ctx context.Context) (prevent bool) { + return false +} + +// shutdown is called at application termination +func (a *App) shutdown(ctx context.Context) { + // Perform your teardown here +} + +// Greet returns a greeting for the given name +func (a *App) Greet(name string) string { + return fmt.Sprintf("Hello %s, It's show time!", name) +} diff --git a/v2/cmd/wails/internal/commands/initialise/templates/generate/plain/frontend/src/assets/fonts/OFL.txt b/v2/cmd/wails/internal/commands/initialise/templates/generate/plain/frontend/src/assets/fonts/OFL.txt new file mode 100644 index 000000000..9cac04ce8 --- /dev/null +++ b/v2/cmd/wails/internal/commands/initialise/templates/generate/plain/frontend/src/assets/fonts/OFL.txt @@ -0,0 +1,93 @@ +Copyright 2016 The Nunito Project Authors (contact@sansoxygen.com), + +This Font Software is licensed under the SIL Open Font License, Version 1.1. +This license is copied below, and is also available with a FAQ at: +http://scripts.sil.org/OFL + + +----------------------------------------------------------- +SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 +----------------------------------------------------------- + +PREAMBLE +The goals of the Open Font License (OFL) are to stimulate worldwide +development of collaborative font projects, to support the font creation +efforts of academic and linguistic communities, and to provide a free and +open framework in which fonts may be shared and improved in partnership +with others. + +The OFL allows the licensed fonts to be used, studied, modified and +redistributed freely as long as they are not sold by themselves. The +fonts, including any derivative works, can be bundled, embedded, +redistributed and/or sold with any software provided that any reserved +names are not used by derivative works. The fonts and derivatives, +however, cannot be released under any other type of license. The +requirement for fonts to remain under this license does not apply +to any document created using the fonts or their derivatives. + +DEFINITIONS +"Font Software" refers to the set of files released by the Copyright +Holder(s) under this license and clearly marked as such. This may +include source files, build scripts and documentation. + +"Reserved Font Name" refers to any names specified as such after the +copyright statement(s). + +"Original Version" refers to the collection of Font Software components as +distributed by the Copyright Holder(s). + +"Modified Version" refers to any derivative made by adding to, deleting, +or substituting -- in part or in whole -- any of the components of the +Original Version, by changing formats or by porting the Font Software to a +new environment. + +"Author" refers to any designer, engineer, programmer, technical +writer or other person who contributed to the Font Software. + +PERMISSION & CONDITIONS +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Font Software, to use, study, copy, merge, embed, modify, +redistribute, and sell modified and unmodified copies of the Font +Software, subject to the following conditions: + +1) Neither the Font Software nor any of its individual components, +in Original or Modified Versions, may be sold by itself. + +2) Original or Modified Versions of the Font Software may be bundled, +redistributed and/or sold with any software, provided that each copy +contains the above copyright notice and this license. These can be +included either as stand-alone text files, human-readable headers or +in the appropriate machine-readable metadata fields within text or +binary files as long as those fields can be easily viewed by the user. + +3) No Modified Version of the Font Software may use the Reserved Font +Name(s) unless explicit written permission is granted by the corresponding +Copyright Holder. This restriction only applies to the primary font name as +presented to the users. + +4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font +Software shall not be used to promote, endorse or advertise any +Modified Version, except to acknowledge the contribution(s) of the +Copyright Holder(s) and the Author(s) or with their explicit written +permission. + +5) The Font Software, modified or unmodified, in part or in whole, +must be distributed entirely under this license, and must not be +distributed under any other license. The requirement for fonts to +remain under this license does not apply to any document created +using the Font Software. + +TERMINATION +This license becomes null and void if any of the above conditions are +not met. + +DISCLAIMER +THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT +OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE +COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM +OTHER DEALINGS IN THE FONT SOFTWARE. diff --git a/v2/cmd/wails/internal/commands/initialise/templates/generate/plain/frontend/src/assets/fonts/nunito-v16-latin-regular.woff2 b/v2/cmd/wails/internal/commands/initialise/templates/generate/plain/frontend/src/assets/fonts/nunito-v16-latin-regular.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..2f9cc5964455b8f5ca989db989250dbebb1a5f66 GIT binary patch literal 18972 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 literal 0 HcmV?d00001 diff --git a/v2/cmd/wails/internal/commands/initialise/templates/generate/plain/frontend/src/index.tmpl.html b/v2/cmd/wails/internal/commands/initialise/templates/generate/plain/frontend/src/index.tmpl.html new file mode 100644 index 000000000..e904c489c --- /dev/null +++ b/v2/cmd/wails/internal/commands/initialise/templates/generate/plain/frontend/src/index.tmpl.html @@ -0,0 +1,21 @@ + + + + + + {{.ProjectName}} + + + + +

+ +
Please enter your name below 👇
+
+ + +
+
+ + + diff --git a/v2/cmd/wails/internal/commands/initialise/templates/generate/plain/frontend/src/main.css b/v2/cmd/wails/internal/commands/initialise/templates/generate/plain/frontend/src/main.css new file mode 100644 index 000000000..dab87d09a --- /dev/null +++ b/v2/cmd/wails/internal/commands/initialise/templates/generate/plain/frontend/src/main.css @@ -0,0 +1,82 @@ +html { + background-color: rgba(27, 38, 54, 1); + text-align: center; + color: white; +} + +body { + margin: 0; + color: white; + font-family: "Nunito", -apple-system, BlinkMacSystemFont, "Segoe UI", "Roboto", + "Oxygen", "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue", + sans-serif; +} + +@font-face { + font-family: "Nunito"; + font-style: normal; + font-weight: 400; + src: local(""), + url("assets/fonts/nunito-v16-latin-regular.woff2") format("woff2"); +} + +#app { + height: 100vh; + text-align: center; +} + +.logo { + display: block; + width: 50%; + height: 50%; + margin: auto; + padding: 10% 0 0; + background-position: center; + background-repeat: no-repeat; + background-image: url("./assets/images/logo-universal.png"); + background-size: 100% 100%; + background-origin: content-box; +} + +.result { + height: 20px; + line-height: 20px; + margin: 1.5rem auto; +} + +.input-box .btn { + width: 60px; + height: 30px; + line-height: 30px; + border-radius: 3px; + border: none; + margin: 0 0 0 20px; + padding: 0 8px; + cursor: pointer; +} + +.input-box .btn:hover { + background-image: linear-gradient(to top, #cfd9df 0%, #e2ebf0 100%); + color: #333333; +} + +.input-box .input { + border: none; + border-radius: 3px; + outline: none; + height: 30px; + line-height: 30px; + padding: 0 10px; + background-color: rgba(240, 240, 240, 1); + -webkit-font-smoothing: antialiased; +} + +.input-box .input:hover { + border: none; + background-color: rgba(255, 255, 255, 1); +} + +.input-box .input:focus { + border: none; + background-color: rgba(255, 255, 255, 1); +} diff --git a/v2/cmd/wails/internal/commands/initialise/templates/generate/plain/frontend/src/main.js b/v2/cmd/wails/internal/commands/initialise/templates/generate/plain/frontend/src/main.js new file mode 100644 index 000000000..3346d59ff --- /dev/null +++ b/v2/cmd/wails/internal/commands/initialise/templates/generate/plain/frontend/src/main.js @@ -0,0 +1,32 @@ +// Get input + focus +let nameElement = document.getElementById("name"); +nameElement.focus(); + +// Setup the greet function +window.greet = function () { + // Get name + let name = nameElement.value; + + // Check if the input is empty + if (name === "") return; + + // Call App.Greet(name) + try { + window.go.main.App.Greet(name) + .then((result) => { + // Update result with data back from App.Greet() + document.getElementById("result").innerText = result; + }) + .catch((err) => { + console.error(err); + }); + } catch (err) { + console.error(err); + } +}; + +nameElement.onkeydown = function (e) { + if (e.keyCode == 13) { + window.greet(); + } +}; diff --git a/v2/cmd/wails/internal/commands/initialise/templates/generate/plain/go.mod.tmpl b/v2/cmd/wails/internal/commands/initialise/templates/generate/plain/go.mod.tmpl new file mode 100644 index 000000000..d3e1921a2 --- /dev/null +++ b/v2/cmd/wails/internal/commands/initialise/templates/generate/plain/go.mod.tmpl @@ -0,0 +1,35 @@ +module changeme + +go 1.17 + +require github.com/wailsapp/wails/v2 {{.WailsVersion}} + +require ( +github.com/andybalholm/brotli v1.0.2 // indirect +github.com/davecgh/go-spew v1.1.1 // indirect +github.com/fasthttp/websocket v0.0.0-20200320073529-1554a54587ab // indirect +github.com/wailsapp/mimetype v1.4.1-beta.1 +github.com/go-ole/go-ole v1.2.5 // indirect +github.com/gofiber/fiber/v2 v2.17.0 // indirect +github.com/gofiber/websocket/v2 v2.0.8 // indirect +github.com/google/uuid v1.1.2 // indirect +github.com/imdario/mergo v0.3.12 // indirect +github.com/jchv/go-winloader v0.0.0-20200815041850-dec1ee9a7fd5 // indirect +github.com/klauspost/compress v1.12.2 // indirect +github.com/leaanthony/debme v1.2.1 // indirect +github.com/leaanthony/go-ansi-parser v1.0.1 // indirect +github.com/leaanthony/go-common-file-dialog v1.0.3 // indirect +github.com/leaanthony/slicer v1.5.0 // indirect +github.com/leaanthony/typescriptify-golang-structs v0.1.7 // indirect +github.com/pkg/browser v0.0.0-20210706143420-7d21f8c997e2 // indirect +github.com/pkg/errors v0.9.1 // indirect +github.com/savsgio/gotils v0.0.0-20200117113501-90175b0fbe3f // indirect +github.com/tkrajina/go-reflector v0.5.5 // indirect +github.com/valyala/bytebufferpool v1.0.0 // indirect +github.com/valyala/fasthttp v1.28.0 // indirect +github.com/valyala/tcplisten v1.0.0 // indirect +golang.org/x/net v0.0.0-20210510120150-4163338589ed // indirect +golang.org/x/sys v0.0.0-20210823070655-63515b42dcdf // indirect +) + +// replace github.com/wailsapp/wails/v2 {{.WailsVersion}} => {{.WailsDirectory}} diff --git a/v2/cmd/wails/internal/commands/initialise/templates/generate/plain/go.sum b/v2/cmd/wails/internal/commands/initialise/templates/generate/plain/go.sum new file mode 100644 index 000000000..4ba840926 --- /dev/null +++ b/v2/cmd/wails/internal/commands/initialise/templates/generate/plain/go.sum @@ -0,0 +1,222 @@ +github.com/Masterminds/semver v1.5.0/go.mod h1:MB6lktGJrhw8PrUyiEoblNEGEQ+RzHPF078ddwwvV3Y= +github.com/Microsoft/go-winio v0.4.14/go.mod h1:qXqCSQ3Xa7+6tgxaGTIe4Kpcdsi+P8jBhyzoq1bpyYA= +github.com/Microsoft/go-winio v0.4.16/go.mod h1:XB6nPKklQyQ7GC9LdcBEcBl8PF76WugXOPRXwdLnMv0= +github.com/alcortesm/tgz v0.0.0-20161220082320-9c5fe88206d7/go.mod h1:6zEj6s6u/ghQa61ZWa/C2Aw3RkjiTBOix7dkqa1VLIs= +github.com/andybalholm/brotli v1.0.2 h1:JKnhI/XQ75uFBTiuzXpzFrUriDPiZjlOSzh6wXogP0E= +github.com/andybalholm/brotli v1.0.2/go.mod h1:loMXtMfwqflxFJPmdbJO0a3KNoPuLBgiu3qAvBg8x/Y= +github.com/anmitsu/go-shlex v0.0.0-20161002113705-648efa622239/go.mod h1:2FmKhYUyUczH0OGQWaF5ceTx0UBShxjsH6f8oGKYe2c= +github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5/go.mod h1:wHh0iHkYZB8zMSxRWpUBQtwG5a7fFgvEO+odwuTv2gs= +github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= +github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= +github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/emirpasic/gods v1.12.0/go.mod h1:YfzfFFoVP/catgzJb4IKIqXjX78Ha8FMSDh3ymbK86o= +github.com/fasthttp/websocket v0.0.0-20200320073529-1554a54587ab h1:9e2joQGp642wHGFP5m86SDptAavrdGBe8/x9DGEEAaI= +github.com/fasthttp/websocket v0.0.0-20200320073529-1554a54587ab/go.mod h1:smsv/h4PBEBaU0XDTY5UwJTpZv69fQ0FfcLJr21mA6Y= +github.com/fatih/structtag v1.2.0/go.mod h1:mBJUNpUnHmRKrKlQQlmCrh5PuhftFbNv8Ys4/aAZl94= +github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568/go.mod h1:xEzjJPgXI435gkrCt3MPfRiAkVrwSbHsst4LCFVfpJc= +github.com/flytam/filenamify v1.0.0/go.mod h1:Dzf9kVycwcsBlr2ATg6uxjqiFgKGH+5SKFuhdeP5zu8= +github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= +github.com/wailsapp/mimetype v1.4.1-beta.1 h1:gSnKX7WH+7aA0EEjOGUmpWXTb0Nt5B7/8Dm9wHLrnnY= +github.com/wailsapp/mimetype v1.4.1-beta.1/go.mod h1:9aV5k31bBOv5z6u+QP8TltzvNGJPmNJD4XlAL3U+j3o= +github.com/gin-contrib/sse v0.1.0/go.mod h1:RHrZQHXnP2xjPF+u1gW/2HnVO7nvIa9PG3Gm+fLHvGI= +github.com/gin-gonic/gin v1.6.3/go.mod h1:75u5sXoLsGZoRN5Sgbi1eraJ4GU3++wFwWzhwvtwp4M= +github.com/gliderlabs/ssh v0.2.2/go.mod h1:U7qILu1NlMHj9FlMhZLlkCdDnU1DBEAqr0aevW3Awn0= +github.com/go-git/gcfg v1.5.0/go.mod h1:5m20vg6GwYabIxaOonVkTdrILxQMpEShl1xiMF4ua+E= +github.com/go-git/go-billy/v5 v5.0.0/go.mod h1:pmpqyWchKfYfrkb/UVH4otLvyi/5gJlGI4Hb3ZqZ3W0= +github.com/go-git/go-billy/v5 v5.1.0/go.mod h1:pmpqyWchKfYfrkb/UVH4otLvyi/5gJlGI4Hb3ZqZ3W0= +github.com/go-git/go-billy/v5 v5.2.0/go.mod h1:pmpqyWchKfYfrkb/UVH4otLvyi/5gJlGI4Hb3ZqZ3W0= +github.com/go-git/go-git-fixtures/v4 v4.0.2-0.20200613231340-f56387b50c12/go.mod h1:m+ICp2rF3jDhFgEZ/8yziagdT1C+ZpZcrJjappBCDSw= +github.com/go-git/go-git/v5 v5.3.0/go.mod h1:xdX4bWJ48aOrdhnl2XqHYstHbbp6+LFS4r4X+lNVprw= +github.com/go-ole/go-ole v1.2.4/go.mod h1:XCwSNxSkXRo4vlyPy93sltvi/qJq0jqQhjqQNIwKuxM= +github.com/go-ole/go-ole v1.2.5 h1:t4MGB5xEDZvXI+0rMjjsfBsD7yAgp/s9ZDkL1JndXwY= +github.com/go-ole/go-ole v1.2.5/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0= +github.com/go-playground/assert/v2 v2.0.1/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4= +github.com/go-playground/locales v0.13.0/go.mod h1:taPMhCMXrRLJO55olJkUXHZBHCxTMfnGwq/HNwmWNS8= +github.com/go-playground/universal-translator v0.17.0/go.mod h1:UkSxE5sNxxRwHyU+Scu5vgOQjsIJAF8j9muTVoKLVtA= +github.com/go-playground/validator/v10 v10.2.0/go.mod h1:uOYAAleCW8F/7oMFd6aG0GOhaH6EGOAJShg8Id5JGkI= +github.com/gobwas/httphead v0.0.0-20180130184737-2c6c146eadee/go.mod h1:L0fX3K22YWvt/FAX9NnzrNzcI4wNYi9Yku4O0LKYflo= +github.com/gobwas/pool v0.2.0/go.mod h1:q8bcK0KcYlCgd9e7WYLm9LpyS+YeLd8JVDW6WezmKEw= +github.com/gobwas/ws v1.0.2/go.mod h1:szmBTxLgaFppYjEmNtny/v3w89xOydFnnZMcgRRu/EM= +github.com/gofiber/fiber/v2 v2.17.0 h1:qP3PkGUbBB0i9iQh5E057XI1yO5CZigUxZhyUFYAFoM= +github.com/gofiber/fiber/v2 v2.17.0/go.mod h1:iftruuHGkRYGEXVISmdD7HTYWyfS2Bh+Dkfq4n/1Owg= +github.com/gofiber/websocket/v2 v2.0.8 h1:Hb4y6IxYZVMO0segROODXJiXVgVD3a6i7wnfot8kM6k= +github.com/gofiber/websocket/v2 v2.0.8/go.mod h1:fv8HSGQX09sauNv9g5Xq8GeGAaahLFYQKKb4ZdT0x2w= +github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= +github.com/golang/protobuf v1.3.5/go.mod h1:6O5/vntMXwX2lRkT1hjjk0nAC1IDOTvTlVgjlRvqsdk= +github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= +github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= +github.com/golang/snappy v0.0.3/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= +github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= +github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= +github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/google/uuid v1.1.2 h1:EVhdT+1Kseyi1/pUmXKaFxYsDNy9RQYkMWRH68J/W7Y= +github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/gorilla/websocket v1.4.1/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= +github.com/imdario/mergo v0.3.12 h1:b6R2BslTbIEToALKP7LxUvijTsNI9TAe80pLWN2g/HU= +github.com/imdario/mergo v0.3.12/go.mod h1:jmQim1M+e3UYxmgPu/WyfjB3N3VflVyUjjjwH0dnCYA= +github.com/jackmordaunt/icns v1.0.0/go.mod h1:7TTQVEuGzVVfOPPlLNHJIkzA6CoV7aH1Dv9dW351oOo= +github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99/go.mod h1:1lJo3i6rXxKeerYnT8Nvf0QmHCRC1n8sfWVwXF2Frvo= +github.com/jchv/go-winloader v0.0.0-20200815041850-dec1ee9a7fd5/go.mod h1:alcuEEnZsY1WQsagKhZDsoPCRoOijYqhZvPwLG0kzVs= +github.com/jchv/go-winloader v0.0.0-20210711035445-715c2860da7e h1:Q3+PugElBCf4PFpxhErSzU3/PY5sFL5Z6rfv4AbGAck= +github.com/jchv/go-winloader v0.0.0-20210711035445-715c2860da7e/go.mod h1:alcuEEnZsY1WQsagKhZDsoPCRoOijYqhZvPwLG0kzVs= +github.com/jessevdk/go-flags v1.5.0/go.mod h1:Fw0T6WPc1dYxT4mKEZRfG5kJhaTDP9pj1c2EWnYs/m4= +github.com/json-iterator/go v1.1.9/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= +github.com/kevinburke/ssh_config v0.0.0-20201106050909-4977a11b4351/go.mod h1:CT57kijsi8u/K/BOFA39wgDQJ9CxiF4nAY/ojJ6r6mM= +github.com/klauspost/compress v1.8.2/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A= +github.com/klauspost/compress v1.10.3/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= +github.com/klauspost/compress v1.12.2 h1:2KCfW3I9M7nSc5wOqXAlW2v2U6v+w6cbjvbfp+OykW8= +github.com/klauspost/compress v1.12.2/go.mod h1:8dP1Hq4DHOhN9w426knH3Rhby4rFm6D8eO+e+Dq5Gzg= +github.com/klauspost/cpuid v1.2.1/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek= +github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= +github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= +github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= +github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= +github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= +github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= +github.com/leaanthony/clir v1.0.4/go.mod h1:k/RBkdkFl18xkkACMCLt09bhiZnrGORoxmomeMvDpE0= +github.com/leaanthony/debme v1.2.1 h1:9Tgwf+kjcrbMQ4WnPcEIUcQuIZYqdWftzZkBr+i/oOc= +github.com/leaanthony/debme v1.2.1/go.mod h1:3V+sCm5tYAgQymvSOfYQ5Xx2JCr+OXiD9Jkw3otUjiA= +github.com/leaanthony/go-ansi-parser v1.0.1 h1:97v6c5kYppVsbScf4r/VZdXyQ21KQIfeQOk2DgKxGG4= +github.com/leaanthony/go-ansi-parser v1.0.1/go.mod h1:7arTzgVI47srICYhvgUV4CGd063sGEeoSlych5yeSPM= +github.com/leaanthony/go-common-file-dialog v1.0.3 h1:O0uGjKnWtdEADGrkg+TyAAbZylykMwwx/MNEXn9fp+Y= +github.com/leaanthony/go-common-file-dialog v1.0.3/go.mod h1:TGhEc9eSJgRsupZ+iH1ZgAOnEo9zp05cRH2j08RPrF0= +github.com/leaanthony/gosod v1.0.3/go.mod h1:BJ2J+oHsQIyIQpnLPjnqFGTMnOZXDbvWtRCSG7jGxs4= +github.com/leaanthony/idgen v1.0.0/go.mod h1:4nBZnt8ml/f/ic/EVQuLxuj817RccT2fyrUaZFxrcVA= +github.com/leaanthony/slicer v1.5.0 h1:aHYTN8xbCCLxJmkNKiLB6tgcMARl4eWmH9/F+S/0HtY= +github.com/leaanthony/slicer v1.5.0/go.mod h1:FwrApmf8gOrpzEWM2J/9Lh79tyq8KTX5AzRtwV7m4AY= +github.com/leaanthony/typescriptify-golang-structs v0.1.7 h1:yoznzWzyxkO/iWdlpq+aPcuJ5Y/hpjq/lmgMFmpjwl0= +github.com/leaanthony/typescriptify-golang-structs v0.1.7/go.mod h1:cWtOkiVhMF77e6phAXUcfNwYmMwCJ67Sij24lfvi9Js= +github.com/leaanthony/winicon v1.0.0/go.mod h1:en5xhijl92aphrJdmRPlh4NI1L6wq3gEm0LpXAPghjU= +github.com/leodido/go-urn v1.2.0/go.mod h1:+8+nEpDfqqsY+g338gtMEUOtuK+4dEMhiQEgxpxOKII= +github.com/logrusorgru/aurora v0.0.0-20181002194514-a7b3b318ed4e/go.mod h1:7rIyQOR62GCctdiQpZ/zOJlFyk6y+94wXzv6RNZgaR4= +github.com/matryer/is v1.4.0 h1:sosSmIWwkYITGrxZ25ULNDeKiMNzFSr4V/eqBQP0PeE= +github.com/matryer/is v1.4.0/go.mod h1:8I/i5uYgLzgsgEloJE1U6xx5HkBQpAZvepWuujKwMRU= +github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= +github.com/mattn/go-runewidth v0.0.7/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI= +github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= +github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= +github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= +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/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= +github.com/olekukonko/tablewriter v0.0.4/go.mod h1:zq6QwlOf5SlnkVbMSr5EoBv3636FWnp+qbPhuoO21uA= +github.com/pkg/browser v0.0.0-20210706143420-7d21f8c997e2 h1:acNfDZXmm28D2Yg/c3ALnZStzNaZMSagpbr96vY6Zjc= +github.com/pkg/browser v0.0.0-20210706143420-7d21f8c997e2/go.mod h1:HKlIX3XHQyzLZPlr7++PzdhaXEj94dEiJgZDTsxEqUI= +github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= +github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= +github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/savsgio/gotils v0.0.0-20200117113501-90175b0fbe3f h1:PgA+Olipyj258EIEYnpFFONrrCcAIWNUNoFhUfMqAGY= +github.com/savsgio/gotils v0.0.0-20200117113501-90175b0fbe3f/go.mod h1:lHhJedqxCoHN+zMtwGNTXWmF0u9Jt363FYRhV6g0CdY= +github.com/sergi/go-diff v1.1.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM= +github.com/sirupsen/logrus v1.4.1/go.mod h1:ni0Sbl8bgC9z8RoU9G6nDWqqs/fq4eDPysMBDgk/93Q= +github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= +github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= +github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= +github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY= +github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/tc-hib/winres v0.1.5/go.mod h1:pe6dOR40VOrGz8PkzreVKNvEKnlE8t4yR8A8naL+t7A= +github.com/tdewolff/minify v2.3.6+incompatible/go.mod h1:9Ov578KJUmAWpS6NeZwRZyT56Uf6o3Mcz9CEsg8USYs= +github.com/tdewolff/parse v2.3.4+incompatible/go.mod h1:8oBwCsVmUkgHO8M5iCzSIDtpzXOT0WXX9cWhz+bIzJQ= +github.com/tdewolff/test v1.0.6/go.mod h1:6DAvZliBAAnD7rhVgwaM7DE5/d9NMOAJ09SqYqeK4QE= +github.com/tidwall/gjson v1.8.0/go.mod h1:5/xDoumyyDNerp2U36lyolv46b3uF/9Bu6OfyQ9GImk= +github.com/tidwall/match v1.0.3/go.mod h1:eRSPERbgtNPcGhD8UCthc6PmLEQXEWd3PRB5JTxsfmM= +github.com/tidwall/pretty v1.1.0/go.mod h1:XNkn88O1ChpSDQmQeStsy+sBenx6DDtFZJxhVysOjyk= +github.com/tidwall/sjson v1.1.7/go.mod h1:w/yG+ezBeTdUxiKs5NcPicO9diP38nk96QBAbIIGeFs= +github.com/tkrajina/go-reflector v0.5.5 h1:gwoQFNye30Kk7NrExj8zm3zFtrGPqOkzFMLuQZg1DtQ= +github.com/tkrajina/go-reflector v0.5.5/go.mod h1:ECbqLgccecY5kPmPmXg1MrHW585yMcDkVl6IvJe64T4= +github.com/ugorji/go v1.1.7/go.mod h1:kZn38zHttfInRq0xu/PH0az30d+z6vm202qpg1oXVMw= +github.com/ugorji/go/codec v1.1.7/go.mod h1:Ax+UKWsSmolVDwsd+7N3ZtXu+yMGCf907BLYF3GoBXY= +github.com/valyala/bytebufferpool v1.0.0 h1:GqA5TC/0021Y/b9FG4Oi9Mr3q7XYx6KllzawFIhcdPw= +github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc= +github.com/valyala/fasthttp v1.9.0/go.mod h1:FstJa9V+Pj9vQ7OJie2qMHdwemEDaDiSdBnvPM1Su9w= +github.com/valyala/fasthttp v1.26.0/go.mod h1:cmWIqlu99AO/RKcp1HWaViTqc57FswJOfYYdPJBl8BA= +github.com/valyala/fasthttp v1.28.0 h1:ruVmTmZaBR5i67NqnjvvH5gEv0zwHfWtbjoyW98iho4= +github.com/valyala/fasthttp v1.28.0/go.mod h1:cmWIqlu99AO/RKcp1HWaViTqc57FswJOfYYdPJBl8BA= +github.com/valyala/tcplisten v0.0.0-20161114210144-ceec8f93295a/go.mod h1:v3UYOV9WzVtRmSR+PDvWpU/qWl4Wa5LApYYX4ZtKbio= +github.com/valyala/tcplisten v1.0.0 h1:rBHj/Xf+E1tRGZyWIWwJDiRY0zc1Js+CV5DqwacVSA8= +github.com/valyala/tcplisten v1.0.0/go.mod h1:T0xQ8SeCZGxckz9qRXTfG43PvQ/mcWh7FwZEA7Ioqkc= +github.com/wailsapp/wails/v2 v2.0.0-beta.3 h1:8vhBbnjpYDF6cCUwKadon7J/98UjcP1nrnptUl70Tfg= +github.com/wailsapp/wails/v2 v2.0.0-beta.3/go.mod h1:aku28riyHF2G5jmx/qtxjLWi7VwpTjhhX/HVLCptWFA= +github.com/wzshiming/ctc v1.2.3/go.mod h1:2tVAtIY7SUyraSk0JxvwmONNPFL4ARavPuEsg5+KA28= +github.com/wzshiming/winseq v0.0.0-20200112104235-db357dc107ae/go.mod h1:VTAq37rkGeV+WOybvZwjXiJOicICdpLCN8ifpISjK20= +github.com/xanzy/ssh-agent v0.3.0/go.mod h1:3s9xbODqPuuhK9JV1R321M/FlMZSBvE5aY6eAcqrDh0= +github.com/xyproto/xpm v1.2.1/go.mod h1:cMnesLsD0PBXLgjDfTDEaKr8XyTFsnP1QycSqRw7BiY= +github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +github.com/ztrue/tracerr v0.3.0/go.mod h1:qEalzze4VN9O8tnhBXScfCrmoJo10o8TN5ciKjm6Mww= +golang.org/x/crypto v0.0.0-20190219172222-a4c6cb3142f2/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= +golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20210322153248-0c34fe9e7dc2/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= +golang.org/x/crypto v0.0.0-20210513164829-c07d793c2f9a/go.mod h1:P+XmwS30IXTQdn5tA2iutPOUgjI07+tq3H3K9MVA1s8= +golang.org/x/image v0.0.0-20200430140353-33d19683fad8/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= +golang.org/x/image v0.0.0-20201208152932-35266b937fa6/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= +golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/mod v0.4.1/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20190827160401-ba9fcec4b297/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= +golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= +golang.org/x/net v0.0.0-20210326060303-6b1517762897/go.mod h1:uSPa2vr4CLtc/ILN5odXGNXS6mhrKVzTaCXzk9m6W3k= +golang.org/x/net v0.0.0-20210505024714-0287a6fb4125/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20210510120150-4163338589ed h1:p9UgmWI9wKpfYmgaV/IZKGdXc5qEK45tDwwwDyjS26I= +golang.org/x/net v0.0.0-20210510120150-4163338589ed/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190916202348-b4ddaad3f8a3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200107162124-548cf772de50/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200302150141-5c8b2ff67527/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200810151505-1b9f1253b3ed/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200814200057-3d37ad5750ed/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210320140829-1e4c9ba3b0c4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210324051608-47abb6519492/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210514084401-e8d321eab015/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210611083646-a4fc73990273/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210616045830-e2b7044e8c71/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210927094055-39ccf1dd6fa6 h1:foEbQz/B0Oz6YIqu/69kfXPYeFQAuuMYFkjaqXzl5Wo= +golang.org/x/sys v0.0.0-20210927094055-39ccf1dd6fa6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= +golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= +golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0= +golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= +google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= +gopkg.in/warnings.v0 v0.1.2/go.mod h1:jksf8JmL6Qr/oQM2OXTHunEvvTAsrWBLb6OOjuVWRNI= +gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.3.0 h1:clyUAQHOM3G0M3f5vQj7LuJrETvjVot3Z5el9nffUtU= +gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c h1:dUUwHk2QECo/6vqA44rthZ8ie2QXMNeKRTHCNY2nXvo= +gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +nhooyr.io/websocket v1.8.6/go.mod h1:B70DZP8IakI65RVQ51MsWP/8jndNma26DVA/nFSCgW0= diff --git a/v2/cmd/wails/internal/commands/initialise/templates/generate/plain/main.tmpl.go b/v2/cmd/wails/internal/commands/initialise/templates/generate/plain/main.tmpl.go new file mode 100644 index 000000000..5a79b1fe7 --- /dev/null +++ b/v2/cmd/wails/internal/commands/initialise/templates/generate/plain/main.tmpl.go @@ -0,0 +1,83 @@ +package main + +import ( + "embed" + "log" + + "github.com/wailsapp/wails/v2/pkg/options/mac" + + "github.com/wailsapp/wails/v2" + "github.com/wailsapp/wails/v2/pkg/logger" + "github.com/wailsapp/wails/v2/pkg/options" + "github.com/wailsapp/wails/v2/pkg/options/windows" +) + +//go:embed frontend/src +var assets embed.FS + +//go:embed build/appicon.png +var icon []byte + +func main() { + // Create an instance of the app structure + app := NewApp() + + // Create application with options + err := wails.Run(&options.App{ + Title: "{{.ProjectName}}", + Width: 1024, + Height: 768, + MinWidth: 1024, + MinHeight: 768, + MaxWidth: 1280, + MaxHeight: 800, + DisableResize: false, + Fullscreen: false, + Frameless: false, + StartHidden: false, + HideWindowOnClose: false, + RGBA: &options.RGBA{R: 255, G: 255, B: 255, A: 255}, + Assets: assets, + Menu: nil, + Logger: nil, + LogLevel: logger.DEBUG, + OnStartup: app.startup, + OnDomReady: app.domReady, + OnBeforeClose: app.beforeClose, + OnShutdown: app.shutdown, + WindowStartState: options.Normal, + Bind: []interface{}{ + app, + }, + // Windows platform specific options + Windows: &windows.Options{ + WebviewIsTransparent: false, + WindowIsTranslucent: false, + DisableWindowIcon: false, + // DisableFramelessWindowDecorations: false, + WebviewUserDataPath: "", + }, + Mac: &mac.Options{ + TitleBar: &mac.TitleBar{ + TitlebarAppearsTransparent: true, + HideTitle: false, + HideTitleBar: false, + FullSizeContent: false, + UseToolbar: false, + HideToolbarSeparator: true, + }, + Appearance: mac.NSAppearanceNameDarkAqua, + WebviewIsTransparent: true, + WindowIsTranslucent: true, + About: &mac.AboutInfo{ + Title: "Plain Template", + Message: "Part of the Wails projects", + Icon: icon, + }, + }, + }) + + if err != nil { + log.Fatal(err) + } +} diff --git a/v2/cmd/wails/internal/commands/initialise/templates/generate/plain/template.json b/v2/cmd/wails/internal/commands/initialise/templates/generate/plain/template.json new file mode 100644 index 000000000..fc919bc3b --- /dev/null +++ b/v2/cmd/wails/internal/commands/initialise/templates/generate/plain/template.json @@ -0,0 +1,7 @@ +{ + "name": "Plain HTML/JS/CSS", + "shortname": "plain", + "author": "Lea Anthony ", + "description": "A simple template using only HTML/CSS/JS", + "helpurl": "https://github.com/wailsapp/wails" +} diff --git a/v2/cmd/wails/internal/commands/initialise/templates/generate/plain/wails.tmpl.json b/v2/cmd/wails/internal/commands/initialise/templates/generate/plain/wails.tmpl.json new file mode 100644 index 000000000..b010f3203 --- /dev/null +++ b/v2/cmd/wails/internal/commands/initialise/templates/generate/plain/wails.tmpl.json @@ -0,0 +1,9 @@ +{ + "name": "{{.ProjectName}}", + "outputfilename": "{{.BinaryName}}", + "wailsjsdir": "./frontend", + "author": { + "name": "{{.AuthorName}}", + "email": "{{.AuthorEmail}}" + } +} diff --git a/v2/cmd/wails/internal/commands/initialise/templates/templates/plain/.gitignore b/v2/cmd/wails/internal/commands/initialise/templates/templates/plain/.gitignore new file mode 100644 index 000000000..b92a6f8bf --- /dev/null +++ b/v2/cmd/wails/internal/commands/initialise/templates/templates/plain/.gitignore @@ -0,0 +1,12 @@ +# Wails bin directory +build/bin +# Wails Windows NSIS support files +build/windows/installer/wails_tools.nsh +build/windows/installer/tmp/ + +# IDEs +.idea +.vscode + +# The black hole that is... +node_modules diff --git a/v2/cmd/wails/internal/commands/initialise/templates/templates/plain/README.md b/v2/cmd/wails/internal/commands/initialise/templates/templates/plain/README.md new file mode 100644 index 000000000..9fcd85bdd --- /dev/null +++ b/v2/cmd/wails/internal/commands/initialise/templates/templates/plain/README.md @@ -0,0 +1,18 @@ +# README + +## About + +This template uses plain JS / HTML and CSS. + +You can configure the project by editing `wails.json`. More information about the project settings can be found +here: https://wails.io/docs/reference/project-config + +## Live Development + +To run in live development mode, run `wails dev` in the project directory. The frontend dev server will run +on http://localhost:34115. Open this in your browser to connect to your application. + +## Building + +For a production build, use `wails build`. + diff --git a/v2/cmd/wails/internal/commands/initialise/templates/templates/plain/app.go b/v2/cmd/wails/internal/commands/initialise/templates/templates/plain/app.go new file mode 100644 index 000000000..224be7156 --- /dev/null +++ b/v2/cmd/wails/internal/commands/initialise/templates/templates/plain/app.go @@ -0,0 +1,44 @@ +package main + +import ( + "context" + "fmt" +) + +// App struct +type App struct { + ctx context.Context +} + +// NewApp creates a new App application struct +func NewApp() *App { + return &App{} +} + +// startup is called at application startup +func (a *App) startup(ctx context.Context) { + // Perform your setup here + a.ctx = ctx +} + +// domReady is called after front-end resources have been loaded +func (a App) domReady(ctx context.Context) { + // Add your action here +} + +// beforeClose is called when the application is about to quit, +// either by clicking the window close button or calling runtime.Quit. +// Returning true will cause the application to continue, false will continue shutdown as normal. +func (a *App) beforeClose(ctx context.Context) (prevent bool) { + return false +} + +// shutdown is called at application termination +func (a *App) shutdown(ctx context.Context) { + // Perform your teardown here +} + +// Greet returns a greeting for the given name +func (a *App) Greet(name string) string { + return fmt.Sprintf("Hello %s, It's show time!", name) +} diff --git a/v2/cmd/wails/internal/commands/initialise/templates/templates/plain/frontend/src/assets/fonts/OFL.txt b/v2/cmd/wails/internal/commands/initialise/templates/templates/plain/frontend/src/assets/fonts/OFL.txt new file mode 100644 index 000000000..9cac04ce8 --- /dev/null +++ b/v2/cmd/wails/internal/commands/initialise/templates/templates/plain/frontend/src/assets/fonts/OFL.txt @@ -0,0 +1,93 @@ +Copyright 2016 The Nunito Project Authors (contact@sansoxygen.com), + +This Font Software is licensed under the SIL Open Font License, Version 1.1. +This license is copied below, and is also available with a FAQ at: +http://scripts.sil.org/OFL + + +----------------------------------------------------------- +SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 +----------------------------------------------------------- + +PREAMBLE +The goals of the Open Font License (OFL) are to stimulate worldwide +development of collaborative font projects, to support the font creation +efforts of academic and linguistic communities, and to provide a free and +open framework in which fonts may be shared and improved in partnership +with others. + +The OFL allows the licensed fonts to be used, studied, modified and +redistributed freely as long as they are not sold by themselves. The +fonts, including any derivative works, can be bundled, embedded, +redistributed and/or sold with any software provided that any reserved +names are not used by derivative works. The fonts and derivatives, +however, cannot be released under any other type of license. The +requirement for fonts to remain under this license does not apply +to any document created using the fonts or their derivatives. + +DEFINITIONS +"Font Software" refers to the set of files released by the Copyright +Holder(s) under this license and clearly marked as such. This may +include source files, build scripts and documentation. + +"Reserved Font Name" refers to any names specified as such after the +copyright statement(s). + +"Original Version" refers to the collection of Font Software components as +distributed by the Copyright Holder(s). + +"Modified Version" refers to any derivative made by adding to, deleting, +or substituting -- in part or in whole -- any of the components of the +Original Version, by changing formats or by porting the Font Software to a +new environment. + +"Author" refers to any designer, engineer, programmer, technical +writer or other person who contributed to the Font Software. + +PERMISSION & CONDITIONS +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Font Software, to use, study, copy, merge, embed, modify, +redistribute, and sell modified and unmodified copies of the Font +Software, subject to the following conditions: + +1) Neither the Font Software nor any of its individual components, +in Original or Modified Versions, may be sold by itself. + +2) Original or Modified Versions of the Font Software may be bundled, +redistributed and/or sold with any software, provided that each copy +contains the above copyright notice and this license. These can be +included either as stand-alone text files, human-readable headers or +in the appropriate machine-readable metadata fields within text or +binary files as long as those fields can be easily viewed by the user. + +3) No Modified Version of the Font Software may use the Reserved Font +Name(s) unless explicit written permission is granted by the corresponding +Copyright Holder. This restriction only applies to the primary font name as +presented to the users. + +4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font +Software shall not be used to promote, endorse or advertise any +Modified Version, except to acknowledge the contribution(s) of the +Copyright Holder(s) and the Author(s) or with their explicit written +permission. + +5) The Font Software, modified or unmodified, in part or in whole, +must be distributed entirely under this license, and must not be +distributed under any other license. The requirement for fonts to +remain under this license does not apply to any document created +using the Font Software. + +TERMINATION +This license becomes null and void if any of the above conditions are +not met. + +DISCLAIMER +THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT +OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE +COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM +OTHER DEALINGS IN THE FONT SOFTWARE. diff --git a/v2/cmd/wails/internal/commands/initialise/templates/templates/plain/frontend/src/assets/fonts/nunito-v16-latin-regular.woff2 b/v2/cmd/wails/internal/commands/initialise/templates/templates/plain/frontend/src/assets/fonts/nunito-v16-latin-regular.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..2f9cc5964455b8f5ca989db989250dbebb1a5f66 GIT binary patch literal 18972 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 literal 0 HcmV?d00001 diff --git a/v2/cmd/wails/internal/commands/initialise/templates/templates/plain/frontend/src/index.tmpl.html b/v2/cmd/wails/internal/commands/initialise/templates/templates/plain/frontend/src/index.tmpl.html new file mode 100644 index 000000000..a8a434a37 --- /dev/null +++ b/v2/cmd/wails/internal/commands/initialise/templates/templates/plain/frontend/src/index.tmpl.html @@ -0,0 +1,21 @@ + + + + + + {{.ProjectName}} + + + + +

+ +
Please enter your name below 👇
+
+ + +
+
+ + + diff --git a/v2/cmd/wails/internal/commands/initialise/templates/templates/plain/frontend/src/main.css b/v2/cmd/wails/internal/commands/initialise/templates/templates/plain/frontend/src/main.css new file mode 100644 index 000000000..dab87d09a --- /dev/null +++ b/v2/cmd/wails/internal/commands/initialise/templates/templates/plain/frontend/src/main.css @@ -0,0 +1,82 @@ +html { + background-color: rgba(27, 38, 54, 1); + text-align: center; + color: white; +} + +body { + margin: 0; + color: white; + font-family: "Nunito", -apple-system, BlinkMacSystemFont, "Segoe UI", "Roboto", + "Oxygen", "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue", + sans-serif; +} + +@font-face { + font-family: "Nunito"; + font-style: normal; + font-weight: 400; + src: local(""), + url("assets/fonts/nunito-v16-latin-regular.woff2") format("woff2"); +} + +#app { + height: 100vh; + text-align: center; +} + +.logo { + display: block; + width: 50%; + height: 50%; + margin: auto; + padding: 10% 0 0; + background-position: center; + background-repeat: no-repeat; + background-image: url("./assets/images/logo-universal.png"); + background-size: 100% 100%; + background-origin: content-box; +} + +.result { + height: 20px; + line-height: 20px; + margin: 1.5rem auto; +} + +.input-box .btn { + width: 60px; + height: 30px; + line-height: 30px; + border-radius: 3px; + border: none; + margin: 0 0 0 20px; + padding: 0 8px; + cursor: pointer; +} + +.input-box .btn:hover { + background-image: linear-gradient(to top, #cfd9df 0%, #e2ebf0 100%); + color: #333333; +} + +.input-box .input { + border: none; + border-radius: 3px; + outline: none; + height: 30px; + line-height: 30px; + padding: 0 10px; + background-color: rgba(240, 240, 240, 1); + -webkit-font-smoothing: antialiased; +} + +.input-box .input:hover { + border: none; + background-color: rgba(255, 255, 255, 1); +} + +.input-box .input:focus { + border: none; + background-color: rgba(255, 255, 255, 1); +} diff --git a/v2/cmd/wails/internal/commands/initialise/templates/templates/plain/frontend/src/main.js b/v2/cmd/wails/internal/commands/initialise/templates/templates/plain/frontend/src/main.js new file mode 100644 index 000000000..3346d59ff --- /dev/null +++ b/v2/cmd/wails/internal/commands/initialise/templates/templates/plain/frontend/src/main.js @@ -0,0 +1,32 @@ +// Get input + focus +let nameElement = document.getElementById("name"); +nameElement.focus(); + +// Setup the greet function +window.greet = function () { + // Get name + let name = nameElement.value; + + // Check if the input is empty + if (name === "") return; + + // Call App.Greet(name) + try { + window.go.main.App.Greet(name) + .then((result) => { + // Update result with data back from App.Greet() + document.getElementById("result").innerText = result; + }) + .catch((err) => { + console.error(err); + }); + } catch (err) { + console.error(err); + } +}; + +nameElement.onkeydown = function (e) { + if (e.keyCode == 13) { + window.greet(); + } +}; diff --git a/v2/cmd/wails/internal/commands/initialise/templates/templates/plain/go.mod.tmpl b/v2/cmd/wails/internal/commands/initialise/templates/templates/plain/go.mod.tmpl new file mode 100644 index 000000000..d3e1921a2 --- /dev/null +++ b/v2/cmd/wails/internal/commands/initialise/templates/templates/plain/go.mod.tmpl @@ -0,0 +1,35 @@ +module changeme + +go 1.17 + +require github.com/wailsapp/wails/v2 {{.WailsVersion}} + +require ( +github.com/andybalholm/brotli v1.0.2 // indirect +github.com/davecgh/go-spew v1.1.1 // indirect +github.com/fasthttp/websocket v0.0.0-20200320073529-1554a54587ab // indirect +github.com/wailsapp/mimetype v1.4.1-beta.1 +github.com/go-ole/go-ole v1.2.5 // indirect +github.com/gofiber/fiber/v2 v2.17.0 // indirect +github.com/gofiber/websocket/v2 v2.0.8 // indirect +github.com/google/uuid v1.1.2 // indirect +github.com/imdario/mergo v0.3.12 // indirect +github.com/jchv/go-winloader v0.0.0-20200815041850-dec1ee9a7fd5 // indirect +github.com/klauspost/compress v1.12.2 // indirect +github.com/leaanthony/debme v1.2.1 // indirect +github.com/leaanthony/go-ansi-parser v1.0.1 // indirect +github.com/leaanthony/go-common-file-dialog v1.0.3 // indirect +github.com/leaanthony/slicer v1.5.0 // indirect +github.com/leaanthony/typescriptify-golang-structs v0.1.7 // indirect +github.com/pkg/browser v0.0.0-20210706143420-7d21f8c997e2 // indirect +github.com/pkg/errors v0.9.1 // indirect +github.com/savsgio/gotils v0.0.0-20200117113501-90175b0fbe3f // indirect +github.com/tkrajina/go-reflector v0.5.5 // indirect +github.com/valyala/bytebufferpool v1.0.0 // indirect +github.com/valyala/fasthttp v1.28.0 // indirect +github.com/valyala/tcplisten v1.0.0 // indirect +golang.org/x/net v0.0.0-20210510120150-4163338589ed // indirect +golang.org/x/sys v0.0.0-20210823070655-63515b42dcdf // indirect +) + +// replace github.com/wailsapp/wails/v2 {{.WailsVersion}} => {{.WailsDirectory}} diff --git a/v2/cmd/wails/internal/commands/initialise/templates/templates/plain/go.sum b/v2/cmd/wails/internal/commands/initialise/templates/templates/plain/go.sum new file mode 100644 index 000000000..4ba840926 --- /dev/null +++ b/v2/cmd/wails/internal/commands/initialise/templates/templates/plain/go.sum @@ -0,0 +1,222 @@ +github.com/Masterminds/semver v1.5.0/go.mod h1:MB6lktGJrhw8PrUyiEoblNEGEQ+RzHPF078ddwwvV3Y= +github.com/Microsoft/go-winio v0.4.14/go.mod h1:qXqCSQ3Xa7+6tgxaGTIe4Kpcdsi+P8jBhyzoq1bpyYA= +github.com/Microsoft/go-winio v0.4.16/go.mod h1:XB6nPKklQyQ7GC9LdcBEcBl8PF76WugXOPRXwdLnMv0= +github.com/alcortesm/tgz v0.0.0-20161220082320-9c5fe88206d7/go.mod h1:6zEj6s6u/ghQa61ZWa/C2Aw3RkjiTBOix7dkqa1VLIs= +github.com/andybalholm/brotli v1.0.2 h1:JKnhI/XQ75uFBTiuzXpzFrUriDPiZjlOSzh6wXogP0E= +github.com/andybalholm/brotli v1.0.2/go.mod h1:loMXtMfwqflxFJPmdbJO0a3KNoPuLBgiu3qAvBg8x/Y= +github.com/anmitsu/go-shlex v0.0.0-20161002113705-648efa622239/go.mod h1:2FmKhYUyUczH0OGQWaF5ceTx0UBShxjsH6f8oGKYe2c= +github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5/go.mod h1:wHh0iHkYZB8zMSxRWpUBQtwG5a7fFgvEO+odwuTv2gs= +github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= +github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= +github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/emirpasic/gods v1.12.0/go.mod h1:YfzfFFoVP/catgzJb4IKIqXjX78Ha8FMSDh3ymbK86o= +github.com/fasthttp/websocket v0.0.0-20200320073529-1554a54587ab h1:9e2joQGp642wHGFP5m86SDptAavrdGBe8/x9DGEEAaI= +github.com/fasthttp/websocket v0.0.0-20200320073529-1554a54587ab/go.mod h1:smsv/h4PBEBaU0XDTY5UwJTpZv69fQ0FfcLJr21mA6Y= +github.com/fatih/structtag v1.2.0/go.mod h1:mBJUNpUnHmRKrKlQQlmCrh5PuhftFbNv8Ys4/aAZl94= +github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568/go.mod h1:xEzjJPgXI435gkrCt3MPfRiAkVrwSbHsst4LCFVfpJc= +github.com/flytam/filenamify v1.0.0/go.mod h1:Dzf9kVycwcsBlr2ATg6uxjqiFgKGH+5SKFuhdeP5zu8= +github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= +github.com/wailsapp/mimetype v1.4.1-beta.1 h1:gSnKX7WH+7aA0EEjOGUmpWXTb0Nt5B7/8Dm9wHLrnnY= +github.com/wailsapp/mimetype v1.4.1-beta.1/go.mod h1:9aV5k31bBOv5z6u+QP8TltzvNGJPmNJD4XlAL3U+j3o= +github.com/gin-contrib/sse v0.1.0/go.mod h1:RHrZQHXnP2xjPF+u1gW/2HnVO7nvIa9PG3Gm+fLHvGI= +github.com/gin-gonic/gin v1.6.3/go.mod h1:75u5sXoLsGZoRN5Sgbi1eraJ4GU3++wFwWzhwvtwp4M= +github.com/gliderlabs/ssh v0.2.2/go.mod h1:U7qILu1NlMHj9FlMhZLlkCdDnU1DBEAqr0aevW3Awn0= +github.com/go-git/gcfg v1.5.0/go.mod h1:5m20vg6GwYabIxaOonVkTdrILxQMpEShl1xiMF4ua+E= +github.com/go-git/go-billy/v5 v5.0.0/go.mod h1:pmpqyWchKfYfrkb/UVH4otLvyi/5gJlGI4Hb3ZqZ3W0= +github.com/go-git/go-billy/v5 v5.1.0/go.mod h1:pmpqyWchKfYfrkb/UVH4otLvyi/5gJlGI4Hb3ZqZ3W0= +github.com/go-git/go-billy/v5 v5.2.0/go.mod h1:pmpqyWchKfYfrkb/UVH4otLvyi/5gJlGI4Hb3ZqZ3W0= +github.com/go-git/go-git-fixtures/v4 v4.0.2-0.20200613231340-f56387b50c12/go.mod h1:m+ICp2rF3jDhFgEZ/8yziagdT1C+ZpZcrJjappBCDSw= +github.com/go-git/go-git/v5 v5.3.0/go.mod h1:xdX4bWJ48aOrdhnl2XqHYstHbbp6+LFS4r4X+lNVprw= +github.com/go-ole/go-ole v1.2.4/go.mod h1:XCwSNxSkXRo4vlyPy93sltvi/qJq0jqQhjqQNIwKuxM= +github.com/go-ole/go-ole v1.2.5 h1:t4MGB5xEDZvXI+0rMjjsfBsD7yAgp/s9ZDkL1JndXwY= +github.com/go-ole/go-ole v1.2.5/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0= +github.com/go-playground/assert/v2 v2.0.1/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4= +github.com/go-playground/locales v0.13.0/go.mod h1:taPMhCMXrRLJO55olJkUXHZBHCxTMfnGwq/HNwmWNS8= +github.com/go-playground/universal-translator v0.17.0/go.mod h1:UkSxE5sNxxRwHyU+Scu5vgOQjsIJAF8j9muTVoKLVtA= +github.com/go-playground/validator/v10 v10.2.0/go.mod h1:uOYAAleCW8F/7oMFd6aG0GOhaH6EGOAJShg8Id5JGkI= +github.com/gobwas/httphead v0.0.0-20180130184737-2c6c146eadee/go.mod h1:L0fX3K22YWvt/FAX9NnzrNzcI4wNYi9Yku4O0LKYflo= +github.com/gobwas/pool v0.2.0/go.mod h1:q8bcK0KcYlCgd9e7WYLm9LpyS+YeLd8JVDW6WezmKEw= +github.com/gobwas/ws v1.0.2/go.mod h1:szmBTxLgaFppYjEmNtny/v3w89xOydFnnZMcgRRu/EM= +github.com/gofiber/fiber/v2 v2.17.0 h1:qP3PkGUbBB0i9iQh5E057XI1yO5CZigUxZhyUFYAFoM= +github.com/gofiber/fiber/v2 v2.17.0/go.mod h1:iftruuHGkRYGEXVISmdD7HTYWyfS2Bh+Dkfq4n/1Owg= +github.com/gofiber/websocket/v2 v2.0.8 h1:Hb4y6IxYZVMO0segROODXJiXVgVD3a6i7wnfot8kM6k= +github.com/gofiber/websocket/v2 v2.0.8/go.mod h1:fv8HSGQX09sauNv9g5Xq8GeGAaahLFYQKKb4ZdT0x2w= +github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= +github.com/golang/protobuf v1.3.5/go.mod h1:6O5/vntMXwX2lRkT1hjjk0nAC1IDOTvTlVgjlRvqsdk= +github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= +github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= +github.com/golang/snappy v0.0.3/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= +github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= +github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= +github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/google/uuid v1.1.2 h1:EVhdT+1Kseyi1/pUmXKaFxYsDNy9RQYkMWRH68J/W7Y= +github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/gorilla/websocket v1.4.1/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= +github.com/imdario/mergo v0.3.12 h1:b6R2BslTbIEToALKP7LxUvijTsNI9TAe80pLWN2g/HU= +github.com/imdario/mergo v0.3.12/go.mod h1:jmQim1M+e3UYxmgPu/WyfjB3N3VflVyUjjjwH0dnCYA= +github.com/jackmordaunt/icns v1.0.0/go.mod h1:7TTQVEuGzVVfOPPlLNHJIkzA6CoV7aH1Dv9dW351oOo= +github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99/go.mod h1:1lJo3i6rXxKeerYnT8Nvf0QmHCRC1n8sfWVwXF2Frvo= +github.com/jchv/go-winloader v0.0.0-20200815041850-dec1ee9a7fd5/go.mod h1:alcuEEnZsY1WQsagKhZDsoPCRoOijYqhZvPwLG0kzVs= +github.com/jchv/go-winloader v0.0.0-20210711035445-715c2860da7e h1:Q3+PugElBCf4PFpxhErSzU3/PY5sFL5Z6rfv4AbGAck= +github.com/jchv/go-winloader v0.0.0-20210711035445-715c2860da7e/go.mod h1:alcuEEnZsY1WQsagKhZDsoPCRoOijYqhZvPwLG0kzVs= +github.com/jessevdk/go-flags v1.5.0/go.mod h1:Fw0T6WPc1dYxT4mKEZRfG5kJhaTDP9pj1c2EWnYs/m4= +github.com/json-iterator/go v1.1.9/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= +github.com/kevinburke/ssh_config v0.0.0-20201106050909-4977a11b4351/go.mod h1:CT57kijsi8u/K/BOFA39wgDQJ9CxiF4nAY/ojJ6r6mM= +github.com/klauspost/compress v1.8.2/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A= +github.com/klauspost/compress v1.10.3/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= +github.com/klauspost/compress v1.12.2 h1:2KCfW3I9M7nSc5wOqXAlW2v2U6v+w6cbjvbfp+OykW8= +github.com/klauspost/compress v1.12.2/go.mod h1:8dP1Hq4DHOhN9w426knH3Rhby4rFm6D8eO+e+Dq5Gzg= +github.com/klauspost/cpuid v1.2.1/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek= +github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= +github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= +github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= +github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= +github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= +github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= +github.com/leaanthony/clir v1.0.4/go.mod h1:k/RBkdkFl18xkkACMCLt09bhiZnrGORoxmomeMvDpE0= +github.com/leaanthony/debme v1.2.1 h1:9Tgwf+kjcrbMQ4WnPcEIUcQuIZYqdWftzZkBr+i/oOc= +github.com/leaanthony/debme v1.2.1/go.mod h1:3V+sCm5tYAgQymvSOfYQ5Xx2JCr+OXiD9Jkw3otUjiA= +github.com/leaanthony/go-ansi-parser v1.0.1 h1:97v6c5kYppVsbScf4r/VZdXyQ21KQIfeQOk2DgKxGG4= +github.com/leaanthony/go-ansi-parser v1.0.1/go.mod h1:7arTzgVI47srICYhvgUV4CGd063sGEeoSlych5yeSPM= +github.com/leaanthony/go-common-file-dialog v1.0.3 h1:O0uGjKnWtdEADGrkg+TyAAbZylykMwwx/MNEXn9fp+Y= +github.com/leaanthony/go-common-file-dialog v1.0.3/go.mod h1:TGhEc9eSJgRsupZ+iH1ZgAOnEo9zp05cRH2j08RPrF0= +github.com/leaanthony/gosod v1.0.3/go.mod h1:BJ2J+oHsQIyIQpnLPjnqFGTMnOZXDbvWtRCSG7jGxs4= +github.com/leaanthony/idgen v1.0.0/go.mod h1:4nBZnt8ml/f/ic/EVQuLxuj817RccT2fyrUaZFxrcVA= +github.com/leaanthony/slicer v1.5.0 h1:aHYTN8xbCCLxJmkNKiLB6tgcMARl4eWmH9/F+S/0HtY= +github.com/leaanthony/slicer v1.5.0/go.mod h1:FwrApmf8gOrpzEWM2J/9Lh79tyq8KTX5AzRtwV7m4AY= +github.com/leaanthony/typescriptify-golang-structs v0.1.7 h1:yoznzWzyxkO/iWdlpq+aPcuJ5Y/hpjq/lmgMFmpjwl0= +github.com/leaanthony/typescriptify-golang-structs v0.1.7/go.mod h1:cWtOkiVhMF77e6phAXUcfNwYmMwCJ67Sij24lfvi9Js= +github.com/leaanthony/winicon v1.0.0/go.mod h1:en5xhijl92aphrJdmRPlh4NI1L6wq3gEm0LpXAPghjU= +github.com/leodido/go-urn v1.2.0/go.mod h1:+8+nEpDfqqsY+g338gtMEUOtuK+4dEMhiQEgxpxOKII= +github.com/logrusorgru/aurora v0.0.0-20181002194514-a7b3b318ed4e/go.mod h1:7rIyQOR62GCctdiQpZ/zOJlFyk6y+94wXzv6RNZgaR4= +github.com/matryer/is v1.4.0 h1:sosSmIWwkYITGrxZ25ULNDeKiMNzFSr4V/eqBQP0PeE= +github.com/matryer/is v1.4.0/go.mod h1:8I/i5uYgLzgsgEloJE1U6xx5HkBQpAZvepWuujKwMRU= +github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= +github.com/mattn/go-runewidth v0.0.7/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI= +github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= +github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= +github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= +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/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= +github.com/olekukonko/tablewriter v0.0.4/go.mod h1:zq6QwlOf5SlnkVbMSr5EoBv3636FWnp+qbPhuoO21uA= +github.com/pkg/browser v0.0.0-20210706143420-7d21f8c997e2 h1:acNfDZXmm28D2Yg/c3ALnZStzNaZMSagpbr96vY6Zjc= +github.com/pkg/browser v0.0.0-20210706143420-7d21f8c997e2/go.mod h1:HKlIX3XHQyzLZPlr7++PzdhaXEj94dEiJgZDTsxEqUI= +github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= +github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= +github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/savsgio/gotils v0.0.0-20200117113501-90175b0fbe3f h1:PgA+Olipyj258EIEYnpFFONrrCcAIWNUNoFhUfMqAGY= +github.com/savsgio/gotils v0.0.0-20200117113501-90175b0fbe3f/go.mod h1:lHhJedqxCoHN+zMtwGNTXWmF0u9Jt363FYRhV6g0CdY= +github.com/sergi/go-diff v1.1.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM= +github.com/sirupsen/logrus v1.4.1/go.mod h1:ni0Sbl8bgC9z8RoU9G6nDWqqs/fq4eDPysMBDgk/93Q= +github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= +github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= +github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= +github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY= +github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/tc-hib/winres v0.1.5/go.mod h1:pe6dOR40VOrGz8PkzreVKNvEKnlE8t4yR8A8naL+t7A= +github.com/tdewolff/minify v2.3.6+incompatible/go.mod h1:9Ov578KJUmAWpS6NeZwRZyT56Uf6o3Mcz9CEsg8USYs= +github.com/tdewolff/parse v2.3.4+incompatible/go.mod h1:8oBwCsVmUkgHO8M5iCzSIDtpzXOT0WXX9cWhz+bIzJQ= +github.com/tdewolff/test v1.0.6/go.mod h1:6DAvZliBAAnD7rhVgwaM7DE5/d9NMOAJ09SqYqeK4QE= +github.com/tidwall/gjson v1.8.0/go.mod h1:5/xDoumyyDNerp2U36lyolv46b3uF/9Bu6OfyQ9GImk= +github.com/tidwall/match v1.0.3/go.mod h1:eRSPERbgtNPcGhD8UCthc6PmLEQXEWd3PRB5JTxsfmM= +github.com/tidwall/pretty v1.1.0/go.mod h1:XNkn88O1ChpSDQmQeStsy+sBenx6DDtFZJxhVysOjyk= +github.com/tidwall/sjson v1.1.7/go.mod h1:w/yG+ezBeTdUxiKs5NcPicO9diP38nk96QBAbIIGeFs= +github.com/tkrajina/go-reflector v0.5.5 h1:gwoQFNye30Kk7NrExj8zm3zFtrGPqOkzFMLuQZg1DtQ= +github.com/tkrajina/go-reflector v0.5.5/go.mod h1:ECbqLgccecY5kPmPmXg1MrHW585yMcDkVl6IvJe64T4= +github.com/ugorji/go v1.1.7/go.mod h1:kZn38zHttfInRq0xu/PH0az30d+z6vm202qpg1oXVMw= +github.com/ugorji/go/codec v1.1.7/go.mod h1:Ax+UKWsSmolVDwsd+7N3ZtXu+yMGCf907BLYF3GoBXY= +github.com/valyala/bytebufferpool v1.0.0 h1:GqA5TC/0021Y/b9FG4Oi9Mr3q7XYx6KllzawFIhcdPw= +github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc= +github.com/valyala/fasthttp v1.9.0/go.mod h1:FstJa9V+Pj9vQ7OJie2qMHdwemEDaDiSdBnvPM1Su9w= +github.com/valyala/fasthttp v1.26.0/go.mod h1:cmWIqlu99AO/RKcp1HWaViTqc57FswJOfYYdPJBl8BA= +github.com/valyala/fasthttp v1.28.0 h1:ruVmTmZaBR5i67NqnjvvH5gEv0zwHfWtbjoyW98iho4= +github.com/valyala/fasthttp v1.28.0/go.mod h1:cmWIqlu99AO/RKcp1HWaViTqc57FswJOfYYdPJBl8BA= +github.com/valyala/tcplisten v0.0.0-20161114210144-ceec8f93295a/go.mod h1:v3UYOV9WzVtRmSR+PDvWpU/qWl4Wa5LApYYX4ZtKbio= +github.com/valyala/tcplisten v1.0.0 h1:rBHj/Xf+E1tRGZyWIWwJDiRY0zc1Js+CV5DqwacVSA8= +github.com/valyala/tcplisten v1.0.0/go.mod h1:T0xQ8SeCZGxckz9qRXTfG43PvQ/mcWh7FwZEA7Ioqkc= +github.com/wailsapp/wails/v2 v2.0.0-beta.3 h1:8vhBbnjpYDF6cCUwKadon7J/98UjcP1nrnptUl70Tfg= +github.com/wailsapp/wails/v2 v2.0.0-beta.3/go.mod h1:aku28riyHF2G5jmx/qtxjLWi7VwpTjhhX/HVLCptWFA= +github.com/wzshiming/ctc v1.2.3/go.mod h1:2tVAtIY7SUyraSk0JxvwmONNPFL4ARavPuEsg5+KA28= +github.com/wzshiming/winseq v0.0.0-20200112104235-db357dc107ae/go.mod h1:VTAq37rkGeV+WOybvZwjXiJOicICdpLCN8ifpISjK20= +github.com/xanzy/ssh-agent v0.3.0/go.mod h1:3s9xbODqPuuhK9JV1R321M/FlMZSBvE5aY6eAcqrDh0= +github.com/xyproto/xpm v1.2.1/go.mod h1:cMnesLsD0PBXLgjDfTDEaKr8XyTFsnP1QycSqRw7BiY= +github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +github.com/ztrue/tracerr v0.3.0/go.mod h1:qEalzze4VN9O8tnhBXScfCrmoJo10o8TN5ciKjm6Mww= +golang.org/x/crypto v0.0.0-20190219172222-a4c6cb3142f2/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= +golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20210322153248-0c34fe9e7dc2/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= +golang.org/x/crypto v0.0.0-20210513164829-c07d793c2f9a/go.mod h1:P+XmwS30IXTQdn5tA2iutPOUgjI07+tq3H3K9MVA1s8= +golang.org/x/image v0.0.0-20200430140353-33d19683fad8/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= +golang.org/x/image v0.0.0-20201208152932-35266b937fa6/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= +golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/mod v0.4.1/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20190827160401-ba9fcec4b297/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= +golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= +golang.org/x/net v0.0.0-20210326060303-6b1517762897/go.mod h1:uSPa2vr4CLtc/ILN5odXGNXS6mhrKVzTaCXzk9m6W3k= +golang.org/x/net v0.0.0-20210505024714-0287a6fb4125/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20210510120150-4163338589ed h1:p9UgmWI9wKpfYmgaV/IZKGdXc5qEK45tDwwwDyjS26I= +golang.org/x/net v0.0.0-20210510120150-4163338589ed/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190916202348-b4ddaad3f8a3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200107162124-548cf772de50/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200302150141-5c8b2ff67527/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200810151505-1b9f1253b3ed/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200814200057-3d37ad5750ed/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210320140829-1e4c9ba3b0c4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210324051608-47abb6519492/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210514084401-e8d321eab015/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210611083646-a4fc73990273/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210616045830-e2b7044e8c71/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210927094055-39ccf1dd6fa6 h1:foEbQz/B0Oz6YIqu/69kfXPYeFQAuuMYFkjaqXzl5Wo= +golang.org/x/sys v0.0.0-20210927094055-39ccf1dd6fa6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= +golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= +golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0= +golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= +google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= +gopkg.in/warnings.v0 v0.1.2/go.mod h1:jksf8JmL6Qr/oQM2OXTHunEvvTAsrWBLb6OOjuVWRNI= +gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.3.0 h1:clyUAQHOM3G0M3f5vQj7LuJrETvjVot3Z5el9nffUtU= +gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c h1:dUUwHk2QECo/6vqA44rthZ8ie2QXMNeKRTHCNY2nXvo= +gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +nhooyr.io/websocket v1.8.6/go.mod h1:B70DZP8IakI65RVQ51MsWP/8jndNma26DVA/nFSCgW0= diff --git a/v2/cmd/wails/internal/commands/initialise/templates/templates/plain/main.tmpl.go b/v2/cmd/wails/internal/commands/initialise/templates/templates/plain/main.tmpl.go new file mode 100644 index 000000000..5a79b1fe7 --- /dev/null +++ b/v2/cmd/wails/internal/commands/initialise/templates/templates/plain/main.tmpl.go @@ -0,0 +1,83 @@ +package main + +import ( + "embed" + "log" + + "github.com/wailsapp/wails/v2/pkg/options/mac" + + "github.com/wailsapp/wails/v2" + "github.com/wailsapp/wails/v2/pkg/logger" + "github.com/wailsapp/wails/v2/pkg/options" + "github.com/wailsapp/wails/v2/pkg/options/windows" +) + +//go:embed frontend/src +var assets embed.FS + +//go:embed build/appicon.png +var icon []byte + +func main() { + // Create an instance of the app structure + app := NewApp() + + // Create application with options + err := wails.Run(&options.App{ + Title: "{{.ProjectName}}", + Width: 1024, + Height: 768, + MinWidth: 1024, + MinHeight: 768, + MaxWidth: 1280, + MaxHeight: 800, + DisableResize: false, + Fullscreen: false, + Frameless: false, + StartHidden: false, + HideWindowOnClose: false, + RGBA: &options.RGBA{R: 255, G: 255, B: 255, A: 255}, + Assets: assets, + Menu: nil, + Logger: nil, + LogLevel: logger.DEBUG, + OnStartup: app.startup, + OnDomReady: app.domReady, + OnBeforeClose: app.beforeClose, + OnShutdown: app.shutdown, + WindowStartState: options.Normal, + Bind: []interface{}{ + app, + }, + // Windows platform specific options + Windows: &windows.Options{ + WebviewIsTransparent: false, + WindowIsTranslucent: false, + DisableWindowIcon: false, + // DisableFramelessWindowDecorations: false, + WebviewUserDataPath: "", + }, + Mac: &mac.Options{ + TitleBar: &mac.TitleBar{ + TitlebarAppearsTransparent: true, + HideTitle: false, + HideTitleBar: false, + FullSizeContent: false, + UseToolbar: false, + HideToolbarSeparator: true, + }, + Appearance: mac.NSAppearanceNameDarkAqua, + WebviewIsTransparent: true, + WindowIsTranslucent: true, + About: &mac.AboutInfo{ + Title: "Plain Template", + Message: "Part of the Wails projects", + Icon: icon, + }, + }, + }) + + if err != nil { + log.Fatal(err) + } +} diff --git a/v2/cmd/wails/internal/commands/initialise/templates/templates/plain/template.json b/v2/cmd/wails/internal/commands/initialise/templates/templates/plain/template.json new file mode 100644 index 000000000..fc919bc3b --- /dev/null +++ b/v2/cmd/wails/internal/commands/initialise/templates/templates/plain/template.json @@ -0,0 +1,7 @@ +{ + "name": "Plain HTML/JS/CSS", + "shortname": "plain", + "author": "Lea Anthony ", + "description": "A simple template using only HTML/CSS/JS", + "helpurl": "https://github.com/wailsapp/wails" +} diff --git a/v2/cmd/wails/internal/commands/initialise/templates/templates/plain/wails.tmpl.json b/v2/cmd/wails/internal/commands/initialise/templates/templates/plain/wails.tmpl.json new file mode 100644 index 000000000..b010f3203 --- /dev/null +++ b/v2/cmd/wails/internal/commands/initialise/templates/templates/plain/wails.tmpl.json @@ -0,0 +1,9 @@ +{ + "name": "{{.ProjectName}}", + "outputfilename": "{{.BinaryName}}", + "wailsjsdir": "./frontend", + "author": { + "name": "{{.AuthorName}}", + "email": "{{.AuthorEmail}}" + } +} From 9c8a3a62da35ea51c79587f8fd722e86dc84e48a Mon Sep 17 00:00:00 2001 From: Lea Anthony Date: Thu, 5 May 2022 20:53:35 +1000 Subject: [PATCH 05/87] Update sponsors --- README.md | 4 ++-- README.zh-Hans.md | 4 ++-- .../docusaurus-plugin-content-pages/credits.mdx | 10 ++++++---- website/src/pages/credits.mdx | 10 ++++++---- 4 files changed, 16 insertions(+), 12 deletions(-) diff --git a/README.md b/README.md index d846b36d1..2a037e481 100644 --- a/README.md +++ b/README.md @@ -106,8 +106,8 @@ This project is supported by these kind people / companies: - - + +

diff --git a/README.zh-Hans.md b/README.zh-Hans.md index 014104a74..a7175cd31 100644 --- a/README.zh-Hans.md +++ b/README.zh-Hans.md @@ -116,8 +116,8 @@ Wails v2 已针对所有 3 个平台发布了 Beta 版。如果您有兴趣尝 - - + +

diff --git a/website/i18n/zh-Hans/docusaurus-plugin-content-pages/credits.mdx b/website/i18n/zh-Hans/docusaurus-plugin-content-pages/credits.mdx index f8255f21f..d2380484a 100644 --- a/website/i18n/zh-Hans/docusaurus-plugin-content-pages/credits.mdx +++ b/website/i18n/zh-Hans/docusaurus-plugin-content-pages/credits.mdx @@ -8,13 +8,13 @@ ## 赞助商
- - + +

@@ -110,6 +110,8 @@ ## 贡献者 + + import Contributors from "@wails/react-contributors"; diff --git a/website/src/pages/credits.mdx b/website/src/pages/credits.mdx index 21abd50e6..49d5fb792 100644 --- a/website/src/pages/credits.mdx +++ b/website/src/pages/credits.mdx @@ -8,13 +8,13 @@ ## Sponsors
- - + +

@@ -110,6 +110,8 @@ ## Contributors + + import Contributors from "@wails/react-contributors"; From 84b6273baf80bc968984c5cb1c50d109122982e3 Mon Sep 17 00:00:00 2001 From: Lea Anthony Date: Thu, 5 May 2022 23:07:33 +1000 Subject: [PATCH 06/87] Bugfix/incorrect bindings (#1383) * Print struct path * Better handling of anon structs --- v2/internal/binding/binding.go | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/v2/internal/binding/binding.go b/v2/internal/binding/binding.go index 05b450336..132f4c4a2 100755 --- a/v2/internal/binding/binding.go +++ b/v2/internal/binding/binding.go @@ -152,11 +152,13 @@ func (b *Bindings) AddStructToGenerateTS(packageName string, structName string, for i := 0; i < structType.NumField(); i++ { field := structType.Field(i) if field.Anonymous { - return + continue } - kind := field.Type.Kind() if kind == reflect.Struct { + if field.PkgPath == "" { + continue + } fqname := field.Type.String() sName := strings.Split(fqname, ".")[1] pName := getPackageName(fqname) @@ -166,6 +168,9 @@ func (b *Bindings) AddStructToGenerateTS(packageName string, structName string, b.AddStructToGenerateTS(pName, sName, s) } } else if kind == reflect.Ptr && field.Type.Elem().Kind() == reflect.Struct { + if field.PkgPath == "" { + continue + } fqname := field.Type.String() sName := strings.Split(fqname, ".")[1] pName := getPackageName(fqname) From 5f612301f9114e0caece2d93e53db4a2ffe17c97 Mon Sep 17 00:00:00 2001 From: stffabi Date: Sat, 7 May 2022 01:11:07 +0200 Subject: [PATCH 07/87] [v2] During wails dev only use reload logic if no AssetsHandler are in use (#1385) This slows down every GET request to the AssetsHandler taking 5s --- .../frontend/assetserver/assethandler.go | 24 ++++++++++--------- 1 file changed, 13 insertions(+), 11 deletions(-) diff --git a/v2/internal/frontend/assetserver/assethandler.go b/v2/internal/frontend/assetserver/assethandler.go index c7e4ac455..3db4b4705 100644 --- a/v2/internal/frontend/assetserver/assethandler.go +++ b/v2/internal/frontend/assetserver/assethandler.go @@ -31,7 +31,7 @@ type assetHandler struct { logger *logger.Logger - servingFromDisk bool + retryMissingFiles bool } func NewAsssetHandler(ctx context.Context, options *options.App) (http.Handler, error) { @@ -56,11 +56,10 @@ func NewAsssetHandler(ctx context.Context, options *options.App) (http.Handler, fs: vfs, handler: options.AssetsHandler, - // Check if we have been given a directory to serve assets from. - // If so, this means we are in dev mode and are serving assets off disk. - // We indicate this through the `servingFromDisk` flag to ensure requests - // aren't cached in dev mode. - servingFromDisk: ctx.Value("assetdir") != nil, + // Retry the loading of missing files on the Assets if we are in dev mode (with an AssetDir) and + // if the user doesn't use the AssetsHandler. If AssetsHandler are in use we would defer + // every request to the handler for 5s which is not quite useful. + retryMissingFiles: ctx.Value("assetdir") != nil && (options.AssetsHandler == nil), } if _logger := ctx.Value("logger"); _logger != nil { @@ -84,10 +83,16 @@ func (d *assetHandler) ServeHTTP(rw http.ResponseWriter, req *http.Request) { if handler != nil { d.logDebug("[AssetHandler] File '%s' not found, serving '%s' by AssetHandler", filename, req.URL) handler.ServeHTTP(rw, req) + err = nil + } else if filename == indexHTML { + err = serveFile(rw, filename, defaultHTML) } else { rw.WriteHeader(http.StatusNotFound) + err = nil } - } else { + } + + if err != nil { d.logError("[AssetHandler] Unable to load file '%s': %s", filename, err) http.Error(rw, err.Error(), http.StatusInternalServerError) } @@ -107,7 +112,7 @@ func (d *assetHandler) serveFSFile(rw http.ResponseWriter, filename string) erro } file, err := d.fs.Open(filename) - if err != nil && d.servingFromDisk { + if err != nil && d.retryMissingFiles { for tries := 0; tries < 50; tries++ { file, err = d.fs.Open(filename) if err != nil { @@ -117,9 +122,6 @@ func (d *assetHandler) serveFSFile(rw http.ResponseWriter, filename string) erro } if err != nil { - if filename == indexHTML && os.IsNotExist(err) { - return serveFile(rw, filename, defaultHTML) - } return err } defer file.Close() From a3de4577dde1f4a17c7e470b21f42e08d04fd534 Mon Sep 17 00:00:00 2001 From: Lea Anthony Date: Sat, 7 May 2022 12:05:30 +1000 Subject: [PATCH 08/87] Update tagline --- website/i18n/en/code.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/i18n/en/code.json b/website/i18n/en/code.json index 4827318b8..8c25f6120 100644 --- a/website/i18n/en/code.json +++ b/website/i18n/en/code.json @@ -18,7 +18,7 @@ "message": "Quickly generate, build and package your projects using the Wails CLI." }, "homepage.Tagline": { - "message": "Build beautiful cross-platform applications using Go + HTML + CSS + JS" + "message": "Build beautiful cross-platform applications using Go" }, "homepage.ButtonText": { "message": "Get Started" From 7c0d1019f296cd99794d2543aff8a8e166356ac5 Mon Sep 17 00:00:00 2001 From: Junker <85776620+Junkher@users.noreply.github.com> Date: Sat, 7 May 2022 23:12:01 +0800 Subject: [PATCH 09/87] Update events.mdx A little mistake in the arguments of Js EventEmit --- .../version-v2.0.0-beta.35/reference/runtime/events.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/versioned_docs/version-v2.0.0-beta.35/reference/runtime/events.mdx b/website/versioned_docs/version-v2.0.0-beta.35/reference/runtime/events.mdx index c08f83c8a..1893a7b98 100644 --- a/website/versioned_docs/version-v2.0.0-beta.35/reference/runtime/events.mdx +++ b/website/versioned_docs/version-v2.0.0-beta.35/reference/runtime/events.mdx @@ -46,6 +46,6 @@ This method sets up a listener for the given event name, but will only trigger a Go Signature: `EventsEmit(ctx context.Context, eventName string, optionalData ...interface{})` -JS Signature: `EventsEmit(ctx context, optionalData function(optionalData?: any))` +JS Signature: `EventsEmit(eventName string, optionalData function(optionalData?: any))` This method emits the given event. Optional data may be passed with the event. This will trigger any event listeners. From d59bec171ed5a8fadd1730d54e23aa826374b553 Mon Sep 17 00:00:00 2001 From: Jack Bizzell Date: Mon, 9 May 2022 20:42:40 +0100 Subject: [PATCH 10/87] Changing all occurrences of calls to OnMultiple() inside EventsOn() and EventsOnce() in the frontend definitions, to calls to EventsOnMultiple() OnMultiple is undefined --- .../assets/common/frontend/wailsjs/runtime/runtime.js | 4 ++-- .../templates/lit-ts/frontend/wailsjs/runtime/runtime.js | 4 ++-- .../templates/lit/frontend/wailsjs/runtime/runtime.js | 4 ++-- .../templates/preact-ts/frontend/wailsjs/runtime/runtime.js | 4 ++-- .../templates/preact/frontend/wailsjs/runtime/runtime.js | 4 ++-- .../templates/react-ts/frontend/wailsjs/runtime/runtime.js | 4 ++-- .../templates/react/frontend/wailsjs/runtime/runtime.js | 4 ++-- .../templates/svelte-ts/frontend/wailsjs/runtime/runtime.js | 4 ++-- .../templates/svelte/frontend/wailsjs/runtime/runtime.js | 4 ++-- .../templates/vanilla-ts/frontend/wailsjs/runtime/runtime.js | 4 ++-- .../templates/vanilla/frontend/wailsjs/runtime/runtime.js | 4 ++-- .../templates/vue-ts/frontend/wailsjs/runtime/runtime.js | 4 ++-- .../templates/vue/frontend/wailsjs/runtime/runtime.js | 4 ++-- 13 files changed, 26 insertions(+), 26 deletions(-) diff --git a/v2/cmd/wails/internal/commands/initialise/templates/generate/assets/common/frontend/wailsjs/runtime/runtime.js b/v2/cmd/wails/internal/commands/initialise/templates/generate/assets/common/frontend/wailsjs/runtime/runtime.js index 8f47e62f1..7f13df1ac 100644 --- a/v2/cmd/wails/internal/commands/initialise/templates/generate/assets/common/frontend/wailsjs/runtime/runtime.js +++ b/v2/cmd/wails/internal/commands/initialise/templates/generate/assets/common/frontend/wailsjs/runtime/runtime.js @@ -41,7 +41,7 @@ export function EventsOnMultiple(eventName, callback, maxCallbacks) { } export function EventsOn(eventName, callback) { - OnMultiple(eventName, callback, -1); + EventsOnMultiple(eventName, callback, -1); } export function EventsOff(eventName) { @@ -49,7 +49,7 @@ export function EventsOff(eventName) { } export function EventsOnce(eventName, callback) { - OnMultiple(eventName, callback, 1); + EventsOnMultiple(eventName, callback, 1); } export function EventsEmit(eventName) { diff --git a/v2/cmd/wails/internal/commands/initialise/templates/templates/lit-ts/frontend/wailsjs/runtime/runtime.js b/v2/cmd/wails/internal/commands/initialise/templates/templates/lit-ts/frontend/wailsjs/runtime/runtime.js index 8f47e62f1..7f13df1ac 100644 --- a/v2/cmd/wails/internal/commands/initialise/templates/templates/lit-ts/frontend/wailsjs/runtime/runtime.js +++ b/v2/cmd/wails/internal/commands/initialise/templates/templates/lit-ts/frontend/wailsjs/runtime/runtime.js @@ -41,7 +41,7 @@ export function EventsOnMultiple(eventName, callback, maxCallbacks) { } export function EventsOn(eventName, callback) { - OnMultiple(eventName, callback, -1); + EventsOnMultiple(eventName, callback, -1); } export function EventsOff(eventName) { @@ -49,7 +49,7 @@ export function EventsOff(eventName) { } export function EventsOnce(eventName, callback) { - OnMultiple(eventName, callback, 1); + EventsOnMultiple(eventName, callback, 1); } export function EventsEmit(eventName) { diff --git a/v2/cmd/wails/internal/commands/initialise/templates/templates/lit/frontend/wailsjs/runtime/runtime.js b/v2/cmd/wails/internal/commands/initialise/templates/templates/lit/frontend/wailsjs/runtime/runtime.js index 8f47e62f1..7f13df1ac 100644 --- a/v2/cmd/wails/internal/commands/initialise/templates/templates/lit/frontend/wailsjs/runtime/runtime.js +++ b/v2/cmd/wails/internal/commands/initialise/templates/templates/lit/frontend/wailsjs/runtime/runtime.js @@ -41,7 +41,7 @@ export function EventsOnMultiple(eventName, callback, maxCallbacks) { } export function EventsOn(eventName, callback) { - OnMultiple(eventName, callback, -1); + EventsOnMultiple(eventName, callback, -1); } export function EventsOff(eventName) { @@ -49,7 +49,7 @@ export function EventsOff(eventName) { } export function EventsOnce(eventName, callback) { - OnMultiple(eventName, callback, 1); + EventsOnMultiple(eventName, callback, 1); } export function EventsEmit(eventName) { diff --git a/v2/cmd/wails/internal/commands/initialise/templates/templates/preact-ts/frontend/wailsjs/runtime/runtime.js b/v2/cmd/wails/internal/commands/initialise/templates/templates/preact-ts/frontend/wailsjs/runtime/runtime.js index 8f47e62f1..7f13df1ac 100644 --- a/v2/cmd/wails/internal/commands/initialise/templates/templates/preact-ts/frontend/wailsjs/runtime/runtime.js +++ b/v2/cmd/wails/internal/commands/initialise/templates/templates/preact-ts/frontend/wailsjs/runtime/runtime.js @@ -41,7 +41,7 @@ export function EventsOnMultiple(eventName, callback, maxCallbacks) { } export function EventsOn(eventName, callback) { - OnMultiple(eventName, callback, -1); + EventsOnMultiple(eventName, callback, -1); } export function EventsOff(eventName) { @@ -49,7 +49,7 @@ export function EventsOff(eventName) { } export function EventsOnce(eventName, callback) { - OnMultiple(eventName, callback, 1); + EventsOnMultiple(eventName, callback, 1); } export function EventsEmit(eventName) { diff --git a/v2/cmd/wails/internal/commands/initialise/templates/templates/preact/frontend/wailsjs/runtime/runtime.js b/v2/cmd/wails/internal/commands/initialise/templates/templates/preact/frontend/wailsjs/runtime/runtime.js index 8f47e62f1..7f13df1ac 100644 --- a/v2/cmd/wails/internal/commands/initialise/templates/templates/preact/frontend/wailsjs/runtime/runtime.js +++ b/v2/cmd/wails/internal/commands/initialise/templates/templates/preact/frontend/wailsjs/runtime/runtime.js @@ -41,7 +41,7 @@ export function EventsOnMultiple(eventName, callback, maxCallbacks) { } export function EventsOn(eventName, callback) { - OnMultiple(eventName, callback, -1); + EventsOnMultiple(eventName, callback, -1); } export function EventsOff(eventName) { @@ -49,7 +49,7 @@ export function EventsOff(eventName) { } export function EventsOnce(eventName, callback) { - OnMultiple(eventName, callback, 1); + EventsOnMultiple(eventName, callback, 1); } export function EventsEmit(eventName) { diff --git a/v2/cmd/wails/internal/commands/initialise/templates/templates/react-ts/frontend/wailsjs/runtime/runtime.js b/v2/cmd/wails/internal/commands/initialise/templates/templates/react-ts/frontend/wailsjs/runtime/runtime.js index 8f47e62f1..7f13df1ac 100644 --- a/v2/cmd/wails/internal/commands/initialise/templates/templates/react-ts/frontend/wailsjs/runtime/runtime.js +++ b/v2/cmd/wails/internal/commands/initialise/templates/templates/react-ts/frontend/wailsjs/runtime/runtime.js @@ -41,7 +41,7 @@ export function EventsOnMultiple(eventName, callback, maxCallbacks) { } export function EventsOn(eventName, callback) { - OnMultiple(eventName, callback, -1); + EventsOnMultiple(eventName, callback, -1); } export function EventsOff(eventName) { @@ -49,7 +49,7 @@ export function EventsOff(eventName) { } export function EventsOnce(eventName, callback) { - OnMultiple(eventName, callback, 1); + EventsOnMultiple(eventName, callback, 1); } export function EventsEmit(eventName) { diff --git a/v2/cmd/wails/internal/commands/initialise/templates/templates/react/frontend/wailsjs/runtime/runtime.js b/v2/cmd/wails/internal/commands/initialise/templates/templates/react/frontend/wailsjs/runtime/runtime.js index 8f47e62f1..7f13df1ac 100644 --- a/v2/cmd/wails/internal/commands/initialise/templates/templates/react/frontend/wailsjs/runtime/runtime.js +++ b/v2/cmd/wails/internal/commands/initialise/templates/templates/react/frontend/wailsjs/runtime/runtime.js @@ -41,7 +41,7 @@ export function EventsOnMultiple(eventName, callback, maxCallbacks) { } export function EventsOn(eventName, callback) { - OnMultiple(eventName, callback, -1); + EventsOnMultiple(eventName, callback, -1); } export function EventsOff(eventName) { @@ -49,7 +49,7 @@ export function EventsOff(eventName) { } export function EventsOnce(eventName, callback) { - OnMultiple(eventName, callback, 1); + EventsOnMultiple(eventName, callback, 1); } export function EventsEmit(eventName) { diff --git a/v2/cmd/wails/internal/commands/initialise/templates/templates/svelte-ts/frontend/wailsjs/runtime/runtime.js b/v2/cmd/wails/internal/commands/initialise/templates/templates/svelte-ts/frontend/wailsjs/runtime/runtime.js index 8f47e62f1..7f13df1ac 100644 --- a/v2/cmd/wails/internal/commands/initialise/templates/templates/svelte-ts/frontend/wailsjs/runtime/runtime.js +++ b/v2/cmd/wails/internal/commands/initialise/templates/templates/svelte-ts/frontend/wailsjs/runtime/runtime.js @@ -41,7 +41,7 @@ export function EventsOnMultiple(eventName, callback, maxCallbacks) { } export function EventsOn(eventName, callback) { - OnMultiple(eventName, callback, -1); + EventsOnMultiple(eventName, callback, -1); } export function EventsOff(eventName) { @@ -49,7 +49,7 @@ export function EventsOff(eventName) { } export function EventsOnce(eventName, callback) { - OnMultiple(eventName, callback, 1); + EventsOnMultiple(eventName, callback, 1); } export function EventsEmit(eventName) { diff --git a/v2/cmd/wails/internal/commands/initialise/templates/templates/svelte/frontend/wailsjs/runtime/runtime.js b/v2/cmd/wails/internal/commands/initialise/templates/templates/svelte/frontend/wailsjs/runtime/runtime.js index 8f47e62f1..7f13df1ac 100644 --- a/v2/cmd/wails/internal/commands/initialise/templates/templates/svelte/frontend/wailsjs/runtime/runtime.js +++ b/v2/cmd/wails/internal/commands/initialise/templates/templates/svelte/frontend/wailsjs/runtime/runtime.js @@ -41,7 +41,7 @@ export function EventsOnMultiple(eventName, callback, maxCallbacks) { } export function EventsOn(eventName, callback) { - OnMultiple(eventName, callback, -1); + EventsOnMultiple(eventName, callback, -1); } export function EventsOff(eventName) { @@ -49,7 +49,7 @@ export function EventsOff(eventName) { } export function EventsOnce(eventName, callback) { - OnMultiple(eventName, callback, 1); + EventsOnMultiple(eventName, callback, 1); } export function EventsEmit(eventName) { diff --git a/v2/cmd/wails/internal/commands/initialise/templates/templates/vanilla-ts/frontend/wailsjs/runtime/runtime.js b/v2/cmd/wails/internal/commands/initialise/templates/templates/vanilla-ts/frontend/wailsjs/runtime/runtime.js index 8f47e62f1..7f13df1ac 100644 --- a/v2/cmd/wails/internal/commands/initialise/templates/templates/vanilla-ts/frontend/wailsjs/runtime/runtime.js +++ b/v2/cmd/wails/internal/commands/initialise/templates/templates/vanilla-ts/frontend/wailsjs/runtime/runtime.js @@ -41,7 +41,7 @@ export function EventsOnMultiple(eventName, callback, maxCallbacks) { } export function EventsOn(eventName, callback) { - OnMultiple(eventName, callback, -1); + EventsOnMultiple(eventName, callback, -1); } export function EventsOff(eventName) { @@ -49,7 +49,7 @@ export function EventsOff(eventName) { } export function EventsOnce(eventName, callback) { - OnMultiple(eventName, callback, 1); + EventsOnMultiple(eventName, callback, 1); } export function EventsEmit(eventName) { diff --git a/v2/cmd/wails/internal/commands/initialise/templates/templates/vanilla/frontend/wailsjs/runtime/runtime.js b/v2/cmd/wails/internal/commands/initialise/templates/templates/vanilla/frontend/wailsjs/runtime/runtime.js index 8f47e62f1..7f13df1ac 100644 --- a/v2/cmd/wails/internal/commands/initialise/templates/templates/vanilla/frontend/wailsjs/runtime/runtime.js +++ b/v2/cmd/wails/internal/commands/initialise/templates/templates/vanilla/frontend/wailsjs/runtime/runtime.js @@ -41,7 +41,7 @@ export function EventsOnMultiple(eventName, callback, maxCallbacks) { } export function EventsOn(eventName, callback) { - OnMultiple(eventName, callback, -1); + EventsOnMultiple(eventName, callback, -1); } export function EventsOff(eventName) { @@ -49,7 +49,7 @@ export function EventsOff(eventName) { } export function EventsOnce(eventName, callback) { - OnMultiple(eventName, callback, 1); + EventsOnMultiple(eventName, callback, 1); } export function EventsEmit(eventName) { diff --git a/v2/cmd/wails/internal/commands/initialise/templates/templates/vue-ts/frontend/wailsjs/runtime/runtime.js b/v2/cmd/wails/internal/commands/initialise/templates/templates/vue-ts/frontend/wailsjs/runtime/runtime.js index 8f47e62f1..7f13df1ac 100644 --- a/v2/cmd/wails/internal/commands/initialise/templates/templates/vue-ts/frontend/wailsjs/runtime/runtime.js +++ b/v2/cmd/wails/internal/commands/initialise/templates/templates/vue-ts/frontend/wailsjs/runtime/runtime.js @@ -41,7 +41,7 @@ export function EventsOnMultiple(eventName, callback, maxCallbacks) { } export function EventsOn(eventName, callback) { - OnMultiple(eventName, callback, -1); + EventsOnMultiple(eventName, callback, -1); } export function EventsOff(eventName) { @@ -49,7 +49,7 @@ export function EventsOff(eventName) { } export function EventsOnce(eventName, callback) { - OnMultiple(eventName, callback, 1); + EventsOnMultiple(eventName, callback, 1); } export function EventsEmit(eventName) { diff --git a/v2/cmd/wails/internal/commands/initialise/templates/templates/vue/frontend/wailsjs/runtime/runtime.js b/v2/cmd/wails/internal/commands/initialise/templates/templates/vue/frontend/wailsjs/runtime/runtime.js index 8f47e62f1..7f13df1ac 100644 --- a/v2/cmd/wails/internal/commands/initialise/templates/templates/vue/frontend/wailsjs/runtime/runtime.js +++ b/v2/cmd/wails/internal/commands/initialise/templates/templates/vue/frontend/wailsjs/runtime/runtime.js @@ -41,7 +41,7 @@ export function EventsOnMultiple(eventName, callback, maxCallbacks) { } export function EventsOn(eventName, callback) { - OnMultiple(eventName, callback, -1); + EventsOnMultiple(eventName, callback, -1); } export function EventsOff(eventName) { @@ -49,7 +49,7 @@ export function EventsOff(eventName) { } export function EventsOnce(eventName, callback) { - OnMultiple(eventName, callback, 1); + EventsOnMultiple(eventName, callback, 1); } export function EventsEmit(eventName) { From 55115742c10654a6fe4439d62095ed8aa1b7b2e8 Mon Sep 17 00:00:00 2001 From: Lea Anthony Date: Wed, 11 May 2022 08:21:17 +1000 Subject: [PATCH 11/87] fix: TS conversion of interface{} --- v2/internal/binding/generate.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/v2/internal/binding/generate.go b/v2/internal/binding/generate.go index c1912f3b4..2d0af7253 100644 --- a/v2/internal/binding/generate.go +++ b/v2/internal/binding/generate.go @@ -104,7 +104,7 @@ func (b *Bindings) GenerateGoBindings(baseDir string) error { func goTypeToJSDocType(input string, importNamespaces *slicer.StringSlicer) string { switch true { - case input == "interface{}": + case input == "interface {}": return "any" case input == "string": return "string" From b84fd76e86ee980d41413dc5c2b6896b8acf0bed Mon Sep 17 00:00:00 2001 From: Travis McLane Date: Tue, 3 May 2022 21:43:15 -0500 Subject: [PATCH 12/87] bugfix: correct typo --- v2/internal/frontend/assetserver/assethandler.go | 2 +- v2/internal/frontend/assetserver/assetserver.go | 2 +- v2/internal/frontend/devserver/devserver.go | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/v2/internal/frontend/assetserver/assethandler.go b/v2/internal/frontend/assetserver/assethandler.go index 3db4b4705..d38494bc9 100644 --- a/v2/internal/frontend/assetserver/assethandler.go +++ b/v2/internal/frontend/assetserver/assethandler.go @@ -34,7 +34,7 @@ type assetHandler struct { retryMissingFiles bool } -func NewAsssetHandler(ctx context.Context, options *options.App) (http.Handler, error) { +func NewAssetHandler(ctx context.Context, options *options.App) (http.Handler, error) { vfs := options.Assets if vfs != nil { if _, err := vfs.Open("."); err != nil { diff --git a/v2/internal/frontend/assetserver/assetserver.go b/v2/internal/frontend/assetserver/assetserver.go index 47aa6eb33..fa3f1ed99 100644 --- a/v2/internal/frontend/assetserver/assetserver.go +++ b/v2/internal/frontend/assetserver/assetserver.go @@ -32,7 +32,7 @@ type AssetServer struct { } func NewAssetServer(ctx context.Context, options *options.App, bindingsJSON string) (*AssetServer, error) { - handler, err := NewAsssetHandler(ctx, options) + handler, err := NewAssetHandler(ctx, options) if err != nil { return nil, err } diff --git a/v2/internal/frontend/devserver/devserver.go b/v2/internal/frontend/devserver/devserver.go index 959811368..0d03cacca 100644 --- a/v2/internal/frontend/devserver/devserver.go +++ b/v2/internal/frontend/devserver/devserver.go @@ -73,7 +73,7 @@ func (d *DevWebServer) Run(ctx context.Context) error { }) var err error - assetHandler, err = assetserver.NewAsssetHandler(ctx, d.appoptions) + assetHandler, err = assetserver.NewAssetHandler(ctx, d.appoptions) if err != nil { log.Fatal(err) } From e0e55e6e76fb3f661a9c8b1f1f2131a945fa95e2 Mon Sep 17 00:00:00 2001 From: Lea Anthony Date: Wed, 11 May 2022 20:18:44 +1000 Subject: [PATCH 13/87] Better website spacing --- website/src/css/custom.css | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/website/src/css/custom.css b/website/src/css/custom.css index cdfd09294..619d79f5c 100644 --- a/website/src/css/custom.css +++ b/website/src/css/custom.css @@ -39,7 +39,7 @@ html[data-theme="dark"] .docusaurus-highlight-code-line { --ifm-color-primary-lightest: rgb(146, 224, 208); --ifm-code-font-size: 95%; --ifm-button-color: white; - --ifm-container-width-xl: 85%; + --ifm-container-width-xl: 100%; } .docusaurus-highlight-code-line { @@ -53,6 +53,10 @@ html[data-theme="dark"] .docusaurus-highlight-code-line { counter-reset: line-number; } +.container { + padding-left: 2%; +} + .prism-code.language-js .token-line::before, .prism-code.language-ts .token-line::before, .prism-code.language-go .token-line::before { From ec2202765cf6ead621d5728abb7b4f388f8de71a Mon Sep 17 00:00:00 2001 From: LGiki Date: Thu, 12 May 2022 09:50:16 +0800 Subject: [PATCH 14/87] fix: typo in docs --- website/docs/reference/project-config.mdx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/website/docs/reference/project-config.mdx b/website/docs/reference/project-config.mdx index 178504a63..de612d5f7 100644 --- a/website/docs/reference/project-config.mdx +++ b/website/docs/reference/project-config.mdx @@ -19,7 +19,7 @@ The project config resides in the `wails.json` file in the project directory. Th "wailsjsdir": "[Relative path to the directory that the auto-generated JS modules will be created]", "version": "[Project config version]", "outputfilename": "[The name of the binary]", - "debounceMS": 100, // The default time the dev server waits to reload when it detects a vhange in assets + "debounceMS": 100, // The default time the dev server waits to reload when it detects a change in assets "devServer": "[Address to bind the wails dev sever to. Default: localhost:34115]", "appargs": "[Arguments passed to the application in shell style when in dev mode]", "runNonNativeBuildHooks": false, // Defines if build hooks should be run though they are defined for an OS other than the host OS. @@ -35,7 +35,7 @@ The project config resides in the `wails.json` file in the project directory. Th "copyright": "[The copyright of the product. Default: 'Copyright.........']", "comments": "[A short comment of the app. Default: 'Built using Wails (https://wails.app)']" }, - "nsisType": "['multiple': One installer per achitecture. 'single': Single universal installer for all architectures being built. Default: 'multiple']" + "nsisType": "['multiple': One installer per architecture. 'single': Single universal installer for all architectures being built. Default: 'multiple']" } ``` From e705c20de93f53cf9fe504c5691f5e2a10245545 Mon Sep 17 00:00:00 2001 From: LGiki Date: Fri, 13 May 2022 14:33:07 +0800 Subject: [PATCH 15/87] Add Next.js template --- website/docs/community/templates.mdx | 1 + .../current/community/templates.mdx | 2 +- .../version-v2.0.0-beta.34/community/templates.mdx | 1 + 3 files changed, 3 insertions(+), 1 deletion(-) diff --git a/website/docs/community/templates.mdx b/website/docs/community/templates.mdx index 076a6b041..6d090bb3d 100644 --- a/website/docs/community/templates.mdx +++ b/website/docs/community/templates.mdx @@ -35,6 +35,7 @@ If you are unsure about a template, inspect `package.json` and `wails.json` for - [wails-react-template](https://github.com/AlienRecall/wails-react-template) - A template using reactjs - [wails-react-template](https://github.com/flin7/wails-react-template) - A minimal template for React that supports live development +- [wails-template-nextjs](https://github.com/LGiki/wails-template-nextjs) - A template using Next.js and TypeScript ## Svelte diff --git a/website/i18n/zh-Hans/docusaurus-plugin-content-docs/current/community/templates.mdx b/website/i18n/zh-Hans/docusaurus-plugin-content-docs/current/community/templates.mdx index dfdc392b9..32a39ac2f 100644 --- a/website/i18n/zh-Hans/docusaurus-plugin-content-docs/current/community/templates.mdx +++ b/website/i18n/zh-Hans/docusaurus-plugin-content-docs/current/community/templates.mdx @@ -35,7 +35,7 @@ sidebar_position: 1 - [wails-react-template](https://github.com/AlienRecall/wails-react-template) - 基于 reactjs 的模板 - [wails-react-template](https://github.com/flin7/wails-react-template) - 基于 React 并支持实时开发模式的轻量级模板 - [wails-vite-react-ts](https://github.com/lontten/wails-vite-react-ts) - 基于 Vite + React + TypeScript 的模板 - +- [wails-template-nextjs](https://github.com/LGiki/wails-template-nextjs) - 基于 Next.js + TypeScript 的模板 ## Svelte diff --git a/website/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v2.0.0-beta.34/community/templates.mdx b/website/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v2.0.0-beta.34/community/templates.mdx index e922abf4a..32a39ac2f 100644 --- a/website/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v2.0.0-beta.34/community/templates.mdx +++ b/website/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v2.0.0-beta.34/community/templates.mdx @@ -35,6 +35,7 @@ sidebar_position: 1 - [wails-react-template](https://github.com/AlienRecall/wails-react-template) - 基于 reactjs 的模板 - [wails-react-template](https://github.com/flin7/wails-react-template) - 基于 React 并支持实时开发模式的轻量级模板 - [wails-vite-react-ts](https://github.com/lontten/wails-vite-react-ts) - 基于 Vite + React + TypeScript 的模板 +- [wails-template-nextjs](https://github.com/LGiki/wails-template-nextjs) - 基于 Next.js + TypeScript 的模板 ## Svelte From c97e1c50af9651580d8a38f55a3d99f7bd4ea1fa Mon Sep 17 00:00:00 2001 From: stffabi Date: Tue, 17 May 2022 12:45:48 +0200 Subject: [PATCH 16/87] [v2, linux] Make sure to execute the menu callbacks on a new goroutine (#1403) * Make sure to execute the menu callbacks on a new goroutine * Fix assertion message when opening file dialogs by passing the correct parent window --- v2/internal/frontend/desktop/linux/gtk.go | 17 ++++++++++++----- v2/internal/frontend/desktop/linux/window.go | 6 +++--- 2 files changed, 15 insertions(+), 8 deletions(-) diff --git a/v2/internal/frontend/desktop/linux/gtk.go b/v2/internal/frontend/desktop/linux/gtk.go index 1592ccdc7..ead303539 100644 --- a/v2/internal/frontend/desktop/linux/gtk.go +++ b/v2/internal/frontend/desktop/linux/gtk.go @@ -11,8 +11,11 @@ extern void blockClick(GtkWidget* menuItem, gulong handler_id); extern void unblockClick(GtkWidget* menuItem, gulong handler_id); */ import "C" -import "unsafe" -import "github.com/wailsapp/wails/v2/pkg/menu" +import ( + "unsafe" + + "github.com/wailsapp/wails/v2/pkg/menu" +) func GtkMenuItemWithLabel(label string) *C.GtkWidget { cLabel := C.CString(label) @@ -37,6 +40,10 @@ func GtkRadioMenuItemWithLabel(label string, group *C.GSList) *C.GtkWidget { //export handleMenuItemClick func handleMenuItemClick(gtkWidget unsafe.Pointer) { + // Make sure to execute the final callback on a new goroutine otherwise if the callback e.g. tries to open a dialog, the + // main thread will get blocked and so the message loop blocks. As a result the app will block and shows a + // "not responding" dialog. + item := gtkSignalToMenuItem[(*C.GtkWidget)(gtkWidget)] switch item.Type { case menu.CheckboxType: @@ -51,7 +58,7 @@ func handleMenuItemClick(gtkWidget unsafe.Pointer) { C.gtk_check_menu_item_set_active(C.toGtkCheckMenuItem(unsafe.Pointer(gtkCheckbox)), checked) C.unblockClick(gtkCheckbox, handler) } - item.Click(&menu.CallbackData{MenuItem: item}) + go item.Click(&menu.CallbackData{MenuItem: item}) case menu.RadioType: gtkRadioItems := gtkRadioMenuCache[item] active := C.gtk_check_menu_item_get_active(C.toGtkCheckMenuItem(gtkWidget)) @@ -63,11 +70,11 @@ func handleMenuItemClick(gtkWidget unsafe.Pointer) { C.unblockClick(gtkRadioItem, handler) } item.Checked = true - item.Click(&menu.CallbackData{MenuItem: item}) + go item.Click(&menu.CallbackData{MenuItem: item}) } else { item.Checked = false } default: - item.Click(&menu.CallbackData{MenuItem: item}) + go item.Click(&menu.CallbackData{MenuItem: item}) } } diff --git a/v2/internal/frontend/desktop/linux/window.go b/v2/internal/frontend/desktop/linux/window.go index 7c6b6f363..888faddaf 100644 --- a/v2/internal/frontend/desktop/linux/window.go +++ b/v2/internal/frontend/desktop/linux/window.go @@ -314,7 +314,7 @@ gboolean messageDialog(gpointer data) { void extern processOpenFileResult(void*); typedef struct OpenFileDialogOptions { - void* webview; + GtkWindow* window; char* title; char* defaultFilename; char* defaultDirectory; @@ -339,7 +339,7 @@ gboolean opendialog(gpointer data) { if (options->action == GTK_FILE_CHOOSER_ACTION_SAVE) { label = "_Save"; } - GtkWidget *dlgWidget = gtk_file_chooser_dialog_new(options->title, options->webview, options->action, + GtkWidget *dlgWidget = gtk_file_chooser_dialog_new(options->title, options->window, options->action, "_Cancel", GTK_RESPONSE_CANCEL, label, GTK_RESPONSE_ACCEPT, NULL); @@ -854,7 +854,7 @@ func (w *Window) Quit() { func (w *Window) OpenFileDialog(dialogOptions frontend.OpenDialogOptions, multipleFiles int, action C.GtkFileChooserAction) { data := C.OpenFileDialogOptions{ - webview: w.webview, + window: w.asGTKWindow(), title: C.CString(dialogOptions.Title), multipleFiles: C.int(multipleFiles), action: action, From 0d793124fd56d5682557bfa0fc0be0f0ecc6e4ca Mon Sep 17 00:00:00 2001 From: rayshoo Date: Wed, 18 May 2022 15:58:33 +0900 Subject: [PATCH 17/87] fix typo bindings.js to ipc.js --- website/docs/guides/frontend.mdx | 2 +- .../docusaurus-plugin-content-docs/current/guides/frontend.mdx | 2 +- .../version-v2.0.0-beta.34/guides/frontend.mdx | 2 +- .../versioned_docs/version-v2.0.0-beta.34/guides/frontend.mdx | 2 +- .../versioned_docs/version-v2.0.0-beta.35/guides/frontend.mdx | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/website/docs/guides/frontend.mdx b/website/docs/guides/frontend.mdx index 84489cd99..6c9d0cf27 100644 --- a/website/docs/guides/frontend.mdx +++ b/website/docs/guides/frontend.mdx @@ -3,7 +3,7 @@ ## Script Injection -When Wails serves your `index.html`, by default, it will inject 2 script entries into the `` tag to load `/wails/bindings.js` +When Wails serves your `index.html`, by default, it will inject 2 script entries into the `` tag to load `/wails/ipc.js` and `/wails/runtime.js`. These files install the bindings and runtime respectively. The code below shows where these are injected by default: diff --git a/website/i18n/zh-Hans/docusaurus-plugin-content-docs/current/guides/frontend.mdx b/website/i18n/zh-Hans/docusaurus-plugin-content-docs/current/guides/frontend.mdx index af76b5d2c..1cb7ba724 100644 --- a/website/i18n/zh-Hans/docusaurus-plugin-content-docs/current/guides/frontend.mdx +++ b/website/i18n/zh-Hans/docusaurus-plugin-content-docs/current/guides/frontend.mdx @@ -2,7 +2,7 @@ ## 脚本注入 -当 Wails 为您的`index.html`提供服务时,默认情况下,它会将 2 个脚本注入``标签以加载`/wails/bindings.js`和`/wails/runtime.js`。 这些文件分别安装绑定和运行时。 +当 Wails 为您的`index.html`提供服务时,默认情况下,它会将 2 个脚本注入``标签以加载`/wails/ipc.js`和`/wails/runtime.js`。 这些文件分别安装绑定和运行时。 下面的代码显示了这些默认注入的位置: diff --git a/website/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v2.0.0-beta.34/guides/frontend.mdx b/website/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v2.0.0-beta.34/guides/frontend.mdx index af76b5d2c..1cb7ba724 100644 --- a/website/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v2.0.0-beta.34/guides/frontend.mdx +++ b/website/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v2.0.0-beta.34/guides/frontend.mdx @@ -2,7 +2,7 @@ ## 脚本注入 -当 Wails 为您的`index.html`提供服务时,默认情况下,它会将 2 个脚本注入``标签以加载`/wails/bindings.js`和`/wails/runtime.js`。 这些文件分别安装绑定和运行时。 +当 Wails 为您的`index.html`提供服务时,默认情况下,它会将 2 个脚本注入``标签以加载`/wails/ipc.js`和`/wails/runtime.js`。 这些文件分别安装绑定和运行时。 下面的代码显示了这些默认注入的位置: diff --git a/website/versioned_docs/version-v2.0.0-beta.34/guides/frontend.mdx b/website/versioned_docs/version-v2.0.0-beta.34/guides/frontend.mdx index 84489cd99..6c9d0cf27 100644 --- a/website/versioned_docs/version-v2.0.0-beta.34/guides/frontend.mdx +++ b/website/versioned_docs/version-v2.0.0-beta.34/guides/frontend.mdx @@ -3,7 +3,7 @@ ## Script Injection -When Wails serves your `index.html`, by default, it will inject 2 script entries into the `` tag to load `/wails/bindings.js` +When Wails serves your `index.html`, by default, it will inject 2 script entries into the `` tag to load `/wails/ipc.js` and `/wails/runtime.js`. These files install the bindings and runtime respectively. The code below shows where these are injected by default: diff --git a/website/versioned_docs/version-v2.0.0-beta.35/guides/frontend.mdx b/website/versioned_docs/version-v2.0.0-beta.35/guides/frontend.mdx index 2ace49c4e..7b94345ad 100644 --- a/website/versioned_docs/version-v2.0.0-beta.35/guides/frontend.mdx +++ b/website/versioned_docs/version-v2.0.0-beta.35/guides/frontend.mdx @@ -2,7 +2,7 @@ ## Script Injection -When Wails serves your `index.html`, by default, it will inject 2 script entries into the `` tag to load `/wails/bindings.js` +When Wails serves your `index.html`, by default, it will inject 2 script entries into the `` tag to load `/wails/ipc.js` and `/wails/runtime.js`. These files install the bindings and runtime respectively. The code below shows where these are injected by default: From 953bc0934312a5b669d32441f7b64701de1f113c Mon Sep 17 00:00:00 2001 From: Lea Anthony Date: Wed, 18 May 2022 18:52:45 +1000 Subject: [PATCH 18/87] Merge pull request #1400 from wailsapp/feature/native-translucency Initial support for new native translucency in Windows Preview --- .../frontend/desktop/windows/win32/theme.go | 32 +++++++++++++++---- .../frontend/desktop/windows/window.go | 7 +++- v2/pkg/options/windows/windows.go | 13 ++++++++ 3 files changed, 44 insertions(+), 8 deletions(-) diff --git a/v2/internal/frontend/desktop/windows/win32/theme.go b/v2/internal/frontend/desktop/windows/win32/theme.go index aefa73813..89aa9fc74 100644 --- a/v2/internal/frontend/desktop/windows/win32/theme.go +++ b/v2/internal/frontend/desktop/windows/win32/theme.go @@ -1,11 +1,8 @@ -//go:build windows - package win32 import ( - "unsafe" - "golang.org/x/sys/windows/registry" + "unsafe" ) type DWMWINDOWATTRIBUTE int32 @@ -15,10 +12,19 @@ const DwmwaUseImmersiveDarkMode DWMWINDOWATTRIBUTE = 20 const DwmwaBorderColor DWMWINDOWATTRIBUTE = 34 const DwmwaCaptionColor DWMWINDOWATTRIBUTE = 35 const DwmwaTextColor DWMWINDOWATTRIBUTE = 36 +const DwmwaSystemBackdropType DWMWINDOWATTRIBUTE = 38 const SPI_GETHIGHCONTRAST = 0x0042 const HCF_HIGHCONTRASTON = 0x00000001 +type BackdropType int32 + +const DwmsbtAuto BackdropType = 0 +const DwmsbtDisable = 1 // None +const DwmsbtMainWindow = 2 // Mica +const DwmsbtTransientWindow = 3 // Acrylic +const DwmsbtTabbedWindow = 4 // Tabbed + func dwmSetWindowAttribute(hwnd uintptr, dwAttribute DWMWINDOWATTRIBUTE, pvAttribute unsafe.Pointer, cbAttribute uintptr) { ret, _, err := procDwmSetWindowAttribute.Call( hwnd, @@ -46,7 +52,19 @@ func SetTheme(hwnd uintptr, useDarkMode bool) { if IsWindowsVersionAtLeast(10, 0, 18985) { attr = DwmwaUseImmersiveDarkMode } - dwmSetWindowAttribute(hwnd, attr, unsafe.Pointer(&useDarkMode), unsafe.Sizeof(&useDarkMode)) + var winDark int32 + if useDarkMode { + winDark = 1 + } + dwmSetWindowAttribute(hwnd, attr, unsafe.Pointer(&winDark), unsafe.Sizeof(winDark)) + } +} + +func EnableTranslucency(hwnd uintptr, backdrop BackdropType) { + if IsWindowsVersionAtLeast(10, 0, 22579) { + dwmSetWindowAttribute(hwnd, DwmwaSystemBackdropType, unsafe.Pointer(&backdrop), unsafe.Sizeof(backdrop)) + } else { + println("Warning: Translucency unavailable on Windows < 22579") } } @@ -73,7 +91,6 @@ func IsCurrentlyDarkMode() bool { if err != nil { return false } - return AppsUseLightTheme == 0 } @@ -91,5 +108,6 @@ func IsCurrentlyHighContrastMode() bool { _ = err return false } - return result.DwFlags&HCF_HIGHCONTRASTON == HCF_HIGHCONTRASTON + r := result.DwFlags&HCF_HIGHCONTRASTON == HCF_HIGHCONTRASTON + return r } diff --git a/v2/internal/frontend/desktop/windows/window.go b/v2/internal/frontend/desktop/windows/window.go index 21170bfe7..36dc5bf25 100644 --- a/v2/internal/frontend/desktop/windows/window.go +++ b/v2/internal/frontend/desktop/windows/window.go @@ -78,7 +78,12 @@ func NewWindow(parent winc.Controller, appoptions *options.App, versionInfo *ope if appoptions.Windows != nil { if appoptions.Windows.WindowIsTranslucent { - result.SetTranslucentBackground() + // TODO: Migrate to win32 package + if !win32.IsWindowsVersionAtLeast(10, 0, 22579) { + result.SetTranslucentBackground() + } else { + win32.EnableTranslucency(result.Handle(), win32.BackdropType(appoptions.Windows.TranslucencyType)) + } } if appoptions.Windows.DisableWindowIcon { diff --git a/v2/pkg/options/windows/windows.go b/v2/pkg/options/windows/windows.go index 4c553fc89..fb80cee16 100644 --- a/v2/pkg/options/windows/windows.go +++ b/v2/pkg/options/windows/windows.go @@ -23,6 +23,16 @@ const ( Light Theme = 2 ) +type BackdropType int32 + +const ( + Auto BackdropType = 0 + Disable BackdropType = 1 // None + MainWindow BackdropType = 2 // Mica + TransientWindow BackdropType = 3 // Acrylic + TabbedWindow BackdropType = 4 // Tabbed +) + func RGB(r, g, b uint8) int32 { var col = int32(b) col = col<<8 | int32(g) @@ -67,6 +77,9 @@ type Options struct { // Custom settings for dark/light mode CustomTheme *ThemeSettings + // Windows 11 22579 minimum + TranslucencyType BackdropType + // User messages that can be customised Messages *Messages } From d4ecaad0e1e8ab9ce8b04d937dec915f41fd9aad Mon Sep 17 00:00:00 2001 From: mondy Date: Sat, 21 May 2022 14:22:18 +0900 Subject: [PATCH 19/87] Add nogen flag in wails dev command --- v2/cmd/wails/internal/commands/dev/dev.go | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/v2/cmd/wails/internal/commands/dev/dev.go b/v2/cmd/wails/internal/commands/dev/dev.go index 712e7ea65..af5136e1b 100644 --- a/v2/cmd/wails/internal/commands/dev/dev.go +++ b/v2/cmd/wails/internal/commands/dev/dev.go @@ -66,6 +66,7 @@ type devFlags struct { reloadDirs string openBrowser bool noReload bool + noGen bool wailsjsdir string tags string verbosity int @@ -92,6 +93,7 @@ func AddSubcommand(app *clir.Cli, w io.Writer) error { command.StringFlag("reloaddirs", "Additional directories to trigger reloads (comma separated)", &flags.reloadDirs) command.BoolFlag("browser", "Open application in browser", &flags.openBrowser) command.BoolFlag("noreload", "Disable reload on asset change", &flags.noReload) + command.BoolFlag("nogen", "Disable generate module", &flags.noGen) command.StringFlag("wailsjsdir", "Directory to generate the Wails JS modules", &flags.wailsjsdir) command.StringFlag("tags", "tags to pass to Go compiler (quoted and space separated)", &flags.tags) command.IntFlag("v", "Verbosity level (0 - silent, 1 - standard, 2 - verbose)", &flags.verbosity) @@ -148,14 +150,16 @@ func AddSubcommand(app *clir.Cli, w io.Writer) error { return err } - self := os.Args[0] - if flags.tags != "" { - err = runCommand(cwd, true, self, "generate", "module", "-tags", flags.tags) - } else { - err = runCommand(cwd, true, self, "generate", "module") - } - if err != nil { - return err + if !flags.noGen { + self := os.Args[0] + if flags.tags != "" { + err = runCommand(cwd, true, self, "generate", "module", "-tags", flags.tags) + } else { + err = runCommand(cwd, true, self, "generate", "module") + } + if err != nil { + return err + } } buildOptions := generateBuildOptions(flags) From 7e6403826595af72f7e18b10b377e44229e0051e Mon Sep 17 00:00:00 2001 From: Blake Bourque Date: Sun, 22 May 2022 18:43:18 -0400 Subject: [PATCH 20/87] Add blurb on wails generate module (#1414) For users who wish to keep the wailsjs directory out of source control, the `wails generate module` command is valuable in a CI environment where wails build does not automatically generate the needed javascript module. --- .../versioned_docs/version-v2.0.0-beta.35/reference/cli.mdx | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/website/versioned_docs/version-v2.0.0-beta.35/reference/cli.mdx b/website/versioned_docs/version-v2.0.0-beta.35/reference/cli.mdx index e6abde76a..12e3a3739 100644 --- a/website/versioned_docs/version-v2.0.0-beta.35/reference/cli.mdx +++ b/website/versioned_docs/version-v2.0.0-beta.35/reference/cli.mdx @@ -193,6 +193,9 @@ There is more information on using this feature with existing framework scripts ## generate +### module +Wails creates a javascript module as described in `wails dev`. Use `wails generate module` to generate the javascript interface code. + ### template Wails uses templates for project generation. The `wails generate template` command helps scaffold a template so that @@ -217,4 +220,4 @@ For more details on creating templates, consult the [Templates guide](../guides/ ## version -`wails version` will simply output the current CLI version. \ No newline at end of file +`wails version` will simply output the current CLI version. From 043d83e39ef3494274d68ae77dc5d0e967abe056 Mon Sep 17 00:00:00 2001 From: mondy Date: Mon, 23 May 2022 09:08:35 +0900 Subject: [PATCH 21/87] Add nogen flag in cli document. --- website/docs/reference/cli.mdx | 1 + 1 file changed, 1 insertion(+) diff --git a/website/docs/reference/cli.mdx b/website/docs/reference/cli.mdx index 4dcc55931..959741155 100644 --- a/website/docs/reference/cli.mdx +++ b/website/docs/reference/cli.mdx @@ -168,6 +168,7 @@ Your system is ready for Wails development! | -tags "extra tags" | Build tags to pass to compiler (quoted and space separated) | | | -loglevel "loglevel"| Loglevel to use - Trace, Debug, Info, Warning, Error | Debug | | -noreload | Disable automatic reload when assets change | | +| -nogen | Disable generate module | | | -v | Verbosity level (0 - silent, 1 - standard, 2 - verbose) | 1 | | -wailsjsdir | The directory to generate the generated Wails JS modules | Value in `wails.json` | | -debounce | The time to wait for reload after an asset change is detected | 100 (milliseconds) | From 316a24f6daa40a1948212b4ee5b775690c6210e6 Mon Sep 17 00:00:00 2001 From: yuzu <38999742+Yz4230@users.noreply.github.com> Date: Wed, 25 May 2022 04:20:53 +0900 Subject: [PATCH 22/87] update runtime.d.ts & templates (#1421) --- .../assets/common/frontend/wailsjs/runtime/runtime.d.ts | 2 +- .../templates/lit-ts/frontend/wailsjs/runtime/runtime.d.ts | 2 +- .../templates/lit/frontend/wailsjs/runtime/runtime.d.ts | 2 +- .../templates/preact-ts/frontend/wailsjs/runtime/runtime.d.ts | 2 +- .../templates/preact/frontend/wailsjs/runtime/runtime.d.ts | 2 +- .../templates/react-ts/frontend/wailsjs/runtime/runtime.d.ts | 2 +- .../templates/react/frontend/wailsjs/runtime/runtime.d.ts | 2 +- .../templates/svelte-ts/frontend/wailsjs/runtime/runtime.d.ts | 2 +- .../templates/svelte/frontend/wailsjs/runtime/runtime.d.ts | 2 +- .../templates/vanilla-ts/frontend/wailsjs/runtime/runtime.d.ts | 2 +- .../templates/vanilla/frontend/wailsjs/runtime/runtime.d.ts | 2 +- .../templates/vue-ts/frontend/wailsjs/runtime/runtime.d.ts | 2 +- .../templates/vue/frontend/wailsjs/runtime/runtime.d.ts | 2 +- v2/internal/frontend/runtime/wrapper/runtime.d.ts | 2 +- 14 files changed, 14 insertions(+), 14 deletions(-) diff --git a/v2/cmd/wails/internal/commands/initialise/templates/generate/assets/common/frontend/wailsjs/runtime/runtime.d.ts b/v2/cmd/wails/internal/commands/initialise/templates/generate/assets/common/frontend/wailsjs/runtime/runtime.d.ts index bcacbec00..08ada6948 100644 --- a/v2/cmd/wails/internal/commands/initialise/templates/generate/assets/common/frontend/wailsjs/runtime/runtime.d.ts +++ b/v2/cmd/wails/internal/commands/initialise/templates/generate/assets/common/frontend/wailsjs/runtime/runtime.d.ts @@ -177,7 +177,7 @@ export function BrowserOpenURL(url: string): void; // [Environment](https://wails.io/docs/reference/runtime/intro#environment) // Returns information about the environment -export function Environment(): EnvironmentInfo; +export function Environment(): Promise; // [Quit](https://wails.io/docs/reference/runtime/intro#quit) // Quits the application. diff --git a/v2/cmd/wails/internal/commands/initialise/templates/templates/lit-ts/frontend/wailsjs/runtime/runtime.d.ts b/v2/cmd/wails/internal/commands/initialise/templates/templates/lit-ts/frontend/wailsjs/runtime/runtime.d.ts index bcacbec00..08ada6948 100644 --- a/v2/cmd/wails/internal/commands/initialise/templates/templates/lit-ts/frontend/wailsjs/runtime/runtime.d.ts +++ b/v2/cmd/wails/internal/commands/initialise/templates/templates/lit-ts/frontend/wailsjs/runtime/runtime.d.ts @@ -177,7 +177,7 @@ export function BrowserOpenURL(url: string): void; // [Environment](https://wails.io/docs/reference/runtime/intro#environment) // Returns information about the environment -export function Environment(): EnvironmentInfo; +export function Environment(): Promise; // [Quit](https://wails.io/docs/reference/runtime/intro#quit) // Quits the application. diff --git a/v2/cmd/wails/internal/commands/initialise/templates/templates/lit/frontend/wailsjs/runtime/runtime.d.ts b/v2/cmd/wails/internal/commands/initialise/templates/templates/lit/frontend/wailsjs/runtime/runtime.d.ts index bcacbec00..08ada6948 100644 --- a/v2/cmd/wails/internal/commands/initialise/templates/templates/lit/frontend/wailsjs/runtime/runtime.d.ts +++ b/v2/cmd/wails/internal/commands/initialise/templates/templates/lit/frontend/wailsjs/runtime/runtime.d.ts @@ -177,7 +177,7 @@ export function BrowserOpenURL(url: string): void; // [Environment](https://wails.io/docs/reference/runtime/intro#environment) // Returns information about the environment -export function Environment(): EnvironmentInfo; +export function Environment(): Promise; // [Quit](https://wails.io/docs/reference/runtime/intro#quit) // Quits the application. diff --git a/v2/cmd/wails/internal/commands/initialise/templates/templates/preact-ts/frontend/wailsjs/runtime/runtime.d.ts b/v2/cmd/wails/internal/commands/initialise/templates/templates/preact-ts/frontend/wailsjs/runtime/runtime.d.ts index bcacbec00..08ada6948 100644 --- a/v2/cmd/wails/internal/commands/initialise/templates/templates/preact-ts/frontend/wailsjs/runtime/runtime.d.ts +++ b/v2/cmd/wails/internal/commands/initialise/templates/templates/preact-ts/frontend/wailsjs/runtime/runtime.d.ts @@ -177,7 +177,7 @@ export function BrowserOpenURL(url: string): void; // [Environment](https://wails.io/docs/reference/runtime/intro#environment) // Returns information about the environment -export function Environment(): EnvironmentInfo; +export function Environment(): Promise; // [Quit](https://wails.io/docs/reference/runtime/intro#quit) // Quits the application. diff --git a/v2/cmd/wails/internal/commands/initialise/templates/templates/preact/frontend/wailsjs/runtime/runtime.d.ts b/v2/cmd/wails/internal/commands/initialise/templates/templates/preact/frontend/wailsjs/runtime/runtime.d.ts index bcacbec00..08ada6948 100644 --- a/v2/cmd/wails/internal/commands/initialise/templates/templates/preact/frontend/wailsjs/runtime/runtime.d.ts +++ b/v2/cmd/wails/internal/commands/initialise/templates/templates/preact/frontend/wailsjs/runtime/runtime.d.ts @@ -177,7 +177,7 @@ export function BrowserOpenURL(url: string): void; // [Environment](https://wails.io/docs/reference/runtime/intro#environment) // Returns information about the environment -export function Environment(): EnvironmentInfo; +export function Environment(): Promise; // [Quit](https://wails.io/docs/reference/runtime/intro#quit) // Quits the application. diff --git a/v2/cmd/wails/internal/commands/initialise/templates/templates/react-ts/frontend/wailsjs/runtime/runtime.d.ts b/v2/cmd/wails/internal/commands/initialise/templates/templates/react-ts/frontend/wailsjs/runtime/runtime.d.ts index bcacbec00..08ada6948 100644 --- a/v2/cmd/wails/internal/commands/initialise/templates/templates/react-ts/frontend/wailsjs/runtime/runtime.d.ts +++ b/v2/cmd/wails/internal/commands/initialise/templates/templates/react-ts/frontend/wailsjs/runtime/runtime.d.ts @@ -177,7 +177,7 @@ export function BrowserOpenURL(url: string): void; // [Environment](https://wails.io/docs/reference/runtime/intro#environment) // Returns information about the environment -export function Environment(): EnvironmentInfo; +export function Environment(): Promise; // [Quit](https://wails.io/docs/reference/runtime/intro#quit) // Quits the application. diff --git a/v2/cmd/wails/internal/commands/initialise/templates/templates/react/frontend/wailsjs/runtime/runtime.d.ts b/v2/cmd/wails/internal/commands/initialise/templates/templates/react/frontend/wailsjs/runtime/runtime.d.ts index bcacbec00..08ada6948 100644 --- a/v2/cmd/wails/internal/commands/initialise/templates/templates/react/frontend/wailsjs/runtime/runtime.d.ts +++ b/v2/cmd/wails/internal/commands/initialise/templates/templates/react/frontend/wailsjs/runtime/runtime.d.ts @@ -177,7 +177,7 @@ export function BrowserOpenURL(url: string): void; // [Environment](https://wails.io/docs/reference/runtime/intro#environment) // Returns information about the environment -export function Environment(): EnvironmentInfo; +export function Environment(): Promise; // [Quit](https://wails.io/docs/reference/runtime/intro#quit) // Quits the application. diff --git a/v2/cmd/wails/internal/commands/initialise/templates/templates/svelte-ts/frontend/wailsjs/runtime/runtime.d.ts b/v2/cmd/wails/internal/commands/initialise/templates/templates/svelte-ts/frontend/wailsjs/runtime/runtime.d.ts index bcacbec00..08ada6948 100644 --- a/v2/cmd/wails/internal/commands/initialise/templates/templates/svelte-ts/frontend/wailsjs/runtime/runtime.d.ts +++ b/v2/cmd/wails/internal/commands/initialise/templates/templates/svelte-ts/frontend/wailsjs/runtime/runtime.d.ts @@ -177,7 +177,7 @@ export function BrowserOpenURL(url: string): void; // [Environment](https://wails.io/docs/reference/runtime/intro#environment) // Returns information about the environment -export function Environment(): EnvironmentInfo; +export function Environment(): Promise; // [Quit](https://wails.io/docs/reference/runtime/intro#quit) // Quits the application. diff --git a/v2/cmd/wails/internal/commands/initialise/templates/templates/svelte/frontend/wailsjs/runtime/runtime.d.ts b/v2/cmd/wails/internal/commands/initialise/templates/templates/svelte/frontend/wailsjs/runtime/runtime.d.ts index bcacbec00..08ada6948 100644 --- a/v2/cmd/wails/internal/commands/initialise/templates/templates/svelte/frontend/wailsjs/runtime/runtime.d.ts +++ b/v2/cmd/wails/internal/commands/initialise/templates/templates/svelte/frontend/wailsjs/runtime/runtime.d.ts @@ -177,7 +177,7 @@ export function BrowserOpenURL(url: string): void; // [Environment](https://wails.io/docs/reference/runtime/intro#environment) // Returns information about the environment -export function Environment(): EnvironmentInfo; +export function Environment(): Promise; // [Quit](https://wails.io/docs/reference/runtime/intro#quit) // Quits the application. diff --git a/v2/cmd/wails/internal/commands/initialise/templates/templates/vanilla-ts/frontend/wailsjs/runtime/runtime.d.ts b/v2/cmd/wails/internal/commands/initialise/templates/templates/vanilla-ts/frontend/wailsjs/runtime/runtime.d.ts index bcacbec00..08ada6948 100644 --- a/v2/cmd/wails/internal/commands/initialise/templates/templates/vanilla-ts/frontend/wailsjs/runtime/runtime.d.ts +++ b/v2/cmd/wails/internal/commands/initialise/templates/templates/vanilla-ts/frontend/wailsjs/runtime/runtime.d.ts @@ -177,7 +177,7 @@ export function BrowserOpenURL(url: string): void; // [Environment](https://wails.io/docs/reference/runtime/intro#environment) // Returns information about the environment -export function Environment(): EnvironmentInfo; +export function Environment(): Promise; // [Quit](https://wails.io/docs/reference/runtime/intro#quit) // Quits the application. diff --git a/v2/cmd/wails/internal/commands/initialise/templates/templates/vanilla/frontend/wailsjs/runtime/runtime.d.ts b/v2/cmd/wails/internal/commands/initialise/templates/templates/vanilla/frontend/wailsjs/runtime/runtime.d.ts index bcacbec00..08ada6948 100644 --- a/v2/cmd/wails/internal/commands/initialise/templates/templates/vanilla/frontend/wailsjs/runtime/runtime.d.ts +++ b/v2/cmd/wails/internal/commands/initialise/templates/templates/vanilla/frontend/wailsjs/runtime/runtime.d.ts @@ -177,7 +177,7 @@ export function BrowserOpenURL(url: string): void; // [Environment](https://wails.io/docs/reference/runtime/intro#environment) // Returns information about the environment -export function Environment(): EnvironmentInfo; +export function Environment(): Promise; // [Quit](https://wails.io/docs/reference/runtime/intro#quit) // Quits the application. diff --git a/v2/cmd/wails/internal/commands/initialise/templates/templates/vue-ts/frontend/wailsjs/runtime/runtime.d.ts b/v2/cmd/wails/internal/commands/initialise/templates/templates/vue-ts/frontend/wailsjs/runtime/runtime.d.ts index bcacbec00..08ada6948 100644 --- a/v2/cmd/wails/internal/commands/initialise/templates/templates/vue-ts/frontend/wailsjs/runtime/runtime.d.ts +++ b/v2/cmd/wails/internal/commands/initialise/templates/templates/vue-ts/frontend/wailsjs/runtime/runtime.d.ts @@ -177,7 +177,7 @@ export function BrowserOpenURL(url: string): void; // [Environment](https://wails.io/docs/reference/runtime/intro#environment) // Returns information about the environment -export function Environment(): EnvironmentInfo; +export function Environment(): Promise; // [Quit](https://wails.io/docs/reference/runtime/intro#quit) // Quits the application. diff --git a/v2/cmd/wails/internal/commands/initialise/templates/templates/vue/frontend/wailsjs/runtime/runtime.d.ts b/v2/cmd/wails/internal/commands/initialise/templates/templates/vue/frontend/wailsjs/runtime/runtime.d.ts index bcacbec00..08ada6948 100644 --- a/v2/cmd/wails/internal/commands/initialise/templates/templates/vue/frontend/wailsjs/runtime/runtime.d.ts +++ b/v2/cmd/wails/internal/commands/initialise/templates/templates/vue/frontend/wailsjs/runtime/runtime.d.ts @@ -177,7 +177,7 @@ export function BrowserOpenURL(url: string): void; // [Environment](https://wails.io/docs/reference/runtime/intro#environment) // Returns information about the environment -export function Environment(): EnvironmentInfo; +export function Environment(): Promise; // [Quit](https://wails.io/docs/reference/runtime/intro#quit) // Quits the application. diff --git a/v2/internal/frontend/runtime/wrapper/runtime.d.ts b/v2/internal/frontend/runtime/wrapper/runtime.d.ts index bcacbec00..08ada6948 100644 --- a/v2/internal/frontend/runtime/wrapper/runtime.d.ts +++ b/v2/internal/frontend/runtime/wrapper/runtime.d.ts @@ -177,7 +177,7 @@ export function BrowserOpenURL(url: string): void; // [Environment](https://wails.io/docs/reference/runtime/intro#environment) // Returns information about the environment -export function Environment(): EnvironmentInfo; +export function Environment(): Promise; // [Quit](https://wails.io/docs/reference/runtime/intro#quit) // Quits the application. From e7f9e2f26769339eb13ec8d0ac0eeb4e4f00b467 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=88=80=E5=88=80?= Date: Wed, 25 May 2022 14:49:04 +0800 Subject: [PATCH 23/87] docs: add macos custom menu EditMenu tips (#1423) * docs: add macos custom menu EditMenu tips On macos platform, if custom the menu, we should append EditMenu to enable Cmd+C,Cmd+V,Cmd+Z... shortcut --- website/docs/reference/menus.mdx | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/website/docs/reference/menus.mdx b/website/docs/reference/menus.mdx index bab623586..ac083ef51 100644 --- a/website/docs/reference/menus.mdx +++ b/website/docs/reference/menus.mdx @@ -18,6 +18,10 @@ An example of how to create a menu: FileMenu.AddText("Quit", keys.CmdOrCtrl("q"), func(_ *menu.CallbackData) { runtime.Quit() }) + + if runtime.GOOS == "darwin" { + AppMenu.Append(menu.EditMenu()) // on macos platform, we should append EditMenu to enable Cmd+C,Cmd+V,Cmd+Z... shortcut + } err := wails.Run(&options.App{ Title: "Menus Demo", From a10a9e5b360fa9c5c2a87818f8a39ab480f04238 Mon Sep 17 00:00:00 2001 From: Edward Browncross Date: Wed, 25 May 2022 17:56:37 +0100 Subject: [PATCH 24/87] Add missing className to input in React and Preact templates (#1419) * add missing className to input in react and preact templates * add missing className to input in react and preact assets --- .../templates/generate/assets/preact-ts/frontend/src/app.tsx | 2 +- .../templates/generate/assets/preact/frontend/src/app.jsx | 2 +- .../templates/generate/assets/react-ts/frontend/src/App.tsx | 2 +- .../templates/generate/assets/react/frontend/src/App.jsx | 2 +- .../templates/templates/preact-ts/frontend/src/app.tsx | 2 +- .../initialise/templates/templates/preact/frontend/src/app.jsx | 2 +- .../templates/templates/react-ts/frontend/src/App.tsx | 2 +- .../initialise/templates/templates/react/frontend/src/App.jsx | 2 +- 8 files changed, 8 insertions(+), 8 deletions(-) diff --git a/v2/cmd/wails/internal/commands/initialise/templates/generate/assets/preact-ts/frontend/src/app.tsx b/v2/cmd/wails/internal/commands/initialise/templates/generate/assets/preact-ts/frontend/src/app.tsx index bffcb461c..05d7c32d0 100644 --- a/v2/cmd/wails/internal/commands/initialise/templates/generate/assets/preact-ts/frontend/src/app.tsx +++ b/v2/cmd/wails/internal/commands/initialise/templates/generate/assets/preact-ts/frontend/src/app.tsx @@ -19,7 +19,7 @@ export function App(props: any) {
{resultText}
- +
diff --git a/v2/cmd/wails/internal/commands/initialise/templates/generate/assets/preact/frontend/src/app.jsx b/v2/cmd/wails/internal/commands/initialise/templates/generate/assets/preact/frontend/src/app.jsx index a50cfd089..1ada97ac4 100644 --- a/v2/cmd/wails/internal/commands/initialise/templates/generate/assets/preact/frontend/src/app.jsx +++ b/v2/cmd/wails/internal/commands/initialise/templates/generate/assets/preact/frontend/src/app.jsx @@ -19,7 +19,7 @@ export function App(props) {
{resultText}
- +
diff --git a/v2/cmd/wails/internal/commands/initialise/templates/generate/assets/react-ts/frontend/src/App.tsx b/v2/cmd/wails/internal/commands/initialise/templates/generate/assets/react-ts/frontend/src/App.tsx index 7895c66cf..a6e56f9f8 100644 --- a/v2/cmd/wails/internal/commands/initialise/templates/generate/assets/react-ts/frontend/src/App.tsx +++ b/v2/cmd/wails/internal/commands/initialise/templates/generate/assets/react-ts/frontend/src/App.tsx @@ -18,7 +18,7 @@ function App() {
{resultText}
- +
diff --git a/v2/cmd/wails/internal/commands/initialise/templates/generate/assets/react/frontend/src/App.jsx b/v2/cmd/wails/internal/commands/initialise/templates/generate/assets/react/frontend/src/App.jsx index 071423476..fd762291f 100644 --- a/v2/cmd/wails/internal/commands/initialise/templates/generate/assets/react/frontend/src/App.jsx +++ b/v2/cmd/wails/internal/commands/initialise/templates/generate/assets/react/frontend/src/App.jsx @@ -18,7 +18,7 @@ function App() {
{resultText}
- +
diff --git a/v2/cmd/wails/internal/commands/initialise/templates/templates/preact-ts/frontend/src/app.tsx b/v2/cmd/wails/internal/commands/initialise/templates/templates/preact-ts/frontend/src/app.tsx index bffcb461c..05d7c32d0 100644 --- a/v2/cmd/wails/internal/commands/initialise/templates/templates/preact-ts/frontend/src/app.tsx +++ b/v2/cmd/wails/internal/commands/initialise/templates/templates/preact-ts/frontend/src/app.tsx @@ -19,7 +19,7 @@ export function App(props: any) {
{resultText}
- +
diff --git a/v2/cmd/wails/internal/commands/initialise/templates/templates/preact/frontend/src/app.jsx b/v2/cmd/wails/internal/commands/initialise/templates/templates/preact/frontend/src/app.jsx index a50cfd089..1ada97ac4 100644 --- a/v2/cmd/wails/internal/commands/initialise/templates/templates/preact/frontend/src/app.jsx +++ b/v2/cmd/wails/internal/commands/initialise/templates/templates/preact/frontend/src/app.jsx @@ -19,7 +19,7 @@ export function App(props) {
{resultText}
- +
diff --git a/v2/cmd/wails/internal/commands/initialise/templates/templates/react-ts/frontend/src/App.tsx b/v2/cmd/wails/internal/commands/initialise/templates/templates/react-ts/frontend/src/App.tsx index 7895c66cf..a6e56f9f8 100644 --- a/v2/cmd/wails/internal/commands/initialise/templates/templates/react-ts/frontend/src/App.tsx +++ b/v2/cmd/wails/internal/commands/initialise/templates/templates/react-ts/frontend/src/App.tsx @@ -18,7 +18,7 @@ function App() {
{resultText}
- +
diff --git a/v2/cmd/wails/internal/commands/initialise/templates/templates/react/frontend/src/App.jsx b/v2/cmd/wails/internal/commands/initialise/templates/templates/react/frontend/src/App.jsx index 071423476..fd762291f 100644 --- a/v2/cmd/wails/internal/commands/initialise/templates/templates/react/frontend/src/App.jsx +++ b/v2/cmd/wails/internal/commands/initialise/templates/templates/react/frontend/src/App.jsx @@ -18,7 +18,7 @@ function App() {
{resultText}
- +
From 6a88568f0ae6d1eab1188cd36b53848bfa2e4ced Mon Sep 17 00:00:00 2001 From: Lea Anthony Date: Thu, 26 May 2022 17:45:32 -1000 Subject: [PATCH 25/87] v2.0.0-beta.37 --- v2/cmd/wails/internal/version.go | 2 +- .../gettingstarted/firstproject.mdx | 54 ---- .../appendix/_category_.json | 0 .../community/_category_.json | 0 .../community/links.mdx | 0 .../community/showcase/_category_.json | 0 .../community/showcase/encrypteasy.mdx | 0 .../community/showcase/filehound.mdx | 0 .../community/showcase/mollywallet.mdx | 0 .../community/showcase/optimus.mdx | 0 .../community/showcase/portfall.mdx | 0 .../community/showcase/riftshare.mdx | 0 .../community/showcase/surge.mdx | 0 .../community/showcase/wally.mdx | 0 .../community/showcase/wombat.mdx | 0 .../community/showcase/ytd.mdx | 0 .../community/templates.mdx | 8 +- .../gettingstarted/_category_.json | 0 .../gettingstarted/building.mdx | 2 +- .../gettingstarted/development.mdx | 7 +- .../gettingstarted/firstproject.mdx | 127 ++++++++ .../gettingstarted/installation.mdx | 2 +- .../guides/_category_.json | 0 .../guides/application-development.mdx | 15 +- .../guides/bleeding-edge.mdx | 15 +- .../guides/developing-wails.mdx | 0 .../guides/frameless.mdx | 4 +- .../guides/frontend.mdx | 0 .../guides/ides.mdx | 0 .../guides/linux-distro-support.mdx | 0 .../guides/manual-builds.mdx | 0 .../guides/migrating.mdx | 22 +- .../guides/overscroll.mdx | 0 .../guides/routing.mdx | 2 +- .../guides/signing.mdx | 0 .../guides/templates.mdx | 4 +- .../guides/troubleshooting.mdx | 0 .../guides/windows-installer.mdx | 0 .../guides/windows.mdx | 0 .../howdoesitwork.mdx | 304 +++++++++--------- .../introduction.mdx | 6 + .../reference/_category_.json | 0 .../reference/cli.mdx | 27 +- .../reference/menus.mdx | 51 ++- .../reference/options.mdx | 143 +++++++- .../reference/project-config.mdx | 11 +- .../reference/runtime/_category_.json | 0 .../reference/runtime/browser.mdx | 0 .../reference/runtime/dialog.mdx | 0 .../reference/runtime/events.mdx | 0 .../reference/runtime/intro.mdx | 8 +- .../reference/runtime/log.mdx | 41 ++- .../reference/runtime/menu.mdx | 2 +- .../reference/runtime/window.mdx | 38 ++- ...n => version-v2.0.0-beta.37-sidebars.json} | 0 website/versions.json | 4 +- 56 files changed, 607 insertions(+), 292 deletions(-) delete mode 100644 website/versioned_docs/version-v2.0.0-beta.34/gettingstarted/firstproject.mdx rename website/versioned_docs/{version-v2.0.0-beta.34 => version-v2.0.0-beta.37}/appendix/_category_.json (100%) rename website/versioned_docs/{version-v2.0.0-beta.34 => version-v2.0.0-beta.37}/community/_category_.json (100%) rename website/versioned_docs/{version-v2.0.0-beta.34 => version-v2.0.0-beta.37}/community/links.mdx (100%) rename website/versioned_docs/{version-v2.0.0-beta.34 => version-v2.0.0-beta.37}/community/showcase/_category_.json (100%) rename website/versioned_docs/{version-v2.0.0-beta.34 => version-v2.0.0-beta.37}/community/showcase/encrypteasy.mdx (100%) rename website/versioned_docs/{version-v2.0.0-beta.34 => version-v2.0.0-beta.37}/community/showcase/filehound.mdx (100%) rename website/versioned_docs/{version-v2.0.0-beta.34 => version-v2.0.0-beta.37}/community/showcase/mollywallet.mdx (100%) rename website/versioned_docs/{version-v2.0.0-beta.34 => version-v2.0.0-beta.37}/community/showcase/optimus.mdx (100%) rename website/versioned_docs/{version-v2.0.0-beta.34 => version-v2.0.0-beta.37}/community/showcase/portfall.mdx (100%) rename website/versioned_docs/{version-v2.0.0-beta.34 => version-v2.0.0-beta.37}/community/showcase/riftshare.mdx (100%) rename website/versioned_docs/{version-v2.0.0-beta.34 => version-v2.0.0-beta.37}/community/showcase/surge.mdx (100%) rename website/versioned_docs/{version-v2.0.0-beta.34 => version-v2.0.0-beta.37}/community/showcase/wally.mdx (100%) rename website/versioned_docs/{version-v2.0.0-beta.34 => version-v2.0.0-beta.37}/community/showcase/wombat.mdx (100%) rename website/versioned_docs/{version-v2.0.0-beta.34 => version-v2.0.0-beta.37}/community/showcase/ytd.mdx (100%) rename website/versioned_docs/{version-v2.0.0-beta.34 => version-v2.0.0-beta.37}/community/templates.mdx (85%) rename website/versioned_docs/{version-v2.0.0-beta.34 => version-v2.0.0-beta.37}/gettingstarted/_category_.json (100%) rename website/versioned_docs/{version-v2.0.0-beta.34 => version-v2.0.0-beta.37}/gettingstarted/building.mdx (92%) rename website/versioned_docs/{version-v2.0.0-beta.34 => version-v2.0.0-beta.37}/gettingstarted/development.mdx (64%) create mode 100644 website/versioned_docs/version-v2.0.0-beta.37/gettingstarted/firstproject.mdx rename website/versioned_docs/{version-v2.0.0-beta.34 => version-v2.0.0-beta.37}/gettingstarted/installation.mdx (92%) rename website/versioned_docs/{version-v2.0.0-beta.34 => version-v2.0.0-beta.37}/guides/_category_.json (100%) rename website/versioned_docs/{version-v2.0.0-beta.34 => version-v2.0.0-beta.37}/guides/application-development.mdx (89%) rename website/versioned_docs/{version-v2.0.0-beta.34 => version-v2.0.0-beta.37}/guides/bleeding-edge.mdx (74%) rename website/versioned_docs/{version-v2.0.0-beta.34 => version-v2.0.0-beta.37}/guides/developing-wails.mdx (100%) rename website/versioned_docs/{version-v2.0.0-beta.34 => version-v2.0.0-beta.37}/guides/frameless.mdx (88%) rename website/versioned_docs/{version-v2.0.0-beta.34 => version-v2.0.0-beta.37}/guides/frontend.mdx (100%) rename website/versioned_docs/{version-v2.0.0-beta.34 => version-v2.0.0-beta.37}/guides/ides.mdx (100%) rename website/versioned_docs/{version-v2.0.0-beta.34 => version-v2.0.0-beta.37}/guides/linux-distro-support.mdx (100%) rename website/versioned_docs/{version-v2.0.0-beta.34 => version-v2.0.0-beta.37}/guides/manual-builds.mdx (100%) rename website/versioned_docs/{version-v2.0.0-beta.34 => version-v2.0.0-beta.37}/guides/migrating.mdx (89%) rename website/versioned_docs/{version-v2.0.0-beta.34 => version-v2.0.0-beta.37}/guides/overscroll.mdx (100%) rename website/versioned_docs/{version-v2.0.0-beta.34 => version-v2.0.0-beta.37}/guides/routing.mdx (94%) rename website/versioned_docs/{version-v2.0.0-beta.34 => version-v2.0.0-beta.37}/guides/signing.mdx (100%) rename website/versioned_docs/{version-v2.0.0-beta.34 => version-v2.0.0-beta.37}/guides/templates.mdx (98%) rename website/versioned_docs/{version-v2.0.0-beta.34 => version-v2.0.0-beta.37}/guides/troubleshooting.mdx (100%) rename website/versioned_docs/{version-v2.0.0-beta.34 => version-v2.0.0-beta.37}/guides/windows-installer.mdx (100%) rename website/versioned_docs/{version-v2.0.0-beta.34 => version-v2.0.0-beta.37}/guides/windows.mdx (100%) rename website/versioned_docs/{version-v2.0.0-beta.34 => version-v2.0.0-beta.37}/howdoesitwork.mdx (57%) rename website/versioned_docs/{version-v2.0.0-beta.34 => version-v2.0.0-beta.37}/introduction.mdx (91%) rename website/versioned_docs/{version-v2.0.0-beta.34 => version-v2.0.0-beta.37}/reference/_category_.json (100%) rename website/versioned_docs/{version-v2.0.0-beta.34 => version-v2.0.0-beta.37}/reference/cli.mdx (88%) rename website/versioned_docs/{version-v2.0.0-beta.34 => version-v2.0.0-beta.37}/reference/menus.mdx (83%) rename website/versioned_docs/{version-v2.0.0-beta.34 => version-v2.0.0-beta.37}/reference/options.mdx (74%) rename website/versioned_docs/{version-v2.0.0-beta.34 => version-v2.0.0-beta.37}/reference/project-config.mdx (80%) rename website/versioned_docs/{version-v2.0.0-beta.34 => version-v2.0.0-beta.37}/reference/runtime/_category_.json (100%) rename website/versioned_docs/{version-v2.0.0-beta.34 => version-v2.0.0-beta.37}/reference/runtime/browser.mdx (100%) rename website/versioned_docs/{version-v2.0.0-beta.34 => version-v2.0.0-beta.37}/reference/runtime/dialog.mdx (100%) rename website/versioned_docs/{version-v2.0.0-beta.34 => version-v2.0.0-beta.37}/reference/runtime/events.mdx (100%) rename website/versioned_docs/{version-v2.0.0-beta.34 => version-v2.0.0-beta.37}/reference/runtime/intro.mdx (81%) rename website/versioned_docs/{version-v2.0.0-beta.34 => version-v2.0.0-beta.37}/reference/runtime/log.mdx (69%) rename website/versioned_docs/{version-v2.0.0-beta.34 => version-v2.0.0-beta.37}/reference/runtime/menu.mdx (87%) rename website/versioned_docs/{version-v2.0.0-beta.34 => version-v2.0.0-beta.37}/reference/runtime/window.mdx (84%) rename website/versioned_sidebars/{version-v2.0.0-beta.34-sidebars.json => version-v2.0.0-beta.37-sidebars.json} (100%) diff --git a/v2/cmd/wails/internal/version.go b/v2/cmd/wails/internal/version.go index f1c511852..de86c6d5a 100644 --- a/v2/cmd/wails/internal/version.go +++ b/v2/cmd/wails/internal/version.go @@ -1,3 +1,3 @@ package internal -var Version = "v2.0.0-beta.36" +var Version = "v2.0.0-beta.37" diff --git a/website/versioned_docs/version-v2.0.0-beta.34/gettingstarted/firstproject.mdx b/website/versioned_docs/version-v2.0.0-beta.34/gettingstarted/firstproject.mdx deleted file mode 100644 index 8d4c8d946..000000000 --- a/website/versioned_docs/version-v2.0.0-beta.34/gettingstarted/firstproject.mdx +++ /dev/null @@ -1,54 +0,0 @@ ---- -sidebar_position: 2 ---- - -# Creating a Project - -## Project Generation - -Now that the CLI is installed, you can generate a new project by using the `wails init` command. - -To get up and running quickly, you can generate a default project by running `wails init -n myproject`. This will -create a directory called `myproject` and populate it with the default template. - -Other project templates are available and can be listed using `wails init -l`. -There are also [community templates](../community/templates) available that offer different capabilities and frameworks. - -To see the other options available, you can run `wails init -help`. -More details can be found in the [CLI Reference](../reference/cli#init). - -## Project Layout - -Wails projects have the following layout: - -``` -. -├── build/ -│ ├── appicon.png -│ ├── darwin/ -│ └── windows/ -├── frontend/ -├── go.mod -├── go.sum -├── main.go -└── wails.json -``` - -### Project structure rundown - -- `/main.go` - The main application -- `/frontend/` - Frontend project files -- `/build/` - Project build directory - - `/build/appicon.png` - The application icon - - `/build/darwin/` - Mac specific project files - - `/build/windows/` - Windows specific project files -- `/wails.json` - The project configuration -- `/go.mod` - Go module file -- `/go.sum` - Go module checksum file - -The `frontend` directory has nothing specific to Wails and can be any frontend project of your choosing. - -The `build` directory is used during the build process. These files may be updated to customise your builds. If -files are removed from the build directory, default versions will be regenerated. - -The default module name in `go.mod` is "changeme". You should change this to something more appropriate. diff --git a/website/versioned_docs/version-v2.0.0-beta.34/appendix/_category_.json b/website/versioned_docs/version-v2.0.0-beta.37/appendix/_category_.json similarity index 100% rename from website/versioned_docs/version-v2.0.0-beta.34/appendix/_category_.json rename to website/versioned_docs/version-v2.0.0-beta.37/appendix/_category_.json diff --git a/website/versioned_docs/version-v2.0.0-beta.34/community/_category_.json b/website/versioned_docs/version-v2.0.0-beta.37/community/_category_.json similarity index 100% rename from website/versioned_docs/version-v2.0.0-beta.34/community/_category_.json rename to website/versioned_docs/version-v2.0.0-beta.37/community/_category_.json diff --git a/website/versioned_docs/version-v2.0.0-beta.34/community/links.mdx b/website/versioned_docs/version-v2.0.0-beta.37/community/links.mdx similarity index 100% rename from website/versioned_docs/version-v2.0.0-beta.34/community/links.mdx rename to website/versioned_docs/version-v2.0.0-beta.37/community/links.mdx diff --git a/website/versioned_docs/version-v2.0.0-beta.34/community/showcase/_category_.json b/website/versioned_docs/version-v2.0.0-beta.37/community/showcase/_category_.json similarity index 100% rename from website/versioned_docs/version-v2.0.0-beta.34/community/showcase/_category_.json rename to website/versioned_docs/version-v2.0.0-beta.37/community/showcase/_category_.json diff --git a/website/versioned_docs/version-v2.0.0-beta.34/community/showcase/encrypteasy.mdx b/website/versioned_docs/version-v2.0.0-beta.37/community/showcase/encrypteasy.mdx similarity index 100% rename from website/versioned_docs/version-v2.0.0-beta.34/community/showcase/encrypteasy.mdx rename to website/versioned_docs/version-v2.0.0-beta.37/community/showcase/encrypteasy.mdx diff --git a/website/versioned_docs/version-v2.0.0-beta.34/community/showcase/filehound.mdx b/website/versioned_docs/version-v2.0.0-beta.37/community/showcase/filehound.mdx similarity index 100% rename from website/versioned_docs/version-v2.0.0-beta.34/community/showcase/filehound.mdx rename to website/versioned_docs/version-v2.0.0-beta.37/community/showcase/filehound.mdx diff --git a/website/versioned_docs/version-v2.0.0-beta.34/community/showcase/mollywallet.mdx b/website/versioned_docs/version-v2.0.0-beta.37/community/showcase/mollywallet.mdx similarity index 100% rename from website/versioned_docs/version-v2.0.0-beta.34/community/showcase/mollywallet.mdx rename to website/versioned_docs/version-v2.0.0-beta.37/community/showcase/mollywallet.mdx diff --git a/website/versioned_docs/version-v2.0.0-beta.34/community/showcase/optimus.mdx b/website/versioned_docs/version-v2.0.0-beta.37/community/showcase/optimus.mdx similarity index 100% rename from website/versioned_docs/version-v2.0.0-beta.34/community/showcase/optimus.mdx rename to website/versioned_docs/version-v2.0.0-beta.37/community/showcase/optimus.mdx diff --git a/website/versioned_docs/version-v2.0.0-beta.34/community/showcase/portfall.mdx b/website/versioned_docs/version-v2.0.0-beta.37/community/showcase/portfall.mdx similarity index 100% rename from website/versioned_docs/version-v2.0.0-beta.34/community/showcase/portfall.mdx rename to website/versioned_docs/version-v2.0.0-beta.37/community/showcase/portfall.mdx diff --git a/website/versioned_docs/version-v2.0.0-beta.34/community/showcase/riftshare.mdx b/website/versioned_docs/version-v2.0.0-beta.37/community/showcase/riftshare.mdx similarity index 100% rename from website/versioned_docs/version-v2.0.0-beta.34/community/showcase/riftshare.mdx rename to website/versioned_docs/version-v2.0.0-beta.37/community/showcase/riftshare.mdx diff --git a/website/versioned_docs/version-v2.0.0-beta.34/community/showcase/surge.mdx b/website/versioned_docs/version-v2.0.0-beta.37/community/showcase/surge.mdx similarity index 100% rename from website/versioned_docs/version-v2.0.0-beta.34/community/showcase/surge.mdx rename to website/versioned_docs/version-v2.0.0-beta.37/community/showcase/surge.mdx diff --git a/website/versioned_docs/version-v2.0.0-beta.34/community/showcase/wally.mdx b/website/versioned_docs/version-v2.0.0-beta.37/community/showcase/wally.mdx similarity index 100% rename from website/versioned_docs/version-v2.0.0-beta.34/community/showcase/wally.mdx rename to website/versioned_docs/version-v2.0.0-beta.37/community/showcase/wally.mdx diff --git a/website/versioned_docs/version-v2.0.0-beta.34/community/showcase/wombat.mdx b/website/versioned_docs/version-v2.0.0-beta.37/community/showcase/wombat.mdx similarity index 100% rename from website/versioned_docs/version-v2.0.0-beta.34/community/showcase/wombat.mdx rename to website/versioned_docs/version-v2.0.0-beta.37/community/showcase/wombat.mdx diff --git a/website/versioned_docs/version-v2.0.0-beta.34/community/showcase/ytd.mdx b/website/versioned_docs/version-v2.0.0-beta.37/community/showcase/ytd.mdx similarity index 100% rename from website/versioned_docs/version-v2.0.0-beta.34/community/showcase/ytd.mdx rename to website/versioned_docs/version-v2.0.0-beta.37/community/showcase/ytd.mdx diff --git a/website/versioned_docs/version-v2.0.0-beta.34/community/templates.mdx b/website/versioned_docs/version-v2.0.0-beta.37/community/templates.mdx similarity index 85% rename from website/versioned_docs/version-v2.0.0-beta.34/community/templates.mdx rename to website/versioned_docs/version-v2.0.0-beta.37/community/templates.mdx index 4dee08cd1..6d090bb3d 100644 --- a/website/versioned_docs/version-v2.0.0-beta.34/community/templates.mdx +++ b/website/versioned_docs/version-v2.0.0-beta.37/community/templates.mdx @@ -5,7 +5,7 @@ sidebar_position: 1 # Templates This page serves as a list for community supported templates. Please submit a PR (click `Edit this page` at the bottom) -to include your templates. To build your own template, please see the [Templates](../guides/templates) guide. +to include your templates. To build your own template, please see the [Templates](../guides/templates.mdx) guide. To use these templates, run `wails init -n "Your Project Name" -t [the link below[@version]]` @@ -35,10 +35,14 @@ If you are unsure about a template, inspect `package.json` and `wails.json` for - [wails-react-template](https://github.com/AlienRecall/wails-react-template) - A template using reactjs - [wails-react-template](https://github.com/flin7/wails-react-template) - A minimal template for React that supports live development -- [wails-vite-react-ts](https://github.com/lontten/wails-vite-react-ts) - A template with Vite + React + TypeScript +- [wails-template-nextjs](https://github.com/LGiki/wails-template-nextjs) - A template using Next.js and TypeScript ## Svelte - [wails-svelte-template](https://github.com/raitonoberu/wails-svelte-template) - A template using Svelte - [wails-vite-svelte-template](https://github.com/BillBuilt/wails-vite-svelte-template) - A template using Svelte and Vite - [wails-vite-svelte-tailwind-template](https://github.com/BillBuilt/wails-vite-svelte-tailwind-template) - A template using Svelte and Vite with TailwindCSS v3 + +## Elm + +- [wails-elm-template](https://github.com/benjamin-thomas/wails-elm-template) - Develop your GUI app with functional programming and a **snappy** hot-reload setup :tada: :rocket: diff --git a/website/versioned_docs/version-v2.0.0-beta.34/gettingstarted/_category_.json b/website/versioned_docs/version-v2.0.0-beta.37/gettingstarted/_category_.json similarity index 100% rename from website/versioned_docs/version-v2.0.0-beta.34/gettingstarted/_category_.json rename to website/versioned_docs/version-v2.0.0-beta.37/gettingstarted/_category_.json diff --git a/website/versioned_docs/version-v2.0.0-beta.34/gettingstarted/building.mdx b/website/versioned_docs/version-v2.0.0-beta.37/gettingstarted/building.mdx similarity index 92% rename from website/versioned_docs/version-v2.0.0-beta.34/gettingstarted/building.mdx rename to website/versioned_docs/version-v2.0.0-beta.37/gettingstarted/building.mdx index 6709a026a..8c6957117 100644 --- a/website/versioned_docs/version-v2.0.0-beta.34/gettingstarted/building.mdx +++ b/website/versioned_docs/version-v2.0.0-beta.37/gettingstarted/building.mdx @@ -15,5 +15,5 @@ If you run the binary, you should see the default application:
-For more details on compilation options, please refer to the [CLI Reference](../reference/cli#build). +For more details on compilation options, please refer to the [CLI Reference](../reference/cli.mdx#build). diff --git a/website/versioned_docs/version-v2.0.0-beta.34/gettingstarted/development.mdx b/website/versioned_docs/version-v2.0.0-beta.37/gettingstarted/development.mdx similarity index 64% rename from website/versioned_docs/version-v2.0.0-beta.34/gettingstarted/development.mdx rename to website/versioned_docs/version-v2.0.0-beta.37/gettingstarted/development.mdx index 67a9a6443..323e90ba9 100644 --- a/website/versioned_docs/version-v2.0.0-beta.34/gettingstarted/development.mdx +++ b/website/versioned_docs/version-v2.0.0-beta.37/gettingstarted/development.mdx @@ -7,9 +7,10 @@ sidebar_position: 5 You can run your application in development mode by running `wails dev` from your project directory. This will do the following things: - Build your application and run it - - Watch for modifications in your Go files and rebuild/re-run on change - - Sets up a [webserver](http://localhost:34115) that will serve your application over a browser. This allows you to use your favourite browser extensions. You can even call your Go code from the console. + - Bind your Go code to the frontend so it can be called from Javascript + - Using the power of [vite](https://vitejs.dev/), will watch for modifications in your Go files and rebuild/re-run on change + - Sets up a [webserver](http://localhost:34115) that will serve your application over a browser. This allows you to use your favourite browser extensions. You can even call your Go code from the console -To get started, run `wails dev` in the project directory. More information on this can be found [here](../reference/cli#dev). +To get started, run `wails dev` in the project directory. More information on this can be found [here](../reference/cli.mdx#dev). Coming soon: Tutorial \ No newline at end of file diff --git a/website/versioned_docs/version-v2.0.0-beta.37/gettingstarted/firstproject.mdx b/website/versioned_docs/version-v2.0.0-beta.37/gettingstarted/firstproject.mdx new file mode 100644 index 000000000..b5ee1fa46 --- /dev/null +++ b/website/versioned_docs/version-v2.0.0-beta.37/gettingstarted/firstproject.mdx @@ -0,0 +1,127 @@ +--- +sidebar_position: 2 +--- + +# Creating a Project + +## Project Generation + +Now that the CLI is installed, you can generate a new project by using the `wails init` command. + +Pick your favourite framework: + + + + +import Tabs from "@theme/Tabs"; +import TabItem from "@theme/TabItem"; + + + + Generate a Svelte project using Javascript with:
+ + wails init -n myproject -t svelte + + If you would rather use Typescript: + + wails init -n myproject -t svelte-ts +
+ + Generate a React project using Javascript with:
+ + wails init -n myproject -t react + + If you would rather use Typescript: + + wails init -n myproject -t react-ts +
+ + Generate a Vue project using Javascript with:
+ + wails init -n myproject -t vue + + If you would rather use Typescript: + + wails init -n myproject -t vue-ts +
+ + Generate a Preact project using Javascript with:
+ + wails init -n myproject -t preact + + If you would rather use Typescript: + + wails init -n myproject -t preact-ts +
+ + Generate a Lit project using Javascript with:
+ + wails init -n myproject -t lit + + If you would rather use Typescript: + + wails init -n myproject -t lit-ts +
+ + Generate a Vanilla project using Javascript with:
+ + wails init -n myproject -t vanilla + + If you would rather use Typescript: + + wails init -n myproject -t vanilla-ts +
+
+ +
+ +There are also [community templates](../community/templates.mdx) available that offer different capabilities and frameworks. + +To see the other options available, you can run `wails init -help`. +More details can be found in the [CLI Reference](../reference/cli.mdx#init). + +## Project Layout + +Wails projects have the following layout: + +``` +. +├── build/ +│ ├── appicon.png +│ ├── darwin/ +│ └── windows/ +├── frontend/ +├── go.mod +├── go.sum +├── main.go +└── wails.json +``` + +### Project structure rundown + +- `/main.go` - The main application +- `/frontend/` - Frontend project files +- `/build/` - Project build directory +- `/build/appicon.png` - The application icon +- `/build/darwin/` - Mac specific project files +- `/build/windows/` - Windows specific project files +- `/wails.json` - The project configuration +- `/go.mod` - Go module file +- `/go.sum` - Go module checksum file + +The `frontend` directory has nothing specific to Wails and can be any frontend project of your choosing. + +The `build` directory is used during the build process. These files may be updated to customise your builds. If +files are removed from the build directory, default versions will be regenerated. + +The default module name in `go.mod` is "changeme". You should change this to something more appropriate. diff --git a/website/versioned_docs/version-v2.0.0-beta.34/gettingstarted/installation.mdx b/website/versioned_docs/version-v2.0.0-beta.37/gettingstarted/installation.mdx similarity index 92% rename from website/versioned_docs/version-v2.0.0-beta.34/gettingstarted/installation.mdx rename to website/versioned_docs/version-v2.0.0-beta.37/gettingstarted/installation.mdx index a48364ce4..3b4cd33cc 100644 --- a/website/versioned_docs/version-v2.0.0-beta.34/gettingstarted/installation.mdx +++ b/website/versioned_docs/version-v2.0.0-beta.37/gettingstarted/installation.mdx @@ -22,7 +22,7 @@ Wails has a number of common dependencies that are required before installation: Download Go from the [Go Downloads Page](https://golang.org/dl/). -Ensure that you follow the official [Go installation instructions](https://golang.org/doc/install#install). You will also need to ensure that your `PATH` environment variable also includes the path to your `~/go/bin` directory. Restart your terminal and do the following checks: +Ensure that you follow the official [Go installation instructions](https://golang.org/doc/install.mdx#install). You will also need to ensure that your `PATH` environment variable also includes the path to your `~/go/bin` directory. Restart your terminal and do the following checks: - Check Go is installed correctly: `go version` - Check "~/go/bin" is in your PATH variable: `echo $PATH | grep go/bin` diff --git a/website/versioned_docs/version-v2.0.0-beta.34/guides/_category_.json b/website/versioned_docs/version-v2.0.0-beta.37/guides/_category_.json similarity index 100% rename from website/versioned_docs/version-v2.0.0-beta.34/guides/_category_.json rename to website/versioned_docs/version-v2.0.0-beta.37/guides/_category_.json diff --git a/website/versioned_docs/version-v2.0.0-beta.34/guides/application-development.mdx b/website/versioned_docs/version-v2.0.0-beta.37/guides/application-development.mdx similarity index 89% rename from website/versioned_docs/version-v2.0.0-beta.34/guides/application-development.mdx rename to website/versioned_docs/version-v2.0.0-beta.37/guides/application-development.mdx index 639cc089c..039cb227d 100644 --- a/website/versioned_docs/version-v2.0.0-beta.34/guides/application-development.mdx +++ b/website/versioned_docs/version-v2.0.0-beta.37/guides/application-development.mdx @@ -30,7 +30,7 @@ func (a *App) shutdown(ctx context.Context) { - The startup method is called as soon as Wails allocates the resources it needs and is a good place for creating resources, setting up event listeners and anything else the application needs at startup. It is given a `context.Context` which is usually saved in a struct field. This context is needed for calling the - [runtime](../reference/runtime/intro). If this method returns an error, the application will terminate. + [runtime](../reference/runtime/intro.mdx). If this method returns an error, the application will terminate. In dev mode, the error will be output to the console. - The shutdown method will be called by Wails right at the end of the shutdown process. This is a good place to deallocate @@ -59,7 +59,7 @@ func main() { ``` -More information on application lifecycle hooks can be found [here](../howdoesitwork#application-lifecycle-callbacks). +More information on application lifecycle hooks can be found [here](../howdoesitwork.mdx#application-lifecycle-callbacks). ## Binding Methods @@ -113,7 +113,7 @@ func main() { This will bind all public methods in our `App` struct (it will never bind the startup and shutdown methods). -More information on Binding can be found [here](../howdoesitwork#method-binding). +More information on Binding can be found [here](../howdoesitwork.mdx#method-binding). ## Application Menu @@ -161,6 +161,15 @@ The second, if given, will be executed in the `frontend` directory to build the If these 2 keys aren't given, then Wails does absolutely nothing with the frontend. It is only expecting that `embed.FS`. +### AssetsHandler + +A Wails v2 app can optionally define a `http.Handler` in the `options.App`, which allows hooking into the AssetServer to +create files on the fly or process POST/PUT requests. +GET requests are always first handled by the `assets` FS. If the FS doesn't find the requested file the request will be +forwarded to the `http.Handler` for serving. Any requests other than GET will be directly processed by the `AssetsHandler` +if specified. +It's also possible to only use the `AssetsHandler` by specifiy `nil` as the `Assets` option. + ## Built in Dev Server Running `wails dev` will start the built in dev server which will start a file watcher in your project directory. By diff --git a/website/versioned_docs/version-v2.0.0-beta.34/guides/bleeding-edge.mdx b/website/versioned_docs/version-v2.0.0-beta.37/guides/bleeding-edge.mdx similarity index 74% rename from website/versioned_docs/version-v2.0.0-beta.34/guides/bleeding-edge.mdx rename to website/versioned_docs/version-v2.0.0-beta.37/guides/bleeding-edge.mdx index 65a486918..292b9d523 100644 --- a/website/versioned_docs/version-v2.0.0-beta.34/guides/bleeding-edge.mdx +++ b/website/versioned_docs/version-v2.0.0-beta.37/guides/bleeding-edge.mdx @@ -35,7 +35,20 @@ To revert back to a stable version, run: If you want to test a branch, follow the instructions above, but ensure you switch the branch you want to test before installing: - `git clone https://github.com/wailsapp/wails` +- `cd wails` - `git checkout -b branch-to-test --track origin/branch-to-test` -- `cd wails/v2/cmd/wails` +- `cd v2/cmd/wails` - `go install` +## Testing a PR + +If you want to test a PR, follow the instructions above, but ensure you fetch the PR and switch the branch before installing. +Please replace `[IDofThePR]` with the ID of the PR shown on github.com: + +- `git clone https://github.com/wailsapp/wails` +- `cd wails` +- `git fetch -u origin pull/[IDofThePR]/head:test/pr-[IDofThePR]` +- `git checkout test/pr-[IDofThePR]` +- `git reset --hard HEAD` +- `cd v2/cmd/wails` +- `go install` diff --git a/website/versioned_docs/version-v2.0.0-beta.34/guides/developing-wails.mdx b/website/versioned_docs/version-v2.0.0-beta.37/guides/developing-wails.mdx similarity index 100% rename from website/versioned_docs/version-v2.0.0-beta.34/guides/developing-wails.mdx rename to website/versioned_docs/version-v2.0.0-beta.37/guides/developing-wails.mdx diff --git a/website/versioned_docs/version-v2.0.0-beta.34/guides/frameless.mdx b/website/versioned_docs/version-v2.0.0-beta.37/guides/frameless.mdx similarity index 88% rename from website/versioned_docs/version-v2.0.0-beta.34/guides/frameless.mdx rename to website/versioned_docs/version-v2.0.0-beta.37/guides/frameless.mdx index 9a2adc12a..cd78d3937 100644 --- a/website/versioned_docs/version-v2.0.0-beta.34/guides/frameless.mdx +++ b/website/versioned_docs/version-v2.0.0-beta.37/guides/frameless.mdx @@ -1,8 +1,8 @@ # Frameless Applications -Wails supports applications with no frame. This can be achieved by using the [frameless](../reference/options#frameless) -field in [Application Options](../reference/options#application-options). +Wails supports applications with no frame. This can be achieved by using the [frameless](../reference/options.mdx#frameless) +field in [Application Options](../reference/options.mdx#application-options). Wails offers a simple solution for dragging the window: Any HTML element that has the attribute "data-wails-drag" will act as a "drag handle". This property applies to all nested elements. If you need to indicate that a nested element diff --git a/website/versioned_docs/version-v2.0.0-beta.34/guides/frontend.mdx b/website/versioned_docs/version-v2.0.0-beta.37/guides/frontend.mdx similarity index 100% rename from website/versioned_docs/version-v2.0.0-beta.34/guides/frontend.mdx rename to website/versioned_docs/version-v2.0.0-beta.37/guides/frontend.mdx diff --git a/website/versioned_docs/version-v2.0.0-beta.34/guides/ides.mdx b/website/versioned_docs/version-v2.0.0-beta.37/guides/ides.mdx similarity index 100% rename from website/versioned_docs/version-v2.0.0-beta.34/guides/ides.mdx rename to website/versioned_docs/version-v2.0.0-beta.37/guides/ides.mdx diff --git a/website/versioned_docs/version-v2.0.0-beta.34/guides/linux-distro-support.mdx b/website/versioned_docs/version-v2.0.0-beta.37/guides/linux-distro-support.mdx similarity index 100% rename from website/versioned_docs/version-v2.0.0-beta.34/guides/linux-distro-support.mdx rename to website/versioned_docs/version-v2.0.0-beta.37/guides/linux-distro-support.mdx diff --git a/website/versioned_docs/version-v2.0.0-beta.34/guides/manual-builds.mdx b/website/versioned_docs/version-v2.0.0-beta.37/guides/manual-builds.mdx similarity index 100% rename from website/versioned_docs/version-v2.0.0-beta.34/guides/manual-builds.mdx rename to website/versioned_docs/version-v2.0.0-beta.37/guides/manual-builds.mdx diff --git a/website/versioned_docs/version-v2.0.0-beta.34/guides/migrating.mdx b/website/versioned_docs/version-v2.0.0-beta.37/guides/migrating.mdx similarity index 89% rename from website/versioned_docs/version-v2.0.0-beta.34/guides/migrating.mdx rename to website/versioned_docs/version-v2.0.0-beta.37/guides/migrating.mdx index 9c3d92933..1474131f8 100644 --- a/website/versioned_docs/version-v2.0.0-beta.34/guides/migrating.mdx +++ b/website/versioned_docs/version-v2.0.0-beta.37/guides/migrating.mdx @@ -25,7 +25,7 @@ Example: app.Run() ``` -In v2, there is just a single method, `wails.Run()`, that accepts [application options](../reference/options#application-options). +In v2, there is just a single method, `wails.Run()`, that accepts [application options](../reference/options.mdx#application-options). ```go title="v2" err := wails.Run(&options.App{ @@ -43,7 +43,7 @@ In v2, there is just a single method, `wails.Run()`, that accepts [application o In v1, it was possible to bind both arbitrary functions and structs. In v2, this has been simplified to only binding structs. The struct instances that were previously passed to the `Bind()` method in v1, are now specified in the `Bind` field of -the [application options](../reference/options#application-options): +the [application options](../reference/options.mdx#application-options): ```go title="v1" app := wails.CreateApp(/* options */) @@ -64,13 +64,13 @@ In v1, bound methods were available to the frontend at `window.backend`. This ha ### Application Lifecycle In v1, there were 2 special methods in a bound struct: `WailsInit()` and `WailsShutdown()`. These have -been replaced with 3 lifecycle hooks as part of the [application options](../reference/options#application-options): +been replaced with 3 lifecycle hooks as part of the [application options](../reference/options.mdx#application-options): -- [OnStartup](../reference/options#onstartup) -- [OnShutdown](../reference/options#onshutdown) -- [OnDomReady](../reference/options#ondomready) +- [OnStartup](../reference/options.mdx#onstartup) +- [OnShutdown](../reference/options.mdx#onshutdown) +- [OnDomReady](../reference/options.mdx#ondomready) -Note: [OnDomReady](../reference/options#ondomready) replaces the `wails:ready` system event in v1. +Note: [OnDomReady](../reference/options.mdx#ondomready) replaces the `wails:ready` system event in v1. These methods can be standard functions, but a common practice is to have them part of a struct: @@ -96,11 +96,11 @@ func (b *Basic) startup(ctx context.Context) { The runtime in v2 is much richer than v1 with support for menus, window manipulation and better dialogs. The signature of the methods has changed slightly - please refer -the the [Runtime Reference](../reference/runtime/intro). +the the [Runtime Reference](../reference/runtime/intro.mdx). -In v1, the [runtime](../reference/runtime/intro) was available via a struct passed to `WailsInit()`. +In v1, the [runtime](../reference/runtime/intro.mdx) was available via a struct passed to `WailsInit()`. In v2, the runtime has been moved out to its own package. Each method in the runtime takes the -`context.Context` that is passed to the [OnStartup](../reference/options#onstartup) method. +`context.Context` that is passed to the [OnStartup](../reference/options.mdx#onstartup) method. ```go title="Runtime Example" package main @@ -173,7 +173,7 @@ func main() { Of course, bundlers can be used if you wish to. The only requirement is to pass the final application assets directory to Wails using an `embed.FS` in the `Assets` -key of the [application options](../reference/options#application-options). +key of the [application options](../reference/options.mdx#application-options). ### Project Configuration diff --git a/website/versioned_docs/version-v2.0.0-beta.34/guides/overscroll.mdx b/website/versioned_docs/version-v2.0.0-beta.37/guides/overscroll.mdx similarity index 100% rename from website/versioned_docs/version-v2.0.0-beta.34/guides/overscroll.mdx rename to website/versioned_docs/version-v2.0.0-beta.37/guides/overscroll.mdx diff --git a/website/versioned_docs/version-v2.0.0-beta.34/guides/routing.mdx b/website/versioned_docs/version-v2.0.0-beta.37/guides/routing.mdx similarity index 94% rename from website/versioned_docs/version-v2.0.0-beta.34/guides/routing.mdx rename to website/versioned_docs/version-v2.0.0-beta.37/guides/routing.mdx index 7551e110f..3e1f255d8 100644 --- a/website/versioned_docs/version-v2.0.0-beta.34/guides/routing.mdx +++ b/website/versioned_docs/version-v2.0.0-beta.37/guides/routing.mdx @@ -20,7 +20,7 @@ const router = createRouter({ ## Angular -The recommended approach for routing in Angular is [HashLocationStrategy](https://codecraft.tv/courses/angular/routing/routing-strategies/#_hashlocationstrategy): +The recommended approach for routing in Angular is [HashLocationStrategy](https://codecraft.tv/courses/angular/routing/routing-strategies#_hashlocationstrategy): ```ts RouterModule.forRoot(routes, {useHash: true}) diff --git a/website/versioned_docs/version-v2.0.0-beta.34/guides/signing.mdx b/website/versioned_docs/version-v2.0.0-beta.37/guides/signing.mdx similarity index 100% rename from website/versioned_docs/version-v2.0.0-beta.34/guides/signing.mdx rename to website/versioned_docs/version-v2.0.0-beta.37/guides/signing.mdx diff --git a/website/versioned_docs/version-v2.0.0-beta.34/guides/templates.mdx b/website/versioned_docs/version-v2.0.0-beta.37/guides/templates.mdx similarity index 98% rename from website/versioned_docs/version-v2.0.0-beta.34/guides/templates.mdx rename to website/versioned_docs/version-v2.0.0-beta.37/guides/templates.mdx index 824fb6eb9..090cf8a9e 100644 --- a/website/versioned_docs/version-v2.0.0-beta.34/guides/templates.mdx +++ b/website/versioned_docs/version-v2.0.0-beta.37/guides/templates.mdx @@ -4,7 +4,7 @@ Wails generates projects from pre-created templates. In v1, this was a difficult to maintain set of projects that were subject to going out of date. In v2, to empower the community, a couple of new features have been added for templates: -- Ability to generate projects from [Remote Templates](../reference/cli#remote-templates) +- Ability to generate projects from [Remote Templates](../reference/cli.mdx#remote-templates) - Tooling to help create your own templates ## Creating Templates @@ -91,5 +91,5 @@ Publishing a template is simply pushing the files to GitHub. The following best - Remove any unwanted files and directories (such as `.git`) from your frontend directory - Ensure that `template.json` is complete, especially `helpurl` - Push the files to GitHub -- Create a PR on the [Community Templates](../community/templates) page +- Create a PR on the [Community Templates](../community/templates.mdx) page - Announce the template on the [Template Announcement](https://github.com/wailsapp/wails/discussions/825) discussion board diff --git a/website/versioned_docs/version-v2.0.0-beta.34/guides/troubleshooting.mdx b/website/versioned_docs/version-v2.0.0-beta.37/guides/troubleshooting.mdx similarity index 100% rename from website/versioned_docs/version-v2.0.0-beta.34/guides/troubleshooting.mdx rename to website/versioned_docs/version-v2.0.0-beta.37/guides/troubleshooting.mdx diff --git a/website/versioned_docs/version-v2.0.0-beta.34/guides/windows-installer.mdx b/website/versioned_docs/version-v2.0.0-beta.37/guides/windows-installer.mdx similarity index 100% rename from website/versioned_docs/version-v2.0.0-beta.34/guides/windows-installer.mdx rename to website/versioned_docs/version-v2.0.0-beta.37/guides/windows-installer.mdx diff --git a/website/versioned_docs/version-v2.0.0-beta.34/guides/windows.mdx b/website/versioned_docs/version-v2.0.0-beta.37/guides/windows.mdx similarity index 100% rename from website/versioned_docs/version-v2.0.0-beta.34/guides/windows.mdx rename to website/versioned_docs/version-v2.0.0-beta.37/guides/windows.mdx diff --git a/website/versioned_docs/version-v2.0.0-beta.34/howdoesitwork.mdx b/website/versioned_docs/version-v2.0.0-beta.37/howdoesitwork.mdx similarity index 57% rename from website/versioned_docs/version-v2.0.0-beta.34/howdoesitwork.mdx rename to website/versioned_docs/version-v2.0.0-beta.37/howdoesitwork.mdx index 4a0872cd3..a66e8cb9a 100644 --- a/website/versioned_docs/version-v2.0.0-beta.34/howdoesitwork.mdx +++ b/website/versioned_docs/version-v2.0.0-beta.37/howdoesitwork.mdx @@ -83,7 +83,7 @@ This example has the following options set: - `OnShutdown` - A callback for when the application is about to quit - `Bind` - A slice of struct instances that we wish to expose to the frontend -A full list of application options can be found in the [Options Reference](./reference/options). +A full list of application options can be found in the [Options Reference](reference/options). #### Assets @@ -108,24 +108,25 @@ the application. When running in development mode using the `wails dev` command, the assets are loaded off disk, and any changes result in a "live reload". The location of the assets will be inferred from the `embed.FS`. -More details can be found in the [Application Development Guide](./guides/application-development). +More details can be found in the [Application Development Guide](guides/application-development.mdx). #### Application Lifecycle Callbacks -Just before the frontend is about to load `index.html`, a callback is made to the function provided in [OnStartup](./reference/options#OnStartup). +Just before the frontend is about to load `index.html`, a callback is made to the function provided in [OnStartup](reference/options.mdx#onstartup). A standard Go context is passed to this method. This context is required when calling the runtime so a standard pattern is to save -a reference to in this method. Just before the application shuts down, the [OnShutdown](./reference/options#OnShutdown) callback is called in the same way, -again with the context. There is also an [OnDomReady](./reference/options#OnDomReady) callback for when the frontend +a reference to in this method. Just before the application shuts down, the [OnShutdown](reference/options.mdx#onshutdown) callback is called in the same way, +again with the context. There is also an [OnDomReady](reference/options.mdx#ondomready) callback for when the frontend has completed loading all assets in `index.html` and is equivalent of the [`body onload`](https://www.w3schools.com/jsref/event_onload.asp) event in Javascript. It is also possible to hook into the window close (or application quit) event by setting the -option [OnBeforeClose](./reference/options#OnBeforeClose). +option [OnBeforeClose](reference/options.mdx#onbeforeclose). #### Method Binding The `Bind` option is one of the most important options in a Wails application. It specifies which struct methods -to expose to the frontend. When the application starts, it examines the struct instances listed in the `Bind` field in -the options, determines which methods are public (starts with an uppercase letter) and will generate Javascript versions -of those methods that can be called by the frontend code. +to expose to the frontend. Think of structs like "controllers" in a traditional web application. When the application +starts, it examines the struct instances listed in the `Bind` field in the options, determines which methods are +public (starts with an uppercase letter) and will generate Javascript versions of those methods that can be called +by the frontend code. :::info Note @@ -135,7 +136,7 @@ of those methods that can be called by the frontend code. In this example, we create a new `App` instance and then add this instance to the `Bind` option in `wails.Run`: -```go {16,26} title="main.go" +```go {16,24} title="main.go" package main import ( @@ -158,8 +159,6 @@ func main() { Width: 1024, Height: 768, Assets: &assets, - OnStartup: app.startup, - OnShutdown: app.shutdown, Bind: []interface{}{ app, }, @@ -174,67 +173,41 @@ type App struct { ctx context.Context } -func (b *App) startup(ctx context.Context) { - b.ctx = ctx -} - -func (b *App) shutdown(ctx context.Context) {} - -func (b *App) Greet(name string) string { +func (a *App) Greet(name string) string { return fmt.Sprintf("Hello %s!", name) } ``` You may bind as many structs as you like. Just make sure you create an instance of it and pass it in `Bind`: -```go {10-12} -... +```go {8-10} + //... err := wails.Run(&options.App{ Title: "Basic Demo", Width: 1024, Height: 768, Assets: &assets, - OnStartup: app.startup, - OnShutdown: app.shutdown, Bind: []interface{}{ app, &mystruct1{}, &mystruct2{}, }, }) -... + ``` -The bound methods are located in the frontend at `window.go...`. -In the example above, we bind `app`, which has one public method `Greet`. -This can be called in Javascript by calling `window.go.main.App.Greet`. -These methods return a Promise. A successful call will result in the first return value from the Go call to be passed -to the `resolve` handler. An unsuccessful call is when a Go method that has an error type as it's second return value, -passes an error instance back to the caller. This is passed back via the `reject` handler. -In the example above, `Greet` only returns a `string` so the Javascript call will never reject - unless invalid data -is passed to it. +When you run `wails dev` (or `wails generate module`), a frontend module will be generated containing the following: + - Javascript bindings for all bound methods + - Typescript declarations for all bound methods + - Typescript definitions for all Go structs used as inputs or outputs by the bound methods -All data types are correctly translated between Go and Javascript. Even structs. If you return a struct from a Go call, -it will be returned to your frontend as a Javascript map. Note: If you wish to use structs, you **must** define `json` struct -tags for your fields! - -:::info Note -Anonymous nested structs are not supported at this time. -::: - -It is also possible to send structs back to Go. Any Javascript map passed as an argument that -is expecting a struct, will be converted to that struct type. To make this process a lot easier, in `dev` mode, -a TypeScript module is generated, defining all the struct types used in bound methods. Using this module, it's possible -to construct and send native Javascript objects to the Go code. - -More information on Binding can be found in the [Binding Methods](./guides/application-development#binding-methods) -section of the [Application Development Guide](./guides/application-development). +This makes it incredibly simple to call Go code from the frontend, using the same strongly typed datastructures. ## The Frontend ### Overview -The frontend is a collection of files rendered by webkit. It's like a browser and webserver in one. +The frontend is a collection of files rendered by webkit. It''s like a browser and webserver in one. There is virtually[^1] no limit to which frameworks or libraries you can use. The main points of interaction between the frontend and your Go code are: @@ -247,48 +220,61 @@ the frontend and your Go code are: ### Calling bound Go methods -All bound Go methods are available at `window.go...`. As stated in -the previous section, these return a Promise where a successful call returns a value to the -resolve handler and an error returns a value to the reject handler. +When you run your application with `wails dev`, it will automatically generate Javascript bindings for your structs in a +directory called `wailsjs/go` (You can also do this by running `wails generate module`). The generated files mirror the +package names in your application. In the example above, we bind `app`, which has one public method `Greet`. This will +lead to the generation of the following files: -```go title="mycode.js" -window.go.main.App.Greet("Bill").then((result) => { - console.log("The greeting is: " + result); -}) +```bash +wailsjs + └─go + └─main + ├─App.d.ts + └─App.js +``` +Here we can see that there is a `main` package that contains the Javascript bindings for the bound `App` struct, as well +as the Typescript declaration file for those methods. To call `Greet` from our frontend, we simply import the method and +call it like a regular Javascript function: + +```javascript + // ... + import {Greet} from '../wailsjs/go/main/App' + + function doGreeting(name) { + Greet(name).then((result) => { + // Do something with result + }) + } +``` +The Typescript declaration file gives you the correct types for the bound methods: + +```ts +export function Greet(arg1:string):Promise; ``` -When running the application in `dev` mode, a javascript module is generated that wraps these -methods with JSDoc annotations. This really help with development, especially as most -IDEs will process JSDoc to provide code completion and type hinting. This module is called `go` -and is generated in the directory specified by the `wailsjsdir` flag. In this module is a file -called `bindings.js` containing these wrappers. For the above example, the file contains the -following code: +The generated methods return a Promise. A successful call will result in the first return value from the Go call to be passed +to the `resolve` handler. An unsuccessful call is when a Go method that has an error type as it''s second return value, +passes an error instance back to the caller. This is passed back via the `reject` handler. +In the example above, `Greet` only returns a `string` so the Javascript call will never reject - unless invalid data +is passed to it. -```js title="bindings.js" -const go = { - main: { - App: { - /** - * Greet - * @param {Person} arg1 - Go Type: string - * @returns {Promise} - Go Type: string - */ - Greet: (arg1) => { - return window.go.main.App.Greet(arg1); - }, - }, - }, -}; -export default go; -``` +All data types are correctly translated between Go and Javascript. Even structs. If you return a struct from a Go call, +it will be returned to your frontend as a Javascript class. Note: If you wish to use structs, you **must** define +`json` struct tags for your fields! -#### Support for structs +:::info Note +Anonymous nested structs are not supported at this time. +::: -There is also additional support for Go methods that use structs in their signature. All Go structs -specified by bound method (either as parameters or return types) will have Typescript versions auto -generated as part of the Go code wrapper module. Using these, it's possible to share the same data -model between Go and Javascript. These models align with the JSDoc annotations, empowering IDE code -completion. +It is possible to send structs back to Go. Any Javascript map/class passed as an argument that +is expecting a struct, will be converted to that struct type. To make this process a lot easier, in `dev` mode, +a TypeScript module is generated, defining all the struct types used in bound methods. Using this module, it''s possible +to construct and send native Javascript objects to the Go code. + +There is also support for Go methods that use structs in their signature. All Go structs +specified by a bound method (either as parameters or return types) will have Typescript versions auto +generated as part of the Go code wrapper module. Using these, it''s possible to share the same data +model between Go and Javascript. Example: We update our `Greet` method to accept a `Person` instead of a string: @@ -309,76 +295,77 @@ func (a *App) Greet(p Person) string { } ``` -Our `bindings.js` file has now been updated to reflect the change: +The `wailsjs/go/main/App.js` file will still have the following code: -```js title="bindings.js" -const go = { - main: { - App: { - /** - * Greet - * @param {Person} arg1 - Go Type: main.Person - * @returns {Promise} - Go Type: string - */ - Greet: (arg1) => { - return window.go.main.App.Greet(arg1); - }, - }, - }, -}; -export default go; +```js title="App.js" +export function Greet(arg1) { + return window['go']['main']['App']['Greet'](arg1); +} ``` -Alongside `bindings.js`, there is a file called `models.ts`. This contains our Go structs in TypeScript form: +But the `wailsjs/go/main/App.d.ts` file will be updated with the following code: + +```ts title="App.d.ts" +import {main} from '../models'; + +export function Greet(arg1:main.Person):Promise; +``` + +As we can see, the "main" namespace is imported from a new "models.ts" file. This file contains all the struct definitions +used by our bound methods. In this example, this is a `Person` struct. If we look at `models.ts`, we can see how the models +are defined: ```ts title="models.ts" -export class Address { - street: string; - postcode: string; +export namespace main { - static createFrom(source: any = {}) { - return new Address(source); - } + export class Address { + street: string; + postcode: string; - constructor(source: any = {}) { - if ("string" === typeof source) source = JSON.parse(source); - this.street = source["street"]; - this.postcode = source["postcode"]; - } -} -export class Person { - name: string; - age: number; - address?: Address; + static createFrom(source: any = {}) { + return new Address(source); + } - static createFrom(source: any = {}) { - return new Person(source); - } + constructor(source: any = {}) { + if ('string' === typeof source) source = JSON.parse(source); + this.street = source["street"]; + this.postcode = source["postcode"]; + } + } + export class Person { + name: string; + age: number; + address?: Address; - constructor(source: any = {}) { - if ("string" === typeof source) source = JSON.parse(source); - this.name = source["name"]; - this.age = source["age"]; - this.address = this.convertValues(source["address"], Address); - } + static createFrom(source: any = {}) { + return new Person(source); + } - convertValues(a: any, classs: any, asMap: boolean = false): any { - if (!a) { - return a; - } - if (a.slice) { - return (a as any[]).map((elem) => this.convertValues(elem, classs)); - } else if ("object" === typeof a) { - if (asMap) { - for (const key of Object.keys(a)) { - a[key] = new classs(a[key]); - } - return a; - } - return new classs(a); - } - return a; - } + constructor(source: any = {}) { + if ('string' === typeof source) source = JSON.parse(source); + this.name = source["name"]; + this.age = source["age"]; + this.address = this.convertValues(source["address"], Address); + } + + convertValues(a: any, classs: any, asMap: boolean = false): any { + if (!a) { + return a; + } + if (a.slice) { + return (a as any[]).map(elem => this.convertValues(elem, classs)); + } else if ("object" === typeof a) { + if (asMap) { + for (const key of Object.keys(a)) { + a[key] = new classs(a[key]); + } + return a; + } + return new classs(a); + } + return a; + } + } } ``` @@ -386,22 +373,23 @@ So long as you have TypeScript as part of your frontend build configuration, you the following way: ```js title="mycode.js" -import go from "./wailsjs/go/bindings"; -import { Person } from "./wailsjs/go/models"; + import {Greet} from '../wailsjs/go/main/App' + import {main} from '../wailsjs/go/models' -let name = ""; - -function greet(name) { - let p = new Person(); - p.name = name; - p.age = 42; - go.main.App.Greet(p).then((result) => { - console.log(result); - }); -} + function generate() { + let person = new main.Person() + person.name = "Peter" + person.age = 27 + Greet(person).then((result) => { + console.log(result) + }) + } ``` -The combination of JSDoc and TypeScript generated models makes for a powerful development environment. +The combination of generated bindings and TypeScript models makes for a powerful development environment. + +More information on Binding can be found in the [Binding Methods](guides/application-development.mdx#binding-methods) +section of the [Application Development Guide](guides/application-development.mdx). ### Calling runtime methods @@ -412,4 +400,4 @@ tasks such as emit an event or perform logging operations: window.runtime.EventsEmit("my-event", 1); ``` -More details about the JS runtime can be found in the [Runtime Reference](./reference/runtime/intro). +More details about the JS runtime can be found in the [Runtime Reference](reference/runtime/intro). diff --git a/website/versioned_docs/version-v2.0.0-beta.34/introduction.mdx b/website/versioned_docs/version-v2.0.0-beta.37/introduction.mdx similarity index 91% rename from website/versioned_docs/version-v2.0.0-beta.34/introduction.mdx rename to website/versioned_docs/version-v2.0.0-beta.37/introduction.mdx index 7663f46a0..846b21e1d 100644 --- a/website/versioned_docs/version-v2.0.0-beta.34/introduction.mdx +++ b/website/versioned_docs/version-v2.0.0-beta.37/introduction.mdx @@ -21,6 +21,12 @@ gives it that 'frosty' effect of a native app.

+## Quick Start Templates + +Wails comes with a number of pre-configured templates that allow you to get your application up and running quickly. +There are templates for the following frameworks: Svelte, React, Vue, Preact, Lit and Vanilla. There are both Javascript +and Typescript versions for each template. + ## Native Elements Wails uses a purpose built library for handling native elements such as Window, Menus, Dialogs, etc, so you can build diff --git a/website/versioned_docs/version-v2.0.0-beta.34/reference/_category_.json b/website/versioned_docs/version-v2.0.0-beta.37/reference/_category_.json similarity index 100% rename from website/versioned_docs/version-v2.0.0-beta.34/reference/_category_.json rename to website/versioned_docs/version-v2.0.0-beta.37/reference/_category_.json diff --git a/website/versioned_docs/version-v2.0.0-beta.34/reference/cli.mdx b/website/versioned_docs/version-v2.0.0-beta.37/reference/cli.mdx similarity index 88% rename from website/versioned_docs/version-v2.0.0-beta.34/reference/cli.mdx rename to website/versioned_docs/version-v2.0.0-beta.37/reference/cli.mdx index 30a6466c3..4dcc55931 100644 --- a/website/versioned_docs/version-v2.0.0-beta.34/reference/cli.mdx +++ b/website/versioned_docs/version-v2.0.0-beta.37/reference/cli.mdx @@ -29,7 +29,7 @@ Example: This will generate a a project called "test" in the "mytestproject" directory, initialise git, generate vscode project files and do so silently. -More information on using IDEs with Wails can be found [here](/docs/guides/ides). +More information on using IDEs with Wails can be found [here](../guides/ides.mdx). ### Remote Templates @@ -38,7 +38,7 @@ Remote templates (hosted on GitHub) are supported and can be installed by using Example: `wails init -n test -t https://github.com/leaanthony/testtemplate[@v1.0.0]` -A list of community maintained templates can be found [here](/docs/community/templates) +A list of community maintained templates can be found [here](../community/templates.mdx) :::warning Attention @@ -54,7 +54,7 @@ A list of community maintained templates can be found [here](/docs/community/tem | Flag | Description | Default | | :------------------- | :-------------------------------------- | :------------------------- | -| -platform | Build for the given (comma delimited) [platforms](/docs/reference/cli#platforms) eg. `windows/arm64`. Note, if you do not give the architecture, `runtime.GOARCH` is used. | runtime.GOOS/runtime.GOARCH | +| -platform | Build for the given (comma delimited) [platforms](../reference/cli.mdx#platforms) eg. `windows/arm64`. Note, if you do not give the architecture, `runtime.GOARCH` is used. | runtime.GOOS/runtime.GOARCH | | -clean | Cleans the `build/bin` directory | | | -compiler "compiler"| Use a different go compiler to build, eg go1.15beta1 | go | | -ldflags "flags" | Additional ldflags to pass to the compiler | | @@ -69,10 +69,11 @@ A list of community maintained templates can be found [here](/docs/community/tem | -webview2 | WebView2 installer strategy: download,embed,browser,error | download | | -u | Updates your project's `go.mod` to use the same version of Wails as the CLI | | | -debug | Retains debug information in the application | false | +| -trimpath | Remove all file system paths from the resulting executable. | false | -For a detailed description of the `webview2` flag, please refer to the [Windows](/docs/guides/windows) Guide. +For a detailed description of the `webview2` flag, please refer to the [Windows](../guides/windows.mdx) Guide. -If you prefer to build using standard Go tooling, please consult the [Manual Builds](/docs/guides/manual-builds) +If you prefer to build using standard Go tooling, please consult the [Manual Builds](../guides/manual-builds.mdx) guide. Example: @@ -169,12 +170,12 @@ Your system is ready for Wails development! | -noreload | Disable automatic reload when assets change | | | -v | Verbosity level (0 - silent, 1 - standard, 2 - verbose) | 1 | | -wailsjsdir | The directory to generate the generated Wails JS modules | Value in `wails.json` | -| -debounce | The time to wait for reload after an asset change is detected | 100 (milliseconds) | -| -devserverurl "url" | Use 3rd party dev server url, EG Vite | "http://localhost:34115" | +| -debounce | The time to wait for reload after an asset change is detected | 100 (milliseconds) | +| -devserver "host:port" | The address to bind the wails dev server to | "localhost:34115" | +| -frontenddevserverurl "url" | Use 3rd party dev server url to serve assets, EG Vite | "" | | -appargs "args" | Arguments passed to the application in shell style | | | -platform "platform" | Platform/Arch to target | `runtime.GOOS` | -| -save | Saves the given `assetdir`, `reloaddirs`, `wailsjsdir`, `debounce` and `devserverurl` flags in - `wails.json` to become the defaults for subsequent invocations. | | +| -save | Saves the given `assetdir`, `reloaddirs`, `wailsjsdir`, `debounce`, `devserver` and `frontenddevserverurl` flags in `wails.json` to become the defaults for subsequent invocations. | | Example: @@ -182,12 +183,12 @@ Example: This command will do the following: - - Build the application and run it (more details [here](/docs/guides/manual-builds) + - Build the application and run it (more details [here](../guides/manual-builds.mdx) - Generate the Wails JS modules in `./frontend/src` - Watch for updates to files in `./frontend/dist` and reload on any change - Open a browser and connect to the application -There is more information on using this feature with existing framework scripts [here](/docs/guides/application-development#live-reloading). +There is more information on using this feature with existing framework scripts [here](../guides/application-development.mdx#live-reloading). ## generate @@ -201,7 +202,7 @@ it may be used for generating projects. | -name | The template name (Mandatory) | | -frontend "path" | Path to frontend project to use in template | -For more details on creating templates, consult the [Templates guide](/docs/guides/templates). +For more details on creating templates, consult the [Templates guide](../guides/templates.mdx). ## update @@ -215,4 +216,4 @@ For more details on creating templates, consult the [Templates guide](/docs/guid ## version -`wails version` will simply output the current CLI version. \ No newline at end of file +`wails version` will simply output the current CLI version. diff --git a/website/versioned_docs/version-v2.0.0-beta.34/reference/menus.mdx b/website/versioned_docs/version-v2.0.0-beta.37/reference/menus.mdx similarity index 83% rename from website/versioned_docs/version-v2.0.0-beta.34/reference/menus.mdx rename to website/versioned_docs/version-v2.0.0-beta.37/reference/menus.mdx index ea5e47367..bab623586 100644 --- a/website/versioned_docs/version-v2.0.0-beta.34/reference/menus.mdx +++ b/website/versioned_docs/version-v2.0.0-beta.37/reference/menus.mdx @@ -5,27 +5,34 @@ sidebar_position: 4 # Menus It is possible to add an application menu to Wails projects. This is achieved by defining a [Menu](#menu) struct and -setting the [`Menu`](../reference/options#menu) option, or by calling the runtime method [MenuSetApplicationMenu](../reference/runtime/menu#menusetapplicationmenu). +setting it in the [`Menu`](../reference/options.mdx#menu) application config, or by calling the runtime method +[MenuSetApplicationMenu](../reference/runtime/menu.mdx#menusetapplicationmenu). -It is also possible to dynamically update the menu, by updating the menu struct and calling -[MenuUpdateApplicationMenu](../reference/runtime/menu#menuupdateapplicationmenu). - -Example: +An example of how to create a menu: ```go - myMenu := menu.NewMenuFromItems( - menu.SubMenu("File", menu.NewMenuFromItems( - menu.Text("&Open", keys.CmdOrCtrl("o"), openFile), - menu.Separator(), - menu.Text("Quit", keys.CmdOrCtrl("q"), func(_ *menu.CallbackData) { - runtime.Quit() - }), - )), + AppMenu := menu.NewMenu() + FileMenu := AppMenu.AddSubmenu("File") + FileMenu.AddText("&Open", keys.CmdOrCtrl("o"), openFile) + FileMenu.AddSeparator() + FileMenu.AddText("Quit", keys.CmdOrCtrl("q"), func(_ *menu.CallbackData) { + runtime.Quit() + }) + + err := wails.Run(&options.App{ + Title: "Menus Demo", + Width: 800, + Height: 600, + Menu: AppMenu, + Bind: []interface{}{ + app, + }, ) + // ... +```` - runtime.MenuSetApplicationMenu(myMenu) - -``` +It is also possible to dynamically update the menu, by updating the menu struct and calling +[MenuUpdateApplicationMenu](../reference/runtime/menu.mdx#menuupdateapplicationmenu). The example above uses helper methods, however it's possible to build the menu structs manually. @@ -211,8 +218,18 @@ func Text(label string, accelerator *keys.Accelerator, click Callback) *MenuItem func Separator() *MenuItem func Radio(label string, selected bool, accelerator *keys.Accelerator, click Callback) *MenuItem func Checkbox(label string, checked bool, accelerator *keys.Accelerator, click Callback) *MenuItem -func SubMenu(label string, menu *Menu) *MenuItem +func SubMenu(label string, menu *Menu) *Menu ``` +You can also create menu items directly on a menu by using the "Add" helpers: + +```go title="Package: github.com/wailsapp/wails/v2/pkg/menu" +func (m *Menu) AddText(label string, accelerator *keys.Accelerator, click Callback) *MenuItem +func (m *Menu) AddSeparator() *MenuItem +func (m *Menu) AddRadio(label string, selected bool, accelerator *keys.Accelerator, click Callback) *MenuItem +func (m *Menu) AddCheckbox(label string, checked bool, accelerator *keys.Accelerator, click Callback) *MenuItem +func (m *Menu) AddSubMenu(label string, menu *Menu) *MenuI +``` + A note on radio groups: A radio group is defined as a number of radio menu items that are next to each other in the menu. This means that you do not need to group items together as it is automatic. However, that also means you cannot have 2 diff --git a/website/versioned_docs/version-v2.0.0-beta.34/reference/options.mdx b/website/versioned_docs/version-v2.0.0-beta.37/reference/options.mdx similarity index 74% rename from website/versioned_docs/version-v2.0.0-beta.34/reference/options.mdx rename to website/versioned_docs/version-v2.0.0-beta.37/reference/options.mdx index 4b55ead0e..eb3177633 100644 --- a/website/versioned_docs/version-v2.0.0-beta.34/reference/options.mdx +++ b/website/versioned_docs/version-v2.0.0-beta.37/reference/options.mdx @@ -30,6 +30,7 @@ func main() { RGBA: &options.RGBA{R: 0, G: 0, B: 0, A: 255}, AlwaysOnTop: false, Assets: assets, + AssetsHandler: assetsHandler, Menu: app.applicationMenu(), Logger: nil, LogLevel: logger.DEBUG, @@ -56,6 +57,8 @@ func main() { LightModeTitleText: windows.RGB(20, 20, 20), LightModeBorder: windows.RGB(200, 200, 200), }, + // User messages that can be customised + Messages *windows.Messages }, Mac: &mac.Options{ TitleBar: &mac.TitleBar{ @@ -75,6 +78,9 @@ func main() { Icon: icon, }, }, + Linux: &linux.Options{ + Icon: icon, + }, }) if err != nil { log.Fatal(err) @@ -134,7 +140,7 @@ Name: Frameless Type: bool When set to `true`, the window will have no borders or title bar. -Also see [Frameless Windows](../guides/frameless). +Also see [Frameless Windows](../guides/frameless.mdx). ### MinWidth @@ -178,7 +184,7 @@ Name: StartHidden Type: bool -When set to `true`, the application will be hidden until [WindowShow](../reference/runtime/window#WindowShow) +When set to `true`, the application will be hidden until [WindowShow](../reference/runtime/window.mdx#windowshow) is called. ### HideWindowOnClose @@ -212,17 +218,49 @@ Indicates that the window should stay above other windows when losing focus. Name: Assets -Type: \*embed.FS +Type: embed.FS The frontend assets to be used by the application. Requires an `index.html` file. +### AssetsHandler + + +Name: AssetsHandler + +Type: http.Handler + + +The assets handler is a generic `http.Handler` which will be called for any non GET request on the assets server +and for GET requests which can not be served from the `assets` because the file is not found. + +| Value | Win | Mac | Lin | +| ----------------------------- | --- | --- | --- | +| GET | ✅ | ✅ | ✅ | +| POST | ✅ | ✅ | ❌ | +| PUT | ✅ | ✅ | ❌ | +| PATCH | ✅ | ✅ | ❌ | +| DELETE | ✅ | ✅ | ❌ | +| Request Headers | ✅ | ✅ | ❌ | +| Request Body | ✅ | ✅ | ❌ | +| Request Body Streaming | ❌ | ❌ | ❌ | +| Response StatusCodes | ✅ | ✅ | ❌ | +| Response Headers | ✅ | ✅ | ❌ | +| Response Body | ✅ | ✅ | ✅ | +| Response Body Streaming | ❌ | ❌ | ✅ | + +NOTE: Linux is currently very limited due to targeting a WebKit2GTK Version < 2.36.0. In the future some features will be +supported by the introduction of WebKit2GTK 2.36.0+ support. + +NOTE: When used in combination with a Frontend DevServer there might be limitations, eg. Vite serves the index.html +on every path, that does not contain a file extension. + ### Menu Name: Menu Type: \*menu.Menu -The menu to be used by the application. More details about Menus in the [Menu Reference](../reference/runtime/menu). +The menu to be used by the application. More details about Menus in the [Menu Reference](../reference/runtime/menu.mdx). NOTE: On Mac, if no menu is specified, a default menu will be created. @@ -234,7 +272,7 @@ Type: logger.Logger Default: Logger to Stdout -The logger to be used by the application. More details about logging in the [Log Reference](../reference/runtime/log). +The logger to be used by the application. More details about logging in the [Log Reference](../reference/runtime/log.mdx). ### LogLevel @@ -244,7 +282,7 @@ Type: logger.LogLevel Default: `Info` in dev mode, `Error` in production mode -The default log level. More details about logging in the [Log Reference](../reference/runtime/log). +The default log level. More details about logging in the [Log Reference](../reference/runtime/log.mdx). ### OnStartup @@ -311,7 +349,7 @@ Defines how the window should present itself at startup. | --------------- | --- | --- | --- | | Fullscreen | ✅ | ✅ | ✅ | | Maximised | ✅ | ✅ | ✅ | -| Minimised | ✅ | | ✅ | +| Minimised | ✅ | ❌ | ✅ | ### Bind @@ -337,6 +375,14 @@ Type: \*mac.Options This defines [Mac specific options](#mac-specific-options). +### Linux + +Name: Linux + +Type: \*linux.Options + +This defines [Linux specific options](#linux-specific-options). + ## Windows Specific Options ### WebviewIsTransparent @@ -384,6 +430,87 @@ Type: string This defines the path where the WebView2 stores the user data. If empty `%APPDATA%\[BinaryName.exe]` will be used. +### Theme + +Name: Theme + +Type: `windows.Theme` + +Minimum Windows Version: Windows 10 2004/20H1 + +This defines the theme that the application should use: + +| Value | Description | +| --------------- | ----------- | +| SystemDefault | *Default*. The theme will be based on the system default. If the user changes their theme, the application will update to use the new setting | +| Dark | The application will use a dark theme exclusively | +| Light | The application will use a light theme exclusively | + + +### CustomTheme + +Name: CustomTheme + +Type: `windows.CustomTheme` + +Minimum Windows Version: Windows 10/11 2009/21H2 Build 22000 + +Allows you to specify custom colours for TitleBar, TitleText and Border for both light and dark mode, as well as +when the window is active or inactive. + +#### CustomTheme + +The CustomTheme struct uses `int32` to specify the colour values. These are in the standard(!) Windows format of: +`0x00BBGGAA`. A helper function is provided to do RGB conversions into this format: `windows.RGB(r,g,b uint8)`. + +NOTE: Any value not provided will default to black. + +```go +type ThemeSettings struct { + DarkModeTitleBar int32 + DarkModeTitleBarInactive int32 + DarkModeTitleText int32 + DarkModeTitleTextInactive int32 + DarkModeBorder int32 + DarkModeBorderInactive int32 + LightModeTitleBar int32 + LightModeTitleBarInactive int32 + LightModeTitleText int32 + LightModeTitleTextInactive int32 + LightModeBorder int32 + LightModeBorderInactive int32 +} +``` + +Example: +```go + CustomTheme: &windows.ThemeSettings{ + // Theme to use when window is active + DarkModeTitleBar: windows.RGB(255, 0, 0), // Red + DarkModeTitleText: windows.RGB(0, 255, 0), // Green + DarkModeBorder: windows.RGB(0, 0, 255), // Blue + LightModeTitleBar: windows.RGB(200, 200, 200), + LightModeTitleText: windows.RGB(20, 20, 20), + LightModeBorder: windows.RGB(200, 200, 200), + // Theme to use when window is inactive + DarkModeTitleBarInactive: windows.RGB(128, 0, 0), + DarkModeTitleTextInactive: windows.RGB(0, 128, 0), + DarkModeBorderInactive: windows.RGB(0, 0, 128), + LightModeTitleBarInactive: windows.RGB(100, 100, 100), + LightModeTitleTextInactive: windows.RGB(10, 10, 10), + LightModeBorderInactive: windows.RGB(100, 100, 100), + }, +``` + +### Messages + +Name: Messages + +Type: `*windows.Messages` + +A struct of strings used by the webview2 installer if a valid webview2 runtime is not found. +Customise this for any language you choose to support. + ## Mac Specific Options ### TitleBar @@ -446,7 +573,7 @@ type TitleBar struct { | Name | Description | | ---- | ----------- | -| TitlebarAppearsTransparent | Makes the titlebar transparent. [Apple Docs](https://developer.apple.com/documentation/appkit/nswindow/1419167-titlebarappearstransparent?language=objc) | +| TitlebarAppearsTransparent | Makes the titlebar transparent. This has the effect of hiding the titlebar and the content fill the window. [Apple Docs](https://developer.apple.com/documentation/appkit/nswindow/1419167-titlebarappearstransparent?language=objc) | | HideTitle | Hides the title of the window. [Apple Docs](https://developer.apple.com/documentation/appkit/nswindowtitlevisibility?language=objc) | | HideTitleBar | Removes [NSWindowStyleMaskTitled](https://developer.apple.com/documentation/appkit/nswindowstylemask/nswindowstylemasktitled/) from the style mask | | FullSizeContent | Makes the webview fill the entire window. [Apple Docs](https://developer.apple.com/documentation/appkit/nswindowstylemask/nswindowstylemaskfullsizecontentview)| diff --git a/website/versioned_docs/version-v2.0.0-beta.34/reference/project-config.mdx b/website/versioned_docs/version-v2.0.0-beta.37/reference/project-config.mdx similarity index 80% rename from website/versioned_docs/version-v2.0.0-beta.34/reference/project-config.mdx rename to website/versioned_docs/version-v2.0.0-beta.37/reference/project-config.mdx index 88dab6047..de612d5f7 100644 --- a/website/versioned_docs/version-v2.0.0-beta.34/reference/project-config.mdx +++ b/website/versioned_docs/version-v2.0.0-beta.37/reference/project-config.mdx @@ -14,12 +14,13 @@ The project config resides in the `wails.json` file in the project directory. Th "frontend:install": "[The command to install node dependencies, run in the frontend directory - often `npm install`]", "frontend:build": "[The command to build the assets, run in the frontend directory - often `npm run build`]", "frontend:dev": "[This command is the dev equivalent of frontend:build. If not specified falls back to frontend:build]", - "frontend:dev:watcher": "[This command is run in a separate process on `wails dev`. Useful for 3rd party watchers]", + "frontend:dev:watcher": "[This command is run in a separate process on `wails dev`. Useful for 3rd party watchers or starting 3d party dev servers]", + "frontend:dev:serverUrl": "[URL to a 3rd party dev server to be used to serve assets, EG Vite", "wailsjsdir": "[Relative path to the directory that the auto-generated JS modules will be created]", "version": "[Project config version]", "outputfilename": "[The name of the binary]", - "debounceMS": 100, // The default time the dev server waits to reload when it detects a vhange in assets - "devserverurl": "[URL to the dev server serving local assets. Default: http://localhost:34115]", + "debounceMS": 100, // The default time the dev server waits to reload when it detects a change in assets + "devServer": "[Address to bind the wails dev sever to. Default: localhost:34115]", "appargs": "[Arguments passed to the application in shell style when in dev mode]", "runNonNativeBuildHooks": false, // Defines if build hooks should be run though they are defined for an OS other than the host OS. "postBuildHooks": { @@ -34,11 +35,11 @@ The project config resides in the `wails.json` file in the project directory. Th "copyright": "[The copyright of the product. Default: 'Copyright.........']", "comments": "[A short comment of the app. Default: 'Built using Wails (https://wails.app)']" }, - "nsisType": "['multiple': One installer per achitecture. 'single': Single universal installer for all architectures being built. Default: 'multiple']" + "nsisType": "['multiple': One installer per architecture. 'single': Single universal installer for all architectures being built. Default: 'multiple']" } ``` This file is read by the Wails CLI when running `wails build` or `wails dev`. -The `assetdir`, `reloaddirs`, `wailsjsdir`, `debounceMS` and `devserverurl` flags in `wails build/dev` will update the project config +The `assetdir`, `reloaddirs`, `wailsjsdir`, `debounceMS`, `devserver` and `frontenddevserverurl` flags in `wails build/dev` will update the project config and thus become defaults for subsequent runs. \ No newline at end of file diff --git a/website/versioned_docs/version-v2.0.0-beta.34/reference/runtime/_category_.json b/website/versioned_docs/version-v2.0.0-beta.37/reference/runtime/_category_.json similarity index 100% rename from website/versioned_docs/version-v2.0.0-beta.34/reference/runtime/_category_.json rename to website/versioned_docs/version-v2.0.0-beta.37/reference/runtime/_category_.json diff --git a/website/versioned_docs/version-v2.0.0-beta.34/reference/runtime/browser.mdx b/website/versioned_docs/version-v2.0.0-beta.37/reference/runtime/browser.mdx similarity index 100% rename from website/versioned_docs/version-v2.0.0-beta.34/reference/runtime/browser.mdx rename to website/versioned_docs/version-v2.0.0-beta.37/reference/runtime/browser.mdx diff --git a/website/versioned_docs/version-v2.0.0-beta.34/reference/runtime/dialog.mdx b/website/versioned_docs/version-v2.0.0-beta.37/reference/runtime/dialog.mdx similarity index 100% rename from website/versioned_docs/version-v2.0.0-beta.34/reference/runtime/dialog.mdx rename to website/versioned_docs/version-v2.0.0-beta.37/reference/runtime/dialog.mdx diff --git a/website/versioned_docs/version-v2.0.0-beta.34/reference/runtime/events.mdx b/website/versioned_docs/version-v2.0.0-beta.37/reference/runtime/events.mdx similarity index 100% rename from website/versioned_docs/version-v2.0.0-beta.34/reference/runtime/events.mdx rename to website/versioned_docs/version-v2.0.0-beta.37/reference/runtime/events.mdx diff --git a/website/versioned_docs/version-v2.0.0-beta.34/reference/runtime/intro.mdx b/website/versioned_docs/version-v2.0.0-beta.37/reference/runtime/intro.mdx similarity index 81% rename from website/versioned_docs/version-v2.0.0-beta.34/reference/runtime/intro.mdx rename to website/versioned_docs/version-v2.0.0-beta.37/reference/runtime/intro.mdx index 0e07084b8..b3616f689 100644 --- a/website/versioned_docs/version-v2.0.0-beta.34/reference/runtime/intro.mdx +++ b/website/versioned_docs/version-v2.0.0-beta.37/reference/runtime/intro.mdx @@ -8,15 +8,15 @@ The runtime is a library that provides utility methods for your application. The and the aim is to try and keep them at parity where possible. The Go Runtime is available through importing `github.com/wailsapp/wails/v2/pkg/runtime`. All methods in this package -take a context as the first parameter. This context should be obtained from the [OnStartup](../../reference/options#onstartup) -or [OnDomReady](../../reference/options#ondomready) hooks. +take a context as the first parameter. This context should be obtained from the [OnStartup](../options.mdx#onstartup) +or [OnDomReady](../options.mdx#ondomready) hooks. :::info Note Whilst the context will be provided to the -[OnStartup](../../reference/options#onstartup) method, there's no guarantee the runtime will work in this method as +[OnStartup](../options.mdx#onstartup) method, there's no guarantee the runtime will work in this method as the window is initialising in a different thread. If -you wish to call runtime methods at startup, use [OnDomReady](../../reference/options#ondomready). +you wish to call runtime methods at startup, use [OnDomReady](../options.mdx#ondomready). ::: diff --git a/website/versioned_docs/version-v2.0.0-beta.34/reference/runtime/log.mdx b/website/versioned_docs/version-v2.0.0-beta.37/reference/runtime/log.mdx similarity index 69% rename from website/versioned_docs/version-v2.0.0-beta.34/reference/runtime/log.mdx rename to website/versioned_docs/version-v2.0.0-beta.37/reference/runtime/log.mdx index 50576587c..713838008 100644 --- a/website/versioned_docs/version-v2.0.0-beta.34/reference/runtime/log.mdx +++ b/website/versioned_docs/version-v2.0.0-beta.37/reference/runtime/log.mdx @@ -27,6 +27,12 @@ JS Signature: `LogPrint(message: string)` Logs the given message as a raw message. +### LogPrintf + +Go Signature: `LogPrintf(ctx context.Context, format string, args ...interface{})` + +Logs the given message as a raw message. + ### LogTrace Go Signature: `LogTrace(ctx context.Context, message string)` @@ -35,6 +41,12 @@ JS Signature: `LogTrace(message: string)` Logs the given message at the `Trace` log level. +### LogTracef + +Go Signature: `LogTracef(ctx context.Context, format string, args ...interface{})` + +Logs the given message at the `Trace` log level. + ### LogDebug Go Signature: `LogDebug(ctx context.Context, message string)` @@ -43,6 +55,11 @@ JS Signature: `LogDebug(message: string)` Logs the given message at the `Debug` log level. +### LogDebugf + +Go Signature: `LogDebugf(ctx context.Context, format string, args ...interface{})` + +Logs the given message at the `Debug` log level. ### LogInfo @@ -52,6 +69,11 @@ JS Signature: `LogInfo(message: string)` Logs the given message at the `Info` log level. +### LogInfof + +Go Signature: `LogInfof(ctx context.Context, format string, args ...interface{})` + +Logs the given message at the `Info` log level. ### LogWarning @@ -61,6 +83,11 @@ JS Signature: `LogWarning(message: string)` Logs the given message at the `Warning` log level. +### LogWarningf + +Go Signature: `LogWarningf(ctx context.Context, format string, args ...interface{})` + +Logs the given message at the `Warning` log level. ### LogError @@ -70,14 +97,26 @@ JS Signature: `LogError(message: string)` Logs the given message at the `Error` log level. +### LogErrorf + +Go Signature: `LogErrorf(ctx context.Context, format string, args ...interface{})` + +Logs the given message at the `Error` log level. ### LogFatal + Go Signature: `LogFatal(ctx context.Context, message string)` JS Signature: `LogFatal(message: string)` Logs the given message at the `Fatal` log level. +### LogFatalf + +Go Signature: `LogFatalf(ctx context.Context, format string, args ...interface{})` + +Logs the given message at the `Fatal` log level. + ### LogSetLogLevel Go Signature: `LogSetLogLevel(ctx context.Context, level logger.LogLevel)` @@ -96,7 +135,7 @@ Sets the log level. In Javascript, the number relates to the following log level ## Using a Custom Logger -A custom logger may be used by providing it using the [Logger](../../reference/options#logger) +A custom logger may be used by providing it using the [Logger](../options.mdx#logger) application option. The only requirement is that the logger implements the `logger.Logger` interface defined in `github.com/wailsapp/wails/v2/pkg/logger`: diff --git a/website/versioned_docs/version-v2.0.0-beta.34/reference/runtime/menu.mdx b/website/versioned_docs/version-v2.0.0-beta.37/reference/runtime/menu.mdx similarity index 87% rename from website/versioned_docs/version-v2.0.0-beta.34/reference/runtime/menu.mdx rename to website/versioned_docs/version-v2.0.0-beta.37/reference/runtime/menu.mdx index 6180577ec..7d2d01783 100644 --- a/website/versioned_docs/version-v2.0.0-beta.34/reference/runtime/menu.mdx +++ b/website/versioned_docs/version-v2.0.0-beta.37/reference/runtime/menu.mdx @@ -15,7 +15,7 @@ These methods are related to the application menu. ### MenuSetApplicationMenu Go Signature: `MenuSetApplicationMenu(ctx context.Context, menu *menu.Menu)` -Sets the application menu to the given [menu](../../reference/menus) . +Sets the application menu to the given [menu](../menus.mdx) . ### MenuUpdateApplicationMenu Go Signature: `MenuUpdateApplicationMenu(ctx context.Context)` diff --git a/website/versioned_docs/version-v2.0.0-beta.34/reference/runtime/window.mdx b/website/versioned_docs/version-v2.0.0-beta.37/reference/runtime/window.mdx similarity index 84% rename from website/versioned_docs/version-v2.0.0-beta.34/reference/runtime/window.mdx rename to website/versioned_docs/version-v2.0.0-beta.37/reference/runtime/window.mdx index cef929ad6..915ca9ac4 100644 --- a/website/versioned_docs/version-v2.0.0-beta.34/reference/runtime/window.mdx +++ b/website/versioned_docs/version-v2.0.0-beta.37/reference/runtime/window.mdx @@ -41,7 +41,43 @@ Go Signature: `WindowReload(ctx context.Context)` JS Signature: `WindowReload()` -Performs a "reload" (Reloads index.html) +Performs a "reload" (Reloads current page). + +### WindowReloadApp +Go Signature: `WindowReloadApp(ctx context.Context)` + +JS Signature: `WindowReloadApp()` + +Reloads the application frontend. + +### WindowSetSy + +### WindowSetSystemDefaultTheme +Go Signature: `WindowSetSystemDefaultTheme(ctx context.Context)` + +JS Signature: `WindowSetSystemDefaultTheme()` + +Windows only. + +Sets window theme to system default (dark/light). + +### WindowSetLightTheme +Go Signature: `WindowSetLightTheme(ctx context.Context)` + +JS Signature: `WindowSetLightTheme()` + +Windows only. + +Sets window theme to light. + +### WindowSetDarkTheme +Go Signature: `WindowSetDarkTheme(ctx context.Context)` + +JS Signature: `WindowSetDarkTheme()` + +Windows only. + +Sets window theme to dark. ### WindowShow Go Signature: `WindowShow(ctx context.Context)` diff --git a/website/versioned_sidebars/version-v2.0.0-beta.34-sidebars.json b/website/versioned_sidebars/version-v2.0.0-beta.37-sidebars.json similarity index 100% rename from website/versioned_sidebars/version-v2.0.0-beta.34-sidebars.json rename to website/versioned_sidebars/version-v2.0.0-beta.37-sidebars.json diff --git a/website/versions.json b/website/versions.json index b6fd4043d..59a121372 100644 --- a/website/versions.json +++ b/website/versions.json @@ -1,4 +1,4 @@ [ - "v2.0.0-beta.35", - "v2.0.0-beta.34" + "v2.0.0-beta.37", + "v2.0.0-beta.35" ] From b49dce867684cca287d17da22616f45523a8c97c Mon Sep 17 00:00:00 2001 From: Lea Anthony Date: Thu, 26 May 2022 17:52:25 -1000 Subject: [PATCH 26/87] Update Changelog --- website/src/pages/changelog.md | 39 ++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) diff --git a/website/src/pages/changelog.md b/website/src/pages/changelog.md index 086a7427e..26492ab84 100644 --- a/website/src/pages/changelog.md +++ b/website/src/pages/changelog.md @@ -7,6 +7,45 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] +## [v2.0.0-beta.37] - 2022-05-26 + +### Added +* Add `nogen` flag in wails dev command by @mondy in https://github.com/wailsapp/wails/pull/1413 +* Initial support for new native translucency in Windows Preview by @leaanthony in https://github.com/wailsapp/wails/pull/1400 + +### Fixed +* Bugfix/incorrect bindings by @leaanthony in https://github.com/wailsapp/wails/pull/1383 +* Fix runtime.js events by @polikow in https://github.com/wailsapp/wails/pull/1369 +* Fix docs formatting by @antimatter96 in https://github.com/wailsapp/wails/pull/1372 +* Events | fixes #1388 by @lambdajack in https://github.com/wailsapp/wails/pull/1390 +* bugfix: correct typo by @tmclane in https://github.com/wailsapp/wails/pull/1391 +* Fix typo in docs by @LGiki in https://github.com/wailsapp/wails/pull/1393 +* Fix typo bindings.js to ipc.js by @rayshoo in https://github.com/wailsapp/wails/pull/1406 +* Make sure to execute the menu callbacks on a new goroutine by @stffabi in https://github.com/wailsapp/wails/pull/1403 +* Update runtime.d.ts & templates by @Yz4230 in https://github.com/wailsapp/wails/pull/1421 +* Add missing className to input in React and Preact templates by @edwardbrowncross in https://github.com/wailsapp/wails/pull/1419 + +### Changed +* Improve multi-platform builds by @stffabi in https://github.com/wailsapp/wails/pull/1373 +* During wails dev only use reload logic if no AssetsHandler are in use by @stffabi in https://github.com/wailsapp/wails/pull/1385 +* Update events.mdx by @Junkher in https://github.com/wailsapp/wails/pull/1387 +* Add Next.js template by @LGiki in https://github.com/wailsapp/wails/pull/1394 +* Add docs on wails generate module by @TechplexEngineer in https://github.com/wailsapp/wails/pull/1414 +* Add macos custom menu EditMenu tips by @daodao97 in https://github.com/wailsapp/wails/pull/1423 + +### New Contributors +* @polikow made their first contribution in https://github.com/wailsapp/wails/pull/1369 +* @antimatter96 made their first contribution in https://github.com/wailsapp/wails/pull/1372 +* @Junkher made their first contribution in https://github.com/wailsapp/wails/pull/1387 +* @lambdajack made their first contribution in https://github.com/wailsapp/wails/pull/1390 +* @LGiki made their first contribution in https://github.com/wailsapp/wails/pull/1393 +* @rayshoo made their first contribution in https://github.com/wailsapp/wails/pull/1406 +* @TechplexEngineer made their first contribution in https://github.com/wailsapp/wails/pull/1414 +* @mondy made their first contribution in https://github.com/wailsapp/wails/pull/1413 +* @Yz4230 made their first contribution in https://github.com/wailsapp/wails/pull/1421 +* @daodao97 made their first contribution in https://github.com/wailsapp/wails/pull/1423 +* @edwardbrowncross made their first contribution in https://github.com/wailsapp/wails/pull/1419 + ## [v2.0.0-beta.36] - 2022-04-27 From f6425a64a60e95fb074ea30fcbca30ab0f4a6f48 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Z=C3=A1mb=C3=B3=2C=20Levente?= Date: Sat, 28 May 2022 07:07:39 +0200 Subject: [PATCH 27/87] feature - add race detector to build & dev (#1426) --- v2/cmd/wails/internal/commands/build/build.go | 5 +++++ v2/cmd/wails/internal/commands/dev/dev.go | 3 +++ v2/pkg/commands/build/base.go | 4 ++++ v2/pkg/commands/build/build.go | 1 + website/docs/reference/cli.mdx | 2 ++ 5 files changed, 15 insertions(+) diff --git a/v2/cmd/wails/internal/commands/build/build.go b/v2/cmd/wails/internal/commands/build/build.go index d64716ef5..2b3b0295a 100644 --- a/v2/cmd/wails/internal/commands/build/build.go +++ b/v2/cmd/wails/internal/commands/build/build.go @@ -99,6 +99,9 @@ func AddBuildSubcommand(app *clir.Cli, w io.Writer) { trimpath := false command.BoolFlag("trimpath", "Remove all file system paths from the resulting executable", &trimpath) + raceDetector := false + command.BoolFlag("race", "Build with Go's race detector", &raceDetector) + command.Action(func() error { quiet := verbosity == 0 @@ -180,6 +183,7 @@ func AddBuildSubcommand(app *clir.Cli, w io.Writer) { UserTags: userTags, WebView2Strategy: wv2rtstrategy, TrimPath: trimpath, + RaceDetector: raceDetector, } // Start a new tabwriter @@ -197,6 +201,7 @@ func AddBuildSubcommand(app *clir.Cli, w io.Writer) { _, _ = fmt.Fprintf(w, "Clean Build Dir: \t%t\n", buildOptions.CleanBuildDirectory) _, _ = fmt.Fprintf(w, "LDFlags: \t\"%s\"\n", buildOptions.LDFlags) _, _ = fmt.Fprintf(w, "Tags: \t[%s]\n", strings.Join(buildOptions.UserTags, ",")) + _, _ = fmt.Fprintf(w, "Race Detector: \t%t\n", buildOptions.RaceDetector) if len(buildOptions.OutputFile) > 0 && targets.Length() == 1 { _, _ = fmt.Fprintf(w, "Output File: \t%s\n", buildOptions.OutputFile) } diff --git a/v2/cmd/wails/internal/commands/dev/dev.go b/v2/cmd/wails/internal/commands/dev/dev.go index af5136e1b..4204f20a5 100644 --- a/v2/cmd/wails/internal/commands/dev/dev.go +++ b/v2/cmd/wails/internal/commands/dev/dev.go @@ -76,6 +76,7 @@ type devFlags struct { devServer string appargs string saveConfig bool + raceDetector bool frontendDevServerURL string } @@ -104,6 +105,7 @@ func AddSubcommand(app *clir.Cli, w io.Writer) error { command.StringFlag("frontenddevserverurl", "The url of the external frontend dev server to use", &flags.frontendDevServerURL) command.StringFlag("appargs", "arguments to pass to the underlying app (quoted and space searated)", &flags.appargs) command.BoolFlag("save", "Save given flags as defaults", &flags.saveConfig) + command.BoolFlag("race", "Build with Go's race detector", &flags.raceDetector) command.Action(func() error { // Create logger @@ -303,6 +305,7 @@ func generateBuildOptions(flags devFlags) *build.Options { IgnoreFrontend: false, Verbosity: flags.verbosity, WailsJSDir: flags.wailsjsdir, + RaceDetector: flags.raceDetector, } return result diff --git a/v2/pkg/commands/build/base.go b/v2/pkg/commands/build/base.go index 9bb19be57..4825c8f50 100644 --- a/v2/pkg/commands/build/base.go +++ b/v2/pkg/commands/build/base.go @@ -182,6 +182,10 @@ func (b *BaseBuilder) CompileProject(options *Options) error { commands.Add("-trimpath") } + if options.RaceDetector { + commands.Add("-race") + } + var tags slicer.StringSlicer tags.Add(options.OutputType) tags.AddSlice(options.UserTags) diff --git a/v2/pkg/commands/build/build.go b/v2/pkg/commands/build/build.go index 091de85e2..068433884 100644 --- a/v2/pkg/commands/build/build.go +++ b/v2/pkg/commands/build/build.go @@ -56,6 +56,7 @@ type Options struct { ForceBuild bool // Force BundleName string // Bundlename for Mac TrimPath bool // Use Go's trimpath compiler flag + RaceDetector bool // Build with Go's race detector } // Build the project! diff --git a/website/docs/reference/cli.mdx b/website/docs/reference/cli.mdx index 959741155..ab8e3792d 100644 --- a/website/docs/reference/cli.mdx +++ b/website/docs/reference/cli.mdx @@ -70,6 +70,7 @@ A list of community maintained templates can be found [here](../community/templa | -u | Updates your project's `go.mod` to use the same version of Wails as the CLI | | | -debug | Retains debug information in the application | false | | -trimpath | Remove all file system paths from the resulting executable. | false | +| -race | Build with Go's race detector | false | For a detailed description of the `webview2` flag, please refer to the [Windows](../guides/windows.mdx) Guide. @@ -177,6 +178,7 @@ Your system is ready for Wails development! | -appargs "args" | Arguments passed to the application in shell style | | | -platform "platform" | Platform/Arch to target | `runtime.GOOS` | | -save | Saves the given `assetdir`, `reloaddirs`, `wailsjsdir`, `debounce`, `devserver` and `frontenddevserverurl` flags in `wails.json` to become the defaults for subsequent invocations. | | +| -race | Build with Go's race detector | false | Example: From 794a8ce19f107106c6cd9d1f64569de0def16dd0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Z=C3=A1mb=C3=B3=2C=20Levente?= Date: Sat, 28 May 2022 07:09:50 +0200 Subject: [PATCH 28/87] feature - support linux/arm (#1427) --- v2/cmd/wails/internal/commands/build/build.go | 1 + v2/internal/frontend/desktop/linux/responsewriter.go | 2 +- v2/internal/frontend/desktop/linux/window.go | 4 ++-- 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/v2/cmd/wails/internal/commands/build/build.go b/v2/cmd/wails/internal/commands/build/build.go index 2b3b0295a..77e63728a 100644 --- a/v2/cmd/wails/internal/commands/build/build.go +++ b/v2/cmd/wails/internal/commands/build/build.go @@ -234,6 +234,7 @@ func AddBuildSubcommand(app *clir.Cli, w io.Writer) { "linux", "linux/amd64", "linux/arm64", + "linux/arm", "windows", "windows/amd64", "windows/arm64", diff --git a/v2/internal/frontend/desktop/linux/responsewriter.go b/v2/internal/frontend/desktop/linux/responsewriter.go index 12ebadae7..3b08a3845 100644 --- a/v2/internal/frontend/desktop/linux/responsewriter.go +++ b/v2/internal/frontend/desktop/linux/responsewriter.go @@ -84,7 +84,7 @@ func (rw *webKitResponseWriter) WriteHeader(code int) { } stream := C.g_unix_input_stream_new(C.int(rFD), gtkBool(true)) - C.webkit_uri_scheme_request_finish(rw.req, stream, C.long(contentLength), cMimeType) + C.webkit_uri_scheme_request_finish(rw.req, stream, C.gint64(contentLength), cMimeType) C.g_object_unref(C.gpointer(stream)) } diff --git a/v2/internal/frontend/desktop/linux/window.go b/v2/internal/frontend/desktop/linux/window.go index 888faddaf..693c0887c 100644 --- a/v2/internal/frontend/desktop/linux/window.go +++ b/v2/internal/frontend/desktop/linux/window.go @@ -864,8 +864,8 @@ func (w *Window) OpenFileDialog(dialogOptions frontend.OpenDialogOptions, multip // Create filter array mem := NewCalloc() arraySize := len(dialogOptions.Filters) + 1 - data.filters = C.allocFileFilterArray((C.ulong)(arraySize)) - filters := (*[1 << 30]*C.struct__GtkFileFilter)(unsafe.Pointer(data.filters)) + data.filters = C.allocFileFilterArray((C.size_t)(arraySize)) + filters := unsafe.Slice((**C.struct__GtkFileFilter)(unsafe.Pointer(data.filters)), arraySize) for index, filter := range dialogOptions.Filters { thisFilter := C.gtk_file_filter_new() C.g_object_ref(C.gpointer(thisFilter)) From 2a0673f99f81dbc91750fba1ee669bd037c59363 Mon Sep 17 00:00:00 2001 From: stffabi Date: Tue, 31 May 2022 12:28:37 +0200 Subject: [PATCH 29/87] [v2, linux] Improve switching to main thread for callbacks (#1392) Make sure no pointers to the stack are passed to g_idle_add, because at the time the callback gets executed on the main thread, the pointer might be invalid. Go might have reused the stack or grown the stack and the pointer is invalid. The concept used on Windows has been ported to Linux. --- v2/internal/frontend/desktop/linux/invoke.go | 78 ++++++++++++++++++++ v2/internal/frontend/desktop/linux/window.go | 23 ++---- 2 files changed, 86 insertions(+), 15 deletions(-) create mode 100644 v2/internal/frontend/desktop/linux/invoke.go diff --git a/v2/internal/frontend/desktop/linux/invoke.go b/v2/internal/frontend/desktop/linux/invoke.go new file mode 100644 index 000000000..16d5e73d2 --- /dev/null +++ b/v2/internal/frontend/desktop/linux/invoke.go @@ -0,0 +1,78 @@ +//go:build linux +// +build linux + +package linux + +/* +#cgo linux pkg-config: gtk+-3.0 + +#include +#include "gtk/gtk.h" + +extern gboolean invokeCallbacks(void *); + +static inline void triggerInvokesOnMainThread() { + g_idle_add((GSourceFunc)invokeCallbacks, NULL); +} +*/ +import "C" +import ( + "runtime" + "sync" + "unsafe" + + "golang.org/x/sys/unix" +) + +var ( + m sync.Mutex + mainTid int + dispatchq []func() +) + +func invokeOnMainThread(f func()) { + if tryInvokeOnCurrentGoRoutine(f) { + return + } + + m.Lock() + dispatchq = append(dispatchq, f) + m.Unlock() + + C.triggerInvokesOnMainThread() +} + +func tryInvokeOnCurrentGoRoutine(f func()) bool { + m.Lock() + mainThreadID := mainTid + m.Unlock() + + runtime.LockOSThread() + defer runtime.UnlockOSThread() + + if mainThreadID != unix.Gettid() { + return false + } + f() + return true +} + +//export invokeCallbacks +func invokeCallbacks(_ unsafe.Pointer) C.gboolean { + runtime.LockOSThread() + defer runtime.UnlockOSThread() + + m.Lock() + if mainTid == 0 { + mainTid = unix.Gettid() + } + + q := append([]func(){}, dispatchq...) + dispatchq = []func(){} + m.Unlock() + + for _, v := range q { + v() + } + return C.G_SOURCE_REMOVE +} diff --git a/v2/internal/frontend/desktop/linux/window.go b/v2/internal/frontend/desktop/linux/window.go index 693c0887c..47dc8233f 100644 --- a/v2/internal/frontend/desktop/linux/window.go +++ b/v2/internal/frontend/desktop/linux/window.go @@ -249,11 +249,10 @@ typedef struct JSCallback { char* script; } JSCallback; -gboolean executeJS(gpointer data) { +void executeJS(void *data) { struct JSCallback *js = data; webkit_web_view_run_javascript(js->webview, js->script, NULL, NULL, NULL); free(js->script); - return G_SOURCE_REMOVE; } void extern processMessageDialogResult(char*); @@ -265,8 +264,7 @@ typedef struct MessageDialogOptions { int messageType; } MessageDialogOptions; -gboolean messageDialog(gpointer data) { - +void messageDialog(void *data) { GtkDialogFlags flags; GtkMessageType messageType; MessageDialogOptions *options = (MessageDialogOptions*) data; @@ -307,8 +305,6 @@ gboolean messageDialog(gpointer data) { gtk_widget_destroy(dialog); free(options->title); free(options->message); - - return G_SOURCE_REMOVE; } void extern processOpenFileResult(void*); @@ -333,7 +329,7 @@ void freeFileFilterArray(GtkFileFilter** filters) { free(filters); } -gboolean opendialog(gpointer data) { +void opendialog(void *data) { struct OpenFileDialogOptions *options = data; char *label = "_Open"; if (options->action == GTK_FILE_CHOOSER_ACTION_SAVE) { @@ -421,7 +417,6 @@ gboolean opendialog(gpointer data) { } gtk_widget_destroy(dlgWidget); free(options->title); - return G_SOURCE_REMOVE; } GtkFileFilter* newFileFilter() { @@ -438,12 +433,10 @@ typedef struct RGBAOptions { void *webview; } RGBAOptions; -gboolean setRGBA(gpointer* data) { +void setRGBA(void* data) { RGBAOptions* options = (RGBAOptions*)data; GdkRGBA colour = {options->r / 255.0, options->g / 255.0, options->b / 255.0, options->a / 255.0}; webkit_web_view_set_background_color(WEBKIT_WEB_VIEW(options->webview), &colour); - - return G_SOURCE_REMOVE; } typedef struct SetTitleArgs { @@ -781,7 +774,7 @@ func (w *Window) SetRGBA(r uint8, g uint8, b uint8, a uint8) { a: C.uchar(a), webview: w.webview, } - C.ExecuteOnMainThread(C.setRGBA, C.gpointer(&data)) + invokeOnMainThread(func() { C.setRGBA(unsafe.Pointer(&data)) }) } @@ -840,7 +833,7 @@ func (w *Window) ExecJS(js string) { webview: w.webview, script: C.CString(js), } - C.ExecuteOnMainThread(C.executeJS, C.gpointer(&jscallback)) + invokeOnMainThread(func() { C.executeJS(unsafe.Pointer(&jscallback)) }) } func (w *Window) StartDrag() { @@ -902,7 +895,7 @@ func (w *Window) OpenFileDialog(dialogOptions frontend.OpenDialogOptions, multip data.defaultDirectory = C.CString(dialogOptions.DefaultDirectory) } - C.ExecuteOnMainThread(C.opendialog, C.gpointer(&data)) + invokeOnMainThread(func() { C.opendialog(unsafe.Pointer(&data)) }) } func (w *Window) MessageDialog(dialogOptions frontend.MessageDialogOptions) { @@ -922,7 +915,7 @@ func (w *Window) MessageDialog(dialogOptions frontend.MessageDialogOptions) { case frontend.WarningDialog: data.messageType = C.int(3) } - C.ExecuteOnMainThread(C.messageDialog, C.gpointer(&data)) + invokeOnMainThread(func() { C.messageDialog(unsafe.Pointer(&data)) }) } func (w *Window) ToggleMaximise() { From f292e221f141e554db48ed70c0ebd0a9304e07bb Mon Sep 17 00:00:00 2001 From: Jae-Sung Lee <39658806+jaesung9507@users.noreply.github.com> Date: Tue, 31 May 2022 19:29:20 +0900 Subject: [PATCH 30/87] Create gitignore when using g option (#1430) * Create gitignore when using g option --- .../wails/internal/commands/initialise/initialise.go | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/v2/cmd/wails/internal/commands/initialise/initialise.go b/v2/cmd/wails/internal/commands/initialise/initialise.go index 54205e1d6..13a6483bc 100644 --- a/v2/cmd/wails/internal/commands/initialise/initialise.go +++ b/v2/cmd/wails/internal/commands/initialise/initialise.go @@ -216,6 +216,16 @@ func initGit(options *templates.Options) error { return errors.Wrap(err, "Unable to initialise git repository:") } + ignore := []string{ + "build/bin", + "frontend/dist", + "frontend/node_modules", + } + err = os.WriteFile(filepath.Join(options.TargetDir, ".gitignore"), []byte(strings.Join(ignore, "\n")), 0644) + if err != nil { + return errors.Wrap(err, "Unable to create gitignore") + } + return nil } From 614f50d5d3f6d06b2293ab5de5df7a195a69a75b Mon Sep 17 00:00:00 2001 From: stffabi Date: Tue, 31 May 2022 22:00:02 +0200 Subject: [PATCH 31/87] [v2, windows] Load WebView2 loader from embedded only (#1432) --- .../go-webview2/webviewloader/module.go | 107 +++++++----------- 1 file changed, 41 insertions(+), 66 deletions(-) diff --git a/v2/internal/frontend/desktop/windows/go-webview2/webviewloader/module.go b/v2/internal/frontend/desktop/windows/go-webview2/webviewloader/module.go index 7566c2894..dfa795423 100644 --- a/v2/internal/frontend/desktop/windows/go-webview2/webviewloader/module.go +++ b/v2/internal/frontend/desktop/windows/go-webview2/webviewloader/module.go @@ -10,11 +10,6 @@ import ( ) var ( - nativeModule = windows.NewLazyDLL("WebView2Loader") - nativeCreate = nativeModule.NewProc("CreateCoreWebView2EnvironmentWithOptions") - nativeCompareBrowserVersions = nativeModule.NewProc("CompareBrowserVersions") - nativeGetAvailableCoreWebView2BrowserVersionString = nativeModule.NewProc("GetAvailableCoreWebView2BrowserVersionString") - memOnce sync.Once memModule winloader.Module memCreate winloader.Proc @@ -23,6 +18,11 @@ var ( memErr error ) +const ( + // https://referencesource.microsoft.com/#system.web/Util/hresults.cs,20 + E_FILENOTFOUND = 0x80070002 +) + // CompareBrowserVersions will compare the 2 given versions and return: // -1 = v1 < v2 // 0 = v1 == v2 @@ -38,26 +38,17 @@ func CompareBrowserVersions(v1 string, v2 string) (int, error) { return 0, err } - nativeErr := nativeModule.Load() - if nativeErr == nil { - nativeErr = nativeCompareBrowserVersions.Find() + err = loadFromMemory() + if err != nil { + return 0, err } + var result int - if nativeErr != nil { - err := loadFromMemory(nativeErr) - if err != nil { - return 0, fmt.Errorf("Unable to load WebView2Loader.dll from disk: %v -- or from memory: %w", nativeErr, memErr) - } - _, _, err = memCompareBrowserVersions.Call( - uint64(uintptr(unsafe.Pointer(_v1))), - uint64(uintptr(unsafe.Pointer(_v2))), - uint64(uintptr(unsafe.Pointer(&result)))) - } else { - _, _, err = nativeCompareBrowserVersions.Call( - uintptr(unsafe.Pointer(_v1)), - uintptr(unsafe.Pointer(_v2)), - uintptr(unsafe.Pointer(&result))) - } + _, _, err = memCompareBrowserVersions.Call( + uint64(uintptr(unsafe.Pointer(_v1))), + uint64(uintptr(unsafe.Pointer(_v2))), + uint64(uintptr(unsafe.Pointer(&result)))) + if err != windows.ERROR_SUCCESS { return result, err } @@ -67,28 +58,25 @@ func CompareBrowserVersions(v1 string, v2 string) (int, error) { // GetInstalledVersion returns the installed version of the webview2 runtime. // If there is no version installed, a blank string is returned. func GetInstalledVersion() (string, error) { - nativeErr := nativeModule.Load() - if nativeErr == nil { - nativeErr = nativeGetAvailableCoreWebView2BrowserVersionString.Find() - } - var err error - var result *uint16 - if nativeErr != nil { - err := loadFromMemory(nativeErr) - if err != nil { - return "", fmt.Errorf("Unable to load WebView2Loader.dll from disk: %v -- or from memory: %w", nativeErr, memErr) - } - _, _, err = memGetAvailableCoreWebView2BrowserVersionString.Call( - uint64(uintptr(unsafe.Pointer(nil))), - uint64(uintptr(unsafe.Pointer(&result)))) - } else { - _, _, err = nativeCompareBrowserVersions.Call( - uintptr(unsafe.Pointer(nil)), - uintptr(unsafe.Pointer(&result))) - } + err := loadFromMemory() if err != nil { return "", err } + + var result *uint16 + res, _, err := memGetAvailableCoreWebView2BrowserVersionString.Call( + uint64(uintptr(unsafe.Pointer(nil))), + uint64(uintptr(unsafe.Pointer(&result)))) + + if res != 0 { + if res == E_FILENOTFOUND { + // Webview2 is not installed + return "", nil + } + + return "", fmt.Errorf("Unable to call GetAvailableCoreWebView2BrowserVersionString (%x): %w", res, err) + } + version := windows.UTF16PtrToString(result) windows.CoTaskMemFree(unsafe.Pointer(result)) return version, nil @@ -97,39 +85,26 @@ func GetInstalledVersion() (string, error) { // CreateCoreWebView2EnvironmentWithOptions tries to load WebviewLoader2 and // call the CreateCoreWebView2EnvironmentWithOptions routine. func CreateCoreWebView2EnvironmentWithOptions(browserExecutableFolder, userDataFolder *uint16, environmentOptions uintptr, environmentCompletedHandle uintptr) (uintptr, error) { - nativeErr := nativeModule.Load() - if nativeErr == nil { - nativeErr = nativeCreate.Find() + err := loadFromMemory() + if err != nil { + return 0, err } - if nativeErr != nil { - err := loadFromMemory(nativeErr) - if err != nil { - return 0, err - } - res, _, _ := memCreate.Call( - uint64(uintptr(unsafe.Pointer(browserExecutableFolder))), - uint64(uintptr(unsafe.Pointer(userDataFolder))), - uint64(environmentOptions), - uint64(environmentCompletedHandle), - ) - return uintptr(res), nil - } - res, _, _ := nativeCreate.Call( - uintptr(unsafe.Pointer(browserExecutableFolder)), - uintptr(unsafe.Pointer(userDataFolder)), - environmentOptions, - environmentCompletedHandle, + res, _, _ := memCreate.Call( + uint64(uintptr(unsafe.Pointer(browserExecutableFolder))), + uint64(uintptr(unsafe.Pointer(userDataFolder))), + uint64(environmentOptions), + uint64(environmentCompletedHandle), ) - return res, nil + return uintptr(res), nil } -func loadFromMemory(nativeErr error) error { +func loadFromMemory() error { var err error // DLL is not available natively. Try loading embedded copy. memOnce.Do(func() { memModule, memErr = winloader.LoadFromMemory(WebView2Loader) if memErr != nil { - err = fmt.Errorf("Unable to load WebView2Loader.dll from disk: %v -- or from memory: %w", nativeErr, memErr) + err = fmt.Errorf("Unable to load WebView2Loader.dll from memory: %w", memErr) return } memCreate = memModule.Proc("CreateCoreWebView2EnvironmentWithOptions") From 6a07cbd5052b2d2fc3ef9963796d7636111080e4 Mon Sep 17 00:00:00 2001 From: Lea Anthony Date: Wed, 1 Jun 2022 21:00:52 +1000 Subject: [PATCH 32/87] Move go-common-file-dialog into project. Fix Title bug. --- .../commands/generate/template/base/go.sum | 2 - .../generate/template/base/go.tmpl.mod | 1 - .../templates/generate/plain/go.mod.tmpl | 1 - .../templates/generate/plain/go.sum | 2 - .../templates/templates/plain/go.mod.tmpl | 1 - .../templates/templates/plain/go.sum | 2 - v2/go.mod | 1 - v2/go.sum | 2 - .../ffenestri/ffenestri_client_windows.go | 2 +- .../frontend/desktop/windows/dialog.go | 2 +- v2/internal/go-common-file-dialog/LICENSE | 21 ++ v2/internal/go-common-file-dialog/README.md | 31 +++ .../cfd/CommonFileDialog.go | 72 ++++++ .../cfd/CommonFileDialog_nonWindows.go | 28 +++ .../cfd/CommonFileDialog_windows.go | 79 ++++++ .../go-common-file-dialog/cfd/DialogConfig.go | 120 +++++++++ .../go-common-file-dialog/cfd/errors.go | 7 + .../cfd/iFileOpenDialog.go | 197 +++++++++++++++ .../cfd/iFileSaveDialog.go | 93 +++++++ .../go-common-file-dialog/cfd/iShellItem.go | 53 ++++ .../cfd/iShellItemArray.go | 67 ++++++ .../go-common-file-dialog/cfd/vtblCommon.go | 48 ++++ .../cfd/vtblCommonFunc.go | 227 ++++++++++++++++++ .../go-common-file-dialog/cfdutil/CFDUtil.go | 45 ++++ .../go-common-file-dialog/util/util.go | 10 + .../go-common-file-dialog/util/util_test.go | 14 ++ v2/internal/gomod/gomod_test.go | 23 +- 27 files changed, 1125 insertions(+), 26 deletions(-) create mode 100644 v2/internal/go-common-file-dialog/LICENSE create mode 100644 v2/internal/go-common-file-dialog/README.md create mode 100644 v2/internal/go-common-file-dialog/cfd/CommonFileDialog.go create mode 100644 v2/internal/go-common-file-dialog/cfd/CommonFileDialog_nonWindows.go create mode 100644 v2/internal/go-common-file-dialog/cfd/CommonFileDialog_windows.go create mode 100644 v2/internal/go-common-file-dialog/cfd/DialogConfig.go create mode 100644 v2/internal/go-common-file-dialog/cfd/errors.go create mode 100644 v2/internal/go-common-file-dialog/cfd/iFileOpenDialog.go create mode 100644 v2/internal/go-common-file-dialog/cfd/iFileSaveDialog.go create mode 100644 v2/internal/go-common-file-dialog/cfd/iShellItem.go create mode 100644 v2/internal/go-common-file-dialog/cfd/iShellItemArray.go create mode 100644 v2/internal/go-common-file-dialog/cfd/vtblCommon.go create mode 100644 v2/internal/go-common-file-dialog/cfd/vtblCommonFunc.go create mode 100644 v2/internal/go-common-file-dialog/cfdutil/CFDUtil.go create mode 100644 v2/internal/go-common-file-dialog/util/util.go create mode 100644 v2/internal/go-common-file-dialog/util/util_test.go diff --git a/v2/cmd/wails/internal/commands/generate/template/base/go.sum b/v2/cmd/wails/internal/commands/generate/template/base/go.sum index 63a3181cc..92f4d6d57 100644 --- a/v2/cmd/wails/internal/commands/generate/template/base/go.sum +++ b/v2/cmd/wails/internal/commands/generate/template/base/go.sum @@ -53,8 +53,6 @@ github.com/leaanthony/debme v1.2.1 h1:9Tgwf+kjcrbMQ4WnPcEIUcQuIZYqdWftzZkBr+i/oO github.com/leaanthony/debme v1.2.1/go.mod h1:3V+sCm5tYAgQymvSOfYQ5Xx2JCr+OXiD9Jkw3otUjiA= github.com/leaanthony/go-ansi-parser v1.0.1 h1:97v6c5kYppVsbScf4r/VZdXyQ21KQIfeQOk2DgKxGG4= github.com/leaanthony/go-ansi-parser v1.0.1/go.mod h1:7arTzgVI47srICYhvgUV4CGd063sGEeoSlych5yeSPM= -github.com/leaanthony/go-common-file-dialog v1.0.3 h1:O0uGjKnWtdEADGrkg+TyAAbZylykMwwx/MNEXn9fp+Y= -github.com/leaanthony/go-common-file-dialog v1.0.3/go.mod h1:TGhEc9eSJgRsupZ+iH1ZgAOnEo9zp05cRH2j08RPrF0= github.com/leaanthony/gosod v1.0.3 h1:Fnt+/B6NjQOVuCWOKYRREZnjGyvg+mEhd1nkkA04aTQ= github.com/leaanthony/gosod v1.0.3/go.mod h1:BJ2J+oHsQIyIQpnLPjnqFGTMnOZXDbvWtRCSG7jGxs4= github.com/leaanthony/idgen v1.0.0/go.mod h1:4nBZnt8ml/f/ic/EVQuLxuj817RccT2fyrUaZFxrcVA= diff --git a/v2/cmd/wails/internal/commands/generate/template/base/go.tmpl.mod b/v2/cmd/wails/internal/commands/generate/template/base/go.tmpl.mod index 1555a4829..fcef41340 100644 --- a/v2/cmd/wails/internal/commands/generate/template/base/go.tmpl.mod +++ b/v2/cmd/wails/internal/commands/generate/template/base/go.tmpl.mod @@ -12,7 +12,6 @@ module changeme github.com/labstack/echo/v4 v4.7.2 // indirect github.com/labstack/gommon v0.3.1 // indirect github.com/leaanthony/go-ansi-parser v1.0.1 // indirect - github.com/leaanthony/go-common-file-dialog v1.0.3 // indirect github.com/leaanthony/gosod v1.0.3 // indirect github.com/leaanthony/slicer v1.5.0 // indirect github.com/leaanthony/typescriptify-golang-structs v0.1.7 // indirect diff --git a/v2/cmd/wails/internal/commands/initialise/templates/generate/plain/go.mod.tmpl b/v2/cmd/wails/internal/commands/initialise/templates/generate/plain/go.mod.tmpl index d3e1921a2..27a2d22f4 100644 --- a/v2/cmd/wails/internal/commands/initialise/templates/generate/plain/go.mod.tmpl +++ b/v2/cmd/wails/internal/commands/initialise/templates/generate/plain/go.mod.tmpl @@ -18,7 +18,6 @@ github.com/jchv/go-winloader v0.0.0-20200815041850-dec1ee9a7fd5 // indirect github.com/klauspost/compress v1.12.2 // indirect github.com/leaanthony/debme v1.2.1 // indirect github.com/leaanthony/go-ansi-parser v1.0.1 // indirect -github.com/leaanthony/go-common-file-dialog v1.0.3 // indirect github.com/leaanthony/slicer v1.5.0 // indirect github.com/leaanthony/typescriptify-golang-structs v0.1.7 // indirect github.com/pkg/browser v0.0.0-20210706143420-7d21f8c997e2 // indirect diff --git a/v2/cmd/wails/internal/commands/initialise/templates/generate/plain/go.sum b/v2/cmd/wails/internal/commands/initialise/templates/generate/plain/go.sum index 4ba840926..3e14e745f 100644 --- a/v2/cmd/wails/internal/commands/initialise/templates/generate/plain/go.sum +++ b/v2/cmd/wails/internal/commands/initialise/templates/generate/plain/go.sum @@ -81,8 +81,6 @@ github.com/leaanthony/debme v1.2.1 h1:9Tgwf+kjcrbMQ4WnPcEIUcQuIZYqdWftzZkBr+i/oO github.com/leaanthony/debme v1.2.1/go.mod h1:3V+sCm5tYAgQymvSOfYQ5Xx2JCr+OXiD9Jkw3otUjiA= github.com/leaanthony/go-ansi-parser v1.0.1 h1:97v6c5kYppVsbScf4r/VZdXyQ21KQIfeQOk2DgKxGG4= github.com/leaanthony/go-ansi-parser v1.0.1/go.mod h1:7arTzgVI47srICYhvgUV4CGd063sGEeoSlych5yeSPM= -github.com/leaanthony/go-common-file-dialog v1.0.3 h1:O0uGjKnWtdEADGrkg+TyAAbZylykMwwx/MNEXn9fp+Y= -github.com/leaanthony/go-common-file-dialog v1.0.3/go.mod h1:TGhEc9eSJgRsupZ+iH1ZgAOnEo9zp05cRH2j08RPrF0= github.com/leaanthony/gosod v1.0.3/go.mod h1:BJ2J+oHsQIyIQpnLPjnqFGTMnOZXDbvWtRCSG7jGxs4= github.com/leaanthony/idgen v1.0.0/go.mod h1:4nBZnt8ml/f/ic/EVQuLxuj817RccT2fyrUaZFxrcVA= github.com/leaanthony/slicer v1.5.0 h1:aHYTN8xbCCLxJmkNKiLB6tgcMARl4eWmH9/F+S/0HtY= diff --git a/v2/cmd/wails/internal/commands/initialise/templates/templates/plain/go.mod.tmpl b/v2/cmd/wails/internal/commands/initialise/templates/templates/plain/go.mod.tmpl index d3e1921a2..27a2d22f4 100644 --- a/v2/cmd/wails/internal/commands/initialise/templates/templates/plain/go.mod.tmpl +++ b/v2/cmd/wails/internal/commands/initialise/templates/templates/plain/go.mod.tmpl @@ -18,7 +18,6 @@ github.com/jchv/go-winloader v0.0.0-20200815041850-dec1ee9a7fd5 // indirect github.com/klauspost/compress v1.12.2 // indirect github.com/leaanthony/debme v1.2.1 // indirect github.com/leaanthony/go-ansi-parser v1.0.1 // indirect -github.com/leaanthony/go-common-file-dialog v1.0.3 // indirect github.com/leaanthony/slicer v1.5.0 // indirect github.com/leaanthony/typescriptify-golang-structs v0.1.7 // indirect github.com/pkg/browser v0.0.0-20210706143420-7d21f8c997e2 // indirect diff --git a/v2/cmd/wails/internal/commands/initialise/templates/templates/plain/go.sum b/v2/cmd/wails/internal/commands/initialise/templates/templates/plain/go.sum index 4ba840926..3e14e745f 100644 --- a/v2/cmd/wails/internal/commands/initialise/templates/templates/plain/go.sum +++ b/v2/cmd/wails/internal/commands/initialise/templates/templates/plain/go.sum @@ -81,8 +81,6 @@ github.com/leaanthony/debme v1.2.1 h1:9Tgwf+kjcrbMQ4WnPcEIUcQuIZYqdWftzZkBr+i/oO github.com/leaanthony/debme v1.2.1/go.mod h1:3V+sCm5tYAgQymvSOfYQ5Xx2JCr+OXiD9Jkw3otUjiA= github.com/leaanthony/go-ansi-parser v1.0.1 h1:97v6c5kYppVsbScf4r/VZdXyQ21KQIfeQOk2DgKxGG4= github.com/leaanthony/go-ansi-parser v1.0.1/go.mod h1:7arTzgVI47srICYhvgUV4CGd063sGEeoSlych5yeSPM= -github.com/leaanthony/go-common-file-dialog v1.0.3 h1:O0uGjKnWtdEADGrkg+TyAAbZylykMwwx/MNEXn9fp+Y= -github.com/leaanthony/go-common-file-dialog v1.0.3/go.mod h1:TGhEc9eSJgRsupZ+iH1ZgAOnEo9zp05cRH2j08RPrF0= github.com/leaanthony/gosod v1.0.3/go.mod h1:BJ2J+oHsQIyIQpnLPjnqFGTMnOZXDbvWtRCSG7jGxs4= github.com/leaanthony/idgen v1.0.0/go.mod h1:4nBZnt8ml/f/ic/EVQuLxuj817RccT2fyrUaZFxrcVA= github.com/leaanthony/slicer v1.5.0 h1:aHYTN8xbCCLxJmkNKiLB6tgcMARl4eWmH9/F+S/0HtY= diff --git a/v2/go.mod b/v2/go.mod index 5e3f0c2a8..f8e63331d 100644 --- a/v2/go.mod +++ b/v2/go.mod @@ -17,7 +17,6 @@ require ( github.com/leaanthony/clir v1.0.4 github.com/leaanthony/debme v1.2.1 github.com/leaanthony/go-ansi-parser v1.0.1 - github.com/leaanthony/go-common-file-dialog v1.0.3 github.com/leaanthony/gosod v1.0.3 github.com/leaanthony/idgen v1.0.0 github.com/leaanthony/slicer v1.5.0 diff --git a/v2/go.sum b/v2/go.sum index 14ea32693..090c749b6 100644 --- a/v2/go.sum +++ b/v2/go.sum @@ -79,8 +79,6 @@ github.com/leaanthony/debme v1.2.1 h1:9Tgwf+kjcrbMQ4WnPcEIUcQuIZYqdWftzZkBr+i/oO github.com/leaanthony/debme v1.2.1/go.mod h1:3V+sCm5tYAgQymvSOfYQ5Xx2JCr+OXiD9Jkw3otUjiA= github.com/leaanthony/go-ansi-parser v1.0.1 h1:97v6c5kYppVsbScf4r/VZdXyQ21KQIfeQOk2DgKxGG4= github.com/leaanthony/go-ansi-parser v1.0.1/go.mod h1:7arTzgVI47srICYhvgUV4CGd063sGEeoSlych5yeSPM= -github.com/leaanthony/go-common-file-dialog v1.0.3 h1:O0uGjKnWtdEADGrkg+TyAAbZylykMwwx/MNEXn9fp+Y= -github.com/leaanthony/go-common-file-dialog v1.0.3/go.mod h1:TGhEc9eSJgRsupZ+iH1ZgAOnEo9zp05cRH2j08RPrF0= github.com/leaanthony/gosod v1.0.3 h1:Fnt+/B6NjQOVuCWOKYRREZnjGyvg+mEhd1nkkA04aTQ= github.com/leaanthony/gosod v1.0.3/go.mod h1:BJ2J+oHsQIyIQpnLPjnqFGTMnOZXDbvWtRCSG7jGxs4= github.com/leaanthony/idgen v1.0.0 h1:IZreR+JGEzFV4yeVuBZA25gM0keUoFy+RDUldncQ+Jw= diff --git a/v2/internal/ffenestri/ffenestri_client_windows.go b/v2/internal/ffenestri/ffenestri_client_windows.go index c00c13706..a9a6cf042 100644 --- a/v2/internal/ffenestri/ffenestri_client_windows.go +++ b/v2/internal/ffenestri/ffenestri_client_windows.go @@ -14,7 +14,7 @@ import ( "strconv" "syscall" - "github.com/leaanthony/go-common-file-dialog/cfd" + "github.com/wailsapp/wails/v2/internal/go-common-file-dialog/cfd" "github.com/wailsapp/wails/v2/pkg/runtime" "golang.org/x/sys/windows" diff --git a/v2/internal/frontend/desktop/windows/dialog.go b/v2/internal/frontend/desktop/windows/dialog.go index f2bb7bf1d..a8fa5b8a3 100644 --- a/v2/internal/frontend/desktop/windows/dialog.go +++ b/v2/internal/frontend/desktop/windows/dialog.go @@ -4,8 +4,8 @@ package windows import ( - "github.com/leaanthony/go-common-file-dialog/cfd" "github.com/wailsapp/wails/v2/internal/frontend" + "github.com/wailsapp/wails/v2/internal/go-common-file-dialog/cfd" "golang.org/x/sys/windows" "syscall" ) diff --git a/v2/internal/go-common-file-dialog/LICENSE b/v2/internal/go-common-file-dialog/LICENSE new file mode 100644 index 000000000..508b6978e --- /dev/null +++ b/v2/internal/go-common-file-dialog/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2019 Harry Phillips + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/v2/internal/go-common-file-dialog/README.md b/v2/internal/go-common-file-dialog/README.md new file mode 100644 index 000000000..1cb5902d1 --- /dev/null +++ b/v2/internal/go-common-file-dialog/README.md @@ -0,0 +1,31 @@ +# Common File Dialog bindings for Golang + +[Project Home](https://github.com/harry1453/go-common-file-dialog) + +This library contains bindings for Windows Vista and +newer's [Common File Dialogs](https://docs.microsoft.com/en-us/windows/win32/shell/common-file-dialog), which is the +standard system dialog for selecting files or folders to open or save. + +The Common File Dialogs have to be accessed via +the [COM Interface](https://en.wikipedia.org/wiki/Component_Object_Model), normally via C++ or via bindings (like in C#) +. + +This library contains bindings for Golang. **It does not require CGO**, and contains empty stubs for non-windows +platforms (so is safe to compile and run on platforms other than windows, but will just return errors at runtime). + +This can be very useful if you want to quickly get a file selector in your Golang application. The `cfdutil` package +contains utility functions with a single call to open and configure a dialog, and then get the result from it. Examples +for this are in [`_examples/usingutil`](_examples/usingutil). Or, if you want finer control over the dialog's operation, +you can use the base package. Examples for this are in [`_examples/notusingutil`](_examples/notusingutil). + +This library is available under the MIT license. + +Currently supported features: + +* Open File Dialog (to open a single file) +* Open Multiple Files Dialog (to open multiple files) +* Open Folder Dialog +* Save File Dialog +* Dialog "roles" to allow Windows to remember different "last locations" for different types of dialog +* Set dialog Title, Default Folder and Initial Folder +* Set dialog File Filters diff --git a/v2/internal/go-common-file-dialog/cfd/CommonFileDialog.go b/v2/internal/go-common-file-dialog/cfd/CommonFileDialog.go new file mode 100644 index 000000000..58e97aa4e --- /dev/null +++ b/v2/internal/go-common-file-dialog/cfd/CommonFileDialog.go @@ -0,0 +1,72 @@ +// Cross-platform. + +// Common File Dialogs +package cfd + +type Dialog interface { + // Show the dialog to the user. + // Blocks until the user has closed the dialog. + Show() error + // Sets the dialog's parent window. Use 0 to set the dialog to have no parent window. + SetParentWindowHandle(hwnd uintptr) + // Show the dialog to the user. + // Blocks until the user has closed the dialog and returns their selection. + // Returns an error if the user cancelled the dialog. + // Do not use for the Open Multiple Files dialog. Use ShowAndGetResults instead. + ShowAndGetResult() (string, error) + // Sets the title of the dialog window. + SetTitle(title string) error + // Sets the "role" of the dialog. This is used to derive the dialog's GUID, which the + // OS will use to differentiate it from dialogs that are intended for other purposes. + // This means that, for example, a dialog with role "Import" will have a different + // previous location that it will open to than a dialog with role "Open". Can be any string. + SetRole(role string) error + // Sets the folder used as a default if there is not a recently used folder value available + SetDefaultFolder(defaultFolder string) error + // Sets the folder that the dialog always opens to. + // If this is set, it will override the "default folder" behaviour and the dialog will always open to this folder. + SetFolder(folder string) error + // Gets the selected file or folder path, as an absolute path eg. "C:\Folder\file.txt" + // Do not use for the Open Multiple Files dialog. Use GetResults instead. + GetResult() (string, error) + // Sets the file name, I.E. the contents of the file name text box. + // For Select Folder Dialog, sets folder name. + SetFileName(fileName string) error + // Release the resources allocated to this Dialog. + // Should be called when the dialog is finished with. + Release() error +} + +type FileDialog interface { + Dialog + // Set the list of file filters that the user can select. + SetFileFilters(fileFilter []FileFilter) error + // Set the selected item from the list of file filters (set using SetFileFilters) by its index. Defaults to 0 (the first item in the list) if not called. + SetSelectedFileFilterIndex(index uint) error + // Sets the default extension applied when a user does not provide one as part of the file name. + // If the user selects a different file filter, the default extension will be automatically updated to match the new file filter. + // For Open / Open Multiple File Dialog, this only has an effect when the user specifies a file name with no extension and a file with the default extension exists. + // For Save File Dialog, this extension will be used whenever a user does not specify an extension. + SetDefaultExtension(defaultExtension string) error +} + +type OpenFileDialog interface { + FileDialog +} + +type OpenMultipleFilesDialog interface { + FileDialog + // Show the dialog to the user. + // Blocks until the user has closed the dialog and returns the selected files. + ShowAndGetResults() ([]string, error) + // Gets the selected file paths, as absolute paths eg. "C:\Folder\file.txt" + GetResults() ([]string, error) +} + +type SelectFolderDialog interface { + Dialog +} + +type SaveFileDialog interface { // TODO Properties + FileDialog +} diff --git a/v2/internal/go-common-file-dialog/cfd/CommonFileDialog_nonWindows.go b/v2/internal/go-common-file-dialog/cfd/CommonFileDialog_nonWindows.go new file mode 100644 index 000000000..3ab969850 --- /dev/null +++ b/v2/internal/go-common-file-dialog/cfd/CommonFileDialog_nonWindows.go @@ -0,0 +1,28 @@ +//go:build !windows +// +build !windows + +package cfd + +import "fmt" + +var unsupportedError = fmt.Errorf("common file dialogs are only available on windows") + +// TODO doc +func NewOpenFileDialog(config DialogConfig) (OpenFileDialog, error) { + return nil, unsupportedError +} + +// TODO doc +func NewOpenMultipleFilesDialog(config DialogConfig) (OpenMultipleFilesDialog, error) { + return nil, unsupportedError +} + +// TODO doc +func NewSelectFolderDialog(config DialogConfig) (SelectFolderDialog, error) { + return nil, unsupportedError +} + +// TODO doc +func NewSaveFileDialog(config DialogConfig) (SaveFileDialog, error) { + return nil, unsupportedError +} diff --git a/v2/internal/go-common-file-dialog/cfd/CommonFileDialog_windows.go b/v2/internal/go-common-file-dialog/cfd/CommonFileDialog_windows.go new file mode 100644 index 000000000..69f46118e --- /dev/null +++ b/v2/internal/go-common-file-dialog/cfd/CommonFileDialog_windows.go @@ -0,0 +1,79 @@ +//go:build windows +// +build windows + +package cfd + +import "github.com/go-ole/go-ole" + +func initialize() { + // Swallow error + _ = ole.CoInitializeEx(0, ole.COINIT_APARTMENTTHREADED|ole.COINIT_DISABLE_OLE1DDE) +} + +// TODO doc +func NewOpenFileDialog(config DialogConfig) (OpenFileDialog, error) { + initialize() + + openDialog, err := newIFileOpenDialog() + if err != nil { + return nil, err + } + err = config.apply(openDialog) + if err != nil { + return nil, err + } + return openDialog, nil +} + +// TODO doc +func NewOpenMultipleFilesDialog(config DialogConfig) (OpenMultipleFilesDialog, error) { + initialize() + + openDialog, err := newIFileOpenDialog() + if err != nil { + return nil, err + } + err = config.apply(openDialog) + if err != nil { + return nil, err + } + err = openDialog.setIsMultiselect(true) + if err != nil { + return nil, err + } + return openDialog, nil +} + +// TODO doc +func NewSelectFolderDialog(config DialogConfig) (SelectFolderDialog, error) { + initialize() + + openDialog, err := newIFileOpenDialog() + if err != nil { + return nil, err + } + err = config.apply(openDialog) + if err != nil { + return nil, err + } + err = openDialog.setPickFolders(true) + if err != nil { + return nil, err + } + return openDialog, nil +} + +// TODO doc +func NewSaveFileDialog(config DialogConfig) (SaveFileDialog, error) { + initialize() + + saveDialog, err := newIFileSaveDialog() + if err != nil { + return nil, err + } + err = config.apply(saveDialog) + if err != nil { + return nil, err + } + return saveDialog, nil +} diff --git a/v2/internal/go-common-file-dialog/cfd/DialogConfig.go b/v2/internal/go-common-file-dialog/cfd/DialogConfig.go new file mode 100644 index 000000000..221dbef27 --- /dev/null +++ b/v2/internal/go-common-file-dialog/cfd/DialogConfig.go @@ -0,0 +1,120 @@ +// Cross-platform. + +package cfd + +type FileFilter struct { + // The display name of the filter (That is shown to the user) + DisplayName string + // The filter pattern. Eg. "*.txt;*.png" to select all txt and png files, "*.*" to select any files, etc. + Pattern string +} + +type DialogConfig struct { + // The title of the dialog + Title string + // The role of the dialog. This is used to derive the dialog's GUID, which the + // OS will use to differentiate it from dialogs that are intended for other purposes. + // This means that, for example, a dialog with role "Import" will have a different + // previous location that it will open to than a dialog with role "Open". Can be any string. + Role string + // The default folder - the folder that is used the first time the user opens it + // (after the first time their last used location is used). + DefaultFolder string + // The initial folder - the folder that the dialog always opens to if not empty. + // If this is not empty, it will override the "default folder" behaviour and + // the dialog will always open to this folder. + Folder string + // The file filters that restrict which types of files the dialog is able to choose. + // Ignored by Select Folder Dialog. + FileFilters []FileFilter + // Sets the initially selected file filter. This is an index of FileFilters. + // Ignored by Select Folder Dialog. + SelectedFileFilterIndex uint + // The initial name of the file (I.E. the text in the file name text box) when the user opens the dialog. + // For the Select Folder Dialog, this sets the initial folder name. + FileName string + // The default extension applied when a user does not provide one as part of the file name. + // If the user selects a different file filter, the default extension will be automatically updated to match the new file filter. + // For Open / Open Multiple File Dialog, this only has an effect when the user specifies a file name with no extension and a file with the default extension exists. + // For Save File Dialog, this extension will be used whenever a user does not specify an extension. + // Ignored by Select Folder Dialog. + DefaultExtension string + // ParentWindowHandle is the handle (HWND) to the parent window of the dialog. + // If left as 0 / nil, the dialog will have no parent window. + ParentWindowHandle uintptr +} + +var defaultFilters = []FileFilter{ + { + DisplayName: "All Files (*.*)", + Pattern: "*.*", + }, +} + +func (config *DialogConfig) apply(dialog Dialog) (err error) { + if config.Title != "" { + err = dialog.SetTitle(config.Title) + if err != nil { + return + } + } + + if config.Role != "" { + err = dialog.SetRole(config.Role) + if err != nil { + return + } + } + + if config.Folder != "" { + err = dialog.SetFolder(config.Folder) + if err != nil { + return + } + } + + if config.DefaultFolder != "" { + err = dialog.SetDefaultFolder(config.DefaultFolder) + if err != nil { + return + } + } + + if config.FileName != "" { + err = dialog.SetFileName(config.FileName) + if err != nil { + return + } + } + + dialog.SetParentWindowHandle(config.ParentWindowHandle) + + if dialog, ok := dialog.(FileDialog); ok { + var fileFilters []FileFilter + if config.FileFilters != nil && len(config.FileFilters) > 0 { + fileFilters = config.FileFilters + } else { + fileFilters = defaultFilters + } + err = dialog.SetFileFilters(fileFilters) + if err != nil { + return + } + + if config.SelectedFileFilterIndex != 0 { + err = dialog.SetSelectedFileFilterIndex(config.SelectedFileFilterIndex) + if err != nil { + return + } + } + + if config.DefaultExtension != "" { + err = dialog.SetDefaultExtension(config.DefaultExtension) + if err != nil { + return + } + } + } + + return +} diff --git a/v2/internal/go-common-file-dialog/cfd/errors.go b/v2/internal/go-common-file-dialog/cfd/errors.go new file mode 100644 index 000000000..c097c8eb2 --- /dev/null +++ b/v2/internal/go-common-file-dialog/cfd/errors.go @@ -0,0 +1,7 @@ +package cfd + +import "errors" + +var ( + ErrorCancelled = errors.New("cancelled by user") +) diff --git a/v2/internal/go-common-file-dialog/cfd/iFileOpenDialog.go b/v2/internal/go-common-file-dialog/cfd/iFileOpenDialog.go new file mode 100644 index 000000000..8c82cda2c --- /dev/null +++ b/v2/internal/go-common-file-dialog/cfd/iFileOpenDialog.go @@ -0,0 +1,197 @@ +//go:build windows +// +build windows + +package cfd + +import ( + "github.com/go-ole/go-ole" + "github.com/wailsapp/wails/v2/internal/go-common-file-dialog/util" + "syscall" + "unsafe" +) + +var ( + fileOpenDialogCLSID = ole.NewGUID("{DC1C5A9C-E88A-4dde-A5A1-60F82A20AEF7}") + fileOpenDialogIID = ole.NewGUID("{d57c7288-d4ad-4768-be02-9d969532d960}") +) + +type iFileOpenDialog struct { + vtbl *iFileOpenDialogVtbl + parentWindowHandle uintptr +} + +type iFileOpenDialogVtbl struct { + iFileDialogVtbl + + GetResults uintptr // func (ppenum **IShellItemArray) HRESULT + GetSelectedItems uintptr +} + +func newIFileOpenDialog() (*iFileOpenDialog, error) { + if unknown, err := ole.CreateInstance(fileOpenDialogCLSID, fileOpenDialogIID); err == nil { + return (*iFileOpenDialog)(unsafe.Pointer(unknown)), nil + } else { + return nil, err + } +} + +func (fileOpenDialog *iFileOpenDialog) Show() error { + return fileOpenDialog.vtbl.show(unsafe.Pointer(fileOpenDialog), fileOpenDialog.parentWindowHandle) +} + +func (fileOpenDialog *iFileOpenDialog) SetParentWindowHandle(hwnd uintptr) { + fileOpenDialog.parentWindowHandle = hwnd +} + +func (fileOpenDialog *iFileOpenDialog) ShowAndGetResult() (string, error) { + isMultiselect, err := fileOpenDialog.isMultiselect() + if err != nil { + return "", err + } + if isMultiselect { + // We should panic as this error is caused by the developer using the library + panic("use ShowAndGetResults for open multiple files dialog") + } + if err := fileOpenDialog.Show(); err != nil { + return "", err + } + return fileOpenDialog.GetResult() +} + +func (fileOpenDialog *iFileOpenDialog) ShowAndGetResults() ([]string, error) { + isMultiselect, err := fileOpenDialog.isMultiselect() + if err != nil { + return nil, err + } + if !isMultiselect { + // We should panic as this error is caused by the developer using the library + panic("use ShowAndGetResult for open single file dialog") + } + if err := fileOpenDialog.Show(); err != nil { + return nil, err + } + return fileOpenDialog.GetResults() +} + +func (fileOpenDialog *iFileOpenDialog) SetTitle(title string) error { + return fileOpenDialog.vtbl.setTitle(unsafe.Pointer(fileOpenDialog), title) +} + +func (fileOpenDialog *iFileOpenDialog) GetResult() (string, error) { + isMultiselect, err := fileOpenDialog.isMultiselect() + if err != nil { + return "", err + } + if isMultiselect { + // We should panic as this error is caused by the developer using the library + panic("use GetResults for open multiple files dialog") + } + return fileOpenDialog.vtbl.getResultString(unsafe.Pointer(fileOpenDialog)) +} + +func (fileOpenDialog *iFileOpenDialog) Release() error { + return fileOpenDialog.vtbl.release(unsafe.Pointer(fileOpenDialog)) +} + +func (fileOpenDialog *iFileOpenDialog) SetDefaultFolder(defaultFolderPath string) error { + return fileOpenDialog.vtbl.setDefaultFolder(unsafe.Pointer(fileOpenDialog), defaultFolderPath) +} + +func (fileOpenDialog *iFileOpenDialog) SetFolder(defaultFolderPath string) error { + return fileOpenDialog.vtbl.setFolder(unsafe.Pointer(fileOpenDialog), defaultFolderPath) +} + +func (fileOpenDialog *iFileOpenDialog) SetFileFilters(filter []FileFilter) error { + return fileOpenDialog.vtbl.setFileTypes(unsafe.Pointer(fileOpenDialog), filter) +} + +func (fileOpenDialog *iFileOpenDialog) SetRole(role string) error { + return fileOpenDialog.vtbl.setClientGuid(unsafe.Pointer(fileOpenDialog), util.StringToUUID(role)) +} + +// This should only be callable when the user asks for a multi select because +// otherwise they will be given the Dialog interface which does not expose this function. +func (fileOpenDialog *iFileOpenDialog) GetResults() ([]string, error) { + isMultiselect, err := fileOpenDialog.isMultiselect() + if err != nil { + return nil, err + } + if !isMultiselect { + // We should panic as this error is caused by the developer using the library + panic("use GetResult for open single file dialog") + } + return fileOpenDialog.vtbl.getResultsStrings(unsafe.Pointer(fileOpenDialog)) +} + +func (fileOpenDialog *iFileOpenDialog) SetDefaultExtension(defaultExtension string) error { + return fileOpenDialog.vtbl.setDefaultExtension(unsafe.Pointer(fileOpenDialog), defaultExtension) +} + +func (fileOpenDialog *iFileOpenDialog) SetFileName(initialFileName string) error { + return fileOpenDialog.vtbl.setFileName(unsafe.Pointer(fileOpenDialog), initialFileName) +} + +func (fileOpenDialog *iFileOpenDialog) SetSelectedFileFilterIndex(index uint) error { + return fileOpenDialog.vtbl.setSelectedFileFilterIndex(unsafe.Pointer(fileOpenDialog), index) +} + +func (fileOpenDialog *iFileOpenDialog) setPickFolders(pickFolders bool) error { + const FosPickfolders = 0x20 + if pickFolders { + return fileOpenDialog.vtbl.addOption(unsafe.Pointer(fileOpenDialog), FosPickfolders) + } else { + return fileOpenDialog.vtbl.removeOption(unsafe.Pointer(fileOpenDialog), FosPickfolders) + } +} + +const FosAllowMultiselect = 0x200 + +func (fileOpenDialog *iFileOpenDialog) isMultiselect() (bool, error) { + options, err := fileOpenDialog.vtbl.getOptions(unsafe.Pointer(fileOpenDialog)) + if err != nil { + return false, err + } + return options&FosAllowMultiselect != 0, nil +} + +func (fileOpenDialog *iFileOpenDialog) setIsMultiselect(isMultiselect bool) error { + if isMultiselect { + return fileOpenDialog.vtbl.addOption(unsafe.Pointer(fileOpenDialog), FosAllowMultiselect) + } else { + return fileOpenDialog.vtbl.removeOption(unsafe.Pointer(fileOpenDialog), FosAllowMultiselect) + } +} + +func (vtbl *iFileOpenDialogVtbl) getResults(objPtr unsafe.Pointer) (*iShellItemArray, error) { + var shellItemArray *iShellItemArray + ret, _, _ := syscall.Syscall(vtbl.GetResults, + 1, + uintptr(objPtr), + uintptr(unsafe.Pointer(&shellItemArray)), + 0) + return shellItemArray, hresultToError(ret) +} + +func (vtbl *iFileOpenDialogVtbl) getResultsStrings(objPtr unsafe.Pointer) ([]string, error) { + shellItemArray, err := vtbl.getResults(objPtr) + if err != nil { + return nil, err + } + if shellItemArray == nil { + return nil, ErrorCancelled + } + defer shellItemArray.vtbl.release(unsafe.Pointer(shellItemArray)) + count, err := shellItemArray.vtbl.getCount(unsafe.Pointer(shellItemArray)) + if err != nil { + return nil, err + } + var results []string + for i := uintptr(0); i < count; i++ { + newItem, err := shellItemArray.vtbl.getItemAt(unsafe.Pointer(shellItemArray), i) + if err != nil { + return nil, err + } + results = append(results, newItem) + } + return results, nil +} diff --git a/v2/internal/go-common-file-dialog/cfd/iFileSaveDialog.go b/v2/internal/go-common-file-dialog/cfd/iFileSaveDialog.go new file mode 100644 index 000000000..3effeda25 --- /dev/null +++ b/v2/internal/go-common-file-dialog/cfd/iFileSaveDialog.go @@ -0,0 +1,93 @@ +//go:build windows +// +build windows + +package cfd + +import ( + "github.com/go-ole/go-ole" + "github.com/wailsapp/wails/v2/internal/go-common-file-dialog/util" + "unsafe" +) + +var ( + saveFileDialogCLSID = ole.NewGUID("{C0B4E2F3-BA21-4773-8DBA-335EC946EB8B}") + saveFileDialogIID = ole.NewGUID("{84bccd23-5fde-4cdb-aea4-af64b83d78ab}") +) + +type iFileSaveDialog struct { + vtbl *iFileSaveDialogVtbl + parentWindowHandle uintptr +} + +type iFileSaveDialogVtbl struct { + iFileDialogVtbl + + SetSaveAsItem uintptr + SetProperties uintptr + SetCollectedProperties uintptr + GetProperties uintptr + ApplyProperties uintptr +} + +func newIFileSaveDialog() (*iFileSaveDialog, error) { + if unknown, err := ole.CreateInstance(saveFileDialogCLSID, saveFileDialogIID); err == nil { + return (*iFileSaveDialog)(unsafe.Pointer(unknown)), nil + } else { + return nil, err + } +} + +func (fileSaveDialog *iFileSaveDialog) Show() error { + return fileSaveDialog.vtbl.show(unsafe.Pointer(fileSaveDialog), fileSaveDialog.parentWindowHandle) +} + +func (fileSaveDialog *iFileSaveDialog) SetParentWindowHandle(hwnd uintptr) { + fileSaveDialog.parentWindowHandle = hwnd +} + +func (fileSaveDialog *iFileSaveDialog) ShowAndGetResult() (string, error) { + if err := fileSaveDialog.Show(); err != nil { + return "", err + } + return fileSaveDialog.GetResult() +} + +func (fileSaveDialog *iFileSaveDialog) SetTitle(title string) error { + return fileSaveDialog.vtbl.setTitle(unsafe.Pointer(fileSaveDialog), title) +} + +func (fileSaveDialog *iFileSaveDialog) GetResult() (string, error) { + return fileSaveDialog.vtbl.getResultString(unsafe.Pointer(fileSaveDialog)) +} + +func (fileSaveDialog *iFileSaveDialog) Release() error { + return fileSaveDialog.vtbl.release(unsafe.Pointer(fileSaveDialog)) +} + +func (fileSaveDialog *iFileSaveDialog) SetDefaultFolder(defaultFolderPath string) error { + return fileSaveDialog.vtbl.setDefaultFolder(unsafe.Pointer(fileSaveDialog), defaultFolderPath) +} + +func (fileSaveDialog *iFileSaveDialog) SetFolder(defaultFolderPath string) error { + return fileSaveDialog.vtbl.setFolder(unsafe.Pointer(fileSaveDialog), defaultFolderPath) +} + +func (fileSaveDialog *iFileSaveDialog) SetFileFilters(filter []FileFilter) error { + return fileSaveDialog.vtbl.setFileTypes(unsafe.Pointer(fileSaveDialog), filter) +} + +func (fileSaveDialog *iFileSaveDialog) SetRole(role string) error { + return fileSaveDialog.vtbl.setClientGuid(unsafe.Pointer(fileSaveDialog), util.StringToUUID(role)) +} + +func (fileSaveDialog *iFileSaveDialog) SetDefaultExtension(defaultExtension string) error { + return fileSaveDialog.vtbl.setDefaultExtension(unsafe.Pointer(fileSaveDialog), defaultExtension) +} + +func (fileSaveDialog *iFileSaveDialog) SetFileName(initialFileName string) error { + return fileSaveDialog.vtbl.setFileName(unsafe.Pointer(fileSaveDialog), initialFileName) +} + +func (fileSaveDialog *iFileSaveDialog) SetSelectedFileFilterIndex(index uint) error { + return fileSaveDialog.vtbl.setSelectedFileFilterIndex(unsafe.Pointer(fileSaveDialog), index) +} diff --git a/v2/internal/go-common-file-dialog/cfd/iShellItem.go b/v2/internal/go-common-file-dialog/cfd/iShellItem.go new file mode 100644 index 000000000..6a747f4d9 --- /dev/null +++ b/v2/internal/go-common-file-dialog/cfd/iShellItem.go @@ -0,0 +1,53 @@ +//go:build windows +// +build windows + +package cfd + +import ( + "github.com/go-ole/go-ole" + "syscall" + "unsafe" +) + +var ( + procSHCreateItemFromParsingName = syscall.NewLazyDLL("Shell32.dll").NewProc("SHCreateItemFromParsingName") + iidShellItem = ole.NewGUID("43826d1e-e718-42ee-bc55-a1e261c37bfe") +) + +type iShellItem struct { + vtbl *iShellItemVtbl +} + +type iShellItemVtbl struct { + iUnknownVtbl + BindToHandler uintptr + GetParent uintptr + GetDisplayName uintptr // func (sigdnName SIGDN, ppszName *LPWSTR) HRESULT + GetAttributes uintptr + Compare uintptr +} + +func newIShellItem(path string) (*iShellItem, error) { + var shellItem *iShellItem + pathPtr := ole.SysAllocString(path) + ret, _, _ := procSHCreateItemFromParsingName.Call( + uintptr(unsafe.Pointer(pathPtr)), + 0, + uintptr(unsafe.Pointer(iidShellItem)), + uintptr(unsafe.Pointer(&shellItem))) + return shellItem, hresultToError(ret) +} + +func (vtbl *iShellItemVtbl) getDisplayName(objPtr unsafe.Pointer) (string, error) { + var ptr *uint16 + ret, _, _ := syscall.Syscall(vtbl.GetDisplayName, + 2, + uintptr(objPtr), + 0x80058000, // SIGDN_FILESYSPATH + uintptr(unsafe.Pointer(&ptr))) + if err := hresultToError(ret); err != nil { + return "", err + } + defer ole.CoTaskMemFree(uintptr(unsafe.Pointer(ptr))) + return ole.LpOleStrToString(ptr), nil +} diff --git a/v2/internal/go-common-file-dialog/cfd/iShellItemArray.go b/v2/internal/go-common-file-dialog/cfd/iShellItemArray.go new file mode 100644 index 000000000..84f26fa20 --- /dev/null +++ b/v2/internal/go-common-file-dialog/cfd/iShellItemArray.go @@ -0,0 +1,67 @@ +//go:build windows +// +build windows + +package cfd + +import ( + "github.com/go-ole/go-ole" + "syscall" + "unsafe" +) + +const ( + iidShellItemArrayGUID = "{b63ea76d-1f85-456f-a19c-48159efa858b}" +) + +var ( + iidShellItemArray *ole.GUID +) + +func init() { + iidShellItemArray, _ = ole.IIDFromString(iidShellItemArrayGUID) +} + +type iShellItemArray struct { + vtbl *iShellItemArrayVtbl +} + +type iShellItemArrayVtbl struct { + iUnknownVtbl + BindToHandler uintptr + GetPropertyStore uintptr + GetPropertyDescriptionList uintptr + GetAttributes uintptr + GetCount uintptr // func (pdwNumItems *DWORD) HRESULT + GetItemAt uintptr // func (dwIndex DWORD, ppsi **IShellItem) HRESULT + EnumItems uintptr +} + +func (vtbl *iShellItemArrayVtbl) getCount(objPtr unsafe.Pointer) (uintptr, error) { + var count uintptr + ret, _, _ := syscall.Syscall(vtbl.GetCount, + 1, + uintptr(objPtr), + uintptr(unsafe.Pointer(&count)), + 0) + if err := hresultToError(ret); err != nil { + return 0, err + } + return count, nil +} + +func (vtbl *iShellItemArrayVtbl) getItemAt(objPtr unsafe.Pointer, index uintptr) (string, error) { + var shellItem *iShellItem + ret, _, _ := syscall.Syscall(vtbl.GetItemAt, + 2, + uintptr(objPtr), + index, + uintptr(unsafe.Pointer(&shellItem))) + if err := hresultToError(ret); err != nil { + return "", err + } + if shellItem == nil { + return "", ErrorCancelled + } + defer shellItem.vtbl.release(unsafe.Pointer(shellItem)) + return shellItem.vtbl.getDisplayName(unsafe.Pointer(shellItem)) +} diff --git a/v2/internal/go-common-file-dialog/cfd/vtblCommon.go b/v2/internal/go-common-file-dialog/cfd/vtblCommon.go new file mode 100644 index 000000000..21015c27c --- /dev/null +++ b/v2/internal/go-common-file-dialog/cfd/vtblCommon.go @@ -0,0 +1,48 @@ +//go:build windows +// +build windows + +package cfd + +type comDlgFilterSpec struct { + pszName *int16 + pszSpec *int16 +} + +type iUnknownVtbl struct { + QueryInterface uintptr + AddRef uintptr + Release uintptr +} + +type iModalWindowVtbl struct { + iUnknownVtbl + Show uintptr // func (hwndOwner HWND) HRESULT +} + +type iFileDialogVtbl struct { + iModalWindowVtbl + SetFileTypes uintptr // func (cFileTypes UINT, rgFilterSpec *COMDLG_FILTERSPEC) HRESULT + SetFileTypeIndex uintptr // func(iFileType UINT) HRESULT + GetFileTypeIndex uintptr + Advise uintptr + Unadvise uintptr + SetOptions uintptr // func (fos FILEOPENDIALOGOPTIONS) HRESULT + GetOptions uintptr // func (pfos *FILEOPENDIALOGOPTIONS) HRESULT + SetDefaultFolder uintptr // func (psi *IShellItem) HRESULT + SetFolder uintptr // func (psi *IShellItem) HRESULT + GetFolder uintptr + GetCurrentSelection uintptr + SetFileName uintptr // func (pszName LPCWSTR) HRESULT + GetFileName uintptr + SetTitle uintptr // func(pszTitle LPCWSTR) HRESULT + SetOkButtonLabel uintptr + SetFileNameLabel uintptr + GetResult uintptr // func (ppsi **IShellItem) HRESULT + AddPlace uintptr + SetDefaultExtension uintptr // func (pszDefaultExtension LPCWSTR) HRESULT + // This can only be used from a callback. + Close uintptr + SetClientGuid uintptr // func (guid REFGUID) HRESULT + ClearClientData uintptr + SetFilter uintptr +} diff --git a/v2/internal/go-common-file-dialog/cfd/vtblCommonFunc.go b/v2/internal/go-common-file-dialog/cfd/vtblCommonFunc.go new file mode 100644 index 000000000..a92100010 --- /dev/null +++ b/v2/internal/go-common-file-dialog/cfd/vtblCommonFunc.go @@ -0,0 +1,227 @@ +//go:build windows +// +build windows + +package cfd + +import ( + "fmt" + "github.com/go-ole/go-ole" + "strings" + "syscall" + "unsafe" +) + +func hresultToError(hr uintptr) error { + if hr < 0 { + return ole.NewError(hr) + } + return nil +} + +func (vtbl *iUnknownVtbl) release(objPtr unsafe.Pointer) error { + ret, _, _ := syscall.Syscall(vtbl.Release, + 0, + uintptr(objPtr), + 0, + 0) + return hresultToError(ret) +} + +func (vtbl *iModalWindowVtbl) show(objPtr unsafe.Pointer, hwnd uintptr) error { + ret, _, _ := syscall.Syscall(vtbl.Show, + 1, + uintptr(objPtr), + hwnd, + 0) + return hresultToError(ret) +} + +func (vtbl *iFileDialogVtbl) setFileTypes(objPtr unsafe.Pointer, filters []FileFilter) error { + cFileTypes := len(filters) + if cFileTypes < 0 { + return fmt.Errorf("must specify at least one filter") + } + comDlgFilterSpecs := make([]comDlgFilterSpec, cFileTypes) + for i := 0; i < cFileTypes; i++ { + filter := &filters[i] + comDlgFilterSpecs[i] = comDlgFilterSpec{ + pszName: ole.SysAllocString(filter.DisplayName), + pszSpec: ole.SysAllocString(filter.Pattern), + } + } + ret, _, _ := syscall.Syscall(vtbl.SetFileTypes, + 2, + uintptr(objPtr), + uintptr(cFileTypes), + uintptr(unsafe.Pointer(&comDlgFilterSpecs[0]))) + return hresultToError(ret) +} + +// Options are: +// FOS_OVERWRITEPROMPT = 0x2, +// FOS_STRICTFILETYPES = 0x4, +// FOS_NOCHANGEDIR = 0x8, +// FOS_PICKFOLDERS = 0x20, +// FOS_FORCEFILESYSTEM = 0x40, +// FOS_ALLNONSTORAGEITEMS = 0x80, +// FOS_NOVALIDATE = 0x100, +// FOS_ALLOWMULTISELECT = 0x200, +// FOS_PATHMUSTEXIST = 0x800, +// FOS_FILEMUSTEXIST = 0x1000, +// FOS_CREATEPROMPT = 0x2000, +// FOS_SHAREAWARE = 0x4000, +// FOS_NOREADONLYRETURN = 0x8000, +// FOS_NOTESTFILECREATE = 0x10000, +// FOS_HIDEMRUPLACES = 0x20000, +// FOS_HIDEPINNEDPLACES = 0x40000, +// FOS_NODEREFERENCELINKS = 0x100000, +// FOS_OKBUTTONNEEDSINTERACTION = 0x200000, +// FOS_DONTADDTORECENT = 0x2000000, +// FOS_FORCESHOWHIDDEN = 0x10000000, +// FOS_DEFAULTNOMINIMODE = 0x20000000, +// FOS_FORCEPREVIEWPANEON = 0x40000000, +// FOS_SUPPORTSTREAMABLEITEMS = 0x80000000 +func (vtbl *iFileDialogVtbl) setOptions(objPtr unsafe.Pointer, options uint32) error { + ret, _, _ := syscall.Syscall(vtbl.SetOptions, + 1, + uintptr(objPtr), + uintptr(options), + 0) + return hresultToError(ret) +} + +func (vtbl *iFileDialogVtbl) getOptions(objPtr unsafe.Pointer) (uint32, error) { + var options uint32 + ret, _, _ := syscall.Syscall(vtbl.GetOptions, + 1, + uintptr(objPtr), + uintptr(unsafe.Pointer(&options)), + 0) + return options, hresultToError(ret) +} + +func (vtbl *iFileDialogVtbl) addOption(objPtr unsafe.Pointer, option uint32) error { + if options, err := vtbl.getOptions(objPtr); err == nil { + return vtbl.setOptions(objPtr, options|option) + } else { + return err + } +} + +func (vtbl *iFileDialogVtbl) removeOption(objPtr unsafe.Pointer, option uint32) error { + if options, err := vtbl.getOptions(objPtr); err == nil { + return vtbl.setOptions(objPtr, options&^option) + } else { + return err + } +} + +func (vtbl *iFileDialogVtbl) setDefaultFolder(objPtr unsafe.Pointer, path string) error { + shellItem, err := newIShellItem(path) + if err != nil { + return err + } + defer shellItem.vtbl.release(unsafe.Pointer(shellItem)) + ret, _, _ := syscall.Syscall(vtbl.SetDefaultFolder, + 1, + uintptr(objPtr), + uintptr(unsafe.Pointer(shellItem)), + 0) + return hresultToError(ret) +} + +func (vtbl *iFileDialogVtbl) setFolder(objPtr unsafe.Pointer, path string) error { + shellItem, err := newIShellItem(path) + if err != nil { + return err + } + defer shellItem.vtbl.release(unsafe.Pointer(shellItem)) + ret, _, _ := syscall.Syscall(vtbl.SetFolder, + 1, + uintptr(objPtr), + uintptr(unsafe.Pointer(shellItem)), + 0) + return hresultToError(ret) +} + +func (vtbl *iFileDialogVtbl) setTitle(objPtr unsafe.Pointer, title string) error { + titlePtr := ole.SysAllocString(title) + ret, _, _ := syscall.Syscall(vtbl.SetTitle, + 1, + uintptr(objPtr), + uintptr(unsafe.Pointer(titlePtr)), + 0) + return hresultToError(ret) +} + +func (vtbl *iFileDialogVtbl) close(objPtr unsafe.Pointer) error { + ret, _, _ := syscall.Syscall(vtbl.Close, + 1, + uintptr(objPtr), + 0, + 0) + return hresultToError(ret) +} + +func (vtbl *iFileDialogVtbl) getResult(objPtr unsafe.Pointer) (*iShellItem, error) { + var shellItem *iShellItem + ret, _, _ := syscall.Syscall(vtbl.GetResult, + 1, + uintptr(objPtr), + uintptr(unsafe.Pointer(&shellItem)), + 0) + return shellItem, hresultToError(ret) +} + +func (vtbl *iFileDialogVtbl) getResultString(objPtr unsafe.Pointer) (string, error) { + shellItem, err := vtbl.getResult(objPtr) + if err != nil { + return "", err + } + if shellItem == nil { + return "", ErrorCancelled + } + defer shellItem.vtbl.release(unsafe.Pointer(shellItem)) + return shellItem.vtbl.getDisplayName(unsafe.Pointer(shellItem)) +} + +func (vtbl *iFileDialogVtbl) setClientGuid(objPtr unsafe.Pointer, guid *ole.GUID) error { + ret, _, _ := syscall.Syscall(vtbl.SetClientGuid, + 1, + uintptr(objPtr), + uintptr(unsafe.Pointer(guid)), + 0) + return hresultToError(ret) +} + +func (vtbl *iFileDialogVtbl) setDefaultExtension(objPtr unsafe.Pointer, defaultExtension string) error { + if defaultExtension[0] == '.' { + defaultExtension = strings.TrimPrefix(defaultExtension, ".") + } + defaultExtensionPtr := ole.SysAllocString(defaultExtension) + ret, _, _ := syscall.Syscall(vtbl.SetDefaultExtension, + 1, + uintptr(objPtr), + uintptr(unsafe.Pointer(defaultExtensionPtr)), + 0) + return hresultToError(ret) +} + +func (vtbl *iFileDialogVtbl) setFileName(objPtr unsafe.Pointer, fileName string) error { + fileNamePtr := ole.SysAllocString(fileName) + ret, _, _ := syscall.Syscall(vtbl.SetFileName, + 1, + uintptr(objPtr), + uintptr(unsafe.Pointer(fileNamePtr)), + 0) + return hresultToError(ret) +} + +func (vtbl *iFileDialogVtbl) setSelectedFileFilterIndex(objPtr unsafe.Pointer, index uint) error { + ret, _, _ := syscall.Syscall(vtbl.SetFileTypeIndex, + 1, + uintptr(objPtr), + uintptr(index+1), // SetFileTypeIndex counts from 1 + 0) + return hresultToError(ret) +} diff --git a/v2/internal/go-common-file-dialog/cfdutil/CFDUtil.go b/v2/internal/go-common-file-dialog/cfdutil/CFDUtil.go new file mode 100644 index 000000000..bde52d743 --- /dev/null +++ b/v2/internal/go-common-file-dialog/cfdutil/CFDUtil.go @@ -0,0 +1,45 @@ +package cfdutil + +import ( + "github.com/wailsapp/wails/v2/internal/go-common-file-dialog/cfd" +) + +// TODO doc +func ShowOpenFileDialog(config cfd.DialogConfig) (string, error) { + dialog, err := cfd.NewOpenFileDialog(config) + if err != nil { + return "", err + } + defer dialog.Release() + return dialog.ShowAndGetResult() +} + +// TODO doc +func ShowOpenMultipleFilesDialog(config cfd.DialogConfig) ([]string, error) { + dialog, err := cfd.NewOpenMultipleFilesDialog(config) + if err != nil { + return nil, err + } + defer dialog.Release() + return dialog.ShowAndGetResults() +} + +// TODO doc +func ShowPickFolderDialog(config cfd.DialogConfig) (string, error) { + dialog, err := cfd.NewSelectFolderDialog(config) + if err != nil { + return "", err + } + defer dialog.Release() + return dialog.ShowAndGetResult() +} + +// TODO doc +func ShowSaveFileDialog(config cfd.DialogConfig) (string, error) { + dialog, err := cfd.NewSaveFileDialog(config) + if err != nil { + return "", err + } + defer dialog.Release() + return dialog.ShowAndGetResult() +} diff --git a/v2/internal/go-common-file-dialog/util/util.go b/v2/internal/go-common-file-dialog/util/util.go new file mode 100644 index 000000000..723fbedc0 --- /dev/null +++ b/v2/internal/go-common-file-dialog/util/util.go @@ -0,0 +1,10 @@ +package util + +import ( + "github.com/go-ole/go-ole" + "github.com/google/uuid" +) + +func StringToUUID(str string) *ole.GUID { + return ole.NewGUID(uuid.NewSHA1(uuid.Nil, []byte(str)).String()) +} diff --git a/v2/internal/go-common-file-dialog/util/util_test.go b/v2/internal/go-common-file-dialog/util/util_test.go new file mode 100644 index 000000000..2e8ffeb05 --- /dev/null +++ b/v2/internal/go-common-file-dialog/util/util_test.go @@ -0,0 +1,14 @@ +package util + +import ( + "github.com/go-ole/go-ole" + "testing" +) + +func TestStringToUUID(t *testing.T) { + generated := *StringToUUID("TestTestTest") + expected := *ole.NewGUID("7933985F-2C87-5A5B-A26E-5D0326829AC2") + if generated != expected { + t.Errorf("not equal. expected %s, found %s", expected.String(), generated.String()) + } +} diff --git a/v2/internal/gomod/gomod_test.go b/v2/internal/gomod/gomod_test.go index 5173a2230..43907c4a2 100644 --- a/v2/internal/gomod/gomod_test.go +++ b/v2/internal/gomod/gomod_test.go @@ -28,7 +28,6 @@ require ( github.com/klauspost/compress v1.12.2 // indirect github.com/leaanthony/debme v1.2.1 // indirect github.com/leaanthony/go-ansi-parser v1.0.1 // indirect - github.com/leaanthony/go-common-file-dialog v1.0.3 // indirect github.com/wailsapp/wails/v2/internal/frontend/desktop/windows/go-webview2 v0.0.0-20211007092718-65d2f028ef2d // indirect github.com/leaanthony/gosod v1.0.3 // indirect github.com/leaanthony/slicer v1.5.0 // indirect @@ -91,7 +90,7 @@ require ( github.com/klauspost/compress v1.12.2 // indirect github.com/leaanthony/debme v1.2.1 // indirect github.com/leaanthony/go-ansi-parser v1.0.1 // indirect - github.com/leaanthony/go-common-file-dialog v1.0.3 // indirect + github.com/wailsapp/wails/v2/internal/go-common-file-dialog v1.0.3 // indirect github.com/wailsapp/wails/v2/internal/frontend/desktop/windows/go-webview2 v0.0.0-20211007092718-65d2f028ef2d // indirect github.com/leaanthony/gosod v1.0.3 // indirect github.com/leaanthony/slicer v1.5.0 // indirect @@ -132,7 +131,7 @@ require ( github.com/klauspost/compress v1.12.2 // indirect github.com/leaanthony/debme v1.2.1 // indirect github.com/leaanthony/go-ansi-parser v1.0.1 // indirect - github.com/leaanthony/go-common-file-dialog v1.0.3 // indirect + github.com/wailsapp/wails/v2/internal/go-common-file-dialog v1.0.3 // indirect github.com/wailsapp/wails/v2/internal/frontend/desktop/windows/go-webview2 v0.0.0-20211007092718-65d2f028ef2d // indirect github.com/leaanthony/gosod v1.0.3 // indirect github.com/leaanthony/slicer v1.5.0 // indirect @@ -172,7 +171,7 @@ require ( github.com/klauspost/compress v1.12.2 // indirect github.com/leaanthony/debme v1.2.1 // indirect github.com/leaanthony/go-ansi-parser v1.0.1 // indirect - github.com/leaanthony/go-common-file-dialog v1.0.3 // indirect + github.com/wailsapp/wails/v2/internal/go-common-file-dialog v1.0.3 // indirect github.com/wailsapp/wails/v2/internal/frontend/desktop/windows/go-webview2 v0.0.0-20211007092718-65d2f028ef2d // indirect github.com/leaanthony/gosod v1.0.3 // indirect github.com/leaanthony/slicer v1.5.0 // indirect @@ -213,7 +212,7 @@ require ( github.com/klauspost/compress v1.12.2 // indirect github.com/leaanthony/debme v1.2.1 // indirect github.com/leaanthony/go-ansi-parser v1.0.1 // indirect - github.com/leaanthony/go-common-file-dialog v1.0.3 // indirect + github.com/wailsapp/wails/v2/internal/go-common-file-dialog v1.0.3 // indirect github.com/wailsapp/wails/v2/internal/frontend/desktop/windows/go-webview2 v0.0.0-20211007092718-65d2f028ef2d // indirect github.com/leaanthony/gosod v1.0.3 // indirect github.com/leaanthony/slicer v1.5.0 // indirect @@ -254,7 +253,7 @@ require ( github.com/klauspost/compress v1.12.2 // indirect github.com/leaanthony/debme v1.2.1 // indirect github.com/leaanthony/go-ansi-parser v1.0.1 // indirect - github.com/leaanthony/go-common-file-dialog v1.0.3 // indirect + github.com/wailsapp/wails/v2/internal/go-common-file-dialog v1.0.3 // indirect github.com/wailsapp/wails/v2/internal/frontend/desktop/windows/go-webview2 v0.0.0-20211007092718-65d2f028ef2d // indirect github.com/leaanthony/gosod v1.0.3 // indirect github.com/leaanthony/slicer v1.5.0 // indirect @@ -297,7 +296,7 @@ require ( github.com/klauspost/compress v1.12.2 // indirect github.com/leaanthony/debme v1.2.1 // indirect github.com/leaanthony/go-ansi-parser v1.0.1 // indirect - github.com/leaanthony/go-common-file-dialog v1.0.3 // indirect + github.com/wailsapp/wails/v2/internal/go-common-file-dialog v1.0.3 // indirect github.com/wailsapp/wails/v2/internal/frontend/desktop/windows/go-webview2 v0.0.0-20211007092718-65d2f028ef2d // indirect github.com/leaanthony/gosod v1.0.3 // indirect github.com/leaanthony/slicer v1.5.0 // indirect @@ -341,7 +340,7 @@ require ( github.com/klauspost/compress v1.12.2 // indirect github.com/leaanthony/debme v1.2.1 // indirect github.com/leaanthony/go-ansi-parser v1.0.1 // indirect - github.com/leaanthony/go-common-file-dialog v1.0.3 // indirect + github.com/wailsapp/wails/v2/internal/go-common-file-dialog v1.0.3 // indirect github.com/wailsapp/wails/v2/internal/frontend/desktop/windows/go-webview2 v0.0.0-20211007092718-65d2f028ef2d // indirect github.com/leaanthony/gosod v1.0.3 // indirect github.com/leaanthony/slicer v1.5.0 // indirect @@ -443,7 +442,7 @@ require ( github.com/klauspost/compress v1.12.2 // indirect github.com/leaanthony/debme v1.2.1 // indirect github.com/leaanthony/go-ansi-parser v1.0.1 // indirect - github.com/leaanthony/go-common-file-dialog v1.0.3 // indirect + github.com/wailsapp/wails/v2/internal/go-common-file-dialog v1.0.3 // indirect github.com/wailsapp/wails/v2/internal/frontend/desktop/windows/go-webview2 v0.0.0-20211007092718-65d2f028ef2d // indirect github.com/leaanthony/gosod v1.0.3 // indirect github.com/leaanthony/slicer v1.5.0 // indirect @@ -484,7 +483,7 @@ require ( github.com/klauspost/compress v1.12.2 // indirect github.com/leaanthony/debme v1.2.1 // indirect github.com/leaanthony/go-ansi-parser v1.0.1 // indirect - github.com/leaanthony/go-common-file-dialog v1.0.3 // indirect + github.com/wailsapp/wails/v2/internal/go-common-file-dialog v1.0.3 // indirect github.com/wailsapp/wails/v2/internal/frontend/desktop/windows/go-webview2 v0.0.0-20211007092718-65d2f028ef2d // indirect github.com/leaanthony/gosod v1.0.3 // indirect github.com/leaanthony/slicer v1.5.0 // indirect @@ -525,7 +524,7 @@ require ( github.com/klauspost/compress v1.12.2 // indirect github.com/leaanthony/debme v1.2.1 // indirect github.com/leaanthony/go-ansi-parser v1.0.1 // indirect - github.com/leaanthony/go-common-file-dialog v1.0.3 // indirect + github.com/wailsapp/wails/v2/internal/go-common-file-dialog v1.0.3 // indirect github.com/wailsapp/wails/v2/internal/frontend/desktop/windows/go-webview2 v0.0.0-20211007092718-65d2f028ef2d // indirect github.com/leaanthony/gosod v1.0.3 // indirect github.com/leaanthony/slicer v1.5.0 // indirect @@ -569,7 +568,7 @@ require ( github.com/klauspost/compress v1.12.2 // indirect github.com/leaanthony/debme v1.2.1 // indirect github.com/leaanthony/go-ansi-parser v1.0.1 // indirect - github.com/leaanthony/go-common-file-dialog v1.0.3 // indirect + github.com/wailsapp/wails/v2/internal/go-common-file-dialog v1.0.3 // indirect github.com/wailsapp/wails/v2/internal/frontend/desktop/windows/go-webview2 v0.0.0-20211007092718-65d2f028ef2d // indirect github.com/leaanthony/gosod v1.0.3 // indirect github.com/leaanthony/slicer v1.5.0 // indirect From cd162918d4b74d097d1e54df4b46ad5b325e81c6 Mon Sep 17 00:00:00 2001 From: Marcus Crane Date: Thu, 2 Jun 2022 23:59:33 +1200 Subject: [PATCH 33/87] Add showcase entry for October + update homepage carousel entry for October (#1436) * Add showcase entry for October * Update home carousel image for October --- website/docs/community/showcase/october.mdx | 11 +++++++++++ website/static/img/october.png | Bin 140176 -> 252371 bytes website/static/img/showcase/october.png | Bin 0 -> 306223 bytes 3 files changed, 11 insertions(+) create mode 100644 website/docs/community/showcase/october.mdx create mode 100644 website/static/img/showcase/october.png diff --git a/website/docs/community/showcase/october.mdx b/website/docs/community/showcase/october.mdx new file mode 100644 index 000000000..fbabff01e --- /dev/null +++ b/website/docs/community/showcase/october.mdx @@ -0,0 +1,11 @@ +# October + +

+
+

+ +[October](https://october.utf9k.net) is a small Wails application that makes it really easy to extract highlights from [Kobo eReaders](https://en.wikipedia.org/wiki/Kobo_eReader) and then forward them to [Readwise](https://readwise.io). + +It has a relatively small scope with all platform versions weighing in under 10MB, and that's without enabling [UPX compression](https://upx.github.io/)! + +In contrast, the author's previous attempts with Electron quickly bloated to several hundred megabytes. \ No newline at end of file diff --git a/website/static/img/october.png b/website/static/img/october.png index ba5052beea933431ee4fedbdcdaf8738f72a15c4..b25c1dc920ac454f66611090addf2c08145bf73c 100644 GIT binary patch literal 252371 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
=N;V6y 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

YA>^-ce1tx|>UJEy$eTR@f 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 literal 0 HcmV?d00001 From fe341741b5cc828373054cb978123c0e52efbbc1 Mon Sep 17 00:00:00 2001 From: Lea Anthony Date: Mon, 6 Jun 2022 00:41:44 -1000 Subject: [PATCH 34/87] Always use return in wrapped method (#1410) --- v2/internal/binding/generate.go | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/v2/internal/binding/generate.go b/v2/internal/binding/generate.go index 2d0af7253..782042ea9 100644 --- a/v2/internal/binding/generate.go +++ b/v2/internal/binding/generate.go @@ -44,11 +44,7 @@ func (b *Bindings) GenerateGoBindings(baseDir string) error { argsString := args.Join(", ") jsoutput.WriteString(fmt.Sprintf("\nexport function %s(%s) {", methodName, argsString)) jsoutput.WriteString("\n") - if methodDetails.OutputCount() == 0 { - jsoutput.WriteString(fmt.Sprintf(" window['go']['%s']['%s']['%s'](%s);", packageName, structName, methodName, argsString)) - } else { - jsoutput.WriteString(fmt.Sprintf(" return window['go']['%s']['%s']['%s'](%s);", packageName, structName, methodName, argsString)) - } + jsoutput.WriteString(fmt.Sprintf(" return window['go']['%s']['%s']['%s'](%s);", packageName, structName, methodName, argsString)) jsoutput.WriteString("\n") jsoutput.WriteString(fmt.Sprintf("}")) jsoutput.WriteString("\n") From 664f6a952c14f5ecb5623d4d1778fed988250828 Mon Sep 17 00:00:00 2001 From: stffabi Date: Wed, 8 Jun 2022 12:56:07 +0200 Subject: [PATCH 35/87] [v2, windows] Unlock OSThread after native calls have been finished (#1441) * [v2, windows] Remove unnecessary LockOSThread Form.Invoke makes sure the call is on the correct thread and does lock the OSThread during the call. * [v2, windows] Unlock OSThread after native calls have been finished This makes sure the OSThread can be reused by other go routines after a native call has been finished. Otherwise the OSThread will be destroyed as soon as the goroutine has finished. --- .../frontend/desktop/windows/frontend.go | 25 ++++++++++++++++--- 1 file changed, 21 insertions(+), 4 deletions(-) diff --git a/v2/internal/frontend/desktop/windows/frontend.go b/v2/internal/frontend/desktop/windows/frontend.go index c2a5716cf..1a3c0ced6 100644 --- a/v2/internal/frontend/desktop/windows/frontend.go +++ b/v2/internal/frontend/desktop/windows/frontend.go @@ -97,7 +97,6 @@ func (f *Frontend) WindowReload() { } func (f *Frontend) WindowSetSystemDefaultTheme() { - runtime.LockOSThread() f.mainWindow.frontendOptions.Windows.Theme = windows.SystemDefault f.mainWindow.Invoke(func() { f.mainWindow.updateTheme() @@ -105,7 +104,6 @@ func (f *Frontend) WindowSetSystemDefaultTheme() { } func (f *Frontend) WindowSetLightTheme() { - runtime.LockOSThread() if f.mainWindow.frontendOptions != nil && f.mainWindow.frontendOptions.Windows != nil { f.mainWindow.frontendOptions.Windows.Theme = windows.Light f.mainWindow.Invoke(func() { @@ -115,7 +113,6 @@ func (f *Frontend) WindowSetLightTheme() { } func (f *Frontend) WindowSetDarkTheme() { - runtime.LockOSThread() if f.mainWindow.frontendOptions != nil && f.mainWindow.frontendOptions.Windows != nil { f.mainWindow.frontendOptions.Windows.Theme = windows.Dark f.mainWindow.Invoke(func() { @@ -176,35 +173,42 @@ func (f *Frontend) Run(ctx context.Context) error { func (f *Frontend) WindowCenter() { runtime.LockOSThread() + defer runtime.UnlockOSThread() f.mainWindow.Center() } func (f *Frontend) WindowSetPosition(x, y int) { runtime.LockOSThread() + defer runtime.UnlockOSThread() f.mainWindow.SetPos(x, y) } func (f *Frontend) WindowGetPosition() (int, int) { runtime.LockOSThread() + defer runtime.UnlockOSThread() return f.mainWindow.Pos() } func (f *Frontend) WindowSetSize(width, height int) { runtime.LockOSThread() + defer runtime.UnlockOSThread() f.mainWindow.SetSize(width, height) } func (f *Frontend) WindowGetSize() (int, int) { runtime.LockOSThread() + defer runtime.UnlockOSThread() return f.mainWindow.Size() } func (f *Frontend) WindowSetTitle(title string) { runtime.LockOSThread() + defer runtime.UnlockOSThread() f.mainWindow.SetText(title) } func (f *Frontend) WindowFullscreen() { runtime.LockOSThread() + defer runtime.UnlockOSThread() if f.frontendOptions.Frameless && f.frontendOptions.DisableResize == false { f.ExecJS("window.wails.flags.enableResize = false;") } @@ -217,6 +221,7 @@ func (f *Frontend) WindowReloadApp() { func (f *Frontend) WindowUnfullscreen() { runtime.LockOSThread() + defer runtime.UnlockOSThread() if f.frontendOptions.Frameless && f.frontendOptions.DisableResize == false { f.ExecJS("window.wails.flags.enableResize = true;") } @@ -225,15 +230,19 @@ func (f *Frontend) WindowUnfullscreen() { func (f *Frontend) WindowShow() { runtime.LockOSThread() + defer runtime.UnlockOSThread() f.ShowWindow() } func (f *Frontend) WindowHide() { runtime.LockOSThread() + defer runtime.UnlockOSThread() f.mainWindow.Hide() } + func (f *Frontend) WindowMaximise() { runtime.LockOSThread() + defer runtime.UnlockOSThread() if f.hasStarted { if !f.frontendOptions.DisableResize { f.mainWindow.Maximise() @@ -242,8 +251,10 @@ func (f *Frontend) WindowMaximise() { f.frontendOptions.WindowStartState = options.Maximised } } + func (f *Frontend) WindowToggleMaximise() { runtime.LockOSThread() + defer runtime.UnlockOSThread() if !f.hasStarted { return } @@ -256,32 +267,38 @@ func (f *Frontend) WindowToggleMaximise() { func (f *Frontend) WindowUnmaximise() { runtime.LockOSThread() + defer runtime.UnlockOSThread() f.mainWindow.Restore() } + func (f *Frontend) WindowMinimise() { runtime.LockOSThread() + defer runtime.UnlockOSThread() if f.hasStarted { f.mainWindow.Minimise() } else { f.frontendOptions.WindowStartState = options.Minimised } } + func (f *Frontend) WindowUnminimise() { runtime.LockOSThread() + defer runtime.UnlockOSThread() f.mainWindow.Restore() } func (f *Frontend) WindowSetMinSize(width int, height int) { runtime.LockOSThread() + defer runtime.UnlockOSThread() f.mainWindow.SetMinSize(width, height) } func (f *Frontend) WindowSetMaxSize(width int, height int) { runtime.LockOSThread() + defer runtime.UnlockOSThread() f.mainWindow.SetMaxSize(width, height) } func (f *Frontend) WindowSetRGBA(col *options.RGBA) { - runtime.LockOSThread() if col == nil { return } From cb4ba5bca63406aafb54966ad409298c9b716797 Mon Sep 17 00:00:00 2001 From: Lea Anthony Date: Sun, 12 Jun 2022 14:57:45 +1000 Subject: [PATCH 36/87] Add Typescript troubleshooting guide --- website/docs/guides/troubleshooting.mdx | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/website/docs/guides/troubleshooting.mdx b/website/docs/guides/troubleshooting.mdx index 1ab08d6f3..b355f2389 100644 --- a/website/docs/guides/troubleshooting.mdx +++ b/website/docs/guides/troubleshooting.mdx @@ -22,7 +22,7 @@ If your built application looks like this in finder:

-it's likely that your application's `info.plist` is invalid. Update the file in `build/.app/Contents/info.plist` +it''s likely that your application''s `info.plist` is invalid. Update the file in `build/.app/Contents/info.plist` and check if the data is valid, EG check the binary name is correct. To persist the changes, copy the file back to the `build/darwin` directory. @@ -56,7 +56,7 @@ window.go.main.App.TestFunc(msg, args).then((result) => { //without the 3 dots ``` Credit: https://github.com/wailsapp/wails/issues/1186 -## I'm having getting proxy errors when trying to install Wails +## I''m having getting proxy errors when trying to install Wails If you are getting errors like this: ``` @@ -68,4 +68,10 @@ The solution is to set up the proxy manually, eg: go env -w GO111MODULE=on go env -w GOPROXY=https://goproxy.cn,direct ``` -Source: https://github.com/wailsapp/wails/issues/1233 \ No newline at end of file +Source: https://github.com/wailsapp/wails/issues/1233 + +## The generated Typescript doesn''t have the correct types + +Sometimes the generated Typescript doesn''t have the correct types. To mitigate this, +it is possible to specify what types should be generated using the `ts_type` struct tag. For +more details, please read [this](https://github.com/tkrajina/typescriptify-golang-structs#custom-types). \ No newline at end of file From 1e54eb2eaf7ca20db41de6deb249d5cffa3cad5b Mon Sep 17 00:00:00 2001 From: Luken Date: Mon, 13 Jun 2022 00:53:49 +0200 Subject: [PATCH 37/87] Fix small typo in docs (#1449) --- website/docs/reference/runtime/intro.mdx | 2 +- .../current/reference/runtime/intro.mdx | 2 +- .../version-v2.0.0-beta.34/reference/runtime/intro.mdx | 2 +- .../version-v2.0.0-beta.35/reference/runtime/intro.mdx | 2 +- .../version-v2.0.0-beta.37/reference/runtime/intro.mdx | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/website/docs/reference/runtime/intro.mdx b/website/docs/reference/runtime/intro.mdx index b3616f689..583c84791 100644 --- a/website/docs/reference/runtime/intro.mdx +++ b/website/docs/reference/runtime/intro.mdx @@ -32,7 +32,7 @@ Quits the application. ### Environment -Go Signature: `Enviromnent(ctx context.Context) EnvironmentInfo` +Go Signature: `Environment(ctx context.Context) EnvironmentInfo` Returns details of the current environment. diff --git a/website/i18n/zh-Hans/docusaurus-plugin-content-docs/current/reference/runtime/intro.mdx b/website/i18n/zh-Hans/docusaurus-plugin-content-docs/current/reference/runtime/intro.mdx index 18de6ed93..08abbef9f 100644 --- a/website/i18n/zh-Hans/docusaurus-plugin-content-docs/current/reference/runtime/intro.mdx +++ b/website/i18n/zh-Hans/docusaurus-plugin-content-docs/current/reference/runtime/intro.mdx @@ -25,7 +25,7 @@ Go 方法签名: `Quit(ctx context.Context)` ### 环境 -Go 方法签名: `Enviromnent(ctx context.Context) EnvironmentInfo` +Go 方法签名: `Environment(ctx context.Context) EnvironmentInfo` 返回当前环境的详细信息。 diff --git a/website/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v2.0.0-beta.34/reference/runtime/intro.mdx b/website/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v2.0.0-beta.34/reference/runtime/intro.mdx index 18de6ed93..08abbef9f 100644 --- a/website/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v2.0.0-beta.34/reference/runtime/intro.mdx +++ b/website/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v2.0.0-beta.34/reference/runtime/intro.mdx @@ -25,7 +25,7 @@ Go 方法签名: `Quit(ctx context.Context)` ### 环境 -Go 方法签名: `Enviromnent(ctx context.Context) EnvironmentInfo` +Go 方法签名: `Environment(ctx context.Context) EnvironmentInfo` 返回当前环境的详细信息。 diff --git a/website/versioned_docs/version-v2.0.0-beta.35/reference/runtime/intro.mdx b/website/versioned_docs/version-v2.0.0-beta.35/reference/runtime/intro.mdx index b3616f689..583c84791 100644 --- a/website/versioned_docs/version-v2.0.0-beta.35/reference/runtime/intro.mdx +++ b/website/versioned_docs/version-v2.0.0-beta.35/reference/runtime/intro.mdx @@ -32,7 +32,7 @@ Quits the application. ### Environment -Go Signature: `Enviromnent(ctx context.Context) EnvironmentInfo` +Go Signature: `Environment(ctx context.Context) EnvironmentInfo` Returns details of the current environment. diff --git a/website/versioned_docs/version-v2.0.0-beta.37/reference/runtime/intro.mdx b/website/versioned_docs/version-v2.0.0-beta.37/reference/runtime/intro.mdx index b3616f689..583c84791 100644 --- a/website/versioned_docs/version-v2.0.0-beta.37/reference/runtime/intro.mdx +++ b/website/versioned_docs/version-v2.0.0-beta.37/reference/runtime/intro.mdx @@ -32,7 +32,7 @@ Quits the application. ### Environment -Go Signature: `Enviromnent(ctx context.Context) EnvironmentInfo` +Go Signature: `Environment(ctx context.Context) EnvironmentInfo` Returns details of the current environment. From 884773a2185a69979b3915fdb4566b82ae4309c0 Mon Sep 17 00:00:00 2001 From: stffabi Date: Thu, 16 Jun 2022 10:43:19 +0200 Subject: [PATCH 38/87] [v2, windows] Fix WebView2 minimum runtime version check (#1456) * [v2, windows] CompareBrowserVersions needs a int32 pointer Otherwise 4294967295 will be returned instead of -1 and the minimum version check can't detect an older version. So an older version than the minimum might be used and will result in AccessViolationExceptions. * [v2, windows] Use the correct minimum runtime version for SDK 1.0.992.28 The Webview2Loader.dll are already at version 1.0.992.28 for all platforms. --- .../go-webview2/pkg/edge/ICoreWebViewSettings.go | 13 +++++++------ .../windows/go-webview2/webviewloader/module.go | 13 ++++++------- v2/internal/wv2installer/wv2installer.go | 4 ++-- 3 files changed, 15 insertions(+), 15 deletions(-) diff --git a/v2/internal/frontend/desktop/windows/go-webview2/pkg/edge/ICoreWebViewSettings.go b/v2/internal/frontend/desktop/windows/go-webview2/pkg/edge/ICoreWebViewSettings.go index 701601bc0..a4cf31a32 100644 --- a/v2/internal/frontend/desktop/windows/go-webview2/pkg/edge/ICoreWebViewSettings.go +++ b/v2/internal/frontend/desktop/windows/go-webview2/pkg/edge/ICoreWebViewSettings.go @@ -1,8 +1,9 @@ package edge import ( - "golang.org/x/sys/windows" "unsafe" + + "golang.org/x/sys/windows" ) // ICoreWebviewSettings is the merged settings class @@ -27,17 +28,17 @@ type _ICoreWebViewSettingsVtbl struct { PutIsZoomControlEnabled ComProc GetIsBuiltInErrorPageEnabled ComProc PutIsBuiltInErrorPageEnabled ComProc - GetUserAgent ComProc + GetUserAgent ComProc // ICoreWebView2Settings2: SDK 1.0.864.35 PutUserAgent ComProc - GetAreBrowserAcceleratorKeysEnabled ComProc + GetAreBrowserAcceleratorKeysEnabled ComProc // ICoreWebView2Settings3: SDK 1.0.864.35 PutAreBrowserAcceleratorKeysEnabled ComProc - GetIsPasswordAutosaveEnabled ComProc + GetIsPasswordAutosaveEnabled ComProc // ICoreWebView2Settings4: SDK 1.0.902.49 PutIsPasswordAutosaveEnabled ComProc GetIsGeneralAutofillEnabled ComProc PutIsGeneralAutofillEnabled ComProc - GetIsPinchZoomEnabled ComProc + GetIsPinchZoomEnabled ComProc // ICoreWebView2Settings5: SDK 1.0.902.49 PutIsPinchZoomEnabled ComProc - GetIsSwipeNavigationEnabled ComProc + GetIsSwipeNavigationEnabled ComProc // ICoreWebView2Settings6: SDK 1.0.992.28 PutIsSwipeNavigationEnabled ComProc } diff --git a/v2/internal/frontend/desktop/windows/go-webview2/webviewloader/module.go b/v2/internal/frontend/desktop/windows/go-webview2/webviewloader/module.go index dfa795423..b25181795 100644 --- a/v2/internal/frontend/desktop/windows/go-webview2/webviewloader/module.go +++ b/v2/internal/frontend/desktop/windows/go-webview2/webviewloader/module.go @@ -24,11 +24,10 @@ const ( ) // CompareBrowserVersions will compare the 2 given versions and return: -// -1 = v1 < v2 -// 0 = v1 == v2 -// 1 = v1 > v2 +// Less than zero: v1 < v2 +// zero: v1 == v2 +// Greater than zero: v1 > v2 func CompareBrowserVersions(v1 string, v2 string) (int, error) { - _v1, err := windows.UTF16PtrFromString(v1) if err != nil { return 0, err @@ -43,16 +42,16 @@ func CompareBrowserVersions(v1 string, v2 string) (int, error) { return 0, err } - var result int + var result int32 _, _, err = memCompareBrowserVersions.Call( uint64(uintptr(unsafe.Pointer(_v1))), uint64(uintptr(unsafe.Pointer(_v2))), uint64(uintptr(unsafe.Pointer(&result)))) if err != windows.ERROR_SUCCESS { - return result, err + return 0, err } - return result, nil + return int(result), nil } // GetInstalledVersion returns the installed version of the webview2 runtime. diff --git a/v2/internal/wv2installer/wv2installer.go b/v2/internal/wv2installer/wv2installer.go index e9daae886..d31a7a808 100644 --- a/v2/internal/wv2installer/wv2installer.go +++ b/v2/internal/wv2installer/wv2installer.go @@ -8,7 +8,7 @@ import ( "github.com/wailsapp/wails/v2/pkg/options/windows" ) -const MinimumRuntimeVersion string = "91.0.992.28" +const MinimumRuntimeVersion string = "94.0.992.31" // Webview2 SDK 1.0.992.28 type installationStatus int @@ -35,7 +35,7 @@ func Process(appoptions *options.App) (string, error) { if err != nil { return "", err } - updateRequired := compareResult == -1 + updateRequired := compareResult < 0 // Installed and does not require updating if !updateRequired { return installedVersion, nil From 41051e8848c03e7fcaa60446affbc555e56ef34d Mon Sep 17 00:00:00 2001 From: Andreas Wenk Date: Sat, 18 Jun 2022 01:24:19 +0200 Subject: [PATCH 39/87] fix the url to surge (#1460) fix the url to surge in the docs --- website/docs/community/showcase/surge.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/docs/community/showcase/surge.mdx b/website/docs/community/showcase/surge.mdx index 774e86e70..b1693a6de 100644 --- a/website/docs/community/showcase/surge.mdx +++ b/website/docs/community/showcase/surge.mdx @@ -5,5 +5,5 @@

-[Surge](https://surge.rule110.io/) is a p2p filesharing app designed to utilize blockchain technologies to enable 100% anonymous file transfers. Surge is end-to-end encrypted, decentralized and open source. +[Surge](https://getsurge.io/) is a p2p filesharing app designed to utilize blockchain technologies to enable 100% anonymous file transfers. Surge is end-to-end encrypted, decentralized and open source. From 9a01c757bd99cb646fda508e0cd4fa72e0a19aec Mon Sep 17 00:00:00 2001 From: Abtin Date: Fri, 17 Jun 2022 19:26:22 -0400 Subject: [PATCH 40/87] Fix apt command syntax (#1458) (#1461) --- v2/internal/system/packagemanager/apt.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/v2/internal/system/packagemanager/apt.go b/v2/internal/system/packagemanager/apt.go index a01c8b03d..a650c754f 100644 --- a/v2/internal/system/packagemanager/apt.go +++ b/v2/internal/system/packagemanager/apt.go @@ -65,7 +65,7 @@ func (a *Apt) PackageInstalled(pkg *Package) (bool, error) { if pkg.SystemPackage == false { return false, nil } - cmd := exec.Command("apt", "-qq", "list", pkg.Name) + cmd := exec.Command("apt", "list", "-qq", pkg.Name) var stdo, stde bytes.Buffer cmd.Stdout = &stdo cmd.Stderr = &stde @@ -79,7 +79,7 @@ func (a *Apt) PackageAvailable(pkg *Package) (bool, error) { if pkg.SystemPackage == false { return false, nil } - stdout, _, err := shell.RunCommand(".", "apt", "-qq", "list", pkg.Name) + stdout, _, err := shell.RunCommand(".", "apt", "list", "-qq", pkg.Name) // We add a space to ensure we get a full match, not partial match output := a.removeEscapeSequences(stdout) installed := strings.HasPrefix(output, pkg.Name) From d77c556c4e29f4ab8cab3e2b205d2eaebe63a468 Mon Sep 17 00:00:00 2001 From: Lea Anthony Date: Sat, 18 Jun 2022 15:31:21 +1000 Subject: [PATCH 41/87] Update Sponsors --- README.md | 8 ++------ README.zh-Hans.md | 7 ++----- .../docusaurus-plugin-content-pages/credits.mdx | 10 ++++------ website/src/pages/credits.mdx | 10 ++++------ 4 files changed, 12 insertions(+), 23 deletions(-) diff --git a/README.md b/README.md index 2a037e481..ae4df55f2 100644 --- a/README.md +++ b/README.md @@ -158,9 +158,6 @@ This project is supported by these kind people / companies:
- - - @@ -194,10 +191,9 @@ This project is supported by these kind people / companies: - - + + - ## Installation diff --git a/README.zh-Hans.md b/README.zh-Hans.md index a7175cd31..84d9cbb70 100644 --- a/README.zh-Hans.md +++ b/README.zh-Hans.md @@ -168,9 +168,6 @@ Wails v2 已针对所有 3 个平台发布了 Beta 版。如果您有兴趣尝 - - - @@ -204,8 +201,8 @@ Wails v2 已针对所有 3 个平台发布了 Beta 版。如果您有兴趣尝 - - + + diff --git a/website/i18n/zh-Hans/docusaurus-plugin-content-pages/credits.mdx b/website/i18n/zh-Hans/docusaurus-plugin-content-pages/credits.mdx index d2380484a..65f9e80f6 100644 --- a/website/i18n/zh-Hans/docusaurus-plugin-content-pages/credits.mdx +++ b/website/i18n/zh-Hans/docusaurus-plugin-content-pages/credits.mdx @@ -65,9 +65,6 @@ - - - @@ -101,17 +98,18 @@ - - + + `, - }} + }} /> ## 贡献者 + import Contributors from "@wails/react-contributors"; diff --git a/website/src/pages/credits.mdx b/website/src/pages/credits.mdx index 49d5fb792..3c2ebdb11 100644 --- a/website/src/pages/credits.mdx +++ b/website/src/pages/credits.mdx @@ -65,9 +65,6 @@ - - - @@ -101,17 +98,18 @@ - - + + `, - }} + }} /> ## Contributors + import Contributors from "@wails/react-contributors"; From 9bd765d2c85a998a0d2b58ef1b31af159be51157 Mon Sep 17 00:00:00 2001 From: Lea Anthony Date: Sat, 18 Jun 2022 15:33:34 +1000 Subject: [PATCH 42/87] Update README.md --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index ae4df55f2..517f134ed 100644 --- a/README.md +++ b/README.md @@ -207,8 +207,8 @@ The installation instructions are on the [official website](https://wails.io/doc - Is this an alternative to Electron? Depends on your requirements. It's designed to make it easy for Go programmers to make lightweight desktop - applications or add a frontend to their existing applications. Whilst Wails does not currently offer hooks into native - elements such as menus, this may change in the future. + applications or add a frontend to their existing applications. Wails v2 does offer native elements such as menus + and dialogs so it is becoming a lightweight electron alternative. - Who is this project aimed at? From e4f2bfe69920c09b87a7285103ce2c0554b35f7b Mon Sep 17 00:00:00 2001 From: Lea Anthony Date: Sat, 18 Jun 2022 16:21:32 +1000 Subject: [PATCH 43/87] Bugfix: Windows start maximised Fixes #1462 --- v2/internal/frontend/desktop/windows/frontend.go | 4 +++- v2/internal/frontend/desktop/windows/win32/window.go | 5 +++++ v2/internal/frontend/desktop/windows/window.go | 5 ++++- 3 files changed, 12 insertions(+), 2 deletions(-) diff --git a/v2/internal/frontend/desktop/windows/frontend.go b/v2/internal/frontend/desktop/windows/frontend.go index 1a3c0ced6..6dc2f9a60 100644 --- a/v2/internal/frontend/desktop/windows/frontend.go +++ b/v2/internal/frontend/desktop/windows/frontend.go @@ -611,7 +611,9 @@ func (f *Frontend) navigationCompleted(sender *edge.ICoreWebView2, args *edge.IC func (f *Frontend) ShowWindow() { f.mainWindow.Invoke(func() { - f.mainWindow.Restore() + if f.mainWindow.IsMinimised() { + f.mainWindow.Restore() + } w32.SetForegroundWindow(f.mainWindow.Handle()) w32.SetFocus(f.mainWindow.Handle()) }) diff --git a/v2/internal/frontend/desktop/windows/win32/window.go b/v2/internal/frontend/desktop/windows/win32/window.go index 48263aaf2..ebcd3e389 100644 --- a/v2/internal/frontend/desktop/windows/win32/window.go +++ b/v2/internal/frontend/desktop/windows/win32/window.go @@ -11,6 +11,7 @@ import ( const ( WS_MAXIMIZE = 0x01000000 + WS_MINIMIZE = 0x20000000 GWL_STYLE = -16 ) @@ -36,6 +37,10 @@ func IsWindowMaximised(hwnd uintptr) bool { style := uint32(getWindowLong(hwnd, GWL_STYLE)) return style&WS_MAXIMIZE != 0 } +func IsWindowMinimised(hwnd uintptr) bool { + style := uint32(getWindowLong(hwnd, GWL_STYLE)) + return style&WS_MINIMIZE != 0 +} func dwmExtendFrameIntoClientArea(hwnd uintptr, margins *MARGINS) error { ret, _, _ := procDwmExtendFrameIntoClientArea.Call( diff --git a/v2/internal/frontend/desktop/windows/window.go b/v2/internal/frontend/desktop/windows/window.go index 36dc5bf25..3b9688567 100644 --- a/v2/internal/frontend/desktop/windows/window.go +++ b/v2/internal/frontend/desktop/windows/window.go @@ -230,5 +230,8 @@ func (w *Window) WndProc(msg uint32, wparam, lparam uintptr) uintptr { func (w *Window) IsMaximised() bool { return win32.IsWindowMaximised(w.Handle()) - +} + +func (w *Window) IsMinimised() bool { + return win32.IsWindowMinimised(w.Handle()) } From a7f1ea21ef8cfa697f519e7e8c7f33d426e7cc0e Mon Sep 17 00:00:00 2001 From: Lea Anthony Date: Sun, 19 Jun 2022 12:23:02 +1000 Subject: [PATCH 44/87] Bugfix: Better support for showing window --- .../frontend/desktop/windows/frontend.go | 43 +++++++++++++++---- .../frontend/desktop/windows/win32/consts.go | 1 + .../frontend/desktop/windows/win32/window.go | 40 +++++++++++++++++ .../frontend/desktop/windows/window.go | 1 + 4 files changed, 76 insertions(+), 9 deletions(-) diff --git a/v2/internal/frontend/desktop/windows/frontend.go b/v2/internal/frontend/desktop/windows/frontend.go index 6dc2f9a60..9f81dcede 100644 --- a/v2/internal/frontend/desktop/windows/frontend.go +++ b/v2/internal/frontend/desktop/windows/frontend.go @@ -7,6 +7,7 @@ import ( "context" "encoding/json" "fmt" + "github.com/wailsapp/wails/v2/internal/frontend/desktop/windows/win32" "io" "log" "net/http" @@ -589,30 +590,54 @@ func (f *Frontend) navigationCompleted(sender *edge.ICoreWebView2, args *edge.IC switch f.frontendOptions.WindowStartState { case options.Maximised: if !f.frontendOptions.DisableResize { - f.mainWindow.Maximise() + win32.ShowWindowMaximised(f.mainWindow.Handle()) } else { - f.mainWindow.Show() + win32.ShowWindow(f.mainWindow.Handle()) } - f.ShowWindow() - case options.Minimised: - f.mainWindow.Minimise() + win32.ShowWindowMinimised(f.mainWindow.Handle()) case options.Fullscreen: f.mainWindow.Fullscreen() - f.ShowWindow() + win32.ShowWindow(f.mainWindow.Handle()) default: if f.frontendOptions.Fullscreen { f.mainWindow.Fullscreen() } - f.ShowWindow() + win32.ShowWindow(f.mainWindow.Handle()) } + f.mainWindow.hasBeenShown = true + } func (f *Frontend) ShowWindow() { f.mainWindow.Invoke(func() { - if f.mainWindow.IsMinimised() { - f.mainWindow.Restore() + if !f.mainWindow.hasBeenShown { + f.mainWindow.hasBeenShown = true + switch f.frontendOptions.WindowStartState { + case options.Maximised: + if !f.frontendOptions.DisableResize { + win32.ShowWindowMaximised(f.mainWindow.Handle()) + } else { + win32.ShowWindow(f.mainWindow.Handle()) + } + case options.Minimised: + win32.RestoreWindow(f.mainWindow.Handle()) + case options.Fullscreen: + f.mainWindow.Fullscreen() + win32.ShowWindow(f.mainWindow.Handle()) + default: + if f.frontendOptions.Fullscreen { + f.mainWindow.Fullscreen() + } + win32.ShowWindow(f.mainWindow.Handle()) + } + } else { + if win32.IsWindowMinimised(f.mainWindow.Handle()) { + win32.RestoreWindow(f.mainWindow.Handle()) + } else { + win32.ShowWindow(f.mainWindow.Handle()) + } } w32.SetForegroundWindow(f.mainWindow.Handle()) w32.SetFocus(f.mainWindow.Handle()) diff --git a/v2/internal/frontend/desktop/windows/win32/consts.go b/v2/internal/frontend/desktop/windows/win32/consts.go index f84bb43ef..cc0a98a71 100644 --- a/v2/internal/frontend/desktop/windows/win32/consts.go +++ b/v2/internal/frontend/desktop/windows/win32/consts.go @@ -15,6 +15,7 @@ var ( moduser32 = syscall.NewLazyDLL("user32.dll") procSystemParametersInfo = moduser32.NewProc("SystemParametersInfoW") procGetWindowLong = moduser32.NewProc("GetWindowLongW") + procShowWindow = moduser32.NewProc("ShowWindow") ) var ( moddwmapi = syscall.NewLazyDLL("dwmapi.dll") diff --git a/v2/internal/frontend/desktop/windows/win32/window.go b/v2/internal/frontend/desktop/windows/win32/window.go index ebcd3e389..3ad15d3c1 100644 --- a/v2/internal/frontend/desktop/windows/win32/window.go +++ b/v2/internal/frontend/desktop/windows/win32/window.go @@ -16,6 +16,23 @@ const ( GWL_STYLE = -16 ) +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 +) + // http://msdn.microsoft.com/en-us/library/windows/desktop/bb773244.aspx type MARGINS struct { CxLeftWidth, CxRightWidth, CyTopHeight, CyBottomHeight int32 @@ -42,6 +59,21 @@ func IsWindowMinimised(hwnd uintptr) bool { return style&WS_MINIMIZE != 0 } +func RestoreWindow(hwnd uintptr) { + showWindow(hwnd, SW_RESTORE) +} + +func ShowWindow(hwnd uintptr) { + showWindow(hwnd, SW_SHOW) +} + +func ShowWindowMaximised(hwnd uintptr) { + showWindow(hwnd, SW_MAXIMIZE) +} +func ShowWindowMinimised(hwnd uintptr) { + showWindow(hwnd, SW_MINIMIZE) +} + func dwmExtendFrameIntoClientArea(hwnd uintptr, margins *MARGINS) error { ret, _, _ := procDwmExtendFrameIntoClientArea.Call( hwnd, @@ -61,3 +93,11 @@ func getWindowLong(hwnd uintptr, index int) int32 { return int32(ret) } + +func showWindow(hwnd uintptr, cmdshow int) bool { + ret, _, _ := procShowWindow.Call( + hwnd, + uintptr(cmdshow)) + + return ret != 0 +} diff --git a/v2/internal/frontend/desktop/windows/window.go b/v2/internal/frontend/desktop/windows/window.go index 3b9688567..6948cff5d 100644 --- a/v2/internal/frontend/desktop/windows/window.go +++ b/v2/internal/frontend/desktop/windows/window.go @@ -22,6 +22,7 @@ type Window struct { versionInfo *operatingsystem.WindowsVersionInfo isDarkMode bool isActive bool + hasBeenShown bool } func NewWindow(parent winc.Controller, appoptions *options.App, versionInfo *operatingsystem.WindowsVersionInfo) *Window { From 4dd1be5252bba39612c7478519148d7a96b24f3e Mon Sep 17 00:00:00 2001 From: Lea Anthony Date: Sun, 19 Jun 2022 13:38:25 +1000 Subject: [PATCH 45/87] Update sponsors --- README.md | 6 +++++- README.zh-Hans.md | 3 +++ .../zh-Hans/docusaurus-plugin-content-pages/credits.mdx | 4 ++++ website/src/pages/credits.mdx | 4 ++++ 4 files changed, 16 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 517f134ed..c3b5318b2 100644 --- a/README.md +++ b/README.md @@ -194,6 +194,10 @@ This project is supported by these kind people / companies: + + + + ## Installation @@ -208,7 +212,7 @@ The installation instructions are on the [official website](https://wails.io/doc Depends on your requirements. It's designed to make it easy for Go programmers to make lightweight desktop applications or add a frontend to their existing applications. Wails v2 does offer native elements such as menus - and dialogs so it is becoming a lightweight electron alternative. + and dialogs, so it is becoming a lightweight electron alternative. - Who is this project aimed at? diff --git a/README.zh-Hans.md b/README.zh-Hans.md index 84d9cbb70..1172e6114 100644 --- a/README.zh-Hans.md +++ b/README.zh-Hans.md @@ -204,6 +204,9 @@ Wails v2 已针对所有 3 个平台发布了 Beta 版。如果您有兴趣尝 + + + ## 安装 diff --git a/website/i18n/zh-Hans/docusaurus-plugin-content-pages/credits.mdx b/website/i18n/zh-Hans/docusaurus-plugin-content-pages/credits.mdx index 65f9e80f6..706a881df 100644 --- a/website/i18n/zh-Hans/docusaurus-plugin-content-pages/credits.mdx +++ b/website/i18n/zh-Hans/docusaurus-plugin-content-pages/credits.mdx @@ -101,6 +101,9 @@ + + + `, }} /> @@ -110,6 +113,7 @@ + import Contributors from "@wails/react-contributors"; diff --git a/website/src/pages/credits.mdx b/website/src/pages/credits.mdx index 3c2ebdb11..a7e9fe68b 100644 --- a/website/src/pages/credits.mdx +++ b/website/src/pages/credits.mdx @@ -101,6 +101,9 @@ + + + `, }} /> @@ -110,6 +113,7 @@ + import Contributors from "@wails/react-contributors"; From cb169611b14e7e6b8aa11881e6aca377c9b147ff Mon Sep 17 00:00:00 2001 From: Lea Anthony Date: Mon, 20 Jun 2022 17:47:13 +1000 Subject: [PATCH 46/87] Set Window Background colour if provided + debounce redraw option (#1466) * Set Window Background colour if provided. Added debounce option for Webview2 redraw on resize * [windows] Workaround resize flickering in frameless mode Co-authored-by: stffabi --- v2/go.mod | 1 + v2/go.sum | 2 + .../frontend/desktop/windows/frontend.go | 43 +++++++++++++------ .../frontend/desktop/windows/win32/consts.go | 6 +++ .../frontend/desktop/windows/win32/window.go | 20 +++++++++ .../frontend/desktop/windows/window.go | 14 +++++- v2/pkg/options/windows/windows.go | 4 ++ website/docs/reference/options.mdx | 9 ++++ 8 files changed, 84 insertions(+), 15 deletions(-) diff --git a/v2/go.mod b/v2/go.mod index f8e63331d..039cae5a7 100644 --- a/v2/go.mod +++ b/v2/go.mod @@ -42,6 +42,7 @@ require github.com/bitfield/script v0.19.0 require ( bitbucket.org/creachadair/shell v0.0.7 // indirect github.com/Microsoft/go-winio v0.4.16 // indirect + github.com/bep/debounce v1.2.1 // indirect github.com/emirpasic/gods v1.12.0 // indirect github.com/go-git/gcfg v1.5.0 // indirect github.com/go-ole/go-ole v1.2.6 // indirect diff --git a/v2/go.sum b/v2/go.sum index 090c749b6..8af980589 100644 --- a/v2/go.sum +++ b/v2/go.sum @@ -11,6 +11,8 @@ github.com/anmitsu/go-shlex v0.0.0-20161002113705-648efa622239 h1:kFOfPq6dUM1hTo github.com/anmitsu/go-shlex v0.0.0-20161002113705-648efa622239/go.mod h1:2FmKhYUyUczH0OGQWaF5ceTx0UBShxjsH6f8oGKYe2c= github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5 h1:0CwZNZbxp69SHPdPJAN/hZIm0C4OItdklCFmMRWYpio= github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5/go.mod h1:wHh0iHkYZB8zMSxRWpUBQtwG5a7fFgvEO+odwuTv2gs= +github.com/bep/debounce v1.2.1 h1:v67fRdBA9UQu2NhLFXrSg0Brw7CexQekrBwDMM8bzeY= +github.com/bep/debounce v1.2.1/go.mod h1:H8yggRPQKLUhUoqrJC1bO2xNya7vanpDl7xR3ISbCJ0= github.com/bitfield/script v0.19.0 h1:W24f+FQuPab9gXcW8bhcbo5qO8AtrXyu3XOnR4zhHN0= github.com/bitfield/script v0.19.0/go.mod h1:ana6F8YOSZ3ImT8SauIzuYSqXgFVkSUJ6kgja+WMmIY= github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= diff --git a/v2/internal/frontend/desktop/windows/frontend.go b/v2/internal/frontend/desktop/windows/frontend.go index 9f81dcede..0d8bdf376 100644 --- a/v2/internal/frontend/desktop/windows/frontend.go +++ b/v2/internal/frontend/desktop/windows/frontend.go @@ -7,7 +7,18 @@ import ( "context" "encoding/json" "fmt" + "github.com/bep/debounce" + "github.com/wailsapp/wails/v2/internal/binding" + "github.com/wailsapp/wails/v2/internal/frontend" + "github.com/wailsapp/wails/v2/internal/frontend/assetserver" + "github.com/wailsapp/wails/v2/internal/frontend/desktop/windows/go-webview2/pkg/edge" "github.com/wailsapp/wails/v2/internal/frontend/desktop/windows/win32" + "github.com/wailsapp/wails/v2/internal/frontend/desktop/windows/winc" + "github.com/wailsapp/wails/v2/internal/frontend/desktop/windows/winc/w32" + "github.com/wailsapp/wails/v2/internal/logger" + "github.com/wailsapp/wails/v2/internal/system/operatingsystem" + "github.com/wailsapp/wails/v2/pkg/options" + "github.com/wailsapp/wails/v2/pkg/options/windows" "io" "log" "net/http" @@ -17,17 +28,7 @@ import ( "strconv" "strings" "text/template" - - "github.com/wailsapp/wails/v2/internal/binding" - "github.com/wailsapp/wails/v2/internal/frontend" - "github.com/wailsapp/wails/v2/internal/frontend/assetserver" - "github.com/wailsapp/wails/v2/internal/frontend/desktop/windows/go-webview2/pkg/edge" - "github.com/wailsapp/wails/v2/internal/frontend/desktop/windows/winc" - "github.com/wailsapp/wails/v2/internal/frontend/desktop/windows/winc/w32" - "github.com/wailsapp/wails/v2/internal/logger" - "github.com/wailsapp/wails/v2/internal/system/operatingsystem" - "github.com/wailsapp/wails/v2/pkg/options" - "github.com/wailsapp/wails/v2/pkg/options/windows" + "time" ) const startURL = "http://wails.localhost/" @@ -54,7 +55,8 @@ type Frontend struct { hasStarted bool // Windows build number - versionInfo *operatingsystem.WindowsVersionInfo + versionInfo *operatingsystem.WindowsVersionInfo + resizeDebouncer func(f func()) } func NewFrontend(ctx context.Context, appoptions *options.App, myLogger *logger.Logger, appBindings *binding.Bindings, dispatcher frontend.Dispatcher) *Frontend { @@ -71,6 +73,12 @@ func NewFrontend(ctx context.Context, appoptions *options.App, myLogger *logger. versionInfo: versionInfo, } + if appoptions.Windows != nil { + if appoptions.Windows.ResizeDebounceMS > 0 { + result.resizeDebouncer = debounce.New(time.Duration(appoptions.Windows.ResizeDebounceMS) * time.Millisecond) + } + } + // We currently can't use wails://wails/ as other platforms do, therefore we map the assets sever onto the following url. result.startURL, _ = url.Parse(startURL) @@ -151,7 +159,15 @@ func (f *Frontend) Run(ctx context.Context) error { } } - f.chromium.Resize() + if f.resizeDebouncer != nil { + f.resizeDebouncer(func() { + f.mainWindow.Invoke(func() { + f.chromium.Resize() + }) + }) + } else { + f.chromium.Resize() + } }) mainWindow.OnClose().Bind(func(arg *winc.Event) { @@ -329,6 +345,7 @@ func (f *Frontend) WindowSetRGBA(col *options.RGBA) { log.Fatal(err) } }) + } func (f *Frontend) Quit() { diff --git a/v2/internal/frontend/desktop/windows/win32/consts.go b/v2/internal/frontend/desktop/windows/win32/consts.go index cc0a98a71..9b29bf2c1 100644 --- a/v2/internal/frontend/desktop/windows/win32/consts.go +++ b/v2/internal/frontend/desktop/windows/win32/consts.go @@ -15,6 +15,7 @@ var ( moduser32 = syscall.NewLazyDLL("user32.dll") procSystemParametersInfo = moduser32.NewProc("SystemParametersInfoW") procGetWindowLong = moduser32.NewProc("GetWindowLongW") + procSetClassLongPtr = moduser32.NewProc("SetClassLongPtrW") procShowWindow = moduser32.NewProc("ShowWindow") ) var ( @@ -22,6 +23,11 @@ var ( procDwmSetWindowAttribute = moddwmapi.NewProc("DwmSetWindowAttribute") procDwmExtendFrameIntoClientArea = moddwmapi.NewProc("DwmExtendFrameIntoClientArea") ) +var ( + modwingdi = syscall.NewLazyDLL("gdi32.dll") + procCreateSolidBrush = modwingdi.NewProc("CreateSolidBrush") +) + var windowsVersion, _ = operatingsystem.GetWindowsVersionInfo() func IsWindowsVersionAtLeast(major, minor, buildNumber int) bool { diff --git a/v2/internal/frontend/desktop/windows/win32/window.go b/v2/internal/frontend/desktop/windows/win32/window.go index 3ad15d3c1..3bd3f2399 100644 --- a/v2/internal/frontend/desktop/windows/win32/window.go +++ b/v2/internal/frontend/desktop/windows/win32/window.go @@ -4,6 +4,7 @@ package win32 import ( "fmt" + "github.com/wailsapp/wails/v2/internal/frontend/desktop/windows/winc" "log" "syscall" "unsafe" @@ -33,6 +34,10 @@ const ( SW_FORCEMINIMIZE = 11 ) +const ( + GCLP_HBRBACKGROUND int32 = -10 +) + // http://msdn.microsoft.com/en-us/library/windows/desktop/bb773244.aspx type MARGINS struct { CxLeftWidth, CxRightWidth, CyTopHeight, CyBottomHeight int32 @@ -74,6 +79,12 @@ func ShowWindowMinimised(hwnd uintptr) { showWindow(hwnd, SW_MINIMIZE) } +func SetBackgroundColour(hwnd uintptr, r, g, b uint8) { + col := winc.RGB(r, g, b) + hbrush, _, _ := procCreateSolidBrush.Call(uintptr(col)) + setClassLongPtr(hwnd, GCLP_HBRBACKGROUND, hbrush) +} + func dwmExtendFrameIntoClientArea(hwnd uintptr, margins *MARGINS) error { ret, _, _ := procDwmExtendFrameIntoClientArea.Call( hwnd, @@ -86,6 +97,15 @@ func dwmExtendFrameIntoClientArea(hwnd uintptr, margins *MARGINS) error { return nil } +func setClassLongPtr(hwnd uintptr, param int32, val uintptr) bool { + ret, _, _ := procSetClassLongPtr.Call( + hwnd, + uintptr(param), + val, + ) + return ret != 0 +} + func getWindowLong(hwnd uintptr, index int) int32 { ret, _, _ := procGetWindowLong.Call( hwnd, diff --git a/v2/internal/frontend/desktop/windows/window.go b/v2/internal/frontend/desktop/windows/window.go index 6948cff5d..3464e4da9 100644 --- a/v2/internal/frontend/desktop/windows/window.go +++ b/v2/internal/frontend/desktop/windows/window.go @@ -3,9 +3,10 @@ package windows import ( + "unsafe" + "github.com/wailsapp/wails/v2/internal/frontend/desktop/windows/win32" "github.com/wailsapp/wails/v2/internal/system/operatingsystem" - "unsafe" "github.com/wailsapp/wails/v2/internal/frontend/desktop/windows/winc" "github.com/wailsapp/wails/v2/internal/frontend/desktop/windows/winc/w32" @@ -66,6 +67,10 @@ func NewWindow(parent winc.Controller, appoptions *options.App, versionInfo *ope } } + if appoptions.RGBA != nil { + win32.SetBackgroundColour(result.Handle(), appoptions.RGBA.R, appoptions.RGBA.G, appoptions.RGBA.B) + } + result.SetSize(appoptions.Width, appoptions.Height) result.SetText(appoptions.Title) result.EnableSizable(!appoptions.DisableResize) @@ -191,6 +196,8 @@ func (w *Window) WndProc(msg uint32, wparam, lparam uintptr) uintptr { // This hides the titlebar and also disables the resizing from user interaction because the standard frame is not // shown. We still need the WS_THICKFRAME style to enable resizing from the frontend. if wparam != 0 { + rgrc := (*w32.RECT)(unsafe.Pointer(lparam)) + style := uint32(w32.GetWindowLong(w.Handle(), w32.GWL_STYLE)) if style&w32.WS_MAXIMIZE != 0 { // If the window is maximized we must adjust the client area to the work area of the monitor. Otherwise @@ -200,7 +207,6 @@ func (w *Window) WndProc(msg uint32, wparam, lparam uintptr) uintptr { var monitorInfo w32.MONITORINFO monitorInfo.CbSize = uint32(unsafe.Sizeof(monitorInfo)) if w32.GetMonitorInfo(monitor, &monitorInfo) { - rgrc := (*w32.RECT)(unsafe.Pointer(lparam)) *rgrc = monitorInfo.RcWork maxWidth := w.frontendOptions.MaxWidth @@ -220,6 +226,10 @@ func (w *Window) WndProc(msg uint32, wparam, lparam uintptr) uintptr { } } } + } else { + // This is needed to workaround the resize flickering in frameless mode with WindowDecorations + // See: https://stackoverflow.com/a/6558508 + rgrc.Bottom -= 1 } return 0 diff --git a/v2/pkg/options/windows/windows.go b/v2/pkg/options/windows/windows.go index fb80cee16..da1db640d 100644 --- a/v2/pkg/options/windows/windows.go +++ b/v2/pkg/options/windows/windows.go @@ -82,6 +82,10 @@ type Options struct { // User messages that can be customised Messages *Messages + + // ResizeDebounceMS is the amount of time to debounce redraws of webview2 + // when resizing the window + ResizeDebounceMS uint16 } func DefaultMessages() *Messages { diff --git a/website/docs/reference/options.mdx b/website/docs/reference/options.mdx index eb3177633..288075222 100644 --- a/website/docs/reference/options.mdx +++ b/website/docs/reference/options.mdx @@ -511,6 +511,15 @@ Type: `*windows.Messages` A struct of strings used by the webview2 installer if a valid webview2 runtime is not found. Customise this for any language you choose to support. +### ResizeDebounceMS + +Name: ResizeDebounceMS + +Type: uint16 + +ResizeDebounceMS is the amount of time to debounce redraws of webview2 when resizing the window. +The default value (0) will perform redraws as fast as it can. + ## Mac Specific Options ### TitleBar From c4771003742b679d5dd5a7e90e7cb3e8a05b5d39 Mon Sep 17 00:00:00 2001 From: Lea Anthony Date: Tue, 21 Jun 2022 19:47:05 +1000 Subject: [PATCH 47/87] Add `BackgroundColour` and deprecate `RGBA` (#1475) --- .../generate/template/base/main.tmpl.go | 2 +- .../templates/generate/plain/main.tmpl.go | 2 +- .../templates/templates/plain/main.tmpl.go | 2 +- v2/internal/frontend/desktop/darwin/window.go | 4 +-- v2/internal/frontend/desktop/linux/window.go | 2 +- .../frontend/desktop/windows/frontend.go | 2 +- .../frontend/desktop/windows/window.go | 4 +-- v2/internal/menumanager/processedMenu.go | 2 +- v2/pkg/options/options.go | 32 ++++++++++--------- v2/wails.go | 9 ++++++ website/docs/reference/options.mdx | 12 +++---- 11 files changed, 42 insertions(+), 31 deletions(-) diff --git a/v2/cmd/wails/internal/commands/generate/template/base/main.tmpl.go b/v2/cmd/wails/internal/commands/generate/template/base/main.tmpl.go index c7740ebd0..9c15b8740 100644 --- a/v2/cmd/wails/internal/commands/generate/template/base/main.tmpl.go +++ b/v2/cmd/wails/internal/commands/generate/template/base/main.tmpl.go @@ -35,7 +35,7 @@ func main() { Frameless: false, StartHidden: false, HideWindowOnClose: false, - RGBA: &options.RGBA{R: 255, G: 255, B: 255, A: 255}, + BackgroundColour: &options.RGBA{R: 255, G: 255, B: 255, A: 255}, Assets: assets, Menu: nil, Logger: nil, diff --git a/v2/cmd/wails/internal/commands/initialise/templates/generate/plain/main.tmpl.go b/v2/cmd/wails/internal/commands/initialise/templates/generate/plain/main.tmpl.go index 5a79b1fe7..c84f4b9cb 100644 --- a/v2/cmd/wails/internal/commands/initialise/templates/generate/plain/main.tmpl.go +++ b/v2/cmd/wails/internal/commands/initialise/templates/generate/plain/main.tmpl.go @@ -36,7 +36,7 @@ func main() { Frameless: false, StartHidden: false, HideWindowOnClose: false, - RGBA: &options.RGBA{R: 255, G: 255, B: 255, A: 255}, + BackgroundColour: &options.RGBA{R: 255, G: 255, B: 255, A: 255}, Assets: assets, Menu: nil, Logger: nil, diff --git a/v2/cmd/wails/internal/commands/initialise/templates/templates/plain/main.tmpl.go b/v2/cmd/wails/internal/commands/initialise/templates/templates/plain/main.tmpl.go index 5a79b1fe7..c84f4b9cb 100644 --- a/v2/cmd/wails/internal/commands/initialise/templates/templates/plain/main.tmpl.go +++ b/v2/cmd/wails/internal/commands/initialise/templates/templates/plain/main.tmpl.go @@ -36,7 +36,7 @@ func main() { Frameless: false, StartHidden: false, HideWindowOnClose: false, - RGBA: &options.RGBA{R: 255, G: 255, B: 255, A: 255}, + BackgroundColour: &options.RGBA{R: 255, G: 255, B: 255, A: 255}, Assets: assets, Menu: nil, Logger: nil, diff --git a/v2/internal/frontend/desktop/darwin/window.go b/v2/internal/frontend/desktop/darwin/window.go index ec6e20d46..ad1a66f2a 100644 --- a/v2/internal/frontend/desktop/darwin/window.go +++ b/v2/internal/frontend/desktop/darwin/window.go @@ -92,8 +92,8 @@ func NewWindow(frontendOptions *options.App, debugMode bool) *Window { context: unsafe.Pointer(context), } - if frontendOptions.RGBA != nil { - result.SetRGBA(frontendOptions.RGBA.R, frontendOptions.RGBA.G, frontendOptions.RGBA.B, frontendOptions.RGBA.A) + if frontendOptions.BackgroundColour != nil { + result.SetRGBA(frontendOptions.BackgroundColour.R, frontendOptions.BackgroundColour.G, frontendOptions.BackgroundColour.B, frontendOptions.BackgroundColour.A) } if frontendOptions.Mac != nil && frontendOptions.Mac.About != nil { diff --git a/v2/internal/frontend/desktop/linux/window.go b/v2/internal/frontend/desktop/linux/window.go index 47dc8233f..f115e7bc1 100644 --- a/v2/internal/frontend/desktop/linux/window.go +++ b/v2/internal/frontend/desktop/linux/window.go @@ -636,7 +636,7 @@ func NewWindow(appoptions *options.App, debug bool) *Window { } // Set background colour - RGBA := appoptions.RGBA + RGBA := appoptions.BackgroundColour result.SetRGBA(RGBA.R, RGBA.G, RGBA.B, RGBA.A) // Setup window diff --git a/v2/internal/frontend/desktop/windows/frontend.go b/v2/internal/frontend/desktop/windows/frontend.go index 0d8bdf376..f8ebe5d74 100644 --- a/v2/internal/frontend/desktop/windows/frontend.go +++ b/v2/internal/frontend/desktop/windows/frontend.go @@ -406,7 +406,7 @@ func (f *Frontend) setupChromium() { onFocus.Bind(f.onFocus) // Set background colour - f.WindowSetRGBA(f.frontendOptions.RGBA) + f.WindowSetRGBA(f.frontendOptions.BackgroundColour) chromium.SetGlobalPermission(edge.CoreWebView2PermissionStateAllow) chromium.AddWebResourceRequestedFilter("*", edge.COREWEBVIEW2_WEB_RESOURCE_CONTEXT_ALL) diff --git a/v2/internal/frontend/desktop/windows/window.go b/v2/internal/frontend/desktop/windows/window.go index 3464e4da9..386863a65 100644 --- a/v2/internal/frontend/desktop/windows/window.go +++ b/v2/internal/frontend/desktop/windows/window.go @@ -67,8 +67,8 @@ func NewWindow(parent winc.Controller, appoptions *options.App, versionInfo *ope } } - if appoptions.RGBA != nil { - win32.SetBackgroundColour(result.Handle(), appoptions.RGBA.R, appoptions.RGBA.G, appoptions.RGBA.B) + if appoptions.BackgroundColour != nil { + win32.SetBackgroundColour(result.Handle(), appoptions.BackgroundColour.R, appoptions.BackgroundColour.G, appoptions.BackgroundColour.B) } result.SetSize(appoptions.Width, appoptions.Height) diff --git a/v2/internal/menumanager/processedMenu.go b/v2/internal/menumanager/processedMenu.go index 2722f86cd..8d886e19e 100644 --- a/v2/internal/menumanager/processedMenu.go +++ b/v2/internal/menumanager/processedMenu.go @@ -70,7 +70,7 @@ func NewProcessedMenuItem(menuItemMap *MenuItemMap, menuItem *menu.MenuItem) *Pr Hidden: menuItem.Hidden, Checked: menuItem.Checked, SubMenu: nil, - //RGBA: menuItem.RGBA, + //BackgroundColour: menuItem.BackgroundColour, //FontSize: menuItem.FontSize, //FontName: menuItem.FontName, //Image: menuItem.Image, diff --git a/v2/pkg/options/options.go b/v2/pkg/options/options.go index 1e0b9dfca..c5e19ba38 100644 --- a/v2/pkg/options/options.go +++ b/v2/pkg/options/options.go @@ -41,18 +41,20 @@ type App struct { StartHidden bool HideWindowOnClose bool AlwaysOnTop bool - RGBA *RGBA - Assets fs.FS - AssetsHandler http.Handler - Menu *menu.Menu - Logger logger.Logger `json:"-"` - LogLevel logger.LogLevel - OnStartup func(ctx context.Context) `json:"-"` - OnDomReady func(ctx context.Context) `json:"-"` - OnShutdown func(ctx context.Context) `json:"-"` - OnBeforeClose func(ctx context.Context) (prevent bool) `json:"-"` - Bind []interface{} - WindowStartState WindowStartState + BackgroundColour *RGBA + // RGBA is deprecated. Please use BackgroundColour + RGBA *RGBA + Assets fs.FS + AssetsHandler http.Handler + Menu *menu.Menu + Logger logger.Logger `json:"-"` + LogLevel logger.LogLevel + OnStartup func(ctx context.Context) `json:"-"` + OnDomReady func(ctx context.Context) `json:"-"` + OnShutdown func(ctx context.Context) `json:"-"` + OnBeforeClose func(ctx context.Context) (prevent bool) `json:"-"` + Bind []interface{} + WindowStartState WindowStartState //ContextMenus []*menu.ContextMenu //TrayMenus []*menu.TrayMenu @@ -75,9 +77,9 @@ func MergeDefaults(appoptions *App) { log.Fatal(err) } - // DEfault colour. Doesn't work well with mergo - if appoptions.RGBA == nil { - appoptions.RGBA = &RGBA{ + // Default colour. Doesn't work well with mergo + if appoptions.BackgroundColour == nil { + appoptions.BackgroundColour = &RGBA{ R: 255, G: 255, B: 255, diff --git a/v2/wails.go b/v2/wails.go index 33d07a561..09d810ce3 100644 --- a/v2/wails.go +++ b/v2/wails.go @@ -10,6 +10,15 @@ import ( // Run creates an application based on the given config and executes it func Run(options *options.App) error { + if options.RGBA != nil { + println("---- WARNING ----") + println("The `RGBA` option has been deprecated. Please use `BackgroundColour`.") + + if options.BackgroundColour == nil { + options.BackgroundColour = options.RGBA + } + } + // Call an Init method manually err := Init() if err != nil { diff --git a/website/docs/reference/options.mdx b/website/docs/reference/options.mdx index 288075222..a15a468d2 100644 --- a/website/docs/reference/options.mdx +++ b/website/docs/reference/options.mdx @@ -27,7 +27,7 @@ func main() { MaxHeight: 1024, StartHidden: false, HideWindowOnClose: false, - RGBA: &options.RGBA{R: 0, G: 0, B: 0, A: 255}, + BackgroundColour: &options.RGBA{R: 0, G: 0, B: 0, A: 255}, AlwaysOnTop: false, Assets: assets, AssetsHandler: assetsHandler, @@ -196,14 +196,14 @@ Type: bool By default, closing the window will close the application. Setting this to `true` means closing the window will hide the window instead. -### RGBA +### BackgroundColour -Name: RGBA +Name: BackgroundColour Type: int (0xRRGGBBAA) Example: 0xFF000088 - Red at 50% transparency -This value is the RGBA value to set the window by default. +This value is the default background colour of the window. Default: 0xFFFFFFFF. ### AlwaysOnTop @@ -392,7 +392,7 @@ Name: WebviewIsTransparent Type: bool Setting this to `true` will make the webview background transparent when an alpha value of `0` is used. -This means that if you use `rgba(0,0,0,0)`, the host window will show through. +This means that if you use `rgba(0,0,0,0)` for `background-color` in your CSS, the host window will show through. Often combined with [WindowIsTranslucent](#WindowIsTranslucent) to make frosty-looking applications. ### WindowIsTranslucent @@ -545,7 +545,7 @@ Name: WebviewIsTransparent Type: bool Setting this to `true` will make the webview background transparent when an alpha value of `0` is used. -This means that if you use `rgba(0,0,0,0)`, the host window will show through. +This means that if you use `rgba(0,0,0,0)` for `background-color` in your CSS, the host window will show through. Often combined with [WindowIsTranslucent](#WindowIsTranslucent) to make frosty-looking applications. ### WindowIsTranslucent From 381909696bcda6538500535909f8c252f1171cc2 Mon Sep 17 00:00:00 2001 From: Lea Anthony Date: Wed, 22 Jun 2022 06:37:18 +1000 Subject: [PATCH 48/87] [Windows] Add Suspend/Resume callback support (#1474) * Add Suspend/Resume callback support * Fix comment --- .../frontend/desktop/windows/win32/window.go | 21 +++++++++++++++++++ .../frontend/desktop/windows/window.go | 18 +++++++++++++++- v2/pkg/options/windows/windows.go | 5 +++++ website/docs/reference/options.mdx | 18 ++++++++++++++++ 4 files changed, 61 insertions(+), 1 deletion(-) diff --git a/v2/internal/frontend/desktop/windows/win32/window.go b/v2/internal/frontend/desktop/windows/win32/window.go index 3bd3f2399..c5db085ff 100644 --- a/v2/internal/frontend/desktop/windows/win32/window.go +++ b/v2/internal/frontend/desktop/windows/win32/window.go @@ -38,6 +38,27 @@ const ( GCLP_HBRBACKGROUND int32 = -10 ) +// Power +const ( + // WM_POWERBROADCAST - Notifies applications that a power-management event has occurred. + WM_POWERBROADCAST = 536 + + // PBT_APMPOWERSTATUSCHANGE - Power status has changed. + PBT_APMPOWERSTATUSCHANGE = 10 + + // PBT_APMRESUMEAUTOMATIC -Operation is resuming automatically from a low-power state. This message is sent every time the system resumes. + PBT_APMRESUMEAUTOMATIC = 18 + + // PBT_APMRESUMESUSPEND - Operation is resuming from a low-power state. This message is sent after PBT_APMRESUMEAUTOMATIC if the resume is triggered by user input, such as pressing a key. + PBT_APMRESUMESUSPEND = 7 + + // PBT_APMSUSPEND - System is suspending operation. + PBT_APMSUSPEND = 4 + + // PBT_POWERSETTINGCHANGE - A power setting change event has been received. + PBT_POWERSETTINGCHANGE = 32787 +) + // http://msdn.microsoft.com/en-us/library/windows/desktop/bb773244.aspx type MARGINS struct { CxLeftWidth, CxRightWidth, CyTopHeight, CyBottomHeight int32 diff --git a/v2/internal/frontend/desktop/windows/window.go b/v2/internal/frontend/desktop/windows/window.go index 386863a65..3d530a96c 100644 --- a/v2/internal/frontend/desktop/windows/window.go +++ b/v2/internal/frontend/desktop/windows/window.go @@ -24,6 +24,8 @@ type Window struct { isDarkMode bool isActive bool hasBeenShown bool + OnSuspend func() + OnResume func() } func NewWindow(parent winc.Controller, appoptions *options.App, versionInfo *operatingsystem.WindowsVersionInfo) *Window { @@ -83,6 +85,8 @@ func NewWindow(parent winc.Controller, appoptions *options.App, versionInfo *ope result.updateTheme() if appoptions.Windows != nil { + result.OnSuspend = appoptions.Windows.OnSuspend + result.OnResume = appoptions.Windows.OnResume if appoptions.Windows.WindowIsTranslucent { // TODO: Migrate to win32 package if !win32.IsWindowsVersionAtLeast(10, 0, 22579) { @@ -144,6 +148,18 @@ func (w *Window) SetMaxSize(maxWidth int, maxHeight int) { func (w *Window) WndProc(msg uint32, wparam, lparam uintptr) uintptr { switch msg { + case win32.WM_POWERBROADCAST: + switch wparam { + case win32.PBT_APMSUSPEND: + if w.OnSuspend != nil { + w.OnSuspend() + } + case win32.PBT_APMRESUMEAUTOMATIC: + if w.OnResume != nil { + w.OnResume() + } + } + case w32.WM_SETTINGCHANGE: settingChanged := w32.UTF16PtrToString((*uint16)(unsafe.Pointer(lparam))) if settingChanged == "ImmersiveColorSet" { @@ -154,7 +170,7 @@ func (w *Window) WndProc(msg uint32, wparam, lparam uintptr) uintptr { w32.SetFocus(w.Handle()) case w32.WM_MOVE, w32.WM_MOVING: if w.notifyParentWindowPositionChanged != nil { - w.notifyParentWindowPositionChanged() + _ = w.notifyParentWindowPositionChanged() } case w32.WM_ACTIVATE: //if !w.frontendOptions.Frameless { diff --git a/v2/pkg/options/windows/windows.go b/v2/pkg/options/windows/windows.go index da1db640d..146d23d3a 100644 --- a/v2/pkg/options/windows/windows.go +++ b/v2/pkg/options/windows/windows.go @@ -86,6 +86,11 @@ type Options struct { // ResizeDebounceMS is the amount of time to debounce redraws of webview2 // when resizing the window ResizeDebounceMS uint16 + + // OnSuspend is called when Windows enters low power mode + OnSuspend func() + // OnResume is called when Windows resumes from low power mode + OnResume func() } func DefaultMessages() *Messages { diff --git a/website/docs/reference/options.mdx b/website/docs/reference/options.mdx index a15a468d2..96b4d0f17 100644 --- a/website/docs/reference/options.mdx +++ b/website/docs/reference/options.mdx @@ -520,6 +520,24 @@ Type: uint16 ResizeDebounceMS is the amount of time to debounce redraws of webview2 when resizing the window. The default value (0) will perform redraws as fast as it can. +### OnSuspend + +Name: OnSuspend + +Type: func() + +If set, this function will be called when windows initiates a switch to low power mode (suspend/hibernate) + +### OnResume + +Name: OnResume + +Type: func() + +If set, this function will be called when windows resumes from low power mode (suspend/hibernate) + + + ## Mac Specific Options ### TitleBar From 1687906376478f9814ab8e7c276ba01894ba92a8 Mon Sep 17 00:00:00 2001 From: Lea Anthony Date: Wed, 22 Jun 2022 08:34:41 +1000 Subject: [PATCH 49/87] Improve theme change at runtime (#1473) * Improve theme change at runtime * Handle change to dark mode * Refactor theme calculation * Ensure theme is updated for WM_ACTIVATE and WM_SETTINGCHANGE events --- .../frontend/desktop/windows/frontend.go | 19 ++---------- v2/internal/frontend/desktop/windows/theme.go | 31 +++++++++++-------- .../frontend/desktop/windows/window.go | 27 ++++++++++++++++ 3 files changed, 48 insertions(+), 29 deletions(-) diff --git a/v2/internal/frontend/desktop/windows/frontend.go b/v2/internal/frontend/desktop/windows/frontend.go index f8ebe5d74..2db1328cb 100644 --- a/v2/internal/frontend/desktop/windows/frontend.go +++ b/v2/internal/frontend/desktop/windows/frontend.go @@ -106,28 +106,15 @@ func (f *Frontend) WindowReload() { } func (f *Frontend) WindowSetSystemDefaultTheme() { - f.mainWindow.frontendOptions.Windows.Theme = windows.SystemDefault - f.mainWindow.Invoke(func() { - f.mainWindow.updateTheme() - }) + f.mainWindow.SetTheme(windows.SystemDefault) } func (f *Frontend) WindowSetLightTheme() { - if f.mainWindow.frontendOptions != nil && f.mainWindow.frontendOptions.Windows != nil { - f.mainWindow.frontendOptions.Windows.Theme = windows.Light - f.mainWindow.Invoke(func() { - f.mainWindow.updateTheme() - }) - } + f.mainWindow.SetTheme(windows.Light) } func (f *Frontend) WindowSetDarkTheme() { - if f.mainWindow.frontendOptions != nil && f.mainWindow.frontendOptions.Windows != nil { - f.mainWindow.frontendOptions.Windows.Theme = windows.Dark - f.mainWindow.Invoke(func() { - f.mainWindow.updateTheme() - }) - } + f.mainWindow.SetTheme(windows.Dark) } func (f *Frontend) Run(ctx context.Context) error { diff --git a/v2/internal/frontend/desktop/windows/theme.go b/v2/internal/frontend/desktop/windows/theme.go index 842d7480d..897133026 100644 --- a/v2/internal/frontend/desktop/windows/theme.go +++ b/v2/internal/frontend/desktop/windows/theme.go @@ -7,6 +7,12 @@ import ( func (w *Window) updateTheme() { + // Don't redraw theme if nothing has changed + if !w.themeChanged { + return + } + w.themeChanged = false + if win32.IsCurrentlyHighContrastMode() { return } @@ -14,25 +20,24 @@ func (w *Window) updateTheme() { if !win32.SupportsThemes() { return } - // Only process if there's a theme change - isDarkMode := win32.IsCurrentlyDarkMode() - w.isDarkMode = isDarkMode - // Default use system theme + var isDarkMode bool + switch w.theme { + case windows.SystemDefault: + isDarkMode = win32.IsCurrentlyDarkMode() + case windows.Dark: + isDarkMode = true + case windows.Light: + isDarkMode = false + } + win32.SetTheme(w.Handle(), isDarkMode) + + // Custom theme processing winOptions := w.frontendOptions.Windows var customTheme *windows.ThemeSettings if winOptions != nil { customTheme = winOptions.CustomTheme - if winOptions.Theme == windows.Dark { - isDarkMode = true - } - if winOptions.Theme == windows.Light { - isDarkMode = false - } } - - win32.SetTheme(w.Handle(), isDarkMode) - // Custom theme if win32.SupportsCustomThemes() && customTheme != nil { if w.isActive { diff --git a/v2/internal/frontend/desktop/windows/window.go b/v2/internal/frontend/desktop/windows/window.go index 3d530a96c..dce79438d 100644 --- a/v2/internal/frontend/desktop/windows/window.go +++ b/v2/internal/frontend/desktop/windows/window.go @@ -12,6 +12,7 @@ import ( "github.com/wailsapp/wails/v2/internal/frontend/desktop/windows/winc/w32" "github.com/wailsapp/wails/v2/pkg/menu" "github.com/wailsapp/wails/v2/pkg/options" + winoptions "github.com/wailsapp/wails/v2/pkg/options/windows" ) type Window struct { @@ -24,6 +25,11 @@ type Window struct { isDarkMode bool isActive bool hasBeenShown bool + + // Theme + theme winoptions.Theme + themeChanged bool + OnSuspend func() OnResume func() } @@ -37,6 +43,7 @@ func NewWindow(parent winc.Controller, appoptions *options.App, versionInfo *ope maxWidth: appoptions.MaxWidth, versionInfo: versionInfo, isActive: true, + themeChanged: true, } result.SetIsForm(true) @@ -73,6 +80,16 @@ func NewWindow(parent winc.Controller, appoptions *options.App, versionInfo *ope win32.SetBackgroundColour(result.Handle(), appoptions.BackgroundColour.R, appoptions.BackgroundColour.G, appoptions.BackgroundColour.B) } + if appoptions.Windows != nil { + result.theme = appoptions.Windows.Theme + } else { + result.theme = winoptions.SystemDefault + } + + if appoptions.BackgroundColour != nil { + win32.SetBackgroundColour(result.Handle(), appoptions.BackgroundColour.R, appoptions.BackgroundColour.G, appoptions.BackgroundColour.B) + } + result.SetSize(appoptions.Width, appoptions.Height) result.SetText(appoptions.Title) result.EnableSizable(!appoptions.DisableResize) @@ -163,6 +180,7 @@ func (w *Window) WndProc(msg uint32, wparam, lparam uintptr) uintptr { case w32.WM_SETTINGCHANGE: settingChanged := w32.UTF16PtrToString((*uint16)(unsafe.Pointer(lparam))) if settingChanged == "ImmersiveColorSet" { + w.themeChanged = true w.updateTheme() } return 0 @@ -174,6 +192,7 @@ func (w *Window) WndProc(msg uint32, wparam, lparam uintptr) uintptr { } case w32.WM_ACTIVATE: //if !w.frontendOptions.Frameless { + w.themeChanged = true if int(wparam) == w32.WA_INACTIVE { w.isActive = false w.updateTheme() @@ -262,3 +281,11 @@ func (w *Window) IsMaximised() bool { func (w *Window) IsMinimised() bool { return win32.IsWindowMinimised(w.Handle()) } + +func (w *Window) SetTheme(theme winoptions.Theme) { + w.theme = theme + w.themeChanged = true + w.Invoke(func() { + w.updateTheme() + }) +} From f8eac34212e2c9756c1023a6f885e9b23a2dc41a Mon Sep 17 00:00:00 2001 From: Lea Anthony Date: Wed, 22 Jun 2022 08:40:30 +1000 Subject: [PATCH 50/87] Bugfix: Don't stop if unable to remove temporary bindings build (#1465) --- v2/cmd/wails/internal/commands/generate/module.go | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/v2/cmd/wails/internal/commands/generate/module.go b/v2/cmd/wails/internal/commands/generate/module.go index d4b87f392..62d8257c7 100644 --- a/v2/cmd/wails/internal/commands/generate/module.go +++ b/v2/cmd/wails/internal/commands/generate/module.go @@ -50,10 +50,8 @@ func AddModuleCommand(app *clir.Cli, parent *clir.Command, w io.Writer) error { return fmt.Errorf("%s\n%s\n%s", stdout, stderr, err) } - err = os.Remove(filename) - if err != nil { - return err - } + // Best effort removal of temp file + _ = os.Remove(filename) return nil }) From 4493a05fb9c9cefa6c1c1d7c156ae4588a357ae1 Mon Sep 17 00:00:00 2001 From: stffabi Date: Wed, 22 Jun 2022 12:06:20 +0200 Subject: [PATCH 51/87] [v2] AssetsHandler remove retry logic in dev mode (#1479) --- v2/internal/frontend/assetserver/assethandler.go | 15 --------------- 1 file changed, 15 deletions(-) diff --git a/v2/internal/frontend/assetserver/assethandler.go b/v2/internal/frontend/assetserver/assethandler.go index d38494bc9..f30869c88 100644 --- a/v2/internal/frontend/assetserver/assethandler.go +++ b/v2/internal/frontend/assetserver/assethandler.go @@ -11,7 +11,6 @@ import ( "os" "path" "strings" - "time" "github.com/wailsapp/wails/v2/internal/fs" "github.com/wailsapp/wails/v2/internal/logger" @@ -55,11 +54,6 @@ func NewAssetHandler(ctx context.Context, options *options.App) (http.Handler, e result := &assetHandler{ fs: vfs, handler: options.AssetsHandler, - - // Retry the loading of missing files on the Assets if we are in dev mode (with an AssetDir) and - // if the user doesn't use the AssetsHandler. If AssetsHandler are in use we would defer - // every request to the handler for 5s which is not quite useful. - retryMissingFiles: ctx.Value("assetdir") != nil && (options.AssetsHandler == nil), } if _logger := ctx.Value("logger"); _logger != nil { @@ -112,15 +106,6 @@ func (d *assetHandler) serveFSFile(rw http.ResponseWriter, filename string) erro } file, err := d.fs.Open(filename) - if err != nil && d.retryMissingFiles { - for tries := 0; tries < 50; tries++ { - file, err = d.fs.Open(filename) - if err != nil { - time.Sleep(100 * time.Millisecond) - } - } - } - if err != nil { return err } From 91ed5940495145f5475a74ca0ed630d104bea5e8 Mon Sep 17 00:00:00 2001 From: Lea Anthony Date: Wed, 22 Jun 2022 20:46:00 +1000 Subject: [PATCH 52/87] Update feature request template --- .github/ISSUE_TEMPLATE/feature_request.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/ISSUE_TEMPLATE/feature_request.yml b/.github/ISSUE_TEMPLATE/feature_request.yml index 317b10cdd..292a039a2 100644 --- a/.github/ISSUE_TEMPLATE/feature_request.yml +++ b/.github/ISSUE_TEMPLATE/feature_request.yml @@ -7,6 +7,7 @@ body: - type: markdown attributes: value: | + Before opening a feature request, please check the [Roadmap](https://github.com/wailsapp/wails/discussions/1484) to see if it has already been requested. ***Please note: No new feature requests are being accepted for Wails v1*** - type: textarea From 72d019cb4834ad97534c5c103d9496326cf09c37 Mon Sep 17 00:00:00 2001 From: stffabi Date: Wed, 22 Jun 2022 12:50:45 +0200 Subject: [PATCH 53/87] [v2, windows] Pass the correct installationStatus to the webview installation strategy (#1483) Co-authored-by: Lea Anthony --- v2/internal/wv2installer/wv2installer.go | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/v2/internal/wv2installer/wv2installer.go b/v2/internal/wv2installer/wv2installer.go index d31a7a808..41e2beaaf 100644 --- a/v2/internal/wv2installer/wv2installer.go +++ b/v2/internal/wv2installer/wv2installer.go @@ -15,22 +15,22 @@ type installationStatus int const ( needsInstalling installationStatus = iota needsUpdating - installed ) func Process(appoptions *options.App) (string, error) { - messages := windows.DefaultMessages() if appoptions.Windows != nil && appoptions.Windows.Messages != nil { messages = appoptions.Windows.Messages } + installStatus := needsInstalling installedVersion, err := webviewloader.GetInstalledVersion() if err != nil { return "", err } + if installedVersion != "" { - installStatus = installed + installStatus = needsUpdating compareResult, err := webviewloader.CompareBrowserVersions(installedVersion, MinimumRuntimeVersion) if err != nil { return "", err @@ -40,7 +40,7 @@ func Process(appoptions *options.App) (string, error) { if !updateRequired { return installedVersion, nil } - } + return installedVersion, doInstallationStrategy(installStatus, messages) } From 072929689ce116e8659fca7655bb5c1450f783d8 Mon Sep 17 00:00:00 2001 From: chenxiao <290746987@qq.com> Date: Wed, 22 Jun 2022 18:55:02 +0800 Subject: [PATCH 54/87] feature: add runtime func WindowSetAlwaysOnTop (#1442) * feature: add runtime func WindowSetAlwaysOnTop * add runtime WindowSetUnalwaysOnTop * add JavaScript runtime method , docs update * WindowSetAlwaysOnTop(b bool) * Add AlwaysOnTop for MacOS Co-authored-by: Lea Anthony --- .../frontend/desktop/darwin/Application.h | 1 + .../frontend/desktop/darwin/Application.m | 7 + .../frontend/desktop/darwin/WailsContext.h | 1 + .../frontend/desktop/darwin/WailsContext.m | 8 + .../frontend/desktop/darwin/frontend.go | 3 + v2/internal/frontend/desktop/darwin/window.go | 4 + .../frontend/desktop/linux/frontend.go | 4 + .../frontend/desktop/windows/frontend.go | 5 + .../desktop/windows/winc/controlbase.go | 7 + v2/internal/frontend/devserver/devserver.go | 3 + v2/internal/frontend/dispatcher/window.go | 6 + v2/internal/frontend/frontend.go | 1 + .../frontend/runtime/desktop/window.js | 19 +- .../frontend/runtime/dev/package-lock.json | 810 +++++++++++++++++- v2/internal/frontend/runtime/ipc_websocket.js | 8 +- .../frontend/runtime/package-lock.json | 1 + v2/internal/frontend/runtime/package.json | 2 +- .../frontend/runtime/runtime_dev_desktop.js | 6 +- .../frontend/runtime/runtime_prod_desktop.js | 2 +- v2/pkg/runtime/window.go | 6 + website/docs/reference/runtime/window.mdx | 8 + 21 files changed, 902 insertions(+), 10 deletions(-) diff --git a/v2/internal/frontend/desktop/darwin/Application.h b/v2/internal/frontend/desktop/darwin/Application.h index 41423965a..606778765 100644 --- a/v2/internal/frontend/desktop/darwin/Application.h +++ b/v2/internal/frontend/desktop/darwin/Application.h @@ -23,6 +23,7 @@ void Run(void*, const char* url); void SetTitle(void* ctx, const char *title); void Center(void* ctx); void SetSize(void* ctx, int width, int height); +void SetAlwaysOnTop(void* ctx, int onTop); void SetMinSize(void* ctx, int width, int height); void SetMaxSize(void* ctx, int width, int height); void SetPosition(void* ctx, int x, int y); diff --git a/v2/internal/frontend/desktop/darwin/Application.m b/v2/internal/frontend/desktop/darwin/Application.m index da1ffac16..9ace230f8 100644 --- a/v2/internal/frontend/desktop/darwin/Application.m +++ b/v2/internal/frontend/desktop/darwin/Application.m @@ -95,6 +95,13 @@ void SetSize(void* inctx, int width, int height) { ); } +void SetAlwaysOnTop(void* ctx, int onTop) { + WailsContext *ctx = (__bridge WailsContext*) inctx; + ON_MAIN_THREAD( + [ctx SetAlwaysOnTop:onTop]; + ); +} + void SetMinSize(void* inctx, int width, int height) { WailsContext *ctx = (__bridge WailsContext*) inctx; ON_MAIN_THREAD( diff --git a/v2/internal/frontend/desktop/darwin/WailsContext.h b/v2/internal/frontend/desktop/darwin/WailsContext.h index b51d62f47..b550703d9 100644 --- a/v2/internal/frontend/desktop/darwin/WailsContext.h +++ b/v2/internal/frontend/desktop/darwin/WailsContext.h @@ -61,6 +61,7 @@ - (void) SetMinSize:(int)minWidth :(int)minHeight; - (void) SetMaxSize:(int)maxWidth :(int)maxHeight; - (void) SetTitle:(NSString*)title; +- (void) SetAlwaysOnTop:(int)onTop; - (void) Center; - (void) Fullscreen; - (void) UnFullscreen; diff --git a/v2/internal/frontend/desktop/darwin/WailsContext.m b/v2/internal/frontend/desktop/darwin/WailsContext.m index 8abc2ca30..484ffea43 100644 --- a/v2/internal/frontend/desktop/darwin/WailsContext.m +++ b/v2/internal/frontend/desktop/darwin/WailsContext.m @@ -372,6 +372,14 @@ } } +- (void) SetAlwaysOnTop:(int)onTop { + if (onTop) { + [self.mainWindow setLevel:NSStatusWindowLevel]; + } else { + [self.mainWindow setLevel:NSNormalWindowLevel]; + } +} + - (void) ExecJS:(NSString*)script { [self.webview evaluateJavaScript:script completionHandler:nil]; } diff --git a/v2/internal/frontend/desktop/darwin/frontend.go b/v2/internal/frontend/desktop/darwin/frontend.go index e9e3e1714..b712be714 100644 --- a/v2/internal/frontend/desktop/darwin/frontend.go +++ b/v2/internal/frontend/desktop/darwin/frontend.go @@ -156,6 +156,9 @@ func (f *Frontend) Run(ctx context.Context) error { func (f *Frontend) WindowCenter() { f.mainWindow.Center() } +func (f *Frontend) WindowSetAlwaysOnTop(onTop bool) { + f.mainWindow.AlwaysOnTop(onTop) +} func (f *Frontend) WindowSetPosition(x, y int) { f.mainWindow.SetPosition(x, y) diff --git a/v2/internal/frontend/desktop/darwin/window.go b/v2/internal/frontend/desktop/darwin/window.go index ad1a66f2a..52fb4663d 100644 --- a/v2/internal/frontend/desktop/darwin/window.go +++ b/v2/internal/frontend/desktop/darwin/window.go @@ -147,6 +147,10 @@ func (w *Window) SetSize(width int, height int) { C.SetSize(w.context, C.int(width), C.int(height)) } +func (w *Window) SetAlwaysOnTop(onTop bool) { + C.SetAlwaysOnTop(w.context, bool2Cint(onTop)) +} + func (w *Window) SetTitle(title string) { t := C.CString(title) C.SetTitle(w.context, t) diff --git a/v2/internal/frontend/desktop/linux/frontend.go b/v2/internal/frontend/desktop/linux/frontend.go index 4d045c00e..edb54c51e 100644 --- a/v2/internal/frontend/desktop/linux/frontend.go +++ b/v2/internal/frontend/desktop/linux/frontend.go @@ -144,6 +144,10 @@ func (f *Frontend) WindowCenter() { f.mainWindow.Center() } +func (f *Frontend) WindowSetAlwaysOnTop(b bool) { + f.mainWindow.SetKeepAbove(b) +} + func (f *Frontend) WindowSetPosition(x, y int) { f.mainWindow.SetPosition(x, y) } diff --git a/v2/internal/frontend/desktop/windows/frontend.go b/v2/internal/frontend/desktop/windows/frontend.go index 2db1328cb..b83541afb 100644 --- a/v2/internal/frontend/desktop/windows/frontend.go +++ b/v2/internal/frontend/desktop/windows/frontend.go @@ -181,6 +181,11 @@ func (f *Frontend) WindowCenter() { f.mainWindow.Center() } +func (f *Frontend) WindowSetAlwaysOnTop(b bool) { + runtime.LockOSThread() + f.mainWindow.SetAlwaysOnTop(b) +} + func (f *Frontend) WindowSetPosition(x, y int) { runtime.LockOSThread() defer runtime.UnlockOSThread() diff --git a/v2/internal/frontend/desktop/windows/winc/controlbase.go b/v2/internal/frontend/desktop/windows/winc/controlbase.go index 1f7cb66ff..610e67e3b 100644 --- a/v2/internal/frontend/desktop/windows/winc/controlbase.go +++ b/v2/internal/frontend/desktop/windows/winc/controlbase.go @@ -267,6 +267,13 @@ func (cba *ControlBase) SetPos(x, y int) { w32.SetWindowPos(cba.hwnd, w32.HWND_TOP, int(workRect.Left)+x, int(workRect.Top)+y, 0, 0, w32.SWP_NOSIZE) } +func (cba *ControlBase) SetAlwaysOnTop(b bool) { + if b { + w32.SetWindowPos(cba.hwnd, w32.HWND_TOPMOST, 0, 0, 0, 0, w32.SWP_NOSIZE|w32.SWP_NOMOVE) + } else { + w32.SetWindowPos(cba.hwnd, w32.HWND_NOTOPMOST, 0, 0, 0, 0, w32.SWP_NOSIZE|w32.SWP_NOMOVE) + } +} func (cba *ControlBase) Pos() (x, y int) { rect := w32.GetWindowRect(cba.hwnd) diff --git a/v2/internal/frontend/devserver/devserver.go b/v2/internal/frontend/devserver/devserver.go index 0d03cacca..937617cdd 100644 --- a/v2/internal/frontend/devserver/devserver.go +++ b/v2/internal/frontend/devserver/devserver.go @@ -207,6 +207,9 @@ func (d *DevWebServer) WindowMinimise() { func (d *DevWebServer) WindowUnminimise() { d.desktopFrontend.WindowUnminimise() } +func (d *DevWebServer) WindowSetAlwaysOnTop(b bool) { + d.desktopFrontend.WindowSetAlwaysOnTop(b) +} func (d *DevWebServer) WindowSetPosition(x int, y int) { d.desktopFrontend.WindowSetPosition(x, y) diff --git a/v2/internal/frontend/dispatcher/window.go b/v2/internal/frontend/dispatcher/window.go index 78da341f7..dc34edb15 100644 --- a/v2/internal/frontend/dispatcher/window.go +++ b/v2/internal/frontend/dispatcher/window.go @@ -32,6 +32,12 @@ func (d *Dispatcher) processWindowMessage(message string, sender frontend.Fronte go sender.WindowSetLightTheme() case "DT": go sender.WindowSetDarkTheme() + case "TP:0", "TP:1": + if message[2:] == "TP:0" { + go sender.WindowSetAlwaysOnTop(false) + } else if message[2:] == "TP:1" { + go sender.WindowSetAlwaysOnTop(true) + } } case 'c': go sender.WindowCenter() diff --git a/v2/internal/frontend/frontend.go b/v2/internal/frontend/frontend.go index 6dd12c6b0..cdee6c645 100644 --- a/v2/internal/frontend/frontend.go +++ b/v2/internal/frontend/frontend.go @@ -77,6 +77,7 @@ type Frontend interface { WindowUnmaximise() WindowMinimise() WindowUnminimise() + WindowSetAlwaysOnTop(b bool) WindowSetPosition(x int, y int) WindowGetPosition() (int, int) WindowSetSize(width int, height int) diff --git a/v2/internal/frontend/runtime/desktop/window.js b/v2/internal/frontend/runtime/desktop/window.js index de1c512cd..9283a522b 100644 --- a/v2/internal/frontend/runtime/desktop/window.js +++ b/v2/internal/frontend/runtime/desktop/window.js @@ -11,7 +11,7 @@ The electron alternative for Go /* jshint esversion: 9 */ -import {Call} from "./calls"; +import { Call } from "./calls"; export function WindowReload() { window.location.reload(); @@ -114,6 +114,21 @@ export function WindowSetMinSize(width, height) { window.WailsInvoke('Wz:' + width + ':' + height); } + + +/** + * Set the window AlwaysOnTop or not on top + * + * @export + */ +export function WindowSetAlwaysOnTop(b) { + + window.WailsInvoke('WATP:' + (b ? '1' : '0')); +} + + + + /** * Set the Position of the window * @@ -209,7 +224,7 @@ export function WindowUnminimise() { * @param {number} A Alpha */ export function WindowSetRGBA(R, G, B, A) { - let rgba = JSON.stringify({r: R || 0, g: G || 0, b: B || 0, a: A || 255}); + let rgba = JSON.stringify({ r: R || 0, g: G || 0, b: B || 0, a: A || 255 }); window.WailsInvoke('Wr:' + rgba); } diff --git a/v2/internal/frontend/runtime/dev/package-lock.json b/v2/internal/frontend/runtime/dev/package-lock.json index 4413e7f6b..471c47629 100644 --- a/v2/internal/frontend/runtime/dev/package-lock.json +++ b/v2/internal/frontend/runtime/dev/package-lock.json @@ -1,8 +1,816 @@ { "name": "dev", "version": "2.0.0", - "lockfileVersion": 1, + "lockfileVersion": 2, "requires": true, + "packages": { + "": { + "name": "dev", + "version": "2.0.0", + "license": "ISC", + "devDependencies": { + "esbuild": "^0.12.17", + "esbuild-svelte": "^0.5.6", + "npm-run-all": "^4.1.5", + "svelte": "^3.42.2" + } + }, + "node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + } + }, + "node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true + }, + "node_modules/cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "dev": true, + "dependencies": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + }, + "engines": { + "node": ">=4.8" + } + }, + "node_modules/define-properties": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", + "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", + "dev": true, + "dependencies": { + "object-keys": "^1.0.12" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "node_modules/es-abstract": { + "version": "1.18.5", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.5.tgz", + "integrity": "sha512-DDggyJLoS91CkJjgauM5c0yZMjiD1uK3KcaCeAmffGwZ+ODWzOkPN4QwRbsK5DOFf06fywmyLci3ZD8jLGhVYA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "get-intrinsic": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.2", + "internal-slot": "^1.0.3", + "is-callable": "^1.2.3", + "is-negative-zero": "^2.0.1", + "is-regex": "^1.1.3", + "is-string": "^1.0.6", + "object-inspect": "^1.11.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.2", + "string.prototype.trimend": "^1.0.4", + "string.prototype.trimstart": "^1.0.4", + "unbox-primitive": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "dev": true, + "dependencies": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/esbuild": { + "version": "0.12.21", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.12.21.tgz", + "integrity": "sha512-7hyXbU3g94aREufI/5nls7Xcc+RGQeZWZApm6hoBaFvt2BPtpT4TjFMQ9Tb1jU8XyBGz00ShmiyflCogphMHFQ==", + "dev": true, + "hasInstallScript": true, + "bin": { + "esbuild": "bin/esbuild" + } + }, + "node_modules/esbuild-svelte": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/esbuild-svelte/-/esbuild-svelte-0.5.6.tgz", + "integrity": "sha512-Bz8nU45FrT6sP/Tf3M2rQUuBGxnDSNSPZNIoYwSNt5H+wjSyo/t+zm94tgnOZsR6GgpDMbNQgo4jGbK0NLvEfw==", + "dev": true, + "dependencies": { + "svelte": "^3.42.6" + }, + "peerDependencies": { + "esbuild": ">=0.9.6" + } + }, + "node_modules/esbuild-svelte/node_modules/svelte": { + "version": "3.43.1", + "resolved": "https://registry.npmjs.org/svelte/-/svelte-3.43.1.tgz", + "integrity": "sha512-nvPIaKx4HLzYlSdquISZpgG1Kqr2VAWQjZOt3Iwm3UhbqmA0LnSx4k1YpRMEhjQYW3ZCqQoK8Egto9tv4YewMA==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true + }, + "node_modules/get-intrinsic": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", + "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.8.tgz", + "integrity": "sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg==", + "dev": true + }, + "node_modules/has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.1" + }, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/has-bigints": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.1.tgz", + "integrity": "sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA==", + "dev": true + }, + "node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/has-symbols": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", + "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", + "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", + "dev": true, + "dependencies": { + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/hosted-git-info": { + "version": "2.8.9", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", + "dev": true + }, + "node_modules/internal-slot": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", + "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.1.0", + "has": "^1.0.3", + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", + "dev": true + }, + "node_modules/is-bigint": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", + "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", + "dev": true, + "dependencies": { + "has-bigints": "^1.0.1" + } + }, + "node_modules/is-boolean-object": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", + "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/is-callable": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.4.tgz", + "integrity": "sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/is-core-module": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.6.0.tgz", + "integrity": "sha512-wShG8vs60jKfPWpF2KZRaAtvt3a20OAn7+IJ6hLPECpSABLcKtFKTTI4ZtH5QcBruBHlq+WsdHWyz0BCZW7svQ==", + "dev": true, + "dependencies": { + "has": "^1.0.3" + } + }, + "node_modules/is-date-object": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", + "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/is-negative-zero": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.1.tgz", + "integrity": "sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/is-number-object": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.6.tgz", + "integrity": "sha512-bEVOqiRcvo3zO1+G2lVMy+gkkEm9Yh7cDMRusKKu5ZJKPUYSJwICTKZrNKHA2EbSP0Tu0+6B/emsYNHZyn6K8g==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/is-regex": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", + "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/is-string": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", + "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/is-symbol": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", + "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", + "dev": true, + "dependencies": { + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "dev": true + }, + "node_modules/json-parse-better-errors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", + "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", + "dev": true + }, + "node_modules/load-json-file": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", + "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=", + "dev": true, + "dependencies": { + "graceful-fs": "^4.1.2", + "parse-json": "^4.0.0", + "pify": "^3.0.0", + "strip-bom": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/memorystream": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/memorystream/-/memorystream-0.3.1.tgz", + "integrity": "sha1-htcJCzDORV1j+64S3aUaR93K+bI=", + "dev": true, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/nice-try": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", + "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", + "dev": true + }, + "node_modules/normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "dev": true, + "dependencies": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + } + }, + "node_modules/npm-run-all": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/npm-run-all/-/npm-run-all-4.1.5.tgz", + "integrity": "sha512-Oo82gJDAVcaMdi3nuoKFavkIHBRVqQ1qvMb+9LHk/cF4P6B2m8aP04hGf7oL6wZ9BuGwX1onlLhpuoofSyoQDQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "chalk": "^2.4.1", + "cross-spawn": "^6.0.5", + "memorystream": "^0.3.1", + "minimatch": "^3.0.4", + "pidtree": "^0.3.0", + "read-pkg": "^3.0.0", + "shell-quote": "^1.6.1", + "string.prototype.padend": "^3.0.0" + }, + "bin": { + "npm-run-all": "bin/npm-run-all/index.js", + "run-p": "bin/run-p/index.js", + "run-s": "bin/run-s/index.js" + }, + "engines": { + "node": ">= 4" + } + }, + "node_modules/object-inspect": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.11.0.tgz", + "integrity": "sha512-jp7ikS6Sd3GxQfZJPyH3cjcbJF6GZPClgdV+EFygjFLQ5FmW/dRUnTd9PQ9k0JhoNDabWFbpF1yCdSWCC6gexg==", + "dev": true + }, + "node_modules/object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.assign": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", + "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "has-symbols": "^1.0.1", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", + "dev": true, + "dependencies": { + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true + }, + "node_modules/path-type": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", + "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", + "dev": true, + "dependencies": { + "pify": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/pidtree": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/pidtree/-/pidtree-0.3.1.tgz", + "integrity": "sha512-qQbW94hLHEqCg7nhby4yRC7G2+jYHY4Rguc2bjw7Uug4GIJuu1tvf2uHaZv5Q8zdt+WKJ6qK1FOI6amaWUo5FA==", + "dev": true, + "bin": { + "pidtree": "bin/pidtree.js" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/read-pkg": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", + "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=", + "dev": true, + "dependencies": { + "load-json-file": "^4.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/resolve": { + "version": "1.20.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", + "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", + "dev": true, + "dependencies": { + "is-core-module": "^2.2.0", + "path-parse": "^1.0.6" + } + }, + "node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", + "dev": true, + "dependencies": { + "shebang-regex": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/shell-quote": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.2.tgz", + "integrity": "sha512-mRz/m/JVscCrkMyPqHc/bczi3OQHkLTqXHEFu0zDhK/qfv3UcOA4SVmRCLmos4bhjr9ekVQubj/R7waKapmiQg==", + "dev": true + }, + "node_modules/side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + } + }, + "node_modules/spdx-correct": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", + "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", + "dev": true, + "dependencies": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-exceptions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", + "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", + "dev": true + }, + "node_modules/spdx-expression-parse": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "dev": true, + "dependencies": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-license-ids": { + "version": "3.0.10", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.10.tgz", + "integrity": "sha512-oie3/+gKf7QtpitB0LYLETe+k8SifzsX4KixvpOsbI6S0kRiRQ5MKOio8eMSAKQ17N06+wdEOXRiId+zOxo0hA==", + "dev": true + }, + "node_modules/string.prototype.padend": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/string.prototype.padend/-/string.prototype.padend-3.1.2.tgz", + "integrity": "sha512-/AQFLdYvePENU3W5rgurfWSMU6n+Ww8n/3cUt7E+vPBB/D7YDG8x+qjoFs4M/alR2bW7Qg6xMjVwWUOvuQ0XpQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.18.0-next.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/string.prototype.trimend": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz", + "integrity": "sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + } + }, + "node_modules/string.prototype.trimstart": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz", + "integrity": "sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + } + }, + "node_modules/strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/svelte": { + "version": "3.42.2", + "resolved": "https://registry.npmjs.org/svelte/-/svelte-3.42.2.tgz", + "integrity": "sha512-FOyNYKXb8wdE0Ot+Ctt2/OyDLsNBP8+V6PUE9ag6ZKeLslIou0LnMu1fhtWUA+HjzKTbAM1yj+4PFLtg/3pMJA==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/unbox-primitive": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.1.tgz", + "integrity": "sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.1", + "has-bigints": "^1.0.1", + "has-symbols": "^1.0.2", + "which-boxed-primitive": "^1.0.2" + } + }, + "node_modules/validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "dev": true, + "dependencies": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, + "node_modules/which-boxed-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", + "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", + "dev": true, + "dependencies": { + "is-bigint": "^1.0.1", + "is-boolean-object": "^1.1.0", + "is-number-object": "^1.0.4", + "is-string": "^1.0.5", + "is-symbol": "^1.0.3" + } + } + }, "dependencies": { "ansi-styles": { "version": "3.2.1", diff --git a/v2/internal/frontend/runtime/ipc_websocket.js b/v2/internal/frontend/runtime/ipc_websocket.js index d14009671..1e4c330b6 100644 --- a/v2/internal/frontend/runtime/ipc_websocket.js +++ b/v2/internal/frontend/runtime/ipc_websocket.js @@ -1,9 +1,9 @@ (()=>{function j(t){console.log("%c wails dev %c "+t+" ","background: #aa0000; color: #fff; border-radius: 3px 0px 0px 3px; padding: 1px; font-size: 0.7rem","background: #009900; color: #fff; border-radius: 0px 3px 3px 0px; padding: 1px; font-size: 0.7rem")}function _(){}var O=t=>t;function G(t){return t()}function nt(){return Object.create(null)}function b(t){t.forEach(G)}function S(t){return typeof t=="function"}function D(t,e){return t!=t?e==e:t!==e||t&&typeof t=="object"||typeof t=="function"}function it(t){return Object.keys(t).length===0}function rt(t,...e){if(t==null)return _;let n=t.subscribe(...e);return n.unsubscribe?()=>n.unsubscribe():n}function ot(t,e,n){t.$$.on_destroy.push(rt(e,n))}var st=typeof window!="undefined",Ot=st?()=>window.performance.now():()=>Date.now(),K=st?t=>requestAnimationFrame(t):_;var F=new Set;function ct(t){F.forEach(e=>{e.c(t)||(F.delete(e),e.f())}),F.size!==0&&K(ct)}function Dt(t){let e;return F.size===0&&K(ct),{promise:new Promise(n=>{F.add(e={c:t,f:n})}),abort(){F.delete(e)}}}var lt=!1;function At(){lt=!0}function Lt(){lt=!1}function Bt(t,e){t.appendChild(e)}function ut(t,e,n){let i=P(t);if(!i.getElementById(e)){let r=L("style");r.id=e,r.textContent=n,at(i,r)}}function P(t){if(!t)return document;let e=t.getRootNode?t.getRootNode():t.ownerDocument;return e.host?e:document}function Jt(t){let e=L("style");return at(P(t),e),e}function at(t,e){Bt(t.head||t,e)}function R(t,e,n){t.insertBefore(e,n||null)}function A(t){t.parentNode.removeChild(t)}function L(t){return document.createElement(t)}function zt(t){return document.createTextNode(t)}function ft(){return zt("")}function dt(t,e,n){n==null?t.removeAttribute(e):t.getAttribute(e)!==n&&t.setAttribute(e,n)}function Tt(t){return Array.from(t.childNodes)}function Ht(t,e,n=!1){let i=document.createEvent("CustomEvent");return i.initCustomEvent(t,n,!1,e),i}var N=new Set,B=0;function qt(t){let e=5381,n=t.length;for(;n--;)e=(e<<5)-e^t.charCodeAt(n);return e>>>0}function ht(t,e,n,i,r,c,s,l=0){let a=16.666/i,o=`{ `;for(let g=0;g<=1;g+=a){let v=e+(n-e)*c(g);o+=g*100+`%{${s(v,1-v)}} `}let y=o+`100% {${s(n,1-n)}} -}`,f=`__svelte_${qt(y)}_${l}`,u=P(t);N.add(u);let h=u.__svelte_stylesheet||(u.__svelte_stylesheet=Jt(t).sheet),p=u.__svelte_rules||(u.__svelte_rules={});p[f]||(p[f]=!0,h.insertRule(`@keyframes ${f} ${y}`,h.cssRules.length));let w=t.style.animation||"";return t.style.animation=`${w?`${w}, `:""}${f} ${i}ms linear ${r}ms 1 both`,B+=1,f}function Gt(t,e){let n=(t.style.animation||"").split(", "),i=n.filter(e?c=>c.indexOf(e)<0:c=>c.indexOf("__svelte")===-1),r=n.length-i.length;r&&(t.style.animation=i.join(", "),B-=r,B||Kt())}function Kt(){K(()=>{B||(N.forEach(t=>{let e=t.__svelte_stylesheet,n=e.cssRules.length;for(;n--;)e.deleteRule(n);t.__svelte_rules={}}),N.clear())})}var pt;function J(t){pt=t}var $=[];var _t=[],z=[],mt=[],Pt=Promise.resolve(),W=!1;function Rt(){W||(W=!0,Pt.then(yt))}function x(t){z.push(t)}var V=!1,U=new Set;function yt(){if(!V){V=!0;do{for(let t=0;t<$.length;t+=1){let e=$[t];J(e),Nt(e.$$)}for(J(null),$.length=0;_t.length;)_t.pop()();for(let t=0;t{k=null})),k}function X(t,e,n){t.dispatchEvent(Ht(`${e?"intro":"outro"}${n}`))}var T=new Set,m;function gt(){m={r:0,c:[],p:m}}function bt(){m.r||b(m.c),m=m.p}function C(t,e){t&&t.i&&(T.delete(t),t.i(e))}function Z(t,e,n,i){if(t&&t.o){if(T.has(t))return;T.add(t),m.c.push(()=>{T.delete(t),i&&(n&&t.d(1),i())}),t.o(e)}}var Vt={duration:0};function Q(t,e,n,i){let r=e(t,n),c=i?0:1,s=null,l=null,a=null;function o(){a&&Gt(t,a)}function y(u,h){let p=u.b-c;return h*=Math.abs(p),{a:c,b:u.b,d:p,duration:h,start:u.start,end:u.start+h,group:u.group}}function f(u){let{delay:h=0,duration:p=300,easing:w=O,tick:g=_,css:v}=r||Vt,q={start:Ot()+h,b:u};u||(q.group=m,m.r+=1),s||l?l=q:(v&&(o(),a=ht(t,c,u,p,h,w,v)),u&&g(0,1),s=y(q,p),x(()=>X(t,u,"start")),Dt(E=>{if(l&&E>l.start&&(s=y(l,p),l=null,X(t,s.b,"start"),v&&(o(),a=ht(t,c,s.b,s.duration,0,w,r.css))),s){if(E>=s.end)g(c=s.b,1-c),X(t,s.b,"end"),l||(s.b?o():--s.group.r||b(s.group.c)),s=null;else if(E>=s.start){let jt=E-s.start;c=s.a+s.d*w(jt/s.duration),g(c,1-c)}}return!!(s||l)}))}return{run(u){S(r)?Wt().then(()=>{r=r(),f(u)}):f(u)},end(){o(),s=l=null}}}var ce=typeof window!="undefined"?window:typeof globalThis!="undefined"?globalThis:global;var le=new Set(["allowfullscreen","allowpaymentrequest","async","autofocus","autoplay","checked","controls","default","defer","disabled","formnovalidate","hidden","ismap","loop","multiple","muted","nomodule","novalidate","open","playsinline","readonly","required","reversed","selected"]);function Ut(t,e,n,i){let{fragment:r,on_mount:c,on_destroy:s,after_update:l}=t.$$;r&&r.m(e,n),i||x(()=>{let a=c.map(G).filter(S);s?s.push(...a):b(a),t.$$.on_mount=[]}),l.forEach(x)}function wt(t,e){let n=t.$$;n.fragment!==null&&(b(n.on_destroy),n.fragment&&n.fragment.d(e),n.on_destroy=n.fragment=null,n.ctx=[])}function Xt(t,e){t.$$.dirty[0]===-1&&($.push(t),Rt(),t.$$.dirty.fill(0)),t.$$.dirty[e/31|0]|=1<{let p=h.length?h[0]:u;return o.ctx&&r(o.ctx[f],o.ctx[f]=p)&&(!o.skip_bound&&o.bound[f]&&o.bound[f](p),y&&Xt(t,f)),u}):[],o.update(),y=!0,b(o.before_update),o.fragment=i?i(o.ctx):!1,e.target){if(e.hydrate){At();let f=Tt(e.target);o.fragment&&o.fragment.l(f),f.forEach(A)}else o.fragment&&o.fragment.c();e.intro&&C(t.$$.fragment),Ut(t,e.target,e.anchor,e.customElement),Lt(),yt()}J(a)}var Zt;typeof HTMLElement=="function"&&(Zt=class extends HTMLElement{constructor(){super();this.attachShadow({mode:"open"})}connectedCallback(){let{on_mount:t}=this.$$;this.$$.on_disconnect=t.map(G).filter(S);for(let e in this.$$.slotted)this.appendChild(this.$$.slotted[e])}attributeChangedCallback(t,e,n){this[t]=n}disconnectedCallback(){b(this.$$.on_disconnect)}$destroy(){wt(this,1),this.$destroy=_}$on(t,e){let n=this.$$.callbacks[t]||(this.$$.callbacks[t]=[]);return n.push(e),()=>{let i=n.indexOf(e);i!==-1&&n.splice(i,1)}}$set(t){this.$$set&&!it(t)&&(this.$$.skip_bound=!0,this.$$set(t),this.$$.skip_bound=!1)}});var Y=class{$destroy(){wt(this,1),this.$destroy=_}$on(e,n){let i=this.$$.callbacks[e]||(this.$$.callbacks[e]=[]);return i.push(n),()=>{let r=i.indexOf(n);r!==-1&&i.splice(r,1)}}$set(e){this.$$set&&!it(e)&&(this.$$.skip_bound=!0,this.$$set(e),this.$$.skip_bound=!1)}};var M=[];function Ft(t,e=_){let n,i=new Set;function r(l){if(D(t,l)&&(t=l,n)){let a=!M.length;for(let o of i)o[1](),M.push(o,t);if(a){for(let o=0;o{i.delete(o),i.size===0&&(n(),n=null)}}return{set:r,update:c,subscribe:s}}var H=Ft(!1);function xt(){H.set(!0)}function Mt(){H.set(!1)}function tt(t,{delay:e=0,duration:n=400,easing:i=O}={}){let r=+getComputedStyle(t).opacity;return{delay:e,duration:n,easing:i,css:c=>`opacity: ${c*r}`}}function Qt(t){ut(t,"svelte-181h7z",`.wails-reconnect-overlay.svelte-181h7z{position:fixed;top:0;left:0;width:100%;height:100%;backdrop-filter:blur(2px) saturate(0%) contrast(50%) brightness(25%);z-index:999999 - }.wails-reconnect-overlay-content.svelte-181h7z{position:relative;top:50%;transform:translateY(-50%);margin:0;background-image:url(data:image/png;base64,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);background-repeat:no-repeat;background-position:center - }.wails-reconnect-overlay-loadingspinner.svelte-181h7z{pointer-events:none;width:2.5em;height:2.5em;border:.4em solid transparent;border-color:#f00 #eee0 #f00 #eee0;border-radius:50%;animation:svelte-181h7z-loadingspin 1s linear infinite;margin:auto;padding:2.5em +}`,f=`__svelte_${qt(y)}_${l}`,u=P(t);N.add(u);let h=u.__svelte_stylesheet||(u.__svelte_stylesheet=Jt(t).sheet),p=u.__svelte_rules||(u.__svelte_rules={});p[f]||(p[f]=!0,h.insertRule(`@keyframes ${f} ${y}`,h.cssRules.length));let w=t.style.animation||"";return t.style.animation=`${w?`${w}, `:""}${f} ${i}ms linear ${r}ms 1 both`,B+=1,f}function Gt(t,e){let n=(t.style.animation||"").split(", "),i=n.filter(e?c=>c.indexOf(e)<0:c=>c.indexOf("__svelte")===-1),r=n.length-i.length;r&&(t.style.animation=i.join(", "),B-=r,B||Kt())}function Kt(){K(()=>{B||(N.forEach(t=>{let e=t.__svelte_stylesheet,n=e.cssRules.length;for(;n--;)e.deleteRule(n);t.__svelte_rules={}}),N.clear())})}var pt;function J(t){pt=t}var $=[];var _t=[],z=[],mt=[],Pt=Promise.resolve(),W=!1;function Rt(){W||(W=!0,Pt.then(yt))}function x(t){z.push(t)}var V=!1,U=new Set;function yt(){if(!V){V=!0;do{for(let t=0;t<$.length;t+=1){let e=$[t];J(e),Nt(e.$$)}for(J(null),$.length=0;_t.length;)_t.pop()();for(let t=0;t{k=null})),k}function X(t,e,n){t.dispatchEvent(Ht(`${e?"intro":"outro"}${n}`))}var T=new Set,m;function gt(){m={r:0,c:[],p:m}}function bt(){m.r||b(m.c),m=m.p}function C(t,e){t&&t.i&&(T.delete(t),t.i(e))}function Z(t,e,n,i){if(t&&t.o){if(T.has(t))return;T.add(t),m.c.push(()=>{T.delete(t),i&&(n&&t.d(1),i())}),t.o(e)}}var Vt={duration:0};function Q(t,e,n,i){let r=e(t,n),c=i?0:1,s=null,l=null,a=null;function o(){a&&Gt(t,a)}function y(u,h){let p=u.b-c;return h*=Math.abs(p),{a:c,b:u.b,d:p,duration:h,start:u.start,end:u.start+h,group:u.group}}function f(u){let{delay:h=0,duration:p=300,easing:w=O,tick:g=_,css:v}=r||Vt,q={start:Ot()+h,b:u};u||(q.group=m,m.r+=1),s||l?l=q:(v&&(o(),a=ht(t,c,u,p,h,w,v)),u&&g(0,1),s=y(q,p),x(()=>X(t,u,"start")),Dt(E=>{if(l&&E>l.start&&(s=y(l,p),l=null,X(t,s.b,"start"),v&&(o(),a=ht(t,c,s.b,s.duration,0,w,r.css))),s){if(E>=s.end)g(c=s.b,1-c),X(t,s.b,"end"),l||(s.b?o():--s.group.r||b(s.group.c)),s=null;else if(E>=s.start){let jt=E-s.start;c=s.a+s.d*w(jt/s.duration),g(c,1-c)}}return!!(s||l)}))}return{run(u){S(r)?Wt().then(()=>{r=r(),f(u)}):f(u)},end(){o(),s=l=null}}}var ce=typeof window!="undefined"?window:typeof globalThis!="undefined"?globalThis:global;var le=new Set(["allowfullscreen","allowpaymentrequest","async","autofocus","autoplay","checked","controls","default","defer","disabled","formnovalidate","hidden","ismap","loop","multiple","muted","nomodule","novalidate","open","playsinline","readonly","required","reversed","selected"]);function Ut(t,e,n,i){let{fragment:r,on_mount:c,on_destroy:s,after_update:l}=t.$$;r&&r.m(e,n),i||x(()=>{let a=c.map(G).filter(S);s?s.push(...a):b(a),t.$$.on_mount=[]}),l.forEach(x)}function wt(t,e){let n=t.$$;n.fragment!==null&&(b(n.on_destroy),n.fragment&&n.fragment.d(e),n.on_destroy=n.fragment=null,n.ctx=[])}function Xt(t,e){t.$$.dirty[0]===-1&&($.push(t),Rt(),t.$$.dirty.fill(0)),t.$$.dirty[e/31|0]|=1<{let p=h.length?h[0]:u;return o.ctx&&r(o.ctx[f],o.ctx[f]=p)&&(!o.skip_bound&&o.bound[f]&&o.bound[f](p),y&&Xt(t,f)),u}):[],o.update(),y=!0,b(o.before_update),o.fragment=i?i(o.ctx):!1,e.target){if(e.hydrate){At();let f=Tt(e.target);o.fragment&&o.fragment.l(f),f.forEach(A)}else o.fragment&&o.fragment.c();e.intro&&C(t.$$.fragment),Ut(t,e.target,e.anchor,e.customElement),Lt(),yt()}J(a)}var Zt;typeof HTMLElement=="function"&&(Zt=class extends HTMLElement{constructor(){super();this.attachShadow({mode:"open"})}connectedCallback(){let{on_mount:t}=this.$$;this.$$.on_disconnect=t.map(G).filter(S);for(let e in this.$$.slotted)this.appendChild(this.$$.slotted[e])}attributeChangedCallback(t,e,n){this[t]=n}disconnectedCallback(){b(this.$$.on_disconnect)}$destroy(){wt(this,1),this.$destroy=_}$on(t,e){let n=this.$$.callbacks[t]||(this.$$.callbacks[t]=[]);return n.push(e),()=>{let i=n.indexOf(e);i!==-1&&n.splice(i,1)}}$set(t){this.$$set&&!it(t)&&(this.$$.skip_bound=!0,this.$$set(t),this.$$.skip_bound=!1)}});var Y=class{$destroy(){wt(this,1),this.$destroy=_}$on(e,n){let i=this.$$.callbacks[e]||(this.$$.callbacks[e]=[]);return i.push(n),()=>{let r=i.indexOf(n);r!==-1&&i.splice(r,1)}}$set(e){this.$$set&&!it(e)&&(this.$$.skip_bound=!0,this.$$set(e),this.$$.skip_bound=!1)}};var M=[];function Ft(t,e=_){let n,i=new Set;function r(l){if(D(t,l)&&(t=l,n)){let a=!M.length;for(let o of i)o[1](),M.push(o,t);if(a){for(let o=0;o{i.delete(o),i.size===0&&(n(),n=null)}}return{set:r,update:c,subscribe:s}}var H=Ft(!1);function xt(){H.set(!0)}function Mt(){H.set(!1)}function tt(t,{delay:e=0,duration:n=400,easing:i=O}={}){let r=+getComputedStyle(t).opacity;return{delay:e,duration:n,easing:i,css:c=>`opacity: ${c*r}`}}function Qt(t){ut(t,"svelte-181h7z",`.wails-reconnect-overlay.svelte-181h7z{position:fixed;top:0;left:0;width:100%;height:100%;backdrop-filter:blur(2px) saturate(0%) contrast(50%) brightness(25%);z-index:999999\r + }.wails-reconnect-overlay-content.svelte-181h7z{position:relative;top:50%;transform:translateY(-50%);margin:0;background-image:url(data:image/png;base64,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);background-repeat:no-repeat;background-position:center\r + }.wails-reconnect-overlay-loadingspinner.svelte-181h7z{pointer-events:none;width:2.5em;height:2.5em;border:.4em solid transparent;border-color:#f00 #eee0 #f00 #eee0;border-radius:50%;animation:svelte-181h7z-loadingspin 1s linear infinite;margin:auto;padding:2.5em\r }@keyframes svelte-181h7z-loadingspin{100%{transform:rotate(360deg)}}`)}function St(t){let e,n,i;return{c(){e=L("div"),e.innerHTML='
',dt(e,"class","wails-reconnect-overlay svelte-181h7z")},m(r,c){R(r,e,c),i=!0},i(r){i||(x(()=>{n||(n=Q(e,tt,{duration:300},!0)),n.run(1)}),i=!0)},o(r){n||(n=Q(e,tt,{duration:300},!1)),n.run(0),i=!1},d(r){r&&A(e),r&&n&&n.end()}}}function Yt(t){let e,n,i=t[0]&&St(t);return{c(){i&&i.c(),e=ft()},m(r,c){i&&i.m(r,c),R(r,e,c),n=!0},p(r,[c]){r[0]?i?c&1&&C(i,1):(i=St(r),i.c(),C(i,1),i.m(e.parentNode,e)):i&&(gt(),Z(i,1,1,()=>{i=null}),bt())},i(r){n||(C(i),n=!0)},o(r){Z(i),n=!1},d(r){i&&i.d(r),r&&A(e)}}}function te(t,e,n){let i;return ot(t,H,r=>n(0,i=r)),[i]}var $t=class extends Y{constructor(e){super();vt(this,e,te,Yt,D,{},Qt)}},kt=$t;var ee={},et=null,I=[];window.WailsInvoke=t=>{if(!et){console.log("Queueing: "+t),I.push(t);return}et(t)};window.addEventListener("DOMContentLoaded",()=>{ee.overlay=new kt({target:document.body,anchor:document.querySelector("#wails-spinner")})});var d=null,Ct;window.onbeforeunload=function(){d&&(d.onclose=function(){},d.close(),d=null)};Et();function ne(){et=t=>{d.send(t)};for(let t=0;t WindowMinimise, WindowReload: () => WindowReload, WindowReloadApp: () => WindowReloadApp, + WindowSetAlwaysOnTop: () => WindowSetAlwaysOnTop, WindowSetDarkTheme: () => WindowSetDarkTheme, WindowSetLightTheme: () => WindowSetLightTheme, WindowSetMaxSize: () => WindowSetMaxSize, @@ -290,6 +291,9 @@ function WindowSetMinSize(width, height) { window.WailsInvoke("Wz:" + width + ":" + height); } + function WindowSetAlwaysOnTop(b) { + window.WailsInvoke("WATP:" + (b ? "1" : "0")); + } function WindowSetPosition(x, y) { window.WailsInvoke("Wp:" + x + ":" + y); } @@ -446,4 +450,4 @@ } }); })(); -//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiZGVza3RvcC9sb2cuanMiLCAiZGVza3RvcC9ldmVudHMuanMiLCAiZGVza3RvcC9jYWxscy5qcyIsICJkZXNrdG9wL2JpbmRpbmdzLmpzIiwgImRlc2t0b3Avd2luZG93LmpzIiwgImRlc2t0b3AvYnJvd3Nlci5qcyIsICJkZXNrdG9wL21haW4uanMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qXG4gXyAgICAgICBfXyAgICAgIF8gX19cbnwgfCAgICAgLyAvX19fIF8oXykgL19fX19cbnwgfCAvfCAvIC8gX18gYC8gLyAvIF9fXy9cbnwgfC8gfC8gLyAvXy8gLyAvIChfXyAgKVxufF9fL3xfXy9cXF9fLF8vXy9fL19fX18vXG5UaGUgZWxlY3Ryb24gYWx0ZXJuYXRpdmUgZm9yIEdvXG4oYykgTGVhIEFudGhvbnkgMjAxOS1wcmVzZW50XG4qL1xuXG4vKiBqc2hpbnQgZXN2ZXJzaW9uOiA2ICovXG5cbi8qKlxuICogU2VuZHMgYSBsb2cgbWVzc2FnZSB0byB0aGUgYmFja2VuZCB3aXRoIHRoZSBnaXZlbiBsZXZlbCArIG1lc3NhZ2VcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gbGV2ZWxcbiAqIEBwYXJhbSB7c3RyaW5nfSBtZXNzYWdlXG4gKi9cbmZ1bmN0aW9uIHNlbmRMb2dNZXNzYWdlKGxldmVsLCBtZXNzYWdlKSB7XG5cblx0Ly8gTG9nIE1lc3NhZ2UgZm9ybWF0OlxuXHQvLyBsW3R5cGVdW21lc3NhZ2VdXG5cdHdpbmRvdy5XYWlsc0ludm9rZSgnTCcgKyBsZXZlbCArIG1lc3NhZ2UpO1xufVxuXG4vKipcbiAqIExvZyB0aGUgZ2l2ZW4gdHJhY2UgbWVzc2FnZSB3aXRoIHRoZSBiYWNrZW5kXG4gKlxuICogQGV4cG9ydFxuICogQHBhcmFtIHtzdHJpbmd9IG1lc3NhZ2VcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIExvZ1RyYWNlKG1lc3NhZ2UpIHtcblx0c2VuZExvZ01lc3NhZ2UoJ1QnLCBtZXNzYWdlKTtcbn1cblxuLyoqXG4gKiBMb2cgdGhlIGdpdmVuIG1lc3NhZ2Ugd2l0aCB0aGUgYmFja2VuZFxuICpcbiAqIEBleHBvcnRcbiAqIEBwYXJhbSB7c3RyaW5nfSBtZXNzYWdlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBMb2dQcmludChtZXNzYWdlKSB7XG5cdHNlbmRMb2dNZXNzYWdlKCdQJywgbWVzc2FnZSk7XG59XG5cbi8qKlxuICogTG9nIHRoZSBnaXZlbiBkZWJ1ZyBtZXNzYWdlIHdpdGggdGhlIGJhY2tlbmRcbiAqXG4gKiBAZXhwb3J0XG4gKiBAcGFyYW0ge3N0cmluZ30gbWVzc2FnZVxuICovXG5leHBvcnQgZnVuY3Rpb24gTG9nRGVidWcobWVzc2FnZSkge1xuXHRzZW5kTG9nTWVzc2FnZSgnRCcsIG1lc3NhZ2UpO1xufVxuXG4vKipcbiAqIExvZyB0aGUgZ2l2ZW4gaW5mbyBtZXNzYWdlIHdpdGggdGhlIGJhY2tlbmRcbiAqXG4gKiBAZXhwb3J0XG4gKiBAcGFyYW0ge3N0cmluZ30gbWVzc2FnZVxuICovXG5leHBvcnQgZnVuY3Rpb24gTG9nSW5mbyhtZXNzYWdlKSB7XG5cdHNlbmRMb2dNZXNzYWdlKCdJJywgbWVzc2FnZSk7XG59XG5cbi8qKlxuICogTG9nIHRoZSBnaXZlbiB3YXJuaW5nIG1lc3NhZ2Ugd2l0aCB0aGUgYmFja2VuZFxuICpcbiAqIEBleHBvcnRcbiAqIEBwYXJhbSB7c3RyaW5nfSBtZXNzYWdlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBMb2dXYXJuaW5nKG1lc3NhZ2UpIHtcblx0c2VuZExvZ01lc3NhZ2UoJ1cnLCBtZXNzYWdlKTtcbn1cblxuLyoqXG4gKiBMb2cgdGhlIGdpdmVuIGVycm9yIG1lc3NhZ2Ugd2l0aCB0aGUgYmFja2VuZFxuICpcbiAqIEBleHBvcnRcbiAqIEBwYXJhbSB7c3RyaW5nfSBtZXNzYWdlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBMb2dFcnJvcihtZXNzYWdlKSB7XG5cdHNlbmRMb2dNZXNzYWdlKCdFJywgbWVzc2FnZSk7XG59XG5cbi8qKlxuICogTG9nIHRoZSBnaXZlbiBmYXRhbCBtZXNzYWdlIHdpdGggdGhlIGJhY2tlbmRcbiAqXG4gKiBAZXhwb3J0XG4gKiBAcGFyYW0ge3N0cmluZ30gbWVzc2FnZVxuICovXG5leHBvcnQgZnVuY3Rpb24gTG9nRmF0YWwobWVzc2FnZSkge1xuXHRzZW5kTG9nTWVzc2FnZSgnRicsIG1lc3NhZ2UpO1xufVxuXG4vKipcbiAqIFNldHMgdGhlIExvZyBsZXZlbCB0byB0aGUgZ2l2ZW4gbG9nIGxldmVsXG4gKlxuICogQGV4cG9ydFxuICogQHBhcmFtIHtudW1iZXJ9IGxvZ2xldmVsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBTZXRMb2dMZXZlbChsb2dsZXZlbCkge1xuXHRzZW5kTG9nTWVzc2FnZSgnUycsIGxvZ2xldmVsKTtcbn1cblxuLy8gTG9nIGxldmVsc1xuZXhwb3J0IGNvbnN0IExvZ0xldmVsID0ge1xuXHRUUkFDRTogMSxcblx0REVCVUc6IDIsXG5cdElORk86IDMsXG5cdFdBUk5JTkc6IDQsXG5cdEVSUk9SOiA1LFxufTtcbiIsICIvKlxuIF8gICAgICAgX18gICAgICBfIF9fXG58IHwgICAgIC8gL19fXyBfKF8pIC9fX19fXG58IHwgL3wgLyAvIF9fIGAvIC8gLyBfX18vXG58IHwvIHwvIC8gL18vIC8gLyAoX18gIClcbnxfXy98X18vXFxfXyxfL18vXy9fX19fL1xuVGhlIGVsZWN0cm9uIGFsdGVybmF0aXZlIGZvciBHb1xuKGMpIExlYSBBbnRob255IDIwMTktcHJlc2VudFxuKi9cbi8qIGpzaGludCBlc3ZlcnNpb246IDYgKi9cblxuLy8gRGVmaW5lcyBhIHNpbmdsZSBsaXN0ZW5lciB3aXRoIGEgbWF4aW11bSBudW1iZXIgb2YgdGltZXMgdG8gY2FsbGJhY2tcblxuLyoqXG4gKiBUaGUgTGlzdGVuZXIgY2xhc3MgZGVmaW5lcyBhIGxpc3RlbmVyISA6LSlcbiAqXG4gKiBAY2xhc3MgTGlzdGVuZXJcbiAqL1xuY2xhc3MgTGlzdGVuZXIge1xuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgTGlzdGVuZXIuXG4gICAgICogQHBhcmFtIHtmdW5jdGlvbn0gY2FsbGJhY2tcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gbWF4Q2FsbGJhY2tzXG4gICAgICogQG1lbWJlcm9mIExpc3RlbmVyXG4gICAgICovXG4gICAgY29uc3RydWN0b3IoY2FsbGJhY2ssIG1heENhbGxiYWNrcykge1xuICAgICAgICAvLyBEZWZhdWx0IG9mIC0xIG1lYW5zIGluZmluaXRlXG4gICAgICAgIG1heENhbGxiYWNrcyA9IG1heENhbGxiYWNrcyB8fCAtMTtcbiAgICAgICAgLy8gQ2FsbGJhY2sgaW52b2tlcyB0aGUgY2FsbGJhY2sgd2l0aCB0aGUgZ2l2ZW4gZGF0YVxuICAgICAgICAvLyBSZXR1cm5zIHRydWUgaWYgdGhpcyBsaXN0ZW5lciBzaG91bGQgYmUgZGVzdHJveWVkXG4gICAgICAgIHRoaXMuQ2FsbGJhY2sgPSAoZGF0YSkgPT4ge1xuICAgICAgICAgICAgY2FsbGJhY2suYXBwbHkobnVsbCwgZGF0YSk7XG4gICAgICAgICAgICAvLyBJZiBtYXhDYWxsYmFja3MgaXMgaW5maW5pdGUsIHJldHVybiBmYWxzZSAoZG8gbm90IGRlc3Ryb3kpXG4gICAgICAgICAgICBpZiAobWF4Q2FsbGJhY2tzID09PSAtMSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIERlY3JlbWVudCBtYXhDYWxsYmFja3MuIFJldHVybiB0cnVlIGlmIG5vdyAwLCBvdGhlcndpc2UgZmFsc2VcbiAgICAgICAgICAgIG1heENhbGxiYWNrcyAtPSAxO1xuICAgICAgICAgICAgcmV0dXJuIG1heENhbGxiYWNrcyA9PT0gMDtcbiAgICAgICAgfTtcbiAgICB9XG59XG5cbmV4cG9ydCBjb25zdCBldmVudExpc3RlbmVycyA9IHt9O1xuXG4vKipcbiAqIFJlZ2lzdGVycyBhbiBldmVudCBsaXN0ZW5lciB0aGF0IHdpbGwgYmUgaW52b2tlZCBgbWF4Q2FsbGJhY2tzYCB0aW1lcyBiZWZvcmUgYmVpbmcgZGVzdHJveWVkXG4gKlxuICogQGV4cG9ydFxuICogQHBhcmFtIHtzdHJpbmd9IGV2ZW50TmFtZVxuICogQHBhcmFtIHtmdW5jdGlvbn0gY2FsbGJhY2tcbiAqIEBwYXJhbSB7bnVtYmVyfSBtYXhDYWxsYmFja3NcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIEV2ZW50c09uTXVsdGlwbGUoZXZlbnROYW1lLCBjYWxsYmFjaywgbWF4Q2FsbGJhY2tzKSB7XG4gICAgZXZlbnRMaXN0ZW5lcnNbZXZlbnROYW1lXSA9IGV2ZW50TGlzdGVuZXJzW2V2ZW50TmFtZV0gfHwgW107XG4gICAgY29uc3QgdGhpc0xpc3RlbmVyID0gbmV3IExpc3RlbmVyKGNhbGxiYWNrLCBtYXhDYWxsYmFja3MpO1xuICAgIGV2ZW50TGlzdGVuZXJzW2V2ZW50TmFtZV0ucHVzaCh0aGlzTGlzdGVuZXIpO1xufVxuXG4vKipcbiAqIFJlZ2lzdGVycyBhbiBldmVudCBsaXN0ZW5lciB0aGF0IHdpbGwgYmUgaW52b2tlZCBldmVyeSB0aW1lIHRoZSBldmVudCBpcyBlbWl0dGVkXG4gKlxuICogQGV4cG9ydFxuICogQHBhcmFtIHtzdHJpbmd9IGV2ZW50TmFtZVxuICogQHBhcmFtIHtmdW5jdGlvbn0gY2FsbGJhY2tcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIEV2ZW50c09uKGV2ZW50TmFtZSwgY2FsbGJhY2spIHtcbiAgICBFdmVudHNPbk11bHRpcGxlKGV2ZW50TmFtZSwgY2FsbGJhY2ssIC0xKTtcbn1cblxuLyoqXG4gKiBSZWdpc3RlcnMgYW4gZXZlbnQgbGlzdGVuZXIgdGhhdCB3aWxsIGJlIGludm9rZWQgb25jZSB0aGVuIGRlc3Ryb3llZFxuICpcbiAqIEBleHBvcnRcbiAqIEBwYXJhbSB7c3RyaW5nfSBldmVudE5hbWVcbiAqIEBwYXJhbSB7ZnVuY3Rpb259IGNhbGxiYWNrXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBFdmVudHNPbmNlKGV2ZW50TmFtZSwgY2FsbGJhY2spIHtcbiAgICBFdmVudHNPbk11bHRpcGxlKGV2ZW50TmFtZSwgY2FsbGJhY2ssIDEpO1xufVxuXG5mdW5jdGlvbiBub3RpZnlMaXN0ZW5lcnMoZXZlbnREYXRhKSB7XG5cbiAgICAvLyBHZXQgdGhlIGV2ZW50IG5hbWVcbiAgICBsZXQgZXZlbnROYW1lID0gZXZlbnREYXRhLm5hbWU7XG5cbiAgICAvLyBDaGVjayBpZiB3ZSBoYXZlIGFueSBsaXN0ZW5lcnMgZm9yIHRoaXMgZXZlbnRcbiAgICBpZiAoZXZlbnRMaXN0ZW5lcnNbZXZlbnROYW1lXSkge1xuXG4gICAgICAgIC8vIEtlZXAgYSBsaXN0IG9mIGxpc3RlbmVyIGluZGV4ZXMgdG8gZGVzdHJveVxuICAgICAgICBjb25zdCBuZXdFdmVudExpc3RlbmVyTGlzdCA9IGV2ZW50TGlzdGVuZXJzW2V2ZW50TmFtZV0uc2xpY2UoKTtcblxuICAgICAgICAvLyBJdGVyYXRlIGxpc3RlbmVyc1xuICAgICAgICBmb3IgKGxldCBjb3VudCA9IDA7IGNvdW50IDwgZXZlbnRMaXN0ZW5lcnNbZXZlbnROYW1lXS5sZW5ndGg7IGNvdW50ICs9IDEpIHtcblxuICAgICAgICAgICAgLy8gR2V0IG5leHQgbGlzdGVuZXJcbiAgICAgICAgICAgIGNvbnN0IGxpc3RlbmVyID0gZXZlbnRMaXN0ZW5lcnNbZXZlbnROYW1lXVtjb3VudF07XG5cbiAgICAgICAgICAgIGxldCBkYXRhID0gZXZlbnREYXRhLmRhdGE7XG5cbiAgICAgICAgICAgIC8vIERvIHRoZSBjYWxsYmFja1xuICAgICAgICAgICAgY29uc3QgZGVzdHJveSA9IGxpc3RlbmVyLkNhbGxiYWNrKGRhdGEpO1xuICAgICAgICAgICAgaWYgKGRlc3Ryb3kpIHtcbiAgICAgICAgICAgICAgICAvLyBpZiB0aGUgbGlzdGVuZXIgaW5kaWNhdGVkIHRvIGRlc3Ryb3kgaXRzZWxmLCBhZGQgaXQgdG8gdGhlIGRlc3Ryb3kgbGlzdFxuICAgICAgICAgICAgICAgIG5ld0V2ZW50TGlzdGVuZXJMaXN0LnNwbGljZShjb3VudCwgMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBVcGRhdGUgY2FsbGJhY2tzIHdpdGggbmV3IGxpc3Qgb2YgbGlzdGVuZXJzXG4gICAgICAgIGV2ZW50TGlzdGVuZXJzW2V2ZW50TmFtZV0gPSBuZXdFdmVudExpc3RlbmVyTGlzdDtcbiAgICB9XG59XG5cbi8qKlxuICogTm90aWZ5IGluZm9ybXMgZnJvbnRlbmQgbGlzdGVuZXJzIHRoYXQgYW4gZXZlbnQgd2FzIGVtaXR0ZWQgd2l0aCB0aGUgZ2l2ZW4gZGF0YVxuICpcbiAqIEBleHBvcnRcbiAqIEBwYXJhbSB7c3RyaW5nfSBub3RpZnlNZXNzYWdlIC0gZW5jb2RlZCBub3RpZmljYXRpb24gbWVzc2FnZVxuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBFdmVudHNOb3RpZnkobm90aWZ5TWVzc2FnZSkge1xuICAgIC8vIFBhcnNlIHRoZSBtZXNzYWdlXG4gICAgbGV0IG1lc3NhZ2U7XG4gICAgdHJ5IHtcbiAgICAgICAgbWVzc2FnZSA9IEpTT04ucGFyc2Uobm90aWZ5TWVzc2FnZSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBjb25zdCBlcnJvciA9ICdJbnZhbGlkIEpTT04gcGFzc2VkIHRvIE5vdGlmeTogJyArIG5vdGlmeU1lc3NhZ2U7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihlcnJvcik7XG4gICAgfVxuICAgIG5vdGlmeUxpc3RlbmVycyhtZXNzYWdlKTtcbn1cblxuLyoqXG4gKiBFbWl0IGFuIGV2ZW50IHdpdGggdGhlIGdpdmVuIG5hbWUgYW5kIGRhdGFcbiAqXG4gKiBAZXhwb3J0XG4gKiBAcGFyYW0ge3N0cmluZ30gZXZlbnROYW1lXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBFdmVudHNFbWl0KGV2ZW50TmFtZSkge1xuXG4gICAgY29uc3QgcGF5bG9hZCA9IHtcbiAgICAgICAgbmFtZTogZXZlbnROYW1lLFxuICAgICAgICBkYXRhOiBbXS5zbGljZS5hcHBseShhcmd1bWVudHMpLnNsaWNlKDEpLFxuICAgIH07XG5cbiAgICAvLyBOb3RpZnkgSlMgbGlzdGVuZXJzXG4gICAgbm90aWZ5TGlzdGVuZXJzKHBheWxvYWQpO1xuXG4gICAgLy8gTm90aWZ5IEdvIGxpc3RlbmVyc1xuICAgIHdpbmRvdy5XYWlsc0ludm9rZSgnRUUnICsgSlNPTi5zdHJpbmdpZnkocGF5bG9hZCkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gRXZlbnRzT2ZmKGV2ZW50TmFtZSkge1xuICAgIC8vIFJlbW92ZSBsb2NhbCBsaXN0ZW5lcnNcbiAgICBkZWxldGUgZXZlbnRMaXN0ZW5lcnNbZXZlbnROYW1lXTtcblxuICAgIC8vIE5vdGlmeSBHbyBsaXN0ZW5lcnNcbiAgICB3aW5kb3cuV2FpbHNJbnZva2UoJ0VYJyArIGV2ZW50TmFtZSk7XG59IiwgIi8qXG4gXyAgICAgICBfXyAgICAgIF8gX19cbnwgfCAgICAgLyAvX19fIF8oXykgL19fX19cbnwgfCAvfCAvIC8gX18gYC8gLyAvIF9fXy9cbnwgfC8gfC8gLyAvXy8gLyAvIChfXyAgKVxufF9fL3xfXy9cXF9fLF8vXy9fL19fX18vXG5UaGUgZWxlY3Ryb24gYWx0ZXJuYXRpdmUgZm9yIEdvXG4oYykgTGVhIEFudGhvbnkgMjAxOS1wcmVzZW50XG4qL1xuLyoganNoaW50IGVzdmVyc2lvbjogNiAqL1xuXG5leHBvcnQgY29uc3QgY2FsbGJhY2tzID0ge307XG5cbi8qKlxuICogUmV0dXJucyBhIG51bWJlciBmcm9tIHRoZSBuYXRpdmUgYnJvd3NlciByYW5kb20gZnVuY3Rpb25cbiAqXG4gKiBAcmV0dXJucyBudW1iZXJcbiAqL1xuZnVuY3Rpb24gY3J5cHRvUmFuZG9tKCkge1xuXHR2YXIgYXJyYXkgPSBuZXcgVWludDMyQXJyYXkoMSk7XG5cdHJldHVybiB3aW5kb3cuY3J5cHRvLmdldFJhbmRvbVZhbHVlcyhhcnJheSlbMF07XG59XG5cbi8qKlxuICogUmV0dXJucyBhIG51bWJlciB1c2luZyBkYSBvbGQtc2tvb2wgTWF0aC5SYW5kb21cbiAqIEkgbGlrZXMgdG8gY2FsbCBpdCBMT0xSYW5kb21cbiAqXG4gKiBAcmV0dXJucyBudW1iZXJcbiAqL1xuZnVuY3Rpb24gYmFzaWNSYW5kb20oKSB7XG5cdHJldHVybiBNYXRoLnJhbmRvbSgpICogOTAwNzE5OTI1NDc0MDk5MTtcbn1cblxuLy8gUGljayBhIHJhbmRvbSBudW1iZXIgZnVuY3Rpb24gYmFzZWQgb24gYnJvd3NlciBjYXBhYmlsaXR5XG52YXIgcmFuZG9tRnVuYztcbmlmICh3aW5kb3cuY3J5cHRvKSB7XG5cdHJhbmRvbUZ1bmMgPSBjcnlwdG9SYW5kb207XG59IGVsc2Uge1xuXHRyYW5kb21GdW5jID0gYmFzaWNSYW5kb207XG59XG5cblxuLyoqXG4gKiBDYWxsIHNlbmRzIGEgbWVzc2FnZSB0byB0aGUgYmFja2VuZCB0byBjYWxsIHRoZSBiaW5kaW5nIHdpdGggdGhlXG4gKiBnaXZlbiBkYXRhLiBBIHByb21pc2UgaXMgcmV0dXJuZWQgYW5kIHdpbGwgYmUgY29tcGxldGVkIHdoZW4gdGhlXG4gKiBiYWNrZW5kIHJlc3BvbmRzLiBUaGlzIHdpbGwgYmUgcmVzb2x2ZWQgd2hlbiB0aGUgY2FsbCB3YXMgc3VjY2Vzc2Z1bFxuICogb3IgcmVqZWN0ZWQgaWYgYW4gZXJyb3IgaXMgcGFzc2VkIGJhY2suXG4gKiBUaGVyZSBpcyBhIHRpbWVvdXQgbWVjaGFuaXNtLiBJZiB0aGUgY2FsbCBkb2Vzbid0IHJlc3BvbmQgaW4gdGhlIGdpdmVuXG4gKiB0aW1lIChpbiBtaWxsaXNlY29uZHMpIHRoZW4gdGhlIHByb21pc2UgaXMgcmVqZWN0ZWQuXG4gKlxuICogQGV4cG9ydFxuICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcbiAqIEBwYXJhbSB7YW55PX0gYXJnc1xuICogQHBhcmFtIHtudW1iZXI9fSB0aW1lb3V0XG4gKiBAcmV0dXJuc1xuICovXG5leHBvcnQgZnVuY3Rpb24gQ2FsbChuYW1lLCBhcmdzLCB0aW1lb3V0KSB7XG5cblx0Ly8gVGltZW91dCBpbmZpbml0ZSBieSBkZWZhdWx0XG5cdGlmICh0aW1lb3V0ID09IG51bGwpIHtcblx0XHR0aW1lb3V0ID0gMDtcblx0fVxuXG5cdC8vIENyZWF0ZSBhIHByb21pc2Vcblx0cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcblxuXHRcdC8vIENyZWF0ZSBhIHVuaXF1ZSBjYWxsYmFja0lEXG5cdFx0dmFyIGNhbGxiYWNrSUQ7XG5cdFx0ZG8ge1xuXHRcdFx0Y2FsbGJhY2tJRCA9IG5hbWUgKyAnLScgKyByYW5kb21GdW5jKCk7XG5cdFx0fSB3aGlsZSAoY2FsbGJhY2tzW2NhbGxiYWNrSURdKTtcblxuXHRcdHZhciB0aW1lb3V0SGFuZGxlO1xuXHRcdC8vIFNldCB0aW1lb3V0XG5cdFx0aWYgKHRpbWVvdXQgPiAwKSB7XG5cdFx0XHR0aW1lb3V0SGFuZGxlID0gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdHJlamVjdChFcnJvcignQ2FsbCB0byAnICsgbmFtZSArICcgdGltZWQgb3V0LiBSZXF1ZXN0IElEOiAnICsgY2FsbGJhY2tJRCkpO1xuXHRcdFx0fSwgdGltZW91dCk7XG5cdFx0fVxuXG5cdFx0Ly8gU3RvcmUgY2FsbGJhY2tcblx0XHRjYWxsYmFja3NbY2FsbGJhY2tJRF0gPSB7XG5cdFx0XHR0aW1lb3V0SGFuZGxlOiB0aW1lb3V0SGFuZGxlLFxuXHRcdFx0cmVqZWN0OiByZWplY3QsXG5cdFx0XHRyZXNvbHZlOiByZXNvbHZlXG5cdFx0fTtcblxuXHRcdHRyeSB7XG5cdFx0XHRjb25zdCBwYXlsb2FkID0ge1xuXHRcdFx0XHRuYW1lLFxuXHRcdFx0XHRhcmdzLFxuXHRcdFx0XHRjYWxsYmFja0lELFxuXHRcdFx0fTtcblxuXHRcdFx0Ly8gTWFrZSB0aGUgY2FsbFxuXHRcdFx0d2luZG93LldhaWxzSW52b2tlKCdDJyArIEpTT04uc3RyaW5naWZ5KHBheWxvYWQpKTtcblx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmVcblx0XHRcdGNvbnNvbGUuZXJyb3IoZSk7XG5cdFx0fVxuXHR9KTtcbn1cblxuXG5cbi8qKlxuICogQ2FsbGVkIGJ5IHRoZSBiYWNrZW5kIHRvIHJldHVybiBkYXRhIHRvIGEgcHJldmlvdXNseSBjYWxsZWRcbiAqIGJpbmRpbmcgaW52b2NhdGlvblxuICpcbiAqIEBleHBvcnRcbiAqIEBwYXJhbSB7c3RyaW5nfSBpbmNvbWluZ01lc3NhZ2VcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIENhbGxiYWNrKGluY29taW5nTWVzc2FnZSkge1xuXHQvLyBQYXJzZSB0aGUgbWVzc2FnZVxuXHRsZXQgbWVzc2FnZTtcblx0dHJ5IHtcblx0XHRtZXNzYWdlID0gSlNPTi5wYXJzZShpbmNvbWluZ01lc3NhZ2UpO1xuXHR9IGNhdGNoIChlKSB7XG5cdFx0Y29uc3QgZXJyb3IgPSBgSW52YWxpZCBKU09OIHBhc3NlZCB0byBjYWxsYmFjazogJHtlLm1lc3NhZ2V9LiBNZXNzYWdlOiAke2luY29taW5nTWVzc2FnZX1gO1xuXHRcdHJ1bnRpbWUuTG9nRGVidWcoZXJyb3IpO1xuXHRcdHRocm93IG5ldyBFcnJvcihlcnJvcik7XG5cdH1cblx0bGV0IGNhbGxiYWNrSUQgPSBtZXNzYWdlLmNhbGxiYWNraWQ7XG5cdGxldCBjYWxsYmFja0RhdGEgPSBjYWxsYmFja3NbY2FsbGJhY2tJRF07XG5cdGlmICghY2FsbGJhY2tEYXRhKSB7XG5cdFx0Y29uc3QgZXJyb3IgPSBgQ2FsbGJhY2sgJyR7Y2FsbGJhY2tJRH0nIG5vdCByZWdpc3RlcmVkISEhYDtcblx0XHRjb25zb2xlLmVycm9yKGVycm9yKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZVxuXHRcdHRocm93IG5ldyBFcnJvcihlcnJvcik7XG5cdH1cblx0Y2xlYXJUaW1lb3V0KGNhbGxiYWNrRGF0YS50aW1lb3V0SGFuZGxlKTtcblxuXHRkZWxldGUgY2FsbGJhY2tzW2NhbGxiYWNrSURdO1xuXG5cdGlmIChtZXNzYWdlLmVycm9yKSB7XG5cdFx0Y2FsbGJhY2tEYXRhLnJlamVjdChtZXNzYWdlLmVycm9yKTtcblx0fSBlbHNlIHtcblx0XHRjYWxsYmFja0RhdGEucmVzb2x2ZShtZXNzYWdlLnJlc3VsdCk7XG5cdH1cbn1cbiIsICIvKlxuIF8gICAgICAgX18gICAgICBfIF9fICAgIFxufCB8ICAgICAvIC9fX18gXyhfKSAvX19fX1xufCB8IC98IC8gLyBfXyBgLyAvIC8gX19fL1xufCB8LyB8LyAvIC9fLyAvIC8gKF9fICApIFxufF9fL3xfXy9cXF9fLF8vXy9fL19fX18vICBcblRoZSBlbGVjdHJvbiBhbHRlcm5hdGl2ZSBmb3IgR29cbihjKSBMZWEgQW50aG9ueSAyMDE5LXByZXNlbnRcbiovXG4vKiBqc2hpbnQgZXN2ZXJzaW9uOiA2ICovXG5cbmltcG9ydCB7Q2FsbH0gZnJvbSAnLi9jYWxscyc7XG5cbi8vIFRoaXMgaXMgd2hlcmUgd2UgYmluZCBnbyBtZXRob2Qgd3JhcHBlcnNcbndpbmRvdy5nbyA9IHt9O1xuXG5leHBvcnQgZnVuY3Rpb24gU2V0QmluZGluZ3MoYmluZGluZ3NNYXApIHtcblx0dHJ5IHtcblx0XHRiaW5kaW5nc01hcCA9IEpTT04ucGFyc2UoYmluZGluZ3NNYXApO1xuXHR9IGNhdGNoIChlKSB7XG5cdFx0Y29uc29sZS5lcnJvcihlKTtcblx0fVxuXG5cdC8vIEluaXRpYWxpc2UgdGhlIGJpbmRpbmdzIG1hcFxuXHR3aW5kb3cuZ28gPSB3aW5kb3cuZ28gfHwge307XG5cblx0Ly8gSXRlcmF0ZSBwYWNrYWdlIG5hbWVzXG5cdE9iamVjdC5rZXlzKGJpbmRpbmdzTWFwKS5mb3JFYWNoKChwYWNrYWdlTmFtZSkgPT4ge1xuXG5cdFx0Ly8gQ3JlYXRlIGlubmVyIG1hcCBpZiBpdCBkb2Vzbid0IGV4aXN0XG5cdFx0d2luZG93LmdvW3BhY2thZ2VOYW1lXSA9IHdpbmRvdy5nb1twYWNrYWdlTmFtZV0gfHwge307XG5cblx0XHQvLyBJdGVyYXRlIHN0cnVjdCBuYW1lc1xuXHRcdE9iamVjdC5rZXlzKGJpbmRpbmdzTWFwW3BhY2thZ2VOYW1lXSkuZm9yRWFjaCgoc3RydWN0TmFtZSkgPT4ge1xuXG5cdFx0XHQvLyBDcmVhdGUgaW5uZXIgbWFwIGlmIGl0IGRvZXNuJ3QgZXhpc3Rcblx0XHRcdHdpbmRvdy5nb1twYWNrYWdlTmFtZV1bc3RydWN0TmFtZV0gPSB3aW5kb3cuZ29bcGFja2FnZU5hbWVdW3N0cnVjdE5hbWVdIHx8IHt9O1xuXG5cdFx0XHRPYmplY3Qua2V5cyhiaW5kaW5nc01hcFtwYWNrYWdlTmFtZV1bc3RydWN0TmFtZV0pLmZvckVhY2goKG1ldGhvZE5hbWUpID0+IHtcblxuXHRcdFx0XHR3aW5kb3cuZ29bcGFja2FnZU5hbWVdW3N0cnVjdE5hbWVdW21ldGhvZE5hbWVdID0gZnVuY3Rpb24gKCkge1xuXG5cdFx0XHRcdFx0Ly8gTm8gdGltZW91dCBieSBkZWZhdWx0XG5cdFx0XHRcdFx0bGV0IHRpbWVvdXQgPSAwO1xuXG5cdFx0XHRcdFx0Ly8gQWN0dWFsIGZ1bmN0aW9uXG5cdFx0XHRcdFx0ZnVuY3Rpb24gZHluYW1pYygpIHtcblx0XHRcdFx0XHRcdGNvbnN0IGFyZ3MgPSBbXS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7XG5cdFx0XHRcdFx0XHRyZXR1cm4gQ2FsbChbcGFja2FnZU5hbWUsIHN0cnVjdE5hbWUsIG1ldGhvZE5hbWVdLmpvaW4oJy4nKSwgYXJncywgdGltZW91dCk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Ly8gQWxsb3cgc2V0dGluZyB0aW1lb3V0IHRvIGZ1bmN0aW9uXG5cdFx0XHRcdFx0ZHluYW1pYy5zZXRUaW1lb3V0ID0gZnVuY3Rpb24gKG5ld1RpbWVvdXQpIHtcblx0XHRcdFx0XHRcdHRpbWVvdXQgPSBuZXdUaW1lb3V0O1xuXHRcdFx0XHRcdH07XG5cblx0XHRcdFx0XHQvLyBBbGxvdyBnZXR0aW5nIHRpbWVvdXQgdG8gZnVuY3Rpb25cblx0XHRcdFx0XHRkeW5hbWljLmdldFRpbWVvdXQgPSBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gdGltZW91dDtcblx0XHRcdFx0XHR9O1xuXG5cdFx0XHRcdFx0cmV0dXJuIGR5bmFtaWM7XG5cdFx0XHRcdH0oKTtcblx0XHRcdH0pO1xuXHRcdH0pO1xuXHR9KTtcbn1cbiIsICIvKlxuIF9cdCAgIF9fXHQgIF8gX19cbnwgfFx0IC8gL19fXyBfKF8pIC9fX19fXG58IHwgL3wgLyAvIF9fIGAvIC8gLyBfX18vXG58IHwvIHwvIC8gL18vIC8gLyAoX18gIClcbnxfXy98X18vXFxfXyxfL18vXy9fX19fL1xuVGhlIGVsZWN0cm9uIGFsdGVybmF0aXZlIGZvciBHb1xuKGMpIExlYSBBbnRob255IDIwMTktcHJlc2VudFxuKi9cblxuLyoganNoaW50IGVzdmVyc2lvbjogOSAqL1xuXG5cbmltcG9ydCB7Q2FsbH0gZnJvbSBcIi4vY2FsbHNcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIFdpbmRvd1JlbG9hZCgpIHtcbiAgICB3aW5kb3cubG9jYXRpb24ucmVsb2FkKCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBXaW5kb3dSZWxvYWRBcHAoKSB7XG4gICAgd2luZG93LldhaWxzSW52b2tlKCdXUicpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gV2luZG93U2V0U3lzdGVtRGVmYXVsdFRoZW1lKCkge1xuICAgIHdpbmRvdy5XYWlsc0ludm9rZSgnV0FTRFQnKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIFdpbmRvd1NldExpZ2h0VGhlbWUoKSB7XG4gICAgd2luZG93LldhaWxzSW52b2tlKCdXQUxUJyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBXaW5kb3dTZXREYXJrVGhlbWUoKSB7XG4gICAgd2luZG93LldhaWxzSW52b2tlKCdXQURUJyk7XG59XG5cbi8qKlxuICogUGxhY2UgdGhlIHdpbmRvdyBpbiB0aGUgY2VudGVyIG9mIHRoZSBzY3JlZW5cbiAqXG4gKiBAZXhwb3J0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBXaW5kb3dDZW50ZXIoKSB7XG4gICAgd2luZG93LldhaWxzSW52b2tlKCdXYycpO1xufVxuXG4vKipcbiAqIFNldHMgdGhlIHdpbmRvdyB0aXRsZVxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSB0aXRsZVxuICogQGV4cG9ydFxuICovXG5leHBvcnQgZnVuY3Rpb24gV2luZG93U2V0VGl0bGUodGl0bGUpIHtcbiAgICB3aW5kb3cuV2FpbHNJbnZva2UoJ1dUJyArIHRpdGxlKTtcbn1cblxuLyoqXG4gKiBNYWtlcyB0aGUgd2luZG93IGdvIGZ1bGxzY3JlZW5cbiAqXG4gKiBAZXhwb3J0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBXaW5kb3dGdWxsc2NyZWVuKCkge1xuICAgIHdpbmRvdy5XYWlsc0ludm9rZSgnV0YnKTtcbn1cblxuLyoqXG4gKiBSZXZlcnRzIHRoZSB3aW5kb3cgZnJvbSBmdWxsc2NyZWVuXG4gKlxuICogQGV4cG9ydFxuICovXG5leHBvcnQgZnVuY3Rpb24gV2luZG93VW5mdWxsc2NyZWVuKCkge1xuICAgIHdpbmRvdy5XYWlsc0ludm9rZSgnV2YnKTtcbn1cblxuLyoqXG4gKiBTZXQgdGhlIFNpemUgb2YgdGhlIHdpbmRvd1xuICpcbiAqIEBleHBvcnRcbiAqIEBwYXJhbSB7bnVtYmVyfSB3aWR0aFxuICogQHBhcmFtIHtudW1iZXJ9IGhlaWdodFxuICovXG5leHBvcnQgZnVuY3Rpb24gV2luZG93U2V0U2l6ZSh3aWR0aCwgaGVpZ2h0KSB7XG4gICAgd2luZG93LldhaWxzSW52b2tlKCdXczonICsgd2lkdGggKyAnOicgKyBoZWlnaHQpO1xufVxuXG4vKipcbiAqIEdldCB0aGUgU2l6ZSBvZiB0aGUgd2luZG93XG4gKlxuICogQGV4cG9ydFxuICogQHJldHVybiB7UHJvbWlzZTx7dzogbnVtYmVyLCBoOiBudW1iZXJ9Pn0gVGhlIHNpemUgb2YgdGhlIHdpbmRvd1xuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBXaW5kb3dHZXRTaXplKCkge1xuICAgIHJldHVybiBDYWxsKFwiOndhaWxzOldpbmRvd0dldFNpemVcIik7XG59XG5cbi8qKlxuICogU2V0IHRoZSBtYXhpbXVtIHNpemUgb2YgdGhlIHdpbmRvd1xuICpcbiAqIEBleHBvcnRcbiAqIEBwYXJhbSB7bnVtYmVyfSB3aWR0aFxuICogQHBhcmFtIHtudW1iZXJ9IGhlaWdodFxuICovXG5leHBvcnQgZnVuY3Rpb24gV2luZG93U2V0TWF4U2l6ZSh3aWR0aCwgaGVpZ2h0KSB7XG4gICAgd2luZG93LldhaWxzSW52b2tlKCdXWjonICsgd2lkdGggKyAnOicgKyBoZWlnaHQpO1xufVxuXG4vKipcbiAqIFNldCB0aGUgbWluaW11bSBzaXplIG9mIHRoZSB3aW5kb3dcbiAqXG4gKiBAZXhwb3J0XG4gKiBAcGFyYW0ge251bWJlcn0gd2lkdGhcbiAqIEBwYXJhbSB7bnVtYmVyfSBoZWlnaHRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIFdpbmRvd1NldE1pblNpemUod2lkdGgsIGhlaWdodCkge1xuICAgIHdpbmRvdy5XYWlsc0ludm9rZSgnV3o6JyArIHdpZHRoICsgJzonICsgaGVpZ2h0KTtcbn1cblxuLyoqXG4gKiBTZXQgdGhlIFBvc2l0aW9uIG9mIHRoZSB3aW5kb3dcbiAqXG4gKiBAZXhwb3J0XG4gKiBAcGFyYW0ge251bWJlcn0geFxuICogQHBhcmFtIHtudW1iZXJ9IHlcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIFdpbmRvd1NldFBvc2l0aW9uKHgsIHkpIHtcbiAgICB3aW5kb3cuV2FpbHNJbnZva2UoJ1dwOicgKyB4ICsgJzonICsgeSk7XG59XG5cbi8qKlxuICogR2V0IHRoZSBQb3NpdGlvbiBvZiB0aGUgd2luZG93XG4gKlxuICogQGV4cG9ydFxuICogQHJldHVybiB7UHJvbWlzZTx7eDogbnVtYmVyLCB5OiBudW1iZXJ9Pn0gVGhlIHBvc2l0aW9uIG9mIHRoZSB3aW5kb3dcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIFdpbmRvd0dldFBvc2l0aW9uKCkge1xuICAgIHJldHVybiBDYWxsKFwiOndhaWxzOldpbmRvd0dldFBvc1wiKTtcbn1cblxuLyoqXG4gKiBIaWRlIHRoZSBXaW5kb3dcbiAqXG4gKiBAZXhwb3J0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBXaW5kb3dIaWRlKCkge1xuICAgIHdpbmRvdy5XYWlsc0ludm9rZSgnV0gnKTtcbn1cblxuLyoqXG4gKiBTaG93IHRoZSBXaW5kb3dcbiAqXG4gKiBAZXhwb3J0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBXaW5kb3dTaG93KCkge1xuICAgIHdpbmRvdy5XYWlsc0ludm9rZSgnV1MnKTtcbn1cblxuLyoqXG4gKiBNYXhpbWlzZSB0aGUgV2luZG93XG4gKlxuICogQGV4cG9ydFxuICovXG5leHBvcnQgZnVuY3Rpb24gV2luZG93TWF4aW1pc2UoKSB7XG4gICAgd2luZG93LldhaWxzSW52b2tlKCdXTScpO1xufVxuXG4vKipcbiAqIFRvZ2dsZSB0aGUgTWF4aW1pc2Ugb2YgdGhlIFdpbmRvd1xuICpcbiAqIEBleHBvcnRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIFdpbmRvd1RvZ2dsZU1heGltaXNlKCkge1xuICAgIHdpbmRvdy5XYWlsc0ludm9rZSgnV3QnKTtcbn1cblxuLyoqXG4gKiBVbm1heGltaXNlIHRoZSBXaW5kb3dcbiAqXG4gKiBAZXhwb3J0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBXaW5kb3dVbm1heGltaXNlKCkge1xuICAgIHdpbmRvdy5XYWlsc0ludm9rZSgnV1UnKTtcbn1cblxuLyoqXG4gKiBNaW5pbWlzZSB0aGUgV2luZG93XG4gKlxuICogQGV4cG9ydFxuICovXG5leHBvcnQgZnVuY3Rpb24gV2luZG93TWluaW1pc2UoKSB7XG4gICAgd2luZG93LldhaWxzSW52b2tlKCdXbScpO1xufVxuXG4vKipcbiAqIFVubWluaW1pc2UgdGhlIFdpbmRvd1xuICpcbiAqIEBleHBvcnRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIFdpbmRvd1VubWluaW1pc2UoKSB7XG4gICAgd2luZG93LldhaWxzSW52b2tlKCdXdScpO1xufVxuXG5cbi8qKlxuICogU2V0cyB0aGUgYmFja2dyb3VuZCBjb2xvdXIgb2YgdGhlIHdpbmRvd1xuICpcbiAqIEBleHBvcnRcbiAqIEBwYXJhbSB7bnVtYmVyfSBSIFJlZFxuICogQHBhcmFtIHtudW1iZXJ9IEcgR3JlZW5cbiAqIEBwYXJhbSB7bnVtYmVyfSBCIEJsdWVcbiAqIEBwYXJhbSB7bnVtYmVyfSBBIEFscGhhXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBXaW5kb3dTZXRSR0JBKFIsIEcsIEIsIEEpIHtcbiAgICBsZXQgcmdiYSA9IEpTT04uc3RyaW5naWZ5KHtyOiBSIHx8IDAsIGc6IEcgfHwgMCwgYjogQiB8fCAwLCBhOiBBIHx8IDI1NX0pO1xuICAgIHdpbmRvdy5XYWlsc0ludm9rZSgnV3I6JyArIHJnYmEpO1xufVxuXG4iLCAiLyoqXG4gKiBAZGVzY3JpcHRpb246IFVzZSB0aGUgc3lzdGVtIGRlZmF1bHQgYnJvd3NlciB0byBvcGVuIHRoZSB1cmxcbiAqIEBwYXJhbSB7c3RyaW5nfSB1cmwgXG4gKiBAcmV0dXJuIHt2b2lkfVxuICovXG5leHBvcnQgZnVuY3Rpb24gQnJvd3Nlck9wZW5VUkwodXJsKSB7XG4gIHdpbmRvdy5XYWlsc0ludm9rZSgnQk86JyArIHVybCk7XG59IiwgIi8qXG4gX1x0ICAgX19cdCAgXyBfX1xufCB8XHQgLyAvX19fIF8oXykgL19fX19cbnwgfCAvfCAvIC8gX18gYC8gLyAvIF9fXy9cbnwgfC8gfC8gLyAvXy8gLyAvIChfXyAgKVxufF9fL3xfXy9cXF9fLF8vXy9fL19fX18vXG5UaGUgZWxlY3Ryb24gYWx0ZXJuYXRpdmUgZm9yIEdvXG4oYykgTGVhIEFudGhvbnkgMjAxOS1wcmVzZW50XG4qL1xuLyoganNoaW50IGVzdmVyc2lvbjogOSAqL1xuaW1wb3J0ICogYXMgTG9nIGZyb20gJy4vbG9nJztcbmltcG9ydCB7ZXZlbnRMaXN0ZW5lcnMsIEV2ZW50c0VtaXQsIEV2ZW50c05vdGlmeSwgRXZlbnRzT2ZmLCBFdmVudHNPbiwgRXZlbnRzT25jZSwgRXZlbnRzT25NdWx0aXBsZX0gZnJvbSAnLi9ldmVudHMnO1xuaW1wb3J0IHtDYWxsLCBDYWxsYmFjaywgY2FsbGJhY2tzfSBmcm9tICcuL2NhbGxzJztcbmltcG9ydCB7U2V0QmluZGluZ3N9IGZyb20gXCIuL2JpbmRpbmdzXCI7XG5pbXBvcnQgKiBhcyBXaW5kb3cgZnJvbSBcIi4vd2luZG93XCI7XG5pbXBvcnQgKiBhcyBCcm93c2VyIGZyb20gXCIuL2Jyb3dzZXJcIjtcblxuXG5leHBvcnQgZnVuY3Rpb24gUXVpdCgpIHtcbiAgICB3aW5kb3cuV2FpbHNJbnZva2UoJ1EnKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIEVudmlyb25tZW50KCkge1xuICAgIHJldHVybiBDYWxsKFwiOndhaWxzOkVudmlyb25tZW50XCIpO1xufVxuXG4vLyBUaGUgSlMgcnVudGltZVxud2luZG93LnJ1bnRpbWUgPSB7XG4gICAgLi4uTG9nLFxuICAgIC4uLldpbmRvdyxcbiAgICAuLi5Ccm93c2VyLFxuICAgIEV2ZW50c09uLFxuICAgIEV2ZW50c09uY2UsXG4gICAgRXZlbnRzT25NdWx0aXBsZSxcbiAgICBFdmVudHNFbWl0LFxuICAgIEV2ZW50c09mZixcbiAgICBFbnZpcm9ubWVudCxcbiAgICBRdWl0XG59O1xuXG4vLyBJbnRlcm5hbCB3YWlscyBlbmRwb2ludHNcbndpbmRvdy53YWlscyA9IHtcbiAgICBDYWxsYmFjayxcbiAgICBFdmVudHNOb3RpZnksXG4gICAgU2V0QmluZGluZ3MsXG4gICAgZXZlbnRMaXN0ZW5lcnMsXG4gICAgY2FsbGJhY2tzLFxuICAgIGZsYWdzOiB7XG4gICAgICAgIGRpc2FibGVTY3JvbGxiYXJEcmFnOiBmYWxzZSxcbiAgICAgICAgZGlzYWJsZVdhaWxzRGVmYXVsdENvbnRleHRNZW51OiBmYWxzZSxcbiAgICAgICAgZW5hYmxlUmVzaXplOiBmYWxzZSxcbiAgICAgICAgZGVmYXVsdEN1cnNvcjogbnVsbCxcbiAgICAgICAgYm9yZGVyVGhpY2tuZXNzOiA2LFxuICAgICAgICBkYkNsaWNrSW50ZXJ2YWw6IDEwMCxcbiAgICB9XG59O1xuXG4vLyBTZXQgdGhlIGJpbmRpbmdzXG53aW5kb3cud2FpbHMuU2V0QmluZGluZ3Mod2luZG93LndhaWxzYmluZGluZ3MpO1xuZGVsZXRlIHdpbmRvdy53YWlscy5TZXRCaW5kaW5ncztcblxuLy8gVGhpcyBpcyBldmFsdWF0ZWQgYXQgYnVpbGQgdGltZSBpbiBwYWNrYWdlLmpzb25cbi8vIGNvbnN0IGRldiA9IDA7XG4vLyBjb25zdCBwcm9kdWN0aW9uID0gMTtcbmlmIChFTlYgPT09IDApIHtcbiAgICBkZWxldGUgd2luZG93LndhaWxzYmluZGluZ3M7XG59XG5cbnZhciBkcmFnVGltZU91dDtcbnZhciBkcmFnTGFzdFRpbWUgPSAwO1xuXG5mdW5jdGlvbiBkcmFnKCkge1xuICAgIHdpbmRvdy5XYWlsc0ludm9rZShcImRyYWdcIik7XG59XG5cbi8vIFNldHVwIGRyYWcgaGFuZGxlclxuLy8gQmFzZWQgb24gY29kZSBmcm9tOiBodHRwczovL2dpdGh1Yi5jb20vcGF0cjBudXMvRGVza0dhcFxud2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlZG93bicsIChlKSA9PiB7XG5cbiAgICAvLyBDaGVjayBmb3IgcmVzaXppbmdcbiAgICBpZiAod2luZG93LndhaWxzLmZsYWdzLnJlc2l6ZUVkZ2UpIHtcbiAgICAgICAgd2luZG93LldhaWxzSW52b2tlKFwicmVzaXplOlwiICsgd2luZG93LndhaWxzLmZsYWdzLnJlc2l6ZUVkZ2UpO1xuICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBDaGVjayBmb3IgZHJhZ2dpbmdcbiAgICBsZXQgY3VycmVudEVsZW1lbnQgPSBlLnRhcmdldDtcbiAgICB3aGlsZSAoY3VycmVudEVsZW1lbnQgIT0gbnVsbCkge1xuICAgICAgICBpZiAoY3VycmVudEVsZW1lbnQuaGFzQXR0cmlidXRlKCdkYXRhLXdhaWxzLW5vLWRyYWcnKSkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH0gZWxzZSBpZiAoY3VycmVudEVsZW1lbnQuaGFzQXR0cmlidXRlKCdkYXRhLXdhaWxzLWRyYWcnKSkge1xuICAgICAgICAgICAgaWYgKHdpbmRvdy53YWlscy5mbGFncy5kaXNhYmxlU2Nyb2xsYmFyRHJhZykge1xuICAgICAgICAgICAgICAgIC8vIFRoaXMgY2hlY2tzIGZvciBjbGlja3Mgb24gdGhlIHNjcm9sbCBiYXJcbiAgICAgICAgICAgICAgICBpZiAoZS5vZmZzZXRYID4gZS50YXJnZXQuY2xpZW50V2lkdGggfHwgZS5vZmZzZXRZID4gZS50YXJnZXQuY2xpZW50SGVpZ2h0KSB7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChuZXcgRGF0ZSgpLmdldFRpbWUoKSAtIGRyYWdMYXN0VGltZSA8IHdpbmRvdy53YWlscy5mbGFncy5kYkNsaWNrSW50ZXJ2YWwpIHtcbiAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQoZHJhZ1RpbWVPdXQpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZHJhZ1RpbWVPdXQgPSBzZXRUaW1lb3V0KGRyYWcsIHdpbmRvdy53YWlscy5mbGFncy5kYkNsaWNrSW50ZXJ2YWwpO1xuICAgICAgICAgICAgZHJhZ0xhc3RUaW1lID0gbmV3IERhdGUoKS5nZXRUaW1lKCk7XG4gICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjdXJyZW50RWxlbWVudCA9IGN1cnJlbnRFbGVtZW50LnBhcmVudEVsZW1lbnQ7XG4gICAgfVxufSk7XG5cbmZ1bmN0aW9uIHNldFJlc2l6ZShjdXJzb3IpIHtcbiAgICBkb2N1bWVudC5ib2R5LnN0eWxlLmN1cnNvciA9IGN1cnNvciB8fCB3aW5kb3cud2FpbHMuZmxhZ3MuZGVmYXVsdEN1cnNvcjtcbiAgICB3aW5kb3cud2FpbHMuZmxhZ3MucmVzaXplRWRnZSA9IGN1cnNvcjtcbn1cblxud2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsIGZ1bmN0aW9uIChlKSB7XG4gICAgaWYgKCF3aW5kb3cud2FpbHMuZmxhZ3MuZW5hYmxlUmVzaXplKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHdpbmRvdy53YWlscy5mbGFncy5kZWZhdWx0Q3Vyc29yID09IG51bGwpIHtcbiAgICAgICAgd2luZG93LndhaWxzLmZsYWdzLmRlZmF1bHRDdXJzb3IgPSBkb2N1bWVudC5ib2R5LnN0eWxlLmN1cnNvcjtcbiAgICB9XG4gICAgaWYgKHdpbmRvdy5vdXRlcldpZHRoIC0gZS5jbGllbnRYIDwgd2luZG93LndhaWxzLmZsYWdzLmJvcmRlclRoaWNrbmVzcyAmJiB3aW5kb3cub3V0ZXJIZWlnaHQgLSBlLmNsaWVudFkgPCB3aW5kb3cud2FpbHMuZmxhZ3MuYm9yZGVyVGhpY2tuZXNzKSB7XG4gICAgICAgIGRvY3VtZW50LmJvZHkuc3R5bGUuY3Vyc29yID0gXCJzZS1yZXNpemVcIjtcbiAgICB9XG4gICAgbGV0IHJpZ2h0Qm9yZGVyID0gd2luZG93Lm91dGVyV2lkdGggLSBlLmNsaWVudFggPCB3aW5kb3cud2FpbHMuZmxhZ3MuYm9yZGVyVGhpY2tuZXNzO1xuICAgIGxldCBsZWZ0Qm9yZGVyID0gZS5jbGllbnRYIDwgd2luZG93LndhaWxzLmZsYWdzLmJvcmRlclRoaWNrbmVzcztcbiAgICBsZXQgdG9wQm9yZGVyID0gZS5jbGllbnRZIDwgd2luZG93LndhaWxzLmZsYWdzLmJvcmRlclRoaWNrbmVzcztcbiAgICBsZXQgYm90dG9tQm9yZGVyID0gd2luZG93Lm91dGVySGVpZ2h0IC0gZS5jbGllbnRZIDwgd2luZG93LndhaWxzLmZsYWdzLmJvcmRlclRoaWNrbmVzcztcblxuICAgIC8vIElmIHdlIGFyZW4ndCBvbiBhbiBlZGdlLCBidXQgd2VyZSwgcmVzZXQgdGhlIGN1cnNvciB0byBkZWZhdWx0XG4gICAgaWYgKCFsZWZ0Qm9yZGVyICYmICFyaWdodEJvcmRlciAmJiAhdG9wQm9yZGVyICYmICFib3R0b21Cb3JkZXIgJiYgd2luZG93LndhaWxzLmZsYWdzLnJlc2l6ZUVkZ2UgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBzZXRSZXNpemUoKTtcbiAgICB9IGVsc2UgaWYgKHJpZ2h0Qm9yZGVyICYmIGJvdHRvbUJvcmRlcikgc2V0UmVzaXplKFwic2UtcmVzaXplXCIpO1xuICAgIGVsc2UgaWYgKGxlZnRCb3JkZXIgJiYgYm90dG9tQm9yZGVyKSBzZXRSZXNpemUoXCJzdy1yZXNpemVcIik7XG4gICAgZWxzZSBpZiAobGVmdEJvcmRlciAmJiB0b3BCb3JkZXIpIHNldFJlc2l6ZShcIm53LXJlc2l6ZVwiKTtcbiAgICBlbHNlIGlmICh0b3BCb3JkZXIgJiYgcmlnaHRCb3JkZXIpIHNldFJlc2l6ZShcIm5lLXJlc2l6ZVwiKTtcbiAgICBlbHNlIGlmIChsZWZ0Qm9yZGVyKSBzZXRSZXNpemUoXCJ3LXJlc2l6ZVwiKTtcbiAgICBlbHNlIGlmICh0b3BCb3JkZXIpIHNldFJlc2l6ZShcIm4tcmVzaXplXCIpO1xuICAgIGVsc2UgaWYgKGJvdHRvbUJvcmRlcikgc2V0UmVzaXplKFwicy1yZXNpemVcIik7XG4gICAgZWxzZSBpZiAocmlnaHRCb3JkZXIpIHNldFJlc2l6ZShcImUtcmVzaXplXCIpO1xuXG59KTtcblxuLy8gU2V0dXAgY29udGV4dCBtZW51IGhvb2tcbndpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdjb250ZXh0bWVudScsIGZ1bmN0aW9uIChlKSB7XG4gICAgaWYgKHdpbmRvdy53YWlscy5mbGFncy5kaXNhYmxlV2FpbHNEZWZhdWx0Q29udGV4dE1lbnUpIHtcbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cbn0pOyJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFrQkEsMEJBQXdCLE9BQU8sU0FBUztBQUl2QyxXQUFPLFlBQVksTUFBTSxRQUFRO0FBQUE7QUFTM0Isb0JBQWtCLFNBQVM7QUFDakMsbUJBQWUsS0FBSztBQUFBO0FBU2Qsb0JBQWtCLFNBQVM7QUFDakMsbUJBQWUsS0FBSztBQUFBO0FBU2Qsb0JBQWtCLFNBQVM7QUFDakMsbUJBQWUsS0FBSztBQUFBO0FB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 +//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiZGVza3RvcC9sb2cuanMiLCAiZGVza3RvcC9ldmVudHMuanMiLCAiZGVza3RvcC9jYWxscy5qcyIsICJkZXNrdG9wL2JpbmRpbmdzLmpzIiwgImRlc2t0b3Avd2luZG93LmpzIiwgImRlc2t0b3AvYnJvd3Nlci5qcyIsICJkZXNrdG9wL21haW4uanMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qXHJcbiBfICAgICAgIF9fICAgICAgXyBfX1xyXG58IHwgICAgIC8gL19fXyBfKF8pIC9fX19fXHJcbnwgfCAvfCAvIC8gX18gYC8gLyAvIF9fXy9cclxufCB8LyB8LyAvIC9fLyAvIC8gKF9fICApXHJcbnxfXy98X18vXFxfXyxfL18vXy9fX19fL1xyXG5UaGUgZWxlY3Ryb24gYWx0ZXJuYXRpdmUgZm9yIEdvXHJcbihjKSBMZWEgQW50aG9ueSAyMDE5LXByZXNlbnRcclxuKi9cclxuXHJcbi8qIGpzaGludCBlc3ZlcnNpb246IDYgKi9cclxuXHJcbi8qKlxyXG4gKiBTZW5kcyBhIGxvZyBtZXNzYWdlIHRvIHRoZSBiYWNrZW5kIHdpdGggdGhlIGdpdmVuIGxldmVsICsgbWVzc2FnZVxyXG4gKlxyXG4gKiBAcGFyYW0ge3N0cmluZ30gbGV2ZWxcclxuICogQHBhcmFtIHtzdHJpbmd9IG1lc3NhZ2VcclxuICovXHJcbmZ1bmN0aW9uIHNlbmRMb2dNZXNzYWdlKGxldmVsLCBtZXNzYWdlKSB7XHJcblxyXG5cdC8vIExvZyBNZXNzYWdlIGZvcm1hdDpcclxuXHQvLyBsW3R5cGVdW21lc3NhZ2VdXHJcblx0d2luZG93LldhaWxzSW52b2tlKCdMJyArIGxldmVsICsgbWVzc2FnZSk7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBMb2cgdGhlIGdpdmVuIHRyYWNlIG1lc3NhZ2Ugd2l0aCB0aGUgYmFja2VuZFxyXG4gKlxyXG4gKiBAZXhwb3J0XHJcbiAqIEBwYXJhbSB7c3RyaW5nfSBtZXNzYWdlXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gTG9nVHJhY2UobWVzc2FnZSkge1xyXG5cdHNlbmRMb2dNZXNzYWdlKCdUJywgbWVzc2FnZSk7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBMb2cgdGhlIGdpdmVuIG1lc3NhZ2Ugd2l0aCB0aGUgYmFja2VuZFxyXG4gKlxyXG4gKiBAZXhwb3J0XHJcbiAqIEBwYXJhbSB7c3RyaW5nfSBtZXNzYWdlXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gTG9nUHJpbnQobWVzc2FnZSkge1xyXG5cdHNlbmRMb2dNZXNzYWdlKCdQJywgbWVzc2FnZSk7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBMb2cgdGhlIGdpdmVuIGRlYnVnIG1lc3NhZ2Ugd2l0aCB0aGUgYmFja2VuZFxyXG4gKlxyXG4gKiBAZXhwb3J0XHJcbiAqIEBwYXJhbSB7c3RyaW5nfSBtZXNzYWdlXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gTG9nRGVidWcobWVzc2FnZSkge1xyXG5cdHNlbmRMb2dNZXNzYWdlKCdEJywgbWVzc2FnZSk7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBMb2cgdGhlIGdpdmVuIGluZm8gbWVzc2FnZSB3aXRoIHRoZSBiYWNrZW5kXHJcbiAqXHJcbiAqIEBleHBvcnRcclxuICogQHBhcmFtIHtzdHJpbmd9IG1lc3NhZ2VcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBMb2dJbmZvKG1lc3NhZ2UpIHtcclxuXHRzZW5kTG9nTWVzc2FnZSgnSScsIG1lc3NhZ2UpO1xyXG59XHJcblxyXG4vKipcclxuICogTG9nIHRoZSBnaXZlbiB3YXJuaW5nIG1lc3NhZ2Ugd2l0aCB0aGUgYmFja2VuZFxyXG4gKlxyXG4gKiBAZXhwb3J0XHJcbiAqIEBwYXJhbSB7c3RyaW5nfSBtZXNzYWdlXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gTG9nV2FybmluZyhtZXNzYWdlKSB7XHJcblx0c2VuZExvZ01lc3NhZ2UoJ1cnLCBtZXNzYWdlKTtcclxufVxyXG5cclxuLyoqXHJcbiAqIExvZyB0aGUgZ2l2ZW4gZXJyb3IgbWVzc2FnZSB3aXRoIHRoZSBiYWNrZW5kXHJcbiAqXHJcbiAqIEBleHBvcnRcclxuICogQHBhcmFtIHtzdHJpbmd9IG1lc3NhZ2VcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBMb2dFcnJvcihtZXNzYWdlKSB7XHJcblx0c2VuZExvZ01lc3NhZ2UoJ0UnLCBtZXNzYWdlKTtcclxufVxyXG5cclxuLyoqXHJcbiAqIExvZyB0aGUgZ2l2ZW4gZmF0YWwgbWVzc2FnZSB3aXRoIHRoZSBiYWNrZW5kXHJcbiAqXHJcbiAqIEBleHBvcnRcclxuICogQHBhcmFtIHtzdHJpbmd9IG1lc3NhZ2VcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBMb2dGYXRhbChtZXNzYWdlKSB7XHJcblx0c2VuZExvZ01lc3NhZ2UoJ0YnLCBtZXNzYWdlKTtcclxufVxyXG5cclxuLyoqXHJcbiAqIFNldHMgdGhlIExvZyBsZXZlbCB0byB0aGUgZ2l2ZW4gbG9nIGxldmVsXHJcbiAqXHJcbiAqIEBleHBvcnRcclxuICogQHBhcmFtIHtudW1iZXJ9IGxvZ2xldmVsXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gU2V0TG9nTGV2ZWwobG9nbGV2ZWwpIHtcclxuXHRzZW5kTG9nTWVzc2FnZSgnUycsIGxvZ2xldmVsKTtcclxufVxyXG5cclxuLy8gTG9nIGxldmVsc1xyXG5leHBvcnQgY29uc3QgTG9nTGV2ZWwgPSB7XHJcblx0VFJBQ0U6IDEsXHJcblx0REVCVUc6IDIsXHJcblx0SU5GTzogMyxcclxuXHRXQVJOSU5HOiA0LFxyXG5cdEVSUk9SOiA1LFxyXG59O1xyXG4iLCAiLypcclxuIF8gICAgICAgX18gICAgICBfIF9fXHJcbnwgfCAgICAgLyAvX19fIF8oXykgL19fX19cclxufCB8IC98IC8gLyBfXyBgLyAvIC8gX19fL1xyXG58IHwvIHwvIC8gL18vIC8gLyAoX18gIClcclxufF9fL3xfXy9cXF9fLF8vXy9fL19fX18vXHJcblRoZSBlbGVjdHJvbiBhbHRlcm5hdGl2ZSBmb3IgR29cclxuKGMpIExlYSBBbnRob255IDIwMTktcHJlc2VudFxyXG4qL1xyXG4vKiBqc2hpbnQgZXN2ZXJzaW9uOiA2ICovXHJcblxyXG4vLyBEZWZpbmVzIGEgc2luZ2xlIGxpc3RlbmVyIHdpdGggYSBtYXhpbXVtIG51bWJlciBvZiB0aW1lcyB0byBjYWxsYmFja1xyXG5cclxuLyoqXHJcbiAqIFRoZSBMaXN0ZW5lciBjbGFzcyBkZWZpbmVzIGEgbGlzdGVuZXIhIDotKVxyXG4gKlxyXG4gKiBAY2xhc3MgTGlzdGVuZXJcclxuICovXHJcbmNsYXNzIExpc3RlbmVyIHtcclxuICAgIC8qKlxyXG4gICAgICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiBMaXN0ZW5lci5cclxuICAgICAqIEBwYXJhbSB7ZnVuY3Rpb259IGNhbGxiYWNrXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gbWF4Q2FsbGJhY2tzXHJcbiAgICAgKiBAbWVtYmVyb2YgTGlzdGVuZXJcclxuICAgICAqL1xyXG4gICAgY29uc3RydWN0b3IoY2FsbGJhY2ssIG1heENhbGxiYWNrcykge1xyXG4gICAgICAgIC8vIERlZmF1bHQgb2YgLTEgbWVhbnMgaW5maW5pdGVcclxuICAgICAgICBtYXhDYWxsYmFja3MgPSBtYXhDYWxsYmFja3MgfHwgLTE7XHJcbiAgICAgICAgLy8gQ2FsbGJhY2sgaW52b2tlcyB0aGUgY2FsbGJhY2sgd2l0aCB0aGUgZ2l2ZW4gZGF0YVxyXG4gICAgICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGlzIGxpc3RlbmVyIHNob3VsZCBiZSBkZXN0cm95ZWRcclxuICAgICAgICB0aGlzLkNhbGxiYWNrID0gKGRhdGEpID0+IHtcclxuICAgICAgICAgICAgY2FsbGJhY2suYXBwbHkobnVsbCwgZGF0YSk7XHJcbiAgICAgICAgICAgIC8vIElmIG1heENhbGxiYWNrcyBpcyBpbmZpbml0ZSwgcmV0dXJuIGZhbHNlIChkbyBub3QgZGVzdHJveSlcclxuICAgICAgICAgICAgaWYgKG1heENhbGxiYWNrcyA9PT0gLTEpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvLyBEZWNyZW1lbnQgbWF4Q2FsbGJhY2tzLiBSZXR1cm4gdHJ1ZSBpZiBub3cgMCwgb3RoZXJ3aXNlIGZhbHNlXHJcbiAgICAgICAgICAgIG1heENhbGxiYWNrcyAtPSAxO1xyXG4gICAgICAgICAgICByZXR1cm4gbWF4Q2FsbGJhY2tzID09PSAwO1xyXG4gICAgICAgIH07XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBjb25zdCBldmVudExpc3RlbmVycyA9IHt9O1xyXG5cclxuLyoqXHJcbiAqIFJlZ2lzdGVycyBhbiBldmVudCBsaXN0ZW5lciB0aGF0IHdpbGwgYmUgaW52b2tlZCBgbWF4Q2FsbGJhY2tzYCB0aW1lcyBiZWZvcmUgYmVpbmcgZGVzdHJveWVkXHJcbiAqXHJcbiAqIEBleHBvcnRcclxuICogQHBhcmFtIHtzdHJpbmd9IGV2ZW50TmFtZVxyXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBjYWxsYmFja1xyXG4gKiBAcGFyYW0ge251bWJlcn0gbWF4Q2FsbGJhY2tzXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gRXZlbnRzT25NdWx0aXBsZShldmVudE5hbWUsIGNhbGxiYWNrLCBtYXhDYWxsYmFja3MpIHtcclxuICAgIGV2ZW50TGlzdGVuZXJzW2V2ZW50TmFtZV0gPSBldmVudExpc3RlbmVyc1tldmVudE5hbWVdIHx8IFtdO1xyXG4gICAgY29uc3QgdGhpc0xpc3RlbmVyID0gbmV3IExpc3RlbmVyKGNhbGxiYWNrLCBtYXhDYWxsYmFja3MpO1xyXG4gICAgZXZlbnRMaXN0ZW5lcnNbZXZlbnROYW1lXS5wdXNoKHRoaXNMaXN0ZW5lcik7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBSZWdpc3RlcnMgYW4gZXZlbnQgbGlzdGVuZXIgdGhhdCB3aWxsIGJlIGludm9rZWQgZXZlcnkgdGltZSB0aGUgZXZlbnQgaXMgZW1pdHRlZFxyXG4gKlxyXG4gKiBAZXhwb3J0XHJcbiAqIEBwYXJhbSB7c3RyaW5nfSBldmVudE5hbWVcclxuICogQHBhcmFtIHtmdW5jdGlvbn0gY2FsbGJhY2tcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBFdmVudHNPbihldmVudE5hbWUsIGNhbGxiYWNrKSB7XHJcbiAgICBFdmVudHNPbk11bHRpcGxlKGV2ZW50TmFtZSwgY2FsbGJhY2ssIC0xKTtcclxufVxyXG5cclxuLyoqXHJcbiAqIFJlZ2lzdGVycyBhbiBldmVudCBsaXN0ZW5lciB0aGF0IHdpbGwgYmUgaW52b2tlZCBvbmNlIHRoZW4gZGVzdHJveWVkXHJcbiAqXHJcbiAqIEBleHBvcnRcclxuICogQHBhcmFtIHtzdHJpbmd9IGV2ZW50TmFtZVxyXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBjYWxsYmFja1xyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIEV2ZW50c09uY2UoZXZlbnROYW1lLCBjYWxsYmFjaykge1xyXG4gICAgRXZlbnRzT25NdWx0aXBsZShldmVudE5hbWUsIGNhbGxiYWNrLCAxKTtcclxufVxyXG5cclxuZnVuY3Rpb24gbm90aWZ5TGlzdGVuZXJzKGV2ZW50RGF0YSkge1xyXG5cclxuICAgIC8vIEdldCB0aGUgZXZlbnQgbmFtZVxyXG4gICAgbGV0IGV2ZW50TmFtZSA9IGV2ZW50RGF0YS5uYW1lO1xyXG5cclxuICAgIC8vIENoZWNrIGlmIHdlIGhhdmUgYW55IGxpc3RlbmVycyBmb3IgdGhpcyBldmVudFxyXG4gICAgaWYgKGV2ZW50TGlzdGVuZXJzW2V2ZW50TmFtZV0pIHtcclxuXHJcbiAgICAgICAgLy8gS2VlcCBhIGxpc3Qgb2YgbGlzdGVuZXIgaW5kZXhlcyB0byBkZXN0cm95XHJcbiAgICAgICAgY29uc3QgbmV3RXZlbnRMaXN0ZW5lckxpc3QgPSBldmVudExpc3RlbmVyc1tldmVudE5hbWVdLnNsaWNlKCk7XHJcblxyXG4gICAgICAgIC8vIEl0ZXJhdGUgbGlzdGVuZXJzXHJcbiAgICAgICAgZm9yIChsZXQgY291bnQgPSAwOyBjb3VudCA8IGV2ZW50TGlzdGVuZXJzW2V2ZW50TmFtZV0ubGVuZ3RoOyBjb3VudCArPSAxKSB7XHJcblxyXG4gICAgICAgICAgICAvLyBHZXQgbmV4dCBsaXN0ZW5lclxyXG4gICAgICAgICAgICBjb25zdCBsaXN0ZW5lciA9IGV2ZW50TGlzdGVuZXJzW2V2ZW50TmFtZV1bY291bnRdO1xyXG5cclxuICAgICAgICAgICAgbGV0IGRhdGEgPSBldmVudERhdGEuZGF0YTtcclxuXHJcbiAgICAgICAgICAgIC8vIERvIHRoZSBjYWxsYmFja1xyXG4gICAgICAgICAgICBjb25zdCBkZXN0cm95ID0gbGlzdGVuZXIuQ2FsbGJhY2soZGF0YSk7XHJcbiAgICAgICAgICAgIGlmIChkZXN0cm95KSB7XHJcbiAgICAgICAgICAgICAgICAvLyBpZiB0aGUgbGlzdGVuZXIgaW5kaWNhdGVkIHRvIGRlc3Ryb3kgaXRzZWxmLCBhZGQgaXQgdG8gdGhlIGRlc3Ryb3kgbGlzdFxyXG4gICAgICAgICAgICAgICAgbmV3RXZlbnRMaXN0ZW5lckxpc3Quc3BsaWNlKGNvdW50LCAxKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gVXBkYXRlIGNhbGxiYWNrcyB3aXRoIG5ldyBsaXN0IG9mIGxpc3RlbmVyc1xyXG4gICAgICAgIGV2ZW50TGlzdGVuZXJzW2V2ZW50TmFtZV0gPSBuZXdFdmVudExpc3RlbmVyTGlzdDtcclxuICAgIH1cclxufVxyXG5cclxuLyoqXHJcbiAqIE5vdGlmeSBpbmZvcm1zIGZyb250ZW5kIGxpc3RlbmVycyB0aGF0IGFuIGV2ZW50IHdhcyBlbWl0dGVkIHdpdGggdGhlIGdpdmVuIGRhdGFcclxuICpcclxuICogQGV4cG9ydFxyXG4gKiBAcGFyYW0ge3N0cmluZ30gbm90aWZ5TWVzc2FnZSAtIGVuY29kZWQgbm90aWZpY2F0aW9uIG1lc3NhZ2VcclxuXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gRXZlbnRzTm90aWZ5KG5vdGlmeU1lc3NhZ2UpIHtcclxuICAgIC8vIFBhcnNlIHRoZSBtZXNzYWdlXHJcbiAgICBsZXQgbWVzc2FnZTtcclxuICAgIHRyeSB7XHJcbiAgICAgICAgbWVzc2FnZSA9IEpTT04ucGFyc2Uobm90aWZ5TWVzc2FnZSk7XHJcbiAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgY29uc3QgZXJyb3IgPSAnSW52YWxpZCBKU09OIHBhc3NlZCB0byBOb3RpZnk6ICcgKyBub3RpZnlNZXNzYWdlO1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihlcnJvcik7XHJcbiAgICB9XHJcbiAgICBub3RpZnlMaXN0ZW5lcnMobWVzc2FnZSk7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBFbWl0IGFuIGV2ZW50IHdpdGggdGhlIGdpdmVuIG5hbWUgYW5kIGRhdGFcclxuICpcclxuICogQGV4cG9ydFxyXG4gKiBAcGFyYW0ge3N0cmluZ30gZXZlbnROYW1lXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gRXZlbnRzRW1pdChldmVudE5hbWUpIHtcclxuXHJcbiAgICBjb25zdCBwYXlsb2FkID0ge1xyXG4gICAgICAgIG5hbWU6IGV2ZW50TmFtZSxcclxuICAgICAgICBkYXRhOiBbXS5zbGljZS5hcHBseShhcmd1bWVudHMpLnNsaWNlKDEpLFxyXG4gICAgfTtcclxuXHJcbiAgICAvLyBOb3RpZnkgSlMgbGlzdGVuZXJzXHJcbiAgICBub3RpZnlMaXN0ZW5lcnMocGF5bG9hZCk7XHJcblxyXG4gICAgLy8gTm90aWZ5IEdvIGxpc3RlbmVyc1xyXG4gICAgd2luZG93LldhaWxzSW52b2tlKCdFRScgKyBKU09OLnN0cmluZ2lmeShwYXlsb2FkKSk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBFdmVudHNPZmYoZXZlbnROYW1lKSB7XHJcbiAgICAvLyBSZW1vdmUgbG9jYWwgbGlzdGVuZXJzXHJcbiAgICBkZWxldGUgZXZlbnRMaXN0ZW5lcnNbZXZlbnROYW1lXTtcclxuXHJcbiAgICAvLyBOb3RpZnkgR28gbGlzdGVuZXJzXHJcbiAgICB3aW5kb3cuV2FpbHNJbnZva2UoJ0VYJyArIGV2ZW50TmFtZSk7XHJcbn0iLCAiLypcclxuIF8gICAgICAgX18gICAgICBfIF9fXHJcbnwgfCAgICAgLyAvX19fIF8oXykgL19fX19cclxufCB8IC98IC8gLyBfXyBgLyAvIC8gX19fL1xyXG58IHwvIHwvIC8gL18vIC8gLyAoX18gIClcclxufF9fL3xfXy9cXF9fLF8vXy9fL19fX18vXHJcblRoZSBlbGVjdHJvbiBhbHRlcm5hdGl2ZSBmb3IgR29cclxuKGMpIExlYSBBbnRob255IDIwMTktcHJlc2VudFxyXG4qL1xyXG4vKiBqc2hpbnQgZXN2ZXJzaW9uOiA2ICovXHJcblxyXG5leHBvcnQgY29uc3QgY2FsbGJhY2tzID0ge307XHJcblxyXG4vKipcclxuICogUmV0dXJucyBhIG51bWJlciBmcm9tIHRoZSBuYXRpdmUgYnJvd3NlciByYW5kb20gZnVuY3Rpb25cclxuICpcclxuICogQHJldHVybnMgbnVtYmVyXHJcbiAqL1xyXG5mdW5jdGlvbiBjcnlwdG9SYW5kb20oKSB7XHJcblx0dmFyIGFycmF5ID0gbmV3IFVpbnQzMkFycmF5KDEpO1xyXG5cdHJldHVybiB3aW5kb3cuY3J5cHRvLmdldFJhbmRvbVZhbHVlcyhhcnJheSlbMF07XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBSZXR1cm5zIGEgbnVtYmVyIHVzaW5nIGRhIG9sZC1za29vbCBNYXRoLlJhbmRvbVxyXG4gKiBJIGxpa2VzIHRvIGNhbGwgaXQgTE9MUmFuZG9tXHJcbiAqXHJcbiAqIEByZXR1cm5zIG51bWJlclxyXG4gKi9cclxuZnVuY3Rpb24gYmFzaWNSYW5kb20oKSB7XHJcblx0cmV0dXJuIE1hdGgucmFuZG9tKCkgKiA5MDA3MTk5MjU0NzQwOTkxO1xyXG59XHJcblxyXG4vLyBQaWNrIGEgcmFuZG9tIG51bWJlciBmdW5jdGlvbiBiYXNlZCBvbiBicm93c2VyIGNhcGFiaWxpdHlcclxudmFyIHJhbmRvbUZ1bmM7XHJcbmlmICh3aW5kb3cuY3J5cHRvKSB7XHJcblx0cmFuZG9tRnVuYyA9IGNyeXB0b1JhbmRvbTtcclxufSBlbHNlIHtcclxuXHRyYW5kb21GdW5jID0gYmFzaWNSYW5kb207XHJcbn1cclxuXHJcblxyXG4vKipcclxuICogQ2FsbCBzZW5kcyBhIG1lc3NhZ2UgdG8gdGhlIGJhY2tlbmQgdG8gY2FsbCB0aGUgYmluZGluZyB3aXRoIHRoZVxyXG4gKiBnaXZlbiBkYXRhLiBBIHByb21pc2UgaXMgcmV0dXJuZWQgYW5kIHdpbGwgYmUgY29tcGxldGVkIHdoZW4gdGhlXHJcbiAqIGJhY2tlbmQgcmVzcG9uZHMuIFRoaXMgd2lsbCBiZSByZXNvbHZlZCB3aGVuIHRoZSBjYWxsIHdhcyBzdWNjZXNzZnVsXHJcbiAqIG9yIHJlamVjdGVkIGlmIGFuIGVycm9yIGlzIHBhc3NlZCBiYWNrLlxyXG4gKiBUaGVyZSBpcyBhIHRpbWVvdXQgbWVjaGFuaXNtLiBJZiB0aGUgY2FsbCBkb2Vzbid0IHJlc3BvbmQgaW4gdGhlIGdpdmVuXHJcbiAqIHRpbWUgKGluIG1pbGxpc2Vjb25kcykgdGhlbiB0aGUgcHJvbWlzZSBpcyByZWplY3RlZC5cclxuICpcclxuICogQGV4cG9ydFxyXG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxyXG4gKiBAcGFyYW0ge2FueT19IGFyZ3NcclxuICogQHBhcmFtIHtudW1iZXI9fSB0aW1lb3V0XHJcbiAqIEByZXR1cm5zXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gQ2FsbChuYW1lLCBhcmdzLCB0aW1lb3V0KSB7XHJcblxyXG5cdC8vIFRpbWVvdXQgaW5maW5pdGUgYnkgZGVmYXVsdFxyXG5cdGlmICh0aW1lb3V0ID09IG51bGwpIHtcclxuXHRcdHRpbWVvdXQgPSAwO1xyXG5cdH1cclxuXHJcblx0Ly8gQ3JlYXRlIGEgcHJvbWlzZVxyXG5cdHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XHJcblxyXG5cdFx0Ly8gQ3JlYXRlIGEgdW5pcXVlIGNhbGxiYWNrSURcclxuXHRcdHZhciBjYWxsYmFja0lEO1xyXG5cdFx0ZG8ge1xyXG5cdFx0XHRjYWxsYmFja0lEID0gbmFtZSArICctJyArIHJhbmRvbUZ1bmMoKTtcclxuXHRcdH0gd2hpbGUgKGNhbGxiYWNrc1tjYWxsYmFja0lEXSk7XHJcblxyXG5cdFx0dmFyIHRpbWVvdXRIYW5kbGU7XHJcblx0XHQvLyBTZXQgdGltZW91dFxyXG5cdFx0aWYgKHRpbWVvdXQgPiAwKSB7XHJcblx0XHRcdHRpbWVvdXRIYW5kbGUgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcclxuXHRcdFx0XHRyZWplY3QoRXJyb3IoJ0NhbGwgdG8gJyArIG5hbWUgKyAnIHRpbWVkIG91dC4gUmVxdWVzdCBJRDogJyArIGNhbGxiYWNrSUQpKTtcclxuXHRcdFx0fSwgdGltZW91dCk7XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gU3RvcmUgY2FsbGJhY2tcclxuXHRcdGNhbGxiYWNrc1tjYWxsYmFja0lEXSA9IHtcclxuXHRcdFx0dGltZW91dEhhbmRsZTogdGltZW91dEhhbmRsZSxcclxuXHRcdFx0cmVqZWN0OiByZWplY3QsXHJcblx0XHRcdHJlc29sdmU6IHJlc29sdmVcclxuXHRcdH07XHJcblxyXG5cdFx0dHJ5IHtcclxuXHRcdFx0Y29uc3QgcGF5bG9hZCA9IHtcclxuXHRcdFx0XHRuYW1lLFxyXG5cdFx0XHRcdGFyZ3MsXHJcblx0XHRcdFx0Y2FsbGJhY2tJRCxcclxuXHRcdFx0fTtcclxuXHJcblx0XHRcdC8vIE1ha2UgdGhlIGNhbGxcclxuXHRcdFx0d2luZG93LldhaWxzSW52b2tlKCdDJyArIEpTT04uc3RyaW5naWZ5KHBheWxvYWQpKTtcclxuXHRcdH0gY2F0Y2ggKGUpIHtcclxuXHRcdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lXHJcblx0XHRcdGNvbnNvbGUuZXJyb3IoZSk7XHJcblx0XHR9XHJcblx0fSk7XHJcbn1cclxuXHJcblxyXG5cclxuLyoqXHJcbiAqIENhbGxlZCBieSB0aGUgYmFja2VuZCB0byByZXR1cm4gZGF0YSB0byBhIHByZXZpb3VzbHkgY2FsbGVkXHJcbiAqIGJpbmRpbmcgaW52b2NhdGlvblxyXG4gKlxyXG4gKiBAZXhwb3J0XHJcbiAqIEBwYXJhbSB7c3RyaW5nfSBpbmNvbWluZ01lc3NhZ2VcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBDYWxsYmFjayhpbmNvbWluZ01lc3NhZ2UpIHtcclxuXHQvLyBQYXJzZSB0aGUgbWVzc2FnZVxyXG5cdGxldCBtZXNzYWdlO1xyXG5cdHRyeSB7XHJcblx0XHRtZXNzYWdlID0gSlNPTi5wYXJzZShpbmNvbWluZ01lc3NhZ2UpO1xyXG5cdH0gY2F0Y2ggKGUpIHtcclxuXHRcdGNvbnN0IGVycm9yID0gYEludmFsaWQgSlNPTiBwYXNzZWQgdG8gY2FsbGJhY2s6ICR7ZS5tZXNzYWdlfS4gTWVzc2FnZTogJHtpbmNvbWluZ01lc3NhZ2V9YDtcclxuXHRcdHJ1bnRpbWUuTG9nRGVidWcoZXJyb3IpO1xyXG5cdFx0dGhyb3cgbmV3IEVycm9yKGVycm9yKTtcclxuXHR9XHJcblx0bGV0IGNhbGxiYWNrSUQgPSBtZXNzYWdlLmNhbGxiYWNraWQ7XHJcblx0bGV0IGNhbGxiYWNrRGF0YSA9IGNhbGxiYWNrc1tjYWxsYmFja0lEXTtcclxuXHRpZiAoIWNhbGxiYWNrRGF0YSkge1xyXG5cdFx0Y29uc3QgZXJyb3IgPSBgQ2FsbGJhY2sgJyR7Y2FsbGJhY2tJRH0nIG5vdCByZWdpc3RlcmVkISEhYDtcclxuXHRcdGNvbnNvbGUuZXJyb3IoZXJyb3IpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lXHJcblx0XHR0aHJvdyBuZXcgRXJyb3IoZXJyb3IpO1xyXG5cdH1cclxuXHRjbGVhclRpbWVvdXQoY2FsbGJhY2tEYXRhLnRpbWVvdXRIYW5kbGUpO1xyXG5cclxuXHRkZWxldGUgY2FsbGJhY2tzW2NhbGxiYWNrSURdO1xyXG5cclxuXHRpZiAobWVzc2FnZS5lcnJvcikge1xyXG5cdFx0Y2FsbGJhY2tEYXRhLnJlamVjdChtZXNzYWdlLmVycm9yKTtcclxuXHR9IGVsc2Uge1xyXG5cdFx0Y2FsbGJhY2tEYXRhLnJlc29sdmUobWVzc2FnZS5yZXN1bHQpO1xyXG5cdH1cclxufVxyXG4iLCAiLypcclxuIF8gICAgICAgX18gICAgICBfIF9fICAgIFxyXG58IHwgICAgIC8gL19fXyBfKF8pIC9fX19fXHJcbnwgfCAvfCAvIC8gX18gYC8gLyAvIF9fXy9cclxufCB8LyB8LyAvIC9fLyAvIC8gKF9fICApIFxyXG58X18vfF9fL1xcX18sXy9fL18vX19fXy8gIFxyXG5UaGUgZWxlY3Ryb24gYWx0ZXJuYXRpdmUgZm9yIEdvXHJcbihjKSBMZWEgQW50aG9ueSAyMDE5LXByZXNlbnRcclxuKi9cclxuLyoganNoaW50IGVzdmVyc2lvbjogNiAqL1xyXG5cclxuaW1wb3J0IHtDYWxsfSBmcm9tICcuL2NhbGxzJztcclxuXHJcbi8vIFRoaXMgaXMgd2hlcmUgd2UgYmluZCBnbyBtZXRob2Qgd3JhcHBlcnNcclxud2luZG93LmdvID0ge307XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gU2V0QmluZGluZ3MoYmluZGluZ3NNYXApIHtcclxuXHR0cnkge1xyXG5cdFx0YmluZGluZ3NNYXAgPSBKU09OLnBhcnNlKGJpbmRpbmdzTWFwKTtcclxuXHR9IGNhdGNoIChlKSB7XHJcblx0XHRjb25zb2xlLmVycm9yKGUpO1xyXG5cdH1cclxuXHJcblx0Ly8gSW5pdGlhbGlzZSB0aGUgYmluZGluZ3MgbWFwXHJcblx0d2luZG93LmdvID0gd2luZG93LmdvIHx8IHt9O1xyXG5cclxuXHQvLyBJdGVyYXRlIHBhY2thZ2UgbmFtZXNcclxuXHRPYmplY3Qua2V5cyhiaW5kaW5nc01hcCkuZm9yRWFjaCgocGFja2FnZU5hbWUpID0+IHtcclxuXHJcblx0XHQvLyBDcmVhdGUgaW5uZXIgbWFwIGlmIGl0IGRvZXNuJ3QgZXhpc3RcclxuXHRcdHdpbmRvdy5nb1twYWNrYWdlTmFtZV0gPSB3aW5kb3cuZ29bcGFja2FnZU5hbWVdIHx8IHt9O1xyXG5cclxuXHRcdC8vIEl0ZXJhdGUgc3RydWN0IG5hbWVzXHJcblx0XHRPYmplY3Qua2V5cyhiaW5kaW5nc01hcFtwYWNrYWdlTmFtZV0pLmZvckVhY2goKHN0cnVjdE5hbWUpID0+IHtcclxuXHJcblx0XHRcdC8vIENyZWF0ZSBpbm5lciBtYXAgaWYgaXQgZG9lc24ndCBleGlzdFxyXG5cdFx0XHR3aW5kb3cuZ29bcGFja2FnZU5hbWVdW3N0cnVjdE5hbWVdID0gd2luZG93LmdvW3BhY2thZ2VOYW1lXVtzdHJ1Y3ROYW1lXSB8fCB7fTtcclxuXHJcblx0XHRcdE9iamVjdC5rZXlzKGJpbmRpbmdzTWFwW3BhY2thZ2VOYW1lXVtzdHJ1Y3ROYW1lXSkuZm9yRWFjaCgobWV0aG9kTmFtZSkgPT4ge1xyXG5cclxuXHRcdFx0XHR3aW5kb3cuZ29bcGFja2FnZU5hbWVdW3N0cnVjdE5hbWVdW21ldGhvZE5hbWVdID0gZnVuY3Rpb24gKCkge1xyXG5cclxuXHRcdFx0XHRcdC8vIE5vIHRpbWVvdXQgYnkgZGVmYXVsdFxyXG5cdFx0XHRcdFx0bGV0IHRpbWVvdXQgPSAwO1xyXG5cclxuXHRcdFx0XHRcdC8vIEFjdHVhbCBmdW5jdGlvblxyXG5cdFx0XHRcdFx0ZnVuY3Rpb24gZHluYW1pYygpIHtcclxuXHRcdFx0XHRcdFx0Y29uc3QgYXJncyA9IFtdLnNsaWNlLmNhbGwoYXJndW1lbnRzKTtcclxuXHRcdFx0XHRcdFx0cmV0dXJuIENhbGwoW3BhY2thZ2VOYW1lLCBzdHJ1Y3ROYW1lLCBtZXRob2ROYW1lXS5qb2luKCcuJyksIGFyZ3MsIHRpbWVvdXQpO1xyXG5cdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdC8vIEFsbG93IHNldHRpbmcgdGltZW91dCB0byBmdW5jdGlvblxyXG5cdFx0XHRcdFx0ZHluYW1pYy5zZXRUaW1lb3V0ID0gZnVuY3Rpb24gKG5ld1RpbWVvdXQpIHtcclxuXHRcdFx0XHRcdFx0dGltZW91dCA9IG5ld1RpbWVvdXQ7XHJcblx0XHRcdFx0XHR9O1xyXG5cclxuXHRcdFx0XHRcdC8vIEFsbG93IGdldHRpbmcgdGltZW91dCB0byBmdW5jdGlvblxyXG5cdFx0XHRcdFx0ZHluYW1pYy5nZXRUaW1lb3V0ID0gZnVuY3Rpb24gKCkge1xyXG5cdFx0XHRcdFx0XHRyZXR1cm4gdGltZW91dDtcclxuXHRcdFx0XHRcdH07XHJcblxyXG5cdFx0XHRcdFx0cmV0dXJuIGR5bmFtaWM7XHJcblx0XHRcdFx0fSgpO1xyXG5cdFx0XHR9KTtcclxuXHRcdH0pO1xyXG5cdH0pO1xyXG59XHJcbiIsICIvKlxyXG4gX1x0ICAgX19cdCAgXyBfX1xyXG58IHxcdCAvIC9fX18gXyhfKSAvX19fX1xyXG58IHwgL3wgLyAvIF9fIGAvIC8gLyBfX18vXHJcbnwgfC8gfC8gLyAvXy8gLyAvIChfXyAgKVxyXG58X18vfF9fL1xcX18sXy9fL18vX19fXy9cclxuVGhlIGVsZWN0cm9uIGFsdGVybmF0aXZlIGZvciBHb1xyXG4oYykgTGVhIEFudGhvbnkgMjAxOS1wcmVzZW50XHJcbiovXHJcblxyXG4vKiBqc2hpbnQgZXN2ZXJzaW9uOiA5ICovXHJcblxyXG5cclxuaW1wb3J0IHsgQ2FsbCB9IGZyb20gXCIuL2NhbGxzXCI7XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gV2luZG93UmVsb2FkKCkge1xyXG4gICAgd2luZG93LmxvY2F0aW9uLnJlbG9hZCgpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gV2luZG93UmVsb2FkQXBwKCkge1xyXG4gICAgd2luZG93LldhaWxzSW52b2tlKCdXUicpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gV2luZG93U2V0U3lzdGVtRGVmYXVsdFRoZW1lKCkge1xyXG4gICAgd2luZG93LldhaWxzSW52b2tlKCdXQVNEVCcpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gV2luZG93U2V0TGlnaHRUaGVtZSgpIHtcclxuICAgIHdpbmRvdy5XYWlsc0ludm9rZSgnV0FMVCcpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gV2luZG93U2V0RGFya1RoZW1lKCkge1xyXG4gICAgd2luZG93LldhaWxzSW52b2tlKCdXQURUJyk7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBQbGFjZSB0aGUgd2luZG93IGluIHRoZSBjZW50ZXIgb2YgdGhlIHNjcmVlblxyXG4gKlxyXG4gKiBAZXhwb3J0XHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gV2luZG93Q2VudGVyKCkge1xyXG4gICAgd2luZG93LldhaWxzSW52b2tlKCdXYycpO1xyXG59XHJcblxyXG4vKipcclxuICogU2V0cyB0aGUgd2luZG93IHRpdGxlXHJcbiAqXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSB0aXRsZVxyXG4gKiBAZXhwb3J0XHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gV2luZG93U2V0VGl0bGUodGl0bGUpIHtcclxuICAgIHdpbmRvdy5XYWlsc0ludm9rZSgnV1QnICsgdGl0bGUpO1xyXG59XHJcblxyXG4vKipcclxuICogTWFrZXMgdGhlIHdpbmRvdyBnbyBmdWxsc2NyZWVuXHJcbiAqXHJcbiAqIEBleHBvcnRcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBXaW5kb3dGdWxsc2NyZWVuKCkge1xyXG4gICAgd2luZG93LldhaWxzSW52b2tlKCdXRicpO1xyXG59XHJcblxyXG4vKipcclxuICogUmV2ZXJ0cyB0aGUgd2luZG93IGZyb20gZnVsbHNjcmVlblxyXG4gKlxyXG4gKiBAZXhwb3J0XHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gV2luZG93VW5mdWxsc2NyZWVuKCkge1xyXG4gICAgd2luZG93LldhaWxzSW52b2tlKCdXZicpO1xyXG59XHJcblxyXG4vKipcclxuICogU2V0IHRoZSBTaXplIG9mIHRoZSB3aW5kb3dcclxuICpcclxuICogQGV4cG9ydFxyXG4gKiBAcGFyYW0ge251bWJlcn0gd2lkdGhcclxuICogQHBhcmFtIHtudW1iZXJ9IGhlaWdodFxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIFdpbmRvd1NldFNpemUod2lkdGgsIGhlaWdodCkge1xyXG4gICAgd2luZG93LldhaWxzSW52b2tlKCdXczonICsgd2lkdGggKyAnOicgKyBoZWlnaHQpO1xyXG59XHJcblxyXG4vKipcclxuICogR2V0IHRoZSBTaXplIG9mIHRoZSB3aW5kb3dcclxuICpcclxuICogQGV4cG9ydFxyXG4gKiBAcmV0dXJuIHtQcm9taXNlPHt3OiBudW1iZXIsIGg6IG51bWJlcn0+fSBUaGUgc2l6ZSBvZiB0aGUgd2luZG93XHJcblxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIFdpbmRvd0dldFNpemUoKSB7XHJcbiAgICByZXR1cm4gQ2FsbChcIjp3YWlsczpXaW5kb3dHZXRTaXplXCIpO1xyXG59XHJcblxyXG4vKipcclxuICogU2V0IHRoZSBtYXhpbXVtIHNpemUgb2YgdGhlIHdpbmRvd1xyXG4gKlxyXG4gKiBAZXhwb3J0XHJcbiAqIEBwYXJhbSB7bnVtYmVyfSB3aWR0aFxyXG4gKiBAcGFyYW0ge251bWJlcn0gaGVpZ2h0XHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gV2luZG93U2V0TWF4U2l6ZSh3aWR0aCwgaGVpZ2h0KSB7XHJcbiAgICB3aW5kb3cuV2FpbHNJbnZva2UoJ1daOicgKyB3aWR0aCArICc6JyArIGhlaWdodCk7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBTZXQgdGhlIG1pbmltdW0gc2l6ZSBvZiB0aGUgd2luZG93XHJcbiAqXHJcbiAqIEBleHBvcnRcclxuICogQHBhcmFtIHtudW1iZXJ9IHdpZHRoXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBoZWlnaHRcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBXaW5kb3dTZXRNaW5TaXplKHdpZHRoLCBoZWlnaHQpIHtcclxuICAgIHdpbmRvdy5XYWlsc0ludm9rZSgnV3o6JyArIHdpZHRoICsgJzonICsgaGVpZ2h0KTtcclxufVxyXG5cclxuXHJcblxyXG4vKipcclxuICogU2V0IHRoZSB3aW5kb3cgQWx3YXlzT25Ub3Agb3Igbm90IG9uIHRvcFxyXG4gKlxyXG4gKiBAZXhwb3J0XHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gV2luZG93U2V0QWx3YXlzT25Ub3AoYikge1xyXG5cclxuICAgIHdpbmRvdy5XYWlsc0ludm9rZSgnV0FUUDonICsgKGIgPyAnMScgOiAnMCcpKTtcclxufVxyXG5cclxuXHJcblxyXG5cclxuLyoqXHJcbiAqIFNldCB0aGUgUG9zaXRpb24gb2YgdGhlIHdpbmRvd1xyXG4gKlxyXG4gKiBAZXhwb3J0XHJcbiAqIEBwYXJhbSB7bnVtYmVyfSB4XHJcbiAqIEBwYXJhbSB7bnVtYmVyfSB5XHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gV2luZG93U2V0UG9zaXRpb24oeCwgeSkge1xyXG4gICAgd2luZG93LldhaWxzSW52b2tlKCdXcDonICsgeCArICc6JyArIHkpO1xyXG59XHJcblxyXG4vKipcclxuICogR2V0IHRoZSBQb3NpdGlvbiBvZiB0aGUgd2luZG93XHJcbiAqXHJcbiAqIEBleHBvcnRcclxuICogQHJldHVybiB7UHJvbWlzZTx7eDogbnVtYmVyLCB5OiBudW1iZXJ9Pn0gVGhlIHBvc2l0aW9uIG9mIHRoZSB3aW5kb3dcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBXaW5kb3dHZXRQb3NpdGlvbigpIHtcclxuICAgIHJldHVybiBDYWxsKFwiOndhaWxzOldpbmRvd0dldFBvc1wiKTtcclxufVxyXG5cclxuLyoqXHJcbiAqIEhpZGUgdGhlIFdpbmRvd1xyXG4gKlxyXG4gKiBAZXhwb3J0XHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gV2luZG93SGlkZSgpIHtcclxuICAgIHdpbmRvdy5XYWlsc0ludm9rZSgnV0gnKTtcclxufVxyXG5cclxuLyoqXHJcbiAqIFNob3cgdGhlIFdpbmRvd1xyXG4gKlxyXG4gKiBAZXhwb3J0XHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gV2luZG93U2hvdygpIHtcclxuICAgIHdpbmRvdy5XYWlsc0ludm9rZSgnV1MnKTtcclxufVxyXG5cclxuLyoqXHJcbiAqIE1heGltaXNlIHRoZSBXaW5kb3dcclxuICpcclxuICogQGV4cG9ydFxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIFdpbmRvd01heGltaXNlKCkge1xyXG4gICAgd2luZG93LldhaWxzSW52b2tlKCdXTScpO1xyXG59XHJcblxyXG4vKipcclxuICogVG9nZ2xlIHRoZSBNYXhpbWlzZSBvZiB0aGUgV2luZG93XHJcbiAqXHJcbiAqIEBleHBvcnRcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBXaW5kb3dUb2dnbGVNYXhpbWlzZSgpIHtcclxuICAgIHdpbmRvdy5XYWlsc0ludm9rZSgnV3QnKTtcclxufVxyXG5cclxuLyoqXHJcbiAqIFVubWF4aW1pc2UgdGhlIFdpbmRvd1xyXG4gKlxyXG4gKiBAZXhwb3J0XHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gV2luZG93VW5tYXhpbWlzZSgpIHtcclxuICAgIHdpbmRvdy5XYWlsc0ludm9rZSgnV1UnKTtcclxufVxyXG5cclxuLyoqXHJcbiAqIE1pbmltaXNlIHRoZSBXaW5kb3dcclxuICpcclxuICogQGV4cG9ydFxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIFdpbmRvd01pbmltaXNlKCkge1xyXG4gICAgd2luZG93LldhaWxzSW52b2tlKCdXbScpO1xyXG59XHJcblxyXG4vKipcclxuICogVW5taW5pbWlzZSB0aGUgV2luZG93XHJcbiAqXHJcbiAqIEBleHBvcnRcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBXaW5kb3dVbm1pbmltaXNlKCkge1xyXG4gICAgd2luZG93LldhaWxzSW52b2tlKCdXdScpO1xyXG59XHJcblxyXG5cclxuLyoqXHJcbiAqIFNldHMgdGhlIGJhY2tncm91bmQgY29sb3VyIG9mIHRoZSB3aW5kb3dcclxuICpcclxuICogQGV4cG9ydFxyXG4gKiBAcGFyYW0ge251bWJlcn0gUiBSZWRcclxuICogQHBhcmFtIHtudW1iZXJ9IEcgR3JlZW5cclxuICogQHBhcmFtIHtudW1iZXJ9IEIgQmx1ZVxyXG4gKiBAcGFyYW0ge251bWJlcn0gQSBBbHBoYVxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIFdpbmRvd1NldFJHQkEoUiwgRywgQiwgQSkge1xyXG4gICAgbGV0IHJnYmEgPSBKU09OLnN0cmluZ2lmeSh7IHI6IFIgfHwgMCwgZzogRyB8fCAwLCBiOiBCIHx8IDAsIGE6IEEgfHwgMjU1IH0pO1xyXG4gICAgd2luZG93LldhaWxzSW52b2tlKCdXcjonICsgcmdiYSk7XHJcbn1cclxuXHJcbiIsICIvKipcclxuICogQGRlc2NyaXB0aW9uOiBVc2UgdGhlIHN5c3RlbSBkZWZhdWx0IGJyb3dzZXIgdG8gb3BlbiB0aGUgdXJsXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSB1cmwgXHJcbiAqIEByZXR1cm4ge3ZvaWR9XHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gQnJvd3Nlck9wZW5VUkwodXJsKSB7XHJcbiAgd2luZG93LldhaWxzSW52b2tlKCdCTzonICsgdXJsKTtcclxufSIsICIvKlxyXG4gX1x0ICAgX19cdCAgXyBfX1xyXG58IHxcdCAvIC9fX18gXyhfKSAvX19fX1xyXG58IHwgL3wgLyAvIF9fIGAvIC8gLyBfX18vXHJcbnwgfC8gfC8gLyAvXy8gLyAvIChfXyAgKVxyXG58X18vfF9fL1xcX18sXy9fL18vX19fXy9cclxuVGhlIGVsZWN0cm9uIGFsdGVybmF0aXZlIGZvciBHb1xyXG4oYykgTGVhIEFudGhvbnkgMjAxOS1wcmVzZW50XHJcbiovXHJcbi8qIGpzaGludCBlc3ZlcnNpb246IDkgKi9cclxuaW1wb3J0ICogYXMgTG9nIGZyb20gJy4vbG9nJztcclxuaW1wb3J0IHtldmVudExpc3RlbmVycywgRXZlbnRzRW1pdCwgRXZlbnRzTm90aWZ5LCBFdmVudHNPZmYsIEV2ZW50c09uLCBFdmVudHNPbmNlLCBFdmVudHNPbk11bHRpcGxlfSBmcm9tICcuL2V2ZW50cyc7XHJcbmltcG9ydCB7Q2FsbCwgQ2FsbGJhY2ssIGNhbGxiYWNrc30gZnJvbSAnLi9jYWxscyc7XHJcbmltcG9ydCB7U2V0QmluZGluZ3N9IGZyb20gXCIuL2JpbmRpbmdzXCI7XHJcbmltcG9ydCAqIGFzIFdpbmRvdyBmcm9tIFwiLi93aW5kb3dcIjtcclxuaW1wb3J0ICogYXMgQnJvd3NlciBmcm9tIFwiLi9icm93c2VyXCI7XHJcblxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIFF1aXQoKSB7XHJcbiAgICB3aW5kb3cuV2FpbHNJbnZva2UoJ1EnKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIEVudmlyb25tZW50KCkge1xyXG4gICAgcmV0dXJuIENhbGwoXCI6d2FpbHM6RW52aXJvbm1lbnRcIik7XHJcbn1cclxuXHJcbi8vIFRoZSBKUyBydW50aW1lXHJcbndpbmRvdy5ydW50aW1lID0ge1xyXG4gICAgLi4uTG9nLFxyXG4gICAgLi4uV2luZG93LFxyXG4gICAgLi4uQnJvd3NlcixcclxuICAgIEV2ZW50c09uLFxyXG4gICAgRXZlbnRzT25jZSxcclxuICAgIEV2ZW50c09uTXVsdGlwbGUsXHJcbiAgICBFdmVudHNFbWl0LFxyXG4gICAgRXZlbnRzT2ZmLFxyXG4gICAgRW52aXJvbm1lbnQsXHJcbiAgICBRdWl0XHJcbn07XHJcblxyXG4vLyBJbnRlcm5hbCB3YWlscyBlbmRwb2ludHNcclxud2luZG93LndhaWxzID0ge1xyXG4gICAgQ2FsbGJhY2ssXHJcbiAgICBFdmVudHNOb3RpZnksXHJcbiAgICBTZXRCaW5kaW5ncyxcclxuICAgIGV2ZW50TGlzdGVuZXJzLFxyXG4gICAgY2FsbGJhY2tzLFxyXG4gICAgZmxhZ3M6IHtcclxuICAgICAgICBkaXNhYmxlU2Nyb2xsYmFyRHJhZzogZmFsc2UsXHJcbiAgICAgICAgZGlzYWJsZVdhaWxzRGVmYXVsdENvbnRleHRNZW51OiBmYWxzZSxcclxuICAgICAgICBlbmFibGVSZXNpemU6IGZhbHNlLFxyXG4gICAgICAgIGRlZmF1bHRDdXJzb3I6IG51bGwsXHJcbiAgICAgICAgYm9yZGVyVGhpY2tuZXNzOiA2LFxyXG4gICAgICAgIGRiQ2xpY2tJbnRlcnZhbDogMTAwLFxyXG4gICAgfVxyXG59O1xyXG5cclxuLy8gU2V0IHRoZSBiaW5kaW5nc1xyXG53aW5kb3cud2FpbHMuU2V0QmluZGluZ3Mod2luZG93LndhaWxzYmluZGluZ3MpO1xyXG5kZWxldGUgd2luZG93LndhaWxzLlNldEJpbmRpbmdzO1xyXG5cclxuLy8gVGhpcyBpcyBldmFsdWF0ZWQgYXQgYnVpbGQgdGltZSBpbiBwYWNrYWdlLmpzb25cclxuLy8gY29uc3QgZGV2ID0gMDtcclxuLy8gY29uc3QgcHJvZHVjdGlvbiA9IDE7XHJcbmlmIChFTlYgPT09IDApIHtcclxuICAgIGRlbGV0ZSB3aW5kb3cud2FpbHNiaW5kaW5ncztcclxufVxyXG5cclxudmFyIGRyYWdUaW1lT3V0O1xyXG52YXIgZHJhZ0xhc3RUaW1lID0gMDtcclxuXHJcbmZ1bmN0aW9uIGRyYWcoKSB7XHJcbiAgICB3aW5kb3cuV2FpbHNJbnZva2UoXCJkcmFnXCIpO1xyXG59XHJcblxyXG4vLyBTZXR1cCBkcmFnIGhhbmRsZXJcclxuLy8gQmFzZWQgb24gY29kZSBmcm9tOiBodHRwczovL2dpdGh1Yi5jb20vcGF0cjBudXMvRGVza0dhcFxyXG53aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vkb3duJywgKGUpID0+IHtcclxuXHJcbiAgICAvLyBDaGVjayBmb3IgcmVzaXppbmdcclxuICAgIGlmICh3aW5kb3cud2FpbHMuZmxhZ3MucmVzaXplRWRnZSkge1xyXG4gICAgICAgIHdpbmRvdy5XYWlsc0ludm9rZShcInJlc2l6ZTpcIiArIHdpbmRvdy53YWlscy5mbGFncy5yZXNpemVFZGdlKTtcclxuICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIENoZWNrIGZvciBkcmFnZ2luZ1xyXG4gICAgbGV0IGN1cnJlbnRFbGVtZW50ID0gZS50YXJnZXQ7XHJcbiAgICB3aGlsZSAoY3VycmVudEVsZW1lbnQgIT0gbnVsbCkge1xyXG4gICAgICAgIGlmIChjdXJyZW50RWxlbWVudC5oYXNBdHRyaWJ1dGUoJ2RhdGEtd2FpbHMtbm8tZHJhZycpKSB7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoY3VycmVudEVsZW1lbnQuaGFzQXR0cmlidXRlKCdkYXRhLXdhaWxzLWRyYWcnKSkge1xyXG4gICAgICAgICAgICBpZiAod2luZG93LndhaWxzLmZsYWdzLmRpc2FibGVTY3JvbGxiYXJEcmFnKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBUaGlzIGNoZWNrcyBmb3IgY2xpY2tzIG9uIHRoZSBzY3JvbGwgYmFyXHJcbiAgICAgICAgICAgICAgICBpZiAoZS5vZmZzZXRYID4gZS50YXJnZXQuY2xpZW50V2lkdGggfHwgZS5vZmZzZXRZID4gZS50YXJnZXQuY2xpZW50SGVpZ2h0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKG5ldyBEYXRlKCkuZ2V0VGltZSgpIC0gZHJhZ0xhc3RUaW1lIDwgd2luZG93LndhaWxzLmZsYWdzLmRiQ2xpY2tJbnRlcnZhbCkge1xyXG4gICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KGRyYWdUaW1lT3V0KTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGRyYWdUaW1lT3V0ID0gc2V0VGltZW91dChkcmFnLCB3aW5kb3cud2FpbHMuZmxhZ3MuZGJDbGlja0ludGVydmFsKTtcclxuICAgICAgICAgICAgZHJhZ0xhc3RUaW1lID0gbmV3IERhdGUoKS5nZXRUaW1lKCk7XHJcbiAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGN1cnJlbnRFbGVtZW50ID0gY3VycmVudEVsZW1lbnQucGFyZW50RWxlbWVudDtcclxuICAgIH1cclxufSk7XHJcblxyXG5mdW5jdGlvbiBzZXRSZXNpemUoY3Vyc29yKSB7XHJcbiAgICBkb2N1bWVudC5ib2R5LnN0eWxlLmN1cnNvciA9IGN1cnNvciB8fCB3aW5kb3cud2FpbHMuZmxhZ3MuZGVmYXVsdEN1cnNvcjtcclxuICAgIHdpbmRvdy53YWlscy5mbGFncy5yZXNpemVFZGdlID0gY3Vyc29yO1xyXG59XHJcblxyXG53aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vtb3ZlJywgZnVuY3Rpb24gKGUpIHtcclxuICAgIGlmICghd2luZG93LndhaWxzLmZsYWdzLmVuYWJsZVJlc2l6ZSkge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGlmICh3aW5kb3cud2FpbHMuZmxhZ3MuZGVmYXVsdEN1cnNvciA9PSBudWxsKSB7XHJcbiAgICAgICAgd2luZG93LndhaWxzLmZsYWdzLmRlZmF1bHRDdXJzb3IgPSBkb2N1bWVudC5ib2R5LnN0eWxlLmN1cnNvcjtcclxuICAgIH1cclxuICAgIGlmICh3aW5kb3cub3V0ZXJXaWR0aCAtIGUuY2xpZW50WCA8IHdpbmRvdy53YWlscy5mbGFncy5ib3JkZXJUaGlja25lc3MgJiYgd2luZG93Lm91dGVySGVpZ2h0IC0gZS5jbGllbnRZIDwgd2luZG93LndhaWxzLmZsYWdzLmJvcmRlclRoaWNrbmVzcykge1xyXG4gICAgICAgIGRvY3VtZW50LmJvZHkuc3R5bGUuY3Vyc29yID0gXCJzZS1yZXNpemVcIjtcclxuICAgIH1cclxuICAgIGxldCByaWdodEJvcmRlciA9IHdpbmRvdy5vdXRlcldpZHRoIC0gZS5jbGllbnRYIDwgd2luZG93LndhaWxzLmZsYWdzLmJvcmRlclRoaWNrbmVzcztcclxuICAgIGxldCBsZWZ0Qm9yZGVyID0gZS5jbGllbnRYIDwgd2luZG93LndhaWxzLmZsYWdzLmJvcmRlclRoaWNrbmVzcztcclxuICAgIGxldCB0b3BCb3JkZXIgPSBlLmNsaWVudFkgPCB3aW5kb3cud2FpbHMuZmxhZ3MuYm9yZGVyVGhpY2tuZXNzO1xyXG4gICAgbGV0IGJvdHRvbUJvcmRlciA9IHdpbmRvdy5vdXRlckhlaWdodCAtIGUuY2xpZW50WSA8IHdpbmRvdy53YWlscy5mbGFncy5ib3JkZXJUaGlja25lc3M7XHJcblxyXG4gICAgLy8gSWYgd2UgYXJlbid0IG9uIGFuIGVkZ2UsIGJ1dCB3ZXJlLCByZXNldCB0aGUgY3Vyc29yIHRvIGRlZmF1bHRcclxuICAgIGlmICghbGVmdEJvcmRlciAmJiAhcmlnaHRCb3JkZXIgJiYgIXRvcEJvcmRlciAmJiAhYm90dG9tQm9yZGVyICYmIHdpbmRvdy53YWlscy5mbGFncy5yZXNpemVFZGdlICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICBzZXRSZXNpemUoKTtcclxuICAgIH0gZWxzZSBpZiAocmlnaHRCb3JkZXIgJiYgYm90dG9tQm9yZGVyKSBzZXRSZXNpemUoXCJzZS1yZXNpemVcIik7XHJcbiAgICBlbHNlIGlmIChsZWZ0Qm9yZGVyICYmIGJvdHRvbUJvcmRlcikgc2V0UmVzaXplKFwic3ctcmVzaXplXCIpO1xyXG4gICAgZWxzZSBpZiAobGVmdEJvcmRlciAmJiB0b3BCb3JkZXIpIHNldFJlc2l6ZShcIm53LXJlc2l6ZVwiKTtcclxuICAgIGVsc2UgaWYgKHRvcEJvcmRlciAmJiByaWdodEJvcmRlcikgc2V0UmVzaXplKFwibmUtcmVzaXplXCIpO1xyXG4gICAgZWxzZSBpZiAobGVmdEJvcmRlcikgc2V0UmVzaXplKFwidy1yZXNpemVcIik7XHJcbiAgICBlbHNlIGlmICh0b3BCb3JkZXIpIHNldFJlc2l6ZShcIm4tcmVzaXplXCIpO1xyXG4gICAgZWxzZSBpZiAoYm90dG9tQm9yZGVyKSBzZXRSZXNpemUoXCJzLXJlc2l6ZVwiKTtcclxuICAgIGVsc2UgaWYgKHJpZ2h0Qm9yZGVyKSBzZXRSZXNpemUoXCJlLXJlc2l6ZVwiKTtcclxuXHJcbn0pO1xyXG5cclxuLy8gU2V0dXAgY29udGV4dCBtZW51IGhvb2tcclxud2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2NvbnRleHRtZW51JywgZnVuY3Rpb24gKGUpIHtcclxuICAgIGlmICh3aW5kb3cud2FpbHMuZmxhZ3MuZGlzYWJsZVdhaWxzRGVmYXVsdENvbnRleHRNZW51KSB7XHJcbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgfVxyXG59KTsiXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBa0JBLDBCQUF3QixPQUFPLFNBQVM7QUFJdkMsV0FBTyxZQUFZLE1BQU0sUUFBUTtBQUFBO0FBUzNC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 diff --git a/v2/internal/frontend/runtime/runtime_prod_desktop.js b/v2/internal/frontend/runtime/runtime_prod_desktop.js index c98ae9063..e19e6c438 100644 --- a/v2/internal/frontend/runtime/runtime_prod_desktop.js +++ b/v2/internal/frontend/runtime/runtime_prod_desktop.js @@ -1 +1 @@ -(()=>{var m=Object.defineProperty;var D=e=>m(e,"__esModule",{value:!0});var W=(e,n)=>{D(e);for(var o in n)m(e,o,{get:n[o],enumerable:!0})};var g={};W(g,{LogDebug:()=>B,LogError:()=>J,LogFatal:()=>G,LogInfo:()=>A,LogLevel:()=>U,LogPrint:()=>R,LogTrace:()=>C,LogWarning:()=>H,SetLogLevel:()=>M});function w(e,n){window.WailsInvoke("L"+e+n)}function C(e){w("T",e)}function R(e){w("P",e)}function B(e){w("D",e)}function A(e){w("I",e)}function H(e){w("W",e)}function J(e){w("E",e)}function G(e){w("F",e)}function M(e){w("S",e)}var U={TRACE:1,DEBUG:2,INFO:3,WARNING:4,ERROR:5};var k=class{constructor(n,o){o=o||-1,this.Callback=i=>(n.apply(null,i),o===-1?!1:(o-=1,o===0))}},s={};function c(e,n,o){s[e]=s[e]||[];let i=new k(n,o);s[e].push(i)}function b(e,n){c(e,n,-1)}function E(e,n){c(e,n,1)}function I(e){let n=e.name;if(s[n]){let o=s[n].slice();for(let i=0;i0&&(a=setTimeout(function(){t(Error("Call to "+e+" timed out. Request ID: "+r))},o)),f[r]={timeoutHandle:a,reject:t,resolve:i};try{let u={name:e,args:n,callbackID:r};window.WailsInvoke("C"+JSON.stringify(u))}catch(u){console.error(u)}})}function T(e){let n;try{n=JSON.parse(e)}catch(t){let r=`Invalid JSON passed to callback: ${t.message}. Message: ${e}`;throw runtime.LogDebug(r),new Error(r)}let o=n.callbackid,i=f[o];if(!i){let t=`Callback '${o}' not registered!!!`;throw console.error(t),new Error(t)}clearTimeout(i.timeoutHandle),delete f[o],n.error?i.reject(n.error):i.resolve(n.result)}window.go={};function L(e){try{e=JSON.parse(e)}catch(n){console.error(n)}window.go=window.go||{},Object.keys(e).forEach(n=>{window.go[n]=window.go[n]||{},Object.keys(e[n]).forEach(o=>{window.go[n][o]=window.go[n][o]||{},Object.keys(e[n][o]).forEach(i=>{window.go[n][o][i]=function(){let t=0;function r(){let a=[].slice.call(arguments);return d([n,o,i].join("."),a,t)}return r.setTimeout=function(a){t=a},r.getTimeout=function(){return t},r}()})})})}var v={};W(v,{WindowCenter:()=>V,WindowFullscreen:()=>N,WindowGetPosition:()=>ie,WindowGetSize:()=>_,WindowHide:()=>te,WindowMaximise:()=>se,WindowMinimise:()=>ae,WindowReload:()=>j,WindowReloadApp:()=>X,WindowSetDarkTheme:()=>Q,WindowSetLightTheme:()=>$,WindowSetMaxSize:()=>ee,WindowSetMinSize:()=>ne,WindowSetPosition:()=>oe,WindowSetRGBA:()=>fe,WindowSetSize:()=>K,WindowSetSystemDefaultTheme:()=>Y,WindowSetTitle:()=>q,WindowShow:()=>re,WindowToggleMaximise:()=>le,WindowUnfullscreen:()=>Z,WindowUnmaximise:()=>we,WindowUnminimise:()=>de});function j(){window.location.reload()}function X(){window.WailsInvoke("WR")}function Y(){window.WailsInvoke("WASDT")}function $(){window.WailsInvoke("WALT")}function Q(){window.WailsInvoke("WADT")}function V(){window.WailsInvoke("Wc")}function q(e){window.WailsInvoke("WT"+e)}function N(){window.WailsInvoke("WF")}function Z(){window.WailsInvoke("Wf")}function K(e,n){window.WailsInvoke("Ws:"+e+":"+n)}function _(){return d(":wails:WindowGetSize")}function ee(e,n){window.WailsInvoke("WZ:"+e+":"+n)}function ne(e,n){window.WailsInvoke("Wz:"+e+":"+n)}function oe(e,n){window.WailsInvoke("Wp:"+e+":"+n)}function ie(){return d(":wails:WindowGetPos")}function te(){window.WailsInvoke("WH")}function re(){window.WailsInvoke("WS")}function se(){window.WailsInvoke("WM")}function le(){window.WailsInvoke("Wt")}function we(){window.WailsInvoke("WU")}function ae(){window.WailsInvoke("Wm")}function de(){window.WailsInvoke("Wu")}function fe(e,n,o,i){let t=JSON.stringify({r:e||0,g:n||0,b:o||0,a:i||255});window.WailsInvoke("Wr:"+t)}var x={};W(x,{BrowserOpenURL:()=>ce});function ce(e){window.WailsInvoke("BO:"+e)}function ue(){window.WailsInvoke("Q")}function We(){return d(":wails:Environment")}window.runtime={...g,...v,...x,EventsOn:b,EventsOnce:E,EventsOnMultiple:c,EventsEmit:S,EventsOff:y,Environment:We,Quit:ue};window.wails={Callback:T,EventsNotify:h,SetBindings:L,eventListeners:s,callbacks:f,flags:{disableScrollbarDrag:!1,disableWailsDefaultContextMenu:!1,enableResize:!1,defaultCursor:null,borderThickness:6,dbClickInterval:100}};window.wails.SetBindings(window.wailsbindings);delete window.wails.SetBindings;var O,z=0;function ge(){window.WailsInvoke("drag")}window.addEventListener("mousedown",e=>{if(window.wails.flags.resizeEdge){window.WailsInvoke("resize:"+window.wails.flags.resizeEdge),e.preventDefault();return}let n=e.target;for(;n!=null&&!n.hasAttribute("data-wails-no-drag");){if(n.hasAttribute("data-wails-drag")){if(window.wails.flags.disableScrollbarDrag&&(e.offsetX>e.target.clientWidth||e.offsetY>e.target.clientHeight))break;if(new Date().getTime()-z{var k=Object.defineProperty;var D=e=>k(e,"__esModule",{value:!0});var W=(e,n)=>{D(e);for(var o in n)k(e,o,{get:n[o],enumerable:!0})};var g={};W(g,{LogDebug:()=>B,LogError:()=>J,LogFatal:()=>G,LogInfo:()=>A,LogLevel:()=>P,LogPrint:()=>R,LogTrace:()=>C,LogWarning:()=>H,SetLogLevel:()=>M});function w(e,n){window.WailsInvoke("L"+e+n)}function C(e){w("T",e)}function R(e){w("P",e)}function B(e){w("D",e)}function A(e){w("I",e)}function H(e){w("W",e)}function J(e){w("E",e)}function G(e){w("F",e)}function M(e){w("S",e)}var P={TRACE:1,DEBUG:2,INFO:3,WARNING:4,ERROR:5};var m=class{constructor(n,o){o=o||-1,this.Callback=i=>(n.apply(null,i),o===-1?!1:(o-=1,o===0))}},s={};function c(e,n,o){s[e]=s[e]||[];let i=new m(n,o);s[e].push(i)}function b(e,n){c(e,n,-1)}function E(e,n){c(e,n,1)}function I(e){let n=e.name;if(s[n]){let o=s[n].slice();for(let i=0;i0&&(a=setTimeout(function(){t(Error("Call to "+e+" timed out. Request ID: "+r))},o)),f[r]={timeoutHandle:a,reject:t,resolve:i};try{let u={name:e,args:n,callbackID:r};window.WailsInvoke("C"+JSON.stringify(u))}catch(u){console.error(u)}})}function T(e){let n;try{n=JSON.parse(e)}catch(t){let r=`Invalid JSON passed to callback: ${t.message}. Message: ${e}`;throw runtime.LogDebug(r),new Error(r)}let o=n.callbackid,i=f[o];if(!i){let t=`Callback '${o}' not registered!!!`;throw console.error(t),new Error(t)}clearTimeout(i.timeoutHandle),delete f[o],n.error?i.reject(n.error):i.resolve(n.result)}window.go={};function L(e){try{e=JSON.parse(e)}catch(n){console.error(n)}window.go=window.go||{},Object.keys(e).forEach(n=>{window.go[n]=window.go[n]||{},Object.keys(e[n]).forEach(o=>{window.go[n][o]=window.go[n][o]||{},Object.keys(e[n][o]).forEach(i=>{window.go[n][o][i]=function(){let t=0;function r(){let a=[].slice.call(arguments);return d([n,o,i].join("."),a,t)}return r.setTimeout=function(a){t=a},r.getTimeout=function(){return t},r}()})})})}var v={};W(v,{WindowCenter:()=>V,WindowFullscreen:()=>N,WindowGetPosition:()=>te,WindowGetSize:()=>_,WindowHide:()=>re,WindowMaximise:()=>le,WindowMinimise:()=>de,WindowReload:()=>j,WindowReloadApp:()=>X,WindowSetAlwaysOnTop:()=>oe,WindowSetDarkTheme:()=>Q,WindowSetLightTheme:()=>$,WindowSetMaxSize:()=>ee,WindowSetMinSize:()=>ne,WindowSetPosition:()=>ie,WindowSetRGBA:()=>ce,WindowSetSize:()=>K,WindowSetSystemDefaultTheme:()=>Y,WindowSetTitle:()=>q,WindowShow:()=>se,WindowToggleMaximise:()=>we,WindowUnfullscreen:()=>Z,WindowUnmaximise:()=>ae,WindowUnminimise:()=>fe});function j(){window.location.reload()}function X(){window.WailsInvoke("WR")}function Y(){window.WailsInvoke("WASDT")}function $(){window.WailsInvoke("WALT")}function Q(){window.WailsInvoke("WADT")}function V(){window.WailsInvoke("Wc")}function q(e){window.WailsInvoke("WT"+e)}function N(){window.WailsInvoke("WF")}function Z(){window.WailsInvoke("Wf")}function K(e,n){window.WailsInvoke("Ws:"+e+":"+n)}function _(){return d(":wails:WindowGetSize")}function ee(e,n){window.WailsInvoke("WZ:"+e+":"+n)}function ne(e,n){window.WailsInvoke("Wz:"+e+":"+n)}function oe(e){window.WailsInvoke("WATP:"+(e?"1":"0"))}function ie(e,n){window.WailsInvoke("Wp:"+e+":"+n)}function te(){return d(":wails:WindowGetPos")}function re(){window.WailsInvoke("WH")}function se(){window.WailsInvoke("WS")}function le(){window.WailsInvoke("WM")}function we(){window.WailsInvoke("Wt")}function ae(){window.WailsInvoke("WU")}function de(){window.WailsInvoke("Wm")}function fe(){window.WailsInvoke("Wu")}function ce(e,n,o,i){let t=JSON.stringify({r:e||0,g:n||0,b:o||0,a:i||255});window.WailsInvoke("Wr:"+t)}var x={};W(x,{BrowserOpenURL:()=>ue});function ue(e){window.WailsInvoke("BO:"+e)}function We(){window.WailsInvoke("Q")}function ge(){return d(":wails:Environment")}window.runtime={...g,...v,...x,EventsOn:b,EventsOnce:E,EventsOnMultiple:c,EventsEmit:S,EventsOff:y,Environment:ge,Quit:We};window.wails={Callback:T,EventsNotify:h,SetBindings:L,eventListeners:s,callbacks:f,flags:{disableScrollbarDrag:!1,disableWailsDefaultContextMenu:!1,enableResize:!1,defaultCursor:null,borderThickness:6,dbClickInterval:100}};window.wails.SetBindings(window.wailsbindings);delete window.wails.SetBindings;var O,z=0;function pe(){window.WailsInvoke("drag")}window.addEventListener("mousedown",e=>{if(window.wails.flags.resizeEdge){window.WailsInvoke("resize:"+window.wails.flags.resizeEdge),e.preventDefault();return}let n=e.target;for(;n!=null&&!n.hasAttribute("data-wails-no-drag");){if(n.hasAttribute("data-wails-drag")){if(window.wails.flags.disableScrollbarDrag&&(e.offsetX>e.target.clientWidth||e.offsetY>e.target.clientHeight))break;if(new Date().getTime()-z Date: Wed, 22 Jun 2022 20:56:01 +1000 Subject: [PATCH 55/87] Bump shell-quote in /v2/internal/frontend/runtime/dev (#1486) Bumps [shell-quote](https://github.com/substack/node-shell-quote) from 1.7.2 to 1.7.3. - [Release notes](https://github.com/substack/node-shell-quote/releases) - [Changelog](https://github.com/substack/node-shell-quote/blob/master/CHANGELOG.md) - [Commits](https://github.com/substack/node-shell-quote/compare/v1.7.2...1.7.3) --- updated-dependencies: - dependency-name: shell-quote dependency-type: indirect ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- v2/internal/frontend/runtime/dev/package-lock.json | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/v2/internal/frontend/runtime/dev/package-lock.json b/v2/internal/frontend/runtime/dev/package-lock.json index 471c47629..9f99cdd04 100644 --- a/v2/internal/frontend/runtime/dev/package-lock.json +++ b/v2/internal/frontend/runtime/dev/package-lock.json @@ -651,9 +651,9 @@ } }, "node_modules/shell-quote": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.2.tgz", - "integrity": "sha512-mRz/m/JVscCrkMyPqHc/bczi3OQHkLTqXHEFu0zDhK/qfv3UcOA4SVmRCLmos4bhjr9ekVQubj/R7waKapmiQg==", + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.3.tgz", + "integrity": "sha512-Vpfqwm4EnqGdlsBFNmHhxhElJYrdfcxPThu+ryKS5J8L/fhAwLazFZtq+S+TWZ9ANj2piSQLGj6NQg+lKPmxrw==", "dev": true }, "node_modules/side-channel": { @@ -1327,9 +1327,9 @@ "dev": true }, "shell-quote": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.2.tgz", - "integrity": "sha512-mRz/m/JVscCrkMyPqHc/bczi3OQHkLTqXHEFu0zDhK/qfv3UcOA4SVmRCLmos4bhjr9ekVQubj/R7waKapmiQg==", + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.3.tgz", + "integrity": "sha512-Vpfqwm4EnqGdlsBFNmHhxhElJYrdfcxPThu+ryKS5J8L/fhAwLazFZtq+S+TWZ9ANj2piSQLGj6NQg+lKPmxrw==", "dev": true }, "side-channel": { From 91afa396ba40307a7862eca9303e4925d1e9692d Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 22 Jun 2022 20:56:16 +1000 Subject: [PATCH 56/87] Bump shell-quote from 1.7.2 to 1.7.3 in /v2/internal/frontend/runtime (#1485) Bumps [shell-quote](https://github.com/substack/node-shell-quote) from 1.7.2 to 1.7.3. - [Release notes](https://github.com/substack/node-shell-quote/releases) - [Changelog](https://github.com/substack/node-shell-quote/blob/master/CHANGELOG.md) - [Commits](https://github.com/substack/node-shell-quote/compare/v1.7.2...1.7.3) --- updated-dependencies: - dependency-name: shell-quote dependency-type: indirect ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- v2/internal/frontend/runtime/package-lock.json | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/v2/internal/frontend/runtime/package-lock.json b/v2/internal/frontend/runtime/package-lock.json index 9f199f3a1..43a9079cd 100644 --- a/v2/internal/frontend/runtime/package-lock.json +++ b/v2/internal/frontend/runtime/package-lock.json @@ -604,9 +604,9 @@ } }, "node_modules/shell-quote": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.2.tgz", - "integrity": "sha512-mRz/m/JVscCrkMyPqHc/bczi3OQHkLTqXHEFu0zDhK/qfv3UcOA4SVmRCLmos4bhjr9ekVQubj/R7waKapmiQg==", + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.3.tgz", + "integrity": "sha512-Vpfqwm4EnqGdlsBFNmHhxhElJYrdfcxPThu+ryKS5J8L/fhAwLazFZtq+S+TWZ9ANj2piSQLGj6NQg+lKPmxrw==", "dev": true }, "node_modules/side-channel": { @@ -1241,9 +1241,9 @@ "dev": true }, "shell-quote": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.2.tgz", - "integrity": "sha512-mRz/m/JVscCrkMyPqHc/bczi3OQHkLTqXHEFu0zDhK/qfv3UcOA4SVmRCLmos4bhjr9ekVQubj/R7waKapmiQg==", + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.3.tgz", + "integrity": "sha512-Vpfqwm4EnqGdlsBFNmHhxhElJYrdfcxPThu+ryKS5J8L/fhAwLazFZtq+S+TWZ9ANj2piSQLGj6NQg+lKPmxrw==", "dev": true }, "side-channel": { From e504d1124aa10d8dcc5ccd1c26937874b16e270a Mon Sep 17 00:00:00 2001 From: Lea Anthony Date: Wed, 22 Jun 2022 21:36:57 +1000 Subject: [PATCH 57/87] Fix AlwaysOnTop code for Mac --- v2/internal/frontend/desktop/darwin/Application.m | 2 +- v2/internal/frontend/desktop/darwin/frontend.go | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/v2/internal/frontend/desktop/darwin/Application.m b/v2/internal/frontend/desktop/darwin/Application.m index 9ace230f8..05f79d9d2 100644 --- a/v2/internal/frontend/desktop/darwin/Application.m +++ b/v2/internal/frontend/desktop/darwin/Application.m @@ -95,7 +95,7 @@ void SetSize(void* inctx, int width, int height) { ); } -void SetAlwaysOnTop(void* ctx, int onTop) { +void SetAlwaysOnTop(void* inctx, int onTop) { WailsContext *ctx = (__bridge WailsContext*) inctx; ON_MAIN_THREAD( [ctx SetAlwaysOnTop:onTop]; diff --git a/v2/internal/frontend/desktop/darwin/frontend.go b/v2/internal/frontend/desktop/darwin/frontend.go index b712be714..6a1c9270d 100644 --- a/v2/internal/frontend/desktop/darwin/frontend.go +++ b/v2/internal/frontend/desktop/darwin/frontend.go @@ -157,7 +157,7 @@ func (f *Frontend) WindowCenter() { f.mainWindow.Center() } func (f *Frontend) WindowSetAlwaysOnTop(onTop bool) { - f.mainWindow.AlwaysOnTop(onTop) + f.mainWindow.SetAlwaysOnTop(onTop) } func (f *Frontend) WindowSetPosition(x, y int) { From 5cddf8864e652e272212d15f2eb3c2305b428027 Mon Sep 17 00:00:00 2001 From: Lea Anthony Date: Wed, 22 Jun 2022 21:39:40 +1000 Subject: [PATCH 58/87] Add roadmap to docs --- README.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/README.md b/README.md index c3b5318b2..d103ea4e6 100644 --- a/README.md +++ b/README.md @@ -200,6 +200,10 @@ This project is supported by these kind people / companies: +## Roadmap + +The project roadmap may be found [here](https://github.com/wailsapp/wails/discussions/1484). + ## Installation The installation instructions are on the [official website](https://wails.io/docs/gettingstarted/installation). From beb909fc0f0064db49d0cb7de0ef643c68e6fdd9 Mon Sep 17 00:00:00 2001 From: Lea Anthony Date: Wed, 22 Jun 2022 21:51:21 +1000 Subject: [PATCH 59/87] Update README.md --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index d103ea4e6..e74d48d23 100644 --- a/README.md +++ b/README.md @@ -202,7 +202,8 @@ This project is supported by these kind people / companies: ## Roadmap -The project roadmap may be found [here](https://github.com/wailsapp/wails/discussions/1484). +The project roadmap may be found [here](https://github.com/wailsapp/wails/discussions/1484). Please consult +this before open up an enhancement request. ## Installation From 16581ceff91961a0a0f2eb5f132b6eb98f32b498 Mon Sep 17 00:00:00 2001 From: Lea Anthony Date: Thu, 23 Jun 2022 20:30:18 +1000 Subject: [PATCH 60/87] Regenerate templates to use BackgroundColour --- .../initialise/templates/base/main.tmpl.go | 11 +- .../initialise/templates/generate/generate.go | 10 +- .../templates/generate/plain/main.tmpl.go | 2 +- .../templates/lit-ts/frontend/package.json | 2 +- .../templates/templates/lit-ts/main.tmpl.go | 11 +- .../templates/lit/frontend/package.json | 2 +- .../templates/templates/lit/main.tmpl.go | 11 +- .../templates/preact-ts/frontend/package.json | 2 +- .../preact-ts/frontend/src/preact.d.ts | 1 - .../preact-ts/frontend/vite.config.ts | 2 +- .../templates/preact-ts/main.tmpl.go | 11 +- .../templates/preact/frontend/package.json | 2 +- .../templates/preact/frontend/vite.config.js | 2 +- .../templates/templates/preact/main.tmpl.go | 11 +- .../templates/react-ts/frontend/package.json | 2 +- .../react-ts/frontend/vite.config.ts | 2 +- .../templates/templates/react-ts/main.tmpl.go | 11 +- .../templates/react/frontend/package.json | 2 +- .../templates/react/frontend/vite.config.js | 2 +- .../templates/templates/react/main.tmpl.go | 11 +- .../templates/svelte-ts/frontend/package.json | 2 +- .../svelte-ts/frontend/vite.config.ts | 4 +- .../templates/svelte-ts/main.tmpl.go | 11 +- .../templates/svelte/frontend/package.json | 2 +- .../templates/svelte/frontend/vite.config.js | 4 +- .../templates/templates/svelte/main.tmpl.go | 11 +- .../vanilla-ts/frontend/package.json | 2 +- .../templates/vanilla-ts/main.tmpl.go | 11 +- .../templates/vanilla/frontend/package.json | 2 +- .../templates/templates/vanilla/main.tmpl.go | 11 +- .../vue-ts/frontend/.vscode/extensions.json | 4 +- .../templates/vue-ts/frontend/README.md | 2 +- .../templates/vue-ts/frontend/package.json | 4 +- .../templates/vue-ts/frontend/src/env.d.ts | 8 +- .../templates/vue-ts/frontend/vite.config.ts | 2 +- .../templates/templates/vue-ts/main.tmpl.go | 11 +- .../vue/frontend/.vscode/extensions.json | 4 +- .../templates/vue/frontend/README.md | 2 +- .../templates/vue/frontend/package.json | 4 +- .../templates/templates/vue/main.tmpl.go | 11 +- .../frontend/runtime/dev/package-lock.json | 810 +----------------- 41 files changed, 120 insertions(+), 912 deletions(-) diff --git a/v2/cmd/wails/internal/commands/initialise/templates/base/main.tmpl.go b/v2/cmd/wails/internal/commands/initialise/templates/base/main.tmpl.go index c60affe67..feeeaa186 100644 --- a/v2/cmd/wails/internal/commands/initialise/templates/base/main.tmpl.go +++ b/v2/cmd/wails/internal/commands/initialise/templates/base/main.tmpl.go @@ -16,11 +16,12 @@ func main() { // Create application with options err := wails.Run(&options.App{ - Title: "{{.ProjectName}}", - Width: 1024, - Height: 768, - Assets: assets, - OnStartup: app.startup, + Title: "{{.ProjectName}}", + Width: 1024, + Height: 768, + Assets: assets, + BackgroundColour: &options.RGBA{R: 27, G: 38, B: 54, A: 1}, + OnStartup: app.startup, Bind: []interface{}{ app, }, diff --git a/v2/cmd/wails/internal/commands/initialise/templates/generate/generate.go b/v2/cmd/wails/internal/commands/initialise/templates/generate/generate.go index 8e0fec4fa..5d366b2c5 100644 --- a/v2/cmd/wails/internal/commands/initialise/templates/generate/generate.go +++ b/v2/cmd/wails/internal/commands/initialise/templates/generate/generate.go @@ -158,11 +158,11 @@ var templates = []*template{ func main() { - //rebuildRuntime() - // - //for _, t := range templates { - // createTemplate(t) - //} + rebuildRuntime() + + for _, t := range templates { + createTemplate(t) + } // copy plain template s.COPYDIR("plain", "../templates/plain") diff --git a/v2/cmd/wails/internal/commands/initialise/templates/generate/plain/main.tmpl.go b/v2/cmd/wails/internal/commands/initialise/templates/generate/plain/main.tmpl.go index c84f4b9cb..fc96ccb4e 100644 --- a/v2/cmd/wails/internal/commands/initialise/templates/generate/plain/main.tmpl.go +++ b/v2/cmd/wails/internal/commands/initialise/templates/generate/plain/main.tmpl.go @@ -36,7 +36,7 @@ func main() { Frameless: false, StartHidden: false, HideWindowOnClose: false, - BackgroundColour: &options.RGBA{R: 255, G: 255, B: 255, A: 255}, + BackgroundColour: &options.RGBA{R: 27, G: 38, B: 54, A: 1}, Assets: assets, Menu: nil, Logger: nil, diff --git a/v2/cmd/wails/internal/commands/initialise/templates/templates/lit-ts/frontend/package.json b/v2/cmd/wails/internal/commands/initialise/templates/templates/lit-ts/frontend/package.json index f51a554cf..e4567f274 100644 --- a/v2/cmd/wails/internal/commands/initialise/templates/templates/lit-ts/frontend/package.json +++ b/v2/cmd/wails/internal/commands/initialise/templates/templates/lit-ts/frontend/package.json @@ -19,7 +19,7 @@ "lit": "^2.0.2" }, "devDependencies": { - "vite": "^2.9.5", + "vite": "^2.9.9", "typescript": "^4.5.4" } } \ No newline at end of file diff --git a/v2/cmd/wails/internal/commands/initialise/templates/templates/lit-ts/main.tmpl.go b/v2/cmd/wails/internal/commands/initialise/templates/templates/lit-ts/main.tmpl.go index c60affe67..feeeaa186 100644 --- a/v2/cmd/wails/internal/commands/initialise/templates/templates/lit-ts/main.tmpl.go +++ b/v2/cmd/wails/internal/commands/initialise/templates/templates/lit-ts/main.tmpl.go @@ -16,11 +16,12 @@ func main() { // Create application with options err := wails.Run(&options.App{ - Title: "{{.ProjectName}}", - Width: 1024, - Height: 768, - Assets: assets, - OnStartup: app.startup, + Title: "{{.ProjectName}}", + Width: 1024, + Height: 768, + Assets: assets, + BackgroundColour: &options.RGBA{R: 27, G: 38, B: 54, A: 1}, + OnStartup: app.startup, Bind: []interface{}{ app, }, diff --git a/v2/cmd/wails/internal/commands/initialise/templates/templates/lit/frontend/package.json b/v2/cmd/wails/internal/commands/initialise/templates/templates/lit/frontend/package.json index 9ddc2e9f4..cb172cb12 100644 --- a/v2/cmd/wails/internal/commands/initialise/templates/templates/lit/frontend/package.json +++ b/v2/cmd/wails/internal/commands/initialise/templates/templates/lit/frontend/package.json @@ -17,6 +17,6 @@ "lit": "^2.0.2" }, "devDependencies": { - "vite": "^2.9.5" + "vite": "^2.9.9" } } \ No newline at end of file diff --git a/v2/cmd/wails/internal/commands/initialise/templates/templates/lit/main.tmpl.go b/v2/cmd/wails/internal/commands/initialise/templates/templates/lit/main.tmpl.go index c60affe67..feeeaa186 100644 --- a/v2/cmd/wails/internal/commands/initialise/templates/templates/lit/main.tmpl.go +++ b/v2/cmd/wails/internal/commands/initialise/templates/templates/lit/main.tmpl.go @@ -16,11 +16,12 @@ func main() { // Create application with options err := wails.Run(&options.App{ - Title: "{{.ProjectName}}", - Width: 1024, - Height: 768, - Assets: assets, - OnStartup: app.startup, + Title: "{{.ProjectName}}", + Width: 1024, + Height: 768, + Assets: assets, + BackgroundColour: &options.RGBA{R: 27, G: 38, B: 54, A: 1}, + OnStartup: app.startup, Bind: []interface{}{ app, }, diff --git a/v2/cmd/wails/internal/commands/initialise/templates/templates/preact-ts/frontend/package.json b/v2/cmd/wails/internal/commands/initialise/templates/templates/preact-ts/frontend/package.json index 10ea6e6d3..7170ceb88 100644 --- a/v2/cmd/wails/internal/commands/initialise/templates/templates/preact-ts/frontend/package.json +++ b/v2/cmd/wails/internal/commands/initialise/templates/templates/preact-ts/frontend/package.json @@ -13,6 +13,6 @@ "devDependencies": { "@preact/preset-vite": "^2.1.5", "typescript": "^4.5.4", - "vite": "^2.9.5" + "vite": "^2.9.9" } } \ No newline at end of file diff --git a/v2/cmd/wails/internal/commands/initialise/templates/templates/preact-ts/frontend/src/preact.d.ts b/v2/cmd/wails/internal/commands/initialise/templates/templates/preact-ts/frontend/src/preact.d.ts index ac79d62a4..e69de29bb 100644 --- a/v2/cmd/wails/internal/commands/initialise/templates/templates/preact-ts/frontend/src/preact.d.ts +++ b/v2/cmd/wails/internal/commands/initialise/templates/templates/preact-ts/frontend/src/preact.d.ts @@ -1 +0,0 @@ -import JSX = preact.JSX diff --git a/v2/cmd/wails/internal/commands/initialise/templates/templates/preact-ts/frontend/vite.config.ts b/v2/cmd/wails/internal/commands/initialise/templates/templates/preact-ts/frontend/vite.config.ts index e3bdaffe8..25845ba4b 100644 --- a/v2/cmd/wails/internal/commands/initialise/templates/templates/preact-ts/frontend/vite.config.ts +++ b/v2/cmd/wails/internal/commands/initialise/templates/templates/preact-ts/frontend/vite.config.ts @@ -1,4 +1,4 @@ -import { defineConfig } from 'vite' +import {defineConfig} from 'vite' import preact from '@preact/preset-vite' // https://vitejs.dev/config/ diff --git a/v2/cmd/wails/internal/commands/initialise/templates/templates/preact-ts/main.tmpl.go b/v2/cmd/wails/internal/commands/initialise/templates/templates/preact-ts/main.tmpl.go index c60affe67..feeeaa186 100644 --- a/v2/cmd/wails/internal/commands/initialise/templates/templates/preact-ts/main.tmpl.go +++ b/v2/cmd/wails/internal/commands/initialise/templates/templates/preact-ts/main.tmpl.go @@ -16,11 +16,12 @@ func main() { // Create application with options err := wails.Run(&options.App{ - Title: "{{.ProjectName}}", - Width: 1024, - Height: 768, - Assets: assets, - OnStartup: app.startup, + Title: "{{.ProjectName}}", + Width: 1024, + Height: 768, + Assets: assets, + BackgroundColour: &options.RGBA{R: 27, G: 38, B: 54, A: 1}, + OnStartup: app.startup, Bind: []interface{}{ app, }, diff --git a/v2/cmd/wails/internal/commands/initialise/templates/templates/preact/frontend/package.json b/v2/cmd/wails/internal/commands/initialise/templates/templates/preact/frontend/package.json index 9c4bd75c5..0908feee0 100644 --- a/v2/cmd/wails/internal/commands/initialise/templates/templates/preact/frontend/package.json +++ b/v2/cmd/wails/internal/commands/initialise/templates/templates/preact/frontend/package.json @@ -12,6 +12,6 @@ }, "devDependencies": { "@preact/preset-vite": "^2.1.5", - "vite": "^2.9.5" + "vite": "^2.9.9" } } \ No newline at end of file diff --git a/v2/cmd/wails/internal/commands/initialise/templates/templates/preact/frontend/vite.config.js b/v2/cmd/wails/internal/commands/initialise/templates/templates/preact/frontend/vite.config.js index e3bdaffe8..25845ba4b 100644 --- a/v2/cmd/wails/internal/commands/initialise/templates/templates/preact/frontend/vite.config.js +++ b/v2/cmd/wails/internal/commands/initialise/templates/templates/preact/frontend/vite.config.js @@ -1,4 +1,4 @@ -import { defineConfig } from 'vite' +import {defineConfig} from 'vite' import preact from '@preact/preset-vite' // https://vitejs.dev/config/ diff --git a/v2/cmd/wails/internal/commands/initialise/templates/templates/preact/main.tmpl.go b/v2/cmd/wails/internal/commands/initialise/templates/templates/preact/main.tmpl.go index c60affe67..feeeaa186 100644 --- a/v2/cmd/wails/internal/commands/initialise/templates/templates/preact/main.tmpl.go +++ b/v2/cmd/wails/internal/commands/initialise/templates/templates/preact/main.tmpl.go @@ -16,11 +16,12 @@ func main() { // Create application with options err := wails.Run(&options.App{ - Title: "{{.ProjectName}}", - Width: 1024, - Height: 768, - Assets: assets, - OnStartup: app.startup, + Title: "{{.ProjectName}}", + Width: 1024, + Height: 768, + Assets: assets, + BackgroundColour: &options.RGBA{R: 27, G: 38, B: 54, A: 1}, + OnStartup: app.startup, Bind: []interface{}{ app, }, diff --git a/v2/cmd/wails/internal/commands/initialise/templates/templates/react-ts/frontend/package.json b/v2/cmd/wails/internal/commands/initialise/templates/templates/react-ts/frontend/package.json index 8be3b8099..d465e2c1e 100644 --- a/v2/cmd/wails/internal/commands/initialise/templates/templates/react-ts/frontend/package.json +++ b/v2/cmd/wails/internal/commands/initialise/templates/templates/react-ts/frontend/package.json @@ -16,6 +16,6 @@ "@types/react-dom": "^18.0.0", "@vitejs/plugin-react": "^1.3.0", "typescript": "^4.6.3", - "vite": "^2.9.5" + "vite": "^2.9.9" } } \ No newline at end of file diff --git a/v2/cmd/wails/internal/commands/initialise/templates/templates/react-ts/frontend/vite.config.ts b/v2/cmd/wails/internal/commands/initialise/templates/templates/react-ts/frontend/vite.config.ts index b1b5f91e5..49550655a 100644 --- a/v2/cmd/wails/internal/commands/initialise/templates/templates/react-ts/frontend/vite.config.ts +++ b/v2/cmd/wails/internal/commands/initialise/templates/templates/react-ts/frontend/vite.config.ts @@ -1,4 +1,4 @@ -import { defineConfig } from 'vite' +import {defineConfig} from 'vite' import react from '@vitejs/plugin-react' // https://vitejs.dev/config/ diff --git a/v2/cmd/wails/internal/commands/initialise/templates/templates/react-ts/main.tmpl.go b/v2/cmd/wails/internal/commands/initialise/templates/templates/react-ts/main.tmpl.go index c60affe67..feeeaa186 100644 --- a/v2/cmd/wails/internal/commands/initialise/templates/templates/react-ts/main.tmpl.go +++ b/v2/cmd/wails/internal/commands/initialise/templates/templates/react-ts/main.tmpl.go @@ -16,11 +16,12 @@ func main() { // Create application with options err := wails.Run(&options.App{ - Title: "{{.ProjectName}}", - Width: 1024, - Height: 768, - Assets: assets, - OnStartup: app.startup, + Title: "{{.ProjectName}}", + Width: 1024, + Height: 768, + Assets: assets, + BackgroundColour: &options.RGBA{R: 27, G: 38, B: 54, A: 1}, + OnStartup: app.startup, Bind: []interface{}{ app, }, diff --git a/v2/cmd/wails/internal/commands/initialise/templates/templates/react/frontend/package.json b/v2/cmd/wails/internal/commands/initialise/templates/templates/react/frontend/package.json index 6ccd4766f..3c1470704 100644 --- a/v2/cmd/wails/internal/commands/initialise/templates/templates/react/frontend/package.json +++ b/v2/cmd/wails/internal/commands/initialise/templates/templates/react/frontend/package.json @@ -15,6 +15,6 @@ "@types/react": "^18.0.0", "@types/react-dom": "^18.0.0", "@vitejs/plugin-react": "^1.3.0", - "vite": "^2.9.5" + "vite": "^2.9.9" } } \ No newline at end of file diff --git a/v2/cmd/wails/internal/commands/initialise/templates/templates/react/frontend/vite.config.js b/v2/cmd/wails/internal/commands/initialise/templates/templates/react/frontend/vite.config.js index b1b5f91e5..49550655a 100644 --- a/v2/cmd/wails/internal/commands/initialise/templates/templates/react/frontend/vite.config.js +++ b/v2/cmd/wails/internal/commands/initialise/templates/templates/react/frontend/vite.config.js @@ -1,4 +1,4 @@ -import { defineConfig } from 'vite' +import {defineConfig} from 'vite' import react from '@vitejs/plugin-react' // https://vitejs.dev/config/ diff --git a/v2/cmd/wails/internal/commands/initialise/templates/templates/react/main.tmpl.go b/v2/cmd/wails/internal/commands/initialise/templates/templates/react/main.tmpl.go index c60affe67..feeeaa186 100644 --- a/v2/cmd/wails/internal/commands/initialise/templates/templates/react/main.tmpl.go +++ b/v2/cmd/wails/internal/commands/initialise/templates/templates/react/main.tmpl.go @@ -16,11 +16,12 @@ func main() { // Create application with options err := wails.Run(&options.App{ - Title: "{{.ProjectName}}", - Width: 1024, - Height: 768, - Assets: assets, - OnStartup: app.startup, + Title: "{{.ProjectName}}", + Width: 1024, + Height: 768, + Assets: assets, + BackgroundColour: &options.RGBA{R: 27, G: 38, B: 54, A: 1}, + OnStartup: app.startup, Bind: []interface{}{ app, }, diff --git a/v2/cmd/wails/internal/commands/initialise/templates/templates/svelte-ts/frontend/package.json b/v2/cmd/wails/internal/commands/initialise/templates/templates/svelte-ts/frontend/package.json index 7fb9aecdc..955eb00da 100644 --- a/v2/cmd/wails/internal/commands/initialise/templates/templates/svelte-ts/frontend/package.json +++ b/v2/cmd/wails/internal/commands/initialise/templates/templates/svelte-ts/frontend/package.json @@ -17,6 +17,6 @@ "svelte-preprocess": "^4.9.8", "tslib": "^2.3.1", "typescript": "^4.5.4", - "vite": "^2.9.5" + "vite": "^2.9.9" } } \ No newline at end of file diff --git a/v2/cmd/wails/internal/commands/initialise/templates/templates/svelte-ts/frontend/vite.config.ts b/v2/cmd/wails/internal/commands/initialise/templates/templates/svelte-ts/frontend/vite.config.ts index 401b4d4bd..d37616f9a 100644 --- a/v2/cmd/wails/internal/commands/initialise/templates/templates/svelte-ts/frontend/vite.config.ts +++ b/v2/cmd/wails/internal/commands/initialise/templates/templates/svelte-ts/frontend/vite.config.ts @@ -1,5 +1,5 @@ -import { defineConfig } from 'vite' -import { svelte } from '@sveltejs/vite-plugin-svelte' +import {defineConfig} from 'vite' +import {svelte} from '@sveltejs/vite-plugin-svelte' // https://vitejs.dev/config/ export default defineConfig({ diff --git a/v2/cmd/wails/internal/commands/initialise/templates/templates/svelte-ts/main.tmpl.go b/v2/cmd/wails/internal/commands/initialise/templates/templates/svelte-ts/main.tmpl.go index c60affe67..feeeaa186 100644 --- a/v2/cmd/wails/internal/commands/initialise/templates/templates/svelte-ts/main.tmpl.go +++ b/v2/cmd/wails/internal/commands/initialise/templates/templates/svelte-ts/main.tmpl.go @@ -16,11 +16,12 @@ func main() { // Create application with options err := wails.Run(&options.App{ - Title: "{{.ProjectName}}", - Width: 1024, - Height: 768, - Assets: assets, - OnStartup: app.startup, + Title: "{{.ProjectName}}", + Width: 1024, + Height: 768, + Assets: assets, + BackgroundColour: &options.RGBA{R: 27, G: 38, B: 54, A: 1}, + OnStartup: app.startup, Bind: []interface{}{ app, }, diff --git a/v2/cmd/wails/internal/commands/initialise/templates/templates/svelte/frontend/package.json b/v2/cmd/wails/internal/commands/initialise/templates/templates/svelte/frontend/package.json index c14404abd..890133352 100644 --- a/v2/cmd/wails/internal/commands/initialise/templates/templates/svelte/frontend/package.json +++ b/v2/cmd/wails/internal/commands/initialise/templates/templates/svelte/frontend/package.json @@ -11,6 +11,6 @@ "devDependencies": { "@sveltejs/vite-plugin-svelte": "^1.0.0-next.30", "svelte": "^3.44.0", - "vite": "^2.9.5" + "vite": "^2.9.9" } } \ No newline at end of file diff --git a/v2/cmd/wails/internal/commands/initialise/templates/templates/svelte/frontend/vite.config.js b/v2/cmd/wails/internal/commands/initialise/templates/templates/svelte/frontend/vite.config.js index 401b4d4bd..d37616f9a 100644 --- a/v2/cmd/wails/internal/commands/initialise/templates/templates/svelte/frontend/vite.config.js +++ b/v2/cmd/wails/internal/commands/initialise/templates/templates/svelte/frontend/vite.config.js @@ -1,5 +1,5 @@ -import { defineConfig } from 'vite' -import { svelte } from '@sveltejs/vite-plugin-svelte' +import {defineConfig} from 'vite' +import {svelte} from '@sveltejs/vite-plugin-svelte' // https://vitejs.dev/config/ export default defineConfig({ diff --git a/v2/cmd/wails/internal/commands/initialise/templates/templates/svelte/main.tmpl.go b/v2/cmd/wails/internal/commands/initialise/templates/templates/svelte/main.tmpl.go index c60affe67..feeeaa186 100644 --- a/v2/cmd/wails/internal/commands/initialise/templates/templates/svelte/main.tmpl.go +++ b/v2/cmd/wails/internal/commands/initialise/templates/templates/svelte/main.tmpl.go @@ -16,11 +16,12 @@ func main() { // Create application with options err := wails.Run(&options.App{ - Title: "{{.ProjectName}}", - Width: 1024, - Height: 768, - Assets: assets, - OnStartup: app.startup, + Title: "{{.ProjectName}}", + Width: 1024, + Height: 768, + Assets: assets, + BackgroundColour: &options.RGBA{R: 27, G: 38, B: 54, A: 1}, + OnStartup: app.startup, Bind: []interface{}{ app, }, diff --git a/v2/cmd/wails/internal/commands/initialise/templates/templates/vanilla-ts/frontend/package.json b/v2/cmd/wails/internal/commands/initialise/templates/templates/vanilla-ts/frontend/package.json index 7cf9f3e21..37305b4c0 100644 --- a/v2/cmd/wails/internal/commands/initialise/templates/templates/vanilla-ts/frontend/package.json +++ b/v2/cmd/wails/internal/commands/initialise/templates/templates/vanilla-ts/frontend/package.json @@ -9,6 +9,6 @@ }, "devDependencies": { "typescript": "^4.5.4", - "vite": "^2.9.5" + "vite": "^2.9.9" } } \ No newline at end of file diff --git a/v2/cmd/wails/internal/commands/initialise/templates/templates/vanilla-ts/main.tmpl.go b/v2/cmd/wails/internal/commands/initialise/templates/templates/vanilla-ts/main.tmpl.go index c60affe67..feeeaa186 100644 --- a/v2/cmd/wails/internal/commands/initialise/templates/templates/vanilla-ts/main.tmpl.go +++ b/v2/cmd/wails/internal/commands/initialise/templates/templates/vanilla-ts/main.tmpl.go @@ -16,11 +16,12 @@ func main() { // Create application with options err := wails.Run(&options.App{ - Title: "{{.ProjectName}}", - Width: 1024, - Height: 768, - Assets: assets, - OnStartup: app.startup, + Title: "{{.ProjectName}}", + Width: 1024, + Height: 768, + Assets: assets, + BackgroundColour: &options.RGBA{R: 27, G: 38, B: 54, A: 1}, + OnStartup: app.startup, Bind: []interface{}{ app, }, diff --git a/v2/cmd/wails/internal/commands/initialise/templates/templates/vanilla/frontend/package.json b/v2/cmd/wails/internal/commands/initialise/templates/templates/vanilla/frontend/package.json index b1420743b..4ac881798 100644 --- a/v2/cmd/wails/internal/commands/initialise/templates/templates/vanilla/frontend/package.json +++ b/v2/cmd/wails/internal/commands/initialise/templates/templates/vanilla/frontend/package.json @@ -8,6 +8,6 @@ "preview": "vite preview" }, "devDependencies": { - "vite": "^2.9.5" + "vite": "^2.9.9" } } \ No newline at end of file diff --git a/v2/cmd/wails/internal/commands/initialise/templates/templates/vanilla/main.tmpl.go b/v2/cmd/wails/internal/commands/initialise/templates/templates/vanilla/main.tmpl.go index c60affe67..feeeaa186 100644 --- a/v2/cmd/wails/internal/commands/initialise/templates/templates/vanilla/main.tmpl.go +++ b/v2/cmd/wails/internal/commands/initialise/templates/templates/vanilla/main.tmpl.go @@ -16,11 +16,12 @@ func main() { // Create application with options err := wails.Run(&options.App{ - Title: "{{.ProjectName}}", - Width: 1024, - Height: 768, - Assets: assets, - OnStartup: app.startup, + Title: "{{.ProjectName}}", + Width: 1024, + Height: 768, + Assets: assets, + BackgroundColour: &options.RGBA{R: 27, G: 38, B: 54, A: 1}, + OnStartup: app.startup, Bind: []interface{}{ app, }, diff --git a/v2/cmd/wails/internal/commands/initialise/templates/templates/vue-ts/frontend/.vscode/extensions.json b/v2/cmd/wails/internal/commands/initialise/templates/templates/vue-ts/frontend/.vscode/extensions.json index 3dc5b08bc..57011895d 100644 --- a/v2/cmd/wails/internal/commands/initialise/templates/templates/vue-ts/frontend/.vscode/extensions.json +++ b/v2/cmd/wails/internal/commands/initialise/templates/templates/vue-ts/frontend/.vscode/extensions.json @@ -1,3 +1,5 @@ { - "recommendations": ["johnsoncodehk.volar"] + "recommendations": [ + "Vue.volar" + ] } diff --git a/v2/cmd/wails/internal/commands/initialise/templates/templates/vue-ts/frontend/README.md b/v2/cmd/wails/internal/commands/initialise/templates/templates/vue-ts/frontend/README.md index e43251672..30b15e215 100644 --- a/v2/cmd/wails/internal/commands/initialise/templates/templates/vue-ts/frontend/README.md +++ b/v2/cmd/wails/internal/commands/initialise/templates/templates/vue-ts/frontend/README.md @@ -4,7 +4,7 @@ This template should help get you started developing with Vue 3 and TypeScript i ## Recommended IDE Setup -- [VS Code](https://code.visualstudio.com/) + [Volar](https://marketplace.visualstudio.com/items?itemName=johnsoncodehk.volar) +- [VS Code](https://code.visualstudio.com/) + [Volar](https://marketplace.visualstudio.com/items?itemName=Vue.volar) ## Type Support For `.vue` Imports in TS diff --git a/v2/cmd/wails/internal/commands/initialise/templates/templates/vue-ts/frontend/package.json b/v2/cmd/wails/internal/commands/initialise/templates/templates/vue-ts/frontend/package.json index 20f61c514..2cfff6a47 100644 --- a/v2/cmd/wails/internal/commands/initialise/templates/templates/vue-ts/frontend/package.json +++ b/v2/cmd/wails/internal/commands/initialise/templates/templates/vue-ts/frontend/package.json @@ -11,9 +11,9 @@ "vue": "^3.2.25" }, "devDependencies": { - "@vitejs/plugin-vue": "^2.3.1", + "@vitejs/plugin-vue": "^2.3.3", "typescript": "^4.5.4", - "vite": "^2.9.5", + "vite": "^2.9.9", "vue-tsc": "^0.34.7", "@babel/types": "^7.17.10" } diff --git a/v2/cmd/wails/internal/commands/initialise/templates/templates/vue-ts/frontend/src/env.d.ts b/v2/cmd/wails/internal/commands/initialise/templates/templates/vue-ts/frontend/src/env.d.ts index aafef9509..d0c7971d7 100644 --- a/v2/cmd/wails/internal/commands/initialise/templates/templates/vue-ts/frontend/src/env.d.ts +++ b/v2/cmd/wails/internal/commands/initialise/templates/templates/vue-ts/frontend/src/env.d.ts @@ -1,8 +1,8 @@ /// declare module '*.vue' { - import type { DefineComponent } from 'vue' - // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/ban-types - const component: DefineComponent<{}, {}, any> - export default component + import type {DefineComponent} from 'vue' + // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/ban-types + const component: DefineComponent<{}, {}, any> + export default component } diff --git a/v2/cmd/wails/internal/commands/initialise/templates/templates/vue-ts/frontend/vite.config.ts b/v2/cmd/wails/internal/commands/initialise/templates/templates/vue-ts/frontend/vite.config.ts index 315212d69..a30c338ed 100644 --- a/v2/cmd/wails/internal/commands/initialise/templates/templates/vue-ts/frontend/vite.config.ts +++ b/v2/cmd/wails/internal/commands/initialise/templates/templates/vue-ts/frontend/vite.config.ts @@ -1,4 +1,4 @@ -import { defineConfig } from 'vite' +import {defineConfig} from 'vite' import vue from '@vitejs/plugin-vue' // https://vitejs.dev/config/ diff --git a/v2/cmd/wails/internal/commands/initialise/templates/templates/vue-ts/main.tmpl.go b/v2/cmd/wails/internal/commands/initialise/templates/templates/vue-ts/main.tmpl.go index c60affe67..feeeaa186 100644 --- a/v2/cmd/wails/internal/commands/initialise/templates/templates/vue-ts/main.tmpl.go +++ b/v2/cmd/wails/internal/commands/initialise/templates/templates/vue-ts/main.tmpl.go @@ -16,11 +16,12 @@ func main() { // Create application with options err := wails.Run(&options.App{ - Title: "{{.ProjectName}}", - Width: 1024, - Height: 768, - Assets: assets, - OnStartup: app.startup, + Title: "{{.ProjectName}}", + Width: 1024, + Height: 768, + Assets: assets, + BackgroundColour: &options.RGBA{R: 27, G: 38, B: 54, A: 1}, + OnStartup: app.startup, Bind: []interface{}{ app, }, diff --git a/v2/cmd/wails/internal/commands/initialise/templates/templates/vue/frontend/.vscode/extensions.json b/v2/cmd/wails/internal/commands/initialise/templates/templates/vue/frontend/.vscode/extensions.json index 3dc5b08bc..57011895d 100644 --- a/v2/cmd/wails/internal/commands/initialise/templates/templates/vue/frontend/.vscode/extensions.json +++ b/v2/cmd/wails/internal/commands/initialise/templates/templates/vue/frontend/.vscode/extensions.json @@ -1,3 +1,5 @@ { - "recommendations": ["johnsoncodehk.volar"] + "recommendations": [ + "Vue.volar" + ] } diff --git a/v2/cmd/wails/internal/commands/initialise/templates/templates/vue/frontend/README.md b/v2/cmd/wails/internal/commands/initialise/templates/templates/vue/frontend/README.md index eea15cef4..02124a7a0 100644 --- a/v2/cmd/wails/internal/commands/initialise/templates/templates/vue/frontend/README.md +++ b/v2/cmd/wails/internal/commands/initialise/templates/templates/vue/frontend/README.md @@ -4,4 +4,4 @@ This template should help get you started developing with Vue 3 in Vite. The tem ## Recommended IDE Setup -- [VS Code](https://code.visualstudio.com/) + [Volar](https://marketplace.visualstudio.com/items?itemName=johnsoncodehk.volar) +- [VS Code](https://code.visualstudio.com/) + [Volar](https://marketplace.visualstudio.com/items?itemName=Vue.volar) diff --git a/v2/cmd/wails/internal/commands/initialise/templates/templates/vue/frontend/package.json b/v2/cmd/wails/internal/commands/initialise/templates/templates/vue/frontend/package.json index c0f982635..d171757c8 100644 --- a/v2/cmd/wails/internal/commands/initialise/templates/templates/vue/frontend/package.json +++ b/v2/cmd/wails/internal/commands/initialise/templates/templates/vue/frontend/package.json @@ -11,7 +11,7 @@ "vue": "^3.2.25" }, "devDependencies": { - "@vitejs/plugin-vue": "^2.3.1", - "vite": "^2.9.5" + "@vitejs/plugin-vue": "^2.3.3", + "vite": "^2.9.9" } } \ No newline at end of file diff --git a/v2/cmd/wails/internal/commands/initialise/templates/templates/vue/main.tmpl.go b/v2/cmd/wails/internal/commands/initialise/templates/templates/vue/main.tmpl.go index c60affe67..feeeaa186 100644 --- a/v2/cmd/wails/internal/commands/initialise/templates/templates/vue/main.tmpl.go +++ b/v2/cmd/wails/internal/commands/initialise/templates/templates/vue/main.tmpl.go @@ -16,11 +16,12 @@ func main() { // Create application with options err := wails.Run(&options.App{ - Title: "{{.ProjectName}}", - Width: 1024, - Height: 768, - Assets: assets, - OnStartup: app.startup, + Title: "{{.ProjectName}}", + Width: 1024, + Height: 768, + Assets: assets, + BackgroundColour: &options.RGBA{R: 27, G: 38, B: 54, A: 1}, + OnStartup: app.startup, Bind: []interface{}{ app, }, diff --git a/v2/internal/frontend/runtime/dev/package-lock.json b/v2/internal/frontend/runtime/dev/package-lock.json index 9f99cdd04..ee4166ac2 100644 --- a/v2/internal/frontend/runtime/dev/package-lock.json +++ b/v2/internal/frontend/runtime/dev/package-lock.json @@ -1,816 +1,8 @@ { "name": "dev", "version": "2.0.0", - "lockfileVersion": 2, + "lockfileVersion": 1, "requires": true, - "packages": { - "": { - "name": "dev", - "version": "2.0.0", - "license": "ISC", - "devDependencies": { - "esbuild": "^0.12.17", - "esbuild-svelte": "^0.5.6", - "npm-run-all": "^4.1.5", - "svelte": "^3.42.2" - } - }, - "node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true - }, - "node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", - "dev": true, - "dependencies": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" - } - }, - "node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true - }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", - "dev": true - }, - "node_modules/cross-spawn": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", - "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", - "dev": true, - "dependencies": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - }, - "engines": { - "node": ">=4.8" - } - }, - "node_modules/define-properties": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", - "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", - "dev": true, - "dependencies": { - "object-keys": "^1.0.12" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", - "dev": true, - "dependencies": { - "is-arrayish": "^0.2.1" - } - }, - "node_modules/es-abstract": { - "version": "1.18.5", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.5.tgz", - "integrity": "sha512-DDggyJLoS91CkJjgauM5c0yZMjiD1uK3KcaCeAmffGwZ+ODWzOkPN4QwRbsK5DOFf06fywmyLci3ZD8jLGhVYA==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "get-intrinsic": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.2", - "internal-slot": "^1.0.3", - "is-callable": "^1.2.3", - "is-negative-zero": "^2.0.1", - "is-regex": "^1.1.3", - "is-string": "^1.0.6", - "object-inspect": "^1.11.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.2", - "string.prototype.trimend": "^1.0.4", - "string.prototype.trimstart": "^1.0.4", - "unbox-primitive": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", - "dev": true, - "dependencies": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/esbuild": { - "version": "0.12.21", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.12.21.tgz", - "integrity": "sha512-7hyXbU3g94aREufI/5nls7Xcc+RGQeZWZApm6hoBaFvt2BPtpT4TjFMQ9Tb1jU8XyBGz00ShmiyflCogphMHFQ==", - "dev": true, - "hasInstallScript": true, - "bin": { - "esbuild": "bin/esbuild" - } - }, - "node_modules/esbuild-svelte": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/esbuild-svelte/-/esbuild-svelte-0.5.6.tgz", - "integrity": "sha512-Bz8nU45FrT6sP/Tf3M2rQUuBGxnDSNSPZNIoYwSNt5H+wjSyo/t+zm94tgnOZsR6GgpDMbNQgo4jGbK0NLvEfw==", - "dev": true, - "dependencies": { - "svelte": "^3.42.6" - }, - "peerDependencies": { - "esbuild": ">=0.9.6" - } - }, - "node_modules/esbuild-svelte/node_modules/svelte": { - "version": "3.43.1", - "resolved": "https://registry.npmjs.org/svelte/-/svelte-3.43.1.tgz", - "integrity": "sha512-nvPIaKx4HLzYlSdquISZpgG1Kqr2VAWQjZOt3Iwm3UhbqmA0LnSx4k1YpRMEhjQYW3ZCqQoK8Egto9tv4YewMA==", - "dev": true, - "engines": { - "node": ">= 8" - } - }, - "node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "dev": true, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true - }, - "node_modules/get-intrinsic": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", - "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", - "dev": true, - "dependencies": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1" - } - }, - "node_modules/graceful-fs": { - "version": "4.2.8", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.8.tgz", - "integrity": "sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg==", - "dev": true - }, - "node_modules/has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dev": true, - "dependencies": { - "function-bind": "^1.1.1" - }, - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/has-bigints": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.1.tgz", - "integrity": "sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA==", - "dev": true - }, - "node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/has-symbols": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", - "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", - "dev": true, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/has-tostringtag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", - "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", - "dev": true, - "dependencies": { - "has-symbols": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/hosted-git-info": { - "version": "2.8.9", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", - "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", - "dev": true - }, - "node_modules/internal-slot": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", - "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==", - "dev": true, - "dependencies": { - "get-intrinsic": "^1.1.0", - "has": "^1.0.3", - "side-channel": "^1.0.4" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", - "dev": true - }, - "node_modules/is-bigint": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", - "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", - "dev": true, - "dependencies": { - "has-bigints": "^1.0.1" - } - }, - "node_modules/is-boolean-object": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", - "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/is-callable": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.4.tgz", - "integrity": "sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==", - "dev": true, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/is-core-module": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.6.0.tgz", - "integrity": "sha512-wShG8vs60jKfPWpF2KZRaAtvt3a20OAn7+IJ6hLPECpSABLcKtFKTTI4ZtH5QcBruBHlq+WsdHWyz0BCZW7svQ==", - "dev": true, - "dependencies": { - "has": "^1.0.3" - } - }, - "node_modules/is-date-object": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", - "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", - "dev": true, - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/is-negative-zero": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.1.tgz", - "integrity": "sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w==", - "dev": true, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/is-number-object": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.6.tgz", - "integrity": "sha512-bEVOqiRcvo3zO1+G2lVMy+gkkEm9Yh7cDMRusKKu5ZJKPUYSJwICTKZrNKHA2EbSP0Tu0+6B/emsYNHZyn6K8g==", - "dev": true, - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/is-regex": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", - "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/is-string": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", - "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", - "dev": true, - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/is-symbol": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", - "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", - "dev": true, - "dependencies": { - "has-symbols": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", - "dev": true - }, - "node_modules/json-parse-better-errors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", - "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", - "dev": true - }, - "node_modules/load-json-file": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", - "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=", - "dev": true, - "dependencies": { - "graceful-fs": "^4.1.2", - "parse-json": "^4.0.0", - "pify": "^3.0.0", - "strip-bom": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/memorystream": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/memorystream/-/memorystream-0.3.1.tgz", - "integrity": "sha1-htcJCzDORV1j+64S3aUaR93K+bI=", - "dev": true, - "engines": { - "node": ">= 0.10.0" - } - }, - "node_modules/minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/nice-try": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", - "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", - "dev": true - }, - "node_modules/normalize-package-data": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", - "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", - "dev": true, - "dependencies": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" - } - }, - "node_modules/npm-run-all": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/npm-run-all/-/npm-run-all-4.1.5.tgz", - "integrity": "sha512-Oo82gJDAVcaMdi3nuoKFavkIHBRVqQ1qvMb+9LHk/cF4P6B2m8aP04hGf7oL6wZ9BuGwX1onlLhpuoofSyoQDQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "chalk": "^2.4.1", - "cross-spawn": "^6.0.5", - "memorystream": "^0.3.1", - "minimatch": "^3.0.4", - "pidtree": "^0.3.0", - "read-pkg": "^3.0.0", - "shell-quote": "^1.6.1", - "string.prototype.padend": "^3.0.0" - }, - "bin": { - "npm-run-all": "bin/npm-run-all/index.js", - "run-p": "bin/run-p/index.js", - "run-s": "bin/run-s/index.js" - }, - "engines": { - "node": ">= 4" - } - }, - "node_modules/object-inspect": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.11.0.tgz", - "integrity": "sha512-jp7ikS6Sd3GxQfZJPyH3cjcbJF6GZPClgdV+EFygjFLQ5FmW/dRUnTd9PQ9k0JhoNDabWFbpF1yCdSWCC6gexg==", - "dev": true - }, - "node_modules/object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "dev": true, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/object.assign": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", - "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "has-symbols": "^1.0.1", - "object-keys": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", - "dev": true, - "dependencies": { - "error-ex": "^1.3.1", - "json-parse-better-errors": "^1.0.1" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/path-key": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true - }, - "node_modules/path-type": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", - "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", - "dev": true, - "dependencies": { - "pify": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/pidtree": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/pidtree/-/pidtree-0.3.1.tgz", - "integrity": "sha512-qQbW94hLHEqCg7nhby4yRC7G2+jYHY4Rguc2bjw7Uug4GIJuu1tvf2uHaZv5Q8zdt+WKJ6qK1FOI6amaWUo5FA==", - "dev": true, - "bin": { - "pidtree": "bin/pidtree.js" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/read-pkg": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", - "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=", - "dev": true, - "dependencies": { - "load-json-file": "^4.0.0", - "normalize-package-data": "^2.3.2", - "path-type": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/resolve": { - "version": "1.20.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", - "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", - "dev": true, - "dependencies": { - "is-core-module": "^2.2.0", - "path-parse": "^1.0.6" - } - }, - "node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true, - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/shebang-command": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", - "dev": true, - "dependencies": { - "shebang-regex": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/shebang-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/shell-quote": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.3.tgz", - "integrity": "sha512-Vpfqwm4EnqGdlsBFNmHhxhElJYrdfcxPThu+ryKS5J8L/fhAwLazFZtq+S+TWZ9ANj2piSQLGj6NQg+lKPmxrw==", - "dev": true - }, - "node_modules/side-channel": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" - } - }, - "node_modules/spdx-correct": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", - "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", - "dev": true, - "dependencies": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" - } - }, - "node_modules/spdx-exceptions": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", - "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", - "dev": true - }, - "node_modules/spdx-expression-parse": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", - "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", - "dev": true, - "dependencies": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" - } - }, - "node_modules/spdx-license-ids": { - "version": "3.0.10", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.10.tgz", - "integrity": "sha512-oie3/+gKf7QtpitB0LYLETe+k8SifzsX4KixvpOsbI6S0kRiRQ5MKOio8eMSAKQ17N06+wdEOXRiId+zOxo0hA==", - "dev": true - }, - "node_modules/string.prototype.padend": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/string.prototype.padend/-/string.prototype.padend-3.1.2.tgz", - "integrity": "sha512-/AQFLdYvePENU3W5rgurfWSMU6n+Ww8n/3cUt7E+vPBB/D7YDG8x+qjoFs4M/alR2bW7Qg6xMjVwWUOvuQ0XpQ==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/string.prototype.trimend": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz", - "integrity": "sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" - } - }, - "node_modules/string.prototype.trimstart": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz", - "integrity": "sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" - } - }, - "node_modules/strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/svelte": { - "version": "3.42.2", - "resolved": "https://registry.npmjs.org/svelte/-/svelte-3.42.2.tgz", - "integrity": "sha512-FOyNYKXb8wdE0Ot+Ctt2/OyDLsNBP8+V6PUE9ag6ZKeLslIou0LnMu1fhtWUA+HjzKTbAM1yj+4PFLtg/3pMJA==", - "dev": true, - "engines": { - "node": ">= 8" - } - }, - "node_modules/unbox-primitive": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.1.tgz", - "integrity": "sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw==", - "dev": true, - "dependencies": { - "function-bind": "^1.1.1", - "has-bigints": "^1.0.1", - "has-symbols": "^1.0.2", - "which-boxed-primitive": "^1.0.2" - } - }, - "node_modules/validate-npm-package-license": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", - "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", - "dev": true, - "dependencies": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" - } - }, - "node_modules/which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "which": "bin/which" - } - }, - "node_modules/which-boxed-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", - "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", - "dev": true, - "dependencies": { - "is-bigint": "^1.0.1", - "is-boolean-object": "^1.1.0", - "is-number-object": "^1.0.4", - "is-string": "^1.0.5", - "is-symbol": "^1.0.3" - } - } - }, "dependencies": { "ansi-styles": { "version": "3.2.1", From c61ce1e2de3f0be983a1369c93a421162245f661 Mon Sep 17 00:00:00 2001 From: stffabi Date: Fri, 24 Jun 2022 22:46:23 +0200 Subject: [PATCH 61/87] [v2, windows] Make SetBackgroundColour compatible for windows/386 (#1493) * [v2, windows] Remove duplicate SetBackgroundColour * [v2, windows] Make SetBackgroundColour compatible for windows/386 --- .../frontend/desktop/windows/win32/consts.go | 1 + .../frontend/desktop/windows/win32/window.go | 18 ++++++++++++++++-- v2/internal/frontend/desktop/windows/window.go | 4 ---- 3 files changed, 17 insertions(+), 6 deletions(-) diff --git a/v2/internal/frontend/desktop/windows/win32/consts.go b/v2/internal/frontend/desktop/windows/win32/consts.go index 9b29bf2c1..8731664b7 100644 --- a/v2/internal/frontend/desktop/windows/win32/consts.go +++ b/v2/internal/frontend/desktop/windows/win32/consts.go @@ -15,6 +15,7 @@ var ( moduser32 = syscall.NewLazyDLL("user32.dll") procSystemParametersInfo = moduser32.NewProc("SystemParametersInfoW") procGetWindowLong = moduser32.NewProc("GetWindowLongW") + procSetClassLong = moduser32.NewProc("SetClassLongW") procSetClassLongPtr = moduser32.NewProc("SetClassLongPtrW") procShowWindow = moduser32.NewProc("ShowWindow") ) diff --git a/v2/internal/frontend/desktop/windows/win32/window.go b/v2/internal/frontend/desktop/windows/win32/window.go index c5db085ff..1ddcf4c98 100644 --- a/v2/internal/frontend/desktop/windows/win32/window.go +++ b/v2/internal/frontend/desktop/windows/win32/window.go @@ -4,10 +4,12 @@ package win32 import ( "fmt" - "github.com/wailsapp/wails/v2/internal/frontend/desktop/windows/winc" "log" + "strconv" "syscall" "unsafe" + + "github.com/wailsapp/wails/v2/internal/frontend/desktop/windows/winc" ) const ( @@ -119,7 +121,19 @@ func dwmExtendFrameIntoClientArea(hwnd uintptr, margins *MARGINS) error { } func setClassLongPtr(hwnd uintptr, param int32, val uintptr) bool { - ret, _, _ := procSetClassLongPtr.Call( + proc := procSetClassLongPtr + if strconv.IntSize == 32 { + /* + https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-setclasslongptrw + Note: To write code that is compatible with both 32-bit and 64-bit Windows, use SetClassLongPtr. + When compiling for 32-bit Windows, SetClassLongPtr is defined as a call to the SetClassLong function + + => We have to do this dynamically when directly calling the DLL procedures + */ + proc = procSetClassLong + } + + ret, _, _ := proc.Call( hwnd, uintptr(param), val, diff --git a/v2/internal/frontend/desktop/windows/window.go b/v2/internal/frontend/desktop/windows/window.go index dce79438d..5bbada150 100644 --- a/v2/internal/frontend/desktop/windows/window.go +++ b/v2/internal/frontend/desktop/windows/window.go @@ -86,10 +86,6 @@ func NewWindow(parent winc.Controller, appoptions *options.App, versionInfo *ope result.theme = winoptions.SystemDefault } - if appoptions.BackgroundColour != nil { - win32.SetBackgroundColour(result.Handle(), appoptions.BackgroundColour.R, appoptions.BackgroundColour.G, appoptions.BackgroundColour.B) - } - result.SetSize(appoptions.Width, appoptions.Height) result.SetText(appoptions.Title) result.EnableSizable(!appoptions.DisableResize) From 2065600096b8b9a218f83866f3066c4d622cc82a Mon Sep 17 00:00:00 2001 From: Nan0 Date: Fri, 24 Jun 2022 23:49:00 +0200 Subject: [PATCH 62/87] Feature: set browser path (#1448) * Added option to specify webview2 path * Added `manual` webview strategy * Update documentation * Fixed build with manual tag * Check for browser directory existence * Added version check for manually specified webview, removed fallback for installed webview in manual strategy * Update WebviewBrowserPath documentation * Replaced deprecated StringToUTF16Ptr * Return on error * Removed manual strategy, return error in wv2installer for fixed runtime * Removed manual strategy from CLI --- .../frontend/desktop/windows/frontend.go | 3 +- .../windows/go-webview2/pkg/edge/chromium.go | 28 +++++++++++++++++-- .../go-webview2/webviewloader/module.go | 15 ++++++++-- v2/internal/system/system_windows.go | 3 +- v2/internal/wv2installer/wv2installer.go | 15 +++++++++- v2/pkg/options/windows/windows.go | 5 ++++ website/docs/guides/windows.mdx | 17 +++++++++++ website/docs/reference/options.mdx | 14 ++++++++++ 8 files changed, 90 insertions(+), 10 deletions(-) diff --git a/v2/internal/frontend/desktop/windows/frontend.go b/v2/internal/frontend/desktop/windows/frontend.go index b83541afb..16d9b6e81 100644 --- a/v2/internal/frontend/desktop/windows/frontend.go +++ b/v2/internal/frontend/desktop/windows/frontend.go @@ -352,8 +352,9 @@ func (f *Frontend) Quit() { func (f *Frontend) setupChromium() { chromium := edge.NewChromium() f.chromium = chromium - if opts := f.frontendOptions.Windows; opts != nil && opts.WebviewUserDataPath != "" { + if opts := f.frontendOptions.Windows; opts != nil { chromium.DataPath = opts.WebviewUserDataPath + chromium.BrowserPath = opts.WebviewBrowserPath } chromium.MessageCallback = f.processMessage chromium.WebResourceRequestedCallback = f.processRequest diff --git a/v2/internal/frontend/desktop/windows/go-webview2/pkg/edge/chromium.go b/v2/internal/frontend/desktop/windows/go-webview2/pkg/edge/chromium.go index ad046a5c5..785140917 100644 --- a/v2/internal/frontend/desktop/windows/go-webview2/pkg/edge/chromium.go +++ b/v2/internal/frontend/desktop/windows/go-webview2/pkg/edge/chromium.go @@ -4,6 +4,7 @@ package edge import ( + "errors" "log" "os" "path/filepath" @@ -30,8 +31,9 @@ type Chromium struct { environment *ICoreWebView2Environment // Settings - Debug bool - DataPath string + Debug bool + DataPath string + BrowserPath string // permissions permissions map[CoreWebView2PermissionKind]CoreWebView2PermissionState @@ -84,7 +86,27 @@ func (e *Chromium) Embed(hwnd uintptr) bool { dataPath = filepath.Join(os.Getenv("AppData"), currentExeName) } - res, err := createCoreWebView2EnvironmentWithOptions(nil, windows.StringToUTF16Ptr(dataPath), 0, e.envCompleted) + var browserPathPtr *uint16 = nil + if e.BrowserPath != "" { + if _, err := os.Stat(e.BrowserPath); !errors.Is(err, os.ErrNotExist) { + browserPathPtr, err = windows.UTF16PtrFromString(e.BrowserPath) + if err != nil { + log.Printf("Error calling UTF16PtrFromString for %s: %v", e.BrowserPath, err) + return false + } + } else { + log.Printf("Browser path %s does not exist", e.BrowserPath) + return false + } + } + + dataPathPtr, err := windows.UTF16PtrFromString(dataPath) + if err != nil { + log.Printf("Error calling UTF16PtrFromString for %s: %v", dataPath, err) + return false + } + + res, err := createCoreWebView2EnvironmentWithOptions(browserPathPtr, dataPathPtr, 0, e.envCompleted) if err != nil { log.Printf("Error calling Webview2Loader: %v", err) return false diff --git a/v2/internal/frontend/desktop/windows/go-webview2/webviewloader/module.go b/v2/internal/frontend/desktop/windows/go-webview2/webviewloader/module.go index b25181795..e8ae8fab5 100644 --- a/v2/internal/frontend/desktop/windows/go-webview2/webviewloader/module.go +++ b/v2/internal/frontend/desktop/windows/go-webview2/webviewloader/module.go @@ -54,17 +54,26 @@ func CompareBrowserVersions(v1 string, v2 string) (int, error) { return int(result), nil } -// GetInstalledVersion returns the installed version of the webview2 runtime. +// GetWebviewVersion returns version of the webview2 runtime. +// If path is empty, it will try to find installed webview2 is the system. // If there is no version installed, a blank string is returned. -func GetInstalledVersion() (string, error) { +func GetWebviewVersion(path string) (string, error) { err := loadFromMemory() if err != nil { return "", err } + var browserPath *uint16 = nil + if path != "" { + browserPath, err = windows.UTF16PtrFromString(path) + if err != nil { + return "", fmt.Errorf("error calling UTF16PtrFromString for %s: %v", path, err) + } + } + var result *uint16 res, _, err := memGetAvailableCoreWebView2BrowserVersionString.Call( - uint64(uintptr(unsafe.Pointer(nil))), + uint64(uintptr(unsafe.Pointer(browserPath))), uint64(uintptr(unsafe.Pointer(&result)))) if res != 0 { diff --git a/v2/internal/system/system_windows.go b/v2/internal/system/system_windows.go index 4bb6d6707..3d1b8dc79 100644 --- a/v2/internal/system/system_windows.go +++ b/v2/internal/system/system_windows.go @@ -28,8 +28,7 @@ func (i *Info) discover() error { } func checkWebView2() *packagemanager.Dependancy { - - version, _ := webviewloader.GetInstalledVersion() + version, _ := webviewloader.GetWebviewVersion("") installed := version != "" return &packagemanager.Dependancy{ diff --git a/v2/internal/wv2installer/wv2installer.go b/v2/internal/wv2installer/wv2installer.go index 41e2beaaf..1549cf1ba 100644 --- a/v2/internal/wv2installer/wv2installer.go +++ b/v2/internal/wv2installer/wv2installer.go @@ -3,6 +3,7 @@ package wv2installer import ( + "fmt" "github.com/wailsapp/wails/v2/internal/frontend/desktop/windows/go-webview2/webviewloader" "github.com/wailsapp/wails/v2/pkg/options" "github.com/wailsapp/wails/v2/pkg/options/windows" @@ -24,7 +25,14 @@ func Process(appoptions *options.App) (string, error) { } installStatus := needsInstalling - installedVersion, err := webviewloader.GetInstalledVersion() + + // Override version check for manually specified webview path if present + var webviewPath = "" + if opts := appoptions.Windows; opts != nil && opts.WebviewBrowserPath != "" { + webviewPath = opts.WebviewBrowserPath + } + + installedVersion, err := webviewloader.GetWebviewVersion(webviewPath) if err != nil { return "", err } @@ -42,5 +50,10 @@ func Process(appoptions *options.App) (string, error) { } } + // Force error strategy if webview is manually specified + if webviewPath != "" { + return installedVersion, fmt.Errorf(messages.InvalidFixedWebview2) + } + return installedVersion, doInstallationStrategy(installStatus, messages) } diff --git a/v2/pkg/options/windows/windows.go b/v2/pkg/options/windows/windows.go index 146d23d3a..5c18d1737 100644 --- a/v2/pkg/options/windows/windows.go +++ b/v2/pkg/options/windows/windows.go @@ -12,6 +12,7 @@ type Messages struct { DownloadPage string PressOKToInstall string ContactAdmin string + InvalidFixedWebview2 string } const ( @@ -71,6 +72,9 @@ type Options struct { // If the path is not valid, a messagebox will be displayed with the error and the app will exit with error code. WebviewUserDataPath string + // Path to the directory with WebView2 executables. If empty WebView2 installed in the system will be used. + WebviewBrowserPath string + // Dark/Light or System Default Theme Theme Theme @@ -104,5 +108,6 @@ func DefaultMessages() *Messages { DownloadPage: "This application requires the WebView2 runtime. Press OK to open the download page. Minimum version required: ", PressOKToInstall: "Press Ok to install.", ContactAdmin: "The WebView2 runtime is required to run this application. Please contact your system administrator.", + InvalidFixedWebview2: "The WebView2 runtime is manually specified, but It is not valid. Check minimum required version and webview2 path.", } } diff --git a/website/docs/guides/windows.mdx b/website/docs/guides/windows.mdx index e0ec17d5f..520f0bd86 100644 --- a/website/docs/guides/windows.mdx +++ b/website/docs/guides/windows.mdx @@ -35,3 +35,20 @@ up to the user. ### Error If no suitable runtime is found, an error is given to the user and no further action taken. + +## Fixed version runtime + +Another way of dealing with webview2 dependency is shipping it yourself. +You can download [fixed version runtime](https://developer.microsoft.com/ru-ru/microsoft-edge/webview2/#download-section) and bundle or download it with your application. + +Also, you should specify path to fixed version of webview2 runtime in the `windows.Options` structure when launching wails. + +```go + wails.Run(&options.App{ + Windows: &windows.Options{ + WebviewBrowserPath: "", + }, + }) +``` + +Note: When `WebviewBrowserPath` is specified, `error` strategy will be forced in case of minimal required version mismatch or invalid path to a runtime. \ No newline at end of file diff --git a/website/docs/reference/options.mdx b/website/docs/reference/options.mdx index 96b4d0f17..c557ef612 100644 --- a/website/docs/reference/options.mdx +++ b/website/docs/reference/options.mdx @@ -48,6 +48,7 @@ func main() { DisableWindowIcon: false, DisableFramelessWindowDecorations: false, WebviewUserDataPath: "", + WebviewBrowserPath: "", Theme: windows.SystemDefault, CustomTheme: &windows.ThemeSettings{ DarkModeTitleBar: windows.RGB(20, 20, 20), @@ -430,6 +431,19 @@ Type: string This defines the path where the WebView2 stores the user data. If empty `%APPDATA%\[BinaryName.exe]` will be used. +### WebviewBrowserPath + +Name: WebviewBrowserPath + +Type: string + +This defines the path to a directory with WebView2 executable files and libraries. If empty, webview2 installed in the system will be used. + +Important information about distribution of fixed version runtime: +- [How to get and extract runtime](https://docs.microsoft.com/en-us/microsoft-edge/webview2/concepts/distribution#details-about-the-fixed-version-runtime-distribution-mode) +- [Known issues for fixed version](https://docs.microsoft.com/en-us/microsoft-edge/webview2/concepts/distribution#known-issues-for-fixed-version) +- [The path of fixed version of the WebView2 Runtime should not contain \Edge\Application\.](https://docs.microsoft.com/en-us/microsoft-edge/webview2/reference/win32/webview2-idl?view=webview2-1.0.1245.22#createcorewebview2environmentwithoptions) + ### Theme Name: Theme From c22f59adb94bca45c9cb8c772889cc2e6b730eb2 Mon Sep 17 00:00:00 2001 From: Sidharth Rathi <58144379+sidwebworks@users.noreply.github.com> Date: Sat, 25 Jun 2022 04:51:02 +0530 Subject: [PATCH 63/87] Update templates.mdx (#1492) Co-authored-by: Lea Anthony --- .../version-v2.0.0-beta.37/community/templates.mdx | 3 +++ 1 file changed, 3 insertions(+) diff --git a/website/versioned_docs/version-v2.0.0-beta.37/community/templates.mdx b/website/versioned_docs/version-v2.0.0-beta.37/community/templates.mdx index 6d090bb3d..2ed94f04e 100644 --- a/website/versioned_docs/version-v2.0.0-beta.37/community/templates.mdx +++ b/website/versioned_docs/version-v2.0.0-beta.37/community/templates.mdx @@ -37,6 +37,9 @@ If you are unsure about a template, inspect `package.json` and `wails.json` for - [wails-react-template](https://github.com/flin7/wails-react-template) - A minimal template for React that supports live development - [wails-template-nextjs](https://github.com/LGiki/wails-template-nextjs) - A template using Next.js and TypeScript +# Solid +- [wails-solid-template](https://github.com/sidwebworks/wails-solid-template) - A template using Solid JS + ## Svelte - [wails-svelte-template](https://github.com/raitonoberu/wails-svelte-template) - A template using Svelte From 05316453776ca4026b9040bfc4a976c666b569fa Mon Sep 17 00:00:00 2001 From: Lea Anthony Date: Sat, 25 Jun 2022 09:26:17 +1000 Subject: [PATCH 64/87] Better signal handling (#1488) * Better signal handling * Remove waitgroup --- v2/internal/appng/app_bindings.go | 2 + v2/internal/appng/app_dev.go | 9 +++- v2/internal/appng/app_production.go | 9 +++- v2/internal/signal/signal.go | 64 +++++++---------------------- v2/wails.go | 7 ++++ 5 files changed, 38 insertions(+), 53 deletions(-) diff --git a/v2/internal/appng/app_bindings.go b/v2/internal/appng/app_bindings.go index 477e811c2..8a80da32b 100644 --- a/v2/internal/appng/app_bindings.go +++ b/v2/internal/appng/app_bindings.go @@ -35,6 +35,8 @@ func (a *App) Run() error { return nil } +func (a *App) Shutdown() {} + // CreateApp creates the app! func CreateApp(appoptions *options.App) (*App, error) { // Set up logger diff --git a/v2/internal/appng/app_dev.go b/v2/internal/appng/app_dev.go index 71715635a..453292696 100644 --- a/v2/internal/appng/app_dev.go +++ b/v2/internal/appng/app_dev.go @@ -44,11 +44,16 @@ type App struct { ctx context.Context } -func (a *App) Run() error { - err := a.frontend.Run(a.ctx) +func (a *App) Shutdown() { if a.shutdownCallback != nil { a.shutdownCallback(a.ctx) } + a.frontend.Quit() +} + +func (a *App) Run() error { + err := a.frontend.Run(a.ctx) + a.Shutdown() return err } diff --git a/v2/internal/appng/app_production.go b/v2/internal/appng/app_production.go index cbbb75d3e..05e205712 100644 --- a/v2/internal/appng/app_production.go +++ b/v2/internal/appng/app_production.go @@ -34,11 +34,16 @@ type App struct { ctx context.Context } -func (a *App) Run() error { - err := a.frontend.Run(a.ctx) +func (a *App) Shutdown() { if a.shutdownCallback != nil { a.shutdownCallback(a.ctx) } + a.frontend.Quit() +} + +func (a *App) Run() error { + err := a.frontend.Run(a.ctx) + a.Shutdown() return err } diff --git a/v2/internal/signal/signal.go b/v2/internal/signal/signal.go index f6db19cd3..96e10bee6 100644 --- a/v2/internal/signal/signal.go +++ b/v2/internal/signal/signal.go @@ -1,73 +1,39 @@ package signal import ( - "context" "os" gosignal "os/signal" "sync" "syscall" - - "github.com/wailsapp/wails/v2/internal/logger" - "github.com/wailsapp/wails/v2/internal/servicebus" ) -// Manager manages signals such as CTRL-C -type Manager struct { - // Service Bus - bus *servicebus.ServiceBus +var signalChannel = make(chan os.Signal, 2) - // logger - logger logger.CustomLogger +var callbacks []func() +var lock sync.Mutex - // signalChannel - signalchannel chan os.Signal - - // ctx - ctx context.Context - cancel context.CancelFunc - - // Parent waitgroup - wg *sync.WaitGroup -} - -// NewManager creates a new signal manager -func NewManager(ctx context.Context, cancel context.CancelFunc, bus *servicebus.ServiceBus, logger *logger.Logger) (*Manager, error) { - - result := &Manager{ - bus: bus, - logger: logger.CustomLogger("Signal Manager"), - signalchannel: make(chan os.Signal, 2), - ctx: ctx, - cancel: cancel, - wg: ctx.Value("waitgroup").(*sync.WaitGroup), - } - - return result, nil +func OnShutdown(callback func()) { + lock.Lock() + defer lock.Unlock() + callbacks = append(callbacks, callback) } // Start the Signal Manager -func (m *Manager) Start() { +func Start() { // Hook into interrupts - gosignal.Notify(m.signalchannel, os.Interrupt, syscall.SIGTERM, syscall.SIGINT) - - m.wg.Add(1) + gosignal.Notify(signalChannel, os.Interrupt, syscall.SIGTERM, syscall.SIGINT) // Spin off signal listener and wait for either a cancellation // or signal go func() { select { - case <-m.signalchannel: - println() - m.logger.Trace("Ctrl+C detected. Shutting down...") - m.bus.Publish("quit", "ctrl-c pressed") - - // Start shutdown of Wails - m.cancel() - - case <-m.ctx.Done(): + case <-signalChannel: + println("") + println("Ctrl+C detected. Shutting down...") + for _, callback := range callbacks { + callback() + } } - m.logger.Trace("Shutdown") - m.wg.Done() }() } diff --git a/v2/wails.go b/v2/wails.go index 09d810ce3..e35ca82e9 100644 --- a/v2/wails.go +++ b/v2/wails.go @@ -4,6 +4,7 @@ package wails import ( app "github.com/wailsapp/wails/v2/internal/appng" + "github.com/wailsapp/wails/v2/internal/signal" "github.com/wailsapp/wails/v2/pkg/options" ) @@ -30,5 +31,11 @@ func Run(options *options.App) error { return err } + signal.OnShutdown(func() { + mainapp.Shutdown() + }) + + signal.Start() + return mainapp.Run() } From d9888ce6af89c7b5f22623b4db266efeae26df32 Mon Sep 17 00:00:00 2001 From: Tom Date: Mon, 27 Jun 2022 18:00:04 +1000 Subject: [PATCH 65/87] Chore/react 18 create root (#1489) * chore: use createRoot for react-ts * chore: use createRoot for react-js * fix: quotes * fix: remove semi * chore: update react templates to use createRoot instead of ReactDOM.render Co-authored-by: Lea Anthony --- .../assets/preact/frontend/src/main.jsx | 17 +++++++++++++---- .../assets/react-ts/frontend/src/main.tsx | 15 +++++++++------ .../generate/assets/react/frontend/src/main.jsx | 15 +++++++++------ .../templates/react-ts/frontend/src/main.tsx | 15 +++++++++------ 4 files changed, 40 insertions(+), 22 deletions(-) diff --git a/v2/cmd/wails/internal/commands/initialise/templates/generate/assets/preact/frontend/src/main.jsx b/v2/cmd/wails/internal/commands/initialise/templates/generate/assets/preact/frontend/src/main.jsx index 41787dabc..5a7bfa9ea 100644 --- a/v2/cmd/wails/internal/commands/initialise/templates/generate/assets/preact/frontend/src/main.jsx +++ b/v2/cmd/wails/internal/commands/initialise/templates/generate/assets/preact/frontend/src/main.jsx @@ -1,5 +1,14 @@ -import {render} from 'preact'; -import {App} from './app'; -import './style.css'; +import React from 'react' +import { createRoot } from 'react-dom/client' +import './style.css' +import App from './App' -render(, document.getElementById('app')); +const container = document.getElementById('root') + +const root = createRoot(container) + +root.render( + + + +) diff --git a/v2/cmd/wails/internal/commands/initialise/templates/generate/assets/react-ts/frontend/src/main.tsx b/v2/cmd/wails/internal/commands/initialise/templates/generate/assets/react-ts/frontend/src/main.tsx index a6c27f6a8..361c8d660 100644 --- a/v2/cmd/wails/internal/commands/initialise/templates/generate/assets/react-ts/frontend/src/main.tsx +++ b/v2/cmd/wails/internal/commands/initialise/templates/generate/assets/react-ts/frontend/src/main.tsx @@ -1,11 +1,14 @@ import React from 'react' -import ReactDOM from 'react-dom' +import { createRoot } from 'react-dom/client' import './style.css' import App from './App' -ReactDOM.render( - - - , - document.getElementById('root') +const container = document.getElementById('root') + +const root = createRoot(container!) + +root.render( + + + ) diff --git a/v2/cmd/wails/internal/commands/initialise/templates/generate/assets/react/frontend/src/main.jsx b/v2/cmd/wails/internal/commands/initialise/templates/generate/assets/react/frontend/src/main.jsx index a6c27f6a8..5a7bfa9ea 100644 --- a/v2/cmd/wails/internal/commands/initialise/templates/generate/assets/react/frontend/src/main.jsx +++ b/v2/cmd/wails/internal/commands/initialise/templates/generate/assets/react/frontend/src/main.jsx @@ -1,11 +1,14 @@ import React from 'react' -import ReactDOM from 'react-dom' +import { createRoot } from 'react-dom/client' import './style.css' import App from './App' -ReactDOM.render( - - - , - document.getElementById('root') +const container = document.getElementById('root') + +const root = createRoot(container) + +root.render( + + + ) diff --git a/v2/cmd/wails/internal/commands/initialise/templates/templates/react-ts/frontend/src/main.tsx b/v2/cmd/wails/internal/commands/initialise/templates/templates/react-ts/frontend/src/main.tsx index a6c27f6a8..361c8d660 100644 --- a/v2/cmd/wails/internal/commands/initialise/templates/templates/react-ts/frontend/src/main.tsx +++ b/v2/cmd/wails/internal/commands/initialise/templates/templates/react-ts/frontend/src/main.tsx @@ -1,11 +1,14 @@ import React from 'react' -import ReactDOM from 'react-dom' +import { createRoot } from 'react-dom/client' import './style.css' import App from './App' -ReactDOM.render( - - - , - document.getElementById('root') +const container = document.getElementById('root') + +const root = createRoot(container!) + +root.render( + + + ) From f8e6fa4bf37657d2cdf763afb480be67f9a31994 Mon Sep 17 00:00:00 2001 From: Lea Anthony Date: Mon, 27 Jun 2022 18:09:25 +1000 Subject: [PATCH 66/87] Regenerate templates --- .../templates/preact/frontend/src/main.jsx | 17 +++++++++++++---- .../templates/react/frontend/src/main.jsx | 11 +++++++---- 2 files changed, 20 insertions(+), 8 deletions(-) diff --git a/v2/cmd/wails/internal/commands/initialise/templates/templates/preact/frontend/src/main.jsx b/v2/cmd/wails/internal/commands/initialise/templates/templates/preact/frontend/src/main.jsx index 41787dabc..e50e105db 100644 --- a/v2/cmd/wails/internal/commands/initialise/templates/templates/preact/frontend/src/main.jsx +++ b/v2/cmd/wails/internal/commands/initialise/templates/templates/preact/frontend/src/main.jsx @@ -1,5 +1,14 @@ -import {render} from 'preact'; -import {App} from './app'; -import './style.css'; +import React from 'react' +import {createRoot} from 'react-dom/client' +import './style.css' +import App from './App' -render(, document.getElementById('app')); +const container = document.getElementById('root') + +const root = createRoot(container) + +root.render( + + + +) diff --git a/v2/cmd/wails/internal/commands/initialise/templates/templates/react/frontend/src/main.jsx b/v2/cmd/wails/internal/commands/initialise/templates/templates/react/frontend/src/main.jsx index a6c27f6a8..e50e105db 100644 --- a/v2/cmd/wails/internal/commands/initialise/templates/templates/react/frontend/src/main.jsx +++ b/v2/cmd/wails/internal/commands/initialise/templates/templates/react/frontend/src/main.jsx @@ -1,11 +1,14 @@ import React from 'react' -import ReactDOM from 'react-dom' +import {createRoot} from 'react-dom/client' import './style.css' import App from './App' -ReactDOM.render( +const container = document.getElementById('root') + +const root = createRoot(container) + +root.render( - , - document.getElementById('root') + ) From 66f79c2e514a7356dcfa78ee63589bdfefc1fd0c Mon Sep 17 00:00:00 2001 From: Lea Anthony Date: Mon, 27 Jun 2022 20:41:09 +1000 Subject: [PATCH 67/87] v2.0.0-beta.38 + release script --- .../initialise/templates/generate/generate.go | 8 +- .../templates/templates/plain/main.tmpl.go | 2 +- .../templates/vue-ts/frontend/package.json | 3 +- v2/cmd/wails/internal/version.go | 5 +- v2/cmd/wails/internal/version.txt | 1 + .../templates/generate => internal}/s/s.go | 0 v2/tools/release/release.go | 67 +++++++++++++++++ .../community/showcase/surge.mdx | 8 -- .../appendix/_category_.json | 0 .../community/_category_.json | 0 .../community/links.mdx | 0 .../community/showcase/_category_.json | 0 .../community/showcase/encrypteasy.mdx | 0 .../community/showcase/filehound.mdx | 0 .../community/showcase/mollywallet.mdx | 0 .../community/showcase/october.mdx | 11 +++ .../community/showcase/optimus.mdx | 0 .../community/showcase/portfall.mdx | 0 .../community/showcase/riftshare.mdx | 0 .../community/showcase/surge.mdx | 8 ++ .../community/showcase/wally.mdx | 0 .../community/showcase/wombat.mdx | 0 .../community/showcase/ytd.mdx | 0 .../community/templates.mdx | 1 + .../gettingstarted/_category_.json | 0 .../gettingstarted/building.mdx | 0 .../gettingstarted/development.mdx | 0 .../gettingstarted/firstproject.mdx | 73 ++++++++++--------- .../gettingstarted/installation.mdx | 0 .../guides/_category_.json | 0 .../guides/application-development.mdx | 0 .../guides/bleeding-edge.mdx | 0 .../guides/developing-wails.mdx | 0 .../guides/frameless.mdx | 0 .../guides/frontend.mdx | 0 .../guides/ides.mdx | 0 .../guides/linux-distro-support.mdx | 0 .../guides/manual-builds.mdx | 0 .../guides/migrating.mdx | 0 .../guides/overscroll.mdx | 0 .../guides/routing.mdx | 0 .../guides/signing.mdx | 0 .../guides/templates.mdx | 0 .../guides/troubleshooting.mdx | 12 ++- .../guides/windows-installer.mdx | 0 .../guides/windows.mdx | 17 +++++ .../howdoesitwork.mdx | 0 .../introduction.mdx | 0 .../reference/_category_.json | 0 .../reference/cli.mdx | 9 +-- .../reference/menus.mdx | 4 + .../reference/options.mdx | 53 ++++++++++++-- .../reference/project-config.mdx | 4 +- .../reference/runtime/_category_.json | 0 .../reference/runtime/browser.mdx | 0 .../reference/runtime/dialog.mdx | 0 .../reference/runtime/events.mdx | 2 +- .../reference/runtime/intro.mdx | 0 .../reference/runtime/log.mdx | 0 .../reference/runtime/menu.mdx | 0 .../reference/runtime/window.mdx | 8 ++ ...n => version-v2.0.0-beta.38-sidebars.json} | 0 website/versions.json | 6 +- 63 files changed, 231 insertions(+), 71 deletions(-) create mode 100644 v2/cmd/wails/internal/version.txt rename v2/{cmd/wails/internal/commands/initialise/templates/generate => internal}/s/s.go (100%) create mode 100644 v2/tools/release/release.go delete mode 100644 website/versioned_docs/version-v2.0.0-beta.35/community/showcase/surge.mdx rename website/versioned_docs/{version-v2.0.0-beta.35 => version-v2.0.0-beta.38}/appendix/_category_.json (100%) rename website/versioned_docs/{version-v2.0.0-beta.35 => version-v2.0.0-beta.38}/community/_category_.json (100%) rename website/versioned_docs/{version-v2.0.0-beta.35 => version-v2.0.0-beta.38}/community/links.mdx (100%) rename website/versioned_docs/{version-v2.0.0-beta.35 => version-v2.0.0-beta.38}/community/showcase/_category_.json (100%) rename website/versioned_docs/{version-v2.0.0-beta.35 => version-v2.0.0-beta.38}/community/showcase/encrypteasy.mdx (100%) rename website/versioned_docs/{version-v2.0.0-beta.35 => version-v2.0.0-beta.38}/community/showcase/filehound.mdx (100%) rename website/versioned_docs/{version-v2.0.0-beta.35 => version-v2.0.0-beta.38}/community/showcase/mollywallet.mdx (100%) create mode 100644 website/versioned_docs/version-v2.0.0-beta.38/community/showcase/october.mdx rename website/versioned_docs/{version-v2.0.0-beta.35 => version-v2.0.0-beta.38}/community/showcase/optimus.mdx (100%) rename website/versioned_docs/{version-v2.0.0-beta.35 => version-v2.0.0-beta.38}/community/showcase/portfall.mdx (100%) rename website/versioned_docs/{version-v2.0.0-beta.35 => version-v2.0.0-beta.38}/community/showcase/riftshare.mdx (100%) create mode 100644 website/versioned_docs/version-v2.0.0-beta.38/community/showcase/surge.mdx rename website/versioned_docs/{version-v2.0.0-beta.35 => version-v2.0.0-beta.38}/community/showcase/wally.mdx (100%) rename website/versioned_docs/{version-v2.0.0-beta.35 => version-v2.0.0-beta.38}/community/showcase/wombat.mdx (100%) rename website/versioned_docs/{version-v2.0.0-beta.35 => version-v2.0.0-beta.38}/community/showcase/ytd.mdx (100%) rename website/versioned_docs/{version-v2.0.0-beta.35 => version-v2.0.0-beta.38}/community/templates.mdx (95%) rename website/versioned_docs/{version-v2.0.0-beta.35 => version-v2.0.0-beta.38}/gettingstarted/_category_.json (100%) rename website/versioned_docs/{version-v2.0.0-beta.35 => version-v2.0.0-beta.38}/gettingstarted/building.mdx (100%) rename website/versioned_docs/{version-v2.0.0-beta.35 => version-v2.0.0-beta.38}/gettingstarted/development.mdx (100%) rename website/versioned_docs/{version-v2.0.0-beta.35 => version-v2.0.0-beta.38}/gettingstarted/firstproject.mdx (56%) rename website/versioned_docs/{version-v2.0.0-beta.35 => version-v2.0.0-beta.38}/gettingstarted/installation.mdx (100%) rename website/versioned_docs/{version-v2.0.0-beta.35 => version-v2.0.0-beta.38}/guides/_category_.json (100%) rename website/versioned_docs/{version-v2.0.0-beta.35 => version-v2.0.0-beta.38}/guides/application-development.mdx (100%) rename website/versioned_docs/{version-v2.0.0-beta.35 => version-v2.0.0-beta.38}/guides/bleeding-edge.mdx (100%) rename website/versioned_docs/{version-v2.0.0-beta.35 => version-v2.0.0-beta.38}/guides/developing-wails.mdx (100%) rename website/versioned_docs/{version-v2.0.0-beta.35 => version-v2.0.0-beta.38}/guides/frameless.mdx (100%) rename website/versioned_docs/{version-v2.0.0-beta.35 => version-v2.0.0-beta.38}/guides/frontend.mdx (100%) rename website/versioned_docs/{version-v2.0.0-beta.35 => version-v2.0.0-beta.38}/guides/ides.mdx (100%) rename website/versioned_docs/{version-v2.0.0-beta.35 => version-v2.0.0-beta.38}/guides/linux-distro-support.mdx (100%) rename website/versioned_docs/{version-v2.0.0-beta.35 => version-v2.0.0-beta.38}/guides/manual-builds.mdx (100%) rename website/versioned_docs/{version-v2.0.0-beta.35 => version-v2.0.0-beta.38}/guides/migrating.mdx (100%) rename website/versioned_docs/{version-v2.0.0-beta.35 => version-v2.0.0-beta.38}/guides/overscroll.mdx (100%) rename website/versioned_docs/{version-v2.0.0-beta.35 => version-v2.0.0-beta.38}/guides/routing.mdx (100%) rename website/versioned_docs/{version-v2.0.0-beta.35 => version-v2.0.0-beta.38}/guides/signing.mdx (100%) rename website/versioned_docs/{version-v2.0.0-beta.35 => version-v2.0.0-beta.38}/guides/templates.mdx (100%) rename website/versioned_docs/{version-v2.0.0-beta.35 => version-v2.0.0-beta.38}/guides/troubleshooting.mdx (77%) rename website/versioned_docs/{version-v2.0.0-beta.35 => version-v2.0.0-beta.38}/guides/windows-installer.mdx (100%) rename website/versioned_docs/{version-v2.0.0-beta.35 => version-v2.0.0-beta.38}/guides/windows.mdx (70%) rename website/versioned_docs/{version-v2.0.0-beta.35 => version-v2.0.0-beta.38}/howdoesitwork.mdx (100%) rename website/versioned_docs/{version-v2.0.0-beta.35 => version-v2.0.0-beta.38}/introduction.mdx (100%) rename website/versioned_docs/{version-v2.0.0-beta.35 => version-v2.0.0-beta.38}/reference/_category_.json (100%) rename website/versioned_docs/{version-v2.0.0-beta.35 => version-v2.0.0-beta.38}/reference/cli.mdx (97%) rename website/versioned_docs/{version-v2.0.0-beta.35 => version-v2.0.0-beta.38}/reference/menus.mdx (98%) rename website/versioned_docs/{version-v2.0.0-beta.35 => version-v2.0.0-beta.38}/reference/options.mdx (91%) rename website/versioned_docs/{version-v2.0.0-beta.35 => version-v2.0.0-beta.38}/reference/project-config.mdx (94%) rename website/versioned_docs/{version-v2.0.0-beta.35 => version-v2.0.0-beta.38}/reference/runtime/_category_.json (100%) rename website/versioned_docs/{version-v2.0.0-beta.35 => version-v2.0.0-beta.38}/reference/runtime/browser.mdx (100%) rename website/versioned_docs/{version-v2.0.0-beta.35 => version-v2.0.0-beta.38}/reference/runtime/dialog.mdx (100%) rename website/versioned_docs/{version-v2.0.0-beta.35 => version-v2.0.0-beta.38}/reference/runtime/events.mdx (95%) rename website/versioned_docs/{version-v2.0.0-beta.35 => version-v2.0.0-beta.38}/reference/runtime/intro.mdx (100%) rename website/versioned_docs/{version-v2.0.0-beta.35 => version-v2.0.0-beta.38}/reference/runtime/log.mdx (100%) rename website/versioned_docs/{version-v2.0.0-beta.35 => version-v2.0.0-beta.38}/reference/runtime/menu.mdx (100%) rename website/versioned_docs/{version-v2.0.0-beta.35 => version-v2.0.0-beta.38}/reference/runtime/window.mdx (96%) rename website/versioned_sidebars/{version-v2.0.0-beta.35-sidebars.json => version-v2.0.0-beta.38-sidebars.json} (100%) diff --git a/v2/cmd/wails/internal/commands/initialise/templates/generate/generate.go b/v2/cmd/wails/internal/commands/initialise/templates/generate/generate.go index 5d366b2c5..a488f0fbf 100644 --- a/v2/cmd/wails/internal/commands/initialise/templates/generate/generate.go +++ b/v2/cmd/wails/internal/commands/initialise/templates/generate/generate.go @@ -7,7 +7,7 @@ import ( "github.com/leaanthony/debme" "github.com/leaanthony/gosod" - "github.com/wailsapp/wails/v2/cmd/wails/internal/commands/initialise/templates/generate/s" + "github.com/wailsapp/wails/v2/internal/s" ) //go:embed assets/common/* @@ -165,7 +165,11 @@ func main() { } // copy plain template + s.ECHO("Copying plain template") + s.RMDIR("../templates/plain") s.COPYDIR("plain", "../templates/plain") + + s.ECHO(`Until an auto fix is done, add "@babel/types": "^7.17.10" to vite-ts/frontend/package.json`) } func rebuildRuntime() { @@ -224,6 +228,4 @@ func createTemplate(template *template) { checkError(err) s.CD(cwd) - - s.ECHO(`Until an auto fix is done, add "@babel/types": "^7.17.10" to vite-ts/frontend/package.json`) } diff --git a/v2/cmd/wails/internal/commands/initialise/templates/templates/plain/main.tmpl.go b/v2/cmd/wails/internal/commands/initialise/templates/templates/plain/main.tmpl.go index c84f4b9cb..fc96ccb4e 100644 --- a/v2/cmd/wails/internal/commands/initialise/templates/templates/plain/main.tmpl.go +++ b/v2/cmd/wails/internal/commands/initialise/templates/templates/plain/main.tmpl.go @@ -36,7 +36,7 @@ func main() { Frameless: false, StartHidden: false, HideWindowOnClose: false, - BackgroundColour: &options.RGBA{R: 255, G: 255, B: 255, A: 255}, + BackgroundColour: &options.RGBA{R: 27, G: 38, B: 54, A: 1}, Assets: assets, Menu: nil, Logger: nil, diff --git a/v2/cmd/wails/internal/commands/initialise/templates/templates/vue-ts/frontend/package.json b/v2/cmd/wails/internal/commands/initialise/templates/templates/vue-ts/frontend/package.json index 2cfff6a47..62c7fd6e1 100644 --- a/v2/cmd/wails/internal/commands/initialise/templates/templates/vue-ts/frontend/package.json +++ b/v2/cmd/wails/internal/commands/initialise/templates/templates/vue-ts/frontend/package.json @@ -14,7 +14,6 @@ "@vitejs/plugin-vue": "^2.3.3", "typescript": "^4.5.4", "vite": "^2.9.9", - "vue-tsc": "^0.34.7", - "@babel/types": "^7.17.10" + "vue-tsc": "^0.34.7" } } \ No newline at end of file diff --git a/v2/cmd/wails/internal/version.go b/v2/cmd/wails/internal/version.go index de86c6d5a..cfc37182c 100644 --- a/v2/cmd/wails/internal/version.go +++ b/v2/cmd/wails/internal/version.go @@ -1,3 +1,6 @@ package internal -var Version = "v2.0.0-beta.37" +import _ "embed" + +//go:embed version.txt +var Version string diff --git a/v2/cmd/wails/internal/version.txt b/v2/cmd/wails/internal/version.txt new file mode 100644 index 000000000..7bdae6b2a --- /dev/null +++ b/v2/cmd/wails/internal/version.txt @@ -0,0 +1 @@ +v2.0.0-beta.38 \ No newline at end of file diff --git a/v2/cmd/wails/internal/commands/initialise/templates/generate/s/s.go b/v2/internal/s/s.go similarity index 100% rename from v2/cmd/wails/internal/commands/initialise/templates/generate/s/s.go rename to v2/internal/s/s.go diff --git a/v2/tools/release/release.go b/v2/tools/release/release.go new file mode 100644 index 000000000..c61a1c72a --- /dev/null +++ b/v2/tools/release/release.go @@ -0,0 +1,67 @@ +package main + +import ( + "encoding/json" + "github.com/wailsapp/wails/v2/internal/s" + "os" + "os/exec" + "strconv" + "strings" +) + +const versionFile = "../../cmd/wails/internal/version.txt" + +func checkError(err error) { + if err != nil { + println(err.Error()) + os.Exit(1) + } +} + +func updateVersion() string { + + currentVersionData, err := os.ReadFile(versionFile) + checkError(err) + currentVersion := string(currentVersionData) + vsplit := strings.Split(currentVersion, ".") + minorVersion, err := strconv.Atoi(vsplit[len(vsplit)-1]) + checkError(err) + minorVersion++ + vsplit[len(vsplit)-1] = strconv.Itoa(minorVersion) + newVersion := strings.Join(vsplit, ".") + err = os.WriteFile(versionFile, []byte(newVersion), 0755) + checkError(err) + return newVersion +} + +func main() { + newVersion := updateVersion() + s.CD("../../../website") + s.ECHO("Generating new Docs for version: " + newVersion) + cmd := exec.Command("npm", "run", "docusaurus", "docs:version", newVersion) + cmd.Stdout = os.Stdout + cmd.Stderr = os.Stderr + err := cmd.Run() + checkError(err) + + // Load the version list + versionsData, err := os.ReadFile("versions.json") + checkError(err) + var versions []string + err = json.Unmarshal(versionsData, &versions) + checkError(err) + oldestVersion := versions[len(versions)-1] + s.ECHO(oldestVersion) + versions = versions[0 : len(versions)-1] + newVersions, err := json.Marshal(&versions) + checkError(err) + err = os.WriteFile("versions.json", newVersions, 0755) + checkError(err) + + s.ECHO("Removing old version: " + oldestVersion) + s.CD("versioned_docs") + s.RMDIR("version-" + oldestVersion) + s.CD("../versioned_sidebars") + s.RM("version-" + oldestVersion + "-sidebars.json") + +} diff --git a/website/versioned_docs/version-v2.0.0-beta.35/community/showcase/surge.mdx b/website/versioned_docs/version-v2.0.0-beta.35/community/showcase/surge.mdx deleted file mode 100644 index bccc51c82..000000000 --- a/website/versioned_docs/version-v2.0.0-beta.35/community/showcase/surge.mdx +++ /dev/null @@ -1,8 +0,0 @@ -# Surge - -

-
-

- -[Surge](https://surge.rule110.io/) is a p2p filesharing app designed to utilize blockchain technologies to enable 100% anonymous file transfers. Surge is end-to-end encrypted, decentralized and open source. - diff --git a/website/versioned_docs/version-v2.0.0-beta.35/appendix/_category_.json b/website/versioned_docs/version-v2.0.0-beta.38/appendix/_category_.json similarity index 100% rename from website/versioned_docs/version-v2.0.0-beta.35/appendix/_category_.json rename to website/versioned_docs/version-v2.0.0-beta.38/appendix/_category_.json diff --git a/website/versioned_docs/version-v2.0.0-beta.35/community/_category_.json b/website/versioned_docs/version-v2.0.0-beta.38/community/_category_.json similarity index 100% rename from website/versioned_docs/version-v2.0.0-beta.35/community/_category_.json rename to website/versioned_docs/version-v2.0.0-beta.38/community/_category_.json diff --git a/website/versioned_docs/version-v2.0.0-beta.35/community/links.mdx b/website/versioned_docs/version-v2.0.0-beta.38/community/links.mdx similarity index 100% rename from website/versioned_docs/version-v2.0.0-beta.35/community/links.mdx rename to website/versioned_docs/version-v2.0.0-beta.38/community/links.mdx diff --git a/website/versioned_docs/version-v2.0.0-beta.35/community/showcase/_category_.json b/website/versioned_docs/version-v2.0.0-beta.38/community/showcase/_category_.json similarity index 100% rename from website/versioned_docs/version-v2.0.0-beta.35/community/showcase/_category_.json rename to website/versioned_docs/version-v2.0.0-beta.38/community/showcase/_category_.json diff --git a/website/versioned_docs/version-v2.0.0-beta.35/community/showcase/encrypteasy.mdx b/website/versioned_docs/version-v2.0.0-beta.38/community/showcase/encrypteasy.mdx similarity index 100% rename from website/versioned_docs/version-v2.0.0-beta.35/community/showcase/encrypteasy.mdx rename to website/versioned_docs/version-v2.0.0-beta.38/community/showcase/encrypteasy.mdx diff --git a/website/versioned_docs/version-v2.0.0-beta.35/community/showcase/filehound.mdx b/website/versioned_docs/version-v2.0.0-beta.38/community/showcase/filehound.mdx similarity index 100% rename from website/versioned_docs/version-v2.0.0-beta.35/community/showcase/filehound.mdx rename to website/versioned_docs/version-v2.0.0-beta.38/community/showcase/filehound.mdx diff --git a/website/versioned_docs/version-v2.0.0-beta.35/community/showcase/mollywallet.mdx b/website/versioned_docs/version-v2.0.0-beta.38/community/showcase/mollywallet.mdx similarity index 100% rename from website/versioned_docs/version-v2.0.0-beta.35/community/showcase/mollywallet.mdx rename to website/versioned_docs/version-v2.0.0-beta.38/community/showcase/mollywallet.mdx diff --git a/website/versioned_docs/version-v2.0.0-beta.38/community/showcase/october.mdx b/website/versioned_docs/version-v2.0.0-beta.38/community/showcase/october.mdx new file mode 100644 index 000000000..83bc64672 --- /dev/null +++ b/website/versioned_docs/version-v2.0.0-beta.38/community/showcase/october.mdx @@ -0,0 +1,11 @@ +# October + +

+
+

+ +[October](https://october.utf9k.net) is a small Wails application that makes it really easy to extract highlights from [Kobo eReaders](https://en.wikipedia.org/wiki/Kobo_eReader) and then forward them to [Readwise](https://readwise.io). + +It has a relatively small scope with all platform versions weighing in under 10MB, and that's without enabling [UPX compression](https://upx.github.io/)! + +In contrast, the author's previous attempts with Electron quickly bloated to several hundred megabytes. \ No newline at end of file diff --git a/website/versioned_docs/version-v2.0.0-beta.35/community/showcase/optimus.mdx b/website/versioned_docs/version-v2.0.0-beta.38/community/showcase/optimus.mdx similarity index 100% rename from website/versioned_docs/version-v2.0.0-beta.35/community/showcase/optimus.mdx rename to website/versioned_docs/version-v2.0.0-beta.38/community/showcase/optimus.mdx diff --git a/website/versioned_docs/version-v2.0.0-beta.35/community/showcase/portfall.mdx b/website/versioned_docs/version-v2.0.0-beta.38/community/showcase/portfall.mdx similarity index 100% rename from website/versioned_docs/version-v2.0.0-beta.35/community/showcase/portfall.mdx rename to website/versioned_docs/version-v2.0.0-beta.38/community/showcase/portfall.mdx diff --git a/website/versioned_docs/version-v2.0.0-beta.35/community/showcase/riftshare.mdx b/website/versioned_docs/version-v2.0.0-beta.38/community/showcase/riftshare.mdx similarity index 100% rename from website/versioned_docs/version-v2.0.0-beta.35/community/showcase/riftshare.mdx rename to website/versioned_docs/version-v2.0.0-beta.38/community/showcase/riftshare.mdx diff --git a/website/versioned_docs/version-v2.0.0-beta.38/community/showcase/surge.mdx b/website/versioned_docs/version-v2.0.0-beta.38/community/showcase/surge.mdx new file mode 100644 index 000000000..e2facf648 --- /dev/null +++ b/website/versioned_docs/version-v2.0.0-beta.38/community/showcase/surge.mdx @@ -0,0 +1,8 @@ +# Surge + +

+
+

+ +[Surge](https://getsurge.io/) is a p2p filesharing app designed to utilize blockchain technologies to enable 100% anonymous file transfers. Surge is end-to-end encrypted, decentralized and open source. + diff --git a/website/versioned_docs/version-v2.0.0-beta.35/community/showcase/wally.mdx b/website/versioned_docs/version-v2.0.0-beta.38/community/showcase/wally.mdx similarity index 100% rename from website/versioned_docs/version-v2.0.0-beta.35/community/showcase/wally.mdx rename to website/versioned_docs/version-v2.0.0-beta.38/community/showcase/wally.mdx diff --git a/website/versioned_docs/version-v2.0.0-beta.35/community/showcase/wombat.mdx b/website/versioned_docs/version-v2.0.0-beta.38/community/showcase/wombat.mdx similarity index 100% rename from website/versioned_docs/version-v2.0.0-beta.35/community/showcase/wombat.mdx rename to website/versioned_docs/version-v2.0.0-beta.38/community/showcase/wombat.mdx diff --git a/website/versioned_docs/version-v2.0.0-beta.35/community/showcase/ytd.mdx b/website/versioned_docs/version-v2.0.0-beta.38/community/showcase/ytd.mdx similarity index 100% rename from website/versioned_docs/version-v2.0.0-beta.35/community/showcase/ytd.mdx rename to website/versioned_docs/version-v2.0.0-beta.38/community/showcase/ytd.mdx diff --git a/website/versioned_docs/version-v2.0.0-beta.35/community/templates.mdx b/website/versioned_docs/version-v2.0.0-beta.38/community/templates.mdx similarity index 95% rename from website/versioned_docs/version-v2.0.0-beta.35/community/templates.mdx rename to website/versioned_docs/version-v2.0.0-beta.38/community/templates.mdx index 076a6b041..6d090bb3d 100644 --- a/website/versioned_docs/version-v2.0.0-beta.35/community/templates.mdx +++ b/website/versioned_docs/version-v2.0.0-beta.38/community/templates.mdx @@ -35,6 +35,7 @@ If you are unsure about a template, inspect `package.json` and `wails.json` for - [wails-react-template](https://github.com/AlienRecall/wails-react-template) - A template using reactjs - [wails-react-template](https://github.com/flin7/wails-react-template) - A minimal template for React that supports live development +- [wails-template-nextjs](https://github.com/LGiki/wails-template-nextjs) - A template using Next.js and TypeScript ## Svelte diff --git a/website/versioned_docs/version-v2.0.0-beta.35/gettingstarted/_category_.json b/website/versioned_docs/version-v2.0.0-beta.38/gettingstarted/_category_.json similarity index 100% rename from website/versioned_docs/version-v2.0.0-beta.35/gettingstarted/_category_.json rename to website/versioned_docs/version-v2.0.0-beta.38/gettingstarted/_category_.json diff --git a/website/versioned_docs/version-v2.0.0-beta.35/gettingstarted/building.mdx b/website/versioned_docs/version-v2.0.0-beta.38/gettingstarted/building.mdx similarity index 100% rename from website/versioned_docs/version-v2.0.0-beta.35/gettingstarted/building.mdx rename to website/versioned_docs/version-v2.0.0-beta.38/gettingstarted/building.mdx diff --git a/website/versioned_docs/version-v2.0.0-beta.35/gettingstarted/development.mdx b/website/versioned_docs/version-v2.0.0-beta.38/gettingstarted/development.mdx similarity index 100% rename from website/versioned_docs/version-v2.0.0-beta.35/gettingstarted/development.mdx rename to website/versioned_docs/version-v2.0.0-beta.38/gettingstarted/development.mdx diff --git a/website/versioned_docs/version-v2.0.0-beta.35/gettingstarted/firstproject.mdx b/website/versioned_docs/version-v2.0.0-beta.38/gettingstarted/firstproject.mdx similarity index 56% rename from website/versioned_docs/version-v2.0.0-beta.35/gettingstarted/firstproject.mdx rename to website/versioned_docs/version-v2.0.0-beta.38/gettingstarted/firstproject.mdx index b5ee1fa46..949b05b1a 100644 --- a/website/versioned_docs/version-v2.0.0-beta.35/gettingstarted/firstproject.mdx +++ b/website/versioned_docs/version-v2.0.0-beta.38/gettingstarted/firstproject.mdx @@ -13,6 +13,7 @@ Pick your favourite framework: + import Tabs from "@theme/Tabs"; import TabItem from "@theme/TabItem"; @@ -27,60 +28,60 @@ import TabItem from "@theme/TabItem"; {label: "Vanilla", value: "Vanilla"}, ]} > - - Generate a Svelte project using Javascript with:
+ + Generate a Svelte project using Javascript with:
- wails init -n myproject -t svelte + wails init -n myproject -t svelte - If you would rather use Typescript: + If you would rather use Typescript: - wails init -n myproject -t svelte-ts -
- - Generate a React project using Javascript with:
+ wails init -n myproject -t svelte-ts +
+ + Generate a React project using Javascript with:
- wails init -n myproject -t react + wails init -n myproject -t react - If you would rather use Typescript: + If you would rather use Typescript: - wails init -n myproject -t react-ts -
- - Generate a Vue project using Javascript with:
+ wails init -n myproject -t react-ts +
+ + Generate a Vue project using Javascript with:
- wails init -n myproject -t vue + wails init -n myproject -t vue - If you would rather use Typescript: + If you would rather use Typescript: - wails init -n myproject -t vue-ts -
- - Generate a Preact project using Javascript with:
+ wails init -n myproject -t vue-ts +
+ + Generate a Preact project using Javascript with:
- wails init -n myproject -t preact + wails init -n myproject -t preact - If you would rather use Typescript: + If you would rather use Typescript: - wails init -n myproject -t preact-ts -
- - Generate a Lit project using Javascript with:
+ wails init -n myproject -t preact-ts +
+ + Generate a Lit project using Javascript with:
- wails init -n myproject -t lit + wails init -n myproject -t lit - If you would rather use Typescript: + If you would rather use Typescript: - wails init -n myproject -t lit-ts -
- - Generate a Vanilla project using Javascript with:
+ wails init -n myproject -t lit-ts +
+ + Generate a Vanilla project using Javascript with:
- wails init -n myproject -t vanilla + wails init -n myproject -t vanilla - If you would rather use Typescript: + If you would rather use Typescript: - wails init -n myproject -t vanilla-ts -
+ wails init -n myproject -t vanilla-ts +

diff --git a/website/versioned_docs/version-v2.0.0-beta.35/gettingstarted/installation.mdx b/website/versioned_docs/version-v2.0.0-beta.38/gettingstarted/installation.mdx similarity index 100% rename from website/versioned_docs/version-v2.0.0-beta.35/gettingstarted/installation.mdx rename to website/versioned_docs/version-v2.0.0-beta.38/gettingstarted/installation.mdx diff --git a/website/versioned_docs/version-v2.0.0-beta.35/guides/_category_.json b/website/versioned_docs/version-v2.0.0-beta.38/guides/_category_.json similarity index 100% rename from website/versioned_docs/version-v2.0.0-beta.35/guides/_category_.json rename to website/versioned_docs/version-v2.0.0-beta.38/guides/_category_.json diff --git a/website/versioned_docs/version-v2.0.0-beta.35/guides/application-development.mdx b/website/versioned_docs/version-v2.0.0-beta.38/guides/application-development.mdx similarity index 100% rename from website/versioned_docs/version-v2.0.0-beta.35/guides/application-development.mdx rename to website/versioned_docs/version-v2.0.0-beta.38/guides/application-development.mdx diff --git a/website/versioned_docs/version-v2.0.0-beta.35/guides/bleeding-edge.mdx b/website/versioned_docs/version-v2.0.0-beta.38/guides/bleeding-edge.mdx similarity index 100% rename from website/versioned_docs/version-v2.0.0-beta.35/guides/bleeding-edge.mdx rename to website/versioned_docs/version-v2.0.0-beta.38/guides/bleeding-edge.mdx diff --git a/website/versioned_docs/version-v2.0.0-beta.35/guides/developing-wails.mdx b/website/versioned_docs/version-v2.0.0-beta.38/guides/developing-wails.mdx similarity index 100% rename from website/versioned_docs/version-v2.0.0-beta.35/guides/developing-wails.mdx rename to website/versioned_docs/version-v2.0.0-beta.38/guides/developing-wails.mdx diff --git a/website/versioned_docs/version-v2.0.0-beta.35/guides/frameless.mdx b/website/versioned_docs/version-v2.0.0-beta.38/guides/frameless.mdx similarity index 100% rename from website/versioned_docs/version-v2.0.0-beta.35/guides/frameless.mdx rename to website/versioned_docs/version-v2.0.0-beta.38/guides/frameless.mdx diff --git a/website/versioned_docs/version-v2.0.0-beta.35/guides/frontend.mdx b/website/versioned_docs/version-v2.0.0-beta.38/guides/frontend.mdx similarity index 100% rename from website/versioned_docs/version-v2.0.0-beta.35/guides/frontend.mdx rename to website/versioned_docs/version-v2.0.0-beta.38/guides/frontend.mdx diff --git a/website/versioned_docs/version-v2.0.0-beta.35/guides/ides.mdx b/website/versioned_docs/version-v2.0.0-beta.38/guides/ides.mdx similarity index 100% rename from website/versioned_docs/version-v2.0.0-beta.35/guides/ides.mdx rename to website/versioned_docs/version-v2.0.0-beta.38/guides/ides.mdx diff --git a/website/versioned_docs/version-v2.0.0-beta.35/guides/linux-distro-support.mdx b/website/versioned_docs/version-v2.0.0-beta.38/guides/linux-distro-support.mdx similarity index 100% rename from website/versioned_docs/version-v2.0.0-beta.35/guides/linux-distro-support.mdx rename to website/versioned_docs/version-v2.0.0-beta.38/guides/linux-distro-support.mdx diff --git a/website/versioned_docs/version-v2.0.0-beta.35/guides/manual-builds.mdx b/website/versioned_docs/version-v2.0.0-beta.38/guides/manual-builds.mdx similarity index 100% rename from website/versioned_docs/version-v2.0.0-beta.35/guides/manual-builds.mdx rename to website/versioned_docs/version-v2.0.0-beta.38/guides/manual-builds.mdx diff --git a/website/versioned_docs/version-v2.0.0-beta.35/guides/migrating.mdx b/website/versioned_docs/version-v2.0.0-beta.38/guides/migrating.mdx similarity index 100% rename from website/versioned_docs/version-v2.0.0-beta.35/guides/migrating.mdx rename to website/versioned_docs/version-v2.0.0-beta.38/guides/migrating.mdx diff --git a/website/versioned_docs/version-v2.0.0-beta.35/guides/overscroll.mdx b/website/versioned_docs/version-v2.0.0-beta.38/guides/overscroll.mdx similarity index 100% rename from website/versioned_docs/version-v2.0.0-beta.35/guides/overscroll.mdx rename to website/versioned_docs/version-v2.0.0-beta.38/guides/overscroll.mdx diff --git a/website/versioned_docs/version-v2.0.0-beta.35/guides/routing.mdx b/website/versioned_docs/version-v2.0.0-beta.38/guides/routing.mdx similarity index 100% rename from website/versioned_docs/version-v2.0.0-beta.35/guides/routing.mdx rename to website/versioned_docs/version-v2.0.0-beta.38/guides/routing.mdx diff --git a/website/versioned_docs/version-v2.0.0-beta.35/guides/signing.mdx b/website/versioned_docs/version-v2.0.0-beta.38/guides/signing.mdx similarity index 100% rename from website/versioned_docs/version-v2.0.0-beta.35/guides/signing.mdx rename to website/versioned_docs/version-v2.0.0-beta.38/guides/signing.mdx diff --git a/website/versioned_docs/version-v2.0.0-beta.35/guides/templates.mdx b/website/versioned_docs/version-v2.0.0-beta.38/guides/templates.mdx similarity index 100% rename from website/versioned_docs/version-v2.0.0-beta.35/guides/templates.mdx rename to website/versioned_docs/version-v2.0.0-beta.38/guides/templates.mdx diff --git a/website/versioned_docs/version-v2.0.0-beta.35/guides/troubleshooting.mdx b/website/versioned_docs/version-v2.0.0-beta.38/guides/troubleshooting.mdx similarity index 77% rename from website/versioned_docs/version-v2.0.0-beta.35/guides/troubleshooting.mdx rename to website/versioned_docs/version-v2.0.0-beta.38/guides/troubleshooting.mdx index 83b6b9972..4aa119ee9 100644 --- a/website/versioned_docs/version-v2.0.0-beta.35/guides/troubleshooting.mdx +++ b/website/versioned_docs/version-v2.0.0-beta.38/guides/troubleshooting.mdx @@ -21,7 +21,7 @@ If your built application looks like this in finder:

-it's likely that your application's `info.plist` is invalid. Update the file in `build/.app/Contents/info.plist` +it''s likely that your application''s `info.plist` is invalid. Update the file in `build/.app/Contents/info.plist` and check if the data is valid, EG check the binary name is correct. To persist the changes, copy the file back to the `build/darwin` directory. @@ -55,7 +55,7 @@ window.go.main.App.TestFunc(msg, args).then((result) => { //without the 3 dots ``` Credit: https://github.com/wailsapp/wails/issues/1186 -## I'm having getting proxy errors when trying to install Wails +## I''m having getting proxy errors when trying to install Wails If you are getting errors like this: ``` @@ -67,4 +67,10 @@ The solution is to set up the proxy manually, eg: go env -w GO111MODULE=on go env -w GOPROXY=https://goproxy.cn,direct ``` -Source: https://github.com/wailsapp/wails/issues/1233 \ No newline at end of file +Source: https://github.com/wailsapp/wails/issues/1233 + +## The generated Typescript doesn''t have the correct types + +Sometimes the generated Typescript doesn''t have the correct types. To mitigate this, +it is possible to specify what types should be generated using the `ts_type` struct tag. For +more details, please read [this](https://github.com/tkrajina/typescriptify-golang-structs#custom-types). \ No newline at end of file diff --git a/website/versioned_docs/version-v2.0.0-beta.35/guides/windows-installer.mdx b/website/versioned_docs/version-v2.0.0-beta.38/guides/windows-installer.mdx similarity index 100% rename from website/versioned_docs/version-v2.0.0-beta.35/guides/windows-installer.mdx rename to website/versioned_docs/version-v2.0.0-beta.38/guides/windows-installer.mdx diff --git a/website/versioned_docs/version-v2.0.0-beta.35/guides/windows.mdx b/website/versioned_docs/version-v2.0.0-beta.38/guides/windows.mdx similarity index 70% rename from website/versioned_docs/version-v2.0.0-beta.35/guides/windows.mdx rename to website/versioned_docs/version-v2.0.0-beta.38/guides/windows.mdx index 53e456825..e3c2ee027 100644 --- a/website/versioned_docs/version-v2.0.0-beta.35/guides/windows.mdx +++ b/website/versioned_docs/version-v2.0.0-beta.38/guides/windows.mdx @@ -34,3 +34,20 @@ up to the user. ### Error If no suitable runtime is found, an error is given to the user and no further action taken. + +## Fixed version runtime + +Another way of dealing with webview2 dependency is shipping it yourself. +You can download [fixed version runtime](https://developer.microsoft.com/ru-ru/microsoft-edge/webview2/#download-section) and bundle or download it with your application. + +Also, you should specify path to fixed version of webview2 runtime in the `windows.Options` structure when launching wails. + +```go + wails.Run(&options.App{ + Windows: &windows.Options{ + WebviewBrowserPath: "", + }, + }) +``` + +Note: When `WebviewBrowserPath` is specified, `error` strategy will be forced in case of minimal required version mismatch or invalid path to a runtime. \ No newline at end of file diff --git a/website/versioned_docs/version-v2.0.0-beta.35/howdoesitwork.mdx b/website/versioned_docs/version-v2.0.0-beta.38/howdoesitwork.mdx similarity index 100% rename from website/versioned_docs/version-v2.0.0-beta.35/howdoesitwork.mdx rename to website/versioned_docs/version-v2.0.0-beta.38/howdoesitwork.mdx diff --git a/website/versioned_docs/version-v2.0.0-beta.35/introduction.mdx b/website/versioned_docs/version-v2.0.0-beta.38/introduction.mdx similarity index 100% rename from website/versioned_docs/version-v2.0.0-beta.35/introduction.mdx rename to website/versioned_docs/version-v2.0.0-beta.38/introduction.mdx diff --git a/website/versioned_docs/version-v2.0.0-beta.35/reference/_category_.json b/website/versioned_docs/version-v2.0.0-beta.38/reference/_category_.json similarity index 100% rename from website/versioned_docs/version-v2.0.0-beta.35/reference/_category_.json rename to website/versioned_docs/version-v2.0.0-beta.38/reference/_category_.json diff --git a/website/versioned_docs/version-v2.0.0-beta.35/reference/cli.mdx b/website/versioned_docs/version-v2.0.0-beta.38/reference/cli.mdx similarity index 97% rename from website/versioned_docs/version-v2.0.0-beta.35/reference/cli.mdx rename to website/versioned_docs/version-v2.0.0-beta.38/reference/cli.mdx index 12e3a3739..f83c210da 100644 --- a/website/versioned_docs/version-v2.0.0-beta.35/reference/cli.mdx +++ b/website/versioned_docs/version-v2.0.0-beta.38/reference/cli.mdx @@ -70,6 +70,7 @@ If you are unsure about a template, inspect `package.json` and `wails.json` for | -u | Updates your project's `go.mod` to use the same version of Wails as the CLI | | | -debug | Retains debug information in the application | false | | -trimpath | Remove all file system paths from the resulting executable. | false | +| -race | Build with Go's race detector | false | For a detailed description of the `webview2` flag, please refer to the [Windows](../guides/windows.mdx) Guide. @@ -168,6 +169,7 @@ Your system is ready for Wails development! | -tags "extra tags" | Build tags to pass to compiler (quoted and space separated) | | | -loglevel "loglevel"| Loglevel to use - Trace, Debug, Info, Warning, Error | Debug | | -noreload | Disable automatic reload when assets change | | +| -nogen | Disable generate module | | | -v | Verbosity level (0 - silent, 1 - standard, 2 - verbose) | 1 | | -wailsjsdir | The directory to generate the generated Wails JS modules | Value in `wails.json` | | -debounce | The time to wait for reload after an asset change is detected | 100 (milliseconds) | @@ -175,8 +177,8 @@ Your system is ready for Wails development! | -frontenddevserverurl "url" | Use 3rd party dev server url to serve assets, EG Vite | "" | | -appargs "args" | Arguments passed to the application in shell style | | | -platform "platform" | Platform/Arch to target | `runtime.GOOS` | -| -save | Saves the given `assetdir`, `reloaddirs`, `wailsjsdir`, `debounce`, `devserver` and `frontenddevserverurl` flags in -`wails.json` to become the defaults for subsequent invocations. | | +| -save | Saves the given `assetdir`, `reloaddirs`, `wailsjsdir`, `debounce`, `devserver` and `frontenddevserverurl` flags in `wails.json` to become the defaults for subsequent invocations. | | +| -race | Build with Go's race detector | false | Example: @@ -193,9 +195,6 @@ There is more information on using this feature with existing framework scripts ## generate -### module -Wails creates a javascript module as described in `wails dev`. Use `wails generate module` to generate the javascript interface code. - ### template Wails uses templates for project generation. The `wails generate template` command helps scaffold a template so that diff --git a/website/versioned_docs/version-v2.0.0-beta.35/reference/menus.mdx b/website/versioned_docs/version-v2.0.0-beta.38/reference/menus.mdx similarity index 98% rename from website/versioned_docs/version-v2.0.0-beta.35/reference/menus.mdx rename to website/versioned_docs/version-v2.0.0-beta.38/reference/menus.mdx index cfbdbe440..94f08b2e2 100644 --- a/website/versioned_docs/version-v2.0.0-beta.35/reference/menus.mdx +++ b/website/versioned_docs/version-v2.0.0-beta.38/reference/menus.mdx @@ -18,6 +18,10 @@ An example of how to create a menu: FileMenu.AddText("Quit", keys.CmdOrCtrl("q"), func(_ *menu.CallbackData) { runtime.Quit() }) + + if runtime.GOOS == "darwin" { + AppMenu.Append(menu.EditMenu()) // on macos platform, we should append EditMenu to enable Cmd+C,Cmd+V,Cmd+Z... shortcut + } err := wails.Run(&options.App{ Title: "Menus Demo", diff --git a/website/versioned_docs/version-v2.0.0-beta.35/reference/options.mdx b/website/versioned_docs/version-v2.0.0-beta.38/reference/options.mdx similarity index 91% rename from website/versioned_docs/version-v2.0.0-beta.35/reference/options.mdx rename to website/versioned_docs/version-v2.0.0-beta.38/reference/options.mdx index 23de4e51e..b946f6d52 100644 --- a/website/versioned_docs/version-v2.0.0-beta.35/reference/options.mdx +++ b/website/versioned_docs/version-v2.0.0-beta.38/reference/options.mdx @@ -27,7 +27,7 @@ func main() { MaxHeight: 1024, StartHidden: false, HideWindowOnClose: false, - RGBA: &options.RGBA{R: 0, G: 0, B: 0, A: 255}, + BackgroundColour: &options.RGBA{R: 0, G: 0, B: 0, A: 255}, AlwaysOnTop: false, Assets: assets, AssetsHandler: assetsHandler, @@ -48,6 +48,7 @@ func main() { DisableWindowIcon: false, DisableFramelessWindowDecorations: false, WebviewUserDataPath: "", + WebviewBrowserPath: "", Theme: windows.SystemDefault, CustomTheme: &windows.ThemeSettings{ DarkModeTitleBar: windows.RGB(20, 20, 20), @@ -196,14 +197,14 @@ Type: bool By default, closing the window will close the application. Setting this to `true` means closing the window will hide the window instead. -### RGBA +### BackgroundColour -Name: RGBA +Name: BackgroundColour Type: int (0xRRGGBBAA) Example: 0xFF000088 - Red at 50% transparency -This value is the RGBA value to set the window by default. +This value is the default background colour of the window. Default: 0xFFFFFFFF. ### AlwaysOnTop @@ -392,7 +393,7 @@ Name: WebviewIsTransparent Type: bool Setting this to `true` will make the webview background transparent when an alpha value of `0` is used. -This means that if you use `rgba(0,0,0,0)`, the host window will show through. +This means that if you use `rgba(0,0,0,0)` for `background-color` in your CSS, the host window will show through. Often combined with [WindowIsTranslucent](#WindowIsTranslucent) to make frosty-looking applications. ### WindowIsTranslucent @@ -430,6 +431,19 @@ Type: string This defines the path where the WebView2 stores the user data. If empty `%APPDATA%\[BinaryName.exe]` will be used. +### WebviewBrowserPath + +Name: WebviewBrowserPath + +Type: string + +This defines the path to a directory with WebView2 executable files and libraries. If empty, webview2 installed in the system will be used. + +Important information about distribution of fixed version runtime: +- [How to get and extract runtime](https://docs.microsoft.com/en-us/microsoft-edge/webview2/concepts/distribution#details-about-the-fixed-version-runtime-distribution-mode) +- [Known issues for fixed version](https://docs.microsoft.com/en-us/microsoft-edge/webview2/concepts/distribution#known-issues-for-fixed-version) +- [The path of fixed version of the WebView2 Runtime should not contain \Edge\Application\.](https://docs.microsoft.com/en-us/microsoft-edge/webview2/reference/win32/webview2-idl?view=webview2-1.0.1245.22#createcorewebview2environmentwithoptions) + ### Theme Name: Theme @@ -511,6 +525,33 @@ Type: `*windows.Messages` A struct of strings used by the webview2 installer if a valid webview2 runtime is not found. Customise this for any language you choose to support. +### ResizeDebounceMS + +Name: ResizeDebounceMS + +Type: uint16 + +ResizeDebounceMS is the amount of time to debounce redraws of webview2 when resizing the window. +The default value (0) will perform redraws as fast as it can. + +### OnSuspend + +Name: OnSuspend + +Type: func() + +If set, this function will be called when windows initiates a switch to low power mode (suspend/hibernate) + +### OnResume + +Name: OnResume + +Type: func() + +If set, this function will be called when windows resumes from low power mode (suspend/hibernate) + + + ## Mac Specific Options ### TitleBar @@ -536,7 +577,7 @@ Name: WebviewIsTransparent Type: bool Setting this to `true` will make the webview background transparent when an alpha value of `0` is used. -This means that if you use `rgba(0,0,0,0)`, the host window will show through. +This means that if you use `rgba(0,0,0,0)` for `background-color` in your CSS, the host window will show through. Often combined with [WindowIsTranslucent](#WindowIsTranslucent) to make frosty-looking applications. ### WindowIsTranslucent diff --git a/website/versioned_docs/version-v2.0.0-beta.35/reference/project-config.mdx b/website/versioned_docs/version-v2.0.0-beta.38/reference/project-config.mdx similarity index 94% rename from website/versioned_docs/version-v2.0.0-beta.35/reference/project-config.mdx rename to website/versioned_docs/version-v2.0.0-beta.38/reference/project-config.mdx index 178504a63..de612d5f7 100644 --- a/website/versioned_docs/version-v2.0.0-beta.35/reference/project-config.mdx +++ b/website/versioned_docs/version-v2.0.0-beta.38/reference/project-config.mdx @@ -19,7 +19,7 @@ The project config resides in the `wails.json` file in the project directory. Th "wailsjsdir": "[Relative path to the directory that the auto-generated JS modules will be created]", "version": "[Project config version]", "outputfilename": "[The name of the binary]", - "debounceMS": 100, // The default time the dev server waits to reload when it detects a vhange in assets + "debounceMS": 100, // The default time the dev server waits to reload when it detects a change in assets "devServer": "[Address to bind the wails dev sever to. Default: localhost:34115]", "appargs": "[Arguments passed to the application in shell style when in dev mode]", "runNonNativeBuildHooks": false, // Defines if build hooks should be run though they are defined for an OS other than the host OS. @@ -35,7 +35,7 @@ The project config resides in the `wails.json` file in the project directory. Th "copyright": "[The copyright of the product. Default: 'Copyright.........']", "comments": "[A short comment of the app. Default: 'Built using Wails (https://wails.app)']" }, - "nsisType": "['multiple': One installer per achitecture. 'single': Single universal installer for all architectures being built. Default: 'multiple']" + "nsisType": "['multiple': One installer per architecture. 'single': Single universal installer for all architectures being built. Default: 'multiple']" } ``` diff --git a/website/versioned_docs/version-v2.0.0-beta.35/reference/runtime/_category_.json b/website/versioned_docs/version-v2.0.0-beta.38/reference/runtime/_category_.json similarity index 100% rename from website/versioned_docs/version-v2.0.0-beta.35/reference/runtime/_category_.json rename to website/versioned_docs/version-v2.0.0-beta.38/reference/runtime/_category_.json diff --git a/website/versioned_docs/version-v2.0.0-beta.35/reference/runtime/browser.mdx b/website/versioned_docs/version-v2.0.0-beta.38/reference/runtime/browser.mdx similarity index 100% rename from website/versioned_docs/version-v2.0.0-beta.35/reference/runtime/browser.mdx rename to website/versioned_docs/version-v2.0.0-beta.38/reference/runtime/browser.mdx diff --git a/website/versioned_docs/version-v2.0.0-beta.35/reference/runtime/dialog.mdx b/website/versioned_docs/version-v2.0.0-beta.38/reference/runtime/dialog.mdx similarity index 100% rename from website/versioned_docs/version-v2.0.0-beta.35/reference/runtime/dialog.mdx rename to website/versioned_docs/version-v2.0.0-beta.38/reference/runtime/dialog.mdx diff --git a/website/versioned_docs/version-v2.0.0-beta.35/reference/runtime/events.mdx b/website/versioned_docs/version-v2.0.0-beta.38/reference/runtime/events.mdx similarity index 95% rename from website/versioned_docs/version-v2.0.0-beta.35/reference/runtime/events.mdx rename to website/versioned_docs/version-v2.0.0-beta.38/reference/runtime/events.mdx index 1893a7b98..c08f83c8a 100644 --- a/website/versioned_docs/version-v2.0.0-beta.35/reference/runtime/events.mdx +++ b/website/versioned_docs/version-v2.0.0-beta.38/reference/runtime/events.mdx @@ -46,6 +46,6 @@ This method sets up a listener for the given event name, but will only trigger a Go Signature: `EventsEmit(ctx context.Context, eventName string, optionalData ...interface{})` -JS Signature: `EventsEmit(eventName string, optionalData function(optionalData?: any))` +JS Signature: `EventsEmit(ctx context, optionalData function(optionalData?: any))` This method emits the given event. Optional data may be passed with the event. This will trigger any event listeners. diff --git a/website/versioned_docs/version-v2.0.0-beta.35/reference/runtime/intro.mdx b/website/versioned_docs/version-v2.0.0-beta.38/reference/runtime/intro.mdx similarity index 100% rename from website/versioned_docs/version-v2.0.0-beta.35/reference/runtime/intro.mdx rename to website/versioned_docs/version-v2.0.0-beta.38/reference/runtime/intro.mdx diff --git a/website/versioned_docs/version-v2.0.0-beta.35/reference/runtime/log.mdx b/website/versioned_docs/version-v2.0.0-beta.38/reference/runtime/log.mdx similarity index 100% rename from website/versioned_docs/version-v2.0.0-beta.35/reference/runtime/log.mdx rename to website/versioned_docs/version-v2.0.0-beta.38/reference/runtime/log.mdx diff --git a/website/versioned_docs/version-v2.0.0-beta.35/reference/runtime/menu.mdx b/website/versioned_docs/version-v2.0.0-beta.38/reference/runtime/menu.mdx similarity index 100% rename from website/versioned_docs/version-v2.0.0-beta.35/reference/runtime/menu.mdx rename to website/versioned_docs/version-v2.0.0-beta.38/reference/runtime/menu.mdx diff --git a/website/versioned_docs/version-v2.0.0-beta.35/reference/runtime/window.mdx b/website/versioned_docs/version-v2.0.0-beta.38/reference/runtime/window.mdx similarity index 96% rename from website/versioned_docs/version-v2.0.0-beta.35/reference/runtime/window.mdx rename to website/versioned_docs/version-v2.0.0-beta.38/reference/runtime/window.mdx index 915ca9ac4..c3a493d2e 100644 --- a/website/versioned_docs/version-v2.0.0-beta.35/reference/runtime/window.mdx +++ b/website/versioned_docs/version-v2.0.0-beta.38/reference/runtime/window.mdx @@ -127,6 +127,14 @@ Will resize the window if the window is currently larger than the given dimensio Setting a size of `0,0` will disable this constraint. +### WindowSetAlwaysOnTop +Go Signature: `WindowSetAlwaysOnTop(ctx context.Context, b bool)` + +JS Signature: `WindowSetAlwaysOnTop(b: Boolen)` + +Sets the window AlwaysOnTop or not on top. + + ### WindowSetPosition Go Signature: `WindowSetPosition(ctx context.Context, x int, y int)` diff --git a/website/versioned_sidebars/version-v2.0.0-beta.35-sidebars.json b/website/versioned_sidebars/version-v2.0.0-beta.38-sidebars.json similarity index 100% rename from website/versioned_sidebars/version-v2.0.0-beta.35-sidebars.json rename to website/versioned_sidebars/version-v2.0.0-beta.38-sidebars.json diff --git a/website/versions.json b/website/versions.json index 59a121372..3b9e55047 100644 --- a/website/versions.json +++ b/website/versions.json @@ -1,4 +1,4 @@ [ - "v2.0.0-beta.37", - "v2.0.0-beta.35" -] + "v2.0.0-beta.38", + "v2.0.0-beta.37" +] \ No newline at end of file From b2cec41fbfd452ad4a34f92a5c5223de9576b255 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?NYSSEN=20Micha=C3=ABl?= <47521598+Orijhins@users.noreply.github.com> Date: Mon, 27 Jun 2022 12:56:18 +0200 Subject: [PATCH 68/87] Fix lit-ts template (#1494) * Fix lit-ts template * Fixing generate Template * Remove bad null check Co-authored-by: Lea Anthony --- .../assets/lit-ts/frontend/src/my-element.ts | 45 +++++++++---------- .../lit-ts/frontend/src/my-element.ts | 45 +++++++++---------- 2 files changed, 44 insertions(+), 46 deletions(-) diff --git a/v2/cmd/wails/internal/commands/initialise/templates/generate/assets/lit-ts/frontend/src/my-element.ts b/v2/cmd/wails/internal/commands/initialise/templates/generate/assets/lit-ts/frontend/src/my-element.ts index fc5ebbbed..1b313b759 100644 --- a/v2/cmd/wails/internal/commands/initialise/templates/generate/assets/lit-ts/frontend/src/my-element.ts +++ b/v2/cmd/wails/internal/commands/initialise/templates/generate/assets/lit-ts/frontend/src/my-element.ts @@ -68,32 +68,31 @@ export class MyElement extends LitElement { } ` -} -@property() -resultText = "Please enter your name below 👇" + @property() + resultText = "Please enter your name below 👇" -greet() -{ - let thisName = this.shadowRoot.getElementById('name').value - Greet(thisName).then(result => { - this.resultText = result - }); -} + greet() { + let thisName = (this.shadowRoot.getElementById('name') as HTMLInputElement)?.value; + if (thisName) { + Greet(thisName).then(result => { + this.resultText = result + }); + } + } -render() -{ - return html` -
- -
${this.resultText}
-
- - -
-
- ` -} + render() { + return html` +
+ +
${this.resultText}
+
+ + +
+
+ ` + } } declare global { diff --git a/v2/cmd/wails/internal/commands/initialise/templates/templates/lit-ts/frontend/src/my-element.ts b/v2/cmd/wails/internal/commands/initialise/templates/templates/lit-ts/frontend/src/my-element.ts index fc5ebbbed..1b313b759 100644 --- a/v2/cmd/wails/internal/commands/initialise/templates/templates/lit-ts/frontend/src/my-element.ts +++ b/v2/cmd/wails/internal/commands/initialise/templates/templates/lit-ts/frontend/src/my-element.ts @@ -68,32 +68,31 @@ export class MyElement extends LitElement { } ` -} -@property() -resultText = "Please enter your name below 👇" + @property() + resultText = "Please enter your name below 👇" -greet() -{ - let thisName = this.shadowRoot.getElementById('name').value - Greet(thisName).then(result => { - this.resultText = result - }); -} + greet() { + let thisName = (this.shadowRoot.getElementById('name') as HTMLInputElement)?.value; + if (thisName) { + Greet(thisName).then(result => { + this.resultText = result + }); + } + } -render() -{ - return html` -
- -
${this.resultText}
-
- - -
-
- ` -} + render() { + return html` +
+ +
${this.resultText}
+
+ + +
+
+ ` + } } declare global { From 95082336cda006652ca63156275109987acdfb10 Mon Sep 17 00:00:00 2001 From: Lea Anthony Date: Mon, 27 Jun 2022 21:08:43 +1000 Subject: [PATCH 69/87] changelog + doc fix --- website/src/pages/changelog.md | 59 ++++++++++++++- .../gettingstarted/firstproject.mdx | 73 +++++++++---------- 2 files changed, 94 insertions(+), 38 deletions(-) diff --git a/website/src/pages/changelog.md b/website/src/pages/changelog.md index 26492ab84..99be4d38d 100644 --- a/website/src/pages/changelog.md +++ b/website/src/pages/changelog.md @@ -7,13 +7,70 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] +## [v2.0.0-beta.38] - 2022-06-27 + +### Added + +* Add race detector to build & dev by @Lyimmi in https://github.com/wailsapp/wails/pull/1426 +* [linux] Support `linux/arm` architecture by @Lyimmi in https://github.com/wailsapp/wails/pull/1427 +* Create gitignore when using `-g` option by @jaesung9507 in https://github.com/wailsapp/wails/pull/1430 +* [windows] Add Suspend/Resume callback support by @leaanthony in https://github.com/wailsapp/wails/pull/1474 +* Add runtime function `WindowSetAlwaysOnTop` by @chenxiao1990 in https://github.com/wailsapp/wails/pull/1442 +* [windows] Allow setting browser path by @NanoNik in https://github.com/wailsapp/wails/pull/1448 + +### Fixed + +* [linux] Improve switching to main thread for callbacks by @stffabi in https://github.com/wailsapp/wails/pull/1392 +* [windows] Fix WebView2 minimum runtime version check by @stffabi in https://github.com/wailsapp/wails/pull/1456 +* [linux] Fix apt command syntax (#1458) by @abtin in https://github.com/wailsapp/wails/pull/1461 +* [windows] Set Window Background colour if provided + debounce redraw option by @leaanthony + in https://github.com/wailsapp/wails/pull/1466 +* Fix small typo in docs by @LukenSkyne in https://github.com/wailsapp/wails/pull/1449 +* Fix the url to surge by @andywenk in https://github.com/wailsapp/wails/pull/1460 +* Fixed theme change at runtime by @leaanthony in https://github.com/wailsapp/wails/pull/1473 +* Fix: Don't stop if unable to remove temporary bindings build by @leaanthony + in https://github.com/wailsapp/wails/pull/1465 +* [windows] Pass the correct installationStatus to the webview installation strategy by @stffabi + in https://github.com/wailsapp/wails/pull/1483 +* [windows] Make `SetBackgroundColour` compatible for `windows/386` by @stffabi + in https://github.com/wailsapp/wails/pull/1493 +* Fix lit-ts template by @Orijhins in https://github.com/wailsapp/wails/pull/1494 + +### Changed + +* [windows] Load WebView2 loader from embedded only by @stffabi in https://github.com/wailsapp/wails/pull/1432 +* Add showcase entry for October + update homepage carousel entry for October by @marcus-crane + in https://github.com/wailsapp/wails/pull/1436 +* Always use return in wrapped method by @leaanthony in https://github.com/wailsapp/wails/pull/1410 +* [windows] Unlock OSThread after native calls have been finished by @stffabi + in https://github.com/wailsapp/wails/pull/1441 +* Add `BackgroundColour` and deprecate `RGBA` by @leaanthony in https://github.com/wailsapp/wails/pull/1475 +* AssetsHandler remove retry logic in dev mode by @stffabi in https://github.com/wailsapp/wails/pull/1479 +* Add Solid JS template to docs by @sidwebworks in https://github.com/wailsapp/wails/pull/1492 +* Better signal handling by @leaanthony in https://github.com/wailsapp/wails/pull/1488 +* Chore/react 18 create root by @tomanagle in https://github.com/wailsapp/wails/pull/1489 + +## New Contributors + +* @jaesung9507 made their first contribution in https://github.com/wailsapp/wails/pull/1430 +* @LukenSkyne made their first contribution in https://github.com/wailsapp/wails/pull/1449 +* @andywenk made their first contribution in https://github.com/wailsapp/wails/pull/1460 +* @abtin made their first contribution in https://github.com/wailsapp/wails/pull/1461 +* @chenxiao1990 made their first contribution in https://github.com/wailsapp/wails/pull/1442 +* @NanoNik made their first contribution in https://github.com/wailsapp/wails/pull/1448 +* @sidwebworks made their first contribution in https://github.com/wailsapp/wails/pull/1492 +* @tomanagle made their first contribution in https://github.com/wailsapp/wails/pull/1489 + ## [v2.0.0-beta.37] - 2022-05-26 ### Added + * Add `nogen` flag in wails dev command by @mondy in https://github.com/wailsapp/wails/pull/1413 -* Initial support for new native translucency in Windows Preview by @leaanthony in https://github.com/wailsapp/wails/pull/1400 +* Initial support for new native translucency in Windows Preview by @leaanthony + in https://github.com/wailsapp/wails/pull/1400 ### Fixed + * Bugfix/incorrect bindings by @leaanthony in https://github.com/wailsapp/wails/pull/1383 * Fix runtime.js events by @polikow in https://github.com/wailsapp/wails/pull/1369 * Fix docs formatting by @antimatter96 in https://github.com/wailsapp/wails/pull/1372 diff --git a/website/versioned_docs/version-v2.0.0-beta.38/gettingstarted/firstproject.mdx b/website/versioned_docs/version-v2.0.0-beta.38/gettingstarted/firstproject.mdx index 949b05b1a..b5ee1fa46 100644 --- a/website/versioned_docs/version-v2.0.0-beta.38/gettingstarted/firstproject.mdx +++ b/website/versioned_docs/version-v2.0.0-beta.38/gettingstarted/firstproject.mdx @@ -13,7 +13,6 @@ Pick your favourite framework: - import Tabs from "@theme/Tabs"; import TabItem from "@theme/TabItem"; @@ -28,60 +27,60 @@ import TabItem from "@theme/TabItem"; {label: "Vanilla", value: "Vanilla"}, ]} > - - Generate a Svelte project using Javascript with:
+ + Generate a Svelte project using Javascript with:
- wails init -n myproject -t svelte + wails init -n myproject -t svelte - If you would rather use Typescript: + If you would rather use Typescript: - wails init -n myproject -t svelte-ts -
- - Generate a React project using Javascript with:
+ wails init -n myproject -t svelte-ts +
+ + Generate a React project using Javascript with:
- wails init -n myproject -t react + wails init -n myproject -t react - If you would rather use Typescript: + If you would rather use Typescript: - wails init -n myproject -t react-ts -
- - Generate a Vue project using Javascript with:
+ wails init -n myproject -t react-ts +
+ + Generate a Vue project using Javascript with:
- wails init -n myproject -t vue + wails init -n myproject -t vue - If you would rather use Typescript: + If you would rather use Typescript: - wails init -n myproject -t vue-ts -
- - Generate a Preact project using Javascript with:
+ wails init -n myproject -t vue-ts +
+ + Generate a Preact project using Javascript with:
- wails init -n myproject -t preact + wails init -n myproject -t preact - If you would rather use Typescript: + If you would rather use Typescript: - wails init -n myproject -t preact-ts -
- - Generate a Lit project using Javascript with:
+ wails init -n myproject -t preact-ts +
+ + Generate a Lit project using Javascript with:
- wails init -n myproject -t lit + wails init -n myproject -t lit - If you would rather use Typescript: + If you would rather use Typescript: - wails init -n myproject -t lit-ts -
- - Generate a Vanilla project using Javascript with:
+ wails init -n myproject -t lit-ts +
+ + Generate a Vanilla project using Javascript with:
- wails init -n myproject -t vanilla + wails init -n myproject -t vanilla - If you would rather use Typescript: + If you would rather use Typescript: - wails init -n myproject -t vanilla-ts -
+ wails init -n myproject -t vanilla-ts +

From 7cc3652a39b9267d2e27f1662c9ec4606c6f3419 Mon Sep 17 00:00:00 2001 From: Lea Anthony Date: Wed, 29 Jun 2022 08:08:12 +1000 Subject: [PATCH 70/87] Updated docs. Closes #1501 --- website/docs/gettingstarted/installation.mdx | 12 +++++-- .../docs/guides/application-development.mdx | 34 +++++++++++++++++++ website/docs/guides/troubleshooting.mdx | 8 ++++- 3 files changed, 51 insertions(+), 3 deletions(-) diff --git a/website/docs/gettingstarted/installation.mdx b/website/docs/gettingstarted/installation.mdx index 3b4cd33cc..7358a3ecd 100644 --- a/website/docs/gettingstarted/installation.mdx +++ b/website/docs/gettingstarted/installation.mdx @@ -20,9 +20,9 @@ Wails has a number of common dependencies that are required before installation: ### Go -Download Go from the [Go Downloads Page](https://golang.org/dl/). +Download Go from the [Go Downloads Page](https://go.dev/doc/install). -Ensure that you follow the official [Go installation instructions](https://golang.org/doc/install.mdx#install). You will also need to ensure that your `PATH` environment variable also includes the path to your `~/go/bin` directory. Restart your terminal and do the following checks: +Ensure that you follow the official [Go installation instructions](https://go.dev/doc/install). You will also need to ensure that your `PATH` environment variable also includes the path to your `~/go/bin` directory. Restart your terminal and do the following checks: - Check Go is installed correctly: `go version` - Check "~/go/bin" is in your PATH variable: `echo $PATH | grep go/bin` @@ -37,6 +37,7 @@ Run `npm --version` to verify. You will also need to install platform specific dependencies: + import Tabs from "@theme/Tabs"; import TabItem from "@theme/TabItem"; @@ -76,3 +77,10 @@ Run `go install github.com/wailsapp/wails/v2/cmd/wails@latest` to install the Wa ## System Check Running `wails doctor` will check if you have the correct dependencies installed. If not, it will advise on what is missing and help on how to rectify any problems. + +## The `wails` command appears to be missing? + +If your system is reporting that the `wails` command is missing, make sure you have followed the Go installation guide +correctly. Normally, it means that the `go/bin` directory in your User's home directory is not in the `PATH` environment +variable. You will also normally need to close and reopen any open command prompts so that changes to the environment +made by the installer are reflected at the command prompt. \ No newline at end of file diff --git a/website/docs/guides/application-development.mdx b/website/docs/guides/application-development.mdx index 039cb227d..d9de25d2e 100644 --- a/website/docs/guides/application-development.mdx +++ b/website/docs/guides/application-development.mdx @@ -113,6 +113,40 @@ func main() { This will bind all public methods in our `App` struct (it will never bind the startup and shutdown methods). +### Dealing with context when binding multiple structs + +If you want to bind methods for multiple structs but want each struct to keep a reference to the context so that you +can use the runtime functions, a good pattern is to pass the context from the `OnStartup` method to your struct instances +: + +```go +func main() { + + app := NewApp() + otherStruct := NewOtherStruct() + + err := wails.Run(&options.App{ + Title: "My App", + Width: 800, + Height: 600, + OnStartup: func(ctx context.Context){ + app.SetContext(ctx) + otherStruct.SetContext(ctx) + }, + OnShutdown: app.shutdown, + Bind: []interface{}{ + app, + otherStruct + }, + }) + if err != nil { + log.Fatal(err) + } +} +``` + + + More information on Binding can be found [here](../howdoesitwork.mdx#method-binding). ## Application Menu diff --git a/website/docs/guides/troubleshooting.mdx b/website/docs/guides/troubleshooting.mdx index b355f2389..9c7898eb3 100644 --- a/website/docs/guides/troubleshooting.mdx +++ b/website/docs/guides/troubleshooting.mdx @@ -1,8 +1,14 @@ - # Troubleshooting An assortment of troubleshooting tips. +## The `wails` command appears to be missing? + +If your system is reporting that the `wails` command is missing, make sure you have followed the Go installation guide +correctly. Normally, it means that the `go/bin` directory in your User's home directory is not in the `PATH` environment +variable. You will also normally need to close and reopen any open command prompts so that changes to the environment +made by the installer are reflected at the command prompt. + ## My application is displaying a white/blank screen Check that your application includes the assets from the correct directory. In your `main.go` file, you will have From 7141c972fd0e99a244840812535ad44ad2f85bd0 Mon Sep 17 00:00:00 2001 From: Lea Anthony Date: Wed, 29 Jun 2022 20:07:16 +1000 Subject: [PATCH 71/87] Move WindowGet* to main thread (#1464) --- v2/internal/frontend/desktop/linux/window.go | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/v2/internal/frontend/desktop/linux/window.go b/v2/internal/frontend/desktop/linux/window.go index f115e7bc1..1bce2acb9 100644 --- a/v2/internal/frontend/desktop/linux/window.go +++ b/v2/internal/frontend/desktop/linux/window.go @@ -565,6 +565,7 @@ void SetWindowIcon(GtkWindow* window, const guchar* buf, gsize len) { import "C" import ( "strings" + "sync" "unsafe" "github.com/wailsapp/wails/v2/internal/frontend" @@ -707,13 +708,25 @@ func (w *Window) SetPosition(x int, y int) { func (w *Window) Size() (int, int) { var width, height C.int - C.gtk_window_get_size(w.asGTKWindow(), &width, &height) + var wg sync.WaitGroup + wg.Add(1) + invokeOnMainThread(func() { + C.gtk_window_get_size(w.asGTKWindow(), &width, &height) + wg.Done() + }) + wg.Wait() return int(width), int(height) } func (w *Window) GetPosition() (int, int) { var width, height C.int - C.gtk_window_get_position(w.asGTKWindow(), &width, &height) + var wg sync.WaitGroup + wg.Add(1) + invokeOnMainThread(func() { + C.gtk_window_get_position(w.asGTKWindow(), &width, &height) + wg.Done() + }) + wg.Wait() return int(width), int(height) } From 3e42d2da0589e14093276e64bee5232458e0cbeb Mon Sep 17 00:00:00 2001 From: Lea Anthony Date: Wed, 29 Jun 2022 22:31:49 +1000 Subject: [PATCH 72/87] Rename WindowSetRGBA -> WindowSetBackgroundColour (#1506) * Rename WindowSetRGBA -> WindowSetBackgroundColour * Fix Typos --- .../common/frontend/wailsjs/runtime/runtime.d.ts | 4 ++-- .../common/frontend/wailsjs/runtime/runtime.js | 4 ++-- .../generate/plain/{main.tmpl.go => main.go.tmpl} | 0 .../lit-ts/frontend/wailsjs/runtime/runtime.d.ts | 4 ++-- .../lit-ts/frontend/wailsjs/runtime/runtime.js | 4 ++-- .../lit/frontend/wailsjs/runtime/runtime.d.ts | 4 ++-- .../lit/frontend/wailsjs/runtime/runtime.js | 4 ++-- .../frontend/wailsjs/runtime/runtime.d.ts | 4 ++-- .../preact-ts/frontend/wailsjs/runtime/runtime.js | 4 ++-- .../preact/frontend/wailsjs/runtime/runtime.d.ts | 4 ++-- .../preact/frontend/wailsjs/runtime/runtime.js | 4 ++-- .../react-ts/frontend/wailsjs/runtime/runtime.d.ts | 4 ++-- .../react-ts/frontend/wailsjs/runtime/runtime.js | 4 ++-- .../react/frontend/wailsjs/runtime/runtime.d.ts | 4 ++-- .../react/frontend/wailsjs/runtime/runtime.js | 4 ++-- .../frontend/wailsjs/runtime/runtime.d.ts | 4 ++-- .../svelte-ts/frontend/wailsjs/runtime/runtime.js | 4 ++-- .../svelte/frontend/wailsjs/runtime/runtime.d.ts | 4 ++-- .../svelte/frontend/wailsjs/runtime/runtime.js | 4 ++-- .../frontend/wailsjs/runtime/runtime.d.ts | 4 ++-- .../vanilla-ts/frontend/wailsjs/runtime/runtime.js | 4 ++-- .../vanilla/frontend/wailsjs/runtime/runtime.d.ts | 4 ++-- .../vanilla/frontend/wailsjs/runtime/runtime.js | 4 ++-- .../vue-ts/frontend/wailsjs/runtime/runtime.d.ts | 4 ++-- .../vue-ts/frontend/wailsjs/runtime/runtime.js | 4 ++-- .../vue/frontend/wailsjs/runtime/runtime.d.ts | 4 ++-- .../vue/frontend/wailsjs/runtime/runtime.js | 4 ++-- v2/go.mod | 10 ++++++---- v2/go.sum | 2 -- v2/internal/appng/app_default_darwin.go | 2 ++ v2/internal/appng/app_default_linux.go | 2 ++ v2/internal/appng/app_default_windows.go | 2 ++ v2/internal/frontend/desktop/darwin/Application.h | 2 +- v2/internal/frontend/desktop/darwin/Application.m | 4 ++-- v2/internal/frontend/desktop/darwin/WailsContext.h | 2 +- v2/internal/frontend/desktop/darwin/WailsContext.m | 2 +- v2/internal/frontend/desktop/darwin/frontend.go | 4 ++-- v2/internal/frontend/desktop/darwin/main.m | 2 +- v2/internal/frontend/desktop/darwin/window.go | 6 +++--- v2/internal/frontend/desktop/linux/frontend.go | 4 ++-- v2/internal/frontend/desktop/linux/window.go | 8 ++++---- v2/internal/frontend/desktop/windows/frontend.go | 4 ++-- v2/internal/frontend/devserver/devserver.go | 4 ++-- v2/internal/frontend/dispatcher/window.go | 2 +- v2/internal/frontend/frontend.go | 2 +- v2/internal/frontend/runtime/desktop/window.js | 7 +++---- .../frontend/runtime/runtime_dev_desktop.js | 14 ++++++++++---- .../frontend/runtime/runtime_prod_desktop.js | 2 +- v2/internal/frontend/runtime/wrapper/runtime.d.ts | 4 ++-- v2/internal/frontend/runtime/wrapper/runtime.js | 4 ++-- v2/pkg/runtime/window.go | 5 +++-- website/docs/reference/runtime/window.mdx | 6 +++--- 52 files changed, 111 insertions(+), 99 deletions(-) rename v2/cmd/wails/internal/commands/initialise/templates/generate/plain/{main.tmpl.go => main.go.tmpl} (100%) diff --git a/v2/cmd/wails/internal/commands/initialise/templates/generate/assets/common/frontend/wailsjs/runtime/runtime.d.ts b/v2/cmd/wails/internal/commands/initialise/templates/generate/assets/common/frontend/wailsjs/runtime/runtime.d.ts index 08ada6948..8d816307f 100644 --- a/v2/cmd/wails/internal/commands/initialise/templates/generate/assets/common/frontend/wailsjs/runtime/runtime.d.ts +++ b/v2/cmd/wails/internal/commands/initialise/templates/generate/assets/common/frontend/wailsjs/runtime/runtime.d.ts @@ -167,9 +167,9 @@ export function WindowMinimise(): void; // Restores the window to the dimensions and position prior to minimising. export function WindowUnminimise(): void; -// [WindowSetRGBA](https://wails.io/docs/reference/runtime/window#windowsetrgba) +// [WindowSetBackgroundColour](https://wails.io/docs/reference/runtime/window#windowsetbackgroundcolour) // Sets the background colour of the window to the given RGBA colour definition. This colour will show through for all transparent pixels. -export function WindowSetRGBA(R: number, G: number, B: number, A: number): void; +export function WindowSetBackgroundColour(R: number, G: number, B: number, A: number): void; // [BrowserOpenURL](https://wails.io/docs/reference/runtime/browser#browseropenurl) // Opens the given URL in the system browser. diff --git a/v2/cmd/wails/internal/commands/initialise/templates/generate/assets/common/frontend/wailsjs/runtime/runtime.js b/v2/cmd/wails/internal/commands/initialise/templates/generate/assets/common/frontend/wailsjs/runtime/runtime.js index 7f13df1ac..73f607ba7 100644 --- a/v2/cmd/wails/internal/commands/initialise/templates/generate/assets/common/frontend/wailsjs/runtime/runtime.js +++ b/v2/cmd/wails/internal/commands/initialise/templates/generate/assets/common/frontend/wailsjs/runtime/runtime.js @@ -145,8 +145,8 @@ export function WindowUnminimise() { window.runtime.WindowUnminimise(); } -export function WindowSetRGBA(RGBA) { - window.runtime.WindowSetRGBA(RGBA); +export function WindowSetBackgroundColour(R, G, B, A) { + window.runtime.WindowSetBackgroundColour(R, G, B, A); } export function BrowserOpenURL(url) { diff --git a/v2/cmd/wails/internal/commands/initialise/templates/generate/plain/main.tmpl.go b/v2/cmd/wails/internal/commands/initialise/templates/generate/plain/main.go.tmpl similarity index 100% rename from v2/cmd/wails/internal/commands/initialise/templates/generate/plain/main.tmpl.go rename to v2/cmd/wails/internal/commands/initialise/templates/generate/plain/main.go.tmpl diff --git a/v2/cmd/wails/internal/commands/initialise/templates/templates/lit-ts/frontend/wailsjs/runtime/runtime.d.ts b/v2/cmd/wails/internal/commands/initialise/templates/templates/lit-ts/frontend/wailsjs/runtime/runtime.d.ts index 08ada6948..8d816307f 100644 --- a/v2/cmd/wails/internal/commands/initialise/templates/templates/lit-ts/frontend/wailsjs/runtime/runtime.d.ts +++ b/v2/cmd/wails/internal/commands/initialise/templates/templates/lit-ts/frontend/wailsjs/runtime/runtime.d.ts @@ -167,9 +167,9 @@ export function WindowMinimise(): void; // Restores the window to the dimensions and position prior to minimising. export function WindowUnminimise(): void; -// [WindowSetRGBA](https://wails.io/docs/reference/runtime/window#windowsetrgba) +// [WindowSetBackgroundColour](https://wails.io/docs/reference/runtime/window#windowsetbackgroundcolour) // Sets the background colour of the window to the given RGBA colour definition. This colour will show through for all transparent pixels. -export function WindowSetRGBA(R: number, G: number, B: number, A: number): void; +export function WindowSetBackgroundColour(R: number, G: number, B: number, A: number): void; // [BrowserOpenURL](https://wails.io/docs/reference/runtime/browser#browseropenurl) // Opens the given URL in the system browser. diff --git a/v2/cmd/wails/internal/commands/initialise/templates/templates/lit-ts/frontend/wailsjs/runtime/runtime.js b/v2/cmd/wails/internal/commands/initialise/templates/templates/lit-ts/frontend/wailsjs/runtime/runtime.js index 7f13df1ac..73f607ba7 100644 --- a/v2/cmd/wails/internal/commands/initialise/templates/templates/lit-ts/frontend/wailsjs/runtime/runtime.js +++ b/v2/cmd/wails/internal/commands/initialise/templates/templates/lit-ts/frontend/wailsjs/runtime/runtime.js @@ -145,8 +145,8 @@ export function WindowUnminimise() { window.runtime.WindowUnminimise(); } -export function WindowSetRGBA(RGBA) { - window.runtime.WindowSetRGBA(RGBA); +export function WindowSetBackgroundColour(R, G, B, A) { + window.runtime.WindowSetBackgroundColour(R, G, B, A); } export function BrowserOpenURL(url) { diff --git a/v2/cmd/wails/internal/commands/initialise/templates/templates/lit/frontend/wailsjs/runtime/runtime.d.ts b/v2/cmd/wails/internal/commands/initialise/templates/templates/lit/frontend/wailsjs/runtime/runtime.d.ts index 08ada6948..8d816307f 100644 --- a/v2/cmd/wails/internal/commands/initialise/templates/templates/lit/frontend/wailsjs/runtime/runtime.d.ts +++ b/v2/cmd/wails/internal/commands/initialise/templates/templates/lit/frontend/wailsjs/runtime/runtime.d.ts @@ -167,9 +167,9 @@ export function WindowMinimise(): void; // Restores the window to the dimensions and position prior to minimising. export function WindowUnminimise(): void; -// [WindowSetRGBA](https://wails.io/docs/reference/runtime/window#windowsetrgba) +// [WindowSetBackgroundColour](https://wails.io/docs/reference/runtime/window#windowsetbackgroundcolour) // Sets the background colour of the window to the given RGBA colour definition. This colour will show through for all transparent pixels. -export function WindowSetRGBA(R: number, G: number, B: number, A: number): void; +export function WindowSetBackgroundColour(R: number, G: number, B: number, A: number): void; // [BrowserOpenURL](https://wails.io/docs/reference/runtime/browser#browseropenurl) // Opens the given URL in the system browser. diff --git a/v2/cmd/wails/internal/commands/initialise/templates/templates/lit/frontend/wailsjs/runtime/runtime.js b/v2/cmd/wails/internal/commands/initialise/templates/templates/lit/frontend/wailsjs/runtime/runtime.js index 7f13df1ac..73f607ba7 100644 --- a/v2/cmd/wails/internal/commands/initialise/templates/templates/lit/frontend/wailsjs/runtime/runtime.js +++ b/v2/cmd/wails/internal/commands/initialise/templates/templates/lit/frontend/wailsjs/runtime/runtime.js @@ -145,8 +145,8 @@ export function WindowUnminimise() { window.runtime.WindowUnminimise(); } -export function WindowSetRGBA(RGBA) { - window.runtime.WindowSetRGBA(RGBA); +export function WindowSetBackgroundColour(R, G, B, A) { + window.runtime.WindowSetBackgroundColour(R, G, B, A); } export function BrowserOpenURL(url) { diff --git a/v2/cmd/wails/internal/commands/initialise/templates/templates/preact-ts/frontend/wailsjs/runtime/runtime.d.ts b/v2/cmd/wails/internal/commands/initialise/templates/templates/preact-ts/frontend/wailsjs/runtime/runtime.d.ts index 08ada6948..8d816307f 100644 --- a/v2/cmd/wails/internal/commands/initialise/templates/templates/preact-ts/frontend/wailsjs/runtime/runtime.d.ts +++ b/v2/cmd/wails/internal/commands/initialise/templates/templates/preact-ts/frontend/wailsjs/runtime/runtime.d.ts @@ -167,9 +167,9 @@ export function WindowMinimise(): void; // Restores the window to the dimensions and position prior to minimising. export function WindowUnminimise(): void; -// [WindowSetRGBA](https://wails.io/docs/reference/runtime/window#windowsetrgba) +// [WindowSetBackgroundColour](https://wails.io/docs/reference/runtime/window#windowsetbackgroundcolour) // Sets the background colour of the window to the given RGBA colour definition. This colour will show through for all transparent pixels. -export function WindowSetRGBA(R: number, G: number, B: number, A: number): void; +export function WindowSetBackgroundColour(R: number, G: number, B: number, A: number): void; // [BrowserOpenURL](https://wails.io/docs/reference/runtime/browser#browseropenurl) // Opens the given URL in the system browser. diff --git a/v2/cmd/wails/internal/commands/initialise/templates/templates/preact-ts/frontend/wailsjs/runtime/runtime.js b/v2/cmd/wails/internal/commands/initialise/templates/templates/preact-ts/frontend/wailsjs/runtime/runtime.js index 7f13df1ac..73f607ba7 100644 --- a/v2/cmd/wails/internal/commands/initialise/templates/templates/preact-ts/frontend/wailsjs/runtime/runtime.js +++ b/v2/cmd/wails/internal/commands/initialise/templates/templates/preact-ts/frontend/wailsjs/runtime/runtime.js @@ -145,8 +145,8 @@ export function WindowUnminimise() { window.runtime.WindowUnminimise(); } -export function WindowSetRGBA(RGBA) { - window.runtime.WindowSetRGBA(RGBA); +export function WindowSetBackgroundColour(R, G, B, A) { + window.runtime.WindowSetBackgroundColour(R, G, B, A); } export function BrowserOpenURL(url) { diff --git a/v2/cmd/wails/internal/commands/initialise/templates/templates/preact/frontend/wailsjs/runtime/runtime.d.ts b/v2/cmd/wails/internal/commands/initialise/templates/templates/preact/frontend/wailsjs/runtime/runtime.d.ts index 08ada6948..8d816307f 100644 --- a/v2/cmd/wails/internal/commands/initialise/templates/templates/preact/frontend/wailsjs/runtime/runtime.d.ts +++ b/v2/cmd/wails/internal/commands/initialise/templates/templates/preact/frontend/wailsjs/runtime/runtime.d.ts @@ -167,9 +167,9 @@ export function WindowMinimise(): void; // Restores the window to the dimensions and position prior to minimising. export function WindowUnminimise(): void; -// [WindowSetRGBA](https://wails.io/docs/reference/runtime/window#windowsetrgba) +// [WindowSetBackgroundColour](https://wails.io/docs/reference/runtime/window#windowsetbackgroundcolour) // Sets the background colour of the window to the given RGBA colour definition. This colour will show through for all transparent pixels. -export function WindowSetRGBA(R: number, G: number, B: number, A: number): void; +export function WindowSetBackgroundColour(R: number, G: number, B: number, A: number): void; // [BrowserOpenURL](https://wails.io/docs/reference/runtime/browser#browseropenurl) // Opens the given URL in the system browser. diff --git a/v2/cmd/wails/internal/commands/initialise/templates/templates/preact/frontend/wailsjs/runtime/runtime.js b/v2/cmd/wails/internal/commands/initialise/templates/templates/preact/frontend/wailsjs/runtime/runtime.js index 7f13df1ac..73f607ba7 100644 --- a/v2/cmd/wails/internal/commands/initialise/templates/templates/preact/frontend/wailsjs/runtime/runtime.js +++ b/v2/cmd/wails/internal/commands/initialise/templates/templates/preact/frontend/wailsjs/runtime/runtime.js @@ -145,8 +145,8 @@ export function WindowUnminimise() { window.runtime.WindowUnminimise(); } -export function WindowSetRGBA(RGBA) { - window.runtime.WindowSetRGBA(RGBA); +export function WindowSetBackgroundColour(R, G, B, A) { + window.runtime.WindowSetBackgroundColour(R, G, B, A); } export function BrowserOpenURL(url) { diff --git a/v2/cmd/wails/internal/commands/initialise/templates/templates/react-ts/frontend/wailsjs/runtime/runtime.d.ts b/v2/cmd/wails/internal/commands/initialise/templates/templates/react-ts/frontend/wailsjs/runtime/runtime.d.ts index 08ada6948..8d816307f 100644 --- a/v2/cmd/wails/internal/commands/initialise/templates/templates/react-ts/frontend/wailsjs/runtime/runtime.d.ts +++ b/v2/cmd/wails/internal/commands/initialise/templates/templates/react-ts/frontend/wailsjs/runtime/runtime.d.ts @@ -167,9 +167,9 @@ export function WindowMinimise(): void; // Restores the window to the dimensions and position prior to minimising. export function WindowUnminimise(): void; -// [WindowSetRGBA](https://wails.io/docs/reference/runtime/window#windowsetrgba) +// [WindowSetBackgroundColour](https://wails.io/docs/reference/runtime/window#windowsetbackgroundcolour) // Sets the background colour of the window to the given RGBA colour definition. This colour will show through for all transparent pixels. -export function WindowSetRGBA(R: number, G: number, B: number, A: number): void; +export function WindowSetBackgroundColour(R: number, G: number, B: number, A: number): void; // [BrowserOpenURL](https://wails.io/docs/reference/runtime/browser#browseropenurl) // Opens the given URL in the system browser. diff --git a/v2/cmd/wails/internal/commands/initialise/templates/templates/react-ts/frontend/wailsjs/runtime/runtime.js b/v2/cmd/wails/internal/commands/initialise/templates/templates/react-ts/frontend/wailsjs/runtime/runtime.js index 7f13df1ac..73f607ba7 100644 --- a/v2/cmd/wails/internal/commands/initialise/templates/templates/react-ts/frontend/wailsjs/runtime/runtime.js +++ b/v2/cmd/wails/internal/commands/initialise/templates/templates/react-ts/frontend/wailsjs/runtime/runtime.js @@ -145,8 +145,8 @@ export function WindowUnminimise() { window.runtime.WindowUnminimise(); } -export function WindowSetRGBA(RGBA) { - window.runtime.WindowSetRGBA(RGBA); +export function WindowSetBackgroundColour(R, G, B, A) { + window.runtime.WindowSetBackgroundColour(R, G, B, A); } export function BrowserOpenURL(url) { diff --git a/v2/cmd/wails/internal/commands/initialise/templates/templates/react/frontend/wailsjs/runtime/runtime.d.ts b/v2/cmd/wails/internal/commands/initialise/templates/templates/react/frontend/wailsjs/runtime/runtime.d.ts index 08ada6948..8d816307f 100644 --- a/v2/cmd/wails/internal/commands/initialise/templates/templates/react/frontend/wailsjs/runtime/runtime.d.ts +++ b/v2/cmd/wails/internal/commands/initialise/templates/templates/react/frontend/wailsjs/runtime/runtime.d.ts @@ -167,9 +167,9 @@ export function WindowMinimise(): void; // Restores the window to the dimensions and position prior to minimising. export function WindowUnminimise(): void; -// [WindowSetRGBA](https://wails.io/docs/reference/runtime/window#windowsetrgba) +// [WindowSetBackgroundColour](https://wails.io/docs/reference/runtime/window#windowsetbackgroundcolour) // Sets the background colour of the window to the given RGBA colour definition. This colour will show through for all transparent pixels. -export function WindowSetRGBA(R: number, G: number, B: number, A: number): void; +export function WindowSetBackgroundColour(R: number, G: number, B: number, A: number): void; // [BrowserOpenURL](https://wails.io/docs/reference/runtime/browser#browseropenurl) // Opens the given URL in the system browser. diff --git a/v2/cmd/wails/internal/commands/initialise/templates/templates/react/frontend/wailsjs/runtime/runtime.js b/v2/cmd/wails/internal/commands/initialise/templates/templates/react/frontend/wailsjs/runtime/runtime.js index 7f13df1ac..73f607ba7 100644 --- a/v2/cmd/wails/internal/commands/initialise/templates/templates/react/frontend/wailsjs/runtime/runtime.js +++ b/v2/cmd/wails/internal/commands/initialise/templates/templates/react/frontend/wailsjs/runtime/runtime.js @@ -145,8 +145,8 @@ export function WindowUnminimise() { window.runtime.WindowUnminimise(); } -export function WindowSetRGBA(RGBA) { - window.runtime.WindowSetRGBA(RGBA); +export function WindowSetBackgroundColour(R, G, B, A) { + window.runtime.WindowSetBackgroundColour(R, G, B, A); } export function BrowserOpenURL(url) { diff --git a/v2/cmd/wails/internal/commands/initialise/templates/templates/svelte-ts/frontend/wailsjs/runtime/runtime.d.ts b/v2/cmd/wails/internal/commands/initialise/templates/templates/svelte-ts/frontend/wailsjs/runtime/runtime.d.ts index 08ada6948..8d816307f 100644 --- a/v2/cmd/wails/internal/commands/initialise/templates/templates/svelte-ts/frontend/wailsjs/runtime/runtime.d.ts +++ b/v2/cmd/wails/internal/commands/initialise/templates/templates/svelte-ts/frontend/wailsjs/runtime/runtime.d.ts @@ -167,9 +167,9 @@ export function WindowMinimise(): void; // Restores the window to the dimensions and position prior to minimising. export function WindowUnminimise(): void; -// [WindowSetRGBA](https://wails.io/docs/reference/runtime/window#windowsetrgba) +// [WindowSetBackgroundColour](https://wails.io/docs/reference/runtime/window#windowsetbackgroundcolour) // Sets the background colour of the window to the given RGBA colour definition. This colour will show through for all transparent pixels. -export function WindowSetRGBA(R: number, G: number, B: number, A: number): void; +export function WindowSetBackgroundColour(R: number, G: number, B: number, A: number): void; // [BrowserOpenURL](https://wails.io/docs/reference/runtime/browser#browseropenurl) // Opens the given URL in the system browser. diff --git a/v2/cmd/wails/internal/commands/initialise/templates/templates/svelte-ts/frontend/wailsjs/runtime/runtime.js b/v2/cmd/wails/internal/commands/initialise/templates/templates/svelte-ts/frontend/wailsjs/runtime/runtime.js index 7f13df1ac..73f607ba7 100644 --- a/v2/cmd/wails/internal/commands/initialise/templates/templates/svelte-ts/frontend/wailsjs/runtime/runtime.js +++ b/v2/cmd/wails/internal/commands/initialise/templates/templates/svelte-ts/frontend/wailsjs/runtime/runtime.js @@ -145,8 +145,8 @@ export function WindowUnminimise() { window.runtime.WindowUnminimise(); } -export function WindowSetRGBA(RGBA) { - window.runtime.WindowSetRGBA(RGBA); +export function WindowSetBackgroundColour(R, G, B, A) { + window.runtime.WindowSetBackgroundColour(R, G, B, A); } export function BrowserOpenURL(url) { diff --git a/v2/cmd/wails/internal/commands/initialise/templates/templates/svelte/frontend/wailsjs/runtime/runtime.d.ts b/v2/cmd/wails/internal/commands/initialise/templates/templates/svelte/frontend/wailsjs/runtime/runtime.d.ts index 08ada6948..8d816307f 100644 --- a/v2/cmd/wails/internal/commands/initialise/templates/templates/svelte/frontend/wailsjs/runtime/runtime.d.ts +++ b/v2/cmd/wails/internal/commands/initialise/templates/templates/svelte/frontend/wailsjs/runtime/runtime.d.ts @@ -167,9 +167,9 @@ export function WindowMinimise(): void; // Restores the window to the dimensions and position prior to minimising. export function WindowUnminimise(): void; -// [WindowSetRGBA](https://wails.io/docs/reference/runtime/window#windowsetrgba) +// [WindowSetBackgroundColour](https://wails.io/docs/reference/runtime/window#windowsetbackgroundcolour) // Sets the background colour of the window to the given RGBA colour definition. This colour will show through for all transparent pixels. -export function WindowSetRGBA(R: number, G: number, B: number, A: number): void; +export function WindowSetBackgroundColour(R: number, G: number, B: number, A: number): void; // [BrowserOpenURL](https://wails.io/docs/reference/runtime/browser#browseropenurl) // Opens the given URL in the system browser. diff --git a/v2/cmd/wails/internal/commands/initialise/templates/templates/svelte/frontend/wailsjs/runtime/runtime.js b/v2/cmd/wails/internal/commands/initialise/templates/templates/svelte/frontend/wailsjs/runtime/runtime.js index 7f13df1ac..73f607ba7 100644 --- a/v2/cmd/wails/internal/commands/initialise/templates/templates/svelte/frontend/wailsjs/runtime/runtime.js +++ b/v2/cmd/wails/internal/commands/initialise/templates/templates/svelte/frontend/wailsjs/runtime/runtime.js @@ -145,8 +145,8 @@ export function WindowUnminimise() { window.runtime.WindowUnminimise(); } -export function WindowSetRGBA(RGBA) { - window.runtime.WindowSetRGBA(RGBA); +export function WindowSetBackgroundColour(R, G, B, A) { + window.runtime.WindowSetBackgroundColour(R, G, B, A); } export function BrowserOpenURL(url) { diff --git a/v2/cmd/wails/internal/commands/initialise/templates/templates/vanilla-ts/frontend/wailsjs/runtime/runtime.d.ts b/v2/cmd/wails/internal/commands/initialise/templates/templates/vanilla-ts/frontend/wailsjs/runtime/runtime.d.ts index 08ada6948..8d816307f 100644 --- a/v2/cmd/wails/internal/commands/initialise/templates/templates/vanilla-ts/frontend/wailsjs/runtime/runtime.d.ts +++ b/v2/cmd/wails/internal/commands/initialise/templates/templates/vanilla-ts/frontend/wailsjs/runtime/runtime.d.ts @@ -167,9 +167,9 @@ export function WindowMinimise(): void; // Restores the window to the dimensions and position prior to minimising. export function WindowUnminimise(): void; -// [WindowSetRGBA](https://wails.io/docs/reference/runtime/window#windowsetrgba) +// [WindowSetBackgroundColour](https://wails.io/docs/reference/runtime/window#windowsetbackgroundcolour) // Sets the background colour of the window to the given RGBA colour definition. This colour will show through for all transparent pixels. -export function WindowSetRGBA(R: number, G: number, B: number, A: number): void; +export function WindowSetBackgroundColour(R: number, G: number, B: number, A: number): void; // [BrowserOpenURL](https://wails.io/docs/reference/runtime/browser#browseropenurl) // Opens the given URL in the system browser. diff --git a/v2/cmd/wails/internal/commands/initialise/templates/templates/vanilla-ts/frontend/wailsjs/runtime/runtime.js b/v2/cmd/wails/internal/commands/initialise/templates/templates/vanilla-ts/frontend/wailsjs/runtime/runtime.js index 7f13df1ac..73f607ba7 100644 --- a/v2/cmd/wails/internal/commands/initialise/templates/templates/vanilla-ts/frontend/wailsjs/runtime/runtime.js +++ b/v2/cmd/wails/internal/commands/initialise/templates/templates/vanilla-ts/frontend/wailsjs/runtime/runtime.js @@ -145,8 +145,8 @@ export function WindowUnminimise() { window.runtime.WindowUnminimise(); } -export function WindowSetRGBA(RGBA) { - window.runtime.WindowSetRGBA(RGBA); +export function WindowSetBackgroundColour(R, G, B, A) { + window.runtime.WindowSetBackgroundColour(R, G, B, A); } export function BrowserOpenURL(url) { diff --git a/v2/cmd/wails/internal/commands/initialise/templates/templates/vanilla/frontend/wailsjs/runtime/runtime.d.ts b/v2/cmd/wails/internal/commands/initialise/templates/templates/vanilla/frontend/wailsjs/runtime/runtime.d.ts index 08ada6948..8d816307f 100644 --- a/v2/cmd/wails/internal/commands/initialise/templates/templates/vanilla/frontend/wailsjs/runtime/runtime.d.ts +++ b/v2/cmd/wails/internal/commands/initialise/templates/templates/vanilla/frontend/wailsjs/runtime/runtime.d.ts @@ -167,9 +167,9 @@ export function WindowMinimise(): void; // Restores the window to the dimensions and position prior to minimising. export function WindowUnminimise(): void; -// [WindowSetRGBA](https://wails.io/docs/reference/runtime/window#windowsetrgba) +// [WindowSetBackgroundColour](https://wails.io/docs/reference/runtime/window#windowsetbackgroundcolour) // Sets the background colour of the window to the given RGBA colour definition. This colour will show through for all transparent pixels. -export function WindowSetRGBA(R: number, G: number, B: number, A: number): void; +export function WindowSetBackgroundColour(R: number, G: number, B: number, A: number): void; // [BrowserOpenURL](https://wails.io/docs/reference/runtime/browser#browseropenurl) // Opens the given URL in the system browser. diff --git a/v2/cmd/wails/internal/commands/initialise/templates/templates/vanilla/frontend/wailsjs/runtime/runtime.js b/v2/cmd/wails/internal/commands/initialise/templates/templates/vanilla/frontend/wailsjs/runtime/runtime.js index 7f13df1ac..73f607ba7 100644 --- a/v2/cmd/wails/internal/commands/initialise/templates/templates/vanilla/frontend/wailsjs/runtime/runtime.js +++ b/v2/cmd/wails/internal/commands/initialise/templates/templates/vanilla/frontend/wailsjs/runtime/runtime.js @@ -145,8 +145,8 @@ export function WindowUnminimise() { window.runtime.WindowUnminimise(); } -export function WindowSetRGBA(RGBA) { - window.runtime.WindowSetRGBA(RGBA); +export function WindowSetBackgroundColour(R, G, B, A) { + window.runtime.WindowSetBackgroundColour(R, G, B, A); } export function BrowserOpenURL(url) { diff --git a/v2/cmd/wails/internal/commands/initialise/templates/templates/vue-ts/frontend/wailsjs/runtime/runtime.d.ts b/v2/cmd/wails/internal/commands/initialise/templates/templates/vue-ts/frontend/wailsjs/runtime/runtime.d.ts index 08ada6948..8d816307f 100644 --- a/v2/cmd/wails/internal/commands/initialise/templates/templates/vue-ts/frontend/wailsjs/runtime/runtime.d.ts +++ b/v2/cmd/wails/internal/commands/initialise/templates/templates/vue-ts/frontend/wailsjs/runtime/runtime.d.ts @@ -167,9 +167,9 @@ export function WindowMinimise(): void; // Restores the window to the dimensions and position prior to minimising. export function WindowUnminimise(): void; -// [WindowSetRGBA](https://wails.io/docs/reference/runtime/window#windowsetrgba) +// [WindowSetBackgroundColour](https://wails.io/docs/reference/runtime/window#windowsetbackgroundcolour) // Sets the background colour of the window to the given RGBA colour definition. This colour will show through for all transparent pixels. -export function WindowSetRGBA(R: number, G: number, B: number, A: number): void; +export function WindowSetBackgroundColour(R: number, G: number, B: number, A: number): void; // [BrowserOpenURL](https://wails.io/docs/reference/runtime/browser#browseropenurl) // Opens the given URL in the system browser. diff --git a/v2/cmd/wails/internal/commands/initialise/templates/templates/vue-ts/frontend/wailsjs/runtime/runtime.js b/v2/cmd/wails/internal/commands/initialise/templates/templates/vue-ts/frontend/wailsjs/runtime/runtime.js index 7f13df1ac..73f607ba7 100644 --- a/v2/cmd/wails/internal/commands/initialise/templates/templates/vue-ts/frontend/wailsjs/runtime/runtime.js +++ b/v2/cmd/wails/internal/commands/initialise/templates/templates/vue-ts/frontend/wailsjs/runtime/runtime.js @@ -145,8 +145,8 @@ export function WindowUnminimise() { window.runtime.WindowUnminimise(); } -export function WindowSetRGBA(RGBA) { - window.runtime.WindowSetRGBA(RGBA); +export function WindowSetBackgroundColour(R, G, B, A) { + window.runtime.WindowSetBackgroundColour(R, G, B, A); } export function BrowserOpenURL(url) { diff --git a/v2/cmd/wails/internal/commands/initialise/templates/templates/vue/frontend/wailsjs/runtime/runtime.d.ts b/v2/cmd/wails/internal/commands/initialise/templates/templates/vue/frontend/wailsjs/runtime/runtime.d.ts index 08ada6948..8d816307f 100644 --- a/v2/cmd/wails/internal/commands/initialise/templates/templates/vue/frontend/wailsjs/runtime/runtime.d.ts +++ b/v2/cmd/wails/internal/commands/initialise/templates/templates/vue/frontend/wailsjs/runtime/runtime.d.ts @@ -167,9 +167,9 @@ export function WindowMinimise(): void; // Restores the window to the dimensions and position prior to minimising. export function WindowUnminimise(): void; -// [WindowSetRGBA](https://wails.io/docs/reference/runtime/window#windowsetrgba) +// [WindowSetBackgroundColour](https://wails.io/docs/reference/runtime/window#windowsetbackgroundcolour) // Sets the background colour of the window to the given RGBA colour definition. This colour will show through for all transparent pixels. -export function WindowSetRGBA(R: number, G: number, B: number, A: number): void; +export function WindowSetBackgroundColour(R: number, G: number, B: number, A: number): void; // [BrowserOpenURL](https://wails.io/docs/reference/runtime/browser#browseropenurl) // Opens the given URL in the system browser. diff --git a/v2/cmd/wails/internal/commands/initialise/templates/templates/vue/frontend/wailsjs/runtime/runtime.js b/v2/cmd/wails/internal/commands/initialise/templates/templates/vue/frontend/wailsjs/runtime/runtime.js index 7f13df1ac..73f607ba7 100644 --- a/v2/cmd/wails/internal/commands/initialise/templates/templates/vue/frontend/wailsjs/runtime/runtime.js +++ b/v2/cmd/wails/internal/commands/initialise/templates/templates/vue/frontend/wailsjs/runtime/runtime.js @@ -145,8 +145,8 @@ export function WindowUnminimise() { window.runtime.WindowUnminimise(); } -export function WindowSetRGBA(RGBA) { - window.runtime.WindowSetRGBA(RGBA); +export function WindowSetBackgroundColour(R, G, B, A) { + window.runtime.WindowSetBackgroundColour(R, G, B, A); } export function BrowserOpenURL(url) { diff --git a/v2/go.mod b/v2/go.mod index 039cae5a7..2d227c31f 100644 --- a/v2/go.mod +++ b/v2/go.mod @@ -9,7 +9,7 @@ require ( github.com/go-git/go-billy/v5 v5.2.0 // indirect github.com/go-git/go-git/v5 v5.3.0 github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510 - github.com/google/uuid v1.1.2 // indirect + github.com/google/uuid v1.1.2 github.com/imdario/mergo v0.3.12 github.com/jackmordaunt/icns v1.0.0 github.com/jchv/go-winloader v0.0.0-20210711035445-715c2860da7e @@ -37,15 +37,17 @@ require ( golang.org/x/tools v0.1.0 ) -require github.com/bitfield/script v0.19.0 +require ( + github.com/bep/debounce v1.2.1 + github.com/bitfield/script v0.19.0 + github.com/go-ole/go-ole v1.2.6 +) require ( bitbucket.org/creachadair/shell v0.0.7 // indirect github.com/Microsoft/go-winio v0.4.16 // indirect - github.com/bep/debounce v1.2.1 // indirect github.com/emirpasic/gods v1.12.0 // indirect github.com/go-git/gcfg v1.5.0 // indirect - github.com/go-ole/go-ole v1.2.6 // indirect github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99 // indirect github.com/kevinburke/ssh_config v0.0.0-20201106050909-4977a11b4351 // indirect github.com/kr/pretty v0.3.0 // indirect diff --git a/v2/go.sum b/v2/go.sum index 8af980589..b9b91b1b8 100644 --- a/v2/go.sum +++ b/v2/go.sum @@ -38,7 +38,6 @@ github.com/go-git/go-git-fixtures/v4 v4.0.2-0.20200613231340-f56387b50c12 h1:PbK github.com/go-git/go-git-fixtures/v4 v4.0.2-0.20200613231340-f56387b50c12/go.mod h1:m+ICp2rF3jDhFgEZ/8yziagdT1C+ZpZcrJjappBCDSw= github.com/go-git/go-git/v5 v5.3.0 h1:8WKMtJR2j8RntEXR/uvTKagfEt4GYlwQ7mntE4+0GWc= github.com/go-git/go-git/v5 v5.3.0/go.mod h1:xdX4bWJ48aOrdhnl2XqHYstHbbp6+LFS4r4X+lNVprw= -github.com/go-ole/go-ole v1.2.4/go.mod h1:XCwSNxSkXRo4vlyPy93sltvi/qJq0jqQhjqQNIwKuxM= github.com/go-ole/go-ole v1.2.6 h1:/Fpf6oFPoeFik9ty7siob0G6Ke8QvQEuVcuChpwXzpY= github.com/go-ole/go-ole v1.2.6/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0= github.com/golang-jwt/jwt v3.2.2+incompatible/go.mod h1:8pz2t5EyA70fFQQSrl6XZXzqecmYZeUEB8OUGHkxJ+I= @@ -48,7 +47,6 @@ github.com/google/go-cmp v0.5.7 h1:81/ik6ipDQS2aGcBfIN5dHDB36BwrStyeAQquSYCV4o= github.com/google/go-cmp v0.5.7/go.mod h1:n+brtR0CgQNWTVd5ZUFpTBC8YFBDLK/h/bpaJ8/DtOE= github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510 h1:El6M4kTTCOh6aBiKaUGG7oYTSPP8MxqL4YI3kZKwcP4= github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510/go.mod h1:pupxD2MaaD3pAXIBCelhxNneeOaAeabZDe5s4K6zSpQ= -github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.1.2 h1:EVhdT+1Kseyi1/pUmXKaFxYsDNy9RQYkMWRH68J/W7Y= github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/imdario/mergo v0.3.12 h1:b6R2BslTbIEToALKP7LxUvijTsNI9TAe80pLWN2g/HU= diff --git a/v2/internal/appng/app_default_darwin.go b/v2/internal/appng/app_default_darwin.go index fb40af694..9976a2595 100644 --- a/v2/internal/appng/app_default_darwin.go +++ b/v2/internal/appng/app_default_darwin.go @@ -16,6 +16,8 @@ func (a *App) Run() error { return nil } +func (a *App) Shutdown() {} + // CreateApp creates the app! func CreateApp(_ *options.App) (*App, error) { return nil, fmt.Errorf(`Wails applications will not build without the correct build tags.`) diff --git a/v2/internal/appng/app_default_linux.go b/v2/internal/appng/app_default_linux.go index 257230e11..cbd566337 100644 --- a/v2/internal/appng/app_default_linux.go +++ b/v2/internal/appng/app_default_linux.go @@ -16,6 +16,8 @@ func (a *App) Run() error { return nil } +func (a *App) Shutdown() {} + // CreateApp creates the app! func CreateApp(_ *options.App) (*App, error) { return nil, fmt.Errorf(`Wails applications will not build without the correct build tags.`) diff --git a/v2/internal/appng/app_default_windows.go b/v2/internal/appng/app_default_windows.go index cf70cef90..e3388b91f 100644 --- a/v2/internal/appng/app_default_windows.go +++ b/v2/internal/appng/app_default_windows.go @@ -17,6 +17,8 @@ func (a *App) Run() error { return nil } +func (a *App) Shutdown() {} + // CreateApp creates the app! func CreateApp(_ *options.App) (*App, error) { result := w32.MessageBox(0, diff --git a/v2/internal/frontend/desktop/darwin/Application.h b/v2/internal/frontend/desktop/darwin/Application.h index 606778765..d61fd6395 100644 --- a/v2/internal/frontend/desktop/darwin/Application.h +++ b/v2/internal/frontend/desktop/darwin/Application.h @@ -36,7 +36,7 @@ void Maximise(void* ctx); void UnMaximise(void* ctx); void Hide(void* ctx); void Show(void* ctx); -void SetRGBA(void* ctx, int r, int g, int b, int a); +void SetBackgroundColour(void* ctx, int r, int g, int b, int a); void ExecJS(void* ctx, const char*); void Quit(void*); diff --git a/v2/internal/frontend/desktop/darwin/Application.m b/v2/internal/frontend/desktop/darwin/Application.m index 05f79d9d2..6673d07c5 100644 --- a/v2/internal/frontend/desktop/darwin/Application.m +++ b/v2/internal/frontend/desktop/darwin/Application.m @@ -81,10 +81,10 @@ void SetTitle(void* inctx, const char *title) { } -void SetRGBA(void *inctx, int r, int g, int b, int a) { +void SetBackgroundColour(void *inctx, int r, int g, int b, int a) { WailsContext *ctx = (__bridge WailsContext*) inctx; ON_MAIN_THREAD( - [ctx SetRGBA:r :g :b :a]; + [ctx SetBackgroundColour:r :g :b :a]; ); } diff --git a/v2/internal/frontend/desktop/darwin/WailsContext.h b/v2/internal/frontend/desktop/darwin/WailsContext.h index b550703d9..8982615d5 100644 --- a/v2/internal/frontend/desktop/darwin/WailsContext.h +++ b/v2/internal/frontend/desktop/darwin/WailsContext.h @@ -70,7 +70,7 @@ - (void) Maximise; - (void) ToggleMaximise; - (void) UnMaximise; -- (void) SetRGBA:(int)r :(int)g :(int)b :(int)a; +- (void) SetBackgroundColour:(int)r :(int)g :(int)b :(int)a; - (void) HideMouse; - (void) ShowMouse; - (void) Hide; diff --git a/v2/internal/frontend/desktop/darwin/WailsContext.m b/v2/internal/frontend/desktop/darwin/WailsContext.m index 484ffea43..cc92902e0 100644 --- a/v2/internal/frontend/desktop/darwin/WailsContext.m +++ b/v2/internal/frontend/desktop/darwin/WailsContext.m @@ -299,7 +299,7 @@ [self.webview loadRequest:wkRequest]; } -- (void) SetRGBA:(int)r :(int)g :(int)b :(int)a { +- (void) SetBackgroundColour:(int)r :(int)g :(int)b :(int)a { float red = r/255.0; float green = g/255.0; float blue = b/255.0; diff --git a/v2/internal/frontend/desktop/darwin/frontend.go b/v2/internal/frontend/desktop/darwin/frontend.go index 6a1c9270d..bdf5fd9d6 100644 --- a/v2/internal/frontend/desktop/darwin/frontend.go +++ b/v2/internal/frontend/desktop/darwin/frontend.go @@ -217,11 +217,11 @@ func (f *Frontend) WindowSetMaxSize(width int, height int) { f.mainWindow.SetMaxSize(width, height) } -func (f *Frontend) WindowSetRGBA(col *options.RGBA) { +func (f *Frontend) WindowSetBackgroundColour(col *options.RGBA) { if col == nil { return } - f.mainWindow.SetRGBA(col.R, col.G, col.B, col.A) + f.mainWindow.SetBackgroundColour(col.R, col.G, col.B, col.A) } func (f *Frontend) Quit() { diff --git a/v2/internal/frontend/desktop/darwin/main.m b/v2/internal/frontend/desktop/darwin/main.m index f7b0f62f0..154c33065 100644 --- a/v2/internal/frontend/desktop/darwin/main.m +++ b/v2/internal/frontend/desktop/darwin/main.m @@ -220,7 +220,7 @@ int main(int argc, const char * argv[]) { int startsHidden = 0; WailsContext *result = Create("OI OI!",400,400, frameless, resizable, fullscreen, fullSizeContent, hideTitleBar, titlebarAppearsTransparent, hideTitle, useToolbar, hideToolbarSeparator, webviewIsTransparent, alwaysOnTop, hideWindowOnClose, appearance, windowIsTranslucent, debug, windowStartState, startsHidden, 400, 400, 600, 600); - SetRGBA(result, 255, 0, 0, 255); + SetBackgroundColour(result, 255, 0, 0, 255); void *m = NewMenu(""); SetAbout(result, "Fake title", "I am a description", _Users_username_Pictures_SaltBae_png, _Users_username_Pictures_SaltBae_png_len); // AddMenuByRole(result, 1); diff --git a/v2/internal/frontend/desktop/darwin/window.go b/v2/internal/frontend/desktop/darwin/window.go index 52fb4663d..cbb79c325 100644 --- a/v2/internal/frontend/desktop/darwin/window.go +++ b/v2/internal/frontend/desktop/darwin/window.go @@ -93,7 +93,7 @@ func NewWindow(frontendOptions *options.App, debugMode bool) *Window { } if frontendOptions.BackgroundColour != nil { - result.SetRGBA(frontendOptions.BackgroundColour.R, frontendOptions.BackgroundColour.G, frontendOptions.BackgroundColour.B, frontendOptions.BackgroundColour.A) + result.SetBackgroundColour(frontendOptions.BackgroundColour.R, frontendOptions.BackgroundColour.G, frontendOptions.BackgroundColour.B, frontendOptions.BackgroundColour.A) } if frontendOptions.Mac != nil && frontendOptions.Mac.About != nil { @@ -129,8 +129,8 @@ func (w *Window) Quit() { C.Quit(w.context) } -func (w *Window) SetRGBA(r uint8, g uint8, b uint8, a uint8) { - C.SetRGBA(w.context, C.int(r), C.int(g), C.int(b), C.int(a)) +func (w *Window) SetBackgroundColour(r uint8, g uint8, b uint8, a uint8) { + C.SetBackgroundColour(w.context, C.int(r), C.int(g), C.int(b), C.int(a)) } func (w *Window) ExecJS(js string) { diff --git a/v2/internal/frontend/desktop/linux/frontend.go b/v2/internal/frontend/desktop/linux/frontend.go index edb54c51e..c3cb1cbb8 100644 --- a/v2/internal/frontend/desktop/linux/frontend.go +++ b/v2/internal/frontend/desktop/linux/frontend.go @@ -209,11 +209,11 @@ func (f *Frontend) WindowSetMaxSize(width int, height int) { f.mainWindow.SetMaxSize(width, height) } -func (f *Frontend) WindowSetRGBA(col *options.RGBA) { +func (f *Frontend) WindowSetBackgroundColour(col *options.RGBA) { if col == nil { return } - f.mainWindow.SetRGBA(col.R, col.G, col.B, col.A) + f.mainWindow.SetBackgroundColour(col.R, col.G, col.B, col.A) } func (f *Frontend) Quit() { diff --git a/v2/internal/frontend/desktop/linux/window.go b/v2/internal/frontend/desktop/linux/window.go index 1bce2acb9..78262e81c 100644 --- a/v2/internal/frontend/desktop/linux/window.go +++ b/v2/internal/frontend/desktop/linux/window.go @@ -433,7 +433,7 @@ typedef struct RGBAOptions { void *webview; } RGBAOptions; -void setRGBA(void* data) { +void setBackgroundColour(void* data) { RGBAOptions* options = (RGBAOptions*)data; GdkRGBA colour = {options->r / 255.0, options->g / 255.0, options->b / 255.0, options->a / 255.0}; webkit_web_view_set_background_color(WEBKIT_WEB_VIEW(options->webview), &colour); @@ -638,7 +638,7 @@ func NewWindow(appoptions *options.App, debug bool) *Window { // Set background colour RGBA := appoptions.BackgroundColour - result.SetRGBA(RGBA.R, RGBA.G, RGBA.B, RGBA.A) + result.SetBackgroundColour(RGBA.R, RGBA.G, RGBA.B, RGBA.A) // Setup window result.SetKeepAbove(appoptions.AlwaysOnTop) @@ -779,7 +779,7 @@ func (w *Window) IsMaximised() bool { return result > 0 } -func (w *Window) SetRGBA(r uint8, g uint8, b uint8, a uint8) { +func (w *Window) SetBackgroundColour(r uint8, g uint8, b uint8, a uint8) { data := C.RGBAOptions{ r: C.uchar(r), g: C.uchar(g), @@ -787,7 +787,7 @@ func (w *Window) SetRGBA(r uint8, g uint8, b uint8, a uint8) { a: C.uchar(a), webview: w.webview, } - invokeOnMainThread(func() { C.setRGBA(unsafe.Pointer(&data)) }) + invokeOnMainThread(func() { C.setBackgroundColour(unsafe.Pointer(&data)) }) } diff --git a/v2/internal/frontend/desktop/windows/frontend.go b/v2/internal/frontend/desktop/windows/frontend.go index 16d9b6e81..276db118d 100644 --- a/v2/internal/frontend/desktop/windows/frontend.go +++ b/v2/internal/frontend/desktop/windows/frontend.go @@ -307,7 +307,7 @@ func (f *Frontend) WindowSetMaxSize(width int, height int) { f.mainWindow.SetMaxSize(width, height) } -func (f *Frontend) WindowSetRGBA(col *options.RGBA) { +func (f *Frontend) WindowSetBackgroundColour(col *options.RGBA) { if col == nil { return } @@ -399,7 +399,7 @@ func (f *Frontend) setupChromium() { onFocus.Bind(f.onFocus) // Set background colour - f.WindowSetRGBA(f.frontendOptions.BackgroundColour) + f.WindowSetBackgroundColour(f.frontendOptions.BackgroundColour) chromium.SetGlobalPermission(edge.CoreWebView2PermissionStateAllow) chromium.AddWebResourceRequestedFilter("*", edge.COREWEBVIEW2_WEB_RESOURCE_CONTEXT_ALL) diff --git a/v2/internal/frontend/devserver/devserver.go b/v2/internal/frontend/devserver/devserver.go index 937617cdd..1198183ef 100644 --- a/v2/internal/frontend/devserver/devserver.go +++ b/v2/internal/frontend/devserver/devserver.go @@ -243,8 +243,8 @@ func (d *DevWebServer) WindowUnfullscreen() { d.desktopFrontend.WindowUnfullscreen() } -func (d *DevWebServer) WindowSetRGBA(col *options.RGBA) { - d.desktopFrontend.WindowSetRGBA(col) +func (d *DevWebServer) WindowSetBackgroundColour(col *options.RGBA) { + d.desktopFrontend.WindowSetBackgroundColour(col) } func (d *DevWebServer) MenuSetApplicationMenu(menu *menu.Menu) { diff --git a/v2/internal/frontend/dispatcher/window.go b/v2/internal/frontend/dispatcher/window.go index dc34edb15..7e136e069 100644 --- a/v2/internal/frontend/dispatcher/window.go +++ b/v2/internal/frontend/dispatcher/window.go @@ -70,7 +70,7 @@ func (d *Dispatcher) processWindowMessage(message string, sender frontend.Fronte if err != nil { return "", err } - go sender.WindowSetRGBA(&rgba) + go sender.WindowSetBackgroundColour(&rgba) case 'M': go sender.WindowMaximise() case 't': diff --git a/v2/internal/frontend/frontend.go b/v2/internal/frontend/frontend.go index cdee6c645..4e2da2b27 100644 --- a/v2/internal/frontend/frontend.go +++ b/v2/internal/frontend/frontend.go @@ -86,7 +86,7 @@ type Frontend interface { WindowSetMaxSize(width int, height int) WindowFullscreen() WindowUnfullscreen() - WindowSetRGBA(col *options.RGBA) + WindowSetBackgroundColour(col *options.RGBA) WindowReload() WindowReloadApp() WindowSetSystemDefaultTheme() diff --git a/v2/internal/frontend/runtime/desktop/window.js b/v2/internal/frontend/runtime/desktop/window.js index 9283a522b..41e4d6704 100644 --- a/v2/internal/frontend/runtime/desktop/window.js +++ b/v2/internal/frontend/runtime/desktop/window.js @@ -11,7 +11,7 @@ The electron alternative for Go /* jshint esversion: 9 */ -import { Call } from "./calls"; +import {Call} from "./calls"; export function WindowReload() { window.location.reload(); @@ -213,7 +213,6 @@ export function WindowUnminimise() { window.WailsInvoke('Wu'); } - /** * Sets the background colour of the window * @@ -223,8 +222,8 @@ export function WindowUnminimise() { * @param {number} B Blue * @param {number} A Alpha */ -export function WindowSetRGBA(R, G, B, A) { - let rgba = JSON.stringify({ r: R || 0, g: G || 0, b: B || 0, a: A || 255 }); +export function WindowSetBackgroundColour(R, G, B, A) { + let rgba = JSON.stringify({r: R || 0, g: G || 0, b: B || 0, a: A || 255}); window.WailsInvoke('Wr:' + rgba); } diff --git a/v2/internal/frontend/runtime/runtime_dev_desktop.js b/v2/internal/frontend/runtime/runtime_dev_desktop.js index 8f0062d20..21dce7d18 100644 --- a/v2/internal/frontend/runtime/runtime_dev_desktop.js +++ b/v2/internal/frontend/runtime/runtime_dev_desktop.js @@ -237,12 +237,12 @@ WindowReload: () => WindowReload, WindowReloadApp: () => WindowReloadApp, WindowSetAlwaysOnTop: () => WindowSetAlwaysOnTop, + WindowSetBackgroundColour: () => WindowSetBackgroundColour, WindowSetDarkTheme: () => WindowSetDarkTheme, WindowSetLightTheme: () => WindowSetLightTheme, WindowSetMaxSize: () => WindowSetMaxSize, WindowSetMinSize: () => WindowSetMinSize, WindowSetPosition: () => WindowSetPosition, - WindowSetRGBA: () => WindowSetRGBA, WindowSetSize: () => WindowSetSize, WindowSetSystemDefaultTheme: () => WindowSetSystemDefaultTheme, WindowSetTitle: () => WindowSetTitle, @@ -309,20 +309,25 @@ function WindowMaximise() { window.WailsInvoke("WM"); } + function WindowToggleMaximise() { window.WailsInvoke("Wt"); } + function WindowUnmaximise() { window.WailsInvoke("WU"); } + function WindowMinimise() { window.WailsInvoke("Wm"); } + function WindowUnminimise() { window.WailsInvoke("Wu"); } - function WindowSetRGBA(R, G, B, A) { - let rgba = JSON.stringify({ r: R || 0, g: G || 0, b: B || 0, a: A || 255 }); + + function WindowSetBackgroundColour(R, G, B, A) { + let rgba = JSON.stringify({r: R || 0, g: G || 0, b: B || 0, a: A || 255}); window.WailsInvoke("Wr:" + rgba); } @@ -331,6 +336,7 @@ __export(browser_exports, { BrowserOpenURL: () => BrowserOpenURL }); + function BrowserOpenURL(url) { window.WailsInvoke("BO:" + url); } @@ -450,4 +456,4 @@ } }); })(); -//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiZGVza3RvcC9sb2cuanMiLCAiZGVza3RvcC9ldmVudHMuanMiLCAiZGVza3RvcC9jYWxscy5qcyIsICJkZXNrdG9wL2JpbmRpbmdzLmpzIiwgImRlc2t0b3Avd2luZG93LmpzIiwgImRlc2t0b3AvYnJvd3Nlci5qcyIsICJkZXNrdG9wL21haW4uanMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qXHJcbiBfICAgICAgIF9fICAgICAgXyBfX1xyXG58IHwgICAgIC8gL19fXyBfKF8pIC9fX19fXHJcbnwgfCAvfCAvIC8gX18gYC8gLyAvIF9fXy9cclxufCB8LyB8LyAvIC9fLyAvIC8gKF9fICApXHJcbnxfXy98X18vXFxfXyxfL18vXy9fX19fL1xyXG5UaGUgZWxlY3Ryb24gYWx0ZXJuYXRpdmUgZm9yIEdvXHJcbihjKSBMZWEgQW50aG9ueSAyMDE5LXByZXNlbnRcclxuKi9cclxuXHJcbi8qIGpzaGludCBlc3ZlcnNpb246IDYgKi9cclxuXHJcbi8qKlxyXG4gKiBTZW5kcyBhIGxvZyBtZXNzYWdlIHRvIHRoZSBiYWNrZW5kIHdpdGggdGhlIGdpdmVuIGxldmVsICsgbWVzc2FnZVxyXG4gKlxyXG4gKiBAcGFyYW0ge3N0cmluZ30gbGV2ZWxcclxuICogQHBhcmFtIHtzdHJpbmd9IG1lc3NhZ2VcclxuICovXHJcbmZ1bmN0aW9uIHNlbmRMb2dNZXNzYWdlKGxldmVsLCBtZXNzYWdlKSB7XHJcblxyXG5cdC8vIExvZyBNZXNzYWdlIGZvcm1hdDpcclxuXHQvLyBsW3R5cGVdW21lc3NhZ2VdXHJcblx0d2luZG93LldhaWxzSW52b2tlKCdMJyArIGxldmVsICsgbWVzc2FnZSk7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBMb2cgdGhlIGdpdmVuIHRyYWNlIG1lc3NhZ2Ugd2l0aCB0aGUgYmFja2VuZFxyXG4gKlxyXG4gKiBAZXhwb3J0XHJcbiAqIEBwYXJhbSB7c3RyaW5nfSBtZXNzYWdlXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gTG9nVHJhY2UobWVzc2FnZSkge1xyXG5cdHNlbmRMb2dNZXNzYWdlKCdUJywgbWVzc2FnZSk7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBMb2cgdGhlIGdpdmVuIG1lc3NhZ2Ugd2l0aCB0aGUgYmFja2VuZFxyXG4gKlxyXG4gKiBAZXhwb3J0XHJcbiAqIEBwYXJhbSB7c3RyaW5nfSBtZXNzYWdlXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gTG9nUHJpbnQobWVzc2FnZSkge1xyXG5cdHNlbmRMb2dNZXNzYWdlKCdQJywgbWVzc2FnZSk7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBMb2cgdGhlIGdpdmVuIGRlYnVnIG1lc3NhZ2Ugd2l0aCB0aGUgYmFja2VuZFxyXG4gKlxyXG4gKiBAZXhwb3J0XHJcbiAqIEBwYXJhbSB7c3RyaW5nfSBtZXNzYWdlXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gTG9nRGVidWcobWVzc2FnZSkge1xyXG5cdHNlbmRMb2dNZXNzYWdlKCdEJywgbWVzc2FnZSk7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBMb2cgdGhlIGdpdmVuIGluZm8gbWVzc2FnZSB3aXRoIHRoZSBiYWNrZW5kXHJcbiAqXHJcbiAqIEBleHBvcnRcclxuICogQHBhcmFtIHtzdHJpbmd9IG1lc3NhZ2VcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBMb2dJbmZvKG1lc3NhZ2UpIHtcclxuXHRzZW5kTG9nTWVzc2FnZSgnSScsIG1lc3NhZ2UpO1xyXG59XHJcblxyXG4vKipcclxuICogTG9nIHRoZSBnaXZlbiB3YXJuaW5nIG1lc3NhZ2Ugd2l0aCB0aGUgYmFja2VuZFxyXG4gKlxyXG4gKiBAZXhwb3J0XHJcbiAqIEBwYXJhbSB7c3RyaW5nfSBtZXNzYWdlXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gTG9nV2FybmluZyhtZXNzYWdlKSB7XHJcblx0c2VuZExvZ01lc3NhZ2UoJ1cnLCBtZXNzYWdlKTtcclxufVxyXG5cclxuLyoqXHJcbiAqIExvZyB0aGUgZ2l2ZW4gZXJyb3IgbWVzc2FnZSB3aXRoIHRoZSBiYWNrZW5kXHJcbiAqXHJcbiAqIEBleHBvcnRcclxuICogQHBhcmFtIHtzdHJpbmd9IG1lc3NhZ2VcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBMb2dFcnJvcihtZXNzYWdlKSB7XHJcblx0c2VuZExvZ01lc3NhZ2UoJ0UnLCBtZXNzYWdlKTtcclxufVxyXG5cclxuLyoqXHJcbiAqIExvZyB0aGUgZ2l2ZW4gZmF0YWwgbWVzc2FnZSB3aXRoIHRoZSBiYWNrZW5kXHJcbiAqXHJcbiAqIEBleHBvcnRcclxuICogQHBhcmFtIHtzdHJpbmd9IG1lc3NhZ2VcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBMb2dGYXRhbChtZXNzYWdlKSB7XHJcblx0c2VuZExvZ01lc3NhZ2UoJ0YnLCBtZXNzYWdlKTtcclxufVxyXG5cclxuLyoqXHJcbiAqIFNldHMgdGhlIExvZyBsZXZlbCB0byB0aGUgZ2l2ZW4gbG9nIGxldmVsXHJcbiAqXHJcbiAqIEBleHBvcnRcclxuICogQHBhcmFtIHtudW1iZXJ9IGxvZ2xldmVsXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gU2V0TG9nTGV2ZWwobG9nbGV2ZWwpIHtcclxuXHRzZW5kTG9nTWVzc2FnZSgnUycsIGxvZ2xldmVsKTtcclxufVxyXG5cclxuLy8gTG9nIGxldmVsc1xyXG5leHBvcnQgY29uc3QgTG9nTGV2ZWwgPSB7XHJcblx0VFJBQ0U6IDEsXHJcblx0REVCVUc6IDIsXHJcblx0SU5GTzogMyxcclxuXHRXQVJOSU5HOiA0LFxyXG5cdEVSUk9SOiA1LFxyXG59O1xyXG4iLCAiLypcclxuIF8gICAgICAgX18gICAgICBfIF9fXHJcbnwgfCAgICAgLyAvX19fIF8oXykgL19fX19cclxufCB8IC98IC8gLyBfXyBgLyAvIC8gX19fL1xyXG58IHwvIHwvIC8gL18vIC8gLyAoX18gIClcclxufF9fL3xfXy9cXF9fLF8vXy9fL19fX18vXHJcblRoZSBlbGVjdHJvbiBhbHRlcm5hdGl2ZSBmb3IgR29cclxuKGMpIExlYSBBbnRob255IDIwMTktcHJlc2VudFxyXG4qL1xyXG4vKiBqc2hpbnQgZXN2ZXJzaW9uOiA2ICovXHJcblxyXG4vLyBEZWZpbmVzIGEgc2luZ2xlIGxpc3RlbmVyIHdpdGggYSBtYXhpbXVtIG51bWJlciBvZiB0aW1lcyB0byBjYWxsYmFja1xyXG5cclxuLyoqXHJcbiAqIFRoZSBMaXN0ZW5lciBjbGFzcyBkZWZpbmVzIGEgbGlzdGVuZXIhIDotKVxyXG4gKlxyXG4gKiBAY2xhc3MgTGlzdGVuZXJcclxuICovXHJcbmNsYXNzIExpc3RlbmVyIHtcclxuICAgIC8qKlxyXG4gICAgICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiBMaXN0ZW5lci5cclxuICAgICAqIEBwYXJhbSB7ZnVuY3Rpb259IGNhbGxiYWNrXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gbWF4Q2FsbGJhY2tzXHJcbiAgICAgKiBAbWVtYmVyb2YgTGlzdGVuZXJcclxuICAgICAqL1xyXG4gICAgY29uc3RydWN0b3IoY2FsbGJhY2ssIG1heENhbGxiYWNrcykge1xyXG4gICAgICAgIC8vIERlZmF1bHQgb2YgLTEgbWVhbnMgaW5maW5pdGVcclxuICAgICAgICBtYXhDYWxsYmFja3MgPSBtYXhDYWxsYmFja3MgfHwgLTE7XHJcbiAgICAgICAgLy8gQ2FsbGJhY2sgaW52b2tlcyB0aGUgY2FsbGJhY2sgd2l0aCB0aGUgZ2l2ZW4gZGF0YVxyXG4gICAgICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGlzIGxpc3RlbmVyIHNob3VsZCBiZSBkZXN0cm95ZWRcclxuICAgICAgICB0aGlzLkNhbGxiYWNrID0gKGRhdGEpID0+IHtcclxuICAgICAgICAgICAgY2FsbGJhY2suYXBwbHkobnVsbCwgZGF0YSk7XHJcbiAgICAgICAgICAgIC8vIElmIG1heENhbGxiYWNrcyBpcyBpbmZpbml0ZSwgcmV0dXJuIGZhbHNlIChkbyBub3QgZGVzdHJveSlcclxuICAgICAgICAgICAgaWYgKG1heENhbGxiYWNrcyA9PT0gLTEpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvLyBEZWNyZW1lbnQgbWF4Q2FsbGJhY2tzLiBSZXR1cm4gdHJ1ZSBpZiBub3cgMCwgb3RoZXJ3aXNlIGZhbHNlXHJcbiAgICAgICAgICAgIG1heENhbGxiYWNrcyAtPSAxO1xyXG4gICAgICAgICAgICByZXR1cm4gbWF4Q2FsbGJhY2tzID09PSAwO1xyXG4gICAgICAgIH07XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBjb25zdCBldmVudExpc3RlbmVycyA9IHt9O1xyXG5cclxuLyoqXHJcbiAqIFJlZ2lzdGVycyBhbiBldmVudCBsaXN0ZW5lciB0aGF0IHdpbGwgYmUgaW52b2tlZCBgbWF4Q2FsbGJhY2tzYCB0aW1lcyBiZWZvcmUgYmVpbmcgZGVzdHJveWVkXHJcbiAqXHJcbiAqIEBleHBvcnRcclxuICogQHBhcmFtIHtzdHJpbmd9IGV2ZW50TmFtZVxyXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBjYWxsYmFja1xyXG4gKiBAcGFyYW0ge251bWJlcn0gbWF4Q2FsbGJhY2tzXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gRXZlbnRzT25NdWx0aXBsZShldmVudE5hbWUsIGNhbGxiYWNrLCBtYXhDYWxsYmFja3MpIHtcclxuICAgIGV2ZW50TGlzdGVuZXJzW2V2ZW50TmFtZV0gPSBldmVudExpc3RlbmVyc1tldmVudE5hbWVdIHx8IFtdO1xyXG4gICAgY29uc3QgdGhpc0xpc3RlbmVyID0gbmV3IExpc3RlbmVyKGNhbGxiYWNrLCBtYXhDYWxsYmFja3MpO1xyXG4gICAgZXZlbnRMaXN0ZW5lcnNbZXZlbnROYW1lXS5wdXNoKHRoaXNMaXN0ZW5lcik7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBSZWdpc3RlcnMgYW4gZXZlbnQgbGlzdGVuZXIgdGhhdCB3aWxsIGJlIGludm9rZWQgZXZlcnkgdGltZSB0aGUgZXZlbnQgaXMgZW1pdHRlZFxyXG4gKlxyXG4gKiBAZXhwb3J0XHJcbiAqIEBwYXJhbSB7c3RyaW5nfSBldmVudE5hbWVcclxuICogQHBhcmFtIHtmdW5jdGlvbn0gY2FsbGJhY2tcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBFdmVudHNPbihldmVudE5hbWUsIGNhbGxiYWNrKSB7XHJcbiAgICBFdmVudHNPbk11bHRpcGxlKGV2ZW50TmFtZSwgY2FsbGJhY2ssIC0xKTtcclxufVxyXG5cclxuLyoqXHJcbiAqIFJlZ2lzdGVycyBhbiBldmVudCBsaXN0ZW5lciB0aGF0IHdpbGwgYmUgaW52b2tlZCBvbmNlIHRoZW4gZGVzdHJveWVkXHJcbiAqXHJcbiAqIEBleHBvcnRcclxuICogQHBhcmFtIHtzdHJpbmd9IGV2ZW50TmFtZVxyXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBjYWxsYmFja1xyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIEV2ZW50c09uY2UoZXZlbnROYW1lLCBjYWxsYmFjaykge1xyXG4gICAgRXZlbnRzT25NdWx0aXBsZShldmVudE5hbWUsIGNhbGxiYWNrLCAxKTtcclxufVxyXG5cclxuZnVuY3Rpb24gbm90aWZ5TGlzdGVuZXJzKGV2ZW50RGF0YSkge1xyXG5cclxuICAgIC8vIEdldCB0aGUgZXZlbnQgbmFtZVxyXG4gICAgbGV0IGV2ZW50TmFtZSA9IGV2ZW50RGF0YS5uYW1lO1xyXG5cclxuICAgIC8vIENoZWNrIGlmIHdlIGhhdmUgYW55IGxpc3RlbmVycyBmb3IgdGhpcyBldmVudFxyXG4gICAgaWYgKGV2ZW50TGlzdGVuZXJzW2V2ZW50TmFtZV0pIHtcclxuXHJcbiAgICAgICAgLy8gS2VlcCBhIGxpc3Qgb2YgbGlzdGVuZXIgaW5kZXhlcyB0byBkZXN0cm95XHJcbiAgICAgICAgY29uc3QgbmV3RXZlbnRMaXN0ZW5lckxpc3QgPSBldmVudExpc3RlbmVyc1tldmVudE5hbWVdLnNsaWNlKCk7XHJcblxyXG4gICAgICAgIC8vIEl0ZXJhdGUgbGlzdGVuZXJzXHJcbiAgICAgICAgZm9yIChsZXQgY291bnQgPSAwOyBjb3VudCA8IGV2ZW50TGlzdGVuZXJzW2V2ZW50TmFtZV0ubGVuZ3RoOyBjb3VudCArPSAxKSB7XHJcblxyXG4gICAgICAgICAgICAvLyBHZXQgbmV4dCBsaXN0ZW5lclxyXG4gICAgICAgICAgICBjb25zdCBsaXN0ZW5lciA9IGV2ZW50TGlzdGVuZXJzW2V2ZW50TmFtZV1bY291bnRdO1xyXG5cclxuICAgICAgICAgICAgbGV0IGRhdGEgPSBldmVudERhdGEuZGF0YTtcclxuXHJcbiAgICAgICAgICAgIC8vIERvIHRoZSBjYWxsYmFja1xyXG4gICAgICAgICAgICBjb25zdCBkZXN0cm95ID0gbGlzdGVuZXIuQ2FsbGJhY2soZGF0YSk7XHJcbiAgICAgICAgICAgIGlmIChkZXN0cm95KSB7XHJcbiAgICAgICAgICAgICAgICAvLyBpZiB0aGUgbGlzdGVuZXIgaW5kaWNhdGVkIHRvIGRlc3Ryb3kgaXRzZWxmLCBhZGQgaXQgdG8gdGhlIGRlc3Ryb3kgbGlzdFxyXG4gICAgICAgICAgICAgICAgbmV3RXZlbnRMaXN0ZW5lckxpc3Quc3BsaWNlKGNvdW50LCAxKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gVXBkYXRlIGNhbGxiYWNrcyB3aXRoIG5ldyBsaXN0IG9mIGxpc3RlbmVyc1xyXG4gICAgICAgIGV2ZW50TGlzdGVuZXJzW2V2ZW50TmFtZV0gPSBuZXdFdmVudExpc3RlbmVyTGlzdDtcclxuICAgIH1cclxufVxyXG5cclxuLyoqXHJcbiAqIE5vdGlmeSBpbmZvcm1zIGZyb250ZW5kIGxpc3RlbmVycyB0aGF0IGFuIGV2ZW50IHdhcyBlbWl0dGVkIHdpdGggdGhlIGdpdmVuIGRhdGFcclxuICpcclxuICogQGV4cG9ydFxyXG4gKiBAcGFyYW0ge3N0cmluZ30gbm90aWZ5TWVzc2FnZSAtIGVuY29kZWQgbm90aWZpY2F0aW9uIG1lc3NhZ2VcclxuXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gRXZlbnRzTm90aWZ5KG5vdGlmeU1lc3NhZ2UpIHtcclxuICAgIC8vIFBhcnNlIHRoZSBtZXNzYWdlXHJcbiAgICBsZXQgbWVzc2FnZTtcclxuICAgIHRyeSB7XHJcbiAgICAgICAgbWVzc2FnZSA9IEpTT04ucGFyc2Uobm90aWZ5TWVzc2FnZSk7XHJcbiAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgY29uc3QgZXJyb3IgPSAnSW52YWxpZCBKU09OIHBhc3NlZCB0byBOb3RpZnk6ICcgKyBub3RpZnlNZXNzYWdlO1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihlcnJvcik7XHJcbiAgICB9XHJcbiAgICBub3RpZnlMaXN0ZW5lcnMobWVzc2FnZSk7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBFbWl0IGFuIGV2ZW50IHdpdGggdGhlIGdpdmVuIG5hbWUgYW5kIGRhdGFcclxuICpcclxuICogQGV4cG9ydFxyXG4gKiBAcGFyYW0ge3N0cmluZ30gZXZlbnROYW1lXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gRXZlbnRzRW1pdChldmVudE5hbWUpIHtcclxuXHJcbiAgICBjb25zdCBwYXlsb2FkID0ge1xyXG4gICAgICAgIG5hbWU6IGV2ZW50TmFtZSxcclxuICAgICAgICBkYXRhOiBbXS5zbGljZS5hcHBseShhcmd1bWVudHMpLnNsaWNlKDEpLFxyXG4gICAgfTtcclxuXHJcbiAgICAvLyBOb3RpZnkgSlMgbGlzdGVuZXJzXHJcbiAgICBub3RpZnlMaXN0ZW5lcnMocGF5bG9hZCk7XHJcblxyXG4gICAgLy8gTm90aWZ5IEdvIGxpc3RlbmVyc1xyXG4gICAgd2luZG93LldhaWxzSW52b2tlKCdFRScgKyBKU09OLnN0cmluZ2lmeShwYXlsb2FkKSk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBFdmVudHNPZmYoZXZlbnROYW1lKSB7XHJcbiAgICAvLyBSZW1vdmUgbG9jYWwgbGlzdGVuZXJzXHJcbiAgICBkZWxldGUgZXZlbnRMaXN0ZW5lcnNbZXZlbnROYW1lXTtcclxuXHJcbiAgICAvLyBOb3RpZnkgR28gbGlzdGVuZXJzXHJcbiAgICB3aW5kb3cuV2FpbHNJbnZva2UoJ0VYJyArIGV2ZW50TmFtZSk7XHJcbn0iLCAiLypcclxuIF8gICAgICAgX18gICAgICBfIF9fXHJcbnwgfCAgICAgLyAvX19fIF8oXykgL19fX19cclxufCB8IC98IC8gLyBfXyBgLyAvIC8gX19fL1xyXG58IHwvIHwvIC8gL18vIC8gLyAoX18gIClcclxufF9fL3xfXy9cXF9fLF8vXy9fL19fX18vXHJcblRoZSBlbGVjdHJvbiBhbHRlcm5hdGl2ZSBmb3IgR29cclxuKGMpIExlYSBBbnRob255IDIwMTktcHJlc2VudFxyXG4qL1xyXG4vKiBqc2hpbnQgZXN2ZXJzaW9uOiA2ICovXHJcblxyXG5leHBvcnQgY29uc3QgY2FsbGJhY2tzID0ge307XHJcblxyXG4vKipcclxuICogUmV0dXJucyBhIG51bWJlciBmcm9tIHRoZSBuYXRpdmUgYnJvd3NlciByYW5kb20gZnVuY3Rpb25cclxuICpcclxuICogQHJldHVybnMgbnVtYmVyXHJcbiAqL1xyXG5mdW5jdGlvbiBjcnlwdG9SYW5kb20oKSB7XHJcblx0dmFyIGFycmF5ID0gbmV3IFVpbnQzMkFycmF5KDEpO1xyXG5cdHJldHVybiB3aW5kb3cuY3J5cHRvLmdldFJhbmRvbVZhbHVlcyhhcnJheSlbMF07XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBSZXR1cm5zIGEgbnVtYmVyIHVzaW5nIGRhIG9sZC1za29vbCBNYXRoLlJhbmRvbVxyXG4gKiBJIGxpa2VzIHRvIGNhbGwgaXQgTE9MUmFuZG9tXHJcbiAqXHJcbiAqIEByZXR1cm5zIG51bWJlclxyXG4gKi9cclxuZnVuY3Rpb24gYmFzaWNSYW5kb20oKSB7XHJcblx0cmV0dXJuIE1hdGgucmFuZG9tKCkgKiA5MDA3MTk5MjU0NzQwOTkxO1xyXG59XHJcblxyXG4vLyBQaWNrIGEgcmFuZG9tIG51bWJlciBmdW5jdGlvbiBiYXNlZCBvbiBicm93c2VyIGNhcGFiaWxpdHlcclxudmFyIHJhbmRvbUZ1bmM7XHJcbmlmICh3aW5kb3cuY3J5cHRvKSB7XHJcblx0cmFuZG9tRnVuYyA9IGNyeXB0b1JhbmRvbTtcclxufSBlbHNlIHtcclxuXHRyYW5kb21GdW5jID0gYmFzaWNSYW5kb207XHJcbn1cclxuXHJcblxyXG4vKipcclxuICogQ2FsbCBzZW5kcyBhIG1lc3NhZ2UgdG8gdGhlIGJhY2tlbmQgdG8gY2FsbCB0aGUgYmluZGluZyB3aXRoIHRoZVxyXG4gKiBnaXZlbiBkYXRhLiBBIHByb21pc2UgaXMgcmV0dXJuZWQgYW5kIHdpbGwgYmUgY29tcGxldGVkIHdoZW4gdGhlXHJcbiAqIGJhY2tlbmQgcmVzcG9uZHMuIFRoaXMgd2lsbCBiZSByZXNvbHZlZCB3aGVuIHRoZSBjYWxsIHdhcyBzdWNjZXNzZnVsXHJcbiAqIG9yIHJlamVjdGVkIGlmIGFuIGVycm9yIGlzIHBhc3NlZCBiYWNrLlxyXG4gKiBUaGVyZSBpcyBhIHRpbWVvdXQgbWVjaGFuaXNtLiBJZiB0aGUgY2FsbCBkb2Vzbid0IHJlc3BvbmQgaW4gdGhlIGdpdmVuXHJcbiAqIHRpbWUgKGluIG1pbGxpc2Vjb25kcykgdGhlbiB0aGUgcHJvbWlzZSBpcyByZWplY3RlZC5cclxuICpcclxuICogQGV4cG9ydFxyXG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxyXG4gKiBAcGFyYW0ge2FueT19IGFyZ3NcclxuICogQHBhcmFtIHtudW1iZXI9fSB0aW1lb3V0XHJcbiAqIEByZXR1cm5zXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gQ2FsbChuYW1lLCBhcmdzLCB0aW1lb3V0KSB7XHJcblxyXG5cdC8vIFRpbWVvdXQgaW5maW5pdGUgYnkgZGVmYXVsdFxyXG5cdGlmICh0aW1lb3V0ID09IG51bGwpIHtcclxuXHRcdHRpbWVvdXQgPSAwO1xyXG5cdH1cclxuXHJcblx0Ly8gQ3JlYXRlIGEgcHJvbWlzZVxyXG5cdHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XHJcblxyXG5cdFx0Ly8gQ3JlYXRlIGEgdW5pcXVlIGNhbGxiYWNrSURcclxuXHRcdHZhciBjYWxsYmFja0lEO1xyXG5cdFx0ZG8ge1xyXG5cdFx0XHRjYWxsYmFja0lEID0gbmFtZSArICctJyArIHJhbmRvbUZ1bmMoKTtcclxuXHRcdH0gd2hpbGUgKGNhbGxiYWNrc1tjYWxsYmFja0lEXSk7XHJcblxyXG5cdFx0dmFyIHRpbWVvdXRIYW5kbGU7XHJcblx0XHQvLyBTZXQgdGltZW91dFxyXG5cdFx0aWYgKHRpbWVvdXQgPiAwKSB7XHJcblx0XHRcdHRpbWVvdXRIYW5kbGUgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcclxuXHRcdFx0XHRyZWplY3QoRXJyb3IoJ0NhbGwgdG8gJyArIG5hbWUgKyAnIHRpbWVkIG91dC4gUmVxdWVzdCBJRDogJyArIGNhbGxiYWNrSUQpKTtcclxuXHRcdFx0fSwgdGltZW91dCk7XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gU3RvcmUgY2FsbGJhY2tcclxuXHRcdGNhbGxiYWNrc1tjYWxsYmFja0lEXSA9IHtcclxuXHRcdFx0dGltZW91dEhhbmRsZTogdGltZW91dEhhbmRsZSxcclxuXHRcdFx0cmVqZWN0OiByZWplY3QsXHJcblx0XHRcdHJlc29sdmU6IHJlc29sdmVcclxuXHRcdH07XHJcblxyXG5cdFx0dHJ5IHtcclxuXHRcdFx0Y29uc3QgcGF5bG9hZCA9IHtcclxuXHRcdFx0XHRuYW1lLFxyXG5cdFx0XHRcdGFyZ3MsXHJcblx0XHRcdFx0Y2FsbGJhY2tJRCxcclxuXHRcdFx0fTtcclxuXHJcblx0XHRcdC8vIE1ha2UgdGhlIGNhbGxcclxuXHRcdFx0d2luZG93LldhaWxzSW52b2tlKCdDJyArIEpTT04uc3RyaW5naWZ5KHBheWxvYWQpKTtcclxuXHRcdH0gY2F0Y2ggKGUpIHtcclxuXHRcdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lXHJcblx0XHRcdGNvbnNvbGUuZXJyb3IoZSk7XHJcblx0XHR9XHJcblx0fSk7XHJcbn1cclxuXHJcblxyXG5cclxuLyoqXHJcbiAqIENhbGxlZCBieSB0aGUgYmFja2VuZCB0byByZXR1cm4gZGF0YSB0byBhIHByZXZpb3VzbHkgY2FsbGVkXHJcbiAqIGJpbmRpbmcgaW52b2NhdGlvblxyXG4gKlxyXG4gKiBAZXhwb3J0XHJcbiAqIEBwYXJhbSB7c3RyaW5nfSBpbmNvbWluZ01lc3NhZ2VcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBDYWxsYmFjayhpbmNvbWluZ01lc3NhZ2UpIHtcclxuXHQvLyBQYXJzZSB0aGUgbWVzc2FnZVxyXG5cdGxldCBtZXNzYWdlO1xyXG5cdHRyeSB7XHJcblx0XHRtZXNzYWdlID0gSlNPTi5wYXJzZShpbmNvbWluZ01lc3NhZ2UpO1xyXG5cdH0gY2F0Y2ggKGUpIHtcclxuXHRcdGNvbnN0IGVycm9yID0gYEludmFsaWQgSlNPTiBwYXNzZWQgdG8gY2FsbGJhY2s6ICR7ZS5tZXNzYWdlfS4gTWVzc2FnZTogJHtpbmNvbWluZ01lc3NhZ2V9YDtcclxuXHRcdHJ1bnRpbWUuTG9nRGVidWcoZXJyb3IpO1xyXG5cdFx0dGhyb3cgbmV3IEVycm9yKGVycm9yKTtcclxuXHR9XHJcblx0bGV0IGNhbGxiYWNrSUQgPSBtZXNzYWdlLmNhbGxiYWNraWQ7XHJcblx0bGV0IGNhbGxiYWNrRGF0YSA9IGNhbGxiYWNrc1tjYWxsYmFja0lEXTtcclxuXHRpZiAoIWNhbGxiYWNrRGF0YSkge1xyXG5cdFx0Y29uc3QgZXJyb3IgPSBgQ2FsbGJhY2sgJyR7Y2FsbGJhY2tJRH0nIG5vdCByZWdpc3RlcmVkISEhYDtcclxuXHRcdGNvbnNvbGUuZXJyb3IoZXJyb3IpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lXHJcblx0XHR0aHJvdyBuZXcgRXJyb3IoZXJyb3IpO1xyXG5cdH1cclxuXHRjbGVhclRpbWVvdXQoY2FsbGJhY2tEYXRhLnRpbWVvdXRIYW5kbGUpO1xyXG5cclxuXHRkZWxldGUgY2FsbGJhY2tzW2NhbGxiYWNrSURdO1xyXG5cclxuXHRpZiAobWVzc2FnZS5lcnJvcikge1xyXG5cdFx0Y2FsbGJhY2tEYXRhLnJlamVjdChtZXNzYWdlLmVycm9yKTtcclxuXHR9IGVsc2Uge1xyXG5cdFx0Y2FsbGJhY2tEYXRhLnJlc29sdmUobWVzc2FnZS5yZXN1bHQpO1xyXG5cdH1cclxufVxyXG4iLCAiLypcclxuIF8gICAgICAgX18gICAgICBfIF9fICAgIFxyXG58IHwgICAgIC8gL19fXyBfKF8pIC9fX19fXHJcbnwgfCAvfCAvIC8gX18gYC8gLyAvIF9fXy9cclxufCB8LyB8LyAvIC9fLyAvIC8gKF9fICApIFxyXG58X18vfF9fL1xcX18sXy9fL18vX19fXy8gIFxyXG5UaGUgZWxlY3Ryb24gYWx0ZXJuYXRpdmUgZm9yIEdvXHJcbihjKSBMZWEgQW50aG9ueSAyMDE5LXByZXNlbnRcclxuKi9cclxuLyoganNoaW50IGVzdmVyc2lvbjogNiAqL1xyXG5cclxuaW1wb3J0IHtDYWxsfSBmcm9tICcuL2NhbGxzJztcclxuXHJcbi8vIFRoaXMgaXMgd2hlcmUgd2UgYmluZCBnbyBtZXRob2Qgd3JhcHBlcnNcclxud2luZG93LmdvID0ge307XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gU2V0QmluZGluZ3MoYmluZGluZ3NNYXApIHtcclxuXHR0cnkge1xyXG5cdFx0YmluZGluZ3NNYXAgPSBKU09OLnBhcnNlKGJpbmRpbmdzTWFwKTtcclxuXHR9IGNhdGNoIChlKSB7XHJcblx0XHRjb25zb2xlLmVycm9yKGUpO1xyXG5cdH1cclxuXHJcblx0Ly8gSW5pdGlhbGlzZSB0aGUgYmluZGluZ3MgbWFwXHJcblx0d2luZG93LmdvID0gd2luZG93LmdvIHx8IHt9O1xyXG5cclxuXHQvLyBJdGVyYXRlIHBhY2thZ2UgbmFtZXNcclxuXHRPYmplY3Qua2V5cyhiaW5kaW5nc01hcCkuZm9yRWFjaCgocGFja2FnZU5hbWUpID0+IHtcclxuXHJcblx0XHQvLyBDcmVhdGUgaW5uZXIgbWFwIGlmIGl0IGRvZXNuJ3QgZXhpc3RcclxuXHRcdHdpbmRvdy5nb1twYWNrYWdlTmFtZV0gPSB3aW5kb3cuZ29bcGFja2FnZU5hbWVdIHx8IHt9O1xyXG5cclxuXHRcdC8vIEl0ZXJhdGUgc3RydWN0IG5hbWVzXHJcblx0XHRPYmplY3Qua2V5cyhiaW5kaW5nc01hcFtwYWNrYWdlTmFtZV0pLmZvckVhY2goKHN0cnVjdE5hbWUpID0+IHtcclxuXHJcblx0XHRcdC8vIENyZWF0ZSBpbm5lciBtYXAgaWYgaXQgZG9lc24ndCBleGlzdFxyXG5cdFx0XHR3aW5kb3cuZ29bcGFja2FnZU5hbWVdW3N0cnVjdE5hbWVdID0gd2luZG93LmdvW3BhY2thZ2VOYW1lXVtzdHJ1Y3ROYW1lXSB8fCB7fTtcclxuXHJcblx0XHRcdE9iamVjdC5rZXlzKGJpbmRpbmdzTWFwW3BhY2thZ2VOYW1lXVtzdHJ1Y3ROYW1lXSkuZm9yRWFjaCgobWV0aG9kTmFtZSkgPT4ge1xyXG5cclxuXHRcdFx0XHR3aW5kb3cuZ29bcGFja2FnZU5hbWVdW3N0cnVjdE5hbWVdW21ldGhvZE5hbWVdID0gZnVuY3Rpb24gKCkge1xyXG5cclxuXHRcdFx0XHRcdC8vIE5vIHRpbWVvdXQgYnkgZGVmYXVsdFxyXG5cdFx0XHRcdFx0bGV0IHRpbWVvdXQgPSAwO1xyXG5cclxuXHRcdFx0XHRcdC8vIEFjdHVhbCBmdW5jdGlvblxyXG5cdFx0XHRcdFx0ZnVuY3Rpb24gZHluYW1pYygpIHtcclxuXHRcdFx0XHRcdFx0Y29uc3QgYXJncyA9IFtdLnNsaWNlLmNhbGwoYXJndW1lbnRzKTtcclxuXHRcdFx0XHRcdFx0cmV0dXJuIENhbGwoW3BhY2thZ2VOYW1lLCBzdHJ1Y3ROYW1lLCBtZXRob2ROYW1lXS5qb2luKCcuJyksIGFyZ3MsIHRpbWVvdXQpO1xyXG5cdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdC8vIEFsbG93IHNldHRpbmcgdGltZW91dCB0byBmdW5jdGlvblxyXG5cdFx0XHRcdFx0ZHluYW1pYy5zZXRUaW1lb3V0ID0gZnVuY3Rpb24gKG5ld1RpbWVvdXQpIHtcclxuXHRcdFx0XHRcdFx0dGltZW91dCA9IG5ld1RpbWVvdXQ7XHJcblx0XHRcdFx0XHR9O1xyXG5cclxuXHRcdFx0XHRcdC8vIEFsbG93IGdldHRpbmcgdGltZW91dCB0byBmdW5jdGlvblxyXG5cdFx0XHRcdFx0ZHluYW1pYy5nZXRUaW1lb3V0ID0gZnVuY3Rpb24gKCkge1xyXG5cdFx0XHRcdFx0XHRyZXR1cm4gdGltZW91dDtcclxuXHRcdFx0XHRcdH07XHJcblxyXG5cdFx0XHRcdFx0cmV0dXJuIGR5bmFtaWM7XHJcblx0XHRcdFx0fSgpO1xyXG5cdFx0XHR9KTtcclxuXHRcdH0pO1xyXG5cdH0pO1xyXG59XHJcbiIsICIvKlxyXG4gX1x0ICAgX19cdCAgXyBfX1xyXG58IHxcdCAvIC9fX18gXyhfKSAvX19fX1xyXG58IHwgL3wgLyAvIF9fIGAvIC8gLyBfX18vXHJcbnwgfC8gfC8gLyAvXy8gLyAvIChfXyAgKVxyXG58X18vfF9fL1xcX18sXy9fL18vX19fXy9cclxuVGhlIGVsZWN0cm9uIGFsdGVybmF0aXZlIGZvciBHb1xyXG4oYykgTGVhIEFudGhvbnkgMjAxOS1wcmVzZW50XHJcbiovXHJcblxyXG4vKiBqc2hpbnQgZXN2ZXJzaW9uOiA5ICovXHJcblxyXG5cclxuaW1wb3J0IHsgQ2FsbCB9IGZyb20gXCIuL2NhbGxzXCI7XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gV2luZG93UmVsb2FkKCkge1xyXG4gICAgd2luZG93LmxvY2F0aW9uLnJlbG9hZCgpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gV2luZG93UmVsb2FkQXBwKCkge1xyXG4gICAgd2luZG93LldhaWxzSW52b2tlKCdXUicpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gV2luZG93U2V0U3lzdGVtRGVmYXVsdFRoZW1lKCkge1xyXG4gICAgd2luZG93LldhaWxzSW52b2tlKCdXQVNEVCcpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gV2luZG93U2V0TGlnaHRUaGVtZSgpIHtcclxuICAgIHdpbmRvdy5XYWlsc0ludm9rZSgnV0FMVCcpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gV2luZG93U2V0RGFya1RoZW1lKCkge1xyXG4gICAgd2luZG93LldhaWxzSW52b2tlKCdXQURUJyk7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBQbGFjZSB0aGUgd2luZG93IGluIHRoZSBjZW50ZXIgb2YgdGhlIHNjcmVlblxyXG4gKlxyXG4gKiBAZXhwb3J0XHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gV2luZG93Q2VudGVyKCkge1xyXG4gICAgd2luZG93LldhaWxzSW52b2tlKCdXYycpO1xyXG59XHJcblxyXG4vKipcclxuICogU2V0cyB0aGUgd2luZG93IHRpdGxlXHJcbiAqXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSB0aXRsZVxyXG4gKiBAZXhwb3J0XHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gV2luZG93U2V0VGl0bGUodGl0bGUpIHtcclxuICAgIHdpbmRvdy5XYWlsc0ludm9rZSgnV1QnICsgdGl0bGUpO1xyXG59XHJcblxyXG4vKipcclxuICogTWFrZXMgdGhlIHdpbmRvdyBnbyBmdWxsc2NyZWVuXHJcbiAqXHJcbiAqIEBleHBvcnRcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBXaW5kb3dGdWxsc2NyZWVuKCkge1xyXG4gICAgd2luZG93LldhaWxzSW52b2tlKCdXRicpO1xyXG59XHJcblxyXG4vKipcclxuICogUmV2ZXJ0cyB0aGUgd2luZG93IGZyb20gZnVsbHNjcmVlblxyXG4gKlxyXG4gKiBAZXhwb3J0XHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gV2luZG93VW5mdWxsc2NyZWVuKCkge1xyXG4gICAgd2luZG93LldhaWxzSW52b2tlKCdXZicpO1xyXG59XHJcblxyXG4vKipcclxuICogU2V0IHRoZSBTaXplIG9mIHRoZSB3aW5kb3dcclxuICpcclxuICogQGV4cG9ydFxyXG4gKiBAcGFyYW0ge251bWJlcn0gd2lkdGhcclxuICogQHBhcmFtIHtudW1iZXJ9IGhlaWdodFxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIFdpbmRvd1NldFNpemUod2lkdGgsIGhlaWdodCkge1xyXG4gICAgd2luZG93LldhaWxzSW52b2tlKCdXczonICsgd2lkdGggKyAnOicgKyBoZWlnaHQpO1xyXG59XHJcblxyXG4vKipcclxuICogR2V0IHRoZSBTaXplIG9mIHRoZSB3aW5kb3dcclxuICpcclxuICogQGV4cG9ydFxyXG4gKiBAcmV0dXJuIHtQcm9taXNlPHt3OiBudW1iZXIsIGg6IG51bWJlcn0+fSBUaGUgc2l6ZSBvZiB0aGUgd2luZG93XHJcblxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIFdpbmRvd0dldFNpemUoKSB7XHJcbiAgICByZXR1cm4gQ2FsbChcIjp3YWlsczpXaW5kb3dHZXRTaXplXCIpO1xyXG59XHJcblxyXG4vKipcclxuICogU2V0IHRoZSBtYXhpbXVtIHNpemUgb2YgdGhlIHdpbmRvd1xyXG4gKlxyXG4gKiBAZXhwb3J0XHJcbiAqIEBwYXJhbSB7bnVtYmVyfSB3aWR0aFxyXG4gKiBAcGFyYW0ge251bWJlcn0gaGVpZ2h0XHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gV2luZG93U2V0TWF4U2l6ZSh3aWR0aCwgaGVpZ2h0KSB7XHJcbiAgICB3aW5kb3cuV2FpbHNJbnZva2UoJ1daOicgKyB3aWR0aCArICc6JyArIGhlaWdodCk7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBTZXQgdGhlIG1pbmltdW0gc2l6ZSBvZiB0aGUgd2luZG93XHJcbiAqXHJcbiAqIEBleHBvcnRcclxuICogQHBhcmFtIHtudW1iZXJ9IHdpZHRoXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBoZWlnaHRcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBXaW5kb3dTZXRNaW5TaXplKHdpZHRoLCBoZWlnaHQpIHtcclxuICAgIHdpbmRvdy5XYWlsc0ludm9rZSgnV3o6JyArIHdpZHRoICsgJzonICsgaGVpZ2h0KTtcclxufVxyXG5cclxuXHJcblxyXG4vKipcclxuICogU2V0IHRoZSB3aW5kb3cgQWx3YXlzT25Ub3Agb3Igbm90IG9uIHRvcFxyXG4gKlxyXG4gKiBAZXhwb3J0XHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gV2luZG93U2V0QWx3YXlzT25Ub3AoYikge1xyXG5cclxuICAgIHdpbmRvdy5XYWlsc0ludm9rZSgnV0FUUDonICsgKGIgPyAnMScgOiAnMCcpKTtcclxufVxyXG5cclxuXHJcblxyXG5cclxuLyoqXHJcbiAqIFNldCB0aGUgUG9zaXRpb24gb2YgdGhlIHdpbmRvd1xyXG4gKlxyXG4gKiBAZXhwb3J0XHJcbiAqIEBwYXJhbSB7bnVtYmVyfSB4XHJcbiAqIEBwYXJhbSB7bnVtYmVyfSB5XHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gV2luZG93U2V0UG9zaXRpb24oeCwgeSkge1xyXG4gICAgd2luZG93LldhaWxzSW52b2tlKCdXcDonICsgeCArICc6JyArIHkpO1xyXG59XHJcblxyXG4vKipcclxuICogR2V0IHRoZSBQb3NpdGlvbiBvZiB0aGUgd2luZG93XHJcbiAqXHJcbiAqIEBleHBvcnRcclxuICogQHJldHVybiB7UHJvbWlzZTx7eDogbnVtYmVyLCB5OiBudW1iZXJ9Pn0gVGhlIHBvc2l0aW9uIG9mIHRoZSB3aW5kb3dcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBXaW5kb3dHZXRQb3NpdGlvbigpIHtcclxuICAgIHJldHVybiBDYWxsKFwiOndhaWxzOldpbmRvd0dldFBvc1wiKTtcclxufVxyXG5cclxuLyoqXHJcbiAqIEhpZGUgdGhlIFdpbmRvd1xyXG4gKlxyXG4gKiBAZXhwb3J0XHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gV2luZG93SGlkZSgpIHtcclxuICAgIHdpbmRvdy5XYWlsc0ludm9rZSgnV0gnKTtcclxufVxyXG5cclxuLyoqXHJcbiAqIFNob3cgdGhlIFdpbmRvd1xyXG4gKlxyXG4gKiBAZXhwb3J0XHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gV2luZG93U2hvdygpIHtcclxuICAgIHdpbmRvdy5XYWlsc0ludm9rZSgnV1MnKTtcclxufVxyXG5cclxuLyoqXHJcbiAqIE1heGltaXNlIHRoZSBXaW5kb3dcclxuICpcclxuICogQGV4cG9ydFxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIFdpbmRvd01heGltaXNlKCkge1xyXG4gICAgd2luZG93LldhaWxzSW52b2tlKCdXTScpO1xyXG59XHJcblxyXG4vKipcclxuICogVG9nZ2xlIHRoZSBNYXhpbWlzZSBvZiB0aGUgV2luZG93XHJcbiAqXHJcbiAqIEBleHBvcnRcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBXaW5kb3dUb2dnbGVNYXhpbWlzZSgpIHtcclxuICAgIHdpbmRvdy5XYWlsc0ludm9rZSgnV3QnKTtcclxufVxyXG5cclxuLyoqXHJcbiAqIFVubWF4aW1pc2UgdGhlIFdpbmRvd1xyXG4gKlxyXG4gKiBAZXhwb3J0XHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gV2luZG93VW5tYXhpbWlzZSgpIHtcclxuICAgIHdpbmRvdy5XYWlsc0ludm9rZSgnV1UnKTtcclxufVxyXG5cclxuLyoqXHJcbiAqIE1pbmltaXNlIHRoZSBXaW5kb3dcclxuICpcclxuICogQGV4cG9ydFxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIFdpbmRvd01pbmltaXNlKCkge1xyXG4gICAgd2luZG93LldhaWxzSW52b2tlKCdXbScpO1xyXG59XHJcblxyXG4vKipcclxuICogVW5taW5pbWlzZSB0aGUgV2luZG93XHJcbiAqXHJcbiAqIEBleHBvcnRcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBXaW5kb3dVbm1pbmltaXNlKCkge1xyXG4gICAgd2luZG93LldhaWxzSW52b2tlKCdXdScpO1xyXG59XHJcblxyXG5cclxuLyoqXHJcbiAqIFNldHMgdGhlIGJhY2tncm91bmQgY29sb3VyIG9mIHRoZSB3aW5kb3dcclxuICpcclxuICogQGV4cG9ydFxyXG4gKiBAcGFyYW0ge251bWJlcn0gUiBSZWRcclxuICogQHBhcmFtIHtudW1iZXJ9IEcgR3JlZW5cclxuICogQHBhcmFtIHtudW1iZXJ9IEIgQmx1ZVxyXG4gKiBAcGFyYW0ge251bWJlcn0gQSBBbHBoYVxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIFdpbmRvd1NldFJHQkEoUiwgRywgQiwgQSkge1xyXG4gICAgbGV0IHJnYmEgPSBKU09OLnN0cmluZ2lmeSh7IHI6IFIgfHwgMCwgZzogRyB8fCAwLCBiOiBCIHx8IDAsIGE6IEEgfHwgMjU1IH0pO1xyXG4gICAgd2luZG93LldhaWxzSW52b2tlKCdXcjonICsgcmdiYSk7XHJcbn1cclxuXHJcbiIsICIvKipcclxuICogQGRlc2NyaXB0aW9uOiBVc2UgdGhlIHN5c3RlbSBkZWZhdWx0IGJyb3dzZXIgdG8gb3BlbiB0aGUgdXJsXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSB1cmwgXHJcbiAqIEByZXR1cm4ge3ZvaWR9XHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gQnJvd3Nlck9wZW5VUkwodXJsKSB7XHJcbiAgd2luZG93LldhaWxzSW52b2tlKCdCTzonICsgdXJsKTtcclxufSIsICIvKlxyXG4gX1x0ICAgX19cdCAgXyBfX1xyXG58IHxcdCAvIC9fX18gXyhfKSAvX19fX1xyXG58IHwgL3wgLyAvIF9fIGAvIC8gLyBfX18vXHJcbnwgfC8gfC8gLyAvXy8gLyAvIChfXyAgKVxyXG58X18vfF9fL1xcX18sXy9fL18vX19fXy9cclxuVGhlIGVsZWN0cm9uIGFsdGVybmF0aXZlIGZvciBHb1xyXG4oYykgTGVhIEFudGhvbnkgMjAxOS1wcmVzZW50XHJcbiovXHJcbi8qIGpzaGludCBlc3ZlcnNpb246IDkgKi9cclxuaW1wb3J0ICogYXMgTG9nIGZyb20gJy4vbG9nJztcclxuaW1wb3J0IHtldmVudExpc3RlbmVycywgRXZlbnRzRW1pdCwgRXZlbnRzTm90aWZ5LCBFdmVudHNPZmYsIEV2ZW50c09uLCBFdmVudHNPbmNlLCBFdmVudHNPbk11bHRpcGxlfSBmcm9tICcuL2V2ZW50cyc7XHJcbmltcG9ydCB7Q2FsbCwgQ2FsbGJhY2ssIGNhbGxiYWNrc30gZnJvbSAnLi9jYWxscyc7XHJcbmltcG9ydCB7U2V0QmluZGluZ3N9IGZyb20gXCIuL2JpbmRpbmdzXCI7XHJcbmltcG9ydCAqIGFzIFdpbmRvdyBmcm9tIFwiLi93aW5kb3dcIjtcclxuaW1wb3J0ICogYXMgQnJvd3NlciBmcm9tIFwiLi9icm93c2VyXCI7XHJcblxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIFF1aXQoKSB7XHJcbiAgICB3aW5kb3cuV2FpbHNJbnZva2UoJ1EnKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIEVudmlyb25tZW50KCkge1xyXG4gICAgcmV0dXJuIENhbGwoXCI6d2FpbHM6RW52aXJvbm1lbnRcIik7XHJcbn1cclxuXHJcbi8vIFRoZSBKUyBydW50aW1lXHJcbndpbmRvdy5ydW50aW1lID0ge1xyXG4gICAgLi4uTG9nLFxyXG4gICAgLi4uV2luZG93LFxyXG4gICAgLi4uQnJvd3NlcixcclxuICAgIEV2ZW50c09uLFxyXG4gICAgRXZlbnRzT25jZSxcclxuICAgIEV2ZW50c09uTXVsdGlwbGUsXHJcbiAgICBFdmVudHNFbWl0LFxyXG4gICAgRXZlbnRzT2ZmLFxyXG4gICAgRW52aXJvbm1lbnQsXHJcbiAgICBRdWl0XHJcbn07XHJcblxyXG4vLyBJbnRlcm5hbCB3YWlscyBlbmRwb2ludHNcclxud2luZG93LndhaWxzID0ge1xyXG4gICAgQ2FsbGJhY2ssXHJcbiAgICBFdmVudHNOb3RpZnksXHJcbiAgICBTZXRCaW5kaW5ncyxcclxuICAgIGV2ZW50TGlzdGVuZXJzLFxyXG4gICAgY2FsbGJhY2tzLFxyXG4gICAgZmxhZ3M6IHtcclxuICAgICAgICBkaXNhYmxlU2Nyb2xsYmFyRHJhZzogZmFsc2UsXHJcbiAgICAgICAgZGlzYWJsZVdhaWxzRGVmYXVsdENvbnRleHRNZW51OiBmYWxzZSxcclxuICAgICAgICBlbmFibGVSZXNpemU6IGZhbHNlLFxyXG4gICAgICAgIGRlZmF1bHRDdXJzb3I6IG51bGwsXHJcbiAgICAgICAgYm9yZGVyVGhpY2tuZXNzOiA2LFxyXG4gICAgICAgIGRiQ2xpY2tJbnRlcnZhbDogMTAwLFxyXG4gICAgfVxyXG59O1xyXG5cclxuLy8gU2V0IHRoZSBiaW5kaW5nc1xyXG53aW5kb3cud2FpbHMuU2V0QmluZGluZ3Mod2luZG93LndhaWxzYmluZGluZ3MpO1xyXG5kZWxldGUgd2luZG93LndhaWxzLlNldEJpbmRpbmdzO1xyXG5cclxuLy8gVGhpcyBpcyBldmFsdWF0ZWQgYXQgYnVpbGQgdGltZSBpbiBwYWNrYWdlLmpzb25cclxuLy8gY29uc3QgZGV2ID0gMDtcclxuLy8gY29uc3QgcHJvZHVjdGlvbiA9IDE7XHJcbmlmIChFTlYgPT09IDApIHtcclxuICAgIGRlbGV0ZSB3aW5kb3cud2FpbHNiaW5kaW5ncztcclxufVxyXG5cclxudmFyIGRyYWdUaW1lT3V0O1xyXG52YXIgZHJhZ0xhc3RUaW1lID0gMDtcclxuXHJcbmZ1bmN0aW9uIGRyYWcoKSB7XHJcbiAgICB3aW5kb3cuV2FpbHNJbnZva2UoXCJkcmFnXCIpO1xyXG59XHJcblxyXG4vLyBTZXR1cCBkcmFnIGhhbmRsZXJcclxuLy8gQmFzZWQgb24gY29kZSBmcm9tOiBodHRwczovL2dpdGh1Yi5jb20vcGF0cjBudXMvRGVza0dhcFxyXG53aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vkb3duJywgKGUpID0+IHtcclxuXHJcbiAgICAvLyBDaGVjayBmb3IgcmVzaXppbmdcclxuICAgIGlmICh3aW5kb3cud2FpbHMuZmxhZ3MucmVzaXplRWRnZSkge1xyXG4gICAgICAgIHdpbmRvdy5XYWlsc0ludm9rZShcInJlc2l6ZTpcIiArIHdpbmRvdy53YWlscy5mbGFncy5yZXNpemVFZGdlKTtcclxuICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIENoZWNrIGZvciBkcmFnZ2luZ1xyXG4gICAgbGV0IGN1cnJlbnRFbGVtZW50ID0gZS50YXJnZXQ7XHJcbiAgICB3aGlsZSAoY3VycmVudEVsZW1lbnQgIT0gbnVsbCkge1xyXG4gICAgICAgIGlmIChjdXJyZW50RWxlbWVudC5oYXNBdHRyaWJ1dGUoJ2RhdGEtd2FpbHMtbm8tZHJhZycpKSB7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoY3VycmVudEVsZW1lbnQuaGFzQXR0cmlidXRlKCdkYXRhLXdhaWxzLWRyYWcnKSkge1xyXG4gICAgICAgICAgICBpZiAod2luZG93LndhaWxzLmZsYWdzLmRpc2FibGVTY3JvbGxiYXJEcmFnKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBUaGlzIGNoZWNrcyBmb3IgY2xpY2tzIG9uIHRoZSBzY3JvbGwgYmFyXHJcbiAgICAgICAgICAgICAgICBpZiAoZS5vZmZzZXRYID4gZS50YXJnZXQuY2xpZW50V2lkdGggfHwgZS5vZmZzZXRZID4gZS50YXJnZXQuY2xpZW50SGVpZ2h0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKG5ldyBEYXRlKCkuZ2V0VGltZSgpIC0gZHJhZ0xhc3RUaW1lIDwgd2luZG93LndhaWxzLmZsYWdzLmRiQ2xpY2tJbnRlcnZhbCkge1xyXG4gICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KGRyYWdUaW1lT3V0KTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGRyYWdUaW1lT3V0ID0gc2V0VGltZW91dChkcmFnLCB3aW5kb3cud2FpbHMuZmxhZ3MuZGJDbGlja0ludGVydmFsKTtcclxuICAgICAgICAgICAgZHJhZ0xhc3RUaW1lID0gbmV3IERhdGUoKS5nZXRUaW1lKCk7XHJcbiAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGN1cnJlbnRFbGVtZW50ID0gY3VycmVudEVsZW1lbnQucGFyZW50RWxlbWVudDtcclxuICAgIH1cclxufSk7XHJcblxyXG5mdW5jdGlvbiBzZXRSZXNpemUoY3Vyc29yKSB7XHJcbiAgICBkb2N1bWVudC5ib2R5LnN0eWxlLmN1cnNvciA9IGN1cnNvciB8fCB3aW5kb3cud2FpbHMuZmxhZ3MuZGVmYXVsdEN1cnNvcjtcclxuICAgIHdpbmRvdy53YWlscy5mbGFncy5yZXNpemVFZGdlID0gY3Vyc29yO1xyXG59XHJcblxyXG53aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vtb3ZlJywgZnVuY3Rpb24gKGUpIHtcclxuICAgIGlmICghd2luZG93LndhaWxzLmZsYWdzLmVuYWJsZVJlc2l6ZSkge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGlmICh3aW5kb3cud2FpbHMuZmxhZ3MuZGVmYXVsdEN1cnNvciA9PSBudWxsKSB7XHJcbiAgICAgICAgd2luZG93LndhaWxzLmZsYWdzLmRlZmF1bHRDdXJzb3IgPSBkb2N1bWVudC5ib2R5LnN0eWxlLmN1cnNvcjtcclxuICAgIH1cclxuICAgIGlmICh3aW5kb3cub3V0ZXJXaWR0aCAtIGUuY2xpZW50WCA8IHdpbmRvdy53YWlscy5mbGFncy5ib3JkZXJUaGlja25lc3MgJiYgd2luZG93Lm91dGVySGVpZ2h0IC0gZS5jbGllbnRZIDwgd2luZG93LndhaWxzLmZsYWdzLmJvcmRlclRoaWNrbmVzcykge1xyXG4gICAgICAgIGRvY3VtZW50LmJvZHkuc3R5bGUuY3Vyc29yID0gXCJzZS1yZXNpemVcIjtcclxuICAgIH1cclxuICAgIGxldCByaWdodEJvcmRlciA9IHdpbmRvdy5vdXRlcldpZHRoIC0gZS5jbGllbnRYIDwgd2luZG93LndhaWxzLmZsYWdzLmJvcmRlclRoaWNrbmVzcztcclxuICAgIGxldCBsZWZ0Qm9yZGVyID0gZS5jbGllbnRYIDwgd2luZG93LndhaWxzLmZsYWdzLmJvcmRlclRoaWNrbmVzcztcclxuICAgIGxldCB0b3BCb3JkZXIgPSBlLmNsaWVudFkgPCB3aW5kb3cud2FpbHMuZmxhZ3MuYm9yZGVyVGhpY2tuZXNzO1xyXG4gICAgbGV0IGJvdHRvbUJvcmRlciA9IHdpbmRvdy5vdXRlckhlaWdodCAtIGUuY2xpZW50WSA8IHdpbmRvdy53YWlscy5mbGFncy5ib3JkZXJUaGlja25lc3M7XHJcblxyXG4gICAgLy8gSWYgd2UgYXJlbid0IG9uIGFuIGVkZ2UsIGJ1dCB3ZXJlLCByZXNldCB0aGUgY3Vyc29yIHRvIGRlZmF1bHRcclxuICAgIGlmICghbGVmdEJvcmRlciAmJiAhcmlnaHRCb3JkZXIgJiYgIXRvcEJvcmRlciAmJiAhYm90dG9tQm9yZGVyICYmIHdpbmRvdy53YWlscy5mbGFncy5yZXNpemVFZGdlICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICBzZXRSZXNpemUoKTtcclxuICAgIH0gZWxzZSBpZiAocmlnaHRCb3JkZXIgJiYgYm90dG9tQm9yZGVyKSBzZXRSZXNpemUoXCJzZS1yZXNpemVcIik7XHJcbiAgICBlbHNlIGlmIChsZWZ0Qm9yZGVyICYmIGJvdHRvbUJvcmRlcikgc2V0UmVzaXplKFwic3ctcmVzaXplXCIpO1xyXG4gICAgZWxzZSBpZiAobGVmdEJvcmRlciAmJiB0b3BCb3JkZXIpIHNldFJlc2l6ZShcIm53LXJlc2l6ZVwiKTtcclxuICAgIGVsc2UgaWYgKHRvcEJvcmRlciAmJiByaWdodEJvcmRlcikgc2V0UmVzaXplKFwibmUtcmVzaXplXCIpO1xyXG4gICAgZWxzZSBpZiAobGVmdEJvcmRlcikgc2V0UmVzaXplKFwidy1yZXNpemVcIik7XHJcbiAgICBlbHNlIGlmICh0b3BCb3JkZXIpIHNldFJlc2l6ZShcIm4tcmVzaXplXCIpO1xyXG4gICAgZWxzZSBpZiAoYm90dG9tQm9yZGVyKSBzZXRSZXNpemUoXCJzLXJlc2l6ZVwiKTtcclxuICAgIGVsc2UgaWYgKHJpZ2h0Qm9yZGVyKSBzZXRSZXNpemUoXCJlLXJlc2l6ZVwiKTtcclxuXHJcbn0pO1xyXG5cclxuLy8gU2V0dXAgY29udGV4dCBtZW51IGhvb2tcclxud2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2NvbnRleHRtZW51JywgZnVuY3Rpb24gKGUpIHtcclxuICAgIGlmICh3aW5kb3cud2FpbHMuZmxhZ3MuZGlzYWJsZVdhaWxzRGVmYXVsdENvbnRleHRNZW51KSB7XHJcbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgfVxyXG59KTsiXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBa0JBLDBCQUF3QixPQUFPLFNBQVM7QUFJdkMsV0FBTyxZQUFZLE1BQU0sUUFBUTtBQUFBO0FBUzNC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 +//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiZGVza3RvcC9sb2cuanMiLCAiZGVza3RvcC9ldmVudHMuanMiLCAiZGVza3RvcC9jYWxscy5qcyIsICJkZXNrdG9wL2JpbmRpbmdzLmpzIiwgImRlc2t0b3Avd2luZG93LmpzIiwgImRlc2t0b3AvYnJvd3Nlci5qcyIsICJkZXNrdG9wL21haW4uanMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qXHJcbiBfICAgICAgIF9fICAgICAgXyBfX1xyXG58IHwgICAgIC8gL19fXyBfKF8pIC9fX19fXHJcbnwgfCAvfCAvIC8gX18gYC8gLyAvIF9fXy9cclxufCB8LyB8LyAvIC9fLyAvIC8gKF9fICApXHJcbnxfXy98X18vXFxfXyxfL18vXy9fX19fL1xyXG5UaGUgZWxlY3Ryb24gYWx0ZXJuYXRpdmUgZm9yIEdvXHJcbihjKSBMZWEgQW50aG9ueSAyMDE5LXByZXNlbnRcclxuKi9cclxuXHJcbi8qIGpzaGludCBlc3ZlcnNpb246IDYgKi9cclxuXHJcbi8qKlxyXG4gKiBTZW5kcyBhIGxvZyBtZXNzYWdlIHRvIHRoZSBiYWNrZW5kIHdpdGggdGhlIGdpdmVuIGxldmVsICsgbWVzc2FnZVxyXG4gKlxyXG4gKiBAcGFyYW0ge3N0cmluZ30gbGV2ZWxcclxuICogQHBhcmFtIHtzdHJpbmd9IG1lc3NhZ2VcclxuICovXHJcbmZ1bmN0aW9uIHNlbmRMb2dNZXNzYWdlKGxldmVsLCBtZXNzYWdlKSB7XHJcblxyXG5cdC8vIExvZyBNZXNzYWdlIGZvcm1hdDpcclxuXHQvLyBsW3R5cGVdW21lc3NhZ2VdXHJcblx0d2luZG93LldhaWxzSW52b2tlKCdMJyArIGxldmVsICsgbWVzc2FnZSk7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBMb2cgdGhlIGdpdmVuIHRyYWNlIG1lc3NhZ2Ugd2l0aCB0aGUgYmFja2VuZFxyXG4gKlxyXG4gKiBAZXhwb3J0XHJcbiAqIEBwYXJhbSB7c3RyaW5nfSBtZXNzYWdlXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gTG9nVHJhY2UobWVzc2FnZSkge1xyXG5cdHNlbmRMb2dNZXNzYWdlKCdUJywgbWVzc2FnZSk7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBMb2cgdGhlIGdpdmVuIG1lc3NhZ2Ugd2l0aCB0aGUgYmFja2VuZFxyXG4gKlxyXG4gKiBAZXhwb3J0XHJcbiAqIEBwYXJhbSB7c3RyaW5nfSBtZXNzYWdlXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gTG9nUHJpbnQobWVzc2FnZSkge1xyXG5cdHNlbmRMb2dNZXNzYWdlKCdQJywgbWVzc2FnZSk7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBMb2cgdGhlIGdpdmVuIGRlYnVnIG1lc3NhZ2Ugd2l0aCB0aGUgYmFja2VuZFxyXG4gKlxyXG4gKiBAZXhwb3J0XHJcbiAqIEBwYXJhbSB7c3RyaW5nfSBtZXNzYWdlXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gTG9nRGVidWcobWVzc2FnZSkge1xyXG5cdHNlbmRMb2dNZXNzYWdlKCdEJywgbWVzc2FnZSk7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBMb2cgdGhlIGdpdmVuIGluZm8gbWVzc2FnZSB3aXRoIHRoZSBiYWNrZW5kXHJcbiAqXHJcbiAqIEBleHBvcnRcclxuICogQHBhcmFtIHtzdHJpbmd9IG1lc3NhZ2VcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBMb2dJbmZvKG1lc3NhZ2UpIHtcclxuXHRzZW5kTG9nTWVzc2FnZSgnSScsIG1lc3NhZ2UpO1xyXG59XHJcblxyXG4vKipcclxuICogTG9nIHRoZSBnaXZlbiB3YXJuaW5nIG1lc3NhZ2Ugd2l0aCB0aGUgYmFja2VuZFxyXG4gKlxyXG4gKiBAZXhwb3J0XHJcbiAqIEBwYXJhbSB7c3RyaW5nfSBtZXNzYWdlXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gTG9nV2FybmluZyhtZXNzYWdlKSB7XHJcblx0c2VuZExvZ01lc3NhZ2UoJ1cnLCBtZXNzYWdlKTtcclxufVxyXG5cclxuLyoqXHJcbiAqIExvZyB0aGUgZ2l2ZW4gZXJyb3IgbWVzc2FnZSB3aXRoIHRoZSBiYWNrZW5kXHJcbiAqXHJcbiAqIEBleHBvcnRcclxuICogQHBhcmFtIHtzdHJpbmd9IG1lc3NhZ2VcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBMb2dFcnJvcihtZXNzYWdlKSB7XHJcblx0c2VuZExvZ01lc3NhZ2UoJ0UnLCBtZXNzYWdlKTtcclxufVxyXG5cclxuLyoqXHJcbiAqIExvZyB0aGUgZ2l2ZW4gZmF0YWwgbWVzc2FnZSB3aXRoIHRoZSBiYWNrZW5kXHJcbiAqXHJcbiAqIEBleHBvcnRcclxuICogQHBhcmFtIHtzdHJpbmd9IG1lc3NhZ2VcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBMb2dGYXRhbChtZXNzYWdlKSB7XHJcblx0c2VuZExvZ01lc3NhZ2UoJ0YnLCBtZXNzYWdlKTtcclxufVxyXG5cclxuLyoqXHJcbiAqIFNldHMgdGhlIExvZyBsZXZlbCB0byB0aGUgZ2l2ZW4gbG9nIGxldmVsXHJcbiAqXHJcbiAqIEBleHBvcnRcclxuICogQHBhcmFtIHtudW1iZXJ9IGxvZ2xldmVsXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gU2V0TG9nTGV2ZWwobG9nbGV2ZWwpIHtcclxuXHRzZW5kTG9nTWVzc2FnZSgnUycsIGxvZ2xldmVsKTtcclxufVxyXG5cclxuLy8gTG9nIGxldmVsc1xyXG5leHBvcnQgY29uc3QgTG9nTGV2ZWwgPSB7XHJcblx0VFJBQ0U6IDEsXHJcblx0REVCVUc6IDIsXHJcblx0SU5GTzogMyxcclxuXHRXQVJOSU5HOiA0LFxyXG5cdEVSUk9SOiA1LFxyXG59O1xyXG4iLCAiLypcclxuIF8gICAgICAgX18gICAgICBfIF9fXHJcbnwgfCAgICAgLyAvX19fIF8oXykgL19fX19cclxufCB8IC98IC8gLyBfXyBgLyAvIC8gX19fL1xyXG58IHwvIHwvIC8gL18vIC8gLyAoX18gIClcclxufF9fL3xfXy9cXF9fLF8vXy9fL19fX18vXHJcblRoZSBlbGVjdHJvbiBhbHRlcm5hdGl2ZSBmb3IgR29cclxuKGMpIExlYSBBbnRob255IDIwMTktcHJlc2VudFxyXG4qL1xyXG4vKiBqc2hpbnQgZXN2ZXJzaW9uOiA2ICovXHJcblxyXG4vLyBEZWZpbmVzIGEgc2luZ2xlIGxpc3RlbmVyIHdpdGggYSBtYXhpbXVtIG51bWJlciBvZiB0aW1lcyB0byBjYWxsYmFja1xyXG5cclxuLyoqXHJcbiAqIFRoZSBMaXN0ZW5lciBjbGFzcyBkZWZpbmVzIGEgbGlzdGVuZXIhIDotKVxyXG4gKlxyXG4gKiBAY2xhc3MgTGlzdGVuZXJcclxuICovXHJcbmNsYXNzIExpc3RlbmVyIHtcclxuICAgIC8qKlxyXG4gICAgICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiBMaXN0ZW5lci5cclxuICAgICAqIEBwYXJhbSB7ZnVuY3Rpb259IGNhbGxiYWNrXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gbWF4Q2FsbGJhY2tzXHJcbiAgICAgKiBAbWVtYmVyb2YgTGlzdGVuZXJcclxuICAgICAqL1xyXG4gICAgY29uc3RydWN0b3IoY2FsbGJhY2ssIG1heENhbGxiYWNrcykge1xyXG4gICAgICAgIC8vIERlZmF1bHQgb2YgLTEgbWVhbnMgaW5maW5pdGVcclxuICAgICAgICBtYXhDYWxsYmFja3MgPSBtYXhDYWxsYmFja3MgfHwgLTE7XHJcbiAgICAgICAgLy8gQ2FsbGJhY2sgaW52b2tlcyB0aGUgY2FsbGJhY2sgd2l0aCB0aGUgZ2l2ZW4gZGF0YVxyXG4gICAgICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGlzIGxpc3RlbmVyIHNob3VsZCBiZSBkZXN0cm95ZWRcclxuICAgICAgICB0aGlzLkNhbGxiYWNrID0gKGRhdGEpID0+IHtcclxuICAgICAgICAgICAgY2FsbGJhY2suYXBwbHkobnVsbCwgZGF0YSk7XHJcbiAgICAgICAgICAgIC8vIElmIG1heENhbGxiYWNrcyBpcyBpbmZpbml0ZSwgcmV0dXJuIGZhbHNlIChkbyBub3QgZGVzdHJveSlcclxuICAgICAgICAgICAgaWYgKG1heENhbGxiYWNrcyA9PT0gLTEpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvLyBEZWNyZW1lbnQgbWF4Q2FsbGJhY2tzLiBSZXR1cm4gdHJ1ZSBpZiBub3cgMCwgb3RoZXJ3aXNlIGZhbHNlXHJcbiAgICAgICAgICAgIG1heENhbGxiYWNrcyAtPSAxO1xyXG4gICAgICAgICAgICByZXR1cm4gbWF4Q2FsbGJhY2tzID09PSAwO1xyXG4gICAgICAgIH07XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBjb25zdCBldmVudExpc3RlbmVycyA9IHt9O1xyXG5cclxuLyoqXHJcbiAqIFJlZ2lzdGVycyBhbiBldmVudCBsaXN0ZW5lciB0aGF0IHdpbGwgYmUgaW52b2tlZCBgbWF4Q2FsbGJhY2tzYCB0aW1lcyBiZWZvcmUgYmVpbmcgZGVzdHJveWVkXHJcbiAqXHJcbiAqIEBleHBvcnRcclxuICogQHBhcmFtIHtzdHJpbmd9IGV2ZW50TmFtZVxyXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBjYWxsYmFja1xyXG4gKiBAcGFyYW0ge251bWJlcn0gbWF4Q2FsbGJhY2tzXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gRXZlbnRzT25NdWx0aXBsZShldmVudE5hbWUsIGNhbGxiYWNrLCBtYXhDYWxsYmFja3MpIHtcclxuICAgIGV2ZW50TGlzdGVuZXJzW2V2ZW50TmFtZV0gPSBldmVudExpc3RlbmVyc1tldmVudE5hbWVdIHx8IFtdO1xyXG4gICAgY29uc3QgdGhpc0xpc3RlbmVyID0gbmV3IExpc3RlbmVyKGNhbGxiYWNrLCBtYXhDYWxsYmFja3MpO1xyXG4gICAgZXZlbnRMaXN0ZW5lcnNbZXZlbnROYW1lXS5wdXNoKHRoaXNMaXN0ZW5lcik7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBSZWdpc3RlcnMgYW4gZXZlbnQgbGlzdGVuZXIgdGhhdCB3aWxsIGJlIGludm9rZWQgZXZlcnkgdGltZSB0aGUgZXZlbnQgaXMgZW1pdHRlZFxyXG4gKlxyXG4gKiBAZXhwb3J0XHJcbiAqIEBwYXJhbSB7c3RyaW5nfSBldmVudE5hbWVcclxuICogQHBhcmFtIHtmdW5jdGlvbn0gY2FsbGJhY2tcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBFdmVudHNPbihldmVudE5hbWUsIGNhbGxiYWNrKSB7XHJcbiAgICBFdmVudHNPbk11bHRpcGxlKGV2ZW50TmFtZSwgY2FsbGJhY2ssIC0xKTtcclxufVxyXG5cclxuLyoqXHJcbiAqIFJlZ2lzdGVycyBhbiBldmVudCBsaXN0ZW5lciB0aGF0IHdpbGwgYmUgaW52b2tlZCBvbmNlIHRoZW4gZGVzdHJveWVkXHJcbiAqXHJcbiAqIEBleHBvcnRcclxuICogQHBhcmFtIHtzdHJpbmd9IGV2ZW50TmFtZVxyXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBjYWxsYmFja1xyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIEV2ZW50c09uY2UoZXZlbnROYW1lLCBjYWxsYmFjaykge1xyXG4gICAgRXZlbnRzT25NdWx0aXBsZShldmVudE5hbWUsIGNhbGxiYWNrLCAxKTtcclxufVxyXG5cclxuZnVuY3Rpb24gbm90aWZ5TGlzdGVuZXJzKGV2ZW50RGF0YSkge1xyXG5cclxuICAgIC8vIEdldCB0aGUgZXZlbnQgbmFtZVxyXG4gICAgbGV0IGV2ZW50TmFtZSA9IGV2ZW50RGF0YS5uYW1lO1xyXG5cclxuICAgIC8vIENoZWNrIGlmIHdlIGhhdmUgYW55IGxpc3RlbmVycyBmb3IgdGhpcyBldmVudFxyXG4gICAgaWYgKGV2ZW50TGlzdGVuZXJzW2V2ZW50TmFtZV0pIHtcclxuXHJcbiAgICAgICAgLy8gS2VlcCBhIGxpc3Qgb2YgbGlzdGVuZXIgaW5kZXhlcyB0byBkZXN0cm95XHJcbiAgICAgICAgY29uc3QgbmV3RXZlbnRMaXN0ZW5lckxpc3QgPSBldmVudExpc3RlbmVyc1tldmVudE5hbWVdLnNsaWNlKCk7XHJcblxyXG4gICAgICAgIC8vIEl0ZXJhdGUgbGlzdGVuZXJzXHJcbiAgICAgICAgZm9yIChsZXQgY291bnQgPSAwOyBjb3VudCA8IGV2ZW50TGlzdGVuZXJzW2V2ZW50TmFtZV0ubGVuZ3RoOyBjb3VudCArPSAxKSB7XHJcblxyXG4gICAgICAgICAgICAvLyBHZXQgbmV4dCBsaXN0ZW5lclxyXG4gICAgICAgICAgICBjb25zdCBsaXN0ZW5lciA9IGV2ZW50TGlzdGVuZXJzW2V2ZW50TmFtZV1bY291bnRdO1xyXG5cclxuICAgICAgICAgICAgbGV0IGRhdGEgPSBldmVudERhdGEuZGF0YTtcclxuXHJcbiAgICAgICAgICAgIC8vIERvIHRoZSBjYWxsYmFja1xyXG4gICAgICAgICAgICBjb25zdCBkZXN0cm95ID0gbGlzdGVuZXIuQ2FsbGJhY2soZGF0YSk7XHJcbiAgICAgICAgICAgIGlmIChkZXN0cm95KSB7XHJcbiAgICAgICAgICAgICAgICAvLyBpZiB0aGUgbGlzdGVuZXIgaW5kaWNhdGVkIHRvIGRlc3Ryb3kgaXRzZWxmLCBhZGQgaXQgdG8gdGhlIGRlc3Ryb3kgbGlzdFxyXG4gICAgICAgICAgICAgICAgbmV3RXZlbnRMaXN0ZW5lckxpc3Quc3BsaWNlKGNvdW50LCAxKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gVXBkYXRlIGNhbGxiYWNrcyB3aXRoIG5ldyBsaXN0IG9mIGxpc3RlbmVyc1xyXG4gICAgICAgIGV2ZW50TGlzdGVuZXJzW2V2ZW50TmFtZV0gPSBuZXdFdmVudExpc3RlbmVyTGlzdDtcclxuICAgIH1cclxufVxyXG5cclxuLyoqXHJcbiAqIE5vdGlmeSBpbmZvcm1zIGZyb250ZW5kIGxpc3RlbmVycyB0aGF0IGFuIGV2ZW50IHdhcyBlbWl0dGVkIHdpdGggdGhlIGdpdmVuIGRhdGFcclxuICpcclxuICogQGV4cG9ydFxyXG4gKiBAcGFyYW0ge3N0cmluZ30gbm90aWZ5TWVzc2FnZSAtIGVuY29kZWQgbm90aWZpY2F0aW9uIG1lc3NhZ2VcclxuXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gRXZlbnRzTm90aWZ5KG5vdGlmeU1lc3NhZ2UpIHtcclxuICAgIC8vIFBhcnNlIHRoZSBtZXNzYWdlXHJcbiAgICBsZXQgbWVzc2FnZTtcclxuICAgIHRyeSB7XHJcbiAgICAgICAgbWVzc2FnZSA9IEpTT04ucGFyc2Uobm90aWZ5TWVzc2FnZSk7XHJcbiAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgY29uc3QgZXJyb3IgPSAnSW52YWxpZCBKU09OIHBhc3NlZCB0byBOb3RpZnk6ICcgKyBub3RpZnlNZXNzYWdlO1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihlcnJvcik7XHJcbiAgICB9XHJcbiAgICBub3RpZnlMaXN0ZW5lcnMobWVzc2FnZSk7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBFbWl0IGFuIGV2ZW50IHdpdGggdGhlIGdpdmVuIG5hbWUgYW5kIGRhdGFcclxuICpcclxuICogQGV4cG9ydFxyXG4gKiBAcGFyYW0ge3N0cmluZ30gZXZlbnROYW1lXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gRXZlbnRzRW1pdChldmVudE5hbWUpIHtcclxuXHJcbiAgICBjb25zdCBwYXlsb2FkID0ge1xyXG4gICAgICAgIG5hbWU6IGV2ZW50TmFtZSxcclxuICAgICAgICBkYXRhOiBbXS5zbGljZS5hcHBseShhcmd1bWVudHMpLnNsaWNlKDEpLFxyXG4gICAgfTtcclxuXHJcbiAgICAvLyBOb3RpZnkgSlMgbGlzdGVuZXJzXHJcbiAgICBub3RpZnlMaXN0ZW5lcnMocGF5bG9hZCk7XHJcblxyXG4gICAgLy8gTm90aWZ5IEdvIGxpc3RlbmVyc1xyXG4gICAgd2luZG93LldhaWxzSW52b2tlKCdFRScgKyBKU09OLnN0cmluZ2lmeShwYXlsb2FkKSk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBFdmVudHNPZmYoZXZlbnROYW1lKSB7XHJcbiAgICAvLyBSZW1vdmUgbG9jYWwgbGlzdGVuZXJzXHJcbiAgICBkZWxldGUgZXZlbnRMaXN0ZW5lcnNbZXZlbnROYW1lXTtcclxuXHJcbiAgICAvLyBOb3RpZnkgR28gbGlzdGVuZXJzXHJcbiAgICB3aW5kb3cuV2FpbHNJbnZva2UoJ0VYJyArIGV2ZW50TmFtZSk7XHJcbn0iLCAiLypcclxuIF8gICAgICAgX18gICAgICBfIF9fXHJcbnwgfCAgICAgLyAvX19fIF8oXykgL19fX19cclxufCB8IC98IC8gLyBfXyBgLyAvIC8gX19fL1xyXG58IHwvIHwvIC8gL18vIC8gLyAoX18gIClcclxufF9fL3xfXy9cXF9fLF8vXy9fL19fX18vXHJcblRoZSBlbGVjdHJvbiBhbHRlcm5hdGl2ZSBmb3IgR29cclxuKGMpIExlYSBBbnRob255IDIwMTktcHJlc2VudFxyXG4qL1xyXG4vKiBqc2hpbnQgZXN2ZXJzaW9uOiA2ICovXHJcblxyXG5leHBvcnQgY29uc3QgY2FsbGJhY2tzID0ge307XHJcblxyXG4vKipcclxuICogUmV0dXJucyBhIG51bWJlciBmcm9tIHRoZSBuYXRpdmUgYnJvd3NlciByYW5kb20gZnVuY3Rpb25cclxuICpcclxuICogQHJldHVybnMgbnVtYmVyXHJcbiAqL1xyXG5mdW5jdGlvbiBjcnlwdG9SYW5kb20oKSB7XHJcblx0dmFyIGFycmF5ID0gbmV3IFVpbnQzMkFycmF5KDEpO1xyXG5cdHJldHVybiB3aW5kb3cuY3J5cHRvLmdldFJhbmRvbVZhbHVlcyhhcnJheSlbMF07XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBSZXR1cm5zIGEgbnVtYmVyIHVzaW5nIGRhIG9sZC1za29vbCBNYXRoLlJhbmRvbVxyXG4gKiBJIGxpa2VzIHRvIGNhbGwgaXQgTE9MUmFuZG9tXHJcbiAqXHJcbiAqIEByZXR1cm5zIG51bWJlclxyXG4gKi9cclxuZnVuY3Rpb24gYmFzaWNSYW5kb20oKSB7XHJcblx0cmV0dXJuIE1hdGgucmFuZG9tKCkgKiA5MDA3MTk5MjU0NzQwOTkxO1xyXG59XHJcblxyXG4vLyBQaWNrIGEgcmFuZG9tIG51bWJlciBmdW5jdGlvbiBiYXNlZCBvbiBicm93c2VyIGNhcGFiaWxpdHlcclxudmFyIHJhbmRvbUZ1bmM7XHJcbmlmICh3aW5kb3cuY3J5cHRvKSB7XHJcblx0cmFuZG9tRnVuYyA9IGNyeXB0b1JhbmRvbTtcclxufSBlbHNlIHtcclxuXHRyYW5kb21GdW5jID0gYmFzaWNSYW5kb207XHJcbn1cclxuXHJcblxyXG4vKipcclxuICogQ2FsbCBzZW5kcyBhIG1lc3NhZ2UgdG8gdGhlIGJhY2tlbmQgdG8gY2FsbCB0aGUgYmluZGluZyB3aXRoIHRoZVxyXG4gKiBnaXZlbiBkYXRhLiBBIHByb21pc2UgaXMgcmV0dXJuZWQgYW5kIHdpbGwgYmUgY29tcGxldGVkIHdoZW4gdGhlXHJcbiAqIGJhY2tlbmQgcmVzcG9uZHMuIFRoaXMgd2lsbCBiZSByZXNvbHZlZCB3aGVuIHRoZSBjYWxsIHdhcyBzdWNjZXNzZnVsXHJcbiAqIG9yIHJlamVjdGVkIGlmIGFuIGVycm9yIGlzIHBhc3NlZCBiYWNrLlxyXG4gKiBUaGVyZSBpcyBhIHRpbWVvdXQgbWVjaGFuaXNtLiBJZiB0aGUgY2FsbCBkb2Vzbid0IHJlc3BvbmQgaW4gdGhlIGdpdmVuXHJcbiAqIHRpbWUgKGluIG1pbGxpc2Vjb25kcykgdGhlbiB0aGUgcHJvbWlzZSBpcyByZWplY3RlZC5cclxuICpcclxuICogQGV4cG9ydFxyXG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxyXG4gKiBAcGFyYW0ge2FueT19IGFyZ3NcclxuICogQHBhcmFtIHtudW1iZXI9fSB0aW1lb3V0XHJcbiAqIEByZXR1cm5zXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gQ2FsbChuYW1lLCBhcmdzLCB0aW1lb3V0KSB7XHJcblxyXG5cdC8vIFRpbWVvdXQgaW5maW5pdGUgYnkgZGVmYXVsdFxyXG5cdGlmICh0aW1lb3V0ID09IG51bGwpIHtcclxuXHRcdHRpbWVvdXQgPSAwO1xyXG5cdH1cclxuXHJcblx0Ly8gQ3JlYXRlIGEgcHJvbWlzZVxyXG5cdHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XHJcblxyXG5cdFx0Ly8gQ3JlYXRlIGEgdW5pcXVlIGNhbGxiYWNrSURcclxuXHRcdHZhciBjYWxsYmFja0lEO1xyXG5cdFx0ZG8ge1xyXG5cdFx0XHRjYWxsYmFja0lEID0gbmFtZSArICctJyArIHJhbmRvbUZ1bmMoKTtcclxuXHRcdH0gd2hpbGUgKGNhbGxiYWNrc1tjYWxsYmFja0lEXSk7XHJcblxyXG5cdFx0dmFyIHRpbWVvdXRIYW5kbGU7XHJcblx0XHQvLyBTZXQgdGltZW91dFxyXG5cdFx0aWYgKHRpbWVvdXQgPiAwKSB7XHJcblx0XHRcdHRpbWVvdXRIYW5kbGUgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcclxuXHRcdFx0XHRyZWplY3QoRXJyb3IoJ0NhbGwgdG8gJyArIG5hbWUgKyAnIHRpbWVkIG91dC4gUmVxdWVzdCBJRDogJyArIGNhbGxiYWNrSUQpKTtcclxuXHRcdFx0fSwgdGltZW91dCk7XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gU3RvcmUgY2FsbGJhY2tcclxuXHRcdGNhbGxiYWNrc1tjYWxsYmFja0lEXSA9IHtcclxuXHRcdFx0dGltZW91dEhhbmRsZTogdGltZW91dEhhbmRsZSxcclxuXHRcdFx0cmVqZWN0OiByZWplY3QsXHJcblx0XHRcdHJlc29sdmU6IHJlc29sdmVcclxuXHRcdH07XHJcblxyXG5cdFx0dHJ5IHtcclxuXHRcdFx0Y29uc3QgcGF5bG9hZCA9IHtcclxuXHRcdFx0XHRuYW1lLFxyXG5cdFx0XHRcdGFyZ3MsXHJcblx0XHRcdFx0Y2FsbGJhY2tJRCxcclxuXHRcdFx0fTtcclxuXHJcblx0XHRcdC8vIE1ha2UgdGhlIGNhbGxcclxuXHRcdFx0d2luZG93LldhaWxzSW52b2tlKCdDJyArIEpTT04uc3RyaW5naWZ5KHBheWxvYWQpKTtcclxuXHRcdH0gY2F0Y2ggKGUpIHtcclxuXHRcdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lXHJcblx0XHRcdGNvbnNvbGUuZXJyb3IoZSk7XHJcblx0XHR9XHJcblx0fSk7XHJcbn1cclxuXHJcblxyXG5cclxuLyoqXHJcbiAqIENhbGxlZCBieSB0aGUgYmFja2VuZCB0byByZXR1cm4gZGF0YSB0byBhIHByZXZpb3VzbHkgY2FsbGVkXHJcbiAqIGJpbmRpbmcgaW52b2NhdGlvblxyXG4gKlxyXG4gKiBAZXhwb3J0XHJcbiAqIEBwYXJhbSB7c3RyaW5nfSBpbmNvbWluZ01lc3NhZ2VcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBDYWxsYmFjayhpbmNvbWluZ01lc3NhZ2UpIHtcclxuXHQvLyBQYXJzZSB0aGUgbWVzc2FnZVxyXG5cdGxldCBtZXNzYWdlO1xyXG5cdHRyeSB7XHJcblx0XHRtZXNzYWdlID0gSlNPTi5wYXJzZShpbmNvbWluZ01lc3NhZ2UpO1xyXG5cdH0gY2F0Y2ggKGUpIHtcclxuXHRcdGNvbnN0IGVycm9yID0gYEludmFsaWQgSlNPTiBwYXNzZWQgdG8gY2FsbGJhY2s6ICR7ZS5tZXNzYWdlfS4gTWVzc2FnZTogJHtpbmNvbWluZ01lc3NhZ2V9YDtcclxuXHRcdHJ1bnRpbWUuTG9nRGVidWcoZXJyb3IpO1xyXG5cdFx0dGhyb3cgbmV3IEVycm9yKGVycm9yKTtcclxuXHR9XHJcblx0bGV0IGNhbGxiYWNrSUQgPSBtZXNzYWdlLmNhbGxiYWNraWQ7XHJcblx0bGV0IGNhbGxiYWNrRGF0YSA9IGNhbGxiYWNrc1tjYWxsYmFja0lEXTtcclxuXHRpZiAoIWNhbGxiYWNrRGF0YSkge1xyXG5cdFx0Y29uc3QgZXJyb3IgPSBgQ2FsbGJhY2sgJyR7Y2FsbGJhY2tJRH0nIG5vdCByZWdpc3RlcmVkISEhYDtcclxuXHRcdGNvbnNvbGUuZXJyb3IoZXJyb3IpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lXHJcblx0XHR0aHJvdyBuZXcgRXJyb3IoZXJyb3IpO1xyXG5cdH1cclxuXHRjbGVhclRpbWVvdXQoY2FsbGJhY2tEYXRhLnRpbWVvdXRIYW5kbGUpO1xyXG5cclxuXHRkZWxldGUgY2FsbGJhY2tzW2NhbGxiYWNrSURdO1xyXG5cclxuXHRpZiAobWVzc2FnZS5lcnJvcikge1xyXG5cdFx0Y2FsbGJhY2tEYXRhLnJlamVjdChtZXNzYWdlLmVycm9yKTtcclxuXHR9IGVsc2Uge1xyXG5cdFx0Y2FsbGJhY2tEYXRhLnJlc29sdmUobWVzc2FnZS5yZXN1bHQpO1xyXG5cdH1cclxufVxyXG4iLCAiLypcclxuIF8gICAgICAgX18gICAgICBfIF9fICAgIFxyXG58IHwgICAgIC8gL19fXyBfKF8pIC9fX19fXHJcbnwgfCAvfCAvIC8gX18gYC8gLyAvIF9fXy9cclxufCB8LyB8LyAvIC9fLyAvIC8gKF9fICApIFxyXG58X18vfF9fL1xcX18sXy9fL18vX19fXy8gIFxyXG5UaGUgZWxlY3Ryb24gYWx0ZXJuYXRpdmUgZm9yIEdvXHJcbihjKSBMZWEgQW50aG9ueSAyMDE5LXByZXNlbnRcclxuKi9cclxuLyoganNoaW50IGVzdmVyc2lvbjogNiAqL1xyXG5cclxuaW1wb3J0IHtDYWxsfSBmcm9tICcuL2NhbGxzJztcclxuXHJcbi8vIFRoaXMgaXMgd2hlcmUgd2UgYmluZCBnbyBtZXRob2Qgd3JhcHBlcnNcclxud2luZG93LmdvID0ge307XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gU2V0QmluZGluZ3MoYmluZGluZ3NNYXApIHtcclxuXHR0cnkge1xyXG5cdFx0YmluZGluZ3NNYXAgPSBKU09OLnBhcnNlKGJpbmRpbmdzTWFwKTtcclxuXHR9IGNhdGNoIChlKSB7XHJcblx0XHRjb25zb2xlLmVycm9yKGUpO1xyXG5cdH1cclxuXHJcblx0Ly8gSW5pdGlhbGlzZSB0aGUgYmluZGluZ3MgbWFwXHJcblx0d2luZG93LmdvID0gd2luZG93LmdvIHx8IHt9O1xyXG5cclxuXHQvLyBJdGVyYXRlIHBhY2thZ2UgbmFtZXNcclxuXHRPYmplY3Qua2V5cyhiaW5kaW5nc01hcCkuZm9yRWFjaCgocGFja2FnZU5hbWUpID0+IHtcclxuXHJcblx0XHQvLyBDcmVhdGUgaW5uZXIgbWFwIGlmIGl0IGRvZXNuJ3QgZXhpc3RcclxuXHRcdHdpbmRvdy5nb1twYWNrYWdlTmFtZV0gPSB3aW5kb3cuZ29bcGFja2FnZU5hbWVdIHx8IHt9O1xyXG5cclxuXHRcdC8vIEl0ZXJhdGUgc3RydWN0IG5hbWVzXHJcblx0XHRPYmplY3Qua2V5cyhiaW5kaW5nc01hcFtwYWNrYWdlTmFtZV0pLmZvckVhY2goKHN0cnVjdE5hbWUpID0+IHtcclxuXHJcblx0XHRcdC8vIENyZWF0ZSBpbm5lciBtYXAgaWYgaXQgZG9lc24ndCBleGlzdFxyXG5cdFx0XHR3aW5kb3cuZ29bcGFja2FnZU5hbWVdW3N0cnVjdE5hbWVdID0gd2luZG93LmdvW3BhY2thZ2VOYW1lXVtzdHJ1Y3ROYW1lXSB8fCB7fTtcclxuXHJcblx0XHRcdE9iamVjdC5rZXlzKGJpbmRpbmdzTWFwW3BhY2thZ2VOYW1lXVtzdHJ1Y3ROYW1lXSkuZm9yRWFjaCgobWV0aG9kTmFtZSkgPT4ge1xyXG5cclxuXHRcdFx0XHR3aW5kb3cuZ29bcGFja2FnZU5hbWVdW3N0cnVjdE5hbWVdW21ldGhvZE5hbWVdID0gZnVuY3Rpb24gKCkge1xyXG5cclxuXHRcdFx0XHRcdC8vIE5vIHRpbWVvdXQgYnkgZGVmYXVsdFxyXG5cdFx0XHRcdFx0bGV0IHRpbWVvdXQgPSAwO1xyXG5cclxuXHRcdFx0XHRcdC8vIEFjdHVhbCBmdW5jdGlvblxyXG5cdFx0XHRcdFx0ZnVuY3Rpb24gZHluYW1pYygpIHtcclxuXHRcdFx0XHRcdFx0Y29uc3QgYXJncyA9IFtdLnNsaWNlLmNhbGwoYXJndW1lbnRzKTtcclxuXHRcdFx0XHRcdFx0cmV0dXJuIENhbGwoW3BhY2thZ2VOYW1lLCBzdHJ1Y3ROYW1lLCBtZXRob2ROYW1lXS5qb2luKCcuJyksIGFyZ3MsIHRpbWVvdXQpO1xyXG5cdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdC8vIEFsbG93IHNldHRpbmcgdGltZW91dCB0byBmdW5jdGlvblxyXG5cdFx0XHRcdFx0ZHluYW1pYy5zZXRUaW1lb3V0ID0gZnVuY3Rpb24gKG5ld1RpbWVvdXQpIHtcclxuXHRcdFx0XHRcdFx0dGltZW91dCA9IG5ld1RpbWVvdXQ7XHJcblx0XHRcdFx0XHR9O1xyXG5cclxuXHRcdFx0XHRcdC8vIEFsbG93IGdldHRpbmcgdGltZW91dCB0byBmdW5jdGlvblxyXG5cdFx0XHRcdFx0ZHluYW1pYy5nZXRUaW1lb3V0ID0gZnVuY3Rpb24gKCkge1xyXG5cdFx0XHRcdFx0XHRyZXR1cm4gdGltZW91dDtcclxuXHRcdFx0XHRcdH07XHJcblxyXG5cdFx0XHRcdFx0cmV0dXJuIGR5bmFtaWM7XHJcblx0XHRcdFx0fSgpO1xyXG5cdFx0XHR9KTtcclxuXHRcdH0pO1xyXG5cdH0pO1xyXG59XHJcbiIsICIvKlxyXG4gX1x0ICAgX19cdCAgXyBfX1xyXG58IHxcdCAvIC9fX18gXyhfKSAvX19fX1xyXG58IHwgL3wgLyAvIF9fIGAvIC8gLyBfX18vXHJcbnwgfC8gfC8gLyAvXy8gLyAvIChfXyAgKVxyXG58X18vfF9fL1xcX18sXy9fL18vX19fXy9cclxuVGhlIGVsZWN0cm9uIGFsdGVybmF0aXZlIGZvciBHb1xyXG4oYykgTGVhIEFudGhvbnkgMjAxOS1wcmVzZW50XHJcbiovXHJcblxyXG4vKiBqc2hpbnQgZXN2ZXJzaW9uOiA5ICovXHJcblxyXG5cclxuaW1wb3J0IHsgQ2FsbCB9IGZyb20gXCIuL2NhbGxzXCI7XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gV2luZG93UmVsb2FkKCkge1xyXG4gICAgd2luZG93LmxvY2F0aW9uLnJlbG9hZCgpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gV2luZG93UmVsb2FkQXBwKCkge1xyXG4gICAgd2luZG93LldhaWxzSW52b2tlKCdXUicpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gV2luZG93U2V0U3lzdGVtRGVmYXVsdFRoZW1lKCkge1xyXG4gICAgd2luZG93LldhaWxzSW52b2tlKCdXQVNEVCcpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gV2luZG93U2V0TGlnaHRUaGVtZSgpIHtcclxuICAgIHdpbmRvdy5XYWlsc0ludm9rZSgnV0FMVCcpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gV2luZG93U2V0RGFya1RoZW1lKCkge1xyXG4gICAgd2luZG93LldhaWxzSW52b2tlKCdXQURUJyk7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBQbGFjZSB0aGUgd2luZG93IGluIHRoZSBjZW50ZXIgb2YgdGhlIHNjcmVlblxyXG4gKlxyXG4gKiBAZXhwb3J0XHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gV2luZG93Q2VudGVyKCkge1xyXG4gICAgd2luZG93LldhaWxzSW52b2tlKCdXYycpO1xyXG59XHJcblxyXG4vKipcclxuICogU2V0cyB0aGUgd2luZG93IHRpdGxlXHJcbiAqXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSB0aXRsZVxyXG4gKiBAZXhwb3J0XHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gV2luZG93U2V0VGl0bGUodGl0bGUpIHtcclxuICAgIHdpbmRvdy5XYWlsc0ludm9rZSgnV1QnICsgdGl0bGUpO1xyXG59XHJcblxyXG4vKipcclxuICogTWFrZXMgdGhlIHdpbmRvdyBnbyBmdWxsc2NyZWVuXHJcbiAqXHJcbiAqIEBleHBvcnRcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBXaW5kb3dGdWxsc2NyZWVuKCkge1xyXG4gICAgd2luZG93LldhaWxzSW52b2tlKCdXRicpO1xyXG59XHJcblxyXG4vKipcclxuICogUmV2ZXJ0cyB0aGUgd2luZG93IGZyb20gZnVsbHNjcmVlblxyXG4gKlxyXG4gKiBAZXhwb3J0XHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gV2luZG93VW5mdWxsc2NyZWVuKCkge1xyXG4gICAgd2luZG93LldhaWxzSW52b2tlKCdXZicpO1xyXG59XHJcblxyXG4vKipcclxuICogU2V0IHRoZSBTaXplIG9mIHRoZSB3aW5kb3dcclxuICpcclxuICogQGV4cG9ydFxyXG4gKiBAcGFyYW0ge251bWJlcn0gd2lkdGhcclxuICogQHBhcmFtIHtudW1iZXJ9IGhlaWdodFxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIFdpbmRvd1NldFNpemUod2lkdGgsIGhlaWdodCkge1xyXG4gICAgd2luZG93LldhaWxzSW52b2tlKCdXczonICsgd2lkdGggKyAnOicgKyBoZWlnaHQpO1xyXG59XHJcblxyXG4vKipcclxuICogR2V0IHRoZSBTaXplIG9mIHRoZSB3aW5kb3dcclxuICpcclxuICogQGV4cG9ydFxyXG4gKiBAcmV0dXJuIHtQcm9taXNlPHt3OiBudW1iZXIsIGg6IG51bWJlcn0+fSBUaGUgc2l6ZSBvZiB0aGUgd2luZG93XHJcblxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIFdpbmRvd0dldFNpemUoKSB7XHJcbiAgICByZXR1cm4gQ2FsbChcIjp3YWlsczpXaW5kb3dHZXRTaXplXCIpO1xyXG59XHJcblxyXG4vKipcclxuICogU2V0IHRoZSBtYXhpbXVtIHNpemUgb2YgdGhlIHdpbmRvd1xyXG4gKlxyXG4gKiBAZXhwb3J0XHJcbiAqIEBwYXJhbSB7bnVtYmVyfSB3aWR0aFxyXG4gKiBAcGFyYW0ge251bWJlcn0gaGVpZ2h0XHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gV2luZG93U2V0TWF4U2l6ZSh3aWR0aCwgaGVpZ2h0KSB7XHJcbiAgICB3aW5kb3cuV2FpbHNJbnZva2UoJ1daOicgKyB3aWR0aCArICc6JyArIGhlaWdodCk7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBTZXQgdGhlIG1pbmltdW0gc2l6ZSBvZiB0aGUgd2luZG93XHJcbiAqXHJcbiAqIEBleHBvcnRcclxuICogQHBhcmFtIHtudW1iZXJ9IHdpZHRoXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBoZWlnaHRcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBXaW5kb3dTZXRNaW5TaXplKHdpZHRoLCBoZWlnaHQpIHtcclxuICAgIHdpbmRvdy5XYWlsc0ludm9rZSgnV3o6JyArIHdpZHRoICsgJzonICsgaGVpZ2h0KTtcclxufVxyXG5cclxuXHJcblxyXG4vKipcclxuICogU2V0IHRoZSB3aW5kb3cgQWx3YXlzT25Ub3Agb3Igbm90IG9uIHRvcFxyXG4gKlxyXG4gKiBAZXhwb3J0XHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gV2luZG93U2V0QWx3YXlzT25Ub3AoYikge1xyXG5cclxuICAgIHdpbmRvdy5XYWlsc0ludm9rZSgnV0FUUDonICsgKGIgPyAnMScgOiAnMCcpKTtcclxufVxyXG5cclxuXHJcblxyXG5cclxuLyoqXHJcbiAqIFNldCB0aGUgUG9zaXRpb24gb2YgdGhlIHdpbmRvd1xyXG4gKlxyXG4gKiBAZXhwb3J0XHJcbiAqIEBwYXJhbSB7bnVtYmVyfSB4XHJcbiAqIEBwYXJhbSB7bnVtYmVyfSB5XHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gV2luZG93U2V0UG9zaXRpb24oeCwgeSkge1xyXG4gICAgd2luZG93LldhaWxzSW52b2tlKCdXcDonICsgeCArICc6JyArIHkpO1xyXG59XHJcblxyXG4vKipcclxuICogR2V0IHRoZSBQb3NpdGlvbiBvZiB0aGUgd2luZG93XHJcbiAqXHJcbiAqIEBleHBvcnRcclxuICogQHJldHVybiB7UHJvbWlzZTx7eDogbnVtYmVyLCB5OiBudW1iZXJ9Pn0gVGhlIHBvc2l0aW9uIG9mIHRoZSB3aW5kb3dcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBXaW5kb3dHZXRQb3NpdGlvbigpIHtcclxuICAgIHJldHVybiBDYWxsKFwiOndhaWxzOldpbmRvd0dldFBvc1wiKTtcclxufVxyXG5cclxuLyoqXHJcbiAqIEhpZGUgdGhlIFdpbmRvd1xyXG4gKlxyXG4gKiBAZXhwb3J0XHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gV2luZG93SGlkZSgpIHtcclxuICAgIHdpbmRvdy5XYWlsc0ludm9rZSgnV0gnKTtcclxufVxyXG5cclxuLyoqXHJcbiAqIFNob3cgdGhlIFdpbmRvd1xyXG4gKlxyXG4gKiBAZXhwb3J0XHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gV2luZG93U2hvdygpIHtcclxuICAgIHdpbmRvdy5XYWlsc0ludm9rZSgnV1MnKTtcclxufVxyXG5cclxuLyoqXHJcbiAqIE1heGltaXNlIHRoZSBXaW5kb3dcclxuICpcclxuICogQGV4cG9ydFxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIFdpbmRvd01heGltaXNlKCkge1xyXG4gICAgd2luZG93LldhaWxzSW52b2tlKCdXTScpO1xyXG59XHJcblxyXG4vKipcclxuICogVG9nZ2xlIHRoZSBNYXhpbWlzZSBvZiB0aGUgV2luZG93XHJcbiAqXHJcbiAqIEBleHBvcnRcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBXaW5kb3dUb2dnbGVNYXhpbWlzZSgpIHtcclxuICAgIHdpbmRvdy5XYWlsc0ludm9rZSgnV3QnKTtcclxufVxyXG5cclxuLyoqXHJcbiAqIFVubWF4aW1pc2UgdGhlIFdpbmRvd1xyXG4gKlxyXG4gKiBAZXhwb3J0XHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gV2luZG93VW5tYXhpbWlzZSgpIHtcclxuICAgIHdpbmRvdy5XYWlsc0ludm9rZSgnV1UnKTtcclxufVxyXG5cclxuLyoqXHJcbiAqIE1pbmltaXNlIHRoZSBXaW5kb3dcclxuICpcclxuICogQGV4cG9ydFxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIFdpbmRvd01pbmltaXNlKCkge1xyXG4gICAgd2luZG93LldhaWxzSW52b2tlKCdXbScpO1xyXG59XHJcblxyXG4vKipcclxuICogVW5taW5pbWlzZSB0aGUgV2luZG93XHJcbiAqXHJcbiAqIEBleHBvcnRcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBXaW5kb3dVbm1pbmltaXNlKCkge1xyXG4gICAgd2luZG93LldhaWxzSW52b2tlKCdXdScpO1xyXG59XHJcblxyXG4vKipcclxuICogU2V0cyB0aGUgYmFja2dyb3VuZCBjb2xvdXIgb2YgdGhlIHdpbmRvd1xyXG4gKlxyXG4gKiBAZXhwb3J0XHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBSIFJlZFxyXG4gKiBAcGFyYW0ge251bWJlcn0gRyBHcmVlblxyXG4gKiBAcGFyYW0ge251bWJlcn0gQiBCbHVlXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBBIEFscGhhXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gV2luZG93U2V0QmFja2dyb3VuZENvbG91cihSLCBHLCBCLCBBKSB7XHJcbiAgICBsZXQgcmdiYSA9IEpTT04uc3RyaW5naWZ5KHsgcjogUiB8fCAwLCBnOiBHIHx8IDAsIGI6IEIgfHwgMCwgYTogQSB8fCAyNTUgfSk7XHJcbiAgICB3aW5kb3cuV2FpbHNJbnZva2UoJ1dyOicgKyByZ2JhKTtcclxufVxyXG5cclxuIiwgIi8qKlxyXG4gKiBAZGVzY3JpcHRpb246IFVzZSB0aGUgc3lzdGVtIGRlZmF1bHQgYnJvd3NlciB0byBvcGVuIHRoZSB1cmxcclxuICogQHBhcmFtIHtzdHJpbmd9IHVybCBcclxuICogQHJldHVybiB7dm9pZH1cclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBCcm93c2VyT3BlblVSTCh1cmwpIHtcclxuICB3aW5kb3cuV2FpbHNJbnZva2UoJ0JPOicgKyB1cmwpO1xyXG59IiwgIi8qXHJcbiBfXHQgICBfX1x0ICBfIF9fXHJcbnwgfFx0IC8gL19fXyBfKF8pIC9fX19fXHJcbnwgfCAvfCAvIC8gX18gYC8gLyAvIF9fXy9cclxufCB8LyB8LyAvIC9fLyAvIC8gKF9fICApXHJcbnxfXy98X18vXFxfXyxfL18vXy9fX19fL1xyXG5UaGUgZWxlY3Ryb24gYWx0ZXJuYXRpdmUgZm9yIEdvXHJcbihjKSBMZWEgQW50aG9ueSAyMDE5LXByZXNlbnRcclxuKi9cclxuLyoganNoaW50IGVzdmVyc2lvbjogOSAqL1xyXG5pbXBvcnQgKiBhcyBMb2cgZnJvbSAnLi9sb2cnO1xyXG5pbXBvcnQge2V2ZW50TGlzdGVuZXJzLCBFdmVudHNFbWl0LCBFdmVudHNOb3RpZnksIEV2ZW50c09mZiwgRXZlbnRzT24sIEV2ZW50c09uY2UsIEV2ZW50c09uTXVsdGlwbGV9IGZyb20gJy4vZXZlbnRzJztcclxuaW1wb3J0IHtDYWxsLCBDYWxsYmFjaywgY2FsbGJhY2tzfSBmcm9tICcuL2NhbGxzJztcclxuaW1wb3J0IHtTZXRCaW5kaW5nc30gZnJvbSBcIi4vYmluZGluZ3NcIjtcclxuaW1wb3J0ICogYXMgV2luZG93IGZyb20gXCIuL3dpbmRvd1wiO1xyXG5pbXBvcnQgKiBhcyBCcm93c2VyIGZyb20gXCIuL2Jyb3dzZXJcIjtcclxuXHJcblxyXG5leHBvcnQgZnVuY3Rpb24gUXVpdCgpIHtcclxuICAgIHdpbmRvdy5XYWlsc0ludm9rZSgnUScpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gRW52aXJvbm1lbnQoKSB7XHJcbiAgICByZXR1cm4gQ2FsbChcIjp3YWlsczpFbnZpcm9ubWVudFwiKTtcclxufVxyXG5cclxuLy8gVGhlIEpTIHJ1bnRpbWVcclxud2luZG93LnJ1bnRpbWUgPSB7XHJcbiAgICAuLi5Mb2csXHJcbiAgICAuLi5XaW5kb3csXHJcbiAgICAuLi5Ccm93c2VyLFxyXG4gICAgRXZlbnRzT24sXHJcbiAgICBFdmVudHNPbmNlLFxyXG4gICAgRXZlbnRzT25NdWx0aXBsZSxcclxuICAgIEV2ZW50c0VtaXQsXHJcbiAgICBFdmVudHNPZmYsXHJcbiAgICBFbnZpcm9ubWVudCxcclxuICAgIFF1aXRcclxufTtcclxuXHJcbi8vIEludGVybmFsIHdhaWxzIGVuZHBvaW50c1xyXG53aW5kb3cud2FpbHMgPSB7XHJcbiAgICBDYWxsYmFjayxcclxuICAgIEV2ZW50c05vdGlmeSxcclxuICAgIFNldEJpbmRpbmdzLFxyXG4gICAgZXZlbnRMaXN0ZW5lcnMsXHJcbiAgICBjYWxsYmFja3MsXHJcbiAgICBmbGFnczoge1xyXG4gICAgICAgIGRpc2FibGVTY3JvbGxiYXJEcmFnOiBmYWxzZSxcclxuICAgICAgICBkaXNhYmxlV2FpbHNEZWZhdWx0Q29udGV4dE1lbnU6IGZhbHNlLFxyXG4gICAgICAgIGVuYWJsZVJlc2l6ZTogZmFsc2UsXHJcbiAgICAgICAgZGVmYXVsdEN1cnNvcjogbnVsbCxcclxuICAgICAgICBib3JkZXJUaGlja25lc3M6IDYsXHJcbiAgICAgICAgZGJDbGlja0ludGVydmFsOiAxMDAsXHJcbiAgICB9XHJcbn07XHJcblxyXG4vLyBTZXQgdGhlIGJpbmRpbmdzXHJcbndpbmRvdy53YWlscy5TZXRCaW5kaW5ncyh3aW5kb3cud2FpbHNiaW5kaW5ncyk7XHJcbmRlbGV0ZSB3aW5kb3cud2FpbHMuU2V0QmluZGluZ3M7XHJcblxyXG4vLyBUaGlzIGlzIGV2YWx1YXRlZCBhdCBidWlsZCB0aW1lIGluIHBhY2thZ2UuanNvblxyXG4vLyBjb25zdCBkZXYgPSAwO1xyXG4vLyBjb25zdCBwcm9kdWN0aW9uID0gMTtcclxuaWYgKEVOViA9PT0gMCkge1xyXG4gICAgZGVsZXRlIHdpbmRvdy53YWlsc2JpbmRpbmdzO1xyXG59XHJcblxyXG52YXIgZHJhZ1RpbWVPdXQ7XHJcbnZhciBkcmFnTGFzdFRpbWUgPSAwO1xyXG5cclxuZnVuY3Rpb24gZHJhZygpIHtcclxuICAgIHdpbmRvdy5XYWlsc0ludm9rZShcImRyYWdcIik7XHJcbn1cclxuXHJcbi8vIFNldHVwIGRyYWcgaGFuZGxlclxyXG4vLyBCYXNlZCBvbiBjb2RlIGZyb206IGh0dHBzOi8vZ2l0aHViLmNvbS9wYXRyMG51cy9EZXNrR2FwXHJcbndpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWRvd24nLCAoZSkgPT4ge1xyXG5cclxuICAgIC8vIENoZWNrIGZvciByZXNpemluZ1xyXG4gICAgaWYgKHdpbmRvdy53YWlscy5mbGFncy5yZXNpemVFZGdlKSB7XHJcbiAgICAgICAgd2luZG93LldhaWxzSW52b2tlKFwicmVzaXplOlwiICsgd2luZG93LndhaWxzLmZsYWdzLnJlc2l6ZUVkZ2UpO1xyXG4gICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgLy8gQ2hlY2sgZm9yIGRyYWdnaW5nXHJcbiAgICBsZXQgY3VycmVudEVsZW1lbnQgPSBlLnRhcmdldDtcclxuICAgIHdoaWxlIChjdXJyZW50RWxlbWVudCAhPSBudWxsKSB7XHJcbiAgICAgICAgaWYgKGN1cnJlbnRFbGVtZW50Lmhhc0F0dHJpYnV0ZSgnZGF0YS13YWlscy1uby1kcmFnJykpIHtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfSBlbHNlIGlmIChjdXJyZW50RWxlbWVudC5oYXNBdHRyaWJ1dGUoJ2RhdGEtd2FpbHMtZHJhZycpKSB7XHJcbiAgICAgICAgICAgIGlmICh3aW5kb3cud2FpbHMuZmxhZ3MuZGlzYWJsZVNjcm9sbGJhckRyYWcpIHtcclxuICAgICAgICAgICAgICAgIC8vIFRoaXMgY2hlY2tzIGZvciBjbGlja3Mgb24gdGhlIHNjcm9sbCBiYXJcclxuICAgICAgICAgICAgICAgIGlmIChlLm9mZnNldFggPiBlLnRhcmdldC5jbGllbnRXaWR0aCB8fCBlLm9mZnNldFkgPiBlLnRhcmdldC5jbGllbnRIZWlnaHQpIHtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAobmV3IERhdGUoKS5nZXRUaW1lKCkgLSBkcmFnTGFzdFRpbWUgPCB3aW5kb3cud2FpbHMuZmxhZ3MuZGJDbGlja0ludGVydmFsKSB7XHJcbiAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQoZHJhZ1RpbWVPdXQpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZHJhZ1RpbWVPdXQgPSBzZXRUaW1lb3V0KGRyYWcsIHdpbmRvdy53YWlscy5mbGFncy5kYkNsaWNrSW50ZXJ2YWwpO1xyXG4gICAgICAgICAgICBkcmFnTGFzdFRpbWUgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcclxuICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgICAgY3VycmVudEVsZW1lbnQgPSBjdXJyZW50RWxlbWVudC5wYXJlbnRFbGVtZW50O1xyXG4gICAgfVxyXG59KTtcclxuXHJcbmZ1bmN0aW9uIHNldFJlc2l6ZShjdXJzb3IpIHtcclxuICAgIGRvY3VtZW50LmJvZHkuc3R5bGUuY3Vyc29yID0gY3Vyc29yIHx8IHdpbmRvdy53YWlscy5mbGFncy5kZWZhdWx0Q3Vyc29yO1xyXG4gICAgd2luZG93LndhaWxzLmZsYWdzLnJlc2l6ZUVkZ2UgPSBjdXJzb3I7XHJcbn1cclxuXHJcbndpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCBmdW5jdGlvbiAoZSkge1xyXG4gICAgaWYgKCF3aW5kb3cud2FpbHMuZmxhZ3MuZW5hYmxlUmVzaXplKSB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgaWYgKHdpbmRvdy53YWlscy5mbGFncy5kZWZhdWx0Q3Vyc29yID09IG51bGwpIHtcclxuICAgICAgICB3aW5kb3cud2FpbHMuZmxhZ3MuZGVmYXVsdEN1cnNvciA9IGRvY3VtZW50LmJvZHkuc3R5bGUuY3Vyc29yO1xyXG4gICAgfVxyXG4gICAgaWYgKHdpbmRvdy5vdXRlcldpZHRoIC0gZS5jbGllbnRYIDwgd2luZG93LndhaWxzLmZsYWdzLmJvcmRlclRoaWNrbmVzcyAmJiB3aW5kb3cub3V0ZXJIZWlnaHQgLSBlLmNsaWVudFkgPCB3aW5kb3cud2FpbHMuZmxhZ3MuYm9yZGVyVGhpY2tuZXNzKSB7XHJcbiAgICAgICAgZG9jdW1lbnQuYm9keS5zdHlsZS5jdXJzb3IgPSBcInNlLXJlc2l6ZVwiO1xyXG4gICAgfVxyXG4gICAgbGV0IHJpZ2h0Qm9yZGVyID0gd2luZG93Lm91dGVyV2lkdGggLSBlLmNsaWVudFggPCB3aW5kb3cud2FpbHMuZmxhZ3MuYm9yZGVyVGhpY2tuZXNzO1xyXG4gICAgbGV0IGxlZnRCb3JkZXIgPSBlLmNsaWVudFggPCB3aW5kb3cud2FpbHMuZmxhZ3MuYm9yZGVyVGhpY2tuZXNzO1xyXG4gICAgbGV0IHRvcEJvcmRlciA9IGUuY2xpZW50WSA8IHdpbmRvdy53YWlscy5mbGFncy5ib3JkZXJUaGlja25lc3M7XHJcbiAgICBsZXQgYm90dG9tQm9yZGVyID0gd2luZG93Lm91dGVySGVpZ2h0IC0gZS5jbGllbnRZIDwgd2luZG93LndhaWxzLmZsYWdzLmJvcmRlclRoaWNrbmVzcztcclxuXHJcbiAgICAvLyBJZiB3ZSBhcmVuJ3Qgb24gYW4gZWRnZSwgYnV0IHdlcmUsIHJlc2V0IHRoZSBjdXJzb3IgdG8gZGVmYXVsdFxyXG4gICAgaWYgKCFsZWZ0Qm9yZGVyICYmICFyaWdodEJvcmRlciAmJiAhdG9wQm9yZGVyICYmICFib3R0b21Cb3JkZXIgJiYgd2luZG93LndhaWxzLmZsYWdzLnJlc2l6ZUVkZ2UgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgIHNldFJlc2l6ZSgpO1xyXG4gICAgfSBlbHNlIGlmIChyaWdodEJvcmRlciAmJiBib3R0b21Cb3JkZXIpIHNldFJlc2l6ZShcInNlLXJlc2l6ZVwiKTtcclxuICAgIGVsc2UgaWYgKGxlZnRCb3JkZXIgJiYgYm90dG9tQm9yZGVyKSBzZXRSZXNpemUoXCJzdy1yZXNpemVcIik7XHJcbiAgICBlbHNlIGlmIChsZWZ0Qm9yZGVyICYmIHRvcEJvcmRlcikgc2V0UmVzaXplKFwibnctcmVzaXplXCIpO1xyXG4gICAgZWxzZSBpZiAodG9wQm9yZGVyICYmIHJpZ2h0Qm9yZGVyKSBzZXRSZXNpemUoXCJuZS1yZXNpemVcIik7XHJcbiAgICBlbHNlIGlmIChsZWZ0Qm9yZGVyKSBzZXRSZXNpemUoXCJ3LXJlc2l6ZVwiKTtcclxuICAgIGVsc2UgaWYgKHRvcEJvcmRlcikgc2V0UmVzaXplKFwibi1yZXNpemVcIik7XHJcbiAgICBlbHNlIGlmIChib3R0b21Cb3JkZXIpIHNldFJlc2l6ZShcInMtcmVzaXplXCIpO1xyXG4gICAgZWxzZSBpZiAocmlnaHRCb3JkZXIpIHNldFJlc2l6ZShcImUtcmVzaXplXCIpO1xyXG5cclxufSk7XHJcblxyXG4vLyBTZXR1cCBjb250ZXh0IG1lbnUgaG9va1xyXG53aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignY29udGV4dG1lbnUnLCBmdW5jdGlvbiAoZSkge1xyXG4gICAgaWYgKHdpbmRvdy53YWlscy5mbGFncy5kaXNhYmxlV2FpbHNEZWZhdWx0Q29udGV4dE1lbnUpIHtcclxuICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICB9XHJcbn0pOyJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFrQkEsMEJBQXdCLE9BQU8sU0FBUztBQUl2QyxXQUFPLFlBQVksTUFBTSxRQUFRO0FB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 diff --git a/v2/internal/frontend/runtime/runtime_prod_desktop.js b/v2/internal/frontend/runtime/runtime_prod_desktop.js index e19e6c438..51ef29128 100644 --- a/v2/internal/frontend/runtime/runtime_prod_desktop.js +++ b/v2/internal/frontend/runtime/runtime_prod_desktop.js @@ -1 +1 @@ -(()=>{var k=Object.defineProperty;var D=e=>k(e,"__esModule",{value:!0});var W=(e,n)=>{D(e);for(var o in n)k(e,o,{get:n[o],enumerable:!0})};var g={};W(g,{LogDebug:()=>B,LogError:()=>J,LogFatal:()=>G,LogInfo:()=>A,LogLevel:()=>P,LogPrint:()=>R,LogTrace:()=>C,LogWarning:()=>H,SetLogLevel:()=>M});function w(e,n){window.WailsInvoke("L"+e+n)}function C(e){w("T",e)}function R(e){w("P",e)}function B(e){w("D",e)}function A(e){w("I",e)}function H(e){w("W",e)}function J(e){w("E",e)}function G(e){w("F",e)}function M(e){w("S",e)}var P={TRACE:1,DEBUG:2,INFO:3,WARNING:4,ERROR:5};var m=class{constructor(n,o){o=o||-1,this.Callback=i=>(n.apply(null,i),o===-1?!1:(o-=1,o===0))}},s={};function c(e,n,o){s[e]=s[e]||[];let i=new m(n,o);s[e].push(i)}function b(e,n){c(e,n,-1)}function E(e,n){c(e,n,1)}function I(e){let n=e.name;if(s[n]){let o=s[n].slice();for(let i=0;i0&&(a=setTimeout(function(){t(Error("Call to "+e+" timed out. Request ID: "+r))},o)),f[r]={timeoutHandle:a,reject:t,resolve:i};try{let u={name:e,args:n,callbackID:r};window.WailsInvoke("C"+JSON.stringify(u))}catch(u){console.error(u)}})}function T(e){let n;try{n=JSON.parse(e)}catch(t){let r=`Invalid JSON passed to callback: ${t.message}. Message: ${e}`;throw runtime.LogDebug(r),new Error(r)}let o=n.callbackid,i=f[o];if(!i){let t=`Callback '${o}' not registered!!!`;throw console.error(t),new Error(t)}clearTimeout(i.timeoutHandle),delete f[o],n.error?i.reject(n.error):i.resolve(n.result)}window.go={};function L(e){try{e=JSON.parse(e)}catch(n){console.error(n)}window.go=window.go||{},Object.keys(e).forEach(n=>{window.go[n]=window.go[n]||{},Object.keys(e[n]).forEach(o=>{window.go[n][o]=window.go[n][o]||{},Object.keys(e[n][o]).forEach(i=>{window.go[n][o][i]=function(){let t=0;function r(){let a=[].slice.call(arguments);return d([n,o,i].join("."),a,t)}return r.setTimeout=function(a){t=a},r.getTimeout=function(){return t},r}()})})})}var v={};W(v,{WindowCenter:()=>V,WindowFullscreen:()=>N,WindowGetPosition:()=>te,WindowGetSize:()=>_,WindowHide:()=>re,WindowMaximise:()=>le,WindowMinimise:()=>de,WindowReload:()=>j,WindowReloadApp:()=>X,WindowSetAlwaysOnTop:()=>oe,WindowSetDarkTheme:()=>Q,WindowSetLightTheme:()=>$,WindowSetMaxSize:()=>ee,WindowSetMinSize:()=>ne,WindowSetPosition:()=>ie,WindowSetRGBA:()=>ce,WindowSetSize:()=>K,WindowSetSystemDefaultTheme:()=>Y,WindowSetTitle:()=>q,WindowShow:()=>se,WindowToggleMaximise:()=>we,WindowUnfullscreen:()=>Z,WindowUnmaximise:()=>ae,WindowUnminimise:()=>fe});function j(){window.location.reload()}function X(){window.WailsInvoke("WR")}function Y(){window.WailsInvoke("WASDT")}function $(){window.WailsInvoke("WALT")}function Q(){window.WailsInvoke("WADT")}function V(){window.WailsInvoke("Wc")}function q(e){window.WailsInvoke("WT"+e)}function N(){window.WailsInvoke("WF")}function Z(){window.WailsInvoke("Wf")}function K(e,n){window.WailsInvoke("Ws:"+e+":"+n)}function _(){return d(":wails:WindowGetSize")}function ee(e,n){window.WailsInvoke("WZ:"+e+":"+n)}function ne(e,n){window.WailsInvoke("Wz:"+e+":"+n)}function oe(e){window.WailsInvoke("WATP:"+(e?"1":"0"))}function ie(e,n){window.WailsInvoke("Wp:"+e+":"+n)}function te(){return d(":wails:WindowGetPos")}function re(){window.WailsInvoke("WH")}function se(){window.WailsInvoke("WS")}function le(){window.WailsInvoke("WM")}function we(){window.WailsInvoke("Wt")}function ae(){window.WailsInvoke("WU")}function de(){window.WailsInvoke("Wm")}function fe(){window.WailsInvoke("Wu")}function ce(e,n,o,i){let t=JSON.stringify({r:e||0,g:n||0,b:o||0,a:i||255});window.WailsInvoke("Wr:"+t)}var x={};W(x,{BrowserOpenURL:()=>ue});function ue(e){window.WailsInvoke("BO:"+e)}function We(){window.WailsInvoke("Q")}function ge(){return d(":wails:Environment")}window.runtime={...g,...v,...x,EventsOn:b,EventsOnce:E,EventsOnMultiple:c,EventsEmit:S,EventsOff:y,Environment:ge,Quit:We};window.wails={Callback:T,EventsNotify:h,SetBindings:L,eventListeners:s,callbacks:f,flags:{disableScrollbarDrag:!1,disableWailsDefaultContextMenu:!1,enableResize:!1,defaultCursor:null,borderThickness:6,dbClickInterval:100}};window.wails.SetBindings(window.wailsbindings);delete window.wails.SetBindings;var O,z=0;function pe(){window.WailsInvoke("drag")}window.addEventListener("mousedown",e=>{if(window.wails.flags.resizeEdge){window.WailsInvoke("resize:"+window.wails.flags.resizeEdge),e.preventDefault();return}let n=e.target;for(;n!=null&&!n.hasAttribute("data-wails-no-drag");){if(n.hasAttribute("data-wails-drag")){if(window.wails.flags.disableScrollbarDrag&&(e.offsetX>e.target.clientWidth||e.offsetY>e.target.clientHeight))break;if(new Date().getTime()-z{var k=Object.defineProperty;var D=e=>k(e,"__esModule",{value:!0});var W=(e,n)=>{D(e);for(var o in n)k(e,o,{get:n[o],enumerable:!0})};var g={};W(g,{LogDebug:()=>B,LogError:()=>J,LogFatal:()=>M,LogInfo:()=>A,LogLevel:()=>U,LogPrint:()=>R,LogTrace:()=>C,LogWarning:()=>H,SetLogLevel:()=>P});function w(e,n){window.WailsInvoke("L"+e+n)}function C(e){w("T",e)}function R(e){w("P",e)}function B(e){w("D",e)}function A(e){w("I",e)}function H(e){w("W",e)}function J(e){w("E",e)}function M(e){w("F",e)}function P(e){w("S",e)}var U={TRACE:1,DEBUG:2,INFO:3,WARNING:4,ERROR:5};var m=class{constructor(n,o){o=o||-1,this.Callback=i=>(n.apply(null,i),o===-1?!1:(o-=1,o===0))}},s={};function c(e,n,o){s[e]=s[e]||[];let i=new m(n,o);s[e].push(i)}function b(e,n){c(e,n,-1)}function E(e,n){c(e,n,1)}function I(e){let n=e.name;if(s[n]){let o=s[n].slice();for(let i=0;i0&&(a=setTimeout(function(){t(Error("Call to "+e+" timed out. Request ID: "+r))},o)),f[r]={timeoutHandle:a,reject:t,resolve:i};try{let u={name:e,args:n,callbackID:r};window.WailsInvoke("C"+JSON.stringify(u))}catch(u){console.error(u)}})}function T(e){let n;try{n=JSON.parse(e)}catch(t){let r=`Invalid JSON passed to callback: ${t.message}. Message: ${e}`;throw runtime.LogDebug(r),new Error(r)}let o=n.callbackid,i=f[o];if(!i){let t=`Callback '${o}' not registered!!!`;throw console.error(t),new Error(t)}clearTimeout(i.timeoutHandle),delete f[o],n.error?i.reject(n.error):i.resolve(n.result)}window.go={};function L(e){try{e=JSON.parse(e)}catch(n){console.error(n)}window.go=window.go||{},Object.keys(e).forEach(n=>{window.go[n]=window.go[n]||{},Object.keys(e[n]).forEach(o=>{window.go[n][o]=window.go[n][o]||{},Object.keys(e[n][o]).forEach(i=>{window.go[n][o][i]=function(){let t=0;function r(){let a=[].slice.call(arguments);return d([n,o,i].join("."),a,t)}return r.setTimeout=function(a){t=a},r.getTimeout=function(){return t},r}()})})})}var v={};W(v,{WindowCenter:()=>V,WindowFullscreen:()=>N,WindowGetPosition:()=>te,WindowGetSize:()=>_,WindowHide:()=>re,WindowMaximise:()=>le,WindowMinimise:()=>de,WindowReload:()=>j,WindowReloadApp:()=>X,WindowSetAlwaysOnTop:()=>oe,WindowSetBackgroundColour:()=>ce,WindowSetDarkTheme:()=>Q,WindowSetLightTheme:()=>$,WindowSetMaxSize:()=>ee,WindowSetMinSize:()=>ne,WindowSetPosition:()=>ie,WindowSetSize:()=>K,WindowSetSystemDefaultTheme:()=>Y,WindowSetTitle:()=>q,WindowShow:()=>se,WindowToggleMaximise:()=>we,WindowUnfullscreen:()=>Z,WindowUnmaximise:()=>ae,WindowUnminimise:()=>fe});function j(){window.location.reload()}function X(){window.WailsInvoke("WR")}function Y(){window.WailsInvoke("WASDT")}function $(){window.WailsInvoke("WALT")}function Q(){window.WailsInvoke("WADT")}function V(){window.WailsInvoke("Wc")}function q(e){window.WailsInvoke("WT"+e)}function N(){window.WailsInvoke("WF")}function Z(){window.WailsInvoke("Wf")}function K(e,n){window.WailsInvoke("Ws:"+e+":"+n)}function _(){return d(":wails:WindowGetSize")}function ee(e,n){window.WailsInvoke("WZ:"+e+":"+n)}function ne(e,n){window.WailsInvoke("Wz:"+e+":"+n)}function oe(e){window.WailsInvoke("WATP:"+(e?"1":"0"))}function ie(e,n){window.WailsInvoke("Wp:"+e+":"+n)}function te(){return d(":wails:WindowGetPos")}function re(){window.WailsInvoke("WH")}function se(){window.WailsInvoke("WS")}function le(){window.WailsInvoke("WM")}function we(){window.WailsInvoke("Wt")}function ae(){window.WailsInvoke("WU")}function de(){window.WailsInvoke("Wm")}function fe(){window.WailsInvoke("Wu")}function ce(e,n,o,i){let t=JSON.stringify({r:e||0,g:n||0,b:o||0,a:i||255});window.WailsInvoke("Wr:"+t)}var x={};W(x,{BrowserOpenURL:()=>ue});function ue(e){window.WailsInvoke("BO:"+e)}function We(){window.WailsInvoke("Q")}function ge(){return d(":wails:Environment")}window.runtime={...g,...v,...x,EventsOn:b,EventsOnce:E,EventsOnMultiple:c,EventsEmit:S,EventsOff:y,Environment:ge,Quit:We};window.wails={Callback:T,EventsNotify:h,SetBindings:L,eventListeners:s,callbacks:f,flags:{disableScrollbarDrag:!1,disableWailsDefaultContextMenu:!1,enableResize:!1,defaultCursor:null,borderThickness:6,dbClickInterval:100}};window.wails.SetBindings(window.wailsbindings);delete window.wails.SetBindings;var O,z=0;function pe(){window.WailsInvoke("drag")}window.addEventListener("mousedown",e=>{if(window.wails.flags.resizeEdge){window.WailsInvoke("resize:"+window.wails.flags.resizeEdge),e.preventDefault();return}let n=e.target;for(;n!=null&&!n.hasAttribute("data-wails-no-drag");){if(n.hasAttribute("data-wails-drag")){if(window.wails.flags.disableScrollbarDrag&&(e.offsetX>e.target.clientWidth||e.offsetY>e.target.clientHeight))break;if(new Date().getTime()-z Date: Thu, 30 Jun 2022 12:13:06 +0200 Subject: [PATCH 73/87] [v2] Improvements to the dev command (#1510) * [v2, darwin] Fix nullreference exception when dev watcher failed to start and the user stopped wails dev with ctrl-c * [v2] Improve starting of dev watcher command Wails dev now also fails if the dev watcher could not be started. Since the dev watcher is used to start e.g. vite to serve the frontend, it does not make much sense to let Wails dev be running if the dev watcher failed to start. * [v2] Improve killing and cleanup of debug binary - Make sure to kill the debug process in all cases even if an error occured. - Make sure to kill the last started binary process --- v2/cmd/wails/internal/commands/dev/dev.go | 106 +++++++++++------- .../wails/internal/commands/dev/dev_other.go | 8 +- 2 files changed, 70 insertions(+), 44 deletions(-) diff --git a/v2/cmd/wails/internal/commands/dev/dev.go b/v2/cmd/wails/internal/commands/dev/dev.go index 4204f20a5..2ae004d3d 100644 --- a/v2/cmd/wails/internal/commands/dev/dev.go +++ b/v2/cmd/wails/internal/commands/dev/dev.go @@ -2,6 +2,7 @@ package dev import ( "context" + "errors" "fmt" "io" "net" @@ -168,8 +169,6 @@ func AddSubcommand(app *clir.Cli, w io.Writer) error { buildOptions.Logger = logger buildOptions.UserTags = internal.ParseUserTags(flags.tags) - var debugBinaryProcess *process.Process = nil - // Setup signal handler quitChannel := make(chan os.Signal, 1) signal.Notify(quitChannel, os.Interrupt, os.Kill, syscall.SIGTERM) @@ -177,19 +176,23 @@ func AddSubcommand(app *clir.Cli, w io.Writer) error { // Do initial build logger.Println("Building application for development...") - newProcess, appBinary, err := restartApp(buildOptions, debugBinaryProcess, flags, exitCodeChannel) + debugBinaryProcess, appBinary, err := restartApp(buildOptions, nil, flags, exitCodeChannel) if err != nil { return err } - if newProcess != nil { - debugBinaryProcess = newProcess - } + defer func() { + if err := killProcessAndCleanupBinary(debugBinaryProcess, appBinary); err != nil { + LogDarkYellow("Unable to kill process and cleanup binary: %s", err) + } + }() // frontend:dev:watcher command. if command := projectConfig.DevWatcherCommand; command != "" { - var devCommandWaitGroup sync.WaitGroup - closer := runFrontendDevWatcherCommand(cwd, command, &devCommandWaitGroup) - defer closer(&devCommandWaitGroup) + closer, err := runFrontendDevWatcherCommand(cwd, command) + if err != nil { + return err + } + defer closer() } // open browser @@ -221,22 +224,17 @@ func AddSubcommand(app *clir.Cli, w io.Writer) error { LogGreen("Using reload debounce setting of %d milliseconds", flags.debounceMS) // Watch for changes and trigger restartApp() - doWatcherLoop(buildOptions, debugBinaryProcess, flags, watcher, exitCodeChannel, quitChannel, devServerURL) + debugBinaryProcess = doWatcherLoop(buildOptions, debugBinaryProcess, flags, watcher, exitCodeChannel, quitChannel, devServerURL) - // Kill the current program if running - if debugBinaryProcess != nil { - err := debugBinaryProcess.Kill() - if err != nil { - return err - } - } - - // Remove dev binary - err = os.Remove(appBinary) - if err != nil { + // Kill the current program if running and remove dev binary + if err := killProcessAndCleanupBinary(debugBinaryProcess, appBinary); err != nil { return err } + // Reset the process and the binary so the defer knows about it and is a nop. + debugBinaryProcess = nil + appBinary = "" + LogGreen("Development mode exited") return nil @@ -244,6 +242,22 @@ func AddSubcommand(app *clir.Cli, w io.Writer) error { return nil } +func killProcessAndCleanupBinary(process *process.Process, binary string) error { + if process != nil && process.Running { + if err := process.Kill(); err != nil { + return err + } + } + + if binary != "" { + err := os.Remove(binary) + if err != nil && !errors.Is(err, os.ErrNotExist) { + return err + } + } + return nil +} + func syncGoModVersion(cwd string) error { gomodFilename := filepath.Join(cwd, "go.mod") gomodData, err := os.ReadFile(gomodFilename) @@ -388,35 +402,39 @@ func loadAndMergeProjectConfig(cwd string, flags *devFlags) (*project.Project, e } // runFrontendDevWatcherCommand will run the `frontend:dev:watcher` command if it was given, ex- `npm run dev` -func runFrontendDevWatcherCommand(cwd string, devCommand string, wg *sync.WaitGroup) func(group *sync.WaitGroup) { - LogGreen("Running frontend dev watcher command: '%s'", devCommand) +func runFrontendDevWatcherCommand(cwd string, devCommand string) (func(), error) { ctx, cancel := context.WithCancel(context.Background()) dir := filepath.Join(cwd, "frontend") cmdSlice := strings.Split(devCommand, " ") - wg.Add(1) cmd := exec.CommandContext(ctx, cmdSlice[0], cmdSlice[1:]...) cmd.Stderr = os.Stderr cmd.Stdout = os.Stdout cmd.Dir = dir - setParentGID(cmd) - go func(ctx context.Context, devCommand string, cwd string, wg *sync.WaitGroup) { - err := cmd.Run() - if err != nil { + if err := cmd.Start(); err != nil { + cancel() + return nil, fmt.Errorf("Unable to start frontend DevWatcher: %w", err) + } + + LogGreen("Running frontend DevWatcher command: '%s'", devCommand) + var wg sync.WaitGroup + wg.Add(1) + go func() { + if err := cmd.Wait(); err != nil { if err.Error() != "exit status 1" { - LogRed("Error from '%s': %s", devCommand, err.Error()) + LogRed("Error from DevWatcher '%s': %s", devCommand, err.Error()) } } - LogGreen("Dev command exited!") + LogGreen("DevWatcher command exited!") wg.Done() - }(ctx, devCommand, cwd, wg) + }() - return func(wg *sync.WaitGroup) { + return func() { killProc(cmd, devCommand) - LogGreen("Dev command killed!") + LogGreen("DevWatcher command killed!") cancel() wg.Wait() - } + }, nil } // initialiseWatcher creates the project directory watcher that will trigger recompile @@ -463,8 +481,13 @@ func restartApp(buildOptions *build.Options, debugBinaryProcess *process.Process appBinary, err := build.Build(buildOptions) println() if err != nil { - LogRed("Build error - continuing to run current version") - LogDarkYellow(err.Error()) + LogRed("Build error - " + err.Error()) + + msg := "Continuing to run current version" + if debugBinaryProcess == nil { + msg = "No version running, build will be retriggered as soon as changes have been detected" + } + LogDarkYellow(msg) return nil, "", nil } @@ -510,12 +533,8 @@ func restartApp(buildOptions *build.Options, debugBinaryProcess *process.Process } // doWatcherLoop is the main watch loop that runs while dev is active -func doWatcherLoop(buildOptions *build.Options, debugBinaryProcess *process.Process, flags devFlags, watcher *fsnotify.Watcher, exitCodeChannel chan int, quitChannel chan os.Signal, devServerURL *url.URL) { +func doWatcherLoop(buildOptions *build.Options, debugBinaryProcess *process.Process, flags devFlags, watcher *fsnotify.Watcher, exitCodeChannel chan int, quitChannel chan os.Signal, devServerURL *url.URL) *process.Process { // Main Loop - var ( - err error - newBinaryProcess *process.Process - ) var extensionsThatTriggerARebuild = sliceToMap(strings.Split(flags.extensions, ",")) var dirsThatTriggerAReload []string for _, dir := range strings.Split(flags.reloadDirs, ",") { @@ -601,7 +620,7 @@ func doWatcherLoop(buildOptions *build.Options, debugBinaryProcess *process.Proc rebuild = false LogGreen("[Rebuild triggered] files updated") // Try and build the app - newBinaryProcess, _, err = restartApp(buildOptions, debugBinaryProcess, flags, exitCodeChannel) + newBinaryProcess, _, err := restartApp(buildOptions, debugBinaryProcess, flags, exitCodeChannel) if err != nil { LogRed("Error during build: %s", err.Error()) continue @@ -647,7 +666,7 @@ func doWatcherLoop(buildOptions *build.Options, debugBinaryProcess *process.Proc } if reload { reload = false - _, err = http.Get(reloadURL) + _, err := http.Get(reloadURL) if err != nil { LogRed("Error during refresh: %s", err.Error()) } @@ -657,6 +676,7 @@ func doWatcherLoop(buildOptions *build.Options, debugBinaryProcess *process.Proc quit = true } } + return debugBinaryProcess } func joinPath(url *url.URL, subPath string) string { diff --git a/v2/cmd/wails/internal/commands/dev/dev_other.go b/v2/cmd/wails/internal/commands/dev/dev_other.go index 15267ceb2..c93aecfe4 100644 --- a/v2/cmd/wails/internal/commands/dev/dev_other.go +++ b/v2/cmd/wails/internal/commands/dev/dev_other.go @@ -6,6 +6,8 @@ package dev import ( "os/exec" "syscall" + + "golang.org/x/sys/unix" ) func setParentGID(cmd *exec.Cmd) { @@ -15,6 +17,10 @@ func setParentGID(cmd *exec.Cmd) { } func killProc(cmd *exec.Cmd, devCommand string) { + if cmd == nil || cmd.Process == nil { + return + } + // Experiencing the same issue on macOS BigSur // I'm using Vite, but I would imagine this could be an issue with Node (npm) in general // Also, after several edit/rebuild cycles any abnormal shutdown (crash or CTRL-C) may still leave Node running @@ -22,7 +28,7 @@ func killProc(cmd *exec.Cmd, devCommand string) { // Not tested on *nix pgid, err := syscall.Getpgid(cmd.Process.Pid) if err == nil { - err := syscall.Kill(-pgid, 15) // note the minus sign + err := syscall.Kill(-pgid, unix.SIGTERM) // note the minus sign if err != nil { LogRed("Error from '%s' when attempting to kill the process: %s", devCommand, err.Error()) } From 529272151780ee9a8cc76e90a949740927680f9a Mon Sep 17 00:00:00 2001 From: Lea Anthony Date: Sun, 3 Jul 2022 10:19:15 +1000 Subject: [PATCH 74/87] Update Sponsors --- README.md | 3 +++ README.zh-Hans.md | 3 +++ .../i18n/zh-Hans/docusaurus-plugin-content-pages/credits.mdx | 4 ++++ website/src/pages/credits.mdx | 4 ++++ 4 files changed, 14 insertions(+) diff --git a/README.md b/README.md index e74d48d23..9544568ea 100644 --- a/README.md +++ b/README.md @@ -197,6 +197,9 @@ This project is supported by these kind people / companies: + + + diff --git a/README.zh-Hans.md b/README.zh-Hans.md index 1172e6114..334ece9b6 100644 --- a/README.zh-Hans.md +++ b/README.zh-Hans.md @@ -207,6 +207,9 @@ Wails v2 已针对所有 3 个平台发布了 Beta 版。如果您有兴趣尝 + + + ## 安装 diff --git a/website/i18n/zh-Hans/docusaurus-plugin-content-pages/credits.mdx b/website/i18n/zh-Hans/docusaurus-plugin-content-pages/credits.mdx index 706a881df..d5e6d2041 100644 --- a/website/i18n/zh-Hans/docusaurus-plugin-content-pages/credits.mdx +++ b/website/i18n/zh-Hans/docusaurus-plugin-content-pages/credits.mdx @@ -104,6 +104,9 @@ + + + `, }} /> @@ -114,6 +117,7 @@ + import Contributors from "@wails/react-contributors"; diff --git a/website/src/pages/credits.mdx b/website/src/pages/credits.mdx index a7e9fe68b..61b88d3dc 100644 --- a/website/src/pages/credits.mdx +++ b/website/src/pages/credits.mdx @@ -104,6 +104,9 @@ + + + `, }} /> @@ -114,6 +117,7 @@ + import Contributors from "@wails/react-contributors"; From a1a06a619835c12336913bc61f0c9ec3fe3df01d Mon Sep 17 00:00:00 2001 From: Lea Anthony Date: Sun, 3 Jul 2022 12:06:35 +1000 Subject: [PATCH 75/87] Initial development guides --- website/docs/development/_category_.json | 4 +++ .../development/developing_new_features.mdx | 34 +++++++++++++++++++ website/docs/development/documenting.mdx | 10 ++++++ website/docs/development/fixing_bugs.mdx | 30 ++++++++++++++++ website/docs/development/helping_others.mdx | 10 ++++++ website/docs/development/introduction.mdx | 24 +++++++++++++ 6 files changed, 112 insertions(+) create mode 100644 website/docs/development/_category_.json create mode 100644 website/docs/development/developing_new_features.mdx create mode 100644 website/docs/development/documenting.mdx create mode 100644 website/docs/development/fixing_bugs.mdx create mode 100644 website/docs/development/helping_others.mdx create mode 100644 website/docs/development/introduction.mdx diff --git a/website/docs/development/_category_.json b/website/docs/development/_category_.json new file mode 100644 index 000000000..716d39ab4 --- /dev/null +++ b/website/docs/development/_category_.json @@ -0,0 +1,4 @@ +{ + "label": "Development", + "position": 99 +} diff --git a/website/docs/development/developing_new_features.mdx b/website/docs/development/developing_new_features.mdx new file mode 100644 index 000000000..9f49bf45b --- /dev/null +++ b/website/docs/development/developing_new_features.mdx @@ -0,0 +1,34 @@ +--- +sidebar_position: 2 +--- + +# Developing New Features + +We are always keen to add features to Wails and expand on what the project can do. +The process for adding new features are as follows: + +- Pick an enhancement ticket with the "TODO" label. It's preferable to select one from the current +[Backlog](https://github.com/orgs/wailsapp/projects/1/views/1) but the choice is yours. +- Before developing, check that the ticket includes the following information: +- The purpose of the enhancement +- What is out of scope for the enhancement +- What platforms the enhancement targets (most features should be cross-platform unless there's a very specific reason) +- If the ticket does not include this information, feel free to request the information from the +person who opened the ticket. Sometimes placeholder tickets are created and require more details +- Comment on the ticket stating you wish to develop the feature +- Clone the repository and create a branch with the format `feature/_` +- New features often require documentation so please ensure you have also added or updated the documentation as part of +the changes +- Once the feature is ready for testing, create a draft PR. Please ensure the PR description has the test scenarios and +test cases listed with checkmarks, so that others can know what still needs to be tested. +- Once all the testing is completed, please update the status of the PR from draft and leave a message. + +:::note +There is nothing stopping you from opening a ticket and working on it yourself, but please be aware that all +enhancement requests are reviewed for good fit. Not all ideas will be selected so it's best to have discussion +on the ticket first. +::: + +:::warning +Any PRs opened without a corresponding ticket may be rejected. +::: diff --git a/website/docs/development/documenting.mdx b/website/docs/development/documenting.mdx new file mode 100644 index 000000000..9a8c93428 --- /dev/null +++ b/website/docs/development/documenting.mdx @@ -0,0 +1,10 @@ +--- +sidebar_position: 4 +--- + +# Documenting + + +:::note +Work In Progress +::: diff --git a/website/docs/development/fixing_bugs.mdx b/website/docs/development/fixing_bugs.mdx new file mode 100644 index 000000000..8f7c60d1a --- /dev/null +++ b/website/docs/development/fixing_bugs.mdx @@ -0,0 +1,30 @@ +--- +sidebar_position: 3 +--- + +# Fixing Bugs + +The process for fixing bugs are as follows: + +- Check the current [Backlog](https://github.com/orgs/wailsapp/projects/1/views/1) and select a bug to fix +- Before developing, check that the ticket includes the following information: +- The scope of the issue including platforms affected +- The steps to reproduce. Sometimes bugs are opened that are not Wails issues and the onus is on the reporter to +prove that it is a Wails issue with a minimal reproducible example +- The output of `wails doctor` +- If the ticket does not include this information, feel free to request the information from the +person who opened the ticket. +- Comment on the ticket stating you wish to develop a fix +- Clone the repository and create a branch with the format `bugfix/_` +- Once the fix is ready for testing, create a draft PR. Please ensure the PR description has the test scenarios and +test cases listed with checkmarks, so that others can know what still needs to be tested. +- Once all the testing is completed, please update the status of the PR from draft and leave a message. + +:::note +There is nothing stopping you from opening a ticket and working on it yourself, but please be aware that all +bugfixes should be discussed as the approach may have unintended side effects. +::: + +:::warning +Any PRs opened without a corresponding ticket may be rejected. +::: \ No newline at end of file diff --git a/website/docs/development/helping_others.mdx b/website/docs/development/helping_others.mdx new file mode 100644 index 000000000..86232c611 --- /dev/null +++ b/website/docs/development/helping_others.mdx @@ -0,0 +1,10 @@ +--- +sidebar_position: 5 +--- + +# Helping Others + + +:::note +Work In Progress +::: diff --git a/website/docs/development/introduction.mdx b/website/docs/development/introduction.mdx new file mode 100644 index 000000000..7ae93ebdd --- /dev/null +++ b/website/docs/development/introduction.mdx @@ -0,0 +1,24 @@ +--- +sidebar_position: 1 +--- + +# Introduction + +Wails is an open source, community driven project. We welcome anyone to join us in +developing the project. This documentation is aimed at anyone wishing to get +familiar with the project and the development processes. + +# Ways of contributing + +There are many ways to contribute to the project: + +- Developing new features +- Fixing bugs +- Testing +- Documenting features +- Writing tutorials / guides +- Helping others on the issues + discussions boards + +Guides for these have been created in their own sections. Before getting started, +please introduce yourself in the [Developing Wails](https://github.com/wailsapp/wails/discussions/1520) +discussion. \ No newline at end of file From 59f84b8905972cd9225c0df79e8b880546eb6d3a Mon Sep 17 00:00:00 2001 From: Lea Anthony Date: Sun, 3 Jul 2022 14:52:37 +1000 Subject: [PATCH 76/87] Development -> Contributing --- website/docs/contributing/_category_.json | 4 ++++ .../{development => contributing}/developing_new_features.mdx | 0 website/docs/{development => contributing}/documenting.mdx | 0 website/docs/{development => contributing}/fixing_bugs.mdx | 0 website/docs/{development => contributing}/helping_others.mdx | 0 website/docs/{development => contributing}/introduction.mdx | 4 ++-- website/docs/development/_category_.json | 4 ---- 7 files changed, 6 insertions(+), 6 deletions(-) create mode 100644 website/docs/contributing/_category_.json rename website/docs/{development => contributing}/developing_new_features.mdx (100%) rename website/docs/{development => contributing}/documenting.mdx (100%) rename website/docs/{development => contributing}/fixing_bugs.mdx (100%) rename website/docs/{development => contributing}/helping_others.mdx (100%) rename website/docs/{development => contributing}/introduction.mdx (72%) delete mode 100644 website/docs/development/_category_.json diff --git a/website/docs/contributing/_category_.json b/website/docs/contributing/_category_.json new file mode 100644 index 000000000..fad21931a --- /dev/null +++ b/website/docs/contributing/_category_.json @@ -0,0 +1,4 @@ +{ + "label": "Contributing", + "position": 99 +} diff --git a/website/docs/development/developing_new_features.mdx b/website/docs/contributing/developing_new_features.mdx similarity index 100% rename from website/docs/development/developing_new_features.mdx rename to website/docs/contributing/developing_new_features.mdx diff --git a/website/docs/development/documenting.mdx b/website/docs/contributing/documenting.mdx similarity index 100% rename from website/docs/development/documenting.mdx rename to website/docs/contributing/documenting.mdx diff --git a/website/docs/development/fixing_bugs.mdx b/website/docs/contributing/fixing_bugs.mdx similarity index 100% rename from website/docs/development/fixing_bugs.mdx rename to website/docs/contributing/fixing_bugs.mdx diff --git a/website/docs/development/helping_others.mdx b/website/docs/contributing/helping_others.mdx similarity index 100% rename from website/docs/development/helping_others.mdx rename to website/docs/contributing/helping_others.mdx diff --git a/website/docs/development/introduction.mdx b/website/docs/contributing/introduction.mdx similarity index 72% rename from website/docs/development/introduction.mdx rename to website/docs/contributing/introduction.mdx index 7ae93ebdd..53763adff 100644 --- a/website/docs/development/introduction.mdx +++ b/website/docs/contributing/introduction.mdx @@ -5,7 +5,7 @@ sidebar_position: 1 # Introduction Wails is an open source, community driven project. We welcome anyone to join us in -developing the project. This documentation is aimed at anyone wishing to get +contributing to the project. This documentation is aimed at anyone wishing to get familiar with the project and the development processes. # Ways of contributing @@ -20,5 +20,5 @@ There are many ways to contribute to the project: - Helping others on the issues + discussions boards Guides for these have been created in their own sections. Before getting started, -please introduce yourself in the [Developing Wails](https://github.com/wailsapp/wails/discussions/1520) +please introduce yourself in the [Contributing to Wails](https://github.com/wailsapp/wails/discussions/1520) discussion. \ No newline at end of file diff --git a/website/docs/development/_category_.json b/website/docs/development/_category_.json deleted file mode 100644 index 716d39ab4..000000000 --- a/website/docs/development/_category_.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "label": "Development", - "position": 99 -} From 91d6c23c713d3097cf606308e3e3afdea880de95 Mon Sep 17 00:00:00 2001 From: Lea Anthony Date: Sun, 3 Jul 2022 15:37:21 +1000 Subject: [PATCH 77/87] Updated contribution guide --- .../contributing/developing_new_features.mdx | 3 +- website/docs/contributing/documenting.mdx | 37 ++++++++++++++++-- website/docs/contributing/fixing_bugs.mdx | 2 +- website/docs/contributing/helping_others.mdx | 9 ++++- .../setting_up_a_dev_environment.mdx | 34 ++++++++++++++++ website/docs/contributing/testing.mdx | 21 ++++++++++ website/docs/guides/developing-wails.mdx | 39 ------------------- 7 files changed, 99 insertions(+), 46 deletions(-) create mode 100644 website/docs/contributing/setting_up_a_dev_environment.mdx create mode 100644 website/docs/contributing/testing.mdx delete mode 100644 website/docs/guides/developing-wails.mdx diff --git a/website/docs/contributing/developing_new_features.mdx b/website/docs/contributing/developing_new_features.mdx index 9f49bf45b..1aa5ea145 100644 --- a/website/docs/contributing/developing_new_features.mdx +++ b/website/docs/contributing/developing_new_features.mdx @@ -1,5 +1,5 @@ --- -sidebar_position: 2 +sidebar_position: 20 --- # Developing New Features @@ -32,3 +32,4 @@ on the ticket first. :::warning Any PRs opened without a corresponding ticket may be rejected. ::: + diff --git a/website/docs/contributing/documenting.mdx b/website/docs/contributing/documenting.mdx index 9a8c93428..1655a44fe 100644 --- a/website/docs/contributing/documenting.mdx +++ b/website/docs/contributing/documenting.mdx @@ -1,10 +1,39 @@ --- -sidebar_position: 4 +sidebar_position: 40 --- # Documenting +This website is also the main documentation site for the project. Sometimes this gets +out of date and needs some slight adjustments. Some of the documentation isn't written +to the best standards either. Developing documentation is hard and so any contribution +to this is greatly appreciated. Features without documentation are unfinished so to the +project, it's *as important* as the code. + +We generally do not create tickets for updating documentation so if there is text you +think should be updated or rephrased then feel free to submit a PR for that. This site +is in the main repository under the `website` directory. We use [Docusaurus](https://docusaurus.io/) to create +the site so there is plenty of existing documentation and tutorials around to get started. + +To set up a local documentation development environment, do the following: + +- [Install npm](https://docs.npmjs.com/cli/v8/configuring-npm/install) +- `cd website` +- `npm install` +- `npm run start` + +After it has all installed and is running, you should see the site at [`http://localhost:3000`](http://localhost:3000). +Any changes made to the site text will be immediately reflected in the browser. + +## Versioning + +We employ a versioning system where we have the "latest" documentation AKA "Next Version" which +has all the changes that have occurred since the last release. We also keep the last release +documentation as well as the version before that. + +There isn't usually a reason to update released documentation so we don't generally update +the documents in the `versioned_docs` or `versioned_sidebars` directories. + +The "next version" docs are mainly in `website/docs` with some "version independent" documents +in `src/pages`. Any updates should be made in the `website/docs` directory. -:::note -Work In Progress -::: diff --git a/website/docs/contributing/fixing_bugs.mdx b/website/docs/contributing/fixing_bugs.mdx index 8f7c60d1a..7e1c78ad3 100644 --- a/website/docs/contributing/fixing_bugs.mdx +++ b/website/docs/contributing/fixing_bugs.mdx @@ -1,5 +1,5 @@ --- -sidebar_position: 3 +sidebar_position: 30 --- # Fixing Bugs diff --git a/website/docs/contributing/helping_others.mdx b/website/docs/contributing/helping_others.mdx index 86232c611..340f51a2a 100644 --- a/website/docs/contributing/helping_others.mdx +++ b/website/docs/contributing/helping_others.mdx @@ -1,9 +1,16 @@ --- -sidebar_position: 5 +sidebar_position: 50 --- # Helping Others +A great way to contribute to the project is to help others who are experiencing difficulty. +This is normally reported as a ticket or a message on the Wails slack channel. Even just +clarifying the issue can really help out. Sometimes, when an issue is discussed and gets +resolved, we create a guide out of it to help others who face the same issues. + +To join the Wails slack channel, accept the invite [here](https://gophers.slack.com/join/shared_invite/zt-197vymgt3-sJt4oyakb6nqlVKjXTyeVw#/shared-invite/email) +and join us on the channel by following [this link](https://gophers.slack.com/?redir=%2Fmessages%2FCJ4P9F7MZ%2F). :::note Work In Progress diff --git a/website/docs/contributing/setting_up_a_dev_environment.mdx b/website/docs/contributing/setting_up_a_dev_environment.mdx new file mode 100644 index 000000000..b5cfd8eca --- /dev/null +++ b/website/docs/contributing/setting_up_a_dev_environment.mdx @@ -0,0 +1,34 @@ +--- +sidebar_position: 10 +--- + +# Setting up a Development Environment + +You can set up a development environment by doing the following: + +- Install the latest versions of Go and Git +- `git clone https://github.com/wailsapp/wails` +- `cd wails/v2/cmd/wails` +- `go install` + +NOTE: The directory that you cloned the project into will now be called "clonedir". + +The Wails CLI will now be at the very latest version. + +To update projects to use the latest version, update the project's `go.mod` and +ensure the following line is at the bottom of the file: + +`replace github.com/wailsapp/wails/v2 => ` + +Example: + +On Windows: +`replace github.com/wailsapp/wails/v2 => C:\Users\leaan\Documents\wails-v2-beta\wails\v2` + +On 'nix: +`replace github.com/wailsapp/wails/v2 => /home/me/projects/wails/v2` + +To revert back to a stable version, run: + +`go install github.com/wailsapp/wails/v2/cmd/wails@latest` + diff --git a/website/docs/contributing/testing.mdx b/website/docs/contributing/testing.mdx new file mode 100644 index 000000000..d01204651 --- /dev/null +++ b/website/docs/contributing/testing.mdx @@ -0,0 +1,21 @@ +--- +sidebar_position: 35 +--- + +# Testing + +Testing is vitally important to ensure quality in the project. There are a couple of +scenarios where testing can really help the project: + +- Testing if a bug is reproducible on your local system +- Testing PRs to ensure that they work correctly + +If you chose to test if someone's bug report is reproducible on your local system, then +feel free to add a comment on the ticket confirming this with the output of `wails doctor`. + +To test PRs, choose a PR to test and check if the PR description has the testing scenarios +listed. If not, please ask the person who opened the PR to provide that list. Once you have +determined a valid test scenario, please report your findings on the PR. + +If you ever need more clarity or help on testing, please ask a question in the [Contributing to Wails](https://github.com/wailsapp/wails/discussions/1520) +discussion or on slack. diff --git a/website/docs/guides/developing-wails.mdx b/website/docs/guides/developing-wails.mdx deleted file mode 100644 index 58f9e9bd8..000000000 --- a/website/docs/guides/developing-wails.mdx +++ /dev/null @@ -1,39 +0,0 @@ - -# Contributing - -This page is a guide on how to contribute to the Wails project. - -First, a word of warning: Wails v2 has been through a number of iterations and pivots. There is a lot of code that -is either on hold or deprecated. Reading the whole project and trying to understand it may be confusing. This document -aims to focus on what is current and how to understand that. - -## Bugs - -For raising bugs, please open a ticket on GitHub and give it the \[v2\] label. Include the output of `wails doctor` -in the ticket to help us understand your environment. - -For fixing bugs, please comment on a ticket that you'd like to take it on and we will put a label on the ticket. -It is best to use Windows as it is done in pure Go, making debugging much easier. - -## Features - -To request a new feature, raise a ticket so that it may be discussed. The ticket should be given the -"Feature Request" label. These will be discussed and if selected for development will be given the label -"Ready for Development". - -To implement a new feature, raise a ticket as above or select a ticket with the "Ready for Development" label. - -When raising a PR, be mindful to state what platforms the PR has been tested on. Any new feature will not be accepted unless it works -on all platforms (if it can). - -:::warning What not to do - -PRs for features with no tickets aren't helpful as there's no context to the PR and it will not be prioritised. - -::: - -## Documentation - -Contributing to the documentation is easy by clicking on the "Edit this page" link on any of the pages. Documentation -updates can be done ad-hoc, without a ticket. - From cd35536a79ba7b7b486036fd5980f9e5af2f4c40 Mon Sep 17 00:00:00 2001 From: Lea Anthony Date: Mon, 4 Jul 2022 22:29:51 +1000 Subject: [PATCH 78/87] [linux] Fix SetBackgroundColour --- v2/internal/frontend/desktop/linux/window.go | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/v2/internal/frontend/desktop/linux/window.go b/v2/internal/frontend/desktop/linux/window.go index 78262e81c..374450a92 100644 --- a/v2/internal/frontend/desktop/linux/window.go +++ b/v2/internal/frontend/desktop/linux/window.go @@ -431,12 +431,20 @@ typedef struct RGBAOptions { uint8_t b; uint8_t a; void *webview; + void *window; } RGBAOptions; void setBackgroundColour(void* data) { RGBAOptions* options = (RGBAOptions*)data; GdkRGBA colour = {options->r / 255.0, options->g / 255.0, options->b / 255.0, options->a / 255.0}; webkit_web_view_set_background_color(WEBKIT_WEB_VIEW(options->webview), &colour); + GtkCssProvider *provider = gtk_css_provider_new(); + char buffer[60]; + sprintf((void*)&buffer[0], "* { background-color: rgba(%d,%d,%d,%d); }", options->r, options->g, options->b, options->a); + gtk_css_provider_load_from_data (provider, &buffer[0], -1, NULL); + gtk_style_context_add_provider(gtk_widget_get_style_context(GTK_WIDGET(options->window)), + GTK_STYLE_PROVIDER(provider), + GTK_STYLE_PROVIDER_PRIORITY_USER); } typedef struct SetTitleArgs { @@ -786,6 +794,7 @@ func (w *Window) SetBackgroundColour(r uint8, g uint8, b uint8, a uint8) { b: C.uchar(b), a: C.uchar(a), webview: w.webview, + window: w.gtkWindow, } invokeOnMainThread(func() { C.setBackgroundColour(unsafe.Pointer(&data)) }) From 4c312b155d3e20fefd34dbba9c844a6a4c5e9556 Mon Sep 17 00:00:00 2001 From: Lea Anthony Date: Mon, 4 Jul 2022 22:33:03 +1000 Subject: [PATCH 79/87] [docs] Update `-debug` flag --- website/docs/reference/cli.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/docs/reference/cli.mdx b/website/docs/reference/cli.mdx index ab8e3792d..73dad026e 100644 --- a/website/docs/reference/cli.mdx +++ b/website/docs/reference/cli.mdx @@ -68,7 +68,7 @@ A list of community maintained templates can be found [here](../community/templa | -v int | Verbosity level (0 - silent, 1 - default, 2 - verbose) | 1 | | -webview2 | WebView2 installer strategy: download,embed,browser,error | download | | -u | Updates your project's `go.mod` to use the same version of Wails as the CLI | | -| -debug | Retains debug information in the application | false | +| -debug | Retains debug information in the application. Allows the use of the devtools in the application window | false | | -trimpath | Remove all file system paths from the resulting executable. | false | | -race | Build with Go's race detector | false | From 4726b72708be2fc458413090224ead9c42f3ef83 Mon Sep 17 00:00:00 2001 From: Lea Anthony Date: Mon, 4 Jul 2022 22:52:50 +1000 Subject: [PATCH 80/87] feature: Add `-windowsconsole` flag --- v2/cmd/wails/internal/commands/build/build.go | 4 ++++ v2/pkg/commands/build/base.go | 2 +- v2/pkg/commands/build/build.go | 1 + website/docs/reference/cli.mdx | 1 + 4 files changed, 7 insertions(+), 1 deletion(-) diff --git a/v2/cmd/wails/internal/commands/build/build.go b/v2/cmd/wails/internal/commands/build/build.go index 77e63728a..bffff9e52 100644 --- a/v2/cmd/wails/internal/commands/build/build.go +++ b/v2/cmd/wails/internal/commands/build/build.go @@ -102,6 +102,9 @@ func AddBuildSubcommand(app *clir.Cli, w io.Writer) { raceDetector := false command.BoolFlag("race", "Build with Go's race detector", &raceDetector) + windowsConsole := false + command.BoolFlag("windowsconsole", "Keep the console when building for Windows", &windowsConsole) + command.Action(func() error { quiet := verbosity == 0 @@ -184,6 +187,7 @@ func AddBuildSubcommand(app *clir.Cli, w io.Writer) { WebView2Strategy: wv2rtstrategy, TrimPath: trimpath, RaceDetector: raceDetector, + WindowsConsole: windowsConsole, } // Start a new tabwriter diff --git a/v2/pkg/commands/build/base.go b/v2/pkg/commands/build/base.go index 4825c8f50..351d944fc 100644 --- a/v2/pkg/commands/build/base.go +++ b/v2/pkg/commands/build/base.go @@ -217,7 +217,7 @@ func (b *BaseBuilder) CompileProject(options *Options) error { if options.Mode == Production { ldflags.Add("-w", "-s") - if options.Platform == "windows" { + if options.Platform == "windows" && !options.WindowsConsole { ldflags.Add("-H windowsgui") } } diff --git a/v2/pkg/commands/build/build.go b/v2/pkg/commands/build/build.go index 068433884..edc233b57 100644 --- a/v2/pkg/commands/build/build.go +++ b/v2/pkg/commands/build/build.go @@ -57,6 +57,7 @@ type Options struct { BundleName string // Bundlename for Mac TrimPath bool // Use Go's trimpath compiler flag RaceDetector bool // Build with Go's race detector + WindowsConsole bool // Indicates that the windows console should be kept } // Build the project! diff --git a/website/docs/reference/cli.mdx b/website/docs/reference/cli.mdx index 73dad026e..54259b809 100644 --- a/website/docs/reference/cli.mdx +++ b/website/docs/reference/cli.mdx @@ -71,6 +71,7 @@ A list of community maintained templates can be found [here](../community/templa | -debug | Retains debug information in the application. Allows the use of the devtools in the application window | false | | -trimpath | Remove all file system paths from the resulting executable. | false | | -race | Build with Go's race detector | false | +| -windowsconsole | Keep the console window for Windows builds | false | For a detailed description of the `webview2` flag, please refer to the [Windows](../guides/windows.mdx) Guide. From c48ad9be671ebf3526573875ea53e00c7d0771e4 Mon Sep 17 00:00:00 2001 From: Lea Anthony Date: Tue, 5 Jul 2022 08:44:26 +1000 Subject: [PATCH 81/87] doc: white screen fix for Mac. Closes #1508 --- website/docs/guides/troubleshooting.mdx | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/website/docs/guides/troubleshooting.mdx b/website/docs/guides/troubleshooting.mdx index 9c7898eb3..2bea2216e 100644 --- a/website/docs/guides/troubleshooting.mdx +++ b/website/docs/guides/troubleshooting.mdx @@ -20,6 +20,20 @@ var assets embed.FS ``` Check that `frontend/dist` contains your application assets. +### Mac + +If this happens on Mac, try adding the following to your `Info.plist`: + +```xml +NSAppTransportSecurity + + NSAllowsLocalNetworking + + +``` + +Reference: https://github.com/wailsapp/wails/issues/1504#issuecomment-1174317433 + ## Mac application not valid If your built application looks like this in finder: From 73f5cc3b929f49c5519638a5b947a4292b231125 Mon Sep 17 00:00:00 2001 From: Lea Anthony Date: Tue, 5 Jul 2022 08:50:05 +1000 Subject: [PATCH 82/87] Update issue template with links --- .github/ISSUE_TEMPLATE/bug_report.yml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml index 0b1397fb5..1c31a1cba 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.yml +++ b/.github/ISSUE_TEMPLATE/bug_report.yml @@ -11,7 +11,9 @@ body: Before submitting this issue, please do the following: - Do a web search for your error. This usually leads to a much better understanding of the issue. - Prove that the error is indeed a Wails bug and not an application bug, with a specific set of steps to reproduce. - - Search both the issue tracker (even closed issues) and discussion forums. + - Search the issue tracker using [this link](https://github.com/wailsapp/wails/issues?q=is%3Aissue+). + - Search the [discussion forums](https://github.com/wailsapp/wails/discussions?discussions_q=type+your+issue+here). + - Read the [Troubleshooting Guide](https://wails.io/docs/next/guides/troubleshooting). - Try to fix it yourself. Keep a list of things you have done to fix the problem. If after doing all the above, the problem remains, please continue with this ticket providing *all* the information requested. From f4b4e4cdb8ecf657ae3eb48cbcc77206630cd885 Mon Sep 17 00:00:00 2001 From: "Ian M. Jones" Date: Wed, 6 Jul 2022 10:25:28 +0100 Subject: [PATCH 83/87] Allow -appargs flag to pass flags to binary. (#1534) --- v2/cmd/wails/internal/commands/dev/dev.go | 6 +++--- v2/internal/appng/app_dev.go | 15 ++++++++++----- 2 files changed, 13 insertions(+), 8 deletions(-) diff --git a/v2/cmd/wails/internal/commands/dev/dev.go b/v2/cmd/wails/internal/commands/dev/dev.go index 2ae004d3d..7f8c2e8ed 100644 --- a/v2/cmd/wails/internal/commands/dev/dev.go +++ b/v2/cmd/wails/internal/commands/dev/dev.go @@ -104,7 +104,7 @@ func AddSubcommand(app *clir.Cli, w io.Writer) error { command.IntFlag("debounce", "The amount of time to wait to trigger a reload on change", &flags.debounceMS) command.StringFlag("devserver", "The address of the wails dev server", &flags.devServer) command.StringFlag("frontenddevserverurl", "The url of the external frontend dev server to use", &flags.frontendDevServerURL) - command.StringFlag("appargs", "arguments to pass to the underlying app (quoted and space searated)", &flags.appargs) + command.StringFlag("appargs", "arguments to pass to the underlying app (quoted and space separated)", &flags.appargs) command.BoolFlag("save", "Save given flags as defaults", &flags.saveConfig) command.BoolFlag("race", "Build with Go's race detector", &flags.raceDetector) @@ -560,7 +560,7 @@ func doWatcherLoop(buildOptions *build.Options, debugBinaryProcess *process.Proc assetDirURL := joinPath(devServerURL, "/wails/assetdir") reloadURL := joinPath(devServerURL, "/wails/reload") for quit == false { - //reload := false + // reload := false select { case exitCode := <-exitCodeChannel: if exitCode == 0 { @@ -605,7 +605,7 @@ func doWatcherLoop(buildOptions *build.Options, debugBinaryProcess *process.Proc if item.Op&fsnotify.Create == fsnotify.Create { // If this is a folder, add it to our watch list if fs.DirExists(item.Name) { - //node_modules is BANNED! + // node_modules is BANNED! if !strings.Contains(item.Name, "node_modules") { err := watcher.Add(item.Name) if err != nil { diff --git a/v2/internal/appng/app_dev.go b/v2/internal/appng/app_dev.go index 453292696..e71149180 100644 --- a/v2/internal/appng/app_dev.go +++ b/v2/internal/appng/app_dev.go @@ -68,6 +68,8 @@ func CreateApp(appoptions *options.App) (*App, error) { myLogger.SetLogLevel(appoptions.LogLevel) // Check for CLI Flags + devFlags := flag.NewFlagSet("dev", flag.ContinueOnError) + var assetdirFlag *string var devServerFlag *string var frontendDevServerURLFlag *string @@ -75,25 +77,28 @@ func CreateApp(appoptions *options.App) (*App, error) { assetdir := os.Getenv("assetdir") if assetdir == "" { - assetdirFlag = flag.String("assetdir", "", "Directory to serve assets") + assetdirFlag = devFlags.String("assetdir", "", "Directory to serve assets") } + devServer := os.Getenv("devserver") if devServer == "" { - devServerFlag = flag.String("devserver", "", "Address to bind the wails dev server to") + devServerFlag = devFlags.String("devserver", "", "Address to bind the wails dev server to") } + frontendDevServerURL := os.Getenv("frontenddevserverurl") if frontendDevServerURL == "" { - frontendDevServerURLFlag = flag.String("frontenddevserverurl", "", "URL of the external frontend dev server") + frontendDevServerURLFlag = devFlags.String("frontenddevserverurl", "", "URL of the external frontend dev server") } loglevel := os.Getenv("loglevel") if loglevel == "" { - loglevelFlag = flag.String("loglevel", "debug", "Loglevel to use - Trace, Debug, Info, Warning, Error") + loglevelFlag = devFlags.String("loglevel", "debug", "Loglevel to use - Trace, Debug, Info, Warning, Error") } // If we weren't given the assetdir in the environment variables if assetdir == "" { - flag.Parse() + // Parse args but ignore errors in case -appargs was used to pass in args for the app. + _ = devFlags.Parse(os.Args[1:]) if assetdirFlag != nil { assetdir = *assetdirFlag } From 39cebffa871a2e7e69cf6020f60a163fa786c9ae Mon Sep 17 00:00:00 2001 From: Lea Anthony Date: Thu, 7 Jul 2022 21:07:42 +1000 Subject: [PATCH 84/87] Fix: use correct json value for `buildtype` --- v2/pkg/runtime/runtime.go | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/v2/pkg/runtime/runtime.go b/v2/pkg/runtime/runtime.go index 20e44dc72..6dc61f368 100644 --- a/v2/pkg/runtime/runtime.go +++ b/v2/pkg/runtime/runtime.go @@ -67,12 +67,14 @@ func Quit(ctx context.Context) { appFrontend.Quit() } +// EnvironmentInfo contains information about the environment type EnvironmentInfo struct { - BuildType string `json:"buildtype"` + BuildType string `json:"buildType"` Platform string `json:"platform"` Arch string `json:"arch"` } +// Environment returns information about the environment func Environment(ctx context.Context) EnvironmentInfo { var result EnvironmentInfo buildType := ctx.Value("buildtype") From 1cd31573a9222314fc11add92dafb70e98ed230f Mon Sep 17 00:00:00 2001 From: Lea Anthony Date: Fri, 8 Jul 2022 19:53:13 +1000 Subject: [PATCH 85/87] change: improve cli output for `wails update` closes #1528 --- v2/cmd/wails/internal/commands/dev/dev.go | 9 +++++++++ v2/cmd/wails/internal/commands/update/update.go | 6 ++++++ v2/cmd/wails/main.go | 2 +- 3 files changed, 16 insertions(+), 1 deletion(-) diff --git a/v2/cmd/wails/internal/commands/dev/dev.go b/v2/cmd/wails/internal/commands/dev/dev.go index 7f8c2e8ed..97604ee33 100644 --- a/v2/cmd/wails/internal/commands/dev/dev.go +++ b/v2/cmd/wails/internal/commands/dev/dev.go @@ -37,16 +37,25 @@ import ( ) func LogGreen(message string, args ...interface{}) { + if len(message) == 0 { + return + } text := fmt.Sprintf(message, args...) println(colour.Green(text)) } func LogRed(message string, args ...interface{}) { + if len(message) == 0 { + return + } text := fmt.Sprintf(message, args...) println(colour.Red(text)) } func LogDarkYellow(message string, args ...interface{}) { + if len(message) == 0 { + return + } text := fmt.Sprintf(message, args...) println(colour.DarkYellow(text)) } diff --git a/v2/cmd/wails/internal/commands/update/update.go b/v2/cmd/wails/internal/commands/update/update.go index 5eef6af25..8539d1b19 100644 --- a/v2/cmd/wails/internal/commands/update/update.go +++ b/v2/cmd/wails/internal/commands/update/update.go @@ -55,6 +55,12 @@ func AddSubcommand(app *clir.Cli, w io.Writer, currentVersion string) error { desiredVersion, err = github.GetLatestPreRelease() } else { desiredVersion, err = github.GetLatestStableRelease() + if err != nil { + println("") + println("No stable release found for this major version. To update to the latest pre-release (eg beta), run:") + println(" wails update -pre") + return nil + } } } if err != nil { diff --git a/v2/cmd/wails/main.go b/v2/cmd/wails/main.go index e69db18d7..dd7219fb5 100644 --- a/v2/cmd/wails/main.go +++ b/v2/cmd/wails/main.go @@ -23,7 +23,7 @@ func fatal(message string) { } func banner(_ *clir.Cli) string { - return fmt.Sprintf("%s %s\n", + return fmt.Sprintf("%s %s", colour.Yellow("Wails CLI"), colour.DarkRed(internal.Version)) } From bf2d83d9392ff47a207a04fba48d232a6f94e748 Mon Sep 17 00:00:00 2001 From: Lea Anthony Date: Fri, 8 Jul 2022 20:18:31 +1000 Subject: [PATCH 86/87] Change: Order of generated bindings now consistent Closes #1531 --- v2/internal/binding/generate.go | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/v2/internal/binding/generate.go b/v2/internal/binding/generate.go index 782042ea9..43be5d40c 100644 --- a/v2/internal/binding/generate.go +++ b/v2/internal/binding/generate.go @@ -6,6 +6,7 @@ import ( "fmt" "os" "path/filepath" + "sort" "strings" "github.com/wailsapp/wails/v2/internal/fs" @@ -32,8 +33,17 @@ func (b *Bindings) GenerateGoBindings(baseDir string) error { tsContent.WriteString(`// Cynhyrchwyd y ffeil hon yn awtomatig. PEIDIWCH Â MODIWL // This file is automatically generated. DO NOT EDIT `) + // Sort the method names alphabetically + methodNames := make([]string, 0, len(methods)) + for methodName := range methods { + methodNames = append(methodNames, methodName) + } + sort.Strings(methodNames) + var importNamespaces slicer.StringSlicer - for methodName, methodDetails := range methods { + for _, methodName := range methodNames { + // Get the method details + methodDetails := methods[methodName] // Generate JS var args slicer.StringSlicer From 7a634649977241d00abc7e4b7fc4779a6a465923 Mon Sep 17 00:00:00 2001 From: Lea Anthony Date: Fri, 8 Jul 2022 20:33:49 +1000 Subject: [PATCH 87/87] Update vscode template (#1398) --- .../templates/ides/vscode/launch.tmpl.json | 15 +++- .../templates/ides/vscode/tasks.tmpl.json | 75 ++++++++++++++++++- 2 files changed, 84 insertions(+), 6 deletions(-) diff --git a/v2/cmd/wails/internal/commands/initialise/templates/ides/vscode/launch.tmpl.json b/v2/cmd/wails/internal/commands/initialise/templates/ides/vscode/launch.tmpl.json index 530831088..0a5437c9e 100644 --- a/v2/cmd/wails/internal/commands/initialise/templates/ides/vscode/launch.tmpl.json +++ b/v2/cmd/wails/internal/commands/initialise/templates/ides/vscode/launch.tmpl.json @@ -8,8 +8,7 @@ "mode": "exec", "program": "${workspaceFolder}/{{.PathToDesktopBinary}}", "preLaunchTask": "build", - "cwd": "${workspaceFolder}", - "env": {} + "cwd": "${workspaceFolder}" }, { "name": "Wails: Debug {{.ProjectName}}", @@ -18,8 +17,16 @@ "mode": "exec", "program": "${workspaceFolder}/{{.PathToDesktopBinary}}", "preLaunchTask": "build debug", - "cwd": "${workspaceFolder}", - "env": {} + "cwd": "${workspaceFolder}" + }, + { + "name": "Wails: Dev {{.ProjectName}}", + "type": "go", + "request": "launch", + "mode": "exec", + "program": "${workspaceFolder}/{{.PathToDesktopBinary}}", + "preLaunchTask": "build dev", + "cwd": "${workspaceFolder}" } ] } \ No newline at end of file diff --git a/v2/cmd/wails/internal/commands/initialise/templates/ides/vscode/tasks.tmpl.json b/v2/cmd/wails/internal/commands/initialise/templates/ides/vscode/tasks.tmpl.json index a085ec3a9..fdf1d48dd 100644 --- a/v2/cmd/wails/internal/commands/initialise/templates/ides/vscode/tasks.tmpl.json +++ b/v2/cmd/wails/internal/commands/initialise/templates/ides/vscode/tasks.tmpl.json @@ -5,7 +5,25 @@ "label": "build", "type": "shell", "options": { - "cwd": "${workspaceFolder}" + "cwd": "${workspaceFolder}", + "env": { + "CGO_ENABLED": "1" + } + }, + "osx": { + "options": { + "env": { + "CGO_CFLAGS": "-mmacosx-version-min=10.13", + "CGO_LDFLAGS": "-framework UniformTypeIdentifiers -mmacosx-version-min=10.13" + } + } + }, + "windows": { + "options": { + "env": { + "CGO_ENABLED": "0" + } + } }, "command": "go", "args": [ @@ -22,7 +40,25 @@ "label": "build debug", "type": "shell", "options": { - "cwd": "${workspaceFolder}" + "cwd": "${workspaceFolder}", + "env": { + "CGO_ENABLED": "1" + } + }, + "osx": { + "options": { + "env": { + "CGO_CFLAGS": "-mmacosx-version-min=10.13", + "CGO_LDFLAGS": "-framework UniformTypeIdentifiers -mmacosx-version-min=10.13" + } + } + }, + "windows": { + "options": { + "env": { + "CGO_ENABLED": "0" + } + } }, "command": "go", "args": [ @@ -34,6 +70,41 @@ "-o", "{{.PathToDesktopBinary}}" ] + }, + { + "label": "build dev", + "type": "shell", + "options": { + "cwd": "${workspaceFolder}", + "env": { + "CGO_ENABLED": "1" + } + }, + "osx": { + "options": { + "env": { + "CGO_CFLAGS": "-mmacosx-version-min=10.13", + "CGO_LDFLAGS": "-framework UniformTypeIdentifiers -mmacosx-version-min=10.13" + } + } + }, + "windows": { + "options": { + "env": { + "CGO_ENABLED": "0" + } + } + }, + "command": "go", + "args": [ + "build", + "-tags", + "dev", + "-gcflags", + "all=-N -l", + "-o", + "{{.PathToDesktopBinary}}" + ] } ] }

IS^`pNZ zJ%U$MzzYoiw6zDNB+^=+>NH$-YfGL`B9?cBhEONWX6T)gW%WNmZ3m-q$Ns2)nWi-j-|xLaug%jH%#;1 zt?PhP4a7^eP7`<0D86jn(@ATy-da;WOz?eS+mIi1MfKo~&x%))Zj{vAd34o5bOUYb z%YJQVt>640jQFm;l1WsuRa3L0=6ria`{|ADJ6|8 zIp(p@4qZ%ADh8!}IyJb@2P(W!#79gbQ5vL{>t(8hu(Wl_DlL#ZXnFkNv~4)0YIIeu zD+%A)1E(^~e3;aQRswXSTjx6pF>zirWE-}Bs}A;}&{}A$oFuE(M!=XjOUkkm)_rN3 zfrxR|K~f=;ME0Kwc;QrY^UHBFBohg9$HlX`rJCbW(o97Bj=tECkt zq3nF#Ja`vkU#~gyVJL*b7@k8Rh;g7lS-y)|az+$yd$fyVf;k%XD8=f@$DNkFxZ1tq zg4qV}Wb&Z}t9y!%16xiLg52c0M)-*^5%~9_8Fg=5)XYr7kdIp%{%k|KsWqU=b;>0ojXK`G@u*@y?Vf}d0EeaLk_jhuGu`MljkyF;?a~NYK}T9K@UUX7I%vlqBHG$dsGqb70a#t z7^rCAdJ+HZOAG~p(R#oTUzXU|5Zn*8To+G4-`o%OssvZSO(20Rg3pA;a0k6l!K02^6^*g$fBy5llh8?A z)o@C1+d@v>0XYqDvQ6ifI#q+(k?3P`GIOAq=_KOgUoV<0ML5mM7!2*}b^#q_p4XgI z_2j-YynKq^_G)PctOVsf=d#XdfvVhY74>@cl|;NlEZ7U(WIBo7S@=dg;HO=3hb7oz#fZUZI^h>gBfw~ zL7Vm!%#5VI)iWd{BJGs~umvmf`*&rTz3LQcFPgSks^G_cc5E{I zNqm9FeQfHa$zg>B9?!)hJOzzk6h1~Uy@K?45DAq#JQ;Q7p)ccEPE+!~$Ap3td2T35 zb4LioD?EM%@=sq0j&E0k$zj!{K^m9*qO^BwYIHc`6ix@EJm9HPI}QbfiX(74?=rjx zT{cX%et!BO8bgYR(2C&Gorrt(@l1s4mc~WHh1adEZw)(nVnNj*OGW%M^yGl~K}_dQ zLBq%vQXk})kX7->H^D@ew~rPRSOPunob#Uf&A=>ku$MkMq2CzIn?RW?vjibb!n)8<1qEJ-pVQXzE;bo-Gc@_KYZFYV+<{Esme85SEo}z0pBZjF zDNs-#CIsdzF3Qv9oUPMx&O8Jx*0!>@6Wog;2w3$twQ4Kb9E*5gTtiy+0rQ38y?6LeK)d=a^L90hw$i53 zq1(H&k=AiBfO&VH%&-K1_Swd8O!uh7NQyHlHd z)4n62U^kh?Pj$sHEL(nf4~u5|jWE*ZyZMG79nE58|GdP2e-iO!i0n$Jf)!S_z6kbg zYVmQ14FaLlt3C1@*u5nw1DipVKzFipxCRuD*r?ohj}U+%-aC?VTd~2Oz&iQEceOwY zsYLQDf=voO#K9U*FE6}$q5rP}yK7vylogGi{2<3#*fVf#euq<&!A*}f9Ti)LF|yZR z33ekuPllw92-v7N_SntMGQe+(h9*^4IkKM~XFR#DC2Zc`t+d&#=rwTO36US&eWZ-3 zC+HU>>;>DoyWjjV&39g9#$)KYR+_~2BQ;?I0f&%ONuC3ce~iq0pURuo#`u4FEWTWoZ3o%c6mKPw)K+)ApZ{D|D@l@2izS_z-wYhJ zuQbe)63}T?pa)M#js^AT*oK@0Yoi?zs(mYUT}+?WW~X)$%av2m{jVyMS-EEpL!){ zTmB}kYv8KGWTfilkGl)+K&u@1`(q8-pnd29Mg)$H6%Y&BdaWbJ$_%*pSIAP5KStXkngfz)%_NO_O(d@U~GE9zy^;e1uOODG%h?z+|So%#XKr-CI_x*-k2 zzS?!~Uf;S>QoregUVu1htoP5Xv#t*c-RM3atZnVQr9SFJ3Z3a)cB3?ot!`POMqA@D z(#H;wlA(7GZ2|O*(Fl~FEgmsK{l25I$H;Aakt)K`#9(<1AWl4JW0zO4NYHxSes#%9 zv2sbE`PcCD#4Toa4L#6h^um=Q!+6Wd5AiF0hA%7Jlf@jL&txf>0J>vX%}x8?_1tD!uP1+KHof$NY103(zVahO;j98OU3~7 z(pvvg*9C&`H>j3XpE#p{|>se79VmG#Am zs(IAwt3wjQ&&$V@)8~V~HlJt2@7LrD8VT?q76)__!E%8@8+}Wkwo3cgy1=-&<$rRi zTUO7lwdJ=yAgDucT^dhky1m^g@bBu~9O>tqwC2iuycT!06hRBJcSDtWP~W$q#|swb-bvJ zc1XjhPf=0s+L+ur)u!iEgQ*9uIZin3Rmlxt?Jf&SCzJL-_gu0fsI5x{};D6Eu_mc1jlo+U6&|Lvt7;JM=q)9Jbqk24HFV(i=zUM zah+mZZP+3g)bkn-aD=J_?=&)h7VH$j&V71$I1Bbd%^9tdK1qk53DqO@(b%yffEcUx zf&hX%k|)O-$@a64Qmq4t+QQF6s)Bp4pin{h;JNQm5TX`maZ+ThMY@(kDy+5vN&?sS zN1|LjLu!lH^PWcmvpK;v**(1}DFQ9+5s>r5Qw;ip`Gt@*Y7V3!OZZuBf?pzTOV=;L|^cBeu{L zosm=vydBRg144W0;ISBgiw&3fd!fVfn&vRD^HdLr-1nxF17q=1Um!#OhWpOvYJ42enWZx|A4_Z9Mu!&tEMUra5m|@n zcTr#>Bp`+w?Emr>cNOr#qsWJ>RD*4x;XJR31YTS0lfn-(huoL#@ri`R+wQ90ewvi1 zColTl@W$y*7pnvr4u9t3xCvj4D@kN0mEn6lHjGzdVTvyJXAtw#OFaC=-qz1oZjSI^ z0Zejs^;eVT6{|kM!d`+=`t6QDDyIo3DaAUVe_07&gB97F*mgKpH>F#e`}lVxDr1{9Iwz(9dfag zquNU%yv7I7PX`wGta;=rAocq$`F?uhb7-ICn2#1`(;GwY3g@-nwwouONJRh9Ut#%1 z01!8_jB_d}#rM>pH*M=!?}h6uMQUrl?V5jNPgi+Y5TT+NK>lb^9BY)m(R70bB{Wu56~dI& z`u@mE8RTmi1RGNCN)Ce{Dm>S!jkrLpJv(i?9Q;?LW>7+_r9b9f*z& zgnT#`hpECFf5U^d7h*HP+|ctc61^PgzPE}AjpAiHnsJD%C5~kOm6i3*Pbc~o>zN<= zqzuQN>W6u$Li(ym9^&l6#qQX)qlxl$l7l6__vCxMx=F}9jk|*)VMkpaypG?jy}^vG zMI>YMo)((6=G^*nZl%v-;K@uQVMP@BXFuud=i@EYl$WH{8dF|PMw9YG2eo?#ZZ>d# z*-^FrwN{{);LnE50Nv~<^|i#i+pI5Ay0i0Be>L2a&@0o9*S|Vf-*(CCInYLIHDwE# z!cyQLfgP>7FlR}$8_1^E)vyt6z_ew}6DaL0BUSxv(AHxW(thXc zUOFWy-3td80B+tMg;2B{u%Wz(f}S-6T^1ldrgl~Awh0l37Xi8tWJ8*{t=e1+_w10` zY9fxwtowwB?GLSondZD^#*2pOft+f5sT!G(DWNGtD#mCy8- zW%R}fEU@ATFf8Ycsz6o$+9NZ-@kNb%B1;Kr9h#@k>US#&5Aw4dmkWdMCPxE}?=zBC zGI#3QDq0)RqHFUFeD?YYlja{rIEC}gqR`ylc!GP`GJ4J>YBhMnW_K-`?*?)BehF)6 zxeP8Zspf5RtS#JgtA#GVM~OP$5>XKVH!G?h(es&Z6z|lur0{e3pi_OuHel9p3S?ue z01S23NHkJ+*{|%p6=5o{dNO)~7Cai2_Udof=*p_3hN>~lHxGp5c7jG;`Xm&;7$dcJ zfWC4c$vub82?B~(GbJ~8GjuP<)Lx5SBC^cWs$JlfMq{OT0$`DT9B%FZbI#S1WtnHf zRqOjm3!+i!ZhF{2_S2@JrHM@FW{XlDng0C6(hvODfFsdOsrSm-!I8vH!qQ3lTtM$Kn!~7>j)|NY$&kk$+raD2 z!3*SzTF3#-M~!XLFy$SAVatb$r+5-Tj}@#zN440^&@CAT_YVRk=w^4+!Ba#SO)J{= zyBjU72e)q#r?D;pI82y57|uc6Hj4Xltw)pPv&A1R32)CPw`PURA5x(fMnABnEc#Cd zkS5ku0hzCIQzES`OKY}~OEg+bbUZl0y^y=UJR8Hl`cls-&o$i#;r91KNgx7HSz5Q5gW=GiFqTr8gHzkk zL2>i6=le%GX^=PB!b)T2t;-6g`adwbTik*a%`_R zdREGxGBNp?rlo2G3A(Sv)-3=VfvJ!7>ZHKQ|3`8IED zRb}BMsN#Y%vES7;i_BsHf$D6zm*x!DS&n$0&Dh`l&1_DfxIGA-S1E67D#VJlODV55 zNQK%j%qF1e{!jW(8W!bZMRUw>kHx8gdJ$j$&2NB&{V~?FD>1OXnt9jj9nEy|Wgxe# zUa4z~D{BhzZKFi1jo*3sI*SW?G&dt?=-WnfM4p8&Smm32S&xX?cWtMvD^8gq74F!< z);?*14&#|F=SijU5Hn=e<}%4EIaoBHVi&2+iAg|ViMN3)aVo$2zR$?Z;0}R;;&Tnb zh%~GXrcre^KXDdmJH~qPbklIiqtT`4)1@2tYY9Vr_dBH;-nrNQ9GfGk zx)ooDmXObiAvg`#{s~AKgM7ZYEOd%zh4#${t*9!FJ}GimLnfsM;KTjAXOR4;#rYYdJ8EZ6!kiy$|574-sa3U=R!`C}8o=Cdz}osDm^~EdZRxvOrLx zjc{c^X8nx@sg3LOtP$%gEi0hAF3B6gkM8Du+oWj%i~;6=q3|hyVUona#85!{<67R2 z+o8n7yc9ggThbK%lxlLEKeL9lM4t`?=zSUGKTZ*cn+zhlqtP<|__G4`k^!BD;t6?P zWe7-RZGbUHMoeAK}S=rx6V@oq}I$j7w zmZzCc4P0yN>QCT9XZhu}=PtEr#@40Q)7#ZPQu-(#KYzNiY@NzDn+*% zxV@A?A|{N9u*r&v8TVKD&J01qL5B~Ir1xJL<_4x@J-Oil3p zAbFm}o>0sY>z5mx&2)>OfB!)011t|XO#kX)q!rpugJTYGEPD5-D=j0zQeC3qs|sx6*bOP$t`x9%|-6?b;ob;j7saJh!T!w4O`^U(*q)KuX9^topH(067;x zZ@lIMKaz8MvSzBjE|%a-4CDiTdCOcmd>K4CTZC(IyJ?*T3$53_aZmH^3m z=p%^xxIbujYjZu6u{IUYxgD>~pJoe4e_##d*6);2=LNquf7s!wUUVuYtOjLU4)vXN zD=d3e*x0c#M>tF>yd1nzADeMp*pgqhKTet778aV`Hdw5M^&)jCCFSuElr%-#1l%58 zS@~vWg9Jc*VcYu#G3s+(dBlEe~;dMX~<2b@@J9$}f^EZW9zzvC?zfS5hLnyY6v_t=5ITm!Ti% zt}aeUZm-&#n!C$0%2PQg*lOUkXW-AS`=GXNptmQtsyvfIq@X+cx>b-wn2Y>iM?PN` zm6K&DT6<~lIb@(GQeV2-KwH?nRipr`zO%yVeQYryU0TnN)yI3pOK~vOcfLl|-^SpE zuYBmBd|sSa1*)fk>0VD!HD$NL#-HBfoChj1H|H}QGBcn36#7Qt;*tS_>Ejgu-6G0!<1yETYhAIPRPu#)(t%6WzJr{bv z^n;SA@Lquks5a5OU{mNF(s+5duy9Xl+aiUvDx+T^DUjX2j;}3gpt}nF)7wVW5q9my zF|7h;Ya-^NkXiAKp?m)OXA~gtAW9-MZ*zL)j*Och1-Dv~eo(i^kX(_Q!v~cNz5Z7W z%9lL4ZpTylLzUs4DnUr}ODiD{5jAbuqY+33cofVV>Dgu*P`JNApW3K&^c!_f zj&%S!=LiaDYelPXn|wVY3zEMA-OyZDc+@t=U`gqFpwff7iL`+RAD5G2p>rs+4pi&b zcs+exZHB(bicxVC_{t~8ac&yM{PfEJhu=jdFVWKJo5_6#pwX`807XynyfGA;`@!g4 zd1u`%m3SlUe*A2`^(rGaA)}?BcdNEQbjX$QAPT2>m?K-9v4ihfKY7=+v1S1{YBP$z z1#cl`JEdxzch}V@ms!)~8F1Rd_2JL4hrL3|wST^Q$$6Ktu`*0#MyhrAwI&ZwJYYI} zJZwK??UrmxESNB_5R4D>nnSmk+xxA-}H#-+Uw|`1cQOi+hPTS4#9<-h?bDJEUkJXZA zCr~S}m13Wf)QIn#V4^4vZF0_|X4^E1Caq4pPzE$d5qrDT7VPXli!BS*h*9%6)rH6a zLQ=T@koD7sHvlyckPg1IV0*2x#9EeDg^?XV;MFAGR3UGeOcyH)q?o(D{GeK)$@7(@ zY#{ejY@G`yVARX^gQntLvZEEsBeKNRFIZIT9XNKi@}B&Mgmi%wcJkcjPdTxj#6rOh z24ZIl0%B_M7d9oX0dSAIA+{Lbe!d-=Dh#pXk7p>|Wlf$rnqp2=1|6GgGsR?{8J3lz`?t zDzvfsV)9`wIAdlQC|2^0*=??##Z`58Ih?jp)bw9ZdUOAsF@g+~4KLAA72uPRLJE&k z4y#XWnR6IZ(qJM*zc+*l(SP8qohl%a?Kk1MQvX;n34r%SVYO6z%fqfXo@+_sd`7$I z{sESg48R!k!JI%q5tPE*@Q*eeiuUq&Z4pFUwQeN370ya43FP7a06HOw;33fJZG74R z69udXYo;d-JIw%czs{E^*ohcXh?aT7ghQ(^7ExF>Ew|19MD4+u0ei2d5N}t_0&N9# zOb1KvQ{Zd5yNyQVq&>czMXj_CNaxk}o6HDNr^dL#7>%LF>swEZ%)&IICFS7XNI(d_ zculE6JGd3W{0m-EwEgzdyzPTM@BmIoZy48Y`@H**1Fef@KsNq7_Mo5*3p0Glt>h8m z|7HY$v6x`v#%79!&%1^XygG-hWdSl- zCFO?uFY6o8=g*>Gchxq2fSeDgJVWN$%iVxH4&Dlz(7=wUG1shyF@z#v0Y6bTLPY2@ zH|hH)(jiy!d(&}t8Fz3YX2C zmuqP{d&9blO7>u7@I2_oY^PZIWqzCeY#kS$NCQ3ckNP6TMSlJ{<1 zfogLW^y zJj4NG=YdmgkgxYajQ!}9;5FIxP}C>qVPUK*L_=vJ2s^&nln1~U^14;aE048Een|e)dR|CO9e(6q}(0m1@3O~;FU5%N77;>kSFM6!j~#{8jUWZ@yN>g z$;E*2Gs66pb7)d$$9=QRZjs@DdjD~8P4M0wI^^SMNw+&U2ZzgV=_~9G0GnBlh(#^! zWW$?TUMDMhW#YIS2bLSJ0ZOr05InZ!0AtVSN<-V~1n^B3tWhx6+#{ElhrIjA{k*(m zUAMF@B=^UOjq!*b{Sr{9DrcQyG;w2xmi2-5IIk+F;3d$tD-{-sr77FdqU!#DEGRB= zEeI&~&$!kdgv=6?B2bWf>Y;;gqDvlnE4}ZdYV-+@Lma*=(m(X`itTBT&^O&kbO;cT z_!sp1nugs%O@!;EkfpT3dEQcBA_`qq;k4u<{w$Sd6WwxI&7;B>;WguQfA}*z z&&`o|<)0aJU%C8F?u668@%vXCJ9Nv*YeR2+O-gV(rzSwN!RhNRqK2E}4KApm}R+@Nf zzyKn1BWf`s zL`w3ci*kSz9n$;xjuWVUaFu(^`a{|mB_L$@aEq60A*U@rXsXkqq!)H}tRcIuO}FJQ z3-M?`ah!}&S8W_S|NbJNr7rq6X~&rs*>}7#3VU9tl1Jk>N5A)33{4sJ7cpNa6Ryll zTnvz`>-Bj=|26NIqL<)XJ0zNGFtH>rm{oZq+CP4|L-ApmI}{M#Td;)}X9yZvLr05{ ztoLb=et?K%9X1>coNG+!C=W8X~NGt^aeI_Ar`}zCz%*J^(Vx(ZT{!@sjy>R2w zV$DbV`z3{UYdjnkOy73{fy^APWy16O7L1O#r-v6_@{C6+ovG?VknSZamGFy=%3hZ4 zI)ctUdlYHpL;Y*=2^!LNHFfW`MG>(NE(U1KudV~t_jalh@hq{sVNGw8^dfKeOJ{K` z?6^r}*o_F0&%v0Mzkt&D1F5>@aG$zGLnW&^lTN;>`IKSYvM1+M?$KSi@^b_7HKOUDcXC_5}c8OJJ;FZ^mf@`5^zt5^1^O1x+Vq z(7iJ8M*8{ebZV6TkH*}4eWMsp@$WA&tD?kp4hV+A zg+lgT`fLw6bsWH~h>P0>C4^8J$aStdAR0RiD5kd>8)h-sa9FNouB+6EqG^}>vSqf^ zB|3hk9x(3k+FGvt3h+>(E~;rK1y5E6yRdy8J+9kxv3(x>-j zQbUnwayrZF2=8T%m>j)4n6wSh7ZCX*ov@OW2sVcz?fVM)$pKS5Dep==BYYAJP9%$| zn5AmuxD!MP;om_^J_##;Y^kLj=lqZZ-uRMkw}K;qXRd)N|1M2YA^8S{&*ChxUToob zr@oJftSlj(2GCa9MMXy#eMYnv~EP9jaZ>w$ZB<1hWrl=Lb_^o+1S$oTFZ zda;SWwa?_$)S|qL?CNhI^TRNJUbt5FG8fS2QBrjbo5T0uu8H#V+!6L(n*>xR6DxwO z%&c8Tzj`yMSkNrc;fU_W%rBLi+6JnO`sG0^CQ@#IHC4w_qG|x*m8!#{Qp1@)049&X z?Ep6B?PIc^Me4`P=|L5S_(NMsa3(_swm+w{d$l$>m*tmMf0YhC1tx1;j$~=D+DbO? zC7=#bEoS_Bn;?jHZgC5Iv+_SQWO$qa7R)9$*lJ_p>6!i$mU{CAof?aLHhbJtz4fLW zDZXcU>SDr8-S27taFaS?r}lMZ^+rNjac_a7LdG8LexevX^P zq-E9bFQ@yEglX*n*ZMdJJG6Yg{Vu7JI7wTji@r_wsuOQ4c^Y$(ceGC5gpuLXdT3*) zPV_4c3|haJ8dAoToHWtpa9Y;{Ofw1y5yG6Y$X^A&66Y6p zCg@Fh8$b_b%xX0XlPMkHN$Etn~46GkdeGLG&pNs zu}|vGfB=23dL}M$Nwu~XzCEP0oFP9U&uKqVY5I01PE|%Ba&S_0%WB|ByvQ(Pd;F>b zn~lnT?8Bo##yuETeyZ1RuA0ZaHm{6lq<{HyuktH-DmVQ{<8J)V{5gfo{}+D__|_v& ze;!&mO9gE^PnwdC;swYZKD!D^-)NPDPG⋙)a2ep>`#T2HH`kYRqh{N+uep-=E%g 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 a<{8EB#`{yHk3V_09t=3w=a zwB#XDla?b81lk)Du+Xv4F%a>>5^&oanQ$ryiTu;}bHqbr=ICh4Nl)+M;zH-bOb4_# zrDx>e;Gkz-Cgr1R(f&M?$9nDSt59)s*|3lr@4Cn}SFaz5DYXSdl zihsfX!|*eF|GSB+zU}{}EG_+iSGTtQZ_99S6n6d$#6N@j-+cP72^^H%Y>nv^j2(bZ z_J+p7&c-&5#D7QPuefl^nY$WWsR@}|8{0U1Mwf?(k%8^|{|{FG515^W_1~x<&jd!UKA)hFhlAo_zqTv(8m zk%N_$mWl2kGkm6w^V8Pc#7#)w@l%V5;j=;+m}wbUlo**g85ublS*Sn%85sU%{#*NV zM;Pfl>i@s=|Eg;O?oSJ8X-+Y72S=d2+ux#p6uY9a-9JYE7+RVCUF8G>f9IN0-|(*> z@etYC1C5*vjg9`E{FCke;dCRA`>TEl80i=p=>C!2 ze_6Pg8Go|bOw0dB2LM13?G)W9`9mIUkk7(^kFqE`TOcQeX^hCiT<#fS zE(=nf_W4>g>)urs#vDN-$iFCGSMUv@9`cWX9Gbv)5eIq6;S+B3xFLt;1Ml;P42Px% ztt!Y^35iMvL8|nrS4Euz1GC{H*Z$yda0u`r=-TOUQjo>wx=5&$&Ie4Ea}h5KDJr=w zpb73wYLySQFPFGG0zuv{d*n?@F=fRhp$jSlFA_7c&i#Pf`2T=EJF{)6heF^R!v-j~3Vh|DSI{3=V z3M=SK6;H2nOH8LXcy4CS0ky^iVVzBPzmss-Y4;whBX6-jtyY{BQ+YL3Tc&^{^fEBp zu6efhnxilhc{Q%G#qSO5F!pgiUYGW_=~zB~JH_WY1IAWN-2nhV?EC8n5>JhY0{{>J z#DxTuT+>e5&tgbNqjC4~+}zJ0RM4_JTVu`?<&X%Nqg~m*-c=DLHqDST-x9A9=ek37 zd1F&Dr}u;MtT~l15fgKB^D>2fJZyY~U{1)8Bn20v0g}Px7oh9|za9{)gh-FB{sP__0g8`CmYeApJh4*_vs+jo+?2!F>sl~w~1Eaueg;WEIMaiMx zKv-hH!Au!9z8YHjCKPn0CS%LKxxD3ZF~a;IMd=e~h&}YE#@HiivPCQkiw$+PyMUk9 z2nZC?#x&EH6az;MGd+-qjOjQt?eH(wuP%&sArTs`op0Hzb#<0*3rs}a9~Yke(e87v{hjmApUO6E^;1x?k5``MnNw_!Fb|B?a zvFV0_kAi=tu?QFvJ`Di+T|jO8T$80c5d-h)I_MVNAFhQr;DMRdZcsOKf_8bPNKpg4(DJlq&t%4vEUHn(j7@SuegqTox(9Pjf z^fL3razA!|n<#Q$!v}edU+<<{$I2G;MfGn(4CFO)u>0Q+G~RS>Q-m(H0w82#hV%+l zNDd_CzF4wEFAUU{D?7tq*DYtl69sTtqPhh|6WsWgp-3R=kzr1Nz*%5-o!AY~;qcPO zq1!BIX`H}L4AaEN0QPW=GxY=%DLKye?KLm!C!^p5kqY+ZW~B7$Ek$}~=F}F|>li%J zC>IFTXg;?@FJ?3ph!F$kHFF}_2~ZsW6r{aFo!6_S?J5f{LUu_a`9#I(rRHin4fBCZ z*Xf|h*i@s^l?emsboH%}sfcklTLa+*z)R#ZZy!gSW_hRRR%6!d-v6Z6w!PC&k~)>8 zpFq*|Iy|_*fYQ4X^$4Ei3gIo;=4-D{Pv8e8WDu{Y=Pm0^yv|R?`%{+SI2c>p#x~v( zfKlZqhBi8amj~rAA^^Vr8z*#6zYA7!8-WJU$0h&pf#8Y&6K@s3Zhp7iHC+3Jia|cxVqSg9$s$_KxP25yY^=;3$kQZ6DDGUZzc^HGGXY&4b|HK~uzF!)(i|E%? zp5bw{VLpvWXmm-~nSO@>DLECqlIveoD~dLE=$%~H`r z=ffv#Aqu6=9uF&EvNQ`v0(vZn`zLHb=ygi|wOM2OPgGHpzpmvW1t%}3qdRwu-FK+|NM zZV?7uq`;geP0Dw?7C?%H70M?R*l5u*agme00i|GpI@=OJFF z7|VP(371zkZ9+gDecm{1u=ZjaXeHyw;M~9@i4Yr06Bhff-d9)iZR>)kPt% zv+RA5_Du%vY)Y3y$FA232MtwUbWPi_Q9H5LS2D zu28lpcG-yQiVT-zQxbl)w>tiYL3>iSpqDXWEO#hoG_s}7XFpZlbofz+(m|A5w8H0?uGOo>FgDj#?j(EXT+%BFKGINHP81NO4}&f}h84 z0x{6L7|Oh7q7vaVU%nA$k7>>@O4`%$Q?QkV(z;RDBOAr2on8&u8LN;8q0$>}KJVba zHyEkIkG(S^giwsAC8Rc43hQfhM1{p)t2&o|ALFCGO1pVTQAXhS0g%X@7k;H0!d>M~ z%))SsDUA=!>Ro!~!w#i*vm`+g>z@8@LYUT09cb~vZ@EQ+Ob&MH^xH7SySTFpk#@{P zn5@sq?`O>#Xrzz}ZSTEd1R@&kA&b3SMQ9q?1|qlIvxbJ_4O?3dfGM%Oju_#?C3yPS zsFu?*k!-aC+zh2^UfZGinnPBc-b;;1I6Ep*-Eym=2{|{iVmC{dwxXlMO)3RKhe{Aa zkLN)_P<9u#ssia??Mq$XvftNWso)APXTYiL+hXhhL}iSjzr*W0QoeR4cxO3q3@jKP zEs)8gylRhxZbUVK`clSIDdLapMP}%#9=m=+Fw}8j8&#+B`vvm^7thIv4@HD>nTHi( z@{rMf=q43Z8dMph>h>>cTP7Dyo}>J1Skb9&S-1vO>*HY6W)SJyy35AmU}dvoasAo5 zjZk*vfI=ca+jHH$)i77=!k^g1{u7iNV~&6Fj&zk%Wxe3?U;DoSM>ckp0OIUzNE>98 zQ$en^3R^Nu3S+}Pr!AR-V{cVtF<5m7j1%@={mGTs;B96pgRX}=ibWU4#OzRy7a z$-XfubJx>g@!&Ldvk}`r2jqZp8{6U7Iyxxdna@Ze4<&kmONSz=3?3xdtcaI3`?fvllXx#3t?%E&b z8mn0c&V^!x{zU>!vNO&mE&?cc6*A?W{3rJqou5n>!^s&>VqDZbXhhs=@%8Xn6d9^H z7Qb&rVD#uGk5VtpM@%lD=39Od9%$Q0bCOpOc@28zE+loR3g?V^t#5&@ev(RpR#>q;e zN-<%qLW%|{JwbO>$2cxxZoMXL+m4y?ICqp5`?n7e$UD9^{Y5%?wus*ZOA*psx{&av zx}C4%l*uq;bH=FX#+D-kVNWUKq+>PX!$)T>)sPniD*4{GfJ^X|MY~8v&cTsmjN%$~ zK*KjZkEEwikv?Lk# z!DJ}Oj**TVJHOcOh?=&={E;%H4cLQz5E>gSTI{b2XJ0lU;BLn6zsh>zw&V|{GfVZq zW>wWMP|MA^J5^*k3eO&ZVL2mh#pe|x4L6XM6<2O{ z(n$8Re1t`zd2!xzeJ^!&;ScvYgcpW?4MtNBy5d%a{yO_t-!Q%^rrvOeVB{_@A&wvh z$eUXsPixM0R4J?q!8DxDo(?5Bk`Z1L9J{UhRG4c|r!x~+yA$?jLDbga%dUH$<1`GU zOmZqDQ;oSa@8(Zz>BE&1jzRK6NeBk%(i==>c zY)@*=QYUrcYa^i{hjeO+l^&~t8f+J~1+iQB#X9}El15ys7;LKap;Em5I~MD_6_wtg zOQ0hLmU6A+JOV{k$;6)J3(`xLqm?4$_Be(MspF~j{=(92G+dWzGT<CRO zFp#b1nJ^)AnYLnC*RD1cWNs)cy`?(E2yL?(3BXHb$!S7~-&7UUOQEXGy4y-=u^oiS zdL9*63*2e)LHdBTHY7a=)@J{!?RV(1$H$*{C;}Ai5Uo2k{^VWuSGH)qquX4w7J>Ae$#y|dYDx3!GG@gdj(oW4;W=Av)V7B=RD zjSVx}f=x>_*9~dnk2(wEobWIn7$VggMI#b9FZ`2lVzlttmn_TfY19k$rG91JtejIx zR0T^yu3qukvucs0e8gE6PzMNh zc`te5WlE80PN`6f48$leSJo@$+fbD*?7_0}OHxo|8kA|Y%X>ktZ`#-T^G-Tv;L#hgp0Q!hL6)L-pSmn6Al zP%vqRY3xuf&n1uD^tb}O4_>lMEEeatiWj`EKxMLC6wHbMe$)R&dLzAFJTk9X;kkL9 z;m?$EM{p49%@A7YUiv!=K8Q@SOg!A~3ijO2yCM&RkuxnL-MK=-Y&r)IHa#%lBZwX@ z?Y@t;JuW+#%{6=zd=2#U9>VA)(o1K3rauSTOLN4&+^M4w=pT(1hvOM@dNMRQ2cI?B zTV#_RI+;m1<`%MpkXFy6+)-P%-BaAdu%8ah^(se9@4lK8aHh(mZ{3r&i1(Q5YT`6Z z6zEImoiArKTbxgBow3SgX8N@o(0sl>A>#T6VqauVWDcUe;Jxcx?{tR9_t%K}uEf2n zk>0zlknvQ4W0*gs$2Fqzdu095n_;GgQ&&20mkagYpIZ?FKTLp5z|OnmLG!m-ysxXd zlH2NaiG~C^M)+bqaw;@|;uV+|2v}xGpe@Q7nVz0*w=56!7tbZdzIJgN3Y(>O8+JbQ zKJrKD6&d@0$|)IV-#t``Lns9A<{#U>d>fk~2mXwS5oNppG95fYN{+2U5?)_uZ&Z?< z-D2;}`4+5d8|v>r6}Ps`f*+=PqaidrELosVY-t&Zi6#iz$%%*iJ?-!bv>Es!t$%>+ zCAszHX|}Z06>huTge-X~7cFV!oIn0@iYZM0IrM>$DUws(QzB_0h}(pETi;qhrxHX` zJzD|-7F5ovht77DKnyuY zOHfOkr)~Aev_GS6>{ik^y?)FY!T&d_vlzCHqXLV8$Ah? z+!A2hsD^B26q<@>I9M6g!oH*2DbB*cj{v!T{{X+@PO1T_YA;6~-Wx-_UP(QrnaHWR z1SxVcQOpX~YuS1m@t7Y+9(cOqcmNhT1slX*{Q5IjT^Gyf;T9v}`N4Gl(@!@#Rlex@Ue}p{7S9B+X|x zK`k)wv@_|YxNb%{Z1}c;EHMCGBZCl%N&#+$B;%0E(+Br;l_ybT$Aa`2RqHYkw12wG z{SZdE^~l5E3fz82Wzo~2md=DUpe z#YS&nJ5Jw^J>$v*;0&UY!(6pUY20%bT~DE$mgW_s9+JW!C|z7DHyH%|R;wR{1OQ^r z-{xOT5|jFpuHyqRowF4yxsaWIDsTH@R`mV(X%8Yau+3rhgZ`W-Gk&I1%Lbf$s>Mp7 zgC$Ca(e-8wy^C~}l9jo~WVXOF4en_AH`2L&j3W^TRfGmN`NBB*h-o^W_1gpM@IY^? zIUU`5;lmZ1gv(270HYJN76B|SFsnsdxh)_L$6{2NIU$wV!Z-?ZX!jQnY_{J<}!6iK#Pdl|~XqQ`E&KS2gH{_9U+iPBxQ- zpUXFYP~XQ0ZonD^#BK#|bsyXlOdhvzM6 z0hSzeg9ZJJ)_lnaa>7tJ2iT+oWhI#Z8$CyN+3c1lKXTfE0JoEkjxoKIf6o1P5>sk;@q_J@H zJ+#9VnWAOAT(QhYrmnO1c*7K-+ zISZ6Scd`NXFdFIRS?Vtrv3r~(gK z91$a%ZUkb8#EO12udePIs}N!D83zpiG#OJ! zwYdcN?$aR(DYF6htVE{aL#JV@%tUFmesi}o%A<^*-cTx@iCl)h)Kvajhg#Jowfm;L z-|L-CPI1d(o6%5v-ev4L+DoJBD%+6;#bYJh96VM*Iss!1~vEIwqi|-wVlvi zTmIlbG*u+uiMHfsW!{VmTZ%j_+|t0vg^qPbqcfsKy8%uFAP4Kgzgk9(Z&B;e9fPal zwz$8)syIb(*cG@e|DJSTy^$|9Z?UauABYEpuji+k(kQNR2Z|M9O-?1e}#lYd_B z*xUG1-G*PME1&Z^vIjqbhK+4N3#qvllP@FP0u+PNFKY{LP zaX#eT-D0aNOO#ql4&T3DV?Jy@r!EXuR@Ubc4Q4&_{CR}fVT|KZ~0t&q4* z9zrrXF7?RU;srcF60CrOpNtr&!||*#u8|e#5rYuc@_h_hZ2h|&=*;>O*8?(CsUY?* zyjv`_LM^;mRuF;7u-2EpU-oq-J&&;lLaM;CN398^w7hp%QRzLsmO|~k6Fp=6)didH z;&d*yLCt^O3;<3;czNf^{-qwpl#zNg26}szL*p#R z|Lc0iu7)y1(~{Fx3!rQ#X;urh3+iD$Ie_iN)e}Pzj@D*RX+%4gRzt53m|r<*%!Nll z*FM>zrYMRMjFfv^l=Y*MF??Kle!Y7+p%EwggiKp2K#NJQ#V|2ea5+d9UD0?ZrC)LX zYP=sYSz)fluA*8ScyBINw~e~l&3QI^mO2Fzo(tY`A?Y_FjDzZiOmE`?y=qv7lc#|L z=ZKLi3F196J~x}^g-6Gb{Qw8k+%C0-2T9sjcY7|u1_rhzV+LjK0#AAwxk$dVa7VO7 z)Wr7`Y>1xgi3+@6KWsm}X56(~;|9CH);^=B}wq$g!7%v{3Lu6g@7*u zRqFjdS7m3ePQ?5`o$&G%FB3g%D8OOBCFJ|LiSKkLBV-!^FGm}2>J-xlfKKP;Mr z>MZ7L#!hUBlHiAZSZS-%Vtwj|iV|q$Q`POXLt(7vx=ub)vp2p7a?+Eu3MSu#66AVI zs*;(X9yXV%q~Z=HmdovKW|S2zPVk(minbDQVyqS8Ggs8|ckN!}*Os$+h+s6g+i5Es zZmB4$@SozID{+_H4^I}vgXo%G3N(~07M+f^#n;bQ=aFAGhfH3eYA)s>{7Qd#G0~)@ z(kFp(d7q2+jnDmL6meC5WS}$Gh=^CN2Ul0ns74?wNjs=ItibGc&bA;t$c^6g|MlC8 zU;;A?%nBa^2xZ=gP*yJBp30ON4F+5LguQ6jHmlFCX$+=UDUYtto!(kgTw;?14`O8J z>vAt*L337hLBq}^R6OVvrfqH;8m8(lh^=6v?_D?+CEyM2^Ko@@F;5-$r;v(iA3?nrMmvxMrZo! z5-y|)3?ZN26m{tw?w?~j4Rx)7)@{sT zPe}(~RCguf9EKHh=Fxu7;_tJtw^<;+c;3QP=UsK7e4(KgP__JVob7l2jn1Ys!k%u0~Oq(k(qV^($)QireY_q znE$&Mbt43Id!$Db12^q;=!NoSc5LO_jS>9yQX7?#pAq#R5X{vz(LdG7!4n31@qsbm z{NwW3nOWEbXGIk>7yYE61x#R!UR2Q^;(K#-Dp zuNkhJzaK|3X89r;C`cR~R3$9GeG_Z#u>11+w;m5*_Gew;ERJJYwRJqPfK7ka#1!^b z7ymWRq%)L0Z3P`MkYoHLskc039)}1XXuVu<0Ilc2@YWBK)XpWWJXSYi_h0VX{~u zenlpjxCya(-u|4h_#kcf*9>}IFf{sHsII@y&DGh$9jr`uYgTrbZ>W>c(t?rl_`3h+ zor2v02WJ4TQd2L+-J&7&$)JD>AZn0uHNv_sU9jKbK87WS`uKAG9=o@i(%iytVtsQe zn4jc23P*jo(*0vNgq$l@7pMo$T5^E)-Ugy_PkWjC6F+6}l9YmI9p}~h!Yemy{Ot2t z28F?_FypfGa(Os+6C!SBGkVcWs?E{|vtwiY9d3FgfAGjr*wY^G<1yimV)rn`pB zTl1*823hzikZy0S$m|NrGKv|vgqhAF8^vn`T6`$bMlb4aiHK(}lGwT2Mx52zi{FIH zIwuPc6J`s7WgkUk71=m|?x5R!KOD2ceuxlLsD*p<(TfIP5GsioL9@`2X{Jvi+Gh)cFcdJ_+0-Oe9@-Y0gA(ENb3 zR3G%cD)Hdvsna#0{4S8`dTPK9n*E?2>5EF?Fsc8NG((K$vMTZ^?@vx=gvj&hGdI>V8*2qKY`kO56Ib&KM8w5T)=-Y-=@4fnDwcI{*yCxgPqV5dmbb* zZg;-}U8rCs0LjSO*l_3o$nCJpWm*p$Poz6(wVyZ#JUkixb)EU3#}+9H7++)osoEHE zlg|9XUs>^%L+fcJG8o``gmd8CNO}jYUpoMr^@AN)t-M>P?OS^~lfa|Zu}q7WE+u#t zD8$>zn|O8<4(uV*<`StsyE2Jkqy%M4PJH)z{Mn+xc3%!egek|UO--1%%I)NQS1&a= zisqf&YkCgURGt4oTwZ9W82|0GYni3XEm|0%XQj|NnxtMioiZvR3)|q_wY>Exs=6-Y zeuI?S-MgVFlo+eW0ACmR(Nf?7Q-L01+ZcNx$bK0Cn`wRX%Cz#{VQNIUYSZiION$`o zK9x=XEz-04kFK)rW6dhwWo}eVmm{rV-ZHOiaNq0xmv)prZXn(Q@}AXw=DqR`YjWDj zVV?#f;oTQFv<)b|isKab|~2inVF@_X1&uGN!9Jm9GZGPMIA~ua*%$ zh{X$RN;2K`j;%e53E0l9AX3SevWLvNTKPe_%U?`0iyx9_&IWNC>JVTFI+Z>XX1&S?2H^sim~O8KiG6oc*vl$uuD2$?;~ao*hld~ zOiN8e^&BC*pe??qX<;*{I*8cJ4SBniB1K+JMnxC}M+lH*{lG}Es@Ab<^={;y*VDZw zQ3paZu=u-Y)IKcThOw_>or@)(hWB~Ku3deptZ#~fLMbV>YYh)(Ypz1m708xXk5v%XL;P-$o$m|QgPtTx+PX*Z? z@-}YK!wVmYIBEZ@HlgcOJr2Fe0%g3ge?Vti&gQ}&e~B%ub9chZ%%YtM_i%O9h*>Mk zT`5}~djCPwz@ZXJX)EKzo|{2>@f6ye*wwE$ZH7?Y&WR>ZG0KRG;H-<)Y0M&rl!1G! zh&au<o{xjgiE;43e*5qxP-cF3dbV^qT^z8~7}Q}_HaDE*cO>cFAmd%mR*(8EpSG*- zT{T-ldbv`kjBLQ2M?I@&Gl}h`S=iSv>+-cf^XbU3d2&3;7QHo&93C#e*@F3TW~0Jv z@^fj0EQ}PYouguP)*&Ycu75rceVlpm00F&!CM(OmJlfQNURqBvPB@J#VltK9c zLU7aTELwjM)jg#ejC?eVs0AVmP+tk_)QVCxR$OQFnZ*Ej?4IHq zU{)NPl<$sPD2C)C9NgwHBp{(orKE9G)a2w0&STScwF$n9+v%-}8ru3?evxe*#L+#U z8g1BVD-efpV@Q*r+z z2GKOVLdB9(SUX@C{Jx0po?(LDDV*`4=I)Qg_=G=>zLtecrN!{=Bc5P%lEoaJQ!OP~ zB_;EX`o0&D10SJi%)QR(P)HAkvs99|;i8@NL;&L#SMF%tIEl{6R^#*VacY#v`d6lm zgs#U0;vVs+aA37}=lq2ZerMUT=c1ZC6wdyo`Jias#lazLV5APc7>Q2N8j9hlhkuF5 zN#e>5FaNsNF&04{M%mfWZa67jROVd>_Lkc!;e@M1`OowSoFWCJAdVi#+7;CT-3+q_ z*G%ZctRajyhCVvBHT^LW08Fin8^>a1!$81ce39sLTVUmQOQuFj!W^<+^>Hq=InyQB zUC&%NhLE#UwbJ{&r_7^Ul1 z!g`0uhr&3z@4Z!m=g4_~2t#sB@-^C-_6WGlRzRw}uZno2Vrw!xTbBPmJq--NVi(e71`E*O z6FiWb*1v|(E*^4xL^RK+U{Rb5M8q@PK^pf>hrgd?D45qsEnJz~H#!Cp+`}Ai5;R~) zP0!=p^g`kVhe&cdsxaL|l*E@o9cvR`x?b%UpMetMr{y;srVD=)a<`Fsbr%o_IiE_F zyNX;9D5TFANa0kCv;U>HaW8Q$&Rq{~x~%^uYg&2pUW<7Z4)VxbZa?P9s!$^3n7Gb2 z%YH!@%drdgUJ>CW4_XX0jvsrM;8-Yo?BAGuFc^p9y&AlQ|IFk>PJXrGT^c%C!cHIn z>Nk5qWwBA&LLjAPKPO)ic@?(}VR_^2oGvs@UwO!cb62~t2jX0qRW&!T$soml?SE&w z8+?wYrTbliW$Srlunba>$%fl=Qrf$_wDr8OM%s$iJfsjt208%-o;U!7t8>>98xiu| zZ2jO@T}ZY!Gjd~g2-I=T2Em{S<2SNo*6HTA@_kpA(Y@ZDo z2gVP)XSVZ2RIGacv4%6aLW}n+1hb(wmhAZ!2i3guB=7#)K(A|w{RD?Mb~nEP!HKGM z0TUSw?tLx`B3GxNv=YNZ$zUIFQ_;RK{WU^$@MNn-D||Y-ZJH?Rm{+UIoY`p z201p(*)Hu5*?Nd1EEPcYgw(DP|P)M!oN~gR-xxxTUKbU-InZ%Nd|Oxo)!q}U;62Y>xPk$0GX=S6|8EN>Yh5x zP_`K}%{L=l4c@V#$7LPpI4y%xmSVaC4VjAP!x{IY9VUqJYpU#fQJbb6ofkX~Y+ppm zo`Nfl`tgDZ%)M6zZz!7NPqG0yj)caY20#gVo{G>kKjS+m;abvp7>L-t+l_f^) z+K~z3lr9_(6LUiLb$s}ypO2w@wyUhSOyq ze3t!q_kl=u--)NG4`PsMyPAs$acF~gqf)`2HloO*2@{-ay0!ERE0#GfB zMM$v^a+ap0e9*jQP!fU7LOf{s#_ko1oznPc6LEpJY87W0M-sat)tnC8{)*s4ovrr( z4seSDYeUrz!5qBXc3p02E2a4QvKx6JC}gh9FcE6{BBPmZW6$KBM&AamEJy;s7?Joq znUSI7O6%2ln%&dNlChX4e2})7%Np-8sFo7rSCw;McAjEsZR#u^n$a(`>ddZsinQ*B zJDuU+hdL1{`*CwfllOxB0@8@@_`8YQ9jbTRtG&!oGotW}lwF*}`$5Co%(Zzw?hFav z{r+O>qeQxSVt^2>=+{nKt*bv20eK-P{EFE-%fVqo$Tju49o3Em!)5PJ!R|894piL*##_7O_p$GRZ0mDJt^pbL(z854s{M;f@*yhRoWiVMfJ+i}~3&a?Ukeo%%W<1c!t$tk+tf4= zLQXM;xa*P8$MMdHBof=|1@R?hv||-t_Go@=yy?+SC_eKV>!Ypn;2IC_^~5vN=lOc! ztJfY9p{NgAM&#pl)?01i!o-RR4$N!A!wZF#QN714l?U3)(=kcctUMTHQu~*w*5=q5 zuDWX^(XP5XC!Tu^=Yg*&8_0|#6tyf|2t&16Vy=^ZaIy$ADcTd3jKsh;rPl`UvgSZ9 zUBAOsL4g@&ZJS&g>W<|E-!_Pq0EDfq^$Avu^Q8E17;DWT;Fs>y>gRvGUx^W^FgOR_ z?<`X~xVxocR8D;XqTcr7cuG(C{wR4v&`@P`a7WNNyF~F(ytDOefWhUY;o)9bNGFjq z_!m|Ekn$Q-u~ng-V@F0YWF<`wlj$yxQBLbfvms*P-mmR!}zb&MHa`l(j+8kvhL;}J#&jNtMgcZEfm z=b#r_`>dn^BO3ZK;mhZ`yxZ)Hb&-E$vb@Yu4@q=?xvbwB=I?O|%PSQB(J3jcCJ|qT z+*8C~5`rmv7*C*RpAq3K$S?Cz@Hf+?i1c8#wbs%(4@07nv_cy?-?kkR->s}%us!GF z1dDuouHrkO>WGQQ=jEgA)Y^JII@^6lK+TWj90c~+<+h3hPML~G24D21t93^sG)FX# zzpt>rY*t`?X@~L!zc$OKbD^ALrM=K+I*4ztl#gdqU!N1mFM2U*v+QJGr?|G0LF}<3 zEkEc%`_)h?8PC2P$U+iSbA)sErQIwUwC*Jxwd1}HenJ8C27yZ&x|Q;ft&e>;@cd)s zNe+sg?R1K!FB@T~*U6ngxoX;+VPOnGz;kTerTy8YYj&9;bx#o-s4k*2lBexUJelz; z$^h4j-Y~q~g?+QZMyw4|4PjuM#N)iNuK$Q~pGGgd$)`TfR$I!n2=GEVq-?3&xvNFa zEfJ8fu#j7CYQ-aNcy!gW6loTE8i7A_ilE&ycSam+<%n&%Ok8vs;}w$qA>0hjRJt&g zO?7rH^$IC_&G4PdIxMGjl}-1}cK-ZDjyFHg(S4zqXXkbht!l@m@^S6tu6jP~B*eGR z>~dD`@bT`|KG~;vZ^;|4boWN~rXh2}3T@D*V-?(6Xi)ei*>9PTq~U#4%e&3tcV24u zGbK)>=vehzvq$h?vhK73U+Qd|a(Ys@&*Dp-;|2FrO`34=pZon^(`3(cTff&;rWD}y zY4RFi?Z<@n%w&k+O>6K15>}a4;Rg}yDi*&qK~4;OX&Q6I+Y7Pmhk#s>@BOvTK1txC z8|xJVp&M{;TX=LEfTv68Ze@%@Og%$78$-gK363?ZiA;y$+6M;t9b?5WG<#V#y ztM;1nJ~C(a<~v&|xmaoJ%g9-;fEW^+4?QS&ZUQ6Qw68TZMm*p%=5b?>7@xwrY?q>- zCY21$6p;Z`4RJ0mKoXm-%QUx117 zOFzC{yHhdAgd4d>X4q>F@m+?{1UXde@j_9x(fIZQN)y6`XnN1J3Ai=1?~oKrG`$@S zh|##Zb~`G!sw%92lUQplP6*&|((;ViHIFoVi&l^)7_bCcztX~X2DtpWW5H_6HI>gT z*~tz}kXS>}dv`A-^?72}j$4GTI`tr#CNpzcU_Mz zv^?}Tz`Tk~^~6KTQI?lF$=DY~2P+_N3I1j6I_sWIC={MIIC~=8pLl= z4^VtXvr7A}G0SXhc}gK5EfZ|*BADF(!2mpqc!vXmr8GfdFh*3uR*WB-onuPRn}Ez6 z`$h=1nsip3jbY_X4Qbkw;g+YXu3Lx`lc$SVXk#C2u~_6JwC{7&n5pxs&sJ(7;!fx;e^8F07f-A;9BH~9A%yJv?ziORr*P?8&EjUcot2S^0U!yqL zkb0HTMPoSUa#KR`I0fprS3*l*^Yw}z9Kv6n;_@5oeV=F_Uls-jHBKypc25S;gRxg| z-rnsOiaK@PZ(6TH@SksvTHk^gJv&3Rcx?Ldy^AK^nb}_LmonX!Cpv#@-b_T^gi&~3 zJG{5O-`s$BW?c9zvqOF;r1vko**Bn;d3)6=)FW&zDUqfIBMs8TD|XWMxD|cC;(8zP)Su1)YBB<)oVSoH(H+ER7l2ea>Yld1@%NWIlAzF8EqQ6=lZTe? z)KxMj*5_7F3bLGDu!J$A?||QMlv;`fU^@3iL3(7w35j{_VxhN5_eTjF+kRVXd*6nK z+y{f42xEu&kK18;RJIVg(B_BjNbZ;@k=ai#eb0Uq-P=X#c19NC?tqAQyp1=_%UoyI z5jdi0B*SXR%ZU#4l2;B3OmER!KFzgQbvn7sqG8Z?_RLI_2m@EGJ7Y}Fgfc0$lyl*M zLA&!X+=C4`WN{!7y~_Pt)4wbgegHUg2<&`nW95P0CD&H<0h=T)?US|Z!)hd18x761 z>)ATH;!}L>y}NlX7wZgZ>5X{eAylXAQN9z+GynyX-tz87%!y+KdNF`duJ3!b6;j|&DdZm|`$e7IvW?+xW4 z{qT!cQleH1xh8u zr7LrOeD?wk>$-)Mbk;~To_?mu`g|dyUctMTQ={4H>f7PExj0;?=Lw7Ftn_r`=9yna zDblY3ruzO#N}nTZDgv>T0FC0JMAnGFCBF?Li$K_Cll*%!80}W{D~K4%2_eq}5&4AK z2;2@XxeWMFKy2e+)^7-yj*~dyQ7-1VV2g8G6j@#KH$U6*PzSue^TZQzm>2h<+Zg^X z<1?}X(nxpx*LgTeqgrV>PRLSg1-4Mx*?ve;4ot_%Qd<=9^AZg%&IdbKM=3GK+7Iqa zw!6=d{CJ3>FRNkG6;Z>s1;3Go)^$IpAF#ju!eUQ)K$-3#?Zxcppi&l`ONR)bwRzwD zCYo-L4Nby@Tb~;I&^9Wz z9>^tm2AANg&NiR+!S?X<^uuDIUgN^yt+#Q_i*={quf0+L{OblJgBN2;_rW-+9iun# zxDFJg`K|Gk$wFu$bV!Q<@6KPIIgu*%kAun|d4kcbbeh@om|P>K7D12T7dKXTJA?PQIU;ATnsPyV_sc8|xduuAMmD%$PR7<#9>uPC0%s zlxnlgn1X>|_)>`glGiC*%c6^=IowLVkW~>)FDXFCNYFlHlM?S_n23euK18Iyq=@Zk zSZvi&+ufDRJfcR()vlYuDACIW=UT#?W!b6Fs26nY?g)aGfk>6?#3W}S8WdA>+zA`M1W@&qoki{2wTQs=4 zI|K;0%nY;fmxhvP2znW_ zB5ypxC9u7OA%MJP{BHL@S%~%`mqs`~*96g=204sBl<-U`P_L8_3izniz9{%+k}MB5 z{|=N%9?HTpBcE$Vo#qO5lybv(ri-8d9qjAFaa&bzs9@;FMQ@*!-*!0YjR?ot23<=Q!5QQq8#=?)SU4B!@D^dR5*4a=lN)B3G~j zI-zR>q=<&AiU^YGyb6i*+!2HCh;l-uh8@Z5{vRSrH@N_fIiW+7cN&4iiDhM}$9qhf zoWTRCmw9!`Ax7}!Q|%WCEfO~PM>fTtALZRIbJ;&xH)&(>6PqAiV^@}8SRPoSrEoty zRiv@tshJZ!*4exj64-Ni_+SXDSPy_?KC5@UWpv$T!6j*oW)xW2^76*99|6toB-Z45bHZP!p!*Ba7x8m`d0S&}Jt%jcHF zyYHB$Nf5eDTAaQXi)&h2c$dlCr7ByC2{%fP?2=t8`25wa;$tTg)>}0DPj8}@0%d4} z4;)vDjf{33&aDT_OmIF+Xs+a!Njniu?2a7C6{@`3$lPrHT$XJbFwLq0`#!EQGm%?n zIFTf3?PL{OPYhxD=>0x+BQ!@umk{-LvIUO6Q>TYEgM~1`7bQd5N>{t{*c-@3KLUyr}))Q7?3f&2KbtA#0X7 zCCQSY%{TFlc89q(o6iWGX%G2E{6VZ+%VG?fQ_n z3>Mx_ITF`+=e;SSN^DPZBvvX4+Z3n$Y69=Yj=oQNw~QEr31wh&L)0I!bCH7&r9Z;B zcn9qb^NKL)ihr%bwVVf1b9zkKt+dKvP#trq2&UcipUx7j1(xGP{u0tkps2aan!B_( zmfw0D8Tl!a7HDn@JDeLPdhzHQuem-5Jf7IsN_<-KyK`$@QGF@gaz1SqEO^X)nr>e! z5ytRl%BgWwCXo;QyFntu{`7Sx4l+VD`CB?WPUf31vC{jU=or#EVGm+-CCSlrPhPp< zD^zDi1ioH5bcZFi-nR{<@A}q_J03WEy%OVO^roktIGM> zc5E&j(^-Lf{eDqLE6Qh6%a-q&YDA>P2jS8)Y^g&zPZ!libid2^@Os~SBhv=o*wS$E z1u@S1{F-Prky7)8PWbR$mZQG5-s{$%eF80;`g`iS#S1>tHvU|R!7OqOR+f1`LeLc4 z$ivL^oyyhBhj8D^e5e0hw-;qYPti;xyZ*4mw_XkFo3`+F+ago5Ge%1-T#7`5QaG(P zTCac4YTuu(T1PzoQ@Bg&{Ln6!`*5E#->r0TWM*;C`wi5%LpiPI+L=IIM^q@s_qhH)-OJPdYpi*8h-Z=AX}Ru| zAC(QP&i;@K%k~x_5! z)>;atts$EOGD}GAnF~Z$*<16CLXmRs1zN;+)k&C+J%lubv-aIJ>-bWc$ z)zzUAb-N%<@abrzXwP@JD$)HPrNfiwXu*sG4|K$#atxK$sC5Fq?^~sS*6k27jTxy3 z2`^cP#!JoAItHB*OcaullJgnIPtB9snAtXZ{22j~7Pl8&*H@R-q~SLVQ4IDhsY#@Q zK{A;;y4>xo57#!m8|=B3KOrPn8cz7%2g;1BhGR4&7IYNmJ!Z6;T_Ssy4z|r@&LKxw)J`Cp|Zr=6uH3MMLCoy$HoCD`w>y9<pd>n7#`xuy2(PhrNa|BFHY@#CbnF|9Cs4QE{W*{dY z%rAI@4R&qxv|zRd>%OLkxv!q;f7i|~LO|Vn{;#gx>yr5ea?s!CfFY zPP=ZQ0A*wv$3%PC_8ni;HpCC$3`%9s*fi}bwP~9n`Vf;U1$SIEJc2fz77#r7*pG-& z$xDHnAAUL8jPe`1=YrdJ3+aISX)!TwHmvS=k@~kDy2)8M(@x2K5t(D#xXEGIwAC-z z(=99?;{kX|F;pfmbB`tdy#RPjQPmkln_6C*y=Y?6V2!wcn|J|FF}%Gj>*m7a5FvFM zd*zjn9`5f-T8}x$(OPrZSQ=HKCGKDz2~)h07$+>8#`K6*kV9KYfPs`Y28|xx0aEye zcl3fjh5qp0d7M1_B(B*D_Pm!-rE+;!{*Z9ON;N96lf9XvE5TZij)mejQ8ou;pX@w^ zcfE1%8jf~MQ{`02Emhh0{i2Iua&tBn;|hC7&>WHIpfQnpFR4((!D+j+`Xi|@G+_Cvr+qGC@3o;FE&_;;vuP&GWVZ~%{J$arS~}PKF!^h z-AwM=xbuI6i@hp5{oMrH&b_@|EP*qhf#L*Et(Z?(qwlvHyypNtp8>6J2exFaJK8wI zZfhGOoQ?UaNgCwa%YPwKMBv_D7|0kIC%#uS$Q; zlAh)KJB`>Vr^Qd{zXaDzT{aE5+VJ)+*9N9azR_t^ZNIs{$pw%nSydc3LynRKAG8Is zxi}aT;jEmw39sG((+@XA6 zq=?0H^`$+1Bfc{g784AGj79a`g9Ckjo^Jfjc!5oHA4G~}EOqZ)X6|*2`D_vFsmcPa55=6TF)x$5bx z;ZUHDSj5^0^7yeIrEl}=PsPZSwo;T(q1o==5AwF@&M8_`vgxf?>#fRke-n=O;@&QL z&h7#}VxpIb*!tVG4x8O8^+-!TTG&lxisHz|uc<*rb37~49&-39;bp>wc5o!PF$!o; zSxne%Xtsd;W|&=g{{qn-PH=V*pK?FI^}JQDb0lL+(QuTT5iSMNCgan?PYe=dnq zMBUFoEaJSBrdPY_{uS51E5H^ItJQmh`{^tl4_12_t6QBNn~BRAHISoQQ6NfoT>l(B zuXo9Nm#R>$Swg?OUsix0t^xPWXir8^!0JBy=;*w2Y=hBvCt$8qE z*cY;rbV>CKI!}6E8wZFdEkv%r^=@oo9UFeF>1oKBIM~3Oo(6v$d z>!1&24X(5+4QWGYR?qEt?1yTLqK;2;oGZ`T4@!XXbzpdsKl$^v_!*)dXySZsb&XkC zS>)=YAOJ&j211q-{$nP;uCL=9q3Yh#Fhbu>JahlrqDm}vb7*VfCSS+I(};`FxKw1Y z%0mZ1y+k(0k!DN*HTmr?%I?k$J!cpyXi880MefO+8&>1h7g)!~arG4ApCAT1_7`0l z`Or-i^~E2+UeWh+g1}TLQP)U7X0K@Jq8+6w*d*U0IrHP6(~6vzW$(T|_I*`w^2*VH z2qk&Y3eB4i^eJ(HX$V&xq2qJQjU)|55`V!rTje%h-|VUK{$}kB?_HDSXm|3QtW41y z;YoTw;J1Ua6FZ)Uv*7g*_UYU(f7jJ$=$1YP2TqMCR6}6y&x{V@OvOeLX1l{^S3@DG zk%6Yw$M0UL!om_4@qM>iIeQPZRN9tgqy@P4JLk)!#~C-Ce^QZi4(z+*nd$u-*aHOF z8LdkYlZZZxG*{2})8Q!=!9P=j;1DTBGZ9BTTZN)&M-!#il za1$L0e^e0}ConvVRWGMl@i)?kB1(+0G0bVpg?nc5)PF{zt|+M{H=1HV zZXc8S8yG+y{x+P0Ug6k9a93jk=aE5iGIfK_qTr&AzIFWu+kUS!=IdrAzlmpQ>XZpj z)ao}dp#+##)v!=s-8c(I?+5YQU9hq38~u*o8gxflAkLm+ zSmRMOceW$?c@sTY*j<__+uE1` zVh<4ObK;6=u=SSxn+79=jgv5mGWGmcled}R@!Z$Qv8RuB437vXA3Yr&E!vUM9*hkF z*C@MW_~;L+mD-iV6^sW7&Yb1Av7qFaJ5i0Qv43=*v$6o!8^&f$DHGZxpMBID?A1&! zWLqBKUCzp@%-SOxw4UEgEk#mat5mGp96M;C?7)&Q$<7@40*rjrIQy|4f2bF}uGDEs zGfd8)weTxtEQDo1v}B7xUN8>5E;yg-O~(5Yp%crn?JQ0^HuQRoO;_`o#3}fI z=k=I*t*RG+JP9qBhbWBZ0Jixv2luiZ4z}0+ybaf~c$0pTMx^2p`}ln5&v~wwdt2RH zdhKMhQ>>~rULEjoN2?8O#@1e#*-oYkslYf32t>$c+2wwl%w1Mw4Kc-TmhvE*$QQKJ zQlRhu@b#2^g;6nASSH#vuk^UZDn*}C7MiH&12}zQHE|3@`*Y*8{l?ZF@FZnHIUYes z;9Xj%kIlcE@Lh_{0WCtFI-xZx8H>Ln+5YO6zpEvy^imJ={hvha8F^Rs3U$^wkcDndTyB@DG16nJ@3(keK)=w^yY zrECqxy*+s#QIP0c1@oNUv%mEOV`@hZc1F?yHF9srK4|${I^^#gn`zh&ud(nas5!@S zSH8QoUi&sibwS~X>?W)uz~!`mq7DkfI}VDuT54YEt>RG0cu5w;DrKMMf>#4l0F#_blLkygwPVvCcI7_a z%B$!myyjhbPiZ;pRq(2}>2Ak?MAdwodEJ-ZFyy@QB@JOB!HgkR_L`&&anByqJN?lR zhFL7%g(7Ut?5Ey1noHHls3(h`2UX~smr!rc7n)`o9)6-lwsqfPA{J{$W;*}(nM*#= zx)~%b4P@-91v*z!K$tol0i=#&mRaHerB4$cW338zMAGzB7NbCnowKa+5{9N3cO_Q2bD6}`B zQ>%w1s%=4e%!6|ns2GGF0q!_ zLQj{wiqGL$e)k(<@5b-XO{dSFtmd3wmH~brA3CrJ^I)taQP_c(k!+i4KP;I}7ep0n>ms{GsV!%zzs zxV(J%H_F{HhTa9!);ert)o0K~%>V{-I~lFFH}l$878g$ecLJjg>`Ng?1$1ep^E{r< zx;VZ+s=pEH)!tS^-?meRP)37G8KxF279ND%#!tWao(jKqeVnED_xcPH_;@}nXSTXc zWM7!@LEOGX`;VB1FJ^OW%7&hevA)#H*+=}$@q1b|7CXVdW1H+^gI6%FLTa*D3&Vy( z@LWecOe*5{ni_)`1tTK9WO3@fk@sq zq4h7QEyN?85#2Y5=5ZM3ksY$)_;98Ar#{?~HGN8=Fk^V>K5C&B(yF^O7@@0CdD3C< zAv>n=rCBf>&WlM_xWE{cS8_B-vkz@w4moO`IzmU7qiQpY56o!EI?v*)He!e457=G6 zT!M3vh0lUoRS+)BiPcQ<7sW~9bl)d**4Z^NK0W8@8|UP8xt74T=-U<{b_I}}HD+J% z#(R~)CL_PIs8X4dW8-DB?Oart3)pw=CmSZh)|-@CCD(X;X*T?QgC8pxp6jWVcP zrf#j-?@ux1VNyi56$5z){oKVa!&!6O9S*%-fglGyU7*t)+py`85ZyhBD))O=mPe)+ z&%cKauPqYwZx(8}&UQX5$JTx(fPDF&1ePPM<^%1f-}+nlJ#FRH+-)B_l;8b+ex!5x zLJPxn>Q*rQ+;==bedT1g7DxYhN9yXtc#f>S&>pwWb^kQizg5(H__I-AwjV}`x+g;N-kmO#MaPbYM* z_Qlh@7m-wE9NfIRb4@Sh6O%!D^GG2$7aF<%0{IhPu5sbmm8f&pB!f~G`#qthqdAeK zKj+iOYgr2eUU6oPm#%$4oT4dx>ZK)VzsImJS&0mStqdwV&#D)l5yQ;82lL4MsO?RH zTV0*{?l`aJV&uv7Oxv?5qf2X&4(?>k%?ICW7_*&2p9k6Q;wP_T5T?M!l9*wqU~<`Q zd6!EvZL~$}c-&L^TK_=svK-rj(;&`s(l4=<56MptaW0optY7?H&c|G zvU^((PIg-$afzl6+8+rP<~O}I4G2QTgGoL=$o;~1?`-M=oi9vm3HiA4b)(kM!Te?P zYX+qu+2K}lRMkRehfV~L$6|00q^6(B`6ii0*8b+F5~Q16q4&^ZP8(^ks)ACh) z1lu1{vog;bn|7QKYw-%XC-x_>b}96WSfZoCei;2gdP|{2bGbBOQ_w;**K&BI6(?OM z3ZfOI{OPYAdTbo`-p0nflpT*d`- zO5$C=oNpeNcw+bNyTi@8Ir#HZZ-ZyOlXzFdxYoivd(1pChngx1yIN=08c{3wfchl) zK%2Yl0WB^c@059a;ng#?HKgg4yz}Svx8k@)@LQ|o64hjqcFV$1IKK@0y@iq*xmIxg zj&(=K$h=!>5*S+w@>s!yHj?nYd=;tB%R27dY>r^l{fg(MXxM&7mcyW-EYH2!ChwVV zNp_nR=sYW|BecOi)TC5rWmu1cL|<)Ir;eg;{>DDr7FS$UY3(sCx8!ZQ!pqYJaLKUet1U{YN}fWGD#1X1sDksY)8F zzs+{uSG}HMsWLeT-Or}d9y%U|BNH~%!pFc*uQBO}fQZG}b&)kMHxf7%E%e5$ht;j8 zQz`jJA}?@CXl!LJ+B@wFk6sKH$Dqe1L9NMZ)ZIJathUyWEbfkd8l}>J>X$ETj-<6F z&Z0PdjhY*e*5l;MzpAfm(G~h7mNS0&({_lk`rw`z+c$r`gD{+TeqFLNr#?U0KAWL` z;-kIIw~Ir#B%$dRCZZlS-!5GcmBLi# zLh#b1sGr`FpCk&EK1`fI@|3Bl4~EEwxt+#InEy!*11b_o7Xoz_BTZy5#qOU&+59JR~+Xv6X7cX!)7{{?Y&DZZsj zU*A-gI5Fy&(`b7%M~3DjL2$Uh?WA)$a#;4R$ZjAK_SmXo!Ppf2qTl>~7LM$AlFhaMl5aombJ6B24;%Xjq z5CPx^Uw+>i$S2&~++=XHiegi5!jx_@C2UnKNx@;*sP1}X%^KH&(BlUX6PeBT zBe+0iW@h&QIN`k;KSC?0{yyAfw~FO8(wc2$@C87#4L^^);dOkaGj~y;UI-eu`P6Fa zR>xM*@m7*Lf{@AuT=e*49ozZhP4Ge$&z|>jDkt4ZA~CP4ZBT`Il2XEBV*nEgVT#y7__)DU-?l|QfJMK}8v5cB2-p^`Q%lEiHlp^HwmB#y zrQg)oIW z98y|3c@Q0KRGjml+2P9E*I@lKPY(}|H*u&0^2+6PU7a6-*q!0@gOzFdx*|fK`QRhL z?BhNgBdn-C?@*<}de&+f^fC(LxS7@be zrA7|bR=wNkBvE0et%hwa580YX?;rY|T-Ey(T zL0EGkTt6l%FiQTTb%tRl^w)k?V$*o0{Y3d*%G%kG-gvIqNQG&f${zPJTqZQ)m4MEhSkF3wpJ9uc!Rd#H<6lI z1O#Um8$j0LN;D23f4Szm3dy5rgqRUCwTk~ekQ$e8p^=}fz@^QMFnl!~`qf6!;Y?a) zbU$6hVlO{dcK2w>dbD>E|B8^LJP~qcX1A9%~ZDSxzE*3mE$RI)~GT#`<&P~J%S}Nx z4h$y)PlX~61okN5!Ufm#;{_2#U=ac-XVbm~74SEToc9$?EOC2=pkCFbMl1-((}aj* zwGcx8!71XKF}~CGrBxyH<#NqJqX+GOf{Q*9t|i91Dx+>?Q=*RvMCu>4+E!`bB*ES5 z_ViNXONRu3Kww@X4jaT-Lr6a%BBCki{z4x>1b~mG0mx_1Mx7gC)g{F;58#v0QJh#n z(6#lG{Q3=d|1r|Nh}i{kv;AC~Ofvjsa!lII^6^j%E9?>Kdu5yYKtY=MDpXy57|q+% zV!g<&5LTi}qN|jQ7Nbq~FHfVNd94vj#gnl5SPT0J;Zea@2viAhzCS(LGfb`*76_q} zdigA<%&btv0lQ>ie{oxTPAyb`h7yYkiIW}Pgs^EQa)$9A8PFwUj^CoK!M;46F4wqS z!s|S5W|y&vy_~r@O&IFepLi@Dd;iJYr4TS*4J9!0ePlASlkk4k3ykwt`Rkuf-&>v% z3U15M4xh__8%r;iad-KxrthfJFw0yt&~;jm0QWvH+z zep_& z419Id7ps)iR5I7!5^lTW$|`;r`z3vUVCf`nfdO#2h01wjJ?gB=`L!A8jQwuL~#E--tmgY|HG!E4kCnH7qC=%ctf`cvvRz~!~# zaf+H(CErNq`Fp+)b2a}~!b~>c`M9^l@)O|OKu!~x%aBQ-*Fu|)MDfP6Z%x;6sJnj~ zZ|Xtd9UdlGz?)B9zH^#$E9VbhMFw7rurq25(%CYlPXR9jg}2I|PoA9^j|VGbCEAa_ zw76##5~t%=e!ZOfE_51bGK|>>0Ht`4@m`!!!)l**EIM3o?7l2}!Rk-__1ErDprcqf3Y+&98o|3Ww<$k2Cu_OcX9s!yf@(Z+)qzgy{*&n3=QQ@&S4ZvGmavRG@ z^J5ZdW_@iy5EQEO>&k1huyOe<7ZQ{(ORqpS>L0BItN1@&@6X|HJFNtsihS{_HP*D4 zxe$Q09acx?!ni{nm#+3F8;OE?$sZ}aer%VVihWZq&!uHUyO6Ao5l52OV!nS_db2hG zb6FT}n{s?4^Zjc|awj-uV<^^elxFzXd= ziTjHfqAw~+8g%L{S>AuYc@|iEspXGfsWMlN;`-#+*S^ci zzJ%_x+sS5SW&E+{$;zp1qmAAw1?_o+2CF@Hd;gz4odI#Hz2H9k1lPkm^p#TJ(hnsA1EdHeFiE5 zWFEKKX0BSDsLN-kvn-EQ9znk38T*$mv$9^JO}o##u1sOGSpudhtew#p_lFAyuao&E zkC8w2mXz4>Ua7UA(2!-{m&R#SVJhPSe#X7oTD08;>w==$gHYf{jhC&iFYr z5rAE$_8N~bD2kHQx+9pVW(tjx>zyicp6s8WvPdXC<6oc>Bf7vbd`U?2z<78=BMCOG zECvb?d4Un&P+K*;Kv*#uVfX6+;h(gzSW8D_BP7DmqEbEH0;2sn1$0lC=`PAnlIBbQ zdBtIo>HP)Xd#y|rJeTxkUpqu@+qE*Y!7&qjHXXID;fyA_Z@^J-l%bKIjoh&8 z?eN#t*v8M}ameu0z09N`41n^Tz^hpy^=@VQht_4Cbpi8ZF!u5OY#k;X@Kiv1k zbqwp!B^tX7RMK-s>l+xQ&y0&3A3mc1!sy^D`>2Doqp;>rRR?siaic*HG##kt?meZp zgg0CU8W8S%L@>mxB$_8MqX!I58cWrB4J839qgfngv#~2kPTeCvBC9H^A9vq#X?+(& z6WSXJmAe}6(^9we<8ac{Xf@s6pqL_LcNWh(IURd2#@gM^e0V5rYHC{ytJ3AQ(?wxM zU`%7yojiPsVpu=Wvmo9{<(q3ko}%|}DSm-Rl(8Uc}H z4-*)vXf^udj+_feb?@;_b-?{gIe~ug`ql2VR{W#gc`3A5r(&M@zLZ!0*WtZ0P16(p z5M3iq6uTM?Hi(kuTMr=?5c2ynu4Il6bk}<iKxP3gpj>_|TXmj(S znBT2>_1X(t1(#15o|8()K~wWi!1IjjQSDrm7KVsoxs@1Kz!Q#B*ZE>oCv# zo~Gd5<{IE^^Qf?Vem)@?Sb2PjHmd%I%Le$92JGd-;>NnV1W66EZLnKPm!kvqk$)vV zl;-hR{IsH={>v6}h7iFaBVz@d0L*&e0l^*vZ`;#6UzGyD zB}^FmN>9yBNs%K1F}5c&4ZaJ*&NBQGiwG_yVCB;{sI4{~c%_KLHArPojt_Da{!I+( z%auN_|34|N-gsPa5)*h?)T77|_DVJQZu?_5&;Q)OUnk4cK{suy@MJKPBH--2p{zbo z-$K`GwZK0)n`Yrf1_?pr|9dax+E~TooUkG`44|grGFt5m~j! z3=N7jNVo}ZX7fWV@WHWE>2E1MtbhDqEY407A)ek$Vc9W^+{$QZdbv!^0YEhdMwG@+ z!%M@96DBovza!(|4AE5xBq>f$dk(Z||8Ei%eIaIiJFs6keDJl>Ac|(>k>~F}WV(7z zbE=@D%dAbUOMwWCfRhv^jVSdEHw>a50n7xLuD^gv7E~n7Df59cpJWpID^hBK_jTQr zrbwJIunkK0~aD?pMPBZb)>8z)@T%`$+}Cv<_LcUW5`7t8Ly3H3ZwVv zk?vV-a{3_hVnm|!4(t_+9}v{ax+8Mbv$KHvL;Su(ro>F{bj3egmeyyK{gmU8T}9p4_b6Uj)j1*5)+icE~zd0hMi*qaKYKp z1w!zTf%YqGFeu&sUev8ZHjSEEM!=|El+VqV4X!lR{mQW)=fVes{N%Tj9{T(q3`!is zGy%U>#F0VB>mHag`U=K+QA~QP=|401s<}lvTH1kn`(D3L()-ErTxUlF`}h7$ChtAe z6Z27?MmIFULF~qr2?cN@glsM{(!65*{W@1$mcYuLf`s{H?DLJYl=|=dS^YmFe+U|F zaQ1kD6U8BaJK6qCmh2VzD-aL~@`_-#i(#VLW2FcG--k2G&Jn+o1BYqaA;A= zOdQ7e@IwiNc~Hl=WceZO`&$S)A{-67{k4j)tX#T{I+9~3(xfH7EB2|)~|9Pp-8Jp!uw;ZvCZtsmLX>hgfT{-D=!P@@^)Yo}&AhP!(F=H?EgYM>8LLogMDQVUU z#Qv`N8iO1OFkNgIaErRrI9V1bNl8WB>wJH%B1;YmHZhmM`&r(LQ#7q6V{y#(hxlJp zKf$M1NXmBgfQAx43*S9WgN)}tUEzUxOwpp?DnGR+P{AdF6s+a#SxhdXjy_3E(#1nY zBKSlra+CLI4f~`arM%@Umg_+T6y3M!_SpYw|E2lq88h(yWs~R)T|;0r5KG5L%83U; zb&Fsc2114dQVwWW^hI^X09y-se(^KsEjbd%k3!$w7*lO(ko+*eeI=*=B-ISV#cz=N z8R>P;r2)>xQB@a*mB`?PiU&J+fQcSY3`nvcH2;E-H+o{BX#X8Q(TFstrpH36C8Mgp zozR+$^}o_A&`^RoL7suSQb7_()dy+(E}roAvVu@=2kCAsJ5vxGSQbKKm+VdCbpdPT z8P)wVkf16n!5j7eYlIxq8hI+Pv*+9GZ6>&^H>UN|ogDD&Lv%rqdRAi#`O2ydY?Yz3 zGcedm2UwY4`cxBxP_Jfy)t&SH&ln@N1GJ!u#)$v977f=k{TG{}rU_$m_s#$qts+3?VLaSl` z00Iw|!VQX@riIgHK!m`_Q;zqX@id7`o6w+{gg^+9l3q`xlFud-#sdAYj(APo{_k=2 zwuB*Y$uoA53dq_3Q!pVg6d4yV8x&-YnBww+#%cacT3bL*!|RADF*^tzO*)t9l*Gaa zqb`siTI5dTiK(nW{4n`1CKnK~#P!$lu^{r2ragBDJ?x;YoD;K(u%6mq)V;i)nYfL? z(xx$R`8820KCDl6WLx{Y+no-5Q$`;D~z_}(XF6t-TRR|mCDEg_*-Yd9S71BdlOJL_d z8@rW4>nRg9!~EY^lA?^2r2~e_7<(v4L&EEbX#(I589B_+bXKr=jW=Co09IN2T%o{$ z1kEHqUXT9IW`yFVfdGKZ;cJfie-o+umDqsQFQ@(UTtg>L<^n$^l>n-OrAISgi|FZ} zMMgn@iC+suezRe&7K={EJUvgg77Rzr4PrB~w(YKx|aU@E7J^mO!0TZy4IVc#dua+=^ z3ewCwB#wrxcJcx@&y9~&@%7?TTT@Nc|AF3U^d4SZ=4bi-v{>fl&t0+BPxt9HxqJ|Oi}MZ!Q_{PB`hj9 z`y4~~*SzAd#s>C6=S*)9WWFJJh=olW&R7zny@JiOtpb$O*0b zsAD2wLe#HHKCbWfr5ha(ZqJMN&XYL+EAOE zzJReEk2VKRk04i2EF~ohmISa`KOM+GV~URhLhUg(#Y9Dxql_S|8^}XHH5Esr0oNv= zo?%mgBRELRGDg4hT)x(@luPEU(l{>vl&M#@JWUOf2iiJZ$}rS?les1HTI$TqseN?p zLuwMehmerBpT=~_<6p&fI(dc56_dd>2#fCsV4jO z+uhu`({jfGzFJ{UnS<%6-U!P7_WV60T0M`9^kOYNq?Ya~Pmeu|resllR`}w70 zmygJ2aE#z&GXD>tCn3L2$fRF@LiN#f#*u79agOh6o`9Jndc^#Ev8vc}IdLce?khU6 zi05zE&K?}VD%WN4`Bv3-rOm^}X8-B_l8KQK;CHi7DF)mBmXwqv;I`A?xbn~yxVl!N zx`w_+hm1G?f&#)ohQ^4L*a+Ahlqv{F=Kk;O1AFO`fLJ7HAm^g?O8BVfxt-zG326+bN~_dvOz8jtV9*cd4o7Oxug^$vuHgt@*Dh^i^94mwIx&#$k=; zmRiy$DHV{`=b0z1Y9aR}a=)T>@6vdao$0jIz*;;C^fPh**d9hsWy2wJtz~SnF+y2$KC|v2umyO4GvW z)uW{bg1G-ruUqm(k9z-V|EH_)NXj|F>@J3$+}ZMLC)_{^N&=HjXD#@m|YKXKUuqKcPdK8DHL^@!1D_7@@iPeC5y8keBICfsn=MQFV?*Z?YD=2>ii$8BJ!?>xY99B z1=fEH{Xd?rGmy=%izg9;QW3L@h}gAv6|rjXP0doRQM5(vPreYWpYkEkz2~{-clNpWieAtVYA81?|M)IZ>tsDsuh`w^?)b>Db!xUGY}Da4 zwcBqGMaAAL_~t67zOsRJUzIj;u6|j#pYM;|8(|wQAP%I-00bn>*9r9F0!q;!%7D@# z@lP**N6@Sb=W=T`Ya1$6Yhyds#qtJ04Z4?@BT3hAvGvg#J zO*fdUpanE8QK0+#r$KJAV|Sc^a^qhgPx z{@IgtxG@^ldvCfj7r(GMyX@eyhl*yj53^hx#d*3>|FY$LeYmwhl;Ya*{0}_JaOcM@?(D-n z)nvxgaJlDK{0tLZFt4~A`M~<~to2_nK>glXGJ_50@)GUs#y|3Y4==~=;NJJVoEM{b z{OI@#|JI{d6?ew&yNw??>zU|XXETiWTS}*Kc`q;WE5ho2A5c7hSp2O}&?Uj6T}(R6 zwfenc)REV@1^=NMGUCqAD_K5i4* zo+%yEQj|E*QerNFKRxP+AsX3mZZFtvJehCg^xd9zS;R`cP{AtnI0+%?Xwa-4^8HZ1 zGnhp?NHnweYgvAsQ8XsCRi7gDUHh+-X|{Nt;LHSy=lnG z`;_%!Il1b?vQp}WY~m=ZlEBZJ%2$d$+-S*!x9%hJy6g(IOC8_3g$SvI?`v#xeF#8z zQ9l>m?aBSLE=UqK>u`Ee7bduf8S2=3`1G-bFK=N;q2ci#gJr{`ro^9|KhpUo~s8mc!wPydz(o6I@hA(}~wb-f?MBI5aTA6rT&<PxW4~ENy!3g)dSDY_O zNIK3PboTllIJx_BAZgPz_-B`ED-Q1r=Ss93emGkQC2LTsT@O+{uYJX7+)q+0`b^q+ zJ4|R9&VdGp7kf6Y{Whd?b~YEjeIn8HWU(TrPg+H1GK)iszNt`mp~Kf68E0m>EVBE< zf@km7y)df5%s2g;mv1Me>K03?n6w>kQP(Xjw(CD|TCNejy*8QMU;K6Y?a!^Brz8v> za@Yn3Q+2NAU;CRr;R6KpPFjPxzdH?kJs|NV5~x@y3%ok9)~T!Q*6s1e*)-v>hCgcy z)i$~pBjqptEG(p+rgy7W&;HJ}sdL==ykK8#z?U(XSx2vAkgHj8t+;mz(k5C+wgg-y zyGy7WSLQaW*2)*t3@+_Mc?%eq2MGnN@1?>YaZqA>F4@i?zu`M%t2)$w4|{^u@H zV}+ey-b?!zj3s%p6-&Jz`K^)=a%B8Aqo48ykT}6+HI4PwABMty6e(Avl`HGCG0s^w(BaO;*T*t%WdkgR#s%m| zk(BMMTVs_F1bPJ!jlpPe2|1y^_NY>WN70?pL`X6pAon@+}PnbsU-GS z<@$6T6reI}xh_!>&+{|OX2*(KJlgPhu|hjVP+FH!#U2Pv5mxJ;;88V)&iE1lg$$18Se>=HELD7}>h-)ci zCha8giODi!RISV$s3XR^@B81)=amqc82(H za&+2$&(sbSa!^-$%E&u1a=`a3R2K`-H|!~B!CAR6@ik`|Y|=7{Rn2S$%*cDS^yzrN z$Zz9E?}HZu?^Yazdk@t`_57YBOK(kQzUq3zt_@5w+?fyN9@s`>>EZra#YYOSM>+5J zx*k>+Gdz>?H~Rhii|1^e?s=|y6XvDxyJf15N~!My52}>hMQyrVCS*SpOG#P^T0X_kYKfjd% zSWwz7ptYx45a zH+3fRN{X3?(Q3TvWCDf1a9A7+nyB6wb@LYT2t$0c<+A(6l|u@MGSVObJgl#M{cxKvrPNKkfzx-K7GQ z=o!Qqa;&09iOl&Ei!+PmW1qaJo5|F?PQ)Jb4&*7$3V&FsTPC&ujigRH51LT?a9wO` z@O%3Cji%zGLYMs>8`m?VIX^+wT5?vcXbXh(i#~~PIddy*=dTjAwY7X*-R!r;MYSvk zKQTUpz!Tn97@lU%Awff!y_9Pvza(=yk-bSKqTRmM$D7Z8}2&J)~+$xI>;8wLR zjj{KHlFTs!NW3UXVF8^Oj@q}*R#B93zm-6NZLz!FG=Y+o7jN6lo23QW5-;x{qPuJd zov-4r-qAYBkSp6{Nvc_-H?#qLPFgwpC%P$A*J1Mxf2vEb5_{6LkcHQzX19o&m7~F7 zCcB8k6dzzPVJ|3V-}J6dy<|?BDr14$=Vu(bEZSo>c2QRy{*#}wPCJFRA7!{ZVq|$= zO+Oiw-#|FR5+Vn4LaQg8=7psl6^f01xNytbS}zHxs%SvvHrK4XB@38sCJ7QcvgwYK zothRd7Ha87A^3WZTpZ4u(qSvkUu^o%3*4s2*n2ppo^qDoX%38>CXFRs&U6{U*MBK z{#T?i8*Ue(O7~_OheNF-ktHv`-uBgL@Ve`1#l-c{+uOSyy@tu`Br0U?D&Vrmd82yh zu3Tq6JET%)cG9#}bL9Pp!eF?zmr$C>CN;G#neg@akvac!V`ann?45q@dayQwftQ&3lM|-gzs_z(84Rat4~bxXeKy|K^;>x>q^Wm^va!u>B znZ|=7dv@i7lgTgDDWVtI)QNku#i3@DXbxQG2h~DLw*HPs2Qw9Yp8UFIEKN08+SOVy z6)E)#mA2%49u9*J%d;eeccEGy$KN*A-i{h`v@5!VjF)L1C-SH8t$yhjbv<15eEPQg zt7??-`&R;D#&SYbzn35M=*K;^4$DXPZs}x>L{1W}Mzw)W7Z?KX<%qzkziN z*bL5hJPlb<6?XpdfZG2{$A*4=$8Gf@Y3fSps0orV;pLy-)J5H#=b4sgxLG!Y3*TVc zy}oWvypG#Hw6!qofG$~?iS8AsLa?!_*Guemr9PTqtyQ0n;-V%-vL{2cC zmnwMCJZ!g}|43h6%$sa3U1# zCQys8ME#w%C|%z+1ILLXFVk;{wha&ZH>av+KLp3lI8OP5TE>AvX{BGn%lMTA@=u+d zLLYoSG>K~rNnf6E|Ju@*@fUWs@zcx={3Onngec`#w1Bx(`Yu{wEz zN_nzduSV z%{+TCn~s}uZZ=Zo>3T%%&m-YC*656el75;!9GKR3bL!`O7M3Ewono>hcarkx=bCD^ zdhz{=b1Ki;U$dKi_3yUn)r^dYR5GJ^lX1B6PfXcFtWn<&)XmG11I!T-8>H z`sTqz_187_rrVB`4Tm3NKq!;lb6by%$%b7+q06*}!#l1+6p7SM{a-BhAY#1-HCx}N zo>0`kzPR{uvOl{p9yog-xa@TrHhngxYIdCjAT@uG<#)C@!B8xU8C&D0PjWxXb3eHE zW5Q(R~|H4AIBS)f4+?xK~#ojCu&!dLDf- zmkyc!tiEgd{;k9J(PhP&HRa^x={FsnG*~zUr$hUxw)XRcp43Ct(~oR|HUiH7e5IZ> z@i$54+qP@P`|5tWSv?`eH%LAAb;#_g<0IYFz!)Qo_|B2u@(#Rvrg6_ertuIHumr`Y z>GoK1N7$A~rtpjyxU4HUg3_y01{u)YSAqaVhRB%LV$Rb`CArYw8g`yx2u!-G15+qEDmtJS)q|!9gweC13Kb<=N&a*d{UGhTxET69gC&gwQ|< zyu|0xl5La-qg(N9n&VsmaWt(8Ajl^GS-fm+1&ktVO(O`VfduzTmu1&MP^eZk{~taC zPXW9M9wVoiz?J>UjFo!wS-?QKc`)H@;osWe*%qVcS=Mx4;)La1pvC3O)7!k%S2>vA z?nn2_Psxk;`{;ojW-9}q-z-k(*dKM3?S7m~vVtrHL9b@j#et3N`3Buw8Zh5$LC;{p!@P+a10N?HU0iuJ6(Ntf_y zpF-QKkFboO@n$$%_h^Gls`KbXd;5BYYzQY7E}_V!cQ7Bu;9pC^q1436`nG_p&dj~I zOXu7ci6;gEpZ~1b^Itf8WtHQ1kyz-M<~Uq;zRKbMnm!bHywjQ4)zt;q+xWbHPW1R} z%aywC+-1gJJ$HX=+9|W@8$40j6oP2&BW#`LB?1BkzR=UsN1~Fr5ZID56DRtnZGyVZ z5JYYhBpgB@4@YY{@S90)G(HWh8}h~tL>s?*&tk7DCokVGd{|FS&X%vExj#JA54h^v zGj7LVa#NkDP?s0yELxgH4@=xOEBQ|kHmg-P|5at1_~mdvG+ay&H9oC*J5hdRwOkJ{ z?_K!WkDT?H+1T*BNzqZt$5tgX4f5SxN+OHVtksi)eR96}sgo#)kkdFIdvtuSwo|)D zD4C`YCB%GRsx2@QCGK5X!1EBm83ME*BMWTP;vyOU&GsjzrgIZ+iXaEzlz-o^d}y9+ zo-E|FI$9)zE-#N{ORjsnKDw}MBloY&N|>%&vD7bmIp}Go&Sxn zom-r>*@&}O)fXS-p{Zl1q@m@&TX?S%kihpeOYPsM&XOSj6>UpC903Mhvf#wuCh9}& z=7|Ez0o}S5;XabYD3K^h>j@*PhSJ^I@N^lsEUhPui9Lu70$K~Q^PV67iuI}xLU zkluj4U&QplHnhaL2Mu39h^E$AYD&Yu)oB7j0wgM*HpdPr^FU#xymA57?rh~lKr1aM zB_dtMSRTU7cvXc$6LMbl@Bq<@aTI1&V14D_-fAM9d6zH$FL~<)6cu5AF%6LP@eSdX zM_lcSA?OUCRFM=1>3B&>w4zl2GBTv?PlC%lNKJ6cz)%{P)k(O?@^c_Ihqd~A3j(Cg zI{sq*YD>WNh}M=m{k}AON*>9Ot45Y5SD{7>IaUxF&N1qPrm3UEg2K&c5cnvNJpxHu zDo`B^kq7|7Y|C{-34B_vb{X+N@$fRtSULXRQGo4c{}3V@6pt+ZMg^ECZ^8i}VI;5$ zFce`5!egXmf)LXX1kh#;f)FMJ<{*G6oK2@YfS48zBoRQHJzZqOBBtRieYtBHb3-0u z7d@^Q8jYQAEnfGBtUBpa2F<-iDHLhAA~z?PvrX#-Cn=@=a@@o^7k-4grI`c*R8sbW z1uD_Zm*5kq6JW#U_J!2#|HJ{4K!|aRs(Z_&90V-65HFfsFf|tvJmu2l7Xq1xcH#n) z@4&W4;a>Z(<5|uT0U_MN);~?KBpuoAJP+W=FZq9anQ$9E0)%){7)c}O>1(g)Wuhqq z@pH>(V|h8>^_-YMWf4}GzuoAi{FM5Zq&p_?Iq0x1x*Q^`JI2kOm2v%%LP4i2N64;^u%cqiXR-%|IW zLsj3D5TVHWPv8`ZchYr~oO}WzE1oK{))=$-QMls<>i7q8q9Gu3Cw`*9lsG!Xo(&4a z(`oHIH3cI8!MwhOBc=!>&(gmJq6rN+R_yo*0IqfKyR`P_q$3E3JaHjRpuh)!;C$%C z%cuh}wZ6lSFa<{p$r1p#+JHXB6*`?kTz9`Hm8d4c{(+k@krD)b+E`cik+vf{5)LZk zK=!%w6D*jP!NJ5{9Ia^6FdX9ihyXHC;xKagI-A&%W_=!8%t?;rKbn?6likKMX)$Pyl1%*^- zgTg3L;_rFz2ta^4KE{-=t6g9+W)M^xD4f{D&!jYlzicgt_#QbT2vHia6#Ea^IoP+r zG{+E@b>^!p6rg^EaKywzN0OQ(M+6My^K@7%{%5$G0c&|8R00VU0O1A7Kx*#0(1K(- z^0OhqCXmiYYTibrtpC?j*>H|PN|Nz4JyUsWVkr(ZC8fkebP=@Yp&vj6OlgWhWN>f* znp;5<;(p_pdVOG&br~y?bkQc%#9Isp4JmtJ`v0z}+JIeuu-5uOIHeIgC48xw;uiTj z8!(W}gcPL{5+ei*p-=_S4bBoG(9g==0r5ap-}VtuN0tDnl%4#)=9%(*F{n4H`PZ8v z?6Rvo(!v^;JHUpFHBM8!%Da^1=w1OMzD$zbW31Bht*X*eGd9u{dpGaOHA3=wMyJD8Dah(x7XM4=j@ zRW!yjrCARkM-Z)tZdvgSWolOY4do`H;)N+)M`q{P@d;PYM3mgnpp50mG*~*5N|s-# z&WAvCtL#~#6fkp48HPjyPko(Uj1lP7!na*Eye+@P^E;b#`IO;$;wrTh&A9~(0VMtI zZ0p3Rga*?#pxH8QPlhBwJc#x5v_OQ03;yy&P%X{lSynGb>~yapa@CdAww|lU zdQqbZ0YNd1R7tCkPy}UzkfxZs5HQPP1ACJN6r>j;*h8OVi7a%S|Bgn%fId)|Iw=%P zDGucv&<(ozbblFfwGkRxbRkJg18Svg`>Kr=nV$Es{UjgGp|+ra1#MxrlVOBlmU&=; zrNCz(RwiK5=yW=>>c?>^QL5`Pp0jwj!Z{GR7&s=Dat+PCKF;n#LpBiwTW0tyfCKzQ zDvNjZh4cW3xcI0)O7eDkA&FrcX<%Vxj4@ZlYhBa-2C34^LX(pEkYXXD;FMmgOSZO2 zdoT%JJ1Oi0KsvGdVOC1dYWD_(7jc^cr&QCeo(s6E11$vq7!h~P1N@9}32AZsGEe0! zjw~LS93C-B>HLG2Z~_?N_3_*k3RnBCj9pK|7|TV8N7%{q?SW=RPtK4*7SfNylL!kxW9_a&BEmsk0DJVcn~|gPXshtD z*YB;EYX}r2J^DhnyJMnC1}#Lj$yj6F62ngki`#L*&FCCc2?fpLva_cSisc^MUcBH~ z)6_qMkDq_n47{d12sZ4J6kzF^^}O`c@Mb)}Ojd0rU0UjJkV||I6T~;aT_^_-?O~wf zewe&6!KfNn=Yo@|J=1$lwAu%Hlhj!Z+1q?a)Jc*i0QHO1CE(bxma>qkP)bTQM!wfv z@mt_7!u+I4n&m(|Yo_Hl<;{9wh_f)n(ciL<4qobKiE5KQq3*+!wmUz|%pj#8YdLGrc(6#vk9v*fjLQ~h%?RP;1`5_86QeXP#f+Rf zmqV-~>87!Gt?3^iE91h;4);xDdu^BbHA)KT12^)K#)TUQAFH52{l<;6HiAedM0YIPO10mEa+7G3qGNp zlfTjw@#D-<|9Szgs4DOq281L5CCC^mXNlo?#;~NtoCx7FJE|lBb+A;#03^*EAT#PU zw^o&RXrO_&Wo$(E^Pzu`lQvyDmRFC+`J%@S0xZ+lKG_mHz2AaRrIQ|NUfs9!2!I4M zcLq^KG)JhE4#KP|-5YNciDd;?2XxV?eh^b7QZ2LvJQm6S{vS(vv|34J#93`Vjgie= zC_ebUWflg2Jr^3dSDo%8+vZ_vq7T(A6Bu zIAWCc`ywZ}iOE#JK7azpwB{V=PT4jdHwU*@c$6wC4L0K0D10AAU|^%Q5%r`7=dN;> z(fj}4n;@JpTmm{=*H3bkkh!{jHh}c`+83>JlpWDy6Q$GbJntOl;Kg}y`Ptlf1X-n} z8ZjeAx0qSu2P^0G^qepY%rUbGK6g?%EcX&0;Ft12zyRA1`P?>F;b-8;y`Q93T<2_> zbKz@DK{h8U8T{&&^a`*33LUfNZsuJ$xD=w#;DVapdE`=585Q(W$hU0Ie&Vus5AP0*S4F}hjdeC~Gu`BwammPyGEpNoD&NeHIID3TB> z&;)SuyocOw2#J?VU^dk=k}v@=@kx;YwG>H&za%r^!3sPP2&_E1m^(PO4T=9Ts|ZQ_ zQBk{G=c@9UgE}OY$r2#J(kKzgpx~Y#_wgdsnQ@g?(4|{h4Dyyq+ait%@^}=V@tWEG z>E8v1dy8v)MKHI6QKHc!RxzZ~K`8ZM!eV9vNhAkMfl$-`lZUnr9*Pv{rSae==1a>& z9SdomVPIzg-HiYfhld_+B$_XwkYx(p;R1N=8pHLLN$ecz!we}4mJk;PlD>!nyvLwYcd2B7Wc8Pst zzxbFker;#_Y$g`2g0DbG0us++o}Z?>VLJ0iaXFU~aTHo7>u!0FZj*_f(=*a;Hk18*T#G~FTuvOYnqp$*Rp9%Hc~9jhQXKG=X1dX!e4OK zwL7zCU3_U|oQ->uBOqn}=jZNg|L~JS$~ceHC6^nZRF?5exL{?H&n8;B$?sms+7$KU z7JGa<_*HZl+Ua)Qw-Qzg+4PIHO1p7H`?!NG|SNS z%R7E_wliIXjucdf3aSX2-$=;B8Z>;x!j&YT(ZCykdtlbi87>|~NSQZzC%^j8-{KB1 zM7>-nc1J}`U5tB}>v3#~2^R1Pc6NO>iF22Mlg_d=71mg6MAs~41 zh*^o8hK^VxNK>1KBRxqjB%b2lQ0}iiF-{^LF(PjJzn)K!4@&eX5v4zKYAhAVcn6ej zn61Gv&y$U<=5Sl*#INBfh+)+^sBI^iUBM}UPEuJw_w4^pi{~3X=~PE~j!-+*gh+36 zG-jwdm=y+~(R9fmzr#4RoExwCM`J5+$so#nSMTpzVKtP!2;@kZi_sx8Tr&YGsCn<{ zqa4jUTdJ-M4sG(nwLUPG8utqvHo_o0m6B&JL75CSH-;v9oP^A^o#sI5?XUW{R^|uM zdHQ-oZdxTw9J6n6mkPETa&!wnYXiD=LK)eP((f$NT^Y2w2g5tS#*h#xuo*R6EJWf(h4mpP4}omQz(0-y(!$=dy6Y*4g^aKQ$4P;N6Ke{; z=Pfy0By#jvRvaR4R2DQ4C?-RbmY-0T$AyDPOS9xEz^Q(2jOBedKm9fsH-a}ayYZ3Q zIuoqGd61M)!334M*yRyYpe?0I^o?cvMsG5-z#%+75Uyv;_rag?yT*IS!<)S(!R?yj+0kG32aD~{UDTF7WJ;_l|ejHTZw#+ z%jWXGq%+Z`sE&LqJXA-$2-5dKiA!wz-#`3(9+jKXPDpYsLorovDXd)b54mByjheIl zO?mGQMXJd1>Y7FQH`^}_MmYOdB+%(_E z`te3G>L_J-06pMlQm$NmJ*EJB85+$-*{cdF^p1)*x0EQ50QqdjCLvBFKxLNq8^cfA z=4%2{tU)Xg&OFjd((f}Cg#bn=~^nup%lL8ef-`F4UpT3PP z_hRx^=Xoq(66z%x-U&`X;9+pe z2VhxuRo7`{kWzrmHJ>=H0nxnJscfo>cw@M4`yKXdpOXjWMz}dse=!!IfNIdppm9Be z2u_2FOCyuMB9)#QkPzQhCl%nzO@jgCM&FSGBX*&OYu#xj$*3!B|8N?~ca0b_iIFv# zQocbczI{?D>=P=PN}07PatixR1v{{0PvV1y2j%yB7)x1|Y&BuDBv5hmKo0JM{Tp5X z+R~3D9c)EjAO^yMIPZMIEH%J?R$AcUoi_%Yi(!yT zC9YoQ{WnkZz7=b&)2%g-9hk}l$K5P^jJ2rE>C5G$Mw_cP9we=|nY(I9X-Tu_#ca1x zNaYK)WFq4HN7KIGyOfZF$`dA;2-(1RqggeMQ|*-b8!_el8dgLt_&N&{al)Tt`3uh~ z^7Ept#IA&aIMYHl!#2=sE;E|5+g-c@z}Jy##MV|J-~J@v+R zmMSQM5NIco+1_O;X&w(JYiWckj|fnxH$=*|kyfqT2nY96DI9xvzsOmUi-O1GWfBqKp?eEc6d8|@^$Aki5FL5!8iCq>l7)uD?*Bza1ql~OP@#K$NUTVu zC=rkai0(htfcUU*J2^3qsy|2pyVyh`<1Q+aly#9-9) zsh-fuh%qN4f^OxAyJf#*bo=dRgPVWdo3DcJnTnn1+}OYxNc{ zWwQo4;Mds3qE#YcSdyitii{jyL2MC!6+@N%0_m1vXhfIewkv%zPbVFlaJYP2&50a- zP7le=jG_2|k-hlF?;2hl>v1wUV8wpCjjQYFauvkr|FT6ZuIAkt4J+FiB@!Kvfyp!| zf_nH>*91!cx+XnJsE2W|Ldo`v0v9+^^4G%iPfJ9qP^1`SJN71XfJYgpghirGZRVni z=gUZgy>IaDKi{0HZju-j8XF#yd@)Kmgd_CUly> zyZas{!vPGyQg5IW7l*-!$xf7HAaFeUytBjO2DW$0H~w=hW$&et>g>Bwp z%;0Lb#^DFyBrrZeqkzl_V(cA?E)RQ!jg*7=YRJWGusvu({DoJ@FALFAT`EsntK+E` z;`sS`M!Cb8q;!D0;rmG{4@i*lYq&MTR+KWNza(zbo{pdn6K49gG%bTUj8&5&AY+nF z6Qj|O#KXsuGK+#>lR30?-w4V34rf>f0G;O2?}M)b&Bsx>IzeDGNR}>E;hf~t0=_F_NfUb6uNr(1y<>g-rz)Uol)k&RWVoamRPyRzDO0Uz zAudZn5Bu9SC9xVQf&a%hh+sde`P;(SPuKLwNK1tR{1^|{;9%+X*tmjg)5k4DOuM8{ zmj`tscEG8rmcfy!)I^xr2g@W>xw%4zk)JNNnwOaYP~}+l_^`uGVx%yU<`A5j|?jS-YdRN*H{zcr18nZXU-qY z@+Ny0L?hb<1#@IG9YZ-Am)m!XX>vIIovIg8s<+>Ss?g#H5e)@dI%xA z?&L#qb*7a;+&@_1TH-UCK)+48YKs<0nInif^RjggtHCI&m`+kWJetn)zaI*u;RFJ} zYF!HX)R%M#_?!?X;-MWGO==jOmJ>Dr*RT4oCR^wT5>wc7JA8?ivX)y(s)7aSEvKGB zoD4xFmp(bnW3HXSE4)JkJ!A^{jqM*D-I7JIZM{|fY5*xNfq6q6I{&ge6J+cioB;-$ zEV*h@=^oRmp<1XK^4d@DNE*MSxbdB=X+hBJ+BPz1t`R`RYfFCQiEY5JCL4@^2Bsps zU3)VZ->V*`yQ9k)!W=S>A}Qi?rFoe(us70DQcwVE#r zEa>>Lwp1eYQ89Z4n8QK)$Bm0uLBfIaefXmc2ZR`ms}>(eOJ>0pY8mmg$C?;}Bxzap zx=D!kN6<>&e(;DVv3Cu_&ajKSWF-1C*c?o0hQawn8r@lF@a{GJl^ctnAVW{4fZu(vD7r|m=w z4~+Q!UICni0=1B0^Ws^825*>Ep}EIj1QtgKy!beQ;DBMt+N~IY10(JuI`e)-CXLE5 zhPFW)I8N?eI^W3EVu++1e4;IXVbG#>&GL8WXjb7dhq;3NmMI9POJbnFf5X}h$q+># zqYM{Ihk*lkP1q~dd}fW#QSKQM_f-QGxrw;hpD3vtkODbX#3DvOcmTYfwj5}@DJUHD z`99c4o~5<)sN?gE@i^!$G&ra-I?@)sEM88n+sE_JsYAqMP*yI8Xi^}cVz2YKjYinN zXPm8E7G;xO9T@W8(E7TQZhf~r=a)SWsGD}`xxX?brBA;8Mn;izuwuY3`swudAJOrX zB&&-LMt4aF;CWO5GLZx{+0L$#@Do`!$S(XHcDa|=#|4)kt0vc^o^Bhx?w*Ky>byTy z+_+M&{Vht3jiaf0;rtdPt z6s9gyO7Y;Sn|Cw)(pe}O=tc<^nC)WsH|?}rJU;mL!Q-UE|Db<9P<>Rn@u+$zabDX?D@03DNq46JjP+MS>T3IRTc2!K4FDN^1=mgwIfy5KvrQk<0U% zQ$1SkCl69j=ayfMcd4^CtkgNLk&x1Xlp6PTEH>XA74VDJuf(90U3Y~_9<7IoUc{_# zy*uy)iW5Y{Wa~JGsC{_NkP|P-^kLiY;Tmk@r|~iLCJ*2B-DoOh{2+o-kYPabvElSn^eW^ubcm@EVLX{;CT?_ zbVdN8?BML&Hv?di6iVnv1H|*d?H(p9t}3!PF%H`C*7)#189)fbA(73s*7xjA+DW2F ztzMn!pFJN)c?Q7fzrM8aIK4cZ#~nR!Ib$k0DpMUq$ttw*w9%C>hZCrmnEAjg8{$Bb z;yG$+Se*nKb9H~?Y5O7BsVbY<*Bu8@{Dk_|sV+;prxvcasRYVrB%!$muUCDoh&h_l(VxIr3IpIq)>C5i0MWHjn}->K<;$)4N*-E2;BbLtOUj zXv#@Bb>qeed!yYhhqa#TxIF*`v_@AN!rEfL!72atmvhIY0fY+ea=7M9h#J z(ERwmvjf_vWGMpBihM-EZF}OFR7L<&OtYf>)=dP@VzK+(Rb+pi`e=7n=h>z+dgIU? z_;@jcLWFzk^Tn3*LGgMbIf3iNM%?>wjXQKuonX3_+BPZKr%B6dX>w6anyQ$B=8O`o z8!hDxNV5M%xBOLtf4af7f1|`hpiM?B!6%^5z7XF9Hyp0&`n&mUEX%36DUP7#LjnQC zn=%1;U(I}ZuKlu2wP>yF!B~%0Xr+>xbPWbf!>Fcy`5q#sne=N1BOCf!bIEmjeTVcK zpb0<#Wa}i#=#;|K+csMXf`^Bb(ec^Rwc&ZSw}bty^QRm&N1YOCUXn+~YknJXdAb}Dp*#B|^$VUc5OGct%=)m8gU>Zvoc^SGZ*EvF+ zvi`4U364PJkUGF9^IjI3{Te=#VKu;|SHqkic?l07<5l0^WI3PTBW;GOsCWm8-S;Mi zR7EHy34y5|fe9vZ3aBar!aI0C0#L!+wk5_u z+t<<{DlU~b36^$i&pxN8?%%W7Yvx-YOyN?w?Ny1MWGWkYj-^Nhj=!GxaCtVB;<&rr zu)JX8`kQiZxZoo7^7t56#AUPOVj{Uh-tclr^lk4t`}phMGweo}&6C)1A>U~yT{#ed zz^qPiIUe|Zf_$784FJ!KETkMrs z83%)~SSd)hW!MAdlM_jo(BFV zr*B8z7vp$7pz#`>`->PTi$-|0N5^K|WmI=G#T4Vvww&bO2tCKhiS$0dS`frz2uTde z$H{&Is;DjSm1LLKIFG=Q!%N$*Bwjs=ln#%Uh+#E$3A=G)0O;ljiPJFCsa2t>S2$rJ zEwl?umD8!`m7YhsfM=*cui%ehb(>6J0ty7a$2@5eeD0X0gvao)e&eR*cnfTI*<1a1 z@1&sQ!fX2Ms8@(c_&h1sdf}N%YnMrqmLw>A_#Txv`UNFgtBwwfM&l9;9+CbGV2X&j z*!r(tc=hm&y}E3}oq50Q{8e-NXj!zhV?XoMae61vpNI;(O5{TJVkLi8G#qcg&Cv`c z&I3g;;}yyyahM|l>CyTzpY!kh;#3 z{F881gBYE)w@`@p+_1PR$%%ThPc#qwS%f8*)WeV0OtWdr%LjT>S%7Gm`ivrwbh3=O zEv&Eq6uZcmvUgo0EWt*h^iUwy;?n>Y$@dZvE^TRj+Ms6^Q&3q)wG1xv^)M5DzRf;M zKes>ys$9ws^HVj}vkoTlB$FW>fR2oK`-;DQCL4(I1g=H+V!z8LARl3}7@1{R)}YM@ zUo(e~;5I+~Yu5ZiM_>umr)loWq18~>$d0d zGb85>rhY1H^w0+Rv$cRUx)u|-WtkbOYAt1t%y|S>FR3Px3Vw4FR#)jg7g$}@etNv4 z-SjJ=Uto7{sLGb=^LFjwWiFBX%jFAXzx%54+1z@`=d*kUBImgXebJrMF^{9*!_Cx@ z=#f#1`XlfC>D04MBdW79{*dou6EP|zIxL&e%t2Wg1jdxl1|ad4QJL6PKzn@Xj{BR( zSGb*PV7Hi%yO6?Oe;GxzmE1nMnRt8S#~T44>U8^fPug?&gos)gbG2`Jddg!5x9M`g z>(KL8!G}UDfz`;k6eqi72FK~cMFXQo%R&)Z-ba4f>McNI0wCtA(Yh%<5+U9d4ajM0 z@4AV@ioz-FH^TI{YZm*arE`it;em+V(1U00;pj(~QtC;@l1^A{rWwiG|)Oqoq$75jIxTM;O$tKxWibH$>5Qc-2B;mH2V|g#LAAP7N z7lE0b{~H{k!B?AH4DFUqY&=gAl-+;!P2=5ne=+8jiNyqGtKZvUJ-p~^Iwwl4aaRU4 z>$npGRhj6Tc|u3xevqsr(&uS99jHioshHWrh+kmC_Ub9a-O*`5KrmBG>s1+&7_v}CjMtJFPgs0_jKBn{c`t12?R1f zF2QebI+Iv(PPBhMpGtJmDtbC+ulxaTbT0N}o$OeNCLlI=ToM^>?E6_c@#_AL+v27t zMK>-v9}-gwm&zIr01xn#2t%F(ZCKQR&4nvI&7=%D9dBM@-2~dR4iN|+K(nz;FhC4j zZ#xC@C3=PmjtW#)$HvRbq8EF8Qzhx)dxgYK8~pL!{ajcKPxW~FMLxt^OIOAX!FA2kM$)ATAybN+II+%2yvw1uWz1@t)sjUuv@(Ecwb3BHhxUq|zNO-Q7}32}pOt(%m2+4bricbS+EwF7K+} z-}^lL!2`RWn0sgL+;h&I33%ubZ-tMG%1IcXw@e^D-hMh;)v|Sz5YE`v`5L{HCId6F zj7FaG2XOUCk7nuxu4kDpQ<>&XrzQg}=3gjYkF&+b<+y!+V$EaPOs*;8et5p?DtxUK zz5w;#DUyo;v{<;TKK6^>7RHKsJ09{GJ^DG^VFWxbz>OaBC!ivzTRWUyYtgiipPz{N z8jm3U-^g1G>~ez(0PS)7(wW%hYbe+=EZYIfCQ-ra=db?<6_v|AS#jUQ6Ucl8Lb|zw zBT}8MwsDd30?u^D0w>t<#N*;hLwpR_J^LzSq*Cy{6x@jaW~SPIeiwdI3CC&@asD*3 zU$M`ZFlhY5oAv!Z^gxdVz*E@Hjo!GRvGe~XWj2P);265!3i|FH`&`pnkBAe_srnoP z4KFT!2MHf9cXUxd{!~$GxhPAHK~j&{3LXT&NqBremWCmAritgUD0g<4JN2E*=J=6VDk@F8U!kac$9lxO+ zw+i=%Jb$Oo;}yAx<9fI4YZS*Nn_`1|VcG?+HR^k4`}udu&a3XpI-{HK$(aq0tM?wq z!eyV#sJ!<$1pH3bx?CrET&f;^L;Vj{+m1VZuH!os{7-Vz9}jmQZ+^C2i@PyNzP%LE zeHmn|V$IAH38-UfDH{8hs5{FkN+(8-e98oC_~(ZS5fU^jT~_mO(Y9kRnc|LnJnps| zkRBqO4Dtr{9SyF^(JtTbg?Jp<7Q+*0Zz?&)VO7`1UhB^Rrta1gz2R3P?dOd?X7{=T zgQ#()>8eOyjCt5cMRSyyF+&G+Ul1~xYu^_fdwTsRR4Y^389iI~7M>#-MWw@*x4~7YlL3%_3dY%sgaQHqR+>?G7s3C=s7&zk2M*U_n~$|f z*qD_*JX5E`bD)>D)8%?K|3{IF(Meu$_AzV_*8c*NC+mJA zSrjNIcJ-@L+U{_X+iwLkaDC2c;U#|EXm6c6sNtijfg9HwRDR}X<`s=!0t0n(SOIJa zNO)=oM&W;xC%=0q$kuu1d7F`EKN@SSP^;B0H8cQf1%Ej7i3RZX&DC*vO><;jXVf)T zjNz{a%&T1$R zQMFK|$MrqYc^JIP==%Qr$+Ipe*3hl*P9G>4^=NEFsH{`@#?(LQZY9gCxnm%qGW`CJ zKM_VU6FWuYMC*&F=o!nO>(57UhwdPgBK@eKD!1EIQ*5FCF+iuk?rgu3hn%8Pp3?Ee z^(@q5>5<6k(EvrhL#)$TpGP4DVg08>998XZeq4AFoKBt|wm?ONZai!+PJ>}OLJsV0 z&e9(d`3A8Da;D~}{}0oMe5UaUZy+vXTi0!dez}t9V_e&@&7BFta_vO0b^>8va#hivF7%(HJlMsHOtY*$<+en{#`7eO4 z%`7DLnbs5(vL~3kD`U)q$=`Tse0`4*oYcLEP!*xJ*mTc1EsF@X{FkrVQVnXZ%rTVG zGZo4ZvQ-FBe=uTgv9ntc!JmX8;~;nzG!OLuA)gNM0DHfK!nMl-oeuc06P=ZW2F?XY zCQ`DoOo%+R!1w4mjquV>Nxgv&l*lroj5)f`Z*Rn+{%wc_8ZIB^VS5t>F2`m@um{?9 zkBmZ8RGv62>}RMsLI`w^$599_3~Z_5M}7T7pYlV3QBpZM-T$Z&A*9|IB}1>-YrktH z!;4YQ1&>EoaZd;o)^E@ji_{&H+zz4bJXxUa*j@8ID)*syOMt>d%uIkSMZok88J!)e zbcs%p2dMzxLRdtDpf`|SLJBhUK>TlaxyFv%DE^4CdZ{rnL|NstCf;#<@+`UQlomF) zMho^?yEZyrj4kds*q-noZqZwVACLGu4=5~&qHAtrpc3H)W4`;=jjr`1G&GcMMw)oB zz>U5Rsl_J3tfKJ0jJ!NN!f9j&i796hG**DR`BA6y_N5=ZcOJe<=0O8EZa-hD%5@@7&LVrDu8VFQ$VH0#3o%&8NWdpH>~dpePi&y8yZiTbX#G$c$Jkg|zTC6grY$ z$|6D|(sl0UJ4b&J`nuU~12OhKtNZ~_IYU3VVEVuy_;Ire*5hWh=0f5*yl7=Fx*v=< z=P2%nBZw>Me7<7><8F#!^gN51ZlZ44HWOGm+4i|cxrR^y>kQ6Ex|je`bUEyNJ8dl8 zQ_NfdqHmzW>(DLte}O3~QY9VVZ~IRCVOFmx#{6XO*dTW7PVHxfoc;X-^tLa1wZr2l zpgSjqX1R`R={skQ-(hp<)7jXVSy)7;F0#tGZra->#4(@gIiL4QFZ$|T)q$*B|6pcq z+_D^k`TG0-0y*Bba;^v0QIowV@{syT9 zoGD!&*|TQ*yoTPMQG1Ac=TJWkBkHZM>a_2VK|OB}S%b-hR~01&I~oyc`W@)0q$FGX zEPy_z^8ufbfg#DQUkQnsqx+vf;R1qSMmOC)0Vcb^PH5RYd|9j5F7guP+W&Yh0Cs2; zK+=7uBYx2t;CG_}_1#o^ID29*cC#)|C$FA}&Ylyhu2o!6zwq+?nv>Ps8CKjuf&p(} z>i9p6Y8_V4@?*n<|DKWIBmMdfJr}_4I$7*0{c+2z3kyJQweicU3EA%{4g*#Y5=$aq z5J9d?oMLHi3>xtl5?M9Je|{KAj>P|d9e`=86{Hzus)z}YVDu*UEeqh~98k)+BjwUz z`5Q+XO(cnoFNC{h@7GE040Da?m+dzb=;o(mTLjc(CO26pdqHG=51e zbmAbf(|3=0Fl;jYdAN;2k8Bo|2y|&;M zf_~MQyAXJe@e`X8OLMrbs3JZ~^Cf448e5c;x?)v_x>c0dJ*R~=52r`sU?7-cC+t~o0O&eJH=7sJ<8SV_rd3yKZJ2a}nb@?F=(Q+OWdMp78GS<787bTdR#P1lHST{I zHdc+lH8ek*pzWF}bDOw<=NR614{zeGq+aX_Sj(+ZCqcu;wCP;oiine-57e&Gfk+1C z(9J5CU`yxt={?5%9mT6ADLo_c%_sr*5r2A@795{d)89G=>kxEnXJtE>Q=6dU=UpN)PPm$h^1<=ygvD^H~Py4C0*IRMU)&i&ByxG%>| z!I5Ro!ju~(gike#Pft=};X#CCO!wAwPp#w_V}9#tJPP%{olT=RgXtQI$C~$iN7IVi zIfnRcvPV^>&*`(`jIUj_LMhZsO;!`VPavy4TOYo4lar%j32M3vYkgs;fODX6EK>)n ze`3RD2%q`z#11;Cn|4>Yx6w2?RSAmG%SxBi-*Tg z&q#CA{0^i0bf19{0r0&IFM71b_Q*CoCRHMcBmmTVOMRU1iuwnRs>;aoR(!r#mG@KO zi2-Lr!N*w26LFHrgqZJK|C4;MGRRBB8;?&b6sdfhs{&r0czkQnm`W_wL>}~Jq6@PB zPjib!p019lKEHrb8==dB1Rzk11Zfx~<&#TU%43>aRw?_^|J8tws>%>h6$LZ!qMD*M zHxFoCDz0owX}rE<_S8BsHNQaVbFTUq%vB|1m|25mGzapLMug8$Q2;4KM7-RJwRh~7 z1>yeytRp?QD-ZZDwXXBDFB77rozXJHx)(V_3LCEYAB<;?zApsQnMIU1am|f!W2#35 z#fkjNAN{_2$BN(AcKimm-r}YocMh}!wUUQ~7RE=ZG4MfjV z;6o~b+}Kdln9uZ5?9u;|1>Cxkw$TR8&HROk7z4|hF4sGQFNt%-C4z99)!QRFw=QogG zjtLR!Yv13nY+py{i$?o3SL5BRUcmr~?xAEuIEea5z~xRj?L5bOy#Y3E&-+JM0;2?d zBwdOBJD{P3W_26lkZ0*TtatB<$bW4Z>v%@|nOR4VR?yDP{O3(#fsf;SZRxATQ}R+c zoEKaw1ca5?ua7$N_I%z~Er4fzW`R)Z{;)h#X_A^8I_iS?UqnPx_bln0=NZ?rsVY)6 z961?Kxm#rx;e^F*7MCkQ*$Bos=k6xI!>ci2cFG|xbscL%c1d&huB+dlf$oW#UV2o8 zf&_Dyp*X7KSq*zO8doLcc!e^M2l8KJ_87Mj z@(eDa+OY6&NPvmgKNI}DQXU%mbD?6n^pg#(^pP@O&I83n4bm!uR>nriuj!xLI_#De zA5q=~N*cd&ob9D~m)DJ6KNlE02M|yRXbS5>xoWAX`TFmXFejN<+Kj%tcpO)LV>cRE z8Fsw8e&KU4IY4Vf?J|dk&%p3ubLC@Qhc2=Nn1glHc#MbSRSuE`cV(cYE)ZQBi9(qu z@$b7~(qBEDZvkTH?6*TmwcvihNtJEKnPlJlVVs{9QQg=`vbg21KX;E|eeCHc2 zl9o1P4QLoS?zbr}@LC-7K2@3Jd3O=%7!Ua`Y+MEj!jJLT>Bg4j;?=WfIMv}jAu5L` zsb^e>QA505H3Bpk&jgo#b8BNSM;3<}_ZwTj9!!JUS9pHdX6_j`7-d0G)=lW3`_XgY zjwkGI!|U_@KdS(kt_Br~MO(n^pOD4tLVruR&{nW$OC>jM5TjYf%@vTm`T&%uN$Ty# zB~Z2ugrIW&nJ9?w0x&hInb6_``}I=ttc8E7`XEr^c7twXHxx!o*;M?MjJiZ{&n9^bdqbuY1&W5qaL9 z&)-~vf+DVth+fG(bQ6)P%iTE zuU^(YX$&Uxv1K5q!{$mL2;r}{{NRKm0RmxQVDxY>yweD%TwnZm2LdVPD~gxqp2eY# z0~6x)f^J`OgCT(xrbNiR5vd`<6;i}#1VA9t=N=FVVUXJw-v7=w9Q2^>G_2}5)rA>43$lL1!A3oe)l}warGGX)Ef)klkJ~AF;Pf#GO>N-kj5n^G zTC&F+rBJL9m5GN~8sXOpp(=53{WERMi>0cKrE6NZDPFG#{lbJ`-g!D9gx%bX0) zedtlm`&r*nq%BgsmjaN~42`1V$-euaUpN(DLB*_XO%1k=`|B)qO7T%*gzqnIBA!@{ zfwi|$a&TF-xNgtBkdj&p7%zV&(_i<7TwZIFc@fM)kCdv8qqfftyWGQtbHjVnQsv#F zg?q3?N^F*e3FE_9(9jdnaX)ajV1jay7%U|cY7aO53lMTKNA_5&UM`&9}>+{Da8 zOFCo-(4$vhQSiIurl5o;&ra5Dps+p)GdE?X;Md8K#-rE$&^&;yI~Raw z`FsH{I3zkaWD^W=CbmR=hK)P6#4bT!9-cgB{DB!7exUcCTfBK#Bn*{gXIf6aALpyv zv8^~k2@L5OHLnVf6Wv-lsI`z|t6p-cX`nFGojt`ikJhgD!A@|+c>32tHZV1}abneC zan=lUHu-|$X7Go8AAhSAie2?s^_I7szp%c}`quik&Rb1V(4r}l-a*#J1`rrB`HGNm z6!1}rw)(sDLRONsZmEGSS(^(Fx=A(vt-(m5$A9xmqUDf-Pw0s#%O~)YawX01+7DQ;m+zUJ?lx(6e#;bM}phnQHsf3|$((GhS92>TTQS z;D_VGHO`@O8`Q+gl^P2NroFZ9_^dOX1){> zBf;kgQ3^@{w6#*B6G~W~^air1kET6Sj#3EXC%mG_mM2R2=VVS>?^O+w+8(CmbSBV0 z_V1gM`T;CBEW27v8$}P}bRV7oS}mtN_@KA;MQ%iak%>dvr$Qg8gCOc8aUp|r5{uM9 z6^l^pEA}YSmCQl&Xa66Bq7%_=G>8+Cg>eH(q(6ozk%M~D8iJEL(VnN!;nn8RB6FCI z*-rQ*ZxH>na$i+3Zg6gnJg~bytfkl7Qr0}MK|ux`MHeM-Zmu?RHvNkPHeI-6R0JfK z^p#m*Ur*%m)3Z5F<{B6lp&w~D3wmOxVJ-?@|#lvtAh&2&E(_hu3f5!O0! z(M~XuEf~y-9-Q-(t;kK+LpRF?gdUL+WB+9NpV2g;n(V7Iohmf)8H0VO+|d*em6Spt z-#pM$_UEQ;hA5$C~3GpyrJDfi%@ zyI}G>ELR1YBw@fgs60Y<|%Jh+Zh+(&zb0n-{nn|U!djI^unaa`u&Aj-~^l+2fV zl?~$Q4O7jRA;K)UBSZ2^UnfS7FJn1q?mI_C$djM<#h%#dHg&Lcx)m2#OL^{6p)mww z1xkRB0zvQ4`sl`ZA`%$@qspkV?#g)~Ci2xXhBYt#Mgt53)AEwe)7&H=8TXT88_;ub zy(Lh~Z>4Bk<(`6FX|9sZwFsAd8O0xVNLPf5lPSPezXDk190itv1Rcad-1bi~vH6aLr^RJ5E<9uNp zsCv{nTB|jY_VaB6EiBx)cPzc>9;K^Dl_-cXK}fr7EYU2x&8;g)6B!CW0vXERWDVM{ z7DArt>y{}Y+&dzKyFjb_*ze`#*CeIa#`5@px^{ED<17h9cWu}(RKV0x2ViNj|DE=1 zte{4^P3VEcU#MXtkYZUY{mk77IFNmU3pdR$SA3;uNUy(;}?b`r@rft zlJJl|=dko~+eWqKY?ljs(83^EzWeKIj99;MV?u38j|_G}N`)x)l_I8c3Mxx5ERUf8 z{68&#JUU>^_8_ohaB9Z(!=EsXp&_HLTa{HB{dt58iVo0B+^$$T9;0#fRdwx|l9dGn z4xhD?fZy1XI!;s3U9ON-)^M}X0o*F;{x>Kh3^jxhf?KM zZYnMp^Z3=WGpA24<~fichH^HE98LvOF<-rHo3r~k%3 z{`A7=esJO9inZed`i&x)nD}XmAtXT~L0$MlZ0FnK*a`}uGi`-CbG7jjYl2KK{N~WT z%imo)y+-XRe6Oj^f{1K#HG7f&ycX$MrfPO;2vVJW?^iZf{G-J0X^G!gtVRpSzRw@~ z^}xf%p3o+{-C|f+K(pc#U$0lr2Kro5&cpKq2I^-Dv>~l{VuzKn?lg2`iudm08P2}f z?lzIB)c2YG*NAd3k}LwCba)jphMTIAisGjPzP$^urG1n0eaT2O5ZVa=fz~~=WIdp1 z%Ci=QL9~8(QV-6GJvtw?O^R@-7CJlzUT3ymL1tNAPxZU&fJ*FHV`&2}3zH3aco>If z&)z)#)Jg{u-Rr+9G8(ie<>7yo$RLeWt+=pA0Ul4|$D}Jv4Bpro`XYl`o+3k71ItU4 z*F(&fH%uFP78j7EGWUV0{sutV2sQ$qW5pA;*Bl_(9WVSs37F9&sT}5vJ$PjvVS+li zE;0FCaGI>C>+({NR>aSu>8wR1dsi%PdF+>X*^Ds9bSiDh#!Iq?xL$y zS}%^FX5(Hv<+n=W0as_B=m`V&tF8dRSMg(q9;1ebnvr7PXMX*Z4*E+mlsMuoSD+#2 zJbu@8!mW~+&ra~o_M_nWMk(i^c_LpsEXg52s1zu_F~n`RbhDkP`WdP!ba=OT7m6XC z*>%)5?{J`TvqWmO+-?kg#ZlqcGNJOY3q)HfY8QS4e~iu6KR;qTr#Ncksk_K8SId5I z+T45e6$w}jZgQa2yqoKrc1W8CkS`W5JC1CJ5T}`n);X?T-@XNBP<>=448TMw(S1Zz z;g2G^Gjcrb*BGbaWnz3?u-_5V`eW?#c432_0NLye1aa2X-k_^hjGb?(gLB>_PThT| ztz)$Zzy?S|ngftW>0ThA2bVJgK*6_96Q2IrNjOzAvo!4|Q(w;(F>^TnjEKs^YeA!5 zfeSMAHZ-`c*Y%G$9{d`f;y?T%#ivF?;cx?7w3RWpy*{T+cQ$?VOLVHstEZ4}zJgN@ z+81L6g*#4;nXv7j(g!|s(H;t}g6aze;Jv+y{2GIgrS(=uKa>NsfB3eK=^FC=_TZtg zoTt-DyqY5mxE$O0WfGf7^s(c#WB-c?3LN$jZI*yk-?qN`vq7oK`?|0S>U~@yzHzTc zb+Xgt0ok6=rn!C~^T5UY+|_x~LALwdz0-0>+R7F67rcy>Vh%U;VngYW3+8dXv-!1p zq1iDU(ImBR;rZH?PLaRX?DXJX5{d4 zH^3JrcwMC;eBHoN%gmwnVDiv^*y-m4YobGr*DAA*HpCbvYrk9wZmM2WM3;nmKE{LB zFaZ6^h`N&%pk7RhIWN%C_0Dj@x+1flhVmdqJ0`mFTtN!c@}CqIA5Bqt>=?`fG98=Z zZ!K~@{EmFgV{GhfYuePv=2lMTu)b6l4a9aG?#_h-0)Y6E=DOEnzX5>ok!RF2Wt5a6 zfaV(4TaNk6g*pR8TU%Gxfn1&Twt+(A=&R(#02_LtO1G|z#3-#1?8$d^7O?RMr2GLl z#idT$(znvv2b`ZLQRH^sx%C%u7LM0G^nXtZ3a0AUIT;Xs%~nBTwf3ZR_Rtj4 zXmfAkT6{*4IxQ@0+w}uhT~c4eisxFHeXEMJUe28+;9%BQa{lx4>zPWUt^xUd0iH#F zn(@J7Q81-j`rJ{dde`Gs|AiKp_eq}K_xdikpDvq3NGV9rR;{)Nwve~(^)$Iu@8$6J z6+d%)*E;g3hZ)R9A8JF+nhu0ZqG9c9^*(E=CYOjS&2E1|Nf$VtR6z9T1`%t>$HFri z0o7p+D`k+*0qIPx`@sB{FMiT4@G-JacTG8+#e&8gRMa?8=Lneyokl#HEP_b#@fSR@@ECVXbkmikzd=Oiqcc@M!F4@&!Pn|)f(^e-A|1_g!eYGG zrL*6{;C1e7#7G=D?Z&W7?^fBJl$`9~&^gP53br8f`o~qUGXunK`ECcIR&jb$KJp2& z%=dc5O)HC<}L{ct;W)xA@6@RTqZGf+s zk(SnaaUH#W4VIv&u+Zw=U3zdv1+!f&Whzn9T21D4LW@%DYY%?+PU~g{m6(zf0t3By z&8SKhqmF?phI~e>)sFFT-E{wGKcX)YnjcC+%2zIXi1#E6GOqzTI}uT|uS{Hrlj@4O zMfmODMWMvU6u78~gv7t6w#Uf2k30l!*cgP;u3EfI9J?LhX~Gm?c`01U;y%DFX)-bI zOX~ctwtxs6bD93W&<5J`AC$zx^`10uWy)WRdox7EU{B(?xsCZKH-XC;^73^-&k4Vt zII_0eH$Bt0;st)HI3t$jeV=PxQVtv+5jb3q#&mE(=L`6q7KUGJ6ySsqUBrBTgZtcC z*y#%ixSuJ_Bz${R_i$&S_pXZV4N}OY2uSAV->r7IvU2%Fr@<75wx6(%o`vSMBgHB!RWlMapRflFl z%D#`njLjsavU^V7esG=VDiwa}4>z!vO*dgQ1?ZS7C##miMa4lSjrgat^S1grppCZ6 zC=csqef*VoKv~?NpJCMLBOL|0%MpB-^zqa$iQ9c%R|2b5e|@NPzC8{@VGexuzNSM} zv=b5&Yv_HPu2RaHy+$0^OPV?@`sIrb7e@n)`P~XIU{JuU?OMf+N2-@<`5n-0=p{-t zSm3y{*eGkU|K0e>+(1^q=t((EXQSLLaDMqlMHE*~{(6- zvmV<+<*{F_fkpZEV{AC*?feVyRwQJJwavz+-#TE771$ZzcoW1W9U-m6n;|};bfC30h7Pj7jsF{a-pCNC*WI~cR_QfaH&l(R2hCM&4ffS% z*_m~e?^I3NVLVZIDD6!RN(rr`-YC-vcyrmd@)>BU;&%}AY`Ka|%i&|k$}2V|_V$`i z)5~RO6XZF_#>rSySrIypwY}!o`27xdgg&&tzdS$t~Nj)>ZK z{t;21<`rvjefLd;@~QvB6t!CAt4(SQ-I<(-l$g!Oc!P(bwsNrQn<~VeL|P%CF5yDo zMaA|bq0ZM^Rkxp(Dz5!L&O?IB!&)RvR$47@JVw2MrIh-0utQdwhgPAbn@c}mTp9P4 zi<*GTs!XR9x9s^hj8kfDw#t2Z_uQ=xb7h%rO%?Esp~y|S3?3)%Nka^_LIy_alC_J= zjM>Ap-tlH%<^4XI#Ie@`G+!s9q%g0i^oqrLczVeB7~l z8zx&P=-Qg8oUqtdgu;6@hhP{@u%X_M=`klUjFm0h!HwW-(Q@cIAFWZU=Vjf*ilnyqrL#N&QG|td(0KQhv472y#giy8uFry)^r=kM5C7JHt_gnbARVmN> z`^U^Sl&hd*S{+AY&*J@hdYf=B{du;tp-JHd*%u2wvC*5c4sT2xtB^KXyR_yWV?2rs z5?in7hf~Gid7BzIhS{EX%-psS;)r%wG}OTH_MHW>jxeK}y`7i@L!ayM&hd`ecl0YP zT{nA+Lx(h?9$QYuYcE-ETiXVh>DJGAjhSM6Om~Pkqd(3^L*{{lEl)r;F8$@uHPMoO z_EauJPp_jEB@bF-swjdkgAZ>9ko;Z}n@QcwhhM1dZ4GK5>QjHLLw{xbysaA5I1H&D zgwn%L#P`7pnZQqd=6xLN6Z{ty>>`>^=Ja`Za9Op6-IOH{e1<)2 zekSP3dRbCZGPrpPu%546NyIQx<4CK!NLLY#5)E8xljI>-yS|_tw>9G3h1sk@OK|Hm zq?caK4#yMip8+A$qsAI_Yv$;^bm-}}$Y~7?x_K!CfuaDKnZ$96$K3yLMSOZ{>*tHD z-nYx8*B$lw(_6*NEQA{;5|gJ+yjT@dn^Mx$-LaMgLR9F_!U%u7>+xdMts7dZS~Qmi zUfEowB96I_BH{HLTeHN4na;`dVLT5a-rz2?-`u5bhs_==Pod*SI)H(FExXYNPY-XV zv5Q6Yp4wtl{$lO$ol}YR8E<#fUu&+;w%Z8!b=%0fWbF!F5Mp1xoqqBn)8{^6Hd#fa zQswPYPs>aCQ0qKO#qVP7$6i(1jbe8Q;ciD|?*uJkw@vOj-`)iMxO+C!dPs5ota#y@ zG#`m1A$dV6UbQ5udI5-+nF^Tzm*f459BRV~mDehk32xo5P`(0Ea!DSeDoLfNDj)P# z{V#$nDpXtciqeG!G`1UCrV&T{upSKrqU~t!G~%)9-ky;Da=s@UeB8+=HE4BH!*IOe z5_~$E-N7Kr&vnV8rk3xTo3bFLR6+)T4#g{df zAmrtX7nLQP3zgyNv8T3AN{r7VkR1&Rn^P_dQMQ&y#np}>*o99UeZEmD)q5D%@!nD) zi$X-& zkF4KbpIVFMmgk@ccPsvzSiF>C-aDD3Xwka;uA-1LJ~@lelxW$?UNuDla@TVPq&~yV zy$Z?td@oIhTpYN#%5|Nu>-dSk!IZhI#z2qDHU8ar39$;1u7E?s>>KyJS&g4=I9$1j z+yU3A9y(hsV~DOJTrIZBP*k1U+Gi7f)vdqGYWe)OZg;b$7hz32dvkLgT)EXNxHLbT>w)jr&fz~AH&a#0>w zc=vgDmbRV8?4x~yIFs34p$^`a|4Xy?Cb_#kXHi2sF&Erf@Z;!=G=$s zz0bwk?FR>rXGvD>j^sWK5G~$CK|!pf5yPxbmM-4hM+NPJr=!M1-}xIugDV0nf{uGi zMK}qMiVS4v2uR{3!;Ow33A)0@S87EofseR4=h1HR;NST!Q&IuuLzBOAHaIO-s=TkR zh{10^t55Ds9qWj?+z&xSakA4|Do>1wTs z@%gD;k2v`3xA;s%-oT?L+-FGrFGuxmskxhf53$nt9(|3tbqHvw9Cm1>s<)axt|vyU zO^sIEBg?n2GlN-wh^y&D(L;TJa_gVJPAoN8Z;$KJ3cT=#&t9HxR{C$0hSLbfcV)ED zH4Rs-;25Q3tsNf)Ak;j5WUL_H``)~9R+<&&&ifVtRUu*EVfwVTTujGVO)-u41Jfor zmdv*DB%O4v^G?=a?Mtx;Y>(5dx9o5fJsX#o2oXnWIHkm~*${q7(cF(!W zrODREy{mXtI;Xzw#x?;v*L34ClSLGlJcGbbNmP2!QmiAePPz)UxTA#j>Qd6In5Rp! z?bp3o;RZJLQ~M8192MZe86K41at8kMe!K4Owrg?8t7h-KH8BZzbBu~x+wHauQ$W&n z_uGA+3FBti=Qhjv_;cK>-PbCeOi-Cv`n`Sa9WR&o!Mc}JS=6-neYn&Movs6~o0=?P zVFn7BKE-ma1XGWBdQj0S9jO9oV4Sp8m0pKv>3!T$s63tXN#GT!m+&W%B)!ID7LP%N zNJpeam@rFNSp38DKTK4NKKxsz1s-8dWITQ4_cqEW7Yjwmo|W!1o_=&_-E^|349~lH zy6MoKn@TTU9uG&UgPKFr9E7*fWghIB85lAeX0_7v9v{p&l}&#CetYg7iiEt3=Wm3cJ;=f@3Q7Dvkx4uOm znafF|ePLEL)DiX!82W@_+5PTE1CB=(9@O9I@SW8(4(CgDhF|ZXb(ML!?cJ0#)HL?q z6zxTBrXHExO#J%Kx?a36ersNW0*UE@)#if-1SSZsbUvet;6)c<0kWck!+yDjV@(0_ zq^OrIk2uL_SJ+BhAVtML_Z=?o8?XQk$LQ0Ei)DY`^97Tru;32^eeHR2U$X=lJWwGw zHzvDP?ma*1S7 zbMZmB?3Bo#z_o6nBn)tRk1|04(Y=`(fmS{TUEUph5g7Nq`24YOJcU5^v?jj6qMruc zXTD-VcSL-NBt7Vtea8}MG2iK8y5Or9%Z$TiMs+AHa1keTIsai zLtDt%yD&8DRac<2Gok^gu7G&exYZoDA7nDzYTK#U-Y#m6n+G-AXs)?2lUO>y zAD`-v!nr#RRT#)wmwE=6PrD8+F+N3!CBG7HTH%e&v8#U2$&YIM zbT3Oa9#5MxdEfM+_0hU5#U)ieTn88p{B%256dO|vyQ`V*d(w6HFlA-f{)iKsO5lN~DMV~$0vTvP(`*{F-g|#a4 zV3uUf>W3HGZ~W#kRgtQ#TMydK4Z#5UonJ~^&_oi-y)}#R8969->-rtv1XuQHkITFY zaE4_5FwsSWkt%}HZL;Q;Teag+DF({>igVI2wDv{TpOslIF6`R|gVm=lzHk}{L%{5@ zN>xXzWB>8eTOU(oBs}ra+lS4;1Xc0fsnZezF&AA)NiRsJ3+aBr;OQtx9;r_|vaP{C zPZAr{6F7tvl9QTh?CjVnoRX_z8D~@b(ZSmpeOrY8utoZ`f?xw`xe4^>r1m?-8?fpR zl`jnY6B6;chja4s7-9!datzws$+A3mqL@c|@pP)sLNMt*??@4}bvb-_4Ejz9NX*47 zAeT}6c=#fW0j-cEp7dLHaW`&=iKB}!mygZoBOFF~NE<-_0T=uX#$OS3p@yB1@)v)U zL&wO;h)mS&+GL=X^X2VJ}F*1@Az zYcu_z*nGH4`&Vms>aqSym!rRk#gYLJkk-Hu$Dl!sq>I1_3WC4Tqgn#}^MYUY;1;Br7lXw;Cy_;XNM_%Lx1OC&|0WS=n}a!5~F z>Y}F1w;twyLXR7}M1v$#JZ6*rQB)QV=`Rqm>?rbgDxaBqF#A+57}S+<n(`^qv_STSl+Bkp8`aR76)%N#mlZ^OWh2 znJR-KV{EnIxvK!$Emg%eYtB|d&Ni?Gala}3rw!}}+}vtc-(9$Pou|8yl0 zMhq{lMz@p(@J6Cut^<^L*cdGB90=+fK1t2($*|y+62cQYL#0Xup9`APCH2ZI=64%)OKJc zaBx`8&cXNcW!me5!$S_luL0iqxw(0HdE0NLrKP>Rye!{Zh7{+5+C?}R^LsXJTH;gV zf7>is+rHr77#SV3wzYk+5|CeysJBzM{Z_%oM%&Ude_lsjec8G9@RIbgEP5jk1bR_5 zVWeNriulIvIh1W_dPm33-16>WCoAsN;Swezd zgWdE`9;)yijE(r9pK@6;?$nVi!XP?y;*?zemNWJA|7ij0_^U!AlsOE(C<9eO71C`# z&9ML(&QdNjF}6iGHC7R9-h(P=zS0Pab8~-r>{G%mi%AavfaV>R6DM2UTwO`xafMes zhVK(G3>7YRP^Rs%O8Q+jaKWmte+ zR}I7RLhuaYC)*zKh;+rs$V;~6x1;M(Tt(u;F_{zcb*Vt`LLAs^X~5Fw_)$9iI0d@)%wTPMUBL~DOl#n#t9MK zs0@Lr3&YUbmu<#cP5GrVSy-UOG=JxkE=EKgf!|@flim47X9~I5FPV8KR{bdKsP$wB zy-BdKuBbOcJIHt&y03Uv_S8h)O~p-F`73?U(8Njd(F-8?(`@qNyp*lb>XWNYmep5T zgFJ}71EJ*bSrgS{;uEM}N(d4nnW=cD?P&6uGOU5!w9uB2tz3YN5L6u>0T{zYw_(8x zw5UL=0)4dI`!8R$rHNh4Q^K9eFt(Dv5^UtWJj8RLd%;xrUhwF0aq8Q*x&8gX!{R3- z+LSNQF^8WmrQG+-aCfa}QPZK7OZ4d(X^~aaF124l5NwM=4}B!6&unj&rD;-Uf|g=l zDnHu149LEF&Xc&dC{sS<-}pE?V*~HWqU<$;*ozTL@Ca!spCO%NY@6-6PnF;XAksvD|FIj+l++?0l)&3LfVvbQB+&A^2!7^;t09y<) zTvLS54U46hA|_9AczhdM)u(BI`?XrwA3W4Qc87^8tZOxHnG=DHn$J-#m4D?S4s2V^ zG-i<}nn$XB&4|FnUy9HRwM?A6&nLPX&Cqx^S0Wg&m@#WmMG zZ6_e=I;B-*TV`txh|hn#9)J94^-~aF>%TQqZfIy^0-<$#yucV}icHR~+~Ao`?CVFG z>g@Wdq>6beVCkKh#Dq9DA^x+&ZMI42`-FhLIax3Pk~SMw4zTIP!&bl-F{CTC4Tf%= z=8Mh87cla7*mOL+B=MQ87HYm$$iS59B?n33SCSw1b)!H8=(yH%qaa;vgtsC*S*z#x z2coAUqVNJCf{x_rM!L6(Z(FrXyW6GV@@H)0Xb-dDA$(TNu8i5|NTA$ZU%nWbk|-)g z7?`<<#$g#WbyhC@;MJaOIJGp;vtEhg;0pwH7;sRoUe;P= zwRp(~pUxYOr3b*`(#1F{n$q?zTW+V5Cq};F2=>jpIyN_PdqO)tx;zD~7;3%;uZJ^= zv}$>~$L6bwoL@Nk@#Sqp%DSp{RQ1ok$YMIZiD#-5Px?Qe-ZG%At_c?n&|(FOQ{0Ms zf#On%6nA&0xI2UvcXtBC-QC^Y-Q9u{oSXMM=iI+Z_RijG&CD}1>zSF}v=~GH8EQGc zA2sW*-=*L_FcJ!T%84mXhF_T$_DA%tudjdl$@@(=H(a~N*&8^Q1j=%~bZ>Uz`EIV#Rx=$~g&cSFmD6_{R=_>j=E%$@}uEHTXF zke^+QFE1^hz!{*6dSAIO!@YLtPg`Q39;&a8r6mu0#i>@Vi%UX~-c>XqmmY_oHO4Pq zYQC2PgVL@loZtMqf>N^>c`BsS1&b$sdRFgDR!wq?LDRJ|Pz}x+`JsT~-xanbwP9pt zGf6QG_)SfrTnmd;`#Vyb;}@H-OqwhLK7m#>`HxWUhnL4JnU2d$7G&=QfiiZR+xE&e zH}U5f(nv|?@gSZH*>{s}C=x&t7Qd&B;FHYKm+Lm>ipy~y?qS$a%tuSGhy8N6D{<5F zeS3XmXuK%CE2(<8t?(a|&G5dztgC_})@U>ZBiI42*W*z6kfp5nsd;*G;+0nSP>38> zcnYJeNzY%f_)uOoXexZNVhuU0Q}0%8*gJIEe!Jx(R2(Hly$ z=q_w4tv?9+*uCs+OV8fuwL`ABIyV#)PKg{KR-a{#60DP3Q*f+0GuWIa7Du_xSClnZ zkAg8s(pMUu6`^CVANI&?a)B=_1)9@q9_b^c=YeqnyS5(oBdP6iAb|aCQzpitoUe^y z2O*$@tCFsWWR-^V*v+@JZ(AY`%C!!rf!Zi#o+W~Km4*^zZX8R{sy2a z5ll@15Yv7!JpVMa_~jAG-PE?a*?F+@+(~!6$|iZx6s*^3*0opG%i%whL73i;>LKj!^`&ojLoYevvmJ)l$=3SU+q=>o zPvDkfd7Wj3hJCz+K&N+~^Vf^A(#upP<}O{$6m89v=iasBSxTi-lTId>L;TJvx8zbAzle4#V6xB6} z)0HaaH6!Fw(2B{Bbxom|eNRoz)=a-|69cenrdy-3k^9M1aqMCu#B)K;8Ccp_zQik7 z1kYx9o^A?Z#Q)p!FP&(;X^)g;3q_W^-R^4q^Zk1Cq>lF5gH!VSdx^xxjx6wiNKYyl7~M!J(?k zyq7Q;^uG0i$>8@dWa6;%@}PV$pWD~FyW%oYo8+-#Oix`g)W5>(?gl4ZC>?T#SDM`Z z-l@DAyxO?eVNgMpR>Lk24`99*eR4;wn-P)iS z$uo`W@$D+fTfq=kl^o`x`HT}Oi#EseYGsE;{Z8)S1ej>IChFTw!8@dQUp4cm8lQTb z_q5zd^JS`hr%syzIBZ_O)91YEHe^dne1GkC7MQWLQIHiy$#qna{&8nlwI4hsM=9TW zy#jo@skw=f`)Rm=x%CeG!$d3wLt38iv-Q_&Qf)Y#_oK$$`x7}YwOZo5DjUgrL=%p*$VWqGOAVWl6^S=aV0MQZ=#5hyQDav#4dIhI%{ z|4hz38K6YN|1dTG)94JYhfl_RD|=mg!pAk2rps?4i|72=$}>uC>D}icA^sh5$pg2e zgX}kL**E^)ejQv(qPu%<1$ZMp@YQ!P^9<+>t+#8d$)SEo^4*bq_qa@pE$=Cd4>XDF zJly`vbST)|GEfSG?Q=T-iGRwR;@v?{v>7CE8*ImmvLxOA;Ft0i4^FE)_=^BdjeP=i z4P4+}@RT}vihh{d=^sxt#km?>d)@QF^8DIJl(iE@>b{bi>f#Gv{U!lQ0byJE3|0^I3>5c#D z@R~9dB{1j=UT9Sh9zw?{T4_JNsl5@@nVQN^h)b!B&XF!yLFKX?w4x9bE3+GR{eL%f{ zwql5ozQJ-G-u;Qhx%SN(=pxedstk=>$TPadb)qNE&j+y{-%GBuU3#^+S96!Qz0E_m z%LL%U(4oIi>=H4$bm*-4&fN?Y9c_sp!;)}w_k7jrTmU$OSMD}u*(s_Vz&S=hR+Eu0 zP78hpxXPDB?1OF|zk9z`s>5BrR9UFL9?c;hl0RZ3e>-`2lT>69$x$^nuh@>SUn*q0n*PopDe6Y}~2Z+a>tA?HhZ?V2CjbKLgu| zzviY*<^7+g@4#+zJC?NlJ4cn|UAb119y(MoewHo$&0<;l{m}tSP^Q=Hl_G=S%UP`~ zT7%STb{960Mo-nZn!ls89{^zZ8jwD(pE3-ZH-qE6L9AdV7mliezkV^DCeMkL4OEOn(#b*<+)L_ z9cL)Ndw}zNf8lt$qq5+A-}Sn1-}2||@0NNB$;5ksMAZhFODbG9QvILBghIMvUc^&a zPTTs&{>;C`VjWcsa>OeP#>x&ZKLix?Gg?7q?nZ}&n~-K(jpu};p>b2yH4Xhu4JFNs zJDyU8(Qs*^vAiKaP>Crjg<(xl(vtEzPm@#*1|!2XS&)&1O(Rwi{Cm(dD!DHf&c=3M zYi1koRXqcBd-CBt;DxVX^96XWpYCb93RnLRI?DZb$B!tvkWC@i?4~B#Kuj;Xs)`z^ zQlRnng(GjAUD+wjPE!R)=ghdXCBgHF+iB~>^!2xl6S&4a7HH13Bul1U- zR}N^#SsfbFiWou2dfLW5J_eonsOFB238w%_^L_n|=Ssc}ZRP91g^`2_puq^79Wzr= zV`c9zQkT2eMvwpprAU(b`@q*wX+#J2xUUuZ1IjVlIzp_~swx_YCqCjj_d~`KQRl0I zlyU2N5>gDAcBa7>gxuT-N*~bFQdrrr=={D=|0%NvMgu+yojN*xUX3UYbNtvk-r3{u8vFR!2kS29NvuHrUI@d+W%fvR{x_ z0hB<|(@`9z_GUDz2$*Ae(0ZxWKiyJ5a32QWk=((sjN@Y#-0K2hkvCf)LZs!W178)1 zqxtsdVg*(kkv}^Gwj2sMP4bn7o%*_flYplYrxtU{bsGO`Nw9r$G3#E`_JQoeERKV;lT%E%tZdZEcwod zx%plyY97p&NInNuwPYdA^S502^EE?z(FMPlHyRVU$H{%ZYp2h5F0X70);erk0cCiF zLJjYQ3$}X8UNS3nZdtF#?AFWGhFwUSlO1ncZ&@Sj)zy%cy5vG3G=tTO@%F*IcISUA zb4nYTAUL@pPooo{?-l!lEa%?-=i+=# zUfx`GvwpgR=xC|xz76V~+`V_0>>cy`(N{ahV;%1>o_&ArlRbdJbc*JV>$@A}j$fq? zTvShPJ>~3gw9VR^1iinuC9YnFL$D7L6I$EXDCpT8+{f2<+r7@hFm9n1sj-T)Q>C{hRw3E zgB@(tANJEBSQruWmk1fywRv=S;^l2g8d2+38pwJvvuI`K=IZL|^lg$q>(B!LrI2N# z^M6DakwOArYHc?yj({hpW42^D%>C?hnmK8`XB933giR+ zH4|c0+I_h;(Y!}kH2ySdwu>hC2X|7cat>k~7nzkRIl7Gg8BCp!ph>*I3|5K|COEpF z71Yi2XH7TBgcB_?M#u&9KhzdWCt#6ij!TB|#+kf}-`DzI7;Y%i_Px&mF^Q zJ!^jp-^1EA#&OukIe2NYo~iIpZ>fJTPz0$FiJLQ%ZdMsTt~aHZ9)hcD8{VhjyrY}A zTV5~6`z*63_Sy_Y3s2 zw2fn>!@p$b#W-wH6;Vn3py zh^95tZZFv<;wtNx_Q^re*f&hT)aE9uMZn?x=Bk$z$trAO+JfU!N-LX{G z)(UPkD&FfIs@KlQ8i8v)Vc<|^BHfRdZUJbUeYHl~Q!YbD_6GsGZ>(Qo68-mxphbPS z$92r)8wPoR7;lr&{mP$&iPVVj08g*kjpvn_ut>GoyPpZ9WnT?Ws{I!`(aH_X6nXvX zI-@sO=*urdy#Kz8?^V{(_6c2G0ecGb_?k~;#5)RZ^EbL~-tWbJ*s-KEotR_{%Tu79 zv015g9(3TIK`v+i+t_}ACa?X0RNP432z(CRB`jRbj3*Nog*cA_4&FGwAan~e5Nr*FK435?*d;UTD*`NRp@WrIKKj7hD}U!cRb$i+X*p? z&s_KvM^sTQzcY9(7s)XoJR@V7qqf`cXK8JtZZ2!+BLpZk-fw!xNWUW(QdHpmrPYVU zC9l`wsEYgPJM(8;;;lKW9H#53NjKf?IGxjS+R9$Y2@R!XrzhB}cCMvnSokUMj<4La z(e9!5O9TL>rw8L{sZJO%)zKb_jm8gA-a`Z_9~&kFLtKMaMFayK@HZe8$^QywD}(Q) z=3jd9mPIC|KjW?*+fQN`(<-v-MLM9ilAxiCqx`Yq_K%~V-cRXiqZfHf| zt#BW2Cg7`5-O>G1w@^i^ei_~b=112Hd|N6Ys=4F_NErb_y3`JNe0M#6d!B2DU6)?J zmS0m`=%7<}&5*|sSGRZA?!#HEnJbtTGmI?d)1cM+t$~byV46B9f#q^7?)e7|(Dh(& zlM;x4<%nV$Zmmfd9VU&!a?a@bxC5Fl7Aruo(xlVK^u8N95NfpZyxts;1%mmrQl7U< z6u)hdl9q;yT5u3}ycJWmEoAvTLRO?@PwRQS9^Fs%IBCX-^;~IB4*Cz)dj==IxPwPR zJ zskTS$2!R4Q0sx&3hXzk+Nb@KS=VOUfu3RFb&klPC`pD=cKF=ND=8752U3n+rYJOD{ zAQRi+DggTXieq)dj{32a`p+6|W&<%*P%Btlo>92Z}f?$3FrmMI~S$qHJT zGUa4(x)tOK-j2IWvaL;)V+=R(PDpz&eGh`J2|e(D+ohX!yV8u~s8_p1R{J6MGE+uQ z`Zh}C{>z#Y_vo(&=v7Wha;#tO_QiAtCy6aK1lAfGQstRccPA1dq??j~8}7aXJJs{r z9_}j1s&>a62J(N74JZYPnwRR$;_msKcc%B_6EQUtEud%<58;N=_5d34{9|+qKIb?dxz(YuIb% zpK9V&=6%0x@^zhg6!+>4`LEXwfPFRLE__e9d`V9(MXdfFl1dzFKR<-Vu`r)4n?(BO z@(fQ7(aqqG9!OW5KYzce0?yY2s}iWWErDY4=V1ZZ87a%H&wu_QbH9Q?eHoae0|Kk& zB;1}f0{Wk0fZq2*W1aj~K)x1b8@JIzx;`)oe`1QZ#y#F}XN}8pV)V|JosfP&yc>d=G!S6ZiFrK5m|#8 zz}l_${VM)?P?FH4IRcBpo(Bfa4B_qIB+1cKn^n6O6RYP7jOZ6-spyQA#WLSj;!*jG z4sYk<7M^f*SwcQ{vq!l&CDMqr6?yt38~v;3mL`LVnk?nnc!72ANd9Pact1)S2uJav z*>jCCUS*b6ljX|GzOpZgAVln^)TGp-;mjhy`E(}NGuQV%?n<)wGl*C>lAoo?0WE7~ zw#l_r2q=W>a=Md|k7fQYXt)yH$poq|zX-V}hcOiT{LIP8@K~7Y&)aae(X6Yl8|u0| zppOuJ;cIOrv&^nCln5i3$gD5)2>`!g|2Tlpo_Mm*P6!aDia$x+`rb6`Lb7XT0mHW&Jio2BECb`S!cMqXms@uE{9H)%khNpvYJ5@>0; zL@RR7&AY=u7bT6GJdq$*jw6V&@P6XWCr9J!Tg$A0|1_(Kcl68O4Aa^Mo+aMQR!5_e zwpeC4Tium=w(FOet951eIQ7Zr(dh|~yCgB1Nzw+6M$Awu)xVS#0~s^{j$c5njy*GL z*S0URAU&G+ksZ>t;qlR8-PhVdO)d1j19MdT#au-YuG2u}X}gl@|KkGmrD!*vLt^8f zpS%#fnx7-H1l%Fr<3hgg((44Wa{ByFqc77$Gz3#Vc}KgL{A?JDULUc@hgmr1m9RIw zL{bV-FTMkUc(9E2*MrewQKme(1Qp>*thw zFU=)$vSmlz=b=!-A|vk^lb~uAPnHikoK<5!J)r_JZha$oP=dhLTR+Su2qrS}_}Dt` zYrk+zs$h;+^t1TL%j`gZbX|mRw1V|6R zyGz+{2u5AUK$4k=%5d6#(RE0;OAgr1LzeE>1>=^i{MWx3_b?uooqp2UL= zhUBr4mh~|qU!mKl0}?R0*!?kZ%Q>mBb<S(Ugu)kpT_W4qUUfGw={XJOYh! zHTT@BpJu0bR85SJXnuvQ7e{|O1E3e!tWY%>C9XneV+cOtgN2&n6VkZzCY$IJOVlfs z%&&(6J$)n}6`OfIUN}q&rnL9F><#&G&D1cfMVS*^}hFlrSqcTUIJhV|XzleFWgBBQxv@pf<`fkgFxjUR^y0#_wiP?t9s~ zQsv^HK-(w4VI`=BwHD>7QtA6Qlp{mO9P!-8wnz0p9po^A-OA!DTD(@JpmJmAE@u8r z=W9HEoj=@kZ*q6LnCg_Bl}mT6V4VJ)+1~rUXkun^`C=t5{Y?))0z<4PnAlK+j>*N7 z4DjI>ZOSiNx>+Z36=pbk9M}U4zo~?AsxPG2&@?I@P<_5_Za%xU(ekK|STY*RDO5mv ze5Ky)x$L5&3~%SyfEvqqEY#%SUN75)4=uCdW@$mc^HNzL7N=BHS*gLsY+K9pb|6wZ zsIGMT^k1B##@E^+bcN1md2QFpVda&h(h(PEXQk7zpeW{)WqsDD9BdlZauwCC+s&JWwspido< z&MIvSy#AW!S??Mzqm4`@9$E}k8jOld?kc}IEx;9by=kpd{4Fos4cfV62!SD3;i?TA z7>PdC364 zzWF>Q(Ra^}>d!6CZm#yeUl{WN$S4`^7TSxRVr4NzAiH+MreQID_SvbaBR!K0tc_$e zjbxuXxrNB`v5n6z2(L4K2EYp23#)EZ4TdI2v6stfGw))-`UT`YD^+t0v8XKVTU?we zb^o-WER$5Z=DH)>;Z7WR873j2lu_Ry-M|X(@5W*H#7AsRw65#@p*hyz0;;`8!K?#N zEda?e5aBo!uw)Crk4QCJc145mpv8ly8!mw|ihOOcGEYmIj2My>r3=bd$WV9x^p>je zV$(vSHdXp#^ruBR43Qio=0MdFatt9=_j`wTSn@yfGQ9&sYil*4g+Acg$PVItf`MlB z_$Kvu_j#4uFKa8q-KO(v>lCpmN(5M5xp{ecuA;`X#N;ZqTI~t9d1q(NfM1ip9&N1; zyPg&%RI9x>CCAoJwc61DV5+r(fX@{g^=Gd1Pai(5y7UlQ)%7=mB?ys#0tZU#Cy@f{ zJ}mk|aDe2BOk|`I>O^|h?~=|)Q-Do_L*xp|g4^`R=cZAv336c<3W9XHal3x;-yCT} zCy`AvZgS<9@V}wtI?dmt%X2ZIO?sjS#hvOEo#EQcdIB~psg=rDLDSgFW87Q*GGpeSFfCSdfpJ^CM^CeykJ}9`Q2uF7uu$9z9!M4As*!p$2v?AwITa zUub+YI@v)h@JW0*XfINKFcRKCkN+B?cA#%;!*aR+4vdE*>6fKQD-?! z)3{dQJWEo$(aY8RdCKBS z13*MHP|G%V>H;8hm+ss5HboSe?p0Qh;?&|4*Ua0tCijT5_7z*Q`5ENyHcP;P3UJBaX*v6su#u(m>5hfr6XCXNIOj)C|Bg{NS;b=4 zC``QovE^obrQ))SBD4v#3Sc?!?(VTX?Pi4=)3yh$RTx0HSRqmO7r8nzVFj}u4v`Mj z*;DTBrlMqEYI8g%Y^>A?CVCy|&ztMU0GtX@~Nz&l%(x-;AHYKhyEb)4*Wy9YS?1LaczHiSb+K8=u(1(|1alzB@e(q-l!3f2ALgG5DzgJxMVs z;YqmiACSrNFmNXdg%K6H5Z^dk(fqp&Sie+u4W@-kYv(Z0j@8yxF=HVXW1GpI0)2PZ zwgZBz0c7zby+5r;h1!8PVAa6DM=(wsY@5IS67fes%xI!`ZncK;ZQM(bQZXZc-90qZ z*LbEUhInyyM6gF#GHscFj5B$2vP0oTC;?!_)KkvcW-U}HI*LDyNKo3aa5u7i6vvW9 z_G3$uG7UhtDQ*isj1)T&DZW+xxtvM#F-~$nVW#E-AmH%Ryho*K4OAr0!Cdc$oc!d| zjVvrW0yZyW-M)H1x^YNPllQ)f6#E1%5m zSRW24k{KwZW@-8On(NOsoo3dyZ)nOf#7mSk!}{YsDla^EeiS4TGGI~9QpSrmGdE|< zsHw$TLahc;m_GFruVHCGJP6FHC& z#g(FtnyVS;Br?k$TdHmq41XBDNhj!5qKE-(aoTP@b*+1B4AsrlJfWRi zAy221B7UW<;f)*rI`Pbr=ZD6|Wn|>G^lXYmKD+JY1PUPsJ0xzMD2p=!{Io@crRgw3 z>pV5qkNDJCHo3K_np#43Mc^oB*p<;hOXp{M2PW??jSN0~IH9%vR+|++-AGql@2{Z^ zoe@7i2acH5yu7RlXQ6Lr`Pb*R*SCvOFiro4alkc8>haNSb3HLs`fKk)`WYxpOMRa< zRW7IQctU;eGfP$(|eq1+`FaMfYEk8Es`g5{*17e9c0si7=E2mq#0$gRY45 z+@#TAwSz3`#bd@`T?hnCZD`-)k>_orJ0H%;vC1{3!#8a2o%{c2A369}l`uddRr^EH z77sZ#>i}TLBvnBQ;EwzuWQ(>tC8dp)u_53;^|Kq7pxfDDRj(AEeU)%~<2OHQe@G!P zyc5lMI9M;$c76YWbi7hgIW@LC&GfAdocR-|rKQpMcs82s{0l}@LuFWKY<$`3ZKN2A z#_c~EP1ZAvWEJbD3QtjZmw4yPua@sS7a2^#G=-ROT;ZS9ukMgF>MUEJ3X&K&UZBfh zY?K@1!>&jXr;(sR&=w&^Wb{= zk)iOF+g{3lWjvg-U)!}DKB5F(=n933Lh_E@rGV*+)A7o2R?q}Iz=}be(CYd8d6BDl z_Gwv~EP^}YVqm=upD>?MRi>Sp=)lvL$Nun5cGv7PPu*3CC}VxCgXPNB&0}f7ipFZ- zhrmIqjaSn*S}(%E@lMhTY;S{uFol$8ZAXsWx|{Y|B{%a zY@vZo;*nJ5`912T{axDqu3fW7>Uc-VciV;kLYt4z>K?mcV`%rx?1M~9%*>X{f9yhAyi^HcoG z+rYDovvZ>GuuoP&^B)1JDkOV&X&{gySIu#4a*U*@uHZ#_+9Bw-$TJwT3 z)tBFBsrt1z^U3mxW#y#Lgj(X0(=T$02{($kw8~VmM8;Hc0Wqnd4fDQ3s5~W&uiZxt zjz82XHd)1n6y)bGudX_*S-sDOcfj)Y-Sn-Lg_$k>S4eozvUX)F4i4s^J3vmXtAJ|a3iSpqUM zz6?fw&nGE1gamu>9vx~Fc>iv9Z9yrF#ZDtuf^W66XrQ%P&zqjhk=Tn7YPM@{XxJ@u zh{mifR4AqJfY2xjfTkBapcA;6n5?N^S>?ZC*sU~wqucKefr;NJYrGvxsPIo?*c%z9 zJQ&3(Dfe3FqZvSh=91Qm4_pth zBx`VdySoo4MCgKHD3vXly3e`_B6LKUFvBnoU;r`%EJoJ_h>El!u;ly-w`}`B$N9a46O9u5uKd;JfSTCUUajgFqStVNkLzPcN~N%u_1?InoSdcvG#9JkA$ zjg1j&@l*t6%&N}jJZ0o zXf-|~;d<*wPcX?xsI>D(wrGssOtOH7-7z!^Az5uyrChE(DZhQR=OOj#VG7MUn%ID` zSAV#KWwvT)ASUIZb#l&{DE$HOua4uK3l<>yCvA<6>_dft39=A|HBMgyCRD%-+5||g zsF~sYuilBF`swn+PZ)A^7NowRsiu%#0IbGaAT0ff z3i;|>1^U#0Y|+acNOdU#XeNh-yMft)R&=0Y=V%VwP zUkkY1(BrIsXf}(XbbY#8|6P3g0iYQ6(KsjpxdnT2)O=1ho>{QGSf% z)N(8gVTuSuDry?&;dcnESb;ruHvvp0rk@fMF{g)$AFOzS0s!Tx8ZF{~GQxE@JJ#24 z!20$Kb#7UpRUA)i_+q&O=e(SUVa90SwK&ax)WV|ov8ZYAd>TWnl@lJ$zJm?KY{Oy& z%4I)Abn<_zgH87Eg+C+!di>B?0^$^qekcW|e%BV+2!_$fK+N!5Nz& zLD!OXBTb$i3(vp%;i6YmhXn!O$p~T-wH_SMLXHRrn}FrxY;`+rGs#kDu}cc3ljBW~ z$+QA=eL$2)QV0kiirk9jTG0@iX{LrUg*yx{;$hc7$3^OAY|1) zVOr`|NxzB}Z|`+dLZ@zA+3t{)e4&TmZUH?Wf%EIx=|O#7oYdi4?;^~!Ddr-G(&Z7f zS|3xtSTo?rX!A6BBAwlEcfY{33B6y7WKWnWZLE~j;C-WF@({6I>wMeYnZEG)1)sa^ zJXZ{~5vP+KmjN|ddvDU|M{B+qi%9*gx)B)*BzJ=MVXwa!tDpTe_i=x9Fn{gcaD%mD z%_JN)QnroHvisNDN35!Vxd20_V1i++)ZCr8T?ytdhF|yIa=j?=B3NS%4-=(i4KZ$1D2$HA4N(SZYy4&9+l zEe02^yG{ zFgm%~Yu-ReSuQ@nT)W;7Zo2V9#IacA@v@M7XhPWDAO-oC0WU5)EV)-aYG4{zsAkw! ze@1n{%3li~A7h6FgaFV*=6)3qp8!}tCIbMl5vPE^xfJ&NjhvU^mhYpME?8%tW>0c z+wscYTWM`;;-@qG`n2@mPCWQCn1636(Rh%Bq`sl5p}OvLzC>L!3sKm7O25VD%JOWU z90Z?ErvgwYqFV!+z4xbl0&Hn^=W2&%;?jSLXj9;?>= zezu91GYRL{nyU>-60l~p4$MRq?|mdRpA^d?ob|GHG@D6l2j-cZ+fyjkcU6JMJrgA9 z>Zn%y4?h#NI;(ueTtuwc$ezZ-v(@9qak(z69K?6;4Ltf(SOIz|o@@$d!-Hh3nVOph zqnD7X0Z(JgUDaGEVokR2;67*Y*+0De2#AsR7+tw~t4f=&Xk2;D-$2>L!1|pniN?DT zS741uC;40_E-jYBWqz+k_0%{bJS^O-GHbrW@Oi{n6{YPz4X9n5jJV*NzSThg_T@Gm z&4wTNTBgBxzFr_tm1WSb2;AF=&Bcob_?73&UVQffSrZ%Y*xK^cEpJk8=_xTP94#G% zL#5*o`vBep9%8vZI&=fApkMNGjvqB zx4T}R!2qhh)t=24M5p_gPDLoCrGeD)6uF8wJ^%^|6}`~j3s>4N)Y51PDLM8xhojPtw&fvo8R!|SQA^|< zWFZ2vIe!Nj1h^8dy1or)`cF^gs#cyrlfS%PF+`0omHV^shdY2V^-?r zZf8BQ&|AR*f-fs}fx01rgy42GWaWGKD4h5619~xfkXh!NQD3cY3_f=lOZ~y5wc8WHu8k zEg?oRUAs$@u!pzLRWa@SE7_0$#N5eR>2O!D34HW%_P&k%6bwA!GJM)fjcUMIczZ<% zW|e<9dpS!ZkHvbHFCkR3yC~L`YOay4tt?}-8N7cR*0B|*OB_x7A=rJG3)MEc!d4to zWhT}f=P6-CI!5NQBd`!uPT?_7?=x0D0vseAf+tBc9>()DfBKf6>AUpnOJk5BbFj12 z%4w`S_)w>mGP;5utSlBu#hnRV_80Qoa@vCNKfm*K7^_UO)dr8>IaM}!PL9;1$4QwA zXx}T*jnUkuYy6wobaR9>b?hFZfV2hj4#GN_7>zhFMp%yAfo(oR9C*Xwmi zuhim$;y-@3w|KjB#7EA)V0?o1f^51N(|f}o#)S=$4(0Q?>&t^t_5};^9K4|dg#BR1 z6@ z+#9bVZr4+385XuQ(Q>jc500x-Czb4#0HV9*%2aGZ;VG?+e``;-=cq8EUfxbJ4UI!{ zSral>E;otNrpT!jL+q@a46=6K^j&_iexlS~F==0tvCYj5SL-#oCXq9H*vjQ@Xa%N6 zm$j)Ac{P@yCcf^+JUslalQRpVFr7NQ*T<^>GEp2y)hf3bwL;lnVK)vp^|e)rp{Db& zrR(xxT$nwE6Fp-itILFd<&;%i96XF4272GArC|Qm$RDlu@rh@$ERM@R4Gf z;?0~2N0bslGWOy5f${Xo2G9TF0+^c7VMw0_b29RYF~=?uUqG*ha!za! z31L_QY_P)lREzjVlhNX}QDlprdoK%tD>iijKY2fuRUU<#)(L3T{}3f7L8+${+l(NRfcz_NH~;`+pP>NrbS%gdKx9n>P0+Ed z@v~rto-x{#joXmuqs2&~2Lg;mVQ3X(L&fR1*2_dGa6?7=wNOQh7zq%J8R^%>{SddI z-Xz-<7sB|Po;xmPb(4m&$#1jAIfJm#JE(W|)ySb*&A6hDRW}@qZd>xj%)1yesT6vDQ;YVww zKC(1O;$7ytx}9bh#jC|)D%%QdHC9=!^XFe5QhEHz&sQcugA;2~Beaa!m`*eoF_XM? zzfa8Rx&blOK0PejyJ4u<=pq@Srn>}FdCG%Hf4b z9=hz*1FhyWg)Z$bBy^t-D3*gfPziHNfUmv3XPK?P=rdz`Cd$Zj^41veZ<}rmz z>`vm&a?7f>qYVGTPrfRHLL_8Y6w#P%Ftp!DRnG)Sm31?EOoj#?|yfSUj4|zlwVScugTdE#8|7l_OoVZdG%-;^7 zE!F^ja?=9oN0`#RFtvKE`jUBiK~BTfZ6=x=x$i|hG_6svOWlyJi`Z6D-GrCprnj!a?K;yxata znol({(PEWc1d&FuM^wo<0a_)Dr4Oq3a~?yZUTSpMznAHH8a9d+2~nh)mE1!y9P3_GAJm`2F4ayBMc3Or=z=$Dkn? znAW52Jr|ouLCGLy>AcdfjZ4&G|4;W7ZS7Qa@?9t}QQ4afTi9s-fO+2RaNqLwCB12q zm6=@#J;gE>08kM5p;4NXe-97)cjOG`A0i;V#s!96)t~JP>F54r;Jb@koOHP2Y#~eP z47(1{Z2AQ2wpF>5U-p+zQSuIe^h9R%VDR)_>o!G3n*kf z5P;v?Sw_{`YPirNbb)&kD32?zOYk}4`E+bQynrQRuCQ3_OR4@RPyqOQzv@Z+l4$A2AwySHrW%mO&ez6?D%+VwJ=WMLI)x|OG0#rba5O5 zMH%T-@RX!(!mhzzHx8;0w@igv128}3d&CpS-ip5t_!Baz;7;6EI7IJAp|nuQPM;$* z>JYCpj+c34n(Uj?6i}U@v^+KU}BM&6_2(Wj%iU49)E@0!MJjE}{y*+F0Ln)b(zocmC znK=j^vDD?;`WUxa2eI@fPa&Z7#=9dm%55B_=K4U?N0YU5=mC{T2!=`K|Hs!?21M0G z?asgegEUBYgVX?0QbU`X06-3<=iNViCcsC0J>Al)L}(%mU=NAUf=Klk4A2L{fZ zv-dvFdiGlDS!Zv)hRR|>lYIA|@BF~Dw8uolqq;is5E-hjRB$owPxCQ`2~X={8bBZ< zPnHPKaZx**ic+(sR_0)e!y3~1#TfZhfbb}<$5zHCW9QP^$hb>l1TLVq)*a15=+1*dr-awXmgR?|6Szuddj5h}JxYvlgPCT(efU6Xs_a&}+pT7y%SYO%?;bjRu{IyL z+6K9rJS$4$a&Jcu8)M#e*DBB0QqUuwLO-gv)FFPg}eM^mss*1u#hUrz5 zh_zfEpUvQ4(CGnMo#lgot%%a^PYW59yMyh2rmGL$$%m8P@rp?xoB#-AA>M0IVF9NT z|5$J~K;>@mMKcl%;CA=5K|`*edT(`S)kG&-KG%2Td6Nhyc5%^G<-EH=ZhpL6lp^0~ z`Oi*vvMAgmhttjZax|1D@$&tIW(a@3KGD9fv#nkuecq`5%~?T4S|X3@$OkYjm-z?% zB2RH)WjyBMomU=n3sz^DvmE$gY}ap!HLCpV6WRs4g*Vh>qtuRNL#1=JX!+9A?XmK$6^KcMM#~ zVr<)@?W)v9BYc!n)igJ|sa$VljKrY$k3YX&(xbUijn>Z z@8zWX>Zxu!&X%bJ^cO*Xa{Y#?!o4yo@5Sk28p6TjvPAd}KDs`>x{&X31)2HFM!^GA z(!kk_*=PJ)7p%34FoeU$`!z8qQI#JrRhRZLknaZPF;I082?}F^F1Ze9v{=D$rrjh=%EL?#g+4lj1T#dQ+esk$EupWjFPzJ!p~jw~hzKS_pJ7 zmYY6W&_}rVJ>M~LXgN=H)JMnS(P0J3#(qYUi;N1k^`h>=)1RfCVowgY2M@!p;F$~W zXSm++8bbAw8wy(Vv6?!4wEFaa0HKGQ-`elK9o&=-22%!1kTl#*))mKxBLfCf-v(2= zU6?_Wd(V0uf6wz?Cci2cmGjo>QDcqNIUZ^Z(~;iw-P8L z>;jZSAxORC;FL?mn>=zh#3;RJu`JgsakR|T)JHdkN*|sTuK_-No((>vx-^l|jjWM= zm7~>Q_hP4gQq1N$RG;z5Z~C^u-e!+E^`9ClC;(!#WV;rUi>-BSM2YD43D@y7Qb47@ zUeMn^hM8RZAg6?G%aHK>Nb|M{8wm}6bX4JVgauB|prqo{Mj2uAaUUKQ2ucLb&w9MOR_{LGrxH z9ij?|CP3&v6`^jOa_ISvU$Y#)E-qUo^13hg{3OMDTkA;Szk~7qxpw-_f{n$ewCHkk z;zWukf{RvRIHw&7K$6zH!>?h#TtagN_@jiQpZ_RiA!IGw+1W)9Q0rh%mDk{I*!xeu zstX+5+UkRVo-k22_3g1Qu8U3s_=S}&FQ=agdFc?(rrRI(=XP^GA=JoGOAewYA|yO~ zM9do-^g67HtSa_E5;L;?YbZ-bzu;aEoPgd=r^%}1i!Zj~a|sh$({BlmZF1=XNBnqt zp8UsdFO7~?XiPO9?hnH4W=x)lo@U+S-s}6Wh=&S@#7mjK*s|JY zw&{+fc>38Gc6ltLp`IN(-@s2Las&CCTA~>FnTSxA1JHUPAKvFE2cBZ+^#fv}w*OS> zcym>(cb&m@Ai)1&-qKp2QtE{;ia8mTiaXuWf%8bFZ%lTHEt(_fshF6SCGorVo|Q~a z#(aFU`o%^VO5pUv)$xU-q+;{4!%_IQ-$M1~ zv*Fv5kqx=J#&UmTPiHnUZn**RIW)^`3mKLV0QxMLYTYU8BXDR8E=lU6dJLgj+%F)+ zl5$3pVBm9BARp_aV$wg?&8v4m&s4;nt$35qM$D-r81l>Zm3U)#gkpa|F82Pc=cS=CI;=a#XaIGWOeU~S zr>9inqqE@@b;zJ-zW|cFe@n{L#Le0?M|uu|Ap>D4%TvJg?{)O??<7&ml5qJYl`1X_ z6v24=a_o3E3)RP&Ii3zZv(w*g*}gLc#LcM4RJk$aB;@K zoG0QQbC50fSD#kNwGYQklYFJ@bb9dPGP=`bPE6@50_ts(R^OP57c^0PXlG; zLrG3~QfCZ;vfu)=i$lqbRuO?4q7}*pbbsp!76Sj~Cu?8F1+g%OBFXy8fxgDTUw4zU zKYsnV@G+fqGktuRzaKvC=tmwxgrbd5RWrNjIL`_YQsb=>!eqQqjscBX<4CySEH5pO zybm6ORY4%ycnlPPn)Nf~=V$0BfS1~yh{A%u)f%4>rsiPXgy0}=_n7Vzy$)$awJ9Fa z_o`Q~UW))(%u{e_pb%8r97;d{D`%#WKNtlwfyShFKt|L1L08Y@!6U|3W2co4xjTLQ zx1`{`y(3);&2n z;u^ga`#krUN+r;S2HI<)|MwDz^uq^U2U=V<4|dad0OA_(#RQS0v@flQ7Tw06ye0wy zIw`Uf0320vSx?FB-=WI@5Gg{Ss^s%)#iGZwoG79r3HL)Ikmt?B$xctl7C@^b8D+is zm!?bLFP~KX${l^IhPc|i>V@p<$3OsK9MUU>F?QC1&)^SOh-H$2C?FCTc&Y{$H_#8? zP)9IX>t97uT>Q(EtGIB&o1kPP#t&u6pXd!G5dZr99zB00&-Gb{=sW^=GY9+>=gUrF zZ$g1O9w7pjGm!3y47T1zuf>B+r4L6+;FN2=o$+c3WR+B=)%is0R23O&w9tjat~2Bs z-m29>jSCdCbYsQrleh1(gon#5!%Tw+5QvLb#cZP^Lcx?~X}8#l`49FYI?A!}1X?H` z`_-6V9?5qkwIa;R3mHg65L+j)SC}XyW*84Z2!bRsd1M1(B_@fEzWaYTyp+F-)_ads z`z2SAK+X1-x_*@CHQP#s`+TlA>{yG^S+>#PM?WqjP8QaCC?5ia;y)sR@ydKixHb2u zgCfMkgqK;WPYz|EKzckNJfK6-O1^c(A+E0m2v_6lS8$BXq-9Lv)5@gBCPoe-|5Tw=w)z-W+M*r-;YCWQU z+G+c2mrbL@XG0C~F&Mo`+3j+R&&tXwn!snH><@8SoQ317qo-t}qtv zWqCz<1r`|+_eZkdYn;mLepQ{`{Smq+6XW*5arGzhkBNwwnDb{FJqRGZ{oRqxq*x^7 zJQcRm$uo%9skh#NJ`Ksl+;pMVApr3cgS>K9b})*3f;CS_NNA$uEpx)!+KRMZi!!y{ zfrrqg+C(nPDnbFyEtXSjTVGw3)B8XdIMl}$8XiuUFf_zf>&g+XYV7N~RAr@szWRbZ zkgJ=k-gWnp%0-)hK7V8oii}2y-cnfES9zb+Ey7FzqHn)6iuEtW&-O&7j}U8H-Bz4m zz9Hm;JU$kA?We|sMW?7ws3vWc0jX@p4wIUmB#oNG-hPq)b8}DNXE>AH)3A~8$}|=- z`W%=bRJD@~$^b)=K}RxDbNW@J-&CPmqB69if+q8tbl#6={&>9u8gR( z+ROc_f@-Jkw7TlX)oduU$!Y>ybR!v!_a?Q;i|Gj7G4BnzamQhrDAwcU(8ltHwguYOvM7pA6h;xM7%Fg2j@{=E5Bpn*g6TzRnnM59Dslv`+u z3y0~7*GA0Zy3F(RdzS}H_Mx z^tGHAcn{fXa#7cw+fLP>HFR}(o=W_*vTeRx6A~qvX)1U}G=_$84EIO5zA~7Y91L>u zD7Ap+q}w*XLwu6KAf9vnxdN632a|9pUt)QMQ_gSyLA=-629&qw1 zwdorFam{gii&isRZn=GSDKc5^(zpC0LZe8#$#i?IPE51OY+!95otSIh?li3`onO4( zA3FkvrEvYKFGIfB(MmrEWc1 z?Xzn+uI8v&Xnr@d@){$6L*(kDBD3CoyU5MQd>>Cmc>kbBc(2LM`tsE$uagtXg?hIx zxQY+F?51H)>uz}P9iY`u<*qJbFv>+^-h!CpRtQNHhRRcpgXA1iN7AiI0Ky9elVOGu z;ei3tAS1iy8LoTpsB4b`R2CO#@ctf`=WC)fwGO{KIzTW&Huc8!-1h=5bIj@`o)*6c z$4eJjOMJH(&8@FS(Zt@Lp9tCgvCFr;>-aTM=wo81Y)pAJ`}X#e`F`EW5u2^MfdGKQ zd2nXoCcJ%I|LV4Y47rhFAt#j}(lG_Y%)0M6v3#3>^SMD2p0(*GhEG)5?!-hAj7kZ{~l-eA8R14Ufma1;gmu z=d?O2x2B3jC^9e(S=jc8`~ZI4h38OPYBSTEIsCsDjvXmKAJl1n+DY8Je90wbcZcFt zGm9ury1V+0<~9JhvwY*YmfFQJ?Y>?ALfCA$R*QxgKMIW6PcGGZ)JZhp59OB+tws~j zY^C?NpoHn9mrVE>++P>(H-=G{k5$Q^pLY5|vzh|P{f6mw7wHT2Wep!tkgMkpvfnmk zk7I_2T#_<#xLqeVWu=IiKBuO_8!@e>4vIKsQ%_!&NZ%i4 zJ%;%oU3>lI?ly0WX3SJkYhjr>#%pUZb8H1=hwRrhpeTgE538jm#NR`j?MrDs|}Y52y9O)ukeK zRtuo9f(rXhOrf|1qz$>w(Vu0=52q;g&%qtw{=B2#oL1pH%|VfNCFpzYzk*kiU_r+^@brv;iWN1=KeUhfV9~tss%igj zzr|^!Cxp`iKvur70em{Fbb!7Y33kegwEk84W9L(?hv3NCcLji%Woqc(qq|vXaX28E z+OuPHRq0%3xHZS5o_=`1^cOjNjS3v#Q6vkNo(Bcv8SGX<2kyawH|4f)xwUX3Uc;3^ zK|WJegYGZk=5%ZjA<~+7DmzSpw;@Cc(^A4k6{J9H+3K}t6DZ|Yd*4XeK^ZPV!|f(F zoB3a(1~d+1P75~}U4<>n^#%J=JU$4UXC^j#{kQWZv$GUbLLn%gl)rL>CENh&yaY4l9{3i#4Im5pEtBLc#{1#T zWhCOz9SfLhV?^T&ZSrESbKcD9arO56!e_9PP2TLjIiT_Ug~MIG?!__U=F3gLKQ%kf zC8dUx+#QSS-%La(H?Iij4@`yE|5poe{`rf!1x3=SEN6KLZOS`_)cBN|dUk<19RMuR z#f=1zAJXu1`R$dK%-?I%aymnHj@@Oshs@~bypQ|$Fvc4Yd*@PgIX^!b=Q=uj~OAk4sfc?#^6>|9w z0J)v4sNGPSY5uogxH<2EJ;GCG-_sU^@j(b7!J<*PO)8*Km7d4kFrQm52=ifO)%-~~ z<`TTi$uAMHCGE;jqsLi4g-sP!oxB5B_(N)Q*&Bs3DwxW7N0p=~K%V)}*NV;L$D&H|B5%^}VHlZIRu+Wz z@w75=_N;ZnwmDa5ZLC6rbE?A1dmm)q&CQ0BUblZmUeaLGF7?58KNd~EhVs+0{hPL1 zXYo?^mY^te)+N5qIov71Z$tbggz^*Oqzu!dqp&181v_R7v~}hc#KXxUZU@zhAZTh3i*d zn4|L;*fPEvX|Rd4;C+qvnN*=|+5%W#5e1f(Z6x5P@){C6Kf%$x%w|5a3%eh}Kf=eE zHnX)3Mn*`j;e>4S2XPt;^_IJF^O9^%Z_I?8-gFiAGIEk%QNyOr%SGDf28tqWg<$=( zVF0|--Ck|<)SikbA2q z|7+BT`}PN&Q(&i%8p=|i$joBex-^J(@9$TW^aJU(t{VQCA&)s$D+>yWj!A|Q6?m|q zHED)ER+t&?85be6O=x-$k^S(H@KT9CWVK_W3ND^LFEuYVB9C2S*js}S9N~Lj#N~4vo@Z8je!PEu)0aL~ zC5=l2L+MwNiL0qj$qvi2Fw7*xhV)jWkFo!oO^)Zt=g%{%sI{GYhwi5Dd=!83K4tt& zxzYAQ1W;3sLJa^gBOmArZ}xsTnpE1%sec&QvmgDLA9c=Kv8TDYDb1kqqPS8xkQ|hh z2>R9IXc*9WC|-9JtRWL(XiuYg{|#9sYNcq=W3Bbf^T^*Hgm)HKuemI(Cr&@z_7mT3 zdKnwKBFMA;|4N?br@UW)SrTCqJA=2bX#Q#y%L*jOECo!JMvIsm{{P37UCjzoun`ye;a?1(7wp!ukMBSY`mop|YM)fIRJUuxR8-C}d0Dh(4g;gUkuG*yNdxL|Q)+8#SC1@BpYeZolA3n>8_e<2u zfO>y$&|^xIRM;5tsj1yR9}w_@R<1MaiD1ehDAV<4kI?IpGBX#0!W7}l%`hT4B;1(Qa2t+smxOA+_(33 z&SQw*c2 z!%6)?>0WcpKqOS@k8{1&_`!){3Ni5P0axwIx&D4$;|CO&L_4m2bOH4NPAD*k;RYa> z0j|B1l(I)GBrb3y1+8(?{}yyBbU$b-=(0QKpFjDmGs-O>_9|$pwC!WSlFbs@iCk~G z`Z44&$Qr`AqhkAhBkAtgZKBxMUE}>Y8#xW8GNh}9q)H5(tiREQUd0B_ki|(?w49IE zzcknyIK9&-dp|&=tRSKy@1w)M>bVx*?MVhp&gHTp-{XQo@x9peyQ8LU{uldh2S@G} z=O^bsN(C@e)}7Uf7qJEV<`yxiIkmU07kD8v?GwH}yWd@O%*=kUVp}1V8Vr%sO?O|oYR)h9zKDkoMcLCRLh1V# zrIk|1{YxbhA51qlq;-@)Ma<){T9|6G8LuL;J;O*wxB(@)*SnNHAHwvE ze}iBsT_UIEpWGrB9NORN)h~^F`=Sdf-tUCf0i{Xz{5?u279RoZHH9A=;zRq6obIvF z{Z-p@d9#b%+j&k(r|Sz48Izl@+5C|(v)PyQkHXb9^NlWNxXE0LD<5kX>eh}uT2#9TU?iL5jQazm6GyGt9bC1@B;&b2K#lPR`4$`4+eBZVA?eZ~7W)m)TFGY{; z4*UHlr{_7YtD8W4I&oKEA}WAC3g3t-6K<{|iMh za752O)6a06+s;-sd~}mpOm&Vs*3ef5Ad@Qk8?e5%*gH59m4^vU2C-Bar&=$6IOljU zT;_2&Gi60%%VGBZ-t^B;cL%S(G$L2=NVHOfQf%it-~MIBB^<|(6F^VW@!lp^+|I*py#25Ejzn6==l z+k+}R`L-L&E-#t<&|wp**~Us?!2;5_8AeF0hZdRPH>uzm)(!m*o`rv|k^q*!n(M2` zsz2R0^vspLOkVHO#}e^nIn0iF>g?}vNynq1UoB@K<%6@f6`I&a@5oHG*IMX}KTh~K z3+ILX12h^1kzKq35k~0Z$|hG0X2t|Z9PoVkk>)h|!gmv~*UaCeKc1kJ=Y66VlOZ+? z6A59$Rv3X@S!dn6aO~Pdw)Wygw|gE-MME2Q64XwRY8`|~>4R)3%)rR#yn)F2_{tVp zoz09k&IdPe^>m33T~wU z^dnc*voz45B8vbpNHC+p_%`#17)%f7c;Wxhz;4~z27*qmEGVuuUS8n_xXBL z{cc;-f&}2Q9*k=hjd!!*2_iX z6b?Md1Z!5_!L)>kcAnwh+aKNWD1gS_(8WVE`ME_YXA^_dY(?@*JaE!R+$i+^GI*&W zop4=e>aA3W4vV@tL&gTuTpx&dF?ge#xJvT@2gg5gi9#d2N)p2+%)r|tMM)d$DeA4@ zila9GGm8*Ol832$tuw6KOE>xe9*hp)J;BtQG(xa%R6~*BLkBiWk1Y zOZEORw=5ehlYmwTWcs=)rx6aavdU}jrnJCQeE@Q3KfmZy^nRMfwO4-r)o-saR~%FV zAx%JSIh@j2hoRNe;w=cth`&0K!s01DF}T{)p3REn`$J$r%E$d1tw`kBKl$VPE!Gf@ zy&or&XV)#>KU@l0DxC09pGWS_K5H^IGqXOA=Fo9_F>r#$#bAHoVds8al4<+)&ue7O z-N2RUXPQVv#}xLYGm@+#^@;9C-4+)lnMeeGA5*Ma`O1m;&5ofL_N@E%FAecV=4i3& z7hFPTD^khxw~NIJNRw4-wkN}(v6b0St$5FMvOjywDMnjv`zGd37SCO)TTjY_nX#+j{$S=# zSMyCsv(tIjYHa82W_cfxxaW3%jjfHQvfYRQ$U7zj?0;%v|4pi#XVZ7zpHNBbxcw^r zfzdvMu43fxd01R$Htnk7E{kzzwOsC{bGDGDYPO9&0pj}c_nLByQ-QH)&SC;{~M9v@gHvKdinRp*$pPO zO6C;bYQ3SFZn847RR{(VQTR>^i92=l*X&vI+oL~yZRqxoogBEz?P zOXVpxZ>65SR}lw=S#(wq988a#)K#kpXry(-_^~9dbn?yi-`qJ>@A|9$wvD)H#Xo{e z6H?`n&%xa(X6qg)+PJq=^nt2ncTbKC7Kmm6OUHwNfOP)$6_JcRX&`8{V{F!{tRldt z6((!$e~)U}7sl})W?kF!n>_-67V6ChdL_c|_DyEq|C#JCM76%WlDoUurbZbyNoat# zR(pMfW7^ZJo-K%;Pb=`E`Hu%ZL9$Pzzwc=7yUjA@Oz)#L6vLmIo+ow0A~z`?-E^yL ztdX3iMeHyQH&9v&1r!??x$H;*70=b4Cb*e3v0C@j>oe|}*kU}G@)3c-5+XM68Hsp* zRr#AZOT2DV*h9q-yY)|0;j!Kr?mhE% zf1PqzFM6w2b(S_SS%9}2T=$Cs&={N~O+@1ni~*Z~#P{>Qv+7aX#$kgW1Q)B0JY<>? zq$L8huIld2X$P7}8V$G!6of?uAN~0g1CamMKOQ?<)EpV1YbyW+q!wthBDC1g-?Ms= z@taOFSs~Kw+CBLp)?T?5GDu1Uhw?O_AUjF2$>T=r0}NvP;?Nd;^toLhOmjSt?WG0G z!q6baBRI*#*C?UNEiSf?`6=2Y5=@8$H3vs}j%9@5-&_}hEE<4}?Y zvzFD^Pek{3Pt9do1oS|7@kO^ydnAy7JZwZ5^h(aXT?k4~cuO)^FpEf$9G^%tGPigUErGio-lZWbNcO$L{zukU^e)s!d+DxOw8K z8;=!fjI}~aDlMw;!?aCz-9NxSiR2tW3jnoankDreFu^xE2b1IM4sNBf)fEPfu@SoMJJL~SZs(IHT_26QS8MQC|KBt0tl_I8f_D&q%m{B}V{~;8hf)Gb zqYo7Ze+qf-N?WqsgKrTx?b~9LAD}t*30?Nn$Zjszv#nI(rVBpeKPT@(*mw4AdU+Jc zwp?*ZOH!&7^cTakeHCsJ-yMW@HR|5O#>BIna)EE;>|9ypwCnu&=?weR(vuw}-z9-T zUHcggv8(Kc>T?`xXaKz560w1I@;G{IPnh)Bi8M*SVJSGN_wye7zX-}7Y;ZZn<#Wl% z=6;i0Qoq-{OArwJqhoTg=%=umS*PnhLZzG-doC_+BPY7~S*p75x_`a6;Z*oHfWkw) zAc00UVLU_&hcS(zkch&z^lGaAW#K}p4(tJKv62Rdv24+T8!`0CBA3IaO6l71BrrWI z&g(6#bDNK;Q_chC#SNzI)!&Zdb{FQJ`c8f`7u)Pc_5=*4kjkgUR$6~-1;%g;#~qBy zmtjJB2rrYg>H$xAWl1ky_TGDz-CrFHjBctXIHo<%`+c_gcQ>3$=M6JRWOgW8H_j|ii zb#rDP)IPN_+v_vRJ9lw|>XI_r1_AHGfcFPg^y-<%85sKK#huU^Dm)4QI)OGZ9l4?Y zNNhl0dc1^mkF!9fNhu0$B>))c`p@fLAi?z#m^-g}U%MZy<5a@{M$Ryxw)te^VTA7C z)(Rhw3`8LTmt%U78f5ulpFHijk2HAVJVOdajxWu{S8I`pP6gMaj?dtog~ZkY&hF~O zbvj6asoZi^{R%Pjb12vlVkOIi9K6ut%m*7%!)slBrEhi0w@@HKxCs3JhT&6-uRy| zpl00K@#R`zf7bOP8cU}OkrK&%vN7;{+Hk1xAjt07T2>y0(auPxAImQpOc$L=f7#k8@3@DPZoxQ(-G+1l)01$FyefTnjw;<}?y~K;X zv_R_ah|A84)xY^3`;-RC#mWdkvJmoeW&896@{os1MSE*N6-orGg%4z$LNs(-r#R&C z%{)@r0u%wIrsFJzUy%RFM=Dr`qQ^-Rl|ZsNSU=CZMGvb!o~8ZKpNyw zipfW^dQSPt=F^Kb5Jbp`x8TRO5pi(PP*Ep`Rap&=aZMWy-)8Meqw4@tAJswx9 zf7Ysn#>eA-O>02K3~}=aXJ{-eCXbBu!L7Cx#fK^h;z3s=mS#P1s#9-orEedyp(|bS z6%0uU^exy~pKFt`+!5PX^B!j`KB0_nWXi~9?ye61my0nOoE?D1air4jnffuPSep`~ ztO24f0ni>55SE$Nr0Rcj7_m8O{McA5KnJyuYNEG6mz|s$yYEYwaSVD1(?crc56x`9 zrIEsy`sBuQ&ue0rZ4k7R-BZ~KkH){h$?dD)1BF~3(t!J-!Qg`IJqqbqlPJl3SJg+T z(@>ou)P^Vj#sf``GZc`Nh~D4lO%#gx{HZ{J@Sf?CC^;JpPhafYKOsCdxzj+jul1~7 z1(b5gs8yUm7?)`}Z&WjF3vnZZKSTbPVhimLNzXRL7)9*)7MHQjLr-F|5@o<^rUM!| z)r5VuV#)UXFOd_#6M=#p1#zFiqfJHD^P$tMo*ig(ehuYC-n1thekt?synx)#(b53F z$d{lfxP@PJF}$KMiH4eF1A-q+)vo}c8YB7Vd1?_@W7#{wI8+re=yC~=El8m&aSCUSr zO5}J4w(&#d`UlHIOBJ2)fx_s&jnQJ`n?Y*W$!2l& z+wgS|nq$bwFx&29lbYNfA&xe+@2S>4BrsUjPW6&Rr|M?~o1v8gC9>T6;3P7sSU?hH zAMgwJ>`w;4(-Th@#|SCC#|g`U*ffi3Xr*QgmyE;X&)o#vUj)g0oFfyNqcWF#{xI9L zmGv8vZi6)VRRGA1<9OVta;5$*lQQlq3^i|zB{nogPmiRKGs<~4X7rPTCXFTr)%S;I z%HxTt?yBf$W~J&kIXo_0RQR<5+twvOziwPVQ={ZvA|rtTOAJGPonr%K74#blx?pW< z-h&Z#f8`#B7p48OCHX_=2djAc(h)}ttwhy}d|cBb7yiXd!%>jEwRLgSo`}ZA#}X6U z_nX=SqQisB6;aZ%4-I$RtKDinW58^P8`c1y|D5T?aiq_7MD zwZa`mn;we}{|lAD(ZMj1?v9B@n?`f+F1f7^F$q zC*(0ZkDAaSibYZ{9PbS*lB|tlZOw!V9GqMmw@CqM0newB}|h4Q@b;Yzl2?_a?hP>Gy89nt>~jNe@Hz9#gVW0qRFn1AUGm1B1+d z>+b5w{4d9qd&?G>7Ekr+7nEqc6CQP79*pt>gLxLUII$2bH9vWcglwdcqTAmoI%=Jn~;6V+>vq|5Bpw=ruOq%#h~nBJXyzEg&Bchd-Yf)_F)oZESG9 zB?Wg3U#M$jNu$5+|A5+(ESKa~ZHc6CF3H>4>IuULoX}U)*jQ;6Zb)$Z{$Ep{Ld**% z->~Gp@qgCKH+(9y#b=n1ye{iq1m$7LER^#@N8)9nHX|~=LA)Z5nYMUOzoc*Y=5eJ6 zLw|8$Mb!Jp$<>#i9L!Q=x1)Cys>+rGyoJLxHIwHw=}0SV%a-ie?$Mk3gQtR$Q5>&I zmt>y5hr56Z^|x-jvEI1*02Q};)7G!?v`#D_XnT&MK!-v7c=_07xy&@?ffizxtXP7@_x^i}Mz(m2o?v08HDy`C-7`vj-x{i{8|x*BchbvbR!g4*9RD ztJ|QE;Pn&wcUvtCwlv)Y}C*$lt| zQ+4QS5 z?%`&FSmNJM%??Pr9NooSFvw~0<7VgHmwru;VxpA_iSf|RWS8rDqsbpp?-@v zwYhh{OgccrMYR*CoyN9jW=39^Z?K{rzeXs>9Hfbk7WJ*~XpDK%6a4P;_rfe{GjEY? zf5?pFeixp>z%-gpB@D#!B-ev@`7-HH)?p$I4V<$4kX7K{OrvjK3e(ei<@9ngNboz) z1F+vv)Wb}rljk!zu%uWSg0Gpia-`3{Gu2F@*@acJxmep1*IwhU`ULCao9-#G{Tqv~ zN`gDjC|H&l0{n`yA4`vIq0CK?BRdJ?W!_X>iHsq)kFPS0_Xbof%;nf-KY$ths1{jI zgw8CFZEat#onAxHvA19+*d0r^zm2ip5W*$2H)Yualldh2Gw9h#;>^ib;sa8O*;%%1 z71pAi8U1rtp5$zM7#vhu7{#D|$kxPnMpOkLV+~_}Btk{hD2>y@177{pZ=X#j(gqZ| z0XBXSIwN^(CYxU8g36J*Z3vLbU`@{&5`*L>_`~20HKb%Jt%f#w(feQOw;tV-YiJ~y zG5Yfztlcbgb`Rwc_ZaB+?_nJG61C^G)uhklnQD)fa9jGD%a?{ z@gC#;k*|bF2O>vjPP7@jQ#P^5d#;|Sn=FT74L%Y;wcGMr^nRH{WXi+Vht0*+E!(>Y znK*FUGHXSAo8aHKSEM*F*!cW^jk#d{A{GtEe(to&I|s;NoCIkHoEk`fKxCRtgj(MW zI-pEHs~{u^Od7Ll=X)aK^iOPO+RBlic(OSvUtfri#L>1DRIIHkot!o)DAEc&u^cnf z&>v%r_ZFFCF!aC}xA8PCdPrWHeAd)MrJb&y8fjN8K%_%(&LO>gi}l}ZSIr=XyMk6mN%M{~37njRnK6_#Y5dcBC@}AeU z%<~xy%XHzqCzMiP0${?)(jR=M+;+uJ^ugk4X!VL|UguR`ubI`&OB}gA8+tIBMcF1Q zaE$#pF9sNWJSz8eNjXI-dq4sWDzr9n>`cNtG*KmO{Wy4ZMk}0@#!1QXD_ih0E-8n| zDRk1OZ!NJ1_@8#YA!oAu2Ox^1h*qGxXcF29|;fLX{{q z5sw3KOh5KdQ!VXCaD9KUK%Vdo7|!@$MJROcmc@!jKaJTGY~?-!g2vl*OuzByuj4@W zDrHe%+EGmX!;g(2J+qqp6%kB2bui_~S)G*N#4=|BciMF-n#D)NBSQbUmo14Yz);5{ zbXpfXxhzK{FpXw`G_7Bv-#f6(GU%{?vrwFhnu|Z%Unpz%yalY8dOnvn`GmWelk~!a zolZp%$pROvXkz-c%AFcdsLo? z+z%eFm~B)_UkdwcB)jAbJz7s z`V2i?^#$EgZX^~-_B&3zDPlF*uObmxXn=?#(!O73h)jE6@=KG8KU@H-@}!MKv4~&6 z3WK(O00rJ-_*M6!t34G)u@2)GgzvROZ@KkqMJ~fn`NsGO-F3I3vJtvNNeB#GI&-%w z?P$JA)LK=nw4)M-e|Fo41M?RZVljV)0QwG+X^tNMj#E2Myj0|$ExgjcE1REQ;Z14q zkIj>Cvhc`{V6K_=hi9CUjsMoMuAlBijbJsMWK&98l9wUB(il@cJrbl25B;O`{H`AN zGB*FcvW&?BW=Om}BKkr?}KL6PJwWh{~Tkxi97=yjUPUZ&t^pE|7h(kbP z5z)VRJTi0oBZ*1PgbGgP%XErW^!DG{LWirTiF458Uv7@A6@AOAQM?h{UR+wKAgJIN z^8;tUP#>RCBc7r^mVuCL^me(pHAOrAI(6nvS^v`L$M38d0c92HSH*}ePAeOIWmvPm z2P=5`&yCSb^O|7c#(aqtg~`_CuLS%lQ|1=2O=VqFoDa&8t;@F#6Wsb`81Uk(d?eOi!z11G&W<{6|&0(|skYq|V(P*D?5!sqn5S@9GIi7NwlSH6SN1|1uIE>}< z>(yJW;ZioYdZuuR{DB9#Db}y*anBY_J;)6}iu^%a5x~&kq^(s}N~@h^j+oL}>|SGI zkQ;RJ_lE%#*ft|cGR}MRE{Fe1YNA67pfgfKy_-ew+NA%()mH$;nKXan?oROF5G-hL z4;I{A13^Ow?(XjHuEE_UxCdvE1b2sJcmI3$-d%n5RXtSg7CSXPJv}YI>8Cq2Z){G+ zWU$6Sr5qN^MaqJDK8Rdjp7~?PjT~{Tr6R_K7p7R{#TMDWu%UU4@gIj%g@^%6vxo~G zPF%Hzou0a?!zZn}kh#b-3_QmJ&U_G9?*ixZL64r4A&l_*6S|||y}$Lbv@D95v|Y^<_Y2a_(mWB<8)PE~yCF6z-7Sc-mpT1%V zroqS)Nm!WtDTB?ZA6%?+*uL%)x-1$=3giCvXT`p5jZO#3oIv&JQB{hUh6iWw2ukTc zm>?YQ_Kz=JJdRQ< z)~Yz4yVO`XI$8tYe;?dEB@-Ze76tj_MU0Pe>f~7BihywWsd`NYt=E3X5oj7h(}+403`nAqpWP(Bkb?W z?H4`x7@kHtmh~$glmrxb%&9j+U88co+Imu%pj^3zZL*6_2GS#&e{cg*c?8n|6u7Sf zflLzgC8U9-j!BlegD)hWI2mVXc&D(Yo_w@JBm+rRx@cJZ8L1P9Odpt)5oq%g`e6T& z*Z{|a50-@Dk;IjM;1hA9N@pr=^~G24oj>k>ZNv^)zIWv)_s2BN_f5c}?hE|GC*P)* zf7owW`#(SeSM!(n+pyL}?zmx?a8F7wW=3WcLh95uS)gYDrgUBQQtlJwRBhhnH-Tvs zm%9mxI>COK0_4ZKe~n!EyV`U-`k`Obaz*)(mq@n*dqQ^S>TOa146C!kqf@#edg-p_ zYp6fIS!7tYYP{bRIhhdBO8!T725p~B>HX*?5x6Z5X!WVz^Ct%Ad9JID4ZoQs8wgg^ zzkf=z>X3qg6?iwX?cI!&u=WRfcRD%)e9<20B%|A-#I0TiAyaCIP<(pFvF@u<`jJ_td}*e zvO4+#NLJCXG4hRi|JgAU_ZP@ZDxl-sz#<+J z<1P9W>E8XvMF-FX42(B^iEA@-d#+ssUbPB2K1Zwc?%qM}sUVZn?q{$3AkRb7TOA0X z&-*dEuhHvKRMh{})&FMPy$5`f4aw}ozI{gRb=#-vxvt;7?HB_iKok0REz9>-FvSm7N%<1pe_D6Z`p?+vIkGaV;_W@P423Mc3=4 zvi{|~*kjnw1^T|o6YZmLqvLEM@#|DCs0K>2B`y!LDH5C&Lv^dd`?g#wC3F($gal(_ zm?gWutuQ%eV;I^g)6X9mKf6x$@Oja?7CmnheZH7oBKjl%!MnUS3DP(8_@&F}UmyI!AH zw9kp{?agJJu^ZqyBg55YlGUi;odQaN+6%R|ZDN^lp=D3?R}#AlJrx7*^4d{l3^z*UKfj>+U*D^U?uzetlYw`A zAs%Zwl$)aGlgb_wBTijAgv6A+-}l?ZfMEabvq``j-=E1i{~K1o^ImkC&uOr~$57V2 zMmwk%*mv7#tqkx6(gO1zS;f5PNip{ZpbZCCHob=zx9`Me^f@(ko`OO_27O>;2*5p? zSQxSb_&$gShYb*ihbk?4NU6f(SDQ8Lbk76x;Q=tw70}?71PA-31_`Q9J#LRyQ^1i>Hc2#Go(D(lowRK&9gk{ah*FdeK$A3Kfq*{ z!1|R6uzV6pXp|rfmI&>Ai$9rth$jJs(=I=eJncm;eeNVs2bHCwG zK817my{uoJ>$Teh-Q6f3Z_;~Dr^9_t7wW;6eTKmPixF1iJB^PqV?p1Nd;2_>`9<#! zO}ZZHt}|tja~@n~Jwf$3w@b8`T;SSSW617f?aM>m2&3UuiN%I)!_JS=!HbQ{K42ku zVx{-$kBS(Mz!fp%?#^cjv(5i7Fc(=A=rHR&dM!c@X(rz4dtNj#ZaW#^Huf33s;>P3 zhN?5rqzd5Ma%YdCj_7$3vDqZ96G+dZh5EWc)W~2o)3-Px53Z(``d%7F2F48*YT=M z9nhG2U(w^1o#V?6m9hUy*}>0SW$zaiwxe3oe5~aUE`+90ukj&MxXz5s0!!O+{ifpm z-4&(%x;=4}Srbn`s8}IjYOgajivuA|?%U3JL^5EArU)Q&Eq5)4w(G3%ou^&`H7No- zW0=No3^`5<0q(uy%uC@*=}YB#DMUKdpV%_vaBxAx^oLe~nD#SY79J~KK=VeRJMONZ z-@FQxdhSPNd=8%<7JqbBS64@iE0Gt!(>}no!engVc{T7X4X9X%onSH$FRGAU;3+n%sR)`9*KGR4#iacRo8k!#yA!vmsxKIHYq; zr(&~Zbz#ADUgSbFR|2k^S~m*mMHg4?AS$_D!)CyX*B1@3r(pjrrwNfhvHfstSIV2m zL*ctvMgL|%fsm8XUIMIZySz84iV)t5%EVwDwH*Z0*FioyNhkMU%J?LQm`y0i8%TfWW?{+ShB{&1cz=DYUiQuOn1 z(y71OV{%Xdkf8R+_xHR>t}A3TI9|kV##+pCIDpab{-`PTS1Xe0*ULREbV?JU-Dar1 zjC$<#eT^cU>E2fZng@}+QxUyBg>-oT5%q^Ge#nOmW+Tn^{4OkyZf!-1sB~Xj4~?%O zxvq>iak~d@i#SZjiaiYl4>3|+7xGiN4`*zN-t}_(yQz**xEuNG79Hn9Hldq;&Irg^ zb_0A8>lpS`BOmkBqtU=)GQ73(drM%rrX@p<;8H$;E}E&O8Hf}rcg5^gG{O_%z)~I zg5UF=?U2L%tYOUTqcSCeX`gR=&i!xRcn;ss`$rd!YL0eJPB3ghpOfL9$cz=kuCh$g zO<*$P6oYx#CfFQXRNiIIt$y8lby`R4@hLdlnqu>1HHUs$V#s>tOrSG-K+0|N@ul3qO%461*qu$6W*>U- z$>+MgfXTLxCEyi4(7yxkzUdDsuh(7w$bEWzvMv00O)qSouEG9tbC-&pe_NY915rL* z<(Od+nryVXDu~lv`t{ISRNLWf#6PF++oi|H7@Olfx9zlQ1;gofP(3Q*F`ZSKJu#0F zkfF_%`?wjEr&jL=bfh)lx+yR+_FwIGp(2FA`JznT3i1O|HhBv{M}hG#p8u@VlTD1b z=rfE~S)r%BTjMl`xSw%#VirFF{=|M1x!)I3#GzJ?qZ0Of=yl57f{j_f?w2q2Z}qx9 z`L^L+qcp~GObVzt#efC`jrf#rQsh={#?Jq2pp zy52%}B=^0WH+fokaO-6X&fu>z=#6^Ay|IA|t!DFS(}_F)vCkxMv^g$r04CrE{v#Q> z=`ICX7gg8w%`EujCZ)f?*KM`k@#pSkF7Kftzt7{j3wut_KJ3R?(Y*-y{ctR?-y+_^ zcP(VS?q|Mzt1e^kaoe{MD@u8scmBJ->w0?FlCg65uA`9iygc+)s-wp8QY4ZYFB=!N zsTfAWmZ4Xb0ya-aSL6M=w8#ne#$9M|7}CHw+<|lNr4;7cN0G*dj*iJ+wH%)56mC*Z zD?x-VA8WTFM%y#@kyGq0I`7h=IXunh%aWSiL7lBe@v&)7fh3%knnExIE}%{ZeW9>; z1Q-kls`o_}N3us{GoNy^54WFJDLw*RJO9);go{|$>vlOyMUE!m7Q?_uAz_iOaebH1 z-_X(Q%yJlldX)#h*0Bx)t449qMskN>K+_|8W{0n0zSOKZzNVA9R&$ZVPDDaa(flA= z)u+g@qDo>i{<{<&nA_DgY&I0a@0mn2o4=uZO|r#((1@J5&;9g0 zhLkF5lgl1BZ*j?_C{D;`L;9ZOJFRUq5gUt@9)%0co8*Vp=LQfJC|~7u@?26h&fNOG1^8I615$tk`(&y$v5;UqMNg zbP-rozIW@6nCg#F?ZN)Z2`RY46ti@>-i1x++1t*w_8qTwA^#K z9>W>!{RhL#d~BpABZyP&6@kM&ZdvUs%1#1*FsuE1*S-LbiU%R zD*Q)zrQH4xHrm^$E?uUw8IpNH_n}v^!-ur>&f6(HbgB-E>A~>J4c%sp%nx?`$%mka zZj-vq>w)A!#%PRx>jFUT9f}QBW<(&(Q0;7wrpmN;yjR=JX#80PUd?U3WDVKp3Fstf zZV2w5001-%jwjQ!Vq_=#(*~s8)WQ#W_0;wh`^8Y%e`J-)v^)(|atd``l#p zyP?)FR>t4F=@XBC!L0m&*!_q;bH2OK<+BD3%*at>J@Dn@gV>jW+!bM;N!}G7P*PXi z>xs9RkM0Iv_cGMaf*`@+Fn+{U{m${jMf)0!O>#*f0(VoIhx{53C!-Q&tmobKTePCL zFXatE8E9{R?OYi5=%Nmr!U@|(Ld8PJnoSr8dhEW;({l03KODTloc<)1;XN9D37OL% z%U>@e;NOBQvijXLG3FcV`SN@lQybEsUt1$!_!7l~2=mL)7_hZbTU9GH7BhUXOvWE_ zL^^o@xfl$mGL(}VQ$5UzJ(a{rutKlvyV^xQuy}ehUp%?D(+O|+?lN@q33>!r=6dSv zT-NxG1N6px|2#p!57ndfCU-mVtbDGIZmAB*#v-Tf_2du}z_$C|%OPb((`Tsx=RXtF z49qfFXfR}*e2y2#>nDxch$N!keO$F7=ylyss4*nHi+Qy9n56|1z)QALyV_1EUhKR2Q~PAA!CuY7qQi6RprzV7 z5H>iBr^I^kWKPhIzt-f38HKa&ds{MYN8OLbw;kn@MMkG9j+>i{f*xl_^A>{Z(JiyW zq>h>fefHPu_kS9gx%C@jD{K`v`UlvSHoFB&dfaYLLRoe0ru*}iifza^+hZ+nt5ieo zbL|f64VCZUv>Vt%fb%6??u(s`7U9SBpw;ZYhvNNhkuG4}WWL9?E(=rxKpvMqBL%6i za;n25)vdfmtVpn7Dm<%3&_y-5&3f-j3(2-Pbf0cc&OXgpI!JI z)m`>ozApNM&$4C^iTz)4IDB^>fN3cUXGTwVS@#sdqgaOD*2-s|_YR%9teu&sw`FE) zi~(GxKj&bj_6ewAMwLk3*{!e}HW2mbJ^?%8#g^9=S5NTtU}FSrMjtv~6B$>=L&k-i z9)(MFa4|COPnd)GrXWM9Dm5p^TOMN|{;f6cuZNZ1F&~>|F~{*oRVX%lEWwSXB!XYi zWbMVebvw=HUomSJ$Kp8F1;cm*p>>mrkMymJkV#W7m%%gY>QY><+S(`zheQ#R{Oiu=HHU zhCb>+4Sy{5i;3q-J*7!oo%_I6ys__4r|jvi9lgG)8iBf_ac7y!bQUtl^K_+C*U-L*>^*6MudsnMVzM0n{bfM5Jzb@ z1~wF5e}H{(ex3r2pdg5sNw7q}%n8||x6uUq3@VDFBBvK3x0&2+GK{F3t*;L*NV&Ji zU-Bup-@mGe3LHPR`8hvP`Fn!T0iG*_r&;R@qV^MKA}Y_nz{uyD>wM2U{GuNB^yT24 z1=yj-4}N3J$-nrdJH0t~+3F!4hnUv+u3+!pl?~A^=@w${SA|_|ZfAZ=A6Eb#GkV12 zkbDt%#tWabLo88qw+-s4)BTr3~)!8WA#84wRGXxC(u&k4Gx`fziP+_sN}>Lrg)0ty2`F0QLN zo*pv$fEROXV>2ZD7A10PlV517D1lDHOGaf_R6>1Ru7{|_d3{fC-^sn^fSpgT++YBz zwX5yePaO*H;Yh|yKC}$LWA{=8bFu-_x8fGx;SwU#n}~s08E-p_r8_n8(`~1%!{hS$ z-YbxakpJp~)9Y&BCFCx-@2MUDxdR~edjCzx2sr2Ai+|f` zb8tC^{=$aFuUlUGiBnOplpNxE{W_#Le<6bWoOpCmk6zmzE9i)i`~@H#+f)j z$BVtzy70+cTpfu3Jbp5Y@>xO4MnL_ZF8yl9TG+7{Z@u|-yjE)4bzmOoc&o=LUdlY3F?jO9dh6+y)d0Mk z?j*WXKjxmR@O8z+ra&<6b|MH}ztK|O+L|%o%VJsXQ`qB7hpVy>5)SbIU<=DUwBmxG zTal!!9EK)G9wm}Q6DO>a!;^0GXiXVf5xK~=?nYt~_FYUji!N-#7#q~E5y_`@YgJ+OmxFcH0S}664j{T zgXZebznub!WmHKG$;X_H1s#o@7dtOnIG$F=+@FT$i%lNS%X>jnqvb=4?)9B6*TW+m z588EouD?V)FDi9jAK14K@yA|4WMeN5^!`}EpU>~ouxm_isrp2o1EO7bDntO^ub8O- zrTZf#b3bllEJS^FCN2#@V0d#RI6$Tlv@?$r_?mvYEdX)DSF3 zpu|)~#=?ApgAhPgHW$!;jHC0uEaZqWNKP-jyvOt3j8fp9urRAmwukM^MV7e~wx9;Hlac&bg7TnkFLUdEuD)be$LGShq zMJ>X&`e7R#NgwDo8L?GyQ%DbpU092t%r}Wy-m(MVq1HLWkNKFdGs5^lDi_ngvnl2~ z*}A!==0XmiU7$4Q_`!2=5mywEh862e&gaq%t6~s8<3$X`8qAA@^zW*hRXMiDKRQ&V zq2X}BW5jvIWh$WH$dR(+r{NfGt2lp%yIs)mY&jRO3ZeGV`8w^1$L0?V4LKTmpN zX8N93l#6y={77dGhk7<~izcef(;$m?$pU@5Xt95Y-^3#1lSj07rbP=^5 z8num}<=7xWsbmTbis+pq2XqPaf9B@Hu^g%|I?h?VdvC6EAjj8>WmucwXl~`xoj}OT zaNoQ2W{*jZ3+``yk?;)NAs?VjbI#Fuho+vQsmB~;$_b0|=HgG3*%l$)ye3{VDg!|Y z0*WFEA~vQO2^)E_iFLNoB4PZ z&lN4U&(ncco6p1itZ*xMo~@5J!N5f5t zucPgdemoV*iG7%e(MU;HJ~lc8YFHSd@1+F`OOZPRj@!r3dem? znsSNk1g*$Hi^7se9?+GfXT&=~BFBD-^_nggy$)^YY0222yl5 zoTM8U2N!(|^7!Y!Yh*g{%1AbX9x(vY)&~j$4Ne%QIs6n~f#qeRu@D+&u7OQnkd| zqE38%Y@mn-{iJacHMcC*X=!uWc5)QBE!W8za(bBqmc?(E(SZ%u8RK%fuIW9K|6&;( zK^08^N>Z*QVF8PydBo>I7zBm+o{*pRENBi)!#)vmCaRE>y@h>GTk`@5JJ2?HAV$ppL&$BWt-D zJe>hQ`(m?S?9x~~2!UN0dtF9<7rOcjYVD>;&?3iEh=jnJ9%aN+bzDJ#Z*SAJBKpOT z@t2-2H`%kGhrJ93Hl_Q|@p>_EE;j=f zTvoM{(EfV9$<;`%95{atRC`3`J(_w$iFx}W#UC40|FX6n`^*OxJV-?NIgZs$$aJNDPD z^Fzo{tJutW%EPWVmG|&9<80P-n@h^HGgO_h(r070JYcJ%K z3>zcT1%@in4dX<@EvYzI;i?DhP*KG>S9Wy^L7D2jSAsvYeV7B1y;xKj(WWBVJbHSH zi3iW-Szid)jJDEw9G!|@#eLC;6S!(d-+r9$%Wim1PtW(;-g9Qm^SG7*2tde$YI=Wn zn!I{}Cy13p(aWY`u$SrpM!=z4A}sI2YhsbR`)Fl=!=jVZ%LvC|Evz=^oD~;%t`jhjl#}efnE*}~1l^dDtuBg)4kNhf7lz*}7Q^rGI%{Qo38XJ!^rqPp=LX6NH zEY*8Mu@_kt5Wbs33~NJuLdN2@lJ=Qdq1`=tFSfr7<~Z$AXGQ)msomMxMWz&f?e8-U zQi{4~)z&z5qo4>L`WQSG<8W@==)C`895b6UNyY~MYt#K=jH;s{6xOC`2^vDZhOhJ; zt{x9H*xZ-pjn%#0TeAaQy?o|+g?NM{M5>_z#MamQvPNh$vEJjgRUie>RJ|NsKCL7X zF;(^0KPsd}!Zc*Ia+<6lUA*62K24wXzgWYJjqCY*_Nuv3R%&y!|7^zk> z^p58vrRQdicdySmc3c-E-FrrO2h*FBeyk;z@2jP-nsm;KLLg3r8cYqrtY0KOjuJOBKFj(_&tFEzDL*!ViPL^cZmZpE ze-v|f@m?|g4ueG4<0?V++)RsEKU|rF>&wkm;>NVV?xJ^mravS#eb%>*xIclb_{)Bk ztDO!q>AGQ?&*Eq-jJC+FlFQTuxAi4&GwjdTn~%R3|rmqU#7Do znB{P$qYj@p)ZU2U|uGD?MGnG}6aw3+M-$8d}Kg{tj?`$@lq=v{!T4JC=Vjfw#KtUW8 zdLa-&;5ZEzsenoofLL0j1iNm*^N7QlSRu{KR5*YWjFb^cI;w~|(Xo$7}Vg}&;^ zqguo2HX6Q-bj}@NFC3gKqoa-;eG>M_c~qRfy5r zZsTPa_ax05#+AUaUwmIL_eY4SS7<}RwE(Dc}0y;4K5YC|P_y&SGY+WmR^lEdH9 z*~xtt{}D3FeCQACqx5Wj##=6jdIPr#47wceP6WfVg9sF-7)proV%}n~ z^dmsqs$TE0+qlU_!$wpEq2UA_q9#_@c85eW38r#N349K~f&ANz9l&$Sjf3DhljB0f$y^x@q)+g$F!>CZa1PXkn>T92e6jS!W|sGh$Zyps`k*xXG8@F z`*rxb-g_mAb@t_vd;6M0>QVShJcaxE(&E{<0~|@)kQ)Ler{&Sy4~#R;&#KJlQbMv0 z{BYNMBaK}a>l&5D`H*6O-&Z&5H9n6O zehRli;A6%wk3jRktkev8(fob!OQAZ}AQx-vQAE*jf$Vo|)bd{G!e;k;#?$Pd4Y;3y(E70FovOl z@o{%qGH%%VaZfZ*{q>gvI(BSr)9fMbFVh9#?@TPY3JX~<|1q{2g@BXMkKllSoRWYB zZ{@o9wR4%(hkaSA|Ka6#qNHEMtftwp^&hbQ1iLPdHO2QW8&p!i|{b`XnW7IJB3e)v%>2VLi7+;r{pV|HNAKA zIJD%q@3rU@W6s{xiMk`(J%}$j**Y@*k4|Vb!rHumNHoiS>Nz!*pV<7?xpes7Ns$p+$LF-2gSW{Ja z`xV%93<6X1&v0Y*BvWem2a2-o4q?oZD7uf*2~*_V?#)j zn)g(?!9}%BLpLSqunB3>ry=9EVbV#oJ2j`_d=brzlkarOMr_C3D%4vk>N60 zCDX)Bde`kO=trm=_+zwOF_ek!wtx{9cDO|#GK-aEJdwU*Rp_5hS)5hvT4{?KWuH$M z@hk~X);8cOM{xJlhBiQ93N@9s0!4_aJ_Jp*(QV1T^TUNI>%Yg{Sp^6I$^?O*w7I}YK~6|XHGdgLc|Q}(=GxZ3LdH*{in>5k6TnO`U`A()IX^}* zMKo(9mEw+wOLAS3J}5a>uGobmqI8y<3b%OZ`=4lYB+*M#=jgp7$f-lZ0@KO7a#oS- zrs#NN;4Txq7xU!HPi3J~h+5B}+Ekb))zH5%{&(j=IHB)=u-+Ym@@Xv*p$__r|I6p$-6sNmddFH&@r56{l{I7Bs-y^d)g2( z)B$YfFYgc#q9cON;Mf(yQo_W?2Whjih3GHc;7ScTNZuWo4vM2tP}P&h8Na(Q`fmZz zJEsH7p}N-$082JhFx`Wh>o!`M1WtvSGVOqSp2m?!bajT|20ee6&Aoq1b|^>`sxVtK zE#q9t59^8Uw`8H;B45!=qhymv<|y2Bqu*m9EHla%7K9;&V~3@(3`{YLlJC7O;1N>P z)Sn_Rwi0H6!hKB+6{mD@w>t6h8qo2ijby&CaS&uafERm!tNF3JYQ?5Km{reg=~bzb+p;bh>IUo; zPpT@{-wp?zbNWaJd-UMme~kAiV-3}7w$MA;*SDR32C{Pgiv&F)UgJY|IO?3su7nu_ zh^eDc0l0lj9ngu+CW9ukn@tAgMF5_{pQKIYJ%O3%w|Rq6E6-J)p*UmcL3Sz!8R3y| z3k^FL1j_EA=q)8^!zhSR9`2mkCf*G>n$|<~F9T48&@E6g9-4pf*ZIlmv-&yXT)1u( zGeeEAT#+wc5VOf>#C`eQT+uOca-fx!f~OKLVxl{J)2Y)%=ZI z=K=Bj8SF5yJqcR~riD7@+7k;Y9j~-Vx-@E7JZ6_%ha>BuF@q&gz<50L>je6{X12?J za{>I~{xgd7L{pp{%ah?hU-9ti1-3xeuxPHC^f2aI-B;Smk9{;v_hAmEU5j;Un6;N zd2s>}*$R)e>yOjS+nxS9Qy+tb1f6($J4d+HCh8~oNXg-xcbwP$C{wCfj^f1B}yZV(QD!r6=vu9G`wTqCRL{v|J;hAusB z6IZ0Y4__w#L9{~Vqa~6m3}Vy{wUaywEXLak7?|v7>8V{h6<#LB|3_9R4ph_!+2LfT zHSxL^Wz>=og?UB-QOPwUkqV}dX5w~cl)3ignPG~VB!k=-l=daKT2NwOny2DC{$q@P z!>#^+{@aSBq$ArwY8W(@LIS8)Lb0Nr5>f<w7~g;1Kij)sO~z;eBrAwBl| zRqO{~esclgm} z>KzTLBFO)-SZr^X84f>6$#+M|8HKR{#ZcF9#ABcy4znpR#H6@Gsxjlj_6I>Qvd@EA zx3s|VUl|8~KX?37d_~7snw|8M(3fFd6dF8BG>mQe(OH9>P$gOxEa+o{-jY@drX(I#b2`)Yr@6$ z`0gKNk^`3i#)F-R9n5FumK30>DYoQ@^BHIk%}IQT3JS(6+QqFq=E~YmXBKH-?N~M1 z{)fDBfcXkMzBtSHxiE>6oNqGvb9^Yl zH{!<~%zDoR&wm)>{DRuS-3b!cyGtx!rgKrKta+zIp1VV+iYpXEZ~I0OmSBK64;KB1 zQYxK^8pp*zzH%%h=J#L8LjT)OZj?EX73~{$9V8S5>bQAAtx{AbF0PDr7?_9xgpiD2 zS&3mxn1HGj1kP0qrU{9132t|TLJwBrH4zh~)DKVt_ct9meh4E1;TX)YYHBU3r}Psf zaEa&=Ylr4_-_NzBWHROF5n$w_6bZj37EH-R;)!!Matd@zWzWm*N)Z0bLI~~@p_@Dh zQw7-p<>35}l363YETuOCham$rbMoCEb#XCi;Q~=cA|mw*Yy#xPQ)v(pf>5S(_j~F8 z+3rQa+)-Q|%#;N}$7JNQSBh&cU6`{qXW*Ck(TfAx{FEr1=8$&^KJ6LNOeeI*EanK0 z1m;L{(oXevy7u@ssi{}Vf5fHuZVQ;o7%TBY`PFFoKItMd&GXXAqn{hZzK}AvQ23$Fr&}ZUTq~o~dxwN6H)BB?@ z?=h4L0*Y8PBcZ_39b-+i0TIhD2j2b`mH4W*_anqsGNVLVQ8fo`XWuGWT7R)tDXi<) zSF@N^GnbItU*EGOYuRPJ4%F%x<_lhKoEOv0AP?U1izlFIS}{zz2qNXggG5VXj@t@s z*w$Gj3RQzD?i5s-vbI}m#=kOyiDV+)*Qm7KMqw-%v|LKhwRt=}zL2HC2yRiPI4%Ra!BY3iz0X+ZaDs zs{#a0DSd%Ex8n(#w$s_24~*(I4C8J3yuRwPX`1)9+6)o3mef?#A?v@jN)xO#+vKXi zd!muurZe-5WWL|>SU%tf%P*B1>+pWdUt1GQ{Co-2;B9Ilu-%I@7pt@_O8X(8F~%X% zw;GQ4P-l#gP}EFjQa#)R)~~IELM2OS{I;R=wX=CPU!&6;x4bm+?)L1c9 zb5;3@pt3ZMA_izv&WRV!XVN|3!@)2lD4;SRRik7uiK140Q;a@}p3Rz3QE_vxqJd$RD)j|xYAiz>#Wq&0<%Y=jZO$y~*`aM1 z1^}%Vp3GH#=Kvix(6VDI3PCdkX2m){!8Rn(K9?nK)UZXyM==x0widCtxvGcX?&Yez z%v7-ODob;&LRj7>U}0s6MGW(@7R9i7*r%#`TWiwRM>c?Mne1(V1pWI!BDCC5{nSD2 z8}R^fSo4OY-}2TSMTRp@G&T!lYon69E_ckzWfem~$T@*$ zlw`H2Rx~CNe`~V}16$N%rC_z1mc=tZkw{OOCC5jSkb|j4nHOSAw9FY4<>iNl34~zq z5q*UsH5js8P|>tfIeF7@=(U#B6<{ULxeD}`fVtB>1^T`r#Nj$4Bk-+9Vg!7_=56IZ zL#+4toc;8XziP2NsMVVhN;US5o!=iz7k1`Z$K2t57f;0}d%FzBIx8<4%-E6p+tW+6 zmiqX%_olA?HFBLzQP>mD%ZE3uLsYn}B86$8>5Qg2!QOV&i~cT=>5Hf8R*Jq>s6*%S zq_KaQc7M0Te#v6_nHFJY%=j33ur&Rj$(zwu4kEu;-)sj=jlM-*HhqGCVOsH)^QvYd zmj0yk@4x*^^QHWI)10Xk_COlVEbW?Qa&l zsRx~tYzOaD@dzo}EGfYo8C(ejrC8ltE#G@mm@NIGSt1Sf`^L7UWs8YVpEeCP7`Z6W zrVvo!@{`}ZVGQ80+`FN66_V61FE_-mvaX6k5mTL3Q2n$^z^!fdAuhkW-~nDDSUb6T zaxKisR!yN)>Q#&F3SEHDz`+VIhLGqLPspQ1t)v!NYYTdROk>(Ge4`lb2P*r7B{*^XJ7KsrXqe`3x?Vgd6i{Nwyh0R550#%7(7b0&l9bxb!k*^~~Z&2o}&bQo#C*v+5Ns zt}lLR*GsyEVd~CI%L2@SOcaY4Cc7-vf!*fG2&n!$Y>a-Bg)q{ZB|+BA)YaRXWH~E% zFje-VKhq^E=Lk;4GRYIQ-i^Fedtu%9c2yx(e`(~~X71&WM44t`X|c$Fpr}TjW{6h* zNI9?N@ok~ScQcSXwP^Td{L9=|mS3qLly6y~POq{p!{UXA4;Ywq71%=kk|3MsD^o3@ z>ALcrTEJVTcUnSwkS;Cp@pp3`Pvpl!M^u)S?d*CoT;6lh54D7B+K3-_i!0NZF0x7| zY6!BbikHr1^fMs0UUI-=1&m%V*eFhwFXEvnE)1Sx1nwG+iGkRYhh zBjTr*Akdf#F~BsL4maXcb7rr|_LO3M_my!G{#J1bpo#>F=)Tv$-#jywQNj+y?# z*C_t=i!}8t7Q`pbBxgscnzedvmB#ko<-59YRidPsd9$$P2D`IJ!swT6IxRsgGg_HPh#1Qk+|tH&m=au}p%ss)LiTc_lLI^Tc$ zlbUeINw$^R-k_jr@NHOyrx#8Wm1*V$x$)l7ftyDwuIIg6O!r|)RWVO0ye4&JF%4tt zJ4r%(j&ts^qQv10z?2rP>?c9jk_3V5K?@Be>r|u-EIFXF<)bt#mlL9r1fCr1ds2zd zaJ8MyJ?vmpMC{Sb1cRj&Yzdy~o**;=JmR4Tck|j$5n5xi_t1)m>*j<5U)B-#NErK( z;`DKCz3JsW!Vu_BIpqn|v@8(hMEPo@Se!F_?2=9Sblz^5#pQ2wC9w5LnY#1vP-VW| z@nOc1&9qr9YShA%I3d%Q&q}#&!GNnACYpFyVVw`N4>Aj(;8}$eoG8$AMk6fv=_QP# z5UGSOrygwoyF|StOyM-LgnHxw>pt(eT`N5ZQ*0xpXsJy-y{P>cs!pL=&)RBUWn{cy zrDV;iW>Aun(oj{-yJRiw27)40#e5h0VTH1)VeW*5>X>H+~wI!m-C6p>|0T#>!3ZjBRNk7R(P;DT@-W#@SAe1_c zY5^vKLJN@T-%&(|qXZ?&QiC2+imF0H#742CDT$*%maH%3qnOeTV4RZk2eNUI6jZ5q zp75~5eYC6|EpgMONT6Kxz91y?={tOft@Bh3ZF3yeZ4?~Vsa(BNK}jg*-B>cQ!&%>B zLRpnBJ6mC2Pg~S|MjZ0_H`}=XV3e@6L8ily%_gKZ>7Ac9tm$H&Or^Hp)5E=9z-Tg4E7#<_Bp2go9objb&MimF~q9 zWh;V`lV&ME70juEs(Cc2A4&YB$&9R7D~m^xj2uNqI>1(SxKRHTPhnBI6FD0sls%m~ zbo`J3u}*2yT&fq_SF#mtpRSf_EQ-Ry44~=NnrZO$E1TnVh=?PUPWordzg>d|D*zHI=F_lCP%QYLj>D9q8sWO0uA{4O-(*h`NiWIi^CNz>t zkTPk;Sv7NQP>@PONHX=AeEpaD7z3pO0COeODh&!%A1E0Otq#0ZOG&Eo1E91OYMlA( z*lR3i7?8n~k;;(Gn!;$L8L_r6Y`r3V!^CC2AVw0|3NRG5D{nch#1?FF${II}pdwAc zW^=QCR~0#C!&W(Ix(byRw*adJVoZVTyWta-s%tT-6e!DZ-16nvj;Xdae}Ed#a4P$eFDojSxrf+KadhfTuKHR z68fQVe1)0-49!X=W79-Xjiao6Q&E#WHowj!?eD@Qm6<@|Ix-2^yj!N?u=NB%c4h-{ zZA7URY`W#_i=b-bgTi@Y1`$FOF0x{3)?3tG9Xc~*izH4xB+Gy5oU!PPqCin_(V#}C zYNjd=6gz`(C8#O2P~JDlelQuHk11F~Yg3y7Em4+Q3Q9=ol!|H-kZlQwY<{VVlf5F} zl2em)gi7{S($#FI%C>);>J1={k~81dO@jqlO(ru!7*_d|MOyD>>F|urP-#*~uV6L3 zf+~R{TxBd~DbyZ=?JH@kC7;MBi9Y)z^u{#%ARgJU8cU1vOmd=#Q;cfV34_HvA698X zRK$soko`3il}MlW5#s)ot3E1=*SI6RaNKfrSw=)%>`-j_H9}lEb(300yocg z`V(1xl51A_D{`>|`!2`af~(9_$B#K%iPgWGPv2>FQ#;p(G)&TYr);Aq%r#Y~t&0vq zcKRk;1g0qxb+Hr0pji%*WFS<xP%~fcVzQoHuaL}1_i~n zi{>LIEa>1dotd$WWd^~Rhic|C>6SV%o6v+-4N)LgR|yo>gRAX!Gh4xuL1s!$ zepC%x%GYK-wKJfoTB^w8zS!zN3CCQNQ|#oGEh|6f%eG;hmaVV{LJDcoQ`LEzFEhDj zL#gWWDSK>l9$6w}Z_207e1|Mnlr2fC*(lqxEeKGQ`Rg(eD^)O`qz#ME2@@{th|Rdag7}7FNk> zr4TD@XsO_JK^$eQ&9wDWWHW*l5mJ9qAN4GDm;wcZf*!(l)~G>DpfaBLiwbV~YCJz+ zht-mq03bVT$xM{=xoi!jqGeOd5=~JpAu6TG=RQ*sTivF?n9p~dHE6Zc%1^sxb(m&b z&PF0KIe_fdc_$&0oT(Zm6AQ5ZmgIB3!pU1FemB`UP135O8IBX@OFaN4+XdMf9>mns zILZf9X_5-ItgnVY;+~Y&2VgGk!_bzjylF^=?grb7$z^YPERE7|94H@ymTQziBm2Fo z(#+ZrR{Vv1B_vpC)pjBOu)=~YoVi>gf}X|}2~*wityg=Suyv~CGY#)b{v)Usq! zrL=Z$q~%#%R{`0I#eR(|d)Si9HYtEgyN+v*!h~Tu-(@YHA0UtUBs*Z4tZkVkA)ToK zGXGfHX5!MsT3XL!MtCOMWiz!iB+e3-K;bPVhvjr7fRyc-wEU=@=BPSM-dJfeO)F|> zC30a^mpVV}JSCf^od!77O?kP64WZ#ONiJq1$|tGxy4XM=OJZ|RY75IV5D%~g^&_T` z>EdzuEC8Y8m{mh8er|JfDj4=vORcCo)RW&l0ekdV*pB<0oL21+_97?YXeFWJgZDaO%F-A z%IDqcv`ospB2+VxZMsu6I8#AVCZm6q#+`CXPo~@|;-O&zaXdSe+7{A4YldhYC+QgAv@Am_bUtOvn@l+NL;mYZAp>6G!-YW_Au3{b%uOJmpW-$T&6D~ z6aBTNpiOmY9gHOXwW?~Z*LJ>3q*+}7wMBWV>a;G;weHXlLjx5yPV>1Z&9bRzlGPPe zxw9t;5Gz-WznOLF0xt5qj5SqZe5Q(FsQK(;GkcOMCq6<5k+7y(%+S`<7UPoGu5zQN2|)(m-KX&Ljg1 z7nXu4B;oi;r6;RdTI`4fWg9wid@%|J1lmARqBH{q(wSI-0?kx8j7C`23q<4MM{U!& z2wGNAE%QJ?0|awz4-3f9a5le3d05{o;jH&+HW}q34q@v&=#ANwzvTc=2GTT3rrrqK z+D-)zIgD#jWR@J_xKTx5k@$S39g&JEv|tU2NxUVCVfKLdI)xHb5egzg3{6LJM3tpL zgZ60b8uV8YVGuE;ja%D#AzLUQHK+A&2-E^HrfL%vVZaoTIDJCE%pxV&x~3?YCHSr| zNYXiLlPRJK5C+yoQ(A0mHedM?O&b8Q z4m5Q>M4Ji&cI~8w#KV=-CJSSS76gAO)2Bs%pbrzI8Ek?IfQw`tq!3;-w!Sb(MAQlR+(zDFW-EkG@pfnL^;8QB~_GWZL6kIk!U=V zCYaM?md-wf?+Q?GL!lxiGixYJZ0=}+6Dh+mL(Dc2P+2vDJQbv|7Ft8YZbJNujpDG6 z5bUi`2*Sb8WMvkKqfbo&gk1@#HXy2jkXEz^awfDFGfZ@-l)>C;)eeP*$AY(8T`H>p zBtl$>Xt-3&j1^>)Z9KjO04PLCaJ(_gWT-?dE+q88tbW*23z+yu(odrTo za2X;BRy%{Fscz#gk4RYeQuTFc{0iAF4{VW=|?TH?{({7@z-!i5y7 z%;`d#ILZO$c#sHcOOG~2E8B(nR2!?*jKCOx6 z1{&?$(Vzwp7y1nDmEJCNb!)d}Syf7ah&fi5D6y(gIt#$uXhEYuqd^T0A7-~=5K}3l zP*xOFl<^`KivP9sVqDd!Fi{yVxsIDBcHBi3D793TCd#JvHX%~mq|m&i>E2zd87Lr9 z5;KKX7KuwG8`Np!DkI7$0l1*lqN1S{jpzUXAOJ~3K~!eYv^_XcW)oS}M^%<>t z7pGNw?2tAFLpoLxkln=?4Qc}2ZsG21e z5}GE;Op47X#39Nx5lAfs8!xQVE8wD9I4R=XS7ez9Mv^ENh$)I!5dnpN8L0eFs-csV zd=xb_j=TW@&N^#vPhAUHn=d*t2OU z2#4HGVw${l58Im{o3Bb+Yt@cv*wRN4C#ve4TRK24C~XTe?7P+KilWY-4Ky^KuuAeL zH3X;QvPoSOlwsQ=K@=uf`!AvKCUQ8 zOaTO?YBW0oG&9h}Nj7$1VP+9!E~3x92)GDRf~*Iog&6_X`D0^R6p%0*Q0OEoN@3y< zQGmICEhNH!I)8_}#EV6$OWP#brvhT8ir@l5i_==*j6_K}4(Zh}6ay1#6h8{rSmq!hS^jJWgq$u&Mb}6iDmBthQ`l-t?SQpHyYjnjrO=gj!EX zK04U|v>yb7>gxBHy}V-pFy)89rVgdr3j-w73DTxRmHTRJQP`RxA%ulK;#LBIAy9~o zM`X5cn>gd75T_hO!C6&8x=X~~7nhzQ0uZql(r7ORwsISTOO&x+sBV_dE^OA6&A60d z6Ee(PG{6NK4QgegA~>##2n0$@q~YaeBw->T=pigx5JJ7{c2uf9LDbQf_ z2udN*vedFyo4x2QrD=nUQ(J2+rp>Bx!mSUtC{APpA^#IBlR#8>!ajL*U?FS-q}{-(s|RhTk`kz7 zc#V7yNJD=Tk?J0@Ojm{Y?&MC6U4#N8+VR~nFJCyQS((D*+MWAgt1&jl5DZ$ zAm)Z`Us7tAD$q;X`iXlPs?13Haq+ah%}^qt(c|g-m~GgC+eW{X%#FB$m!_hqE_Ijc z-nX!e)91eTB>KoU9BsePc6qX0DqFmPl9&~ZyC11D*qmtZsPf6?hLN97Nyd=8onU?! zw$~H&0lP{ud`oSjXFHt%ffn(on5LcCckaw7BZq3bgf(8}QM4{iw?A^%`AV*^s zOj4ov?VXI%W1}sk;LnS5OzD$@$xvR3;V0K7awV+A`t`&5n2fLpQ3jU^V=w~q$w?Tg z^8fw(JJe(MBX!WzfB=2ekBPaX8}6?NI77t!<=aF^C^kS(uS1dm>fyBkV%13;$-o_6 ziC?w1mUi~S{YKB8NL}}C z$31A?`_$>jwnDaGe;|m4mCA~U)OX}44G0Q zu*X_g-RNe0#7qYj$#1RmMqDX^w*bdQScWX8K`*i^{$s_ai3GP<-XM5%+rK2YKY*=% zI>t>Rv26H;Kp42ZkvFsE+VpI-i$N8h^%QY)1y^QhbLy208cu9j@06!no45im+d5Z| znDH2iMtmf1MYj1~*uB0mHiT(azZp)v5_Gow!2XC>7_>%ayfX_9e!w+kF^r>faxz>@ zC=45At5P{q(pPlWuzEd7$N&&w|9VHQGvrWkA_{m6{k?&ML26iEi7dIgS#O$h;fy3{ z?uNuaVxfjdwCw%>iiD>e$T=8Dx@LUt`l1A8c+0Ic%;|0bsQ2jV7_O~Za0Z6+`WK5} z#S}_%maJ+VoPRn0_doErN44Ojln+Vf z3T}R2(^cWl5V;M!Es$2{s!!mQ>w#&Jt2Sy$j3VP8N$z%Txm5>yHm4oo(Xv+*7ip=! zfIpsmwK%j+D8Dc}>oV45>s3#q!xKl#E(MGCk^s0fBsO32lF(#$UR(yBOTOi$UlR&! zH^epitlC0=ecuo(%j|>DVscKHsdw?PT?Br>F=pe_CayN4pVVJa?-pJq$Epg zn-jcLchCb+DGm>MF$CY2ObQ49KB(`l9^73pWZ$_IKQYzKAkB{=mk9%sLF*`w(L_bUs?U{ zZn?eLuLy(BoO~&{@!_=##i!GFj1#p42*-*J)7N;N9p^=rorJ@51?*yLa zxrHT8KIngLH`R~n%$MJNmQP~Xf;4O_TY!VlxDD>=XWd-N%fROkBgYcHzH9cozWDOL zSimHCLnma5Izp))nD>kwsfMgk9B2OBVM%I)!ltY)L3{?#3Q^?Fst%m1z4GwWcTR?)UR6TivMrPf zwkUzk{D#?uEHi?cYUHdwfV8>Fmo2pzDPfc8G;?q-UhbEGH!N zRwZUv?UnE3w9V0P@&WO975B(q zz;u$pk?R?NpZfe?_0Rvvf250ibR#4F=s*6L-w7Um4$i^(lnT9o6%=4*2!f;-+EPey zrKsvvy%E2Rx12%kA!zh>y77GR{mw7L)t4b%(h-RGT{QMapU#%F4-2cR`sH3o~@#T-gBOnSpib&m)x^E=!3A}14uNl7v%C@%>fFf`tHoXUR z)Y<yI&QTgc20^LWgNxg^550@IkxCt*2w(oGQUA=nrT6qH+Is)MN3+c{}-3KfSnE>0Ce8oF|569#tQeX|8-(di?j5fXp=d$le)OXqbx382K z6veK=C-0=FMaZf6WcG$t{P+5|o9l=uQy~Xb zpk;P;vrc|V6MiC9H@2S0M8*NpW{ znBL~b0MJv#o>#VUJ7c$~qp9W_CqOqR8(FH8aD=aZ>k<$Q1fPmv@zxYEXLFIg zdGk|2=j|@wX-hvM{Xj#*SzodOYEI&3y8M+yexu~qpQ!dVaWB_vQdYkrP6#SLP#m=d4C4#U zt_1F0-Ljl*cZt1F{K4p_7TK!vzWKd=XQ^I^byJlE;{jY%kj|@) zUaUy0`ncR_;+cG!m}E23MewS^x|`|4@&}xPFx}I)b_LtuvejG;=3n~$c3M`kxQRjW zgU>(JKm7y$(IzyPtH0io8aTN^h`>TU(OdfLG>-@AD`Hk{)>?e zGz>L#X+dW#ZlTWRH&)MN-27Vut4S2$x=}`X^MRfzr7UJttpQ9wlI<9rZC-b=G^+;B zR%yPpEEQk<_+?@B99)k1MePrOTac-J5a{=7F?vy1Ly%TK$Z?>pyz60!@zjtXVTpF< z*%X}LT6!a;#-4c8BK5h)eY^(T9tuM zT~jmJiCRDHs$&CA7 zvj}eikJH~*_N_wjTi;`47LOc%CBHF%baf+*PK8zCkT)Gwcs*9XCH*XScLg_yrx)0| zB|2gU_3LDG)vcUnkm!P$*vi}nUnBR7VXAB;@sbCNjkfbPAikc~p2=uq*V2bD7Tu^! z-%=~;50nhlp&J}AQD80!&~eZEy~tcjeVspOy4n-fie9%PipOVc`h4#sk-VvxtuxjP zFAjse24bBVY5ym6BETc<2s?|!(yvNfaO*);B!Fu%%LZ{6x9a8P#x-Gm0+aM^#5Jem zMGD=9t@}~m>vya==&wZOLV;jD{noB?R!y#l7S%!)UI2xxPbGSpF1TGyhq5WYIM7-h zkF08kQmRBy)s8k;bQCsIIMm|QBps3jib+0-BeFlZfWDa{+)0H{y3C{3_ zJJt3k#V6}uzTih4pf`DaZ5go61}BO1pmrCV0>sdX`#*eD1^bPRgU2ES9TEk$PBR?oBUgC919|mLmsZVNlL@+BY)7liL3&@KYm&eB;N$eH!w>BBc00r0LP81nxg|woj zmV0d%ak#`mjV?Tx*6gpvlzw5>L1!3@-MeEmeU>=rudR*X4XkC;p6Da_*{MQ)_G=Us zlb(7-CcGNmQ#j+gjIrZ3>Lb0FGyMb;_W0~x9hK&BzHrlg?MdO9i`SP%U=rq8I12Uk zKzRilexsmy<-X*?_nFs>?>HYqqP3<#xr>tv%@)K?R%<_z@P_A3nAG?R=9Cf4GbgS5 zW0{;h$M>)W7kQPrtq!~nam6Nz?htE>qh33_a-KRaynRp}WyM!^4m(6AD*Ot8lJVPL zp7dzwwHaGyc0Qd8kyUwcRdF{wN*SR?hVw)ob|9y0<|rr zWdwA1H4s7PoBO8u27i&Or6vD%<{|{lGB%|+Ukt5g z{Th?S!I(vn1+WSw`()>|L&0sVqsAL@0Dor@$}z^x;V|KH(wF-!H+xp7$1zOL1*vPw z|H@Lly3jhjeIm31(9;i5?&a0+%2&hByDcGk|1nRd+d1QyCkv3ptc7Ksb-pbM3P*8) zSDVw#{^%SPbp#pN``#$xWe3+6Zf*&H+R+(*`6$Mg{NK1&55K~x=?+<~^<`m&YnBG` z5Guuakim3eo!9gzGs$JpE%2M}@S5eb0l02;kWQ_xn4~=v0=f}ZfvO@OrdkrXtx)^n zc6f=j*DDp!uV}Z3er6LpP5#*Gmnq2XtVG4hHQJG6Gad6Fi1tPGc?0cG)3mKk+p|b8 z86te{u1euLXyZm(NpX~N%a_w~;$>cz2Z@xhRS=F^f4m?a25+TGKW1ufLVHy$2%uE* z7fgAbNBUfa_R^R>5pTA+0A`uAg&c+MXeV0~jNMK@?Xb0c!D})wK0z{KIlGfL0#qdC zhs^3l1;V=51s5eBSrP&+`n4b!d^;Qs z$kH0Z18z^0KW`TEo#RzddoexY*N7B;AX8+3NezTjE(30&`LBzX9Upn|)HA#8Qm}IdU24>kQm`JUaLvPVCn38$tdzU5Y0(xo| zN2*5S6-vo%rDLbzb4N}D`sqQ4T7P>T8lT|GgN6TwpsDn;4pQ^w`vD@QKEWTJV(m%0 z{K_l?Ji-pZ3=ZX>FOl(f{hsI=iGBBP1lJn_-0@jUfah(JzqZ0cDivf{u*_h`d`$SdP|2tSd|HlvZIeGWB z8~578z37X4eh;%Fu5LD248e*p>jg8 zR<`dpjz2SxzRE^VTTPI_WJo38?4gz+VdK&X0}vl0 zbuUOQ;}(Bk#ig+$nHDh@2lul>b@loh<2~3eKpS*IX*8xy3#FlYnoYUoq!`A(TEGy; zgZ<3HPj;nP3*q=3zc9(7uVxUVr(A+BCqHq;ga_`~6l5F4BS06e6xh{;txsLI1h{Y| z-FUrelOSLVo(6HMa?j2n#qKcv@D5~HS+cqwB;Ym)CqHsa6eoybi{&z857~d>RXz?I z76ddvT&x@G!4(OStkW{e`bTM;9pP%|TiE~r4>T4^`gLoyBPT#Yf}_W#^o|fi**2zE z4E58Mt2+zDDU@WHwrF|+-BvpgVJo<>7(rf z48=<0dbtQMCYRW;*Qv&_ba4gU-`hE!1?X4Q6$#8PIM07U7voZ8Jm`}U`RGOkrt2mo zw9l&o3fJyc+rJB3Z^nbn^h@hVG$$ChT$rTB@Q!P?wh9B#{f*n;0Y%Q@Yenu9`l&jd zdiq(w4Py^$M-5x}th1N)vubBek~TFCiKYfUO_jCF<)xj*KNTOGFRcsKGw&qjM*GzS zhPU|*Qc1Zr7LpRDj7$P|o~pE}z7Dk9iq>gCuDtmRd@~{%7!&ync9P3}&+ML5!P(7) zMC%gvH%n-V%&k@mJfJI^5-W4^T?1t3&ilwGXu;gv&58Y>P?68fNs#lTg(G2-MTkHy z>?Un8jl>v%G`rfG5AkG|Zv9?%u=d~cBY8hg26oUFm^|S@NykVY9G5;xjZkx3p&WvP zC5@p+$F@hydX>U1FVdx-4K?Ue_YnR_=z%D_%rZd_R1~6nwHhvu8Kb5a$9U4~?lYGK z0a|6`dkJ5+FwHckJXxFYxR(fUa=j_2M&T1^hzU(YD>+$W5j5Hi6N=KJ3Dwo4z8oba zx6!J3M}b0X2H6-@{bVLHem*niY$r=hMyG2~_Y*^=^YA4QP7ie?{zj7qC89`05XP?? zFxk4{f)xaX$KP`kVFHDd1iAnNsyn6l{YtiQ4JGgQ+mRaD4N2yC+MS+e!0Se8?6lvlmx*|s9NmYWE+ zIiQRCVZoD1rU&%5eC*>Y&f0S1G<9V#G~TXA<7KZiGvvKE3`x#7fq>LaU2DivDGg&H z?eSA0RY}Wif&RJ!%X|#|CPs|?N8({nOKu5)KKYv5Vrkr!7ZqzIRh6wZ)L5=jF=WDK zQ|53Vd0Hf6hH68LYG)YY(UYRpznJF+wi*-HEwRsdPCWQ#gKjNo1tBf{5_Pk&Q!wxX zPdFP@uK#|me3RNt08nMx^;j4>Oq5??)*;z?!l!>7Va%E&YAfORmcT83HoFqIaAMqNjMkvynohWL_~|DI*2ZZk$P>}!`ip5 zRs?9zGm>gsRGZfJ6YC}w0qoshmAa!icDwz5(m$B&!Q#r^<$uLs8;giJ;^^wv?iv)<&xlM7Zg|5>sUprwB;c%_G zXiv_-5}oV%YwJ6#mFvfo=d`PW(_*4>66aXV2E%qSRhcl=PM%OLy8|TnKK{m+RS_o1T?@;f zp2fVz(H;OPEz1CA|VFhd+E<1)rU? zH*M%5(OsT{<#bBOKRo~d95YEoK~#!^X_}d5V2!}+2K|i2n@gwZ-a0r5>s?ER2u<>a zy7AQOEO@4*I?`SQM&e_XZ}TAYcHHDQQH7JMQ5ckI+JFF4CVqHS*G-8WP(6E;k_-b6 z(!|AdP6E@9z@esalY5$%WvnVR_xU7>Lx4=BJLLet(fJa|SD=CEnHh|34oY0s7KsKh z#hRW{@2tdiZV{cR5Y4zq`f7X_x)uRol_MQFe(s)6&KEO%s^ZP{Eo6Bs+^e8{?PjR7 zB8wcd+{`ePC$%igl^xlO8hDhdJJR%_H6k25<BKVEgwIcvYmt#oAUc+5tudJ%hq=I!9Ofn@nLqAsn;$yYXR31Q2ak>wXWc4sX zsQseC2A^7k5=<0y)ipRK7{QC{#-CdObJV=MOLyZ8nvP`nkM*L{ljnkEh&3cw4MesJXM9!MeD!%`)mIE zqksQ>e*dHY_;ddJg+G4bdAdiAh$%x+TZ(B|yAsY2b*x%3ybPl$)gA!3vyARJk!#2- zOfonE)Nk1cPUD!u(9v{IspH4EW4~a)^hDD~#w>#`Q~w`UiCpeOC$YqjgFtcW=JGk1 zr>aU}u)uHG3o98=v&lfQ5mTh~SFV42?+0(a+vsxpvH>xGA}T5gf|!{Z5C2iNUWqR| zF1^c)>d$6ua+7=_^;6RKR*Pj0+N7D!_bo-j3s>bCoMLW$Ig= z!O|;h;LA5xmtj0e2jtUSUl8eM8{JWa&kX8ddg*1Uu3fcGkn}YAeUtFY!V^xPWuC}mO60RK;-D*rAWDSQTx z%1jD8x9W%^Fp#f(g*OgP3JX|eeh0x?!6d!Ef;j(anKmIdsl4uA-k?|dl&pWOrL9Al}{tucC~qR@dEYbCj<>fhWJYn2qvl9#+!)7Gl3m=9ZhpNMQJW{RCo z!960sMiIdI@Ay|R^(|ATlV1~ix4;D=QuT?MCSgzs3GAxh`owBfSx zv$vMJmLQ>qV>Wa!m@$9cB6&Uza#uHFi>hRs*EA6>)Q)2qZ9% zgTFW%j9&J&L%c_Z+D=0ItWiJ&%FFq-KtaYI^3BVKXwp zL|}U+ph#xAk=sms$HIgfH{7u~Gs^d`3(K&2T4F8!&p{M9q_fBsYH;GuN*y2*n>DuH zGF2UQrgdXI+ue5{OFZKAVUrzyj*1*|MF0SeCv1+xdro{(KJc zZGO%a``3dabWir5&+}*h`Cs$L|DON)eSZIQe*cAEf8zV#neJwVlw~rd02RR+UR@U~^^x;c9i)PC zFtngz^>Sr~G&(Kmsy0ui#a#F}&Yi`4)8I)kqkm|Y*-V)FEtBhxRSYC#(*(6e|Js;i zVA5CM#)S;3%94o`p~IoV7dr_d%i?Rs0gGq+Y9cpl)a^AeVPqpH7BwW4%DGm6D{&$@ z9(ok37zI%+jElo&k10@7(f@#TG)!563RxH$$}5W}_+_-?(^mi>jV|A3w67rjQ*vK` ztc-SS+wB+39E=^#EEFH7553nIYP6Z5!yw}2QTTM!2GMczrh;SShk%)YMOJc-8{RQ- zlVhG+JET$$0Ckc`(bMnr{BDuDB}|AxKmCeBhSWs}h^_EWV9R$3xBtgQ91B+fOm~3O zA#^&u25Hx?M~z9qx?UP6e#Tdh)by7;343HTdb2~)vC7p81oToAhdYn#_7TF7%mui| zqn30Yip&u&u%l?YkDf?*~;27CA>7d-m_AtJ@%lqOhB zk0PUjo+!e&q&C$C4ITTI^o8yGENB_K(uG8fkL(8jz5XpFkB?~Sfdn4Fd|>RSso@e^ zjW|6(@-O#}1+@(r1~|Bnt*ru{-hu(YIrJ|D+3o16_ zPBXO^713gH3X|J4;kP8rc}{KZyDu!}V0x2l=&I8_gFZM9=6J-7ItS1I>l6;qx_*^l zEDlipaYSOe4eIuT*@KG7LuB!y;yYiyK4Ac5-lpi-cl^_z%_L}f7G z#%WJC7C^`W0eRq~;3t#vG=Oqn#GU$uYJ7=L_qTkZk|Hi5&4~{hZbEm7a`*`)VIQU< zOXgxS?1h2aBI4VZCAoG>FWW9;>QDU!bf?S)iO9>>o*bglPir$R6-G-{<#Xxpxa`fL z$+@d_WY}m8cGU88S^aJlf-t(a83y(NRslTeE$LUQ5)>O*hDRkxNUw0=*4a{RL(XNit|!>fhk{& zGQK#uF&-w-5Wi)-f`J`9fRn}wJ^8Wp8kN$m&yicZ4&jZo`NG8~+%a;6Tuf#V(H^&z zJD@5gZ`%mFj!Smk$|8*xmUZX)+?_#^5e9{m3+yS*w;P^k=}LnQai((KsVzo9T}C>p zi5e_DVH*x~_i-@*VOza$V{Iv8c3kiN>S>h8b<%#&%Dhbs$iIC4`Jc{zBXA0h`u6<( ze1FZKzvj;l`q~TCZmB0mWp#1hip7vRhfztGvfa8>L+RC>%prqE;9m3IPx3nA2Od|F z*p8`J=qa2jbe>~E-4=D^lE$ap2Q|6)XzTQ3*x5Ze;|@##1lIyhw;12Yp;a<@FSlF8 z2bg}2XO9_5zWk#g?d7+eLc`YMZS78X1U?=OdT}|?Q*7yAd}}1lhw^lvsGI9lyH%y} zG)^7#ujl9HXp;+g`qJ#37u-rA=Uc2YSAC8z^oT*wKf2Dq`X0s&2a+PLrUS^i44|65 zBb$b`DO-bOAe3cz1Bbe&Tkq0O0S~AR3HX58z-$AdtA0B+-;1AQ=PVxmWqnc@Io(g8 zn2DDtlqQpjZNsidy7yFlH0UK)+7EL1L3aa>+690<^%+d}qxeBHAyF*+rYdeE4k4=X zYkGfThyh44)4 zR|I>TRc&jm-ccuiuyfUJ2j-rB2fSIsG7=LRMCGcp<2}bZh)#}QqZ6cE4d2`zb?ChM zN(<2j-jn?*r0`O*su%~3WKw6#y=g#J*FXviwp}?jjmN)50_Sh%Z|Kprg@d}i5bL+V?%AkMPq8KrvLOu<&j44K9i5&y?cp^3>y zn;{0GNDjV07mlhB2Gjj5o`~`%YN?qai)kF6L^_+8&5e{(joZQ2TLadv{$X%WTmVh)iW$&izG@_sLJV`ata+z2@}MlUjLaHo(hXlN?(K&S3%me#+ayt zPI{)TQI*=Ht_i>qNE)(^__->!S3=cg6^@b<12p=Scxz``RgA2+JF+6uY{A@QsFd&R znI2zEAx*m)DbF+y71sMFbYCc*Q)e1X#lxwiO&+(bO6hP|VyUMgIsgNQd7j^)fy?rs z)XfNP!35!JEl?%S*M)dYor!*iF(B)P?mit;Lv!kY=NT1&)hkg$+iSXy<<^q8R8HHX z43d%xkl|KD)DW8z4o`#`FvCKLtQNq^z&Kf>N1!?xU{0AmwL?^5euf1Rx2kdK7d1ty zsm4ImmR{uYr1+voyZlH&)Z~lUH?cIu8d9Z@;@_rKHYOI2zRY*dxH2L6p4so!X+Pqg zZ9q{wiAuxwsM058kFd3%vcdH%YV>xM)kyP{ zjPg8)Whgy2=M9wV-xO~RT%*t^a*WqbvD%J;08h#ojEttHfNs}^*n-pMWio7IbOlSH z_(0niqLIErtLITnnc~J2dA559+K8DbU$){ZWm$S>r(B4j@$Tg!JQeRW)OqQEam(%j zHBORGcd;HPTj)9o55pmJNg`&3ji;Ql5aQEeIG(Cau9~1VTpsce-Os4Pa3)0-f<}0B z?TO3wbeIa8=`(kE;a8lh7CzHo1%kX@QmXDdKpGGFft{f? zb1TVFt`bK!XyJhj#rv@nm=YtEwKD~$!K(VCQDkV(rFuh>b}v~^-KK>k*POB$>EPhm zd4&nIq3X546h1IhTtQ`Wc%!OOK_I_|ltT%(nQdxCm<1OBDh$>0tcN0y+9q;SaR_uY z9h>IPAEiOaXOzcNc^IaW2}}vFhz&cb8^$Tgb`vZTOBp4XJ%?Z$^Z`Ua37ZNh3ws}a z%rIp}gp$S(uxfN_gwldwf0Vd!&foB_RmTwp1Q5Ni$X?Lpg)<#g6iHG|+9~I7;ksMl zcp*kebxTselRdOd!Ejcmd^11N!P6CC3^Sws9Cwkb^o=PJ@^p}CP8C>H7q3?7RG6`7 zf?2XDgj*by=RWmGIITRaXe)Cc4EJE@PCGU;hw{Ca=1GXh;%_EG%&)hVr(J0t#$C;f zNQfdnz(ETgv`FDU?OU8IN(y^KLTGjLO-2&mPWX`=fVce1q^FcCu))WnvF1sF(x#!& z`bU`Uetv$h9_|9Odv$iNYdh(*BLAe$;rW8$KKP3mjA$s~#o9%4DD?s#V z%aV?(Z+LiME?Qys;go34r&Xnwmb1Qzq{e8er*>D6Lge zm>Wp~sGzTb%Q5_E6$p*dG5rbs2g-x@D0-0%)efX{>RhLyvQt*EreZ=BVl7r5=OSj1 zs!1EhQ5d83IWdLM@MTvqs5)LrITlSYq3_;#h%#F)tth&nq}7Q`xVUpFH+ijda>Exr zirO1qj{Cp-^~dvHf8fstPdjtq7zo>;WCv96Y;N1k)Xh?$qXwvwASl9uXFtnr>yQ}x zNJn-Kz+ld8M$eTjt4K`5G+o5(RhiNhv63#xGlju))d|PK!B9PWzBiqm=hV^Hg(p^7n_VRwJIfHY>NQ-ICTY~#2C5>4 z8?@qZ)Zf=%Q8wP(ghcv$;20fD-~zLr+y^y0g{Kq9i=B`ecGZg9sliSKYgx1uQUmRK zNhqzbY`CEA)q(5(hrt~0Mh(8jdWMG>8+^)}ly0}em-t*EV#=BZe%uLm!bf-!SaR7t!Do^m$= zJelV3laOG_e~0{>!(CS{okpV{jY!p3Y;2$d4`%4i07U$b-rz<3G6;mpPOw}I--(4B zFvLbPQ4P0SeX$5dFG47#jpSssUFoXEg>gn6deb}ZRm$>uvS;z+1$p=>)b!ILt@XH! z=qi>?u7mt>e#yjrVR#%}P>`VK5%V~J+#FnvUWQN8hIe#Xq#cLLSfgYETc2Y0(C6-o z3{96Pgv*<)FJ(>KeTsZbNfCFzLoK@{e5T_YZ%zWC8Sqm_h4g&2he(PDp1<*5Mc9em z3>)Vtz+sh&G`y!{!)HghIi`IyMJB7hL`68Z{&{{x$9~&nsrVKtlR7{qT%nm9{SK3T z*3(2-OO;ge4s`2`x4w0M#B80XtLe)Y-j=?52BY6k9HD6?o zA2Q1j(2?3=eSs$;OSSh!;}udHt+*e*|zgHVWe#9_vyDru9F_fI%};ZX)6*f`}1 z`K-31O?K8sa!O_9GS4knE5Kv&`Vkc2Rc6FOA%+Gy-=aOAw-w|wDBM8J5YKL}C27_D zxSlT!M#9oBuBcd8nW0URaq4*a+W2-Yg?K2L;zOBjqxn*YX)LTNSHf(u`H99c|B!anf7>JvBk}BEn?~$QDo1|5TrZqU(l| z$#b8E^zn!{lItgpq}&j8T;~j*XbULI23*{K{UYL&6+|t+Vau2RBUL4X6klgQm;(Qm zdr@=d(*t~bG&ZLpeQdK3;;aIj9Slet%s#` z9C%3xDltsX4&ih)yG%On0_4)yIoIzpC?W%C%*a@G_DAJ>L|B*sVKjkbxgGvL^>3!96?UVUVE2K83)}tYjkErO}bk2MR zrSy;nJAy!n4I<_XJ8uV>a5h93dvk(tE?%8{)8KKLr0u3^>K+Wi156zas*`Qf zOKc1#Yt?Dt%FbBj5=AeT=-Ezzt@gtZc+i^py<5m6Mg~KCHuIG2A)xv{LN9AT`NZYy z;Y*{6sh-Ss>0_eHdi8wpUFKu03G#3~c_Qh0ySx;#Gd*a*g@Brs!z%z4<;nXdJDU_}Y+L?bkkBpsL#XvX9-jnBH0B0p_}+$j%sUjJ@9c}@}^D(Mj$2pbmfUs=#n}$;Gx8C{cPOI(}vq1 zW5&b)ZR;ZJfxw*vP_I|k2UKM%K^0=#3`%N^Ga>4Q_~&JHSA7zYgFYuQLV$P1l7lQh zE-9B1B7(R7GwW=dS?BXNs|XwCbv<4HU<;oP3R|q#anG8jnDneC#f$PK%ciXyGEaNC z$o+t&e=K+m_Phcn(^@ZI`PvrKh0&V+@#K7Ro37&EuEAIFqZXj!gZoS6KD7R8ulCy~ z|A@6*`RWtNRHQv_M6pw2@#*`V%KB+-9f0S`sy?RQt%M(Yn)c5AoF6;Z82AncAjzO4 z7C)s6+Ph!o4@zN`b~{tcCS&5t;@*v99t7SJN3sW__EZzWVjMuDR#gH8Vp&{$u=n ze0+jNS1w)W zo0i=o`S!`rpAYUl@cdxJp-T}j4qk{mal-1|f#km~JX1OObo8^qZo-4uGuA;?mp<3= zRhK?(QH*VYh}=jGu6lV!9&uqOc1eM#LxhHMBj@{op1elJe!gryhi9k7zV19>n5&Q= zC~zmy-0XI8{*FJc@dg{`fqOHIEAw6C6-s9@zDB_T0@8d0g zKF=GD z`bv(6d+r~p6j6t#_C9-ZQ*yR_r|p&89=Et4&+;BoyBuZLnj71J4jwpo4EhPJ{I~R2 zu;SW#i#6wCyW6%-Kb8B_e*W3P!V@F+Mvc;iMGLBrI-YPb6db)WR~5UZbTU!+>Bk4D z?3+$lb#-f3cE{Z_s9Vprqp z?hhw>CaXku`d`S6Eip_MJ6x6ylXz8$sNGM0^ZxUX%)j>AAIs!dyU#whl?{crMs4@IzAgo^C0qU25edem(-c>jcItuKqE5{LdZLGcCfXE+sEP~AY*&Sa;Ttyr0|VB z1B*q;#lrY=KJTWNKD;R4j=^rAgji1t(ns$sod^-pxu4g0tV;X+r$pzCQR$`9okEqB zC7d#^_x9d^uI+Qfbs=DvxwVB+R$yJ=6T0Z!&B_xno2s=@OKG*&ul~5LoU$9Yf2WLL zU*NG1LH;5BJN{a$uxM?aR@ug#{GHSmI<>Q*lk+J$Iy!+Ed;qmW(`63^mw0ga>%!Uw@*Y{M%Og;3FM8UnZZxEdjd!4vF`ozdiW#?4C;x!=C>k^YMF(U!L)Y zptAyfdktRxR?g@3KH}X`?_Evro&5N|+`sI%Gk1sR2VuWmlMl;E#G7|Ie%tlk;Lk^o z2LIH)b1zfM`suFO2Vp043|KZ1_g-BZ4lQ80H`8oRf`!2G4? zXR*6t+x*KNe8q_>XVv-+(A!3Ds;56Fa=z}p-#R|+cG^wB5k3_CT)E)lC;gdAxru82 zh7AusuKkw##QY=WoAKJlmU6QQEC&8ja>j8Bx-;R{CBG9}e`-Ejd-O+J(1im9@$Vk` zW%?akDGF)ZEA^u5#Q2|jGfpNlZU@~DW*mebWE{wOTJcHtlkdT2E`J4_V7_=|BZ`BH!@8y6wl$V<<*pU&BeS0P&u<5{Uj-YN+2>U1UDdJE zF^qh(>AOrHhXh^G9??Fj9hDcOJrQK~L$|;=NI*NMzYy{gQGzPQEFKK@3DUx5VWqK= z!S+E->p|<2>jyVz8}jRkKk8J@K0f#GW0#wv`|(?oE>RM0y7A{s&U$yh%f4;%B>IbF zrDQ2&5Hdn60WN|yJBCkuI?;Qp=zQLXT^A<@r~PtgfxFGY)}(itZJaH-F(LdxcmY$NzE|Y103mzFMU|8`75t6*pG`{MEWRwcZ~`;cs(qUB(nS9uwZ z=~I`R6gEp+npy^1+ql)ceterb5it6FQ2W8zw#Y|em*$?@C*Ckjcg}aNBb}0cZ28)< zz%p-m@kRP6%gdF=!$ZhW_fU#AWx1bmc_IFo+FQRHA4@UHo65Qw{27at>V#{A#>$OK z#N_eG-+Xf>eVc}-IDu?z+I5qS$#3Dk#sq~9uQvoO#Dmc13xvhQ<}&4fAUu$$#>|*i3{r}Y|0t_>UW3)mzVTB?`$l^i#bel1h9V#aApn70mS8rJj>8^VTpPuoo^AWs12 za2LPHo)OkHXBb0Fffq9wRq}-wkDO3E6cRi7YU33&YbGm44d!OxzTEet*Q{qcqcA-s zJMdEZss4kgY){p5fM?mK^Vd&%2(D(AuL-GTxMqW$(;bE6BLqV!4$gL&*zQBhl|IB|J09kV>P`Dxi5Slcf0d@_@mEDjHi4Xs~} zoeF;2Q}fmn^Lb_N>)pC$tnF<)D+4Rx%?E-DH{9Cr6BwCk z&n7&MGi$b)2MwjKY)eMtev@;0Ceoil7IQu7^AE-2ULiHofw%N_0+oD4mG;|1Dtkoc@iI_1= zke#{O$ieMA;(a$ln-3AX^DpB)_x2C?r0(mfxrIB?L-&I11otTn#BpYK{3W<_7`L`0 z!?*d-O;0G`WARo@lF)CZWsA2gpD9j#HRv{okv)0A98T16=DQ-u7nQcTvEjS4$ij;6 ziQIdy*rP|S^up8CzIW0$@2`|!?c00tQn)_nWM_fiwM*ajJl+I%W{M=SI-}KNc-6-~ zzbm$Ze0(C(KfgPSuAg4z5%4e0&O6l{TIB`NZ zz{O4b`lZYN9nSlwCv`U{$WI#r2@MTZ4pmb|1h_*~w6wG!XH_Aps!F^olmf$jgKmc@ z`39c)&rSZ%eJ;5MItO_81$iKRPyD>^?K_CzAU!FmpA-Gh=Rb71hI#z&Oum8tWsAok z9$6|8wepr~JpzoBumh zRTZlG&!PV~_5U7f73dmp5#hs|G)UjlIlz@S`CUZNe+U2b z*uCm6?>&9+pv&V{=F!YRf}I!PZ6%!1g53C0P-Yz*8XOJF@CmiCsfg4YuyYJli5{S5 z?)clP{(rbJgQ)C&eqvEOA6U;?2bavbiY1E3xqo|g7rA9xkyKsfG$~76s`OJ zx-m}?;v3y17o|*QU6(M<0!j~O5i(|KVhGzX@1BLdOmd33{=aM}C?USc0phi|KC!?R zQ*B1Ez0367jFvIcUl>cK2J62Ip7cI)fzdJ2^8|BHEZj_iVV@IDDw|_zPv*$c8xYJd z$^S|NZz}FzOul#L8jD|Y73=qHoSUM^(7eUjbU9U`?7wK?KRP0& zL@ganHyTg!Dre0uIEA~(Mve*7GBp_4eSy&fEpGjEPB@k#@h|H5kJPDwNYj{^fDAQ1 zE%Y1kAe5%X4X~eg-wyVwF}}-Oi|tzsKuGO+p`jQ#H?au9u)SKuNd(e7+3lb(a zZF1v)lXF1dNN#=oQ^ zvQUmW%GuEPc*9oD0t9}WQ}kAm9k58)jvMcS)N)^S6xAp;hi`fPg5~olW7E6QZ%iG$ z)r*xk>*SVRPZcX+t@RbzuL!hEZgPf3(qxl{p~}X zwi`2|RrN?6Gy5Qet#ROm@gfAU>Vj0Z?zkC-)WJh(?ljA=i}WJg`r_rv+g=>kwgBfV zw5ZTq9O>>~ARlr;9{^f4nOFl69Hx17_s<63CK+}rD6 zYQyl$Q$ot!UIRKf-H&Vww|;?NF>;6%vZe$82<-5qqf+%RwIjzj>8@|CGVR2?wv7)1 zV-6l1nH+9k(!%n`t@#>!l-^}VV>MSl%vA=au{kbGU(_O@UD^4#yX;?Kff|C8K8meQ zjKO75hloV;oTNa-hqqYk8Fs*qb?sVOi?W3VcH0{DW$HvP!D<7?U@J`)}*}|2M?A`L@k3hjOX0uUi ztK8{DC{-8z2Qy*AK8$M@T~lhN#nn*z)v1V}%!(v;vVhB#@L^FwZS?3tnJ^Z;EJ2;q z4rzm2o_u0ze|OwO;Una^MDLP|WJAb9wmM~c6{QbC4?)_5C3!Kxkt=h< zlo&M2sZCh>_w>QjBi8_r9$-?zl4Z$T-;#fSoMVhA&6@mTI-fCoj%Iu?<1q~`59v+~ z$ZasR*LFqn!-(p*cPVa8eQ33;>}YGIK^T1~q)>TEm_etzHp*vFq;ie5IN>J;hV|G7 z|2gvZKT!4|GJF=rqfM9wjEByU7_8-Cs~I zJGz^2paJGIMwr$N|1{@5fXNjl37Rk&~8Tm*Z2oz|*pqDZ^Q9k!nPE z4FA1_X&i1D>xyzfrgft~LPC{c+~n;X^WYwKfDtmhpSkBbkel5lz70 z^?e2R0-c)oiDpczE@FDwEN$IN+}3vQoe|=qX+~<#+@dPHs@+Dp3%%^JuR?=eJx7~Z z?VX&He9WHDrF;F7*9?$FMZMXgRlq&VI|6Sv1fWIgeaAc=Wlavcp3yp&C6h&*#D1|n zaLhx*7dZeSi(a(%<_hHXO1jcoZkHI_*UgCDWYp+%ktx$>`=#IvyiU?D85_=?DWhf6 zM*KG5%uZu-IL+I8tH8fX$f-AXxCciRF6w)@af%9qw2C#FttW!qICC!p63%hjN7zzi z=m=s^sfPi5;?O$Z5vYIjEVrf$t$Y_bPXC3OGh}hD+#2Sx7J1_6hLG6=@cwvhnl-9$ zG+-FT!rM(OA@5={vg><~SH(Do;v=tn4-2NnP`Yf>% z=Ko+-_{RjiFJ5~*h=G!IFBno4p2C+G_t6AP^X8Z0Sao&)=ML2*bW)FcG9ps zDV(MO@|Y%(m$_JCl z#`_zh=yX!{WKhBe1366UU|&tN?N#aJ0X@a>?+g`O`aqEb7|xs;*iX(ZlxFsJpn4h5 zB$;@fn5c>CT#xx*uzeop>m_v7#anh0852r#(3!Q99n{Y9J^3L0J1i6LTU8f&kVLI( z4)Q443ZItO+Kyh)M5c(&xQ$TydkK^|8VM5R%5kk?yP@YY-sGhqyvP&$%&)P`<#bxF zKrSLu|KB4$u*Lqw9>AO1_n7ZWB*rPv@sTh}49NiIVZY7P^gEu+*8PDgs!5_*VsM5% z9Uea!)mib%8c!I>sVBS@rcIdaxH}cqOP-LU55H$__eSM2mHyq~^qC5CB?78kbwBRi zdrZWh<2b=dV2~YR2Ht@PoMCCYO`S5!c~t;4a6isnPzAKo+{AL8IB=V}?bBnO!hZZYQ&_o}%Qh#M zD^%4#We;v$ooVFFIB__`#V(cj2zmgLciaruKgTkSx+SaBIIFpCfj~<8&!(`NMu@!@y0-Hr48=?DE*n36n#;- zl%>;D(Mlp@LV=tJT`b&38RpuG@CnH(H6WP_bl|QctGU(ICEe(~edaTw+-92nzegmt z9v&m0iWEDG8@t7g6Qudzx#x31w|4HwS4@}>_+V$hw1slRftnoP|R#UN`~^} zV5^3kyv5Dg(Sa)muRTh>*5n4hD!vz})sZvivcf}YOd6GMcM_j^A8QwP2XZK%hBWR)5ZQ>0#US3ZJf9!Zj?9X7;__=gxN6< zV_;oL@Djj(p;s=$w)te=c4TW^fTc#D6B_;5dA|P5P)?Jh3UR_i1#a&=?lxRhs+fW~ z19PP<^1!?aGO&kzr+;hlTqn-6RVfSfpS zvq+Bf-jfw7VA&=_xu{JUqrp~HPltT{P8l+@4*M*U>09+0Y9XAD#{K2f<=N&RyQ+|%4GzcL|nT4nt})yxKgdy$_ci3R-Sii~wD z8-#3~nQ5N0Lq=82B=qO#ud}o(a?Nt&&GW<3Z+nDk&X&u!BIrD;dh6kYY&-#jBJGpm zuC(E7QWA5HpM>TG{@GNLWCZs~Kl&Gn)d4x!^82lc`!t^f_GT&xGH{DKAvlk7QsowG zi)Qq=I_)UwPSu?~Xyng4r8IJQ1o5<8Z+!jn*URH)QmDNq?ddm_i3nB1{qR$LDEkTT zk3Oe6C0vo`)nU`${D}>j@S8ZzFD{8H${?wtqGv99v5400HfApE*6i|a&7gw&EC+WPrG3Z@~9JBa;_@NwaJqL~VB zUd*m}v0ssidp2=@CaOLYWqll|xx>BN&P14Nf%t3!oD!bGZLek$Z8L5Qylt3Fp5|*^ zdV#^sLQtSX#?zq=>*m`VZo_Qt6m+i*Q^I>LHws=YuhFqC_ zFJK>Cl*7@gSYtAOONQ8B{ASH{WcHfye_5NSHn%fp<;x7!juwB*F7u^9kU{ zTcB!bn_AmjyW8pj^0wuf!OS^^bWNYB2=HuHC3#XacnkY`XWtyOK=VdlH-Vzui#`oZ zZz-jqyk51l!%67*cpxRpUWF*q2Smm);ZU6PuY@55X8S#6NDq7dFbT1@2VtEFhQzEv zOL#l{BC&i7cQcqP_br#i#LPV41-yg3(%Wia`$ovbnLzsCnRzAEPNOW+B3>NsZcM8? zTFk^|IIcX#&z0<^RJ0dmN_L`Dne=&LdOYx%EgDE$KFnN}qwzvyJ?$4tPPRDD`1=1g zJ_DrM;MOod31NK%XlmQQSoQ(_`{_jG@BT~Wj>HF7Gg^kkE+>B2?6bc%*Sg% zxu1^_aAV)NYB`P`cS|q@<6njSlJWIL%|~AOlxhUdq)vbFkIB_Oe7$xndE)Zh+!Xke z#u2fqD|3#4n!gu_B`c{y=uI4Y0V^{6^cJdMjtf%k;pJ#Z#HW&A9|r;EU0Tjzn- zJ0$5je$x@)C+X&)V+5jgGuNYg<5!~o20I)8H|V9R0HEB~Sia3*gg2Eb9s}w=5OIMd z0(+9(*=CdrfQ+<&0SYq9j~tc0)dpDn@Kd=ntZa+i zNI$Gx%1s`bc|0g)5O-=Sz~s~-g!CFWid{-;{rp-Bca2V)&|-egU0Y;-Kkk8acSS_+Z=bB(!FI7fXwQ)`l~y#3|NUpp+U{DjxTo-s^Ly{tT{uEP7QjK6HBP zKZ)!A$|Zyc5kT%r8M-_fw?w5juKjF&A<}t}!KpP7#$bR30Kf|~2>VqAH7FK`gXDk_ zcpR?8q@eiS*m6TXuMsiG}f=mviRQh{>Ep4_zLaj&xf<%+^hNS=|pS! z3^d|S@YYZ-Lj5M>}h3%2RcKfj9 zgI^Oh=DFxBdqNJ4lYoOTZK~a!W`>l8mizj@?maAA@cd4}zG6`uOn~Ry z9s9eP;r;jX6veF`!GGt(^v)%ff6NAlA;=joYTf`?{eyjusti`{&6y8<_H|Sy0(2XC-|1K(voB&AG55lipjvbmMGJ z+x7!3E?g+D2JHV8Dk0&#&I)eq0->0hN#c5yUDeIZh@!yBj9M?M( z+6aw5OCcLPgZWwSi%G{^=bH<|ra2GF$eqreYtXEbscNQV%$lgcJkCKC#OE@3{#Bwx z{*`(uLlNe45_i*?T_{X5G^S1TZ3P=-$sD#1V!gJ|%#gB-{k&EpOwT#%B+#A~PJr?1 zu-di_w0StVP^o`$9p=fexv22*H<7IFJdF1Z@4t#xZBZ!u>C)%$vnc^rm2tT#k`(Rw zrT|{Qf7hEiX4$;xZMKnq6yp6#qfH4Mt`lu4jk{;}%}AgF-D@eR2X?z;y`(|%KQm;Qa7B4j2BTuOxU7abOm7SY2*n6=`w zfE+b$#0NHpCo89!ZOpDdP==Ev&~&ih0P^kd3~MytYJsg=fnd?{+YvXLS4LTAlC?RV z#-Z@Od)}zx)pJr1GxPEv&-K(btHWZ}SdfGaFKk7z?{UBZjCa>1`9lC^FN)Jl(W8Du zt-qGlTk8-*G;efW z^Ar1OK5Am0ECDx2ve(?p*;eNybtu1#b9n#xtIh0H<+a&%qk%N**%*wU_Y}dzChb|| z^P=ZRF`=IGlMVi9!UE1e+pJ%b@ybR;cy$5XC9c3wg&#e$1jbnijlvV6@Fmf+vdGyI z{W&>v=IEMO`+c0Px~W?Dsb`1_|5)Sk?a~T$fjhc|pguu__u6wAWpK_9n*>lFBzD4a zfou}1Q&MQuLiUz=w9yjm)Acx8Kuoq~EU~Q_`DkUcu&n1U_};r7C@7Ms8Jjg(x?4Vu z8=O43Eh%~(`;8(JcLw<)h*cbJkQP=j8}n5_J88N>1y`M-M+y+EP7T-1KzW51X)(t& z=xq5EQhSb9ha{93PRWy`ITAM<;j3~enjEBM1-s~5baU7LQvH54s3>pkhh`|q9st=m zRx*T{ED0>y6SqTj?Ipj9DB-hu(`kkDOQLMnZq!4wnj4WlVR8^?qsevR>I6V-0 z-Ql_sy-b*HpEKoEk(Gif?rhQKhD}0|Bq(xR6j&1l#_&)g`}FjW|D~2s)1EOMN!96y zbBnUaNcC?`G%ekYl&9|aPGpmMRFo_C4|fGRgC{XlDIphY!9iXHBJA6@&3WR=T+WSh zbakKN8tS42q#XwXdnz0(U1UN(yDVB?M^;%j91So&g12wv!4SQ%S-jKOY_+*Vy+;~* z$W1`IG3QO>%7=9(0p1d^@eEvmaY}I7P8;)}1Uf8b^!m>?VE+5L7dXsifLtQ5I>1}3 z&oY;cT0IY$+2U7ELG`**k8Rc8h}kfPjKiMB90h!ROJ0U^;%BS7sY-wgI`}zS|%T~1~vWG0& zD7UdVxfSPE!%RR7Pm1NQK9Zf(QYJ=y?TqT{jM_uJ{eQ^g?H&F=hvU7F^X(Ai8nl_7 zM`d5s8Bcz@crq;Mgz|iWYue@gg%g(T71`S3N>4d^Yf_fcwZOMB$_o;&XSoGY;+q-_Z@PrNahK08-^L0kR@DF}fY(N5h(gFFR@pG_1 zsTDoWq;<^5Sg~8MRS|A8w?=R9ZKmN7T}h~1Z>dCGkK$F&p2+?%KHv@KB-X=wh5{Ii)WSx zLQmNhfdvW+pV;%S90;=yrraYwUk*6+Y3>QTDvX|{VUJYFigJ8=Cf!|r5mSCSq#AB} zz<2z*1cUHB->s1?l>&F8@!BaG(dGP5Zw5yk#uL8jlDx~cO3a@N+dxqCIvZ8Hmf+Z8$3+)W*M4zVDBDHXSfVXPNu38uTOG3;RKv&(_4xCyv zq4z!q?$)r<&)q(*Et-!ihnvwTLAdxN)?>uhV{>k*IWrZsnW%5}`p0TCzYm8ERODu& zev}}8z_<5;-z1~Pw+a?3aKc|+aqq9Z9bSmoRR!Zo6&MWYZRXyuJWFE6C{f|Z$Bl>| zSVFzqqG`JIMqpv%6~d;J&-tRV=I_%krkPi!V&7!Zqa2^{>LP(sdrjtU#5~!n>1xJR z?aUOk@wo;35jx(DVH~GG{=^xYp9@Wz+TvxMg^!)RH#n>Rar5eb2(_UB8*`4ACGLmn z(z6Dlm^#yIi9|`*`i{j6v*xZ>uBnL(q4CuMd((wB+3}K6pL*~t8aP0&n@m}R*J?C* zUF$=by+GVnG*ay~;Wjp%QTX;f`MiGBbQBHMDPmbY_A1^M5K;jW;0-S}?Co6}!qstt z%(-JsR~dL`p|M=ujEtvu{b$z^VsVcRu5pfq16eR?agOh+sDFme{S7mZ#qzhJiHvB7 zI1pZg_q|x8&_mwd>r}i(Vb+^tU2iPGKXLEd0&_&2<1P%02v={u6T14ziPNrm9q?TTNNdr^l%p^>6)}T{t7Dm2N4$Ns;-snuN)l zwYRNfRJNHm0yI79V;yQU{pin}>Eu7xlh#QS+5NvleBVy+G1%xjmDCIt>i;OzXH+1f z7pV!7SfUxf!nDdD@*W@_`sJCz$S3_6bfWVJ+|-aIgpD<6IsvEGf`76^*TSlR8D_#9 zOHwXSzmaRGxSX34SGzM2*qpa^IC?olZK(RHL-%FGJq;7=^y^bvmGd?;nN_Ce_@OSs z{e(8H%=m(Rq`@ekY^#tVvpApn7suVJIbVpJCV(;AL^H))68>Le`5LxjU%e}{LF;dp z;kL`*>fB9j9lPC~I=}m$7haYO^KWPE83$I)9`HOH_~y8)1__=d5LTNVzzfFO^li~1 zo{g3dflpD+;H$}LHk~XooZjs96u`q8TxJ@Zi^eVRO&`c!v%DUn(NbHa}e1xO6HSW+y75_CVsd65I!RSALZb|%Q=p7 zJS<|De00nRUJ$wTemid$)$}g-A#(3HY><1gdaODj!*zZGax904d&&&%LZ~uLW#E`{ zTC%w~t?o;pZ$Im|uJn>G(`PRN0R==FvY$`J1&RdMFHUq4WQILX0tk9a~hcBvCy{JnLAd)}d_xKEd`^g8kzs!rhmOB8!*u;4h6%)^e(VBtQdLD#?r z&oCvPYn)yC?6}bG~AywG#YSwdk6JK#I6WO1!y3>5yfhRS0@OpzZZiegxH&2%O8lKcqG{e zQD->K@-_CUemJr6t}ImlYb9sZeLP_xy48`<=bqOqxIXBJ#_T0>aLWaZ)(;Xb6rttS z`wWv}$~Wx9a*s30lQ6ZZ*u=f4KT_Ga9Mw-XrAD^2tW<(N2rNr*b90S3wec-dCS#?3 z5%wuRik`O_Z;x^vXe2Q=`#SZW0B?Wl_WjXg370o{{ye%tfCFzjHsIV|po++9A?k3s zylh^TV1u7~@VA)X?dkwnV17pHdJ$2LOHOca@8Od8qqSOVsh*TustxSX^mMMIjT*Gk*;Pwv~Qx+r}H(5_! zlL+G=##%s<`*J>f3lU-&++NudQDH?I2=P0sm3AX(Y4x+=(##XddLe!7YWt3f&r`HF zsM`eCV&MR}IQ+XFx=yHh&V8vB)7<0RT2NPJBUFwJXdgPSl2sMbY&iY>h2iptCqm1+ zBuzp{PolG@XzK&DWudwZlYXjTXv+wfVh_e~+9r_w^G zgv9vFLm~T!cXj3wJtbqZusO9QTMR7ezmgXT0>zdxkP8`06yyqJX&C`DO+`{$M(QgZ zBbVz!CVVhsoyeumardYW_t8VBtxtIp6evK4PC!5!L=pf)x&6c{bM_~5^3PYJ`S@<_ zW%r=jJ?72dc0;!IhTM1`{v}a+54JreWM7om8S0_hnZxdzR}zWX(p|vl0ci-^y*_OyEJLL^aIyt zd)F1PSt>=>T(0AB~4)YPvDph2WNjfp{Da|*@W*vnxja|@fAe3w7()xXO~5Rge? z1P@r?Y=eX^9l z7g2AIqVEprRfC0=Q5eHGke?-lVEePaeH9wtfKK0iqlx9n)Ijw+L!uH5lf?7f)s)rr zw(jp;>UdI#8DMrn-VGo-z;>AJ-(vmiXDVFEXwx6i0k{U2RuS?=c=fAGv(5ob zc#qGnxjg=5m^y8yg};Uyt3K|`3-W!8M5EhGZVbwP3EtP6)VW4TuWvZ3js_2~WZmC3 z@G&gBIP=$iIMFRZVzQiYFHV4&n0{1L8a_Q_y-i)C>Be;h^w+t>J4k7?&&TjB14sq2 zmbWYp7qqYFH14!P!y6LKB+tvYWn-jMF!cr+&h}$P42hd2~tIGaKqrp%( zRPNntH(jg35LE>qMzC6bTeo|T$P@mi2)f|rBYVlCxJ}SK6xIErE2Xku^fdG-#l9VMoAHFC#xaR#2OlDsL%a>H2*SGl ztC|zMtd8@9Gt=OW*O|ri9-G!7E|&v*FXt-1Fj2W%f`ey$&dtFq)$oixmS^SHV;L=d)7~x0Qd;v5zTM z?>}#*RUWa75vaK$H}KiYt+srqOYo5WjRXgBCQ5`14WwCinI|Jo!V#0Zx?#UVANSit zMOCB5&k-Edx*l(Yf+eWxP_PS^%O->_^qey^JpidS@tq2(j_oD?)&Yl-(i~)54|>U( z8{5c74jqDhS=p`vT&b)i*tspiK&lupG|kEeJj|Kz>^p02B=#ySG`I}c8)itG!a@y> zL$D_K!+7?2SMyeS)#fzF;e=4Bt#?-GtOX)#AL}!LD-gM4Nj-uf1mjQFh?}~X>tTfx z`|FMZRxBw!l7Eooa#$$ZYe^+^`ZhR^!2wa_Hb?$8e>ExqvX*sPNjfqU=5HRZZT1WR zT>3JvWEo!ePs-sS?40P?gwZ5$D@pDCe?;6D1Q@qQY;l7=V5b)u zkogUvps&Z5FKkhGRqEx$qOyUz;O#W-6XnW-EJ=ed1cgl5mZemSeF^tDZ}lkdO;K_~ zQihpXHS$o8tU2VaUd!`SjW4mW@erHTc``IhtkU5moS~%i{CG-E%X7lQ=&bb(gCn@< zTSmTnhK(6sKb$D*5mD?|_xgM5 z6+?qu-@1(Mfy+tbj-)h4{dF`D;|MNM_6OAHZmkf;n}9XR@h7?~1#7|;iE&Vm2&3_O zz5F*JSaGWtv4uXUq0dgX9@>%k()!RAhFxSEirW;jkw_5?Kq49z>o&!4+X2_L(A?%)cJB9}`C?8}y{7#BqB{}&Q}X&Lot+fzd~kc!LZ_kW9d1(=%-3UWQr66m z{S@xaVN6snW)#91f^0}EUWLNf4d7om0u`iACvclEL5Q9rjC~Y>MX_&cO(!x@oEpF_ zbkg5&a}*Ip5?jV2kaQQ6Tb%(SGmlvHv*8vp940)m zazv6lBiYI(it4W3<7}frYzwa$Sha=&-gWA4R&A1HVd2+r^>8Aeu4v&v77k!@lrWQb zc#zX_`NLkxS|WFuSdVF0_St+StNTHJAw~b0*x{dS-x~uRIb2>haZQ>8A!=~L2F*l{ zefG&>t5ElUCrt-GwLc%;`2kf37EYJ(MI2Z9co)17y1d5ySg;X!02^Ue2^K{EF}1TS zKZQ8zopizYVq>Q>NbbuG-XR;aZ`jJEcI@@QvqQP%IENSTCC&U%?;+_}{zXWE%Z${g zzA$AK*vbo$&f6o9iBD{GS(x$$86G+yN&VnrE&&>sgW6otCs5x2i|I8-aJ0t;>6vKux{kNxS=^CEF3CvrO;K;nS-~+L zZa#zJ23xmCxCcPbPXWI_hMn!|g>z}sKcJ3dMGA8_tj^KdAQJ|ba8dx8c|=n1?krv} zZ-A<|`LlPjDM(xuY>`UX?n+``VZB9f%QuBLSJbfR0C!+wFKp{W426dwSuH8T9#eXZ zNww~yR8D?0k};`l2p{ei_QM8ppP{z)MXrA~j2u|L3WL+n!G{%2y+N_NQMCXI0aobI zx=yLV7Gp2NxpQ#efrycsh$P(hS9CoZ+(yH=T$26@X({x;$q1k3 zXO1J1O;yp?oZdlcCn1_Z?A%H4^LmZ))mIacb0hE_hH(l%mx76lUR*OUyPRd&=MyPR z@6}>9a-aB`&M`Omne=VRxNTXytz+kGF7;GPslUewNL|>;qSQdMbfTAHH$Ccl-Erq+ z!srs$z5Uov$ZrcQlsF)DWQm9eJ=^VKQ}l`>piQ`qMkAjPcSUUJZ*)4>A(m*Jyby6p z)yh%jlTBJyDuV64TpLA7IlItfYNs877le+n0It>M;MQnP#8wO99gF*ovh+jHrt>IC zbx^%fXNMB;cuRY(qD&BbLPPFHZaHaKoHV{xrLUoW;r2ntMxWx!O+RG zW3;z<${*F_6wevb!_^Unn5)_Sj>!|4jRz^>K3Tz>ExVvj_7tNf5g7U@yZ6VC8#X|& z+u|D>2Lp!GM-4N{=3JM^4+2huk&2c1fdt3UF&kjRWG`N8qPvU-0>QCjJ=+XV@-1*T{=HR;dgb-&?$h8-m=WCEx zd6%A!X?DHMZ6b1fS*=u7D~TrflNi3P#gLGrU}T)v@@ro8Y#iT^aHG>E^;ulS_Ysq6 zxz*|WqE5Un?5-NFygGLDiX6(Z5-4EebJ+$Q0Xz@V=4dgs_f`P`ZvEBw3RB9VkIe2i z|86AnMlfY$+=%sNUy5%)^JspoL6+3y6(e6epZo3B)(rnYY0eYn@5W>@=1a7A#WgIH z{c!C%f#4lru>vj=MiWTDj;z=eCtip5^+LYs8@;1FWZxC*t}KTvb;sR?NTCknVUv(3 z`IISLrw6QuxQ*-tMD|`HGbdzNFxci?_B?dBx+kbx41zIvkkc(@sqNWd;x1GCW^5pR zxfaXxLY(R7F83C{+k}$d}_0~W5Ayd}Z-cBSg zT!gJ(j7$nP$OAY$J*_dOL`ID;d~|%lzT2BA_^T_ zHh%=orB^ywnpl>&<}NIcrd^I*pacy`R}~7r9jdKQkx}TcB@vt=@pYTus6MSb`yWyx zKW?!rwYHVAoa&Up2F9?b|M$C&S@n78_Q~QI{#d2zsNV9Gvo`2AGG&Y2KNv)?Da5te zAv9DxyFRlUr7Wl3jfx^{xBDj5f6DHgt~L3Bzs-2H#&%T8$3bym=$7FhKgCo&!=VBI zmBs7F1ul5a24b!3^;ho;@e(uM%gLDLe$f#^$mczCh>%e!3PJ=a z0!mawq$>zWjnbrrUIh{xpddvey{QO@lt?cEQ4k?i0qH`Ngk~s`5JE!Accb(By*Tfz zZ++|YpIOdw!SmdEpL6!vXP*X#2PZw#4|D#-`<-@wYHu7@=Azkkqo82 zXVzZ0ieUNnopWZINpWhoC-*x?l?$mYw@6lF2x_`L^5>8j=Q`2l z?JIlS;-#STWXhfFx1p5oRiV!AQwORhn2>pxU8W@fZaj$SG>5LV$0-d!~EQms<>TR zB}s(4AFX*$!MJNPqGPLYq1DXIHybolyU+A2bJ)u?aTHG9&b~K%$uAzu`OeSr-pK5w zAACa{vX+LZPWTTv#uN-Nra{h}q)og!S+6{#gCy#V>BAZQ5tu9SC?;XC6U*$Bb|9I* zo$smJunUkB$Gd$q^ty#^q%|%tcH@M@-U+W};{|nXlHCMFYgVM&e zFizWMwVAtUecIg&&Dc>_@?g$P{bydg2-0QUAV1CL_@uPk#7fSSat;h8dC z)Wo6~JDWNqjl&dUKV3P9Do5TaNXjsxNewVx5b*xnGy5ijV&el(j9Pu0yKiI^)c;Nd z^MFv)cCZ9FkZsVlst`U{wt{+WfoCD9jh@z*eRwUm=G54YL#; zHlP}A>J^dcDO>DW^)$28gTkc~J|}Pw$(CZH4gMZJRiB{jCDhaSg%<{d_z=!H?C|;c zWLNb`*wGUBQ`eL9GR|u~z-lYjFPe#Q$sUPWGznEa22-nu2{NC0+hFr&3V*rxxvJ3@ zp||Gun2s+r*|Tfm*E7%}JtijTBY~=? z4B%$xhh52IYwIiM!EhD)(&GBWja&BUXk#B=2PG*1jfq_(3A~gnzZmqC|7niqY9y+G z`_69*>$0w^-l|c)_`ldMLd585RIeC&`9Na8W?K|m1Dwft(O+g}CAQ&Ub=n4v2_E6(m6();5$8wKY;UrK?>YtmLi~opATTc4RzO1b> zU4X1Z8vR&2%Sxb+-YLhnfi`4Tqx!6{>$z?2TF6ok;0f&Qkgf&GIhhYD^TAPtxF*8^dz?Qjd0tOmM?+xQl#!PkiWS!YzD|Y+aXi zUTf>N9#E?(+GSOCXwm?sI@uA@)}R9k_n%Q~vif?6J%Jx4uc*~+Lk1^R1kRUtG z;Wd~qD`tdqO^N+jZW)!CkMflgUM{XUkb!WhQhD|E?8`F3M+ zW3o@BfoTWD!POaz8>Tr)VcUtMZ)(}_h*`!;Ob92@-OM5ssRf>4$RN!%*TD6;xtIGtvGBn?{i}$sUK-IL zZ1Cw+aA`D=k{)ONEzRz8i_e|;o;KuuPB6ENdRv+K5Vj(H3lE9o9EpN#ltD5!n4Y2q zT<*#*{+YE(03a8Gx(?=c&Y9n>TW;D|0BQwW5-jzhEX}|5*-_1*q?=R8*77y4jN585 z)!F#!pvkmujw$M!F|~S-45AK%lgk2yTKfvkR)m+k2U|Rx89|8UQT-4(io|7a6DcRv~SW4%SYMT4h73_K+jk80)u!lX^psw_S3x-YGh$Pr0LPX*SpMpal#ZT>=2m8({87Qk5tO3Bo6nA zatdu(4{idQ;>>4QOfG(DK3Yzv^>?^lewL@9Q~6<|)!_7T*EC7P&a-W@Q*-855k9_VaXA@r@Bu-8@muSEyjfbii3meN*dy_kI&bJ1 zrFMRmW)|wBk)&YXFb&L7%*^`z45_S!G$9?ryq?;GLXHnfXT?~AyCB!JYFbS`BjgrWt7_6BgV*y0|q;Cqd1DkdlFXC(eV|TYqW% zQi;uL#fBbe`yHya>Db*@h`{M|8}_B9cslak-e!6zTTtYtz|2)qC(4JM^G&@La`4cv z7rm-+?#Xh`8oTyDSf@AMem!C<;8@OUlD;sZH1VhFt&YVPC#G<&>Q7&%^{>oaCvYrO z*Y4=>FXqo87e1)=P>q9|CWcuWA6MvNh~BFQQJQwF4-M&lN)bBRDf7vuXg>}5nGAo2 z5735X9$aZClcK7Lo&CI0W`24kuIAYR!<4VCQrpvU$CZ%|;$De^a!r1#6$HVEG2DEB z?5sgHyprIq&YohAWruH2=mkH)^E{Lpf&IAABwOw;nTBG$(hnMx4Hi6=U9CG6fJJ96C|Wwg*dB<$M63 z8(B!pG-kXoPS@a_FgJyBsBkYJ?T}p@MzMw$d68du7ot$>QK7x_(Rxkwo)+&z0A5Ej zE95Bt_b504Kk;FHMCRrp&$0elosKXhTsP-Nt@~`uS|j2+mbGW*E1=Huund# z5Up!pI@PLm8i0v@s3Q2(heJN9j8X~l1#uk7iC)C58(df4|db7IDdD6E*RlH@1qh9>QFW8U0WQ@k0m=imI@!qoGCyGfFksf@i*A z3@ln)3#60!SNNriRv$s2(YfXNTh^~=c6)gj}mHcsJxDKRpa68r26+8Sho znr%h{SuORo;L$W$H_lG_w27e?tLjbS8D!A)BTRkds{eGqwuOIg3(pJ(A}2Z3!`$e#MfL#Z zE(PV!p@cE}H%#JNDuTSPs~+Oa6{sJZumTI8De>V7+h>-2ire{$&vDLmLGDVS3a zrfjs;vXb*G?|A@2+S)Ah-HLvO?Y5UyVOqy59`&(WJG=$vi6n(7_h?BvCE3yKWLvp6 zPjWJx?PAw7d0YXzo34q3T@>sodZ>Q|LrCTjdPl;CZRUq2G_BO~T|#5b4TV})+6lG; zapr0B*&{-&l@^Nf*^lCVdXsoUyVg^+>gHWhAC|(s8*-Q~%#A)lH%9<@+!R~;I#ikt z_pFp_xAw`Xp?wn!H`Jn{0+(BAM&uxCBKNZJIZc$_kv;sA*W)#PPaR`a>I9_wcqn9H zrd;-hM?BTFczGs$V9KSl6h|Wn96ZB(IkEbYx`qov?%??UNV^cg=D#21~q#_cX?7rU>HmH6Ytw}iv8z`-tNzcP@xHLyvlDBWY zU|_wVOG6l%Vwpp=~qa0 zjH?*NoY0Xa9+Z1iI5(W;=+L9Z#HYl{$v9Lg2=bsDShjWosL z$-q?iYM6(5650$T%|!poD0pb4qOrwL;rQ4jXYI{`B!o_1D<02j`x}%Fpd6ItbC`oz zhJ|#|`}cCsuGTnRwUDA$du>$fZgrY0t8ebqw1z&?xDmhpAU?G?Q=o=UE-9V~=l`+E z$ucuxC0UUpu$N5uo)Hhup*4QyMgW6oCB^nZJ;O zXn0EIjbC&XaP1>s@Ci83X>j#(^sC1iMNeX~iHBXB)6`N%UduFZkMkRDk1e4m5!)23 z+lSr%w6@eYJcVb#=BE*jx3K<&wKy8hk&7qx@4?Fc>3dA+MK#rMLYMyLz0fiSC4ORv_b`T|2pg z!e1E&BEHj>i!<}aC`NOV{qw$cltW-!JvSY9B*~)hcFGiuud*eZ*I|FoYrcAAwVo+I z3wrd~%;oW=us3G6gc_Z*J@pHhPE80|*G%3bbxf!7hkfA*gxsQcY`U3*S*8DKqKI`jTTW$<@h1Mu}O)w;aB1 zGf(4ttVm~DVas-rFegl}p`a(ap%SoeoGRVU@AxC2k?GeH@=TN>k{Z@WJolqcJGE~! znhod77c4AUuwP6l*_kss*0Jpx3}N5-mlqPlL?tsm*-4E{#~uh>W%G}P6Hs4+$2oL* zAn7J2$2z>FZZ;O?N^4?EFU*jZ%8FF&RF7>B7(ZiZUgw%`n)#wr$#ed67^fwW#-ln) z&}8r}B;Q0XnfERipq8ZJ_rWcBX3m1N=@|Z)>KAs#I`26RbI#yR#B-A zJC^sDO0yoI9F;8CP4Locf>dl6ld?7aw-!*|l2DyXEC{BY#$gsM%=nbeq`PB8Il~CT zK;hneY~&G9F--Bk^x^3 z#;@Uv8#PCjhi%=bgS9i=!jQH;g(8D!K`-%;xxN+D-D~3@-)XPmj9CVuLx|q#oTEP$ z_h&LG_^>_G7=mK7thC(=G&$HerCYGkvi_{Q)IRsk_EuzM&|!a)lOSA&@s7f>Q9-BG z^BZo8M@U|>dDbd)aeH2J!$`1W0jUU9B6RIOeP^;#l#Kz^cg=PO~pPKQ(g42Vg zniR{x7QgJ9!?CcOs3`o#j?gbzSXcf=uQ22?hez~`|8Ve7qS$BeH@0=tg@F@`z2!ym zs3zM+*61wgv)6A>*Q}S>hM|-Ruh%t`l&C;jOHgbIzt`d#N!-gAxd3EvZJM3ger=S+ zwD{1y90@KO`1$Ad8CCW;Cr1Qzt3s^g_5gKTgUj=XKWyJi1oBq~n^=!vKLu6E@o}kO@pr3gSk6hv-~E$fF`u&@LVqqzH7~^r zE$_*BUwb~*SsEza6o4~Gsb(%ZnfUy@keR2fECOkE2!_+~2uho_!1lHAk)RIyu<@$r zlSI72vMf>Be`R5T_#2`!S;4+(F;OG-f1Vip*T#Ubt>@<0m94XXXvh>Ah-V{9r$eDB zE;xyZwkcAk{PjOABKjsmm5gf=`sHYDIsV(OE zm?b05ez|*jj_0EVp<$;}%(JaKdUbq@JIEWEt`s*VX*_Jq`DpAr;ek3`nqP zSFNS7i5Y**7|%rh-MIVtbSZaf$ANObQ@Y8m`xT2P-0t{vFzlSLnnEWHTFLPqV-n)- z9fS@8A**3<6AVmx;LP_~YgU&|nT+Gg&+8&fWr=g|m4>{o&O0i7t-5t&PTa0u&k!N4 zFDa;qt7m54R>(R%6X#I~=FzMb7=~UWL_ZH}VO>ql=$ukLSwn^Rc=pP){-_H=3vnFEC zc}u?w@zKcB%2;#?#=hlKtYe>(i*IFXebrBT<8tC zS@X1GVt*{P#xuHG7CxW1TNrLJAYzFMl|}dpew`WkoVwhaGO|Us1&m5!nti~gSad^+ zvCPDo(2#;5X8yCNP0HA}k_jZ3zdh$&%}uiSI~g$D$cj0P&LP2ePhjV$5c76blCXa= z)p%;9@{>}neWz-qCFdVYGI^y}4KJ^MC5(UfQEcZ!10o^KD84*J-VTmJO!}Vs~sfZ&98q z)&@8#f8|*M7zP=gxKnvKw~ZEdCV36wuU~|q!ORzPhz!WR@in2VLQ?V(=W2XSudQ2I z+m7Au&x;DP_ZKZ_F+d_JB2q%=z>h=`onw>+>3vqo&UOaM=CWw-QXl4~V{n}o!g;#! z0I<0Gf)BMp2AZRhjW4-}Kmm^(3Io{d&@lE=L6=ue0>(?V-GB5M;Bt=*NIp>F=mpz}aXXZDJ;$bl>sG4LL@&^sGg6jS zjsNhxyy*#Ew~Pgv{PDf#{u+P1=DAWX89x zIU}_8>0VJ(5)Kcf6471ThjDApkL9Vk`oC8xhTO`oU$|V3tSd+meO5VY798e!7*>kE z-t^7Drr*U5DN1H$T6C+bd3Jdrs=cp9hMW;!UQPLZ)59#hoX4{pZ+>~RJA`vq|J0=W zQSMNQ;7xnZS0zw|)Exf?TcZ}+imcSxvVRhH3h}~U|&$}4on)C}F zrcu7Ja%VinJR542OhkY&8?ws2sU!iTnqFNPy`2C91Z=R06lXm}I`6&4ADe!^M)6Up zs%^`VIT`sf)R*b>5!Cnd(EuBh`pKZ1kM4Oa^EqVIdE{|iYPSk*CKjG@7GzCca>e1#pU_NKzP+0s1nkO`=%nr3 z`?xzn`_1R!VB!NXeA+sdsLP{t8gvNP8w(SM*HnyI;q1o&LkOqetU$K3^QmhpnAM(m ztb&gIUWIdPlgqIp)l^oVGVR8BX)USK)jb<=yKu0C;(G>0yJnxsuDoXcUM6#2USl_ykRZ5n-ceYjR0sE&jP7Mr@iXt?T0W=udmB-HAs(JJY_^u@$5bQt1d9uQ=B z6G##9oyYUM5mRcdVVmCl$LF!<<93)jm?)@8BYWOmI;w<0JvAB!*@42~2VVtnIUSyd z&&8cDS_P?#m2?hK^!7@WZr{a3+_2MnU9z4(7+-ia#@Gm?Q*?&#CyT3*6@^c__5s`4 z<1@m*@`RuOix530dd+OVLqnkwz8F83e!N%7HgeOP-Ij%yPo%20fXNWlxi^B&lnvf7 zR6CV__2wk%`}1f|eq{_0m^ibL+6%DMECeSvsZDq~18}aqS9XUL?~~H>JR|7pDk;C` zYA3N37ad!2-ZMWH-iz~U*0xTDcjJux$mr=5O*gHkIJiZ-Yjbz5Q(iN9BkjKcWXtV| zX=~jO{%5%?9$Uxv^Fvq5Tm&}woq-&9X(*S)D_8fP4Su;x(;B3Dkn_@N8gL zw85JKm@5ymo*=?RU*ZOev5R2l?hNnp5r52z_}$X~40O<}uC2s1e_ah3bN$$Fyx^zg zEACv8^-!I{{J^l~TSNsnt-+MARX}jQ)1fQ@qOYc|Q-&%pdzOCM$0cz(%$gD(P?q`4~6M>KB?OMfCZ-bn;+yUWtkc z{fpq$vMwvaS%LQdTd@7>PkrSv)JJyn9crhHmE%g>UC%v&8@!V@fAq>%Z6d$HyGSS^ zS(pmz&kU3MHn-l*C?ceGCkLy%iR78!i#4dVyEegZAdUGg-Yn2W{h{g;c^=}PJRYEh z^-4AJP?JVI!GVZ7ewQhG2y3f=O#(VaxYtzeZj&R}3+Rk0*8`IeH*Ms|jm17Zy9#wZ zu>5uujlYuQJ;uHR0buNV`6D405cQN~Q&5vE{)te+A# zIU!uKlkUT8Q+3dL_-h2d7E0FTlgNizXQX7No#<1|FUFyosou54F;)Ryu5eb|pa zLjY+sE3nl(jr06w=%Ojm$fI9e_zL%;oqe0jY+r!+z_T6S)sihuPF3UH56g1NX}d(s zo|ldl-A5+~9+iLLi?Q`a0w0{nF(#3sJ;(7~dWg=yRr)`d#%5bnz|~=g{Z2^n8b`9C z-U1}}-G_x2QNLSYR@nFC51ZU)j`RYrqGx9wo@!Dg)_kSLkg2uW>!-b#_e7rGHoa*y z)VzIg?TSN1(Yv`_Cv@YA^bgNZI*;icz+GEaOUK{GD8q2HTM8Hb$cTtAF>LAYN>E@S zsNHTHL+&h}lKbtyJ9JxYs2Y9i?izokS08mp!@(~s9=Y7Pwaazvh~$tC?}ZRnR4P0& zj5FH6)|QL!Cc%rxIoI+~&sp&o$qqGI6jhVmA+V7Jq+^{x>_((z?QfuAZ<)VwYPWEG zIZ{-Y5|aR_$(FHb#|*VYQ;5LF1npACl>?D7^e`0l+66dVv z76|GSMPGs^yI_ioOIRZ4#V- z`oxZNBxSiZDg>OUNw+JU775@@6R?-CuBv!pYn$-}+PGp!aT#0F!7vz^s2iu6xFjG1 zpA}}DIBloj1ks8)K_M4yrvpo%0A>==og(8*S~qR4(I#MC@%;KNh1V+@fS}BItHCpN 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