The second sin we commit financially is when we begin to steal from people and stealing meaning when we take from some people what is not ours or we stealing is when we take what's not ours or not give what is someone else's. This happens when sometimes people break into other people's houses or cars and they commit robbery. This also happens on a lighter note when you go into the mall and you think that they have been too big and too successful and there is nothing wrong if you take shoes or a shirt with you and not pay for it. Shoplifting. This also happens when we borrow money from someone and we do not return back to them. This happens when somebody works for us and they do a one little poor job and we refuse to pay them completely and we find a loophole and we find a cunning way to keep the money and to keep their work. This happens when employees go to work and begin to take stuff home and enrich their lives at the expense of their employer. This happens when the citizens feel like the country is not serving God so it gives me the green light not to pay taxes. All of these are different types and shapes of stealing and what stealing does is it opens the door to the devil and the devil after that has a legal right to destroy your life. You can be on your way to heaven but if you are falling in love with money and you are stealing or doing things with money that hurt other people you have to understand God does not love you less. The devil has control over your life already. The first sin humanity committed was an act of robbery when God said this is forbidden and we said it's mine. It wasn't money we stole it wasn't an iPad or a phone we took a fruit and ever since then it has been in our DNA and in our nature to take what is not ours. And the last person Jesus forgave before he left the earth was a thief which means there is hope for all of us. Can somebody say amen. When you have committed stealing or maybe you're committing that today downloading illegal things and so on and on. If you want to prosper in your financial life you have to close the door to the devil. You have to drop illegal things today.  When Jesus walked into the house of tax collector Zacchaeus and the presence of Jesus brought such a conviction that the scripture says Zacchaeus got up from the table and says I will give half of my income away. And anybody I ever duped or ripped off I will come to them and not only apologize and says I'm sorry but I will give them four times more than I stole it from them. On that day you would wish Zacchaeus would have stolen from you and it's interesting that Jesus sees that and Jesus doesn't say Zacchaeus wait you don't need to do that. First of all Zacchaeus you don't need to give half of your income to the poor you're not under all testament I am Jesus I am embodiment of grace. You don't need to do that and Zacchaeus you sure don't need to go back to those people I forgiven you for your sins you just live your life. You don't need to go back to them and give them anything and tell them anything this between me and you Jesus never said that. We have a generation today that steals from people and they think that sheep I am sorry God will fix everything between you and God but not between you and the devil. Cheap I'm sorry after we steal and rob and hurt people will fix everything between you and God. God will forgive you of that sin but the devil will still have the right to attack your life until you deeply repent and until you do what you can in your power to make it right to the people you have hurt. Not for forgiveness of your sins but to close the door to the enemy and open the door for the blessings. Now sometimes you lost the contact with those people sometimes you don't you have so many that you might not even have the the power to to do to all of them. It's important that you try your best. We have our leaders and people who consistently come to our church. I know particular young men who this year took three to four day of fasting and during that fasting that's what he was focusing on. God bring to my mind every person I ever stole from and ripped off and then he started to call these each one of these people. And he said he said passive that I died million deaths calling them. He said some of them were my relatives to call them saying you know that thing when that was missing that everybody was looking for. And that was me and I'm sorry.  And there was a new management new system but he didn't do it for them. He did it for himself and he says I came here to apologize. I've stolen a lot from your store 10 years ago and here's a check. I just want to reimburse that the management were shocked. Why? Because that's when God prepares a person for a blessing. When you see somebody doing that watch their life. It's in a matter of short time and they begin to prosper.


