diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml new file mode 100644 index 0000000..bc3e0e9 --- /dev/null +++ b/.github/FUNDING.yml @@ -0,0 +1 @@ +patreon: YuriSizov diff --git a/.github/actions/export-godot-project/action.yml b/.github/actions/export-godot-project/action.yml new file mode 100644 index 0000000..d84e937 --- /dev/null +++ b/.github/actions/export-godot-project/action.yml @@ -0,0 +1,54 @@ +name: Export Godot project +description: Export a project for the target platform. + +inputs: + platform: + required: true + arch: + required: true + preset: + required: true + output: + required: true + + project-path: + default: "." + +outputs: + export-path: + value: ${{ steps.export-project-step.outputs.export-path }} + +runs: + using: "composite" + steps: + - name: Import assets, scripts, extensions + shell: bash + continue-on-error: true + run: | + godot --headless --path ${{ inputs.project-path }} --import + + - name: Export the project (${{ inputs.preset }}) + id: export-project-step + shell: bash + env: + EXPORT_OUTPUT_PATH: export/${{ inputs.platform }}/${{ inputs.arch }} + run: | + echo "Creating the export output folder..." + mkdir -p ${{ inputs.project-path }}/${{ env.EXPORT_OUTPUT_PATH }} + + echo "Exporting the project..." + godot --headless --path ${{ inputs.project-path }} --export-release "${{ inputs.preset }}" ${{ env.EXPORT_OUTPUT_PATH }}/${{ inputs.output }} + echo "export-path=${{ inputs.project-path }}/${{ env.EXPORT_OUTPUT_PATH }}" >> "$GITHUB_OUTPUT" + + # Perform post-export steps. + + # We need the .app folder on macOS, not the zip that Godot produces. + - name: Unzip the project (macos) + if: ${{ inputs.platform == 'macos' }} + shell: bash + env: + EXPORT_OUTPUT_PATH: export/${{ inputs.platform }}/${{ inputs.arch }} + run: | + cd ${{ inputs.project-path }}/${{ env.EXPORT_OUTPUT_PATH }} + unzip ${{ inputs.output }} + rm -f ${{ inputs.output }} diff --git a/.github/actions/make-release/action.yml b/.github/actions/make-release/action.yml new file mode 100644 index 0000000..2dd0679 --- /dev/null +++ b/.github/actions/make-release/action.yml @@ -0,0 +1,22 @@ +name: Make GitHub Release +description: Create a GitHub release as a draft, and generate its description. + +inputs: + release-version: + required: true + +runs: + using: "composite" + steps: + - name: Prepare release notes for this release + shell: bash + run: | + sed -i 's/\${COMMIT_HASH}/${{ github.sha }}/g' $GITHUB_ACTION_PATH/release-notes.md + sed -i 's/\${VERSION_TAG}/${{ inputs.release-version }}/g' $GITHUB_ACTION_PATH/release-notes.md + + - name: Create a draft release with custom release notes + shell: bash + env: + GH_TOKEN: ${{ github.token }} + run: | + gh release create --verify-tag ${{ inputs.release-version }} --draft --title 'Glasan FX - ${{ inputs.release-version }}' --notes-file $GITHUB_ACTION_PATH/release-notes.md diff --git a/.github/actions/make-release/release-notes.md b/.github/actions/make-release/release-notes.md new file mode 100644 index 0000000..b6f893d --- /dev/null +++ b/.github/actions/make-release/release-notes.md @@ -0,0 +1,10 @@ +If you experience issues, [please report them](https://github.com/YuriSizov/glasan-fx/issues) as soon as you can. + +## Downloads + +* **[Download for Linux (x86_64)](https://github.com/YuriSizov/glasan-fx/releases/download/${VERSION_TAG}/glasan-fx-linux-x86_64.zip)** +* **[Download for macOS (Universal)](https://github.com/YuriSizov/glasan-fx/releases/download/${VERSION_TAG}/glasan-fx-macos-universal.zip)** +* **[Download for Windows (x86_64)](https://github.com/YuriSizov/glasan-fx/releases/download/${VERSION_TAG}/glasan-fx-windows-x86_64.zip)** +* **[Download for Windows (x86_32)](https://github.com/YuriSizov/glasan-fx/releases/download/${VERSION_TAG}/glasan-fx-windows-x86_32.zip)** + +_Built from commit [${COMMIT_HASH}](https://github.com/YuriSizov/glasan-fx/commits/${COMMIT_HASH}/)._ diff --git a/.github/actions/setup-deps/action.yml b/.github/actions/setup-deps/action.yml new file mode 100644 index 0000000..56c2439 --- /dev/null +++ b/.github/actions/setup-deps/action.yml @@ -0,0 +1,27 @@ +name: Set up Project Dependencies +description: Download and install dependencies and libraries used by the project. + +inputs: + platform: + required: true + gdsion-version: + required: true + +runs: + using: "composite" + steps: + - name: Install rcedit (Windows) + if: ${{ inputs.platform == 'windows' }} + shell: bash + run: | + curl -JLO https://github.com/electron/rcedit/releases/download/v2.0.0/rcedit-x64.exe + mv rcedit-x64.exe rcedit.exe + export PATH=$(realpath ./):$PATH + + - name: Install GDSiON + shell: bash + env: + GDSION_PATH: https://github.com/YuriSizov/gdsion/releases/download/${{ inputs.gdsion-version }}/libgdsion-${{ inputs.platform }}.zip + run: | + curl -JLO ${{ env.GDSION_PATH }} + unzip libgdsion-${{ inputs.platform }}.zip diff --git a/.github/actions/sign-godot-project/action.yml b/.github/actions/sign-godot-project/action.yml new file mode 100644 index 0000000..8a12357 --- /dev/null +++ b/.github/actions/sign-godot-project/action.yml @@ -0,0 +1,66 @@ +name: Codesign Godot Project +description: Codesign and notarize Godot project export artifacts. + +inputs: + platform: + description: Target platform. + required: true + + setup-env: + description: Flag that enables the setup step. + default: false + codesign: + description: Flag that enables the codesign step. + default: false + + # Setup arguments. + apple-cert-base64: + required: true + apple-cert-password: + required: true + + # Codesign arguments. + apple-dev-id: + required: true + apple-dev-app-id: + required: true + apple-dev-team-id: + required: true + apple-dev-password: + required: true + + # Input/output arguments. + directory: + description: Path to the folder with the project. + required: true + target-name: + description: Name of the project executable file or folder (like on macOS). + required: true + +runs: + using: composite + steps: + # macOS-specific steps. + + # Setup. + + - name: Set up the signing environment (macos) + if: ${{ inputs.platform == 'macos' && inputs.setup-env == 'true' }} + shell: bash + env: + APPLE_CERT_BASE64: ${{ inputs.apple-cert-base64 }} + APPLE_CERT_PASSWORD: ${{ inputs.apple-cert-password }} + run: $GITHUB_ACTION_PATH/macos/setup.sh + + # Codesign. + + - name: Sign and notarize the project (macos) + if: ${{ inputs.platform == 'macos' && inputs.codesign == 'true' }} + shell: bash + env: + APPLE_DEV_ID: ${{ inputs.apple-dev-id }} + APPLE_DEV_APP_ID: ${{ inputs.apple-dev-app-id }} + APPLE_DEV_TEAM_ID: ${{ inputs.apple-dev-team-id }} + APPLE_DEV_PASSWORD: ${{ inputs.apple-dev-password }} + APP_PATH: ${{ inputs.directory }}/${{ inputs.target-name }} + run: $GITHUB_ACTION_PATH/macos/sign.sh diff --git a/.github/actions/sign-godot-project/macos/setup.sh b/.github/actions/sign-godot-project/macos/setup.sh new file mode 100644 index 0000000..df04eaa --- /dev/null +++ b/.github/actions/sign-godot-project/macos/setup.sh @@ -0,0 +1,42 @@ +#!/bin/bash + +# Based on https://github.com/godot-jolt/godot-jolt/blob/master/scripts/ci_sign_macos.ps1 + +certificate_base64="$APPLE_CERT_BASE64" +certificate_password="$APPLE_CERT_PASSWORD" + +if [ -z "${certificate_base64}" ]; then + echo "ERROR: Missing codesign certificate." + exit 1 +fi +if [ -z "${certificate_password}" ]; then + echo "ERROR: Missing codesign certificate password." + exit 1 +fi + +# Convert the certificate back to its file form. + +echo "Decoding the base64 certificate..." + +certificate_path="certificate.p12" +base64 --decode -o ${certificate_path} <<< "${certificate_base64}" + +# Set up the keychain and import the certificate. + +keychain="ephemeral.keychain" +keychain_password="$(openssl rand -base64 16)" + +echo "Creating the default keychain..." + +security create-keychain -p ${keychain_password} ${keychain} +security default-keychain -s ${keychain} + +echo "Importing the certificate into the keychain..." + +security import ${certificate_path} -k ~/Library/Keychains/${keychain} -P ${certificate_password} -T /usr/bin/codesign +security find-identity + +echo "Granting access to the keychain..." + +security set-key-partition-list -S "apple-tool:,apple:" -s -k ${keychain_password} ${keychain} +security set-keychain-settings ${keychain} diff --git a/.github/actions/sign-godot-project/macos/sign.sh b/.github/actions/sign-godot-project/macos/sign.sh new file mode 100644 index 0000000..ab71705 --- /dev/null +++ b/.github/actions/sign-godot-project/macos/sign.sh @@ -0,0 +1,52 @@ +#!/bin/bash + +# Based on https://github.com/godot-jolt/godot-jolt/blob/master/scripts/ci_sign_macos.ps1 + +apple_dev_id="$APPLE_DEV_ID" +apple_dev_app_id="$APPLE_DEV_APP_ID" +apple_dev_team_id="$APPLE_DEV_TEAM_ID" +apple_dev_password="$APPLE_DEV_PASSWORD" + +app_path="$APP_PATH" +archive_path="$APP_PATH.zip" + +if [ -z "${apple_dev_id}" ]; then + echo "ERROR: Missing Apple developer ID." + exit 1 +fi +if [ -z "${apple_dev_app_id}" ]; then + echo "ERROR: Missing Apple developer application ID." + exit 1 +fi +if [ -z "${apple_dev_team_id}" ]; then + echo "ERROR: Missing Apple team ID." + exit 1 +fi +if [ -z "${apple_dev_password}" ]; then + echo "ERROR: Missing Apple developer password." + exit 1 +fi +if [ -z "${app_path}" ]; then + echo "ERROR: Missing application path to sign." + exit 1 +fi + +# Sign, notarize, and staple the app. + +echo "Signing and verifying the app at '${app_path}'..." + +codesign --timestamp --verbose --deep --force --options runtime --sign "${apple_dev_app_id}" "${app_path}" +codesign --verify "${app_path}" + +echo "Archiving and notarizing the signed app..." + +ditto -ck --keepParent "${app_path}" "${archive_path}" +xcrun notarytool submit "${archive_path}" --apple-id ${apple_dev_id} --team-id ${apple_dev_team_id} --password ${apple_dev_password} --wait + +echo "Stapling the notarization ticket to the signed app..." + +xcrun stapler staple "${app_path}" + +echo "Cleaning up..." + +rm -f "${archive_path}" diff --git a/.github/actions/zip-folder/action.yml b/.github/actions/zip-folder/action.yml new file mode 100644 index 0000000..2f33844 --- /dev/null +++ b/.github/actions/zip-folder/action.yml @@ -0,0 +1,28 @@ +name: Zip up a folder +description: Create a zip archive of a folder or folders. + +inputs: + filename: + description: Output file name for the archive. + default: "" + path: + description: Base path for archive files. + default: "." + directory: + description: Working directory where the command is called. + default: "." + split: + description: Create a separate archive for each directory in the base path. Folder's name is the file name. + default: false + +runs: + using: composite + steps: + - name: + shell: bash + working-directory: ${{ inputs.directory }} + env: + ARCHIVE_OUTPUT_NAME: ${{ inputs.filename }} + ARCHIVE_INCLUDE_PATH: ${{ inputs.path }} + ARCHIVE_SPLIT: ${{ inputs.split == 'true' && 1 || 0 }} + run: $GITHUB_ACTION_PATH/zip.sh diff --git a/.github/actions/zip-folder/zip.sh b/.github/actions/zip-folder/zip.sh new file mode 100644 index 0000000..665a91a --- /dev/null +++ b/.github/actions/zip-folder/zip.sh @@ -0,0 +1,36 @@ +#!/bin/bash + +# Adapted from https://github.com/TheDoctor0/zip-release. +# Create an archive or exit if the command fails. + +set -eu +printf "\n📦 Creating zip archive...\n" + +if [ "$RUNNER_OS" = "Windows" ]; then + if [ "$ARCHIVE_SPLIT" = 1 ]; then + for name in $ARCHIVE_INCLUDE_PATH/*; do + if [ -d "$name" ]; then + include_path="$ARCHIVE_INCLUDE_PATH/$name/" + 7z a -tzip "$name.zip" $include_path || { printf "\n⛔ Unable to create zip archive from %s.\n" "$include_path"; exit 1; } + printf "\n✔ Successfully created %s archive.\n" "$name.zip" + fi + done + else + 7z a -tzip "$ARCHIVE_OUTPUT_NAME" $ARCHIVE_INCLUDE_PATH || { printf "\n⛔ Unable to create zip archive from %s.\n" "$ARCHIVE_INCLUDE_PATH"; exit 1; } + printf "\n✔ Successfully created %s archive.\n" "$ARCHIVE_OUTPUT_NAME" + fi +else + if [ "$ARCHIVE_SPLIT" = 1 ]; then + for name in $ARCHIVE_INCLUDE_PATH/*; do + if [ -d "$name" ]; then + include_path="$ARCHIVE_INCLUDE_PATH/$name/" + zip -r "$name.zip" $include_path || { printf "\n⛔ Unable to create zip archive from %s.\n" "$include_path"; exit 1; } + printf "\n✔ Successfully created %s archive.\n" "$name.zip" + fi + done + else + zip -r "$ARCHIVE_OUTPUT_NAME" $ARCHIVE_INCLUDE_PATH || { printf "\n⛔ Unable to create zip archive from %s.\n" "$ARCHIVE_INCLUDE_PATH"; exit 1; } + printf "\n✔ Successfully created %s archive.\n" "$ARCHIVE_OUTPUT_NAME" + fi +fi + diff --git a/.github/workflows/build-pull-request.yml b/.github/workflows/build-pull-request.yml new file mode 100644 index 0000000..d563183 --- /dev/null +++ b/.github/workflows/build-pull-request.yml @@ -0,0 +1,15 @@ +name: Build and Test Pull Request + +on: + pull_request: + +# Make sure jobs cannot overlap. +concurrency: + group: build-${{ github.ref }} + cancel-in-progress: true + +jobs: + + export-project: + name: Export the project for target platforms + uses: ./.github/workflows/export-project.yml diff --git a/.github/workflows/build-release-tagged.yml b/.github/workflows/build-release-tagged.yml new file mode 100644 index 0000000..d31a149 --- /dev/null +++ b/.github/workflows/build-release-tagged.yml @@ -0,0 +1,28 @@ +name: Build and Publish Tagged Release + +on: + push: + tags: + # Match only tags that look like version numbers, e.g. 0.1, 2.3-beta, 4.5.6d, etc. + - '[0-9]+.[0-9]+*' + +# Make sure jobs cannot overlap. +concurrency: + group: build-${{ github.ref }} + cancel-in-progress: true + +jobs: + + export-project: + name: Export the project for target platforms + uses: ./.github/workflows/export-project.yml + secrets: inherit + with: + with-codesign: true + + publish-project: + name: Package and publish the project + needs: [ export-project ] + uses: ./.github/workflows/publish-project.yml + with: + release-version: ${{ github.ref_name }} diff --git a/.github/workflows/build-unstable.yml b/.github/workflows/build-unstable.yml new file mode 100644 index 0000000..2ef61f3 --- /dev/null +++ b/.github/workflows/build-unstable.yml @@ -0,0 +1,17 @@ +name: Build and Test Unstable (main branch) + +on: + push: + branches: + - 'main' + +# Make sure jobs cannot overlap. +concurrency: + group: build-${{ github.ref }} + cancel-in-progress: true + +jobs: + + export-project: + name: Export the project for target platforms + uses: ./.github/workflows/export-project.yml diff --git a/.github/workflows/export-project.yml b/.github/workflows/export-project.yml new file mode 100644 index 0000000..4ec7600 --- /dev/null +++ b/.github/workflows/export-project.yml @@ -0,0 +1,127 @@ +name: Export Project + +on: + workflow_call: + inputs: + with-codesign: + type: boolean + default: false + +# Make sure jobs cannot overlap. +concurrency: + group: export-${{ github.ref }} + cancel-in-progress: true + +env: + GODOT_VERSION: "4.3.0-stable" + GDSION_VERSION: "0.7-beta4" + +jobs: + export-publish: + strategy: + fail-fast: false + matrix: + include: + - platform: linux + arch: x86_64 + preset: "Linux - x86_64" + output: "glasan-fx.x86_64" + app-name: "glasan-fx.x86_64" + runs-on: ubuntu-latest + + - platform: macos + arch: universal + preset: "macOS - Universal" + output: "glasan-fx.zip" + app-name: "Glasan FX.app" + runs-on: macos-latest + + - platform: windows + arch: x86_64 + preset: "Windows - x86_64" + output: "glasan-fx.exe" + app-name: "glasan-fx.exe" + runs-on: windows-latest + + - platform: windows + arch: x86_32 + preset: "Windows - x86_32" + output: "glasan-fx.exe" + app-name: "glasan-fx.exe" + runs-on: windows-latest + + name: Export the project (${{ matrix.preset }}) + runs-on: ${{ matrix.runs-on }} + steps: + - uses: actions/checkout@v4 + + # Set up prerequisites. + + - name: Install Godot ${{ env.GODOT_VERSION }} + uses: chickensoft-games/setup-godot@v2 + with: + version: ${{ env.GODOT_VERSION }} + use-dotnet: false + include-templates: true + + - name: Verify Godot + shell: bash + run: | + godot --version + + - name: Set up project dependencies + uses: ./.github/actions/setup-deps + with: + platform: ${{ matrix.platform }} + gdsion-version: ${{ env.GDSION_VERSION }} + + # Export the project. + + - name: Export the project + id: export-project-step + uses: ./.github/actions/export-godot-project + with: + platform: ${{ matrix.platform }} + arch: ${{ matrix.arch }} + preset: ${{ matrix.preset }} + output: ${{ matrix.output }} + + # Codesign if necessary. + + - name: Set up codesign environment + if: ${{ inputs.with-codesign }} + uses: ./.github/actions/sign-godot-project + with: + platform: ${{ matrix.platform }} + setup-env: true + apple-cert-base64: ${{ secrets.APPLE_CERT_BASE64 }} + apple-cert-password: ${{ secrets.APPLE_CERT_PASSWORD }} + + - name: Sign the exported project + if: ${{ inputs.with-codesign }} + uses: ./.github/actions/sign-godot-project + with: + platform: ${{ matrix.platform }} + codesign: true + directory: ${{ steps.export-project-step.outputs.export-path }} + target-name: ${{ matrix.app-name }} + apple-dev-id: ${{ secrets.APPLE_DEV_ID }} + apple-dev-app-id: ${{ secrets.APPLE_DEV_APP_ID }} + apple-dev-team-id: ${{ secrets.APPLE_DEV_TEAM_ID }} + apple-dev-password: ${{ secrets.APPLE_DEV_PASSWORD }} + + # Upload the results. + + # This step helps to preserve file permissions. + - name: Tar up the example project + shell: bash + working-directory: "${{ steps.export-project-step.outputs.export-path }}" + run: | + tar -cvf glasan-fx.tar . + + - name: Upload the project + uses: actions/upload-artifact@v4 + with: + name: glasan-fx-${{ matrix.platform }}-${{ matrix.arch }} + path: "${{ steps.export-project-step.outputs.export-path }}/glasan-fx.tar" + retention-days: 14 diff --git a/.github/workflows/publish-project.yml b/.github/workflows/publish-project.yml new file mode 100644 index 0000000..9d73f06 --- /dev/null +++ b/.github/workflows/publish-project.yml @@ -0,0 +1,59 @@ +name: Publish Project + +on: + workflow_call: + inputs: + release-version: + required: true + type: string + +# Make sure jobs cannot overlap. +concurrency: + group: publish-${{ github.ref }} + cancel-in-progress: true + +jobs: + publish: + name: Package and publish the project + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v4 + + - name: Download project artifacts + uses: actions/download-artifact@v4 + with: + path: export + pattern: glasan-fx-* + + - name: Untar downloaded artifacts + shell: bash + working-directory: export + run: | + for name in ./*; do + if [ -d "$name" ]; then + cd "./$name" + tar -xvf glasan-fx.tar + rm -f glasan-fx.tar + cd .. + fi + done + + - name: Archive project exports + uses: ./.github/actions/zip-folder + with: + directory: export + split: true + + - name: Make GitHub Release + uses: ./.github/actions/make-release + with: + release-version: ${{ inputs.release-version }} + + - name: Update the release with the project + shell: bash + env: + GH_TOKEN: ${{ github.token }} + run: | + gh release upload ${{ inputs.release-version }} export/*.zip --clobber + diff --git a/README.md b/README.md index c1d6238..7d15837 100644 --- a/README.md +++ b/README.md @@ -1,9 +1,50 @@ ## Glasan-FX +_[glá-san] — loud, noisy._ + **Glasan-FX** is a tiny sound effects tool. Let the luck take the wheel, or play around with a bunch of knobs and sliders yourself to find just the tune that you need! +[![patreon-link](https://img.shields.io/badge/Patreon-orange?label=support%20the%20project&color=%23F2614B&style=for-the-badge)](https://patreon.com/YuriSizov) +[![discord-link](https://img.shields.io/badge/Discord-purple?label=get%20in%20touch&color=%235865F2&style=for-the-badge)](https://discord.gg/S657Y9KPF9) + + +## Download + +_If you find a usability issue or a bug, please [file a report](https://github.com/YuriSizov/glasan-fx/issues). If you don't have a GitHub account, you can also reach out on [Discord](https://discord.gg/S657Y9KPF9)._ + +### Current release: 1.0-stable + +* **[Download for Linux (x86_64)](https://github.com/YuriSizov/glasan-fx/releases/download/1.0-stable/glasan-fx-linux-x86_64.zip)** +* **[Download for macOS (Universal)](https://github.com/YuriSizov/glasan-fx/releases/download/1.0-stable/glasan-fx-macos-universal.zip)** +* **[Download for Windows (x86_64)](https://github.com/YuriSizov/glasan-fx/releases/download/1.0-stable/glasan-fx-windows-x86_64.zip)** +* **[Download for Windows (x86_32)](https://github.com/YuriSizov/glasan-fx/releases/download/1.0-stable/glasan-fx-windows-x86_32.zip)** + +_You can also get the project from [itch.io](https://yurisizov.itch.io/glasan-fx)._ + + +## Contributing + +Your participation is welcome! + +Whether you can test the project and report bugs, or you can work on improvements and missing features, please don't hesitate to reach out. + +- For bugs, please consider creating a bug report in the [Issues](https://github.com/YuriSizov/glasan-fx/issues) section of this repository. +- For features, please start a thread in the [Discussion](https://github.com/YuriSizov/glasan-fx/discussions) section of this repository. +- For work coordination, or just to chat about the project, please join our [Discord server](https://discord.gg/S657Y9KPF9). + +### Notes for developers + +The project is being developed using the stable version of **Godot 4.3**. + +To work on _Glasan FX_ you need to: + +- Check out this repository, or download it as a ZIP archive. +- Get the [latest release of GDSiON 0.7](https://github.com/YuriSizov/gdsion/releases) and extract it into the `bin` folder in the project root. +- Open and edit the project with [Godot 4.3](https://godotengine.org/download/archive/#4.3). + + ## License This project is provided under an [MIT license](LICENSE). diff --git a/editorconfig b/editorconfig new file mode 100644 index 0000000..83795a5 --- /dev/null +++ b/editorconfig @@ -0,0 +1,7 @@ +root = true + +[*] +charset = utf-8 +end_of_line = lf +indent_style = tab +insert_final_newline = true diff --git a/export_presets.cfg b/export_presets.cfg new file mode 100644 index 0000000..a42cbfa --- /dev/null +++ b/export_presets.cfg @@ -0,0 +1,669 @@ +[preset.0] + +name="Linux - x86_64" +platform="Linux" +runnable=true +advanced_options=false +dedicated_server=false +custom_features="" +export_filter="all_resources" +include_filter="" +exclude_filter="" +export_path="export/linux/x86_64/glasan-fx.x86_64" +encryption_include_filters="" +encryption_exclude_filters="" +encrypt_pck=false +encrypt_directory=false +script_export_mode=2 + +[preset.0.options] + +custom_template/debug="" +custom_template/release="" +debug/export_console_wrapper=1 +binary_format/embed_pck=true +texture_format/s3tc_bptc=true +texture_format/etc2_astc=false +binary_format/architecture="x86_64" +ssh_remote_deploy/enabled=false +ssh_remote_deploy/host="user@host_ip" +ssh_remote_deploy/port="22" +ssh_remote_deploy/extra_args_ssh="" +ssh_remote_deploy/extra_args_scp="" +ssh_remote_deploy/run_script="#!/usr/bin/env bash +export DISPLAY=:0 +unzip -o -q \"{temp_dir}/{archive_name}\" -d \"{temp_dir}\" +\"{temp_dir}/{exe_name}\" {cmd_args}" +ssh_remote_deploy/cleanup_script="#!/usr/bin/env bash +kill $(pgrep -x -f \"{temp_dir}/{exe_name} {cmd_args}\") +rm -rf \"{temp_dir}\"" + +[preset.1] + +name="macOS - Universal" +platform="macOS" +runnable=true +advanced_options=false +dedicated_server=false +custom_features="" +export_filter="all_resources" +include_filter="" +exclude_filter="" +export_path="export/macos/glasan-fx.zip" +encryption_include_filters="" +encryption_exclude_filters="" +encrypt_pck=false +encrypt_directory=false +script_export_mode=2 + +[preset.1.options] + +export/distribution_type=1 +binary_format/architecture="universal" +custom_template/debug="" +custom_template/release="" +debug/export_console_wrapper=1 +application/icon="" +application/icon_interpolation=4 +application/bundle_identifier="net.humnom.glasanfx" +application/signature="" +application/app_category="Music" +application/short_version="" +application/version="" +application/copyright="Yuri Sizov" +application/copyright_localized={} +application/min_macos_version="10.12" +application/export_angle=0 +display/high_res=true +application/additional_plist_content="" +xcode/platform_build="14C18" +xcode/sdk_version="13.1" +xcode/sdk_build="22C55" +xcode/sdk_name="macosx13.1" +xcode/xcode_version="1420" +xcode/xcode_build="14C18" +codesign/codesign=0 +codesign/installer_identity="" +codesign/apple_team_id="" +codesign/identity="" +codesign/entitlements/custom_file="" +codesign/entitlements/allow_jit_code_execution=false +codesign/entitlements/allow_unsigned_executable_memory=false +codesign/entitlements/allow_dyld_environment_variables=false +codesign/entitlements/disable_library_validation=true +codesign/entitlements/audio_input=false +codesign/entitlements/camera=false +codesign/entitlements/location=false +codesign/entitlements/address_book=false +codesign/entitlements/calendars=false +codesign/entitlements/photos_library=false +codesign/entitlements/apple_events=false +codesign/entitlements/debugging=false +codesign/entitlements/app_sandbox/enabled=false +codesign/entitlements/app_sandbox/network_server=false +codesign/entitlements/app_sandbox/network_client=false +codesign/entitlements/app_sandbox/device_usb=false +codesign/entitlements/app_sandbox/device_bluetooth=false +codesign/entitlements/app_sandbox/files_downloads=0 +codesign/entitlements/app_sandbox/files_pictures=0 +codesign/entitlements/app_sandbox/files_music=0 +codesign/entitlements/app_sandbox/files_movies=0 +codesign/entitlements/app_sandbox/files_user_selected=0 +codesign/entitlements/app_sandbox/helper_executables=[] +codesign/custom_options=PackedStringArray() +notarization/notarization=0 +privacy/microphone_usage_description="" +privacy/microphone_usage_description_localized={} +privacy/camera_usage_description="" +privacy/camera_usage_description_localized={} +privacy/location_usage_description="" +privacy/location_usage_description_localized={} +privacy/address_book_usage_description="" +privacy/address_book_usage_description_localized={} +privacy/calendar_usage_description="" +privacy/calendar_usage_description_localized={} +privacy/photos_library_usage_description="" +privacy/photos_library_usage_description_localized={} +privacy/desktop_folder_usage_description="" +privacy/desktop_folder_usage_description_localized={} +privacy/documents_folder_usage_description="" +privacy/documents_folder_usage_description_localized={} +privacy/downloads_folder_usage_description="" +privacy/downloads_folder_usage_description_localized={} +privacy/network_volumes_usage_description="" +privacy/network_volumes_usage_description_localized={} +privacy/removable_volumes_usage_description="" +privacy/removable_volumes_usage_description_localized={} +privacy/tracking_enabled=false +privacy/tracking_domains=PackedStringArray() +privacy/collected_data/name/collected=false +privacy/collected_data/name/linked_to_user=false +privacy/collected_data/name/used_for_tracking=false +privacy/collected_data/name/collection_purposes=0 +privacy/collected_data/email_address/collected=false +privacy/collected_data/email_address/linked_to_user=false +privacy/collected_data/email_address/used_for_tracking=false +privacy/collected_data/email_address/collection_purposes=0 +privacy/collected_data/phone_number/collected=false +privacy/collected_data/phone_number/linked_to_user=false +privacy/collected_data/phone_number/used_for_tracking=false +privacy/collected_data/phone_number/collection_purposes=0 +privacy/collected_data/physical_address/collected=false +privacy/collected_data/physical_address/linked_to_user=false +privacy/collected_data/physical_address/used_for_tracking=false +privacy/collected_data/physical_address/collection_purposes=0 +privacy/collected_data/other_contact_info/collected=false +privacy/collected_data/other_contact_info/linked_to_user=false +privacy/collected_data/other_contact_info/used_for_tracking=false +privacy/collected_data/other_contact_info/collection_purposes=0 +privacy/collected_data/health/collected=false +privacy/collected_data/health/linked_to_user=false +privacy/collected_data/health/used_for_tracking=false +privacy/collected_data/health/collection_purposes=0 +privacy/collected_data/fitness/collected=false +privacy/collected_data/fitness/linked_to_user=false +privacy/collected_data/fitness/used_for_tracking=false +privacy/collected_data/fitness/collection_purposes=0 +privacy/collected_data/payment_info/collected=false +privacy/collected_data/payment_info/linked_to_user=false +privacy/collected_data/payment_info/used_for_tracking=false +privacy/collected_data/payment_info/collection_purposes=0 +privacy/collected_data/credit_info/collected=false +privacy/collected_data/credit_info/linked_to_user=false +privacy/collected_data/credit_info/used_for_tracking=false +privacy/collected_data/credit_info/collection_purposes=0 +privacy/collected_data/other_financial_info/collected=false +privacy/collected_data/other_financial_info/linked_to_user=false +privacy/collected_data/other_financial_info/used_for_tracking=false +privacy/collected_data/other_financial_info/collection_purposes=0 +privacy/collected_data/precise_location/collected=false +privacy/collected_data/precise_location/linked_to_user=false +privacy/collected_data/precise_location/used_for_tracking=false +privacy/collected_data/precise_location/collection_purposes=0 +privacy/collected_data/coarse_location/collected=false +privacy/collected_data/coarse_location/linked_to_user=false +privacy/collected_data/coarse_location/used_for_tracking=false +privacy/collected_data/coarse_location/collection_purposes=0 +privacy/collected_data/sensitive_info/collected=false +privacy/collected_data/sensitive_info/linked_to_user=false +privacy/collected_data/sensitive_info/used_for_tracking=false +privacy/collected_data/sensitive_info/collection_purposes=0 +privacy/collected_data/contacts/collected=false +privacy/collected_data/contacts/linked_to_user=false +privacy/collected_data/contacts/used_for_tracking=false +privacy/collected_data/contacts/collection_purposes=0 +privacy/collected_data/emails_or_text_messages/collected=false +privacy/collected_data/emails_or_text_messages/linked_to_user=false +privacy/collected_data/emails_or_text_messages/used_for_tracking=false +privacy/collected_data/emails_or_text_messages/collection_purposes=0 +privacy/collected_data/photos_or_videos/collected=false +privacy/collected_data/photos_or_videos/linked_to_user=false +privacy/collected_data/photos_or_videos/used_for_tracking=false +privacy/collected_data/photos_or_videos/collection_purposes=0 +privacy/collected_data/audio_data/collected=false +privacy/collected_data/audio_data/linked_to_user=false +privacy/collected_data/audio_data/used_for_tracking=false +privacy/collected_data/audio_data/collection_purposes=0 +privacy/collected_data/gameplay_content/collected=false +privacy/collected_data/gameplay_content/linked_to_user=false +privacy/collected_data/gameplay_content/used_for_tracking=false +privacy/collected_data/gameplay_content/collection_purposes=0 +privacy/collected_data/customer_support/collected=false +privacy/collected_data/customer_support/linked_to_user=false +privacy/collected_data/customer_support/used_for_tracking=false +privacy/collected_data/customer_support/collection_purposes=0 +privacy/collected_data/other_user_content/collected=false +privacy/collected_data/other_user_content/linked_to_user=false +privacy/collected_data/other_user_content/used_for_tracking=false +privacy/collected_data/other_user_content/collection_purposes=0 +privacy/collected_data/browsing_history/collected=false +privacy/collected_data/browsing_history/linked_to_user=false +privacy/collected_data/browsing_history/used_for_tracking=false +privacy/collected_data/browsing_history/collection_purposes=0 +privacy/collected_data/search_hhistory/collected=false +privacy/collected_data/search_hhistory/linked_to_user=false +privacy/collected_data/search_hhistory/used_for_tracking=false +privacy/collected_data/search_hhistory/collection_purposes=0 +privacy/collected_data/user_id/collected=false +privacy/collected_data/user_id/linked_to_user=false +privacy/collected_data/user_id/used_for_tracking=false +privacy/collected_data/user_id/collection_purposes=0 +privacy/collected_data/device_id/collected=false +privacy/collected_data/device_id/linked_to_user=false +privacy/collected_data/device_id/used_for_tracking=false +privacy/collected_data/device_id/collection_purposes=0 +privacy/collected_data/purchase_history/collected=false +privacy/collected_data/purchase_history/linked_to_user=false +privacy/collected_data/purchase_history/used_for_tracking=false +privacy/collected_data/purchase_history/collection_purposes=0 +privacy/collected_data/product_interaction/collected=false +privacy/collected_data/product_interaction/linked_to_user=false +privacy/collected_data/product_interaction/used_for_tracking=false +privacy/collected_data/product_interaction/collection_purposes=0 +privacy/collected_data/advertising_data/collected=false +privacy/collected_data/advertising_data/linked_to_user=false +privacy/collected_data/advertising_data/used_for_tracking=false +privacy/collected_data/advertising_data/collection_purposes=0 +privacy/collected_data/other_usage_data/collected=false +privacy/collected_data/other_usage_data/linked_to_user=false +privacy/collected_data/other_usage_data/used_for_tracking=false +privacy/collected_data/other_usage_data/collection_purposes=0 +privacy/collected_data/crash_data/collected=false +privacy/collected_data/crash_data/linked_to_user=false +privacy/collected_data/crash_data/used_for_tracking=false +privacy/collected_data/crash_data/collection_purposes=0 +privacy/collected_data/performance_data/collected=false +privacy/collected_data/performance_data/linked_to_user=false +privacy/collected_data/performance_data/used_for_tracking=false +privacy/collected_data/performance_data/collection_purposes=0 +privacy/collected_data/other_diagnostic_data/collected=false +privacy/collected_data/other_diagnostic_data/linked_to_user=false +privacy/collected_data/other_diagnostic_data/used_for_tracking=false +privacy/collected_data/other_diagnostic_data/collection_purposes=0 +privacy/collected_data/environment_scanning/collected=false +privacy/collected_data/environment_scanning/linked_to_user=false +privacy/collected_data/environment_scanning/used_for_tracking=false +privacy/collected_data/environment_scanning/collection_purposes=0 +privacy/collected_data/hands/collected=false +privacy/collected_data/hands/linked_to_user=false +privacy/collected_data/hands/used_for_tracking=false +privacy/collected_data/hands/collection_purposes=0 +privacy/collected_data/head/collected=false +privacy/collected_data/head/linked_to_user=false +privacy/collected_data/head/used_for_tracking=false +privacy/collected_data/head/collection_purposes=0 +privacy/collected_data/other_data_types/collected=false +privacy/collected_data/other_data_types/linked_to_user=false +privacy/collected_data/other_data_types/used_for_tracking=false +privacy/collected_data/other_data_types/collection_purposes=0 +ssh_remote_deploy/enabled=false +ssh_remote_deploy/host="user@host_ip" +ssh_remote_deploy/port="22" +ssh_remote_deploy/extra_args_ssh="" +ssh_remote_deploy/extra_args_scp="" +ssh_remote_deploy/run_script="#!/usr/bin/env bash +unzip -o -q \"{temp_dir}/{archive_name}\" -d \"{temp_dir}\" +open \"{temp_dir}/{exe_name}.app\" --args {cmd_args}" +ssh_remote_deploy/cleanup_script="#!/usr/bin/env bash +kill $(pgrep -x -f \"{temp_dir}/{exe_name}.app/Contents/MacOS/{exe_name} {cmd_args}\") +rm -rf \"{temp_dir}\"" + +[preset.2] + +name="Windows - x86_64" +platform="Windows Desktop" +runnable=true +advanced_options=false +dedicated_server=false +custom_features="" +export_filter="all_resources" +include_filter="" +exclude_filter="" +export_path="export/windows/x86_64/glasan-fx.exe" +encryption_include_filters="" +encryption_exclude_filters="" +encrypt_pck=false +encrypt_directory=false +script_export_mode=2 + +[preset.2.options] + +custom_template/debug="" +custom_template/release="" +debug/export_console_wrapper=1 +binary_format/embed_pck=true +texture_format/s3tc_bptc=true +texture_format/etc2_astc=false +binary_format/architecture="x86_64" +codesign/enable=false +codesign/timestamp=true +codesign/timestamp_server_url="" +codesign/digest_algorithm=1 +codesign/description="" +codesign/custom_options=PackedStringArray() +application/modify_resources=true +application/icon="" +application/console_wrapper_icon="" +application/icon_interpolation=4 +application/file_version="" +application/product_version="" +application/company_name="Yuri Sizov" +application/product_name="Glasan FX" +application/file_description="" +application/copyright="Yuri Sizov" +application/trademarks="" +application/export_angle=0 +application/export_d3d12=0 +application/d3d12_agility_sdk_multiarch=true +ssh_remote_deploy/enabled=false +ssh_remote_deploy/host="user@host_ip" +ssh_remote_deploy/port="22" +ssh_remote_deploy/extra_args_ssh="" +ssh_remote_deploy/extra_args_scp="" +ssh_remote_deploy/run_script="Expand-Archive -LiteralPath '{temp_dir}\\{archive_name}' -DestinationPath '{temp_dir}' +$action = New-ScheduledTaskAction -Execute '{temp_dir}\\{exe_name}' -Argument '{cmd_args}' +$trigger = New-ScheduledTaskTrigger -Once -At 00:00 +$settings = New-ScheduledTaskSettingsSet +$task = New-ScheduledTask -Action $action -Trigger $trigger -Settings $settings +Register-ScheduledTask godot_remote_debug -InputObject $task -Force:$true +Start-ScheduledTask -TaskName godot_remote_debug +while (Get-ScheduledTask -TaskName godot_remote_debug | ? State -eq running) { Start-Sleep -Milliseconds 100 } +Unregister-ScheduledTask -TaskName godot_remote_debug -Confirm:$false -ErrorAction:SilentlyContinue" +ssh_remote_deploy/cleanup_script="Stop-ScheduledTask -TaskName godot_remote_debug -ErrorAction:SilentlyContinue +Unregister-ScheduledTask -TaskName godot_remote_debug -Confirm:$false -ErrorAction:SilentlyContinue +Remove-Item -Recurse -Force '{temp_dir}'" + +[preset.3] + +name="Windows - x86_32" +platform="Windows Desktop" +runnable=false +advanced_options=false +dedicated_server=false +custom_features="" +export_filter="all_resources" +include_filter="" +exclude_filter="" +export_path="export/windows/x86_32/glasan-fx.exe" +encryption_include_filters="" +encryption_exclude_filters="" +encrypt_pck=false +encrypt_directory=false +script_export_mode=2 + +[preset.3.options] + +custom_template/debug="" +custom_template/release="" +debug/export_console_wrapper=1 +binary_format/embed_pck=true +texture_format/s3tc_bptc=true +texture_format/etc2_astc=false +binary_format/architecture="x86_32" +codesign/enable=false +codesign/timestamp=true +codesign/timestamp_server_url="" +codesign/digest_algorithm=1 +codesign/description="" +codesign/custom_options=PackedStringArray() +application/modify_resources=true +application/icon="" +application/console_wrapper_icon="" +application/icon_interpolation=4 +application/file_version="" +application/product_version="" +application/company_name="Yuri Sizov" +application/product_name="Glasan FX" +application/file_description="" +application/copyright="Yuri Sizov" +application/trademarks="" +application/export_angle=0 +application/export_d3d12=0 +application/d3d12_agility_sdk_multiarch=true +ssh_remote_deploy/enabled=false +ssh_remote_deploy/host="user@host_ip" +ssh_remote_deploy/port="22" +ssh_remote_deploy/extra_args_ssh="" +ssh_remote_deploy/extra_args_scp="" +ssh_remote_deploy/run_script="Expand-Archive -LiteralPath '{temp_dir}\\{archive_name}' -DestinationPath '{temp_dir}' +$action = New-ScheduledTaskAction -Execute '{temp_dir}\\{exe_name}' -Argument '{cmd_args}' +$trigger = New-ScheduledTaskTrigger -Once -At 00:00 +$settings = New-ScheduledTaskSettingsSet +$task = New-ScheduledTask -Action $action -Trigger $trigger -Settings $settings +Register-ScheduledTask godot_remote_debug -InputObject $task -Force:$true +Start-ScheduledTask -TaskName godot_remote_debug +while (Get-ScheduledTask -TaskName godot_remote_debug | ? State -eq running) { Start-Sleep -Milliseconds 100 } +Unregister-ScheduledTask -TaskName godot_remote_debug -Confirm:$false -ErrorAction:SilentlyContinue" +ssh_remote_deploy/cleanup_script="Stop-ScheduledTask -TaskName godot_remote_debug -ErrorAction:SilentlyContinue +Unregister-ScheduledTask -TaskName godot_remote_debug -Confirm:$false -ErrorAction:SilentlyContinue +Remove-Item -Recurse -Force '{temp_dir}'" + +[preset.4] + +name="Web - Universal" +platform="Web" +runnable=true +advanced_options=false +dedicated_server=false +custom_features="" +export_filter="all_resources" +include_filter="" +exclude_filter="" +export_path="export/web/index.html" +encryption_include_filters="" +encryption_exclude_filters="" +encrypt_pck=false +encrypt_directory=false +script_export_mode=2 + +[preset.4.options] + +custom_template/debug="" +custom_template/release="" +variant/extensions_support=true +variant/thread_support=true +vram_texture_compression/for_desktop=true +vram_texture_compression/for_mobile=false +html/export_icon=true +html/custom_html_shell="" +html/head_include="" +html/canvas_resize_policy=2 +html/focus_canvas_on_start=true +html/experimental_virtual_keyboard=false +progressive_web_app/enabled=false +progressive_web_app/ensure_cross_origin_isolation_headers=true +progressive_web_app/offline_page="" +progressive_web_app/display=1 +progressive_web_app/orientation=0 +progressive_web_app/icon_144x144="" +progressive_web_app/icon_180x180="" +progressive_web_app/icon_512x512="" +progressive_web_app/background_color=Color(0, 0, 0, 1) + +[preset.5] + +name="Android - Universal" +platform="Android" +runnable=true +advanced_options=false +dedicated_server=false +custom_features="" +export_filter="all_resources" +include_filter="" +exclude_filter="" +export_path="export/android/glasan-fx.apk" +encryption_include_filters="" +encryption_exclude_filters="" +encrypt_pck=false +encrypt_directory=false +script_export_mode=2 + +[preset.5.options] + +custom_template/debug="" +custom_template/release="" +gradle_build/use_gradle_build=false +gradle_build/gradle_build_directory="" +gradle_build/android_source_template="" +gradle_build/compress_native_libraries=false +gradle_build/export_format=0 +gradle_build/min_sdk="" +gradle_build/target_sdk="" +architectures/armeabi-v7a=true +architectures/arm64-v8a=true +architectures/x86=true +architectures/x86_64=true +version/code=1 +version/name="" +package/unique_name="net.humnom.glasanfx" +package/name="Glasan FX" +package/signed=true +package/app_category=1 +package/retain_data_on_uninstall=false +package/exclude_from_recents=false +package/show_in_android_tv=false +package/show_in_app_library=true +package/show_as_launcher_app=false +launcher_icons/main_192x192="" +launcher_icons/adaptive_foreground_432x432="" +launcher_icons/adaptive_background_432x432="" +graphics/opengl_debug=false +xr_features/xr_mode=0 +screen/immersive_mode=true +screen/support_small=true +screen/support_normal=true +screen/support_large=true +screen/support_xlarge=true +user_data_backup/allow=false +command_line/extra_args="" +apk_expansion/enable=false +apk_expansion/SALT="" +apk_expansion/public_key="" +permissions/custom_permissions=PackedStringArray() +permissions/access_checkin_properties=false +permissions/access_coarse_location=false +permissions/access_fine_location=false +permissions/access_location_extra_commands=false +permissions/access_mock_location=false +permissions/access_network_state=false +permissions/access_surface_flinger=false +permissions/access_wifi_state=false +permissions/account_manager=false +permissions/add_voicemail=false +permissions/authenticate_accounts=false +permissions/battery_stats=false +permissions/bind_accessibility_service=false +permissions/bind_appwidget=false +permissions/bind_device_admin=false +permissions/bind_input_method=false +permissions/bind_nfc_service=false +permissions/bind_notification_listener_service=false +permissions/bind_print_service=false +permissions/bind_remoteviews=false +permissions/bind_text_service=false +permissions/bind_vpn_service=false +permissions/bind_wallpaper=false +permissions/bluetooth=false +permissions/bluetooth_admin=false +permissions/bluetooth_privileged=false +permissions/brick=false +permissions/broadcast_package_removed=false +permissions/broadcast_sms=false +permissions/broadcast_sticky=false +permissions/broadcast_wap_push=false +permissions/call_phone=false +permissions/call_privileged=false +permissions/camera=false +permissions/capture_audio_output=false +permissions/capture_secure_video_output=false +permissions/capture_video_output=false +permissions/change_component_enabled_state=false +permissions/change_configuration=false +permissions/change_network_state=false +permissions/change_wifi_multicast_state=false +permissions/change_wifi_state=false +permissions/clear_app_cache=false +permissions/clear_app_user_data=false +permissions/control_location_updates=false +permissions/delete_cache_files=false +permissions/delete_packages=false +permissions/device_power=false +permissions/diagnostic=false +permissions/disable_keyguard=false +permissions/dump=false +permissions/expand_status_bar=false +permissions/factory_test=false +permissions/flashlight=false +permissions/force_back=false +permissions/get_accounts=false +permissions/get_package_size=false +permissions/get_tasks=false +permissions/get_top_activity_info=false +permissions/global_search=false +permissions/hardware_test=false +permissions/inject_events=false +permissions/install_location_provider=false +permissions/install_packages=false +permissions/install_shortcut=false +permissions/internal_system_window=false +permissions/internet=false +permissions/kill_background_processes=false +permissions/location_hardware=false +permissions/manage_accounts=false +permissions/manage_app_tokens=false +permissions/manage_documents=false +permissions/manage_external_storage=false +permissions/master_clear=false +permissions/media_content_control=false +permissions/modify_audio_settings=false +permissions/modify_phone_state=false +permissions/mount_format_filesystems=false +permissions/mount_unmount_filesystems=false +permissions/nfc=false +permissions/persistent_activity=false +permissions/post_notifications=false +permissions/process_outgoing_calls=false +permissions/read_calendar=false +permissions/read_call_log=false +permissions/read_contacts=false +permissions/read_external_storage=false +permissions/read_frame_buffer=false +permissions/read_history_bookmarks=false +permissions/read_input_state=false +permissions/read_logs=false +permissions/read_phone_state=false +permissions/read_profile=false +permissions/read_sms=false +permissions/read_social_stream=false +permissions/read_sync_settings=false +permissions/read_sync_stats=false +permissions/read_user_dictionary=false +permissions/reboot=false +permissions/receive_boot_completed=false +permissions/receive_mms=false +permissions/receive_sms=false +permissions/receive_wap_push=false +permissions/record_audio=false +permissions/reorder_tasks=false +permissions/restart_packages=false +permissions/send_respond_via_message=false +permissions/send_sms=false +permissions/set_activity_watcher=false +permissions/set_alarm=false +permissions/set_always_finish=false +permissions/set_animation_scale=false +permissions/set_debug_app=false +permissions/set_orientation=false +permissions/set_pointer_speed=false +permissions/set_preferred_applications=false +permissions/set_process_limit=false +permissions/set_time=false +permissions/set_time_zone=false +permissions/set_wallpaper=false +permissions/set_wallpaper_hints=false +permissions/signal_persistent_processes=false +permissions/status_bar=false +permissions/subscribed_feeds_read=false +permissions/subscribed_feeds_write=false +permissions/system_alert_window=false +permissions/transmit_ir=false +permissions/uninstall_shortcut=false +permissions/update_device_stats=false +permissions/use_credentials=false +permissions/use_sip=false +permissions/vibrate=false +permissions/wake_lock=false +permissions/write_apn_settings=false +permissions/write_calendar=false +permissions/write_call_log=false +permissions/write_contacts=false +permissions/write_external_storage=false +permissions/write_gservices=false +permissions/write_history_bookmarks=false +permissions/write_profile=false +permissions/write_secure_settings=false +permissions/write_settings=false +permissions/write_sms=false +permissions/write_social_stream=false +permissions/write_sync_settings=false +permissions/write_user_dictionary=false