acecalisto3 commited on
Commit
1b70f99
·
verified ·
1 Parent(s): e26085f

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +243 -111
app.py CHANGED
@@ -10,6 +10,7 @@ import random
10
  import nltk
11
  from nltk.tokenize import sent_tokenize
12
  import PyPDF2
 
13
  from joblib import dump, load
14
 
15
  from transformers import AutoTokenizer, AutoModelForCausalLM
@@ -29,7 +30,11 @@ logging.basicConfig(
29
  )
30
  logger = logging.getLogger(__name__)
31
 
32
- nltk.download('punkt')
 
 
 
 
33
 
34
  class Config:
35
  MODEL_NAME = "microsoft/DialoGPT-medium"
@@ -38,8 +43,11 @@ class Config:
38
  REQUEST_TIMEOUT = 10
39
  MAX_DEPTH = 1
40
  SIMILARITY_THRESHOLD = 0.5
41
- # INDEXED_URLS = {"https://calendar.google.com/calendar/ical/south.spencer%40sspencer.k12.in.us/public/basic.ics", "https://calendar.google.com/calendar/ical/hs.spencer%40sspencer.k12.in.us/public/basic.ics", "https://calendar.google.com/calendar/ical/le.spencer%40sspencer.k12.in.us/public/basic.ics", "https://calendar.google.com/calendar/ical/re.spencer%40sspencer.k12.in.us/public/basic.ics", "https://drive.google.com/file/d/1gNTdzCSRG8h-GY21zMsmuyQEv_16eiq_/view?usp=drive_link", "https://drive.google.com/file/d/1wxQKZuI77-3cPceJ8mKbREQDSgEKXCFX/view?usp=drive_link", "https://drive.google.com/file/d/1vDix0a2shD7U46IVOprqnNWMzC7D01vl/view?usp=drive_link", "https://drive.google.com/file/d/1ShYZl7re5cdNoORTCJ-6vVp2rKM9xa_d/view?usp=drive_link", "https://drive.google.com/file/d/1Gky4kY1KGt6P4wxx7OPatmfSc_VZGx6v/view?usp=drive_link", "https://drive.google.com/file/d/1aoK7oA45je8Tkl7v2dEnYseHXFaisJ-W/view?usp=drive_link", "https://drive.google.com/file/d/1NG3ak3YqLtNEbYwT5U52tnmgyTK_6NMo/view?usp=drive_link", "https://drive.google.com/file/d/1FH8r8JeOEXhS7BUIWKM-FyrLN8Nu3oHm/view?usp=drive_link", "https://drive.google.com/file/d/1YZ4dushzkbmQPI98rnUJqfmDQJoVfvpn/view?usp=drive_link", "https://drive.google.com/file/d/1PJj23lAF45N0sBg6PknJLHl-OYsF0QWU/view?usp=drive_link", "https://drive.google.com/file/d/1DeJ3fTy61I7n86ofmrZUg6jzAqOsg-w-/view?usp=drive_link", "https://drive.google.com/file/d/1aunHxceGluv4l9cWWEKadWzNwnpEeFX2/view?usp=drive_link", "https://drive.google.com/file/d/1FBhLaXc1To-I21eqhVMzneDnmsZSfi3r/view?usp=drive_link", "https://drive.google.com/file/d/1Kvjpiq9Y_zUviyxYN9SERJ8dHxco_br8/view?usp=drive_link", "https://drive.google.com/file/d/18YN4uX8o108FpYqiWHbOqynnMT-w7fIe/view?usp=drive_link", "https://drive.google.com/file/d/1ju5O6J_3w5ffjWJcIfzQmTa2JFiK4rG_/view?usp=drive_link", "https://drive.google.com/file/d/1awbYPSnxSIx2Gb08DSJgUyx-dGDkgmHH/view?usp=drive_link", "https://drive.google.com/file/d/1ciKJS5HuDO2KR9wG9pqcf39mFa5gVw3A/view?usp=drive_link", "https://drive.google.com/file/d/1mt8qWowJnzd9O-RPX39cWg_w8wn6IDCn/view?usp=drive_link", "https://drive.google.com/file/d/1GFc7aKVLGFl23OxMiIGZZczx_D48C-hL/view?usp=drive_link", "https://drive.google.com/file/d/1_1mQn2ika8MypPfUbW5o3jMjZXaqFcXj/view?usp=drive_link", "https://drive.google.com/file/d/1UOyDdf5PPEguLdA7pr8N6biUtre0WrAc/view?usp=drive_link", "https://drive.google.com/file/d/1uvBJs6EUwYfGEoK-9YMmG65gEm1XKXOB/view?usp=drive_link", "https://drive.google.com/file/d/1t00WkdwoVR5GjPOLG0mP41uhraG8U7Yv/view?usp=drive_link", "https://drive.google.com/file/d/15s_b_79QvnMC3vz2phJawILiPL3S8A9U/view?usp=drive_link", "https://drive.google.com/file/d/1nClSEZE42T6hsDQ_mn7Y_BOkoFoV8I56/view?usp=drive_link", "https://drive.google.com/file/d/1JBM0pQvCWoFhr1ALWDmgrFNeYqSm7UTI/view?usp=drive_link", "https://drive.google.com/file/d/14eCiz8u12VnMrBDD7T-ow0re6eCF5Pzk/view?usp=drive_link", "https://drive.google.com/file/d/1ZbyVweQrbRc2pFRkRz_kF7Q6LYkGu3MV/view?usp=drive_link", "https://drive.google.com/file/d/167rFgOViNzNMhbXmlf9cHgc6efomzHab/view?usp=drive_link", "https://drive.google.com/file/d/1uR7RyujbSkLz4k8zQzzbrf-JKOYG5-Bh/view?usp=drive_link", "https://drive.google.com/file/d/1GdNQ8j7S1kOpxmIQ4rPKn3antkkXd2OT/view?usp=drive_link", "https://drive.google.com/file/d/146nf7ZFYX4ypMGRHTd2Z1WJtFWnp8_YL/view?usp=drive_link", "https://drive.google.com/file/d/10rKZhq2RV9QEYEV3h1NgeWngHu_NGDeC/view?usp=drive_link", "https://drive.google.com/file/d/1Oh4QpMMApcm-9GKsqd-hALJyGGedsaIK/view?usp=drive_link", "https://drive.google.com/file/d/1Aol_v7n-9XHZBGHyM_NGbkf25m07T3Wl/view?usp=drive_link", "https://drive.google.com/file/d/169HBRiDEqRrnbzSBgaLT3npcc7vRBu4G/view?usp=drive_link", "https://drive.google.com/file/d/1UL6e35UtcYxSh8aonFOFmSeBw6_jonZl/view?usp=drive_link", "https://drive.google.com/file/d/1U1mx9vFLyUx-1Ej1gSto76urTTHwoUAN/view?usp=drive_link", "https://drive.google.com/file/d/12e_FI7UZJl3BjJSsQ5RbMsQq6jw3V7ZC/view?usp=drive_link", "https://drive.google.com/file/d/1ov9J5PXyedvDD1XRO44DczdUsSzrzaS8/view?usp=drive_link", "https://drive.google.com/file/d/1MFX4dw6575Wp_uNSw3OdS4ebi2-ebW9m/view?usp=drive_link", "https://drive.google.com/file/d/1hck2cZzzsWlPbdv85JmqKbSQov_vtAfe/view?usp=drive_link", "https://drive.google.com/file/d/1mk27rjFx8Yvzlps9TZ1GYMFm4EKMJnMZ/view?usp=drive_link", "https://drive.google.com/file/d/1LSiDDpLfvcDlX8edksvb28TP7LQP0ceg/view?usp=drive_link", "https://drive.google.com/file/d/1ztlp8vwK6PFiVz5mHxWtxifNt2oBds-Q/view?usp=drive_link", "https://drive.google.com/file/d/1Qzyea19kdfqyyFD_msR5BO_AnAtble0y/view?usp=drive_link", "https://drive.google.com/file/d/142kP6zJKLQ9E9U-KJLms82jXrfrB7lsN/view?usp=drive_link", "https://drive.google.com/file/d/1_0uMOJaEpE0hrzD6umPivf7ZrJ_B7Awc/view?usp=drive_link", "https://drive.google.com/file/d/1T4i9bNUoQ6uqPH8EB8rNceprl7h4DA2L/view?usp=drive_link", "https://drive.google.com/file/d/1t-vyEMvEtFqe0h-Xssuquo7-4kOTNGvs/view?usp=drive_link", "https://drive.google.com/file/d/1LSuqga7MgIojRBlDzv788JbhqD1GmdxV/view?usp=drive_link", "https://drive.google.com/file/d/1gCvqWEvCQ8oBWBw4uphYX7zTGrYNNWXF/view?usp=drive_link", "https://drive.google.com/file/d/1IxNuk1jav-TjVvwYerB0lZAKNyHS0dUk/view?usp=drive_link", "https://drive.google.com/file/d/11cdVMs1YRw3MXmd04JLiuusx8nMJLjSH/view?usp=drive_link", "https://drive.google.com/file/d/19yLDRf4wzapEP0PLOShGPLJhrnt9TvJu/view?usp=drive_link", "https://drive.google.com/file/d/1xgh11TYt1e5pYE5N9mUARjg-D5Y0m7qg/view?usp=drive_link", "https://drive.google.com/file/d/1OXmntrhZ_2z-KftU07R-SHCcUKMPWBRQ/view?usp=drive_link", "https://drive.google.com/file/d/1aLs_gQjX1SHfIsREg7KdG2JbYioSfXpe/view?usp=drive_link", "https://drive.google.com/file/d/1V42lLs7xo65WhGKYm0WzYdGvDPIF_Bkb/view?usp=drive_link", "https://drive.google.com/file/d/1mxj-eGId_xZEXteJoFxVLZg701dqfJ7K/view?usp=drive_link", "https://drive.google.com/file/d/1yKHDHcSUDrtDsOIrsJsVlEKkxySsUcgj/view?usp=drive_link", "https://drive.google.com/file/d/10yTEBlfCRZ7f8A_Tx3RkYXdFvXfcK1xz/view?usp=drive_link", "https://drive.google.com/file/d/1LZcSI-QnAcw0aqlADHi7Rcs4RgqQfMjX/view?usp=drive_link", "https://drive.google.com/file/d/1z2AZQvDCZVu7GLK0mXJq55ObWsxfWMgs/view?usp=drive_link", "https://drive.google.com/file/d/1q35GQFTd6dFWj1vZDmYHEjyw5r171f0q/view?usp=drive_link", "https://drive.google.com/file/d/1Yjbun_-9Z2akhK0Izv0vrK7frX5uiVxe/view?usp=drive_link", "https://drive.google.com/file/d/1qkEJKU-73AoevioFk5roTPRADE1hiJyO/view?usp=drive_link", "https://drive.google.com/file/d/1XqbFbyoD1hts8Sq5vBLA40u4csHDOTM2/view?usp=drive_link", "https://drive.google.com/file/d/1jc52u2dLRGJkllLzGWlHnYuAGCoYwHvX/view?usp=drive_link", "https://drive.google.com/file/d/1DvSAe52A9GUu85dpJizJSw7bh3cXphW5/view?usp=drive_link", "https://drive.google.com/file/d/1y7MqM_SDLrzZbaSKZLBDhaiWqSynG50v/view?usp=drive_link", "https://drive.google.com/file/d/1PxtA_l0Ntcz0ZZy1ut8a1GHIisAscJBS/view?usp=drive_link", "https://drive.google.com/file/d/1mAcHJ0t4uQtzdwo6ibbyCsojjLM8FqHK/view?usp=drive_link", "https://drive.google.com/file/d/1xcdOoTVesjIpyU5Mmb_zD6WxHzxG7h_e/view?usp=drive_link", "https://drive.google.com/file/d/11OEmiHOgQBBmTSsfs2yv7Dwbx4H1gArE/view?usp=drive_link", "https://drive.google.com/file/d/1VKkofGegA3vOUoaS0NMP8EgwaNLkdvQa/view?usp=drive_link", "https://drive.google.com/file/d/18JnQZhelSIbUZ2uJRGW5ZOQ4RPYxLIr6/view?usp=drive_link", "https://drive.google.com/file/d/1UBEA00RATwDKptG5mp7idhotLlv0Ehm9/view?usp=drive_link", "https://drive.google.com/file/d/1hL80abacnLCWSO1nTEav0rTeY515TCoS/view?usp=drive_link", "https://drive.google.com/file/d/1HVHckJUJOYyOm43_TCJP7N3IFx7noVyz/view?usp=drive_link", "https://drive.google.com/file/d/1f1s-x50XKgkpcF5-5_PJGgI35JEzwjYF/view?usp=drive_link", "https://drive.google.com/file/d/1Nb8W9SHyBmfOQ9Y9_PFuz8V6oJpDTku3/view?usp=drive_link", "https://drive.google.com/file/d/1oUxu9zJ8EspLY9w84e1X9TztX4VNGuin/view?usp=drive_link", "https://drive.google.com/file/d/1s-zM8dukhe9S0-eu8A86I6LzcDWvFoJs/view?usp=drive_link", "https://drive.google.com/file/d/1QBU_t9cmNq8tKXh8XRMf1zVh5c0W9Eiu/view?usp=drive_link", "https://drive.google.com/file/d/1OpedffzPAVD3H1ij6aXKskhyLELAsceP/view?usp=drive_link", "https://drive.google.com/file/d/1VMn6Afhs02Ed_dW0XK-WNDGxX1NGc0t-/view?usp=drive_link", "https://drive.google.com/file/d/1eCv9OzrJnea28oBOV_qOwmuzvfWMmrSr/view?usp=drive_link", "https://drive.google.com/file/d/1ZBEhYvuhXnMHdTcVkyMgo7x8944ot7d3/view?usp=drive_link", "https://drive.google.com/file/d/1X5ukI9Qc4QfNaGr1O-eMzpwNnqTGSZnj/view?usp=drive_link", "https://drive.google.com/file/d/1BzxqDN2QmR15lf9d0dpXxEPeJ-jpiI4b/view?usp=drive_link", "https://drive.google.com/file/d/1BVkrM1kG86Ltq9m3XjAXIn7qtiIRS1HG/view?usp=drive_link", "https://drive.google.com/file/d/1tUiW__swsp4cSk21oZPTXKQg4NQqeq3S/view?usp=drive_link", "https://drive.google.com/file/d/1s_8xwkDOdmU6KnFIe0VnuBxLNHfF3Xe5/view?usp=drive_link", "https://drive.google.com/file/d/1OqqA6_cbYTcYJet1BEli27dB1EM8I4Cd/view?usp=drive_link", "https://drive.google.com/file/d/1fPnac9zSXAY9tIBG4YVsoXbTetrNICQe/view?usp=drive_link", "https://drive.google.com/file/d/1l2Ry3bJz7bGVXb8G2q0-Jr5OXE-l_Ym1/view?usp=drive_link", "https://drive.google.com/file/d/1f1ofvoKlX0Mpw0o2HBLm17oUo8Xaz-Tg/view?usp=drive_link", "https://drive.google.com/file/d/1bOB9Jt0Ep44ujY1uxh7i4vOH8jofgoBZ/view?usp=drive_link", "https://drive.google.com/file/d/1j7nsBCOr6MaTLAG0wClra_d9yXPoDQkU/view?usp=drive_link", "https://drive.google.com/file/d/1jhLwkXDif2hd74huSaRotVkvtdSH5-z0/view?usp=drive_link", "https://drive.google.com/file/d/1pmkHlFRDOZUe1OWv3YxnUk_ff77MhRFl/view?usp=drive_link", "https://drive.google.com/file/d/1jqToolNY0ifi3G6NBB39glgALUbQm3pv/view?usp=drive_link", "https://drive.google.com/file/d/1jIPONsKKAExCEfJkgoJYjC3w40EAe7d8/view?usp=drive_link", "https://drive.google.com/file/d/1189eS4KD83hXEjyX3geAEAQkbNkjDMD_/view?usp=drive_link", "https://drive.google.com/file/d/1Rk9RSfCXdbxN6Nn0kFJ6O08zWyOHSGA4/view?usp=drive_link", "https://drive.google.com/file/d/1BXNfM3dHD4sda8Z-lRSBGYHPZTZLiG26/view?usp=drive_link", "https://drive.google.com/file/d/1IW_CeflQTNjOIjytJ5-gVlJWbZk7ZIaN/view?usp=drive_link", "https://drive.google.com/file/d/1rxHGeFl1KgPL_6gLQDxmfdsBZqg9a4QV/view?usp=drive_link", "https://drive.google.com/file/d/1AwmXzNsNpe0qezhB7QbN9xOBdVcztRvn/view?usp=drive_link", "https://drive.google.com/file/d/1VyaSHUxwceZEqa_i2-MT63J9KF2L8VS3/view?usp=drive_link", "https://drive.google.com/file/d/1vK-bqDQ60hXzDjjXLAu_P1IAcvgRBf6g/view?usp=drive_link", "https://drive.google.com/file/d/1hiLQhXS0QJ-C61rb39Xo5pWf1kzpSrae/view?usp=drive_link", "https://drive.google.com/file/d/1CYja6-FL2LFRgjPeWCxY3PGO0tJR6PPA/view?usp=drive_link", "https://drive.google.com/file/d/1GRCIbV-NnvqmmvKglqI9arKQPp5sFM6_/view?usp=drive_link", "https://drive.google.com/file/d/1l6kx0wC4cvGmxRZ5W-AxRusF8geDk1yu/view?usp=drive_link", "https://drive.google.com/file/d/1b7_GkMcbNDjstiD8uBVq8egV52fJhZ91/view?usp=drive_link", "https://drive.google.com/file/d/1d56Ec-37accWw88a3PskQ3OqPntQQ0l0/view?usp=drive_link", "https://drive.google.com/file/d/11DIA9vh8MzFcJHvImXv8OuWP9q_Vem2b/view?usp=drive_link", "https://drive.google.com/file/d/112vn1b6dkq3GNVK32Qz3m5K59yHDlTID/view?usp=drive_link", "https://drive.google.com/file/d/1iWyGZoEUoHdM_4aYz0VTQX2Xk2Ya2eX_/view?usp=drive_link", "https://drive.google.com/file/d/1hRTPKoAWbNCFRd1fCELn_msQjbDL9Eix/view?usp=drive_link", "https://drive.google.com/file/d/1Ag1jv3CNSYOWr_dXxa2OtYG9bTpZs2BO/view?usp=drive_link", "https://drive.google.com/file/d/1VwZSiVyzzuptaNfgsUyHHETjuRqnG1ie/view?usp=drive_link", "https://drive.google.com/file/d/1IVWyQncV_-rOfkpoek9hitrlM2Kj7NrK/view?usp=drive_link", "https://drive.google.com/file/d/1_5gj8EbKzgNSJsOzGs_hv9fhpB8L-uNL/view?usp=drive_link", "https://drive.google.com/file/d/1zkZI-3Jp0p2UzruxIAKnRNZpthBQpokD/view?usp=drive_link", "https://drive.google.com/file/d/1oadonMtvXFb26CgK7SOvplzeviNY9itX/view?usp=drive_link", "https://drive.google.com/file/d/1L6CosuCoABXZyki2XPcjko6nY8BbUnsV/view?usp=drive_link", "https://drive.google.com/file/d/1UlVs22XeL8Kw6OzqYgFUNRW7J75E__mQ/view?usp=drive_link", "https://drive.google.com/file/d/1BZADq3P3dYrE3U9s3xHP1DTrZKGodXRQ/view?usp=drive_link", "https://drive.google.com/file/d/1wMly7a_w2IQmOYEo6-ddctYc5SAVbbbc/view?usp=drive_link", "https://drive.google.com/file/d/1JxuincHH79SJrG12ce6iZCoY7r0AG-zL/view?usp=drive_link", "https://drive.google.com/file/d/1IO2ENlNJkZtWCRt4UWZT85V29bDGL_m-/view?usp=drive_link", "https://drive.google.com/file/d/1Ph60H1JcsTQujeTeGwkj836tnqckjV5m/view?usp=drive_link", "https://drive.google.com/file/d/1UNLut1x6_kZf8ZbE8uWnmfNFzh1mkq0U/view?usp=drive_link", "https://drive.google.com/file/d/1IZpe_vlg1KbiDv_vwyCPdSC2TSpAxh3P/view?usp=drive_link", "https://drive.google.com/file/d/1O-lgr1AN9RlcZjMQS1jp-rXfdf7Ed-UU/view?usp=drive_link", "https://drive.google.com/file/d/1dmgr5K0XzOO5C43P6r16dvjz4qBkgEEK/view?usp=drive_link", "https://drive.google.com/file/d/1hWARs3wQnLE2YIobhpp1Xc1hoI2IYRN9/view?usp=drive_link", "https://drive.google.com/file/d/169VF86oxIjGpoTWrqnETXzoD5agHQRp4/view?usp=drive_link", "https://drive.google.com/file/d/1TgDrR5vGeG1Q8wYL6insSc8Dv8B0JJs-/view?usp=drive_link", "https://drive.google.com/file/d/1hY0v57gVUdfFo329DR9AFYpQuwLBBvyL/view?usp=drive_link", "https://drive.google.com/file/d/1M7H8Ni_gt_tz5QLL_WiHy19jGRWmdENj/view?usp=drive_link", "https://drive.google.com/file/d/1HRZxPQ066JLkplsZoM5tEn7F8S8zN_2e/view?usp=drive_link", "https://drive.google.com/file/d/1Eo-Zu7DGv1smiTbahTjkmeuSRkMLvANA/view?usp=drive_link", "https://drive.google.com/file/d/1SBDEXtzIwRTzAMSprM3_tOfGLLTFN7Ye/view?usp=drive_link", "https://drive.google.com/file/d/1IqFYSNeFV0l3Lv3lnZgUrB6OsKGkfEBm/view?usp=drive_link", "https://drive.google.com/file/d/1hHBnyqFu7DAz0CVhzWib_MjpqqNk5WZ1/view?usp=drive_link", "https://drive.google.com/file/d/1zGBHK0dDWNvSBEXwH_jtqEWSYj_P3ixa/view?usp=drive_link", "https://drive.google.com/file/d/1xz-4oSS6wbIM3rFXDsPRVFqs4zgtTVQ3/view?usp=drive_link", "https://drive.google.com/file/d/1oQjoZuETmaP2yvKSwpTwxbjGMxi5i_V5/view?usp=drive_link", "https://drive.google.com/file/d/1rd7je1LWi2Rc4KyFBGMfogb0CqodWIRL/view?usp=drive_link", "https://drive.google.com/file/d/1UXVIOF_yOlFSrN-zCNBs2J07Q3cIgs22/view?usp=drive_link", "https://drive.google.com/file/d/1aud7OsJD_VgcjR4tl-0NTsdByhOXcYYl/view?usp=drive_link", "https://drive.google.com/file/d/1gIkxwItUR37rqJgZu6u-D55hod1QkumS/view?usp=drive_link", "https://drive.google.com/file/d/1oPZmRoy27ByKyyYEvBQ2YfZGJ3edDlN2/view?usp=drive_link", "https://drive.google.com/file/d/1KCtwS-bcIL98ZoetZTS4m4csM9DTuyhq/view?usp=drive_link", "https://drive.google.com/file/d/1N12sUN1PBc2DnXydCd_o1LjJpUphdnqU/view?usp=drive_link", "https://drive.google.com/file/d/17cNEoZiNCYoURA3b4Pzq78PIXTsoDtxc/view?usp=drive_link", "https://drive.google.com/file/d/1qslE0JGtznx-pvkSTaPfwCxPD84oQNfz/view?usp=drive_link", "https://drive.google.com/file/d/1mzBFkep7GBqI-rfaPGemK6elrZRNW7m2/view?usp=drive_link", "https://drive.google.com/file/d/15mJpLzoRCTSSz9iRBq6JPwFrLCgNwqEz/view?usp=drive_link", "https://drive.google.com/file/d/1RE92vh9UgQS7PKIq4wHQGnE3sWOX8cE2/view?usp=drive_link", "https://drive.google.com/file/d/1h9a6bLZdtmiXk7yPmmI2rUpEO2VgTVvL/view?usp=drive_link", "https://drive.google.com/file/d/1IQuCps5-pITTD_vFHTMdCZoezluEfxcR/view?usp=drive_link", "https://drive.google.com/file/d/1A7_UEv9J53TSHjcrWMHQNB9jsagKVkRX/view?usp=drive_link", "https://drive.google.com/file/d/1kdXV0J7shf5WjlI7Mt_-DE2ip1Z_wYhF/view?usp=drive_link", "https://drive.google.com/file/d/1B1UX-w7Ojbx-e11SKlG46gbfaKDsHCyT/view?usp=drive_link", "https://drive.google.com/file/d/1qr3ZWvuyuUrxIm3WKvqsTD4YpxEokM7w/view?usp=drive_link", "https://drive.google.com/file/d/1DuIeunbj6W4a-ee0LnGJYuwO7M46XjUZ/view?usp=drive_link", "https://drive.google.com/file/d/1CjezA-zsak5lu7Btxo61HkkLKGMSF72v/view?usp=drive_link", "https://drive.google.com/file/d/1uqK02_naxpCo948DMp0dVZv3TZ4bs31A/view?usp=drive_link", "https://drive.google.com/file/d/1ghwf8m2X6pshvwsZVH0pTUNWePWBnvip/view?usp=drive_link", "https://drive.google.com/file/d/1keYR-IAXq9PYDTrHkp_BukSeHEzyn-oK/view?usp=drive_link", "https://drive.google.com/file/d/15fk8p5HQ07uusd7YcspfipMIMlEvhuQk/view?usp=drive_link", "https://drive.google.com/file/d/12g0J4OO1fTG_n8_i9VcOpJGyYqnPuqZY/view?usp=drive_link", "https://drive.google.com/file/d/18IsrwezCN0SfJ6iWqjGvzYnATs2ytLAu/view?usp=drive_link", "https://drive.google.com/file/d/1g0m_bKXHUGv1bJEmXmCZ89OnNQex5hmQ/view?usp=drive_link", "https://drive.google.com/file/d/1Q5qkM5KHc3smlBF4b-C1M0LL1mlltMcU/view?usp=drive_link", "https://drive.google.com/file/d/1BVstKY7rCSN-gvsidCNc-e9c0NzXH3yN/view?usp=drive_link", "https://drive.google.com/file/d/1EWEsnBa35F0k2_amfXc5VY7ky6VNAzPG/view?usp=drive_link", "https://drive.google.com/file/d/15Yj2mPbGFBuiFqxuX9KLT7U2MikyuVKn/view?usp=drive_link", "https://drive.google.com/file/d/1BPl4XMvqYuA7N7q008XsshJetj2quk2Q/view?usp=drive_link", "https://drive.google.com/file/d/1cZnPsQyS_RbnDymdaNfB1kyA3VlHuKUo/view?usp=drive_link", "https://drive.google.com/file/d/1FEqcABToTL0ZQoQpB0rtnT3blx3HI9hN/view?usp=drive_link", "https://drive.google.com/file/d/1nblVUiZF6g9R5ZU-qof8ERViRWZfKsyZ/view?usp=drive_link", "https://drive.google.com/file/d/1ej14G6a3cdSNzbjc96IFGGeJwLojAsab/view?usp=drive_link", "https://drive.google.com/file/d/1qOW6dZfmsYiz3A8TFUHeJ-xeUODSK_ZQ/view?usp=drive_link", "https://drive.google.com/file/d/197pz7gmKtuQ8cc7EINjlJes5iGnwooGf/view?usp=drive_link", "https://drive.google.com/file/d/1PNWK_AM-XtrOdHiQTb3LdXrIO9sMg_YP/view?usp=drive_link", "https://drive.google.com/file/d/1gNa9Wm1yXINLOIkGFw6LGetgFL_2kL-F/view?usp=drive_link", "https://drive.google.com/file/d/12lwVb_hYd4RH6azzVCt_np-2nNQhdfzS/view?usp=drive_link", "https://drive.google.com/file/d/11nxk8D2I55NPwu1_UTCnmKJ1atu__kug/view?usp=drive_link", "https://drive.google.com/file/d/1geXEsVtMPS5YevYtT3jt2cAjhNjQ52LC/view?usp=drive_link", "https://drive.google.com/file/d/1IZzX6Hxpx2PCGP_FBrsng8Nl-pPC7ldY/view?usp=drive_link", "https://drive.google.com/file/d/1hCAme9PrM5bsFJW8Gt4BbW8XgR84Jfiw/view?usp=drive_link", "https://drive.google.com/file/d/16U-KkN0XVUxvxpEQUT1qaZZrk4-2kv8p/view?usp=drive_link", "https://drive.google.com/file/d/1AlEM3aZCdRKr-CwA_NqXr6x2uyFN6SDO/view?usp=drive_link", "https://drive.google.com/file/d/1O_oNsWwxT7GmaZzEXXQ_UZgiTwD9Ckp0/view?usp=drive_link", "https://drive.google.com/file/d/1RgETErHkP1qEZnFhm14a5ROZD1LwTtQ-/view?usp=drive_link", "https://drive.google.com/file/d/1hBT9WBQrEyJr8TpMHndDTJXZmZVpgFxm/view?usp=drive_link", "https://drive.google.com/file/d/1nkkEt6F2GlNozy9MMxZOMdPNXe1BgO8X/view?usp=drive_link", "https://drive.google.com/file/d/1CXWbaxxIrVT0fHDlRStWoJxouWdSttf-/view?usp=drive_link", "https://drive.google.com/file/d/1Vv0ZWB8MbYSo-uFgLHiqwEqn1kUvC1Br/view?usp=drive_link", "https://drive.google.com/file/d/1HdQCwpDyfBx5QhmgiqC-CboH2SdGsoCv/view?usp=drive_link", "https://drive.google.com/file/d/1agxdZShCFGULCL4U7fNhQuXnK3zREDAI/view?usp=drive_link", "https://drive.google.com/file/d/1442L6uMT9ylpPs2C--dmR_ko8wLMJwZc/view?usp=drive_link", "https://drive.google.com/file/d/1Ic5K11CSy0-_gvqNv0qCJq_NFet7--9I/view?usp=drive_link", "https://drive.google.com/file/d/1Cb-LpyeFmjyalDz5BPaTI9A6ZfO-XEjN/view?usp=drive_link", "https://drive.google.com/file/d/1929Eo134JgwNHjPM9y1kqgs5f2R4P3Po/view?usp=drive_link", "https://drive.google.com/file/d/1KI0rgqmhECtlev6z2DKRRFeYvp0z4sn7/view?usp=drive_link", "https://drive.google.com/file/d/1NxwBOct24nFbwl2_5rLXv6oqtr7Og99I/view?usp=drive_link", "https://drive.google.com/file/d/1lrPQIK4k8M5iH9G4UfB2AsC_47AThhID/view?usp=drive_link", "https://drive.google.com/file/d/1s8xX7KN2OuhDUIcbidnES_5sl58N54ss/view?usp=drive_link", "https://drive.google.com/file/d/1b_Hwb3dxR-S-4iCAv8X1lG305pubhT7D/view?usp=drive_link", "https://drive.google.com/file/d/1vZ3U-cZY5pqKypHnIAfj5DpciN65nuIg/view?usp=drive_link", "https://drive.google.com/file/d/1PDN7_Jd6-jk4cFqqDbn1EHnhctmdvXty/view?usp=drive_link", "https://drive.google.com/file/d/1E1V35w4nHLijvB7CE-FhRJe5FmUNi8ra/view?usp=drive_link", "https://drive.google.com/file/d/1RVFHercH2erHC2qFGOopRuKihtBIQmg7/view?usp=drive_link", "https://drive.google.com/file/d/1_ZqIw-7D7eZz3kAkUyhWgZsyVMhUpESJ/view?usp=drive_link", "https://drive.google.com/file/d/17BiPlp_5GhKj4ZMqtd6Gk4-lec0ueOCd/view?usp=drive_link", "https://drive.google.com/file/d/14cvo3K1FT64lmnSwplWEpue9QEbN3uNW/view?usp=drive_link", "https://drive.google.com/file/d/1c7xvCrdYlFa7TYEcfDsF8lxnTd3peb5u/view?usp=drive_link", "https://drive.google.com/file/d/1bxl_t9C-SHkR-7UanK4C84-xwWoEdlZ8/view?usp=drive_link", "https://drive.google.com/file/d/1_DBCnQqJ-T7jS-cLiTatwT3f7KCYQLxg/view?usp=drive_link", "https://drive.google.com/file/d/14mE65Bete1r85buqOuHDv-jXgFWxiwvb/view?usp=drive_link", "https://drive.google.com/file/d/1Ljd2zliG5oHZ-SJ3rTtNFHUOuwYCnLHC/view?usp=drive_link", "https://drive.google.com/file/d/1x7FTY1wUVdalLR5vfPSkJZy-h5yVdHiU/view?usp=drive_link", "https://drive.google.com/file/d/1KYs9Sgchi5I0KBbsT-uttj_2Z9M0SokC/view?usp=drive_link", "https://drive.google.com/file/d/1NyUxWhgwZA0fSoihDkYd-Ft7GHTn8siw/view?usp=drive_link", "https://drive.google.com/file/d/1zcxuSoa6UhSi3zDc6lTbYbyuCl3zD21L/view?usp=drive_link", "https://drive.google.com/file/d/1GG3zccd6ggj5u7viykPM33dFMN6iRbFM/view?usp=drive_link", "https://drive.google.com/file/d/1Y2sPyCetJFlBrjKJml1BqOactRP7kqn6/view?usp=drive_link", "https://drive.google.com/file/d/1fRZv4jbT5i9vLPCLRc5mmfzbS87IArkD/view?usp=drive_link", "https://drive.google.com/file/d/148ExCpM2NURVryAyexopagSvtrr72rce/view?usp=drive_link", "https://drive.google.com/file/d/1r58b7Vm7yiZGqvkTCUZ9bdl5nQyp0MAz/view?usp=drive_link", "https://drive.google.com/file/d/1pBD6ILHHLJ1078tmV_78HoY4o76ze73P/view?usp=drive_link", "https://drive.google.com/file/d/1T7Pl6CE8W7LntUtDdM5BceQh9A-y0H8z/view?usp=drive_link", "https://drive.google.com/file/d/1js3syP7gpcYV2g68lp8txcFb4LkTymcu/view?usp=drive_link", "https://drive.google.com/file/d/1bL6fu36cuklapV7UKNmvnGX_vONTdaDh/view?usp=drive_link", "https://drive.google.com/file/d/17FialEwjWtd4_y-09JVsY_e0RFlAB0Mg/view?usp=drive_link", "https://drive.google.com/file/d/14bFHwzQGs5W0srWMXWmTwqvgkk_x3_Dx/view?usp=drive_link", "https://drive.google.com/file/d/1AUqVhjpShGCjFuB4-XHcPtBY6ZEbSx_V/view?usp=drive_link", "https://drive.google.com/file/d/1ZZJzErEmm9Y5FBaOafh8lIRufcfLlraN/view?usp=drive_link", "https://drive.google.com/file/d/1sGsapDQ_Nw-yOEKK-i5KjNRrSO8cirMb/view?usp=drive_link", "https://drive.google.com/file/d/1Mfp7SjyqKE5Z02Z8yg_3T5Tr8z3lyA19/view?usp=drive_link", "https://drive.google.com/file/d/1Fts-V4wRDeuUH8S4xDbwa5qip3JxL6lz/view?usp=drive_link", "https://drive.google.com/file/d/1t0IQl11w4myNr1h_20iVQePZKbdaC_y4/view?usp=drive_link", "https://drive.google.com/file/d/17oDFopvbJ7pYSQj6z2mm16fpzbiEvOGd/view?usp=drive_link", "https://drive.google.com/file/d/1crsNKWeYD4kSscbB8ZQd_9uHGhDu5eS9/view?usp=drive_link", "https://drive.google.com/file/d/1AA-tbaOy_ajmq1zKwQBaSZnCuOz34p-f/view?usp=drive_link", "https://drive.google.com/file/d/1Bef7xaRPWB7idW2VriBi5Pqwi88Y9vd9/view?usp=drive_link", "https://drive.google.com/file/d/1Iwc9UJdp2xfRBQBdksnCyCoufhSBGF_L/view?usp=drive_link", "https://drive.google.com/file/d/1Ky7oC_vEdfD8BiFfSpDRsxwR4-38pkY2/view?usp=drive_link", "https://drive.google.com/file/d/1Dj3y4BfeFKfRL2v2T6EBnsYR5nKqsysj/view?usp=drive_link", "https://drive.google.com/file/d/10euyk7WvOhCwXY8wZFe4Jj0oqHTi7PPP/view?usp=drive_link", "https://drive.google.com/file/d/1Ky8U3kpD4rjgGLZYhGNov6Sqys7_IkG3/view?usp=drive_link", "https://drive.google.com/file/d/1Bnlj6DY0zv3fmu9jxPqxrpE9aG-Yapkx/view?usp=drive_link", "https://drive.google.com/file/d/1vMMy282pvbb_FT5ifca84vVXvVQVdnx5/view?usp=drive_link", "https://drive.google.com/file/d/1Z7l_M5f8lVWF0MiZq9Sc6P5cpocHPs6O/view?usp=drive_link", "https://drive.google.com/file/d/1BvrmsacYCxJbI6pieajDq648sBM6x_8o/view?usp=drive_link", "https://drive.google.com/file/d/1rCNZwXfc_Lo9yC-_C2ymNCWuFdqwSylR/view?usp=drive_link", "https://drive.google.com/file/d/1-4aqTJiUf0Y8_1S5M69mdV_9ICD-YXgE/view?usp=drive_link", "https://drive.google.com/file/d/1Me11-RwFhevlP2CmscGMCbtCUXkq3EWO/view?usp=drive_link", "https://drive.google.com/file/d/1x1HpjBUbOYpVh2296pVKKddoCSvBYRmd/view?usp=drive_link", "https://drive.google.com/file/d/1t42CJPpdWS6B7n3b3yiZUJNl14ZcAOT3/view?usp=drive_link", "https://drive.google.com/file/d/1M0Z5CL338MIWUIsF71YeSK_aoVyNcCQj/view?usp=drive_link", "https://drive.google.com/file/d/1_i0DalURKz2qGhUI4x1QL_B_vAXYEijG/view?usp=drive_link", "https://drive.google.com/file/d/1Ue0-LSdDvjpDg2dzS4GXYAPafo-5n0N0/view?usp=drive_link", "https://drive.google.com/file/d/1T77sH-_WKFL2wVAufxHNth3qPH7erbQF/view?usp=drive_link", "https://drive.google.com/file/d/1EmC7xOoj5FrsLVgNXF4Y3DhJDilkfb7Z/view?usp=drive_link", "https://drive.google.com/file/d/1kD7i0EtZJh5Qg7HQrxxxA0e8SC7abm47/view?usp=drive_link", "https://drive.google.com/file/d/1LtIOuqxxNkmf5JnHbr7MeiNmfNs_ULXo/view?usp=drive_link", "https://drive.google.com/file/d/11X-T4QnTawOQXWS0NznRgYrTKooEQ6Pf/view?usp=drive_link", "https://drive.google.com/file/d/1XNAXDKyx93XYixMJl_Tc2JcZ6QwWqnRZ/view?usp=drive_link", "https://drive.google.com/file/d/1VpGKt4_kcRCoJdlStZqfMfU4YrkRCF29/view?usp=drive_link", "https://drive.google.com/file/d/1wdZU12eD5YqITEP0i7THTT239SIYq_xR/view?usp=drive_link", "https://drive.google.com/file/d/1mFTmRpiAM5B-LbFM9gS9lycc751GMQUL/view?usp=drive_link", "https://drive.google.com/file/d/1hp7LXVc82jKNOxWz7RA8YLX71MYukacr/view?usp=drive_link", "https://drive.google.com/file/d/1QDWra8jYp--LNBkhAUA9iMACgktRBqz4/view?usp=drive_link", "https://drive.google.com/file/d/1US_YJlCH7rt0aFQCX24-5XLdpGteL0UX/view?usp=drive_link", "https://drive.google.com/file/d/1GrtrjSjWrtcDKhu8aBbGEUUw0LVWTIJy/view?usp=drive_link", "https://drive.google.com/file/d/1y4Ogg3BRUIqU67gWAhnQjOfxepjAN2FI/view?usp=drive_link", "https://drive.google.com/file/d/1AZT_RcZaOfkkWQQR8IfIICprGQUqro5N/view?usp=drive_link", "https://drive.google.com/file/d/1Lgh9nu1s0iMJysXed9Z-Dbt3eG3Bvlu0/view?usp=drive_link", "https://drive.google.com/file/d/1h7ft8gbf4CyCPHJc-0FQ9yeYeLDjQOF1/view?usp=drive_link", "https://drive.google.com/file/d/1jqggJ3gkDVcV4F5JX-E8eGKzVToT2nRH/view?usp=drive_link", "https://drive.google.com/file/d/1kNdZtb9TAziQ3DXTluoCOlgrRMs1cp4c/view?usp=drive_link", "https://drive.google.com/file/d/1LlTUTmYLUXksIF_tfogjXfbFmRJfgaZs/view?usp=drive_link", "https://drive.google.com/file/d/1mxtDeIYMRv9_IzWIJrHxzTadDlkJaQFI/view?usp=drive_link", "https://drive.google.com/file/d/1c2LggHQeq_205CCZA8N4fOTffUb1SQ7i/view?usp=drive_link", "https://drive.google.com/file/d/16Z8uJ2SXCaf0MNL9PMJ4oVldFcv1cLwa/view?usp=drive_link", "https://drive.google.com/file/d/1eRmIFuxg0LWnk3lzzwCO1xZgxLApCLna/view?usp=drive_link", "https://drive.google.com/file/d/1UGOJJjHzRVi350iE-8Llv_j4S-HXfCM7/view?usp=drive_link", "https://drive.google.com/file/d/1KjhEnseQVGpmf8G9mLhSEkAK8k_Q88sx/view?usp=drive_link", "https://drive.google.com/file/d/1vbRAZgGUHM6Q1IbddMOxrRENWb0wjjYV/view?usp=drive_link", "https://drive.google.com/file/d/11wSrybzqac_NIsPnH1L-7mS370CxxBw0/view?usp=drive_link", "https://drive.google.com/file/d/1-CZZ6cFUZGw494b0rU7d8HU8GBnoiNNg/view?usp=drive_link", "https://drive.google.com/file/d/1OzyW0EkSxptIbZkT0EC3rASFV5QrnRjN/view?usp=drive_link", "https://drive.google.com/file/d/12kDJ6VMvvI6Sy3Tr5pchQh4LQqQnk9dX/view?usp=drive_link", "https://drive.google.com/file/d/110DG70VHsSEA7yhrXJ8wL439nlsU9cV5/view?usp=drive_link", "https://drive.google.com/file/d/10iheQHkqYqgpZJWMZItH9rsuZzXQR0RA/view?usp=drive_link", "https://drive.google.com/file/d/17X2zyEFlujAmkebAUuNiHI-l_K2t9jZW/view?usp=drive_link", "https://drive.google.com/file/d/1nuZgmEdqjAuGN9CJzd3vkGumSF-RrwQS/view?usp=drive_link", "https://drive.google.com/file/d/1GmdPkiVv7YfwZao_uw6B2DJb3fuAzEIy/view?usp=drive_link", "https://drive.google.com/file/d/1-5z0UEDmpAeReaGxN9kRrxm5KSjoIeSD/view?usp=drive_link", "https://drive.google.com/file/d/1zHzrcfNl6vDfjElu8wiTMd2CBpYsLaUj/view?usp=drive_link", "https://drive.google.com/file/d/19mQJ1bPzE6kTslGtNCr79lRgWVOFJ1Xc/view?usp=drive_link", "https://drive.google.com/file/d/1WSenbnykCaQ78RiQCg5LWkKYiqvsFJim/view?usp=drive_link", "https://drive.google.com/file/d/1ZBah5r4EcMGNeflQ_l5RPNcyfVX0CRhw/view?usp=drive_link", "https://drive.google.com/file/d/1WbZhBA-vXiGoBy48xvVwM_c5x8KaAjKA/view?usp=drive_link", "https://drive.google.com/file/d/1BPE6GbfZ4qAOonwX51gFyxopcmGR2y4g/view?usp=drive_link", "https://drive.google.com/file/d/1WESg82w2F15TX03wAIIApNQf42MsBMLV/view?usp=drive_link", "https://drive.google.com/file/d/1urc7dkxLCCU72gmRKHoJ784y_5wL_UUl/view?usp=drive_link", "https://drive.google.com/file/d/10jfiURE4BgRZ1aLN9WH_sw3DNhJ9gR84/view?usp=drive_link", "https://drive.google.com/file/d/172e_Pe_hBX4s-PJCqQkhoVdALSuvb2_q/view?usp=drive_link", "https://drive.google.com/file/d/1Y4C3A8NWP4qI57JbOG6kTb4kdm-xzPWU/view?usp=drive_link", "https://drive.google.com/file/d/1NtsZKRjrh1ZUVe866pAT2skYEMK8O4xe/view?usp=drive_link", "https://drive.google.com/file/d/1ABsrn2OSsKoH7SKBsepsq5IgQAwubcBZ/view?usp=drive_link", "https://drive.google.com/file/d/1VKIY9ZM3ZqmH90v-4PLCmaNC3G6y5V7c/view?usp=drive_link", "https://drive.google.com/file/d/19qI_KBqQvta1vjKRhlydsKWILe3PRjGX/view?usp=drive_link", "https://drive.google.com/file/d/1HyowzSLbytIeiYeihec3zwxsT1RBApvK/view?usp=drive_link", "https://drive.google.com/file/d/1U18sbKJALHsqOcUb2FhQUswcAcEdp0AT/view?usp=drive_link", "https://drive.google.com/file/d/16a44liQcgChQK6oKl_p8Y_tfZIEvaonk/view?usp=drive_link", "https://drive.google.com/file/d/1b8ktz8CAeI_QBy_EbhxIzfoBflxsxME5/view?usp=drive_link", "https://drive.google.com/file/d/1l3q259-GjfWrdaswrAI1gvUZkjuQsPRM/view?usp=drive_link", "https://drive.google.com/file/d/1jf-N-kVWy6JPPTJQ-22tkYP1OFE6Z4Sf/view?usp=drive_link", "https://drive.google.com/file/d/1NGyqpsesI7EDCzdDKjhLhvv-b4C_N-X-/view?usp=drive_link", "https://drive.google.com/file/d/1XVJuggKW9W3pN4wKQd2xi24Kk0-tLXvI/view?usp=drive_link", "https://drive.google.com/file/d/1bu-Va5teeRI3KxMjWoFl77uthtVHJx1O/view?usp=drive_link", "https://drive.google.com/file/d/1T1sh0g2dZTysHOWsMQ-NokDins_9CybJ/view?usp=drive_link", "https://drive.google.com/file/d/1ogozL-alz20N9-lx564-nV6kUxRDj41X/view?usp=drive_link", "https://drive.google.com/file/d/1AKTN3B29KnBO8WbVSCQHamIm5m9i25X6/view?usp=drive_link", "https://drive.google.com/file/d/14oCQuzDcOYsNx1FNMb9q2_mouK_KTyS6/view?usp=drive_link", "https://drive.google.com/file/d/1Dz6SBJgX4LewZV0WOqIoeICvqncMjvvF/view?usp=drive_link", "https://drive.google.com/file/d/1kJWKxyLPN9WxJQEMD00h8b0neXbBv6o7/view?usp=drive_link", "https://drive.google.com/file/d/1PkDlBO1bARtzT_FPaOWCWP6XsLZWr0oE/view?usp=drive_link", "https://drive.google.com/file/d/1X8daLhr40-ao00JfYuwmUi0KY1QQOgIZ/view?usp=drive_link", "https://drive.google.com/file/d/10EgIIldSkKy8afpQncF0KVYpITIGWnYg/view?usp=drive_link", "https://drive.google.com/file/d/17t2kErmlh3GtoYrjxk8ZDL5d_KJpb3e6/view?usp=drive_link", "https://drive.google.com/file/d/1EsFp52la0th0YE3MOz0QQdj1SuaMvsim/view?usp=drive_link", "https://drive.google.com/file/d/1-k2G3wpXVPdRnXy789sySvKEqfHkasqY/view?usp=drive_link", "https://drive.google.com/file/d/1p1SWYAg3H7qyyv8YrKSKdBhSzOFndFk5/view?usp=drive_link", "https://drive.google.com/file/d/1UiXosBzbKxSFn4z4rQTLXLupGO-f9uEA/view?usp=drive_link", "https://drive.google.com/file/d/1Kry_9eabuK2jH-GrAeSWu8xqU-dWAL02/view?usp=drive_link", "https://drive.google.com/file/d/1spnl0OHQmj_oTFl9pX5w8lGCXihNePAM/view?usp=drive_link", "https://drive.google.com/file/d/1J1yHTEgNocaldV7O2Zf7oqwUG6sR0Nrq/view?usp=drive_link", "https://drive.google.com/file/d/1VbDKwkbG2AO6y4NYxh_IEwBk3Dcw763s/view?usp=drive_link", "https://drive.google.com/file/d/1uDXS-huDRGk63Os2oSBJ-vzYgPVYTdV0/view?usp=drive_link", "https://drive.google.com/file/d/1n32Vxdk8YWDSpHR6tKRqyrnnuXPjQMkM/view?usp=drive_link", "https://drive.google.com/file/d/15c_VDKDYW4HEEf_ETUjwVQntrjE_YDl9/view?usp=drive_link", "https://drive.google.com/file/d/1OVnthzHItRQd3K31c_WAxllsMP7dR7Vr/view?usp=drive_link", "https://drive.google.com/file/d/1t3dCRf5KVZD-ABx--lFsZ2v-frg-2Mrv/view?usp=drive_link", "https://drive.google.com/file/d/17aEsMzaiNUu983UzEErkDEWitSdahykD/view?usp=drive_link", "https://drive.google.com/file/d/1PXqfJJC7OqIhRHZwrq72nQJ_DtYvqh8k/view?usp=drive_link", "https://drive.google.com/file/d/1e3o6AWNmyJ2GqmzgAjdOpZTnII8lrmnf/view?usp=drive_link", "https://drive.google.com/file/d/1k6waLUxAjWXYPUga7VO84V73m23JUHO3/view?usp=drive_link", "https://drive.google.com/file/d/1zigcZM8Dg-BiZEn4D0mQADesi_nxTQBe/view?usp=drive_link", "https://drive.google.com/file/d/1SoQPMl2fKvCEFgU0k6JDSuauSJ-HII2z/view?usp=drive_link", "https://drive.google.com/file/d/1NxH5TFAlLX0TD3IsNw0DKj6G2bwYx5M-/view?usp=drive_link", "https://drive.google.com/file/d/19nly3A2xR2-5kBLcuf3uoA7Be2CvvgwT/view?usp=drive_link", "https://drive.google.com/file/d/1NbDIRF2KOdn4dWEISsJBWi8VCJuMHetM/view?usp=drive_link", "https://drive.google.com/file/d/1CrsV4tsva-M3164CU_lyrGEQoh_LVGh-/view?usp=drive_link", "https://drive.google.com/file/d/1ae08dTuYZjPKageTdVmGWMjXVlTkQtzV/view?usp=drive_link", "https://drive.google.com/file/d/1ECRDa1LgN7Hb9G5stVZ_mQ2_eg46IBSk/view?usp=drive_link", "https://drive.google.com/file/d/1aFX_7aC7TCIX2STYw5waa-XP4-1DGkik/view?usp=drive_link", "https://drive.google.com/file/d/12fbLnxlryzFvjUQTYr-wgHXqXvL2S438/view?usp=drive_link", "https://drive.google.com/file/d/1x7a0MUEaWnQVj141jdN3lTUX-u0_po-w/view?usp=drive_link", "https://drive.google.com/file/d/1RjPIKHMxvrSE4VzA-UClUgJyfBFu8Oia/view?usp=drive_link", "https://drive.google.com/file/d/1AUCVA9OtQDB1qpAZdpWtaZHIRLd_1WF7/view?usp=drive_link", "https://drive.google.com/file/d/19rCTyzTORnMlP1wKOVt4C0LeGO3loxfi/view?usp=drive_link", "https://drive.google.com/file/d/1KjjMS2GvuXnhplugR6e0Kn_Ul6WWcSwg/view?usp=drive_link", "https://drive.google.com/file/d/1xgYIB7Jc8DrgsD-4SJKDyFrFVhVDrd6j/view?usp=drive_link", "https://drive.google.com/file/d/1hhX5G3bHWJaZhQJjIHgNgjlCzZU1-EXw/view?usp=drive_link", "https://drive.google.com/file/d/1Ta-ZI1Sw0W37DWOPi26OxZVczqa47FoK/view?usp=drive_link", "https://drive.google.com/file/d/1Xz-OzgDzVqQdWtQtVanpmZDLdAGzbIFZ/view?usp=drive_link", "https://drive.google.com/file/d/1apsjYKt1YNPB-wlYM2uHLBc4g3gwxZUQ/view?usp=drive_link", "https://drive.google.com/file/d/1muwYZDIw2_Bfgwhwo969Cz0vp-1Kbceq/view?usp=drive_link", "https://drive.google.com/file/d/1VFDtXiibR7OzJG8V2PtQH-LGDECJv5DY/view?usp=drive_link", "https://drive.google.com/file/d/1LiuJEAPMC9nSFk0raYMA1o-Amiif95uM/view?usp=drive_link", "https://drive.google.com/file/d/1dWHtOB5ANkkfSjy4gpE7sCjpKEDI-ybf/view?usp=drive_link", "https://drive.google.com/file/d/1oAIYU6WaonP-FPzSwOYJWxlOpN7GT-Ki/view?usp=drive_link", "https://drive.google.com/file/d/1G0J5Sb8x2mx0omWS_ZUgSBgq2k7S2aGn/view?usp=drive_link", "https://drive.google.com/file/d/1uCpQzBfTPxNOmrvg5OknvbFQSDcmmWq1/view?usp=drive_link", "https://drive.google.com/file/d/1B3jzvzdISxV3zfydn6S1-P_256F8I5zg/view?usp=drive_link", "https://drive.google.com/file/d/1JQ1N5CJABYslaNpPXVxJgOGKT1k8zYDs/view?usp=drive_link", "https://drive.google.com/file/d/1X98Iiy3VQ8ImWs1SDxHJ2oqP58T5TtX9/view?usp=drive_link", "https://drive.google.com/file/d/1McUWXKMenPbkDrN9o6w7m9w_stN-yxUP/view?usp=drive_link", "https://drive.google.com/file/d/1EodELbT3H8GDgPqDqKy9f_YbHT4DRcAf/view?usp=drive_link", "https://drive.google.com/file/d/1_sKVOs4gXIiYHXCoe2oc5rMwPJgrMd9V/view?usp=drive_link", "https://drive.google.com/file/d/1zfu8KIFTO13fQ-QiFzQz9eSh5S-19pXt/view?usp=drive_link", "https://drive.google.com/file/d/1-NXU_wPnMmbh5YjJ_zHic9mufs_cfTPn/view?usp=drive_link", "https://drive.google.com/file/d/1kJ575uGSgJ6ilnwXYqN9LgKnm_Pk7eA-/view?usp=drive_link", "https://drive.google.com/file/d/15b2NWUT1HwT0VVqmpdh8qfm0kbEW3Jd_/view?usp=drive_link", "https://drive.google.com/file/d/1ntSLnWFyvDeb6ryaqLxfZTN6zAYVWGM7/view?usp=drive_link", "https://drive.google.com/file/d/14b4TdyjgSRglEnfdKvgm208-4M12DlIp/view?usp=drive_link", "https://drive.google.com/file/d/1dZSKc3L1dtCZt6K_TEaYHiNl9W3z8LLi/view?usp=drive_link", "https://drive.google.com/file/d/1Go9VgUhpeE1ddFwjJUBxEj-EOJC_lnQU/view?usp=drive_link", "https://drive.google.com/file/d/1hFjsX9P7c1_mtGmfXtR5Av_vtLGqrrWq/view?usp=drive_link", "https://drive.google.com/file/d/1OQvs8juu5cKyiggR_MfEeZVG9OpOdLJt/view?usp=drive_link", "https://drive.google.com/file/d/1Ty_oJYCeGrV0-b9p2ic14upoCWuK_Pfb/view?usp=drive_link", "https://drive.google.com/file/d/183TUO8DqW1EZWHDSEmRI1RWQRE6qZHBL/view?usp=drive_link", "https://drive.google.com/file/d/1n-eGQM2d5XA0NXiR7lEDARv1y8fJ9ihl/view?usp=drive_link", "https://drive.google.com/file/d/1H2nJgIXXtutJlIv_K5KZEdH9oWnjGlR5/view?usp=drive_link", "https://drive.google.com/file/d/1Ip4SROBCqBdqzYoHgz4KPWY8vJ8rgz9v/view?usp=drive_link", "https://drive.google.com/file/d/1amseoRi83BZpnXTwXEAMPU_fJIqlpStD/view?usp=drive_link", "https://drive.google.com/file/d/1Vc3ZWYhxxLTef1nPutAm3n6k5XOEENDT/view?usp=drive_link", "https://drive.google.com/file/d/17tJZ5JchRcBAKBcJL2HGf7wgbZcv21ja/view?usp=drive_link", "https://drive.google.com/file/d/1XRBmFbs7M3-rpCKvCNzlM4p4U9u49b5B/view?usp=drive_link", "https://drive.google.com/file/d/1x8Z_PlP0ddY4ZcnJAdUnWCA2rW3zK-0p/view?usp=drive_link", "https://drive.google.com/file/d/1Bg-xOu3e97C0uKO1ugROhvUOudmpLE2r/view?usp=drive_link", "https://drive.google.com/file/d/1yWjOutrcqyNLkLmWtN-PLtAIaAsYPP3A/view?usp=drive_link", "https://drive.google.com/file/d/1st-ghmZs7tPx2xEseiiuuUNwvkywaOz3/view?usp=drive_link", "https://drive.google.com/file/d/1A7-n-hY8byCmVWvSMxfXeCh3j12IENud/view?usp=drive_link", "https://drive.google.com/file/d/1vs51D12NJCDz5rO8d0sQaN6sQdeD4o6-/view?usp=drive_link", "https://drive.google.com/file/d/1l0QDi0tmlCCrKEa8lbEBWrMMWYF7OxZI/view?usp=drive_link", "https://drive.google.com/file/d/1hsxeBtwXFrGS_kp5_XT9wOSU3WF4DakU/view?usp=drive_link", "https://drive.google.com/file/d/1tvJjKo7C-ZJfkeGzCk62wAPksTzoDqGP/view?usp=drive_link", "https://drive.google.com/file/d/17Vq1H64-I9a7FmGoPNlwZO-TlNZtaevQ/view?usp=drive_link", "https://drive.google.com/file/d/15D2RxQT4wN2Hzrq-uhhkpAxQbVbujVBE/view?usp=drive_link", "https://drive.google.com/file/d/1Brl9dxxx50K3njju8BeQU1iHNWhf6cHR/view?usp=drive_link", "https://drive.google.com/file/d/13lvwO_k3H2IQVydTiTnKUJx9Lv5XLgu3/view?usp=drive_link", "https://drive.google.com/file/d/1AaLJ5bSiFDX8g-DW_YVCbhFpphF8GXxs/view?usp=drive_link", "https://drive.google.com/file/d/1AVqxpztNGwRVovIaH671WuZ0AinVU4tM/view?usp=drive_link", "https://drive.google.com/file/d/1iBu6eJ-m0UgIqXGLsYN1auBv9SMulT6m/view?usp=drive_link", "https://drive.google.com/file/d/1XdMOHaRAa6yXR5y46DIaXNteSLtbQ_q6/view?usp=drive_link", "https://drive.google.com/file/d/1z1QZAoxojhRztOPF4UjVRVLG0Wj5NK9K/view?usp=drive_link", "https://drive.google.com/file/d/17kF6fxIktn1lV-B1fylpgRB29TKsrk_r/view?usp=drive_link", "https://drive.google.com/file/d/1jafwBRl4UhLVa3Gi00qSRHV5jbJwm9IO/view?usp=drive_link", "https://drive.google.com/file/d/1zmExCwKMqy_YdZHEUAzE1TTcdZ1oMGLr/view?usp=drive_link", "https://drive.google.com/file/d/1z3go7j7KR3_TIlY7y49wNTIn-romRSjy/view?usp=drive_link", "https://drive.google.com/file/d/1CIO5s_dX7yk7OGgIOR_qARJxEuMzkZrC/view?usp=drive_link", "https://drive.google.com/file/d/14OzGOsN3P8dcN9hbyeqxnMAEZQN-0VaV/view?usp=drive_link", "https://drive.google.com/file/d/1mKD1Rbiy8d18YVIm5NZ6dFtN9kuHqlJD/view?usp=drive_link", "https://drive.google.com/file/d/1EAxfitMsJLu3FapQoW7CMhpNBwZOfZO6/view?usp=drive_link", "https://drive.google.com/file/d/1zILQ7pzz-FbteqQMA66IXaULNnie5Hp9/view?usp=drive_link", "https://drive.google.com/file/d/1WgKfxxII7KyktbzMPqdccJyiKk2Bs2KS/view?usp=drive_link", "https://drive.google.com/file/d/1wuUoeoavNe1GtZAxV9MkwML5Adolu5Gg/view?usp=drive_link", "https://drive.google.com/file/d/110YSBRU19KmdqpXZaazVeb8TcVx3t1AN/view?usp=drive_link", "https://drive.google.com/file/d/1x9X6rBQLvgOUlWXgtetuiDBoUmgfvHUW/view?usp=drive_link", "https://drive.google.com/file/d/13PI4zf3UozO71GJ2Wydm1foL4gT31ZNF/view?usp=drive_link", "https://drive.google.com/file/d/1F8XV4Pcwu6FA-6nnoYVhgo8Un0hxL6nM/view?usp=drive_link", "https://drive.google.com/file/d/1xqb_RTt1nKIqPlO2RMdT8pRLqFK_dPBH/view?usp=drive_link", "https://drive.google.com/file/d/1tFgSB79xJyi-ICISPqSk1oUjyvo-_Zcb/view?usp=drive_link", "https://drive.google.com/file/d/1t9e-Y4bqTtZzfh8mN-2gIMhobDZXggMX/view?usp=drive_link", "https://drive.google.com/file/d/14BUpTs-ujb9fpeoBrO1VTQpbSFFQkjaT/view?usp=drive_link", "https://drive.google.com/file/d/1sUGVR68JpoyNnQN6CDRyqghhawRO_UXg/view?usp=drive_link", "https://drive.google.com/file/d/1OMb8ZSDfN1TmEwXSMCylwCQapNyxJPyb/view?usp=drive_link", "https://drive.google.com/file/d/1y8DCLY3ZewMdCFOD8iEMui8bs1CJsDrW/view?usp=drive_link", "https://drive.google.com/file/d/1vTAfmkJ6bBGpFZfVMZwAe1t9R6MfBcrt/view?usp=drive_link", "https://drive.google.com/file/d/12os7F0QvPP2K_qZattQGVQSZ6ED_Kwcv/view?usp=drive_link", "https://drive.google.com/file/d/1WsG1NqAUO3x9U-Rja2AZFn_lnCg5ZOTx/view?usp=drive_link", "https://drive.google.com/file/d/14adZ6n3QoadbN638UM5Ok-BZOqdSTm47/view?usp=drive_link", "https://drive.google.com/file/d/14FSfVSSdIlvaHAFSaZArjF0APNQi6tlN/view?usp=drive_link", "https://drive.google.com/file/d/15CjwDwEddTJd9Q_MU3bIkMqVQmeAh-iE/view?usp=drive_link", "https://drive.google.com/file/d/1UCqOLchTBZNK7YC--kSXo5I7hjO-D4Di/view?usp=drive_link", "https://drive.google.com/file/d/1UYr8z6au6EtrveugJS_h_nclh5hHmLWY/view?usp=drive_link", "https://drive.google.com/file/d/16ivs7JgfXVJm-fI1fMZQE7z__MSNPweH/view?usp=drive_link", "https://drive.google.com/file/d/1nNtFliRydIA_w3yq9O0NnaTdItdX6wVI/view?usp=drive_link", "https://drive.google.com/file/d/18dYuFM2elxu8opRcwIBzdEsoLAowtGos/view?usp=drive_link", "https://drive.google.com/file/d/1paoz0hphsLMvqaLVNbdAu5WSYNxAEtzK/view?usp=drive_link", "https://drive.google.com/file/d/1ZkX8YSbBBZb2x8BA7B-NLyBibrW0X8ip/view?usp=drive_link", "https://drive.google.com/file/d/1lU9XH2imegfS1t5G67ZMW9gKke49IxBH/view?usp=drive_link", "https://drive.google.com/file/d/1n3VN4Ym3yCDkHSXWZpn4D0CwXUogF9Dm/view?usp=drive_link", "https://drive.google.com/file/d/1C8e4RP18kCVLUV729X3x4JtXiyursgJm/view?usp=drive_link", "https://drive.google.com/file/d/1uDTuzMwvvZ-b4LimmsLD1lRvwA2_PwbP/view?usp=drive_link", "https://drive.google.com/file/d/1paiuNFoVAG8r0QSR3NAny110YevS6IpY/view?usp=drive_link", "https://drive.google.com/file/d/10FeSaLOLXiH-NM-g_oiEdQ9RmA8a7cji/view?usp=drive_link", "https://drive.google.com/file/d/1TtOBcdF4Y6L1xcHUFkOH8OA9tpS1KQOD/view?usp=drive_link", "https://drive.google.com/file/d/18UqLeFcpkBHxx9c3r7LDEwVWLk48qeoV/view?usp=drive_link", "https://drive.google.com/file/d/1E6PaPT8jdL4QqE360G0nI8UJjvBfSCO6/view?usp=drive_link", "https://drive.google.com/file/d/1LJOO7qFXuto2E6DS0SJtwOynyfCLlL2C/view?usp=drive_link", "https://drive.google.com/file/d/1bbXIBn7eyHHqm7wGybKLH8Yyt_aTwjYt/view?usp=drive_link", "https://drive.google.com/file/d/1TNeEZ9AfeHAPloc8z3nm8JcBXBWk_9dP/view?usp=drive_link", "https://drive.google.com/file/d/1Xnnl6xGBTPg5uSl-hmQY5OZWmB6dj9n2/view?usp=drive_link", "https://drive.google.com/file/d/1nEloxH4soDxgIlZ3k2RSisrDXd12E2TX/view?usp=drive_link", "https://drive.google.com/file/d/1oh2UDgxRCCr4IUlHPVRZ03nISd2_390v/view?usp=drive_link", "https://drive.google.com/file/d/18jtX6042QaC3LUt6NIGmjtU7GyZZM2AY/view?usp=drive_link", "https://drive.google.com/file/d/1n_slGz7GoI1Jw6Oos4HAjEOYKTRnwbaP/view?usp=drive_link", "https://drive.google.com/file/d/1-8JSFm3P9e38ayoha6hq9oZH1ncVVCw-/view?usp=drive_link", "https://drive.google.com/file/d/1doZxFysJhsk8BFS5HRqmFBC5-2QYlAnk/view?usp=drive_link", "https://drive.google.com/file/d/1C0y_DAJDLEA1v61nAWqGJa8I1LxrJ4aM/view?usp=drive_link", "https://drive.google.com/file/d/1MsJe-hQ5rnx-_0WgrDO-bc-vDp5lffnM/view?usp=drive_link", "https://drive.google.com/file/d/1dItAoCJPDm2YTAQVvsW2MYEfhvQVKUiH/view?usp=drive_link", "https://drive.google.com/file/d/1nVvROHtI4AYWw9Q_KEcRgRcK6J-X_d-x/view?usp=drive_link", "https://drive.google.com/file/d/1ffuYuHYqdVprt4ticasFZzPlhrJ4-77-/view?usp=drive_link", "https://drive.google.com/file/d/1tSSN1Hxk31PbfP404YF1o-W4MJ2T20aP/view?usp=drive_link", "https://drive.google.com/file/d/1sOYFXWrDmNgCmSd9Md6g63Vc3mKAc7hT/view?usp=drive_link", "https://drive.google.com/file/d/1TnFndwlKbgj1OLOqQF33ZIe4MXCt1L6y/view?usp=drive_link", "https://drive.google.com/file/d/16DX9Y6aaGN_v8FCl99vsoTOqJp160ng0/view?usp=drive_link", "https://drive.google.com/file/d/1SnVPJBEMiL8oPgaXiQpPy5VFg7ouO_j_/view?usp=drive_link", "https://drive.google.com/file/d/1WXSOh7huL_YmAq-73Yottb8dqsOa29VB/view?usp=drive_link", "https://drive.google.com/file/d/1ROwZwX9DwgDAg8adZCTzFwfW9bjfZktt/view?usp=drive_link", "https://drive.google.com/file/d/1jxvhwbXroy9ggs6K5e-UREmKbZyCvuW9/view?usp=drive_link", "https://drive.google.com/file/d/1anZfxOKnGzdMJInoqSvR-dyrFRWE9ix_/view?usp=drive_link", "https://drive.google.com/file/d/1pYDbWUf2KXRYu3MBcWLUVLFh5--cPrUp/view?usp=drive_link", "https://drive.google.com/file/d/1wPO20BPkBaE3aTEO7yRqkOC-UTAZkshs/view?usp=drive_link", "https://drive.google.com/file/d/1FlUM5kKltGrOJVI53x6zY2CP9qm5WIPA/view?usp=drive_link", "https://drive.google.com/file/d/1QFWkE_cPO7soOep7LrV32nO0wkQ74Duk/view?usp=drive_link", "https://drive.google.com/file/d/1q10kNmiL5SCp_w9HiaQ7ypm7BZhCzylC/view?usp=drive_link", "https://drive.google.com/file/d/1BMyu2sShBsWMqWFZb__dyrSnE5G3C2oU/view?usp=drive_link", "https://drive.google.com/file/d/1OuRsPHvbdqXkHZbPG_jjBlzAPloc7vDH/view?usp=drive_link", "https://drive.google.com/file/d/1pubaESCv_Bf7MxWK0_gKnRUuPqiNHujd/view?usp=drive_link", "https://drive.google.com/file/d/1wPscn8mM2xY3pDNxYLUIoNzcXVEA38SV/view?usp=drive_link", "https://drive.google.com/file/d/16RRFmYTuusAworkYOFcFHwmkp-sejcj0/view?usp=drive_link", "https://drive.google.com/file/d/1hyWCRH8VcZJ6TAuYeZtZswMNKt9lxYMd/view?usp=drive_link", "https://drive.google.com/file/d/1g5utUZH7E3uJpkrsWwfvioW13K-8B2ei/view?usp=drive_link", "https://drive.google.com/file/d/1zPaK6x-VaEiKyrDRLowKP-oXNnd7mgKY/view?usp=drive_link", "https://drive.google.com/file/d/1NZHgrMIXU0EOXFVzYhBE6Oaz4x1UTxeQ/view?usp=drive_link", "https://drive.google.com/file/d/1EarvOry4ozquje2M2XMcs_vK726anzqA/view?usp=drive_link", "https://drive.google.com/file/d/15D-RBXnsztOsbgCzrVG0i3Ux_OTrH4Tq/view?usp=drive_link", "https://drive.google.com/file/d/1SXaX83XP3G-6uKnuuYUs6THAS__xSGA5/view?usp=drive_link", "https://drive.google.com/file/d/1frw6w-FkxH3tCmKIqTZF9DtJc85FxydY/view?usp=drive_link", "https://drive.google.com/file/d/1P_b0lWwGf2xAk9fi7z1k7hhQNzWo3GL2/view?usp=drive_link", "https://drive.google.com/file/d/1A1flKI97v_n3jMKIRz2v6zz0lVeJ9nP_/view?usp=drive_link", "https://drive.google.com/file/d/1u2-qlZSF7i01AtzEnJTBZj4SZlElga1V/view?usp=drive_link", "https://drive.google.com/file/d/1se_q_DKYg1uj3RgnyAKX6hrdEOAsWSSg/view?usp=drive_link", "https://drive.google.com/file/d/1Ova1ZWf91uiOTSjSZGanv6TJznZO4Tsx/view?usp=drive_link", "https://drive.google.com/file/d/16Eb1N6kLeTqL3u_op7bw561Z3TO94_za/view?usp=drive_link", "https://drive.google.com/file/d/1x5kNe0wozlXRGM3CumWz8g1xhM2cKyoo/view?usp=drive_link", "https://drive.google.com/file/d/1mgK2G7VS4BmO5w845WV_PD1hkQKzld-i/view?usp=drive_link", "https://drive.google.com/file/d/1Fga67xxcG8kAKPDwDL9QqL4dw-HU-3tE/view?usp=drive_link", "https://drive.google.com/file/d/19Ih5OrMRcp4mJXtuYEWDaXwV078gWvBn/view?usp=drive_link", "https://drive.google.com/file/d/1dCQxH85kCYWjZySPR6hmPlC343KV66ZZ/view?usp=drive_link", "https://drive.google.com/file/d/1NMafc4x0exTCRX69w-gF3aL2FC_yE2Tu/view?usp=drive_link", "https://drive.google.com/file/d/1i-6XtZIsiThF3GtxOXyPLAgLr5wQPiy8/view?usp=drive_link", "https://drive.google.com/file/d/1FvXbxJFr7cNQYTiV6lkHXvZVRRR4sruX/view?usp=drive_link", "https://drive.google.com/file/d/1NZqWOHIXanK3xwEGuMbQldgBRvDwPSbP/view?usp=drive_link", "https://drive.google.com/file/d/1nmfQjvLjZbC-YuHeJNXYpKhfCJoniCS6/view?usp=drive_link", "https://drive.google.com/file/d/1sR8iwKYiDYeDuKZYhGXnoNakwuXl4O-r/view?usp=drive_link", "https://drive.google.com/file/d/1NvIAPRRfRVhRXCrKYOFDv8dwMhsYv1M5/view?usp=drive_link", "https://drive.google.com/file/d/1mHfeg106Fc8C-hdjpBDsorxGK5QLrqZi/view?usp=drive_link", "https://drive.google.com/file/d/1TTQCGFDvijf8G3ltYbJMHoNkSMPMdSRw/view?usp=drive_link", "https://drive.google.com/file/d/1LsNlUNxhWBacILiezcJwxHircN_L57YC/view?usp=drive_link", "https://drive.google.com/file/d/1OqJXCrORN00y4ue8WqZP63rh52E5XPO8/view?usp=drive_link", "https://drive.google.com/file/d/1eMecS-HKWQPOLnS6pbI_HohPwZZIMlHl/view?usp=drive_link", "https://drive.google.com/file/d/1ASNKNNDAMQoHo3kCKxzpaskYSwqfLAGH/view?usp=drive_link", "https://drive.google.com/file/d/1eU7iAv9f6KT_GM1_9R0dBxon91PuPMBa/view?usp=drive_link", "https://drive.google.com/file/d/1BfJxXVaehHsKfkzq0xQ2eksLh1AdG7gJ/view?usp=drive_link", "https://drive.google.com/file/d/1slMjqAuNzyKK2N6WP1sD44DHgd_LLt4K/view?usp=drive_link", "https://drive.google.com/file/d/1FSoZ00Xcc5XeCtQD9Nk0h6Nbd9uFBYUp/view?usp=drive_link", "https://drive.google.com/file/d/1xXtfZ_Q8FC3F-KUeWfXLIQnlgFOU-i1z/view?usp=drive_link", "https://drive.google.com/file/d/1jHzvAm1w8tsOHT0GDa3_Fs1Pi2LJSz1r/view?usp=drive_link", "https://drive.google.com/file/d/1E9LQaZccaYfO431nHi6zXPRTMfaBfU-M/view?usp=drive_link", "https://drive.google.com/file/d/1i31y5kGaZjvtma241FYZ46ofRf8J5PMi/view?usp=drive_link", "https://drive.google.com/file/d/15q_2hnJxj_dJqfnnazp4FePN7utWXs1M/view?usp=drive_link", "https://drive.google.com/file/d/1ou4yT9ThJJAiPBwJgMd94pv2K02z19Qx/view?usp=drive_link", "https://drive.google.com/file/d/1toco-eOiVyeQEskWAs9bUDuYq2-Kfxxw/view?usp=drive_link", "https://drive.google.com/file/d/10iDkDAP9_1Q4XJwzBmycXRt7nhyn1VvL/view?usp=drive_link", "https://drive.google.com/file/d/1fkvmaJuQKst99MD93SsDGErCmzPUsy0s/view?usp=drive_link", "https://drive.google.com/file/d/1Z__pNrqjv3B-XhB3Uek_sj8vRAW-ZXVq/view?usp=drive_link", "https://drive.google.com/file/d/1u6zUoHM5HLxwBdYloKeUNOJA9ZKdVfHf/view?usp=drive_link", "https://drive.google.com/file/d/1docUJ21VPjeS9rIQObY_DnVLBPmRwCdH/view?usp=drive_link", "https://drive.google.com/file/d/1h9eEm0oj0a1xHiWUh9iUxpxFQigAN3Br/view?usp=drive_link", "https://drive.google.com/file/d/1usIPwcqYCrWDYN4kT4boE5kGucceWaB7/view?usp=drive_link", "https://drive.google.com/file/d/1YnybX_PlzqA3EODHbrXc4ylSv_dMWsuM/view?usp=drive_link", "https://drive.google.com/file/d/1Y4S_JzNp1txpPw-aJ3dclw4AOg2HUSAp/view?usp=drive_link", "https://drive.google.com/file/d/1EyYa75sSPe-babGJMG4kS8ORGQ-3H8Dn/view?usp=drive_link", "https://drive.google.com/file/d/1cJqABLlkXNROqq8nqV3W6Td224k_AQbx/view?usp=drive_link", "https://drive.google.com/file/d/15WOfwdB3AM5z7kSioboBt0BgKb9cAOl5/view?usp=drive_link", "https://drive.google.com/file/d/1z9lP1RSm7fFj1SrIpIyaF_JxWhZn6vm1/view?usp=drive_link", "https://drive.google.com/file/d/1JIH1Z6t10Y72Q1FcxMsIjTla3Vk4JKHc/view?usp=drive_link", "https://drive.google.com/file/d/1m9abkKdvC5E-QM32KFA0v7PE-kFib81R/view?usp=drive_link", "https://drive.google.com/file/d/1Iyq3cELDqC-UeODisEQaYkE9lCyeBd6w/view?usp=drive_link", "https://drive.google.com/file/d/1GCbdFF0pfuMc9_O07fLLp-yRZ1D1mkQ4/view?usp=drive_link", "https://drive.google.com/file/d/172lJEJzjhCdsSzNUjic1ScSv4-yHWZ4Z/view?usp=drive_link", "https://drive.google.com/file/d/1WuYV94zyY5JcBHC95yAdQ8Fv0VW2kCi4/view?usp=drive_link", "https://drive.google.com/file/d/1tbH4SbyxnPgBVywkl0ly-4Qes6pVR4VS/view?usp=drive_link", "https://drive.google.com/file/d/15rIIb-gLoSzxWH9qbBl1KFg9pEYPmrqb/view?usp=drive_link", "https://drive.google.com/file/d/1obuQsljm6X2oghShpL-Ly52VOSyhoUz7/view?usp=drive_link", "https://drive.google.com/file/d/1vXpzgINbmwZE7otwbAJ1jBB8-UoJHsry/view?usp=drive_link", "https://drive.google.com/file/d/1YfwW9vmslG5CmU8fBt2GEk9m_Y8DpXKN/view?usp=drive_link", "https://drive.google.com/file/d/1Sgy4DA8BZ22e4Zkl2FutGGVedlSTgHaR/view?usp=drive_link", "https://drive.google.com/file/d/1GR5ex2fMX3F3plPsH9p0rkmeFsdp5b0K/view?usp=drive_link", "https://drive.google.com/file/d/1nqUYxeBpf5mwJOsdEv5OyFy6XLMGZwbO/view?usp=drive_link", "https://drive.google.com/file/d/1WZCvU3v3lyVOCJGXKCbimXmpJOky_P2P/view?usp=drive_link", "https://drive.google.com/file/d/1RjhAayWxG8hLP9oZDg1tog32NHKz5UKj/view?usp=drive_link", "https://drive.google.com/file/d/1RYGVM4oTZt-HVK9DwBKOg83y5wfV8PnI/view?usp=drive_link", "https://drive.google.com/file/d/1KdkKRIIin2Ln3ujaJ9asKvg4-9TLI2gi/view?usp=drive_link", "https://drive.google.com/file/d/1cYVsnF1TbY2k4ckLtLJmVHefcowbjq-R/view?usp=drive_link", "https://drive.google.com/file/d/11aWOII5XoJgOL7Pli_90_LCDHViaB70L/view?usp=drive_link", "https://drive.google.com/file/d/1Pn-F8BTEaxr-cf-ojzMfPzZvIC7w8_RI/view?usp=drive_link", "https://drive.google.com/file/d/1ejMZ0L7bQ6rBaq7o8Ro4iN65M_0lBThi/view?usp=drive_link", "https://drive.google.com/file/d/1br2hHrrFbqosI2kTZhHm39RISe-a9UQe/view?usp=drive_link", "https://drive.google.com/file/d/1Su3sJMvTWgc_Tl2JHInMjrKva6iMKflI/view?usp=drive_link", "https://drive.google.com/file/d/1NNH5N0hkWyveQlTbHVoBWiKBUOcc8i7a/view?usp=drive_link", "https://drive.google.com/file/d/1BPuandHpG0L0rMjaIQtO5v-reUZz3faW/view?usp=drive_link", "https://drive.google.com/file/d/1lOxe6wXipNrVlaKSnnsJbIONL6Uy-d8g/view?usp=drive_link", "https://drive.google.com/file/d/1kUQbdlun7envlUdoPUceRkj6I8ZgKeMp/view?usp=drive_link", "https://drive.google.com/file/d/1gSqgQ2l0rH2jnVz-ARSUw4-U3XantMkO/view?usp=drive_link", "https://drive.google.com/file/d/1V7dd-6XDNFMEIbN3VD22piZh9WZCcaOB/view?usp=drive_link", "https://drive.google.com/file/d/1IzgGN5rJeg3OsVRJ6hUAhuU71hxka7Ar/view?usp=drive_link", "https://drive.google.com/file/d/1BRnPEbTxmngMrcIrXo281IZxUd8nXZA9/view?usp=drive_link", "https://drive.google.com/file/d/1Zjw8UUng_K-HCUn7PL1yEeAdB-cmIbV6/view?usp=drive_link", "https://drive.google.com/file/d/12yTbrvBGzw8-oOsGB1lg9sNIQShEcWa8/view?usp=drive_link", "https://drive.google.com/file/d/1U-SXNthDWWouZTZOJs9goQi56K3JgnjB/view?usp=drive_link", "https://drive.google.com/file/d/1I94yYVlrFw-8tEdn2MDu2rq_HEVdwy-9/view?usp=drive_link", "https://drive.google.com/file/d/1ix0dXN-mrIL8j6rVcd74x-XnLiBt5QJp/view?usp=drive_link", "https://drive.google.com/file/d/1QKwTKws8-Z2LT6LmMTxf_Cwhpr5H-2-M/view?usp=drive_link", "https://drive.google.com/file/d/1deyrvKHB3NiJLIbOgKTMk8lzYjrMaiVS/view?usp=drive_link", "https://drive.google.com/file/d/1yEhbB1zHfjzcyYPL2nc0cG-M1YrT0nQY/view?usp=drive_link", "https://drive.google.com/file/d/1CbiHM6uDIPs4NcUo9URevEH2t-1UO2Iv/view?usp=drive_link", "https://drive.google.com/file/d/1n5ZfeLQMl6S4ioCLrxuuDZgIxAELba6S/view?usp=drive_link", "https://drive.google.com/file/d/1twK-7ijaK-lEbaO1ASaM4cqCaS-a8Lzx/view?usp=drive_link", "https://drive.google.com/file/d/1GjzScaq_hyUinN9F-_2HiwqsbkZuAmxv/view?usp=drive_link", "https://drive.google.com/file/d/17hEDmpHAMOH1W0TlbhYP-xEVCO2FZ_Dv/view?usp=drive_link", "https://drive.google.com/file/d/1nH55ggPRX9IAey6BTEpIt-tXGfFquCmO/view?usp=drive_link”}
42
- INDEXED_URLS = {"https://drive.google.com/file/d/1d5kkqaQkdiA2SwJ0JFrTuKO9zauiUtFz/**/view?usp=sharing"}
 
 
 