So, thank you so much for having me over and for coming to this remote room. I'm really happy to be able to share something and hopefully teach you something here as well. My name is Maje and I work as a data scientist at Trainforest, where we do, where we use lots of crowdsourcing to make our product work. And before we start, I'm just really interested to have any of you to use something like mechanical tech or cross-flower or something like this to get data to people. And then I would like to share like what you did, some kind of problems you had with it. We used it to basically go through transcripts of interviews with people who are done with people regarding disease outbreaks. We used it to tag certain keywords in there. Okay. And was it like, did you get good results? We had a ton of people use it and the results we got were spectacular, but we didn't have a big sample set. So, the biggest problem for us is it's kind of related to that. It's kind of difficult to have reliable quality when you're asking people to do something. So, there are different ways of doing crowdsourcing, the one we use because it's mechanical tech. We pay people some pennies for every small task we do. And there is a bunch of trade-offs and things you have to think about when you do this. So, there are a few parts to the stock. I will tell you about the kind of data that we gather, that we have, the way we model it and how we use it to improve our product. And there's a little bit of technical stuff about machine learning that we did. But the part that we all realized recently is that we're missing quite a bit of empathy for our testers, for people who work for us and how important it is by the end of the day. So, the first part is the data. And I have to tell you a little bit about what Rainforest does. I promise not to sell you too much on that. But basically, we provide QA as a service. So, if someone has a company and they're building up a QA team, we try to replace the QA team so to make sure that people can just use our service instead of building a team. And we use humans to basically find problems and, well, applications. So, the way, what the customer does when they want to test the application, they just write tests in English. So, they say, okay, the testers should go to the CRL, do something, and then they ask a question. Is the page okay? Does the logo show up in their place and so on? So, that's an example of one test. There's just one single step. It says, go to the CRL, look at the page. Does the image look okay? And then the corresponding thing that workers on the micro tasks do. They have the instructions, they read them, and they answer the question by following the instructions in the terminal. So, you can see below the terminal, the right browser version and allows the mechanical tech or crowd flower workers to follow the instructions and check whether the website actually works. So, what kind of problems might, there might be that. First of all, testers might not be able to understand the instructions. They're not all native English speakers. Not all the tests are written clearly. So, that's something we have to overcome. Even if they understand the question, they might not know what to do in a specific scenario. There's lots of ambiguities, like, is this a bug? How precise someone is supposed to be, and so on. And finally, even if they do understand everything, they might still, because we're paying them for it, they might still want to just cheat and click, yes, yes, yes, everything is fine as fast as possible, just a bit of money. So, that's also something we have to think about. And what kind of solutions we can use to deal with these things. There's first of all training, to make sure people know what to do. We can set up incentives greatly. We can track people that have been with us for a while and have high reputation. We can trust them more than others. We can have multiple people do the same thing to get some redundancy. And finally, the technical focus of this talk is this idea based on the paper from 2011, where they figured out whether people were actually doing what they were supposed to do or not by looking at input patterns, by gathering data and training a classifier. And this is also what we have done. So, the way we capture the data is using a virtual machine, the terminal that you've seen in the virtual machine, everything that happens there is recorded. So, the mouse moves and keyboard inputs and network requests between the browsers. And this is how it looks like if you also capture screenshots. So, if you see, if a tester sees a login page and they click on username and password and paste things in, we capture that and we know what they did. So, knowing that, we have these... Our data is basically a collection of things, a feature vector describing the work people did and a label saying, this is good work or this is lazy work that we should not take into account. Feel free to shout out if you want to sort of creatively think up features that we can create from that. So, what we have is all these mouse movements that you've seen and what people clicked and we need to turn it into a string of numbers feature vector. So, feel free to shout out, but I can also show you what we've actually done. If it was a count number of clicks, try to get the speed and the acceleration of the mouse cursor, number of keys, the presence of specific combinations of keys like copy and paste, for example. You can try to look for keywords in the test instructions. So, for example, if you click, there should probably be at least one click detected and so on and so on. It's kind of fun to experiment with the things and try to think up new combinations of different things that might be informative and then using Python and the scikit-learn package, which is pretty awesome and makes it really easy to look at things like feature importance and iterate on your pipeline. So, the second part is labeling the data. We capture everything, but we don't know out of the box whether a given piece of work is good or not, and that needs hand labeling. So, what we do is we send a weekly email to developers with a few links asking them to tell us, like, okay, is this good work or is this bad work? And the interesting part there is how to select which data to label. We have some tens of or hundreds of thousands of data points every week and only 20 developers and asking them to do even 10 label links per week is already stretching. So, we can only sort of have information about the tiny fraction of our data. So, at first we just had a completely random selection of things to label. Then once we got enough data to train a first version of a classifier and we verified that it was working well enough, we split it in half and 50% was the random and the other 50% we sort of chose the worst offenders. The most lazy work we would find to check whether the classifier was working correctly or not. But now we're actually moving back to random because there are actually two purposes for labeling. One of them is improving the performance of a classifier and gathering data and that's when it's good to have some kind of bias. But there's also another purpose which is to evaluate health of your system overall. So, to see whether some changes to do are having good effect or not. And to do that you need to have sort of a representative sample and having a bias there like we used to have is really bad. It doesn't really allow us to say anything informative. There's also just a small part I want to mention. It gets pretty technical but if you're doing a classification and your data set is unbalanced which means that you have many more samples from one class than the other class, you might find problems. There are different algorithms that deal differently with this kind of scenarios and there are methods for balancing your data set. You can throw out some data or you can come up with new data depending on... and there are different trade-offs. But first of all always try being able to say how much it's going to try, it works and just make sure you have good metrics. So we used to do data balancing because the majority of the work in our system is actually good and only a small proportion is bad. But we discovered we don't actually need to explicitly balance the data and it's fine as long as you can prove that your classification is good enough. I'm not going to explain something and super something in too much detail. So moving on to the model. It's a one-on-first. If some of you are familiar with machinery and algorithms in general, one-on-first are really popular. They're really sort of easy to use and easy to understand. And we use them for binary classification with the features that I have shown you before. The remaining part is how to... a model-on-first can give you a classification. Basically in our case it's a class. So it's either a 1 or a 0. But it can also give you a probability. So we use the probability and a count to be able to adjust the threshold to kind of the risk level that we are comfortable with. And finally, a while ago I did this exploration and I had my Jupyter notebook with all the code running and I thought, okay, great. I solved the problem. And then some people I worked with said, okay, sure, that looks good. Let's use it for something. And then I was like, okay. So how do I actually put it into production? So what we needed is something like this. We wanted to have some web servers that are sitting on a server and communicates with our application. We see a bunch of JSON, does the magical classification, and returns a bunch of JSON back to say this is good work or it's the better work. Of course the application also has some database behind it. And this is all you need once you have your model trained. So once you do your analysis, you train your model and you save it somewhere and your prediction service can use it. If you want to train your model, you probably will do something like this because otherwise you need to send lots of data through your application to the service. But this is generally a good idea because now you have two different things talking to the same database and if you end up changing the schema of the database you need to adjust two things at the same time. So that's generally not a good idea. There are other ways around it and every time you have to consider the trade-offs. In our case we don't need to do the retraining too often, like once a week, once a month, it's fine. So we can just do it hopefully in a manageable way. So we access the data, or either download the data on a local machine or something like this, do the training, verify it and then actually use it.  The most important one for us was to be able to debug when something was wrong because machine learning is a slightly different way of operating than regular software development. There was a really interesting paper from Google that had a title like Machine Learning, the High Interest Credit Card of Technical Data. There are lots of pitfalls when you sort of create this magical black box that does specification for you and you don't really know what's going on inside. So if you are using something like Machine Learning Production you need to take care of saving enough information together with it to be able to not only re-instantiate your objects but also re-create them. And I will talk about that in a second, but the rest of the application is pretty simple.  That's all there is to it. The interesting part is how to load a train model into memory to be able to use it. Are people familiar with Python here?  This is a pickle. There is a Python module called pickle that allows you to take objects you have in Python and serialize it down to a file. That's where you can save it for later and read it back. But there are problems with it. First of all, depending on what you are serializing, there are different packages. For example, JobLip is a package that is bundled with Scikit-learn. That's more efficient. It's serializing now by rates. So that's great for Scikit-learn estimators. But there are also other situations. So three years ago at Python, there was an interesting talk about why you should never use Python. And I encourage you to watch it if you're interested. But the main problems are that you are making a bunch of non-explicit assumptions. When you're serializing something, you implicitly depend on versions of your packages. And unless you take extra care, you will run into problems in the future. And also it's really insecure. So if you try to deserialize a file that someone gives you, that basically repeats to remote code execution. So only deserialize objects that you really sure are safe. And if you look at the documentation of Scikit-learn, all these kind of things are mentioned there. And we wanted to do basically for the good practices. So we have created a small Python package called Testimator. It's open source. It wraps your Scikit-learn estimator in class together with a bunch of metadata that you give it. And then you can serialize it. It doesn't do anything to help you with security. But it makes it slightly easier to bundle and ship trained machine learning models. So it has some limitations. As far as I know, the only people using it. So if there's something you would like the estimator to have, that would make it useful for you. Let me know. I'm happy to improve it. But finally, the other part of the talk is about actually considering whether technical solutions are suitable for what you want to do. So because we deal with humans, we need to understand what they do and why. And if you ever need to do some work on mechanical tech, make sure you spend some time as a worker yourself. At least a day or an hour a week for a period of time. Going through the tasks and just completing small things to get to know the system and really see how workers behave and why. And also give people ways to talk to you. This is pretty obvious now in retrospect, but we used to treat our workers as kind of... We have our customers, we're banners, and our testers were just the nuisance that we had to use and kind of catch the bad criminals. But that's not the right way to think about it. We really have to understand them and talk to them and listen and ask them questions. And there's one more thing, a short story I wanted to tell you. This is my dog, and I got her a few months ago. She's a project colleague called Whiskey. And when I got her, the project colleagues agreed because they released my dogs. But if they get bored, they won't get distracted or they need something to talk to by their mind. So when I got her, I started watching YouTube videos on how to train your dogs. And it's really fun, I can really recommend doing that. But one thing that really stuck for me is this really cheesy notion of setting them up for success. So if you have a small dog and, for example, you want to teach them to sort of count to you when you call them, you cannot start by putting your 20 meters away and then just trying to get them to come over and understand.  And you do it over and over again, and then you take a step back, and then you do this again. And then you gradually increase the distance. And at every point, it's really obvious for the dog what to do, and the step to the next level is kind of manageable. If you give them, if you want them to jump from 0 to 1, immediately they won't get it. And I don't mean to imply that training dogs is the same as teaching people, but I think some of the same principles apply. And I know that when I'm learning something, it's obviously much easier to learn things in small gradual improvements rather than get the whole concept at once. So, ah, and this is Whiskey. Recently she learned to successfully tear up my backstations. But yeah, the same thing applies to your crowdsourcing. Make sure you train people progressively and give them an easy path to do the right thing. And this is basically it. So we have some, like, the whole approach that we took has some limitations. Our data capture is not always reliable. So if we miss some clicks, which happens, we get wrong classification. So that's also something we have to take into account. And it requires lots of labeling effort. So there are some smarter things we could do like there's this thing called active learning that looks at the unlabeled data and tries to select the point that if you label them, their classification should improve. We could also do something more meta to try to get workers to verify how their workers work. But it also comes with a bunch of programs that we haven't yet found solutions for. And the main takeaway, so, like, to impress upon you today is that festivals seriously evaluate whether your technical solution is the right thing to do at the time. So we're pretty happy with where we are now. But if we started thinking about empathy before we implemented all this, we have probably gotten to where we are faster. And we will be happier. Also make sure you respect your community and people you work with.  So make sure you understand their perspective. And at the end of the day, machine learning is still useful and it's a really cool thing to do. But it's not always in every situation the biggest bang for the buck. And with that, thank you very much. So I'm just imagining that when you started this, you had some, at some point somebody proposed a hypothesis that machine learning could help you evaluate the quality of the product. How long can it take you in your company in this effort to decide whether it was actually useful or not? And what were the criteria to actually say, you know what, this actually is going so marvellous, but more time and investment into it? So there wasn't really a formal process. We're still a fairly small company and when I joined as the first data scientist, there were, I think, ten of us. And I had this idea and people said, yeah, sure, sounds good. We trust you, go and do it. And that was basically it. We were just maybe a week or two in exploring it and plotting the data and trying to figure out whether there is something we can find and whether the features that we could think of can we look at a data point and at the features that we can compute and as humans, can we figure out whether it's a good work or not? And it wasn't very disciplined, it was kind of qualitative, but that was the process that we went through. And gathering feedback on lost movements, keystrokes, did you consider listening to the microphone with their permission? No, we haven't. So first of all, we do have the permission and they are people who work for us and we tell them what it involves. We didn't consider a microphone, why would that be useful?  Right. That's what we call it, the kind of information interaction. So I think it would be a little bit challenging at the moment, but no, we could probably make it work. It might be something we should think of. So we do that for each task that we have. We select at least three people to do the same thing and then we look for consensus. There are some problems there because even if you, first of all, different people might get different results even if they're all doing exactly the same thing. Even if they're supposed to be using, they're testing the same service. Sometimes there is like a random mark that occurs for one person and not the other. So we look for consensus, but we cannot really use... So someone's work is projected because it doesn't agree with majority. We cannot really use it to penalize them because it would be unfair. We are thinking of doing some more smarter ways to sort of look not only at consensus and results, but also at consensus and how they go about completing the tests, which we're not doing it. So that would be kind of interesting. Yeah, I think it's still kind of an active area of development for us that would be interesting to see. Thank you so much.


