Bitcoin Forum
July 12, 2024, 01:42:18 AM *
News: Latest Bitcoin Core release: 27.0 [Torrent]
 
  Home Help Search Login Register More  
  Show Posts
Pages: « 1 ... 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 [302] 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 ... 570 »
6021  Bitcoin / Pools / Re: Stratum protocol documentation on: April 05, 2014, 02:49:40 AM
Suggest difficulty
Basically the idea is that miner remember the last difficulty given by the previous mining session and it sends mining.suggest_difficulty(difficulty) on the beginning of the next session (it may be sent before mining.subscribe or mining.resume, but it should not be a requirement). The response to the call is irrelevant for the miner, but if the pool accept the suggestion in any way, it will send standard mining.set_difficulty with new computed difficulty.

Obviously the difficulty can differ from pool to pool while switching between backup pools, because every pool can have different SPM target . The main goal is to give at least some approximation for the newly connected pool, so it won't start with difficulty 1 for 10 THash/s monster rig...

After extensive discussion on IRC it was determined that having a variable keyname with the difficulty in it was not sensible use of JSON and better execution of this command would place the difficulty in the more logical position of within the parameters.

eg:
Code:
{"id": 2, "method": "mining.suggest_difficulty", "params": [42]}
6022  Bitcoin / Pools / Re: Stratum protocol documentation on: April 05, 2014, 02:48:58 AM
X stratum http
Is the X-Stratum HTTP header documented somewhere?

I don't think so. It should be "getwork extension", but I'm not aware of any process how to "standardize it". Maybe just edit wiki? :-)

Quote
What should be the contents?

stratum+tcp://url:port

Quote
How should it be interpreted by miners? As "stratum is there, if you want it" or "stratum is there, switch to that"

