elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado:


  Mostrar Mensajes
Páginas: 1 ... 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 [146] 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 ... 432
1451  Foros Generales / Foro Libre / Re: [2020] Consejos de Chema Alonso: 10 libros para hackers en: 24 Mayo 2020, 00:30 am
Ummm, posiblemente en la actualidad debas comprarte un libro, pero en otro tiempo no fue así, en los 80 los libros llegaban tarde, si llegaban y los lenguajes que usabamos en aquella época solo podias aprenderlos y practicarlos mediante revistas de informatica, cada semana en el quiosco, las revistas estaban al dia, los libros no.

Muchos libros y revistas tecnicas teniamos que ir a Londres a buscarlos para saber como eran las tripas de un Z 80...... :rolleyes:
Bueno, todo era cuestión de tirar del hilo.
Yo pedí a un amigo que se iba de vacaciones con su padre que trabajaba en Inglaterra (allá por el 70ytantos), que me trajera media docena (hasta donde llegara el presupuesto que le dí) de buenos libros... y a partir de ahí, fuí tirando de otros títulos de la editorial, de las referencias...
...y no en vano (por ejemplo hablando del ZX) tengo más de 100 libros dedicados solo al ZX-Spectrum. Amén de otros muchos de diversidad temática.
Más adelante logré encontrar alguna que otra librería técnica (al preguntar directamente a la editorial Anaya).

Si coincido que la publicación (de autores locales) de material técnico de calidad, no abundaba. Pero todavía había traducciones y por supuesto las sempiternas revistas. Lo difícil de las revistas es que salvo que te suscribieras, era (según donde vivieras), imposible que llegaran todas. Era muy típico que el contenido de una no era del todo satisfactorio y solo comprabas algunas no todas, en cambio de otras si que compraba uno todas... aún conservo la mayoría d elas que compré aunque con diferentes traslados siempre si pierde alguna caja, me duele haber perdido varias de "Microhobby" que era una que sí tenía completa... o las "Hack & Crack", que fueron muy poquitas...

Con internet todo cambió......
Ahí, sí...

Aunque siento que la gente joven de hoy, no sabe aprovecharlo bien.
Un libro físico, se puede perder, coger humedad, soltar páginas... pero si se tiene x libros en un disco, se pueden perder todos de un plumazo y como rara vez la gente suele hacer inventario de lo que ha descargado, no sabrá ni la décima parte de lo que haya perdido.
...y definitivamente el placer de leerlo en papel, no es igualable a leerlo en una pantalla.


Yo creo en el conocimiento libre. De igual forma que hoy leo gratis algún día escribiré y publicaré gratis si la vida me lo permite. Prefiero esa rueda que la de comprar cosas que no sé ni si están bien hechas
Bueno, creo que el conocimiento libre es una cosa y tener que comer es otra.
Yo no voy a un pintor y le digo que tengo que pintar la casa y me 'sale gratis', ni a un taxista si tengo que ir al aeropuerto, ni a un mecánico si tengo que arreglar el vehiculo... no sé porqué los que se dedican a la informática, han de hacer todo gratis... Un libro lleva su tiempo y publicarlo tiene un coste asociado, llegado el tiempo en que nadie compre, llegará el tiempo en que nadie publique. O mejor dicho, que se publiquen cosas de calidad... porque de mediocridad internet está lleno y eso es algo que precisamente sobra. Una internet donde cueste encontrar cosas de calidad, no es deseable.

Por otro lado, aunque cualquiera pueda escribir un libro, no cualquiera vale para escribirlo, no cualquiera hace ameno algo en principio infumable.
1452  Seguridad Informática / Hacking / Re: Problema al abrir un 7-zip protegido con contraseña en: 23 Mayo 2020, 17:11 pm
Hay algunas cosas importantes a tener en cuenta cuando se introducen contraseñas desde el teclado...
- Que estaba activado/desactivado el uso de las mayúsculas.
- Que el idioma del teclado para introducir la contraseña sea el mismo (algunos cambian de posición ciertas teclas, por lo que al creer introducir una lestras estamos introduciendo otras). Esto puede pasar (más) fácilmente si lo intentas desde un equipo que no es el tuyo... No es frecuente pero alguna vez ocurre.
- Cerciorarse de que en efecto, esa contraseña era de 'ese' archivo y no de otro que también se creó recientemente o de nombre muy parecido. A veces incluso puede uno haber creado dos copias con distinta contraseña, haberlo puesto en otra parte y luego tomar el de la primera, peor pretendiendo usar la contraseña dle segundo.
1453  Foros Generales / Foro Libre / Re: [2020] Consejos de Chema Alonso: 10 libros para hackers en: 23 Mayo 2020, 17:01 pm
...Si me comprase todo lo que he leído tendría que hacer una hipoteca...
Ya. Pero al menos será verdad que alguno compras, no????.