We talked about gain-sharing. We talked about some future projects. What are your big priorities going forward in terms of specifically your infrastructure? We're at VMworld, it's an infrastructure show. It is. We're putting in the storage and the computing power in 2012 that will allow us to put real-time portal generation out there for our providers around the world, our members around the world, to put auto adjudication. A piece of business, the perfect example would be one of our travelers is walking the Great Wall of China backpacking along Falls, breaks their leg. They're going to be able to take out their smartphone when they get to the ER or the doctor, pull up the QR code from their online ID card. Our provider will be able to scan it with his iPad and confirm eligibility right there, do the service, submit the claim, watch the claim model educate in our system, and then watch it get approved for payment. So we're here with George Reid, CIO of Seven Corners, a very interesting insurance company. We're talking about basically the realities of cloud, which to you are really involved in infrastructure refresh. You saved a lot of money. You're actually making money on this because you were losing so much money with all that downtime and then you're reinvesting that in the business. My last question for you is, as you look out, your priorities for the next 18 to 24 months for your organization, what's your vision, what are your main goals? Well, one of the goals we have are is to continue to stay, you know, you look at infrastructure as a pyramid. The bottom two layers always have to be ready for the next two or three stages of big growth. I mean, we met with nice people from GoDaddy and heard their story of going from 50 terabytes to 25 petabytes. Yeah, if you don't plan it, you're not going to, you're not going to span that gap when it pops up. And then continuing to build infrastructure and applications that sit on it that allow my very entrepreneurial owners to just keep finding new ways to do insurance things that no one else wants to take a chance on. So using IT as a competitive advantage is clearly what you guys are doing. George Reid, thanks very much for coming inside the Cube. Hey, glad to be here. It was great to have you. Good story. Okay, we'll be right back.


