Mercurial > ift6266
annotate transformations/DistorsionGauss.py @ 104:fe6f96951ed1
corrige nom de la methode get_settings_names_determined_by_complexity(self,complexity)
author | SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca> |
---|---|
date | Fri, 12 Feb 2010 10:21:21 -0500 |
parents | e352a98fcc0a |
children | 901ab3329064 |
rev | line source |
---|---|
47
3bc75139654a
Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff
changeset
|
1 #!/usr/bin/python |
3bc75139654a
Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff
changeset
|
2 # coding: utf-8 |
3bc75139654a
Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff
changeset
|
3 |
3bc75139654a
Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff
changeset
|
4 ''' |
3bc75139654a
Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff
changeset
|
5 Ajout d'une composante aleatoire dans chaque pixel de l'image. |
3bc75139654a
Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff
changeset
|
6 C'est une distorsion gaussienne de moyenne 0 et d'écart type complexity/10 |
3bc75139654a
Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff
changeset
|
7 |
90
e352a98fcc0a
Il y a maintenant une proba de 0.3 d'effectuer le bruitage. De plus, comme cette nouvelle fonctionnalite demande un parametre non-deterministe, les deux fonctions 'determined_by_complexity' ont ete enlevees. Le module se comporte comme un module conventionnel
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
77
diff
changeset
|
8 Il y a 30% d'effectuer le bruitage |
e352a98fcc0a
Il y a maintenant une proba de 0.3 d'effectuer le bruitage. De plus, comme cette nouvelle fonctionnalite demande un parametre non-deterministe, les deux fonctions 'determined_by_complexity' ont ete enlevees. Le module se comporte comme un module conventionnel
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
77
diff
changeset
|
9 |
47
3bc75139654a
Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff
changeset
|
10 Sylvain Pannetier Lebeuf dans le cadre de IFT6266, hiver 2010 |
3bc75139654a
Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff
changeset
|
11 |
3bc75139654a
Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff
changeset
|
12 ''' |
3bc75139654a
Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff
changeset
|
13 |
3bc75139654a
Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff
changeset
|
14 import numpy |
3bc75139654a
Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff
changeset
|
15 import random |
3bc75139654a
Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff
changeset
|
16 |
3bc75139654a
Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff
changeset
|
17 class DistorsionGauss(): |
3bc75139654a
Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff
changeset
|
18 |
3bc75139654a
Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff
changeset
|
19 def __init__(self): |
3bc75139654a
Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff
changeset
|
20 self.ecart_type=0.1 #L'ecart type de la gaussienne |
90
e352a98fcc0a
Il y a maintenant une proba de 0.3 d'effectuer le bruitage. De plus, comme cette nouvelle fonctionnalite demande un parametre non-deterministe, les deux fonctions 'determined_by_complexity' ont ete enlevees. Le module se comporte comme un module conventionnel
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
77
diff
changeset
|
21 self.effectuer=1 #1=on effectue et 0=rien faire |
47
3bc75139654a
Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff
changeset
|
22 |
3bc75139654a
Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff
changeset
|
23 def get_settings_names(self): |
90
e352a98fcc0a
Il y a maintenant une proba de 0.3 d'effectuer le bruitage. De plus, comme cette nouvelle fonctionnalite demande un parametre non-deterministe, les deux fonctions 'determined_by_complexity' ont ete enlevees. Le module se comporte comme un module conventionnel
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
77
diff
changeset
|
24 return ['ecart_type','effectuer'] |
77
aee278ebc827
Mise a niveau specifications parametres deterministes et nouvelle normalisation des images
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
47
diff
changeset
|
25 |
90
e352a98fcc0a
Il y a maintenant une proba de 0.3 d'effectuer le bruitage. De plus, comme cette nouvelle fonctionnalite demande un parametre non-deterministe, les deux fonctions 'determined_by_complexity' ont ete enlevees. Le module se comporte comme un module conventionnel
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
77
diff
changeset
|
26 ## def get_settings_name_determined_by_complexity(self): |
e352a98fcc0a
Il y a maintenant une proba de 0.3 d'effectuer le bruitage. De plus, comme cette nouvelle fonctionnalite demande un parametre non-deterministe, les deux fonctions 'determined_by_complexity' ont ete enlevees. Le module se comporte comme un module conventionnel
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
77
diff
changeset
|
27 ## return ['ecart_type'] |
47
3bc75139654a
Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff
changeset
|
28 |
3bc75139654a
Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff
changeset
|
29 def regenerate_parameters(self, complexity): |
3bc75139654a
Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff
changeset
|
30 self.ecart_type=float(complexity)/10 |
90
e352a98fcc0a
Il y a maintenant une proba de 0.3 d'effectuer le bruitage. De plus, comme cette nouvelle fonctionnalite demande un parametre non-deterministe, les deux fonctions 'determined_by_complexity' ont ete enlevees. Le module se comporte comme un module conventionnel
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
77
diff
changeset
|
31 self.effectuer =numpy.random.binomial(1,0.3) ##### On a 30% de faire un bruit ##### |
47
3bc75139654a
Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff
changeset
|
32 return self._get_current_parameters() |
3bc75139654a
Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff
changeset
|
33 |
3bc75139654a
Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff
changeset
|
34 def _get_current_parameters(self): |
90
e352a98fcc0a
Il y a maintenant une proba de 0.3 d'effectuer le bruitage. De plus, comme cette nouvelle fonctionnalite demande un parametre non-deterministe, les deux fonctions 'determined_by_complexity' ont ete enlevees. Le module se comporte comme un module conventionnel
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
77
diff
changeset
|
35 return [self.ecart_type,self.effectuer] |
47
3bc75139654a
Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff
changeset
|
36 |
90
e352a98fcc0a
Il y a maintenant une proba de 0.3 d'effectuer le bruitage. De plus, comme cette nouvelle fonctionnalite demande un parametre non-deterministe, les deux fonctions 'determined_by_complexity' ont ete enlevees. Le module se comporte comme un module conventionnel
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
77
diff
changeset
|
37 ## def get_parameters_determined_by_complexity(self, complexity): |
e352a98fcc0a
Il y a maintenant une proba de 0.3 d'effectuer le bruitage. De plus, comme cette nouvelle fonctionnalite demande un parametre non-deterministe, les deux fonctions 'determined_by_complexity' ont ete enlevees. Le module se comporte comme un module conventionnel
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
77
diff
changeset
|
38 ## return [float(complexity)/10] |
47
3bc75139654a
Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff
changeset
|
39 |
3bc75139654a
Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff
changeset
|
40 def transform_image(self, image): |
90
e352a98fcc0a
Il y a maintenant une proba de 0.3 d'effectuer le bruitage. De plus, comme cette nouvelle fonctionnalite demande un parametre non-deterministe, les deux fonctions 'determined_by_complexity' ont ete enlevees. Le module se comporte comme un module conventionnel
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
77
diff
changeset
|
41 if self.effectuer == 0: |
e352a98fcc0a
Il y a maintenant une proba de 0.3 d'effectuer le bruitage. De plus, comme cette nouvelle fonctionnalite demande un parametre non-deterministe, les deux fonctions 'determined_by_complexity' ont ete enlevees. Le module se comporte comme un module conventionnel
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
77
diff
changeset
|
42 return image |
e352a98fcc0a
Il y a maintenant une proba de 0.3 d'effectuer le bruitage. De plus, comme cette nouvelle fonctionnalite demande un parametre non-deterministe, les deux fonctions 'determined_by_complexity' ont ete enlevees. Le module se comporte comme un module conventionnel
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
77
diff
changeset
|
43 |
47
3bc75139654a
Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff
changeset
|
44 image=image.reshape(1024,1) |
3bc75139654a
Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff
changeset
|
45 aleatoire=numpy.zeros((1024,1)).astype('float32') |
3bc75139654a
Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff
changeset
|
46 for i in xrange(0,1024): |
3bc75139654a
Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff
changeset
|
47 aleatoire[i]=float(random.gauss(0,self.ecart_type)) |
3bc75139654a
Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff
changeset
|
48 image=image+aleatoire |
3bc75139654a
Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff
changeset
|
49 |
77
aee278ebc827
Mise a niveau specifications parametres deterministes et nouvelle normalisation des images
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
47
diff
changeset
|
50 |
aee278ebc827
Mise a niveau specifications parametres deterministes et nouvelle normalisation des images
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
47
diff
changeset
|
51 #Ramener tout entre 0 et 1. Ancienne facon de normaliser. |
aee278ebc827
Mise a niveau specifications parametres deterministes et nouvelle normalisation des images
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
47
diff
changeset
|
52 #Resultats moins interessant je trouve. |
aee278ebc827
Mise a niveau specifications parametres deterministes et nouvelle normalisation des images
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
47
diff
changeset
|
53 ## if numpy.min(image) < 0: |
aee278ebc827
Mise a niveau specifications parametres deterministes et nouvelle normalisation des images
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
47
diff
changeset
|
54 ## image-=numpy.min(image) |
aee278ebc827
Mise a niveau specifications parametres deterministes et nouvelle normalisation des images
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
47
diff
changeset
|
55 ## if numpy.max(image) > 1: |
aee278ebc827
Mise a niveau specifications parametres deterministes et nouvelle normalisation des images
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
47
diff
changeset
|
56 ## image/=numpy.max(image) |
aee278ebc827
Mise a niveau specifications parametres deterministes et nouvelle normalisation des images
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
47
diff
changeset
|
57 |
aee278ebc827
Mise a niveau specifications parametres deterministes et nouvelle normalisation des images
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
47
diff
changeset
|
58 for i in xrange(0,1024): |
aee278ebc827
Mise a niveau specifications parametres deterministes et nouvelle normalisation des images
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
47
diff
changeset
|
59 image[i]=min(1,max(0,image[i])) |
47
3bc75139654a
Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff
changeset
|
60 |
3bc75139654a
Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff
changeset
|
61 return image.reshape(32,32) |
3bc75139654a
Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff
changeset
|
62 |
3bc75139654a
Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff
changeset
|
63 |
3bc75139654a
Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff
changeset
|
64 #---TESTS--- |
3bc75139654a
Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff
changeset
|
65 |
3bc75139654a
Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff
changeset
|
66 def _load_image(): |
3bc75139654a
Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff
changeset
|
67 f = open('/home/sylvain/Dropbox/Msc/IFT6266/donnees/lower_test_data.ft') #Le jeu de donnees est en local. |
3bc75139654a
Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff
changeset
|
68 d = ft.read(f) |
3bc75139654a
Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff
changeset
|
69 w=numpy.asarray(d[random.randint(0,100)]) |
3bc75139654a
Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff
changeset
|
70 return (w/255.0).astype('float') |
3bc75139654a
Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff
changeset
|
71 |
3bc75139654a
Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff
changeset
|
72 def _test(complexite): |
3bc75139654a
Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff
changeset
|
73 img=_load_image() |
3bc75139654a
Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff
changeset
|
74 transfo = DistorsionGauss() |
3bc75139654a
Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff
changeset
|
75 pylab.imshow(img.reshape((32,32))) |
3bc75139654a
Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff
changeset
|
76 pylab.show() |
3bc75139654a
Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff
changeset
|
77 print transfo.get_settings_names() |
3bc75139654a
Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff
changeset
|
78 print transfo.regenerate_parameters(complexite) |
3bc75139654a
Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff
changeset
|
79 |
3bc75139654a
Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff
changeset
|
80 img_trans=transfo.transform_image(img) |
3bc75139654a
Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff
changeset
|
81 |
3bc75139654a
Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff
changeset
|
82 pylab.imshow(img_trans.reshape((32,32))) |
3bc75139654a
Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff
changeset
|
83 pylab.show() |
3bc75139654a
Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff
changeset
|
84 |
3bc75139654a
Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff
changeset
|
85 |
3bc75139654a
Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff
changeset
|
86 if __name__ == '__main__': |
3bc75139654a
Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff
changeset
|
87 from pylearn.io import filetensor as ft |
3bc75139654a
Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff
changeset
|
88 import pylab |
3bc75139654a
Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff
changeset
|
89 for i in xrange(0,5): |
77
aee278ebc827
Mise a niveau specifications parametres deterministes et nouvelle normalisation des images
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
47
diff
changeset
|
90 _test(0.5) |
47
3bc75139654a
Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff
changeset
|
91 |
3bc75139654a
Ajout d'un petit bruit gaussien sur chaque pixel de l'image.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff
changeset
|
92 |