Skip to the Main Content

Note:These pages make extensive use of the latest XHTML and CSS Standards. They ought to look great in any standards-compliant modern browser. Unfortunately, they will probably look horrible in older browsers, like Netscape 4.x and IE 4.x. Moreover, many posts use MathML, which is, currently only supported in Mozilla. My best suggestion (and you will thank me when surfing an ever-increasing number of sites on the web which have been crafted to use the new standards) is to upgrade to the latest version of your browser. If that's not possible, consider moving to the Standards-compliant and open-source Mozilla browser.

March 9, 2023

Cloning in Classical Mechanics

Posted by John Baez

Everyone likes to talk about the no-cloning theorem in quantum mechanics: you can’t build a machine where you drop an electron in the top and two electrons in the same spin state as that one pop out below. This is connected to how the category of Hilbert spaces, with its usual tensor product, is non-cartesian.

Here are two easy versions of the no-cloning theorem. First, if the dimension of a Hilbert space HH exceeds 1 there’s no linear map that duplicates states:

Δ: H HH ψ ψψ \begin{array}{cccl} \Delta \colon & H & \to & H \otimes H \\ & \psi & \mapsto & \psi \otimes \psi \end{array}

Second, there’s also no linear way to take two copies of a quantum system and find a linear process that takes the state of the first copy and writes it onto the second, while leaving the first copy unchanged:

F: HH HH ψϕ ψψ \begin{array}{cccl} F \colon & H \otimes H & \to & H \otimes H \\ & \psi \otimes \phi & \mapsto & \psi \otimes \psi \end{array}

But what about classical mechanics?

We often describe the space of states of a classical system using a symplectic or Poisson manifold. But just like the category of Hilbert spaces, the categories of symplectic or Poisson manifolds are not cartesian!

When teaching a course on classical mechanics in 2008, this observation led me to suggest that cloning isn’t possible in classical mechanics, either. In my course notes the last sentences are:

I believe the non-Cartesian nature of this product means there’s no classical machine that can ‘duplicate’ states of a classical system:

[picture of classical machine where you feed a system into the hamper and two identical copies come out the bottom]

But, strangely, this issue has been studied less than in the quantum case!

Aaron Fenyes contacted me about this, and in 2010 he came out with a paper studying the issue:

Abstract. In this paper, we show that a result precisely analogous to the traditional quantum no-cloning theorem holds in classical mechanics. This classical no-cloning theorem does not prohibit classical cloning, we argue, because it is based on a too-restrictive definition of cloning. Using a less popular, more inclusive definition of cloning, we give examples of classical cloning processes. We also prove that a cloning machine must be at least as complicated as the object it is supposed to clone.

Feynes’s idea is that yes, if XX is a symplectic manifold of dimension > 0 it’s impossible to find a symplectomorphism FF that does this:

F: X×X X×X (x,y) (x,x) \begin{array}{cccl} F \colon & X \times X & \to & X \times X \\ & (x,y) & \mapsto & (x,x) \end{array}

But suppose we use a more general definition of cloning where we allow another system to get involved — the ‘cloning machine’, with its own symplectic manifold of states MM, and look for a symplectomorphism

F:M×X×XM×X×X F \colon M \times X \times X \to M \times X \times X

that copies any state xx in the first copy of our original system if the machine starts out in the right state mMm \in M and the second copy of our system starts out in the right state xXx' \in X. That is, for some mMm \in M and xXx' \in X and some function f:XMf \colon X \to M we have

