Skip to content

Commit b4195d4

Browse files
committed
Format error messages
1 parent c8614f7 commit b4195d4

File tree

38 files changed

+145
-111
lines changed

38 files changed

+145
-111
lines changed

lib/node_modules/@stdlib/_tools/docs/www/readme-database/lib/main.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
var resolve = require( 'path' ).resolve;
2424
var logger = require( 'debug' );
2525
var isFunction = require( '@stdlib/assert/is-function' );
26+
var format = require( '@stdlib/string/format' );
2627
var copy = require( '@stdlib/utils/copy' );
2728
var cwd = require( '@stdlib/process/cwd' );
2829
var readFileList = require( '@stdlib/fs/read-file-list' );
@@ -80,7 +81,7 @@ function create( options, clbk ) {
8081
cb = options;
8182
}
8283
if ( !isFunction( cb ) ) {
83-
throw new TypeError( 'invalid argument. Last argument must be a callback function. Value: `' + cb + '`.' );
84+
throw new TypeError( format( 'invalid argument. Last argument must be a callback function. Value: `%s`.', cb ) );
8485
}
8586
if ( opts.dir ) {
8687
opts.dir = resolve( cwd(), opts.dir );

lib/node_modules/@stdlib/_tools/docs/www/readme-fragment-file-tree/lib/main.js

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ var isFunction = require( '@stdlib/assert/is-function' );
2727
var copy = require( '@stdlib/utils/copy' );
2828
var cwd = require( '@stdlib/process/cwd' );
2929
var createDatabase = require( '@stdlib/_tools/docs/www/readme-database' );
30+
var format = require( '@stdlib/string/format' );
3031
var write = require( './write.js' );
3132
var validate = require( './validate.js' );
3233
var DEFAULTS = require( './defaults.json' );
@@ -84,10 +85,10 @@ function build( dest, options, clbk ) {
8485
cb = options;
8586
}
8687
if ( !isString( dest ) ) {
87-
throw new TypeError( 'invalid argument. First argument must be a string. Value: `' + dest + '`.' );
88+
throw new TypeError( format( 'invalid argument. First argument must be a string primitive. Value: `%s`.', dest ) );
8889
}
8990
if ( !isFunction( cb ) ) {
90-
throw new TypeError( 'invalid argument. Last argument must be a callback function. Value: `' + cb + '`.' );
91+
throw new TypeError( format( 'invalid argument. Last argument must be a callback function. Value: `%s`.', cb ) );
9192
}
9293
cd = cwd();
9394
if ( opts.dir ) {

lib/node_modules/@stdlib/_tools/github/create-repo/lib/factory.js

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222

2323
var isFunction = require( '@stdlib/assert/is-function' );
2424
var isString = require( '@stdlib/assert/is-string' ).isPrimitive;
25+
var format = require( '@stdlib/string/format' );
2526
var copy = require( '@stdlib/utils/copy' );
2627
var validate = require( './validate.js' );
2728
var defaults = require( './defaults.json' );
@@ -77,7 +78,7 @@ function factory( options, clbk ) {
7778
}
7879
}
7980
if ( !isFunction( clbk ) ) {
80-
throw new TypeError( 'invalid argument. Callback argument must be a function. Value: `' + clbk + '`.' );
81+
throw new TypeError( format( 'invalid argument. Callback argument must be a function. Value: `%s`.', clbk ) );
8182
}
8283
return createRepo;
8384

@@ -91,7 +92,7 @@ function factory( options, clbk ) {
9192
*/
9293
function createRepo( name ) {
9394
if ( !isString( name ) ) {
94-
throw new TypeError( 'invalid argument. Repository name must be a string primitive. Value: `' + name + '`.' );
95+
throw new TypeError( format( 'invalid argument. Repository name must be a string primitive. Value: `%s`.', name ) );
9596
}
9697
query( name, opts, done );
9798
/**

lib/node_modules/@stdlib/_tools/github/delete-token/lib/main.js

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222

2323
var isFunction = require( '@stdlib/assert/is-function' );
2424
var isNonNegativeInteger = require( '@stdlib/assert/is-nonnegative-integer' );
25+
var format = require( '@stdlib/string/format' );
2526
var copy = require( '@stdlib/utils/copy' );
2627
var validate = require( './validate.js' );
2728
var defaults = require( './defaults.json' );
@@ -48,10 +49,10 @@ function del( id, options, clbk ) {
4849
var opts;
4950
var err;
5051
if ( !isNonNegativeInteger( id ) ) {
51-
throw new TypeError( 'invalid argument. Token id must be a nonnegative integer. Value: `' + id + '`.' );
52+
throw new TypeError( format( 'invalid argument. Token id must be a nonnegative integer. Value: `%s`.', id ) );
5253
}
5354
if ( !isFunction( clbk ) ) {
54-
throw new TypeError( 'invalid argument. Callback argument must be a function. Value: `' + clbk + '`.' );
55+
throw new TypeError( format( 'invalid argument. Callback argument must be a function. Value: `%s`.', clbk ) );
5556
}
5657
opts = copy( defaults );
5758
err = validate( opts, options );

lib/node_modules/@stdlib/_tools/licenses/insert-header-file-list/lib/sync.js

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ var isString = require( '@stdlib/assert/is-string' ).isPrimitive;
3030
var isObject = require( '@stdlib/assert/is-plain-object' );
3131
var readFile = require( '@stdlib/fs/read-file' ).sync;
3232
var writeFile = require( '@stdlib/fs/write-file' ).sync;
33+
var format = require( '@stdlib/string/format' );
3334
var cwd = require( '@stdlib/process/cwd' );
3435
var extname = require( '@stdlib/utils/extname' );
3536
var insert = require( '@stdlib/_tools/licenses/insert-header' );
@@ -83,18 +84,18 @@ function insertHeader( files, header ) {
8384
var i;
8485

8586
if ( !isEmptyArray( files ) && !isStringArray( files ) ) {
86-
throw new TypeError( 'invalid argument. First argument must be an array of strings. Value: `' + files + '`.' );
87+
throw new TypeError( format( 'invalid argument. First argument must be an array of strings. Value: `%s`.', files ) );
8788
}
8889
if ( isObject( header ) ) {
8990
keys = objectKeys( header );
9091
for ( i = 0; i < keys.length; i++ ) {
9192
v = header[ keys[i] ];
9293
if ( !isString( v ) ) {
93-
throw new TypeError( 'invalid argument. A `header` object must map each filename extension to a license header string. `' + keys[i] + ': ' + v + '`. Value: `' + JSON.stringify( header ) + '`.' );
94+
throw new TypeError( format( 'invalid argument. A `header` object must map each filename extension to a license header string. `%s: %s`. Value: `%s`.', keys[i], v, JSON.stringify( header ) ) );
9495
}
9596
}
9697
} else if ( !isString( header ) ) {
97-
throw new TypeError( 'invalid argument. Second argument must be either a primitive string or an object whose keys are filename extensions and whose values are header strings. Value: `' + header + '`.' );
98+
throw new TypeError( format( 'invalid argument. Second argument must be either a primitive string or an object whose keys are filename extensions and whose values are header strings. Value: `%s`.', header ) );
9899
}
99100
header = normalizeHeader( header );
100101

lib/node_modules/@stdlib/_tools/pkgs/dep-list/lib/main.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
// MODULES //
2222

2323
var isString = require( '@stdlib/assert/is-string' ).isPrimitive;
24+
var format = require( '@stdlib/string/format' );
2425
var copy = require( '@stdlib/utils/copy' );
2526
var validate = require( './validate.js' );
2627
var deps = require( './deps.js' );
@@ -64,7 +65,7 @@ function depList( pkg, options ) {
6465
var err;
6566

6667
if ( !isString( pkg ) ) {
67-
throw new TypeError( 'invalid argument. First argument must be a string. Value: `' + pkg + '`.' );
68+
throw new TypeError( format( 'invalid argument. First argument must be a string primitive. Value: `%s`.', pkg ) );
6869
}
6970
opts = copy( config );
7071
if ( arguments.length > 1 ) {

lib/node_modules/@stdlib/_tools/pkgs/installed/lib/installed.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ var resolve = require( 'path' ).resolve;
2424
var createDebug = require( 'debug' );
2525
var readInstalled = require( 'read-installed' );
2626
var isFunction = require( '@stdlib/assert/is-function' );
27+
var format = require( '@stdlib/string/format' );
2728
var cwd = require( '@stdlib/process/cwd' );
2829
var copy = require( '@stdlib/utils/copy' );
2930
var PINF = require( '@stdlib/constants/float64/pinf' );
@@ -80,7 +81,7 @@ function pkgs() {
8081
}
8182
}
8283
if ( !isFunction( clbk ) ) {
83-
throw new TypeError( 'invalid argument. Callback argument must be a function. Value: `' + clbk + '`.' );
84+
throw new TypeError( format( 'invalid argument. Callback argument must be a function. Value: `%s`.', clbk ) );
8485
}
8586
if ( opts.dir ) {
8687
opts.dir = resolve( cwd(), opts.dir );

lib/node_modules/@stdlib/_tools/remark/plugins/remark-stdlib-urls-github/lib/attacher.js

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ var copy = require( '@stdlib/utils/copy' );
2525
var isObject = require( '@stdlib/assert/is-plain-object' );
2626
var hasOwnProp = require( '@stdlib/assert/has-own-property' );
2727
var isString = require( '@stdlib/assert/is-string' ).isPrimitive;
28+
var format = require( '@stdlib/string/format' );
2829
var transformerFactory = require( './transformer.js' );
2930
var defaults = require( './defaults.json' );
3031

@@ -51,11 +52,11 @@ function attacher( options ) {
5152
// NOTE: cannot use `arguments.length` check, as `options` may be explicitly passed as `undefined`
5253
if ( options !== void 0 ) {
5354
if ( !isObject( options ) ) {
54-
throw new TypeError( 'invalid argument. Options argument must be an object. Value: `' + options + '`.' );
55+
throw new TypeError( format( 'invalid argument. Options argument must be an object. Value: `%s`.', options ) );
5556
}
5657
if ( hasOwnProp( options, 'branch' ) ) {
5758
if ( !isString( options.branch ) ) {
58-
throw new TypeError( 'invalid option. `branch` option must be a string primitive. Value: `' + options.branch + '`.' );
59+
throw new TypeError( format( 'invalid option. `%s` option must be a string primitive. Value: `%s`.', 'branch', options.branch ) );
5960
}
6061
opts.branch = options.branch;
6162
}

lib/node_modules/@stdlib/_tools/scaffold/package-json/lib/validate.js

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ var isObject = require( '@stdlib/assert/is-plain-object' );
2424
var hasOwnProp = require( '@stdlib/assert/has-own-property' );
2525
var isString = require( '@stdlib/assert/is-string' ).isPrimitive;
2626
var isStringArray = require( '@stdlib/assert/is-string-array' ).primitives;
27+
var format = require( '@stdlib/string/format' );
2728

2829

2930
// VARIABLES //
@@ -59,40 +60,39 @@ var RE = /^@stdlib\/.+/;
5960
*/
6061
function validate( opts, options ) {
6162
if ( !isObject( options ) ) {
62-
return new TypeError( 'invalid argument. Options argument must be an object. Value: `' + options +
63-
'`.' );
63+
return new TypeError( format( 'invalid argument. Options argument must be an object. Value: `%s`.', options ) );
6464
}
6565
if ( hasOwnProp( options, 'name' ) ) {
6666
opts.name = options.name;
6767
if ( !isString( opts.name ) ) {
68-
return new TypeError( 'invalid option. `name` option must be a primitive string. Option: `' + opts.name + '`.' );
68+
return new TypeError( format( 'invalid option. `%s` option must be a primitive string. Option: `%s`.', 'name', opts.name ) );
6969
}
7070
if ( !RE.test( opts.name ) ) {
71-
return new Error( 'invalid option. `name` option must begin with `@stdlib/`. Option: `'+ opts.name + '`.' );
71+
return new Error( format( 'invalid option. `%s` option must begin with `@stdlib/`. Option: `%s`.', 'name', opts.name ) );
7272
}
7373
}
7474
if ( hasOwnProp( options, 'desc' ) ) {
7575
opts.desc = options.desc;
7676
if ( !isString( opts.desc ) ) {
77-
return new TypeError( 'invalid option. `desc` option must be a primitive string. Option: `' + opts.desc + '`.' );
77+
return new TypeError( format( 'invalid option. `%s` option must be a string primitive. Option: `%s`.', 'desc', opts.desc ) );
7878
}
7979
}
8080
if ( hasOwnProp( options, 'keywords' ) ) {
8181
opts.keywords = options.keywords;
8282
if ( !isStringArray( opts.keywords ) ) {
83-
return new TypeError( 'invalid option. `keywords` option must be a string array. Option: `' + opts.keywords + '`.' );
83+
return new TypeError( format( 'invalid option. `%s` option must be a string array. Option: `%s`.', 'keywords', opts.keywords ) );
8484
}
8585
}
8686
if ( hasOwnProp( options, 'cmd' ) ) {
8787
opts.cmd = options.cmd;
8888
if ( !isString( opts.cmd ) ) {
89-
return new TypeError( 'invalid option. `cmd` option must be a primitive string. Option: `' + opts.cmd + '`.' );
89+
return new TypeError( format( 'invalid option. `%s` option must be a string primitive. Option: `%s`.', 'cmd', opts.cmd ) );
9090
}
9191
}
9292
if ( hasOwnProp( options, 'browser' ) ) {
9393
opts.browser = options.browser;
9494
if ( !isString( opts.browser ) ) {
95-
return new TypeError( 'invalid option. `browser` option must be a primitive string. Option: `' + opts.browser + '`.' );
95+
return new TypeError( format( 'invalid option. `%s` option must be a string primitive. Option: `%s`.', 'browser', opts.browser ) );
9696
}
9797
}
9898
return null;

lib/node_modules/@stdlib/_tools/test-cov/tape-istanbul/lib/runner.js

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ var copy = require( '@stdlib/utils/copy' );
3030
var cwd = require( '@stdlib/process/cwd' );
3131
var dirname = require( '@stdlib/utils/dirname' );
3232
var readFile = require( '@stdlib/fs/read-file' );
33+
var format = require( '@stdlib/string/format' );
3334
var defaults = require( './defaults.json' );
3435
var validate = require( './validate.js' );
3536
var compile = require( './compile.js' );
@@ -82,7 +83,7 @@ function runner() {
8283

8384
pattern = arguments[ 0 ];
8485
if ( !isString( pattern ) ) {
85-
throw new TypeError( 'invalid argument. First argument must be a primitive string. Value: `'+pattern+'`.' );
86+
throw new TypeError( format( 'invalid argument. First argument must be a primitive string. Value: `%s`.', pattern ) );
8687
}
8788
opts = copy( defaults );
8889
if ( arguments.length > 2 ) {
@@ -102,7 +103,7 @@ function runner() {
102103
opts.dir = resolve( dir, opts.dir );
103104
}
104105
if ( !isFunction( clbk ) ) {
105-
throw new TypeError( 'invalid argument. Last argument must be a function. Value: `'+clbk+'`.' );
106+
throw new TypeError( format( 'invalid argument. Last argument must be a function. Value: `%s`.', clbk ) );
106107
}
107108
gopts = {
108109
'cwd': opts.dir,

lib/node_modules/@stdlib/_tools/tests/browser-build/lib/build.js

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ var bundle = require( '@stdlib/_tools/tests/bundle' );
2727
var html = require( '@stdlib/_tools/tests/html' );
2828
var isString = require( '@stdlib/assert/is-string' ).isPrimitive;
2929
var isFunction = require( '@stdlib/assert/is-function' );
30+
var format = require( '@stdlib/string/format' );
3031
var cwd = require( '@stdlib/process/cwd' );
3132
var copy = require( '@stdlib/utils/copy' );
3233
var defaults = require( './defaults.json' );
@@ -92,10 +93,10 @@ function build( root, output, options, clbk ) {
9293
var d;
9394

9495
if ( !isString( root ) ) {
95-
throw new TypeError( 'invalid argument. First argument must be a string. Value: `'+root+'`.' );
96+
throw new TypeError( format( 'invalid argument. First argument must be a string primitive. Value: `%1`.', root ) );
9697
}
9798
if ( !isString( output ) ) {
98-
throw new TypeError( 'invalid argument. Second argument must be a string. Value: `'+output+'`.' );
99+
throw new TypeError( format( 'invalid argument. Second argument must be a string primitive. Value: `%s`.', output ) );
99100
}
100101
opts = copy( defaults );
101102
if ( arguments.length < 4 ) {
@@ -108,7 +109,7 @@ function build( root, output, options, clbk ) {
108109
}
109110
}
110111
if ( !isFunction( cb ) ) {
111-
throw new TypeError( 'invalid argument. Callback argument must be a function. Value: `'+cb+'`.' );
112+
throw new TypeError( format( 'invalid argument. Callback argument must be a function. Value: `%s`.', cb ) );
112113
}
113114
d = cwd();
114115
debug( 'Current working directory: %s', d );

lib/node_modules/@stdlib/_tools/tests/browser-build/lib/validate.js

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
var hasOwnProp = require( '@stdlib/assert/has-own-property' );
2424
var isObject = require( '@stdlib/assert/is-plain-object' );
2525
var isString = require( '@stdlib/assert/is-string' ).isPrimitive;
26+
var format = require( '@stdlib/string/format' );
2627

2728

2829
// MAIN //
@@ -53,37 +54,36 @@ var isString = require( '@stdlib/assert/is-string' ).isPrimitive;
5354
*/
5455
function validate( opts, options ) {
5556
if ( !isObject( options ) ) {
56-
return new TypeError( 'invalid argument. Options argument must be an object. Value: `' + options +
57-
'`.' );
57+
return new TypeError( format( 'invalid argument. Options argument must be an object. Value: `%s`.', options ) );
5858
}
5959
if ( hasOwnProp( options, 'pattern' ) ) {
6060
opts.pattern = options.pattern;
6161
if ( !isString( opts.pattern ) ) {
62-
return new TypeError( 'invalid option. `pattern` option must be a string. Option: `'+opts.pattern+'`.' );
62+
return new TypeError( format( 'invalid option. `%s` option must be a string. Option: `%s`.', 'pattern', opts.pattern ) );
6363
}
6464
}
6565
if ( hasOwnProp( options, 'bundle' ) ) {
6666
opts.bundle = options.bundle;
6767
if ( !isString( opts.bundle ) ) {
68-
return new TypeError( 'invalid option. `bundle` option must be a string. Option: `'+opts.bundle+'`.' );
68+
return new TypeError( format( 'invalid option. `%s` option must be a string. Option: `%s`.', 'bundle', opts.bundle ) );
6969
}
7070
}
7171
if ( hasOwnProp( options, 'mount' ) ) {
7272
opts.mount = options.mount;
7373
if ( !isString( opts.mount ) ) {
74-
return new TypeError( 'invalid option. `mount` option must be a string. Option: `'+opts.mount+'`.' );
74+
return new TypeError( format( 'invalid option. `%s` option must be a string. Option: `%s`.', 'mount', opts.mount ) );
7575
}
7676
}
7777
if ( hasOwnProp( options, 'html' ) ) {
7878
opts.html = options.html;
7979
if ( !isString( opts.html ) ) {
80-
return new TypeError( 'invalid option. `html` option must be a string. Option: `'+opts.html+'`.' );
80+
return new TypeError( format( 'invalid option. `%s` option must be a string. Option: `%s`.', 'html', opts.html ) );
8181
}
8282
}
8383
if ( hasOwnProp( options, 'title' ) ) {
8484
opts.title = options.title;
8585
if ( !isString( opts.title ) ) {
86-
return new TypeError( 'invalid option. `title` option must be a string. Option: `'+opts.title+'`.' );
86+
return new TypeError( format( 'invalid option. `%s` option must be a string. Option: `%s`.', 'title', opts.title ) );
8787
}
8888
}
8989
return null;

lib/node_modules/@stdlib/_tools/utils/tex-equation-to-svg/lib/factory.js

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
var mathjax = require( 'mathjax-node-sre' );
2424
var isFunction = require( '@stdlib/assert/is-function' );
2525
var isString = require( '@stdlib/assert/is-string' ).isPrimitive;
26+
var format = require( '@stdlib/string/format' );
2627
var copy = require( '@stdlib/utils/copy' );
2728
var defaults = require( './defaults.json' );
2829
var validate = require( './validate.js' );
@@ -84,10 +85,10 @@ function factory( options ) {
8485
*/
8586
function tex2svg( str, clbk ) {
8687
if ( !isString( str ) ) {
87-
throw new TypeError( 'invalid argument. First argument must be a string primitive. Value: `' + str + '`.' );
88+
throw new TypeError( format( 'invalid argument. First argument must be a string primitive. Value: `%s`.', str ) );
8889
}
8990
if ( !isFunction( clbk ) ) {
90-
throw new TypeError( 'invalid argument. Callback argument must be a function. Value: `' + clbk + '`.' );
91+
throw new TypeError( format( 'invalid argument. Callback argument must be a function. Value: `%s`.', clbk ) );
9192
}
9293
opts.math = str;
9394
mathjax.typeset( opts, done );

lib/node_modules/@stdlib/array/complex128/lib/from_iterator.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222

2323
var isArrayLikeObject = require( '@stdlib/assert/is-array-like-object' );
2424
var isComplexLike = require( '@stdlib/assert/is-complex-like' );
25+
var format = require( '@stdlib/string/format' );
2526
var real = require( '@stdlib/complex/real' );
2627
var imag = require( '@stdlib/complex/imag' );
2728

@@ -52,7 +53,7 @@ function fromIterator( it ) {
5253
} else if ( isComplexLike( z ) ) {
5354
out.push( real( z ), imag( z ) );
5455
} else {
55-
return new TypeError( 'invalid argument. An iterator must return either a two-element array containing real and imaginary components or a complex number. Value: `'+z+'`.' );
56+
return new TypeError( format( 'invalid argument. An iterator must return either a two-element array containing real and imaginary components or a complex number. Value: `%s`.', z ) );
5657
}
5758
}
5859
return out;

lib/node_modules/@stdlib/array/complex128/lib/from_iterator_map.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222

2323
var isArrayLikeObject = require( '@stdlib/assert/is-array-like-object' );
2424
var isComplexLike = require( '@stdlib/assert/is-complex-like' );
25+
var format = require( '@stdlib/string/format' );
2526
var real = require( '@stdlib/complex/real' );
2627
var imag = require( '@stdlib/complex/imag' );
2728

@@ -57,7 +58,7 @@ function fromIteratorMap( it, clbk, thisArg ) {
5758
} else if ( isComplexLike( z ) ) {
5859
out.push( real( z ), imag( z ) );
5960
} else {
60-
return new TypeError( 'invalid argument. Callback must return either a two-element array containing real and imaginary components or a complex number. Value: `'+z+'`.' );
61+
return new TypeError( format( 'invalid argument. Callback must return either a two-element array containing real and imaginary components or a complex number. Value: `%s`.', z ) );
6162
}
6263
}
6364
return out;

0 commit comments

Comments
 (0)