text:
\section{Introduction}

In the present paper we investigate the finite-dimensional Lie groups
whose points are separated by the continuous homomorphisms
into groups of invertible elements of locally convex algebras
with continuous inversion.
We find that these are precisely the linear Lie groups,
that is,
the Lie groups which can be faithfully represented as matrix groups
(see Theorem~\ref{final} below).
And the structure of the linear groups is fairly well understood;
see for instance Hochschild's book~\cite{Ho65}.

This problem is motivated by recent developments in the Lie theory of infinite-dimensional
Lie groups modeled on locally convex spaces (cf.\ \cite{Mil83}, \cite{Bel06}, \cite{GN06}).
In this context, the unit groups of continuous
inverse algebras are the prototypical ``linear Lie groups''
(\cite{Gl02}), and it is a natural
question whether the notion of ``linearity'' in this general context
determines a larger class of finite-dimensional Lie groups than
the Lie groups of matrices.

The unital Banach algebras provide examples of locally convex algebras
with continuous inversion,
and in this special case we recover the characterization obtained
in the paper~\cite{LV94} for the Lie groups
whose uniformly continuous representations separate the points.
However, it is not clear to us if the approach used in \cite{LV94}
can be extended to non-normable algebras.
For one thing, one of the key tools used in the aforementioned paper
was a version of Lie's Theorem concerning
existence of weights for infinite-dimensional representations
of solvable Lie algebras.
And such a version is available as yet only for representations
by Banach space operators
(see \cite{GL73} and \cite{BS01}).
It is worth mentioning at this point that there exist large classes of
algebras with continuous inversion which are not Banach algebras,
for instance algebras of germs of holomorphic functions or
algebras of smooth matrix-valued functions on compact manifolds;
see Examples VIII.3 in \cite{Ne06} for more details and
additional examples.

Thus an alternative approach is needed when working with general
locally convex algebras with continuous inversion.
For this purpose we prove that the main result of \cite{Ti87}
actually holds true far beyond the setting of Banach algebras,
where it was originally discovered.
Loosely speaking, we show that if ${\mathfrak g}$ is a finite-dimensional
complex solvable Lie subalgebra of an algebra with continuous inversion
that satisfies an appropriate completeness condition,
then the closed unital associative subalgebra generated by ${\mathfrak g}$
is commutative modulo its (Jacobson) radical;
see Theorem~\ref{turovskii} below,
which is the main technical result we need here.
We obtain it by a method inspired from Turovskii's proof under the version
exposed in~\cite{BS01}.
However we emphasize that the present paper can be read
independently of that book, inasmuch as
several of the key tools developed in~\cite{BS01}
---notably the Kleinecke-Sirokov Theorem and
the spectral theory for several non-commuting variables---
are not readily available beyond the setting of normable algebras,
so that we now replaced them by arguments of a different type.
And we strove to take advantage of this situation in order to make the present
paper fairly self-contained.

In Section~2 we set up the necessary preliminaries
on algebras with continuous inversion
and on nilpotent elements in Lie subalgebras of associative algebras.
Section~3 concerns spectra of commutators, and includes in particular
a version of the Kleinecke-Sirokov Theorem holding for not necessarily normable algebras,
as well as a version of Rosenblum's theorem from \cite{Ro56} suitable for our purposes.
In Section~4 we prove the theorem on commutativity modulo the radical
(Theorem~\ref{turovskii}).
Finally, in Section~5 we obtain the main result of the present paper,
namely the characterization of the finite-dimensional Lie groups
whose points are separated by the homomorphisms into
groups of invertible elements of FC-complete algebras with continuous inversion.

\section{Preliminaries}

\subsection*{Preliminaries on algebras with continuous inversion}

\medbreak

\begin{notation}\label{bounded}
For an arbitrary unital complex associative algebra ${\mathcal A}$ we shall
use the following notation:
\begin{itemize}
\item[$\bullet$] ${\mathcal A}^\times=\{a\in{\mathcal A}\mid(\exists a^{-1}\in{\mathcal A})\quad
aa^{-1}=a^{-1}a={\bf 1}\}$;
\item[$\bullet$] the {\it spectrum} of any $a\in{\mathcal A}$ is
$\sigma_{{\mathcal A}}(a) = \sigma(a)
=\{\lambda\in{\mathbb C}\mid \lambda{\bf 1}-a\not\in{\mathcal A}^\times\}$.
\item[$\bullet$] the {\it spectral radius} of any $a\in{\mathcal A}$ is
$r_{{\mathcal A}}(a)=\sup\{\vert\lambda\vert\mid\lambda\in\sigma(a)\}\in[0,\infty]$;
\item[$\bullet$] the {\it center}
${\mathcal Z}_{{\mathcal A}}=\{a\in{\mathcal A}\mid(\forall b\in{\mathcal A})\quad ab=ba\}$;
\item[$\bullet$] ${\mathcal N}_{{\mathcal A}}=\{a\in{\mathcal A}\mid(\exists N\in{\mathbb N})\quad
a^N=0\}$;
\item[$\bullet$] ${\mathcal Q}_{{\mathcal A}}=\{a\in{\mathcal A}\mid\sigma(a)=\{0\}\} = \{ a \in {\mathcal A} \mid {\bf 1}+ {\mathbb C}\, a
\subseteq {\mathcal A}^\times\}$;
\item[$\bullet$] the {\it radical} ${\rm rad}\,{\mathcal A}=
\{a\in{\mathcal A}\mid(\forall b\in{\mathcal A})\quad {\bf 1}-ab\in{\mathcal A}^\times\} \subseteq {\mathcal Q}_{\mathcal A}$
\end{itemize}
Moreover, for any complex vector space ${\mathcal X}$ we denote by ${\mathcal L}({\mathcal X})$
the set of all linear maps from ${\mathcal X}$ into itself.
\end{notation}

\begin{definition}
A {\it continuous inverse algebra} (CIA for short) is
a Hausdorff locally convex unital algebra ${\mathcal A}$ whose unit group ${\mathcal A}^\times$ is
open and for which the inversion map ${\mathcal A}^\times \to {\mathcal A}, a \mapsto a^{-1}$
is continuous.

For any element $a$ of a complex CIA ${\mathcal A}$ the spectrum $\sigma(a)$ is a non-empty
compact subset of ${\mathbb C}\,$. Here the boundedness of the spectrum follows from
$$ r_{{\mathcal A}}(a) = (\sup \{ r > 0 \mid |z| \leq r \Rightarrow {\bf 1} + z a \in {\mathcal A}^\times\})^{-1} $$
and its closedness from the openness of the unit group ${\mathcal A}^\times$.

If, in addition, ${\mathcal A}$ is complete, then the same arguments
as for Banach algebras lead to a holomorphic functional calculus
(\cite{Wae67}, \cite{Gl02}).
Since completeness is in general not inherited
by quotients (\cite{Koe69}, \S 31.6), it is natural to consider for
CIAs the weaker condition that they are {\it FC-complete} in the sense
that they are closed under holomorphic functional calculus. This means
that for $a \in A$, any open neighborhood $U$ of $\sigma(a)$,
each holomorphic function $f \in {\mathcal O}(U)$ and any contour $\Gamma$
around $\sigma(a)$ in $U$, the integral
$$ f(a) := \frac{1}{2\pi i} \oint_\Gamma f(\zeta) (a - \zeta {\bf 1})^{-1}\, d\zeta, $$
which defines an element of the completion of ${\mathcal A}$, actually exists in ${\mathcal A}$.
\end{definition}

\begin{remark}\label{radical}
\normalfont
It is known that in every unital complex associative algebra ${\mathcal A}$
the radical ${\rm rad}\,{\mathcal A}$ is equal to the intersection of
all the maximal left ideals of ${\mathcal A}$,
and it is equal to the intersection of
all the maximal right ideals of ${\mathcal A}$ as well.
(See for instance Theorem~3.53 in Chapter~1 of \cite{He93}.)
In particular ${\rm rad}\,{\mathcal A}$ is a two-sided ideal of ${\mathcal A}$,
and we have ${\rm rad}\,({\mathcal A}/{\rm rad}\,{\mathcal A})=\{0\}$.
(See e.g., Theorem~3.63 in Chapter~1 of \cite{He93}.)

If ${\mathcal A}$ is a CIA, then the fact that its unit group is open implies that
every maximal left ideal of ${\mathcal A}$ is closed, and this is the case
with the right ideals as well (see e.g., Subsection~2.3 in Chapter~II of \cite{Wae67},
or Corollary~3.9 in Chapter~2 of~\cite{Co68}),
hence ${\rm rad}\,{\mathcal A}$ is a closed two-sided ideal of~${\mathcal A}$.
Then the quotient algebra ${\mathcal A}/{\rm rad}\,{\mathcal A}$ is in turn
a locally convex unital algebra with continuous inversion.
(See e.g., Subsection~2.2 in Chapter~II of~\cite{Wae67}
on quotients by closed ideals,
or Prop.~3.14 in Chapter~2 of~\cite{Co68}.)
\end{remark}

\begin{lemma}\label{radii}
If ${\mathcal A}$ is a commutative complex CIA,
then the spectral radius $r_{{\mathcal A}}$ is a continuous submultiplicative seminorm
and, in particular, ${\rm rad}\, {\mathcal A} = {\mathcal Q}_{{\mathcal A}}$
\end{lemma}

\begin{proof} (cf.\ \cite{Bi04}, Th.~1.7) The spectrum
$\hat {\mathcal A} := {\rm Hom}\,({\mathcal A}, {\mathbb C}\,)$ of ${\mathcal A}$ is a compact Hausdorff space and
the Gelfand transform
${\mathcal G} \: {\mathcal A} \to C(\hat A), a \mapsto \hat a, \hat a(\chi) := \chi(a)$
is a continuous homomorphism of complex unital locally convex algebras, satisfying
$\hat a(\hat {\mathcal A}) = \sigma(a)$ and hence
$\|\hat a\|_\infty = r_{{\mathcal A}}(a)$. From that it follows that
for each quasi-nilpotent element $a \in {\mathcal A}$ and $b \in {\mathcal A}$ we have
$r_{{\mathcal A}}(ab) \leq r_{{\mathcal A}}(a)r_{{\mathcal A}}(b)=0$, so that ${\bf 1} - ab \in {\mathcal A}^\times$,
which leads to $a \in {\rm rad}\, {\mathcal A}$.
This implies that ${\rm rad}\, {\mathcal A} \subseteq {\mathcal Q}_{\mathcal A} \subseteq {\rm rad}\, {\mathcal A}$,
which leads to the asserted equality.
\end{proof}

An early reference for our Lemma~\ref{radii} is  for instance \cite{Wae67}.
Another proof follows by
Lemma~II.9, Proposition~II.3, and Corollary~III.9 in \cite{KOO98}.

\begin{lemma}\label{subalgebras}
Let ${\mathcal A}$ be a complex CIA.
\begin{itemize}
\item[(1)] Each closed unital subalgebra ${\mathcal S}$ of ${\mathcal A}$ is a CIA.
If ${\mathcal A}$ is FC-complete, then so is ${\mathcal S}$.
\item[(2)] If ${\mathcal S} \leq {\mathcal A}$ is a maximal commutative subalgebra,
then ${\mathcal S}$ is unital, closed and equispectral,
i.e., for each $x \in {\mathcal S}$ we have
$\sigma_{{\mathcal A}}(x) = \sigma_{{\mathcal S}}(x)$.
\item[(3)] For each closed ideal ${\mathcal I} \trianglelefteq {\mathcal A}$ the quotient algebra
${\mathcal Q} := {\mathcal A}/{\mathcal I}$ is a CIA. If, in addition, ${\mathcal A}$ is FC-complete, and the quotient map
$q \: {\mathcal A} \to {\mathcal Q}$ satisfies $\sigma_{\mathcal A}(a) = \sigma_{{\mathcal Q}}(q(a))$ for each
$a \in A$, then ${\mathcal Q}$ is also FC-complete.
\end{itemize}
\end{lemma}

\begin{proof} (1) (See also Remarque~4.6 and Subsection~4.3 in Chapter~2 of \cite{Wae67}.)

If $a \in {\mathcal S}$ satisfies $r_{{\mathcal A}}(a) < 1$, then ${\bf 1} - a$ is invertible and
the Neumann series $\sum_{n = 0}^\infty a^n$ converges to $({\bf 1} - a)^{-1}$
(\cite{Gl02}). Since
${\mathcal S}$ is closed, $({\bf 1} -a)^{-1} \in {\mathcal S}$, so that ${\mathcal S}^\times$ is a neighborhood of
${\bf 1}$ in ${\mathcal S}$, hence open.
The continuity of the inversion in ${\mathcal S}$ follows from the corresponding
property of ${\mathcal A}$.

If, in addition, ${\mathcal A}$ is FC-complete and $s \in {\mathcal S}$, then
$\sigma_{\mathcal S}(s) \supseteq \sigma_{\mathcal A}(s)$, so that each contour around
$\sigma_{{\mathcal S}}(s)$ also surrounds $\sigma_{\mathcal A}(s)$.
Now for any holomorphic function $f$ on a neighborhood
of $\sigma_{{\mathcal S}}(s)$ the integral
$$ f(s) :=  \frac{1}{2\pi i}\oint_\Gamma f(\zeta) (s - \zeta {\bf 1})^{-1}\, d\zeta $$
defines an element of ${\mathcal A}$. Since $(s - \zeta {\bf 1})^{-1} \in {\mathcal S}$ for each $\zeta$,
the closedness of ${\mathcal S}$ yields $f(s) \in {\mathcal S}$. This shows that ${\mathcal S}$ is FC-complete.

