pax_global_header00006660000000000000000000000064132242033450014510gustar00rootroot0000000000000052 comment=71637472766cf41bece3445f57a0ecfc9d1b5f95 gradle-completion-1.3.1/000077500000000000000000000000001322420334500151175ustar00rootroot00000000000000gradle-completion-1.3.1/LICENSE000066400000000000000000000020411322420334500161210ustar00rootroot00000000000000Copyright (c) 2017 Eric Wendelin 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. gradle-completion-1.3.1/README.md000066400000000000000000000155521322420334500164060ustar00rootroot00000000000000# gradle-completion Bash and Zsh completion support for [Gradle](https://gradle.org). This provides _fast_ tab completion for: * Gradle tasks for the current project and sub-projects * Gradle CLI switches (e.g. `--parallel`) * Common Gradle properties (e.g. `-Dorg.gradle.debug`) It also handles custom default build files, so `rootProject.buildFileName = 'build.gradle.kts'` is supported. See instructions [for bash](https://github.com/gradle/gradle-completion/blob/master/README.md#installation-for-bash-32) or [for zsh](https://github.com/gradle/gradle-completion/blob/master/README.md#installation-for-zsh-50), then consider optional [additional configuration](https://github.com/gradle/gradle-completion/blob/master/README.md#additional-configuration). Here's a demo for the gradle project itself: ![Completion demo](gradle-completion-4.0.gif) ## Installation for Zsh 5.0+ ### Install via [Homebrew](https://brew.sh) ``` brew install gradle-completion # Ensure /usr/local/share/zsh/site-functions is on $fpath. You should get a result from the following echo $fpath | grep "/usr/local/share/zsh/site-functions" ``` ### Install manually Download and place `_gradle` on your `$fpath`. I recommend `$HOME/.zsh/gradle-completion`: ``` git clone git://github.com/gradle/gradle-completion ~/.zsh/gradle-completion ``` Add the following do your '.zshrc' file: ``` echo "\nfpath=($HOME/.zsh/gradle-completion \$fpath)" >> ~/.zshrc ``` Start a new terminal session. You may need to disable the `gradle` plugin for `oh-my-zsh`. #### (Optional) Manual Completion Cache Initialization Completion cache initialization happens the first time you invoke completion, and usually takes a few seconds, depending on the size of your project. You can manually initialize the cache and avoid interrupting your development mojo by running: ```bash cd path/to/your-project source ~/.zsh/gradle-completion/_gradle 1>&2 2>/dev/null; __gradle-completion-init ``` ## Installation for Bash 3.2+ ### Install via [Homebrew](https://brew.sh) ``` brew install bash-completion gradle-completion # Source completion scripts from bash-completion in your bash profile echo '[ -f $(brew --prefix)/etc/bash_completion ] && . $(brew --prefix)/etc/bash_completion' >> ~/.bash_profile # Load changes to bash profile source ~/.bash_profile ``` ### Install manually Download and place `gradle-completion.bash` in your `bash_completion.d` folder, usually `/etc/bash_completion.d`, `/usr/local/etc/bash_completion.d`, or `$HOME/bash_completion.d`: ``` mkdir $HOME/bash_completion.d curl -LA gradle-completion https://edub.me/gradle-completion-bash -o $HOME/bash_completion.d/gradle-completion.bash ``` Ensure `bash-completion` 1.2+ is installed using your favorite package manager or by following the [bash-completion installation instructions](https://github.com/scop/bash-completion/blob/master/README.md#installation). Add the following to your `.bash_profile` (macOS) or `.bashrc` (Linux) file: ``` source $HOME/bash_completion.d/gradle-completion.bash ``` Start a new terminal session. #### (Optional) Manual Completion Cache Initialization Completion cache initialization happens the first time you invoke completion, and usually takes a few seconds, depending on the size of your project. You can manually initialize the cache and avoid interrupting your development mojo by running: ```bash cd path/to/your-project __gradle-completion-init ``` ## Additional Configuration #### Excluding build scripts from UP-TO-DATE check Tab completion checks known build scripts to see if they've been changed and refreshes the task cache if so. You can exclude build scripts from this check (and speed up completion) by specifying: ```bash # Default is `"/(build|integTest|out)/"` export GRADLE_COMPLETION_EXCLUDE_PATTERN="/(build|integTest|samples|smokeTest|testFixtures|templates|out|features)/" # Essentially turn off checking for changed scripts export GRADLE_COMPLETION_EXCLUDE_PATTERN="gradle" ``` #### Completion cache One can manually (re)generate the completion cache by invoking `__gradle-completion-init` after the completion script has been sourced. This graciously avoids an unexpected cache build when invoking completion. The build script cache is invalidated if any *.gradle or *.gradle.kts files change. However, these completion scripts do not search for new build scripts every time completion is invoked, because that would make completion ~20x slower (unless you have so really good ideas on this). By default, the build script cache is invalidated every 3 weeks (30240 minutes). You can configure this value by exporting a new value for `$GRADLE_CACHE_TTL_MINUTES`: ```bash export GRADLE_CACHE_TTL_MINUTES=$(expr 1440 \* number_of_days_you_want) ``` #### Implicit Tasks Gradle allows you to access tasks of subprojects from the project root implicitly. For example, given these tasks: ``` :foo :help :bar:baz ``` You can execute `gradle baz` from the project root and it will execute `:bar:baz`. gradle-completion will not tab complete these tasks by default because it adds a significant number of completion options, which may not be what you want and negatively impacts completion speed. To allow completion of implicit tasks, set `$GRADLE_COMPLETION_UNQUALIFIED_TASKS=true`: ```bash export GRADLE_COMPLETION_UNQUALIFIED_TASKS="true" ``` You may need to invalidate the cache using the cache config above or by executing `touch build.gradle`. ## Troubleshooting If zsh completion isn't working, first try checking your `$fpath` with `echo $fpath`. zsh completion using `./gradlew` may not work on Linux if you don't have `.` on your `$PATH`, so I recommend adding it in your `~/.zshrc` file: ```bash export PATH=".:$PATH" ``` > HEADS UP: If you get an error 'parse error near `]]"', please [upgrade zsh](http://stackoverflow.com/questions/17648621/how-do-i-update-zsh-to-the-latest-version). zsh 5.0.5 has a bug in script parsing that is fixed as of zsh 5.0.8. See issues #4 and #7 for more details. If zsh completion reports "Generating Gradle task cache..." every time, the zsh completion cache may be disabled. Enable it by adding the following to your `~/.zshrc` file: ```bash zstyle ':completion:*' use-cache on ``` You can get a debug trace of zsh completion by typing `Ctrl-X ?` instead of hitting `[TAB]`. That is especially helpful when submitting bug reports. ## Acknowledgements Bash completion is inspired by [Nolan Lawson's Gradle tab completion for bash](https://gist.github.com/nolanlawson/8694399). Zsh completion is an improved version of [zsh](https://github.com/zsh-users/zsh)'s built-in Gradle completion. Current improvements over built-in support: - Subproject tasks are completed - Gradle CLI options are current as of Gradle 4.1 - Common Gradle properties are completed - Handles default build file as specified in settings.gradle - ~20x faster completion speed for medium to large projects - Completion cache updates in the background after first invocation gradle-completion-1.3.1/_gradle000066400000000000000000000471121322420334500164440ustar00rootroot00000000000000#compdef gradle gradlew gw __gradle-set-project-root-dir() { local dir=`pwd` project_root_dir=`pwd` while [[ $dir != '/' ]]; do if [[ -f "$dir/settings.gradle" || -f "$dir/gradlew" ]]; then project_root_dir=$dir return 0 fi dir="$(dirname "$dir")" done return 1 } __gradle-init-cache-dir() { cache_dir="$HOME/.gradle/completion" mkdir -p $cache_dir } __gradle-set-build-file() { # Look for default build script in the settings file (settings.gradle by default) # Otherwise, default is the file 'build.gradle' in the current directory. local gradle_settings_file=${${(v)opt_args[(i)-c|--settings-file]}:-"$project_root_dir/settings.gradle"} local default_gradle_build_file="$project_root_dir/build.gradle" if [[ -f $gradle_settings_file ]]; then default_gradle_build_file=${$(grep "^rootProject\.buildFileName" $gradle_settings_file | \ sed -n -e "s/rootProject\.buildFileName = [\'\"]\(.*\)[\'\"]/\1/p")} default_gradle_build_file="$project_root_dir/${default_gradle_build_file:-build.gradle}" fi # If a build file is specified after '-b' or '--build-file', use this file. gradle_build_file=${${(v)opt_args[(i)-b|--build-file]}:-$default_gradle_build_file} } __gradle-set-cache-name() { # Cache name is constructed from the absolute path of the build file. cache_name=${${gradle_build_file:a}//[^[:alnum:]]/_} } __gradle-set-files-checksum() { # Cache MD5 sum of all Gradle scripts and modified timestamps if builtin command -v md5 > /dev/null; then gradle_files_checksum=( $(md5 -q -s "$(cat "$cache_dir/$cache_name" | xargs ls -o 2>/dev/null)") ) elif builtin command -v md5sum > /dev/null; then gradle_files_checksum=( $(cat "$cache_dir/$cache_name" | xargs ls -o 2>/dev/null | md5sum | awk '{print $1}') ) else _message 'Cannot generate completions as neither md5 nor md5sum exist on \$PATH' return 1 fi } __gradle-generate-script-cache() { # Invalidate cache after 3 weeks by default local cache_ttl_mins=${$(echo $GRADLE_CACHE_TTL_MINUTES):-30240} local script_exclude_pattern=${$(echo $GRADLE_COMPLETION_EXCLUDE_PATTERN):-"/(build|integTest|out)/"} if [[ ! $(find $cache_dir/$cache_name -mmin -$cache_ttl_mins 2>/dev/null) ]]; then zle -R "Generating Gradle build script cache" # Cache all Gradle scripts local -a gradle_build_scripts gradle_build_scripts=( $(find $project_root_dir -type f -name "*.gradle" -o -name "*.gradle.kts" 2>/dev/null | egrep -v "$script_exclude_pattern") ) printf "%s\n" "${gradle_build_scripts[@]}" > $cache_dir/$cache_name fi } __gradle-generate-tasks-cache() { __gradle-set-files-checksum # Use Gradle wrapper when it exists. local gradle_cmd="gradle" if [[ -x "$project_root_dir/gradlew" ]]; then gradle_cmd="$project_root_dir/gradlew" fi zle -R "Generating Gradle task cache from $gradle_build_file" # Run gradle to retrieve possible tasks and cache. # Reuse Gradle Daemon if IDLE but don't start a new one. local gradle_tasks_output if [[ ! -z "$($gradle_cmd --status 2>/dev/null | grep IDLE)" ]]; then gradle_tasks_output="$($gradle_cmd --daemon --build-file $gradle_build_file -q tasks --all)" else gradle_tasks_output="$($gradle_cmd --no-daemon --build-file $gradle_build_file -q tasks --all)" fi local gradle_all_tasks="" root_tasks="" subproject_tasks="" output_line local -a match for output_line in ${(f)"$(printf "%s\n" "${gradle_tasks_output[@]}")"}; do if [[ $output_line =~ ^([[:lower:]][[:alnum:][:punct:]]*)([[:space:]]-[[:space:]]([[:print:]]*))? ]]; then local task_name="${match[1]}" local task_description="${match[3]}" # Completion for subproject tasks with ':' prefix if [[ $task_name =~ ^([[:alnum:][:punct:]]+):([[:alnum:]]+) ]]; then gradle_all_tasks+="${task_name//:/\\:}:$task_description\n\\:${task_name//:/\\:}:$task_description\n" subproject_tasks+="${match[2]}\n" else gradle_all_tasks+="${task_name//:/\\:}:$task_description\n" root_tasks+="$task_name\n" fi fi done # subproject tasks can be referenced implicitly from root project if [[ $GRADLE_COMPLETION_UNQUALIFIED_TASKS == "true" ]]; then local -a implicit_tasks implicit_tasks=( $(comm -23 <(echo $subproject_tasks | sort) <(echo $root_tasks | sort)) ) for task in $(printf "%s\n" "${implicit_tasks[@]}"); do gradle_all_tasks+="$task\n" done fi echo $gradle_all_tasks > $cache_dir/$gradle_files_checksum echo $gradle_files_checksum > $cache_dir/$cache_name.md5 } __gradle-completion-init() { local cache_dir cache_name gradle_build_file gradle_files_checksum project_root_dir __gradle-init-cache-dir __gradle-set-project-root-dir __gradle-set-build-file if [[ -f $gradle_build_file ]]; then __gradle-set-cache-name __gradle-generate-script-cache __gradle-set-files-checksum __gradle-generate-tasks-cache fi return 0 } __gradle_tasks() { local cache_dir cache_name gradle_build_file gradle_files_checksum project_root_dir __gradle-init-cache-dir __gradle-set-project-root-dir __gradle-set-build-file if [[ -f $gradle_build_file ]]; then __gradle-set-cache-name __gradle-generate-script-cache __gradle-set-files-checksum # The cache key is md5 sum of all gradle scripts, so it's valid if it exists. if [[ -f $cache_dir/$cache_name.md5 ]]; then local cached_checksum="$(cat $cache_dir/$cache_name.md5)" local -a cached_tasks if [[ -z $cur ]]; then cached_tasks=(${(f)"$(cat $cache_dir/$cached_checksum)"}) else cached_tasks=(${(f)"$(grep "^${cur//:/\\\\:}" $cache_dir/$cached_checksum)"}) fi _describe 'all tasks' cached_tasks && ret=0 else __gradle-generate-tasks-cache fi # Regenerate tasks cache in the background if [[ $gradle_files_checksum != "$(cat $cache_dir/$cache_name.md5)" || ! -f $cache_dir/$gradle_files_checksum || $(wc -c < $cache_dir/$gradle_files_checksum) -le 1 ]]; then $(__gradle-generate-tasks-cache 1>&2 2>/dev/null &) fi else _describe 'built-in tasks' '( "buildEnvironment:Displays all buildscript dependencies declared in root project." "components:Displays the components produced by root project." "dependencies:Displays all dependencies declared in root project." "dependencyInsight:Displays the insight into a specific dependency in root project." "dependentComponents:Displays the dependent components of components in root project." "help:Displays a help message." "init:Initializes a new Gradle build." "model:Displays the configuration model of root project." "projects:Displays the sub-projects of root project." "properties:Displays the properties of root project." "tasks:Displays the tasks runnable from root project." "wrapper:Generates Gradle wrapper files." )' && ret=0 fi } __gradle_subcommand() { integer ret=1 case "$words[1]" in (dependencies) _arguments \ '--configuration[The configuration to generate the report for.]' && ret=0 ;; (dependencyInsight) _arguments \ '--dependency[Shows the details of given dependency.]' \ '--configuration[Looks for the dependency in given configuration.]' && ret=0 ;; (help) _arguments \ '--task[The task to show help for.]' && ret=0 ;; (init) _arguments \ '--type=[Project type to generate.]:*:project type:(basic groovy-application groovy-library java-library pom scala-library)' && ret=0 ;; (tasks) _arguments \ '--all[List all tasks, including subproject tasks]' && ret=0 ;; (wrapper) _arguments \ '--distribution-type=[Binary-only or all with docs and sources]:*:distribution type:(bin all)' \ '--gradle-version=[Set Gradle version for wrapper]' \ '--gradle-distribution-url[Set Gradle distribution URL]' && ret=0 ;; (*) _arguments -C \ {-a,--no-rebuild}'[Do not rebuild project dependencies.]' \ '(--no-build-cache)--build-cache[Enable the Gradle build cache.]' \ {-b,--build-file}'[Specifies the build file.]:build script:_files -g \*.gradle' \ {-C,--cache}'[Specifies how compiled build scripts should be cached.]:cache policy:(on rebuild)' \ {-c,--settings-file}'[Specifies the settings file.]:settings file:_files -g \*.gradle' \ '(--no-configure-on-demand)--configure-on-demand[Only relevant projects are configured in this build run.]' \ '--console=[Specifies which type of console output to generate.]:console output type:(plain auto rich verbose)' \ '--continue[Continues task execution after a task failure.]' \ '-Dorg.gradle.cache.reserved.mb=[Reserve Gradle Daemon memory for operations.]' \ '-Dorg.gradle.caching=[Set true to enable Gradle build cache.]:enable build cache:(true false)' \ '-Dorg.gradle.console=[Set type of console output to generate.]:console output type:(plain auto rich verbose)' \ '-Dorg.gradle.daemon.debug=[Set true to debug Gradle Daemon.]:enable daemon debug:(true false)' \ '-Dorg.gradle.daemon.idletimeout=[Kill Gradle Daemon after # idle millis.]' \ '-Dorg.gradle.debug=[Set true to debug Gradle Client.]' \ '-Dorg.gradle.jvmargs=[Set JVM arguments.]' \ '-Dorg.gradle.java.home=[Set JDK home dir.]' \ '-Dorg.gradle.logging.level=[Set default Gradle log level.]:log level:(quiet warn lifecycle info debug)' \ '-Dorg.gradle.parallel=[Set true to enable parallel project builds.]:enable parallel build:(true false)' \ '-Dorg.gradle.parallel.intra=[Set true to enable intra-project parallel builds.]' \ '-Dorg.gradle.workers.max=[Set the number of workers Gradle is allowed to use.]' \ '(-i --info -w --warn -q --quiet)'{-d,--debug}'[Log in debug mode (includes normal stacktrace).]' \ '(--no-daemon)--daemon[Uses the Gradle daemon to run the build. Starts the daemon if not running.]' \ '--foreground[Starts the Gradle daemon in the foreground.]' \ {-g,--gradle-user-home}'[Specifies the gradle user home directory.]:file:_directories' \ \*--include-build'[Includes the specified build in the composite.]:file:_directories' \ \*{-I,--init-script}'[Specifies an initialization script.]:init script:_files -g \*.gradle' \ '(-d --debug -w --warn -q --quiet)'{-i,--info}'[Set log level to info.]' \ '--max-workers[Set the maximum number of concurrent workers that Gradle may use.]:number workers' \ {-m,--dry-run}'[Runs the builds with all task actions disabled.]' \ '--no-color[Do not use color in the console output. (Removed in Gradle 3.0)]' \ '(--build-cache)--no-build-cache[Do not use the Gradle build cache.]' \ '(--configure-on-demand)--no-configure-on-demand[Disables configuration on demand.]' \ '(--daemon)--no-daemon[Do not use the Gradle daemon to run the build.]' \ '(--parallel)--no-parallel[Disables parallel execution to build projects.]' \ '(--scan)--no-scan[Do not create a build scan.]' \ '--offline[The build should operate without accessing network resources.]' \ \*{-P+,--project-prop}'[Set project property for the build script (e.g. -Pmyprop=myvalue).]:project property (prop=val):' \ {-p,--project-dir}'[Specifies the start directory for Gradle.]:start directory:_directories' \ '(--no-parallel)--parallel[Build projects in parallel. Gradle will attempt to determine the optimal number of executor threads to use.]' \ '--profile[Profiles build execution time and generates a report in the /reports/profile directory.]' \ '--project-cache-dir[Specifies the project-specific cache directory.]:cache directory:_directories' \ '(-d --debug -w --warn -i --info)'{-q,--quiet}'[Log errors only.]' \ '--recompile-scripts[Force build script recompiling.]' \ '--refresh[Refresh the state of resources of the type(s) specified.]:refresh policy:(dependencies)' \ '--refresh-dependencies[Refresh the state of dependencies.]' \ '--rerun-tasks[Ignore previously cached task results.]' \ '(--no-scan)--scan[Create a build scan.]' \ '(-S --full-stacktrace)'{-s,--stacktrace}'[Print out the stacktrace for all exceptions.]' \ '(-s --stacktrace)'{-S,--full-stacktrace}'[Print out the full (very verbose) stacktrace for all exceptions.]' \ '--system-prop[system property (prop=val)]' \ {-t,--continuous}'[Enables continuous build. Gradle does not exit and will re-execute tasks when task file inputs change.]' \ {-u,--no-search-upward}"[Don't search in parent folders for a settings.gradle file.]" \ '(-d --debug -q --quiet -i --info)'{-w,--warn}'[Log warnings and errors only.]' \ {-x,--exclude-task}'[Specify a task to be excluded from execution.]' && ret=0 ;; esac return ret } _gradle() { local cur=${words[CURRENT]} local curcontext="$curcontext" state integer ret=1 typeset -A opt_args _arguments -C \ '(-)'{-\?,-h,--help}'[Shows a help message.]' \ {-a,--no-rebuild}'[Do not rebuild project dependencies.]' \ '(--no-build-cache)--build-cache[Enable the Gradle build cache.]' \ {-b,--build-file}'[Specifies the build file.]:build script:_files -g \*.gradle' \ {-C,--cache}'[Specifies how compiled build scripts should be cached.]:cache policy:(on rebuild)' \ {-c,--settings-file}'[Specifies the settings file.]:settings file:_files -g \*.gradle:->argument-expected' \ '(--no-configure-on-demand)--configure-on-demand[Only relevant projects are configured in this build run.]' \ '--console=[Specifies which type of console output to generate.]:console output type:(plain auto rich verbose)' \ '--continue[Continues task execution after a task failure.]' \ '-Dorg.gradle.cache.reserved.mb=[Reserve Gradle Daemon memory for operations.]' \ '-Dorg.gradle.caching=[Set true to enable Gradle build cache.]' \ '-Dorg.gradle.console=[Set type of console output to generate.]:console output type:(plain auto rich verbose)' \ '-Dorg.gradle.daemon.debug=[Set true to debug Gradle Daemon.]' \ '-Dorg.gradle.daemon.idletimeout=[Kill Gradle Daemon after # idle millis.]' \ '-Dorg.gradle.debug=[Set true to debug Gradle Client.]' \ '-Dorg.gradle.jvmargs=[Set JVM arguments.]' \ '-Dorg.gradle.java.home=[Set JDK home dir.]' \ '-Dorg.gradle.logging.level=[Set default Gradle log level.]:log level:(quiet warn lifecycle info debug)' \ '-Dorg.gradle.parallel=[Set true to enable parallel project builds.]' \ '-Dorg.gradle.parallel.intra=[Set true to enable intra-project parallel builds.]' \ '-Dorg.gradle.workers.max=[Set the number of workers Gradle is allowed to use.]' \ '(-i --info -w --warn -q --quiet)'{-d,--debug}'[Log in debug mode (includes normal stacktrace).]' \ '(--no-daemon)--daemon[Uses the Gradle daemon to run the build. Starts the daemon if not running.]' \ '--foreground[Starts the Gradle daemon in the foreground.]' \ {-g,--gradle-user-home}'[Specifies the gradle user home directory.]:home directory:_directories:->argument-expected' \ '(-)--gui[Launches the Gradle GUI. (Removed in Gradle 4.0)]' \ \*--include-build'[Includes the specified build in the composite.]:file:_directories:->argument-expected' \ \*{-I,--init-script}'[Specifies an initialization script.]:init script:_files -g \*.gradle:->argument-expected' \ '(-d --debug -w --warn -q --quiet)'{-i,--info}'[Set log level to info.]' \ '--max-workers[Set the maximum number of concurrent workers that Gradle may use.]:number workers:->argument-expected' \ {-m,--dry-run}'[Runs the builds with all task actions disabled.]' \ '--no-color[Do not use color in the console output. (Removed in Gradle 3.0)]' \ '(--build-cache)--no-build-cache[Do not use the Gradle build cache.]' \ '(--configure-on-demand)--no-configure-on-demand[Disables configuration on demand.]' \ '(--daemon)--no-daemon[Do not use the Gradle daemon to run the build.]' \ '(--parallel)--no-parallel[Disables parallel execution to build projects.]' \ '(--scan)--no-scan[Do not create a build scan.]' \ '--offline[The build should operate without accessing network resources.]' \ \*{-P+,--project-prop}'[Set project property for the build script (e.g. -Pmyprop=myvalue).]:project property (prop=val):->argument-expected' \ {-p,--project-dir}'[Specifies the start directory for Gradle.]:start directory:_directories:->argument-expected' \ '(--no-parallel)--parallel[Build projects in parallel. Gradle will attempt to determine the optimal number of executor threads to use.]' \ '--profile[Profiles build execution time and generates a report in the /reports/profile directory.]' \ '--project-cache-dir[Specifies the project-specific cache directory.]:cache directory:_directories:->argument-expected' \ '(-d --debug -w --warn -i --info)'{-q,--quiet}'[Log errors only.]' \ '--recompile-scripts[Force build script recompiling.]' \ '--refresh[Refresh the state of resources of the type(s) specified.]:refresh policy:(dependencies)' \ '--refresh-dependencies[Refresh the state of dependencies.]' \ '--rerun-tasks[Ignore previously cached task results.]' \ '(--no-scan)--scan[Create a build scan.]' \ '(-S --full-stacktrace)'{-s,--stacktrace}'[Print out the stacktrace for all exceptions.]' \ '(-s --stacktrace)'{-S,--full-stacktrace}'[Print out the full (very verbose) stacktrace for all exceptions.]' \ '(-)--status[Shows status of running and recently stopped Gradle Daemons.]' \ '(-)--stop[Stops all Gradle daemons.]' \ '--system-prop[system property (prop=val)]' \ {-t,--continuous}'[Enables continuous build. Gradle does not exit and will re-execute tasks when task file inputs change.]' \ {-u,--no-search-upward}"[Don't search in parent folders for a settings.gradle file.]" \ '(-)'{-v,--version}'[Print version info.]' \ '(-d --debug -q --quiet -i --info)'{-w,--warn}'[Log warnings and errors only.]' \ {-x,--exclude-task}'[Specify a task to be excluded from execution.]' \ '(-)*:: :->task-or-option' && ret=0 if [[ $words[CURRENT] != -* && $state != "argument-expected" ]]; then __gradle_tasks && ret=0 else curcontext=${curcontext%:*:*}:gradle-$words[1]: __gradle_subcommand && ret=0 fi return ret } _gradle "$@" gradle-completion-1.3.1/gradle-completion-4.0.gif000066400000000000000000002557341322420334500215320ustar00rootroot00000000000000GIF87a )bbbKC^^^BBBJJJƃ VVVcX; T m__6 H%:0 +++X__E SyyyA` #;;;(____"""øvvvᠠ___)_-'__ᠠVN_i, __C;NNN_____O.____eeerrr_󦦦~~~_333ᠠᨨ11SKnnn% EF___ᛛ%%%_XF拋EEE+rjjjR@@@Q.}}} bbQQQ ԨGGGO!)aZZZ$:ѐ؟ߔe$hhhlllPSt1. ] ]]]wwwXXXe$_'hhhؕ__3OOO''' 888000ݜ!0{{{f#8 툈$_$#```qqq_+ 0 a! NETSCAPE2.0!,  H*\ȰÇ#JHŋ3jȱǏ CIɓ(S\ɲ˗0cʜI͛8sɳϟ@ JѣH*]ʴӧPJJիXjʵׯ`ÊKٳhӪ]˶۷pʝKݻx˷߿ LÈ+^̸ǐ#KL˘3k̹ϠCMӨS^ͺװc˞M۸sͻH[ N|ȏ+O|ПKN}دk}࿋O~ϫO~ˏOh`` .`>(aNha^an血וH&*.2H]6> BIF&A:JF RVIVfZv #rHq)difhflf9-tix|矀*蠄j衈&袌6裐F*餔Vj饘f馜v駠`dꪬ꫰*무j뭸ޮ+k&6*|3Vkfvm$k覫l)kՒwV!l' 7G,Wlgw ,$l(,ɞWl8<@-DmHc!iD-TWmXg\w`-dmhlp-tmx|ͶljbGGN߈'7G.Wngy 0cS馧ꪷNO'7GWOgwއϺ yF։~oO (L x>i a.R>k7z GH(L W0 gH8̡w@ H"(( ":$ZX̢.z` H2h$af&N Vx̣> IBL"F:򑐌$'IJZ̤&7Nz (GƎ E9j;!#@Z̥.w^ 0IbL2f:Ќ4IjZ̦6nzL&#OxJLo|tT0X}t&0z'>~ (@*ЂM(BІ2(D'*ъR(F7юr )HG*Ғ&M)JWҖ.)L>1uT;VuR`T;ˀHMRԦ:PTJժZXͪVծz` XJֲhMZֶp\Jקz!4:sOtO4ǩ d(bXx8ֱd#MTłf7z hGKҚMjWֺlgKͭnw pK,ejⱎebWM| lBKW("wM/z^},r0ȯ~LN;'L [ΰ7{ GLw(|W5oࠈr쵯QîީQ \t&;PL*[Xβ.{`L2hN6pL:x2NgAGO@V ѐ'MJ[Ҙδ7N{Ӡ o9tv })B  Qָεw^}N( ıc ȱ^t9pqb[ζn{7O S'˾SjJ-ֈ-5p zη~8F9PS[;^@M'hsx$&P[ϸ7 ;xp)ShSHgN8yyKnvwk,@PԧN[]|d]trG{OWk51o]o`<d§UD#\OOa"/9чvK7X~$OJp(0x8en\Dž\y9%78(XxׂTI vhe@ P6( (`Pʸ،͵Iuy^'H}%Gņ UV5vX%eΰ5e8 7{uGt1exB}޸ He:t@PP 5 e0K0 5y :<ٓ3 ҈Y[|]g]}g'eǍCߘYU"iYi$d&* PHЄnpϰy({ָwlfpvk[@ P爎?( POvC 9mB9E] t"&ȍhGiY[YeuH)OH#@9uyDxAgwx pxNf@8@NfX:eꙝ違wVGy[ 1xAP7ݰQ >B(FJȄN؈QX4Z6Jrϐٝ_n 㩂y  Xe 8x`b*r π ؙx lL)X-YS`eG8:Jf ~' qd鹧m}Jک*`ph>ʝSJ&uJzM Ԑ𩺺` z<؝n M zim8깡m ګzړm šZy} fWi* g:Jg @ ݊Nf^*HL@ Z[~gZvu:fvjRLڤڰ0,۲.z`ڣjhj^H HJ+w H`^yA֧jxjpЮp^9`K[f{9״9 3z |W۳Ȭ ;n`h;g!HQTˠǗZG{\' )-@m-m˯ʦr +sYi}+ йۻ0_蕯6[ǗoZ+ S؛ڻiS K*Usz'h!{H )K_{;[uֽ [&;w+9q`lfq[[K7Yj+ (*le,6~ p"h{^$L D\+;jygH !e``[lʯB +ŭ['9LVN/@]0@>ڏ벾i. smKyuJ;E}Be=0Vhݸnw.γε)|;Ѓ]VN e>pݹ.,{rľ#셞e 0N f.u~nܮ޾Y|#peW *eMpKVޚ^Ž~Vo&쌾FWӬmɋ坎^;e^0DH?dd0/~ᯋ~'/Ze @'i]g//O=ޜ <Ʌo[ef^ibo^=Uo۔OFNH -lJnIMX6^3ooשݫe~ܢ]M_/g(m@j+4l{nӑϦC=s}]~n 7pm9+3{y[R#fbV9q;;j'T̷ucEry[a^-xv7K9u?jN3kFzמIm7!Zb|{Wj:P1e5uS~IN~e  d`hF TW>Y`=A[`|7\da ]yoY.x@px/a}w%3]w9iM?dbX*W$!.Bm[bkC 0w%]zQkd(E*m64c6Q{lVuFACxHD&R`a;ỲgcyILf2Jo# &H$o$e)M9"?2s$TH-R%r)!ʑjt%攈ZSÄ 'U9*kI%LhF& ?Y+f7ɜ S5Jf;N%6{L> ?zB҂yP\e= Nҙ hEk)O6Tt %,-QC5/+e)"zL"0]DשϖTN(IcJƓNiQ‘NTf6=zTF/FK0RjWS4[PUzI#jttjk]gGՌ.u謩V jWs`m+z{elcTGvM\Xfvix.վ>U%"Uli]Z՜+J[ [V` g{U%nqEپ5Y\ ɝjm+fWmaS+%oy])daDL.ּ󥯒dP"6ok_6N:#UKV$ wep\1-|Oaoz`I&q]P]63 cx15'|XC& o[AfuDfrW[]|iS0b KԹX&s-xJ84.k|gzٍ.rwXnvPG2=睖Gq^hp^bQx~|klG^k|z]^[zz_OPc=?dS@?S;C[@ 4s @sþ@2B@JlA$"B}@A)@?BA>{j ? C<)3BIYa%WDNEMK :uCR\Z;9 EVBg91d.DDkF8qEEFo,G'`\tBslG(aTdGw%leG{W3G,H[TG#GlGE@GPdH6$H,ɏ4F+Ce@4I G|I LGTI@IIl$`IIl ;T|C;J4 D,B|J |Lȝ,ʫJɈ*I,KɌyIl˙ȉ#J4tK䈤7ʺˍhKTH/jDHlL˸ʱdLǬ̾E4\HʴL<,'\cBLӌ0l͆ˀ;$I׬M M:\LfM<ȴ$4MTJLΣ*4NMm<ͬ:StT-\G,OΣR% E$-kAFL#uӗTRN;5,Ss= K M T>8mEԣT RHEQ0͕ՓS:ԊS LO>P=ՒȴϵlRTI}O3WGIuSOӪMm;Uc;G4Ҕ\ѕTeIUuN;huXP& k[GhV$R?e1ZnUQ|Y4[i<\̕D۴U\VۘD,ܥ\ԅB]%\eԤٽAΡ]0\t\-]%^T]mS׽W}^rs^]^]@m^9$M^ޓ%÷ [M`|_?Y_]+4__?M`_.E`\ ?u^ V_Eս^^M޽_] Vm\E_> R-ۣjMV U#na.baa,f5*[.b `:]2>Nc{b6b7V?F[&c<ƼH9cb=cd[cXDV/^5\>nc+cJ:=nI<~bW\dO.:3T4.SYMeUvbP6725UR~噳de[^M6ecte`S.bF.fc%fe;8d~fX, efe6vfn.;af(g;f#gs:fC^`Šex7\+gcHeug [fBgC.f$6VζhwhdvA>6nы.Cgs hƸv^~釫hrhf*Vb}&f5o^d遖g Id7ڔ^ꋋm=]ebYbhT~j.ne~;ii_^k~hQ^׷g邦j靆\潦n Uj^ͭnvLk.dVlkN0ilIlwfh6Ԧǎnmgl.V.v쾞k;޾3ӖinM[mFnEKh]fn!f66FiԾnRjdj o6ťVnja4%fN7to6lIConF<{Y~}v-LapoHpo!SFzmCm/3FVv q qnpSHqN^ '/$/nrpVqqr qr/q6r1rm4ϱ'74*?ۈf9._<߶o>o2#A%D8Fױ7( gDtsȮqN/nu[t17zt$WssFwVutu\gQRu[[sns^vBudǭIg-[iϸ?pmvkwBg=nG+TGqv@ s9XJYOvjyw,]cwEvuikw#v^lvbGgwyw(\uY ^?rvew[3}yrxWyxswyx9yqe-~xOwo֓j\jFzg 27ylOڎyn)g)g)?'_t/{@7`Owa7|hzg|{|yH{||m|zz/|wwGA6gJOtLJ~зzzgG|W'~arWۗw~o[C{~w)/~Gbw_'},oz{*RE1 "COr4aQh \Qs*F܀z$ O*Wl%̘2gҬi&Μ:w'РB-j(ҤJ2m)ԨRRj*VyʍFrrGF8[,b/"H&Qfm1Ȓ'Sl2̚7sѭ][Zk}[Nܺeo_%RQcC,y2%ʗ3o9ҧSnݲh`Œ5[Znʥ.q3|;#.? 8 DeGwjyc'Pm-C6F q8"%x")"ifƠxyQ^ ){Kpq-*$M:$QJ܋uwZ6kv׎za a}H8%m&q9gU&j5:f[śydѹ(:(J16z#Z[}7)*z]W~ezbjt(:,{, [zׅ lz-;,7Fg^}ݒ{//%>ȧim[:0KmW5 6bww>;g1s-<#R{Iߡ'=k̫ۻ=髿UƪC62?<-;W$[2`.7@IW:C r0yӓ'?͍Od»:q!5 rP(l!sC=+H4jg !D}P`@UC1K"8:{ \G*ZOf<#[.`3/2vQWC᱐<䒸88N; IRZ MQ%C)Q>Gj#͢N|%,chJ:]8BmN$d)a*<&߸8),&4)͡F|LexY@2&89E"SK/Lq<50ϓ&[;XVs`T&(H q=h(Γ!B#*IӟP&'fshBbTDAҕ&Q"@[Hu6eaEGzՙM*T40Ue@ҡ2sNZRzu*VzU\f=zD+5 7U֓f}+\ծR׽bi 6iAZ=ϊJu+b#+AMdC+{quhE؂UZ>6-n5WS*Ps+ʯ)UZW΍b;?|.v뤹=}u+񖫲02ۯ&u%/|Kؒl.A+w?.YUymy.\Fu_nX{ SX9ѭt5V wؓf>1'SZN1c<cɵe70XbZI.`վU,)W ɗ5 {No82xĿͱӬ氚f+ ]!H~Y~ޱk c3l6pN4u|aA,Or3=a2SgƴC_6wڱuEXN&AYg7Юΰ;hZtݻ^tVfSz~6q9}k!Xר6KiW6j7;vZ[ۮ\6 -o۞vNFi-pJݯl=;uǵuM}TS eM?JpjG(yʏdaSp5% a"a%^'JJbZ~)FJ""ya)+2"Q"-N!]Pޢ/&#Mr/cd"-"2>c2*^ 2_>!4fcyyFQa :6#Ģ( 9H#&>^/=:ޣ?N2#6A^< #A>u.;BEHfV$d^$HVG.c-$JrF>2>cA$LrOF2޲c3dLg"G")NefH$I2#%P&ecObRF%dO~TfTF($VjXbE@NdX%5%dW.W^cX\ WҤY%Xv\%S0luB%_]M6&cJ"E fcN$8$^d\R&gRaޙW$\egMeU"?V 8iq @7$&`F_E&oRec%&ټ/,&oVlݵeQp6AqNgL4B-%٬]H(OG)i’A)zFi)]=Y`3ID(Ɨk)6B#d (mSoF0&ڀ¦ ))j,[jEP(ahR A-)zjx)n6M9 QCjikvZ74 n E"xPkiށ.hhyhLBT#=5k(GR&0XibuCbF6jfANA)) c1`I(?R$6H/|EXB+ny(l!XkÕ `"rj {-ETVk$Ҋ%A2<(dm&**tbLB 4"-*A't/A#HB r0[W"/>1>71@$ 4AA4BB'4C/C74D?DG4EOEW4F_Fg4GoGw4HH4II4JJ4KK4LL4MϴM4NߴN4OI?313Oq5$3gsqL$03vy*j{-Is=S/0#3P?^5__5``6aa6b'b/6c7c?6dGdO6eWe_6fgfo6gwg6hc.i0no1ǵQ'533uSG4W#hG&YV,֗8{+׆jb(HXo;S ߁!"Sq5\vj{/x x7yy7zz7{{7|Ƿ|7}׷}7~~7788'7jw5k5!öt3SCs DumwUBio7DB+Y9::Ǻ:׺:纮::;;'/;7?;GzKQ׹goq4KW3zrntsɢn Z1/7;׸ S<<'/<7?>>??'/?7??GO?W_?go?w0+yRs3C3TyzrˆorJ(/D7^<% BgHdE)q)Ä686$@"4y2@+YtfL3iִygN;yhPC5ziRK6ujTSVzI)S$ mh(")SZpȰ3rx=zMqd@gp@,+2Cc(#O^*8wec 1lh;2Ȣ2Z-F($.0CHPڋ/2-Z[1"+R\QC FR[5^jMy+h2I&"0:']f}hjlݖnpr=t]v}xWdͺ#9]QI I/20 q1BJ"Pb\$-FfԤFEfܹ 7v_rȄ$hmR9{uޙ}蠅袍>餕^馝~ꨥꪭ묵ޚ뮽Ff7mѸ~Ԯ+ 8>TPbU}ĎY1dM6quxm#6m=f&KEM?U_]emuߝ}?7G;"١#};B{ a 94aPEqD/miQ4JsUMZ{3!erܰhF T@>)XA ^9A~!IXB)T YB,D$0_p]t m/ a 7o*>h438ZV<ҕt 0 5iTF7qXG;yG? YHCT"HG>$VQ/: \xBuo'jJHF4p[HDR bCEDmT2Lg>є4YMk^6Mo~8YNsT:Nw9k2B)L*B>4X4m *SR3kQxP1V]Xj7y/x)_#1yC1LiZS9NySAPZTIURT>QTZU^YjO_:ƮbRg?7N b6!dhL4EKϊ)< R7H $_2$TiX)[Y^f9Y~hI[ZӞUjYZ׾li[[nyJ6!6œi_3DRzHoHUCмFz^atK -I!RW|[_~_ \` V`?)\a _ _CUHY2.rۅȩN}J|XCwD$Uf!,,+H5Hz!\e+_Ye/a\f3iVf7q\g;y e:]2}l{̥( SJ(TD Pc[X:Uۘ:WƊA^;# 䰖Rr"1mi]k[׹yk_]lcVlg?і]mk_mh б@ObKBR+@E+lao3cȺ13~5;~*CDj^l]k_9q!I^r)WYr1i^s9ys!NR ^ݗ6xC)+RxE8quoxԨN˫...E^wyw _xWx?)_y_)Aw)t^#Pra` iIXWַ"fWyL-dB&qc#F@RH^;G_}_}_~W~_|7`/mk{@iD{NT &+8Cb c`eqLf>LNPSPR[_cPgkosPw{P P  P 0VOLO> Cꦹڊ|(.߼4H|n$ .qcѮkQ  Q#Q'+/3Q7;?CQGKOSQW1 1 So a*&}<5-84bC-jE6PrH0QQǑQבQQ n +߂Q."\)O#~8K@MoAi W%[%_&cR&g&k&o'sR'w'{'(R((()R)))*R**_O/.P mWTNiȡ&ݰ1RqZR?N$$K OQr2%R000 1S1112S2#2'2+3/S33373;4?S4C4G4K5OS5S5W5[6_S6c6g6k7oS7s7wS18/k+ݼR!"22-/-.*:.2! ϓ/S=ד==>S>>>?S???@T@@ @ATAAAB#TB<8/-?%19&Mf"-H#;>;CR$GRdzSGwG{GHTHHHITIIIJTJJJKTKKKLTLǔL{G14Cs8T-<&#oƨEGUVE\~6VX;odHFm/ALUQQQR#UR'R+R/S3US7S;S?TCUTGTKTOUSUUWU[U_VcR5MG6>dC$PҮذ DRpܒE<;t~|OVf.7TVlɖh[[\U\Ǖ\\]U]ו]]^U^^^_U___`V``U[m [9pMc|5NGDXONp`#AmZ.G5aSPe[e_fcVfgfkfogsVgwg{ghVhhhiViiijVjj6hUk CkMsaYc,ѰPb'DME4EU6EI$F^Z Co7tNVkeVpp pqWqqqr#Wr'r+r/s3Ws7s;s?tCWtGtKtpoVoK0Rqb!PDvN-b6cQYn_T.A5Zcn6WudYzWzzz{W{{{|W|Ǘ||}W}ח}}~W~~~W~U[wync7Zyv%W唉t726!,TW ? H*,p‡ 6HQ"C-PA= R$I"GJfQ"(ϟ?qdg^~1DdOP%F "TV"qKF+OJ$Y ? ,g|Q`43/F@}>;iD-I3jS%^AU [-wOHDh"iUOT;%pD&5 \znS7X~"1U3\q`4 ܸ{|!,!,bW ? H&,Ȑ‡JQbC-2ĨPA=R'M D)MI7H&GfyIrDm>ID }&rUAQiQj"!a D68sl"[&ufضiƽ;7o]U @3dWd1_֘3ʀ!,qW ? H&,p‡6Q"C-ĨPA= R$Ƀ"GL4 1sGoiJij *q)ϐrNTI$oM˕1|V8"#n .dWϷ ɒ-y gZ|9phܹ3TЌ_3,0iKDa?m ЍXM8em٩ix[wn'!,W ? H*,p‡ 6HQ"C-b3p}P[$*Y2JT) Hqfg̞$Zt'O0-S P&!GqY*7Y~H5ò̰% pAQAyekMz!Kش$?`*)FLF˪gjMTE_"C#M jwCٳkNq7ug@!,!,W+ ? H)\Ȑ!‡60E)^(1cC=~Ѩ$(ҡD0cY9e Szs&̈́6\c+OA37Ͼ{_߀J)W| Ff?`($h(X qR 7!\-WߙC:&c6${CfF\Juce41Ie]ISni_喟Ff4\LɒqbfOvgZ'P iT1(MB`UjiYاZ>jNB~U2Mw ŮM@!,!,WH ? H*(ÇJH ċ+jܘG CzƑ nx+NAڸ Q59(2b; $Dwx ӡA0Am aB&x+-LJ3K"j.bD6y։])Ѐ:EĨnۄ17h\b~2|4A -!G`!G*U%Ud㉑ Pk V Z'K弆>:"> f Aڧl CprֱwA'T"'XZ{m–yѷJ `"jd𝂸Wze#eHwAׂs{' ZQلg$JމaPuQ@8ؤQR]8Ar8@B8i-T5rT98@"rqFGdgG&ީgAug~ hvJhI RY@!,!,!,In8? H*<‡ HC3jmƏ89rǓ( b;1Ð$GF2鲦ƕ,m&S$M@ Ϙ3*UIң1.U:TӠPeJէ=Kr]+ְ-Z֬άbvEK&ܴ[l;jʻEɷ]j,l%`72nnȄ1潚7WF 3ɢA-mz!ԝI>6Fϳ%FYeֹ!-{УKNukvk.^s࿋O~ϫ'}7?OW˿ϿHwaqA1(߄WmaX&a(,8"R!Gr= 6&ǟ;idTCF/ɖB8qO w W%BI$Z5Y_tٖ7jGf=#jkIҙh 4Yr䦍ᙧHtYTA|ZhhhTEi)Vߥar)Kʣ8=[:vT*P^ϞA뮻!,Jm8~? H*\ȰÇ#JHŋ3jȱǏ CIɓ(S\ɲ˗0cʜI͛8sɳϟ@ JѣH*]ʴӧPJJիXjʵׯ`ÊKٳhӪ]˶mۀ!,!,!,!,!,In8? H*< ‡p 0"=3jH7*IDdI!S,"+4iM̛[L$QPNiG/*)ԩS$"ZӪUYyzUG%,Q%\۞p]I]yEc50ԽecRNirJɛcv9s蕣Ik}cr3.n25Yh6䄳wk[/;)УKNةy=B{O37Ͼ{_߀J)W| Ff?`($h(X qR 7!\-WߙC:&c6${CfF\Juce41Ie]ISni_喟Ff4\LɒqbfOvgZ'P iT1(MB`UjiYاZ>jNB~U2Mw ŮM@!,!,8W\? H*\ȰÇ#JH"CP3jhǏ CIɓ(S\ɲ˗.7͛8sɳϟ@qѣH*]ʴSCg>JիXj֯`Ê28hƝ[\iJu\m܆krQW+^;ohUb+Ji|)rܑ9̛5wn(Mii2M6 .ʝ3L1S4%BEf[ 'n[l(/@i\i$`IDBbO{w(`Ng+X)QE~ƠR11v6vh;3d5Ђ`,RNJ"'1h5@fa BH! `QP8E:'1hYb1A"X]&dB! `jbCyt7Eե.HݢdP~.`~CM) ~$N" BzЙem[v뮟T? 8 U 5a&2Ƨٕ<Y9'ffh{Χ'addSE&/B)"4(8.Pj~I'y`5PY"6t;TUfBtBbu"l"ݢ"-+kPdMpUS,@Zbqpۖ DTZKȉgIB~ R;hvu暕t"=sEqZ`YӜvܸn C &2@8wwź ,|"ܢHׄ35oxxoT'2%A.'HVuꅯnPr![Cn:+0= NwD4@!0-dg jTX"|.1] Tx) yEp"q) Mn1i uXe`Кe{aXh́D2 M 5Xu刀 Oc"3N` qrAu6d]t|Y(̥D8ܜgaJ " 򖸄țCFchҐQб4Q3Dt]NdghO|F3\2DIO Ωz$s3|8 -DHJB6# l1HO4 &}>hTajZ"*ڀ{6)TCDmAR \I f=8@ E@0Di!P Q1:܌-27sҟT5eΒT"}T„e]ʘ@ǏQ^_'XABVL!dyA2&) B nFrAR3&eF$ Qt".t 0+FX1oEOɧ,B," E@( \A[&iA 2:dw=A@ Ұ)liH݃ ioK_Nn3Hkh L`{"7A!zh)'La6]nX*rfUo[ d&N1pjUMP,1wD>k !HN&;PL*[XβxGe ]2n@BbfhY,InF-шςd x ogwrgQgtUE6Va:! MRu@DW} CY}#b KmTX%`)IV,t_#J)H=`(D!-%)nOG+qqNq[q8P_Gm]-AL YK" Ybx=)O~@lb,mEFcpqqd &PҒr`U2ߒPt.dPP-':Fw&qreUbبZU@*xE&Dp-   6jsw3j"7|!(87tF7(Pq/scr,; B` /h2 ** '*l ;hSJ s"YYwh4Gc mHI[Jz2+.R–+C 93D f05#! f3}GӕA2!s;;78sdY) ӝ0qwk]_ZuN)3%2U 3i8 )dJIԒH+Y Abm9q%5cYxGk)Ki09iHQӀ1vOšNтpP)Sv9|a*$Ii9'=Nކ|V-Wp` 12u" X^TPJ9$ R')51pҒ$ws8@ )03/ @8VVL}v@n#*䃩>c 60oǧ;s/#^`<"1(?}c =Ұ Ղ@Unpn uyJvϳ.I$u==k5ɕM)`3Q<jC ʳ  x LC(îvtʯc趡} I a 03= lM zܓ\JESs 7L6 Br6s9ɄC#lVʉq'r6ד;1(CҘ9+ `l9U"*&d urB:ԋbȧNs[i`q ^Bts2!qĦ*6qUU` qEE\=We?ҦIٔFg -LPLr$X3WF@gFI5J@'C@ GI3IEK,/'pvF{xNNjef{Jk0`>K;ZppQG4N:u0[.aVj0e=7 quW-ȴAh06@d.LU[uW+3u &;kH MEz5cIӧIۼr9L:Pv!w[8ˤDP"4;sBXRG@P*Ni# M t]k1p(GEU{,#L+#8IDtu)騻LBLs9Q-S\NM[*D2i_,C/\Eܛ2ƉodE@+ ۢ!0heql&  %M&:dNJSm1S{[x8"!,<&951IR8rm)-|`` cR UE`Y( X[.1 L EL$ 'A2*)eL" )ABSeSQQ Q$#0 FFؔM(d`1sH|Xajǖ PeW('`%DmٍJ:g tk띚! $k=9}юcN@:k00[0SVa`ikJ+u*0#J;q#(US'o*B4Kßβڸ*]9<V\U`5bŇbfbwAU0'/ݛ{xי#tf*[S#FquӻXQ~C8}-0 BMPHқ l a8c^"@BpX"Xg*-ԼҀ"0-bGGv*=?JY (~' 9@4Ky4T6 j.aSX'K@d .1XY! ~YLdP2ϰߣT*pF^,n BDK8cpiJc#,3 brDSFa im {> 0^u ] qW'~ *];G]  ܾ{U1e !u@]~m۾z.7ϕ쟰 t1wu]^i%*.EZ6$_&(*,.02?4_68:<>@B?D_FHJ>g`&f9bfgf(10 r0vQ?F&dh A0Puyq&i)Aitxfuvh2;ASOy&H ,j' I]ϴݮ -, ??>m* !X[_*V /D 4Amrmٶm|i `hȯ p 9~*a/h\HʣFvKeޢnա5ij"bQ%J$oO'*$+-5nG!E$Y-LT4 R̠)1KrrQIaCM))*`y q HXQ+ZUDm:ِl="*kھbhٕJ$n"e&RIcQbqrF5oEUD+&}p`["ުbDi~ MWh{k[ o]n郘vjev"!5,>g((=<Dt +pvv"ل`qhWf8!k6BRn#HȢ,h-.ĠԯER7)wxU-C4.K1 !؂VW"`BDX(LXINX;d bBD G9Y+~Wf?#CHA!!J+EQmU2BEᕭ&b9 gŅL#6b 2+>E`1"mфFvv1G ͕lJRgf;E3A4|B/\H8V#[e+?JbQ/bD cGI]9%-ɒ%BCeLH҂@ RƆ8wFn1 +!X.v)G=YO<"!Ըg?Иɀ!hnsH, d= q$&4D8 44hEb#GA56. hTր*[X`$f$e9QU%-*єgAeGAq( POD.fw rǍU(^ ZHY r@0d}3,FHq8$֝&B o\ewMțiDvˤjR A}CC+{]%Bi *ICtxݹ4qӏ @ Y3p׵,q.#@cox  VbbhKyl %lN-¶I&#'f z#U]M9ÅДh!SF{j[ƒA P~F;bjY ф` bd0©2,THмD(C Z5^08%BZ IL ]m=I?қ 1ϠW"$e !mrB47g$9pH{ QP@;e+7ozx&u 10l>O6A0^k|md srXS@Er}*ҭ9|X?Z[lUo3֏/Eb O _uk 0nS|c?V+AzZBK1>ӽǐ 2hQ HH!5*`*(3/(OghS7 SJ<0Pف`Qj Y0⠎+AA* /Bxڠ?`O`AWyhaPhO("I !Ќz\i Z"'DÜ.CÍQtM{QM.|46DP4H@ITI'繎4QDRHL I/[4Id HUtEhH8ED.ĒH^L XN@P:pƣhc 04Eō\VlGw|Q?xGzG{G|Gy24}GG HGѱ$BPSQ#)j--b@M8@& !JK/ I"XBq#9ќbR&)RŤ&"˕YNF/Hg Mk&K.h"{ԧ!*UCrQ[JZlK4QuA6Dt&j+$M$N% ! efPDa% i"f<"I$ P1E5,$ uD,&Hp#`aSOTRTHK!ҧ14,MVڥD R>q>jԶiB'#D"2T!Bǩ PCRU竄0E/!J6 Ta"BH !+E^egmp@$vTMt!^'"†`G*qHQ.< NEX<) LLe BU$Ud` Bty PUڕ1/w+!E.E<($%eA̰5<d 0[XJXVk: R lvC^ֱQ\Ht}O@ޜ-(_BHF8 #.b1+%D:4A(QdSRAD x $ˢ7"E()[p!-APԥ{k(Ȁ"Dd҄z$DЕO T^A1@ȫ4@)Ađ?lN Dm1"An("EVXBp`X*AYJSV<""(pT:KWLDhb1%YL&Rb`"`D!9^6 M"\dXcʴ.'Rdj<}KM uη03$tL @d st /҄^-Epèe<\ViDens?4ijƀvS0"E`Ic9AwɄl1vբ&$ fi}mtx0;hx7] TQ]sM4thE1)ehdP+YmjiFl A5w-8N!E+}ww,!t.3EMЪKȽOlw 9f{9T^!:щ4"f9\dA2خ Irڀ2j)*"ş;Z e" A fHQlklD3ȫ䥓) \zߺNDN`!=JeӟnDu_`~(fx="Y `V$~w_;v?BoA^7|<3@ u DV;*@hFm=ɘۂ:bd%bnnx3"!(&|:dd/B"SPKZ^E> om@* 6{P \ %9) C5%TB(f$a5$,&`G5{vM?h Adׅ%p`5D@GIh8aXgB8cp'l#82ir4/i ƶP(d | ru@nhiP'pzX}'rh(zr`u؇rP8XxȘʸ،8Xxؘڸ؍n D`*Ier9SxH mp#{%A ␉9BU@ЋmH 9 Is7[w25EX$Ob-A "7B_~K2hƑ Q TŠ]1P) ەq&qb9A&ixhVvf%_wgb5qOr`P$Xp \+)OiMC wvEהS qT4Tdqkfc U1U`'KsE,3'*! Q`&K2i "21 3V(56 `nP/na\5U &@5]L )wockS6 03*`r Vg #2( /O)-u 2`/e0qi-`` SsZi AD$rzzE9\r&H"d0{S q9C ɴ$R!$6'y*bm ,9(#o #S`)>E."|ٗ h;&4]3)Rxd1>RE1 %cCo U}{#W@p{G4)J`DT) k@)@`cec?X@L@E-"tA$$_&R%HT)ʔ|p vfk|:D@:Wz*Eq~p$J8`l@"*f1"Ymc`B` =)+YS3ҲpVdH}:BoIRVԉs~TglH##k{EJ"tV*6^@P#R*ZFF"KԨL$cWӦ~EOXY"fjqC`°@  od0 `_[T$[v:n+ĴiP_ a; 3HAL$W5X$…k1DF ]b j˞N{Knn;bDA HA%kەpP;]|c5"ÒƲ*R|tMLJ˪rSje*Šs}6^T±%IN+8ʳQLv fJT K ?}|9=:\)$,.2h}ԟ`2T,؁@M=(໐ Q)RP@m*cN#P( i5,)5ySؗm"0z舶( 60r-. 1M\/\ :`B=]}؝ڽ=]}=]}>^~ >^~ ">$^&~(*,.02>4^6~8:<>@B>D^F~HJLNPR>T^V~XZ\^`b>d^f~hjlnpr>t^v~xz|~>^~芾>^~阞难>^~ꨞꪾ>^~븞뺾>^~Ȟʾ>^~؞ھ>^~>^~?_ ?_ {o()_j)Au 04?ذo/gW5-?;264?&F@90EoOQ/KG>Q>g5VM!?m?c/spOdofaq\/to{P_g!|N/U}_:aOX_?\_c~,c+ Pȟʿɟ _O¯؟ڿ ,~?_Z՟o$_ A-N\|"X *fC%NXE5nG-$YI)UdP࿈P6 YM9usdKA%R"“4{.eS<Z*e&Waw3PYiծe6mY[]y:|SUV{&\žDzcȑ&pcə5o朑2PˌM*\ȟY<kرVZtIҲu歓6Jۭq&^&&sǓVѵo=]Hs'_w?bn{S}zϧȾy~ +9 L@\;PA#  LB 3H PCCk-ODCDOLE cD`Qfl{ iG"xz&lr!,In8? H*\ȰÇ#JHŋ3jȱǏ CIɓ(S\ɲ˗0cʜI͛8sɳϟ@ JѣH*]ʴӧPJJիXjʵׯ`ÊKٳhӪ]˶ۛ!,!,!,!,!,!,!,+W, ? H)\Ȱ!‡60E3^(1D=~iQCMVD QB-]JP̂uL37Ͼ{_߀J)W| Ff?`($h(X qR 7!\-WߙC:&c6${CfF\Juce41Ie]ISni_喟Ff4\LɒqbfOvgZ'P iT1(MB`UjiYاZ>jNB~U2Mw ŮM@!,!,HWH ? H*(ÇJH!ċ+jܨ#F C~xQɊ$!jEр(Sf"A0)ʜIM9'lѧ!AVgRC fqF@HuAGSpQU1w d+۷w,[[" 6-K>z;ƝḾɪ5hۼie w`<5r <f8@meȜjBLԄ4q?qN` hP- }y9AgDԌzBN.F6' -*J(s$um{Hj' 5nR)zV9hdo0'f@&RNP-hd'L[x~}2in2[mk,&BƑm9rVD"ZC"lSilMS?Tzg& hHQY!,!,!,!,!,!,!,In8? H*\ȰÇ#JHŋ3jȱǏ CIɓ(S\ɲ˗0cʜI͛8sɳϟ@ JѣH*]ʴӧPJJիXjʵׯ`ÊKٳhӪ]˶ۛ!,!,!,!,!,8\W? H*\ȰÇ#JHŋ3ƱGCIɓ(Sw{VʜI͛8?숳ϟ@ m8?0 ]ʴӧwJի? `t֯`Ê(UسhӢuŕ+p5Yܻxdߴz \È'Ő#[-Sr+G-ϠiRi{kMfG |ͻ7ؾ X( ÓK:dֳ O`(; O~?_;?tO|T~p`6Ff\u&7AK a$4AnbH#"Jo)⌰G8T:,D9F&H.36 Tn(eXf\v`)dihlp)tix|矀*蠄j衈&袌6裐F*餔Vj饘f馜v駠*ꨤjꩨꪬ꫰\*무j뭸뮼+k&6F+Vkfv+k覫+k!,TW<  Hৃ*\ȰÇ#JHŋ3jȱ zIɓ(S\0dH0cʜI&L mɳO8 JQA ]ʴӑIE>JOQ^ʵάҼK$زhӪxv۷iKܺx_| 20È9N̸Ŏ#KFyeƕ/kyg?ziOz뭭_˞{o{Y |qŏ+!,!,!,!,!,!,!,!,!,!,!,!,!,!,TW ? H*,p‡ 6HQ"C-PA= R$I"GJfQ"(ϟ?qdg^~1DdOP%F "TV"qKF+OJ$Y ? ,g|Q`43/F@}>;iD-I3jS%^AU [-wOHDh"iUOT;%pD&5 \znS7X~"1U3\q`4 ܸ{|!,!,bW ? H&,Ȑ‡JQbC-2ĨPA=R'M D)MI7H&GfyIrDm>ID }&rUAQiQj"!a D68sl"[&ufضiƽ;7o]U @3dWd1_֘3ʀ!,qW ? H&,p‡6Q"C-ĨPA= R$Ƀ"GL4 1sGoiJij *q)ϐrNTI$oM˕1|V8"#n .dWϷ ɒ-y gZ|9phܹ3TЌ_3,0iKDa?m ЍXM8em٩ix[wn'!,W ? H*,p‡ 6HQ"C-b3p}P[$*Y2JT) Hqfg̞$Zt'O0-S P&!GqY*7Y~H5ò̰% pAQAyekMz!Kش$?`*)FLF˪gjMTE_"C#M jwCٳkNq7ug@!,W ? H&,Ȑ‡JQbC-2ĨFm܉ąh#LjJ\yIi2L1Sʖ_$V"u<@;ТM9>eT^qkUb5,ԯR&ĕbA%U=j[ ClԠ B X3"V ȱR-`6H#/'Μ3粜! ̥Q !,W ? H&,p‡6Q"C-ĨPA= R$Ƀ"GL413%GAIēg9%*q~jS<)r tW]R,Oή*Ʊe635hAsk4M PƧ&rS~AW %x6aV3l$-4dž-!,In8? H*< ‡p 0"=3jH7*IDdI!S,"+4iM̛[L$QPNiG/*)ԩS$"ZӪUYyzUG%,Q%\۞p]I]yEc50ԽecRNirJɛcv9s蕣Ik}cr3.n25Yh6䄳wk[/;)УKNةy=B{O37Ͼ{_߀J)W| Ff?`($h(X qR 7!\-WߙC:&c6${CfF\Juce41Ie]ISni_喟Ff4\LɒqbfOvgZ'P iT1(MB`UjiYاZ>jNB~U2Mw ŮM@!,!,W ? H*\ȰC"JHŋ3jHč Cȓ(S&,Q˗$YVIӚmѨՔ9Ki$DwhD 0LGIҜJʫ\c Tf]^j@[0Fؠ0V v̭ 1c%1a@DMx†B6va+mEOZ* )v"qfւ4)Y_4 /jN"ډA  r*G8<=09BqNqW=c!I@P%ePl'8I'yQE"I5!%х]I[m0P`kR &AUi A1F"9<$cCJl8ōxc !p8[t'P7As- LȆXE8HtFR|I Kqt"E@hqN'\ dw(fiˆ &mQqKFI5î¦SdI5\ `l@ a4HҺƔI~"ZuRM$]ɱ4aЀ@ihPdƙ(b$A`ZPe˄ u" $Sc4TA{AhB>BA#OʆNBP;#d!(Dݳ,uXEĐ@'idPiA'xCb YB$Aa'y\dBB &m;\Cj%DI6:&ի`f gךUZKYi*e6ےq[,TyW]$\xᯊzđA2fZV<7s-'WԪ;?lZhʲҮvwx+‡C,n<2ozө. 7'ËO^s{jO} ~R (I ?>P6}~;"ʃf[ >6(_(f8L~),S (5XdH%<B BL6PF% #`u e#%F^dn-b6&V3\k.uߙgsYw"ab٧iĜvhK1(^B"V)a)dթ*cicNb= _*(tj+~ɕ랫JҰj,zj6J(ؐzt뭷!,sWE? H&,ȰÇ#JHŋ3jȱǍ C"Hɓ(S\ҢH-cʜI͛_ɳϟ@gTѣHohƝS\]իX-*IĵSfKl SzʝK[߿I7'+88/ذ#KNܸ@3k[͠CWӨ{{81W6 m=ͻwFٗ[Nac@u_*%ټo(يA0[oEWN=j9rkg&^6`fv` *``5afua&a ($h(,0(4h8<@)DiH&L6PF)TViXf\v`)dihlp)tix|矀*蠄j衈&袌6裐F*餔Vj饘f馜v駠*ꨤjꩨꪬ꫰*무j뭸뮼+k&6F+Vkfv+k覫+k,l' 7G,Wlgw ,$l(,0,4l8<@-DmH'L7PG-TWmXg\w`-dmhlp-tmx|R߀.n'7G.Wngw砇.褗n騧ꬷ.nG!,!,W ? H&,p‡6Q"C-ĨPA= R$Ƀ"GL4<2c#G337Ͼ{_߀J)W| Ff?`($h(X qR 7!\-WߙC:&c6${CfF\Juce41Ie]ISni_喟Ff4\LɒqbfOvgZ'P iT1(MB`UjiYاZ>jNB~U2Mw ŮM@!,!,W ? H*\ȰÇ#J(ŋ'jȱǏ1ɓ(SR)R˗0cdR͛8%6rѨ ExQwhܙ%DXJP ֯p5( l"CR2"ҎaB;p3r4 %÷[asNÒ7ծ%3MꨎQ`3r΀P]G&uX#A1|:!@#"={m#'̰Ȍ)i 6Ky'l)dcWBЃ9 G1>>,0dXm8FAfsiqc$@8ȓ)DuVP@\kV"J")8_"܉$͊XhPC@@&A`E@WPM.I_"%ɳ"XJhPtU(%PX 9*I3-Xi@g&҉A(tꫯI]B"xg" j",ZM3@2KVͮ YeyeRd- Vؤ- E9Ze`+P !m"ʛH<‰(6E&ׇ!(2E$gF4@We,XA|0dl5e"Gk"}qtHFhadH5蛞҉ "N?cGb2ݴR.P&Vz7K9D.ynxV եmr_#GtM+26MWN|fʜF N,h3=P`͞P'մPtn+2Ï%b@k$Cqm'y'$BmA1&EitHN域dwA&A&HCǘ1sa9 2%| u3hHф vD*4mY)!PP-Ӏ2 pF*o  R(BM1x"L4bԹCw:RI$t--_&&?X'U%EZ"b.hDHt.d{~tpP5m{|684 xz@&90we -`x"=H;@F8R!7+6"eLvDK4H"NBLc"Sm%@?4 "AQlz#'Ab鈳<$fLVj-zA ̒Bg4=3M+DlA. gO  ?%s b .,NǗ^"#M&ژ@<2@# *nR`IAX5cbT*5=]JժNXUՖ& !,!,!,!,!,!,!,7W=? H*\ȰÇ#JHŋ3jȱǏI$ȓ(S\ɲ˗0cʜIf̒8Gɳϟ@ Jɜ9*]ʴӧPJԫXjʵׄUK~58hƝ[\iM&G%jٺu7ڶol஍*y F(59wwѪV;$MNKn!#͚t锢md<5s6mSnC$O [xg)h4t[l}{(s4"g.3g0r!Ms] @7MuF;@UV b^"HHJ$O%r^J h5YhKPhV#EgЏ.M2x R?lfQ-"u)BmM(9PD%E#FOxP9E(YmQ3ڊ" dI #r1JA"ii&j "l"P'yKy)Yr& hd%B' G!6rѲ!6DP60 Z'j! #DjrkQk2JP1rP &eH QA`Xx2m|n t&c@S!KcV^ 1d6&

