-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy path.drawio
387 lines (387 loc) · 41.9 KB
/
.drawio
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
<mxfile host="app.diagrams.net" modified="2023-12-05T20:39:54.719Z" agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36" etag="5dxRXD1gbW_kQvm7P7tW" version="22.1.5" type="device">
<diagram name="Page-1" id="5f0bae14-7c28-e335-631c-24af17079c00">
<mxGraphModel dx="1684" dy="2190" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="1100" pageHeight="850" background="none" math="0" shadow="0">
<root>
<mxCell id="0" />
<mxCell id="1" parent="0" />
<mxCell id="39150e848f15840c-1" value="API" style="verticalAlign=top;align=left;spacingTop=8;spacingLeft=2;spacingRight=12;shape=cube;size=10;direction=south;fontStyle=4;html=1;rounded=0;shadow=0;comic=0;labelBackgroundColor=none;strokeWidth=1;fontFamily=Verdana;fontSize=12" parent="1" vertex="1">
<mxGeometry x="-210" y="-450" width="1510" height="885" as="geometry" />
</mxCell>
<mxCell id="39150e848f15840c-3" value="APP" style="verticalAlign=top;align=left;spacingTop=8;spacingLeft=2;spacingRight=12;shape=cube;size=10;direction=south;fontStyle=4;html=1;rounded=0;shadow=0;comic=0;labelBackgroundColor=none;strokeWidth=1;fontFamily=Verdana;fontSize=12" parent="1" vertex="1">
<mxGeometry x="-210" y="550" width="1520" height="710" as="geometry" />
</mxCell>
<mxCell id="39150e848f15840c-5" value="Images <br>Controller" style="shape=component;align=left;spacingLeft=36;rounded=0;shadow=0;comic=0;labelBackgroundColor=none;strokeWidth=1;fontFamily=Verdana;fontSize=12;html=1;" parent="1" vertex="1">
<mxGeometry x="130" y="230" width="110" height="115" as="geometry" />
</mxCell>
<mxCell id="39150e848f15840c-15" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;labelBackgroundColor=none;startArrow=none;startFill=0;startSize=8;endArrow=open;endFill=0;endSize=16;fontFamily=Verdana;fontSize=12;dashed=1;entryX=0.5;entryY=1;entryDx=0;entryDy=0;" parent="1" source="39150e848f15840c-5" target="XeWzCBWgDzsIYF1ibKdJ-19" edge="1">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="210" y="20" />
<mxPoint x="210" y="20" />
</Array>
<mxPoint x="150" y="30" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="XeWzCBWgDzsIYF1ibKdJ-2" value="" style="shape=flexArrow;endArrow=classic;startArrow=classic;html=1;rounded=0;entryX=1;entryY=0.811;entryDx=0;entryDy=0;entryPerimeter=0;exitX=-0.004;exitY=0.811;exitDx=0;exitDy=0;exitPerimeter=0;" parent="1" source="39150e848f15840c-3" target="39150e848f15840c-1" edge="1">
<mxGeometry width="100" height="100" relative="1" as="geometry">
<mxPoint x="340" y="520" as="sourcePoint" />
<mxPoint x="360" y="380" as="targetPoint" />
<Array as="points" />
</mxGeometry>
</mxCell>
<mxCell id="XeWzCBWgDzsIYF1ibKdJ-4" value="REST" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" parent="XeWzCBWgDzsIYF1ibKdJ-2" vertex="1" connectable="0">
<mxGeometry x="-0.2242" y="-2" relative="1" as="geometry">
<mxPoint x="1" y="-17" as="offset" />
</mxGeometry>
</mxCell>
<mxCell id="XeWzCBWgDzsIYF1ibKdJ-5" value="" style="shape=flexArrow;endArrow=classic;html=1;rounded=0;exitX=1.002;exitY=0.677;exitDx=0;exitDy=0;exitPerimeter=0;entryX=-0.001;entryY=0.678;entryDx=0;entryDy=0;entryPerimeter=0;" parent="1" source="39150e848f15840c-1" target="39150e848f15840c-3" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="410" y="510" as="sourcePoint" />
<mxPoint x="420" y="610" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="XeWzCBWgDzsIYF1ibKdJ-6" value="SSE" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" parent="XeWzCBWgDzsIYF1ibKdJ-5" vertex="1" connectable="0">
<mxGeometry x="0.036" y="4" relative="1" as="geometry">
<mxPoint x="-6" as="offset" />
</mxGeometry>
</mxCell>
<mxCell id="XeWzCBWgDzsIYF1ibKdJ-19" value="<p style="margin:0px;margin-top:4px;text-align:center;">&lt;&lt;interface&gt;&gt;<br style="border-color: var(--border-color); font-family: Verdana;">IImageController</p><hr size="1"><p style="margin:0px;margin-left:4px;">+ GetFullImage() (thumbnails + photo)<br>+ GetImage(string)</p><p style="margin:0px;margin-left:4px;">+ GetThumbnails(string) returns 3 photos&nbsp;</p><p style="margin:0px;margin-left:4px;">+ GetThumbnail(string, int) returns photo in size<br></p><p style="margin:0px;margin-left:4px;">+ RemoveImage(string)</p><p style="margin:0px;margin-left:4px;">+ GetLightImages()</p>" style="verticalAlign=top;align=left;overflow=fill;fontSize=12;fontFamily=Helvetica;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="70" y="-130" width="280" height="140" as="geometry" />
</mxCell>
<mxCell id="XeWzCBWgDzsIYF1ibKdJ-20" value="<p style="margin:0px;margin-top:4px;text-align:center;">&lt;&lt;interface&gt;&gt;<br style="border-color: var(--border-color); font-family: Verdana;">IImageProcessorController</p><hr size="1"><p style="margin:0px;margin-left:4px;">+ ProcessZip(string)<br>+ ProcessImage(string)</p>" style="verticalAlign=top;align=left;overflow=fill;fontSize=12;fontFamily=Helvetica;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="-170" y="30" width="280" height="85" as="geometry" />
</mxCell>
<mxCell id="XeWzCBWgDzsIYF1ibKdJ-21" value="ImageProcessorController" style="shape=component;align=left;spacingLeft=36;rounded=0;shadow=0;comic=0;labelBackgroundColor=none;strokeWidth=1;fontFamily=Verdana;fontSize=12;html=1;" parent="1" vertex="1">
<mxGeometry x="-140" y="230" width="220" height="115" as="geometry" />
</mxCell>
<mxCell id="XeWzCBWgDzsIYF1ibKdJ-22" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;labelBackgroundColor=none;startArrow=none;startFill=0;startSize=8;endArrow=open;endFill=0;endSize=16;fontFamily=Verdana;fontSize=12;dashed=1;entryX=0.5;entryY=1;entryDx=0;entryDy=0;" parent="1" source="XeWzCBWgDzsIYF1ibKdJ-21" target="XeWzCBWgDzsIYF1ibKdJ-20" edge="1">
<mxGeometry relative="1" as="geometry">
<Array as="points" />
<mxPoint x="480" y="-250" as="sourcePoint" />
<mxPoint x="220" y="-20" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="XeWzCBWgDzsIYF1ibKdJ-23" value="<p style="margin:0px;margin-top:4px;text-align:center;">&lt;&lt;interface&gt;&gt;<br style="border-color: var(--border-color); font-family: Verdana;">IQueueRepository</p><hr size="1"><p style="margin:0px;margin-left:4px;">+ CreateImageAndThumbnailsToProcess()</p><p style="margin:0px;margin-left:4px;">+ ThumbnailProcessed()</p>" style="verticalAlign=top;align=left;overflow=fill;fontSize=12;fontFamily=Helvetica;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="730" y="-270" width="280" height="80" as="geometry" />
</mxCell>
<mxCell id="XeWzCBWgDzsIYF1ibKdJ-24" value="<p style="margin:0px;margin-top:4px;text-align:center;">&lt;&lt;interface&gt;&gt;<br style="border-color: var(--border-color); font-family: Verdana;">IImageQueue</p><hr size="1"><p style="margin:0px;margin-left:4px;">field: isOverloadedQueue</p><p style="margin:0px;margin-left:4px;">field: lastOverloadTime</p><p style="margin:0px;margin-left:4px;"><br></p><p style="margin:0px;margin-left:4px;">+ PrepareQueue() - in case of 500 drop</p><p style="margin:0px;margin-left:4px;">+ AddImageToQueue(ImageToProcess)</p><p style="margin:0px;margin-left:4px;">+ GetImageToProcess()</p><p style="margin:0px;margin-left:4px;">+ IsEmpty()</p>" style="verticalAlign=top;align=left;overflow=fill;fontSize=12;fontFamily=Helvetica;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="560" y="-160" width="280" height="150" as="geometry" />
</mxCell>
<mxCell id="XeWzCBWgDzsIYF1ibKdJ-25" value="<p style="margin:0px;margin-top:4px;text-align:center;">&lt;&lt;interface&gt;&gt;<br style="border-color: var(--border-color); font-family: Verdana;">IImageProcessor</p><hr size="1"><p style="margin:0px;margin-left:4px;">+ ProcessingLoop()</p>" style="verticalAlign=top;align=left;overflow=fill;fontSize=12;fontFamily=Helvetica;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="900" y="-85" width="280" height="85" as="geometry" />
</mxCell>
<mxCell id="XeWzCBWgDzsIYF1ibKdJ-26" value="<p style="margin:0px;margin-top:4px;text-align:center;"><b>ImageQueue</b><span style="background-color: initial; text-align: left;">&nbsp;</span></p>" style="verticalAlign=top;align=left;overflow=fill;fontSize=12;fontFamily=Helvetica;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="630" y="170" width="140" height="30" as="geometry" />
</mxCell>
<mxCell id="XeWzCBWgDzsIYF1ibKdJ-28" value="Uses" style="endArrow=open;endSize=12;dashed=1;html=1;rounded=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;exitX=0.5;exitY=0;exitDx=0;exitDy=0;" parent="1" source="XeWzCBWgDzsIYF1ibKdJ-21" target="XeWzCBWgDzsIYF1ibKdJ-26" edge="1">
<mxGeometry x="-0.5896" y="-2" width="160" relative="1" as="geometry">
<mxPoint x="560" y="50" as="sourcePoint" />
<mxPoint x="720" y="50" as="targetPoint" />
<Array as="points" />
<mxPoint as="offset" />
</mxGeometry>
</mxCell>
<mxCell id="XeWzCBWgDzsIYF1ibKdJ-29" value="Uses" style="endArrow=open;endSize=12;dashed=1;html=1;rounded=0;exitX=0.75;exitY=0;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" parent="1" source="39150e848f15840c-5" target="XeWzCBWgDzsIYF1ibKdJ-26" edge="1">
<mxGeometry x="-0.272" y="-1" width="160" relative="1" as="geometry">
<mxPoint x="400" y="240" as="sourcePoint" />
<mxPoint x="640" y="180" as="targetPoint" />
<mxPoint as="offset" />
</mxGeometry>
</mxCell>
<mxCell id="XeWzCBWgDzsIYF1ibKdJ-30" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;labelBackgroundColor=none;startArrow=none;startFill=0;startSize=8;endArrow=open;endFill=0;endSize=16;fontFamily=Verdana;fontSize=12;dashed=1;entryX=0.5;entryY=1;entryDx=0;entryDy=0;exitX=0.5;exitY=0;exitDx=0;exitDy=0;" parent="1" source="XeWzCBWgDzsIYF1ibKdJ-26" target="XeWzCBWgDzsIYF1ibKdJ-24" edge="1">
<mxGeometry relative="1" as="geometry">
<Array as="points" />
<mxPoint x="400" y="240" as="sourcePoint" />
<mxPoint x="400" y="90" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="XeWzCBWgDzsIYF1ibKdJ-32" value="ImageProcessorBackgroudnJob" style="html=1;dropTarget=0;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="930" y="242.5" width="220" height="90" as="geometry" />
</mxCell>
<mxCell id="XeWzCBWgDzsIYF1ibKdJ-33" value="" style="shape=module;jettyWidth=8;jettyHeight=4;" parent="XeWzCBWgDzsIYF1ibKdJ-32" vertex="1">
<mxGeometry x="1" width="20" height="20" relative="1" as="geometry">
<mxPoint x="-27" y="7" as="offset" />
</mxGeometry>
</mxCell>
<mxCell id="XeWzCBWgDzsIYF1ibKdJ-34" value="Uses" style="endArrow=open;endSize=12;dashed=1;html=1;rounded=0;entryX=1;entryY=0.5;entryDx=0;entryDy=0;exitX=0.5;exitY=0;exitDx=0;exitDy=0;" parent="1" source="XeWzCBWgDzsIYF1ibKdJ-32" target="XeWzCBWgDzsIYF1ibKdJ-26" edge="1">
<mxGeometry width="160" relative="1" as="geometry">
<mxPoint x="400" y="240" as="sourcePoint" />
<mxPoint x="620" y="180" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="XeWzCBWgDzsIYF1ibKdJ-36" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;labelBackgroundColor=none;startArrow=none;startFill=0;startSize=8;endArrow=open;endFill=0;endSize=16;fontFamily=Verdana;fontSize=12;dashed=1;entryX=0.5;entryY=1;entryDx=0;entryDy=0;exitX=0.5;exitY=0;exitDx=0;exitDy=0;" parent="1" source="XeWzCBWgDzsIYF1ibKdJ-32" target="XeWzCBWgDzsIYF1ibKdJ-25" edge="1">
<mxGeometry relative="1" as="geometry">
<Array as="points" />
<mxPoint x="620" y="150" as="sourcePoint" />
<mxPoint x="620" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="XeWzCBWgDzsIYF1ibKdJ-37" value="<p style="margin:0px;margin-top:4px;text-align:center;">&lt;&lt;interface&gt;&gt;<br style="border-color: var(--border-color); font-family: Verdana;">IImageRepository</p><hr size="1"><p style="margin:0px;margin-left:4px;">+ AddImage(string<span style="background-color: initial;">)</span></p><p style="margin:0px;margin-left:4px;"><span style="background-color: initial;">+ RemoveImage(string)</span></p><p style="margin:0px;margin-left:4px;">+ GetImage(string)</p><p style="margin:0px;margin-left:4px;">+ GetImages()</p>" style="verticalAlign=top;align=left;overflow=fill;fontSize=12;fontFamily=Helvetica;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="230" y="-270" width="280" height="110" as="geometry" />
</mxCell>
<mxCell id="XeWzCBWgDzsIYF1ibKdJ-38" value="Database" style="verticalAlign=top;align=left;spacingTop=8;spacingLeft=2;spacingRight=12;shape=cube;size=10;direction=south;fontStyle=4;html=1;rounded=0;shadow=0;comic=0;labelBackgroundColor=none;strokeWidth=1;fontFamily=Verdana;fontSize=12" parent="1" vertex="1">
<mxGeometry x="250" y="-1320" width="550" height="600" as="geometry" />
</mxCell>
<mxCell id="XeWzCBWgDzsIYF1ibKdJ-40" value="ImageTable" style="swimlane;fontStyle=0;childLayout=stackLayout;horizontal=1;startSize=26;fillColor=none;horizontalStack=0;resizeParent=1;resizeParentMax=0;resizeLast=0;collapsible=1;marginBottom=0;whiteSpace=wrap;html=1;" parent="1" vertex="1">
<mxGeometry x="320" y="-1240" width="160" height="130" as="geometry">
<mxRectangle x="110" y="-1250" width="100" height="30" as="alternateBounds" />
</mxGeometry>
</mxCell>
<mxCell id="XeWzCBWgDzsIYF1ibKdJ-41" value="+ Id: string" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" parent="XeWzCBWgDzsIYF1ibKdJ-40" vertex="1">
<mxGeometry y="26" width="160" height="26" as="geometry" />
</mxCell>
<mxCell id="XeWzCBWgDzsIYF1ibKdJ-42" value="+ Image: blob" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" parent="XeWzCBWgDzsIYF1ibKdJ-40" vertex="1">
<mxGeometry y="52" width="160" height="26" as="geometry" />
</mxCell>
<mxCell id="XeWzCBWgDzsIYF1ibKdJ-43" value="+ createdAt: datetime<br>" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" parent="XeWzCBWgDzsIYF1ibKdJ-40" vertex="1">
<mxGeometry y="78" width="160" height="26" as="geometry" />
</mxCell>
<mxCell id="XeWzCBWgDzsIYF1ibKdJ-44" value="+ processedAt: datetime" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" parent="XeWzCBWgDzsIYF1ibKdJ-40" vertex="1">
<mxGeometry y="104" width="160" height="26" as="geometry" />
</mxCell>
<mxCell id="XeWzCBWgDzsIYF1ibKdJ-55" value="ThumbnailTable" style="swimlane;fontStyle=0;childLayout=stackLayout;horizontal=1;startSize=26;fillColor=none;horizontalStack=0;resizeParent=1;resizeParentMax=0;resizeLast=0;collapsible=1;marginBottom=0;whiteSpace=wrap;html=1;" parent="1" vertex="1">
<mxGeometry x="320" y="-1040" width="160" height="182" as="geometry">
<mxRectangle x="110" y="-1250" width="100" height="30" as="alternateBounds" />
</mxGeometry>
</mxCell>
<mxCell id="XeWzCBWgDzsIYF1ibKdJ-62" value="+ Id: string<br><br>" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" parent="XeWzCBWgDzsIYF1ibKdJ-55" vertex="1">
<mxGeometry y="26" width="160" height="26" as="geometry" />
</mxCell>
<mxCell id="XeWzCBWgDzsIYF1ibKdJ-56" value="+ ImageId: string<br>" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" parent="XeWzCBWgDzsIYF1ibKdJ-55" vertex="1">
<mxGeometry y="52" width="160" height="26" as="geometry" />
</mxCell>
<mxCell id="XeWzCBWgDzsIYF1ibKdJ-57" value="+ Image: blob" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" parent="XeWzCBWgDzsIYF1ibKdJ-55" vertex="1">
<mxGeometry y="78" width="160" height="26" as="geometry" />
</mxCell>
<mxCell id="XeWzCBWgDzsIYF1ibKdJ-78" value="+ Type: int" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" parent="XeWzCBWgDzsIYF1ibKdJ-55" vertex="1">
<mxGeometry y="104" width="160" height="26" as="geometry" />
</mxCell>
<mxCell id="XeWzCBWgDzsIYF1ibKdJ-58" value="+ createdAt: datetime<br>" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" parent="XeWzCBWgDzsIYF1ibKdJ-55" vertex="1">
<mxGeometry y="130" width="160" height="26" as="geometry" />
</mxCell>
<mxCell id="XeWzCBWgDzsIYF1ibKdJ-59" value="+ processedAt: datetime" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" parent="XeWzCBWgDzsIYF1ibKdJ-55" vertex="1">
<mxGeometry y="156" width="160" height="26" as="geometry" />
</mxCell>
<mxCell id="XeWzCBWgDzsIYF1ibKdJ-73" value="ImageQueueTable" style="swimlane;fontStyle=0;childLayout=stackLayout;horizontal=1;startSize=26;fillColor=none;horizontalStack=0;resizeParent=1;resizeParentMax=0;resizeLast=0;collapsible=1;marginBottom=0;whiteSpace=wrap;html=1;" parent="1" vertex="1">
<mxGeometry x="600" y="-1240" width="160" height="130" as="geometry">
<mxRectangle x="110" y="-1250" width="100" height="30" as="alternateBounds" />
</mxGeometry>
</mxCell>
<mxCell id="XeWzCBWgDzsIYF1ibKdJ-74" value="+ Id: string" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" parent="XeWzCBWgDzsIYF1ibKdJ-73" vertex="1">
<mxGeometry y="26" width="160" height="26" as="geometry" />
</mxCell>
<mxCell id="XeWzCBWgDzsIYF1ibKdJ-75" value="+ ImageId: string" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" parent="XeWzCBWgDzsIYF1ibKdJ-73" vertex="1">
<mxGeometry y="52" width="160" height="26" as="geometry" />
</mxCell>
<mxCell id="XeWzCBWgDzsIYF1ibKdJ-85" value="+ Type: int" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" parent="XeWzCBWgDzsIYF1ibKdJ-73" vertex="1">
<mxGeometry y="78" width="160" height="26" as="geometry" />
</mxCell>
<mxCell id="XeWzCBWgDzsIYF1ibKdJ-76" value="+ createdAt: datetime<br>" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" parent="XeWzCBWgDzsIYF1ibKdJ-73" vertex="1">
<mxGeometry y="104" width="160" height="26" as="geometry" />
</mxCell>
<mxCell id="XeWzCBWgDzsIYF1ibKdJ-82" value="" style="endArrow=open;html=1;endSize=12;startArrow=diamondThin;startSize=14;startFill=0;edgeStyle=orthogonalEdgeStyle;rounded=0;entryX=0.499;entryY=0.996;entryDx=0;entryDy=0;entryPerimeter=0;exitX=0.5;exitY=0;exitDx=0;exitDy=0;" parent="1" source="XeWzCBWgDzsIYF1ibKdJ-55" target="XeWzCBWgDzsIYF1ibKdJ-44" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="450" y="-1070" as="sourcePoint" />
<mxPoint x="610" y="-1070" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="XeWzCBWgDzsIYF1ibKdJ-83" value="0-3" style="edgeLabel;resizable=0;html=1;align=left;verticalAlign=top;" parent="XeWzCBWgDzsIYF1ibKdJ-82" connectable="0" vertex="1">
<mxGeometry x="-1" relative="1" as="geometry">
<mxPoint x="10" y="-30" as="offset" />
</mxGeometry>
</mxCell>
<mxCell id="XeWzCBWgDzsIYF1ibKdJ-84" value="1" style="edgeLabel;resizable=0;html=1;align=right;verticalAlign=top;" parent="XeWzCBWgDzsIYF1ibKdJ-82" connectable="0" vertex="1">
<mxGeometry x="1" relative="1" as="geometry">
<mxPoint x="-3" y="11" as="offset" />
</mxGeometry>
</mxCell>
<mxCell id="XeWzCBWgDzsIYF1ibKdJ-90" value="" style="endArrow=open;html=1;endSize=12;startArrow=diamondThin;startSize=14;startFill=0;edgeStyle=orthogonalEdgeStyle;rounded=0;entryX=1;entryY=0.5;entryDx=0;entryDy=0;exitX=0;exitY=0.5;exitDx=0;exitDy=0;" parent="1" source="XeWzCBWgDzsIYF1ibKdJ-75" target="XeWzCBWgDzsIYF1ibKdJ-42" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="410" y="-1030" as="sourcePoint" />
<mxPoint x="410" y="-1100" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="XeWzCBWgDzsIYF1ibKdJ-92" value="1" style="edgeLabel;resizable=0;html=1;align=right;verticalAlign=top;" parent="XeWzCBWgDzsIYF1ibKdJ-90" connectable="0" vertex="1">
<mxGeometry x="1" relative="1" as="geometry">
<mxPoint x="-3" y="11" as="offset" />
</mxGeometry>
</mxCell>
<mxCell id="XeWzCBWgDzsIYF1ibKdJ-93" value="0-1" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" parent="XeWzCBWgDzsIYF1ibKdJ-90" vertex="1" connectable="0">
<mxGeometry x="-0.8422" y="1" relative="1" as="geometry">
<mxPoint y="14" as="offset" />
</mxGeometry>
</mxCell>
<mxCell id="XeWzCBWgDzsIYF1ibKdJ-94" value="<p style="margin:0px;margin-top:4px;text-align:center;">&lt;&lt;interface&gt;&gt;<br style="border-color: var(--border-color); font-family: Verdana;">IThumbnailRepository</p><hr size="1"><p style="margin:0px;margin-left:4px;">+ AddThumbanil(string<span style="background-color: initial;">)</span></p><p style="margin:0px;margin-left:4px;"><span style="background-color: initial;">+ RemoveThumbnails(string)</span></p><p style="margin:0px;margin-left:4px;">+ GetThumbnail(string)</p><p style="margin:0px;margin-left:4px;">+ GetThumbnails()</p>" style="verticalAlign=top;align=left;overflow=fill;fontSize=12;fontFamily=Helvetica;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="390" y="-410" width="280" height="110" as="geometry" />
</mxCell>
<mxCell id="XeWzCBWgDzsIYF1ibKdJ-95" value="<p style="margin:0px;margin-top:4px;text-align:center;"><b>ImageRepository</b></p><p style="margin:0px;margin-top:4px;text-align:center;"><b><br></b></p>" style="verticalAlign=top;align=left;overflow=fill;fontSize=12;fontFamily=Helvetica;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="300" y="30" width="140" height="30" as="geometry" />
</mxCell>
<mxCell id="XeWzCBWgDzsIYF1ibKdJ-96" value="<p style="margin:0px;margin-top:4px;text-align:center;"><b>ThumbnailRepository</b></p>" style="verticalAlign=top;align=left;overflow=fill;fontSize=12;fontFamily=Helvetica;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="460" y="30" width="140" height="30" as="geometry" />
</mxCell>
<mxCell id="XeWzCBWgDzsIYF1ibKdJ-97" value="<p style="margin:0px;margin-top:4px;text-align:center;"><b>QueueRepository</b></p><p style="margin:0px;margin-top:4px;text-align:center;"><b><br></b></p>" style="verticalAlign=top;align=left;overflow=fill;fontSize=12;fontFamily=Helvetica;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="800" y="30" width="140" height="30" as="geometry" />
</mxCell>
<mxCell id="XeWzCBWgDzsIYF1ibKdJ-98" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;labelBackgroundColor=none;startArrow=none;startFill=0;startSize=8;endArrow=open;endFill=0;endSize=16;fontFamily=Verdana;fontSize=12;dashed=1;exitX=0.5;exitY=0;exitDx=0;exitDy=0;entryX=0.5;entryY=1;entryDx=0;entryDy=0;" parent="1" source="XeWzCBWgDzsIYF1ibKdJ-97" target="XeWzCBWgDzsIYF1ibKdJ-23" edge="1">
<mxGeometry relative="1" as="geometry">
<Array as="points" />
<mxPoint x="10" y="-255" as="sourcePoint" />
<mxPoint x="870" y="-170" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="XeWzCBWgDzsIYF1ibKdJ-99" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;labelBackgroundColor=none;startArrow=none;startFill=0;startSize=8;endArrow=open;endFill=0;endSize=16;fontFamily=Verdana;fontSize=12;dashed=1;entryX=0.5;entryY=1;entryDx=0;entryDy=0;exitX=0.5;exitY=0;exitDx=0;exitDy=0;" parent="1" source="XeWzCBWgDzsIYF1ibKdJ-95" target="XeWzCBWgDzsIYF1ibKdJ-37" edge="1">
<mxGeometry relative="1" as="geometry">
<Array as="points" />
<mxPoint x="240" y="-330" as="sourcePoint" />
<mxPoint x="240" y="-525" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="XeWzCBWgDzsIYF1ibKdJ-100" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;labelBackgroundColor=none;startArrow=none;startFill=0;startSize=8;endArrow=open;endFill=0;endSize=16;fontFamily=Verdana;fontSize=12;dashed=1;entryX=0.5;entryY=1;entryDx=0;entryDy=0;exitX=0.5;exitY=0;exitDx=0;exitDy=0;" parent="1" source="XeWzCBWgDzsIYF1ibKdJ-96" target="XeWzCBWgDzsIYF1ibKdJ-94" edge="1">
<mxGeometry relative="1" as="geometry">
<Array as="points" />
<mxPoint x="420" y="-330" as="sourcePoint" />
<mxPoint x="420" y="-375" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="XeWzCBWgDzsIYF1ibKdJ-101" value="Uses" style="endArrow=open;endSize=12;dashed=1;html=1;rounded=0;entryX=0.5;entryY=1;entryDx=0;entryDy=0;exitX=0.75;exitY=0;exitDx=0;exitDy=0;" parent="1" source="39150e848f15840c-5" target="XeWzCBWgDzsIYF1ibKdJ-95" edge="1">
<mxGeometry width="160" relative="1" as="geometry">
<mxPoint x="300" y="160" as="sourcePoint" />
<mxPoint x="710" y="180" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="XeWzCBWgDzsIYF1ibKdJ-102" value="Uses" style="endArrow=open;endSize=12;dashed=1;html=1;rounded=0;entryX=0.5;entryY=1;entryDx=0;entryDy=0;exitX=0.5;exitY=0;exitDx=0;exitDy=0;" parent="1" source="XeWzCBWgDzsIYF1ibKdJ-26" target="XeWzCBWgDzsIYF1ibKdJ-97" edge="1">
<mxGeometry x="0.2878" y="-1" width="160" relative="1" as="geometry">
<mxPoint x="223" y="240" as="sourcePoint" />
<mxPoint x="380" y="140" as="targetPoint" />
<mxPoint as="offset" />
</mxGeometry>
</mxCell>
<mxCell id="XeWzCBWgDzsIYF1ibKdJ-103" value="Uses" style="endArrow=open;endSize=12;dashed=1;html=1;rounded=0;entryX=0.5;entryY=1;entryDx=0;entryDy=0;exitX=0.75;exitY=0;exitDx=0;exitDy=0;" parent="1" source="39150e848f15840c-5" target="XeWzCBWgDzsIYF1ibKdJ-96" edge="1">
<mxGeometry width="160" relative="1" as="geometry">
<mxPoint x="223" y="240" as="sourcePoint" />
<mxPoint x="380" y="140" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="XeWzCBWgDzsIYF1ibKdJ-104" value="Uses" style="endArrow=open;endSize=12;dashed=1;html=1;rounded=0;entryX=0.5;entryY=1;entryDx=0;entryDy=0;exitX=0.5;exitY=0;exitDx=0;exitDy=0;" parent="1" source="XeWzCBWgDzsIYF1ibKdJ-32" target="XeWzCBWgDzsIYF1ibKdJ-97" edge="1">
<mxGeometry width="160" relative="1" as="geometry">
<mxPoint x="710" y="150" as="sourcePoint" />
<mxPoint x="880" y="70" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="XeWzCBWgDzsIYF1ibKdJ-105" value="Uses" style="endArrow=open;endSize=12;dashed=1;html=1;rounded=0;entryX=0.5;entryY=1;entryDx=0;entryDy=0;exitX=0.5;exitY=0;exitDx=0;exitDy=0;" parent="1" source="XeWzCBWgDzsIYF1ibKdJ-32" target="XeWzCBWgDzsIYF1ibKdJ-96" edge="1">
<mxGeometry x="-0.3313" y="-2" width="160" relative="1" as="geometry">
<mxPoint x="1020" y="200" as="sourcePoint" />
<mxPoint x="880" y="70" as="targetPoint" />
<mxPoint x="-1" as="offset" />
</mxGeometry>
</mxCell>
<mxCell id="XeWzCBWgDzsIYF1ibKdJ-106" value="<p style="margin:0px;margin-top:4px;text-align:center;">&lt;&lt;interface&gt;&gt;<br style="border-color: var(--border-color); font-family: Verdana;">IProcessService</p><hr size="1"><p style="margin:0px;margin-left:4px;">+ ProcessZip(string)<br style="border-color: var(--border-color);">+ ProcessImage(string)<br></p>" style="verticalAlign=top;align=left;overflow=fill;fontSize=12;fontFamily=Helvetica;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="-105" y="610" width="190" height="85" as="geometry" />
</mxCell>
<mxCell id="XeWzCBWgDzsIYF1ibKdJ-109" value="<p style="margin:0px;margin-top:4px;text-align:center;">&lt;&lt;interface&gt;&gt;<br style="border-color: var(--border-color); font-family: Verdana;">IImageService</p><hr size="1"><p style="border-color: var(--border-color); margin: 0px 0px 0px 4px;">+ GetFullImage() (thumbnails + photo)<br style="border-color: var(--border-color);">+ GetImage(string)</p><p style="border-color: var(--border-color); margin: 0px 0px 0px 4px;">+ GetThumbnails(string) returns 3 photos&nbsp;</p><p style="border-color: var(--border-color); margin: 0px 0px 0px 4px;">+ GetThumbnail(string, int) returns photo in size<br style="border-color: var(--border-color);"></p><p style="border-color: var(--border-color); margin: 0px 0px 0px 4px;">+ RemoveImage(string)</p><p style="margin:0px;margin-left:4px;">+ GetLightImages()&nbsp;</p>" style="verticalAlign=top;align=left;overflow=fill;fontSize=12;fontFamily=Helvetica;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="577.5" y="610" width="280" height="140" as="geometry" />
</mxCell>
<mxCell id="XeWzCBWgDzsIYF1ibKdJ-110" value="ImageBackgroundWorker" style="html=1;dropTarget=0;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="607.5" y="958.75" width="220" height="90" as="geometry" />
</mxCell>
<mxCell id="XeWzCBWgDzsIYF1ibKdJ-111" value="" style="shape=module;jettyWidth=8;jettyHeight=4;" parent="XeWzCBWgDzsIYF1ibKdJ-110" vertex="1">
<mxGeometry x="1" width="20" height="20" relative="1" as="geometry">
<mxPoint x="-27" y="7" as="offset" />
</mxGeometry>
</mxCell>
<mxCell id="XeWzCBWgDzsIYF1ibKdJ-112" value="ProcessService" style="html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="-65" y="790" width="110" height="50" as="geometry" />
</mxCell>
<mxCell id="XeWzCBWgDzsIYF1ibKdJ-113" value="ImageService" style="html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="662.5" y="788.75" width="110" height="50" as="geometry" />
</mxCell>
<mxCell id="XeWzCBWgDzsIYF1ibKdJ-115" value="" style="html=1;verticalAlign=bottom;endArrow=open;dashed=1;endSize=8;curved=0;rounded=0;entryX=0.5;entryY=1;entryDx=0;entryDy=0;exitX=0.5;exitY=0;exitDx=0;exitDy=0;" parent="1" source="XeWzCBWgDzsIYF1ibKdJ-112" target="XeWzCBWgDzsIYF1ibKdJ-106" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="120" y="790" as="sourcePoint" />
<mxPoint x="40" y="790" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="XeWzCBWgDzsIYF1ibKdJ-116" value="" style="html=1;verticalAlign=bottom;endArrow=open;dashed=1;endSize=8;curved=0;rounded=0;entryX=0.5;entryY=1;entryDx=0;entryDy=0;" parent="1" source="XeWzCBWgDzsIYF1ibKdJ-113" target="XeWzCBWgDzsIYF1ibKdJ-109" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint y="790" as="sourcePoint" />
<mxPoint y="705" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="XeWzCBWgDzsIYF1ibKdJ-117" value="ImageCache" style="html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="135" y="790" width="165" height="50" as="geometry" />
</mxCell>
<mxCell id="XeWzCBWgDzsIYF1ibKdJ-118" value="" style="html=1;verticalAlign=bottom;endArrow=open;dashed=1;endSize=8;curved=0;rounded=0;entryX=0.5;entryY=1;entryDx=0;entryDy=0;exitX=0.5;exitY=0;exitDx=0;exitDy=0;" parent="1" source="XeWzCBWgDzsIYF1ibKdJ-110" target="XeWzCBWgDzsIYF1ibKdJ-113" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="310" y="790" as="sourcePoint" />
<mxPoint x="310" y="760" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="XeWzCBWgDzsIYF1ibKdJ-119" value="" style="html=1;verticalAlign=bottom;endArrow=open;dashed=1;endSize=8;curved=0;rounded=0;entryX=0.5;entryY=1;entryDx=0;entryDy=0;exitX=0.5;exitY=0;exitDx=0;exitDy=0;" parent="1" source="XeWzCBWgDzsIYF1ibKdJ-110" target="XeWzCBWgDzsIYF1ibKdJ-117" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="310" y="960" as="sourcePoint" />
<mxPoint x="310" y="840" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="XeWzCBWgDzsIYF1ibKdJ-120" value="LoadingService / RefreshService" style="html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="380" y="790" width="165" height="50" as="geometry" />
</mxCell>
<mxCell id="XeWzCBWgDzsIYF1ibKdJ-121" value="" style="html=1;verticalAlign=bottom;endArrow=open;dashed=1;endSize=8;curved=0;rounded=0;entryX=0.5;entryY=1;entryDx=0;entryDy=0;exitX=0.5;exitY=0;exitDx=0;exitDy=0;" parent="1" source="XeWzCBWgDzsIYF1ibKdJ-110" target="XeWzCBWgDzsIYF1ibKdJ-120" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="310" y="960" as="sourcePoint" />
<mxPoint x="558" y="840" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="XeWzCBWgDzsIYF1ibKdJ-122" value="ImagesPresenter" style="html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="135" y="960" width="165" height="50" as="geometry" />
</mxCell>
<mxCell id="XeWzCBWgDzsIYF1ibKdJ-123" value="" style="html=1;verticalAlign=bottom;endArrow=open;dashed=1;endSize=8;curved=0;rounded=0;entryX=0.5;entryY=1;entryDx=0;entryDy=0;exitX=0.5;exitY=0;exitDx=0;exitDy=0;" parent="1" source="XeWzCBWgDzsIYF1ibKdJ-122" target="XeWzCBWgDzsIYF1ibKdJ-120" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="310" y="960" as="sourcePoint" />
<mxPoint x="813" y="840" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="XeWzCBWgDzsIYF1ibKdJ-125" value="" style="html=1;verticalAlign=bottom;endArrow=open;dashed=1;endSize=8;curved=0;rounded=0;entryX=0.5;entryY=1;entryDx=0;entryDy=0;exitX=0.5;exitY=0;exitDx=0;exitDy=0;" parent="1" source="XeWzCBWgDzsIYF1ibKdJ-122" target="XeWzCBWgDzsIYF1ibKdJ-117" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="293" y="970" as="sourcePoint" />
<mxPoint x="423" y="850" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="XeWzCBWgDzsIYF1ibKdJ-126" value="" style="html=1;verticalAlign=bottom;endArrow=open;dashed=1;endSize=8;curved=0;rounded=0;entryX=0.5;entryY=1;entryDx=0;entryDy=0;exitX=0.5;exitY=0;exitDx=0;exitDy=0;" parent="1" source="XeWzCBWgDzsIYF1ibKdJ-122" target="XeWzCBWgDzsIYF1ibKdJ-112" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint y="800" as="sourcePoint" />
<mxPoint y="705" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="XeWzCBWgDzsIYF1ibKdJ-127" value="ImagesView" style="shape=umlFrame;whiteSpace=wrap;html=1;pointerEvents=0;width=110;height=20;" parent="1" vertex="1">
<mxGeometry x="80" y="1080" width="280" height="120" as="geometry" />
</mxCell>
<mxCell id="XeWzCBWgDzsIYF1ibKdJ-128" value="" style="html=1;verticalAlign=bottom;endArrow=open;dashed=1;endSize=8;curved=0;rounded=0;entryX=0.5;entryY=1;entryDx=0;entryDy=0;exitX=0.492;exitY=0.004;exitDx=0;exitDy=0;exitPerimeter=0;" parent="1" source="XeWzCBWgDzsIYF1ibKdJ-127" target="XeWzCBWgDzsIYF1ibKdJ-122" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="230" y="1060" as="sourcePoint" />
<mxPoint x="228" y="850" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="XeWzCBWgDzsIYF1ibKdJ-129" value="<p style="margin:0px;margin-top:4px;text-align:center;">&lt;&lt;interface&gt;&gt;<br style="border-color: var(--border-color); font-family: Verdana;">IInMemoryCache</p><hr size="1"><p style="margin:0px;margin-left:4px;">+ GetThumbnails()<br></p><p style="margin:0px;margin-left:4px;">+ GetImage()</p><p style="margin:0px;margin-left:4px;">+ AddThumbnail()</p><p style="margin:0px;margin-left:4px;">+ AddImage()</p>" style="verticalAlign=top;align=left;overflow=fill;fontSize=12;fontFamily=Helvetica;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="122.5" y="610" width="190" height="110" as="geometry" />
</mxCell>
<mxCell id="XeWzCBWgDzsIYF1ibKdJ-130" value="" style="html=1;verticalAlign=bottom;endArrow=open;dashed=1;endSize=8;curved=0;rounded=0;entryX=0.5;entryY=1;entryDx=0;entryDy=0;exitX=0.5;exitY=0;exitDx=0;exitDy=0;" parent="1" source="XeWzCBWgDzsIYF1ibKdJ-117" target="XeWzCBWgDzsIYF1ibKdJ-129" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="228" y="970" as="sourcePoint" />
<mxPoint x="228" y="850" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="Q3TqxYWd1ZN6FZI5TGBW-1" value="<p style="margin:0px;margin-top:4px;text-align:center;">&lt;&lt;interface&gt;&gt;<br style="border-color: var(--border-color); font-family: Verdana;">INotifier</p><hr size="1"><p style="margin:0px;margin-left:4px;">+ NotifyAboutFinishedProcessing(string)</p>" style="verticalAlign=top;align=left;overflow=fill;fontSize=12;fontFamily=Helvetica;html=1;whiteSpace=wrap;" vertex="1" parent="1">
<mxGeometry x="1030" y="-240" width="240" height="110" as="geometry" />
</mxCell>
<mxCell id="Q3TqxYWd1ZN6FZI5TGBW-3" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;labelBackgroundColor=none;startArrow=none;startFill=0;startSize=8;endArrow=open;endFill=0;endSize=16;fontFamily=Verdana;fontSize=12;dashed=1;entryX=1;entryY=1;entryDx=0;entryDy=0;exitX=0.75;exitY=0;exitDx=0;exitDy=0;" edge="1" parent="1" source="XeWzCBWgDzsIYF1ibKdJ-32" target="Q3TqxYWd1ZN6FZI5TGBW-1">
<mxGeometry relative="1" as="geometry">
<Array as="points" />
<mxPoint x="1050" y="253" as="sourcePoint" />
<mxPoint x="1050" y="10" as="targetPoint" />
</mxGeometry>
</mxCell>
</root>
</mxGraphModel>
</diagram>
</mxfile>