F(m,x,x)=(f(x),x,x)() F(m,x,x') = (f(x), x, x) \qquad \qquad (\star)

for all xXx \in X.

With this definition, Feynes shows that cloning is possible classically — at least under some conditions on MM and XX. For example, he shows the dimension of MM must be at least the dimension of XX. That is, very roughly speaking, the machine needs to be at least as complex as the system it’s cloning!

But the analogous sort of cloning is not possible quantum mechanically. So there’s a real difference between classical and quantum mechanics, when it comes to cloning!

At the end of February, Yuan Yao contacted me with some new ideas on this issue. He had a nice result and I asked if he could generalize it. He did, and here it is:

Yao’s idea is to demand that our cloning map

F:M×X×XM×X×X F \colon M \times X \times X \to M \times X \times X

not only obeys ()(\star) but is connected to the identity by a continuous 1-parameter family of symplectomorphisms. This is saying we can accomplish the cloning by a continuous process of time evolution — a very natural constraint to consider, physically speaking. And Yao shows that if this is true, the space XX needs to be contractible!

In short, only classical systems with a topologically trivial space of states can be cloned using a continuous process.

An interesting fact about Yao’s result is that it doesn’t really use symplectic geometry — only topology. In other words, we could replace symplectic manifolds by manifolds, and symplectomorphisms by diffeomorphisms, and the result would still hold.

All this suggests that classical cloning is a deeper subject than I thought. There’s probably a lot more left to discover. Yao has some suggestions for further research. And for a careful analysis of some of these issues, read this:

Maybe I can push things forward by formulating a challenge:

The Classical Cloning Challenge. Define a smooth cloning machine to consist of smooth manifolds MM and XX and a diffeomorphism

F:M×X×XM×X×X F \colon M \times X \times X \to M \times X \times X

such that for some mMm \in M and xXx' \in X and some function f:XMf \colon X \to M we have

F(m,x,x)=(f(x),x,x) F(m,x,x') = (f(x), x, x)

for all xXx \in X. Define a symplectic cloning machine to be a smooth cloning machine where MM and XX are symplectic manifolds and FF is a symplectomorphism.

1) Find necessary and/or sufficient conditions on smooth manifolds MM and XX for there to exist a smooth cloning machine such that FF is connected to the identity in the group of diffeomorphisms of M×X×XM \times X \times X.

2) Find necessary and/or sufficient conditions on symplectic manifolds MM and XX for there to exist a symplectic cloning machine.

3) Find necessary and/or sufficient conditions on symplectic manifolds MM and XX for there to exist a symplectic cloning machine such that FF is connected to the identity in the group of symplectomorphisms of M×X×XM \times X \times X.

I’m also interested in Poisson manifolds because they include symplectic manifolds and plain old smooth manifolds as special cases: a Poisson manifold with nondegenerate Poisson tensor is a symplectic manifold, while any smooth manifold becomes a Poisson manifold with vanishing Poisson tensor. I expect that cloning becomes easier when the Poisson tensor has more degenerate directions, and easiest of all when it’s zero.

So, define a Poisson cloning machine to be a smooth cloning machine where MM and XX are Poisson manifolds and FF is an invertible Poisson map.

4) Find necessary and/or sufficient conditions on Poisson manifolds MM and XX for there to exist a Poisson cloning machine.

5) Find necessary and/or sufficient conditions on Poisson manifolds MM and XX for there to exist a Poisson cloning machine such that FF is connected to the identity in the group of Poisson diffeomorphisms of M×X×XM \times X \times X.

Posted at March 9, 2023 5:50 AM UTC

TrackBack URL for this Entry:   https://golem.ph.utexas.edu/cgi-bin/MT-3.0/dxy-tb.fcgi/3458

27 Comments & 0 Trackbacks

Re: Cloning in Classical Mechanics

Small correction: it should be f:XMf:X \to M.

Posted by: Andrei on March 9, 2023 9:10 AM | Permalink | Reply to this

Re: Cloning in Classical Mechanics

Thanks — fixed!

Posted by: John Baez on March 9, 2023 5:42 PM | Permalink | Reply to this

Re: Cloning in Classical Mechanics

The starred equation should not have FF applied to the righthand side? (unless i’m misunderstanding the notation)

Posted by: grad_student on March 9, 2023 7:42 PM | Permalink | Reply to this

Re: Cloning in Classical Mechanics

You’re right! Thanks for catching that horrible typo. You understood what I was trying to say.

Posted by: John Baez on March 9, 2023 9:19 PM | Permalink | Reply to this

Re: Cloning in Classical Mechanics

Here is a simple observation that follows easily from Fenyes and Yao. Let (X,ω)(X,\omega) be a compact symplectic manifold with some topology (say S 2S^2 or the finite cylinder). We know a direct cloning is not possible (I shall always mean cloning by a Hamiltonian), however, we can make do with weaker notions of cloning. I call the following a ‘transient cloning”

