Hello everyone, my name is John Hammond and welcome back to some more Natus over the wire web application security Some Python scripting and programming to hack some websites. It's pretty cool stuff I've been away from this for a while because this challenge level 28 is a little difficult and kind of hard So this is going to be a long video. Please do bear with me. I hope it's pretty cool though I hope you learn a few things so let's dive right in I have the web page visible right here because I want to Showcase the functionality of this application before I start to look at it in code so we have this computer joke database where we could search for a query and It will supposedly return information back out to us Normally, we're able to view the source code of some of these applications just so we can learn and understand a little bit More going through the war games here, but unfortunately this level does not provide the source code So if I don't enter anything into the search, it will go ahead and return some results for us In fact, it gives us just a couple here No shortcuts in life. Let's see if I click and find one blah blah blah It gives us like computer jokes if we were to put in stuff like Anything or please sub it would return queries that have that string in it and unfortunately nothing has please sub in it That's weird. If I tried to search for the letter a obviously it will get a couple more results If we wanted to just go for sequel injection, we particularly could but obviously that's not going to return anything Because that text is not in that query or whatever it's trying to run in the database However, if I just went for like a single quote or a double quote or just a quote It will be able to return things that have this in here So that lets me interpret that okay, it's probably escaping in these single quotes and double quotes It's not just gonna make the database crap out on us So what I'm sure you're noticing is when we actually look at some of these Returns all these things that actually return out to us that give us some information. We are getting a interesting change in the URL It throws us to search dot PHP It gives us this query variable that that is the HTTP variable that we're working with and it looks like a bunch of garbage a lot of encoded data a Lot of this URL encoding is likely for trying to hide some special characters And that looks like it may turn out to be base 64 when we actually take a look at it So let's go ahead and do that Let's get to our Python script where we have the code over on the left here And then the output of the the return and what what the web page gives us on the right-hand side So I just made a simple get request to do that. Let's actually set this to Close that other one there and set this HTML for syntax highlighting that looks neat Okay, good, and let's go ahead and try and make a request now where we actually submit a query So we're gonna end up posting to that URL with data going through here I'll put this on a new line. So it looks a little bit nicer Let's say query can equal Just a letter a and then that should be everything we need right. I'm hoping we get anything yep, okay cool we get some responses and And Now we want to be able to look at the URL. So we can do this. We can actually just check out response dot url and At the very very top here you see okay, it gives us the entire URL and This front part the whole actual web address and the search.php query That's all going to be a static length So if I wanted to scrape out the very very end here We can probably just take how many characters is this you can see at the bottom left 60 60 characters selected So let's go 60 characters from The end and we'll just get okay that portion that is the encoded information. Oh, I Put that on text not the URL Okay, cool. So now let's go ahead and encode this We probably won't need URL. I'll do this through the requests I just actually learned this request actually has a utils like submodule that allows you to quote or unquote I think it's unquote. Let me check. I'm hoping Fingers crossed. Yeah, okay, cool Now that is certainly base 64 and if we wanted to with that base 64 module included we could base 64 dot B64 decode and We'll get some raw bytes out of this that sublime text won't be able to show for us So let's actually check out the representation or REPR to display those raw bytes and Okay, looks like we're getting a lot of interesting things there So as I'm exploring this actually before I go ahead and show the representation I want to look at some experiments when we test with the Okay, we'll just base 64 decode. Let's again not do that just yet I want to save these lines though because we will probably keep track of them pretty soon I will just want to see that base 64 string for a few of these and I want to gather these I want to be able to see are there any interesting changes when I change my query So just ls random inputs I'll steal a few more of these and put them down here so I can examine them Let's say just what and Get a few more Okay So if you check out this text here, you should notice that the First portion of this encrypted or encoded or whatever this data is Is actually staying the same for the first part right here. It looks like it will get up to 42 characters in and the base 64 encoded values to give us Constant and the same values However, everything that follows looks like it will change So that leads me to think of the conclusion that we are having some static text or some non changing Regular text or data that's being propended or put at the very very start of our input or what goes through And then that's being encrypted and then eventually encoded and it seems that That's it's it's not particularly changing the segments that are being displayed here Are being encrypted kind of piece by piece or chunk by chunk Or block by block And that's telling us that okay, uh, they're being encrypted the exact same way That Points me in direction the direction. Did I say did I say another word? I may have said another word. Okay. I didn't want the england cricket team That's not what I wanted. I wanted uh ECB encryption. This is a block cipher that is electronic code book Electronic code book ECB it is a form of encryption Where the message is divided into blocks and each block is encrypted separately But going through the exact same operation kind of using the same key. It's it's not chaining these blocks or these chunks together. So You'll be able to see uh, or at least you'll you'll be able to determine portions of the encryption scheme As you tinker with and as you play with it, you'll see some examples here On this Wikipedia page the image of tux the Linux mascot when it's encrypted using ECB You're still able to kind of make out what that image actually is so We can probably do something interesting here But let's keep in mind that it is using this ECB electronic code book block cipher To encrypt our input. So the next kind of point of attack is to determine the block size or how big Or what are what are the what what's the dimensions of these chunks or these blocks that our message is being cut up into So let's take a look. Let's see how we can figure that out What I want to do first is actually determine Let's see here What query will we have? Oh, I just deleted those things that I told myself I wanted Classic Let's try and see what the length of the actually Decoded or like the raw data is after we Send it a different and varying lengths of information. So let's do four i in range and let's go about a like How many characters do we want to go for? Uh, well, how long is this to begin with how long is our decoded one to begin with before we actually check out the I put an extra string there. Okay. It is 80 characters long. So So What could we potentially be working with here? Let's go for i in range 30 maybe 30 characters long 50 180 I don't know. Let's try it. Let's just do Response equals all this. Let's determine the length Um, we don't have to view it out. Let's just view the Length i or query length and then Response length will be just like that. So let's now change this query to like the letter a multiplied by i so Let's try and run this see how long it takes for us. Uh, I forgot a comma here Okay, so query length zero response length 80 This will keep returning and returning and returning for us until okay. We see something change here We've got a difference in the response length being 80 and the response length now going to 96 So that's changing the encryption. Uh, that that it's actually outputting here for us Um, it looks like we're getting more of these changes as we change our query length Just as we would expect we're going to hit 100 pretty soon Let's zoom in on this a little bit And okay, okay, we went 80 sweet so This starts at 80 and goes until 80 ends here and that takes about Or is it 13 lines? Yep but We got 96 over here This length of the response is only 96 for 16 lines and then as we check out 112 We have 112 again 16 times you can see at the very bottom I've selected 16 lines Same thing for 128 if we check that out. We have 16 lines so what we can Assume and understand here is that this very very first block that we're looking at is obviously taken up by some of The original data or the original string or text that is being propended on or putting in at the very start of our input so That can't be that trustworthy, but maybe these other 16 length blocks We certainly can trust so that's how we can determine the block size Okay, so now let's try and figure out where our data actually is Or or kind of what how much room or what buffer do we have to work with within these blocks? So let's check out. Let's say our block size can equal 16 now that we've kind of figured that out Now we can determine what blocks we want to actually check out. Let's do Do Another for loop for each of these let's do a print just to get a nice visualizer Let's get about 50 characters of a line there and let's do four block in range How many blocks we want to check out? Well, the original thing was 80 and we want to go to We don't want to go. We don't want to make a request anymore. We saw that change happen about With character length of 16 a query length of 16 So let's change that to again 16 or 15 or whatever you want. I'm not I'm not choosing 16 because it's a block size I'm choosing it because that's where we saw a change in the response length and it gives us a couple in and out So we can explore some of those Now let's check out the actual blocks of the data that we're seeing in the response. Let's check out about How about five or let's say 80 the original length was 80 and then we divide that by the block size So let's check out the response that we're getting just like We've seen before except now we don't want the length. We want The original thing decoded from blocks The current block that we're looking at times block size. So this will originally start at zero and then up until block plus one times Block size So that'll go 16 Bites at a time 16 first block and then 16 to 32 the second block and then 32 to 48 the third block Etc. So if we wanted to check that out, let's wrapper that to get the raw representation again And let's print out block block data just like that And we still want to have our query length visible up at the top here So now let's check out what this does uh response What's not what's going wrong here? Oh, I would actually need that after the After I go ahead and query the the site Okay, so query length zero response length 80 and this is happening over and over again until we get to about 16 requests 15 requests just fine so You can see again I'm looking at the raw representation of the bytes your elaborate representation of the data So it's not base 64 encoded to separate into different chunks those different blocks So the first block or I guess block zero and we can actually Change this to block plus one. So it makes a little bit more sensor has as to how we are reading it Okay, check this out. So blocks one and two seem to be the same for every query length That we send it. So that tells us that That must be the amount that is filled up by The original propended text that's at the very very that's the static text that we don't have control over It's just being added in at the very start of our input And that's what's it's encrypting. You can see that that doesn't change blocks one and two don't change However block three is changing with our input. So where do we find a threshold where we fill up one block? We fill up block three and then we start to move into what would be block four Because apparently there's data being added after our input So we could potentially figure out what that is Because it's ecb because it's a lot electronic codebook cipher. So I see in query length 10 In query length 11 block three actually Stays the same value so And it looks like that same way onward from 12 13 etc etc So that means the threshold for filling all of block three That where that location in the message where we are where our input is going we have filled the block between 10 and 9 So nine means that there is just one more character that would eventually fill the block Because once it hits it hits 10 and 11 it's going to stay the same over and over and that means we fill the block with our our a letters so if we have one last character available in The block if we set it a query of length nine we could potentially figure out what that data is Following our input because it's being encrypted if we actually figured out. Okay. What is this block? What does that block look like if we fill it with one more character and we could keep iterating through that character to try and determine What character is it in the real data that they're appending that we don't know yet? We could probably leak it out. So that may seem weird. That may sound weird Let's let's do it. Let me show you how we how we can make this happen Let's go ahead and say the correct string Is just this representation again, we'll put that in repper So that is what they would as we would assume from that and we could import string Have all of the potential characters here. There's Printable characters for c in string dot printable Then we'll make a request where we say a Nine times because we know that that is where we're going to have one last character to fill this block And we'll put in the character that we're looking at So then we can go ahead and get What block we're looking at block three in this case? We'll take that original line that we had and just set block to two because it is zero based When we know we're looking at block three, but since it counts zero one two that will be the third block Our answer Will be this again with the third block that we're looking at so we can test if answer is equal to the correct string then we know We found the character That would be following that that uh Input the we supply so let's include that c right there. We can print Trying c And let's run this trying zero one two three four, etc. Etc. And this will loop through the characters here I hope this makes sense. I'm going to try and visualize it here with some block stuff.  I found a percent sign here Hopefully that will close in We are filling up until we just leak into Uh, whatever the fourth mall fourth block may end up being so one two three We fill the third block up until the Character that would eventually be starting the next block starting the fourth block so Since the original data is at the very very end here following our input We can supply everything up to that last block and since it will be encrypted one way or the other We can keep checking to see what is that character going to be Is it going to equal what it would have been had it been actually encrypted following That that's very very hard to discuss and I'm sorry if I suck at explaining that. Hopefully you see it visually okay, so Since we are since we found the character percent sign We have an interesting hunch here now because knowing the application and knowing the functionality of what this program does It's probably running a query something like select text from jokes Where the text is like and this is sequel right here where it's using that percent sign as a wild card where text is like our input With the percent sign following because that's the wild card. It'll match anything that has uh that notion in it so This is doing an interesting thing because normally using this technique now that we found that character We could potentially shrink our test block and just add the character that we found at the very very end So it will encrypt and gcrypt the same way we would expect it because now that we figured out what character was next We can try that attack again Shrinking down our padding or our space that we're filling in and so we can leak out more of the message that follows or the text that follows our input but This is kind of an issue in this case right here because we actually are probably wrapped inside of a string We at least in the sequel code that's probably running in the back We wouldn't be able to actually test this because our input is again As we saw from our testing in the beginning being escaped Like we we tried to enter a quote or a single quote But we know that that's probably not being processed as real Uh sequel commands, so they're going to be escaped with a backslash So unfortunately since that will take up more than one character And that's going to leak over into the fourth block and we won't be able to test it We won't be able to track it down since we are testing in just the very very edge of the third block Okay, but now we have a hunch now. We know that maybe this is running sequel injection Maybe this has some opportunity for sequel injection except We can't use those single quotes or double quotes Just as I was saying because they're going to be escaped. We can't just do that sequel Like union select whatever we want blah blah blah password from users We can't do that just in the search query because it will be escaped out of it So now we have to take advantage of what we know with this electronic code book and with this encryption scheme We could potentially try and figure out What uh, what what could we enter what encrypted information could we get that would actually look like we had entered that information Since we can encrypt the same way But if we handle that escape Sequence properly because we know that we're going to end up having it eventually Um following Let's actually keep that that query here If we got this single quote to be included in the third block and not no longer really necessary for the fourth block That way we could be home free where we could do our own injection following it So now we just have to figure out how we can encrypt and get the data for that input This probably sounds weird again. I'm going to show it to you Let's write this code here. Let's say our injection is A space character or letter a whatever padding we want to use times nine So we fill up the third block because that's that's our buffer here And I'm only going to use nine characters. So just as we saw that select text from jokes where thing Like blah blah blah that single quote at the very very end will actually go ahead and be interpreted just fine We won't have an escape going through We'll actually just have That single quote at the very very end rather than the percent sign. So nine will be that threshold If I use that injection and then I add on our single quote Union select. Let's just do password from users because that's kind of what we've seen in the previous levels And we'll just do a comment here to note the very very end of the sequel injection Or the sequel query now we have that string that we want to figure out how we can encrypt how we could actually get that to be Something that the back end application will handle So let's do that Let's determine first of all, how many blocks is this going to take and the way that we can do that is we can just say Blocks equals length of injection And we got a minus 10 here because we have this padding the a's or the spaces that we're filling it up with in the single quote Let's do minus 10 And then let's divide that by the block size Now that will get only up until we have a remainder So we have to say if we have a remainder we're going to need another block The way that we can do that is we can just test if The length of injection minus 10 modulus block size is not equal zero So if it's not it's if it's not a straight factor if we do have a remainder Then we can just say blocks plus equals one. So we add a an extra block in there Let's see how much how much this is going to take up. It's going to take up three blocks. Okay, that's fine Now what we can do is we'll go ahead and encrypt this the way we can do that is by checking this response And getting the url just as we've done before and said rather the query we're working with we'll say our injection And then let's check out The block that's returned for us the full thing We don't need the representation We just want the raw bytes and we don't need it cut at any specific block. We want the full thing Do I have a number of parentheses there? Okay, cool. We're good. So let's just say raw inject And if you wanted to see this you could if we want to check out the representation you could That's just fine So that is going to be the encrypted scheme that has our injection it now How are we going to be able to properly put this into a request? Without actually making the request and having the program encrypted. We have to encrypt it for the program Let's trick it. Let's try and give it original Good data like the spaces that we use to or the a characters that we use to fill the third block Then let's get the very very end Like after we have Actually filled the third block just so we know the very data at the at the very end of of the original query And then fake it with that first part of the the safe good string and then let's put our injection in between it So that probably sounds strange But again, I'll show you in code So let's get a response with just The a character or our padding 10 times to fill the third block Let's get that Good base And let's actually say that our query Will be or the URL that we're end up going to the query that we're going to be using is Good base up to the third block size So the third block block size times three because we know that that's the third block that we want now that we've filled it We can go ahead and add our injection in there. So injection We'll get the third block size filled and let's take Block size Plus three plus Blocks because that is the amount of blocks that are necessary for our injection times a block size So that's a full value here Now we should be able to add on the very very end that we had from our good base again taking from Three blocks in to the very end So it's it's faking the query and essentially just puts our injection in it and crips it the way that it would have expected it Again making sure the blocks are all in a line I've said a blocks. I've said that a lot Throughout this whole thing. So let's check out our query right now Probably something that we can't see. That's fine. Let's go ahead and Base 64 encode it. Oh, I'm sorry. I made a mistake here. Let's go from zero to the third block at the start and then other way around so from 48 in or the third block in that's my bad Now we have a proper looking injection string. Okay. Now we want to go ahead and quote this so it is properly url encoded and This was a sticking point for me It looks like that function does not actually url encode forward slashes and that Made all the difference when I actually tried this challenge So we're going to have to go ahead and replace those Let's change those forward slashes should be percent 2f in hex So that does make all the difference in this challenge We will need to make sure that those forward slashes are url encoded. This has to be fully url encoded For it to work. Okay So this can be our query now And let's keep in mind that when we actually retrieved this data It was in the form of The url With search.php at the end it brought us to search.php as a page And then it had query as the actual http variable that we're working with So now that we've constructed that variable on our own Let's go ahead and add that in So we don't post a request. We just get a request with our given query Now if I run this Display out the text that we're getting from that response Nothing So something is wrong. Let's explore Oh, I think I see the first problem and that I was using just the string injection as The the blocks that I was trying to reach out rather than just raw inject. So now let's try and run this Okay. All right. That was it sweet. So that is the the password. That's the flag that we're looking for but I hope this made sense. I hope this I know this is a crazy long video But I hope you were able to visualize everything that I was doing because electronic code book cipher is very very strange And the way that it encrypts block by block and each block is just a segment of the original message Um, but we can detect it. We can determine what it actually is So let's get uh re and scrape out this flag here. I think it's re dot find all Get a raw string from li Something in there anything to end li with our response dot text Zero and we don't need the number of blocks to be displayed anymore. That's just fine Okay, there is the flag just like that. So that is natus level 28 I hope that you guys enjoyed it. Um, kind of a long process doing some peculiar interesting things I hope it was easy to see the code. I hope it was easy to understand. We're doing some interesting things, but I was honestly just very amazed and impressed and pleased with this. I thought it was very cool And honestly a really big learning experience for me. Um, I will have to jot down this process I had this like the the procedure that I went through here to actually Okay, determine the block size and then determine where the block Actually has our input going in and then determining how we could take advantage of the fact that that escape sequence or that that string Delimiter the double quote or single quote would actually be handy for us when we're trying to do our sequel injection So very very cool. Very very interesting. Uh, hope you guys enjoy this Hey, shout out to the people that support me on patreon. Thank you guys so much. You're fantastic I love you.  You're the best, man One dollar a month on patreon. I'll give you a special shout out just like this I think in every video five dollars or more and patreon will give you early access to everything They release on youtube before it goes live if you want the content right when it's hot right when it's work ready That's the best way to do that. Please do join our discord server link in the description It is an awesome community full of ctf players programmers and hackers You can hang out with me and other cool people will be tackling ic tf Um Knock ctf and other competitions that are coming up this week. Hey, I have a link in the description for a humble bundle Uh book package that will really help me out. It's affiliate link full disclaimer. I'm a sellout. I'm sorry. I suck But uh, it helps me put food in the table and you guys and your support really just enables that for me So thank you. Thank you. I'd love to see you on patreon Please do like this video comment this video subscribe if you're into that stuff. I don't know Uh, I'd love to see you on patreon. I'd love to see you in the next video. Get out of here, man