(2) Since closures of commutative subalgebras are commutative subalgebras,
the maximality of ${\mathcal S}$ implies its closedness. It trivially implies ${\bf 1} \in {\mathcal S}$.
Moreover, for each $x \in {\mathcal S}$ we have
$(x - \lambda {\bf 1})^{-1} \in {\mathcal S}$ whenever $x - \lambda {\bf 1}$ is invertible
in ${\mathcal A}$ because $(x - \lambda {\bf 1})^{-1}$ commutes with all elements of ${\mathcal S}$.
This leads to $r_{{\mathcal A}}(x) = r_{{\mathcal S}}(x)$.

(3) Since $q({\mathcal A}^\times) \subseteq {\mathcal Q}^\times$ is an open subset of ${\mathcal Q}$,
the unit group ${\mathcal Q}^\times$ is open. The continuity of the inversion of ${\mathcal Q}$
follows from its continuity in ${\bf 1}$ and
the continuity of the map ${\mathcal A}^\times \to {\mathcal Q}^\times, a \mapsto q(a)^{-1} = q(a^{-1})$,
because $q$ is an open map.

For each $a \in A$ we have $\sigma_{{\mathcal A}}(a)= \sigma_{\mathcal Q}(q(a))$.
For any open neighborhood of $\sigma_{{\mathcal Q}}(q(a))$,
each holomorphic function $f \in {\mathcal O}(U)$, and any contour around $\sigma(a)$ in $U$
the FC-completeness implies that the integral
$$ f(a) :=  \frac{1}{2\pi i}\oint_\Gamma f(\zeta) (a - \zeta {\bf 1})^{-1}\, d\zeta $$
exists in ${\mathcal A}$. We conclude that the integral
$$ q(f(a))
=  \frac{1}{2\pi i}\oint_\Gamma f(\zeta) q(a - \zeta {\bf 1})^{-1}\, d\zeta
=  \frac{1}{2\pi i}\oint_\Gamma f(\zeta) \big(q(a) - \zeta {\bf 1}\big)^{-1}\, d\zeta = f(q(a)) $$
exists in ${\mathcal Q}$. Hence ${\mathcal Q}$ is FC-complete.
\end{proof}

\subsection*{Algebraic preliminaries}
In this subsection we turn to the purely algebraic part of the preliminaries
we need for our main results. In particular, we
prove a suitable generalization of Theorem~2 in \S 28 of \cite{BS01}.

\begin{proposition}\label{theorem2}
Let ${\mathcal X}$ be a complex vector space, ${\mathfrak g}$ a finite-dimensional
solvable Lie subalgebra of ${\mathcal L}({\mathcal X})$,
and ${\mathfrak h}$ a Cartan subalgebra of ${\mathfrak g}$.
Denote by ${\mathfrak g}^\alpha$, $\alpha\in R$, the family of root spaces of
${\mathfrak g}$ corresponding to the set $R$ of non-zero roots,
and assume that ${\mathfrak g}^\alpha$ consists of nilpotent elements for every $\alpha\in R$.
Then ${\mathcal N}_{{\mathcal L}({\mathcal X})}\cap{\mathfrak g}$ is an ideal of ${\mathfrak g}$.
\end{proposition}

\begin{proof}
The proof has two steps.

{\bf Step 1:} If ${\mathfrak g}$ is a nilpotent Lie algebra
then the desired conclusion follows by precisely the same reasoning
as in Step 1 of the proof of Theorem~2 in \S 28 of \cite{BS01}.
Specifically, we shall prove the desired conclusion by induction on
$\dim{\mathfrak g}$.
The assertion is clear if $\dim{\mathfrak g}=1$.

Now assume that $\dim{\mathfrak g}>1$ and ${\mathcal N}_{{\mathcal L}({\mathcal X})}\cap{\mathfrak g}\ne\{0\}$.
Since nilpotent elements are always polynomially central
(Definition~2 in \S 16 of \cite{BS01}),
it follows by Theorem~1 in \S 18 of \cite{BS01}, applied with $I = {\mathfrak g}$
(see also \cite{Sa96}), that
there exists $Y\in{\mathcal N}_{{\mathcal L}({\mathcal X})}\cap{\mathfrak g}$
such that $Y\ne0$ and $[Y,T]=0$ for all $T\in{\mathfrak g}$.
Let $m\ge1$ with $Y^{m-1}\ne0=Y^m$,
and denote ${\mathcal X}_k={\rm Ker}\,(Y^k)$ for $k=0,\dots,m$.
Since $Y$ belongs to the center of ${\mathfrak g}$, it follows that
$\{0\}={\mathcal X}_0\subseteq\cdots\subseteq{\mathcal X}_m={\mathcal X}$ is a nest of
invariant subspaces for ${\mathfrak g}$.
In particular, there exist representations
$$\rho_k\colon{\mathfrak g}\to{\mathcal L}({\mathcal X}_k/{\mathcal X}_{k-1}),\quad
\rho_k(T)(x+{\mathcal X}_{k-1})=Tx+{\mathcal X}_{k-1}
\text{\ \ for\ all\ \ } T\in{\mathfrak g}\text{\ and\ }x\in{\mathcal X}_k,$$
for $k=0,\dots,m$.
It is easy to see that we have
\begin{equation}\label{intersection}
{\mathcal N}_{{\mathcal L}({\mathcal X})}\cap{\mathfrak g}
=\bigcap_{k=0}^n\rho_k^{-1}({\mathcal N}_{{\mathcal L}({\mathcal X}_k/{\mathcal X}_{k-1})})
=\bigcap_{k=0}^n\rho_k^{-1}({\mathcal N}_{{\mathcal L}({\mathcal X}_k/{\mathcal X}_{k-1})}\cap\rho_k({\mathfrak g})),
\end{equation}
that is, $T\in{\mathfrak g}$ is nilpotent if and only if each
$\rho_k(T)\in{\mathcal L}({\mathcal X}_k/{\mathcal X}_{k-1})$ is nilpotent for $k=0,\dots,m$.

On the other hand $0\ne Y\in\bigcap\limits_{k=0}^m{\rm Ker}\,\rho_k$,
hence for each $k$ we have $\dim\rho_k({\mathfrak g})<\dim{\mathfrak g}$.
Then the induction hypothesis shows that
${\mathcal N}_{{\mathcal L}({\mathcal X}_k/{\mathcal X}_{k-1})}\cap\rho_k({\mathfrak g})$ is an ideal of $\rho_k({\mathfrak g})$.
Now \eqref{intersection} implies that ${\mathcal N}_{{\mathcal L}({\mathcal X})}\cap{\mathfrak g}$ is an
ideal of ${\mathfrak g}$ since pull-backs and intersections of ideals
are again ideals.

{\bf Step 2:} We now proceed with the proof in the general case.
Denote ${\mathfrak g}_+:=\bigoplus\limits_{\alpha\in R}{\mathfrak g}^\alpha$
so that the generalized root space decomposition of ${\mathfrak g}$
with respect to the Cartan subalgebra ${\mathfrak h}$
leads to the Fitting decomposition ${\mathfrak g}={\mathfrak h}\dotplus{\mathfrak g}_+$.
Next denote
${\mathfrak g}_0=\{T\in{\mathfrak g}\mid\mathop{{\rm ad}}\nolimits_{{\mathfrak g}}T\colon{\mathfrak g}\to{\mathfrak g}\text{ is nilpotent}\}$.
Since ${\mathfrak g}$ is a solvable Lie algebra, it easily follows by the Lie theorem
on simultaneous triangularization of solvable Lie algebras of matrices
that ${\mathfrak g}_0$ is an ideal of ${\mathfrak g}$.
Moreover, ${\mathfrak g}_0$ is a nilpotent Lie algebra and we have
$$\bigcup\limits_{\alpha\in R}{\mathfrak g}^\alpha
\subseteq{\mathcal N}_{{\mathcal L}({\mathcal X})}\cap{\mathfrak g}\subseteq{\mathfrak g}_0.$$
In particular Step 1 of the proof
shows that ${\mathcal N}_{{\mathcal L}({\mathcal X})}\cap{\mathfrak g}$ is an ideal of ${\mathfrak g}_0$.
To prove that ${\mathcal N}_{{\mathcal L}({\mathcal X})}\cap{\mathfrak g}$ is an ideal of ${\mathfrak g}$
it remains to check that
$[{\mathfrak h},{\mathcal N}_{{\mathcal L}({\mathcal X})}\cap{\mathfrak g}]\subseteq{\mathcal N}_{{\mathcal L}({\mathcal X})}\cap{\mathfrak g}$.

To this end note that since we have the inclusion of vector subspaces
${\mathfrak g}_+\subseteq{\mathcal N}_{{\mathcal L}({\mathcal X})}\cap{\mathfrak g}$
and ${\mathfrak g}={\mathfrak h}\dotplus{\mathfrak g}_+$
it follows that
${\mathcal N}_{{\mathcal L}({\mathcal X})}\cap{\mathfrak g}=({\mathcal N}_{{\mathcal L}({\mathcal X})}\cap{\mathfrak h})\dotplus{\mathcal C}_{{\mathfrak h}}$.
Since ${\mathfrak g}={\mathfrak h}\dotplus{\mathfrak g}_+$ it then follows that
\begin{equation}\label{three}
[{\mathfrak h},{\mathcal N}_{{\mathcal L}({\mathcal X})}\cap{\mathfrak g}]\subseteq
[{\mathfrak h},{\mathcal N}_{{\mathcal L}({\mathcal X})}\cap{\mathfrak h}]+[{\mathfrak h},{\mathfrak g}_+].\end{equation}
Now $[{\mathfrak h},{\mathcal N}_{{\mathcal L}({\mathcal X})}\cap{\mathfrak h}]\subseteq{\mathcal N}_{{\mathcal L}({\mathcal X})}\cap{\mathfrak h}$
by Step~1 of the proof,
since ${\mathfrak h}$ is a nilpotent Lie algebra.
Moreover, $[{\mathfrak h},{\mathfrak g}_+]\subseteq{\mathfrak g}_+\subseteq{\mathcal N}_{{\mathcal L}({\mathcal X})}\cap{\mathfrak g}$,
where the latter inclusion follows by the hypothesis since
we saw that ${\mathcal N}_{{\mathcal L}({\mathcal X})}\cap{\mathfrak g}$ is a vector space.
Thus \eqref{three} shows that
$[{\mathfrak g},{\mathcal N}_{{\mathcal L}({\mathcal X})}\cap{\mathfrak g}]\subseteq{\mathcal N}_{{\mathcal L}({\mathcal X})}\cap{\mathfrak g}$,
and the proof is complete.
\end{proof}

\begin{lemma}\label{lemma5}
Assume that ${\mathcal A}$ is a complex unital associative algebra
and ${\mathfrak g}$ a finite-dimensional Lie subalgebra of ${\mathcal A}$
such that ${\mathfrak g}\subseteq{\mathcal N}_{{\mathcal A}}$.
Then there exists an integer $m\ge1$ such that
$a_1\cdots a_m=0$ for all $a_1,\dots,a_m\in{\mathfrak g}$.
\end{lemma}

\begin{proof} Since $\mathop{{\rm ad}}\nolimits a$ is a nilpotent operator on ${\mathcal A}$ for each $a \in {\mathfrak g}$,
Engel's Theorem implies that ${\mathfrak g}$ is a nilpotent Lie algebra.
In view of the Poincar\'e-Birkhoff-Witt Theorem,
the unital associative subalgebra ${\mathcal A}({\mathfrak g})$ generated by ${\mathfrak g}$
is finite-dimensional. Then Lie's Theorem, applied to the
left regular representation of ${\mathfrak g}$ on ${\mathcal A}({\mathfrak g})$ implies that
the associative subalgebra of ${\mathcal A}$ generated by ${\mathfrak g}$ consists of
nilpotent elements.
\end{proof}

\section{Spectra of commutators}

\begin{proposition}\label{fine}
Let ${\mathcal A}$ be a complex FC-complete CIA.
Assume that $a,b,c\in{\mathcal A}$ satisfy
$[a,b] = ab-ba=c$, $ac=ca$, and $bc=cb$.
Then $\sigma_{{\mathcal A}}(c)=\{0\}$.
\end{proposition}

\begin{proof} Since ${\mathcal A}$ is FC-complete, it has an exponential
function $\exp \: {\mathcal A} \to {\mathcal A}^\times, x \mapsto e^x$, defined by
the holomorphic functional calculus.
Define
$$f\colon{\mathbb C}\to{\mathcal A},\quad f(t)=e^{ta}be^{-ta}.$$
Then
$f$ is holomorphic and we have
$f(0)=b$ and $f'(t)=ae^{ta}be^{-ta}-e^{ta}bae^{-ta}=e^{ta}ce^{-ta}=c$
for all $t\in{\mathbb C}$, because of the assumption $ac=ca$.
This implies that
$e^{ta}be^{-ta}=b+tc$ for each $t \in {\mathbb C}\,$, and hence that
\begin{equation*}
\sigma_{{\mathcal A}}(b)=\sigma_{{\mathcal A}}(b+tc) \quad \mbox{ for each} \quad t \in {\mathbb C}\,.
\end{equation*}