43
 
44
  class ResourceItem:
45
  def __init__(self, url: str, content: str, resource_type: str):
@@ -47,14 +55,25 @@ class ResourceItem:
47
  self.content = content
48
  self.type = resource_type
49
  self.embedding = None
 
 
50
 
51
  def __str__(self):
52
  return f"ResourceItem(type={self.type}, url={self.url}, content_length={len(self.content)})"
53
 
 
 
 
 
 
 
 
 
 
 
54
  class RobustCrawler:
55
- def __init__(self, max_retries=3, backoff_factor=0.3, proxies=None):
56
  self.ua = UserAgent()
57
- self.proxies = proxies or {}
58
  self.session = self._create_robust_session(max_retries, backoff_factor)
59
 
60
  def _create_robust_session(self, max_retries, backoff_factor):
@@ -82,7 +101,7 @@ class RobustCrawler:
82
  "Upgrade-Insecure-Requests": "1"
83
  }
84
 
85
- def crawl_with_exponential_backoff(self, url, timeout=10):
86
  try:
87
  time.sleep(random.uniform(0.5, 2.0))
88
  response = self.session.get(
@@ -98,52 +117,57 @@ class RobustCrawler:
98
 
99
  class SchoolChatbot:
100
  def __init__(self):
101
- print("Initializing SchoolChatbot...")
102
  self.setup_models()
103
  self.resources = []
104
  self.visited_urls = set()
105
  self.crawl_and_index_resources()
106
 
107
  def setup_models(self):
108
- logger.info("Setting up models...")
109
- self.tokenizer = AutoTokenizer.from_pretrained(Config.MODEL_NAME)
110
- self.model = AutoModelForCausalLM.from_pretrained(Config.MODEL_NAME)
111
- self.embedding_model = SentenceTransformer(Config.EMBEDDING_MODEL)
112
- logger.info("Models setup completed successfully.")
 
 
 
 
113
 
114
  def crawl_and_index_resources(self):
115
  logger.info("Starting to crawl and index resources...")
116
- with ThreadPoolExecutor(max_workers=5) as executor:
117
- for url in Config.INDEXED_URLS:
118
- executor.submit(self.crawl_url, url, 0)
119
- logger.info("Crawling and indexing completed.")
 
 
 
 
120
 
121
  def crawl_url(self, url, depth):
122
  if depth > Config.MAX_DEPTH or url in self.visited_urls:
123
  return
124
  self.visited_urls.add(url)
 
125
  crawler = RobustCrawler()
126
  response = crawler.crawl_with_exponential_backoff(url)
127
  if not response:
128
- logger.warning(f"Failed to retrieve {url}")
129
  return
 
130
  content_type = response.headers.get("Content-Type", "").lower()
131
- if "text/calendar" in content_type or url.endswith(".ics"):
132
- self.extract_ics_content(url, response.text)
133
- elif "text/html" in content_type:
134
- soup = BeautifulSoup(response.content, 'html.parser')
135
- self.extract_page_content(url, soup)
136
- if depth < Config.MAX_DEPTH:
137
- for link in soup.find_all('a', href=True):
138
- full_url = urljoin(url, link['href'])
139
- if self.is_valid_url(full_url):
140
- time.sleep(random.uniform(0.5, 2.0))
141
- self.crawl_url(full_url, depth + 1)
142
- elif "application/pdf" in content_type:
143
- self.extract_pdf_content(url, response.content)
144
- else:
145
- logger.warning(f"Unrecognized content-type ({content_type}). Storing as raw.")
146
- self.store_resource(url, response.text, 'unknown')
147
 
148
  def extract_ics_content(self, url, ics_text):
149
  try:
@@ -151,117 +175,225 @@ class SchoolChatbot:
151
  events = []
152
  for component in cal.walk():
153
  if component.name == "VEVENT":
154
- summary = component.get("SUMMARY", "No Summary")
155
- dtstart = component.get("DTSTART", "No Start Date")
156
- dtend = component.get("DTEND", "No End Date")
157
- event_str = f"{summary} from {dtstart} to {dtend}"
158
- events.append(event_str)
159
  if events:
160
- combined_text = "\n".join(events)
161
- self.store_resource(url, combined_text, 'calendar')
162
  except Exception as e:
163
  logger.error(f"Error parsing ICS from {url}: {e}")
164
 
165
- def extract_page_content(self, url, soup):
166
- content_sections = []
167
- for tag in soup.find_all(['main', 'article', 'section']):
168
- text_found = tag.get_text(strip=True)
169
- if text_found:
170
- content_sections.append(text_found)
171
- for heading in soup.find_all(['h1', 'h2', 'h3']):
172
- section_content = [heading.get_text(strip=True)]
173
- next_elem = heading.find_next_sibling()
174
- while next_elem and next_elem.name in ['p', 'ul', 'ol']:
175
- section_content.append(next_elem.get_text(strip=True))
176
- next_elem = next_elem.find_next_sibling()
177
- if section_content:
178
- content_sections.append(' '.join(section_content))
179
- if content_sections:
180
- full_content = ' '.join(content_sections)
181
- self.store_resource(url, full_content, 'webpage')
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
182
 
183
  def extract_pdf_content(self, url, pdf_content):
184
  try:
185
- pdf_reader = PyPDF2.PdfFileReader(pdf_content)
186
- text = ''
187
- for page in range(pdf_reader.getNumPages()):
188
- text += pdf_reader.getPage(page).extractText()
189
- if text:
190
- self.store_resource(url, text, 'pdf')
 
 
 
 
 
 
 
191
  except Exception as e:
192
  logger.error(f"Error extracting PDF content from {url}: {e}")
193
 
194
  def store_resource(self, url, text_data, resource_type):
195
  try:
196
- text_chunks = [text_data[i:i+512] for i in range(0, len(text_data), 512)]
197
- embeddings = [self.embedding_model.encode(chunk) for chunk in text_chunks]
198
- average_embedding = np.mean(embeddings, axis=0)
199
  item = ResourceItem(url, text_data, resource_type)
200
- item.embedding = average_embedding
201
- self.resources.append(item)
202
- logger.debug(f"Stored resource: {url} (type={resource_type}). Total resources: {len(self.resources)}")
 
 
 
 
 
 
 
 
 
 
 
203
  except Exception as e:
204
  logger.error(f"Error storing resource {url}: {e}")
205
 
206
  def is_valid_url(self, url):
207
- parsed = urlparse(url)
208
- return bool(parsed.scheme) and bool(parsed.netloc)
 
 
 
209
 
210
- def find_best_matching_resource(self, query):
211
  if not self.resources:
212
- return None, -1.0
213
- query_embedding = self.embedding_model.encode(query)
214
- best_resource, best_score = None, -1.0
215
- for resource in self.resources:
216
- if resource.embedding is not None:
217
- score = cosine_similarity([query_embedding], [resource.embedding])[0][0]
218
- if score > best_score:
219
- best_score = score
220
- best_resource = resource
221
- return best_resource, best_score
222
-
223
- def extract_relevant_snippet(self, content, query):
224
- sentences = sent_tokenize(content)
225
- query_embedding = self.embedding_model.encode(query)
226
- sentence_embeddings = self.embedding_model.encode(sentences)
227
- similarities = cosine_similarity([query_embedding], sentence_embeddings)[0]
228
- best_idx = np.argmax(similarities)
229
- start_idx = max(0, best_idx - 1)
230
- end_idx = min(len(sentences), best_idx + 2)
231
- snippet = ' '.join(sentences[start_idx:end_idx])
232
- return snippet
233
 
234
  def generate_response(self, user_input):
235
- best_resource, similarity_score = self.find_best_matching_resource(user_input)
236
- if best_resource is None or similarity_score < Config.SIMILARITY_THRESHOLD:
237
- return "Great question! According to my resources, I couldn't find a direct answer. Please rephrase your query or contact support for more information."
238
- snippet = self.extract_relevant_snippet(best_resource.content, user_input)
239
- conversation_history = f"User: {user_input}\nAssistant: {snippet}"
240
- new_user_input_ids = self.tokenizer.encode(conversation_history + self.tokenizer.eos_token, return_tensors='pt')
241
- chat_history_ids = self.model.generate(new_user_input_ids, max_length=Config.MAX_TOKENS, pad_token_id=self.tokenizer.eos_token_id)
242
- response = self.tokenizer.decode(chat_history_ids[:, new_user_input_ids.shape[-1]:][0], skip_special_tokens=True)
243
- return f"Great question! According to my resources, {response}. For more details, see the answer in full context here: {best_resource.url}"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
244
 
245
  def create_gradio_interface(chatbot):
246
  def respond(user_input):
247
  return chatbot.generate_response(user_input)
 
248
  interface = gr.Interface(
249
  fn=respond,
250
- inputs=gr.Textbox(label="Ask a Question", placeholder="Type your question here..."),
251
- outputs=gr.Textbox(label="Answer", placeholder="Response will appear here..."),
 
 
 
 
 
 
 
 
252
  title="School Information Chatbot",
253
- description="Ask about school events, holidays, or other information. Supports calendar and website queries.",
254
  examples=[
255
  ["What events are happening this week?"],
256
  ["When is the next board meeting?"],
257
- ["Are there any upcoming holidays?"]
258
  ],
259
- theme=gr.themes.Monochrome(),
260
- flagging_mode="never" # Replaced allow_flagging with flagging_mode
261
  )
262
  return interface
263
 
264
  if __name__ == "__main__":
265
- chatbot = SchoolChatbot()
266
- interface = create_gradio_interface(chatbot)
267
- interface.launch(server_name="0.0.0.0", server_port=7860, inbrowser=True)
 
 
 
 
 
 
 
 
 
10
  import nltk
11
  from nltk.tokenize import sent_tokenize
12
  import PyPDF2
13
+ import io
14
  from joblib import dump, load
15
 
16
  from transformers import AutoTokenizer, AutoModelForCausalLM
 
30
  )