Existing miners (cgminer, poclbm) implement it as "Stratum is there, switch to that". Thanks to this, users (who don't understand difference between getwork/stratum) don't need to change anything in their config, just update miner.
6023  Bitcoin / Pools / Re: Stratum protocol documentation on: April 05, 2014, 02:48:27 AM
Copy of the protocol documentation:
Code:
Network protocol specification
Stratum platform


draft


________________


Overview
        Stratum is basically a platform for creating lightweight Bitcoin clients (= clients without a blockchain, keeping only private keys). Absence of the blockchain on the client side provide very good user experience, client has very small footprint and still provide high level of security and privacy.
        More technically, Stratum is an overlay network on the top of Bitcoin P2P protocol, creating simplified facade for lightweight clients and hiding unnecessary complexity of decentralized protocol. However there’s much bigger potential in this overlay network than just providing simplified API for accessing blockchain stored on Stratum servers. For utilization of such potential, we definitely need some robust protocol providing enough flexibility for various type of clients and their purposes.


Some advanced ideas for Stratum network, which will need flexible network protocol:
* Integration of BTC/fiat exchanges into clients
* Wallet storages for diskless or extremely low-resource clients (AVR-based hardware wallets)
* Server-side escrows (sending bitcoins to email)
* Integration of bitcoin laundry
* Exchange calculators (for providing “fiat” equivalents of BTC in clients)
* Firstbits support
* Mining support for clients
* Various transport protocols (especially HTTP Push, which allows PHP websites to integrate with Bitcoin easily)


________________
Requirements
1. Protocol should be as simple as possible. Some clients aren’t capable to handle high-level message systems like Google’s Protocol buffers or Apache Thrift.
2. Protocol should be text-based. Some languages cannot handle binary data (javascript) or it’s pretty difficult to implement it correctly (PHP). It’s also easier to debug text-based protocol than binary data.
3. Protocol must support standard RPC mechanism (request-response). Request should contains method identifier and parameters, response should be able to transfer error states/exceptions.
4. Mapping between request and response must be clear. Don’t allow vague relation between request and response. Some message-based systems use only textual conventions to map requests and responses together, like ‘firstbits_resolve <firstbits>’ expects ‘firstbits_response <firstbits> <address>’ or ‘firstbits_error <firstbits> <reason>’. It creates ambiguous data flow, avoid it.
5. Protocol should support publish-subscribe mechanism. Client can subscribe on server for receiving some kind of information. After this request, server will proactively broadcast messages to subscribed clients until client disconnects or cancel it’s subscription.
6. Protocol must be bi-directional. In the opposite of standard client-server model, we sometimes need to allow server to initiate the communication. As an example, server can ask client to reconnect to another node (before switching to maintenance mode) or send some text message to user.


________________


Network layers
        Stratum network layer should be flexible on many levels. This document is proposing complete stack for Stratum networking, however such complex problem can be divided into three independent layers:


1. Transports
2. Application protocol
3. Services
Transports
        Transports are the way how to obtain bi-directional communication between a lightweight client and Stratum servers. All Stratum servers should support some basic range of supported transports like plain socket transport, HTTP Poll (for environments with restrictive network access), HTTP Push (for non-interactive clients like PHP scripts), websocket/socket.io (for javascript clients) etc.
        Transport is responsible for keeping the session, it’s not a responsibility of any upper layer. It means that once any kind of transport is established, upper layers of protocol can send/receive messages like it’s transferred over already established TCP socket.
 
* Socket transport
   * Standard TCP socket, clients initiate connection, then both sides can initiate transport of payload (application protocol) anytime.
* Websocket
   * It’s HTTP-based, socket-like transport, widely supported by javascript clients. It’s probably the best way how to provide instant notification to browser-based applications.
   * After initial handshake, it works like “Socket transport”.
* HTTP Poll
   * Client performs HTTP POST every N seconds, storing payload as request body, processing server payload from response body.
   * HTTP POST without a session identifier creates new session (cookie?), client is responsible for using this cookie in following requests during the session.
   * Server store all messages for delivery to client into server-side buffer, flush them to client in following poll request.
* HTTP Push
   * Transport for clients which cannot keep open connection and they’re unable to ask server frequently enough. Typical example is PHP-based website, which want to subscribe for some blockchain changes (notification about incoming transaction for given address).
   * On the beginning of the HTTP Poll session, client provide callback URL, turning the current HTTP Poll transport into HTTP Push.
   * When there’re some new data on Stratum server, server performs HTTP POST request to callback URL with payload in the request body.
   * Client must perform keep-alive HTTP Poll request for indicating it’s still alive and want to receive HTTP Push messages. It can be done by crontab entry with one hour period, for example.


HTTP Poll
Important HTTP headers in the request:
* Cookie should contains all cookies provided by the server in previous calls, especially the STRATUM_SESSION cookie which is identifying current HTTP session. Blank or missing STRATUM_SESSION will initiate new session, even on the same TCP connection. Using many different cookies in different HTTP requests is possible, which allow serving more independent clients over one TCP connection.
* Content-Type must be always “application/stratum” indicating that payload is following Stratum protocol. This is especially useful for filtering requests in the server configuration (Apache/Nginx), so ports 80 and 443 can still be used for non-Stratum traffic.
* X-Callback-Url Provides the URL (always in the full form, including desired HTTP/HTTPS protocol type) for HTTP Push transport. Occurence of this header in the request turns the session into the HTTP Push protocol.


Important HTTP headers in the response:
* Set-Cookie contains cookies identifying current HTTP session and client must send back all those cookies in following request. By sending the STRATUM_SESSION cookie, server is indicating that the request/response is part of newly created session. When the client receive this cookie in the middle of the communication, he must re-initialize the session (subscribe for all services, …). This may happen when client perform request with the session which is already expired.
* Content-Type is always “application/stratum”, indicating that response was created by Stratum application server.
* Content-MD5 contains the MD5 hash of the body, for checking that content wasn’t corrupted during the transmission.
* Server indicates the version of server implementation.
* X-Session-Timeout contains lifetime of current session (in seconds). After this time, every consequential request with the same session ID is considered as new session and client must perform initial handshake (subscribing for all services, …)
* X-Content-SHA256 has the same purpose as Content-MD5, but provides checksum for clients which don’t handle MD5. SHA256 must be presented in the clients anyway for creating Bitcoin transactions, so the possibility of checking transport checksum with SHA256 is minimizing dependencies.


Important HTTP status codes in the response:
* 200 OK - server processed the request succesfully
* 5xx Server error - client should perform consequential request with some delay to prevent server overloading.


HTTP Push
        This transport works on the top of HTTP Poll transport and it is fully backward compatible. It is enabled by sending X-Callback-Url header in HTTP Poll request, indicating that server may actively send payload to the client using given URL as HTTP POST request.
Client can continue to work with the transport like it’s still the HTTP Poll transport, but broadcasts from the server are delivered instantly over callback URL, without waiting on consequential poll request.
Callback URL can be changed during the session, by providing updated URL in the header. HTTP Push can be also switched back to HTTP Poll, by providing X-Callback-Url with blank string value.
Client must perform occasional HTTP polling even with HTTP Push transport, to indicate he’s alive and interested in receiving callbacks. Don’t forget that those keep alive calls are still valid HTTP Poll requests and server can provide real data in the response.
Keep alive poll requests must be called before session on the server timed out (timeout is provided in X-Session-Timeout response header). It’s recommended to perform keep alive request few seconds before session will actually timed out to protect session before expiration thanks to temporary network failure. Don’t forget that occurence of STRATUM_SESSION cookie in the keep alive response indicates expiration of previous session on the server and client must perform re-initialization all previous subscriptions.


Important HTTP headers in callback:
* Content-Type is always “application/stratum”, indicating that request was created by Stratum application server.
* X-Session-Id contains session ID of HTTP Poll connection. This is useful for handling multiple connections over the same callback URL.
* X-Session-Timeout contains remaining time to session expiration in seconds.
Application protocol
        Protocol itself is the way how to exchange information between client and server, using already established transport. Protocol doesn’t understand the meaning of exchanged information, it only keeps the track on request-response and internal data format. Protocol format is the same for all supported transports.
        Basic structure of proposed protocol is line-based, json-encoded message. Every message is on separate line and there exists only two formats of messages - request and response. Those messages use the format of JSON-RPC 2.0 protocol (http://json-rpc.org/wiki/specification).
        JSON-RPC allows two types of requests. One is part of standard RPC mechanism when every request expects some response. Second type is the notification formatted as a JSON-RPC request, but it doesn’t expect any kind of response. Typical example is broadcasting of new block or transaction from server to clients. The difference between RPC request and notification is that notification always has id=null.
Request
Every RPC request contains three parts:
   * message ID - integer or string
   * remote method - unicode string
   * parameters - list of parameters


message ID must be an unique identifier of request during current transport session. It may be integer or some unique string, like UUID. ID must be unique only from one side (it means, both server and clients can initiate request with id “1”). Client or server can choose string/UUID identifier for example in the case when standard “atomic” counter isn’t available (multi-processing environment like PHP servers).


Examples:


* Retrieve transaction history of given Bitcoin address (client->server):
{“id”: 1, “method”: “blockchain.address.get_history”, “params”: [“1DiiVSnksihdpdP1Pex7jghMAZffZiBY9q”]}


* Broadcast transaction to Bitcoin network (client->server):
{“id”: 2, “method”: “blockchain.transaction.broadcast”, “params”: [“tx_payload”]}


* Subscribe for receiving information about new blocks in blockchain (client->server):
{“id”: 3, “method”: “blockchain.block.subscribe”, “params”: []}


* Unsubscribe from receiving information about new blocks in blockchain (client->server):
{“id”: 4, “method”: “blockchain.block.unsubscribe”, “params”: []}


Notification
Notification is like Request, but it does not expect any response and message ID is always null:
   * message ID - null
   * remote method - unicode string
   * parameters - list of parameters




Examples:
* Broadcast message about new block (server->client). Server don’t expect any response to this message. Client must perform call “blockchain.block.subscribe” to start receiving requests like this:
{“id”: null, “method”: “blockchain.block.new”, “params”: [“block_payload”]}


Response
        Every response contains following parts
   * message ID - same ID as in request, for pairing request-response together
   * result - any json-encoded result object (number, string, list, array, …)
   * error - null or list (error code, error message)


Examples:
* Received transaction history of an address (server->client):
{“id”: 1, result: [“tx1_id”: {}, “tx2_id”: {}], error: null}


* Received resolved firstbits address (server->client):
{“id”: 2, result: [“1DiiVSnksihdpdP1Pex7jghMAZffZiBY9q”], “error”: null}


* Resolving of firstbits address failed (server->client):
{“id”: 2, result: null, “error”: (1, “Firstbits cannot be translated to valid Bitcoin address”)}


Message signatures
#TODO
sign, sign_type, sign_id, sign_time
Replay attacks
#FIXME: Timestamp IS a part of signed data, it’s up to client to decide if cached message is good enough.
To protect messages against replay attacks, RPC commands vulnerable to such attack should contain some unique parameter. Because every signature is constructed from both request and response data, current timestamp in the request should provide enough security.
        Timestamp is a part of signature metadata. Although some types of RPC calls are immutable by design and adding timestamp to signature doesn’t provide additional security against replay attack, it’s up to client to decide if cached response (with timestamp in the history) is good enough for him. Caching of signatures is a reasonable way to improve server load and using signature with older timestamp shouldn’t be an issue for immutable calls.
Exceptions
Every RPC error returns 3-tuple with error code, human-readable error message and detailed traceback of exception (may be just blank string on production servers for security reasons). Error codes < 0 are protocol specific or unhandled exceptions. Error codes > 0 are exceptions generated by services and every service should offer detailed description of possible error states.


-1, Unknown exception, error message should contain more specific description
-2, “Service not found”
-3, “Method not found”
-10, “Fee required”
-20, “Signature required”, when server expects request to be signed
-21, “Signature unavailable”, when server rejects to sign response
-22, “Unknown signature type”, when server doesn’t understand any signature type from “sign_type”
-23, “Bad signature”, signature doesn’t match source data


#TODO
Services
#TODO Documentation for blockchain-related services (for Electrum)
Server side:


discovery.list_services()
discovery.list_vendors(service_name)
discovery.list_methods(service_name, vendor)
discovery.list_params(service_name, vendor, method)


node.peers.subscribe()
node.stop()
node.get_signature_pubkey()


# TODO:
blockchain.block.subscribe
blockchain.block.unsubscribe
blockchain.block.broadcast


blockchain.address.subscribe
blockchain.address.unsubscribe
blockchain.address.get_history
blockchain.address.get_balance


blockchain.transaction.broadcast
blockchain.transaction.get


blockchain.transactions.guess_fee
blockchain.transactions.subscribe
blockchain.transactions.unsubscribe


firstbits.resolve
firstbits.lookup
Client side:


node.get_version
node.reconnect(hostname)


Notifications:
blockchain.block.notify()
blockchain.transaction.notify()
6024  Bitcoin / Pools / Stratum protocol documentation on: April 05, 2014, 02:47:55 AM
I've tried to collate all the relevant stratum documentation in one place since it is scattered over the forum and the original documentation links are hard to find. I'll add whatever relevant extensions were developed in this thread. I will try to add them to this thread to avoid them being lost on the internet.

Original protocol announce thread:
https://bitcointalk.org/index.php?topic=108533.0

Official website for the protocol now:
http://stratumprotocol.org/

Stratum protocol extensions:
http://stratumprotocol.org/stratum-extensions
6025  Bitcoin / Development & Technical Discussion / Re: Which document is correct regarding response to "subscribe" method on: April 05, 2014, 02:03:45 AM
I think I figured it out.

I've just discovered the -D flag in cpuminer, which turns on debbugging info. And with the first example above I can see a "Failed to get Stratum session id" message. With the second example everything's look fine.

So, for example slush pool or 50btc.com handle this correctly, while for example bitminter and btcguild handle this incorrectly.

I'm only wondering why nobody answered the question, isn't the stratum protocol well known among cryptocurrencies devs? Smiley
The stratum protocol is really only known to mining software and pool devs as it has nothing to do with the regular bitcoin client. There was an extension to the protocol which allows the session id to be reused or not depending on whether there was a plan to support reconnect or not. Very few pools support reconnect.
There is no official documentation apart from the discussion thread in the pool section. Here is the definitive word on reconnect support that I wrote when we agreed on how it should be managed:
https://bitcointalk.org/index.php?topic=108533.msg1557099#msg1557099
6026  Bitcoin / Hardware / Re: [ANN] HEX•FURY 11+Gh/s USB Stick Miner [ IN STOCK UK, EU ] Shipping Worldwide on: April 04, 2014, 11:33:34 PM
That is good news.
Thanks for the fast work on that.
 Smiley

The new version of cgminer also allows you to specify the bits on the command line as a complement to your overclocking attempts.

Code:
--bxf-bits <arg>    Set max BXF/HXF bits for overclocking (default: 54)
You're welcome; LordTheron sending me a unit was the inspiration I needed Wink

Oh and if it wasn't clear, that command is in 4.2.3.
6027  Other / Meta / Re: Can we have a "Development & Technical" section in altcoins please? on: April 04, 2014, 11:31:06 PM
So are trying to say that a more proper place to delve into the "Deep Alt Coin Scene" would be a dedicated alt coin forum and that your feelings wouldn't be hurt at all if 90% of the alt crowd just up and left from Bitcointalk?
On the contrary, our feelings would be bliss from the massive drop in traffic we'd see for an effectively offtopic discussion.
6028  Other / Meta / Re: Top Posters [UPDATED CHARTS] on: April 04, 2014, 11:28:02 PM
20k posts jesus f christ! He must be very helpful  Grin

Not really. He's probably the biggest troll here as well as being painfully unfunny (something I don't think he's aware of).
He certainly keeps us mods busy  Undecided
6029  Bitcoin / Hardware / Re: [ANN] HEX•FURY 11+Gh/s USB Stick Miner [ IN STOCK UK, EU ] Shipping Worldwide on: April 04, 2014, 11:26:27 PM
The new version of cgminer also allows you to specify the bits on the command line as a complement to your overclocking attempts.

Code:
--bxf-bits <arg>    Set max BXF/HXF bits for overclocking (default: 54)
6030  Bitcoin / Hardware / Re: NanoFury Project - Open Source Design on: April 04, 2014, 09:59:17 PM
Or if there was support for multiple bf chips in cgminer...
I don't have one so cannot write the support for it. I only have 2 single chip icefuries.

I could send you a fully populated H-card+adapter, like you see in the picture all with good chips.
Default speed or a little overclocked from 25ghs to 30ghs(in chainminer).

pm me the address ... wish you were in Europe... but its probably US Smiley
Thanks for that. I don't have the power to run much more in my house and I'd hate to see hardware go to waste. Maybe the 2-6 units alone are enough to get me going.

Con - PM me a mailing address please - I have a few NF2s from my engineering units and I might be able to repair a few more. I'll send you also one of the engineering NF6 boards.

Thanks vs3, I'll take you up on your offer.
6031  Bitcoin / Mining software (miners) / Re: CGMINER ASIC miner monitoring RPC linux/win/osx/mips/arm/r-pi 4.2.3 on: April 04, 2014, 09:08:17 PM
The following code snippet appears in cgminer.c from the latest (April 4, 2014) git clone.

Code:
   3073         } else {
   3074                 char *hexstr;
   3075
   3076                 endian_flip128(work->data, work->data);
   3077
   3078                 /* build hex string */
   3079                 hexstr = bin2hex(work->data, 118);
   3080                 s = strdup("{\"method\": \"getwork\", \"params\": [ \"");
   3081                 s = realloc_strcat(s, hexstr);
   3082                 s = realloc_strcat(s, "\" ], \"id\":1}");
   3083                 free(hexstr);
   3084         }

Question: in line 3079 why is the data length being passed to bin2hex()  set to 118? Should this not be 'sizeof(work->data)', that is to say, 256 bytes?
No because only those variables are actually the work payload which becomes the result. Other data in the work struct are private.
6032  Other / Meta / Re: Mining hardware reorganization on: April 04, 2014, 12:44:45 PM
https://bitcointalk.org/index.php?topic=557036.0 This is exactly what I was referring to. Both mine and the manufacturer/global distributor's threads were on the second page, so people assume its new information and start a new thread.

Then even when they are shown the old thread exists, they STILL continue talking about it in the new thread. Now you have 3 threads, with the 2 older threads pushed further away. Rinse repeat.

Edit: Another suggestion is to move the resellers/importers threads out to WTS/marketplace. They're just open offers to sell and not really custom hardware.
Same problem exists with every forum section, people always post new topics about something already posted. Something's not right; what gives dogie, why does this bother you so much?
They do it when the threads are on the second page, which is caused by too many topic areas being squeezed into one subforum. It's something I've always cared about, but now we're fixing things we can look st it. The last change made/will make this specific issue worse unless resolved.

I'll PM you a list of reseller threads I think are inappropriately placed at the moment, when I'm home.
Just use the regular notify moderator button as there are many mods who can do it, not just me. I'm sure things will improve anyway as the whole mining section is now rather heavily moderated. If we can think of a meaningful new category to add that won't be abused it might help, but right now mining is a (hopefully temporary) clusterfsck anyway thanks to how the manufacturers have treated us and how the miners have thrown money at them.
6033  Bitcoin / Pools / Re: give me coins on: April 04, 2014, 12:19:55 PM
It's still very possible with bad luck.
6034  Bitcoin / Hardware / Re: Pictures of your Mining Rigs! 2014 Edition on: April 04, 2014, 12:05:00 PM
Just ignore this thread here, it will die soon. no need for a second thread - whats the point? stick to the true pictures thread!
The opening poster is free to lock this thread. It is not a big deal unless we keep bumping it by posting here.
6035  Other / Meta / Re: Mining hardware reorganization on: April 04, 2014, 12:02:23 PM
Edit: Another suggestion is to move the resellers/importers threads out to WTS/marketplace. They're just open offers to sell and not really custom hardware.
We move a lot of the selling stuff to the marketplace section already.
6036  Other / Meta / Re: Mining hardware reorganization on: April 04, 2014, 11:50:39 AM
https://bitcointalk.org/index.php?topic=557036.0 This is exactly what I was referring to. Both mine and the manufacturer/global distributor's threads were on the second page, so people assume its new information and start a new thread.

Then even when they are shown the old thread exists, they STILL continue talking about it in the new thread. Now you have 3 threads, with the 2 older threads pushed further away. Rinse repeat.

Edit: Another suggestion is to move the resellers/importers threads out to WTS/marketplace. They're just open offers to sell and not really custom hardware.
Same problem exists with every forum section, people always post new topics about something already posted. Something's not right; what gives dogie, why does this bother you so much?
6037  Bitcoin / Hardware / Re: NanoFury Project - Open Source Design on: April 04, 2014, 08:58:40 AM
Or if there was support for multiple bf chips in cgminer...
I don't have one so cannot write the support for it. I only have 2 single chip icefuries.
6038  Bitcoin / Mining software (miners) / Re: CGMINER ASIC miner monitoring RPC linux/win/osx/mips/arm/r-pi 4.2.1 on: April 04, 2014, 07:18:49 AM
Con,

I am looking at stale_work() code. I am wandering if work gets stale in solo and gbt also?

if (pool->gbt_workid)
      work->job_id = strdup(pool->gbt_workid);
Shall job_id be checked inside stale_work code. For stratum it is considered as stale if there is no share but for gbt and solo?
Thanks
There are enough checks to determine if work is stale with gbt solo/pool already.
Thanks,
Can you give me some hints what to look for in the code i am carious

Thanks
work_block is enough to pick up if we're working on the same block. work_id is used only for pooled gbt mining (not solo) to tell the pool which gbt update it came from (and is optional at the pool end).
6039  Bitcoin / Mining software (miners) / Re: CGMINER ASIC miner monitoring RPC linux/win/osx/mips/arm/r-pi 4.2.1 on: April 04, 2014, 06:41:16 AM
Con,

I am looking at stale_work() code. I am wandering if work gets stale in solo and gbt also?

if (pool->gbt_workid)
      work->job_id = strdup(pool->gbt_workid);
Shall job_id be checked inside stale_work code. For stratum it is considered as stale if there is no share but for gbt and solo?
Thanks
There are enough checks to determine if work is stale with gbt solo/pool already.
6040  Bitcoin / Hardware / Re: [ANN] Technobit HEX8A1 - 130/260 GHs Coincraft A1 board-499/867 EUR March on: April 04, 2014, 05:47:02 AM
cgminer abandoned getwork, same way they pulled the plug on GPU mining.
That's wrong, we did not deprecate getwork. There were a couple of releases where it was broken, and the code was based on one of those broken releases. Having said that, there really is no reason to use getwork these days, even the proxies proxy stratum itself.
Pages: « 1 ... 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 [302] 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 ... 570 »
Powered by MySQL Powered by PHP Powered by SMF 1.1.19 | SMF © 2006-2009, Simple Machines Valid XHTML 1.0! Valid CSS!