Hi everyone, I'm Eric Ogier from Red Hat and together with Iliou from Intel, we are going to talk about the new IOMMU-FD user API and the adaptation of the QMU VFI device on top of it. We will start by looking at a subset of the VFIU API, which depends and relates to the IOMMU subsystem. Then we will talk about attempts we made to extend this API to support new features such as nested and virtual SVA. With this background, you should better understand how we came to the design of a new user API. We will present IOMMU-FD, introduce the kernel skeleton RFC that implements it and the few VFIU kernel patches added on top of it. Then we will address the QMU integration, what challenges it brings to adapt the QMU VFIU device on top of it. Then I will handover to you, we will talk about nested and virtual SVA support on top of IOMMU-FD and eventually we will give some prospects and draw some conclusions. The VFIU API allows users space to have direct access to OSDMA-capable devices. VFIU guarantees the assigned devices put in a protected context so that the user-initiated DMAs are prevented from doing any harm to the rest of the system. This relies on the strong assumptions that a physical IOMMU protects the actual device. The API is group-centric. The group is an IOMMU thingy. It is a minimal isolation granularity for the IOMMU. Devices that cannot be isolated from each other belong to the same group while others belong to different groups. Associations between devices and groups can be discovered through this FS. Once a device is bound to the VFIU driver, a so-called VFIU group is created. This matches the IOMMU topology. If all the devices belonging to that group are bound to the VFIU driver or stop driver, the group is considered as viable and can be attached to the so-called VFIU container. This container embodies the IOMU address space shared by all the groups attached to it. Only once the group is attached to the container, user space can get an FD to the VFIU device and program it. Now, since 2017, we have been trying to extend this API to support new features such as hardware-nested paging and PESID. A set of new IOCTLs were proposed to handle PESID allocation such as guest page table binding, cache invalidation, fault handling, PESID allocation. First, we work on the definition of an IOMMU user API and we ended up tunneling this user API through the VFIU user API. This was contributed by Intel, Inaro, and Red Hat. The most difficult part was PESID support, actually. However, by this time, VDPA also needed to consume PESIDs. So different pass-through frameworks started to have the same needs and duplicate the same logic. First, a centralized driver was created to manage PESIDs, which was called slash def slash IO acid, and then eventually discussions added towards putting also the IO patch table management in the same driver instead of in a separate place. On top of that, the FIU IOMMU type 1 implementation has become bigger and bigger with the addition of new features and this was not really scalable anymore. So devising a new driver may also give you opportunity to alleviate the maintenance burden but also overcome some known shortcomings such as a duplicated log page accounting across containers and also bad virtual IOMMU performance with nested. So eventually, despite the efforts consumed on the VFIU integration and the fact that some parts were already upstream at kernel level, I'm thinking about the IOMMU user API, for instance. At the beginning of 2021, we stopped the developments around this VFIU integration and started discussions around a new user API for managing IO address spaces pointing to user memory. This new API is named IOMMUFD. It is separate from VFIU so that other drivers like VDPA can use it. After a long discussion threads and two spec proposals, LSE were sent on the main list. The first one from Intel and then new ones from JSONGIRNTOP on March this year and a few days before this presentation actually. In the rest of the presentation, we are going to focus on JSON's RFC and its integration in QMU. It is also worth to mention that plenty of work has been done at kernel level to prepare the introduction, to prepare the transition towards IOMMUFD. I'm typically thinking about DMA ownership rework at the IOMMU subsystem level. JSON's RFC proposes a new slash def slash IOMMU char device. The associated file descriptor is called IOMMUFD. This is a container holding for multiple IO address spaces. Those are called IOS. They are managed through FD operations. An IOS represents a mapping between a set of IO virtual addresses onto a set of physical pages backing user memory. It can be shared between multiple subsystems like VDF, IO, and VDPM. Devices attached to IO address spaces. And this attachment is backed by a so-called hardware PT, hardware patch table, which acts as a wrapper onto the IOMMU domain. The current skeleton introduces or is involved in infrastructure to manage the life cycle of those objects. So IOS, device, hardware PT, infrastructure to store IOVAs, physical pages, their pinning, mapping between those, and also currently a few IOCTS are exposed. So typically to allocate free IOS's, which returns IOS IDs, map and map IOVAs, and copy mapping from one IOS to the other. On top of that, a kernel API is also provided for external drivers like VFI or PCI to bind and bind devices to an IOMMUFD. This returns a device ID and claim DMA ownership. This means a successful binding puts the IOMMUFD group into a security context, which isolates the DMA from the rest of the system. So in this skeleton, group isolation is enforced implicitly. Also, an API is provided to attach a device to an IOS through an hardware PT. Currently, an hardware PT is automatically created with an empty IO page table to match the VFI or block DMA state semantics. Also an IO, an hardware PT ID is returned. The current RFC does not expose any IOCTS able to manipulate it. However, the second part of this presentation will explain what it is used for. On top of JSON's IOMMUFD skeleton, some additional patches were needed to allow VFI or device to cooperate with the IOMMUFD subsystem. So you contributed those. First, once bound to the VFI or driver, a device node now appears in CCFS and you can open it without going through the legacy container group API described earlier. Then also two new IOCTS were introduced to allow the binding of the device to a given IOMMUFD and the attachment of the device to an IOS within this IOMMUFD. So actually those patches weren't officially submitted to the mailing list, but they are available since the first RFC submission on this branch and other branch provided by JSON. Now let's cover the adaptation of the existing QMUVFI device on top of this new IOMMUFD user API. As IOMMUFD may not be a superset of VFI or IOMMU type one, both the legacy and the new implementation may need to coexist. The assumption is that new functionalities will be implemented only on top of IOMMUFD. The goal was to port most of the existing code on top of the new API. One of the first things we did was to split the code into parts that are IOMMU agnostic and parts which are IOMMU specific. This mostly relates to command.c file. In the IOMMU agnostic part, you will find all the code related to region, interrupt management. This is a code that applies to the actual device. In the IOMMU related code, we try to isolate code that looks generic related to VFI or the way space, memory listeners from lower level code that manipulates the user API. One challenge is VFI is a group-centric API whereas IOMMUFD is device-centric. Conceptually, the VFI container matches to the IOMMUFD-IOS tuple. Devices sharing the same tables are attached to the same IOS within the same IOMMUFD. We turned the VFI container into a base class derived into two implementations. So we needed to devise a class interface. The implementation of those interface is supposed to fully hide the API-specific objects such as the containers, the groups, the IOS and so on. At the moment, we have defined those two interfaces. You can see them on the left. This is likely to be extended and refined because we are currently missing some kernel pieces to implement some functionalities like reset or migration. For the user to be able to select one given backend, so the legacy one or the new IOMMUFD one, a new IOMMUFD object was introduced. To use a new backend, you instantiate such object referred to by a unique ID. And when you instantiate your VFI OPCI device, you reference this IOMMUFD ID. If you want to use a legacy backend, you still use the old common style. Not that management tools also have the possibility to open the IOMMUFD beforehand and pass the FD to the IOMMUFD object. While we have tested the legacy backend against non-regulations, the new IOMMUFD backend is not yet fully on par with the legacy one. As I explained earlier, we missed some kernel features to support peer-to-peer or reset migration and so on. It's still unclear anyway whether we will have full compatibility between the FIOMMU type one and IOMMUFD implementation. This is still to be discussed. The QMU integration at this stage is in the IFC state and we have not received much comments. So besides the suggestions, I would say to use a separate IOMMUFD to select the backend. So we are definitely waiting for your feedbacks. And now I am handing over to you for the second part of the presentation dedicated to new use case support. Yes, thanks Eric. I'm going to talk about the new use cases. Actually, this is teamwork by Nikoling Chen from NVIDIA, Eric from Red Hat, Lu Ba Lu and me from Intel. First, I'd like to do a recap on the next translation. It is a feature implemented by hardware IOMU and mainly used by hardware-assisted virtual IOMU. It enables GIOVA and VSVA. Most platform vendors like Intel, ARM and AMD have already supported it. The next translation has two stage presentations. The result of the first stage presentation is subject to the second stage presentation to get access to the final physical page. Platform vendors have slight differences in the next support. For example, the translation structure hierarchy is different between Intel VTD and ARM SMU. Intel VTD hardware uses the guest stage 1 page table directly and the next translation. While ARM SMU uses the guest stage 1 page table by using the guest context descriptor table, which is also known as pasted table. So, under the next translation, PMU needs to associate the stage 1 and the stage 2 page table to be nested. In IOMFD, each page table has a hardware-page table object to represent them. Together with the IOS mentioned by Eric, PMU needs to manipulate hardware-page tables and IOS. Here, I'd like to explain how QMU manipulates them by an example. In the example, the GPA IOS stores guest visual address to host visual address mappings. It is attached to device A and auto-HWPT is created. It stores the mappings from GPA IOS. Device B is attached to S2-HWPT and it is allocated by QMU. It stores the mappings from GPA IOS as well. For device C, it is attached to S1-HWPT, which is the next thing on the S2-HWPT. This enables the next translation in IOMU hardware for device C. In long-term, we may get rid of the attached IOS and only use attached HWPT. Then, we will not have auto-HWPT but for now, we want to keep aligned with existing VFR container. Auto-HWPT is still in use. After understanding how QMU manipulates the page tables for the next translation, let's have a look on the software architecture for the next translation. First, IOMU driver needs to support the next type of domains and for ARM, SMU even needed to handle the MSI doorbell properly under the next translation. As the MSIs are translated by both virtual SMU and the next user. IOMU FD under device driver like VFIO needs to provide the UAPIs for users base to set up and destroy next translation. With such kernel SM, QMU enables next translation by steps first acquiring the IOMU capability then allocate stage one and stage two HWPT table for the guest virtual IOMU's configuration for the device and the last attaching the device with the allocated HWPT table by device user interface. As in the previous slides Intel, VTD and ARM SMU has different nest support. So the stage one HWPT table on Intel VTD represents the guest IOMU tables while for ARM SMU it pointers to the guest passenger table namely the context description table. For next translation Nikoling Cheng from NVIDIA Eric and I have done a POC it's functional but not fully cleaned up yet. In the POC, stage one related IOMU operation is re-sealed by virtual IOMU like allocating stage one HWPT table in the framework part IOMU FD device is introduced to represent a device on the virtual IOMU site. It provides code backs like HWPT to support the attaching device to specific hardware table. Different device framework may have their own implementation for the code backs and long term we wish to move all the IOMU related code out of the device specific folders as most of the logic may be shared such as the memory listener address space and 30 page tracking called in the current device password framework. Now we have enabled the next translation but we only enabled the GIOVA usage. So let's go to talk about enable VSVA in the latest IOMU FD framework. VSVA is not a new thing. There are several related topics in recent cover forms. Besides next translation VSVA also requires IOMU folder reporting and passive support. In VSVA the stage one table is the guest CPU page table which translates guest virtual address to guest physical address and this is also why IOMU folder reporting is required for VSVA and the IOMU fold includes recoverable fold and another recoverable fold the recoverable fold is also known as PCI page request which is part of PCI address translation service. The IOMU fold reporting is generic across platform wonders. However the passive support is different due to hardware differences. For example Intel WTD the guest passive table needs to be scheduled to host the passive table under the next translation. This means guest passive support requires hypervisor interception but for ARM SMU the guest passive table is used by hardware directly so the guest passive support does not need hypervisor interception. IOMU fold reporting is based on the kernel IOMU fold reporting framework. Lu Baolu from Intel is moving the fold reporting to be per IOMU domain. Accordingly IOMU call also registers fold handler for the hardware page tables as the hardware page table is wrapper of full IOMU domain. The fold handler is responsible to report the fold to IOMU and also store the folder data in the ring buffer. The report is done by eventFD. IOMU sets the eventFD to the kernel in the Stage 1 hardware page table allocation. Along with the Stage 1 hardware page table allocation foldFD is also returned to QMU. So that QMU can get the data from this foldFD. After getting the fold data QMU IOMU emulation code will inject the fold to the virtual machine per vendor spec. If the fold is recover fold QMU will send a response back to hardware after guest serves the fold. We still have open on the pass it a support especially for the pass it a virtualization. However this slide wants to point out the necessary changes for it. IOMU FD will need to provide UAPI for host pass it a location and the map to host the pass it. In the IOMU FD core it needs to provide kernel API for pass it attachment and also API to query, guest pass it and host the pass it. In the device driver side for example VFIO needs to extend the attach HWPT UAPI to support the pass it. Last but not least KVM needs to provide UAPI for updating the VMX, VMCS pass it translation table. This is required for Intel in-Q-commander support. QMU both Intel VTD and ARM SMU emulation code is going to be updated to support the MFOTOR handling and pass it a capability for VSVA and Intel virtual MU further requires pass it communication with the device module and there are some conclusions for this presentation first IMFD is a major redesign there are significant rework at both kernel and user space level IMFD spec is still unstable especially for new features like pass it the feasibility of VFIO M1 type 1 the application is not guaranteed at this point and there are lots of kernel dependencies for QMU integration like clean-ups, VFIO IMU code reshuffles most of them are not merged yet Nikonichun, Lubalu, Eric and I are working on prototyping nested and VSVA on Intel and ARM discussions needed to happen to integrate other vendors like AMD other VFIO IMU backend such as VFIO IMU SPAPR TCE needs to be addressed at some point in future other new features like page request for VFIO IMU type 1 blocked waiting for IMU FD there are some references for people who want to know more about this project like there is some main list FD series to IMFD and also to informative stress for the IMFD UAPI discussion also some patch series post IMFD discussion like the first IMFD RFC from me the IMU FD generic interface RFC from Jason Gansoper and IMU FD adoption from Eric and me also wanted to clarify that the GitHub branch is pasted here are based on IMFD generic interface RFC V1 we are in progress to rebase everything on top of V2 there are also some related talks at various conferences in recent years which may be helpful as well in the last thank you for your attention on this presentation if you have any questions please feel free to let Eric and me know thanks


