.
675 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 |
2 |
LibRead-Tool
3 | Converts online novels into audiobooks
4 |
5 |
6 |
7 |
8 | Introducing LibRead-tool – your go-to for turning online novels into awesome audio! Fetch your favourites and convert them into audiobooks. Say hello to hands-free storytelling!
9 |
10 |
11 |
12 |
13 |
14 |
15 | ## 🌸 Features
16 | - 🔍 **Search** novels directly within LibRead-Tool
17 | - 📕 Convert novels into one audiobook or **Split it into parts**
18 | - 💾 Embeds **ID3 tags** into the MP3 file
19 | - 🌐 **Scrapes LibRead** to fetch novels
20 |
21 | ## 🔧Installation
22 | #### Using Portable Builds
23 | - This is the recommended method if Python is not installed on your system.
24 | - Download the executable binary files from the release page for your system
25 | - To execute the program, use the following method
26 | - On Windows, double-click on the application to run it.
27 | - On Ubuntu-based distros, open a terminal in the directory where the executable file is saved and execute the following command `./LibRead-Tool_Zorin-OS`.
If you are getting a permission denied error, then you have to execute the command
`chmod +x LibRead-Tool_Zorin-OS` to make it executable.
28 |
29 | Running from source
30 |
31 | - You need Python, preferably version >= 3.9, to run the script files.
32 | - You can obtain the source code files either from the release page or by cloning this repo using git,
33 | - Downloading pip to resolve dependecies
34 | - Pip is required to download the packages required for the execution of the script. If your system doesn’t have pip installed, then you can use the following command to install
35 | - On Debian/Ubuntu-Based Distros
36 |
sudo apt-get install python3-pip
37 | - On Red Hat/Fedora-Based Distros
38 |
sudo dnf install python3-pip
39 |
40 |
41 |
42 |
43 | - Resolving dependencies using pip
44 | - Open a terminal in the src directory and execute the following command to obtain the packages required for the script.
45 |
pip install -r requirements.txt
46 |
47 |
48 | - Executing the script
49 | - To run the script, execute the following command in the terminal.
50 |
python3 ./libread-tool.py
51 |
52 |
53 |
54 |
55 |
56 | Installing Optional Dependency
57 |
58 | - FFmpeg is required to merge different sub-parts into one. It is not essential to have it installed, but it increases stability during conversions. If FFmpeg is not found in the system’s path, then it will fetch all the chapters in a single part and convert them at the end.
59 | - Use this guide to get it installed on your windows OS.
60 | - Most Linux distros come pre-installed with a supported version of FFmpeg. But, if that's not the case, then use the following command to get it installed.
61 | - On Debian/Ubuntu-based distros
62 |
sudo apt install ffmpeg
63 | - On Fedora-based distros
64 |
sudo dnf install ffmpeg
65 |
66 |
67 |
68 |
69 | ⚙️ Configuring
70 | Upon initial execution, the program will create a default configuration file inside the same directory named libread-config.ini. You can open that in any text editor, and you might change some options.
71 |
72 |
73 |
74 |
75 |
76 | Packages Used
77 |
78 | beautifulsoup4
79 |
80 | requests
81 |
82 | music-tag
83 |
84 | pynput
85 |
86 | PyWinCtl
87 |
88 | edge-tts
89 |
90 |
--------------------------------------------------------------------------------
/screenshots/RSS.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Spectre-hidN/LibRead-Tool/513a1d3cf9baa94841f13fd367a410b8024e9d65/screenshots/RSS.png
--------------------------------------------------------------------------------
/screenshots/SR.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Spectre-hidN/LibRead-Tool/513a1d3cf9baa94841f13fd367a410b8024e9d65/screenshots/SR.gif
--------------------------------------------------------------------------------
/src/build-command.txt:
--------------------------------------------------------------------------------
1 | pyinstaller --onefile --workpath "Temp/" --distpath "Build/" ./libread-tool.py --specpath "Temp/" -n "LibRead-Tool" -i "$pwd/favicon.ico"
--------------------------------------------------------------------------------
/src/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Spectre-hidN/LibRead-Tool/513a1d3cf9baa94841f13fd367a410b8024e9d65/src/favicon.ico
--------------------------------------------------------------------------------
/src/libread-tool.py:
--------------------------------------------------------------------------------
1 | import sys
2 | import os
3 | import shutil
4 | import time
5 | import asyncio
6 | import configparser
7 | from pynput import keyboard
8 | from pywinctl import getActiveWindow
9 | from utils.scrapper import checkConnection, search, getMetadata, getArticle
10 | from utils.Prettify import clearScreen, Prettify, clearLine
11 | from utils.tts import createTTSFromFile, createTTSFromText
12 | from utils.configGenerator import create_default_config
13 | from utils.ffmpegWrapper import performSanityCheck, mergeChunks
14 |
15 | CONFIG_FILE = "libread-config.ini"
16 |
17 | # Global varialbes. Values taken from the config file
18 | DOMAIN_NAME = COVER_IMAGE_NAME = OUTPUT_FILE_NAME = REPLACEMENT_CHARACTER = ""
19 | FORCE_USE_M1 = False
20 | PART_REPLACEMENT = True
21 |
22 | # global function declaration for simplicity
23 | printInf = Prettify.printInf
24 | printWar = Prettify.printWar
25 | printErr = Prettify.printErr
26 | printSuc = Prettify.printSuc
27 | printFeaturedText = Prettify.printFeaturedText
28 | progressBar = Prettify().progressBar
29 |
30 | def _readConfig():
31 | if(os.path.isfile(CONFIG_FILE)):
32 | try:
33 | config = configparser.ConfigParser()
34 | config.read(CONFIG_FILE)
35 | global DOMAIN_NAME, COVER_IMAGE_NAME, OUTPUT_FILE_NAME, REPLACEMENT_CHARACTER, FORCE_USE_M1, PART_REPLACEMENT
36 | DOMAIN_NAME = config.get("DOMAIN", "domainName")
37 | COVER_IMAGE_NAME = config.get("NOMENCLATURES", "coverImageNomenclature")
38 | OUTPUT_FILE_NAME = config.get("NOMENCLATURES", "outputNomenclature")
39 | REPLACEMENT_CHARACTER = config.get("NOMENCLATURES", "whitespaceReplacementCharacter")
40 | FORCE_USE_M1 = config.getboolean("TTS_CONFIG", "forceGrabFirstThenConvert")
41 | PART_REPLACEMENT = config.getboolean("TTS_CONFIG", "replacePartContents")
42 | except:
43 | printWar("Corrupted config file detected! Re-generating a new one...")
44 | time.sleep(2)
45 | create_default_config(CONFIG_FILE)
46 | _readConfig()
47 | else:
48 | create_default_config(CONFIG_FILE)
49 | _readConfig()
50 |
51 |
52 | if __name__ == "__main__":
53 | if os.name == 'nt':
54 | os.system("title LibRead-Tool")
55 | else:
56 | os.system('echo -en "\033]0;LibRead-Tool\a"')
57 |
58 | clearScreen()
59 |
60 | if os.name == 'nt':
61 | os.system("echo \033[38;5;12m\033[0m\r")
62 |
63 | print("""\033[38;5;78m _ _ _ ______ _ _______ _ \033[0m
64 | \033[38;5;78m(_) (_)| | (_____ \ | | (_______) | | \033[0m
65 | \033[38;5;78m _ _ | |__ _____) ) _____ _____ __| | _____ _ ___ ___ | | \033[0m
66 | \033[38;5;78m| | | || _ \ | __ / | ___ |(____ | / _ |(_____)| | / _ \ / _ \ | | \033[0m
67 | | |_____ | || |_) )| | \ \ | ____|/ ___ |( (_| | | || |_| || |_| || |
68 | |_______)|_||____/ |_| |_||_____)\_____| \____| |_| \___/ \___/ \_)
69 |
70 | """)
71 |
72 | _readConfig()
73 |
74 | if(not PART_REPLACEMENT):
75 | printFeaturedText("Content replacement is disabled! The LibRead Tool will not overwrite the existing parts before converting.")
76 |
77 | print("Checking connection with libread...")
78 | time.sleep(2)
79 | if(checkConnection()):
80 | printSuc("Connection established with libread successfully!")
81 | else:
82 | printErr("Error occured while connecting to libread! Check your Internet connection or firewall settings.")
83 | sys.exit(100)
84 |
85 | canUseM2ForTTS = False
86 | if performSanityCheck():
87 | canUseM2ForTTS = True
88 |
89 | if(FORCE_USE_M1 or not PART_REPLACEMENT):
90 | canUseM2ForTTS = False
91 |
92 | print("\n")
93 | query = input("Type to search something: ")
94 | results = search(query=query)
95 | selectedIndex = -1
96 | if(len(results) == 0):
97 | printWar(f"No results found for the query '{query}'. Try any other keywords!")
98 | input()
99 | sys.exit(404)
100 | elif(len(results) == 1):
101 | printSuc(f"1 hit found for the query '{query}'. Automatically selecting it...")
102 | selectedIndex = 1
103 | else:
104 | printSuc(f"Multiple hits found for the query '{query}'. Select the desired index...")
105 | i = 0
106 | print("\n\033[38;5;162mIndex\033[0m ---- \033[38;5;183mTitle\033[0m")
107 | for tag in results:
108 | print(f"\033[38;5;162m{i+1}\033[0m ---- \033[38;5;183m{tag['title']}\033[0m") if i < 9 else print(f"\033[38;5;162m{i+1}\033[0m ---- \033[38;5;183m{tag['title']}\033[0m")
109 | i+=1
110 | try:
111 | selectedIndex = int(input("Type the desired index from the above list: "))
112 | except:
113 | printErr("Invalid integer value! Aborting...")
114 | sys.exit(200)
115 | if(selectedIndex > len(results) or selectedIndex < 0):
116 | printWar("Index doesn't exists! Automatically selecting the last index...")
117 | selectedIndex = len(results) - 1
118 |
119 | selectedIndex-=1
120 | novelLink = f"https://{DOMAIN_NAME}" + results[selectedIndex]['href']
121 | print(f"\nSelected: {results[selectedIndex]['title']} || URL: {novelLink}")
122 | printInf(f"Getting metadata about {results[selectedIndex]['title']} from libread...")
123 | time.sleep(3)
124 | metadataResult = getMetadata(novelLink)
125 | totalChapters = len(metadataResult['chapters'])
126 | print(f"Total chapters found: \033[38;5;63m{len(metadataResult['chapters'])}\033[0m")
127 | print(f"Status: \033[38;5;51m{metadataResult['status']}\033[0m")
128 | print()
129 | startChapter = 1
130 | endChapter = totalChapters
131 | jump = 10
132 | try:
133 | startChapter = int(input("Mention the starting chapter [default = 1]: "))
134 | if(startChapter > startChapter):
135 | printWar("Starting chapter number exceeded total chapter found!")
136 | printInf("Setting starting chapter to 1...")
137 | else:
138 | printInf(f"Setting starting chapter to {startChapter}...")
139 | except:
140 | printWar("Invalid input detected!")
141 | printInf("Setting starting chapter to 1...")
142 |
143 | try:
144 | endChapter = int(input(f"Mention the last chapter [default = {totalChapters}]: "))
145 | if(endChapter < 1):
146 | printWar("Ending chapter number less than the first chapter!")
147 | printInf(f"Setting Ending chapter to {totalChapters}...")
148 | else:
149 | printInf(f"Setting Ending chapter to {endChapter}...")
150 | except:
151 | printWar("Invalid input detected!")
152 | printInf(f"Setting Ending chapter to {totalChapters}...")
153 |
154 | try:
155 | jump = int(input("Mention number of chapters in each part [default = 10]: "))
156 | if(jump > 30):
157 | printWar("Too many chapters detected in single part! Expect abnormal behaviour.")
158 | except:
159 | pass
160 | isPause = False
161 | pauseInput = input("Do you want to pause after each part? (y/n): ")
162 | isPause = True if pauseInput == "y" else False
163 |
164 | if(isPause):
165 | printInf("Process will pause after each part! Press 'R' to resume.")
166 |
167 | isTTS = False
168 | ttsInput = input("Do you want to convert text to speech? (y/n): ")
169 | isTTS = True if ttsInput == "y" else False
170 |
171 | if(isTTS):
172 | printInf("Texts will be converted to speech.")
173 |
174 | #Create a directory for saving the files
175 | if(not os.path.isdir(results[selectedIndex]['title']) and not os.path.isdir("Articles")):
176 | try:
177 | os.mkdir(results[selectedIndex]['title'])
178 | except:
179 | os.mkdir("Articles")
180 |
181 | #save cover image
182 | imageName = COVER_IMAGE_NAME.replace("!TITLE!", results[selectedIndex]['title']) + '.jpg'
183 | if(REPLACEMENT_CHARACTER != ""):
184 | imageName = imageName.replace(" ", REPLACEMENT_CHARACTER)
185 | if(metadataResult["cover-image"]!=None):
186 | printInf("\nSaving cover image...")
187 | try:
188 | with open(f"{results[selectedIndex]['title']}/{imageName}", 'wb') as bf:
189 | for chunk in metadataResult['cover-image']:
190 | bf.write(chunk)
191 | bf.close()
192 | except:
193 | with open(f"Articles/{imageName}", 'wb') as bf:
194 | for chunk in metadataResult['cover-image']:
195 | bf.write(chunk)
196 | bf.close()
197 | time.sleep(1)
198 | printSuc(f"Cover image saved as {results[selectedIndex]['title']}/{imageName}")
199 |
200 | part = 1
201 | progress = 0
202 | printInf("Getting articles from libread...")
203 |
204 | for i in range(startChapter-2, endChapter, jump):
205 | mergedArticle = ""
206 | for j in range(i+1, i+jump+1):
207 | if(j>endChapter-1):
208 | break
209 | articleLink = f"https://{DOMAIN_NAME}" + metadataResult['chapters'][j]['href']
210 | article = getArticle(articleLink)
211 | clearLine()
212 | progressBar(total_size=endChapter-startChapter, size_done=progress, fill_symbol="■", length=35, suffix="There")
213 |
214 | # use M2 for TTS
215 | if(isTTS and canUseM2ForTTS):
216 | progressBar(total_size=endChapter-startChapter, size_done=progress, fill_symbol="■", length=35, suffix="There \033[38;5;141m[CONVERTING]\033[0m {Chapter - {0}}".replace("{0}", str(j+1)))
217 |
218 | # Create the enviroment for the current cycle
219 | wd = results[selectedIndex]['title'] + "/.OPD"
220 | if not os.path.isdir(wd): os.mkdir(wd)
221 |
222 | try:
223 | asyncio.run(createTTSFromText(text=article, outputPath=(wd+f"/Chapter-{str(j+1)}.mp3"), coverImagePath=f"{results[selectedIndex]['title']}/{imageName}"))
224 | except Exception as E:
225 | printErr(f"Fatal Exception occured during conversion. Couldn't proceed further with TTS. {E}")
226 | isTTs = False
227 |
228 | mergedArticle += article + "\n\n"
229 | progress += 1
230 | endChapterName = i+jump+1
231 | if(i+jump+1 > endChapter):
232 | endChapterName = endChapter
233 | #results[selectedIndex]['title']} ~ Chapter-{i+2}-{endChapterName}
234 | actualOutputFileName = OUTPUT_FILE_NAME.replace("!TITLE!", results[selectedIndex]['title']).replace("!STARTCHAPTER!", str((i+2))).replace("!ENDCHAPTER!", str(endChapterName))
235 | if(REPLACEMENT_CHARACTER != ""):
236 | actualOutputFileName = actualOutputFileName.replace(" ", REPLACEMENT_CHARACTER)
237 | if(i+1 < endChapter):
238 | try:
239 | if (not PART_REPLACEMENT and os.path.isfile(f"{results[selectedIndex]['title']}/{actualOutputFileName}.txt")):
240 | pass
241 | else:
242 | with open(f"{results[selectedIndex]['title']}/{actualOutputFileName}.txt", "w", encoding='utf-8') as f:
243 | f.write(mergedArticle)
244 | f.close()
245 | except:
246 | if(not PART_REPLACEMENT and os.path.isfile(f"Articles/{actualOutputFileName}.txt")):
247 | pass
248 | else:
249 | with open(f"Articles/{actualOutputFileName}.txt", "w", encoding='utf-8') as f:
250 | f.write(mergedArticle)
251 | f.close()
252 |
253 | # merge converted chunks and delete the opd folder
254 | if(isTTS and canUseM2ForTTS):
255 | clearLine()
256 | progressBar(total_size=endChapter-startChapter, size_done=progress, fill_symbol="■", length=35, suffix="There \033[38;5;87m[CONCATENATING]\033[0m ")
257 | mergeChunks(chunkFilesDir=results[selectedIndex]['title'] + "/.OPD",
258 | outputFilePrefix=f"{results[selectedIndex]['title']}/{actualOutputFileName}",
259 | coverImagePath=f"{results[selectedIndex]['title']}/{imageName}")
260 | shutil.rmtree(results[selectedIndex]['title'] + "/.OPD")
261 |
262 | if(isTTS and not canUseM2ForTTS):
263 | clearLine()
264 | progressBar(total_size=endChapter-startChapter, size_done=progress, fill_symbol="■", length=35, suffix="There \033[38;5;141m[CONVERTING]\033[0m {Chapter: {startChapter}-{EndChapter}}".replace("{startChapter}", str(i+2)).replace("{EndChapter}", str(endChapterName)))
265 | try:
266 | asyncio.run(createTTSFromFile(filepath=f"{results[selectedIndex]['title']}/{actualOutputFileName}.txt", outputFilePrefix=f"{results[selectedIndex]['title']}/{actualOutputFileName}", coverImagePath=f"{results[selectedIndex]['title']}/{imageName}"))
267 | except:
268 | try:
269 | asyncio.run(createTTSFromFile(filepath=f"Articles/{actualOutputFileName}.txt", outputFilePrefix=f"Articles/{actualOutputFileName}", coverImagePath=f"Articles/{imageName}"))
270 | except Exception as E:
271 | printErr("\nFatal error Occured while converting text to speech! Couldn't proceed further with TTS. {E}")
272 |
273 | # breaks on Windows and wayland
274 | if(isPause and progress != ((endChapter-startChapter))+1):
275 | clearLine()
276 | progressBar(total_size=endChapter-startChapter, size_done=progress, fill_symbol="■", length=35, suffix="There \033[38;5;226m[PAUSED]\033[0m ")
277 | def pause_process():
278 | with keyboard.Events() as events:
279 | event = events.get(1e6)
280 | if("libread-tool" in (" " + getActiveWindow().title.lower() + " ") or "visual studio code" in getActiveWindow().title.lower()):
281 | if(event.key == keyboard.KeyCode.from_char('r')):
282 | return
283 | else:
284 | event = None
285 | pause_process()
286 | else:
287 | event = None
288 | pause_process()
289 | pause_process()
290 |
291 | clearLine()
292 | progressBar(total_size=endChapter-startChapter, size_done=progress, fill_symbol="■", length=35, suffix="There ")
293 |
294 |
295 | clearLine()
296 | print()
297 | printFeaturedText("Fetched all chapters successfully!", msgColorCode=105, blinkersColorCode=46)
298 | print(f"All chapters are stored inside the {results[selectedIndex]['title']} directory.")
299 | input()
300 |
--------------------------------------------------------------------------------
/src/requirements.txt:
--------------------------------------------------------------------------------
1 | beautifulsoup4==4.11.2
2 | edge_tts==6.1.9
3 | hrequests==0.9.2
4 | music_tag==0.4.3
5 | pynput==1.7.6
6 | PyWinCtl==0.3
7 | Requests==2.32.3
8 | urllib3==1.26.14
9 |
--------------------------------------------------------------------------------
/src/utils/Prettify.py:
--------------------------------------------------------------------------------
1 | import sys
2 | import os
3 | import time
4 |
5 | def clearScreen():
6 | """
7 | Clears the terminal
8 | """
9 | if os.name == 'nt':
10 | os.system("cls")
11 | else:
12 | os.system("clear")
13 |
14 | def clearLine():
15 | """
16 | Clears the current line
17 | """
18 | length = os.get_terminal_size()[0]
19 | whiteSpace = " "*length
20 | print(whiteSpace, end="\r")
21 |
22 | class Prettify():
23 |
24 | def __init__(self):
25 | """Return specified color escape c0des if flushCodes flag is False else flush it to the console."""
26 |
27 | #For some unknown reason window's command prompt does not recognise any escape code unless it is registered/cache using system calls. The below line will make sure to recognise all escape codes.
28 | if os.name == 'nt':
29 | os.system('echo|set /p="\033[38;5;12m\033[0m"')
30 |
31 | try:
32 | if sys.argv[1] == 'dump_cols':
33 | self.flushCodes = True
34 | else:
35 | self.flushCodes = False
36 | except:
37 | self.flushCodes = False
38 |
39 | try:
40 | if sys.argv[1] == 'dump_bgs':
41 | self.OnlyBG = True
42 | else:
43 | self.OnlyBG = False
44 | except:
45 | self.OnlyBG = False
46 |
47 | def dump_colors(self, code=None, ForBG=False):
48 | for i in range(0, 256):
49 | color_code = str(i)
50 | if not self.OnlyBG:
51 | escape_code = u"\u001b[38;5;" + color_code + "m"
52 | else:
53 | escape_code = "\033[48;5;" + color_code + "m"
54 | if code != None:
55 | if str(code) == color_code:
56 | return escape_code
57 | elif code == None:
58 | if self.OnlyBG or self.flushCodes:
59 | sys.stdout.write(escape_code + color_code.ljust(4) + " ")
60 |
61 | def progressBar(self, total_size: int, size_done: int, prefix="On the way!", suffix="There", length=None, fill_symbol='█', ToBeFill_symbol=' ', static_color=[]): #type: ignore
62 | """
63 | Simple Progress bar that changes colors upon progress!
64 |
65 | PARAMETERS --> length {DEFAULT: os.get_terminal_size()[0] - len(prefix) - len(suffix)- 11}
66 | prefix {DEFAULT: "On the way!"}
67 | suffix {DEFAULT: "There"}
68 | total_size {DATATYPE: int} [REQUIRED]
69 | size_done {DATATYPE: int} [REQUIRED]
70 | fill_symbol {DEFAULT: '█'}
71 | ToBeFill_symbol {DEFAULT: ' '}
72 | static_color {DEFAULT: []} (Index: [0 -> fill_symbol, 1 -> ToBeFill_symbol])
73 |
74 | NOTE --> endline (\n) should be provided after the job is completed to bring the cursor to a new line.
75 | When Overriding the 'fill_symbol' or 'ToBeFill_symbol' with characters of different length, then specifying the length manually might required.
76 | """
77 | decimals = 1
78 | if length == None:
79 | length = os.get_terminal_size()[0] - len(prefix) - len(suffix) - 11
80 | if len(fill_symbol) > 1:
81 | length = length // len(fill_symbol)
82 | total = total_size
83 | ToBeFill_length = len(fill_symbol) // len(ToBeFill_symbol)
84 |
85 | try:
86 | ToBeFill_symbol = self.dump_colors(code=static_color[1]) + ToBeFill_symbol + self.dump_colors(code=7)
87 | except (IndexError, TypeError):
88 | pass
89 |
90 | # Progress Bar Printing Function
91 | def printProgressBar(iteration):
92 | if self.flushCodes == True:
93 | exit(0)
94 | percent = round(float(("{0:." + str(decimals) + "f}").format(100 * (iteration / float(total)))) + 0.1, 1)
95 |
96 | if percent > float(100):
97 | percent = 100.0
98 |
99 | fill_color_applied = False
100 | try:
101 | fill = self.dump_colors(code=static_color[0]) + fill_symbol + self.dump_colors(code=7)
102 | fill_color_applied = True
103 | except (IndexError, TypeError):
104 | pass
105 |
106 | if not fill_color_applied:
107 | if percent >= float(0) and percent <= float(11):
108 | fill = self.dump_colors(
109 | code=124) + fill_symbol + self.dump_colors(code=7)
110 | elif percent > float(11) and percent <= float(21):
111 | fill = self.dump_colors(
112 | code=196) + fill_symbol + self.dump_colors(code=7)
113 | elif percent > float(21) and percent <= float(31):
114 | fill = self.dump_colors(
115 | code=202) + fill_symbol + self.dump_colors(code=7)
116 | elif percent > float(31) and percent <= float(41):
117 | fill = self.dump_colors(
118 | code=208) + fill_symbol + self.dump_colors(code=7)
119 | elif percent > float(41) and percent <= float(55):
120 | fill = self.dump_colors(
121 | code=220) + fill_symbol + self.dump_colors(code=7)
122 | elif percent > float(55) and percent <= float(71):
123 | fill = self.dump_colors(
124 | code=190) + fill_symbol + self.dump_colors(code=7)
125 | elif percent > float(71) and percent <= float(85):
126 | fill = self.dump_colors(
127 | code=34) + fill_symbol + self.dump_colors(code=7)
128 | elif percent > float(85):
129 | fill = self.dump_colors(
130 | code=46) + fill_symbol + self.dump_colors(code=7)
131 |
132 | filledLength = int(length * iteration // total) + 1
133 | bar = fill * filledLength + (ToBeFill_symbol * ToBeFill_length) * (length - filledLength)
134 | print(f'\r{prefix} |{bar}| {percent}% {suffix}', end="\r")
135 | if self.flushCodes or self.OnlyBG:
136 | exit(0)
137 | else:
138 | printProgressBar(size_done)
139 |
140 | def dump_styles(self, styles=None):
141 | """
142 | Return esacpe code of specified
143 | *** Tested on Unix terminal ***
144 | """
145 |
146 | if styles == 'bold':
147 | return "\033[1m"
148 | elif styles == 'faint':
149 | return '\033[2m'
150 | elif styles == 'italic':
151 | return '\033[3m'
152 | elif styles == 'underline':
153 | return '\033[4m'
154 | elif styles == 'blink':
155 | return '\033[5m'
156 | elif styles == 'reverse':
157 | return '\033[7m'
158 | elif styles == 'conceal':
159 | return '\033[8m'
160 | elif styles == 'crossed-out':
161 | return '\033[9m'
162 | elif styles == 'double-underline':
163 | return '\033[21m'
164 | elif styles == 'bold-off' or styles == 'faint-off':
165 | return '\033[22m'
166 | elif styles == 'italic-off':
167 | return '\033[23m'
168 | elif styles == 'underline-off':
169 | return '\033[24m'
170 | elif styles == 'blink-off':
171 | return '\033[25m'
172 | elif styles == 'reverse-off':
173 | return '\033[27m'
174 | elif styles == 'reveal' or styles == 'conceal-off': #type: ignore
175 | return '\033[28m'
176 | elif styles == 'crossed-out-off':
177 | return '\033[29m'
178 | elif styles == "overlined":
179 | return '\033[53m'
180 | elif styles == 'overlined-off':
181 | return '\033[55m'
182 | elif styles == 'reset':
183 | return '\033[0m'
184 |
185 | @staticmethod
186 | def printErr(msg: str, pauseOnError = True) -> None:
187 | obj = Prettify()
188 | print(f"{obj.dump_colors(code=196)}{msg}{obj.dump_styles(styles='reset')}")
189 | input() if pauseOnError else None
190 |
191 | @staticmethod
192 | def printSuc(msg: str) -> None:
193 | obj = Prettify()
194 | print(f"{obj.dump_colors(code=46)}{msg}{obj.dump_styles(styles='reset')}")
195 |
196 | @staticmethod
197 | def printWar(msg: str) -> None:
198 | obj = Prettify()
199 | print(f"{obj.dump_colors(code=208)}{msg}{obj.dump_styles(styles='reset')}")
200 |
201 | @staticmethod
202 | def printInf(msg: str) -> None:
203 | obj = Prettify()
204 | print(f"{obj.dump_colors(code=198)}{msg}{obj.dump_styles(styles='reset')}")
205 |
206 | @staticmethod
207 | def printFeaturedText(msg: str, blinkersColorCode = 196, msgColorCode = 226):
208 | self = Prettify()
209 | print(self.dump_styles(styles='blink') + self.dump_colors(code=blinkersColorCode) + '♦ ' + self.dump_styles(styles='blink-off') + self.dump_colors(code=msgColorCode) + msg + self.dump_styles(styles='blink') + self.dump_colors(code=blinkersColorCode) + ' ♦' + self.dump_styles(styles='reset'))
210 |
211 | if __name__ == "__main__":
212 | """For Debugging and Initial testing purposes"""
213 |
214 | cl = Prettify()
215 | cl.dump_colors()
216 | dump_styles = False
217 | try:
218 | if sys.argv[1] == 'dump_styles':
219 | dump_styles = True
220 | else:
221 | dump_styles = False
222 | except:
223 | pass
224 | if dump_styles:
225 | #show styles
226 | print(cl.dump_styles(styles='underline') + 'Styles' + cl.dump_styles(styles='underline-off') + ' ' + cl.dump_styles(styles='underline') + 'Codename' + cl.dump_styles(styles='underline-off'))
227 | print(cl.dump_styles(styles='bold') + "Bold Text" + cl.dump_styles(styles='bold-off') + ' ' + 'bold, bold-off')
228 | print(cl.dump_styles(styles='faint') + "Faint Text" + cl.dump_styles(styles='faint-off') + ' ' + 'faint, faint-off')
229 | print(cl.dump_styles(styles='italic') + "Italic Text" + cl.dump_styles(styles='italic-off') + ' ' + 'italic, italic-off')
230 | print(cl.dump_styles(styles='underline') + "Underlined Text" + cl.dump_styles(styles='underline-off') + ' ' + 'underline, underline-off')
231 | print(cl.dump_styles(styles='blink') + "Blinking Text" + cl.dump_styles(styles='blink-off') + ' ' + 'blink, blink-off')
232 | print(cl.dump_styles(styles='reverse') + "Inverse FG/BG" + cl.dump_styles(styles='reverse-off') + ' ' + 'reverse, reverse-off')
233 | print(cl.dump_styles(styles='conceal') + "Conceal Text" + cl.dump_styles(styles='reveal') + ' ' + 'conceal, reveal')
234 | print(cl.dump_styles(styles='overlined') + "Overlined Text" + cl.dump_styles(styles='overlined-off') + ' ' + 'overlined, overlined-off')
235 | print(cl.dump_styles(styles='crossed-out') + "Crossed Text" + cl.dump_styles(styles='crossed-out-off') + ' ' + 'crossed-out, crossed-out-off')
236 | print(cl.dump_styles(styles='double-underline') + "Double underlined Text" + cl.dump_styles(styles='underline-off') + ' ' + 'double-underline, underline-off')
237 | print()
238 | print(cl.dump_styles(styles='blink') + cl.dump_colors(code=196) + '♦ ' + cl.dump_styles(styles='blink-off') + cl.dump_colors(code=226) + 'Tested on Unix Terminal. Some styles may not work on other platforms' + cl.dump_styles(styles='blink') + cl.dump_colors(code=196) + ' ♦' + cl.dump_styles(styles='reset'))
239 | else:
240 | for i in range(123452):
241 | time.sleep(0.0001)
242 | cl.progressBar(total_size=123452, size_done=i, fill_symbol=' ☻ ', ToBeFill_symbol=' ☺ ', length=20)
243 | print()
244 |
--------------------------------------------------------------------------------
/src/utils/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Spectre-hidN/LibRead-Tool/513a1d3cf9baa94841f13fd367a410b8024e9d65/src/utils/__init__.py
--------------------------------------------------------------------------------
/src/utils/configGenerator.py:
--------------------------------------------------------------------------------
1 | def create_default_config(config_name):
2 |
3 | searchResultSelector = "body > div.main > div.wp > div.row-box > div.col-content > div > div > div > div > div.txt > h3 > a"
4 | statusSelectorI = "body > div.main > div > div > div.col-content > div.m-info > div.m-book1 > div.m-imgtxt > div.txt > div:nth-child(6) > div > span"
5 | statusSelectorII = "body > div.main > div > div > div.col-content > div.m-info > div.m-book1 > div.m-imgtxt > div.txt > div:nth-child(5) > div > span"
6 | statusSelectorIII = "body > div.main > div > div > div.col-content > div.m-info > div.m-book1 > div.m-imgtxt > div.txt > div:nth-child(4) > div > span"
7 | totalChaptersSelector = "#idData > li > a"
8 | coverImageDivSelector = "body > div.main > div > div > div.col-content > div.m-info > div.m-book1 > div.m-imgtxt > div.pic > img"
9 | articleDivSelector = "#article > p"
10 |
11 | with open(config_name, 'w', encoding='utf-8') as cf:
12 | cf.write(f"""[DOMAIN]
13 |
14 | ; Change the domain name
15 |
16 | domainName = libread.com
17 |
18 | ; Modify the headers if the server is blocking your requests for being headless.
19 | origin = https://libread.com
20 | referer = https://libread.com/
21 | authority = libread.com
22 | userAgent = Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36
23 |
24 |
25 | [SELECTOR_MAPS]
26 |
27 | ; These are the advanced settings to fix if the website changes its document structure.
28 | ; IT IS NOT RECOMMENDED TO MODIFY.
29 |
30 | searchResultSelector = {searchResultSelector}
31 | statusSelectorI = {statusSelectorI}
32 | statusSelectorII = {statusSelectorII}
33 | statusSelectorIII = {statusSelectorIII}
34 | totalChaptersSelector = {totalChaptersSelector}
35 | coverImageDivSelector = {coverImageDivSelector}
36 | articleDivSelector = {articleDivSelector}
37 |
38 | [NOMENCLATURES]
39 |
40 | ; You can only use the below variables to set up a name. use ! at both ends to indicate its a variable.
41 | ; TITLE -> Name of the novel
42 | ; STARTCHAPTER -> Indicates the starting chapter number of the part
43 | ; ENDCHAPTER -> Indicates the ending chapter number of the part
44 |
45 | ; Change the nomenclature for the output file. Affects both .txt and .mp3 file
46 | outputNomenclature = !TITLE! ~ Chapter-!STARTCHAPTER!-!ENDCHAPTER!
47 |
48 | ; Nomenclature for the cover image
49 | coverImageNomenclature = !TITLE! ~ Cover
50 |
51 | ; Replace WHITESPACE
52 | ; By befault it doesn't replace any WHITESPACE.
53 | ; But, if any of the variable has a WHITESPACE then it will be replaced by the given charater
54 |
55 | whitespaceReplacementCharacter =
56 |
57 |
58 | [TTS_CONFIG]
59 |
60 | ; Choose a voice name from the below list
61 | Voice = en-GB-SoniaNeural
62 |
63 | ; Embed unsynced subtitles to the mp3 file
64 | ; 1 = yes, 0 = no
65 | embedSubtitles = 1
66 |
67 | ; Enabling the below switch will force LibRead-Tool to fetch all the articles first in a part, then convert Text-To-Speech.
68 | ; Usually, this happens when FFMPEG is not accessible by LibRead-Tool.
69 | ; 1 = yes, 0 = no
70 | forceGrabFirstThenConvert = 0
71 |
72 | ; If the below switch is enabled, then LibRead-Tool will replace the existing parts with the new ones.
73 | ; However, if you deactivate the switch, LibRead-Tool will not overwrite the material if the part file already exists, even if the contents are only partially available.
74 | ; Disabling this will force the "forceGrabFirstThenConvert" switch to be enabled.
75 | ; 1 = yes, 0 = no
76 | replacePartContents = 1
77 |
78 | ; All Voices are lsited below
79 | ; Name: af-ZA-AdriNeural
80 | ; Gender: Female
81 | ;
82 | ; Name: af-ZA-WillemNeural
83 | ; Gender: Male
84 | ;
85 | ; Name: am-ET-AmehaNeural
86 | ; Gender: Male
87 | ;
88 | ; Name: am-ET-MekdesNeural
89 | ; Gender: Female
90 | ;
91 | ; Name: ar-AE-FatimaNeural
92 | ; Gender: Female
93 | ;
94 | ; Name: ar-AE-HamdanNeural
95 | ; Gender: Male
96 | ;
97 | ; Name: ar-BH-AliNeural
98 | ; Gender: Male
99 | ;
100 | ; Name: ar-BH-LailaNeural
101 | ; Gender: Female
102 | ;
103 | ; Name: ar-DZ-AminaNeural
104 | ; Gender: Female
105 | ;
106 | ; Name: ar-DZ-IsmaelNeural
107 | ; Gender: Male
108 | ;
109 | ; Name: ar-EG-SalmaNeural
110 | ; Gender: Female
111 | ;
112 | ; Name: ar-EG-ShakirNeural
113 | ; Gender: Male
114 | ;
115 | ; Name: ar-IQ-BasselNeural
116 | ; Gender: Male
117 | ;
118 | ; Name: ar-IQ-RanaNeural
119 | ; Gender: Female
120 | ;
121 | ; Name: ar-JO-SanaNeural
122 | ; Gender: Female
123 | ;
124 | ; Name: ar-JO-TaimNeural
125 | ; Gender: Male
126 | ;
127 | ; Name: ar-KW-FahedNeural
128 | ; Gender: Male
129 | ;
130 | ; Name: ar-KW-NouraNeural
131 | ; Gender: Female
132 | ;
133 | ; Name: ar-LB-LaylaNeural
134 | ; Gender: Female
135 | ;
136 | ; Name: ar-LB-RamiNeural
137 | ; Gender: Male
138 | ;
139 | ; Name: ar-LY-ImanNeural
140 | ; Gender: Female
141 | ;
142 | ; Name: ar-LY-OmarNeural
143 | ; Gender: Male
144 | ;
145 | ; Name: ar-MA-JamalNeural
146 | ; Gender: Male
147 | ;
148 | ; Name: ar-MA-MounaNeural
149 | ; Gender: Female
150 | ;
151 | ; Name: ar-OM-AbdullahNeural
152 | ; Gender: Male
153 | ;
154 | ; Name: ar-OM-AyshaNeural
155 | ; Gender: Female
156 | ;
157 | ; Name: ar-QA-AmalNeural
158 | ; Gender: Female
159 | ;
160 | ; Name: ar-QA-MoazNeural
161 | ; Gender: Male
162 | ;
163 | ; Name: ar-SA-HamedNeural
164 | ; Gender: Male
165 | ;
166 | ; Name: ar-SA-ZariyahNeural
167 | ; Gender: Female
168 | ;
169 | ; Name: ar-SY-AmanyNeural
170 | ; Gender: Female
171 | ;
172 | ; Name: ar-SY-LaithNeural
173 | ; Gender: Male
174 | ;
175 | ; Name: ar-TN-HediNeural
176 | ; Gender: Male
177 | ;
178 | ; Name: ar-TN-ReemNeural
179 | ; Gender: Female
180 | ;
181 | ; Name: ar-YE-MaryamNeural
182 | ; Gender: Female
183 | ;
184 | ; Name: ar-YE-SalehNeural
185 | ; Gender: Male
186 | ;
187 | ; Name: az-AZ-BabekNeural
188 | ; Gender: Male
189 | ;
190 | ; Name: az-AZ-BanuNeural
191 | ; Gender: Female
192 | ;
193 | ; Name: bg-BG-BorislavNeural
194 | ; Gender: Male
195 | ;
196 | ; Name: bg-BG-KalinaNeural
197 | ; Gender: Female
198 | ;
199 | ; Name: bn-BD-NabanitaNeural
200 | ; Gender: Female
201 | ;
202 | ; Name: bn-BD-PradeepNeural
203 | ; Gender: Male
204 | ;
205 | ; Name: bn-IN-BashkarNeural
206 | ; Gender: Male
207 | ;
208 | ; Name: bn-IN-TanishaaNeural
209 | ; Gender: Female
210 | ;
211 | ; Name: bs-BA-GoranNeural
212 | ; Gender: Male
213 | ;
214 | ; Name: bs-BA-VesnaNeural
215 | ; Gender: Female
216 | ;
217 | ; Name: ca-ES-EnricNeural
218 | ; Gender: Male
219 | ;
220 | ; Name: ca-ES-JoanaNeural
221 | ; Gender: Female
222 | ;
223 | ; Name: cs-CZ-AntoninNeural
224 | ; Gender: Male
225 | ;
226 | ; Name: cs-CZ-VlastaNeural
227 | ; Gender: Female
228 | ;
229 | ; Name: cy-GB-AledNeural
230 | ; Gender: Male
231 | ;
232 | ; Name: cy-GB-NiaNeural
233 | ; Gender: Female
234 | ;
235 | ; Name: da-DK-ChristelNeural
236 | ; Gender: Female
237 | ;
238 | ; Name: da-DK-JeppeNeural
239 | ; Gender: Male
240 | ;
241 | ; Name: de-AT-IngridNeural
242 | ; Gender: Female
243 | ;
244 | ; Name: de-AT-JonasNeural
245 | ; Gender: Male
246 | ;
247 | ; Name: de-CH-JanNeural
248 | ; Gender: Male
249 | ;
250 | ; Name: de-CH-LeniNeural
251 | ; Gender: Female
252 | ;
253 | ; Name: de-DE-AmalaNeural
254 | ; Gender: Female
255 | ;
256 | ; Name: de-DE-ConradNeural
257 | ; Gender: Male
258 | ;
259 | ; Name: de-DE-FlorianMultilingualNeural
260 | ; Gender: Male
261 | ;
262 | ; Name: de-DE-KatjaNeural
263 | ; Gender: Female
264 | ;
265 | ; Name: de-DE-KillianNeural
266 | ; Gender: Male
267 | ;
268 | ; Name: de-DE-SeraphinaMultilingualNeural
269 | ; Gender: Female
270 | ;
271 | ; Name: el-GR-AthinaNeural
272 | ; Gender: Female
273 | ;
274 | ; Name: el-GR-NestorasNeural
275 | ; Gender: Male
276 | ;
277 | ; Name: en-AU-NatashaNeural
278 | ; Gender: Female
279 | ;
280 | ; Name: en-AU-WilliamNeural
281 | ; Gender: Male
282 | ;
283 | ; Name: en-CA-ClaraNeural
284 | ; Gender: Female
285 | ;
286 | ; Name: en-CA-LiamNeural
287 | ; Gender: Male
288 | ;
289 | ; Name: en-GB-LibbyNeural
290 | ; Gender: Female
291 | ;
292 | ; Name: en-GB-MaisieNeural
293 | ; Gender: Female
294 | ;
295 | ; Name: en-GB-RyanNeural
296 | ; Gender: Male
297 | ;
298 | ; Name: en-GB-SoniaNeural
299 | ; Gender: Female
300 | ;
301 | ; Name: en-GB-ThomasNeural
302 | ; Gender: Male
303 | ;
304 | ; Name: en-HK-SamNeural
305 | ; Gender: Male
306 | ;
307 | ; Name: en-HK-YanNeural
308 | ; Gender: Female
309 | ;
310 | ; Name: en-IE-ConnorNeural
311 | ; Gender: Male
312 | ;
313 | ; Name: en-IE-EmilyNeural
314 | ; Gender: Female
315 | ;
316 | ; Name: en-IN-NeerjaExpressiveNeural
317 | ; Gender: Female
318 | ;
319 | ; Name: en-IN-NeerjaNeural
320 | ; Gender: Female
321 | ;
322 | ; Name: en-IN-PrabhatNeural
323 | ; Gender: Male
324 | ;
325 | ; Name: en-KE-AsiliaNeural
326 | ; Gender: Female
327 | ;
328 | ; Name: en-KE-ChilembaNeural
329 | ; Gender: Male
330 | ;
331 | ; Name: en-NG-AbeoNeural
332 | ; Gender: Male
333 | ;
334 | ; Name: en-NG-EzinneNeural
335 | ; Gender: Female
336 | ;
337 | ; Name: en-NZ-MitchellNeural
338 | ; Gender: Male
339 | ;
340 | ; Name: en-NZ-MollyNeural
341 | ; Gender: Female
342 | ;
343 | ; Name: en-PH-JamesNeural
344 | ; Gender: Male
345 | ;
346 | ; Name: en-PH-RosaNeural
347 | ; Gender: Female
348 | ;
349 | ; Name: en-SG-LunaNeural
350 | ; Gender: Female
351 | ;
352 | ; Name: en-SG-WayneNeural
353 | ; Gender: Male
354 | ;
355 | ; Name: en-TZ-ElimuNeural
356 | ; Gender: Male
357 | ;
358 | ; Name: en-TZ-ImaniNeural
359 | ; Gender: Female
360 | ;
361 | ; Name: en-US-AnaNeural
362 | ; Gender: Female
363 | ;
364 | ; Name: en-US-AndrewNeural
365 | ; Gender: Male
366 | ;
367 | ; Name: en-US-AriaNeural
368 | ; Gender: Female
369 | ;
370 | ; Name: en-US-AvaNeural
371 | ; Gender: Female
372 | ;
373 | ; Name: en-US-BrianNeural
374 | ; Gender: Male
375 | ;
376 | ; Name: en-US-ChristopherNeural
377 | ; Gender: Male
378 | ;
379 | ; Name: en-US-EmmaNeural
380 | ; Gender: Female
381 | ;
382 | ; Name: en-US-EricNeural
383 | ; Gender: Male
384 | ;
385 | ; Name: en-US-GuyNeural
386 | ; Gender: Male
387 | ;
388 | ; Name: en-US-JennyNeural
389 | ; Gender: Female
390 | ;
391 | ; Name: en-US-MichelleNeural
392 | ; Gender: Female
393 | ;
394 | ; Name: en-US-RogerNeural
395 | ; Gender: Male
396 | ;
397 | ; Name: en-US-SteffanNeural
398 | ; Gender: Male
399 | ;
400 | ; Name: en-ZA-LeahNeural
401 | ; Gender: Female
402 | ;
403 | ; Name: en-ZA-LukeNeural
404 | ; Gender: Male
405 | ;
406 | ; Name: es-AR-ElenaNeural
407 | ; Gender: Female
408 | ;
409 | ; Name: es-AR-TomasNeural
410 | ; Gender: Male
411 | ;
412 | ; Name: es-BO-MarceloNeural
413 | ; Gender: Male
414 | ;
415 | ; Name: es-BO-SofiaNeural
416 | ; Gender: Female
417 | ;
418 | ; Name: es-CL-CatalinaNeural
419 | ; Gender: Female
420 | ;
421 | ; Name: es-CL-LorenzoNeural
422 | ; Gender: Male
423 | ;
424 | ; Name: es-CO-GonzaloNeural
425 | ; Gender: Male
426 | ;
427 | ; Name: es-CO-SalomeNeural
428 | ; Gender: Female
429 | ;
430 | ; Name: es-CR-JuanNeural
431 | ; Gender: Male
432 | ;
433 | ; Name: es-CR-MariaNeural
434 | ; Gender: Female
435 | ;
436 | ; Name: es-CU-BelkysNeural
437 | ; Gender: Female
438 | ;
439 | ; Name: es-CU-ManuelNeural
440 | ; Gender: Male
441 | ;
442 | ; Name: es-DO-EmilioNeural
443 | ; Gender: Male
444 | ;
445 | ; Name: es-DO-RamonaNeural
446 | ; Gender: Female
447 | ;
448 | ; Name: es-EC-AndreaNeural
449 | ; Gender: Female
450 | ;
451 | ; Name: es-EC-LuisNeural
452 | ; Gender: Male
453 | ;
454 | ; Name: es-ES-AlvaroNeural
455 | ; Gender: Male
456 | ;
457 | ; Name: es-ES-ElviraNeural
458 | ; Gender: Female
459 | ;
460 | ; Name: es-ES-XimenaNeural
461 | ; Gender: Female
462 | ;
463 | ; Name: es-GQ-JavierNeural
464 | ; Gender: Male
465 | ;
466 | ; Name: es-GQ-TeresaNeural
467 | ; Gender: Female
468 | ;
469 | ; Name: es-GT-AndresNeural
470 | ; Gender: Male
471 | ;
472 | ; Name: es-GT-MartaNeural
473 | ; Gender: Female
474 | ;
475 | ; Name: es-HN-CarlosNeural
476 | ; Gender: Male
477 | ;
478 | ; Name: es-HN-KarlaNeural
479 | ; Gender: Female
480 | ;
481 | ; Name: es-MX-DaliaNeural
482 | ; Gender: Female
483 | ;
484 | ; Name: es-MX-JorgeNeural
485 | ; Gender: Male
486 | ;
487 | ; Name: es-NI-FedericoNeural
488 | ; Gender: Male
489 | ;
490 | ; Name: es-NI-YolandaNeural
491 | ; Gender: Female
492 | ;
493 | ; Name: es-PA-MargaritaNeural
494 | ; Gender: Female
495 | ;
496 | ; Name: es-PA-RobertoNeural
497 | ; Gender: Male
498 | ;
499 | ; Name: es-PE-AlexNeural
500 | ; Gender: Male
501 | ;
502 | ; Name: es-PE-CamilaNeural
503 | ; Gender: Female
504 | ;
505 | ; Name: es-PR-KarinaNeural
506 | ; Gender: Female
507 | ;
508 | ; Name: es-PR-VictorNeural
509 | ; Gender: Male
510 | ;
511 | ; Name: es-PY-MarioNeural
512 | ; Gender: Male
513 | ;
514 | ; Name: es-PY-TaniaNeural
515 | ; Gender: Female
516 | ;
517 | ; Name: es-SV-LorenaNeural
518 | ; Gender: Female
519 | ;
520 | ; Name: es-SV-RodrigoNeural
521 | ; Gender: Male
522 | ;
523 | ; Name: es-US-AlonsoNeural
524 | ; Gender: Male
525 | ;
526 | ; Name: es-US-PalomaNeural
527 | ; Gender: Female
528 | ;
529 | ; Name: es-UY-MateoNeural
530 | ; Gender: Male
531 | ;
532 | ; Name: es-UY-ValentinaNeural
533 | ; Gender: Female
534 | ;
535 | ; Name: es-VE-PaolaNeural
536 | ; Gender: Female
537 | ;
538 | ; Name: es-VE-SebastianNeural
539 | ; Gender: Male
540 | ;
541 | ; Name: et-EE-AnuNeural
542 | ; Gender: Female
543 | ;
544 | ; Name: et-EE-KertNeural
545 | ; Gender: Male
546 | ;
547 | ; Name: fa-IR-DilaraNeural
548 | ; Gender: Female
549 | ;
550 | ; Name: fa-IR-FaridNeural
551 | ; Gender: Male
552 | ;
553 | ; Name: fi-FI-HarriNeural
554 | ; Gender: Male
555 | ;
556 | ; Name: fi-FI-NooraNeural
557 | ; Gender: Female
558 | ;
559 | ; Name: fil-PH-AngeloNeural
560 | ; Gender: Male
561 | ;
562 | ; Name: fil-PH-BlessicaNeural
563 | ; Gender: Female
564 | ;
565 | ; Name: fr-BE-CharlineNeural
566 | ; Gender: Female
567 | ;
568 | ; Name: fr-BE-GerardNeural
569 | ; Gender: Male
570 | ;
571 | ; Name: fr-CA-AntoineNeural
572 | ; Gender: Male
573 | ;
574 | ; Name: fr-CA-JeanNeural
575 | ; Gender: Male
576 | ;
577 | ; Name: fr-CA-SylvieNeural
578 | ; Gender: Female
579 | ;
580 | ; Name: fr-CA-ThierryNeural
581 | ; Gender: Male
582 | ;
583 | ; Name: fr-CH-ArianeNeural
584 | ; Gender: Female
585 | ;
586 | ; Name: fr-CH-FabriceNeural
587 | ; Gender: Male
588 | ;
589 | ; Name: fr-FR-DeniseNeural
590 | ; Gender: Female
591 | ;
592 | ; Name: fr-FR-EloiseNeural
593 | ; Gender: Female
594 | ;
595 | ; Name: fr-FR-HenriNeural
596 | ; Gender: Male
597 | ;
598 | ; Name: fr-FR-RemyMultilingualNeural
599 | ; Gender: Male
600 | ;
601 | ; Name: fr-FR-VivienneMultilingualNeural
602 | ; Gender: Female
603 | ;
604 | ; Name: ga-IE-ColmNeural
605 | ; Gender: Male
606 | ;
607 | ; Name: ga-IE-OrlaNeural
608 | ; Gender: Female
609 | ;
610 | ; Name: gl-ES-RoiNeural
611 | ; Gender: Male
612 | ;
613 | ; Name: gl-ES-SabelaNeural
614 | ; Gender: Female
615 | ;
616 | ; Name: gu-IN-DhwaniNeural
617 | ; Gender: Female
618 | ;
619 | ; Name: gu-IN-NiranjanNeural
620 | ; Gender: Male
621 | ;
622 | ; Name: he-IL-AvriNeural
623 | ; Gender: Male
624 | ;
625 | ; Name: he-IL-HilaNeural
626 | ; Gender: Female
627 | ;
628 | ; Name: hi-IN-MadhurNeural
629 | ; Gender: Male
630 | ;
631 | ; Name: hi-IN-SwaraNeural
632 | ; Gender: Female
633 | ;
634 | ; Name: hr-HR-GabrijelaNeural
635 | ; Gender: Female
636 | ;
637 | ; Name: hr-HR-SreckoNeural
638 | ; Gender: Male
639 | ;
640 | ; Name: hu-HU-NoemiNeural
641 | ; Gender: Female
642 | ;
643 | ; Name: hu-HU-TamasNeural
644 | ; Gender: Male
645 | ;
646 | ; Name: id-ID-ArdiNeural
647 | ; Gender: Male
648 | ;
649 | ; Name: id-ID-GadisNeural
650 | ; Gender: Female
651 | ;
652 | ; Name: is-IS-GudrunNeural
653 | ; Gender: Female
654 | ;
655 | ; Name: is-IS-GunnarNeural
656 | ; Gender: Male
657 | ;
658 | ; Name: it-IT-DiegoNeural
659 | ; Gender: Male
660 | ;
661 | ; Name: it-IT-ElsaNeural
662 | ; Gender: Female
663 | ;
664 | ; Name: it-IT-GiuseppeNeural
665 | ; Gender: Male
666 | ;
667 | ; Name: it-IT-IsabellaNeural
668 | ; Gender: Female
669 | ;
670 | ; Name: ja-JP-KeitaNeural
671 | ; Gender: Male
672 | ;
673 | ; Name: ja-JP-NanamiNeural
674 | ; Gender: Female
675 | ;
676 | ; Name: jv-ID-DimasNeural
677 | ; Gender: Male
678 | ;
679 | ; Name: jv-ID-SitiNeural
680 | ; Gender: Female
681 | ;
682 | ; Name: ka-GE-EkaNeural
683 | ; Gender: Female
684 | ;
685 | ; Name: ka-GE-GiorgiNeural
686 | ; Gender: Male
687 | ;
688 | ; Name: kk-KZ-AigulNeural
689 | ; Gender: Female
690 | ;
691 | ; Name: kk-KZ-DauletNeural
692 | ; Gender: Male
693 | ;
694 | ; Name: km-KH-PisethNeural
695 | ; Gender: Male
696 | ;
697 | ; Name: km-KH-SreymomNeural
698 | ; Gender: Female
699 | ;
700 | ; Name: kn-IN-GaganNeural
701 | ; Gender: Male
702 | ;
703 | ; Name: kn-IN-SapnaNeural
704 | ; Gender: Female
705 | ;
706 | ; Name: ko-KR-HyunsuNeural
707 | ; Gender: Male
708 | ;
709 | ; Name: ko-KR-InJoonNeural
710 | ; Gender: Male
711 | ;
712 | ; Name: ko-KR-SunHiNeural
713 | ; Gender: Female
714 | ;
715 | ; Name: lo-LA-ChanthavongNeural
716 | ; Gender: Male
717 | ;
718 | ; Name: lo-LA-KeomanyNeural
719 | ; Gender: Female
720 | ;
721 | ; Name: lt-LT-LeonasNeural
722 | ; Gender: Male
723 | ;
724 | ; Name: lt-LT-OnaNeural
725 | ; Gender: Female
726 | ;
727 | ; Name: lv-LV-EveritaNeural
728 | ; Gender: Female
729 | ;
730 | ; Name: lv-LV-NilsNeural
731 | ; Gender: Male
732 | ;
733 | ; Name: mk-MK-AleksandarNeural
734 | ; Gender: Male
735 | ;
736 | ; Name: mk-MK-MarijaNeural
737 | ; Gender: Female
738 | ;
739 | ; Name: ml-IN-MidhunNeural
740 | ; Gender: Male
741 | ;
742 | ; Name: ml-IN-SobhanaNeural
743 | ; Gender: Female
744 | ;
745 | ; Name: mn-MN-BataaNeural
746 | ; Gender: Male
747 | ;
748 | ; Name: mn-MN-YesuiNeural
749 | ; Gender: Female
750 | ;
751 | ; Name: mr-IN-AarohiNeural
752 | ; Gender: Female
753 | ;
754 | ; Name: mr-IN-ManoharNeural
755 | ; Gender: Male
756 | ;
757 | ; Name: ms-MY-OsmanNeural
758 | ; Gender: Male
759 | ;
760 | ; Name: ms-MY-YasminNeural
761 | ; Gender: Female
762 | ;
763 | ; Name: mt-MT-GraceNeural
764 | ; Gender: Female
765 | ;
766 | ; Name: mt-MT-JosephNeural
767 | ; Gender: Male
768 | ;
769 | ; Name: my-MM-NilarNeural
770 | ; Gender: Female
771 | ;
772 | ; Name: my-MM-ThihaNeural
773 | ; Gender: Male
774 | ;
775 | ; Name: nb-NO-FinnNeural
776 | ; Gender: Male
777 | ;
778 | ; Name: nb-NO-PernilleNeural
779 | ; Gender: Female
780 | ;
781 | ; Name: ne-NP-HemkalaNeural
782 | ; Gender: Female
783 | ;
784 | ; Name: ne-NP-SagarNeural
785 | ; Gender: Male
786 | ;
787 | ; Name: nl-BE-ArnaudNeural
788 | ; Gender: Male
789 | ;
790 | ; Name: nl-BE-DenaNeural
791 | ; Gender: Female
792 | ;
793 | ; Name: nl-NL-ColetteNeural
794 | ; Gender: Female
795 | ;
796 | ; Name: nl-NL-FennaNeural
797 | ; Gender: Female
798 | ;
799 | ; Name: nl-NL-MaartenNeural
800 | ; Gender: Male
801 | ;
802 | ; Name: pl-PL-MarekNeural
803 | ; Gender: Male
804 | ;
805 | ; Name: pl-PL-ZofiaNeural
806 | ; Gender: Female
807 | ;
808 | ; Name: ps-AF-GulNawazNeural
809 | ; Gender: Male
810 | ;
811 | ; Name: ps-AF-LatifaNeural
812 | ; Gender: Female
813 | ;
814 | ; Name: pt-BR-AntonioNeural
815 | ; Gender: Male
816 | ;
817 | ; Name: pt-BR-FranciscaNeural
818 | ; Gender: Female
819 | ;
820 | ; Name: pt-BR-ThalitaNeural
821 | ; Gender: Female
822 | ;
823 | ; Name: pt-PT-DuarteNeural
824 | ; Gender: Male
825 | ;
826 | ; Name: pt-PT-RaquelNeural
827 | ; Gender: Female
828 | ;
829 | ; Name: ro-RO-AlinaNeural
830 | ; Gender: Female
831 | ;
832 | ; Name: ro-RO-EmilNeural
833 | ; Gender: Male
834 | ;
835 | ; Name: ru-RU-DmitryNeural
836 | ; Gender: Male
837 | ;
838 | ; Name: ru-RU-SvetlanaNeural
839 | ; Gender: Female
840 | ;
841 | ; Name: si-LK-SameeraNeural
842 | ; Gender: Male
843 | ;
844 | ; Name: si-LK-ThiliniNeural
845 | ; Gender: Female
846 | ;
847 | ; Name: sk-SK-LukasNeural
848 | ; Gender: Male
849 | ;
850 | ; Name: sk-SK-ViktoriaNeural
851 | ; Gender: Female
852 | ;
853 | ; Name: sl-SI-PetraNeural
854 | ; Gender: Female
855 | ;
856 | ; Name: sl-SI-RokNeural
857 | ; Gender: Male
858 | ;
859 | ; Name: so-SO-MuuseNeural
860 | ; Gender: Male
861 | ;
862 | ; Name: so-SO-UbaxNeural
863 | ; Gender: Female
864 | ;
865 | ; Name: sq-AL-AnilaNeural
866 | ; Gender: Female
867 | ;
868 | ; Name: sq-AL-IlirNeural
869 | ; Gender: Male
870 | ;
871 | ; Name: sr-RS-NicholasNeural
872 | ; Gender: Male
873 | ;
874 | ; Name: sr-RS-SophieNeural
875 | ; Gender: Female
876 | ;
877 | ; Name: su-ID-JajangNeural
878 | ; Gender: Male
879 | ;
880 | ; Name: su-ID-TutiNeural
881 | ; Gender: Female
882 | ;
883 | ; Name: sv-SE-MattiasNeural
884 | ; Gender: Male
885 | ;
886 | ; Name: sv-SE-SofieNeural
887 | ; Gender: Female
888 | ;
889 | ; Name: sw-KE-RafikiNeural
890 | ; Gender: Male
891 | ;
892 | ; Name: sw-KE-ZuriNeural
893 | ; Gender: Female
894 | ;
895 | ; Name: sw-TZ-DaudiNeural
896 | ; Gender: Male
897 | ;
898 | ; Name: sw-TZ-RehemaNeural
899 | ; Gender: Female
900 | ;
901 | ; Name: ta-IN-PallaviNeural
902 | ; Gender: Female
903 | ;
904 | ; Name: ta-IN-ValluvarNeural
905 | ; Gender: Male
906 | ;
907 | ; Name: ta-LK-KumarNeural
908 | ; Gender: Male
909 | ;
910 | ; Name: ta-LK-SaranyaNeural
911 | ; Gender: Female
912 | ;
913 | ; Name: ta-MY-KaniNeural
914 | ; Gender: Female
915 | ;
916 | ; Name: ta-MY-SuryaNeural
917 | ; Gender: Male
918 | ;
919 | ; Name: ta-SG-AnbuNeural
920 | ; Gender: Male
921 | ;
922 | ; Name: ta-SG-VenbaNeural
923 | ; Gender: Female
924 | ;
925 | ; Name: te-IN-MohanNeural
926 | ; Gender: Male
927 | ;
928 | ; Name: te-IN-ShrutiNeural
929 | ; Gender: Female
930 | ;
931 | ; Name: th-TH-NiwatNeural
932 | ; Gender: Male
933 | ;
934 | ; Name: th-TH-PremwadeeNeural
935 | ; Gender: Female
936 | ;
937 | ; Name: tr-TR-AhmetNeural
938 | ; Gender: Male
939 | ;
940 | ; Name: tr-TR-EmelNeural
941 | ; Gender: Female
942 | ;
943 | ; Name: uk-UA-OstapNeural
944 | ; Gender: Male
945 | ;
946 | ; Name: uk-UA-PolinaNeural
947 | ; Gender: Female
948 | ;
949 | ; Name: ur-IN-GulNeural
950 | ; Gender: Female
951 | ;
952 | ; Name: ur-IN-SalmanNeural
953 | ; Gender: Male
954 | ;
955 | ; Name: ur-PK-AsadNeural
956 | ; Gender: Male
957 | ;
958 | ; Name: ur-PK-UzmaNeural
959 | ; Gender: Female
960 | ;
961 | ; Name: uz-UZ-MadinaNeural
962 | ; Gender: Female
963 | ;
964 | ; Name: uz-UZ-SardorNeural
965 | ; Gender: Male
966 | ;
967 | ; Name: vi-VN-HoaiMyNeural
968 | ; Gender: Female
969 | ;
970 | ; Name: vi-VN-NamMinhNeural
971 | ; Gender: Male
972 | ;
973 | ; Name: zh-CN-XiaoxiaoNeural
974 | ; Gender: Female
975 | ;
976 | ; Name: zh-CN-XiaoyiNeural
977 | ; Gender: Female
978 | ;
979 | ; Name: zh-CN-YunjianNeural
980 | ; Gender: Male
981 | ;
982 | ; Name: zh-CN-YunxiNeural
983 | ; Gender: Male
984 | ;
985 | ; Name: zh-CN-YunxiaNeural
986 | ; Gender: Male
987 | ;
988 | ; Name: zh-CN-YunyangNeural
989 | ; Gender: Male
990 | ;
991 | ; Name: zh-CN-liaoning-XiaobeiNeural
992 | ; Gender: Female
993 | ;
994 | ; Name: zh-CN-shaanxi-XiaoniNeural
995 | ; Gender: Female
996 | ;
997 | ; Name: zh-HK-HiuGaaiNeural
998 | ; Gender: Female
999 | ;
1000 | ; Name: zh-HK-HiuMaanNeural
1001 | ; Gender: Female
1002 | ;
1003 | ; Name: zh-HK-WanLungNeural
1004 | ; Gender: Male
1005 | ;
1006 | ; Name: zh-TW-HsiaoChenNeural
1007 | ; Gender: Female
1008 | ;
1009 | ; Name: zh-TW-HsiaoYuNeural
1010 | ; Gender: Female
1011 | ;
1012 | ; Name: zh-TW-YunJheNeural
1013 | ; Gender: Male
1014 | ;
1015 | ; Name: zu-ZA-ThandoNeural
1016 | ; Gender: Female
1017 | ;
1018 | ; Name: zu-ZA-ThembaNeural
1019 | ; Gender: Male""")
1020 | cf.close()
1021 |
--------------------------------------------------------------------------------
/src/utils/ffmpegWrapper.py:
--------------------------------------------------------------------------------
1 | import subprocess
2 | import re
3 | import os
4 | import configparser
5 | from .configGenerator import create_default_config
6 | from .Prettify import Prettify, clearLine
7 | from .twoSecondSilence import getFileBytes
8 | import music_tag
9 |
10 | printSuc = Prettify.printSuc
11 | printWar = Prettify.printWar
12 | printErr = Prettify.printErr
13 | printFeaturedText = Prettify.printFeaturedText
14 |
15 | CONFIG_FILE = "libread-config.ini"
16 | global EMBED_SUBS
17 |
18 | def _sorted_alphanumeric(data):
19 | convert = lambda text: int(text) if text.isdigit() else text.lower()
20 | alphanum_key = lambda key: [ convert(c) for c in re.split('([0-9]+)', key) ]
21 | return sorted(data, key=alphanum_key)
22 |
23 | def _readConfig():
24 | if(os.path.isfile(CONFIG_FILE)):
25 | try:
26 | config = configparser.ConfigParser()
27 | config.read(CONFIG_FILE)
28 | global EMBED_SUBS
29 | EMBED_SUBS = config.getboolean("TTS_CONFIG", "embedSubtitles")
30 | except:
31 | printWar("Corrupted config file detected! Re-generating a new one...")
32 | create_default_config(CONFIG_FILE)
33 | _readConfig()
34 | else:
35 | create_default_config(CONFIG_FILE)
36 | _readConfig()
37 |
38 | def performSanityCheck() -> bool:
39 | try:
40 | result = subprocess.check_output(["ffmpeg", "-version"]).decode()
41 | except:
42 | printFeaturedText(msg="FFMPEG not found in the path! LibRead-Tool will download all articles before converting them.")
43 | return False
44 |
45 | ffmpegVersion = re.search("ffmpeg version (.*) Copyright", result).group(1)
46 | printSuc(f"FFMPEG version {ffmpegVersion} found!")
47 | return True
48 |
49 | # Will merge all mp3 files into one and embed the subtitles from subs.txt
50 | def mergeChunks(chunkFilesDir: str, outputFilePrefix: str, coverImagePath = None) -> None:
51 | _readConfig()
52 |
53 | allMP3Files = _sorted_alphanumeric([f for f in os.listdir(chunkFilesDir) if (os.path.isfile(os.path.join(chunkFilesDir, f)) and (f.split(".")[-1] == "mp3"))])
54 |
55 | with open(f'{chunkFilesDir}/2s-delay.mp3', 'wb') as df:
56 | df.write(getFileBytes())
57 |
58 | ffmpegfileList = "".join(f"file '{f}'\nfile '2s-delay.mp3'\n" for f in allMP3Files)
59 |
60 | with open(f'{chunkFilesDir}/inputFiles.txt', 'w', encoding="utf=8") as cf:
61 | cf.write(ffmpegfileList)
62 |
63 | retCode = os.system(f'ffmpeg -f concat -safe 0 -i "{chunkFilesDir}/inputFiles.txt" -c copy -map_metadata 0 "{outputFilePrefix}.mp3" -loglevel panic')
64 | if(retCode != 0):
65 | clearLine()
66 | printErr(f"Merge Error occured! FFMPEG ReturnCode: {str(retCode)}")
67 | return
68 |
69 | # Add ID3 tags
70 | f = music_tag.load_file(f'{outputFilePrefix}.mp3')
71 |
72 | if(EMBED_SUBS):
73 | with open(f"{chunkFilesDir}/subs.txt", 'r', encoding="utf-8") as sf:
74 | f["lyrics"] = sf.read()
75 |
76 | if(coverImagePath):
77 | with open(coverImagePath, 'rb') as If:
78 | f["artwork"] = If.read()
79 |
80 | f.save()
--------------------------------------------------------------------------------
/src/utils/scrapper.py:
--------------------------------------------------------------------------------
1 | import requests
2 | import hrequests
3 | from bs4 import BeautifulSoup
4 | import os
5 | import configparser
6 | from .Prettify import Prettify
7 | from .configGenerator import create_default_config
8 | from requests.packages.urllib3.exceptions import InsecureRequestWarning #type: ignore
9 | import urllib3
10 |
11 | CONFIG_FILE = "libread-config.ini"
12 | global DOMAIN_NAME
13 | global SEARCH_PAGE_SELECTOR, STATUS_SELECTOR_I, STATUS_SELECTOR_II, STATUS_SELECTOR_III, CHAPTER_SELECTOR, IMAGE_URL_SELECTOR, ARTICLE_DIV_SELECTOR
14 | global HEADERS
15 |
16 | printWar = Prettify.printWar
17 | printSuc = Prettify.printSuc
18 | printErr = Prettify.printErr
19 |
20 |
21 | def _readConfig():
22 | requests.packages.urllib3.disable_warnings(InsecureRequestWarning)
23 | urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
24 |
25 | if(os.path.isfile(CONFIG_FILE)):
26 | try:
27 | config = configparser.ConfigParser()
28 | config.read(CONFIG_FILE)
29 |
30 | global SEARCH_PAGE_SELECTOR, STATUS_SELECTOR_I, STATUS_SELECTOR_II, STATUS_SELECTOR_III, CHAPTER_SELECTOR, IMAGE_URL_SELECTOR, ARTICLE_DIV_SELECTOR
31 | SEARCH_PAGE_SELECTOR = config.get("SELECTOR_MAPS", "searchResultSelector")
32 | STATUS_SELECTOR_I = config.get("SELECTOR_MAPS", "statusSelectorI")
33 | STATUS_SELECTOR_II = config.get("SELECTOR_MAPS", "statusSelectorII")
34 | STATUS_SELECTOR_III = config.get("SELECTOR_MAPS", "statusSelectorIII")
35 | CHAPTER_SELECTOR = config.get("SELECTOR_MAPS", "totalChaptersSelector")
36 | IMAGE_URL_SELECTOR = config.get("SELECTOR_MAPS", "coverImageDivSelector")
37 | ARTICLE_DIV_SELECTOR = config.get("SELECTOR_MAPS", "articleDivSelector")
38 |
39 | global HEADERS
40 | HEADERS = {
41 | 'authority': config.get("DOMAIN", "authority"),
42 | 'User-Agent' : config.get("DOMAIN", "userAgent"),
43 | 'origin': config.get("DOMAIN", "origin"),
44 | 'referer': config.get("DOMAIN", "referer")}
45 |
46 | global DOMAIN_NAME
47 | DOMAIN_NAME = config.get("DOMAIN", "domainName")
48 |
49 | except:
50 | printWar("Corrupted config file detected! Re-generating a new one...")
51 | create_default_config(CONFIG_FILE)
52 | _readConfig()
53 | else:
54 | create_default_config(CONFIG_FILE)
55 | _readConfig()
56 |
57 |
58 | def checkConnection():
59 | _readConfig()
60 | url = f"https://{DOMAIN_NAME}/"
61 | try:
62 | con = requests.get(url, timeout=10, verify=False)
63 | if(con.status_code == 200):
64 | return True
65 | else:
66 | print("Connection established with Status code " + con.status_code)
67 | return False
68 | except:
69 | return False
70 |
71 | def search(query: str):
72 | _readConfig()
73 |
74 | payload = {"searchkey": query}
75 | res = requests.post(f"https://{DOMAIN_NAME}/search", data=payload, headers=HEADERS, verify=False)
76 | soup = BeautifulSoup(res.content, 'html.parser')
77 |
78 | #For Debugging purposes
79 | with open("searchResultDump.html", 'w', encoding='utf-8') as f:
80 | f.write(res.content.decode())
81 |
82 | results = soup.select(SEARCH_PAGE_SELECTOR)
83 | return results
84 |
85 | def getMetadata(url: str):
86 | _readConfig()
87 |
88 | try:
89 | res = requests.get(url, headers=HEADERS, verify=False)
90 | except:
91 | try:
92 | res = requests.get(url, headers=HEADERS)
93 | except Exception as E:
94 | printErr(f"Error occured while fetching {url}. | Error: {E} |")
95 | soup = BeautifulSoup(res.content, 'html.parser')
96 |
97 | #For Debugging purposes
98 | with open("novelPageDump.html", 'w', encoding='utf-8') as f:
99 | f.write(res.content.decode())
100 |
101 | metadata = {'chapters': [], 'status' : None, 'cover-image': None}
102 |
103 | chapters = soup.select(CHAPTER_SELECTOR)
104 | metadata.update({'chapters' : chapters})
105 | status = "Unknow"
106 | try:
107 | status = soup.select(STATUS_SELECTOR_I)[0].text
108 | except:
109 | try:
110 | status = soup.select(STATUS_SELECTOR_II)[0].text
111 | except:
112 | try:
113 | status = soup.select(STATUS_SELECTOR_III)[0].text
114 | except:
115 | pass
116 |
117 | metadata.update({'status' : status})
118 |
119 | try:
120 | imageUrl = f"https://{DOMAIN_NAME}/" + soup.select(IMAGE_URL_SELECTOR)[0]["src"]
121 |
122 | image = requests.get(imageUrl, headers=HEADERS, stream=True)
123 | metadata.update({'cover-image':image})
124 | except:
125 | pass
126 |
127 | return metadata
128 |
129 | def getArticle(url: str):
130 | _readConfig()
131 |
132 | try:
133 | res = hrequests.get(url, headers=HEADERS, verify=False)
134 | except:
135 | try:
136 | res = hrequests.get(url, headers=HEADERS)
137 | except Exception as E:
138 | printErr(f"Error occured while fetching {url}. | Error: {E} |")
139 |
140 | soup = BeautifulSoup(res.content, 'html.parser')
141 |
142 | #For Debugging purposes
143 | with open('articlePageDump.html', 'w', encoding='utf-8') as f:
144 | f.write(res.content.decode())
145 |
146 | articleDiv = soup.select(ARTICLE_DIV_SELECTOR)
147 | articleDiv = articleDiv[0:len(articleDiv)-1]
148 | articleStr = ""
149 | for article in articleDiv:
150 | if(article.text == "…" or article.text == "..."):
151 | continue
152 | #filter out words that can break tts
153 | articleStr += article.text.replace("𝙡𝓲𝒃𝓻𝓮𝙖𝒅.𝙘𝓸𝒎", "").replace("…", "").replace("...", "").replace("𝓵𝙞𝙗𝙧𝙚𝒂𝙙.𝓬𝒐𝒎", "").replace("“", "").replace("”", "").replace("𝒍𝒊𝙗𝒓𝒆𝒂𝒅.𝓬𝒐𝓶", "").replace("*", "")
154 | articleStr += "\n"
155 | return articleStr
--------------------------------------------------------------------------------
/src/utils/tts.py:
--------------------------------------------------------------------------------
1 | import edge_tts
2 | import os
3 | import configparser
4 | import re
5 | from .Prettify import Prettify
6 | from .configGenerator import create_default_config
7 | import music_tag
8 |
9 |
10 | CONFIG_FILE = "libread-config.ini"
11 | global EMBED_SUBS
12 | global VOICE_NAME
13 |
14 | printWar = Prettify.printWar
15 |
16 | def _readConfig():
17 | if(os.path.isfile(CONFIG_FILE)):
18 | try:
19 | config = configparser.ConfigParser()
20 | config.read(CONFIG_FILE)
21 | global VOICE_NAME
22 | VOICE_NAME = config.get("TTS_CONFIG", "Voice")
23 | global EMBED_SUBS
24 | EMBED_SUBS = config.getboolean("TTS_CONFIG", "embedSubtitles")
25 | except:
26 | printWar("Corrupted config file detected! Re-generating a new one...")
27 | create_default_config(CONFIG_FILE)
28 | _readConfig()
29 | else:
30 | create_default_config(CONFIG_FILE)
31 | _readConfig()
32 |
33 | async def createTTSFromFile(filepath: str, outputFilePrefix: str, coverImagePath = None):
34 | _readConfig()
35 |
36 | inputFile = open(filepath, 'r', encoding='utf-8')
37 | communicate = edge_tts.Communicate(inputFile.read(), VOICE_NAME)
38 | submaker = edge_tts.SubMaker()
39 | with open(outputFilePrefix+".mp3", "wb") as f:
40 | async for chunk in communicate.stream():
41 | if chunk["type"] == "audio":
42 | f.write(chunk["data"])
43 | elif chunk["type"] == "WordBoundary":
44 | submaker.create_sub((chunk["offset"], chunk["duration"]), chunk["text"])
45 |
46 | subs = submaker.generate_subs()
47 | with open(outputFilePrefix+".vtt", "w", encoding="utf-8") as sf:
48 | sf.write(subs)
49 |
50 | subs = subs.replace("""WEBVTT""", "")
51 | subs = re.sub("[0-9]{2}:[0-9]{2}:[0-9]{2}.[0-9]{3} --> [0-9]{2}:[0-9]{2}:[0-9]{2}.[0-9]{3}", "", subs)
52 | subs = re.sub(r'(\n\s*)+', "\n", subs)
53 |
54 | f = music_tag.load_file(outputFilePrefix+".mp3")
55 |
56 | if(EMBED_SUBS):
57 | f["lyrics"] = subs
58 |
59 | if(coverImagePath):
60 | with open(coverImagePath, 'rb') as img_in:
61 | f["artwork"] = img_in.read()
62 |
63 | f.save()
64 |
65 | async def createTTSFromText(text: str, outputPath: str, coverImagePath = None, embedSubtitles = False):
66 | _readConfig()
67 |
68 | if(os.path.isfile(outputPath)): os.remove(outputPath)
69 |
70 | communicate = edge_tts.Communicate(text, VOICE_NAME)
71 | subFile = open(os.path.dirname(outputPath)+"/subs.txt", "a+", encoding="utf-8")
72 | submaker = edge_tts.SubMaker()
73 |
74 | with open(outputPath, "ab") as ttsFile:
75 | async for chunk in communicate.stream():
76 | if(chunk["type"] == "audio"):
77 | ttsFile.write(chunk["data"])
78 | elif(chunk["type"] == "WordBoundary"):
79 | submaker.create_sub((chunk["offset"], chunk["duration"]), chunk["text"])
80 |
81 | subs = submaker.generate_subs()
82 | subs = subs.replace("""WEBVTT""", "")
83 | subs = re.sub("[0-9]{2}:[0-9]{2}:[0-9]{2}.[0-9]{3} --> [0-9]{2}:[0-9]{2}:[0-9]{2}.[0-9]{3}", "", subs)
84 | subs = re.sub(r'(\n\s*)+', "\n", subs)
85 |
86 | subFile.write(f"{subs}\n")
87 | subFile.close()
88 |
89 | # Add ID3 tags
90 | f = music_tag.load_file(outputPath)
91 | if(embedSubtitles): f["lyrics"] = subs
92 | if(coverImagePath):
93 | with open(coverImagePath, 'rb') as img_in:
94 | f["artwork"] = img_in.read()
95 |
96 | f.save()
--------------------------------------------------------------------------------
/src/utils/twoSecondSilence.py:
--------------------------------------------------------------------------------
1 | import binascii
2 |
3 | """
4 | Get the raw bytes for the file https://github.com/anars/blank-audio/blob/master/2-seconds-of-silence.mp3
5 |
6 | NOTE -> This is a ridiculous way to extract data. But, I didn't want to include the file as a resource
7 | """
8 | def getFileBytes():
9 | xxdDump = """49443304000000021805544954320000001500000032205365636f6e6473
10 | 206f662053696c656e63655450453100000012000000416e617220536f66
11 | 7477617265204c4c4354414c420000000c000000426c616e6b2041756469
12 | 6f4150494300020f02000000696d6167652f6a70656700030089504e470d
13 | 0a1a0a0000000d4948445200000438000004380806000000ec106c8f0000
14 | 0006624b474400ff00ff00ffa0bda79300000009704859730000083d0000
15 | 083d01059555b60000000774494d4507df0a0b051c31036f047600002000
16 | 4944415478daecdd7b945565dd07f0df300c3701012f28ea8089572c53b0
17 | 34b1a2326f81562ade354d5108336995a6a6a879ebe22d35afa4af809acb
18 | d4340d0d4359bd967929bca46472d11004811161b88cf3fed15b0b9c9973
19 | ce9e3967e63c339fcf5aef7a6bef673f7befdfb3cf70ceb767ef5d1111f5
20 | 0100000090b04e4a00000000a44ec001000000244fc001000000244fc001
21 | 000000244fc001000000244fc001000000244fc001000000244fc0010000
22 | 00244fc001000000244fc001000000244fc001000000244fc00100000024
23 | 4fc001000000244fc001000000244fc001000000244fc001000000244fc0
24 | 01000000244fc001000000244fc001000000244fc001000000244fc00100
25 | 0000244fc001000000244fc001000000244fc001000000244fc001000000
26 | 244fc001000000244fc001000000244fc001000000244fc001000000244f
27 | c001000000244fc001000000244fc001000000244fc001000000244fc001
28 | 000000244fc001000000244fc001000000244fc001000000244fc0010000
29 | 00244fc001000000244fc001000000244fc001000000244fc00100000024
30 | 4fc001000000244fc001000000244fc001000000244fc001000000244fc0
31 | 01000000244fc001000000244fc001000000244fc001000000244fc00100
32 | 0000244fc001000000244fc001000000244fc001000000244fc001000000
33 | 244fc001000000244fc001000000244fc001000000244fc001000000244f
34 | c001000000244fc001000000244fc001000000244fc001000000244fc001
35 | 000000244fc001000000244fc001000000244fc001000000244fc0010000
36 | 00244fc001000000244fc001000000244fc001000000244fc00100000024
37 | 4fc001000000244fc001000000244fc001000000244fc001000000244fc0
38 | 01000000244fc001000000244fc001000000244fc001000000244fc00100
39 | 0000244fc001000000244fc001000000244fc001000000244fc001000000
40 | 244fc001000000244fc001000000244fc001000000244fc001000000244f
41 | c001000000244fc001000000244fc001000000244fc001000000244fc001
42 | 000000244fc001000000244fc001000000244fc001000000244fc0010000
43 | 00244fc001000000244fc001000000244fc001000000244fc00100000024
44 | 4fc001000000244fc001000000244fc001000000244fc001000000244fc0
45 | 01000000244fc001000000244fc001000000244fc001000000244fc00100
46 | 0000244fc001000000244fc001000000244fc001000000244fc001000000
47 | 244fc001000000244fc001000000244fc001000000244fc001000000244f
48 | c001000000244fc001000000244fc001000000244fc001000000244fc001
49 | 000000244fc001000000244fc001000000244fc001000000244fc0010000
50 | 00244fc001000000244fc001000000244fc001000000244fc00100000024
51 | 4fc001000000244fc001000000244fc001000000244fc001000000244fc0
52 | 01000000244fc001000000244fc001000000244fc001000000244fc00100
53 | 0000244fc001000000244fc001000000244fc001000000244fc001000000
54 | 244fc001000000244fc001000000244fc001000000244fc001000000244f
55 | c001000000244fc001000000244fc001000000244fc001000000244fc001
56 | 000000244fc001000000244fc001000000244fc001000000244fc0010000
57 | 00244fc001000000244fc001000000244fc001000000244fc00100000024
58 | 4fc001000000244fc001000000244fc001000000244fc001000000244fc0
59 | 01000000244fc001000000244fc001000000244fc001000000244fc00100
60 | 0000244fc001000000244fc001000000244fc001000000244fc001000000
61 | 244fc001000000244fc001000000244fc001000000244fc001000000244f
62 | c001000000244fc001000000244fc001000000244fc001000000244fc001
63 | 000000244fc001000000244fc001000000244fc001000000244fc0010000
64 | 00244fc001000000244fc001000000244fc001000000244fc00100000024
65 | 4fc001000000244fc001000000244fc001000000244fc001000000244fc0
66 | 01000000244fc001000000244fc001000000244fc001000000244fc00100
67 | 0000244fc001000000244fc001000000244fc001000000244fc001000000
68 | 244fc001000000244fc001000000244fc001000000244fc001000000244f
69 | c001000000244fc001000000244fc001000000244fc001000000244fc001
70 | 000000244fc001000000244fc001000000244fc001000000244fc0010000
71 | 00244fc001000000244fc001000000244fc001000000244fc00100000024
72 | 4fc001000000244fc001000000244fc001000000244fc001000000244fc0
73 | 01000000244fc001000000244fc001000000244fc001000000244fc00100
74 | 0000244fc001000000244fc001000000244fc001000000244fc001000000
75 | 244fc001000000244fc001000000244fc001000000244fc001000000244f
76 | c001000000244fc001000000244fc001000000244fc001000000244fc001
77 | 000000244fc001000000244fc001000000244fc001000000244fc0010000
78 | 00244fc001000000244fc001000000244fc001000000244fc00100000024
79 | 4fc001000000244fc001000000244fc001000000244fc001000000244fc0
80 | 01000000244fc001000000244fc001000000244fc001000000244fc00100
81 | 0000244fc001000000244fc001000000244fc001000000244fc001000000
82 | 244fc001000000244fc001000000244fc001000000244fc001000000244f
83 | c001000000244fc001000000244fc001000000244fc001000000244fc001
84 | 000000244fc001000000244fc001000000244fc001000000244fc0010000
85 | 00244fc001000000244fc001000000244fc001000000244fc00100000024
86 | 4fc001000000244fc001000000244fc001000000244fc001000000244fc0
87 | 01000000244fc001000000244fc001000000244fc001000000244fc00100
88 | 0000244fc001000000244fc001000000244fc001000000244fc001000000
89 | 244fc001000000244fc001000000244fc001000000244fc001000000244f
90 | c001000000244fc001000000244fc001000000244fc001000000244fc001
91 | 000000244fc001000000244fc001000000244fc001000000244fc0010000
92 | 00244fc001000000244fc001000000244fc001000000244fc00100000024
93 | 4fc001000000244fc001000000244fc001000000244fc001000000244fc0
94 | 01000000244fc001000000244fc001000000244fc001000000244fc00100
95 | 0000244fc001000000244fc001000000244fc001000000244fc001000000
96 | 244fc001000000244fc001000000244fc001000000244fc001000000244f
97 | c001000000244fc001000000244fc001000000244fc001000000244fc001
98 | 000000244fc001000000244fc001000000244fc001000000244fc0010000
99 | 00244fc001000000244fc001000000244fc001000000244fc041abda6cb3
100 | cd62e2c4893174e850c5000000a0682a22a25e19680d7beeb967dc7cf3cd
101 | d1bf7fffa8a9a989c30f3f3c66cd9aa530000000b498191cb48a934e3a29
102 | eebbefbee8dfbf7f4444f4eedd3ba64e9d1ad5d5d58a030000408b99c141
103 | c99d7beeb9316edcb846d7bdf8e28b71c82187c4dab56b150a00008066ab
104 | 8c880b958152a8a8a8881ffde84771eaa9a736d9668b2db6885ebd7ac593
105 | 4f3ea96000000034ff376898c14109545656c64f7ef293183d7a7441ed8f
106 | 3aeaa898316386c2010000d02c020e8aae53a74e71c30d37c4a851a30ade
107 | 66ce9c393162c48858bd7ab50202000090995b5428ba0b2fbc308e3efae8
108 | 4cdbf4e9d3273efcf0c3f8e31fffa880000000646606074575f2c927c7c5
109 | 175fdcac6dd7ac591323468c8837df7c5321010000c8c46b62299afdf7df
110 | 3f264e9cd8ecedbb74e9d2a2ed010000e8b8cce0a02876df7df7b8efbefb
111 | a27bf7ee2deeeb4b5ffa52bcf2ca2b8a0a000040c1cce0a0c5b6da6aabb8
112 | e38e3b8a126e44448c1b374e51010000c8c40c0e5aa453a74e71df7df7c5
113 | 5e7bed55b43eebeaeae2339ff94ccc9f3f5f8101000028ecf7a912d012a7
114 | 9f7e7a51c38d8888cacaca38edb4d314170000808299c141b3edbaebaef1
115 | c8238f44555555d1fbaeadad8d3df7dc33962c59a2d0000000e4650607cd
116 | d2ad5bb7b8fefaeb4b126efca7ffaf7ffdeb0a0d00004041041c34cbf9e7
117 | 9f1fdb6fbf7d49f7316ad42885060000a020020e32fbc217be10dff8c637
118 | 4abe9f3df6d823aaabab151c000080bc041c6452555515975e7a69d1fb5d
119 | ba7469a3cbcde2000000a010020e3239f6d8638b3eabe299679e89cf7dee
120 | 73b168d1a206eb0e39e41045070000202f010705ebd1a3479c79e69945ed
121 | f3a1871e8a238f3c32162f5e1c53a74e6db07ec89021b1dd76db293e0000
122 | 0039093828d837bff9cdd86cb3cd8ad6df33cf3c13e3c68d8b356bd64444
123 | c4e4c993a3bebee15b8bcde2000000201f010705e9d3a74f8c1d3bb668fd
124 | 2d5dba34c68e1d1b757575ff5df6d65b6fc5ac59b31ab41d316284010000
125 | 002027010705f9d6b7be15bd7bf72e5a7f679e7966bcf3ce3b0d963ffef8
126 | e30d967de2139f88ae5dbb1a040000009a24e020affefdfbc749279d54b4
127 | fe6ebbedb646838c888869d3a63558565555159ff8c4270c040000004d12
128 | 7090d7d8b163a35bb76e45e9ebdd77df8dcb2fbfbcc9f5b366cd6a7466c7
129 | 9e7bee692000000068928083dc1748a74e316ad4a8a2f5f7d39ffe343ef8
130 | e0839c6d1a9bdd21e000000020e7ef57252097bdf6da2bfaf7ef5f94bede
131 | 78e38d9832654ade768d051cc3860d33180000003449c0414e23478e2c5a
132 | 5f3ffad18f62ddba7579db3dfdf4d3b16ad5aa0d966db2c926b1edb6db1a
133 | 100000001a25e0a04995959571f0c10717a5af679f7d361e7becb182daae
134 | 5ebd3a5e7cf1c506cb3ff5a94f19140000001a25e0a0497befbd776cbae9
135 | a645e9eba28b2ecad4fe95575e69b06c8f3df63028000000344ac041930e
136 | 39e490a2f4f3c8238fc473cf3d97699b975f7eb9c1b28103071a14000000
137 | 1a25e0a0519d3b778e830e3aa8c5fdac5bb72e2ebdf4d2ccdb35368363ab
138 | adb63230000000344ac041a3f6d9679fe8dbb76f8bfbf99ffff99f78f3cd
139 | 37336ff7da6baf457d7dfd06cb060c186060000000689480834615e3819e
140 | 2b56ac88abaebaaa59dbae5ebd3ade7ffffd0d9675efdebd28a10b000000
141 | ed8f808346edbaebae2deee3a69b6e8ac58b17377bfba54b973658e63615
142 | 0000001a23e0a05143860c69d1f66bd7ae8d5ffef2972dea63d9b2650d96
143 | b94d05000080c6083868a04f9f3e2d0e121e7ae8a158b264498bfa682ce0
144 | 308303000080c608386860f0e0c12deea3a5b33722223ef8e08306cb041c
145 | 0000003446c04103fdfaf56bd1f6b366cd8ae79e7baec5c7d1d80345051c
146 | 0000003446c041032d7d53c9a449938a721c9b6fbe7983659ec101000040
147 | 63041c34d092191ccb962d8b071e78a028c7b1d9669b3558d6b3674f0304
148 | 00004003020e1ae8d3a74fb3b7bdfbeebba3b6b6b6c5c7d0a54b97e8ddbb
149 | 7783e59d3b7736400000003420e0a081cacaca666d575f5f1f77de796751
150 | 8e61bbedb62beab1010000d0be09386860e5ca95cdda6efaf4e93167ce9c
151 | a21cc3fefbefdfe87201070000008d1170d04073038e62bc1af63f0e3cf0
152 | c04697bb4505000080c6083868e0830f3ec8bccddcb973e3c9279f2ccafe
153 | b7da6aabf8f8c73fdee83a01070000008d1170d0407366704c9e3c393efc
154 | f0c3a2ecffa0830e6a729d5b54000000688c8083069a13703cf6d86345d9
155 | 778f1e3d62ecd8b14dae1770000000d01801070d64bd4565ce9c39f18f7f
156 | fca328fb1e3f7e7cf4efdfbfc9f5020e0000001a23e0a081ac3338a64d9b
157 | 5694fd6ebdf5d671da69a7e56ce3191c0000003446c041035967703cfef8
158 | e345d9ef79e79d175dbb76cdd9a658cff9000000a07d1170d04096191c35
159 | 3535f1a73ffda9c5fbdc73cf3d63d4a85179db2d5ab4c800010000d08080
160 | 8306de79e79da8afaf2fa8edf4e9d363ddba752dda5f4545454c9c38b1a0
161 | b6fffad7bf0c100000000d08386860f5ead5b170e1c282da16e3f91b871d
162 | 76587cf2939f2ca8ed82050b0c100000000d083868d49c3973f2b659b76e
163 | 5d4c9f3ebd45fbe9d1a347fce0073f28b8bd8003000080c6083868d4dcb9
164 | 73f3b6f9f39fff1c3535352ddacfb871e372be16f6a3041c0000003446c0
165 | 41a30a09385e7ffdf516ed63abadb68ad34f3f3dd3369ec1010000406304
166 | 1c34aa905b54962f5fdea27d5c79e595d1ad5bb74cdb98c1010000406304
167 | 1c346adebc7979dbb424e038eeb8e362c4881199b71370000000d098ce4a
168 | 40630a99c1b16cd9b266f53d70e0c0b8e0820b326fb766cd9a78efbdf70c
169 | 0e0000d0aa2a2a2a9abd2c6bdb42b75fb76e5d7cf8e18706673d028ef5ec
170 | b4d34eb1e38e3bb6ca855baaed5bfa615a7f796d6d6dce5b4876df7df7e8
171 | dcb973a67d555454c4983163a2478f1e99c767c1820571e2892796e45ccb
172 | 655ccbe10f6a29f695a55d4ae79ad27595ca35e85cdbe7e7adadc7aa5ccf
173 | b51463d5debe8b3857df457c17f15da45c3e03e5e8e4934f8e471f7dd40f
174 | f9f5c73422ea95e1df264c981013264c5008000000cada29a79c128f3cf2
175 | 8842acc70c8e2259bc7871a3b76cd4d7379e1f65599eb58fa664edbbbaba
176 | 3a7af7eedd647f0b162c88c58b17177c8cddba758b1d76d8a1d949e9ecd9
177 | b3e3fdf7df6fd6f9b7c538a430c6e55c9354c732eb3e8b719e298c71b9d4
178 | dbe7358cb1cfabb1ec40df178cb1b16c0fdfa13af2f7fb030e3820c68d1b
179 | d7e4fa4e9d3c5253c05122d75d775ddc72cb2dedea9cbef7bdefc599679e
180 | d9e4fa7befbd37aeb8e28a82faaaaaaa8adffef6b7cd0e37d6ac59135ffe
181 | f29763f5ead52e360000a0dddb69a79d72ae4ffd169b5210f9d0a4bffded
182 | 6f39d7f7e9d3a7e0bece3aebac18326448b38fe52f7ff98b70030000e830
183 | f23d40d40c8e466aa2043465d6ac5939d7f7eddbb7a07ef6d8638ff8d6b7
184 | bed5a263f9e31fff68400000800e43c0919d8ad0a4b7df7e3be76b590b99
185 | c1d1ad5bb7b8f6da6ba3b2b2b245c73273e64c030200007418f99ed721e0
186 | 68a4264a402eb96671545757e7ddfebcf3ce8b8f7dec632d3a8655ab56c5
187 | 0b2fbc60300000800ec30c8eec54849c723d87a3baba3aba76eddae4fae1
188 | c387c737bef18d161fc3cc993363eddab506030000e830f2cde0f090d186
189 | 041ce4942be0e8d4a95393b33336d96493b8e69a6b8af2a1bbf3ce3b0d04
190 | 0000d0a1e49bc1d1d2c700b447020e72caf7a0d1edb7dfbed10fda8d37de
191 | 185b6eb9658bf73f67ce9c983e7dba810000003a14b7a864a722e4346fde
192 | bc58be7c7993eb1b0b38ce39e79c183e7c7851f67fc71d77e49d9a050000
193 | d0de78c868762a425eb966717c34e038f8e08363ecd8b145d9efaa55ab62
194 | ead4a906000000e870cce0c84e45c82bd77338d60f38060f1e1c575d7555
195 | d1f67bfffdf7474d4d8d010000003a9c7c0187878c36d45909c82757c0b1
196 | dd76db4565656574efde3d6ebffdf6e8d9b367d1f63b69d224c50700003a
197 | 243338b25311f2ca157074e9d225aaababe3aaabae8ac18307176d9f7ffa
198 | d39fe295575e517c0000a043127064a722e43577eedc9cb78a5c7ef9e571
199 | f0c10717759f37de78a3c20300001d96878c66a72214f4c17ae9a5979a5c
200 | bfefbefb16757f4f3df5544c9b364de10100800efd3b2ce78f790147c39a
201 | 280185c8759b4a31ad5bb72ece3fff7c050700003a34b7a864a7221424d7
202 | ab628be9f6db6f8fd9b3672b380000d0a10938b253110ad21a3338162f5e
203 | 1c3ffbd9cf141b0000e8f0041cd9a9080579f3cd3763c58a1525ddc7a597
204 | 5e9af361a60000001d8580233b15a1e00fd7cb2fbf5cb2fe5f7cf1c5b8e7
205 | 9e7b141a0000203c64b439548482bdf2ca2b25fbe09e77de79793fc00000
206 | 001d45be191c1515158af411020e0a3264c89038ecb0c34ad2f74d37dd14
207 | cf3fffbc22030000fc3fb7a864a722e43568d0a09832654af4ead5abe87d
208 | bff8e28b71d9659729320000c07a041cd9a90839f5efdf3feeb9e79ed86c
209 | b3cd8adef7fbefbf1fa79f7e7aac5dbb56a1010000d623e0c84e4568d2c6
210 | 1b6f1c53a74e8d6db6d9a624fd7fef7bdf8bb973e72a34000040d61ff302
211 | 8e863551021ad3bd7bf7b8ebaebb62a79d762a49ff53a74e8d071f7c50a1
212 | 0100001a610647762a420355555571ebadb7c6d0a1434bd2ffebafbf1ee7
213 | 9d779e420300003441c0919d8ab0818a8a8ab8e69a6b62c4881125e97ff5
214 | ead571da69a7c5aa55ab141b0000a009028eec54840d5c72c92571e8a187
215 | 96acff73cf3d37fefef7bf2b340000400e028eec3a2b0111ff9eb971e9a5
216 | 97c609279c50b27ddc78e38d3165ca14c5060000c8235fc0515151a1481f
217 | 21e0203a75ea143ffde94f63f4e8d125dbc7238f3c12975c728962030000
218 | 14a0bebe3eefef383624e0e8e81740e7ce71edb5d796f4b694e79f7f3ec6
219 | 8f1f9ff7030a0000c0bfb945a519bf6f95a0e3aaaaaa8a1b6fbc310e3ae8
220 | a092ed63debc7971e28927466d6dad8203000065a5b1db3c9abaf5a358cb
221 | 0b6ddbb973ee9feb028e86041c45326cd8b058bd7a759b7f080a5d5e5555
222 | 15a3478f8e1d76d8a16435a9adad8d871f7e380e3ffcf0669f63d6f32ce5
223 | 1fa3721dcb72ac4929cfb39c6a552eff50a63ac6a97e5edbdb18fbbc1a4b
224 | 636c8cfd1be33b6147f84ed81e0938041c253372e4c8183972a442aca75b
225 | b76e3176ec58850000002832014743028e2259bc78712c5bb6acc1f2c69e
226 | 3bd1d4b3285adab629ebb7ada8a888810307468f1e3d4a5a8f79f3e6c5d2
227 | a54b4b5e872cb569cdb128d7732b87f3cd726ea98da5736bfde33596cead
228 | bd9d9b7fefdad7b9f90ca6f73dc567d0b995d3f794be7dfbc6bdf7de2be0
229 | 1070b4beebaebb2e6eb9e596b23ec6debd7bc79429534a1e6e44441c7cf0
230 | c1b164c9121706000040336cb2c92639d70b381aa98912740cfdfaf58bfb
231 | eebb2ff6d8638f56d95f6bed070000a03df21695ec54a403e8ddbb77dc7b
232 | efbdb1ebaebbb6da3e870f1faef0000000cd24e0c84e45dab96eddbac51d
233 | 77dc11bbecb24babee57c0010000d07cf99e2dd291de18532801473bd6b9
234 | 73e7b8e9a69be2d39ffe74abef7ba79d768a4d37ddd4200000003483191c
235 | d9a9483b555151113ffbd9cf62bffdf66bb3fd9bc5010000d03c028eec54
236 | a49dbaf0c20be3b0c30e2be93e66ce9c193535354daedf77df7d0d040000
237 | 40330838b253917668fcf8f171ca29a794741fcf3df75c9c78e289f1d7bf
238 | feb5c936020e000080e6c917705456562ad2470838da992f7ef18b71f6d9
239 | 6797741fafbefa6a1c7becb1b172e5ca78fef9e79b6cb7f5d65bc7a04183
240 | 0c0a000040461e329a9d80a31d19387060fcfce73f2fe9853e77eedc38fa
241 | e8a363f9f2e51111f1c20b2fe46cef391c000000d9b945253b156927ba75
242 | eb16b7de7a6b6cbcf1c625dbc7a2458be2a8a38e8a850b17fe7759be80c3
243 | 6d2a000000d90938b2539176e2f2cb2f8f21438694acff9a9a9a38eaa8a3
244 | 62ce9c391b2c7ff7dd77e3adb7de6a72bb7df6d9c7d4290000808cf2dda2
245 | 22e068a4264a90bee38f3f3e8e38e28892f55f5b5b1bc71f7f7cbcfaeaab
246 | 8daecf358ba35fbf7e250d5e000000daab5cb338041c8dd44409d2b6c71e
247 | 7bc4c5175f5cb2fed7ad5b17a79e7a6afcf9cf7f6eb28ddb540000008a2f
248 | 57c061a67c43028e8475e9d225aebdf6daa8aaaa2a49fff5f5f571e69967
249 | c6134f3c91b35dae37a94478d028000040737f9335f963de0c8e86355182
250 | 748d1f3f3e3ef6b18f95acff1ffef08771fffdf7e76d376bd6ac58b76e5d
251 | 93ebf7da6baf928530000000ed555d5d5dd33fe6051c0d6ba20469da76db
252 | 6d63fcf8f125ebffe73fff79dc76db6d05b55db56a55bcf6da6b4daeefde
253 | bd7b0c1d3ad4a00100006490eb1695caca4a05fa080147a2aeb8e28ae8d2
254 | a54b49fafefdef7f1f975f7e79a66df2dda6e2391c000000d9780647369d
255 | 95203d5ffbdad74af65c8b37df7c33c68d1b97f79dcb1ff5fcf3cfc771c7
256 | 1dd7e4fae1c387c78f7ffce38888d864934d62cf3df78c5d76d925faf5eb
257 | 177dfbf6dde0fff7e9d32756ae5c194b962c89c58b17c7e2c58bfffb9fe7
258 | ce9d1b3366cc8865cb96b91000008076cd5b54b2117024a677efde71e185
259 | 1796a4ef0f3ef820bef18d6f444d4d4de66d5f7cf1c59ceb77db6db7f8d9
260 | cf7e169ffad4a70a7a6e48cf9e3d63f3cd376f745d5d5d5d3cfbecb3f1f8
261 | e38fc7b469d3e28d37de7061000000ed8e878c6623e048ccb9e79e1b9b6e
262 | ba69493e38679c7146bcfefaebcdda7ef6ecd9b162c58ae8d9b367a3ebbb
263 | 74e912471e7964518eb5b2b232f6da6bafd86bafbde2fcf3cf8f37df7c33
264 | 1e7becb1b8f9e69b63e1c2852e120000a05d3083231b1549c8a04183e298
265 | 638e2949dfd75c734d3cfae8a32dfae0e59bc5512adb6ebb6d9c7efae931
266 | 73e6cc183f7e7cc99e4d020000d09a041cd9a848424e39e594925cc44f3c
267 | f144fce4273f69f6f615151571c41147c4e0c183dbb43e1b6db4519c73ce
268 | 393163c68c38f0c0035d30000040d2041cd9a8482236de78e3183d7a74d1
269 | fb7df3cd37e35bdffa56e6878afec72ebbec120f3ef8605c7df5d5b1c516
270 | 5b9445ad060e1c18b7dd765bdc7befbdb1f3ce3bbb7800008024798b4a36
271 | 028e441c77dc71d1a3478fa27f58ce38e38c663d54b457af5e71f1c517c7
272 | ef7ef7bb18366c5859d66cf8f0e1f1d8638fc511471ce10202000092e321
273 | a3d9a84802aaaaaae2e4934f2e7abf37df7c733cf7dc7399b7fbea57bf1a
274 | 4f3ffd749c7cf2c951595959f6b5bbfaeaab63c284092e24000020296e51
275 | c946451270c8218744fffefd8bdae73ffff9cfb8f2ca2b336d5359591997
276 | 5e7a695c7ffdf54dbec2b55c4d983021aebaeaaaa8aaaa724101000049c8
277 | 157094fbffd8dc16041c091833664cd13f24dff9ce77a2b6b6b6e06d7af7
278 | ee1d77dd75579c78e289c9d671f4e8d171d75d7745af5ebd5c54000040d9
279 | f30c8e6c041c656ef8f0e13164c890a2f679fbedb7c7b3cf3e5b70fb8103
280 | 07c66f7ef39bf8dce73e977c3df7dd77df78e081078a3e23060000a0d8dc
281 | a2928d8a94b9af7ef5ab45ed6fce9c3971d9659715dcfed39ffe743cf2c8
282 | 23b1fdf6dbb79b9aeebcf3cef1cb5ffe32ba75ebe602030000ca96878c66
283 | d35909ca5bb1674d7cf7bbdf8d55ab5615d4f6939ffc644c9d3ab55d0601
284 | bbedb65b5c75d55571fae9a7bbc80080926b6a2a793196679da65e8cbedb
285 | e27c8a719ee574dcc538cf148ebb3d5db36d3196b99e2128e0107094cc81
286 | 071e18db6cb34d513f041b6fbc710c1830a068c7387ffefc18356a548c1a
287 | 352aefb1f4ecd9330e38e080763dcbe190430e89c18307c7dffffef776fd
288 | 8f5639fdf1f78f56fbf96292ea172d636c8cfd30f26f4c5bfd8d00283601
289 | 47237f9723a23b29086400002000494441545e19fe6dc284095e270a0000
290 | 40d95bb87061ecbefbee0ab11e33388ae4d5575f8db973e73658ded83d53
291 | 4ddd47f5d1e5c3860d2bdac330e7cf9f1f2fbcf042de6388f8f77337b6d8
292 | 628b0e33766bd7ae8dc71f7f3c962d5b5694712b65dba694e2185afb7cb3
293 | d4a05cc7c7b975cc733396cecdb915ffdf95f6fc19f4f7c5b9b94e9d5b96
294 | b64f3cf1446cb7dd768db6378343c0513277df7d77dc72cb2d45ebafaaaa
295 | 2a5e79e595a2fd803ffcf0c363debc7979db4e9c38b143851bffa9f5aebb
296 | ee1a5ff8c21762e5ca952e660000a02cd4d5d535b94ec0d1484d94a03c0d
297 | 1d3a3436da68a3a2f475d75d7715146eecbdf7de71ca29a774c87a575757
298 | c719679ce1c2030000ca46aed7c45656562ad0470838cad4673ffbd9a2f4
299 | b372e5cab8faeaabf35f089d3ac5c489133b74cd4f3bedb4183468908b0f
300 | 0000280b5e139b8d8a94a962bd1ef6de7bef8d77df7d376fbbd1a347c7ae
301 | bbeedaa16bdea54b970e1ff2000000e523d70c0e6f726a48c051a676da69
302 | a7a2f43379f2e4bc6d7af6ec19679f7db6a247c47efbed175ffce2171502
303 | 00006873b9020e33381aa98912949f5ebd7a45f7eedd5bdccf5ffffad778
304 | f9e597f3b6fbf6b7bf1d9b6db699c2ffbf8b2eba28aaaaaa140200006853
305 | 028e6c54a40c6dbef9e645e967ca942979db6cb9e5961df6c1a24dd976db
306 | 6de3d4534f55080000a04d0938b2f19ad832d4bf7fff16f7b172e5caf8f5
307 | af7f9db7dda851a3a24b972e6d729eafbefa6adc7aebad515d5d1d03070e
308 | 8ceaeaeaa8aeae8e4d37ddb4cdc760cc983171f3cd37c7dab56b5d900000
309 | 409b10706423e02843c5b85de4a1871e8a152b56e46d77f0c10717fdf8eb
310 | eaeae2c9279f8cbe7dfbc6d0a1439b6cd7a74f9f983a756a83e583060d8a
311 | 638e3926468f1edd6661c7a69b6e1a071c7040fce637bf71410200006d22
312 | d75b543c64b421914f192ac60c8e427e98f7efdf3f670091d5bc79f3e2ca
313 | 2baf8c3df7dc338e3ffef878ecb1c772b6df72cb2da367cf9e0d96cf9933
314 | 277ef4a31fc5d0a143e3d4534f8da79e7a2ae707bb548e3bee3817230000
315 | d066cce0c84645ca504b9fc1b176edda78e69967f2b63be8a0838a92facd
316 | 9a352b8e3cf2c8d87befbde3eaabaf8e77de792722225e7ffdf5bcdbeeb0
317 | c30e39cfe3e1871f8e238f3c323ef399cfc4e38f3fdeaae3b0cf3efbc4a0
318 | 41835c900000409b107064a32265a8a501c75ffef29758b56a55de76071e
319 | 78608bf653535313e79e7b6e1c74d0418dceb278edb5d7f2f6b1fdf6db17
320 | b4afb973e7c689279e1813274e6cb5e762545454c4b1c71eeb82040000da
321 | 44ae802342c8d1a01e4a507e5a7a8bcad34f3f9db74dbf7efd62efbdf76e
322 | f63e7efffbdfc7673ffbd998346952d4d5d535da66fefcf9b172e5ca9cfd
323 | e49ac1f151f5f5f571d34d37c521871c12f3e6cd6b95b1183d7ab457c602
324 | 00006d42c0918d6a94a196cee02824e0d86fbffda2b2b2b259fd5f7bedb5
325 | 71c20927c4a2458b72b6abafaf8fd9b367e76c9325e0f88f175f7c31befc
326 | e52fb7ca034037d9649338e080035c94000040abcbf72c420f1add9080a3
327 | 9d79fffdf7e3c5175fccdb6edb6db7cddcf7dab56b63cc983171f9e597e7
328 | 4d12ff23df6d2acd093822fe7d7bcc983163e2eebbef2e794df7d9671f17
329 | 160000d0eacce0c84635cad0e2c58b9bbdeddffffef7266f19595fdfbe7d
330 | 33f77de18517669e3591ef41a35b6fbd75f4e8d1a3d9e77bf6d967c773cf
331 | 3d57d2f1d8638f3d5c94000040ab137064a31a6568c99225cddef68d37de
332 | 28a85d9f3e7d32f57befbdf7c6a44993321f4fbe191c1515153178f0e066
333 | 9fef9a356be29bdffc662c5cb8b064e3b1d34e3b45f7eedd5d98000040ab
334 | 127064a31a65a82501c73ffef18f82da6599c1f1b7bffd2dbefffdef37eb
335 | 780a79934a736f53f98f850b17c6c9279f1c6bd6ac29c97874eedc3976db
336 | 6d3717260000d0aa041cd9a846196ac92d2ac50e38962c5912279f7c72ac
337 | 5ebdba59c7f3f6db6fc7071f7c90b34d4b038e8888e79f7fbed9214c21dc
338 | a6020000b4360f19cd46c05186cae91695091326c4db6fbfdda20f64bee7
339 | 701423e08888b8e79e7be2f7bfff7d49c644c0010000b4b67c014773df8c
340 | d95e0938ca507367707cf8e1873177eedc82daf6eedd3b6f9b79f3e6c5e3
341 | 8f3fdee2f329d59b541a73d34d3795644c76df7d7717260000d0aadca292
342 | 8d6a94a1f9f3e7376bbb152b56c4ba75eb0a6abb74e9d2bc6da64c999237
343 | 312c44be80a3baba3aba76ed5a94dacd9c39335e7ef9e5a28f49d687b202
344 | 0000b49480231bd528432fbffc724101c4472d5bb6ace0b6f3e6cdcbb97e
345 | ddba7571cf3df714e57cf2051c9d3a758aedb6dbae68f52bc52c8e2e5dba
346 | b8300100805625e0c84635caf4227efae9a7336fb77cf9f282dbe69b25f2
347 | c4134f14edd5abadf12695f53df8e083f1ce3bef14754c2a2b2bdddf0600
348 | 00b42a0f19cd46c051a666cc9891799b2c0147be6775fcf6b7bf2ddab92c
349 | 58b020de7ffffd9c6d8a1970ac5dbb366ebbedb6a28f89591c0000406b32
350 | 83231bd52853cd09388a798bca82050b8a7a3eadf52695ff983c7972519e
351 | 1fb23e01070000d09a041cd9a84699fad7bffe15b367cfceb44d5d5d5dc1
352 | 6df3dda252ec5b3ce6cc9993737d319fc111f1efb0a725afb76d4cb11e84
353 | 0a00005008014736aa51c6b2cee2e8d7af5fc16d67cf9e9df38d2b8b162d
354 | 2aeab9e4bb25669b6db6297afd0a79f647a60f8b3f1e0000402b127064fc
355 | cda604e5ebc9279fccd43e4bc051535313cf3cf34ca3eb56ad5a95f79919
356 | 59e5bb25a6478f1eb1c9269b14759fc50c38d6ad5b178b172f7651020000
357 | adc64346b3117094b1a79e7a2ad36d1659028e888869d3a6b5da8724df0c
358 | 8e88e2cfe2c8f7dc8f2cde7aebad9c335e0000008a2ddf0c0e6f7adc9080
359 | a38cd5d5d5c51d77dc5170fbac33209a0a38ba75eb169b6db65951cfa590
360 | 80a3bababaa8fb2ce60c8e7ccf100100002836b7a864d35909cadb942953
361 | e2bbdffd6e416ff0e8d2a54b6cb4d146f1c1071f14d4f7bc79f3e2d5575f
362 | 8d9d77deb9c1ba6db6d926de7df7dda29dc7c2850b63cd9a3539cf63ebad
363 | b72e6aed66cf9e1df5f5f5459991f2e69b6fba1801801669ec3b4953df53
364 | 8ab5bc547d97f2b88b718e299f4f6b8f655b5d9baed9c2daf7e9d347c021
365 | e0687d071e7860a3b75814e303336fdebc183c787041c771f5d55737f9ac
366 | 88c6fa6eeab68bb3cf3ebbd1590b2d399fdadada9c01c791471e19db6fbf
367 | 7d51bf24ac5cb93236da68a3168fefd0a143e3faebaf4ff28f7939fd91ef
368 | c85f40523e9f8efc05c418fb92e98751c7fa37a6d4d71540b1f93bf4917a
369 | 4444bd32fcdb84091362c284090a01000040d9db6fbffde2e5975f5688ff
370 | 67064791bcf4d24bf1c61b6f3458ded8536f9b7a126eaeb623468c28e821
371 | a24b962c89e9d3a7673a86bdf6da2b060e1cb8c1faa54b97fef7191dcd39
372 | dec696efb9e79eb1c30e3b3479ec353535f1d0430f15ad661111871d7658
373 | f4ecd9b3c5e37bcf3df7c48a152b8a5287d66adb94723dde2cdb67a9414a
374 | e7ebdcd23db7f6fa19cc726eae53e7e6dcd2f9fb622c9d9b736bdb73cbb2
375 | fd65975d16279c704293c7e21615014749fcea57bf8a5b6eb9a564fd7ff5
376 | ab5f6df21689f5f5eddb372eb8e08258b66c59c17defb8e38e317dfaf40d
377 | a637f5eddb377efce31fc7bffef5afa29dc3983163e2820b2e68727dd7ae
378 | 5de3fbdfff7ea63f2ef98c1c39b2c501c7ebafbf1edff9ce775ce4000040
379 | abf290d16c5423110f3ef860bcfaeaabf907b453a7f8ec673f9ba9efd75e
380 | 7b2d1e7becb106cbf7df7fffa29e43be37a974edda3536df7cf3a2eeb347
381 | 8f1e2dee63c68c192e400000a0d5e5fb1f7f051c1fa98712a4e1c30f3f8c
382 | 8b2fbeb8a0b623468cc8dcffd5575fdd60d949279d54d4f72a17f2aad862
383 | be4965c08001d1bd7bf716f723e0000000da425d5d5dee1ff4028e0deba1
384 | 04e9f8c31ffe104f3df554de76fbedb75fe61ff6b366cd8ac993276fb06c
385 | bbedb68b430f3db468c73f7ffefcbc6daaabab8bb6bfdd77dfbdc57dac59
386 | b326fef77fffd7c5070000b43ab7a864a31a89b9e8a28bf25ee4fdfaf58b
387 | e38f3fbe597dbffdf6db1b2cfbfef7bf5fd0c34d0bb162c58a58b26449ce
388 | 36e51670fcf9cf7f8e55ab56b9f00000805627e0c8463512f3ca2bafc47d
389 | f7dd97b7dde9a79f1eddba75cbd4f7fbefbf1fdffdee773758b6f5d65bc7
390 | 19679c51b4e39f376f5ecef5db6cb34dd1f6558c80e3fefbef77d1010000
391 | 6dc23338b2518d045d71c515515b5b9bb3cde69b6f1ec71e7b6ce6be67cc
392 | 9811b7df7efb06cb962e5d5ab463cf1770146b0647f7eedd63b7dd766b51
393 | 1f8b172f16700000006dc63338b2518d042d58b020aebbeebabcedc68d1b
394 | 175dbb76cddcff0f7ff8c3b8e79e7bfefbdfdf7aebada21d7bbe078d16eb
395 | 21a35ff9ca575afc06953beeb823d6ac59e382030000da44be5b542a2a2a
396 | 14693d028e445d77dd75f1b7bffd2d679bfefdfbc731c71cd3ac0fd18409
397 | 1362d2a449b166cd9a06cfe568897c01c7565b6d559414f2c8238f6cd1f6
398 | 6bd6ac893befbcd385060000b419cfe0c8463512b56eddbaf8f6b7bf9d77
399 | 86c1f8f1e363e38d376ed607e9dc73cf8d214386c40b2fbc50b4e3ce778b
400 | 4a5555556cb1c5162ddac7a0418362afbdf66a511fbffef5afe3dd77df75
401 | a10100006d46c0918d6a24ecb5d75e8b2bafbc32679bfefdfbc7d5575fdd
402 | ec7d7cf0c107b17af5eaa21d73be191c112d7f0ec7e8d1a35b34556bedda
403 | b571c30d37b8c00000803625e0c8463512f78b5ffc22fef297bfe46cb3ff
404 | fefbc7a9a79e5a16c7bb60c18258bb766dce362d79934aaf5ebd9a755bce
405 | fa7efef39fc7ecd9b35d5c0000409b127064a31aede0823fe38c3362d5aa
406 | 5539db9d7beeb945796d6a4bd5d5d5e57da6474b66704c98302136dd74d3
407 | 666f3f7bf6ec16cd7801000028e6efbd9c3fe8051c1bd64309d23767ce9c
408 | 38fffcf373b6a9aaaa8a5ffce217d1bb77ef363fde7ccfe168ee9b5476dc
409 | 71c738e9a4935af4c7e3acb3ceca3bc3040000a035784d6c36aad14e4c99
410 | 3225264f9e9cb3cd36db6c5316b313f23d8763c08001cdeaf7e28b2f8ece
411 | 9d3b37fbb8264d9a14cf3df79c8b090000280bf5f5f5b97fd00b3836ac87
412 | 12b41f3ff8c10fe2f9e79fcfd9e680030e884b2eb9a44d3f08f9028ee6dc
413 | 623272e4c8183e7c78b38fe9a5975e8acb2ebbcc45040000940db7a864a3
414 | 1aedc8dab56be39bdffc66ded79b9e74d24971e38d3746972e5ddae438f3
415 | dda2b2d9669b65ea6fc71d77ccfb36995ce6cc9913c71c734cac5cb9d245
416 | 040000940db7a864a31aedcc3befbc1363c68c8975ebd6e56c3772e4c898
417 | 3a756a9b3c9323df0c8e7efdfa15fc41dd6aabad62ead4a9b1f1c61b37eb
418 | 58162e5c18471e7964de50080000a0b5e59bc1515151a148eb1170b443cf
419 | 3cf34c9c73ce3979efd7da7befbde3d7bffe756cb1c516ad7a7cf9028e4e
420 | 9d3a45bf7efdf2f6d3b76fdf983a756ab38fbfa6a6268e3efae8bc334a00
421 | 0000da82677064a31aedd4e4c993e3dc73cfcddb6ee79d778e871f7e3876
422 | d86187563bb69a9a9a58be7c79ce36f96e53e9debd7bdc79e79d3178f0e0
423 | 661dc38a152be284134e88575f7dd5c50200009425cfe0c84635dab15ffe
424 | f29705851c03060c88dffce6373166cc98a8aaaa6a95636bc98346070c18
425 | 1053a64c89a14387366bdf73e6cc89af7ce52bf1a73ffdc945020000942d
426 | cfe0c84635dab9499326151472f4ead52b2eb8e08298316346ecbffffe25
427 | 3fae7c01475333380e3df4d0983e7d7a7cfad39f6ed67e67cc9811071e78
428 | 60bcfefaeb2e0e0000a0ac99c1918d6a740093264d8af3ce3bafa0b68306
429 | 0d8a499326c5af7ef5abd865975d4a764cf3e7cfcfb9fea333387af7ee1d
430 | 37dc7043dc70c30dcd7e30ea4d37dd14c71e7b6cdedb63000000ca818023
431 | 1bd5e8206ebffdf638fffcf30b6ebfcf3efbc4b469d3e2273ff949e6d7b6
432 | 1622cb0c8ecf7ffef3f1e4934fc6a1871edaac7dd5d4d4c4f8f1e363e2c4
433 | 8979a778010000940b0147369d95a0e3b8edb6dba2a2a2222ebae8a282da
434 | 77ead4298e3efae8f8fad7bf1e4f3df554fcee77bf8b279e7822162d5ad4
435 | e263c917700c1e3c384e3bedb438eaa8a362fbedb76ff67e1e78e081b8f0
436 | c20b8b72cc000000ad49c0918d80a383b9f5d65be3fdf7df8f8b2eba287a
437 | f5ea55d0365dbb768dfdf6db2ff6db6fbfa8afaf8fe79f7f3ea64d9b16d3
438 | a64d8bd75e7bad59c7f1eebbefe65cbffffefbb7e85920fffce73fe3ecb3
439 | cf8e9933671a7400002049028e6c041c1dd03df7dc134f3df5545c71c515
440 | f1a52f7d29d3b61515153174e8d0183a74689c73ce393167ce9c78fcf1c7
441 | e3a5975e8a3973e6c4dcb973f3ce96a8acac8cae5dbb96e4dc56af5e1dd7
442 | 5e7b6d5c7ffdf5b166cd1a830d0000244bc0918d80a3835ab060411c7ffc
443 | f1f1b5af7d2dbef7bdef45757575b3fa193468509c72ca291b2c5bb97265
444 | 2c58b02056ad5a15ab57af8edadadaa8adad8daaaaaaa8aeae8eadb6daaa
445 | e8afa3adadad8da953a7c68d37de186fbdf5960106000092972fe0a8a8a8
446 | 50a4f508383ab8fbefbf3f1e7cf0c1183972648c1b372e860c19d2e23e7b
447 | f4e811db6db75dab1c7f4d4d4d4c9a34296ebdf5d658b2648901050000da
448 | 0d3338b2117010757575f1c0030fc4030f3c109ffffce7e3d4534f8de1c3
449 | 8747e7cee57b792c5cb8306eb9e596b8f3ce3b63c58a1506110000687704
450 | 1cd90838d8c01ffef087f8c31ffe10fdfaf58b030f3c30468e1c199ff9cc
451 | 67ca22ec58b162454c9f3e3d1e7df4d178f4d1473d6303000068d7eaeaea
452 | 72ae17706c48c041a3de7befbd983c79724c9e3cf9bf61c7befbee1bc386
453 | 0d8b010306b4da712c5ab4287ef7bbdfc5638f3d163367ce8cb56bd71a1c
454 | 0000a0433083231b010779ad1f7644446cb1c516316cd8b0183a74680c1b
455 | 362c860c1912ddba752bfa7e2fbef8e2f8c52f7e11f5f5f506010000e870
456 | f2fd1612706c48c04166efbcf34e3cfcf0c3f1f0c30fff7759bf7efd62cb
457 | 2db78c010306c4965b6ef9dfffdcb367cfa8abab6bf4ff76dc71c718366c
458 | 5893fba9adad156e00000025d3d45b488ab13ceb1b4e1a6b9f2fc010706c
459 | 48c05124c3860d8bd5ab5797ec03532e1fc642972f5fbe3c962f5f9eb3ef
460 | 8d37de38e7f97de94b5f8aeeddbbb7ea71b746df59c63385f369ed6bb6d4
461 | c75daa7f9c8c714592b5ea2863ecef92bf4bc6d8df257f97fc5dea08d76c
462 | 7b24e0107094c4c8912363e4c8910a514423468c88112346280400004023
463 | 041c1b1270ace7bdf7de8b7ffce31f0d9637759b44a99737a594fb6dcd73
464 | dd68a38d62c71d776cf23c172d5a14f3e7cf6fd73568ebf16eab1a38d7b6
465 | bbce4a598314ce550d8c77473bd7ac3570ae699fab1a643f5fe7ea5c533f
466 | d7b7df7edb0ff9f5544484871cd026060d1a147ffce31f9b5c7ff7dd77c7
467 | 59679da550000000e4653e0b6de6bdf7decbb9be478f1e8a040000404104
468 | 1cb499dadada9ceb051c000000144ac0419b59bb766dcef51b6db4912201
469 | 0000501001076da6bebe3ed6ac59d3e47a33380000002894808336b57af5
470 | ea26d799c101000040a1041cb4290107000000c520e0a04de5ba4545c001
471 | 000040a1041cb4a95c3338ba77efae400000001444c0419bca1570545555
472 | 455555952201000090576725683faaaaaa62d75d778ddd77df3d3efef18f
473 | 47efdebda34b972ed1b56bd7a8a9a989b973e7c6bc79f3e2d9679f8d575e
474 | 79a52c8e3957c01111d1a54b97bcaf930500000001473b3078f0e038edb4
475 | d3e2eb5fff7a74eddab5a06dfef9cf7fc6030f3c10b7dc724b2c5fbebccd
476 | 8e3dd7333822226a6b6b0d3000000079b94525615b6cb145dc7efbed3163
477 | c68c38fae8a30b0e3722223ef6b18fc559679d153367ce8cc30f3fbccdce
478 | 21d70c8e356bd6445d5d9d81060000202f0147a2468c18114f3cf1441c70
479 | c001515151d1ec7e36d96493b8e69a6be29a6bae894e9dcaeb7258b56a95
480 | 81060000a020028e048d1d3b36eebaebaee8d7af5fd1fa3cfcf0c3e3ca2b
481 | af6c5158d21cb95e05bb72e54a830d00004041041c8939eaa8a3e2bcf3ce
482 | 2b491071f4d147c7d8b1635bf57c72051c66700000005028014742bef8c5
483 | 2fc695575e59d27d9c75d659b1f5d65bb7da39f5ecd9b3c9756670000000
484 | 50280147227af6ec193ffde94fa3b2b2b2a4fbe9debd7b5c72c925ad765e
485 | 6e51010000a018041c89f8f6b7bf1d9b6fbe79abecebcb5ffe720c1c38b0
486 | 55f6d5a3478f26d7b9450500008042093812b0cd36dbc4a9a79edaaafb1c
487 | 356a54c9f7d1a54b97a8aaaa6a72fdd2a54b0d3e00000005117024e08823
488 | 8ec8190494c2a1871e5af27de4ba3d2522e2a5975e32f80000f07fecdd79
489 | 784c77e3ffff57f6d86289885d82d6d216adaab65ab52fb5f6638f5d8ba2
490 | d45545d1e2a6d6a2b5961b75aba5aa949bdaf7d6de1bb56fb5546d114122
491 | 2511497e7ff899af314b66929998c3f3715dbd2ae73d73ce9973cecc39e7
492 | 75de0b00871070184046840d8f2b55aa94424242dcba0c7b1d8c4ad2c183
493 | 07d9f9000000000087107078b8175e7841c58a157b22cb2e51a2845be76f
494 | 2fe0484949d1e1c387390000000000000e21e0f070e5cb977f62cb7677c0
495 | 61af23d3f3e7cf2b363696030000000000e010020e0f171e1efec4965db2
496 | 6449b7cebf54a95236cb689e020000000070060187872b5ab4e8135b76b6
497 | 6cd9dc3a7f7b010a010700000000c019041c1ecedd1d7dda131717e7d6f9
498 | 972e5dda66d9810307d8f90000000000871170783877870cf6dcbe7ddb6d
499 | f30e080850585898d5b2e8e868eddbb78f9d0f0000000070180187877b92
500 | 1d6dba335c79fef9e7e5e3e363b56ccd9a354a4a4a62e703000000001c46
501 | c0e1e1dc598b2235c78e1d73dbbced7530facb2fbfb0e301000000004e21
502 | e0f070870f1f7e22cbbd7bf7aeb66cd9e2b6f9972953c6eaf49b376f6ae7
503 | ce9dec7800000000805308383cdcb66ddb9ec872376fdeacf8f878b7ccdb
504 | d7d7570d1a34b05ab676ed5addbf7f9f1d0f00000000700a0187873b73e6
505 | 8c2e5ebc98e1cb5db16285dbe65db3664d9ba3c3d03c0500000000901604
506 | 1c06b079f3e60c5dde912347b46ad52ab7cdbf55ab5656a7c7c4c468fbf6
507 | edec700000000080d308380c60ce9c394a4949c9b0e50d1e3c58c9c9c96e
508 | 9977debc7955b56a55ab656bd7ae556262223b1c00000000e034020e0338
509 | 79f2a4d6ac599321cb5ab972a576efdeedb6f9b76cd9d2e6f0b0f3e6cd63
510 | 670300000000d2c44b520a9bc1f3bdf0c20bdab061835b9771fefc79d5a9
511 | 5347b1b1b16e997f962c59b475eb56152850c0a26cdfbe7d363b1e050000
512 | 00002035d4e03088a3478fba35e0888b8b53870e1ddc166e787979e99b6f
513 | beb11a6e48d2cc9933d9c900000000803423e03090cf3fff5c7171712e9f
514 | 6f7c7cbcba76edaa53a74eb96ddd7bf5eaa57af5ea592dbb72e58a56af5e
515 | cd0e0600000000a419018781fcfdf7dffae28b2f5c3acf989818b568d142
516 | 5bb66c71db7ad7a851437dfbf6b5593e69d224ddbf7f9f1d0c0000000048
517 | 33fae030a0efbefb4e75ead449f77c2e5fbeac888808b7d6dc2855aa9496
518 | 2d5ba6a0a020abe5bb77ef5693264d3274941800000000c0d38780c38082
519 | 8383b579f366858484a4791e274f9e54444484ae5cb9e2b6f56cdab4a9c6
520 | 8c19a34c9932592d8f8f8f57b56ad574fefc79762a00000000205d68a262
521 | 40d1d1d1ead0a183fef9e79f34bdffc71f7f54c3860ddd166ef8fbfb6bec
522 | d8b19a346992cd704392c68e1d4bb8010000000070096a7018d8db6fbfad
523 | f9f3e7cbcfcfcfe1f76cdbb64d6ddab4515252925bd6a94489129a3c79b2
524 | 5e7cf145bbaf5bbf7ebd3a75eaa4e4e46476240000000020dd08380cae5e
525 | bd7a9a3e7dba7c7c7c1c7ecf9e3d7bf4e1871f2a3232d265eb9133674e7d
526 | fae9a76ad7ae5daaebb26bd72e454444282121811d080000000070091f49
527 | 43d90cc675faf4695dbd7a55356bd69497979743ef2958b0a09a356ba6b3
528 | 67cfeacc9933e95a7e6060a03a74e8a0d9b367ebf5d75f97b7b7fd564f87
529 | 0f1f56444484eedcb9c3ce0300000000b80c35389e12356bd6d494295394
530 | 2d5b36a7de77f4e8514d9e3c59ab56ad72aad94aa952a5d4ba756b356dda
531 | d4e60829d696d5b2654b454747b3c300000000002e45c0f114295ebcb8e6
532 | ce9dabf0f070a7df7be1c205fdf6db6ffadffffea7fdfbf7ebafbffe5272
533 | 72b2a98f8ca2458baa4c99327ae9a59754b16245952b57cea9f9cf9b374f
534 | 83070fa6590a00000000c02d08389e32414141faf6db6f55b56a558f589f
535 | 7ffef9477dfbf6d5f2e5cbd9390000000000b7a10f8ea74c424282962f5f
536 | ae989818952f5f5e0101014f6c5dd6af5faf0f3ef840bb77ef66c7000000
537 | 0000dc8a1a1c4fb1e0e060f5efdf5f111111a976fee94abb76edd2c89123
538 | b56fdf3e760200000000204310703c035e7cf1450d1b364cafbffebadb96
539 | 919898a86ddbb669ce9c39dab2650b1b1d0000000090a108389e21254a94
540 | 50e3c68dd5b8716315295224ddf34b4a4ad2ce9d3bb57cf972ad5ebd5a31
541 | 31316c6400000000c01341c0f18c7ae59557d4b87163952d5b56050b1654
542 | 6868a8dd662c2929293a77ee9c0e1f3eacc3870febd0a1433a7cf830a106
543 | 00000000c02310704092e4e7e7a7fcf9f3ab60c182ca9e3dbb6edfbeaddb
544 | b76f2b363656b76fdf564c4c8ceeddbbc78602000000007824020e000000
545 | 00006078de6c0200000000006074041c0000000000c0f008380000000000
546 | 80e11170000000000000c323e00000000000008647c00100000000000c8f
547 | 80030000000000181e01070000000000303c020e00000000006078041c00
548 | 00000000c0f00838000000000080e11170000000000000c323e000000000
549 | 00008647c00100000000000c8f80030000000000181e0107000000000030
550 | 3c020e00000000006078041c0000000000c0f00838000000000080e11170
551 | 000000000000c323e00000000000008647c00100000000000c8f80030000
552 | 000000181e01070000000000303c020e00000000006078041c0000000000
553 | c0f00838000000000080e11170000000000000c323e00000000000008647
554 | c00100000000000c8f80030000000000181e01070000000000303c020e00
555 | 000000006078041c0000000000c0f00838000000000080e1117000000000
556 | 0000c323e00000000000008647c00100000000000c8f8003000000000018
557 | 1e01070000000000303c020e00000000006078041c0000000000c0f00838
558 | 000000000080e11170000000000000c323e00000000000008647c0010000
559 | 0000000c8f80030000000000181e01070000000000303c020e0000000000
560 | 6078041c0000000000c0f00838000000000080e11170000000000000c323
561 | e00000000000008647c00100000000000c8f80030000000000181e010700
562 | 00000000303c020e00000000006078041c000000ae0f107c000020004944
563 | 41540000c0f00838000000000080e11170000000000000c323e000000000
564 | 00008647c00100000000000ccf974d00000090baac59b32a383858bebebe
565 | ba7efdba626363959292c2860100c043107000f0387e7e7e6adebcb95e79
566 | e515ddbd7b577bf7eed5ca952bb99180c71da7414141ca962d9bcdff8282
567 | 8294356b5605050569f8f0e1ba72e50a1bce40fbf7f5d75f57b56ad554a5
568 | 4a15858787cbdfdfdfec358989898a8e8ed6eeddbbb576ed5a6dd9b245b7
569 | 6fdf4e75decd9a35d3bbefbe2b499a3973a676eedce9d4ba65cf9e5d2d5b
570 | b654e9d2a575f1e245ad5cb952274e9c706a1e010101ca962d9bb266cd6a
571 | 3a5e1ffd77962c59cca66fddba55cb962de3c0000078342f49dc31e09914
572 | 1a1aaa6ddbb619667d870d1ba6850b173ef5fb25242444f3e6cd53993265
573 | cca66fdbb64deddbb7d7bd7bf738789f0273e7ce55c58a150db3beb76edd
574 | d2ebafbf2e49ca952b97f6efdf6f71b39b9a2a55aae8d4a953ec7c03041b
575 | 111111eaddbbb74243439d7a6f6262a2962e5daaafbefaca669855a24409
576 | ad5dbb5601010192a4debd7b6bf1e2c50e2fa374e9d29a3b77ae0a142860
577 | 9a76efde3d0d1c38d0a173c4ebafbfae1f7ffc517e7e7e4e7db6c993276b
578 | d4a8511c2000008f460d0e3cb3bcbdbd1514146498f5cd9d3bf733b15fc6
579 | 8e1d6b116e48d23befbca34f3ffd5423478ee4e07d0ae4cb97cf50dfbf4c
580 | 993299feede5e5e574b8016378f3cd37356edc388585855994ddbc795397
581 | 2f5fd68d1b37949292a2909010e5c99347b972e592979797a407e148cb96
582 | 2dd5b87163cd9e3d5b93264d32abd1e1efefaf69d3a699c28d87e72247f9
583 | fbfb6bfaf4e966e1c6c3e9a3468dd2e1c38775f8f061bbf3f0f1f1713adc
584 | 0000c0280838f0cc4a4a4ad2c58b17cda6f9f9f9294f9e3ca68b55472427
585 | 27ebf2e5cb0ebf3e2828284d377646ba194cabe0e060d5ae5ddb6679a346
586 | 8d08389e12ce1ccfc9c9c9dab3678fce9d3ba7cb972fcbcbcb4bc58a15d3
587 | bbefbeeb50d0101717a79f7ffe5967cf9e556262a2f2e5cba742850aa96a
588 | d5aa0eaf879f9f9ffcfcfc949898a8fbf7efebd8b1630f4ea2bebe2a54a8
589 | 90590002636ad3a68d468c186176f31f1919a9d9b3676bd3a64d3a71e284
590 | d56672a1a1a1aa59b3a66ad5aaa56ad5aac9dbdb5b818181ead1a387ead5
591 | aba7ae5dbb9a4287810307aa54a952168183a3aa54a9a2e2c58bdb3c46db
592 | b469a3fefdfbdb9dc73ffffc633a7e1ffeee3a7bde0300808003f030d7ae
593 | 5dd36bafbd66313d303050ad5ab5d2f0e1c3537db23674e8502d5fbe5cd7
594 | ae5d736ad90101012a58b0a0de79e71dd5ae5d5b6fbffd36018764f5a9e9
595 | a3f2e7cf2f6f6f6f25272773003f0301c79d3b77346dda34fdf0c30f56ab
596 | fb87858569cd9a35ca9e3dbbcd79c4c4c4a86ad5aaba7af5aad5ef7addba
597 | 75d5b76fdf548f3de9410793376fde544c4c8c6ad4a8615656a244090d1c
598 | 3850356bd664e71ad0c08103f5d1471f99fe4e4c4cd4983163346bd6ac54
599 | 9bc54546466afefcf99a3f7fbec571101616a6952b57ea5ffffa97ce9e3d
600 | abce9d3b5bbcdf9980c356b8f1d0f3cf3f9fea3cfef8e30f8be3374b962c
601 | fae0830ff4f1c71f2b30309003020060580c130b3c263e3e5e73e6cc49b5
602 | 4df4d1a347f5ef7fffdbe970439212121274e6cc197df7dd776ad1a2851a
603 | 366c986ab5e26721e03873e68cddf2bffffe9b70e329912d5b36bbe5870f
604 | 1f56eddab53561c2049b7d199c3f7f5e3ffdf493ddf9fcf2cb2f56c38d87
605 | dff565cb96a9468d1a9a3f7f7eaaeb9c254b169b65274f9e54fbf6edb57d
606 | fb7676aec1b46cd9d22cdcb87af5aa1a366ca869d3a639dde7cfc3e3a07d
607 | fbf68a8b8b93f4a0f9c8881123f4fdf7df5bad25e14c1395d46a0bda3ad6
608 | 53f3cf3fff68e2c4891a306000070400808003781aeddbb7cf6ef9860d1b
609 | 5cb6acfffdef7faa5fbfbe56ac5861f335cf42c071ebd62dbbdb60e9d2a5
610 | 1c984f812c59b2d87d6abd77ef5e356cd830d5c04b92ce9e3d9bae1b42e9
611 | 414d917efdfa69fcf8f1765f97356bd654e7356edc3876b081942f5f5ea3
612 | 478f36fd1d1b1bab56ad5ae9e0c183e99aef860d1bd4a851235dba74c934
613 | cd56bf17ce041cdbb76fd7ad5bb76c96af5cb9325debfde38f3f5a34dd04
614 | 00c0480838001be2e3e3ed96c7c6c6ba7479898989ead1a387cd0bd4d49e
615 | 783f2d060e1ca8fdfbf75b4c5fb76e9d264d9ac481f914b0772c9f3e7d5a
616 | eddbb75742428243f34aad468f334fe0c78f1f6f77140a7b35381e629414
617 | 035d00797b6bc2840966fdb8f4eedd5b274f9e74c9fc8f1f3fae468d1ae9
618 | faf5eb765fe74c1395ebd7afebe38f3f36d50e79d48c1933b47af5ea74af
619 | 37c73000c0c8e88303f020494949eadbb7af5e7bed358be109edf533f034
620 | b971e3861a376eacfffbbfff53d9b26575f7ee5dedd9b3c7a53566f064d9
621 | 3a96efdfbfafae5dbb2a2626e689addb800103f4e69b6f5aed93c3911a1c
622 | b76edd52424282d92819f04c4d9a34d173cf3d67fa7bfbf6ed5abb76ad4b
623 | 9771f9f26575e9d2458b172f96afaff54b2e67020ee941ed902a55aaa855
624 | ab567afef9e775e5ca15ad5bb74ebb76ed72c93a5b0b4f0000300a020ec0
625 | c3c4c6c6eab3cf3ed39c3973cca63f0b4d541ebdd15dbc7871aafda0c098
626 | 6cd5e0983b77ae4e9c38f144d72d31315143860cd1dcb9732dca1ca9c121
627 | 897e620cc0c7c7479f7cf289d9b4efbefbce2dcbdabd7bb7befcf24b0d1d
628 | 3ad46ab9334d541eba7cf972aa4daa00007816d14405f040ebd6adb36803
629 | fe2c051c78ba59abc171ebd62d7df5d5571eb17e1b366cd08e1d3b2ca63b
630 | 528303c650ae5c39152952c4f477424282b66eddeab6e5cd9a35cb6c6856
631 | b30b316f2ec500007015ceaa8087faf6db6fcdfe0e0c0cb4d9491d6024d6
632 | 6a702c5ab4c8e5fddaa4c7ecd9b32da6395a83039eaf5ab56a667f5fba74
633 | 29d57e97d22339395943860cb15ae66c13150000601b0107e0a156ad5a65
634 | 310204b538f03478fc384e4949d1bc79f33c6a1d376cd8a0c8c848b36904
635 | 1c4f8f2a55aa98fd9d5a47a0aeb063c70ead5bb7ce623a01070000ae43c0
636 | 0178a8a4a4248b1ef10938f03478fc38deb16387ce9d3be771dfbf1f7ef8
637 | c16c1a4d549e1ec58b1737fb3b73e6cc19b2dce9d3a75b5e88d144050000
638 | 97e1ac0a78b0356bd6d8bd31048ce8f1e3d815435bbac3e34fdb09389e0e
639 | fefefe16cda41e1fb5ca5df6ecd963d1912e01070000aec35915c84079f3
640 | e6d5c68d1bb571e346454444a4fafabd7bf7eac68d1b366f0c01237afc38
641 | debc79b347aee7e1c38775ebd62dd3df3451793a0407075b4c0b09095178
642 | 7878862cfff1117a68a2020080eb1070001928478e1c2a5dbab44a972ead
643 | 909090545f9f9494a4df7fffddf4b7b5d12700a37934e03873e68c2e5cb8
644 | e091eb999c9caceddbb79bfe26e0783a64ca94c9eaf4060d1a64c8f2972e
645 | 5daac4c444d3df041c0000b80e01079081d252c57ddfbe7da67f5b1b7d02
646 | 309a47038e6ddbb679f4ba3e3a5c2c4d549e0e71717156a777efde5db972
647 | e5ca90e5efdab5ebff5d88d14405000097e1ac0a64a062c58a39fd9efdfb
648 | f79bfe4d0d0e3c0d1e0d380e1f3eecd1eb7aecd831d3bf09389e0eb68623
649 | 0e0a0ad2d4a953336438ee8d1b379afe4d0d0e00005c878003c84065ca94
650 | 71fa3d7ffcf18766cd9aa559b36659744e0718d1a335911e0d103cd1c993
651 | 274dffa689cad3213e3e5e57ae5cb15af6ce3bef68ce9c39ca9d3bb75bd7
652 | e1d180831a1c0000b88e2f9b00c83855ab5675fa3d77eedcd1e0c1831d7a
653 | adbfbfbfb266cd6af5bf2c59b2286bd6ac5ab870a1fef9e79f54e7151414
654 | a482050b9afebb7fffbea2a2a274fefc799d3871422929292ed9265e5e5e
655 | ca9429933267ce6cfabfad7f5fb972456bd7ae75c972cb952ba73a75ea28
656 | 3c3c5c79f2e4514848887c7d7d151515a5ebd7afebd2a54bdab2658b7efb
657 | ed37ddbb778f83d7851ed6444a4a4ad2a953a73c7a5d63636375f9f265e5
658 | cf9fdfed0147484888ead5aba7b0b030152a5448050b16d4bd7bf7141d1d
659 | ad3367ce68e3c68ddabb77af929292dcfeb9b364c9a2ead5abeb8d37de50
660 | be7cf9141a1aaadcb9732b363656515151ba76ed9afef8e30fad5bb74e97
661 | 2e5d32dc31b86fdf3ed5af5fdf6a59b56ad5f4db6fbf69f2e4c95ab46891
662 | 5947cfae72fefc790d1e3c588181813a74e850aaaff7f3f333fd1edafbef
663 | 9f7ffed192254b0cb10ffcfdfdf5f6db6feb9d77de51fefcf9151a1aaad0
664 | d050ddb973475151518a8a8ad2b163c7b46edd3a9d3e7d3a5dcbf2f3f3b3
665 | 7a3e7cf8ef6cd9b269e5ca958a8c8c74e8bbf1f0fb59b0604149d2f5ebd7
666 | 75e1c2051d397244c9c9c919b60dc3c3c355a74e1d9528514279f2e45168
667 | 68a8b267cfae989818ddb87143c78e1dd39e3d7bf4ebafbfda6c9a959e6d
668 | fac61b6fa84a952a2a54a890f2e6cdab3c79f228212141d7ae5d53545494
669 | 4e9d3aa575ebd6797c900d808003401a54ac58516161612e9f6f8f1e3dd4
670 | a3470f65c992c5a1aad57ffcf18759c7a58f0a080850e3c68dd5b16347bb
671 | b54da2a2a2b476ed5a7df3cd37369f84daf3d9679fa94d9b36ca9c39b302
672 | 03031d7edffaf5ebd3157064c992453d7af450b366cd54a04001abaf295c
673 | b8b0e9df9d3a75d23ffffca30d1b3668fcf8f13a73e68c53fba57dfbf6e9
674 | dab70d1b36d4d5ab57ad968d183142356bd6747a9e870f1fd6fbefbfff44
675 | bf0b7ffffdb76edcb8a18b172f2a2121c1e3bfbb1b376ed4abafbeaa9b37
676 | 6fbaedb7a143870e7af7dd77ed7e87bb75eba64b972e69d8b0615ab972a5
677 | 5bd6e5e5975f56efdebdf5ce3befc8dfdfdfa2bc4081022a55aa9424a969
678 | d3a6faf2cb2f75f4e8514d9b364dcb962d33cceff18e1d3b6c061cd28310
679 | eef3cf3f57bf7efdb46ad52aad5ab54a5bb76ed59d3b775cb60eb366cdb2
680 | 5b7ee0c00153b8ebebebd8e5dad1a3473d3ee0080f0fd7a79f7eaa9a356b
681 | da6cf6f5fcf3cf4b921a376eac810307eadcb9739a33678efef39fffe8fe
682 | fdfb0e2da769d3a61a3a74a8b265cbe6d0b9312a2a4afffdef7fad5f2cfb
683 | faaa4e9d3aead8b1a3de78e30d9bf3888989d1e6cd9b3561c204a7ce17ce
684 | 080c0c54e7ce9dd5a44913d3767a5cfefcf92549952a5552e7ce9d151b1b
685 | ab050b1668dab4698a8e8e4ed7f20b1428a04f3ffd5475ebd6b539b25bf1
686 | e2c54dffeedbb7affefefb6fcd9f3f5fd3a74f37eb60170008380083f2f1
687 | f1d1e79f7fee967907050529478e1c0ebfbe4489121601879797977af4e8
688 | a16eddba2967ce9ca9ce232424446ddbb655b366cd347af468fdfbdfff76
689 | 6a9db367cf9e219df93dfaf99a3469a2418306293434d4a23c212141972f
690 | 5f567c7cbc4243439533674e797979994291c68d1bab5ebd7a9a3b77aec6
691 | 8f1faf98989854979923470ed3d3bd34ff40dbb9a9090e0e4ed3fc1d7942
692 | e96e8d1a3532d4f7f7b3cf3e73db7777cc98314e6d8f02050a68c68c197a
693 | f7dd77d5b3674f876ff652131c1cac810307aa65cb96a6635f92eedfbfaf
694 | 6ddbb6e9c489138a8c8c54f6ecd9f5dc73cfa97af5eaa61a2d2fbcf082a6
695 | 4e9daa366dda68e0c08166cd7a3cd5f2e5cb3574e850050404d87d9dbfbf
696 | bfde7bef3dbdf7de7b4a4848d06fbffda65f7ffd553b77eed4891327dcf6
697 | b4decbcbcbea6f959165ce9c591f7ffcb13efcf043b3c0212525457bf6ec
698 | d11f7ffca1ab57af2a53a64c0a0b0b53ad5ab54ce7a3f0f0700d1b364cad
699 | 5ab5d2c08103b567cf9e549797254b16a7ce33254b96b41a70b46edd5a7d
700 | faf451debc791d3ab7bdf7de7b6ad0a08166cc98a1912347bab4b663e3c6
701 | 8d3568d0205380f1a8e4e46453cd971c3972283434d4b49d838282d4ad5b
702 | 37356bd64c7dfaf4d1860d1b9c5ebebfbfbfba77efae9e3d7b5a8c44b46f
703 | df3eeddbb74f57ae5c91bfbfbf8a1429a21a356a284f9e3c92a442850a69
704 | c080016ad9b2a5060d1aa4ad5bb772610880800330b2be7dfbaa7cf9f26e
705 | 99f7810307346fde3c050404a870e1c22a5dbab4cda72a0f038e4765cd9a
706 | 5553a64c51ad5ab59c5e766060a0860e1daafcf9f36be8d0a10ebfefca95
707 | 2ba62aabdededea650c11dfcfcfc3479f264356cd8d06c7a525292962c59
708 | a2f9f3e79b8d542349a1a1a16ad1a2853a75ea64ba40f3f3f3d3071f7ca0
709 | 3a75ea282222427ffef9a7dde55ebe7c59b1b1b176f7c5e392929274f2e4
710 | 49538062af76c3993367f4e79f7f2a2424c4e1ce67232323535d6f648c8a
711 | 152b6af2e4c9690ec11a356aa4c0c040bdfffefbe9bec92e55aa94162d5a
712 | 643174f5bc79f3347efc785dbb76cde23d99326552b76eddd4ab572f534d
713 | 8f37de78436bd6ac51c78e1d3d7e749c9898182d59b244ad5bb776f83d01
714 | 0101aa51a3866ad4a8619ac7eeddbbb56bd72eeddcb953c78e1d7359e091
715 | 929262d634ce5a6d1a23c99b37af7efcf1473df7dc7366d3376cd8a02143
716 | 86e8fcf9f3567fbb1fde103ffc1d2d55aa94962e5daabe7dfbea871f7eb0
717 | bbcc93274f6adebc79f2f3f353c1820555b26449bb7dab3c7e6ef4f3f3d3
718 | a851a3141111e1fcc5b5afaf7af4e8a182050bba24880c0c0cd4f4e9d3ad
719 | 9ea7376cd8a01f7ef8419b366d32ab1de1ebebabfaf5ebab57af5e2a59b2
720 | a4242977eedc9a3b77aebefcf24b4d9b36cde1e5e7ca954b0b172eb4a8d9
721 | b97dfb767dfef9e7569b1afaf8f8e8bdf7ded3902143141c1c6c0aaa162e
722 | 5ca861c38669faf4e99c0800b88597a414360360a94993269a3c79b2cd72
723 | 474ed07e7e7eead7af9f7af4e861513666cc184d9c38d1e5eb9d2d5b367d
724 | f6d967ead8b1a3d5f2eddbb7ab79f3e692a4b0b030cd9d3bd7eca2f3f6ed
725 | db3a75ea942e5fbe2c5f5f5fe5c9934765ca9449b58a6ffffefd356fdebc
726 | 34af77505090dab66dab9e3d7bda0c05d6af5faf0e1d3a387551386bd62c
727 | 55ab56cde246bf7bf7ee6643355a131c1caca953a7aa72e5ca66d36fdebc
728 | a976edda590423d6942d5b569f7cf249aacd49c68c19a3993367a6a90a7c
729 | f9f2e5d5a3470fd5a953c76af992254b3465ca148fefef222ddab56ba7d1
730 | a347db2c1f316284a64e9d9aa1eb74e6cc198b279c9254a54a159d3a754a
731 | 8d1a35d2942953cc46cf3874e89076edda650a13f2e6cdabca952b5bdc74
732 | 3d6ec890219a3973669ad7f5e5975fd6c2850bcd42b2c4c44475ebd64dab
733 | 57af76e8d8fbe1871fcc9a1adcbb774f5dba74d1faf5eb3dfad8090a0ad2
734 | b66ddb5c5653223636567bf6ecd16fbffda60d1b36e8afbffe72d9ba66ce
735 | 9c59050a1450c3860dd5a54b179b43861f3d7a344d4dd71e357dfa748b40
736 | 5892264f9eac51a346393dbfc2850b6bf1e2c566cdff24e95ffffa9766cc
737 | 9891eafbc3c2c2f4f3cf3f9bd5a0484949d1175f7ca1efbefbcee1f57858
738 | 03a16fdfbe66b5941e3a77ee9c2a55aa640a02befbee3bbdfaeaaba6f2f8
739 | f8781d3f7e5c57ae5c517272b2e9dc985a33cb499326d9fd8d4a4df6ecd9
740 | 356fde3cb3757978bcf5e9d347ab56ad4af5d89933678ede7efb6db3e95f
741 | 7cf18566cf9e9deaf2434343f5e38f3f5a3487f9faebaf356edcb8546ba8
742 | 8486866ad9b265164d74bffaea2b7dfdf5d75c6c0220e0008c1070848484
743 | a876eddaeadebdbbcd7e37dc15703cf4d34f3f992ed6ac5dc465c992456b
744 | d7ae350d5d7be4c8117dfdf5d7dabc79b345cd81a0a020b56ad54a9f7efa
745 | a9cd8e16e3e3e355ad5a35ab4fe29c51a54a152d58b0c0ea05a8330187b7
746 | b7b7162e5c68114ec4c6c6aa4e9d3a0eafa78f8f8f162c5860319fbb77ef
747 | aa4183060e759ee6e5e5a5f1e3c7ab65cb9656cbaf5dbba60a152aa4ab6d
748 | b2b7b7b7e6cd9b67d191edc891233565ca94a7f67b6ab480237ffefc9a3b
749 | 77ae2930fcf5d75f3564c8109bcd3ade7cf34d8d1e3ddaac4dfbe3c761e5
750 | ca95d3d4d167e9d2a5b57cf9728b7e107af7eeadc58b173b3c9f4a952a69
751 | d1a2456681cdfdfbf7d5b87163b361ae3d51c58a15b570e142abfb2bbd4e
752 | 9e3ca9f5ebd76bd9b2652e1d01ebe5975fd68a152bac0e2feb6901479e3c
753 | 79b476ed5a8be61ddf7cf38dc68e1debf07c8a152ba6d5ab575b043b1f7e
754 | f8a156ac58e1d43a4d9c3851cd9a35b3989e9090a0f0f070f9fafa6ac992
755 | 257aedb5d7243de81076c284095ab3668d4507dd99336756c3860d3568d0
756 | 20532d85c7252727ab71e3c6fadffffee7f4bec8962d9b56ac58611174de
757 | b973470d1a34d0f1e3c71d9a4f850a152c9adf242424a866cd9a766bf505
758 | 050569eddab516d73173e6ccd1a041831cfe1cf9f3e7d7ba75eb2cb6d167
759 | 9f7da6efbfff9e0b4e002ec5d864401a75edda551b376e34fb6fdbb66d3a
760 | 7cf8b0fef8e30f8d1d3bd62d9d8a3acad6939987d5d0c78f1faf62c58a29
761 | 252545a3468d52ddba75b566cd1aabcd226263633563c60cd5aa55cb6a75
762 | 75e9416d892e5dbaa47bbdb76eddea50fbead4f4ead5cb229490a49e3d7b
763 | 3a15c2242525a96bd7ae164f633365caa41933663834b2464a4a8a060f1e
764 | 6cb3ff0b5f5fdf7477bc969c9c6cf1c47dc3860d4f75b86134afbcf28a66
765 | cd9a253f3f3f2527276bd0a0416ad9b2a5dd3e2b76eedca9860d1bda0cd2
766 | 3265caa4b66ddb3abd2e8181819a366d9a45b8b174e952a7c20de941879d
767 | 8f3f89f5f5f5d5a44993dc121cb8d29e3d7bd4be7d7b87fad57156891225
768 | d4b3674f6ddebc59ab57af56dbb66d9dea54d99603070eb8ad935957f2f2
769 | f2d237df7c63116eecdbb7cfa970437a101af6efdfdf62fa9831639cae81
770 | 63ab73d780800005050569c08001a67063d6ac59aa5ab5aa962c596275f4
771 | b13b77ee68d1a245aa56ad9acd4e45bdbdbdd5b367cf346dc39123475aad
772 | c5f5f1c71f3b1c6e480fc24c6b9fb757af5e76df67ed3ae6d4a9530e8fec
773 | f6d0e5cb97d5ab572f8bda1e43860c51787838270700041c8027080d0d55
774 | e9d2a5cdfe7beeb9e7141c1c6cb5f64146b335ac5ed6ac59d5bd7b77356c
775 | d850292929ead7af9f264f9eecd0d093e7ce9d53fbf6ed6db6336fdebcb9
776 | cd5ef19de1cc859b35152a54509f3e7d2ca66fdab4294d9dabc5c4c468e4
777 | c89116d38b152be6f013cdb8b8384d9a34c96a59ae5cb9f4d65b6fa57bbb
778 | 3ddacefbfefdfbfae28b2ff8a27a903163c62873e6cc4a494951cf9e3d35
779 | 67ce1c87de77ebd62dd3883ed6b468d1c2ead37c7b060f1e6c51e53c3e3e
780 | deea71ee88c993275b8cf853b46851b775aeec4adbb76f57b56ad5b47dfb
781 | 76b72da35cb9721a33668c76eddaa5f6eddb3b3c2a8a2d870f1ff6f8edda
782 | b9736755a952c562ba33fd353d6af9f2e516cd02b367cfee7433873367ce
783 | d86c56d1b66d5b75ebd64d923461c2040d1e3cd8a1919ea2a2a2d4aa552b
784 | ddbd7bd76a79f5ead52d9ae8a4e6fffeefffd4a449138be90f47f5715481
785 | 02056c9e0bead7af6fb37f97e6cd9b5badc9336cd8b0340d55bd65cb166d
786 | dab4c96c5aa64c993469d224797b733b0280800378e2121212141b1b6bf6
787 | 5f5a4efaee12151565b3ec61d5d27ffffbdf5ab0608153f33d78f0a0cd27
788 | bc993367b668279c16e919c6cecbcb4b63c78eb57ac33761c28434cff797
789 | 5f7ed1d1a3472da6376dda54afbffeba43f3f8e1871f74e3c60dab651f7d
790 | f451bab7dba34f4ad7ac59a30b172ef045f5200f9ba54c9c38d1e921552f
791 | 5cb860b3495b6868a8a9134147942f5fde6a53af9f7ffe394dc33e4b0ffa
792 | edb0d61f42bb76ed6c0ec9ec49ae5cb9a2e6cd9bab43870ee90e58ed090d
793 | 0dd5a851a3b464c9125307c6695d5f4f161a1aaa8103075a4cdfb56b9743
794 | 7d17d962adcf8e2a55aad81dbaf57177eedc515c5c9cd5b287ebfccb2fbf
795 | 68dcb8714eaddbc58b176d76dce9ededed54889d23470eabe1797272b2d3
796 | b55f9a3469a2cc99335b2d0b0c0c54be7cf92ca607050569f8f0e116d38f
797 | 1f3faecd9b37a779ff591b71ad7cf9f2aa5dbb36270800041cc0933666cc
798 | 18952c59d2ecbf22458ae8a5975e52dbb66db560c102879efcb88bbd8ebf
799 | bcbcbc74eedcb934777c3677ee5cbb374f4f52f5ead5ad56e93d71e2840e
800 | 1c3890aeedb970e142ab65a955f37d283e3ede66d3a1ca952beba5975e4a
801 | d7677ff422df91cee390f10e1c38e0f48dd3430b162c301b59e3518f8f6e
802 | 604fd7ae5dad4e5fba7469ba3edbe34f67a5077dd838d331f093b67efd7a
803 | d5a85143ad5bb7d6faf5ebdd165abff6da6b5ab76e9d4b02614fd4a95327
804 | ab3503d27b8c6dddbad5ea8824efbfffbe4bd6dbcbcb4b376edcd0800103
805 | d2f4fef9f3e7dbace1e8ccbe6edfbebdd58e64376dda64b376a62d75ebd6
806 | b55b6e6da8e4366dda585d7e7af7dfeeddbbadd644ebd4a913270700041c
807 | 80274a4e4e567474b4366ddaa4be7dfbaa72e5ca6eadf69c1e53a64c4973
808 | 0073f0e0415dbc78d16ad9e3c30066b4eeddbb5b9dbe65cb1697dcfc5853
809 | a54a1587c389efbefbce6653036ba3ed382a7bf6eca680e3c89123dabb77
810 | 2f5f480ff4cd37dfa47928d19b376fda0ce95e7cf14587e651b87061ab37
811 | 3cd1d1d1dabd7b77ba3edb891327ac3e198f8888b07a13e5a9525252b465
812 | cb1675e8d041152a54d0c08103b575ebd674f793f3b8d0d0502d5dba5415
813 | 2a5478aa8ef1cc9933ab5dbb7656cb1c1999c79eb8b838ab7dd6d4ae5ddb
814 | 653585e6cc9993e65a84919191fafdf7dfad96d9ea28d85ae060eb863f2d
815 | 4d2c1f1ffef951f7efdfd7b973e7cca6f9fafada0c8c9c691a636b797ffc
816 | f187c5f44a952a39550b0d0008388027e4efbfff569b366dd255a5d31d6e
817 | ddbae57415f9c71d3a74c8e68df69352ac58319bcd45b66ddb96eef95fba
818 | 74c966f5f5d6ad5b3b348f989818cd9f3fdf6a59fdfaf5d3dc316dcb962d
819 | 4d4d20a8bde199ce9f3faf8d1b37bae57b676b0487c7b56ddbd66af3ade3
820 | c78fa73adca323c1c0f5ebd72da6e7cc99d36a87bf4670f5ea55fde73fff
821 | 514444845e78e10575e9d2454b962cb1e86f24adfcfcfc3463c60c87f79f
822 | 11346ad4c8ea79e0d2a54bba75eb56bae76fada36b1f1f1fd5ab572fddf3
823 | be7fffbecddfe7f47e4773e4c8e1d0fb1b376e6c339448cbef87bdd15b56
824 | af5e6d11dcd5aa55cb6ab395b8b838970c7d6caba3f2060d1a70920040c0
825 | 0118c1bd7bf7f4d1471fe9e6cd9b1eb34edbb76f577c7c7cbae6616be407
826 | 472fe2dcc1dab0b88fdec0b982adf938d3be7ac68c19569f067b7b7b9b3a
827 | b87386979797dab76f2fe9c193f8e5cb97f3c5f340dbb66d4b778860ebc6
828 | 3a2828c8a1f7db3a4e5d358ca9adda49e5ca9533fcfe8b8b8bd32fbffca2
829 | 5ebd7ae995575ed11b6fbca1debd7b6bd1a245164fc19d91376f5e4d9932
830 | c5233aa77685b7df7efb891c632fbffc72bae77df8f0619ba35d65d4b9d1
831 | 5ac7acd28380282dc1dae8d1a3ad767e7afdfa75ab1dbedafa8db037da93
832 | 2bf6df2bafbcc249020001076014b76edd72baa777774a4f276f0fd90a6c
833 | 6cf5c89e11de7cf34dabd3636363ed76baea8c53a74e599d5eb468518787
834 | 2bbc7af5aacdb6cc2d5ab470baf3c12a55aa986a7e3ce9be5f609b2b863f
835 | b6d549adb5f6f28fcb9a35abcda62cb69a9c39cbd6b1fb34debcfcf5d75f
836 | 5abc78b13ec4707d00002000494441543ef9e41355aa5449e5ca9553d7ae
837 | 5d3567ce1ca7038f77de79c7e6ef97d1d8aa45e7ee63cc1501873bcf8d0f
838 | 6bd8a5a662c58a56a7fff9e79f695a9ff3e7cfab6eddbadab2658beedebd
839 | abdbb76f6bddba75aa59b3a6d5c0c4ddfbcfd679b25cb9724f4dc8078080
840 | 037826fcf4d34f2e6fc39d56c78e1d4bf73c6c0d87f724d9ba303c7bf6ac
841 | cb9671e6cc199b65cef4e43f6dda34ab4ff3fdfdfdd5b97367a7d6e96127
842 | 8ef7efdfd77ffef31fbe6c1eca15219bad4e2f1d1926b642850a365f676b
843 | 540967942a55ca66d5faa7a106476aae5dbba6952b576ad0a041aa54a992
844 | 2a55aaa4091326385c23a0458b1686df0661616166a3393dcad6937b67e4
845 | c891c3667f47850b1756ce9c390d7d6e2c5cb8b0cded97d680437a10ccb7
846 | 6edd5acf3fffbc4a962ca98e1d3b5a3d2e73e6cc69b5936e57fd4664ca94
847 | c96667abd9b3675791224538510020e0008c222626265dfd4054ad5a559d
848 | 3b7756e7ce9dd35d4bc215cd653c25ac79c8cfcfcfe6932157b4fb7e743f
849 | dae24c27777ffef9a7d6ae5d6bb5ac6ddbb60e3d9197a442850aa97af5ea
850 | 921eb4a77655df0070cf6fc09364af03e0f4debce4cf9f5f5f7df595cdf2
851 | ecd9b32b53a64c1eb11fa64e9daae9d3a7ab5fbf7e6e5dceb973e7346edc
852 | 38bdf6da6b1a3e7c78aa37f8f5ead553d6ac590d7d8cbbf3180b0a0ad2d7
853 | 5f7f6df738b2d6778491ce8df63aab76450d8aa4a424bbcde48a172f6eb3
854 | 16457af75f962c593476ec58bb219411869406e0f97cd90440c63978f0a0
855 | 6ad4a891a6f7f6eedddbd4dbfebc79f3d2b51eaeb8e14f6f5f02ae66af7d
856 | f39d3b775cb61c7b4fe79c7d7a3865ca14ab235a040505a95dbb769a3a75
857 | 6aaaf368d7ae9dbcbd1f64d5742eead96c0df1ea09df91a14387aa6fdfbe
858 | 699a6f6060a04337263972e4f0889a5f0d1a3490afafafeedebdabafbffe
859 | daed616d6262a2befdf65bad59b346f3e6cd53b162c5acbeeee1d3edad5b
860 | b71af618b7778cbdfffefb6ad2a449da2e567d7d55a85021d36f9dab7e83
861 | dd1170a487bdce665d5183223dfbaf79f3e669be7ef1f1f151a1428552ad
862 | 69f6243b290740c001200d8e1e3d9ae6f73efffcf3921e0c459bde0e423d
863 | adf685bb2fcc5c5135fa217b6189b317d7070e1cd08e1d3bac768edab973
864 | 67cd9c39d3ee4db1bfbfbf5ab56a25e941e778b686270452fb8ed8aa16ef
865 | eae55fb972c563b647a64c99f4d24b2f69fffefd19b2bcf3e7cfab7efdfa
866 | 5ab16285cd9a0ef9f3e77f6a8fb1e0e060b78f1693de1be4277d6eb4770e
867 | b97dfbf6135d7ece9c39d31d20b97bff018044c00164a8b4361f080d0d35
868 | 9df85d591be169626f14095bfd16a485bd79393a92c5a3a64c996235e0c8
869 | 93278f9a376f6e77c8c2468d1a2957ae5c92a8bd81f4ddbc242626babd56
870 | 96a3cdae32d26bafbd96610187f4a09952dbb66db569d32665c992c5a23c
871 | bd4d2c9e347b01c7fdfbf7959c9cfccc1d63ce78f87b6e4d469cfbededbf
872 | a4a424979e4bad317a132d009e818003c84069bd4079b4d32f57d6467856
873 | b6ad2bdbfe67ce9cd966595af6cdb66ddb74e4c811aba35b74efde5d0b17
874 | 2eb47953f07068d8ebd7af33342c52656f8482eeddbb6bd5aa55cfdc3679
875 | ebadb7347dfaf40c5de6850b17347dfa74f5e9d3c7a2cce80187bd262463
876 | c78ed5942953f822da612df47ac8d15158dcf51b3163c60c7df9e597ec24
877 | 009e7f2e62130019e7c68d1b5ab76e9dd6ad5be7d4c81e952b5736fddb13
878 | 472ff1946d9b9650c259f6e6656f1decb175d11f1616a67af5ea592d2b53
879 | a68c69e8cdf9f3e73ff1fe1de0f9ecf52f101010f04c6e9377de79e78984
880 | 0af3e7cfb75a63c6e8433c738ca54f6c6caccdb2b4d41074e5fe0b0c0c64
881 | 07013004020e20035dbf7e5d1d3b7654c78e1db572e54a87df57b3664dd3
882 | bf69a2629dbd8e5333aa06477474749ae6b96ad52a9d3f7fde6a598f1e3d
883 | ac4eefd8b1a3a4074d0be6ce9dcb018054d90be03c6584938ce6e3e3a388
884 | 88880c5f6e6464a44e9e3c69f51c6164f66e909fd563cc55db2f239a6f10
885 | 7000781a1070001e2e2c2cccac433a9aa85897909060f3e9579e3c795cb6
886 | 1c7b4f7baf5dbb96a679262525e9db6fbfb55a56a64c19bdfdf6db66d372
887 | e4c8a1468d1a497a30346c6464240700d275f3626b88e56741444444aaa3
888 | 3bb8c3a54b972ca6193de0b017a23dcbc7982bbea31951d3c8defe73e579
889 | 1400dc898003f0708d1b3736fb9b1a1cb6edddbbd7eaf4b0b0b054871774
890 | 547878b8cdb2f48c62b278f1629b0149cf9e3dcdfe6ed9b2a5e969daac59
891 | b3d8f170c8e1c3876d963932ccebd32a5fbe7c6adebc79862fd7da6ff95f
892 | 7ffdc531f60cbb78f1a2cdb2d2a54bbb7df9274e9cb039920cfb0f805110
893 | 70001e2c303050efbfff7eaa17c57860d7ae5d56a7fbfbfbbb6cf8455b01
894 | c7e5cb976d36337144424282cdb0e2adb7de52993265243de804ae5dbb76
895 | 92a483070f6adfbe7dec783864fffefd367f3f1e0e43fdac1a346890dd11
896 | 24dce1f127e2f1f1f1dab3678fa1b7e3b56bd7ac36bde11873ccefbfffae
897 | fbf7ef5b2d2b55aa94db97ffcf3fffe8c0810356cb8a162d9a211d9d0240
898 | 7a1170001e2c222242c1c1c1161720b06ee7ce9d36cb5c7571f8306878dc
899 | f6eddbd33defefbfff5eb76fdfb65af6d1471f4992aa56adaab0b030490c
900 | 0d0be72426266af7eedd368f6b77f4919023470e356fdedce33b98cc952b
901 | 97060e1c98a1cb2c54a890d9df3b76ec307c27a3f67e0b73e5ca65d6dcd2
902 | 55fcfcfcd4ba75eb0ce9843323028683070f5a2d0b0d0d55f1e2c55db6ac
903 | 3265ca58fd5efef6db6f565f1f1010a0b265cbbafc337b7979292222c2ee
904 | 30d600e00c020ec04365cf9edda26982440d0e7b0e1d3aa4d3a74f5b2d7b
905 | e79d77d23dff12254ad86c07ed8a615a636363f5fdf7df5b2d7bf7dd7715
906 | 1e1eae0e1d3a4892a2a2a2f4dffffe979d0ea7ac59b3c6e64d62952a555c
907 | bebce1c387eb9b6fbed1be7dfb54a142058fde36ad5bb7b6e8efc65d4a96
908 | 2c6951ab6cddba754ff53126997798ed2a3d7bf6d4575f7da5fdfbf79bfa
909 | 2632b25f7ffdd56699ab3e5fd1a245b57af56a1d3b76cc5423d091fd57ab
910 | 562d977fde8e1d3b6adcb871dabf7fbfdab469c38f34807423e0003cd4d8
911 | b163ad76ca46c0615b4a4a8aa64f9f6eb5ecd1a176d3aa6ad5aa56a71f3a
912 | 74485bb76e75c967983973a6d5215fbdbdbdf5e5975faa5ab56a92a479f3
913 | e6d96c2b0dd8f2d34f3fd9ecebe5e1c83cae52a3460d3569d24492141717
914 | 67f3c9b4a7f0f2f2d2cc9933dd52cb20b51bd54b972e69f1e2c54fc531b6
915 | 73e74e9bcd1cdab56be7b2fe90a40741d1c71f7f2c494a4e4eb6d94cd148
916 | ecfdb6bff7de7b2ed97ebd7bf796b7b7b73265caa43ffef8c3acecd8b163
917 | 36cf67ad5ab592bfbfbfcb3e6ba142854c35a7bcbdbd5d52133273e6ccf2
918 | f2f2caf81baaff7f7b3e099932657a229f1920e000e0b056ad5aa9418306
919 | 56cb68a262dfd2a54baddec0152f5e5cafbcf24aba2e5e6c3d5d9a346992
920 | cbd6ffdab56bfaf1c71fad9655ad5a55dedede4a4c4cd4bc79f3d8d970da
921 | bd7bf7f4ef7fffdb6ad95b6fbde5b227ecd9b265d3d8b1634d7f0f1f3edc
922 | 6a70e769828282346fde3ce5ce9ddb6dcbc89b37af3a77ee6c366ddcb871
923 | 86d83e8e9a32658ad5e9850b17d6071f7ce09265f8f8f868c28409a67e21
924 | 264d9a94e691ac3cc9d5ab576d865d458b1655ab56add235fff0f070bdf7
925 | de7b92a423478ee8d0a1430eefbfe0e06053a0e40ae3c78f370dbd3e73e6
926 | cc34f763e5e5e5a56eddba69d7ae5d3a7dfab44e9c38a1d9b367bbf57bfc
927 | 50585898162e5ca893274feacf3fffd4ce9d3bd5ac5933b72fd7cbcb4b9d
928 | 3b77d6ce9d3bf5e79f7feae4c9939a33678e42424238d18180834d007896
929 | 0e1d3a98dd183ceeeeddbb6ca4546ee0468e1c69b5ac57af5e699e6f8306
930 | 0d54b468518be93b77eeb45ba5372dbefdf65b252727db2cffe5975f181a
931 | d6934facde9e7d6afdfefbef6d8ed6306edc38e5ca952b5df3cf92258b66
932 | cf9eadbc79f34a9256ae5ca955ab561966ff152e5c583ffef8a3451f19ae
933 | ba29193972a4e9a64e7a30f2c892254b9eaaefc0dab56b6d76803c60c080
934 | 74d79279186e942b574e9274e0c001cd9831c325fbc79d37a48e9a3a75aa
935 | cdc0ebb3cf3e4b7387b8bebebe1a3d7ab46958e471e3c6597dddce9d3b6d
936 | d6e2e8d9b3a75e7ef9e5746f8b2fbffc526fbdf59624e9f4e9d31a3f7e7c
937 | 9ae7376dda347df1c5172a52a488bcbcbc942d5b36d5ad5b576bd7ae756b
938 | e7c12fbdf492d6af5faf2a55aa284b962cf2f2f252585898264e9c68ea37
939 | cb5d264d9aa47ffdeb5f0a0b0b93979797b266cdaadab56b6bfdfaf5167d
940 | b701041c002429d50ecb5c7d13131010a021438668e4c891a68b0f6b1c6d
941 | a262afb773578c676feb04ea0927d6c58b176bd9b26516d36bd6aca937de
942 | 78c3e9f965cd9a55fdfbf7b7987eedda3575ebd64d2929292e5dfff3e7cf
943 | eb975f7eb1594ee7a28edf34f8fafa66e8fa64cf9edd66879aaeb8d0b6f5
944 | fdca9e3dbbc3f3888b8b53d7ae5dad56830f0909d1c489134dc3103b2b47
945 | 8e1c5abc78b1e9c6e5c2850beadbb7afe18eab52a54a69cd9a357af3cd37
946 | 5d3adfc18307ab4e9d3aa6bfa3a2a2d4b1634725252539351f5b1d32bae2
947 | 78b71570d93b2f3d2e2525451f7ef8a16eddba65f55c376ddab4340769fe
948 | fefe9a3973a6e929f9eddbb7d5bd7b77a79aecd9da4eee3c3766cb96cde1
949 | e61de7cf9fd7a041836cce7fce9c39696a2af2d5575f99fa99d9b3678fd6
950 | af5f6ff3b53d7bf6d4d5ab57ad6ebb2953a69802ccb4842c13274e54a74e
951 | 9d243d1841ecc30f3f4cf3c39b66cd9ad9ec9b247ffefc1a3264885b7e23
952 | fcfcfc3479f26465cd9ad56a79dfbe7dad3e147185c68d1b9b9aff3d2e34
953 | 345443870ee5e200041c002ca5d6d99cab86bcf3f6f656b366cdb47dfb76
954 | 75edda35d5d73bda44e5e1932d6bd2fbf4c5dbdb5bd5ab57b75a161212e2
955 | b22159d3a37ffffe16d55dbdbcbc346dda34a7abad8e1a35ca3472c94349
956 | 4949ead6ad9ba2a2a2dcb2feb6aa081f387040fbf7efe70bfaff7bedb5d7
957 | ec9667447f0a8faa5dbbb6cdb292254ba63bccb1f5bd2b5cb8b0d53e7b6c
958 | 3970e080860d1b66b5ac7af5ea5ab66c9953f37bf89bb86cd932d3efcbcd
959 | 9b37d5b16347c5c6c61ae2583a77ee9cd9f73957ae5c5ab468913efef8e3
960 | 748f02e3e7e7a711234698fdc6dfbb774f9d3a75d2e5cb979d9e5fc58a15
961 | 6dee8382050ba6793db365cba6175f7cd16a59ddba759d0af62f5dbaa45e
962 | bd7a590d805f78e105ad5ebddae9ef44be7cf9347ffe7c534874efde3d75
963 | e9d2457ffdf597c3f32851a284cdbe12d27b6e946c77a4eae5e5a5975e7a
964 | c9e1f92c58b0408b162db2b9ff67ce9ce9f0c8313e3e3e1a3060805ab468
965 | 21e9c183923e7dfad87d4f7474b43efcf043abc3d68687876bcd9a354e6f
966 | af909010cd9e3d5b4d9b36359d473ffae8231d3f7e3ccddbfb61731b5b6c
967 | fd66a6d70b2fbc60f73ad0cfcfcf259d9ba7e533d7a851838b0310700030
968 | 3f010f1932c4ec299b354d9a3451cb962d9d1e17decbcb4b3973e654ad5a
969 | b5347af468edd9b34713274e548102051c7a7f6a3538bcbcbcf4d65b6f69
970 | f4e8d1365ff3c9279fa4f9c45bb264494d9d3a55952a55b2b9fcb163c73a
971 | fc79dc252e2e4ecd9b37d7993367cca6878686eaa79f7e72e8c98abfbfbf
972 | c68e1d6bf1a4e4eeddbbfae0830fdcdaa1dd912347b46ddb368be9d4de78
973 | c0d7d757952b57d6bbefbe6bf7758d1b37569b366d9cfe9e3acbc7c7472d
974 | 5ab4d0f0e1c36dbea677efde2a5fbe7c9ae69f3f7f7e4d9830c15433c2da
975 | f2bffdf65ba79a55cc9e3ddb66b5f0b265cb6addba75eadebd7baa354f8a
976 | 172fae69d3a669f3e6cd2a51a284a4072302b56cd9325d372e1929262646
977 | ad5bb756f5ead5b565cb16b3e3ac7ffffedab973a79a376f9ea69a7b65cb
978 | 96d58a152bcc3a718d898951bb76ed6c36e3b077dc77ecd8d1661f4d5e5e
979 | 5eeadfbf7f9a9e1c172a544853a74eb5b9bfc3c3c33570e040a702ec8d1b
980 | 37ea934f3eb15abba270e1c25ab972a5faf7ef6f7374aa87f2e6cdab1123
981 | 4668d7ae5da6ef406262a23a77ee6cf577d296575e794553a74eb559fefe
982 | fbefab41830669dacf458a14d18811236c3e5997a461c3863915ba0e1830
983 | 401b366cb019a46cdcb851d5ab57b7bbbe6fbdf596d6af5f6f362adb679f
984 | 7da6b367cfa6bafcbd7bf7eac30f3f547c7cbc45596868a87efef9670d1e
985 | 3c58458a14b13b9fe0e0607df1c517dabd7bb729004a4e4ed6c71f7f9cee
986 | e66b8f3f7c785ceedcb9cd9a84b94a6acb7d784cb8437878b8ddf2ecd9b3
987 | 3f15c3260369e5252985cd806735c8f8e1871fcc2e0c73e7ceaddcb9733b
988 | d556f6eeddbb8a8c8c742878c8952b97828383d3558db875ebd66617e045
989 | 8b1635751a181010a0fcf9f33bdc93f79d3b7714191969aa1adaa74f1f8b
990 | 910e5ab468a1ce9d3b2b202040f9f2e573f84221252545d1d1d18a8a8a52
991 | 4a4a8aeeddbb97eacde8a301cca79f7e6a317dfdfaf5a661521d952b572e
992 | cd9f3fdfa2464b5c5c9ca64d9ba6458b165954c3f5f7f757fdfaf5d5a347
993 | 0f952a55caac2c2a2a4aeddbb7b7e879de1d2a55aaa49f7efac9f4f7b56b
994 | d754a142856766f494575f7dd5665057a04001a79a65242424e8e2c58b4a
995 | 4848b0281b3c78b076eedce9f4fa2d5ab4c874f15ca040018743949b376f
996 | eaead5aba627db5f7df595c510a123468c50c58a15e5ededad3c79f22867
997 | ce9c0efd2ea5a4a428323252376edc30fb0e474747db7c4fd3a64d357efc
998 | 789beb1f1f1faf8d1b37eafcf9f3ba74e99262626254a85021152d5a5445
999 | 8b1655f9f2e5cd6eb0ce9c39a38e1d3beacf3ffff4c8e3eac2850b66bfc1
1000 | 4949496ad3a68de946d9cbcb4b5dba74d1c081032db6c9c58b17b561c306
1001 | ad5fbf5e3b77eeb4f95dcc9d3bb7de7cf34d454444588ce074fcf87175ea
1002 | d429d55a07152a54d0a851a3cc7e970a172eec54338747cf4b73e7ce3575
1003 | 4efcf9e79f9b0d0b1c1212e270e784292929faf3cf3fcd3e7bc3860ded9e
1004 | 03df7aeb2dcd9a35cbe64d57525292b66cd9a2d3a74febf2e5cbba7efdba
1005 | f2e7cfaff0f070858787ebd5575f35ab45131515a5ce9d3b6befdebd3697
1006 | 99356b56d3f0dd7e7e7eca972f9fcde604d67e2fae5ebd6aaa313966cc18
1007 | 8ba0a16ad5aa1a3468907c7d7d952f5f3e65cb96cde163f0d6ad5b8a8c8c
1008 | 34354d6adab4a9d5e63cd2831a9383070f56972e5d6cceefca952b5abb76
1009 | adfefaeb2f4546462a6fdebc7afef9e755ba7469952d5bd62264b135da98
1010 | bd60e83ffff98fcdda8fc9c9c9dabe7dbb8e1f3faecb972febdab56b0a0d
1011 | 0d557878b8e937e2d16b8798981875efdeddec5a26ad162d5a647794b42b
1012 | 57aea43958b6a77cf9f25ab972a5ddd7f4ebd74ff3e7cf77f9b2e7cd9b67
1013 | b7664a545494c57e079e25be6c023cb307bfafaf4a972e9deef964ca94c9
1014 | a124df551e6fa212101090e6cf91397366b32701d62efe828383d334ff47
1015 | 0323492eb9294fcb10b9376edc50d3a64dd5bb776f75e9d2c5747390356b
1016 | 56f5ebd74f7dfaf4d1d9b367f5f7df7febce9d3b2a58b0a08a152b66f562
1017 | 75f9f2e51a366c98d576c9eeb063c70e1d3870c0540df8591b1a365bb66c
1018 | 2ef98e3efc9e142b56cce672d2a24489124e37e3901ef49ff0681f0ad6fa
1019 | 53285cb8709abf7779f3e6356b1f9f5aa0ba64c9129d3d7b56fffad7bfac
1020 | de08040606aa7efdfaa92e3b3939598b172fd690214374fbf66dc31c6723
1021 | 478e34ab05909292a219336668e5ca95ead1a3872222224c37d7050b1654
1022 | c78e1dd5b16347ddbb774f57af5ed5b56bd74cbf09b973e756debc79ad9e
1023 | 13e2e2e23467ce1c4d9c38d1a1dfb2f41eff8fafc3a3fd4b142c5830cdf3
1024 | f6f2f2b2a885905aff1cdbb76f57ddba753574e850ab4d387c7c7c54a346
1025 | 0d87aad66fd8b041fdfbf74ff577d8c7c727cd9f312020c0ece9bbb55a2d
1026 | d9b3674ff3fc73e4c861364f7bdfd1e4e4640d1d3a54870e1dd2a04183ac
1027 | d676c9972f5faac33cc7c7c7eb8b2fbed082050b9c5edffdfbf7ab6eddba
1028 | 1a3c78b0d5da43dededeaa5cb9b243c3b16fdfbe5dfdfaf54bf388298fdb
1029 | b46993dde5daebcf2a3d8e1e3daaab57afdaec8be4ce9d3bdabc79b35b96
1030 | bd79f366bb0187bb3e3360143451010c262d37f94f8b9b376fa6799b8d1c
1031 | 3952952b57d68a152bcc7aa7f7f1f1d173cf3da76ad5aaa97efdfa2a57ae
1032 | 9cd90d6f4a4a8a76eddaa5060d1aa87bf7ee19166e3c74e4c8115340f4fd
1033 | f7dff305805becdfbf5f0d1a3450e7ce9d9d6e56929898a8b56bd7aa4e9d
1034 | 3afae4934f0c156efcfcf3cffaf6db6fad965dbe7c5983060d52c58a1535
1035 | 75ea548b1bb287352a5e7df555d5af5f5ff5ebd7d7ebafbf6e112c444747
1036 | 6bf2e4c9aa58b1a2468d1af5ccfe869f3b774eeddbb75793264db467cf1e
1037 | a73a674e4949d1f6eddbd5a2450bb56fdf3ec37f873de5587df3cd37356c
1038 | d830a786c34d4949d1a64d9b54ab56ad34851b0f5dba74495dbb7655bd7a
1039 | f5f4ebafbfda1de9cb9adf7fff5d1d3a7450f3e6cd5d166e48d29c39736c
1040 | d6a83c73e68cdd51e9d2233e3e5e03060cb0da41704a4a8a860f1f9ea6fe
1041 | 751cf1fdf7dfdb6cde76fefc79bb4d948167014d5400781c5b4d54c68f1f
1042 | 9faea1e41eca9a35abaa55aba6dab56bab68d1a2ca93278fa969527474b4
1043 | ae5dbba60b172e68f3e6cddab871a3db3a124d4dbe7cf9b46bd72ef9fbfb
1044 | 6be9d2a5666da801772a52a4886ad6aca9ca952bab4081020a090951ae5c
1045 | b9949292a2d8d858454646eae0c183fadffffea7356bd6983589f17453a7
1046 | 4e958f8f8f6edfbeadcf3fffdc6ab3255b0a172eacb7df7e5b952a5552fe
1047 | fcf94db5d4828282141f1fafe8e868454747ebead5abdabd7bb77efbed37
1048 | 1d3b76cce5232d3d0df2e4c9a31a356aa85ab56a2a54a890f2e4c9a3e0e0
1049 | 60797b7b2b2e2e4ed7af5fd7a14387b47fff7ead59b346972e5d62a33dbc
1050 | 78f7f252d9b26555bd7a75bdf1c61ba66d9723470eddbf7f5f3131313a7d
1051 | fab476ecd8a1952b57eaf4e9d32e5f875cb97299f65f585898691d7c7d7d
1052 | 75fbf66dddb87143870f1fd6810307b476ed5a97861a8ff3f7f757cf9e3d
1053 | d5a041038587872b3232529b376fd6975f7ea9b8b838b7ee8b975e7a499f
1054 | 7df699ca962dab4c9932e9f8f1e31a3f7ebc4b9adfd8e3e7e7a71e3d7aa8
1055 | 51a3462a5ab4a8222323b575eb560d1f3edc50213340c001e099d0af5f3f
1056 | f5eedddb627a9f3e7dccfa4d71f505a3248fba11193d7ab4dab56b2749aa
1057 | 53a78e0e1d3ac4c18127c6dbdbdbe9a7b6cf0a1f1f1fa7877a85317e87f9
1058 | 8e3ab7ffbcbcbc9ef83a3ca9e3e7492dfb497e66c013d10707008f63ab23
1059 | badf7fffdd6dcbf4b48b8342850aa955ab56921eb45926dcc09346b8611b
1060 | e1c6d3f93bcc77d4f9fdf7a4f7e1935cfe935a36df1bc01c7d7000f038d6
1061 | 028ee8e8688f1d95c11d3ef9e413d3080e93264de2a0000000005241c001
1062 | c0e3580b387efbedb767e6f3878787ab69d3a692a403070e68fbf6ed1c14
1063 | 000000402a68a202c0e3581b7ad3a82388f8f9f9a944891292a453a74e99
1064 | 8de062cba041834cc32e8e183182030200000070000107800c933f7f7eb5
1065 | 6ad54a050b16d4eeddbbb56edd3addba75cbec350101012a5dbab4d9b4e3
1066 | c78f6bf7eedd86fbbcb56ad5d2f8f1e3151c1c2ce9ff0db3b77fff7e9bef
1067 | a95ab5aade7df75d49d2860d1bb473e74e0e1c000000c0018ca2022043bc
1068 | f2ca2b5ab06081b267cf6e9a76e4c811d5ad5bd7ac83be575f7d552b56ac
1069 | 307b6fd7ae5db572e54a437dded0d050edd8b143993367369b7ef9f265bd
1070 | f1c61b4a4c4cb4788fbfbfbfb66eddaab0b030252424a8468d1a3a73e60c
1071 | 070f000000e000fae000e0763e3e3efafaebafcdc20d497af1c517d5a143
1072 | 07b3696fbef9a6d9df2b56ac305cb82149efbefbae45b8213da8c552bc78
1073 | 71abefe9d7af9fc2c2c2243d1822967003000000701c010700b70b0b0bd3
1074 | 73cf3d67b5ac71e3c6a67f67ce9c59efbfffbee9ef6bd7ae69c0800186fc
1075 | cc850a1572eaf5cd9b3757f7eedd25493b76ecd0cc993339700000000027
1076 | 10700070bb7cf9f2d92c2b57ae9c4a972e2d6f6f6ff5e9d34721212192a4
1077 | 7ffef947eddbb7d7cd9b370df999fffaeb2f9b6557af5efd7f3fc2dedeea
1078 | ddbbb7264c982049ba70e182ba76edaae4e4640e1c000000c00974320ac0
1079 | edec35b5f0f1f1d17ffffb5f5dba7449cf3fffbc24293131511d3b76d4c1
1080 | 83070dfb99f7eeddab9494147979795994f5e8d1437bf6ec518912251411
1081 | 11616a9672fdfa75b56fdf5e376edce0a0010000009c4427a30032c4a64d
1082 | 9b54aa54a9545f77e9d225f5e8d1437bf7ee35fc671e3a74a8ba74e9e2d0
1083 | 6bcf9c39a3366ddad8adf901000000c0361f4943d90c00dc6defdebd6adc
1084 | b8b1020303ad962726266ac99225ead4a993ce9e3dfb547ce61d3b762867
1085 | ce9c7ae9a597e4ed6dbd45e0bd7bf7346dda34f5ecd9535151511c280000
1086 | 00401a5183034086090a0a52e7ce9d55b66c59152a544877eedcd1df7fff
1087 | ad43870e69f1e2c5ba7efdfa53f9b94b952aa5a64d9baa78f1e20a0b0b53
1088 | 6c6cac2e5dbaa46ddbb669fdfaf58a8e8ee6e000000000d2898003000000
1089 | 0000181ea3a8000000000000c323e00000000000008647c0010000000000
1090 | 0c8f80030000000000181e01070000000000303c020e0000000000607804
1091 | 1c0000000000c0f00838000000000080e11170000000000000c323e00000
1092 | 000000008647c00100000000000c8f80030000000000181e010700000000
1093 | 00303c020e00000000006078041c0000000000c0f00838000000000080e1
1094 | 1170000000000000c323e00000000000008647c00100000000000c8f8003
1095 | 0000000000181e01070000000000303c020e00000000006078041c000000
1096 | 0000c0f00838000000000080e11170000000000000c323e0000000000000
1097 | 8647c00100000000000c8f80030000000000181e01070000000000303c02
1098 | 0e00000000006078041c0000000000c0f00838000000000080e111700000
1099 | 00000000c323e00000000000008647c00100000000000c8f800300000000
1100 | 00181e01070000000000303c020e00000000006078041c0000000000c0f0
1101 | 0838000000000080e11170000000000000c323e00000000000008647c001
1102 | 00000000000c8f80030000000000181e01070000000000303c020e000000
1103 | 00006078041c0000000000c0f00838000000000080e11170000000000000
1104 | c323e00000000000008647c00100000000000c8f80030000000000181e01
1105 | 070000000000303c020e00000000006078041c0000000000c0f008380000
1106 | 00000080e11170000000000000c323e00000000000008647c00100000000
1107 | 000c8f8003c0ffd78e1d900000000008faffba1d81ce100000604f700000
1108 | 00007b8203000000d8131c000000c09ee000000000f60407000000b02738
1109 | 000000803dc101000000ec090e000000604f1d1f119a000006d149444154
1110 | 70000000007b8203000000d8131c000000c09ee000000000f60407000000
1111 | b02738000000803dc101000000ec090e000000604f70000000007b820300
1112 | 0000d8131c000000c09ee000000000f60407000000b02738000000803dc1
1113 | 01000000ec090e000000604f70000000007b8203000000d8131c000000c0
1114 | 9ee000000000f60407000000b02738000000803dc101000000ec090e0000
1115 | 00604f70000000007b8203000000d8131c000000c09ee000000000f60407
1116 | 000000b02738000000803dc101000000ec090e000000604f70000000007b
1117 | 8203000000d8131c000000c09ee000000000f60407000000b02738000000
1118 | 803dc101000000ec090e000000604f70000000007b8203000000d8131c00
1119 | 0000c09ee000000000f60407000000b02738000000803dc101000000ec09
1120 | 0e000000604f70000000007b8203000000d8131c000000c09ee000000000
1121 | f60407000000b02738000000803dc101000000ec090e000000604f700000
1122 | 00007b8203000000d8131c000000c09ee000000000f60407000000b02738
1123 | 000000803dc101000000ec090e000000604f70000000007b8203000000d8
1124 | 131c000000c09ee000000000f60407000000b02738000000803dc1010000
1125 | 00ec090e000000604f70000000007b8203000000d8131c000000c09ee000
1126 | 000000f60407000000b02738000000803dc101000000ec090e000000604f
1127 | 70000000007b8203000000d8131c000000c09ee000000000f60407000000
1128 | b02738000000803dc101000000ec090e000000604f70000000007b820300
1129 | 0000d8131c000000c09ee000000000f60407000000b02738000000803dc1
1130 | 01000000ec090e000000604f70000000007b8203000000d8131c000000c0
1131 | 9ee000000000f60407000000b02738000000803dc101000000ec090e0000
1132 | 00604f70000000007b8203000000d8131c000000c09ee000000000f60407
1133 | 000000b02738000000803dc101000000ec090e000000604f70000000007b
1134 | 8203000000d8131c000000c09ee000000000f60407000000b02738000000
1135 | 803dc101000000ec090e000000604f70000000007b8203000000d8131c00
1136 | 0000c09ee000000000f60407000000b02738000000803dc101000000ec09
1137 | 0e000000604f70000000007b8203000000d8131c000000c09ee000000000
1138 | f60407000000b02738000000803dc101000000ec090e000000604f700000
1139 | 00007b8203000000d8131c000000c09ee000000000f60407000000b02738
1140 | 000000803dc101000000ec090e000000604f70000000007b8203000000d8
1141 | 131c000000c09ee000000000f60407000000b02738000000803dc1010000
1142 | 00ec090e000000604f70000000007b8203000000d8131c000000c09ee000
1143 | 000000f60407000000b02738000000803dc101000000ec090e000000604f
1144 | 70000000007b8203000000d8131c000000c09ee000000000f60407000000
1145 | b02738000000803dc101000000ec090e000000604f70000000007b820300
1146 | 0000d8131c000000c09ee000000000f60407000000b02738000000803dc1
1147 | 01000000ec090e000000604f70000000007b8203000000d8131c000000c0
1148 | 9ee000000000f60407000000b02738000000803dc101000000ec090e0000
1149 | 00604f70000000007b8203000000d8131c000000c09ee000000000f60407
1150 | 000000b02738000000803dc101000000ec090e000000604f70000000007b
1151 | 8203000000d8131c000000c09ee000000000f60407000000b02738000000
1152 | 803dc101000000ec090e000000604f70000000007b8203000000d8131c00
1153 | 0000c09ee000000000f60407000000b02738000000803dc101000000ec09
1154 | 0e000000604f70000000007b8203000000d8131c000000c09ee000000000
1155 | f60407000000b02738000000803dc101000000ec090e000000604f700000
1156 | 00007b8203000000d8131c000000c09ee000000000f60407000000b02738
1157 | 000000803dc101000000ec090e000000604f70000000007b8203000000d8
1158 | 131c000000c09ee000000000f60407000000b02738000000803dc1010000
1159 | 00ec090e000000604f70000000007b8203000000d8131c000000c09ee000
1160 | 000000f60407000000b02738000000803dc101000000ec090e000000604f
1161 | 70000000007b8203000000d8131c000000c09ee000000000f60407000000
1162 | b02738000000803dc101000000ec090e000000604f70000000007b820300
1163 | 0000d8131c000000c09ee000000000f60407000000b02738000000803dc1
1164 | 01000000ec090e000000604f70000000007b8203000000d8131c000000c0
1165 | 9ee000000000f60407000000b02738000000803dc101000000ec090e0000
1166 | 00604f70000000007b8203000000d8131c000000c09ee000000000f60407
1167 | 000000b02738000000803dc101000000ec090e000000604f70000000007b
1168 | 01d8970ed570eeaed50000000049454e44ae42608254434d500000000200
1169 | 0003305450453200000012000003416e617220536f667477617265204c4c
1170 | 430000000000000000000000000000000000000000000000000000000000
1171 | 000000000000000000000000000000000000000000000000000000000000
1172 | 000000000000000000000000000000000000000000000000000000000000
1173 | 000000000000000000000000000000000000000000000000000000000000
1174 | 000000000000000000000000000000000000000000000000000000000000
1175 | 000000000000000000000000000000000000000000000000000000000000
1176 | 000000000000000000000000000000000000000000000000000000000000
1177 | 000000000000000000000000000000000000000000000000000000000000
1178 | 000000000000000000000000000000000000000000000000000000000000
1179 | 000000000000000000000000000000000000000000000000000000000000
1180 | 000000000000000000000000000000000000000000000000000000000000
1181 | 000000000000000000000000000000000000000000000000000000000000
1182 | 000000000000000000000000000000000000000000000000000000000000
1183 | 000000000000000000000000000000000000000000000000000000000000
1184 | 000000000000000000000000000000000000000000000000000000000000
1185 | 000000000000000000000000000000000000000000000000000000000000
1186 | 000000000000000000000000000000000000000000000000000000000000
1187 | 000000000000000000000000000000000000000000000000000000000000
1188 | 000000000000000000000000000000000000000000000000000000000000
1189 | 000000000000000000000000000000000000000000000000000000000000
1190 | 000000000000000000000000000000000000000000000000000000000000
1191 | 000000000000000000000000000000000000000000000000000000000000
1192 | 000000000000000000000000000000000000000000000000000000000000
1193 | 000000000000000000000000000000000000000000000000000000000000
1194 | 000000000000000000000000000000000000000000000000000000000000
1195 | 000000000000000000000000000000000000000000000000000000000000
1196 | 000000000000000000000000000000000000000000000000000000000000
1197 | 000000000000000000000000000000000000000000000000000000000000
1198 | 000000000000000000000000000000000000000000000000000000000000
1199 | 000000000000000000000000000000000000000000000000000000000000
1200 | 000000000000000000000000000000000000000000000000000000000000
1201 | 000000000000000000000000000000000000000000000000000000000000
1202 | 000000000000000000000000000000000000000000000000000000000000
1203 | 000000000000000000000000000000000000000000000000000000000000
1204 | 0000000000ffe318c4000b2361f800014d4d427d5fbfd4f39ce7a64177e8
1205 | 4a1ce7febd3ffffce465e46a11ba13c4ce739c60062fffec41518780c075
1206 | 84ee757b793647ea8bb3ddfe6457f4dd3affe318c40e0a9b621800008d4d
1207 | afffffd75d7ecae7643cdb215412828a239fad056a3d036ca148a4728a1f
1208 | ffdf4db5ebfba26d4ffffffffb7dfcc7abbc4bcce62d1100124ebbae0dff
1209 | e318c41e08f3662008008d4ce24e959587ae1fdeb3baf45fca93553eb95a
1210 | 94f5ffffff5d5bd28fb29d8fb624414053e398eaa6d81a883c38d2d5027f
1211 | fe5ffd96477eba9fffffffffe318c43509cb62200801474df95cafea6473
1212 | 20b2a071da250a169d67353a64af371d0084aae56753eb51cf3add7a7fb8
1213 | fffffffaccf7fd12a332040ec1453953ba59c5f7b0b064ffe318c448094b
1214 | 66241000474804551f97e7f167e6b2fcbfff5fffffe967f5bb6525fd4f21
1215 | 2a62d8505c50776121c7670302360a612a1ffd6a9feff45fa7e9fffffffb
1216 | 7eef499d98ffe318c45d08cb621c00004d4d6aea3d4a7651c50b50cd3b87
1217 | 97e603e1a1c0cf1c997a1fff6b7eff4ff5ffa7d2c99694dbfffffbb66f93
1218 | b218ce6d6851408107535453c6c60ead6cffe318c474099b5e2008004749
1219 | adc616993af51dbebffffff5ca9ffffffffeeb4f3a154e256c6b9ca531ca
1220 | 3145158c1984863217465a3e00043101bffbb7a2153fe9ff54ee9a6befff
1221 | e318c48809e3622008014d4dfffff64bbce4a68a880851d5c6086769bf22
1222 | b240d3242342b2a0e858e399d5fff97cebe7be104f4078493429774b3a6c
1223 | 1ef79ffdfffff6eff6bc7bffe318c49b0a9b661c08009330b66bf78ea40f
1224 | e943184cbd06420f98480fdc8511f2a706ffe7cfffefb94bffd52fbbff7f
1225 | dfabd8c6ae3bb1d852d0dd4350b7902cf456c8ab8a9001ffe318c4ab09b3
1226 | 6a2408008d4e4f4c8c3d5294fa16612a01bfad77fad93efa2ebf5d5356aa
1227 | fffffe7e5c94bdddae33231ce96087193380aaed5580a0aca1889ed512e5
1228 | aa364e663fffe318c4bf0b236e1c1000934cd149063e69a32919cc200118
1229 | f159c59ffe5ffc8b25ee7bb739cbb573929af7bfdecfa60ccd9b504cda87
1230 | 18569b11b4a22150d3e807a57de6aa41c9ffe318c4cd0c83621400004d10
1231 | 12cc89d7f3f6225cafcb97cbfec3fafb0f19a55f502cd924ad8384aafa8b
1232 | 60f32448cb0faf03a2c848c85411287594b503b29fcfc995e165f36ff5ff
1233 | e318c4d60b8b622010005349affe5ffffa94b3ca6efd6d49bc5a4b399204
1234 | 063ae6ec805313409aa84bacd13942c490203042a89044660a00b9fe3cbd
1235 | fcbfffcbdce445d6f3ff9effe318c4e20a6b621c10008d4d7e7ab3ff14ec
1236 | 7f75949d49fa923d66f1307b671e4f0155595c96483e2f95170751a4408a
1237 | 84c414da17bcbd73813c3ce709feca87839f1a996e65efffe318c4f30ec3
1238 | 5e100800532cf9fec2eea519316deb5ad49eb8510c2c8c9923844113e4a8
1239 | c422e2c4658c01c4a85720a7ac4d310604c7ff315a7f8320b18b66ee64f2
1240 | 3afe72fe7fffe318c4f30db36a1c10005348f3d4adf389dc9a932880b944
1241 | 2a878d38e96d8a0424407120408da21422048a035a7646cd1625892a0547
1242 | f244f2a2e7a6e82cc8e48f3330338c8907ffe318c4f70d5b6a1c10005348
1243 | 7eab95ffa6f521972f0b0c74ed1f8e68e167cc09056365ca8ac7232b407a
1244 | b5751d2b949c2e96cc44b32108d5a76a0793fbd06673445d2e7ed59176ff
1245 | e318c4fc0d236220180059494622f47ffff2ec6bdff4bec6f3607f54d408
1246 | 575c4c48449a5d0a264e235174497442ea28d0f449a90d0947e8d0e17ac6
1247 | 40ce7ae475fffe5d9cacc3ffe318c4ff0e33621c100053494d6edf559669
1248 | 94cd315d58e3cc9d2f121135012f58d82ab6e708476db03c0dcece9dba62
1249 | 0a6a2aaa00c5c2c7cdc9851e877f05039c3f24ce5c66efffe318c4ff0ea3
1250 | 5e1c180053495fe7e176ab16d7e395eae358a912a619192e66f83a1319b3
1251 | e7d19d9bfd917995d5201755bc9d1b0742d2f755fede47f2bb58afa22958
1252 | ca8f2b833bffe318c4ff10136a1c18005948a1d9a8311102c523b9d4c577
1253 | 629e88142196c55b2cdb3b17f5d7c72ffbaa7d5da72eb78cd741947e2f48
1254 | 9d736c283e98a454dbd43cd9a0b60d2634ffe318c4f90d6b621c10005349
1255 | 75ee1f9fefd7cfed32ffbf1ffffffefffbf2b61baa664bcd7fd7cedcc9d0
1256 | 9766d12cc29275ee90879a3caa14715d2949ffaebfbb04791613b15eb9ff
1257 | e318c4fe0d2b6a2418005964d3fffcbfdaacba8e3550c6a50f1b425fa491
1258 | 88c4d85c8ca1429b24334e852322122325c05b645486952949e9d9c11b9c
1259 | e799d70d9cd99201959545ffe318c4ff0f8b6a181800594844fa7ffefb38
1260 | ff5539ca979ad3f2dc4d0a183dd534cf0ae19d864d983afb138a8509922a
1261 | 9de9882a027fec5e79b23275f2c8425320949991ab5095ffe318c4fb1303
1262 | 6a08000093108577c8f23ffff2fb4fcf7518abdeb5356b4d44926e5678b9
1263 | 64a998aee992bc4aaa56b8b0b940d4ed9fffffffffcecfe77e4684c25326
1264 | 1c984d7f09ffe318c4ea0af362200800534b3091d87342351108d7f34230
1265 | 908986cecfffff7ca796ae7168d579cac3964540c9849489c91b252444cc
1266 | fa88a3c25894aa4c414d45332e39382e32ffe318c4f90d536a2818005348
1267 | aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
1268 | aaaaaaaaaaaaaaaaaaaa4c414d45332e39382e32aaaaaaaaaaaaaaaaaaff
1269 | e318c4fe0ddb5e2418005348aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
1270 | aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
1271 | aaaaaaaaaaaaaaaaaaaaaaffe318c4ff0eab5e101000532caaaaaaaaaaaa
1272 | aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
1273 | aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaffe318c4ff10cb
1274 | 65dc00004cbcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
1275 | aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
1276 | aaaaaaaaaaffe318c4f60000034800000000aaaaaaaaaaaaaaaaaaaaaaaa
1277 | aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
1278 | aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa54414732205365636f6e647320
1279 | 6f662053696c656e636500000000000000000000416e617220536f667477
1280 | 617265204c4c4300000000000000000000000000426c616e6b2041756469
1281 | 6f0000000000000000000000000000000000000000000000000000000000
1282 | 000000000000000000000000000000000000000000000000ff
1283 | """
1284 |
1285 | xxdDump = xxdDump.replace("\n", "")
1286 | return binascii.unhexlify(xxdDump)
--------------------------------------------------------------------------------