Cualquiera que se dedique a la informática debería (en mi opinión), comprar algún que otro libro cada año. A la vuelta de 20-40 años te acabas haciendo con una biblioteca muy interesante.

...es curioso que la gente siempre tiene 10-50 euros para gastarse en cervezas, pero nunca para comprarse un libro.
1454  Foros Generales / Noticias / Re: Te enseño a programar si me das el 15% de tu salario cuando trabajes: así funcio en: 23 Mayo 2020, 16:54 pm
jajja... "te enseño a pescar y me das el 15% de todo lo que pesques ...y caces..."

¡Cuanto "buitre carroñero" con cara de "paloma mensajera"!
1455  Foros Generales / Noticias / Re: La Realidad Virtual, ¿el futuro de los juegos u oportunidad perdida? en: 23 Mayo 2020, 16:50 pm
Es una opción más, no una panacea para los videojuegos.

En vez de basar todo un juego en la realidad virtual, podrían simplemente limitarlo a determinados momentos o escenas de un juego y ampliarlo en la medida que sientan que los jugadores lo apoyan.

Exponer un cambio radical que no ha sido demandado, sobre todo entraña ese riesgo económico del desembolso y no verlo de vuelta.

Está más que demostrado que si tomas un grupo de 'gamers' exigentes y les pones de repente unos juegos de arcade de los 80, redescubren el placer de jugar sin tantas frivolidades a menudo superfluas.

Si los negocios de videojuegos no saben encontrar el punto exacto entre lo que ofrecen y la jugabilidad que los jugadores esperan, es fácil perder 'la batalla'.
Por muy 'gamer' que se sea, el límite del gamer suele venir impuesto por su economía, así que apostar a que dichos gamers vayan a adquirir juegos novedosos enormemente caros (a menudos seguido por adquisiciones hardware para poder jugarlos), donde el sobrecosto es por una tecnología no demandada, está abocada al fracaso.

...deben encontrar un punto medio donde el costo del juego no sea disimilar a lo previo y donde la inmersión de la tecnología aparezca, a precio asequible para ambas partes. ...y si resulta bien, ir introduciéndolo poco a poco. Es decir generar clientela que demanda un producto en vez generar un acopio de producto para el que no hay suficiente clientela.
1456  Foros Generales / Dudas Generales / Re: Comprar Bombillas en: 20 Mayo 2020, 00:22 am
Por qué incandescentes?. Aunque no estén mucho tiempo encendidas, a lo largo del año, suman muchas horas. tira por bombillas leds. Hay una gran variedad en cuanto a luminosidad, si es lo que buscas.

Y siendo zonas de paso, a falta de saber la exactitud de como quieras usarlas, considera la posibilidad de usar un sensor de movimiento para activarlas.
1457  Programación / Programación General / Re: Conservación general: Como hacen un lenguaje? en: 18 Mayo 2020, 21:34 pm
Es que esto no llovió en un día.

Cada uno de los lenguajes se realizó (y se continúa) pensando en solucionar determinados problemas que aparecían en otros o bien a situaciones a las que no daban solución.