Jim Saunders here today as Fandall, hurry up. Getting you set for the Saturday only NFL DFS slate by breaking down a stud, a mid-range play and a value over on Fandall. The stud for me is Jamar Chase, checking in at $8,200 for the Cincinnati Bengals, facing off with the Las Vegas Raiders. The Las Vegas secondary is still not one we need to fear all that much, which sets up well, not only for Jamar Chase, but also for Joe Burrow and T. Higgins. I think Higgins is a fair value at $6,900, but Jamar Chase leads the team in overall targets, deep targets, and red zone targets since Higgins return to the team all the way back in week number five. We saw Jamar Chase's upside. Higgins has it upside too, but I forgot the salary I wanna get to chase. Again, Higgins, a great play too, but Jamar Chase a top stud for the Saturday only slate. My favorite mid-range play for the Saturday only slate is Devin Singletary, checking in at $6,900 for the Buffalo Bills, because we've seen five games now with Singletary being the lead back for Buffalo. He's at 97 yards from scrimmage per game across that span. We've all seen the red zone roll expand for Devin Singletary. The two concerns with him previously were yardage upside and touchdown upside, and both those things have been eliminated recently with Singletary scoring twice in two consecutive games. He's got the role we want. He's on a team that is currently a four point favorite versus an England Patriots. Devin Singletary checks every box. If he want a mid-range play that stands out for Saturday, Devin Singletary is your guy. Value plays a pretty tough for the Saturday only slate, but I do think that Zay Jones grades out well at $5,300. We saw Darren Waller come back on Sunday. In that game, Darren Waller was involved getting a lot of targets, but Zay Jones still had eight himself in that game. So Zay Jones established himself as a top outside wide receiver for Las Vegas while Waller was out and stayed in that role when Waller returned. In the games Waller has played since the Henry Ruggs release, Zay Jones still has 31% of the team's deep targets for the Raiders. They're facing the Bengals. The Bengals don't give up a lot of deep work to outside wide receivers, but Jones' salary is forgiving at $5,300. So I think he grades that well in a spot where the Raiders may need to throw to keep pace. That's all we got here for today, talking about this Saturday only slate, but still a lot of wildcard week and coming up later on throughout this week here on the Fandall Hurry Up.


