 audience so no problem we're gonna be talking in English and if you don't understand anything on the slides please let me know no problem but just focus on me. So on the later one we had amazing applications we got a lot of applications being very interesting for example AMMs that could let you transact with different tokens but these were very very very expensive right we also had oracles that allow us to introduce that out of chain into on chain right but it was also very expensive moving data on chain is expensive we also have gaming where you can have NFTs very cute NFTs you can have your sword for your game your gun and so on you can maybe move it to another game but still the game was was led was directed by a single entity that had the control over the game so the game logistics the game logic was not on chain it was not auto-regulated yes because this is very expensive right also we had boating apps but also again writing in storage writing to the blockchain is very expensive so boating was also really expensive on layer one so this is very interesting application that we have in the layer one but that introduces problems when we are talking out cost so we know the states the current state of things is either we have a huge machine that is processing everything we know this for example banks a corn API's companies startups and so on very huge machines that can process a lot of transactions very quickly and now we're looking at the blue part where we are trying to create a centralized system which is when a lot of persons can verify the integrity of the system right this is what we're trying to do the problem is that this is very slow and this is very expensive and the computation repeats itself various times at different points so it's not optimal for scalability of course this was a choice when we decided to create theorem we wanted this centralization we wanted security it was a choice to sacrifice at that moment scalability well now we know better and we can do better stuff so the question is can we hit can we get the centralization security and also scaling yes we can do with zero knowledge roles and we are here today to talk about star net so we're talking about platform a layer 2 that is secure by a theorem that allows you to create smart contracts general smart contracts it's too incomplete the cost of execution is much lower and you can create amazing things that are not possible even imaginable in the layer one so we can get much more for each piece of gas so this is a quote from Eleven says on our founder at bangles in the 29 of July he's talking about the objective of a star net which is creating a solution for scaling that is focus focus only on scaling theorem and this is called Cairo so the star work experts on both the eternal machine and also creating a start systems and there was a conscious choice not to use the EVM to scale we created a new virtual machine called Cairo this is this was a conscious choice because we believe this is the way to achieve the biggest scale and this is Karen is going to it's going to come from smart contracts within in Cairo and in Cairo is a virtual machine but also language we have so what is Cairo Kevin's a true incomplete language programming language that allows you to create portable programs in this case in Spanish program as the most endless you can execute your Cairo program and then you can prove a smart contract on the layer one only few that this a transaction was correct this allows to have much more much cheaper transactions cost and because proof when the smart contract on the layer one proof validates that this proof is correct it's much cheaper than running the transaction itself so these allow us to create more to get much more scalable solutions using the layer two in this case with Cairo and Starnet so this is our solution the pseudo-logs robots specifically talking about Cairo and Starnet you can get extremely extremely cheap computation thanks to Cairo and we can create and this is key we can create interesting applications that are only be that could only be made using the layer two it's impossible practically impossible to do on the layer one this is an interesting data that we got during the last week a star net plus start star cakes blocks stagnant so a star war the company has different solutions one of them is a star cakes and the other one is started with that we're talking about right now and both together had more transactions since July than Bitcoin lining another layer to this something that is not very well known or as you can see coming from July the blue line is the star cakes plus start net down is Bitcoin in orange and under that are other layer two solutions so as you can see stark is an external it's going to be in very very use and we have been live in May need since June yes June 2020 so we are not new at this we know how to do it the star solutions is very good and as you can see it's very very is being very used and very interestingly also is that 70% of that comes from NFTs it's very interesting for example with immutable weights or are interesting so now thank you very much for coming now we know that stun has a lot of potential you can create needs whenever you want you can deploy it currently and actually today we'll be creating a voting application that we're going to be trying on start it you can use it Cairo is a different language we know it but it's also a language that everybody can use it's not hard at all so my name is a mars behel I'm a developer advocate star war and thank you very much for coming today they go today is for you to get the resources to start to start studying Cairo if you want to go into star net and also make a small example of a voting application so now we talk a little bit about what is being done in layer one that is very costly and we can improve what now let's talk about what can we do with all this power that cheap computation can provide us for example we have a solution called CKX is a company that is offering hyperconcentrating this of course is impossible in the layer one imagine having micro positions and trading with them I don't know it would be impossible because of the cost in the layer one makes no sense we talk before about voting voting is very expensive too so there are also solutions for example a snapshot x that allows us to vote much more cheaply yes so there are a lot of locations that are being already developed inside starting that I'm using all this power another one for example is the government of when all Buenos Aires create an application that allow you to have an identity on the blockchain as a user as a citizen they show you they chose star net because it's very secure it's highly secure and also it's very scalable and very quick so these are only some examples but the ecosystem is growing by the day for example we have tools amazing tooling for example coming from hard hat open cepali and trailing soon alchemy those are well known companies but we also are maybe more interesting we have different applications on the top as you can see they are being created originally on the layer two so this is very interesting because it's my opinion is not for the company overall but it is interesting when a company comes from line one and then puts its applications layer two it's right they are using the the lower fees and that kind of stuff however I believe that the real power is being used but those that are creating natively on Kyro in the layer two yes so a little for example when you have windows in your computer windows 98 for example and you had this nice and cute games and then comes for example windows XP it's more powerful you can do much more stuff and these games can be can be passed into XP okay so these old games can be passed into the new software and they won't well it's okay they maybe could leverage some of the power of the new operating system but the real power comes from that that is being built on top of XP that could not be done in the previous operating system right that's what we're talking about here something that is completely different and out of the league of the layer one we can create something very very interesting that is impossible to create for example we were talking about the games that they didn't have the logic on chain is now possible so imagine that you can do operations and summations multiplications divisions whatever you can do that because the gas is much much cheaper so a company I don't remember I know the name what is the name of the project that was creating this on chain reality topology so topology created and a game on chain and it's auto regulated okay so you need a central entity to decide if you are allowed to play it or not so it will stay forever as long as a theorem exists this is something that is again impossible layer one and for me those the power is going to come from that part so now the question is and what can you create that is completely different from what has been creating the layer one using all these new power all these new potential that you can find in the layer two that is so completely different never done before in mind you can do for example machine learning on chain you can train models on chain you can create any kind of mathematical operations on chain it's completely different and what we need is people I start building these applications that are eye-opening so for the beginning you would need to start installing Cairo start net I of course I don't expect it to do it right now but you can follow these QR codes for some instructions on how to install Cairo and start net so you can get going it's not difficult at all and say while you scale it we also have a report that is called started edu where you can find a lot of educational material they will show you the link with in a couple moments and inside started edu you can find a lot of tutorials on different stuff for example you can know how to how the Cairo syntax look we're going to look at it in a moment you can for example create a token an ERC 20 you can create your NFT ERC 721 tutorials for even more interesting how you can create your own bridge from layer one and layer two a trustless bridge and for example how can you create your own wallets so you can if you can scan these QR code you will find all that material inside and you can get going by yourself without without any problem those tutorials are amazing and they have on board a lot of people into the ecosystem also we have a newsletter that is very nice and you will have a lot of educational material there too and also some interesting projects happening on the on the ecosystem is also there you can subscribe is a soft stack newsletter and finally what we're going to be doing today is a voting application they will allow a person to either vote for one or zero one for yes for example 0 for no and deploy it on the test nets if you have any question on thing now you can tell me this is the repo that we're gonna be using so if you want to have the repo you want to clone it you want to copy the code or just look at it feel free to scan these QR codes any questions comments will we start with the code in part oh okay how many of you know how to code in Solidity you raise your hand how many of you have ever coded in Cairo coming from Solidity into Cairo is very simple really really simple and it's way that you're already working with Solidity perfect you want to go to testnet and see already and interact with with this contract feel free also to scan these QR codes the testnets already working with these voting contracts I pre-ployed a couple minutes ago so in this in this table is a starboard team we have some swag in here you want to come also and I don't know guys do you want to add something else before we start calling okay do you need another QR codes and we have already there the one with the contract where we we're going to use is this one remember please so let's go to the codes so this is our voting contract again the goal is to create a contract that allow certain predefined addresses for example me as the admin of the of the of the both I can tell okay this address can both this or address can both this address can both because we don't want everybody to be able to vote only certain participants of a project I don't know and they will be able to vote yes or no yes with one no with zero and yes that will be all so for this let's review the structure and how Cairo looks this here we are importing our packages very similar to how it looks in Python as you can see it then with defined structs as you would for example in rust first we're creating a boat counting structs where you will be able to store the votes with yes or no so for example we have ten votes with yes zero votes with no something like that the counting of the boat secondly we have border info where we store information about the border in this case I only very simply allowed I simply added an allowed member that it will have a one if it's allowed to vote or zero if not if if this person has already bought it will have a few now coming to the storage storage variables a allow you to know if you know so little ready these are very similar to you they allow you to map from one and from one expression to the other in this case for example the first one now let's go to the third one here I am able to map an address to a to a is registered Bible that in this case is a felt so Cairo is type is a type language now you might ask yourself what is a felt felt is where is the need Cairo everything is a felt inside Cairo conversing to felt and basically for our purpose right now if you want we can get a little bit deeper in a moment both for now in order to to get to make the most of the time a felt is like a big interior number a huge interior number okay so in this case as you can see that dress has no that address type as in solidity it's a felt okay so we're mapping another is that is a felt to a felt called is registered that we have a one or zero or whatever we haven't defined it yet and on the other ones we are mapping a order information and interestingly in the first one we are mapping nothing yes nothing to a structure the boat counting so this allows to read or write into the memory that's as simple as that I can read this or I can write into the memory using these ones so using the storage verbal voting status and if we read it and if I I will go right now to the deploy contracts so it is the deploy contract I'm using right now boy anger which is a blog explorer for star net if I go to the read part of the contract I can see what both in status is doing using a getter function that we will see in a moment we can see the status of the voting right now because nobody has both jets we have zero both with yes zero both with no that is the storage we are reading right now this storage variable where I get our function that we will get to that in a moment and also we have the boring info and it's the same I won't go into this but basically we're storing information into the in this into a storage for the of the of the blockchain now let's go to the constructor looks very similar you know when you initialize your your contract when you deploy it you have to define certain inputs as in solidity exactly the same name so this constructor will ask for three different input variables as you can see now we can we can view how the function looks into Cairo it's very simple very similar also to Python and what is important here is this part these are the imputes the explicit imputes to this function in this case the inputs for the constructor that we have to provide it when we deploy this contract so I'm asking for an admin address the person that is going to be able to manage these contracts with a felt again then the number of addresses that will be able to vote and finally the this is a pointer so it's important to know that Cairo is a loadable language so here we can manage the memory we have to manage it so the rest of addresses is basically a vector with the different addresses that are able to vote I can add five six seven eight whatever and this pointer felt points to the start of that vector but you won't even notice that this the logic behind it is that this is pointing to the start of this array of different addresses but you won't you won't notice this as you will see then we're basically using a contract because we have open sapling on top also of starnet so you are able to use a very secure contracts thanks to open sapling and here we're using the ownable contract from open sapling before I imported them here so I imported the ownable contract and the possible contract libraries from open sapling ownable basically defines who the owner is of something and possible it allows you to post a contract in case of an emergency say that for example my application is being hacked so I can post it as simple as that but also we have ERC 721 logics and ERC 20 so you can use it with open sapling that's very very useful very very useful any question until now we have seen the constructor we can see in the storage variables, structs, how to import, how are you finding Cairo, is it difficult or is it nice? any questions? how do you sorry what was the question yes for example you have in this case we will be using addresses that are in an hexadecimal format right it will simply be converted to a field behind it will be we will actually deploy right now our contract using hexadecimal values and you won't have to convert it to a field but you also could convert it to a field and also deploy with that no problem right now we can think of it like begin to yours and we can get deeper into that any other question right now we have seen constructors, storage variables, structs, well perfect okay so we have our constructor and with this we can deploy our contract also this as you can see the structure of the contract is very similar to Solidity we're trying to follow the guidelines of smart contracts in Solidity you have getters you have the constructor and the format is very similar also you go to this contract is very well commented so you can know what is happening okay so the question is if we have inheritance in Cairo yes I think you guys can yeah sure so there's no inheritance in Cairo you don't inherit your contract what you do is you import your contract so if you're looking at the top of the contract up there here is importing a template developed by Opensapplin so it's importing the full contract which is called onable so it means that imports all the functions that are inside of this contract and inside of this contract you know it creates it creates a few variables that can be initialized and one of them is called the initializer which is supposed to be called during this constructor what makes sense so it's not explicitly it's not automatically initialized because because it's not like the contract is not onable it imports some function and it has no way to know that this is the specific context of the constructors you need to initialize it explicitly regarding the question on felt earlier I'm not sure what confuses you but when you're looking at variables in Solidity you know at the bottom of it at the end of the day it's a number and Cairo is a fairly new language it will get better in the next few months but right now it treats everything as a number so if you want to perform actions when you need strings you basically need to assume that you receive them as numbers you convert them you do your operations and you do all these kind of stuff make sense sort of yeah so the felt is as you mentioned earlier I think I heard you say it's a field element so Cairo is like the felt you can think of it as a big it's basically a number over a big field that is a prime that does indeed a field integer of mathematics and arithmetics that makes sense so it's really like you can treat it as modular operations the only time where it gets weird is for divisions division sucks I don't like them there is no problem with that so for example we were talking about the ownable contract this is the one that we're importing so we have it here locally and we're importing from it this is the ownable which comes in a name space so we're importing these functions yes no problem there's there no inheritance in Cairo perfect so going back to a contract so we import these functions ownable and possible from functions inside the ownable name space and inside the possible name space you can see yeah and there's a question the soliti no no you cannot import it right now in soliti with this contract I mean showing from open sibling are written in Cairo are native in Cairo I think there are plans to have more contracts from open sibling yes open zeppelin is working to create the standard implementation so any kind of contract you have on solidity you're used to have that is done by open zeppelin we're walking towards having that that being said I mean it takes time to develop contracts that are secure and everything so if you want to develop them you should it's worth it it's fun and you know you may develop stuff that gets used by other people which is great actually open zeppelin the contracts in Cairo by open zeppelin they have a lot of contributions from people outside the community so I will be right also if somebody manages to write a Cairo contract that is the equivalent to the stacking contract in synthetics which is used by everyone I'll buy you a beer more than a view it will eventually happen it's very few is one of you okay so we got our constructor and then we can get to the part here raising the initializer function inside the ownable namespace and then we go to the getters is very simple functions by definition in Cairo are private not like soliti so here if we want to have getters functions to read information we have to explicitly tell that they are getters so and something that I forgot to mention before but this is the way like very smart to how do you do it in Python how do you define that this has a particular set of properties this function that that is coming this case with view we're defining getter functions functions where you can read from so right now we're creating this admin function that as you can see is exactly the same format as it comes in open sibling for example in ARC 20 or is ERC 721 simply reading who the owner of the contract is so for example if I go again back to the contract deploy contract here I can read who the admin is as you can see this is a felt but if I convert it to hex this is the owner of the contract that is myself is this same direction so talking about wallets it's a good opportunity right now you can use right now argm x which is this one and also bravles that is this other one very recommended you can use the standard faucets you can simply put in Google standard faucets and you will be able to send yourself some fake it's so you can start making some interesting things using girly or more interestingly you can also breach your own it's from the girl desned in in the layer one into the layer to start it for example here we use in program I can I can ask for some fake it send to my metamask for example and then using the breach I can connect my metamask which is currently my let me wallet in layer one and connect for example are you next here as my wallet in layer two and I can reach these fake it's from girly layer one to layer two so this is also very interesting is the same thing as asking for it in the faucets so coming back to the contracts we have another gear function here it's also a very typical open sibling style function where you when we are posting we're asking where we think is this contract is currently post very simple and then more interestingly here we have a view function to know the voting status is the one that I showed you before it will let us know how many people voted yes how many people voted no as it was that again you can see in this function that's we had an explicit argument and by now you are already asking yourself what is this what is this inside these keys these are implicit arguments this is something that is different from other languages you might not seen that before but basically this repeat themselves all the time she's called pointer person pointer and rich check pointer we're interacting with the memory here so we are talking that these are pointers actually to a felt and to a structure called has built it no problem no we we don't need to get that that is something that we're repeating in each function it doesn't matter the real use is here so we're asking here for an explicit argument that is the boat counting sorry sorry we're asking for nothing here it's empty the imputes and the output is this a status a variable called status that is the boat counting structure that we saw before again carry style is a type language this helps for security any question until now for this function for example yes yes this is again you can read it we can read from the gates voting status this is the one that I was showing before and currently both are yes or no this practically in the structure we have and defined here this one both yes both no it's exactly the same here okay so yes you can call of course these functions from another contract that's you can call them and we'll go to the external functions that also allowed you to write perfect okay yes that is what I was telling for that is the implicit arguments these arguments that are passed without you explicitly telling these functions that you have passed them so they for example when we are reading from the from the storage you have to provide these functions that the story is the pencil pointer and the Cisco pointer you have to provide them and they go into the read function so inside here are the implicit function implicit arguments you don't see it because they're implicit but yes exactly these implicit functions if I take them off they will have an error in our it's it's not hard to to to get used to them and also you can see each function that I am adding here has them repeated so no problem with that okay also we have another view function where we are getting the status of a voter and yes if you were simply reading into the voter info a storage variable that we have before using the argument reads so now going deeper into this you can read and write from this storage function in this case we are reading and as you remember this search function ask us for a user address that was precisely a felt so if we provide it a felt then it will return us let's see once the seed return yes if we provide it an address it will return us a voter info structure okay so here I'm reading from it and then we're returning it simply as that status equals status because the name of the variable here is steps and to see an example of how to write this exactly the same the same storage variable that we saw before voter info we were able to read from it if we are imputing with the address and we know we now know that it returns unstructured okay so now we can write using the argument right we can write on it so we're writing on the storage of our contract and right now this is basically an address we will go deeper in a moment over it but this is an address and we're telling the telling it for this address please map this structure okay very similar to how you look at it in solidity yes method sender is I think I have it here get color address with this you are getting the address of the of the contract that is calling this this contract so for example in this case this is the most important function is the boat function so what it does is simply is getting the address of the color is storing it and then we're reviewing the information of this person to see if this person has already bought or not because we can only allow them if they have bought it and yes in a moment we will go into that MSG sender oh could you repeat the question a little bit louder please a variable like an address there's no notion of MSG.value in stocknet because there's no native currency everything's in ERC20 so there's no value attached to call there's no and there's no payable function that answer your question okay so so yes mm-hmm so let's go quickly into the most important function the two most important functions the register voters and this will help me to talk a little bit more about recursion that we use in Cairo so again as you can see we have the implicit arguments as always and then we are asking for two explicit arguments the register address length this is the length of an array and the second value is the array itself so first argument is the length of this array and the second argument is the array by itself then what we're doing here is and again you can see all this contract in the report I showed you before it's in the starting DDU in case you're you want to follow it closer in your houses and then what we're doing here is simply and this is a crazy a classic function of Cairo that is using recursion so right now we don't have force in Cairo you have to use recursion and this is a classic function for it what we're reviewing here is that it is the end of the recursion so if we have already passed to every each of these different members of the array that is if the length is zero then we can return and the recursion is finished then here we're creating a small a small a struct the voter info you remember we defined the structure called voter info here we are creating this botante info where we have this new voter info so I'm here that allow is equal one it could be zero for example so this function what it's doing is that each of the address that I'm providing it will register them as voters and we tell we tell us that they are allowed to vote okay and then continuing a little bit with the recursion what we're doing here is writing into storage into the storage variable register voter this one we're mapping as you remember before we're mapping an address to a number so this is an address what we have here is this is the way very similar as you would do it in Python for example and our languages you have the way and you can index to it using the square brackets okay so I am indexing indeed inside this array for this could be a number like one or two or five depends on the number of address that we are adding and then will we say that the value for that address is one we are simply mapping here and then we comes over the recursion part here we are reading again the same function and providing the length but this is a lower length as you can see if we have for example five different voters that now we are providing it with four okay and we are sending it with the register address and then it will repeat it will repeat on three passes through each of the different addresses and it is starting for from the last one up to the first ones and all this looks a little bit crazy using a caution but it's no problem you can get used to it and I think that this will improve in the near future right yes that's a good question the question is that what happens if you get into an infinite recursion you okay so there's there is the there's an answer for today and an answer for tomorrow but basically there's a form of gas metering in stark net just like in Ethereum and if you reach a maximum number of steps the sequencer would reject your transaction today you're not you don't pay for this kind of transactions they're just rejected tomorrow you will be it will be like a fake transaction on Ethereum you will pay fees for the execution that led nowhere any other questions for a moment okay so simply we have a recursion function here again it's not that hard and it will improve we're talking that Cairo is a low-level language and we have to be very honest and conscious about that and finally let's go to the last function that is the voting function this will allow us to call a function as as you can see here it's an external function external function simply means that we can write on the storage using it okay not only read but we can hear right into the storage again we have our implicit arguments we have an explicit argument called both and here don't mind this part is simply telling the memory that we will be using the compiler will be using local variables we don't need to go through that we're called the possible function from open sapling contracts specifically the function called assert not post it checks that if if this contract is post or not if it post this person cannot vote as in what that then it get the caller address this was a phone and a question from before with this function we can get the address of this caller we store in it inside a caller function then we can read the information of this caller of this address using the read argument from this storage variable starting in the info and then we are simply reviewing is this person can vote or not if they have allowed zero then they cannot vote then we're creating a new border border info a struck that it says that this person has already votes because we don't want them to vote again we are writing on the storage here everything here we already know that and finally we are updating the status of the votes with the vote of this person if this person voted yes or zero in this case then it will update that with zero the count with zero and if they voted yes in this case one for example then it will be updated the count will be updated with a song that we have here and finally we are updating the final status of our of our date the story of our voting and storing it into the storage as you can see this function is key and if we go to the deployed contract we go to the right contract and then I can vote in this case this is the function I don't remember whether I say that I think so I will go to my bravos while it in here I was in my audience before and let's see if he allows me to vote so I will vote with that one and I will be able to sign this transaction because this address is registered to both I did when I deployed it and right now wait this is the transaction hash and we have to wait for it to process this and we will have our votes now how can you deploy these contracts you can deploy it using the command line tools by its target or also and my preferred ways to use protostar protostar is a tool created in the image of foundry is it has the best practices from foundry and also some from hardhat sorry from profile so it's very interesting it helps us to test but also to deploy so if I go right now to my command line this is how deploying this contract looks like so basically an intelligent protostar deploy this contract that is already compiled by this moment and what I want you to notice here is the part of the imputes we talked before about the constructor accepting for three different imputes first one is the owner the admin of this voting second is the number of persons of registered addresses that can vote and finally the actual addresses so this is how they look this one as you can see is a hexa a hexa value and this is the address that is the owner of this contract then only one person or one address can vote this one and we can simply deploy it running like this protostar is very good it's very usable it has amazing testing functionalities but you can also deploy your contracts and that is simply the content that we deploy here and as we as we can see we're already voted if I go to read contracts we should get a voting status where we had a vote with yes with number one it updated and zero still no I could not vote again because theoretically I should not be able to vote again let's see what happens it should be issued it shouldn't pass for now but let's wait for it so that would be the main part of the workshop you we have three minutes to more questions yes the implicit right now here I don't have any but they can change depending on what you're building can you think from the scenario when every time they're used basically it's a it's a bit of a deep question the workshop is about to finish if you want let's meet outside and we'll give you a more definitive answer yes I think you have another message here well I look for it any other question in the meantime I have a question for the audience before we wrap the the workshop up can we get just get a quick show of hand who learned something during the workshop cool who thought this was too difficult who thought this was too easy okay fine so it's great this means this was spot-on those of you still are hungry don't hesitate ask us question come on our discord go on our resources look at what we do as also as Omar mentioned like most of these things the paradigm you're used to that you're used to how you write smart contracts how you deal with scholars and stuff like that this syntax is a bit different the tooling is a bit different but you can and will master Cairo it's just a matter of just like trying and this will give this tool will give you extreme power in your blockchain applications so if you're looking to go more to do more and go beyond what you can do with the EVM I invite you like do take a look it really is powerful and will let you build super cool stuff and again this is the QR to the educational resources you want to go look at them we will have boots on Thursday and Friday you can ask any question come with us and finally regarding the question the error messages this is how they look so if this assertion true or false fails then it will print this mistake water info well thank you thank you very much well it depends on the on the wallet let's see for example this case a certain lounge so what your question is what does an error message look like from the browser perspective essentially you'll get a failed transaction like you do on Ethereum and the trace like the way it shows up is kind of ugly to be honest it's still very rough around the edges there's a lot of info that is not necessarily relevant to you but the message the error message will appear somewhere and you'll be able to know where the error is from in general this thing works and this feels scale this thing scales Ethereum right now it's a bit rough around the edges meaning that it's not all pretty there's a lot of info or not enough but it works and it's cool this is how the error looks like as you can see that's the message that we saw before in the error yes for info your address is not allowed to vote all right and we will have a boot please feel free to ask any questions and thank you very much for coming