Hay varios hitos en la Historia:
- La teoría de conjuntos con Cantor.
- Charles Babbage y su máquina analítica.
- El primer programa de la Historia se concede a Augusta Ada Byron (hija de Lord Byron), al sugerir y programar mejoras en la máquina de Babbage.
- El álgebra de Boole como una clarificación de la teoría de conjuntos que supone la lógica proposicional.
- Las mejoras en aritmética introducidas por Dedekind.
- La arquitectura von Neumann de John Von Neuman en una dosis de genialidad, traza lo que es el comienzo de los ordenadores físicos (palpables), más bien el cálculo a través de 'máquinas' como se concebía por entonces.
- El lingüista, Noam Chomsky definió una jerarquía de los lenguajes bien fundamentado, no caprichosamente.
- Claude Shannon, definió la 'teoría de la información'.
- Fano y posteriormente Huffman, aplicaron dicho concepto para algoritmos, como la compresión en fechas que aún no había ordenadores como los vemos hoy.
- El primer chip integrado (que dejaba atrás las válvulas de vacío). Tengo por ahí revistas de mediados de los 50, de radio y Tv. que narraban las noticias como hoy escuchamos las noticias de la Nasa en cualquier revista de divulgación científica, o igual que se recogían las noticias de la llegada a la Luna.
- Hacia finales de los 50 y comienzos de los 60, se podía asumir que "cada maestrillo tiene su librillo", entonces a alguien se le ocurre reunir, compartir y divulgar todo ese conocimiento que está retenido de forma exclusiva en unos pocos, se crean y patrocinan grupos, congresos y series de divulgación centrada en la materia.
- El concepto de 'programa compiladao'.
- Con John Backus y su propuesta para Algol, y después a Peter Naur surgió el BNF, que permitió doblegar la descripción exahustiva de la sintaxis de los lenguajes hasta entonces, nadie podía alegar conocer completamente ningún lenguaje. algol fue el primero en verse como un lenguaje basado en las especificaciones. Hasta entonces, era puro arte sujeto a errores sin posibilidad de ser exahustivos.
- Con las críticas de Dijkstra sobre el uso del 'Goto' puede afrimarse que nace la programación estructurada.
- ADA tuvo el mérito de unificar criterios, con lo que surgieron los estándares, para no rehacer la rueda. El Departamente de Defensa de USA usaba por aquel entonces alrededor de 500 lenguajes distintos, por supuesto totalmente incompatibles entre sí, que suponían un gasto económico. Podría casi afirmarse que se creaba (o actualizaba) un nuevo lenguaje para cada contrato... ADA vino a solucionar esa infinita diversidad.
- Con John McCarthy, surge Lisp y la inteligencia artificial.
- Kemeny y Kurtz, crearon en 1964 el BASIC... el lenguaje mas cercano al natural aunque muy limitado en funcionalidad, que vino a demostrar que la complejidad puede ser absorbida. Pascal y C son 4 y 8 años posteriores al BASIC, curiosamente.
- Niklaus Wirth con Pascal, asienta en las universidades el estudio de la informática. Hasta entonces los lenguajes eran demasiado complejos, la gente 'común' reuía de ellos.
...
- La programación orientada a objetos, ya estaba muy presente desde prácticamente los 70, pero era conceptual, no es hasta la primera concrección de Bertrand Meyer (quien define y especifica Eiffel), cuando se consagra como tal.

Ni mucho menos los dados en la lista, son todos, solo los que me han venido a la memoria a bote pronto y acortada. Dennis (no Daniel) Ritchie?. Probablemente no lo incluyera como significativo.
En fin, como decía no fue un diluvio de un día, si no muchas lluvias a lo largo de muchos años...


Explicar cada paso en detalle requiere un libro bien gordo, pero 'tirando del hilo' podrás ampliar. Así que te he buscado algunos enlaces:

Historic Documents in Computer Science:
http://web.eah-jena.de/~kleine/history/

The History of Language Processor Technology in IBM:
https://pdfs.semanticscholar.org/20fb/5f3fe267f8df829da85f160868f0dc314abe.pdf

Desde wikipedia:
https://en.wikipedia.org/wiki/History_of_programming_languages
1458  Foros Generales / Foro Libre / Re: Tabaco de contrabando en España en: 18 Mayo 2020, 19:38 pm
...
Me acaba de llegar la luz ultravioleta, es esta:

Bien, acabo de montarla en un portalámparas y me he dispuesto a comprobar los sellos del tabaco, y unos billetes que tenía en la cartera.
Tengo un billete de 50, 20 y 5 euros, e mirado con esta bombilla, y no se ven las marcas de agua!!!!
Por supuesto los sellos del tabaco, no se ven las marcas de agua!!!
Entonces estoy pensando que tal vez esta bombilla no funcione bien???
Pero como es posible si es ultravioleta y dice que es para detectar billetes falsos???

