-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathlesson_14.html
More file actions
931 lines (897 loc) · 165 KB
/
Copy pathlesson_14.html
File metadata and controls
931 lines (897 loc) · 165 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
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8"><meta name="viewport" content="width=device-width,initial-scale=1.0">
<title>Lesson 14: Python While Loops, For Loops, and the range() Function — Techbase Python</title>
<link rel="preconnect" href="https://fonts.googleapis.com"><link rel="preconnect" href="https://fonts.gstatic.com" crossorigin><link href="https://fonts.googleapis.com/css2?family=Plus+Jakarta+Sans:wght@400;500;600;700;800&family=Space+Grotesk:wght@400;500;600;700&family=JetBrains+Mono:wght@400;500&display=swap" rel="stylesheet"><style>
:root{--acc:#059669;--acd:#047857;--acp:#ecfdf5;--acb:rgba(5,150,105,.22);--acs:rgba(5,150,105,.28);
--bg:#f8fafc;--sf:#fff;--br:#e2e8f0;--tx:#0f172a;--t2:#334155;--mu:#64748b;
--D:'Space Grotesk',sans-serif;--B:'Plus Jakarta Sans',sans-serif;--M:'JetBrains Mono',monospace}
*,*::before,*::after{box-sizing:border-box;margin:0;padding:0}
html{scroll-behavior:smooth;-webkit-font-smoothing:antialiased}
body{background:var(--bg);color:var(--tx);font-family:var(--B);font-size:18px;line-height:1.8;overflow-x:hidden}
/* NAV */
.l-nav{position:fixed;top:0;left:0;right:0;z-index:200;background:rgba(255,255,255,.97);
backdrop-filter:blur(14px);border-bottom:1px solid var(--br);height:64px;
display:flex;align-items:center;padding:0 1.5rem;justify-content:space-between;
box-shadow:0 1px 8px rgba(0,0,0,.06)}
.nav-logo-wrap{display:flex;align-items:center;gap:.75rem;text-decoration:none}
.nav-logo-img{height:44px;width:auto;display:block;object-fit:contain}
.nav-logo-text{font-family:var(--D);font-weight:700;font-size:.95rem;color:var(--tx);
display:flex;flex-direction:column;line-height:1.2}
.nav-logo-text span.course-lbl{font-size:.65rem;font-weight:600;color:var(--acc);
text-transform:uppercase;letter-spacing:.1em}
.l-nav-back{font-size:.85rem;color:var(--mu);text-decoration:none;font-weight:600;
display:flex;align-items:center;gap:.3rem;transition:color .2s;padding:.4rem .8rem;
border-radius:8px;border:1.5px solid var(--br)}
.l-nav-back:hover{color:var(--acc);border-color:var(--acb)}
.l-nav-lbl{font-family:var(--M);font-size:.72rem;color:var(--mu)}
/* PROGRESS */
.pw{position:fixed;top:64px;left:0;right:0;z-index:199;height:4px;background:var(--br)}
.pb{height:100%;background:linear-gradient(90deg,var(--acc),var(--acd));
transition:width .5s cubic-bezier(.4,0,.2,1);width:0%;position:relative}
.pb::after{content:'';position:absolute;right:0;top:0;bottom:0;width:24px;
background:inherit;filter:brightness(1.4);animation:pg 1.5s ease-in-out infinite}
@keyframes pg{0%,100%{opacity:1}50%{opacity:.35}}
/* HERO */
.l-hero{padding:88px 1.5rem 2.5rem;background:linear-gradient(160deg,#ecfdf5 0%,#f8fafc 55%,#d1fae5 100%);border-bottom:1px solid var(--br)}
.l-hero-in{max-width:880px;margin:0 auto;display:flex;align-items:flex-start;gap:2rem;flex-wrap:wrap}
.l-hero-logo{flex-shrink:0}
.l-hero-logo img{height:80px;width:auto;opacity:.92}
.l-hero-text{flex:1}
.badge{display:inline-flex;align-items:center;border-radius:100px;padding:.25rem 1rem;
font-family:var(--M);font-size:.68rem;letter-spacing:.08em;text-transform:uppercase;
font-weight:700;color:var(--acc);background:var(--acp);
border:1.5px solid var(--acb);margin-bottom:.9rem}
.l-hero h1{font-family:var(--D);font-weight:700;font-size:clamp(1.6rem,4vw,2.4rem);
letter-spacing:-.02em;line-height:1.15;margin-bottom:.5rem}
.l-hero-sub{font-size:1rem;color:var(--mu)}
/* WELCOME BOX */
.wb{background:#fff;border:1.5px solid var(--acb);border-left:5px solid var(--acc);
border-radius:14px;padding:1.5rem 1.8rem;max-width:880px;margin:1.5rem auto 0;
box-shadow:0 2px 14px var(--acs)}
.wb h2{font-family:var(--D);font-weight:700;font-size:1.1rem;color:var(--acd);
margin-bottom:.65rem;display:flex;align-items:center;gap:.45rem}
.wb p,.wb li{font-size:1rem;line-height:1.85;color:var(--t2)}
.wb ul{margin-left:1.3rem;margin-top:.4rem}
.wm{display:flex;gap:.65rem;margin-top:1rem;flex-wrap:wrap}
.wm span{background:var(--acp);color:var(--acd);border:1px solid var(--acb);
border-radius:7px;padding:.25rem .8rem;font-family:var(--M);font-size:.72rem;font-weight:600}
/* PHASE */
.phase{background:var(--sf);border:1.5px solid var(--br);border-radius:16px;
margin-bottom:1.6rem;overflow:hidden;
transition:opacity .35s,filter .35s,transform .35s;
box-shadow:0 2px 10px rgba(0,0,0,.04)}
.phase.locked{opacity:.28;pointer-events:none;filter:blur(2px);transform:scale(.99)}
.ph{padding:1.1rem 1.5rem;background:#f0fdf6;border-bottom:1px solid var(--br);
display:flex;align-items:center;gap:.9rem}
.pn{font-family:var(--M);font-size:.68rem;font-weight:700;letter-spacing:.1em;
text-transform:uppercase;color:var(--acc);white-space:nowrap}
.pt{font-family:var(--D);font-weight:700;font-size:1rem;color:var(--tx);flex:1}
.pc{width:28px;height:28px;border-radius:50%;background:var(--br);flex-shrink:0;
display:flex;align-items:center;justify-content:center;font-size:.85rem;
transition:background .3s,transform .45s}
.pc.done{background:#10b981;color:#fff;transform:scale(1.15) rotate(360deg)}
.pb2{padding:1.8rem 2rem}
/* RICH CONTENT */
.v2-p{margin-bottom:1.1rem;font-size:1rem;color:var(--t2);line-height:1.88}
.v2-h3{font-family:var(--D);font-weight:700;font-size:1.1rem;color:var(--tx);
margin:1.7rem 0 .6rem;border-top:2px solid var(--acp);padding-top:.45rem}
.v2-h4{font-family:var(--D);font-weight:600;font-size:1rem;color:var(--t2);margin:1.1rem 0 .4rem}
.v2-h5,.v2-h6{font-family:var(--D);font-weight:600;font-size:.95rem;color:var(--mu);margin:.8rem 0 .35rem}
.v2-ul,.v2-ol{margin:.65rem 0 1.1rem 1.5rem;font-size:1rem;color:var(--t2);line-height:1.9}
.v2-ul li,.v2-ol li{margin-bottom:.35rem}
.v2-bq{border-left:4px solid var(--acc);background:var(--acp);border-radius:0 12px 12px 0;
padding:1rem 1.3rem;margin:1.1rem 0;font-size:1rem;color:#064e3b;font-style:italic}
.v2-bq p{margin:0;color:inherit}
.v2-hr{border:none;border-top:1px solid var(--br);margin:1.3rem 0}
.v2-table-wrap{overflow-x:auto;margin:1.1rem 0;border-radius:10px;border:1px solid var(--br)}
.v2-table{width:100%;border-collapse:collapse;font-size:.95rem}
.v2-table th{background:var(--acp);color:#064e3b;font-family:var(--D);font-weight:700;
padding:11px 14px;text-align:left;border-bottom:2px solid var(--acb)}
.v2-table td{padding:9px 14px;border-bottom:1px solid var(--br);color:var(--t2);vertical-align:top}
.v2-table tr:last-child td{border:none}
.v2-table tr:hover td{background:var(--acp)}
.pb2 code{background:var(--acp);color:var(--acd);border-radius:5px;padding:2px 7px;
font-family:var(--M);font-size:.85em}
.pb2 a{color:var(--acc);text-decoration:underline;text-underline-offset:2px}
.pb2 strong{color:var(--tx)}
/* CODE BLOCKS */
.v2-code-wrap{margin:1.3rem 0;border-radius:12px;overflow:hidden;
border:1px solid #1e293b;box-shadow:0 5px 20px rgba(0,0,0,.2)}
.v2-code-bar{background:#1e293b;padding:.6rem 1.1rem;display:flex;align-items:center;gap:.4rem}
.v2-dot{width:11px;height:11px;border-radius:50%}
.v2-dot.r{background:#ff5f57}.v2-dot.y{background:#febc2e}.v2-dot.g{background:#28c840}
.v2-code-lang{margin-left:.5rem;font-family:var(--M);font-size:.65rem;color:#64748b;
text-transform:uppercase;letter-spacing:.08em;flex:1}
.copy-btn{background:rgba(255,255,255,.08);color:#94a3b8;border:none;border-radius:6px;
padding:.28rem .7rem;font-family:var(--M);font-size:.68rem;cursor:pointer;
transition:background .2s,color .2s}
.copy-btn:hover{background:rgba(255,255,255,.2);color:#fff}
.copy-btn.copied{background:#10b981;color:#fff}
.v2-code-body{background:#0f172a;padding:1.4rem 1.6rem;overflow-x:auto}
.v2-code-body pre{margin:0}
.v2-code-body code{font-family:var(--M);font-size:.85rem;line-height:2;
color:#e2e8f0;white-space:pre;background:transparent;padding:0;border-radius:0}
/* TASK BOX */
.task-box{background:#d1fae5;border:2px dashed #059669;border-radius:12px;
padding:1.2rem 1.4rem;margin:1.5rem 0}
.task-lbl{font-family:var(--M);font-size:.68rem;font-weight:700;letter-spacing:.1em;
text-transform:uppercase;color:#064e3b;margin-bottom:.55rem;display:flex;align-items:center;gap:.4rem}
.task-body{font-size:1rem;color:#064e3b;line-height:1.85}
.task-body code{background:rgba(0,0,0,.1);border-radius:4px;padding:2px 7px;
font-family:var(--M);font-size:.85em}
/* EXERCISE / CHALLENGE */
.chal-box{background:linear-gradient(135deg,#ecfdf5 0%,#fff 100%);
border:2px solid var(--acc);border-radius:14px;padding:1.3rem 1.5rem;margin-bottom:1.2rem}
.chal-lbl{font-family:var(--M);font-size:.68rem;font-weight:700;letter-spacing:.1em;
text-transform:uppercase;color:var(--acd);margin-bottom:.65rem}
.chal-body{font-size:1rem;color:var(--tx);line-height:1.85}
.chal-body code{background:var(--acp);color:var(--acd);border-radius:4px;
padding:2px 6px;font-family:var(--M);font-size:.85em}
.reveal-btn{display:inline-flex;align-items:center;gap:.5rem;background:transparent;
color:var(--acd);font-family:var(--D);font-weight:700;font-size:.9rem;
padding:.65rem 1.3rem;border-radius:9px;border:2px solid var(--acc);cursor:pointer;
transition:background .2s,color .2s;margin:.65rem 0}
.reveal-btn:hover{background:var(--acc);color:#fff}
.reveal-content{display:none;margin-top:.65rem;animation:fi .3s ease}
.reveal-content.open{display:block}
@keyframes fi{from{opacity:0;transform:translateY(-6px)}to{opacity:1;transform:none}}
/* BUILD IT */
.build-box{background:#f0fdf4;border:2px solid #16a34a;border-radius:16px;
padding:1.8rem;margin:2rem 0;display:none}
.build-box.visible{display:block;animation:fi .4s ease}
.build-lbl{font-family:var(--M);font-size:.68rem;font-weight:700;letter-spacing:.1em;
text-transform:uppercase;color:#15803d;margin-bottom:.5rem}
.build-name{font-family:var(--D);font-weight:700;font-size:1.2rem;color:#14532d;margin-bottom:.7rem}
.build-req{font-size:1rem;color:#166534;line-height:1.85;margin-bottom:.9rem}
.build-req code{background:rgba(22,163,74,.12);border-radius:4px;
padding:2px 7px;font-family:var(--M);font-size:.85em}
.build-req strong{color:#14532d}
/* GITHUB */
.gh-acc{border:1.5px solid var(--br);border-radius:12px;overflow:hidden;margin:1.5rem 0}
.gh-hd{padding:1.1rem 1.3rem;background:#f8fafc;cursor:pointer;
display:flex;align-items:center;justify-content:space-between;
font-family:var(--D);font-weight:600;font-size:.95rem;user-select:none;transition:background .2s}
.gh-hd:hover{background:#f1f5f9}
.gh-bd{display:none;padding:1.3rem;border-top:1px solid var(--br)}
.gh-bd.open{display:block;animation:fi .25s ease}
.gh-st{display:flex;gap:.9rem;margin-bottom:1.1rem;align-items:flex-start}
.gh-n{width:28px;height:28px;border-radius:50%;background:var(--acc);color:#fff;
font-family:var(--D);font-weight:700;font-size:.78rem;
display:flex;align-items:center;justify-content:center;flex-shrink:0;margin-top:3px}
.gh-st p{font-size:.95rem;color:var(--t2);line-height:1.75}
.gh-st code{background:var(--acp);color:var(--acd);border-radius:4px;
padding:2px 7px;font-family:var(--M);font-size:.85em}
.gh-nop{background:#fef3c7;border:1.5px solid #fde68a;border-radius:10px;
padding:1.1rem 1.3rem;font-size:.95rem;color:#78350f;line-height:1.8;margin-bottom:1.1rem}
/* SESSION END */
.se{background:linear-gradient(135deg,var(--acc),var(--acd));color:#fff;
border-radius:16px;padding:1.8rem 2rem;margin:2rem 0;display:none}
.se.visible{display:block;animation:fi .4s ease}
.se h2{font-family:var(--D);font-weight:700;font-size:1.15rem;margin-bottom:.85rem}
.se ul{list-style:none;display:flex;flex-direction:column;gap:.45rem}
.se li{font-size:.95rem;opacity:.93;display:flex;align-items:center;gap:.5rem}
.ln-btn{display:inline-flex;align-items:center;gap:.4rem;background:var(--sf);
color:var(--t2);font-family:var(--D);font-weight:600;font-size:.88rem;
padding:.7rem 1.3rem;border-radius:8px;text-decoration:none;
border:1.5px solid var(--br);transition:border-color .2s,color .2s}
.ln-btn:hover{border-color:var(--acc);color:var(--acc)}
.ln-btn.primary{background:var(--acc);color:#fff;border-color:var(--acc)}
.ln-btn.primary:hover{opacity:.9}
.ln{display:flex;align-items:center;justify-content:space-between;
padding-top:1.5rem;border-top:1px solid rgba(255,255,255,.25);
margin-top:1.5rem;flex-wrap:wrap;gap:.75rem}
/* UNLOCK BUTTON */
.ub{display:inline-flex;align-items:center;gap:.5rem;background:var(--acc);
color:#fff;font-family:var(--D);font-weight:700;font-size:.95rem;
padding:.8rem 1.7rem;border-radius:10px;border:none;cursor:pointer;
transition:transform .2s,box-shadow .2s;box-shadow:0 4px 14px var(--acs);margin-top:1.3rem}
.ub:hover{transform:translateY(-2px);box-shadow:0 8px 22px var(--acs)}
.ub:active{transform:scale(.97)}
/* TOAST */
#toast{position:fixed;bottom:95px;right:1.5rem;z-index:999;background:#1e293b;color:#fff;
border-radius:10px;padding:.8rem 1.3rem;font-family:var(--D);font-size:.9rem;
font-weight:600;box-shadow:0 8px 26px rgba(0,0,0,.25);
transform:translateY(20px);opacity:0;transition:all .3s;pointer-events:none}
#toast.show{transform:translateY(0);opacity:1}
/* GO TO TOP */
#go-top{position:fixed;bottom:1.5rem;right:1.5rem;z-index:300;
width:48px;height:48px;border-radius:50%;background:var(--acc);color:#fff;
border:none;cursor:pointer;font-size:1.2rem;box-shadow:0 4px 16px var(--acs);
display:flex;align-items:center;justify-content:center;
opacity:0;transform:translateY(10px);transition:opacity .3s,transform .3s,box-shadow .2s;
pointer-events:none}
#go-top.visible{opacity:1;transform:translateY(0);pointer-events:auto}
#go-top:hover{box-shadow:0 8px 26px var(--acs);transform:translateY(-2px)}
/* CONFETTI */
#cc{position:fixed;top:0;left:0;width:100%;height:100%;pointer-events:none;z-index:998;display:none}
/* FOOTER */
.lf{display:flex;align-items:center;justify-content:center;gap:1rem;
padding:1.6rem 1.5rem;border-top:1px solid var(--br);background:var(--sf)}
.lf img{height:32px;width:auto;opacity:.7}
.lf-text{font-family:var(--M);font-size:.75rem;color:var(--mu)}
</style>
</head>
<body>
<nav class="l-nav">
<a href="../index.html" class="nav-logo-wrap">
<img src="data:image/png;base64,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" alt="Techbase" class="nav-logo-img">
<div class="nav-logo-text">
Techbase<span class="course-lbl">Python Course</span>
</div>
</a>
<span class="l-nav-lbl">Lesson 14 of 45</span>
<a href="../index.html" class="l-nav-back">← All Lessons</a>
</nav>
<div class="pw"><div class="pb" id="pbar"></div></div>
<div class="l-hero">
<div class="l-hero-in">
<div class="l-hero-logo">
<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMgAAAEBCAYAAAA9yOpWAABamUlEQVR42u1dd1wUR/uf2d2rHHB0AQsgzYaCDXvBirGbaGwxRmM38U3eJLY3RqMx5f2Z2BO7Yi9oVOxYUAEVwQZIEUWKFOGAO65smd8f3uU9j6v0ss/n4ydhbnd2dme+85R5CkQIgcZOZWVlTtbW1gWAJZYsJKwxvxxN05zDhw9vLigoaM1ONUssQLQoMzMzcM2aNUlPnz4d5+bm9oydapYqQ0Qj5BrE33//vfrevXtzKIoS29raPubz+WXsVLPU5AGSk5PTbufOneGlpaU+AAAAIWR69Oixj51mlpo0QBiGwc+ePbv6zp07XzMMw/1HfsQwhb+//1V2mllqsgDJy8vz3bVrV3hRUVHbCi9HEGXOzs5p7DSz1OQAghDCLl68uDQyMnIVQqjCe0AIGTs7u3QOh6Ngp5mlJgWQt2/feuzcufNUQUFBoKFrMAxT9OrV6092illqMgBBCMErV658c/Xq1VUMw/CNXQshpHx8fG6xU8xSkwCIRCJx37lz58k3b950N+vFCKLE3t4+k51ilho7QODNmzfnR0RE/ELTtNDcmzw8PO5jGMawU8xSowVIeXm53c6dO49mZmYOtvTeLl26HGSnl6VGC5B79+5NCQ8P30iSpL3FL0UQpV5eXnfZ6WWp0QFEJpPZ7969+8irV68GV7YPDodTbGNjk8dOL0uNCiBxcXEfnThxYltluMY/CguEVPv27c8DABA7vSw1CoDI5XKbvXv3hqWnp4+sskYPIRMYGHiCnVqWGgVA4uPjxx0/fnybSqVyro7+IISq5s2bx7NTy1KDBohCobDevXv34RcvXoyozn4FAkGeUCiUsFPLUoMFyOPHj0ceOXJkZ3VxDW3q2rVrGDutLDVIgKhUKuGePXsOpKWljUEIVXs0I4ZhKrWCzhJLDQsgiYmJQw8ePLhHqVS61tQzcBwvdXV1ZcNrAQC5RQq3pNdl7Y7eypqOAMACvWzvDw5yPt+6mSgNwqpZ+HKLFG53Et/2vZqQH4oQgIM6OV/s3c7hejM7fm5V+kYIwLRcqc/jjJJO1xIKhiIAYEhHp0u92jpEudrzc+riO8KazmqiVCqtDhw4sCc5OfnDmn4ZJyenuG+//bZLUwZGsZS0m/bb/dPn77/pq+93sRUHnFjefWhIR+fLlem777c3nzx9WepuqO97vw/w83ETpVjad1qu1KfrF9dTJDJS7+/tPWyyL63uFezmIMiqze9Zo0kbEhMTh6xevTq9NsABIWSCg4P3NmVwpOZIfewnni0yBA4AAJDISDBo2e1LPxxKWmdJ3yfuZH9kP/FskSFwaPr2nX35+faIjIWW9P3XhYx5PrMuGwQHAAA8fVnq7j79wusbTwr6N3gOQpIkPywsbFdiYuJH+oKZagTpGKb617/+1bFZs2bJTRQcvr6zLz+35J5jS7tP/rC3+2GTu3uO1Ntn9uVUS/qO2ziwS1BrcZw54JizOX6rJX1n7x/eorY4SbUD5MWLFz127959VKFQtKjNBcLj8fJWr17dAsdxsqmBAyEA7SeeZYztwAYX24FQdzcj8j1FI4IzKrxS37T81GihgIfLDf0uV9EC4dgz5Zb2K7bigILDH3AIHFINRsSiaZpz8ODBHdu2bbtV2+AAAAAXF5fEpggOAABIyJB01AeOeSO8dsZvCulUfGyk+PTKHqP03bvjYsYCY32fickZq6994cjWWxM2h3RI3zXUc/2Mdt/ou2bv1cxZxvrefy1zhr72dZ+0W5a2c6hX2s6hXus+abdUnyj3+GVJxwbDQTIzM4P27NlzrKysrE4yGEIIqY8++mh6165dD0ulUoeLFy/+e9y4ccsxDKObAkDmbo7f++eFjE+021ZPbfvDyo/9V2m3PcooCei08Noj3fuZc+MwQ9anDguuZunqHT9Ob7ty+UT/H3X67tBp4bXHujt98bGR0OC8jThV4ZmnlgePG9vTLVy7bdellzNnbXy4671xedi8frxlUMt6zUEYhsFOnjz5f5s2bYqtQ3AwOI6Xe3t731aDtXNcXNzsX3755U5BQYFXUwDI0VtZn+i2Lf3I70fdto6eto8DW4sr6Ggl5aStMeVYt+3bCX7r9fT9xNaKU2GnNya66WvXBQcAAMwc4rFHt+3Jy9JakVIqDRC5XG6zfv36e9HR0UtqSxE3xD04HE6xWCzOAgCAR48ejaVpWvj27dvOGzZsiL5x48Y8hBBszADRtxANyefdfO1i9ekwhnQEfe2G+v64X/PdesamF3xSBWWl2xbkLU7WP8cAdfKyTa+Lb1tpgPzyyy93ioqKOtf14sAwTNGmTZsLEEKEEMKePn06lmEYPkKIUKlUzhEREf+3devWs3K53KYp6SUUjTjmchtDJODqV7AN7f5HbmbN1G0T8Qmpob1Nt+FhmsRfH1gRAjDhRUnrBgOQjIyMYJlM5l0/LDgICwoKOg7Au8QOFEVZ64iB/IyMjBE//vhjyrNnz4Y2RjCM7OZ6Rbdt/NqY87qLbXtExiJ93MZOxCk21HebFtb5FRT0bQm7dfu+/rhgoG7fgV7iFAKHtAFLlERf+6pDSb/otv15oaIhYW6o5+56C5AHDx5MM5V2p7YIx/HyFi1aJAAAQHp6ei9D4p5SqXTZu3dvxN69e/fTNM1pTAD5YVqbClakv2NzB7tPj8g/ditr2tFbWdM7Lrz2ct6W+I0V7p3S5kdjfa+e2naxngU7rfMXkclX4vNHPM8ua/ufsMTfBi6NuqZnEW8w0fcPFdoOJX3d5cvIZ/dTi3ukZJe1nfXHw2PztsRv0r1u1lDPbfXWirVy5cqXcrm8VX1YHLa2to9XrlzZEQAANm7cGJmZmTnA1D2urq63Fy1aNITL5cobA0AQAtBu4lmmpBLnIOWnRlsJeHi5MWXa8eNzpKV921pxQPHRkZgx36zKnoO0a2WT/WTLoBZV9SmrEQ5SVlbmrFKpHOrDwsAwTNWlS5cjALw7h8nLy/M3577c3NzeGzZsuMowDN4YAAIhQC/3DLOz9L7jS7tPMgYOjUL+4I8BFovT938f4GtqAQu4uDzypz4DLe378pre3WsDHJUCyMuXL7vTNC2qJwApb9u27SUAACgsLPTU1T+MUWFhYXBsbOyUxiJmia04krSdQ81WZI8v6z5xQm/3o+Zc6+0qSk/dOcRskKTsGOLn4yYyyzVlQIDT9ZPLg8eby5VSdgzxdXPgZ9dbJf3Bgwf1ZlERBFHm6uqaDAAAqampfS3RixBCWERExGqlUmnVWEDS2tXqRXn4aOH8EV47DF0zqrvr5ewDoe4Terkfs6Rvb1dRevGxkXbGlOP5I7x2FB0daW+pN++4nm6ncg6EunbwsH1l6Jq5oZ67cw+ECs0FXp3oIAghbOXKlS/rwpWkolgBGScnp5hvvvmmFwAA/Pzzz/cKCgq6WiqiTZs2bVyHDh0aXZAVRSPi6auSdsVS0h4hgIlFnOI2za2TjPlGmUtyFS2ISS7qgRCAEAIktuIU+ze3Tq6uvmOfF3cDCEEEAGzhKHjt4WL1sjb8rvRuwpZcXFRU1JIkyXqhf0AIVcHBwfsBeBepWFpaarHbAcMw3Fu3bs1qjAAhcEh18hI/qom+BVxcPiDAKbKm+u7fwfFmffmOFolYaWlpfS3Jj1vD+ofC19f3plrpbkfT+k99zdBFvEiS5AGWWKoqQGJjY6fXl4FzOJwSJyenFwC8C8yqLHAhhExj0kNYqiOAUBTFzc/P968vA3d2dn6O47gKAACio6M/qYw/GEEQEgzDFHK53JpdCixVCSBqUcS2vgy8e/fu+wF4l8u3snoRh8MpJgiiTKFQsByEpaoBJDk5eVB9Of8gCELi7e0dBQAAr1+/DqIoqlKOiBBCCsdxBZfLZesYsqR/rZl74b179+rN+QeHwymxs7PTuLePqYx4hWGYSi06in7YE7PnLXDlcnBMhmGAxCCkAQAMBiENIWAABAwEAEEIGAAAgAC+K8xj5mkuBID5Hyjf3aPVh7pPdfv/noG0OrCsEBB6t/Eh8M7NH6H3N0JooD/d6wxdr30d0vLKhZVIGG6o73/61R0TBExHT9uHc4Z7bqmN03SzFpZSqbQqLTWczaI2CUJI+fr6XoMQMggh+OTJkzGV7QcAgFEUZXP5aUHndCkNWGow9CnDIGL+B16/1wsRKzc3tx1Jknb14ctgGKYKCgo6AQAAJSUl7pXViyCEKnXMiKOU4rJLroHRgm0JG+qNDvLkyZPR9cn/qmXLlg8AeJdBhWGYSpt3EUIYjTAmTyFiV1wDo9AuzW7VG4DEx8ePqS8fhsfj5VtbWxeo9aJPKpvjFyFEIISIItq2hF1uDYt83ESlJ5Z1H14vlHSZTGavUCgc68vHCQwMPA0AADRNE1lZWZ0q2w/DMFw+n58zLXTgunXL2l4HECDLlExokYIIqxAVb467nKn+UT2qt6U7VkvGZi0gymrTL8skQF6/fh1UlZJo1cw98gICAs4AAEBRUZGHJe7tejgIlyAISVAHv0sCAbeU3ZdZqpSIlZCQML4us5ZoiMvl5ru7u0d6eHjcBwCAlJSUflXRiyCEKhcXl6cCgYAFB0uV5yCJiYkhdcuOIcPn81+FhIT82r9//+1ALQZFR0fPqkqNET6f/zokJOQvdgmwVGmASCQS97o073I4nKJmzZpFT58+fa7mYFClUgnDwsJ25OXldatK33w+P9fDwyOOXQIsVRogL1686EVRVJ3oHzweL7dv377/N2TIkP9C+E4hfv78+YCwsLA9VU0YweFwCoODg49gGMawS4ClSgPk/v37H9dEqTRTXMPBweHJJ5988pmTk1M6AABQFMU7cuTIpqdPn06srN/VP0oXhqlEIlFKjx49DrLTz1KlAaI2owbWNtfo2bPnltDQ0J8gfOer9PLly+67du06Wh1phgiCKOXz+Vndu3c/wCrnLFUJIEVFRa1qy72dIIhSOzu7p9OnT5/t6uqaqAYo59SpU788ePBgVnWc4hMEIeHz+W9EIlFKv3799rBTz1KVAJKSktKfoihxTQ+Ay+Xmd+vW7a9Ro0b9gGEYBQAA2dnZAdu3b/+7upLTcTicIh6Pl8/n87N79ep1gMPhKNmpZ6lKAImJianR8FoMwxTW1tYp06dPn9mqVas4AABgGAa/cOHC8qioqK+qqmtoSJ39/S2HwykSCoWZ3bp1O8tOO0tVAghJkoLi4mLPGlTEC9u3b39i4sSJXxAEoQIAgLy8PN8dO3aESySSttUtvuE4rsQwTDly5Mg/w65nL1h1KHHDy7zyKvXbtqV13sY5HT8J6eR8qb5MZm6Rwm3+lvhdp2NyhzXWBSu24oCfZ7afN3uo55+1EQ+iNy/W69evO23evDmquj14NXrA5MmT52oykiCEsKtXr/7r6tWr39eEx7BAIHjF5XILPT09Y6xaD3w87seYP6uz/5wDoe51VcNbm6pSS7Ah0pppbVetmOT/Q00/R68JNykpaWh1L1YOh1Pk5+d3ZunSpV004CguLm7+3//+986lS5d+rQlwqC1hjFgsTpk0adK/9l599VV1P+NO4ts+9WHBZOTJvEATopUHElfVmYgVGxs7tZr0DBVBEBKCIMomTJjwZUBAwDk114BRUVGfR0RErK9JQwBCCONwOCWffvrpIoIgVMF+9pf+jsn1rc5neLlapdWHBfO6QN4CsFTzAFEoFNbl5eXNqgMcOI5LW7RocXvGjBmfas4dZDKZ/a5du469fv26X007QfL5/Oxp06Z9LhKJ3gIAwHcf+n3xMF0SfOJ2dtfq6H/11LY/mFMLvJYIssu5FgCSk5PToSq7OoSQUivG8qFDh67q06fPTs1v9+/fn3jq1KnNFEXZ1/QJPY7j0kGDBq319PS8/7+xAXR8afduTWVyr63rM2hgR6drjeFdFm1/tGXz2fT5dQ6Qx48fj7J0Z9eceqsV8VJnZ+f4mTNnTrW1tX2j4Uq7d+8+/PLlyxCEUI0HgOM4Lh04cODq/v37b2sqYEB6OEht1dCoHSNE3VQ0qwCEuLi4jywRoyCEKi1FvHjs2LH/6ty580mgdktPTEwMOXTo0B6KomxBFctOmzumgQMHrh46dOivdTWZxVLSHgKALBZ61MuZx8GUpgrbmKeDAayxAER7E64zgEilUgf1QjYpRmEYplCnzgEYhqmcnJyezJkz50OhUPheQUiKovjqWuZyTRx4DXKO8pCQkO+HDBnyW118zNQcqW+3L68/l8iqbm1t29I6/9HmQe51lfafJfWGq/1HZmZmZ1NFaDAMU2j+EQRRxuFwiocMGbLqyy+/HKwLDgAACAgIOP/tt992dnFxicMwrPzdzlb9+geXy83/+OOPp9QVOAAAoLrAAQAAiZllzj8de76i6pIXS9XGQR49ejRazR1UDMNw9e3Q2iKVlZVV8eTJkz9r1arVA2MPEYlEbxctWvTB1atXv4yMjFxRnTHuEEKmZcuWVz/77LNJ+gBaWyRX0YLqAoeG3hQr3NglWk84CEIIPn/+fKBGhNInVgEAGBzHlQRByIKDg7d7eHhE7d69++Dz58/7mrGQ0eDBgzd88cUXvQUCQUZ1yJQcDqdozJgxny9cuHBYXYIDAACUJMPWGGnMACkpKXFVqVT2NE2LDIlZGIYprKyschYuXBgyevTolf3799+MYZjqwIEDYadOnVpDUaZTFDZr1ixp1apVfoGBgTswDKtU0mgIIeXv739i5cqV3r169dqliThsytSmuXVixe/EiljVJmJlZGR0oyhKrE8/UCvZ0q5du+4eM2bMMgzDaAAAcHV1TV6+fHnnM2fOfB8fHz/lyZMno+bMmfMRAADweDyZnZ1dtj45GMdxcvLkyXM7d+58JCwsbK+5bu0Yhin4fH72p59+OtXT0zOmIXxgdH6c2bYsOOJUpRe0qz0/x8dNVJqaI7UB4F1F2D7tHG81loVa25GtFQBy586d2Yb0DoFAkP3pp59O1qdrEAShGj9+/PJ27dpdOXjw4N7NmzdfUZ91MJ07d94zbty45YYe7ufnd2PVqlU+8fHx469du/YviUTiSdO0SGPpghAyEEIVQRBlrVu3vjVgwIDfPTw8Yuspx6j2k2xoQVZ3CAF6/tcQceTjgkEYBHSfdo63GpkFDNYZQBiGIfLy8tpo8tVqLf7Sdu3anfj444/nadzSDZG/v/+NJUuW9P3tt9/uI4QwCCFMSEiYGBoa+hOfz5caug/HcbJLly5HunTpckQqlToWFhZ6aj4GjuMqGxubfJFIVIDjeJPxVK0CoFBIR6cr7JeoZoAUFRU1p2naCsMwBU3TQgghJRAIsqdOnTrN19c3ytzObGxs8ng8Xr46VRBD07Twp59+ivv444/n+Pv73zB1v0gkKhSJRIXstGjEisZz0NdQvwUGAACpqam9IYQIwzAFl8vN9/HxOb1ixYo2loBDzXGUixYtGu7s7PyAy+UWYhimoijKNiwsbP+pU6fWmqPE1wbJlbTAc+ZFBEecQoOX346XK2umcu/oYNeLVbl/6/kXs6tpccFVh5LWwxGn0OrDyWspuu4zZVr8DgDUnQ5y//79SRiGKXAcl06YMOGLgICAStcNt7e3z1q8ePEYAAC8ffv2jEuXLq1ECHHj4uI+e/36dadFixaN0ij5dQQOodu0CJnmzOJqQn4nt2kRspywUKGAi8sr2++LNxXjMZo7Cl5VebwqWlCVccmVtMBtWkS55n2/D0tctiE8dVlV37epEEaSJF8ikbi7u7vfW7ZsWWBVwKEL+t69e++ZP39+qL29fRqEUFVQUNBhzZo1D5OTkwfUhdKlCw4NSWQkcJsaUS5XVa7WOgAAxCQVVQicGtjR+aolfcwN9ayQbSUmuahHdYGjOt+3yeh12dnZ/hkZGV179eoVBmrINYGiKF5WVlbA3r1792p8vezt7dMmT548p1mzZs9r40XLlbTQXQ84tElsxQGV2VkNhbum7Bji6+MmSjW3n8hHBSEhy6Ku6o6p6OhIzNIzjdQcqa/v7MtGv21l37cuaM7m+P1/XciY9t4ObIEJvdIcxNXV9XmvXr0OgBr02yEIQunh4XH/u+++6+7o6PgMIYQVFBR02Lx585U9e/bsVihqtsSTOeDQ3llzi8x38UAIwPFrYyJ0222tOMDbVWRRtGEPf/u7+sa09mjyfyzpJz5dEmQKHCwnMRMgtXmmwOfzpQsXLhzl4uLyAMdxGUmSdklJSR+vXbv28eXLl5cwDIPXFTjeWzTTIrJTc6Q+5oBj9Jq7V/6OzR2s+9vOL4ImWrrrC3i4fN4Ir5267SsPJK768Ujy98gMB/rtERkLgxZHmh3l2FBAol0puNatWLVqFSAI5eLFi0d37NjxKI7j5QghQi6Xe167dm31mjVrHqr9umBNg+ODrs2uFx8baW9rxdF7r+/syyl/XcyYq8/igxCAkY8KBtlPPMucjX0Too97jO/pfrwyY173Sbtv9LWvPJC4yn7iWeb644IQ3TEhBGBqjtQ3YMHVzHlb4jfpu9/WigOKj420H9nN9YpBkChZTlIBmKjuanPBqKiozy5cuLCWJElHzQEll8vNd3Z2Tpg0adKiZs2apdQIOLo1u/b3f3oOhhAguYoWuE6NKC8xwmFGdXe94mrPf4MQgDlF8hbn7r3pZ+zZVU0FdP1xwYCBS6MiTV33+TDPMHPGY2vFAbkHQoUCHi5HCMBxP8acOx2TE6p7nb2IS2XtH24j4NU/nWTu5vi9f17I+KS2dZC6BAgAAICHDx+OPXny5BalUumq3c7j8XJ9fHzOffzxx0t4PJ6sJsDxj7XHDJCYrRzvGOLj7SaqcqaTPy9kzJu7OX5rVftRg8NKO0IRIQDHrY05ezo6Z4Tu9Q7WXNXrfcPF9Q0kdQWQOj+pDQoKCl+4cOFAXRd4pVLpmpiY+Mn69evvXrt2bY65zmrGwDGym+sVXXAAAICAi8sLD3/A+aBrs+v1ARwAADBnuOe2bQsCF1alj9HBrhcLD3/A0Q3fhRCgU8uDR+o7yHxbpuK2+OSChBW36glAAHjnFbxkyZK+zZo1u6sNEoZhuFKptO2NGze+/fnnny+mp6d3q4rOceY/PYYaUpwJHFJ/f98zZMu8TkssHf/8EV47ysNHC6sLHP/smqGeW3IOhLoa0pOMKusLA+eHr+gRashhEUKAwlf0CDUEkubTL5TWlIdBpUQdWDdKep2LWNpEURR306ZN53Jzc/vpehYTBFEqEAgyXVxc7n/yySdf6tb3KFfSVu7TIqT6wDGia7ObZ7/vOcBcqxJFI2LHxZfzlu57utGQ2GVrxQG/zOww96M+7kfFVhxJTX4XhAB8lFES8MPBpHX6dAdt+mFqmzX/Huf7k7kiEkIAjv0xOuKMnny+9Uknmbclfvf2iIxPm5wOog8k4eHh6+Li4j7Tzc8FIWQIgiiyt7ePnTt37gxra+tCAAAgacRx/vicypBYZYxzmCK5ihZIpKRdclaZPwAA+De3ThLwcHlNg8IYeAtKlE7JWWVt1GZfCAAAga3FcXYiTnFlAWgIJO09bLIfbx7Uoq6Dr+oKIPXOaY0gCNWHH374NYZhyvj4+E+USqWrRv9ACGEURYlJkrQlSfKfENeHacU99IEjwNM2oyrg0OgnAntcXh8SVGtEQVd7fq6rPT+3GsWXd+LW6uhLZ++9f6bz9GWpe/obqZe3qyi9Keog9darc/z48cu9vLxiT58+/Wt5ebm3BiQYhikEAsFre3v7bM217g76nQIfZ5R41uXkypW0sFhG2iW/Lmt761lhyBv1CT0Eaj0LAqajp+1Dv+aiRP/m1slOtrz8ugpySsuV+uiCQ4vDNFm3+3rt9hwYGPi3i4tL2q5du/aXlZW1wzBMZWtrGz9v3rzPta9r7ih41aedQ0bUs7cVapr4zLqcZqlPVFV0hbRcqc/B668/++NM2jdmnt6/JzYEthanzBnuuXFgR6crPm6ilNr4zpGPCgaFLIu6YsgSZqnLTGOieqeD6COFQmG9devWXQzDcCdOnLiiRYsWT/UtzsErbj+8lpDfSV8fKTuG+NXUgiuWknZ//J327Q8Hk76tzn41xWJmDvbYWVOcZXtExkJDp+9jgt0iTq0I/qA+JH9glXTzFHgOQRCksR18yIrbcVcT8vVW583eH9rczYGfXV3jyXmrcF99OOmnP3W8TGuC5o/w2vnj9Lbf2om4RdXV5/Hb2ZM++in2sCHOEb6iR2h9yYzSZA8KLVTgSVPK5uUfe3ceHOis11mv3bwrWQhV3c+LohExZ1P8AffpEVm1AQ4AANh6/sUs+4nn3v55IWNBdbxDsZS0MwSOUd1dL9cncLA6SHWyRAjQpTW9u45YdefWhQd5vbV/k8jIdyLFCM9Nle3/Ybqkc+fFkQ/MudbWigP+NdZ7Td92jpF+za2f6ztPeFuqcsgqlLtHPSsc8Nup1FWm3F3mbo7fvHTv041Ptw5uWRVu+OmGB0fqu1jF6iA1rDC3n381OzGz1FX3N/LvsRxLZXqEAFxzJHn192GJRvPltm1pk7t5Xscpwf72MZUJRJKraMGFB3nDfziU9NvjjBKjhVRPLQ8eP7an2ymLRcMihZv7tIgK4Ar0EqfEbRzoXx/BwYpYNcBJbv/ar52+3568Kmlv0aJV0oKxP0ZfNAaO+SO8dhQfG2n3bNsgtwEBTtcrG6Un4OLycT3dTj3aHOKVunOI94IPvAwWHR23Nubk2B9jzlsqcv114cVife2R6/sEs5yjiQAEAADsRJzi7QsDK1Ql2nXp5RxLwOE2LaL8TEzuEEMcI/tAqPuW+Z0+r+7TdW9XUfrmeZ3m5hwIde3gYav3rOd0dE7o+HUxZy0ByR9n0itY2/5cFDRXbMUprq9zWVdZTRr9AdCo7q5ndNu2nHsx1xJwGDrPOLk8+MOnWwe5u9XwKburPf/No80hnieXB3+o7/fwuzkjxv0YHWEOSCgaEQbCAM7Wa4mgjiIKicYOkMq6iCAEYPd/6a/3YWvFAUnbB9dqfXQIARrX0+1EzoFQt44Lr6UUlCjfi+M/HZM7bNzamHOnlhtXsKUKylpfuzkgT82R+v52MnWl9pi0vQKA5sRdx/MWauU70PbK1ZzQI0MRpAhgDEI4BiF9PCp7CguQekSj19y98uRlaQt94NBE59UR4HNf7R3mrC/A63R0TujOSy8/nz3M48/qfm5OkcLNnEQQrA7SBOj47exJ+mLNO3nZpuaG1R04tBX53LBQob01t0K+5M83PdyemiP1NS7OW05/XchY2BTXQqMHiL4UPl187B4but7QAZqtFQfc/31g2/qSQ0rAxeVZ+4eLHW14FYp9Bi+58cxQelFDhgSJjBQbe167VjaP65lueZkFSDXQ6eicCort2B6uxwxdP2DpLb2n8C/3DLOvb+UEBFxcHv3ffh1124ukKmL98ecGy060bWlTwVU+Pl0SaOxZE3q5Hx3exeV2fXhvWysOOPJdtzG1ovs11oNCjcXGkoyHhrxaI3/qEzIgwCmyvr5n+N2csePWxlQ4MCw6OtJeXxDVyTvZH05YF3tMh7OAgsMfmDxAlStpgYJk+NC0UdmchQUtvYfHwZS1ycUbrZKOEIAfros5q2/30ee+rc6QWAEc80Z47azP4AAAgDE93E4HeNpm6J68r9yf+PPm+R0/r2CACHYL1yNigV9OpHy3bKLfj0a5Fg+X18e0QKyIZSE4xv0YHXFaTwhp+IrggfrMoDeeFAzQZ9I1lMitPhGEAN38uW+QbvuW8+mzJTLSrsKuiENq24LARbrty/c/W7N4+6Mt1eEMyQKknlJ8uiTQfuJZRh84xgS7RfQPcNKb2uernY+367ZtXxg4vz6fLusq3/rSlm76O/0LfdfPGe65RV+2lE1n0+fbTzzL3HhcMIBN/dNAdBC5khbsu5b52ZOXJR0hhLRaeEXq3ZMBAICst/JW4XcrJkLTFq1yDWQyN+S8VxmnxrokiYwU2310tgKgmXPj9GaHN/TeFUUy18tu9oIsBAAEOuG3EAJ6+SS/790dBFmNESD1XgehaEQYc/cw1+qRayTNf/jdnI912+aP8NrR0Ipgiq04kvatbF4/ffX+AWfCC0mnwNbieN3r3ez5Oak7hvj4zL5sNBzZkB+ahrZFvJhpyCDAilg1TLeeFvarCjgCPG0zck3UwFix/9lvum1fjvH+tSFO6L6vuozRbdtx6eV8Q9d7u4nSyk+NFrZpYZ1fRdE2iNVB6kgMrCzXuL6+b/+ETSGtjYFDrqIF+gDYUBMVBHjYVjjQ23b+xSxj9wh4uPzZtsHNrv/UZ0BlsjhWZZ5YEasWydaKA/493mflpL4tDns1s3phTmxD0uuyNrptCz7w2t5Q4yIIHFJtW1jnJb4uc9HRT+yMGRwgBKh/gNON4qMjsRdvZF6Hb76ecjo658O4NIm5sTOIBUg9oes/9RnQP8DpRnX0FZtc3Eu3bUIv96MNeVLnf9D654XbEv5PRwQKNOc8B0KAWrtapa+Y5L96xST/1fquWbA14a/qqsDLilg1IXOpLVnVQY8yJJ112/yaW6c05EkN9rev4BLytlTlVF390wzigiZCDQEgFVg3QqjaSrUdvZX1iR6ZvLwhT6pXM6sK+tO1R/lDAUtNg4NUJ+lT0OsqMXV1EZ+DKSpuKuxcN1aAsG4PFpI+X6k7SW8HsfPEchCWDNDTl6XuNSwHswBhqeFSFc43KrKKOqr2xALE3J2pFmu7N0TSF004qW/zfeyXaSocBCFY2wusIVGZnLSpyV2/KSn8TV7E0hfbLFVQoob8Tum5Mh/dNld7fo1628JGepJe/wGih1swqPo8ADr7iGN12zLyZB4NeVLTcmX+um292zrerLZFg0ESNBFqkKLEN3ue/NHNxz5Go59gENADOzpdcbDmFvg1t37ezI6fa64vVe+2jrd0287fezM60Euc0FAn9Up83ge6bf7NrZPNFJ9gWq7U91pCwZDHGSWdcorkzU25u7MAqWdKelyqpG1cqqStdttWHY/VHYuD5kwZ0OKAqQB//+bWSbpt/z2VumrFJP8fGqZ6BuDuy68m6LY7i3l5pu47eSf7o9kbHx6pTHgBa+atI6qsbDt748M/hWPPlIffzRlr7Dp9NTYkMhLoi+VuGOKVtIL+0dHTNt1Y8FdOkcLNfuJZ5sOfYo9UNvaG1UHqiFo6C19W5f5xa2NOfbguNtxYIoJVU9qs0207fCNrakOc0IPXX8/QbfvP5DbfGbo+NUfq6z4tIrsqQWkAANDCSZDJAqQOyMdNlLJ6atsqiTsn7mSPmbAu5owhkEzu36LCGcGyfU83NrTsHhSNiB8OJS3VbR/e2eW8AXD4VEe+3R+mtllTWxV5a12CaSiJ4ygaEWrzK/yf2Ps/KixVOjzOKA2c+XvccUNlzNZOb7dSX94nhADEPjhV4ZygOuNOaoO2nc9YNH9r/EbttgBP24xHm0O8dK81VdqhfSub17/P6fhZSyfBKydbXoGhZ4r4RFlDi91vlACxhOJfSDoFLYqM1ytvHwjVW7bgzwsZ8+Zujt+q3Sa24oCioyOxhhBdaCiLZNzGgV2CWosrpFOdvyVh17aIFzP19fXgj4HdOnuL7wOWGudBYaCXOCHnQKi7ky1PqvvbiFV39ebF+myIxw59yvqfFzLmN4R3/unY8//ottlacUCgl/ihnvcSGwJHyo4hfiw4GjlAAHhXOOfSml59K3CXdIlvbpGiQmFPdbbBCin+522J31zfLVrx6ZLA/4QlrtRtD18RHKKP+x2+kTXNEOdorLoECxB9nKS1OH5sD7cK+XnPxuaO1nf9rKEef+rzevX89GJRfVXY5UpaELIs6oGed082FIO+bN/TjbptHT1t01nO0cQAAgAAKz72X1VB37iYoTcdJ4FDKnxFcIg+UWv0mrtX6htIEAJw0s/3zhRLyQrzGPlTn5767pHISLE+xXz3ks4TWTg0QYDoyxP1ME3ib2ixDwhwihzZzfVKRa7zJmTHpYw59QkcY3+Mvvh3bO7gChuAkYq1GW9kemuvt2luncjCoQkCxJAJsqSctDV0z6kVwaH6RK05m+K3/XUxY25dcxINOPT5SI3r6XZm9lCPvwzda0ifakolDViAmEfQGKgStw/WG6I6Z1P8trE/Rl+sK5DIlbTAEDhsrTgg7N9dPzZhlmaDzViA/I8MBT/ZCo1nLnGz5+ek7BiitxjmmZjcIfYTzzK1bd1KzZH6uk2LKDcEDlM5iNXKe4Il34kFSCOnxy9LOupbTOYc/vm4iVINgUQiI4HdR2eL/ryQsaCmuQlFI2LeloTdvrMvG6zbHvfHwNbmlCYT8Ykyc78TS40cIAgB+NnvcRXSiH4z3meFuX34uIlSU3cM8TH0+9zN8Zs1BWeqGygUjYiTd7I/4owKJ7dHvPhULydUc47WrlYvzNXJ9GVy/+z3uKNsZakmBpBTd7MnJLwoaa3b/mGf5scs6cfbTZSWcyDUzVBmEImMBAOWRkXaTzzLbI/IWFgsrZrolVukcFtzOHk1Z1Q4OWFdrME8wYFe4hRzxCpd2jK/0yTdtoQXJa3Do42HBjRJRbWxVrlNzZH66vNUtbXiAMmxkZXaKSkaEWN/jL547t6bEFPXiq04YP2n7Rd287WL9mxmlWEr5Ej0iXVqJ0zrhHRJp6NR2dOO3Hz9qTmu52unt12x9CP/dZXxE6NoRDh+fI7U59SZumOIj7dbwyz9wALEfHD4+M6+rNdlwlAJaEvoxpPCfmPWRN8okdV+aLatFQckbR+s1+HSEop8VBASsizqak19I1bEaoDgWDiy9dbqmPj+HRxvFh7+gKPPd6smgXF9fd/+xUdHYlUFBwAADOzodG3+CK8d+n7znX05JTVH6sPCo5FxkLRcaWufWZf1igfjerqdObEseGx1u65TNCJ2X345a87m+G01BYzTK3v079fe8VZ1j1194BhxRk9FYDUn8WvqzouNBiDGOMeYHm7nTy0PHlmTcR0IAaipzLTyQGKVEz6smdb2+8+GeOysDm5hatxj1kRf/DtWf+aSpi5uNQqAGAoWqi1w6COJjBQnvCjpeOtpQciDFEnw2XsVfaY0tOADrz+b2fFz+rRzvN7Ry/ZJbZdfQAjAUavvXjFkfGho5bBZgOjQw3RJUOfFkRWi5lzEPElu2Aj7hlpvsDaJpBGHOypcpe+3xlriucko6W305LYCAIA8iVK86/LL2ezyN0MXWRN91dDv1gL9p+8sB2lAdOpuzoTxa2OO6/ttx+Kg2bOGeuy0pD+5khZEPHgzMiwy89PTOkpsFx/x0znDvTZ90K3Z3y5ifl5tcSi5khaev/9m1LVHBUN0T9bH9HCLmDaw5Z7hnV3OW+KZixCAI3+4e+P8/Td9WUW9EQMEAAD+upAx15A1yVyQyFW04N+7nm7Yci7drNgPscbK1KH6ct/qUm6Rwm3O5of7z8aaPqAEAIBFI1tv/Xlm+69NnbAjBODoNXevGOr3+V9D/H3dRc9BE6ZGd1CoLzuJuSBJy5F6+8y+XCmLzbiebmfDvu46sTrjKhACcO3R5O9XHkj8vjL3GzsVV1uvLukLuGLB0YgBUlmQ/HUhY94cA/eYS3YiDpO9P1RUHSChaESMXxsTYWgBm81VFwXNnT3M408WHCxAzAbJzi+CZn02xGOX1rUL5m6O31wdz7UXcam8QyMEVTGLmhJ9qgIStUn3+rl7b/qx4GjCAAEAgO0RGQvmbdG/8Hd+EfTZzMEee4yJMF197RJ2LA76pH0rm2c4Bmn1zo6/yi/3+HrXkz9OR+eMMCRunVwePKqy416wNWGHbrZ6Dc0f4bVjyVjvn1s3E73QGAcoGhFPXpZ0mLEh7uTjjBJPQyCZNdTjr1Gr7147d+/NAFYhZwFiEiTN7PhFb4oV9gZEsVmfDfHYbcxClZYj9e7975v38yRKsSXyvymF3G1aRIWM8+Y4KSIE4F8XM+Ya4pzG3pcFRxMFiCmQ6AXHoqDZs4aZZxaWq2iBcOyZct32wNbilIcbB/pZOtaxa6Iv6JqVzQ2nNUe8ZMFhGTWJpA1zQz23mOt5awk4AABAwMXlDzcODNJtV2dwdLNknHIVLTitx3Hw5Z5h9pYERc0Z7rntz4WB81hwsACxCCTbFwbOr05waHGL+M7e4qe67clZZRZxkOikogrJ3hZ84LXdUI4rY/T5cM/tpkDCgoMFSIWd1RBIKgsODf36WYcK2RpP3sm2KFvh0aisT3Tblk30X1PZMRkDCQsOFiAGQXJiWfePtNtOLQ8eVxVwqLnIw6qODemp6FtVJ8HPh3tu131fFhyskm5a3lfSgpjnRT2C/eyjq+NgT18RHrEVBxRbEP/++aaHB3ZcfPle6Td0fhysrvdNyiprG+Bh+6ipuq5XhppssjABD5cbyn5eqZ1GjzlYIiPr1fvqK6TDEitiscQSC5DGQDgGSfYrsCJWk6LrjwsGQggYgAAEECCAAETvEmdXKEZ6P7W4O/vFWIA0KRq4NOoa+xVYEYsllliAsFS7ZCgXMEssQBok6R7IVZXCVwQPZL9q3VKTPSisKVInoxb97/tWYlLguzoe7IEeCxCWWGJFLJZYYgHCEkssQFhiiQUISyyxxAKEJZZYgLDEUpWoSr5YNINwDEKmqsmbGQZhKorh8Lm40tL+NaWLEUKQAQBDDII4BmkMg4zF40AIe1uqciiTUzal5ZR1STlpyyWgylbILWlmx8uzE3GLTL0reneMgf7XJ8AwCMwaC0IAg1rXIgSgOd+WoiiuUqkUKZVKa7lcbkuSJB8hhOE4TvJ4vDKRSFQoFAolEFr+TeqCGIbBy8rKXMrLy8UKhcKGw+HIeTye1MbGJo/H40kt6QshhAEAEIQQmbhO4zwKEUIQIQRxHKeqBJA/zqQt/2rnkx8AAACDEMBKxL4xCAGEAIj5vwHdu/vZ3dO0F5QonZwnn69QzxvHIKAZ42tm37+6zJwe0nKPOc9XkAz/eFTWx7svv5p340lBV6PsFkIwuX/zo0s/8lvdtqVNoj6wYh+cYiB8d61mnKUnRtmYKiEgkZF2dh+dLdJ+FoOQ0YjCzMzMTmFhYZuUSqUzTdNWNE3zEEKE5h+EkIEQqnAcl3M4nOLAwMCTPXr02Ofs7JxelXl/+PDh6AsXLnzDMAwHx3GaYRgcwzD5119/PZzL5ZZXtt+8vDzfy5cvf5eSktKfJEk7hBAXIYSp34PCcVzO4/Hedu/efX/nzp2POTo6Zpjq8/z588vi4uImAgAYCCGNYZiSIAilBogMw3DU3wvXPAshhHG53LffffddSJUAol14nkEIVHMRAGiAa5m80cWOl23qGhXFcH869nzlD4eSVph7VsogBMKuv54Ydv31RObcOMzQ7o4QAHQVD2AZM+5XKpU2paWlARRF2Ri5TEhRlFipVLpGRUW1jY2NndOhQ4cTH3744RKCIFSVGduDBw+mFhcXv5eBBcfx8pycnPYeHh73KsExiFOnTq1/8ODBZxRFiY1wShulUuly9erVddevX//Ox8fnwowZMz7BcdxgHA1N08KysrL2/yyqd0ArVz+XyzAM/71NEMMUGIYpcByXQwhRPXJ3R7C6ehLxCaNsOKdI4eb/+eXsMnmD9+SAahHi/Ua1KKXvN5VK5RwXFzc/Pz/fZ+HChaE4jlv0EZRKpdXr168761uIt27dWujh4THdUnFq586dh1NTU8fpG68RsIjT0tKGUhTFNQYQNddQMQzD1fo2jOb/IXznzqNpx3G8HMdxOZfLlVZZB8Ggfl8htXRgkQFAVz6uil7DITCDk56YWda2/fwrz6rsYVPNRXNg5fhvhXusrKwyfHx8LohEorcasSU7OzuIoihbmqaFDMPwEUJEVlZWyOXLl78ePnz4eksemJycHEKSpB2EkELo/Q02OTl5qEqlEnC5XLOTYFy+fPmb1NTUMbrggBBS6n+M+jdMs8g1v2MYpjQFcPW9jPbfmnFrRFEN5iCE//zO4XDIKgOkuZMgfduCTgudbXm5GqUYvYuYwyf/cu+4knxfJwxsLX66YpL/D0CtENEMwhUkIygoUTo3s+O90d0c9T0z2M8+nqSRFYFDBaYJUUUIo2jEKSxTOWUVyl0MgatMTlkHLrpmFBy92zrEDe3s8ndLJ+FLimGIvGKly72U4h5nY3NHvifeaSIEq4t/VgfIIGRatGgRM3Xq1AU6XENw4sSJn5OSkkapVCoHDUiio6NnDRky5L/GdmBdioyM/BdFUWKoZ3OkKEqckpIyoH379hHm9FVeXi6+devWl9pAgxBSNjY2aSEhIb+2bNkyjsPhKMrLy+0kEknzpKSkQc+fPx+kVCodEEJctShEmt57ANBwEQgh5eDgkOTk5JSoY8llIIQMTdOYTCYTczjvCqlWCSAf9nY/Yug3HgcHugDp087x5riebieq8szo/+sfZIlupE1dv4xMU1EVDTkEDsG2BYFzpoe03MslMINy+av88pbfhyX+uO9a5rT6Ipfq7pb6xBQulyufMGHCt2vXrh2q2Zm15HMnsVhsVqnpsrIyp/z8/A6a3VeX8zMMw42MjPzaXICkpqb2J0nSUbutTZs2p2fMmDEJwzBa9/rAwMATDMMQz549G3ry5Mk/AACkOZY5jfgEISQAANjo0aO/8/PzizTHqlWrOggGAV0rgrmenf1xRknA8yyps267tYAAL3YPc3K04Raa6reVszBz77+6TP+wT/Nj9UZzQxX0SL2iLZfLlQuFwnylUumsXjAUAAAjSZJv7rMeP348iiRJe82iwzBMQRCElKIokRqc/JycnM5SqdRRJBKZ/J4ZGRk9tAENIaRGjhy5TB84tJRoqkOHDud9fHxuHThwYJMl6o62XmIGqJDBj1mD2x2sq4U0Y8MDvZzr+V9D3M0BhzaN6NrsXA0U7oSVvMfsOVSbNLlaZmCVUCiUmHv/jRs3vtS29jg5OSUNHTp0DYRQpdnJKYqyefTo0Xhz+isuLm5laOc2RXw+v2zGjBnzzN80IWPpM2ofIAjhdQEOmYKyik8v8dFt/8/H/j8aq7dRx4u/UlYsaMBwIpfLbWUymRvDMHyNsmttbZ1tZWVVZM6D3r5961FWVtZSG2/9+vXb0LFjxxM4jss1ZwhqIC025535fH6p9rgRQsSzZ8+Gm22M4XAsqOb7TllXi5iongKkblxbnr4q7aCvfcEHrTeB+kOoEhtOBQ6iTwchSZJ/5MiRP0iSdNDsplwu9+2ECRO+MvdZDx48mKR73uLv73/Z1tb2jY2NzSsMw1QaMaakpMS7sLDQy1Sfrq6uT3TbLly4sP7Ro0ejLdnlTQFD802Mmb8NUYNL+8MfcxrpAR4gaQb8/Z8eIz/o5nquwkd/kDdKn2LuLObl18aY49KKgzycrV6+J2qqF4BG7HzxRta6OjhIVlZWz6tXr34pFAqLaZrm5OTktHv27NlohULhqjkUgxAyvXr12tq6deu75i6y6OjomdptYrE4zdraugAAAHr27Lnr/Pnzv6pNsoBhGG5sbOy0ESNGrDLWr6+v7w0MwxQaq5paDOQfPHjw2OnTp1917tz5oK+v701HR8cMkUhUUIVTekz9j8EwTHH48OE/eTxeEYZhSs37QQgZhmEwgiCK//3vf4+qE4BAM32SjJGuZew9MyOtX4RLziprq9vWu61jbG2994Dvoq7Xmjgpk7W4ePHiBlML/unTp2O9vb1v+Pr63jLVZ05OTlu5XO7+3vfr3fufyrnt27e/eOHChbU0TWti8UFsbOyM4cOHr8YwjDHCQZ7a2dklv337tpOOrsQtKyvzuXHjxqobN278c/rN4/GKO3XqdDwoKOhoy5Yt48wVldSbyD9nH0ql0kGhULiodTEMIUSoT9BVQqEwvc5ELENnG9VFNKMfIK/yyysUtmzpLHgJmjDl5+d32rVr14V9+/btZRjGqG549+7d2TRNCzV/4zgubd++/XnN33Z2dtlCofC9cyyFQuGSlZUVaMpSNHPmzIkEQUhMWeooirKRyWSt7ty58/XmzZuj165dm5iSktLfQlFLczDIYBimgBCqNBjQ+HrVqQ5SHRzEGKkoxNPX/iJX5q/bZsUjZKCJE03TwidPnnxy7NixP4xcw3n8+PHo976dlVWWWCzO0l5/PXv23KPDBfg3btz4wtQYXFxcUhYvXtzXysrqlQWLnZBIJP47duy48vfff682V8TSgIRhGL7Gq4BhmH+sejRN8xiGEWjrPw1OBxkS5HINIcRhmHfeqgxCBMMAWFKuaibkYUq9k2DHe51fonxPxn9dWN6qMS56Pp9f2K9fv1/EYnEWj8eT0TRNKBQK67y8PN9nz54NLysra62rbCckJEzp3r37fk9PzwqOhi9fvuxCkqStFvcoDw4O3q0r3gQEBJy+fPny99rOhsnJyUNJkhSYsja5ubk9Wblypf+tW7fmXr9+/WulUumk7VZiDChRUVHL3dzcErt06XLEzE/EuLi4PHZxcXmsxckYCCHFMAyuVCp5DVpJv7Sm1yBL72nlbPXiycvS9wCSmFnWsbbGvHlep4UeLsIMtSwMdU76IQAApOZI/b/a+WR9VZ/VokWL24MHD/5V329jxoxZnp2d3WHPnj1HJBLJP3oZRVHic+fOfb9o0aIKdd9v3ry5UFu3gBCqOnbseEb3OgcHh1d8Pv+tTCYTaXZrkiQdnz9/bpbrCUEQioEDB/7ev3//TYWFha2zs7MDsrKyAnJzc9u9efPGX6lUOpAkaacLHIQQdvr06f8LDAw8acLthFGPiwgNDf2Pv7+/WTmTaxUgdWXm9XG3SgEADH5P7Hojc6RoRNRGcrbpIS33mxEPcrM6AIJhmFHfJHd39ydffvllv/Xr1ycoFIp/FO+CggI/lUol1LYUKZVKK/VpN6EtOsXExHxiZWWVr2VJgwAAHMMwTGcxYteuXfvWXNcT9fhpZ2fnFGdn55TAwMB/DndJkhRkZWV1/Pvvv9fl5uZ21uaCKpXKIScnp32LFi3i9eg5GjcTRpMDzpyT9AbLQSpDQ4Nczm8IT1ug256SXebTtqVNUn0YI6ymaBpzDmNFIlGhp6fnzeTk5EkaMzFN00KpVOpgb2//D0BSUlL6kiRpp6tb3L1790utwCzdg0pGuy03NzfAXNcTY8ThcOSenp4xixcvHrRx48ar2dnZvTTchGEYbm5url6AaIFE+//r50l6XVFnb/EDfe0Ltj76q4G/GqpsGK2jo2Oq2orzz1rQBdfNmzcX0DRto0+5Vyu3mD5rkfbfFEWJdZV8bQ5luaEHMv3799+gM3Ygk8kcDH0jM9saGkCqL4DK0YZXYG9dUee78aSg97WEggGV6TNfonSu1retPncUswDz6tWr7trzDyGktOO9pVKpQ15eXntLTp0N0bVr177Wt2vfvXt3Rnl5udjS/vTFm2gOLY1wD6Yy677JZDU58HXXkfraB6+IioxLkwSZ2w9FI2LCutioJy9LAqtfyrJ4N62UWFZcXNw8Pz+/g7bCi2FYOZ/P/0dPevbs2WCGYfhqFxKAYZiKy+XmC4XCdKFQmC4QCF7x+fxsHo+Xx+Px8rhcbj6Px8vl8/nZGIaptDmbTCZz0+d6IpPJHLds2XJeJpPZWTL+6OjomTqGA8bOzu6lOdxH7atm9nertzpIdefUHhbkHGEtIIBumC1CAHT5IjLu2wm+v3z7oe/PdiKuXue9Mjllff5e7qhPf38YplDRYP4IL7o+fCaNQmyuki6Xy2127tx5VFtBhxAyzZo1S9QkMwAAgKioqM8ZhuGoPXUJHMelU6ZMmebn53fDWP80TXPWrVv3SC6Xt1CPC6MoyubevXtTQkND3zuzIEmS9/bt2/br169/NH78+EUBAQFnjZ28MwyDX7169cvk5OT3vIVxHC81pH8YYAawngKk6mJTp0XXnjMM4GhS5GAQUNoWMpJGxMs8WavSE6M42hYqDINM/KYQb+9Zl9L09fvziZRvfj6R8o2NkANGdXc93syOn6sgacGrfJnXtYSCkHIlrbMbgXqRFl/bOgMAAOXl5c7qLCPvDVihUFg/ffp06Llz59ZKpVLf9xYBQRQNHjz4v9ocprS0tLkWh2E4HM5bX1/fm6YSPRAEoerSpcuBO3fu/Ev79D02NnbqsGHDftQGgFKptAEAMAqFwv3IkSP7//7778zAwMATPj4+UWKxOJcgCCVFUdzy8nJxenp6r+jo6M/Lysq8dcW+9u3bhxvy09I6QcfUfxOnT5/+zcHBIQn8z5cN0xwOaixcKpWK36tXr1312YqlF0yPXpT4mmcurKi8tna1St/3ry4zP/m/B7sN3VdaToKw65kfNiDp8b33zMrK6rVq1arnQqGw0NbWNpumaY5EImmhUCicNOG2uh14eHjc8PHxua35Oz4+/gMtEQbDMEzl6el5l8PhKM0ZUFBQ0Mno6Oj52mKQUql0ysrK6tiyZct4LW5mq0ntQ1GUTWlpaftbt261jYqKUmkZDjCt/1YggUCQ+9FHHy0yZtXTvpdhGG5BQUFgQUFBoLFNB8Ow8r59++5otGZeQ8napoe03GMn4hSNWh19uhG8JtKN/2AYhl9eXt66vLy8dWFhoUnu06pVq4uzZs2aopHLEUJYbGzsFC2LFkMQhKxnz567zR2Uq6trEpfLLaIoSqz2lAUMwwhv3bo1b+rUqZ9rWbhwAzu+WVGOfD4/b/HixX24XG61ug2px0xxOBx5rSrpDAK1EjBlKoHdyO6uZ17sHurl38I6uzJ97/4yaE7/AKfIamaXqHLvavlBJ4ZhCqFQmD5mzJjZCxYsGInj+D9iU25urp9cLnehaVqIEOICADCCIEo8PDziLOifbteu3UWNSIMQwhiG4SYnJw8jSVKguW78+PHfeXt7n+XxeHkaY4C54/f29j67dOnStk5OTukmFju3UmuVYfhcLre8VjkISTFWFkx8pR0bBVzTOPR0scpI2j64eVxqcec/zqb/+9D11xONJaWzE3HAf2cHzJ7Ut/lBAReX18DnsRggfD6/1M7OLk4ul7uq3TDey6yoAZDalVuJ47jU3d39Ue/evXf4+vpG6fORevjw4QiBQJDD4/EKNOKJu7t7HI/Hs2iXDg4O3vv8+fNghmF4mtNsDMPI9PT0bv7+/jcBAMDe3j5z9uzZk0pLS50TExOH3r9/f1JBQYEfRVHWmhgRzW6ujn8v8/f3v9qvX7/NzZs3f2zOOHAcl4pEomSdDYXRTiekjQsIIQ0hZNRZHEtrrQSbxv+ovii3+sZXWKp0kshI8dtSlQNJMxwbAafU1opT4ubAzzaW7cRYnwxCGI7BSlm8GIQwzIyNgmEYQqlUCuVyuS1FUXySJPkqlUoAIUQEQSh4PJ7UyspKwufzS40lRDCwA8N366p28vrSNE2Ul5fbSaVSR6VSaQUhRDweTyoSid5aWVkV1XZ+YbZGIUssGRPn2E/AEkssQFhiiQUISyyxAGGJJRYgLLHEAoQllliAsMQSCxCWWGIBwhJLLEBYYoklFiAsscQChCWWqkz1JmBKpVIJVSqVgMPhKCx1rQbgnUerXC63gRAyAoGg1BKvT50yYIyh3y3pk6Zpjlwut1W/j9SMW6BW2Cej83wIAIDmjKEyY9V6fwT+F8mJ/vdJLO/LUq9bY/eZ+/56aoq893dlPIHrFCAIIezx48cjLl269LVUKnVFCHEhhCqBQFDUu3fvv3r37r3X1EsplUpRRETEsri4uKk0TVsBAACHwynr1avXtpCQkA2mYqgBAGDfvn3bX7582QfDMMVXX30Vol11SSqVOv3222+3aJrmzZw5c7Knp2eMqXeKjIycd/v27bkURVlDCFVWVlYFAwYM2Ny1a9ejht4nNTW1b1hY2F8QQua7774L5vP5JZrfjhw58sfz588HOzs7P5o/f/4kQ89++/Ztq23bth0FAIA5c+ZMcnJyemnGxoJv2LDhiCZToXZuLHXSBjRnzpyp9vb2Wab6Ki8vt924ceNxiqJsunXrFjZkyJDN5qyDoqKi5tu3bz9MUZSoS5cuh0JDQ99LnXr+/Plv4+LipggEgtxvvvlmiKH3+PXXX89pwnzV5eb+iUOHEDLz588f5+DgkNkgRCySJAXbtm07eezYsT8lEom/uo63gKIo25KSkjb379+faiqtjUQicfvll19iY2JivlCpVC40TQspirIpLy9vdeXKlfX//e9/YxQKhbUZ3MtBKpX6l5aWdjp06NAO3d/lcnlzhULRypysheHh4esiIyOXq8FBIYS4JSUl3rdv355t7H0QQphCoXBTKivm26IoSiSXy1tqCmga60Mul3vI5fKWAJgfvUmSpK1KpbJTqVR2SqXSRaVSOZAkaUNRlDVJkjbmVnt69OhRqFwubyWXyz1iYmI+o2maY+5GqVAoXOVyefM7d+4sycvL89XhxnyVSuWkUqkcTbyHWKVSOapUKnulUtlMoVA0VyqVzVQqlTNJkmJQidRKRB1xDrhjx47DOTk5Xbhc7ls7O7v0vn377nZycsqQyWR2ycnJA9q1a3cZGImyoyiKt3Xr1nMKhcKBy+XmDRgwYGO7du0uIITw2NjYqTExMbMLCws7bN26NWLJkiV9jS1OCCGN43g5wzDctLS0IUlJSYPatGlzVZs1mxPaqlAobOLj4z/CcVzau3fvP/v27fuXUqm0Sk5ODnFxcXlu7H00VWPVAU3vXYdhmIogiBIzc8oyloThYhhGz58/fwoAACsoKPA8dOjQRgAACAkJ2di+ffvLAAAgEonemrPIb968OReAd2l4GIbhpqSk9GrTps0Nc8ahngM5wzC8/fv37/v66697abitOsJPauy9MAyjFy9ePErzHmFhYTtomuYNGTLklw4dOpwDwHByuXoHkKdPnw7Pzs4OxnFc2rZt27MTJkxYrr2Azal6FBsbO6WsrKwFQRBlY8eO/SooKChc89vo0aOXcTic8qioqC/y8vI6paSk9DOWz0l7h6RpWnT06NHty5Yt66DO4IfUNSW4wERYrFKptGIYRgghVPn7+0fy+fwyPp9f1r1794Pm7RuIYBi9EhiyYPOxOO7fxsamAAAACIJQqsVUzNXVNcXGxsbsEnVZWVntVCqVDY7j5TY2NvklJSVukZGR880FCEII14S6SiQSz9u3b8/s06fPTg341CG4HHPfg6IoK4QQ19XV9Zmtre2bBmXFioyM/AIAwOA4Lh89evSaymQIvH379mwMw0gulysJDAw8rft7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" alt="Techbase Consultant Services">
</div>
<div class="l-hero-text">
<div class="badge">Python · Lesson 14</div>
<h1>Python While Loops, For Loops, and the range() Function</h1>
<div class="l-hero-sub">16 phases · Build: Stage 1: Setup · Define the Student Scores</div>
</div>
</div>
</div>
<section style="background:linear-gradient(160deg,#ecfdf5 0%,#f8fafc 55%,#d1fae5 100%);padding-bottom:1.5rem;border-bottom:1px solid var(--br)">
<div style="max-width:880px;margin:0 auto;padding:0 1.5rem"><div class="wb"><h2>👋 Welcome to Lesson 14</h2><div style="font-size:1rem;line-height:1.85;color:var(--t2)"><p class="v2-p">Welcome to Lesson 14! Today we are going to learn one of the most powerful ideas in programming: <strong>loops</strong>.</p>
<p class="v2-p">Imagine you are at the Balogun Market in Lagos and you need to count every customer who enters the shop. Would you write a separate line of code for each customer? No · that would take forever! Instead, you use a <strong>loop</strong>: a tool that tells Python to repeat a set of instructions automatically.</p>
<p class="v2-p">Python has <strong>two types of loops</strong>:</p>
<ol class="v2-ol"><li><strong>The <code>while</code> loop</strong> · keeps repeating as long as a condition is true</li><li><strong>The <code>for</code> loop</strong> · repeats once for each item in a sequence (like a list, string, or range of numbers)</li></ol>
<p class="v2-p">We will also learn about the <strong><code>range()</code> function</strong>, which is Python's built-in tool for generating sequences of numbers. It works hand-in-hand with loops and is used everywhere in real Python code.</p>
<h3 class="v2-h3">What You Will Learn in This Lesson</h3>
<p class="v2-p">By the end of this lesson, you will be able to:</p>
<ul class="v2-ul"><li>Explain what a loop is and why it is useful</li><li>Write a <code>while</code> loop with a proper condition and counter</li><li>Use <code>break</code> and <code>continue</code> to control loop behaviour</li><li>Add an <code>else</code> block to both <code>while</code> and <code>for</code> loops</li><li>Write a <code>for</code> loop that iterates over lists, strings, and ranges of numbers</li><li>Use <code>range()</code> with one, two, or three arguments</li><li>Loop through a string character by character</li><li>Write nested loops (a loop inside a loop)</li><li>Use the <code>pass</code> statement inside an empty loop</li><li>Convert a <code>range</code> to a list and slice it</li><li>Test membership in a <code>range</code> using <code>in</code></li><li>Use <code>len()</code> to get the number of elements in a <code>range</code></li><li>Build a practical mini-project using all three tools</li></ul>
<hr class="v2-hr"></div><div class="wm"><span>📚 16 phases</span><span>🏗️ Stage 1: Setup · Define the Student Scores</span><span>🐍 GitHub Repo</span></div></div></div>
</section>
<main style="max-width:880px;margin:0 auto;padding:2rem 1.5rem 5rem">
<div class="phase" id="phase1"><div class="ph"><div class="pn">Phase 1 of 16</div><div class="pt">Lesson Introduction</div><div class="pc" id="chk1"></div></div><div class="pb2"><p class="v2-p">Welcome to Lesson 14! Today we are going to learn one of the most powerful ideas in programming: <strong>loops</strong>.</p>
<p class="v2-p">Imagine you are at the Balogun Market in Lagos and you need to count every customer who enters the shop. Would you write a separate line of code for each customer? No · that would take forever! Instead, you use a <strong>loop</strong>: a tool that tells Python to repeat a set of instructions automatically.</p>
<p class="v2-p">Python has <strong>two types of loops</strong>:</p>
<ol class="v2-ol"><li><strong>The <code>while</code> loop</strong> · keeps repeating as long as a condition is true</li><li><strong>The <code>for</code> loop</strong> · repeats once for each item in a sequence (like a list, string, or range of numbers)</li></ol>
<p class="v2-p">We will also learn about the <strong><code>range()</code> function</strong>, which is Python's built-in tool for generating sequences of numbers. It works hand-in-hand with loops and is used everywhere in real Python code.</p>
<h3 class="v2-h3">What You Will Learn in This Lesson</h3>
<p class="v2-p">By the end of this lesson, you will be able to:</p>
<ul class="v2-ul"><li>Explain what a loop is and why it is useful</li><li>Write a <code>while</code> loop with a proper condition and counter</li><li>Use <code>break</code> and <code>continue</code> to control loop behaviour</li><li>Add an <code>else</code> block to both <code>while</code> and <code>for</code> loops</li><li>Write a <code>for</code> loop that iterates over lists, strings, and ranges of numbers</li><li>Use <code>range()</code> with one, two, or three arguments</li><li>Loop through a string character by character</li><li>Write nested loops (a loop inside a loop)</li><li>Use the <code>pass</code> statement inside an empty loop</li><li>Convert a <code>range</code> to a list and slice it</li><li>Test membership in a <code>range</code> using <code>in</code></li><li>Use <code>len()</code> to get the number of elements in a <code>range</code></li><li>Build a practical mini-project using all three tools</li></ul>
<hr class="v2-hr"><div class="task-box"><div class="task-lbl">✏️ Your Task</div><div class="task-body">Practise what you just learned about <strong>Lesson Introduction</strong>. Open your editor, type the examples above by hand, modify them, and observe what changes.</div></div><button class="ub" onclick="unlockNext(1)">Start Lesson ✓</button></div></div>
<div class="phase locked" id="phase2"><div class="ph"><div class="pn">Phase 2 of 16</div><div class="pt">Prerequisite Concepts</div><div class="pc" id="chk2"></div></div><div class="pb2"><p class="v2-p">Before we continue, let us quickly review ideas you have already learned. These concepts will appear throughout this lesson.</p>
<h3 class="v2-h3">Variables and Assignment</h3>
<p class="v2-p">A variable stores a value. You set it with <code>=</code>.</p>
<div class="v2-code-wrap"><div class="v2-code-bar"><span class="v2-dot r"></span><span class="v2-dot y"></span><span class="v2-dot g"></span><span class="v2-code-lang">python</span><button class="copy-btn" onclick="copyCode(this)">❐ Copy</button></div><div class="v2-code-body"><pre><code>i = 1 # i is a variable holding the integer 1
name = "Adaeze"</code></pre></div></div>
<h3 class="v2-h3">Conditions and Comparison Operators</h3>
<p class="v2-p">A <strong>condition</strong> is a question that Python answers with <code>True</code> or <code>False</code>. You already know these from the <code>if</code> statement lesson.</p>
<div class="v2-table-wrap"><table class="v2-table"><thead><tr><th>Operator</th><th>Meaning</th><th>Example</th><th>Result</th></tr></thead><tbody><tr><td><code><</code></td><td>Less than</td><td><code>3 < 6</code></td><td><code>True</code></td></tr><tr><td><code>></code></td><td>Greater than</td><td><code>7 > 10</code></td><td><code>False</code></td></tr><tr><td><code>==</code></td><td>Equal to</td><td><code>5 == 5</code></td><td><code>True</code></td></tr><tr><td><code>!=</code></td><td>Not equal to</td><td><code>4 != 4</code></td><td><code>False</code></td></tr><tr><td><code><=</code></td><td>Less than or equal</td><td><code>6 <= 6</code></td><td><code>True</code></td></tr><tr><td><code>>=</code></td><td>Greater than or equal</td><td><code>8 >= 9</code></td><td><code>False</code></td></tr></tbody></table></div>
<h3 class="v2-h3">The <code>print()</code> Function</h3>
<p class="v2-p">You use <code>print()</code> to display a value or message on the screen.</p>
<div class="v2-code-wrap"><div class="v2-code-bar"><span class="v2-dot r"></span><span class="v2-dot y"></span><span class="v2-dot g"></span><span class="v2-code-lang">python</span><button class="copy-btn" onclick="copyCode(this)">❐ Copy</button></div><div class="v2-code-body"><pre><code>print("Good morning Lagos!")
print(42)</code></pre></div></div>
<h3 class="v2-h3">Lists</h3>
<p class="v2-p">A list is an ordered collection of items.</p>
<div class="v2-code-wrap"><div class="v2-code-bar"><span class="v2-dot r"></span><span class="v2-dot y"></span><span class="v2-dot g"></span><span class="v2-code-lang">python</span><button class="copy-btn" onclick="copyCode(this)">❐ Copy</button></div><div class="v2-code-body"><pre><code>foods = ["jollof rice", "egusi soup", "suya"]</code></pre></div></div>
<p class="v2-p">You already know all of this. Now let us put it to work inside loops!</p>
<hr class="v2-hr"><div class="task-box"><div class="task-lbl">✏️ Your Task</div><div class="task-body">Practise what you just learned about <strong>Prerequisite Concepts</strong>. Open your editor, type the examples above by hand, modify them, and observe what changes.</div></div><button class="ub" onclick="unlockNext(2)">Phase Complete — Unlock Next ✓</button></div></div>
<div class="phase locked" id="phase3"><div class="ph"><div class="pn">Phase 3 of 16</div><div class="pt">Section 1: What Is a Loop?</div><div class="pc" id="chk3"></div></div><div class="pb2"><h3 class="v2-h3">Why Does a Loop Exist?</h3>
<p class="v2-p">Imagine Emeka is a teacher at a secondary school in Abuja. He wants to print the name of every student in his class. The class has 30 students. Without a loop, he would have to write 30 separate <code>print()</code> lines. That is tedious, error-prone, and wastes time.</p>
<p class="v2-p">A <strong>loop</strong> is an instruction that tells Python:</p>
<blockquote class="v2-bq"><p class="v2-p"><em>"Run this block of code repeatedly. Keep going until I tell you to stop."</em></p></blockquote>
<p class="v2-p">This is the core idea. Everything else in this lesson builds on top of it.</p>
<hr class="v2-hr"><div class="task-box"><div class="task-lbl">✏️ Your Task</div><div class="task-body">Practise what you just learned about <strong>: What Is a Loop?</strong>. Open your editor, type the examples above by hand, modify them, and observe what changes.</div></div><button class="ub" onclick="unlockNext(3)">Phase Complete — Unlock Next ✓</button></div></div>
<div class="phase locked" id="phase4"><div class="ph"><div class="pn">Phase 4 of 16</div><div class="pt">Section 2: The `while` Loop</div><div class="pc" id="chk4"></div></div><div class="pb2"><h3 class="v2-h3">What Is a <code>while</code> Loop?</h3>
<p class="v2-p">A <strong><code>while</code> loop</strong> checks a condition <strong>before</strong> every repetition. As long as the condition is <code>True</code>, the loop body keeps running. The moment the condition becomes <code>False</code>, the loop stops.</p>
<p class="v2-p">Think of it like a security guard at a Lagos bank: <em>"While the queue has customers, keep serving the next person."</em></p>
<h3 class="v2-h3">The Syntax (Structure)</h3>
<div class="v2-code-wrap"><div class="v2-code-bar"><span class="v2-dot r"></span><span class="v2-dot y"></span><span class="v2-dot g"></span><span class="v2-code-lang">python</span><button class="copy-btn" onclick="copyCode(this)">❐ Copy</button></div><div class="v2-code-body"><pre><code>while condition:
# code to repeat</code></pre></div></div>
<ul class="v2-ul"><li><code>while</code> · the keyword that starts the loop</li><li><code>condition</code> · any True/False expression (just like in an <code>if</code> statement)</li><li><code>:</code> · the colon that opens the loop body</li><li>indented code · the instructions that run on every repetition</li></ul>
<h3 class="v2-h3">Simple Example 1: Count from 1 to 5</h3>
<div class="v2-code-wrap"><div class="v2-code-bar"><span class="v2-dot r"></span><span class="v2-dot y"></span><span class="v2-dot g"></span><span class="v2-code-lang">python</span><button class="copy-btn" onclick="copyCode(this)">❐ Copy</button></div><div class="v2-code-body"><pre><code>i = 1
while i < 6:
print(i)
i += 1</code></pre></div></div>
<p class="v2-p"><strong>Expected Output:</strong></p>
<div class="v2-code-wrap"><div class="v2-code-bar"><span class="v2-dot r"></span><span class="v2-dot y"></span><span class="v2-dot g"></span><span class="v2-code-lang">code</span><button class="copy-btn" onclick="copyCode(this)">❐ Copy</button></div><div class="v2-code-body"><pre><code>1
2
3
4
5</code></pre></div></div>
<p class="v2-p">Let us go <strong>line by line</strong>:</p>
<ul class="v2-ul"><li><code>i = 1</code> · We create a variable <code>i</code> and start it at 1. This is called the <strong>counter variable</strong> or <strong>loop variable</strong>.</li><li><code>while i < 6:</code> · Python checks: "Is <code>i</code> less than 6?" If yes, enter the loop. If no, skip it entirely.</li><li><code>print(i)</code> · Print the current value of <code>i</code>.</li><li><code>i += 1</code> · This means <code>i = i + 1</code>. We <strong>increase</strong> <code>i</code> by 1. This is called <strong>incrementing</strong> the counter.</li><li>After <code>i += 1</code>, Python goes back to <code>while i < 6:</code> and checks the condition again.</li><li>When <code>i</code> reaches 6, the condition <code>i < 6</code> becomes <code>False</code>, and the loop ends.</li></ul>
<blockquote class="v2-bq"><p class="v2-p"><strong>Very Important:</strong> You <strong>must</strong> update the counter variable inside the loop (<code>i += 1</code>). If you forget, <code>i</code> stays at 1 forever, and the condition <code>i < 6</code> is always <code>True</code>. This creates an <strong>infinite loop</strong> · a loop that never stops. Your program will freeze!</p></blockquote>
<h3 class="v2-h3">Simple Example 2: Countdown from 5 to 1</h3>
<p class="v2-p">Let us count <strong>down</strong> this time:</p>
<div class="v2-code-wrap"><div class="v2-code-bar"><span class="v2-dot r"></span><span class="v2-dot y"></span><span class="v2-dot g"></span><span class="v2-code-lang">python</span><button class="copy-btn" onclick="copyCode(this)">❐ Copy</button></div><div class="v2-code-body"><pre><code>i = 5
while i > 0:
print(i)
i -= 1 # i -= 1 means i = i - 1 (decrement)
print("Liftoff!")</code></pre></div></div>
<p class="v2-p"><strong>Expected Output:</strong></p>
<div class="v2-code-wrap"><div class="v2-code-bar"><span class="v2-dot r"></span><span class="v2-dot y"></span><span class="v2-dot g"></span><span class="v2-code-lang">code</span><button class="copy-btn" onclick="copyCode(this)">❐ Copy</button></div><div class="v2-code-body"><pre><code>5
4
3
2
1
Liftoff!</code></pre></div></div>
<p class="v2-p">Notice: the <code>print("Liftoff!")</code> line is <strong>not</strong> indented, so it runs <strong>after</strong> the loop finishes.</p>
<blockquote class="v2-bq"><p class="v2-p">💡 <strong>Thinking Prompt:</strong> What happens if you change <code>i = 5</code> to <code>i = 3</code>? How many times will the loop run?</p></blockquote>
<hr class="v2-hr"><div class="task-box"><div class="task-lbl">✏️ Your Task</div><div class="task-body">Practise what you just learned about <strong>: The <code>while</code> Loop</strong>. Open your editor, type the examples above by hand, modify them, and observe what changes.</div></div><button class="ub" onclick="unlockNext(4)">Phase Complete — Unlock Next ✓</button></div></div>
<div class="phase locked" id="phase5"><div class="ph"><div class="pn">Phase 5 of 16</div><div class="pt">Section 3: Controlling `while` Loops · `break`, `continue`, and `else`</div><div class="pc" id="chk5"></div></div><div class="pb2"><h3 class="v2-h3">3.1 The <code>break</code> Statement</h3>
<p class="v2-p">The <code>break</code> keyword <strong>immediately exits</strong> the loop · even if the condition is still <code>True</code>. It is like an emergency exit.</p>
<p class="v2-p"><strong>Real-life analogy:</strong> Imagine Ngozi is sampling bottles of groundnut oil in a warehouse. She checks each bottle. The moment she finds a bad one, she <strong>breaks</strong> · she stops checking and reports the problem immediately.</p>
<h4 class="v2-h4">Example: Stop the loop when <code>i</code> equals 3</h4>
<div class="v2-code-wrap"><div class="v2-code-bar"><span class="v2-dot r"></span><span class="v2-dot y"></span><span class="v2-dot g"></span><span class="v2-code-lang">python</span><button class="copy-btn" onclick="copyCode(this)">❐ Copy</button></div><div class="v2-code-body"><pre><code>i = 1
while i < 6:
print(i)
if i == 3:
break
i += 1</code></pre></div></div>
<p class="v2-p"><strong>Expected Output:</strong></p>
<div class="v2-code-wrap"><div class="v2-code-bar"><span class="v2-dot r"></span><span class="v2-dot y"></span><span class="v2-dot g"></span><span class="v2-code-lang">code</span><button class="copy-btn" onclick="copyCode(this)">❐ Copy</button></div><div class="v2-code-body"><pre><code>1
2
3</code></pre></div></div>
<p class="v2-p"><strong>Line-by-line explanation:</strong></p>
<ul class="v2-ul"><li>The loop starts with <code>i = 1</code> and counts up.</li><li>On each repetition, it prints <code>i</code>, then checks <code>if i == 3</code>.</li><li>When <code>i</code> becomes 3, Python hits <code>break</code> and immediately exits the loop.</li><li>The numbers 4 and 5 are never printed.</li></ul>
<blockquote class="v2-bq"><p class="v2-p">⚠️ Notice that <code>i += 1</code> is <strong>after</strong> the <code>if</code> check. So when <code>i</code> is 3, Python prints 3, then hits <code>break</code>, and never reaches <code>i += 1</code>.</p></blockquote>
<hr class="v2-hr">
<h3 class="v2-h3">3.2 The <code>continue</code> Statement</h3>
<p class="v2-p">The <code>continue</code> keyword <strong>skips the rest of the current repetition</strong> and jumps back to check the condition again. It does not exit the loop · it just skips one turn.</p>
<p class="v2-p"><strong>Real-life analogy:</strong> Amaka is reading through 10 exam papers. Whenever she sees a blank paper, she <code>continue</code>s · she skips it and moves on to the next one, without stopping the whole process.</p>
<h4 class="v2-h4">Example: Skip number 3, print everything else from 1 to 5</h4>
<div class="v2-code-wrap"><div class="v2-code-bar"><span class="v2-dot r"></span><span class="v2-dot y"></span><span class="v2-dot g"></span><span class="v2-code-lang">python</span><button class="copy-btn" onclick="copyCode(this)">❐ Copy</button></div><div class="v2-code-body"><pre><code>i = 0
while i < 6:
i += 1
if i == 3:
continue
print(i)</code></pre></div></div>
<p class="v2-p"><strong>Expected Output:</strong></p>
<div class="v2-code-wrap"><div class="v2-code-bar"><span class="v2-dot r"></span><span class="v2-dot y"></span><span class="v2-dot g"></span><span class="v2-code-lang">code</span><button class="copy-btn" onclick="copyCode(this)">❐ Copy</button></div><div class="v2-code-body"><pre><code>1
2
4
5
6</code></pre></div></div>
<p class="v2-p"><strong>Careful study of this code:</strong></p>
<ul class="v2-ul"><li><code>i = 0</code> · We start at 0 this time.</li><li><code>i += 1</code> · This is the <strong>first line inside the loop</strong>. It increments <code>i</code> before anything else.</li><li><code>if i == 3: continue</code> · When <code>i</code> is 3, Python jumps back to <code>while i < 6:</code> without reaching <code>print(i)</code>.</li><li>All other values of <code>i</code> reach <code>print(i)</code> and get printed.</li></ul>
<blockquote class="v2-bq"><p class="v2-p">🔑 <strong>Why does <code>i += 1</code> come before the <code>if</code> check here?</strong> Because if <code>i += 1</code> were after <code>continue</code>, we would never increment <code>i</code> when <code>i == 3</code>. That would create an infinite loop! Always plan where your increment goes.</p></blockquote>
<hr class="v2-hr">
<h3 class="v2-h3">3.3 The <code>else</code> Statement in a <code>while</code> Loop</h3>
<p class="v2-p">Python allows you to attach an <code>else</code> block to a <code>while</code> loop. The <code>else</code> block runs <strong>once</strong> · right after the loop condition becomes <code>False</code> (i.e., when the loop ends naturally).</p>
<p class="v2-p"><strong>Important rule:</strong> The <code>else</code> block does <strong>NOT</strong> run if the loop ends with <code>break</code>.</p>
<h4 class="v2-h4">Example: Count from 1 to 5, then announce the end</h4>
<div class="v2-code-wrap"><div class="v2-code-bar"><span class="v2-dot r"></span><span class="v2-dot y"></span><span class="v2-dot g"></span><span class="v2-code-lang">python</span><button class="copy-btn" onclick="copyCode(this)">❐ Copy</button></div><div class="v2-code-body"><pre><code>i = 1
while i < 6:
print(i)
i += 1
else:
print("i is no longer less than 6")</code></pre></div></div>
<p class="v2-p"><strong>Expected Output:</strong></p>
<div class="v2-code-wrap"><div class="v2-code-bar"><span class="v2-dot r"></span><span class="v2-dot y"></span><span class="v2-dot g"></span><span class="v2-code-lang">code</span><button class="copy-btn" onclick="copyCode(this)">❐ Copy</button></div><div class="v2-code-body"><pre><code>1
2
3
4
5
i is no longer less than 6</code></pre></div></div>
<h4 class="v2-h4">Example: The <code>else</code> block does NOT run after <code>break</code></h4>
<div class="v2-code-wrap"><div class="v2-code-bar"><span class="v2-dot r"></span><span class="v2-dot y"></span><span class="v2-dot g"></span><span class="v2-code-lang">python</span><button class="copy-btn" onclick="copyCode(this)">❐ Copy</button></div><div class="v2-code-body"><pre><code>i = 1
while i < 6:
print(i)
if i == 3:
break
i += 1
else:
print("This will NOT print because break was used!")</code></pre></div></div>
<p class="v2-p"><strong>Expected Output:</strong></p>
<div class="v2-code-wrap"><div class="v2-code-bar"><span class="v2-dot r"></span><span class="v2-dot y"></span><span class="v2-dot g"></span><span class="v2-code-lang">code</span><button class="copy-btn" onclick="copyCode(this)">❐ Copy</button></div><div class="v2-code-body"><pre><code>1
2
3</code></pre></div></div>
<p class="v2-p">The <code>else</code> block is skipped entirely because <code>break</code> ended the loop.</p>
<blockquote class="v2-bq"><p class="v2-p">💡 <strong>Real-world use:</strong> The <code>while-else</code> pattern is great for search tasks. Loop while searching; if found, <code>break</code>. The <code>else</code> block runs only if you finished searching without finding it · which means "not found."</p></blockquote>
<hr class="v2-hr"><div class="task-box"><div class="task-lbl">✏️ Your Task</div><div class="task-body">Practise what you just learned about <strong>: Controlling <code>while</code> Loops · <code>break</code>, <code>continue</code>, and <code>else</code></strong>. Open your editor, type the examples above by hand, modify them, and observe what changes.</div></div><button class="ub" onclick="unlockNext(5)">Phase Complete — Unlock Next ✓</button></div></div>
<div class="phase locked" id="phase6"><div class="ph"><div class="pn">Phase 6 of 16</div><div class="pt">Section 4: The `for` Loop</div><div class="pc" id="chk6"></div></div><div class="pb2"><h3 class="v2-h3">What Is a <code>for</code> Loop?</h3>
<p class="v2-p">A <strong><code>for</code> loop</strong> is used to <strong>iterate</strong> over a sequence. "Iterate" means to go through each item, one by one.</p>
<p class="v2-p">Think of it like Fatimah checking every stall at a market. She visits <strong>each</strong> stall · no more, no less · and does something at each one.</p>
<p class="v2-p">A <code>for</code> loop works on:</p>
<ul class="v2-ul"><li>Lists</li><li>Tuples</li><li>Strings (every character is treated as a single item)</li><li>Dictionaries</li><li>Sets</li><li>Ranges (we will cover this soon)</li></ul>
<p class="v2-p">The <strong>key difference from <code>while</code>:</strong> A <code>for</code> loop does not need you to manage a counter variable manually. Python automatically picks up the next item from the sequence on each turn.</p>
<h3 class="v2-h3">The Syntax</h3>
<div class="v2-code-wrap"><div class="v2-code-bar"><span class="v2-dot r"></span><span class="v2-dot y"></span><span class="v2-dot g"></span><span class="v2-code-lang">python</span><button class="copy-btn" onclick="copyCode(this)">❐ Copy</button></div><div class="v2-code-body"><pre><code>for variable in sequence:
# code to run for each item</code></pre></div></div>
<ul class="v2-ul"><li><code>for</code> · keyword that starts the loop</li><li><code>variable</code> · a name you choose; Python puts the current item here on each turn</li><li><code>in</code> · keyword connecting the variable to the sequence</li><li><code>sequence</code> · the list, string, or range to loop through</li><li><code>:</code> · opens the loop body</li><li>indented code · runs once for every item</li></ul>
<h3 class="v2-h3">Simple Example 1: Loop through a list of Nigerian foods</h3>
<div class="v2-code-wrap"><div class="v2-code-bar"><span class="v2-dot r"></span><span class="v2-dot y"></span><span class="v2-dot g"></span><span class="v2-code-lang">python</span><button class="copy-btn" onclick="copyCode(this)">❐ Copy</button></div><div class="v2-code-body"><pre><code>foods = ["jollof rice", "egusi soup", "suya", "puff puff"]
for food in foods:
print(food)</code></pre></div></div>
<p class="v2-p"><strong>Expected Output:</strong></p>
<div class="v2-code-wrap"><div class="v2-code-bar"><span class="v2-dot r"></span><span class="v2-dot y"></span><span class="v2-dot g"></span><span class="v2-code-lang">code</span><button class="copy-btn" onclick="copyCode(this)">❐ Copy</button></div><div class="v2-code-body"><pre><code>jollof rice
egusi soup
suya
puff puff</code></pre></div></div>
<p class="v2-p"><strong>What is happening here?</strong></p>
<ul class="v2-ul"><li>On Turn 1: Python sets <code>food = "jollof rice"</code> and runs <code>print(food)</code>.</li><li>On Turn 2: Python sets <code>food = "egusi soup"</code> and runs <code>print(food)</code>.</li><li>This continues until every item in the list has been visited.</li><li>The loop ends automatically. No <code>i += 1</code> needed!</li></ul>
<h3 class="v2-h3">Simple Example 2: Loop through names</h3>
<div class="v2-code-wrap"><div class="v2-code-bar"><span class="v2-dot r"></span><span class="v2-dot y"></span><span class="v2-dot g"></span><span class="v2-code-lang">python</span><button class="copy-btn" onclick="copyCode(this)">❐ Copy</button></div><div class="v2-code-body"><pre><code>names = ["Chidi", "Aisha", "Emeka", "Ngozi"]
for name in names:
print("Hello,", name)</code></pre></div></div>
<p class="v2-p"><strong>Expected Output:</strong></p>
<div class="v2-code-wrap"><div class="v2-code-bar"><span class="v2-dot r"></span><span class="v2-dot y"></span><span class="v2-dot g"></span><span class="v2-code-lang">code</span><button class="copy-btn" onclick="copyCode(this)">❐ Copy</button></div><div class="v2-code-body"><pre><code>Hello, Chidi
Hello, Aisha
Hello, Emeka
Hello, Ngozi</code></pre></div></div>
<hr class="v2-hr"><div class="task-box"><div class="task-lbl">✏️ Your Task</div><div class="task-body">Practise what you just learned about <strong>: The <code>for</code> Loop</strong>. Open your editor, type the examples above by hand, modify them, and observe what changes.</div></div><button class="ub" onclick="unlockNext(6)">Phase Complete — Unlock Next ✓</button></div></div>
<div class="phase locked" id="phase7"><div class="ph"><div class="pn">Phase 7 of 16</div><div class="pt">Section 5: Looping Through a String</div><div class="pc" id="chk7"></div></div><div class="pb2"><p class="v2-p">Strings are sequences of characters, so you can loop through them letter by letter.</p>
<h3 class="v2-h3">Example: Print each letter in a city name</h3>
<div class="v2-code-wrap"><div class="v2-code-bar"><span class="v2-dot r"></span><span class="v2-dot y"></span><span class="v2-dot g"></span><span class="v2-code-lang">python</span><button class="copy-btn" onclick="copyCode(this)">❐ Copy</button></div><div class="v2-code-body"><pre><code>for letter in "Lagos":
print(letter)</code></pre></div></div>
<p class="v2-p"><strong>Expected Output:</strong></p>
<div class="v2-code-wrap"><div class="v2-code-bar"><span class="v2-dot r"></span><span class="v2-dot y"></span><span class="v2-dot g"></span><span class="v2-code-lang">code</span><button class="copy-btn" onclick="copyCode(this)">❐ Copy</button></div><div class="v2-code-body"><pre><code>L
a
g
o
s</code></pre></div></div>
<p class="v2-p">On each turn, <code>letter</code> holds the next character in the string <code>"Lagos"</code>. After the last character <code>"s"</code>, the loop ends.</p>
<h3 class="v2-h3">Example: Count vowels in a word</h3>
<div class="v2-code-wrap"><div class="v2-code-bar"><span class="v2-dot r"></span><span class="v2-dot y"></span><span class="v2-dot g"></span><span class="v2-code-lang">python</span><button class="copy-btn" onclick="copyCode(this)">❐ Copy</button></div><div class="v2-code-body"><pre><code>word = "Abuja"
vowels = "aeiouAEIOU"
count = 0
for letter in word:
if letter in vowels:
count += 1
print("Number of vowels:", count)</code></pre></div></div>
<p class="v2-p"><strong>Expected Output:</strong></p>
<div class="v2-code-wrap"><div class="v2-code-bar"><span class="v2-dot r"></span><span class="v2-dot y"></span><span class="v2-dot g"></span><span class="v2-code-lang">code</span><button class="copy-btn" onclick="copyCode(this)">❐ Copy</button></div><div class="v2-code-body"><pre><code>Number of vowels: 3</code></pre></div></div>
<p class="v2-p">(The vowels in "Abuja" are: A, u, a)</p>
<blockquote class="v2-bq"><p class="v2-p">💡 <strong>Thinking Prompt:</strong> What would happen if you change <code>"Abuja"</code> to <code>"Kano"</code>? How many vowels does "Kano" have? Try to predict before running the code.</p></blockquote>
<hr class="v2-hr"><div class="task-box"><div class="task-lbl">✏️ Your Task</div><div class="task-body">Practise what you just learned about <strong>: Looping Through a String</strong>. Open your editor, type the examples above by hand, modify them, and observe what changes.</div></div><button class="ub" onclick="unlockNext(7)">Phase Complete — Unlock Next ✓</button></div></div>
<div class="phase locked" id="phase8"><div class="ph"><div class="pn">Phase 8 of 16</div><div class="pt">Section 6: `break` and `continue` in `for` Loops</div><div class="pc" id="chk8"></div></div><div class="pb2"><p class="v2-p">Just like in <code>while</code> loops, you can use <code>break</code> and <code>continue</code> inside <code>for</code> loops.</p>
<h3 class="v2-h3">6.1 <code>break</code> in a <code>for</code> Loop</h3>
<p class="v2-p"><code>break</code> exits the loop immediately when a condition is met.</p>
<h4 class="v2-h4">Example 1: Stop when you find "banana"</h4>
<div class="v2-code-wrap"><div class="v2-code-bar"><span class="v2-dot r"></span><span class="v2-dot y"></span><span class="v2-dot g"></span><span class="v2-code-lang">python</span><button class="copy-btn" onclick="copyCode(this)">❐ Copy</button></div><div class="v2-code-body"><pre><code>fruits = ["apple", "banana", "cherry"]
for fruit in fruits:
print(fruit)
if fruit == "banana":
break</code></pre></div></div>
<p class="v2-p"><strong>Expected Output:</strong></p>
<div class="v2-code-wrap"><div class="v2-code-bar"><span class="v2-dot r"></span><span class="v2-dot y"></span><span class="v2-dot g"></span><span class="v2-code-lang">code</span><button class="copy-btn" onclick="copyCode(this)">❐ Copy</button></div><div class="v2-code-body"><pre><code>apple
banana</code></pre></div></div>
<p class="v2-p">The loop prints <code>"apple"</code>, then <code>"banana"</code>, then hits <code>break</code> and stops. <code>"cherry"</code> is never printed.</p>
<h4 class="v2-h4">Example 2: Break BEFORE printing</h4>
<div class="v2-code-wrap"><div class="v2-code-bar"><span class="v2-dot r"></span><span class="v2-dot y"></span><span class="v2-dot g"></span><span class="v2-code-lang">python</span><button class="copy-btn" onclick="copyCode(this)">❐ Copy</button></div><div class="v2-code-body"><pre><code>fruits = ["apple", "banana", "cherry"]
for fruit in fruits:
if fruit == "banana":
break
print(fruit)</code></pre></div></div>
<p class="v2-p"><strong>Expected Output:</strong></p>
<div class="v2-code-wrap"><div class="v2-code-bar"><span class="v2-dot r"></span><span class="v2-dot y"></span><span class="v2-dot g"></span><span class="v2-code-lang">code</span><button class="copy-btn" onclick="copyCode(this)">❐ Copy</button></div><div class="v2-code-body"><pre><code>apple</code></pre></div></div>
<p class="v2-p">Here, the <code>if</code> check comes <strong>before</strong> <code>print</code>. So when <code>fruit == "banana"</code>, Python breaks before ever printing <code>"banana"</code>.</p>
<blockquote class="v2-bq"><p class="v2-p">💡 <strong>Thinking Prompt:</strong> Why does Example 1 print "banana" but Example 2 does not? What changed?</p></blockquote>
<hr class="v2-hr">
<h3 class="v2-h3">6.2 <code>continue</code> in a <code>for</code> Loop</h3>
<p class="v2-p"><code>continue</code> skips the current item and moves to the next one.</p>
<h4 class="v2-h4">Example: Print all fruits except "banana"</h4>
<div class="v2-code-wrap"><div class="v2-code-bar"><span class="v2-dot r"></span><span class="v2-dot y"></span><span class="v2-dot g"></span><span class="v2-code-lang">python</span><button class="copy-btn" onclick="copyCode(this)">❐ Copy</button></div><div class="v2-code-body"><pre><code>fruits = ["apple", "banana", "cherry"]
for fruit in fruits:
if fruit == "banana":
continue
print(fruit)</code></pre></div></div>
<p class="v2-p"><strong>Expected Output:</strong></p>
<div class="v2-code-wrap"><div class="v2-code-bar"><span class="v2-dot r"></span><span class="v2-dot y"></span><span class="v2-dot g"></span><span class="v2-code-lang">code</span><button class="copy-btn" onclick="copyCode(this)">❐ Copy</button></div><div class="v2-code-body"><pre><code>apple
cherry</code></pre></div></div>
<p class="v2-p">When <code>fruit == "banana"</code>, Python hits <code>continue</code>, skips <code>print(fruit)</code>, and immediately goes to the next item in the list · which is <code>"cherry"</code>.</p>
<hr class="v2-hr"><div class="task-box"><div class="task-lbl">✏️ Your Task</div><div class="task-body">Practise what you just learned about <strong>: <code>break</code> and <code>continue</code> in <code>for</code> Loops</strong>. Open your editor, type the examples above by hand, modify them, and observe what changes.</div></div><button class="ub" onclick="unlockNext(8)">Phase Complete — Unlock Next ✓</button></div></div>
<div class="phase locked" id="phase9"><div class="ph"><div class="pn">Phase 9 of 16</div><div class="pt">Section 7: The `range()` Function</div><div class="pc" id="chk9"></div></div><div class="pb2"><h3 class="v2-h3">Why Does <code>range()</code> Exist?</h3>
<p class="v2-p">Imagine you want to print the numbers from 1 to 1000. You definitely do not want to type out a list of 1000 numbers! The <code>range()</code> function solves this: it generates a sequence of numbers automatically.</p>
<blockquote class="v2-bq"><p class="v2-p"><strong>What is <code>range()</code>?</strong> <code>range()</code> is a built-in Python function that returns an <strong>immutable sequence of numbers</strong>. "Immutable" means the sequence cannot be changed after it is created. It has its own special data type, also called <code>range</code>.</p></blockquote>
<h3 class="v2-h3">The Syntax</h3>
<div class="v2-code-wrap"><div class="v2-code-bar"><span class="v2-dot r"></span><span class="v2-dot y"></span><span class="v2-dot g"></span><span class="v2-code-lang">python</span><button class="copy-btn" onclick="copyCode(this)">❐ Copy</button></div><div class="v2-code-body"><pre><code>range(start, stop, step)</code></pre></div></div>
<div class="v2-table-wrap"><table class="v2-table"><thead><tr><th>Parameter</th><th>What it means</th><th>Is it required?</th><th>Default value</th></tr></thead><tbody><tr><td><code>start</code></td><td>The first number in the sequence</td><td>Optional</td><td><code>0</code></td></tr><tr><td><code>stop</code></td><td>The sequence ends <strong>before</strong> this number</td><td>Required</td><td> · </td></tr><tr><td><code>step</code></td><td>How much to add each time</td><td>Optional</td><td><code>1</code></td></tr></tbody></table></div>
<h3 class="v2-h3">7.1 <code>range()</code> with One Argument</h3>
<p class="v2-p">When you call <code>range()</code> with only one number, that number is the <strong>stop</strong> value. The sequence starts at 0 and goes <strong>up to but not including</strong> the stop value.</p>
<div class="v2-code-wrap"><div class="v2-code-bar"><span class="v2-dot r"></span><span class="v2-dot y"></span><span class="v2-dot g"></span><span class="v2-code-lang">python</span><button class="copy-btn" onclick="copyCode(this)">❐ Copy</button></div><div class="v2-code-body"><pre><code>x = range(10)
print(list(x))</code></pre></div></div>
<p class="v2-p"><strong>Expected Output:</strong></p>
<div class="v2-code-wrap"><div class="v2-code-bar"><span class="v2-dot r"></span><span class="v2-dot y"></span><span class="v2-dot g"></span><span class="v2-code-lang">code</span><button class="copy-btn" onclick="copyCode(this)">❐ Copy</button></div><div class="v2-code-body"><pre><code>[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]</code></pre></div></div>
<blockquote class="v2-bq"><p class="v2-p">⚠️ <code>range(10)</code> gives you numbers 0 to <strong>9</strong>, not 0 to 10! The stop value is <strong>exclusive</strong> · it is not included.</p></blockquote>
<blockquote class="v2-bq"><p class="v2-p">💡 <strong>Tip:</strong> To display the contents of a <code>range</code>, we wrap it in <code>list()</code>. This converts it to a regular list that <code>print()</code> can show. You will learn more about this below.</p></blockquote>
<h3 class="v2-h3">7.2 <code>range()</code> with Two Arguments</h3>
<p class="v2-p">When you call <code>range()</code> with two numbers, the first is <strong>start</strong> and the second is <strong>stop</strong>.</p>
<div class="v2-code-wrap"><div class="v2-code-bar"><span class="v2-dot r"></span><span class="v2-dot y"></span><span class="v2-dot g"></span><span class="v2-code-lang">python</span><button class="copy-btn" onclick="copyCode(this)">❐ Copy</button></div><div class="v2-code-body"><pre><code>x = range(3, 10)
print(list(x))</code></pre></div></div>
<p class="v2-p"><strong>Expected Output:</strong></p>
<div class="v2-code-wrap"><div class="v2-code-bar"><span class="v2-dot r"></span><span class="v2-dot y"></span><span class="v2-dot g"></span><span class="v2-code-lang">code</span><button class="copy-btn" onclick="copyCode(this)">❐ Copy</button></div><div class="v2-code-body"><pre><code>[3, 4, 5, 6, 7, 8, 9]</code></pre></div></div>
<p class="v2-p">The sequence starts at 3 and goes up to <strong>9</strong> (not 10).</p>
<h3 class="v2-h3">7.3 <code>range()</code> with Three Arguments</h3>
<p class="v2-p">When you call <code>range()</code> with three numbers, the third is the <strong>step</strong> · how much to add each time.</p>
<div class="v2-code-wrap"><div class="v2-code-bar"><span class="v2-dot r"></span><span class="v2-dot y"></span><span class="v2-dot g"></span><span class="v2-code-lang">python</span><button class="copy-btn" onclick="copyCode(this)">❐ Copy</button></div><div class="v2-code-body"><pre><code>x = range(2, 30, 3)
print(list(x))</code></pre></div></div>
<p class="v2-p"><strong>Expected Output:</strong></p>
<div class="v2-code-wrap"><div class="v2-code-bar"><span class="v2-dot r"></span><span class="v2-dot y"></span><span class="v2-dot g"></span><span class="v2-code-lang">code</span><button class="copy-btn" onclick="copyCode(this)">❐ Copy</button></div><div class="v2-code-body"><pre><code>[2, 5, 8, 11, 14, 17, 20, 23, 26, 29]</code></pre></div></div>
<p class="v2-p">Starting at 2, add 3 each time, stop before 30.</p>
<h3 class="v2-h3">7.4 Using <code>range()</code> in a <code>for</code> Loop</h3>
<p class="v2-p">This is the most common use of <code>range()</code>: to run a loop a specific number of times.</p>
<h4 class="v2-h4">Example 1: Print numbers 0 to 5</h4>
<div class="v2-code-wrap"><div class="v2-code-bar"><span class="v2-dot r"></span><span class="v2-dot y"></span><span class="v2-dot g"></span><span class="v2-code-lang">python</span><button class="copy-btn" onclick="copyCode(this)">❐ Copy</button></div><div class="v2-code-body"><pre><code>for x in range(6):
print(x)</code></pre></div></div>
<p class="v2-p"><strong>Expected Output:</strong></p>
<div class="v2-code-wrap"><div class="v2-code-bar"><span class="v2-dot r"></span><span class="v2-dot y"></span><span class="v2-dot g"></span><span class="v2-code-lang">code</span><button class="copy-btn" onclick="copyCode(this)">❐ Copy</button></div><div class="v2-code-body"><pre><code>0
1
2
3
4
5</code></pre></div></div>
<h4 class="v2-h4">Example 2: Print numbers 2 to 5 (using start and stop)</h4>
<div class="v2-code-wrap"><div class="v2-code-bar"><span class="v2-dot r"></span><span class="v2-dot y"></span><span class="v2-dot g"></span><span class="v2-code-lang">python</span><button class="copy-btn" onclick="copyCode(this)">❐ Copy</button></div><div class="v2-code-body"><pre><code>for x in range(2, 6):
print(x)</code></pre></div></div>
<p class="v2-p"><strong>Expected Output:</strong></p>
<div class="v2-code-wrap"><div class="v2-code-bar"><span class="v2-dot r"></span><span class="v2-dot y"></span><span class="v2-dot g"></span><span class="v2-code-lang">code</span><button class="copy-btn" onclick="copyCode(this)">❐ Copy</button></div><div class="v2-code-body"><pre><code>2
3
4
5</code></pre></div></div>
<h4 class="v2-h4">Example 3: Print even numbers from 0 to 20 (using step)</h4>
<div class="v2-code-wrap"><div class="v2-code-bar"><span class="v2-dot r"></span><span class="v2-dot y"></span><span class="v2-dot g"></span><span class="v2-code-lang">python</span><button class="copy-btn" onclick="copyCode(this)">❐ Copy</button></div><div class="v2-code-body"><pre><code>for x in range(0, 21, 2):
print(x)</code></pre></div></div>
<p class="v2-p"><strong>Expected Output:</strong></p>
<div class="v2-code-wrap"><div class="v2-code-bar"><span class="v2-dot r"></span><span class="v2-dot y"></span><span class="v2-dot g"></span><span class="v2-code-lang">code</span><button class="copy-btn" onclick="copyCode(this)">❐ Copy</button></div><div class="v2-code-body"><pre><code>0
2
4
6
8
10
12
14
16
18
20</code></pre></div></div>
<h4 class="v2-h4">Example 4: Count down using a negative step</h4>
<div class="v2-code-wrap"><div class="v2-code-bar"><span class="v2-dot r"></span><span class="v2-dot y"></span><span class="v2-dot g"></span><span class="v2-code-lang">python</span><button class="copy-btn" onclick="copyCode(this)">❐ Copy</button></div><div class="v2-code-body"><pre><code>for x in range(10, 0, -1):
print(x)</code></pre></div></div>
<p class="v2-p"><strong>Expected Output:</strong></p>
<div class="v2-code-wrap"><div class="v2-code-bar"><span class="v2-dot r"></span><span class="v2-dot y"></span><span class="v2-dot g"></span><span class="v2-code-lang">code</span><button class="copy-btn" onclick="copyCode(this)">❐ Copy</button></div><div class="v2-code-body"><pre><code>10
9
8
7
6
5
4
3
2
1</code></pre></div></div>
<p class="v2-p">When the step is <strong>negative</strong>, the sequence counts <strong>down</strong>. Start must be greater than stop for this to work.</p>
<hr class="v2-hr"><div class="task-box"><div class="task-lbl">✏️ Your Task</div><div class="task-body">Practise what you just learned about <strong>: The <code>range()</code> Function</strong>. Open your editor, type the examples above by hand, modify them, and observe what changes.</div></div><button class="ub" onclick="unlockNext(9)">Phase Complete — Unlock Next ✓</button></div></div>
<div class="phase locked" id="phase10"><div class="ph"><div class="pn">Phase 10 of 16</div><div class="pt">Section 8: Advanced `range()` · Converting, Slicing, Membership, and Length</div><div class="pc" id="chk10"></div></div><div class="pb2"><h3 class="v2-h3">8.1 Converting a <code>range</code> to a List</h3>
<p class="v2-p">The <code>range</code> object itself is not a list · it just represents the numbers. To display all the values at once, convert it to a list using <code>list()</code>.</p>
<div class="v2-code-wrap"><div class="v2-code-bar"><span class="v2-dot r"></span><span class="v2-dot y"></span><span class="v2-dot g"></span><span class="v2-code-lang">python</span><button class="copy-btn" onclick="copyCode(this)">❐ Copy</button></div><div class="v2-code-body"><pre><code>print(list(range(5)))
print(list(range(1, 6)))
print(list(range(5, 20, 3)))</code></pre></div></div>
<p class="v2-p"><strong>Expected Output:</strong></p>
<div class="v2-code-wrap"><div class="v2-code-bar"><span class="v2-dot r"></span><span class="v2-dot y"></span><span class="v2-dot g"></span><span class="v2-code-lang">code</span><button class="copy-btn" onclick="copyCode(this)">❐ Copy</button></div><div class="v2-code-body"><pre><code>[0, 1, 2, 3, 4]
[1, 2, 3, 4, 5]
[5, 8, 11, 14, 17]</code></pre></div></div>
<h3 class="v2-h3">8.2 Slicing a <code>range</code></h3>
<p class="v2-p">You can access individual elements of a <code>range</code> using index notation (just like a list), and you can also slice it.</p>
<div class="v2-code-wrap"><div class="v2-code-bar"><span class="v2-dot r"></span><span class="v2-dot y"></span><span class="v2-dot g"></span><span class="v2-code-lang">python</span><button class="copy-btn" onclick="copyCode(this)">❐ Copy</button></div><div class="v2-code-body"><pre><code>r = range(10)
print(r[2]) # the item at index 2
print(r[:3]) # a new range from index 0 up to (not including) 3</code></pre></div></div>
<p class="v2-p"><strong>Expected Output:</strong></p>
<div class="v2-code-wrap"><div class="v2-code-bar"><span class="v2-dot r"></span><span class="v2-dot y"></span><span class="v2-dot g"></span><span class="v2-code-lang">code</span><button class="copy-btn" onclick="copyCode(this)">❐ Copy</button></div><div class="v2-code-body"><pre><code>2
range(0, 3)</code></pre></div></div>
<ul class="v2-ul"><li><code>r[2]</code> gives you the <strong>value</strong> at position 2, which is <code>2</code> (since the range starts at 0).</li><li><code>r[:3]</code> gives you a <strong>new range object</strong> · <code>range(0, 3)</code> · not a list.</li></ul>
<h3 class="v2-h3">8.3 Testing Membership with <code>in</code></h3>
<p class="v2-p">You can check whether a number is inside a <code>range</code> using the <code>in</code> operator.</p>
<div class="v2-code-wrap"><div class="v2-code-bar"><span class="v2-dot r"></span><span class="v2-dot y"></span><span class="v2-dot g"></span><span class="v2-code-lang">python</span><button class="copy-btn" onclick="copyCode(this)">❐ Copy</button></div><div class="v2-code-body"><pre><code>r = range(0, 10, 2)
print(list(r))
print(6 in r)
print(7 in r)</code></pre></div></div>
<p class="v2-p"><strong>Expected Output:</strong></p>
<div class="v2-code-wrap"><div class="v2-code-bar"><span class="v2-dot r"></span><span class="v2-dot y"></span><span class="v2-dot g"></span><span class="v2-code-lang">code</span><button class="copy-btn" onclick="copyCode(this)">❐ Copy</button></div><div class="v2-code-body"><pre><code>[0, 2, 4, 6, 8]
True
False</code></pre></div></div>
<ul class="v2-ul"><li><code>6 in r</code> is <code>True</code> because 6 is in the sequence <code>[0, 2, 4, 6, 8]</code>.</li><li><code>7 in r</code> is <code>False</code> because 7 is not in that sequence (we skip odd numbers with step 2).</li></ul>
<h3 class="v2-h3">8.4 Getting the Length of a <code>range</code></h3>
<p class="v2-p">Use <code>len()</code> to find out how many numbers are in a range.</p>
<div class="v2-code-wrap"><div class="v2-code-bar"><span class="v2-dot r"></span><span class="v2-dot y"></span><span class="v2-dot g"></span><span class="v2-code-lang">python</span><button class="copy-btn" onclick="copyCode(this)">❐ Copy</button></div><div class="v2-code-body"><pre><code>r = range(0, 10, 2)
print(len(r))</code></pre></div></div>
<p class="v2-p"><strong>Expected Output:</strong></p>
<div class="v2-code-wrap"><div class="v2-code-bar"><span class="v2-dot r"></span><span class="v2-dot y"></span><span class="v2-dot g"></span><span class="v2-code-lang">code</span><button class="copy-btn" onclick="copyCode(this)">❐ Copy</button></div><div class="v2-code-body"><pre><code>5</code></pre></div></div>
<p class="v2-p">The range <code>[0, 2, 4, 6, 8]</code> has 5 numbers, so <code>len(r)</code> returns 5.</p>
<hr class="v2-hr"><div class="task-box"><div class="task-lbl">✏️ Your Task</div><div class="task-body">Practise what you just learned about <strong>: Advanced <code>range()</code> · Converting, Slicing, Membership, and Length</strong>. Open your editor, type the examples above by hand, modify them, and observe what changes.</div></div><button class="ub" onclick="unlockNext(10)">Phase Complete — Unlock Next ✓</button></div></div>
<div class="phase locked" id="phase11"><div class="ph"><div class="pn">Phase 11 of 16</div><div class="pt">Section 9: `else` in a `for` Loop</div><div class="pc" id="chk11"></div></div><div class="pb2"><p class="v2-p">Just like with <code>while</code>, you can add an <code>else</code> block to a <code>for</code> loop. It runs <strong>once</strong> after the loop has finished iterating through all items · but only if the loop was not ended by a <code>break</code>.</p>
<h3 class="v2-h3">Example 1: Normal completion · <code>else</code> runs</h3>
<div class="v2-code-wrap"><div class="v2-code-bar"><span class="v2-dot r"></span><span class="v2-dot y"></span><span class="v2-dot g"></span><span class="v2-code-lang">python</span><button class="copy-btn" onclick="copyCode(this)">❐ Copy</button></div><div class="v2-code-body"><pre><code>for x in range(6):
print(x)
else:
print("Finally finished!")</code></pre></div></div>
<p class="v2-p"><strong>Expected Output:</strong></p>
<div class="v2-code-wrap"><div class="v2-code-bar"><span class="v2-dot r"></span><span class="v2-dot y"></span><span class="v2-dot g"></span><span class="v2-code-lang">code</span><button class="copy-btn" onclick="copyCode(this)">❐ Copy</button></div><div class="v2-code-body"><pre><code>0
1
2
3
4
5
Finally finished!</code></pre></div></div>
<h3 class="v2-h3">Example 2: Loop broken early · <code>else</code> does NOT run</h3>
<div class="v2-code-wrap"><div class="v2-code-bar"><span class="v2-dot r"></span><span class="v2-dot y"></span><span class="v2-dot g"></span><span class="v2-code-lang">python</span><button class="copy-btn" onclick="copyCode(this)">❐ Copy</button></div><div class="v2-code-body"><pre><code>for x in range(6):
if x == 3:
break
print(x)
else:
print("Finally finished!")</code></pre></div></div>
<p class="v2-p"><strong>Expected Output:</strong></p>
<div class="v2-code-wrap"><div class="v2-code-bar"><span class="v2-dot r"></span><span class="v2-dot y"></span><span class="v2-dot g"></span><span class="v2-code-lang">code</span><button class="copy-btn" onclick="copyCode(this)">❐ Copy</button></div><div class="v2-code-body"><pre><code>0
1
2</code></pre></div></div>
<p class="v2-p">The <code>else</code> block is skipped because <code>break</code> ended the loop at <code>x == 3</code>.</p>
<blockquote class="v2-bq"><p class="v2-p">💡 <strong>Real-world use:</strong> This pattern is common in search tasks. You loop through a list looking for something. If you find it, you <code>break</code>. The <code>else</code> block runs only if you went through the entire list and never found it.</p></blockquote>
<hr class="v2-hr"><div class="task-box"><div class="task-lbl">✏️ Your Task</div><div class="task-body">Practise what you just learned about <strong>: <code>else</code> in a <code>for</code> Loop</strong>. Open your editor, type the examples above by hand, modify them, and observe what changes.</div></div><button class="ub" onclick="unlockNext(11)">Phase Complete — Unlock Next ✓</button></div></div>
<div class="phase locked" id="phase12"><div class="ph"><div class="pn">Phase 12 of 16</div><div class="pt">Section 10: Nested Loops</div><div class="pc" id="chk12"></div></div><div class="pb2"><p class="v2-p">A <strong>nested loop</strong> is a loop inside another loop. The inner loop runs <strong>completely</strong> for every single step of the outer loop.</p>
<p class="v2-p"><strong>Real-life analogy:</strong> Think of Damilola visiting every floor of a building in Lagos, and on each floor she knocks on every office door. For each floor (outer loop), she knocks on every door (inner loop).</p>
<h3 class="v2-h3">The Syntax</h3>
<div class="v2-code-wrap"><div class="v2-code-bar"><span class="v2-dot r"></span><span class="v2-dot y"></span><span class="v2-dot g"></span><span class="v2-code-lang">python</span><button class="copy-btn" onclick="copyCode(this)">❐ Copy</button></div><div class="v2-code-body"><pre><code>for outer_item in outer_sequence:
for inner_item in inner_sequence:
# this code runs for every combination</code></pre></div></div>
<h3 class="v2-h3">Example 1: Print combinations of colours and items</h3>
<div class="v2-code-wrap"><div class="v2-code-bar"><span class="v2-dot r"></span><span class="v2-dot y"></span><span class="v2-dot g"></span><span class="v2-code-lang">python</span><button class="copy-btn" onclick="copyCode(this)">❐ Copy</button></div><div class="v2-code-body"><pre><code>colours = ["red", "green", "blue"]
items = ["bag", "shoe"]
for colour in colours:
for item in items:
print(colour, item)</code></pre></div></div>
<p class="v2-p"><strong>Expected Output:</strong></p>
<div class="v2-code-wrap"><div class="v2-code-bar"><span class="v2-dot r"></span><span class="v2-dot y"></span><span class="v2-dot g"></span><span class="v2-code-lang">code</span><button class="copy-btn" onclick="copyCode(this)">❐ Copy</button></div><div class="v2-code-body"><pre><code>red bag
red shoe
green bag
green shoe
blue bag
blue shoe</code></pre></div></div>
<p class="v2-p">For every colour (3 colours), Python goes through all items (2 items). Total combinations: 3 × 2 = 6 lines.</p>
<h3 class="v2-h3">Example 2: Multiplication table for 3 using nested loops</h3>
<div class="v2-code-wrap"><div class="v2-code-bar"><span class="v2-dot r"></span><span class="v2-dot y"></span><span class="v2-dot g"></span><span class="v2-code-lang">python</span><button class="copy-btn" onclick="copyCode(this)">❐ Copy</button></div><div class="v2-code-body"><pre><code>for i in range(1, 4): # outer loop: i goes 1, 2, 3
for j in range(1, 6): # inner loop: j goes 1, 2, 3, 4, 5
print(i, "x", j, "=", i * j)
print("---") # printed after each inner loop finishes</code></pre></div></div>
<p class="v2-p"><strong>Expected Output:</strong></p>
<div class="v2-code-wrap"><div class="v2-code-bar"><span class="v2-dot r"></span><span class="v2-dot y"></span><span class="v2-dot g"></span><span class="v2-code-lang">code</span><button class="copy-btn" onclick="copyCode(this)">❐ Copy</button></div><div class="v2-code-body"><pre><code>1 x 1 = 1
1 x 2 = 2
1 x 3 = 3
1 x 4 = 4
1 x 5 = 5
---
2 x 1 = 2
2 x 2 = 4
2 x 3 = 6
2 x 4 = 8
2 x 5 = 10
---
3 x 1 = 3
3 x 2 = 6
3 x 3 = 9
3 x 4 = 12
3 x 5 = 15
---</code></pre></div></div>
<hr class="v2-hr"><div class="task-box"><div class="task-lbl">✏️ Your Task</div><div class="task-body">Practise what you just learned about <strong>: Nested Loops</strong>. Open your editor, type the examples above by hand, modify them, and observe what changes.</div></div><button class="ub" onclick="unlockNext(12)">Phase Complete — Unlock Next ✓</button></div></div>
<div class="phase locked" id="phase13"><div class="ph"><div class="pn">Phase 13 of 16</div><div class="pt">Section 11: The `pass` Statement in Loops</div><div class="pc" id="chk13"></div></div><div class="pb2"><p class="v2-p">A <code>for</code> loop (or <code>while</code> loop) <strong>cannot be empty</strong>. If you write a loop with no body, Python will give you a <code>SyntaxError</code>. But sometimes, while you are planning your code, you want to create a loop body you have not written yet. The <code>pass</code> statement acts as a placeholder.</p>
<div class="v2-code-wrap"><div class="v2-code-bar"><span class="v2-dot r"></span><span class="v2-dot y"></span><span class="v2-dot g"></span><span class="v2-code-lang">python</span><button class="copy-btn" onclick="copyCode(this)">❐ Copy</button></div><div class="v2-code-body"><pre><code>for x in [0, 1, 2]:
pass</code></pre></div></div>
<p class="v2-p">This runs without any output and without any errors. <code>pass</code> tells Python: "There is nothing to do here · just continue."</p>
<blockquote class="v2-bq"><p class="v2-p">💡 This is useful when you are building a program in stages. You sketch out the loop first with <code>pass</code>, then come back to fill in the body later.</p></blockquote>
<hr class="v2-hr"><div class="task-box"><div class="task-lbl">✏️ Your Task</div><div class="task-body">Practise what you just learned about <strong>: The <code>pass</code> Statement in Loops</strong>. Open your editor, type the examples above by hand, modify them, and observe what changes.</div></div><button class="ub" onclick="unlockNext(13)">Phase Complete — Unlock Next ✓</button></div></div>
<div class="phase locked" id="phase14"><div class="ph"><div class="pn">Phase 14 of 16</div><div class="pt">Guided Practice Exercises</div><div class="pc" id="chk14"></div></div><div class="pb2"><div class="chal-box"><div class="chal-lbl">🎯 Your Challenge</div><div class="chal-body"><h3 class="v2-h3">Exercise 1: The Patient Bus Driver</h3>
<p class="v2-p"><strong>Scenario:</strong> Alhaji Musa drives a danfo bus on the Lagos · Ibadan expressway. He wants to track how many trips he has made. He will keep driving until he completes 5 trips.</p>
<p class="v2-p"><strong>Objective:</strong> Use a <code>while</code> loop to simulate 5 bus trips.</p>
<p class="v2-p"><strong>Steps:</strong></p>
<ol class="v2-ol"><li>Create a variable <code>trips = 0</code></li><li>Write a <code>while</code> loop that runs as long as <code>trips < 5</code></li><li>Inside the loop, print the current trip number, then increment <code>trips</code></li><li>After the loop, print "All trips complete!"</li></ol>
<p class="v2-p"><strong>Expected Output:</strong></p></div></div><div class="task-box"><div class="task-lbl">✏️ Task</div><div class="task-body">Practise what you just learned about <strong>Guided Practice Exercises</strong>. Open your editor, type the examples above by hand, modify them, and observe what changes.</div></div><button class="reveal-btn" onclick="toggleReveal(this)">Reveal Answer 👁️</button><div class="reveal-content"><div class="v2-code-wrap"><div class="v2-code-bar"><span class="v2-dot r"></span><span class="v2-dot y"></span><span class="v2-dot g"></span><span class="v2-code-lang">code</span><button class="copy-btn" onclick="copyCode(this)">❐ Copy</button></div><div class="v2-code-body"><pre><code>Trip 1 in progress...
Trip 2 in progress...
Trip 3 in progress...
Trip 4 in progress...
Trip 5 in progress...
All trips complete!</code></pre></div></div>
<p class="v2-p"><strong>Solution:</strong></p>
<div class="v2-code-wrap"><div class="v2-code-bar"><span class="v2-dot r"></span><span class="v2-dot y"></span><span class="v2-dot g"></span><span class="v2-code-lang">python</span><button class="copy-btn" onclick="copyCode(this)">❐ Copy</button></div><div class="v2-code-body"><pre><code>trips = 0
while trips < 5:
trips += 1
print("Trip", trips, "in progress...")
else:
print("All trips complete!")</code></pre></div></div>
<p class="v2-p"><strong>Self-check:</strong></p>
<ul class="v2-ul"><li>Did the loop run exactly 5 times?</li><li>What would happen if you changed the condition to <code>trips < 10</code>?</li><li>Did the <code>else</code> block print at the end?</li></ul>
<hr class="v2-hr">
<h3 class="v2-h3">Exercise 2: Market Price Checker</h3>
<p class="v2-p"><strong>Scenario:</strong> Adaeze is at Wuse Market in Abuja checking prices of vegetables. She has a list of prices in Naira. She wants to print each price, but skip any price that is exactly 500 (she thinks it is a pricing error).</p>
<p class="v2-p"><strong>Objective:</strong> Use a <code>for</code> loop with <code>continue</code> to skip a specific value.</p>
<p class="v2-p"><strong>Steps:</strong></p>
<ol class="v2-ol"><li>Create a list: <code>prices = [200, 350, 500, 420, 180, 500, 650]</code></li><li>Write a <code>for</code> loop over <code>prices</code></li><li>If the current price is 500, use <code>continue</code> to skip it</li><li>Otherwise, print the price</li></ol>
<p class="v2-p"><strong>Expected Output:</strong></p>
<div class="v2-code-wrap"><div class="v2-code-bar"><span class="v2-dot r"></span><span class="v2-dot y"></span><span class="v2-dot g"></span><span class="v2-code-lang">code</span><button class="copy-btn" onclick="copyCode(this)">❐ Copy</button></div><div class="v2-code-body"><pre><code>200
350
420
180
650</code></pre></div></div>
<p class="v2-p"><strong>Solution:</strong></p>
<div class="v2-code-wrap"><div class="v2-code-bar"><span class="v2-dot r"></span><span class="v2-dot y"></span><span class="v2-dot g"></span><span class="v2-code-lang">python</span><button class="copy-btn" onclick="copyCode(this)">❐ Copy</button></div><div class="v2-code-body"><pre><code>prices = [200, 350, 500, 420, 180, 500, 650]
for price in prices:
if price == 500:
continue
print(price)</code></pre></div></div>
<p class="v2-p"><strong>What-if challenge:</strong> Change <code>continue</code> to <code>break</code>. What happens? Why?</p>
<hr class="v2-hr">
<h3 class="v2-h3">Exercise 3: Finding a Ripe Mango</h3>
<p class="v2-p"><strong>Scenario:</strong> Chukwuemeka is checking a crate of mangoes to find the first ripe one. Once he finds it, he stops · he does not need to check the rest.</p>
<p class="v2-p"><strong>Objective:</strong> Use a <code>for</code> loop with <code>break</code> and the <code>for-else</code> pattern.</p>
<p class="v2-p"><strong>Steps:</strong></p>
<ol class="v2-ol"><li>Create a list: <code>mangoes = ["unripe", "unripe", "ripe", "unripe", "ripe"]</code></li><li>Write a <code>for</code> loop over <code>mangoes</code> with an index using <code>range(len(mangoes))</code></li><li>Print which position is being checked</li><li>If the mango is "ripe", print a success message and <code>break</code></li><li>Add an <code>else</code> block that runs only if no ripe mango was found</li></ol>
<p class="v2-p"><strong>Solution:</strong></p>
<div class="v2-code-wrap"><div class="v2-code-bar"><span class="v2-dot r"></span><span class="v2-dot y"></span><span class="v2-dot g"></span><span class="v2-code-lang">python</span><button class="copy-btn" onclick="copyCode(this)">❐ Copy</button></div><div class="v2-code-body"><pre><code>mangoes = ["unripe", "unripe", "ripe", "unripe", "ripe"]
for i in range(len(mangoes)):
print("Checking mango at position", i)
if mangoes[i] == "ripe":
print("Found a ripe mango at position", i, "!")
break
else:
print("No ripe mango found in this crate.")</code></pre></div></div>
<p class="v2-p"><strong>Expected Output:</strong></p>
<div class="v2-code-wrap"><div class="v2-code-bar"><span class="v2-dot r"></span><span class="v2-dot y"></span><span class="v2-dot g"></span><span class="v2-code-lang">code</span><button class="copy-btn" onclick="copyCode(this)">❐ Copy</button></div><div class="v2-code-body"><pre><code>Checking mango at position 0
Checking mango at position 1
Checking mango at position 2
Found a ripe mango at position 2 !</code></pre></div></div>
<p class="v2-p"><strong>What-if challenge:</strong> Change all mangoes to "unripe". Does the <code>else</code> block run now?</p>
<hr class="v2-hr"></div><button class="ub" onclick="unlockNext(14)">Mark Complete and Unlock Next ✓</button></div></div>
<div class="phase locked" id="phase15"><div class="ph"><div class="pn">Phase 15 of 16</div><div class="pt">Common Beginner Mistakes</div><div class="pc" id="chk15"></div></div><div class="pb2"><h3 class="v2-h3">Mistake 1: Forgetting to Increment in a <code>while</code> Loop</h3>
<div class="v2-code-wrap"><div class="v2-code-bar"><span class="v2-dot r"></span><span class="v2-dot y"></span><span class="v2-dot g"></span><span class="v2-code-lang">python</span><button class="copy-btn" onclick="copyCode(this)">❐ Copy</button></div><div class="v2-code-body"><pre><code># WRONG — infinite loop!
i = 1
while i < 6:
print(i)
# i never changes! i stays at 1 forever
# CORRECT
i = 1
while i < 6:
print(i)
i += 1 # always update the counter!</code></pre></div></div>
<p class="v2-p"><strong>How to spot it:</strong> Your program prints the same number over and over and never stops. Press <code>Ctrl + C</code> to force-quit.</p>
<hr class="v2-hr">
<h3 class="v2-h3">Mistake 2: Off-by-One Error with <code>range()</code></h3>
<div class="v2-code-wrap"><div class="v2-code-bar"><span class="v2-dot r"></span><span class="v2-dot y"></span><span class="v2-dot g"></span><span class="v2-code-lang">python</span><button class="copy-btn" onclick="copyCode(this)">❐ Copy</button></div><div class="v2-code-body"><pre><code># WRONG — only prints 1 to 4, not 1 to 5
for i in range(1, 5):
print(i)
# CORRECT — to include 5, stop must be 6
for i in range(1, 6):
print(i)</code></pre></div></div>
<p class="v2-p"><strong>Rule to remember:</strong> <code>range(start, stop)</code> includes <code>start</code> but <strong>excludes</strong> <code>stop</code>. If you want to include a number <code>n</code>, write <code>range(1, n + 1)</code>.</p>
<hr class="v2-hr">
<h3 class="v2-h3">Mistake 3: Wrong Indentation in Loop Body</h3>
<div class="v2-code-wrap"><div class="v2-code-bar"><span class="v2-dot r"></span><span class="v2-dot y"></span><span class="v2-dot g"></span><span class="v2-code-lang">python</span><button class="copy-btn" onclick="copyCode(this)">❐ Copy</button></div><div class="v2-code-body"><pre><code># WRONG — the print is outside the loop!
for i in range(3):
pass
print(i) # this only runs once, after the loop
# CORRECT — print is inside the loop
for i in range(3):
print(i) # this runs 3 times</code></pre></div></div>
<p class="v2-p">In Python, <strong>indentation is everything</strong>. The loop body must be indented (4 spaces or 1 tab) consistently.</p>
<hr class="v2-hr">
<h3 class="v2-h3">Mistake 4: Expecting <code>continue</code> to Exit the Loop</h3>
<div class="v2-code-wrap"><div class="v2-code-bar"><span class="v2-dot r"></span><span class="v2-dot y"></span><span class="v2-dot g"></span><span class="v2-code-lang">python</span><button class="copy-btn" onclick="copyCode(this)">❐ Copy</button></div><div class="v2-code-body"><pre><code># WRONG thinking — continue does NOT exit the loop
for i in range(5):
if i == 3:
continue # this SKIPS 3, but the loop keeps going
print(i)
# If you want to EXIT at 3, use break:
for i in range(5):
if i == 3:
break
print(i)</code></pre></div></div>
<hr class="v2-hr">
<h3 class="v2-h3">Mistake 5: Confusing <code>range(n)</code> with a List</h3>
<div class="v2-code-wrap"><div class="v2-code-bar"><span class="v2-dot r"></span><span class="v2-dot y"></span><span class="v2-dot g"></span><span class="v2-code-lang">python</span><button class="copy-btn" onclick="copyCode(this)">❐ Copy</button></div><div class="v2-code-body"><pre><code># WRONG — range is not a list; you cannot do this directly
r = range(5)
print(r) # Output: range(0, 5) — NOT [0, 1, 2, 3, 4]
# CORRECT — convert to a list to see all values
print(list(r)) # Output: [0, 1, 2, 3, 4]</code></pre></div></div>
<hr class="v2-hr">
<h3 class="v2-h3">Mistake 6: Empty <code>for</code> Loop Body</h3>
<div class="v2-code-wrap"><div class="v2-code-bar"><span class="v2-dot r"></span><span class="v2-dot y"></span><span class="v2-dot g"></span><span class="v2-code-lang">python</span><button class="copy-btn" onclick="copyCode(this)">❐ Copy</button></div><div class="v2-code-body"><pre><code># WRONG — this causes a SyntaxError
for x in range(5):
# nothing here
# CORRECT — use pass as a placeholder
for x in range(5):
pass</code></pre></div></div>
<hr class="v2-hr">
<h3 class="v2-h3">Mistake 7: Expecting <code>else</code> to Run After <code>break</code></h3>
<div class="v2-code-wrap"><div class="v2-code-bar"><span class="v2-dot r"></span><span class="v2-dot y"></span><span class="v2-dot g"></span><span class="v2-code-lang">python</span><button class="copy-btn" onclick="copyCode(this)">❐ Copy</button></div><div class="v2-code-body"><pre><code># WRONG expectation
for x in range(5):
if x == 3:
break
else:
print("This runs!") # This does NOT run after break
# The else block only runs if the loop completed WITHOUT break</code></pre></div></div>
<hr class="v2-hr"><div class="task-box"><div class="task-lbl">✏️ Your Task</div><div class="task-body">Practise what you just learned about <strong>Common Beginner Mistakes</strong>. Open your editor, type the examples above by hand, modify them, and observe what changes.</div></div><button class="ub" onclick="unlockNext(15)">Phase Complete — Unlock Next ✓</button></div></div>
<div class="phase locked" id="phase16"><div class="ph"><div class="pn">Phase 16 of 16</div><div class="pt">Quick-Reference Card</div><div class="pc" id="chk16"></div></div><div class="pb2"><div class="v2-table-wrap"><table class="v2-table"><thead><tr><th>Feature</th><th>Syntax</th><th>Notes</th></tr></thead><tbody><tr><td><code>while</code> loop</td><td><code>while condition:</code></td><td>Runs while condition is <code>True</code>; needs manual counter</td></tr><tr><td><code>for</code> loop</td><td><code>for item in sequence:</code></td><td>Iterates over every item automatically</td></tr><tr><td><code>break</code></td><td><code>break</code></td><td>Immediately exits the loop</td></tr><tr><td><code>continue</code></td><td><code>continue</code></td><td>Skips current iteration; continues to next</td></tr><tr><td>Loop <code>else</code></td><td><code>else:</code> after loop</td><td>Runs after loop ends, NOT after <code>break</code></td></tr><tr><td><code>range(n)</code></td><td><code>range(5)</code> → <code>0,1,2,3,4</code></td><td>One argument: stop only; starts at 0</td></tr><tr><td><code>range(a, b)</code></td><td><code>range(2, 6)</code> → <code>2,3,4,5</code></td><td>Two arguments: start and stop</td></tr><tr><td><code>range(a, b, s)</code></td><td><code>range(0, 10, 2)</code> → <code>0,2,4,6,8</code></td><td>Three arguments: start, stop, step</td></tr><tr><td>Negative step</td><td><code>range(5, 0, -1)</code> → <code>5,4,3,2,1</code></td><td>Counts downward</td></tr><tr><td>Convert range</td><td><code>list(range(5))</code></td><td>Shows all values in the range</td></tr><tr><td>Test membership</td><td><code>7 in range(0, 10, 2)</code> → <code>False</code></td><td>Checks if a number is in the range</td></tr><tr><td>Range length</td><td><code>len(range(0, 10, 2))</code> → <code>5</code></td><td>Count of numbers in the range</td></tr><tr><td>Nested loops</td><td><code>for x in ...: for y in ...:</code></td><td>Inner loop runs fully for each outer iteration</td></tr><tr><td><code>pass</code></td><td><code>pass</code></td><td>Placeholder for empty loop body</td></tr></tbody></table></div>
<hr class="v2-hr">
<p class="v2-p"><em>End of Lesson 14 · Next up: Python Functions</em></p><div class="task-box"><div class="task-lbl">✏️ Your Task</div><div class="task-body">Practise what you just learned about <strong>Quick-Reference Card</strong>. Open your editor, type the examples above by hand, modify them, and observe what changes.</div></div><button class="ub" onclick="unlockNext(16)">Phase Complete — Unlock Next ✓</button></div></div>
<div class="build-box" id="build-it"><div class="build-lbl">🏗️ Build It — Mini Project</div><div class="build-name">Stage 1: Setup · Define the Student Scores</div><div class="build-req"><p class="v2-p">In this project, you will build a simple tool that analyses JAMB exam scores for a group of students. You will use <code>for</code> loops, <code>range()</code>, <code>if</code> statements, and loops with <code>break</code>.</p>
<h3 class="v2-h3">Stage 1: Setup · Define the Student Scores</h3></div><button class="reveal-btn" onclick="toggleCode(this)">Reveal Starter Code 💻</button><div class="reveal-content"><div class="v2-code-wrap"><div class="v2-code-bar"><span class="v2-dot r"></span><span class="v2-dot y"></span><span class="v2-dot g"></span><span class="v2-code-lang">starter.py</span><button class="copy-btn" onclick="copyCode(this)">❐ Copy</button></div><div class="v2-code-body"><pre><code>students = [
("Emeka", 280),
("Aisha", 195),
("Chioma", 315),
("Tunde", 150),
("Ngozi", 260),
("Yusuf", 330)
]</code></pre></div></div><div style="display:flex;gap:.8rem;flex-wrap:wrap;margin-top:1.1rem"><button class="ub" onclick="downloadStarter(`students = [
("Emeka", 280),
("Aisha", 195),
("Chioma", 315),
("Tunde", 150),
("Ngozi", 260),
("Yusuf", 330)
]`)" style="background:#10b981;box-shadow:0 4px 14px rgba(16,185,129,.3)">Download starter.py ↓</button><button class="ub" onclick="showGithub()" style="background:#0f172a;box-shadow:none">🐙 Save to GitHub →</button></div></div></div>
<div class="gh-acc" id="gh-steps" style="display:none">
<div class="gh-hd" onclick="toggleGh(this)">🐙 Save Python Project to GitHub <span>▼</span></div>
<div class="gh-bd">
<div class="gh-nop"><strong>Why Python cannot use GitHub Pages:</strong> GitHub Pages only serves static HTML, CSS, and JavaScript files. Python scripts need a runtime environment (a server or computer) to execute — the browser alone cannot run them. You will learn cloud deployment (Replit, PythonAnywhere, Heroku) later in this course. For now, save your code to GitHub as a growing portfolio of Python work.</div>
<div class="gh-st"><div class="gh-n">1</div><p>Go to <strong>github.com</strong>, click <strong>New repository</strong>, name it <code>python-lesson-14-stage-1-setup-define-the-student-scores</code>. Set to <strong>Public</strong>, tick <strong>Add a README</strong>, click <strong>Create repository</strong>.</p></div>
<div class="gh-st"><div class="gh-n">2</div><p>Click <strong>Add file > Upload files</strong> and upload your <code>.py</code> script.</p></div>
<div class="gh-st"><div class="gh-n">3</div><p>Write commit message: <em>"Add Python lesson 14 project"</em> and click <strong>Commit changes</strong>. Your code is now publicly visible on your GitHub profile. 🐍</p></div>
<button class="ub" onclick="showEnd()" style="background:#059669;margin-top:.5rem">Done — Finish Session ✅</button>
</div></div>
<div class="se" id="session-end"><h2>Lesson 14 complete! 🎉</h2><p style="margin-bottom:.85rem;font-size:.95rem;opacity:.9">You covered:</p><ul><li>✅ Lesson Introduction</li><li>✅ Prerequisite Concepts</li><li>✅ Section 1: What Is a Loop?</li><li>✅ Section 2: The `while` Loop</li><li>✅ Section 3: Controlling `while` Loops · `break`, `continue`, and `else`</li><li>✅ Section 4: The `for` Loop</li><li>✅ Section 5: Looping Through a String</li><li>✅ Section 6: `break` and `continue` in `for` Loops</li></ul><div class="ln"><a href="lesson_13.html" class="ln-btn">← Lesson 13</a><a href="lesson_15.html" class="ln-btn primary">Lesson 15 →</a></div></div>
</main>
<footer class="lf">
<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMgAAADICAYAAACtWK6eAAA9y0lEQVR42u1dZ1QUSdeu6ulJzAADSjYACiIqCBgwBxRXzDmsaQ1rQjd8m0y75nXD+7qrmFYMq7iGVcygqJhWARVBRECCoCQJwhAndXd9P5zZF4cemIEBBujnHM+Rmu7q6q566t5bdeteiBACLR1lZWUWxsbGBYABAx2BteSXI0mSffLkyYCCgoJOTFczYAhSBW/evPHYsmVLYnx8/GRbW9sXTFczqAvwFig18EuXLm1+9OjRUoIgRKampnE8Hq+M6WoGrZ4gOTk53QIDA8+XlpY6AQAAhJDq16/fn0w3M2jVBKEoinX58uXNDx48+IqiKM6/+iOGSV1cXG4y3cyg1RIkLy/P+dChQ+eLiopcq70cjpdZWlqmMt3MoNURBCGEXbt2bU14ePhGhFC194AQUmZmZmlsNlvKdDODVkWQd+/e2QcGBgYXFBR4aLoGwzDpgAEDDjBdzKDVEAQhBG/cuPHNzZs3N1IUxavpWggh4eTkdI/pYgatgiBisdguMDDw3Nu3b/tq9WI4XmJubv6G6WIGLZ0g8O7duytCQkJ+JknSSNub7O3tH2MYRjFdzKDFEqSystIsMDDw9Js3b0bqem+vXr1OMN3LoMUS5NGjRx+fP39+l0KhMNf5pXC81NHR8SHTvQxaHEEqKirMDx8+fOr169cj61oHm80uNjExyWO6l0GLIkh0dPT0s2fP7quL1PjXYIGQ6N69+1UAAGK6l0GLIIhEIjE5evRoUFpa2rh6W/QQUh4eHmeZrmXQIggSExMz+e+//94nl8st9VEfhFDerl27GKZrGTRrgkilUuPDhw+ffPXq1Rh91svn8/OMjIzETNcyaLYEiYuLG3fq1KlAfUmNqujdu3cQ060MmiVB5HK50ZEjR46npqZORAjp/TQjhmFypYHOgEHzIkhCQsKoEydOHJHJZDYN9QwWi1VqY2PDHK8FAOQWSW0TM8u6nb6XNQ8BgHk4mj4e6Wl5tZO1MBXC+q3w5RZJbR8kvBt8MzbfDyEAR/S0vDawW5vb1ma83PrUjRCAqbnlTnHpJT1vxRaMQgBAH3eL6wNc29y3MeflNMV3hA0d1UQmkwmOHz9+JCkpaVpDv4yFhUX0t99+26s1E6O4XGE299fHF64+fjuY7neRgA3Orus7ysfdMqwudQ/+9u7z+IxSO011P/ptWBcnW2GyrnWn5pY79f7sdrK4QkH7e3d7k+zrmwd427bhZzXm92zQoA0JCQm+mzdvTmsMckAIKW9v76OtmRwpOeVO5jMuF2kiBwAAiCsUYMTaf65v+itxuy51n32QPd18xuUiTeRQ1e28JOzl/pB0f13q/iM0fbnT4jCN5AAAgPiMUju7eaGZd54XDG32EkShUPCCgoIOJSQkTKc7zNQgTMcw+ZdffulubW2d1ErJ4ey8JOylLvecWdN39rSBdidrnd1zyjs7LQlL0aXu6F3De3l2EkVrQ46lATF7dak7+9jo9o0lSfROkFevXvU7fPjwaalU2r4xBwiXy83bvHlzexaLpWht5EAIQPMZl6maZmCNg+24n51tDfo9QSKcPf58nb5pZfAEIz6XJdH0u0RO8o0mXazUtV6RgA0KTo5l4yxINBsViyRJ9okTJw7u27fvXmOTAwAArKysElojOQAAIDZd7E5HjuVjHANjdvv0LD4zTnRhQ7/xdPcevJa+sqa6L0bmTKIr9x/XaW9sgE+PtEOjHHYs6PYN3TVHb75ZXFPdx269WUBXvn1+t7WpgaMcUwNHOW6f320NnSoXl1Hi3mwkyJs3bzyPHDlypqysrEkiGEIIienTp8/r3bv3yfLy8jbXrl37evLkyeswDCNbA0GWBcQcPRCaPr9q2eY5rps2zHLZWLXsWXqJW0//W8/U76euTMY0rT71WHkzS93u2DrPdcO6GS5b1eru0dP/Vpz6TF98ZhzU2G9jgqs9M3id9+RJ/W3PVy07dD1j4eJdTw990C57k8y4PSM6GLQEoSgKO3fu3H93794d1YTkoFgsVmXnzp3/UZLVKzo6esnPP//8oKCgwLE1EOT0vaz56mVrpnfZql7m7mAa59FJVM1GK6lUmNZkHKuXfTu1yw6aup+bCtjVZvqaVDe6cnVyAADAQl/7I+plzzNKG0VLqTNBJBKJyY4dOx5FRER80ViGuCbpwWazi0UiURYAADx79mwSSZJG796989q5c2fEnTt3liOEYEsmCN1A1KSf93E2i6KzYTTZCHTlmuqeNaTdYZq20ZKvXEoI1Ms8O4uS6PsYoJ6OpmlN8W3rTJCff/75QVFRkVdTDw4Mw6Rdu3YNhRAihBAWHx8/iaIoHkIIl8vlliEhIf/du3fvZYlEYtKa7BKCRGxtpY0m8Dn0Bram2f/U3ayF6mVCHl6uaW5TL3iaKnahIytCAMa+KunUbAiSnp7uXVFR0dkwVnAQ5unp+TcA7wM7EARhrKYG8tLT08ds3bo1+cWLF6NaIhnG9bG5oV42ZVvkVfXBtj8kfRWdtDETsos11d21vXF+NQN9X+xh9bpvxxUMV6/bw1GUjLMgqWElSkxXvvGvxJ/Vyw6EVl9IWObncNhgCfLkyZO5tYXdaSywWKzK9u3bxwIAQFpa2gBN6p5MJrM6evRoyNGjR4+RJMluSQTZNLdrtVWkS1G5I+3mheSfuZc19/S9rHnu/rcylu+J2VXt3o+7bq2p7s1zXFfTDNi5Xp+FJ92IyR/zMrvM9fughF+Hr7l/i2YQ76yl7k3Vyv5K/KrX5+EvHqcU90vOLnNd/PvTM8v3xOxWv27xKId9BruKtWHDhgyJRNLREAaHqalp3IYNG9wBAGDXrl3hb968GVbbPTY2Nv+sWrXKl8PhSFoCQRAC0GzGZaqkDvsglcETBHwuq7ImY7rtrCsKXes2FbBB8elxWE2+WXXdB+nW0ST7+Z4R7evrU9YgEqSsrMxSLpe3MYSBgWGYvFevXqcAeL8Pk5eX56LNfbm5uQN37tx5k6IoVksgCIQAZRz5yEzX+/5e03dmTeRQGeRPfh+mszr9+LdhzrUNYD6HJQn/cdBwXesO2zKwb2OQo04EycjI6EuSpNBACFLp6up6HQAACgsLHdTtj5pQWFjoHRUV9XFLUbNEArY4NXCU1obs32v7zpg60O60Ntd2thGmpQT6ak2S5IO+XZxshVq5pgxzs7h9bp33FG2lUvJBX2fbNrxsgzXSnzx5YjCDCsfxMhsbmyQAAEhJSRmsi12EEMJCQkI2y2QyQUshSScbwavK8xOMVoxxPKjpmvF9bcKyj/vZTR1gd0aXujvbCNOKz4wzq8k4XjHG8WDR6XHmunrzTu5vG5xz3M+mh73pa03XLPNzOJx73M9IW+I1iQ2CEMI2bNiQ0RSuJNXVCkhZWFhEfvPNNwMAAOCnn356VFBQ0FtXFW3u3LmTe/To0eIOWREkwuNfl3QrLleYIwQwkZBd3LWdcWJNvlHaQiIn+ZFJRf0QAhBCgEQCdrFLO+MkfdUd9bK4D0AIIgBg+7b8THsrQUZj+F3RTsK6XFxUVNRBoVAYhP0BIZR7e3sfA+D9ScXS0lKd3Q4oiuLcu3dvcUskCM6CRE9H0bOGqJvPYUmGuVmEN1TdQ3u0vWso31EnFSs1NXWwLvFxG9j+kDo7O99VGt3dSJJ+11cLW8RRoVBwAQMG9SVIVFTUPENpOJvNLrGwsHgFwPuDWXUlLoSQakl2CIMmIghBEJz8/HwXQ2m4paXlSxaLJQcAgIiIiPl18QfDcVyMYZhUIpEYM0OBQb0IolRFTA2l4X379j0GwPtYvnW1i9hsdjGO42VSqZSRIAzqR5CkpKQRhrL/geO4uHPnzvcBACAzM9OTIIg6OSJCCAkWiyXlcDhMHkMG9GNN2wsfPXpkMPsfbDa7xMzMTOXePrEu6hWGYXKl6ijcdCTyyDtgw2GzsAoMAwoMQhIAQGEQkhACCkBAQQAQhIACAAAI4PvEPFru5kIAqP+R8v09VepQ1qks/98zUJUKdEsEhN5PfAi8d/NH6MOJEGqoT/06TddXvQ5V8cqFdQgYrqnuf+tVbxMElLuD6dOlox32NMZuulYDSyaTCUpLNUezaExACAlnZ+dbEEIKIQSfP38+sa71AAAwgiBMwuILvNLKScCg2eATikL4irGOvxmEipWbm9tNoVCYGcKXwTBM7unpeRYAAEpKSuzqahdBCOXKMyNtywkOM+SaGVbui91pMDbI8+fPJxiS/1WHDh2eAPA+ggpFUXVe3kUIYSTCqDypkBlxzQx+vazvGQxBYmJiJhrKh+FyufnGxsYFSrtofl1j/CKEcIQQXkSaljDDrXnByVZYenZt39EGYaRXVFSYS6XStobycTw8PC4AAABJknhWVlbPutZDURSHx+PlzPUbvn37WtfbAAKkm5EJdTIQYT1OxWvjLldb/ciA8m2pt1WXthnz8bLG9MuqlSCZmZme9UmJpmfpkefm5nYRAACKiorsdXFvp5EgHBzHxZ49ulzn8zmlzLzMoE4qVmxs7JSmjFqiAofDybezswu3t7d/DAAAycnJQ+pjF0EI5VZWVvF8Pp8hB4O6S5CEhASfphXHkOLxeK99fHx+GTp06H6gVIMiIiIW1yfHCI/Hy/Tx8fmDGQIM6kwQsVhs15TLu2w2u8ja2jpi3rx5y1Qbg3K53CgoKOhgXl5en/rUzePxcu3t7aOZIcCgzgR59erVAIIgmsT+4HK5uYMHD/6vr6/vfyB8bxC/fPlyWFBQ0JH6Boxgs9mF3t7epzAMo5ghwKDOBHn8+PGshkiVVpvUaNOmzfP58+cvsrCwSAMAAIIguKdOndodHx8/o65+V/8aXRgmFwqFyf369TvBdD+DOhNEuYzq0dhSo3///nv8/Px+hPC9r1JGRkbfQ4cOndZHmCEcx0t5PF5W3759jzPGOYN6EaSoqKhjY7m34zheamZmFj9v3rwlNjY2CUqCsoODg39+8uTJYn3s4uM4LubxeG+FQmHykCFDjjBdz6BeBElOTh5KEISooRvA4XDy+/Tp88f48eM3YRhGAABAdna22/79+y/pKzgdm80u4nK5+TweL3vAgAHH2Wy2jOl6BvUiSGRkZIMer8UwTGpsbJw8b968hR07dowGAACKolihoaHr7t+//3/1tTVUUEZ/f8dms4uMjIze9OnT5zLT7QzqRRCFQsEvLi52aEBDvLB79+5nZ8yY8RmO43IAAMjLy3M+ePDgebFY7Kpv9Y3FYskwDJONGzfuQNDt7JUb/0rYmZFXWa96XTsY5+1a6j7fp6fldUPpzNwiqe2KPTGHLkTmftRSB6xIwAY/Ley+fMkohwONcR6ENi5WZmZmz4CAgPv69uBV2QGzZ89epopIghDCbt68+eXNmzd/aAiPYT6f/5rD4RQ6ODhECjoNj5u8NfKAPuvPOe5n11Q5vKuiPrkEmyO2zHXduH6my6aGfg7tEm5iYuIofQ9WNptd1KVLl4tr1qzppSJHcXFxu//85z8Prl+//ktDkEO5EkaJRKLkmTNnfnn05uv/0/czHiS8G2QIAyY9r8IRtCJsOJ6wsclUrKioqDl6sjPkOI6LcRwvmzp16udubm5XlFID3r9//9OQkJAdDbkQgBDC2Gx2ySeffLIKx3G5dxfz65cic531+QxHG0GqIQyYzAJJe8Cg4QkilUqNKysrrfVBDhaLVd6+fft/FixY8Ilq36GiosL80KFDZzIzM4c0tBMkj8fLnjt37qdCofAdAAB8N63LZ0/TxN5n/8nurY/6N89x3aRNLvBGAmSGcyMQJCcnp0d9ZnUIIaE0jCWjRo3aOGjQoEDVb48fP54RHBwcQBCEeUPv0LNYrPIRI0Zsc3BwePy/tgH095q+fVpL597aPmjEcHeLWy3hXVbtf7Yn4HLaiiYnSFxc3HhdZ3bVrrfSEC+1tLSMWbhw4RxTU9O3Kql0+PDhkxkZGT4IoQY/AM5iscqHDx++eejQoftaCxkQjQRprBwajbMI0TQZzaoRITo6erouahSEUF7FEC+eNGnSl15eXueA0i09ISHB56+//jpCEIQpqGfaaW3bNHz48M2jRo36pak6s7hcYQ4BQDorPcrhzGVjstoS22hngwGspRCk6iTcZAQpLy9voxzItapRGIZJlaFzAIZhcgsLi+dLly6dZmRk9EFCSIIgeMpc5hLVOfAGlByVPj4+P/j6+v7aFB8zJafcuc/nt1+KK+q/2urawTj/WcAIu6YK+89AOeFW/ePNmzdetSWhwTBMqvqH43gZm80u9vX13fj555+PVCcHAAC4ubld/fbbb72srKyiMQyrfD+z6d/+4HA4+bNmzfq4qcgBAAD6IgcAACS8KbP88czL9fXXvBjoTYI8e/ZsglI6yCmK4tDN0FVVKoFAUDx79uxFHTt2fFLTQ4RC4btVq1aNvXnz5ufh4eHr9XnGHUJIdejQ4eaiRYtm0hG0sSCRk3x9kUOFt8VSW2aIGogEQQjBly9fDlepUHRqFQCAYrFYMhzHK7y9vffb29vfP3z48ImXL18O1mIgo5EjR+787LPPBvL5/HR96JRsNrto4sSJn/r7+3/UlOQAAACZgmJyjLRkgpSUlNjI5XJzkiSFmtQsDMOkAoEgx9/f32fChAkbhg4dGoBhmPz48eNBwcHBWwii9hCF1tbWiRs3buzi4eFxEMOwOgWNhhASLi4uZzds2NB5wIABh1QnDlszurYzTqj+nRgVS28qVnp6eh+CIER09oHSyC7v3bv34YkTJ67FMIwEAAAbG5ukdevWeV28ePGHmJiYj58/fz5+6dKl0wEAgMvlVpiZmWXT6cEsFksxe/bsZV5eXqeCgoKOauvWjmGYlMfjZX/yySdzHBwcIpvDB0ZXJ2u9lgXHBNd5QNuY83KcbIWlKTnlJgC8zwg7qFvbey1loDb2ydZqBHnw4MESTXYHn8/P/uSTT2bT2Ro4jsunTJmyrlu3bjdOnDhxNCAg4IZyr4Py8vI6Mnny5HWaHt6lS5c7GzdudIqJiZly69atL8VisQNJkkLVSheEkIIQynEcL+vUqdO9YcOG/WZvbx9loBJD7zvZUIeo7hAC9PIPX1F4XMEIDAJyULe291rYChhsMoJQFIXn5eV1VcWrrTL4S7t163Z21qxZy1Vu6Zrg4uJy54svvhj866+/PkYIYRBCGBsbO8PPz+9HHo9Xruk+Foul6NWr16levXqdKi8vb1tYWOig+hgsFktuYmKSLxQKC1gsVqvxVK0HoZCPu8UN5kvomSBFRUXtSJIUYBgmJUnSCEJI8Pn87Dlz5sx1dna+r21lJiYmeVwuN18ZKogiSdLoxx9/jJ41a9ZSFxeXO7XdLxQKC4VCYSHTLSq1ouVs9DXXb4EBAEBKSspACCHCMEzK4XDynZycLqxfv76rLuRQShzZqlWrRltaWj7hcDiFGIbJCYIwDQoKOhYcHLxNGyO+MSCRkXyHhdcQHBOMRq77J0Yia5jMvRO8ba7V5/69V18t0dPgghv/StwBxwSjzSeTthFk00fK1PkdAGg6G+Tx48czMQyTslis8qlTp37m5uZW57zh5ubmWatXr54IAID//PPPguvXr29ACHGio6MXZWZm9ly1atV4lZHfROQwsp0bUqHas7gZm9/Tdm5IRU6QnxGfw5LUtd5Xb6ufx2jXlv+63u2Vk/z6tEsiI/m2c0MqVe/7Q1DC2p3nU9bW931bCzCFQsETi8V2dnZ2j9auXetRH3Kok37gwIFHVqxY4Wdubp4KIZQXFBT02LJly9OkpKRhTWF0qZNDBXGFAtjOCamUyOuWax0AACITi6odnBrubnlTlzqW+TlUi7YSmVTUT1/k0Of7thq7Ljs72yU9Pb33gAEDgkADuSYQBMHNyspyO3r06FGVr5e5uXnq7Nmzl1pbW79sjBetlJFGdjTkqAqRgA3qMrNqOu6afNDX2clWmKJtPeHPCnx81t6/qd6motPjMF33NFJyyp2dl4TV+G3r+r5NgaUBMcf+CE2f+8EMrMMSep0liI2NzcsBAwYcBw3ot4PjuMze3v7xd99917dt27YvEEJYQUFBj4CAgBtHjhw5LJU2bIonbchRdWbNLdLexQMhAKdsiwxRLzcVsEFnG6FOpw37uZg/pGvTttNJ3+tST0ya2LM2cjCSREuCNOaeAo/HK/f39x9vZWX1hMViVSgUCrPExMRZ27ZtiwsLC/uCoihWU5Hjg0EzNyQ7JafcSRtyTNjy8MalqNyR6r8FfuY5Q9dZn89lSZaPcQxUL99wPGHj1lNJPyAtHOj3h6T7e64O1/qUY3MhSdVMwY2+itWoqwI4Llu9evUEd3f30ywWqxIhhEskEodbt25t3rJly1OlXxdsaHKM7W19u/jMOHNTAZv2XuclYcl/XEtfRrfigxCA4c8KRpjPuExdjnrrQyc9pvS3+7subd4+v9s3dOUbjidsNJ9xmbodV+Cj3iaEAEzJKXd2W3nzzfI9Mbvp7jcVsEHxmXHm4/rY3NBIEhkjSaoREzVdbi54//79RaGhodsUCkVb1QYlh8PJt7S0jJ05c+Yqa2vr5AYhRx/rW5e+7z8SQoAkcpJvMyeksqQGCTO+r80NG3PeW4QAzCmStL/y6O2Qmp5d31BAt+MKhg1fcz+8tus+/cghSJv2mArYIPe4nxGfy5IgBODkrZFXLkTm+KlfZy7kEFnHRpvwuYZnkywLiDl6IDR9fmPbIE1JEAAAAE+fPp107ty5PTKZzKZqOZfLzXVycroya9asL7hcbkVDkOPf1R4tSKK1cXzQ16mzrbDekU4OhKYvXxYQs7e+9SjJIah6QhEhACdvi7x8ISJnjPr1bYw58sw/R4sMjSRNRZAm36n19PQ87+/vP1zdBV4mk9kkJCTM37Fjx8Nbt24t1dZZrSZyjOtjc0OdHAAAwOewJIUnx7LH9ra+bQjkAACApaMd9u1b6eFfnzomeNtcKzw5lq1+fBdCgILXeY+j28h8VybntJ8fKmbULQMhCADvvYK/+OKLwdbW1g+rkoSiKE55ebnrnTt3vv3pp5+upaWl9amPzXHx+36jNBnOOAsSl37o77Nnec8vdG3/ijGOByvPTzDSFzn+nTX9HPbkHPez0WQn1Wis+3usOL++n58mh0UIATq/vp+fJpK0mxda2lAeBnVSdWDTGOlNrmJVBUEQnN27d1/Jzc0dou5ZjON4KZ/Pf2NlZfV4/vz5n6vn96iUkQK7uSHldOQY09v67uUf+g/TdlWJIBF+8FrG8jV/xu/SpHaZCtjg54U9lk0fZHdaJGCLG/K7IATgs/QSt00nErfT2Q5VsWlO1y1fT3b+UVsVCSEAJ22NCLlIE8/XkGyS5XtiDu8PSf+k1dkgdCQ5f/789ujo6EXq8bkghBSO40Xm5uZRy5YtW2BsbFwIAAAKErEtZ12Ra1KrapIctUEiJ/nicoVZUlaZCwAAuLQzTuRzWZKGJkVN5C0okVkkZZV1VS77QgAA8OgkijYTsovrSkBNJOlub5IdFzCifVMfvmoqghic0xqO4/Jp06Z9hWGYLCYmZr5MJrNR2R8IIYwgCJFCoTBVKBT/HnF9mlrcj44cbg6m6fUhh8o+4ZuzJIYQoFqlCtqY83JtzHm5elRf3qtbmyOuX3704Z5OfEapXdrbcsfONsK01miDGKxX55QpU9Y5OjpGXbhw4ZfKysrOKpJgGCbl8/mZ5ubm2apr7drQOwXGpZc4NGXnSmSkUXGFwiwps8z13otCn7fKHXoIlHYWBJS7g+nTLu2ECS7tjJMsTLn5TXXIKTW33EmdHFUkTKt1uzdot2cPD49LVlZWqYcOHTpWVlbWDcMwuampaczy5cs/rXpdu7b814O6tUm//+JdtZwmTovDUnX1iaqPrZCaW+504nbmot8vpn6j5e79B2qDRydR8tLRDruGu1vccLIVJjfGdw5/VjDCZ+39G5pWwnR1mWlJMDgbhA5SqdR47969hyiK4syYMWN9+/bt4+kG58j1/zy9FZvfk66O5IO+XRpqwBWXK8x+v5T67aYTid/qs15VspiFI+0DG0qy7A9J99e0+z7R2zYkeL33WEMI/sAY6doZ8GwcxxU1zeC+6/+JvhmbT5udN/uYXzvbNrxsfbUn553UbvPJxB8PqHmZNgRWjHEM3DrP9VszIadIX3X+/U/2zOk/Rp3UJDnOr+/nZyiRUVrtRqGOBryiNmMzbOtAr5EelrTOet2W38hCqP5+XgSJ8KW7Y47bzQvJagxyAADA3quvFpvPuPLuQGj6Sn28Q3G5wkwTOcb3tQkzJHIwNog+RSIE6PqWgb3HbHxwL/RJ3sCqv4krFO9VijEOu+ta/9M0sZfX6vAn2lxrKmCDLyd13jK4W9vwLu2MX9LtJ7wrlbfJKpTY3X9ROOzX4JSNtbm7LAuICVhzNH5X/N6RHeojDT/Z+eSUoatVjA3SwAZz9xU3sxPelNqo/6a4NImtq06PEIBbTiVt/iEoocZ4ua4dTHIDlrt/7O1iHlmXg0gSOckPfZI3etNfib/GpZfUmEg1eJ33lEn9bYN1Vg2LpLZ2c0OqkcvDUZQcvWu4iyGSg1GxGkCS/PPLkG50vz1/XdJdp0ErI/mTtkZcq4kcK8Y4Hiw+M87sxb4RtsPcLG7X9ZQen8OSTO5vG/wswMcxJdC388qxjhqTjk7eFnlu0tbIq7qqXH+EvlpNVx6+Y5A3IzlaCUEAAMBMyC7e7+9RLSvRoesZS3Uhh+3ckMqLkbm+miRG9nE/uz0ren6q7931zjbCtIDlPZflHPez6WFvSrvXcyEix2/K9sjLupDk94tp1VbbDqzyXCYSsIsNtS+bKqpJi98AGt/X5qJ62Z4rr5bpQg5N+xnn1nlPi987ws62gXfZbcx5b58F+DicW+c9je738w9zxkzeGhGiDUkIEuEajgFcNmiNoIlOFOItnSB1dRFBCMC+X9Ln+zAVsEHi/pGNmh8dQoAm97c9m3Pcz9bd/1ZyQYnsg3P8FyJzP5q8LfJK8LqaDexyKWFMV64NyVNyyp1/PZeyoWqbqnoFANWOu5rnLawS76CqV65qhx5pOkGKAEYhxMIgJP++n/0xQxADwoQtD288zyhtT0cO1em8JiJ87uujH1nSHfC6EJHjF3g949MlH9kf0Pdzc4qkttoEgmBskFaAv//Jnkl31ryno2lKblDTkaOqIZ8b5GdkbsypFi/5091P96fklDvXrM7rjj9C0/1b41ho8QShC+HTy8ksTtP1mjbQTAVs8Pi34a6GEkOKz2FJso6NFrU14VZL9un9xZ0XmsKLalpIEFcoRDU9r1tHkzgDsy3DGILoARcicqoZtpP62ZzRdP2wNfdod+EzjnxkbmjpBPgcliTiP0Pc1cuLyuX4jr9fakw74drBpJqrfEya2KOmZ00dYHd6dC+rfwzhvU0FbHDquz4TG8X2a6kbhaoVG10iHmryag3/cZDPMDeLcEN9z/MPcyZN3hZZbcOw6PQ4c7pDVOceZE+buj3qjJpkAQUnx9a6gSqRkXypguLB2heVtRlYUNd7uGxM1phSvMUa6QgBOG175GW62YfOfVsZIbEaOZaPcQw0ZHIAAMDEfrYX3BxM09V33jccS/gpYIX7p9UWILxtz9OoWODns8nfrZ3RZWuNUovLkhhiWCBGxdKRHJO3RoRcoDlCen6993C6ZdA7zwuG0S3pagrkZkiAEKC7Pw32VC/fczVtibhCYVZtVmRBYt9Kj1Xq5euOvdiyev+zPfpwhmQIYqCISRN7mM+4TNGRY6K3bchQNwva0D7/Fxi3X71sv7/HCkPeXVY3vunClu6+lPYZ3fVLRzvsoYuWsvty2grzGZepO3EFw5jQP83EBpHISP6ft94sep5R4g4hJJXKK1LOnhQAAGS9k3Q8/7B6ILSqqlWuhkjmmpz36uLU2JQQVyhEZtMvVyM0dWUybXR4Te9dXSWzCbM152chACBQO34LISDXzezyg10bflZLJIjB2yAEifCa3D20XfXIrSHM//mHObPUy1aMcTzY3JJgigRscfeOJpnxrz/c4Ix9Je7p0UkUo369rTkvJ+Wgr5PTkrAajyNr8kNTYV/Iq4WaFgQYFauBcS++cEh9yOHmYJqeW0sOjPXHXvyqXvb5xM6/NMcO/fP/ek1ULzt4PWOFpus72wpTK4MnGHVtb5xfT9XWk7FBmkgNrKvUuL1j8NDY3T6daiKHRE7y6QjYXAMVuNmbVtvQ23f11eKa7uFzWZIX+0Za3/5x0LC6RHGsTz8xKlYjwlTABl9Pcdowc3D7k47WglfanG1IzCzrql62cqzj/uZ6LgJnQcK1vXFeQmaZlZp9YlbTggOEAA11s7hTfHoc9upthePJu5kfX4jImRadKtb27AxiCGIguP3joGFD3Szu6KOuqKTiAeplUwfYnW7OnbpibKef/PfF/ldNBfLQZj8HQoA62QjS1s902bx+pstmumtW7o39Q18ZeBkVqyF0LuVKlj7wLF3spV7WpZ1xcnPuVG8X82ouIe9K5Rb6qp+kEAe0EjQHglQT3QghvaVqO30vaz6NTl7ZnDvV0VpQzX669Sx/FGDQOiSIPkFnoDdVYGp9gcfGpNUnFaavWypBGLcHHUHnK/Ug8d0Ipp8YCcJAA+IzSu0aWA9mCMKg+aIe+xvVRUUTZXtiCKLtzNSIud2bI+hOE84c3O5P5su0FgmCEGzsAdacUCZRmDTkrN+aDP5Wr2LRnW0ulxLC5vxOabkVTuplNua8BvW2hS10J93wCUIjLSikPw8ALydRlHpZel6FfXPu1NTcChf1soGube/qbdBgUAFaCZqlKvHNkee/93Eyj1TZJxgE5HB3ixttjDkFXdoZv7Q24+Vq60s10LXtPfWyq4/eTvBwFMU21069EZM3Vr3MpZ1xkpbqE0zNLXe+FVvgG5de0jOnSNKuNnd3hiAGZqRHp4hdo1PErlXL9qp5rB5c7bn042Htj9d2wN+lnXGietl/glM2rp/psql5mmcAHg57PVW93FLEzavtvnMPsqcv2fX0VF2OFzDLvE2Euuq2S3Y9PWA06WLl+Yc5k2q6ji7HhrhCAejOcjcP9aq8mv3h7mCaVtPhr5wiqa35jMvUtB+jTtX17A1jgzQROlgaZdTn/snbIoOnbY86X1Mggo0fd92uXnbyTtac5tihJ25nLlAv+3521+80XZ+SU+5sNzckuz6H0gAAoL0F/w1DkCaAk60wefMc13qpO2cfZE+cuj3yoiaSzB7avtoewdo/43c1t+geBInwTX8lrlEvH+1ldVUDOZz0EW9305yuWxorI2+jazDNJXAcQSJcufwK/6f2/g+FpbI2cemlHgt/i/5bUxqzbfO6baCL+4QQgNjY4Gr7BPo8d9IY2Hc1fdWKvTG7qpa5OZimPwvwcVS/trbUDt07mmT+ttR9UQcL/msLU26BpmcKeXhZczu73yIJogtiXol7eq4Kj6HVt4/70aYtOBCavnxZQMzeqmUiARsUnR6HNYfThZqiSEbvGt7Ls5OoWjjVFXtiD+0LebWQrq4nvw/v49VZ9BgwaJkbhR6Ootic4352FqbccvXfxmx8SBsXa5Gv/UE6Y/1AaPqK5vDOP555+b16mamADTwcRU9p3kukiRzJB327MORo4QQB4H3inOtbBgyuJl3SxM65RdJqiT2V0QarhfhfvicmwNBXtGLSxB7fByVsUC8/v97bh076nbyTNVeT5GiptgRDEDpJ0kkUM6mfbbX4vJejcifQXb94lP0BOq9Xh0+uFRmqwS6RkXyftfef0Lx7kqYz6Gv/jN+lXubuYJrGSI5WRhAAAFg/y2VjNXvjWjptOE6cBYnz67196FStCVse3jA0kiAE4MyfHl0sLldU68fwHwf1p7tHXKEQ0Rnmh7/wmsHQoRUShC5O1NNUsYumwT7MzSJ8XB+bG9Wlzlufg9fTlxoSOSZtjbh2KSp3ZLUJoIaMtelvK2hzr3dtZ5zA0KEVEkTTEmRJpcJU0z3B67396FStpbtj9v1xLX1ZU0sSFTnofKQm97e9uGSU/R+a7tVkT7WmlAYMQbQDrIlUCftH0h5RXbo7Zt+krRHXmookEhnJ10QOUwEbBH3de1Yty9LMYTOGIP+DpsNPpkY1Ry6xNeflJB/0pU2GeTEy19d8xmWqsVe3UnLKnW3nhlRqIkdtMYiVxnusLt+JIUgLR1xGiTvdYNJm88/JVpiiiSTiCgUwm3656EBo+sqGliYEifDle2IPOy8J05i3Pfr34Z20SU0m5OFl2n4nBi2cIAgBuOi36GphRL+Z4rRe2zqcbIUpKQd9nTT9viwgJkCVcEbfRCFIhJ97kD2dPf68Yn/Iq09oJaFScnSyEbzS1iaji+S+6Lfo00xmqVZGkOCH2VNjX5V0Ui+fNqjdGV3q6WwrTM057merKTKIuEIBhq25H24+4zK1PyTdv7i8fqpXbpHUdsvJpM3s8ecVU7dHaYwT7OEoStZGrVLHnhU9Z6qXxb4q6XQ+ouajAa3SUG2pWW5Tcsqd6TxVTQVsID4zrk4zJUEifNLWiGtXHr31qe1akYANdnzS3b+Ps1mEg7Ug3dSILaZT65ROmMaxaeKep+9nzz11N/MTbVzPt81zXb9musv2uviJESTC2866oqBz6kw56OvU2bZ5pn5gCKI9OZycl4TRukxoSgGtC+48LxwycUvEnZKKxj+abSpgg8T9I2kdLnVB+LMCH5+192821DdiVKxmSA7/cZ326qPjh/Zoe7fw5Fg2ne9WQxLj9o7BQ4tPj8PqSw4AABjubnFrxRjHg3S/OS8JS07JKXdi6NHCJEhqbnknp8VhtOrB5P62F8+u9Z6kb9d1gkT44bCMxUsDYvY1FDEubOg3dEj3tvf03XblhmPIRZqMwEpJ0qW1Oy+2GILUJDkm9rO9GrzOe1xDnutACEBVZqYNxxPqHfBhy1zXHxb52gfqQ1rU1u6JWyKuXYqij1zS2tWtFkEQTYeFGoscdBBXKESxr0rc78UX+DxJFntfflTdZ0qFlWMdD1ib8XIGdWt7293R9Hljp19ACMDxmx/e0LT40NzSYTMEUcPTNLGn1+rwaqfmrERccW7QGPPmmm+wMaEgEZsz/ryc7reWmuK51RjpXWliWwEAQJ5YJjoUlrGEGf5a2CJbIm5q+t2YT7/7zkiQZoTghzlTp2yL/Jvut4OrPZcsHmUfqEt9EhnJD3nydlxQ+JtPLqgZsb2cRPFLRzvuHtvH+pKViJfXWBJKIiONrj5+O/7WswJf9Z31if1sQ+YO73BktJfVVV08cxECcNymh3euPn47mDHUWzBBAADgj9D0ZZpWk7QliURO8r8+FL9zz5U0rc5+iFSrTD30F/tWHblFUtulAU+PXY6qfYMSAABWjeu096eF3b+qbYcdIQAnbHl4Q1O9L//wdXG2E74ErRgtbqOQLjqJtiRJzSnv7LQkrE4rNpP7214O+qr3DH2eq0AIwG2nk37YcDzhh7rcX9OuuHL16jrdgSuGHC2YIHUlyR+h6cuXarhHW5gJ2VT2MT+hPkhCkAifsi0yRNMA1lqqrvJctuQj+wMMORiCaE2SwM88Fy/ytT9U5dqVywJiAvTxXHMhh8j7awy/Psuitak+9SGJckn39pVHb4cw5GjFBAEAgP0h6SuX76Ef+IGfeS5aONL+SE0qTG9ns9iDqz3nd+9o8oKFQVI5s7Ne51faf3Xo+e8XInLGaFK3zq3zHl/Xdq/cG3tQPVq9CivGOB78YlLnnzpZC1+pFgcIEuHPM0p6LNgZfS4uvcRBE0kWj7L/Y/zmh7euPHo7jDHIGYLUShJrM17R22KpuQZVbPEiX/vDNa1QpeaUdx749d3HeWKZSBf9vzaD3HZuSLWI89o4KSIE4B/X0pdpkpw1vS9DjlZKkNpIQkuOVZ5LFn+k3bKwRE7yjSZdrFQv9+gkSn66a3gXXds6aUtEqPqysrbHabVRLxly6IZWEbRhmZ/DHm09b3UhBwAA8DksydNdwz3Vy5URHG11aadETvIv0DgOZhz5yFyXQ1FLRzvsO+DvsZwhB0MQnUiy399jhT7JUUVaxHh1FsWrlydllekkQSISi6oFe1s51nG/phhXNeHT0Q77ayMJQw6GINVmVk0kqSs5VPhlUY9q0RrPPcjWKVrh6ftZ89XL1s5w2VLXNtVEEoYcDEE0kuTs2r7Tq5YFr/OeXB9yKKXI0/q2DdFk9K2vk+Cnox32q78vQw7GSK9d35eR/MiXRf28u5hH6GNjjy4Jj0jABsU6nH//dPfT4wevZXyQ+g1dnQz19b6JWWWubvamz1qr63pd0GqDhfG5LImm6Od1mmloloPFFQqDel+6RDoMGBWLAQOGIC0BLAwqmK/AqFitCrfjCoZDCCiAAAQQIIAARO8DZ1dLRvo4pbgv88UYgrQqDF9z/xbzFRgViwEDhiAMGheaYgEzYAjSLKG+IVdfnF/vPZz5qk2LVrtR2FBQBqMW/u/71qFT4Ps8HsyGHkMQBgwYFYsBA4YgDBgwBGHAgCEIAwYMGIIwYMAQhAGDeqFevlgkhVgYhFR9gzdTFMLkBMXmcVgyXetXpS5GCEEKAAxRCLIwSGIYpHRuB0LYu1J5mzIJYVJaSRiXVCpMOTiUmxpxSqzNuHlmQk5Rbe+K3m9joP/VCTAMAq3aghDAYJVrEQJQm29LEARHJpMJZTKZsUQiMVUoFDyEEMZisRRcLrdMKBQWGhkZiSHU/Zs0BSiKYpWVlVlVVlaKpFKpCZvNlnC53HITE5M8LpdbrktdCCEMAIAghKiW61TOoxAhBBFCkMViEfUiyO8XU9f9X+DzTQAAgEEIYB3OvlEIAYQAiPzvsL59u5g9UpUXlMgsLGdfrZbPm4VBQFI1j5k/v+y1cJ5PhyPaPF+qoHh/38+adTjs9fI7zwt61yhuIQSzh7Y7vWZ6l82uHUwS6MiKjQ2mIHx/raqdpWfHm9SWQkBcoTAzm365qOqzKIRqPFH45s2bnkFBQbtlMpklSZICkiS5CCFc9Q9CSEEI5SwWS8Jms4s9PDzO9evX709LS8u0+vT706dPJ4SGhn5DURSbxWKRFEWxMAyTfPXVV6M5HE5lXevNy8tzDgsL+y45OXmoQqEwQwhxEEKY8j0IFosl4XK57/r27XvMy8vrTNu2bdNrq/Pq1atro6OjZwAAKAghiWGYDMdxmYqIFEWxld+LpXoWQgjjcDjvvvvuO596EaRq4nkKIaDnJABQg9Sq9UYrM252bdfICYrz45mXGzb9lbhe271SCiEQdDtzRtDtzBnUlcmYptkdIQDIem7AUlrcL5PJTEpLS90IgjCp4TIjgiBEMpnM5v79+65RUVFLe/TocXbatGlf4Dgur0vbnjx5Mqe4uPiDCCwsFqsyJyenu729/aM6SAw8ODh4x5MnTxYRBCGqQVKayGQyq5s3b26/ffv2d05OTqELFiyYz2KxNJ6jIUnSqKysrPu/g+o90SqVz+VQFMX7YBLEMCmGYVIWiyWBECIDcndHUF81CXl4jWI4p0hq6/JpWHaZpNl7ckClCvFhoVKVovtNLpdbRkdHr8jPz3fy9/f3Y7FYOn0EmUwmyMzM9KIbiPfu3fO3t7efp6s6FRgYeDIlJWUyXXtrIIsoNTV1FEEQnJoIopQacoqiOFW+DaX6P4Tv3XlU5SwWq5LFYkk4HE55vW0QDNL7Cim1A50WANT14/rYNWwc09jpCW/KXLuvuPGi3h42ek6aA+smf6vdIxAI0p2cnEKFQuE7ldqSnZ3tSRCEKUmSRhRF8RBCeFZWlk9YWNhXo0eP3qHLA5OSknwUCoUZhJBA6MMJNikpaZRcLudzOBytg2CEhYV9k5KSMlGdHBBCQvmPUv6GqQa56ncMw2S1EVx5L1X1b1W7VaqoinMQwn9/Z7PZinoTpJ0FP23fyp7+lqbcXJVRjN6fmGPN/vnR3zLFhzahRydR/PqZLpuA0iAiKcSSKih+QYnM0tqM+1Z9cqR7pncX8xgFiQQ4C0ox1RFVhDCCROzCMrlFVqHEShO5yiSEsceqWzWSY6Brm+hRXlaXOlgYZRAUhecVy6weJRf3uxyVO+4D9U51QlBf8lMfJIOQat++feScOXNWqkkN/tmzZ39KTEwcL5fL26hIEhERsdjX1/c/Nc3A6ggPD/+SIAgRpJkcCYIQJScnD+vevXuINnVVVlaK7t2793lVokEICRMTk1QfH59fOnToEM1ms6WVlZVmYrG4XWJi4oiXL1+OkMlkbRBCHKUqpKh97gFAJUUghESbNm0SLSwsEtRWcikIIUWSJFZRUSFis98nUq0XQaYNtDul6TcumwXUCTKoW9u7k/vbnq3PMyP+O9RTF9uoKnp/Hp4qJ6ov5OAsCPat9Fg6z6fDUQ6OadTLX+dXdvghKGHrn7fezDUUvVR9tqRTUzgcjmTq1Knfbtu2bZRqZq6in1uIRCKtUk2XlZVZ5Ofn91DNvuqSn6IoTnh4+FfaEiQlJWWoQqFoW7Wsa9euFxYsWDATwzBS/XoPD4+zFEXhL168GHXu3LnfAQAKbVbmVOoThBAHAGATJkz4rkuXLuHarGo1qg2CQUA2imJOM7PHpZe4vcwqt1QvN+bj4NXhjyzamnAKa6u3o6XRm6Nf9po3bVC7MwZjuaFqdiStasvhcCRGRkb5MpnMUjlgCAAAplAoeNo+Ky4ubrxCoTBXDToMw6Q4jpcTBCFUkpOXk5PjVV5e3lYoFNb6PdPT0/tVJTSEkBg3btxaOnJUMaKJHj16XHVycrp3/Pjx3bqYO1XtEi1IhTR+zAac7mBTDaQFO5/QSq6Xf/jaaUOOqhjT2/pKAyTuhHW8R+s+VC5pcqosA8uNjIzE2t5/586dz6uu9lhYWCSOGjVqC4RQrprJCYIwefbs2RRt6isuLu6oaeauDTwer2zBggXLtZ80IaXrMxqfIAixmoIcFVJCEJNW4qRe/v0sl6015dto4sFfp1UsqGHhRCKRmFZUVNhSFMVTGbvGxsbZAoGgSJsHvXv3zr6srKxDVb4NGTJkp7u7+1kWiyVR7SEoibRam3fm8XilVduNEMJfvHgxWuvFGDZbh2y+7411pYqJDJQgTePaEv+6tAdd+cqxnXYDwwGqw4RTTYLQ2SAKhYJ36tSp3xUKRRvVbMrhcN5NnTr1/7R91pMnT2aq77e4uLiEmZqavjUxMXmNYZhcpcaUlJR0LiwsdKytThsbm+fqZaGhoTuePXs2QZdZvjZiqL5JTcvfmtDswv7wJl5ANMQDCpICl77vN25sH5sr1T76k7zxdIa5pYib3xhtjk4t9rS3FGR8oGoqB4BK7Xz1tqKTPiRIVlZW/5s3b35uZGRUTJIkOycnp9uLFy8mSKVSG9WmGISQGjBgwN5OnTo91HaQRURELKxaJhKJUo2NjQsAAKB///6Hrl69+otySRZQFMWJioqaO2bMmI011evs7HwHwzCpalVNqQbyTpw4cebChQuvvby8Tjg7O99t27ZtulAoLKjHLj2m/EdhGCY9efLkAS6XW4RhmEz1fhBCiqIoDMfx4q+//np8kxAEaumTVBPUV8Y+WGYk6VW4pKwyV/Wyga5toxrrvYd9d/92o6mTFRXtr127trO2AR8fHz+pc+fOd5ydne/VVmdOTo6rRCKx++D7DRz4b+bc7t27XwsNDd1GkqTqLD6IiopaMHr06M0YhlE1SJB4MzOzpHfv3vVUs5U4ZWVlTnfu3Nl4586df3e/uVxucc+ePf/29PQ83aFDh2htVSXlJPLv3odMJmsjlUqtlLYYhhDClTvociMjo7QmU7E07W3oCyRFT5DX+ZXVElt2sORngFaM/Pz8nocOHQr9888/j1IUVaNt+PDhwyUkSRqp/maxWOXdu3e/qvrbzMws28jI6IN9LKlUapWVleVR20rRwoULZ+A4Lq5tpY4gCJOKioqODx48+CogICBi27ZtCcnJyUN1VLVUG4MUhmFSCKFcxQGVr1eT2iD6kCA1QU4gLl35q9wKF/UyARevAK0cJEkaPX/+fP6ZM2d+r+Eadlxc3IQPvp1AkCUSibKqjr/+/fsfUZMCvDt37nxWWxusrKySV69ePVggELzWYbDjYrHY5eDBgzcuXbq0WVsVS0USiqJ4Kq8CiqL+XdUjSZJLURS/qv3T7GwQX0+rWwghNkW991alEMIpCsCSSrm1EReT0XaCGTczv0T2gY6fWVjZsSUOeh6PVzhkyJCfRSJRFpfLrSBJEpdKpcZ5eXnOL168GF1WVtZJ3diOjY39uG/fvsccHByqORpmZGT0UigUplWkR6W3t/dhdfXGzc3tQlhY2A9VnQ2TkpJGKRQKfm2rTba2ts83bNjgcu/evWW3b9/+SiaTWVR1K6mJKPfv319na2ub0KtXr1NafiLKysoqzsrKKq6KJKMghARFUSyZTMZt1kb69S0DRuh6T0dLwavnGaUfECThTZl7Y7U5YHlPf3sro3SlLgzVdvohAACk5JS7/F/g8x31fVb79u3/GTly5C90v02cOHFddnZ2jyNHjpwSi8X/2mUEQYiuXLnyw6pVq6rlfb97965/VdsCQih3d3e/qH5dmzZtXvN4vHcVFRVC1WytUCjavnz5UivXExzHpcOHD/9t6NChuwsLCztlZ2e7ZWVlueXm5nZ7+/ati0wma6NQKMzUiYMQwi5cuPBfDw+Pc7W4nVDKduF+fn7fu7i4aBUzuVEJ0lTLvE52gmQAwMgP1K63FW0JEuGNEZxtnk+HY1qcB7mrD4JgGFajb5Kdnd3zzz//fMiOHTtipVLpv4Z3QUFBF7lcblR1pUgmkwmUu914VdUpMjJyvkAgyK+ykgYBACwMwzC1wYjdunXrW21dT5TtJy0tLZMtLS2TPTw8/t3cVSgU/KysLPdLly5tz83N9aoqBeVyeZucnJzu7du3j6Gxc1RuJpQqBpw2O+nNVoLUBaM8ra7uPJ+6Ur08ObvMybWDSaIhtBHq6TSNNpuxQqGw0MHB4W5SUtJM1TIxSZJG5eXlbczNzf8lSHJy8mCFQmGmbls8fPjw8yoHs9Q3KqmqZbm5uW7aup7UBDabLXFwcIhcvXr1iF27dt3Mzs4eoJImFEVxcnNzaQlShSRV/6/1Hsv/A2mSUJ6BwS18AAAAAElFTkSuQmCC" alt="Techbase">
<span class="lf-text">Techbase Code Coach · Python Course · Lesson 14 · © 2025 Techbase Consultant Services, Ibadan</span>
</footer>
<div id="toast"></div>
<button id="go-top" title="Back to top">↑</button>
<canvas id="cc"></canvas>
<script>
const TOTAL=16,KEY='techbase_python_l14';
let cur=parseInt(localStorage.getItem(KEY)||'1');
function init(){for(let i=2;i<=cur;i++)unlock(i,false);bar();}
function unlockNext(n){
const c=document.getElementById('chk'+n);
if(c){c.classList.add('done');c.textContent='✓';}
localStorage.setItem(KEY,n+1);cur=n+1;
if(n===TOTAL){
document.getElementById('build-it').classList.add('visible');
bar(100);toast('Building time! 🏗️');
setTimeout(()=>document.getElementById('build-it').scrollIntoView({behavior:'smooth'}),200);
setTimeout(confetti,600);
}else{unlock(n+1,true);bar();
toast(['Phase complete! ✅','Keep going! 🎯','Nice work! 💡','Nailed it! 🚀'][n%4]);}
}
function unlock(n,scroll){
const el=document.getElementById('phase'+n);if(!el)return;
el.classList.remove('locked');
if(scroll)setTimeout(()=>el.scrollIntoView({behavior:'smooth',block:'start'}),180);
}
function bar(p){document.getElementById('pbar').style.width=(p!==undefined?p:Math.round((cur-1)/TOTAL*95))+'%';}
function toggleReveal(btn){const w=btn.nextElementSibling;const o=w.classList.toggle('open');btn.textContent=o?'Hide Answer 🙈':'Reveal Answer 👁️';}
function toggleCode(btn){const w=btn.nextElementSibling;const o=w.classList.toggle('open');btn.textContent=o?'Hide Starter Code 🙈':'Reveal Starter Code 💻';}
function copyCode(btn){
const code=btn.closest('.v2-code-wrap').querySelector('code').innerText;
navigator.clipboard.writeText(code).then(()=>{
btn.textContent='Copied! ✓';btn.classList.add('copied');
setTimeout(()=>{btn.innerHTML='❐ Copy';btn.classList.remove('copied');},1800);
}).catch(()=>{});
}
const tEl=document.getElementById('toast');let tT;
function toast(msg){tEl.innerHTML=msg;tEl.classList.add('show');clearTimeout(tT);tT=setTimeout(()=>tEl.classList.remove('show'),2400);}
const gEl=document.getElementById('go-top');
window.addEventListener('scroll',()=>gEl.classList.toggle('visible',scrollY>320),{passive:true});
gEl.addEventListener('click',()=>window.scrollTo({top:0,behavior:'smooth'}));
function toggleGh(el){el.nextElementSibling.classList.toggle('open');}
function showGithub(){const g=document.getElementById('gh-steps');if(g){g.style.display='block';setTimeout(()=>g.scrollIntoView({behavior:'smooth'}),150);}}
function showEnd(){const e=document.getElementById('session-end');if(e){e.classList.add('visible');setTimeout(()=>e.scrollIntoView({behavior:'smooth'}),150);}}
function downloadStarter(code){const ext='python'==='python'?'py':'html';const a=document.createElement('a');a.href='data:text/'+(ext==='py'?'x-python':'html')+';charset=utf-8,'+encodeURIComponent(code);a.download='starter.'+ext;a.click();}
function confetti(){
const cv=document.getElementById('cc');cv.style.display='block';const ctx=cv.getContext('2d');
cv.width=innerWidth;cv.height=innerHeight;
const ps=Array.from({length:140},()=>{return{x:Math.random()*cv.width,y:-10-Math.random()*120,r:4+Math.random()*6,d:2+Math.random()*3,c:['#e34c26','#0284c7','#d97706','#059669','#7c3aed','#ec4899'][Math.floor(Math.random()*6)],ta:0};});
let f=0;function draw(){ctx.clearRect(0,0,cv.width,cv.height);
ps.forEach(p=>{p.ta+=.1;p.y+=p.d;p.x+=Math.sin(f/20);ctx.beginPath();ctx.arc(p.x,p.y,p.r,0,Math.PI*2);ctx.fillStyle=p.c;ctx.fill();});
f++;if(f<210)requestAnimationFrame(draw);else{ctx.clearRect(0,0,cv.width,cv.height);cv.style.display='none';}}
draw();toast('All phases done! 🎉');
}
init();
</script>
</body></html>