xref: /illumos-gate/usr/src/cmd/sgs/rtld/common/rtld.msg (revision 7417cfde)
1#
2# CDDL HEADER START
3#
4# The contents of this file are subject to the terms of the
5# Common Development and Distribution License (the "License").
6# You may not use this file except in compliance with the License.
7#
8# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9# or http://www.opensolaris.org/os/licensing.
10# See the License for the specific language governing permissions
11# and limitations under the License.
12#
13# When distributing Covered Code, include this CDDL HEADER in each
14# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15# If applicable, add the following below this CDDL HEADER, with the
16# fields enclosed by brackets "[]" replaced with your own identifying
17# information: Portions Copyright [yyyy] [name of copyright owner]
18#
19# CDDL HEADER END
20#
21
22#
23# Copyright (c) 1995, 2010, Oracle and/or its affiliates. All rights reserved.
24#
25
26@ _START_
27
28# Message file for cmd/sgs/rtld (ld.so.1)
29
30@ MSG_ID_RTLD
31
32# Usage error
33@ MSG_USG_BADOPT	"usage: ld.so.1 [-e option,...] \
34			 dynamic-object [object args,...]"
35
36# Message formatting error.
37@ MSG_EMG_BUFOVRFLW	"ld.so.1: internal: message buffer overflow"
38
39# Argument processing errors
40
41@ MSG_ARG_ILLMODE_1	"illegal mode: RTLD_NOW or RTLD_LAZY or RTLD_NOLOAD \
42			 required"
43@ MSG_ARG_ILLMODE_2	"illegal mode: RTLD_NOW cannot be combined with \
44			 RTLD_LAZY"
45@ MSG_ARG_ILLMODE_3	"illegal mode: LM_ID_NEWLM requires non-zero path"
46@ MSG_ARG_ILLMODE_4	"illegal mode: LM_ID_NEWLM cannot be combined with \
47			 RTLD_PARENT"
48@ MSG_ARG_ILLMODE_5	"illegal mode: potential multiple path expansion \
49			 requires RTLD_FIRST"
50
51@ MSG_ARG_ILLPATH	"illegal pathname"
52@ MSG_ARG_ILLSYM	"illegal symbol name"
53@ MSG_ARG_ILLNAME	"illegal name"
54@ MSG_ARG_INVADDR	"address 0x%llx does not fall within any mapped object"
55@ MSG_ARG_INVHNDL	"invalid handle: 0x%llx"
56@ MSG_ARG_ILLVAL	"illegal request value"
57@ MSG_ARG_NOCONFIG	"no configuration file in use"
58@ MSG_ARG_NOPROFNAME	"no profile target specified"
59@ MSG_ARG_ATEXIT	"purge of atexit() registrations failed: %d"
60@ MSG_ARG_SERCNT	"information path count (%d) insufficient"
61@ MSG_ARG_SERSIZE	"information buffer size (%lld) insufficient"
62@ MSG_ARG_ILLFLAGS	"illegal flags value: %d"
63@ MSG_ARG_ILLINFO	"non-null info field required for flags value: %d"
64@ MSG_ARG_INVSIG	"invalid signal supplied: %d"
65
66# General error diagnostics
67
68@ MSG_GEN_NOOPEN	"DF_1_NOOPEN tagged object may not be dlopen()'ed"
69
70@ MSG_GEN_NOFILE	"%s: can't find file"
71@ MSG_GEN_ALTER		"%s: alternate file in use"
72@ MSG_GEN_NOSYM		"%s: can't find symbol"
73@ MSG_GEN_NODUMP	"%s: DF_1_NODUMP tagged object may not be dldump()'ed"
74
75# Move related messages
76
77@ MSG_MOVE_ERR1		"move entry with illegal size; ignored"
78
79
80# Relocation processing messages (some of these are required to satisfy
81# do_reloc(), which is common code used by cmd/sgs/libld - make sure both
82# message files remain consistent).
83
84@ MSG_REL_NOSYM		"relocation error: file %s: symbol %s: \
85			 referenced symbol not found"
86@ MSG_REL_PLTREF	"relocation error: %s: unidentifiable procedure \
87			 reference: link-map 0x%llx, offset 0x%llx, \
88			 called from 0x%llx"
89@ MSG_REL_UNSUPSZ	"relocation error: %s: file %s: symbol %s: \
90			 offset size (%d bytes) is not supported"
91@ MSG_REL_BADTLS	"relocation error: %s: file %s: symbol %s: \
92			 file contains insufficient TLS support information"
93
94# System call messages.
95
96@ MSG_SYS_BRK		"%s: brk failed: %s"
97@ MSG_SYS_OPEN		"%s: open failed: %s"
98@ MSG_SYS_MMAP		"%s: mmap failed: %s"
99@ MSG_SYS_MPROT		"%s: mprotect failed: %s"
100@ MSG_SYS_MMAPANON	"mmap anon failed: %s"
101
102@ MSG_SEC_OPEN		"%s: open failed: No such file in secure directories"
103@ MSG_SEC_ILLEGAL	"%s: open failed: illegal insecure pathname"
104
105
106# Configuration failures
107
108@ MSG_CONF_APP		"configuration file: %s: is specific to application: %s"
109@ MSG_CONF_DSTAT	"configuration file: %s: original directory %s: stat \
110			 failed: %s"
111@ MSG_CONF_FSTAT	"configuration file: %s: original file %s: stat \
112			 failed: %s"
113@ MSG_CONF_FCMP		"configuration file: %s: original file %s: modified \
114			 since configuration file creation"
115
116# Link Audit diagnostic message formats
117
118@ MSG_AUD_BADVERS	"version mismatch: current %d: required %d"
119@ MSG_AUD_DISABLED	"%s: audit initialization failure: disabled"
120
121
122# Versioning diagnostics.
123
124@ MSG_VER_NFOUND	"%s: version '%s' not found (required by file %s)"
125
126
127# Diagnostics generated under the control of ldd(1).
128
129@ MSG_LDD_VER_FIND	"   find version=%s\n"
130@ MSG_LDD_VER_NFOUND	"\t%s (%s) =>\t (version not found)\n"
131
132@ MSG_LDD_SYM_NFOUND	"\tsymbol not found: %s\t\t(%s)\n"
133
134@ MSG_LDD_PTH_TRYING	"    trying path=%s%s\n"
135@ MSG_LDD_PTH_LIBPATH	"    search path=%s  (LD_LIBRARY_PATH)\n"
136@ MSG_LDD_PTH_LIBPATHC	"    search path=%s  (configuration \
137			 LD_LIBRARY_PATH - %s)\n"
138@ MSG_LDD_PTH_RUNPATH	"    search path=%s  (RUNPATH/RPATH from file %s)\n"
139@ MSG_LDD_PTH_BGNDFL	"    search path="
140@ MSG_LDD_PTH_ENDDFL	"  (default)\n"
141@ MSG_LDD_PTH_ENDDFLC	"  (configuration default - %s)\n"
142@ MSG_LDD_PTH_IGNORE	"    ignore path=%s  (insecure directory name)\n"
143
144@ MSG_LDD_FIL_FILTER	"\n   object=%s; filter for %s\n"
145@ MSG_LDD_FIL_FIND	"\n   find object=%s; required by %s\n"
146@ MSG_LDD_FIL_NFOUND	"\t%s =>\t (file not found)\n"
147@ MSG_LDD_FIL_ILLEGAL	"\t%s =>\t (illegal insecure pathname)\n"
148@ MSG_LDD_FIL_ALTER	"  (alternate)"
149
150@ MSG_LDD_CAP_NFOUND	"\t%s =>\t (no capability objects found)\n"
151
152@ MSG_LDD_SEC_NFOUND	"\t%s =>\t (file not found in secure directories)\n"
153
154@ MSG_LDD_REL_ERR1	"\trelocation %s offset invalid: %s: offset=0x%llx \
155			 lies outside memory image; relocation discarded\n"
156@ MSG_LDD_REL_ERR2	"\tloading after relocation has started: interposition \
157			 request (DF_1_INTERPOSE) ignored: %s\n"
158@ MSG_LDD_MOVE_ERR	"\tmove %lld offset invalid: %s: offset=0x%llx \
159			 lies outside memory image; move discarded\n"
160@ MSG_LDD_CPY_SIZDIF	"\trelocation %s sizes differ: %s\n\
161			 \t\t(file %s size=0x%llx; file %s size=0x%llx)\n"
162@ MSG_LDD_CPY_INSDATA	"\t\t%s size used; possible insufficient data copied\n"
163@ MSG_LDD_CPY_DATRUNC	"\t\t%s size used; possible data truncation\n"
164@ MSG_LDD_CPY_PROT	"\trelocation %s symbol: %s: file %s: relocation bound \
165			 to a symbol with STV_PROTECTED visibility\n"
166
167@ MSG_LDD_INIT_FMT_01	"\n   cyclic dependencies detected, group [%d]:\n"
168@ MSG_LDD_INIT_FMT_02	"   init object=%s\n"
169@ MSG_LDD_INIT_FMT_03	"   init object=%s - cyclic group [%d], referenced \
170			 by:\n"
171
172@ MSG_LDD_UNUSED_FMT	"   unused object=%s\n"
173@ MSG_LDD_UNCYC_FMT	"   unused object=%s; member of cyclic group [%d]\n"
174@ MSG_LDD_UNREF_FMT	"   unreferenced object=%s; unused dependency of %s\n"
175
176@ MSG_LDD_REL_CPYDISP	"\tsymbol %s: file %s: copy relocation symbol may \
177			 have been displacement relocated\n"
178
179@ MSG_LDD_REJ_MACH	"  - wrong ELF machine type: %s"
180@ MSG_LDD_REJ_CLASS	"  - wrong ELF class: %s"
181@ MSG_LDD_REJ_DATA	"  - wrong ELF data format: %s"
182@ MSG_LDD_REJ_TYPE	"  - bad ELF type: %s"
183@ MSG_LDD_REJ_BADFLAG	"  - bad ELF flags value: %s"
184@ MSG_LDD_REJ_MISFLAG	"  - mismatched ELF flags value: %s"
185@ MSG_LDD_REJ_VERSION	"  - mismatched ELF/lib version: %s"
186@ MSG_LDD_REJ_HAL	"  - HAL R1 extensions required"
187@ MSG_LDD_REJ_US3	"  - Sun UltraSPARC III extensions required"
188@ MSG_LDD_REJ_STR	"  - %s"
189@ MSG_LDD_REJ_UNKFILE	"  - unknown file type"
190@ MSG_LDD_REJ_UNKCAP	"  - unknown capability: %d"
191@ MSG_LDD_REJ_HWCAP_1	"  - hardware capability (CA_SUNW_HW_1) unsupported: %s"
192@ MSG_LDD_REJ_SFCAP_1	"  - software capability (CA_SUNW_SF_1) unsupported: %s"
193@ MSG_LDD_REJ_MACHCAP	"  - machine capability (CA_SUNW_MACH) unsupported: %s"
194@ MSG_LDD_REJ_PLATCAP	"  - platform capability (CA_SUNW_PLAT) unsupported: %s"
195@ MSG_LDD_REJ_HWCAP_2	"  - hardware capability (CA_SUNW_HW_2) unsupported: %s"
196@ MSG_LDD_REJ_ARCHIVE	"  - invalid archive use"
197
198@ MSG_LDD_WARN_UNKCAP	"%s: unknown capability: %d"
199@ MSG_LDD_WARN_HWCAP_1	"%s: warning: hardware capability (CA_SUNW_HW_1) \
200			 unsupported: %s\n"
201@ MSG_LDD_WARN_SFCAP_1	"%s: warning: software capability (CA_SUNW_SF_1) \
202			 unsupported: %s\n"
203@ MSG_LDD_WARN_MACHCAP	"%s: warning: machine capability (CA_SUNW_MACH) \
204			 unsupported: %s\n"
205@ MSG_LDD_WARN_PLATCAP	"%s: warning: platform capability (CA_SUNW_PLAT) \
206			 unsupported: %s\n"
207@ MSG_LDD_WARN_HWCAP_2	"%s: warning: hardware capability (CA_SUNW_HW_2) \
208			 unsupported: %s\n"
209
210# Error rejection messages.
211
212@ MSG_ERR_REJ_MACH	"%s: wrong ELF machine type: %s"
213@ MSG_ERR_REJ_CLASS	"%s: wrong ELF class: %s"
214@ MSG_ERR_REJ_DATA	"%s: wrong ELF data format: %s"
215@ MSG_ERR_REJ_TYPE	"%s: bad ELF type: %s"
216@ MSG_ERR_REJ_BADFLAG	"%s: bad ELF flags value: %s"
217@ MSG_ERR_REJ_MISFLAG	"%s: mismatched ELF flags value: %s"
218@ MSG_ERR_REJ_VERSION	"%s: mismatched ELF/lib version: %s"
219@ MSG_ERR_REJ_HAL	"%s: HAL R1 extensions required"
220@ MSG_ERR_REJ_US3	"%s: Sun UltraSPARC III extensions required"
221@ MSG_ERR_REJ_STR	"%s: %s"
222@ MSG_ERR_REJ_UNKFILE	"%s: unknown file type"
223@ MSG_ERR_REJ_UNKCAP	"%s: unknown capability: %d"
224@ MSG_ERR_REJ_HWCAP_1	"%s: hardware capability (CA_SUNW_HW_1) unsupported: %s"
225@ MSG_ERR_REJ_SFCAP_1	"%s: software capability (CA_SUNW_SF_1) unsupported: %s"
226@ MSG_ERR_REJ_MACHCAP	"%s: machine capability (CA_SUNW_MACH) unsupported: %s"
227@ MSG_ERR_REJ_PLATCAP	"%s: platform capability (CA_SUNW_PLAT) unsupported: %s"
228@ MSG_ERR_REJ_HWCAP_2	"%s: hardware capability (CA_SUNW_HW_2) unsupported: %s"
229@ MSG_ERR_REJ_ARCHIVE	"%s: invalid archive use"
230
231# Error TLS failures
232
233@ MSG_TLS_NOSUPPORT	"%s: TLS requirement failure : TLS support is \
234			 unavailable"
235@ MSG_TLS_STATBASE	"%s: static TLS failure: object is not part of primary \
236			 link-map list"
237@ MSG_TLS_STATSIZE	"%s: static TLS failure: object loaded after process \
238			 initialization: size (%#llx) exceeds available backup \
239			 reservation (%#llx)"
240@ MSG_TLS_STATINIT	"%s: static TLS failure: object loaded after process \
241			 initialization: can not accommodate initialized data"
242
243# Error expand()
244
245@ MSG_ERR_EXPAND1	"%s: %s: path name too long"
246@ MSG_ERR_EXPAND2	"%s: %s: token %s could not be expanded"
247
248# Specific dlinfo() messages.
249
250@ MSG_DEF_NODEPFOUND	"%s: no deferred dependency found"
251@ MSG_DEF_NOSYMFOUND	"%s: no deferred symbol found"
252@ MSG_DEF_DEPLOADED	"%s: deferred dependency is already loaded"
253
254# Error diagnostic standard prefixes.
255
256@ MSG_ERR_WARNING	"warning: "
257@ MSG_ERR_FATAL		"fatal: "
258@ MSG_ERR_ELF		"elf error: "
259
260@ MSG_STR_UNKNOWN	"(unknown)"
261@ MSG_STR_NULL		"(null)"
262
263# Unused errors - used by ldd.
264
265@ MSG_USD_LDLIBPATH	"   unused search path=%s  (LD_LIBRARY_PATH)\n"
266@ MSG_DUP_LDLIBPATH	"   unused (duplicate) search path=%s  \
267			 (LD_LIBRARY_PATH)\n"
268@ MSG_USD_LDLIBPATHC	"   unused search path=%s  (configuration \
269			 LD_LIBRARY_PATH - %s)\n"
270@ MSG_DUP_LDLIBPATHC	"   unused (duplicate) search path=%s  (configuration \
271			 LD_LIBRARY_PATH - %s)\n"
272@ MSG_USD_RUNPATH	"   unused search path=%s  (RUNPATH/RPATH from \
273			 file %s)\n"
274
275@ _END_
276
277# The following strings represent reserved words, files, pathnames and symbols.
278# Reference to this strings is via the MSG_ORIG() macro, and thus no message
279# translation is required.
280
281@ MSG_LDD_FIL_PATH	"\t%s%s%s\n"
282@ MSG_LDD_FIL_EQUIV	"\t%s =>\t %s%s%s\n"
283@ MSG_LDD_FMT_PATH1	"%s"
284@ MSG_LDD_FMT_PATHN	":%s"
285@ MSG_LDD_INIT_FMT_FILE	"\t%s\n"
286@ MSG_LDD_VER_FOUND	"\t%s (%s) =>\t %s\n"
287
288@ MSG_STR_EMPTY		""
289@ MSG_STR_NEGATE	"-"
290@ MSG_STR_ZERO		"0"
291@ MSG_STR_HEX		"0x"
292@ MSG_STR_ELF		"ELF"
293@ MSG_STR_EMSGFOR1	"%s: %s: %s"
294@ MSG_STR_EMSGFOR2	"%s: %s"
295@ MSG_STR_HEXNUM	"0123456789abcdef"
296@ MSG_STR_NL		"\n"
297@ MSG_STR_SLASH		"/"
298@ MSG_STR_DELIMIT	": "
299@ MSG_STR_ONE		"1"
300
301@ MSG_CAP_DELIMIT	","
302
303@ MSG_SUNW_OST_SGS	"SUNW_OST_SGS"
304@ MSG_SUNW_OST_OSLIB	"SUNW_OST_OSLIB"
305
306@ MSG_TKN_CAPABILITY	"CAPABILITY"
307@ MSG_TKN_MACHINE	"MACHINE"
308@ MSG_TKN_PLATFORM	"PLATFORM"
309@ MSG_TKN_ORIGIN	"ORIGIN"
310@ MSG_TKN_ISALIST	"ISALIST"
311@ MSG_TKN_OSNAME	"OSNAME"
312@ MSG_TKN_OSREL		"OSREL"
313@ MSG_TKN_HWCAP		"HWCAP"
314@ MSG_TKN_BINDINGS	"bindings"
315@ MSG_TKN_POSIX		"POSIX"
316@ MSG_TKN_DOTDOT	".."
317
318@ MSG_FMT_CWD		"."
319@ MSG_FMT_MSGFILE	"/usr/lib/locale/%s/LC_MESSAGES/%s.mo"
320
321@ MSG_FIL_RTLD		"ld.so.1"
322@ MSG_FIL_LIBC		"libc.so.1"
323
324@ MSG_SYM_ELFERRMSG	"elf_errmsg"
325@ MSG_SYM_ELFERRNO	"elf_errno"
326@ MSG_SYM_ELFPLTTRACE	"elf_plt_trace"
327@ MSG_SYM_ENVIRON	"_environ"
328
329@ MSG_SYM_LAPREINIT	"la_preinit"
330@ MSG_SYM_LAVERSION	"la_version"
331@ MSG_SYM_LAACTIVITY	"la_activity"
332@ MSG_SYM_LAOBJSEARCH	"la_objsearch"
333@ MSG_SYM_LAOBJOPEN	"la_objopen"
334@ MSG_SYM_LAOBJFILTER	"la_objfilter"
335@ MSG_SYM_LAOBJCLOSE	"la_objclose"
336@ MSG_SYM_LADYNDATA	"la_dyndata"
337
338@ MSG_SYM_START		"_START_"
339
340@ MSG_SPECFIL_DYNPLT	"dyn_plt(ld.so.1)"
341
342@ MSG_PTH_LDPROF	"/usr/lib/link_audit/ldprof.so.1"
343@ MSG_PTH_LDPROFSE	"/usr/lib/secure/ldprof.so.1"
344@ MSG_PTH_LIBSYS	"/usr/lib/libsys.so.1"
345@ MSG_PTH_RTLD		"/usr/lib/ld.so.1"
346@ MSG_PTH_LIB		"/lib"
347@ MSG_PTH_USRLIB	"/usr/lib"
348@ MSG_PTH_LIBSE		"/lib/secure"
349@ MSG_PTH_USRLIBSE	"/usr/lib/secure"
350@ MSG_PTH_DEVNULL	"/dev/null"
351@ MSG_PTH_CONFIG	"/var/ld/ld.config"
352@ MSG_PTH_VARTMP	"/var/tmp"
353
354@ MSG_ORG_CONFIG	"$ORIGIN/ld.config.%s"
355
356@ MSG_LD_AUDIT		"AUDIT"
357@ MSG_LD_AUDIT_ARGS	"AUDIT_ARGS"
358@ MSG_LD_BIND_LAZY	"BIND_LAZY"
359@ MSG_LD_BIND_NOW	"BIND_NOW"
360@ MSG_LD_BIND_NOT	"BIND_NOT"
361@ MSG_LD_BINDINGS	"BINDINGS"
362@ MSG_LD_CONFGEN	"CONFGEN"
363@ MSG_LD_CAP_FILES	"CAP_FILES"
364@ MSG_LD_CONFIG		"CONFIG"
365@ MSG_LD_DEBUG		"DEBUG"
366@ MSG_LD_DEBUG_OUTPUT	"DEBUG_OUTPUT"
367@ MSG_LD_DEMANGLE	"DEMANGLE"
368@ MSG_LD_FLAGS		"FLAGS"
369@ MSG_LD_HWCAP		"HWCAP"
370@ MSG_LD_INIT		"INIT"
371@ MSG_LD_LIBPATH	"LIBRARY_PATH"
372@ MSG_LD_LOADAVAIL	"LOADAVAIL"
373@ MSG_LD_LOADFLTR	"LOADFLTR"
374@ MSG_LD_MACHCAP	"MACHCAP"
375@ MSG_LD_NOAUDIT	"NOAUDIT"
376@ MSG_LD_NOAUXFLTR	"NOAUXFLTR"
377@ MSG_LD_NOBAPLT	"NOBAPLT"
378@ MSG_LD_NOCONFIG	"NOCONFIG"
379@ MSG_LD_NODIRCONFIG	"NODIRCONFIG"
380@ MSG_LD_NODIRECT	"NODIRECT"
381@ MSG_LD_NOENVCONFIG	"NOENVCONFIG"
382@ MSG_LD_NOENVIRON	"NOENVIRON"
383@ MSG_LD_NOFLTCONFIG	"NOFLTCONFIG"
384@ MSG_LD_NOLAZY		"NOLAZYLOAD"
385@ MSG_LD_NOOBJALTER	"NOOBJALTER"
386@ MSG_LD_NOPAREXT	"NOPAREXT"
387@ MSG_LD_NOUNRESWEAK	"NOUNRESWEAK"
388@ MSG_LD_NOVERSION	"NOVERSION"
389@ MSG_LD_PLATCAP	"PLATCAP"
390@ MSG_LD_PRELOAD	"PRELOAD"
391@ MSG_LD_PROFILE	"PROFILE"
392@ MSG_LD_PROFILE_OUTPUT	"PROFILE_OUTPUT"
393@ MSG_LD_SFCAP		"SFCAP"
394@ MSG_LD_SIGNAL		"SIGNAL"
395@ MSG_LD_TRACE_OBJS	"TRACE_LOADED_OBJECTS"
396@ MSG_LD_TRACE_OBJS_E	"TRACE_LOADED_OBJECTS_E"
397@ MSG_LD_TRACE_OBJS_A	"TRACE_LOADED_OBJECTS_A"
398@ MSG_LD_TRACE_PTHS	"TRACE_SEARCH_PATHS"
399@ MSG_LD_UNREF		"UNREF"
400@ MSG_LD_UNUSED		"UNUSED"
401@ MSG_LD_VERBOSE	"VERBOSE"
402@ MSG_LD_DEFERRED	"DEFERRED"
403@ MSG_LD_WARN		"WARN"
404
405@ MSG_LD_BRAND_PREFIX	"BRAND_"
406
407@ MSG_LC_ALL		"ALL="
408@ MSG_LC_MESSAGES	"MESSAGES="
409
410@ MSG_EMG_ENOMEM	"internal: Not enough space"
411
412@ MSG_DBG_PID		"%5.5d: "
413@ MSG_DBG_RESET		"---------\n"
414@ MSG_DBG_UNDEF		"debug: "
415@ MSG_DBG_LMID		"%s: "
416@ MSG_DBG_THREAD	"%d: "
417@ MSG_DBG_FILE		"%s.%5.5d"
418
419@ MSG_LMID_BASE		"BASE"
420@ MSG_LMID_LDSO		"LDSO"
421@ MSG_LMID_ALT		"ALT"
422
423@ MSG_LMID_FMT		"%s%d"
424@ MSG_LMID_MAXED	"ALTMAXEDOUT"
425
426@ MSG_AUD_PLTENTER	"la_pltenter"
427@ MSG_AUD_SYMBIND	"la_symbind"
428