So if you guys haven't been paying attention to this series, let's give a quick recap In game one of the NBA finals Derek Rose put the Bulls on his back He was like an MVP Getting the contact and the fail to go Derek Rose to game number one for the Chicago Bulls and in game number two the Bulls were too strong Taking the Lakers out by 20 points in game three the Lakers fought back and now it's a 2-1 series heading into game four in Chicago the series is not looking good for the Lakers if they lose this game If they managed to win, I mean it's looking all right Jimmy Butler gets the mid-range shot right here And this starts us off the Bulls have a lead three minutes and 30 seconds left in this game But before I get started with the commentary, I want to say one New audio settings. Do you think it's better or worse than before comment down below because I don't know I can't tell I don't know if it's worse or the same or better and it does sound different on YouTube I know that so let me know what you guys think of the audio settings Number two, this could be the last episode of the Marge M series So I'm gonna be talking about some stuff after the after the series as well and number three Let's just get into this game and come out with the victory So right now two minutes 50 seconds left in this game Pagasol is facing up against his old team in the NBA finals. I mean, when did you think that was gonna happen? But it's happening right now and Pagasol is putting in that work man This guy is basing and feasting right now. And the sad thing is to Marcus Cousins is fouled out Are you serious right now? You're telling me in a much M series You're gonna like to mark this cousin foul out. Are you serious right now? So Randall is up against Pagasol and this man's like Twice it is doubly as high man Pagasol is so damn huge compared to Julius Randall Not really, but I just it feels good saying that okay. It feels good saying that 112 to 115 one minute 26 seconds left in this game. The Lakers cannot lose this game We need to tie it up and get a victory right here So with Russell getting the steal and getting the fast break dunk to go One point game now so one point game and the Lakers have to lead with 22 seconds left in this game Russell gets a nice green by a Sun White side a Sun White is rolling to the basket go inside And he gets the missed layup because the balls have some really good defense down low with Joe Camino and Pagasol Butler's there as well Butler gets it to Rose and don't tell me Rose is gonna pull a crazy game one finish on us He misses the layup.  He misses the lap and D Rose know he messed up You messed up D Rose. He knows it right there. And so with Jabari Parker at the line 1.9 seconds left. He makes the first free throw. He needs to hit this to make it a three-point game Jabari Parker buckets Surely the Bulls are not gonna come back. I mean we all know Derek Rose wants revenge for missing that wide-open layup But not from that far out, right? I mean that's way too far.   What in the world? You're telling me He was almost at the at the at the Bulls half-court line and this man just hit that shot to send it to OT This man is like an MVP. Yeah, that right there.  Don't you dare celebrate Joe Kim. No, you did nothing on that possession. I did that for you, bro Anyway, a song once I makes up for it getting that dunk on PJ Tucker right there And with the answer Russell feeding Kobe Bryant right there getting the lab That was actually Jabari Parker. He said Kobe Bryant, but anyway two-point game two and a half minutes left This is when the Bulls decided to turn it up Yeah, bro, they turned it up and they took overtime. They took friggin overtime. Look at that score. What happened I don't know. We couldn't hit a shot. They could hit all their shots. And so we are down 3-1 going into game number five and The Lakers have a chance of being eliminated right now and the Bulls have a chance of winning the NBA finals D Rose is playing like his former self. This man's a beast in this game. I'm not even gonna lie He went 10 for 19 Kobe Bryant had an old-school game 50% from the field 31 points this man went to work and we still lost this game Ah This this series right here, man. It's crazy. So anyway, let's hop into game five And so here it is game number five if we win this game We make it so tough for the Bulls even though we go back to Chicago in the next in the next game But if we lose this game The Bulls win the NBA championship. So I guess you can say it's a pretty big game right now I mean just a little bit as the markets cut is just absolutely bulldozers through Joe Kim Noah getting that layup to go right there But tied game start of the game 14 minutes and 10 seconds left in the first quarter We play some good defense and look at this. I mean Hasan White Sun was just angry right here. I mean, this is all anger This is a chance for Hasan White Sun to say, you know what? I deserve to be here in the NBA finals Let's take this win tonight. This man this boy was angry He blocked that shot all the way down there and Kobe got a bit angry getting that block Whoo, not in my house. I mean that is his house I mean if you have to say the Los Angeles Lake is arena Staple Center was anyone's house I mean, it has to be Kobe Bryant's house as the markets cousins gets that slam dunk to go But soon enough the the Bulls. Well They were just too good. I mean in this first quarter. They cured us at this point in time D Rose decides to put on the moves and give it out to this boy right here The young blood Tony Snell and they took a ten point lead going to the second quarter But you know me we're not going to go into the second quarter We go straight into the last quarter and it's still that ten point lead to the Bulls No score has changed. So it's a ten point lead And this is our chance to come back and take this win and take this victory and do some work now I do have a new kind of plan I have in place So I want you guys after this game to stay tuned Because I have a lot of things to go over after this game that I want you guys to see because uh, yeah Well, not really to say I want you guys to hear what I'm gonna say after this game has ended So stay tuned don't go anywhere because I've got a lot to talk about anyway as you can see the Bulls decided to turn the heat up and Yeah, these guys honestly, they were just too much and look at D Rose flopping right there What are you doing son? I nailed that three right there with the Angelo, right? I think that's a mid-range actually with the Angelo Russell, but anyway The Bulls I guess you could say that was just too good. I mean, how do you defend that?  And then some white side decides to get fouled out right here And it's a 20 point lead with two and a half minutes left in this game The only person that was putting in that work was this man right here D Angelo Russell Apart from that nobody really put in that work and we are we lose We lose man.  But yeah, I mean the Bulls are That was just too good. Honestly, they were too good. Like I admit I played well against the Warriors clip is thunder I beat all these guys and and some guys in the conversation were saying I didn't actually beat them I put the difficulty down. What are you talking about? I definitely beat them, but this We lose Matt. We actually lose and I didn't want to lose. I wanted to get to be bright Here's six ring. So that proves that you know, honestly, the Bulls were just too good The Bulls were honestly just too good for us as you can see Russell putting that work but apart from that I don't know man. Just couldn't get our shots to fall and it wasn't a great ending to the series Kobe Bryant Unfortunately, that was his last game in the NBA and this man D Rose putting on an MVP performance In fact, he wins the finals MVP and with Kobe Bryant announcing his retirement This man finished on a 38 year old Kobe Bryant So here is about the point in time where I've got to make some announcements. So first of all, I Made a new a new schedule on how the videos are gonna be running. So on Mondays Well, this is Australian days. So because in America, I've got to explain this all right in Australia It's Monday in America. It's Sunday. So I'm gonna do it Australian time, but you pretty you get the gist Monday I'm gonna be doing a rebuild a team and this could be a legends team as well pretty much. We do a my GM Mini series where it's just one episode and we rebuild a team in one episodes and the video might be a little bit longer That's what we're gonna do on Monday on Tuesday We're gonna be doing a my GM series on Wednesday my career on Thursday my GM Friday my team Saturday my career Sunday My team so there's gonna be to my team to my career to my GM now I also want to say this There is a I created a my GM voting poll in the description down below for you guys to vote and I want you guys to vote on the team that you want me to do for my next my GM series Now I also ordered a new camera. So face cancer gonna be a lot better But it's gonna be coming after Christmas. I think so. Yeah, the face cam camera will be coming after Christmas And that means I'll be doing more wages and mini games on my team So if you guys want to comment down below a youtuber that you'd like me to wager or do a mini game with I'll try and make that happen and then you know if once I'll make a separate video for this But you guys can also ask them over Twitter or YouTube or something like that. What do you guys think about the audio settings? I did change the audio around. So I don't know if it's worse or better. Comment down below Let me know what you think about the new audio And also, I wanted to say do you want me to do a setup tour of my new setup because I did change some things around in my setup and Also, do you want me to make a series on how to be a youtuber or on how to start being a youtuber? So yeah, that's that I'm out. I hope you guys enjoy Don't forget to vote in the description box down below click the link and vote for the next my GM series In my opinion, these are five teams I would honestly love to do and I would not be bored if I could do these teams number one Miami heap. They're my favorite team. How could you be bored doing your favorite team number two? The Indiana Pacers rebuild around Paul George number three Miami and Pacers and maybe the 76ers that'd be kind of cool because they got no hope as of now But anyway, it's been Dwayne Smith comment down below and vote for sure. I'm out. Peace


