 It's Cape is a piece of software that is used by for by academics by government organizations by public policy folks by students by universities by all kinds of people across the world to basically find wildlife corridors. It is a constant. It helps wildlife conservation and the basic principle behind it goes as follows that if you have a bunch of national parks, I mean all of us visit national parks Tiger Reserves and what not and and you know that generally people think that okay if we create this patch of land and you know we protect it really well then you know all good things are going to happen and we'll protect our flora and fauna and and all the other good stuff but it turns out that that's not that's not enough it turns out as ecologists would tell you or like they told me I mean I didn't know any of this stuff myself. It's not just important to have protected pieces of land but it's important that all these protected pieces of land be connected if you have a shortage of food in one place the animals need to migrate to the next one you need genetic diversity. So you need animals from different different national parks to sort of mix up you may have disease that might take out one population. So migration becomes essential if it is an essential part of all ecology and all conservation efforts and as all of you guys probably already know we live in a world where you know sort of development and conservation are always at loggerheads people are trying to urbanize you know villages are disappearing fields are disappearing forests are disappearing and on the other hand if you need to conserve then you need to set land aside you need to do all this other good stuff and and how do you go about doing that and that's what this talk is about. I'm not going to talk too much about data software computation. I'm going to touch about a little bit of it. But what I hope you guys will take away from this is how a domain specific problem is is solved using you know using computation. So this is exactly what circuit scape is. It is a free open source software package actually it's licensed under it used to be licensed under the LGPL but it's now licensed under the Creative Commons package that borrows algorithms from electronic circuit theory. So that's the word why circuit in it to predict connectivity in heterogeneous landscapes. So circuit theory and landscapes hence the name circuit scape and that's our logo out there. It's a it's a resistor that kind of look like looks like mountains and there's a there's there's a mountain lion on top of it actually which was one of the first applications of circuit. So like I already talked about the you know the problem that that we're trying to solve is that of connectivity and gene flow and it has been solved for all these animals. You know Wolverines mahogany actually applies to trees also right because you have dispersion of seeds and you have genetic material flowing across landscapes for trees Puma's sage grouse is that weird looking bird out there. I don't think it can fly that's a wood frog out there on the upper right hand corner and many more species and this is just a small list actually. If you if you go on Google Scholar and you search for circuit scape you get 280 results. So that what that says is that there are 280 scholarly publications where someone has actually done work using circuit scape to figure out all kinds of stuff and I mean there are all kinds of lizards and frogs and rats and tigers and and you know things that I've never heard of that that people are using circuit scape for and and that's really is really fun to see you know when you write a piece of software that that people actually you know put it to use in ways that you never imagined just last year we got this certificate of accomplishment that by the spatial group the spatial ecology and telemetry working group of the wildlife Society they just decided that this was an important piece of work for the domain and and they ended up giving us this award. So that's that's kind of nice. Oh, thank you. This is a cover of a journal methods in ecology and evolution that that picture that you see out there is actually I mean, you know, it looks like it looks actually like a satellite image of some mountains or something but it's actually a current flow on a landscape as computed by circuit scape. So I guess we also have enough artistic stuff that you know we can be on on covers of journals now. Okay, so with that, you know, with that small introduction. What what do we really do with circuit scape? So it goes back to the basics. I think everyone here would is probably an engineer not everyone but maybe maybe I should say whoever is not an engineer should maybe raise their hand. There's like three people or five people. Okay, so so I think all of us maybe remember going to you know in our first year learning something about Ohm's laws and about physics and current and voltage and all those things and yes, here's the kind of circuits. I'm pretty sure all of us remember solving right if you put one app here of current at point a and B is grounded how does current flow through all the resistors and it turns out that you know when you have a parallel circuit like that it will split off assuming the resistors are the same so one becomes 0.5 and 0.5 and then it kind of connects up you get another one ampere in the middle red bit and then the same thing happens again. So that's you know, that's your basic, you know, if you apply your Ohm's law and your parallel resistors and your serial resistors and work through all that stuff you get that and all of us kind of toyed over it in our entrance exams and whatnot at the bottom is an example. I think it's it's cutting over my slides, but okay, I think it will work fine but the bottom is an example where you have a and B so they're not points. They're actually you know, you can think of them as as metal bars or or landscapes since we are talking about ecology and you have the white path which is pretty broad and then you have a pinch point. So if you have a pinch point, what happens and it's exactly what we saw in that example above, right? All the current that was flowing nicely and smoothly through the you know, through that wide part now has to go through the pinch point. So it all kind of comes in and and and sort of go through the pinch point and then again comes back out. That pinch point is your problem, right? If that pinch point goes away if it takes very, you know, it's not easy to cut up that large piece of you know, the large piece of land out there. But if you cut up that pinch point by let's say building a highway those animals from point A are never going to make it a point B. Now, why do we need to think about this as current hold on? I mean, you know, someone might say, oh, why don't we just think of this as a graph and find the you know, the edges that that you could remove from the graph and and find the you know, which parts of the graph remain connected. Yes, that was one of the first things that people did and turns out it works well for some things and it doesn't well work well for many things. So here's another here's the here's a similar example, but with slightly different path. So think of the white areas as your results. So that's your you know, Kana National Forest or your gym Corbett National Park. Think of the two that you like and picture them there and you know, if you're if you like to think of some foreign ones, you can you can think of those two. Um, the purple part is the habitat the white is the reserve. So the reserves are where you where animals can live, prosper, find food, all you know, all the good stuff, find mates and all that the black parts are probably cities. I mean or or habitation or stuff where people live where animals don't like to go. So if you how would how, you know, if you apply graph theory to a problem like this is just going to take the shortest path. But in reality, that's not what happens, you know, a lot of people a lot of animals will go go over the wider area, but there will always be some stragglers kind of going through, you know, through the smaller parts, right? I mean, that's what you'd intuitively think. So if you model this landscape or all these cells, this grid as a series of resistors. So just think every cell is connected to all its neighbors with a resistor and you can assign values to that resistor in a in a way that have meaning to you. You can then compute the current flow and that's exactly what happens. Most of the current goes through that upper nice part, the heavy part and and there's there's a little bit of current that goes there. So it kind of maps your intuition about how you would see movement on such a landscape. Okay. So a more realistic landscape. We are all these white pieces are your reserves and all the other stuff is it's not uniformly good or bad, but the darker it is the less likely you can go through and the black pieces. They are just I mean, you can't go through the black pieces at all. So think of the black pieces, you know, if it was a panther think of the black piece as maybe a large tract of water or or a highway or something. So how many of you guys actually maybe a show of hands? How many of you guys have noticed wildlife crossings on highway? So almost everyone right? They're underpasses. I've actually been in places where I've seen overpasses where they build a bridge for the animals to cross over and how do you think these these these underpasses are made? Do you think when when the guy building the road is, you know, he sees a deer and he's like, oh, I should just cut a piece of underpass out here. That's actually how it usually be you know happens or maybe some official from the forest department will decide that this is where animals should cross and if not here nowhere else sometimes, you know, sometimes they're guided by the intuition and it turns out to be right but it's nice to have some, you know, some some more systematic way of doing these things as stuff like circuits Cape comes to the rescue. So as you go into this landscape, those are the two points of interest. Let's let's imagine those are the two areas that we want to protect and here's a least cost path solution. So you're looking at all possible least cost paths that that go from across those two reserve and as you can see, you know, the black stuff is you can't go through that. So you have to go around it but there's a that's like a second path also can can everyone kind of see the second path to go from across, you know, the the diagonal here. There's there's one that you can go right right at the bottom but typical graph analysis will not pick up that because that's a long winded route. If you if you run circuits Cape, this is what you end up getting and you see all those pinch points right so wherever the parts are narrow is where all the current ends up getting focused and and you get high current flow there. So this is what circuit theory gives us. So again, you know, just putting both these pictures side by side just trying to build the intuition here. So so there's some value in doing in doing the least cost stuff and there's some value in doing the circuit circuit circuit analysis. And in practice actually users combine all these methods. They don't just use one tool. I mean there's not one single thing that always work people actually end up using a bunch of tools to guide their intuition and to make decisions. Why does this become important is if you are to connect those two areas and you have all this other let's say human settlements or or highways or all sorts of other stuff that you need to come overcome. Let's say you're you're an agency that funds, you know, purchases of land for conservation purposes. Where should you purchase? I mean if you have to go through a city, you just paid lots and lots of money to buy urban land or maybe there are alternative not so good approaches but are monetarily more feasible getting the most out of your conservation dollars. So so those are the kinds of questions that we can begin to answer once we kind of move beyond just thinking of least cost parts on graph. I mean, you know, as you broaden our horizons about thinking about the problem and so that's exactly here now. So here now we've combined the high. We have a hybrid approach and the hybrid approach identifies all those pinch points which you need to safeguard in order to you know, in order to put your conservation dollars at work for for this artificial problem. So, you know, we started with a toy problem. We looked at resistors. We looked at a simple a simple case then we went to an artificial landscape and now we move on to a real landscape. This is as you know, you might recognize that's Alaska right up there and you know, I'm no ecology. So I don't know why you know why the gray portion is of importance but apparently that's the that's the area of interest in this case and here are various things that happen. If your mental model is that animals move along the shortest path geographical distance, right just as the crow flies you get a if you think it's the least cost path if you do your graph analysis, you would get B if you are if you model at circuit theory you get the picture C. So the same Wolverine data the same genetic data that's put, you know, so what happens is that this the sample genetic data at all across this landscape and you can correlate, you know, this animal at point a versus that animal at point B. What's the genetic difference between them and you can then try and correlate how well that works with your model does your model predict the similarity of gene gene flow across those two regions. It turns out that if you use geographical distance, you get an R square of point 24, which is pretty bad. You want an R square close to 1.0 if you go at least cause if you go with least cost path, you get an R square of point 37 and with circuit theory, you get point 68 and we often see much higher R squares in in in other applications. So just like anything else, this is a model, you know, it's it's not perfect. It's not accurate, but it's better than many of the other things that people did before so from Alaska, we actually move to India. Those if you see on that map of India, all those green colored regions, there are lots and lots of protected areas or forests actually spanning all the way from Madhya Pradesh, Chhattisgarh, Andhra Pradesh, Karnataka. I think many of you might actually recognize what these places are and this picture. That's that's actually blown up. It's it's central India blown up and with circuit keep running through all these landscapes. So you can these landscapes are like right here. All of these little pieces all over the place and this team of scientists whose names are up there. They wrote this paper. So, you know, all of them. So they actually sampled genetic material across all these national for national parts and they found out that actually it's not just the genes are propagating across the entire you know swath of central India. They actually found that the same tiger has physically moved from Madhya Pradesh to Karnataka and you know, that's that's important in how we think about conservation, right? Because if your model of conservation is treat this landscape as a jail put a big fence around it and don't let anyone do bad things inside turns out that's not sufficient because the animals need to get out as well and it turns out they do leopards get out Tigers get out and they actually roam across large parts of, you know, of landscapes. But you know, as they conclude in their paper, I mean, you can you can look for this exact paper. You can you can put in Google and it'll show up what they basically say that our results suggest that such unplanned development will greatly compromise landscape level connectivity for tiger populations in central India. They say, you know, they find out that tiger populations are stable. They are good. They're healthy, but unless we actually start thinking about conservation in a more systematic way, which is what tools like circuit scape actually make us make it possible for we will start seeing some of the, you know, some of the bad effects again. I might be dramatizing this a little more than maybe they would do in the paper, but but that's my job as a speaker. Okay, so now that we've seen, you know, all these various different problems, how do we do it? So circuit scape is currently at 4.0. It was it has been rewritten thrice over 10 years. I I'm assuming people can guess what those logos are. So maybe, you know, just since we're after lunch session, maybe get some interaction going with the audience. So the first one. Java the second one matlab and the third one. So 1.0 was in was in Java actually, which was not written by me the matlab version was written by me and then the Python version was written by the three of us, you know, who are the authors of this paper? But this journey is not over. I mean, I thought five years ago when we started our work to convert it to Python that our work would be over that you know, we have reached the holy grail no more. It turns out, you know, the users want higher performance. They want to solve bigger problems and we are unable to do it in Python. And of course, you know, I have a, you know, my interest is always to do stuff in Julia and I think we are getting there. So maybe sometime this year or next year, we may actually end up rewriting all of circuit scape in in Julia or some some parts of it anyway. These are number of Python libraries. So I am many of you who who are actually working with data out here doing machine learning might have actually used many of these views numpy for all our basic matrix operations. But numpy doesn't give you everything. It only gives you dense matrix operation. So you scipy to do sparse matrix operations and graph operations and solving linear systems. It turns out that the basic stuff in scipy is not good enough to solve our problem. So we actually go to this library called Pi AMG which is from a few guys over in the University of Illinois at Urbana Champaign. They wrote this library to largely do graphics related work but turns out one of its largest applications is in circuit scape for for for this application. We have the GUI in WX Python and Python card Python card is unfortunately an un-maintained piece of software. So that's giving us quite a lot of beef but we're stuck to it. We are just hoping that it continues to work. We use the multiprocessing package in Python not the package I guess the multiprocessing module in Python for all our parallelization. So all our parallelization is actually done using fork which means it doesn't work on Windows as of now which is quite a commonly used platform for circuit scape but if you are on a Mac or Linux we actually can fork a number of processor processes which will use the same memory and so and give you you know parallel speed up. It would be nice to have multi-threading. We don't have it in Python. You know the way one would like it. So this is the next best and then there's plugins for our GIS and QGIS which is where you know users can actually use circuit scape through an environment that they are used to working with so you know all your landscape data all your satellite imagery and everything will come into one of the GIS software. This is what the GUI looks like pretty basic and rudimentary nothing nothing nothing like all the fancy pictures. I just showed you those pictures are actually post-processing. They don't come out of the software because there's a fair amount of interpretation of the data that happens to get the right get the right pictures but this is the basic GUI basically encapsulates all the options that one might want to use circuit scape with but what it what what this doesn't do is it doesn't show the fact that circuit scape actually is a real Python package. You can just it has an API. You can just integrate it into any other Python software and the moment we did that you know more and more people have started using it. It has a big white window where all the ugly logs come out giving you more information than you probably care about just like most other pieces of its open source right. It doesn't need to be you know fully pretty and nice. I mean it can have some under the hood stuff right? So that's useful for us when someone wants to send us a bug report and bugs are you know often reported because people you know what what people often do with software such as this is they think it's it's black box. You have an ecologist who has very little training in in computer science or mathematics or or anything else. I mean they're trained as ecologists and here they're trying to use this piece of piece of software and the you know imagine the software telling you your matrix is ill conditioned and the guy just goes huh you know and what do you do at that point you well I guess here you do what it says at the bottom please send feedback to the circuits gave you the group. We wish there were better ways to handle all these things but you know it's such is like I guess. Okay, so the data the data that it consumes is typically satellite imagery typically a raster grid. The smallest problems I showed you guys a grid earlier. So a hundred thousand cells is the most commonly used size of problem I would say if you're you know doing a small problem like a homework problem in the University or something a real use cases people will work with 1 million cells trying to push towards 10 million cells and you know they really want a hundred million cells. I think we'll get there but if you want to do full earth scale simulations you need to go to a billion cells and the billion cells is all of this stuff by the way happens in memory we cannot leverage Hadoop we cannot leverage out of core we cannot leverage distributed computing. Maybe we can if I spend a year of my time writing solvers for this and even then it may not so you know if there's a mathematicians in this audience who understand multi-grid methods, you know, please contact me. I am sure we can collaborate but at this stage it's pretty tough but again, I hope we'll get there. The finer the resolution the larger the grid. So if you if you want to model a tiger, you know, tiger, I mean the way the modeling works is how the animal perceives the environment around it and and decides to sort of move in a particular direction. If you see a if you see a water body, you may not want to go there if you see vegetation or forest cover you might want to go there if you see if a tiger sees a city it may try to avoid it or lights at night. Of course that's completely different from what a frog would see. I mean the frog needs to work at much smaller scales and so what a you know a tiger might use for modeling a tiger. You may need a hundred meter resolution. Let's say might be might be good enough for a frog. You may need to do 100 centimeters. I mean, I don't know but easy to imagine that it's a factor of 10 at least okay. So that's the data and the data sets can be pretty large. The computation is of course the real bottleneck here. So what happens here? I'm going to quickly run through this. This is not you know, I'm not going to teach you all everything that circuit escape does. I don't think that's even possible. But if you're interested, please come and talk to me below the data. We process the raster landscape. We create a graph out of it compute connected components of the graph because you know for those of you guys who linear algebra or machine learning might remember that if your matrices are not completely connected components you get you know it will end up being singular and which means you can't solve it which translates to animals in the animal space as if you have two landscapes and no path to go from one to the other. The resistance is infinity. So you know the math the math problem maps to the actual physical problem with this language. Once we get the connected components, that means you know every point in that piece of landscape is connected to every other. So you can actually you know, physically go from one to the other the once we once we get those components, we create a sparse matrix in sci-fi we set up and solve the linear system. It's essentially solving Ohm's law up all do people recognize this form of Ohm's law by the way. Yeah, a lot of people do a lot of you might think of it as v equals i times r right voltage equals current times resistance G is just conductance out here. So I have you know it's the other way around. So we have conductance times voltage equals current and you know what we used to solve on hand and by paper is now just solved at much larger scale instead of five resistors. We are solving it you know for for millions of resistors and that turns out to be a linear system that you have to solve the system is so big that traditional solvers cannot solve it and hence we have to use specialized solvers to actually solve these things. And after that we compute voltages on every branch get current currents on every branch and then you get the pictures that you saw and a million grid is now a few hours when Brad and I started our collaboration. I mean again, you know, this is how you know, you get an ecologist and a computer science talking and Brad actually first started solving this problem. He could solve a hundred cells in hours of today. We are at a point where we are doing a million, you know millions of cells in minutes. So, you know a lot of computer science and math brought into solving the problem. Of course users are never never happy. You know they don't want 100 meter resolution. They want 100 centimeter or one centimeter and sometimes you know you you have a discussion saying hey, that doesn't make sense. You know, that's artificially small and you know, people just want to run it. What do you know? So the largest machine I've seen people using is ad course and a terabyte of RAM. Did you guys know you can actually buy these things today turns out now you can buy two terabyte RAM machines and circuits give users would love to get their hands on them if they can afford them. Okay, so that was all the the compute behind it and I'm going to go to one last application here and this is the entire North and I guess on this thing. It doesn't look very nice, but this is the North and the South Americas and this is modeling climate. This is modeling range shifts under climate change. So climate changing, you know, it's a fact I think all of us believe it by now contrary to what politicians often want us to believe and when climate change animals have to move species have to move in large distances to actually, you know, sort of survive and when they have to move, you know, circuit skip comes can be used to figure out how they're going to move and what's what's what's likely to be a problem when when you have such large scale movement. It's you run into barriers like like humans, right? I mean running to cities you running to bridges you running to all kinds of other stuff there. You run into urbanization basically and this is not a, you know, so this is an application where it's not that we have two pieces of land that we are trying to connect and protect, but it's a large scale migration that will happen over a hundred years and we need to make sure that, you know, we are ready for it if you care about these things. So this is a region of South America that's blown up and it shows migration patterns that go through some of the, you know, some cities like Buenos Aires, for example, big red, you know, red, red arrows looking ominous. So, you know, I'm assuming that's a good thing here. Similar thing in in North America. This is this is a region that, you know, that's again a densely populated region. This this entire simulation actually was done for two thousand nine hundred and three species. So it's not just one species. It actually takes into account, you know, thousands of species and create this map of movement out of that. And here's an example from the from the paper that was published by Loller and other colleagues for the Vaxi Monkey Leaf Probe. I had not heard of it until I saw this paper and that's that's the region, you know, that's the stable region right out there. And if it needs to expand because of climate change, that's what you're looking at as things warm up and contraction is thing on top. So this this this version actually shows the movement pattern. So the circuit currents have been computed. So you can see the directions of the arrows as in as that show how these things are likely to move and much of this although the math and computer science is fully under, you know, something I fully understand. I don't fully understand the ecology. So I leave leave the science to the scientists here. Another another one of these this is for mountain lions same story. This is a cross for your four States in the United States and you can see how the interstate 40 and the interstate 10 out there are caught in cutting right across important movement paths. So that's where you start thinking about where should those underpasses and the bridges and all and all the other good things need to be again more more pictures of the same here. And with that I end my presentation and I'm open for questions as this one right in the front row. So how do you quantify the resistance values? So it has to be from a lot of physical factors. Absolutely. So how do you is it just intuition or there is some science there is it's it's it's an art as well as a science as you can imagine. So it you know, for example, like the tiger study that I talked about in India. They looked at Illuminosity patterns, you know, from satellites. So to figure out where where you have habitation and work that into the resistance because they cared about urbanization. If you don't care about urbanization, you may leave that out. So your resistance actually ends up in encapsulating a lot of domain knowledge and on a lighter note. Can you use the software to model Bangalore traffic? There's a lot of traffic follows least resistance, right? And a lot of drivers are very primal. I would think so. Why not? I thought about it as I drive around the one thing I should point out though at this stage is that it cannot model one way because current flows in both directions. So whereas Bangalore traffic usually just flows in one direction. Hey, she can't. Yeah, so we're all I was curious about whether this approach will work for water flows. Human habitation can obstruct water flows and plus flooding and other kinds of things and would the circuit approach work for migration of water water like for reverse courses and stuff like that local even when it rains or ground water ground water. Yeah, it's it's unlikely. I feel I mean again, I'm just kind of guessing here but water flows are driven by gravity and whereas current flows are I would I would say you can draw a parallel between gravity and voltage is yes. I would think you should be able to get somewhere with water flows for sure. The key thing is as long as whatever you're modeling doesn't go you know can you know can go both ways. It's not that it just goes one way. So it has to look. I mean if you want to use circuits cave if you want to use resistive networks, then those basic principles of how current moves have to hold and if that holds you can model anything. So I should say for example that anthropologists have used that to map how human migration patterns happened which was completely different kind of an application from from the animals stuff that we do here. Maybe maybe waters or there's one in the center there and hey, uh, it's fine. No, especially some of these stuff you're talking about in the python and all that. You know the pie spark and could do a lot of these weird computing stuff into this and worth exploring. So sorry, I couldn't could you speak a little louder? I can't hear you very well. The pie spark might be really worth exploring. Why sparse by spark? Spark has an excellent interface, you know, the python interface and a lot of your python code might, you know, one could explore that and what get looking into because you get access to the spark cluster for the distributed computation. So the algorithm is open source and I mean, can we look at it and I'm aware of spark. I'm aware of spark. I just I'm not fully convinced yet because the py AMG solver that we use as a pretty complex piece of software and it's unlikely to go and work in a distributed manner. I mean, actually get slowdowns if you go distributed unless we have some mathematical innovations that we can put into work in distributed mode. Okay, okay, but maybe some mathematician can come and help me out. So yeah, so to add to your point, basically when you take an algorithm like this that's inherently sequential or maybe at most multi-threaded if you want to make it distributed, you actually need to rethink the problem and break it up in a way that it's amenable to distributed computation and and you know, it's it's a topic of active research but active research has to translate to usable robust software that users can use. Maybe maybe in the future. So how would this whole project of circuit escape start? Like how do you get the idea that you can apply circuit theory to solve the problem? So that that was not my idea. That was actually my colleague's idea. He's an ecologist. That was his PhD thesis. He was an engineer, an electrical engineer who started studying ecology and he put two fields together and that's how the original thing started but the software wasn't nearly as scalable as it needed to be and that's how our collaboration started. So he came to me to ask for parallelization because it was too slow. It turned out we could do a lot more without without parallelizing has this been applied to domains other than ecology like sorry, where are you? Okay. Has this been applied to domains other than ecology like finance and not finance but like I said in in anthropology people have I have tried it out. So that's the one that we know of what you know, the software's out there as long as you can convert anything to resistances on a landscape, you can solve on a grid, you can solve it and okay, I don't know if it is applicable but you seem to be doing working on resistors where circuit theory applies to inductance of capacitor which is like complex number, right? Right or even diode diode nonlinear elements. So then you get into circuit simulation type stuff like spice and the size of problem you can solve is dramatically smaller than what we are doing. So in order to keep it mathematically feasible, computationally feasible rather we have to stay with resistive elements people do go with network flow based approaches. So that's the other you know, when you move away from just resistive networks, that's what one can look at. But those algorithms tend to be a lot more complex in terms of time time running complex. So how hard it is to convince urban planners or city planners that a piece of software is better than what they think that they could do. I think I think it's it's it happens slowly. It is happening slowly. For example, I do see routinely emails from people who are saying, you know, I'm a conservation planner in such and such a region and I'm using circuit escape or for my analysis. So I think it's it's the usual scientific process. You know, people I mean the socialization process. I don't think it can be enforced from above but training. It's you know. Well, like I said, the tiger paper was in India and I do see people using it, but you know, India is usually behind on these things and in India, the conservation efforts are largely within government where I think some of these things take longer time. You know, to get used to am I done with should I? Two minutes. Yeah, it's open source. What do you mean? It used to be it used to be it was part of my PhD, but since then me and my colleagues, I mean every once in a while, we'll get a grant from from some conservation agency to revamp it to the next big version, but between those large periods, there's a lot of work that's just maintenance and we just do it out of passion. All right. Thank you very much.