I can find a large integer NN, so that if I have NN cloning machines M NM^N in states (m 1,,m N)M N(m_1,\dots,m_N) \in M^N, with NN prepared particles (x 1,.,x N)X N(x_1,\dots.,x_N)\in X^N, so that the following is true. I can turn on a time dependent Hamiltonian on X×(X) N×(M) NX \times (X)^N \times (M)^N so that for any state xXx\in X that I want cloned, at times t=1,2,,Nt=1,2,\dots,N, the time evolution map ϕ t\phi_t leaves xx as is (i.e. at times t=1,,Nt=1,\dots,N the time evolution preserves the particle I want cloned at xx). Let x i(t)x_i(t) denote the position of the prepared particles at time tt under the time evolution, then at least one of x 1(1)x_1(1), x 2(2)x_2(2), … ,x N(N)x_N(N) is equal to xx.

In other words, I can always have a cloning, but I can’t tell in advance which of my prepared particles is doing the cloning, and the cloning process only happens at fixed times before the system evolves to something else (i.e. it is transient).

The proof of this is very simple (and I’ll be slightly sketchy). In symplectic geometry there are no local invariants, so I can choose a large NN so that my symplectic manifold is covered by NN balls of radius 1 that are symplectomorphic to standard balls in R 2nR^{2n}. I call these balls B jB_j where j=1,,Nj=1, \dots,N. We know from Fenyes these balls can always be cloned (by Hamiltonians). Hence we pick m jB jm_j \in B_j. So from t[0,1]t \in [0,1] I turn on a Hamiltonian that clones B 1B_1 using prepared particle x 1x_1, so that if xB 1x\in B_1 it will be cloned by the first prepared particle at t=1t=1. Then since Hamiltonian evolution is reversible, in the time interval [1,2] I first undo the time evolution in [0,1][0,1], and turn on a Hamiltonian that clones B 2B_2 with the second particle, so that if xB 2x \in B_2, at t=2t=2 the second particle x 2(2)=xx_2(2)=x and has completed a cloning etc etc

The significance of the above cloning process is the following. If somebody outside of the interacting system and the cloning machine has some apriori knowledge of where xx is, say for example they knew xB 3x\in B_3 (this is a lot less information than knowing where xx precisely is), then at time t=3t=3 they can turn off the cloning machine and take particle 3, and have successfully performed a cloning.

(BTW the minimal possible integer N in the above process is in some sense a measure of the symplectic complexity of the manifold X).

Quick questions:

Q0) Can I strengthen the above process —for instance make it so that I can just examine the particles x 1,x 2,x_1,x_2, \dots at final time TT instead of during the middle of the cloning process?

Q1) Poisson manifolds have more interesting local geometry than symplectic manifolds; can the above still be performed for Poisson manifolds?

Q2) (This question is much more speculative and may just be hogwash to experts.) There is no direct cloning in QM (or statistical mechanics for instance), but can something analogous to transient cloning still be possible? If so, does this tell us anything about cloning information?

Posted by: Y on March 11, 2023 9:38 PM | Permalink | Reply to this

Re: Cloning in Classical Mechanics

These are interesting questions! I don’t have enough energy right now to think about them hard and try to answer them. But I hope someone tries all our questions.

Posted by: John Baez on March 12, 2023 12:38 AM | Permalink | Reply to this

Re: Cloning in Classical Mechanics

The correct question is NOT “no cloning”. Rather, it is “no broadcasting”. There is a no broadcasting theorem in quantum mechanics, but broadcasting is possible in classical mechanics.

Posted by: matt on March 13, 2023 9:37 PM | Permalink | Reply to this

Re: Cloning in Classical Mechanics

I assume that by “the correct question” you meant “the question I consider more important”.

As the work so far has shown, cloning in classical mechanics is an interesting subject. So I don’t think the questions I posed about it are “incorrect”, even if some other question is more interesting to someone else.

Posted by: John Baez on March 13, 2023 10:56 PM | Permalink | Reply to this

Re: Cloning in Classical Mechanics

Interestingly, broadcasting is also possible in odd prime qudit stabilizer quantum mechanics because it mimics classical mechanics. This is closely related to the non-negativity of the Wigner function.

Posted by: Cole Comfort on March 18, 2023 4:48 PM | Permalink | Reply to this

Re: Cloning in Classical Mechanics