Yes, recording has started. I welcome all the books out of court when you need to get back into the project. This is the weekly sake for the project and we will discuss the action items first. So the first action pending action item that we had was to update the project details for details. I believe Shitesh has raised a PR on the Jenkins IO that could do this. And I have reviewed it. I was assuming that Mark, if you would have some time to do that, we could wait for your review. But if you think it looks good, then we would probably move forward and merge it. You get it much better. Yes, and I'll do a review and if you've already reviewed it, I think my review will be quite rapid just to be sure it formats correctly and then I'll merge it. I'll try to do that before I go to sleep tonight. So apart from that, there was some doubts that Rishikesh had related to it. And these were action items upon me to help him on this, but unfortunately I could not. I don't find the time because I was, so there was another action item that Rishikesh had. He wanted to understand the descriptive, describable pattern that is implemented across Jenkins. And to do this, I myself had to go deep into the Jenkins code and understand the pattern.  The descriptors we have to use it, but I was never, I never explored it in the depth that I should have to explain this pattern. So I created a small gist with whatever I could find with my explorations and I hope that serves as a starting point for it to understand the pattern. So Rishikesh, I wanted to ask, do you still have these doubts or were you able to resolve them? The UI, I haven't again worked on the UI because, you know, based on the implementation, you know, the UI is based on the implementation. So I poshed, you know, the implementation for now. And I've created a design document, you know, explaining two ways of implementation that is using Cron syntax, or you know, using the build discarder. So that was what I've done this entire week. So then it feels like that Rishabh and I should review the design document. Do you want to give us a summary of the, the concepts that you found different between the two and do you have a particular one that you recommend for Shikesh? I have shared the link in the Gitter channel, one I can share it. Yeah, so, so basically, this was, you know, to just, you know, explain the difference between both the strategies. The global build discarder, the aim of the global build discard is, you know, to schedule maintenance tasks without having a Cron syntax in the UI. Okay, it is done intelligently by Jenkins internally.  And that strategy. So the global build discard here, I have written an M, you know, a working of how exactly it works, I was going through the documentation. So basically, if you check, there is a, what do you tell a class called background global build discarder. Yeah, that that. So this background global does build discard it executes every hour. There is this method called get recurrence period. Okay, which is, which is currently by default set to over. So every, every hour this, this thing runs, and it calls the execute method. This execute method calls the process job. Okay, it gets its check, it checks all the jobs in the Jenkins on the Jenkins controller. And then it checks whether this job is applicable for a global for, you know, discarding the previous builds which have been present or not. Rishabh, can you go to the design document? Yeah, so in the second step, yeah, it calls the execute function hourly and runs the build discard on all the jobs present on the Jenkins controller. It is based on the strategy present in the global build discard. Okay, so basically there is a function which we need to, you know, over, overwrite that is applicable function, which the user needs to set. If the user sets this. So basically whichever functionality he he writes in the is applicable function that configuration is used by Jenkins internally to decide whether it should this, you know, run the build discard on that job or not. So this is the basic functionality of the global build discard. I was thinking we can use the same functionality for, you know, what do you tell maintenance tasks as well, but I was having few questions regarding this, because global build discard is only used for jobs. It's only used to iterate over jobs. So is there any ways you know where is there any way where we can use it for caches as well. I don't know of a way directly to use that, but I would think that it's implementation would could be used, and we may have to do a new implementation that says, okay, we're going to use global build discard or as our pattern, and copy its code or duplicate relevant portions of its code into the get plugin to iterate over get caches. But, but I think I'd assume that you were thinking here. Huh, because global build discard or happens every hour, would we then in the UI have the user choose something, you know how frequently they want it whether it's hourly or every two hours every 24 hours every 48 hours and then skip it on those when it's not selected. What was your what was your vision for people who don't want to run caching every hour. So what I was thinking, I was thinking of running it. And so first my thought process was now whenever it runs every hour, I was thinking, first of all, you know, I don't I didn't want it to overload the system. Okay, so I was thinking that is there any way where we can find the CPU utilization how much CPU has been used or how much RAM has been consumed, so that you know, based on that data we can you know schedule, you know the maintenance tasks, or hourly or you know, every three hours, and let the user even you know, have an option of scheduling it weekly, something like that. That was what I was thinking. I'm not sure about how we would. Is there any other intelligent ways of scheduling maintenance tasks. Yeah, sorry to interrupt. I was just saying that I think we should divide this in two steps as Mark, the first thing that Mark asked us that as we decided to do the initial project right there. We are going to expose a way for the user to be able to set a schedule for these tasks right so that when you talk about CPU utilization and then the system having the intelligence to be able to schedule the jobs on the basis of the current status of the system, I believe that is something that we can implement when when we know how to implement a schedule job based on the users. I think we should take this step by step. We don't have to make it intelligent at the first to get to the first equation of this feature as well right we can start with the first vote which which I believe, please correct me if I'm not was to take the users input on what is the frequency with the system should use these jobs and then use that input to run the tasks and not think about. I mean if we could think about it it's great but it's okay if we don't think about see utilization at the first step. I do I think that's a that's that's a, I think we'll need the CPU utilization or the overload prevention no matter which scheduling technique we use so I think I think considering them as separate steps is a good idea. Okay. I mean I just wanted to what my point was to you know as a steps in requirements we know that okay first we need to do that and parallely as a feature we could figure out how to understand how to get the metrics from the system to be then able to, you know, build it, build it and fail safe so that we don't affect the system. Now, in terms of I'm not sure that CPU load is is the crucial measure there I would and even if it is it may be difficult to get that in a platform independent way. I think though we can get how long did the sub process run before it completed and the duration of the of the run of a sub process gives us a first first level approximation of how much demand it placed on that on that computer. So we know when it started, and we'll we'll be monitoring its exit code so we'll know when it finished, and the difference between those two is the duration of that process in terms of its wall clock execution. However many CPUs or cores it had available to use. But I think I think Rishabh is right that it's probably much more important that we do the first step and get it get confidence there before we worry about optimizing to not overload. So Ruchakesh did that answer your question. Yeah, I have a doubt. So basically, this what he did. Finally, are we like the UI in the UI, are we going to what what kind of UI are we looking into are we looking into, you know, taking you know, crons and tags from the administrator to schedule maintenance tasks or do you want the do you want the maintenance to run automatically without having an input from the administrator. I was assuming we wanted the administrator to have some control of the frequency. I don't know that we want a cron syntax. Or maybe, maybe I should say it differently a cron syntax, maybe more precise than we're actually ready to use. For instance, I think it would be disastrous or at least at minimum very unwise, if they scheduled to run every minute. So if, if we if we went with the global, if we went with the global bill discarded concept. And so it checks every hour is there work to be done. And then if the job configuration said only do that every 24th hour or every 48 hour. That might be added might be enough and then we, we don't need to process cron syntax now. I'm not sure that Jenkins users Jenkins users may say well but I had to learn cron syntax everywhere else, and they'd be right. It's just, I have a hard time imagining us running cash maintenance more than once an hour. Maybe I'm maybe I'm misunderstanding there. What's your thought on it, do you think that there will be interesting use cases that require it to run more than once an hour. Oh, I don't, it depends on the repository of the repository isn't that they go if it doesn't frequently updated it I don't think it would make sense to run it every hour. Yeah, that was, I agree with your your observation, at least for me I have a hard time imagining a repository that is busy enough that refreshing its cash every hour would be would be important and even more difficult to envision that refreshing its cash every every few minutes would be worthwhile. Or we can give an option where you know we can run it not hourly or you know on a daily basis or something, you know, to, or something configurable by the administrator. Because the aim of the global bill discarder is to not have cron syntax. It has to be done by Jenkins internally. The other implementation provides cron syntaxes for the year you know administrator where he can, where they can plug in the cron syntaxes and run the maintenance task. So that that's the whole difference between both the strategies.  I just wanted to say at this point of how will we decide in sharing these jobs, what is the question is going to be, I believe we should test this idea by when we built this feature we should run this on Marx machine, which has a lot of projects. I believe we should take inputs from that from that machine on how the frequencies that we're trying to whatever frequencies that we're assuming should you know, for the system, we should, I believe it will be a good practical test for us to know how it's actually going to work on a user's machine. And if our frequency is not you know the optimal raise that we wanted to. So it could be a test that we could see a run on your machine and then see how you know the system metrics how they are on the frequency that we decided could be earlier could be a basis. What do we need to reduce them or can we reduce them. I'm certainly willing to be a test case, I'd be honored to be a test case not just willing. That would be a real privilege. So if, if my little installation is is a of use I'm happy to do it and yes it does have several. In some cases rather embarrassingly large repositories that it's caching. Yes, so I believe it would be a good exercise to understand. Understand the relationship between the internet, the internet tasks and how they, how they're affected by the size of the repository or the other parameters which are defined in the repositories and then if you have a large number of size of repositories, how, how do you know this is the task that you decide how the brain track system, how much resources they're going to take. I mean, I was just listening to the question that we're trying to answer what the frequency should be. And I thought that before, without trying actually these tasks on a machine at that scale, how would we understand how can we answer that question. And, and I think that's on that sounds very good to me now. I'm not sure the answer to that question results, which path who should I should take whether global bill discarded or cron syntax because I can see arguments for for either please correct me if I'm wrong the prawn syntax allows us to essentially, it allows us a way for us to decide the frequency. Decide the frequency on a more granular level then exposing a way for them to say that okay every one hour or every five hours or every day. For instance, I can with cron syntax I can say things like the second and fourth Thursdays of the month, those kind of things. Anyway, so it's so yes it is much more sophisticated than the, the simple hourly scheme that the global bill discarded uses. The cron syntax is very, very rich in Jenkins it has keywords like at daily where it says run it sometime during the day, or at hourly or at weekly. And so it, it has, it has a level of sophistication that is certainly very, very, very powerful. So as I understand, the primary rules that we have for this project is to, is to do the heavy work heavy lifting behind the system of running these tasks, but for the user we want to provide a way for them to configure these tasks. Right. Yeah. And if that is the aim, then more customizability, especially when that feature affects the performance of the system. So the regularity could mean that the admin would have more options to essentially find out the legs and we don't have frequency or whatever we think the default frequency is is not the one that should be divided in their system. What I'm trying to say is that the transit syntax would allow us, allow the user more freedom to decide for themselves, what is the best way for them to run these tasks. Instead of us giving standards notes or something like that. So, so do you. So, so I then I would say I would prefer the second strategy, because it provides more customization. Yeah, yeah. Yeah, Ruchakesh. Back to the an earlier question, would you be okay if you are, do you have something that causes you to lean towards one choice or the other. Nothing other that's what I've gone actually the I've gone through the entire cron syntax implementation and I'm pretty much confident of an implementing it. That's, there's no favoritism as that's what I'm still a bit confused about the global builder scatter like what are the various conditions based on which we are going to implement the maintenance tasks. So, with the second strategy strategy where we can use the front syntax. The parameter is shared with the second so there are the same way that they've seen in the global builder scatter strategy there are books exposed to run the processes. Yeah, yeah, yeah.  Yeah, if you extend to that you can create your own background process and and then run the maintenance task in that thread. So what you say is that the second strategy that you have the second implementation, the difference would be somewhere in this contract. Yeah, exactly. Here, what would happen is in that in the pattern in the cron syntax implementation, there would be one thread which would be running every minute which would check every minute whether the cron syntax is valid or not. If it is valid, and then the corresponding maintenance task is run on all the repositories. So, in terms of implementation, the core difference will be these two options is the usage of content tax and no other differences that you've seen. I didn't get you can you repeat. I just wanted to ask. Am I audible. Yeah, yeah, yeah. Yeah, I just wanted to ask if the only difference between these two implementations is the ability to use content tax apart from that. Yeah, we could use the same. We could extend the same contract to iterate over all the jobs and then. Yeah, yeah, yeah, both of yeah exactly the rest of the implementation is same the only main feature would be, are we taking the cron syntax from the user administrator and scheduling it or do we intelligently schedule it behind the scenes in Jenkins. And that we believe for us could be a step by step approach. And that sounds very reasonable to me. I think cron based syntax, it feels like you've done a very good job of exploring a hushikesh. Even, you know, we can safeguard cron syntax, like, as I've stated in one meet that assume an administrator runs a GC every minute. Okay, here's his syntax is corresponding to every minute or every 30 minutes. We can safeguard by putting some rules behind the scenes where you know, he can start, you know, running maintenance ask only, you know, like a base from hourly, like one hour 30 minutes one hour one minute, something like that so that he doesn't overload the system. Alternately, you could put a limiter in that says, if a current through if there is currently a maintenance thread running I will refuse to start a new thread. Yeah, scheduled.  Yeah, even better you're right not not just just queue it and then somehow use the same thread. Right, exactly. Yeah, good point. Very good. What we discussed so I believe it. I was just saying that we're tilting more towards preferring the second approach. I think, yeah. And as rich as as who should cash noted, some safeguards only have a single thread that's processing these so that we are forcibly rate limited, we can never have more than one running at a time. That kind of thing. Yeah. So I, I have a question related to using a single thread. So how, how do we, so if we're not using multiple threads, let's say I have 60 repositories and I have these five tasks to perform. So when I start running them, it reading through the repository. If I'm using a single thread would be running a chance of freezing the time of execution for these tasks and not to a point where it is unfeasible because we this is a background processes, we don't have to worry how much. Okay, so the question would be, first of all, do we worry about how much time the does these tasks are taking. And do we put put an upper limit to those, to those time periods for an example if GC has started to run on a particular repository or a single thread, and it's taking. I don't know, five hours. So do we, do we have some kinds of upper limits where we say that okay, we can't proceed forward, considering the fact that it might take five days for the whole batch of tasks to run on these 60 repositories. Yeah, I'm not, I'm not immediately visualizing why we would want to put an upper bound. I can imagine someone's decided to compile the Linux kernel for their Raspberry Pi.  And it may take many hours, but they get the benefit that when it's done. It's, it's done. Tell me tell me more about cases where you worry that you're worried that, hey, they may have many copies of that and therefore they might somehow not be able to complete the other work. I like my only concern is, I think it's born out of this, this assumption that I have that let's say there are between the two scheduled frequencies that we have for the whole batch of tasks. How do we guarantee that all of the tasks that we've decided that are going to run for all of the repositories within the system that run before the next frequency scheduled time for them to run. Since we're doing this on a single thread. And I thought that the answer there was that that because there's a stack or a queue that that won't allow the next task to begin until it's predecessor has completed. And for me that was okay that means that if they've scheduled them to occur too rapidly. They will queue and the work will be done when when when when the first maintenance tasks completes the second will begin. If it was scheduled to begin earlier and same for third, fourth and fifth. Now, now I don't know that we want an unbounded queue because in that case. It's just queuing to do work that. Well, yeah, if the degenerate case that you're describing were to happen where processor and file system combination is so slow. Or large repositories are so so large that the the work simply cannot be completed in in the, you know, if the if the if the controller were continuously falling further and further behind in processing its queue of maintenance tasks. There's no point in making that queue very deep. It will just work on them when it can. Yes, have I yes, have I talked to your question Richard or no. Correct, correct. Yes, but I, as you've said it's a it's a case which could be an extreme case. So I don't know if it's something that we should prepare for right now. This question that I'm trying to ask is only because so let's say currently in my system if get GC is going to run my limited knowledge is that it's going to use whatever resources that I have on my system to run that process, which are going to be a single threaded process. And understanding as well get GC, get GC command like it GC is specifically written to use multiple cores. If the if the computer has multiple cores and so it will run portions of the garbage collection in parallel. Yes, so when we're saying that we're going to limit our jobs in a single threaded process, then we, what are we for we're for going the execution time we're increasing the execution time for these individual tasks. I was, I will I think I don't know if it works like that but I was thinking, when I schedule a maintenance task using no the get client plugin, it calls the underlying get command line present on your system, which runs a separate process to run the maintenance task. And once that maintenance task gets run, you get the result into the get client plugin. So that was what I was thinking. I mean, me me to and the fort. No, please. Besides to use multiple threads. And it does are multiple cores and it does that independent of Jenkins unless we were to somehow configure it to do less than that. That makes sense that answers my question. I was not thinking, you know, in that day. Yeah. I, it's still, it's we're only putting a single command line get process forking a single command line get process but then that process chooses to use multiple cores as it sees as it feels to do so. Correct. That's true. That's true. I was thinking that it be a way somehow allocating a single thread to the get command line operations, but that is not happening. Yes. Here, I was worried about this, like, if I run a get, you know, a GC command, you know, and that, you know, over, you know, consumes a lot of resources on the of the computer would that I think that would be a problem right. Like, it would, it will consume like 90% of CPU, you know, making the computer a bit slow. I was not sure about how do you proceed with that, or is that fine for now? I'm not sure what do you do with that. My opinion was that's fine because what we're doing is delegating to command line get. And if that is a problem for the user we would invite them to change the scheduling and that argues for the Cron syntax, change the scheduling so that it only happens during periods when they reasonably the system is idle or is less busy. Now on a system like ci.jankins.io, those are not regularly predictable times, but there is some pattern to them.  At this point, yes. If, and there may be some historical data like that available since Jenkins itself does predict load statistic or does present load statistics, or at least the last two days. So I had another doubt regarding the git caches so basically when I create a free style job on the free style job and the Jenkins UI, it creates a separate workspace work directory which contains the entire repository. Whereas if I use a multi branch pipeline, it only creates a caches folder. So here we are only worried about the caches right not regarding the free style repositories which is present on the Jenkins controller. Because it's an, it is strongly advised to not have any jobs that execute on the Jenkins controller. And so having us perform any maintenance on jobs that the user makes the mistake of running on the controller. I think is is a would be a bad pattern. It's, we only want to deal with caches that are maintained by Jenkins core itself, not with freestyle jobs that the user constructed. Okay, did that address your question who should yes, yes. Yeah, so I agree wholeheartedly with you that we should only do multi branch, we should only do caches on the on the controller, not job workspaces. Also, yesterday I was, you know, just messing around, you know, trying to make a implementation. So there I tried to save the entire data which I've got, like the Crohn syntax which are taken from the user and you know, stored it as an XML file. Can this XML file be changed by other users on, like, if that computer doesn't belongs to that administrator, can some other people change that XML file, asking, you know, just for security reasons. Certainly Jenkins configuration files can be modified by anyone who has permission to modify them. The next time Jenkins starts those configuration files will be read. So if any malicious user tried to change the Crohn syntax in that configuration file, would it affect the Jenkins software? Yes, that's correct. So UI based validation is good. And but is certainly necessary but probably not sufficient at the low levels of the API we want to we'll want to be sure that we're using we're checking the data, the schedule that's proposed for sanity there as well. The other reason for that is configuration as code. allows those kind of configurations also, and then the user might have the administrator writing the configuration as code definition might have made a mistake that causes it to now be scheduled every minute, something like that. So yeah, we if there are safeguards at the UI. We usually what happens is safeguards at the UI are also implemented in the API and the UI just presents a pretty error message of the same, the same safeguard. Any other topics we need to discuss today. So now we are so now we are more favored towards parameter, you know, Crohn syntax approach.  That's what I was thinking. That's what was this, you know, this weekend's agenda, you know, to fix the architecture so that we can proceed on you know how we would implement. And that sounds very good to me who should cash. Thanks for doing that exploration. And thank you for for having researched global build the scarter versus the scheduled tasks interfaces those. Well done. Now timeline wise, I believe we're about to start the official coding phase aren't we. Yeah. It's going to start on June 13 according. Okay.  Yes, one. Great. I apologize it's, it's approaching 11pm my time and I'm not nearly as awake as the two of you tend to be at this hour of the night. I don't have any other questions I think we can wind up the session if you want more. All right, then I'll go ahead and stop.


