devicely 2.0.6 → 2.0.8
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.
- package/bin/devicely.js +1 -1
- package/lib/androidDeviceDetection.js +1 -1
- package/lib/appMappings.js +1 -1
- package/lib/deviceDetection.js +1 -1
- package/lib/devices.js +1 -1
- package/lib/doctor.js +1 -1
- package/lib/executor.js +1 -1
- package/lib/frontend/static/js/main.96600727.js +1 -1
- package/lib/logger.js +1 -1
- package/lib/server.js +1 -1
- package/package.json +1 -1
- package/scripts/shell/android_device_control.sh +49 -0
- package/scripts/shell/connect_android_usb_multi_final.sh +49 -0
- package/scripts/shell/connect_android_wireless.sh +49 -0
- package/scripts/shell/connect_android_wireless_multi_final.sh +49 -0
- package/scripts/shell/connect_ios_usb_multi_final.sh +49 -0
- package/scripts/shell/connect_ios_wireless_multi_final.sh +49 -0
- package/scripts/shell/create_production_scripts.sh +49 -0
- package/scripts/shell/install_uiautomator2.sh +49 -0
- package/scripts/shell/ios_device_control.sh +49 -0
- package/scripts/shell/organize_project.sh +49 -0
- package/scripts/shell/pre-publish-check.sh +49 -0
- package/scripts/shell/publish-to-npm.sh +49 -0
- package/scripts/shell/publish.sh +49 -0
- package/scripts/shell/setup.sh +49 -0
- package/scripts/shell/start.sh +49 -0
- package/scripts/shell/sync-to-npm-package-final.sh +49 -0
- package/scripts/shell/sync-to-npm-package.sh +49 -0
- package/scripts/shell/test-local-package.sh +49 -0
- package/scripts/shell/verify-shell-protection.sh +49 -0
- package/scripts/shell/android_device_control +0 -0
- package/scripts/shell/connect_android_usb +0 -0
- package/scripts/shell/connect_android_usb_multi_final +0 -0
- package/scripts/shell/connect_android_wireless +0 -0
- package/scripts/shell/connect_android_wireless_multi_final +0 -0
- package/scripts/shell/connect_ios_usb +0 -0
- package/scripts/shell/connect_ios_usb_multi_final +0 -0
- package/scripts/shell/connect_ios_wireless_multi_final +0 -0
- package/scripts/shell/create_production_scripts +0 -0
- package/scripts/shell/diagnose_wireless_ios +0 -0
- package/scripts/shell/find_element_coordinates +0 -0
- package/scripts/shell/find_wda +0 -0
- package/scripts/shell/install_uiautomator2 +0 -0
- package/scripts/shell/ios_device_control +0 -0
- package/scripts/shell/organize_project +0 -0
- package/scripts/shell/pre-publish-check +0 -0
- package/scripts/shell/publish +0 -0
- package/scripts/shell/publish-to-npm +0 -0
- package/scripts/shell/setup +0 -0
- package/scripts/shell/setup_android +0 -0
- package/scripts/shell/start +0 -0
- package/scripts/shell/sync-to-npm-package-final +0 -0
- package/scripts/shell/test_android_locators +0 -0
- package/scripts/shell/test_connect +0 -0
- package/scripts/shell/test_device_detection +0 -0
- package/scripts/shell/test_fixes +0 -0
- package/scripts/shell/test_getlocators_fix +0 -0
- package/scripts/shell/test_recording_feature +0 -0
- package/scripts/shell/verify-shell-protection +0 -0
- package/scripts/shell/verify_distribution +0 -0
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
# Protected Shell Script - Devicely
|
|
3
|
+
# This script is encrypted for code protection
|
|
4
|
+
|
|
5
|
+
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
6
|
+
NODE_BIN="node"
|
|
7
|
+
|
|
8
|
+
# Check if node is available
|
|
9
|
+
if ! command -v node &> /dev/null; then
|
|
10
|
+
echo "Error: Node.js is required to run Devicely"
|
|
11
|
+
exit 1
|
|
12
|
+
fi
|
|
13
|
+
|
|
14
|
+
# Decrypt and execute
|
|
15
|
+
$NODE_BIN -e "
|
|
16
|
+
const crypto = require('crypto');
|
|
17
|
+
const pkg = require('$SCRIPT_DIR/../../package.json');
|
|
18
|
+
|
|
19
|
+
function generateKey() {
|
|
20
|
+
return crypto.createHash('sha256').update(pkg.name + pkg.version).digest();
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
function decrypt(iv, content) {
|
|
24
|
+
const key = generateKey();
|
|
25
|
+
const decipher = crypto.createDecipheriv('aes-256-cbc', key, Buffer.from(iv, 'hex'));
|
|
26
|
+
let decrypted = decipher.update(content, 'hex', 'utf8');
|
|
27
|
+
decrypted += decipher.final('utf8');
|
|
28
|
+
return decrypted;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
const encrypted = {
|
|
32
|
+
iv: '04c490c33b8068a064edfb28120e42fa',
|
|
33
|
+
content: 'cb6adcf58adc3d81775d2f38eae6c27cb0ced192fbff9da294c7b6b79a0b0e04fb839dd6317cbac3fee0bb20497ac5e08a43143b048716c21a5eb52c85b759e7eb7b64c95e930c6a8910fe3091bc58980a17eac96d7ce426dcabb93ccd0cdd88faf120ea2f76942017810a02f3df191fd3b001afcec704afe5bea1be2f516ab223c5ca6bb43f6fa44b7ab1ca0e7b061034a03d622ca748ac5bf4d8f50370c85577f8a6506b6680aff5f323953cc3a7c823763805062f310cfe3dbed691673cbafccf409ae973dc991f35e7be19bc9e081b62bef04caa2b4f83fc19b23e69690062467a0a2dbeb3013d8b889eb272625e082676b28cc570b3a763b9d33d5bb545d611d4970fe4c50b2d48e7696b5a91d949ed4a8b12bd595a37ddd36c0af7c5b157b5ddd3a7aef3aecf17dbd7d3166494626c8daeee812b2577f125e7c1f7d54c858342c28bc51387f61c7905644379804fd15ba401b242545418bd613e9d38dd1ea471be0ed00a885c4eadf83345e1ccbe4b2aaab88c7d2eac4a2ed26286a00dbaf90347d9f6078e2ea6bacd1929bc17e2e81c432cb3187be576667e65e036ed467e34deb67f285c237ad9345471bdbd72634093311750ac5feb4a443e09306a226fe112f9ea33a6aa19951f889fedacd53895024c50de14f52d470cf464443b9b4b48d4485c81874398eba68a61c5bc6270beeddc3774cbd8a97143fe66a65fb297ded00148ded1b40ec6caf9bee770b805a33a1bd92894f6c5ebeca9a7651aa20605a6c14279f325042245e38d11ff0ad87772369998b339d02f65f932bf450cb0df72856d5693d64740a88f900263d8d60192ac37475de9f927af6b6ce66c550614e139d848480499a19feb5a59da194a2b9708c1f1822cdca6e65f210f1c8625f8fd52e77415c0ade58061ed422be09551ded1bf2d8de199265574b84762697e00009cc4a3b434c6f985198a84b51a9a3988a68be0abc1ea7c4a00b1665d50879e267e7e7f547f469457d4bc06ee63c557ba0dbeab8b81d6d4cba3318655b4236d4daefd25bdd671003d041e7282a7be3eeca132013e1bd1c43a456e97a782872ba32169c2535e107107884ac2d07ddd8da8e47ad4c68b826663eef0dde62313db41df89f4deccaa048dffdc5c7e8b7a3f96068b3b296f067e5eda646aa8e6ff012933af1a3a849739befd36942e556becbcfb5e5cdea53bc89f8d3a11645a91b95bdee87c0b9bae201c73489bb6b45ac3412c9a87228d29180e0de8115bd5732a948cefacc425a350115f617de5aee6e791dfa37a329bc39e789eeb2dddc090f9d08fa7a28264b8b4747050e694634b43c9d5a02f2f28257cd8f2cf4fd47d1a52058709c6d6de7afd0f65fd124d1007b4033d350a7c1acf211db2e59e3ac2cd7029d36b73f642799dac3889c883276fa7d02fdd23eb2579042cf16c620ec18a2b1a01725a22c2cc35149912c6b4528f5a6100b1653d80368c2b74b12bbb9e1ed665ee7d0d286a665b969e475c05e3061a82f1ce5d002f80bf48ed030cc8ab879eb4b49f8730d64e504be65a524bd61fdd0a5457c561964ce10ca92b4b0f'
|
|
34
|
+
};
|
|
35
|
+
|
|
36
|
+
const script = decrypt(encrypted.iv, encrypted.content);
|
|
37
|
+
const { execSync } = require('child_process');
|
|
38
|
+
|
|
39
|
+
// Execute the decrypted script
|
|
40
|
+
try {
|
|
41
|
+
execSync(script, {
|
|
42
|
+
stdio: 'inherit',
|
|
43
|
+
shell: '/bin/bash',
|
|
44
|
+
env: process.env
|
|
45
|
+
});
|
|
46
|
+
} catch (error) {
|
|
47
|
+
process.exit(error.status || 1);
|
|
48
|
+
}
|
|
49
|
+
" -- "$@"
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
# Protected Shell Script - Devicely
|
|
3
|
+
# This script is encrypted for code protection
|
|
4
|
+
|
|
5
|
+
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
6
|
+
NODE_BIN="node"
|
|
7
|
+
|
|
8
|
+
# Check if node is available
|
|
9
|
+
if ! command -v node &> /dev/null; then
|
|
10
|
+
echo "Error: Node.js is required to run Devicely"
|
|
11
|
+
exit 1
|
|
12
|
+
fi
|
|
13
|
+
|
|
14
|
+
# Decrypt and execute
|
|
15
|
+
$NODE_BIN -e "
|
|
16
|
+
const crypto = require('crypto');
|
|
17
|
+
const pkg = require('$SCRIPT_DIR/../../package.json');
|
|
18
|
+
|
|
19
|
+
function generateKey() {
|
|
20
|
+
return crypto.createHash('sha256').update(pkg.name + pkg.version).digest();
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
function decrypt(iv, content) {
|
|
24
|
+
const key = generateKey();
|
|
25
|
+
const decipher = crypto.createDecipheriv('aes-256-cbc', key, Buffer.from(iv, 'hex'));
|
|
26
|
+
let decrypted = decipher.update(content, 'hex', 'utf8');
|
|
27
|
+
decrypted += decipher.final('utf8');
|
|
28
|
+
return decrypted;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
const encrypted = {
|
|
32
|
+
iv: '481c7114402402a661efea7ff2145f37',
|
|
33
|
+
content: 'd274ba4d90c4365ced3f5876e6766e6f2cd87bfbdd7d72da0b65b986011bed2854695b749496b4747db1c2a3fd6da32f183edf158e5abc2d19e4c1965cda955f8fbac698f7172899fef2d4959316431d8228540ad0ab047376f9f21f651bdc7327744694c6f14120f9d85ff4fd95cef561f73e69768deac53c02eb206c71050235a945026f10e838d81185e5ca43e575413bdb02764cfda5ff7be5afc0865ade6d3f7d737b582177cc61715c15b5aec75ee96962f7c453f51e429d370454b5e79407b8e3dd2e6a6d5e91e2908194c17bbf87350b43a9a83486c7f08428fe2c630c76fdfa771272fa7cbba2793ebfcef3a168fffbc08280f6f1c03598b05cc0120d0ae9ec997831e720d756b9577d1df1c12da1abc18c857dfe25e9158ca90aa1b796789603a2e2c5e686358c7d5bc7b424bd6e53332686f3e8401ddd71140b1c13a0eab6ca7f1331d0d6c196e55bc0bf70e8c5fcb19d946ec64333884b58621a342613198755e21c14ecde6002c7413e510f02ef0e34a4decff7806c0f6623d99c45d5cecb245d0ee6a8ee298b3c518c8a3207808ca02db4219db6f4fd6a916f5276def580c1fbb4838bcdc85704216ddec737c9b8a3b70751f5c568f8ff5887a42559e8cc98f3803119f4e8556842081df0f3be18ac543caba8ed65f4ddfe7721fe7518225607592a6cfd98f1322b1b4db67a62d52673c086ff38bb909231a41a1e225e16fd3aea8f6891c1599fa9d52677929b12c6e4dc2aef88e2eaeb1a83354abab8b5cd9542c7cf6c6d85e06d3f6d356d843b577ca535385eacea707909cf11d3261ba88e7039ef6ec77df858b64a72e9098021833d8a8fcb623317d1bb3814f46ec2843b63172a555b338d6c7a95633a020d930c6702a2bdfb8eaa30a4ae5461592da8c7ed03adba277b38df380a6bbc885dedb13e24b22cc3135f2cff813c978d5d4352363cc15a87a5e2126651c3a90aa8998781210fd1e8629b592a7433e6c2efe606f7f4cde6ec31b79c8ba5fdb68abf1e941abf0cfa7d993a1f7b5be065fba318f415eb4458706083a4bda3c5999a346ff3f4925837b6830a96a59cff7694129d614adebdc96d3421e6f390c886a05001b0731669273b2df3ced02e2f037791e7fa17f914b6a405b6d6d29f4eee406025c5d9a5998485aeb19ec0eb50186f0d692fa9fff83142454a1ed255ebe00da6437521d9a6d7b071cc37d33091a14be7c13cabe2ab0bbae3d3eb7cda1f19f71654f750354f361c43d00dbd701b2405d3738e97480381bace87e1bf9489de7fa6b8ab5dfd9f8873e59dd05dc90815bfe66580412f67bc946824635d641267a074193c55f00b8d7e428c432364ad1781fb30474217268e085052405b64b2dd6ab38a910e46a0cf50b5bc158fda6c7f50708b4f591d0c972b1ff8a14201b30178630bd5bec6c892df5c08ee72772cb95be98dc35a1ac9b0c4636b4deca401c893aa0f09975e94b7d69a0b00e9b775dd2f79d1ad2af4997af18ae966ad2e37ca0c1633e9803350cc60788f4d0cd06704d40c32c221d478e1d06fdc5554e7947d22860709d41f012099d7a1a84bf74f42de3267aa8ed7d4ba02eeca88b13a07bca04afe2ea645108cd735cd21fdfe5f9f7725c495d95a3880e1bfb01ba96ff0a3d66d686d1026beb6c265f848f53316ac4166d64bde229f7b875e2175a825e27ae1b596e91b2f921f55b9794ec0a273f7a385513c220591cc027d7f63218db9d92056a135df983548cfc2476126fb930cf6794df0c8ac2388ab2fff3311a3b1d3d616a2de5998712a13dd370bbfe8c4d8f1c1427a2f38f17517986d836fce87b1343091bed41ad21b3c7a26db5bbda5dbadbbe3bc38979ce69644cd20ecb44ade1380d52d1e2270bba80fe5c607a5195be6411d6d08c59b5d683ffdc85338941619e5be982af8c7b5f4f2740a9560fe2492dc6f600339026a4bd13c01efa5bb197b4114215c0bc6dc918350bbd0d1a7cd501d7dae9b2acdb796f1cf7535412b1eadd93dce595e2091df1796e19cd88dd3191343e9983090ff38ce2e50ca298c9a0416d1522e2203f59594254876e11e2de255f22d17b1237b676f1b755c88a7172fa81a909484af459f6290fb7a8b058a1c87d3a106a61ef7e7b640496f0698fb7d150266c28f11f1638375f65151355be1a9a1432ba59b0366af206f617dcd97b536042331b7ef0dc4f018f76f8b5e81c3928b00f60588a4ea886328ea93de0034d8367275a73b180ea548275569642cb889b41f045a02660eadc764f823b0ca4d626c6749b8db05fb9727cdb241d458e270765a2a4678788684080dddcf6b14f7920b3491e48a06911151d8c0689e51c6abef35a70434393ec5ea316f72ac8cd854e2b9febf6023f348d06e6c44feb963da9824ee7f19d0b86d7a9dfce94f28b4ef0e72d75cf50ec97da9e3dd20b57950cfb526e5fbe3aa0778848f66ecee7f221619b69445b1b5a703c48dbe6291360709262f610e7778ff2a619e337223c3058abfa9d4c1500c11745ad93c26faa3d1da9c6398f837b252f7c5155f9a124ab229643872f29c6af5b0b265226aef1cba98415879243495e36674f1444ac610dda22566dec96163075d8969928d3d294a3815149f049e96473a003c3627c198b04f3bcf8a7b201cef244385b214149e9cf8bcda855afab682e26a39e5f007288c243590dc4b4a0abd3716c8dfbfaa77565fb25424c6db661a8b312cf5a71ec92fc8e82dabc1cd73ac545769a47c3d85e2f63dd4bb06d6c41859ba78e9f085da22403d39331b4a868e67e61de52dd954d59204f53314c4e18087daa840b6de8f24b65f20c969afe5c017fe2781e05c9aa6076d011edcc2528ab385e9369c869262dc102c60b50b62f92a6747300fc29b029ee2499441daa61377b6deb044fe45753a2bb73b7113baa8aaed656f8fe22f31ae6519c52f0314c11073d9b856e42f498a2eb05bd8b08dcf584c29e6506b20cb6d95b775d256b5d0adfdfeb1c58d6669579383016f6c473f05b8d62d959a274c5332a3dff6e93aa149b68dfb9bc68f6d16dba55d694e821487690b001eab2e3e8dad0f4a6cf8b31a8d0b70bbfb4d74f88a6e273f8e413b8c7c6ceefd9fb9cb40c0bbdd55283560748dfbb13cb05d0ed2b50540849314816fa73d3fbc605beaa05b11f988b678509408e8e6360efa95ed001d7c8b1a681022b09cbe28239ed86c890dce0276032a53446c51c0ee89b8c49ed1db719f5b37ef42d416d7e5008d6776aa210be92a3443a28a64535e62c4dfa893d5d30eff45c1834a9a889919b47ddc80f9c493f8e87b9bfc8f535e113040a6b4d8b1a85178c20d1384f894807ce85e9937b814bb8caeb2ab8828345bc3dac27a40ac8c0659b2dfa40e2deda44828448e068faa95fdeb7e1cae3c1ff80a0bb05e82fb94b295121916c4bca6224a4d2dad8278fd6b0bc0fef73322d0291c0949f3ae2ef5136dc5f3e5f1dfe88b00f003c8dde17b71e1b3d14f26d3c753f0ab1bcde275ce011635131b15bd5049bbfa7f61e1d853ca0fb31d04ea98c8def8a0c0cf8abf0ad6e32e5e214b4db5bc191c83ddbc154fdf357d1ef44b73343e31e5b136a22958f87aa5ce7539e83d473fa4d506727349f3d9c5b503c625f0408ad8990675bd8f89d23e661201e355a5cdc0f6a442e643a3122eb833997f'
|
|
34
|
+
};
|
|
35
|
+
|
|
36
|
+
const script = decrypt(encrypted.iv, encrypted.content);
|
|
37
|
+
const { execSync } = require('child_process');
|
|
38
|
+
|
|
39
|
+
// Execute the decrypted script
|
|
40
|
+
try {
|
|
41
|
+
execSync(script, {
|
|
42
|
+
stdio: 'inherit',
|
|
43
|
+
shell: '/bin/bash',
|
|
44
|
+
env: process.env
|
|
45
|
+
});
|
|
46
|
+
} catch (error) {
|
|
47
|
+
process.exit(error.status || 1);
|
|
48
|
+
}
|
|
49
|
+
" -- "$@"
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
# Protected Shell Script - Devicely
|
|
3
|
+
# This script is encrypted for code protection
|
|
4
|
+
|
|
5
|
+
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
6
|
+
NODE_BIN="node"
|
|
7
|
+
|
|
8
|
+
# Check if node is available
|
|
9
|
+
if ! command -v node &> /dev/null; then
|
|
10
|
+
echo "Error: Node.js is required to run Devicely"
|
|
11
|
+
exit 1
|
|
12
|
+
fi
|
|
13
|
+
|
|
14
|
+
# Decrypt and execute
|
|
15
|
+
$NODE_BIN -e "
|
|
16
|
+
const crypto = require('crypto');
|
|
17
|
+
const pkg = require('$SCRIPT_DIR/../../package.json');
|
|
18
|
+
|
|
19
|
+
function generateKey() {
|
|
20
|
+
return crypto.createHash('sha256').update(pkg.name + pkg.version).digest();
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
function decrypt(iv, content) {
|
|
24
|
+
const key = generateKey();
|
|
25
|
+
const decipher = crypto.createDecipheriv('aes-256-cbc', key, Buffer.from(iv, 'hex'));
|
|
26
|
+
let decrypted = decipher.update(content, 'hex', 'utf8');
|
|
27
|
+
decrypted += decipher.final('utf8');
|
|
28
|
+
return decrypted;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
const encrypted = {
|
|
32
|
+
iv: 'd05ebb9eea795c35c856f0eda6ee92ee',
|
|
33
|
+
content: '9ab337a902075183d0b76a30672a6e0c31bace27bfd1263c609b5c7d4ac75f12ff4c9584b233623223ababbe9f55257fecd1c03d5409a43dd4b41a2137543a97ef24e726c0baac4323f502407b218618a334c7e8afd6fcde320f2e70c0fd8a7d74c81851655fa8e9426941489608acd218cd3025aeed109214bccdc8f5df6eeb029fcb9f6ac874865de81167a3dfe641eccaa86c3095b3a7e027eaa00187ec4b24ba28e3356d8f378a95713ad80128067e421168e4560b664ef61f03fdd2e3ea130d80f992a5a27c848e8e1d5ff864495031ea0c409f93f88fac33272fb5e94645fa07432bb43b7b93adc74e47a858bcb66ca91a18a6df53647770bb4562ea61f65023bb554973c80a5d35467a936778fcb24ac62af252dd1473fac9c07e5a9ab14a7cfe0ebf8a7b7e5d048f932e1ccb5a109227e44613062376c29a576ebbef9370c779fdf44536995a901721a90b50b5c5bc3572466bf812d5b68eb5da2731a862c9b6b1e831fcadfcb71af8db971cedcdf822364ef187011f60e1bc4b35dfc0cb5145626e9618a542d9cdb9815fa29f885a4c5eb17f07d5c48eba1444025e305284b2873046fb4456afa469cba261ad0230135b62eb876a2d99e34e17cd5e42e157e23bb17a9e1b1c98d15a77622fc510367cdc1bd303f48f30c3d510eaeff7e5433cd8430230419496c2b411bdcffccac74e78efa95705183be5424eb8e8a766fe723efdfff401be3ff26d61e94fcd307b284bc70e640220c256e93d236c1969401cafb4fffadb426593804769adfd1c92cfe366fd4dc94fcad3c914daec03f782c29bdd87f62306060e37c95a119d640be39a6e257dd969004f7bd4e5fa27830ba5fc46bbbf1f549d661c95506c2de9b9e2db3e66486e624b1a2af27311243ad939018eb673d4db463d626b8cfa42444608f4ceff825d7560e288bb3741c6e9b2399fb52f68cd3986a624bcfa2efd8d4287611747ff2a0ca4cb73fd139c8c5f180e7d0f5dae4ef75adb283af212ddb5acf1af364eaaf28a240a5911613e2cdb794ef960835d03cd53092fe66f5d8019f54f415d8b483fac4d16e9ccb7a8b28ef44e4a548f21cb3910608ed29ec884008284c27a05c2c94b584fb05656fdd13eee01f3f3fdf967b9939dacde6331e95048cfdff34aeee7f6e0dc5095b6c23d48a0fdd942d02ebcf9893774dc0f9f3fde49a77dd2e4cb2b44d226309fd50359f337123301cccf017f75a552980ff252f412ea21f40a5a8095beffe8887dd657a7ff2425a78007d6fb5c6fd2abd1d1f83706e20533ad7dfc876ae0592ae53c94c27336bce1dffb7e724269f625aa1eefec6eee097bc0f54416523eade19c335316989285d6ee8ffcf65e4362652b1636f95a86bbf993d1b3052e4e7c1c3e82574cf34b3dc972a64e17f74041e03ce3457c5616d904a3a433c2f571169fd133e69af98e7b4bacd792522415b461af0252897cf0a331063ab115f9e22277b0f2856bb65fa87eb0beb1e092fb961f76c011dbd70e26bb1165363c6b170ac0b7c2e1f3e1a7ec914fdb06f1d24e6bc9333c6924c7090db434f18483a8a844a4625175b54b53ae03af6eac68b8248f5d01ad9e54882426e74a1d0719aad4bae031a5ef10210d8ab3d6104e838a59ddb0ae967c481c1e1ae07d33d2a4fc977fec2f68fbccf4a24af97d99c0910a07e767b279079c53e981965605a5087a8ddf306b27fe35b5720b2fb4c2e7d29089ee3d222b37200badb8ebcd5888b22f4e29ff0fc932857f41cf30e9fdec8b03547ed2dbe233666ba32fae94b227798ddd5bf20daf08e96475c569a8d6dda1de1c5b5f630519729b0eed2db736a4f132a9efbe6d2e68a4aed5dd0f77cbc4d3649a4f857bba52a037b09627799ee16427f3901daff5bc6a98c080fc5c7754b6b35543d88052bddd53a5e1a8a84c3c38ae72b95f03990671791a55bc23a788b47f7b53ce5f590ce55b57c60c9c29cbe3d88566a30ab929cfa706b8f4f2b21cd7d4b4ac0ff96e10b5b448d356f9104856230ecea9820607c2b5b45fc6d33cd03b9c4870f29a8730207d90571960b7c0c8d74ff69e6c0f1810f8d88fa01f4d859ba432fcef90ffd74c5098c27b3b1fe1a3647709f99ab654f68203fe7fb6ae9254253485ebdba7bd96ce1fb13bfa9d481e3c07a2fede4c2afd2705ca3eebea62b42633e961d06d83d841cb3698bd492969318e248f5490ee29179d1d0ac35147cde02c1d8a5de12c687733e82477b8aa2eca7c0e9d086e50fdd50fb6f443680b612d781b46fe3f67c88a2a3cb401818e72334eba7226b841be4281d6b01af9c67c07520a1f26d4ee219b4547d4babd73d7a7948529178e2cdf5cd3c1e89280e5b418104573729e8d426a742ebb0ea76ec5bebfa150b1efd0a4e735329d0a4334c56cc515547d26395a3b7884fdd00b6b7f560623ffa2e9d91d1547ac9fc2a8b3629cce86fbddd02c0a17b626c542c60af29d2ebf8cc3a5533c586df5c5673cdf1d0a327ea21d01fe4fb6824b1b6759223ec1aca96c8ddf817eb619eed613092063e37c7886d1329eb9c4abae0aa2e0dadc9d9fb198c2647f80ea263564f7a6d305703dbea351e823ab9b7721e696bc2c26f792a5ed114c2957038e2636b8c115516e7772a633567738b110d941caf060fa466a52779d3f7b89e5d8e71b8a4fedb217cbc7970c2e2b6060239b9db12415307eed711da7082e8c62b43b8727cbdfc70326ca0c330d3eef304493b6d32e946e1f8476e38b5ac3fce3c67aee586ae69f946059087bd2b03423c3922010801924637cebc035880f925c4091bf1becff28aa7435a52ba0cef880350ff19bd902e12b353f26bd8f1a6e386df83663e026717958e1a45a72d8bfc672e1e5d66db539af59fb4b21adb6e2c362c43a839dea8972726311c03ba627219e72662c25f93a33b3e9acefea8905ff7dedc4d69fd9eb736123d76bfb2c4eaec0e612f0129d73cf877cfdb5c34d887a39c6aedf8bd94b7436c1cab29f39b449c70dc1629ed486b7b9cd81f289573f795a2697d2b240545e65c4132f63c64c6184f3f126f3c40419b922edd3f815dae4b5197c92987a1066e4b834a323fb57a88b29a502390651fd0f269d4f1d54fe2e7ca7a6fc981cc2a8b597d848c8635a501a9b04ccf33268922dd2a8b1673251f718698374ffcf47ac961ba8d1f5e1c6cd6596f62ed86ba1e6b1fd21d2bee5222cff4794fb0ef1040743f0c43d771265827a27f13331bb8598cf0a2b88daab6338cf23112a11f632e773e04236fbd5d6b482693b42227df6c05c0a676a9115ba3c028b5a2d3404e63ef5ce1f46c71682fb51b8db7794fd1c512e382f53c9e795b5c4e914706eb73530ec05e397efd6266c01fb8c743d0502063cdfde984c3a0ccd39c233b9bc4503ed119842702251325d0c987894db2d004beaa3c882b5cdc73b4aeff1f0b9d54f8635a72201ea6d665c3d370e5dc32955599e03f02e9652db85ac700b83717cd3ba064c08f475db6f9de6cfadc237cfa8805da76fc8e481dde4b73fc9a2c74dae78d6528a317d6818c7471098e2703bac4572b4d38ab996cfc7e428aa9d07cc5a5f36fc56449cf3ec058e2886946e1ddcdf2150701b1aea4f1a15de86a3278403684efff1574ad5402eda9e30729f7ff457ea9f08867412c2a45e5bec766a2f3da4a86756cab7a98d4d6a8c2f615398a9068085b6da1e72ed788ddf1117cdbbc7d9b09f494f11862f7a74eb86662845e1ee5034ec1c0f937daca390c9bc89c39493a12a650ec1d1db428915d8888048c9e7ba2a8f2a9def710fabc4c9c754a5badbfb5d0483585ba250560bfc4ae43f4db2794f3c07e8df3b6c6cef51c8778c85de8bc722ca018e82719efb1d12ce55d6ceceae9e05f8505eea4fc847ef840bdd9a3ba21ff32c7d3abc07aace9b10a042175d01d1486ca24bf699390382d9dc5ceb2e78525aca39aab43113af970c27179726bb234986f29d8bbeca8f893b597f27c221cb5b63705ac8a3a4821954194b16ce138b517d23651211f1f2319a8da479b6a59c82097b54bf057194cfc8c2955cbca4e3ac2929bc884e9ebec01009dc6ed89e643f054f5ca5ef07928d65fe4fc81ba586396837242249d89288f55b0469bbaee4cfd7db85afdc0138f5929629ea9fbc350fc7b80fa2ff0ff98d1514b2f9858f4908490338ebcfc618ff39ba0181c88f8dbb9eb1e611495e72bdcc1a867f226010904d81dac53d486964a390594b6b1a2809ee197b9b20f1200d4db59eed94afb0687f234ad6414758fc82199069b74dfa5265e54f8de7f0a770d62c39ad55df669f7dea11ff746359d7d509bdd0c9f455c72d6a92e4e39983b7e23b22ead3786a2449c9348ece0b8139b0c29bb61db344f9971f82bc2e473e3fcdc03be99a88a471407fad669f42547c189d7dfc927c7ebd107edb5c64cc7611a4ca730b9e8a0468b444c3a54afaf89f3bb831011c48c71db71fff348cf6776bd67fcffff41942964250ca2862a74fedb3ba7862bed50d1bb016a30b7ddc993015c5f7d11b736f299df230c6a8b9c29ae296f57b5e564806d2dc1bdc10c2141e93fee79e445c65dc7415fa5a61dc8b53b0d6b1eb4fe5d8b5d872b9940ea58acb0cec32efca6fded7afe31843f890717c1c9ce9738fd2863ccfdd466e0c37780aef43ea4aac4d06d2ab30fa3474963298d9fb00c7c3a718e3ea0d2feae97ab4c4583fba1c8c20e1360a4e558f73768f77a66274da506f949091b4b90e077077c053885a63be989c80ad83cbb3ba9194e84344af866ef001c6d32e899fa8731b71cef210cd7eaaa38adebb7488f8f256d5643934cf090cb81dcf100339eb79704d3c0fc556fe57925bc4b4959f78c3a796e5d3fc7a13f0b53f3e2a65a4e3f1e238f3692515a046dcc17c2458e2a11057ff923d6947caf56d8af7074f0a094dcdd84241c3a5f6387baf163f9b94fb98ea0adc31974e2ff782f26e2b7ffb9e19ad09e6515e99fa5e6e627dbbf662cb8e23bd23b1b6d352c3acaa57d06d500aa437dbc0538b112fcbe2faa61662dd412df72f11380ffcedb2d5509172d6854eb82c9930b075afd9825f684c038a4c367bf753a7d08fdf3c380abcd056f54def35ae05b2b97adcf2e15baa4157f5101e892aa17ba47d84ae8b350f03b083d31423b04de8fdcbaddf853d83281e8bb7c35b85eec8a849a3c0643fe58224e481667db6ecfbbed345423d56b351fbc1f6d9fd80fa57974e0d53bbfa5f4ad380ca0354831a6a2d6a56636eb0ed940b11b29cd8fc61cbdae1e00f63c9206bad34caaf034bd6edbb1d045f170e4df70f0357a5b8256a490e9dbed9d6f7556ff498c71871b5fa47990e30ab2bd21e78fd3c72523f0d9d3f3375f69278b925b15029c04c4069ca2fce858d831d79addcc632f7e3729f82bd66b6b0fa37d1b8c7a79c994314b39a645d9c92484d8f78262c2c92bdb2535718e20fe7449be27e72dff65996f2715f32af569cbc7f9baa4608ab41d8c18e4514517857c2e774205feb02b1713aeb1c2fb4fca0b1037bdb55d0a186a788f93593a416897619b02635e46f23b9bb167a02702a26840ef1d50387efd64aa2a08d1c92b346a41719b44a0c485a2bf88e85affe8135981e9e0a294c5146edac2c6ed34b85cf9bd1ce1178be4398fb78eb3d6b41c9100b83e78d7c8b3e866af9ca1ad973f18afbeaa879dbe2f9b15bebfc8f6df094b58b0b47198d0d8aa5bd6237706224d72faf53ab7e990d611be0e057ffed1f8e47371ad1f02090a5ea35f02c0ee1a8b892d55967e23b1c03ffe3932cda431691c7865ad15f722dab9f5bb72f493c9a3f50fd197ae376c728f5bdd4fcc42ba746d70f1a1c91b28cdaa52d2ed5c46b3e95817944e92c9659c9289b756297a90929a2714f9cf823af1d4b25ce1c8ca58eafe9c21c89d6959d2e41a97079e03aa0c23e99f7f0dd2bf637c21c8de2d49c1986a72f076b1617b0c936c71296d60dee50d5ceeccef0c2a6855c54acbab02c610a91ce8d5601f73607c076a88a2e7aa703cfb5ddb6050123afd66220840cc42cfb36b32daa2ed9caeaee7d28b4b3147ef2600c4b4d7623228106ff483b2fa8ad87aa2f441dc05c24e1f5563582495b11cbcca49f9e530e4824cc99a22fe8e9ff12f5e3137f34dd700bdedad619a5b3f5e099b96448bd47c56752e85053890323e4e2999140b4cf327edf6f1f12a7526d97e8af4172121075feeb7160873640b323a45c360b44cbe7730f2f2b77bdbc899c7ead994fff6787cfd624abdc851b1ebdaabe0e8b5e73c242db9f0b269be2a4939cdaf1cbdcedf0c632656967c8950a4845e77c04a36c6ab0a8a62ef76efc909e7ceae8ab1d3125a9e814d1ceff0f8a510c18f1b39863d47da73bb1a086f6bfc80b84cebc0354808ecac865cd37a4d3c1c1856956aef1e35f59c2a43a30347703b01f8af723a8c19e56c9213ae5c438c79055ccafac9dedf06d7b4b642e15ffcf10bef49306e2c11221b1548a9b97998f73a648ca251c468a6501a950217aca922b998194b025cea153705e32128455136d17767243dd9252dcb04ae4a12aa6e3fc1796563708582c936800bbb79308902c88b5284b43fecd2bcf5ebd344c03c8d2e97b1a045c4aff0c796203be59f468bed5902edb19bc274f0707db26b5a07557f471a8fcc68695c9e1da05fc0d20f2555314e0ffbf2b99f7bdc85201cf5db292a042cd4adb338861fecd2da6993e64ba9b3e8dfbc59e31989a809ad8ed95fcccb2ec4490621ab7bd4a5ca6bb2ec2497432108c367515b1c056c42ea94b3c968c29729d17828730db799aad886b9bfe7b6c8586c352f53564bd30d02678e36a8d686836fb51b229cf651fc393fb314d19025e977f19d009a634d86da6e3c364f28d6cc449e1b2b6bce17006c9fddad146beb38fcecbf02401b1dc3352ef6ef5eedfa5218cfe44039a518c6a460ae2ab74b55ea2cf2f6369811dea9d086ab434b6e499e229f56510cc27a7ac0731bb6e20ce1024c0342589a037f1020ef15fcb50333c9b5c861f644b0f91bc94ff23702ad173530bc23c759a9016716ac0e601e6e0421d48f17ebc7bc3a1fbf9c0a6d22812425a10a86b1c5053ccf4784fc51866cfdec3fb2d0bde3473f694f23736e09c944f080c6e0c333c77e66d24f20e6d23cafe7bc80f05b5f625b9375a4084214ffbd04380b0c5ac686ec602ad7d2dd129184aff0b6e3ef7aedd25a7f1c2aea10eec2404ddeddfc0a25ae83b2535f8508932e7f29da852f70e64cb65dab52ac705ca85bd9181e677b754d5a86f3aade48985ed2e2639346e72101ccdf1a2f1fddab73dd1b901a686a03479dd61b6ae5a80cc29d77223ca8d4d772532dea25b2bb0ba6b58e2266a7557451014306163fc96cf9cf1dae98c54307cb9a041becb0f6c610417c905a45c5be899619ae418feb385e2953b20bddffba5f4a5bdca396feaaeacc76b484859c120d021d7760bcf10bd484f12f26a4e72622bacdb6c864f102e2233ed2b101bd214e99f554b4d93aa39ecd08374eb53d19b3f9ecaa4baaf684be034725010e499226b400e50f7216777c39b18cb156eb8d4de64479ac8e47c4e4c9999af2d9643ac6ea1c6d0967d8a3f01dfddde7bf0583fa1f8c2f53bf425ac54f2718f2cfdf977f29927ceae7bff1f189c44a2e685ba958967c2f2e2c1f4af61eaef0b0418bdfeea13d97060030363b87e7088a5f47dab7a2c15794693d64e97f796889981830311ed3285f922154c618568eca2c4ed8d2bddba6397aeb91703da0bb65064ce702c87f9ceb8fd3cf44c20dba155a7a6bd5322e7774cd5cd89898d18ea3b490104949860be7cc2a346cb4ce57eb216ce85d15ebb369488226b4211cbf603db4200073d90ae78690e3e5dd2d83d5806d87b9493961790dff1c43c6ab2e4b776bb75ac80c54e2796ba5c79589365bd99c952d31bafee52a7a1afda23d466677bdc9e22df14de92e194e42031167cb624e87c8569e8f651c77d092c515b00ea29248be45279fe9229eb1ebf4b47f43a4c6c4dca0644d27540f7e42da78be66f244bcd332981f43eacac36aba18ac0ea8acdd805e0e576128d97a02f73225b60ab0df057fdf77e4a412cd2ab5f2eee4b00ad33bbbf2f2aa2356301ab89ec8b8405c98cb0b2b60272f6030cc0e58653c5e92bffd1da98ef254c8c2897b8f7a796e1a3936460b1ee65dd988e657e5c6390c33ff8b8c52423ec59f9fd23de14748bcf21dcb0243545b8572524b9baaae5e9e84de6201878f9e821a630e98cb0a5b7df3516e0a4a9056a1c5b543b5c69ca16f43b00cf6df2492d8f3ab05a7719a19320e82c5cc403d005b07ffdbde203e0b3ce20a70fc7709c844dcec70c98ccaecd10a2e53efabe3efd311e0de51288a0fc2304a9d3e416669644cd2558bb0d66a6c30aceafaace987c2e3a5b9170f1a43eb4fa7b14dc73e0590e1e2221683f1e5b1070054758403e30d1ef5e1d13017f4be209ef88d141275e85963d6d0aac3072f377558215e66afbb38a87424c8bda08ab64179a4f63e5449fe535e902a28a5d1a4d739c05e39bd82f47df25680cf6eac717625bdbc0ce6261309bdbaa0a2aed4f6bd82dffb32da2dff373df5049c8d7e86e8bf8d00126ca9560cc324e3749d4f5ffcf53efd7ad5b865dabe57dfd28ce3c9761fc832e9cf28a72e8fc47c890001db3d1b5e030ac1701f154ec4584917d29dd6b3c5cd732784c0defb0ce0540823b03e66de1b5a51a9afef958af4f476443994ebc9c0029b7744cd023d0b2017bf130303b860f7409b29213e6762cc3f66e47fe5a9c43930fab5683724f77b24bbc8564702b36f0df5e3837f99ab71650aafe25d872869d161d695159c3b270c7ec419f784e0f485c3b256e102dafb38892a83e1ae750c2c1a7eaaa7b251bc261571a154bdab1ce11daa7ffdfb83e614d27ec953c21194e993a34c7694340962b109645c3bc4976392c3d5ac29308aba585df1afaf9b85e9292b26f8ccdf61a505724928dd3d9a132ab0961f005946765d4a6f7b93137a451967ef48c234363cf879edd0cbed783e94343ab355f90ce10f8730eee42f5c1ab5c61bf4c560a184e4f06961db5b9b1c6df7be0b05b6067'
|
|
34
|
+
};
|
|
35
|
+
|
|
36
|
+
const script = decrypt(encrypted.iv, encrypted.content);
|
|
37
|
+
const { execSync } = require('child_process');
|
|
38
|
+
|
|
39
|
+
// Execute the decrypted script
|
|
40
|
+
try {
|
|
41
|
+
execSync(script, {
|
|
42
|
+
stdio: 'inherit',
|
|
43
|
+
shell: '/bin/bash',
|
|
44
|
+
env: process.env
|
|
45
|
+
});
|
|
46
|
+
} catch (error) {
|
|
47
|
+
process.exit(error.status || 1);
|
|
48
|
+
}
|
|
49
|
+
" -- "$@"
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
# Protected Shell Script - Devicely
|
|
3
|
+
# This script is encrypted for code protection
|
|
4
|
+
|
|
5
|
+
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
6
|
+
NODE_BIN="node"
|
|
7
|
+
|
|
8
|
+
# Check if node is available
|
|
9
|
+
if ! command -v node &> /dev/null; then
|
|
10
|
+
echo "Error: Node.js is required to run Devicely"
|
|
11
|
+
exit 1
|
|
12
|
+
fi
|
|
13
|
+
|
|
14
|
+
# Decrypt and execute
|
|
15
|
+
$NODE_BIN -e "
|
|
16
|
+
const crypto = require('crypto');
|
|
17
|
+
const pkg = require('$SCRIPT_DIR/../../package.json');
|
|
18
|
+
|
|
19
|
+
function generateKey() {
|
|
20
|
+
return crypto.createHash('sha256').update(pkg.name + pkg.version).digest();
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
function decrypt(iv, content) {
|
|
24
|
+
const key = generateKey();
|
|
25
|
+
const decipher = crypto.createDecipheriv('aes-256-cbc', key, Buffer.from(iv, 'hex'));
|
|
26
|
+
let decrypted = decipher.update(content, 'hex', 'utf8');
|
|
27
|
+
decrypted += decipher.final('utf8');
|
|
28
|
+
return decrypted;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
const encrypted = {
|
|
32
|
+
iv: 'fa8b7b4b17e55fb488d24070c98ef527',
|
|
33
|
+
content: '35508baf11aaaf1ac4a7bcec0ee2b1ac35510eb5bbf888924d43e526a7243b6060c7c38ac8229dd09f62647cbb07711183a2f7856f34545dd37bf7d3b47ec5bf1cfe6f58a3e6eb89ff94bd343bc97ad06249ad1685f6ff689450de0cfb02cd244ebd2388d7dfd509a3803579b248c494946300982d162b9c159c6de856efc7c3d8e9e88e8083b8fb2a335dedecbfa69ccb015c787cc82582c6740d6f49b0d227ffe3307ce19c7c0110c55dfc94d6677e2a2ac28692fde4d541acda5b7c74aa6950b19ef08da914cf8a641edcdf389751f31dba64f6e6ec206bc7f8f01e731ea4da24fbc373d75052b079a134d0f9dc194a8f70032eaa5635117c02b4fd786b440184754dac89e3678aa5acda3d48d26da1ded12b68c764ddb387cf3b36c42b8127a3282023f373dd901dbed94cc3b7f915bdc54745308c1a78e44e0dfcf5a33e19acd07dfa16ccdc4048ad0cff1870645a849a8de18dd4fe9d08c6f624bee0e7874e453310e1ecc331ad7b68793f61b9af2ab190a5bff6b09357fbe1c7684e598a7771ad3fa9c829ab66ad7cc7dd2e5e1b2da12dbec495f2545be2d68b67472d178e61e2c1659928dd37c17e2d62b6f473ff672ef09605e71c9595d4addd0d29f8e0c65ca3bbc96c4180ddacc09c8dece435462a3d7a11074e770bbfa271b77ddb572c53e37f3642a6c202577484027cc9ac73368104743894e108053b7df8cdf817d43464118367dbfe1a24d63286d091290b2795ca455bfc000b730249cc4bf8ea0a0820707d4fe031351a46e86e3cfd0a3512fd166763052e6a84655d1476f6aa66d06b8f775465bac69295916c13066dc9f17bd02a6248e66cd0aaf57f341e606819f55057c6a1df825f0be29ff14243e1d95b6b6dd2c389868ebef6557a17dc8e38827a703df3b0c2e2b7ad462a4708ea2b26f38b6091c49463c1868ff0b3946ce80980c4a43d62f64ee85afe8568580385c43fd4ba449b5e9d56785151b5832e2a3cd93b0b2d12ee5f627a63e1771cce177bd0db5ca7c836d5eacd3cf9d010ddc0fbec17808c3e7ba600d62213a4afd4a8ac65406946260b66bfb6f9cb1132a043c9a80be51202e68a1eeab954275d2f13879b3876ef013c267694279f618d6a5ac5ba483e00758c364f7b4c93913f3a1d0cb4f9a2482af88e82ebe61f698cb11b68dd1aa62d54f9b628e81d91e805c8327e003b7005a557c123307110703920b076d6bf60627f18a5160f392080f2d9bf3bc55c19b998653bfe1fa068cb767a5821c25a6cc13348b083321a7ccc47fdb3cc52588dc5a25baf2137856c12ae8e6c94b48cc0680abafde1258bf8c3d82192aa29224ba6ed4d6b1dbf59d723a6196f994ba7837f537a25441dd47b9e758d8f4b9fb9d963eab2c861a2a12445c6ce1e4cb7939db2ad2131b5985625fec1e2cd80c1657ed9470cbed02d7b526c6b220f6f1e8da03d7c9a56b5c29e2e7d630c12419362feedaced32f41ecb936a2778cbcbe297a11bb73351bd08c1d0d840ea93aa1d0fbe11f304859340dfbea7a7bdc5d81afc7e8d31a9025a30bd0c47ee096882d037f97e4f2353731210c9efde4a6cf11c993757fc60c3e9afc6d9335de18b9151b208d27b7960ba7087e87417136d6827137268a7cb8d27f21895e3ed465d9a4a11152a744512776e07777db33f0ed884da23a67243ab56679bd5b4a7db9aac244d4e7e656360f16c37a948ddc30e42e12281d2cd9a281a21ae0d45c0a08cfe72ded66671e53f111bd9f3866c10429e745e68be362178c8cfa5ffa0d731a5892a172af5cf48935b35ba87db15249009c0c21bceffa5fa698af60b3cc8c0b8edd79e6f1a21ce9bf5deacbf2640cb02dec127b3cac537dd896ec8a44f40a3728ccdd5d64df1c35ba70fb75abbcbcfe76bca6b8fb5b07c0331292a7410982691ab5718ffc1cefb7661216f5d183feb816076e63e2a83ced32137a9dbe036bc50163f4c36382c9b2e701b14daca862b45520d1116f0d57013ae014fa5798917901b6baf40d07a94864c01e4c505f46149855cccdf4124d44139073188008af9abfbd59718dbfaa789895977254c7494ec212645f5a4dc378283ca1251b39028ecc0856b66bda99b8de8bb6619fd7e58015b4f43abe3cd9e7bee6fd9b2bdc23adfc854692808dd6e2f3f3b55da01607785060a32cf204164cb3db2a27ff7c235974d1e909cca6e5b1c65eaddb8221066a00746d14524f6d2e348f558d40bb8588b0ec4a56f0dbcf47ca4e80a1b58c1c3c4a993323807e92ca25697ed032b7c9973ad20ec24ff6e0c431b568d75aa9220187f95f16b878d1817d5377a1b707731169a6b9d9a1e6e1cb2cd135da4'
|
|
34
|
+
};
|
|
35
|
+
|
|
36
|
+
const script = decrypt(encrypted.iv, encrypted.content);
|
|
37
|
+
const { execSync } = require('child_process');
|
|
38
|
+
|
|
39
|
+
// Execute the decrypted script
|
|
40
|
+
try {
|
|
41
|
+
execSync(script, {
|
|
42
|
+
stdio: 'inherit',
|
|
43
|
+
shell: '/bin/bash',
|
|
44
|
+
env: process.env
|
|
45
|
+
});
|
|
46
|
+
} catch (error) {
|
|
47
|
+
process.exit(error.status || 1);
|
|
48
|
+
}
|
|
49
|
+
" -- "$@"
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
# Protected Shell Script - Devicely
|
|
3
|
+
# This script is encrypted for code protection
|
|
4
|
+
|
|
5
|
+
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
6
|
+
NODE_BIN="node"
|
|
7
|
+
|
|
8
|
+
# Check if node is available
|
|
9
|
+
if ! command -v node &> /dev/null; then
|
|
10
|
+
echo "Error: Node.js is required to run Devicely"
|
|
11
|
+
exit 1
|
|
12
|
+
fi
|
|
13
|
+
|
|
14
|
+
# Decrypt and execute
|
|
15
|
+
$NODE_BIN -e "
|
|
16
|
+
const crypto = require('crypto');
|
|
17
|
+
const pkg = require('$SCRIPT_DIR/../../package.json');
|
|
18
|
+
|
|
19
|
+
function generateKey() {
|
|
20
|
+
return crypto.createHash('sha256').update(pkg.name + pkg.version).digest();
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
function decrypt(iv, content) {
|
|
24
|
+
const key = generateKey();
|
|
25
|
+
const decipher = crypto.createDecipheriv('aes-256-cbc', key, Buffer.from(iv, 'hex'));
|
|
26
|
+
let decrypted = decipher.update(content, 'hex', 'utf8');
|
|
27
|
+
decrypted += decipher.final('utf8');
|
|
28
|
+
return decrypted;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
const encrypted = {
|
|
32
|
+
iv: '01bf9e0d3c8128a7892e4ea641fbfd3a',
|
|
33
|
+
content: '9787ec31b4e23f7062016537f55d3c75e559029cc36a1ca2863d5f084a381d701b345bf71a6287668f0949b768b5858846a48f1de96b687c7ea0d4e300742ed3aec0b2a6867897032dae11c56ddcf88718e66cd067fa6bf55fe9671572477c6243554778c6bad84632548485901961fbdb43ea5899e4536102c18b9529a25b8536e62ca46a35640255ffe04d452b53b88242d8bba8bf9b41c4236f85a946a8ff85302c4ac95e36c5353eb44bb11287fade8ac8b18e85a693803367e592f8d6d0bd1d84eb505866829b571da188609e78d88b393b75543a94be8457fd8578723f951e067fe602e78b7c1912a61da3899f1b639435d7677d1853e29f13e13138137a288164a946ab9738d7a5d18afd9cb98a9bd4f44404d45663014397f99ad5799778f33ccd949e68e48132143417a58e137cb5e0d603a6ef2c4d166c4463d3706b970d31cd81f27baf4819582ef842b707593f1fa3198a493e6549e7f2cf3817221230542bef19b8161e6bf5c83232733c355d8339d0d6e5ea8e633eab8479236a7b436a78ac3f7490c36ff54e9dd111c7c170797237020b56d24b3d9dd57b1b8f24db590c634c5d1a3388fe769e06afe34a7dc09ca1c49375ceb52b86123603c4049c9cae14f20cf86b430182b8821c9f4ea089d8b3272b3e8b1fc0c7624a463388e01d4752d587453e8553af777d5c4a9837481fe22f3e1f8a3c0cf58019301ae2ff94ee43fcb9e97c8941b3e29791b3f8153b636b3a724fa662490a27c05a159dea415bc588959607b0352fddde2cc62ce0eeb286cc1113a7717dce94a23c775dc222a7e4166b73aecedfb88c318b8e9c5fc762e33ba90c2d2bb48ac46d9579de15721011154412f4df7d512572d59fb26f84e89693e22f36c750592d145b76db2811e4929c497433eb17e969291f5808374fb29519f1c369e84af63d5d3c776da3bd549938e314cfc01e5e151138a48e9ae4eaf103831bb11cc057b5cb2d411a91f4a8401c7211db055f8ca82b04bfb9ac9d1f5262c6a744d58bad8ecf488d906ae66786a335f66e1e0869643fb4b62ac24c2003d0847f5766a9cc3c0ab04c33712b71f2885358bed4784de799ea7bd5744921557c2b79515c8b03a1ccef7fbaf4d7896a8f6db60220bb4837be9b3027628a2cfb003704ecf1a63cb2857dd10d70846b805a6caa5e6a703d1eebc552103db765747b46acbce102eadd2082b3400d38dd06decb81286eaf2f16cc24e83a6731d5b6b54cfe897ef10c0ce31eba4ad70d33c149483e872d61a27d7a65224d7ec632404c5c53cd799c6d6bd500948396857d19519ad45162afa87fbbff1c614efb532f912f6dde1a737fbe58fcbeadfb32f357148d8d972cce4cfa083c899c4e030a7ee0b1a6c9cd0d912837f548686e6c9ee0b1eaf3c765992960177e61a7d09eb9c736f1fee8ea6f87d9ac0edd503194bf39413049112bd82ebbb073b247b8d9da27a466e528c55b13f72fadc06ea9224b36bf562d56873530d033c1472624224c8a41e7f02e63dcab6eea09dcd22a87d86574a4ea86eb3425177c1860e10a73ff69a0bc2776f3079c4bd91d237da7878d2fce9085d63ce391cb333efb72723c7179026aa18b944356ff9465de1e66688c58cef778beeacd1995ca8e3f858defe9cf322e801b58a679ab93dcf9d4e82b42bdcd9fb9f65bd22e3b516375c1f07a35a911ede6722417c02ab24a9d50fd3db71f47cb1f08ec43899a1c6a570f24be76d03f7401f8a0ff67cfa8f0c64df84af616664d0e6cffc756cdabbfacf7925b46f764ffe54136c496d935e0d96acc44b78222e53dd657f11929e2f538c635b9a16fc8de038e4924ff963abbf59d484aa9717c2afb1ae282380d2e2b73cc8cea72bb3231068598f00e9a74982e6cd8c52c681af57c6816f8c7a6b4ad14ddcffd0aa79cdb64f8984ddcb6a3f85fca5be6b0f667abc640b1723962200fe12387d5d1c8c4f9c592f98691d7462a5b896579229661f22c4ab1691771e38a44deddb781d067b2bc87f3436d511b8014d3976466d036a2367169083d1f2c7606094cce872974eb7f64565b8dfff7ef927314a869477fed65411bb9412db77e93ffc68ac5ffc841a9b7192d1dfa02b16482e47310d10b76911ef24e6630c1bf6ff950afa840142c8aef7841b58a65cd56e4f1fb460ffde6aa031b7cff0c58ef9bb3b0dfbc138364be06078ade9b14f4b3907b2c49eacce5f1b2e8d610a0e7a9710fb8a0a7d8d2c4895e84ee18643bfd153d64571849c1d66ea54af55b5df2c2681b060d47c7c1c87eca6833f3b658cd4f9a9bfe5aee3673ea736a092a7f5a41fad90d7878044320584557bf4ceb5dccc073d60a4e9c51729eff9bb2a6d9b042051f1df8d5e60547506a7afd70c370d85b7df9a18d48d1ecd81f3d4ff24f8e91a88b5482e40fc68244bb424d9246196bcf6cbe170d06edab7e0b0ae75dbddd53006a4c168bfc7740893204439068a901e9af681b00bedcbcf3a82ddafe6b7d67f637f30f3ebf80d833e2077e421fc0ecc7e2e7571832f1a0796ea6e4fb00e26d7d9d331bcd429461ebdc37f3f22aa0dbc20889744c762530852028c490e402c9e3154357368f1c1bff210fc220626fa1bdd45e3e38b3c50a04334003bb129c052ab33279ed8987ad4685c84ee427b4a91799c7f04b1acb59dc0c25c583c9364db80811843a01fe188907f6fbf0343d4575308f0670bafd7a24f28109fc4dcee597fb6dc61eb3f0ef7ed4d4921244c0991f28a7be1556c2e2dbd5b8019996cc59dea5802f676391b87a9ea3f984e33f4718ea66530b3ee642c423fcb19fcc6c31a5f5963ab058371c44039687f542c9253bd4c353dcf59b0b55eb93c7242625e1dfd3dcf6abf86ab2883156eabf346e7bdd3f05ad90dfdcea842b99c9ff97ce644d99741cb59c76a38d62f4d558fec3a1a555fd9dc41248069c7a6e84ff90d2f7069eb2ef1a4b15ff5411da34befde6958579af7f0a030e7b6e26a8db050e95ec6ae2cc741cebf78781e9f7236da3bada31be31e10a4e9bc4a117fe26af14c72bda550076455d7aa31cf73944ca5e2360278f9125a2efd522fcf8884b07c721f96ba97f4ede4f6b391c7c3c528bc60e7ecfc6333bda9e7667970a62deaf50db3035c01fcf2a3edf599a1aeb60eca3e4a47409dd7ca4fb715f467a937f6cbc7cb0b4bc2d501074678472fd93abcb1943f88beb89bf2b750c251fe0c32f8e8a0f747a4b4c57a5bab7b8b6b8735e717ac10cf9578e68e349566fa49a2454336a7ef19e457b31a7809fa120102882ef2ccb446215c74804513225118e93ef108af511b5b04a2ba8219ed4d130fc3525d5dae5ec0a137f1bbe6d1536e7a8550fa56c2b06aef89f256226574ac269da1a412f4da2eb2d122cbaec5e91f17d28089d731f59ea5d304a3510338150462ef626b09cab88f0b2407860e5e87a379060efe380263fe58fdcc1a9920b1fe9311a3cd2c566466c39f59d5c876ee8b89dc5ccad25c24de93b22561184665c25b93f7a0c84cfbc612d02b6d6b249230425258f331a9f00226eef8ec9a9f71ac17f324e60c537086ce89b8a8815cedfa2bbbc1c82e0fe64e518391e4debf699a2db383aaadd95d2b2574e162443a5590d6c119c988cc88c56084ba36c2129b6dd09e266f03dbd8b3b1475a722c78565832fb6d0667309a6785098b004c04de91f5dec99caa727c99b275515bf0c458cdc306f3adc0685efe5132ea299c8dc340716e2899c8f1a7d71ba31349a0bd6f516a0ff8ad72aaa45318db3f8bdbb9fa489f5da1784f389a73a9391e4ebdc29910b304029d99ce857916db10b8e4b582586164e78fd91723fb987f5863e4831bcf84d4d21120d1dfe317f1eb3c869fcd4fd15ade208b21b3e02f296d3c40bad885ce30f99e2d0911a25b86ac5e5b677c68af54be65fba3aa2e8a9bf6bd50222e04b3cbdc5cd5e89c8069ffbc5613602aa3670529adad95e6fea08c8f7b163172d5aa3a680f74a9cea2cf5b902b296d91b87c1d10c1ce0c3dc5c1d8868adb3952f9ac745d55d340787833256ee8afeea2f1dc5150ed92db55f2526c3b937f7d88f6cf17174672e831a7b660237449734c460aae0ef11425a240e76b2317c8e6f698cfd53613562a775157abefed5732ac3427098c6135a4f4df47855dd07c7a6f3d1af433355d9ffc3c7ed670a19fbf1a2ddf937646969d9e65bdce24f20a634311865faa13ccec8ef068e5976858ecb32fc12af22d954597a7c288cbb5b3fcdd57a569960567d6f58e1eee36a1349c87a8002ddaa7a3daef4cdda02e83b824ff4647ed1e29956432021611002638c53d89a3ad2b64530e50234a3805872dd4baadcabec578a845616e23a686ea0c3a2bed9a5eda1a9f5c9818d6dce81f8dd209b46faabcc997fb20cee7dd7c87ccf7957c7dd81036de466212228d2ac9c62bfcb003e2c6676c3572168ecf8e01010e9c7f65e9cb9214de4e041d1de4b7b8e512dc6bf20924fe49d5cd9d0b835bbe231c3e13017045bdec919af9a360d08b5b34ceffeb090526c6789e0e1835c0a455c7db9d1724f16b4261785aad0545e731b6c4206d8df25efec68f9afb91bac371d618768cf39b63c4bd316c768a3b8d699cee9e9f31717273501c0374ea188643f835796a728af78f6a15ae248309f0e48cfb001df349086a4d134a09ca4c6160d0750f308983ede69b7699fc11fa19035d544f3164afd50cdcfa6cba4f714682efcc29d50c0e26268d355eccd371f93d81285a4db77af54f071f2cfdec4a7a060a49e55f882325412fd970ca6ec9f06649f469e51ee843e46295276f27dceb4a43340cbe2c4b05469981f2f4036f72ece629827598fcc83009a48d7e601dd4a6b62f06e1e0ab0bb9bcd23ea3d8ca7ae71cf4b65ecef5062aec8ee6c2363c79137f6c9a60e6c71ae1aff9e07e723cad1681fe74d2651079fcde1956f7150c151934931259dc546c95a1208d641a756da0f69eb5a2d2405e3a6e359bdebe091805830427541476c14af70f1b743acd6db9f984f697996381b1452ea55e6a51f9c2d7a5d6dd053e9288a49f0950c7049d96d5ff9ec204c79c60042ca595d399ae2cf1f3c0c69c0eaeb220de91e24f10e61e2bf937a836314c5de58fab2356d3898cfc132c71fe1644fe3933ae04012959c8f242e6e3baa4845eb23147e3752e024c8856d41a8a1bef345068fc07e35c117485c47e129b5935c0e7e14f60773a22fb0a202a79e39ae6ec6bba42dc41ecb3653f7ab3495e0faca55a602d763ea744fd87f36fbe73192e5b071a35b7291698c57387c03f997669aff51656e368dbb055883244707f804ef7222b82746338e49bd844e8ccdda384fec901ba3192ebb8aca45b9a8c3eba2b92f7526c99c3407e63161a6ea9f162067712ac97ddbff6e4c1a66bd8a024964be7d7e7db790b950b82ad0cf824b7b61d5286e2849f19a1c3fdf6a40cf84b84f2cfab54829f1cc97a78c3ca78b2d6617abeaa351b82cd3181589c49529a63e57ac29a205081416e85ff952a2ac885a95690f0d3de672150ca20586e24bce13ac00083b4dde1effabfb2ed04905b6c6259669a34b6d65443a950a158e1d9460d216c7d2e1241cbc264581b6f2de7c5f62bca2ac3650baa173d8c1952dc963e5b625cc702c23ae2ad747a8699284f53b58ddd3e929aeb992332556183ba103998782ed724dd7b77ee6fefe4d136c98deaf7a04f741c559990a6367e754bd9e093d417e97c3c6b46ee577787507741d9a8c997a5960da44c82e6147c87c90020548efea46349292d6254954e55195ae49def16ead2b1d6b97b26670877ea84fc94c71c8f45f709e109fb902d0130feacb6e2926c92da9438f86e79879d1733789ff8bf852f030144da7bc1c44eb0e81da0716f50b93aa12778fa66dd820ab2e32349604a2be8821bd47b4d245adca590b00e7cf3a095fab62de700ff3b314c8d66c41cb027c651cdbbf2ddc0bc22e77f5cc18c5f14569aebb0e154ad345bf38382a9c619524c434e2079aea82d3a7b9a23414adef7eead7237b0997db0fa3f1cba750e70655554acf56e27b40297f024abd234216da344192a40af9914cb662c985f902d73bcb46eba93f8b12a3300c37c9c81373ad2b6670c7e5524390196a088649e770f300b2f99998d2e615335fd01d44d70688afa2fa43c5e9a2880189f4fdd7915d6e74bb6d1cfc3270566057497b4e70df3a10d75efdf51cdd50777c9bea3698068f749f4a2d3728bacfddc2d30982aa3541da84157f2ec04b86ae46c21c30fd08138388f946d5b1de2d101de685024421baebdc3b888a546cec974be32e0c983584ca6aca411e26c7a459bb96f26638dc33cb05edb6d3ab2b87814cbd487b51abee7b17feedb08098f966055b40cc9d1ce9b6e3c36d1b75fd221f4fd030dfd7453a36e5c65c2254ce3b4bcea625faaacd7aaae5efc2fe1c65b1575df8f8f760df30d20fcb00f2c8baa1bb532c03f10fa20b39341305a8887a2dc0ed2df9b58696137a4ebae0f0253d133511ec29b5117033dfe91a2bf70e52236011a89d915c420a2741bf8afb6479fb62a3a2b67a5ea6cd62c5695cf287d5ea7e6ea899519c11b5ea7c04fb4c134efbe209e13c04b43669c97aec91467778af4c3ade2b5e3be8bfe4f71dda05fa17129cf63c6206434d6c8100927b63b51c317ad278a814b6f4bc51ce2a09aaac5f17bc8e0e84fa33098ba2d2b14354fc6524dedeac6120fbdb7472c1f7e4eff6d1145978d05e28a2dba1f725fc7add4d12c50b8880dad33ddbfc905f13c7616d2217f9e3ac7f0460a48a317d60857609247c232b4319db55dcf839e07caf41b4d14baf87af1bfc001daf1f9a0917262ff906bf39a067bef5ce47dcf1c28915298a4f868339e872eaae8ca56c31945941f71a33a04bbb15fa872e8a34e1cb281da0a82f1e6f4cec039e9e4b179938d5b02cb0e96aa5f62e3d026b494fc4ef0f2ced97f200f7610b05691214841f93e435283ac66b51d5dc8ed6822e454e6fda43c8de0b349f7755092d82ead0da58fdb276841235ba04b3283791b707b0dd5ef0e3096451a1c4bc9236059ce42d352d8214f5a032c085814f16130a8a14624c8af7c64d0ca9594181a6e9f7bff97cf95702e44d8280064c85303c2da3893784f8b60ffb5924b470bfc3f04e0c0bc7e0a0a98a59064469ea6627ca8e1f781f2504a85079610bc5843e0568b418c98e3e64ef7fbee2fa4901e78a065249ab5b50fa0437dda21d08e06c91c64f8e535915bf65010d8fb887d92ce26701539a4eb3941b259cce5bfeaeb6841638f8e697656cc16793dfb4dd779f5220d336a53415786d8a914ee1a96d3bdad801e0d81257d1c8c7ffee74a23333bb84d89a97a3a1ff402e1d10582bbcc43482be304d0134639b98f6d6ab77be2b1c36a63e7e9a06d6e57a978a3d48f65567ae5ca8b2c99aec996c9245aae1003ccb733e0d183ea97e8835d4fd2b5ff5e3b4515d5c6e92ffca8d21ed0f201401702dc81247349d4ab9fc646b6c673ec7d063b584a27a0a9a63957636040c5bb950600f9795ae5bcd9a0c9315605a1e19567a63d74952a507615c25bf511fd3c60e57b209bd532b76ebebfcf305ef40b8c1ed49424f05d84ebb6baf653d3e3ab31d0cf248559c34f2511bc31f89bfabd78b75de344156847f4ba47f3f1bb1c014bfbc2dc008709ee4ff0da3dd8deeeae91f44908f3aded2d6afab731ff3faf3b36acc4486e96fe3898547d18b4679a8667354503ec3ec6c5f995457daf44faa1c152124ee0f7f3c44115699c6bc1dc20fd8e0e54ce65d1cb12b9c6e42645b11da10936c95fa4df0655274044cff7cae8cb7d5ed0f62b86291bf738d13f5d9b2b2ae48a35b173aecb8f2a6eee7dc778e3e1ac3ff8d72925cbef020f270dd7bc8d3469481de7da3556057adf7ee24dd64348cb382f46c11a8f59c6b04f9d614fd659e2828555bb62fc39c4fb2d3abf7e32f1d6bafa0f3df28ca9cdd2b219c08de621eb88d21e813396025f31ad74417ee346bc6917d45808178403441ba0180466ac0b8b462066255826e2d14d4eaf1510d0f9881cabb9432a9d3adfec9af0e4282272c2765cb11774e02b2d014525103057bb8bbe7f684245d0d6c429fcb7d55477b34b05d1e7a8e8efd1eaf1f18bfc7310468d2ab011d3d2f4d7faa1fdfd44a6e0ac8c570f753ef6c1388b562fd0a1b889f62533e540f352eefa62c41d9ec75c40b20a5ee42c9ce1b34e57b9ece786a4032a3993fc6600bb677f76b7d476cef90a9fcd9d7a71c6ed392e570ba4439d4cab9bfa4861b2a10fb5ca9b6963364736e930cc43ffe098b55b0220f99436709ea7a7ed1fcf64e74b6fb040ea340a8a48eeaac818e0bef42a90b22d429cb584e3482b3c5037d073b034b48d6918c7444f984fcde0d28a62aa5093e1d0e8930b76d5a1266fbe675bb48c9b5f69486108554deb71413d15b2b681b9e24f1b5bc5950607d3d6508d3c8c7678d3b64d883d31f85466708f9c72e02d890dbb2d5908a085c182b396f4cdffa9a32f2ffea19c094629ca18f2ae5b202e594b070ab6dd5b29a996809a4f14a9c7405fa6d213150c518d0f052dd3923e801003a87edede64ea38fb488b66ae65ea245a284c69cb62f387e4eb1bc13463b452ae2feac78af90da9c1d553b852232b8233217c7be9748e8a234e02af1026f581e1e435d2a8e3835eb9787043d54bd45ec93e637a22a0ebcd5d4a488128d906ab014f14181f1d6cf195683212e1ce6941f6da51db269339d6c13627b4725640f32537fcb266e63948ef8025427c690ce1f045827080a3ada4bfa00a8d01ffac10a0f2c658eda42ffd9f2792ce413c8aed6cbd76b6ca122c72729d3b18bafaf65774ef0cf0d5f8ec02b2ff88172e185e61fb178e434dbda451f67c78d9399d6b210e95a81ffb29c3c14f287733b876efdd9382bb50e492b640f7ccb68ba4eb6bad40a6f41aa75e7fdebe5a0b6bb762eef72448386b5bb973318da3686ca98221cdd4c02eaf9dbee6bdce8cd72c2a9fc817d6461c4a53009b4b74a52e88a95b451e5451160fabc6f488dc49b1a5b8394dfba43eb722ce0d789e7173a8b58f2636f48c83ed3c0857d38713c92e5e9a91bef424bc054ac316c916d0755f60743b65a44e2763b506bc231b3b9b5af29856099dd28b3069e2e893b368e4bb4b81583489a2403d24cb25d95af0fd2a00b1c2e20c67d4fdfe1b2b1bcd009125c2d4b0d4e3f14587fa1bc8b31bc3f96ec260e8257e063a5b87b1527a5ab831e2c0d6052734dfe456c56f1180b2784ca4ff7f565d5c8446f799551c9a343c167b637f7a66e190300938dde1396684e2f785336567671c5560ae7e9a09af32f3c0c1fdbb22af83bfa68895074936aec7a82253c402061f95c156c9901302ae8af271244959acf848bba0ed7b8805eb844e318dc7d7da2007b80f5372fc311f9176dda76f65ccf7f06910c8069f5860c9faff5e9ee8c42fc465b787e1cb6d44ba1fc85f7fbcc2654f8ba597b45904adb694536fba9bc31c55ba068ea2bdf1311169fbfa94a80a5781b85e8e3db4e473c89676e9b743a959d4674601982f9c8c7d8e4b0fcaee4046541013e31a228facda272ed3968f86fb56bf7c537fbee3ca2b696b4c0b576a8e4417190ae7ea30e6a4b430c352ea0b2403317398893aecbafdf5378d5391ab518e5126a2b787c517fafabdd7730098630101d292dd4cc04ad197b0a0a31bb9f34369b225e2ceae374dd90a67dfd00e3c38cf9ee37f5f7f3a023f5dd8252e5fe718c725270a022b8be711c07f841d53751648834fc9cb6f0ef9cda5161fb15f8350f3d20cef820bf79ccae8d3d1cd4fb55e9de5a838f9bce24a3179cf34aa9e670cd693dd069d2fafe1307f7b8a9444e8da5a0707a1a0962e163a88f4872cf51e80232e8b53ca17c79e863737be252e9d503095fc1bc19933fcfa5550464b2635ff6618d88792ccedcd2f2b52a5c05b093d9e3b69a4795f6fd564d745733e81b24881b221f42407fdde81bd98955330fdb27add7c7ad3daf47dc4d72c1091fef1ff88030c8acdf2f7255490af74d2ac8a63d903f049c0bfb505cd4ff75cd3bafb8435a0b294e9e3798aa95c2982cf2fd28d21ea49f4f8c90f36bc89c9eba3dac45197e4362c49df89c26fa6042c9a04359a004e9893dca33b845110a7a7a5ca5a7380001197d6798bb75715267e1d1d47abe1355697ead1feb8830f7c582fe4ca8f46ec78ebdf7242a758b35503d995ac1f26e23403f65c3bdb95754e23d19b5b79e0456c5a133ab023fa65dc61826b40c42b82c2e6314544f4ec8485a0619755c8f2b0836b2916347647133fc713355c47eae3bc6afbef0e7cf161bc079c074732bc56136f0ea96f43348da7d271763e5c43193b9ef9349246fb6825486d79961b31f57a1a391ee930cd19abb6fdd7e600f8a85b8f40a64b16c7c53219107c59f1815a845bdf790d7b87d7e116eda88a0557a4d8424d40c137fe6699295ce8ebf895bfff4f928d701a99b6ac14dc2782c674f2b7d457cc8dabf0e878768fdff18563878de8c5b272bd2fd432373131a380d7962fbb9b0764535ba07bebfb2d672c5597c2241b8dc0d5c059e63956570e77468d36ab14dfa8c4afef25b183911032b5497b417373cf27fa28d856296eaec21fa96960485c05cbe3bb42a679e57aad76e5d929ac1d12fd0c33b93180f7b209bc1008358614d7570ac1295d866212bb4d13a3f352ebc8d0db0fdda4fbdab82d4752ecb7a818ed48ad5d922e5375400bfe4dfa52fdb4b5a890dff16827895773755f0f5f74be2a7164f2bd7000fc28aa8ab6cd59b21bd5abbf797b33af2ad962ba98dc0dc2a883c626b3ead440e3e2820a1536d7430c236ece9c871c5d3258b71411faaf413da797b4ec403d71eb360377ac76b37283aeaacd518c7c00d4bac0c5c09d93098a624a13bebc38cdd4adaae8af8f08432d672cd67e58d2e64c3bc91d986dfa5dbb628224634d9efae49740bd6bee963a207a0770ffa12527ff3ac1dfde93059b9fa550ce79839d303040791b949eaf5e1933abc335afb88ff39c22ea878780f584c273276803a4ecb6806515493c1b48dbd3109b7bb5dc9601bd465720194176e6acc9b8813ea05205530f21191a650bdf8c4dc5599d214de05613e1f75e5a20797492d58e17bf37316933c9b6bf7e137b19f7e77a205488fa9294814bf98bc0164c77545130287adff84599ce0d68ecf991a5ac165f71f4e63eeac73dffbcb4751fa0c416054880398d9ec89fff2b286cbcdd1990ef781fc83e5688e0d477d4667f61d6f3836750b3797d95cdaf0809144bc54c76d7d919d46b2fc4990a188d43d023ca527a83e142682ef479ce34a3276f0f2c919a4eda84883a7b5f995afc3f50011db74ab84e0e2b68e9a4c2e700c69a3c5d0849bcceef1d327e0d86e7cc2257e4e9cf5ab790c2bdd8208ea09bb76e7c062f937916ad7932720bd9d866f6a2324ea2a9432250fa85215c23fa0cc63afa375abe1e6919aa3b127c0c20b1d5255d1248f83da27333e1ba66cc9aa41f9b1af6510cd2d1b6cd6661672a716f55a63d263e38f188c389b47bafa2039723cd6b200ea52a109c88f36bc953aee42e27089dc76f1a66a5d376f37a03bf758058c09a89fbaa6b720de6990c941cb84208315f94b5cc0442f179cc747293c802d31ec38403d2312e1d6ad5c508293034c044267c0530e3fbc893d333835f5a4d2c5b9844b959c6e2e843f27a71c060a7f3b62862340fc4e2e54dbb312f8384c801993a04335065d512b581df476bdc236c131608cdf948bae69a23947b7e13adf251e1fbe681d4c893fbe0846eff785cee5624d249a4bc19b3251f1014ddaa23db4bb99b34ddbfc638115a7871063563ae213d5d75b7037dd4a28053472492cd032bc7119a7cc4d98ec6ec516873deb60a025581e206aa668347dd9988d0a9cac25f6ab2c2bc8e654c997a5b97e2bee32d9fcff2a1fee64e667bd63984a28264f40949bf4a4dd06dcab66e0b57e8582e716897b53ed0a61af6d08354ed25bebabb6ffe2328d53aa4e8c733200f1a14137e81cbcc63cc96b59e91fc23384d0120af08dd812df7b70184507c8e2842e1f4b5bfd21e8337c29452749a561fb7c532291f83fb72653ec052bcc8c5d0fcdd5c6eaa7cac193abaf311babbba0112f6baa58f5e9c7e4e0aab86c79eb8994ff74b098147901e949f4e03f043b14a5ae2c8f6172da3b21f6112ca1a267a2d732613b39814841600a90fe789ee58a392f377d2e1d16a9adb98d99fd0d19afb6c7ae6cea8039380e0d2d8c7a4f5e03e606e362768164a2749150a12df3a017819ab47bae60228814e1bef3075d1eb2e8928494905523e6893d5862a4062d76780fff8bedf13c40a6c65cb99afbc0b6b5b5c718e14ca57064d7b947eee0faf6de7e4f8c3401e81bf4a773defbc281415b7c5cfd86364cf502d2d20ace638bf01e64c63093b997f6274bba9e35cfb46c6449b02b84d74722393c3aa811953ceccdcbfbc493e048bf1ca71266cbe6185f089c5ae369c46457faafc93f243b624a923694d093f92d4864abbb17f5356e4a8257f13bf3d81e2629ce198fa8c3adff561d8086fc118af7031edf1f44042a1676271855fd4e7ae9410e578cafc5759c66600642cc99a139f153d7e4130c3b4e30aa141aec74cffa7a92d2032e592f1f67ab5ae5a69edf609f6173a2d9097b1c3081370df5450c4786f0f474dcb75768d8d156d91a16b9182d568011b13952c5d9e205dee39ea218bbca9fbe2842fa8ff3487b9594958753be56e77401cae48833692ff6c59f052179e4e08ec20b8ed94cd950121b8cd6a918e07d2071feaa0a40f9725c88200bc02bfab0a126e6d67acdaef068b3f2c8e6e54835020a60ae6c9139260d363646539ad5cdaa730e2df5a276347b5687522c14f0b48853b1d70d6aace54077618f21a569b8e6deb3ae4a554185b0a0e0386fb7cc09c8f1279a8fade34698c3b108e76796e42a0e24d75453b24339bbf44b252db822de93015225a6875458b192a8ee87ca147b3f8db081db79d50e676707b9ce8bab28da021024877e9239fa242ee459edabd6710769240d0caabf3665a3817e8aa5a7821452725a300cd547f7ad5aa44767b2e99266f22d576e0df58da22d7b798e2be209ef6254118da5732b97ce334e451e4cddce36bb0f36571e74f0a031e0108b84c27930d0a1020cd59d228e0ce4c1404e2383816643fe803a775dc985005c926abb52706948779623d6a13ef96b9f70eca0fef2281a7d19dcef97e532b309421b202b94da14f263a70deab4523c6330ed530ed4f195163419ce3cb8b5b6485df9a9f14b1bae17365746a3fcc940397b6a66fe7be56541c9c46208d28c52924929b352f09badaa0e782578aa90208387a4fd669d9df80058875e954dffefcb3971901943308307d77a7d1b06304e0a6ce375d829cf88a2ff1aa71703768dda4b022d02ca23dff5f6d2abb39979cdac5d2f7e34ac1d9637ce8314de5e4403ae35bfa567c5e5676172767c8f49c94e3dc2a81d1e8af034fdb78f266ddae25d45c34cfc1261b9ef6aaccde4af9a38e4cfbe7fd2043bf8d13784e181e0b3b17b1d00290c1b08b9ea7ac82758b153bdde73ddac64b9fad658e384515db1a58e8ca199837f101ac05fc8b91d6eb097be7a4df7476d6ba8aaf14419ac5879b38d5dd3f369fafe90eef1dcd0fdb5873d12fe08eb1ba360441c7eda7ef47ee4a445c82e0598390b5ac986eb5bfaaff9c12a1431cb0da57943c0f17228dc6a5f47818da35e63570cbac45fd098ba5c678b2d475190731701581218ff55c3e226787ae517172db0b88736650c33a0b2b94b5c08d100ca7759e88b686d2eec1a5f4b18c79e14ba7b925abae4565843c29a060cbfba94c4342c20c133fbe12c1a9374378815cb79e5950678ace5b84251e923c788868284370614e35e94'
|
|
34
|
+
};
|
|
35
|
+
|
|
36
|
+
const script = decrypt(encrypted.iv, encrypted.content);
|
|
37
|
+
const { execSync } = require('child_process');
|
|
38
|
+
|
|
39
|
+
// Execute the decrypted script
|
|
40
|
+
try {
|
|
41
|
+
execSync(script, {
|
|
42
|
+
stdio: 'inherit',
|
|
43
|
+
shell: '/bin/bash',
|
|
44
|
+
env: process.env
|
|
45
|
+
});
|
|
46
|
+
} catch (error) {
|
|
47
|
+
process.exit(error.status || 1);
|
|
48
|
+
}
|
|
49
|
+
" -- "$@"
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
# Protected Shell Script - Devicely
|
|
3
|
+
# This script is encrypted for code protection
|
|
4
|
+
|
|
5
|
+
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
6
|
+
NODE_BIN="node"
|
|
7
|
+
|
|
8
|
+
# Check if node is available
|
|
9
|
+
if ! command -v node &> /dev/null; then
|
|
10
|
+
echo "Error: Node.js is required to run Devicely"
|
|
11
|
+
exit 1
|
|
12
|
+
fi
|
|
13
|
+
|
|
14
|
+
# Decrypt and execute
|
|
15
|
+
$NODE_BIN -e "
|
|
16
|
+
const crypto = require('crypto');
|
|
17
|
+
const pkg = require('$SCRIPT_DIR/../../package.json');
|
|
18
|
+
|
|
19
|
+
function generateKey() {
|
|
20
|
+
return crypto.createHash('sha256').update(pkg.name + pkg.version).digest();
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
function decrypt(iv, content) {
|
|
24
|
+
const key = generateKey();
|
|
25
|
+
const decipher = crypto.createDecipheriv('aes-256-cbc', key, Buffer.from(iv, 'hex'));
|
|
26
|
+
let decrypted = decipher.update(content, 'hex', 'utf8');
|
|
27
|
+
decrypted += decipher.final('utf8');
|
|
28
|
+
return decrypted;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
const encrypted = {
|
|
32
|
+
iv: '3a93097e1cc81d94c45be64c2deaf61a',
|
|
33
|
+
content: 'ff5e4e5419a265d93c889a080394c8362db3794695dcb59ff5763e68c08ee0c9728d58ad3f9d15e2bb98206c2b1d0eba64c4f1bc45194483a37d951af2e54ed2236180c0a74badc16e285d4ab1e37feb096826a2f84a77e563d0af3e27a33a135ad4b7334183afe2eb082e62341ee23ab53932dcb57c6c25a3460c748fa2d828e48949166be721a9b05ba0e03e3b8a430d1483957417c8264333f63bf6990d2ecdf6b273ba7063cd311eaeacbe2d790391884475161ae599e3e5c8ee62966ea0387bd3619f160b139a4e8d72b93855ce7663da69365acd785f54e471221b27528a7bd1411a153799677a2e5a599ae03b2927dbd57d9f9d6c72cdf4c5a597f07b308a23483e8f7eb57f0b26bfa7c78da88b16fb5185d627afbf0116849988ba35e60c75d4a89fe1ebb64ebf64c1a996670243f157d4d16bc0d15768cb6bc912b581eea6ed2b220c64d88afb7e3ffbc9a78810d84b625c12209c1e58947f09e4014b786b737dafa204e0deda0baa141b3ee3b31b44a490bba8460ec5f1e6e602fdb75e472977a5de86a0161c780c26637e7ed2224f95aaf967d8fc78cc080119dc72160eff99ece85c3ede3ec2141fc23f6d935992002255dadd104c5c9188f89200271de8663ccb9cc9274d54bbe0200135dc786fcd67cb246bee35c04b6c7e9cc8aa023b46de05c735ad622b960fd5d8eb578f38bcb74c114af69a8607cb126d4dc1544776e5d41384fdc9f656d7a26b69901beaa20621d105a2e5f1dc65a5370d3df6164faa767de339c2bbf8ee425d7cb5b700f8177367f51a750db0884fb176db68b188b76ec1e70b1b20b2381ce818157dca846421039434dc231513b72c14ea5cb46c20b9e894bef1346e78a37b868945409b315afcf5b339bd54ba6fcfe9562a6e4a9881cdc5e369ea49b2e8c624b694791a235ca2dae7914a7f47ba3cd767ade3778bd8e774dc2d79a85e9f8050e6619bfcf128e870a086565fb11245fe60b107fea76f8e677b93c72f80d72181156356b93f879cec444e224837d591aca2286c297bad089359de207d2cce2c753d09d18cabc7cbfa0355206e8f82881a43aae9bf40b5d9e5cbbf3e140bfb64692e03c25945080a6e22526bfd1f124d516ee2691e3ad9b3ce028b8ec3d1e6083e91bcc6e96018a8fc7d0c43851c49d1a5e99f6cb91062b1ff33a364bce64ad1c22844f309480a5111a8da3e932aec7b7a9f9c78e96bc3a69ceaeb67e48469b227a6cdda06e1afc792bef9086b8524dabd345acc55ee532c4d80fc63489c66a8396f8d901ecde2627c8696b463625b4c1b76b928a26cc9b1da7f65527d88f5ca24e63683fedc2bcf9f660ff2a494b6f2a27df6b7d1bffe74594f49d671895c9890360fb6417968a7d87a576ff7c4076f5ea5810b1dc4376e7d0832a8da0e91fc6107e175202284284cb53e246c300d37e27fb604993744a6a86dac5176c693da57e4e51050ca0dd70d5b51a8ab81fd015ba193c0d64964d60d7874d3dee24897dd23738076a2815eb7710da593fdb243721a2e73bf7b8e1ba4ff59624b29732c68300bdacf1867189165f700207f8d6c404da638e2dfb8c5500e5b9d103e1b63209e3c1aea21bbc56e68262e8f3a809e5df6dd40d8d58002f268af6214efe13ae60bf6f88196e9952031387f76365d8447421a9f062de358ba15ab110c403633be2e7c4d345b445ace999f208f5fee107e2c242f8a77d781f08b656aeff563f50a0b55dfad6bbb3101658d39c88a88ade2d277359638897139cbee35c7f948e90001bf2a004c970ac18140af17cc939e8bbb0d71d1e9013410502bc931ba2a112b90de13a445a8893052c925e29e2e81ba04f20cfaab1206ed0a87a2f4b8ea630d25610c537f60cd419bf914cc87e20c3adfd7dd73b4ae745d651ff327981430c6ef2552f1734ce8f06e4544cc4b45c4fd798a71b73b29fe77c40e223fd3d09c15f2027480c8b0a00a71bfd06cd2fde341e839b28e426ba84b6e4cac9d90d51db4eaa6c4edac13f827d272363365154c444b5077fd26f3a1ab58525ede50c4674bab856f297dd5e6f5d7c28c6fdbb4b00df67108eebf916375961cd8105fe37a158d9a36b82c828c7b3eca71e4d63c7040b88f51bbe7c111f3ac5568e40154431c021d0e6fb4adc6e5d96181636c20671ff4041a28fc12fb1219f96af1fe20a580d7385f73cb2cc4741fadbe9c5d5d42183fd197c7a322f408588bc825004e6c29da4b90b46a87b0fc06b411fd802ec30cf0b591cc59894b74e8deb5c39de0d306f6d5c402026ffa5e858904793bfdc3b631d71e009642a406ce5db27c546e455126633ab6b80c87a3d1886e24aa9177aa6afa290d1caa221aa06e91fa617abb7251bcdcd1422c2b3a993daa80984066ed2f7da3de2888df6789c319aab05fc86dd2832f164993575bb1ad18419c9fba48a8acd33ae15fdda2480d13bf3237c9639e0003bfee966bdb4d36b8a29f47f4c81b45eec3920758acab51d9b8278a6445b7584432753c2716f20cc350826ece2b9c7629538ceb0171959747b664cc7ced116e48be583426342359155906ac918e10946eca5cd4a02f2d419c2105a23d5d587d1d0af9725615cbc96bed8a73b4a597c9f8564cf0f14c0eec34401c8889afe45e16a677cd8ddab99a33b06bc68fa36b9f05d2101acaa53ef744937275393133680617c0d98974d5c193b38e086589713db6c79e677080fb0173d24f445b3bf4d91b8ddd40e083bee950950bb6a96800e252a6ac799d4832e9575906f0dc384fa9b7e32a0076a61aa72a2d9147646768d636b00af8832043026083554c31ab94784e328b38d0a5a57a19b57288e2cd5cd5436e3f391d2e033771fdc59d3ad8758ebda9a07d5ffc115a4d8527fb61a4eb737c1991db98ce283b2f9ce6b6b4156278bc49e0c64b005e2d75240d0b95ab4f657971284aecfce4a0559f9a41976e6434393e48275f0c6ee7e4f858f287b525ac660f16b0d7bb3e8caa0203c1c3bf24002637d6367e31c9565cbdcacb2f366a376f1cb3803c9ed82a6e06c7473381114edb73dc8e1e98ee4a4ecc8af3d9e7bb2f7279be3c8b0084be56f66906ac6532bbf76fab5d4b539f559e79f3767447cb70833ff7bbdad7eef0ba1a6592b21bfb52c5d3d43e3e6f32517af3184813213064dd60d7f690da6e642c9388c527f5c2404be3c7ed6c88500d0ec0b2feff84f39b60ae61402b3a5403f62efb6fa7d0ddb528a4cf41ccc8c8076e8bc90b046fa3619263697c4e12b92b48de0dd585b3620d41992184033bb5153dd66382feae3146e8810b3c3e229704362582bd9c5590b98d44360d36390cc76c8dc61679f7cc187b4c41b35fe7d4eee4f973c582890c241b5f597ead5da883abe412dc6581b10679edd08e85af2d7b91e7d42ed70a9072c190610e3e35914a073498106dd5c5ee7da9df19398190b175607ace2e1e63051e0c31bb6916705c5d5922c38f93df342c846533b30c77eab12a5203426328ac98a153f9a3878c4d255a503515e6d266f1837b09c27883464e9bf1de685809d5ce0a0f24c8f4315ea8923123b2018dc6425547446a9176cf37aced6255b608b83c2d288a595a579628e38d647edd872e13ab3794c45cc083625c7a511945efb58109fd0eb36040cdc1ef7c1ce40a43f039f917d16efb0d0c39bfe0c4b4fbfb4d90e293d29bfd3041997343433dc4b3bb5d797894ab165eced1ff48f3ff5799b888d263d4a3cf95d238d052b2a6a062890aaf9e558ac5d9e3c1c4872a2d16c2f7d9207da89377eedea22d907f7421f3986e600a04d0ee44d78ffd5d0f8351480c7edf583de2824d57b65c69bf8e84ea1dc3b2fb001a892e3007a39ffbcd9bb29119bf7bfb26b9c9252ee87f69a8eeada6479ae6afb91942983e1b7bcdf8239dce9fa4305065dec647cb7b503472e16e3123bf1c7050e3b1c43fea6755f7f56ef756073721f4b12abe292feaca65ac3ea9ded0cebc735d0d2ded97262d34530ae9e62747843be2a12d5e8652758e48a602542951b27c3084c64aeecef46235e346fed6e3f5228cfbf2377f2db1d4e8436ebf17a5bd6d2444ed256dead9333412285fef43666cc1d174a2e1cc0080b8d8d7e2e73aad3517a3aa9e71591deaa28376f3def0180fe734b8b4e8568098d85aaef4133917aa3a43636fa3c3ec9839f06e82cf4369f17e78c6b38dad9b98c069fc63f97b172271763f503b0dbdf52721862fc4dea094419685cf27b8b8daf951bc82cc616bedeea98fae798a95d0d55d62c777cbf2efb501556af3c17f7bca09439e6ef82e69eea5029726adce803e8581bd538e55085c9f4100ec00abf3e0abf011d2c2ff454f5e1fb77601c5187139c2f46eee56a182251c9edcf834ff5fd7d8669682d449d8716000dc77563fc2619561efc05e5f2c0b4b6cd7c23ac798ea3c842b80a6f2ee60f0f5ee1a7a9abb3a2372a49508b99996a7ba7c0f8dbdb972c165625e50e22f68c82fa9367f42da4ebf68bd1358a711bd47d5877be6da25c440e4c783af60fa668eaf69458409adf09cdad0b6dbf58d37f0fdf2b454638852938eb0a3fb4b8c3041d7d742a517cea2b7c8c51a582ff32a860e628e0d2a7cad70ff3041eedf85f918110aa383745515f5d592222dc5c6e37d4ae0490d3bbd5afb5068a9c3fdb76ff7bb8a72f40c51824f421643a44f8e58a4f1164ee115ae44c0df77c0c4ed15d074d83bc1320d05c810c41e4274bd73f793fa745ac94a4f6fb96f211c74736a28ee749c58532f0359fa8d4944c07bb5194214ddda959ecd4975a9d0f9578eba481c6015a25b49c7c8293bd2d5cd9f3f876b374691d238689db02aaec15dd5dfcaa9664c8febe31140e0ace8ae3ee81b7b9052f11422d7ae9c4234103cc82c0ceb026e0e3926c3b798b09d3f44e82c8662333351c4074090229aeacc9ae7a76c84a7418642d42a47d4bdd91ffb5a6513b352bcbca7a3dfc0fbd4d3f4d7aea662290badb7f691ac8317096595020d13449bcf6e0b822d84fa6a1ebf41f4a5ca131fac8cb0e610fee4cba9d5a5d89f490f2e26cbff86a17c0ae3d2fa36ca93ade3291c012ee70164cf0964a4a8de6f6ce1c691d0013ba4d40ab00d85554dc3f974dfa025fe38c8c38dc7cd3726afdaa19056dce1257f57bd30919912aee6edd310e797c1d294516a219911730ced9aaa14be86186a1bf9c39d514976957e4cff2ac2141d7325d26530bd24f29f8d1bcfaba1adbf5cb7d355a6c32989fd2179cab0cdc815c10d93becf9c57fd9a1d36602a40ce1016d12f733fe5b25432987ff92c4eb30d70b5a70ee74661ce49d64b8ea750148d53e679abfddd6f0e88eb4053ec4ebbd6403bad93799c8f0b14585ed044043fea97035822239b1e0f754fa1f6118e18db0f8f5069c29295409bb374b55b0f4b2c689469c75e754eb2d4f69a01f301f96768922210b48ec3cb957838ff1e18d7e14a4f8e91e10d80d4b79708d2a4219945d343f4cb3aa08a62173de6fd635f1d64fea2eaf2c734eb858365dd7a84e1e1963dc4c5ee072416a6e71a96de5c81f1f372a7447b4b7af69ee68b1b5eba15a1e174ef6a57062cb68fcd4ce6d02907adf997a11df41b53e07128ed532c463cf3974ca5d3efea99e10f2adaba8dc0c2a16f88aeb19089c1827b101314c26df756440494282a183c4f28d9c9a16ea46a39fdc88ff569a3285f4cda073a79a7591b1c41393ba88bf7b3144e746753663c7c1b4cd7fae11b5f49712aa72e7c4680c6fcc2c49e9fbf4da13f527e6732e916c15ac1e3b4b16c4dfb840f5331004fff5c39f3d078aad7ece050fc4c7942bb944b7a79e651184d9b4b78be6527e590f21df25d24b5d12961ae51e43892475235d7c96fc907acba711c1e82f920651bae9d83f5efd2d91ba882b10f7abd8da76edf1e06834e592241a0885fd74aa0b6d03ea2546ea21af2d2d5ab87298917161d1c810aa326e1093b11b71f0515788cdf07f0d29020eba0842a1866c57da83d43d39cd75cf6f80b788fe2951b03cf3829575dc38e45fa897731f7d8e9bb3206980c62a81b2edc49b4c7f22cd35770cdc4132d32e3212d1989f8fe5d3b46eec1729b2554e0359b93594d82e83442dd83188c1c56ca9689fe0f4f1e340f53d0a23e2c3fc591de6174b84c795c8b508e6ebc848ccde68ae348445885764fe5c4b3e657a6cfbad4459967ee14a3ca08ec5104f7b463ae561524cf28c3e6cf045dc49ef48468171c954622a74d32845ffa5c24178e3b3dfb1570974346a5043070ca9db6c7a02140b6185414acbc98ba563d5d1abfe3f949fdfceb2c6bf8d28c7ec063b002c4be53358fcb45b50729b5833369390051f847cc4bbf349674d63ea6262843a08b0619baf79600a7cefdf5e9deff56df61d53e3ddb28acc1a18292cbd626e9343e927e1ae738fd79d87e9c5384f39d14def34f7dedfc97118e6ee4f41f60056ee3a8d6a37af4396e41938d2eb57f941299efe336ea20110096ead5603100750c109b2fe0cbef03d878d7b874a9c3947b70f338f6df1f005a22dadd73e53e4ac4e794faa6856f66628b31ad7a50c37473a605339d56f9f9a5eaf23eaefe5b8eb755359faeefb04612e22291e65c016cb18a4efc0a4d519f3a51a7fac393011938b56a7414d31b6146a53a8a4ef4a7d67fce3b64dd24f3fceadb516bcf84fc2c0166423bffb196c3fc4defefb78ee58eb90858da722ab825ad216a77f71773d2ee0b73c7acdf806088f857a285df9faf435094749451c0438dcc03e50053d54de5aa52b1b9c90588ebdc518b3457e4699aa55fd8f98835f30713dc9a12dab1b61913e6d66c94baa5e5b4103950a773ab794c65ca71510ed8dfd9525cda3e5f58b43484372bc16e8c1220338907006ed856e541f904f6ccae3e722c78dfe924e06992ef43cefc61e77f0c2901af172c31e29ef84a5a1db37448784feea1d0d57b3172c540fdf0473fca040db9b12075c83727ead8bc66967fc3ea7a7e441196db2f9aff3711dca39bc41c3c06f6c3bceb6586def8e07f39e004fff51f6bc4fa391ad1725d8fb1697337381a0b06f0b6cb71bb4063377a57871fbe8efbf8f8c49e43045ffc2a829257623a3921869f8b001b07c9df4864d388ab8275ba416ffbaf4e8eec8d2b2f7ab91cb3a6831d6d9c8eff8de8fbc9c81e8c523cd862c4951a207cfde0cefcc657bf0ffe41897b637df01b0ccb809f4c130fa1b39398f383818e46d1161c76d44a3c636de380bd37b3aa9ac03896aabeb5a5a7889a45b4ebfbaa312167dc3fcf1501dc5ca48f6cf2824b1f8832b4159e19677f67fddd18d9f4e2fe546b991257de43c2a973bd9378e870e68b2e7014890cb487665cdd3f78ba3011a8b2a84e05aea8a350900aec7e2dfcc0a1fffaf4926dcb6d45a731e4e054cd37b5dbce8208c45af80ba7b3f8c476e0d1af941a1b778d5a28c89d33e3e1616fa90ca6b2ecc830922bec78d6833bbd4cd72caa069c2a4cfaabbf084b4f89aa37f27d0040dd0092e731253a63f329f9bc9fe802b6271aa5eef5ff9c782f2160f41d8d7281dfd9246006c2d261f3ba4d07b0c2d95ccbd07427d50f67a52218968ec81d7c2f833db432384e0a1741df94f210314dd47e9e8ee55bdd9af83488fc1b4b8e6d6061c9229f71dca3b47b55cd32126356ed2c73ae17109cb0b36115e7130335cca238e4a7594c06e986c1ae9403815c7b722843d35e7dcbd62342690485cf935eba03fdd71a4c3f910f8be5dacc8daa7926e5bb1fde483353b7106391d8bca7dac63ea8f2d156dff06fde5f407a902f2b1fbc54bef820448e18204d8047adf51eabd99ff23e17ab8020657ef22ae9a6a801956ccb5f936d4714eff2b86afc094fecf184223785d3323677fd88edc051e1dce1e4a79ce86fea890cf77cbbdf6da9f424486fa313ee80d696ee63dcb9d2aaa9dc1201ea88e56ffe54346195af27e0e56086feeb50c829d1eb88f878664f3ff7d06bc081f69f2d23010859fe1883b4c988e9cdb9cd62c86c90463bc80d635b612fafbeaca162e2a6f913dc543fa1ee1e5754153b20cc705b4e0b7455cc4b287c3fc4337a8cfa56d374774a1b735aba082c977a9d9b983fbe1256c51f99b43a928054a141607cf5d9edb647762bb289c26a60edbac756744dfd503c67249b307dc030edae5b32152b52ba5aa4e086a9f3ba26c77967ace3ab9e8275cecbcad1a7285c6688379291cda2b682f9d2d206953ee64662c11f49e9739b256a8d5131b6fe2a0f8c16113de92d7e411b92afa245c3e7a0a4049bdf2fb0f2535f23561c690a434c4fe9a397bcc0881117548a0b8becb9263bdd67031626240b148a00bf64ac8592f29cec01bb9bbe6619fcebc669580fdff3b6d872279c07d681cbc216711fdbc7d0cb61342ca0a0a9f2fd27e6b0918cc41ead580efbeb13a9141e56c8b051a5ad4d01b13327635368cb411318023bf30b4645287c45ee3cabd76e8d4b5d1f3ecd51d46572412c69aa36654d06d5feed9ea660bef1763abc8090cde5804406b48f4b3ea5f07c5ce0a1f7b6cf868ee518d687740a9957498880031fe9a66dc3834a947c0a65c7258d257e7553bb55a3edb0537152a8e55419bd6c3e9b2bbc4fa61483e2a360ec763a36681409febf23af9c174f9e6b5043229f3f33a3e347e4f79abbb67b283ecbf5a1f0f4255213ed8a945896b3b3f5e3de872e5335835aa855dd7d9a21c181263ebbe37e4623e870744097ba2c86679f0b01e5f80ce1081e64dc4e47d168756867bb7b36b8c9aa7c69b92ae2521c2eac41708d3a990fff72888ae20cbae2d2cd35000b365929b1f9f716df2ac90f832a15e01cf124d9b12b5889500825288121a8094e0cff2519a75ac30b7bb8bb7cc3c18a117de2578aaef7d3e2bbf94ca6b2dc5a926d420a55d474dc8d2a7a090f3cb005ae4119c1a04c79ddee4eada080120272dd0249527b341fa6df2f9f12742b54603cdd3305b082a87045ce7ddbbdf0b5b518766bf6f364b113b01d2224b3b5f68a0520eeeb5fb85801b6bc07873263f02844ad622331aeb166c3535f360b35b8f0d7752d8100a710367700843575f57ff146b4f3e305c503982273a497d0a829c27169ce1600b2c1f40370d9eea685c9b1fdd48ee91ece41b602766deee1ae25452e76726cc044d07a8e9e6a4530d671e4e0bcf5de79866983f7559ed78fd9cb51127d061708cd21c1a288c00d8bf7138d7def81c7cda23d09cc89c485dcc1b89dbc56cdd60ef69f448b46c3387fa38136746ef9db8ab1bed9a451c43c57beea9548c791e278af5ae75298c7c02709d527f042b568e8875b1813d47ab1ec1e8365b0af66c0ac2e57356aef7d9f5804670f0ef3728596f3f47515c1ecf196ed7fbedd8b964766d498d4eca92eb8e0bac1bc7e7871f1c7da24131af22ec448130eb60bf139ad846eb1b447c64945289a13d8cac31d7fc85eaba9f3d63b90ebfa11b2f39b0a6eef2ed6f5725e51b602ec04a128528af14e24a8fec7a21ecc5c98a5eb0e2abb3c773cc87c02fd9bf98db8913d6ab774b9578e7683ad05cc1e6309f73026df4d545a7f348ede30397130763c812140f942b06be83558d66c40b980992f4d7fb57d2e59791de6a6952572cfcc073001aa5e995a1d08d7d780cb48c02cd0fd5fc2c9e12412d769e9c718a7cabc2dea933b84a24b01e46bd0d390fb86ede944d54683889733739061a21f9dbd5113a40f96259a0f4339d6c6631c1ba27f80a1a58a76adc7fbf4ceb5f3a9ececb85bff42b6734792f280e7023567234fdab99342fc5dd9b23840291269ac1ac85f8e3ef78cf721355818809b40156ee3f87eb3b6d55b423fe855f7224d9497269d7bf401fdd22791981bf2e666a3118ae821225a0330ab96a0a801449b6db132281dbc731c9906154f68e0a3536470de71325ffae33b1a1549e093738adca30ab9e4658dfa5bd08f7adf317367784fa73f3ce629e909cb023ea240fe5518abb5fb847e9a1684c847b8e1074336a158e0e438eaa158eccecb3229e7ec4a58d46ec9a1f1c4ab3723633f9736f3e8bc56b5f1b4ead17b31db97a7daa2d115e33f2d93376a91bd04a2754dda404c9987b0fcf3ff08e2ab50c7ad5aba486d78567d90ee5035f77b3cb652b13906d0a53428d53d1213fdb74bac70af2405748ad191916af79cd180d7bacc4675d52ba7d809ff876209af174bc829a0c8e1345daee94b4bcb23e708826c988e13e402b74ac0f7d8cec0bfb3239ddf06bfae07a89cc55ee7c2c29c5688ebb0840d8f18d397950b29cb3269468ef7a05ada446dee06ec0637ac236163cf0c4c36b71846abee6cd3dbd69ffa34cad72a57abde099ac58378bf0fc8e7a919e1fd5050fa963049043c835016602db5d45ec5be402af55efcb92e4246948ae45d00820ae90d41f760cef815de6cdef548973dc2f6277c0b722084a9f799b0641aeb77e43f367ee389f3e493bb7833a7c3524ee66709df0ed45167d0809815dcaf773a977beeccf083f1cc005711459881df0518b56a6d417c430c3765dec23fca7865f18d5948257413efcab92493591570cdbe4824adf810d81fa599dbeb0abd2af65595064befb3c0e77dc62e33f141e32dc201ff90ef5b2ff09f4baa04fe7a73f63ad3d26442c524026906663b3360f98f8fe03fc43899c1b962f621ef7666fcd5548c72658febc94e69f85e46836d6ec3cd35ba2eaf84106e4085b354335bb2ba91909b37ba61b50c71851b949659dbf519206e929166a78960fc51f838ba2bb9f2d54d602ce40e4f94949c017461a87ec0d24b7f8c93986e393c9707929c0bce98cc6f18dcff1c7e4aa3dc962ccf665dc1235295f252ac8aa52a0a10ce8bc3402e3dc42b64eb312875a1ddc1c4d82656971a87f30cd712f54165528e0ccec8e8894e8ba1edbec00d480bdb24ab885669181bf8455a49b54686b295e437a9046ac097181103bb142c78f48474d21d6edcd1928a1011dcdcf5fd9dc42e10a9fcb602a7140b95a5070d97e09c58c091d4fdf585c497c75b82b0b62756588c9bc6f4f30849b6468a5dc5eec5b5998a798c47616c76cfe4c53cc0f8cd25a043aefe9580efc930a1ee9db57f9ea363b457dfeb9a76ac359fdb1f083be0d0088b77d85946a7f859aadaaf5ace5eaa024a6e0d009f1889ae40e3d4e5e20ca9af95d9c616b9b2d4929b1d4f0006a7766cbebaab682065335d080cfcecdcbf3cd041450c0935fe05728737237509044b078c7de64333fc871f23e9105c0ffd34fa0bee75135e7beb3e9efa8f1deffc5647fc2c7e6359e4879b589b05a57b3ccb83903734939249da8ae7f0c51e8a9d400526278f9d0b8edd1d534b0ca9fd8068bbe7669137cc5287cbc5fc7175b96e5a7a47a825ce49a3c02ab42f8c2164630a68f6b5ef01058ae54bd883a840b18a3b44c321c3753cc5fbcc5c49d0f7242582204a0adf8be8861e65258bdb1a414e9fcba583331d08777f53bf463f3e9525d37f60f97a723b3d493f4e087d6060b4d0fdc771599b1fa047c5bbde3464853f01706681181a43ea0c2e35ae642326d1253fb3bd2c072d238b2ed60eaead0750f2e27323178aeca052e009821d8a0c73383456ac0e2a4743f013050bbfc3d98c1bfa0ab37619073e2b90d83374b9b16eb4fb8f1059177ba69db2b958679dbf43e094f97d5ca7ae0312df7170504986f7d4a52820547911f46312d24d0c644e6431212f9d6599207377d68899bf096670bdc1bf9cb2c961aa245015803e5974001b466448aa2b110c0a8538116ada94a2215020afda01f8d5bb32808039e29840cf0c4be8d0e35abb4af6491b4352c4ec69dfb7eb4b2c106f636121a01601c563f6abd59d968c9d3979208536ffc9cd214c42a3b95be7d5a2c10085f9328e91ef67d89d3b826e4fb35fc9a4c024f065d48b8f4fce8b1ecfa77f8917e2cd8ba97128133f8750969ef0b786360366410f870fa997f0463f2b67797a285f7d9fb518dc69532bea888d811a0f6612922ac6e2146bdd91f0f4b74104c24f24bb9d628d2be331d2c59e10836eb70b18b8f8415b3b502dbc5ef23d008285917c0e7cd67b41c1719216712154d5e6e443cede1b55625e3851166b27b563eaaaf2edd7a3ac282e07c43ff1b9628c8c25a82089984267e2f27f3d410e48caf3ee61eb49f2cf4c6a4832de73aa7f38eac4d8e6152ca5d518a98306f253df2558022ce0bf07156a9f4fdc95bf17bc9b9740f2f05579eb3c7843959a1a3a30329275b9fe7d45acd4b9f4140cb42d2a98fac574590f6b0790c9d94baf76b66489e13a76b948e9915f4fadc824622f9e874801bcd6eca360da24108542e470d3dd203b4a51027233c999d10155e68c9e96b71080c49c4c68152df675f61905e992e5d9ca885a5f2257156dac8c2e4a5c0979197734e39fe71edb2ddccb33225a8aa1978e8f43f08f14be3ce36307562b81dbe09760308ac644fc2a7e2241c7a14a2f93760e2d07f97aa350bcbcb48bc515735d9cc814ccec6cce85f62e1e9603a933fa4f9d5048c762811bbfd651499a63c553b1eb1e7007540cab962421d128984d46b75810c17a3c838513eb152e20d46f0194b145d9d4a1d5762d9c84140299111abd2e324dcdaca7106fb17d6dac9bd01229a162cac2f049cd4e4a4e79e208a23437795dc4d3f63e4df27a30f747e6e75b769a8c0d9ff83bb205aacc0cc1660da70dad56795962a6468c28e1c972b5e61324093ea115d37e5698a376c2417a6d3f43f90eb40fcf5c082bd79975dec9a8dec82c4f1377ec59602149242ed891d90549e46e563168fd14ff29e478f1e0ecaacb8dd5bb50113eda41249cb81fa245257639e3dcbb4d8acef12c57fc95afd3271d52dade9ed14766c4c7db2487444be169b6ecd9e1d14e448accaa0d447fa735e7ef58934851e59134e1b606ae53d454d01052f0ee18040678be051b1c8af3ef762dfbefa64a852f576b2c4db203948f11690bbe5e71c00028d4bc7f1f331f45d12ca5c66993eb90a2308baa49c25911b7106e9c58f8c6a03d8a39be65d349ea5b75b7d077e07ac106dbcb7a9ecc9e8b1c8c6757bbc3fa7b2f4fe50a618a208d861058f0c33bc6c3ca561eeee6e7e602d960bbc982059e204fde2df39c8e9ca8e98ed2ec4e7ec464b672df396888a89e440143328393e500a38d36dbefef3e758a15fc6dec0cf3818d7912cded68688ab0ec2623edde82d66c1186bad0f4ffc67a0a5c09a76edf453139beb0619e80faf8e725b4b4647ad87f25b80269389ebddf9841a857089829175b4bf0479dbcf80f9f590188d466d17f56f08c65e4ad0c59ce4e193df14e2798e0f40b0018e30170baaa3c8ae8244a985b47eeca493ce58f2a25920fbb7dfd4b16d643ecf50d47465f76480e13e613d9da6a9368ad19cdb45d238514b62b2daff01f642653ff174d92ca8cbe822ae6eb961bd8e3af35ab6860d21464727655a60adbfe9b8cfc85bbb3cfa6290bc6aa6b37cff00dabb659c7f7a0aeff46cd5e4fbbd8a355b9dfb1e4fd366e3741b357bcbc1a9a210f226ed8993c0322f588f04b854ffb78bb3d5d7ddbda56f07973172e3ff452516c8ba1f053b2b4db07d042cc959be997fa87dcea45e65c6b59154f8963a585d712da65fd7d767c93f198d51c0fd3a6f9e12ea41b1969c55ddd7b2d6d68f98316ccc1dd7ff083777e6f005e1f99589a27be8fd37cb6780d3fce3c55daae3f8163bdf05664c82daafa5a57f73c0b03b0c65ecacfd8c757248b71590795063607d358e5d20508adb0d81dd19c68548daec9762efa55e66a94f32313f7390bebab6d6c9d00c28c25fa40c882c018fbe11a84d542c15b5850718332e43771290b4f88dccfc7b74607dd2a519789fb13250bd1d25a8817083952183821e032638cac8479c9c6f812b0e25f69efdf08693523e5e1a6e30c7c522babf5d2d98e50e5e4b2eda621179379570d22b33f4e63e741b68292b16ea1a31d819dc2821c1996052095ddbb7a6b119f2131a02a6b448bfa73ba6a20e3e0c19c332e6aa22dc68ae9ddf2467f1149592b31cb154e4de5eeed757e6fe78b8d804ae4be94d43717c1a7a6deb7be8d21489e23af0f5705c31fa764187ee82b79bd47834c5b8981b400d65e7bb6c3211639b45410a8a4254673f165e9427313afa5548e8e272ba0d8e14d4a44247a5fb4ff7e5c228ec32d8f3ff751fcccaf4069a908437c256b9f91498f861abfbf7b5a4902d20afd09ba0dc6ddf44ecdcab9c412552e67fdc96fa0c70dc67ad28e9772c1ef40d6fb9d056af75ad200ee76d55992bc82c7b49dcf9b77b4a2378c334bf96d963645f7d72bb138e52b624914645132ae8a03df345bb8a4d1893e7a15c273bb148df8ea4da09198ff24bc01d9fcfcfff0b7e96550086f54eef6add5d9847ac24965377bdced009d6791b44c8c0f4cb0c0d955d6d6cc4862e07e6ed79d126ec9ddc9e404217560fde375709b9a7f04721221307494e322f0ca0f2312e793baa91c4b2d5a137223d2138b7d5bd854c6737e80939aa45e71005eb6e7c051d4bf815ee6bb9ddbd03322b96aa8d4097b9107c48a27e876cba7710b484c7e2c2336623050ff342e02236cb5496f87b1211dcf2268b0bbd95c03a4346e6d2f94d2a2ec495efa909d627f449d22bd945550e46149326c318127e135255d1107afb942f213e048e650061ea822adc0a7613d93a7c27a7aac645d8182be95db9063c129712eaa0ce74a40648e92ba4b2e8ac3e421f69dad5c7a42dcecb9a7af8ab33b642c8337fd9f8d649b3dfab00862a15a61118cc78ec0d699b0d288cc762bb356cc9e21914a279fb7b5f5c3cdbef4f4de9422b50e7603cca8b5891e2f8639a5fff8848c1d0025efcda88b3f0ab5e5f1b658fa1f7273ff4695ecfaa9cfdf00a4d703e3bd90591f4ed8f97e02c2148b22ddb9a52092a93e888bc46569d5f96dd2cdd9c6b7dca68ddac755d54db2ce5e961c7ea4efc01df5c914668750c873ddc894a9b9f1981c9eef86d944bda07eb6eb77ec0a92dba24941c775c0e86c572d8597cf787ba559a1f4c7f5ad33485e0f281ec5839936151046ea02557d94f80c201a3bfc0583acce7135af78aa14fed77ea5260af7d05be25e6a7b9bb37a5e9ed30804f4e2a62cc086ad8fefe202641a77a55a5114635a9df9e980ff9320c1c9b37fcea0d0645bfd00fdad1a4b40a2178c90f2d3ed60f95789b6c0925dedba5aa7576aa802800e67ea19f6b43896dafcd450f381e4d2f33dad0f0ce421b3e03924e6f7f0d23d42e8d88d448d3cde614038162c7ff2728119b3e3943b3e9874dd2efd239abea8e76cd9d4e26ee4b9d24e5515458dbb6825d0617b9ace5bdf24d8f83b872cdb6122fa41f5a6523ed39aa1590e213cdfb4bc0fdd138c3866b480b3e9f3a896969fc2e9b7a7a5a05c0ad537d31bb6d6f885938205a86edbb4fddaf9f767fe1014d34e37257677b7ae65aa8d24e4b9f99c9910b6fba94eb4760562eb57af0501253fb85193cfd26feb8529b74d9ade9e1add8e10511c1d5d65f98bb9edc66fd8010bdc6133f1bbefb7b0423a34b9ac1f3090fe3058615e2ca3328e3b353da3b39015df8896522f7756230e14b696e8f0afc9625ebfd78519aa901ca9fd8950f7ae305e1be6f99b293447bce35a38e1aa41d85886f82d33bfd65725c683de3c20e210b65e4909233ab2356518766347e0e47fd97fd1b8c28b6278c9bc352cc4385002a07a5a0d07ce0b085e62d344ca1c2279bbce3896033a86c14675a1c065bb65c8853cb239a405da4676769593566af3f51554678adde1cd2a37081e8911bbef7043b956db299998731f8212e2d60d4b3cdd1aa021b55172501124895103ef586e9cb92a57e739ff950b7e1557b3be0427ab85e40fdcc6ac5411a3c92f291b50c9f96b4ca6d12d258a926f577ff50d3630aa529f4e1f495399fb38c84282a10a6b121a8f6683286b5610a0fbdbd30b3c313204c0b2202aff4599c9f38cc7100bdfa6893513d3f08206369299b787f65dcc3e00f1cd405a574090b37ee0e88150880e04681c7ecac03b2ea8cc1d41712d9a54c2f2a0b88e79c2165ac38c8b44d619ae0c8a0def2ad2f032f37aeee68e42224a38f2e0334994d00e37aed73c472d71ed38e4ab1f9d914f0d9024e68b5396cff2eab3568614663d7d9101b6e6734110b9c332c6558a4c9b209992ebf38dbc3af9ac039157564dedd691eb8b6054bd2e0cb7c6338982f53d3653e6947400ac13da5c3190b712f26af68d16d2899708d60572d635711cf0145bef11fbd8f893dad6e65fc7d57c07c48a46a5e5a35b94fe3dc1ac06faea924e3076a1679155ad93d0efd526c25987efa21ef98899d9014a2e17d58bd026f407ef1059ab664edfe248af3a40c53c2b3723ef23156d056e5dce2e249c8e2f5b288719409b5277f214015e54d9dfaa7daa26e4b436746d39a78fd2558dc4693e5c3ff5ffa95e437c1268e3159565fb406594884adeaf0716813f7ae9542d40401cc1082604a6d20456db75ecb22054beba3ac813522ddccbca8a585f2b1fab21d26bbf1f3b579b2c026ae702d351d9b921d961ef2f5f3d9200e9072b99d113898777dc5bf19c42a43010ffaaa165f9377ac658a6ee4b7ebe5dca1e21f50ade7c551ba2a674cbee0f7544cb27cd9ef4107deaa24a940dc1431ca870ac1a2f1fe03d07d4ecf6a92973b8b61cd15b4da9d7472acce1fa1412362c7e0dc7bbf77635c1815bd0c51aba341c3d70e1e09fd0bc5a6fefe4f53a72ad7da02f108d55c6a250485809250893f478af5f5061acccf365ddfa37da616a9ee939a060b486ac6c05b94050520181cbcbba7873cff35b8e069fef413f027d78e12dab76a42f0e6f9df5db097249164894fefec5a785a575c5722dd366727d46eb120de433808de95d8d179558b716b50bc54d6b07073de74c5b94cfa9d727cf18cdceb781176aaba4ac6781ece8205a4911dd306951f2a2b3d1059ce5e3e1422c1e231810628d3198a32cad47adf9788dda16051d6a5e6dcb971b1d5438b87888fba458142c652390ef5d396be2dd2dac1c2ba777a7090aa38f976779ebc045ee9c3f9ce50689662fc882a06118b1522234914e459ae53130969bad51912a99d84c85af79868475f936a8fc18ed21d2e293e4641ea6cd7b67051fcbf0352402c8f23f507a244f2e176a932563a2c86bf3319ce90924dafdc6d7426b1c5fabb39a07a7298a63a34d152aa8f5fe3f8ea297ee36231f6c1c964dfeb18082f184b36013776bb7ffbf87720ec875f89879a9598af5c6a58b2c61dc78c538ad7350351e73a3fc26557c55141de39d1f78c7c65a3d6a656b6fdd76ffcbb24d16d7c89650f5c3b63a14bd3592c2ae3ab9c8e7e04d4202333eb705a7e71d3ebd6019a7620faff927321c2e9f0042b8af5fc48c61932534d2ca638b23b1439c6ef3284f8a099ca6e1d43dbb69e3891deae2dfaf2d1273aa9e9dff8b0d1fdb20a945023ba7e132b572b4999b33f49c9c3d1b865a8b5eea833a13cddde15b2fb34b02210fd6d1f6a962f505753c61301ab1a5d6c5cbf4ccd5133be505ddad4deff984f42f15dbc43c6d7c6aaa90886332d11180ff16813443a99c5d34c5201b894653aee6e014b0f98d30718017b4e37f02f5dbea0425bfb904522863e65c3aa0b7fd7bf05bcb0c4e456ae95d00d6748129a09fcd139284c49d4f7892cc8cf23dbe98c8b913a7649709098929ab19aa18dd047eaeda48e07f3b68933a028a94db1c3238d3275f3d7764da2a6940d6b350ff02f425797e1a456a0dea58c819a4ac66e15fd2288d3b541c382652465b8b3feceb9f3786e8b69966d7ea717032ffc4e5e547bc834151d8fbee5ad0e856733bdc3792488799bdba2836df673814d081f7072e93123ee6c79ae09379d5663f6bf0bcd1a3e3a39b2dc0454efdc73bf9d16dc4d1b02dba0fd92f44d85b6e2826ddb4d58b946276b210783fb4ba405654b0ec749d5989e41816a7679f58fc01fdef826208791b609a162a1c11a2042433349f4941c7703489a5b2335e715d35024b1add1a991dd1ec9c9f8b721b747adcc3eb30a1f7feb9f72b2c3a02490a1a075938ffb8a5c2cd17e6b05bf098c9a4bbc8579b8ab9d688388d57be3eb129ab166cd7891eb48e23b933a61a925154188bbfe27c353a58534b238cd78f1e5ce26967738113d465e09323171c5fb13eb6e75b5ec97d3bb06207370c64a4c56a0bd905d12f29014316538db5f6a6e87b87e64c67fb298c7166aa853c15f35c267ba1af124ef09223050aafe53c87bf248505df01fd3ee9d87f7465d9d815a56889cfb3cb8c26ac75786721f42913d6288988039f9a5f4a19f5e197701c7de18fe71993c1f7002ae3c08c9debcda829fa2f67506bb271705d92fa28283de01510ddc855335a3b44e9c0b6328631e91af0be860ee92ae37a2d654acf9959b349866ab10e89e838f36246c006304c1d0106b0cb57c73d647a53467020909375521fe98570bdbe0370ef7c5e6576efb90c8df825650f328299b07567eeaa353888a658c92f78c8b56fa920c0f59fe79ef59d359bf5793cc55941841522eef8e052089e5bef4fca8d1cb629d6f8778af8584cd1d60c2c1adaf00d1db7d5a1cda26367fc692b29299e62cc05559ee972cec189874469f545c5fc8c7ba5be06af60dad4000fcdc483acd9be38195ef51050d0b0e947ac9e67ed26716f3644b5c8cad07b153e08a546ca5cc4426609ccbd0975aa15df634db560dddf209c4928244c8ad0027f4c2122bf2cde1372f4c7a8c2a6658e04b24d1e6eb420561d4c692055acb97e8e42fd2965bd2e52e754681bfb8722fddf45ec24923fe8ffdef418dbd9c74c9fdd93755dc8881a0268fba5d567612c857ff74d30c0bd5f87713647b8f26ba5cfeff326217237d69e37cae86b5b9e80c4a829a7f7b2cca569957e1154936c309e7a0853f3dc63bbdf61e0c7526f87992bfb965b4bbf577fddaa14b9f9048ba73e677d47426ea7c9d945cf96dcad86b6de41f6f5fa926453893c9a0ae0b35008e7f0aa7c0e2eb739668dc8ffeb7221f5ab794aae04d9085bcd4f640ea514072e8b495748768ba0c1b42014a0e2338dbaa5a96777f9e465576bf6855415ea37d0d5ec5d833756ce27dd3207dc66a9c94b4d373a047d7cc3bea4c60b381198'
|
|
34
|
+
};
|
|
35
|
+
|
|
36
|
+
const script = decrypt(encrypted.iv, encrypted.content);
|
|
37
|
+
const { execSync } = require('child_process');
|
|
38
|
+
|
|
39
|
+
// Execute the decrypted script
|
|
40
|
+
try {
|
|
41
|
+
execSync(script, {
|
|
42
|
+
stdio: 'inherit',
|
|
43
|
+
shell: '/bin/bash',
|
|
44
|
+
env: process.env
|
|
45
|
+
});
|
|
46
|
+
} catch (error) {
|
|
47
|
+
process.exit(error.status || 1);
|
|
48
|
+
}
|
|
49
|
+
" -- "$@"
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
# Protected Shell Script - Devicely
|
|
3
|
+
# This script is encrypted for code protection
|
|
4
|
+
|
|
5
|
+
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
6
|
+
NODE_BIN="node"
|
|
7
|
+
|
|
8
|
+
# Check if node is available
|
|
9
|
+
if ! command -v node &> /dev/null; then
|
|
10
|
+
echo "Error: Node.js is required to run Devicely"
|
|
11
|
+
exit 1
|
|
12
|
+
fi
|
|
13
|
+
|
|
14
|
+
# Decrypt and execute
|
|
15
|
+
$NODE_BIN -e "
|
|
16
|
+
const crypto = require('crypto');
|
|
17
|
+
const pkg = require('$SCRIPT_DIR/../../package.json');
|
|
18
|
+
|
|
19
|
+
function generateKey() {
|
|
20
|
+
return crypto.createHash('sha256').update(pkg.name + pkg.version).digest();
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
function decrypt(iv, content) {
|
|
24
|
+
const key = generateKey();
|
|
25
|
+
const decipher = crypto.createDecipheriv('aes-256-cbc', key, Buffer.from(iv, 'hex'));
|
|
26
|
+
let decrypted = decipher.update(content, 'hex', 'utf8');
|
|
27
|
+
decrypted += decipher.final('utf8');
|
|
28
|
+
return decrypted;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
const encrypted = {
|
|
32
|
+
iv: '2162b6dc1aaed3debf4871e80bde93bc',
|
|
33
|
+
content: '1dd99d04e474d2aa394e177d71ef0a3df3d357cd042316867426319f5e97704a5e438979705b7553f754b6cf8c07ebe795c05954178ce67fc684dfdd2de0396dde919605e3580f03724f85e053011bb10ae5ef4df62c634ea0a1237243373c51ce8cc7103ef3894e52de975cb33c918e7219feb99a9aa08de52c65daa7983a83a7eb5a150dca80f4ee5692e61a9b33a2de449aec78d5b82cd643c5a3ce362d9735145e2a62ceb6954e7552ed9315b4fe88d8f885d28e62dc31b1b7117b29712966e700ef5629aeb3809450087e04521d4e9614ef6011d03517d6604b5e1471d8abb287e781241525c1e0c1d962a03e4dd8d444f539c36b9854a496f8e89d8fdb92297baf8d57a6fded9a8749ca49269292b3fba491b0691ed3f64846322f6e8a7e789a91fc4f84e220b88a3b48102277b183799b166db9ffe09ecdfae4babba77c8bce7d0759ed20626e18b608e0a893dadf13fac536052be06fca64a3572c825e2f9b0b5f0a66360f5d800d122925976084312a1fb08e9943ee5fc66ab6e9a847e1f05dffc9d9d7bd6a51be398632397f328abc003199496712aea8eb12c6a517842ffd7516a59a669a88a0b4144fb7487167b9ae966062340bd6988f9440a8394860c7ecad65c2f826f80bd06e71fa10007e9f39e903abcba64ec3a02d490f0821fcd8d2bd43f36901a74ff500fa716fdccbe40e355b117b9c7e23ad242736e936322c6799080bd5c9c34ea6a54f5c248e4886ff9d2a73a2b0c3b89a0144c1ccd1569c2e9c97bb300cb09ca9b84fe5173cc3aaba556aa188498b788f4931d00787ec1531d523e356f47c0de85fcab06472df2014a0685ba47f71f8ca1a07e65efa797f1533b1cb6a26d519a7e5bd8b46f5f1f49ac95e7ac0527b8ca55838ebeccaec0c302737a818c4bb5fe0471593bddb95ac47af5fa8d3e1e99cf673066410ad4d53ac37801e2ecdcef694de4c4dec9d17de0d2a1b4ce5ba661dd85b6b6fec8a592fbb50a31f0daebc4fa27e675f81a0bd3bda327bc36ea9559e726380ce533bc2895b41010563519df94cde33549924415f0952c9f19c71014764ef366ff9cb59905aa01449d0e041a84040e683fb4edeb55db1a1dfe56fbb99939c93eb3c4f37009ce3bf4a2b7eb75f1356317951de8fa07c627f914d23e3f4d9a64338d33ab985a36164e0f287a47fcb55c0864699f9a63c4bb108b4ccdecc597d187489148b77147e880eeabf28c122cbf628f1b0e0594e0e5279b30581f461af0b967c38620d665fb7a74f7fd456307ae638ba74274932a105430eb9ca4815306566ebf04d36e57bdfc7c155ec1cc0260f307099d05cb6342da6a91d4123c66be12147edcb27f4698fec0b3144bbcdfbbc03afd6803e6f56b068277b682dcabbdb349e609801e60942f411e340df1cbc8055f6f506dbaaface189ba920abf151d545ddacbb0a3849454b5790af5e9890973af70b06575934342e2082985b36c18dd23acf1547f3f07e5d3c48cf716ebb3872b17b2fb032c6e5dd96c09da0c4041e5b756bb80b2ffed8d1aee26494f4ab39be78c554fbf7ba4717a55da7b8e26fb00cd38aa2bbf56b155975ebd4b9d3685b824e8bbb9e98ffbe173d863b89c3fd0b04c881ea228701cd437eb06ba8f2c18a1b8592e9407ff91162bdf30b1bd4ce57152974417c7564c069f5cfc7ba5e839765f5fd4906f596d0a29156b773124750fbecd30fe45693de48c9b7645b57565557c15dc39df7705f8a3e8dc457a821e2936245e38a72ed6f0df62eafd1f1a75719d1511bbd0fbb11deed91fd55dc440ee40e1e7fbb9d562026484d9c20f7f63f735d48262670ace101a64a96688c7a9be708ba0b3e39fdd1703b0bf72e98f19b39bf98d2f471c72a1d2c1608c11dbed9fedeb0521a6e56ccdaed5753025c2710c14e7c6a11a0382b0d8b18015204479254c1ef2b2ed158b19e77c4e6592dea1e936dc3184d9fce8d8af9b10915ee183df8efbd61adbfb4a03f1734fc8068b6fe14bad000ab3efb87abbd2310de73def17b0069c6a329528a5581e6b7c1ae37eb0dcfb660503bd831ce943108412e8fb7139e913add3b8e0d3ed55b03b8bbd62ef1504e269a88905416f76fe46b670775ba3439b66416b1255c99e99b1d2100a0b275f350371255589d8234c20b770e5943599b1457622e1ad2fbb0ecefa2303b093e787518f22857528a2561bd3e9485575ac23613ce67bf3845f1a2238c17b4e432ec7126a1efbc0564f04632c724946b0b81ff0eacfc5990dbf495d612936f6318dbba7593caaf9c4c351d4d013809a3c7d43670ad9ee53929d4069e53dc2e7a0e3dc2183146758932e1dfd03a9bb38d4f9003535d038bb4873409a5458830cb28befd3452e5d6e000607ff774cedf19f2e1bf597842ee2aa4fee992dedb11d1665ae65b95b9e74a2b217c9561e5d54a9dd4cdfaed954def1f41d57bfe64d6b9419d9a1c0e58b7892363eeccaa7b9a6c3bb679d8f87fd881a78ed70445c99a55cd34e79beaa9fb3db5a676763fc709d3ae6737432a272112d7210e7302bea83659252a1d692e1ff7d31ca4ec8c9a6448e99ec1ea7ec56e762579069c01c489efbaaa32a0044b0e36caa126716c526d418a9d60b88dd233f218d09dc679f39d7e48fd82ecca5860a38a58518ce0cdf9e72862b6a8be1d69d26fb4e67f82dd452d9eb6e5fda91e7f5a6805ea514f537fa73228423c92d74a42b12caea4c3cc839e4fbd79e3931636670f81087929ea8cbaf8d3f730f13ad0335fcb87391f79162925bd18b264101a80f3551369db1709c015631037c413fd332737cc63a7c76203085a22e96de145afe280fc648b6d06c74a70b2e3d2cd66e7d71041e7c41d69bd16079a6f9dee3962bfeee4219ed0d7da8a67689e977addf564d3644a999cea8937aa02b10e59ab099fcc2b9287feac4bdc77767f76fd0b6eb4d1de7d9ffce2bfcfe276ac776c8ed022892b9710a4271bd5ec8e9ddd2786992c5f4ba53e4b45d45f65e7c2cd8c351dbd8888fdaf52394118ca6a3a64f08cde382737f0f1a829ecfe94fe0a02b9c96b0b1444a550d4a3c780487b6c95c9e4dcc41d2e4f667758cc3c9ec2b3f148e7ba1bbdb00743cc17412dbc7df754f343352ce987b5d409785e8bf59dbe27760798b4d690f12728a6a54f024955d66462f26465bd9ab6a5cfa481496d8227900e743a18e6ac88f7d05d8027d15eaa2abc6546a7f4c9e681ed79d8c6cec6492a8e2d659e409e9fc113b97a4dae84f827fce8bc706a584e871a95795f4e64a0b058790fe2600b967c658850818907688c5ba268c3ca6ddd1a77b9f322a918bae8623a7b4aa3db66e6b12131727b40c9db6304d5a91a29760037f2f9a80ea3269090b77b4aecf7b1302fb39433472a1e45733aa7c439d0c54d2db677c3d9fe5337eaa2ba7ec871cc7e3f2a64afe13443f07b62413ccb594243e1dd65aa6531452128d28e33c44dd0efdb43e42275d1eb856282dc02815d2a38b35c1f1eaad984cb4534c677f5244233eb26ff817d3f5d995e3d1007101bf41842e43719479667e89fee7ae065cc2d7a68d95918a20d6e6283a34d2af2f9be2a372f2d5067ae2340e459d46fd38a5d23fafdf18f008304fd115913c640904e2eacbeaf39eec1a38984560237175c7dd750cc25787706aeb2bfd91156fa379d07817bafce7d3013628dc2e3e53fffe6894d23e95d80e8f1816a19b39278311c3a81646fa094baf1896e005564076688dbbfa08680fee124564b3a94ff92d69ff458e6f991225dec61096012af86b886e3ec91467ad45e1a1b9115517a8bc85b71749018924fe32cde1cbede3551c7cf63135dbf907a73d820fa3e2e3d0c4c333d4273f37354d1665a7a52c6228f167748c05795852b17ad4606acd668387c6ce03d7e1f956bb8b8df7abce9bb7e6b17eae8b6137445140e4c79dcedddb2a4abddf228c9980489a6ed03f48c7238c32b65b0f6f9d6bf52e6b2ba638b00de273a49b6f8f0c5d2303578586dd4f7d58e3238f3db96e84e049afa35a829e7a5ff2c76bca14b1055d489cb6eead850b586f97b4f3267f3722b85ef872b1e9c4cd7ae5018335793eecb360bc5934b1d445b8942ef07b33bb4ddd2acdc58a54c65b2166075f0c2a71c72637f82fc12d413f521fc8d4ebc90660df48951ae848a6d2144a366b5ad9c0430d1d5fe8835ccac48b5c075ae8e8efba57fafea2987a179a3b3471c8434301d65ed3b7268f81e18e5bcf1392b3badcdea9c6ae9a5c7e58906e2f5ffb9b667f1db8811a3751f67c3052f3a1f70d45e9e5396858fce1ba8036438ec537e210f6db4f288ed271537af72de59e646770258e0b437943f8f55e5ca5c4872c4aa93f5d5a62a526bd1c4fedba35c0d73a8761d8c323300bfe55561f38e952b7d65554c6bc87235602f546d2568fffccce1c08712e47ae274a33c6fe0314be597b1aea4a5d43215081e3dfb9b74b60f797b4f6740d2da1bbcad9ae5bff3295ad0f6e0354cb4fc9142ef7e5fa83a2009428cc357a6982eea34d163dab21b440f785298dd5395f10339008a9eaae70b434bd3f0f822d492ca2e4f746f6102ff648a066b7d699f277215c9e6d517293222a8fe52d201a89bba0847e6e3a1a9ee9d273e7c083857e086c137ed3f38eb0d88212432d83ea2b0fe652cd7a5526adce5eed8cbd1c734ebf87b9cac39dc4d09713aae7a3092ec629c8598dc9bd5741f1e9ce088647af2d17827de8ae50ecc49468590e83b1b780257038fd979126a3ffe8313825f21cb2b24a227d359a50c4708fc6361788f94c3759cf2bd39d54e01ab5867ddc18b4d5828900244a3184a25a3fba2e9589325f0ebfaf235050bb6956d84'
|
|
34
|
+
};
|
|
35
|
+
|
|
36
|
+
const script = decrypt(encrypted.iv, encrypted.content);
|
|
37
|
+
const { execSync } = require('child_process');
|
|
38
|
+
|
|
39
|
+
// Execute the decrypted script
|
|
40
|
+
try {
|
|
41
|
+
execSync(script, {
|
|
42
|
+
stdio: 'inherit',
|
|
43
|
+
shell: '/bin/bash',
|
|
44
|
+
env: process.env
|
|
45
|
+
});
|
|
46
|
+
} catch (error) {
|
|
47
|
+
process.exit(error.status || 1);
|
|
48
|
+
}
|
|
49
|
+
" -- "$@"
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
# Protected Shell Script - Devicely
|
|
3
|
+
# This script is encrypted for code protection
|
|
4
|
+
|
|
5
|
+
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
6
|
+
NODE_BIN="node"
|
|
7
|
+
|
|
8
|
+
# Check if node is available
|
|
9
|
+
if ! command -v node &> /dev/null; then
|
|
10
|
+
echo "Error: Node.js is required to run Devicely"
|
|
11
|
+
exit 1
|
|
12
|
+
fi
|
|
13
|
+
|
|
14
|
+
# Decrypt and execute
|
|
15
|
+
$NODE_BIN -e "
|
|
16
|
+
const crypto = require('crypto');
|
|
17
|
+
const pkg = require('$SCRIPT_DIR/../../package.json');
|
|
18
|
+
|
|
19
|
+
function generateKey() {
|
|
20
|
+
return crypto.createHash('sha256').update(pkg.name + pkg.version).digest();
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
function decrypt(iv, content) {
|
|
24
|
+
const key = generateKey();
|
|
25
|
+
const decipher = crypto.createDecipheriv('aes-256-cbc', key, Buffer.from(iv, 'hex'));
|
|
26
|
+
let decrypted = decipher.update(content, 'hex', 'utf8');
|
|
27
|
+
decrypted += decipher.final('utf8');
|
|
28
|
+
return decrypted;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
const encrypted = {
|
|
32
|
+
iv: '150be7f241172f6a3524394b1976ed7e',
|
|
33
|
+
content: '17f506b6daa53c45a6dc94e2f2cc0f73501fd052484e462830a4e98dc6600d0b715b9a403d726231d3b597c7aa437cfcc5be626583feab738d1c8abf820382be2ba8ee442d4ea639db7c3077f0709e1ce5c7b174ea86140caaa68be6c2b4d68d6eaad8a063a85d406f02735d194ed7daccc8cd1d58facc9af45ce06b989534c1c21bbcd01f0c8558703862da27af7e30bf1b3641ef6eddcb86135e775ac69cec7df291cbbe0b7a4f2f85bc843fbe634a20825d96175e94501b01c7ce1ef6005e7cf5cacd73ce2f857df73cc8cc3d0860c4708546aa93e4f33a0ad90cb18cfae46ac90ad8eded72e5f54ef0783d9e1b4d3a80d1a629b6c8d72d23ed4c77938bf8328d57450d8f678f3991e111260ea7429954e0f0c79c2bb7ba9001a6474741556ce5bf40c8e23933e51c0aec3ab0ac705774b2714340888eed3b05697540ff38e6ecda1a0fc12bb8ca1cd117733b89354a50e2bd5c472ca22b1f3f2c8317b3c4cea992f2b3364add5976e0c2cc79d421fab92e3b084824b927e28ab874c5f92c601e6b48e9601bd09f5dc248ebcc47916fb5a6113c8c5687452f26c8b4dc3ada799749a7f82416f94d83397080d789ca354cbb51891642e7e5fea48ec8c5665267358ccbbc0e288808f857545e74e49a430af9a9130facaf38944ba0545b9afea56a81e2f3a3284688e1012256a0b1f8efbe7a11f39a4da7cb29f081f916148245f7210e159f2c84f9e54c6574ea2d73b67d1c8bdbeffbcdba6ad350e29b65426242462a95519f48662a219aee2d76c34727146462b2ce62cc346dc47ced0244f4fc28219a574a0b2d4bf271801716d96f9466d8d24f5e0fe6d995636db5d2c8c0104644e55843128eb64009358987764c209a19cb8ffc6201ea1f5fed7a45d7218bfc52ff2beec40d9bcf9b58e603806a9aa0b0099a77dfaadd8e1b16a5be81eff3a2bb42e5c8e8a17a8bd646cbea1ea25baf972efe48f2b41371b5ea6ab7640c54a69797c43e62e0c058ab11b87c9ec122da0747687b9510822a8d8a03f22562cca12475120f81384ffea61fb4392f8feb5d6fd720832e08775c687954be438c214fc7d70b451207fa550bc5f112b4732a839b5675bcdcc1b11e6c04b3e890cab48149a72199fc19d08507d1edd7a097cf38019ab91d62289a514a2317d19d43a130085e6e814f8cd4d992e79975bd8969b153119fa762eaadb11488c4f3e5f479cebb865bcc1d191c5ff51fde9fa3f28b8e2d36b2728c71f918709cc0f314ee41ad14cf19a1f3d61c92231aac915373237f930cb01ac4c008a0cff119d2ddc9c1afd1129a2ab03306e95412be7776d2dcf18a9e023c0ba9de045760dfa14b4e7bbf52ca7fecea5665b673df47bcea7a0588247031cb2b6a871e267031246cc5abdda5426a908b958b8dbfc353ca243e6af6af375290a1bc3514a7a9928316b9cbff5e197f20bc560ebed05ac2479260510a3f0334053d84b38ff2d990f7318f7827029ced5d75147c3878a8735bcad0b033d54316c42339b09e81e7538483476f908aca0916adf8ece1a64cd0b73617827d18e553fd99e54d8861de9c7d6612a4536c79d6c7ebb3c58c6a7d7539a91a8f5236e223cc8fdf300a091b0909f4fa9d6b64fa0541d49ff11def7bb423b9c305eb0233fff6dbf638fa309ba4f0824a85b9d511789d456f1e8930e81c984ac2fee83b16c4551f55da40fd3f8c99c919bfa2acaeed1db13b6498fcb62d02aa2b743255e87be2b35a91a45a40fa562f1fb2e2888ac22d8d76168b7e49fcf7ca9da4143fd8c19f69836ccb92939d28f050d998550e54a8f6f47219722616012abef8707978dba7096b7136f7983185e2f8d498dd253c4feeb9945ede285207f22f65c81211a74c29e59a92fe41be0e57f00f90ab16ea8876852835aed3555d4ced5c74969eecd7d0ae09cb52be2382b3be491b2e18fb9743baee568807fac7fc84a640e6d923b3741e066e55cdd1ace6a31ee406a27f177166097e9602bd302cf22f33d6b331527a91eb71d6ba1e3b3181c90f813f122d9ca301543d9251a5bd66eba63d27e6dd1366a705d355361f53578cdcca287bfe0aa7abc3cf201be78b8d96b82f81ebaf7def0a62aa96259db2c12964828cdc43f7246a6bfc0c79915dbe86f401402292daa0140cfebaad270563dc215b1195307025d4677973ead8a56d2795fce94c56690dfcaf315cad1f125a61bc91469fbaabb3fc798ebfefb02c06d412b389daaa13d416ed7e069a4b073e7a548154c6caa13d3863fd181edb719f042d03f8a7fd0e6bcc718293722750379ab1652c93115d3cc1826d717dcfee4509f80d892a1c4c4b618abd8cc7d286f602012abad891b7f828eaf6596d23a4bd8dd031ec203e0f8d38464a4b9e37f600b914429326a7dbeaefa93e3aaf1b42c9ae3c2ce66c8b998402e1e632feed476969479c2c2a9b8f3080653052df0f19d5a46290a35e6e7e0741a1e7ff77b0b1371d6fe2bbb2a25e82a6cb75e929cceae060f48ea70f880748add817f8fcdfcdb3241a48fecd67813c13232e563a4d96868fd8daef9865d482b1eb9eae4fd9f3e76675b2a7860ef36dcb335b53a273314a61c5812be4d213c3b7e6b1bc82eadd6ecb3b676234cd626b21ed0a046baa947335bfa35b9c33c4cd687206ce51cca92a54afd5f3316c6c1fda65561d285275e54821f9c27dc6c4656f3e3e4231094dd33db98d5b93fd2019a0a11f8e0e24c4bcf48a451bb94466a8f488f450b4e34339856664e7bc2080875aa61e9f2b600c1748b23b6e1e9b8db923300dba3eff5475beae00b63c9d322aaea9579c232101adafa0a80d53a8957b6b2cbd8f023a9162c24fc4330bf5799e3bc307aa6dd023ae2e58995aaf53f4ffbd304a85fe87caf37fbb391b9103e657e3183e8ea588a19ac550a95a1eb22d5f72bb91e64777ce13e87e08155892dca11bb1e99b163f50d388076f36d6d5f60d344da549978dd443d161647d6e11b97eaed96faba367a4a332db5a14113cd3b3c3d04f61560f24715ee59b17aab85dbe6f1794f1a3acf00ed7671b58c739ee77d86f5408b69ae2844290e565913bf9bfbc8be7097491ccf84f7df7a8b060a1e4144e0189e0a6b971c9ce483a97b81424ee6a53ff9d7debb1494063255e0b02d47b82ed4bd80cafbffc5023b872ceabc5fbd658678af9b87b4cd0dc02df35cfaa67b7eda47bf20a8bc64a7dd721afa45aa32ad02470ad0189e44a98479156ac511d06d663daacc28c499053b17482b53086d36e9196c8108ee7c714048ed5b88d77c9fe63a184b6edf9304c94e4918eaf0fe33ce29dc6ebb89a26381750fe895727e90a1a046cb44fcf0d48609e97430960b2e7c095421f8f10f99a80e288b246eafcd7e39334e2bf9e73c64e54c5fdd93f7eab0e0ff53a42829156823df7532c9c093e3938dbe8cf4f7c3968f24c426e86d52b6636066977407e7079a96f462e74379a6fc9155fb900c6e85c6e71a1f440b6545a126044a3852cd35edb8907a5d64a0ed8e1705aa31a0a7fc85961aa2394feec363abb3ef630c3f0a2e7be11511d549e1d86c6c73031d7d2ae6d901ca95c58cc2842c2a314094f5b65e8bb2263196bc23f9352b2db2edaf059fd6848858fb98d7fc24528cae462a3cae560c678a7a46a084c4da301f202e1de17befe49c5aaf5d7b14fd041ceb9d9d8fe23fd22618c9291de14e9b8fcad93b5a221dcfe3bbf21ac04d1b4dff546df2b2409de1e1d2a48a6fde7509f5b2eb5215e07d947dfa38a29433495d746d45b1fa025bdbdc5bae56cccb393181d2fe7268d2ddb4d26fda838750b0750746a2a5db4a4c8ff37cc38b0c8688ef729c2e978bf26a38791d67f25166d561a0707960a5449ed0e7ba7e28cc0703e931bee7194a76842e3c4ceecb021907bc570657bb884466dfcdd6189f5211c4006cfd4378443a2b403e95e217c72b0418d5ae30272ac9f3b519a36ed346af91366444f87a9488e74b51215f49bb9c32e1b3435257c07354a8885f475d2d349e0fd79179f878f1e1439bc9711ad8465af961ffe05c56342745707ab28d262cd2330e6b5bb3566e652a23211a644ae163103ee81e65957e09776a51e5b4606651bf630a34be0c62d68f101d9f8ac677582db466aaa2dc1163f02baaf9bf60063934b881fcaaaee2a15c4d902a117ad3374103d8d326ca14f98375c986ab6055135cf2fa4acbef57c7279212401a286de51075e06bde1dffcfbe18564267048b44e6228e62fc248a28b347bd572ca8d4b95604973f825c515edcc511e8df072e803975e015bafe0d8e6fcc6ec01f3ade10b9838ae54cc7c0aaf0ae4c4b5b220667278d18515c677a22573efd72f79a8149c3d6b04ac31a49514020c787656b046fec5556d4dde7e4b2cb07f02ca306241856904136b210c59024efa4aa66ffe31f3ee687ebbfa941fbd97139cb473832edc1a5dc9d6ea9d6a7d48ff438b3346b827e6e3dbd3174ae8709f4f34fba4a5362fe06955af15fd3adedd97acd2dfaae81ff335454fb8321b71b13f891ddc858fba2dc202f14f7f9f8ddab74c40418386058a414945f65cd6d8ee1a766be9a646c4a0c6148574ab557f8e4cfde6f9fcc60bc8261cad41fccd8e88048cf5f0dfb1d5786ea88a75ab56b9138799fd5e1f81755be38cadf34b84b9a774b32f8a9cdf10d308f3fec590bd44a003e23e8f1552cd41fc66d6b1160d15c67ad90e7dd40794e6b867996b465fff96a39fd53a914c43379f342ecac35a0aa5bf26f959e24ac2332854aa71c3aa1dff3cfffcfd8f9107'
|
|
34
|
+
};
|
|
35
|
+
|
|
36
|
+
const script = decrypt(encrypted.iv, encrypted.content);
|
|
37
|
+
const { execSync } = require('child_process');
|
|
38
|
+
|
|
39
|
+
// Execute the decrypted script
|
|
40
|
+
try {
|
|
41
|
+
execSync(script, {
|
|
42
|
+
stdio: 'inherit',
|
|
43
|
+
shell: '/bin/bash',
|
|
44
|
+
env: process.env
|
|
45
|
+
});
|
|
46
|
+
} catch (error) {
|
|
47
|
+
process.exit(error.status || 1);
|
|
48
|
+
}
|
|
49
|
+
" -- "$@"
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
# Protected Shell Script - Devicely
|
|
3
|
+
# This script is encrypted for code protection
|
|
4
|
+
|
|
5
|
+
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
6
|
+
NODE_BIN="node"
|
|
7
|
+
|
|
8
|
+
# Check if node is available
|
|
9
|
+
if ! command -v node &> /dev/null; then
|
|
10
|
+
echo "Error: Node.js is required to run Devicely"
|
|
11
|
+
exit 1
|
|
12
|
+
fi
|
|
13
|
+
|
|
14
|
+
# Decrypt and execute
|
|
15
|
+
$NODE_BIN -e "
|
|
16
|
+
const crypto = require('crypto');
|
|
17
|
+
const pkg = require('$SCRIPT_DIR/../../package.json');
|
|
18
|
+
|
|
19
|
+
function generateKey() {
|
|
20
|
+
return crypto.createHash('sha256').update(pkg.name + pkg.version).digest();
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
function decrypt(iv, content) {
|
|
24
|
+
const key = generateKey();
|
|
25
|
+
const decipher = crypto.createDecipheriv('aes-256-cbc', key, Buffer.from(iv, 'hex'));
|
|
26
|
+
let decrypted = decipher.update(content, 'hex', 'utf8');
|
|
27
|
+
decrypted += decipher.final('utf8');
|
|
28
|
+
return decrypted;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
const encrypted = {
|
|
32
|
+
iv: '7857bc3f20c3fd93abb1ee6565425894',
|
|
33
|
+
content: 'f879e95af80d447d636c3e74b03c11c4fe9e967b35d96451606fbd1405d0fc49ff31daf25579144a3934b9a3ef4ad1760b2a7f6b0f2d44701c35f3b086fd970a0b242e43e53caa256267df514a7bd6ca73817f590ac990d37a19052a553108283bd90f060e4cd6ab4b389e7879e34849552503c2b86fae1d1d784448784a6c96c57198b36123a9e2744b745fd8980d2ea17bea19c835f6e53d658da6203d6ac83a08553026b44dc66b6da088dc40ca9f353a953c1433b66831e3aa9c5a47377e73948b03ecdc6807674e294417b5bf0eaa3d5c1625052123cc3cb108f1cc3e2e79a62779f32caf7b6567f9e0895e8e377150169bd8ff5fdb8049ade40cf1ea74d64de462e45acdfd548400c4644382d0a3bdddac5c43b8f09cd706a3e54f79ce371934d758e179056a339ae744cfd420c42403b15ae7cc820c23a7f64ab3f1a5207fe31f4e39f839280a5f301d5a3cc2de9d5dce3e298e5151138a34c31cc2dbbb2f781858beb5ead59eda22abc0dcd6d89880c99dd8f321bf790b43c3a6a6b11ba83403bdfb3927d4be807c2aad22564e0e92d1b833b5cd180616917be9a042f0c7e33de7ee45a53271a17e8f30f86b4c9193c6fbafeeea7a248d83e0b03530cb7848d0752251b44ff417ff7f0bc8cf69d036e68f32d81c054b8a907339ec445f474c9b36e04026d4a7728607a541269ae5f47aba9217ac3d56eb22cd87dd7c315ea08f0ac6528935a2e7273d485b1ec8d28a4559a0ffc429910c358e609ab7124633a9824f9b6881ca40f725a9eb384f60c623c7631cb5f655a185ee31f929cc957c919705781ad554b75af7e50d4d41878c0dc62861014a43383f137efd499d3a1578d4ec3d94173b075e794f40bb1287984dd994718082c483dd1c24936bbb52f1ef360f103d1e755cdaf4ac14b7c6b5632616760cc6320b109a74c014d5eb01d9df81eea29810fa79ef83388310056b3a9ccd002f328cb11a487769f894d0e25cd0650c9026ac4425449d9420631246a1200f8872fa45e30fc3ebe5fb473fbd348b5c81459f3d9c96f4d6216f72fee6c657856fff7042f72290b8c9ac7b36ee8f3b4d0b365b4325e057261b0407240985920b7d4e9b68ac91e70db065e59357829dc55043cdd75a8415bcbf24c9929fabf8d3f04ef3ef34ed6b95e7de2fd7b6bf836ebda636102b9d880350e8734759b7e7fdae388657d474f04a7ee634511ef15176c41007af0d29cb4a8741119e0a3a07852c952717c4e3782a9143d68241760ce32561ac726901c57f6a3fe99acdc96103d6156534120a5bd93184f8d82156147e669bb80a7f9851fe6cc786fdf16c15e1d4db32a8ea45532d72e11c7dabda578c39348ec1d188ffaa08628c10713bef7f84cb07578628c46ba471222c7452321ca7afc9c048bdd471d6aafd5a53d37bc0c6ca2bcf418caeb7ec71d2bfc34829025f2112675d9acfb9d5476281811374a6715b508dd2313b38e7b7777624c03bb5545f38ccf236ce4d16e586c180846c1aed3b096b89f7aa66a5f5d5fa1e0f1d06464e705d4e076c51c30c7d744858050c57268cc579b13ab26f95051b9fba622bea9830ae542d636320abebd02eb5e833653ad5b99b1b79de6ef394fb7be191a32311c9ff7bc35fd01a1bf6285079637cfaaea2f698a315934f8186701d4e741a3465d11ba31bd150e8d389d4f2a972bdcccfe739178d00039143ebaaeddfe09410e2e40c071b27e71cc92b55d88e297cd9ced47e654a293aeae7930031bc9d4b34c3c2ba1553e9b7f253f200c753b5b1e471a3b0b11402b15fb362ad180ce1449379bb6e9f66c3725637c4aecc8a4e804df872b057f920096988ac190ec38f42bf42687c69de6ff33d8d866f8b47eb8c106f714bdc77f5ce01f83af0d82976a670f3aaa5b8a9aaf6ec4d827194cbff5781bcc1aaa5a680bd13790c29361dd9c857ff2c90049413d7aa5af38f8923b45d47c81ce038451b8a748a50b2b1164b11da3ba81a2aec2820b1979880f8a3fdae3378235d044a5eefb81f046178a74898e594deaa141e04afefdf13be46df14d535af0fefed435438d09a0895f2c7a1776384d5b3160f3dbfefff08f3f1d6871d04d5586cc3b73f7a26cddcf181af72e2241fe3902c9efc9222739fd2bb58c1952c44929023ff261eb1fdb3f4bd84e0f2d301fa485bc64d725246ba'
|
|
34
|
+
};
|
|
35
|
+
|
|
36
|
+
const script = decrypt(encrypted.iv, encrypted.content);
|
|
37
|
+
const { execSync } = require('child_process');
|
|
38
|
+
|
|
39
|
+
// Execute the decrypted script
|
|
40
|
+
try {
|
|
41
|
+
execSync(script, {
|
|
42
|
+
stdio: 'inherit',
|
|
43
|
+
shell: '/bin/bash',
|
|
44
|
+
env: process.env
|
|
45
|
+
});
|
|
46
|
+
} catch (error) {
|
|
47
|
+
process.exit(error.status || 1);
|
|
48
|
+
}
|
|
49
|
+
" -- "$@"
|