Hello. We are here in front of McDonald's with Victor Lim. Hi there. Good afternoon. Good to see you. I know that you've been here. You are the executive director chair of the mall. I'm the chair for the First Street Mall Business Improvement District. And we formed this over 10, 12 years ago. And it's just a way of trying to see what we can do to make our area of downtown a little bit better. How many businesses do you have in the mall? Well, the First Street Mall Business District actually incorporates Nimitz Highway all the way up to Baritania Street. So any property that's on the mall is technically part of the First Street Mall BID. What about Union Mall? Is that part of you also? No, Union Mall is a separate entity. So our incorporation is just strictly here on Fourth Street. Yes, it is. So how many businesses do you have? On the mall? On the mall, you've got to actually count the buildings. Because we have some buildings that have a lot of tenants inside there like Pioneer Plaza, the Bank of Hawaii building. They have a lot of multiple people that are on the tenant. Like my property is just small. It's only one. Then you have Executive Center. You get all these commercial properties here. They have multiple talents. But the membership is made up of each property owner. So now this building right across the street here, that one is in all of the pictures of Old Fort Street. And it still looks like that. And it's a wonderful architecture that all of these buildings, some of these buildings are over 100 years old. And in fact, if you go up and down, it's not only that building. But the Pentheon building actually is probably the same generation building just like the building beside me, except that facade is different. When it started, you've been here since the beginning.  So what happens was that, if you got to remember, you go back 15 years, 16 years ago, downtown like today has a lot of challenges. We have challenges from vacancies in our buildings. We have challenges from homeless people. We have challenges from just any kind of things, you know, here. And so the property owners were very concerned that there's so much vacancy and downtown has a very bad reputation of being dirty and not safe. And so our primary objective of incorporating as a BID was really to try and change the trajectory and make it a cleaner, safer place for everybody. Because if it's safer and cleaner, then you're going to have merchants that's going to move in, consumers that's going to come in and shop in the area. So that's what the intent of what we did. And in the 15 years, you said 15 years. So you've seen a difference? Oh yeah, so what we did was really, you know, most of the cleaning and security in all of downtown is the responsibility of the city. And our role is not to let the city abdicate that responsibility. Our role is really to find a way to complement what the city is doing with their limited resources and how we can plus up so that we can keep our more cleaner, safer for everybody.  Yeah, you know, the whole downtown area suffers from tremendous challenges of having benches and things like that. As you know, the city has also passed a lot of some of the sit and lie bills and things like that. Because there are a lot of people that use the benches not really for a sitting but as a way of camping out. And so, you know, there's pluses and minuses no matter what you try to do. I appreciate you and all the years that you've been here and knowing you has been a real pleasure and I'm glad to see what you're doing with Chinatown. It's part of my community service. This is where we work every day and of course we want to make it as clean and safe as possible for everybody that comes to downtown.


model introduction for each project. Hello everyone, welcome to our talk. The topic for today is integrating high-performing feature store with K-Serve model serving. I'm Ted Chen, I'm with my colleague Qin Huang today. We are software engineers from IBM Silicon Valley Lab in California. I'm here to talk about feature store and some of the options to set up a high-performing Feast feature store. And Qin will go over K-Serve with model mesh and how to integrate the Feast feature store with model mesh in a cube cluster and show you an end-to-end demo. So first, a bit of background for people who are not familiar with feature stores. Features are individual values that are inputs to machine learning models to predict an outcome. Feature engineering, on the other hand, is the process of generating or extract the features from collected data. So many ML organizations store features in a centralized fashion and each organization have different requirements for each feature store. But in general, it can be seen as a data management layer that enables data scientists and ML engineers to create, share, and distribute ML features. The turn of feature store was first introduced in Uber's machine learning platform called Michelangelo. Back in 2017, it was developed to build reliable uniform and reproducible pipelines for creating and managing training and prediction data at scale. Before the system was built, the data scientists were building models from their laptops. The engineering team were building one-off system to serve model introduction for each project. There was no established way to deploy models introduction. But of course, Uber is not alone. Many other companies were facing similar problems. Airbnb, Spotify, Pinterest, and Twitter. They were all looking for solutions to manage and operate their ML pipelines and deployment process. So they were all building their own in-house feature store to solve their own needs. Some are open source, other were cold source. The turn feature store has since become more generic in recent year. In 2020 and 2021, there were an explosion of managed feature store starting to appear, such as Tecton, Databricks, and Vertex AI SageMaker feature stores, just to name a few. Among these feature stores, Feast feature store was one of them. Feast was originally founded by GoJack. Willem Pinar, the creator of Feast said it was developed to address the data challenges at GoJack for scaling machine learning or right hailing food delivery, digital payments, fraud protection, and other use cases. It was developed in 2018, open source in 2019 and joined the LFAI and Data Foundation in 2021. Feast is one of the most popular feature store projects on GitHub. Currently at 3.3K stars, three main concepts of Feast. The offline store is a serving layer for retrieving features for the model training. The offline store supports many data warehouses. The online store is a serving layer for retrieving the latest features which are features materialized or synced to the online store. This is after you have done with your model training. Feast provides a list of choices for offline online store backhands which we will go over later. The third one is registry. It is a file based object store that is generated or updated by running the Feast apply command. It contains serialized feature metadata in materialization history. Registry is a central catalog which allows data scientists to research, discover, and collaborate on features. The feature repo is a single truth of source of feature definitions and features store config. It contains a feature repo YAML config and the feature store .py which defines the data source entity feature views and feature services stored in your chosen offline store. Running Feast apply CLI command will refresh the registry object. Feast provides Python SDK in CLI for the downstream ML training and inferencing and operational tasks. For example, the get offline features SDK method is used for point in time feature retrieval from the offline store for model training. Feast apply CLI command is used to sync the latest features into the online store. The get online features SDK method is then used to get the latest feature from the online store which is integration point for our downstream model serving layer. The optional feature server is a front end to the online store. Feature servers are optional. They provide test or GRPC front end to the online store in case your program doesn't use the Python SDK. For this talk, we'll focus more on the online store. Keep in mind that Feast does not resolve the following problems. First, it does not want to be an ETL tools. Feast is not a feature engineering tool. Feast assumes that you have already done the feature engineering job using an upstream ETL tool and you have stored those features in your data warehouse. Feast provides the SDK to retrieve features from your data warehouse in a consistent way instead. Last, Feast is not a general purpose data catalog. Feast is purely focused on cataloging the features for machine learning pipelines or systems and only to the extent of facilitating the reuse of features. There are many ways to use the Feast SDK for feature serving. By default, it comes with three providers maintained by the Feast community plus a vendor specific provider. The provider is an implementation of feature store components using specific combinations of offline online store registries in a specific environment. For example, the GCP provider uses Datastore, BigQuery and GCS for the online store, offline store and registry respectively. If you don't use any of the cloud providers, the choices for the offline online store and registry would fall under the local provider. Which means the mobile light or redis for the online store S3 or BigQuery for the offline store plus any of the additional offline store plugins such as Snowflake, Hive Postgres, Trino and Spark. Some of them are provided by third-party or experimental currently. However, if your offline store is not listed, the custom offline or online stores can be done by implementing methods in the abstract offline or online store classes. Let's talk about our scenario. In our deployment, our model serving platform is K-Serve and it is based on Kubernetes. We deploy our online store on Kubernetes. We won't go into too much of the offline store and model training part since our focus is mainly model serving which only requires the latest features. But in the FISC community website there are many examples and tutorials of end-to-end scenarios for populating the online store from scratch. For Kubernetes the Redis back-end online store is recommended. There are two options for the high-performance online feature retrieval with the Redis online store. First is the Java feature server. It is an optional GRPC feature serving front-end to the Redis online store which can be deployed quickly using Helm install as a service into your cube cluster. A benchmark result has shown that the Java feature server may achieve near sub-millisecond latency response time depending on the number of features retrieved. In a study done by the FISC community it is 7 to 10 times faster than the counter-partner Python feature server option when retrieving a row of 50 to 250 features. They are pre-built Python and Java GRPC clients to retrieve features. In our case our downstream model serving layer does not use in any case if your downstream model serving layer does not use Python or Java clients additional clients in other language can also be generated from the portal definition using the code generator. The second option is the newly developed Go-based Python SDK which the community claims much faster than the original Python SDK. We tried all three options here and since our case server transformer is Python-based and we choose the Go-based Python SDK for the integration. And the next I'll pass it to Qing. She will talk about case-serve with model-match to change your trend. Thank you. My name is Qin Huang from IBM. I will give you a quick overview of case-serve with model-match and do a short demo of model inference using online features. Previously called KF Serving case-serve is a CNCF incubating project. It's a standard-based model-serving platform built on top of Kubernetes. It is aimed to support production-grade model-serving use cases. It has a set of high-performance and high abstraction interfaces so that the users can deploy and run models in their favorite machine learning frameworks. This would include TensorFlow, PyTorch, XGBoost, Sidekit-Burn, Onyx, and TensorRT. Currently, NVIDIA's Triton server, Selden's ML server and PyTorch's Torch-Serve all support this inference protocol. It is open-source and it runs anywhere Kubernetes runs, so you don't have to worry about vendor locking to use this serving solution. As we all know, Kubernetes has certain resource limitations, such as maximum number of pods in a node and the maximum number of IP addresses in a cluster. ModelMesh in case-serve is designed specifically to address these limitations. It allows you to run thousands of models and frequently change the models as well, with high density and scalability. Basically, it serves multiple models per container. It has the logic to unload in active models and load them back just in time whenever needed. So the utilization of the available compute resources is totally optimized. It also has the intelligence to manage in-memory model data across clusters of running pods all based on the usage of those models over time. Let's take a look at the ModelMesh architecture. Essentially, serving runtime deployments are created on demand to host compatible predictors or models. On this chart, you will see two deployments of runtimes. They are serving for 10 models in total. In each pod, there will be three containers. The first one is to implement ModelMesh logic. The second one is the adapter or polar to retrieve models from the S3 object store. And the third one is, of course, the model server like Triton or ML server to do model inference. There's also a Kubernetes service here to work with all pods across all deployments. The external inference requests are going through this particular service. One of the ModelMesh pods will actually act as the ingress pod and routes the requests to the other pods as needed. Finally, the SCD instance is to coordinate the operations and also to persist model states. We wanted to see how much we could pack into a single node with ModelMesh. So we ran a scalability test in a fairly small cooped cluster. It has only 8 VCPUs and 64GB of memory. At the end, we were able to deploy 3DK simple street models into two serving runtime pods. We then sent in thousands of concurrent inference requests to simulate a high-traffic scenario. ModelMesh actually achieved nicely with a single-digit milliseconds of latency. When the QPS is less than 1000. I think that's pretty impressive. Right? Here are the highlights for KServe with ModelMesh. First off, the standardized inference protocol works for common mission learning frameworks. We get the GPU auto-scaling and scale to 0 by leveraging Knative. There's a explainer component that allows you to analyze model behaviors. The cannery rollouts make it easy to distribute the traffic to a new model version during a model upgrade. Custom plugins can be developed as well to do pre- processing around the model prediction. The intelligent model placement and loading as I talked about earlier helps to optimize performance and resource usage. And we have the efficiency, scalability and the flexibility to serve thousands of models. Alright, next I'll go over how we put Feast and ModelMesh serving together to make a prediction. KServe has this transformer component which is customizable for pre- and post-processing for inference. Naturally, we created a Feast transformer to retrieve real-time features and perform data information as needed. As Ted mentioned earlier Feast provides multiple ways to fetch online features via REST server a Java-based JRPC server or a Go-based SDK. Our transformer can communicate with Feast in all three scenarios. In this diagram for demo coming up we have taken the Go-based SDK approach. It is recommended for production use by the Feast community. The inference request will come into the transformer first and gets routed to Feast for real-time feature retrieval. Then we transform the augmented data to PoloBuff message and send it over to ModelMesh via JRPC for inference. At the end we transform the results in PoloBuff message back to the expected data format for outputs. Essentially, we applied the Go-based SDK and JRPC for inference to achieve the best end-to-end performance. As far as the demo we wanted to find the best candidate for driver request based on the most recent driver features. In this case, we use the driver's account rate, convert rate and average daily trips. We also would like to serve multiple regions. For instance, San Francisco and San Jose might use similar but separately-trended models. The initial input will be driver IDs and the output is the driver rankings. Let's see how this Feast transformer with ModelMesh can make it happen. We have everything set up in a 3-node coop cluster. There are a couple of pods to run the controllers for K-Serve and ModelMesh. As you can see, the Feast online feature store is a reddit server. We have a cron job to update the features based on an offline store in S3. We have a single serving runtime pod including the ML server to serve two predictors pre-channed in S-Caler. Each transformer will also get its own pod to handle the incoming requests. Finally, two inference services will be deployed and we will send two driver requests. One with two drivers in San Francisco and another one with four drivers in San Jose. So these requests are going to be using the online features and eventually processed by different models as indicated in this diagram. Okay, here's my terminal. I have a coop cluster with this reddit server for Feast and I'm going to deploy two inference services. You can take a look at this one. As you can see in my deployment spec there's a predictor as well as a transformer. The entity IDs and the feature keys are specified here. I can also request for additional resources if needed. It's pretty straightforward so I'll go ahead and deploy them. Let's take a look at my pods. As you can see here the serving runtime pod is being created and pretty soon my transformer pods are up as well. I was sending a couple of requests to do an inference. Basically you can see one here for San Jose for instance the other one for San Francisco I have a small script here to make a current request using these input files. Let's send the request for San Francisco. As you can see quickly it's coming back with the results going to Feast and the model mesh. Similarly I can make a request for San Jose. I got the driver rankings back for drivers. As you can notice the model name is padded with some string here to make it unique across multiple name spaces. This concludes the short demo. Back to you Ted. Okay so thanks Shane for the demo. For a recap in this talk we have introduced an open-source feature store of Feast and how you can set up your own high-performing Feast online serving in a cube cluster and get the online features with the Go based Feast SDK. Also we have shown you a demo how to integrate the open-source model mesh model serving layer with Feast for multi-region model serving in a cube cluster. So coming up we have a few talks from IBM. Please participate if you are interested and let us know if you have any questions. Thank you very much.


Welcome to today's lecture. So we were discussing high resolution NMR spectra of molecules. If you remember in the last class we had discussed how to make chemical shift field independent because we remember that like if we record chemical shift at different field in terms of frequency or in terms of hertz the values were changing. So to get rid of that we started looking at the how to express the chemical shift in PPM value and that PPM value made it independent of field. Then we looked at that for referencing we need some compound which is inert and does not react with the solvent and the molecule of our interest. And therefore TMS and DSS were obvious choice because their resonance comes quite often shifted or lower PPM value their water like TMS is highly shielded and that is how it is used as a reference. DSS on the other hand is water soluble and it does not interact with any biomolecules and it is used for water soluble compound. So next we looked at the what are the factors that influence chemical shift and out of those many factors we looked at what ring current can do. So ring current effect we had looked at and ring current is 1 which causes the downfield shift or higher PPM value shift of resonance of CH protons of aromatic compound. Then we also looked at the contact effect this is this comes because of some unpaired electron are present and that can shift chemical shift significantly. Then after that we looked at the chemical shift variation due to different nuclei attached and that all we have summarized in the last class. So now from here we will move forward and we start looking at actually now the another very very crucial parameter that is called spin coupling or this is also called j coupling or scalar coupling. So let us start looking each of these parameter together. This is also called j coupling. Scalar coupling because this does not depend upon orientation and this is also called a scalar coupling. Now so we had looked at the first chemical shift spectra that were recorded on ethyl alcohol on 14 megahertz and it gave 3 line. The first line corresponds to CH3 methyl proton methylene proton and this is for OH proton. So this was for OH, this was for CH2 and this is for CH3 and the height of each of these peak was like 3 to 2 to 1. That is what we had looked at. So this was the first spectrum recorded by Dharmati and coworkers and then that actually opened the avenue of NMR in chemistry. Now in the same year almost in 5051 Proctor and Wu discovered one of the very very important parameter which is called actually the coupling constant. This helps in unambiguous characterization of molecule. So today we will look at how actually it helps in unambiguous characterization of molecule. So what happens that in the high resolution spectrum actually the one line of methyl proton that we had looked at here is not actually one line. However it is split into three lines and that is what here we see. In case of methylene actually this is also not one line and it is split into many lines and similarly OH also splits into many lines. So splitting of the resonance of line and the extent of this splitting, extent of this splitting actually reports for what is the strength of interaction between various spins and how these spins are interacting. So this actually this splitting pattern helps us in identifying the final structure of a molecule because this spin-spin coupling between the methyl and methylene proton actually tells the neighboring group effect and this is due to something called J coupling or spin-spin coupling or scalar coupling. So just to remind you here we should have if there is no coupling then in case of methyl there was only one P here and here also there was a one P and this is also a one P. Now this was 3, 1, 2. Now if you look at here this OH it is coming slightly upfield shifted then like CH2 and this spectra was recorded on generally very like neat alcohol, pure alcohol. So now we move forward and we look at how does this splitting occurs. So what is the reason behind the spin-spin coupling or J coupling? So this happens because of interaction of mediated by the electron in the intervening bond. So in a simple term what is happened like we had looked at the chemical shift is because there is a spin and around that there are electronic clouds. Now if you look at these spins is not in isolation there is another spin which is near here and that spin can influence the chemical shift or the resonance property of this spin and that coupling happens via the electrons that are between them. So that is why this is called through bond coupling. So through bond coupling because the two spins are now coupled by an electron. So in the bond that is intervening here. So a nuclear spin can polarize the electron spin adjacent to the bond orbital here it can polarize it and that polarizes the spin parameter of electron in the same orbital. So that can affect this one and then what happens this is through bond so can extend up to 4 to 5 bond but as you go far and far the strength of that effect decreases therefore the J coupling becomes smaller and smaller as we move far and far. So the strength of the coupling is called coupling constant or J coupling. So that means how much this spin affects its neighboring spin through bond it is called J coupling and as we say as we move from one spin to two spin this is quite strong but if you look at the effect of third spin the J coupling spin decreases because we are moving now far from spin number 1 to 2 to 3. Now what is happening here it is a concerted polarization of a nuclear spin and electron spin. So in a simple term suppose we have two spins here spin and there are some electron spin in between. So what is happening now if we are considering spin number 1 then it is near there is another spin and that spin can exist into form either up form or down form so spin state A and spin state B. So because of this orientation of the now this is our interest spin and this is its neighboring spin. So it has different state spin state 1, 1 state A and state B. So now this is influencing the electronic spin which is between these two spins and that is here that is shown here. So then the coupling interaction between these spins I1 and I2 is quantitatively given by spin interaction which is called J1, 2 I1 and I2. So this is the coupling strength where J1, 2 is a coupling constant. So in a simple term if there is a spin here and if there is another spin here now this spin is affecting the resonance frequency of this because spin number 2 here I2 and I1. So this is I1 and this is I2. So the interaction occurring between them because of this coupling is JI2. So now the resonance frequency of I1 is affected by I2 and vice versa and that is called spin-spin coupling or the scalar coupling. So let us define two spins like A and X. Now as we see that if these two spins are close by and they are connected by bond then there is a coupling between them which is called J coupling. Now then what happens? The energy of spin A, now actually it has 2 G minus state. So like here spin A, IA then it has 2 G minus spin alpha state and beta state. Now depends upon this state depends upon whether the X spin is in alpha state or beta state. So IA this state depends upon whether the X spin is in alpha state or X spin is in beta state. That affects the resonance frequency of this and this coupling can be positive. So because of that now what will happen between these two states, now there are two spins as we discussed spin A and spin say X. Now A spin has two state alpha and beta state and similarly X spin has alpha and beta state. So now because of this there are four state can be possible alpha alpha, alpha beta, beta alpha, beta beta. What it means in terms of vector? So here is alpha state and this beta state. Here is also alpha state and beta state. So it can be up, up both spin, up, down, down, up and down, down. That is all we are we were discussing. So because of this the all states that we were discussing it can exist here alpha alpha, alpha beta, beta alpha and beta state and these states will have different energy. So because now A spin is not in isolation it is coupled with B spin therefore the different energy will be. So coupling between them is positive if the energy of alpha state of spin A increases that means if the energy changes here and if it is increases and increases for X spin that is in alpha state and it decreases if X spin is in beta state. So what we are saying the energies of spin A and B can change. So suppose here here is the energy of A spin it can decrease or increase depending upon if the X spin is in alpha state or beta state it can increase or decrease. Now that is what we call coupled is positive. However the energy of beta state of spin A will increase if the X spin is in the beta state. So if X spin is beta state then it will increase and it will decrease if X spin is in alpha state. So that actually changes. So that is what now we can understood. So instead of now two energy here it can be depending upon whether what is the state of B and we can have four states here depending upon whether B is in alpha state or beta state. So that is what it is shown here. So again I will repeat it. So say spin A has two energy level one for alpha state one for beta state. Now depending upon what is the orientation of spin X if it is beta state or alpha state. So here if you look at this energy level it changing. If it is beta state the energy is decreasing. If it is alpha state energy is increasing and the separation between these two states is only few hertz. Similarly here also the energy of beta state also has changed depending upon whether X is in beta state or alpha state. So there are four energy level now created depending upon whether the X spin is in beta state or alpha state. So we can call this as a like alpha beta state as a 0 alpha alpha state as a 1 here beta alpha state as a 0 and beta beta state as a minus 1. So now the resonance for the spin A will have two line one will be mu 1A. So this is first line and this will be second line. Therefore the now earlier which was only one line here centered at the mu A now it will be split into two line and that separation between these two line will be J 1 2 or J coupling between these two states. So if you look at the energy level diagram. So if alpha alpha is alpha alpha state that is alpha A alpha X is this alpha beta is this beta alpha is this beta beta is this. So now we have four energy states one coming from here if the first spin is changing its state that is alpha is going to beta and here also if alpha is going to beta here again we have the energy state. So now spin A we have two lines one corresponds to this and another corresponds to this. Similarly it will happen also for beta and that will be given by these two lines here. So if A is coupled with X, X has split A into two line. Similarly if A is a half spin and X is also half spin as we said. So X will be also split it into two lines. So these are for A spin this is for X spin. Now that is the final structure. So now when A is coupled with X the transition will be called alpha A X beta A X. So this is here if you look at A is flipping. Similarly here again A is flipping and that is what this and this line corresponds to this and this line corresponds to. So now as we will say parallel orientation of these spins increases the energy states and anti-parallel will decrease the energy states. So here if you look at now we are looking at the coupling between this H and C and here it is coupled via C. So if they are anti-parallel here if the parallel orientation of spin increases the energy whereas the anti-parallel decreases the energy. So here J will be positive and here J will be negative. So in case of one bond coupling like here one bond coupling the anti-parallel orientation of nuclear spin leads to lower energy and that coupling is called positive. Whereas two bonds separated spin like here two bond one bond here one bond here two bonds separated spin the parallel orientation of spins leads to lowering of the energy and this coupling is called negative. So we can have the value of J positive and negative. So now depending upon how the orientation of each spins the value is also changing. But one thing to remember this J coupling is field independent. Chemical shift was field dependent when we express that in PPM value it becomes field independent. J coupling invariably it is field independent. So positive and negative sign depends upon the orientation but does not depend upon which field we are recording this is a constant value. So what are the factors that influence the spin-spin coupling or J coupling? So first as we see the closeness of two spins depends what will be the strength of because these spins are coupled by a bond and in bond there are electron. So spin-spin coupling over one bond is denoted by J1 like here J is the scalar coupling and one denotes the one bond value. Now in the J-minial coupling which is say is two bonds so here these two bonds are called here like one bond here and one bond. So these are two bond coupling. Now visceral coupling is called three bond coupling. So if you look at one bond, two bond and three bond coupling. Similarly long range can be like more than four bond coupling. So depending upon one bond, two bond, three bond, four bond coupling. So h here and h here will be four bond coupling if it is connected like this or 1, 2, 3, 4. So that is more than this is called long range coupling. So if you look at the distance is increasing the strength of the coupling will decrease because this is connected through bond. So as for an example if you look at two bond coupling and we are saying this is minus 12.5 three bond coupling is four. However depending upon how they are oriented if long range coupling like five bond is 5.5 to 11 hertz. So but if you compare 2 to 3 actually as we move further the coupling constant strength is decreasing. So there are range of coupling constant. So a homonuclear coupling are generally small compared to heteronuclear. So for proton-proton like two bond coupling is generally 5 to 20 hertz whereas one bond coupling in heteronuclear system like 13C and proton it is a quite a bit 100 to 250 hertz. For nitrogen proton coupling here it is 80 to 100 hertz and then phosphorus proton coupling is typically around 17 to 12 hertz. Now here if you take three bond coupling this decreases four bond coupling further can decrease the proton-proton coupling. However this is called homonuclear coupling and these will be called heteronuclear coupling because that is between proton and proton and here our X nuclei like 13C and 15 and phosphorus are there. Till now we have understood that there is one parameter which is important is chemical shift. The another parameter is important coupling constant. Coupling constant is coming because of another spin coupled to the spin of our choice and this coupling is happening via electronic bond and as we move further the strength can decrease but the splitting the splitting cause because of this J coupling or scalar coupling. So now these two parameter chemical shift value and a J coupling these two are very important parameter because these are required for high resolution NMR spectrum analysis for any molecule even small molecule or bigger molecule. Now as we looked at the chemical shift value is for a particular nuclei. So that gives the particular resonance frequency for a nuclei and this is denoted by delta value so that is chemical shift value. The coupling constant actually determines the interaction between those nuclei. So a particular spin will have a chemical shift and another spin have another chemical shift and how strongly they are coupled or how strongly or weakly they are interacting that is given by J value. So the basic analysis for any molecule is requires these two parameter their chemical shift value and the coupling constant between these two. If you know this value one can identify the molecule. So this basic analysis of any molecule is done by using these two parameters and this is called first order analysis and there are certain basic rule to understand what is required first order analysis and then that I am going to come in a minute but for more complex analysis of these spin-spin coupling you require even more complex formalism and that we will look at later at the course which is called quantum mechanical calculation for if the spins are too strongly coupled. So now we move to first order analysis which is the simplest analysis of the molecules. So before we move ahead we define some of the spins nomenclature and spins are generally defined in terms of upper case of the alphabet like A, B and C. Now a spin will be called AB system or AX system depending upon what kind of chemical shift they have. If their chemical shift is quite close then they will be they will be called AB system because in alphabet A and B are close. If their chemical shift is far then they will be called AX system if you look at the alphabet A and X is quite apart. So AX system these two spin have a resonance frequency that are widely separated like something say here this will be A and X and on the same magnet AB system will be something like A and B. Now so ABX system will be like say AB and X here because A and B are quite close and X is far from them that is called ABX system. Now so AB are fairly close in relation to the in comparison to X. There is another parameter which is determined here is called coupling constant. So the coupling between them is called JAB and coupling between them will be called JAX. So now here AX system because their chemical shift is quite far AX system or AMX system or AMQX system because they are like separated in the alphabet these will be called weakly coupled system whereas AB system or AB system will be called a strongly coupled system. So what is happening here A and X their chemical shift quite far and the separation between say delta A and delta X is greater than the coupling between them JAX and this is the consideration to define that as a weakly system whereas JA and JB will be equal to these splitting between them JAB and this will be called strongly coupled system. So if you look at strongly coupled or weakly coupled system are not reflection of the strength of the coupling constant alone however it is the consideration of the chemical shift. So how far the chemical shift is in comparison to the coupling constant that determines whether the systems are weakly coupled system or strongly coupled system. So typically heteronuclear system are weakly coupled system and many of the homonuclear system are strongly coupled system not all but there in homonuclear system we have a strongly coupled system. So if I look at the 13 C chemical shift like 13 C chemical shift and proton chemical shift so here on 600 megahertz this will be near to 600 megahertz chemical shift and this chemical shift will be near to 150 megahertz however the coupling constant between them will be around say 150 hertz. So this separation between the chemical shift is quite far from the strength of coupling constant and these will be weakly coupled system. This cannot be case for the homonuclear system here it can be like equal as we were saying here or almost equal. So these will be a strongly coupled system. So first order analysis or simplistic analysis are generally done for weakly coupled system not for strongly coupled system. For those we need a quantum mechanical calculation to understand. Now one more concept I will explain that this is called chemically equivalent and magnetically equivalent nuclei. Now a group of nuclei we can define as magnetically equivalent if all of them have a same chemical shift and each of them has a same coupling constant to every other nuclei outside that group. So these will be called magnetically equivalent nuclei. So similarly like here a to x now a here if you look at here we have a three kind of proton this proton and this proton will have same chemical shift and they have a same coupling constant with x. So this will be called magnetically equivalent nuclei. So that is why this system can be written as a to x that means two a are equivalent but that are different from the x that is why it is called a to x. So spin coupling between these magnetically equivalent nuclei does not appear in the spectrum that means the a to there the spin coupling between them will not appear in the spectrum whereas the coupling constant between this a and x and this will be appear. So these they are not magnetically equivalent to x however among themselves they are magnetically equivalent. Now look at the another system and here we define as another type of nuclei which is called chemically equivalent nuclei or isochronous. So chemically equivalent nuclei will not be magnetically equivalent if they have a different coupling constant to other nuclei in the molecule. So like if I look at here here look at this molecule the one substitution is NO2 and another OH. Now here the Hx and Hx prime here Ha and Ha prime. So these are actually chemically equivalent but not magnetically equivalent. So they have there will be coupling constant between these they are not magnetically and there will be coupling constant between them. So they are not magnetically equivalent they are chemically equivalent. Like similarly if you look at here here Ha and Hb they are not magnetically equivalent neither they are chemically equivalent. So there will be coupling constant exists between them. If I look at these nuclei so fluorine and proton their resonance frequency is quite close. So they are also there will be coupled and there will be coupling constant between them and they can be also called different chemical like they will be not magnetically equivalent neither chemically equivalent. So now these all will be important in interpretation of multiplied structure of a compound. Now multiplied pattern so when we do analysis the multiplied pattern of different groups of line will be different and that will be also dictated by the relative intensity of individual group like as we see different group like CH3 was like this and CH2 was even more complicated. So CH2 like it was split into 4. So that we will look at how the splitting comes from and intensity how it changes the intensity. So that again is very important when we are interpreting the multiplied structure. And measurement of coupling constant what I mean by measurement of coupling constant is this measuring JAB from the splitting of individual group is important because that helps in identification of group having same coupling constant. So here this measurement is so all these parameters we are going to discuss in detail the intensity the pattern as well as the strength and that helps us in analyzing the first order spectrum of the molecule. So that I am going to discuss in the next class how to do the multiplied analysis of different groups and what is the basis of different intensity in the group and how we can measure or how we identify the coupling constant to identify the groups are similar or different and that all comes under first order of analysis. So if you have any question for today's lecture you are welcome to ask and we will try to respond each and every point that we have discussed for today. Look forward for your attendance in the next class. Thank you very much.


