mirror of
https://git.savannah.gnu.org/git/parallel.git
synced 2024-11-22 05:57:54 +00:00
Released as 20181222 ('JacobSparre')
This commit is contained in:
parent
a86ead354b
commit
41a40a1304
17
NEWS
17
NEWS
|
@ -1,3 +1,20 @@
|
||||||
|
20181222
|
||||||
|
|
||||||
|
* Better /proc/cpuinfo parser.
|
||||||
|
|
||||||
|
* Simpler job scheduling flow.
|
||||||
|
|
||||||
|
* MPGI Workshop: Job Parallelization with Task Arrays and GNU Parallel https://www.msi.umn.edu/tutorials/mpgi-workshop-module-4
|
||||||
|
|
||||||
|
* CONCOCT uses GNU Parallel https://media.readthedocs.org/pdf/concoct/latest/concoct.pdf
|
||||||
|
|
||||||
|
* If you use SLURM read https://wiki.hpc.uconn.edu/index.php/Advanced_SLURM
|
||||||
|
|
||||||
|
* すぐ忘れてしまう、仕事で使う技 https://qiita.com/hana_shin/items/53c3c78525c9c758ae7c
|
||||||
|
|
||||||
|
* Bug fixes and man page updates.
|
||||||
|
|
||||||
|
|
||||||
20181122
|
20181122
|
||||||
|
|
||||||
* Experimental simpler job flow control.
|
* Experimental simpler job flow control.
|
||||||
|
|
12
README
12
README
|
@ -44,9 +44,9 @@ document.
|
||||||
|
|
||||||
Full installation of GNU Parallel is as simple as:
|
Full installation of GNU Parallel is as simple as:
|
||||||
|
|
||||||
wget https://ftpmirror.gnu.org/parallel/parallel-20181122.tar.bz2
|
wget https://ftpmirror.gnu.org/parallel/parallel-20181222.tar.bz2
|
||||||
bzip2 -dc parallel-20181122.tar.bz2 | tar xvf -
|
bzip2 -dc parallel-20181222.tar.bz2 | tar xvf -
|
||||||
cd parallel-20181122
|
cd parallel-20181222
|
||||||
./configure && make && sudo make install
|
./configure && make && sudo make install
|
||||||
|
|
||||||
|
|
||||||
|
@ -55,9 +55,9 @@ Full installation of GNU Parallel is as simple as:
|
||||||
If you are not root you can add ~/bin to your path and install in
|
If you are not root you can add ~/bin to your path and install in
|
||||||
~/bin and ~/share:
|
~/bin and ~/share:
|
||||||
|
|
||||||
wget https://ftpmirror.gnu.org/parallel/parallel-20181122.tar.bz2
|
wget https://ftpmirror.gnu.org/parallel/parallel-20181222.tar.bz2
|
||||||
bzip2 -dc parallel-20181122.tar.bz2 | tar xvf -
|
bzip2 -dc parallel-20181222.tar.bz2 | tar xvf -
|
||||||
cd parallel-20181122
|
cd parallel-20181222
|
||||||
./configure --prefix=$HOME && make && make install
|
./configure --prefix=$HOME && make && make install
|
||||||
|
|
||||||
Or if your system lacks 'make' you can simply copy src/parallel
|
Or if your system lacks 'make' you can simply copy src/parallel
|
||||||
|
|
20
configure
vendored
20
configure
vendored
|
@ -1,6 +1,6 @@
|
||||||
#! /bin/sh
|
#! /bin/sh
|
||||||
# Guess values for system-dependent variables and create Makefiles.
|
# Guess values for system-dependent variables and create Makefiles.
|
||||||
# Generated by GNU Autoconf 2.69 for parallel 20181122.
|
# Generated by GNU Autoconf 2.69 for parallel 20181222.
|
||||||
#
|
#
|
||||||
# Report bugs to <bug-parallel@gnu.org>.
|
# Report bugs to <bug-parallel@gnu.org>.
|
||||||
#
|
#
|
||||||
|
@ -579,8 +579,8 @@ MAKEFLAGS=
|
||||||
# Identity of this package.
|
# Identity of this package.
|
||||||
PACKAGE_NAME='parallel'
|
PACKAGE_NAME='parallel'
|
||||||
PACKAGE_TARNAME='parallel'
|
PACKAGE_TARNAME='parallel'
|
||||||
PACKAGE_VERSION='20181122'
|
PACKAGE_VERSION='20181222'
|
||||||
PACKAGE_STRING='parallel 20181122'
|
PACKAGE_STRING='parallel 20181222'
|
||||||
PACKAGE_BUGREPORT='bug-parallel@gnu.org'
|
PACKAGE_BUGREPORT='bug-parallel@gnu.org'
|
||||||
PACKAGE_URL=''
|
PACKAGE_URL=''
|
||||||
|
|
||||||
|
@ -1214,7 +1214,7 @@ if test "$ac_init_help" = "long"; then
|
||||||
# Omit some internal or obsolete options to make the list less imposing.
|
# Omit some internal or obsolete options to make the list less imposing.
|
||||||
# This message is too long to be a string in the A/UX 3.1 sh.
|
# This message is too long to be a string in the A/UX 3.1 sh.
|
||||||
cat <<_ACEOF
|
cat <<_ACEOF
|
||||||
\`configure' configures parallel 20181122 to adapt to many kinds of systems.
|
\`configure' configures parallel 20181222 to adapt to many kinds of systems.
|
||||||
|
|
||||||
Usage: $0 [OPTION]... [VAR=VALUE]...
|
Usage: $0 [OPTION]... [VAR=VALUE]...
|
||||||
|
|
||||||
|
@ -1281,7 +1281,7 @@ fi
|
||||||
|
|
||||||
if test -n "$ac_init_help"; then
|
if test -n "$ac_init_help"; then
|
||||||
case $ac_init_help in
|
case $ac_init_help in
|
||||||
short | recursive ) echo "Configuration of parallel 20181122:";;
|
short | recursive ) echo "Configuration of parallel 20181222:";;
|
||||||
esac
|
esac
|
||||||
cat <<\_ACEOF
|
cat <<\_ACEOF
|
||||||
|
|
||||||
|
@ -1357,7 +1357,7 @@ fi
|
||||||
test -n "$ac_init_help" && exit $ac_status
|
test -n "$ac_init_help" && exit $ac_status
|
||||||
if $ac_init_version; then
|
if $ac_init_version; then
|
||||||
cat <<\_ACEOF
|
cat <<\_ACEOF
|
||||||
parallel configure 20181122
|
parallel configure 20181222
|
||||||
generated by GNU Autoconf 2.69
|
generated by GNU Autoconf 2.69
|
||||||
|
|
||||||
Copyright (C) 2012 Free Software Foundation, Inc.
|
Copyright (C) 2012 Free Software Foundation, Inc.
|
||||||
|
@ -1374,7 +1374,7 @@ cat >config.log <<_ACEOF
|
||||||
This file contains any messages produced by compilers while
|
This file contains any messages produced by compilers while
|
||||||
running configure, to aid debugging if configure makes a mistake.
|
running configure, to aid debugging if configure makes a mistake.
|
||||||
|
|
||||||
It was created by parallel $as_me 20181122, which was
|
It was created by parallel $as_me 20181222, which was
|
||||||
generated by GNU Autoconf 2.69. Invocation command line was
|
generated by GNU Autoconf 2.69. Invocation command line was
|
||||||
|
|
||||||
$ $0 $@
|
$ $0 $@
|
||||||
|
@ -2237,7 +2237,7 @@ fi
|
||||||
|
|
||||||
# Define the identity of the package.
|
# Define the identity of the package.
|
||||||
PACKAGE='parallel'
|
PACKAGE='parallel'
|
||||||
VERSION='20181122'
|
VERSION='20181222'
|
||||||
|
|
||||||
|
|
||||||
cat >>confdefs.h <<_ACEOF
|
cat >>confdefs.h <<_ACEOF
|
||||||
|
@ -2880,7 +2880,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
|
||||||
# report actual input values of CONFIG_FILES etc. instead of their
|
# report actual input values of CONFIG_FILES etc. instead of their
|
||||||
# values after options handling.
|
# values after options handling.
|
||||||
ac_log="
|
ac_log="
|
||||||
This file was extended by parallel $as_me 20181122, which was
|
This file was extended by parallel $as_me 20181222, which was
|
||||||
generated by GNU Autoconf 2.69. Invocation command line was
|
generated by GNU Autoconf 2.69. Invocation command line was
|
||||||
|
|
||||||
CONFIG_FILES = $CONFIG_FILES
|
CONFIG_FILES = $CONFIG_FILES
|
||||||
|
@ -2942,7 +2942,7 @@ _ACEOF
|
||||||
cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
|
cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
|
||||||
ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
|
ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
|
||||||
ac_cs_version="\\
|
ac_cs_version="\\
|
||||||
parallel config.status 20181122
|
parallel config.status 20181222
|
||||||
configured by $0, generated by GNU Autoconf 2.69,
|
configured by $0, generated by GNU Autoconf 2.69,
|
||||||
with options \\"\$ac_cs_config\\"
|
with options \\"\$ac_cs_config\\"
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
AC_INIT([parallel], [20181122], [bug-parallel@gnu.org])
|
AC_INIT([parallel], [20181222], [bug-parallel@gnu.org])
|
||||||
AM_INIT_AUTOMAKE([-Wall -Werror foreign])
|
AM_INIT_AUTOMAKE([-Wall -Werror foreign])
|
||||||
AC_CONFIG_HEADERS([config.h])
|
AC_CONFIG_HEADERS([config.h])
|
||||||
AC_CONFIG_FILES([
|
AC_CONFIG_FILES([
|
||||||
|
|
|
@ -206,17 +206,30 @@ from:tange@gnu.org
|
||||||
to:parallel@gnu.org, bug-parallel@gnu.org
|
to:parallel@gnu.org, bug-parallel@gnu.org
|
||||||
stable-bcc: Jesse Alama <jessealama@fastmail.fm>
|
stable-bcc: Jesse Alama <jessealama@fastmail.fm>
|
||||||
|
|
||||||
Subject: GNU Parallel 20181222 ('InSight') released <<[stable]>>
|
Subject: GNU Parallel 20181222 ('Yellow Jacket/InSight/Jacob Sparre') released <<[stable]>>
|
||||||
|
|
||||||
GNU Parallel 20181222 ('') <<[stable]>> has been released. It is available for download at: http://ftpmirror.gnu.org/parallel/
|
GNU Parallel 20181222 ('Jacob Sparre') <<[stable]>> has been released. It is available for download at: http://ftpmirror.gnu.org/parallel/
|
||||||
|
|
||||||
<<No new functionality was introduced so this is a good candidate for a stable release.>>
|
<<No new functionality was introduced so this is a good candidate for a stable release.>>
|
||||||
|
|
||||||
Quote of the month:
|
Quote of the month:
|
||||||
|
|
||||||
|
GNU parallel is a seriously powerful flexible and tool.
|
||||||
|
-- Greg Hurrell @wincent
|
||||||
|
|
||||||
New in this release:
|
New in this release:
|
||||||
|
|
||||||
* https://qiita.com/hana_shin/items/53c3c78525c9c758ae7c
|
* Better /proc/cpuinfo parser.
|
||||||
|
|
||||||
|
* Simpler job scheduling flow.
|
||||||
|
|
||||||
|
* MPGI Workshop: Job Parallelization with Task Arrays and GNU Parallel https://www.msi.umn.edu/tutorials/mpgi-workshop-module-4
|
||||||
|
|
||||||
|
* CONCOCT uses GNU Parallel https://media.readthedocs.org/pdf/concoct/latest/concoct.pdf
|
||||||
|
|
||||||
|
* If you use SLURM read https://wiki.hpc.uconn.edu/index.php/Advanced_SLURM
|
||||||
|
|
||||||
|
* すぐ忘れてしまう、仕事で使う技 https://qiita.com/hana_shin/items/53c3c78525c9c758ae7c
|
||||||
|
|
||||||
* Bug fixes and man page updates.
|
* Bug fixes and man page updates.
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<directory name="parallel" rev="227" srcmd5="21d1e9e6d757ee09c239531d094bac7b" vrev="1">
|
<directory name="parallel" rev="228" srcmd5="6b5a77aa91c7b5b1222e49ab36f563df" vrev="1">
|
||||||
<entry md5="7f377215f4bfec95ae667a756cdda905" mtime="1542929947" name="parallel-20181122.tar.bz2" size="1797510" />
|
<entry md5="04ebc06103bdf5ce70c360742adbcbd8" mtime="1545440269" name="parallel-20181222.tar.bz2" size="1799481" />
|
||||||
<entry md5="21c2c593abc38419b337648cd12518ae" mtime="1542929947" name="parallel.spec" size="4667" />
|
<entry md5="68cf0f3d678a67b8317122c1f4c45afc" mtime="1545440269" name="parallel.spec" size="4667" />
|
||||||
<entry md5="30d6a27fae9852f24b415b6e00feb43f" mtime="1542929947" name="parallel_20181122.dsc" size="556" />
|
<entry md5="0ee51c455e89f82f7c8f0dfe9310c250" mtime="1545440269" name="parallel_20181222.dsc" size="556" />
|
||||||
<entry md5="4e0cdca7d064c5174b0858b8e2acb1f5" mtime="1542929947" name="parallel_20181122.tar.gz" size="1991811" />
|
<entry md5="ddaa3054a0ab04e30ad38d2b32617a4a" mtime="1545440270" name="parallel_20181222.tar.gz" size="1995147" />
|
||||||
</directory>
|
</directory>
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
|
|
||||||
Summary: Shell tool for executing jobs in parallel
|
Summary: Shell tool for executing jobs in parallel
|
||||||
Name: parallel
|
Name: parallel
|
||||||
Version: 20181122
|
Version: 20181222
|
||||||
Release: 1.2
|
Release: 1.2
|
||||||
License: GPL
|
License: GPL
|
||||||
Group: Productivity/File utilities
|
Group: Productivity/File utilities
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
|
|
||||||
Summary: Shell tool for executing jobs in parallel
|
Summary: Shell tool for executing jobs in parallel
|
||||||
Name: parallel
|
Name: parallel
|
||||||
Version: 20181122
|
Version: 20181222
|
||||||
Release: 1.2
|
Release: 1.2
|
||||||
License: GPL
|
License: GPL
|
||||||
Group: Productivity/File utilities
|
Group: Productivity/File utilities
|
||||||
|
|
|
@ -24,7 +24,7 @@
|
||||||
use strict;
|
use strict;
|
||||||
use Getopt::Long;
|
use Getopt::Long;
|
||||||
$Global::progname="niceload";
|
$Global::progname="niceload";
|
||||||
$Global::version = 20181124;
|
$Global::version = 20181222;
|
||||||
Getopt::Long::Configure("bundling","require_order");
|
Getopt::Long::Configure("bundling","require_order");
|
||||||
get_options_from_array(\@ARGV) || die_usage();
|
get_options_from_array(\@ARGV) || die_usage();
|
||||||
if($opt::version) {
|
if($opt::version) {
|
||||||
|
|
14
src/parallel
14
src/parallel
|
@ -1083,6 +1083,8 @@ sub options_hash {
|
||||||
"gnu" => \$opt::gnu,
|
"gnu" => \$opt::gnu,
|
||||||
"link|xapply" => \$opt::link,
|
"link|xapply" => \$opt::link,
|
||||||
"linkinputsource|xapplyinputsource=i" => \@opt::linkinputsource,
|
"linkinputsource|xapplyinputsource=i" => \@opt::linkinputsource,
|
||||||
|
# Before changing this line, please read
|
||||||
|
# https://www.gnu.org/software/parallel/parallel_design.html#Citation-notice
|
||||||
"bibtex|citation" => \$opt::citation,
|
"bibtex|citation" => \$opt::citation,
|
||||||
"wc|willcite|will-cite|nn|nonotice|no-notice" => \$opt::willcite,
|
"wc|willcite|will-cite|nn|nonotice|no-notice" => \$opt::willcite,
|
||||||
# Termination and retries
|
# Termination and retries
|
||||||
|
@ -1186,6 +1188,8 @@ sub parse_options {
|
||||||
my @argv_before = @ARGV;
|
my @argv_before = @ARGV;
|
||||||
@ARGV = read_options();
|
@ARGV = read_options();
|
||||||
|
|
||||||
|
# Before changing this line, please read
|
||||||
|
# https://www.gnu.org/software/parallel/parallel_design.html#Citation-notice
|
||||||
if(defined $opt::citation) {
|
if(defined $opt::citation) {
|
||||||
citation(\@argv_before,\@ARGV);
|
citation(\@argv_before,\@ARGV);
|
||||||
wait_and_exit(0);
|
wait_and_exit(0);
|
||||||
|
@ -1465,6 +1469,8 @@ sub parse_options {
|
||||||
# runs. If that is too much trouble for you, why not use one of
|
# runs. If that is too much trouble for you, why not use one of
|
||||||
# the alternatives instead?
|
# the alternatives instead?
|
||||||
# See a list in: 'man parallel_alternatives'
|
# See a list in: 'man parallel_alternatives'
|
||||||
|
#
|
||||||
|
# Please read the above before changing this line.
|
||||||
citation_notice();
|
citation_notice();
|
||||||
|
|
||||||
parse_halt();
|
parse_halt();
|
||||||
|
@ -1565,7 +1571,7 @@ sub check_invalid_option_combinations {
|
||||||
|
|
||||||
sub init_globals {
|
sub init_globals {
|
||||||
# Defaults:
|
# Defaults:
|
||||||
$Global::version = 20181202;
|
$Global::version = 20181222;
|
||||||
$Global::progname = 'parallel';
|
$Global::progname = 'parallel';
|
||||||
$Global::infinity = 2**31;
|
$Global::infinity = 2**31;
|
||||||
$Global::debug = 0;
|
$Global::debug = 0;
|
||||||
|
@ -4275,6 +4281,8 @@ sub usage {
|
||||||
" O. Tange (2018): GNU Parallel 2018, Mar 2018, ISBN 9781387509881,",
|
" O. Tange (2018): GNU Parallel 2018, Mar 2018, ISBN 9781387509881,",
|
||||||
" DOI https://doi.org/10.5281/zenodo.1146014",
|
" DOI https://doi.org/10.5281/zenodo.1146014",
|
||||||
"",
|
"",
|
||||||
|
# Before changing this line, please read
|
||||||
|
# https://www.gnu.org/software/parallel/parallel_design.html#Citation-notice
|
||||||
"This helps funding further development; AND IT WON'T COST YOU A CENT.",
|
"This helps funding further development; AND IT WON'T COST YOU A CENT.",
|
||||||
"If you pay 10000 EUR you should feel free to use GNU Parallel without citing.",
|
"If you pay 10000 EUR you should feel free to use GNU Parallel without citing.",
|
||||||
"",
|
"",
|
||||||
|
@ -4303,6 +4311,8 @@ sub citation_notice {
|
||||||
" O. Tange (2018): GNU Parallel 2018, Mar 2018, ISBN 9781387509881,",
|
" O. Tange (2018): GNU Parallel 2018, Mar 2018, ISBN 9781387509881,",
|
||||||
" DOI https://doi.org/10.5281/zenodo.1146014",
|
" DOI https://doi.org/10.5281/zenodo.1146014",
|
||||||
"",
|
"",
|
||||||
|
# Before changing this line, please read
|
||||||
|
# https://www.gnu.org/software/parallel/parallel_design.html#Citation-notice
|
||||||
"This helps funding further development; AND IT WON'T COST YOU A CENT.",
|
"This helps funding further development; AND IT WON'T COST YOU A CENT.",
|
||||||
"If you pay 10000 EUR you should feel free to use GNU Parallel without citing.",
|
"If you pay 10000 EUR you should feel free to use GNU Parallel without citing.",
|
||||||
"",
|
"",
|
||||||
|
@ -4423,6 +4433,8 @@ sub citation {
|
||||||
"",
|
"",
|
||||||
"(Feel free to use \\nocite{tange_ole_2018_1146014})",
|
"(Feel free to use \\nocite{tange_ole_2018_1146014})",
|
||||||
"",
|
"",
|
||||||
|
# Before changing this line, please read
|
||||||
|
# https://www.gnu.org/software/parallel/parallel_design.html#Citation-notice
|
||||||
"This helps funding further development; AND IT WON'T COST YOU A CENT.",
|
"This helps funding further development; AND IT WON'T COST YOU A CENT.",
|
||||||
"If you pay 10000 EUR you should feel free to use GNU Parallel without citing.",
|
"If you pay 10000 EUR you should feel free to use GNU Parallel without citing.",
|
||||||
"",
|
"",
|
||||||
|
|
|
@ -1235,6 +1235,11 @@ saying "Do not show this again". But if that is too much trouble for
|
||||||
you, why not use one of the alternatives instead? See a list in:
|
you, why not use one of the alternatives instead? See a list in:
|
||||||
B<man parallel_alternatives>.
|
B<man parallel_alternatives>.
|
||||||
|
|
||||||
|
As the request for citation is not a legal requirement this is
|
||||||
|
acceptable under GPLv3 and cleared with Richard M. Stallman
|
||||||
|
himself. Thus it does not fall under this:
|
||||||
|
https://www.gnu.org/licenses/gpl-faq.en.html#RequireCitation
|
||||||
|
|
||||||
|
|
||||||
=head1 Ideas for new design
|
=head1 Ideas for new design
|
||||||
|
|
||||||
|
|
2
src/sql
2
src/sql
|
@ -576,7 +576,7 @@ $Global::Initfile && unlink $Global::Initfile;
|
||||||
exit ($err);
|
exit ($err);
|
||||||
|
|
||||||
sub parse_options {
|
sub parse_options {
|
||||||
$Global::version = 20181124;
|
$Global::version = 20181222;
|
||||||
$Global::progname = 'sql';
|
$Global::progname = 'sql';
|
||||||
|
|
||||||
# This must be done first as this may exec myself
|
# This must be done first as this may exec myself
|
||||||
|
|
|
@ -81,6 +81,7 @@ perl -ne '$/="\n\n"; /^Output/../^[^O]\S/ and next; /^ / and print;' ../../src/
|
||||||
s{rsync: link_stat ".*/home/parallel/input_file.out" .*\n}{};
|
s{rsync: link_stat ".*/home/parallel/input_file.out" .*\n}{};
|
||||||
s{rsync error: some files/attrs were not transferred .*\n}{};
|
s{rsync error: some files/attrs were not transferred .*\n}{};
|
||||||
s{.* GtkDialog .*\n}{};
|
s{.* GtkDialog .*\n}{};
|
||||||
|
s{tried 1}{};
|
||||||
' |
|
' |
|
||||||
perl -ne '/GTK2_RC_FILES/ and next;
|
perl -ne '/GTK2_RC_FILES/ and next;
|
||||||
/GTK_RC_FILES/ and next;
|
/GTK_RC_FILES/ and next;
|
||||||
|
|
|
@ -654,9 +654,9 @@ echo X; exit X
|
||||||
completed 1
|
completed 1
|
||||||
completed 2
|
completed 2
|
||||||
completed 0
|
completed 0
|
||||||
tried 1
|
|
||||||
tried 0
|
tried 0
|
||||||
tried 1
|
|
||||||
show_signals() {
|
show_signals() {
|
||||||
perl -e 'for(keys %SIG) {
|
perl -e 'for(keys %SIG) {
|
||||||
$SIG{$_} = eval "sub { print \"Got $_\\n\"; }";
|
$SIG{$_} = eval "sub { print \"Got $_\\n\"; }";
|
||||||
|
@ -1440,8 +1440,8 @@ Start 4
|
||||||
Slow started
|
Slow started
|
||||||
Forced running after 1 sec
|
Forced running after 1 sec
|
||||||
Slow ended
|
Slow ended
|
||||||
|
Give up after 2 secs
|
||||||
parallel: Warning: Semaphore timed out. Stealing the semaphore.
|
parallel: Warning: Semaphore timed out. Stealing the semaphore.
|
||||||
parallel: Warning: Semaphore timed out. Exiting.
|
|
||||||
parallel --help
|
parallel --help
|
||||||
Usage:
|
Usage:
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue