-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathbig-data-storage-experiment.html
More file actions
550 lines (523 loc) · 181 KB
/
Copy pathbig-data-storage-experiment.html
File metadata and controls
550 lines (523 loc) · 181 KB
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
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
<!DOCTYPE html><html lang="en-US"><head><title>大数据存储系统与管理实验</title><meta property="og:title" content="大数据存储系统与管理实验"><meta charset="UTF-8"><meta name="viewport" content="width=device-width,height=device-height,initial-scale=1.0"><meta name="apple-mobile-web-app-capable" content="yes"><meta http-equiv="X-UA-Compatible" content="ie=edge"><meta property="og:type" content="website"><meta name="twitter:card" content="summary"><style>@media screen{body[data-bespoke-view=""] .bespoke-marp-parent>.bespoke-marp-osc>button,body[data-bespoke-view=next] .bespoke-marp-parent>.bespoke-marp-osc>button,body[data-bespoke-view=presenter] .bespoke-marp-presenter-container .bespoke-marp-presenter-info-container button,body[data-bespoke-view=presenter] .bespoke-marp-presenter-container .bespoke-marp-presenter-note-container button{appearance:none;background-color:initial;border:0;color:inherit;cursor:pointer;font-size:inherit;opacity:.8;outline:none;padding:0;transition:opacity .2s linear;-webkit-tap-highlight-color:transparent}body[data-bespoke-view=""] .bespoke-marp-parent>.bespoke-marp-osc>button:disabled,body[data-bespoke-view=next] .bespoke-marp-parent>.bespoke-marp-osc>button:disabled,body[data-bespoke-view=presenter] .bespoke-marp-presenter-container .bespoke-marp-presenter-info-container button:disabled,body[data-bespoke-view=presenter] .bespoke-marp-presenter-container .bespoke-marp-presenter-note-container button:disabled{cursor:not-allowed;opacity:.15!important}body[data-bespoke-view=""] .bespoke-marp-parent>.bespoke-marp-osc>button:hover,body[data-bespoke-view=next] .bespoke-marp-parent>.bespoke-marp-osc>button:hover,body[data-bespoke-view=presenter] .bespoke-marp-presenter-container .bespoke-marp-presenter-info-container button:hover,body[data-bespoke-view=presenter] .bespoke-marp-presenter-container .bespoke-marp-presenter-note-container button:hover{opacity:1}body[data-bespoke-view=""] .bespoke-marp-parent>.bespoke-marp-osc>button:hover:active,body[data-bespoke-view=next] .bespoke-marp-parent>.bespoke-marp-osc>button:hover:active,body[data-bespoke-view=presenter] .bespoke-marp-presenter-container .bespoke-marp-presenter-info-container button:hover:active,body[data-bespoke-view=presenter] .bespoke-marp-presenter-container .bespoke-marp-presenter-note-container button:hover:active{opacity:.6}body[data-bespoke-view=""] .bespoke-marp-parent>.bespoke-marp-osc>button:hover:not(:disabled),body[data-bespoke-view=next] .bespoke-marp-parent>.bespoke-marp-osc>button:hover:not(:disabled),body[data-bespoke-view=presenter] .bespoke-marp-presenter-container .bespoke-marp-presenter-info-container button:hover:not(:disabled),body[data-bespoke-view=presenter] .bespoke-marp-presenter-container .bespoke-marp-presenter-note-container button:hover:not(:disabled){transition:none}body[data-bespoke-view=""] .bespoke-marp-parent>.bespoke-marp-osc>button[data-bespoke-marp-osc=prev],body[data-bespoke-view=next] .bespoke-marp-parent>.bespoke-marp-osc>button[data-bespoke-marp-osc=prev],body[data-bespoke-view=presenter] .bespoke-marp-presenter-container .bespoke-marp-presenter-info-container button.bespoke-marp-presenter-info-page-prev{background:#0000 url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAxMDAgMTAwIj48cGF0aCBmaWxsPSJub25lIiBzdHJva2U9IiNmZmYiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgc3Ryb2tlLXdpZHRoPSI1IiBkPSJNNjggOTAgMjggNTBsNDAtNDAiLz48L3N2Zz4=") no-repeat 50%;background-size:contain;overflow:hidden;text-indent:100%;white-space:nowrap}body[data-bespoke-view=""] .bespoke-marp-parent>.bespoke-marp-osc>button[data-bespoke-marp-osc=next],body[data-bespoke-view=next] .bespoke-marp-parent>.bespoke-marp-osc>button[data-bespoke-marp-osc=next],body[data-bespoke-view=presenter] .bespoke-marp-presenter-container .bespoke-marp-presenter-info-container button.bespoke-marp-presenter-info-page-next{background:#0000 url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAxMDAgMTAwIj48cGF0aCBmaWxsPSJub25lIiBzdHJva2U9IiNmZmYiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgc3Ryb2tlLXdpZHRoPSI1IiBkPSJtMzIgOTAgNDAtNDAtNDAtNDAiLz48L3N2Zz4=") no-repeat 50%;background-size:contain;overflow:hidden;text-indent:100%;white-space:nowrap}body[data-bespoke-view=""] .bespoke-marp-parent>.bespoke-marp-osc>button[data-bespoke-marp-osc=fullscreen],body[data-bespoke-view=next] .bespoke-marp-parent>.bespoke-marp-osc>button[data-bespoke-marp-osc=fullscreen]{background:#0000 url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAxMDAgMTAwIj48ZGVmcz48c3R5bGU+LmF7ZmlsbDpub25lO3N0cm9rZTojZmZmO3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjpyb3VuZDtzdHJva2Utd2lkdGg6NXB4fTwvc3R5bGU+PC9kZWZzPjxyZWN0IHdpZHRoPSI4MCIgaGVpZ2h0PSI2MCIgeD0iMTAiIHk9IjIwIiBjbGFzcz0iYSIgcng9IjUuNjciLz48cGF0aCBkPSJNNDAgNzBIMjBWNTBtMjAgMEwyMCA3MG00MC00MGgyMHYyMG0tMjAgMCAyMC0yMCIgY2xhc3M9ImEiLz48L3N2Zz4=") no-repeat 50%;background-size:contain;overflow:hidden;text-indent:100%;white-space:nowrap}body[data-bespoke-view=""] .bespoke-marp-parent>.bespoke-marp-osc>button.exit[data-bespoke-marp-osc=fullscreen],body[data-bespoke-view=next] .bespoke-marp-parent>.bespoke-marp-osc>button.exit[data-bespoke-marp-osc=fullscreen]{background-image:url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAxMDAgMTAwIj48ZGVmcz48c3R5bGU+LmF7ZmlsbDpub25lO3N0cm9rZTojZmZmO3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjpyb3VuZDtzdHJva2Utd2lkdGg6NXB4fTwvc3R5bGU+PC9kZWZzPjxyZWN0IHdpZHRoPSI4MCIgaGVpZ2h0PSI2MCIgeD0iMTAiIHk9IjIwIiBjbGFzcz0iYSIgcng9IjUuNjciLz48cGF0aCBkPSJNMjAgNTBoMjB2MjBtLTIwIDAgMjAtMjBtNDAgMEg2MFYzMG0yMCAwTDYwIDUwIiBjbGFzcz0iYSIvPjwvc3ZnPg==")}body[data-bespoke-view=""] .bespoke-marp-parent>.bespoke-marp-osc>button[data-bespoke-marp-osc=presenter],body[data-bespoke-view=next] .bespoke-marp-parent>.bespoke-marp-osc>button[data-bespoke-marp-osc=presenter]{background:#0000 url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAxMDAgMTAwIj48cGF0aCBmaWxsPSJub25lIiBzdHJva2U9IiNmZmYiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgc3Ryb2tlLXdpZHRoPSI1IiBkPSJNODcuOCA0Ny41Qzg5IDUwIDg3LjcgNTIgODUgNTJIMzVhOC43IDguNyAwIDAgMS03LjItNC41bC0xNS42LTMxQzExIDE0IDEyLjIgMTIgMTUgMTJoNTBhOC44IDguOCAwIDAgMSA3LjIgNC41ek02MCA1MnYzNm0tMTAgMGgyME00NSA0MmgyMCIvPjwvc3ZnPg==") no-repeat 50%;background-size:contain;overflow:hidden;text-indent:100%;white-space:nowrap}body[data-bespoke-view=presenter] .bespoke-marp-presenter-container .bespoke-marp-presenter-note-container button.bespoke-marp-presenter-note-bigger{background:#0000 url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAxMDAgMTAwIj48cGF0aCBzdHJva2U9IiNmZmYiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgc3Ryb2tlLXdpZHRoPSI1IiBkPSJNMTIgNTBoODBNNTIgOTBWMTAiLz48L3N2Zz4=") no-repeat 50%;background-size:contain;overflow:hidden;text-indent:100%;white-space:nowrap}body[data-bespoke-view=presenter] .bespoke-marp-presenter-container .bespoke-marp-presenter-note-container button.bespoke-marp-presenter-note-smaller{background:#0000 url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAxMDAgMTAwIj48cGF0aCBmaWxsPSJub25lIiBzdHJva2U9IiNmZmYiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgc3Ryb2tlLXdpZHRoPSI1IiBkPSJNMTIgNTBoODAiLz48L3N2Zz4=") no-repeat 50%;background-size:contain;overflow:hidden;text-indent:100%;white-space:nowrap}}@keyframes __bespoke_marp_transition_reduced_outgoing__{0%{opacity:1}to{opacity:0}}@keyframes __bespoke_marp_transition_reduced_incoming__{0%{mix-blend-mode:plus-lighter;opacity:0}to{mix-blend-mode:plus-lighter;opacity:1}}.bespoke-marp-note,.bespoke-marp-osc,.bespoke-progress-parent{display:none;transition:none}@media screen{::view-transition-group(*){animation-duration:var(--marp-bespoke-transition-animation-duration,.5s);animation-timing-function:ease}::view-transition-new(*),::view-transition-old(*){animation-delay:0s;animation-direction:var(--marp-bespoke-transition-animation-direction,normal);animation-duration:var(--marp-bespoke-transition-animation-duration,.5s);animation-fill-mode:both;animation-name:var(--marp-bespoke-transition-animation-name,var(--marp-bespoke-transition-animation-name-fallback,__bespoke_marp_transition_no_animation__));mix-blend-mode:normal}::view-transition-old(*){--marp-bespoke-transition-animation-name-fallback:__bespoke_marp_transition_reduced_outgoing__;animation-timing-function:ease}::view-transition-new(*){--marp-bespoke-transition-animation-name-fallback:__bespoke_marp_transition_reduced_incoming__;animation-timing-function:ease}::view-transition-new(root),::view-transition-old(root){animation-timing-function:linear}::view-transition-new(__bespoke_marp_transition_osc__),::view-transition-old(__bespoke_marp_transition_osc__){animation-duration:0s!important;animation-name:__bespoke_marp_transition_osc__!important}::view-transition-new(__bespoke_marp_transition_osc__){opacity:0!important}.bespoke-marp-transition-warming-up::view-transition-group(*),.bespoke-marp-transition-warming-up::view-transition-new(*),.bespoke-marp-transition-warming-up::view-transition-old(*){animation-play-state:paused!important}body,html{height:100%;margin:0}body{background:#000;overflow:hidden}svg.bespoke-marp-slide{content-visibility:hidden;opacity:0;pointer-events:none;z-index:-1}svg.bespoke-marp-slide:not(.bespoke-marp-active) *{view-transition-name:none!important}svg.bespoke-marp-slide.bespoke-marp-active{content-visibility:visible;opacity:1;pointer-events:auto;z-index:0}svg.bespoke-marp-slide.bespoke-marp-active.bespoke-marp-active-ready *{animation-name:__bespoke_marp__!important}@supports not (content-visibility:hidden){svg.bespoke-marp-slide[data-bespoke-marp-load=hideable]{display:none}svg.bespoke-marp-slide[data-bespoke-marp-load=hideable].bespoke-marp-active{display:block}}}@media screen and (prefers-reduced-motion:reduce){svg.bespoke-marp-slide *{view-transition-name:none!important}}@media screen{[data-bespoke-marp-fragment=inactive]{visibility:hidden}body[data-bespoke-view=""] .bespoke-marp-parent,body[data-bespoke-view=next] .bespoke-marp-parent{inset:0;position:absolute}body[data-bespoke-view=""] .bespoke-marp-parent>.bespoke-marp-osc,body[data-bespoke-view=next] .bespoke-marp-parent>.bespoke-marp-osc{background:#000000a6;border-radius:7px;bottom:50px;color:#fff;contain:paint;display:block;font-family:Helvetica,Arial,sans-serif;font-size:16px;left:50%;line-height:0;opacity:1;padding:12px;position:absolute;touch-action:manipulation;transform:translateX(-50%);transition:opacity .2s linear;-webkit-user-select:none;user-select:none;white-space:nowrap;will-change:transform;z-index:1;view-transition-name:__bespoke_marp_transition_osc__}body[data-bespoke-view=""] .bespoke-marp-parent>.bespoke-marp-osc>*,body[data-bespoke-view=next] .bespoke-marp-parent>.bespoke-marp-osc>*{margin-left:6px}body[data-bespoke-view=""] .bespoke-marp-parent>.bespoke-marp-osc>:first-child,body[data-bespoke-view=next] .bespoke-marp-parent>.bespoke-marp-osc>:first-child{margin-left:0}body[data-bespoke-view=""] .bespoke-marp-parent>.bespoke-marp-osc>span,body[data-bespoke-view=next] .bespoke-marp-parent>.bespoke-marp-osc>span{opacity:.8}body[data-bespoke-view=""] .bespoke-marp-parent>.bespoke-marp-osc>span[data-bespoke-marp-osc=page],body[data-bespoke-view=next] .bespoke-marp-parent>.bespoke-marp-osc>span[data-bespoke-marp-osc=page]{display:inline-block;min-width:140px;text-align:center}body[data-bespoke-view=""] .bespoke-marp-parent>.bespoke-marp-osc>button[data-bespoke-marp-osc=fullscreen],body[data-bespoke-view=""] .bespoke-marp-parent>.bespoke-marp-osc>button[data-bespoke-marp-osc=next],body[data-bespoke-view=""] .bespoke-marp-parent>.bespoke-marp-osc>button[data-bespoke-marp-osc=presenter],body[data-bespoke-view=""] .bespoke-marp-parent>.bespoke-marp-osc>button[data-bespoke-marp-osc=prev],body[data-bespoke-view=next] .bespoke-marp-parent>.bespoke-marp-osc>button[data-bespoke-marp-osc=fullscreen],body[data-bespoke-view=next] .bespoke-marp-parent>.bespoke-marp-osc>button[data-bespoke-marp-osc=next],body[data-bespoke-view=next] .bespoke-marp-parent>.bespoke-marp-osc>button[data-bespoke-marp-osc=presenter],body[data-bespoke-view=next] .bespoke-marp-parent>.bespoke-marp-osc>button[data-bespoke-marp-osc=prev]{height:32px;line-height:32px;width:32px}body[data-bespoke-view=""] .bespoke-marp-parent.bespoke-marp-inactive,body[data-bespoke-view=next] .bespoke-marp-parent.bespoke-marp-inactive{cursor:none}body[data-bespoke-view=""] .bespoke-marp-parent.bespoke-marp-inactive>.bespoke-marp-osc,body[data-bespoke-view=next] .bespoke-marp-parent.bespoke-marp-inactive>.bespoke-marp-osc{opacity:0;pointer-events:none}body[data-bespoke-view=""] svg.bespoke-marp-slide,body[data-bespoke-view=next] svg.bespoke-marp-slide{height:100%;left:0;position:absolute;top:0;width:100%}body[data-bespoke-view=""] .bespoke-progress-parent{background:#222;display:flex;height:5px;width:100%}body[data-bespoke-view=""] .bespoke-progress-parent+.bespoke-marp-parent{top:5px}body[data-bespoke-view=""] .bespoke-progress-parent .bespoke-progress-bar{background:#0288d1;flex:0 0 0;transition:flex-basis .2s cubic-bezier(0,1,1,1)}body[data-bespoke-view=next]{background:#0000}body[data-bespoke-view=presenter]{background:#161616}body[data-bespoke-view=presenter] .bespoke-marp-presenter-container{display:grid;font-family:Helvetica,Arial,sans-serif;grid-template:"current dragbar next" minmax(140px,1fr) "current dragbar note" 2fr "info dragbar note" 3em;grid-template-columns:minmax(3px,var(--bespoke-marp-presenter-split-ratio,66%)) 0 minmax(3px,1fr);height:100%;left:0;position:absolute;top:0;width:100%}body[data-bespoke-view=presenter] .bespoke-marp-presenter-container .bespoke-marp-parent{grid-area:current;overflow:hidden;position:relative}body[data-bespoke-view=presenter] .bespoke-marp-presenter-container .bespoke-marp-parent svg.bespoke-marp-slide{height:calc(100% - 40px);left:20px;pointer-events:none;position:absolute;top:20px;-webkit-user-select:none;user-select:none;width:calc(100% - 40px)}body[data-bespoke-view=presenter] .bespoke-marp-presenter-container .bespoke-marp-parent svg.bespoke-marp-slide.bespoke-marp-active{filter:drop-shadow(0 3px 10px rgba(0,0,0,.5))}body[data-bespoke-view=presenter] .bespoke-marp-presenter-container .bespoke-marp-presenter-dragbar-container{background:#0288d1;cursor:col-resize;grid-area:dragbar;margin-left:-3px;opacity:0;position:relative;transition:opacity .4s linear .1s;width:6px;z-index:10}body[data-bespoke-view=presenter] .bespoke-marp-presenter-container .bespoke-marp-presenter-dragbar-container:hover{opacity:1}body[data-bespoke-view=presenter] .bespoke-marp-presenter-container .bespoke-marp-presenter-dragbar-container.active{opacity:1;transition-delay:0s}body[data-bespoke-view=presenter] .bespoke-marp-presenter-container .bespoke-marp-presenter-next-container{background:#222;cursor:pointer;display:none;grid-area:next;overflow:hidden;position:relative}body[data-bespoke-view=presenter] .bespoke-marp-presenter-container .bespoke-marp-presenter-next-container.active{display:block}body[data-bespoke-view=presenter] .bespoke-marp-presenter-container .bespoke-marp-presenter-next-container iframe.bespoke-marp-presenter-next{background:#0000;border:0;display:block;filter:drop-shadow(0 3px 10px rgba(0,0,0,.5));height:calc(100% - 40px);left:20px;pointer-events:none;position:absolute;top:20px;-webkit-user-select:none;user-select:none;width:calc(100% - 40px)}body[data-bespoke-view=presenter] .bespoke-marp-presenter-container .bespoke-marp-presenter-note-container{background:#222;color:#eee;grid-area:note;position:relative;z-index:1}body[data-bespoke-view=presenter] .bespoke-marp-presenter-container .bespoke-marp-presenter-note-container button{height:1.5em;line-height:1.5em;width:1.5em}body[data-bespoke-view=presenter] .bespoke-marp-presenter-container .bespoke-marp-presenter-note-container .bespoke-marp-presenter-note-wrapper{display:block;inset:0;position:absolute}body[data-bespoke-view=presenter] .bespoke-marp-presenter-container .bespoke-marp-presenter-note-container .bespoke-marp-presenter-note-buttons{background:#000000a6;border-radius:4px;bottom:0;display:flex;gap:4px;margin:12px;opacity:0;padding:6px;pointer-events:none;position:absolute;right:0;transition:opacity .2s linear}body[data-bespoke-view=presenter] .bespoke-marp-presenter-container .bespoke-marp-presenter-note-container .bespoke-marp-presenter-note-buttons:focus-within,body[data-bespoke-view=presenter] .bespoke-marp-presenter-container .bespoke-marp-presenter-note-container .bespoke-marp-presenter-note-wrapper:focus-within+.bespoke-marp-presenter-note-buttons,body[data-bespoke-view=presenter] .bespoke-marp-presenter-container .bespoke-marp-presenter-note-container:hover .bespoke-marp-presenter-note-buttons{opacity:1;pointer-events:auto}body[data-bespoke-view=presenter] .bespoke-marp-presenter-container .bespoke-marp-presenter-note-container .bespoke-marp-note{box-sizing:border-box;font-size:calc(1.1em*var(--bespoke-marp-note-font-scale, 1));height:calc(100% - 40px);margin:20px;overflow:auto;padding-right:3px;white-space:pre-wrap;width:calc(100% - 40px);word-wrap:break-word;scrollbar-color:#eeeeee80 #0000;scrollbar-width:thin}body[data-bespoke-view=presenter] .bespoke-marp-presenter-container .bespoke-marp-presenter-note-container .bespoke-marp-note::-webkit-scrollbar{width:6px}body[data-bespoke-view=presenter] .bespoke-marp-presenter-container .bespoke-marp-presenter-note-container .bespoke-marp-note::-webkit-scrollbar-track{background:#0000}body[data-bespoke-view=presenter] .bespoke-marp-presenter-container .bespoke-marp-presenter-note-container .bespoke-marp-note::-webkit-scrollbar-thumb{background:#eeeeee80;border-radius:6px}body[data-bespoke-view=presenter] .bespoke-marp-presenter-container .bespoke-marp-presenter-note-container .bespoke-marp-note:empty{pointer-events:none}body[data-bespoke-view=presenter] .bespoke-marp-presenter-container .bespoke-marp-presenter-note-container .bespoke-marp-note.active{display:block}body[data-bespoke-view=presenter] .bespoke-marp-presenter-container .bespoke-marp-presenter-note-container .bespoke-marp-note p:first-child{margin-top:0}body[data-bespoke-view=presenter] .bespoke-marp-presenter-container .bespoke-marp-presenter-note-container .bespoke-marp-note p:last-child{margin-bottom:0}body[data-bespoke-view=presenter] .bespoke-marp-presenter-container .bespoke-marp-presenter-info-container{align-items:center;box-sizing:border-box;color:#eee;display:flex;flex-wrap:nowrap;grid-area:info;justify-content:center;overflow:hidden;padding:0 10px}body[data-bespoke-view=presenter] .bespoke-marp-presenter-container .bespoke-marp-presenter-info-container .bespoke-marp-presenter-info-page,body[data-bespoke-view=presenter] .bespoke-marp-presenter-container .bespoke-marp-presenter-info-container .bespoke-marp-presenter-info-time,body[data-bespoke-view=presenter] .bespoke-marp-presenter-container .bespoke-marp-presenter-info-container .bespoke-marp-presenter-info-timer{box-sizing:border-box;display:block;padding:0 10px;white-space:nowrap;width:100%}body[data-bespoke-view=presenter] .bespoke-marp-presenter-container .bespoke-marp-presenter-info-container button{height:1.5em;line-height:1.5em;width:1.5em}body[data-bespoke-view=presenter] .bespoke-marp-presenter-container .bespoke-marp-presenter-info-container .bespoke-marp-presenter-info-page{order:2;text-align:center}body[data-bespoke-view=presenter] .bespoke-marp-presenter-container .bespoke-marp-presenter-info-container .bespoke-marp-presenter-info-page .bespoke-marp-presenter-info-page-text{display:inline-block;min-width:120px;text-align:center}body[data-bespoke-view=presenter] .bespoke-marp-presenter-container .bespoke-marp-presenter-info-container .bespoke-marp-presenter-info-time{color:#999;order:1;text-align:left}body[data-bespoke-view=presenter] .bespoke-marp-presenter-container .bespoke-marp-presenter-info-container .bespoke-marp-presenter-info-timer{color:#999;order:3;text-align:right}body[data-bespoke-view=presenter] .bespoke-marp-presenter-container .bespoke-marp-presenter-info-container .bespoke-marp-presenter-info-timer:hover{cursor:pointer}}@media print{.bespoke-marp-presenter-info-container,.bespoke-marp-presenter-next-container,.bespoke-marp-presenter-note-container{display:none}}</style><style>@charset "UTF-8";@import "https://fonts.bunny.net/css?family=Lato:400,900|Roboto+Mono:400,700&display=swap";div#\:\$p > svg > foreignObject > section{width:1280px;height:720px;box-sizing:border-box;overflow:hidden;position:relative;scroll-snap-align:center center;-webkit-text-size-adjust:100%;text-size-adjust:100%}div#\:\$p > svg > foreignObject > section::after{bottom:0;content:attr(data-marpit-pagination);padding:inherit;pointer-events:none;position:absolute;right:0}div#\:\$p > svg > foreignObject > section:not([data-marpit-pagination])::after{display:none}div#\:\$p > svg > foreignObject > section :is(h1, marp-h1){font-size:2em;margin-block:0.67em}div#\:\$p > svg > foreignObject > section video::-webkit-media-controls{will-change:transform}@page {size:1280px 720px;margin:0}@media print{html, body{background-color:#fff;margin:0;page-break-inside:avoid;break-inside:avoid-page}div#\:\$p > svg > foreignObject > section{page-break-before:always;break-before:page}div#\:\$p > svg > foreignObject > section, div#\:\$p > svg > foreignObject > section *{-webkit-print-color-adjust:exact!important;animation-delay:0s!important;animation-duration:0s!important;color-adjust:exact!important;print-color-adjust:exact!important;transition:none!important}div#\:\$p > svg[data-marpit-svg]{display:block;height:100vh;width:100vw}}div#\:\$p > svg > foreignObject > :where(section){container-type:size}@font-face {font-family:KaTeX_AMS;font-style:normal;font-weight:400;src:url('https://cdn.jsdelivr.net/npm/katex@0.16.22/dist/fonts/KaTeX_AMS-Regular.woff2') format("woff2"), url('https://cdn.jsdelivr.net/npm/katex@0.16.22/dist/fonts/KaTeX_AMS-Regular.woff') format("woff"), url('https://cdn.jsdelivr.net/npm/katex@0.16.22/dist/fonts/KaTeX_AMS-Regular.ttf') format("truetype")}@font-face {font-family:KaTeX_Caligraphic;font-style:normal;font-weight:700;src:url('https://cdn.jsdelivr.net/npm/katex@0.16.22/dist/fonts/KaTeX_Caligraphic-Bold.woff2') format("woff2"), url('https://cdn.jsdelivr.net/npm/katex@0.16.22/dist/fonts/KaTeX_Caligraphic-Bold.woff') format("woff"), url('https://cdn.jsdelivr.net/npm/katex@0.16.22/dist/fonts/KaTeX_Caligraphic-Bold.ttf') format("truetype")}@font-face {font-family:KaTeX_Caligraphic;font-style:normal;font-weight:400;src:url('https://cdn.jsdelivr.net/npm/katex@0.16.22/dist/fonts/KaTeX_Caligraphic-Regular.woff2') format("woff2"), url('https://cdn.jsdelivr.net/npm/katex@0.16.22/dist/fonts/KaTeX_Caligraphic-Regular.woff') format("woff"), url('https://cdn.jsdelivr.net/npm/katex@0.16.22/dist/fonts/KaTeX_Caligraphic-Regular.ttf') format("truetype")}@font-face {font-family:KaTeX_Fraktur;font-style:normal;font-weight:700;src:url('https://cdn.jsdelivr.net/npm/katex@0.16.22/dist/fonts/KaTeX_Fraktur-Bold.woff2') format("woff2"), url('https://cdn.jsdelivr.net/npm/katex@0.16.22/dist/fonts/KaTeX_Fraktur-Bold.woff') format("woff"), url('https://cdn.jsdelivr.net/npm/katex@0.16.22/dist/fonts/KaTeX_Fraktur-Bold.ttf') format("truetype")}@font-face {font-family:KaTeX_Fraktur;font-style:normal;font-weight:400;src:url('https://cdn.jsdelivr.net/npm/katex@0.16.22/dist/fonts/KaTeX_Fraktur-Regular.woff2') format("woff2"), url('https://cdn.jsdelivr.net/npm/katex@0.16.22/dist/fonts/KaTeX_Fraktur-Regular.woff') format("woff"), url('https://cdn.jsdelivr.net/npm/katex@0.16.22/dist/fonts/KaTeX_Fraktur-Regular.ttf') format("truetype")}@font-face {font-family:KaTeX_Main;font-style:normal;font-weight:700;src:url('https://cdn.jsdelivr.net/npm/katex@0.16.22/dist/fonts/KaTeX_Main-Bold.woff2') format("woff2"), url('https://cdn.jsdelivr.net/npm/katex@0.16.22/dist/fonts/KaTeX_Main-Bold.woff') format("woff"), url('https://cdn.jsdelivr.net/npm/katex@0.16.22/dist/fonts/KaTeX_Main-Bold.ttf') format("truetype")}@font-face {font-family:KaTeX_Main;font-style:italic;font-weight:700;src:url('https://cdn.jsdelivr.net/npm/katex@0.16.22/dist/fonts/KaTeX_Main-BoldItalic.woff2') format("woff2"), url('https://cdn.jsdelivr.net/npm/katex@0.16.22/dist/fonts/KaTeX_Main-BoldItalic.woff') format("woff"), url('https://cdn.jsdelivr.net/npm/katex@0.16.22/dist/fonts/KaTeX_Main-BoldItalic.ttf') format("truetype")}@font-face {font-family:KaTeX_Main;font-style:italic;font-weight:400;src:url('https://cdn.jsdelivr.net/npm/katex@0.16.22/dist/fonts/KaTeX_Main-Italic.woff2') format("woff2"), url('https://cdn.jsdelivr.net/npm/katex@0.16.22/dist/fonts/KaTeX_Main-Italic.woff') format("woff"), url('https://cdn.jsdelivr.net/npm/katex@0.16.22/dist/fonts/KaTeX_Main-Italic.ttf') format("truetype")}@font-face {font-family:KaTeX_Main;font-style:normal;font-weight:400;src:url('https://cdn.jsdelivr.net/npm/katex@0.16.22/dist/fonts/KaTeX_Main-Regular.woff2') format("woff2"), url('https://cdn.jsdelivr.net/npm/katex@0.16.22/dist/fonts/KaTeX_Main-Regular.woff') format("woff"), url('https://cdn.jsdelivr.net/npm/katex@0.16.22/dist/fonts/KaTeX_Main-Regular.ttf') format("truetype")}@font-face {font-family:KaTeX_Math;font-style:italic;font-weight:700;src:url('https://cdn.jsdelivr.net/npm/katex@0.16.22/dist/fonts/KaTeX_Math-BoldItalic.woff2') format("woff2"), url('https://cdn.jsdelivr.net/npm/katex@0.16.22/dist/fonts/KaTeX_Math-BoldItalic.woff') format("woff"), url('https://cdn.jsdelivr.net/npm/katex@0.16.22/dist/fonts/KaTeX_Math-BoldItalic.ttf') format("truetype")}@font-face {font-family:KaTeX_Math;font-style:italic;font-weight:400;src:url('https://cdn.jsdelivr.net/npm/katex@0.16.22/dist/fonts/KaTeX_Math-Italic.woff2') format("woff2"), url('https://cdn.jsdelivr.net/npm/katex@0.16.22/dist/fonts/KaTeX_Math-Italic.woff') format("woff"), url('https://cdn.jsdelivr.net/npm/katex@0.16.22/dist/fonts/KaTeX_Math-Italic.ttf') format("truetype")}@font-face {font-family:"KaTeX_SansSerif";font-style:normal;font-weight:700;src:url('https://cdn.jsdelivr.net/npm/katex@0.16.22/dist/fonts/KaTeX_SansSerif-Bold.woff2') format("woff2"), url('https://cdn.jsdelivr.net/npm/katex@0.16.22/dist/fonts/KaTeX_SansSerif-Bold.woff') format("woff"), url('https://cdn.jsdelivr.net/npm/katex@0.16.22/dist/fonts/KaTeX_SansSerif-Bold.ttf') format("truetype")}@font-face {font-family:"KaTeX_SansSerif";font-style:italic;font-weight:400;src:url('https://cdn.jsdelivr.net/npm/katex@0.16.22/dist/fonts/KaTeX_SansSerif-Italic.woff2') format("woff2"), url('https://cdn.jsdelivr.net/npm/katex@0.16.22/dist/fonts/KaTeX_SansSerif-Italic.woff') format("woff"), url('https://cdn.jsdelivr.net/npm/katex@0.16.22/dist/fonts/KaTeX_SansSerif-Italic.ttf') format("truetype")}@font-face {font-family:"KaTeX_SansSerif";font-style:normal;font-weight:400;src:url('https://cdn.jsdelivr.net/npm/katex@0.16.22/dist/fonts/KaTeX_SansSerif-Regular.woff2') format("woff2"), url('https://cdn.jsdelivr.net/npm/katex@0.16.22/dist/fonts/KaTeX_SansSerif-Regular.woff') format("woff"), url('https://cdn.jsdelivr.net/npm/katex@0.16.22/dist/fonts/KaTeX_SansSerif-Regular.ttf') format("truetype")}@font-face {font-family:KaTeX_Script;font-style:normal;font-weight:400;src:url('https://cdn.jsdelivr.net/npm/katex@0.16.22/dist/fonts/KaTeX_Script-Regular.woff2') format("woff2"), url('https://cdn.jsdelivr.net/npm/katex@0.16.22/dist/fonts/KaTeX_Script-Regular.woff') format("woff"), url('https://cdn.jsdelivr.net/npm/katex@0.16.22/dist/fonts/KaTeX_Script-Regular.ttf') format("truetype")}@font-face {font-family:KaTeX_Size1;font-style:normal;font-weight:400;src:url('https://cdn.jsdelivr.net/npm/katex@0.16.22/dist/fonts/KaTeX_Size1-Regular.woff2') format("woff2"), url('https://cdn.jsdelivr.net/npm/katex@0.16.22/dist/fonts/KaTeX_Size1-Regular.woff') format("woff"), url('https://cdn.jsdelivr.net/npm/katex@0.16.22/dist/fonts/KaTeX_Size1-Regular.ttf') format("truetype")}@font-face {font-family:KaTeX_Size2;font-style:normal;font-weight:400;src:url('https://cdn.jsdelivr.net/npm/katex@0.16.22/dist/fonts/KaTeX_Size2-Regular.woff2') format("woff2"), url('https://cdn.jsdelivr.net/npm/katex@0.16.22/dist/fonts/KaTeX_Size2-Regular.woff') format("woff"), url('https://cdn.jsdelivr.net/npm/katex@0.16.22/dist/fonts/KaTeX_Size2-Regular.ttf') format("truetype")}@font-face {font-family:KaTeX_Size3;font-style:normal;font-weight:400;src:url('https://cdn.jsdelivr.net/npm/katex@0.16.22/dist/fonts/KaTeX_Size3-Regular.woff2') format("woff2"), url('https://cdn.jsdelivr.net/npm/katex@0.16.22/dist/fonts/KaTeX_Size3-Regular.woff') format("woff"), url('https://cdn.jsdelivr.net/npm/katex@0.16.22/dist/fonts/KaTeX_Size3-Regular.ttf') format("truetype")}@font-face {font-family:KaTeX_Size4;font-style:normal;font-weight:400;src:url('https://cdn.jsdelivr.net/npm/katex@0.16.22/dist/fonts/KaTeX_Size4-Regular.woff2') format("woff2"), url('https://cdn.jsdelivr.net/npm/katex@0.16.22/dist/fonts/KaTeX_Size4-Regular.woff') format("woff"), url('https://cdn.jsdelivr.net/npm/katex@0.16.22/dist/fonts/KaTeX_Size4-Regular.ttf') format("truetype")}@font-face {font-family:KaTeX_Typewriter;font-style:normal;font-weight:400;src:url('https://cdn.jsdelivr.net/npm/katex@0.16.22/dist/fonts/KaTeX_Typewriter-Regular.woff2') format("woff2"), url('https://cdn.jsdelivr.net/npm/katex@0.16.22/dist/fonts/KaTeX_Typewriter-Regular.woff') format("woff"), url('https://cdn.jsdelivr.net/npm/katex@0.16.22/dist/fonts/KaTeX_Typewriter-Regular.ttf') format("truetype")}div#\:\$p > svg > foreignObject > section .katex{font:normal 1.21em KaTeX_Main,Times New Roman,serif;line-height:1.2;text-indent:0;text-rendering:auto}div#\:\$p > svg > foreignObject > section .katex *{-ms-high-contrast-adjust:none!important;border-color:currentColor}div#\:\$p > svg > foreignObject > section .katex .katex-version:after{content:"0.16.22"}div#\:\$p > svg > foreignObject > section .katex .katex-mathml{clip:rect(1px, 1px, 1px, 1px);border:0;height:1px;overflow:hidden;padding:0;position:absolute;width:1px}div#\:\$p > svg > foreignObject > section .katex .katex-html>.newline{display:block}div#\:\$p > svg > foreignObject > section .katex .base{position:relative;white-space:nowrap;width:-moz-min-content;width:min-content}div#\:\$p > svg > foreignObject > section .katex .base,div#\:\$p > svg > foreignObject > section .katex .strut{display:inline-block}div#\:\$p > svg > foreignObject > section .katex .textbf{font-weight:700}div#\:\$p > svg > foreignObject > section .katex .textit{font-style:italic}div#\:\$p > svg > foreignObject > section .katex .textrm{font-family:KaTeX_Main}div#\:\$p > svg > foreignObject > section .katex .textsf{font-family:KaTeX_SansSerif}div#\:\$p > svg > foreignObject > section .katex .texttt{font-family:KaTeX_Typewriter}div#\:\$p > svg > foreignObject > section .katex .mathnormal{font-family:KaTeX_Math;font-style:italic}div#\:\$p > svg > foreignObject > section .katex .mathit{font-family:KaTeX_Main;font-style:italic}div#\:\$p > svg > foreignObject > section .katex .mathrm{font-style:normal}div#\:\$p > svg > foreignObject > section .katex .mathbf{font-family:KaTeX_Main;font-weight:700}div#\:\$p > svg > foreignObject > section .katex .boldsymbol{font-family:KaTeX_Math;font-style:italic;font-weight:700}div#\:\$p > svg > foreignObject > section .katex .amsrm,div#\:\$p > svg > foreignObject > section .katex .mathbb,div#\:\$p > svg > foreignObject > section .katex .textbb{font-family:KaTeX_AMS}div#\:\$p > svg > foreignObject > section .katex .mathcal{font-family:KaTeX_Caligraphic}div#\:\$p > svg > foreignObject > section .katex .mathfrak,div#\:\$p > svg > foreignObject > section .katex .textfrak{font-family:KaTeX_Fraktur}div#\:\$p > svg > foreignObject > section .katex .mathboldfrak,div#\:\$p > svg > foreignObject > section .katex .textboldfrak{font-family:KaTeX_Fraktur;font-weight:700}div#\:\$p > svg > foreignObject > section .katex .mathtt{font-family:KaTeX_Typewriter}div#\:\$p > svg > foreignObject > section .katex .mathscr,div#\:\$p > svg > foreignObject > section .katex .textscr{font-family:KaTeX_Script}div#\:\$p > svg > foreignObject > section .katex .mathsf,div#\:\$p > svg > foreignObject > section .katex .textsf{font-family:KaTeX_SansSerif}div#\:\$p > svg > foreignObject > section .katex .mathboldsf,div#\:\$p > svg > foreignObject > section .katex .textboldsf{font-family:KaTeX_SansSerif;font-weight:700}div#\:\$p > svg > foreignObject > section .katex .mathitsf,div#\:\$p > svg > foreignObject > section .katex .mathsfit,div#\:\$p > svg > foreignObject > section .katex .textitsf{font-family:KaTeX_SansSerif;font-style:italic}div#\:\$p > svg > foreignObject > section .katex .mainrm{font-family:KaTeX_Main;font-style:normal}div#\:\$p > svg > foreignObject > section .katex .vlist-t{border-collapse:collapse;display:inline-table;table-layout:fixed}div#\:\$p > svg > foreignObject > section .katex .vlist-r{display:table-row}div#\:\$p > svg > foreignObject > section .katex .vlist{display:table-cell;position:relative;vertical-align:bottom}div#\:\$p > svg > foreignObject > section .katex .vlist>:is(span, marp-span){display:block;height:0;position:relative}div#\:\$p > svg > foreignObject > section .katex .vlist>:is(span, marp-span)>:is(span, marp-span){display:inline-block}div#\:\$p > svg > foreignObject > section .katex .vlist>:is(span, marp-span)>.pstrut{overflow:hidden;width:0}div#\:\$p > svg > foreignObject > section .katex .vlist-t2{margin-right:-2px}div#\:\$p > svg > foreignObject > section .katex .vlist-s{display:table-cell;font-size:1px;min-width:2px;vertical-align:bottom;width:2px}div#\:\$p > svg > foreignObject > section .katex div#\:\$p > svg > foreignObject > section section.vlist-s{--marpit-root-font-size:1px;}div#\:\$p > svg > foreignObject > section .katex .vbox{align-items:baseline;display:inline-flex;flex-direction:column}div#\:\$p > svg > foreignObject > section .katex .hbox{width:100%}div#\:\$p > svg > foreignObject > section .katex .hbox,div#\:\$p > svg > foreignObject > section .katex .thinbox{display:inline-flex;flex-direction:row}div#\:\$p > svg > foreignObject > section .katex .thinbox{max-width:0;width:0}div#\:\$p > svg > foreignObject > section .katex .msupsub{text-align:left}div#\:\$p > svg > foreignObject > section .katex .mfrac>:is(span, marp-span)>:is(span, marp-span){text-align:center}div#\:\$p > svg > foreignObject > section .katex .mfrac .frac-line{border-bottom-style:solid;display:inline-block;width:100%}div#\:\$p > svg > foreignObject > section .katex .hdashline,div#\:\$p > svg > foreignObject > section .katex .hline,div#\:\$p > svg > foreignObject > section .katex .mfrac .frac-line,div#\:\$p > svg > foreignObject > section .katex .overline .overline-line,div#\:\$p > svg > foreignObject > section .katex .rule,div#\:\$p > svg > foreignObject > section .katex .underline .underline-line{min-height:1px}div#\:\$p > svg > foreignObject > section .katex .mspace{display:inline-block}div#\:\$p > svg > foreignObject > section .katex .clap,div#\:\$p > svg > foreignObject > section .katex .llap,div#\:\$p > svg > foreignObject > section .katex .rlap{position:relative;width:0}div#\:\$p > svg > foreignObject > section .katex .clap>.inner,div#\:\$p > svg > foreignObject > section .katex .llap>.inner,div#\:\$p > svg > foreignObject > section .katex .rlap>.inner{position:absolute}div#\:\$p > svg > foreignObject > section .katex .clap>.fix,div#\:\$p > svg > foreignObject > section .katex .llap>.fix,div#\:\$p > svg > foreignObject > section .katex .rlap>.fix{display:inline-block}div#\:\$p > svg > foreignObject > section .katex .llap>.inner{right:0}div#\:\$p > svg > foreignObject > section .katex .clap>.inner,div#\:\$p > svg > foreignObject > section .katex .rlap>.inner{left:0}div#\:\$p > svg > foreignObject > section .katex .clap>.inner>:is(span, marp-span){margin-left:-50%;margin-right:50%}div#\:\$p > svg > foreignObject > section .katex .rule{border:0 solid;display:inline-block;position:relative}div#\:\$p > svg > foreignObject > section .katex .hline,div#\:\$p > svg > foreignObject > section .katex .overline .overline-line,div#\:\$p > svg > foreignObject > section .katex .underline .underline-line{border-bottom-style:solid;display:inline-block;width:100%}div#\:\$p > svg > foreignObject > section .katex .hdashline{border-bottom-style:dashed;display:inline-block;width:100%}div#\:\$p > svg > foreignObject > section .katex .sqrt>.root{margin-left:.2777777778em;margin-right:-.5555555556em}div#\:\$p > svg > foreignObject > section .katex .fontsize-ensurer.reset-size1.size1,div#\:\$p > svg > foreignObject > section .katex .sizing.reset-size1.size1{font-size:1em}div#\:\$p > svg > foreignObject > section .katex div#\:\$p > svg > foreignObject > section section.fontsize-ensurer.reset-size1.size1, div#\:\$p > svg > foreignObject > section .katex div#\:\$p > svg > foreignObject > section section.sizing.reset-size1.size1{--marpit-root-font-size:1em;}div#\:\$p > svg > foreignObject > section .katex .fontsize-ensurer.reset-size1.size2,div#\:\$p > svg > foreignObject > section .katex .sizing.reset-size1.size2{font-size:1.2em}div#\:\$p > svg > foreignObject > section .katex div#\:\$p > svg > foreignObject > section section.fontsize-ensurer.reset-size1.size2, div#\:\$p > svg > foreignObject > section .katex div#\:\$p > svg > foreignObject > section section.sizing.reset-size1.size2{--marpit-root-font-size:1.2em;}div#\:\$p > svg > foreignObject > section .katex .fontsize-ensurer.reset-size1.size3,div#\:\$p > svg > foreignObject > section .katex .sizing.reset-size1.size3{font-size:1.4em}div#\:\$p > svg > foreignObject > section .katex div#\:\$p > svg > foreignObject > section section.fontsize-ensurer.reset-size1.size3, div#\:\$p > svg > foreignObject > section .katex div#\:\$p > svg > foreignObject > section section.sizing.reset-size1.size3{--marpit-root-font-size:1.4em;}div#\:\$p > svg > foreignObject > section .katex .fontsize-ensurer.reset-size1.size4,div#\:\$p > svg > foreignObject > section .katex .sizing.reset-size1.size4{font-size:1.6em}div#\:\$p > svg > foreignObject > section .katex div#\:\$p > svg > foreignObject > section section.fontsize-ensurer.reset-size1.size4, div#\:\$p > svg > foreignObject > section .katex div#\:\$p > svg > foreignObject > section section.sizing.reset-size1.size4{--marpit-root-font-size:1.6em;}div#\:\$p > svg > foreignObject > section .katex .fontsize-ensurer.reset-size1.size5,div#\:\$p > svg > foreignObject > section .katex .sizing.reset-size1.size5{font-size:1.8em}div#\:\$p > svg > foreignObject > section .katex div#\:\$p > svg > foreignObject > section section.fontsize-ensurer.reset-size1.size5, div#\:\$p > svg > foreignObject > section .katex div#\:\$p > svg > foreignObject > section section.sizing.reset-size1.size5{--marpit-root-font-size:1.8em;}div#\:\$p > svg > foreignObject > section .katex .fontsize-ensurer.reset-size1.size6,div#\:\$p > svg > foreignObject > section .katex .sizing.reset-size1.size6{font-size:2em}div#\:\$p > svg > foreignObject > section .katex div#\:\$p > svg > foreignObject > section section.fontsize-ensurer.reset-size1.size6, div#\:\$p > svg > foreignObject > section .katex div#\:\$p > svg > foreignObject > section section.sizing.reset-size1.size6{--marpit-root-font-size:2em;}div#\:\$p > svg > foreignObject > section .katex .fontsize-ensurer.reset-size1.size7,div#\:\$p > svg > foreignObject > section .katex .sizing.reset-size1.size7{font-size:2.4em}div#\:\$p > svg > foreignObject > section .katex div#\:\$p > svg > foreignObject > section section.fontsize-ensurer.reset-size1.size7, div#\:\$p > svg > foreignObject > section .katex div#\:\$p > svg > foreignObject > section section.sizing.reset-size1.size7{--marpit-root-font-size:2.4em;}div#\:\$p > svg > foreignObject > section .katex .fontsize-ensurer.reset-size1.size8,div#\:\$p > svg > foreignObject > section .katex .sizing.reset-size1.size8{font-size:2.88em}div#\:\$p > svg > foreignObject > section .katex div#\:\$p > svg > foreignObject > section section.fontsize-ensurer.reset-size1.size8, div#\:\$p > svg > foreignObject > section .katex div#\:\$p > svg > foreignObject > section section.sizing.reset-size1.size8{--marpit-root-font-size:2.88em;}div#\:\$p > svg > foreignObject > section .katex .fontsize-ensurer.reset-size1.size9,div#\:\$p > svg > foreignObject > section .katex .sizing.reset-size1.size9{font-size:3.456em}div#\:\$p > svg > foreignObject > section .katex div#\:\$p > svg > foreignObject > section section.fontsize-ensurer.reset-size1.size9, div#\:\$p > svg > foreignObject > section .katex div#\:\$p > svg > foreignObject > section section.sizing.reset-size1.size9{--marpit-root-font-size:3.456em;}div#\:\$p > svg > foreignObject > section .katex .fontsize-ensurer.reset-size1.size10,div#\:\$p > svg > foreignObject > section .katex .sizing.reset-size1.size10{font-size:4.148em}div#\:\$p > svg > foreignObject > section .katex div#\:\$p > svg > foreignObject > section section.fontsize-ensurer.reset-size1.size10, div#\:\$p > svg > foreignObject > section .katex div#\:\$p > svg > foreignObject > section section.sizing.reset-size1.size10{--marpit-root-font-size:4.148em;}div#\:\$p > svg > foreignObject > section .katex .fontsize-ensurer.reset-size1.size11,div#\:\$p > svg > foreignObject > section .katex .sizing.reset-size1.size11{font-size:4.976em}div#\:\$p > svg > foreignObject > section .katex div#\:\$p > svg > foreignObject > section section.fontsize-ensurer.reset-size1.size11, div#\:\$p > svg > foreignObject > section .katex div#\:\$p > svg > foreignObject > section section.sizing.reset-size1.size11{--marpit-root-font-size:4.976em;}div#\:\$p > svg > foreignObject > section .katex .fontsize-ensurer.reset-size2.size1,div#\:\$p > svg > foreignObject > section .katex .sizing.reset-size2.size1{font-size:.8333333333em}div#\:\$p > svg > foreignObject > section .katex div#\:\$p > svg > foreignObject > section section.fontsize-ensurer.reset-size2.size1, div#\:\$p > svg > foreignObject > section .katex div#\:\$p > svg > foreignObject > section section.sizing.reset-size2.size1{--marpit-root-font-size:.8333333333em;}div#\:\$p > svg > foreignObject > section .katex .fontsize-ensurer.reset-size2.size2,div#\:\$p > svg > foreignObject > section .katex .sizing.reset-size2.size2{font-size:1em}div#\:\$p > svg > foreignObject > section .katex div#\:\$p > svg > foreignObject > section section.fontsize-ensurer.reset-size2.size2, div#\:\$p > svg > foreignObject > section .katex div#\:\$p > svg > foreignObject > section section.sizing.reset-size2.size2{--marpit-root-font-size:1em;}div#\:\$p > svg > foreignObject > section .katex .fontsize-ensurer.reset-size2.size3,div#\:\$p > svg > foreignObject > section .katex .sizing.reset-size2.size3{font-size:1.1666666667em}div#\:\$p > svg > foreignObject > section .katex div#\:\$p > svg > foreignObject > section section.fontsize-ensurer.reset-size2.size3, div#\:\$p > svg > foreignObject > section .katex div#\:\$p > svg > foreignObject > section section.sizing.reset-size2.size3{--marpit-root-font-size:1.1666666667em;}div#\:\$p > svg > foreignObject > section .katex .fontsize-ensurer.reset-size2.size4,div#\:\$p > svg > foreignObject > section .katex .sizing.reset-size2.size4{font-size:1.3333333333em}div#\:\$p > svg > foreignObject > section .katex div#\:\$p > svg > foreignObject > section section.fontsize-ensurer.reset-size2.size4, div#\:\$p > svg > foreignObject > section .katex div#\:\$p > svg > foreignObject > section section.sizing.reset-size2.size4{--marpit-root-font-size:1.3333333333em;}div#\:\$p > svg > foreignObject > section .katex .fontsize-ensurer.reset-size2.size5,div#\:\$p > svg > foreignObject > section .katex .sizing.reset-size2.size5{font-size:1.5em}div#\:\$p > svg > foreignObject > section .katex div#\:\$p > svg > foreignObject > section section.fontsize-ensurer.reset-size2.size5, div#\:\$p > svg > foreignObject > section .katex div#\:\$p > svg > foreignObject > section section.sizing.reset-size2.size5{--marpit-root-font-size:1.5em;}div#\:\$p > svg > foreignObject > section .katex .fontsize-ensurer.reset-size2.size6,div#\:\$p > svg > foreignObject > section .katex .sizing.reset-size2.size6{font-size:1.6666666667em}div#\:\$p > svg > foreignObject > section .katex div#\:\$p > svg > foreignObject > section section.fontsize-ensurer.reset-size2.size6, div#\:\$p > svg > foreignObject > section .katex div#\:\$p > svg > foreignObject > section section.sizing.reset-size2.size6{--marpit-root-font-size:1.6666666667em;}div#\:\$p > svg > foreignObject > section .katex .fontsize-ensurer.reset-size2.size7,div#\:\$p > svg > foreignObject > section .katex .sizing.reset-size2.size7{font-size:2em}div#\:\$p > svg > foreignObject > section .katex div#\:\$p > svg > foreignObject > section section.fontsize-ensurer.reset-size2.size7, div#\:\$p > svg > foreignObject > section .katex div#\:\$p > svg > foreignObject > section section.sizing.reset-size2.size7{--marpit-root-font-size:2em;}div#\:\$p > svg > foreignObject > section .katex .fontsize-ensurer.reset-size2.size8,div#\:\$p > svg > foreignObject > section .katex .sizing.reset-size2.size8{font-size:2.4em}div#\:\$p > svg > foreignObject > section .katex div#\:\$p > svg > foreignObject > section section.fontsize-ensurer.reset-size2.size8, div#\:\$p > svg > foreignObject > section .katex div#\:\$p > svg > foreignObject > section section.sizing.reset-size2.size8{--marpit-root-font-size:2.4em;}div#\:\$p > svg > foreignObject > section .katex .fontsize-ensurer.reset-size2.size9,div#\:\$p > svg > foreignObject > section .katex .sizing.reset-size2.size9{font-size:2.88em}div#\:\$p > svg > foreignObject > section .katex div#\:\$p > svg > foreignObject > section section.fontsize-ensurer.reset-size2.size9, div#\:\$p > svg > foreignObject > section .katex div#\:\$p > svg > foreignObject > section section.sizing.reset-size2.size9{--marpit-root-font-size:2.88em;}div#\:\$p > svg > foreignObject > section .katex .fontsize-ensurer.reset-size2.size10,div#\:\$p > svg > foreignObject > section .katex .sizing.reset-size2.size10{font-size:3.4566666667em}div#\:\$p > svg > foreignObject > section .katex div#\:\$p > svg > foreignObject > section section.fontsize-ensurer.reset-size2.size10, div#\:\$p > svg > foreignObject > section .katex div#\:\$p > svg > foreignObject > section section.sizing.reset-size2.size10{--marpit-root-font-size:3.4566666667em;}div#\:\$p > svg > foreignObject > section .katex .fontsize-ensurer.reset-size2.size11,div#\:\$p > svg > foreignObject > section .katex .sizing.reset-size2.size11{font-size:4.1466666667em}div#\:\$p > svg > foreignObject > section .katex div#\:\$p > svg > foreignObject > section section.fontsize-ensurer.reset-size2.size11, div#\:\$p > svg > foreignObject > section .katex div#\:\$p > svg > foreignObject > section section.sizing.reset-size2.size11{--marpit-root-font-size:4.1466666667em;}div#\:\$p > svg > foreignObject > section .katex .fontsize-ensurer.reset-size3.size1,div#\:\$p > svg > foreignObject > section .katex .sizing.reset-size3.size1{font-size:.7142857143em}div#\:\$p > svg > foreignObject > section .katex div#\:\$p > svg > foreignObject > section section.fontsize-ensurer.reset-size3.size1, div#\:\$p > svg > foreignObject > section .katex div#\:\$p > svg > foreignObject > section section.sizing.reset-size3.size1{--marpit-root-font-size:.7142857143em;}div#\:\$p > svg > foreignObject > section .katex .fontsize-ensurer.reset-size3.size2,div#\:\$p > svg > foreignObject > section .katex .sizing.reset-size3.size2{font-size:.8571428571em}div#\:\$p > svg > foreignObject > section .katex div#\:\$p > svg > foreignObject > section section.fontsize-ensurer.reset-size3.size2, div#\:\$p > svg > foreignObject > section .katex div#\:\$p > svg > foreignObject > section section.sizing.reset-size3.size2{--marpit-root-font-size:.8571428571em;}div#\:\$p > svg > foreignObject > section .katex .fontsize-ensurer.reset-size3.size3,div#\:\$p > svg > foreignObject > section .katex .sizing.reset-size3.size3{font-size:1em}div#\:\$p > svg > foreignObject > section .katex div#\:\$p > svg > foreignObject > section section.fontsize-ensurer.reset-size3.size3, div#\:\$p > svg > foreignObject > section .katex div#\:\$p > svg > foreignObject > section section.sizing.reset-size3.size3{--marpit-root-font-size:1em;}div#\:\$p > svg > foreignObject > section .katex .fontsize-ensurer.reset-size3.size4,div#\:\$p > svg > foreignObject > section .katex .sizing.reset-size3.size4{font-size:1.1428571429em}div#\:\$p > svg > foreignObject > section .katex div#\:\$p > svg > foreignObject > section section.fontsize-ensurer.reset-size3.size4, div#\:\$p > svg > foreignObject > section .katex div#\:\$p > svg > foreignObject > section section.sizing.reset-size3.size4{--marpit-root-font-size:1.1428571429em;}div#\:\$p > svg > foreignObject > section .katex .fontsize-ensurer.reset-size3.size5,div#\:\$p > svg > foreignObject > section .katex .sizing.reset-size3.size5{font-size:1.2857142857em}div#\:\$p > svg > foreignObject > section .katex div#\:\$p > svg > foreignObject > section section.fontsize-ensurer.reset-size3.size5, div#\:\$p > svg > foreignObject > section .katex div#\:\$p > svg > foreignObject > section section.sizing.reset-size3.size5{--marpit-root-font-size:1.2857142857em;}div#\:\$p > svg > foreignObject > section .katex .fontsize-ensurer.reset-size3.size6,div#\:\$p > svg > foreignObject > section .katex .sizing.reset-size3.size6{font-size:1.4285714286em}div#\:\$p > svg > foreignObject > section .katex div#\:\$p > svg > foreignObject > section section.fontsize-ensurer.reset-size3.size6, div#\:\$p > svg > foreignObject > section .katex div#\:\$p > svg > foreignObject > section section.sizing.reset-size3.size6{--marpit-root-font-size:1.4285714286em;}div#\:\$p > svg > foreignObject > section .katex .fontsize-ensurer.reset-size3.size7,div#\:\$p > svg > foreignObject > section .katex .sizing.reset-size3.size7{font-size:1.7142857143em}div#\:\$p > svg > foreignObject > section .katex div#\:\$p > svg > foreignObject > section section.fontsize-ensurer.reset-size3.size7, div#\:\$p > svg > foreignObject > section .katex div#\:\$p > svg > foreignObject > section section.sizing.reset-size3.size7{--marpit-root-font-size:1.7142857143em;}div#\:\$p > svg > foreignObject > section .katex .fontsize-ensurer.reset-size3.size8,div#\:\$p > svg > foreignObject > section .katex .sizing.reset-size3.size8{font-size:2.0571428571em}div#\:\$p > svg > foreignObject > section .katex div#\:\$p > svg > foreignObject > section section.fontsize-ensurer.reset-size3.size8, div#\:\$p > svg > foreignObject > section .katex div#\:\$p > svg > foreignObject > section section.sizing.reset-size3.size8{--marpit-root-font-size:2.0571428571em;}div#\:\$p > svg > foreignObject > section .katex .fontsize-ensurer.reset-size3.size9,div#\:\$p > svg > foreignObject > section .katex .sizing.reset-size3.size9{font-size:2.4685714286em}div#\:\$p > svg > foreignObject > section .katex div#\:\$p > svg > foreignObject > section section.fontsize-ensurer.reset-size3.size9, div#\:\$p > svg > foreignObject > section .katex div#\:\$p > svg > foreignObject > section section.sizing.reset-size3.size9{--marpit-root-font-size:2.4685714286em;}div#\:\$p > svg > foreignObject > section .katex .fontsize-ensurer.reset-size3.size10,div#\:\$p > svg > foreignObject > section .katex .sizing.reset-size3.size10{font-size:2.9628571429em}div#\:\$p > svg > foreignObject > section .katex div#\:\$p > svg > foreignObject > section section.fontsize-ensurer.reset-size3.size10, div#\:\$p > svg > foreignObject > section .katex div#\:\$p > svg > foreignObject > section section.sizing.reset-size3.size10{--marpit-root-font-size:2.9628571429em;}div#\:\$p > svg > foreignObject > section .katex .fontsize-ensurer.reset-size3.size11,div#\:\$p > svg > foreignObject > section .katex .sizing.reset-size3.size11{font-size:3.5542857143em}div#\:\$p > svg > foreignObject > section .katex div#\:\$p > svg > foreignObject > section section.fontsize-ensurer.reset-size3.size11, div#\:\$p > svg > foreignObject > section .katex div#\:\$p > svg > foreignObject > section section.sizing.reset-size3.size11{--marpit-root-font-size:3.5542857143em;}div#\:\$p > svg > foreignObject > section .katex .fontsize-ensurer.reset-size4.size1,div#\:\$p > svg > foreignObject > section .katex .sizing.reset-size4.size1{font-size:.625em}div#\:\$p > svg > foreignObject > section .katex div#\:\$p > svg > foreignObject > section section.fontsize-ensurer.reset-size4.size1, div#\:\$p > svg > foreignObject > section .katex div#\:\$p > svg > foreignObject > section section.sizing.reset-size4.size1{--marpit-root-font-size:.625em;}div#\:\$p > svg > foreignObject > section .katex .fontsize-ensurer.reset-size4.size2,div#\:\$p > svg > foreignObject > section .katex .sizing.reset-size4.size2{font-size:.75em}div#\:\$p > svg > foreignObject > section .katex div#\:\$p > svg > foreignObject > section section.fontsize-ensurer.reset-size4.size2, div#\:\$p > svg > foreignObject > section .katex div#\:\$p > svg > foreignObject > section section.sizing.reset-size4.size2{--marpit-root-font-size:.75em;}div#\:\$p > svg > foreignObject > section .katex .fontsize-ensurer.reset-size4.size3,div#\:\$p > svg > foreignObject > section .katex .sizing.reset-size4.size3{font-size:.875em}div#\:\$p > svg > foreignObject > section .katex div#\:\$p > svg > foreignObject > section section.fontsize-ensurer.reset-size4.size3, div#\:\$p > svg > foreignObject > section .katex div#\:\$p > svg > foreignObject > section section.sizing.reset-size4.size3{--marpit-root-font-size:.875em;}div#\:\$p > svg > foreignObject > section .katex .fontsize-ensurer.reset-size4.size4,div#\:\$p > svg > foreignObject > section .katex .sizing.reset-size4.size4{font-size:1em}div#\:\$p > svg > foreignObject > section .katex div#\:\$p > svg > foreignObject > section section.fontsize-ensurer.reset-size4.size4, div#\:\$p > svg > foreignObject > section .katex div#\:\$p > svg > foreignObject > section section.sizing.reset-size4.size4{--marpit-root-font-size:1em;}div#\:\$p > svg > foreignObject > section .katex .fontsize-ensurer.reset-size4.size5,div#\:\$p > svg > foreignObject > section .katex .sizing.reset-size4.size5{font-size:1.125em}div#\:\$p > svg > foreignObject > section .katex div#\:\$p > svg > foreignObject > section section.fontsize-ensurer.reset-size4.size5, div#\:\$p > svg > foreignObject > section .katex div#\:\$p > svg > foreignObject > section section.sizing.reset-size4.size5{--marpit-root-font-size:1.125em;}div#\:\$p > svg > foreignObject > section .katex .fontsize-ensurer.reset-size4.size6,div#\:\$p > svg > foreignObject > section .katex .sizing.reset-size4.size6{font-size:1.25em}div#\:\$p > svg > foreignObject > section .katex div#\:\$p > svg > foreignObject > section section.fontsize-ensurer.reset-size4.size6, div#\:\$p > svg > foreignObject > section .katex div#\:\$p > svg > foreignObject > section section.sizing.reset-size4.size6{--marpit-root-font-size:1.25em;}div#\:\$p > svg > foreignObject > section .katex .fontsize-ensurer.reset-size4.size7,div#\:\$p > svg > foreignObject > section .katex .sizing.reset-size4.size7{font-size:1.5em}div#\:\$p > svg > foreignObject > section .katex div#\:\$p > svg > foreignObject > section section.fontsize-ensurer.reset-size4.size7, div#\:\$p > svg > foreignObject > section .katex div#\:\$p > svg > foreignObject > section section.sizing.reset-size4.size7{--marpit-root-font-size:1.5em;}div#\:\$p > svg > foreignObject > section .katex .fontsize-ensurer.reset-size4.size8,div#\:\$p > svg > foreignObject > section .katex .sizing.reset-size4.size8{font-size:1.8em}div#\:\$p > svg > foreignObject > section .katex div#\:\$p > svg > foreignObject > section section.fontsize-ensurer.reset-size4.size8, div#\:\$p > svg > foreignObject > section .katex div#\:\$p > svg > foreignObject > section section.sizing.reset-size4.size8{--marpit-root-font-size:1.8em;}div#\:\$p > svg > foreignObject > section .katex .fontsize-ensurer.reset-size4.size9,div#\:\$p > svg > foreignObject > section .katex .sizing.reset-size4.size9{font-size:2.16em}div#\:\$p > svg > foreignObject > section .katex div#\:\$p > svg > foreignObject > section section.fontsize-ensurer.reset-size4.size9, div#\:\$p > svg > foreignObject > section .katex div#\:\$p > svg > foreignObject > section section.sizing.reset-size4.size9{--marpit-root-font-size:2.16em;}div#\:\$p > svg > foreignObject > section .katex .fontsize-ensurer.reset-size4.size10,div#\:\$p > svg > foreignObject > section .katex .sizing.reset-size4.size10{font-size:2.5925em}div#\:\$p > svg > foreignObject > section .katex div#\:\$p > svg > foreignObject > section section.fontsize-ensurer.reset-size4.size10, div#\:\$p > svg > foreignObject > section .katex div#\:\$p > svg > foreignObject > section section.sizing.reset-size4.size10{--marpit-root-font-size:2.5925em;}div#\:\$p > svg > foreignObject > section .katex .fontsize-ensurer.reset-size4.size11,div#\:\$p > svg > foreignObject > section .katex .sizing.reset-size4.size11{font-size:3.11em}div#\:\$p > svg > foreignObject > section .katex div#\:\$p > svg > foreignObject > section section.fontsize-ensurer.reset-size4.size11, div#\:\$p > svg > foreignObject > section .katex div#\:\$p > svg > foreignObject > section section.sizing.reset-size4.size11{--marpit-root-font-size:3.11em;}div#\:\$p > svg > foreignObject > section .katex .fontsize-ensurer.reset-size5.size1,div#\:\$p > svg > foreignObject > section .katex .sizing.reset-size5.size1{font-size:.5555555556em}div#\:\$p > svg > foreignObject > section .katex div#\:\$p > svg > foreignObject > section section.fontsize-ensurer.reset-size5.size1, div#\:\$p > svg > foreignObject > section .katex div#\:\$p > svg > foreignObject > section section.sizing.reset-size5.size1{--marpit-root-font-size:.5555555556em;}div#\:\$p > svg > foreignObject > section .katex .fontsize-ensurer.reset-size5.size2,div#\:\$p > svg > foreignObject > section .katex .sizing.reset-size5.size2{font-size:.6666666667em}div#\:\$p > svg > foreignObject > section .katex div#\:\$p > svg > foreignObject > section section.fontsize-ensurer.reset-size5.size2, div#\:\$p > svg > foreignObject > section .katex div#\:\$p > svg > foreignObject > section section.sizing.reset-size5.size2{--marpit-root-font-size:.6666666667em;}div#\:\$p > svg > foreignObject > section .katex .fontsize-ensurer.reset-size5.size3,div#\:\$p > svg > foreignObject > section .katex .sizing.reset-size5.size3{font-size:.7777777778em}div#\:\$p > svg > foreignObject > section .katex div#\:\$p > svg > foreignObject > section section.fontsize-ensurer.reset-size5.size3, div#\:\$p > svg > foreignObject > section .katex div#\:\$p > svg > foreignObject > section section.sizing.reset-size5.size3{--marpit-root-font-size:.7777777778em;}div#\:\$p > svg > foreignObject > section .katex .fontsize-ensurer.reset-size5.size4,div#\:\$p > svg > foreignObject > section .katex .sizing.reset-size5.size4{font-size:.8888888889em}div#\:\$p > svg > foreignObject > section .katex div#\:\$p > svg > foreignObject > section section.fontsize-ensurer.reset-size5.size4, div#\:\$p > svg > foreignObject > section .katex div#\:\$p > svg > foreignObject > section section.sizing.reset-size5.size4{--marpit-root-font-size:.8888888889em;}div#\:\$p > svg > foreignObject > section .katex .fontsize-ensurer.reset-size5.size5,div#\:\$p > svg > foreignObject > section .katex .sizing.reset-size5.size5{font-size:1em}div#\:\$p > svg > foreignObject > section .katex div#\:\$p > svg > foreignObject > section section.fontsize-ensurer.reset-size5.size5, div#\:\$p > svg > foreignObject > section .katex div#\:\$p > svg > foreignObject > section section.sizing.reset-size5.size5{--marpit-root-font-size:1em;}div#\:\$p > svg > foreignObject > section .katex .fontsize-ensurer.reset-size5.size6,div#\:\$p > svg > foreignObject > section .katex .sizing.reset-size5.size6{font-size:1.1111111111em}div#\:\$p > svg > foreignObject > section .katex div#\:\$p > svg > foreignObject > section section.fontsize-ensurer.reset-size5.size6, div#\:\$p > svg > foreignObject > section .katex div#\:\$p > svg > foreignObject > section section.sizing.reset-size5.size6{--marpit-root-font-size:1.1111111111em;}div#\:\$p > svg > foreignObject > section .katex .fontsize-ensurer.reset-size5.size7,div#\:\$p > svg > foreignObject > section .katex .sizing.reset-size5.size7{font-size:1.3333333333em}div#\:\$p > svg > foreignObject > section .katex div#\:\$p > svg > foreignObject > section section.fontsize-ensurer.reset-size5.size7, div#\:\$p > svg > foreignObject > section .katex div#\:\$p > svg > foreignObject > section section.sizing.reset-size5.size7{--marpit-root-font-size:1.3333333333em;}div#\:\$p > svg > foreignObject > section .katex .fontsize-ensurer.reset-size5.size8,div#\:\$p > svg > foreignObject > section .katex .sizing.reset-size5.size8{font-size:1.6em}div#\:\$p > svg > foreignObject > section .katex div#\:\$p > svg > foreignObject > section section.fontsize-ensurer.reset-size5.size8, div#\:\$p > svg > foreignObject > section .katex div#\:\$p > svg > foreignObject > section section.sizing.reset-size5.size8{--marpit-root-font-size:1.6em;}div#\:\$p > svg > foreignObject > section .katex .fontsize-ensurer.reset-size5.size9,div#\:\$p > svg > foreignObject > section .katex .sizing.reset-size5.size9{font-size:1.92em}div#\:\$p > svg > foreignObject > section .katex div#\:\$p > svg > foreignObject > section section.fontsize-ensurer.reset-size5.size9, div#\:\$p > svg > foreignObject > section .katex div#\:\$p > svg > foreignObject > section section.sizing.reset-size5.size9{--marpit-root-font-size:1.92em;}div#\:\$p > svg > foreignObject > section .katex .fontsize-ensurer.reset-size5.size10,div#\:\$p > svg > foreignObject > section .katex .sizing.reset-size5.size10{font-size:2.3044444444em}div#\:\$p > svg > foreignObject > section .katex div#\:\$p > svg > foreignObject > section section.fontsize-ensurer.reset-size5.size10, div#\:\$p > svg > foreignObject > section .katex div#\:\$p > svg > foreignObject > section section.sizing.reset-size5.size10{--marpit-root-font-size:2.3044444444em;}div#\:\$p > svg > foreignObject > section .katex .fontsize-ensurer.reset-size5.size11,div#\:\$p > svg > foreignObject > section .katex .sizing.reset-size5.size11{font-size:2.7644444444em}div#\:\$p > svg > foreignObject > section .katex div#\:\$p > svg > foreignObject > section section.fontsize-ensurer.reset-size5.size11, div#\:\$p > svg > foreignObject > section .katex div#\:\$p > svg > foreignObject > section section.sizing.reset-size5.size11{--marpit-root-font-size:2.7644444444em;}div#\:\$p > svg > foreignObject > section .katex .fontsize-ensurer.reset-size6.size1,div#\:\$p > svg > foreignObject > section .katex .sizing.reset-size6.size1{font-size:.5em}div#\:\$p > svg > foreignObject > section .katex div#\:\$p > svg > foreignObject > section section.fontsize-ensurer.reset-size6.size1, div#\:\$p > svg > foreignObject > section .katex div#\:\$p > svg > foreignObject > section section.sizing.reset-size6.size1{--marpit-root-font-size:.5em;}div#\:\$p > svg > foreignObject > section .katex .fontsize-ensurer.reset-size6.size2,div#\:\$p > svg > foreignObject > section .katex .sizing.reset-size6.size2{font-size:.6em}div#\:\$p > svg > foreignObject > section .katex div#\:\$p > svg > foreignObject > section section.fontsize-ensurer.reset-size6.size2, div#\:\$p > svg > foreignObject > section .katex div#\:\$p > svg > foreignObject > section section.sizing.reset-size6.size2{--marpit-root-font-size:.6em;}div#\:\$p > svg > foreignObject > section .katex .fontsize-ensurer.reset-size6.size3,div#\:\$p > svg > foreignObject > section .katex .sizing.reset-size6.size3{font-size:.7em}div#\:\$p > svg > foreignObject > section .katex div#\:\$p > svg > foreignObject > section section.fontsize-ensurer.reset-size6.size3, div#\:\$p > svg > foreignObject > section .katex div#\:\$p > svg > foreignObject > section section.sizing.reset-size6.size3{--marpit-root-font-size:.7em;}div#\:\$p > svg > foreignObject > section .katex .fontsize-ensurer.reset-size6.size4,div#\:\$p > svg > foreignObject > section .katex .sizing.reset-size6.size4{font-size:.8em}div#\:\$p > svg > foreignObject > section .katex div#\:\$p > svg > foreignObject > section section.fontsize-ensurer.reset-size6.size4, div#\:\$p > svg > foreignObject > section .katex div#\:\$p > svg > foreignObject > section section.sizing.reset-size6.size4{--marpit-root-font-size:.8em;}div#\:\$p > svg > foreignObject > section .katex .fontsize-ensurer.reset-size6.size5,div#\:\$p > svg > foreignObject > section .katex .sizing.reset-size6.size5{font-size:.9em}div#\:\$p > svg > foreignObject > section .katex div#\:\$p > svg > foreignObject > section section.fontsize-ensurer.reset-size6.size5, div#\:\$p > svg > foreignObject > section .katex div#\:\$p > svg > foreignObject > section section.sizing.reset-size6.size5{--marpit-root-font-size:.9em;}div#\:\$p > svg > foreignObject > section .katex .fontsize-ensurer.reset-size6.size6,div#\:\$p > svg > foreignObject > section .katex .sizing.reset-size6.size6{font-size:1em}div#\:\$p > svg > foreignObject > section .katex div#\:\$p > svg > foreignObject > section section.fontsize-ensurer.reset-size6.size6, div#\:\$p > svg > foreignObject > section .katex div#\:\$p > svg > foreignObject > section section.sizing.reset-size6.size6{--marpit-root-font-size:1em;}div#\:\$p > svg > foreignObject > section .katex .fontsize-ensurer.reset-size6.size7,div#\:\$p > svg > foreignObject > section .katex .sizing.reset-size6.size7{font-size:1.2em}div#\:\$p > svg > foreignObject > section .katex div#\:\$p > svg > foreignObject > section section.fontsize-ensurer.reset-size6.size7, div#\:\$p > svg > foreignObject > section .katex div#\:\$p > svg > foreignObject > section section.sizing.reset-size6.size7{--marpit-root-font-size:1.2em;}div#\:\$p > svg > foreignObject > section .katex .fontsize-ensurer.reset-size6.size8,div#\:\$p > svg > foreignObject > section .katex .sizing.reset-size6.size8{font-size:1.44em}div#\:\$p > svg > foreignObject > section .katex div#\:\$p > svg > foreignObject > section section.fontsize-ensurer.reset-size6.size8, div#\:\$p > svg > foreignObject > section .katex div#\:\$p > svg > foreignObject > section section.sizing.reset-size6.size8{--marpit-root-font-size:1.44em;}div#\:\$p > svg > foreignObject > section .katex .fontsize-ensurer.reset-size6.size9,div#\:\$p > svg > foreignObject > section .katex .sizing.reset-size6.size9{font-size:1.728em}div#\:\$p > svg > foreignObject > section .katex div#\:\$p > svg > foreignObject > section section.fontsize-ensurer.reset-size6.size9, div#\:\$p > svg > foreignObject > section .katex div#\:\$p > svg > foreignObject > section section.sizing.reset-size6.size9{--marpit-root-font-size:1.728em;}div#\:\$p > svg > foreignObject > section .katex .fontsize-ensurer.reset-size6.size10,div#\:\$p > svg > foreignObject > section .katex .sizing.reset-size6.size10{font-size:2.074em}div#\:\$p > svg > foreignObject > section .katex div#\:\$p > svg > foreignObject > section section.fontsize-ensurer.reset-size6.size10, div#\:\$p > svg > foreignObject > section .katex div#\:\$p > svg > foreignObject > section section.sizing.reset-size6.size10{--marpit-root-font-size:2.074em;}div#\:\$p > svg > foreignObject > section .katex .fontsize-ensurer.reset-size6.size11,div#\:\$p > svg > foreignObject > section .katex .sizing.reset-size6.size11{font-size:2.488em}div#\:\$p > svg > foreignObject > section .katex div#\:\$p > svg > foreignObject > section section.fontsize-ensurer.reset-size6.size11, div#\:\$p > svg > foreignObject > section .katex div#\:\$p > svg > foreignObject > section section.sizing.reset-size6.size11{--marpit-root-font-size:2.488em;}div#\:\$p > svg > foreignObject > section .katex .fontsize-ensurer.reset-size7.size1,div#\:\$p > svg > foreignObject > section .katex .sizing.reset-size7.size1{font-size:.4166666667em}div#\:\$p > svg > foreignObject > section .katex div#\:\$p > svg > foreignObject > section section.fontsize-ensurer.reset-size7.size1, div#\:\$p > svg > foreignObject > section .katex div#\:\$p > svg > foreignObject > section section.sizing.reset-size7.size1{--marpit-root-font-size:.4166666667em;}div#\:\$p > svg > foreignObject > section .katex .fontsize-ensurer.reset-size7.size2,div#\:\$p > svg > foreignObject > section .katex .sizing.reset-size7.size2{font-size:.5em}div#\:\$p > svg > foreignObject > section .katex div#\:\$p > svg > foreignObject > section section.fontsize-ensurer.reset-size7.size2, div#\:\$p > svg > foreignObject > section .katex div#\:\$p > svg > foreignObject > section section.sizing.reset-size7.size2{--marpit-root-font-size:.5em;}div#\:\$p > svg > foreignObject > section .katex .fontsize-ensurer.reset-size7.size3,div#\:\$p > svg > foreignObject > section .katex .sizing.reset-size7.size3{font-size:.5833333333em}div#\:\$p > svg > foreignObject > section .katex div#\:\$p > svg > foreignObject > section section.fontsize-ensurer.reset-size7.size3, div#\:\$p > svg > foreignObject > section .katex div#\:\$p > svg > foreignObject > section section.sizing.reset-size7.size3{--marpit-root-font-size:.5833333333em;}div#\:\$p > svg > foreignObject > section .katex .fontsize-ensurer.reset-size7.size4,div#\:\$p > svg > foreignObject > section .katex .sizing.reset-size7.size4{font-size:.6666666667em}div#\:\$p > svg > foreignObject > section .katex div#\:\$p > svg > foreignObject > section section.fontsize-ensurer.reset-size7.size4, div#\:\$p > svg > foreignObject > section .katex div#\:\$p > svg > foreignObject > section section.sizing.reset-size7.size4{--marpit-root-font-size:.6666666667em;}div#\:\$p > svg > foreignObject > section .katex .fontsize-ensurer.reset-size7.size5,div#\:\$p > svg > foreignObject > section .katex .sizing.reset-size7.size5{font-size:.75em}div#\:\$p > svg > foreignObject > section .katex div#\:\$p > svg > foreignObject > section section.fontsize-ensurer.reset-size7.size5, div#\:\$p > svg > foreignObject > section .katex div#\:\$p > svg > foreignObject > section section.sizing.reset-size7.size5{--marpit-root-font-size:.75em;}div#\:\$p > svg > foreignObject > section .katex .fontsize-ensurer.reset-size7.size6,div#\:\$p > svg > foreignObject > section .katex .sizing.reset-size7.size6{font-size:.8333333333em}div#\:\$p > svg > foreignObject > section .katex div#\:\$p > svg > foreignObject > section section.fontsize-ensurer.reset-size7.size6, div#\:\$p > svg > foreignObject > section .katex div#\:\$p > svg > foreignObject > section section.sizing.reset-size7.size6{--marpit-root-font-size:.8333333333em;}div#\:\$p > svg > foreignObject > section .katex .fontsize-ensurer.reset-size7.size7,div#\:\$p > svg > foreignObject > section .katex .sizing.reset-size7.size7{font-size:1em}div#\:\$p > svg > foreignObject > section .katex div#\:\$p > svg > foreignObject > section section.fontsize-ensurer.reset-size7.size7, div#\:\$p > svg > foreignObject > section .katex div#\:\$p > svg > foreignObject > section section.sizing.reset-size7.size7{--marpit-root-font-size:1em;}div#\:\$p > svg > foreignObject > section .katex .fontsize-ensurer.reset-size7.size8,div#\:\$p > svg > foreignObject > section .katex .sizing.reset-size7.size8{font-size:1.2em}div#\:\$p > svg > foreignObject > section .katex div#\:\$p > svg > foreignObject > section section.fontsize-ensurer.reset-size7.size8, div#\:\$p > svg > foreignObject > section .katex div#\:\$p > svg > foreignObject > section section.sizing.reset-size7.size8{--marpit-root-font-size:1.2em;}div#\:\$p > svg > foreignObject > section .katex .fontsize-ensurer.reset-size7.size9,div#\:\$p > svg > foreignObject > section .katex .sizing.reset-size7.size9{font-size:1.44em}div#\:\$p > svg > foreignObject > section .katex div#\:\$p > svg > foreignObject > section section.fontsize-ensurer.reset-size7.size9, div#\:\$p > svg > foreignObject > section .katex div#\:\$p > svg > foreignObject > section section.sizing.reset-size7.size9{--marpit-root-font-size:1.44em;}div#\:\$p > svg > foreignObject > section .katex .fontsize-ensurer.reset-size7.size10,div#\:\$p > svg > foreignObject > section .katex .sizing.reset-size7.size10{font-size:1.7283333333em}div#\:\$p > svg > foreignObject > section .katex div#\:\$p > svg > foreignObject > section section.fontsize-ensurer.reset-size7.size10, div#\:\$p > svg > foreignObject > section .katex div#\:\$p > svg > foreignObject > section section.sizing.reset-size7.size10{--marpit-root-font-size:1.7283333333em;}div#\:\$p > svg > foreignObject > section .katex .fontsize-ensurer.reset-size7.size11,div#\:\$p > svg > foreignObject > section .katex .sizing.reset-size7.size11{font-size:2.0733333333em}div#\:\$p > svg > foreignObject > section .katex div#\:\$p > svg > foreignObject > section section.fontsize-ensurer.reset-size7.size11, div#\:\$p > svg > foreignObject > section .katex div#\:\$p > svg > foreignObject > section section.sizing.reset-size7.size11{--marpit-root-font-size:2.0733333333em;}div#\:\$p > svg > foreignObject > section .katex .fontsize-ensurer.reset-size8.size1,div#\:\$p > svg > foreignObject > section .katex .sizing.reset-size8.size1{font-size:.3472222222em}div#\:\$p > svg > foreignObject > section .katex div#\:\$p > svg > foreignObject > section section.fontsize-ensurer.reset-size8.size1, div#\:\$p > svg > foreignObject > section .katex div#\:\$p > svg > foreignObject > section section.sizing.reset-size8.size1{--marpit-root-font-size:.3472222222em;}div#\:\$p > svg > foreignObject > section .katex .fontsize-ensurer.reset-size8.size2,div#\:\$p > svg > foreignObject > section .katex .sizing.reset-size8.size2{font-size:.4166666667em}div#\:\$p > svg > foreignObject > section .katex div#\:\$p > svg > foreignObject > section section.fontsize-ensurer.reset-size8.size2, div#\:\$p > svg > foreignObject > section .katex div#\:\$p > svg > foreignObject > section section.sizing.reset-size8.size2{--marpit-root-font-size:.4166666667em;}div#\:\$p > svg > foreignObject > section .katex .fontsize-ensurer.reset-size8.size3,div#\:\$p > svg > foreignObject > section .katex .sizing.reset-size8.size3{font-size:.4861111111em}div#\:\$p > svg > foreignObject > section .katex div#\:\$p > svg > foreignObject > section section.fontsize-ensurer.reset-size8.size3, div#\:\$p > svg > foreignObject > section .katex div#\:\$p > svg > foreignObject > section section.sizing.reset-size8.size3{--marpit-root-font-size:.4861111111em;}div#\:\$p > svg > foreignObject > section .katex .fontsize-ensurer.reset-size8.size4,div#\:\$p > svg > foreignObject > section .katex .sizing.reset-size8.size4{font-size:.5555555556em}div#\:\$p > svg > foreignObject > section .katex div#\:\$p > svg > foreignObject > section section.fontsize-ensurer.reset-size8.size4, div#\:\$p > svg > foreignObject > section .katex div#\:\$p > svg > foreignObject > section section.sizing.reset-size8.size4{--marpit-root-font-size:.5555555556em;}div#\:\$p > svg > foreignObject > section .katex .fontsize-ensurer.reset-size8.size5,div#\:\$p > svg > foreignObject > section .katex .sizing.reset-size8.size5{font-size:.625em}div#\:\$p > svg > foreignObject > section .katex div#\:\$p > svg > foreignObject > section section.fontsize-ensurer.reset-size8.size5, div#\:\$p > svg > foreignObject > section .katex div#\:\$p > svg > foreignObject > section section.sizing.reset-size8.size5{--marpit-root-font-size:.625em;}div#\:\$p > svg > foreignObject > section .katex .fontsize-ensurer.reset-size8.size6,div#\:\$p > svg > foreignObject > section .katex .sizing.reset-size8.size6{font-size:.6944444444em}div#\:\$p > svg > foreignObject > section .katex div#\:\$p > svg > foreignObject > section section.fontsize-ensurer.reset-size8.size6, div#\:\$p > svg > foreignObject > section .katex div#\:\$p > svg > foreignObject > section section.sizing.reset-size8.size6{--marpit-root-font-size:.6944444444em;}div#\:\$p > svg > foreignObject > section .katex .fontsize-ensurer.reset-size8.size7,div#\:\$p > svg > foreignObject > section .katex .sizing.reset-size8.size7{font-size:.8333333333em}div#\:\$p > svg > foreignObject > section .katex div#\:\$p > svg > foreignObject > section section.fontsize-ensurer.reset-size8.size7, div#\:\$p > svg > foreignObject > section .katex div#\:\$p > svg > foreignObject > section section.sizing.reset-size8.size7{--marpit-root-font-size:.8333333333em;}div#\:\$p > svg > foreignObject > section .katex .fontsize-ensurer.reset-size8.size8,div#\:\$p > svg > foreignObject > section .katex .sizing.reset-size8.size8{font-size:1em}div#\:\$p > svg > foreignObject > section .katex div#\:\$p > svg > foreignObject > section section.fontsize-ensurer.reset-size8.size8, div#\:\$p > svg > foreignObject > section .katex div#\:\$p > svg > foreignObject > section section.sizing.reset-size8.size8{--marpit-root-font-size:1em;}div#\:\$p > svg > foreignObject > section .katex .fontsize-ensurer.reset-size8.size9,div#\:\$p > svg > foreignObject > section .katex .sizing.reset-size8.size9{font-size:1.2em}div#\:\$p > svg > foreignObject > section .katex div#\:\$p > svg > foreignObject > section section.fontsize-ensurer.reset-size8.size9, div#\:\$p > svg > foreignObject > section .katex div#\:\$p > svg > foreignObject > section section.sizing.reset-size8.size9{--marpit-root-font-size:1.2em;}div#\:\$p > svg > foreignObject > section .katex .fontsize-ensurer.reset-size8.size10,div#\:\$p > svg > foreignObject > section .katex .sizing.reset-size8.size10{font-size:1.4402777778em}div#\:\$p > svg > foreignObject > section .katex div#\:\$p > svg > foreignObject > section section.fontsize-ensurer.reset-size8.size10, div#\:\$p > svg > foreignObject > section .katex div#\:\$p > svg > foreignObject > section section.sizing.reset-size8.size10{--marpit-root-font-size:1.4402777778em;}div#\:\$p > svg > foreignObject > section .katex .fontsize-ensurer.reset-size8.size11,div#\:\$p > svg > foreignObject > section .katex .sizing.reset-size8.size11{font-size:1.7277777778em}div#\:\$p > svg > foreignObject > section .katex div#\:\$p > svg > foreignObject > section section.fontsize-ensurer.reset-size8.size11, div#\:\$p > svg > foreignObject > section .katex div#\:\$p > svg > foreignObject > section section.sizing.reset-size8.size11{--marpit-root-font-size:1.7277777778em;}div#\:\$p > svg > foreignObject > section .katex .fontsize-ensurer.reset-size9.size1,div#\:\$p > svg > foreignObject > section .katex .sizing.reset-size9.size1{font-size:.2893518519em}div#\:\$p > svg > foreignObject > section .katex div#\:\$p > svg > foreignObject > section section.fontsize-ensurer.reset-size9.size1, div#\:\$p > svg > foreignObject > section .katex div#\:\$p > svg > foreignObject > section section.sizing.reset-size9.size1{--marpit-root-font-size:.2893518519em;}div#\:\$p > svg > foreignObject > section .katex .fontsize-ensurer.reset-size9.size2,div#\:\$p > svg > foreignObject > section .katex .sizing.reset-size9.size2{font-size:.3472222222em}div#\:\$p > svg > foreignObject > section .katex div#\:\$p > svg > foreignObject > section section.fontsize-ensurer.reset-size9.size2, div#\:\$p > svg > foreignObject > section .katex div#\:\$p > svg > foreignObject > section section.sizing.reset-size9.size2{--marpit-root-font-size:.3472222222em;}div#\:\$p > svg > foreignObject > section .katex .fontsize-ensurer.reset-size9.size3,div#\:\$p > svg > foreignObject > section .katex .sizing.reset-size9.size3{font-size:.4050925926em}div#\:\$p > svg > foreignObject > section .katex div#\:\$p > svg > foreignObject > section section.fontsize-ensurer.reset-size9.size3, div#\:\$p > svg > foreignObject > section .katex div#\:\$p > svg > foreignObject > section section.sizing.reset-size9.size3{--marpit-root-font-size:.4050925926em;}div#\:\$p > svg > foreignObject > section .katex .fontsize-ensurer.reset-size9.size4,div#\:\$p > svg > foreignObject > section .katex .sizing.reset-size9.size4{font-size:.462962963em}div#\:\$p > svg > foreignObject > section .katex div#\:\$p > svg > foreignObject > section section.fontsize-ensurer.reset-size9.size4, div#\:\$p > svg > foreignObject > section .katex div#\:\$p > svg > foreignObject > section section.sizing.reset-size9.size4{--marpit-root-font-size:.462962963em;}div#\:\$p > svg > foreignObject > section .katex .fontsize-ensurer.reset-size9.size5,div#\:\$p > svg > foreignObject > section .katex .sizing.reset-size9.size5{font-size:.5208333333em}div#\:\$p > svg > foreignObject > section .katex div#\:\$p > svg > foreignObject > section section.fontsize-ensurer.reset-size9.size5, div#\:\$p > svg > foreignObject > section .katex div#\:\$p > svg > foreignObject > section section.sizing.reset-size9.size5{--marpit-root-font-size:.5208333333em;}div#\:\$p > svg > foreignObject > section .katex .fontsize-ensurer.reset-size9.size6,div#\:\$p > svg > foreignObject > section .katex .sizing.reset-size9.size6{font-size:.5787037037em}div#\:\$p > svg > foreignObject > section .katex div#\:\$p > svg > foreignObject > section section.fontsize-ensurer.reset-size9.size6, div#\:\$p > svg > foreignObject > section .katex div#\:\$p > svg > foreignObject > section section.sizing.reset-size9.size6{--marpit-root-font-size:.5787037037em;}div#\:\$p > svg > foreignObject > section .katex .fontsize-ensurer.reset-size9.size7,div#\:\$p > svg > foreignObject > section .katex .sizing.reset-size9.size7{font-size:.6944444444em}div#\:\$p > svg > foreignObject > section .katex div#\:\$p > svg > foreignObject > section section.fontsize-ensurer.reset-size9.size7, div#\:\$p > svg > foreignObject > section .katex div#\:\$p > svg > foreignObject > section section.sizing.reset-size9.size7{--marpit-root-font-size:.6944444444em;}div#\:\$p > svg > foreignObject > section .katex .fontsize-ensurer.reset-size9.size8,div#\:\$p > svg > foreignObject > section .katex .sizing.reset-size9.size8{font-size:.8333333333em}div#\:\$p > svg > foreignObject > section .katex div#\:\$p > svg > foreignObject > section section.fontsize-ensurer.reset-size9.size8, div#\:\$p > svg > foreignObject > section .katex div#\:\$p > svg > foreignObject > section section.sizing.reset-size9.size8{--marpit-root-font-size:.8333333333em;}div#\:\$p > svg > foreignObject > section .katex .fontsize-ensurer.reset-size9.size9,div#\:\$p > svg > foreignObject > section .katex .sizing.reset-size9.size9{font-size:1em}div#\:\$p > svg > foreignObject > section .katex div#\:\$p > svg > foreignObject > section section.fontsize-ensurer.reset-size9.size9, div#\:\$p > svg > foreignObject > section .katex div#\:\$p > svg > foreignObject > section section.sizing.reset-size9.size9{--marpit-root-font-size:1em;}div#\:\$p > svg > foreignObject > section .katex .fontsize-ensurer.reset-size9.size10,div#\:\$p > svg > foreignObject > section .katex .sizing.reset-size9.size10{font-size:1.2002314815em}div#\:\$p > svg > foreignObject > section .katex div#\:\$p > svg > foreignObject > section section.fontsize-ensurer.reset-size9.size10, div#\:\$p > svg > foreignObject > section .katex div#\:\$p > svg > foreignObject > section section.sizing.reset-size9.size10{--marpit-root-font-size:1.2002314815em;}div#\:\$p > svg > foreignObject > section .katex .fontsize-ensurer.reset-size9.size11,div#\:\$p > svg > foreignObject > section .katex .sizing.reset-size9.size11{font-size:1.4398148148em}div#\:\$p > svg > foreignObject > section .katex div#\:\$p > svg > foreignObject > section section.fontsize-ensurer.reset-size9.size11, div#\:\$p > svg > foreignObject > section .katex div#\:\$p > svg > foreignObject > section section.sizing.reset-size9.size11{--marpit-root-font-size:1.4398148148em;}div#\:\$p > svg > foreignObject > section .katex .fontsize-ensurer.reset-size10.size1,div#\:\$p > svg > foreignObject > section .katex .sizing.reset-size10.size1{font-size:.2410800386em}div#\:\$p > svg > foreignObject > section .katex div#\:\$p > svg > foreignObject > section section.fontsize-ensurer.reset-size10.size1, div#\:\$p > svg > foreignObject > section .katex div#\:\$p > svg > foreignObject > section section.sizing.reset-size10.size1{--marpit-root-font-size:.2410800386em;}div#\:\$p > svg > foreignObject > section .katex .fontsize-ensurer.reset-size10.size2,div#\:\$p > svg > foreignObject > section .katex .sizing.reset-size10.size2{font-size:.2892960463em}div#\:\$p > svg > foreignObject > section .katex div#\:\$p > svg > foreignObject > section section.fontsize-ensurer.reset-size10.size2, div#\:\$p > svg > foreignObject > section .katex div#\:\$p > svg > foreignObject > section section.sizing.reset-size10.size2{--marpit-root-font-size:.2892960463em;}div#\:\$p > svg > foreignObject > section .katex .fontsize-ensurer.reset-size10.size3,div#\:\$p > svg > foreignObject > section .katex .sizing.reset-size10.size3{font-size:.337512054em}div#\:\$p > svg > foreignObject > section .katex div#\:\$p > svg > foreignObject > section section.fontsize-ensurer.reset-size10.size3, div#\:\$p > svg > foreignObject > section .katex div#\:\$p > svg > foreignObject > section section.sizing.reset-size10.size3{--marpit-root-font-size:.337512054em;}div#\:\$p > svg > foreignObject > section .katex .fontsize-ensurer.reset-size10.size4,div#\:\$p > svg > foreignObject > section .katex .sizing.reset-size10.size4{font-size:.3857280617em}div#\:\$p > svg > foreignObject > section .katex div#\:\$p > svg > foreignObject > section section.fontsize-ensurer.reset-size10.size4, div#\:\$p > svg > foreignObject > section .katex div#\:\$p > svg > foreignObject > section section.sizing.reset-size10.size4{--marpit-root-font-size:.3857280617em;}div#\:\$p > svg > foreignObject > section .katex .fontsize-ensurer.reset-size10.size5,div#\:\$p > svg > foreignObject > section .katex .sizing.reset-size10.size5{font-size:.4339440694em}div#\:\$p > svg > foreignObject > section .katex div#\:\$p > svg > foreignObject > section section.fontsize-ensurer.reset-size10.size5, div#\:\$p > svg > foreignObject > section .katex div#\:\$p > svg > foreignObject > section section.sizing.reset-size10.size5{--marpit-root-font-size:.4339440694em;}div#\:\$p > svg > foreignObject > section .katex .fontsize-ensurer.reset-size10.size6,div#\:\$p > svg > foreignObject > section .katex .sizing.reset-size10.size6{font-size:.4821600771em}div#\:\$p > svg > foreignObject > section .katex div#\:\$p > svg > foreignObject > section section.fontsize-ensurer.reset-size10.size6, div#\:\$p > svg > foreignObject > section .katex div#\:\$p > svg > foreignObject > section section.sizing.reset-size10.size6{--marpit-root-font-size:.4821600771em;}div#\:\$p > svg > foreignObject > section .katex .fontsize-ensurer.reset-size10.size7,div#\:\$p > svg > foreignObject > section .katex .sizing.reset-size10.size7{font-size:.5785920926em}div#\:\$p > svg > foreignObject > section .katex div#\:\$p > svg > foreignObject > section section.fontsize-ensurer.reset-size10.size7, div#\:\$p > svg > foreignObject > section .katex div#\:\$p > svg > foreignObject > section section.sizing.reset-size10.size7{--marpit-root-font-size:.5785920926em;}div#\:\$p > svg > foreignObject > section .katex .fontsize-ensurer.reset-size10.size8,div#\:\$p > svg > foreignObject > section .katex .sizing.reset-size10.size8{font-size:.6943105111em}div#\:\$p > svg > foreignObject > section .katex div#\:\$p > svg > foreignObject > section section.fontsize-ensurer.reset-size10.size8, div#\:\$p > svg > foreignObject > section .katex div#\:\$p > svg > foreignObject > section section.sizing.reset-size10.size8{--marpit-root-font-size:.6943105111em;}div#\:\$p > svg > foreignObject > section .katex .fontsize-ensurer.reset-size10.size9,div#\:\$p > svg > foreignObject > section .katex .sizing.reset-size10.size9{font-size:.8331726133em}div#\:\$p > svg > foreignObject > section .katex div#\:\$p > svg > foreignObject > section section.fontsize-ensurer.reset-size10.size9, div#\:\$p > svg > foreignObject > section .katex div#\:\$p > svg > foreignObject > section section.sizing.reset-size10.size9{--marpit-root-font-size:.8331726133em;}div#\:\$p > svg > foreignObject > section .katex .fontsize-ensurer.reset-size10.size10,div#\:\$p > svg > foreignObject > section .katex .sizing.reset-size10.size10{font-size:1em}div#\:\$p > svg > foreignObject > section .katex div#\:\$p > svg > foreignObject > section section.fontsize-ensurer.reset-size10.size10, div#\:\$p > svg > foreignObject > section .katex div#\:\$p > svg > foreignObject > section section.sizing.reset-size10.size10{--marpit-root-font-size:1em;}div#\:\$p > svg > foreignObject > section .katex .fontsize-ensurer.reset-size10.size11,div#\:\$p > svg > foreignObject > section .katex .sizing.reset-size10.size11{font-size:1.1996142719em}div#\:\$p > svg > foreignObject > section .katex div#\:\$p > svg > foreignObject > section section.fontsize-ensurer.reset-size10.size11, div#\:\$p > svg > foreignObject > section .katex div#\:\$p > svg > foreignObject > section section.sizing.reset-size10.size11{--marpit-root-font-size:1.1996142719em;}div#\:\$p > svg > foreignObject > section .katex .fontsize-ensurer.reset-size11.size1,div#\:\$p > svg > foreignObject > section .katex .sizing.reset-size11.size1{font-size:.2009646302em}div#\:\$p > svg > foreignObject > section .katex div#\:\$p > svg > foreignObject > section section.fontsize-ensurer.reset-size11.size1, div#\:\$p > svg > foreignObject > section .katex div#\:\$p > svg > foreignObject > section section.sizing.reset-size11.size1{--marpit-root-font-size:.2009646302em;}div#\:\$p > svg > foreignObject > section .katex .fontsize-ensurer.reset-size11.size2,div#\:\$p > svg > foreignObject > section .katex .sizing.reset-size11.size2{font-size:.2411575563em}div#\:\$p > svg > foreignObject > section .katex div#\:\$p > svg > foreignObject > section section.fontsize-ensurer.reset-size11.size2, div#\:\$p > svg > foreignObject > section .katex div#\:\$p > svg > foreignObject > section section.sizing.reset-size11.size2{--marpit-root-font-size:.2411575563em;}div#\:\$p > svg > foreignObject > section .katex .fontsize-ensurer.reset-size11.size3,div#\:\$p > svg > foreignObject > section .katex .sizing.reset-size11.size3{font-size:.2813504823em}div#\:\$p > svg > foreignObject > section .katex div#\:\$p > svg > foreignObject > section section.fontsize-ensurer.reset-size11.size3, div#\:\$p > svg > foreignObject > section .katex div#\:\$p > svg > foreignObject > section section.sizing.reset-size11.size3{--marpit-root-font-size:.2813504823em;}div#\:\$p > svg > foreignObject > section .katex .fontsize-ensurer.reset-size11.size4,div#\:\$p > svg > foreignObject > section .katex .sizing.reset-size11.size4{font-size:.3215434084em}div#\:\$p > svg > foreignObject > section .katex div#\:\$p > svg > foreignObject > section section.fontsize-ensurer.reset-size11.size4, div#\:\$p > svg > foreignObject > section .katex div#\:\$p > svg > foreignObject > section section.sizing.reset-size11.size4{--marpit-root-font-size:.3215434084em;}div#\:\$p > svg > foreignObject > section .katex .fontsize-ensurer.reset-size11.size5,div#\:\$p > svg > foreignObject > section .katex .sizing.reset-size11.size5{font-size:.3617363344em}div#\:\$p > svg > foreignObject > section .katex div#\:\$p > svg > foreignObject > section section.fontsize-ensurer.reset-size11.size5, div#\:\$p > svg > foreignObject > section .katex div#\:\$p > svg > foreignObject > section section.sizing.reset-size11.size5{--marpit-root-font-size:.3617363344em;}div#\:\$p > svg > foreignObject > section .katex .fontsize-ensurer.reset-size11.size6,div#\:\$p > svg > foreignObject > section .katex .sizing.reset-size11.size6{font-size:.4019292605em}div#\:\$p > svg > foreignObject > section .katex div#\:\$p > svg > foreignObject > section section.fontsize-ensurer.reset-size11.size6, div#\:\$p > svg > foreignObject > section .katex div#\:\$p > svg > foreignObject > section section.sizing.reset-size11.size6{--marpit-root-font-size:.4019292605em;}div#\:\$p > svg > foreignObject > section .katex .fontsize-ensurer.reset-size11.size7,div#\:\$p > svg > foreignObject > section .katex .sizing.reset-size11.size7{font-size:.4823151125em}div#\:\$p > svg > foreignObject > section .katex div#\:\$p > svg > foreignObject > section section.fontsize-ensurer.reset-size11.size7, div#\:\$p > svg > foreignObject > section .katex div#\:\$p > svg > foreignObject > section section.sizing.reset-size11.size7{--marpit-root-font-size:.4823151125em;}div#\:\$p > svg > foreignObject > section .katex .fontsize-ensurer.reset-size11.size8,div#\:\$p > svg > foreignObject > section .katex .sizing.reset-size11.size8{font-size:.578778135em}div#\:\$p > svg > foreignObject > section .katex div#\:\$p > svg > foreignObject > section section.fontsize-ensurer.reset-size11.size8, div#\:\$p > svg > foreignObject > section .katex div#\:\$p > svg > foreignObject > section section.sizing.reset-size11.size8{--marpit-root-font-size:.578778135em;}div#\:\$p > svg > foreignObject > section .katex .fontsize-ensurer.reset-size11.size9,div#\:\$p > svg > foreignObject > section .katex .sizing.reset-size11.size9{font-size:.6945337621em}div#\:\$p > svg > foreignObject > section .katex div#\:\$p > svg > foreignObject > section section.fontsize-ensurer.reset-size11.size9, div#\:\$p > svg > foreignObject > section .katex div#\:\$p > svg > foreignObject > section section.sizing.reset-size11.size9{--marpit-root-font-size:.6945337621em;}div#\:\$p > svg > foreignObject > section .katex .fontsize-ensurer.reset-size11.size10,div#\:\$p > svg > foreignObject > section .katex .sizing.reset-size11.size10{font-size:.8336012862em}div#\:\$p > svg > foreignObject > section .katex div#\:\$p > svg > foreignObject > section section.fontsize-ensurer.reset-size11.size10, div#\:\$p > svg > foreignObject > section .katex div#\:\$p > svg > foreignObject > section section.sizing.reset-size11.size10{--marpit-root-font-size:.8336012862em;}div#\:\$p > svg > foreignObject > section .katex .fontsize-ensurer.reset-size11.size11,div#\:\$p > svg > foreignObject > section .katex .sizing.reset-size11.size11{font-size:1em}div#\:\$p > svg > foreignObject > section .katex div#\:\$p > svg > foreignObject > section section.fontsize-ensurer.reset-size11.size11, div#\:\$p > svg > foreignObject > section .katex div#\:\$p > svg > foreignObject > section section.sizing.reset-size11.size11{--marpit-root-font-size:1em;}div#\:\$p > svg > foreignObject > section .katex .delimsizing.size1{font-family:KaTeX_Size1}div#\:\$p > svg > foreignObject > section .katex .delimsizing.size2{font-family:KaTeX_Size2}div#\:\$p > svg > foreignObject > section .katex .delimsizing.size3{font-family:KaTeX_Size3}div#\:\$p > svg > foreignObject > section .katex .delimsizing.size4{font-family:KaTeX_Size4}div#\:\$p > svg > foreignObject > section .katex .delimsizing.mult .delim-size1>:is(span, marp-span){font-family:KaTeX_Size1}div#\:\$p > svg > foreignObject > section .katex .delimsizing.mult .delim-size4>:is(span, marp-span){font-family:KaTeX_Size4}div#\:\$p > svg > foreignObject > section .katex .nulldelimiter{display:inline-block;width:.12em}div#\:\$p > svg > foreignObject > section .katex .delimcenter,div#\:\$p > svg > foreignObject > section .katex .op-symbol{position:relative}div#\:\$p > svg > foreignObject > section .katex .op-symbol.small-op{font-family:KaTeX_Size1}div#\:\$p > svg > foreignObject > section .katex .op-symbol.large-op{font-family:KaTeX_Size2}div#\:\$p > svg > foreignObject > section .katex .accent>.vlist-t,div#\:\$p > svg > foreignObject > section .katex .op-limits>.vlist-t{text-align:center}div#\:\$p > svg > foreignObject > section .katex .accent .accent-body{position:relative}div#\:\$p > svg > foreignObject > section .katex .accent .accent-body:not(.accent-full){width:0}div#\:\$p > svg > foreignObject > section .katex .overlay{display:block}div#\:\$p > svg > foreignObject > section .katex .mtable .vertical-separator{display:inline-block;min-width:1px}div#\:\$p > svg > foreignObject > section .katex .mtable .arraycolsep{display:inline-block}div#\:\$p > svg > foreignObject > section .katex .mtable .col-align-c>.vlist-t{text-align:center}div#\:\$p > svg > foreignObject > section .katex .mtable .col-align-l>.vlist-t{text-align:left}div#\:\$p > svg > foreignObject > section .katex .mtable .col-align-r>.vlist-t{text-align:right}div#\:\$p > svg > foreignObject > section .katex .svg-align{text-align:left}div#\:\$p > svg > foreignObject > section .katex svg{fill:currentColor;stroke:currentColor;fill-rule:nonzero;fill-opacity:1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;display:block;height:inherit;position:absolute;width:100%}div#\:\$p > svg > foreignObject > section .katex svg path{stroke:none}div#\:\$p > svg > foreignObject > section .katex img{border-style:none;max-height:none;max-width:none;min-height:0;min-width:0}div#\:\$p > svg > foreignObject > section .katex .stretchy{display:block;overflow:hidden;position:relative;width:100%}div#\:\$p > svg > foreignObject > section .katex .stretchy:after,div#\:\$p > svg > foreignObject > section .katex .stretchy:before{content:""}div#\:\$p > svg > foreignObject > section .katex .hide-tail{overflow:hidden;position:relative;width:100%}div#\:\$p > svg > foreignObject > section .katex .halfarrow-left{left:0}div#\:\$p > svg > foreignObject > section .katex .halfarrow-left,div#\:\$p > svg > foreignObject > section .katex .halfarrow-right{overflow:hidden;position:absolute;width:50.2%}div#\:\$p > svg > foreignObject > section .katex .halfarrow-right{right:0}div#\:\$p > svg > foreignObject > section .katex .brace-left{left:0;overflow:hidden;position:absolute;width:25.1%}div#\:\$p > svg > foreignObject > section .katex .brace-center{left:25%;overflow:hidden;position:absolute;width:50%}div#\:\$p > svg > foreignObject > section .katex .brace-right{overflow:hidden;position:absolute;right:0;width:25.1%}div#\:\$p > svg > foreignObject > section .katex .x-arrow-pad{padding:0 .5em}div#\:\$p > svg > foreignObject > section .katex .cd-arrow-pad{padding:0 .55556em 0 .27778em}div#\:\$p > svg > foreignObject > section .katex .mover,div#\:\$p > svg > foreignObject > section .katex .munder,div#\:\$p > svg > foreignObject > section .katex .x-arrow{text-align:center}div#\:\$p > svg > foreignObject > section .katex .boxpad{padding:0 .3em}div#\:\$p > svg > foreignObject > section .katex .fbox,div#\:\$p > svg > foreignObject > section .katex .fcolorbox{border:.04em solid;box-sizing:border-box}div#\:\$p > svg > foreignObject > section .katex .cancel-pad{padding:0 .2em}div#\:\$p > svg > foreignObject > section .katex .cancel-lap{margin-left:-.2em;margin-right:-.2em}div#\:\$p > svg > foreignObject > section .katex .sout{border-bottom-style:solid;border-bottom-width:.08em}div#\:\$p > svg > foreignObject > section .katex .angl{border-right:.049em solid;border-top:.049em solid;box-sizing:border-box;margin-right:.03889em}div#\:\$p > svg > foreignObject > section .katex .anglpad{padding:0 .03889em}div#\:\$p > svg > foreignObject > section .katex .eqn-num:before{content:"(" counter(katexEqnNo) ")";counter-increment:katexEqnNo}div#\:\$p > svg > foreignObject > section .katex .mml-eqn-num:before{content:"(" counter(mmlEqnNo) ")";counter-increment:mmlEqnNo}div#\:\$p > svg > foreignObject > section .katex .mtr-glue{width:50%}div#\:\$p > svg > foreignObject > section .katex .cd-vert-arrow{display:inline-block;position:relative}div#\:\$p > svg > foreignObject > section .katex .cd-label-left{display:inline-block;position:absolute;right:calc(50% + .3em);text-align:left}div#\:\$p > svg > foreignObject > section .katex .cd-label-right{display:inline-block;left:calc(50% + .3em);position:absolute;text-align:right}div#\:\$p > svg > foreignObject > section .katex-display{display:block;margin:1em 0;text-align:center}div#\:\$p > svg > foreignObject > section .katex-display>.katex{display:block;text-align:center;white-space:nowrap}div#\:\$p > svg > foreignObject > section .katex-display>.katex>.katex-html{display:block;position:relative}div#\:\$p > svg > foreignObject > section .katex-display>.katex>.katex-html>.tag{position:absolute;right:0}div#\:\$p > svg > foreignObject > section .katex-display.leqno>.katex>.katex-html>.tag{left:0;right:auto}div#\:\$p > svg > foreignObject > section .katex-display.fleqn>.katex{padding-left:2em;text-align:left}div#\:\$p > svg > foreignObject > section body{counter-reset:katexEqnNo mmlEqnNo}div#\:\$p > svg > foreignObject > section .katex-display{margin:0}div#\:\$p > svg > foreignObject > section .katex .delimcenter,div#\:\$p > svg > foreignObject > section .katex .op-symbol{display:inline-block}div#\:\$p > svg > foreignObject > section img[data-marp-twemoji]{background:transparent;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em;width:1em}/*!
* Marp / Marpit Gaia theme.
*
* @theme gaia
* @author Yuki Hattori
*
* @auto-scaling true
* @size 16:9 1280px 720px
* @size 4:3 960px 720px
*/div#\:\$p > svg > foreignObject > section :is(pre, marp-pre) code.hljs{display:block;overflow-x:auto;padding:1em}div#\:\$p > svg > foreignObject > section code.hljs{padding:3px 5px}div#\:\$p > svg > foreignObject > section .hljs{background:#000;color:#f8f8f8}div#\:\$p > svg > foreignObject > section .hljs-comment,div#\:\$p > svg > foreignObject > section .hljs-quote{color:#aeaeae;font-style:italic}div#\:\$p > svg > foreignObject > section .hljs-keyword,div#\:\$p > svg > foreignObject > section .hljs-selector-tag,div#\:\$p > svg > foreignObject > section .hljs-type{color:#e28964}div#\:\$p > svg > foreignObject > section .hljs-string{color:#65b042}div#\:\$p > svg > foreignObject > section .hljs-subst{color:#daefa3}div#\:\$p > svg > foreignObject > section .hljs-link,div#\:\$p > svg > foreignObject > section .hljs-regexp{color:#e9c062}div#\:\$p > svg > foreignObject > section .hljs-name,div#\:\$p > svg > foreignObject > section .hljs-section,div#\:\$p > svg > foreignObject > section .hljs-tag,div#\:\$p > svg > foreignObject > section .hljs-title{color:#89bdff}div#\:\$p > svg > foreignObject > section .hljs-class .hljs-title,div#\:\$p > svg > foreignObject > section .hljs-doctag,div#\:\$p > svg > foreignObject > section .hljs-title.class_{text-decoration:underline}div#\:\$p > svg > foreignObject > section .hljs-bullet,div#\:\$p > svg > foreignObject > section .hljs-number,div#\:\$p > svg > foreignObject > section .hljs-symbol{color:#3387cc}div#\:\$p > svg > foreignObject > section .hljs-params,div#\:\$p > svg > foreignObject > section .hljs-template-variable,div#\:\$p > svg > foreignObject > section .hljs-variable{color:#3e87e3}div#\:\$p > svg > foreignObject > section .hljs-attribute{color:#cda869}div#\:\$p > svg > foreignObject > section .hljs-meta{color:#8996a8}div#\:\$p > svg > foreignObject > section .hljs-formula{background-color:#0e2231;color:#f8f8f8;font-style:italic}div#\:\$p > svg > foreignObject > section .hljs-addition{background-color:#253b22;color:#f8f8f8}div#\:\$p > svg > foreignObject > section .hljs-deletion{background-color:#420e09;color:#f8f8f8}div#\:\$p > svg > foreignObject > section .hljs-selector-class{color:#9b703f}div#\:\$p > svg > foreignObject > section .hljs-selector-id{color:#8b98ab}div#\:\$p > svg > foreignObject > section .hljs-emphasis{font-style:italic}div#\:\$p > svg > foreignObject > section .hljs-strong{font-weight:700}div#\:\$p > svg > foreignObject > section :is(h1, marp-h1),div#\:\$p > svg > foreignObject > section :is(h2, marp-h2),div#\:\$p > svg > foreignObject > section :is(h3, marp-h3),div#\:\$p > svg > foreignObject > section :is(h4, marp-h4),div#\:\$p > svg > foreignObject > section :is(h5, marp-h5),div#\:\$p > svg > foreignObject > section :is(h6, marp-h6){margin:.5em 0 0}div#\:\$p > svg > foreignObject > section :is(h1, marp-h1) strong,div#\:\$p > svg > foreignObject > section :is(h2, marp-h2) strong,div#\:\$p > svg > foreignObject > section :is(h3, marp-h3) strong,div#\:\$p > svg > foreignObject > section :is(h4, marp-h4) strong,div#\:\$p > svg > foreignObject > section :is(h5, marp-h5) strong,div#\:\$p > svg > foreignObject > section :is(h6, marp-h6) strong{font-weight:inherit}div#\:\$p > svg > foreignObject > section :is(h1, marp-h1)::part(auto-scaling),div#\:\$p > svg > foreignObject > section :is(h2, marp-h2)::part(auto-scaling),div#\:\$p > svg > foreignObject > section :is(h3, marp-h3)::part(auto-scaling),div#\:\$p > svg > foreignObject > section :is(h4, marp-h4)::part(auto-scaling),div#\:\$p > svg > foreignObject > section :is(h5, marp-h5)::part(auto-scaling),div#\:\$p > svg > foreignObject > section :is(h6, marp-h6)::part(auto-scaling){max-height:580px}div#\:\$p > svg > foreignObject > section :is(h1, marp-h1){font-size:1.8em}div#\:\$p > svg > foreignObject > section :is(h2, marp-h2){font-size:1.5em}div#\:\$p > svg > foreignObject > section :is(h3, marp-h3){font-size:1.3em}div#\:\$p > svg > foreignObject > section :is(h4, marp-h4){font-size:1.1em}div#\:\$p > svg > foreignObject > section :is(h5, marp-h5){font-size:1em}div#\:\$p > svg > foreignObject > section :is(h6, marp-h6){font-size:.9em}div#\:\$p > svg > foreignObject > section blockquote,div#\:\$p > svg > foreignObject > section p{margin:1em 0 0}div#\:\$p > svg > foreignObject > section ol>li,div#\:\$p > svg > foreignObject > section ul>li{margin:.3em 0 0}div#\:\$p > svg > foreignObject > section ol>li>p,div#\:\$p > svg > foreignObject > section ul>li>p{margin:.6em 0 0}div#\:\$p > svg > foreignObject > section code{display:inline-block;font-family:Roboto Mono,monospace;font-size:.8em;letter-spacing:0;margin:-.1em .15em;padding:.1em .2em;vertical-align:baseline}div#\:\$p > svg > foreignObject > section :is(pre, marp-pre){display:block;margin:1em 0 0;overflow:visible}div#\:\$p > svg > foreignObject > section :is(pre, marp-pre) code{box-sizing:border-box;font-size:.7em;margin:0;min-width:100%;padding:.5em}div#\:\$p > svg > foreignObject > section :is(pre, marp-pre)::part(auto-scaling){max-height:calc(580px - 1em)}div#\:\$p > svg > foreignObject > section blockquote{margin:1em 0 0;padding:0 1em;position:relative}div#\:\$p > svg > foreignObject > section blockquote:after,div#\:\$p > svg > foreignObject > section blockquote:before{content:"“";display:block;font-family:Times New Roman,serif;font-weight:700;position:absolute}div#\:\$p > svg > foreignObject > section blockquote:before{left:0;top:0}div#\:\$p > svg > foreignObject > section blockquote:after{bottom:0;right:0;transform:rotate(180deg)}div#\:\$p > svg > foreignObject > section blockquote>:first-child{margin-top:0}div#\:\$p > svg > foreignObject > section mark{background:transparent}div#\:\$p > svg > foreignObject > section table{border-collapse:collapse;border-spacing:0;margin:1em 0 0}div#\:\$p > svg > foreignObject > section table td,div#\:\$p > svg > foreignObject > section table th{border-style:solid;border-width:1px;padding:.2em .4em}div#\:\$p > svg > foreignObject > section footer,div#\:\$p > svg > foreignObject > section header,div#\:\$p > svg > foreignObject > section:after{box-sizing:border-box;font-size:66%;height:70px;line-height:50px;overflow:hidden;padding:10px 25px;position:absolute}div#\:\$p > svg > foreignObject > section:after{--marpit-root-font-size:66%;}div#\:\$p > svg > foreignObject > section header{top:0}div#\:\$p > svg > foreignObject > section footer,div#\:\$p > svg > foreignObject > section header{left:0;right:0}div#\:\$p > svg > foreignObject > section footer{bottom:0}div#\:\$p > svg > foreignObject > section{background-color:var(--color-background);background-image:linear-gradient(135deg, hsla(0,0%,53%,0), hsla(0,0%,53%,.02) 50%, hsla(0,0%,100%,0) 0, hsla(0,0%,100%,.05));color:var(--color-foreground);font-family:Lato,Avenir Next,Avenir,Trebuchet MS,Segoe UI,sans-serif;font-size:35px;height:720px;letter-spacing:1.25px;line-height:1.35;padding:70px;width:1280px;word-wrap:break-word;--color-background:#fff8e1;--color-background-stripe:rgba(69,90,100,.1);--color-foreground:#455a64;--color-dimmed:#6a7a7d;--color-highlight:#0288d1;}div#\:\$p > svg > foreignObject > section{--marpit-root-font-size:35px;}div#\:\$p > svg > foreignObject > section:after{bottom:0;font-size:80%;right:0}div#\:\$p > svg > foreignObject > section:after{--marpit-root-font-size:80%;}div#\:\$p > svg > foreignObject > section a,div#\:\$p > svg > foreignObject > section mark{color:var(--color-highlight)}div#\:\$p > svg > foreignObject > section code{background:var(--color-dimmed);color:var(--color-background)}div#\:\$p > svg > foreignObject > section :is(h1, marp-h1) strong,div#\:\$p > svg > foreignObject > section :is(h2, marp-h2) strong,div#\:\$p > svg > foreignObject > section :is(h3, marp-h3) strong,div#\:\$p > svg > foreignObject > section :is(h4, marp-h4) strong,div#\:\$p > svg > foreignObject > section :is(h5, marp-h5) strong,div#\:\$p > svg > foreignObject > section :is(h6, marp-h6) strong{color:var(--color-highlight)}div#\:\$p > svg > foreignObject > section :is(pre, marp-pre){background:var(--color-foreground)}div#\:\$p > svg > foreignObject > section :is(pre, marp-pre)>code{background:transparent}div#\:\$p > svg > foreignObject > section blockquote:after,div#\:\$p > svg > foreignObject > section blockquote:before,div#\:\$p > svg > foreignObject > section footer,div#\:\$p > svg > foreignObject > section header,div#\:\$p > svg > foreignObject > section section:after{color:var(--color-dimmed)}div#\:\$p > svg > foreignObject > section table td,div#\:\$p > svg > foreignObject > section table th{border-color:var(--color-foreground)}div#\:\$p > svg > foreignObject > section table thead th{background:var(--color-foreground);color:var(--color-background)}div#\:\$p > svg > foreignObject > section table tbody>tr:nth-child(odd) td,div#\:\$p > svg > foreignObject > section table tbody>tr:nth-child(odd) th{background:var(--color-background-stripe, transparent)}div#\:\$p > svg > foreignObject > section>:first-child,div#\:\$p > svg > foreignObject > section>header:first-child+*{margin-top:0}div#\:\$p > svg > foreignObject > section:where(.invert){--color-background:#455a64;--color-background-stripe:rgba(255,248,225,.1);--color-foreground:#fff8e1;--color-dimmed:#dad8c8;--color-highlight:#81d4fa;}div#\:\$p > svg > foreignObject > section:where(.gaia){--color-background:#0288d1;--color-background-stripe:rgba(255,248,225,.1);--color-foreground:#fff8e1;--color-dimmed:#cce2de;--color-highlight:#81d4fa;}div#\:\$p > svg > foreignObject > section:where(.lead){align-items:stretch;flex-flow:column nowrap;place-content:safe center center}div#\:\$p > svg > foreignObject > section:where(.lead) :is(h1, marp-h1),div#\:\$p > svg > foreignObject > section:where(.lead) :is(h2, marp-h2),div#\:\$p > svg > foreignObject > section:where(.lead) :is(h3, marp-h3),div#\:\$p > svg > foreignObject > section:where(.lead) :is(h4, marp-h4),div#\:\$p > svg > foreignObject > section:where(.lead) :is(h5, marp-h5),div#\:\$p > svg > foreignObject > section:where(.lead) :is(h6, marp-h6){text-align:center}div#\:\$p > svg > foreignObject > section:where(.lead) p{text-align:center}div#\:\$p > svg > foreignObject > section:where(.lead) blockquote>:is(h1, marp-h1),div#\:\$p > svg > foreignObject > section:where(.lead) blockquote>:is(h2, marp-h2),div#\:\$p > svg > foreignObject > section:where(.lead) blockquote>:is(h3, marp-h3),div#\:\$p > svg > foreignObject > section:where(.lead) blockquote>:is(h4, marp-h4),div#\:\$p > svg > foreignObject > section:where(.lead) blockquote>:is(h5, marp-h5),div#\:\$p > svg > foreignObject > section:where(.lead) blockquote>:is(h6, marp-h6),div#\:\$p > svg > foreignObject > section:where(.lead) blockquote>p{text-align:left}div#\:\$p > svg > foreignObject > section:where(.lead) ol>li>p,div#\:\$p > svg > foreignObject > section:where(.lead) ul>li>p{text-align:left}div#\:\$p > svg > foreignObject > section:where(.lead) table{margin-left:auto;margin-right:auto}div#\:\$p > svg > foreignObject > section[data-marpit-scope-a6wqjJVU] :is(h2, marp-h2){padding-top:200px;text-align:center;font-size:72px}div#\:\$p > svg > foreignObject > section[data-marpit-scope-t62SZq9l] :is(h2, marp-h2){padding-top:200px;text-align:center;font-size:72px}div#\:\$p > svg > foreignObject > section[data-marpit-scope-eVEmi2D7] table, div#\:\$p > svg > foreignObject > section[data-marpit-scope-eVEmi2D7] li{font-size:27px}div#\:\$p > svg > foreignObject > section[data-marpit-scope-4CZGOXif] li{font-size:30px}div#\:\$p > svg > foreignObject > section[data-marpit-scope-7mpOOGlH] table, div#\:\$p > svg > foreignObject > section[data-marpit-scope-7mpOOGlH] li{font-size:27px}div#\:\$p > svg > foreignObject > section[data-marpit-scope-jBBiieeu] li{font-size:30px}div#\:\$p > svg > foreignObject > section[data-marpit-scope-NP44lTHB] li{font-size:30px}div#\:\$p > svg > foreignObject > section[data-marpit-scope-HuWnreov] p, div#\:\$p > svg > foreignObject > section[data-marpit-scope-HuWnreov] li{font-size:25px}div#\:\$p > svg > foreignObject > section[data-marpit-scope-XRFyWRCD] table{width:100%;font-size:30px}div#\:\$p > svg > foreignObject > section[data-marpit-scope-XRFyWRCD] li{font-size:20px}div#\:\$p > svg > foreignObject > section[data-marpit-scope-XRFyWRCD] p{font-size:25px}div#\:\$p > svg > foreignObject > section[data-marpit-scope-Xhipsjaf] :is(h3, marp-h3){font-size:35px}div#\:\$p > svg > foreignObject > section[data-marpit-scope-Xhipsjaf] p{font-size:30px}div#\:\$p > svg > foreignObject > section[data-marpit-scope-2KhURsvm] li{font-size:20px}div#\:\$p > svg > foreignObject > section[data-marpit-advanced-background="background"]{columns:initial!important;display:block!important;padding:0!important}div#\:\$p > svg > foreignObject > section[data-marpit-advanced-background="background"]::before, div#\:\$p > svg > foreignObject > section[data-marpit-advanced-background="background"]::after, div#\:\$p > svg > foreignObject > section[data-marpit-advanced-background="content"]::before, div#\:\$p > svg > foreignObject > section[data-marpit-advanced-background="content"]::after{display:none!important}div#\:\$p > svg > foreignObject > section[data-marpit-advanced-background="background"] > div[data-marpit-advanced-background-container]{all:initial;display:flex;flex-direction:row;height:100%;overflow:hidden;width:100%}div#\:\$p > svg > foreignObject > section[data-marpit-advanced-background="background"] > div[data-marpit-advanced-background-container][data-marpit-advanced-background-direction="vertical"]{flex-direction:column}div#\:\$p > svg > foreignObject > section[data-marpit-advanced-background="background"][data-marpit-advanced-background-split] > div[data-marpit-advanced-background-container]{width:var(--marpit-advanced-background-split, 50%)}div#\:\$p > svg > foreignObject > section[data-marpit-advanced-background="background"][data-marpit-advanced-background-split="right"] > div[data-marpit-advanced-background-container]{margin-left:calc(100% - var(--marpit-advanced-background-split, 50%))}div#\:\$p > svg > foreignObject > section[data-marpit-advanced-background="background"] > div[data-marpit-advanced-background-container] > figure{all:initial;background-position:center;background-repeat:no-repeat;background-size:cover;flex:auto;margin:0}div#\:\$p > svg > foreignObject > section[data-marpit-advanced-background="background"] > div[data-marpit-advanced-background-container] > figure > figcaption{position:absolute;border:0;clip:rect(0, 0, 0, 0);height:1px;margin:-1px;overflow:hidden;padding:0;white-space:nowrap;width:1px}div#\:\$p > svg > foreignObject > section[data-marpit-advanced-background="content"], div#\:\$p > svg > foreignObject > section[data-marpit-advanced-background="pseudo"]{background:transparent!important}div#\:\$p > svg > foreignObject > section[data-marpit-advanced-background="pseudo"], div#\:\$p > svg[data-marpit-svg] > foreignObject[data-marpit-advanced-background="pseudo"]{pointer-events:none!important}div#\:\$p > svg > foreignObject > section[data-marpit-advanced-background-split]{width:100%;height:100%}
</style></head><body><div class="bespoke-marp-osc"><button data-bespoke-marp-osc="prev" tabindex="-1" title="Previous slide">Previous slide</button><span data-bespoke-marp-osc="page"></span><button data-bespoke-marp-osc="next" tabindex="-1" title="Next slide">Next slide</button><button data-bespoke-marp-osc="fullscreen" tabindex="-1" title="Toggle fullscreen (f)">Toggle fullscreen</button><button data-bespoke-marp-osc="presenter" tabindex="-1" title="Open presenter view (p)">Open presenter view</button></div><div id=":$p"><svg data-marpit-svg="" viewBox="0 0 1280 720"><foreignObject width="1280" height="720"><section id="1" data-class="lead" data-theme="gaia" lang="en-US" class="lead" style="--class:lead;--theme:gaia;">
<h1 id="%E5%A4%A7%E6%95%B0%E6%8D%AE%E5%AD%98%E5%82%A8%E7%B3%BB%E7%BB%9F%E4%B8%8E%E7%AE%A1%E7%90%86">大数据存储系统与管理</h1>
<h2 id="%E5%AF%B9%E8%B1%A1%E5%AD%98%E5%82%A8%E6%8A%80%E6%9C%AF%E5%AE%9E%E9%AA%8C">对象存储技术实验</h2>
<p><strong>施展</strong><br />
武汉光电国家研究中心 & 计算机学院<br />
华中科技大学<br />
2025-09-16 (第3周周二) 至 10-07 (第6周周二,可能提前至09-28)<br />
19:00~22:00 @ 南一楼116_1</p>
</section>
</foreignObject></svg><svg data-marpit-svg="" viewBox="0 0 1280 720"><foreignObject width="1280" height="720"><section id="2" data-theme="gaia" lang="en-US" style="--theme:gaia;">
<h2 id="%E6%8E%88%E8%AF%BE%E6%95%99%E5%B8%88">授课教师</h2>
<ul>
<li><strong>施展</strong> 副教授,武汉光电国家研究中心,存储部,C523</li>
<li>联系方式
<ul>
<li>EMail <a href="mailto:zshi@hust.edu.cn">zshi@hust.edu.cn</a></li>
<li>电话 027-87792450</li>
<li>主页
<ul>
<li><a href="https://shizhan.github.io/">https://shizhan.github.io/</a></li>
<li><a href="http://faculty.hust.edu.cn/shizhan/zh_CN/index.htm">http://faculty.hust.edu.cn/shizhan/zh_CN/index.htm</a></li>
</ul>
</li>
</ul>
</li>
</ul>
</section>
</foreignObject></svg><svg data-marpit-svg="" viewBox="0 0 1280 720"><foreignObject width="1280" height="720"><section id="3" data-marpit-scope-a6wqjJVU="" data-paginate="true" data-theme="gaia" lang="en-US" data-marpit-pagination="3" style="--paginate:true;--theme:gaia;" data-marpit-pagination-total="26">
<h2 id="%E9%9C%80%E8%A6%81%E9%94%BB%E7%82%BC%E7%9A%84%E8%83%8C%E6%99%AF%E8%83%BD%E5%8A%9B">需要锻炼的背景能力</h2>
</section>
</foreignObject></svg><svg data-marpit-svg="" viewBox="0 0 1280 720"><foreignObject width="1280" height="720"><section id="4" data-paginate="true" data-theme="gaia" lang="en-US" data-marpit-pagination="4" style="--paginate:true;--theme:gaia;" data-marpit-pagination-total="26">
<h3 id="%E8%AE%A1%E7%AE%97%E6%9C%BA%E4%B8%93%E4%B8%9A%E5%9F%BA%E7%A1%80%E6%8A%80%E8%83%BD">计算机专业基础技能</h3>
<pre is="marp-pre" data-auto-scaling="downscale-only"><code class="language-python"><span class="hljs-keyword">if</span> <span class="hljs-keyword">not</span> 学习过<span class="hljs-string">"缺失的一课"</span>,至少第<span class="hljs-number">6</span>讲:
<span class="hljs-keyword">if</span> <span class="hljs-keyword">not</span> 独立维护过Github或Gitee等开放Git仓库:
随我进行课堂练习
</code></pre>
<p><a href="https://missing-semester-cn.github.io/">计算机教育中缺失的一课</a>,<a href="https://missing.csail.mit.edu/">官网</a>,<a href="https://www.bilibili.com/video/BV1x7411H7wa/">B站</a></p>
<p>与本次课程相关的基础训练</p>
<ul>
<li>1/13: 课程概览与 shell</li>
<li>1/14: Shell 工具和脚本</li>
<li>1/22: 版本控制(<a href="https://git-scm.com/download">Git</a>)</li>
</ul>
</section>
</foreignObject></svg><svg data-marpit-svg="" viewBox="0 0 1280 720"><foreignObject width="1280" height="720"><section id="5" data-marpit-scope-t62SZq9l="" data-paginate="true" data-theme="gaia" lang="en-US" data-marpit-pagination="5" style="--paginate:true;--theme:gaia;" data-marpit-pagination-total="26">
<h2 id="%E9%9C%80%E8%A6%81%E6%8E%8C%E6%8F%A1%E7%9A%84%E8%83%8C%E6%99%AF%E6%A6%82%E5%BF%B5">需要掌握的背景概念</h2>
</section>
</foreignObject></svg><svg data-marpit-svg="" viewBox="0 0 1280 720"><foreignObject width="1280" height="720"><section id="6" data-paginate="true" data-theme="gaia" lang="en-US" data-marpit-pagination="6" style="--paginate:true;--theme:gaia;" data-marpit-pagination-total="26">
<h3 id="%E5%AF%B9%E8%B1%A1%E5%AD%98%E5%82%A8%E6%98%AF%E4%BB%80%E4%B9%88">对象存储是什么?</h3>
<h4 id="%E4%BB%8E%E6%96%87%E4%BB%B6%E6%9F%9C%E5%88%B0%E4%BB%93%E5%BA%93">从“文件柜”到“仓库”</h4>
<ul>
<li>
<p>传统 <strong>块存储</strong> → 像硬盘,按“扇区”存,速度快,但不懂文件</p>
</li>
<li>
<p>传统 <strong>文件存储</strong> → 像文件夹,懂目录树,可扩展性有限</p>
</li>
<li>
<p><strong>对象存储</strong> → 像“带条码的快递箱”</p>
<ul>
<li>数据 = 对象(文件 + 元数据 + 全局 ID)</li>
<li>扁平空间,无限桶,秒扩 PB</li>
<li>HTTP 协议一次搞定存/取/删</li>
</ul>
</li>
<li>
<p>参考:<a href="object-storage">对象存储系统与尾延迟问题</a></p>
</li>
</ul>
</section>
</foreignObject></svg><svg data-marpit-svg="" viewBox="0 0 1280 720"><foreignObject width="1280" height="720"><section id="7" data-marpit-scope-eVEmi2D7="" data-paginate="true" data-theme="gaia" lang="en-US" data-marpit-pagination="7" style="--paginate:true;--theme:gaia;" data-marpit-pagination-total="26">
<h3 id="%E4%B8%BA%E4%BB%80%E4%B9%88%E5%AF%B9%E8%B1%A1%E5%AD%98%E5%82%A8%E6%88%90%E4%BA%86%E4%BA%91%E6%97%B6%E4%BB%A3%E7%9A%84%E9%BB%98%E8%AE%A4%E7%A1%AC%E7%9B%98">为什么对象存储成了云时代的“默认硬盘”?</h3>
<table>
<thead>
<tr>
<th>场景</th>
<th>传统文件痛点</th>
<th>对象存储解法</th>
</tr>
</thead>
<tbody>
<tr>
<td>手机相册备份</td>
<td>小文件多,目录深,延迟高</td>
<td>扁平名空间,毫秒级 GET</td>
</tr>
<tr>
<td>AI 训练</td>
<td>千万样本,随机读取</td>
<td>前缀并行,带宽线性叠加</td>
</tr>
<tr>
<td>医疗影像</td>
<td>单文件 > 5 GB,合规保存 15 年</td>
<td>分片上传,多副本/EC,WORM</td>
</tr>
<tr>
<td>直播回放</td>
<td>流量突增 10 倍</td>
<td>边缘缓存 + 回源,自动扩容</td>
</tr>
<tr>
<td>大数据分析</td>
<td>格式杂,schema 常变</td>
<td>元数据随对象走,schema-on-read</td>
</tr>
</tbody>
</table>
</section>
</foreignObject></svg><svg data-marpit-svg="" viewBox="0 0 1280 720"><foreignObject width="1280" height="720"><section id="8" data-paginate="true" data-theme="gaia" lang="en-US" data-marpit-pagination="8" style="--paginate:true;--theme:gaia;" data-marpit-pagination-total="26">
<h2 id="%E6%9C%AC%E8%AF%BE%E7%A8%8B%E4%B8%8E%E5%AF%B9%E8%B1%A1%E5%AD%98%E5%82%A8%E7%9A%84%E5%85%B3%E7%B3%BB">本课程与对象存储的关系</h2>
<ul>
<li><strong>Lab 1</strong> 亲手搭一个“迷你云” → 理解桶/对象/ACL</li>
<li><strong>Lab 2</strong> 打流量 → 看到 P99 延迟随并发"翘尾"</li>
<li><strong>Lab 3</strong> 建立预测模型 → 学会"先算再扩",而不是"先卡再加"</li>
</ul>
<blockquote>
<p><strong>掌握对象存储 = 拿到云、AI、大数据的通用钥匙</strong></p>
</blockquote>
</section>
</foreignObject></svg><svg data-marpit-svg="" viewBox="0 0 1280 720"><foreignObject width="1280" height="720"><section id="9" data-paginate="true" data-theme="gaia" lang="en-US" data-marpit-pagination="9" style="--paginate:true;--theme:gaia;" data-marpit-pagination-total="26">
<h2 id="%E5%AD%A6%E4%B9%A0%E5%86%85%E5%AE%B9">学习内容</h2>
<ul>
<li><strong>Lab 0</strong> (<strong>09-16</strong>) <strong>准备</strong>
<ul>
<li>按照要求建立实验环境,熟悉基本工具环境</li>
</ul>
</li>
<li><strong>Lab 1</strong> (<strong>09-23</strong>) <strong>实践</strong>
<ul>
<li>搭建使用对象存储系统,实践命令行与API基本功能</li>
</ul>
</li>
<li><strong>Lab 2</strong> (09-30 --> <strong>09-28</strong>) <strong>分析</strong>
<ul>
<li>观测对象存储基本功能,尝试分析经典性能问题</li>
</ul>
</li>
<li><strong>Lab 3</strong> (10-07 --> <strong>09-30</strong>) <strong>预测</strong>
<ul>
<li>采集观测典型性能指标,尝试建模进行预测</li>
</ul>
</li>
</ul>
</section>
</foreignObject></svg><svg data-marpit-svg="" viewBox="0 0 1280 720"><foreignObject width="1280" height="720"><section id="10" data-marpit-scope-4CZGOXif="" data-paginate="true" data-theme="gaia" lang="en-US" data-marpit-pagination="10" style="--paginate:true;--theme:gaia;" data-marpit-pagination-total="26">
<h3 id="lab-0-%E5%BB%BA%E7%AB%8B%E5%AE%9E%E9%AA%8C%E7%8E%AF%E5%A2%83">Lab 0 建立实验环境</h3>
<ul>
<li><a href="https://github.com/cs-course/obs-tutorial">实验参考</a></li>
<li>系统配置苦手?
<ul>
<li>推荐用LLM工具辅助
<ul>
<li><a href="https://kimi.moonshot.cn/">https://kimi.moonshot.cn/</a></li>
<li><a href="https://chat.deepseek.com/">https://chat.deepseek.com/</a></li>
</ul>
</li>
</ul>
</li>
</ul>
</section>
</foreignObject></svg><svg data-marpit-svg="" viewBox="0 0 1280 720"><foreignObject width="1280" height="720"><section id="11" data-paginate="true" data-theme="gaia" lang="en-US" data-marpit-pagination="11" style="--paginate:true;--theme:gaia;" data-marpit-pagination-total="26">
<h4 id="%E5%AE%9E%E9%AA%8C%E6%8A%A5%E5%91%8A%E5%AD%A6%E5%8F%B7-labmd%E6%A8%A1%E6%9D%BF">实验报告(<学号>-lab.md)模板</h4>
<pre is="marp-pre" data-auto-scaling="downscale-only"><code class="language-Markdown">姓名:XXX
班级:XXXX 班
学号:^U2023\d{5}$
日期:2025-10-dd
---
<span class="hljs-section"># 实验简介</span>
…介绍实验软硬件环境,实验目的和主要实验内容条目…
<span class="hljs-section"># 实验内容</span>
<span class="hljs-section">## 实验1:搭建对象存储</span>
…实验过程,基本功能测试…
…(可选) 应用集成测试…
<span class="hljs-section">## 实验2:观测分析性能</span>
…实验案例,实验负载生成,实验观测,数据分析…
<span class="hljs-strong">**请注意:确保实验数据完整、可信,观测数据是系统的"指纹",不应有两人份测试数据相同**</span>
<span class="hljs-section">## (可选)实验3:尝试建模预测</span>
…求解实际问题,达成额外成就…
<span class="hljs-section"># 实验小结</span>
…实验结论和收获…
</code></pre>
</section>
</foreignObject></svg><svg data-marpit-svg="" viewBox="0 0 1280 720"><foreignObject width="1280" height="720"><section id="12" data-paginate="true" data-theme="gaia" lang="en-US" data-marpit-pagination="12" style="--paginate:true;--theme:gaia;" data-marpit-pagination-total="26">
<h3 id="lab-1-%E6%90%AD%E5%BB%BA%E5%AF%B9%E8%B1%A1%E5%AD%98%E5%82%A8">Lab 1 搭建对象存储</h3>
<ul>
<li>目标系统
<ul>
<li><a href="https://www.min.io/">Minio</a>,功能精炼易上手
<ul>
<li><a href="https://www.min.io/open-source/download">社区版</a>,<a href="https://www.minio.org.cn/">中文站</a></li>
</ul>
</li>
<li><a href="https://github.com/ShiZhan/mock-s3">mock-s3</a>,代码极简,便于从后台认识基本功能</li>
<li><a href="https://ceph.com/">Ceph</a>,生产环境标杆
<ul>
<li><a href="https://gitee.com/shi_zhan/data-center-course/blob/master/ceph-deployment-simple.md">Ceph单机版搭建示范</a></li>
</ul>
</li>
</ul>
</li>
</ul>
</section>
</foreignObject></svg><svg data-marpit-svg="" viewBox="0 0 1280 720"><foreignObject width="1280" height="720"><section id="13" data-marpit-scope-7mpOOGlH="" data-paginate="true" data-theme="gaia" lang="en-US" data-marpit-pagination="13" style="--paginate:true;--theme:gaia;" data-marpit-pagination-total="26">
<h4 id="%E5%AE%9E%E8%B7%B5%E5%9F%BA%E6%9C%AC%E5%8A%9F%E8%83%BD">实践基本功能</h4>
<ul>
<li>在计算机领域中,<a href="https://en.wikipedia.org/wiki/Create,_read,_update_and_delete">create, read, update, and delete (缩写为 CRUD)</a> 是访问持久存储的4项基本操作。</li>
</ul>
<table>
<thead>
<tr>
<th style="text-align:left">Operation</th>
<th style="text-align:left">SQL</th>
<th style="text-align:left">HTTP</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left">Create</td>
<td style="text-align:left">INSERT</td>
<td style="text-align:left">PUT / POST</td>
</tr>
<tr>
<td style="text-align:left">Read (Retrieve)</td>
<td style="text-align:left">SELECT</td>
<td style="text-align:left">GET</td>
</tr>
<tr>
<td style="text-align:left">Update (Modify)</td>
<td style="text-align:left">UPDATE</td>
<td style="text-align:left">PUT / POST / PATCH</td>
</tr>
<tr>
<td style="text-align:left">Delete (Destroy)</td>
<td style="text-align:left">DELETE</td>
<td style="text-align:left">DELETE</td>
</tr>
</tbody>
</table>
<ul>
<li>通过典型界面访问在搭建的系统,执行上述典型操作
<ul>
<li>客户端: <a href="https://github.com/minio/mc">MinIO Client (mc)</a>, <a href="https://github.com/appscode/osm">OSM</a>, <a href="https://github.com/s3tools/s3cmd">s3cmd</a>, <a href="https://github.com/awslabs/aws-shell">aws-{cli|shell}</a></li>
<li>编程API: <a href="https://github.com/boto/boto3">boto3</a>, <a href="https://github.com/awslabs/aws-c-s3">aws-c-s3</a>, <a href="https://github.com/awslabs/aws-sdk-rust">awssdk-rust</a></li>
</ul>
</li>
</ul>
</section>
</foreignObject></svg><svg data-marpit-svg="" viewBox="0 0 1280 720"><foreignObject width="1280" height="720"><section id="14" data-paginate="true" data-theme="gaia" lang="en-US" data-marpit-pagination="14" style="--paginate:true;--theme:gaia;" data-marpit-pagination-total="26">
<h4 id="%E6%89%A9%E5%B1%95%E6%8E%A2%E7%B4%A2%E5%BA%94%E7%94%A8%E9%9B%86%E6%88%90">【扩展探索】应用集成</h4>
<p>通过部署实际应用来了解对象存储在云乃至大模型应用中的角色</p>
<ul>
<li>
<p>个人云 <a href="https://github.com/nextcloud">Nextcloud</a>, <a href="https://www.seafile.com/home/">Seafile</a>, <a href="https://github.com/zhaojun1998/zfile">zfile</a></p>
</li>
<li>
<p>图片管理 <a href="http://thumbor.org/">Thumbor</a>, <a href="https://github.com/thoas/picfit">picfit</a></p>
</li>
<li>
<p>大模型应用 <a href="https://github.com/coze-dev/coze-studio">Coze Studio</a>, <a href="https://github.com/langgenius/dify/">Dify</a>, <a href="https://github.com/labring/FastGPT">FastGPT</a></p>
</li>
<li>
<p>…更丰富应用请同学们自行探索…</p>
</li>
</ul>
</section>
</foreignObject></svg><svg data-marpit-svg="" viewBox="0 0 1280 720"><foreignObject width="1280" height="720"><section id="15" data-paginate="true" data-theme="gaia" lang="en-US" data-marpit-pagination="15" style="--paginate:true;--theme:gaia;" data-marpit-pagination-total="26">
<h3 id="lab-2-%E8%A7%82%E6%B5%8B%E5%88%86%E6%9E%90%E6%80%A7%E8%83%BD">Lab 2 观测分析性能</h3>
<p>实验测试工具</p>
<ul>
<li><a href="https://github.com/minio/warp">Warp</a>,<a href="https://blog.min.io/how-to-benchmark-minio-warp-speedtest/#step-3-run-warp-and-launch-a-mixed-benchmark">Minio官网参考</a></li>
<li><a href="https://github.com/cs-course/s3bench">s3bench</a>, <a href="https://github.com/giacomoguiulfo/benchio">benchio</a>, <a href="https://github.com/chinglinwen/s3-benchmark">s3-benchmark</a> , Go语言环境</li>
<li><a href="https://github.com/christianbaun/ossperf">OSSperf</a>, 内部包装<a href="https://github.com/s3tools/s3cmd">s3cmd</a></li>
<li><a href="https://github.com/SKTT1Ryze/s3-bench-rs">s3-bench-rs</a> , Rust语言环境
<ul>
<li>感谢 <a href="https://github.com/SKTT1Ryze">@SKTT1Ryze</a> 同学提供,欢迎更多同学参与!</li>
</ul>
</li>
<li><a href="https://github.com/intel-cloud/cosbench">COSBench</a> , Java语言环境,功能全面但过于古老,仅供参考。</li>
</ul>
</section>
</foreignObject></svg><svg data-marpit-svg="" viewBox="0 0 1280 720"><foreignObject width="1280" height="720"><section id="16" data-marpit-scope-jBBiieeu="" data-paginate="true" data-theme="gaia" lang="en-US" data-marpit-pagination="16" style="--paginate:true;--theme:gaia;" data-marpit-pagination-total="26">
<h4 id="%E5%BD%B1%E5%93%8D%E6%80%A7%E8%83%BD%E7%9A%84%E4%B8%BB%E8%A6%81%E5%9B%A0%E7%B4%A0">影响性能的主要因素</h4>
<p>典型问题举例</p>
<ul>
<li><strong>对象尺寸</strong>如何影响性能?
<ul>
<li>对于熟悉的某类应用,根据其数据访问特性,怎样适配对象存储最合适?</li>
</ul>
</li>
<li>如何全面观测<strong>I/O延迟</strong>?
<ul>
<li>平均值与统计分布</li>
</ul>
</li>
<li>如果客户端爆满将怎样?
<ul>
<li><strong>请求并发数</strong>如何同时影响延迟分布和吞吐率?如何保障服务质量?</li>
</ul>
</li>
<li>横向扩展系统 (Scaling Out) 效果如何?
<ul>
<li>向系统中追加<strong>更多存储设备</strong>或服务器</li>
</ul>
</li>
</ul>
</section>
</foreignObject></svg><svg data-marpit-svg="" viewBox="0 0 1280 720"><foreignObject width="1280" height="720"><section id="17" data-marpit-scope-NP44lTHB="" data-paginate="true" data-theme="gaia" lang="en-US" data-marpit-pagination="17" style="--paginate:true;--theme:gaia;" data-marpit-pagination-total="26">
<h4 id="%E5%B0%BE%E5%BB%B6%E8%BF%9F%E9%97%AE%E9%A2%98">尾延迟问题</h4>
<ul>
<li>尾延迟为什么很重要?
<ul>
<li><a href="https://dl.acm.org/doi/10.1145/2408776.2408794">The Tail at Scale</a>. Commun. ACM, 2013, 56(2): 74–80.</li>
</ul>
</li>
<li>可以用什么方法来分析?
<ul>
<li><a href="https://cacm.acm.org/research/amdahls-law-for-tail-latency/">Amdahl’s Law for Tail Latency</a>. Commun. ACM, 2018, 61(8): 65–72.</li>
</ul>
</li>
<li>读论文苦手?
<ul>
<li>继续用LLM工具辅助
<ul>
<li><a href="https://kimi.moonshot.cn/">https://kimi.moonshot.cn/</a></li>
<li><a href="https://chat.deepseek.com/">https://chat.deepseek.com/</a></li>
</ul>
</li>
</ul>
</li>
</ul>
</section>
</foreignObject></svg><svg data-marpit-svg="" viewBox="0 0 1280 720"><foreignObject width="1280" height="720"><section id="18" data-paginate="true" data-theme="gaia" lang="en-US" data-marpit-pagination="18" style="--paginate:true;--theme:gaia;" data-marpit-pagination-total="26">
<h3 id="lab-3-%E5%B0%9D%E8%AF%95%E5%BB%BA%E6%A8%A1%E9%A2%84%E6%B5%8B">Lab 3 尝试建模预测</h3>
<ul>
<li>为<strong>一个应用</strong>,结合其参数
<ul>
<li>预测总体<strong>尾延迟分布</strong>,确定与其访存行为适配的对冲百分位</li>
</ul>
</li>
<li>为<strong>一段负载</strong>,结合其请求序列
<ul>
<li>预测未来一段时间的<strong>IOPS</strong>,确定是否在未来使用对冲
<ul>
<li>高IOPS尽量避免,低IOPS积极发起</li>
</ul>
</li>
</ul>
</li>
<li>为<strong>一段负载</strong>,结合其参数序列
<ul>
<li>预测未来一段时间的<strong>尾延迟分布</strong>,用于指导灵活对冲的百分位阈值</li>
</ul>
</li>
<li>系统指标预测模型范例: <a href="https://tianchi.aliyun.com/competition/entrance/532055">数据科学挑战赛:内存故障预测</a></li>
</ul>
</section>
</foreignObject></svg><svg data-marpit-svg="" viewBox="0 0 1280 720"><foreignObject width="1280" height="720"><section id="19" data-paginate="true" data-theme="gaia" lang="en-US" data-marpit-pagination="19" style="--paginate:true;--theme:gaia;" data-marpit-pagination-total="26">
<h4 id="%E6%89%A9%E5%B1%95%E6%8E%A2%E7%B4%A2baseline">【扩展探索】baseline</h4>
<p>使用s3bench向MinIO<strong>发起不同参数请求</strong>,<strong>采集延迟数据</strong>,建立<strong>回归模型</strong>预测尾延迟</p>
<ul>
<li>预装MinIO单节点</li>
<li>s3bench已编译</li>
<li>Python3(pandas, scikit-learn, matplotlib)</li>
</ul>
<h5 id="%E5%90%AF%E5%8A%A8minio">启动MinIO</h5>
<pre is="marp-pre" data-auto-scaling="downscale-only"><code class="language-bash">minio server /data --console-address <span class="hljs-string">":9001"</span>
</code></pre>
</section>
</foreignObject></svg><svg data-marpit-svg="" viewBox="0 0 1280 720"><foreignObject width="1280" height="720"><section id="20" data-marpit-scope-HuWnreov="" data-paginate="true" data-theme="gaia" lang="en-US" data-marpit-pagination="20" style="--paginate:true;--theme:gaia;" data-marpit-pagination-total="26">
<h5 id="%E5%88%9B%E5%BB%BA%E6%B5%8B%E8%AF%95%E6%A1%B6">创建测试桶</h5>
<pre is="marp-pre" data-auto-scaling="downscale-only"><code class="language-bash">mc <span class="hljs-built_in">alias</span> <span class="hljs-built_in">set</span> myminio http://localhost:9000 minioadmin minioadmin
mc mb myminio/test
</code></pre>
<h5 id="%E8%BF%90%E8%A1%8Cs3bench%E9%87%87%E9%9B%86%E6%95%B0%E6%8D%AE">运行s3bench采集数据</h5>
<pre is="marp-pre" data-auto-scaling="downscale-only"><code class="language-bash"><span class="hljs-comment"># 参数扫描:对象大小1KB-1MB,并发1-32</span>
<span class="hljs-keyword">for</span> size <span class="hljs-keyword">in</span> 1024 16384 65536 1048576; <span class="hljs-keyword">do</span>
<span class="hljs-keyword">for</span> clients <span class="hljs-keyword">in</span> 1 2 4 8 16 32; <span class="hljs-keyword">do</span>
s3bench -accessKey minioadmin -secretKey minioadmin \
-bucket <span class="hljs-built_in">test</span> -endpoint http://localhost:9000 \
-numClients <span class="hljs-variable">$clients</span> -numSamples 1000 -objectSize <span class="hljs-variable">$size</span> \
-verbose >> raw.txt
<span class="hljs-keyword">done</span>
<span class="hljs-keyword">done</span>
</code></pre>
</section>
</foreignObject></svg><svg data-marpit-svg="" viewBox="0 0 1280 720"><foreignObject width="1280" height="720"><section id="21" data-paginate="true" data-theme="gaia" lang="en-US" data-marpit-pagination="21" style="--paginate:true;--theme:gaia;" data-marpit-pagination-total="26">
<h5 id="%E8%A7%A3%E6%9E%90%E5%BB%B6%E8%BF%9F%E6%95%B0%E6%8D%AE">解析延迟数据</h5>
<pre is="marp-pre" data-auto-scaling="downscale-only"><code class="language-python"><span class="hljs-keyword">import</span> re, pandas <span class="hljs-keyword">as</span> pd
<span class="hljs-keyword">def</span> <span class="hljs-title function_">parse_s3bench</span>(<span class="hljs-params">path</span>):
records = []
<span class="hljs-keyword">with</span> <span class="hljs-built_in">open</span>(path) <span class="hljs-keyword">as</span> f:
<span class="hljs-keyword">for</span> m <span class="hljs-keyword">in</span> re.finditer(<span class="hljs-string">r'NumClients:\s*(\d+).*?ObjectSize:\s*(\d+).*?P50:\s*([\d.]+)ms.*?P99:\s*([\d.]+)ms'</span>, f.read(), re.S):
records.append({
<span class="hljs-string">'clients'</span>: <span class="hljs-built_in">int</span>(m.group(<span class="hljs-number">1</span>)),
<span class="hljs-string">'size'</span>: <span class="hljs-built_in">int</span>(m.group(<span class="hljs-number">2</span>)),
<span class="hljs-string">'p50'</span>: <span class="hljs-built_in">float</span>(m.group(<span class="hljs-number">3</span>)),
<span class="hljs-string">'p99'</span>: <span class="hljs-built_in">float</span>(m.group(<span class="hljs-number">4</span>))
})
<span class="hljs-keyword">return</span> pd.DataFrame(records)
df = parse_s3bench(<span class="hljs-string">'raw.txt'</span>)
df.to_csv(<span class="hljs-string">'latency.csv'</span>, index=<span class="hljs-literal">False</span>)
</code></pre>
</section>
</foreignObject></svg><svg data-marpit-svg="" viewBox="0 0 1280 720"><foreignObject width="1280" height="720"><section id="22" data-paginate="true" data-theme="gaia" lang="en-US" data-marpit-pagination="22" style="--paginate:true;--theme:gaia;" data-marpit-pagination-total="26">
<h5 id="%E5%9B%9E%E5%BD%92%E6%A8%A1%E5%9E%8B%E6%8B%9F%E5%90%88">回归模型拟合</h5>
<pre is="marp-pre" data-auto-scaling="downscale-only"><code class="language-python"><span class="hljs-keyword">from</span> sklearn.linear_model <span class="hljs-keyword">import</span> LinearRegression
<span class="hljs-keyword">from</span> sklearn.metrics <span class="hljs-keyword">import</span> r2_score
<span class="hljs-keyword">import</span> matplotlib.pyplot <span class="hljs-keyword">as</span> plt
X = df[[<span class="hljs-string">'clients'</span>, <span class="hljs-string">'size'</span>]].values
y = df[<span class="hljs-string">'p99'</span>].values
model = LinearRegression().fit(X, y)
<span class="hljs-built_in">print</span>(<span class="hljs-string">'R²:'</span>, r2_score(y, model.predict(X)))
<span class="hljs-comment"># 可视化</span>
plt.scatter(df[<span class="hljs-string">'clients'</span>], y, label=<span class="hljs-string">'P99真实'</span>)
plt.scatter(df[<span class="hljs-string">'clients'</span>], model.predict(X), label=<span class="hljs-string">'P99预测'</span>)
plt.xlabel(<span class="hljs-string">'并发数'</span>); plt.ylabel(<span class="hljs-string">'延迟(ms)'</span>); plt.legend(); plt.show()
</code></pre>
</section>
</foreignObject></svg><svg data-marpit-svg="" viewBox="0 0 1280 720"><foreignObject width="1280" height="720"><section id="23" data-paginate="true" data-theme="gaia" lang="en-US" data-marpit-pagination="23" style="--paginate:true;--theme:gaia;" data-marpit-pagination-total="26">
<h5 id="%E9%A2%84%E6%B5%8B%E6%96%B0%E8%B4%9F%E8%BD%BD">预测新负载</h5>
<pre is="marp-pre" data-auto-scaling="downscale-only"><code class="language-python"><span class="hljs-keyword">import</span> numpy <span class="hljs-keyword">as</span> np
<span class="hljs-keyword">def</span> <span class="hljs-title function_">predict_p99</span>(<span class="hljs-params">clients, size</span>):
<span class="hljs-keyword">return</span> model.predict([[clients, size]])[<span class="hljs-number">0</span>]
<span class="hljs-built_in">print</span>(<span class="hljs-string">"12并发 256KB对象 预测P99:"</span>, predict_p99(<span class="hljs-number">12</span>, <span class="hljs-number">256</span>*<span class="hljs-number">1024</span>), <span class="hljs-string">"ms"</span>)
</code></pre>
<h5 id="%E8%BF%9B%E4%B8%80%E6%AD%A5%E6%8E%A2%E7%B4%A2">进一步探索</h5>
<ul>
<li>尝试随机森林/XGBoost<strong>提升精度</strong></li>
<li>加入<strong>CPU/内存特征</strong></li>
<li>实时仪表盘展示<strong>预测曲线</strong></li>
<li>延迟实际上是个<strong>分布</strong>,怎样预测分布?</li>
</ul>
</section>
</foreignObject></svg><svg data-marpit-svg="" viewBox="0 0 1280 720"><foreignObject width="1280" height="720"><section id="24" data-marpit-scope-XRFyWRCD="" data-paginate="true" data-theme="gaia" lang="en-US" data-marpit-pagination="24" style="--paginate:true;--theme:gaia;" data-marpit-pagination-total="26">
<h2 id="%E8%AF%84%E5%88%86%E6%9E%84%E6%88%90">评分构成</h2>
<table>
<thead>
<tr>
<th style="text-align:left"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mtext>组成部分</mtext></mrow><annotation encoding="application/x-tex">组成部分</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6833em;"></span><span class="mord cjk_fallback">组成部分</span></span></span></span></th>
<th style="text-align:left"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mtext>基础★</mtext></mrow><annotation encoding="application/x-tex">基础★</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6833em;"></span><span class="mord cjk_fallback">基础</span><span class="mord">★</span></span></span></span></th>
<th style="text-align:left"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mtext>进</mtext><msub><mtext>阶</mtext><mn>1</mn></msub><mtext>★★</mtext></mrow><annotation encoding="application/x-tex">进阶_1★★</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8333em;vertical-align:-0.15em;"></span><span class="mord cjk_fallback">进</span><span class="mord"><span class="mord cjk_fallback">阶</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">1</span></span></span></span><span class="vlist-s"></span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mord">★★</span></span></span></span></th>
<th style="text-align:left"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mtext>困</mtext><msub><mtext>难</mtext><mn>2</mn></msub><mtext>★★★</mtext></mrow><annotation encoding="application/x-tex">困难_2★★★</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8333em;vertical-align:-0.15em;"></span><span class="mord cjk_fallback">困</span><span class="mord"><span class="mord cjk_fallback">难</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span><span class="vlist-s"></span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mord">★★★</span></span></span></span></th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>S</mi><mi>e</mi><mi>r</mi><mi>v</mi><mi>e</mi><mi>r</mi></mrow><annotation encoding="application/x-tex">Server</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6833em;"></span><span class="mord mathnormal" style="margin-right:0.05764em;">S</span><span class="mord mathnormal" style="margin-right:0.02778em;">er</span><span class="mord mathnormal" style="margin-right:0.03588em;">v</span><span class="mord mathnormal" style="margin-right:0.02778em;">er</span></span></span></span></td>
<td style="text-align:left">Minio Server</td>
<td style="text-align:left">mock-s3</td>
<td style="text-align:left">Ceph</td>
</tr>
<tr>
<td style="text-align:left"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>C</mi><mi>l</mi><mi>i</mi><mi>e</mi><mi>n</mi><mi>t</mi></mrow><annotation encoding="application/x-tex">Client</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6944em;"></span><span class="mord mathnormal" style="margin-right:0.01968em;">Cl</span><span class="mord mathnormal">i</span><span class="mord mathnormal">e</span><span class="mord mathnormal">n</span><span class="mord mathnormal">t</span></span></span></span></td>
<td style="text-align:left">Minio Client</td>
<td style="text-align:left">osm/s3cmd/aws-{cli|shell}</td>
<td style="text-align:left">boto3/awssdk</td>
</tr>
<tr>
<td style="text-align:left"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>B</mi><mi>e</mi><mi>n</mi><mi>c</mi><mi>h</mi><mi>m</mi><mi>a</mi><mi>r</mi><msub><mi>k</mi><mn>3</mn></msub></mrow><annotation encoding="application/x-tex">Benchmark_3</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8444em;vertical-align:-0.15em;"></span><span class="mord mathnormal" style="margin-right:0.05017em;">B</span><span class="mord mathnormal">e</span><span class="mord mathnormal">n</span><span class="mord mathnormal">c</span><span class="mord mathnormal">hma</span><span class="mord mathnormal" style="margin-right:0.02778em;">r</span><span class="mord"><span class="mord mathnormal" style="margin-right:0.03148em;">k</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em;"><span style="top:-2.55em;margin-left:-0.0315em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">3</span></span></span></span><span class="vlist-s"></span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span></span></span></span></td>
<td style="text-align:left">预置负载范例</td>
<td style="text-align:left">选题观察分析</td>
<td style="text-align:left">编制实验程序研究</td>
</tr>
<tr>
<td style="text-align:left"><strong>评分标准</strong></td>
<td style="text-align:left">每项<strong>25分</strong></td>
<td style="text-align:left">每项<strong>30分</strong></td>
<td style="text-align:left">每项<strong>35分</strong></td>
</tr>
</tbody>
</table>
<ol>
<li>提供<strong>有限课堂帮助</strong>,<a href="https://github.com/cs-course/obs-tutorial">实验参考</a>库内提供在线资源传送门。</li>
<li>超过本资料库所提供导引之外部分<strong>请自己探索</strong>。</li>
<li>s3bench/benchio/warp/ossperf……</li>
</ol>
<p><strong>实验方案示例1</strong>:Minio Server (25) + boto3 (35) + 延迟分布随并发数的变化趋势分析 (35)=95分<br />
<strong>实验方案示例2</strong>:mock-s3 (30) + osm (30) + run-s3bench.cmd (25)=85分</p>
</section>
</foreignObject></svg><svg data-marpit-svg="" viewBox="0 0 1280 720"><foreignObject width="1280" height="720"><section id="25" data-marpit-scope-Xhipsjaf="" data-paginate="true" data-theme="gaia" lang="en-US" data-marpit-pagination="25" style="--paginate:true;--theme:gaia;" data-marpit-pagination-total="26">
<h2 id="%E4%BD%9C%E4%B8%9A%E6%8F%90%E4%BA%A4">作业提交</h2>
<p>在微助教中提交<strong>实验报告</strong>。</p>
<p>提醒:<strong>课堂学习也会要求交一份作业</strong>,请上传进微助教。</p>
<h3 id="%E6%8F%90%E4%BA%A4%E6%97%A5%E6%9C%9F">提交日期</h3>
<p>第7周周五:<strong>2025-10-17</strong></p>
<h3 id="%E6%8F%90%E4%BA%A4%E5%86%85%E5%AE%B9">提交内容</h3>
<p>课堂部分,华老师会在微助教给出报告要求。</p>
<p>实验部分,按照前述要求用Markdown编写,上传微助教账号,完成作业。</p>
<p>再次强调:<strong>观测数据是系统的"指纹",不应雷同</strong></p>
</section>
</foreignObject></svg><svg data-marpit-svg="" viewBox="0 0 1280 720"><foreignObject width="1280" height="720"><section id="26" data-marpit-scope-2KhURsvm="" data-paginate="true" data-theme="gaia" lang="en-US" data-marpit-pagination="26" style="--paginate:true;--theme:gaia;" data-marpit-pagination-total="26">
<h3 id="%E5%BE%80%E5%B9%B4%E4%BD%9C%E4%B8%9A%E5%8F%82%E8%80%83">往年作业参考</h3>
<ul>
<li><a href="https://github.com/cs-course/bigdata-storage-experiment-assignment-2023">https://github.com/cs-course/bigdata-storage-experiment-assignment-2023</a></li>
<li><a href="https://github.com/cs-course/bigdata-storage-experiment-assignment-2022">https://github.com/cs-course/bigdata-storage-experiment-assignment-2022</a></li>
<li><a href="https://github.com/cs-course/iot-storage-experiment-assignment-2021">https://github.com/cs-course/iot-storage-experiment-assignment-2021</a></li>
<li><a href="https://github.com/cs-course/iot-storage-experiment-assignment-2020">https://github.com/cs-course/iot-storage-experiment-assignment-2020</a></li>
<li><a href="https://github.com/cs-course/iot-storage-experiment-assignment-2019">https://github.com/cs-course/iot-storage-experiment-assignment-2019</a></li>
<li><a href="https://github.com/cs-course/iot-storage-experiment-assignment-2018">https://github.com/cs-course/iot-storage-experiment-assignment-2018</a></li>
</ul>
<h4 id="%E6%A8%A1%E8%8C%83%E4%BD%9C%E4%B8%9A">模范作业</h4>
<ul>
<li><a href="https://github.com/cs-course/bigdata-storage-experiment-assignment-2023/tree/main/U202015630/">bigdata-storage-experiment-assignment-2023/U202015630</a></li>
<li><a href="https://github.com/cs-course/bigdata-storage-experiment-assignment-2023/tree/main/U202015628/">bigdata-storage-experiment-assignment-2023/U202015628</a></li>
<li><a href="https://github.com/cs-course/bigdata-storage-experiment-assignment-2022/tree/master/U201916202/">bigdata-storage-experiment-assignment-2022/U201916202</a></li>
<li><a href="https://github.com/cs-course/bigdata-storage-experiment-assignment-2022/tree/master/U201915084/">bigdata-storage-experiment-assignment-2022/U201915084</a></li>
<li><a href="https://github.com/cs-course/iot-storage-experiment-assignment-2021/tree/master/U201816030">iot-storage-experiment-assignment-2021/U201816030</a></li>
</ul>
</section>
<script>!function(){"use strict";const t={h1:{proto:()=>HTMLHeadingElement,attrs:{role:"heading","aria-level":"1"},style:"display: block; font-size: 2em; margin-block-start: 0.67em; margin-block-end: 0.67em; margin-inline-start: 0px; margin-inline-end: 0px; font-weight: bold;"},h2:{proto:()=>HTMLHeadingElement,attrs:{role:"heading","aria-level":"2"},style:"display: block; font-size: 1.5em; margin-block-start: 0.83em; margin-block-end: 0.83em; margin-inline-start: 0px; margin-inline-end: 0px; font-weight: bold;"},h3:{proto:()=>HTMLHeadingElement,attrs:{role:"heading","aria-level":"3"},style:"display: block; font-size: 1.17em; margin-block-start: 1em; margin-block-end: 1em; margin-inline-start: 0px; margin-inline-end: 0px; font-weight: bold;"},h4:{proto:()=>HTMLHeadingElement,attrs:{role:"heading","aria-level":"4"},style:"display: block; margin-block-start: 1.33em; margin-block-end: 1.33em; margin-inline-start: 0px; margin-inline-end: 0px; font-weight: bold;"},h5:{proto:()=>HTMLHeadingElement,attrs:{role:"heading","aria-level":"5"},style:"display: block; font-size: 0.83em; margin-block-start: 1.67em; margin-block-end: 1.67em; margin-inline-start: 0px; margin-inline-end: 0px; font-weight: bold;"},h6:{proto:()=>HTMLHeadingElement,attrs:{role:"heading","aria-level":"6"},style:"display: block; font-size: 0.67em; margin-block-start: 2.33em; margin-block-end: 2.33em; margin-inline-start: 0px; margin-inline-end: 0px; font-weight: bold;"},span:{proto:()=>HTMLSpanElement},pre:{proto:()=>HTMLElement,style:"display: block; font-family: monospace; white-space: pre; margin: 1em 0; --marp-auto-scaling-white-space: pre;"}},e="data-marp-auto-scaling-wrapper",i="data-marp-auto-scaling-svg",n="data-marp-auto-scaling-container";class s extends HTMLElement{container;containerSize;containerObserver;svg;svgComputedStyle;svgPreserveAspectRatio="xMinYMid meet";wrapper;wrapperSize;wrapperObserver;constructor(){super();const t=t=>([e])=>{const{width:i,height:n}=e.contentRect;this[t]={width:i,height:n},this.updateSVGRect()};this.attachShadow({mode:"open"}),this.containerObserver=new ResizeObserver(t("containerSize")),this.wrapperObserver=new ResizeObserver(((...e)=>{t("wrapperSize")(...e),this.flushSvgDisplay()}))}static get observedAttributes(){return["data-downscale-only"]}connectedCallback(){this.shadowRoot.innerHTML=`\n<style>\n svg[${i}] { display: block; width: 100%; height: auto; vertical-align: top; }\n span[${n}] { display: table; white-space: var(--marp-auto-scaling-white-space, nowrap); width: max-content; }\n</style>\n<div ${e}>\n <svg part="svg" ${i}>\n <foreignObject><span ${n}><slot></slot></span></foreignObject>\n </svg>\n</div>\n `.split(/\n\s*/).join(""),this.wrapper=this.shadowRoot.querySelector(`div[${e}]`)??void 0;const t=this.svg;this.svg=this.wrapper?.querySelector(`svg[${i}]`)??void 0,this.svg!==t&&(this.svgComputedStyle=this.svg?window.getComputedStyle(this.svg):void 0),this.container=this.svg?.querySelector(`span[${n}]`)??void 0,this.observe()}disconnectedCallback(){this.svg=void 0,this.svgComputedStyle=void 0,this.wrapper=void 0,this.container=void 0,this.observe()}attributeChangedCallback(){this.observe()}flushSvgDisplay(){const{svg:t}=this;t&&(t.style.display="inline",requestAnimationFrame((()=>{t.style.display=""})))}observe(){this.containerObserver.disconnect(),this.wrapperObserver.disconnect(),this.wrapper&&this.wrapperObserver.observe(this.wrapper),this.container&&this.containerObserver.observe(this.container),this.svgComputedStyle&&this.observeSVGStyle(this.svgComputedStyle)}observeSVGStyle(t){const e=()=>{const i=(()=>{const e=t.getPropertyValue("--preserve-aspect-ratio");if(e)return e.trim();return`x${(({textAlign:t,direction:e})=>{if(t.endsWith("left"))return"Min";if(t.endsWith("right"))return"Max";if("start"===t||"end"===t){let i="rtl"===e;return"end"===t&&(i=!i),i?"Max":"Min"}return"Mid"})(t)}YMid meet`})();i!==this.svgPreserveAspectRatio&&(this.svgPreserveAspectRatio=i,this.updateSVGRect()),t===this.svgComputedStyle&&requestAnimationFrame(e)};e()}updateSVGRect(){let t=Math.ceil(this.containerSize?.width??0);const e=Math.ceil(this.containerSize?.height??0);void 0!==this.dataset.downscaleOnly&&(t=Math.max(t,this.wrapperSize?.width??0));const i=this.svg?.querySelector(":scope > foreignObject");if(i?.setAttribute("width",`${t}`),i?.setAttribute("height",`${e}`),this.svg&&(this.svg.setAttribute("viewBox",`0 0 ${t} ${e}`),this.svg.setAttribute("preserveAspectRatio",this.svgPreserveAspectRatio),this.svg.style.height=t<=0||e<=0?"0":""),this.container){const t=this.svgPreserveAspectRatio.toLowerCase();this.container.style.marginLeft=t.startsWith("xmid")||t.startsWith("xmax")?"auto":"0",this.container.style.marginRight=t.startsWith("xmi")?"auto":"0"}}}const r=(t,{attrs:e={},style:i})=>class extends t{constructor(...t){super(...t);for(const[t,i]of Object.entries(e))this.hasAttribute(t)||this.setAttribute(t,i);this._shadow()}static get observedAttributes(){return["data-auto-scaling"]}connectedCallback(){this._update()}attributeChangedCallback(){this._update()}_shadow(){if(!this.shadowRoot)try{this.attachShadow({mode:"open"})}catch(t){if(!(t instanceof Error&&"NotSupportedError"===t.name))throw t}return this.shadowRoot}_update(){const t=this._shadow();if(t){const e=i?`<style>:host { ${i} }</style>`:"";let n="<slot></slot>";const{autoScaling:s}=this.dataset;if(void 0!==s){n=`<marp-auto-scaling exportparts="svg:auto-scaling" ${"downscale-only"===s?"data-downscale-only":""}>${n}</marp-auto-scaling>`}t.innerHTML=e+n}}};let o;const a=Symbol();let l;const c="marpitSVGPolyfill:setZoomFactor,",d=Symbol(),h=Symbol();const g=()=>{const t="Apple Computer, Inc."===navigator.vendor,e=t?[u]:[],i={then:e=>(t?(async()=>{if(void 0===l){const t=document.createElement("canvas");t.width=10,t.height=10;const e=t.getContext("2d"),i=new Image(10,10),n=new Promise((t=>{i.addEventListener("load",(()=>t()))}));i.crossOrigin="anonymous",i.src="data:image/svg+xml;charset=utf8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2210%22%20height%3D%2210%22%20viewBox%3D%220%200%201%201%22%3E%3CforeignObject%20width%3D%221%22%20height%3D%221%22%20requiredExtensions%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxhtml%22%3E%3Cdiv%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxhtml%22%20style%3D%22width%3A%201px%3B%20height%3A%201px%3B%20background%3A%20red%3B%20position%3A%20relative%22%3E%3C%2Fdiv%3E%3C%2FforeignObject%3E%3C%2Fsvg%3E",await n,e.drawImage(i,0,0),l=e.getImageData(5,5,1,1).data[3]<128}return l})().then((t=>{null==e||e(t?[u]:[])})):null==e||e([]),i)};return Object.assign(e,i)};let p,m;function u(t){const e="object"==typeof t&&t.target||document,i="object"==typeof t?t.zoom:t;window[h]||(Object.defineProperty(window,h,{configurable:!0,value:!0}),document.body.style.zoom=1.0001,document.body.offsetHeight,document.body.style.zoom=1,window.addEventListener("message",(({data:t,origin:e})=>{if(e===window.origin)try{if(t&&"string"==typeof t&&t.startsWith(c)){const[,e]=t.split(","),i=Number.parseFloat(e);Number.isNaN(i)||(m=i)}}catch(t){console.error(t)}})));let n=!1;Array.from(e.querySelectorAll("svg[data-marpit-svg]"),(t=>{var e,s,r,o;t.style.transform||(t.style.transform="translateZ(0)");const a=i||m||t.currentScale||1;p!==a&&(p=a,n=a);const l=t.getBoundingClientRect(),{length:c}=t.children;for(let i=0;i<c;i+=1){const n=t.children[i];if(n.getScreenCTM){const t=n.getScreenCTM();if(t){const i=null!==(s=null===(e=n.x)||void 0===e?void 0:e.baseVal.value)&&void 0!==s?s:0,c=null!==(o=null===(r=n.y)||void 0===r?void 0:r.baseVal.value)&&void 0!==o?o:0,d=n.children.length;for(let e=0;e<d;e+=1){const s=n.children[e];if("SECTION"===s.tagName){const{style:e}=s;e.transformOrigin||(e.transformOrigin=`${-i}px ${-c}px`),e.transform=`scale(${a}) matrix(${t.a}, ${t.b}, ${t.c}, ${t.d}, ${t.e-l.left}, ${t.f-l.top}) translateZ(0.0001px)`;break}}}}}})),!1!==n&&Array.from(e.querySelectorAll("iframe"),(({contentWindow:t})=>{null==t||t.postMessage(`${c}${n}`,"null"===window.origin?"*":window.origin)}))}function v({once:t=!1,target:e=document}={}){const i=function(t=document){if(t[d])return t[d];let e=!0;const i=()=>{e=!1,delete t[d]};Object.defineProperty(t,d,{configurable:!0,value:i});let n=[],s=!1;(async()=>{try{n=await g()}finally{s=!0}})();const r=()=>{for(const e of n)e({target:t});s&&0===n.length||e&&window.requestAnimationFrame(r)};return r(),i}(e);return t?(i(),()=>{}):i}p=1,m=void 0;const w=Symbol(),b=(e=document)=>{if("undefined"==typeof window)throw new Error("Marp Core's browser script is valid only in browser context.");if(((e=document)=>{const i=window[a];i||customElements.define("marp-auto-scaling",s);for(const n of Object.keys(t)){const s=`marp-${n}`,a=t[n].proto();(o??(o=!!document.createElement("div",{is:"marp-auto-scaling"}).outerHTML.startsWith("<div is"),o))&&a!==HTMLElement?i||customElements.define(s,r(a,{style:t[n].style}),{extends:n}):(i||customElements.define(s,r(HTMLElement,t[n])),e.querySelectorAll(`${n}[is="${s}"]`).forEach((t=>{t.outerHTML=t.outerHTML.replace(new RegExp(`^<${n}`,"i"),`<${s}`).replace(new RegExp(`</${n}>$`,"i"),`</${s}>`)})))}window[a]=!0})(e),e[w])return e[w];const i=v({target:e}),n=()=>{i(),delete e[w]},l=Object.assign(n,{cleanup:n,update:()=>b(e)});return Object.defineProperty(e,w,{configurable:!0,value:l}),l},y=document.currentScript;b(y?y.getRootNode():document)}();
</script></foreignObject></svg></div><script>/*!! License: https://unpkg.com/@marp-team/marp-cli@4.2.3/lib/bespoke.js.LICENSE.txt */
!function(){"use strict";function e(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}var t,n,r=(n||(n=1,t={from:function(e,t){var n,r=1===(e.parent||e).nodeType?e.parent||e:document.querySelector(e.parent||e),o=[].filter.call("string"==typeof e.slides?r.querySelectorAll(e.slides):e.slides||r.children,function(e){return"SCRIPT"!==e.nodeName}),a={},i=function(e,t){return(t=t||{}).index=o.indexOf(e),t.slide=e,t},s=function(e,t){a[e]=(a[e]||[]).filter(function(e){return e!==t})},c=function(e,t){return(a[e]||[]).reduce(function(e,n){return e&&!1!==n(t)},!0)},l=function(e,t){o[e]&&(n&&c("deactivate",i(n,t)),n=o[e],c("activate",i(n,t)))},d=function(e,t){var r=o.indexOf(n)+e;c(e>0?"next":"prev",i(n,t))&&l(r,t)},u={off:s,on:function(e,t){return(a[e]||(a[e]=[])).push(t),s.bind(null,e,t)},fire:c,slide:function(e,t){if(!arguments.length)return o.indexOf(n);c("slide",i(o[e],t))&&l(e,t)},next:d.bind(null,1),prev:d.bind(null,-1),parent:r,slides:o,destroy:function(e){c("destroy",i(n,e)),a={}}};return(t||[]).forEach(function(e){e(u)}),n||l(0),u}}),t),o=e(r);const a=document.body,i=(...e)=>history.replaceState(...e),s="",c="presenter",l="next",d=["",c,l],u="bespoke-marp-",f=`data-${u}`,m=(e,{protocol:t,host:n,pathname:r,hash:o}=location)=>{const a=e.toString();return`${t}//${n}${r}${a?"?":""}${a}${o}`},g=()=>a.dataset.bespokeView,p=e=>new URLSearchParams(location.search).get(e),v=(e,t={})=>{const n={location,setter:i,...t},r=new URLSearchParams(n.location.search);for(const t of Object.keys(e)){const n=e[t];"string"==typeof n?r.set(t,n):r.delete(t)}try{n.setter({...window.history.state??{}},"",m(r,n.location))}catch(e){console.error(e)}},h=(()=>{const e="bespoke-marp";try{return localStorage.setItem(e,e),localStorage.removeItem(e),!0}catch{return!1}})(),y=e=>{try{return localStorage.getItem(e)}catch{return null}},b=(e,t)=>{try{return localStorage.setItem(e,t),!0}catch{return!1}},w=e=>{try{return localStorage.removeItem(e),!0}catch{return!1}},x=(e,t)=>{const n="aria-hidden";t?e.setAttribute(n,"true"):e.removeAttribute(n)},k=e=>{e.parent.classList.add(`${u}parent`),e.slides.forEach(e=>e.classList.add(`${u}slide`)),e.on("activate",t=>{const n=`${u}active`,r=t.slide,o=r.classList,a=!o.contains(n);if(e.slides.forEach(e=>{e.classList.remove(n),x(e,!0)}),o.add(n),x(r,!1),a){const e=`${n}-ready`;o.add(e),document.body.clientHeight,o.remove(e)}})},$=e=>{let t=0,n=0;Object.defineProperty(e,"fragments",{enumerable:!0,value:e.slides.map(e=>[null,...e.querySelectorAll("[data-marpit-fragment]")])});const r=r=>void 0!==e.fragments[t][n+r],o=(r,o)=>{t=r,n=o,e.fragments.forEach((e,t)=>{e.forEach((e,n)=>{if(null==e)return;const a=t<r||t===r&&n<=o;e.setAttribute(`${f}fragment`,(a?"":"in")+"active");const i=`${f}current-fragment`;t===r&&n===o?e.setAttribute(i,"current"):e.removeAttribute(i)})}),e.fragmentIndex=o;const a={slide:e.slides[r],index:r,fragments:e.fragments[r],fragmentIndex:o};e.fire("fragment",a)};e.on("next",({fragment:a=!0})=>{if(a){if(r(1))return o(t,n+1),!1;const a=t+1;e.fragments[a]&&o(a,0)}else{const r=e.fragments[t].length;if(n+1<r)return o(t,r-1),!1;const a=e.fragments[t+1];a&&o(t+1,a.length-1)}}),e.on("prev",({fragment:a=!0})=>{if(r(-1)&&a)return o(t,n-1),!1;const i=t-1;e.fragments[i]&&o(i,e.fragments[i].length-1)}),e.on("slide",({index:t,fragment:n})=>{let r=0;if(void 0!==n){const o=e.fragments[t];if(o){const{length:e}=o;r=-1===n?e-1:Math.min(Math.max(n,0),e-1)}}o(t,r)}),o(0,0)},E=document,L=()=>!(!E.fullscreenEnabled&&!E.webkitFullscreenEnabled),S=()=>!(!E.fullscreenElement&&!E.webkitFullscreenElement),P=e=>{e.fullscreen=()=>{L()&&(async()=>{S()?(E.exitFullscreen||E.webkitExitFullscreen)?.call(E):((e=E.body)=>{(e.requestFullscreen||e.webkitRequestFullscreen)?.call(e)})()})()},document.addEventListener("keydown",t=>{"f"!==t.key&&"F11"!==t.key||t.altKey||t.ctrlKey||t.metaKey||!L()||(e.fullscreen(),t.preventDefault())})},_=`${u}inactive`,T=(e=2e3)=>({parent:t,fire:n})=>{const r=t.classList,o=e=>n(`marp-${e?"":"in"}active`);let a;const i=()=>{a&&clearTimeout(a),a=setTimeout(()=>{r.add(_),o()},e),r.contains(_)&&(r.remove(_),o(!0))};for(const e of["mousedown","mousemove","touchend"])document.addEventListener(e,i);setTimeout(i,0)},I=["AUDIO","BUTTON","INPUT","SELECT","TEXTAREA","VIDEO"],M=e=>{e.parent.addEventListener("keydown",e=>{if(!e.target)return;const t=e.target;(I.includes(t.nodeName)||"true"===t.contentEditable)&&e.stopPropagation()})},O=e=>{window.addEventListener("load",()=>{for(const t of e.slides){const e=t.querySelector("marp-auto-scaling, [data-auto-scaling], [data-marp-fitting]");t.setAttribute(`${f}load`,e?"":"hideable")}})},A=({interval:e=250}={})=>t=>{document.addEventListener("keydown",e=>{if(" "===e.key&&e.shiftKey)t.prev();else if("ArrowLeft"===e.key||"ArrowUp"===e.key||"PageUp"===e.key)t.prev({fragment:!e.shiftKey});else if(" "!==e.key||e.shiftKey)if("ArrowRight"===e.key||"ArrowDown"===e.key||"PageDown"===e.key)t.next({fragment:!e.shiftKey});else if("End"===e.key)t.slide(t.slides.length-1,{fragment:-1});else{if("Home"!==e.key)return;t.slide(0)}else t.next();e.preventDefault()});let n,r,o=0;t.parent.addEventListener("wheel",a=>{let i=!1;const s=(e,t)=>{e&&(i=i||((e,t)=>((e,t)=>{const n="X"===t?"Width":"Height";return e[`client${n}`]<e[`scroll${n}`]})(e,t)&&((e,t)=>{const{overflow:n}=e,r=e[`overflow${t}`];return"auto"===n||"scroll"===n||"auto"===r||"scroll"===r})(getComputedStyle(e),t))(e,t)),e?.parentElement&&s(e.parentElement,t)};if(0!==a.deltaX&&s(a.target,"X"),0!==a.deltaY&&s(a.target,"Y"),i)return;a.preventDefault();const c=Math.sqrt(a.deltaX**2+a.deltaY**2);if(void 0!==a.wheelDelta){if(void 0===a.webkitForce&&Math.abs(a.wheelDelta)<40)return;if(a.deltaMode===a.DOM_DELTA_PIXEL&&c<4)return}else if(a.deltaMode===a.DOM_DELTA_PIXEL&&c<12)return;r&&clearTimeout(r),r=setTimeout(()=>{n=0},e);const l=Date.now()-o<e,d=c<=n;if(n=c,l||d)return;let u;(a.deltaX>0||a.deltaY>0)&&(u="next"),(a.deltaX<0||a.deltaY<0)&&(u="prev"),u&&(t[u](),o=Date.now())})},C=(e=`.${u}osc`)=>{const t=document.querySelector(e);if(!t)return()=>{};const n=(e,n)=>{t.querySelectorAll(`[${f}osc=${JSON.stringify(e)}]`).forEach(n)};return L()||n("fullscreen",e=>e.style.display="none"),h||n("presenter",e=>{e.disabled=!0,e.title="Presenter view is disabled due to restricted localStorage."}),e=>{t.addEventListener("click",t=>{if(t.target instanceof HTMLElement){const{bespokeMarpOsc:n}=t.target.dataset;n&&t.target.blur();const r={fragment:!t.shiftKey};"next"===n?e.next(r):"prev"===n?e.prev(r):"fullscreen"===n?e?.fullscreen():"presenter"===n&&e.openPresenterView()}}),e.parent.appendChild(t),e.on("activate",({index:t})=>{n("page",n=>n.textContent=`Page ${t+1} of ${e.slides.length}`)}),e.on("fragment",({index:t,fragments:r,fragmentIndex:o})=>{n("prev",e=>e.disabled=0===t&&0===o),n("next",n=>n.disabled=t===e.slides.length-1&&o===r.length-1)}),e.on("marp-active",()=>x(t,!1)),e.on("marp-inactive",()=>x(t,!0)),L()&&(e=>{for(const t of["","webkit"])E.addEventListener(t+"fullscreenchange",e)})(()=>n("fullscreen",e=>e.classList.toggle("exit",L()&&S())))}},D=e=>{window.addEventListener("message",t=>{if(t.origin!==window.origin)return;const[n,r]=t.data.split(":");if("navigate"===n){const[t,n]=r.split(",");let o=Number.parseInt(t,10),a=Number.parseInt(n,10)+1;a>=e.fragments[o].length&&(o+=1,a=0),e.slide(o,{fragment:a})}})};var N,B,q,K,F,j,V,U={exports:{}},X=(N||(N=1,U.exports=(B=["area","base","br","col","command","embed","hr","img","input","keygen","link","meta","param","source","track","wbr"],q=function(e){return String(e).replace(/[&<>"']/g,function(e){return"&"+K[e]+";"})},K={"&":"amp","<":"lt",">":"gt",'"':"quot","'":"apos"},F="dangerouslySetInnerHTML",j={className:"class",htmlFor:"for"},V={},function(e,t){var n=[],r="";t=t||{};for(var o=arguments.length;o-- >2;)n.push(arguments[o]);if("function"==typeof e)return t.children=n.reverse(),e(t);if(e){if(r+="<"+e,t)for(var a in t)!1!==t[a]&&null!=t[a]&&a!==F&&(r+=" "+(j[a]?j[a]:q(a))+'="'+q(t[a])+'"');r+=">"}if(-1===B.indexOf(e)){if(t[F])r+=t[F].__html;else for(;n.length;){var i=n.pop();if(i)if(i.pop)for(var s=i.length;s--;)n.push(i[s]);else r+=!0===V[i]?i:q(i)}r+=e?"</"+e+">":""}return V[r]=!0,r})),U.exports),H=e(X);const R=({children:e})=>H(null,null,...e),W=`${u}presenter-`,J={container:`${W}container`,dragbar:`${W}dragbar-container`,next:`${W}next`,nextContainer:`${W}next-container`,noteContainer:`${W}note-container`,noteWrapper:`${W}note-wrapper`,noteButtons:`${W}note-buttons`,infoContainer:`${W}info-container`,infoPage:`${W}info-page`,infoPageText:`${W}info-page-text`,infoPagePrev:`${W}info-page-prev`,infoPageNext:`${W}info-page-next`,noteButtonsBigger:`${W}note-bigger`,noteButtonsSmaller:`${W}note-smaller`,infoTime:`${W}info-time`,infoTimer:`${W}info-timer`},Y=e=>{const{title:t}=document;document.title="[Presenter view]"+(t?` - ${t}`:"");const n={},r=e=>(n[e]=n[e]||document.querySelector(`.${e}`),n[e]);document.body.appendChild((e=>{const t=document.createElement("div");return t.className=J.container,t.appendChild(e),t.insertAdjacentHTML("beforeend",H(R,null,H("div",{class:J.nextContainer},H("iframe",{class:J.next,src:"?view=next"})),H("div",{class:J.dragbar}),H("div",{class:J.noteContainer},H("div",{class:J.noteWrapper}),H("div",{class:J.noteButtons},H("button",{class:J.noteButtonsSmaller,tabindex:"-1",title:"Smaller notes font size"},"Smaller notes font size"),H("button",{class:J.noteButtonsBigger,tabindex:"-1",title:"Bigger notes font size"},"Bigger notes font size"))),H("div",{class:J.infoContainer},H("div",{class:J.infoPage},H("button",{class:J.infoPagePrev,tabindex:"-1",title:"Previous"},"Previous"),H("span",{class:J.infoPageText}),H("button",{class:J.infoPageNext,tabindex:"-1",title:"Next"},"Next")),H("time",{class:J.infoTime,title:"Current time"}),H("time",{class:J.infoTimer,title:"Timer"})))),t})(e.parent)),(e=>{let t=!1;r(J.dragbar).addEventListener("mousedown",()=>{t=!0,r(J.dragbar).classList.add("active")}),window.addEventListener("mouseup",()=>{t=!1,r(J.dragbar).classList.remove("active")}),window.addEventListener("mousemove",e=>{if(!t)return;const n=e.clientX/document.documentElement.clientWidth*100;r(J.container).style.setProperty("--bespoke-marp-presenter-split-ratio",`${Math.max(0,Math.min(100,n))}%`)}),r(J.nextContainer).addEventListener("click",()=>e.next());const n=r(J.next),o=(a=n,(e,t)=>a.contentWindow?.postMessage(`navigate:${e},${t}`,"null"===window.origin?"*":window.origin));var a;n.addEventListener("load",()=>{r(J.nextContainer).classList.add("active"),o(e.slide(),e.fragmentIndex),e.on("fragment",({index:e,fragmentIndex:t})=>o(e,t))});const i=document.querySelectorAll(".bespoke-marp-note");i.forEach(e=>{e.addEventListener("keydown",e=>e.stopPropagation()),r(J.noteWrapper).appendChild(e)}),e.on("activate",()=>i.forEach(t=>t.classList.toggle("active",t.dataset.index==e.slide())));let s=0;const c=e=>{s=Math.max(-5,s+e),r(J.noteContainer).style.setProperty("--bespoke-marp-note-font-scale",(1.2**s).toFixed(4))},l=()=>c(1),d=()=>c(-1),u=r(J.noteButtonsBigger),f=r(J.noteButtonsSmaller);u.addEventListener("click",()=>{u.blur(),l()}),f.addEventListener("click",()=>{f.blur(),d()}),document.addEventListener("keydown",e=>{"+"===e.key&&l(),"-"===e.key&&d()},!0),e.on("activate",({index:t})=>{r(J.infoPageText).textContent=`${t+1} / ${e.slides.length}`});const m=r(J.infoPagePrev),g=r(J.infoPageNext);m.addEventListener("click",t=>{m.blur(),e.prev({fragment:!t.shiftKey})}),g.addEventListener("click",t=>{g.blur(),e.next({fragment:!t.shiftKey})}),e.on("fragment",({index:t,fragments:n,fragmentIndex:r})=>{m.disabled=0===t&&0===r,g.disabled=t===e.slides.length-1&&r===n.length-1});let p=new Date;const v=()=>{const e=new Date,t=e=>`${Math.floor(e)}`.padStart(2,"0"),n=e.getTime()-p.getTime(),o=t(n/1e3%60),a=t(n/1e3/60%60),i=t(n/36e5%24);r(J.infoTime).textContent=e.toLocaleTimeString(),r(J.infoTimer).textContent=`${i}:${a}:${o}`};v(),setInterval(v,250),r(J.infoTimer).addEventListener("click",()=>{p=new Date})})(e)},z=e=>{if(!(e=>e.syncKey&&"string"==typeof e.syncKey)(e))throw new Error("The current instance of Bespoke.js is invalid for Marp bespoke presenter plugin.");Object.defineProperties(e,{openPresenterView:{enumerable:!0,value:G},presenterUrl:{enumerable:!0,get:Q}}),h&&document.addEventListener("keydown",t=>{"p"!==t.key||t.altKey||t.ctrlKey||t.metaKey||(t.preventDefault(),e.openPresenterView())})};function G(){const{max:e,floor:t}=Math,n=e(t(.85*window.innerWidth),640),r=e(t(.85*window.innerHeight),360);return window.open(this.presenterUrl,W+this.syncKey,`width=${n},height=${r},menubar=no,toolbar=no`)}function Q(){const e=new URLSearchParams(location.search);return e.set("view","presenter"),e.set("sync",this.syncKey),m(e)}const Z=e=>{const t=g();return t===l&&e.appendChild(document.createElement("span")),{[s]:z,[c]:Y,[l]:D}[t]},ee=e=>{e.on("activate",t=>{document.querySelectorAll(".bespoke-progress-parent > .bespoke-progress-bar").forEach(n=>{n.style.flexBasis=100*t.index/(e.slides.length-1)+"%"})})},te=e=>{const t=Number.parseInt(e,10);return Number.isNaN(t)?null:t},ne=(e={})=>{const t={history:!0,...e};return e=>{let n=!0;const r=e=>{const t=n;try{return n=!0,e()}finally{n=t}},o=(t={fragment:!0})=>{let n=t.fragment?te(p("f")||""):null;((t,n)=>{const{min:r,max:o}=Math,{fragments:a,slides:i}=e,s=o(0,r(t,i.length-1)),c=o(0,r(n||0,a[s].length-1));s===e.slide()&&c===e.fragmentIndex||e.slide(s,{fragment:c})})((()=>{if(location.hash){const[t]=location.hash.slice(1).split(":~:");if(/^\d+$/.test(t))return(te(t)??1)-1;const r=document.getElementById(t)||document.querySelector(`a[name="${CSS.escape(t)}"]`);if(r){const{length:t}=e.slides;for(let o=0;o<t;o+=1)if(e.slides[o].contains(r)){const t=e.fragments?.[o],a=r.closest("[data-marpit-fragment]");if(t&&a){const e=t.indexOf(a);e>=0&&(n=e)}return o}}}return 0})(),n)};e.on("fragment",({index:e,fragmentIndex:r})=>{n||v({f:0===r||r.toString()},{location:{...location,hash:`#${e+1}`},setter:(...e)=>t.history?history.pushState(...e):history.replaceState(...e)})}),setTimeout(()=>{o(),window.addEventListener("hashchange",()=>r(()=>{o({fragment:!1}),v({f:void 0})})),window.addEventListener("popstate",()=>{n||r(()=>o())}),n=!1},0)}},re=(e={})=>{const t=e.key||window.history.state?.marpBespokeSyncKey||Math.random().toString(36).slice(2),n=`bespoke-marp-sync-${t}`;var r;r={marpBespokeSyncKey:t},v({},{setter:(e,...t)=>i({...e,...r},...t)});const o=()=>{const e=y(n);return e?JSON.parse(e):Object.create(null)},a=e=>{const t=o(),r={...t,...e(t)};return b(n,JSON.stringify(r)),r},s=()=>{window.removeEventListener("pageshow",s),a(e=>({reference:(e.reference||0)+1}))};return e=>{s(),Object.defineProperty(e,"syncKey",{value:t,enumerable:!0});let r=!0;setTimeout(()=>{e.on("fragment",e=>{r&&a(()=>({index:e.index,fragmentIndex:e.fragmentIndex}))})},0),window.addEventListener("storage",t=>{if(t.key===n&&t.oldValue&&t.newValue){const n=JSON.parse(t.oldValue),o=JSON.parse(t.newValue);if(n.index!==o.index||n.fragmentIndex!==o.fragmentIndex)try{r=!1,e.slide(o.index,{fragment:o.fragmentIndex,forSync:!0})}finally{r=!0}}});const i=()=>{const{reference:e}=o();void 0===e||e<=1?w(n):a(()=>({reference:e-1}))};window.addEventListener("pagehide",e=>{e.persisted&&window.addEventListener("pageshow",s),i()}),e.on("destroy",i)}},{PI:oe,abs:ae,sqrt:ie,atan2:se}=Math,ce={passive:!0},le=({slope:e=-.7,swipeThreshold:t=30}={})=>n=>{let r;const o=n.parent,a=e=>{const t=o.getBoundingClientRect();return{x:e.pageX-(t.left+t.right)/2,y:e.pageY-(t.top+t.bottom)/2}};o.addEventListener("touchstart",({touches:e})=>{r=1===e.length?a(e[0]):void 0},ce),o.addEventListener("touchmove",e=>{if(r)if(1===e.touches.length){e.preventDefault();const t=a(e.touches[0]),n=t.x-r.x,o=t.y-r.y;r.delta=ie(ae(n)**2+ae(o)**2),r.radian=se(n,o)}else r=void 0}),o.addEventListener("touchend",o=>{if(r){if(r.delta&&r.delta>=t&&r.radian){const t=(r.radian-e+oe)%(2*oe)-oe;n[t<0?"next":"prev"](),o.stopPropagation()}r=void 0}},ce)},de=new Map;de.clear(),de.set("none",{backward:{both:void 0,incoming:void 0,outgoing:void 0},forward:{both:void 0,incoming:void 0,outgoing:void 0}});const ue={both:"",outgoing:"outgoing-",incoming:"incoming-"},fe={forward:"",backward:"-backward"},me=e=>`--marp-bespoke-transition-animation-${e}`,ge=e=>`--marp-transition-${e}`,pe=me("name"),ve=me("duration"),he=e=>new Promise(t=>{const n={},r=document.createElement("div"),o=e=>{r.remove(),t(e)};r.addEventListener("animationstart",()=>o(n)),Object.assign(r.style,{animationName:e,animationDuration:"1s",animationFillMode:"both",animationPlayState:"paused",position:"absolute",pointerEvents:"none"}),document.body.appendChild(r);const a=getComputedStyle(r).getPropertyValue(ge("duration"));a&&Number.parseFloat(a)>=0&&(n.defaultDuration=a),((e,t)=>{requestAnimationFrame(()=>{e.style.animationPlayState="running",requestAnimationFrame(()=>t(void 0))})})(r,o)}),ye=async e=>de.has(e)?de.get(e):(e=>{const t={},n=[];for(const[r,o]of Object.entries(ue))for(const[a,i]of Object.entries(fe)){const s=`marp-${o}transition${i}-${e}`;n.push(he(s).then(e=>{t[a]=t[a]||{},t[a][r]=e?{...e,name:s}:void 0}))}return Promise.all(n).then(()=>t)})(e).then(t=>(de.set(e,t),t)),be=e=>Object.values(e).flatMap(Object.values).every(e=>!e),we=(e,{type:t,backward:n})=>{const r=e[n?"backward":"forward"],o=(()=>{const e=r[t],n=e=>({[pe]:e.name});if(e)return n(e);if(r.both){const e=n(r.both);return"incoming"===t&&(e[me("direction")]="reverse"),e}})();return!o&&n?we(e,{type:t,backward:!1}):o||{[pe]:"__bespoke_marp_transition_no_animation__"}},xe=e=>{if(e)try{const t=JSON.parse(e);if((e=>{if("object"!=typeof e)return!1;const t=e;return"string"==typeof t.name&&(void 0===t.duration||"string"==typeof t.duration)})(t))return t}catch{}},ke="_tSId",$e="_tA",Ee="bespoke-marp-transition-warming-up",Le=window.matchMedia("(prefers-reduced-motion: reduce)"),Se="__bespoke_marp_transition_reduced_outgoing__",Pe="__bespoke_marp_transition_reduced_incoming__",_e={forward:{both:void 0,incoming:{name:Pe},outgoing:{name:Se}},backward:{both:void 0,incoming:{name:Pe},outgoing:{name:Se}}},Te=e=>{if(!document.startViewTransition)return;const t=t=>(void 0!==t&&(e._tD=t),e._tD);let n;t(!1),((...e)=>{CSS.registerProperty({name:ge("duration"),syntax:"<time>",inherits:!0,initialValue:"-1s"});const t=[...new Set(e).values()];return Promise.all(t.map(e=>ye(e))).then()})(...Array.from(document.querySelectorAll("section[data-transition], section[data-transition-back]")).flatMap(e=>[e.dataset.transition,e.dataset.transitionBack].flatMap(e=>{const t=xe(e);return[t?.name,t?.builtinFallback?`__builtin__${t.name}`:void 0]}).filter(e=>!!e))).then(()=>{document.querySelectorAll("style").forEach(e=>{e.innerHTML=e.innerHTML.replace(/--marp-transition-duration:[^;}]*[;}]/g,e=>e.slice(0,-1)+"!important"+e.slice(-1))})});const r=(n,{back:r,cond:o})=>a=>{const i=t();if(i)return!!a[$e]||!("object"!=typeof i||(i.skipTransition(),!a.forSync));if(!o(a))return!0;const s=e.slides[e.slide()],c=()=>a.back??r,l="data-transition"+(c()?"-back":""),d=s.querySelector(`section[${l}]`);if(!d)return!0;const u=xe(d.getAttribute(l)??void 0);return!u||((async(e,{builtinFallback:t=!0}={})=>{let n=await ye(e);if(be(n)){if(!t)return;return n=await ye(`__builtin__${e}`),be(n)?void 0:n}return n})(u.name,{builtinFallback:u.builtinFallback}).then(e=>{if(!e){t(!0);try{n(a)}finally{t(!1)}return}let r=e;Le.matches&&(console.warn("Use a constant animation to transition because preferring reduced motion by viewer has detected."),r=_e);const o=document.getElementById(ke);o&&o.remove();const i=document.createElement("style");i.id=ke,document.head.appendChild(i),((e,t)=>{const n=[`:root{${ge("direction")}:${t.backward?-1:1};}`,":root:has(.bespoke-marp-inactive){cursor:none;}"],r=t=>{const n=e[t].both?.defaultDuration||e[t].outgoing?.defaultDuration||e[t].incoming?.defaultDuration;return"forward"===t?n:n||r("forward")},o=t.duration||r(t.backward?"backward":"forward");void 0!==o&&n.push(`::view-transition-group(*){${ve}:${o};}`);const a=e=>Object.entries(e).map(([e,t])=>`${e}:${t};`).join("");return n.push(`::view-transition-old(root){${a(we(e,{...t,type:"outgoing"}))}}`,`::view-transition-new(root){${a(we(e,{...t,type:"incoming"}))}}`),n})(r,{backward:c(),duration:u.duration}).forEach(e=>i.sheet?.insertRule(e));const s=document.documentElement.classList;s.add(Ee);let l=!1;const d=()=>{l||(n(a),l=!0,s.remove(Ee))},f=()=>{t(!1),i.remove(),s.remove(Ee)};try{t(!0);const e=document.startViewTransition(d);t(e),e.finished.finally(f)}catch(e){console.error(e),d(),f()}}),!1)};e.on("prev",r(t=>e.prev({...t,[$e]:!0}),{back:!0,cond:e=>e.index>0&&!((e.fragment??1)&&n.fragmentIndex>0)})),e.on("next",r(t=>e.next({...t,[$e]:!0}),{cond:t=>t.index+1<e.slides.length&&!(n.fragmentIndex+1<n.fragments.length)})),setTimeout(()=>{e.on("slide",r(t=>e.slide(t.index,{...t,[$e]:!0}),{cond:t=>{const n=e.slide();return t.index!==n&&(t.back=t.index<n,!0)}}))},0),e.on("fragment",e=>{n=e})};let Ie;const Me=()=>(void 0===Ie&&(Ie="wakeLock"in navigator&&navigator.wakeLock),Ie),Oe=async()=>{const e=Me();if(e)try{return await e.request("screen")}catch(e){console.warn(e)}return null},Ae=async()=>{if(!Me())return;let e;const t=()=>{e&&"visible"===document.visibilityState&&Oe()};for(const e of["visibilitychange","fullscreenchange"])document.addEventListener(e,t);return e=await Oe(),e};((e=document.getElementById(":$p"))=>{(()=>{const e=p("view");a.dataset.bespokeView=e===l||e===c?e:""})();const t=(e=>{const t=p(e);return v({[e]:void 0}),t})("sync")||void 0;o.from(e,((...e)=>{const t=d.findIndex(e=>g()===e);return e.map(([e,n])=>e[t]&&n).filter(e=>e)})([[1,1,0],re({key:t})],[[1,1,1],Z(e)],[[1,1,0],M],[[1,1,1],k],[[1,0,0],T()],[[1,1,1],O],[[1,1,1],ne({history:!1})],[[1,1,0],A()],[[1,1,0],P],[[1,0,0],ee],[[1,1,0],le()],[[1,0,0],C()],[[1,0,0],Te],[[1,1,1],$],[[1,1,0],Ae]))})()}();</script></body></html>