IRC logs for #openrisc Tuesday, 2016-07-26

--- Log opened Tue Jul 26 00:00:56 2016
kc5tjaI'm primarily bummed that I wasn't even informed of the effort, much less asked, "Hey, I know you're working on a computer design, want to contribute?"  Or, "Can we contribute to Kestrel?"00:56
kc5tjaThe existence of the PC doesn't bother me much, actually.00:57
kc5tjaZipCPU: I've resolved to continue with Kestrel-3 development as planned, and will continue to evolve the design towards a general purpose computer platform over time.01:15
wallentokc5tja: I totally feel you. I think you are facing the difference between the open source community spirit and building a commercial venture04:51
wallentoI think I said it before, but in my humble opinion the risc-v project differs from what many people expect from "open source" by the lack of an open community04:53
wallentobut anyways, kc5tja, I think your project goals are different and you should continue your venture05:20
mafmnot following all of the conversation, but I think that at least things start to get stabilised now that they have sifive around05:25
mafmbut lack of communication even when one asks explicitly and when changes are around the corner is a bit surprising / disappointing / demoralising05:26
FindeI worry they're too NIH05:31
mafmyeah, that too05:35
mafmbut I think that for kc5tja and other projects outside of the "inner circle", or some people/projects that have out-of-band communications with them (lowrisc and other "big guns", I suppose), it's frustrating05:37
mafmmore for the lack of communication than anything else05:37
olofkCan't disagree on the above :)05:54
stekernme neither06:13
olofkZipCPU|Laptop: Have you considered using FuseSoC for your OpenArty project? Taking a core design and adapt it to different boards is one of the key benefits of using FuseSoC06:18
olofkAlso, you might be interested in the stuff that mithro, _florent_ and others are doing with their migen/misoc (or is it litex now? :))06:19
olofkI think they got a complete Open Source DDR3 controller for Arty. (Correct me if I'm wrong)06:19
-!- Dan is now known as ZipCPU06:36
ZipCPU|Laptopolofk: No, I have not considered FuseSoC.  How would you recommend that it would be useful?   As 1) a means of collecting various components and fusing them together into OpenArty, or 2) as a means of making OpenArty able to be fused into other designs, or ... ?07:20
mithroYes, we have a DDR3 core working on the Arty07:41
ZipCPU|Laptopmithro: Is it published anywhere?07:43
olofkZipCPU|Laptop: I meant option 1. I assume you will use several existing cores in the design08:00
_florent_ZipCPULaptop: : 100MHz CPU (can be lm32 or mor1kx) / DDR3@400Mhz (DDR800)08:19
kc5tjaZipCPU|Laptop: wallento: mafm: olofk:
kc5tjaI've decided to keep plugging on.  After a good night's rest and some viewpoints not just from here but other media outlets as well, I've come to realize that Kestrel's value isn't so much the computer as such, but the unique niche it fills in terms of price (when it's done), open availability of information, documentation (both in book form as well as github history; and I guess, my existential angst goes into that as well!), and more.10:28
ZipCPUkc5tja: Looks like you took my advice.  Well done.  Your welcome.  ;)10:36
ZipCPUkc5tja:No, seriously, I like your post.  You did a decent job of evaluating what else is out there, and what your differences are.10:37
ZipCPUI think a lot could be said for ISA design.  The RISC-V documents are informative, and say a lot, but I ... just don't find them definitive.  (Or I wouldn't be doing what I'm doing either ...)10:38
kc5tjaSometimes, I get so steeped and involved with my project that it's very easy to lose the overall goal you're striving for.10:38
kc5tjaYou work very hard, engage the community you depend on, they're super supportive, and then wham-o, they come out with something bigger, better, faster, and arguably "more official" than your project.10:39
kc5tjaThat hit me pretty hard.10:39
kc5tjaIt'd've been different if they'd asked me, "Hey, wanna help?"  Or even just, "Hey, what do you think about this?"  You know?10:40
ZipCPUYeah.  I know.10:40
kc5tjaNot so concerned over NIH; I suffer some NIH myself.  But the secrecy and lack of return engagement is what really burned me.10:40
ZipCPUMy own goal is to be the smallest (resourcewise) 32-bit CPU out their.  Then Olof showed me PicoRV.10:40
kc5tjaIf you go with a stack architecture, you can undercut picorv32's resource count.  But, nobody likes stack CPUs.  :(10:41
kc5tja(My Kestrel-2 CPU is this:
kc5tjaThis particular design isn't very code-dense, but holy cow is it tiny in terms of resource usage.  :)  Based on an architecture that originally fit in a CPLD back in 1990s.10:43
ZipCPUNo, I'm trying to be more generic: thirty two 32-bit registers, two modes: supervisor and user, etc.10:43
kc5tjaYeah, I figured; I'm just saying nothing beats stack CPUs for small size.10:43
ZipCPUYeah ... but they don't quite program like the more ... normal computers.10:43
ZipCPUI wanted something that felt more ... normal.  (Now, just what does that mean?)10:44
kc5tjaGoing from S16X4 to 64-bit RISC-V was an exercise in managing expectations, especially when I saw how big the new ALU was going to be.  :D10:44
ZipCPUYeah, I remember hearing your figures.  Scary.  What was that, 3/4 of your FPGA just for the ALU?10:44
kc5tjaWhich, BTW, I've discovered is mostly due to the barrel shifters.10:44
kc5tjaApproximately 1/210:45
kc5tjaYeah.  Without the shifters, the ALU drops down to a mroe reasonable 388 LUTs.10:45
ZipCPUAs it is, the shifters I have are ... perhaps not what Xilinx was expecting.  In my shifts, I shift 33-bit numbers by a 33-bit number of times.  The logic needs to detect overflow, etc.10:46
ZipCPUThe 33rd bit is the carry out.10:46
ZipCPUHow about a hard number ... if its 388 LUTs without the barrel shifters, what was it again with?  1300?10:47
ZipCPUStill, I've got some unique features to what I'm doing.  Mostly things that I look forward to sharing at the upcoming ORCONF.10:49
ZipCPUOne is a unique interrupt arrangement, the other is a unique arrangement for memory reads/writes that allows the CPU to use pipelining on the bus.10:49
kc5tjaI hand-wrote my own shifters, and managed to drop it down to 1102 LUTs w/ the shifters (left and right, w/ and w/out sign-extension).10:58
ZipCPUSo ... did your handwritten shifters work better or worse?10:59
kc5tjaBut, timing analysis says I'm limited to about 35MHz.10:59
kc5tjaBetter; using Verilog's own synthesized shifters, it came out to 1400 LUTs in the new ALU design, and 1800-ish in the older ALU design.10:59
kc5tja(didn't think to remove the shifters in the old design, alas.)11:00
ZipCPUDo you think that's because the open source toolchain isn't that mature yet?11:00
kc5tjaThat's the most likely explanation I can think of.  Though, TBH, I've seen Xilinx's own toolchain do similar things in the past.11:01
kc5tjaMy shifter is a six deep set of switches (almost like a perfect shuffle switch), while the synth tools probably instantiates look-up tables and goes from there.11:02
kc5tja6 deep b/c of 6-bit shift count.  :)11:02
ZipCPUBut ... isn't that then being implemented onto lookup tables?  I would've thought that the closer your design matched the ultimate platform, the better the synthesizer tool would've worked?11:03
kc5tjaYes, but it's likely an accident that my approach uses fewer LUTs.11:04
ZipCPUI don't believe in Voodoo computers.  Just ... when I don't have time to look into things, they start looking like Voodoo.11:05
kc5tjaI'm not sure Yosys is smart enough to realize, "Oh, I can sacrifice speed for size in this application and use shuffle switches."11:05
kc5tjaI think in this case it is just Yosys trading small size for speed, when I want the reverse.  :)11:07
kc5tjaI strongly suspect the finished design will be fast enough (as long as total CPU runs faster than 30MHz, so I can safely run it at 25MHz, I'm happy).11:08
ZipCPUkc5tja: Looking at the sam-falvo github repository, ... it looks kind of sparse.  Does that contain a fully functional CPU, or just components that will be placed into one ... eventually?11:11
ZipCPUolofk: I'm not sure how I would handle any sort of automated core fusing capability.  Of the cores of my own that I've incorporated into the project, my 200MHz clock goal has necessitated that I rewrite many of them.11:18
ZipCPUI've had to simplify the wishbone spec, and keep finding cores that need simplification.  I've had to rewrite things as simple as a block RAM memory module and more.11:19
ZipCPUI mean, how generic can you get: a wishbone controlled block RAM module, and yet ... to need to rebuild it to get it up to speed?  That was a surprise to me.11:19
kc5tjaI'm still writing the verilog for it.11:37
kc5tjaI only have instruction fetch, register file, and ALU components done.11:38
kc5tjaI still need to implement the instruction decode logic11:38
ZipCPUOkay.  I was worried I was missing something.  That clarifies things.  Thanks.11:38
kc5tjaNo worries.11:38
kc5tjaSorry; I need to head into work now.  Bleh.11:40
kc5tjaOne of the many reasons this project is taking so long.11:40
ZipCPUYeah, me too.11:40
kc5tjaBack in about an hour-ish.11:42
mafmkc5tja: nice that you don't give up :-)  I think that even if there were products, it's a nice personal project so it's good for you to continue, as long as you have fun11:58
kc5tjamafm: Thanks.  It's a fun project, but I also want to share it with others too.  I was hoping to build a healthy, even if small, community around Kestrel, both software and hardware makers alike.13:35
kc5tjaI was worried though that the recent Sifive offerings would erode the already relatively small amount of interest my project has worked hard to get over the years.  :)13:36
mafmkc5tja: I think that more RISC-V hardware can only benefit you.  the same that rpi benefitted all of the small sbc boards (and not only), even if it gets the biggest piece of the pie (pun maybe intended :P)13:41
mafmand I think that, indirectly, rpi has also something to do with the more recent interest in hardware, the makers getting involved directly in hardware projects and what not13:41
mafmso honestly, even if that happens, and if the lowrisc project gets some silicon out there and what not, it can only benefit the Kestrel13:42
mafmbecause then the Kestrel would be part of a big ecosystem, more people have the chance to learn about it, there will be more software available, etc13:44
mafmthat's what I think anyway, maybe I am completely wrong :)13:44
kc5tjaI think you're right; I've also noticed a lot of hardware hacking picked up after RPi was released.15:18
olofkmafm: Yeah, I think that's a good analogy too15:31
olofkAnd remember that we have been promised open source computers for many, many years, so just because there was a new press release doesn't mean that we will suddenly have silicon15:33
* mafm would love free/open source processors, also with [more] free interconnects, even if they are not very powerful... at least they can be used for micro-servers or similar15:51
mafmalso for desktops, but well, that's more difficult, and one step at a time :P15:51
kc5tjamafm: Well, my Backbone project exports Wishbone onto a 96-pin connector.  It's only a 16-bit bus though.15:53
kc5tjaNot very useful.15:53
kc5tjaBut it will suit my immediate needs.15:54
mafmkc5tja: do you plan to sell it commercially and hope to make some money/small business out of it (consultancy, crowdfunding, whatever), or it's purely a hobby personal project?15:59
kc5tjaKestrel as-such is just a hobby project, but I was hoping I could recoup development costs by selling kits on
mafmkc5tja: !!!!!16:07
mafmI'm buy one! :P16:08
kc5tjaI need to get one to work first!  :-)16:08
mafmkc5tja: get back to work then :P16:11
mafm... so your comments about having something for the next workshop (will now be in late Nov, not Jan)..., were to have some prototype of this?16:11
kc5tjaYes.  I have a Digilent Nexys-2 FPGA development board, which I used 4 years ago to develop my Kestrel-2.16:12
kc5tja(a 16-bit home-brew computer that was close to being useful, but not quite.)16:12
kc5tjaI'm just going to re-use that development board to get everything working first, before tackling the more complex task of building a dedicated piece of hardware.16:13
kc5tja is the project page for my backbone bus, which I'll use as the backplane for the actual computer hardware.16:14
SMDhomesorry for interfering into your talk but are the any plans on workshops in EU and not US?16:14
kc5tjaRISC-V workshops?  I think the topic was raised, and there was general support for it.  But I know of no particular plans at this moment.16:15
kc5tjaBy raised, I mean on the mailing list.  Not sure if it was discussed at the latest workshop.16:16
kc5tjaI remember being asked to give a Kestrel presentation at EuroForth once; I was thinking about it until I saw how expensive it would be.  Heh.16:18
kc5tjaWhich reminds me, I need to find my passport again.  The last time I've seen it was four years ago.16:18
* mafm browsing tindie, didn't know about it :D16:21
kc5tjamafm: My inspiration for the Kestrel kit, btw, is the RC2014 computer.16:24
kc5tjaI didn't know about Tindie until I found out about RC2014.  :)16:24
mafmheh, nice16:31
mafmkc5tja: v3, or are you working on v4 already? ;-)16:34
kc5tjaCan you be specific?16:35
kc5tjaNot sure what you mean by V3 or V4?16:35
mafmkestrel-3 or kestrel-416:35
kc5tja(sorry; I'm also at work, so I'm dividing my time between this and work stuff)16:36
mafmyou should update the application portfolio to include computer vision, big data analytics, and pokemon-go :P16:36
kc5tjaThe Kestrel-3 design has a long life ahead of it.16:36
kc5tjaThe 6 MIPS performance is just the entry-level performance.16:36
kc5tjaI have ambition to bring this up closer to 50 MIPS or so in the future (somehow; not sure how).16:36
mafm(it was a joke, when seeing the rv128 being mentioned, didn't mean to interrupt important work :) )16:36
kc5tjaBut I do have some ideas for a Kestrel-4, but -4 would be more of a mainframe class computer.16:37
kc5tja(e.g., no built-in video display or audio; those would be relegated to external terminals)16:37
mafmoh, I see, I thought that it was just an april fools joke :)16:40
mafmre your blog entry on sifive, apparently one $99 board can be used for the 64-bit version (it's all a bit confusing)16:41
ZipCPUHeheh ... and here I have ideas for a main-frame class computer that has vector registers, out of order execution, and more--Cray inspired if you will.16:41
mafmSMDhome: somebody asked about it in the workshop, maybe people from Pulp (Bologna, ETH Zurich), or lowRISC (Cambridge) would host16:41
mafmSMDhome: but would be at least in a year, I suppose16:42
mafmkc5tja: the lines above were intended for you, in the case that they're lost in the backlog16:42
ssvbany openrisc toolchain developers here?16:45
ssvbI'm trying to run some tests in qemu-user -
olofkSMDhome: There have been many RISC-V-related presentations at orconf for the last two years. I counted 11 RISC-V implementations being presented at last year's orconf :)16:49
olofkSMDhome: Also, I think they have more or less settled on running a pure RISC-V workshop in Cambridge (the UK one) as the first european (ha!) one16:50
olofkssvb: Interesting. Didn't know about that page16:51
olofkWhat the hell is up with malloc for example?16:51
olofkWhat... you're running gentoo on OpenRISC? :)16:52
olofkOh.. you're using gentoo as the host16:52
mafmolofk: they have to be quick, in the next one either they do Cambridge or they do European, but cannot combine the two :)16:52
olofkmafm: Yep :)16:54
olofkssvb: Oh, or is that malloc problem specific to qemu perhaps?16:55
olofkDoes pixman have a lot of dependencies? I wonder if it would be feasible to run the test suite in or1ksim16:57
olofkor perhaps jor1k16:57
ssvbolofk: yes, I suspect that a lot of problems may be related to qemu17:00
olofkah ok. So things seem to work with the or1k-elf toolchain? EVen more interesting17:00
olofkssvb: Great page by the way. It's really useful to have a detailed description of the environment and problems17:00
ssvbno, it is poorly worded, or1k-elf is just a speculation17:01
olofkah ok17:01
mafmkc5tja: also, for when you return... why do you say that kestrel is not going to be interoperable with sifive?  you mean at hardware level?  if both implement the same userland ABI, it should be the same for most software (except OS kernel or similar), isn't it?17:01
ssvbpixman has no mandatory external dependencies, it is a low level pixel manipulation library for the X server and cairo17:02
olofkssvb: If I was to try this on a real target, I would need a boat load of packages first, right?17:02
olofkSo I can compile it without either the X or cairo backend?17:02
ssvbX and cairo depend on pixman, and not the other way around17:03
olofkAh, right17:03
olofkSo I should be able to fire up a basic linux system with gcc+make and some other stuff and run the test suite there17:04
olofkLooking at the pixman ebuild on my system, there aren't any dependencies at all, other than those hidden in the inherit packages17:04
kc5tjamafm: The Kestrel-4 page I put up is an April Fool's Joke; however, there are elements to it that are based on reality.  I might end up calling it the Kestrel-5 to avoid confusion.17:05
olofkkc5tja: Doing a Larry? :)17:05
kc5tjamafm: Re: ABI -- Right now, my CPU only operates in machine-mode.  It does not support supervisor or user modes, in the interest of keeping things as simple as possible, since I'm the only contributor to the project so far.17:06
olofkpoke53281: Would it perhaps be easiest to run the pixman test suite with the infrastructure you set up for jor1k?17:07
kc5tjaHowever, once I give the demo at the next workshop, I have several directions I want to take the design: 1) finish the CGIA, so we finally get color graphics at higher resolutions.  (2) Add an MMU compatible with at least Sv39 (I'll shoot for Sv48 if I can swing it).  At this point, I'll need supervisor and user modes of operation.17:07
kc5tjaolofk: What is "a Larry?"17:08
olofkssvb: Is each test case compiled into a stand-alone elf? Could perhaps be worth trying to just run that in anohter system17:08
olofkkc5tja: You know the one with the Leisure Suit who started out in the land of the lounge lizards and kept looking for love in several wrong places17:09
kc5tjamafm: Thing is, adding support for an MMU will probably take me a year at least, because of the complexity of the state-machine, plus all the testing infrastructure I need to build to test it, which may well include new tool chains.17:09
kc5tjaYeah, but I still don't see the relationship.17:09
ssvbolofk: yes, each test is a static binary (if pixman is configured with --enable-static-testprogs option)17:10
olofkWell, Al Lowe promised to never do a fourth Larry game after the three first, so he skipped directly to Larry V instead17:10
kc5tjaOh, I didn't know that.  :)17:10
olofkI see now that it might have been a bit far-fetched :)17:10
ssvbolofk: and it returns 0 if the test is successful and non-zero exit code in the case of an error17:10
kc5tjaI only played the one LLL game, so I wasn't aware there wasn't a fourth game.17:11
olofkssvb: If you can make those available as static files, I could take a look at that to start with17:11
olofkI don't think I have the time right now to set up something more advanced unfortunately17:12
mafmkc5tja: I see... so no MMU means no Linux?  (I'm purely a software guy myself, no idea about hardware :D)17:12
olofkkc5tja: I played most of them, being a huge adventure game nerd, but the first one is really the best one17:12
olofkmafm: I guess you could run ucLinux. That's basically why ucLinux was created17:13
kc5tjamafm: Sorry, by non-interoperable, I mean that my memory map will be different, my CPU boots to a different address than theirs upon reset, etc.  If you found or ported Linux for the Kestrel, then yes, the user-mode stuff should work.  But supervisor-level code, like device drivers, aren't guaranteed to work.17:13
kc5tjamafm: Correct; Linux depends on the MMU to isolate processes from each other.17:13
kc5tjaolofk: Yeah, but it's not really intended as an end-user OS.17:14
mafmolofk: it seems that uclinux was upstreamed, mostly (but perhaps needs porting for new arches)17:15
kc5tjaClifford has ported Contiki to picorv32; I might consider porting that to the Kestrel just to play with it.17:18
mafmkc5tja: the MMU cannot be copied from sifive, boom or some librecores design?  (I assume that at least boom and librecores would be FOSS-like, and the ones in boom would be compatible with the addressing modes??)17:18
kc5tjamafm: Their designs are tightly integrated, and if I wanted to use them, I'd have to use their entire core.  Which is doable, but it won't fit in an iCE40HX-4K or -8K FPGA.17:19
kc5tjaOTOH, they're all written in Chisel, which I've *never* gotten working even once, *with* help from Yunsup himself on the mailing list.17:20
kc5tjaThat's what motivated me to write my own CPU design to begin with.17:20
kc5tjaBelieve me, I'd MUCH rather focus on Kestrel-specific peripherals than on the CPU right now.  RISC-V is a complexity disaster, and yet it's considered a *simple* design.  :)17:21
poke53281 olofk: The pixman test suite should run in jor1k17:23
mafmkc5tja: oh my :(17:24
mafmsadly I cannot offer much help, I know zero about hardware, FPGAs, etc.17:25
mafmhoped to get some risc-v core with the FPGA in the last workshop, but got nothing done in the end :(17:26
olofkpoke53281: Is it just to fire up jor1k, somehow download the source code and start compiling?17:26
ssvbpoke53281: yes, I'm in the middle of trying it17:29
poke53281It might work. Pixman is a relatively simple packages. But it might take ages.17:32
poke53281curl "https//" > pixman.tar.gz17:37
poke53281tar -xvzf pixman.tar.gz17:37
poke53281cd pixman-0.34.017:38
poke53281and now please wait.17:38
poke53281Hmmm, there is some thing really strange going on with the terminal.17:39
poke53281and I get unnice filesystem errors.17:42
poke53281Yeah, this configure script seems to use filesystem features which I haven't implemented.17:45
kc5tjamafm: Hoping to start working on the instruction decode logic either tonight or on Thursday evening, depending on my martial arts schedule.17:56
olofkpoke53281: That was a bit unexpected to have a configure script doing funky things with the file system :)18:13
poke53281well, not really.18:17
poke53281the configure script do relatively complicated things nowadays.18:17
poke53281Have to work on jor1k again. More than half year I have done almost nothing.18:20
poke53281Ok, have to sleep now18:21
mafmkc5tja: if you set-up the tindie project, it would be the one with MMU, capable of running linux, right?18:26
kc5tjaProbably not right away, but it will be upgradable after the sale.  The "hardware" isn't really a computer, so much as it is an FPGA development board in disguise.18:38
kc5tjaSo as new bitstreams come out, you can literally upgrade your "hardware" in-place.18:38
kc5tjaThat's the goal, at least.18:38
mafmkc5tja: good enough :-)  what would be the amount of ram, the 32MB that you mentioned, or more?  and what about speed, this will also improve with the new bitstreams?18:45
kc5tjaThat depends on what I can get my hands on.  I'd like it to be at least 16MB though.  All my system firmware and development tools assume 16MB.18:50
mafmI see19:43
mafmlower than 16MB would be extremely limited, yes19:43
ZipCPUkc5tja: mafm: One of my goals with the ZipCPU is to give it an MMU.  However, my approach has been different from many other MMU approaches, it that it isn't nearly as tightly integrated.21:22
ZipCPUThere are no CPU registers to control the MMU.  Everything having to do with MMU control is external to the CPU--so it just basically becomes a "bump" on the wishbone bus between the CPU and main memory/peripherals.21:23
ZipCPUOne bit within the CPU determines whether or not the CPU is in supervisor or user mode.  That (already existing) bit can be exported to handle permissions regarding whether or not a user process can or should be able to modify the MMU/TLB settings.21:24
ZipCPUThis fits within the minimalist architecture of the ZipCPU, in that it should be easily added or removed as desired.21:25
kc5tjaZipCPU: Sounds reasonable.  Most RISC-V CPUs have to export whether or not they're running in machine-mode, due to supervisor mode being able to access machine-mode address space through the page table structure.  That way, M-mode-only hardware can issue bus errors or otherwise ignore bus transactions if the CPU's not in M-mode.21:41
ZipCPUOf course it sounds reasonable !!!!!!  ;)  No, seriously, there are some drawbacks to this approach.21:44
ZipCPUThe drawbacks all have to deal with how caching is handled.21:44
ZipCPUIs the cache based upon physical or virtual addresses?  As described above, it would be based entirely on virtual addresses.  Upon any swap of TLB entries, the entire cache would need to be cleared.21:45
ZipCPU(Swap of context, not TLB entries ... sorry.)21:45
ZipCPUSo ... it's a tradeoff.  Still, having something separable from the CPU is ... cool--if I can pull it off.21:46
ZipCPU(Pieces of this idea are built, but the full functionality is ... not there.)21:46
ZipCPUHellwig Geisse, of the ECO32 system, has suggested that the MMU should have two implementations: one supporting the data cache, and another supporting the icache.21:48
ZipCPUI'm ... not convinced either way at this point.21:48
kc5tjaYou could do what POWER architecture does, and translate via a form of segmentation from virtual address to a "linear" address, which has a whole lot more address bits (basically serving as a process ID).22:39
kc5tjaThat way, you can alter TLBs w/out having to force a clear of the cache, since the cache is only seeing linear addresses.22:41
kc5tja(in other words, while the cache is still virtually addressed, the probability of it seeing an alias between two processes are basically zero unless the OS wants it to be that way for some reason.)22:42
--- Log closed Wed Jul 27 00:00:57 2016

Generated by 2.15.2 by Marius Gedminas - find it at!