31
  logger = logging.getLogger(__name__)
32
 
33
+ # Download NLTK data
34
+ try:
35
+ nltk.download('punkt', quiet=True)
36
+ except Exception as e:
37
+ logger.warning(f"Failed to download NLTK data: {e}")
38
 
39
  class Config:
40
  MODEL_NAME = "microsoft/DialoGPT-medium"
 
43
  REQUEST_TIMEOUT = 10
44
  MAX_DEPTH = 1
45
  SIMILARITY_THRESHOLD = 0.5
46
+ CHUNK_SIZE = 512
47
+ MAX_WORKERS = 5
48
+ INDEXED_URLS = {
49
+ "https://drive.google.com/file/d/1d5kkqaQkdiA2SwJ0JFrTuKO9zauiUtFz/**/view?usp=sharing"
50
+ }
51
 
52
  class ResourceItem:
53
  def __init__(self, url: str, content: str, resource_type: str):
 
55
  self.content = content
56
  self.type = resource_type
57
  self.embedding = None
58
+ self.chunks = []
59
+ self.chunk_embeddings = []
60
 
61
  def __str__(self):
62
  return f"ResourceItem(type={self.type}, url={self.url}, content_length={len(self.content)})"
63
 
64
+ def create_chunks(self, chunk_size=Config.CHUNK_SIZE):
65
+ """Split content into overlapping chunks for better context preservation"""
66
+ words = self.content.split()
67
+ overlap = chunk_size // 4 # 25% overlap
68
+
69
+ for i in range(0, len(words), chunk_size - overlap):
70
+ chunk = ' '.join(words[i:i + chunk_size])
71
+ if chunk:
72
+ self.chunks.append(chunk)
73
+
74
  class RobustCrawler:
75
+ def __init__(self, max_retries=3, backoff_factor=0.3):
76
  self.ua = UserAgent()
 
77
  self.session = self._create_robust_session(max_retries, backoff_factor)
78
 
79
  def _create_robust_session(self, max_retries, backoff_factor):
 
101
  "Upgrade-Insecure-Requests": "1"
102
  }
103
 
104
+ def crawl_with_exponential_backoff(self, url, timeout=Config.REQUEST_TIMEOUT):
105
  try:
106
  time.sleep(random.uniform(0.5, 2.0))
107
  response = self.session.get(
 
117
 
118
  class SchoolChatbot:
119
  def __init__(self):
120
+ logger.info("Initializing SchoolChatbot...")
121
  self.setup_models()
122
  self.resources = []
123
  self.visited_urls = set()
124
  self.crawl_and_index_resources()
125
 
126
  def setup_models(self):
127
+ try:
128
+ logger.info("Setting up models...")
129
+ self.tokenizer = AutoTokenizer.from_pretrained(Config.MODEL_NAME)
130
+ self.model = AutoModelForCausalLM.from_pretrained(Config.MODEL_NAME)
131
+ self.embedding_model = SentenceTransformer(Config.EMBEDDING_MODEL)
132
+ logger.info("Models setup completed successfully.")
133
+ except Exception as e:
134
+ logger.error(f"Failed to setup models: {e}")
135
+ raise RuntimeError("Failed to initialize required models")
136
 
137
  def crawl_and_index_resources(self):
138
  logger.info("Starting to crawl and index resources...")
139
+ with ThreadPoolExecutor(max_workers=Config.MAX_WORKERS) as executor:
140
+ futures = [executor.submit(self.crawl_url, url, 0) for url in Config.INDEXED_URLS]
141
+ for future in futures:
142
+ try:
143
+ future.result()
144
+ except Exception as e:
145
+ logger.error(f"Error in crawling thread: {e}")
146
+ logger.info(f"Crawling completed. Indexed {len(self.resources)} resources.")
147
 
148
  def crawl_url(self, url, depth):
149
  if depth > Config.MAX_DEPTH or url in self.visited_urls:
150
  return
151
  self.visited_urls.add(url)
152
+
153
  crawler = RobustCrawler()
154
  response = crawler.crawl_with_exponential_backoff(url)
155
  if not response:
 
156
  return
157
+
158
  content_type = response.headers.get("Content-Type", "").lower()
159
+
160
+ try:
161
+ if "text/calendar" in content_type or url.endswith(".ics"):
162
+ self.extract_ics_content(url, response.text)
163
+ elif "text/html" in content_type:
164
+ self.extract_html_content(url, response)
165
+ elif "application/pdf" in content_type:
166
+ self.extract_pdf_content(url, response.content)
167
+ else:
168
+ self.store_resource(url, response.text, 'unknown')
169
+ except Exception as e:
170
+ logger.error(f"Error processing {url}: {e}")
 
 
 
 
171
 
172
  def extract_ics_content(self, url, ics_text):
173
  try:
 
175
  events = []
176
  for component in cal.walk():
177
  if component.name == "VEVENT":
178
+ event = self._format_calendar_event(component)
179
+ if event:
180
+ events.append(event)
 
 
181
  if events:
182
+ self.store_resource(url, "\n".join(events), 'calendar')
 
183
  except Exception as e:
184
  logger.error(f"Error parsing ICS from {url}: {e}")
185
 
186
+ def _format_calendar_event(self, event):
187
+ try:
188
+ summary = event.get("SUMMARY", "No Summary")
189
+ start = event.get("DTSTART", "").dt
190
+ end = event.get("DTEND", "").dt
191
+ description = event.get("DESCRIPTION", "")
192
+ location = event.get("LOCATION", "")
193
+
194
+ event_details = [f"Event: {summary}"]
195
+ if start:
196
+ event_details.append(f"Start: {start}")
197
+ if end:
198
+ event_details.append(f"End: {end}")
199
+ if location:
200
+ event_details.append(f"Location: {location}")
201
+ if description:
202
+ event_details.append(f"Description: {description}")
203
+
204
+ return " | ".join(event_details)
205
+ except Exception:
206
+ return None
207
+
208
+ def extract_html_content(self, url, response):
209
+ try:
210
+ soup = BeautifulSoup(response.content, 'html.parser')
211
+
212
+ # Remove unwanted elements
213
+ for element in soup.find_all(['script', 'style', 'nav', 'footer']):
214
+ element.decompose()
215
+
216
+ content_sections = []
217
+
218
+ # Extract main content
219
+ main_content = soup.find(['main', 'article', 'div'], class_=['content', 'main-content'])
220
+ if main_content:
221
+ content_sections.append(main_content.get_text(strip=True, separator=' '))
222
+
223
+ # Extract headings and their associated content
224
+ for heading in soup.find_all(['h1', 'h2', 'h3']):
225
+ section = [heading.get_text(strip=True)]
226
+ next_elem = heading.find_next_sibling()
227
+ while next_elem and next_elem.name in ['p', 'ul', 'ol', 'div']:
228
+ section.append(next_elem.get_text(strip=True))
229
+ next_elem = next_elem.find_next_sibling()
230
+ content_sections.append(' '.join(section))
231
+
232
+ if content_sections:
233
+ self.store_resource(url, ' '.join(content_sections), 'webpage')
234
+
235
+ # Process links if within depth limit
236
+ if len(self.visited_urls) < Config.MAX_DEPTH:
237
+ self._process_links(soup, url)
238
+
239
+ except Exception as e:
240
+ logger.error(f"Error extracting HTML content from {url}: {e}")
241
+
242
+ def _process_links(self, soup, base_url):
243
+ try:
244
+ for link in soup.find_all('a', href=True):
245
+ full_url = urljoin(base_url, link['href'])
246
+ if self.is_valid_url(full_url) and full_url not in self.visited_urls:
247
+ time.sleep(random.uniform(0.5, 2.0))
248
+ self.crawl_url(full_url, len(self.visited_urls))
249
+ except Exception as e:
250
+ logger.error(f"Error processing links from {base_url}: {e}")
251
 
252
  def extract_pdf_content(self, url, pdf_content):
253
  try:
254
+ pdf_file = io.BytesIO(pdf_content)
255
+ pdf_reader = PyPDF2.PdfReader(pdf_file)
256
+ text_content = []
257
+
258
+ for page in pdf_reader.pages:
259
+ try:
260
+ text_content.append(page.extract_text())
261
+ except Exception as e:
262
+ logger.error(f"Error extracting text from PDF page: {e}")
263
+ continue
264
+
265
+ if text_content:
266
+ self.store_resource(url, ' '.join(text_content), 'pdf')
267
  except Exception as e:
268
  logger.error(f"Error extracting PDF content from {url}: {e}")
269
 
270
  def store_resource(self, url, text_data, resource_type):
271
  try:
272
+ # Create resource item and split into chunks
 
 
273
  item = ResourceItem(url, text_data, resource_type)
274
+ item.create_chunks()
275
+
276
+ # Generate embeddings for chunks
277
+ item.chunk_embeddings = [
278
+ self.embedding_model.encode(chunk)
279
+ for chunk in item.chunks
280
+ ]
281
+
282
+ # Calculate average embedding
283
+ if item.chunk_embeddings:
284
+ item.embedding = np.mean(item.chunk_embeddings, axis=0)
285
+ self.resources.append(item)
286
+ logger.debug(f"Stored resource: {url} (type={resource_type})")
287
+
288
  except Exception as e:
289
  logger.error(f"Error storing resource {url}: {e}")
290
 
291
  def is_valid_url(self, url):
292
+ try:
293
+ parsed = urlparse(url)
294
+ return bool(parsed.scheme) and bool(parsed.netloc)
295
+ except Exception:
296
+ return False
297
 
298
+ def find_best_matching_chunks(self, query, n_chunks=3):
299
  if not self.resources:
300
+ return []
301
+
302
+ try:
303
+ query_embedding = self.embedding_model.encode(query)
304
+ all_chunks = []
305
+
306
+ for resource in self.resources:
307
+ for chunk, embedding in zip(resource.chunks, resource.chunk_embeddings):
308
+ score = cosine_similarity([query_embedding], [embedding])[0][0]
309
+ if score > Config.SIMILARITY_THRESHOLD:
310
+ all_chunks.append((chunk, score, resource.url))
311
+
312
+ # Sort by similarity score and get top n chunks
313
+ all_chunks.sort(key=lambda x: x[1], reverse=True)
314
+ return all_chunks[:n_chunks]
315
+
316
+ except Exception as e:
317
+ logger.error(f"Error finding matching chunks: {e}")
318
+ return []
 
 
319
 
320
  def generate_response(self, user_input):
321
+ try:
322
+ # Find best matching chunks
323
+ best_chunks = self.find_best_matching_chunks(user_input)
324
+
325
+ if not best_chunks:
326
+ return "I apologize, but I couldn't find any relevant information in my knowledge base. Could you please rephrase your question or ask about something else?"
327
+
328
+ # Prepare context from best matching chunks
329
+ context = "\n".join([chunk[0] for chunk in best_chunks])
330
+
331
+ # Prepare conversation history
332
+ conversation = f"Context: {context}\nUser: {user_input}\nAssistant:"
333
+
334
+ # Generate response
335
+ input_ids = self.tokenizer.encode(conversation, return_tensors='pt')
336
+ response_ids = self.model.generate(
337
+ input_ids,
338
+ max_length=Config.MAX_TOKENS,
339
+ pad_token_id=self.tokenizer.eos_token_id,
340
+ temperature=0.7,
341
+ top_p=0.9,
342
+ do_sample=True
343
+ )
344
+
345
+ response = self.tokenizer.decode(
346
+ response_ids[:, input_ids.shape[-1]:][0],
347
+ skip_special_tokens=True
348
+ )
349
+
350
+ # Format response with source
351
+ source_urls = list(set(chunk[2] for chunk in best_chunks))
352
+ sources = "\n\nSources:\n" + "\n".join(source_urls)
353
+
354
+ return response + sources
355
+
356
+ except Exception as e:
357
+ logger.error(f"Error generating response: {e}")
358
+ return "I apologize, but I encountered an error while processing your question. Please try again."
359
 
360
  def create_gradio_interface(chatbot):
361
  def respond(user_input):
362
  return chatbot.generate_response(user_input)
363
+
364
  interface = gr.Interface(
365
  fn=respond,
366
+ inputs=gr.Textbox(
367
+ label="Ask a Question",
368
+ placeholder="Type your question here...",
369
+ lines=2
370
+ ),
371
+ outputs=gr.Textbox(
372
+ label="Answer",
373
+ placeholder="Response will appear here...",
374
+ lines=5
375
+ ),
376
  title="School Information Chatbot",
377
+ description="Ask about school events, policies, or other information. The chatbot will provide answers based on available school documents and resources.",
378
  examples=[
379
  ["What events are happening this week?"],
380
  ["When is the next board meeting?"],
381
+ ["What is the school's attendance policy?"]
382
  ],
383
+ theme=gr.themes.Soft(),
384
+ flagging_mode="never"
385
  )
386
  return interface
387
 
388
  if __name__ == "__main__":
389
+ try:
390
+ chatbot = SchoolChatbot()
391
+ interface = create_gradio_interface(chatbot)
392
+ interface.launch(
393
+ server_name="0.0.0.0",
394
+ server_port=7860,
395
+ share=False,
396
+ debug=True
397
+ )
398
+ except Exception as e:
399
+ logger.error(f"Failed to start application: {e}")