 Selamat datang, saya Hafeez. Sebenarnya, saya merupakan penyelesaian untuk penyelesaian GraphQL di Ingo. Jadi, apa ini tentang? Saya akan beritahu kerana saya rasa ada banyak perkara-perkara seperti ini. Jadi, apa ini tentang GraphQL di Ingo? Saya akan bercakap tentang GraphQL, bagaimana ia menerima beberapa masalah yang terkenal apabila mereka membuat penyelesaian Redspot, apabila saya beritahu perkara-perkara yang lebih terkenal, dan juga kerana ini adalah penyelesaian yang diperlukan. Jadi, saya akan beritahu perkara-perkara yang berlaku. Bagaimana kita membuat GraphQL di Ingo. Jadi, apa ini tentang? Apa yang mereka beritahu? Atau, apa yang mereka beritahu? Apabila ada penyelesaian yang membuat penyelesaian? Saya ada banyak perhatian untuk membuat penyelesaian web. Jadi, mari kita mulakan. Jadi, untuk beri perkara-perkara yang terkenal, penyelesaian biasa untuk penyelesaian web, ia seperti perkara-perkara yang mudah. Apabila ada penyelesaian yang membuat penyelesaian, perkara-perkara yang terkenal akan menjadi API Redspot sebab itu adalah perkara-perkara yang lebih terkenal sekarang. Dan anda ada penyelesaian. Jadi, dalam konteks ini, kita beritahu banyak penyelesaian. Jadi, hanya perkara-perkara web, anda mungkin membuat perkara-perkara web, tapi anda mungkin mempunyai apps IOS atau apps Android, atau apabila anda mempunyai penyelesaian di Redspot. Dan juga, perkara-perkara yang diperlukan oleh penyelesaian bahagian, bahkan penyelesaian, kerana sekarang, penyelesaian yang terkenal dan perkara-perkara yang terkenal sekarang, So, perkara-perkara yang diperlukan dengan menggunakan API Redspot, saya akan menjelaskan kebanyakan yang terkenal dengan penyelesaian yang berlaku dengan penyelesaian yang berlaku dengan penyelesaian dan juga perlukan perlukan perlukan perlukan, untuk penyelesaian. Jadi, pada konteks ini, kita beritahu cara-kara penyelesaian yang mudah. Jadi, anda mempunyai penyelesaian yang mudah dan penyelesaian yang terkenal untuk menerima perlihatan perlukan perlihatan di penggunaan yang digunakan oleh penggunaan. Jadi anda mempunyai jenada penyelesaian dan cadangan dan penyelesaian yang dikatakan oleh penggunaan. Jadi, apabila penyelesaian menerima painan atau kebanyakan kebanyakan, anda mempunyai jenada penyelesaian terdapat khusus yang akan digunakan dengan�is dukung yang terkenal. Jadi, kita melakukan kebanyakan ini dengan penggunaan yang digunakan. Jadi, anda akan menterima obat-obatnya. Bagaimana anda menggunaan penyelesaian untuk beri mengatakan kebiasaan untuk diberikan kelasan dan perintah untuk semua ini. Ibu, tuan, dan kekuat. Baiklah, bagaimana apabila perniagaan produsero yang berbicara untuk mengenai kelasan baru, diberikan kelasan CPI? Jadi, saya akan minta, mari kita dapatkan listap perniagaan untuk tahun ini dan kita akan membutangkan 10 ini untuk contoh. Jadi, kamu dapatkan listap perniagaan. Pembuan tersebut, kelasan dan kelasan perniagaan untuk ID atau perniagaan dan kelasan kelasan ini kelasan. You have to like, count, and go for ID, right? So it's that, so your front developer says they are just kind of enough to render my feed, but I need the author, name, and the URL as well. So what he needs to do, for example, most moves, cadices, so that means he thinks, okay, I'm going to need to make another query to the REST API to get the user data for the first-first. So it makes one REST API query. And yeah, so he gets the ID, name, handle, the age. He may not need it for this view, but he gets it because that's what your REST API returns for your user resource, and then he gets the water URL. Yeah, so now he has enough data to render the first post. And then during the second post, he realize, oh yeah, he has to make another REST query. And then we don't have to make another query for each of his posts, right? All right, so this basically is... So he realize that he has to make separate those post to get information for his author. That's multiple round trips. And then we're also getting other fields that he may not necessarily need for his view. So that's overfetching. So that's the most typical REST that you face as a developer. But of course as engineers, we already have solutions to these issues, right? So common approaches that we make will be like, no, maybe probably instead of you allow your gap users an point to accept array of IDs, right? So you gave him a bunch of IDs and then he returns to this. Basically, you cut down the amount of calls to two calls, right? But that's okay. But that doesn't solve the issues if overfetching. So you say, okay, let's accept parent, parameter, subscribe fields to return. So basically, you're all fine. You say, oh yeah, I want just this field. I need name and leave out the fields that you don't need. Right, so that's another approach to solve the issue if overfetching. And then another approach is just okay. Let's create a custom endpoint for your new speed queue. So you have a specific endpoint called new speed. But then you realize it's too tightly coupled to UI, right? So imagine you have multiple clients, the different environments, different platforms. So are you gonna do different endpoints for each of your clients? And how are you gonna support it if you have different version? For example, you have iOS app. So as version, you accept all these fields. And then the next version, it's like add more fields. So what happens to your older version of iOS? Because it's not a verification, so there's no way you can get the latest updates. So how do we proceed from here? So I'm gonna let you see how GraphQL can address some of these issues. So but first, let me talk about what is GraphQL right now, right? So right now, GraphQL is actually two things. It's a data query language and a runtime. So it's not the graph database. So this first misconception of multiple rate of GraphQL or GraphQL is a graph data. So no, no, it's not small, but I think one more like a data fetch API that gives a query language and runtime. So what you need to know is that a GraphQL query is a string that you can interpret it by the server and then returns data in suspect format. So basically, your client sends a query string, GraphQL runtime, gets there, then resolve all the do what you need to do, and then returns it to some responses. It's pretty easy, right? It's not complex, whatever. So here's an example query and so let's say the query that GraphQL, the data language that GraphQL specify is like, okay, it looks kind of like JSON-ish, right? But it's basically just the keys for what your time want. For example, you want the user with a particular ID, and then I want the ID field, the name, your friend, or profile picture, and I want it to be in certain size, right? And then you are for that profile picture. And then the result that you get is, it's kind of, it's like, it's one-to-one parity to your query, right? So as a problem developer, it doesn't have to care about how I'm gonna get this data that I need for my view. It's natural for us developers like JSON is kind of like defector standard or response right now this. So if you show this to a friend developer, he'll be like, oh, he's fucking awesome. Right? Okay. So where does GraphQL fit in, right? So previously, the architecture, basically what you do is like, you have your GraphQL in a micro-services spender is more like a gateway API. You fit in between your client, talk to your GraphQL server, and then GraphQL server will decide where to get your data from what was also available to your database or even your original REST server, right? And then how about GraphQL will go? So, sorry. So, GraphQL will go, right? Basically, documentation is kind of simple. You have your client, right? It talks to you more probably in our web server, HTTP server. You use like in an HTTP library, the building. And, for example, it handles the the queries coming from GraphQL endpoint. And then GraphQL endpoint passes to the handler which runs the GraphQL runtime with this in the schema. And then use the schema to resolve the data from the data source. And then it does the JSON response. Spender is kind of like an easy and then I'm going to show a quick data. But first, maybe you have a few issues that GraphQL address which is multiple launchers and a version of data. So just keep that in mind. And so the demo, right? Just if I'm going to show, first I'm going to show a simple micro-model app similar to what I chose as now. Quick GraphQL serving go. Some queries I can show the difference in REST versus GraphQL queries and probably at the time you see how times they adapt to changes in requirements. All right, okay. So, all right. So I wrote a quick Twitter phone, just tonight. So basically, this is it, right? Similar to what I showed you, what you need. Basically, this application have two main model. This is just a review and a post. So we're going to be using GraphQL, right? Okay, let me show you the model for this. It's kind of, I think people like code. So, okay, so the model for this. Sorry, can you stand on one side? I'm sorry, sorry. My fault is in the way. All right, so, yeah. So you have to go through the user with ID and name. I put some JSON tags because it's kind of essentially in GraphQL code, right? So you have your two resources, right? So how do you write the schema for code? All right, so, so if you want to start, right? So you start writing, probably your GraphQL server into, so you start with a schema. So you design a schema. So basically, this is what it is. The GraphQL schema language, it does not mean it's just a way for you to represent your schema in an location so that you are developed and see, right? So, but it's similar to your code or code truck, right? So you have to, so it's the thing is just saying that, okay, I have a type, right? In GraphQL, everything is a type. So even your root query, I'll show you what's a root query later, the root query is a type and the map, for example, I have this query and I'm gonna, what's query is a post query which is, we want to map it to y'all, get list of posts and then you have a post with a, it takes in an ID which in your teacher, it returns a post type here. And then you have a user field that takes in the ID and then it returns the user type here. So the user types and the post type I defined here in the schema. So you notice that the user type in GraphQL here that I've wrote, I have, most of it has one-to-one mapping to the Go struct except that I have two extra things, a few things that are added for the fun of it, right? So I will show you how this gets resolved later in the query. So you have that schema. So what you do is you're gonna implement it in GraphQL, it's in GraphQL Go. It's basically decorative, right? So if you clarify what fields you have, what are, how do you resolve the fields? I'll show you the Graph, the root query first. So basically the way you define it, okay, say you give a name and description and then you try to describe it because the description helps with the documentation, right? So compared to REST API, actually what, for documentation what they do is you end up having this blue screen or swagger to manage your documentation. But now what happens is like your schema itself is a documentation, right? So that's the last thing that's for you to maintain, one more last thing for you to maintain. So what you do today is just code, right? So you write both schema.go and schema.txt? So this schema.txt you don't need to write this, this is just a way for you to, just a blueprint for you to do. So it's for you to see, okay, what are, it's a planning tool. So what kind of things I want to make, what kind of objects you have. If you want to skip this, you're okay, it's fine. You can't generate schema.txt. Actually there's some efforts into doing that, right? Especially in JavaScript, they are taking the schema language and then generate the code. I think someone wants to do it in Go, but yeah, it's like a luxury, it's not like, it's already much, right? So the essential thing is schema.txt? Yeah. So basically this look at the user and my, right? So how, okay, so for example this user field, which is a user type, which is this type. And it takes in the ID, which is an integer type. And then how you resolve it, right? Because growth care is agnostic in terms of data source. So it doesn't care what is MongoDB, SQL, SQLite, in-memory database or whatever. Even another service could be your data source. So what you do is you just implement it as you need, right? So for example, for my application, basically it's just an in-memory database. So I take in the ID and then I just get the user from given the ID and then return it. So but it returns the, this user struct, right? And then but you need to do a mapping between this struct to growth care type, simple as this user type. And then basically you just define this user type. Ah, and then you just map it between, for example, this ID maps to this ID, right? You have to map, I'm using JSON tag to map the IDs and the field in your struct. So basically, for example, this ID, I know it's an integer type, so I just, it's an integer type, right? And your data source really it's like they know it's an integer type. So it's no provision there, provision there. It gives this extra, state struct-type capabilities to your API. And for, let's say I showed you an example of an extra field, for example, the post-real, it's not part of the user struct itself, but I'm alarming the API to growth care to return a post for given user. So let's play or what I have is it is example, it takes a limit a number of posts that you can return. I take that, right? Because I previously return the macro, macro value user, this struct, I take it and then take the ID and just get the user or post for that user. Okay, I think enough for the implementation, right? I'm going to show you an example of the theory itself. Right? So this is the ad implementation to be equivalent to the response that you get from the growth care. Right? So it makes this query, right? I'll show you the query later. And that response is basically JSON, right? And it returns exactly what I need. For example, I need to offer I think I need the avatar URL with handle and the ID, right? And in the content. And you remember, I have other fields here that looks a little bit too forward and stuff which I don't need right now. So I don't get it. I don't ask for it, I don't get it. GraphQL has this freaking cool tool, right? It's called GraphQL. It's like a workflow on GraphQL basically as an ID between the agent. Q becomes GraphQL because it's a graphical interface. Right? Okay. So so okay, let me show you an example Q is for so you saw the new speed view, right? So for example, if I were to do it in REST so I have to make a graphical query and then this are the kind of data I get so I have to make a get plural post and then I have to make a get users for a given ID and stuff. But for if I were to use GraphQL the query is kind of simple. If I just get when it is is a post I'm going to limit by 10. I want the ID for that post. I want the content which is a text. I want the author for the author specifically I want the ID the name the handle and the avatar you are also specified query and then that's what I get I get exactly that. Right? As you compare with REST API you know for me like using it it's like it brings a joy that you're actually using it like it gives a better experience as a developer which gives the reason why I'm so excited about GraphQL you know yeah, so this is the data I get and if you also and ask why you're using GraphQL it's basically ORM Object Visual Member Data Member kind of layer just another abstraction it's more like a data fetch API untill of that it's not on the data it's it's basically your API gateway so instead of using REST then API for your gateway instead of using the raw low level REST API you're abstracting one level using the general purpose yeah, query language yeah I'm not using it so let's I forgot to say but this GraphQL is not done by me it's like it's the open source like that money done by Facebook so what I did is like they really say prefer the preference limitation in JavaScript so what I did was like I wanted in goals like get us to do this in goal is what happened so we have a GraphQL it doesn't decrease the number of REST queries it's we still have not the same number of REST queries on the GraphQL no, so there's really one query which is put it into the client it's one query but graphq well, it's maybe the raw query in the fact that yeah, the back end so it doesn't have to basically it's resolve it all of this but it's like that method, right? it's like for example you don't need to make a REST up there query I say you want to resolve the user you don't need to make a REST at there queries basically just query the database but graphq does make the REST yeah no no, it doesn't so if look at the limitation it's the replacement for REST yeah it's an example if you resolver call REST is calling a service that only speaks REST then call REST yeah but if your resolver is calling a service that speaks REST and Q it'll call REST resolver and Q or whatever that but it's it can speak SQL whatever you want to do in there so it's a complete replacement yeah for example in this example the request comes from the client to the GraphQL server so the GraphQL passes the query and then what you do is you use a developer and determine how you're going to get the data so for example in this example my data is in memory so I don't need to make another REST after you but the resolver let's say calling into mySQL or both REST SQL database it will return the whole raw data anyway and you throw it away and it takes me but in terms of from the client perspective right from the client perspective it's the fact yes yes, I agree and it protects the data because it doesn't send it to the client for example the ID information and you S4ID and REST you get more information than the client so that's the old catching part right I can show you an example like that for example let's say you have this new speed F let's let's think of it as IOSF right so let's tell you your current developer you want to make another version of this F right for example I want to just put in number of lights I want to show the actual the like who actually likes this thing for example I want to put a picture of all the avatars of all the people your user who likes this first so um for example, right sorry, sorry, sorry okay so these are the given these are first, right and I know from my from my rough period, right sorry um I notice that for this of course there's a a field for called lightbuy that returns a list of users so from that what I can do is okay, I can say I want to lightbuy right, there's auto-complete which is fucking awesome right so lightbuy so lightbuy is a user um type, right so what what feels do I need to return so I want to I want to get ename and I want to avatars euro, right as the kind as the developer, right you just need to specify what need to declare your data the shape of the data you want data you want which is great um so for example for this data version of my app so basically both of them requires the same talks of the same GraphQL server both of them get the both of them specify exactly what they need and then they get what they need they don't get extra data or whatever so let's address the overfetching issue right um as well as I can talk about I think um yeah so I think I can do most of stuff that I want to talk about if you have any question you can at this point then um if not oh yeah I run multiple instances of the GraphQL server so you don't need to explore so the server itself can be an HTTP server, right what it is actually is just a run and just a library that let me show you the implementation, right so you made this in my main I'm using she's a a child server for my routing library so it doesn't happen as a matter right so I'm saying okay um I want for this GraphQL endpoint right I have this sub-graphql handler for the other parts um it's just a static handler to serve my set files um and then just use HTTP to send and serve first they serve this request so for this serve GraphQL handler is basically using um this GraphQL go library right it takes in the request this is a helper to pass the request right so the request is actually like something like this right and then it has query like write it's so basically it's passes that to give you 3 things your query the query string itself some variables and operation in those are kind of not needed right now but so that that what it does and basically you pass in the schema that you define just now and then yeah do the string and then you pass it to GraphQL GraphQL does does it's magic and then returns a result and you just just basically just library to plug it in you put in your string you get your result right is this stateful stateful so it's for right now it's per request per request context right so it's it doesn't there's there's no so you you have got a host operation in the graphqr okay so right now what I'm showing is just the query as a gap operation right so in GraphQL there's another operation called mutation so whatever mutation it's the same thing the way you define it's the same just that how implement the resolve function is up to you and so in GraphQL for mutation queries mutation operation they guarantee that your your your fields resolve sequentially first that means if you have right put an operation right you want to be in sequence and then for but for normal query it's it's up to you you can you can do it our kongkarman as well because reading is reading right correct there are and then GraphQL there's another experiment to feature which is for subscription it's more for sockets more for long term communication but right now it's still under RMC but it's not it's there but there's no one has actually figured out like how the best way to use it and all right but just something that you have to question is it like new the fetching of the users only of the users data or boundary smart new patch in the other ways so so GraphQL doesn't specify that so textual implementation how you gonna do that right so yeah so basically let's say let's say this is a rotation query you will get this it's the same thing so once you get the result you got the data you got the query from the user you got your arguments could be the data that you want to modify right and then you do the supplement so GraphQL it doesn't specify the data base the data source how in fact in fact our kongkarman it doesn't specify it may not may not want to use HTTP you might not want to use perhaps sockets for your communication it doesn't matter right so you notice that's why the data query and how you resolve the asking on you can go ahead I complete you forgot I had I had three questions not okay I have the simple city question yeah remember what are you using to generate your own data because it's fun oh okay so that's it's website called hipster it's like it's hipster it's hipster it's hipster it's hipster it's hipster so yeah I didn't generate just copy face and then toss it and then put it in yeah and think awesome thanks you say it's hipster yeah it's hipster okay okay yeah oh we have oh thank you so it's really cool it's really nice and I love it and then we placement for the interfacing part of the logic right just just your API right so the question is except to to do this things in HDB like way is it possible to do in like you know put a bath TRBC something you you have an input you have an output you say mask so so basically just write instead of using HDB library so basically you write whatever polota you so you receive the data you pass it to cross-tale library as a string right so if you're using put a bath and basically you have to find your input you have to find your output put a put a bath put a put put it it put it put it could the can we a , Pada web site StarCraftGirl.org, It's still a living spec. The first spec was published July last year. The second one was October. So recently, April, they just released a new spec. So it's still kind of new. But most of the stuff, it's just adding on to the spec. So if you want to contribute to it, they just go to the Facebook Graph GitHub. So the project that we're doing right now is kind of separate for Graphical itself. It's just us looking at the spec and then just eliminate yourself. Because we wanted for... Because the first invitation was students for Node.js. I have issues for Node.js. But I kind of was in a phase where I kind of drawn to Go from Graphical. It's kind of like Go feels right for web server applications of education. So I'm like, yeah, this is something that's kind of missing. And I work with someone who was working on it halfway and then they work together and this is what we have right now. I was able to do different things right now. So right now, stable answer. All the tests, we actually mean tests. We call it all the tests for the Graphical spec. So it's running. It's stable, it's running. I have one application that is running in production right now but it's low volume just so that I can test it. But this is premium. I think it's less than 10 months. That's the thing. The one reason I came here is because I'm looking for more people to contribute to the library. So you guys have more because the switch-dose have been working for more than a year or two years. You might have more insights. So for example, one of the issues that we have right now is the ordering of the JSON map that we're trying out. Because we go maps all this under the missing, right? Under the missing, right? But there's a way. I mean, Graphical spec doesn't specify that you may or may not do that but it's kind of for developer experience it's good to have it in order. But if you have any ideas about how to like marshal extract into a JSON in order. I think we have some ideas but no one get better approach to doing that like marshaling. How do you handle smooth queries or unresponsive resolvers? Responsive resolvers. I think we leave it to the network library suffocating. When you kill your home you kill your home integration service. So you ask for something that takes forever to come back. The service times. Yeah, it's the same thing with normal if you take out the Graphical it's equationally, right? If you just use a network then it's the same thing. So Graphical itself it's just a thing that that just passes your query and then helps you write how you're going to resolve your data But if I would have data management layer like that I would like to have some nice piece like circuit breakers so that the law could just get killed and say sorry I can't get data from you. Well you can do that actually because Graphical allows you better implement yourself but one thing is that Graphical solves resolvers or you can return an error so it can be any error and that will be part of the data source for example and I'll show you let's say for example I'm asking for it's not there, right? A given ID or I know that it doesn't have an ID for example So let me see er right? oops what's the fun time? ah okay fine right so I can return an error so it can handle errors basically but it's just how you handle it so for example for long term for resolvers that takes too long you can return an error then your client can handle that So we're not clear how exciting in the middle layer I mean before reaching the database yeah it's basically data division so it's the same layer where you control where you're pressed for security it's just it's just if any of those layers you want you can use Graphical So QAPI so QAPI means that it's an API that talks to a lot of the APIs for example so that to be a wrapper Graphical will be that wrapper for those APIs so what I've just known for DataGarve so they have a bunch of APIs so what I did was I implemented in Graphical so I can query all that API here for example I want to get an environment I want to get a four day four cast I want to get PMI PSI so I can do that and then each of these actually one query one API query to the database but I'll make it so that the Graphical Resolver will do it concurrently and for the QAPI which is just coalesce to one query for example there's nothing in the resolver or in Graphical not Graphical there's mine mine so I have my own client that doesn't so Graphical doesn't care but run time run time to pass the query it's tight resolvers yeah I got it but no it's in go question so sorry that's where I think you are so doesn't it improve validation yes so validation for the query not for for example for the range probably like it shouldn't be modern for example okay there's validation built into Graphical visual will be the query or how you form a query and also the type for example if your query query requires for example this particular query takes in the deep time input which always which is someone stepping on my mouse sorry so this is of type deep time stream which is my one custom type so I I do marble validation for this custom type yes and then if if you usually input something it's not what you expect and we just throw an error for example this ID is expects an integer if I put it in a stream it will complain but in a graceful way what a message this argument ID as in the value expected int but this is built into Graphical input validation in terms of types in terms of range and stuff so you can implement yourself you can define your own input types and you can it's basically a program and that's also a weakness I think you personally answer my question for example by using the graph query we send a multiple query to the database for example we have inputs and each input has 100 lines so we have to send a few hundred query to the database so that's the input for example no doesn't matter so for example for my data I'll call Graphical so each of the fields is a separate API query so to Graphical doesn't specify okay I'm going to do it for you but you as an input will decide okay so if I have all this query I have my own logic and I'll call it as always the one query to batch it for Java script someone did a data loader or batch query loader that does that automatically but go there's no one as done before but if you want to do it go ahead and do it please do you have like post query or post action or post method or post cooking so after you resolve everything you write another or at the end of the no no it isn't totally please take you you can hook resolve function yeah resolve function you can wrap you can wrap that you can wrap that in something else but it's not the last thing you have in Graphical so what we're asking is can we include multiple events during different it may not be in Graphical but for example it could be you're routing for example you're routing you can accept middleware and then post middleware afterware so you can do that after query is that able to post middle and afterware so basically you run to middleware after the request accept but that's not I haven't studied sideways and what you've mentioned microservice is quite a bit and do you have are you using any of the frameworks here so right now my thing is I'm not using any framework for anything this framework so it's not a framework it's just a library it's a library it's a library it's like it's a standard I'm going to pass and we will so we have we post it's called Graphical Go and it's called Graphical right now we're waiting there's a few comments PR of 10 days because our call right now is to which parody of Graphical GS which is Graphical for not GS which is moving very fast but right now it's all kind of ready for fun Jadi, jika anda ada lebih banyak penerbangan, ada yang boleh membantu kami. Terutamanya untuk penerbangan. Seperti yang kita tahu, ini berlaku. Ia berlaku, tapi... Ya, tapi kita ada penerbangan yang penting. Tapi itu dia. Kita boleh cuba lagi. Saya berminat mengenai benchmark. Benchmark. Okey, pertama, kita akan bercakap tentang keadaan sekarang. Sebenarnya, keadaan kita sekarang, keadaan sekarang sebenarnya adalah performa untuk keadaan sekarang. Jadi, performa mengenai... Ia adalah perkara yang baik, tapi bukan perkara yang kita akan lakukan sekarang. Tapi seseorang membuat penerbangan untuk mengenai... penerbangan kita dengan penerbangan GraphFail. Tapi perkara itu, itu nampaknya lebih cepat. Sebenarnya, masalahnya... penerbangan ini adalah sebuah warna. Jadi, kita tidak... Penerbangan itu susah. Ya, penerbangan itu susah. Sebab itulah... Saya tahu... berapa banyak penerbangan ini. Baiklah, ada beberapa... Pertama, ada banyak... mempunyai refleksi... dan banyak penerbangan untuk Jason. Jadi, itu adalah layar, bukan? Saya tidak mahu kata seperti itu. Apa yang saya boleh beritahu? Saya boleh beritahu sebuah penerbangan untuk penerbangan... yang adalah... Jadi, ia mengambil penerbangan. Itu adalah penerbangan yang mengambil penerbangan untuk ASD3. Dan kemudian untuk ASD3, ia mengambil penerbangan... ia membuat penerbangan untuk ASD3. Dan ia mengambil penerbangan... yang ingin mengambil penerbangan untuk ASD3. Dan kita boleh beritahu. Tapi ada banyak penerbangan untuk ASD3. Ya... Ya, penerbangan kita... kita tidak boleh... menerimanya... kerana ia masih berlaku... tetapi kita cuba... Pada masa ini, ia tidak berlaku. Jadi, bagaimanapun... MBT, dan jika anda bercakap tentang penerbangan... seperti MBT, apakah penerbangan ini... sehingga menyebabkan penerbangan kita? Terima kasih. Terima kasih. Jadi, seperti yang saya katakan, penerbangan... ada penerbangan yang mengambil penerbangan untuk ASD3. Pada masa itu, ia berlaku... tetapi seseorang mengambil penerbangan untuk ASD3. Jadi, mungkin... ia akan lebih cepat. Pada masa itu? AS atau... AS? Oh, AS. Jadi, AS. Ia adalah penerbangan AS. Sebenarnya, penerbangan ini... tetapi... Kerana ia tidak... berlaku. Ada seseorang mengambil penerbangan. Baiklah. Mereka mempunyai penerbangan ASD3. Apabila... Ya. Sebenarnya... bagaimanapun... ada penerbangan ASD1, dan untuk penerbangan ASD2. Sebenarnya, penerbangan ASD3 ini... kita mempunyai penerbangan ASD41K dan penerbangan ASD34K. Kita tidak begitu berlaku. Kita tetap menerang ASD4. Pada masa itu? Ya. Ya. Jadi, perkara kedua... adalah lebih banyak tentang penerbangan ASD3. Tapi ini adalah penerbangan ASD4 yang berlaku. Ia harus... kita mempunyai penerbangan ASD4. Tapi, apabila... Ya, jika anda dapat membantu, dalam bahagian penerbangan ASD4, saya akan pergi ke sini. Kerana, saya sudah menggunakan penerbangan ASD4. Jadi, sesiapa lagi dengan lebih dari 2 tahun? Bagi ini, anda boleh membantu kami. Ya. Baiklah. Saya rasa itu... berendam semula, dan saya akan mencari yang lain. Saya akan mencabar ini. Jika anda mencari penerbangan ASD4, anda akan bekerja di penerbangan ASD4, dan kemudian, ada penerbangan ASD4 yang berkaitan, terdapat penerbangan ASD4, dan kemudian, anda akan menuju ke web saya, dan beberapa orang di penerbangan ASD4. Dan... Jika anda mencari penerbangan ASD4, tetapi anda tidak perlu mempunyai penerbangan ASD4, ada penerbangan ASD4, ada penerbangan ASD4, Ruby, Pine Python scale, saya suka mulakan Qerian terlebih dahulu daripada penerbangan ASD4. Saya menginginkan itu. Awak akan dapat bercakap lagi apakah awak akan melihat pakaian baterai ini? Tidak, terlalu! Baiklah, kata. Ya. Pada ASD4, saya akan mempunyai penerbangan ASD4, saya akan mempunyai penerbangan ASD4, jadi jika anda ingin mempunyai penerbangan ASD4, saya akan melihat penerbangan ASD4, Wert Rpunyai, Kompimi, dan Chris Rayman, perkara sejati yang lain. Ya. Saya akan berjumpa nanti. Saya akan berjumpa nanti. Saya akan berjumpa nanti.