¿Que está pasando?
...
Acude a la policía (incluso a un banco), con la lamparita y algunos de esos billetes 'que no se leen' y algún paquete de tabaco.
Ellos suelen saber bien como se aplica (los del banco lo saben bien, la policía según quien) y pídeles que te expliquen o bien que verifiquen ellos mismos si son falsos.

Nota, sin embargo que la luz ultravioleta, si se aplica en un sitio muy luminoso, no se podrá discernir con claridad, requiere aplicaro en un sitio como mínimo en sombra o penumbra. Cuanta más oscuridad mejor se percibe... 
1459  Programación / Programación C/C++ / Re: Dividir polinomio en monomios C++ en: 18 Mayo 2020, 19:08 pm
Se te está pidiendo un reconocedor de lenguaje, un autómata.
Tienes que empezar por definir correctamente el problema.
La mejor manera es hacerlo en BNF...

expresion = valor operador valor|operador valor  // operación binaria y monaria
valor = [signo] numero [variable]

expresion = monomio|numero [operador expresion]    // uno y/o más numeros o monomios
monomio = [signo] numero [potencia]
potencia = opPotencia numero
signo = "+"|"-"     // un signo también es un operador como se verá más abajo.
numero = digito numero   // uno o más dítitos.
digito = "0"|"1"|"2"|"3"|"4"|"5"|"6"|"7"|"8"|"9"
operador = "+"|"-"|"*"|"/"   // Se puede añadir los operadores que se quiera.
opPotencia = "^"
variable = "a"|"b"|"c"| ... |"x"|"y"|"z"  // OJO: Variable es una sola letra minúscula (deducido a partir de la expresión de ejemplo)
 

Desde ahí se puede pasar ya a codificarlo, pero se requiere cierta experiencia para poder hacerlo clara y eficientemente... para aprender es mejor interponer el propio autómata sus estados, así que es ése el pseudocódigo que te pongdré más abajo...

Ahora se trata de generar una tabla con los estados de transición conforme a las reglas previas:
Una tabla de estados es un cuadro donde se colocan todas las variables en juego (pueden agruparse caso de 0-9, a-z cuando para ellos se dan idénticas condiciones sin excepción), esto es, el estado actual, los estados previos y se rellena con el estado de transición.

En vertical el token actualmente siendo leído, en horizontal el token previo (no hay problema en intercambiarlo, siempre que quede claro).
La tabla recoge a que estado avanza desde el token previo al token actual...

 
previo| signo | 0-9 | a-z | separador | operador | potencia |
----------------------------------------------------------------
actual|---------------------------------------------------------
----------------------------------------------------------------
signo |   6?  |  1  |  5  |    -      |    2     |    e     |
----------------------------------------------------------------
  0-9 |   6   |  1  |  e  |    -      |    2     |    1     |
----------------------------------------------------------------
  a-z |   6   |  5  |  e  |    -      |    2     |    e     |
----------------------------------------------------------------
sepa. |   x   |  x  |  x  |    -      |    x     |    e     |
----------------------------------------------------------------
oper. |   e   |  1  |  2  |    -      |    e     |    e     |
----------------------------------------------------------------
opPow |   e   |  e  |  7  |    -      |    e     |    e     |
----------------------------------------------------------------
otros |   e   |  e  |  e  |    -      |    e     |    e     |
----------------------------------------------------------------



La tabla de estados se lee como sigue:
- Un valor 'e' significa un estado de error. Si se da debe abortarse y darse por fallida la validación de la expresión.
- Un valor 'x' significa que es un estado superfluo, no se hace nada (debe ignorarse, esto supone devolver a token su valor previo) y seguir leyendo.
- Un valor '-' significa que dicho estado no se dará, porque cuando sucedió, es transitorio en el mismo ciclo al estado previo.
- Un valor '6?' significa un estado 6, pero que debe hacerse una comprobación posterior (in situ).
- El resto de valores indican el estado al que se cambia, desde el token actual y sabiendo el token previo.
El estado final de la validación debe ser 1 ó 5. Estos valores señalan que se ha validado correctamente, si al llegar al final de la expresión se tiene un estado 2 ó 6, la expresión hasta ese momento es correcta, pero incompleta, por tanto se da como errónea.