As $b$ and $c$ commute,
$$ |t|\sigma(c) = \sigma(tc) = \sigma(tc + b - b)
\subseteq \sigma(tc+b) - \sigma(b)
= \sigma(b) - \sigma(b). $$
Since $\sigma(b)$ is bounded, we obtain for $|t| \to \infty$
the inclusion $\sigma(c) \subseteq \{0\}$. The lemma now follows
from the non-emptyness of the spectrum.
\end{proof}

\begin{lemma} \label{center}
For each complex FC-complete CIA ${\mathcal A}$ we have ${\mathcal Z}_{\mathcal A}\cap{\mathcal Q}_{\mathcal A}\subseteq{\rm rad}\,{\mathcal A}$.
\end{lemma}

\begin{proof} Let $c\in{\mathcal Z}_{\mathcal A}\cap{\mathcal Q}_{\mathcal A}$ and $b\in{\mathcal A}$ arbitrary.
We have to show that ${\bf 1}-bc\in{\mathcal A}^\times$.
To this end, let ${\mathcal A}_0$ be a maximal commutative subalgebra of ${\mathcal A}$
containing both $b$ and $c$. Then ${\mathcal A}_0$ is a closed unital subalgebra
of ${\mathcal A}$, hence an FC-complete CIA with
$r_{{\mathcal A}}(a) = r_{{\mathcal A}_0}(a)$ (Lemma~\ref{subalgebras}).
In particular $r_{{\mathcal A}}(bc)=r_{{\mathcal A}_0}(bc)\le r_{{\mathcal A}_0}(b)r_{{\mathcal A}_0}(c)=0$,
where the inequality follows by Lemma~\ref{radii}.
Thus $\sigma_{{\mathcal A}}(bc)=\{0\}$, and then ${\bf 1}-bc\in{\mathcal A}^\times$, as desired.
\end{proof}

\begin{proposition}\label{rosenblum}
Let ${\mathcal A}$ be a complex FC-complete CIA.
Then for all $a_1,a_2\in{\mathcal A}$ the operator
$$\Delta\colon{\mathcal A}\to{\mathcal A},\quad x\mapsto a_1x-xa_2,$$
satisfies
$\sigma_{{\mathcal L}({\mathcal A})}(\Delta)\subseteq\sigma_{{\mathcal A}}(a_1)-\sigma_{{\mathcal A}}(a_2)$.
\end{proposition}

\begin{proof}
The method of proof used in Section~3 of \cite{Ro56}
works in the present setting as well.
Specifically, let $\lambda\in{\mathbb C}$
such that $\lambda\not\in\sigma_{{\mathcal A}}(a_1)-\sigma_{{\mathcal A}}(a_2)$.
We are going to prove that
$\lambda\not\in\sigma_{{\mathcal L}({\mathcal A})}(\Delta)$, either.
Since both $\sigma_{{\mathcal A}}(a_1)$ and $\sigma_{{\mathcal A}}(a_2)$ are compact subsets
of ${\mathbb C}\,$, there exist two open subsets
$U_1$ and $U_2$ of ${\mathbb C}$ such that
$\sigma_{{\mathcal A}}(a_j)\subseteq U_j$ for $j=1,2$
and $\overline{U}_1\cap(\lambda+\overline{U}_2)=\emptyset$.

Now let $\Gamma\subseteq U_2$ be a piecewise smooth contour
surrounding $\sigma_{{\mathcal A}}(a_2)$.
Then for every $z\in\Gamma$ we have $\lambda+z\not\in\sigma_{{\mathcal A}}(a_1)$,
hence we can define a linear map from ${\mathcal A}$ into itself by
$$T\colon{\mathcal A}\to{\mathcal A},\quad
Tx=\frac{1}{2\pi{\rm i}}\oint\limits_{\Gamma}
((\lambda+z){\bf 1}-a_1)^{-1}x(z{\bf 1}-a_2)^{-1}{\rm d} z.$$
We now have
\begin{eqnarray*}
T(\lambda {\bf 1}- \Delta)x
&=& T(\lambda x - a_1 x + x a_2) \\
&=& \frac{1}{2\pi i} \oint_\Gamma ((\lambda + z{\bf 1}) - a_1)^{-1}
(\lambda x - a_1 x + x a_2) (z{\bf 1} - a_2)^{-1} {\rm d} z  \\
&=& \frac{1}{2\pi i} \oint_\Gamma ((\lambda + z{\bf 1}) - a_1)^{-1}
\big(((\lambda +z){\bf 1} - a_1)x + x(a_2 - z {\bf 1})\big) (z{\bf 1} - a_2)^{-1} {\rm d} z  \\
&=& \frac{1}{2\pi i} \oint_\Gamma x (z{\bf 1} - a_2)^{-1} {\rm d} z
- \frac{1}{2\pi i} \oint_\Gamma ((\lambda + z{\bf 1}) - a_1)^{-1} x{\rm d} z  \\
&=& x\frac{1}{2\pi i} \oint_\Gamma (z{\bf 1} - a_2)^{-1} {\rm d} z
- \frac{1}{2\pi i} \oint_\Gamma ((\lambda + z{\bf 1}) - a_1)^{-1} {\rm d} z \cdot x  \\
&=& x\cdot {\bf 1} - {\bf 0} \cdot x = x
\end{eqnarray*}
and
\begin{eqnarray*}
(\lambda {\bf 1}- \Delta)Tx
&=& (\lambda Tx - a_1 Tx + Tx a_2) \\
&=& \frac{1}{2\pi i} \oint_\Gamma (\lambda{\bf 1} - a_1)((\lambda + z{\bf 1}) - a_1)^{-1} x
 (z{\bf 1} - a_2)^{-1} {\rm d} z  \\
&& + \frac{1}{2\pi i} \oint_\Gamma ((\lambda + z{\bf 1}) - a_1)^{-1} x(z{\bf 1} - a_2)^{-1} a_2 {\rm d} z  \\
&=& \frac{1}{2\pi i} \oint_\Gamma ((\lambda + z - z){\bf 1} - a_1) ((\lambda + z{\bf 1}) - a_1)^{-1}
x (z{\bf 1} - a_2)^{-1} {\rm d} z  \\
&& + \frac{1}{2\pi i} \oint_\Gamma ((\lambda + z{\bf 1}) - a_1)^{-1}
x(z{\bf 1} - a_2)^{-1} (a_2 - z {\bf 1} + z {\bf 1}){\rm d} z  \\
&=& x\frac{1}{2\pi i} \oint_\Gamma (z{\bf 1} - a_2)^{-1} {\rm d} z
+ \frac{1}{2\pi i} \oint_\Gamma ((\lambda + z{\bf 1}) - a_1)^{-1} {\rm d} z \cdot x \\
&=& x\cdot {\bf 1} + {\bf 0} \cdot x = x.
\end{eqnarray*}
This shows that $T$ is an inverse of $\lambda{\bf 1} - \Delta$, so that
$\lambda\in{\mathbb C}\setminus\sigma_{{\mathcal L}({\mathcal A})}(\Delta)$.
\end{proof}

\begin{corollary}\label{nil}
Let ${\mathcal A}$ be a complex FC-complete CIA.
Assume that $a,b\in{\mathcal A}$ satisfy the condition
$(\mathop{{\rm ad}}\nolimits_{{\mathcal A}}a-\lambda)^mb=0$ for some $\lambda\in{\mathbb C}\setminus\{0\}$
and $m\ge1$,
where $\mathop{{\rm ad}}\nolimits_{{\mathcal A}}a\colon{\mathcal A}\to{\mathcal A}$, $(\mathop{{\rm ad}}\nolimits_{{\mathcal A}}a)x=ax-xa$.
Then for every integer  $N>2r_{{\mathcal A}}(a)/\vert\lambda\vert$
we have $b^N=0$.
\end{corollary}

\begin{proof}
Since $\Delta:=\mathop{{\rm ad}}\nolimits_{{\mathcal A}}a\colon{\mathcal A}\to{\mathcal A}$ is a derivation of ${\mathcal A}$,
it follows by induction on $k$ that for all integers $n,k\ge1$,
all $\lambda_1,\dots,\lambda_k\in{\mathbb C}$,
and all $x_1,\dots,x_k\in{\mathcal A}$
we have
$$(\Delta-\lambda_1-\cdots-\lambda_k)^n(x_1\cdots x_k)
=\sum_{j_1+\cdots+j_k=n}\frac{n!}{j_1!\cdots j_k!}
((\Delta-\lambda_1)^{j_1}x_1)\cdots((\Delta-\lambda_k)^{j_k}x_k).$$
Thence $(\Delta-k\lambda)^n(b^k)=0$ whenever $k\ge1$
and $n>km$.

This shows that if $N\ge1$ and $b^N\ne0$,
then $N\lambda\in\sigma_{{\mathcal L}({\mathcal A})}(\Delta)$.
Consequently $N\lambda\in\sigma_{{\mathcal A}}(a)-\sigma_{{\mathcal A}}(a)$ by
Proposition~\ref{rosenblum}, whence necessarily
$N\vert\lambda\vert\le 2r_{{\mathcal A}}(a)$.
\end{proof}

\section{Commutativity modulo the radical}

The following statement is a version of Lemma~1 in \S 24 of \cite{BS01}.

\begin{lemma}\label{lemma1}
Let ${\mathcal A}$ be a unital complex FC-complete CIA with  ${\rm rad}\,{\mathcal A}=\{0\}$.
Assume that ${\mathfrak g}$ is a complex Lie subalgebra of ${\mathcal A}$
such that the closed unital associative subalgebra generated by ${\mathfrak g}$
is equal to ${\mathcal A}$,
and let ${\mathfrak j}$ be a finite-dimensional ideal of ${\mathfrak g}$
such that $(\mathop{{\rm ad}}\nolimits_{{\mathfrak g}}a)|_{{\mathfrak j}}\colon{\mathfrak j}\to{\mathfrak j}$
is a nilpotent map for every $a\in{\mathfrak g}$.
Then $[{\mathfrak g},{\mathfrak j}]=\{0\}$.
\end{lemma}

\begin{proof}
We essentially
follow the lines of the proof of Lemma~1 in \S 24 of \cite{BS01},
by using the previous Proposition~\ref{fine} instead
of the Kleinecke-Sirokov Theorem.
Since $\dim{\mathfrak j}<\infty$, it follows from Lemma~\ref{lemma5} that
there exists some $m\ge1$ such that
\begin{equation}\label{m}
(\forall a_1,\dots,a_m\in{\mathfrak g})(\forall a_0\in{\mathfrak j})\quad
(\mathop{{\rm ad}}\nolimits_{{\mathfrak g}}a_m)\cdots(\mathop{{\rm ad}}\nolimits_{{\mathfrak g}}{a_1})a_0=0.
\end{equation}
We shall prove that if $m\ge 2$ then \eqref{m} also holds
with $m-1$ instead of $m$,
and this will conclude the proof.

To this end let $a_1,\dots,a_{m-1}\in{\mathfrak g}$ and $a_0\in{\mathfrak j}$ arbitrary,
and denote $y=(\mathop{{\rm ad}}\nolimits_{{\mathfrak g}}a_{m-1})\cdots(\mathop{{\rm ad}}\nolimits_{{\mathfrak g}}a_1)a_0\in{\mathfrak j}$.
We have to check that $y=0$.
By \eqref{m} we have
$[a_m,y]=(\mathop{{\rm ad}}\nolimits_{{\mathfrak g}}a_m)(\mathop{{\rm ad}}\nolimits_{{\mathfrak g}}a_{m-1})\cdots(\mathop{{\rm ad}}\nolimits_{{\mathfrak g}}{a_1})a_0=0$
for all $a_m\in{\mathfrak g}$.
Since ${\mathcal A}$ is generated by ${\mathfrak g}$ it then follows that
$ay=ya$ for all $a\in{\mathcal A}$, that is, $y\in{\mathcal Z}_{{\mathcal A}}$.

On the other hand, note that $y=[a_{m-1},u]$,
where $u=(\mathop{{\rm ad}}\nolimits_{{\mathfrak g}}a_{m-2})\cdots(\mathop{{\rm ad}}\nolimits_{{\mathfrak g}}a_1)a_0$
if $m\ge 3$ and $u=a_0$ if $m=2$.
Since $y$ commutes with every element in ${\mathcal A}$,
we have in particular $ya_{m-1}=a_{m-1}y$ and $yu=uy$,
hence Proposition~\ref{fine} shows that $\sigma(y)=\{0\}$.
Consequently, by Lemma~\ref{center}, we get
$y\in{\mathcal Q}_{{\mathcal A}}\cap{\mathcal Z}_{{\mathcal A}}\subseteq{\rm rad}\,{\mathcal A}=\{0\}$,
and the proof ends.
\end{proof}

Here is a suitable version of Proposition~1 in \S 24 of \cite{BS01}.

\begin{proposition}\label{proposition1}
Let ${\mathcal A}$ be a complex FC-complete CIA.
Assume that ${\mathfrak g}$ is a complex Lie subalgebra of ${\mathcal A}$
such that the closed unital associative subalgebra generated by ${\mathfrak g}$
equals ${\mathcal A}$,
and let ${\mathfrak j}$ be a finite-dimensional solvable ideal of ${\mathfrak g}$.
Then ${\mathcal N}_{{\mathcal A}}\cap{\mathfrak j}$ is an ideal of ${\mathfrak g}$ and
${\mathcal N}_{{\mathcal A}}\cap{\mathfrak j}\subseteq{\rm rad}\,{\mathcal A}$.
\end{proposition}

