diff --git a/backend/pom.xml b/backend/pom.xml
index 687c0b6..7739cd7 100644
--- a/backend/pom.xml
+++ b/backend/pom.xml
@@ -28,7 +28,7 @@
- 21
+ 17
diff --git a/backend/src/main/java/com/rit/portal/config/DataInitializer.java b/backend/src/main/java/com/rit/portal/config/DataInitializer.java
index 4a0dd3b..bf99c81 100644
--- a/backend/src/main/java/com/rit/portal/config/DataInitializer.java
+++ b/backend/src/main/java/com/rit/portal/config/DataInitializer.java
@@ -17,6 +17,8 @@ import java.util.Arrays;
import java.util.List;
import java.util.Map;
+import com.rit.portal.controller.NotePyqController;
+
@Component
public class DataInitializer implements CommandLineRunner {
@@ -26,100 +28,19 @@ public class DataInitializer implements CommandLineRunner {
@Autowired
private BusRouteRepository busRouteRepository;
+ @Autowired
+ private NotePyqController notePyqController;
+
@Override
public void run(String... args) throws Exception {
- if (noteRepository.count() == 0) {
- noteRepository.saveAll(Arrays.asList(
- NotePyq.builder()
- .title("Engineering Mathematics – Unit 1-5")
- .subject("Mathematics")
- .department("Computer Science & Engineering")
- .semester(1)
- .fileType("notes")
- .downloadUrl("#")
- .fileSize("4.2 MB")
- .downloadsCount(348)
- .uploadedAt(LocalDateTime.now())
- .build(),
- NotePyq.builder()
- .title("Physics PYQ 2020-2024")
- .subject("Physics")
- .department("Computer Science & Engineering")
- .semester(1)
- .fileType("pyq")
- .downloadUrl("#")
- .fileSize("8.1 MB")
- .downloadsCount(512)
- .uploadedAt(LocalDateTime.now())
- .build(),
- NotePyq.builder()
- .title("C Programming Complete Notes")
- .subject("Programming")
- .department("Computer Science & Engineering")
- .semester(1)
- .fileType("notes")
- .downloadUrl("#")
- .fileSize("6.3 MB")
- .downloadsCount(734)
- .uploadedAt(LocalDateTime.now())
- .build(),
- NotePyq.builder()
- .title("Data Structures PYQ 2019-2024")
- .subject("Data Structures")
- .department("Computer Science & Engineering")
- .semester(3)
- .fileType("pyq")
- .downloadUrl("#")
- .fileSize("10.2 MB")
- .downloadsCount(621)
- .uploadedAt(LocalDateTime.now())
- .build(),
- NotePyq.builder()
- .title("Circuit Theory Full Notes")
- .subject("Circuit Theory")
- .department("Electronics & Communication")
- .semester(2)
- .fileType("notes")
- .downloadUrl("#")
- .fileSize("5.7 MB")
- .downloadsCount(289)
- .uploadedAt(LocalDateTime.now())
- .build(),
- NotePyq.builder()
- .title("Anna University Syllabus 2021")
- .subject("Syllabus")
- .department("All Departments")
- .semester(1)
- .fileType("syllabus")
- .downloadUrl("#")
- .fileSize("2.1 MB")
- .downloadsCount(890)
- .uploadedAt(LocalDateTime.now())
- .build(),
- NotePyq.builder()
- .title("Thermodynamics Notes")
- .subject("Thermodynamics")
- .department("Mechanical Engineering")
- .semester(3)
- .fileType("notes")
- .downloadUrl("#")
- .fileSize("3.9 MB")
- .downloadsCount(201)
- .uploadedAt(LocalDateTime.now())
- .build(),
- NotePyq.builder()
- .title("Digital Electronics PYQ")
- .subject("Digital Electronics")
- .department("Electronics & Communication")
- .semester(4)
- .fileType("pyq")
- .downloadUrl("#")
- .fileSize("7.3 MB")
- .downloadsCount(445)
- .uploadedAt(LocalDateTime.now())
- .build()
- ));
- System.out.println("🌱 Database successfully seeded with Notes & PYQs test data!");
+ // Clear all previous mock data from the database
+ noteRepository.deleteAll();
+ // Run initial scan to populate database with whatever is currently in /uploads
+ try {
+ notePyqController.syncUploads();
+ System.out.println("🌱 Initialized Note/PYQ database from local uploads folder!");
+ } catch (Exception e) {
+ System.err.println("⚠️ Failed to run initial uploads sync: " + e.getMessage());
}
// Seed Bus Routes
diff --git a/backend/src/main/java/com/rit/portal/config/WebConfig.java b/backend/src/main/java/com/rit/portal/config/WebConfig.java
index 3f5ef5f..59cd827 100644
--- a/backend/src/main/java/com/rit/portal/config/WebConfig.java
+++ b/backend/src/main/java/com/rit/portal/config/WebConfig.java
@@ -9,10 +9,16 @@ public class WebConfig implements WebMvcConfigurer {
@Override
public void addCorsMappings(CorsRegistry registry) {
- registry.addMapping("/api/**")
+ registry.addMapping("/**")
.allowedOriginPatterns("*")
.allowedMethods("GET", "POST", "PUT", "DELETE", "OPTIONS")
.allowedHeaders("*")
.allowCredentials(true);
}
+
+ @Override
+ public void addResourceHandlers(org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry registry) {
+ registry.addResourceHandler("/uploads/**")
+ .addResourceLocations("file:uploads/");
+ }
}
diff --git a/backend/src/main/java/com/rit/portal/controller/NotePyqController.java b/backend/src/main/java/com/rit/portal/controller/NotePyqController.java
index 54ff9c6..7fc8b78 100644
--- a/backend/src/main/java/com/rit/portal/controller/NotePyqController.java
+++ b/backend/src/main/java/com/rit/portal/controller/NotePyqController.java
@@ -7,6 +7,11 @@ import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import java.util.List;
+import java.io.File;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.time.LocalDateTime;
+
@RestController
@RequestMapping("/api/notes")
public class NotePyqController {
@@ -14,21 +19,117 @@ public class NotePyqController {
@Autowired
private NotePyqRepository noteRepository;
+ // Sync uploads directory with DB
+ public synchronized void syncUploads() {
+ File uploadsDir = new File("uploads");
+ if (!uploadsDir.exists()) {
+ uploadsDir.mkdirs();
+ }
+
+ List currentNotes = noteRepository.findAll();
+ List activeUrls = Collections.synchronizedList(new ArrayList<>());
+
+ File[] semDirs = uploadsDir.listFiles();
+ if (semDirs != null) {
+ for (File semDir : semDirs) {
+ if (semDir.isDirectory() && semDir.getName().startsWith("sem")) {
+ String semStr = semDir.getName().substring(3);
+ try {
+ Integer semester = Integer.parseInt(semStr);
+ File[] subDirs = semDir.listFiles();
+ if (subDirs != null) {
+ for (File subDir : subDirs) {
+ if (subDir.isDirectory()) {
+ String subject = subDir.getName();
+ File[] typeDirs = subDir.listFiles();
+ if (typeDirs != null) {
+ for (File typeDir : typeDirs) {
+ if (typeDir.isDirectory()) {
+ String fileType = typeDir.getName();
+ File[] files = typeDir.listFiles();
+ if (files != null) {
+ for (File file : files) {
+ if (file.isFile() && !file.getName().equals(".gitkeep")) {
+ String fileName = file.getName();
+ String downloadUrl = "http://localhost:8080/uploads/" +
+ semDir.getName() + "/" +
+ subDir.getName() + "/" +
+ typeDir.getName() + "/" +
+ fileName;
+ activeUrls.add(downloadUrl);
+
+ boolean exists = currentNotes.stream().anyMatch(n -> n.getDownloadUrl().equals(downloadUrl));
+ if (!exists) {
+ String baseName = fileName.contains(".") ? fileName.substring(0, fileName.lastIndexOf('.')) : fileName;
+ String title = baseName.replace("_", " ").replace("-", " ");
+
+ String department = "All Departments";
+
+ long bytes = file.length();
+ String fileSize = formatFileSize(bytes);
+
+ NotePyq newNote = NotePyq.builder()
+ .title(title)
+ .subject(subject)
+ .department(department)
+ .semester(semester)
+ .fileType(fileType)
+ .downloadUrl(downloadUrl)
+ .fileSize(fileSize)
+ .downloadsCount(0)
+ .uploadedAt(LocalDateTime.now())
+ .build();
+ noteRepository.save(newNote);
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ } catch (NumberFormatException e) {
+ // Ignore
+ }
+ }
+ }
+ }
+
+ // Delete notes from DB that no longer exist on disk
+ for (NotePyq note : currentNotes) {
+ if (!activeUrls.contains(note.getDownloadUrl())) {
+ noteRepository.delete(note);
+ }
+ }
+ }
+
+ private String formatFileSize(long bytes) {
+ if (bytes < 1024) return bytes + " B";
+ int exp = (int) (Math.log(bytes) / Math.log(1024));
+ char pre = "KMGTPE".charAt(exp - 1);
+ return String.format("%.1f %sB", bytes / Math.pow(1024, exp), pre);
+ }
+
// Get all notes
@GetMapping
public List getAllNotes() {
+ syncUploads();
return noteRepository.findAll();
}
// Get notes by semester
@GetMapping("/semester/{semester}")
public List getNotesBySemester(@PathVariable Integer semester) {
+ syncUploads();
return noteRepository.findBySemester(semester);
}
// Get notes by department
@GetMapping("/department")
public List getNotesByDepartment(@RequestParam String dept) {
+ syncUploads();
return noteRepository.findByDepartment(dept);
}
diff --git a/backend/src/main/resources/application.properties b/backend/src/main/resources/application.properties
index 9728494..9509fbc 100644
--- a/backend/src/main/resources/application.properties
+++ b/backend/src/main/resources/application.properties
@@ -1,7 +1,11 @@
# ─── DATABASE CONNECTION CONFIGURATION ───
-spring.datasource.url=jdbc:postgresql://localhost:5433/rit_freshers_hub?sslmode=disable
+spring.datasource.url=jdbc:postgresql://localhost:5432/rit_freshers_hub?sslmode=disable
spring.datasource.username=postgres
-spring.datasource.password=Anbukathir@#$2006
+<<<<<<< Updated upstream
+spring.datasource.password=your_local_postgres_password_here
+=======
+spring.datasource.password=${DB_PASSWORD:Amudiesh22@.}
+>>>>>>> Stashed changes
# ─── JPA / HIBERNATE SETTINGS ───
spring.jpa.database-platform=org.hibernate.dialect.PostgreSQLDialect
diff --git a/backend/uploads/sem1/Basic Electrical and Electronics Engineering/assignment/.gitkeep b/backend/uploads/sem1/Basic Electrical and Electronics Engineering/assignment/.gitkeep
new file mode 100644
index 0000000..e69de29
diff --git a/backend/uploads/sem1/Basic Electrical and Electronics Engineering/notes/.gitkeep b/backend/uploads/sem1/Basic Electrical and Electronics Engineering/notes/.gitkeep
new file mode 100644
index 0000000..e69de29
diff --git a/backend/uploads/sem1/Basic Electrical and Electronics Engineering/pyq/.gitkeep b/backend/uploads/sem1/Basic Electrical and Electronics Engineering/pyq/.gitkeep
new file mode 100644
index 0000000..e69de29
diff --git a/backend/uploads/sem1/Basic Electrical and Electronics Engineering/syllabus/.gitkeep b/backend/uploads/sem1/Basic Electrical and Electronics Engineering/syllabus/.gitkeep
new file mode 100644
index 0000000..e69de29
diff --git a/backend/uploads/sem1/Communicative English/assignment/.gitkeep b/backend/uploads/sem1/Communicative English/assignment/.gitkeep
new file mode 100644
index 0000000..e69de29
diff --git a/backend/uploads/sem1/Communicative English/notes/.gitkeep b/backend/uploads/sem1/Communicative English/notes/.gitkeep
new file mode 100644
index 0000000..e69de29
diff --git a/backend/uploads/sem1/Communicative English/pyq/.gitkeep b/backend/uploads/sem1/Communicative English/pyq/.gitkeep
new file mode 100644
index 0000000..e69de29
diff --git a/backend/uploads/sem1/Communicative English/syllabus/.gitkeep b/backend/uploads/sem1/Communicative English/syllabus/.gitkeep
new file mode 100644
index 0000000..e69de29
diff --git a/backend/uploads/sem1/Engineering Practices Laboratory/assignment/.gitkeep b/backend/uploads/sem1/Engineering Practices Laboratory/assignment/.gitkeep
new file mode 100644
index 0000000..e69de29
diff --git a/backend/uploads/sem1/Engineering Practices Laboratory/notes/.gitkeep b/backend/uploads/sem1/Engineering Practices Laboratory/notes/.gitkeep
new file mode 100644
index 0000000..e69de29
diff --git a/backend/uploads/sem1/Engineering Practices Laboratory/pyq/.gitkeep b/backend/uploads/sem1/Engineering Practices Laboratory/pyq/.gitkeep
new file mode 100644
index 0000000..e69de29
diff --git a/backend/uploads/sem1/Engineering Practices Laboratory/syllabus/.gitkeep b/backend/uploads/sem1/Engineering Practices Laboratory/syllabus/.gitkeep
new file mode 100644
index 0000000..e69de29
diff --git a/backend/uploads/sem1/Heritage of Tamils/assignment/.gitkeep b/backend/uploads/sem1/Heritage of Tamils/assignment/.gitkeep
new file mode 100644
index 0000000..e69de29
diff --git a/backend/uploads/sem1/Heritage of Tamils/notes/.gitkeep b/backend/uploads/sem1/Heritage of Tamils/notes/.gitkeep
new file mode 100644
index 0000000..e69de29
diff --git a/backend/uploads/sem1/Heritage of Tamils/pyq/.gitkeep b/backend/uploads/sem1/Heritage of Tamils/pyq/.gitkeep
new file mode 100644
index 0000000..e69de29
diff --git a/backend/uploads/sem1/Heritage of Tamils/syllabus/.gitkeep b/backend/uploads/sem1/Heritage of Tamils/syllabus/.gitkeep
new file mode 100644
index 0000000..e69de29
diff --git a/backend/uploads/sem1/Matrices and Calculus/assignment/.gitkeep b/backend/uploads/sem1/Matrices and Calculus/assignment/.gitkeep
new file mode 100644
index 0000000..e69de29
diff --git a/backend/uploads/sem1/Matrices and Calculus/notes/.gitkeep b/backend/uploads/sem1/Matrices and Calculus/notes/.gitkeep
new file mode 100644
index 0000000..e69de29
diff --git a/backend/uploads/sem1/Matrices and Calculus/notes/DOC-20260709-WA0002..pdf b/backend/uploads/sem1/Matrices and Calculus/notes/DOC-20260709-WA0002..pdf
new file mode 100644
index 0000000..e14bfba
--- /dev/null
+++ b/backend/uploads/sem1/Matrices and Calculus/notes/DOC-20260709-WA0002..pdf
@@ -0,0 +1,26081 @@
+%PDF-1.4
+%
+1 0 obj
+<<
+/Type /Catalog
+/Pages 2 0 R
+/OpenAction 3 0 R
+>>
+endobj
+4 0 obj
+<<
+/Producer (Skia/PDF m151 Google Apps Renderer)
+>>
+endobj
+2 0 obj
+<<
+/Type /Pages
+/Count 39
+/Kids [5 0 R 6 0 R 7 0 R 8 0 R 9 0 R]
+>>
+endobj
+3 0 obj
+<<
+/Type /Action
+/S /JavaScript
+/JS (this.print\({bUI:true,bSilent:false,bShrinkToFit:true}\);)
+>>
+endobj
+5 0 obj
+<<
+/Type /Pages
+/Count 8
+/Kids [10 0 R 11 0 R 12 0 R 13 0 R 14 0 R 15 0 R 16 0 R 17 0 R]
+/Parent 2 0 R
+>>
+endobj
+6 0 obj
+<<
+/Type /Pages
+/Count 8
+/Kids [18 0 R 19 0 R 20 0 R 21 0 R 22 0 R 23 0 R 24 0 R 25 0 R]
+/Parent 2 0 R
+>>
+endobj
+7 0 obj
+<<
+/Type /Pages
+/Count 8
+/Kids [26 0 R 27 0 R 28 0 R 29 0 R 30 0 R 31 0 R 32 0 R 33 0 R]
+/Parent 2 0 R
+>>
+endobj
+8 0 obj
+<<
+/Type /Pages
+/Count 8
+/Kids [34 0 R 35 0 R 36 0 R 37 0 R 38 0 R 39 0 R 40 0 R 41 0 R]
+/Parent 2 0 R
+>>
+endobj
+9 0 obj
+<<
+/Type /Pages
+/Count 7
+/Kids [42 0 R 43 0 R 44 0 R 45 0 R 46 0 R 47 0 R 48 0 R]
+/Parent 2 0 R
+>>
+endobj
+10 0 obj
+<<
+/Type /Page
+/Resources <<
+/ProcSet [/PDF /Text /ImageB /ImageC /ImageI]
+/ExtGState <<
+/G3 49 0 R
+>>
+/XObject <<
+/X7 50 0 R
+>>
+/Font <<
+/F4 51 0 R
+/F5 52 0 R
+/F6 53 0 R
+>>
+>>
+/MediaBox [0 0 595 842]
+/Contents 54 0 R
+/Tabs /S
+/Parent 5 0 R
+>>
+endobj
+11 0 obj
+<<
+/Type /Page
+/Resources <<
+/ProcSet [/PDF /Text /ImageB /ImageC /ImageI]
+/ExtGState <<
+/G3 49 0 R
+/G14 55 0 R
+>>
+/XObject <<
+/X10 56 0 R
+/X11 57 0 R
+/X13 58 0 R
+/X16 59 0 R
+>>
+/Font <<
+/F4 51 0 R
+/F5 52 0 R
+/F12 60 0 R
+/F15 61 0 R
+/F17 62 0 R
+>>
+>>
+/MediaBox [0 0 595 842]
+/Contents 63 0 R
+/Tabs /S
+/Parent 5 0 R
+>>
+endobj
+12 0 obj
+<<
+/Type /Page
+/Resources <<
+/ProcSet [/PDF /Text /ImageB /ImageC /ImageI]
+/ExtGState <<
+/G3 49 0 R
+>>
+/XObject <<
+/X20 64 0 R
+/X21 65 0 R
+/X22 66 0 R
+/X23 67 0 R
+/X24 68 0 R
+/X25 69 0 R
+>>
+/Font <<
+/F5 52 0 R
+>>
+>>
+/MediaBox [0 0 595 842]
+/Contents 70 0 R
+/Tabs /S
+/Parent 5 0 R
+>>
+endobj
+13 0 obj
+<<
+/Type /Page
+/Resources <<
+/ProcSet [/PDF /Text /ImageB /ImageC /ImageI]
+/ExtGState <<
+/G3 49 0 R
+>>
+/XObject <<
+/X28 71 0 R
+/X29 72 0 R
+/X30 73 0 R
+>>
+/Font <<
+/F4 51 0 R
+/F5 52 0 R
+/F12 60 0 R
+/F17 62 0 R
+>>
+>>
+/MediaBox [0 0 595 842]
+/Contents 74 0 R
+/Tabs /S
+/Parent 5 0 R
+>>
+endobj
+14 0 obj
+<<
+/Type /Page
+/Resources <<
+/ProcSet [/PDF /Text /ImageB /ImageC /ImageI]
+/ExtGState <<
+/G3 49 0 R
+>>
+/XObject <<
+/X33 75 0 R
+/X34 76 0 R
+/X35 77 0 R
+/X36 78 0 R
+>>
+/Font <<
+/F5 52 0 R
+>>
+>>
+/MediaBox [0 0 595 842]
+/Contents 79 0 R
+/Tabs /S
+/Parent 5 0 R
+>>
+endobj
+15 0 obj
+<<
+/Type /Page
+/Resources <<
+/ProcSet [/PDF /Text /ImageB /ImageC /ImageI]
+/ExtGState <<
+/G3 49 0 R
+>>
+/XObject <<
+/X39 80 0 R
+/X41 81 0 R
+>>
+/Font <<
+/F5 52 0 R
+/F12 60 0 R
+/F17 62 0 R
+>>
+>>
+/MediaBox [0 0 595 842]
+/Contents 82 0 R
+/Tabs /S
+/Parent 5 0 R
+>>
+endobj
+16 0 obj
+<<
+/Type /Page
+/Resources <<
+/ProcSet [/PDF /Text /ImageB /ImageC /ImageI]
+/ExtGState <<
+/G3 49 0 R
+>>
+/XObject <<
+/X44 83 0 R
+>>
+/Font <<
+/F4 51 0 R
+/F5 52 0 R
+/F12 60 0 R
+/F17 62 0 R
+>>
+>>
+/MediaBox [0 0 595 842]
+/Contents 84 0 R
+/Tabs /S
+/Parent 5 0 R
+>>
+endobj
+17 0 obj
+<<
+/Type /Page
+/Resources <<
+/ProcSet [/PDF /Text /ImageB /ImageC /ImageI]
+/ExtGState <<
+/G3 49 0 R
+>>
+/XObject <<
+/X49 85 0 R
+/X50 86 0 R
+>>
+/Font <<
+/F4 51 0 R
+/F5 52 0 R
+/F17 62 0 R
+/F48 87 0 R
+>>
+>>
+/MediaBox [0 0 595 842]
+/Contents 88 0 R
+/Tabs /S
+/Parent 5 0 R
+>>
+endobj
+18 0 obj
+<<
+/Type /Page
+/Resources <<
+/ProcSet [/PDF /Text /ImageB /ImageC /ImageI]
+/ExtGState <<
+/G3 49 0 R
+>>
+/XObject <<
+/X53 89 0 R
+/X54 90 0 R
+>>
+/Font <<
+/F4 51 0 R
+/F5 52 0 R
+/F12 60 0 R
+/F15 61 0 R
+/F17 62 0 R
+/F55 91 0 R
+>>
+>>
+/MediaBox [0 0 595 842]
+/Contents 92 0 R
+/Tabs /S
+/Parent 6 0 R
+>>
+endobj
+19 0 obj
+<<
+/Type /Page
+/Resources <<
+/ProcSet [/PDF /Text /ImageB /ImageC /ImageI]
+/ExtGState <<
+/G3 49 0 R
+/G58 93 0 R
+/G59 94 0 R
+>>
+/XObject <<
+/X60 95 0 R
+/X61 96 0 R
+/X62 97 0 R
+>>
+/Font <<
+/F4 51 0 R
+/F5 52 0 R
+/F17 62 0 R
+>>
+>>
+/MediaBox [0 0 595 842]
+/Contents 98 0 R
+/Tabs /S
+/Parent 6 0 R
+>>
+endobj
+20 0 obj
+<<
+/Type /Page
+/Resources <<
+/ProcSet [/PDF /Text /ImageB /ImageC /ImageI]
+/ExtGState <<
+/G3 49 0 R
+/G65 99 0 R
+/G66 100 0 R
+/G67 101 0 R
+/G79 102 0 R
+>>
+/XObject <<
+/X68 103 0 R
+/X70 104 0 R
+/X72 105 0 R
+/X74 106 0 R
+/X76 107 0 R
+/X78 108 0 R
+/X80 109 0 R
+>>
+/Font <<
+/F4 51 0 R
+/F5 52 0 R
+/F12 60 0 R
+/F17 62 0 R
+>>
+>>
+/MediaBox [0 0 595 842]
+/Contents 110 0 R
+/Tabs /S
+/Parent 6 0 R
+>>
+endobj
+21 0 obj
+<<
+/Type /Page
+/Resources <<
+/ProcSet [/PDF /Text /ImageB /ImageC /ImageI]
+/ExtGState <<
+/G3 49 0 R
+>>
+/XObject <<
+/X83 111 0 R
+/X84 112 0 R
+>>
+/Font <<
+/F5 52 0 R
+/F17 62 0 R
+>>
+>>
+/MediaBox [0 0 595 842]
+/Contents 113 0 R
+/Tabs /S
+/Parent 6 0 R
+>>
+endobj
+22 0 obj
+<<
+/Type /Page
+/Resources <<
+/ProcSet [/PDF /Text /ImageB /ImageC /ImageI]
+/ExtGState <<
+/G3 49 0 R
+>>
+/XObject <<
+/X87 114 0 R
+/X88 115 0 R
+/X89 116 0 R
+>>
+/Font <<
+/F5 52 0 R
+/F12 60 0 R
+/F15 61 0 R
+/F17 62 0 R
+>>
+>>
+/MediaBox [0 0 595 842]
+/Contents 117 0 R
+/Tabs /S
+/Parent 6 0 R
+>>
+endobj
+23 0 obj
+<<
+/Type /Page
+/Resources <<
+/ProcSet [/PDF /Text /ImageB /ImageC /ImageI]
+/ExtGState <<
+/G3 49 0 R
+>>
+/XObject <<
+/X92 118 0 R
+/X93 119 0 R
+/X94 120 0 R
+/X95 121 0 R
+/X96 122 0 R
+>>
+/Font <<
+/F5 52 0 R
+/F12 60 0 R
+>>
+>>
+/MediaBox [0 0 595 842]
+/Contents 123 0 R
+/Tabs /S
+/Parent 6 0 R
+>>
+endobj
+24 0 obj
+<<
+/Type /Page
+/Resources <<
+/ProcSet [/PDF /Text /ImageB /ImageC /ImageI]
+/ExtGState <<
+/G3 49 0 R
+>>
+/XObject <<
+/X99 124 0 R
+/X100 125 0 R
+>>
+/Font <<
+/F4 51 0 R
+/F5 52 0 R
+/F12 60 0 R
+>>
+>>
+/MediaBox [0 0 595 842]
+/Contents 126 0 R
+/Tabs /S
+/Parent 6 0 R
+>>
+endobj
+25 0 obj
+<<
+/Type /Page
+/Resources <<
+/ProcSet [/PDF /Text /ImageB /ImageC /ImageI]
+/ExtGState <<
+/G3 49 0 R
+>>
+/XObject <<
+/X103 127 0 R
+/X104 128 0 R
+/X105 129 0 R
+>>
+/Font <<
+/F5 52 0 R
+>>
+>>
+/MediaBox [0 0 595 842]
+/Contents 130 0 R
+/Tabs /S
+/Parent 6 0 R
+>>
+endobj
+26 0 obj
+<<
+/Type /Page
+/Resources <<
+/ProcSet [/PDF /Text /ImageB /ImageC /ImageI]
+/ExtGState <<
+/G3 49 0 R
+/G79 102 0 R
+>>
+/XObject <<
+/X108 131 0 R
+/X109 132 0 R
+/X110 133 0 R
+/X111 134 0 R
+/X112 135 0 R
+/X113 136 0 R
+>>
+/Font <<
+/F4 51 0 R
+/F5 52 0 R
+>>
+>>
+/MediaBox [0 0 595 842]
+/Contents 137 0 R
+/Tabs /S
+/Parent 7 0 R
+>>
+endobj
+27 0 obj
+<<
+/Type /Page
+/Resources <<
+/ProcSet [/PDF /Text /ImageB /ImageC /ImageI]
+/ExtGState <<
+/G3 49 0 R
+>>
+/XObject <<
+/X116 138 0 R
+/X117 139 0 R
+/X118 140 0 R
+/X119 141 0 R
+>>
+/Font <<
+/F4 51 0 R
+/F5 52 0 R
+/F17 62 0 R
+>>
+>>
+/MediaBox [0 0 595 842]
+/Contents 142 0 R
+/Tabs /S
+/Parent 7 0 R
+>>
+endobj
+28 0 obj
+<<
+/Type /Page
+/Resources <<
+/ProcSet [/PDF /Text /ImageB /ImageC /ImageI]
+/ExtGState <<
+/G3 49 0 R
+>>
+/XObject <<
+/X122 143 0 R
+/X123 144 0 R
+/X124 145 0 R
+/X125 146 0 R
+>>
+/Font <<
+/F5 52 0 R
+>>
+>>
+/MediaBox [0 0 595 842]
+/Contents 147 0 R
+/Tabs /S
+/Parent 7 0 R
+>>
+endobj
+29 0 obj
+<<
+/Type /Page
+/Resources <<
+/ProcSet [/PDF /Text /ImageB /ImageC /ImageI]
+/ExtGState <<
+/G3 49 0 R
+>>
+/XObject <<
+/X128 148 0 R
+/X129 149 0 R
+>>
+/Font <<
+/F4 51 0 R
+/F5 52 0 R
+/F15 61 0 R
+>>
+>>
+/MediaBox [0 0 595 842]
+/Contents 150 0 R
+/Tabs /S
+/Parent 7 0 R
+>>
+endobj
+30 0 obj
+<<
+/Type /Page
+/Resources <<
+/ProcSet [/PDF /Text /ImageB /ImageC /ImageI]
+/ExtGState <<
+/G3 49 0 R
+/G136 151 0 R
+>>
+/XObject <<
+/X133 152 0 R
+/X134 153 0 R
+/X135 154 0 R
+>>
+/Font <<
+/F4 51 0 R
+/F5 52 0 R
+/F15 61 0 R
+>>
+>>
+/MediaBox [0 0 595 842]
+/Contents 155 0 R
+/Tabs /S
+/Parent 7 0 R
+>>
+endobj
+31 0 obj
+<<
+/Type /Page
+/Resources <<
+/ProcSet [/PDF /Text /ImageB /ImageC /ImageI]
+/ExtGState <<
+/G3 49 0 R
+>>
+/XObject <<
+/X139 156 0 R
+/X140 157 0 R
+>>
+/Font <<
+/F4 51 0 R
+/F5 52 0 R
+/F17 62 0 R
+>>
+>>
+/MediaBox [0 0 595 842]
+/Contents 158 0 R
+/Tabs /S
+/Parent 7 0 R
+>>
+endobj
+32 0 obj
+<<
+/Type /Page
+/Resources <<
+/ProcSet [/PDF /Text /ImageB /ImageC /ImageI]
+/ExtGState <<
+/G3 49 0 R
+>>
+/XObject <<
+/X143 159 0 R
+/X144 160 0 R
+/X145 161 0 R
+/X146 162 0 R
+/X147 163 0 R
+/X148 164 0 R
+>>
+/Font <<
+/F4 51 0 R
+/F5 52 0 R
+/F17 62 0 R
+/F149 165 0 R
+/F150 166 0 R
+>>
+>>
+/MediaBox [0 0 595 842]
+/Contents 167 0 R
+/Tabs /S
+/Parent 7 0 R
+>>
+endobj
+33 0 obj
+<<
+/Type /Page
+/Resources <<
+/ProcSet [/PDF /Text /ImageB /ImageC /ImageI]
+/ExtGState <<
+/G3 49 0 R
+>>
+/XObject <<
+/X153 168 0 R
+/X154 169 0 R
+>>
+/Font <<
+/F4 51 0 R
+/F5 52 0 R
+/F17 62 0 R
+>>
+>>
+/MediaBox [0 0 595 842]
+/Contents 170 0 R
+/Tabs /S
+/Parent 7 0 R
+>>
+endobj
+34 0 obj
+<<
+/Type /Page
+/Resources <<
+/ProcSet [/PDF /Text /ImageB /ImageC /ImageI]
+/ExtGState <<
+/G3 49 0 R
+>>
+/Font <<
+/F4 51 0 R
+/F5 52 0 R
+/F15 61 0 R
+>>
+>>
+/MediaBox [0 0 595 842]
+/Contents 171 0 R
+/Tabs /S
+/Parent 8 0 R
+>>
+endobj
+35 0 obj
+<<
+/Type /Page
+/Resources <<
+/ProcSet [/PDF /Text /ImageB /ImageC /ImageI]
+/ExtGState <<
+/G3 49 0 R
+/G14 55 0 R
+>>
+/XObject <<
+/X159 172 0 R
+/X160 173 0 R
+>>
+/Font <<
+/F4 51 0 R
+/F5 52 0 R
+/F17 62 0 R
+>>
+>>
+/MediaBox [0 0 595 842]
+/Contents 174 0 R
+/Tabs /S
+/Parent 8 0 R
+>>
+endobj
+36 0 obj
+<<
+/Type /Page
+/Resources <<
+/ProcSet [/PDF /Text /ImageB /ImageC /ImageI]
+/ExtGState <<
+/G3 49 0 R
+>>
+/XObject <<
+/X164 175 0 R
+/X165 176 0 R
+/X166 177 0 R
+/X167 178 0 R
+/X168 179 0 R
+/X169 180 0 R
+/X170 181 0 R
+>>
+/Font <<
+/F4 51 0 R
+/F5 52 0 R
+/F12 60 0 R
+/F15 61 0 R
+>>
+>>
+/MediaBox [0 0 595 842]
+/Contents 182 0 R
+/Tabs /S
+/Parent 8 0 R
+>>
+endobj
+37 0 obj
+<<
+/Type /Page
+/Resources <<
+/ProcSet [/PDF /Text /ImageB /ImageC /ImageI]
+/ExtGState <<
+/G3 49 0 R
+>>
+/XObject <<
+/X173 183 0 R
+/X174 184 0 R
+>>
+/Font <<
+/F5 52 0 R
+>>
+>>
+/MediaBox [0 0 595 842]
+/Contents 185 0 R
+/Tabs /S
+/Parent 8 0 R
+>>
+endobj
+38 0 obj
+<<
+/Type /Page
+/Resources <<
+/ProcSet [/PDF /Text /ImageB /ImageC /ImageI]
+/ExtGState <<
+/G3 49 0 R
+/G14 55 0 R
+>>
+/XObject <<
+/X177 186 0 R
+/X178 187 0 R
+/X179 188 0 R
+/X180 189 0 R
+/X181 190 0 R
+/X182 191 0 R
+>>
+/Font <<
+/F5 52 0 R
+>>
+>>
+/MediaBox [0 0 595 842]
+/Contents 192 0 R
+/Tabs /S
+/Parent 8 0 R
+>>
+endobj
+39 0 obj
+<<
+/Type /Page
+/Resources <<
+/ProcSet [/PDF /Text /ImageB /ImageC /ImageI]
+/ExtGState <<
+/G3 49 0 R
+>>
+/XObject <<
+/X185 193 0 R
+>>
+/Font <<
+/F4 51 0 R
+/F5 52 0 R
+/F17 62 0 R
+>>
+>>
+/MediaBox [0 0 595 842]
+/Contents 194 0 R
+/Tabs /S
+/Parent 8 0 R
+>>
+endobj
+40 0 obj
+<<
+/Type /Page
+/Resources <<
+/ProcSet [/PDF /Text /ImageB /ImageC /ImageI]
+/ExtGState <<
+/G3 49 0 R
+>>
+/XObject <<
+/X188 195 0 R
+/X189 196 0 R
+/X190 197 0 R
+/X191 198 0 R
+>>
+/Font <<
+/F5 52 0 R
+>>
+>>
+/MediaBox [0 0 595 842]
+/Contents 199 0 R
+/Tabs /S
+/Parent 8 0 R
+>>
+endobj
+41 0 obj
+<<
+/Type /Page
+/Resources <<
+/ProcSet [/PDF /Text /ImageB /ImageC /ImageI]
+/ExtGState <<
+/G3 49 0 R
+>>
+/XObject <<
+/X194 200 0 R
+/X195 201 0 R
+/X197 202 0 R
+/X199 203 0 R
+/X201 204 0 R
+/X202 205 0 R
+>>
+/Font <<
+/F5 52 0 R
+>>
+>>
+/MediaBox [0 0 595 842]
+/Contents 206 0 R
+/Tabs /S
+/Parent 8 0 R
+>>
+endobj
+42 0 obj
+<<
+/Type /Page
+/Resources <<
+/ProcSet [/PDF /Text /ImageB /ImageC /ImageI]
+/ExtGState <<
+/G3 49 0 R
+>>
+/XObject <<
+/X205 207 0 R
+>>
+/Font <<
+/F4 51 0 R
+/F5 52 0 R
+>>
+>>
+/MediaBox [0 0 595 842]
+/Contents 208 0 R
+/Tabs /S
+/Parent 9 0 R
+>>
+endobj
+43 0 obj
+<<
+/Type /Page
+/Resources <<
+/ProcSet [/PDF /Text /ImageB /ImageC /ImageI]
+/ExtGState <<
+/G3 49 0 R
+>>
+/Font <<
+/F4 51 0 R
+/F5 52 0 R
+>>
+>>
+/MediaBox [0 0 595 842]
+/Contents 209 0 R
+/Tabs /S
+/Parent 9 0 R
+>>
+endobj
+44 0 obj
+<<
+/Type /Page
+/Resources <<
+/ProcSet [/PDF /Text /ImageB /ImageC /ImageI]
+/ExtGState <<
+/G3 49 0 R
+/G14 55 0 R
+>>
+/XObject <<
+/X210 210 0 R
+/X211 211 0 R
+/X212 212 0 R
+/X213 213 0 R
+>>
+/Font <<
+/F4 51 0 R
+/F5 52 0 R
+/F12 60 0 R
+>>
+>>
+/MediaBox [0 0 595 842]
+/Contents 214 0 R
+/Tabs /S
+/Parent 9 0 R
+>>
+endobj
+45 0 obj
+<<
+/Type /Page
+/Resources <<
+/ProcSet [/PDF /Text /ImageB /ImageC /ImageI]
+/ExtGState <<
+/G3 49 0 R
+>>
+/XObject <<
+/X217 215 0 R
+>>
+/Font <<
+/F4 51 0 R
+/F5 52 0 R
+/F15 61 0 R
+>>
+>>
+/MediaBox [0 0 595 842]
+/Contents 216 0 R
+/Tabs /S
+/Parent 9 0 R
+>>
+endobj
+46 0 obj
+<<
+/Type /Page
+/Resources <<
+/ProcSet [/PDF /Text /ImageB /ImageC /ImageI]
+/ExtGState <<
+/G3 49 0 R
+>>
+/XObject <<
+/X220 217 0 R
+/X221 218 0 R
+/X222 219 0 R
+/X223 220 0 R
+>>
+/Font <<
+/F5 52 0 R
+/F17 62 0 R
+>>
+>>
+/MediaBox [0 0 595 842]
+/Contents 221 0 R
+/Tabs /S
+/Parent 9 0 R
+>>
+endobj
+47 0 obj
+<<
+/Type /Page
+/Resources <<
+/ProcSet [/PDF /Text /ImageB /ImageC /ImageI]
+/ExtGState <<
+/G3 49 0 R
+>>
+>>
+/MediaBox [0 0 595 842]
+/Contents 222 0 R
+/Tabs /S
+/Parent 9 0 R
+>>
+endobj
+48 0 obj
+<<
+/Type /Page
+/Resources <<
+/ProcSet [/PDF /Text /ImageB /ImageC /ImageI]
+/ExtGState <<
+/G3 49 0 R
+>>
+>>
+/MediaBox [0 0 612 792]
+/Contents 223 0 R
+/Tabs /S
+/Parent 9 0 R
+>>
+endobj
+49 0 obj
+<<
+/ca 1
+/BM /Normal
+>>
+endobj
+50 0 obj
+<<
+/Length 20801
+/Type /XObject
+/Subtype /Image
+/Width 432
+/Height 74
+/ColorSpace /DeviceRGB
+/BitsPerComponent 8
+/Filter /FlateDecode
+>>
+stream
+x}xT$+;xbڽ*+bA(E[hJGA^ iL?}]~g5sJn
Sy*z<.Rx2 UjFOK|
+M?>^<]Wˬe,c