/srv/irclogs.ubuntu.com/2014/08/15/#ubuntu-mir.txt

camako0.6.1 ppa ready in silo 4... This is a mir only landing (no ABI breaks)... Here are the instructions for testing... http://pastebin.ubuntu.com/8049567/00:38
=== chihchun_afk is now known as chihchun
racarrcamako: A landing without ABI breaks?!?!02:50
racarr*choirs of angels sing*02:50
camakoI'm sure we have broken something... Just not the ABIs :-)02:58
racarr"Didn'03:01
racarrt break the ABI. Diodn't break the ABI. There may be a few bad commits. But I didn't break the ABI" to the tune of https://www.youtube.com/watch?v=3TY8vLI4buo03:02
racarr...that's all...03:02
racarr:p03:02
camako:-) "There ain't no bugs in Mir" would work too...03:14
dufluAnyone else notice how stable the "8" in libmirclient8 is? :)03:23
duflulibmirclient has the luxury of C to keep in stable. But C++ can be just as stable... we're just not there yet. I suspect we could still move a bunch of headers out of include/ and into src/ so they don't contribute to any ABIs any more03:26
duflucamako: In exciting news, I think I've got the "butter" branch where I want it. Seems to improve the usability of the phone quite nicely03:30
camakoduflu, sounds good.. Folks can start reviewing, then03:32
dufluI had to sacrifice a little bit of lag to get scrolling up from 48Hz to 60Hz, but it feels nicer now03:32
dufluStill, much less laggy than the phone is right now03:33
camakoduflu, nice! I think you can empirically tell the difference, right? Any caveats?03:34
duflucamako: Yes, it's all based on human eyes now. No caveats any more, just improvement :)03:35
camakook good... let's hope for a smooth review :-)... If you can generate some before and after numbers, it'd help the review process03:36
dufluYou may also find MIR_CLIENT_INPUT_RECEIVER_REPORT now mentions negative lag for some input events. This is correct, because they're predicted a few milliseconds into the future03:36
camakohah interesting03:36
camakohey I saw you marked some 0.7.0 targeted bugs as "Fix released"... I had done some too.... thanks for that...03:38
racarrduflu: I think...there are a few problems03:39
racarrwith the branch, but im not 100% finished studying yet03:39
racarrbut I think, if you look at03:39
racarrdroidinput::MotionEvent and03:39
racarrthe way historical pointer coordinates are added03:40
racarrwhere 1 event will include03:40
racarrmultiple pointer coordinate samples over time03:40
racarrI think the likely effect of the branch is to03:40
camakoHmmm this failed twice now if anybody wants to take a look : https://code.launchpad.net/~mir-team/mir/0.6/+merge/230879/comments/56132403:41
racarrdrop half of pointer samples03:41
racarrhence why you see03:41
racarrsomething close to 50 fps (half the 100hz input rate of most touch screens)03:41
racarrand then I have no clue where the 60hz is coming from. but may be close to coincidental from the 48hz because of the frame time tweaking03:41
racarrthe idea with the resampling is03:42
racarrbecause of the mixed refresh rate of the monitor and the input device03:42
racarrsometimes you will get03:42
racarrframes where you have two touch samples03:42
racarrwhich, say in the case of a scroll, means a greater scroll03:42
dufluracarr: That was true for the old branch. The new one has consumeBatches=true and a sample window that moves every 16ms. Hence 60Hz03:43
racarrper frame03:43
dufluracarr: So essentially you have all the raw events from during the frame contributing to a single prediction, single cooked event03:44
dufluDevices seem to vary a lot. Nexus4 produces events at 96Hz whereas my mouse is 125Hz03:45
racarrno03:45
racarrits multiple interpolated pointer samples03:45
racarrin one event03:45
racarrand we are ignoring all03:45
racarrexcept the last03:45
dufluracarr: OK, if you've got a practical suggestion for improvement that works please put it in the review03:45
racarrduflu: I am still studying like I said...just wanted to fill you in one what I had learned03:46
racarrduflu: The thing is...ok so if you imagine a scroll03:46
racarrthen you can think of say, the displacement, which on a given frame, i.e. how far it drags behind03:46
racarrthe finger03:46
racarrso the way your branch is configuring things, is lowering03:47
racarrthe minimum value of the displacement (i.e. the latency)03:47
racarron the other hand, butter on android, intentionally suffers03:47
racarr1 frame latency in order to be able to03:47
racarrresample the 100hz display smoothly to frame time, such to03:48
racarrminimize the CHANGE in the displacement03:48
racarrwhich is like jerk, or some such.03:48
dufluracarr: Yes, I realized I had to suffer one extra frame of latency to make the batch size sufficiently big for a nice experience.03:49
dufluThat's the big change in yesterday's version03:49
dufluThe new version does indeed minimize the change in displacement (slightly higher latency but smoother scrolling)03:50
racarrI think it's dropping most touch samples though -.-03:52
dufluracarr: The raw samples are all used in InputConsumer to affect the resampled curve. Where is the "drop"?03:53
racarrduflu: http://developer.android.com/reference/android/view/MotionEvent.html03:53
racarrFor efficiency, motion events with ACTION_MOVE may batch together multiple movement samples within a single object. The most current pointer coordinates are available using getX(int) and getY(int). Earlier coordinates within the batch are accessed using getHistoricalX(int, int) and getHistoricalY(int, int). The coordinates are "historical" only insofar as they are older than the current coordinates in the batch; however, they ar03:53
racarrits03:53
racarrinterpolate03:53
racarrnot extrapolate :)03:53
racarrthe drop is03:54
racarrclients want 100hz or so of touch samples for computing03:54
racarracceleration, like the device has03:54
dufluracarr: I can see some clients might want a configurable option to get the raw event stream. But are you saying that the cooked event stream should be faster than the frame interval?03:55
dufluThat's a nice ideal, but I'm not sure InputConsumer works that way..?03:56
racarrI'm pretty sure it does ;)03:56
racarrI mean thats how we are using it the only problem is03:56
racarrwe are literally ignoring the historical pointer coords.03:56
racarrwhich would give us03:57
racarrthe 100hz rate03:57
racarrI think we would find if we enabled the 100hz rate without03:57
racarrproper frame timing03:57
racarrthe jerk would come back03:57
racarrbecause we would have the problem where03:57
racarryou get multiple events per frame03:57
dufluracarr: I'm still a bit confused. I would really like to get a higher cooked event rate. If you know how to do it without the experience degrading (for me it mostly means no resampling benefit) then please point out the required code changes03:58
racarrI think the answer is use the historical coordinates + real frame timing :) but03:59
dufluIt's easy to deliver events to clients faster. But so far that always means a worse looking experience03:59
racarrim still trying to figure it out completely03:59
dufluracarr: I would love to get a merge proposal for any improvements to try out04:00
dufluAlthough I might ignore that branch for the week now. Not enough time left to dive back in. It usually sucks me in for days at a time of obsessive testing04:01
racarr:) ill have something next week04:03
racarrim going to try and work up a test that lets you pick a04:04
racarrrefresh rate and an input streaming rate04:04
racarrand then simulates a smooth scroll04:04
racarrand measures04:04
racarrthe displacement from "ideal scroll"04:04
racarrand then we can automatically test various04:04
racarrparameters, etc.04:04
racarrI mean obviously still some manual testing will be required but04:04
racarrit should give us a nice method to be sure we are making things better04:05
dufluYeah, some trustworthy automation would be good. I've developed a distrust of the input latency metrics we have right now04:05
dufluKind of like the bogus "render time" argument :)04:07
dufluWe need to work on building more reliable metrics04:07
racarrYeah...its hard :( lol04:09
racarrandroid and ios arent exactly jumping to publish their04:09
racarrtips and tricks on accelerating04:09
racarryour input stack04:09
racarrhahaha04:09
racarr*pictures cosmo magazine at grocery store checkout: 10 tips and tricks for accelerating your input stack*04:10
RAOFBah. Our CI fails in the most inscrutable way. The thing passes the tests _locally_, damnit.04:10
* duflu needs to fix up and get his client perf report branch for review. That makes a good start04:11
RAOFWhy is cmake such unmitigated garbage?!05:58
dufluRAOF: Because it's an evil conspiracy to annoy you06:01
dufluDMake is better06:01
dufluAnd EMake will solve everything06:01
* duflu misses pure GNU make. Unfortunately it's too sharp an instrument that people constantly cut themselves on it06:03
dufluOr just mess it up06:03
=== greyback__ is now known as greyback
=== dandrader is now known as dandrader|afk
=== dandrader|afk is now known as dandrader
=== alan_g is now known as alan_g|lunch
=== alan_g|lunch is now known as alan_g
=== willcooke_ is now known as willcooke
kdubalan_g, I'm thinking about: https://code.launchpad.net/~kdub/mir/testable-surface-tracking/+merge/230814/comments/56145213:23
alan_gkdub: not clear? Sorry13:24
kdubwell, no, clear enough13:24
kdubI guess i'm just thinking about testing now13:24
kduband how SessionMediator test is really somewhat of an integration test13:25
kdubor rather, if we did hoist the SessionSurfaceTracker, it would be more of an integration test13:25
kdubof two objects composed together13:26
kduband am wondering if you thought that was wrong-headed thinking13:26
=== chihchun is now known as chihchun_afk
alan_gNot so - it would simply not test their interaction13:26
alan_gAnd I don't think we need to require that interaction13:27
alan_gAnalogy: "vector" gets tested. Vector gets used in cache. We don't test that cache uses vector a specific way. Just that it works.13:29
kdubalan_g, hmm, okay13:29
kdubI'll keep thinking about it, but it seems reasonable13:30
kduband a good, small way to shift my own thinking about tests13:30
kdubthanks13:30
alan_gyw13:30
alan_gAnd the comment doesn't say the MP is wrong, just suggests that it could be an interface too far.13:31
kdubsure, I'm beginning to think that too13:32
=== cyphermox__ is now known as cyphermox
=== dandrader_ is now known as dandrader
mibofrahi guys, can anyone help me to start mir/lightdm on ubuntu touch? (http://paste.ubuntu.com/8054602/ the log)16:17
greyback_mibofra: that's not a very useful log, what has  /var/log/lightdm/unity-system-compositor.log ?16:19
alan_gHmm "[+1.16s] DEBUG: Process 25466 terminated with signal 11" - a segfault doesn't look promising16:19
greyback_mibofra: what device are you testing it on?16:20
mibofragreyback_, http://paste.ubuntu.com/8054953/16:21
mibofraon a samsung galaxy s3 (i9300)16:21
mibofrabut anyway maybe I've to explain my setup xD16:21
greyback_mibofra: I suggest for initial debugging, you install the "mir-demos" package and try out mir_demo_server_basic and see if it crashes or not. If it does crash, we'd appreciate a backtrace16:22
mibofraok anyway16:23
mibofragreyback_, I've a strage setup. I've used to have a debian bootstrapped and chrooted on android (cyanogenomd). With debian I could start the X server (after stopped surfaceflinger), and I could use X and it worked fine, so I've decide to try with ubuntu touch16:25
mibofrain the same way16:25
greyback_mibofra: interesting!16:25
mibofraI can start pulseaudio, ping, traceroute, use apt, start dbus and more, but I can't start lightdm16:25
mibofragreyback_, my goal is to use chroot to use android as layer to support the hw16:26
racarrGood morning16:26
miboframore or less if it will work in this way any arm7 device with android is supported by ubuntu touch16:27
mibofraand because android and the bootstrapped system share /dev /sys /proc ecc as I can see a device from chroot, if for example I use xboxdrv on ubuntu chrooted I can use the device on android for example16:28
mibofrabut the only obstacle is lightdm that won't start xD16:28
mibofra(because debian with X is great, but unity fits better the smartphone that's why I wanted to try this possibility)16:29
greyback_sure. unity-system-compositor is crashing for you, which most likely means mir is crashing for some reason16:30
mibofragreyback_, anyway let's try the dem16:30
mibofra*demo16:31
kgunnyou could try running the mir integration tests to just validate the android-driver working16:31
mibofraI've launched mir_demo_server_basic without options, but I can't see anything, but I don't receive errors and the applications continue to run16:32
mibofra*continues16:32
mibofragreyback_, kgunn lightdm launches also [+0.81s] DEBUG: Session pid=26012: Running command /usr/sbin/ubuntu-touch-lightdm-session ubuntu-touch-session . If I launch it I receive this: http://paste.ubuntu.com/8055058/16:34
mibofrabut I can't see anything16:34
mibofra(note the upstart bridge, I'm into chroot so I can't use upstart or init or similar)16:35
greyback_mibofra: mir_demo_server_basic runs a basic mir server - it has nothing to draw yet. With it running, execute mir_demo_client_flicker or something else16:35
mibofraok16:35
greyback_kgunn: how does one run the integration tests?16:36
greyback_I don't even know where they live16:36
kgunngreyback_: i've only ever run them in a build dir from a local native build16:36
kgunnuh...16:37
* kgunn goes digging16:38
mibofragreyback_, I receive something like this and continuing http://paste.ubuntu.com/8055089/16:39
mibofrabut I can't still see anything16:39
kgunnapt-get install mir-test-tools16:39
kgunn./mir_unit_tests16:39
kgunn./mir_integration_tests16:39
kgunn./mir_acceptance_tests16:39
mibofra*I hope it uses the framebuffer (/dev/fb0 or /dev/grapichs/fb0) as X16:39
kgunnAndroidBufferIntegration.*16:40
kgunnTests basic gralloc (gpu buffer allocation HAL) usage16:40
kgunnAndroidInternalClient.*16:40
kgunntests that the unity8 surface can establish an EGL context16:40
kgunnAndroidGPUDisplay.*16:40
kgunnTests that the primary and fallback display HAL works, and can render with OpenGLES.16:40
kgunnTestClientIPCRender.*16:40
kgunntests that the client can receive buffers over IPC and draw to them with software and OpenGLES.16:40
kgunnmibofra: the integration & acceptance tests are the interesting ones ^16:40
mibofraok16:41
kgunncan probably skip the unit tests16:41
kgunnkdub: ^ still accurate ?16:41
camakomibofra, you wanna stop unity8 and lightdm16:42
kdubkgunn, yes16:42
camakobefore starting basic server16:42
mibofracamako, they are not started16:42
greyback_camako: it wasn't even running for him16:42
kgunncamako: i think he's on a weird setup...like he's in android, chroot'd into starting ubuntu16:42
kgunnbut he's got SF stopped16:42
* kgunn wonders if stopping sf is enough to release the hw ?16:43
alan_gkgunn: if server_basic doesn't exit with an error it probably is16:43
kgunnyeah...and he got x to work in his chroot16:44
kdubit should be16:45
mibofrahttp://paste.ubuntu.com/8055122/ mir_unit_tests , http://paste.ubuntu.com/8055134/ mir_integration_tests , http://paste.ubuntu.com/8055170/ mir_acceptance_tests  but I'm not really sure if the tests were finished.16:49
mibofra(or it was only my impression as there were not other output)16:49
mibofrakgunn greyback_16:50
mibofra(there isn't a way to start unity8 on Xorg, right? just to know)16:55
alan_gA working draft of a symbol map for libmirserver is a good place to end the week. lp:~alan-griffiths/mir/initial-symbol-map-for-libmirserver17:09
=== alan_g is now known as alan_g|EOW
mibofrakgunn, there is a config file for mir like xorg.conf for x ?17:17
racarrNo, there are a few options17:19
racarryou can see mir_demo_server_basic --help for example17:20
mibofraok17:20
racarrprobably  nothing that makes it work on a device where it doesnt17:20
mibofraracarr, just to know how much it is configurable17:21
mibofraracarr, anyway a demo works17:22
miboframir_demo_standalone_render_to_fb17:22
mibofrakgunn17:22
mibofraI can see something on the phone17:23
anpokthose are the builtin opions for default components.. you can override pretty much everything through the mirserver api17:23
mibofraok17:23
miboframir_demo_standalone_render_to_fb writes on the framebuffer, right?17:23
kgunncool you see something, and yeah17:24
mibofrakgunn, so can I force mir (with lightdm) to write on the framebuffer?17:25
mibofrauhm with mir_demo_standalone_input_filter I can have inputs form the touchscreen and more17:26
kgunnmibofra: what do you mean force ?17:26
mibofraso it works more or less17:26
anpokmibofra: hm that example uses egl/glesv2 and draws some stuff..17:27
mibofrakgunn, use the framebuffer unaccelerated17:27
anpokit is similar to a mirserver drawing with egl/glesv217:27
anpokit is accelerated17:27
mibofraanpok, I think it's using the software rendering17:28
kgunnmibofra: no, i thot that test just writes to frame buffer directly rather than going via hwc17:29
kgunnwith mir on android there's really no sw rendering afaik17:29
kgunnkdub ^ sw rendering on mir on android ?17:29
mibofrakgunn, the matter is that the drivers are loaded, android use the hw rendering, but I think X or other wants another drivers to work (for mali400 gpu there are the drivers for x)17:32
racarrmibofra: Mir has no support for software rendering via writing to /dev/fb like your X drivers are working17:37
racarralmost certainly you are using the android drivers17:38
racarrif the demo works17:38
mibofraok17:38
mibofraracarr, the demo works17:38
racarrwhat about running demo_server_basic and one of the clients? e.g. mir_demo_client_fingerpaint17:38
kdubyeah, writing to the fb directly wont work17:39
kdubwell, lets just say its not the path thats supported :)17:39
=== cyphermox_ is now known as cyphermox
mibofrawith mir_demo_client_fingerpaint I don't receive any output on the screen, but the executable doesn't give to me errors and it doesn't quit17:42
mibofra*if I don't stop it17:42
kdubhave you tried mir_demo_standalone_render_to_fb?17:43
mibofrakdub, it works17:43
kduboh great17:44
kdubthats the tricky part17:44
mibofraok I'm going to have dinner17:55
mibofrasee you later guys17:55
racarr:)18:02
=== _morphis is now known as morphis
mibofrare-hi xD18:37
racarrLunch!18:38
mibofrakdub, racarr kgunn just for curiosity I've installed also xorg and lxde, in a glxgears test, debian used to do 60fps more or less, ubuntu touch 91 :D19:32
mibofraanyway19:32
mibofra1|root@m0:/root # glxinfo -display :0 | grep OpenGL19:33
mibofraOpenGL vendor string: Mesa Project19:33
mibofraOpenGL renderer string: Software Rasterizer19:33
mibofraOpenGL version string: 2.1 Mesa 10.2.519:33
mibofraOpenGL shading language version string: 1.2019:33
anpok\o/19:38
anpokwhat device are you using?19:38
mibofraa samsung galaxy s319:39
mibofrathe gpu is a mali 40019:39
kgunnyep good to hear19:40
mibofrauhm kgunn I get something useful (I think)19:54
mibofrakgunn, racarr, kdub http://paste.ubuntu.com/8056495/19:55
kdubmibofra, you have to use upstart19:55
kdub"service lightdm restart"19:55
kdubas the phablet user19:56
mibofrakdub, I've tried but it doesn't work19:56
mibofrakdub, it's set to autologin with phablet user19:56
kdubjust running like that won't work, as it has to be started with certain arguments19:56
mibofraok but that's lightdm : http://paste.ubuntu.com/8056507/19:57
mibofrakdub19:57
kdubwell, the X server shouldn't be starting at all19:57
kdubdon't know what might be going wrong there though19:57
anpokmibofra: is there no unity-system-compositor.log in /var/log/lightdm/ ?19:59
mibofrakdub, the x server start on the framebuffer19:59
mibofraanpok, yep but it isn't very useful19:59
mibofraanpok, it's this http://paste.ubuntu.com/8056543/20:00
mibofra(anyway, if you have anything more important to I can leave :) , just I won't to disturb)20:01
mibofra*I don't want disturb20:01
mibofra(xchat autocorrect xD fantastic)20:02
anpokyou could pretend being lightdm .. by calling unity-system-compositor with --from-dm-fd 0 --to-dm-fd 1 if you want to debug that20:03
mibofraanpok, in fact I don't pretend the problem it's light xD20:05
mibofrabut I've to use light to launch it, that's the poin20:05
mibofra*point20:05
anpokwhy is that a problem?20:05
mibofraanpok, it isn't a problem, I like also the startx approach, so I don't have to use a display manager to run the display server. But mir is really all the package display manager + libraries + greeter20:09
anpokmir provides the libraries for that.20:16
mibofraanyway some demos works anpok kdub like the framebuffer one20:21
mibofrasome like mir_demo_client_eglflash go in segfault20:22
anpokmibofra: try launching mir_demo_server_shell --file /tmp/somwhere  ... then mir_demo_client_eglfingerpaint -m /tmp/somewhere20:22
kdubmibofra, the framebuffer one drives the display via HWC20:22
kdubnot the /dev/fb020:23
mibofrakdub, I've understood20:23
mibofraanpok, I can find the mir_demo_client_fingerpaint not the egl one20:25
anpokoops20:25
anpoktypo20:25
mibofraah ok20:25
mibofraanpok, anyway I launch a test like this one and I don't receive errors or similar, only the binary that keeps running without output on the screen20:27
anpokoh20:27
mibofraeh anpok , the only demo that works with an output on the screen is mir_demo_standalone_render_to_fb at the moment20:28
anpokmibofra: to solve that you need a few hours out of kdub or AlbertA20:36
mibofrafantastic xD20:36
mibofraanpok, and if they want20:37
kdubmibofra, try20:46
kdub./mir_demo_server_basic --launch-client "./mir_demo_client_egltriangle"20:46
mibofraok20:51
mibofrakdub, sh: 1: ./mir_demo_client_egltriangle: not found20:52
kdubprobably in /usr/bin20:52
mibofraah lol ok don't worry20:52
mibofrayes I didn't see the point kdub sorry20:53
mibofrakdub, Current active output is 720x1280 +0+020:53
mibofraServer supports 3 of 6 surface pixel formats. Using format: 220:53
mibofraSurface 0 DPI20:53
mibofrabut I don't see anything20:53
kdubokay, so something is locking up probably20:53
kdubtry adding --msg-processor-report log to the end and pastebinning the out20:55
mibofrakdub, --msg-processor-report on/1 or similar?20:57
mibofraonly adding the option I get the help.20:58
mibofrawith --msg-processor-report 1 or on I get segfault20:58
kdubhas to be "log"20:58
mibofrakdub, yep I've noticed now that on the help20:59
mibofrakdub, http://paste.ubuntu.com/8057321/21:00
kdubhmm, so the client's blocking21:00
kdubcould you pastebin /system/bin/logcat?21:00
mibofrakdub, I can do a better thing, if you have netstat I can send you the logcat output in realtime21:01
mibofraif you want21:01
mibofranetstat lol, kdub I wanted to mean netcat21:04
kdubmibofra, lets just stick with pastebin, dont know that one21:05
mibofrakdub, ok21:05
mibofrakdub, I've passed logcat output to pastebinit21:07
mibofralet's wait until it finishes21:07
mibofra(I hope it will finish)21:08
mibofrakdub, anyway I've stopped any service can lock hw, like the media manager, zygote, surfaceflinger, audioflinger and drm21:09
kdubit wont finish21:09
mibofra*of the android system21:09
mibofrakdub, I'm pasting21:09
mibofrakdub, http://paste.ubuntu.com/8057442/21:17
kdubcool, no errors21:18
kdubdoes21:21
kdub./mir_integration_tests --gtest_filter="TestClientIPCRender.*"21:22
mibofrakdub, a thing, I've the executables in /usr/bin and /usr/bin is in the path21:22
mibofraso you can omit the ./21:22
mibofrakdub, http://paste.ubuntu.com/8057461/21:24
kdubinteresting, the client rendering is working too21:24
kdubnot sure what's blocking then21:25
mibofrakdub, <mibofra> http://paste.ubuntu.com/8055122/ mir_unit_tests , http://paste.ubuntu.com/8055134/ mir_integration_tests , http://paste.ubuntu.com/8055170/ mir_acceptance_tests  but I'm not really sure if the tests were finished.21:26
mibofratests I've done some hours ago21:26
kdubno, the integration tests don't finish for some reason21:27
kduband the MultiThreadedCompositor test is hanging21:27
mibofrakdub, I've send a ctrl+c after a while because I thought they were frozen21:28
mibofrabut I can repeat the test and I can wait them finish21:28
mibofra*tests21:28
mibofraah kdub yep the integration tests were aborted but I've not aborted them21:48
mibofragood night kdub and thanks22:35
mibofrasee you22:35
mibofragood night everyone and thanks too22:36
Nothing_MuchI forgot whether my question was answered or not, so... Does Mesa need patches for XMir to work from the Oibaf PPA?22:37
racarrNothing_Much: First time hearing about the oibaf ppa so can't be sure22:40
racarrif Mir works but XMir does not Mesa will not need additional patching22:40
racarrThe DDX drivers, i.e. xserver-xorg-video-intel22:40
racarrdo require a patch and if xmir isnt working but mir is22:40
racarrthats a good guess22:40

Generated by irclog2html.py 2.7 by Marius Gedminas - find it at mg.pov.lt!