\begin{proof}
We follow the lines of the proof of Proposition~1 in \S 24 of \cite{BS01}.
Thus, let $\rho\colon{\mathcal A}\to{\mathcal L}({\mathcal A})$ be the regular representation of ${\mathcal A}$.
Then $\rho({\mathfrak g})$ is a Lie subalgebra of ${\mathcal L}({\mathcal A})$
and $\rho({\mathfrak j})$ is a finite-dimensional solvable ideal of $\rho({\mathfrak g})$.

On the other hand, let ${\mathfrak h}$ be a Cartan subalgebra of ${\mathfrak j}$,
$({\mathfrak j}^\alpha)_{\alpha\in R}$ the root spaces of
${\mathfrak j}$ corresponding to the set $R$ of non-zero roots,
and ${\mathfrak j}={\mathfrak h}\dotplus{\mathfrak g}_+$ the corresponding Fitting decomposition,
as in Proposition~\ref{theorem2} and its proof.
It follows by Corollary~\ref{nil} that for every root $\alpha\in R$
we have ${\mathfrak j}^\alpha\subseteq{\mathcal N}_{{\mathcal A}}$,
and hence $\rho({\mathfrak j}^\alpha)\subseteq{\mathcal N}_{{\mathcal L}({\mathcal A})}$.
Now note that $\rho\colon{\mathcal A}\to{\mathcal L}({\mathcal A})$ is a faithful representation,
hence $\rho({\mathfrak h})$ is a Cartan subalgebra of $\rho({\mathfrak j})$ and
$(\rho({\mathfrak j}^\alpha))_{\alpha\in R}$ are the corresponding root spaces.
Also, $\rho({\mathcal N}_{{\mathcal A}})\subseteq{\mathcal N}_{{\mathcal L}({\mathcal A})}$.
Thus, we can apply Proposition~\ref{theorem2} to deduce that
$\rho({\mathcal N}_{{\mathcal A}}\cap{\mathfrak j})$ is an ideal of $\rho({\mathfrak j})$.
Since $\rho$ is faithful, this shows that
${\mathcal N}_{{\mathcal A}}\cap{\mathfrak j}$ is an ideal of ${\mathfrak j}$.

Now, to prove that ${\mathcal N}_{{\mathcal A}}\cap{\mathfrak j}$ is even an ideal of ${\mathfrak g}$,
it suffices to check that $[a,{\mathcal N}_{{\mathcal A}}\cap{\mathfrak j}]\subseteq{\mathcal N}_{{\mathcal A}}$
for arbitrary $a\in{\mathfrak g}$.
To this end, denote ${\mathfrak j}_1={\mathbb C}a+{\mathfrak j}$,
which is a finite-dimensional solvable Lie subalgebra of ${\mathfrak g}$
since ${\mathfrak j}$ is a finite-dimensional solvable ideal.
Then the preceding argument shows that ${\mathcal N}_{{\mathcal A}}\cap{\mathfrak j}_1$
is an ideal of ${\mathfrak j}_1$.
If it happens that ${\mathcal N}_{{\mathcal A}}\cap{\mathfrak j}_1={\mathcal N}_{{\mathcal A}}\cap{\mathfrak j}$,
then $[a,{\mathcal N}_{{\mathcal A}}\cap{\mathfrak j}]=[a,{\mathcal N}_{{\mathcal A}}\cap{\mathfrak j}_1]\subseteq
{\mathcal N}_{{\mathcal A}}\cap{\mathfrak j}_1={\mathcal N}_{{\mathcal A}}\cap{\mathfrak j}$ and we are done.
Now assume that ${\mathcal N}_{{\mathcal A}}\cap{\mathfrak j}_1\ne{\mathcal N}_{{\mathcal A}}\cap{\mathfrak j}$
and pick $b\in({\mathcal N}_{{\mathcal A}}\cap{\mathfrak j}_1)\setminus{\mathfrak j}$.
Then ${\mathfrak j}_1={\mathbb C}b+{\mathfrak j}=({\mathcal N}_{{\mathcal A}}\cap{\mathfrak j}_1)+{\mathfrak j}$, hence
$$\dim(({\mathcal N}_{{\mathcal A}}\cap{\mathfrak j}_1)/({\mathcal N}_{{\mathcal A}}\cap{\mathfrak j}))
=\dim(({\mathcal N}_{{\mathcal A}}\cap{\mathfrak j}_1)/(({\mathcal N}_{{\mathcal A}}\cap{\mathfrak j}_1)\cap{\mathfrak j}))
=\dim((({\mathcal N}_{{\mathcal A}}\cap{\mathfrak j}_1)+{\mathfrak j})/{\mathfrak j})
=\dim({\mathfrak j}_1/{\mathfrak j})\le1.$$
Since $b\in({\mathcal N}_{{\mathcal A}}\cap{\mathfrak j}_1)\setminus({\mathcal N}_{{\mathcal A}}\cap{\mathfrak j})$,
it then follows that
${\mathcal N}_{{\mathcal A}}\cap{\mathfrak j}_1={\mathbb C}b+({\mathcal N}_{{\mathcal A}}\cap{\mathfrak j})$.
Now the finite-dimensional Lie algebra
${\mathcal N}_{{\mathcal A}}\cap{\mathfrak j}_1$ consists of nilpotent elements, hence it is nilpotent.
And every hyperplane subalgebra of a finite-dimensional nilpotent Lie algebra
is an ideal,
so that ${\mathcal N}_{{\mathcal A}}\cap{\mathfrak j}$ is an ideal of ${\mathcal N}_{{\mathcal A}}\cap{\mathfrak j}_1$.
Since ${\mathcal N}_{{\mathcal A}}\cap{\mathfrak j}$ is an ideal of ${\mathfrak j}$ it then follows that
$$[a,{\mathcal N}_{{\mathcal A}}\cap{\mathfrak j}]\subseteq[{\mathfrak j}+({\mathcal N}_{{\mathcal A}}\cap{\mathfrak j}_1),{\mathcal N}_{{\mathcal A}}\cap{\mathfrak j}]
\subseteq({\mathcal N}_{{\mathcal A}}\cap{\mathfrak j})+({\mathcal N}_{{\mathcal A}}\cap{\mathfrak j})={\mathcal N}_{{\mathcal A}}\cap{\mathfrak j}.$$
Since $a\in{\mathfrak g}$ is arbitrary, this completes the proof of the fact that
${\mathcal N}_{{\mathcal A}}\cap{\mathfrak j}$ is an ideal of ${\mathfrak g}$.

It remains to show that ${\mathcal N}_{{\mathcal A}}\cap{\mathfrak j}\subseteq{\rm rad}\,{\mathcal A}$.
By Lemma~\ref{lemma5}, it follows that there exists an integer $m\ge1$
such that the product of any $m$ elements in ${\mathcal N}_{{\mathcal A}}\cap{\mathfrak j}$ vanishes.
On the other hand, we have already seen that ${\mathcal N}_{{\mathcal A}}\cap{\mathfrak j}$ is an ideal
of ${\mathfrak g}$, that is,
$[{\mathcal N}_{{\mathcal A}}\cap{\mathfrak j},{\mathfrak g}]\subseteq{\mathfrak g}$.
This implies that
$({\mathcal N}_{{\mathcal A}}\cap{\mathfrak j})\cdot{\mathfrak g}
\subseteq{\mathfrak g}\cdot({\mathcal N}_{{\mathcal A}}\cap{\mathfrak j})+({\mathcal N}_{{\mathcal A}}\cap{\mathfrak j})$,
hence the unital associative subalgebra ${\mathcal A}_0$ of ${\mathcal A}$
generated by ${\mathfrak g}$ satisfies
$$({\mathcal N}_{{\mathcal A}}\cap{\mathfrak j})\cdot{\mathcal A}_0={\mathcal A}_0\cdot({\mathcal N}_{{\mathcal A}}\cap{\mathfrak j}),$$
where for any subsets $S_1,\dots,S_k$ of ${\mathcal A}$
we denote by $S_1\cdots S_k$ the linear subspace
generated by all products $s_1\cdots s_k$
with $s_1\in S_1,\dots,s_k\in S_k$.
By iterating the above equality $m$ times we get
$$({\mathcal N}_{{\mathcal A}}\cap{\mathfrak j})\cdot{\mathcal A}_0\cdots({\mathcal N}_{{\mathcal A}}\cap{\mathfrak j})\cdot{\mathcal A}_0
=({\mathcal N}_{{\mathcal A}}\cap{\mathfrak j})\cdots({\mathcal N}_{{\mathcal A}}\cap{\mathfrak j})\cdot{\mathcal A}_0\cdots{\mathcal A}_0
=\{0\}.$$
In particular, for all $c\in{\mathcal N}_{{\mathcal A}}\cap{\mathfrak j}$ and $d\in{\mathcal A}_0$
we have $(cd)^m=0$.
Since ${\mathcal A}_0$ is dense in ${\mathcal A}$ by hypothesis,
the latter equality actually holds for all $d\in{\mathcal A}$ and implies that
${\bf 1}-cd\in{\mathcal A}^\times$ for all $d\in{\mathcal A}$.
That is, $c\in{\rm rad}\,{\mathcal A}$ for arbitrary $c\in{\mathcal N}_{{\mathcal A}}\cap{\mathfrak j}$,
and the proof ends.
\end{proof}

Now we can extend the main result of \cite{Ti87}
(or Theorem~1 in \S 24 of \cite{BS01}) to
FC-complete locally convex algebras with continuous inversion.

\begin{theorem}\label{turovskii}
Let ${\mathcal A}$ be a complex FC-complete CIA.
Assume that ${\mathfrak g}$ is a complex Lie subalgebra of ${\mathcal A}$
and let ${\mathcal A}({\mathfrak g})$ be the closed unital associative subalgebra of ${\mathcal A}$ generated
by ${\mathfrak g}$.
Then for every finite-dimensional solvable ideal ${\mathfrak j}$ of ${\mathfrak g}$
we have $[{\mathfrak j},{\mathfrak g}]\subseteq{\rm rad}\,({\mathcal A}({\mathfrak g}))\subseteq{\mathcal Q}_{{\mathcal A}}$.
\end{theorem}

\begin{proof}
The inclusion ${\rm rad}\,({\mathcal A}({\mathfrak g}))\subseteq{\mathcal Q}_{{\mathcal A}({\mathfrak g})}$
($\subseteq{\mathcal Q}_{{\mathcal A}}$) follows at once
from the definition of ${\rm rad}\,({\mathcal A}({\mathfrak g}))$.

To prove $[{\mathfrak j},{\mathfrak g}]\subseteq{\rm rad}\,({\mathcal A}({\mathfrak g}))$,
first note that according to Lemma~\ref{subalgebras}(1), ${\mathcal A}({\mathfrak g})$ is
in turn a unital complex FC-complete CIA.
Thus we may (and do) assume that ${\mathcal A}({\mathfrak g})={\mathcal A}$.
Then denote $\widetilde{{\mathcal A}}={\mathcal A}/{\rm rad}\,{\mathcal A}$ and let
$q\colon{\mathcal A}\to\widetilde{{\mathcal A}}$ the natural projection.
We claim that $\tilde{\mathcal A}^\times = q({\mathcal A}^\times)$. The inclusion
$q({\mathcal A}^\times) \subseteq \tilde {\mathcal A}^\times$ is trivial.
For the converse, we assume that $q(a) \in \tilde{\mathcal A}^\times$.
Then there exists $b \in {\mathcal A}$ such that $ab,ba \in {\bf 1} + {\rm rad}\, {\mathcal A} \subseteq {\mathcal A}^\times$.
Hence $a$ is left and right invertible, which implies that $a \in {\mathcal A}^\times$.
Now ${\bf 1} + {\rm rad}\, {\mathcal A} \subseteq {\mathcal A}^\times$ implies that
$$q^{-1}(\tilde {\mathcal A}^\times) = q^{-1}(q({\mathcal A}^\times)) = {\mathcal A}^\times + {\rm rad}\, {\mathcal A}
= {\mathcal A}^\times,$$
and this entails that $\sigma_{\tilde{\mathcal A}}(q(a)) = \sigma_{\mathcal A}(a)$ for each $a \in A$.
Now Remark~\ref{radical} and Lemma~\ref{subalgebras}(3) show
that $\widetilde{{\mathcal A}}$ is
a unital complex FC-complete CIA with
${\rm rad}\,\widetilde{{\mathcal A}}=\{0\}$.
We are going to apply Lemma~\ref{lemma1} to
the ideal $q({\mathfrak j})$ of the Lie subalgebra $q({\mathfrak g})$ of $\widetilde{{\mathcal A}}$.

In fact, let $a\in q({\mathfrak g})$ arbitrary and $b\in q({\mathfrak j})$ such that
$(\mathop{{\rm ad}}\nolimits_{q({\mathfrak g})}a)b=\lambda b$ for some $\lambda\in{\mathbb C}\setminus\{0\}$.
Then
$b\in{\mathcal N}_{\widetilde{{\mathcal A}}}\cap q({\mathfrak j})\subseteq{\rm rad}\,\widetilde{{\mathcal A}}=\{0\}$
by Corollary~\ref{nil} and Proposition~\ref{proposition1}.
Consequently the linear mapping
$(\mathop{{\rm ad}}\nolimits_{q({\mathfrak g})}a)|_{q({\mathfrak j})}\colon q({\mathfrak j})\to q({\mathfrak j})$
has no non-zero eigenvalue, and thus it has to be a nilpotent map.
It then follows by Lemma~\ref{lemma1}
that $[q({\mathfrak g}),q({\mathfrak j})]=\{0\}$, that is,
$[{\mathfrak g},{\mathfrak j}]\subseteq{\rm Ker}\, q={\rm rad}\,{\mathcal A}$.
\end{proof}