the truck here says poor quality dm called it into the shop back home and they said get over to the dealership right now hope that they can just fix it real quick we're hoping it's just a code that they got a clear sensor they need to replace or something there of the engine will derate apparently which means it'll take away my power and I'm going to need a tow and nobody wants to tow all I guess the tow truck guys would be happy but you know back home the shop who's got to pay for the tow they would not be very happy with me got a lot of military trucks over there that they're servicing I guess let's go inside talk to the good people so poor quality DEF could mean a whole bunch of things it could just be a sensor that's malfunctioning it needs to be replaced it could be that the DEF itself is actually poor quality could be that it froze at one point or got diluted with some water that seeped into their tank which would mean that Irving has quite a big problem on their hands because that's where I bought my DEF so I'm pretty sure if that's the problem that our shop back home is going to be calling Irving for a little bit of compensation for selling garbage DEF but I'm sure that that's I'm sure it's just a sensor otherwise every other truck that filled up there would have the same problem and this whole place here would be packed with trucks with poor quality DEF sensors going off get a mask in here I'm all along hope it's a quick fix I really do so they got me hooked up to their laptop over there they're trying to figure out what's going on poor DEF quality I can stay in the truck here with diesel but I got to wear my muzzle I think they all just took a little break hopefully it's just a sensor or just a code that they can turn off in their system there or something or maybe it is actually poor quality DEF like I said I don't know I tend to always think that it's probably something electrical the emission systems on these trucks there's too much technology jammed into them so it's most likely a sensor of some sort or just a code that they can erase I don't know that's why I'm here because I don't know they're trying to figure it out they got me hooked up to all the computers and stuff they'll they know what they're doing but hey look for military truck over there that's pretty cool obviously from Gagetown the base right close by here I've got no good news I've got bad news so it needs a new DEF quality sensor and there are no quality sensors left in Canada apparently they're sold out everywhere so they have to order one from the US somewhere and ship it in and it won't be here until Monday so it looks like we're being shut down I don't know what's gonna happen they're gonna guess put me up in a motel right now they're just desperately scrambling trying to find the part on our shop from their end but I mean I don't know if they have any sources that Peterbilt doesn't have out here but it looks like we're gonna have to wait until Monday and then they'll fix it on Monday and get going in the afternoon I'm guessing but I mean the silver lining to this is that it's not my bill and they'll have to put me up in a motel this is exactly why I don't own my truck anymore there's way too many things that can go wrong see what happens well we're checking into a motel hey that rhymed can't do nothing until Monday so I'm being set up in a motel close by and we'll be waiting waiting hmm all for a sensor you know I know all too well how frustrating this can be like if you own your truck because I went through this with the Volvo you guys remember that right it was in January we did this in BC and Langley remember that my bills like six grand this bill won't be $6,000 I don't think the part itself I think is $350 and the labor I don't even know I don't even know but technology man technology and now I'm going to be late and I don't know if I'm gonna get home in time for Brits girls weekend I don't know what we're gonna do by the looks of it now I'll probably be home Saturday instead of Wednesday and she'll already be gone on Friday I think so she might have to miss part of her weekend I'm gonna feel terrible if that's what it comes down to there's nothing I can do about it I mean stuff happens so let's get all our stuff together here and we can get going to the motel how's this thing oh I get it then it doesn't open okay cool let me introduce you to my kingdom for the next three days not bad hey check it out check it out we got the weasel in here king-size bed the TV there got some dog food for me there ordered a pizza for him oh wait that's backwards I get the pizza you get the dog food well we'll figure it out later we'll figure it out later couch it's actually like a really cheap room this is like one of the cheaper ones in Frederickton I was expecting like a little dingy little motel I show up here they bring like I come up to the room I open it up oh I'm a Kang look at this diesel very fancy hey very fancy and I was showing this room to Brit before when I checked in it's her light in here probably not you're just gonna have to trust me if you can't see it iron and an ironing board just in case I get bored they think of everything I tell you what diesel look at that and check out this bathroom look at this full walk-in shower and a fancy mirror look it's like glowing from the back that's cool I showed that to Brit we want to do this in our house when we build it that's that's fancy that is fancy wow what do you think so yeah I'm going to be camped out in here until the truck is ready is that where you're gonna sleep it's okay you can sleep in there if you want I don't care don't look guilty I just ordered a pizza I told you that already right I'm excited Boston pizza it's my favorite I got a pepperoni bacon mushroom with fresh feta that I put on after it comes out of the oven so good I'm so excited so excited so this is gonna slow me down quite a bit I still got to deliver my load down to Georgia as soon as I get going from here and then head back home and this is likely going to cut into Brits girls weekend which I feel terrible about that's the worst part all this I feel bad because she's been looking forward to she's really been looking forward to spending this time with her sister and her mom so I mean we were talking about it maybe they'll be okay with just doing the girls night at our house cuz you know the dogs can't be left alone and I'll be back maybe midway through the weekend and then they can head off and I'll take take over watching the dogs from there hopefully we can work out something with them that they can still spend the weekend together I mean she's she's really been looking forward to it I know everything would have worked out just perfectly everything would have worked out just perfectly we had everything lined up all the ducks were in a row and then one of those little ducks decided to go in a little rabbit trail over here and here we are in a motel room in New Brunswick but I'm glad I stopped and got it checked out because if I hadn't the truck would have gone into derate and would have pretty much shut me down in the middle of nowhere and then I would have had to go through all the stress of you know finding a tow truck even though I don't pay for it it's still stressful sitting there on the side of the road broken down getting a tow it's an extra expense for the company they're not happy then I'm not happy who knows where I'd end up at least now look at this I got this fancy place to stay in for for a while and and I got pizza coming so it's not all bad it's not all bad it is what it is nothing we can do about it trucks break down especially new trucks that have all these emission things on them isn't it great saving the planet one breakdown at a time it's here diesel it's here this big piece of fed-on here wow that's delicious that is really good so that's not just for tonight that's got to last me for tomorrow too this is going to be a long wait I don't know what kind of video we're gonna make tomorrow I'm gonna figure something out but I already drank all the coffee that they have here I ate some of the pizza I saved a lot of it for tomorrow and playing games on my computer here watching TV I think it's like oh it's almost two in the morning here now I guess I'm gonna have to get ready for bed soon at least I'm not as stressed out as I was last time remember when we were in Langley like I mentioned before that was a stressful time this this is more of just like an inconvenience a big inconvenience release a little bit more comfortable this is a really nice room trucking you know this happens all because of a sensor an emission sensor or DEF quality sensor he said it's a $350 part I told you that already too right I can't remember what I've talked about already today's vlog has it started off great and then it sort of went as soon as the sensor started giving me trouble and here we are I don't know what else to tell you I think as long as the weather is all right tomorrow we're gonna go explore a little bit go for a walk go see what's around the area here I don't want to stay cooped up in this little room I mean it's nice but I need to get out there and move and it's not supposed to be too cold tomorrow but it's not supposed to be too warm either I think it's gonna be around like three Celsius which is probably like 36 or something Fahrenheit oh there it is there it is it's finally setting in I think I better get ready for bed so I spent a lot of the day just communicating back and forth with our shop and with dispatch back home letting everybody know what's going on keeping everybody in the loop and this vlog turned out to be a little shorter than I wanted it to be but I was a busy guy and I don't know what we're gonna vlog about tomorrow but you have to tune in and find out I mean we'll find something to do I can't sit still for too long we'll go out and take an adventure or something I do want to say though that I know that there's a lot of you who view my videos in this area and you guys are all super friendly I really do appreciate all the offers to buy me coffee and buy me supper and lunch and everything and I know now that I'm stuck here in Fredrickton that a lot of you may want to you know meet up for coffee and any other time I'd be glad to it would have been really fun but seeing as the the whole sickness the pandemic going around the world I think it's probably best that I just you know isolate by myself as much as possible while I'm here I know that's the request of the government and our company and everything too that as I'm on the road that I sort of just stick to myself and as a truck driver that's not really a big thing to ask I'm used to it anyways but you know they have requested that I sort of just bunker down for a little bit while I'm here and you know because I go all over the place I'm going to Georgia after this I just came from British Columbia on the west coast went to Nova Scotia and clear across the country I'm feeling fine I know I don't got nothing but you know times we're living in I should probably just stay on my own while I'm here so while I do really appreciate all of your kind gestures and offers I'm gonna have to politely turn them down this time while I'm here and just sort of hang out here by myself this weekend will go by quickly and I know I'm surrounded by really really nice people here but I'll be fine you know isolation doesn't really scare me it's sort of my life that's what I do and I got the weasel here too so I'm not totally alone we are gonna go on a walk later on our own because I think that's okay I mean we need to get our exercise we need to try and be healthy as much as possible but we'll do it on our own I gotta go and get a few things from my truck anyways I left a few important things in there that I don't want to leave in there over the weekend and other than that now I got TV my computer play games so next time guys okay next time when all of this is over when the world is back right side up or whatever's going on now and when things are not like they are right now as frustrating as it is being in this situation I think it's just smarter and better to just say rain check next time next time I'm out here we can hang out and have coffee and stuff so anyways I've I've got to close this vlog off here we'll be fine we've got a roof over our heads and it's just a little more inconvenient you know more inconvenient than anything else I was talking to Brit and they're probably going to have to either cancel their their girls weekend or I'm hoping that they can still make it work just like I was saying before she's really been looking forward to it from what I've heard that they might do it at our house or like half the weekend at our house and I'm planning on getting home on the weekend then they can go and continue doing what their original plan was I don't know all depends on life and everything going on there too so you know it is what it is thanks for joining me today though everybody appreciate that that you're here now you watch that you follow along with me some of you have been here from the very beginning I see your comments every day some people think I don't read the comments I read the comments I see them all and I try to get in there as often as I can because I really enjoy seeing what you guys have to say and you guys are all very encouraging and very kind doesn't matter where you are not just not just from the mayor times here but everywhere you know the one thing that doing this blog has has taught me is that kind people far outweigh negative people it's just the negative people are really loud really really loud and the media that we have in this world today seems to gravitate towards like the fringe people on the sides that are the most craziest nut bags they can find because it gets clicks and it gets views it works for me too you know I turn on the news I'm like wow look at those morons wow people are crazy man and it makes it look like everybody's crazy like that but no no like 99% of people are thinking the same thing as you when they see that stuff they're like that's not normal that's weird that's crazy but that's why people watch it and then they create this illusion that that's what the world is like it's frustrating but by doing this video and being on the internet here you know a lot of people say there's a lot of garbage on the internet and there is I will not lie about that there's a lot of garbage on the internet but you know I found or maybe I've built and I've gathered and put together this nice little corner at least that we can go to and know that everybody is kind nice and caring here and the few negative people that do come through usually get shown the door pretty quickly I mean I still let them hang around if they want to watch the videos hey just keep your weirdness to yourself sometimes in your mean comments and stuff but I don't filter a lot of things you guys are just really kind naturally I only I've only I'd only really remove a comment if it was attacking another person I mean they they can attack me all they want in the comment section that's what I'm here for I'm the point of the vlog here if you want to throw mean comments at me good for you you got time to waste to do that but if they start saying mean things to other people in my comment section or other people in my life you know that sometimes bugs me a little bit but that rarely ever happens because like I said 99% of people in this world are good people and 99% of people in the Maritimes here are like just a little notch above in the kindness meter they're very kind here that's all I have to say today I've got a I've got to close this down we got a it's already the next day here I did sleep don't worry I did go to sleep I woke up again and I wanted to finish this off and just remind you guys because I thought of it quickly I'm like oh shoot I have a lot of followers around here that will probably want to meet up and stuff and just want to let you know I'm not gonna do any meetups next time guys next time it's just best that I just sort of hang out on my own as much as possible I think you understand we'll see you tomorrow take care