Como hablamos de tokens... conviene crear una enumeración y un array que 'tokenice' cada carácter en nuestro 'lenguaje'
Antes de nada, pues, establecemos valores para reconocerlos.
Código:
enumeracion TipoToken
      //TOKEN_ESCAPE = -2
      //TOKEN_ERROR = -1
      TOKEN_DESCONOCIDO = 0
      TOKEN_DIGITO = 1
      TOKEN_OPERADOR = 2
      TOKEN_SIGNO = 6  // es también un operador.
      TOKEN_SEPARADOR = 3
      TOKEN_VARIABLE = 5
      TOKEN_OPPOTENCIA = 7
fin enumeracion

TipoToken Tokens(0 a 255)

funcion Inicializar
     entero k

     // Digitos: 0-9
     bucle para k desde 48 hasta 57  
          Tokens(k) = TOKEN_DIGITO
     siguiente

    // Variables: a-z
    bucle para k desde 97 hasta 122
          Tokens(k) = TOKEN_VARIABLE
     siguiente

    // Operadores (y signo):
     // la función 'ASCII', es una forma de dejar claro el contenido asociado más que evitarse poner el valor ascii asociado a cada uno de ellos.
    Tokens(ascii("+")) = TOKEN_SIGNO
    Tokens(ascii("-")) = TOKEN_SIGNO
    Tokens(ascii("*")) = TOKEN_OPERADOR
    Tokens(ascii("/")) = TOKEN_OPERADOR

    // Operador Potencia:
    Tokens(ascii("^")) = TOKEN_OPPOTENCIA   

    // Separadores:  'espacio' (pués es solo un jemeplo, que puedes ampliar)
    Tokens(ascii(" ")) = TOKEN_SEPARADOR
fin funcion


