From 1c5b8f38c81bfb9c770ff06496374eab320183b8 Mon Sep 17 00:00:00 2001 From: Talhadeveloperr <23021519-005@uog.edu.pk> Date: Wed, 9 Sep 2026 17:07:11 +0500 Subject: [PATCH] more chnages --- app/template_generator.py | 15 +++--- app/template_logger.py | 48 ++++++++++++++++++ logs/template_generator.log | 4 ++ result/templates/batch-wise/25021519.xlsx | Bin 5654 -> 5653 bytes result/templates/batch-wise/25021520.xlsx | Bin 5657 -> 5656 bytes result/templates/batch-wise/25031519.xlsx | Bin 5620 -> 5619 bytes result/templates/batch-wise/26021519.xlsx | Bin 5657 -> 5656 bytes result/templates/batch-wise/26021520.xlsx | Bin 5661 -> 5660 bytes result/templates/batch-wise/26031519.xlsx | Bin 5617 -> 5616 bytes result/templates/department-wise/CS.xlsx | Bin 5807 -> 5806 bytes result/templates/department-wise/EE.xlsx | Bin 5701 -> 5700 bytes result/templates/room-wise/A-101.xlsx | Bin 5684 -> 5683 bytes result/templates/room-wise/A-102.xlsx | Bin 5641 -> 5640 bytes result/templates/room-wise/A-103.xlsx | Bin 5468 -> 5467 bytes result/templates/room-wise/A-201.xlsx | Bin 5468 -> 5467 bytes result/templates/room-wise/A-L01.xlsx | Bin 5622 -> 5621 bytes result/templates/room-wise/A-L02.xlsx | Bin 5621 -> 5620 bytes .../templates/student-wise/25021519-001.xlsx | Bin 5674 -> 5673 bytes .../templates/student-wise/25021519-002.xlsx | Bin 5677 -> 5676 bytes .../templates/student-wise/25021519-003.xlsx | Bin 5674 -> 5673 bytes .../templates/student-wise/25021519-004.xlsx | Bin 5677 -> 5676 bytes .../templates/student-wise/25021519-005.xlsx | Bin 5677 -> 5676 bytes .../templates/student-wise/25021520-001.xlsx | Bin 5676 -> 5675 bytes .../templates/student-wise/25021520-002.xlsx | Bin 5677 -> 5676 bytes .../templates/student-wise/25021520-003.xlsx | Bin 5676 -> 5675 bytes .../templates/student-wise/25021520-004.xlsx | Bin 5676 -> 5675 bytes .../templates/student-wise/25021520-005.xlsx | Bin 5676 -> 5675 bytes .../templates/student-wise/25031519-001.xlsx | Bin 5642 -> 5641 bytes .../templates/student-wise/25031519-002.xlsx | Bin 5642 -> 5641 bytes .../templates/student-wise/25031519-003.xlsx | Bin 5642 -> 5641 bytes .../templates/student-wise/25031519-004.xlsx | Bin 5642 -> 5641 bytes .../templates/student-wise/25031519-005.xlsx | Bin 5642 -> 5641 bytes .../templates/student-wise/26021519-001.xlsx | Bin 5681 -> 5680 bytes .../templates/student-wise/26021519-002.xlsx | Bin 5681 -> 5680 bytes .../templates/student-wise/26021519-003.xlsx | Bin 5679 -> 5678 bytes .../templates/student-wise/26021519-004.xlsx | Bin 5681 -> 5680 bytes .../templates/student-wise/26021519-005.xlsx | Bin 5679 -> 5678 bytes .../templates/student-wise/26021520-001.xlsx | Bin 5678 -> 5677 bytes .../templates/student-wise/26021520-002.xlsx | Bin 5680 -> 5679 bytes .../templates/student-wise/26021520-003.xlsx | Bin 5681 -> 5680 bytes .../templates/student-wise/26021520-004.xlsx | Bin 5679 -> 5678 bytes .../templates/student-wise/26021520-005.xlsx | Bin 5681 -> 5680 bytes .../templates/student-wise/26031519-001.xlsx | Bin 5639 -> 5638 bytes .../templates/student-wise/26031519-002.xlsx | Bin 5639 -> 5638 bytes .../templates/student-wise/26031519-003.xlsx | Bin 5640 -> 5639 bytes .../templates/student-wise/26031519-004.xlsx | Bin 5640 -> 5639 bytes .../templates/student-wise/26031519-005.xlsx | Bin 5641 -> 5640 bytes result/templates/teacher-wise/1001.xlsx | Bin 5592 -> 5591 bytes result/templates/teacher-wise/1002.xlsx | Bin 5655 -> 5654 bytes result/templates/teacher-wise/1003.xlsx | Bin 5463 -> 5462 bytes result/templates/teacher-wise/1004.xlsx | Bin 5563 -> 5562 bytes result/templates/teacher-wise/1005.xlsx | Bin 5461 -> 5460 bytes result/templates/teacher-wise/1006.xlsx | Bin 5536 -> 5535 bytes templates/batch-wise/batch_wise_template.py | 21 +++++--- templates/room-wise/room_wise_template.py | 22 +++++--- .../student-wise/student_wise_template.py | 34 ++++++++++--- .../teacher-wise/teacher_wise_template.py | 34 ++++++++++--- 57 files changed, 147 insertions(+), 31 deletions(-) create mode 100644 app/template_logger.py create mode 100644 logs/template_generator.log diff --git a/app/template_generator.py b/app/template_generator.py index 5b005c6..1f52ed2 100644 --- a/app/template_generator.py +++ b/app/template_generator.py @@ -25,6 +25,7 @@ from template_controller import build_schedule # noqa: E402 from conflict_checker import check_all_conflicts # noqa: E402 from conflict_checker.student_conflict_checker import format_student_conflicts # noqa: E402 from conflict_checker.teacher_conflict_checker import format_teacher_conflicts # noqa: E402 +from template_logger import reset_log, log_error, log_info # noqa: E402 from batch_wise_template import generate_batch_wise_templates # noqa: E402 from department_wise_template import generate_department_wise_templates # noqa: E402 @@ -36,6 +37,8 @@ RESULT_DIR = os.path.join(ROOT_DIR, "result", "templates") def main(): + reset_log() + data_csv_marker = os.path.join(ROOT_DIR, "data", "dummy", "blocks", "rooms.csv") if not os.path.exists(data_csv_marker): print("Dummy data not found — generating it first...") @@ -48,19 +51,19 @@ def main(): data, sessions = build_schedule() print(f"Scheduled {len(sessions)} sessions.\n") - print("Running conflict checks (student/batch and teacher)...") + log_info("Running conflict checks (student/batch and teacher)...") report = check_all_conflicts(sessions) if report["has_conflicts"]: for line in format_student_conflicts(report["student_conflicts"]): - print(f" STUDENT CONFLICT: {line}") + log_error(f"STUDENT CONFLICT: {line}") for line in format_teacher_conflicts(report["teacher_conflicts"]): - print(f" TEACHER CONFLICT: {line}") - print( + log_error(f"TEACHER CONFLICT: {line}") + log_error( f"Found {len(report['student_conflicts'])} student conflict(s) and " - f"{len(report['teacher_conflicts'])} teacher conflict(s).\n" + f"{len(report['teacher_conflicts'])} teacher conflict(s)." ) else: - print("No conflicts found — schedule is clash-free for students and teachers.\n") + log_info("No conflicts found — schedule is clash-free for students and teachers.") generators = [ ("batch-wise", generate_batch_wise_templates), diff --git a/app/template_logger.py b/app/template_logger.py new file mode 100644 index 0000000..4edbc76 --- /dev/null +++ b/app/template_logger.py @@ -0,0 +1,48 @@ +""" +Simple run-scoped logger for the template generator. + +The log file under logs/ is erased and recreated at the start of every run +(see reset_log()) so it only ever reflects the most recent generation. +""" + +import datetime +import os + +ROOT_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) +LOGS_DIR = os.path.join(ROOT_DIR, "logs") +LOG_FILE = os.path.join(LOGS_DIR, "template_generator.log") + +_log_path = None + + +def reset_log(): + """Erases any previous log and starts a fresh one for this run.""" + global _log_path + os.makedirs(LOGS_DIR, exist_ok=True) + _log_path = LOG_FILE + with open(_log_path, "w", encoding="utf-8") as f: + f.write(f"Timetable generation log - started {datetime.datetime.now().isoformat()}\n") + f.write("=" * 80 + "\n") + return _log_path + + +def log_error(message): + """Appends an ERROR line to the current run's log file and prints it.""" + _write("ERROR", message) + + +def log_warning(message): + _write("WARNING", message) + + +def log_info(message): + _write("INFO", message) + + +def _write(level, message): + if _log_path is None: + reset_log() + line = f"[{datetime.datetime.now().strftime('%H:%M:%S')}] {level}: {message}" + with open(_log_path, "a", encoding="utf-8") as f: + f.write(line + "\n") + print(line) diff --git a/logs/template_generator.log b/logs/template_generator.log new file mode 100644 index 0000000..c0eea0f --- /dev/null +++ b/logs/template_generator.log @@ -0,0 +1,4 @@ +Timetable generation log - started 2026-09-09T17:06:29.991568 +================================================================================ +[17:06:29] INFO: Running conflict checks (student/batch and teacher)... +[17:06:29] INFO: No conflicts found — schedule is clash-free for students and teachers. diff --git a/result/templates/batch-wise/25021519.xlsx b/result/templates/batch-wise/25021519.xlsx index c0c45fafb3e5104e867c7b723afb3064a2703d80..372c827ebe948d03553ce6cbef060ee486e38039 100644 GIT binary patch delta 548 zcmbQHGgXHtz?+#xgn@y9gW+7qM4p43=Q=cF|8#f#emC)&T>ZhU!v;KU@u@%No$yo) znEdS0#bEYkQL{4RZMS9}?b~QNY2RO&^}dp~nR#k9e))Y_ysP;hoOpcKtn0o9ufLR8 z74^aG%Iohpzqa3xy}@@&=B&NhKF%`TKflE9iX(@FX6($EIm(+qGg`7So$uJJ$FZCl zL|^AF1JRTH`JaQh76Pe^Ants@#~^NtkQXDhFG8wFECzUpn>t!bws5=91l?$du;&*hKd~h^8BLgr2PDBy^7o%bYoTIW-nR`H0uW=1A`RIOd#FB fI7x8wdO?}V`$c&`#+?P4T|W7hs2bZrVURKaBIMOp delta 566 zcmbQLGfjslz?+#xgn@y9gQ1{(BF{n2f_BZ=3rF{_en0V=T>W`3WyD4jy~Y^s05n>iVQ&_8Y2} zuA7$}E7Un|_WTl`=^k6#eNRfcA1iq-H`v?NcKPPxwpjK3+xTz)?dx2Y73R9tFFpSH zpSrWRztxugeONBMt=WwIbARvprbW&1|D9?Wk%K}rc4o|+%^w-9*q931H|ugNX9m&N zxXVEFWIz7rAg;MUDkF$HPw+8_+brY-=AIX}K?LJu5fL+x8XplE#)p$LMU+6CUJ)54 zC639q98%f=-i%Bl46qo`jAb#KUggWozz_=*;swSF3^XvFp8Nr*4XB$>REE)cvbLyH z3@Ea+8#p|y7#SF}nHU)OVXA?21EY=r14BiQetCXTc2a(Rwq8YU4!UhBad@(T)l7BVFLlT^+8*{A&QZ&KI39w)2cNMUq2rynAgUa*C6R8k^4(;L0qTzSN}Jc7|T5U zPOe#5D06yaWKm^1*S)ga(^Kyr+Tn6Z^UV55f+c)A60e_JfA;X>f1O`V*WYfs|9tcM ztb@@PKYYLWwf(;DjjCL}XY$hVtiSo{{&xT4Mh*$h*qJeNlsA87v}9vC-?3SbVHG1kxBm+(m+qLELsBFEIDAuni&@CrgN!fz$+u$S^*boGYRP;!Ff` z6eq6}QI7%zH;dWyDqm&>hFD-c@B*U(1{xU8a5FGe>s93D1b8zti7>$8 zOEY$Q*KU~uK=r~*3=BZEaL~Z$GFe|#3S^hJs0^d-W`3WyD4jy~Y^s05n>iVQ&_8Y2} zuA7$}E7Un|_WTl`=^k6#eNRfcA1iq-H`v?NcKPPxwpjK3+xTz)?dx2Y73R9tFFpSH zpSrWRztxugeONBMt=WwIbARvprbW&1|D9?Wk%K}rc4o|+%^w-9*q931H|uh&WCqbU zxXVEF5&23UMe z78I3Xbe*gxDg`ps3&_!%oGvP-05ViXZuX+JK$CtjGB8NNOa#&mjMD@sZxoc_Lo@0; QPd@(T)l7BVFLlT^+8*{A&QZ&KI39w)2cNMUq2rynAgUa*C6R8k^4(;L0qTzSN}Jc7|T5U zPOe#5D06yaWKm^1*S)ga(^Kyr+Tn6Z^UV55f+c)A60e_JfA;X>f1O`V*WYfs|9tcM ztb@@PKYYLWwf(;DjjCL}XY$hVtiSo{{&xT4Mh*$h*qJeNlsA87v}9vC-?3Sbqm3Cv zZ{scn(UW!gpM$t!0;!B3Zmr;B5I0H43(Q?7Y=a2K$)APIKx(u_WEdYz_7G75adJdt zm=rlC+i^%~2Y53wi7>!oKr?nn;T&flW(I~>pb#%GUSObsapmOmKy5(XZ-GWBOy&}m ziUCEITiAmwR*Vb`+Dr@#{4mu(x`B~XfPtYRN54G3C_5=XKU=RNHwWD|6}j1q)&dp( g02&~LqPbvlgQzCRw$-9CjG>cHh^n#87Y3;S0D?T!@c;k- delta 577 zcmeyY{Y9H6z?+#xgn@y9gQ1{(BF{n2f_BZ=3rF{_en0V=T>W`3WyD4jy~Y^s05n>iVQ&_8Y2} zuA7$}E7Un|_WTl`=^k6#eNRfcA1iq-H`v?NcKPPxwpjK3+xTz)?dx2Y73R9tFFpSH zpSrWRztxugeONBMt=WwIbARvprbW&1|D9?Wk%K}rc4o|+%^w-9*q931H|uh=F@xx> z+@&CTvJU@q5LZ+nl@Y|P5qu2dCJK3hxod@O5WzV4ldu^`jh2WEZ$>5&23QPC-Uw8-YVtXtJW$yi5t({Leg=m4qSTyXeLWC~s$4VHE$qP- zD@FzeZ6*c=ph`GsVB`{DV5rE^FV8Q^PRh^E)~m?PLD#GzH+#`qpq3v%1Ekd@(T)l7BVFLlT^+8*{A&QZ&KI39w)2cNMUq2rynAgUa*C6R8k^4(;L0qTzSN}Jc7|T5U zPOe#5D06yaWKm^1*S)ga(^Kyr+Tn6Z^UV55f+c)A60e_JfA;X>f1O`V*WYfs|9tcM ztb@@PKYYLWwf(;DjjCL}XY$hVtiSo{{&xT4Mh*$h*qJeNlsA87v}9vC-?3SbV=Xg? zzRO(HG1yUJ7+(m+qLELsBFEIDAuni&@CrgN!fz$+u$S^*boGYRP;!Ff` z6eq6}QI7%z_e!6pJTGPjhFD-c@B*U(1{xSIa5FGe>s93D1b8zti7>$8 zOEY$Q*KU~uK=r~*3=BZEaL~Z$I$2*-3S^hJs0^dtW`3WyD4jy~Y^s05n>iVQ&_8Y2} zuA7$}E7Un|_WTl`=^k6#eNRfcA1iq-H`v?NcKPPxwpjK3+xTz)?dx2Y73R9tFFpSH zpSrWRztxugeONBMt=WwIbARvprbW&1|D9?Wk%K}rc4o|+%^w-9*q931H|uh&Wd_lA zxQjvbC=?w#mvAE3ycR|U{t_B1LH+*28N0p{o<0!oYZ2yirkz4Z$>5&23UMe z78I3XbepUvDg`ps3&_!*oGvP-05ViXZuX+JK$CtjGB8NNOa#&mjMD@sZxoc_Lo@0; QP;M1& diff --git a/result/templates/batch-wise/26021520.xlsx b/result/templates/batch-wise/26021520.xlsx index b8c5f693f34054002eb239d51bd115cb0855f7dd..31791aef91181e501474d40dd17121e80205b338 100644 GIT binary patch delta 577 zcmbQMGe?Ifz?+#xgn@y9gW-I~M4p43=Q}iG_md@(T)l7BVFLlT^+8*{A&QZ&KI39w)2cNMUq2rynAgUa*C6R8k^4(;L0qTzSN}Jc7|T5U zPOe#5D06yaWKm^1*S)ga(^Kyr+Tn6Z^UV55f+c)A60e_JfA;X>f1O`V*WYfs|9tcM ztb@@PKYYLWwf(;DjjCL}XY$hVtiSo{{&xT4Mh*$h*qJeNlsA87v}9vC-?3SbV*@jY ze!yJ}q9=#)KL>H`1kxBm++~7~LELU3FEIDIuni&@C(DSK$%6tFWS{^W1H&A31_ohZ zfWtroTDRc`s%| zf%bUUqWg3IHn+Cr>P?#`!ouCPeS**J2WrxjCf?n*_vVc}!CD5z>1Y0YI%__`uX0^m z!}-Jy5+@S&%+7hQ6kd1O&t)F7OR1A~@=PH;Q-0?SlP;Oc9Q6LG*w5h`y7qvQr>^HA z9-Tiw~}PFN}TawGYVYT6G0XH#IQy|MGn0`v+_@5?c-)d(ZT$ zb;j!Yq+<3Ps+O*smmDk9Id1m+5})ZFTibn4O1U2^c`i5D+tqgY=Hs?l_5IuUZ~yJ< zT$UB)y45c|{`#M~v$wz1mi>KLF1)STjQw+e@A{@i&GG-8Y8a72MKgBh=J$*?Y)l31 zn{_!hFoWp(+{GYzatQx(5Z6{9jS<9MD)<=0?Go|=bFT^8aKgiLvb2bqJcu_lW{$D| z8w0}}bp{4uU?{^t1LMQV1tLmdHH*)iZmD5rU`XI&V32?*0MgqUl_qZ#Q3u&|OGGB( z3O55oMUH-PNo7uIv0g=PPJlNflL!MWJ~d;fckPxr0MsW8j7gwcIA~z>d@(T)l7BVFLlT^+8*{A&QZ&KI39w)2cNMUq2rynAgUa*C6R8k^4(;L0qTzSN}Jc7|T5U zPOe#5D06yaWKm^1*S)ga(^Kyr+Tn6Z^UV55f+c)A60e_JfA;X>f1O`V*WYfs|9tcM ztb@@PKYYLWwf(;DjjCL}XY$hVtiSo{{&xT4Mh*$h*qJeNlsA87v}9vC-?3Sbqm3Cv zZ{sck(UZ0KpM$u<0;!B3Zk6C;5I0`P3(Q?DY=a2K$sdHxKx#BZWEdYzb`?!oVDfsPvXzt10Of(oUWv$9$?`KW#22OJ6zl7ONL1yTu}Yt} zuD4=jV9;h_U;wIwg9b*n$qu4&AX5@VWf*fO*NSR_I4eYDn1X~R=L?BWzAY-iHb)qw F0{|1H&dmS- delta 554 zcmeyM{ZX4Iz?+#xgn@y9gQ1{(BF{n2f_BZ=3rF{_en0V=T>W`3WyD4jy~Y^s05n>iVQ&_8Y2} zuA7$}E7Un|_WTl`=^k6#eNRfcA1iq-H`v?NcKPPxwpjK3+xTz)?dx2Y73R9tFFpSH zpSrWRztxugeONBMt=WwIbARvprbW&1|D9?Wk%K}rc4o|+%^w-9*q931H|uh=F@xx> z+(jUIvL^p?5LZYbl@Y|P6nqTg#tC_WxvPY25WzV4y|9@)C{TgsDGRVMFw9YBU=Rid zI1Dr}KAh|#q69K0Lqvv2iDR-Yht%W+B0M0Gbs{p1t0tcYiUT<>MP#hx_!$`Di&Arn z_4PnxfHxzP2m>tsG-H)MZ(VQ2$iSe@#J~Vl2?q^~?33+9d@(T)l7BVFLlT^+8*{A&QZ&KI39w)2cNMUq2rynAgUa*C6R8k^4(;L0qTzSN}Jc7|T5U zPOe#5D06yaWKm^1*S)ga(^Kyr+Tn6Z^UV55f+c)A60e_JfA;X>f1O`V*WYfs|9tcM ztb@@PKYYLWwf(;DjjCL}XY$hVtiSo{{&xT4Mh*$h*qJeNlsA87v}9vC-?3Sb!-)k% z7x9!a1L?`H_@9Hgmj#j;L0k)=#~`k(uosw{DPn^N#>wkM%;Z6V3NlcDje%i~Is=0+ zFu-A;f$_m)W>F;tkeUY--JAJX7#Qk-F(Ls|0Hn7yDsoJ=*R+(<;N!f6O{ugmlKm=)ShfDrU`ac b>V(Qkl8g)t=b6!6B`~>JOpPrHWC#NQ8R*l{ delta 577 zcmZ3dyIz+kz?+#xgn@y9gQ1{(BF{n2f_BZ=3rF{_en0V=T>W`3WyD4jy~Y^s05n>iVQ&_8Y2} zuA7$}E7Un|_WTl`=^k6#eNRfcA1iq-H`v?NcKPPxwpjK3+xTz)?dx2Y73R9tFFpSH zpSrWRztxugeONBMt=WwIbARvprbW&1|D9?Wk%K}rc4o|+%^w-9*q931H|ugZv4H48 zo-$@2J^3a7a}f8EKr$nUYcBK{#FY{D0&_D&Y!JaXd98?4Dm&&ImP;VATq$4kx7IB7Tc2_08KeQ`LC!P p$Vgc+8AhGSR$`i9$EHrGoFvJ}z;K=!-LZm`o5a-EqCti*005fM&SC%n diff --git a/result/templates/department-wise/EE.xlsx b/result/templates/department-wise/EE.xlsx index 016287ba47ed5aa65b8948d2070ee82a145bc670..38c7dd0576d86845d29295e6a911897d0c56bb0d 100644 GIT binary patch delta 566 zcmX@Ab3}(Hz?+#xgn@y9gW-I~M4p43=Q}iG_md@(T)l7BVFLlT^+8*{A&QZ&KI39w)2cNMUq2rynAgUa*C6R8k^4(;L0qTzSN}Jc7|T5U zPOe#5D06yaWKm^1*S)ga(^Kyr+Tn6Z^UV55f+c)A60e_JfA;X>f1O`V*WYfs|9tcM ztb@@PKYYLWwf(;DjjCL}XY$hVtiSo{{&xT4Mh*$h*qJeNlsA87v}9vC-?3Sb<0dnR z=Hw{_(UTkapM$uW0?CXZ?m5B7Ans-%FEIDNuni&@C%cH4fz;H9$S^*bJX1so#Mvt% z!=%VD*^Wa>JHVTfNrV9w1Ddfr3gi@d5)4jDIF8h{}L;+lk6B7Eg{A zm5KpH)@MFtQwv501}!EA27Z`oAl<+iBf!8=k)vOpUzDAcpP#K)k(+~Vn~L1*MQeeI ge*g`TLeYG1@W`3WyD4jy~Y^s05n>iVQ&_8Y2} zuA7$}E7Un|_WTl`=^k6#eNRfcA1iq-H`v?NcKPPxwpjK3+xTz)?dx2Y73R9tFFpSH zpSrWRztxugeONBMt=WwIbARvprbW&1|D9?Wk%K}rc4o|+%^w-9*q931H|uiTWCqb3 zJf$Fday|cZ5H~|0nGwW2EBF}1-6Z4%=Kd45K?LJuXAv`ynraal#)p$Pe9A_V928LLm5HB!ZV4#8V?__yV8IW#UQ5nXP$x)(G zF`&r$%%^N>!N|a%#l*nC4^s`K8yI5+7#J#Y^vm;$vXk=jv-K)+bI@&5k(<3}El}|f fpaD`Snh#CBAgT$n?KjZ2<&!1E)Yv`>gH!+j7sbvN diff --git a/result/templates/room-wise/A-101.xlsx b/result/templates/room-wise/A-101.xlsx index 9fab134a5f40aaa8e3dff330b6a8316d3a7aab17..11093e0cbb35d297f3e941c4ad19cdb94f3e0a24 100644 GIT binary patch delta 565 zcmdm@vss5Hz?+#xgn@y9gW-I~M4p43=Q}iG_md@(T)l7BVFLlT^+8*{A&QZ&KI39w)2cNMUq2rynAgUa*C6R8k^4(;L0qTzSN}Jc7|T5U zPOe#5D06yaWKm^1*S)ga(^Kyr+Tn6Z^UV55f+c)A60e_JfA;X>f1O`V*WYfs|9tcM ztb@@PKYYLWwf(;DjjCL}XY$hVtiSo{{&xT4Mh*$h*qJeNlsA87v}9vC-?3Sb;{r2~ z-o%p*q9$kZKL?2h31l*YxO)X3gSd-?yujRd!ZwIdoNO#&22ztPBE$G#a)*c#h_gmS zhDniQvK@z%c7Qh{lL!MW0yJaqcf3Ar$IQTBEzH2c3yc;RXkh$2nO{@}q+3^1hB0Qc zm#9<>D6Ycnw^iFQGBD^eF);AMR0HV-Mppp_hKd~h^8BLgr2PDBy^7o%blX(qW-nR` jRQv;IfE0@64U-RuYJzNg4YY0QWDYSkw);RQF)#oCq7K!& delta 577 zcmdn2vqgs|z?+#xgn@y9gQ1{(BF{n2f_BZ=3rF{_en0V=T>W`3WyD4jy~Y^s05n>iVQ&_8Y2} zuA7$}E7Un|_WTl`=^k6#eNRfcA1iq-H`v?NcKPPxwpjK3+xTz)?dx2Y73R9tFFpSH zpSrWRztxugeONBMt=WwIbARvprbW&1|D9?Wk%K}rc4o|+%^w-9*q931H|ug-U(^b diff --git a/result/templates/room-wise/A-102.xlsx b/result/templates/room-wise/A-102.xlsx index c6c4ddaef18d3cb8c2476b4abcec247a21844020..7ec04cd1f3bc5303e1865690db847d989eb36899 100644 GIT binary patch delta 528 zcmeCw>CoW`@MdNaVPIh3U^w3~k>?=i`3}w4z2&v*-%Y$GSMQs3*g(K-ebAQe?%NIq zJgm5UDU_*|EoztWB^AM~brY7|*jbxuUa0Ywk?U5*v&*y17x=L*tU2=h1+$ycjCX3* zJ5)k$Y!D6e>#uh4&o7Kfh+^cc&$t-av}#Sm*Uv`^=C$$VHAuQiU#xhU8 zlWSHM%ADR9Syb81b+7F9^whhDcDP*9JhOh1UtOW758rQoZNKk(qbis0nY?s7>u^5Vu^&3(P$%Y=a2K$s8hPAT!<$BHO{IE_G# z;^cWE>QSKJKA8Vk%9@#h!CIJsffpDRFwnqwnwx>4B1gZtq%tS9Sg#^CC%~JLNrV9w zUz)MgyLQVQ0IC;eVqgHOg@Xo0!^!fZQXspmMP(SJCP#?MfjAXFPV3~UqM9Ji0U#%9 O@?B9iwk<%L85jWXGtZX* delta 541 zcmeCs>D1u~@MdNaVPIh3U?^yx$a9dhpj|We!qNS!-%q?ISAX7%*-)T8-nHod+`rAO zZMk~W=83RycWs~GbNhjs^rVS*_wBuTBTulFL2>$-KcCK;Pw=Z;*Vb@8@q@&Pggvu! z-YbRI9rkmX$Lvz-q@6rdNY9ktdBdbjrZNY;zbf`~_=c`Mpya9Rd5A~nk5kH`%U!D* zCbbnD%-;IoZ~6;kAMFG6a=KPs0n<$l4E?`6U-|w4+l<7PgU8-8y=tAYx<09x{f4Tg z>*giL3U!W~J-@_fy2sXb-;+}A$4Z{d4fb}mUB3CaEmnR1HvZdx`#P6pg}H9^OOL<) zr|#_SZ?$EAAC?PmYc^y5+~2#tX;E|hf2SHobm_hV) z?i3I`*_Qt~h^r=$$q3?36nqTgmI--*xrc;p5WzT^UBnEe#$H5*@!{kc5hW0(0mxCB zJXb{B78KkE^Z!a&Gczz)3o|hA0;2*38W_)TGcZ)-=ogn%=A;(uRpjObcr!AIFu>w# zGNY&rqtRqJQ7Mq2RzQyQ{rSaxG)ZK`>p##=_NTN%$T&o*D+$GWiQ z$nzJ>ZbmcSsafw(3AwRBI8cDWbMA#xAd`bmN%d^-}apIm?T@Z*1- zUrpEFZo2<`^ZKlV(HB2_zxlQOzVD5yT)t=W(($an`Re|5|Kmmu6wTO~F`GX!TC*{o z@7S!zAQ E01j!~djJ3c delta 583 zcmcbubw`UQz?+#xgn@y9gQ1{(BF{m=f_BZ=3rF{_eh(DWW@2CvoLnF*Qh#>Rc`s%| zf%bUUqWg3IHn+Cr>P?#`!ouCPeS**J2WrxjCf?n*_vVc}!CD5z>1Y0YI%__`uX0^m z!}-Jy5+@S&%+7hQ6kd1O&t)F7OR1A~@=PH;Q-0?SlP;Oc9Q6LG*w5h`y7qvQr>^HA z9-Tiw~}PFN}TawGYVYT6G0XH#IQy|MGn0`v+_@5?c-)d(ZT$ zb;j!Yq+<3Ps+O*smmDk9Id1m+5})ZFTibn4O1U2^c`i5D+tqgY=Hs?l_5IuUZ~yJ< zT$UB)y45c|{`#M~v$wz1mi>KLF1)STjQw+e@A{@i&GG-8Y8a72MKgBh=J$*?Y)l31 zn{_#)nL)G{w+o1#Jb~{yh+D~@$q3>;5qJ#Zo)q)~b47)1IN{+rIZD_}9>kj&Ge=o~ zje%i~Is=0+FqC1Sf$`zw^};_b5g8kM zZU%;m9R1>w%AC|{rSaxG)ZK`>p##=_NTN%$T&o*D+$GWiQ z$nzJ>ZbmcSsafw(3AwRBI8cDWbMA#xAd`bmN%d^-}apIm?T@Z*1- zUrpEFZo2<`^ZKlV(HB2_zxlQOzVD5yT)t=W(($an`Re|5|Kmmu6wTO~F`GX!TC*{o z@7S!zAkWD;S3#iwTM^se192Y~v7fo1{K!a)OL3m*eRd{Jsn zvA!ONMAbOCPeg_>ck*fxIgm}Kft(wYUx;Xeot8SGa*`w?1H*Y{bm#A#Y#^$}#t!xq E0C{BH2><{9 delta 583 zcmcbubw`UQz?+#xgn@y9gQ1{(BF{m=f_BZ=3rF{_eh(DWW@2CvoLnF*Qh#>Rc`s%| zf%bUUqWg3IHn+Cr>P?#`!ouCPeS**J2WrxjCf?n*_vVc}!CD5z>1Y0YI%__`uX0^m z!}-Jy5+@S&%+7hQ6kd1O&t)F7OR1A~@=PH;Q-0?SlP;Oc9Q6LG*w5h`y7qvQr>^HA z9-Tiw~}PFN}TawGYVYT6G0XH#IQy|MGn0`v+_@5?c-)d(ZT$ zb;j!Yq+<3Ps+O*smmDk9Id1m+5})ZFTibn4O1U2^c`i5D+tqgY=Hs?l_5IuUZ~yJ< zT$UB)y45c|{`#M~v$wz1mi>KLF1)STjQw+e@A{@i&GG-8Y8a72MKgBh=J$*?Y)l31 zn{_#)nL)G{w+o1#Jb~{yh+D~@$q3>;5qJ#Zo)q)~b47)1IN{+rIZD_}9>kj&Ge=o~ zje%i~Is=0+FqC1Sf$`zw^}A~H7i z+zbpAIr_yVl{u-!dKI}j0p5&EA`Gzj)Qp|pwOi%@P@gc+ETCFAXkcueTqq(1GN)HW uhB0sQDiJvl=M<20bMkW$O|UCcCsa<7WMp7C&y4QUeUtS?)z~<|&IbVc&Cuuo diff --git a/result/templates/room-wise/A-L01.xlsx b/result/templates/room-wise/A-L01.xlsx index 249958c2ed7a6e6947859635e07a49250f13f574..91ec00d2f28b85068bc3f68827ecc0a853c5e364 100644 GIT binary patch delta 548 zcmeyS{Z*SMz?+#xgn@y9gW-I~M4p43=Q}iG_md@(T)l7BVFLlT^+8*{A&QZ&KI39w)2cNMUq2rynAgUa*C6R8k^4(;L0qTzSN}Jc7|T5U zPOe#5D06yaWKm^1*S)ga(^Kyr+Tn6Z^UV55f+c)A60e_JfA;X>f1O`V*WYfs|9tcM ztb@@PKYYLWwf(;DjjCL}XY$hVtiSo{{&xT4Mh*$h*qJeNlsA87v}9vC-?3SbV?Hy8 zKF=Krq9?2IKL>I71@ag{+?NWE;^c|Q zFe!3Ow&Re}4)A7V5@CSFfM)F7+Y<_Pm>C!(gculjf$;(Z4UC5-Uj%9c>V6M2N^&xf zs1%5!Au40fB*4H>k)vOpUzDAcpP#K)k(+~Vtcu+1MQed({a|EZkb;>Bq#GEE1Sj_k a%1oXw$^$ZPt*8uR_~cWfYHSOILCOHC$W`3WyD4jy~Y^s05n>iVQ&_8Y2} zuA7$}E7Un|_WTl`=^k6#eNRfcA1iq-H`v?NcKPPxwpjK3+xTz)?dx2Y73R9tFFpSH zpSrWRztxugeONBMt=WwIbARvprbW&1|D9?Wk%K}rc4o|+%^w-9*q931H|uiDX9m&d zxI;noWL5s>ATFOk9wUfbC-@k|O&0P3bJq*oAcAr77hyAy8XXZC#)p$VMU+6CToD;2 zC639q98%f=-i%Bl46qo`jJb1A~MR0|PHGUSObs@$lpeKy5(X?|?>0P39Jr ziUCEI+$Aq{XGR7FVGs00&IWyZ`_I diff --git a/result/templates/room-wise/A-L02.xlsx b/result/templates/room-wise/A-L02.xlsx index 83626f44c2a0163f8d9957bd707a0a18a50b1634..77297e07fc319aa6cf1186c9d6c147d3f9d01270 100644 GIT binary patch delta 566 zcmeyW{Y9H6z?+#xgn@y9gW-I~M4p43=Q}iG_md@(T)l7BVFLlT^+8*{A&QZ&KI39w)2cNMUq2rynAgUa*C6R8k^4(;L0qTzSN}Jc7|T5U zPOe#5D06yaWKm^1*S)ga(^Kyr+Tn6Z^UV55f+c)A60e_JfA;X>f1O`V*WYfs|9tcM ztb@@PKYYLWwf(;DjjCL}XY$hVtiSo{{&xT4Mh*$h*qJeNlsA87v}9vC-?3SbV;(bz zKF1vjq9?2JKL>I71o9X`+&aO>Aa1gd7nr+V*ai`dlfMX?fz;@T$S^*b>?xuI;^d0R zFe!3Ow&Re}4)A7V5@CSFfM)F7+Y<_Pm>C!(gculjf$;(Z4U7jTUjS+Y>V5|_N@6m% zs8kFnvJC8VWSkip7>t=182DkTfph~SqW}X#MUH-Xeo=N(etx!IMQ#qdZ7OoJ7p(;< h{sA;V3Pp3_W`3WyD4jy~Y^s05n>iVQ&_8Y2} zuA7$}E7Un|_WTl`=^k6#eNRfcA1iq-H`v?NcKPPxwpjK3+xTz)?dx2Y73R9tFFpSH zpSrWRztxugeONBMt=WwIbARvprbW&1|D9?Wk%K}rc4o|+%^w-9*q931H|uiDV+PS@ zxkEwpWEKABATF;!9wUfbEBF}1O%n0~bJq#mAcAr7XJIpt8f_67#)p$VM3g|B91$5N zC639q98%f=-i%Bl46qo`jJb1A~MR0|PHGUSObs@zCV+Ky5(XZ-GWhPUaGo ziUCEIfqjmQGb00oF%ts=KTI`{ZeU~*U|^`o(J#+0%1+A9&(^ER%|W+KMQ-+@wLrx` ffCfmRXfB%EAgT$nZMCQjWBB9~qH1glg+VF+$L-8H diff --git a/result/templates/student-wise/25021519-001.xlsx b/result/templates/student-wise/25021519-001.xlsx index 96f2c188da69e429c1d22aa8f2d2f5b748d3f126..283ca48bc9f8eea1660889528f2832c2f29b4148 100644 GIT binary patch delta 528 zcmZ3bvr>mAz?+#xgn@y9gW-I~M4p43=Q}iG_md@(T)l7BVFLlT^+8*{A&QZ&KI39w)2cNMUq2rynAgUa*C6R8k^4(;L0qTzSN}Jc7|T5U zPOe#5D06yaWKm^1*S)ga(^Kyr+Tn6Z^UV55f+c)A60e_JfA;X>f1O`V*WYfs|9tcM ztb@@PKYYLWwf(;DjjCL}XY$hVtiSo{{&xT4Mh*$h*qJeNlsA87v}9vC-?3SbV>>g5 ze$HJ6q9@1mKL>F=1Tq;x+|7cILEITaUSRGMVH-p+PSzAL1F1 QobJj0MAg`?3WIb40Pr!?1poj5 delta 528 zcmZ3fvr302z?+#xgn@y9gQ1{(BF{n2f_BZ=3rF{_en0V=T>W`3WyD4jy~Y^s05n>iVQ&_8Y2} zuA7$}E7Un|_WTl`=^k6#eNRfcA1iq-H`v?NcKPPxwpjK3+xTz)?dx2Y73R9tFFpSH zpSrWRztxugeONBMt=WwIbARvprbW&1|D9?Wk%K}rc4o|+%^w-9*q931H|uh2X9m&F zxXVEFvUVm7_XmzjYf78nn_z^H(M2FBam3=9=H`o$%cIjO~Z6}dS9-i%Bl46yjp zjGf-KTjl^zy)Y9415hm-G%yBFwilHG*%d7+!)Pd@(T)l7BVFLlT^+8*{A&QZ&KI39w)2cNMUq2rynAgUa*C6R8k^4(;L0qTzSN}Jc7|T5U zPOe#5D06yaWKm^1*S)ga(^Kyr+Tn6Z^UV55f+c)A60e_JfA;X>f1O`V*WYfs|9tcM ztb@@PKYYLWwf(;DjjCL}XY$hVtiSo{{&xT4Mh*$h*qJeNlsA87v}9vC-?3SbV<$6+ ze#u=1q9-TvKL>HW1hN=G+--u7LEPCwUSRHXVH-p+PSz1IlLrMV$Up%$28KE63=G1+ z0EdAF#s`xdMU)gkY8(?XZnZKqFf{QoFi5}@0O@UwiX4;eIHV@u72yF{_*z7U@y=up zQ5kEHuIXL7WexyU2{SP;a3kqzU<~1BV2CeD%_-K`1CasVj7%a7u-Kj)FDk=mJGn+w p4rJsUAZO*|ouZmx$EHrGoFvJ}z;GVu7*xmhO=c8RW4i$s1OR}T*fszF delta 603 zcmZ3ZvsQ;Ez?+#xgn@y9gQ1{(BF{m=f_BZ=3rF{_eh(DWW@2Cvoa`tfQh#>Rc`s%| zf%bUUqWg3IHn+Cr>P?#`!ouCPeS**J2WrxjCf?n*_vVc}!CD5z>1Y0YI%__`uX0^m z!}-Jy5+@S&%+7hQ6kd1O&t)F7OR1A~@=PH;Q-0?SlP;Oc9Q6LG*w5h`y7qvQr>^HA z9-Tiw~}PFN}TawGYVYT6G0XH#IQy|MGn0`v+_@5?c-)d(ZT$ zb;j!Yq+<3Ps+O*smmDk9Id1m+5})ZFTibn4O1U2^c`i5D+tqgY=Hs?l_5IuUZ~yJ< zT$UB)y45c|{`#M~v$wz1mi>KLF1)STjQw+e@A{@i&GG-8Y8a72MKgBh=J$*?Y)l31 zn{_#MGK1(B++`qoasvNz5Z6;6ixI@#D)<=0oh9T2<~|d);e?0hWNi^Mc@S@A%p7F_ zHU@?{>I@9Rz)*&P2F8bz8$^`AY8(?XZnZKqFf{QoFi5}@0O@UwN|O(YsDtc!B_b1X zmz#m1B1gZtq%tS9Sg#^CC%~JLNrV9wpPI4LyLQVQ0O}J4#w1WJ95gV7@-r~R7p3MD z>+69?RE?A4L}eK5CRdBffoz%$mAz?+#xgn@y9gW-I~M4p43=Q}iG_md@(T)l7BVFLlT^+8*{A&QZ&KI39w)2cNMUq2rynAgUa*C6R8k^4(;L0qTzSN}Jc7|T5U zPOe#5D06yaWKm^1*S)ga(^Kyr+Tn6Z^UV55f+c)A60e_JfA;X>f1O`V*WYfs|9tcM ztb@@PKYYLWwf(;DjjCL}XY$hVtiSo{{&xT4Mh*$h*qJeNlsA87v}9vC-?3SbV;eJw ze#Tt}q9@1kKL>H$1+o}H+|7cILEITaUSRGMVH-p+PSzAL1F1C$F_!t-@fT0fq+Zq)o?-x-AX?P(bV{?<6fuSNtzqq6_C$(6wA~z?%n~_O` z0Ty4HvD3SD%Nzh|7G`2#0IG$92FAe24x&;Zb7Dkg7_BB(ipqgFGl86CledX#f;bO> QobJj0MAg`?3WIb401BMcG5`Po delta 528 zcmZ3fvr302z?+#xgn@y9gQ1{(BF{n2f_BZ=3rF{_en0V=T>W`3WyD4jy~Y^s05n>iVQ&_8Y2} zuA7$}E7Un|_WTl`=^k6#eNRfcA1iq-H`v?NcKPPxwpjK3+xTz)?dx2Y73R9tFFpSH zpSrWRztxugeONBMt=WwIbARvprbW&1|D9?Wk%K}rc4o|+%^w-9*q931H|uh2V`eIB z-~5!j3`9?k<$n(1x(Q@4g1DOmAA`8lg}fMnswY1dwm}5rWDOBBkYIv{4CBMewIWI& z&O#tZY4Sc1^{7H%aI=_AukvMPV2B0A11~TtV4#8V7B>S!MUH-PNo7uIv0g=PPJlNf zlL!MOzCc>1ckPxr08}r`#J~Vl3kMC1L6hx8r9h607L{SNo?Ia+2ja{Ca+XitDyj+M SJOFZfCjS*xW4k5{(g^_WiOMYi diff --git a/result/templates/student-wise/25021519-004.xlsx b/result/templates/student-wise/25021519-004.xlsx index c803a245c7142614e6b6c4e17c8646ca52d1eeef..a72fc6fb2dc7cd2f68d4fb31cfbd00402a89ff41 100644 GIT binary patch delta 577 zcmZ3hvqpy}z?+#xgn@y9gW-I~M4p43=Q}iG_md@(T)l7BVFLlT^+8*{A&QZ&KI39w)2cNMUq2rynAgUa*C6R8k^4(;L0qTzSN}Jc7|T5U zPOe#5D06yaWKm^1*S)ga(^Kyr+Tn6Z^UV55f+c)A60e_JfA;X>f1O`V*WYfs|9tcM ztb@@PKYYLWwf(;DjjCL}XY$hVtiSo{{&xT4Mh*$h*qJeNlsA87v}9vC-?3SbV<$6+ ze#u=1q9-TvKL>HW1hN=G+--u7LEPCwUSRHXVH-p+PSz1IlLrMV$Up%$28KE63=G1+ z0EdAF#s`xdMU)gkY8rFmPP8&JFf{QoFi5}@0O@UwiX4;eIHV@u72yF{_*z7U@y=up zQ5kEHuIXL7WexyU2{SP;a3kqzU<~1BV2CeD%_-K`1CasVj7%a7u-Kj)FDk=mJGn+w p4rJsUAZO*|ouZmx$EHrGoFvJ}z;GVu7*xmhO=c8RW4i$s1OTC?*k%9# delta 603 zcmZ3ZvsQ;Ez?+#xgn@y9gQ2i}BF{m=!gkHr>-UAXz6XkFGchm-PIeR#sXsd@(EG4~ z!14WEPxkIzcJ-jsb@8L>tOpw(MSJ8$M_g`svgGb|^WNz87wiI`Che}T`)=*AdQX7f z1MdPkX2~A&$#2^=rrh7aJW-q>Q1-&9h-F76%(50=v!sN#`a_WHQ@MrfR*6QatW@=! z(byW_u_k+~kk$ef@pBbx#rFK?scp-wXT7obXrt1HNzAXGb^bH?svE;-++%R#N36qM zf#R?JIqw*()t6^XyJFGz^v08zTaAZ*f4-a@x81;5#Ztp({UX7VPdgH)pUgk|_wcug zrKO?kyRznCwOFqrHz&ZGkx7IB7N452)4O)d902MQ2F4^%EgUp3hVnBo#22OJ z6zl7ONK}oJ<3wc`?Iu@?%7JW}4dkqvyhBtI?6lMgm6IeH85qt3ormiD{z+nLY&XGT E07HP+A^-pY diff --git a/result/templates/student-wise/25021519-005.xlsx b/result/templates/student-wise/25021519-005.xlsx index 1f54fc69672b32d41308e7eaa2a1342960a0755c..d91154e56e156b4120455891006a8e8cd5211a29 100644 GIT binary patch delta 577 zcmZ3hvqpy}z?+#xgn@y9gW-I~M4p43=Q}iG_md@(T)l7BVFLlT^+8*{A&QZ&KI39w)2cNMUq2rynAgUa*C6R8k^4(;L0qTzSN}Jc7|T5U zPOe#5D06yaWKm^1*S)ga(^Kyr+Tn6Z^UV55f+c)A60e_JfA;X>f1O`V*WYfs|9tcM ztb@@PKYYLWwf(;DjjCL}XY$hVtiSo{{&xT4Mh*$h*qJeNlsA87v}9vC-?3SbV<$6+ ze#u=1q9-TvKL>HW1hN=G+--u7LEPCwUSRHXVH-p+PSz1IlLrMV$Up%$28KE63=G1+ z0EdAF#s`xdMU)gkY8K{&pKoPmU})lFV32?*0MgqU6*(r`aY#+RE5ZY^@U@5xFV6i-UAXz6XkFGchm-PIeR#sXsd@(EG4~ z!14WEPxkIzcJ-jsb@8L>tOpw(MSJ8$M_g`svgGb|^WNz87wiI`Che}T`)=*AdQX7f z1MdPkX2~A&$#2^=rrh7aJW-q>Q1-&9h-F76%(50=v!sN#`a_WHQ@MrfR*6QatW@=! z(byW_u_k+~kk$ef@pBbx#rFK?scp-wXT7obXrt1HNzAXGb^bH?svE;-++%R#N36qM zf#R?JIqw*()t6^XyJFGz^v08zTaAZ*f4-a@x81;5#Ztp({UX7VPdgH)pUgk|_wcug zrKO?kyRznLq(2$aY^x{8^~ETd55Sb*lDQ~Dkn)YGBBJ6IuF(P{gcGh*lvQw E09^OiL;wH) diff --git a/result/templates/student-wise/25021520-001.xlsx b/result/templates/student-wise/25021520-001.xlsx index 5e20a9fc05bd963815cf40e5cdc93f6f8c25befd..44d6a24b80caa86f730b575496b449cbe98e37a4 100644 GIT binary patch delta 603 zcmZ3Zvs#BIz?+#xgn@y9gW-I~M4p3!=Q}iG_m{rSaxG)ZK`>p##=_NTN%$T&o*D+$GWiQ z$nzJ>ZbmcSsafw(3AwRBI8cDWbMA#xAd`bmN%d^-}apIm?T@Z*1- zUrpEFZo2<`^ZKlV(HB2_zxlQOzVD5yT)t=W(($an`Re|5|Kmmu6wTO~F`GX!TC*{o z@7S!zv4a^zzu+zd(UTMSpM$ub0$Ge8?pDFaAnq(7FEIC+uni|XJSS_5n8|~9Gh^l` z3$QUT%u#1x5C(=a3^Xu4nA{+u1Xd%mk$GPWGXp~t9|MB~OaYMI)~Go7poluiu2&*5 z5x2P+7%Fn~i%TkVQj7H}a&rQ_8JR>FVDYILJH2bS%mJW2VPH%G)xtpoV=zAhLwr$c zPO-ioh(y&mIZjlD(PnbBs2s?q*+9;U$vZ?f!A?t^P&rAGk%8en(0QoN@0}#3#&#Vn F1^@v6+-UAXz6XkFGchm-PIeFxsXsd@(EG4~ z!14WEPxkIzcJ-jsb@8L>tOpw(MSJ8$M_g`svgGb|^WNz87wiI`Che}T`)=*AdQX7f z1MdPkX2~A&$#2^=rrh7aJW-q>Q1-&9h-F76%(50=v!sN#`a_WHQ@MrfR*6QatW@=! z(byW_u_k+~kk$ef@pBbx#rFK?scp-wXT7obXrt1HNzAXGb^bH?svE;-++%R#N36qM zf#R?JIqw*()t6^XyJFGz^v08zTaAZ*f4-a@x81;5#Ztp({UX7VPdgH)pUgk|_wcug zrKO?kyRznd@(T)l7BVFLlT^+8*{A&QZ&KI39w)2cNMUq2rynAgUa*C6R8k^4(;L0qTzSN}Jc7|T5U zPOe#5D06yaWKm^1*S)ga(^Kyr+Tn6Z^UV55f+c)A60e_JfA;X>f1O`V*WYfs|9tcM ztb@@PKYYLWwf(;DjjCL}XY$hVtiSo{{&xT4Mh*$h*qJeNlsA87v}9vC-?3SbV+S*c ze!*P^q9-TtKL>F=1+p1I+--u7LEPCwUSRHXVH-p+PSz1IlLrMV$Up%$28KE63=G1+ z0EdAF#s`xdMU)gkYD%_CY;R#^U})lFV32?*0MgqU6*(r`aY#+RE5ZY^@U@5xFV6i*hT;V delta 603 zcmZ3ZvsQ;Ez?+#xgn@y9gQ2i}BF{m=!gkHr>-UAXz6XkFGchm-PIeR#sXsd@(EG4~ z!14WEPxkIzcJ-jsb@8L>tOpw(MSJ8$M_g`svgGb|^WNz87wiI`Che}T`)=*AdQX7f z1MdPkX2~A&$#2^=rrh7aJW-q>Q1-&9h-F76%(50=v!sN#`a_WHQ@MrfR*6QatW@=! z(byW_u_k+~kk$ef@pBbx#rFK?scp-wXT7obXrt1HNzAXGb^bH?svE;-++%R#N36qM zf#R?JIqw*()t6^XyJFGz^v08zTaAZ*f4-a@x81;5#Ztp({UX7VPdgH)pUgk|_wcug zrKO?kyRzn^x{8^~ETd55Sb*lDQ~Dkn)YGBBJ6IuF(P{gcGh*lvQw E04wF!0ssI2 diff --git a/result/templates/student-wise/25021520-003.xlsx b/result/templates/student-wise/25021520-003.xlsx index a8eac05671916272240acdc7aa3092a606b5b898..09e775d68e1dbc96ca5e4554df1b6bb7421a7939 100644 GIT binary patch delta 603 zcmZ3Zvs#BIz?+#xgn@y9gW-I~M4p3!=Q}iG_m{rSaxG)ZK`>p##=_NTN%$T&o*D+$GWiQ z$nzJ>ZbmcSsafw(3AwRBI8cDWbMA#xAd`bmN%d^-}apIm?T@Z*1- zUrpEFZo2<`^ZKlV(HB2_zxlQOzVD5yT)t=W(($an`Re|5|Kmmu6wTO~F`GX!TC*{o z@7S!zv7H%2Kj$t3(Uar(pM$s_0@;ip?pDFaAnq(7FEIC+uni|XJSS_5n8|~9Gh^l` z3$QUT%u#1x5C(=a3^Xu4nA{+u1XdHWRd7QyGXp~t9|MB~OaYMI)~Go7poluiu2&*5 z5x2M*7%Fn~i%TkVQj7H}a&rQ_8JR>FVDYILJH2bS%mJW2VPH%G)xtpoV-P-UAXz6XkFGchm-PIeFxsXsd@(EG4~ z!14WEPxkIzcJ-jsb@8L>tOpw(MSJ8$M_g`svgGb|^WNz87wiI`Che}T`)=*AdQX7f z1MdPkX2~A&$#2^=rrh7aJW-q>Q1-&9h-F76%(50=v!sN#`a_WHQ@MrfR*6QatW@=! z(byW_u_k+~kk$ef@pBbx#rFK?scp-wXT7obXrt1HNzAXGb^bH?svE;-++%R#N36qM zf#R?JIqw*()t6^XyJFGz^v08zTaAZ*f4-a@x81;5#Ztp({UX7VPdgH)pUgk|_wcug zrKO?kyRzn{rSaxG)ZK`>p##=_NTN%$T&o*D+$GWiQ z$nzJ>ZbmcSsafw(3AwRBI8cDWbMA#xAd`bmN%d^-}apIm?T@Z*1- zUrpEFZo2<`^ZKlV(HB2_zxlQOzVD5yT)t=W(($an`Re|5|Kmmu6wTO~F`GX!TC*{o z@7S!zv7H%2Kj$t3(Uar(pM$s_0@;ip?pDFaAnq(7FEIC+uni|XJSS_5n8|~9Gh^l` z3$QUT%u#1x5C(=a3^Xu4nA{+u1XimQWBLl;Epz~0j-#bZ6jqN&E F3;>9m-829I delta 583 zcmZ3jvqpy}z?+#xgn@y9gQ2i}BF{m=!gkHr>-UAXz6XkFGchm-PIeFxsXsd@(EG4~ z!14WEPxkIzcJ-jsb@8L>tOpw(MSJ8$M_g`svgGb|^WNz87wiI`Che}T`)=*AdQX7f z1MdPkX2~A&$#2^=rrh7aJW-q>Q1-&9h-F76%(50=v!sN#`a_WHQ@MrfR*6QatW@=! z(byW_u_k+~kk$ef@pBbx#rFK?scp-wXT7obXrt1HNzAXGb^bH?svE;-++%R#N36qM zf#R?JIqw*()t6^XyJFGz^v08zTaAZ*f4-a@x81;5#Ztp({UX7VPdgH)pUgk|_wcug zrKO?kyRzn!pZ{ z&24T5hKd~h;*!do)MCAg+?)V!MkWykSbS>6PVd?+a{#DM7#Nd4wQ$hD7(CfgR0?EH xtf&m5&EzUkIS^+Skh5~~c2P~RD^e#^PLgC~U^owS393u`CjS>zW4i$s1OUc#)D!>! diff --git a/result/templates/student-wise/25021520-005.xlsx b/result/templates/student-wise/25021520-005.xlsx index dda79bf6955fd346cd83022283c90818c8960eab..dbac66536753d39197675105a9bf189e147b48e9 100644 GIT binary patch delta 603 zcmZ3Zvs#BIz?+#xgn@y9gW-I~M4p3!=Q}iG_m{rSaxG)ZK`>p##=_NTN%$T&o*D+$GWiQ z$nzJ>ZbmcSsafw(3AwRBI8cDWbMA#xAd`bmN%d^-}apIm?T@Z*1- zUrpEFZo2<`^ZKlV(HB2_zxlQOzVD5yT)t=W(($an`Re|5|Kmmu6wTO~F`GX!TC*{o z@7S!zv7H%2Kj$t3(Uar(pM$s_0@;ip?pDFaAnq(7FEIC+uni|XJSS_5n8|~9Gh^l` z3$QUT%u#1x5C(=a3^Xu4nA{+u1XeR;r~0C1W(I~PJ_ZH}m;xZZtx<9EK@oM3U9UuB zB5rXrFjVB|7nfA#q!#N{mQWBLl;Epz~0j-#bZ6jqN&E F3;<`e-3R~x delta 583 zcmZ3jvqpy}z?+#xgn@y9gQ2i}BF{m=!gkHr>-UAXz6XkFGchm-PIeFxsXsd@(EG4~ z!14WEPxkIzcJ-jsb@8L>tOpw(MSJ8$M_g`svgGb|^WNz87wiI`Che}T`)=*AdQX7f z1MdPkX2~A&$#2^=rrh7aJW-q>Q1-&9h-F76%(50=v!sN#`a_WHQ@MrfR*6QatW@=! z(byW_u_k+~kk$ef@pBbx#rFK?scp-wXT7obXrt1HNzAXGb^bH?svE;-++%R#N36qM zf#R?JIqw*()t6^XyJFGz^v08zTaAZ*f4-a@x81;5#Ztp({UX7VPdgH)pUgk|_wcug zrKO?kyRzn!pZ{ z&24T5hKd~h;*!do)MCAg+?)V!MkWykSbS>6PVd?+a{#DM7#Nd4wQ$hD7(CfgR0?EH xtf&m5&EzUkIS^+Skh5~~c2P~RD^e#^PLgC~U^owS393u`CjS>zW4i$s1OTZ0)93&I diff --git a/result/templates/student-wise/25031519-001.xlsx b/result/templates/student-wise/25031519-001.xlsx index 4c3b9d29c22083e69ee494732348ca67a086986b..04d83ddb5d10be3a361c634816f0ec6d8f6d37ce 100644 GIT binary patch delta 528 zcmeCu>D1u~@MdNaVPIh3U^w3~k>?=i`3}w4z2&v*-%Y$GSMQs3*g(K-ebAQe?%NIq zJgm5UDU_*|EoztWB^AM~brY7|*jbxuUa0Ywk?U5*v&*y17x=L*tU2=h1+$ycjCX3* zJ5)k$Y!D6e>#uh4&o7Kfh+^cc&$t-av}#Sm*Uv`^=C$$VHAuQiU#xhU8 zlWSHM%ADR9Syb81b+7F9^whhDcDP*9JhOh1UtOW758rQoZNKk(qbis0nY?s7>u!<$B8J(gF@Ky z>=U;XW(J16ybKHyz|e<*ZHC)i|@MdNaVPIh3U?^;#$a9dhuw66u`hDT8?+8N-d#v6Qp!dMLK#p0m$9(eJ zc8w|bH!x2WX9$$Na4KTikqNV`#n&t;;jR7Plu;ks3#5h^QHJ!dqw#&@jA-YTTE zKt=pq#agjF|9NWLGFflbFFx9+^kEY7>t~(+Oup*IFdFw5-1rgeuveh?tAEZr25a@@ z8Pl#<^gX@tB<5D*;oqMxXUAkOW_RYE+Gnhg2 zaqdzOJ=u=`If$z+kjV(*P7-_!;+6|}fw_l;Z4kjYnM1@3q{cx+hVkL#SP>-V(7?Edn}MMsN58nFGAFfIuOc@mz?+dtgaH;` znz7TncFP<9suyNrU;wIxg9b+9$?~F7AiJzZWf)~9M~KRSI2Axn`{b#jnjp>rASY+? MT~Rf*ZNea(02|}UxBvhE diff --git a/result/templates/student-wise/25031519-002.xlsx b/result/templates/student-wise/25031519-002.xlsx index 1b972a9b90a5364b44952088fd1077d6f1b4c2b8..7fd3b22831e79a2b5cb587edbd3d3dce19122ebb 100644 GIT binary patch delta 528 zcmeCu>D1u~@MdNaVPIh3U^w3~k>?=i`3}w4z2&v*-%Y$GSMQs3*g(K-ebAQe?%NIq zJgm5UDU_*|EoztWB^AM~brY7|*jbxuUa0Ywk?U5*v&*y17x=L*tU2=h1+$ycjCX3* zJ5)k$Y!D6e>#uh4&o7Kfh+^cc&$t-av}#Sm*Uv`^=C$$VHAuQiU#xhU8 zlWSHM%ADR9Syb81b+7F9^whhDcDP*9JhOh1UtOW758rQoZNKk(qbis0nY?s7>u!<$B8J(gF<+% z<$R-LW(J16ybKHyz|e<*ZHC)i|@MdNaVPIh3U?^;#$a9dhuw66u`hDT8?+8N-d#v6Qp!dMLK#p0m$9(eJ zc8w|bH!x2WX9$$Na4KTikqNV`#n&t;;jR7Plu;ks3#5h^QHJ!dqw#&@jA-YTTE zKt=pq#agjF|9NWLGFflbFFx9+^kEY7>t~(+Oup*IFdFw5-1rgeuveh?tAEZr25a@@ z8Pl#<^gX@tB<5D*;oqMxXUAkOW_RYE+)0si^ zG44_jJ=vE3If$z!ki`h%P7-_!;+6|}fw_l;Z4kjYnM1@3q{cx+hVkL#SP>-V(7?Exn}MMsN58nFGAFfIuOc@mz?+dtgaH;` znz7TncFP<9suyNrU;wIxg9b*U$?~F7AiJzZWf-L=M~KRSI2Axn`{b#jnjp>rASY+? MT~Rf*ZNea(02qSFvH$=8 diff --git a/result/templates/student-wise/25031519-003.xlsx b/result/templates/student-wise/25031519-003.xlsx index 11f5ee9bc0c6fcfc5da3f51dde33e137490e2edc..bbc91c48005caa886ebff02f947ece123a807ff1 100644 GIT binary patch delta 528 zcmeCu>D1u~@MdNaVPIh3U^w3~k>?=i`3}w4z2&v*-%Y$GSMQs3*g(K-ebAQe?%NIq zJgm5UDU_*|EoztWB^AM~brY7|*jbxuUa0Ywk?U5*v&*y17x=L*tU2=h1+$ycjCX3* zJ5)k$Y!D6e>#uh4&o7Kfh+^cc&$t-av}#Sm*Uv`^=C$$VHAuQiU#xhU8 zlWSHM%ADR9Syb81b+7F9^whhDcDP*9JhOh1UtOW758rQoZNKk(qbis0nY?s7>u!<$B8J(gF;v_ zYnxm$GXuk3UIqpUVCciZwnoLt^F`D_8cvAF*zDqFV5rE^FD|LfNiEi^$ju4xW@Hj! zfW?<)?DVePG6#T~g_#%_fNJ5OfzfcXf~XY892-#?Mybh>qH-WkC6LoLd77vuh;tCg P$)0>qRE=$`Fi0l=@@UXa delta 528 zcmeCw>C)i|@MdNaVPIh3U?^;#$a9dhuw66u`hDT8?+8N-d#v6Qp!dMLK#p0m$9(eJ zc8w|bH!x2WX9$$Na4KTikqNV`#n&t;;jR7Plu;ks3#5h^QHJ!dqw#&@jA-YTTE zKt=pq#agjF|9NWLGFflbFFx9+^kEY7>t~(+Oup*IFdFw5-1rgeuveh?tAEZr25a@@ z8Pl#<^gX@tB<5D*;oqMxXUAkOW_RYE+)0si^ zG44_jJ=vE3If$z!ki`h%P7-_!;+6|}fw_l;Z4kjYnM1@3q{cx+hVkL#SP>-V(7?Exn}MMsN58nFGAFfIuOc@mz?+dtgaH;` znz7TncFP<9suyNrU;wIxg9b*U$?~F7AiJzZWf-L=M~KRSI2Axn`{b#jnjp>rASY+? MT~Rf*ZNea(02qSFvH$=8 diff --git a/result/templates/student-wise/25031519-004.xlsx b/result/templates/student-wise/25031519-004.xlsx index 139e5b3acfdb494c7a6e12247c9bf8aaa0613138..5904882f923d95f76f2ac5990633d3b3edc4d963 100644 GIT binary patch delta 528 zcmeCu>D1u~@MdNaVPIh3U^w3~k>?=i`3}w4z2&v*-%Y$GSMQs3*g(K-ebAQe?%NIq zJgm5UDU_*|EoztWB^AM~brY7|*jbxuUa0Ywk?U5*v&*y17x=L*tU2=h1+$ycjCX3* zJ5)k$Y!D6e>#uh4&o7Kfh+^cc&$t-av}#Sm*Uv`^=C$$VHAuQiU#xhU8 zlWSHM%ADR9Syb81b+7F9^whhDcDP*9JhOh1UtOW758rQoZNKk(qbis0nY?s7>u!<$B8J(gF?9V zLdLCRW(J16ybKHyz|e<*ZHC)i|@MdNaVPIh3U?^;#$a9dhuw66u`hDT8?+8N-d#v6Qp!dMLK#p0m$9(eJ zc8w|bH!x2WX9$$Na4KTikqNV`#n&t;;jR7Plu;ks3#5h^QHJ!dqw#&@jA-YTTE zKt=pq#agjF|9NWLGFflbFFx9+^kEY7>t~(+Oup*IFdFw5-1rgeuveh?tAEZr25a@@ z8Pl#<^gX@tB<5D*;oqMxXUAkOW_RYE+)0si^ zG44_jJ=vE3If$z!ki`h%P7-_!;+6|}fw_l;Z4kjYnM1@3q{cx+hVkL#SP>-V(7?Exn}MMsN58nFGAFfIuOc@mz?+dtgaH;` znz7TncFP<9suyNrU;wIxg9b*U$?~F7AiJzZWf-L=M~KRSI2Axn`{b#jnjp>rASY+? MT~Rf*ZNea(02qSFvH$=8 diff --git a/result/templates/student-wise/25031519-005.xlsx b/result/templates/student-wise/25031519-005.xlsx index 3ef170a8ff9989a8fcdfd63081a023a57f5f19c6..bbf2543d429e11bdf029bddeff490252257d50e3 100644 GIT binary patch delta 528 zcmeCu>D1u~@MdNaVPIh3U^w3~k>?=i`3}w4z2&v*-%Y$GSMQs3*g(K-ebAQe?%NIq zJgm5UDU_*|EoztWB^AM~brY7|*jbxuUa0Ywk?U5*v&*y17x=L*tU2=h1+$ycjCX3* zJ5)k$Y!D6e>#uh4&o7Kfh+^cc&$t-av}#Sm*Uv`^=C$$VHAuQiU#xhU8 zlWSHM%ADR9Syb81b+7F9^whhDcDP*9JhOh1UtOW758rQoZNKk(qbis0nY?s7>u!<$B8J(gF=|I z+3{O4GXuk3UIqpUVCciZwnoLt^F`D_8cvAF*zDqFV5rE^FD|LfNiEi^$ju4xW@Hj! zfW?<)?DVePG6#T~g_#%_fNJ5OfzfcXf~XY892-#?Mybh>qH-WkC6LoLd77vuh;tCg P$)0>qRE=$`Fi0l=D)i8? delta 528 zcmeCw>C)i|@MdNaVPIh3U?^;#$a9dhuw66u`hDT8?+8N-d#v6Qp!dMLK#p0m$9(eJ zc8w|bH!x2WX9$$Na4KTikqNV`#n&t;;jR7Plu;ks3#5h^QHJ!dqw#&@jA-YTTE zKt=pq#agjF|9NWLGFflbFFx9+^kEY7>t~(+Oup*IFdFw5-1rgeuveh?tAEZr25a@@ z8Pl#<^gX@tB<5D*;oqMxXUAkOW_RYE+)0si^ zG44_jJ=vE3If$z!ki`h%P7-_!;+6|}fw_l;Z4kjYnM1@3q{cx+hVkL#SP>-V(7?Exn}MMsN58nFGAFfIuOc@mz?+dtgaH;` znz7TncFP<9suyNrU;wIxg9b*U$?~F7AiJzZWf-L=M~KRSI2Axn`{b#jnjp>rASY+? MT~Rf*ZNea(02qSFvH$=8 diff --git a/result/templates/student-wise/26021519-001.xlsx b/result/templates/student-wise/26021519-001.xlsx index 262317697b17e76581ab48ee8741ced765f33e5f..657c1c5f17dd0e20a60545f3a538d6d730f5312c 100644 GIT binary patch delta 521 zcmdm}vq6U^z?+#xgn@y9gW-I~M4p43=Q}iG_md@(T)l7BVFLlT^+8*{A&QZ&KI39w)2cNMUq2rynAgUa*C6R8k^4(;L0qTzSN}Jc7|T5U zPOe#5D06yaWKm^1*S)ga(^Kyr+Tn6Z^UV55f+c)A60e_JfA;X>f1O`V*WYfs|9tcM ztb@@PKYYLWwf(;DjjCL}XY$hVtiSo{{&xT4Mh*$h*qJeNlsA87v}9vC-?3Sb;~+DL z{>WVnq9>>EKL>IB1u_{y++Bi?LEQO5USRHPVH-p+PBsuR1F6Xnkzsr=xm837#91jK z!=%VD*^WbsFTk6TNrV9w1C!qal|7lvBPs(@rX?z470J)Q5MPv?ECB2krV#`3xJ zl-MycFc>m1FaTA;K?9@Hvr&g9z?+#xgn@y9gQ2i}BF{n2!gkHr>-UAXzMptau0GKFuz|qw{asJ??p=2E zpwo5nqw1^&8y`h`M9`ng> z+cl=#-@rUkoFP#5!l{U5M<&d&7GJZZgtz)bknB^rh3i&{MyRY*^_G)z{O74{%VfP#zxZgQ(uYaRub*}PGx@3;!)V-NaN|d;!(M^nul_mj7_8No zXH2_d(f9PmlbBnLhkt**oE^8_z*)so!)N^>!IDoq5~rWcKl}Iaw~3{tq3gS{=AN5Y zT)18A?AzmSejR?Vl{44O`g4D;ep4*>{(r9DS&@T6Gj?XooXsB@t=O0f+c)cS9ApO3 zAGnJ_^yF0j=OC`1Kqe!IyHoHnh&xZn3(S2bY=a2K$@(H@@}NKknx`zl#=tN~oq<6Z z7~n9_!1!=-i-;1)oE0K6OiCP+Z8@YSKM>&oiM$h$VSGB7TT}+b(G-=jisENrh%ZXb zDc08mkpbR}Od<@h_|uH#bLlCuV`N}3WMW_ds)U0EM(4@(qH-Wp=8MWOuA96^R1@r~ a)CrZ7B!L>vGo!m|@?;hd@(T)l7BVFLlT^+8*{A&QZ&KI39w)2cNMUq2rynAgUa*C6R8k^4(;L0qTzSN}Jc7|T5U zPOe#5D06yaWKm^1*S)ga(^Kyr+Tn6Z^UV55f+c)A60e_JfA;X>f1O`V*WYfs|9tcM ztb@@PKYYLWwf(;DjjCL}XY$hVtiSo{{&xT4Mh*$h*qJeNlsA87v}9vC-?3Sb;{Y>= z{=i)fq9>>FKL>IB1hN=G++Bi?LEQO5USRHPVH-p+PBsuR1F6Xnkzsr=xm837#91jK z!=%VD*^WbsFTk6TNrV9w1C!qal|7!!BPs(@rX?z46~WKI5MPv?ECB2krV#-0jl zEwg82U@&B2U;wIwg9b*&$qk}%AX65I$}p~-yjN5c#CZWUd6LlN^+KYPrNso;?g)c) F001Mu&|Clj delta 554 zcmdm>vr&g9z?+#xgn@y9gQ2i}BF{n2!gkHr>-UAXzMptau0GKFuz|qw{asJ??p=2E zpwo5nqw1^&8y`h`M9`ng> z+cl=#-@rUkoFP#5!l{U5M<&d&7GJZZgtz)bknB^rh3i&{MyRY*^_G)z{O74{%VfP#zxZgQ(uYaRub*}PGx@3;!)V-NaN|d;!(M^nul_mj7_8No zXH2_d(f9PmlbBnLhkt**oE^8_z*)so!)N^>!IDoq5~rWcKl}Iaw~3{tq3gS{=AN5Y zT)18A?AzmSejR?Vl{44O`g4D;ep4*>{(r9DS&@T6Gj?XooXsB@t=O0f+c)cS9AE~~ z@41UX^yC!&=OC`HKo%p2yHoHnh&xZn3(S2bY=a2K$@(H@@}NKknx`zl#=tN~oq<6Z z7~n9_!1!=-i-;1)oE0K6OiCP+Z8@YSKM>&oiM$h$VSF-~TT}+b(G-=jisWZth%ZXb zDc08mkpbR}Od<@h_|uF%71Ua0&&a@F$i%<^R0#(Sj82p5Mdd)I%omkmTsL`-s3zD| asS_$ENdh&TXGV9`d@(T)l7BVFLlT^+8*{A&QZ&KI39w)2cNMUq2rynAgUa*C6R8k^4(;L0qTzSN}Jc7|T5U zPOe#5D06yaWKm^1*S)ga(^Kyr+Tn6Z^UV55f+c)A60e_JfA;X>f1O`V*WYfs|9tcM ztb@@PKYYLWwf(;DjjCL}XY$hVtiSo{{&xT4Mh*$h*qJeNlsA87v}9vC-?3SbV;?h! ze#c!5q9-TwKL>Gr1hN=G+#Q0CLEO1QUSRG^VH-p+PSz7KlLrMV$Up%$28KE63=G1+ z0EdAF#s`y|MU)gkY9x9NuyrvrFf{QoFi5}@0O@UwiX4;eIHV@u7vTX}_*O)Q@!@1H zQ5g_NLsUjKjGuuaz9==PSYHoB26!_vi7>#Tb#kJp45R(zI#D^0@_9hc>dCuBHNmb* bolrSRl97SoJkVBDS527AET+bG3oHl#)4|m1 delta 577 zcmZ3dvtEZMz?+#xgn@y9gQ2i}BF{n2!gkHr>-UAXzMptau0GKFuz|qw{asJ??p=2E zpwo5nqw1^&8y`h`M9`ng> z+cl=#-@rUkoFP#5!l{U5M<&d&7GJZZgtz)bknB^rh3i&{MyRY*^_G)z{O74{%VfP#zxZgQ(uYaRub*}PGx@3;!)V-NaN|d;!(M^nul_mj7_8No zXH2_d(f9PmlbBnLhkt**oE^8_z*)so!)N^>!IDoq5~rWcKl}Iaw~3{tq3gS{=AN5Y zT)18A?AzmSejR?Vl{44O`g4D;ep4*>{(r9DS&@T6Gj?XooXsB@t=O0f+c)cS>|+Me zZ@G&>^yDP|=OC`PKo%p2yIt@xh&xBf3(S2XY=a2K$+{wD@}NKknx`zl#=tN~oq<6Z z7~n9_!1!=-lZcW6NR33#0k$q?28Jd+1_lY30wBGuQHf)+Er-cDq$uD25ux>4UFOZ3=Hu_sX4{^dLS~un~_O`0T$bn6GUYg9VXX` p%7KiW3*@Ysyh~IQ?AX)^m6IeH85qt39fRuFiIbVc)Yxu=1p%{`(k=i1 diff --git a/result/templates/student-wise/26021519-004.xlsx b/result/templates/student-wise/26021519-004.xlsx index 1369ccfa10aaf2d490221af0613a3e54e17a4b9a..921c1f97f30e4b0415cf31b14d23213f679a8bf2 100644 GIT binary patch delta 521 zcmdm}vq6U^z?+#xgn@y9gW-I~M4p43=Q}iG_md@(T)l7BVFLlT^+8*{A&QZ&KI39w)2cNMUq2rynAgUa*C6R8k^4(;L0qTzSN}Jc7|T5U zPOe#5D06yaWKm^1*S)ga(^Kyr+Tn6Z^UV55f+c)A60e_JfA;X>f1O`V*WYfs|9tcM ztb@@PKYYLWwf(;DjjCL}XY$hVtiSo{{&xT4Mh*$h*qJeNlsA87v}9vC-?3Sb;{Y>= z{=i)fq9>>FKL>IB1hN=G++Bi?LEQO5USRHPVH-p+PBsuR1F6Xnkzsr=xm837#91jK z!=%VD*^WbsFTk6TNrV9w1C!qal|7!!BPs(@rX?z46~WKI5MPv?ECB2krV#yZtc zFS2K3U@&B2U;wIwg9b*&$qk}%AX65I$}p~-yjN5c#CZWUd6LlN^+KYPrNso;?g)c) F000iT&<_9r delta 554 zcmdm>vr&g9z?+#xgn@y9gQ2i}BF{n2!gkHr>-UAXzMptau0GKFuz|qw{asJ??p=2E zpwo5nqw1^&8y`h`M9`ng> z+cl=#-@rUkoFP#5!l{U5M<&d&7GJZZgtz)bknB^rh3i&{MyRY*^_G)z{O74{%VfP#zxZgQ(uYaRub*}PGx@3;!)V-NaN|d;!(M^nul_mj7_8No zXH2_d(f9PmlbBnLhkt**oE^8_z*)so!)N^>!IDoq5~rWcKl}Iaw~3{tq3gS{=AN5Y zT)18A?AzmSejR?Vl{44O`g4D;ep4*>{(r9DS&@T6Gj?XooXsB@t=O0f+c)cS9AE~~ z@41UX^yC!&=OC`HKo%p2yHoHnh&xZn3(S2bY=a2K$@(H@@}NKknx`zl#=tN~oq<6Z z7~n9_!1!=-i-;1)oE0K6OiCP+Z8@YSKM>&oiM$h$VSF-~TT}+b(G-=jisWZth%ZXb zDc08mkpbR}Od<@h_|uGas-IqD&&a@F$i%<^R0#(Sj82p5Mdd)I%omkmTsL`-s3zD| asS_$ENdh&TXGV9`d@(T)l7BVFLlT^+8*{A&QZ&KI39w)2cNMUq2rynAgUa*C6R8k^4(;L0qTzSN}Jc7|T5U zPOe#5D06yaWKm^1*S)ga(^Kyr+Tn6Z^UV55f+c)A60e_JfA;X>f1O`V*WYfs|9tcM ztb@@PKYYLWwf(;DjjCL}XY$hVtiSo{{&xT4Mh*$h*qJeNlsA87v}9vC-?3SbV;?h! ze#c!5q9-TwKL>Gr1hN=G+#Q0CLEO1QUSRG^VH-p+PSz7KlLrMV$Up%$28KE63=G1+ z0EdAF#s`y|MU)gkYHl=q6X{}RU})lFV32?*0MgqU6*(r`aY#+RFTw+|@U4gp*PdH8Akibb)s@0<@11?)suINYJy#r bI-zosBqIaEd7!PRu9`5JSxk-X7FZAfW`@<{ delta 577 zcmZ3dvtEZMz?+#xgn@y9gQ2i}BF{n2!gkHr>-UAXzMptau0GKFuz|qw{asJ??p=2E zpwo5nqw1^&8y`h`M9`ng> z+cl=#-@rUkoFP#5!l{U5M<&d&7GJZZgtz)bknB^rh3i&{MyRY*^_G)z{O74{%VfP#zxZgQ(uYaRub*}PGx@3;!)V-NaN|d;!(M^nul_mj7_8No zXH2_d(f9PmlbBnLhkt**oE^8_z*)so!)N^>!IDoq5~rWcKl}Iaw~3{tq3gS{=AN5Y zT)18A?AzmSejR?Vl{44O`g4D;ep4*>{(r9DS&@T6Gj?XooXsB@t=O0f+c)cS>|+Me zZ@G&>^yDP|=OC`PKo%p2yIt@xh&xBf3(S2XY=a2K$+{wD@}NKknx`zl#=tN~oq<6Z z7~n9_!1!=-lZcW6NX?CgZz5gH3=BRl-aR4BSY%8W_X*85rV=Qge#+^+05RHzSh>11z>DCy2^0I!vw= ql>-?$7sy#Nd6%dr*s-Y-Dkn)YGBBJ6ItJCT6DKo?sj=M#3jzRKqthk; diff --git a/result/templates/student-wise/26021520-001.xlsx b/result/templates/student-wise/26021520-001.xlsx index 605adcfb035ba626c2b23de4ab3a035a635b8418..3a2cc2156333ffb7cb4026cb43176574203353d5 100644 GIT binary patch delta 577 zcmZ3dvsQ;Ez?+#xgn@y9gW-I~M4p43=Q}iG_md@(T)l7BVFLlT^+8*{A&QZ&KI39w)2cNMUq2rynAgUa*C6R8k^4(;L0qTzSN}Jc7|T5U zPOe#5D06yaWKm^1*S)ga(^Kyr+Tn6Z^UV55f+c)A60e_JfA;X>f1O`V*WYfs|9tcM ztb@@PKYYLWwf(;DjjCL}XY$hVtiSo{{&xT4Mh*$h*qJeNlsA87v}9vC-?3SbV=ps^ ze#>19q9-TuKL>HW1+o}H-0gyoLEJe)USRGEVH-p+PSzDMlLrMV$Up%$28KE63=G1+ z0EdAF#s`y|M3fXjYVz{WYIia-Ff{QoFi5}@0O@UwiX4;eIHV@u6X5|__(ntqsEbon z#u}t+de?5513*>6ObiU%NV*yrL-`pP;)_yqiuLtCWPmp#lL!MWwkIcu$}rkZt`(I7 n895ioSv7f=s3zF4sS_$ENis4poCi7v)v^7PnZ(rCZh{2?kfPX2 delta 577 zcmZ3hvrdO6z?+#xgn@y9gQ2i}BF{n2!gkHr>-UAXzMptau0GKFuz|qw{asJ??p=2E zpwo5nqw1^&8y`h`M9`ng> z+cl=#-@rUkoFP#5!l{U5M<&d&7GJZZgtz)bknB^rh3i&{MyRY*^_G)z{O74{%VfP#zxZgQ(uYaRub*}PGx@3;!)V-NaN|d;!(M^nul_mj7_8No zXH2_d(f9PmlbBnLhkt**oE^8_z*)so!)N^>!IDoq5~rWcKl}Iaw~3{tq3gS{=AN5Y zT)18A?AzmSejR?Vl{44O`g4D;ep4*>{(r9DS&@T6Gj?XooXsB@t=O0f+c)cS>}3Yg zZ@7y=^yEbT=OC_^Ko%p2yG`&hh&x-z3(S2kY=a2K$vPrt@}NKknx`zl#=tN~oq<6Z z7~n9_!1!=-qll6MNKIb;S?x|{28Jd+1_lY30wBGuQHf)+Er-vtEZMz?+#xgn@y9gW-I~M4p43=Q}iG_md@(T)l7BVFLlT^+8*{A&QZ&KI39w)2cNMUq2rynAgUa*C6R8k^4(;L0qTzSN}Jc7|T5U zPOe#5D06yaWKm^1*S)ga(^Kyr+Tn6Z^UV55f+c)A60e_JfA;X>f1O`V*WYfs|9tcM ztb@@PKYYLWwf(;DjjCL}XY$hVtiSo{{&xT4Mh*$h*qJeNlsA87v}9vC-?3SbV;?h! ze#c!5q9-TwKL>Gr1hN@H+?|4tLEL#lUSRGkVH-p+PSzJOlLrMV$Up%$28KE63=G1+ z0EdAF#s`yIM3g}0tPqi5QskIy$00TOfd~&s-UAXzMptau0GKFuz|qw{asJ??p=2E zpwo5nqw1^&8y`h`M9`ng> z+cl=#-@rUkoFP#5!l{U5M<&d&7GJZZgtz)bknB^rh3i&{MyRY*^_G)z{O74{%VfP#zxZgQ(uYaRub*}PGx@3;!)V-NaN|d;!(M^nul_mj7_8No zXH2_d(f9PmlbBnLhkt**oE^8_z*)so!)N^>!IDoq5~rWcKl}Iaw~3{tq3gS{=AN5Y zT)18A?AzmSejR?Vl{44O`g4D;ep4*>{(r9DS&@T6Gj?XooXsB@t=O0f+c)cS>|+Me zZ@G&>^yDP|=OC`PKsF6Xh&xxv3(S2fY=a2K$$BDY@}NKknx`zl#=tN~oq<6Z z7~n9_!1!=-vxt%cNDW`+HKi_Q28Jd+1_lY30wBGuQHf)+Er-Z(bTnZ?xD?tldWr`^vt diff --git a/result/templates/student-wise/26021520-003.xlsx b/result/templates/student-wise/26021520-003.xlsx index 17a7bb825386b2c4f2dcb872a5483e55482303f8..07cbc974d591248684fb8aa9adac1f59574b3948 100644 GIT binary patch delta 521 zcmdm}vq6U^z?+#xgn@y9gW-I~M4p43=Q}iG_md@(T)l7BVFLlT^+8*{A&QZ&KI39w)2cNMUq2rynAgUa*C6R8k^4(;L0qTzSN}Jc7|T5U zPOe#5D06yaWKm^1*S)ga(^Kyr+Tn6Z^UV55f+c)A60e_JfA;X>f1O`V*WYfs|9tcM ztb@@PKYYLWwf(;DjjCL}XY$hVtiSo{{&xT4Mh*$h*qJeNlsA87v}9vC-?3SbV?Q&9 ze$QPDq9>>DKL>Gr1+p1I++Bi?LEQO5USRHPVH-p+PBsuR1F6Xnkzsr=xm837#91jK z!=%VD*^WbsFTk6TNrV9w1C!qal|7owBPs(@rX?z470%DV5MPv?ECB2krV#>(0q zf9$}>z+lM4zyMSU2Mvr4lN&_kK&C7Zm0?^vd9SD@i1Pwy@+6_j>xD!oON$Ax-4O=q F000^4&_w_M delta 554 zcmdm>vr&g9z?+#xgn@y9gQ2i}BF{n2!gkHr>-UAXzMptau0GKFuz|qw{asJ??p=2E zpwo5nqw1^&8y`h`M9`ng> z+cl=#-@rUkoFP#5!l{U5M<&d&7GJZZgtz)bknB^rh3i&{MyRY*^_G)z{O74{%VfP#zxZgQ(uYaRub*}PGx@3;!)V-NaN|d;!(M^nul_mj7_8No zXH2_d(f9PmlbBnLhkt**oE^8_z*)so!)N^>!IDoq5~rWcKl}Iaw~3{tq3gS{=AN5Y zT)18A?AzmSejR?Vl{44O`g4D;ep4*>{(r9DS&@T6Gj?XooXsB@t=O0f+c)cS>}Lki z@3@OW^yFmz=OC_+KsF&oiM$h$VSGH9TT}+b(G-=jir{Bph%ZXb zDc08mkpbR}Od<@h_|uG)wLAXUfsuj1kcoi-s1gnu7#%0qi^_panJ+5CxNh$&*>c)Y$HVoeBU{h|a_S diff --git a/result/templates/student-wise/26021520-004.xlsx b/result/templates/student-wise/26021520-004.xlsx index 1e6fb5630f2b501b17388c7960e51d35ada2bc54..db84814390efa88e533695debd0e400fe5d4c6f0 100644 GIT binary patch delta 554 zcmZ3lvrdO6z?+#xgn@y9gW-I~M4p43=Q}iG_md@(T)l7BVFLlT^+8*{A&QZ&KI39w)2cNMUq2rynAgUa*C6R8k^4(;L0qTzSN}Jc7|T5U zPOe#5D06yaWKm^1*S)ga(^Kyr+Tn6Z^UV55f+c)A60e_JfA;X>f1O`V*WYfs|9tcM ztb@@PKYYLWwf(;DjjCL}XY$hVtiSo{{&xT4Mh*$h*qJeNlsA87v}9vC-?3SbV=ps^ ze#>19q9-TuKL>HW1+p1I+#Q0CLEO1QUSRG^VH-p+PSz7KlLrMV$Up%$28KE63=G1+ z0EdAF#s`y|MU)gkYR;uTFz94vU})lFV32?*0MgqU6*(r`aY#+RFTw+|@U4gpP#2e| z42Yv4DkB@p&%h90l$ukluLmLnycwB97+}#lIZ;%G(Qa~`s2oW7JRoQF-UAXzMptau0GKFuz|qw{asJ??p=2E zpwo5nqw1^&8y`h`M9`ng> z+cl=#-@rUkoFP#5!l{U5M<&d&7GJZZgtz)bknB^rh3i&{MyRY*^_G)z{O74{%VfP#zxZgQ(uYaRub*}PGx@3;!)V-NaN|d;!(M^nul_mj7_8No zXH2_d(f9PmlbBnLhkt**oE^8_z*)so!)N^>!IDoq5~rWcKl}Iaw~3{tq3gS{=AN5Y zT)18A?AzmSejR?Vl{44O`g4D;ep4*>{(r9DS&@T6Gj?XooXsB@t=O0f+c)cS>}3Yg zZ@7y=^yEbT=OC_^KsFd@(T)l7BVFLlT^+8*{A&QZ&KI39w)2cNMUq2rynAgUa*C6R8k^4(;L0qTzSN}Jc7|T5U zPOe#5D06yaWKm^1*S)ga(^Kyr+Tn6Z^UV55f+c)A60e_JfA;X>f1O`V*WYfs|9tcM ztb@@PKYYLWwf(;DjjCL}XY$hVtiSo{{&xT4Mh*$h*qJeNlsA87v}9vC-?3SbV?Q&9 ze$QPDq9>>DKL>Gr1+p1I++Bi?LEQO5USRHPVH-p+PBsuR1F6Xnkzsr=xm837#91jK z!=%VD*^WbsFTk6TNrV9w1C!qal|7owBPs(@rX?z470%DV5MPv?ECB2krV#!eN! z`rLt$fx(c8fdQxz4jLF8CO3%6flOH-D#N&T@?KF*5a$KZvr&g9z?+#xgn@y9gQ2i}BF{n2!gkHr>-UAXzMptau0GKFuz|qw{asJ??p=2E zpwo5nqw1^&8y`h`M9`ng> z+cl=#-@rUkoFP#5!l{U5M<&d&7GJZZgtz)bknB^rh3i&{MyRY*^_G)z{O74{%VfP#zxZgQ(uYaRub*}PGx@3;!)V-NaN|d;!(M^nul_mj7_8No zXH2_d(f9PmlbBnLhkt**oE^8_z*)so!)N^>!IDoq5~rWcKl}Iaw~3{tq3gS{=AN5Y zT)18A?AzmSejR?Vl{44O`g4D;ep4*>{(r9DS&@T6Gj?XooXsB@t=O0f+c)cS>}Lki z@3@OW^yFmz=OC_+KsF&oiM$h$VSGH9TT}+b(G-=jir{Bph%ZXb zDc08mkpbR}Od<@h_|uG?Dtz_110w^2Ark`wP$e8RFgi}I7nK8?=i`3}w4z2&v*-%Y$GSMQs3*g(K-ebAQe?%NIq zJgm5UDU_*|EoztWB^AM~brY7|*jbxuUa0Ywk?U5*v&*y17x=L*tU2=h1+$ycjCX3* zJ5)k$Y!D6e>#uh4&o7Kfh+^cc&$t-av}#Sm*Uv`^=C$$VHAuQiU#xhU8 zlWSHM%ADR9Syb81b+7F9^whhDcDP*9JhOh1UtOW758rQoZNKk(qbis0nY?s7>u!OQ(pc#9s%IJzGGXp~`P>2^8FEG%+xSN}Sp(01WxTG>CwOFqr zHwRVgBvBbg{mHVTQXmT~fgFj+VWM&hp!iggo4sf)(4ZfT3=C2*1A%k{W3%Ao1%fh@ XH;D3pbnOG`%9wmxRE=$uFi05yml@Gl delta 548 zcmZqEY1iQi@MdNaVPIh3U?^;#$a9dhuw66u`hDT8?+8N-d#v6Qp!dMLK#p0m$9(eJ zc8w|bH!x2WX9$$Na4KTikqNV`#n&t;;jR7Plu;ks3#5h^QHJ!dqw#&@jA-YTTE zKt=pq#agjF|9NWLGFflbFFx9+^kEY7>t~(+Oup*IFdFw5-1rgeuveh?tAEZr25a@@ z8Pl#<^gX@tB<5D*;oqMxXUAkOW_RYE+Gnhg2 zaqc1zJ=vQ7If$zwkjV(*_6t4+aZ7}}z}y4EHi%%H%qn6AQe!J3!}xG=l!y|DQzs(B zq{K1VmP1NAz?+dtgaH-ZbPvW%z{ zh+`otV=pPdz)+E+U!Gr-os^%StyhtogKn&f-0VebfoA<+WMGhjnF*vD7+VA<&li-L Zyk3+CWZYg+8OF@Xw?x(0HVcE40RWU(&Eo(7 diff --git a/result/templates/student-wise/26031519-002.xlsx b/result/templates/student-wise/26031519-002.xlsx index d72aab36794bf1ed124a02b542c149a40159a328..9b0f9e27f5291e168e1cd212e2d9683f70fb88db 100644 GIT binary patch delta 545 zcmZqIY182e@MdNaVPIh3U^w3~k>?=i`3}w4z2&v*-%Y$GSMQs3*g(K-ebAQe?%NIq zJgm5UDU_*|EoztWB^AM~brY7|*jbxuUa0Ywk?U5*v&*y17x=L*tU2=h1+$ycjCX3* zJ5)k$Y!D6e>#uh4&o7Kfh+^cc&$t-av}#Sm*Uv`^=C$$VHAuQiU#xhU8 zlWSHM%ADR9Syb81b+7F9^whhDcDP*9JhOh1UtOW758rQoZNKk(qbis0nY?s7>uA+=*ian&p})jfh!OQ(pc#9s%IJzGGXp~`P>2^8FEG%+xQm;Cp(01WxTG>CwOFqr zHwRVgBvBbgy~(noQXmT~fgJJ4VWM&hp!iggo4sf)(4ZfT3=C2*1A%k{W3%Ao1%fh@ XH;D3pbnOG`%9wmxRE=$uFi05ylS$E0 delta 548 zcmZqEY1iQi@MdNaVPIh3U?^;#$a9dhuw66u`hDT8?+8N-d#v6Qp!dMLK#p0m$9(eJ zc8w|bH!x2WX9$$Na4KTikqNV`#n&t;;jR7Plu;ks3#5h^QHJ!dqw#&@jA-YTTE zKt=pq#agjF|9NWLGFflbFFx9+^kEY7>t~(+Oup*IFdFw5-1rgeuveh?tAEZr25a@@ z8Pl#<^gX@tB<5D*;oqMxXUAkOW_RYE+)0si^ zG43J|J=u!?If$z)ki`h%_6t4+aZ7}}z}y4EHi%%H%qn6AQe!J3!}xG=l!y|DQzs(B zq{K1VmP1NAz?+dtgaH-U@DvW%z{ zh+`otV=p1Vz)+E+U!Gr-os^%StyhtogKn&f-0VebfoA<+WMGhjnF*vD7+VA<&li-L Zyk3+CWZYg+8OF@Xw?x(0HVcE40RWIn&D{V1 diff --git a/result/templates/student-wise/26031519-003.xlsx b/result/templates/student-wise/26031519-003.xlsx index 3f20c01450328729c13f5fff7f0c97534be9cb6a..3c8b97ad6f1bb7cf37852c9baa7ff3b11baae74b 100644 GIT binary patch delta 541 zcmeCsY1iQi@MdNaVPIh3U^w3~k>?=i`3}w4z2&v*-%Y$GSMQs3*g(K-ebAQe?%NIq zJgm5UDU_*|EoztWB^AM~brY7|*jbxuUa0Ywk?U5*v&*y17x=L*tU2=h1+$ycjCX3* zJ5)k$Y!D6e>#uh4&o7Kfh+^cc&$t-av}#Sm*Uv`^=C$$VHAuQiU#xhU8 zlWSHM%ADR9Syb81b+7F9^whhDcDP*9JhOh1UtOW758rQoZNKk(qbis0nY?s7>u!<$A~C_I1NCK z;^es^>b9WZzEx#(#gmzVAr=@9yuhe{fdB)5PE-nHs1=YSF*#gRP61@7irnl)Yk?;HU}RvBf|&@U8yH&zCodF~;X^ZO RKTvn(CoW`@MdNaVPIh3U?^;#$a9dhuw66u`hDT8?+8N-d#v6Qp!dMLK#p0m$9(eJ zc8w|bH!x2WX9$$Na4KTikqNV`#n&t;;jR7Plu;ks3#5h^QHJ!dqw#&@jA-YTTE zKt=pq#agjF|9NWLGFflbFFx9+^kEY7>t~(+Oup*IFdFw5-1rgeuveh?tAEZr25a@@ z8Pl#<^gX@tB<5D*;oqMxXUAkOW_RYE+Gnhg2 zaqc1zJ=vQ7If$zwki`h%P7r(y;+6_|fw>2TZ4kjYnN7qDq{dD}hVkL#Xb~k4ryj^r znmk8D-4+zwx2lY;crr6E!~)}i7Z?>V(7?Edn}MMsN58nFGAFfIuOc@mz?+dtgaH;` zlSE}04JONqN`cI@1ac%Nhl$E5fXq~po4sf)(4ZfT3=C2*1A%k{W2@lg1%fh@H;D3p TbnOG`%9?yzRE=$mFi05ylyb{6 diff --git a/result/templates/student-wise/26031519-004.xlsx b/result/templates/student-wise/26031519-004.xlsx index ccd07b6a8eb78f11bcc84bc3cc4244b5b5d9183c..68a798492d52fe415178615176fd03e1a1d841ff 100644 GIT binary patch delta 541 zcmeCsY1iQi@MdNaVPIh3U^w3~k>?=i`3}w4z2&v*-%Y$GSMQs3*g(K-ebAQe?%NIq zJgm5UDU_*|EoztWB^AM~brY7|*jbxuUa0Ywk?U5*v&*y17x=L*tU2=h1+$ycjCX3* zJ5)k$Y!D6e>#uh4&o7Kfh+^cc&$t-av}#Sm*Uv`^=C$$VHAuQiU#xhU8 zlWSHM%ADR9Syb81b+7F9^whhDcDP*9JhOh1UtOW758rQoZNKk(qbis0nY?s7>u!<$A~C_I1NCK z;^es^>b9WZzEx#(#gmzVAr=@9yuhe{fdB)5PE-nHs1=YSF*#gRP61@7irnl)Yk?;HU}RvBf|&@U8yH&zCodF~;X^ZO RKTvn(CoW`@MdNaVPIh3U?^;#$a9dhuw66u`hDT8?+8N-d#v6Qp!dMLK#p0m$9(eJ zc8w|bH!x2WX9$$Na4KTikqNV`#n&t;;jR7Plu;ks3#5h^QHJ!dqw#&@jA-YTTE zKt=pq#agjF|9NWLGFflbFFx9+^kEY7>t~(+Oup*IFdFw5-1rgeuveh?tAEZr25a@@ z8Pl#<^gX@tB<5D*;oqMxXUAkOW_RYE+Gnhg2 zaqc1zJ=vQ7If$zwki`h%P7r(y;+6_|fw>2TZ4kjYnN7qDq{dD}hVkL#Xb~k4ryj^r znmk8D-4+zwx2lY;crr6E!~)}i7Z?>V(7?Edn}MMsN58nFGAFfIuOc@mz?+dtgaH;` zlSE}04JONqN`cI@1ac%Nhl$E5fXq~po4sf)(4ZfT3=C2*1A%k{W2@lg1%fh@H;D3p TbnOG`%9?yzRE=$mFi05ylyb{6 diff --git a/result/templates/student-wise/26031519-005.xlsx b/result/templates/student-wise/26031519-005.xlsx index e64dc113cf4bf4cb0ecfe17d79778622549ca278..e467421183d4708a34cfe822fb51fe9933245493 100644 GIT binary patch delta 528 zcmeCw>CoW`@MdNaVPIh3U^w3~k>?=i`3}w4z2&v*-%Y$GSMQs3*g(K-ebAQe?%NIq zJgm5UDU_*|EoztWB^AM~brY7|*jbxuUa0Ywk?U5*v&*y17x=L*tU2=h1+$ycjCX3* zJ5)k$Y!D6e>#uh4&o7Kfh+^cc&$t-av}#Sm*Uv`^=C$$VHAuQiU#xhU8 zlWSHM%ADR9Syb81b+7F9^whhDcDP*9JhOh1UtOW758rQoZNKk(qbis0nY?s7>u^5Vu^&3(P$%Y=a2K$s8hPAT!<$BHO{IE_G# z;^cWE>QSKJzEx#(#gmzVAr=@9yuhe{fdD1u~@MdNaVPIh3U?^;#$a9dhuw66u`hDT8?+8N-d#v6Qp!dMLK#p0m$9(eJ zc8w|bH!x2WX9$$Na4KTikqNV`#n&t;;jR7Plu;ks3#5h^QHJ!dqw#&@jA-YTTE zKt=pq#agjF|9NWLGFflbFFx9+^kEY7>t~(+Oup*IFdFw5-1rgeuveh?tAEZr25a@@ z8Pl#<^gX@tB<5D*;oqMxXUAkOW_RYE+Gnqm3 z3GN~gJ=uo;If$z&ki`h%P856$;+6?{fw_l-Z4kjYnO(#Tq{d!EhVkL#7!f59rvb=O znmkuT-4+zwx2lY;crr6E!~)}i7Z?>V(7?Etn}MMsN58nFGAFfIuOc@mz?+dtgaH;` zlNm*27!4=OiAsSCwE}XaCWnj4DS!-Bk(<3}EzqPNj0_A?FcX1v17n-ud@(T)l7BVFLlT^+8*{A&QZ&KI39w)2cNMUq2rynAgUa*C6R8k^4(;L0qTzSN}Jc7|T5U zPOe#5D06yaWKm^1*S)ga(^Kyr+Tn6Z^UV55f+c)A60e_JfA;X>f1O`V*WYfs|9tcM ztb@@PKYYLWwf(;DjjCL}XY$hVtiSo{{&xT4Mh*$h*qJeNlsA87v}9vC-?3Sbqlg(q zFXB!G(UUp(pM$uc_;VRS+(g00Ag-H`7nnOq*ai`dldlV#fzF8}}l delta 533 zcmcbveM6fkz?+#xgn@y9gQ2i}BF{n2!gkHr>-UAXzMptau0GKFuz|qw{asJ??p=2E zpwo5nqw1^&8y`h`M9`ng> z+cl=#-@rUkoFP#5!l{U5M<&d&7GJZZgtz)bknB^rh3i&{MyRY*^_G)z{O74{%VfP#zxZgQ(uYaRub*}PGx@3;!)V-NaN|d;!(M^nul_mj7_8No zXH2_d(f9PmlbBnLhkt**oE^8_z*)so!)N^>!IDoq5~rWcKl}Iaw~3{tq3gS{=AN5Y zT)18A?AzmSejR?Vl{44O`g4D;ep4*>{(r9DS&@T6Gj?XooXsB@t=O0f+c)cS6fuM7 zh1{tidNK$9a}f6yK;x-BTUzeK%~uwiCkuoh-u-~~nn3^XuK<7Qx}$k8t@smw_&)~m?P3GilQ5@CSF z*W?R8bN)_#Dd@(T)l7BVFLlT^+8*{A&QZ&KI39w)2cNMUq2rynAgUa*C6R8k^4(;L0qTzSN}Jc7|T5U zPOe#5D06yaWKm^1*S)ga(^Kyr+Tn6Z^UV55f+c)A60e_JfA;X>f1O`V*WYfs|9tcM ztb@@PKYYLWwf(;DjjCL}XY$hVtiSo{{&xT4Mh*$h*qJeNlsA87v}9vC-?3SbV*xXW zzQA1uq9=RsKL>FQ1#%fd+y#PWP`LXGXp~`P>2^8FEG%+c$k}kp(01WxTG>CwOFqr zHwRVgWC2kbM(fGCqEa9mJb@gQ$!Vf;3ZMv8k(<3}EzqPNj0_A?FcX1v1LI`D$r}V^ YCLa*x0qHsi)KxM0wWu1~Az_d*0FIK;rvLx| delta 548 zcmbQHGhK%#z?+#xgn@y9gQ2i}BF{n2!gkHr>-UAXzMptau0GKFuz|qw{asJ??p=2E zpwo5nqw1^&8y`h`M9`ng> z+cl=#-@rUkoFP#5!l{U5M<&d&7GJZZgtz)bknB^rh3i&{MyRY*^_G)z{O74{%VfP#zxZgQ(uYaRub*}PGx@3;!)V-NaN|d;!(M^nul_mj7_8No zXH2_d(f9PmlbBnLhkt**oE^8_z*)so!)N^>!IDoq5~rWcKl}Iaw~3{tq3gS{=AN5Y zT)18A?AzmSejR?Vl{44O`g4D;ep4*>{(r9DS&@T6Gj?XooXsB@t=O0f+c)cSEMNxF z=ef&3^kjGb=OC_uKrSPQJ74fIh}$CM1?FB5wm}5rWKj__kQ!eR8ODc`vqY3YoIVj5 zCMAx^wj5I00p5&EA`Gw?(2Px#Y>@V4W?+Z~3h@Ht1qK=zk4*ju)CSbeFDk=mGg(Je z3dHdcm9bY9U|^`o(J#+0%1+A9&(^ER%|SO-MQ-+@wLr6eFfuSm!OR5G4UAI+C$ATj ZnY>?=2V~q?pxKp^Ux})*9To;D0|0Aa%`*T1 diff --git a/result/templates/teacher-wise/1003.xlsx b/result/templates/teacher-wise/1003.xlsx index 37fca81f0f5004a7d1e9c02e4117d4b20463e62f..fa91413102bfbf9fb00d6e983f35b7cecc7fe837 100644 GIT binary patch delta 545 zcmcbvbxn&Wz?+#xgn@y9gW-I~M4p43=Q}iG_md@(T)l7BVFLlT^+8*{A&QZ&KI39w)2cNMUq2rynAgUa*C6R8k^4(;L0qTzSN}Jc7|T5U zPOe#5D06yaWKm^1*S)ga(^Kyr+Tn6Z^UV55f+c)A60e_JfA;X>f1O`V*WYfs|9tcM ztb@@PKYYLWwf(;DjjCL}XY$hVtiSo{{&xT4Mh*$h*qJeNlsA87v}9vC-?3SbLy#Fn zJ94{#=*jJT&q3S*{yaty_kqA;5cjB{7nmz3Y=a2K$zj4~AT@o$GK>!Aq#GD73rzkX ZATvpn2c(HlREBZKWNlG3HYQ<^DgaAA(h>jw delta 548 zcmcbnbzO@mz?+#xgn@y9gQ2i}BF{n2!gkHr>-UAXzMptau0GKFuz|qw{asJ??p=2E zpwo5nqw1^&8y`h`M9`ng> z+cl=#-@rUkoFP#5!l{U5M<&d&7GJZZgtz)bknB^rh3i&{MyRY*^_G)z{O74{%VfP#zxZgQ(uYaRub*}PGx@3;!)V-NaN|d;!(M^nul_mj7_8No zXH2_d(f9PmlbBnLhkt**oE^8_z*)so!)N^>!IDoq5~rWcKl}Iaw~3{tq3gS{=AN5Y zT)18A?AzmSejR?Vl{44O`g4D;ep4*>{(r9DS&@T6Gj?XooXsB@t=O0f+c)cS2r`3c z2W}S-J-LnVIf$FjpT`K|-WPZb;vNz70&@j~Z4kjYIaJsTq^4I`hVkL#Rl-Uj&N*Qj zCMAx^wj5I00p5&EA`Gw?(2OlT+UYON%)szXfPsM*7%wo;z-T(zP(%i#+h0V6v3hcj zh!lv^AtGa+!q31^k)vOpUzDAcpP#K)k(+~Vtcu+1MQed({a|EZkb;>Bq#GEo2uyx2 aAT#;D2oK0OUQrpwos+dh)!3MYLCOHf*v*~* diff --git a/result/templates/teacher-wise/1004.xlsx b/result/templates/teacher-wise/1004.xlsx index 53eb77856fb86edaed5122eec3535163ed8479c6..7222ab01a423376dc591fd8032dbb333dd7ccb55 100644 GIT binary patch delta 583 zcmdn3y-S-Xz?+#xgn@y9gW-I~M4p3!=Q}iG_mkz1 z0&eSrwrqFbb}-;!#pO$(Os#BDyM!;P2yU&Lu@X%-Hc|uQ?uTo5^`gMaG(H#=iCdYLY}ppKHJgwTpj#VMIbyJtJSn#lWUjYZ|_OK2k8RjW4f3(oG`wm)?T7 zPVcY&Z!R&GdHS7Pv$9a;^v1}d%66`MWw)oN-aWL#<&x%^^^*ik_;w^-Ke_(w;m7|v zznZSU-E{x?=JiP0RD4MY|V>W+ev}R*E z-?3SbBZL`5w{WL|=*h47o`bko`12S+To=K|Ag-p67noZrY{Ll;&&j)l&E!G6nK5&e z1=tuE=BP6;2m?bI1{xS2Oy(C+0;^G6AkL-0%)qdUmw`b7rT|E9YgC*ZAfgVkt5QV9 zrktCBp(01WxTG>CwOFqrHz&ZGkx7IB7N452)4O)d902MQ2F4^%EgUp3-kW?;L<(fi yTM-$?U{|D0sGKCp$iQ$O=n_-UAXzMptau0GKFuz|qw{asJ??p=2E zpwo5nqw1^&8y`h`M9`ng> z+cl=#-@rUkoFP#5!l{U5M<&d&7GJZZgtz)bknB^rh3i&{MyRY*^_G)z{O74{%VfP#zxZgQ(uYaRub*}PGx@3;!)V-NaN|d;!(M^nul_mj7_8No zXH2_d(f9PmlbBnLhkt**oE^8_z*)so!)N^>!IDoq5~rWcKl}Iaw~3{tq3gS{=AN5Y zT)18A?AzmSejR?Vl{44O`g4D;ep4*>{(r9DS&@T6Gj?XooXsB@t=O0f+c)cSgfN5X zX6{rFJ^2;ia}f73e;y-<>n!*f#MKb;0&`1*Z4kjYd8e=$NXd@(T)l7BVFLlT^+8*{A&QZ&KI39w)2cNMUq2rynAgUa*C6R8k^4(;L0qTzSN}Jc7|T5U zPOe#5D06yaWKm^1*S)ga(^Kyr+Tn6Z^UV55f+c)A60e_JfA;X>f1O`V*WYfs|9tcM ztb@@PKYYLWwf(;DjjCL}XY$hVtiSo{{&xT4Mh*$h*qJeNlsA87v}9vC-?3SbLx34X zJ8-*z=*ew-&q3UL{#-^7_nyFG5cja47nsX0Y=a2K$sxjKAT>S0GK>!(^b delta 566 zcmcbjbybTez?+#xgn@y9gQ2i}BF{n2!gkHr>-UAXzMptau0GKFuz|qw{asJ??p=2E zpwo5nqw1^&8y`h`M9`ng> z+cl=#-@rUkoFP#5!l{U5M<&d&7GJZZgtz)bknB^rh3i&{MyRY*^_G)z{O74{%VfP#zxZgQ(uYaRub*}PGx@3;!)V-NaN|d;!(M^nul_mj7_8No zXH2_d(f9PmlbBnLhkt**oE^8_z*)so!)N^>!IDoq5~rWcKl}Iaw~3{tq3gS{=AN5Y zT)18A?AzmSejR?Vl{44O`g4D;ep4*>{(r9DS&@T6Gj?XooXsB@t=O0f+c)cS2rz?a zdu|sHJ-Lnp?U@&B2VBm+T2GR|T$v|#Jj(&N5QFc;(ezsmkZVtL_Dsrd@(T)l7BVFLlT^+8*{A&QZ&KI39w)2cNMUq2rynAgUa*C6R8k^4(;L0qTzSN}Jc7|T5U zPOe#5D06yaWKm^1*S)ga(^Kyr+Tn6Z^UV55f+c)A60e_JfA;X>f1O`V*WYfs|9tcM ztb@@PKYYLWwf(;DjjCL}XY$hVtiSo{{&xT4Mh*$h*qJeNlsA87v}9vC-?3Sb!Bt&GG6gei_aY#)L5a9ud#EHl-7EG=NiUT<_MP#gw@i8#O7p3MD z>+6BY0B=Sn5e8WNX~u3^bG_Apk%7UGiGhJ1W&@CJU|c`>y@(vh6n;?|Mw!VvqMBe= arB0}vBni}To*CU$jFU@5)!4kjP6YtkO3}Xn delta 554 zcmbQQy+E5Mz?+#xgn@y9gQ2i}BF{n2!gkHr>-UAXzMptau0GKFuz|qw{asJ??p=2E zpwo5nqw1^&8y`h`M9`ng> z+cl=#-@rUkoFP#5!l{U5M<&d&7GJZZgtz)bknB^rh3i&{MyRY*^_G)z{O74{%VfP#zxZgQ(uYaRub*}PGx@3;!)V-NaN|d;!(M^nul_mj7_8No zXH2_d(f9PmlbBnLhkt**oE^8_z*)so!)N^>!IDoq5~rWcKl}Iaw~3{tq3gS{=AN5Y zT)18A?AzmSejR?Vl{44O`g4D;ep4*>{(r9DS&@T6Gj?XooXsB@t=O0f+c)cS_%eg& z8txDfJ^2#fa}akoe>NkCt0DLp#N`$80&^pUZ4kjYd7iMDJSb3s<|zxXF)++gXJ8Np z1~?2fFg~38Sy)K{q$V_UXS*ab1H%^{1_lY30wBGuQHf)+Er--(e-R##g|Q+sjD?e{ zL}Wmm86q;W$N3l-;)_yqiuLtCWPmp#lL!MWS|?uwD&H{qoroMrIiIKuqwHjDQBAO` bQYTbSl4N9HI1jWH)m2QBi$&Gge87SLY68te diff --git a/templates/batch-wise/batch_wise_template.py b/templates/batch-wise/batch_wise_template.py index f887bcd..aaa617c 100644 --- a/templates/batch-wise/batch_wise_template.py +++ b/templates/batch-wise/batch_wise_template.py @@ -21,17 +21,26 @@ def generate_batch_wise_templates(sessions, data, output_dir): batch_code = batch["batch_code"] batch_sessions = _sessions_for_batch(sessions, batch_code) + # A batch-wise view can legitimately show more than one lecture in + # the same slot (e.g. sections of the batch split across rooms), so + # every session landing on a cell is kept and rendered — none are + # dropped or overwritten. by_day_slot = {} for s in batch_sessions: for slot_index in s["slot_indices"]: - by_day_slot[(s["day"], slot_index)] = s + by_day_slot.setdefault((s["day"], slot_index), []).append(s) def cell_text(day, slot_index, by_day_slot=by_day_slot): - s = by_day_slot.get((day, slot_index)) - if not s: + entries = by_day_slot.get((day, slot_index)) + if not entries: return "" - tag = " (Lab)" if s["course_type"] == "lab" else (" (General)" if s["is_general"] else "") - return f'{s["course_name"]}{tag}\n{s["instructor_name"]}\n{s["room_id"]}' + lines = [] + for s in entries: + tag = " (Lab)" if s["course_type"] == "lab" else (" (General)" if s["is_general"] else "") + lines.append(f'{s["course_name"]}{tag}\n{s["instructor_name"]}\n{s["room_id"]}') + return "\n---\n".join(lines) + + first_by_day_slot = {k: v[0] for k, v in by_day_slot.items()} wb = new_workbook() ws = wb.active @@ -41,7 +50,7 @@ def generate_batch_wise_templates(sessions, data, output_dir): title=f"Batch {batch_code}", subtitle=subtitle, time_slots=GRID_TIME_SLOTS, - sessions_by_day_slot=by_day_slot, + sessions_by_day_slot=first_by_day_slot, cell_text_fn=cell_text, ) path = save_workbook(wb, output_dir, f"{batch_code}.xlsx") diff --git a/templates/room-wise/room_wise_template.py b/templates/room-wise/room_wise_template.py index 8d5832f..31c398b 100644 --- a/templates/room-wise/room_wise_template.py +++ b/templates/room-wise/room_wise_template.py @@ -17,18 +17,26 @@ def generate_room_wise_templates(sessions, data, output_dir): room_id = room["room_id"] room_sessions = [s for s in sessions if s["room_id"] == room_id] + # A room-wise view can legitimately show more than one lecture in + # the same slot (e.g. a large room split/shared), so every session + # landing on a cell is kept and rendered — none are dropped. by_day_slot = {} for s in room_sessions: for slot_index in s["slot_indices"]: - by_day_slot[(s["day"], slot_index)] = s + by_day_slot.setdefault((s["day"], slot_index), []).append(s) def cell_text(day, slot_index, by_day_slot=by_day_slot): - s = by_day_slot.get((day, slot_index)) - if not s: + entries = by_day_slot.get((day, slot_index)) + if not entries: return "" - tag = " (Lab)" if s["course_type"] == "lab" else (" (General)" if s["is_general"] else "") - batches = "+".join(s["batch_codes"]) - return f'{s["course_name"]}{tag}\n{batches}\n{s["instructor_name"]}' + lines = [] + for s in entries: + tag = " (Lab)" if s["course_type"] == "lab" else (" (General)" if s["is_general"] else "") + batches = "+".join(s["batch_codes"]) + lines.append(f'{s["course_name"]}{tag}\n{batches}\n{s["instructor_name"]}') + return "\n---\n".join(lines) + + first_by_day_slot = {k: v[0] for k, v in by_day_slot.items()} wb = new_workbook() ws = wb.active @@ -37,7 +45,7 @@ def generate_room_wise_templates(sessions, data, output_dir): title=f'{room["room_name"]} ({room_id})', subtitle=f'Block {room["block_id"]} - {room["room_type"].title()} - Capacity {room["capacity"]}', time_slots=GRID_TIME_SLOTS, - sessions_by_day_slot=by_day_slot, + sessions_by_day_slot=first_by_day_slot, cell_text_fn=cell_text, ) path = save_workbook(wb, output_dir, f"{room_id}.xlsx") diff --git a/templates/student-wise/student_wise_template.py b/templates/student-wise/student_wise_template.py index d07014d..07f9c0b 100644 --- a/templates/student-wise/student_wise_template.py +++ b/templates/student-wise/student_wise_template.py @@ -9,6 +9,7 @@ sys.path.insert(0, os.path.join(_ROOT, "controller")) from xlsx_grid_helper import build_grid_sheet, new_workbook, save_workbook # noqa: E402 from template_controller import TIME_SLOTS as GRID_TIME_SLOTS # noqa: E402 +from template_logger import log_error # noqa: E402 def _sessions_for_batch(sessions, batch_code): @@ -23,17 +24,38 @@ def generate_student_wise_templates(sessions, data, output_dir): batch = data["batches_by_code"].get(batch_code) student_sessions = _sessions_for_batch(sessions, batch_code) - by_day_slot = {} + # A student can only be in one place at a time: each (day, slot) + # must resolve to exactly one session. If the schedule places more + # than one, that's a real scheduling error - log it instead of + # silently picking/overwriting one. + raw_by_day_slot = {} for s in student_sessions: for slot_index in s["slot_indices"]: - by_day_slot[(s["day"], slot_index)] = s + raw_by_day_slot.setdefault((s["day"], slot_index), []).append(s) - def cell_text(day, slot_index, by_day_slot=by_day_slot): - s = by_day_slot.get((day, slot_index)) - if not s: + by_day_slot = {} + for (day, slot_index), entries in raw_by_day_slot.items(): + if len(entries) > 1: + course_list = ", ".join( + f'{e["course_id"]} ({e["course_type"]}) with {e["instructor_name"]} in {e["room_id"]}' + for e in entries + ) + log_error( + f"Student conflict: roll {roll_no} (batch {batch_code}) has " + f"{len(entries)} overlapping courses on {day} slot {slot_index}: {course_list}" + ) + by_day_slot[(day, slot_index)] = entries[0] + + def cell_text(day, slot_index, raw_by_day_slot=raw_by_day_slot): + entries = raw_by_day_slot.get((day, slot_index)) + if not entries: return "" + s = entries[0] tag = " (Lab)" if s["course_type"] == "lab" else (" (General)" if s["is_general"] else "") - return f'{s["course_name"]}{tag}\n{s["instructor_name"]}\n{s["room_id"]}' + text = f'{s["course_name"]}{tag}\n{s["instructor_name"]}\n{s["room_id"]}' + if len(entries) > 1: + text = "CONFLICT!\n" + text + return text subtitle = f'{student["student_name"]} - Batch {batch_code}' if batch: diff --git a/templates/teacher-wise/teacher_wise_template.py b/templates/teacher-wise/teacher_wise_template.py index 46ae62f..76e6732 100644 --- a/templates/teacher-wise/teacher_wise_template.py +++ b/templates/teacher-wise/teacher_wise_template.py @@ -9,6 +9,7 @@ sys.path.insert(0, os.path.join(_ROOT, "controller")) from xlsx_grid_helper import build_grid_sheet, new_workbook, save_workbook # noqa: E402 from template_controller import TIME_SLOTS as GRID_TIME_SLOTS # noqa: E402 +from template_logger import log_error # noqa: E402 def generate_teacher_wise_templates(sessions, data, output_dir): @@ -17,18 +18,39 @@ def generate_teacher_wise_templates(sessions, data, output_dir): code = instructor["instructor_code"] instr_sessions = [s for s in sessions if s["instructor_code"] == code] - by_day_slot = {} + # A teacher can only be in one place at a time: each (day, slot) + # must resolve to exactly one session. If the schedule places more + # than one, that's a real scheduling error - log it instead of + # silently picking/overwriting one. + raw_by_day_slot = {} for s in instr_sessions: for slot_index in s["slot_indices"]: - by_day_slot[(s["day"], slot_index)] = s + raw_by_day_slot.setdefault((s["day"], slot_index), []).append(s) - def cell_text(day, slot_index, by_day_slot=by_day_slot): - s = by_day_slot.get((day, slot_index)) - if not s: + by_day_slot = {} + for (day, slot_index), entries in raw_by_day_slot.items(): + if len(entries) > 1: + course_list = ", ".join( + f'{e["course_id"]} ({e["course_type"]}) for batch(es) {"+".join(e["batch_codes"])} in {e["room_id"]}' + for e in entries + ) + log_error( + f"Teacher conflict: {instructor['instructor_name']} ({code}) is double-booked on " + f"{day} slot {slot_index}: {course_list}" + ) + by_day_slot[(day, slot_index)] = entries[0] + + def cell_text(day, slot_index, raw_by_day_slot=raw_by_day_slot): + entries = raw_by_day_slot.get((day, slot_index)) + if not entries: return "" + s = entries[0] tag = " (Lab)" if s["course_type"] == "lab" else (" (General)" if s["is_general"] else "") batches = "+".join(s["batch_codes"]) - return f'{s["course_name"]}{tag}\n{batches}\n{s["room_id"]}' + text = f'{s["course_name"]}{tag}\n{batches}\n{s["room_id"]}' + if len(entries) > 1: + text = "CONFLICT!\n" + text + return text wb = new_workbook() ws = wb.active