What's my boy Neil? He didn't buff interesting. We can wait. It's okay. Is he playing priest rogue? It's probably yeah He's probably playing with cold We can push Don't don't don't think I'll first thing It's good. I feel I feel I feel Get his dance for this dance priest drink it double drink it double drink it. I'll just PS. It's okay.  I'm so sad getting the shield Just one shot the shield bro Hodge on me.   He has hodge for me now. Probably favorable. Got it big damn. No, okay priest Farrell send This Farrell into the bin. I'm smite's back dude.   I'll get you. Yeah, it's off.  He's still loaf. No wall. No wall. No wall.   He's gonna trick you to keep me. Okay and board, but it's fine. So do me call me he broke it Call me home. I said he's home. We got a string good. I guess it's fine. I Think we can you get the tremor and I've got to look Yeah Tramper is such a nice one. I'll get it.   I'll sit. That's okay. It was just one because that's a heal you should be fine You can clone priests off. It's nice Clown me you're dead here. You so use everything you defensive vented Half clone me or PSU here. I need to pop my fiend slash innovate here. Can you get a clone on someone? They both my fiend feral. Oh My god, yeah, the innovators won't cast but I got some mana back at least Spam healing you got the proc Heming you got the proc pick them PS used burning priests.  He's well actually he pushes for fair on me now. Just watch out clone on priests. Good here. This is really good Getting his proc. Got it. It's gonna reach in a bit burning priests But this thing double fair. No, just the one Burning priest Got one. Okay, you know so weird Priests in Chris's third big damn Okay, okay. He just had no block right so Try to stop re-sheep. Try to stop re-sheep. Hi. Yes. Yeah, I'll kid names. I blicks away Then I'll stop this Death at death. Okay. I'm running. I've cloaking five I think it is What I got you got you got you got you I don't think we can kill me though Yeah, I'll drink it. I think that we just played I'll say I'll say I'm just low in both and running I just bought another Renover dodged here. What are you?  It's looking out No, it's back.  No getting sheep We have clue we have clue.  We just kill him.  I'm gonna fear he's gonna watch me early. Got it I'm gonna still fear unless you shoot. It's a we say just wait. Just wait. Don't Strang waste a strong waste. I'm gonna first spamming it Resist no Not today, mr. Weasley.  We'll go ms. So go yogurt.  I'm doing down mr.  Can you reach even reach you wish you wish you wish you wish you wish One more But I got two burns Lee gonna get it.