\begin{corollary}\label{modulo}
Let ${\mathcal A}$ be a complex FC-complete CIA.
Assume that ${\mathfrak g}$
is a finite-dimensional complex Lie subalgebra of ${\mathcal A}$,
${\mathfrak r}$ its solvable radical,
and let ${\mathcal A}({\mathfrak g})$ be the closed unital associative subalgebra of ${\mathcal A}$ generated
by ${\mathfrak g}$.
Then $[{\mathfrak g},{\mathfrak r}]\subseteq{\rm rad}\,({\mathcal A}({\mathfrak g}))\subseteq{\mathcal Q}_{{\mathcal A}}$.
\end{corollary}

\section{CIA-linear Lie groups}

\begin{definition} A finite-dimensional Lie group $G$ is said to be
{\it linear} if it is isomorphic to a (closed) Lie subgroup of some
$\mathop{{\rm GL}}\nolimits_n({\mathbb R}\,)$. Obviously, this condition is equivalent to the requirement that
$G$ is isomorphic to a Lie subgroup of some finite-dimensional unital  algebra
${\mathcal A}$.

We call $G$ {\it CIA-linear} if there exists an injective continuous homomorphism
$\eta \: G \to {\mathcal A}^\times$ for some FC-complete CIA ${\mathcal A}$.
\end{definition}

\begin{lemma} \label{rel-comp}
Let ${\mathcal A}$ be a complex FC-complete CIA and
$x \in {\mathcal A}$ quasi-nilpotent such that $e^{{\mathbb R}\, x}$ is relatively compact in ${\mathcal A}^\times$.
Then $x = 0$.
\end{lemma}

\begin{proof} Let ${\mathcal A}_0 \subseteq {\mathcal A}$ be a maximal commutative subalgebra containing
$x$. Then ${\mathcal A}_0$ is an FC complete commutative CIA with
$\{0\} = \sigma_{{\mathcal A}}(x) = \sigma_{{\mathcal A}_0}(x)$ (Lemma~\ref{subalgebras}).
We may therefore assume that ${\mathcal A}$ is commutative.

Then the Gelfand transform ${\mathcal G} \: {\mathcal A} \to C(\hat {\mathcal A}), a \mapsto \hat a$ satisfies
$\|\hat a\|_\infty = r_{{\mathcal A}}(a)$, so that
${\rm rad}\,{{\mathcal A}} = {\mathcal Q}_{\mathcal A} = \ker {\mathcal G}$ is a closed $2$-sided ideal of ${\mathcal A}$.
We conclude that the closure
$K \subseteq {\mathcal A}^\times$ of $e^{{\mathbb R}\, x}$ is contained in the closed
affine subspace $U := {\bf 1} + {\rm rad}\, {{\mathcal A}} = {\mathcal G}^{-1}({\bf 1})$, which is
contained in ${\mathcal A}^\times$, hence $K$ is a subgroup of ${\mathcal A}^\times$.

Next we observe that the Spectral Mapping Theorem implies that
$$ \mathop{{\rm Exp}}\nolimits \: ({\mathcal Q}_{\mathcal A},+) = ({\rm rad}\,({\mathcal A}),+) \to U, \quad x \mapsto e^x $$
is a diffeomorphism whose inverse is given by the logarithm function
$\mathop{{\rm Log}}\nolimits \: U \to {\rm rad}\,({\mathcal A})$, which in turn is given by a convergent power series.
We conclude that $\mathop{{\rm Log}}\nolimits(K)$ is a compact subgroup of the locally convex space
$({\rm rad}\,({\mathcal A}),+)$, hence trivial, and this implies that $x =0$.
\end{proof}

The main result of our paper is the following theorem:

\begin{theorem}\label{final}
For a connected finite-dimensional Lie group $G$
the following are equivalent:
\begin{itemize}
\item[(1)] $G$ is CIA-linear.
\item[(2)] The continuous homomorphisms $\eta \: G \to {\mathcal A}^\times$
into the unit groups of FC-complete CIAs separate the points of $G$.
\item[(3)] $G$ is linear.
\end{itemize}
\end{theorem}

\begin{proof} (1) $\Rightarrow$ (2) and (3) $\Rightarrow$ (1) hold trivially.
Therefore it remains to show that (2) implies (3).

Assume that $G$ satisfies (2).
Let ${\mathfrak g} := \L(G)$ be the Lie algebra of $G$ and
${\mathfrak g} = {\mathfrak r} \rtimes {\mathfrak s}$ be a Levi decomposition.

{\bf Step 1:} For $0 \not= x \in [{\mathfrak r},{\mathfrak g}]$ the subgroup
$\exp_G({\mathbb R}\, x)$ is not relatively compact.

We argue by contradiction. Let $0 \not= x \in [{\mathfrak r},{\mathfrak g}]$.
From (2) and the fact that ${\mathfrak g}$ is finite-dimensional
it follows that there exists a complex FC-complete CIA ${\mathcal A}$
and a morphism of Lie groups
$\eta \: G \to {\mathcal A}$ for which $\L(\eta) \: {\mathfrak g} \to {\mathcal A}$ is injective.
Now Corollary~\ref{modulo} implies that
$\L(\eta)([{\mathfrak g},{\mathfrak r}]) \subseteq {\mathcal Q}_{\mathcal A}$, so that
Lemma~\ref{rel-comp} entails that $\eta(\exp_G({\mathbb R}\, x)) = e^{{\mathbb R}\, \L(\eta)x}$
is not relatively compact in ${\mathcal A}^\times$, and this implies that
$\exp_G({\mathbb R}\, x)$ cannot be relatively compact in $G$.

{\bf Step 2:} Let $R := \langle \exp_G{\mathfrak r} \rangle$ denote the radical of $G$.
Then $R$ is a linear Lie group.

