justinkay commited on
Commit
5dd4d41
·
1 Parent(s): 1685382

Add files for demo

Browse files
app.py ADDED
@@ -0,0 +1,869 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import os
2
+ os.environ['GRADIO_TEMP_DIR'] = "tmp/"
3
+
4
+ import gradio as gr
5
+ import json
6
+ import random
7
+ from PIL import Image
8
+ from tqdm import tqdm
9
+ from collections import OrderedDict
10
+ import matplotlib.pyplot as plt
11
+ import matplotlib.image as mpimg
12
+ from matplotlib.offsetbox import OffsetImage, AnnotationBbox
13
+ import numpy as np
14
+ import torch
15
+
16
+ from coda import CODA
17
+ from coda.datasets import Dataset
18
+ from coda.options import LOSS_FNS
19
+ from coda.oracle import Oracle
20
+
21
+
22
+ with open('iwildcam_demo_annotations.json', 'r') as f:
23
+ data = json.load(f)
24
+
25
+ SPECIES_MAP = OrderedDict([
26
+ (24, "Jaguar"), # panthera onca
27
+ (10, "Ocelot"), # leopardus pardalis
28
+ (6, "Mountain Lion"), # puma concolor
29
+ (101, "Common Eland"), # tragelaphus oryx
30
+ (102, "Waterbuck"), # kobus ellipsiprymnus
31
+ ])
32
+ NAME_TO_ID = {name: id for id, name in SPECIES_MAP.items()}
33
+
34
+ # Class names in order (0-4) from classes.txt
35
+ CLASS_NAMES = ["Jaguar", "Ocelot", "Mountain Lion", "Common Eland", "Waterbuck"]
36
+ NAME_TO_CLASS_IDX = {name: idx for idx, name in enumerate(CLASS_NAMES)}
37
+
38
+ # Model information from models.txt
39
+ MODEL_INFO = [
40
+ {"org": "Google", "name": "SigLIP2", "logo": "logos/google.png"},
41
+ {"org": "OpenAI", "name": "CLIPViT-L", "logo": "logos/openai.png"},
42
+ {"org": "Imageomics", "name": "BioCLIP", "logo": "logos/imageomics.png"}
43
+ ]
44
+
45
+ # load image metadata
46
+ images_data = []
47
+ for annotation in tqdm(data['annotations'], desc='Loading annotations'):
48
+ image_id = annotation['image_id']
49
+ category_id = annotation['category_id']
50
+ image_info = next((img for img in data['images'] if img['id'] == image_id), None)
51
+ if image_info:
52
+ images_data.append({
53
+ 'filename': image_info['file_name'],
54
+ 'species_id': category_id,
55
+ 'species_name': SPECIES_MAP[category_id]
56
+ })
57
+ print(f"Loaded {len(images_data)} images for the quiz")
58
+
59
+ # Load image filenames list
60
+ with open('images.txt', 'r') as f:
61
+ image_filenames = [line.strip() for line in f.readlines() if line.strip()]
62
+
63
+ # Initialize CODA
64
+ device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
65
+ dataset = Dataset("iwildcam_demo.pt", device=device)
66
+ loss_fn = LOSS_FNS['acc']
67
+ oracle = Oracle(dataset, loss_fn=loss_fn)
68
+
69
+ # Create CODA selector with default parameters
70
+ class Args:
71
+ def __init__(self):
72
+ self.alpha = 0.9
73
+ self.learning_rate = 0.01
74
+ self.multiplier = 2.0
75
+ self.prefilter_n = 0
76
+ self.no_diag_prior = False
77
+ self.q = "eig"
78
+ self.method = "coda"
79
+ self.loss = "acc"
80
+
81
+ args = Args()
82
+ coda_selector = CODA.from_args(dataset, args)
83
+
84
+ print(f"Initialized CODA with {dataset.preds.shape[1]} samples and {dataset.preds.shape[0]} models")
85
+
86
+ # Global state
87
+ current_image_info = None
88
+ # coda_selector already initialized above
89
+ # oracle already initialized above
90
+ # dataset already initialized above
91
+ # image_filenames already initialized above
92
+ iteration_count = 0
93
+
94
+ def get_model_predictions(chosen_idx):
95
+ """Get model predictions and scores for a specific image"""
96
+ global dataset
97
+
98
+ if dataset is None or chosen_idx >= dataset.preds.shape[1]:
99
+ return "No predictions available"
100
+
101
+ # Get predictions for this image (shape: [num_models, num_classes])
102
+ image_preds = dataset.preds[:, chosen_idx, :].detach().cpu().numpy()
103
+
104
+ predictions_list = []
105
+
106
+ for model_idx in range(image_preds.shape[0]):
107
+ model_scores = image_preds[model_idx]
108
+ predicted_class_idx = model_scores.argmax()
109
+ predicted_class_name = CLASS_NAMES[predicted_class_idx]
110
+ confidence = model_scores[predicted_class_idx]
111
+
112
+ model_info = MODEL_INFO[model_idx]
113
+ predictions_list.append(f"**{model_info['org']} {model_info['name']}:** {predicted_class_name} *({confidence:.3f})*")
114
+
115
+ predictions_text = "### Model Predictions\n\n" + " | ".join(predictions_list)
116
+
117
+ return predictions_text
118
+
119
+ def add_logo_to_x_axis(ax, x_pos, logo_path, model_name, height_px=35):
120
+ """Add a logo image to x-axis next to model name"""
121
+ try:
122
+ img = mpimg.imread(logo_path)
123
+ # Calculate zoom to achieve desired height in pixels
124
+ # Rough conversion: height_px / image_height / dpi * 72
125
+ zoom = height_px / img.shape[0] / ax.figure.dpi * 72
126
+ imagebox = OffsetImage(img, zoom=zoom)
127
+
128
+ # Position logo to the left of the x-tick
129
+ logo_offset = -0.2 # Adjust this to move logo left/right relative to tick
130
+ y_offset = -0.08
131
+ ab = AnnotationBbox(imagebox, (x_pos + logo_offset, y_offset),
132
+ xycoords=('data', 'axes fraction'), frameon=False)
133
+ ax.add_artist(ab)
134
+ except Exception as e:
135
+ print(f"Could not load logo {logo_path}: {e}")
136
+
137
+ def get_next_coda_image():
138
+ """Get the next image that CODA wants labeled"""
139
+ global current_image_info, coda_selector, iteration_count
140
+
141
+ # Get next item from CODA
142
+ chosen_idx, selection_prob = coda_selector.get_next_item_to_label()
143
+
144
+ # Get the corresponding image filename
145
+ if chosen_idx < len(image_filenames):
146
+ filename = image_filenames[chosen_idx]
147
+ image_path = os.path.join('iwildcam_demo_images', filename)
148
+
149
+ # Find the corresponding annotation for this image
150
+ current_image_info = None
151
+ for annotation in data['annotations']:
152
+ image_id = annotation['image_id']
153
+ image_info = next((img for img in data['images'] if img['id'] == image_id), None)
154
+ if image_info and image_info['file_name'] == filename:
155
+ current_image_info = {
156
+ 'filename': filename,
157
+ 'species_id': annotation['category_id'],
158
+ 'species_name': SPECIES_MAP[annotation['category_id']],
159
+ 'chosen_idx': chosen_idx,
160
+ 'selection_prob': selection_prob
161
+ }
162
+ break
163
+
164
+ try:
165
+ image = Image.open(image_path)
166
+ predictions = get_model_predictions(chosen_idx)
167
+ return image, f"Iteration {iteration_count}: CODA selected this image for labeling", predictions
168
+ except Exception as e:
169
+ print(f"Error loading image {image_path}: {e}")
170
+ return None, f"Error loading image: {e}", "No predictions available"
171
+ else:
172
+ return None, "Image index out of range", "No predictions available"
173
+
174
+ def check_answer(user_choice):
175
+ """Process user's label and update CODA"""
176
+ global current_image_info, coda_selector, iteration_count
177
+
178
+ if current_image_info is None:
179
+ return "Please load an image first!", "", None, "No predictions", None, None
180
+
181
+ correct_species = current_image_info['species_name']
182
+ chosen_idx = current_image_info['chosen_idx']
183
+ selection_prob = current_image_info['selection_prob']
184
+
185
+ # Convert user choice to class index (0-5)
186
+ if user_choice == "I don't know":
187
+ # For "I don't know", just remove from sampling without providing label
188
+ coda_selector.unlabeled_idxs.remove(chosen_idx)
189
+ result = f"The last image was skipped and will not be used for model selection. The correct species was {correct_species}. "
190
+ else:
191
+ user_class_idx = NAME_TO_CLASS_IDX.get(user_choice, NAME_TO_CLASS_IDX[correct_species])
192
+ if user_choice == correct_species:
193
+ result = f"🎉 Correct! The last image was indeed a {correct_species}!"
194
+ else:
195
+ result = f"❌ Incorrect. The last image was a {correct_species}, not a {user_choice}. This may mislead the model selection process!"
196
+
197
+ # Update CODA with the label
198
+ coda_selector.add_label(chosen_idx, user_class_idx, selection_prob)
199
+
200
+ iteration_count += 1
201
+
202
+ # Get updated plots
203
+ prob_plot = create_probability_chart()
204
+ accuracy_plot = create_accuracy_chart()
205
+
206
+ # Load next image
207
+ next_image, status, predictions = get_next_coda_image()
208
+ # Create HTML with inline help button for status
209
+ status_html = f'{status} <span class="inline-help-btn" title="What is this?">?</span>'
210
+ return result, status_html, next_image, predictions, prob_plot, accuracy_plot
211
+
212
+ def create_probability_chart():
213
+ """Create a bar chart showing probability each model is best"""
214
+ global coda_selector
215
+
216
+ if coda_selector is None:
217
+ # Fallback for initial state
218
+ model_labels = [info['name'] for info in MODEL_INFO]
219
+ probabilities = np.ones(len(MODEL_INFO)) / len(MODEL_INFO) # Uniform prior
220
+ else:
221
+ probs_tensor = coda_selector.get_pbest()
222
+ probabilities = probs_tensor.detach().cpu().numpy().flatten()
223
+ model_labels = [" " + info['name'] for info in MODEL_INFO[:len(probabilities)]]
224
+
225
+ # Find the index of the highest probability
226
+ best_idx = np.argmax(probabilities)
227
+
228
+ fig, ax = plt.subplots(figsize=(8, 2.8), dpi=150)
229
+
230
+ # Create colors array - highlight the best model
231
+ colors = ['orange' if i == best_idx else 'steelblue' for i in range(len(model_labels))]
232
+ bars = ax.bar(range(len(model_labels)), probabilities, color=colors, alpha=0.7)
233
+
234
+ # Add text above the highest bar
235
+ ax.text(best_idx, probabilities[best_idx] + 0.0025, 'Current best guess',
236
+ ha='center', va='bottom', fontsize=12, fontweight='bold')
237
+
238
+ ax.set_ylabel('Probability model is best', fontsize=12)
239
+ ax.set_title(f'CODA Model Selection Probabilities (Iteration {iteration_count})', fontsize=12)
240
+ ax.set_ylim(np.min(probabilities) - 0.01, np.max(probabilities) + 0.02)
241
+
242
+ # Set x-axis labels and ticks
243
+ ax.set_xticks(range(len(model_labels)))
244
+ ax.set_xticklabels(model_labels, fontsize=12, ha='center')
245
+
246
+ # Add logos to x-axis
247
+ for i, model_info in enumerate(MODEL_INFO[:len(probabilities)]):
248
+ add_logo_to_x_axis(ax, i, model_info['logo'], model_info['name'])
249
+ plt.yticks(fontsize=12)
250
+ plt.tight_layout()
251
+
252
+ # Save the figure and close it to prevent memory leaks
253
+ temp_fig = fig
254
+ plt.close(fig)
255
+ return temp_fig
256
+
257
+ def create_accuracy_chart():
258
+ """Create a bar chart showing true accuracy of each model"""
259
+ global oracle, dataset
260
+
261
+ if oracle is None or dataset is None:
262
+ # Fallback for initial state
263
+ model_labels = [info['name'] for info in MODEL_INFO]
264
+ accuracies = np.random.random(len(MODEL_INFO)) # Random accuracies for now
265
+ else:
266
+ true_losses = oracle.true_losses(dataset.preds)
267
+ # Convert losses to accuracies (assuming loss is 1 - accuracy)
268
+ accuracies = (1 - true_losses).detach().cpu().numpy().flatten()
269
+ model_labels = [" " + info['name'] for info in MODEL_INFO[:len(accuracies)]]
270
+
271
+ # Find the index of the highest accuracy
272
+ best_idx = np.argmax(accuracies)
273
+
274
+ fig, ax = plt.subplots(figsize=(8, 2.8), dpi=150)
275
+
276
+ # Create colors array - highlight the best model
277
+ colors = ['red' if i == best_idx else 'forestgreen' for i in range(len(model_labels))]
278
+ bars = ax.bar(range(len(model_labels)), accuracies, color=colors, alpha=0.7)
279
+
280
+ # Add text above the highest bar
281
+ ax.text(best_idx, accuracies[best_idx] + 0.005, 'True best model',
282
+ ha='center', va='bottom', fontsize=12, fontweight='bold')
283
+
284
+ ax.set_ylabel('True (oracle) \naccuracy of model', fontsize=12)
285
+ ax.set_title('True Model Accuracies', fontsize=12)
286
+ ax.set_ylim(np.min(accuracies) - 0.025, np.max(accuracies) + 0.05)
287
+
288
+ # Set x-axis labels and ticks
289
+ ax.set_xticks(range(len(model_labels)))
290
+ ax.set_xticklabels(model_labels, fontsize=12, ha='center')
291
+
292
+ # Add logos to x-axis
293
+ for i, model_info in enumerate(MODEL_INFO[:len(accuracies)]):
294
+ add_logo_to_x_axis(ax, i, model_info['logo'], model_info['name'])
295
+ plt.yticks(fontsize=12)
296
+ plt.tight_layout()
297
+
298
+ # Save the figure and close it to prevent memory leaks
299
+ temp_fig = fig
300
+ plt.close(fig)
301
+ return temp_fig
302
+
303
+ # Create the Gradio interface
304
+ with gr.Blocks(title="CODA: Wildlife Photo Classification Challenge",
305
+ theme=gr.themes.Base(),
306
+ css="""
307
+ .subtle-outline {
308
+ border: 1px solid var(--border-color-primary) !important;
309
+ background: transparent !important;
310
+ border-radius: var(--radius-lg);
311
+ padding: 1rem;
312
+ }
313
+ .subtle-outline .flex {
314
+ background-color: white !important;
315
+ }
316
+
317
+ /* Popup overlay styles */
318
+ .popup-overlay {
319
+ position: fixed;
320
+ top: 0;
321
+ left: 0;
322
+ width: 100%;
323
+ height: 100%;
324
+ background-color: rgba(0, 0, 0, 0.5);
325
+ z-index: 1000;
326
+ display: flex;
327
+ justify-content: center;
328
+ align-items: center;
329
+ }
330
+
331
+ .popup-overlay > div {
332
+ background: transparent !important;
333
+ border: none !important;
334
+ padding: 0 !important;
335
+ margin: 0 !important;
336
+ }
337
+
338
+ .popup-content {
339
+ background: white !important;
340
+ padding: 2rem !important;
341
+ border-radius: 1rem !important;
342
+ max-width: 850px;
343
+ width: 90%;
344
+ max-height: 80vh;
345
+ overflow-y: auto;
346
+ box-shadow: 0 10px 25px rgba(0, 0, 0, 0.3);
347
+ border: none !important;
348
+ margin: 0 !important;
349
+ }
350
+
351
+ .popup-content > div {
352
+ background: white !important;
353
+ border: none !important;
354
+ padding: 0 !important;
355
+ margin: 0 !important;
356
+ overflow-y: visible !important;
357
+ max-height: none !important;
358
+ }
359
+
360
+ /* Ensure gradio column components don't interfere with scrolling */
361
+ .popup-content .gradio-column {
362
+ overflow-y: visible !important;
363
+ max-height: none !important;
364
+ }
365
+
366
+ /* Ensure images in popup are responsive */
367
+ .popup-content img {
368
+ max-width: 100% !important;
369
+ height: auto !important;
370
+ }
371
+
372
+ /* Center title */
373
+ .text-center {
374
+ text-align: center !important;
375
+ }
376
+
377
+ /* Subtitle styling */
378
+ .subtitle {
379
+ text-align: center !important;
380
+ font-weight: 300 !important;
381
+ color: #666 !important;
382
+ margin-top: -0.5rem !important;
383
+ }
384
+
385
+ /* Question mark icon styling */
386
+ .panel-container {
387
+ position: relative;
388
+ }
389
+
390
+ .help-icon {
391
+ position: absolute;
392
+ top: 5px;
393
+ right: 5px;
394
+ width: 25px;
395
+ height: 25px;
396
+ background-color: #f8f9fa;
397
+ color: #6c757d;
398
+ border: 1px solid #dee2e6;
399
+ border-radius: 50%;
400
+ display: flex;
401
+ align-items: center;
402
+ justify-content: center;
403
+ cursor: pointer;
404
+ font-size: 13px;
405
+ font-weight: 600;
406
+ z-index: 10;
407
+ transition: all 0.2s ease;
408
+ box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);
409
+ }
410
+
411
+ .help-icon:hover {
412
+ background-color: #e9ecef;
413
+ color: #495057;
414
+ border-color: #adb5bd;
415
+ box-shadow: 0 2px 6px rgba(0, 0, 0, 0.15);
416
+ }
417
+
418
+ /* Help popup styles */
419
+ .help-popup-overlay {
420
+ position: fixed;
421
+ top: 0;
422
+ left: 0;
423
+ width: 100%;
424
+ height: 100%;
425
+ background-color: rgba(0, 0, 0, 0.5);
426
+ z-index: 1001;
427
+ display: flex;
428
+ justify-content: center;
429
+ align-items: center;
430
+ }
431
+
432
+ .help-popup-overlay > div {
433
+ background: transparent !important;
434
+ border: none !important;
435
+ padding: 0 !important;
436
+ margin: 0 !important;
437
+ }
438
+
439
+ .help-popup-content {
440
+ background: white !important;
441
+ padding: 1.5rem !important;
442
+ border-radius: 0.5rem !important;
443
+ max-width: 600px;
444
+ width: 90%;
445
+ box-shadow: 0 10px 25px rgba(0, 0, 0, 0.3);
446
+ border: none !important;
447
+ margin: 0 !important;
448
+ }
449
+
450
+ .help-popup-content > div {
451
+ background: white !important;
452
+ border: none !important;
453
+ padding: 0 !important;
454
+ margin: 0 !important;
455
+ }
456
+
457
+ /* Inline help button */
458
+ .inline-help-btn {
459
+ display: inline-block;
460
+ width: 20px;
461
+ height: 20px;
462
+ background-color: #f8f9fa;
463
+ color: #6c757d;
464
+ border: 1px solid #dee2e6;
465
+ border-radius: 50%;
466
+ text-align: center;
467
+ line-height: 18px;
468
+ cursor: pointer;
469
+ font-size: 11px;
470
+ font-weight: 600;
471
+ margin-left: 8px;
472
+ vertical-align: middle;
473
+ transition: all 0.2s ease;
474
+ box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);
475
+ }
476
+
477
+ .inline-help-btn:hover {
478
+ background-color: #e9ecef;
479
+ color: #495057;
480
+ border-color: #adb5bd;
481
+ box-shadow: 0 2px 6px rgba(0, 0, 0, 0.15);
482
+ }
483
+
484
+ #hidden-selection-help-btn {
485
+ display: none;
486
+ }
487
+
488
+ /* Reduce spacing around status text */
489
+ .status-text {
490
+ margin: 0 !important;
491
+ padding: 0 !important;
492
+ }
493
+
494
+ .status-text > div {
495
+ margin: 0 !important;
496
+ padding: 0 !important;
497
+ }
498
+
499
+ /* Compact model predictions panel */
500
+ .compact-predictions {
501
+ line-height: 1.1 !important;
502
+ margin: 0 !important;
503
+ padding: 0.1rem !important;
504
+ }
505
+
506
+ .compact-predictions p {
507
+ margin: 0.05rem 0 !important;
508
+ }
509
+
510
+ .compact-predictions h3 {
511
+ margin: 0 0 0.1rem 0 !important;
512
+ }
513
+
514
+ /* Target the subtle-outline group that contains predictions */
515
+ .subtle-outline {
516
+ padding: 0.3rem !important;
517
+ margin: 0.2rem 0 !important;
518
+ }
519
+
520
+ /* Target the column inside the outline */
521
+ .subtle-outline .flex {
522
+ padding: 0 !important;
523
+ margin: 0 !important;
524
+ }
525
+ """) as demo:
526
+ # Main page title
527
+ gr.Markdown("# CODA: Consensus-Driven Active Model Selection", elem_classes="text-center")
528
+
529
+ # Popup component
530
+ with gr.Group(visible=True, elem_classes="popup-overlay") as popup_overlay:
531
+ with gr.Group(elem_classes="popup-content"):
532
+ # Main intro content
533
+ intro_content = gr.Markdown("""
534
+ # CODA: Consensus-Driven Active Model Selection
535
+
536
+ ## Wildlife Photo Classification Challenge
537
+
538
+ You are a wildlife ecologist who has just collected a season's worth of imagery from cameras
539
+ deployed in Africa and Central and South America. You want to know what species occur in this imagery,
540
+ and you hope to use a pre-trained classifier to give you answers quickly.
541
+ But which one should you use?
542
+
543
+ Instead of labeling a large validation set, our new method, **CODA**, enables you to perform **active model selection**.
544
+ That is, CODA uses predictions from candidate models to guide the labeling process, querying you (a species identification expert)
545
+ for labels on a select few images that will most efficiently differentiate between your candidate machine learning models.
546
+
547
+ This demo lets you try CODA yourself! First, become a species identification expert by reading our classification guide
548
+ so that you will be equipped to provide ground truth labels. Then, watch as CODA narrows down the best model over time
549
+ as you provide labels for the query images. You will see that with your input CODA is able to identify the best model candidate
550
+ with as few as ten (correctly) labeled images.
551
+ """)
552
+
553
+ # Species guide content (initially hidden)
554
+ with gr.Column(visible=False) as species_guide_content:
555
+ gr.Markdown("""
556
+ # Species Classification Guide
557
+
558
+ ### Learn to identify the five wildlife species in this demo.
559
+
560
+ ## Jaguar
561
+ """)
562
+
563
+ gr.Image("species_id/jaguar.jpg", label="Jaguar example image", show_label=False)
564
+
565
+ gr.Markdown("""
566
+ The largest cat in the Americas, with a stocky, muscular build and a broad head; its golden coat is patterned with rosettes that often have central spots inside.
567
+
568
+ ----
569
+
570
+ ## Ocelot
571
+
572
+ """)
573
+
574
+ gr.Image("species_id/ocelot.jpg", label="Ocelot example image", show_label=False)
575
+
576
+ gr.Markdown("""
577
+ A medium-sized spotted cat about twice the size of a domestic cat, with a slender body, large eyes, and striking chain-link or stripe-like rosettes. It differs from jaguars by its smaller size, leaner build, and more elongated markings.
578
+
579
+ ----
580
+
581
+ ## Mountain Lion
582
+ """)
583
+
584
+ gr.Image("species_id/mountainlion.jpg", label="Mountain lion example image", show_label=False)
585
+
586
+ gr.Markdown("""
587
+ Also called cougar or puma, this cat has a plain tawny or grayish coat without spots or rosettes. Its long tail and uniformly colored fur distinguish it from jaguars and ocelots.
588
+
589
+ ----
590
+
591
+ ## Common Eland
592
+
593
+ """)
594
+
595
+ gr.Image("species_id/commoneland.jpg", label="Eland example image", show_label=False)
596
+
597
+ gr.Markdown("""
598
+ The largest antelope species, with a robust body, spiraled horns on both sexes, and a characteristic dewlap hanging from the throat. It differs from waterbuck by its lighter tan coat, faint body stripes, and massive size.
599
+
600
+ ----
601
+
602
+ ## Waterbuck
603
+ """)
604
+
605
+ gr.Image("species_id/waterbuck.jpg", label="Waterbuck example image", show_label=False)
606
+
607
+ gr.Markdown("""
608
+ A shaggy, dark brown antelope recognized by its white rump ring and backward-curving horns in males. Smaller and darker than the common eland, waterbuck prefer wet habitats and lack the eland's throat dewlap.
609
+
610
+ ----
611
+
612
+ """)
613
+
614
+ with gr.Row():
615
+ back_button = gr.Button("← Back to Intro", variant="secondary", size="lg", visible=False)
616
+ guide_button = gr.Button("View Species Classification Guide", variant="secondary", size="lg")
617
+ popup_start_button = gr.Button("Start Demo", variant="primary", size="lg")
618
+
619
+ # Help popups for panels
620
+ with gr.Group(visible=False, elem_classes="help-popup-overlay") as prob_help_popup:
621
+ with gr.Group(elem_classes="help-popup-content"):
622
+ gr.Markdown("""
623
+ ## CODA Model Selection Probabilities
624
+
625
+ This chart shows CODA's current confidence in each candidate model being the best performer.
626
+
627
+ **How to read this chart:**
628
+ - Each bar represents one of the candidate machine learning models
629
+ - The height of each bar shows the probability (0-100%) that this model is the best, according to CODA
630
+ - The orange bar indicates CODA's current best guess
631
+ - As you provide more labels, CODA updates these probabilities
632
+
633
+ **What you'll see:**
634
+ - CODA initializes these probabilities based on each model's agreement with the consensus, providing informative priors
635
+ - As you label images, some models will gain confidence while others lose it
636
+ - The goal is for one model to clearly emerge as the winner
637
+
638
+ """)
639
+ prob_help_close = gr.Button("Close", variant="secondary")
640
+
641
+ with gr.Group(visible=False, elem_classes="help-popup-overlay") as acc_help_popup:
642
+ with gr.Group(elem_classes="help-popup-content"):
643
+ gr.Markdown("""
644
+ ## True Model Accuracies
645
+
646
+ This chart shows the actual performance of each model on the complete dataset (only possible with oracle knowledge).
647
+
648
+ **How to read this chart:**
649
+ - Each bar represents the true accuracy of one model
650
+ - The red bar shows the actual best-performing model
651
+ - This information is hidden from CODA during the selection process
652
+ - You can compare this with CODA's estimates to see how well it's doing
653
+
654
+ **Why this matters:**
655
+ - This represents the "ground truth" that CODA is trying to discover
656
+ - In real scenarios, you wouldn't know these true accuracies beforehand
657
+ - The demo shows these to illustrate how CODA's estimates align with reality
658
+
659
+ """)
660
+ acc_help_close = gr.Button("Close", variant="secondary")
661
+
662
+ with gr.Group(visible=False, elem_classes="help-popup-overlay") as selection_help_popup:
663
+ with gr.Group(elem_classes="help-popup-content"):
664
+ gr.Markdown("""
665
+ ## How CODA Selects Images for Labeling
666
+
667
+ [Placeholder]
668
+ """)
669
+ selection_help_close = gr.Button("Close", variant="secondary")
670
+
671
+ # Two panels with bar charts
672
+ with gr.Row():
673
+ with gr.Column(scale=1):
674
+ with gr.Group(elem_classes="panel-container"):
675
+ prob_help_button = gr.Button("?", elem_classes="help-icon", size="sm")
676
+ prob_plot = gr.Plot(
677
+ value=None,
678
+ show_label=False
679
+ )
680
+ with gr.Column(scale=1):
681
+ with gr.Group(elem_classes="panel-container"):
682
+ acc_help_button = gr.Button("?", elem_classes="help-icon", size="sm")
683
+ accuracy_plot = gr.Plot(
684
+ value=create_accuracy_chart(),
685
+ show_label=False
686
+ )
687
+
688
+ # Status display with help button
689
+ status_with_help = gr.HTML("", visible=True, elem_classes="status-text")
690
+ selection_help_button = gr.Button("", visible=False, elem_id="hidden-selection-help-btn")
691
+
692
+ with gr.Row():
693
+ image_display = gr.Image(
694
+ label="Identify this animal:",
695
+ value=None,
696
+ height=400,
697
+ width=550
698
+ )
699
+
700
+ # Model predictions panel (full width, single line)
701
+ with gr.Group(elem_classes="subtle-outline"):
702
+ with gr.Column(elem_classes="flex items-center justify-center h-full"):
703
+ model_predictions_display = gr.Markdown(
704
+ "### Model Predictions\n\n*Start the demo to see model votes!*",
705
+ show_label=False,
706
+ elem_classes="text-center compact-predictions"
707
+ )
708
+
709
+ gr.Markdown("### Which species is this?")
710
+
711
+ with gr.Row():
712
+ # Create buttons for each species
713
+ species_buttons = []
714
+ for species_name in SPECIES_MAP.values():
715
+ btn = gr.Button(species_name, variant="secondary", size="lg")
716
+ species_buttons.append(btn)
717
+
718
+ # Add "I don't know" button
719
+ idk_button = gr.Button("I don't know", variant="primary", size="lg")
720
+
721
+ # Result display
722
+ result_display = gr.Markdown("", visible=True)
723
+
724
+ # Add start over button
725
+ start_over_button = gr.Button("Start Over", variant="secondary", size="lg")
726
+
727
+ # Set up button interactions
728
+ def start_demo():
729
+ global iteration_count, coda_selector
730
+ # Reset the demo state
731
+ iteration_count = 0
732
+ coda_selector = CODA.from_args(dataset, args)
733
+
734
+ image, status, predictions = get_next_coda_image()
735
+ prob_plot = create_probability_chart()
736
+ acc_plot = create_accuracy_chart()
737
+ # Create HTML with inline help button
738
+ status_html = f'{status} <span class="inline-help-btn" title="What is this?">?</span>'
739
+ return image, status_html, predictions, prob_plot, acc_plot, gr.update(visible=False), "", gr.update(visible=True)
740
+
741
+ def start_over():
742
+ global iteration_count, coda_selector
743
+ # Reset the demo state
744
+ iteration_count = 0
745
+ coda_selector = CODA.from_args(dataset, args)
746
+
747
+ # Reset all displays
748
+ prob_plot = create_probability_chart()
749
+ acc_plot = create_accuracy_chart()
750
+ return None, "Demo reset. Click 'Start CODA Demo' to begin.", "### Model Predictions\n\n*Start the demo to see model votes!*", prob_plot, acc_plot, "", gr.update(visible=True), gr.update(visible=False)
751
+
752
+ def show_species_guide():
753
+ # Show species guide, hide intro content, show back button, hide guide button
754
+ return gr.update(visible=False), gr.update(visible=True), gr.update(visible=True), gr.update(visible=False)
755
+
756
+ def show_intro():
757
+ # Show intro content, hide species guide, hide back button, show guide button
758
+ return gr.update(visible=True), gr.update(visible=False), gr.update(visible=False), gr.update(visible=True)
759
+
760
+ def show_prob_help():
761
+ return gr.update(visible=True)
762
+
763
+ def hide_prob_help():
764
+ return gr.update(visible=False)
765
+
766
+ def show_acc_help():
767
+ return gr.update(visible=True)
768
+
769
+ def hide_acc_help():
770
+ return gr.update(visible=False)
771
+
772
+ def show_selection_help():
773
+ return gr.update(visible=True)
774
+
775
+ def hide_selection_help():
776
+ return gr.update(visible=False)
777
+
778
+ popup_start_button.click(
779
+ fn=start_demo,
780
+ outputs=[image_display, status_with_help, model_predictions_display, prob_plot, accuracy_plot, popup_overlay, result_display, selection_help_button]
781
+ )
782
+
783
+ start_over_button.click(
784
+ fn=start_over,
785
+ outputs=[image_display, status_with_help, model_predictions_display, prob_plot, accuracy_plot, result_display, popup_overlay, selection_help_button]
786
+ )
787
+
788
+ guide_button.click(
789
+ fn=show_species_guide,
790
+ outputs=[intro_content, species_guide_content, back_button, guide_button]
791
+ )
792
+
793
+ back_button.click(
794
+ fn=show_intro,
795
+ outputs=[intro_content, species_guide_content, back_button, guide_button]
796
+ )
797
+
798
+ # Help popup handlers
799
+ prob_help_button.click(
800
+ fn=show_prob_help,
801
+ outputs=[prob_help_popup]
802
+ )
803
+
804
+ prob_help_close.click(
805
+ fn=hide_prob_help,
806
+ outputs=[prob_help_popup]
807
+ )
808
+
809
+ acc_help_button.click(
810
+ fn=show_acc_help,
811
+ outputs=[acc_help_popup]
812
+ )
813
+
814
+ acc_help_close.click(
815
+ fn=hide_acc_help,
816
+ outputs=[acc_help_popup]
817
+ )
818
+
819
+ selection_help_button.click(
820
+ fn=show_selection_help,
821
+ outputs=[selection_help_popup]
822
+ )
823
+
824
+ selection_help_close.click(
825
+ fn=hide_selection_help,
826
+ outputs=[selection_help_popup]
827
+ )
828
+
829
+ for btn in species_buttons:
830
+ btn.click(
831
+ fn=check_answer,
832
+ inputs=[gr.State(btn.value)],
833
+ outputs=[result_display, status_with_help, image_display, model_predictions_display, prob_plot, accuracy_plot]
834
+ )
835
+
836
+ idk_button.click(
837
+ fn=check_answer,
838
+ inputs=[gr.State("I don't know")],
839
+ outputs=[result_display, status_with_help, image_display, model_predictions_display, prob_plot, accuracy_plot]
840
+ )
841
+
842
+ # Add JavaScript to handle inline help button clicks
843
+ demo.load(
844
+ lambda: None,
845
+ outputs=[],
846
+ js="""
847
+ () => {
848
+ setTimeout(() => {
849
+ document.addEventListener('click', function(e) {
850
+ if (e.target && e.target.classList.contains('inline-help-btn')) {
851
+ e.preventDefault();
852
+ e.stopPropagation();
853
+ const hiddenBtn = document.getElementById('hidden-selection-help-btn');
854
+ if (hiddenBtn) {
855
+ hiddenBtn.click();
856
+ }
857
+ }
858
+ });
859
+ }, 100);
860
+ }
861
+ """
862
+ )
863
+
864
+ if __name__ == "__main__":
865
+ demo.launch(
866
+ # share=True,
867
+ server_port=7861,
868
+ allowed_paths=["/"]
869
+ )
classes.txt ADDED
@@ -0,0 +1,5 @@
 
 
 
 
 
 
1
+ Jaguar
2
+ Ocelot
3
+ Mountain Lion
4
+ Common Eland
5
+ Waterbuck
images.txt ADDED
@@ -0,0 +1,760 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ 92ef0bc6-21bc-11ea-a13a-137349068a90.jpg
2
+ 89e3a9c4-21bc-11ea-a13a-137349068a90.jpg
3
+ 902e0068-21bc-11ea-a13a-137349068a90.jpg
4
+ 905dcd34-21bc-11ea-a13a-137349068a90.jpg
5
+ 97db7e26-21bc-11ea-a13a-137349068a90.jpg
6
+ 8e762bce-21bc-11ea-a13a-137349068a90.jpg
7
+ 8bbbf896-21bc-11ea-a13a-137349068a90.jpg
8
+ 8caf22be-21bc-11ea-a13a-137349068a90.jpg
9
+ 8cdc1e40-21bc-11ea-a13a-137349068a90.jpg
10
+ 8fd37972-21bc-11ea-a13a-137349068a90.jpg
11
+ 8b4df88c-21bc-11ea-a13a-137349068a90.jpg
12
+ 94f2131e-21bc-11ea-a13a-137349068a90.jpg
13
+ 961066c4-21bc-11ea-a13a-137349068a90.jpg
14
+ 8af2dea2-21bc-11ea-a13a-137349068a90.jpg
15
+ 95918e8a-21bc-11ea-a13a-137349068a90.jpg
16
+ 94fa725c-21bc-11ea-a13a-137349068a90.jpg
17
+ 97516e5c-21bc-11ea-a13a-137349068a90.jpg
18
+ 95b45ef6-21bc-11ea-a13a-137349068a90.jpg
19
+ 901a6670-21bc-11ea-a13a-137349068a90.jpg
20
+ 9234907a-21bc-11ea-a13a-137349068a90.jpg
21
+ 8e7afcb2-21bc-11ea-a13a-137349068a90.jpg
22
+ 88246826-21bc-11ea-a13a-137349068a90.jpg
23
+ 8a118d76-21bc-11ea-a13a-137349068a90.jpg
24
+ 963cf568-21bc-11ea-a13a-137349068a90.jpg
25
+ 8eb30b2a-21bc-11ea-a13a-137349068a90.jpg
26
+ 99005e3e-21bc-11ea-a13a-137349068a90.jpg
27
+ 97c99b7a-21bc-11ea-a13a-137349068a90.jpg
28
+ 988d1cbc-21bc-11ea-a13a-137349068a90.jpg
29
+ 98cdb830-21bc-11ea-a13a-137349068a90.jpg
30
+ 93612cce-21bc-11ea-a13a-137349068a90.jpg
31
+ 957ee780-21bc-11ea-a13a-137349068a90.jpg
32
+ 95e2a7f2-21bc-11ea-a13a-137349068a90.jpg
33
+ 882c8ac4-21bc-11ea-a13a-137349068a90.jpg
34
+ 88e9fe88-21bc-11ea-a13a-137349068a90.jpg
35
+ 900084bc-21bc-11ea-a13a-137349068a90.jpg
36
+ 8c74aeae-21bc-11ea-a13a-137349068a90.jpg
37
+ 89dd9778-21bc-11ea-a13a-137349068a90.jpg
38
+ 8e718bfa-21bc-11ea-a13a-137349068a90.jpg
39
+ 8c0c156a-21bc-11ea-a13a-137349068a90.jpg
40
+ 97c2ccbe-21bc-11ea-a13a-137349068a90.jpg
41
+ 97691926-21bc-11ea-a13a-137349068a90.jpg
42
+ 9645fe7e-21bc-11ea-a13a-137349068a90.jpg
43
+ 914360a6-21bc-11ea-a13a-137349068a90.jpg
44
+ 98b0d620-21bc-11ea-a13a-137349068a90.jpg
45
+ 88a8ca80-21bc-11ea-a13a-137349068a90.jpg
46
+ 891bb6ee-21bc-11ea-a13a-137349068a90.jpg
47
+ 95a6ee06-21bc-11ea-a13a-137349068a90.jpg
48
+ 8f624ca2-21bc-11ea-a13a-137349068a90.jpg
49
+ 92c3cb6e-21bc-11ea-a13a-137349068a90.jpg
50
+ 89186d2c-21bc-11ea-a13a-137349068a90.jpg
51
+ 92372e0c-21bc-11ea-a13a-137349068a90.jpg
52
+ 95e2cdf4-21bc-11ea-a13a-137349068a90.jpg
53
+ 8723d0ba-21bc-11ea-a13a-137349068a90.jpg
54
+ 8fc2f8ae-21bc-11ea-a13a-137349068a90.jpg
55
+ 8f03fe22-21bc-11ea-a13a-137349068a90.jpg
56
+ 8c9dc488-21bc-11ea-a13a-137349068a90.jpg
57
+ 9947779c-21bc-11ea-a13a-137349068a90.jpg
58
+ 901cfa3e-21bc-11ea-a13a-137349068a90.jpg
59
+ 8e709f10-21bc-11ea-a13a-137349068a90.jpg
60
+ 8ec61f76-21bc-11ea-a13a-137349068a90.jpg
61
+ 92925f84-21bc-11ea-a13a-137349068a90.jpg
62
+ 88f685ea-21bc-11ea-a13a-137349068a90.jpg
63
+ 8bfc880c-21bc-11ea-a13a-137349068a90.jpg
64
+ 955d71c2-21bc-11ea-a13a-137349068a90.jpg
65
+ 893f269c-21bc-11ea-a13a-137349068a90.jpg
66
+ 8b7f19da-21bc-11ea-a13a-137349068a90.jpg
67
+ 89cac0d0-21bc-11ea-a13a-137349068a90.jpg
68
+ 988259ee-21bc-11ea-a13a-137349068a90.jpg
69
+ 884ee998-21bc-11ea-a13a-137349068a90.jpg
70
+ 962c9cd6-21bc-11ea-a13a-137349068a90.jpg
71
+ 8c74e450-21bc-11ea-a13a-137349068a90.jpg
72
+ 8b76fde0-21bc-11ea-a13a-137349068a90.jpg
73
+ 8e578f8e-21bc-11ea-a13a-137349068a90.jpg
74
+ 976870d4-21bc-11ea-a13a-137349068a90.jpg
75
+ 880aa594-21bc-11ea-a13a-137349068a90.jpg
76
+ 9168e538-21bc-11ea-a13a-137349068a90.jpg
77
+ 9671b8c0-21bc-11ea-a13a-137349068a90.jpg
78
+ 8f35d5d2-21bc-11ea-a13a-137349068a90.jpg
79
+ 979eeda8-21bc-11ea-a13a-137349068a90.jpg
80
+ 8e4f4d92-21bc-11ea-a13a-137349068a90.jpg
81
+ 889d1f96-21bc-11ea-a13a-137349068a90.jpg
82
+ 8f6181aa-21bc-11ea-a13a-137349068a90.jpg
83
+ 8e48d854-21bc-11ea-a13a-137349068a90.jpg
84
+ 98c7047c-21bc-11ea-a13a-137349068a90.jpg
85
+ 8b0f2f94-21bc-11ea-a13a-137349068a90.jpg
86
+ 95402a90-21bc-11ea-a13a-137349068a90.jpg
87
+ 8e54d988-21bc-11ea-a13a-137349068a90.jpg
88
+ 94e5c1e0-21bc-11ea-a13a-137349068a90.jpg
89
+ 98a7198c-21bc-11ea-a13a-137349068a90.jpg
90
+ 887fe5b6-21bc-11ea-a13a-137349068a90.jpg
91
+ 92d8631c-21bc-11ea-a13a-137349068a90.jpg
92
+ 8fb9642e-21bc-11ea-a13a-137349068a90.jpg
93
+ 8c966922-21bc-11ea-a13a-137349068a90.jpg
94
+ 97db2bba-21bc-11ea-a13a-137349068a90.jpg
95
+ 92115600-21bc-11ea-a13a-137349068a90.jpg
96
+ 870a8628-21bc-11ea-a13a-137349068a90.jpg
97
+ 8c44dbc0-21bc-11ea-a13a-137349068a90.jpg
98
+ 8fdeb1fc-21bc-11ea-a13a-137349068a90.jpg
99
+ 896c18b4-21bc-11ea-a13a-137349068a90.jpg
100
+ 92b88984-21bc-11ea-a13a-137349068a90.jpg
101
+ 8cd69d58-21bc-11ea-a13a-137349068a90.jpg
102
+ 899bafe8-21bc-11ea-a13a-137349068a90.jpg
103
+ 96d42e38-21bc-11ea-a13a-137349068a90.jpg
104
+ 94f4a94e-21bc-11ea-a13a-137349068a90.jpg
105
+ 987fb4e6-21bc-11ea-a13a-137349068a90.jpg
106
+ 8eb421f4-21bc-11ea-a13a-137349068a90.jpg
107
+ 8714a126-21bc-11ea-a13a-137349068a90.jpg
108
+ 8ad24c64-21bc-11ea-a13a-137349068a90.jpg
109
+ 98536d82-21bc-11ea-a13a-137349068a90.jpg
110
+ 8f4dd7f4-21bc-11ea-a13a-137349068a90.jpg
111
+ 8f88c6e8-21bc-11ea-a13a-137349068a90.jpg
112
+ 95ddfafe-21bc-11ea-a13a-137349068a90.jpg
113
+ 8aaabb04-21bc-11ea-a13a-137349068a90.jpg
114
+ 8768fa28-21bc-11ea-a13a-137349068a90.jpg
115
+ 9505e7fe-21bc-11ea-a13a-137349068a90.jpg
116
+ 8f337b16-21bc-11ea-a13a-137349068a90.jpg
117
+ 8c7ef620-21bc-11ea-a13a-137349068a90.jpg
118
+ 994443e2-21bc-11ea-a13a-137349068a90.jpg
119
+ 94de6ad0-21bc-11ea-a13a-137349068a90.jpg
120
+ 9259a4e6-21bc-11ea-a13a-137349068a90.jpg
121
+ 88618710-21bc-11ea-a13a-137349068a90.jpg
122
+ 8f6007b2-21bc-11ea-a13a-137349068a90.jpg
123
+ 8755e802-21bc-11ea-a13a-137349068a90.jpg
124
+ 91048bb0-21bc-11ea-a13a-137349068a90.jpg
125
+ 90d53f4a-21bc-11ea-a13a-137349068a90.jpg
126
+ 9676130c-21bc-11ea-a13a-137349068a90.jpg
127
+ 8f04020a-21bc-11ea-a13a-137349068a90.jpg
128
+ 8e1623d2-21bc-11ea-a13a-137349068a90.jpg
129
+ 9282f238-21bc-11ea-a13a-137349068a90.jpg
130
+ 9425e2d0-21bc-11ea-a13a-137349068a90.jpg
131
+ 8c7a304a-21bc-11ea-a13a-137349068a90.jpg
132
+ 87719fca-21bc-11ea-a13a-137349068a90.jpg
133
+ 8ac80718-21bc-11ea-a13a-137349068a90.jpg
134
+ 915bf364-21bc-11ea-a13a-137349068a90.jpg
135
+ 903d84b6-21bc-11ea-a13a-137349068a90.jpg
136
+ 89cd2032-21bc-11ea-a13a-137349068a90.jpg
137
+ 92c08256-21bc-11ea-a13a-137349068a90.jpg
138
+ 8927f940-21bc-11ea-a13a-137349068a90.jpg
139
+ 86a8986e-21bc-11ea-a13a-137349068a90.jpg
140
+ 8ec0ec86-21bc-11ea-a13a-137349068a90.jpg
141
+ 932646ae-21bc-11ea-a13a-137349068a90.jpg
142
+ 93022d64-21bc-11ea-a13a-137349068a90.jpg
143
+ 95cd1c0c-21bc-11ea-a13a-137349068a90.jpg
144
+ 89fdd63c-21bc-11ea-a13a-137349068a90.jpg
145
+ 8f54ca96-21bc-11ea-a13a-137349068a90.jpg
146
+ 91ee180c-21bc-11ea-a13a-137349068a90.jpg
147
+ 913902dc-21bc-11ea-a13a-137349068a90.jpg
148
+ 96f9710c-21bc-11ea-a13a-137349068a90.jpg
149
+ 8db95a1c-21bc-11ea-a13a-137349068a90.jpg
150
+ 8ea9a5ee-21bc-11ea-a13a-137349068a90.jpg
151
+ 9572f894-21bc-11ea-a13a-137349068a90.jpg
152
+ 945bcd28-21bc-11ea-a13a-137349068a90.jpg
153
+ 939c8e04-21bc-11ea-a13a-137349068a90.jpg
154
+ 94f031fc-21bc-11ea-a13a-137349068a90.jpg
155
+ 94fc0360-21bc-11ea-a13a-137349068a90.jpg
156
+ 8aa3916c-21bc-11ea-a13a-137349068a90.jpg
157
+ 8e55449a-21bc-11ea-a13a-137349068a90.jpg
158
+ 97eebcb6-21bc-11ea-a13a-137349068a90.jpg
159
+ 91306898-21bc-11ea-a13a-137349068a90.jpg
160
+ 9310e07a-21bc-11ea-a13a-137349068a90.jpg
161
+ 8f37cea0-21bc-11ea-a13a-137349068a90.jpg
162
+ 9897d968-21bc-11ea-a13a-137349068a90.jpg
163
+ 900ef934-21bc-11ea-a13a-137349068a90.jpg
164
+ 984f7f74-21bc-11ea-a13a-137349068a90.jpg
165
+ 938821a8-21bc-11ea-a13a-137349068a90.jpg
166
+ 8b675b9c-21bc-11ea-a13a-137349068a90.jpg
167
+ 983e85ac-21bc-11ea-a13a-137349068a90.jpg
168
+ 8a8653d6-21bc-11ea-a13a-137349068a90.jpg
169
+ 8a281dca-21bc-11ea-a13a-137349068a90.jpg
170
+ 90e6bc8e-21bc-11ea-a13a-137349068a90.jpg
171
+ 8d81c85e-21bc-11ea-a13a-137349068a90.jpg
172
+ 88dc2a42-21bc-11ea-a13a-137349068a90.jpg
173
+ 8fbda886-21bc-11ea-a13a-137349068a90.jpg
174
+ 94762ed4-21bc-11ea-a13a-137349068a90.jpg
175
+ 8b429622-21bc-11ea-a13a-137349068a90.jpg
176
+ 8793d05e-21bc-11ea-a13a-137349068a90.jpg
177
+ 970e59a0-21bc-11ea-a13a-137349068a90.jpg
178
+ 8ed32644-21bc-11ea-a13a-137349068a90.jpg
179
+ 8dcd169c-21bc-11ea-a13a-137349068a90.jpg
180
+ 8ccad720-21bc-11ea-a13a-137349068a90.jpg
181
+ 93059472-21bc-11ea-a13a-137349068a90.jpg
182
+ 86fd2f14-21bc-11ea-a13a-137349068a90.jpg
183
+ 8ca57868-21bc-11ea-a13a-137349068a90.jpg
184
+ 947e37aa-21bc-11ea-a13a-137349068a90.jpg
185
+ 8a153340-21bc-11ea-a13a-137349068a90.jpg
186
+ 8a3c998a-21bc-11ea-a13a-137349068a90.jpg
187
+ 94a73984-21bc-11ea-a13a-137349068a90.jpg
188
+ 8c02f6d8-21bc-11ea-a13a-137349068a90.jpg
189
+ 96c63df0-21bc-11ea-a13a-137349068a90.jpg
190
+ 8d488d46-21bc-11ea-a13a-137349068a90.jpg
191
+ 94cdc086-21bc-11ea-a13a-137349068a90.jpg
192
+ 98903a50-21bc-11ea-a13a-137349068a90.jpg
193
+ 8989d1ec-21bc-11ea-a13a-137349068a90.jpg
194
+ 986e1a92-21bc-11ea-a13a-137349068a90.jpg
195
+ 90952f90-21bc-11ea-a13a-137349068a90.jpg
196
+ 8fb4de7c-21bc-11ea-a13a-137349068a90.jpg
197
+ 86b2dc84-21bc-11ea-a13a-137349068a90.jpg
198
+ 8b62b47a-21bc-11ea-a13a-137349068a90.jpg
199
+ 904d7cb8-21bc-11ea-a13a-137349068a90.jpg
200
+ 8dd84666-21bc-11ea-a13a-137349068a90.jpg
201
+ 922827e0-21bc-11ea-a13a-137349068a90.jpg
202
+ 98cebe10-21bc-11ea-a13a-137349068a90.jpg
203
+ 8db334b6-21bc-11ea-a13a-137349068a90.jpg
204
+ 92ba6420-21bc-11ea-a13a-137349068a90.jpg
205
+ 8ba4dd00-21bc-11ea-a13a-137349068a90.jpg
206
+ 985eaf30-21bc-11ea-a13a-137349068a90.jpg
207
+ 91879b5e-21bc-11ea-a13a-137349068a90.jpg
208
+ 9490de78-21bc-11ea-a13a-137349068a90.jpg
209
+ 955a87b4-21bc-11ea-a13a-137349068a90.jpg
210
+ 8fff281a-21bc-11ea-a13a-137349068a90.jpg
211
+ 987469ba-21bc-11ea-a13a-137349068a90.jpg
212
+ 935c9556-21bc-11ea-a13a-137349068a90.jpg
213
+ 939904f0-21bc-11ea-a13a-137349068a90.jpg
214
+ 90e6ff5a-21bc-11ea-a13a-137349068a90.jpg
215
+ 9655cb4c-21bc-11ea-a13a-137349068a90.jpg
216
+ 96a7ba24-21bc-11ea-a13a-137349068a90.jpg
217
+ 91f32978-21bc-11ea-a13a-137349068a90.jpg
218
+ 93030e78-21bc-11ea-a13a-137349068a90.jpg
219
+ 90ee3298-21bc-11ea-a13a-137349068a90.jpg
220
+ 87555e3c-21bc-11ea-a13a-137349068a90.jpg
221
+ 8b73e6dc-21bc-11ea-a13a-137349068a90.jpg
222
+ 8c8d111a-21bc-11ea-a13a-137349068a90.jpg
223
+ 912864f4-21bc-11ea-a13a-137349068a90.jpg
224
+ 9440ebf2-21bc-11ea-a13a-137349068a90.jpg
225
+ 8baa0f82-21bc-11ea-a13a-137349068a90.jpg
226
+ 995a5b1e-21bc-11ea-a13a-137349068a90.jpg
227
+ 8de2124a-21bc-11ea-a13a-137349068a90.jpg
228
+ 8b1278c0-21bc-11ea-a13a-137349068a90.jpg
229
+ 9593279a-21bc-11ea-a13a-137349068a90.jpg
230
+ 8cb479c6-21bc-11ea-a13a-137349068a90.jpg
231
+ 91e532be-21bc-11ea-a13a-137349068a90.jpg
232
+ 872dde84-21bc-11ea-a13a-137349068a90.jpg
233
+ 92ccc5d4-21bc-11ea-a13a-137349068a90.jpg
234
+ 8eee2d90-21bc-11ea-a13a-137349068a90.jpg
235
+ 95791b84-21bc-11ea-a13a-137349068a90.jpg
236
+ 8a0c93ac-21bc-11ea-a13a-137349068a90.jpg
237
+ 8f2e8192-21bc-11ea-a13a-137349068a90.jpg
238
+ 92966b38-21bc-11ea-a13a-137349068a90.jpg
239
+ 8d4bb228-21bc-11ea-a13a-137349068a90.jpg
240
+ 8d58768e-21bc-11ea-a13a-137349068a90.jpg
241
+ 921fa57a-21bc-11ea-a13a-137349068a90.jpg
242
+ 9596196e-21bc-11ea-a13a-137349068a90.jpg
243
+ 8bf8695c-21bc-11ea-a13a-137349068a90.jpg
244
+ 927655aa-21bc-11ea-a13a-137349068a90.jpg
245
+ 978567c0-21bc-11ea-a13a-137349068a90.jpg
246
+ 8ea6cd2e-21bc-11ea-a13a-137349068a90.jpg
247
+ 90ec5b44-21bc-11ea-a13a-137349068a90.jpg
248
+ 8b14e98e-21bc-11ea-a13a-137349068a90.jpg
249
+ 994e7a56-21bc-11ea-a13a-137349068a90.jpg
250
+ 9116abf6-21bc-11ea-a13a-137349068a90.jpg
251
+ 86e7d970-21bc-11ea-a13a-137349068a90.jpg
252
+ 97a09f40-21bc-11ea-a13a-137349068a90.jpg
253
+ 909e791a-21bc-11ea-a13a-137349068a90.jpg
254
+ 9595cb1c-21bc-11ea-a13a-137349068a90.jpg
255
+ 8d13f5d6-21bc-11ea-a13a-137349068a90.jpg
256
+ 97edfd4e-21bc-11ea-a13a-137349068a90.jpg
257
+ 8b900cea-21bc-11ea-a13a-137349068a90.jpg
258
+ 90c68fcc-21bc-11ea-a13a-137349068a90.jpg
259
+ 92a5caa6-21bc-11ea-a13a-137349068a90.jpg
260
+ 8b7a1296-21bc-11ea-a13a-137349068a90.jpg
261
+ 9606b52a-21bc-11ea-a13a-137349068a90.jpg
262
+ 92cbeac4-21bc-11ea-a13a-137349068a90.jpg
263
+ 8ba6138c-21bc-11ea-a13a-137349068a90.jpg
264
+ 9602d57c-21bc-11ea-a13a-137349068a90.jpg
265
+ 8a08d82a-21bc-11ea-a13a-137349068a90.jpg
266
+ 994d5446-21bc-11ea-a13a-137349068a90.jpg
267
+ 8c6660a6-21bc-11ea-a13a-137349068a90.jpg
268
+ 89d8ff92-21bc-11ea-a13a-137349068a90.jpg
269
+ 8ce026c0-21bc-11ea-a13a-137349068a90.jpg
270
+ 936d4626-21bc-11ea-a13a-137349068a90.jpg
271
+ 8872bfd0-21bc-11ea-a13a-137349068a90.jpg
272
+ 86be34b2-21bc-11ea-a13a-137349068a90.jpg
273
+ 8f13e7d8-21bc-11ea-a13a-137349068a90.jpg
274
+ 92de335a-21bc-11ea-a13a-137349068a90.jpg
275
+ 8a913526-21bc-11ea-a13a-137349068a90.jpg
276
+ 89daf5ae-21bc-11ea-a13a-137349068a90.jpg
277
+ 9654b1ee-21bc-11ea-a13a-137349068a90.jpg
278
+ 8d69ee8c-21bc-11ea-a13a-137349068a90.jpg
279
+ 97a7f9b6-21bc-11ea-a13a-137349068a90.jpg
280
+ 8ff1d926-21bc-11ea-a13a-137349068a90.jpg
281
+ 86fcfce2-21bc-11ea-a13a-137349068a90.jpg
282
+ 94b5fe2e-21bc-11ea-a13a-137349068a90.jpg
283
+ 964a8674-21bc-11ea-a13a-137349068a90.jpg
284
+ 87902350-21bc-11ea-a13a-137349068a90.jpg
285
+ 9201b11e-21bc-11ea-a13a-137349068a90.jpg
286
+ 89ff5e1c-21bc-11ea-a13a-137349068a90.jpg
287
+ 98b23c72-21bc-11ea-a13a-137349068a90.jpg
288
+ 8bac23ee-21bc-11ea-a13a-137349068a90.jpg
289
+ 94eb2446-21bc-11ea-a13a-137349068a90.jpg
290
+ 8c34c690-21bc-11ea-a13a-137349068a90.jpg
291
+ 9941edf4-21bc-11ea-a13a-137349068a90.jpg
292
+ 94a7dd12-21bc-11ea-a13a-137349068a90.jpg
293
+ 877ec2a4-21bc-11ea-a13a-137349068a90.jpg
294
+ 8d463c30-21bc-11ea-a13a-137349068a90.jpg
295
+ 876c9ae8-21bc-11ea-a13a-137349068a90.jpg
296
+ 9367e2bc-21bc-11ea-a13a-137349068a90.jpg
297
+ 8b9c818c-21bc-11ea-a13a-137349068a90.jpg
298
+ 8b170480-21bc-11ea-a13a-137349068a90.jpg
299
+ 93725f4e-21bc-11ea-a13a-137349068a90.jpg
300
+ 91f60e7c-21bc-11ea-a13a-137349068a90.jpg
301
+ 89af181c-21bc-11ea-a13a-137349068a90.jpg
302
+ 8973c1cc-21bc-11ea-a13a-137349068a90.jpg
303
+ 8c65301e-21bc-11ea-a13a-137349068a90.jpg
304
+ 8e725c24-21bc-11ea-a13a-137349068a90.jpg
305
+ 92eaab58-21bc-11ea-a13a-137349068a90.jpg
306
+ 927b058c-21bc-11ea-a13a-137349068a90.jpg
307
+ 991be3e8-21bc-11ea-a13a-137349068a90.jpg
308
+ 8b52e888-21bc-11ea-a13a-137349068a90.jpg
309
+ 8830a10e-21bc-11ea-a13a-137349068a90.jpg
310
+ 8a0e3c3e-21bc-11ea-a13a-137349068a90.jpg
311
+ 95c02650-21bc-11ea-a13a-137349068a90.jpg
312
+ 874ec95a-21bc-11ea-a13a-137349068a90.jpg
313
+ 9756dc3e-21bc-11ea-a13a-137349068a90.jpg
314
+ 88e6abca-21bc-11ea-a13a-137349068a90.jpg
315
+ 8bb9d16a-21bc-11ea-a13a-137349068a90.jpg
316
+ 96a12254-21bc-11ea-a13a-137349068a90.jpg
317
+ 8eb82768-21bc-11ea-a13a-137349068a90.jpg
318
+ 9198480a-21bc-11ea-a13a-137349068a90.jpg
319
+ 8d32481a-21bc-11ea-a13a-137349068a90.jpg
320
+ 8eb6de76-21bc-11ea-a13a-137349068a90.jpg
321
+ 8ba01ae0-21bc-11ea-a13a-137349068a90.jpg
322
+ 9280e9c0-21bc-11ea-a13a-137349068a90.jpg
323
+ 8bf19758-21bc-11ea-a13a-137349068a90.jpg
324
+ 98412ffa-21bc-11ea-a13a-137349068a90.jpg
325
+ 92e4ea24-21bc-11ea-a13a-137349068a90.jpg
326
+ 86e298a2-21bc-11ea-a13a-137349068a90.jpg
327
+ 8bb0f4b4-21bc-11ea-a13a-137349068a90.jpg
328
+ 87e114c2-21bc-11ea-a13a-137349068a90.jpg
329
+ 976013d0-21bc-11ea-a13a-137349068a90.jpg
330
+ 97d06c16-21bc-11ea-a13a-137349068a90.jpg
331
+ 8aec7fc6-21bc-11ea-a13a-137349068a90.jpg
332
+ 94ef5908-21bc-11ea-a13a-137349068a90.jpg
333
+ 8d879b58-21bc-11ea-a13a-137349068a90.jpg
334
+ 8c40ce0e-21bc-11ea-a13a-137349068a90.jpg
335
+ 94a88fa0-21bc-11ea-a13a-137349068a90.jpg
336
+ 8c0b38ca-21bc-11ea-a13a-137349068a90.jpg
337
+ 8b642df0-21bc-11ea-a13a-137349068a90.jpg
338
+ 90b3e93a-21bc-11ea-a13a-137349068a90.jpg
339
+ 95002dc8-21bc-11ea-a13a-137349068a90.jpg
340
+ 8d6a4a3a-21bc-11ea-a13a-137349068a90.jpg
341
+ 8adec52a-21bc-11ea-a13a-137349068a90.jpg
342
+ 89806594-21bc-11ea-a13a-137349068a90.jpg
343
+ 87494994-21bc-11ea-a13a-137349068a90.jpg
344
+ 937e91e2-21bc-11ea-a13a-137349068a90.jpg
345
+ 8dbbaac4-21bc-11ea-a13a-137349068a90.jpg
346
+ 8decf43a-21bc-11ea-a13a-137349068a90.jpg
347
+ 8d0366c6-21bc-11ea-a13a-137349068a90.jpg
348
+ 9075385c-21bc-11ea-a13a-137349068a90.jpg
349
+ 976f9f94-21bc-11ea-a13a-137349068a90.jpg
350
+ 94f7e816-21bc-11ea-a13a-137349068a90.jpg
351
+ 87635910-21bc-11ea-a13a-137349068a90.jpg
352
+ 9667ff2e-21bc-11ea-a13a-137349068a90.jpg
353
+ 9632264c-21bc-11ea-a13a-137349068a90.jpg
354
+ 93e20a2e-21bc-11ea-a13a-137349068a90.jpg
355
+ 871eced0-21bc-11ea-a13a-137349068a90.jpg
356
+ 98fd5a04-21bc-11ea-a13a-137349068a90.jpg
357
+ 8cde3bf8-21bc-11ea-a13a-137349068a90.jpg
358
+ 8cef9d58-21bc-11ea-a13a-137349068a90.jpg
359
+ 916a34ec-21bc-11ea-a13a-137349068a90.jpg
360
+ 8707b3f8-21bc-11ea-a13a-137349068a90.jpg
361
+ 86e56adc-21bc-11ea-a13a-137349068a90.jpg
362
+ 86a05ae6-21bc-11ea-a13a-137349068a90.jpg
363
+ 8bf98d5a-21bc-11ea-a13a-137349068a90.jpg
364
+ 88235e18-21bc-11ea-a13a-137349068a90.jpg
365
+ 8a6295fe-21bc-11ea-a13a-137349068a90.jpg
366
+ 96af86f0-21bc-11ea-a13a-137349068a90.jpg
367
+ 970eab94-21bc-11ea-a13a-137349068a90.jpg
368
+ 95cb9508-21bc-11ea-a13a-137349068a90.jpg
369
+ 95208cda-21bc-11ea-a13a-137349068a90.jpg
370
+ 91836f52-21bc-11ea-a13a-137349068a90.jpg
371
+ 8e2d45a8-21bc-11ea-a13a-137349068a90.jpg
372
+ 8ae38ab0-21bc-11ea-a13a-137349068a90.jpg
373
+ 92bc2cec-21bc-11ea-a13a-137349068a90.jpg
374
+ 8a16c73c-21bc-11ea-a13a-137349068a90.jpg
375
+ 8950749c-21bc-11ea-a13a-137349068a90.jpg
376
+ 8bd9ea5e-21bc-11ea-a13a-137349068a90.jpg
377
+ 92860bf8-21bc-11ea-a13a-137349068a90.jpg
378
+ 967a3b6c-21bc-11ea-a13a-137349068a90.jpg
379
+ 904bff32-21bc-11ea-a13a-137349068a90.jpg
380
+ 8a48c908-21bc-11ea-a13a-137349068a90.jpg
381
+ 935214aa-21bc-11ea-a13a-137349068a90.jpg
382
+ 8f92b702-21bc-11ea-a13a-137349068a90.jpg
383
+ 878ef912-21bc-11ea-a13a-137349068a90.jpg
384
+ 8866a29a-21bc-11ea-a13a-137349068a90.jpg
385
+ 924f4d20-21bc-11ea-a13a-137349068a90.jpg
386
+ 9622ae74-21bc-11ea-a13a-137349068a90.jpg
387
+ 8a3ac0b0-21bc-11ea-a13a-137349068a90.jpg
388
+ 95d5d018-21bc-11ea-a13a-137349068a90.jpg
389
+ 98d34da4-21bc-11ea-a13a-137349068a90.jpg
390
+ 91d7ae50-21bc-11ea-a13a-137349068a90.jpg
391
+ 8caab198-21bc-11ea-a13a-137349068a90.jpg
392
+ 8ed45fa0-21bc-11ea-a13a-137349068a90.jpg
393
+ 8bafe3f8-21bc-11ea-a13a-137349068a90.jpg
394
+ 8f0acb4e-21bc-11ea-a13a-137349068a90.jpg
395
+ 97f96882-21bc-11ea-a13a-137349068a90.jpg
396
+ 92fadc80-21bc-11ea-a13a-137349068a90.jpg
397
+ 988d0268-21bc-11ea-a13a-137349068a90.jpg
398
+ 8c63c0bc-21bc-11ea-a13a-137349068a90.jpg
399
+ 983bd23a-21bc-11ea-a13a-137349068a90.jpg
400
+ 88351dba-21bc-11ea-a13a-137349068a90.jpg
401
+ 87dae25a-21bc-11ea-a13a-137349068a90.jpg
402
+ 8ecbb12a-21bc-11ea-a13a-137349068a90.jpg
403
+ 88319ee2-21bc-11ea-a13a-137349068a90.jpg
404
+ 87f58b5a-21bc-11ea-a13a-137349068a90.jpg
405
+ 8b918430-21bc-11ea-a13a-137349068a90.jpg
406
+ 8a44297a-21bc-11ea-a13a-137349068a90.jpg
407
+ 8e2c013e-21bc-11ea-a13a-137349068a90.jpg
408
+ 944e9ec8-21bc-11ea-a13a-137349068a90.jpg
409
+ 8a1aa3b6-21bc-11ea-a13a-137349068a90.jpg
410
+ 8bdeaf1c-21bc-11ea-a13a-137349068a90.jpg
411
+ 86e8be30-21bc-11ea-a13a-137349068a90.jpg
412
+ 91586e7e-21bc-11ea-a13a-137349068a90.jpg
413
+ 86b7f476-21bc-11ea-a13a-137349068a90.jpg
414
+ 8ff983ba-21bc-11ea-a13a-137349068a90.jpg
415
+ 991c9ab8-21bc-11ea-a13a-137349068a90.jpg
416
+ 871e514e-21bc-11ea-a13a-137349068a90.jpg
417
+ 8e5ec4ca-21bc-11ea-a13a-137349068a90.jpg
418
+ 87029490-21bc-11ea-a13a-137349068a90.jpg
419
+ 9391519c-21bc-11ea-a13a-137349068a90.jpg
420
+ 8b6583b2-21bc-11ea-a13a-137349068a90.jpg
421
+ 8f327360-21bc-11ea-a13a-137349068a90.jpg
422
+ 8e5f62fe-21bc-11ea-a13a-137349068a90.jpg
423
+ 961c559c-21bc-11ea-a13a-137349068a90.jpg
424
+ 91190068-21bc-11ea-a13a-137349068a90.jpg
425
+ 97252cb6-21bc-11ea-a13a-137349068a90.jpg
426
+ 906bfc92-21bc-11ea-a13a-137349068a90.jpg
427
+ 922d0896-21bc-11ea-a13a-137349068a90.jpg
428
+ 8a27f7fa-21bc-11ea-a13a-137349068a90.jpg
429
+ 8cc4a878-21bc-11ea-a13a-137349068a90.jpg
430
+ 9524ad06-21bc-11ea-a13a-137349068a90.jpg
431
+ 89dde732-21bc-11ea-a13a-137349068a90.jpg
432
+ 88589100-21bc-11ea-a13a-137349068a90.jpg
433
+ 90407c2a-21bc-11ea-a13a-137349068a90.jpg
434
+ 8c542b48-21bc-11ea-a13a-137349068a90.jpg
435
+ 8a0e8c16-21bc-11ea-a13a-137349068a90.jpg
436
+ 884341d8-21bc-11ea-a13a-137349068a90.jpg
437
+ 891d36d6-21bc-11ea-a13a-137349068a90.jpg
438
+ 87312a44-21bc-11ea-a13a-137349068a90.jpg
439
+ 8bb3e728-21bc-11ea-a13a-137349068a90.jpg
440
+ 8dff7146-21bc-11ea-a13a-137349068a90.jpg
441
+ 8b423326-21bc-11ea-a13a-137349068a90.jpg
442
+ 8a15ee02-21bc-11ea-a13a-137349068a90.jpg
443
+ 966510e8-21bc-11ea-a13a-137349068a90.jpg
444
+ 987cda82-21bc-11ea-a13a-137349068a90.jpg
445
+ 98f34280-21bc-11ea-a13a-137349068a90.jpg
446
+ 98d03254-21bc-11ea-a13a-137349068a90.jpg
447
+ 8b48a63e-21bc-11ea-a13a-137349068a90.jpg
448
+ 8a1bbf62-21bc-11ea-a13a-137349068a90.jpg
449
+ 8b6249ae-21bc-11ea-a13a-137349068a90.jpg
450
+ 95ef9a16-21bc-11ea-a13a-137349068a90.jpg
451
+ 9562cd34-21bc-11ea-a13a-137349068a90.jpg
452
+ 8781ff96-21bc-11ea-a13a-137349068a90.jpg
453
+ 8daa3c80-21bc-11ea-a13a-137349068a90.jpg
454
+ 90373386-21bc-11ea-a13a-137349068a90.jpg
455
+ 971dd452-21bc-11ea-a13a-137349068a90.jpg
456
+ 8c922632-21bc-11ea-a13a-137349068a90.jpg
457
+ 87e889e6-21bc-11ea-a13a-137349068a90.jpg
458
+ 9620981e-21bc-11ea-a13a-137349068a90.jpg
459
+ 88ef46b8-21bc-11ea-a13a-137349068a90.jpg
460
+ 93322262-21bc-11ea-a13a-137349068a90.jpg
461
+ 98ec7e96-21bc-11ea-a13a-137349068a90.jpg
462
+ 95279caa-21bc-11ea-a13a-137349068a90.jpg
463
+ 89fee054-21bc-11ea-a13a-137349068a90.jpg
464
+ 8e623eb6-21bc-11ea-a13a-137349068a90.jpg
465
+ 94fb5fa0-21bc-11ea-a13a-137349068a90.jpg
466
+ 917c3732-21bc-11ea-a13a-137349068a90.jpg
467
+ 916a0ff8-21bc-11ea-a13a-137349068a90.jpg
468
+ 8a1345a8-21bc-11ea-a13a-137349068a90.jpg
469
+ 8e8f7cdc-21bc-11ea-a13a-137349068a90.jpg
470
+ 9163f514-21bc-11ea-a13a-137349068a90.jpg
471
+ 8a695434-21bc-11ea-a13a-137349068a90.jpg
472
+ 97ece256-21bc-11ea-a13a-137349068a90.jpg
473
+ 8da40ee6-21bc-11ea-a13a-137349068a90.jpg
474
+ 910d03bc-21bc-11ea-a13a-137349068a90.jpg
475
+ 8fc9cf94-21bc-11ea-a13a-137349068a90.jpg
476
+ 8da05b98-21bc-11ea-a13a-137349068a90.jpg
477
+ 9773f530-21bc-11ea-a13a-137349068a90.jpg
478
+ 87dc6648-21bc-11ea-a13a-137349068a90.jpg
479
+ 8eb1ef42-21bc-11ea-a13a-137349068a90.jpg
480
+ 8a38ff82-21bc-11ea-a13a-137349068a90.jpg
481
+ 8bbeca8a-21bc-11ea-a13a-137349068a90.jpg
482
+ 8d81511c-21bc-11ea-a13a-137349068a90.jpg
483
+ 91a5e672-21bc-11ea-a13a-137349068a90.jpg
484
+ 8dde28ec-21bc-11ea-a13a-137349068a90.jpg
485
+ 92ab4738-21bc-11ea-a13a-137349068a90.jpg
486
+ 927deb62-21bc-11ea-a13a-137349068a90.jpg
487
+ 87cf5368-21bc-11ea-a13a-137349068a90.jpg
488
+ 987680e2-21bc-11ea-a13a-137349068a90.jpg
489
+ 8c72ca6c-21bc-11ea-a13a-137349068a90.jpg
490
+ 8bd5230c-21bc-11ea-a13a-137349068a90.jpg
491
+ 956e4592-21bc-11ea-a13a-137349068a90.jpg
492
+ 97c9b0ba-21bc-11ea-a13a-137349068a90.jpg
493
+ 8ee54d74-21bc-11ea-a13a-137349068a90.jpg
494
+ 929e4c36-21bc-11ea-a13a-137349068a90.jpg
495
+ 989c4e12-21bc-11ea-a13a-137349068a90.jpg
496
+ 93594f2c-21bc-11ea-a13a-137349068a90.jpg
497
+ 93788a9a-21bc-11ea-a13a-137349068a90.jpg
498
+ 92022022-21bc-11ea-a13a-137349068a90.jpg
499
+ 8b48d78a-21bc-11ea-a13a-137349068a90.jpg
500
+ 8c607ccc-21bc-11ea-a13a-137349068a90.jpg
501
+ 97ab86b2-21bc-11ea-a13a-137349068a90.jpg
502
+ 958cf26c-21bc-11ea-a13a-137349068a90.jpg
503
+ 987c3546-21bc-11ea-a13a-137349068a90.jpg
504
+ 8f4a2154-21bc-11ea-a13a-137349068a90.jpg
505
+ 8b8da3e2-21bc-11ea-a13a-137349068a90.jpg
506
+ 91c8c9a8-21bc-11ea-a13a-137349068a90.jpg
507
+ 954c9118-21bc-11ea-a13a-137349068a90.jpg
508
+ 89980104-21bc-11ea-a13a-137349068a90.jpg
509
+ 8e4ba818-21bc-11ea-a13a-137349068a90.jpg
510
+ 88141016-21bc-11ea-a13a-137349068a90.jpg
511
+ 8f4a05e8-21bc-11ea-a13a-137349068a90.jpg
512
+ 8f4b885a-21bc-11ea-a13a-137349068a90.jpg
513
+ 8c037734-21bc-11ea-a13a-137349068a90.jpg
514
+ 8bd5f0fc-21bc-11ea-a13a-137349068a90.jpg
515
+ 984e9140-21bc-11ea-a13a-137349068a90.jpg
516
+ 8cf33648-21bc-11ea-a13a-137349068a90.jpg
517
+ 8de3905c-21bc-11ea-a13a-137349068a90.jpg
518
+ 903e2bf0-21bc-11ea-a13a-137349068a90.jpg
519
+ 9042e10e-21bc-11ea-a13a-137349068a90.jpg
520
+ 919f5f6e-21bc-11ea-a13a-137349068a90.jpg
521
+ 8ce1c5ac-21bc-11ea-a13a-137349068a90.jpg
522
+ 895fad90-21bc-11ea-a13a-137349068a90.jpg
523
+ 98801fbc-21bc-11ea-a13a-137349068a90.jpg
524
+ 8984dbd8-21bc-11ea-a13a-137349068a90.jpg
525
+ 97ab23e8-21bc-11ea-a13a-137349068a90.jpg
526
+ 8af7822c-21bc-11ea-a13a-137349068a90.jpg
527
+ 94c998f8-21bc-11ea-a13a-137349068a90.jpg
528
+ 91b61e5c-21bc-11ea-a13a-137349068a90.jpg
529
+ 904b550a-21bc-11ea-a13a-137349068a90.jpg
530
+ 959b61f8-21bc-11ea-a13a-137349068a90.jpg
531
+ 8c58cc5c-21bc-11ea-a13a-137349068a90.jpg
532
+ 8da0797a-21bc-11ea-a13a-137349068a90.jpg
533
+ 87edaec6-21bc-11ea-a13a-137349068a90.jpg
534
+ 8e946cd8-21bc-11ea-a13a-137349068a90.jpg
535
+ 93c9719e-21bc-11ea-a13a-137349068a90.jpg
536
+ 94d099b4-21bc-11ea-a13a-137349068a90.jpg
537
+ 8f98d83a-21bc-11ea-a13a-137349068a90.jpg
538
+ 8a9d3d26-21bc-11ea-a13a-137349068a90.jpg
539
+ 987005fa-21bc-11ea-a13a-137349068a90.jpg
540
+ 91bea306-21bc-11ea-a13a-137349068a90.jpg
541
+ 8a31dad6-21bc-11ea-a13a-137349068a90.jpg
542
+ 8d3e1be0-21bc-11ea-a13a-137349068a90.jpg
543
+ 92ae2b6a-21bc-11ea-a13a-137349068a90.jpg
544
+ 8cf1d456-21bc-11ea-a13a-137349068a90.jpg
545
+ 8c642372-21bc-11ea-a13a-137349068a90.jpg
546
+ 92be33f2-21bc-11ea-a13a-137349068a90.jpg
547
+ 94bdc852-21bc-11ea-a13a-137349068a90.jpg
548
+ 949a1cae-21bc-11ea-a13a-137349068a90.jpg
549
+ 8ce0d746-21bc-11ea-a13a-137349068a90.jpg
550
+ 8b45b5f0-21bc-11ea-a13a-137349068a90.jpg
551
+ 972e206e-21bc-11ea-a13a-137349068a90.jpg
552
+ 8df6a0fc-21bc-11ea-a13a-137349068a90.jpg
553
+ 98ab2ed2-21bc-11ea-a13a-137349068a90.jpg
554
+ 88c8ad32-21bc-11ea-a13a-137349068a90.jpg
555
+ 93892706-21bc-11ea-a13a-137349068a90.jpg
556
+ 92e33e18-21bc-11ea-a13a-137349068a90.jpg
557
+ 8964575a-21bc-11ea-a13a-137349068a90.jpg
558
+ 8a5d6b1a-21bc-11ea-a13a-137349068a90.jpg
559
+ 9633711e-21bc-11ea-a13a-137349068a90.jpg
560
+ 90ce6f80-21bc-11ea-a13a-137349068a90.jpg
561
+ 93f10c0e-21bc-11ea-a13a-137349068a90.jpg
562
+ 943a0b98-21bc-11ea-a13a-137349068a90.jpg
563
+ 969b5856-21bc-11ea-a13a-137349068a90.jpg
564
+ 87adc11c-21bc-11ea-a13a-137349068a90.jpg
565
+ 88b6926e-21bc-11ea-a13a-137349068a90.jpg
566
+ 97d43e90-21bc-11ea-a13a-137349068a90.jpg
567
+ 91656714-21bc-11ea-a13a-137349068a90.jpg
568
+ 89bbd64c-21bc-11ea-a13a-137349068a90.jpg
569
+ 9042fb12-21bc-11ea-a13a-137349068a90.jpg
570
+ 86aea088-21bc-11ea-a13a-137349068a90.jpg
571
+ 87a0c58e-21bc-11ea-a13a-137349068a90.jpg
572
+ 91816bbc-21bc-11ea-a13a-137349068a90.jpg
573
+ 87922c04-21bc-11ea-a13a-137349068a90.jpg
574
+ 95c3c74c-21bc-11ea-a13a-137349068a90.jpg
575
+ 8965ef8e-21bc-11ea-a13a-137349068a90.jpg
576
+ 99448262-21bc-11ea-a13a-137349068a90.jpg
577
+ 96a3368e-21bc-11ea-a13a-137349068a90.jpg
578
+ 982c8744-21bc-11ea-a13a-137349068a90.jpg
579
+ 90b2f9da-21bc-11ea-a13a-137349068a90.jpg
580
+ 9892ae0c-21bc-11ea-a13a-137349068a90.jpg
581
+ 89c585a2-21bc-11ea-a13a-137349068a90.jpg
582
+ 8dbeb0e8-21bc-11ea-a13a-137349068a90.jpg
583
+ 978240a4-21bc-11ea-a13a-137349068a90.jpg
584
+ 8f0fb2ee-21bc-11ea-a13a-137349068a90.jpg
585
+ 8b87dd22-21bc-11ea-a13a-137349068a90.jpg
586
+ 891c7dea-21bc-11ea-a13a-137349068a90.jpg
587
+ 910c6984-21bc-11ea-a13a-137349068a90.jpg
588
+ 89c76f8e-21bc-11ea-a13a-137349068a90.jpg
589
+ 94eebdea-21bc-11ea-a13a-137349068a90.jpg
590
+ 938fe046-21bc-11ea-a13a-137349068a90.jpg
591
+ 984b4c2e-21bc-11ea-a13a-137349068a90.jpg
592
+ 8d7c0a36-21bc-11ea-a13a-137349068a90.jpg
593
+ 8a540b10-21bc-11ea-a13a-137349068a90.jpg
594
+ 925cca22-21bc-11ea-a13a-137349068a90.jpg
595
+ 8e596b56-21bc-11ea-a13a-137349068a90.jpg
596
+ 926b43b8-21bc-11ea-a13a-137349068a90.jpg
597
+ 8e140d0e-21bc-11ea-a13a-137349068a90.jpg
598
+ 8c4ed4b8-21bc-11ea-a13a-137349068a90.jpg
599
+ 86d3621a-21bc-11ea-a13a-137349068a90.jpg
600
+ 9461d326-21bc-11ea-a13a-137349068a90.jpg
601
+ 8c3daada-21bc-11ea-a13a-137349068a90.jpg
602
+ 93896b1c-21bc-11ea-a13a-137349068a90.jpg
603
+ 953cbe64-21bc-11ea-a13a-137349068a90.jpg
604
+ 9674042c-21bc-11ea-a13a-137349068a90.jpg
605
+ 94f0fd8a-21bc-11ea-a13a-137349068a90.jpg
606
+ 9322e928-21bc-11ea-a13a-137349068a90.jpg
607
+ 8a021300-21bc-11ea-a13a-137349068a90.jpg
608
+ 937b2a02-21bc-11ea-a13a-137349068a90.jpg
609
+ 924fb60c-21bc-11ea-a13a-137349068a90.jpg
610
+ 8d57a222-21bc-11ea-a13a-137349068a90.jpg
611
+ 92121edc-21bc-11ea-a13a-137349068a90.jpg
612
+ 90707be6-21bc-11ea-a13a-137349068a90.jpg
613
+ 86e9bfec-21bc-11ea-a13a-137349068a90.jpg
614
+ 8f863ac2-21bc-11ea-a13a-137349068a90.jpg
615
+ 91eac648-21bc-11ea-a13a-137349068a90.jpg
616
+ 8ceff7b2-21bc-11ea-a13a-137349068a90.jpg
617
+ 8690bfe6-21bc-11ea-a13a-137349068a90.jpg
618
+ 8afc2688-21bc-11ea-a13a-137349068a90.jpg
619
+ 8a363d06-21bc-11ea-a13a-137349068a90.jpg
620
+ 968cdac4-21bc-11ea-a13a-137349068a90.jpg
621
+ 95ab77e6-21bc-11ea-a13a-137349068a90.jpg
622
+ 8edea80c-21bc-11ea-a13a-137349068a90.jpg
623
+ 8e3c6db2-21bc-11ea-a13a-137349068a90.jpg
624
+ 8e94f608-21bc-11ea-a13a-137349068a90.jpg
625
+ 960c1a38-21bc-11ea-a13a-137349068a90.jpg
626
+ 944ffe94-21bc-11ea-a13a-137349068a90.jpg
627
+ 8ae6e066-21bc-11ea-a13a-137349068a90.jpg
628
+ 9814fcf0-21bc-11ea-a13a-137349068a90.jpg
629
+ 8f263aa0-21bc-11ea-a13a-137349068a90.jpg
630
+ 949d098c-21bc-11ea-a13a-137349068a90.jpg
631
+ 8d76206c-21bc-11ea-a13a-137349068a90.jpg
632
+ 88e4a06e-21bc-11ea-a13a-137349068a90.jpg
633
+ 8b4426f4-21bc-11ea-a13a-137349068a90.jpg
634
+ 868fe83c-21bc-11ea-a13a-137349068a90.jpg
635
+ 880d9c54-21bc-11ea-a13a-137349068a90.jpg
636
+ 9421c7c2-21bc-11ea-a13a-137349068a90.jpg
637
+ 8731c774-21bc-11ea-a13a-137349068a90.jpg
638
+ 8c0f47a8-21bc-11ea-a13a-137349068a90.jpg
639
+ 936d1ef8-21bc-11ea-a13a-137349068a90.jpg
640
+ 8ace3228-21bc-11ea-a13a-137349068a90.jpg
641
+ 950ccbc8-21bc-11ea-a13a-137349068a90.jpg
642
+ 8c20758c-21bc-11ea-a13a-137349068a90.jpg
643
+ 897d6074-21bc-11ea-a13a-137349068a90.jpg
644
+ 8f14c766-21bc-11ea-a13a-137349068a90.jpg
645
+ 8bd8abd0-21bc-11ea-a13a-137349068a90.jpg
646
+ 8be96704-21bc-11ea-a13a-137349068a90.jpg
647
+ 930240f6-21bc-11ea-a13a-137349068a90.jpg
648
+ 8d45a612-21bc-11ea-a13a-137349068a90.jpg
649
+ 89493286-21bc-11ea-a13a-137349068a90.jpg
650
+ 98757922-21bc-11ea-a13a-137349068a90.jpg
651
+ 8af6ef60-21bc-11ea-a13a-137349068a90.jpg
652
+ 8dcac25c-21bc-11ea-a13a-137349068a90.jpg
653
+ 8bed4e46-21bc-11ea-a13a-137349068a90.jpg
654
+ 98893c50-21bc-11ea-a13a-137349068a90.jpg
655
+ 88a9ca5c-21bc-11ea-a13a-137349068a90.jpg
656
+ 9107a958-21bc-11ea-a13a-137349068a90.jpg
657
+ 8dfd1900-21bc-11ea-a13a-137349068a90.jpg
658
+ 99032b50-21bc-11ea-a13a-137349068a90.jpg
659
+ 8f7922e2-21bc-11ea-a13a-137349068a90.jpg
660
+ 8a3e57b6-21bc-11ea-a13a-137349068a90.jpg
661
+ 90692de6-21bc-11ea-a13a-137349068a90.jpg
662
+ 894361bc-21bc-11ea-a13a-137349068a90.jpg
663
+ 88164d04-21bc-11ea-a13a-137349068a90.jpg
664
+ 92faf08a-21bc-11ea-a13a-137349068a90.jpg
665
+ 8db2514a-21bc-11ea-a13a-137349068a90.jpg
666
+ 8f3639f0-21bc-11ea-a13a-137349068a90.jpg
667
+ 97646bc4-21bc-11ea-a13a-137349068a90.jpg
668
+ 8d563f90-21bc-11ea-a13a-137349068a90.jpg
669
+ 8fb0f37a-21bc-11ea-a13a-137349068a90.jpg
670
+ 8b14f9ec-21bc-11ea-a13a-137349068a90.jpg
671
+ 929fbbfc-21bc-11ea-a13a-137349068a90.jpg
672
+ 8da02484-21bc-11ea-a13a-137349068a90.jpg
673
+ 89b2d3a8-21bc-11ea-a13a-137349068a90.jpg
674
+ 8c7b78ce-21bc-11ea-a13a-137349068a90.jpg
675
+ 8eb908ae-21bc-11ea-a13a-137349068a90.jpg
676
+ 86fb48e8-21bc-11ea-a13a-137349068a90.jpg
677
+ 988cf304-21bc-11ea-a13a-137349068a90.jpg
678
+ 962ecf56-21bc-11ea-a13a-137349068a90.jpg
679
+ 8efd21d8-21bc-11ea-a13a-137349068a90.jpg
680
+ 8b1245d0-21bc-11ea-a13a-137349068a90.jpg
681
+ 8f537dda-21bc-11ea-a13a-137349068a90.jpg
682
+ 8919a6ba-21bc-11ea-a13a-137349068a90.jpg
683
+ 8e033574-21bc-11ea-a13a-137349068a90.jpg
684
+ 92913136-21bc-11ea-a13a-137349068a90.jpg
685
+ 8fd2863e-21bc-11ea-a13a-137349068a90.jpg
686
+ 8ffaeb74-21bc-11ea-a13a-137349068a90.jpg
687
+ 9524de8e-21bc-11ea-a13a-137349068a90.jpg
688
+ 94af2e8c-21bc-11ea-a13a-137349068a90.jpg
689
+ 9631ed9e-21bc-11ea-a13a-137349068a90.jpg
690
+ 8b1d5092-21bc-11ea-a13a-137349068a90.jpg
691
+ 9594f322-21bc-11ea-a13a-137349068a90.jpg
692
+ 9420c2c8-21bc-11ea-a13a-137349068a90.jpg
693
+ 8a554804-21bc-11ea-a13a-137349068a90.jpg
694
+ 8d5b86da-21bc-11ea-a13a-137349068a90.jpg
695
+ 98d92792-21bc-11ea-a13a-137349068a90.jpg
696
+ 95aaec4a-21bc-11ea-a13a-137349068a90.jpg
697
+ 941578fa-21bc-11ea-a13a-137349068a90.jpg
698
+ 948f701a-21bc-11ea-a13a-137349068a90.jpg
699
+ 86ac4964-21bc-11ea-a13a-137349068a90.jpg
700
+ 8bf4f0a6-21bc-11ea-a13a-137349068a90.jpg
701
+ 9331a31e-21bc-11ea-a13a-137349068a90.jpg
702
+ 8c392820-21bc-11ea-a13a-137349068a90.jpg
703
+ 93589a82-21bc-11ea-a13a-137349068a90.jpg
704
+ 9007eba8-21bc-11ea-a13a-137349068a90.jpg
705
+ 9868dcbc-21bc-11ea-a13a-137349068a90.jpg
706
+ 88612ad6-21bc-11ea-a13a-137349068a90.jpg
707
+ 95f78456-21bc-11ea-a13a-137349068a90.jpg
708
+ 8c417fc0-21bc-11ea-a13a-137349068a90.jpg
709
+ 8f162d0e-21bc-11ea-a13a-137349068a90.jpg
710
+ 87e4c234-21bc-11ea-a13a-137349068a90.jpg
711
+ 91ca3a22-21bc-11ea-a13a-137349068a90.jpg
712
+ 9817764c-21bc-11ea-a13a-137349068a90.jpg
713
+ 871690d0-21bc-11ea-a13a-137349068a90.jpg
714
+ 8a97ddae-21bc-11ea-a13a-137349068a90.jpg
715
+ 94265936-21bc-11ea-a13a-137349068a90.jpg
716
+ 96692750-21bc-11ea-a13a-137349068a90.jpg
717
+ 8e9beada-21bc-11ea-a13a-137349068a90.jpg
718
+ 885b11f0-21bc-11ea-a13a-137349068a90.jpg
719
+ 955028f0-21bc-11ea-a13a-137349068a90.jpg
720
+ 94de77a0-21bc-11ea-a13a-137349068a90.jpg
721
+ 90eb12fc-21bc-11ea-a13a-137349068a90.jpg
722
+ 987d3f22-21bc-11ea-a13a-137349068a90.jpg
723
+ 946b223c-21bc-11ea-a13a-137349068a90.jpg
724
+ 8bcb679a-21bc-11ea-a13a-137349068a90.jpg
725
+ 97293572-21bc-11ea-a13a-137349068a90.jpg
726
+ 94e0f7aa-21bc-11ea-a13a-137349068a90.jpg
727
+ 947d4a7a-21bc-11ea-a13a-137349068a90.jpg
728
+ 88180144-21bc-11ea-a13a-137349068a90.jpg
729
+ 97b9ce70-21bc-11ea-a13a-137349068a90.jpg
730
+ 977accfc-21bc-11ea-a13a-137349068a90.jpg
731
+ 8c79aa08-21bc-11ea-a13a-137349068a90.jpg
732
+ 8f1e9200-21bc-11ea-a13a-137349068a90.jpg
733
+ 87b13586-21bc-11ea-a13a-137349068a90.jpg
734
+ 938e08e8-21bc-11ea-a13a-137349068a90.jpg
735
+ 8ffb4934-21bc-11ea-a13a-137349068a90.jpg
736
+ 8d5d2bfc-21bc-11ea-a13a-137349068a90.jpg
737
+ 903be9da-21bc-11ea-a13a-137349068a90.jpg
738
+ 8e0facfa-21bc-11ea-a13a-137349068a90.jpg
739
+ 94bb8614-21bc-11ea-a13a-137349068a90.jpg
740
+ 95232314-21bc-11ea-a13a-137349068a90.jpg
741
+ 8b4de86a-21bc-11ea-a13a-137349068a90.jpg
742
+ 8a289d18-21bc-11ea-a13a-137349068a90.jpg
743
+ 8d197b78-21bc-11ea-a13a-137349068a90.jpg
744
+ 974931c4-21bc-11ea-a13a-137349068a90.jpg
745
+ 90989338-21bc-11ea-a13a-137349068a90.jpg
746
+ 87e1112a-21bc-11ea-a13a-137349068a90.jpg
747
+ 8887134a-21bc-11ea-a13a-137349068a90.jpg
748
+ 9386f1e8-21bc-11ea-a13a-137349068a90.jpg
749
+ 86d76b30-21bc-11ea-a13a-137349068a90.jpg
750
+ 96cd5cde-21bc-11ea-a13a-137349068a90.jpg
751
+ 8d507a7e-21bc-11ea-a13a-137349068a90.jpg
752
+ 94aace78-21bc-11ea-a13a-137349068a90.jpg
753
+ 90643818-21bc-11ea-a13a-137349068a90.jpg
754
+ 91234ff0-21bc-11ea-a13a-137349068a90.jpg
755
+ 9790d830-21bc-11ea-a13a-137349068a90.jpg
756
+ 88f56c00-21bc-11ea-a13a-137349068a90.jpg
757
+ 91518442-21bc-11ea-a13a-137349068a90.jpg
758
+ 96a1506c-21bc-11ea-a13a-137349068a90.jpg
759
+ 90169662-21bc-11ea-a13a-137349068a90.jpg
760
+ 896bb248-21bc-11ea-a13a-137349068a90.jpg
iwildcam_demo.pt ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:54b808c02fa7f6d6429682c55c8945ef2338607841ce4551a22253b8bc8778aa
3
+ size 47187
iwildcam_demo_annotations.json ADDED
The diff for this file is too large to render. See raw diff
 
iwildcam_demo_labels.pt ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:ab9fc383afd63aeacbccddf88a3f8c85ea8157c35b0b0e32d66a8d9a7054a5e4
3
+ size 7748
models.txt ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ google/siglip2-so400m-patch16-naflex
2
+ openai/clip-vit-large-patch14
3
+ imageomics/bioclip
requirements.txt ADDED
@@ -0,0 +1,8 @@
 
 
 
 
 
 
 
 
 
1
+ gradio>=4.0.0
2
+ torch>=1.9.0
3
+ torchvision>=0.10.0
4
+ Pillow>=8.0.0
5
+ numpy>=1.21.0
6
+ matplotlib>=3.5.0
7
+ tqdm>=4.62.0
8
+ git+https://github.com/justinkay/coda.git