Thank you Mr. Speaker. I promise I wouldn't belong myself Mr. Speaker. I'm not feeling very well as you can probably decipher from the sound of my voice. But Mr. Speaker, when you listen to the member from Swazel, Swazel Saltibus, you would wonder whether he is a convert. You would wonder whether as we say colloquially he just come. Because I listened to him Mr. Speaker. And some of the allegations he seemingly makes fall squarely in the laps of the former government. And also his leader Mr. Speaker, one of the things I want to make clear. Mr. Speaker, this borrowing today is no new money. This borrowing today, that intention was manifested ever since we had the budget debate. The money we have to pay today is the money we have to pay to the politicians. It's not the money that Philip J. Pierre-Joseph decided to buy next to us. The budget that we have to pay is the money we have to pay. All the money we have to pay to finance the budget is already in the gold. Please. Today, after the government's first minister, all the money we have to pay is already in the gold. We now find the necessity to invoke the intention to borrow. But from the first of April, one must understand the financial year runs from April 1 to March 31 of every year. From April 1 to December 6, this government has borrowed not one penny to finance this financial year. Not one penny. And when my friend from Swazel, he asked Mr. Speaker what is the borrowing for, I find this question hypocritical. I find Mr. Speaker that the member in his political astuteness, a bunker by profession knows very well all the intentions and the source of financing have been laid in this big book of which he has a copy. The member of the country central, to be fair to the member for Swazel Saltybus, he didn't ask a question. What he said was he will not do as did the 6th when they were in opposition and decry borrowing instead he would come and support borrowing but would simply ask what it is for. But I didn't get the impression he was asking about this borrowing. Very well Mr. Speaker but I'm saying in his political astuteness and in the prime minister's presentation of the motion, he indicated that this borrowing is to finance the budget. The member for Swazel Saltybus and every parliamentarian prior to that debate in this honorable house would have to be furnished with a copy of the estimates. Every member and not only are you furnished with the potential expenditure or contemplated expenditure, the source of funding is within this Bible. If you want to call it that, the source of funding is in there. So, it's not the government that just agrees to go and buy it. Even after the mass has been approved, the budget has passed. The government has agreed that the government should invest the money. The government has agreed that the government should invest the money. The government has agreed that the government should invest the money.  But one of the things he admitted to me that the truth is what you believe, he echoed the sentiments of his leader telling me the truth is what he believes it to be. So I said to him, I asked him rather if I believe he was of the female sex, would that be correct? And then he expressed surprise. So Mr. Speaker, sometimes when we speak we have to know what we see. All of the intention is in this book. The source of funding is in this book. So when you are saying you will not justize the government. If you had to do so, you would have done so during the estimates, the debate on the estimates. What the last government used to do Mr. Speaker, and I even asked the Prime Minister why he didn't go that route. They used to lump up everything one time so that the motion for borrowing and the tabling of the estimates of revenue and expenditure would take place at the same time. So they would borrow six hundred million dollars the very time they are tabling the estimates of revenue and expenditure. So I said to Mr. Speaker, let the United Workers Party government take a table budget. All of this will be taken away. All of this will be taken away. So let it be done the same way that the government is taking a different approach. This government is letting every citizen of this country know how exactly it is running the affairs of this country. And so Mr. Speaker, the Prime Minister in his wisdom is taking a different approach. And so Mr. Speaker, the Prime Minister in his wisdom and based on advice decided he is not tabling the motion for borrowing simultaneously with the estimates of revenue and expenditure. And hence we are here today to deal with a motion that is contained in all shapes and forms within the confines of the estimates that were tabled in this honourable house earlier this year. Now Mr. Speaker, I heard the members of the Salisbury saying that the government ought to treat each parliamentarian with dignity. And I agree with that. But I wonder Mr. Speaker where was he when his leader as Prime Minister stood in this honourable chamber and told opposition members that you had lost the right to speak? Where was he when the leader, his leader and Prime Minister told members opposite that they had lost their voices? Where was he when the leader, ex-Prime Minister told the St. Lucian citizen that you don't like my party? Where was he when he referred to St. Lucian as backing dogs? Where were you when he referred to us as mendicants? Listen, I let the jacazes breathe. Where were you? Were you there? You were here. And today he preaches dignity. I don't have a problem with that. Welcome to the converted club because you seem to be a convert. Now Mr. Speaker, the Prime Minister indicated that part of the funds would be used to pay lands acquired. And the member for Salisbury quite rightly said that government has to acquire land. And that is not a difficulty. That's not difficult to understand because the law empowers the government in pursuance of the discharge of its social responsibility to the people whom elected it should do whatever is necessary to bring a certain degree of comfort to them. And in that regard Mr. Speaker, you might need a public facility somewhere where government has to land your acquire. You might need a food path so that persons no longer working month you acquire. And he was right. But I am wondering Mr. Speaker, where was he who wasn't in the cabinet when the government, the last government under the leadership of the member for Mikusov decided to acquire Caribbean Jewels hotel. Where were you? Knowing full government is not a hotelier and the hotel invariably will end up in private hands. Where were you? Where were you when the last government decided to acquire the lands at shock? The swamp at shock? The swamp at shock? Where were you when the last government decided to acquire land to pass on to range developers? Range developers and further to that to give them concessionary financing using our CIP monies. When the prime minister then realized he could not have done it you came and changed the legislation. You changed the legislation and we still had to pay range 32 million dollars. So where were you? Where were you my friend? I know you were busy signing the DSH deal other than that where were you? And so you know Mr. Speaker it is that kind of hypocrisy it is that kind of hypocrisy according to a famous speaker and writer down here. It is that kind of hypocrisy that I just cannot tolerate because all of the squandering all of the squandering was being done whilst you were right there. How much we borrowing today? 102, let's say 280. Mr. Speaker let me just give you about five five egregious financial deals that cost us more than what we borrowing here today. Five out of twenty two. Five out of twenty two. Local B thirty two, let's add from here. Sanders grant twenty four and thirty two fifty six. So if we are those two we don't have to borrow yet. Good. Bypass Road How much? Fifteen Fifteen million, where are we at now? Where are we now? Sixty five. Sixty five. Seventy one. Seventy one per man do thirteen million. That's what? Eighty four. Eighty four. Rain settlement forty two million. How much is that? Hundred and six. That's what we're getting in view for. I would put it higher. One million. Where we are now? One seventy. One seventeen. Hundred and twelve million for horses. Where are we? Tell me where we are please. They traveling at two thousand pounds a night in the hotel. Let's just say one million. ౒alon ౑apon ౑apon ీalon వ్ీలౚ  productos ోizon ౕ созн ౔ spoken ల్ీక్ేలూ ్ ocup బొన్హెపైన్ెవెక్పొట్మైఫక్ేడ్కేకేన్కేన్చత్ేమైట్కమైట్పైన్ఆడ్సి్వన్మేటూటొన్స్రోీట్రే క్సికానిక్జానాఓనిండిధినా. నిండిండిండింరికాకి.


