From 9b2ce64433f90f8db8d4520468205db0759a2678 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Tue, 31 Mar 2026 14:42:26 +0000 Subject: [PATCH] chore: auto-render CV --- README.md | 4 +- index.html | 4 +- miti99.pdf | 823 +++++++++++++++++++++++++++-------------------------- miti99.typ | 4 +- 4 files changed, 419 insertions(+), 416 deletions(-) diff --git a/README.md b/README.md index 118cb86..7530245 100644 --- a/README.md +++ b/README.md @@ -15,7 +15,7 @@ Sept 2017 – June 2023 - GPA: 8.0/10 — Academic Excellence Scholarship; Five Good Student Award (university-wide recognition for academic performance, personal conduct, and community involvement) -- Thesis: Survival2D — Designed and implemented a high-performance multiplayer battle royale game server in Java; applied finite state machines to implement autonomous game bots +- Thesis: Survival2D — Built a 2D multiplayer Battle Royale game server in Java (Netty/WebSocket) with authoritative server architecture, QuadTree-based collision detection, FlatBuffers serialization (76% packet reduction vs JSON), behavior tree AI bots with A* pathfinding, and server-side anti-cheat via visibility culling @@ -41,7 +41,7 @@ Joined VNG as a Game Programming Fresher and progressed through Associate Softwa Sept 2021 – present -University thesis project — a 2D survival battle royale game server written in Java. Implemented a real-time multiplayer game loop with player synchronization, collision detection, match lifecycle management, and finite state machine-based autonomous bots. +University thesis — a 2D multiplayer Battle Royale game server in Java (Netty) over WebSocket. Designed an authoritative server with client-side prediction, QuadTree spatial indexing for efficient collision detection, and procedural map generation. Applied FlatBuffers serialization to reduce packet sizes by 76% compared to JSON. Implemented AI bots using behavior trees with A* pathfinding, and server-side anti-cheat through visibility culling to prevent ESP exploits. diff --git a/index.html b/index.html index 57ca5e1..1dd761f 100644 --- a/index.html +++ b/index.html @@ -57,7 +57,7 @@