Hold in triplet, you heard this specific description of the course of events, I wanna get your take. Sure, thanks very much. Let me just start off by saying I am not with the government nor do my views on my own at this point, I'm not representing the views of the US government or the FBI specifically. So I think maybe we can just take a step back because I'm not sure what we wanna do up here is sort of completely litigate the specifics of the case and just think about what we're actually dealing with here and I think it's important to think of the entire narrative and the arc of the organization and that helps inform how, why the government is so concerned about this and what we have essentially is an organization that has called itself essentially an intelligence agency that isn't trying to inform the people of the world and has said that they want to hack to bring that information out and to publish it. Now again, this is an organization that has generally been used against a number of different governments within the world but has worked specifically very hard against the US government. It is not a US entity. Assange is not a US citizen. So again, injecting themselves in our conversation here, in our dynamic of figuring out what is the balance between security and privacy in a sense. And so I think it's important to think about who is the actor that we're talking about here before we start to get into the specifics about what might be misconceptions that are out there. So there's two basic charges within the superseding, well there's 18 charges but two basic ones which essentially is there's a computer hacking charge and then there's the charges under the espionage act. And so as it's very laid out, there is at least a narrative that's out there about whether or not the hacking and how big of a part that played in the overall exploitation of receiving information or whether it was a part of it that was necessary in order to get the information out. But I'm not sure that actually matters for whether or not the case, if someone actually has broken the law in order to make an attempt to actually extract additional information. So while it may or may not be, and again I think we should stay kind of a little bit on the wave tops here on the specifics of this, may or may not be actually impactful on the information that's coming out, if Assange took these actions essentially was encouraging someone and actually trying to help them to hack into a US government system, that is a violation of US law. And that is not someone who is protected in terms of publishing that information. Generally that is not something that the Supreme Court has decided to protect and those types of actions. And the second was a very nuanced and complicated piece of it. I don't know the specifics of this, but I can tell you what it smells like. It smells like an intelligence operation to me. This is a very typical sort of tactic of how Russian intelligence works. They use individuals and they use people to as proxies and many times they may be unwitting in which ways they would do that. Sometimes they may be winning in order to leak this type of information. So creating a situation where there was a supposed, it was told it was a temporary password to some person so that they could push this information out versus saying that it was a permanent password that could be unchanged. This is the type of information that a Russian intelligence service, so this is how they would operate in order to push that information out. Really quickly, with the names that were ultimately revealed in the unredacted versions, was there any harm done to anybody? So I think that my information is anecdotal. I have people that I know that were undercover, friends that were revealed that then felt unsafe in doing their job and trying to protect US national security. There's untold number of other people. So if you remember what was essentially revealed with the identity of some individuals in US government who were undercover, some individuals who were working with US government in different parts of the world, and a lot of those identities were revealed. So these are people who were in substantial danger. They were providing assistance to US government and their information was leaked out. And as Barry mentioned, although there may have been an attempt to limit that at the beginning, once the information was out, WikiLeaks was happy to publish it on their own website. So again, I think it kind of gets to the underline of what was WikiLeaks' intentions all along in this instance. But I think there's some real substantial harm here. And again, this gets back to my earlier point. If we have an organization that's outside the United States, made up substantially of people who are not US citizens, making decisions about information's gonna be leaked that impacts Americans, impacts individuals who are working with the United States. And so I think the question really should be asking is, is this the type of power that we wanna give to someone outside of our government or outside of our society? This is not an American, this is not an US organization doing this. It's an outsider. Gabe Rotman, do you believe that Julian Assange, considering the allegations, is a journalist? If we're talking about hacking, we're talking about names that have now been revealed as informants in countries like Iraq, Afghanistan, Iran, what do you think? So maybe I can start instead of directly answering that question by setting the fundamental stakes in the case, I think for journalism. And I was gonna start off this answer by preempting the question you just asked, is Julian Assange a journalist? And the answer is, respectfully, it doesn't really matter. The First Amendment doesn't protect journalists as an employment class, it doesn't protect, it protects individuals who do certain things, who engage in journalistic activity. So with that said, if you look at a specialty national security reporting, reporting on federal law enforcement, what is the life cycle of that activity? You try and get the information, you pursue it. Occasionally you say I'm interested in large classes of information, things like that. You receive the information and then you publish the information. Under U.S. federal law, under the Espionage Act and actually under parts of the computer fraud and abuse act, on the face of those statutes, that activity could potentially be criminal. Now, just to dig into the second superseding indictment, so there's three indictments here, it gets super complicated, but basically the last indictment against Assange, there are let's say three types of charges. One involves the computer intrusion conspiracy, then there are a series of charges that are based on in-co-it theories, in other words, conspiracy, aiding and abetting, solicitation, and then there are three charges that are based on only that third piece of the journalistic activity national reporting life cycle publication. They charge Assange directly for the sole act of publishing classified information online. Now, the government has argued that, and this is true on the face of the actual indictment, that they're only charging Assange for the publication of unredacted informant names. When you read it, that's true. Under the Espionage Act, informance is not a special class. There actually is a statute that covers the publication, the identification of informants. That's not an issue here. The Espionage Act, by its plain terms, covers the publication of classified information to the public. The government has thought about prosecuting members of the news media historically. There's a case in World War II where they were ultimately unsuccessful in getting an indictment against the Chicago Tribune and a Tribune reporter for releasing information about the midway attack. There are a related set of cases in the 1970s and 1980s involving leaks concerning a very secret Soviet submarine-based surveillance program against the Soviets. That case went all the way up to the top levels of the Ford administration. And ultimately, the administration decided not to indict. But in all of those cases where it's come close, the government's never pushed over to charge pure publication. And that's what's an issue here.