The Spotlight Terrorite event for Walking Wick and Iron Leaves has finally returned in Pokemon Scarlet and Violet. We're going to go over all of the details today as well as the best builds to solo these Pokemon with in your games. So due to a glitch where players didn't update to 1.2 when this Terrorite Spotlight event came around for the first time, it is returning so those players that did experience the bad egg instead of these brand new Paradox Pokemon have a chance to catch it in their games. Now unfortunately for the rest of us who did manage to catch these Pokemon the first time around we are not able to get a second copy. They are going to be one per save file. The only players that are going to be able to obtain these Pokemon are those who missed out the first time around when it went live and those who experienced the bad egg. So for those of you that didn't update your games, went into it and experienced the bad egg and then caught it and then were unable to get these Pokemon afterwards. During this event you are going to be able to get yourselves Walking Wick and Iron Leaves in Pokemon Scarlet and Violet. This returning event will be running from the 1st of May until the 14th of May so it's a long period, a two week period where you're going to be able to get either Walking Wick or Iron Leaves. In Pokemon Scarlet you're going to get primarily Walking Wick as your Paradox Pokemon that will be the event Pokemon and Pokemon Scarlet and in Pokemon Violet you're going to get yourselves Iron Leaves so Pokemon Scarlet players are going to have to go online and join raids for Iron Leaves and Violet players will have to join Scarlet players to get themselves Walking Wick. Walking Wick has the water teratiping tied to it. It will be set to level 75 and it will only be a five star terraried. Its moves are exactly the same as it was before. Hydro Steam, Dragon Pulse, Noble Roar, Flamethrower and Sunny Day. The Iron Leaves will have the psychic teratipe and a moveset of Psyblade, Leafblade, Megahorn and Sword Stance with the additional move of Electric Terrain. And although most of us won't be able to catch these Pokemon because we've already got them from the first time this raid appeared in February, it's still a very good raid for some good high cost item drops. You're going to get a lot of items like Pill Strings, Big Nuggets, Nuggets and Bottle Caps and Ability Capsules as well as Terror Shards and that goes for both of them. So they can definitely make for a good raid just to farm items, get yourself level up candies and some items that you're going to be able to sell to kind of bolster your funds for other things to do in the game. So to access this event in your games, all you're going to need to do is come to your Poker Portal then come down to Mystery Gifts and get Poker Portal News. That will update your Terraried dens in the area with this new spotlight terraried event. Like I say, in Pokemon Scarlet you will only be able to get one den which will be that specific spotlight terraried event den for Walking Wake and that will be the same in Pokemon Violet but you will get the Terraried Event Den for Iron Leaves. Now we've got three builds that we're going to feature in today's video. The first one that we're going to cover is Mariah Dawn. It is going to be specifically for Walking Wake and it will make such quick work of it. So this Pokemon is great. The first turn when you go in against Walking Wake, you're going to see it predominantly go for the sunny day and then Noble Roar. Noble Roar is going to reduce your special attack and attack by two stages. So you kind of want to avoid that. That is why we've got the clear amulet on this Pokemon. It is going to be set to level 100. Terratyping is going to be electric but you're not going to have to worry about the terratyping because it will not get that far honestly. The move set that we've got is Charge Metal Sound Parabolic Charge if you need some line of recovery and then the big damaging move is going to be Electro Drift. The EV spread on Mariah Dawn is going to be 252 HP, 252 special attack with a modest nature and it has that Hadron engine ability. So that is the Mariah Dawn. All the builds that we cover in today's video will be in the description if you want to take a closer look at them. But the basic premise with this Mariah Dawn is going to be going into the raid. First turn you're going to be going for a Metal Sound just to reduce the special defense on the Walking Wake by two stages. The next turn go for a Charge and then after that just go for the Electro Drift and most of the time it will pick up the one hit kill against the Walking Wake. So even if you're going in if you've caught this Pokemon just to farm for the items this is going to be probably your best Pokemon to go in and solo with. Next up is Scissor and it is going to be predominantly for that Iron Leaves. Now the item of choice is going to be a Shell Bell. We've got the Terratyping of Bug and then the move set of Sword Stance, Defog, Iron Defense and X Scissor. We've got an Eevee Spread of 252 HP, 252 Attack and an Adamant Nature is the preferable nature on this one. The ability here is Swarm because it does power up Bug type attacks when you're on a third or below of health so that's always useful. Technician's not going to be useful here because it doesn't apply to X Scissor and Light Metal really doesn't play any part in this raid at all. So go for Swarm of any of the abilities for the Scissor. The basic premise of this is to Defog turn one so you will remove the terrain and that is the big thing so you'll take away any boosts on the Iron Leaves.  You can Iron Defense if you want but with Scissor's Bug and Steel Typing you're going to resist pretty much everything that the Iron Leaves can throw at you and you're going to have a really easy time doing this solo in your game or even if you go online with other players. So really really solid options for this one. Level 100 like I say and the full build will be in the description. Now the last one that we're going to feature here and why not because it's been ripping through all these 7 star Terrorids recently but it will be a Nileb and it will have that Ghost Terror Typing. This one Shell Bell is the item for a line of recovery. If you're going in against Walking Wake you could consider the Covert Cloak but the Shell Bell just gives you consistency against both of them and if you're using an Nileb just against both of these Pokemon then the Shell Bell is probably the more consistent item out of the two. The move set that we've got is Bulk Up, Screech, Drain Punch and Rage Fist, Evie Spread of 252 HP, 252 Attack and a Defiant Ability on it. So the Defiant Ability is the most important thing here because against that Walking Wake it will use that Noble Raw and it will proc the Defiant Ability giving you plus three attacks straight off the bat when it does use that. Then you're primarily going to use a combination of Screech, Bulk Ups when necessary and then Rage Fist is going to be your main attacking option. You can use Drain Punch as well obviously as a form of recovery if you need to but Rage Fist is going to be boosted every time you hit and with the Screech Combination you're going to be able to do quick damage, very big damage quite quickly in this raid and like I say in Nileb a very solid choice and a good one to fall back on if you don't want to go with the Maraid which is super quick, probably the quickest to do the Walking Wake or the Scissor which is just a really solid choice against that Iron Leaves. So Nileb is the fallback for these three and because you'll only get one of these event dens in your map per day if you do defeat it you'll have to wait 24 hours to get a new one otherwise what you can do to get it straight away is to just use this method of hitting your home menu and then coming down into your system settings, down into system, down into date and time and then click into date and time itself, click through all the options, click OK and then come back up into the game and all your dens will respawn and you'll get a brand new Spotlight Terrorite event for the respective Pokemon that is appearing in your game. Here we've got the Walking Wake so we can just head over to it again and farm it for those high cost items. So a very quick update today for this brand new Spotlight Terrorite event that is returning for two weeks in Pokemon Skull and Violet. Of course we're going to have the second phase of the Intellion Terrorite event running this coming weekend so that is something else to look forward to and then we should get the announcement of our next 7 Star Terrorite event after that on the Sunday night for the following week which is very exciting. Let me know down the comment section below what you think that next 7 Star Terrorite event will be and good luck and have fun with this brand new Spotlight Terrorite event that is just went live in game. Thank you so much for tuning in, if you found today's video useful as always please drop a like, it does really help the channel out and subscribe to the channel so you stay up to date with all of our Pokemon Skull and Violet content. Thank you so much for tuning in friends, have a great rest of your day and I'll see you all in another video very soon so until then take care and bye bye.