I don’t think that’s quite right. Density matrices can be broadcast if and only if they commute, and qudit states with nonnegative Wigner representations do not have to commute. For example, take a qutrit. The pure states with nonnegative Wigner functions are a set of four mutually unbiased bases, which we can think of as probability distributions over a 3×33 \times 3 grid. Each way of carving up the grid into parallel lines (horizontals, verticals, left diagonals and right diagonals) gives an orthonormal basis. One of them is the computational basis, and another is the eigenbasis of the cyclic shift operator. Let |ψ=(1 0 0), |\psi \rangle = \begin{pmatrix} 1 \\ 0 \\ 0 \end{pmatrix}, and |ϕ=13(1 1 1).|\phi \rangle = \frac{1}{\sqrt{3}} \begin{pmatrix} 1 \\ 1 \\ 1 \end{pmatrix} . The vector |ψ |\psi \rangle belongs to the former basis, and |ϕ |\phi \rangle belongs to the latter. The commutator of the projectors onto these vectors is nonzero. The conclusion is not that states that look like classical probability distributions can be broadcast, but rather that a classical theory also has a no-broadcasting theorem if the probability distributions are kept from being too focused.

Posted by: Blake Stacey on March 18, 2023 7:18 PM | Permalink | Reply to this

Re: Cloning in Classical Mechanics

There’s a brief discussion of no-broadcasting for the continuous case in Bartlett, Rudolph and Spekkens (2012).

Posted by: Blake Stacey on March 18, 2023 7:28 PM | Permalink | Reply to this

Re: Cloning in Classical Mechanics

Why is it that in quantum computers, they need to employ complicated tricks to get around the quantum no-cloning theorem

https://www.sciencedirect.com/topics/engineering/cloning-theorem

but with classical computers they do not seem to have to do anything equivalent to get around the classical no-cloning theorem?

Posted by: Jeffery Winkler on March 15, 2023 8:45 PM | Permalink | Reply to this

Re: Cloning in Classical Mechanics

Good question, and someone should write a paper about it!

First, the most commonly available so-called ‘classical computers’ use transistors that rely on quantum mechanics. In fact, I’ve never seen anyone describe a working digital computer that uses machinery completely described by classical mechanics! It could be possible to build such a thing, but that’s not what they sell in stores.

And that hints at this more fundamental point: the word ‘classical’ means different things in the phrases ‘classical computing’ and ‘classical mechanics’:

  1. The standard model of ‘classical computing’ is a Turing machine, which is assumed to have a discrete set of states, with time evolution occurring in discrete time steps. In this paradigm the ability to duplicate data (e.g. copy the data from one part of the tape to another) is just assumed from the start.

  2. The standard model of a ‘classical system’ in ‘classical mechanics’ is a continuous set of states, e.g. a symplectic manifold, with time evolution being continuous: that is, a 1-parameter family of symplectomorphisms, described e.g. by the time-dependent Hamilton’s equations. In this paradigm the ability to duplicate data becomes an interesting question: can we do it at all, what are the limitations, etc.

There’s more to say, but I want to emphasize that my post is all about 2. and not at all about 1.

(There’s also ‘classical music’….)

Posted by: John Baez on March 15, 2023 11:39 PM | Permalink | Reply to this

Re: Cloning in Classical Mechanics

(There’s also ‘classical music’….)

Etc., etc.

Posted by: Mark Meckes on March 16, 2023 1:27 AM | Permalink | Reply to this

Re: Cloning in Classical Mechanics

I was actually thinking about this. I am bothered by the fact that somehow a very classical process of reproducing information is prohibited in Hamiltonian mechanics.

Some more speculation (which might also just be hogwash) If I think of classical computer as a discrete of set of states, then I can mechanically model them as a set of coins lying heads or tails lying on a table. Then I can obviously take a look at this system and clone it. I think one factor may be presence of dissipation. i.e. if I physically flip a coin (and do it carefully), it will bounce a little but eventually all the energy will dissipate and it will rest into its flipped state. However it’s hard to write down a Hamiltonian that will model this process (especially if it conserved energy, the coin the bounce indefinitely unless coupled to another system, and it’s probably very hard to write down a coupling Hamiltonian so that after finite time all the “bouncing energy” will be absorbed by this other system and the coin stops bouncing).

Even more speculative hogwash - maybe it has been answered before: So if we allow dissipation in QM (by coupling to a classical system say, can we have cloning?)

Posted by: Y on March 16, 2023 5:21 AM | Permalink | Reply to this