GPA: 8.0/10 — Academic Excellence Scholarship; Five Good Student Award (university-wide recognition for academic performance, personal conduct, and community involvement)

  • -

    Thesis: Survival2D — Designed and implemented a high-performance multiplayer battle royale game server in Java; applied finite state machines to implement autonomous game bots

    +

    Thesis: Survival2D — Built a 2D multiplayer Battle Royale game server in Java (Netty/WebSocket) with authoritative server architecture, QuadTree-based collision detection, FlatBuffers serialization (76% packet reduction vs JSON), behavior tree AI bots with A* pathfinding, and server-side anti-cheat via visibility culling

  • Experience

    @@ -81,7 +81,7 @@

    Projects

    Survival 2D Server

    Sept 2021 – present

    -

    University thesis project — a 2D survival battle royale game server written in Java. Implemented a real-time multiplayer game loop with player synchronization, collision detection, match lifecycle management, and finite state machine-based autonomous bots.

    +

    University thesis — a 2D multiplayer Battle Royale game server in Java (Netty) over WebSocket. Designed an authoritative server with client-side prediction, QuadTree spatial indexing for efficient collision detection, and procedural map generation. Applied FlatBuffers serialization to reduce packet sizes by 76% compared to JSON. Implemented AI bots using behavior trees with A* pathfinding, and server-side anti-cheat through visibility culling to prevent ESP exploits.

    VN GeoGuessr

    A location-guessing game for Vietnam built with Leaflet.js, Mapillary, and OpenStreetMap, featuring street-level panoramic imagery and interactive map-based scoring.

    Store Scraper Bot

    diff --git a/miti99.pdf b/miti99.pdf index 9aa6a27..ef2344a 100644 --- a/miti99.pdf +++ b/miti99.pdf @@ -5,7 +5,7 @@ << /Type /Pages /Count 2 - /Kids [181 0 R 185 0 R] + /Kids [180 0 R 185 0 R] >> endobj @@ -79,18 +79,18 @@ endobj >> /K [11 0 R] /ParentTree << - /Nums [0 132 0 R 1 131 0 R 2 130 0 R 3 129 0 R 4 128 0 R 5 127 0 R 6 126 0 R 7 94 0 R 8 88 0 R 9 86 0 R 10 80 0 R 11 74 0 R 12 65 0 R 13 56 0 R 14 48 0 R 15 9 0 R 16 40 0 R 17 31 0 R 18 10 0 R] + /Nums [0 132 0 R 1 131 0 R 2 130 0 R 3 129 0 R 4 128 0 R 5 127 0 R 6 126 0 R 7 94 0 R 8 88 0 R 9 86 0 R 10 80 0 R 11 74 0 R 12 65 0 R 13 56 0 R 14 9 0 R 15 48 0 R 16 40 0 R 17 31 0 R 18 10 0 R] >> /ParentTreeNextKey 19 >> endobj 9 0 obj -[138 0 R 137 0 R 135 0 R 133 0 R 125 0 R 125 0 R 132 0 R 125 0 R 131 0 R 130 0 R 125 0 R 129 0 R 125 0 R 128 0 R 125 0 R 127 0 R 126 0 R 122 0 R 120 0 R 119 0 R 119 0 R 117 0 R 114 0 R 113 0 R 113 0 R 110 0 R 109 0 R 109 0 R 105 0 R 103 0 R 102 0 R 102 0 R 100 0 R 97 0 R 97 0 R 97 0 R 97 0 R 96 0 R 95 0 R 93 0 R 93 0 R 93 0 R 90 0 R 89 0 R 85 0 R 87 0 R 85 0 R 85 0 R 85 0 R 82 0 R 81 0 R 79 0 R 79 0 R 76 0 R 75 0 R 73 0 R 73 0 R 73 0 R 69 0 R 67 0 R 62 0 R 59 0 R 59 0 R 59 0 R 58 0 R 51 0 R 51 0 R 50 0 R 43 0 R 43 0 R] +[138 0 R 137 0 R 135 0 R 133 0 R 125 0 R 125 0 R 132 0 R 125 0 R 131 0 R 130 0 R 125 0 R 129 0 R 125 0 R 128 0 R 125 0 R 127 0 R 126 0 R 122 0 R 120 0 R 119 0 R 119 0 R 117 0 R 114 0 R 113 0 R 113 0 R 110 0 R 109 0 R 109 0 R 109 0 R 105 0 R 103 0 R 102 0 R 102 0 R 100 0 R 97 0 R 97 0 R 97 0 R 97 0 R 96 0 R 95 0 R 93 0 R 93 0 R 93 0 R 90 0 R 89 0 R 85 0 R 87 0 R 85 0 R 85 0 R 85 0 R 82 0 R 81 0 R 79 0 R 79 0 R 76 0 R 75 0 R 73 0 R 73 0 R 73 0 R 69 0 R 67 0 R 62 0 R 59 0 R 59 0 R 59 0 R 59 0 R 59 0 R 58 0 R 51 0 R 51 0 R] endobj 10 0 obj -[42 0 R 37 0 R 34 0 R 34 0 R 33 0 R 26 0 R 26 0 R 26 0 R 25 0 R 23 0 R 22 0 R 21 0 R 20 0 R 19 0 R 18 0 R 17 0 R 16 0 R 15 0 R 14 0 R 13 0 R 12 0 R] +[50 0 R 43 0 R 43 0 R 42 0 R 37 0 R 34 0 R 34 0 R 33 0 R 26 0 R 26 0 R 26 0 R 25 0 R 23 0 R 22 0 R 21 0 R 20 0 R 19 0 R 18 0 R 17 0 R 16 0 R 15 0 R 14 0 R 13 0 R 12 0 R] endobj 11 0 obj @@ -107,7 +107,7 @@ endobj /Type /StructElem /S /P /P 11 0 R - /K [13 0 R 20] + /K [13 0 R 23] /Pg 185 0 R >> endobj @@ -117,7 +117,7 @@ endobj /Type /StructElem /S /Strong /P 12 0 R - /K [19] + /K [22] /Pg 185 0 R >> endobj @@ -127,7 +127,7 @@ endobj /Type /StructElem /S /P /P 11 0 R - /K [15 0 R 18] + /K [15 0 R 21] /Pg 185 0 R >> endobj @@ -137,7 +137,7 @@ endobj /Type /StructElem /S /Strong /P 14 0 R - /K [17] + /K [20] /Pg 185 0 R >> endobj @@ -147,7 +147,7 @@ endobj /Type /StructElem /S /P /P 11 0 R - /K [17 0 R 16] + /K [17 0 R 19] /Pg 185 0 R >> endobj @@ -157,7 +157,7 @@ endobj /Type /StructElem /S /Strong /P 16 0 R - /K [15] + /K [18] /Pg 185 0 R >> endobj @@ -167,7 +167,7 @@ endobj /Type /StructElem /S /P /P 11 0 R - /K [19 0 R 14] + /K [19 0 R 17] /Pg 185 0 R >> endobj @@ -177,7 +177,7 @@ endobj /Type /StructElem /S /Strong /P 18 0 R - /K [13] + /K [16] /Pg 185 0 R >> endobj @@ -187,7 +187,7 @@ endobj /Type /StructElem /S /P /P 11 0 R - /K [21 0 R 12] + /K [21 0 R 15] /Pg 185 0 R >> endobj @@ -197,7 +197,7 @@ endobj /Type /StructElem /S /Strong /P 20 0 R - /K [11] + /K [14] /Pg 185 0 R >> endobj @@ -207,7 +207,7 @@ endobj /Type /StructElem /S /P /P 11 0 R - /K [23 0 R 10] + /K [23 0 R 13] /Pg 185 0 R >> endobj @@ -217,7 +217,7 @@ endobj /Type /StructElem /S /Strong /P 22 0 R - /K [9] + /K [12] /Pg 185 0 R >> endobj @@ -237,7 +237,7 @@ endobj /Type /StructElem /S /P /P 24 0 R - /K [8] + /K [11] /Pg 185 0 R >> endobj @@ -251,7 +251,7 @@ endobj /O /Layout /Placement /Block >>] - /K [5 6 7] + /K [8 9 10] /Pg 185 0 R >> endobj @@ -323,7 +323,7 @@ endobj /O /Layout /TextDecorationType /Underline >>] - /K [4] + /K [7] /Pg 185 0 R >> endobj @@ -337,7 +337,7 @@ endobj /O /Layout /Placement /Block >>] - /K [2 3] + /K [5 6] /Pg 185 0 R >> endobj @@ -365,7 +365,7 @@ endobj /Type /StructElem /S /P /P 36 0 R - /K [1] + /K [4] /Pg 185 0 R >> endobj @@ -419,7 +419,7 @@ endobj /O /Layout /TextDecorationType /Underline >>] - /K [0] + /K [3] /Pg 185 0 R >> endobj @@ -433,8 +433,8 @@ endobj /O /Layout /Placement /Block >>] - /K [68 69] - /Pg 181 0 R + /K [1 2] + /Pg 185 0 R >> endobj @@ -481,8 +481,8 @@ endobj /P 47 0 R /K [<< /Type /OBJR - /Pg 181 0 R - /Obj 180 0 R + /Pg 185 0 R + /Obj 182 0 R >> 49 0 R] >> endobj @@ -505,8 +505,8 @@ endobj /O /Layout /TextDecorationType /Underline >>] - /K [67] - /Pg 181 0 R + /K [0] + /Pg 185 0 R >> endobj @@ -519,8 +519,8 @@ endobj /O /Layout /Placement /Block >>] - /K [65 66] - /Pg 181 0 R + /K [68 69] + /Pg 180 0 R >> endobj @@ -567,7 +567,7 @@ endobj /P 55 0 R /K [<< /Type /OBJR - /Pg 181 0 R + /Pg 180 0 R /Obj 179 0 R >> 57 0 R] >> @@ -591,8 +591,8 @@ endobj /O /Layout /TextDecorationType /Underline >>] - /K [64] - /Pg 181 0 R + /K [67] + /Pg 180 0 R >> endobj @@ -605,8 +605,8 @@ endobj /O /Layout /Placement /Block >>] - /K [61 62 63] - /Pg 181 0 R + /K [62 63 64 65 66] + /Pg 180 0 R >> endobj @@ -633,8 +633,8 @@ endobj /Type /StructElem /S /P /P 61 0 R - /K [60] - /Pg 181 0 R + /K [61] + /Pg 180 0 R >> endobj @@ -663,7 +663,7 @@ endobj /P 64 0 R /K [<< /Type /OBJR - /Pg 181 0 R + /Pg 180 0 R /Obj 178 0 R >> 66 0 R] >> @@ -687,8 +687,8 @@ endobj /O /Layout /TextDecorationType /Underline >>] - /K [59] - /Pg 181 0 R + /K [60] + /Pg 180 0 R >> endobj @@ -707,8 +707,8 @@ endobj /Type /StructElem /S /P /P 68 0 R - /K [58] - /Pg 181 0 R + /K [59] + /Pg 180 0 R >> endobj @@ -748,8 +748,8 @@ endobj /Type /StructElem /S /P /P 72 0 R - /K [74 0 R 55 56 57] - /Pg 181 0 R + /K [74 0 R 56 57 58] + /Pg 180 0 R >> endobj @@ -760,7 +760,7 @@ endobj /P 73 0 R /K [<< /Type /OBJR - /Pg 181 0 R + /Pg 180 0 R /Obj 177 0 R >> 75 0 R] >> @@ -775,8 +775,8 @@ endobj /O /Layout /TextDecorationType /Underline >>] - /K [54] - /Pg 181 0 R + /K [55] + /Pg 180 0 R >> endobj @@ -785,8 +785,8 @@ endobj /Type /StructElem /S /Lbl /P 71 0 R - /K [53] - /Pg 181 0 R + /K [54] + /Pg 180 0 R >> endobj @@ -813,8 +813,8 @@ endobj /Type /StructElem /S /P /P 78 0 R - /K [80 0 R 51 52] - /Pg 181 0 R + /K [80 0 R 52 53] + /Pg 180 0 R >> endobj @@ -825,7 +825,7 @@ endobj /P 79 0 R /K [<< /Type /OBJR - /Pg 181 0 R + /Pg 180 0 R /Obj 176 0 R >> 81 0 R] >> @@ -840,8 +840,8 @@ endobj /O /Layout /TextDecorationType /Underline >>] - /K [50] - /Pg 181 0 R + /K [51] + /Pg 180 0 R >> endobj @@ -850,8 +850,8 @@ endobj /Type /StructElem /S /Lbl /P 77 0 R - /K [49] - /Pg 181 0 R + /K [50] + /Pg 180 0 R >> endobj @@ -878,8 +878,8 @@ endobj /Type /StructElem /S /P /P 84 0 R - /K [88 0 R 44 86 0 R 46 47 48] - /Pg 181 0 R + /K [88 0 R 45 86 0 R 47 48 49] + /Pg 180 0 R >> endobj @@ -890,7 +890,7 @@ endobj /P 85 0 R /K [<< /Type /OBJR - /Pg 181 0 R + /Pg 180 0 R /Obj 175 0 R >> 87 0 R] >> @@ -905,8 +905,8 @@ endobj /O /Layout /TextDecorationType /Underline >>] - /K [45] - /Pg 181 0 R + /K [46] + /Pg 180 0 R >> endobj @@ -917,7 +917,7 @@ endobj /P 85 0 R /K [<< /Type /OBJR - /Pg 181 0 R + /Pg 180 0 R /Obj 174 0 R >> 89 0 R] >> @@ -932,8 +932,8 @@ endobj /O /Layout /TextDecorationType /Underline >>] - /K [43] - /Pg 181 0 R + /K [44] + /Pg 180 0 R >> endobj @@ -942,8 +942,8 @@ endobj /Type /StructElem /S /Lbl /P 83 0 R - /K [42] - /Pg 181 0 R + /K [43] + /Pg 180 0 R >> endobj @@ -970,8 +970,8 @@ endobj /Type /StructElem /S /P /P 92 0 R - /K [94 0 R 39 40 41] - /Pg 181 0 R + /K [94 0 R 40 41 42] + /Pg 180 0 R >> endobj @@ -982,7 +982,7 @@ endobj /P 93 0 R /K [<< /Type /OBJR - /Pg 181 0 R + /Pg 180 0 R /Obj 173 0 R >> 95 0 R] >> @@ -997,8 +997,8 @@ endobj /O /Layout /TextDecorationType /Underline >>] - /K [38] - /Pg 181 0 R + /K [39] + /Pg 180 0 R >> endobj @@ -1007,8 +1007,8 @@ endobj /Type /StructElem /S /Lbl /P 91 0 R - /K [37] - /Pg 181 0 R + /K [38] + /Pg 180 0 R >> endobj @@ -1021,8 +1021,8 @@ endobj /O /Layout /Placement /Block >>] - /K [33 34 35 36] - /Pg 181 0 R + /K [34 35 36 37] + /Pg 180 0 R >> endobj @@ -1049,8 +1049,8 @@ endobj /Type /StructElem /S /P /P 99 0 R - /K [32] - /Pg 181 0 R + /K [33] + /Pg 180 0 R >> endobj @@ -1068,8 +1068,8 @@ endobj /Type /StructElem /S /P /P 101 0 R - /K [103 0 R 30 31] - /Pg 181 0 R + /K [103 0 R 31 32] + /Pg 180 0 R >> endobj @@ -1078,8 +1078,8 @@ endobj /Type /StructElem /S /Strong /P 102 0 R - /K [29] - /Pg 181 0 R + /K [30] + /Pg 180 0 R >> endobj @@ -1098,8 +1098,8 @@ endobj /Type /StructElem /S /P /P 104 0 R - /K [28] - /Pg 181 0 R + /K [29] + /Pg 180 0 R >> endobj @@ -1139,8 +1139,8 @@ endobj /Type /StructElem /S /P /P 108 0 R - /K [26 27] - /Pg 181 0 R + /K [26 27 28] + /Pg 180 0 R >> endobj @@ -1150,7 +1150,7 @@ endobj /S /Lbl /P 107 0 R /K [25] - /Pg 181 0 R + /Pg 180 0 R >> endobj @@ -1178,7 +1178,7 @@ endobj /S /P /P 112 0 R /K [23 24] - /Pg 181 0 R + /Pg 180 0 R >> endobj @@ -1188,7 +1188,7 @@ endobj /S /Lbl /P 111 0 R /K [22] - /Pg 181 0 R + /Pg 180 0 R >> endobj @@ -1216,7 +1216,7 @@ endobj /S /P /P 116 0 R /K [21] - /Pg 181 0 R + /Pg 180 0 R >> endobj @@ -1235,7 +1235,7 @@ endobj /S /P /P 118 0 R /K [120 0 R 19 20] - /Pg 181 0 R + /Pg 180 0 R >> endobj @@ -1245,7 +1245,7 @@ endobj /S /Strong /P 119 0 R /K [18] - /Pg 181 0 R + /Pg 180 0 R >> endobj @@ -1265,7 +1265,7 @@ endobj /S /P /P 121 0 R /K [17] - /Pg 181 0 R + /Pg 180 0 R >> endobj @@ -1293,7 +1293,7 @@ endobj /S /P /P 124 0 R /K [4 5 132 0 R 7 131 0 R 130 0 R 10 129 0 R 12 128 0 R 14 127 0 R 126 0 R] - /Pg 181 0 R + /Pg 180 0 R >> endobj @@ -1304,10 +1304,10 @@ endobj /P 125 0 R /K [16 << /Type /OBJR - /Pg 181 0 R + /Pg 180 0 R /Obj 172 0 R >>] - /Pg 181 0 R + /Pg 180 0 R >> endobj @@ -1318,10 +1318,10 @@ endobj /P 125 0 R /K [15 << /Type /OBJR - /Pg 181 0 R + /Pg 180 0 R /Obj 171 0 R >>] - /Pg 181 0 R + /Pg 180 0 R >> endobj @@ -1332,10 +1332,10 @@ endobj /P 125 0 R /K [13 << /Type /OBJR - /Pg 181 0 R + /Pg 180 0 R /Obj 170 0 R >>] - /Pg 181 0 R + /Pg 180 0 R >> endobj @@ -1346,10 +1346,10 @@ endobj /P 125 0 R /K [11 << /Type /OBJR - /Pg 181 0 R + /Pg 180 0 R /Obj 169 0 R >>] - /Pg 181 0 R + /Pg 180 0 R >> endobj @@ -1360,10 +1360,10 @@ endobj /P 125 0 R /K [9 << /Type /OBJR - /Pg 181 0 R + /Pg 180 0 R /Obj 168 0 R >>] - /Pg 181 0 R + /Pg 180 0 R >> endobj @@ -1374,10 +1374,10 @@ endobj /P 125 0 R /K [8 << /Type /OBJR - /Pg 181 0 R + /Pg 180 0 R /Obj 167 0 R >>] - /Pg 181 0 R + /Pg 180 0 R >> endobj @@ -1388,10 +1388,10 @@ endobj /P 125 0 R /K [6 << /Type /OBJR - /Pg 181 0 R + /Pg 180 0 R /Obj 166 0 R >>] - /Pg 181 0 R + /Pg 180 0 R >> endobj @@ -1405,7 +1405,7 @@ endobj /Placement /Block >>] /K [3] - /Pg 181 0 R + /Pg 180 0 R >> endobj @@ -1425,7 +1425,7 @@ endobj /S /P /P 134 0 R /K [2] - /Pg 181 0 R + /Pg 180 0 R >> endobj @@ -1448,7 +1448,7 @@ endobj /Placement /Block >>] /K [1] - /Pg 181 0 R + /Pg 180 0 R >> endobj @@ -1462,7 +1462,7 @@ endobj /Placement /Block >>] /K [0] - /Pg 181 0 R + /Pg 180 0 R >> endobj @@ -1599,7 +1599,7 @@ endobj << /Type /Font /Subtype /Type0 - /BaseFont /GQVION+XCharter-Roman-Identity-H + /BaseFont /QGOKFN+XCharter-Roman-Identity-H /Encoding /Identity-H /DescendantFonts [146 0 R] /ToUnicode 149 0 R @@ -1610,7 +1610,7 @@ endobj << /Type /Font /Subtype /CIDFontType0 - /BaseFont /GQVION+XCharter-Roman + /BaseFont /QGOKFN+XCharter-Roman /CIDSystemInfo << /Registry (Adobe) /Ordering (Identity) @@ -1618,7 +1618,7 @@ endobj >> /FontDescriptor 148 0 R /DW 0 - /W [0 0 500 1 1 597 2 2 280 3 3 491 4 4 568 5 5 278 6 6 713 7 7 523 8 8 569 9 9 495 10 10 866 11 11 564 12 12 556 13 13 539 14 14 382 15 15 321 16 16 334 17 17 771 18 18 507.00003 19 19 576 20 20 738 21 21 632 22 22 278 23 23 618 24 24 843 25 25 500 26 26 556 27 27 942 28 28 282 29 29 517 30 30 278 31 31 446 32 37 556 38 38 565 39 39 481 40 40 539 41 41 848 42 42 604 43 43 551 44 44 500 45 46 556 47 47 444 48 48 556 49 49 590 50 50 694 51 51 558 52 52 639 53 53 319 54 54 1000 55 55 503.00003 56 56 400 57 57 319 58 58 537 59 59 494 60 60 417 61 61 319 62 62 417 63 63 693 64 64 574 65 65 586 66 66 704 67 67 468 68 68 646 69 69 324 70 70 266 71 71 833 72 72 579 73 73 694 74 74 520 75 75 731 76 76 507.00003 77 77 731 78 78 833] + /W [0 0 500 1 1 597 2 2 280 3 3 491 4 4 568 5 5 278 6 6 713 7 7 523 8 8 569 9 9 495 10 10 866 11 11 564 12 12 556 13 13 539 14 14 382 15 15 321 16 16 334 17 17 771 18 18 507.00003 19 19 576 20 20 738 21 21 632 22 22 278 23 23 618 24 24 843 25 25 500 26 26 556 27 27 942 28 28 282 29 29 517 30 30 278 31 31 446 32 37 556 38 38 565 39 39 481 40 40 539 41 41 848 42 42 604 43 43 551 44 44 500 45 46 556 47 47 444 48 48 556 49 49 590 50 50 694 51 51 558 52 52 639 53 53 319 54 54 1000 55 55 503.00003 56 56 400 57 57 319 58 58 537 59 59 494 60 60 417 61 61 319 62 62 417 63 63 693 64 64 646 65 65 928 66 66 731 67 67 642 68 68 468 69 69 852 70 70 731 71 71 324 72 72 500 73 73 574 74 74 586 75 75 704 76 76 266 77 77 833 78 78 579 79 79 694 80 80 884 81 81 520 82 82 507.00003 83 83 833] >> endobj @@ -1628,15 +1628,15 @@ endobj /Filter /FlateDecode >> stream -x -6 +x>A + endstream endobj 148 0 obj << /Type /FontDescriptor - /FontName /GQVION+XCharter-Roman + /FontName /QGOKFN+XCharter-Roman /Flags 131076 /FontBBox [-78 -236 1000 764] /ItalicAngle 0 @@ -1651,7 +1651,7 @@ endobj 149 0 obj << - /Length 1710 + /Length 1796 /Type /CMap /WMode 0 >> @@ -1678,7 +1678,7 @@ end def 1 begincodespacerange <0000> endcodespacerange -78 beginbfchar +83 beginbfchar <0001> <0054> <0002> <0069> <0003> <0065> @@ -1742,21 +1742,26 @@ endcodespacerange <003D> <002D> <003E> <0029> <003F> <0044> -<0040> <00660069> -<0041> <005A> -<0042> <0026> -<0043> <007A> -<0044> <0052> -<0045> <0049> -<0046> <006A> -<0047> <007E> -<0048> <0066006C> -<0049> <0055> -<004A> <004C> -<004B> <004F> -<004C> <0103> -<004D> <0051> -<004E> <002B> +<0040> <0052> +<0041> <0057> +<0042> <0051> +<0043> <00660066> +<0044> <007A> +<0045> <0025> +<0046> <004F> +<0047> <0049> +<0048> <002AFE0E> +<0049> <00660069> +<004A> <005A> +<004B> <0026> +<004C> <006A> +<004D> <007E> +<004E> <0066006C> +<004F> <0055> +<0050> <006600660069> +<0051> <004C> +<0052> <0103> +<0053> <002B> endbfchar endcmap CMapName currentdict /CMap defineresource pop @@ -1769,31 +1774,32 @@ endobj 150 0 obj << - /Length 6196 + /Length 6556 /Filter /FlateDecode /Subtype /CIDFontType0C >> stream -xYyTSN 79E5suJ EDp` DPn8" "A@0 XkVEZݗwbo%{v{=9{_P(z[HWȔAnJݭ%0~8#rCOݯ5.1ܠ!]~(}x# bi w/KO/e_X䢠M!~>a&15q 5qS+7zyDG, r 4TzL51Y`1$++dTL7c&fMgWɪ&vnʠS0Y`k[IռDTC@(XF\t:25T gXnW$ -VDD#0L2nQ`AD]CxON"{QP,<&+ćo$$͒2\&w>g0˾ ~ݯ~E_'.m:?^@f!'kuflGF}kSp!ƌ< *xCDCd=5l0O_R#Q1?׎h#8~ kH߄SVѪw{fptj$ VTmkdEc*@ERd*8R2ԩ8Ku(=@2qlj?8dɐӧO88|_pT wO1GEJ P;&1/`.9Y!,"7J/g c-n";%p -Љ$:{<_+G/3h]ʄ,V:oRIgHj CЕj:t)wît m-%~3R<.>遨@L}0q{ @۲=RW+e˓bSbRR/R &P;~;F6ҎK g:HD8'Rzz .S]u#UEKW}:2$ҀzaRؼ}r(W=K!Z[[ᘾ:7pA1$-*mrNc}03&o -]"a6,qt2lˈE0Rrެ\X.&cp(5^a w5C㋝wRjaQUo;%,aʪNa[!#H49}_m>e_CMy%az#W7 |<n4WKX uu`~@rrY!S8HUPR#]ИOϜQcci6lHzx711t6h`tMujC<.̈mUTF *PGg1V$EXT |UFE]hսLU }*qFj~(eza/C3I8EG3q]A@h+qsE ㊣ȑ4Sڧ2 s,zUPsP;%T7ŴUҞC~Q~fQ {-O~!KTbXna oTy[,ƾ5cКE1RHԦLD>u]\y5N-=DwD8zOlcɅ@.n\u}xdeM9 ݈^rŹ\+'O1UA=Iܟ[[U" U#,%E4[ daoݰ(_/g)*ЙY?S:z*?PsT2qHjq*岛q=@JNco!2?aK5v&ԯm@$쏪'mp|MgŬvtЈeMjxvbbҹ'S-M39|fzЍ@G( @òg]ۻϠ @1%@M/;ƨ` 8 {3$%89xvH!c2wͰu*~>@VO+=)muO%5mjJ]{zdHrѾzKtB/zce0 -6)Y$qiӝU+]b:o {T 9_eOަ"uPBJGhG -镈W'q rYd  HOH#s$iҀ9}ɱt5%p2Oi@l\#,{gaA *X}KwNϊNo3O -ѝ /$ˎj<.)PG0ٞܧ;'4RPUGkI'QGkvrlwO#W㐿v"3#BȏiM$F^)x ~$A:)8nF/8}L a]KBۥ|?I'r[jH-H - lB_ݏNǿxfh2)p׈Uz}EJػgSR*OPBPdz E" 8Vv<`yy`\doR~#1 Ч -oU'BcL*/K[g`?NYGR-+f^d̈́t hԲƄbV߫H +yY{rt[},j2U=uem -#f?~t0R,>ӑ > 㛫,*+R+O* |||r7:b[[*~bafo¡ԉ+WHHyc n;AbA:7`\t0S 瞧RpPƝÛl.򸃓nYW9DZ~ir'y# \}A A [{3E:k fm孜cJwP;Mf_PoPllc8ʤMֹ{0G:Mx߈Z]\[4~R#z~wt]'S,/'z2 =]>Nz7t. $th cw48N4= -5.)ï~0n'*q$8"4ֆ0&G$CG$J^PG&<%LOq .-FS]e6Z+mAJל.g 'HA1:>Ȱ/\>^˼{q|&Eo~uc.2',//''/7,G) W*{^%ڈj]mrZ$i< -#DҾmN8HK.e[g*eC; M9ԑenUE)ȽTTeyu'_.&ܵ =/ -g$I_ιWHq5 {by1d&[p .ץ;=,]J$kr7] +T̃Kp9]CKCo..͍qavfyWBW*_}?^ R/ :A\% ,Hڎg?[YI7wސϊ ʨ8\g;*车uS|(Z9hho}g#>ju>zi7wߧg17[XN**,2ֲɡ3 Mih(ydqŶiAL =ԆژQF璚!6hCeZ*eǾ=ΜJ2˲gdx2jA o_CZqq4]\}k' ’7g\Fě8{ۋ_τ0/vR+S=Hv(Cq~0W!+/MR}2)tmRAӑ A6Xٛ1碐$O8zf ӄ9~1w +xYiTTǶ96܍q@ 1jAY@Ѹ1(ȤF@dPP@Q8\ѠF`[m[hݵ[ONQg==P(nKPGLh~ c@8X٧1#;F+WՎ +(O~x( biWsweOHIJ-A>^!s.42t 6tQ*{{F.  p74W24\g{00##(}6h Cc9Fqn46\t0\;E?3wLc#㹆k|ܼ]< ]x0tu p7 PW2ԅj@`@(}[.*MU95b X9wH OaOH҆q@  Lv@APC : oKBoa{"&+/$%5Mw \60``g|!󇈆 )rN:F1y赡]Ösv_f&K]l;SpA"5W/a>ll7lueZ}">+X/7' zM8ǯF + T[pֆjYV3c;Y,xİu8 @mPa|΂m {'cV3b"xH,JdLey^m=tԉOʓiG%^ǰ}M|dDP} +F:=qU{@p w2+ҰG ˻6Ny;\>r~FݽpHWҭuʞO/[Uh*SJd}hi) '*DF9iw۝vF `]'i=xUGd}"#mRA]M&QzUR# ?ɹxʩ'Ÿlqj&ؙ 򈭖Ԃ*azĖoqG fxwÞ<E`,$w_(?$D%oMbWŸ9tG ܀+yer+2=ٓ'R +9s |@%q[ z8k)w^ƭEOyuM!4a/~T,;+G-r8[TڜM;:UpS]=>ij?ڵuИwpJ✢EJsCs k +V"MJ{Pr.Cms 2ȖT(+o駀f'ןMn`xm" Pplk6#ac,{ g5ncK;k/~%P| =pQ R95v>COliseDHgrS)qGEntfŪm=D0>9|a9,Xo>>kB57'qu'kpl}OÝ hG>*ʸ.>w= tiIϒgׂ$Ksn:xsK~(|&A ' moξ 3:Ƀs {.{OAg"-Rђѯ|ܮjS679:M)ZNPt-lF#)t9&XءULծt&]}{~1dE2˫`KII~~* [!Z>tx.?:ÝFo2:E٥{lJ̌# %;23|y4T}tjO>&E4e7"RZi1AEE?h |LY#8etYaDw8{~~E؋=6 +VA'oϣB~BcG#kGɭ:W6+\Ea]f3Y-Z0[Ð7H/ohTF!p2|c*h44^Ep> }͢]Y {/|׺JUS9MKxLϒ}I"[0 kAOCX0de]'7D) v0p: +i]I>n`8b>#^]՞IIV^z^xW=JZa0h 4teJP`Y[J<ќT U7bw#QT뤭#S燁C}1TA/!qfsxU7t5+A^Dz*г Tm/61*Vȸv ר]BNDT0V4A-f~t#0R,"+|%|(;_YRRPPRVyxyo)))/Q)ѡS.M,Jœ(GQ:ƃ'OL'>S]ARU*q.;JgFTrz%Vqg2a3nqM:>[P1|s]NU8 (! 5 1wSl|rAita'=2 [dwR PUxфmO]^ S$deOuja`)ђ|)GӺW?_Y:X4RmFph9CiBtV#Y}pofImvLDJ?Qg+ Ԯ]:Nzt:. 'g$tT%cZP#Rn] I CX ԮP} @c, +!.\zN<xh"N+ oBsjɄm:`VpAO:x0:еөT,mq*,۞^w$e'eB\kօuyqUǿ(GNIozhkD͞bPp<#8/7Պ݋غOsԃʅe!?Ҝ +p.+ʩƤE!?G@3Ts \84:(v;m]0R|'SղƇ.Ѯ(βɷΑ Of.~.f~d3n^q}d74%l\M`TtN(@6,WHR>9pBNv&LV= 8t [ƭ`XvA4/kT)ֺ޸ABNJyƐiLPlVg 4_ ~D'(I{ m9"Tbnz-V8eoژ6I*gZr%ڠu˕آp:k45@t0ne(n0;6Zll0읷 M]ɉ*ﯮTVr)#=Y.Mo%)9݅jRuݒnpPdOk1r?r^9X6Ebᯡ~o_F ߁'_gif:^ 1_sY9I͠>xNtҀH:8:mLZ{]g>I|+Ѯs˝py8HJ<-^b\?I*a#cqK': ü B~D?Qm40£Qmq endstream endobj @@ -2001,23 +2007,23 @@ endstream endobj 161 0 obj -[181 0 R /XYZ 50.4 604.48724 0] +[180 0 R /XYZ 50.4 604.48724 0] endobj 162 0 obj -[181 0 R /XYZ 50.4 493.96262 0] +[180 0 R /XYZ 50.4 481.25262 0] endobj 163 0 obj -[181 0 R /XYZ 50.4 236.82489 0] +[180 0 R /XYZ 50.4 224.11487 0] endobj 164 0 obj -[185 0 R /XYZ 50.4 638.0158 0] +[185 0 R /XYZ 50.4 585.7126 0] endobj 165 0 obj -[181 0 R /XYZ 172.28976 751.6 0] +[180 0 R /XYZ 172.28976 751.6 0] endobj 166 0 obj @@ -2143,7 +2149,7 @@ endobj << /Type /Annot /Subtype /Link - /Rect [61.07 371.90125 115.11889 384.61127] + /Rect [61.07 359.19125 115.11889 371.90125] /Border [0 0 0] /A << /Type /Action @@ -2160,7 +2166,7 @@ endobj << /Type /Annot /Subtype /Link - /Rect [61.07 331.50354 84.91 344.21353] + /Rect [61.07 318.79355 84.91 331.50354] /Border [0 0 0] /A << /Type /Action @@ -2177,7 +2183,7 @@ endobj << /Type /Annot /Subtype /Link - /Rect [95.97111 331.50354 134.4611 344.21353] + /Rect [95.97111 318.79355 134.4611 331.50354] /Border [0 0 0] /A << /Type /Action @@ -2194,7 +2200,7 @@ endobj << /Type /Annot /Subtype /Link - /Rect [61.07 291.10583 93.12 303.81583] + /Rect [61.07 278.3958 93.12 291.10583] /Border [0 0 0] /A << /Type /Action @@ -2211,7 +2217,7 @@ endobj << /Type /Annot /Subtype /Link - /Rect [61.07 263.4181 112.31389 276.1281] + /Rect [61.07 250.70813 112.31389 263.4181] /Border [0 0 0] /A << /Type /Action @@ -2228,7 +2234,7 @@ endobj << /Type /Annot /Subtype /Link - /Rect [50.4 195.55896 136.07 208.26892] + /Rect [50.4 182.84894 136.07 195.55896] /Border [0 0 0] /A << /Type /Action @@ -2245,7 +2251,7 @@ endobj << /Type /Annot /Subtype /Link - /Rect [50.4 130.54572 116.4 143.25574] + /Rect [50.4 105.12573 116.4 117.83569] /Border [0 0 0] /A << /Type /Action @@ -2259,23 +2265,6 @@ endobj endobj 180 0 obj -<< - /Type /Annot - /Subtype /Link - /Rect [50.4 78.24249 131.63 90.952515] - /Border [0 0 0] - /A << - /Type /Action - /S /URI - /URI (https://github.com/tiennm99/store-scraper-bot) - >> - /F 4 - /StructParent 14 - /Contents (https://github.com/tiennm99/store-scraper-bot) ->> -endobj - -181 0 obj << /Type /Page /Resources << @@ -2293,50 +2282,67 @@ endobj >> >> /MediaBox [0 0 612 792] - /StructParents 15 + /StructParents 14 /Tabs /S /Parent 1 0 R - /Contents 182 0 R - /Annots [166 0 R 167 0 R 168 0 R 169 0 R 170 0 R 171 0 R 172 0 R 173 0 R 174 0 R 175 0 R 176 0 R 177 0 R 178 0 R 179 0 R 180 0 R] + /Contents 181 0 R + /Annots [166 0 R 167 0 R 168 0 R 169 0 R 170 0 R 171 0 R 172 0 R 173 0 R 174 0 R 175 0 R 176 0 R 177 0 R 178 0 R 179 0 R] >> endobj +181 0 obj +<< + /Length 4992 + /Filter /FlateDecode +>> +stream +x=۲qPd\ ~H)*rD'.-ʃ2$&9>.S3; `wfYzٳ;\}G遱ǯ_|~>ϟ^8A2;IfIwAp+dt"0쿿pA7wχ!䑝aWudJ,iO;}ӏowٳߤ~}%Ͽ+qxc`4FrV!u +g.8n׾ )*xdH}L2בfHޥP J#;9qMNs +NC`OZ 6 ep1g#m*$~jކ,A;x/s3g_r L^PbIM^a1RւK +i6ZٛLa0C ٢LzjcßO??>*y,# 4FÜ\(Fʛiie6ч4kݼ^ +UX~]"ؿ3Qos)Z(t+aT(>PZvBTfMN^ܽ"L!1sxĵ [ E + Uʨ&DRQ>H Vp`IhZULU I|#Mxp]_WRϟv0`?q~uxOB0\ +98Ǖ |H`0~Rڷw:g}fUJz{.*V:`,D0\j̥g\?۔V ;2k$&"['tp_󆔾1uPYσҡzue .esJ୔=1ԳtffJ)տ5(D XͭJ;8(C08A܆ُ8-6h2siӭCqi*En&Tµ!ImJ+q ϬjmG'pcVvtZ13{蟟._hHgJy,[Pva'H38 vá(LЮ -rQrrx2m dlTGGji29CemU(| |vU3j;p<`64A51$`.T@O"EFm2$E.I q݀ w3s d&ϛ$lI9-"7Z +jG )x0gGR VvHq0LY2Eǣ5|$hDn]<bU"z -wuOVTՏ%or+*@l띀-"hqk9o8 A.(遫6_ Rכ: 󪐵0, 1 + qk"$Uō=M \:BZ\!I"KaA-r >.=ph9^ d=lWq^FPON +U ȦWhALO~uOs.a ZZ(5 iPdx9q1Mf빗kⴽ9])o]*7:vƄ3B,[ 8(hb )˚ e*E4cV*Rƙq+!)xO@1xQl f6yF:zuF#,Оv.qu }Zd@ 5=e|bUG3 A|//za⛿O8$Vۄ-Rm0=םA<.TyZM9#L6^`24zTnҺ[ -w(X`xˣg7gIrWK,#Uh.ܐ蓖bضҰKtp6KYaB !|5Uo SԦL[)k@g{K(`Iنۭų؎cVtWjLv݈0m=`d4 %N6ai7S05jjva +:2S'4RxқīC|ls+Pw(}据d886YhNKNٙWTeE@Z!q )2<1Bw.A<“ǰ/I=gMyNXTk""l'~)OnttrqiH0u:t݌-FD s鶚Pmn@,+H$~mb)q5ܑDRdh5,H,9gX˚NtY"Br c|P7Kӱ98/s2JeVќS~GUhQ~6)MOyy,N {=jRi5K9x^/g(G#06(3r)C;F3h[}]z"@Z"W]"m–<"3cT؃[OY ܐߺ2ԿrUj1,&qWp B+T ܄6Y8^J?p9 +T]fU%y)Oɼ]2ҧ!t ` %DXmFiX@o/fZc !Ipn͸C``MTQx n[dK.B}ΈNYmnsT4sԎ{/(yO{vW%\4IJ &1&G3QPKZ@9SQBHI.d2rc +ã ,7j8eKt-Eˣ}ft%Q߆/M/2I_O |b= 7n7 Y +OLd)䅛*UQtf\N b.e%9ceok0">v4% yPWB +6Hӧ0\m7V)Ɇ+-7Ybr3_ +xEZ&WA4* e) G&uUjZ7 ..Je֪yW``bmIJN)|x9U}axӖ=G7j%U<4V;7zPXo9HHsuu&# wRhMuo۩{!C 51ip ^N!rB %E^[ţ +3[K\p/+\8x'|#b#R*q'$Y1<= +Fp K15"^F^VڴZ;K,MD?'MtZoH+zX+ +cPwi@M ³. +KHRL"J dKWLdX;TPY"j|h2k6:T*te92,dL&AkV*,(ǖvRDsJMD%Ɔ YS Z%f't} lndLvc1WFL˃ l#*d>c[5VaD'Z#V,5" Q"DEs13M9^ 7•S|sD,*5\Tj5Rn"f•7PN,}{UVSX|VD_]vSU>].xڂXI 谟k?,`렦  r[y,u73+V½Kx'tƶiߗOo{ׯ^ s=>;_͗tzKt;J\}VIy}1P4_Q|iE#F;qQ 0߸}Ԉ W#(V ];nxA.o{Z(vdW? +S0LGxؾCye5U1^CL,t)L[s*p]%p|Ѻ^-ǣG#CAp}zhu.ʋU$5ύ2h¼&KH8 qN,!ȫL>B +endstream +endobj + 182 0 obj << - /Length 4783 - /Filter /FlateDecode + /Type /Annot + /Subtype /Link + /Rect [50.4 731.89 131.63 744.6] + /Border [0 0 0] + /A << + /Type /Action + /S /URI + /URI (https://github.com/tiennm99/store-scraper-bot) + >> + /F 4 + /StructParent 15 + /Contents (https://github.com/tiennm99/store-scraper-bot) >> -stream -xْܶ}Y@[+ےNr$J>?E C"j8}~x=}z'^|~vxx{w'i+ws3gEÓ{3Ew~~́wonO.to-7?{cw~c'KO=> ϛo.ywK\bK?wo;|ׯ^@!0)6/dA;+SxY\RJSZsB1B5J":ijX.FJ")N/QsWE`B -u[S - xwN{?M d"cw yCu"(ɏIRM$4\.*[bQLxkmgM`A \ƋONPUhejwDw3d?.ݱ|$_} .TWg+y\? -"dwC6ob*Ssܤ+IKU#ǚ1Wǘ$LCạb2`W) -џ=u2 ^19םՊqHy--L &c3e57J!B`0i@wby}D4*~ux-Z(t+e%3~P( -e^4n`-; -FyfWbh+wSHsL+%C>0#v:r>Ujҳ t謴L7*_iap;[Be'd٪ZvYW ;"MҸ;nwWVTa+Mw?Nc7A3MeAe- RhZ?` 1d r.K\~s /𑖳;5Lbp ] &敆ͦ Ѧ:ztƆ~=79h ]W;ylݤB=IWU:*kՑMτr\%$F9eEJAI% -tW#g͏S;dTz>O97Jf3k 0ʻ\kpv'b&|B=%3,PS!;LrUpB;IcclB؄6`ݶW3 -;,w{ƕa\u/T!emPd2j3t_w:'xPTʼn^"?JEhڡy~(B<ݏDb 0y]Nia5[5!\Azuyգ H% ~)xEQd9͉{T -;Bq)qEO)JoOs0Ηo!Z 0t)v|P@h4aӫFdQӅOS -㢧 -MASü-FhiU̩n~9"'fAk-dS̛Zc3/p̊?ݽ50!v~ּ!dBוڤdHD -Ä>;C;', }UFI" "?"m–u99į HDz=S~#$1ϓk'@~.S [#<9 }h닭lZP,.—i,":2[+eI%i39nϽ9<̪lH`;9]%R.y90e,6IN|u-bY=[5'h&$)JdߒqaX)n]$NUovP3ϳ0cRcf:0rZd죹䍉\;KnwQE/せ{5j4f+»P󕥞xS"JH)d"z6e+EcQ:Y{b gG԰ vY'YK)ӈhѫ<ӡO̵'f$C3,gv6~M`R: ,.dwMf6OTN@2}iIεć9*: PCiWєL4Mء2 -#Hycl'/;() E7/Bdͤ$1s -EHW0-_Fwt}KYM͆&–%6-<+~L"M?Rc^f^<0lMe\ 2ƕ>KOoS8cz@L*SV\2^ ̏r'Dc(Y{`\TP^e2 -L* _:hg{,)Nd@!Tʻ5.c-lA{=`1D( G$r-b`.zT0[3t-ϴKWh KRɻ0&}6XxPZkjt`:tAE 1K1hL^`|;GQYGT`)|: \f@ofM* ↏Vccl QbטG֩*"$+QC/e9r/v7&oBb.3]BUH3ܑ!yY=1 iMؿZc̐5Ƥ9Y[+269K9lxOoIŚb7V3mDRbBFX!ذrF\ES_&Y# OH9oueKbiۑ{QSsυ,YWM>[s=3Z͔ N,;h&wppX]e#ֺ,2\ / 0M `*tK6C{q@)}]ed(Mτ|ARģ_Vro[jYjt ^Mc3=|Ml(ϕ6,^Eڊ}G3c]V VBϦ'_'rF371 e% -}7| -\lgԇ`|9"nS2+- -tOH~zi>iZ,Z<%&bҭgjp[Sw`RN7ů tA)RU qF 25h/Rv\nO6L]o̲y>qNHY4'>mW wϙ?s$ܵݰ8vPs{V;ЧE%Npa?1g2LC@wBYe(dl"JʅZ - Ȭ^Xu:k-3_PqtWo -jhG*\佯FwjQSDaJ~RZ+}JAW -endstream endobj 183 0 obj << /Type /Annot /Subtype /Link - /Rect [50.4 731.89 170.3 744.6] + /Rect [50.4 679.5868 170.3 692.29675] /Border [0 0 0] /A << /Type /Action @@ -2353,7 +2359,7 @@ endobj << /Type /Annot /Subtype /Link - /Rect [50.4 679.5868 177.11 692.29675] + /Rect [50.4 627.28357 177.11 639.9935] /Border [0 0 0] /A << /Type /Action @@ -2384,25 +2390,22 @@ endobj /Tabs /S /Parent 1 0 R /Contents 186 0 R - /Annots [183 0 R 184 0 R] + /Annots [182 0 R 183 0 R 184 0 R] >> endobj 186 0 obj << - /Length 1824 + /Length 2090 /Filter /FlateDecode >> stream -xZmo6 _! h;,֦)0$ߖ}h6 4 ےIuؗeK|HwˊOvWW_N+l#Y#a6usKr{W;`WU\r|-ZWakQEn׶fQ3\65S6*O㣢MT詻q,㿋WvuV^U?W'ß=\ڻ

    A{C*TktP_5>!}EGe[3{u$k(-1E4FA]3vMU7rS܉.P=5D6޼mLWSɚD=ΥW ,aCE 1@ z5lN0aB\Dt$Aj--G^k_>m/ ێ\?bSE ]ө)"#)8# 6! *;8,qYjOTm\Ul i^S{Q$̤E 57U•gyEk\tJ."zN.s&9r+:yS%IГIxR :15}4uķ+C2Az&Mz{qx)[\^&eCbA#Aic7/!jWLbmUR1P"`<bx]5 -f62G F6'UkfcKN4E^R{ MJSYfXU憩^X'="F*x,Jŕ>\"t -;~ aM P뒭ʂHs%">Ob U˸!S l40Kw M!t$ TJ|%ӋX\*qeuA@)IfrDڼcRJz>~ .l;]#ԌHsL6ASE.f5KAlH -ͥ,Z#b09n(D6큓@<3P ngq -er= ^aCRŸ/&jP%m?jf_R=vѺRMvR-Y@#5N~#EJ x*!}Ր>CHN=˯XmSa~Pm2L@<ʆ >+ش{X$USf0P>vqihqԥldU5e(Ckr)RP䘝Ӟs<гjL Hk+Z'ZDak!av -c/k֌K֧͡V+6_c|[衳4/LvUZNQ-:ʬ 8Rpn,NcZLڰKRiO Tigǯ҈}xv:k(!A7(f醸 K!J -;з_[aXjAO+ƃ43BW!`z` (P y( - la7)оj~9̜P>ȴp=L멿M!If@Ĝ{` 3s$_)\~?z|` +xZn6}WEXq.Yډq~ku[ 1ډ~!ȫKI^F3C]=?ɋ !o_6|{Or}ۼzEN^660Ȇͨ"TSs|fhd}sr0rm\ͯOocӓ(2y3%\ӓRdӹ7-ַJ{Mc}OL;ys\6o.N㟶}} '?r:a'5\}jTG"|lJCsƨ1 .tpN iυ,萯ɟi-1vT; eӆI$Y2IooAӰV@cL2 ,Ʒm |Xfq2~ŖsF=ro!:޸ mO8&fUl["b ^A[^%=m +/"yh UՖX&c$ߴę_a]jfI̬Z""ga:*؞&HT97Ð5b$hBOkܯ'USRJ +_0Gh%dj0i\x~@uPhmt2jjRnzW3,#nh4C!&:K{Yk{gal~m/ `:jXڷlc f^1- n0k޶; ({mDs"ʇ H2#@ɇcbĔ%[NUD~(e\ZSYu i=-@d;TgY` XzCHc8gQ(-ZK)LlC\ty`<(>C1+iS=HuGKu':,HF8i +786kw\Sɴӳ  4@S) 7_->r3l׀>iege^r;+ߚZ0= #LQCh5M{ƢN]ݬ8^ź"ϢrP xkCȅI-U)=սޯ$|;|@u&LscqDp-K2ǗHz:#o<mLU95z Y446-kRZSeA&I.q"ErNJ"pZm^kS ,Uf*| 4/CIk(=eXI-pFX>NE6*B_rN7ǡm|e"K=S!5&L&l4<4KgEKdGIyJĴD@V9Tʳq=)48s rE :*#/$Bzb80͉"GnOY ijbtpZIYDb%.Z:DKص̎ 0Lw Ϯdrb<<\{X,r(@9Fh8+\YHaC"eQp5#c9[ +xUnz{ߕ: ^(sၦ)VrΨjwX)Dc j y)ȏՙ Y, o?O^ǕFB7 %.{ #C RJS^VG&;HX:BAݗIxd1B +mVP"CuTW˦G|+s9<ʢiὋqnQ +8͆,m|g~_7LjǏqn6 endstream endobj @@ -4737,7 +4740,7 @@ endobj /Subtype /XML >> stream -Tien Nguyen Minh - CVTien Nguyen MinhTypst 0.14.2en2026-03-31T00:00:00Z2026-03-31T00:00:00Z2application/pdf68B+Z1AiIX3RhiT6w4A5AA==8oe3U4f+o3oDeoTZ97aacg==proof1.7 +Tien Nguyen Minh - CVTien Nguyen MinhTypst 0.14.2en2026-03-31T00:00:00Z2026-03-31T00:00:00Z2application/pdfODJOmGrISiW7Qccz04ZAHw==8oe3U4f+o3oDeoTZ97aacg==proof1.7 endstream endobj @@ -4771,194 +4774,194 @@ xref 0000000588 00000 n 0000000674 00000 n 0000001080 00000 n -0000001621 00000 n -0000001787 00000 n -0000002058 00000 n -0000002152 00000 n -0000002244 00000 n -0000002338 00000 n -0000002430 00000 n -0000002524 00000 n -0000002616 00000 n -0000002710 00000 n -0000002802 00000 n -0000002896 00000 n -0000002988 00000 n -0000003082 00000 n -0000003173 00000 n -0000003265 00000 n -0000003351 00000 n -0000003496 00000 n -0000003582 00000 n -0000003655 00000 n -0000003734 00000 n -0000003811 00000 n -0000003948 00000 n -0000004030 00000 n -0000004184 00000 n -0000004327 00000 n -0000004413 00000 n -0000004492 00000 n -0000004578 00000 n -0000004657 00000 n -0000004734 00000 n -0000004871 00000 n -0000004953 00000 n -0000005107 00000 n -0000005252 00000 n -0000005338 00000 n -0000005411 00000 n -0000005490 00000 n -0000005567 00000 n -0000005704 00000 n -0000005786 00000 n -0000005941 00000 n -0000006086 00000 n -0000006172 00000 n -0000006245 00000 n -0000006324 00000 n -0000006401 00000 n -0000006538 00000 n -0000006620 00000 n -0000006775 00000 n -0000006923 00000 n -0000007009 00000 n -0000007088 00000 n -0000007175 00000 n -0000007254 00000 n -0000007331 00000 n -0000007468 00000 n -0000007550 00000 n -0000007705 00000 n -0000007799 00000 n -0000007886 00000 n -0000008039 00000 n -0000008124 00000 n -0000008205 00000 n -0000008305 00000 n -0000008442 00000 n -0000008597 00000 n -0000008686 00000 n -0000008771 00000 n -0000008852 00000 n -0000008949 00000 n -0000009086 00000 n -0000009241 00000 n -0000009330 00000 n -0000009415 00000 n -0000009496 00000 n -0000009606 00000 n -0000009743 00000 n -0000009898 00000 n -0000010035 00000 n -0000010190 00000 n -0000010279 00000 n -0000010364 00000 n -0000010445 00000 n -0000010545 00000 n -0000010682 00000 n -0000010837 00000 n -0000010926 00000 n -0000011077 00000 n -0000011164 00000 n -0000011244 00000 n -0000011332 00000 n -0000011413 00000 n -0000011513 00000 n -0000011607 00000 n -0000011705 00000 n -0000011794 00000 n -0000011936 00000 n -0000012025 00000 n -0000012109 00000 n -0000012201 00000 n -0000012292 00000 n -0000012381 00000 n -0000012465 00000 n -0000012557 00000 n -0000012648 00000 n -0000012737 00000 n -0000012819 00000 n -0000012908 00000 n -0000012990 00000 n -0000013090 00000 n -0000013184 00000 n -0000013281 00000 n -0000013370 00000 n -0000013459 00000 n -0000013557 00000 n -0000013714 00000 n -0000013863 00000 n -0000014012 00000 n -0000014161 00000 n -0000014310 00000 n -0000014458 00000 n -0000014606 00000 n -0000014754 00000 n -0000014897 00000 n -0000015002 00000 n -0000015090 00000 n -0000015172 00000 n -0000015317 00000 n -0000015457 00000 n -0000015634 00000 n -0000015994 00000 n -0000016083 00000 n -0000016333 00000 n -0000017244 00000 n -0000019284 00000 n -0000019460 00000 n -0000020418 00000 n -0000020509 00000 n -0000020757 00000 n -0000022549 00000 n -0000028851 00000 n -0000029026 00000 n -0000029706 00000 n -0000029796 00000 n -0000030043 00000 n -0000031403 00000 n -0000035895 00000 n -0000035933 00000 n -0000035971 00000 n -0000036394 00000 n -0000036845 00000 n -0000036895 00000 n -0000036945 00000 n -0000036995 00000 n -0000037044 00000 n -0000037095 00000 n -0000037366 00000 n -0000037627 00000 n -0000037884 00000 n -0000038163 00000 n -0000038435 00000 n -0000038693 00000 n -0000038979 00000 n -0000039306 00000 n -0000039637 00000 n -0000039982 00000 n -0000040324 00000 n -0000040650 00000 n -0000040934 00000 n -0000041223 00000 n -0000041524 00000 n -0000042009 00000 n -0000046872 00000 n -0000047130 00000 n -0000047395 00000 n -0000047717 00000 n -0000049621 00000 n -0000560829 00000 n -0000561008 00000 n -0000562261 00000 n +0000001622 00000 n +0000001809 00000 n +0000002080 00000 n +0000002174 00000 n +0000002266 00000 n +0000002360 00000 n +0000002452 00000 n +0000002546 00000 n +0000002638 00000 n +0000002732 00000 n +0000002824 00000 n +0000002918 00000 n +0000003010 00000 n +0000003104 00000 n +0000003196 00000 n +0000003288 00000 n +0000003375 00000 n +0000003521 00000 n +0000003607 00000 n +0000003680 00000 n +0000003759 00000 n +0000003836 00000 n +0000003973 00000 n +0000004055 00000 n +0000004209 00000 n +0000004352 00000 n +0000004438 00000 n +0000004517 00000 n +0000004603 00000 n +0000004682 00000 n +0000004759 00000 n +0000004896 00000 n +0000004978 00000 n +0000005132 00000 n +0000005275 00000 n +0000005361 00000 n +0000005434 00000 n +0000005513 00000 n +0000005590 00000 n +0000005727 00000 n +0000005809 00000 n +0000005963 00000 n +0000006108 00000 n +0000006194 00000 n +0000006267 00000 n +0000006346 00000 n +0000006423 00000 n +0000006560 00000 n +0000006642 00000 n +0000006797 00000 n +0000006951 00000 n +0000007037 00000 n +0000007116 00000 n +0000007203 00000 n +0000007282 00000 n +0000007359 00000 n +0000007496 00000 n +0000007578 00000 n +0000007733 00000 n +0000007827 00000 n +0000007914 00000 n +0000008067 00000 n +0000008152 00000 n +0000008233 00000 n +0000008333 00000 n +0000008470 00000 n +0000008625 00000 n +0000008714 00000 n +0000008799 00000 n +0000008880 00000 n +0000008977 00000 n +0000009114 00000 n +0000009269 00000 n +0000009358 00000 n +0000009443 00000 n +0000009524 00000 n +0000009634 00000 n +0000009771 00000 n +0000009926 00000 n +0000010063 00000 n +0000010218 00000 n +0000010307 00000 n +0000010392 00000 n +0000010473 00000 n +0000010573 00000 n +0000010710 00000 n +0000010865 00000 n +0000010954 00000 n +0000011105 00000 n +0000011192 00000 n +0000011272 00000 n +0000011360 00000 n +0000011441 00000 n +0000011541 00000 n +0000011635 00000 n +0000011733 00000 n +0000011822 00000 n +0000011964 00000 n +0000012053 00000 n +0000012137 00000 n +0000012232 00000 n +0000012323 00000 n +0000012412 00000 n +0000012496 00000 n +0000012588 00000 n +0000012679 00000 n +0000012768 00000 n +0000012850 00000 n +0000012939 00000 n +0000013021 00000 n +0000013121 00000 n +0000013215 00000 n +0000013312 00000 n +0000013401 00000 n +0000013490 00000 n +0000013588 00000 n +0000013745 00000 n +0000013894 00000 n +0000014043 00000 n +0000014192 00000 n +0000014341 00000 n +0000014489 00000 n +0000014637 00000 n +0000014785 00000 n +0000014928 00000 n +0000015033 00000 n +0000015121 00000 n +0000015203 00000 n +0000015348 00000 n +0000015488 00000 n +0000015665 00000 n +0000016025 00000 n +0000016114 00000 n +0000016364 00000 n +0000017275 00000 n +0000019315 00000 n +0000019491 00000 n +0000020499 00000 n +0000020590 00000 n +0000020838 00000 n +0000022716 00000 n +0000029378 00000 n +0000029553 00000 n +0000030233 00000 n +0000030323 00000 n +0000030570 00000 n +0000031930 00000 n +0000036422 00000 n +0000036460 00000 n +0000036498 00000 n +0000036921 00000 n +0000037372 00000 n +0000037422 00000 n +0000037472 00000 n +0000037522 00000 n +0000037571 00000 n +0000037622 00000 n +0000037893 00000 n +0000038154 00000 n +0000038411 00000 n +0000038690 00000 n +0000038962 00000 n +0000039220 00000 n +0000039506 00000 n +0000039833 00000 n +0000040164 00000 n +0000040509 00000 n +0000040850 00000 n +0000041177 00000 n +0000041461 00000 n +0000041750 00000 n +0000042227 00000 n +0000047299 00000 n +0000047594 00000 n +0000047858 00000 n +0000048123 00000 n +0000048453 00000 n +0000050623 00000 n +0000561831 00000 n +0000562010 00000 n +0000563263 00000 n trailer << /Size 191 /Root 190 0 R /Info 188 0 R - /ID [(8oe3U4f+o3oDeoTZ97aacg==) (68B+Z1AiIX3RhiT6w4A5AA==)] + /ID [(8oe3U4f+o3oDeoTZ97aacg==) (ODJOmGrISiW7Qccz04ZAHw==)] >> startxref -562498 +563500 %%EOF \ No newline at end of file diff --git a/miti99.typ b/miti99.typ index 4eb045a..9d689d6 100644 --- a/miti99.typ +++ b/miti99.typ @@ -125,7 +125,7 @@ main-column-second-row: [ - GPA: 8.0\/10 — Academic Excellence Scholarship; Five Good Student Award (university-wide recognition for academic performance, personal conduct, and community involvement) - - Thesis: Survival2D — Designed and implemented a high-performance multiplayer battle royale game server in Java; applied finite state machines to implement autonomous game bots + - Thesis: Survival2D — Built a 2D multiplayer Battle Royale game server in Java (Netty\/WebSocket) with authoritative server architecture, QuadTree-based collision detection, FlatBuffers serialization (76\% packet reduction vs JSON), behavior tree AI bots with A#sym.ast.basic pathfinding, and server-side anti-cheat via visibility culling ], ) @@ -167,7 +167,7 @@ ], main-column-second-row: [ - #summary[University thesis project — a 2D survival battle royale game server written in Java. Implemented a real-time multiplayer game loop with player synchronization, collision detection, match lifecycle management, and finite state machine-based autonomous bots.] + #summary[University thesis — a 2D multiplayer Battle Royale game server in Java (Netty) over WebSocket. Designed an authoritative server with client-side prediction, QuadTree spatial indexing for efficient collision detection, and procedural map generation. Applied FlatBuffers serialization to reduce packet sizes by 76\% compared to JSON. Implemented AI bots using behavior trees with A#sym.ast.basic pathfinding, and server-side anti-cheat through visibility culling to prevent ESP exploits.] ], )