Hi again. In this lesson we're going to talk about that how to find if string contains just alphabetic characters. Let's define a string, let's call it my string and let's put inside our string words Los Angeles. Let's try to see does our string contains just alphabetic characters. In order to do that we will use isAlpha method and if we call isAlpha method on our string we will get result false because our string Los Angeles has one white space and what white space is not alphabetic character but if we try to remove our white space and let's say Los Angeles but without white space now all characters inside our string are alphabetic and if we try to call our method again we will get as returning value true. Also what will happen if we have a string for example Boston and we have for example some numbers inside it. Let's say that we have number two. Number two is not alphabetic character so in our string my string we will have one non alphabetic character so if we try to see whether is our string whether it contains all characters alphabetic we will see that it's not true because our string contains number two which is not alphabetic character. That's all for this lesson. Thanks for watching. See you in some next lesson. Bye-bye.


It's Minion Feuds this week on Movie Feuds as I battle, okay, Minion Feuds, who wrote this one? We're two seconds into the show and the writing's already abysmal. Chast, was it you? Classic Chast. Alright, it's Despicable Me Too versus Cloudy with a chance at meatballs too. Chast, you're fired. Leading things off is none other than Steve Carell reprising his role as Drew. Joining him is a new love interest by the name of Lucy. She's voiced by Kristen Wiig and she works for the Anti-Villain Agency. These two serve their purpose, but Drew always came off to me as a poor man's doctor evil. That's an Austin Powers character for those of you that are eight and watching us. The real reason to watch this though is for the crazy shenanigans the Minions get into. The writers also knew this, and that's why they're front and center this time around. A lot of the plot, a lot of the story revolves around these little f**kers. Sorry I was going to try not to swear because kids could be watching. That's not my fault. Learn what parents do your job. Don't let your six-year-old kid watch a show about two cartoons being reviewed, but okay, I can see how this could be my fault. Benjamin Brad voices the villain, Eduardo, or better known as El Macho. What is that, what is happening right now? Where is this coming from? Some of the SNL cast members lend their voices to Cloudy with a chance at meatballs too, with Bill Hader reprising his role as Flint Lockwood. I've said reprising twice in this episode. I don't think anybody cares though. You've seen the sh** that's on YouTube. This is pretty high quality compared to the rest, right? Right? And showbie poster boy Baby Brent's back again in chicken costume for some of the time. He's voiced by Andy Sandberg. Steve Kahn gets a little bit larger of a role this time as Flint Lockwood's dad. And it actually just occurred to me that Steve the Monkey is voiced by Neil Patrick Harris. This movie just went up a notch. Every time NPH is involved, you're going to get my attention. We can't forget Sam Sparks, voiced by Anna Faris. And although Mr. T didn't come back as the cop, we got Terry Crews. That's better. I think it's better. Will Forte plays our villain, not Steve Jobs. It's Steve Jobs. R.I.P. As far as Casco, it's pretty hard to beat the Minions, although Cloudy too gives them a run for their money with their creative animals, their foodimoles. There's little marshmallow babies and over the top huge strawberry that follows Sam everywhere.  Is it... Are you writing this down? Oh, no. Snack pack's a thing. Of course it is. And of course there's the infamous Supreme. Let's just go with the tie here. Can we go with the tie? Yeah. I think we can. I think we will. Personally, I think Cloudy too has the more creative storyline. Flint Lockwood's creation from the first flick, the Flintster Flucco Blah Blah Blah, has run amuck and it's creating food animal hybrids. What I like about it is it's not just a rehash of the first natural disaster angle, instead it takes a fresh... pun... approach by going with monster flicks. Which of course leads to a lot of great food puns and if there's one thing I like more than anything else in the world, it's a good food pun. I'll let you relish on that thought. Now don't let my positivity sway away from despicable me too just yet because there's a fun story there as well. Since the whole moon fiasco from the first flick, Groo has turned a new leap. He's in the jam making business now. He's a jammer. Unfortunately, an Arctic base goes missing and they need Groo's help to find out the mystery man behind the scenes. I think Groo's a bit more fun as a villain, but I suppose it's good he's setting an example for his children.  He talks about them, looks at all the negative comments and low subscription, spirals down and hill into a sad depression. Darkness fills his life, no friends, no family, no love. All he has is his camera and his winning personality. It's not going to get him very far though, folks, because the views are dwindling. All hope is lost, nothing's left. What am I talking about right now? Oh yes, movie feuds, subscribe. The evil minion reveal at the end is a nice twist, although it goes by a bit too fast. I wouldn't have minded seeing these guys tear up the city a bit. I will give despicable me two major props on the villain though, El Macho. Again, why? What? Where? He died with style, there is no denying that. Taken off chain with a shark and explosives into a volcano? That's how I want to go. That's definitely how I want to go. These are pretty films, that's plain and simple. Vibrant color palettes, glossy overall feel to them, they shine, they're bright. I love them. I love this.  Cloudy 2 has a bit more of a spastic approach to its animation style, reminds me a bit about Madagascar at times, but it's fun.  In Cloudy 2 we have a ton of inventions and frantic events take place all over at Flynn's new job. We get to see quick battles with various Fudimals like the double bacon cheese spider and a final fight with Chester V showcases a lot of our food friends. Despicable Me 2 contains a lot of good gadgets, let's not forget the lipstick taser. In fact, let's not forget that entire sequence where they kidnap Gru, throw him in the trunk, the minions are chasing after him, I love that, I just love it. Kidnapping is one of my favorite things. Finding an Oprah's type book, Adam's 10 favorite things, kidnapings for sure on there. One or two spot. You get a battle with a chicken, what's not to love? And of course a great final showdown with Adam Macho himself. I don't even know. I don't even know. Music's nothing to write home about, they're both good, but nothing comes close to like a frozen, there's no super addictive song that stays in your head. I've tasked myself to mention Frozen in all my new episodes in the hopes that it will skyrocket all my views to a million by just simple association. Despicable Me has a standard secret agent type of score where Cloudy the Chance of Meatballs matches its quirkiness with uplifting, field-goodery type jams like Lottie D. This is possibly the closest feud I've ever done for me personally. I enjoy both these films quite a bit and they're very equal across all categories. Since I do have to pick a film by law, I'm going to go with Despicable Me 2 and it hurts. Despicable Me 2 is a fun and fast ride from beginning to end and even though the Mesquite Toast and Baby Marshmallows are amazing creations, you just can't beat a good minion. I'm a curious little cabbage to hear your thoughts though. Bank them in the comments below and remember to subscribe because you take pity on me. Just do it, Nike, just make the jump, make the plunge if you must. More than just reviews, this is Minion Feuds. Now I'm doing it accidentally. Chast, you still here? No? Good. I meant it, he's out. He's fired.