Re: Cloning in Classical Mechanics

Actually the analogy I gave with coins on tables isn’t great - you can always clone individual points in phase space. Sorry I’ve been confused about this, and hence the lack of coherence…

Posted by: Y on March 16, 2023 5:37 AM | Permalink | Reply to this

Re: Cloning in Classical Mechanics

I promise this will be my last post, feel free to remove the previous two if they are too spam (and wrong in many respects). But this does answer the question. How does the way a computer clones information fit into the context of the no cloning theorem in Hamiltonian mechanics?

I think of a computer a set of coins on a table that are either heads or tails. Here’s the thing: if I knew at time =0 my set of states will be coins that are heads or tails at prescribed locations, then I can write down a Hamiltonian to clone it. This is the fact that on a symplectic manifold, you can use a Hamiltonian to move any finite set of discrete points to another finite set of discrete points.

I can do slightly better, if I knew at time=0 the set of initial states is very close to coins that are heads or tails in phase space (they are allowed to have very small velocities), I can also clone it using a Hamiltonian (this is basically Fenyes’ result). The issue arises if at T =0 the set of possible initial states are scattered all over phase space, then there are topological obstructions. But if I had very good apriori knowledge of where my states have to be (for instance in a computer my states are always very close to head or tails), then I can clone.

Posted by: Y on March 16, 2023 6:09 AM | Permalink | Reply to this

Dan

There’s another classical no-cloning theorem that is maybe too obvious to be worth mentioning - but is formally close to the QM case.

Suppose someone has some procedure that tosses a coin so that it has probability p of coming up heads. They are going to hand you the coin so you can study it any way you want. There is no procedure you can go through that will enable you to just study the coin and make another coin that independently has probability p of coming up heads. You can certainly define a procedure that gives another coin the marginal probability p of coming up heads - just agree that you’re going to duplicate the head/tails state of the first coin. But it’s not independent.

Posted by: Dan Piponi on March 31, 2023 7:59 PM | Permalink | Reply to this

Dan

There’s another classical no-cloning theorem that is maybe too obvious to be worth mentioning - but is formally close to the QM case.

Suppose someone has some procedure that tosses a coin so that it has probability p of coming up heads. They are going to hand you the coin so you can study it any way you want. There is no procedure you can go through that will enable you to just study the coin and make another coin that independently has probability p of coming up heads. You can certainly define a procedure that gives another coin the marginal probability p of coming up heads - just agree that you’re going to duplicate the head/tails state of the first coin. But it’s not independent.

Posted by: Dan Piponi on March 31, 2023 8:00 PM | Permalink | Reply to this

Re: Dan

Must…resist…temptation…to…make joke…about how the n-Cat cafe needs a no-clone theorem of its own.

Posted by: Dan Piponi on March 31, 2023 8:02 PM | Permalink | Reply to this

Re: Dan

I’m puzzled as to what this could mean. It seems to imply that if someone has a coin that comes up heads with probability 1/2, then nobody else can ever have such a coin independent of the first one. That doesn’t seem right. Would you point to an exact statement and proof, please?

Posted by: James Sheppard on April 2, 2023 6:45 AM | Permalink | Reply to this

Re: Classical probabilistic no-clone

There’s no machine that takes as inputs qubits a|0>+b|1> (with unknown a and b) and always outputs two qubits in that state, ie. the state a^2|00>+ab|01>+ab|10>+b^2|11>.

There’s no machine that can take as input coins in boxes whose state is unknown (but with unknown probability p of being heads, 1-p of being tails) and output two coins in boxes with each coin (independently) having probability p of being heads.

All the machine can do is look at the coin and see if it’s heads or tails. Based on this it can produce (possibly non-deterministically) one of 4 outputs (heads, heads), (heads, tails), (tails, heads), (tails, tails), possibly randomly. Let’s say if the input is a, it produces output (b,c) with probability f(a,b,c). If the input has probability p of being heads and 1-p of being tails, then the probability of getting output (b,c) is pf(head,b,c)+(1-p)f(tail,b,c). No choice of function f can ever result in the probabilities p^2 of getting (head,head), (1-p)^2 of getting (tail, tail), etc. corresponding to to two coins with independent distributions matching the original coin. It’s a similar argument as for the qubit case.

Posted by: Dan on April 4, 2023 1:56 AM | Permalink | Reply to this