The neural mechanisms underpinning ketamine's dissociative and antidepressant effects remain poorly understood. Here, the authors analyzed ketamine-induced brain dynamics with intracranial recordings in humans and found that ketamine engages different brain areas in distinct frequency-dependent patterns that may relate to its dissociative and antidepressant effects. This article was authored by Fang Yin-Chien, Laura D. Lewis, David W. Du and others.


Please introduce Anshuman Bhardia who's going to give a great talk on bug bounty hunting on steroids. Everyone give a great mid-afternoon welcome. We'll just all look at him awkwardly for a minute. I'm just kidding. No pressure. So hello and apologies for all the technical difficulties here. So the talk is obviously on bug bounties and how to hunt such a way that you don't have to look for them manually and it just works for you. So the first slide is basically just a team. It's not me working on this thing. We are a team of three. Unfortunately I am from San Diego so I was able to come but there's Glenn from Australia and Mohammed from Egypt and we've all worked on this together. So today we're going to talk about the problem, right? What the problem that we're trying to solve, the situation that we are in right now, I'll briefly introduce what is the system that we've built and show you in action and then just conclude the presentation with some thoughts. So let's look at some of the problems. The first problem is, you know, I mean all of us do hacking but we also know that not all the hacking is fun. There are so many things that you have to go and do for each, you know, job like one after the other and if there's some kind of automation that would help all of that processes it would really be helpful. So that's something that, you know, we should be able to automate and I mean there are people who are doing it right now. So that's number one problem. The second problem is we often see that if there are no tools out there to do certain things that you want to do we start building it from scratch. I just want to point out that this is really a lot of waste and we should use whatever is out there and just keep on improving on it. The third is most of the security tools that we see these days, they're not really scalable in the sense that, you know, you can run a tool to do something at like one time and then if you want to scale it across multiple domains or whatever it usually breaks. So scalability is something that security folks, I mean, they're trying to solve but it's not really there. And then the fourth problem is, you know, with the advent of all the cloud servers like AWS, GCP, the IP addresses don't remain the same anymore, the domains don't remain the same anymore. So how do we keep a track of all these changing attack surfaces? So these are some of the problems. Now let's look into some of them in more details. I feel this XKCD represents the state of open source tools pretty nicely. Basically, you know, there are 14 tools out there and then there's somebody who wants to basically improve on it or add a new feature and then they end up writing the 15th tool, right? So this really is the state of open source tools right now. I mean, there are so many tools trying to solve the same problem and, you know, it's not really solving the problem by just adding more to it. And then, you know, like with so many open source tools, how do you actually know which ones you want to use, you know, the output of one tool might work with a different tool or it might not. So how do you compare these different open source tools that are out there? There's no standard and that just makes it so much more difficult. The third one I've already mentioned is the poor interoperability between the tools. Now, suppose if you want to use a tool and the tool only produces output in, let's say, JSON or CSV and the thing that you have, that uses a different format altogether. Again, there's no standard. So, you know, most of the times the tools just do one job and then that's pretty much it. If you want to combine those tools into multiple workflows that mostly won't work. And then the last problem that I've already discussed is the scaling and the reliability, right? Most of the tools are not scalable. You have to do some kind of altithreading. You have to use some kind of orchestration system. So the state of affairs is unfortunately really sad. Now let's look into some of the things that we know right now and that can be improved. So the first one is, you know, when we hunt for vulnerabilities in open source software or just like any software, we keep everybody saying that reconnaissance is really important, right? Like if you don't know what you have, you can't possibly hack it, right? So identifying assets is one of the most important things in basically like any sort of hacking, whether it is, you know, hardware hacking or like physical security even, reconnaissance is the key. This is just some data from last, I think this is from last year. But basically you can see almost 50% of the total number of beaches were because of, you know, assets that people didn't know they had. So the A9 is basically a standard. It says using components with known vulnerabilities. If you don't know what asset what you have, how are you going to protect against the known vulnerabilities?  And then, you know, like I mentioned, with everybody moving towards a cloud like AWS, GCP, how do you keep an ongoing real-time inventory of all the assets that you have? How do you keep track of all the IP changes? The domain names, subdomains, how do you do all that? It's a very difficult problem to solve. And then, with, you know, the advent of DevSecOps, all the companies are moving more towards agile. They push code on a daily basis, multiple frequencies. There are all sorts of regressions. There's new code that is constantly being pushed up. How do you keep up to all that, right? The attacks are constantly changing and evolving. So in order to solve some of these problems, we built something called a bounty machine. And we considered, you know, all the things that we've discussed so far, and I'll actually walk you through it, some of it. So before going into, you know, showing it in action, I just wanted to walk you through the architecture of how we think we've solved this problem. So the first thing, it starts with what we want to hack, right? Whether it is an IP address, a subdomain, a domain, an organization. So you start with that, and that value gets fed into an input forker, which then drops that value into a queue. So basically, the idea is a very asynchronous microservice based architecture where it's horizontally and vertically scalable. And you can do that against not just one domain, but multiple domains at a second. So the first step is this. And then after that, the queue that gets that value, it passes on to a different worker, which is where we'll be running all the tools. We'll be doing all the scanning, right? So we call it the workflow worker, right? And then after these workflows finished, they drop the results into a different queue. So you can see it's all based on queues. It's all horizontally and vertically scalable. And then suppose if you want to combine multiple workflows, right? Suppose if you want to scan all the ports, and then after you scan all the ports, you want to find out what are the different CMS systems that the server is running. So you want to be able to pass the data or information from one workflow to the other workflow. So the idea is that, again, you can just link multiple workflows together. And then once the workflows finish, there's a worker that kind of compares the results from the previous run to the new run, right? So one of the biggest problems in bug boundaries is that if you keep running the tools again and again on something, you'll keep seeing the same information, right? But ideally, you want to know if something has changed. And if something has changed, what is new in that new attack surface, right? So we have a concept of a diff worker which just kind of compares all the results that have been stored in the database with the new run that we just ran. And then it just sort of outputs all that information into a different queue. And then from that different queue, we have a notification worker which just takes all that data and spits it out into whatever output you want to have. So we use Slack for right now. So we use Slack to start the workflow and Slack to receive all the output. But this can easily be changed into, let's say, CLI of website. So just the concept of it's very extensible. It's all mutually separated from each other. So if you want to add a worker that just notifies, you can do that easily as well. So in the end, the entire architecture looks something like this, right? You start off sending your attacker whatever target you have into a queue, which is then picked up by the workflow worker. We run a bunch of workflows which are basically open source tools. So if you have your own tool, you can do that. And then after that, the results get split into a diff worker queue, which kind of differentiates the results from the old run to the new run. That spits into the notification worker, which finally shows you all the output. And all these components that you're seeing, they're all running as containers on a Kubernetes cluster on a GCP or any of the cloud where you want. But the idea is that you can have multiple of these workers as well. So you can see how horizontally and vertically scalable this really is the whole architecture. So in terms of the workflows, some of the workflows that we have built so far are to find all the hidden files on a particular domain, to find all the cross domain.xml files which have star entry, which means you can basically host a file on a website and then xfill data out of it. And then there are things like doing a port scan, so for all 65535 ports. There's tools, there are workflows that find open S3 buckets. There's a workflow that looks for all the open, like if it's a Jenkins system, if it is WordPress, is it running any plugins that are vulnerable to known vulnerabilities or not. So you can see these are all the different workflows we have. And they are all sort of separated as well. So if you can think of a new workflow, you can easily go and build it. And let's see. So there's a recorded demo because I only have 20 minutes. But before we actually see it in action, we set up a target. We made a company. We called it Ellingson Mineral Corporation. And there's just two things that we know about this company. There's a GitHub organization's repository for this. It's called Ellingson Corp. You can go check it out right now. It should be online. And there's the domain EllingsonCorp.com. Now if you, as a hacker, if you want to do your reconnaissance on this asset or if you just want to hack this, how would you do it? You would go through your written notes and you would try to follow it step by step. Instead of doing that the way we do it, and there's a recorded demo. So I've actually recorded it and uploaded it on YouTube if there's internet connection on this laptop. So you can see that the way we start this whole reconnaissance process or the tool is that we have different slash commands in Slack. So the first thing we are going to do is we're going to find all the secrets in the organization's GitHub repositories. Probably can't see the command. So I just added a slash command to find all the secrets in that repository. And then the next thing I'm doing is actually providing the main domain to the tool. And you can see that it actually spits out all the secrets which are stored in that GitHub repository. It also spits out all the subdomains of the main domain. So you can see that. Is it? Yeah, I guess it's a bandwidth. I don't know. We'll see how this works much better. And then after it spits out all the subdomains, it actually finds out all the open S3 buckets for that subdomain. And then it also shows that that S3 bucket is listable. It's writable, right? So all the information is right here. Moving on, you can see that it identified two subdomains that can be taken over, which means that if you can just go and register a subdomain and have the CNAME point to it in the right way, you can actually take over their subdomain, one of the subdomains. Moving on, it shows all the port scans of all the subdomains. So remember, we started with the main domain. It actually brute-forced all the subdomains. And then it actually port-scanned all of them. And when I say port-scanned, I'm talking about all 65535 ports. It's not just 203 ports or the first 1,000 ports. It's basically the entire attack surface. And then it shows the status of the ports so that they are open or closed. After that, it sort of identified any course vulnerabilities. For those who don't know, course is the cross-origin resource sharing. And if they're not set correctly in the headers, it might result in different kind of vulnerabilities being exploited. And then you can see that it identified a cross-domain.xml file, which had a star entry, which basically means if you have control, you can take over. It identified all those hidden endpoints. You see there, robots are TXC. And if there was a secret endpoint, it actually identified that. And then this is the best part. So it actually port-scanned. It identified it was running port 8080. And it actually scanned for what kind of server this is. And it found out that it is running Jenkins. And it ran and exploited against that. And then this is the output from that exploit, saying that this installation might be vulnerable. So you can see how it started from a main domain, it's going all the way towards the end. And these are all the issues about the known CVEs against a WordPress sub-domain that it found. Moving on, these are all the JavaScript endpoints. So these days, you'll often find that in the HTML source code of different websites, websites basically have a way in which they kind of import JavaScript from a third party. And oftentimes, we see that they'll have sub-domains in that HTML source code, which are no longer valid. So if you can take over that sub-domain, you can basically serve your own JavaScript file to the website. So we have a tool that actually scans for all the known JavaScript endpoints and tries to see if there's anything there which is not already registered. It tries to see if there are any secrets in the source code. So you can see that it found a JavaScript endpoint, and then it scanned those endpoints for further endpoints. So these are all the JavaScript files you can see, again, JavaScript endpoints. And these are from different sub-domains you can see. The last one is from sredorlingsoncard.com. The one before that is from Help. So it's actually scanning. It's kind of spidering out and doing it for all the sub-domains. And then moving on, you can see that it actually found that there was a MySQL server running on that IP address on the port of MySQL, which is 3306, and it was able to brute-force it. It found out that the user was rude, and the password was a password. So again, you can do some basic brute-forcing attacks as well by just going through the attack surface and knowing what to scan, when to scan, right? Then I think that's pretty much it. Yeah, so I've basically showed you in action all the workflows that I discussed. And if we look closely here, I don't know why it's so slow, but I'll just walk through this like this. So we basically started here, right? We just knew a domain and the GitHub repository of that org, and we were able to find all these things just from that simple reconnaissance. And the approach of spidering towards all the attacks, surfaces that we've identified. So again, this is too small, but again, we found out three buckets, sub-domains that can be taken over, secrets committed in their GitHub repositories, JavaScript endpoints, secret files hidden, all of that. So in conclusion, I just have a few things to point out that obviously automating everything is not practically possible, but there's still so much in terms of low-hanging fruits, in terms of some basic scanning that we don't do a good job of and we should do it. So there's a lot we can automate and we should. And then this actually helps, so you can see all the information that I've received. It actually helps me to go out and do more further attacks and exploits. And all the scanning work is already there for me. I just have to go and use that data. And then exploring new technology. We in the security industry, we are very skeptical and often intimidated by using containers or orchestration systems, but we've actually used all the latest technologies and then built something for a security problem. So that's really important to know. Keep tooling simple and consumable. Oftentimes we see a tool that tries to do all things at once. We've seen that it's not really scalable. If you wanna combine multiple tools, it's really difficult. So just keep it simple and just improve on existing tools that are out there. Don't try to build something from the scratch. So that was it. Any questions? No, so there was one more slide that I wanted to show, but I can't hear. But basically all the workflows that I showed, all the different tools, all the tools are already open source, but we're not gonna open source the entire architecture, but I've shared the high-level overview and it's really simple to just go and build something like this out there, but the short answer to that is no. We're not gonna open source it. Any other questions? All right. Thank you folks.