Let $R'$ be the commutator subgroup of $R$.
Since $\L(R') = [{\mathfrak r},{\mathfrak r}]$,
Step 1 implies that $\exp_G({\mathbb R}\, x)$ is not relatively compact
in $G$ for $0 \not = x \in [{\mathfrak r},{\mathfrak r}]$. This implies that $R'$ is closed
(\cite{Ho65}, XVI.2.3/4) and does not contain circle groups. Hence it is a
simply connected nilpotent Lie group, so that all compact subgroups of $R'$ are trivial.
Now \cite{Ho65}, XVIII.3.2 implies that $R$ is a linear Lie group.

{\bf Step 3:} The Levi subgroup $S := \langle \exp_G {\mathfrak s} \rangle \leq G$ is linear.

Let $q_S \: \tilde S \to S$ denote the universal covering and
$\eta_S\: \tilde S \to \tilde S_{\mathbb C}\,$ be the universal complexification.
Then $S$ is linear if and only if $S$ is a quotient of
$\eta_S(\tilde S)$, i.e., $\ker \eta_S \supseteq \ker q_S$ (\cite{Ho65}, XVII.3.3).
Since ${\mathcal A}$ is a complex FC-complete CIA, the homomorphism of Lie algebras
$\L(\eta) \: {\mathfrak s} \to {\mathcal A}$ extends to a homomorphism $\L(\eta)_{\mathbb C}\, \: {\mathfrak s}_{\mathbb C}\, \to {\mathcal A}$,
which in turn integrates to a morphism of Lie groups $\eta_{\mathbb C}\, \: \tilde S_{\mathbb C}\, \to {\mathcal A}^\times$
with $\L(\eta_{\mathbb C}\,) = \L(\eta)_{\mathbb C}\,$, which implies that
$\L(\eta_{\mathbb C}\, \circ \eta_S)\vert_{{\mathfrak s}} = \L(\eta)\vert_{\mathfrak s}$, and hence that
$\eta_{\mathbb C}\, \circ \eta_S = \eta \circ q_S$, so that
$\ker \eta_S \subseteq q_S^{-1}(\ker \eta)$. By (2), the homomorphisms
$\eta \: G \to {\mathcal A}^\times$ separate the points of $S$, we conclude that
$\ker \eta_S \subseteq \ker q_S$, showing that $S$ is linear.

{\bf Step 4:} $G$ is linear because $R$ and $S$ are linear
(\cite{Ho65}, XVIII.4.2).
\end{proof}

\textbf{Acknowledgment.}
The first-named author was partially  supported
from grant CERES 4-187/2004.

redpajama_set_name: RedPajamaArXiv


text:
GDFL Game of the Week:Raiders vs Strong
by GDFL Media
Syracuse, New York- The Syracuse Strong is coming off a 53 - 6 blowout win over the Charlotte Colonials in non-league play The Strong kick-off week 1 of GDFL League play the Strong are prepared to face a familiar opponent, the East Penn Raiders, in its first GDFL league play.
The last time the Strong and the Raiders met prior to the pandemic, the Strong came out on top by a score of 26 - 6 with the game ending early in the 3rd quarter due to dangerous weather conditions. The Strong will be depending on the offensive play of QB Jason Boltus, star RB Rashad Burns and the dynamite defensive play of OLB Dewayne "Flash" Gordon and SS Damion Blue.
Let's see if the Syracuse Strong can put on a repeat performance this coming Saturday, May 29th.
Top players to watch Syracuse Strong
Jason Boltus brings a veteran presence to the huddle. The 34-year old has over a decade of professional experience from his time in the CFL, AFL, and playing indoor football. He's the leader of the Strong offense, has a cannon for an arm, and is a calming presence. If you had to provide a pro player comparison to his game you'd probably mention Peyton Manning. He's a cerebral assassin that can pick apart any defense in the country.
Rashad Burns, running back
One of the most dynamic football players on the planet. Rashad Burns brings elite speed, human joystick like lateral movements, and never goes down on first contact. The 5-foot-11, 195 pound back is simply a beast and is the heartbeat of the Syracuse offense. Every week the offensive game plan is normally built around Burns whether that's through the ground game or in the air.
Damion Blue, linebacker
A Mississippi boy born and raised with a relentless passion for violence. Damion Blue has a frame that was chiseled by the gods. You can see him lining up all over the defense, but one thing is for certain, he'll be wreaking havoc. Blue is a player you have to know where he is before every snap or else.
Dewayne "Flash" Gordon, EDGE rusher
The emotional leader of the Syracuse Strong. Dewayne "Flash" Gordon is an absolute maniac on the football field. He talks a big game, but he backs it up on the football field. Gordon has arguably the quickest pass rush get off in the country and brings an attitude on every single snap. If I only had one word to describe him it would be: intense.
East Penn Raiders players to watch.
DeVaughn Chollette #56 Returning from taking a year off in 2020, he comes back as the anchor to the East Penn defense. With his leadership and talent on the field and off, he has earned his rights as a defensive captain in 2021. In 2019, Chollette was a force to be reckoned with, compiling 107 combined tackles on the season. He returns with a fueled passion to create havoc on the opposing offenses. Chollette played his college football at the University of New Hampshire.
Yogi Wilkerson Jr # 21 Returning to the Raiders for his third season as a leader at the safety position. Yogi has been a exemplary teammate on and off the field. Leading with his play locking down receivers as well as being a vocal captain for the team as well. He is a Philadelphia native and brings that tough Football mentality to the Raiders organization. Yogi is returning as a third-year captain and one of the the team favorites. Having Yogi on the defense is liking having a coach on the field. He is very excited about this journey heading into the 2021 GDFL season and facing tougher challenges ahead.
Cody L'aMour Lamoreaux #10 Running Back
Cody played for Coach Keefer in 2017 before signing a contract to play professional football in Brazil. He was instantly a fan favorite and and simultaneously feared throughout the league. Cody played running back his first season, led the league in rushing and touchdowns. Unfortunately an ankle injury in the championship game preemptively ended his season. He battled back, and In the following season, when the starting quarterback went down, Cody stepped in not missing a beat. Establishing himself as a triple threat, he carried his team to a Championship and was named the league MVP. Due to Covid, football in Brazil has been put on hold, so he returns to reunite with Coach Keefer and the 2021 Raiders.
Andrew Shoop #7 Quarterback Shoop joins the Raiders for the 2021 season as a new member to the organization. Shoop has taken the reins at quarterback and with his solid determination he has helped Coach Bob Kohler form an offensive system that will be competitive throughout the GDFL. His hard work and determination has proven that he has the ability to lead this team. Shoop played his collegiate football at Lafayette College, a division 1-AA school. He was a two-year starter. Shoop then played 2 seasons overseas as well. First in the Czech Republic, where as a first year player at the quarterback position he lead his team a national championship win and MVP award. Shoop comes into the 2021 season with the same mentality, to lead the Raiders to a championship.
The Gridiron Developmental Football League is a Professional Developmental Football League based in Memphis, Tennessee. This League was established to provide the community with high quality sports entertainment and to provide athletes the opportunity to participate in professional sports. We are looking at partnering with national and local area businesses in our pursuit of excellence and commitment to our community. Our commitment, dedication, and vision are set on building a firm foundation for professionalism and quality.
The Gridiron Developmental Football League continues to strive to provide a quality minor professional level of football throughout the United States and beyond giving area athletes and fans the opportunity be a part of history. Our organization would like to thank you for your support.
We are excited about the upcoming season and look forward to "Making AN IMPACT" in our Community. Fans can visit our website at www.gdfl.org for upcoming announcements, ticketing info, and player tryouts.
The GDFL Communications Office contributed to this article

redpajama_set_name: RedPajamaCommonCrawl


The Cagliari from Konstsmide is a lovely traditional half wall lantern perfect for exterior walls around the home and garden, having a Matt Black lacquered aluminium finish with clear glass panels.
The Cagliari from Konstsmide is a lovely traditional half wall lantern perfect for exterior walls around the home and garden. Having a Matt Black lacquered aluminium finish with clear glass panels that may accept an E27 lamp with a maximum 100 watts. For a more decorative touch try using an Antique Styled LED Filament lamp, energy efficient whilst retaining the classical style of the Cagliari Half Lantern.


text:
Rock Hill ist der Name folgender Orte in den Vereinigten Staaten:

 Rock Hill (Alabama)
 Rock Hill (Arkansas)
 Rock Hill (Florida)
 Rock Hill (Georgia)
 Rock Hill (Indiana)
 Rock Hill (Louisiana)
 Rock Hill (Mississippi)
 Rock Hill (Missouri)
 Rock Hill (New York)
 Rock Hill (Ohio)
 Rock Hill (South Carolina)
 Rock Hill (Tennessee)
 Rock Hill (Virginia)

Rock Hill steht für folgende Unternehmen:
 Rock Hill Buggy Company, ehemaliger US-amerikanischer Automobilhersteller

Siehe auch:
 Rock Hill Farm
 Rockhill
 Rocky Hill

redpajama_set_name: RedPajamaWikipedia


Summa-summa-summatime! It's OFFICIALLY summer! We're giving you the guide to live your best summer Happy Hour life, and there's no better place to start than with patio Happy Hours. Cheers to soaking up every minute of sunshine with some of DC's best patio happy hours, drink in-hand, of course.
There is legit nothing not to love about happy hour at Colada Shop. From the moment you walk up, you'll be sucked into the sidewalk patio vibes and perfect pastels. It's fast casual Cuban fare and cocktails, and that means you get your drinks hella fast. Hells yes. The cocktails are all rum based and delish, and just $6 each on HH. We're big fans of the Cascara Old Fashioned (aged dark rum, cascara syrup, house coffee bitters) and the Piña Coladas (classic, with a hefty pour of white rum).
After HH, the drinks are still reasonably priced at just $8, so don't be surprised if you're chilling out on this comfy casual patio all night long. No judgment.
Lucky Buns has one of the most welcoming patios in Adam's Morgan, with a fabulous happy hour to boot. It's a casual, yet special choice because the food & cocktails are DAYUM good! Enjoy a happy hour beer, wine, or cocktail while taking in the sunshine and enjoying fantastic people watching along 18th street.
Must do: Order a burger to go alongside your happy hour beverage. The Alfie's Bun with gouda, runny egg, pickled beetroot, pineapple, grilled red onion, arugula, & lucky sauce is a Happied favorite!
Bloomingdale is known as being a cozy community, and Boundary Stone is the area's inviting gathering spot. The patio is a perfect place to bring your crew, or even a casual date. Beer, wine, cocktails, sammies, and snacks are ALL.ON.HAPPY.HOUR! Are you on your way yet? Plus beers feature a lot of locals like DC Brau, Atlas, 3 Stars, Right Proper, & Hellbender.
Don't walk, run over to this patio post-workday and get your happy hour on.
Clever cocktails, soul-satisfying ramen, and drunken dumplings—what more could you ask for?! Well, since you asked, Chaplins also has a fabulous outdoor patio adorned with Edison lights, Best part—happy hour is offered on the patio! Whether you're in the mood for beer, wine, or an intricate cocktail, you have options on the happy hour menu. On of our favorite cocktails is The Vagabond, made with Spring 44 gin, cucumber water, ginger beer, pimms, lillet blanc, & lemon bitters.
BONUS: The patio is dog-friendly! Bring your furry best friend along!
ANXO Cidery and Pintxos Bar has a happy hour that is short but mighty. We love their beautiful patio, where, during happy hour, all pintxos (aka bite-sized snacks) are $1 off (when ordering 3 or more), and select cider, beer, wine, cocktails, and vermouth are ½ off! If you're thinking about the cider, do it. They are a cidery, after all! Some of our favorite pintxos are the braised short rib montadito and mushrooms tartlette with Manchego cheese & caramelized onions.
Fun fact: Go inside to see the 660-gallon oak cask at the entrance of the Pinxtos Bar. It was purchased from a winery in the Barolo region of Italy!
You've heard us go on about Brookland's Finest before. Your reliable, welcoming neighborhood spot where you can relax and be yoself. Sit back & relax on the patio, complete with tables, outdoor bar & Edison lights. It's the recipe for the perfect patio happy hour evening!
Been to one of these patios? Have a favorite DC patio drinking spot? Tell us in the comments!


Booz Allen Hamilton has received a potential $9.8M contract to develop a cloud-based technology platform for the Department of Veterans Affairs to manage mobile applications.
The VA announced its Mobile Applications Cloud Migration contract award in a FedBizOpps notice posted Thursday.
Nextgov reported Friday the MACM project seeks to replace the department's current mobile infrastructure jointly managed by Booz Allen and IBM.
The report said Booz Allen will provide a platform designed to help the agency create, troubleshoot and implement mobile-friendly web apps. The company will also assist VA in efforts to migrate up to 30 apps to the cloud.
The project has a one-year base period performance and work may extend for an additional four years through options.


With the announcement that v7 will be upon us around 26Feb2016, could someone from Macrium please revue the ADDITIONAL NEW features expected in the initial v7 release.
And while at it, how 'bout a heads-up on the update cost, if any.
I only purchased in December & glad they are offering this.
Would also like to know what new features are planned.
I have a quick question for Support/Devs... will v7 still have the same compatibility with v5 images as v6 currently has?
Version 7 will be compatible with images created with all earlier versions of Reflect.
Don't know if I need the new features. Even if it sounds odd in the ssd world, I'd appreciate a backup software that co-operates with a good defrag tool like o&o defrag.
Dreamer, I guess I don't know what you mean by "cooperation" with a defrag tool.
Let me explain: If I make an image of a disk without any fragmentation and restore it back to a new disk almost all files become fragmented - this is far away from being perfect.
This is not correct. A restored image to a partition the same size or greater than the original is exactly the same as it was when it was imaged. A disk image is an exact cluster by cluster representation of the file system and the restore puts every cluster back to exactly the same sector offset as it was when the image was created. The exception is if you shrink a file system during a restore, in this case the file system is actually defragged 'on the fly' and there is no fragmentation whatsoever in the restored file system.


text:
The effects of second-hand smoke and ways of raising awareness
Secondhand smoke (SHS) is also called environmental tobacco smoke (ETS). It's a mixture of 2 forms of smoke that come from burning tobacco:
Mainstream smoke: The smoke exhaled by a person who smokes.
Sidestream smoke: Smoke from the lighted end of a cigarette, pipe, or cigar, or tobacco burning in a hookah. This type of smoke has higher concentrations of nicotine and cancer-causing agents (carcinogens) than mainstream smoke.
When people who don't smoke are exposed to SHS it's called involuntary smoking or passive smoking. When you breathe in SHS, you take in nicotine and toxic chemicals the same way people who smoke do. The more SHS you breathe, the higher the levels of these harmful chemicals in your body.
Why is secondhand smoke a problem?
Secondhand smoke (SHS) has the same harmful chemicals that people who smoke inhale. There's no safe level of exposure to secondhand smoke (SHS).
Secondhand smoke causes cancer
Secondhand smoke is known to cause cancer. It has more than 7,000 chemicals, including at least 70 that can cause cancer.
SHS causes lung cancer, even in people who have never smoked. There's also some evidence suggesting it might be linked in adults to cancers of the:
Larynx (voice box)
Nasopharynx (the part of the throat behind the nose)
Nasal sinuses
Exposure of mothers and babies to SHS is possibly linked to certain childhood cancers:
Secondhand smoke causes other diseases and death
Secondhand smoke can also be harmful in other ways. For instance, breathing secondhand smoke affects the heart and blood vessels, which increases the risk of having a heart attack. Exposure to secondhand smoke increases the risk of developing and dying from heart disease. It also increases the risk of having (and dying from) a stroke.
Secondhand smoke and your children's health
Young children are most affected by SHS and are least able to avoid it. Most of their exposure to SHS comes from adults (parents or others) smoking at home. Studies show that children whose parents smoke:
Get sick more often
Have more lung infections (like bronchitis and pneumonia)
Are more likely to cough, wheeze, and have shortness of breath
Get more ear infections
Secondhand smoke can also trigger asthma attacks or make asthma symptoms worse.
Some of these problems might seem small, but they can add up quickly. Think of the expenses, doctor visits, medicines, lost school time, and often lost work time for the parent who must stay home with a sick child. And this doesn't include the discomforts that the child goes through.
In very young children, SHS also increases the risk for more serious problems, including sudden infant death syndrome (SIDS).
Where is secondhand smoke a problem?
You should be especially concerned about exposure to secondhand smoke (SHS) in these places:
The workplace is a major source of SHS exposure for many adults.
The Occupational Safety and Health Administration (OSHA) and the National Institute for Occupational Safety and Health (NIOSH), federal agencies responsible for health and safety in the workplace, recognize there are no known safe levels of SHS and recommend that exposures be reduced to the lowest possible levels.
The Surgeon General has said that smoke-free workplace policies are the only way to prevent SHS exposure at work. Separating people who smoke from those who don't, cleaning the air, and ventilating the building cannot prevent exposure if people still smoke inside the building. An extra bonus of workplace smoking restrictions, other than protecting those who don't smoke, is that they may also encourage people who do to smoke less or even quit.
In public places
Everyone can be exposed to SHS in public places where smoking is allowed, such as some restaurants, shopping centers, public transportation, parks, and schools. The Surgeon General has suggested people choose smoke-free restaurants and businesses and let owners of businesses that are not smoke-free know that SHS is harmful to their family's health.
Public places where children go are a special area of concern. Make sure that your children's daycare centers and schools are smoke-free.
Some businesses might be afraid to ban smoking, but there's no strong evidence that going smoke-free is bad for business.
Making your home smoke-free may be one of the most important things you can do for the health of your family. Any family member can develop health problems related to SHS. Children's growing bodies are especially sensitive to the toxins in SHS. And think about it: we spend more time at home than anywhere else. A smoke-free home protects your family, your guests, and even your pets.
Multi-unit housing where smoking is allowed is a special concern and a subject of research. Tobacco smoke can move through air ducts, wall and floor cracks, elevator shafts, and along crawl spaces to contaminate units on other floors, even those that are far from the smoke. SHS cannot be controlled with ventilation, air cleaning, or by separating those who smoke from those who don't.
Americans spend a great deal of time in cars, and if someone smokes there, the toxins can build up quickly – even when the windows are open or the air-conditioner is on. Again, this can be especially harmful to children.
In response to this fact, many expert medical groups have been working to encourage people to make their cars, as well as their homes, smoke-free. Some states and cities even have laws that ban smoking in the car if carrying passengers under a certain age or weight. And many facilities such as city buildings, malls, schools, colleges, and hospitals ban smoking on their grounds, including their parking lots.
There is no safe level of exposure to secondhand smoke (SHS). Any exposure is harmful.
The only way to fully protect people who don't smoke from SHS indoors is to prohibit all smoking in that indoor space or building. Separating those who smoke from those who don't, cleaning the air, and ventilating buildings cannot keep people who don't smoke from being exposed to SHS.
What can be done about secondhand smoke?
Many US local and state governments, and even federal governments in some other countries, have decided that protecting the health of employees and others in public places is of the utmost importance and have passed clean indoor air laws. Although the laws vary from place to place, they are becoming more common. Detailed information on smoking restrictions in each state is available from the American Lung Association.
You don't have to wait for the government to act. Even if you smoke, you can decide to make your home and car smoke-free. This is the safest thing to do for your children, other family members, pets, and guests.
Are lingering smoking odors harmful?
There's very little research so far on whether lingering tobacco smoke odors or residuals from it on surfaces can cause cancer in people. Research does show that particles from secondhand tobacco smoke can settle in dust and on surfaces and remain there long after the smoke is gone. Some studies suggest the particles can last for months. Even though it's no longer in the form of smoke, researchers often call this thirdhand smoke (THS) or residual tobacco smoke.
Particles that settle out from tobacco smoke have been shown to combine with gases in the air to form cancer-causing compounds that settle onto surfaces. For instance, some of the carcinogens that are known to cause lung cancer have been found in dust samples taken from the homes of people who smoke. Research has also shown that thirdhand smoke can damage human DNA in cell cultures and might increase lung cancer risk in lab animals.
Though it's not yet clear if such smoke residue can cause cancer, any effects would probably be small compared with direct exposure to SHS. Still, the compounds may be stirred up and inhaled with other house dust, and may also be accidentally taken in through the mouth. Because of this, any risk the compounds pose is probably greater for babies and children who play on the floor and often put things in their mouths.
The health risks of THS are an active area of research.
Is exposure to secondhand e-cigarette aerosol harmful?
As e-cigarettes and similar devices have become more popular in recent years, a growing concern is whether the aerosol of tiny particles exhaled by users, sometimes referred to as secondhand vapor, is harmful to other people who breathe it in.
Scientists are still learning about the health effects of being exposed to secondhand e-cigarette aerosol. However, the US Surgeon General has concluded that e-cigarette aerosol is not harmless. Secondhand aerosol can expose others to nicotine, and possibly to other harmful chemicals.
Smoke-free and tobacco-free policies already in place should also cover e-cigarettes. This will help non-users avoid being exposed to potentially harmful e-cigarette aerosol.


Easy add-on storage for home or office. Instantly expand your storage to hold digital photos, music, and data files. It's simple to install - just plug the external drive into an available USB 2.0/1.1 port on your PC. You can even improve the performance of your computer by moving your files over to the Personal Storage 3200.
More links for "Maxtor Basics Personal Storage 3200 500GB USB 2.0 External Hard Drive - Retail (STM305004EHCB01-RK)"


I think a lot of this probably has to do with Meghan.
Hmmm, we're going to go out on a wild limb here and say, perhaps the royal family didn't invite Thomas - and Meghan's half-sister Samantha, for that matter - because of all their hurtful comments to the media about Duchess Meghan? It's obvious that she does have a family.
With so many other things to worry about, the last thing that is on Queen Elizabeth's mind is Meghan Markle's father and all of the things he has been saying to the tabloid press. Find out all the little details you might have missed about Prince Harry and Meghan Markle's wedding day.
"Kensington Palace could have got involved a long time ago - as soon as they announced their engagement", Thomas Jr. said.
"Auctioneer Andrew Aldridge told Fox News at the time: "[The letters] demonstrate the empathy and generosity Diana was able to show to some of the more vulnerable members [of] society and just illustrate what an incredible person she was". But when she couldn't give him the time he needed or wanted to spend with her, he got upset about that. "They could have looked after my dad and he would have been happy", Thomas Jr. explained. "He dedicated all his time to her". At least, that's what the royal's half-brother, Tom Jr.
Meghan Markle's brother has said how he believes his sister has "changed" since becoming a royal. I think she owes him emotionally as his daughter to support him the way he supported her, " he continued.
The window fitter's remarks come days after Thomas Sr. compared the royal family to a "cult", telling The Sun newspaper on Friday, August 17, that the royals "are secretive". I really feel for him because of how strong their relationship used to be and what it has become now. "That's got to hurt anybody", he explained to the Daily Mail.
One month prior, the former lighting director, 74, told the publication that he fears his daughter has "a pained smile" during public outings and "she is terrified" and "under too much pressure".


text:
package java.util;

import gnu.java.lang.CPStringBuilder;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.PrintStream;
import java.io.PrintWriter;
import java.io.Reader;

import javax.xml.stream.XMLInputFactory;
import javax.xml.stream.XMLStreamConstants;
import javax.xml.stream.XMLStreamException;
import javax.xml.stream.XMLStreamReader;

import org.w3c.dom.Document;
import org.w3c.dom.DocumentType;
import org.w3c.dom.DOMImplementation;
import org.w3c.dom.Element;
import org.w3c.dom.bootstrap.DOMImplementationRegistry;
import org.w3c.dom.ls.DOMImplementationLS;
import org.w3c.dom.ls.LSOutput;
import org.w3c.dom.ls.LSSerializer;

/**
 * A set of persistent properties, which can be saved or loaded from a stream.
 * A property list may also contain defaults, searched if the main list
 * does not contain a property for a given key.
 *
 * An example of a properties file for the german language is given
 * here.  This extends the example given in ListResourceBundle.
 * Create a file MyResource_de.properties with the following contents
 * and put it in the CLASSPATH.  (The character
 * \u00e4 is the german umlaut)
 *
 *

s1=3
s2=MeineDisk
s3=3. M\u00e4rz 96
s4=Die Diskette ''{1}'' enth\u00e4lt {0} in {2}.
s5=0
s6=keine Dateien
s7=1
s8=eine Datei
s9=2
s10={0,number} Dateien
s11=Das Formatieren schlug fehl mit folgender Exception: {0}
s12=FEHLER
s13=Ergebnis
s14=Dialog
s15=Auswahlkriterium
s16=1,3

 *
 *
Although this is a sub class of a hash table, you should never
 * insert anything other than strings to this property, or several
 * methods, that need string keys and values, will fail.  To ensure
 * this, you should use the get/setProperty method instead
 * of get/put.
 *
 * Properties are saved in ISO 8859-1 encoding, using Unicode escapes with
 * a single u for any character which cannot be represented.
 *
 * @author Jochen Hoenicke
 * @author Eric Blake (ebb9@email.byu.edu)
 * @see PropertyResourceBundle
 * @status updated to 1.4
 */
public class Properties extends Hashtable<Object, Object>
{
  // WARNING: Properties is a CORE class in the bootstrap cycle. See the
  // comments in vm/reference/java/lang/Runtime for implications of this fact.

  /**
   * The property list that contains default values for any keys not
   * in this property list.
   *
   * @serial the default properties
   */
  protected Properties defaults;

  /**
   * Compatible with JDK 1.0+.
   */
  private static final long serialVersionUID = 4112578634029874840L;

  /**
   * Creates a new empty property list with no default values.
   */
  public Properties()
  {
  }

  /**
   * Create a new empty property list with the specified default values.
   *
   * @param defaults a Properties object containing the default values
   */
  public Properties(Properties defaults)
  {
    this.defaults = defaults;
  }

  /**
   * Adds the given key/value pair to this properties.  This calls
   * the hashtable method put.
   *
   * @param key the key for this property
   * @param value the value for this property
   * @return The old value for the given key
   * @see #getProperty(String)
   * @since 1.2
   */
  public Object setProperty(String key, String value)
  {
    return put(key, value);
  }

  /**
   * Reads a property list from a character stream.  The stream should
   * have the following format:

   *
   * An empty line or a line starting with # or
   * ! is ignored.  An backslash (\) at the
   * end of the line makes the line continueing on the next line
   * (but make sure there is no whitespace after the backslash).
   * Otherwise, each line describes a key/value pair.

   *
   * The chars up to the first whitespace, = or : are the key.  You
   * can include this caracters in the key, if you precede them with
   * a backslash (\). The key is followed by optional
   * whitespaces, optionally one = or :,
   * and optionally some more whitespaces.  The rest of the line is
   * the resource belonging to the key.

   *
   * Escape sequences \t, \n, \r, \\, \", \', \!, \#, \ (a
   * space), and unicode characters with the
   * \\uxxxx notation are detected, and
   * converted to the corresponding single character.

   *
   *

# This is a comment
key     = value
k\:5      \ a string starting with space and ending with newline\n
# This is a multiline specification; note that the value contains
# no white space.
weekdays: Sunday,Monday,Tuesday,Wednesday,\\
          Thursday,Friday,Saturday
# The safest way to include a space at the end of a value:
label   = Name:\\u0020

   *
   * @param inReader the input {@link java.io.Reader}.
   * @throws IOException if an error occurred when reading the input
   * @throws NullPointerException if in is null
   * @since 1.6
   */
  public void load(Reader inReader) throws IOException
  {
    BufferedReader reader = new BufferedReader(inReader);
    String line;

    while ((line = reader.readLine()) != null)
      {
        char c = 0;
        int pos = 0;
	// Leading whitespaces must be deleted first.
        while (pos < line.length()
               && Character.isWhitespace(c = line.charAt(pos)))
          pos++;

        // If empty line or begins with a comment character, skip this line.
        if ((line.length() - pos) == 0
	    || line.charAt(pos) == '#' || line.charAt(pos) == '!')
          continue;

        // The characters up to the next Whitespace, ':', or '='
        // describe the key.  But look for escape sequences.
	// Try to short-circuit when there is no escape char.
	int start = pos;
	boolean needsEscape = line.indexOf('\\', pos) != -1;
        CPStringBuilder key = needsEscape ? new CPStringBuilder() : null;
        while (pos < line.length()
               && ! Character.isWhitespace(c = line.charAt(pos++))
               && c != '=' && c != ':')
          {
            if (needsEscape && c == '\\')
              {
                if (pos == line.length())
                  {
                    // The line continues on the next line.  If there
                    // is no next line, just treat it as a key with an
                    // empty value.
                    line = reader.readLine();
		    if (line == null)
		      line = "";
                    pos = 0;
                    while (pos < line.length()
                           && Character.isWhitespace(c = line.charAt(pos)))
                      pos++;
                  }
                else
                  {
                    c = line.charAt(pos++);
                    switch (c)
                      {
                      case 'n':
                        key.append('\n');
                        break;
                      case 't':
                        key.append('\t');
                        break;
                      case 'r':
                        key.append('\r');
                        break;
                      case 'u':
                        if (pos + 4 <= line.length())
                          {
                            char uni = (char) Integer.parseInt
                              (line.substring(pos, pos + 4), 16);
                            key.append(uni);
                            pos += 4;
                          }        // else throw exception?
                        break;
                      default:
                        key.append(c);
                        break;
                      }
                  }
              }
            else if (needsEscape)
              key.append(c);
          }

        boolean isDelim = (c == ':' || c == '=');

	String keyString;
	if (needsEscape)
	  keyString = key.toString();
	else if (isDelim || Character.isWhitespace(c))
	  keyString = line.substring(start, pos - 1);
	else
	  keyString = line.substring(start, pos);

        while (pos < line.length()
               && Character.isWhitespace(c = line.charAt(pos)))
          pos++;

        if (! isDelim && (c == ':' || c == '='))
          {
            pos++;
            while (pos < line.length()
                   && Character.isWhitespace(c = line.charAt(pos)))
              pos++;
          }

	// Short-circuit if no escape chars found.
	if (!needsEscape)
	  {
	    put(keyString, line.substring(pos));
	    continue;
	  }

	// Escape char found so iterate through the rest of the line.
        StringBuilder element = new StringBuilder(line.length() - pos);
        while (pos < line.length())
          {
            c = line.charAt(pos++);
            if (c == '\\')
              {
                if (pos == line.length())
                  {
                    // The line continues on the next line.
                    line = reader.readLine();

		    // We might have seen a backslash at the end of
		    // the file.  The JDK ignores the backslash in
		    // this case, so we follow for compatibility.
		    if (line == null)
		      break;

                    pos = 0;
                    while (pos < line.length()
                           && Character.isWhitespace(c = line.charAt(pos)))
                      pos++;
                    element.ensureCapacity(line.length() - pos +
                                           element.length());
                  }
                else
                  {
                    c = line.charAt(pos++);
                    switch (c)
                      {
                      case 'n':
                        element.append('\n');
                        break;
                      case 't':
                        element.append('\t');
                        break;
                      case 'r':
                        element.append('\r');
                        break;
                      case 'u':
                        if (pos + 4 <= line.length())
                          {
                            char uni = (char) Integer.parseInt
                              (line.substring(pos, pos + 4), 16);
                            element.append(uni);
                            pos += 4;
                          }        // else throw exception?
                        break;
                      default:
                        element.append(c);
                        break;
                      }
                  }
              }
            else
              element.append(c);
          }
        put(keyString, element.toString());
      }
  }

  /**
   * Reads a property list from the supplied input stream.
   * This method has the same functionality as {@link #load(Reader)}
   * but the character encoding is assumed to be ISO-8859-1.
   * Unicode characters not within the Latin1 set supplied by
   * ISO-8859-1 should be escaped using '\\uXXXX' where XXXX
   * is the UTF-16 code unit in hexadecimal.
   *
   * @param inStream the byte stream to read the property list from.
   * @throws IOException if an I/O error occurs.
   * @see #load(Reader)
   * @since 1.2
   */
  public void load(InputStream inStream) throws IOException
  {
    load(new InputStreamReader(inStream, "ISO-8859-1"));
  }

  /**
   * Calls store(OutputStream out, String header) and
   * ignores the IOException that may be thrown.
   *
   * @param out the stream to write to
   * @param header a description of the property list
   * @throws ClassCastException if this property contains any key or
   *         value that are not strings
   * @deprecated use {@link #store(OutputStream, String)} instead
   */
  @Deprecated
  public void save(OutputStream out, String header)
  {
    try
      {
        store(out, header);
      }
    catch (IOException ex)
      {
      }
  }

  /**
   * Writes the key/value pairs to the given output stream, in a format
   * suitable for load.

   *
   * If header is not null, this method writes a comment containing
   * the header as first line to the stream.  The next line (or first
   * line if header is null) contains a comment with the current date.
   * Afterwards the key/value pairs are written to the stream in the
   * following format.

   *
   * Each line has the form key = value.  Newlines,
   * Returns and tabs are written as \n,\t,\r resp.
   * The characters \, !, #, = and : are
   * preceeded by a backslash.  Spaces are preceded with a backslash,
   * if and only if they are at the beginning of the key.  Characters
   * that are not in the ascii range 33 to 127 are written in the
   * \uxxxx Form.

   *
   * Following the listing, the output stream is flushed but left open.
   *
   * @param out the output stream
   * @param header the header written in the first line, may be null
   * @throws ClassCastException if this property contains any key or
   *         value that isn't a string
   * @throws IOException if writing to the stream fails
   * @throws NullPointerException if out is null
   * @since 1.2
   */
  public void store(OutputStream out, String header) throws IOException
  {
    // The spec says that the file must be encoded using ISO-8859-1.
    PrintWriter writer
      = new PrintWriter(new OutputStreamWriter(out, "ISO-8859-1"));
    if (header != null)
      writer.println("#" + header);
    writer.println ("#" + Calendar.getInstance ().getTime ());

    Iterator iter = entrySet ().iterator ();
    int i = size ();
    CPStringBuilder s = new CPStringBuilder (); // Reuse the same buffer.
    while (--i >= 0)
      {
        Map.Entry entry = (Map.Entry) iter.next ();
        formatForOutput ((String) entry.getKey (), s, true);
        s.append ('=');
        formatForOutput ((String) entry.getValue (), s, false);
        writer.println (s);
      }

    writer.flush ();
  }

  /**
   * Gets the property with the specified key in this property list.
   * If the key is not found, the default property list is searched.
   * If the property is not found in the default, null is returned.
   *
   * @param key The key for this property
   * @return the value for the given key, or null if not found
   * @throws ClassCastException if this property contains any key or
   *         value that isn't a string
   * @see #defaults
   * @see #setProperty(String, String)
   * @see #getProperty(String, String)
   */
  public String getProperty(String key)
  {
    Properties prop = this;
    // Eliminate tail recursion.
    do
      {
        String value = (String) prop.get(key);
        if (value != null)
          return value;
        prop = prop.defaults;
      }
    while (prop != null);
    return null;
  }

  /**
   * Gets the property with the specified key in this property list.  If
   * the key is not found, the default property list is searched.  If the
   * property is not found in the default, the specified defaultValue is
   * returned.
   *
   * @param key The key for this property
   * @param defaultValue A default value
   * @return The value for the given key
   * @throws ClassCastException if this property contains any key or
   *         value that isn't a string
   * @see #defaults
   * @see #setProperty(String, String)
   */
  public String getProperty(String key, String defaultValue)
  {
    String prop = getProperty(key);
    if (prop == null)
      prop = defaultValue;
    return prop;
  }

  /**
   * Returns an enumeration of all keys in this property list, including
   * the keys in the default property list.
   *
   * @return an Enumeration of all defined keys
   */
  public Enumeration<?> propertyNames()
  {
    // We make a new Set that holds all the keys, then return an enumeration
    // for that. This prevents modifications from ruining the enumeration,
    // as well as ignoring duplicates.
    Properties prop = this;
    Set s = new HashSet();
    // Eliminate tail recursion.
    do
      {
        s.addAll(prop.keySet());
        prop = prop.defaults;
      }
    while (prop != null);
    return Collections.enumeration(s);
  }

  /**
   * Prints the key/value pairs to the given print stream.  This is
   * mainly useful for debugging purposes.
   *
   * @param out the print stream, where the key/value pairs are written to
   * @throws ClassCastException if this property contains a key or a
   *         value that isn't a string
   * @see #list(PrintWriter)
   */
  public void list(PrintStream out)
  {
    PrintWriter writer = new PrintWriter (out);
    list (writer);
  }

  /**
   * Prints the key/value pairs to the given print writer.  This is
   * mainly useful for debugging purposes.
   *
   * @param out the print writer where the key/value pairs are written to
   * @throws ClassCastException if this property contains a key or a
   *         value that isn't a string
   * @see #list(PrintStream)
   * @since 1.1
   */
  public void list(PrintWriter out)
  {
    out.println ("-- listing properties --");

    Iterator iter = entrySet ().iterator ();
    int i = size ();
    while (--i >= 0)
      {
        Map.Entry entry = (Map.Entry) iter.next ();
        out.print ((String) entry.getKey () + "=");

        // JDK 1.3/1.4 restrict the printed value, but not the key,
        // to 40 characters, including the truncating ellipsis.
        String s = (String ) entry.getValue ();
        if (s != null && s.length () > 40)
          out.println (s.substring (0, 37) + "...");
        else
          out.println (s);
      }
    out.flush ();
  }

  /**
   * Formats a key or value for output in a properties file.
   * See store for a description of the format.
   *
   * @param str the string to format
   * @param buffer the buffer to add it to
   * @param key true if all ' ' must be escaped for the key, false if only
   *        leading spaces must be escaped for the value
   * @see #store(OutputStream, String)
   */
  private void formatForOutput(String str, CPStringBuilder buffer, boolean key)
  {
    if (key)
      {
        buffer.setLength(0);
        buffer.ensureCapacity(str.length());
      }
    else
      buffer.ensureCapacity(buffer.length() + str.length());
    boolean head = true;
    int size = str.length();
    for (int i = 0; i < size; i++)
      {
        char c = str.charAt(i);
        switch (c)
          {
          case '\n':
            buffer.append("\\n");
            break;
          case '\r':
            buffer.append("\\r");
            break;
          case '\t':
            buffer.append("\\t");
            break;
          case ' ':
            buffer.append(head ? "\\ " : " ");
            break;
          case '\\':
          case '!':
          case '#':
          case '=':
          case ':':
            buffer.append('\\').append(c);
            break;
          default:
            if (c < ' ' || c > '~')
              {
                String hex = Integer.toHexString(c);
                buffer.append("\\u0000".substring(0, 6 - hex.length()));
                buffer.append(hex);
              }
            else
              buffer.append(c);
          }
        if (c != ' ')
          head = key;
      }
  }

  /**
   *

   * Encodes the properties as an XML file using the UTF-8 encoding.
   * The format of the XML file matches the DTD
   *
   * http://java.sun.com/dtd/properties.dtd.
   *

   *

   * Invoking this method provides the same behaviour as invoking
   * storeToXML(os, comment, "UTF-8").
   *

   *
   * @param os the stream to output to.
   * @param comment a comment to include at the top of the XML file, or
   *                null if one is not required.
   * @throws IOException if the serialization fails.
   * @throws NullPointerException if os is null.
   * @since 1.5
   */
  public void storeToXML(OutputStream os, String comment)
    throws IOException
  {
    storeToXML(os, comment, "UTF-8");
  }

  /**
   *

   * Encodes the properties as an XML file using the supplied encoding.
   * The format of the XML file matches the DTD
   *
   * http://java.sun.com/dtd/properties.dtd.
   *

   *
   * @param os the stream to output to.
   * @param comment a comment to include at the top of the XML file, or
   *                null if one is not required.
   * @param encoding the encoding to use for the XML output.
   * @throws IOException if the serialization fails.
   * @throws NullPointerException if os or encoding
   *                              is null.
   * @since 1.5
   */
  public void storeToXML(OutputStream os, String comment, String encoding)
    throws IOException
  {
    if (os == null)
      throw new NullPointerException("Null output stream supplied.");
    if (encoding == null)
      throw new NullPointerException("Null encoding supplied.");
    try
      {
	DOMImplementationRegistry registry =
	  DOMImplementationRegistry.newInstance();
	DOMImplementation domImpl = registry.getDOMImplementation("LS 3.0");
	DocumentType doctype =
	  domImpl.createDocumentType("properties", null,
				     "http://java.sun.com/dtd/properties.dtd");
	Document doc = domImpl.createDocument(null, "properties", doctype);
	Element root = doc.getDocumentElement();
	if (comment != null)
	  {
	    Element commentElement = doc.createElement("comment");
	    commentElement.appendChild(doc.createTextNode(comment));
	    root.appendChild(commentElement);
	  }
	Iterator iterator = entrySet().iterator();
	while (iterator.hasNext())
	  {
	    Map.Entry entry = (Map.Entry) iterator.next();
	    Element entryElement = doc.createElement("entry");
	    entryElement.setAttribute("key", (String) entry.getKey());
	    entryElement.appendChild(doc.createTextNode((String)
							entry.getValue()));
	    root.appendChild(entryElement);
	  }
	DOMImplementationLS loadAndSave = (DOMImplementationLS) domImpl;
	LSSerializer serializer = loadAndSave.createLSSerializer();
	LSOutput output = loadAndSave.createLSOutput();
	output.setByteStream(os);
	output.setEncoding(encoding);
	serializer.write(doc, output);
      }
    catch (ClassNotFoundException e)
      {
	throw (IOException)
	  new IOException("The XML classes could not be found.").initCause(e);
      }
    catch (InstantiationException e)
      {
	throw (IOException)
	  new IOException("The XML classes could not be instantiated.")
	  .initCause(e);
      }
    catch (IllegalAccessException e)
      {
	throw (IOException)
	  new IOException("The XML classes could not be accessed.")
	  .initCause(e);
      }
  }

  /**
   *

   * Decodes the contents of the supplied InputStream as
   * an XML file, which represents a set of properties.  The format of
   * the XML file must match the DTD
   *
   * http://java.sun.com/dtd/properties.dtd.
   *

   *
   * @param in the input stream from which to receive the XML data.
   * @throws IOException if an I/O error occurs in reading the input data.
   * @throws InvalidPropertiesFormatException if the input data does not
   *                                          constitute an XML properties
   *                                          file.
   * @throws NullPointerException if in is null.
   * @since 1.5
   */
  public void loadFromXML(InputStream in)
    throws IOException, InvalidPropertiesFormatException
  {
    if (in == null)
      throw new NullPointerException("Null input stream supplied.");
    try
      {
        XMLInputFactory factory = XMLInputFactory.newInstance();
        // Don't resolve external entity references
        factory.setProperty("javax.xml.stream.isSupportingExternalEntities",
                            Boolean.FALSE);
        XMLStreamReader reader = factory.createXMLStreamReader(in);
        String name, key = null;
        CPStringBuilder buf = null;
        while (reader.hasNext())
          {
            switch (reader.next())
              {
              case XMLStreamConstants.START_ELEMENT:
                name = reader.getLocalName();
                if (buf == null && "entry".equals(name))
                  {
                    key = reader.getAttributeValue(null, "key");
                    if (key == null)
                      {
                        String msg = "missing 'key' attribute";
                        throw new InvalidPropertiesFormatException(msg);
                      }
                    buf = new CPStringBuilder();
                  }
                else if (!"properties".equals(name) && !"comment".equals(name))
                  {
                    String msg = "unexpected element name '" + name + "'";
                    throw new InvalidPropertiesFormatException(msg);
                  }
                break;
              case XMLStreamConstants.END_ELEMENT:
                name = reader.getLocalName();
                if (buf != null && "entry".equals(name))
                  {
                    put(key, buf.toString());
                    buf = null;
                  }
                else if (!"properties".equals(name) && !"comment".equals(name))
                  {
                    String msg = "unexpected element name '" + name + "'";
                    throw new InvalidPropertiesFormatException(msg);
                  }
                break;
              case XMLStreamConstants.CHARACTERS:
              case XMLStreamConstants.SPACE:
              case XMLStreamConstants.CDATA:
                if (buf != null)
                  buf.append(reader.getText());
                break;
              }
          }
        reader.close();
      }
    catch (XMLStreamException e)
      {
	throw (InvalidPropertiesFormatException)
	  new InvalidPropertiesFormatException("Error in parsing XML.").
	  initCause(e);
      }
  }

} // class Properties

redpajama_set_name: RedPajamaGithub


Our president Kristen Knox is hosting our annual WNBA-Charlotte book swap at her house! Use this chance to tidy up your bookshelves, or to clutter them again with new reads. Bring books to swap out or just to donate to a good cause: we'll be collecting children's books for The 40 Book Project. This is a members only event!
Check out WNBA-Charlotte's Facebook page for more information.
If you want to learn more about The 40 Book Project, go here!
9601 China Grove Church Rd.
Our December 2013/Winter 2014 WNBA-Charlotte newsletter is online now!
Click here for the PDF of the newsletter to read online, save, and/or print out.


text:
Q: PHP: list files on ftp server? can't get it done!
<!DOCTYPE html>

    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    <title>FTP Download</title>

    <?php

    set_time_limit(300);//for setting
    $path='/userupload';
    $ftp_server='202. …';
    $ftp_server_port="21";
    $ftp_user_name='al…';
    $ftp_user_pass="mypassword";

    // set up a connection to ftp server
    $conn_id = ftp_connect($ftp_server, $ftp_server_port);
    // login with username and password
    $login_result = ftp_login($conn_id, $ftp_user_name, $ftp_user_pass);

    // check connection and login result
    if ((!$conn_id) || (!$login_result)) {
        echo "Fail
";
    } else {
        echo "Success
";
        // enabling passive mode
        ftp_pasv( $conn_id, true );
        // get contents of the current directory
        $contents = ftp_nlist($conn_id, $path);
        // output $contents
        var_dump($contents);
    }

    // close the FTP connection
    ftp_close($conn_id);

    ?>

any idea what I'm doing wrong? it always returns "Success bool(false)"! So the connection is working, however the files won't get listed. Any ideas?
regards

A:
what I'm doing wrong?

you've lack of debugging.
checking only connect result is not enough. have to check every operation as well.
did ftp_pasv() worked?
is there /userupload dir?

A: what Shrapnel is saying is you can have more debugging than youve got if you've got
//enabling passive mode
ftp_pasv( $conn_id, true );
then you can use if(ftp_pasv( $conn_id, true )){// it worked :) }else{// it didnt work :( }
But what I think is wrong is your path, if the home folder of your ftp user lands them inside here /useruploads/im here then to list the files your path should be  $path='/'; otherwise what your telling the ftp to do is list the directory "useruploads/useruploads" which isnt going to exist.

redpajama_set_name: RedPajamaStackExchange