Re: Classical probabilistic no-clone

Thanks for that, although I prefer not to use the word “machine” in this context, and talk instead about mathematical functions. In this language, the quantum no-cloning theorem says that there’s no unitary (linear) function on a tensor product of an input qbit state space with basis |0>,|1>, an output qbit state space with similar basis and an arbitrary state space whose (component on the) output state is always a copy of the input state.

For the classical analogue, we need to know what a “coin” is. If we interpret it as a function on the natural numbers to the set {H,T}, drawn randomly in such a way that successive function values are independent and take the value H with probability p, then a no-cloning theorem would say that there is no function on the set of all “coins” to the space of pair of coins which produces two coins each of which is a copy of the input.

But in that formulation the result is false. If c is the input coin, then the output (d1,d2), where d1(n) = c(2n) and d2(n) = c(2n+1), instantiates a cloning function.

So we need to be precise about what we mean by a “coin” here.

Posted by: James Sheppard on April 6, 2023 10:28 AM | Permalink | Reply to this

Re: Classical probabilistic no-clone

Come to think of it, there’s another challenge to the idea of a no-cloning theorem which occurs to me re-reading this discussion. That is: what does it mean to not have a clone? To take the classical case, suppose you show me a coin which has probability, known to you but not to me, of showing H. You allow me to observe that in one particular case it shows H. I reply with a coin that has probability 1 of showing H; I throw it, and it duly lands H. I assert that this is a clone of your coin. How are you going to refute that claim: indeed, what does it mean to refute it? The two coins have exhibited exactly the same behaviour.

One obvious answer, of course, involves throwing each coin repeatedly and observing that they have different behaviours in the long run – but even that is merely a statistical refutation. And if we believe that it’s an essential part of being a coin that it can be thrown repeatedly, we are back to the discussion of my previous post.

We might similarly challenge what it means to refute the claim that a given quantum circuit clones a qbit. What experiment would we do to show that a given machine is not cloning bits? And if there is no such conceivable experiment, we have to challenge whether the unitary-operator-on-Hilbert-space model has completely captured our intuition about these experiments.

Posted by: James Sheppard on April 6, 2023 10:49 AM | Permalink | Reply to this

Re: Classical probabilistic no-clone

What experiment would we do to show that a given machine is not cloning bits?

Historically the no-clone theorem emerged from a design for a faster-than-light communication device.

http://kirkmcd.princeton.edu/examples/cloning.pdf

One observable consequence of the no-clone theorem is that this device doesn’t work :) It does relying on cloning to allow you to make multiple observations of the same bit.

Posted by: Dan Piponi on April 18, 2023 12:29 AM | Permalink | Reply to this

Re: Classical probabilistic no-clone

I don’t think that’s quite the answer I was looking for. I should say, before we start, that I’m not claiming that I can clone bits, or send information faster than light, or anything like that. I’m just trying to elucidate what the meanings of cloning in the mathematical and physical sense are. The reference cited says, roughly, if we can clone a bit entangled with some other bit many times, then we can use them to do something which we believe to be impossible. That’s an argument, but not an experiment: and it’s about something more complicated than simple cloning. If cloning is such a simple concept, surely we can think of an experiment that would distinguish a cloned pair of qbits from an uncloned pair?

Posted by: James Sheppard on April 18, 2023 9:15 AM | Permalink | Reply to this

Re: Classical probabilistic no-clone

James wrote:

If cloning is such a simple concept, surely we can think of an experiment that would distinguish a cloned pair of qubits from an uncloned pair?

Cloning is a mathematically simple concept, and it is fairly easy to prove mathematically that there’s no quantum process that clones qubits. But because quantum mechanics only predicts probabilities of experimental outcomes, not specific outcomes, it is often hard to experimentally test mathematically simple claims about quantum mechanics.

So, before tackling your challenge it’s good to think about a preliminary one. Mathematically, the state of a qubit is a unit vector in 2\mathbb{C}^2, modulo phase. Experimentally, if you have a qubit, how can you determine what state it’s in? This challenge is called quantum tomography.

Limitations on whether we can experimentally determine what state a qubit is in may give limitations on whether we can experimentally determine whether two qubits are in the same state!

Posted by: John Baez on April 18, 2023 6:26 PM | Permalink | Reply to this

Post a New Comment