selected poems by Emily Dickinson this is a LibriVox recording all LibriVox recordings are in the public domain for more information or to volunteer please visit LibriVox.org recording by Becky Miller canal Winchester Ohio the soul selects her own society by Emily Dickinson the soul selects her own society then shuts the door on her divine majority obtrude no more unmoved she notes the chariots pausing at her low gate unmoved an emperor is kneeling upon her mat I've known her from an ample nation choose one then close the valves of her attention like stone this recording is in the public domain after great pain by Emily Dickinson read for LibriVox.org by Becky Miller after great pain a formal feeling comes the nerves sit ceremonious like tombs the stiff heart questions was it he that bore and yesterday or centuries before the feet mechanical go round of ground or air or ought a wooden way regardless grown a quartz contentment like a stone this is the hour of lead remembered if outlived as freezing persons recollect the snow first chill then stupor then the letting go this recording is in the public domain hope is the thing with feathers by Emily Dickinson read for LibriVox.org by Becky Miller hope is the thing with feathers that perches in the soul and sings the tune without the words and never stops at all and sweetest in the gale is heard and sore must be the storm that could have bashed the little bird that kept so many warm I've heard it in the chillest land and on the strangest sea yet never in extremity it asked a crumb of me this recording is in the public domain I never hear the word escape by Emily Dickinson read for LibriVox.org by Becky Miller I never hear the word escape without a quicker blood a sudden expectation a flying attitude I never hear of prisons broad by soldiers battered down but I tug childish at my bars only to fail again this recording is in the public domain there is no frigate like a book by Emily Dickinson read for LibriVox.org by Becky Miller there is no frigate like a book to take us lands away nor any courses like a page of prancing poetry this traverse may the poorest take without a press of toll how frugal is the chariot that bears a human soul this recording is in the public domain because I could not stop for death by Emily Dickinson read for LibriVox.org by Becky Miller because I could not stop for death he kindly stopped for me the carriage held but just ourselves and immortality we slowly drove he knew no haste and I had put away my labor and my leisure too for his civility we passed the school where children played at wrestling in a ring we passed the fields of gazing grain we passed the setting sun we pause before a house that seemed a swelling of the ground the roof was scarcely visible the cornice but a mound since then to his centuries but each feel shorter than the day I first surmised the horse's heads were toward eternity this recording is in the public domain of all the sounds dispatched abroad by Emily Dickinson read for LibriVox.org by Becky Miller of all the sounds dispatched abroad there's not a charge to me like that old measure in the boughs that phraseless melody the wind does working like a hand whose fingers comb the sky then quiver down with tufts of tune permitted gods and me when winds go round and round in bands and thrum upon the door and birds take places overhead to bear them orchestra I crave him grace of summer boughs if such an outcast be he never heard that fleshless chant rise solemn in the tree as of some caravan of sound on deserts in the sky had broken rank then knit and passed in seamless company this recording is in the public domain success is counted sweetest by Emily Dickinson read for LibriVox.org by Becky Miller success is counted sweetest by those who never succeed to comprehend a nectar requires sourced need not one of all the purple host who took the flag today can tell the definition so clear of victory as he defeated dying on whose forbidden ear the distant strains of triumph break agonized and clear this recording is in the public domain if I can stop one heart from breaking by Emily Dickinson read for LibriVox.org by Becky Miller if I can stop one heart from breaking I shall not live in vain if I can ease one life the aching or cool one pain or help one fainting robin unto his nest again I shall not live in vain this recording is in the public domain to fight aloud by Emily Dickinson read for LibriVox.org by Becky Miller to fight aloud is very brave but gallanter I know who charge within the bosom the cavalry of woe who win and nations do not see who fall and none observe whose dying eyes no country regards with patriot love we trust in plumed procession for such the angels go rank after rank with even feet and uniforms of snow this recording is in the public domain pain has an element of blank by Emily Dickinson read for LibriVox.org by Becky Miller pain has an element of blank it cannot recollect when it began or if there were a day when it was not it has no future but itself it's infinite realms contain its past enlightened to perceive new periods of pain this recording is in the public domain I can wade grief by Emily Dickinson read for LibriVox.org by Becky Miller I can wade grief whole pools of it I'm used to that but the least push of joy breaks up my feet and I tip drunken let no pebble smile twas the new liquor that was all power is only pain stranded through discipline till weights will hang give balm to giants and they'll wilt like men give Himmela they'll carry him this recording is in the public domain for each ecstatic instant by Emily Dickinson read for LibriVox.org by Becky Miller for each ecstatic instant we must an anguish pay in keen and quivering ratio to the ecstasy for each beloved hour sharp pittances of years bitter contested farthings and coffers heaped with tears this recording is in the public domain I meant to have but modest needs by Emily Dickinson read for LibriVox.org by Becky Miller I meant to have but modest needs such as content and heaven within my income these could lie and life and I keep even but since the last included both it would suffice my prayer but just for one to stipulate and grace would grant the pair and so upon this wise I prayed great spirit give to me a heaven not so large as yours but large enough for me a smile suffused Jehovah's face the cherubim withdrew grave saints stole out to look at me and showed their dimples to I left the place with all my might my prayer away I threw the quiet ages picked it up and judgment twinkled to that one so honest be extant as take the tale for true that whatsoever you shall ask itself be given you but I grown shrewder scan the skies with a suspicious air as children swindled for the first all swindlers be in fur this recording is in the public domain a thought went up my mind today by Emily Dickinson read for LibriVox.org by Becky Miller a thought went up my mind today that I have had before but did not finish some way back I could not fix the year nor where it went nor why it came the second time to me nor definitely what it was have I the art to say but somewhere in my soul I know I've met the thing before it just reminded me to us all and came my way no more this recording is in the public domain is heaven a physician by Emily Dickinson read for LibriVox.org by Becky Miller is heaven a physician they say that he can heal but medicine posthumous is unavailable is heaven an exchequer they speak of what we owe but that negotiation I'm not a party to this recording is in the public domain a poor torn heart by Emily Dickinson read for LibriVox.org by Becky Miller a poor torn heart a tattered heart that sat it down to rest nor notice that the ebbing day flowed silver to the west nor notice the night did soft descend nor constellation burn intent upon the vision of latitudes unknown the angels happening that way this dusty heart aspired tenderly took it up from toil and carried it to God there sandals for the barefoot there gathered from the gales to the blue havens by the hand lead the wandering sales this recording is in the public domain I should have been too glad by Emily Dickinson read for LibriVox.org by Becky Miller I should have been too glad I see too lifted for the scant degree of life's penurious round my little circuit would have shamed this new circumference have blamed the homelier time behind I should have been too saved I see too rescued fear too dim to me that I could spell the prayer I knew so perfect yesterday that scalding one Sabak Thani recited fluent here earth would have been too much I see and heaven not enough for me I should have had the joy without the fear to justify the palm without the Calvary so savior crucify defeat what's victory they say the reefs in old Gethsemane and dear the shore beyond his beggars banquets best define his thirsting vitalizes wine faith faints to understand this recording is in the public domain each life converges by Emily Dickinson read for LibriVox.org by Becky Miller each life converges to some center expressed or still exists in every human nature a goal admitted scarcely to itself it may be too fair for credibilities to merity to dare adored with caution as a brittle heaven to reach were hopeless as the rainbows raiment to touch yet persevered toward sure for the distance how high under the Saints slow diligence the sky ungained it may be by a life slow venture but then eternity enables the endeavoring again this recording is in the public domain my life closed twice by Emily Dickinson read for LibriVox.org by Becky Miller my life closed twice before its close it yet remains to see if immortality unveil a third event to me so huge so hopeless to conceive as these that twice be fell parting is all we know of heaven and all we need of hell this recording is in the public domain I felt a cleavage in my mind by Emily Dickinson read for LibriVox.org by Becky Miller I felt a cleavage in my mind as if my brain had split I tried to match it seam by seam but could not make them fit the thought behind I strove to join unto the thought before but sequence ravelled out of reach like balls upon a floor this recording is in the public domain if recollecting were forgetting by Emily Dickinson read for LibriVox.org by Becky Miller if recollecting were forgetting then I remember not and if forgetting recollecting how near I had forgot and if to miss were merry and if to mourn were gay how very blithe the fingers that gathered these today this recording is in the public domain the brain is wider than the sky by Emily Dickinson read for LibriVox.org by Becky Miller the brain is wider than the sky for put them side by side the one the other will include with ease and you beside the brain is deeper than the sea for hold them blue to blue the one the other will absorb as sponges buckets do the brain is just the weight of God for lift them pound for pound and they will differ if they do as syllable from sound this recording is in the public domain softened by times consummate plush by Emily Dickinson read for LibriVox.org by Becky Miller softened by times consummate plush how sleek the woe appears that threaten childhood citadel and undermine the years bisected now by bleaker griefs we envy the despair that devastated childhoods realm so easy to repair this recording is in the public domain I had no time to hate because the grave would hinder me and life was not so am