k=SxU qG󈁼hdG;!rݩnazⲁͱwLDR ٱGrR a&iHb"8 A~˄0O $',1 7IBCUB < 8j; Tȁ2 C!q&1 Ei'F$!$Q-GrCAf"j`IE'8zH c"  9Q/&$BsHCOLR-FuQh^Kmj6b6n< >@$b:f*eiĞF l[6Ԥ@ң-`4jVDt1J)DZЦ<:0xCx) Cj A[U%5KRfh` A  v6= t;:U}h"h "ZB;D1!EjQh$[09[XDx u7က3I:rXXѸwH ҳ3*/c;-hgԠ)^Myk^B6KReR#AЪ`O(/hP7N@mAΘ5!r<= Q-&z:)H)[47z {pbG"V lCc/4pĞyr Ul +o'z~[b r{[M3{& 1NzNi*}jP>^i /Td$h !@z~| a!{Wq>U32W#zV`'r@^Ҷ37Ce QeP \/Pr E!}pF$ <̵t 1I@c/HCn[-8_m^@2'4$;D6fU) BM JϠveQ A8S",\7M6w7W{hG`yPpI6Nl $ (W? &cSODlu%u|M6cf%Cdu# _c/HbA0l|Gind. hHTa FxtD68}PWp?iks!wבǸ=9ؐ>h7vAc!eы ca1ādu 092hSBpG8@QR>-PAeAiBu@aY2)U7Wcؑ7^J8Q(D!T9VY$C;pT 1sC>U88u#A~BU$U,=ٗRX)4[yB Sy 6\:5qc#  u(n\Y8y'i -fPI3^0#@e(zYpͩ isY i,IY扞;d` @hAT"P qIיq* Zߩɛ31 UF!}DG&4 c ^&):j=C#XC71$7J:BAw+v[FuQU`JbdeZg6jzPSw86QJxJz~#q+G=nCHP'ъA 4x qn*X:CNa %QGL,iF"cpyZz*48p~jZzJAҪ * ŠA֊zQP "p麮:r:Zzگ ;Z ۰;[{۱˨fAw!S /[y#U r?11K3rq)VT:֯7(R!q⡟4qN ᚟!;am\ѴIk = Qp9x2i Ыz(&2۶q;Dq`P`j``.f X7u (" Qq@\{V`{5y!~FhK6$'"(0-Vb AB&2.&Z.10lnbkhSQ 2 "Pa)rA&R[遾90 )fūJ0D3u` e-g S-KWOu  C S-<.Hn &-ؽ*'tb'iR$rRktrcS YDVA\S7QZ+%h!jlT4B%X6liV5zfc5l'%}Vg| q(j&xl^l:ic9y2<V H'7 #2$S>4Q3QEAsi $AgBB#CA5T#{jMha yCX %$>CV64$6rC1|Et'hm4Js@M&;Lmk07|HwvۅyRk6|Ȥ1R=⌵]q@S-uk2c j!;c0D>!mKTALFFTp4NSkFfkbVu\~D`TP s.O1ͳĵMDh|~GdL! QAUBOͦ@?T}]#?"|ڗa9 d i4 qd˸-=Qݹ\ev"#9yO%k=وM~" 3U6śPӒ+ (Z5ڶ| 1 Q i1~M1nE9Y׵m|X(ToxfX%⎰ݖefB'OWVa^DM2!Xav F%=dTEImI{-Hyvaq?+GIպm^]rIpf с`8Y@Z~6I`5d\po1c4?le x >ql1Dqq>HqF ξRLl.\⨀ }u };5=B0 +SŖnsؓsi!uxes>׷ b롎ktwKr[mNm buaR>n*#eFy̞g x$]-  1R'ᾭӺ'sEFiN8 F ~eTF͛ע0W;QyL43KvP3.N8P~1EvEiY 7kZ3`5rcE 10Y CM;؃|hg|y9O(XP?S@]XHE癿(aS rQޏ z  Ce2;@fSK%/  NH'XIe 1q@%TР[l8AS"Ty X&آ`ŠR!O3eΤYM9uD\4DOB @a!43ɬ)N"M2j4H؀P=Ƞ+KActLRTCsPu&(c&XdUveBRZjZ1@kw\r :J rÓvwޛPĩ,2_" ]V h /xb;M6f8ʁwcC&mSD&AEVye[vB!,=W $ H*\ȰÇ#JHŋ3jȱcÀ!,=W $ H*\ȰÇ#JHŋ3jȱcÀ!,=W $ H*\ȰÇ#JHŋ3jȱcÀ!,!,!,!,!,!,!,In8? H*<‡AH"ċ3Ķơƌ89rǓ(7"aH$MH4)RfΟ mTN>*(tң0.-iQ1Nj'֒ZrJkϰJǒmiT3ծE-ܔr~{g^ yK/| Ċ2nLT#' t]5oxg'3 2ja^5زI+m{!ܥ=l?YμУKqZν jN뻓_|O˟p<z_Bh y߁ rQ'RwzB(iLjTQx[y'!BHЇ-'Ayأ39#m!vK27ZARYjWbyLqYdpYI^]Ԥr`eӜt~i~c"ڟZ6%phtJMgJaNظ駟!,Jm8~? H*\ȰÇ#JHŋ3jȱǏ CIɓ(S\ɲ˗0cʜI͛8sɳϟ@ JѣH*]ʴӧPJJիXjʵׯ`ÊKٳhӪ]˶mۀ!,!,!,!,!,!,!,<W ? H&,Ȑ‡JQbC-2ĨPA=R'M D)MIb :,%JdI%Ph~z K; 3 )byVFO&jiD/XДHӀMVk'%&T[d; ng(脛D\5`гDupKJBj R R3 E-4Gw>N[\c:Ѣd҄K۪Q&K&FOtRE!,KW9 ? HJ[ȰaÄ#J"É3RXQG;~Y0C(|ʋ-G\S̚gJ# 9f 0!F2< f`:E(-`AN;iD-I3jS%^AU [-wOHDh"iUOT;%pD&5 \znS7X~"1U3\q`4 ܸ{|!,!,bW ? H&,Ȑ‡JQbC-2ĨPA=R'M D)MI7H&GfyIrDm>ID }&rUAQiQj"!a D68sl"[&ufضiƽ;7o]U @3dWd1_֘3ʀ!,qW ? H&,p‡6Q"C-ĨPA= R$Ƀ"GL4 1sGoiJij *q)ϐrNTI$oM˕1|V8"#n .dWϷ ɒ-y gZ|9phܹ3TЌ_3,0iKDa?m ЍXM8em٩ix[wn'!,W ? H*,p‡ 6HQ"C-b3p}P[$*Y2JT) Hqfg̞$Zt'O0-S P&!GqY*7Y~H5ò̰% pAQAyekMz!Kش$?`*)FLF˪gjMTE_"C#M jwCٳkNq7ug@!,W ? H&,Ȑ‡JQbC-2ĨFm܉ąh#LjJ\yIi2L1Sʖ_$V"u<@;ТM9>eT^qkUb5,ԯR&ĕbA%U=j[ ClԠ B X3"V ȱR-`6H#/'Μ3粜! ̥Q !,W ? H&,p‡6Q"C-ĨPA= R$Ƀ"GL413%GAIēg9%*q~jS<eT^qkUb5,ԯR&ĕbA%U=j[ ClԠ B X3"V ȱR-`6H#/'Μ3粜! ̥Q !,!,In8? H*< ‡p 0"=3jH7*IDdI!S,"+4iM̛[L$QPNiG/*)ԩS$"ZӪUYyzUG%,Q%\۞p]I]yEc50ԽecRNirJɛcv9s蕣Ik}cr3.n25Yh6䄳wk[/;)УKNةy=B{O37Ͼ{_߀J)W| Ff?`($h(X qR 7!\-WߙC:&c6${CfF\Juce41Ie]ISni_喟Ff4\LɒqbfOvgZ'P iT1(MB`UjiYاZ>jNB~U2Mw ŮM@!,7|? H*\ȰC ܵQŋuf6Bk4 ÈmLW#Ǝ+sf @VDY309(ӅH%erkdU%r7PԳ~~(MjI%Kٳow ^6Q^8rܕ<0"BVhbq* 6gД]f0lj[lpTjO)TȬlKo*l91(:׈e˖D`̀,6ߥ|ܴA9쩤*U{WE9uxlԧ5RQ@g_w!q bK#w sebq&ز.Q`ذAuLg i?g ((,",p,mXa2ATLxH.(D)6-y|<4a*g~Q54ihLv=/zlK 3NO;KBSlcz#A}wݤ2(MAXl7u ]9&x[M J"b $*|"X?BD $bHL @!g40A5w& 7dlAAĔL*dfR @#=}rd }qX}b?l8yg 8@*[V- &ljӏc(;qk@&hłc  mb(ADAx4/P?e2AMhf/iɢa6u>,dp QhB?]JJR/tiJ-0 ! 16S5$TuHUf. <|KL0hb)Mj _/VM MS_:׺"dGC:҇ y-޲G@"lS,nZiA*3lNȲ:D(P][Xb OLD*b~B fVj=)j Lv[8l † ӬYdA6킩 cZ>@u մ5A=B;N7 nn_ĴCmC־66Ȁ'3Hg9~F s҂eKwy W~"y_I 0CjRe9a"{?W`b]sۻdzR{+bUI 2@,-N"RbBd`z_,9܁ jFҘFu!b Q 08oq؉0=[ I5Xj-.ᕿkl`AԙW٭d\cخ"rGQ2xH4L/U8.MrlAEЭnKMEMO0B*)ºCxkJ&*Zs kx» (h/ӑf| bq=-5w݊":DɼY:M8LW2"$I.:6o=ؚ .e-|A!-Lb.RA`[\ЁP"A 3.ܮ;PrW&r ?$Rbˬ=H7V}n iA2~;Aq Tٞ\7(' ]Ue"T.T&"O@@gǻ-30{xlA\lɋÕD4AR̠pG' $)uDUUqn:/0$0 tJ='#B01ʶU0F wRP{wg#p9Yt ?c,G&hRe -`$?  S@U!Ր;XS0cD`zK[ )wM,TW]WU;aXtDg1O;3rQt(h%ICK)zjq6Dp}/@xXtP6L]-a??C;!1WA؀m?W!T+Fwa Ob(SRmB2p8C 9$S?7rxKՈk!$cU#;;0}yD6;R 9'ka1 qg6'cves2g10g P wai{Y)C"6ggrfg`M`ceHȓ zRSGw1"/q/P@tuZؓ`g9c8/fg3*;1ВX)dpwvQ-iPu211E Xv p.kQ>d`  Gqu"`Q7Y)=i0a  HiRQGiM_Qs+9Y\0yɜιy#3'{ٞͱg9Y a[@9ugZ"l p3dYmjZpuڡ ` L$ZՐi.0J!,!,!,!,!,!,!,!,!,!,In8? H*\Ȱ!"J谢ŋexq AH86\.ˑ+c:DR&wo\3!͚=fУC (H{PPڜJiNZrjӰRV],ڭfז3ےcl[̼zٚ#s-l0bt_2nl֥܊|%O&2! on3̡Gs,m"蝪/n5gf(nw+/}6C)ПKN}دkyzO 2y  g駘d F 6'| ($h#vx,Yhim(ŽPp!ț6*#YxV>#x<y2$wdmIBInM.'hP6%fUZy&=)}Zbvp[Ycj^&Kq9&QuƦy[~(dv)\Lf9բ5ObQ:DkegO{L'!,Jm8~? H*\ȰÇ#JHŋ3jȱǏ CIɓ(S\ɲ˗0cʜI͛8sɳϟ@ JѣH*]ʴӧPJJիXjʵׯ`ÊKٳhӪ]˶mۀ!,!,:|? HVh@‡#J]%3j'* HdF/84ɲe9pIf3pƝOw !nx+NM(U]*0#T12]@zĥS*LRZ%n%ϟ@W2m@nrTZ8ܿ:3ϠHdhd% ɘ%'GIU:_N+_%!)+3c WOfYn H~<$bmRdp/_IFwQq=R$5lbth !-a"xaAfd$.š;ߊ,d $wLA'QH!8ђQ&9Q$@NMfIR'KɕE  r{'[fhK82XlWfK}$C YAk(p Z(5:KaiMȧChy.MPB7hJtZ6j>āk&jk"kGh~+.XHgfKPkDK1PG":%qa 7!AߞԀseЉ ;HP&ǠVSN#rHE'KBT2 EX 33[I`)SIuC.0#{?2L! :ԯk od;?ҎmPa9銕$+9l `Hj,A2c ! Ih-+mlC13!ޓ)Ɍ᏶I^p"813Xc>°C1 Ɉ &"f/HB0|#&31 tG [ D /uK_'m]fƗ a#"!gh <Q (YyESs(861El#A6pn)e"~9;293EK|q9b,<%K)0)ffi#}l9xOf()E'coZADQUA#zz͖R@@N%6r![0Uj"d1Eɔ 9Mb J=Q +.$ P"`EofIS!mA[ ,MV\HFOiSr?cŋ1fC^%^:CKFUGDj"հ34D#6;PFv,(qE$f-:q`,JEfEt`1SX ɌX3`L+VI'\>RٮdCV(ڀV2[Ps79P  Q6ʥi "{Wh(⒀-b\ ,p˴As%TXU'+o%<Mu BQ)[Xr" te R=-ˣ>|\J2&.1ftAتn c䁈3c|G-f*żU@ElV&bXŠ(I»Zf@c fU}2tE^-) HGa Č A \xe Dd&KD E53HKz E @9ϜM,D0n*D%l [.Vk ӄ"2e7D%s mSuj`HJ 'W>Jn'b &=+l F8(& /H2Mh bWo Lĺ?lq; V5L2 xAb+1C&B7ǂAZ nFHD}ZEΥfQwj8^fc鄬W5by&…x8J2(q;:Al4Q]%!fy걁V\~W,qǍZ /#xGp '#v[X@vO)HZfP)'}V}qM@%7e H}a}{Wh&'hig}@`_q4heqWGDd  0hvP00W,dbnvkq6#XGCw'؁a_Yx}khEZ;]O@QH|%aViDf5rWN8E#7^atv !_ f&s f@ PfY[y`/p ЊҰ6Xor P2P+n/,q%hZ"& ] ;GAXxπ@=Dwa Ұ&Z9U`xiՁwDS/;}!Hю#J$"~ Yui!-kW[9xpe(du>pHmȑ81 1s%HBThnfeM ̢OIn(i ?tX3)5Ƀb:鉠 ijz'Č#"f R" Y;QZ%s8yhO UG3ٗlG=L %vms%Vu12a#Td7dFp沘FD"߲() |+C@F>1eWK28T"8ّgFSr 8Jbati>doȖyPaiKwOQW> F/QmQ>'h6FYK攋y!T)QQ2(I—d 8)S D!wgbWUQ$ L Q^B0 E4f+beP/9@ [%zGRS4p̡uaq%}\91zDJ@w@cJxw4R `i@``P@4q@#!Piʤ HGLiJa19e!PyZ{niq^0ǖZRل+fx{J؝V-=;JX=tZ.wyJSXS-ǑaBzZjhJɊblɭZfy $|8F7I'$PJT UKm$hT!,j+*YU)F 1zAVNaY+|9Eat *YYs!d;+Ul\U/K/䩜(+ Vt1Ҙ?  Z+t af>OnDF(k~TU  9b*hSQ:W٭O{-#;74~KS 1~ؤ$&rF6rځWr[iPUKHb51 Ci\hQJ@;[tu'a-1b dB CKA*ŴP&FN¥9QW랟"RV$R@:naHuUO:Jn0Wat-iöp Xw%# ](ifh¿ i yΩټ}xuR#Wt*]h:_q%֎az)=zq@[De2"U`?̐;ĉFIUsLeVEup6іDPLX_x| _4U ܓ#' CrWR R٧iM=d`-ѱ=#|h tMWd*Vi;e` `\ ]UğYk.1 8{ZUʭ샰, +"e ^ʱ܄ 7lϊ e%FPF zb+J Z 5%1^bROvvb Qe\q,cx\1 H#-nQɞ [ ;Zru5)i' m,q11`*M"ehJlh45RGg.ԡ|9%zfE7UMu04|\ hq 0SdeX1ƯDP86|WK JQ!qtvPZv1(#:]Qٙqs"OTA@Hyd0W2ec@GzFRHڎ1EbITm!V-v0d Wq.EpQH^|e$LHM"``quMJu>(N{n}>\ 1@wg ',;_bY ipQ_G',:lOsφBKp "OS' 8v?Ҽ=  i,!o8 i!oOD>8|/QM+ko俍(c)_"A .dCz2lG!E$YI);(J($&M9#tSD8h̚ -0PEC.6URQV!&jaծeOg\cV.ݾS!4q%1%u8LPy^xh e̚9{6kرeϦ@]{$Ήfg7۸[ƒ?sѥOw M@JSy"Ǝ@ռd^>wO!,!,!,!,7|? H*\ȰÇ#JHŋ3jȱǏ CIɓ(S\ɲ˗0cʜI͛8sɳϟ@ JѣH*]ʴӧPJJիXjʵׯ`ÊKٳhӪ]˶۷pʝKݻx˷߿ LÈ+^̸ǐ#KL˘3k̹ϠCMӨS^ͺװc˞M۸sͻ Nȓ+_μУKNسkνË Oӫ_< !,In8? H*< ‡p 0"=3jH7*IDdI!S,"+4iM̛[L$QPNiG/*)ԩS$"ZӪUYyzUG%,Q%\۞p]I]yEc50ԽecRNirJɛcv9s蕣Ik}cr3.n25Yh6䄳wk[/;)УKNةy=B{O37Ͼ{_߀J)W| Ff?`($h(X qR 7!\-WߙC:&c6${CfF\Juce41Ie]ISni_喟Ff4\LɒqbfOvgZ'P iT1(MB`UjiYاZ>jNB~U2Mw ŮM@!,!,W+ ? H*\ÇJ\"‰-j1F%+GCR$8@^DP Tr*/DSAIUH3NEnQi 1<\4&~ 2qz'kOg ȚiDn f\u5 KTkAe*~,Yʑv)c!(+ؔAW~-ꎋ=|TzmG?YJs"78yoa+>3׭GO!,!,!,!,!,!,!,!,Jm8? H*4m‡j0"E3j(75FCd7!S$+4ie̛[L$mPN>DʔɗMQPJIЫXyZ+Sa]j(ڴ=mV)ܱvtmɬ1_%y3JœcVsf9oq^EF.2S IynꇲgCtMvպi׶ ` y}PqУKNm ?ͼËϽӫ_ IĵD@굜&?R-lmؤ&7x[tMAx pDp7‚z Dd\`%y pbxKQ"C6?ꖯ_Q`ӉP;?Ab N D x+O'4EWj?5RxQ%RcuB]igpMw5Cc}m 1 u!(WMFN_^X1U!8@a!,!,!,!,!,!,!,In8? H*< ‡p 0"=3jH7*IDdI!S,"+4iM̛[L$QPNiG/*)ԩS$"ZӪUYyzUG%,Q%\۞p]I]yEc50ԽecRNirJɛcv9s蕣Ik}cr3.n25Yh6䄳wk[/;)УKNةy=B{O37Ͼ{_߀J)W| Ff?`($h(X qR 7!\-WߙC:&c6${CfF\Juce41Ie]ISni_喟Ff4\LɒqbfOvgZ'P iT1(MB`UjiYاZ>jNB~U2Mw ŮM@!,W+ ? H)\Ȑ!‡60E)^(1cC=~iQCMVDy*$.Q1gIJ<2# D •:PElJSfeƅ@%ZOfsE"'*w. &?(֚P=2/*y3h+¢D1V5US .G.S@a龈Dxf fXÐV[U/): )bo50 ՊP;/F TW;:D'LS֗HC'KԟN7*^Ȍ}6>i!]D1 "GL`s=ۂBHaU@n!!,!,!,!,!,!,!,!,!,In8? H*<‡AH"ċ3Ķơƌ89rǓ(7"aH$MH4)RfΟ mTN>*(tң0.-iQ1Nj'֒ZrJkϰJǒmiT3ծE-ܔr~{g^ yK/| Ċ2nLT#' t]5oxg'3 2ja^5زI+m{!ܥ=l?YμУKqZν jN뻓_|O˟p<z_Bh y߁ rQ'RwzB(iLjTQx[y'!BHЇ-'Ayأ39#m!vK27ZARYjWbyLqYdpYI^]Ԥr`eӜt~i~c"ڟZ6%phtJMgJaNظ駟!,Jm8~? H*\ȰÇ#JHŋ3jȱǏ CIɓ(S\ɲ˗0cʜI͛8sɳϟ@ JѣH*]ʴӧPJJիXjʵׯ`ÊKٳhӪ]˶mۀ!,!,!,!,!,!,In8? H*< ‡p 0"=3jH7*IDdI!S,"+4iM̛[L$QPNiG/*)ԩS$"ZӪUYyzUG%,Q%\۞p]I]yEc50ԽecRNirJɛcv9s蕣Ik}cr3.n25Yh6䄳wk[/;)УKNةy=B{O37Ͼ{_߀J)W| Ff?`($h(X qR 7!\-WߙC:&c6${CfF\Juce41Ie]ISni_喟Ff4\LɒqbfOvgZ'P iT1(MB`UjiYاZ>jNB~U2Mw ŮM@!,;WpX? H*\ȰÇ#JHE2jܸǏ CIɓ(S\ɲ˗9͛8sɳϟ.gJѣH*]PMJJիVrʵׯK3H FmܩUٴk*+GZ;˷KotUb+J)^|iŊ' O;yi̹`zp Sz)jլ /\SE1Spy5{NAM#mS^(Ji3K$Dm7Ng]aUR[ӥw2D6\IC|f;)'E  A ~b5@fa BH! {!" NE8 (Ԁ2 B4u B $2@A@La 1qoUX" EȌAC"qAq* 1@DL&, d2g",2wf4!{m}!3L XX gL3cU @EΆN4jOVU-J[47NWq9QԨNWVհgMZָGn4.^T]Z8W6\Q(d.zM-nn\!erŰۻ# h;@X@Jțhh[&On{ Er0fPQr9I[CdCƔ71 Ugj 1EgмfJf >5d!&"J)8ǒ3R[eIM@`G D_.)YbpdHա< %n2 n]:w me&XBq@DBpa2ØtG*A9 l Be|A_]'DpvLiZS(MJWrPz~əZ$omp2^::%`1U`)dEm`Sq2H !OGc1EU2Sk'ir("gaf tJ@%p_ !G`)&2DQws#%r Xyut'zd a)Kw5,-, 111"C2&2u1Q7BfT;=7 2~*dRb~ QU+cЈAW/D8gG$Xn2 `vX$u'P&2px@*+D88sP*h7oFu(B447'*K%ۡrKIi8i"c<:'QfsWDtAAyFf&Y,PlxUr7% +Xq9#5 qM LuCdadYPfiNθ8ai tPw6@2LJytMYd yp Tn1]@a'eg@ :Wm"@sh{E8a6Aa`)a @P )Lt8-] 9#RsD7 &Y;tA6u6|Vmгi)?yDUPT)R+~Kۉ ٌ):C*Ax@G7?xJ ?Ԑ#̇ N6tC +IŘ(TBHGʣVZJٜxY#CZRId YH=QLC\` KZJA7A6f;(4Mx_)oXϴ" *Pѩ jP*U^JMLѪ1GGJzf #g*LO@ N3*Erؙ7ZO8iZ]t #"_ZӒ 7î̪qm3Gگ*5 N %Jɺ+}.8k`)pgS# "BIJEm5^!8e2;@B&T3Kjo\dT Jl5outIbuPhjj Ϡ5P+J_Zm8WuuWa5VAajVpnW*÷0@65rB< -['pbxqSH m7) &{#B: xt-ikko, ;b.k5CÏ Nq :}#&Z/5&;j [񺮩Xxv'dK^pl78(e]&jY`ܢEk TPpԏ oî4qP6hP;'R);AIP":OrK`#gk'=;y2 4\`v+'uĻ W7c %?'EMV[3u)(cuS#*6ko idNjL qM7z'eSF 1dE~LN !_sZǢ<ʤ\ʦ|ʨʪʬʮʰ˲<˴\˶|˸˺˼˾<\|j6Flk<5l*hl1g jً6XPZK;EǏ.sEAv֦ o26o~z~B:=жziJ19o=q`PxAYq1D8+j8LQ :?ar<Ddc&t-q;TZԖ[c\Jּ՝uN\u`dg|vF xowWwww}}|Wsׄ|jCZ }r`S gM`G& {w|}|,d  RB0~P6ْ /W\ oq5`P;fuDzz&bٙyǎW1ڰMJy@JkuaԳ؎ ٫ y:&םmެ2r~G~Q )~}2&t/8Y5$LP"` 6[1]2nE uu 8Ճ*rh/␶ z_35Ȁ7!/'Bmsߩ!},ҨN-n"ȁ_&IFTq>-\N) +/e Æz&s6bku~w)*[-#WƨX;Q[]~[-MTsdTX.)(=( hBX+h6}8Pj0:=d닱K^’NeB2hXQ׼8.0'.Y N堲l:X\[61qȍa hؙU gdQJ!_))C +&Qķ3ov-䅨JqKp[P/`!eB`ؗA@G9> j$i <  ¨R"?$deo%Ό}{[ms 1VǻZjѓ ZBqL9-2!9L=>yh'F* MR*TU'^4)d#Jb9"@Jx(*c)kٟNB$ aq:Ar_I .ߙ J(O LȨ%2LbU=QD\xhQEc  y3gɕ^N[ⲕf\6lywK{D ŋ0ãdZ ұ{UnA hGGb"(ȋA#h@K.bPƾ*O4*1w$ P<apH1>ٯ:BEK0O>d(ċvj2GA S$#2[uգ 4QbxAC$O?Z5!^ ¢;QQD, ,Md-rOBB4:D@RKE7tNPt`hJ"03}R;5HEW~[Oý5tWUVΖw%)jm/[hyN_^qhb(b,b0'"s`6"8 =# 9EVdD1d]O*|RNiV]-'^{ӍyPSj*%Iލq{اy:hmgl2Ui饓妜蕠*dFb)dajj+!,Jm8~? H*\ȰÇ#JHŋ3jȱǏ CIɓ(S\ɲ˗0cʜI͛8sɳϟ@ JѣH*]ʴӧPJJիXjʵׯ`ÊKٳhӪ]˶mۀ!,!,;WpX? HA*\Ç#JHŋ3jȱǏ CIɓ(S~bRʗ0cʜI͛8sYeK@ JѣHRӧPJJG jʵׯ`9bmٳhӪcKݻInc\x LpGMװǐ#Eؕƿ$k̹sTvňٳӨS˄򄌥U˞Mv zѳ|1v5= _μy0[سoOiX _7$N̮z\7߀hzBG 2xf r $f'n5X,c(㌧!v"Ҩ㎐{<)l@i䑚L dPF֓RVi%WT^Oe`)dihlp)tix|矀*蠄j衈&袌6裐F*餔Vj饘f馜v駠*ꨤjꩨꪬ꫰K*무j뭸뮼+k&6F+Vkfv+k覫.v!,!,!,!,!,!,!,!,!,!,!,!,!,!,!,!,!,!,!,!,!,!,!,!,!,!,!,!,!,!,!,!,!,!,!,!,!,!,!,!,!,!,!,!,!,;gradle-completion-1.3.1/gradle-completion.bash000066400000000000000000000350461322420334500213730ustar00rootroot00000000000000__gradle-completion-print-timestamp() { echo "$(($(gdate +'%s * 1000 + %-N / 1000000'))) - $1" } __gradle-set-project-root-dir() { local dir=$(pwd) project_root_dir=$(pwd) while [[ "$dir" != '/' ]]; do if [[ -f "$dir/settings.gradle" || -f "$dir/gradlew" ]]; then project_root_dir="$dir" return 0 fi dir="$(dirname "$dir")" done return 1 } __gradle-init-cache-dir() { cache_dir="$HOME/.gradle/completion" mkdir -p "$cache_dir" } __gradle-set-build-file() { # Look for default build script in the settings file (settings.gradle by default) # Otherwise, default is the file 'build.gradle' in the current directory. gradle_build_file="$project_root_dir/build.gradle" if [[ -f "$project_root_dir/settings.gradle" ]]; then local build_file_name=$(grep "^rootProject\.buildFileName" "$project_root_dir/settings.gradle" | \ sed -n -e "s/rootProject\.buildFileName = [\'\"]\(.*\)[\'\"]/\1/p") gradle_build_file="$project_root_dir/${build_file_name:-build.gradle}" fi } __gradle-set-cache-name() { # Cache name is constructed from the absolute path of the build file. cache_name="${gradle_build_file//\//_}" } __gradle-set-files-checksum() { # Cache MD5 sum of all Gradle scripts and modified timestamps if builtin command -v md5 > /dev/null; then gradle_files_checksum=$(md5 -q -s "$(cat "$cache_dir/$cache_name" | xargs ls -o 2>/dev/null)") elif builtin command -v md5sum > /dev/null; then gradle_files_checksum=$(cat "$cache_dir/$cache_name" | xargs ls -o 2>/dev/null | md5sum | awk '{print $1}') else echo "Cannot generate completions as neither md5 nor md5sum exist on \$PATH" fi } __gradle-generate-script-cache() { # Invalidate cache after 3 weeks by default local cache_ttl_mins=${GRADLE_CACHE_TTL_MINUTES:-30240} local script_exclude_pattern=${GRADLE_COMPLETION_EXCLUDE_PATTERN:-"/(build|integTest|out)/"} if [[ ! $(find "$cache_dir/$cache_name" -mmin "-${cache_ttl_mins}" 2>/dev/null) ]]; then # Cache all Gradle scripts local gradle_build_scripts=$(find "$project_root_dir" -type f -name "*.gradle" -o -name "*.gradle.kts" 2>/dev/null | egrep -v "$script_exclude_pattern") printf "%s\n" "${gradle_build_scripts[@]}" >| "$cache_dir/$cache_name" fi } __gradle-long-options() { local cur _get_comp_words_by_ref -n : cur local args="--build-cache - Enables the Gradle build cache --build-file - Specifies the build file --configure-on-demand - Only relevant projects are configured --console= - Type of console output to generate (plain auto rich verbose) --continue - Continues task execution after a task failure --continuous - Continuous mode. Automatically re-run build after changes --daemon - Use the Gradle Daemon --debug - Log at the debug level --dry-run - Runs the build with all task actions disabled --exclude-task - Specify a task to be excluded --full-stacktrace - Print out the full (very verbose) stacktrace --gradle-user-home - Specifies the Gradle user home directory --gui - Launches the Gradle GUI app (Deprecated) --help - Shows a help message --include-build - Run the build as a composite, including the specified build --info - Set log level to INFO --init-script - Specifies an initialization script --max-workers - Set the maximum number of workers that Gradle may use --no-build-cache - Do not use the Gradle build cache --no-configure-on-demand - Disables configuration on demand --no-daemon - Do not use the Gradle Daemon --no-parallel - Disables parallel execution to build projects --no-rebuild - Do not rebuild project dependencies --no-scan - Do not create a build scan --no-search-upwards - Do not search in parent directories for a settings.gradle --offline - Build without accessing network resources --parallel - Build projects in parallel --profile - Profile build time and create report --project-cache-dir - Specifies the project-specific cache directory --project-dir - Specifies the start directory for Gradle --project-prop - Sets a project property of the root project --quiet - Log errors only --recompile-scripts - Forces scripts to be recompiled, bypassing caching --refresh-dependencies - Refresh the state of dependencies --rerun-tasks - Specifies that any task optimization is ignored --scan - Create a build scan --settings-file - Specifies the settings file --stacktrace - Print out the stacktrace also for user exceptions --status - Print Gradle Daemon status --stop - Stop all Gradle Daemons --system-prop - Set a system property --version - Prints Gradle version info --warn - Log warnings and errors only" COMPREPLY=( $(compgen -W "$args" -- "$cur") ) } __gradle-properties() { local cur _get_comp_words_by_ref -n : cur local args="-Dorg.gradle.cache.reserved.mb= - Reserve Gradle Daemon memory for operations -Dorg.gradle.caching= - Set true to enable Gradle build cache -Dorg.gradle.console= - Set type of console output to generate (plain auto rich verbose) -Dorg.gradle.daemon.debug= - Set true to debug Gradle Daemon -Dorg.gradle.daemon.idletimeout= - Kill Gradle Daemon after # idle millis -Dorg.gradle.debug= - Set true to debug Gradle Client -Dorg.gradle.jvmargs= - Set JVM arguments -Dorg.gradle.java.home= - Set JDK home dir -Dorg.gradle.logging.level= - Set default Gradle log level (quiet warn lifecycle info debug) -Dorg.gradle.parallel= - Set true to enable parallel project builds (incubating) -Dorg.gradle.parallel.intra= - Set true to enable intra-project parallel builds (incubating) -Dorg.gradle.workers.max= - Set the number of workers Gradle is allowed to use" COMPREPLY=( $(compgen -W "$args" -- "$cur}") ) return 0 } __gradle-short-options() { local cur _get_comp_words_by_ref -n : cur local args="-? - Shows a help message -a - Do not rebuild project dependencies -b - Specifies the build file -c - Specifies the settings file -d - Log at the debug level -g - Specifies the Gradle user home directory -h - Shows a help message -i - Set log level to INFO -m - Runs the build with all task actions disabled -p - Specifies the start directory for Gradle -q - Log errors only -s - Print out the stacktrace also for user exceptions -t - Continuous mode. Automatically re-run build after changes -u - Do not search in parent directories for a settings.gradle -v - Prints Gradle version info -w - Log warnings and errors only -x - Specify a task to be excluded -D - Set a system property -I - Specifies an initialization script -P - Sets a project property of the root project -S - Print out the full (very verbose) stacktrace" COMPREPLY=( $(compgen -W "$args" -- "$cur") ) } __gradle-tasks() { local cur _get_comp_words_by_ref -n : cur __gradle-init-cache-dir __gradle-set-project-root-dir __gradle-set-build-file if [[ -f "$gradle_build_file" ]]; then __gradle-set-cache-name __gradle-generate-script-cache __gradle-set-files-checksum # The cache key is md5 sum of all gradle scripts, so it's valid if it exists. if [[ -f "$cache_dir/$cache_name.md5" ]]; then local cached_checksum="$(cat "$cache_dir/$cache_name.md5")" local -a cached_tasks if [[ -z "$cur" ]]; then cached_tasks=( $(cat "$cache_dir/$cached_checksum") ) else cached_tasks=( $(grep "^$cur" "$cache_dir/$cached_checksum") ) fi COMPREPLY=( $(compgen -W "${cached_tasks[*]}" -- "$cur") ) else __gradle-notify-tasks-cache-build fi # Regenerate tasks cache in the background if [[ "$gradle_files_checksum" != "$(cat "$cache_dir/$cache_name.md5")" || ! -f "$cache_dir/$gradle_files_checksum" || $(wc -c < $cache_dir/$gradle_files_checksum) -le 1 ]]; then $(__gradle-generate-tasks-cache 1>&2 2>/dev/null &) fi else # Default tasks available outside Gradle projects local args="buildEnvironment - Displays all buildscript dependencies declared in root project. components - Displays the components produced by root project. dependencies - Displays all dependencies declared in root project. dependencyInsight - Displays the insight into a specific dependency in root project. dependentComponents - Displays the dependent components of components in root project. help - Displays a help message. init - Initializes a new Gradle build. model - Displays the configuration model of root project. projects - Displays the sub-projects of root project. properties - Displays the properties of root project. tasks - Displays the tasks runnable from root project. wrapper - Generates Gradle wrapper files." COMPREPLY=( $(compgen -W "$args" -- "$cur") ) fi # Prevent colons from messing up completion [[ -n "$(type -t __ltrim_colon_completions)" ]] && __ltrim_colon_completions "$cur" } __gradle-options-arguments() { local cur prev _get_comp_words_by_ref -n : cur _get_comp_words_by_ref -n : -p prev case "$prev" in -b|--build-file|-c|--settings-file|-I|--init-script) COMPREPLY=( $(compgen -f -A file -o filenames -X '!*.gradle*' "$cur") ) return 0 ;; -g|--gradle-user-home|--include-build|--project-cache-dir|--project-dir) COMPREPLY=( $(compgen -d "$cur") ) return 0 ;; *) __gradle-tasks return 0 ;; esac } __gradle-notify-tasks-cache-build() { # Notify user of cache rebuild echo -e " (Building completion cache. Please wait)\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\c" __gradle-generate-tasks-cache # Remove "please wait" message by writing a bunch of spaces then moving back to the left echo -e " \b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\c" } __gradle-generate-tasks-cache() { __gradle-set-files-checksum # Use Gradle wrapper when it exists. local gradle_cmd="gradle" if [[ -x "$project_root_dir/gradlew" ]]; then gradle_cmd="$project_root_dir/gradlew" fi # Run gradle to retrieve possible tasks and cache. # Reuse Gradle Daemon if IDLE but don't start a new one. local gradle_tasks_output if [[ ! -z "$("$gradle_cmd" --status 2>/dev/null | grep IDLE)" ]]; then gradle_tasks_output="$("$gradle_cmd" -b "$gradle_build_file" --daemon -q tasks --all)" else gradle_tasks_output="$("$gradle_cmd" -b "$gradle_build_file" --no-daemon -q tasks --all)" fi local output_line local task_description local -a gradle_all_tasks=() local -a root_tasks=() local -a subproject_tasks=() for output_line in ${gradle_tasks_output}; do if [[ "$output_line" =~ ^([[:lower:]][[:alnum:][:punct:]]*)([[:space:]]-[[:space:]]([[:print:]]*))? ]]; then task_name="${BASH_REMATCH[1]}" task_description="${BASH_REMATCH[3]}" gradle_all_tasks+=( "$task_name - $task_description" ) # Completion for subproject tasks with ':' prefix if [[ "$task_name" =~ ^([[:alnum:][:punct:]]+):([[:alnum:]]+) ]]; then gradle_all_tasks+=( ":$task_name - $task_description" ) subproject_tasks+=( "${BASH_REMATCH[2]}" ) else root_tasks+=( "$task_name" ) fi fi done # subproject tasks can be referenced implicitly from root project if [[ "$GRADLE_COMPLETION_UNQUALIFIED_TASKS" == "true" ]]; then local -a implicit_tasks=() implicit_tasks=( $(comm -23 <(printf "%s\n" "${subproject_tasks[@]}" | sort) <(printf "%s\n" "${root_tasks[@]}" | sort)) ) for task in $(printf "%s\n" "${implicit_tasks[@]}"); do gradle_all_tasks+=( "$task" ) done fi printf "%s\n" "${gradle_all_tasks[@]}" >| "$cache_dir/$gradle_files_checksum" echo "$gradle_files_checksum" >| "$cache_dir/$cache_name.md5" } __gradle-completion-init() { local cache_dir cache_name gradle_build_file gradle_files_checksum project_root_dir local OLDIFS="$IFS" local IFS=$'\n' __gradle-init-cache-dir __gradle-set-project-root-dir __gradle-set-build-file if [[ -f "$gradle_build_file" ]]; then __gradle-set-cache-name __gradle-generate-script-cache __gradle-set-files-checksum __gradle-notify-tasks-cache-build fi IFS="$OLDIFS" return 0 } _gradle() { local cache_dir cache_name gradle_build_file gradle_files_checksum project_root_dir local cur prev _get_comp_words_by_ref -n : cur _get_comp_words_by_ref -n : -p prev # Set bash internal field separator to '\n' # This allows us to provide descriptions for options and tasks local OLDIFS="$IFS" local IFS=$'\n' if [[ ${cur} == --* ]]; then __gradle-long-options elif [[ ${cur} == -D* ]]; then __gradle-properties elif [[ ${cur} == -* ]]; then __gradle-short-options elif [[ ${prev} == -* ]]; then __gradle-options-arguments else __gradle-tasks fi IFS="$OLDIFS" # Remove description ("[:space:]" and after) if only one possibility if [[ ${#COMPREPLY[*]} -eq 1 ]]; then COMPREPLY=( ${COMPREPLY[0]%% *} ) fi return 0 } complete -F _gradle gradle complete -F _gradle gradle.bat complete -F _gradle gradlew complete -F _gradle gradlew.bat complete -F _gradle ./gradlew complete -F _gradle ./gradlew.bat if hash gw 2>/dev/null || alias gw >/dev/null 2>&1; then complete -F _gradle gw fi