ClarisTalk AI · the FileMaker AI podcast
Bonus Episode: Gabriel Woodger talks with Matt about amazing uses of AI and also JSON for 3D Rendering
Matt talks with Gabriel Woodger about a real-world example of AI to summarize complex invoices and projects so a customer can get a regular update of what's happening, and what is important. A great use case for sure. Also, and just as exciting, he shows incredible use of JSON for 3d rendering of kitchens, live and real-time in FileMaker. Check out his website: https://woodge.co.uk
Apple PodcastsSpotifyYouTubeAll episodes
Transcript
Transcribed by machine (whisper, large model), 15,222 words. Names and product terms are sometimes misheard; the audio is the record.
Claris Talk AI. We have a special episode of Claris Talk AI. I've got Gabriel Wujer. Welcome, sir. Hey. Hey. Good to be on the podcast. You and I met at a conference in Rome, I think, last year. Yeah, that's right. Yeah, Rome. I'm going to that conference again, and also Berlin. What are you going to this year? Yeah, I'm hoping to make it to either one or both of those. It was, yeah, FM Rome was kind of my first ever sort of FileMaker conference experience, which for someone who's done FileMaker maybe as long as I have, it's maybe slightly unusual not to have been able to make one previously. No, it's actually pretty common, I think. I think there's a lot of people in the same boat as you.
So I invited you on because really for two things. One, you have a... an AI solution in production that I'm super curious about. And two, when I met you, you and I nerded out really heavily about JSON, which is one of my favorite things. Yeah. And you have an insanely cool use of JSON that I wanted to get into a little bit. Yeah, yeah, no, absolutely. Yeah, I definitely can get into the weeds with JSON and all the fun stuff you can kind of do with it. Let's start with your AI stuff, though. Yeah, so I suppose a little bit about... a little bit of background about what I sort of do. So I'm sort of co-founder of a small sort of FileMaker development shop, and we have a vertical market solution, which is for kitchen manufacturers.
So it's a kind of quite a big system that covers everything from clients, CRM, through to a product catalog of different kind of kitchen cabinets and bits and pieces. And we do sort of 3D visualization. We do exporting to CNC. As well as all the kind of manufacturing processes and finance and accounting and all that kind of sort of standard ERP stuff. So it's quite a, quite a big solution we've sort of been doing for a number of years. So yeah, so that's kind of a, that part of it sounds like kind of a regular FileMaker solution. But the other thing that you have, which I think is not usual, is the 3D visualization part can, you can build a whole kitchen with hundreds of components and visualize it all the way down to the screw.
Yeah. And all of that is visual, is stored in a JSON object, re-renderable when changes are made to the order and visible inside FileMaker. Yeah, absolutely. So, so our whole thing is about like what we would call like parametrically sized cabinets. So you, so rather than it's being just always being exactly the same size, a kitchen tends to need to have things which are custom sized so that things fit in. So as a result, we don't really store the size of everything. What we store is a calculation and everything is kind of refreshed kind of, kind of from there. So as you create it on the fly, there's probably per product, there's probably thousands of calculations that have to happen to work out what the resulting size of that is because everything, everything is, is kind of, it is kind of, it's kind of dynamic.
So yeah. So like, so if you've got like a space that's an X wide and you've got you know, four cabinets that have to fit in there. And then the customer changes it and they want five. It has to measure the whole exact width, which might be like 2.62 meters and then redo the math to figure out. Yeah. That kind of stuff. Yeah, absolutely. So, so you might say, yeah, so in, in, in, in woodwork outside of the US, everything is millimeters. So we're kind of down to the, down, down, down to the millimeter, but yeah, everything needs to be dynamically sized, which makes things a lot more complex and it makes FileMaker a really great kind of tool. Yeah. I can, I can quickly give a lit, a little sort of demo if people want to see people who are on, who are on YouTube, I can sort of give a quick sort of visualization as it might kind of help explain what's sort of happening.
So yeah, this is our system. Nice image made by Dali here, which is might get into the AI conversation later, but, but I asked for a nice visualization of a, yeah, a piece of software for kitchen designers and it managed to bring all these bits and pieces kind of together. So yeah. Screen sharing. Stop there. Oh, are we, are we on there? Can you see? I can't right now. You can't. And then that stopped, I think. So people who are listening to the podcast, you can go to YouTube and search for Clarus talk AI and you should find it and subscribe. There we go. I see it. There we go. Okay. So yeah, this is, this is the sort of dash. This is the, um, the, the dashboard, uh, kind of of the site.
So yeah, here's a, a nice AI generated image. So I'm going to go into, into my catalog and I have a look at, um, a particular product. So here, this is an, maybe an eight 70 millimeter wide sort of floor cabinet. So my kind of cabinet visualizer, I'm just going to wipe it up in here and this is all sort of in real time. Yeah. So like a fraction of a second that loaded and now you're dragging it around in real time. Yeah. So this is, so this, this is kind of loading and actually what we can see each of these elements is you can see a little 3d view. So this is a web viewer. Inside of a file maker windows, these fields and buttons at the top are all file maker at the bottom here and everything kind of inside of this box in the middle is, is all drawn in, in a web viewer, sort of done in a way that the user can't really tell.
Um, but what we might see is we might see something like this panel on the side here. If we click this, this is driven by some calculations. So this is the height of the product and then it's a kind of a calculated width. Right. So the web viewer pops up a regular file. I'll make a card window. Kind of thing. Yeah. So, so, so the, the window in here, this is our file maker, these are portals and fields and bits and pieces we might be kind of expected to, but obviously inside of here is all an entire kind of, kind of, kind of 3d view. We can, as you might in a sort of 3d application, you can turn off different bits and pieces. We can write, we can kind of rotate the model.
Sweet. But what we can actually do in here is if we look at the width, let's say we wanted to make this narrower, we'll change this to 500, but this is now going to think maybe a second and a half. Wow. Now the doors are smaller. Yep. These have kind of, these are, these are kind of resized. We've got some elements in here, which are just boxes effectively. That's going to be a piece of wood and some things like a kind of like the handle in here. You can see that you can see the kind of handles in here. They're actually a 3d model, which is brought in and loaded into the model. So how much Jason is this? This is probably, if we look at the total Jason, it's probably around.
Uh, two megabytes worth of, worth of Jason, which, which kind of includes things like the textures, the, all the actual kind of, kind of, uh, kind of dimensions and other bits and pieces. So if I quit really quickly, if I load my script debugger and refresh, we'll have a look really quickly at what happens when we load our web viewer, open a new, open a new window and go off and do it. And in here we're, we're calling, um, loading some information. From, from, from the context around the size of the product. And then in here, we're actually then loading a custom function into here, which is loading in our actual, our actual kind of product Jason. So if we go down here, look at the kind of projects you can say, yeah, yeah, yeah, that's, that's a pages and pages of Jason.
Yeah. This is with base 64 and coded stuff too. Yeah. So, so, so, so it's a combination you'll see at the top is a kind of, you know, you might recognise there's an array of items inside of here. We've got objects, there's actually the 3d scene. So this is actually a Jason object, which in here, yeah, this is all base 64 encoded kind of data. So, so for things like those 3d models, that's coming in as base 64 encoded data, bits and pieces like that. And then we'll have some more items and some other, um, kind of bits and pieces down here. We can see actually, actually farm worker is actually pretty decent at, at kind of rendering that. It's good. It goes from the bits and pieces.
It loads it into there. And then it's going to write that out into the actual web viewer and set the kind of HTML content in here. So actually when we look, when we look at what's happening inside of the actual web viewer itself, if we look in here at the source, we can see we've got a bit of web code in here and then inside of here is all the data that has been written in by FileMaker. So we might see this particular shape. And it literally goes from moving a line, moving a line, moving a line, extruding it by a particular amount, applying a rotation, applying the mesh onto it, the textures, all those kinds of bits and pieces. Yeah. It looks like about three or 4,000 lines of code.
And this is just for one cabinet, right? So you can also visualize an entire kitchen with many of these cabinets, a bunch of different products like refrigerators and stuff like that. Okay, cool. Yeah. Yeah, absolutely. So, so what we might look at, this is just running in a web browser. It's not a web viewer just for kind of speed. Oh yeah. Yeah. A whole room. A whole room. And actually in here, what we might do is draw, start a floor plan. We're going to draw a room of a particular shape like this, which I'm drawing. It's great. Weird lines. Normal. Yeah. We can resize this if we need to. And then in our 3D view, we're able then to see the new room I've drawn, take our actual kitchen products, drag them around.
Yeah. Zoom into the tile on the floor. This is cool. So where does the AI part of this come in? I guess we actually just covered the really sweet Jason stuff I was going to talk about later. Yeah. So at the moment, I haven't found a way to do any cool stuff with this, with AI. I'm sure there is some useful stuff to be able to do with it. I think it'd be really cool if you could work out if things overlap each other, so if there's a problem with the calculations. If something's the wrong size, then giving it a big chunk of something and being able to actually do it from that perspective would be quite useful. But actually, the AI part of this, where I started with this was actually on our issue tracker.
So we have an internal issue tracker where our clients raise issues and other bits and pieces. But actually, what I thought is, "Okay, we've got an issue here which has been raised. We've got a bug. Here's a bunch of screenshots. Here's some history that's happened across it, and here's some tasks that need to be done." Right. And people might want to get an update about what's going to happen. And if you try and kind of put all of this into an email, there's quite a lot of information and it's not super clear actually what's happened. So one of the things I did is with just the chat GTP integration, which have this just generate a summary of the issue. So I'm basically taking all of the text.
I'm sort of looking up the list of the history or whatever, sending it to chat GTP with a prompt template, and saying, "Can you give me a summary of what's happened on here?" Yeah. So that's cool. So it's like all of the interactions with the customer, all of the responses you've had, and then it gives you like a one sentence or one paragraph summary of the support ticket, initiated by admin for the client, pertains to new test, bug currently in the internal testing, blah, blah, blah. Okay, cool. Yeah. So it's obviously, it's a relatively sort of simple implementation where we're using kind of chat GTP. So obviously it's not the most complex thing, but we can have a quick look at what happens in here.
So obviously we kind of go off, get the stored version about the information. And the main thing in here is just this variable in here, which just says, "Get a prompt." Mm-hmm. So if I look at what the function is in here, it basically says, "Can you write me a summary of this?" And then we've got some fields, which are referenced, and then we've got it in here. And then basically I've got an execute SQL, which says, "Right, well get me all of the timestamps in here." And kind of because we want it to sort of say activity, who it was by, and details, there's a nice little hack you can do, not a hack, a function of SQL, where you can kind of insert bits of text- Mm-hmm.
Between each of those values. So we can kind of say, "Right, this bit is the activity, this bit is who it's by, and this bit is the comment," to steer the model in terms of what's actually happening. And then we can see, yeah, we can provide a list of all the tasks, and then we can at least provide the file name and the description of the screenshots. Yeah, this is one page of code. Yeah, exactly. So this took me probably, I don't know, an hour and a half, two hours to implement and to train and stuff like that. And this actually, obviously, it then kind of goes off, gets the response and- Yeah, normal API response, it sends the whole query with all the data and then gets response.
Okay. So that's a really, I think that's a use that a lot of people are going to find useful. Like, take all this data that I've got and interpret it, summarize it, maybe even say, you know, what are... What's the timeframe? What are the things we're missing? Compare this one to other things that we've done, stuff like that. So what's... Are there any other uses you've done so far? And what's next? Yeah. So yeah. So in there, what... That's generating, sorry. Mm-hmm . Live trying to do a code demo is never all good for creative. That's always fun. The prompt. So yeah, I mean, effectively, what I sort of found, I looked at various different ways of getting the data- Mm-hmm .
... in a format that these language models... Mm-hmm . ... are going to be quite good at kind of responding to. And I sort of found that actually, you know, having these keywords like activity and then the details and things like that... Mm-hmm . ... is where I sort of had to kind of tweak it to try and get it to understand what information it's been given so that it can actually sort of summarize that. So rather than just listing the data, it was actually putting, "Well, this is a description. This is a status. This is a priority." Mm-hmm . Mm-hmm . And it's actually quite clever in terms of if info is missing. If you say like, you know, release date, colon, and then a space, it goes, "Well, we're missing a release date.
Maybe that's a piece of information that we should actually have." So I sort of started with that, and it was kind of quite good at generating just a summary, which is what you might expect, you know, like summarized. It makes me think that that would actually be a pretty cool kind of a dashboard thing. At the top level of the project or top level of the customer, to say, "These are the things that are missing." You know, we usually frequently all hard-code stuff like that and say, "Put an alert if this bit of data is missing." But using ChatGPT or using some sort of a LLM integration, you could get a much more meaningful summary of what is going on, what might be going on.
How do you consume that summary? Who's the target audience for that summary? So in this, the primary idea for this is an update email to say, "This is what's happening." So you can say, "Whenever something changes on an issue, create a kind of short summary." So I have like an email update, which is formatted and says, "Here's the bug, blah, blah, blah, blah, blah, blah." But they end up being really quite long. And you have to... There's not really an automated way to say, "Well, actually, the most recent pieces of information are the most interesting ones. The stuff that happened a certain amount of time ago is not as useful," so actually being able to do that.
So as a short little snippet that you can see, right, those issues that I have assigned to me or those issues that I've raised, here's an update about what has happened and what sort of has, you know... That's cool. That was the very kind of first thing I got into. Then I sort of thought, "Well, actually, that would be quite useful at an order level." So that's a task with issues and other bits and pieces. So this is all sort of sample data, so it's all sort of test and other bits and pieces like that. Sure. But actually, on an order, so this is one of the orders we have in our system, we might have... Yeah, normal stuff, line items, products. A bunch of line items.
We might have... Estimated delivery. A bunch of files attached. Attachment files, sure. We have some tasks that need doing, got some billing, other bits and pieces. We've got various sort of tasks that kind of happen in here. Yeah, quite involved. There's like eight tabs right there, yeah. Yeah, there's a whole load, and these may or may not... Because as a vertical market solution, all our customers use this in quite a different way. They've got loads of different options. Oh, yeah. And their billing templates are very different, and their billing templates are different. So everything... It then becomes very, very hard to custom code anything for any one customer, because you can't put the business logic into the system, because otherwise it doesn't work from one company to another company, which is where I think AI is great, because it can actually take that information, you give it, and rather than having to say, "Right, well, if one task is late, do something else.
If this... If these three things, then that's important, and if not, that's important from there." Right. Yeah, yeah. So really kind of analysis of the status. Yeah. So... Order insights, that's the feature that we're talking about here? Yeah. So I've sort of kind of named it order insights, as that's kind of... Is it sort of just sort of tell me what's happening with that order? Are there any issues? Is anything... Is anything that's kind of late? So in here, I'm kind of sending a... Yeah. I'm sending a bigger payload of data to kind of chat GTP, because there's more things involved in the order, and that takes a little bit of while, a little bit of time for that to be submitted and then kind of brought back.
I know Chris would ask like the token size, like how close are you to the limits of what GPT can do, and there's, of course, other models that handle like a million... I don't know if you know that information. Yeah. Yeah. Because the more information you send, it takes a little longer to get that response back. Well, it also has a ceiling. It can only take a certain amount of data right now. Yeah. Yeah, absolutely. And on an order, in our system, we might have maybe 30,000 records across different tables. Right. So you can't really, currently, it's not easy to send just all of that information. So you have to be a bit kind of... Clever about what stuff you take out, and you only send it stuff that may be relevant.
Yeah. Because if you send it... Well, yeah, let me summarize this for people listening. So it comes up with some bullet points, right? Based on the provided information for the order, these are the data inconsistencies, scheduled completion date for the order, and the delivery date are both in the past. Manufacture process scheduling, all manufacturing process have started. And so that's like something that's good. Completion status. Processes are marked as late with a completion percentage of 0%. Order status versus progress. This is really deep. Yeah. And it's what I found with the ChatGTP4 model over the maybe 3.5 version is that the 3.5 would sort of say, this is missing a date, that is here.
And it was a bit more parallel. Yeah. It was a bit more parroting back what you told it was. This is a bit more actually insightful, because it's sort of saying, well, actually, there's no indication that anything's happened, this order, even though the overall completion is at 5%, but none of the tasks are completed. So something is wrong there, and it's kind of right in that, yeah, something is wrong. Actually, if I look at my tech, it thinks my order is 5.4%, but actually nothing has been done. Right. Yeah, yeah, yeah. How many years of development do you have in this? In the overall system? Yeah. This system is probably seven years old, I would say. I think we've had it in market sort of four.
So as a result, it's quite big. There's quite a lot of kind of stuff in it. But to actually be able to get in there, and actually the fact it comes back, and it sort of seems daft, but this is marked down, so it comes down with like a bullet-pointed list and bits and pieces in here. Oh, sure. Mm-hmm. And it's really nice, really nice and really simple to kind of actually highlight that kind of information. Because actually, one of the things I want to do next with it, and that works great for an individual order, is then say, well, actually, given all of those order summaries, which ones need the most attention? Give me the top three that have something wrong.
So taking that individual kind of issue, feeding that in, and then saying, right, you know what? I'm the production manager, I'm the CEO, I want to see a dashboard, right? What stuff needs my attention first? And I think that's kind of a way of using multiple steps to kind of get a whole load of information that's too much for one human to look at down to a snapshot of picking things that, you know, that's inconsistent, that's not right. But then it'll actually tell me overall, which of my orders are going to cause me a problem, because, you know, they're... You know, they're massively overlaid or something like that. Right. Yeah. I could see that. I could see the huge value that this would give to your customers.
Yeah, absolutely. And then you can have them just like, have it just all run on like, at night or whatever, they can just run. I would guess that they... Do they have their own API key? Or if they share yours and you bill them for it or... Yeah. So at the moment, they use ours, but there's also the kind of the commercial aspect of it, which is obviously... Every query you do to open AI costs an amount of money for these of this sort of size that it's maybe, you know, four pence around, you know, maybe six cents in terms of US dollars, which isn't that much individually. But if you've got 500 orders on a system and you want to run those every single day, all of a sudden that starts adding up to actually a significant amount of actual cost for that.
Right. And for the customers, they need to see the return on investment, they sort of, you know, you can either read that cost yourself as a supplier and say, well, that's part of the overall system. Yeah. But someone could sit there and press that refresh button, you know. Oh yeah, yeah, yeah, exactly. Or you could have an AI algorithm to say, hey, you know, have it tuned to not spend a certain, too much money, you know. Yeah, yeah, exactly. So it's, yeah, it is one of those things and obviously with the context window, the more data you're sending. Yeah. It's more expensive. Each of those calls are, if it's a short one, if it's a few sentences, then it's not that many.
It's not that many tokens. It's not long tokens forwards and backwards, but I think there's almost a line where using like an off the shelf model, like ChatGTB is probably the more expensive way of doing it. Probably using an open source one and training it yourself a little bit more would be better for scale, I think. Yeah. Yeah. Yeah. Yeah. Yeah. Yeah. Yeah. Yeah. Yeah. Yeah. Yeah. Yeah. Yeah. Yeah. Yeah. Yeah. Yeah. Yeah. Yeah. Yeah. Yeah. Yeah, exactly. And then being able to train that model yourself based on, well, actually most of our clients, there's a whole load of that model, 99.999% of the information in there is not relevant to us at all. So there's no value to us, you know, being able to ask what the sports result is for something.
Well, yeah. But I mean, like Chris talks about, you don't ask ChatGTB. Yeah. Yeah. You don't ask ChatGPT for the facts about your data. You're using the engine to process and put it in language that's clear and to be able to know what to summarize. But all of the facts are in your data. So it's only looking at that. It's not looking at sports scores and other stuff like that to know what is true. Yeah. Yeah. Absolutely. Absolutely. Because I think where I'm at is I sort of feel like I'm just dipping my toe in the pond a little bit. Mm-hmm. Mm-hmm. Because I think where I'm at is like these are probably some of the maybe simpler things to do in terms of doing an insight to say, right, of this data, what's kind of important, obviously.
Yeah. Well, I mean, the thing I really see with this is this is gonna be super useful to like so many people to do that level of stuff and such great utility to solutions. Yeah. Absolutely. Yeah. I mean, and all that kind of vectorized search as soon as we're able to look at actually, well, these tasks and these queries. And being able to do that inside of FileMaker, obviously, sort of at the moment, the tools I've found within FileMaker to make it work are, you know, execute SQL is quite good. Yeah. Because I don't have to write a custom script to go off to layout one and do this, layout two and do that. Yeah. Layout three and do that. Also, what I've done is those prompt templates are customer specific, so I've had to put in a load of, you know, the commands at the front that says, "It doesn't matter if you're doing this.
It doesn't matter if this happens at the same time as this. It's not a problem that the tasks happen before this." Because otherwise, what it comes back is it doesn't really have a lot of context for that. And they're obviously specific per customer, so it's kind of, there's a bit of prompt engineering in there per customer to make the queries kind of return information that actually would be something they would be concerned about. And that's that kind of tweaking per task. Yeah. Yeah. And that's what I've done. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers.
And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers.
And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers.
And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers.
And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers.
And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers.
And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers.
And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers.
And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers.
And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers.
And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers.
And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers.
And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers.
And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers.
And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers.
And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers.
And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers.
And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers.
And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers.
And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers.
And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers.
And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers.
And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers.
And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers.
And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers.
And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers.
And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers.
And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers.
And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers.
And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers.
And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers.
And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers.
And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers.
And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers.
And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers.
And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers.
And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers.
And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers.
And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers.
And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers.
And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers.
And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers.
And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers.
And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers.
And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers.
And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers.
And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers.
And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers.
And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers.
And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers.
And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers.
And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers.
And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers.
And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers.
And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers.
And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers.
And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers.
And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers.
And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers.
And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers.
And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers.
And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers.
And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers.
And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers.
And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers.
And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers.
And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers.
And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers.
And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers.
And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers.
And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers.
And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers.
And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers.
And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers.
And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers.
And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers.
And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers.
And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers.
And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers.
And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers. And I've done that for a number of other customers.