 Welcome. This is the Pipeline Help Project of the Sheikot Africa Contributon. It's the 21st of April, 2022. Great to be here together. Topics that I had on my list, I believe we had talked about going through steps. So last time we went through a steps. Interactively from the, interactively from the GitHub UI. And this time I think we talked about we may want to consider doing steps from a command line in development mode. Sophia and Sophia, does that match with what you were thinking we would approach, or Nafisa, help me help me likewise. Do those two things sound like good, good steps or is there something else we need to put on the agenda first I guess we should probably put questions and answers if you have questions let's be sure we answer those first. I don't know. Sorry Nafisa I had difficulty hearing you could you say that again. For me, I really don't have much questions I just have something to say about what I walked on. It's not necessarily questions just like my discovery. That's that's a very good one so progress reports and status discussion. I like that one. Yes. That's very good. Let's put that first on the list. Sophia, why don't we go ahead with with that. I'll take you want to do you want to share your screen or you're okay if you just describe it what would you prefer what works best for you. I would just, I would just talk. Okay, go ahead. So, I was able to finish the first be was a title sorry, the preparation for pipeline experience stocks. So it was actually interesting because the meeting we had the last time really really helped. So the last meeting I was very confused about what we're actually doing but when I finished the tax on the preparation and pipeline experience I was able to get like a real understanding of what we're doing. So, and here's the actual right the Jake, the check in some help. Sorry, let me get that. Butte step the at the dozen apps or something sorry guide in the look in my look at Jenkins had fewer parameters than the website and it was actually very interesting I also did a lot of fun with the pipeline script generator generator I don't know if I'm going to pipeline script generator. But I really had a lot of fun. Although I wish I could just create like an entire pipeline on one goal instead of having to go back and forth. So, that was what I did and I'm just trying to say I actually got an info understanding of what the taxes all about. Good. Well, and, and that finding finding those complications is a is a good thing for us because you're you're discovering things that other users as they're brand new starting see as well, and it helps you when you see. Okay, the build step and just so everyone, everyone understands this is what what what Sophia was talking about so the pipeline build step is this thing right here. And what Sophia is describing now I admitted this is very tiny text I'm not expecting you'll read the text. But what she sees is is one we highlight. When I click some of these things they give me nothing useful. They just say hardly useful it's got a name there. There's a name parameter. It's a string a baseline parameter it's a string. No hint how do you use it. Why do you use it when do you use it. Boolean param. Okay, I would have guessed there'd be a value sure and it would be a Boolean that makes sense, but, but really, that's all the, and these kinds of things just aren't as helpful as people need when they're doing work in pipeline. So, now what what she observed was that when she's running her local Jenkins, instead of what this thing does which is shows every possible plug in if you install them all. You would have this, this very long list what she saw was a much shorter list that's manageable, but still contains many things that are empty. Did I describe that correctly Sophia. Exactly, exactly. I mean, it's her local copy is is is better tuned to her needs because it only shows the information about her installed plugins, but it's still not helpful in the sense that the information isn't there. Good. Okay, thanks. Thanks Sophia continue. That's actually all. Okay, great. Alright, well that's that's excellent. Thank you very much. Matthew, did you want to did you want to share how you're how you're doing and how you're feeling things barriers you may have encountered. Yes, yes, can you hear me. Yes, sure can. Great, great. So I also went through the steps I realized that I wasn't marking them as I was going so I went back to market kindly among this step to upload the pipeline build step plugin. I realized that there was something wrong with my maven so I went back to reinstall it so I had to do the step for the compiling the plugin and then confirming the output. So that's what I got to one minute something else. Yeah, so with the pipeline syntax and snippet generator I saw that the resetting and I should I say inconsistency like do a smaller ones, like on my side. So I also went to like the main website to go and check and the missing information or things that could be that we could possibly add to it. And I also saw in the talks that there were steps for things like checkout in it and echo and input. I also had a look at that. Also for the building of the Java up to maybe and I started with it, but I'm kind of fixing some WSL issues. Yeah, I'm also down with that. So that's that's pretty much for my update. The other things I didn't have like challenges. I didn't have it to the code so that's what I've gotten to so far. Excellent. Good. And, and those, those are exactly the kinds of things we hoped you would experience in that initial initial task list. So Bruno for your info what we did is we constructed a series of steps that are broken down. Okay, in this particular document. There's a task just get started preparing a pipeline. So create a Jenkins pipeline. And, and that's important because they needed context what does it mean to do a pipeline in Jenkins. In order to make the changes they'll eventually need to make they've got to be able to build a Jenkins plugin so we have this task compile a Jenkins plugin from source. And then make a change to that plugin and watch that the change you made is visible in your local Jenkins. So this is really where we're helping them become Jenkins plugin developers by doing these tasks. Then our ultimate destination is this one where we say, we want them to be able insert some help that will help a user of as a mythical example. In the same parameter, they find a way to say, or let's chase a more basic one Boolean param that says why you would use Boolean how you use it and give some pointers about. This is how you interact with it. So those kinds of things are what these initial tasks were trying to do. Very good. All right. Sofia or off you any any other things that you wanted to share here or concerns you had as you were going through those initial experiences. I actually did add issue using blue ocean to create a pipeline ejections fire so I needed to have tools like maybe and JDK in my pipeline and I couldn't do it with blue ocean. So I had to manually I had to go to get hold and edit the file and include the tools that I needed for the pipeline in order for me to actually continue building it. It was really, really stressful. Good. Yeah, so configure, configure a JDK configure, configure a build tool in this case Maven and and all of that dealing in the context in the context of your working computer. Good. Okay. So do you I hadn't checked with either of you do you have Docker available on your computers, and help me remember Sophia are you running on Mac OS Linux or Windows. I'm running on Mac OS and my Jenkins locally I'm not using Docker. So you answered one of my questions you have, you have Docker and is your Mac OS and AMD 64 so an Intel architecture or is it an arm architecture. I don't know it's a more than that. It's it's it's an M one. Okay, so that answers you answered it that's arm. Okay, so on an M one. Okay, so using using Docker. Okay, so Mac out Mac OS on an M one using Docker to and you're running your Jenkins from inside Docker or you're running Jenkins locally with just Java minus jar Jenkins dot war. I'm running Jenkins locally. Okay, all right. Good. All right now you you're warming Bruno's heart because he likes the arm processor architecture good choice. That's great. Running Jenkins locally but you have Docker available. Oh you do not have. Okay, no Docker. Got it. All right. Okay good Docker is available for the M one, but it would, it would, you would then end up using a different image you would use arm images instead of using Intel images so good good to know okay. I'm offy are you on Windows do I remember correctly. Yeah, yes, I am so I also installed and I have Docker, but I have to like reset up the top of my WSL. That's like windows. And yes, my Jenkins is also running locally. Okay, good. All right. So, that means we've got at least since you've got WSL Windows subsystem for Linux, and Sophia's got Mac OS we've got at least a relatively common base where the two of you have some access to Linux to Unix style commands. And so we can use those good. Very good. All right. Excellent. Any, any other concerns before we go on from the progress reports to the question and answer section. Okay. So, so we had, and for, I guess next question that is, are there topics you wanted to ask questions about, if not, we could, we could look at next steps on some tasks and, and show and talk about them as we go through them together. Yeah, that'd be great. Okay. All right, so the, the steps that. Now, if I remember correctly, you've both been through the steps to build the Jenkins plugin, or not yet. That's that's still on your list. Not yet. I have cloned it, but I've not yet. I've cloned it. Okay, good. So, so if you're okay with it, then what I'm going to do is I'm going to actually go through those steps. And I wonder if it's easier for us if we'll we do. Yeah, let's just do those steps together if you're okay with that. I'm going to show you on my Windows computer, but the steps I'll take, I think will be reasonably portable to to your Mac OS, and, and to the Windows computer as well. So is that text big enough do I need to make the text bigger in that window is okay for me. Okay, great. All right. So first thing I'm going to do is I'm going to. Oh, you know what, maybe I've got a better way to do it. Have either of you use the GH command yet. No. Okay, all right. Let's let's start with this one first then let's that we'll do it get get command line get first and on Saturday at the introduction session that we're doing that I'm doing this Saturday. I'll, I'll talk about the GH command as well. Oops, what just happened. My screen just went dark. Okay, something. I apologize. All of my screens just went blank. Can you still hear me. Yes. That's that's no help. I can't see anything. Okay. What have I done. I pressed some key sequence. And now my screen literally is absolutely dark. This is terrible. I am sincerely sorry. I can wave at you. And are you seeing my screen being shared. So, so, so, oh, but it is for okay, so I probably am going to have to restart my computer that may cause the meeting to end. I apologize this has never happened to me before. Control. Control Q control in. No. No, I am. I am truly without video on my screen at all. I will restart my computer and be back shortly if the meeting ends. I apologize rejoin at the same URL. I'll be back. Okay. Oh, hey, I'm back. Okay. Can you can you still hear me. Can you, okay, good. So I didn't have to restart after apparently pushing the power button without actually pressing it long enough to restart fixed my problem sorry for the embarrassment. Let's go ahead with what we were going to. Okay, this window. Okay is now responding so get. So first, get clone. And I need the repository URL so let's go find that. Build step plug in and grab this repository URL and then I'm just going to paste it here. So this is cloning the local copy and then pipeline build step plug in. Now I need to check my Java version and I have 11.0 14.1 that's a good choice. And I need to check my maven version. Okay and that's 3.8.4 which is also fine. So back to the steps that were in our list it talked about forking it cloning it, and then compiling it and so I'm just going to use this step to compile it. And this step will actually compile it and skip executing the automated tests and the reason for that is, it's faster to compile without running the tests. In general, we like to run tests tests are a good thing, but in this particular case for purposes of our exercise today it'll be simpler if we don't run the tests for right now. So it's going to start giving me telling me all sorts of things about downloading a bunch of dependencies that it needs from various places that help me build this particular plug in and it'll take a little bit of time to do this. So if you want to do this same thing you don't necessarily even have to use the pipeline build step. It just happens that these instructions are focused on the pipeline build step to get you started. See and I see some chat messages here. Oh, got it. Okay, so I've built the plug in. What you'll see is target, and there's pipeline build step dot HPI so compile it, and we saw the output that it expected. And now this says okay upload this, this to my local copy of Jenkins in my local copy of Jenkins so my copy of Jenkins is actually running here. It happens to be running on this, this particular thing. And the way I upload a plug into my copy of Jenkins is I go to manage Jenkins, manage plugins advanced. And now there is a choose so notice it says all sorts of things about proxy. Ignore that about deploy plug in this is the one I want. So I'm going to choose a file. And now I've got to go find it. And it's in hub plugins and here target and pipeline build step dot HPI so you see that I've chosen the file. It's going to offer okay do you want to do that. This is the file it's going to do I'm going to press the deploy button. Now it will tell me okay I'm not going to deploy and let until you actually because I already had it installed, I have to restart Jenkins to get the next. So I'm going to click restart Jenkins. And what this will do is now yeah and my Jenkins was not too busy so that's good. So now it's going to restart. So reminder of the steps I took there I cloned the repository. I compiled plugin. And then I uploaded it. And this upload was to my local Jenkins. So my local Jenkins will now have the new version of that pipeline build step. Okay, my, my local Jenkins has 20 or so agents connected and 1000 or more jobs so it's a little busy, it'll be a minute or two. Oh yeah, Mark. Yes. Yeah, I would love to know what the agents like for I will machine it. And I think when I was uploading the scripts, something like that's when I was creating the pipelines. Very good question yes so if, if you go to Jenkins.io and you can, there's a page called using Jenkins agents that describes what an agent is, and has this three minute video tutorial that introduces you to the concept of an agent. And, and so by all means watch that video, and get, get some idea of, hey this is why you'd use an agent and this is how it would help you. And these are the kind of things we can do with an agent. So in, in my case, for example, I use agents. I've got agents like this one right here, Pi 4B, which happens to be a Raspberry Pi 4 with eight gigabytes of memory that I use. So that I can be sure that my code runs on a particular CPU architecture. I've also got agents like this one that runs a or here let's pick this one. This one that runs a different CPU architecture and different operating system. And each of those is to help me be sure that things work well so agents are a way of doing things variably. I want to do them on different places with different computers, and their ways to do things that so that I don't have to use the controller directly. Did that answer your question offy. Yeah, thank you. Okay. So, so I've finished that upload process you remember we were the process we were doing is we wanted to upload the build step. And I should see it in the installed list of plugins so when I go to installed, and I type build step there's build and now if I look down here. See which and which plugin provides the build step I have to remember this, the plugin is pipeline build step okay. So let's look for pipeline build step. There it is. Okay, good. Notice what this tells me oh shouldn't have pressed that notice what it says here. So it's showing the version number is 2.18 dash snapshot private some funny character string mark II. That's my username. And this is telling me oh I'm using my own local build. So, I have seen that I have now if I've been smart I would have shown it to you beforehand, because beforehand you would have seen that my pipeline build step was running 2.17. Instead of this 2.18 snapshot. So the more. Yes Bruno. Sorry, I have a question. What about the gray part, you know with the check mark, why does the power and test executor plugin has dark blue checkbox and yours is great. Very good question okay so so and let's hover over it to see so so you're asking about this check mark here or the one here and when I hover over it it will tell me what's going on. So, so when I hover over the dark and check mark it says what that check mark is it would allow me to disable the plug in so when I click it it disables it. But I hover over this one, I can't disable it, because this plugin is required by other plugins that I have enabled. And if I were to disable this one, I would disable those other plugins. So did that answer your question bro. Perfectly thank you. Alright so so and, and that's that's already an interesting part of of the Jenkins world is plugins can depend on other plugins and they often do. There are there are plugins that provide base functionality. Other plugin plugins then you use that base functionality and depend on that plugin. Good, very good question. Okay, so so we've taken that next step of upload the pipeline build step plugin. Now the next challenge is, let's, let's find and this is where we should have. Okay, this step is missing something right because we should have looked at the help on my local Jenkins maybe I can have the two of you guide me on this one I think in the pipeline help what but what we should do is let's open up the pipeline syntax. I think that's the place where we can get pipeline help. Right, and we're going to go to build. And now in the pipeline. Let's see. No, it was. Not yet. Oh, here we go parameters. And no because this takes me to the general build step. Help me out here Sophia I think you would you had just recently found the online help and seen that it was correctly different than than what was visible elsewhere. I'm not seeing what I was expecting to see here. All right, go ahead Sophia. I couldn't navigate from this for my from my local to the Yeah, so and that what I was looking for is there is a way to get access to well let's let's just keep going on this so so already we can see here is here is the online help for this this plugin. And it says when I click the question mark it tells me describes what this is and click that question mark and it says, whoops, we just found a bug there. Let's let's hide this just a minute and be sure we can see that correctly. So when I click project to build. Yeah, here it is name of a downstream job to build. This is the help for it and so now what we want to do based on those steps is we want to modify some of some help somewhere in this file in this plugin and see that we can change it. So back to where we were. Let's pick how about. Even the top level thing just for now trigger a new build for a given job so I want to find that text modify it. Compile a new copy of the plugin upload it and then we're going to see that that change was is visible. So that's the goal here is to be sure that you're comfortable making changes and seeing that the changes are visible to you. So the way I find that text is with this. I like the get grep command, because it really does a nice job of finding things. Okay, so, and what that told me is the file that has that text in it is right here. Sorry for the purple background that's their purple text that's really terribly hard to read. Let's open that file. See and the easiest way is probably just for me to navigate it in my file explorer. So hub plugins pipeline build step and then the location was source main resources source. resources org. Jenkins CI workflow. And now there are if you're a visual studio code user there are better ways to do this. I'm not skilled with visual studio code but that's certainly one technique you can use to find things build trigger step. So here. Oops, we want to edit that file. Give me no pad. Come on, where is my note pad. There it is not bad. Use the simplest stone knife editor possible. Okay, here is the text for that trigger a new build for a given job. I think weight decided. He wanted. All right, no, you would never commit such a thing, but this, this is a good way to illustrate what we what we want to do so here we go trigger a new new build for a given job so I've now done that I've saved it. I'm going to file it, and then I'll upload it to Jenkins and restart Jenkins, and we should see that as the new help. Clearly, I need to get an m one. This, this would be much faster on on a Mac that that I would like that a lot unfortunately I've never used a Mac before. Okay, so the Linux distribution called as a healing mix which works perfectly on the back and one. Sorry. Oh, oh very nice okay I wasn't aware that anybody done a Linux port to m one that's cool. Okay, now let's, let's do our upload here. So we were here. Again, I go to manage Jenkins manage plugins advanced and choose a file. And thankfully it remembered the location so I pick pipeline build step dot HPI. Now, this will should give me a new it may actually not give me a new number because I didn't commit anything. Well, I have to see. It may be the same thing as before, but we should see my my help the next time this restarts. So Jenkins is restarting. So we've been through. We've been through the steps of Oh, I, I shame on me here I didn't follow my own directions. Let's follow follow the directions. While that's restarting my apologies. When working with get please always create a new branch. First thing you do anytime you make a change create yourself a new branch. It's a lot easier to track things and get if you're using a branch. So we look at the changes that I have pending. There's my brand new very valuable help text. So this talks about how you find that text. And then I did make a small but noticeable change. And if we look at get status. But it says here's a modified file. Then I compiled it, we've uploaded it now if we're lucky it's here and ready. And we, we should now be able to look at the pipeline syntax generator for build. When I click this question mark. There it is. Congrats. Yes. So, but the idea here is this kind of a round trip where you make a change. And you may even commit it. So I could for instance, say get commit. Mark weights help. Now I've, I've added mine on top of what's what was already there. And if you commit that shows that I know how to get changes into my local Jenkins and getting them into my local Jenkins is is the first step towards being able to make improvements. Now this last step is to throw away all the things that I just did. I have to do a little bit more because I did a separate branch, but, and what was the name of our branch it was changed some help so I'm going to delete the branch change some help just because I don't need it. We don't need mark weights special thing. So, but the question so far on what we've done, other than the possible terror factor of wow okay that was a bunch of steps, and practically speaking you should expect that there will probably be surprises or problems that you'll encounter at any one of those steps. If you do ask questions and slack, and we'll we'll help you through we we we know that this is, this is a new thing for you and just like compiling with maven maybe something that you haven't done a lot before. Likewise modifying these finding and modifying online help may also be something unfamiliar it's okay we're happy to assist. Okay. So, now the, the, the next, the next piece of this is the hey let's find an insert something into the, the, I into the actual place where we need to help. So, I had created long ago, a page that tracks. Well, okay this page gives us feedback on Jenkins documentation you don't need to look at it, unless you want to be scared from people saying very harsh things about how much they would like more documentation. And don't be intimidated by it it's just yes they're sometimes very blunt with us about hey it's not well enough documented. But if we look at, let's see and this table right here is a place where so this is inside this is a second tab of this sheet shows the plugins that have lots and lots and lots of feedback complaining. And if we look at the counts down at the very bottom is the most complaints pipeline build step yeah that's why I picked that one first. Lots and lots of give me more please give me more SCM one of the plugins I maintain is get the get SCM plugin is the next on the list for people wanting more then get itself. If people want more, more help, any one of those is a great place for you to you to help us. And, and so you compile those and then we could pick one of those and try to find a way to find and improve the help for that plugin. So, questions so far, or you're okay if I go on and try some more steps. I wanted, I wanted to ask about the resources are we are we getting the information from the like recent teachers modify the system guide and I don't know we are we getting the modifications from all is it's all in our head. Ah, good, good, good question right so what, what changes should you keep proposing right is I think is what you're asking what, what should you suggest as the improvement for something. Yes, exactly. Good good question okay so so what the first step for me was just insert something that describes an existing an existing thing that isn't. Already described. So if let's take this example right here. If we can find a way to describe Boolean param with more text. That's already helped, even if the description is is flawed or imperfect because it shows we found it, and we could put some text to describe it. Yes, this step right now is not worried about you contributing your change to the Jenkins project yet this is just you finding it, showing you can find it, and then we can talk about okay what does that mean now that I found it. Does that help. Yes, yes. We're in this and this step. We're not actually worried initially about. Oh no I take it back. I'm wrong. The goal here really so when you when you get it. When you get something ready there we we should talk about what text you put there, because then it's a good place for us to have a conversation about how do we describe this let's let's do. Let's put it together or would you rather find it yourself and then we we take it. Take it ourselves, you take it yourself. Well, we still have some time I guess we can take an example. Okay, great. All right. That is still showing. I wanted to see. I've, I need to do a little bit more looking just a minute. Stop this. Yes, found it. Thank you. Okay, good. Now I go better. All right. So you remember I had asked how do I find the online help for my specific set of plugins that I have loaded so here. Notice I'm now on the snippet generator the snippet generator shows each of the steps I can choose like build. This steps reference on the left is the equivalent of the pipeline steps documentation, but only for the plugins that are loaded in my Jenkins so this is custom to me. And so when I look here at build. Notice it's got these little expand and contract things when I look at build here. Only the things that are available on my Jenkins installation. So for example, if I want to take a the build, the build step. And I want to provide better description for the job parameter. This is where I could find it. I can go look for that in the, in the text now if I want to better describe a credentials parameter. Oh, nothing here that tells me how to find it I'm going to have to go looking to see if I can find how to locate a credentials parameter. Because I don't have the easy thing of grabbing some text from it already or likewise run. So the easier ones to find are things that already have some text that I can I can go find that otherwise I have to go looking in source code to locate the these other pieces that I can point to. Maybe it's best if, rather than me trying to do that search here in the 10 minutes we've got left. Let me take an action item to prepare myself for that kind of exercise so that we could do it the next time we meet. And then we talk through it there, because I'm not sure that you watching me go searching for that without me having thought first about how to do the search most effectively will help help either of us. So, let me ask back to you, Sophia and Afi are you okay if rather than me attempting to go find those pieces that I was looking for that rather will do that in our next session, so that I can I can take you on a tour to show you how to do that. That's to be fine. Great. Yeah, so so the kinds of things that that let's take. Yeah, so here. Yep, good. The kinds of things for instance that I would expect to see here. Actually, maybe, maybe let's do, let's do something a little different. I'm going to show you a slightly different way of doing it that may help us see it even more readily so this is another step that in this last 10 minutes that it may help you even more than having having me show you how to search so if I want to run the my copy of the plugin that I just built, there's a shortcut technique I can use to run it. And, and that shortcut technique actually uses maven. I'm going to do it right here maven. This is d Jenkins dot version equals two dot three three two dot to HP I colon run. So, the reason the reason I'm showing you this is when I uploaded my plugin that newly built plugin into my big Jenkins. There's an awful lot of other things in it, whereas if I run it this way with just this maven command, it will load just the build plugin, and having loaded the build plugin. It keeps my view of things much simpler so let's, let's let this run for just a moment. The shortcut technique may help the two of you as well, because it's entirely local to your Jenkins system to your Jenkins environment. Okay. So just like today you run Java minus jar Jenkins dot war. This is the equivalent of running Java minus jar Jenkins dot war. Oops, and guess what I have something already running on port 8080. Now I have to figure. I probably have a Jenkins running on my computer don't I. I think I'm going to see the same thing. So you have to probably stop that and then run it on a different port or something. Yeah, let's try this one minus d jetty port equals 9090 and see if this works because I would like to not have to stop my Jenkins. Much better. Okay, so it's, it's acting like it's okay. So now instead of going on that I'm going to go HTTP local host. And it says Oh, whoops 404 not found but try clicking slash Jenkins. Come on, you can do it. And here is my Jenkins with that plugin installed. And the number of plugins that installed is quite small. In my installation, I have like 100 or more. This is maybe 30. And now if I look at pipeline syntax, and the steps reference, the steps reference here for build is much smaller. These are the things that are provided by the build plugin and the plugins that depend on it. So, so that may even HP I run thing that I did up here, gave me a much easier and better development environment. So be remember that as you're doing your work. That's super convenient. It is I hope it will be better. Sorry that I didn't. I may even have it in the instructions let's see if I've got it in here if not it should be. If HP I colon run is not in here it should be. It is not. Okay, so let me put myself a comment here to remind us that we need to help help new people that they should know how to use HP I colon run to. Yeah, here it is. Use. Let me just put a comment here. Use. Maven HP I colon run to see the plugin quickly. Maybe we just documented here and sorry the start thing I know is windows specific. Sophia apologies that I'm showing a windows specific command what that really means is open that open that page in a web browser. Any other questions with today's today's bumps. Any other questions before we close. Hi, so just to reiterate right we are supposed to go through the steps and see if we are able to insert or make changes to it right on specific branches. Yes, that's correct. So, insert a change into the Jenkins build plugin or build step plugin help confirm that you can see that change in your development environment on your computer. Right, exactly. So that's the step. And you can refer back to the refer to this recording. It will probably take me at least a day to get it beginning Friday. Because I'm, I'm kind of kind of tired today from not having slept enough last night. And then ask questions in slack. Don't be shy when problems arise. Anything else before we end today. No, for my end. All right. Thank you then thanks. Thanks to all of you. Let's go ahead. I'll, I'll stop the recording now.