Inicialmente el 'estado previo' debe ponerse en 1.
Se empieza recorriendo carácter a carácter en un bucle... se obtiene un token y debe considerarse el estado previo, para asignar el estado conforme a la tabla de estados, decrita más arriba.
Código:
// NOTA: considera un 'break;' con cada caso... (tramitándolo como 'C').
Buleano = Funcion ParseExpresion(array bytes Expresion())
    entero Index, Size, signos, IxImprime
    TipoToken token, prevToken
    
    index = 0
    size = Expresion.Length
    IxImprime = 0
    prevToken = 1

    Hacer mientras (index < Size)        
        token = Tokens(Expresion(Index))

        Seleccionar caso de Token
            caso TOKEN_DIGITO
                Seleccionar caso de  prevToken
                    caso TOKEN_SIGNO
                        Estado = 6
                    caso TOKEN_DIGITO
                        Estado = 1  
                    caso TOKEN_VARIABLE
                        Estado = 0  //Error...   las digitos nunca aparecen tras una variable:  5+'b2'35-6
                        Salir del bucle    
                    caso TOKEN_OPERADOR
                        Estado = 2  
                    caso TOKEN_OPPOTENCIA
                        Estado = 1
                Fin caso

            caso TOKEN_VARIABLE
                Seleccionar caso de  prevToken
                   caso TOKEN_SIGNO
                        Estado = 6
                    caso TOKEN_DIGITO
                        Estado = 5    
                    caso TOKEN_VARIABLE
                        Estado = 0   //Error...  las variables solo son de 1 caracter (no se toleran identificadores más largos): 5+'bh'-6
                        Salir del bucle
                    caso TOKEN_OPERADOR
                        Estado = 2
                    caso TOKEN_OPPOTENCIA
                        Estado = 0   //Error...  detras del oppotencia debe aparecer digitos, solamente: 5x'^z'-6
                        Salir del bucle   
                Fin caso

            caso TOKEN_OPERADOR   // Signo, aunque conta como operador tiene valor 6, se trata en signo.                
                Seleccionar caso de  prevToken
                   caso TOKEN_SIGNO
                        Estado = 0   //Error...  detrás de un signo no puede aparecer ningún operador:  5'-*'3
                        Salir del bucle  
                    caso TOKEN_DIGITO
                        Estado = 1    
                    caso TOKEN_VARIABLE
                        Estado = 2  
                    caso TOKEN_OPERADOR
                        Estado = 0   //Error...  detrás de un operador no puede aparecer otro operador: 5'/*'3
                        Salir del bucle
                    caso TOKEN_OPPOTENCIA
                        Estado = 0   //Error...  detras del oppotencia debe aparecer digitos, solamente: 5x'^z'-6
                        Salir del bucle  
                Fin caso

            caso TOKEN_SIGNO
                Seleccionar caso de  prevToken
                   caso TOKEN_SIGNO                    
                        si (signos < 2)
                            Estado = 6
                            signos +=1
                        sino
                            Estado = 0  // Error...   No puede haber más de 2 signos seguidos:  5'+-2'; 5'-+'4
                        fin si
                    caso TOKEN_DIGITO
                        Estado = 1  
                    caso TOKEN_VARIABLE
                        Estado = 5
                    caso TOKEN_OPERADOR
                        signos =-1
                        Estado = 2
                    caso TOKEN_OPPOTENCIA
                        Estado = 0   //Error...  detras del oppotencia debe aparecer digitos, solamente: 5x'^z'-6
                        Salir del bucle  
                Fin caso

            caso TOKEN_OPPOTENCIA
                Seleccionar caso de  prevToken
                   caso TOKEN_VARIABLE
                        Estado = 7
                   resto casos                         
                        Estado = 0   //Error...  antes del oppotencia solo puede aparecer una variable (como en: 5'x^'2)
                        Salir del bucle   
                Fin caso                       

            caso TOKEN_SEPARADOR
                token =  prevToken

            caso TOKEN_DESCONOCIDO
                Estado = 0  // 'e' el valor asociado al error.
                Salir del bucle
        Fin caso
        
        Si (token <> TOKEN_SIGNO)
            Si (signos = -1)
                signos =1
            Sino
                signos = 0
            Fin si
        fin si

        // Imprimir aquí el valor. si por monomio es la 'produccion/regla "valor" (descrita más arriba),
        // debes ir concatenando tokens, y cuando TokenPrevio = 1 ó 5 y token = 2 ó 6, se imprime, sino se concatena...
        // algo más eficiente que concatenar es recordar el index previo, y al imprimir usarlo desde ahí hasta el actual (incluído).
        Si ((prevToken = 1) o (prevToken =5))
            Si ((Token = 2) o (Token = 6))
                imprimir desde Entrada(IxImprime) hasta Entrada(Index)
                IxImprime = (Index +1)
            fin si
        fin si      

        prevToken = token
        index +=1
    Repetir

    Si ((Estado = 1) o (estado = 5))
        Devolver  TRUE
    Sino
        Devolver FALSE
    Fin si
fin funcion

p.d.: Intercambiado valores en token= signo y previo= digito con el opuesto token= digito y previo= signo.

Reasignando otros valores de estado, se puede dejar más claro...
0 = desconocido, 1 = separador, 2 = operador, 3 = signo, 4 = digito, 5 = variable
Prevtoken conviene que se establezca inicialmente siempre al estado asignado a 'digito', para que pase a un estado válido si el primer carácter lo es.

NOTA: Al ver que luego has puesto otra expresión he recalado en la previa y he visto que no me percaté de que usas expresiones algebraicas... El pseudocódigo como estaba resolvía acertadamente las expresiones aritméticas, pero no las algebraicas... como esa que pusiste al inicio: "+3x^2-2x^1+9x^5-4+5x^3+1".
Es solo añadir alguna regla más y un estado distinto para el operador de potencia y luego añadir en la función 'ParseExpresion', los casos para dicho nuevo estado. Hago los cambios para que quede correctamente.
También resolverá correctamente un término suelto como 3x^0+5 si se pone como 3x+5



1460  Foros Generales / Noticias / Re: Estos son los PCs más vendidos de la historia, ¿has tenido alguno? en: 17 Mayo 2020, 01:00 am
Pués sí...

Yo aún conservo un Vic-20 (una versión anterior al Commodore-64) y un ZX Spectrum, de los primeros, que tenían en teclado de goma. Aunque este lo tengo averiado. Hace 8-12 años quise buscar alguno viejo por intenet para arreglarlo, pero incluso solo para piezas estaban carísimos...
Páginas: 1 ... 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 [146] 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 ... 432
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines