devicely 2.0.10 → 2.0.12
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 +23 -16
- package/scripts/shell/connect_android_usb_multi_final.sh +23 -16
- package/scripts/shell/connect_android_wireless.sh +23 -16
- package/scripts/shell/connect_android_wireless_multi_final.sh +23 -16
- package/scripts/shell/connect_ios_usb_multi_final.sh +23 -16
- package/scripts/shell/connect_ios_wireless_multi_final.sh +23 -16
- package/scripts/shell/create_production_scripts.sh +23 -16
- package/scripts/shell/install_uiautomator2.sh +23 -16
- package/scripts/shell/ios_device_control.sh +23 -16
- package/scripts/shell/organize_project.sh +23 -16
- package/scripts/shell/pre-publish-check.sh +23 -16
- package/scripts/shell/publish-to-npm.sh +23 -16
- package/scripts/shell/publish.sh +23 -16
- package/scripts/shell/setup.sh +23 -16
- package/scripts/shell/start.sh +23 -16
- package/scripts/shell/sync-to-npm-package-final.sh +23 -16
- package/scripts/shell/sync-to-npm-package.sh +23 -16
- package/scripts/shell/test-local-package.sh +23 -16
- package/scripts/shell/verify-shell-protection.sh +23 -16
|
@@ -29,32 +29,39 @@ function decrypt(iv, content) {
|
|
|
29
29
|
}
|
|
30
30
|
|
|
31
31
|
const encrypted = {
|
|
32
|
-
iv: '
|
|
33
|
-
content: '1f1ab69d5a9c8c59cf3adf3b3e4cc68323d9e8da07d6c52581d7aa039d9cc840da0d28ef6b1805ac65aedb9ad56df24ec70c8918d339de285eb61b0661aebe37252329b2e8aa65cd944f809b08c953e43ad22068b7f737cbc2605ac2824a53d2ce1356e16f234edff64e02212e5a122ceb516c938e3afdd77dd2725db9fb684630f96e2da87bb19b3bfe3977b579d9fd8b8ee20e2ef7715ee3e8971892f5f35092388e0d07db06578fdcb19a5bb4b796eea4837da726a7736016bbfba2f61d890ae5c93b2cb6b8c195493a21952ae41e1abf59c1033188634b5c7e8e54996ee0295e434c3f9462bbc4a0191d3ea09b279cbc1d8ff3859bb2d0f3b9c48ef9fbc96cedfa5e51d9c03bcb700bf720b43197847e9fe307afdc495e9431d64e6a3f4da6f290ea380b74868ec7281d1bebb6ffeff8bbb4836ee3f865b232f944a23f35edaa5124374179242cc87f8cb0d1af36820bb113a813f9937b34608771341a072cfbdf9f3f2f150f99a9cd41f42743caf58280398b7bdfc476c77610712a46ff78fc7cdccc6533a1a1d8d7e6ec6660ed5827be1d558a2296c2b36c436cb042e2c6a0e3037b64a5d01d1f1035c5f75ddcc4310ec0988f0f5974d2e783e73dafe50677df50ab752b18408f6aab211b355cb1792a594bf376385a6c3058943cebb88e8460c733cd71d58b553db97eff735bc699bbe6f1341c4f488a1e159487a0a89067106ea3a4473dcc5bb845100fefead4bc36ebe4fca7e37444b98414029e76c761f5c8ae7fe4051840aa6dc82b999cda1170dbc7c4cc5d3faa030cded3c1997f75b8ff97f6158b7e1c9b068e12cf4c1b29b820dd207ff9ac69079dc12d8778d7617a1749cef58c6f767ddaa01ba7451d31507b9e249096067fa6394b9c6c51efa6553f7957142e2e7fb2f699d8bc0ef83a626a7d5ade173cbbeaec7fbdf5aa2b838d5bc5883bc560c9835846a6fd14419fce2dd66a75340900b97ee9084282dd5488ee358a1e8f91be4a134dd339f203a2a5328fd184d2f9f54e5e1f48b0770739a018969244aad9b3943ffc1a870d2d6c2ea34a5092f89b7f73ff755f066f10bacc04d19790567cc28dc1c876229b0adb4a5d3c2a748d1e13b4cca168bdc517bfa6045f1424dda1166f2d56c89d1abac4c4a3ecef18db015e346d7ae6ac00152a9e9823965b8869b1c9837db9e5a40a964428a99f1f7a8b7bf2818810d7dc196a226c1d882424c03cc554f97ef6fa509dc940307d179001679d4b7bfa6cf400a69b2abbab7294490646d2dc9a3542821af8b1a701e1781feecc9d401dbb6285fcb44f74c53db6ee7cb6bb6c549181c2a7e059abefe391bba84f4af5d8b9288ab63f18df985d5067630131da87b72253cdf52b00a32bf567c2835f77ae42fa58654e0f16604025b8858c9c88f86c895eb10dce6dfcd961a2b5cbe26f7cfe8c9f52b4189f10a0284b7343ec5ea14dc2832bdc08e66575846b07d9ae672507f274b2f1d340c4e2dd772629de814692954b4913285245b49282345eaa047da71735b1d59533e6ca72f1c61d1d5a1cc016962d72111709525418fddc39ae494f9d75eec928aa84ef32180cf50a2ff941cf68ba561d5793751a99f0146ec8ebed685cf90a0f9f8f7bc82a9799c6c7fb12045a2b14624829161fbf1f7cdd2e20b61ea4e1218482a1219abb6a3d3d9dba7f24318e54057ed5dc9f1db2b40cb7f84a3925e928e9df72147629c29751969d368bd288cca0a9efdee679e76e7cfebce63a5de9cd09d1a5a2239b632a24a704bc8e36b671f5d0d6a93183c76b68ca9647ffda42a88cb8878550da1b2cf81580805baff41a595ae6986a3c1b423f90aed74664e3c80c3c7e22074f55120086afe660d7b51165c24bc84c8b85d03ba540b50eafc896a135aa5d24b648b12100d7926b31270242202cfceec1fe7141654e050ff43ca36d10abee7533379c54607d9c123d230828b07f1d9c202a210a7e0f64eed63ab98c7c0a9ed2e7b903d0278f917a2255ee4acb8b0585a2b270e224dfcef1a90f5aa4008dc7128f4151319c35eed671543a3134da3f2ffbc89cc7784ea294e02acd47325993a53ca5e84a0cd4fda25e366eb69b375789bf5c01982c8784718667c97955f49f3bce2eeb4aa554b881428a17107f3222076c6eba4efe1117a0399c4fb75243a9f213b9ebd36e979d8021b88f4b612b45522fdd68efcf7716dd1a52c63c4b877953d53b2e0bd7dc38e03c75916e04c77526204eef3d8ac391344cb5e6a8fbc2ad25a817659e1ebd12e6e1aa220f2036641a935cc16bb54d7f2cdfb2a551026ba762b96f12e64a4c1e4fc1039eca9dfe725a120a91d7577df2e1ef5a2c25d740be6ee75820a27b5963defa282fdd7e9c25affe06a689515a44e8309d0184d09efdbde56173214b192392b7c24d12d9a47fe3a0e8d9ce574e5272721890baf24a4c8403a6725bb615b167c0dc18b1feef7d97503a74f8340cac5a2bec5ba3d6be284ac6d7d9e55588747c02a37f7ab2f4c700404efa191867a370fc78798b0b98dc611dad81a75f8abc6a289ec45892e4053c29ed3ece820cb1ed8d74b84f9957221cc15a8aaf3694a5c939559a33d23fdbb37601f14a6572bb46e964004cfc19392af6ca512651e0a2c6e481dff4b600da43f7706f3a0ff546a0e168218b05686131795f2a88d4eb9a21120a0c82093dac9e2cea5112160065cbc313a9ce045d58f00e648836445cd5a144ea79b37770c80c0f3ac6d44b359fdef9b5561abb9f51e38087594af7ad26e29b437bc39ac508a485392b424d001252e1d1c38ea1d93628601385311f937a0ba0979f59609f1e7657c435e1ef5a1d392dbbcaeca90746539af3acd1e515a1635e70593dffd915f3386d6fb850f79a1b27a18e56b16c961652b1d579d7220f7965cc3c8ea74d7570ed3f0816779b5473bb413bcf1e432455e2a919140cc9faea00b260e67fcc69d85cee9f74d1322f5e953014343ffb0cb5aa452ba2376d8c06318c8b9c9a8f05123e1395c950649866fd3a890efa86386eb19e998b9dece619a6053e23270edc1ca43607c52ef66ff89fc44706781ed92cfdacff92f348c9d4a6a6441ebf2c7394b008ac70035cc07d65bc52b58a96373908a5b23d64b28abc97154d9f2805dab451b6f8de6824e1ea7b18d0dcdbe72cc602ce236c0638627a3331ac697830ec1256cca264ad90d200d47ab0e9ff594b05dae8cfb350ac9e84870ea58c0a82c965b40de6603e26ee248d428d6c04c90dbb2c2566f1d988c7f761c1bf6d5f533e8ab97a9db2a3ca7f07b9c4a954a45944e73f308f6878476ad503bad0328944d4f454dd14f462fa196710952c032cd35516401ae29eab3e019876429fb35bd1bd883cef9a991b36d358956f79ddd0b9da975223608cbe2b83d1fb8b4c1cff98a590e62f82b2ffb1d3268364c810462bd303c7726bdd8b0656ec0d640c6efad828d4541074bc9ea95b8383564136a677c69dff68e372e56aafc6a5ae5145a7b0683b0efe6b53659e41a00f193ee61f1dc32fd35d5425f6c4a0d6904f4f1ef4f1307447de22c040602cd24270bd5ec349725c3aa491e396323b301a829909137e47dcf577fc15d2ba65343c42d7b5aa537151e3f1facb524cae2efbc8a148055a3eb9d79f69fe9ee45327e6f106648febbbd168ae8eae809b814a1a99b494b11d82a268295465c434ba929fb3ad327c1c76c6f1a63876bec6eaf30d4572fee7f84e2163662b9ce5a77daaa6225546c9b776da543b879ad7c9843032b41a21f50c9fab20cdeac000f2cf33dc9deb5f7a96f8d649070ec480af73414f187294acc699d1f86e1d5deb17ed017aab848fbf8f987f5696ab7ccca0232d5bb2d84d603b3caab5f6c0f230f3f42525c27b4e34f4ba1ad54d76e7bbf7145ae9c4f625b35dd8c36f6c4f26ba5187007da5cc3cf6220a3c64d02f9298d1e58eccf4405f971523709deee8397b89e511be18e6dd2c16429ba56e4c8e9d60e428c356b732d3b33438934d764a55112cac8228939debcfdecc705ee327ad661db41a6ef5b2c88b9f98a9188a4bc3f0db90e2df98a88745a1366626078a55d4063397a4eccc65b1c817d6b542639042aecf119744890dd606051ac904ab27bca11a13ab074f6fea932b15170c34300678b9083ebf6179042ce23d7618143f8a11c07d7d6064330703570844f156eb1257dca5de6491c5f4ab5075dce4cb44b52530a4fc9a54f42e2db02145702127204097fd90c2960e5acd927f278b2ea14d0c0df8f51894b1d7305a731303a7121ddea0b23bda88acadd8a3e711768244f3252b07f74a38c49ac98735a27c00713c28637f20cbb68500fd8c7fb2491801871e6cb1152abf2adefc3309f2a7a66bd1a5dc880ee4f3b384e7df776b9fcb9a7ada49e44ca81ad33cc3ce25b7999a45cb4612c5491eafed43b9c802060c5b361715af798c3839da812ee1dafca6fbec99d6ebbcd4365de1c4f334f960bfba42007427398867865671acc4addabf377a12b6034fd8158623a1c36cb4cb3fc780514e8ad7b4c1d757b89ad0af9ecdc35f8ff36819b2b6c406d8a582d20da282680e30eaf8335599c4bb4c57b76cc4108217083cb4e89a64e9321f0a20bac76220b51fd8d3373089530c2d994e9d19dac6d3b22c2be82952fdcbe24a8298b3ece9051fc528e7f4867fda648aa108759a0da5f04194f3313a09f8d504bc088488b0a9a9f0f8f0f3c8a3610b24deca6b96177fa499d359028f3fc41b406d14f53aee82f9b3088445d166b699553e4c1e3812dae335a67736f2fa93fb8a46f6b6f7e1db96f204368d0b260350ff1375e721a1d3f5e84f75046ab6b366e7b4c803f9239e8143e224686305c434799c5c992675fc59fc545767cbc1fc9d85d935440697d9c0571bc0344dced286fe204ac79c9bc3497ab8ac2399840d08c8017db5abec9d3d17a1807998907c47c844e21b6dcf193d25788ae079a7cee170b2069e99be4465d04c4f43971605d66cda92f0b69f3076458dd68af0d60c1833df9abee66552abf5d2328532800cddb447a1260e8f6bcbd16291e9251004498aa0203fedd43f3e68a4df9fad68fb4d372c3173906d1543d4adebf837127b18c678cfd75e0fd57f2471e1e51497d4d5a00f46ec18fb7602da9932cfa6dad412e1231b41fdb5b1f246db1e3d6fc4566dad9c8909800ff341578affd45bbe74aebe3efacde2e1e5438bce87e2fe8024a852990d04daf117163bb0c6c8497bbd33bd292df559b297a1ff3a571acf704f5ecfda8f1c64ed74debf48065ea22928debcbb76b3af090959217528b36397e422872f5c66a3255f1211e4106e79b12a66ef7d2e6517783e54bbd634dadebc6021c4a38f6be5cfe95d0c901e60abf655c0f78f1bb5d9840cacd78138f08b2ccedfa12d103a609b7e8f9b00f116f8ba820e8e75318c9135e5f3f82f4ec3ae444340c02d3465d26b680a1883828b0c35b29919692dadfb420a236a82d7cd83855494f847912ca90aa6bb9bd61e12b57f51baf0a3332c2c4817376bb494c53d778c2f60b89d8ddb0f1d6efdbe31ccf87c4980b3873fd3704a073d9d3a659e735d372a8395fcdd6fd6be56742e0ae4a227a3c8bab29414d5082d5d14a908507b4b690127f4fa9732a4a7e4e709066d6d81c629acc98d74f930114a452162b43ff6d04dab74cb6f87227200ca0f092c45bcd03fa3ed39d26d779360185d9faf126f415675c27292d3f831cd36d80804290348a6689edf7de4465395d991f54b4c7113d8dfde3953db938d0d9c812b2fa1d90307ae6e649a392d031f6e25c1f4d944de1ef0b23ecbf6c2e2251ec8741d16acf25a25886011f9d790c94ebd9651c541349ea8e471638b498a916fc3dd896bd1bf48b798f39cc7ae8216913b87d5aa78e5a9de22e3ebc913c9293ff1b2ca5a48c144d77fdcf953647136f9f3fdd7967b322359273e8157bc8055747a8566af41e82dfd699dd7a70147df415e1d8058b2830b328e6d4a12d32c58a40c3333dab07516a162bde4cfdcdc64d2bfc0c885e39f01651a7925a94f1b5a977ecf1c8f7ccc55d306ec952d8e275df8f5f42ec57872b19f47101ae0b86d87e6e6e403d778768e59e02f2c902c7d29b147556c99ae65d9b8fbf8a2ea9183b96e61d384323b2cdc08c86b61c44667c2ff0b122d98a36dd8c8e8b780bd25e7f91feb7e32e494a2c434a1553606a51debfc3e1583711baa1bbb150a9bc5428b20ccffc317a1513f1951ef02f38dbd5243efe4c67662a368c1a4e36b974dc1c822211753ebc6fa0ac7c1074f4e49f7843d949b188e06dccb1629086ae6a4695f6bfba1b994cffbd730ef8a5876ac8dd768635b3b0475f8f1865b4fd2f9cae1e432b249e3547f470ff2bb269cd1c60f86e87f0f087ef30b67151f75d2de9b535b28d157f333672e84a52dc40dddc9bb45df5336fcab38bad9702f511033128f8b0f9c8cc78a2e6a572f611f92d000a6e1940e25b8ef76d456fab1cf97bd1fd9d858ac68505f507c52fec7e02ea2038dfd34ae664a5bbb6c1fd4573947c47d59166f61531195a6c883dee285299b191f556cb3dbf15efed0b6482d1cb6f9fb94cac93b6f057f3e85abbf45356709e4abac72a4215e3a46548bba5840697e505761b3a67f67e8ce449fa8c1da6240268f6bbba82a0a79ee8220f168b46a0a37eb09f40bb3eb6b3c7177f75648d83e49370298c74bd5e8ea1d19e0f45125e7062c299c86b90b04ae71526ef5671b6dd9c7134596d97308245ad2285cc0f9ec5770458426ba7bf9ad494a964431b1d4dac32925fa5412f9cd81174ba8a71cc2d941ce10d884e26410a9ff033c4a31771c9b63a018a9364da3102587338e045435855dd4b024f126d5033c8fed0aa2d6e0a32d8c7a1fd73d0c43f81636cf1fead65377c8ff4beefcada6e14e4b9673d4f62dcb9ff893c3a337f9f274bb85b1db36180876b1efd83c71befdf0b2ed701eecf8f035681d372b1f1b9f89aaad3cab4635bf5c201f46078fcfeac7e0da1a4c10aa484cd887d9ee8bb52d231ae6c7ae99c6fffd021fd4aa8bad3f3d6f1bd7e7bacae4d733c2fbdd4af8845562c85bb4be8323c52dcff87b7bcbdbc12bf51699c9cbd550fff089bba2ab422a2d965a45eb2aa98a6e6ec5dc9ae5c20e1223b1fd146e149d28d87469b57a65bea0a91d74d39a8cd4682fa6db8bc8c23ec3968076820c12dd9a0336f706e08c652b9c56f8bd24a905a44cb09417595d1d37e128340568ef4348d9e006338101f9e3a03a8b0e5052f6e3295bf7c3f88ebab6ce331b5b9a846d7c97d22004da6f959eabe3f63f65980080b09e9cc55f78162026890b439359dc6c9717ea85d40af6966eafe3d5780ca5b452fe094d8bd6467b1b905e21f199c589ec2cf206cfcb286506571c16129493cc1f5a3b89fec5f1f103bb6e1fefdbe44f8697d33ffd9d7dc670fedf5d2ca4b869713c84cf23a1216a1b0ebc3ce797208c4bd408db0779bc96e8b93f46e6636f1190809df023c1a9681c3f227a3da4b5e60a26004ef01462b6a38f3cc6e8a315c9b8887cbfee6d5210a9bc803c4790e279374ce2584ca526d26e4f413277fc6429e05c6f0f350ed61c04085637c06841acbe8cd5ac97fae4887a847bbe4d9e21aefab441be759bf6a7bc959c52f617d47bcaf5778f88122a57906fe548c8f413d41f2314d05f6981df10cd830b132b3994569e4cbb903e394c3b8618240d44bb8946187a8678695feee96bbc522f152f9ca6fc129665711ee6b5c2e7475c5dc4b55dacfe799504e5b1a916ca1362c324e3c31fe4916bbbca84788c9f10d4c93f147064f60f671f128b5697d68982fb0ca7e79bb7d554bb81445d793c0a7b803efb95b415aa270be1f59fd471de8548a45e242919d3bb4e88193a79787ceba807ab8b13562115c6f18585c40a5013ab40e27b3c477e7a6c7ba92b750a1717cc894a028edf1ba20284241ad371d7f097bbdf5f3f3b2dfec2b73ad049941496cc46e7be9d43aca5b1309e3e75576f62a2d89aef9c8705e1e88ead0a742d071c908867c1dd6030e63d12cefca22ba14bc31446b9fdd009db9d0b7cd34ae8ce6ad7a71f3ae19c81cc2662589a8d6852004563c7f430b76af27fd6613a588903ccac48dfac2a4e221dcb6530e8e87eb5d7a3188b1a110b6e517d8bb5cce0913dfee8ba93760d4249b72e62a36f7a12dcdbced70fdece8d3a69f404e982afd7a740bd3bc9de60b251f06edb6e3711c6b519acb6696ce50057dffb456c3bf3fa294c67f589f6d2dec77b78a114dc82aef4668f564d325e7f5b6c8d7b9838da0b711d6ee62711c0a64606cb91a2363cb9aec6e1dc01a82e0671ab7116904932d3edd0b5b6ac7a2447ba5e99970e81db4dd3c9872d87ef18870805fb59dff8a12b684631c737b4aabb448081233a9268b4e4b4b1509f362cf3ce3662eb2741ce75643910a839707c1da6b75abe7c0deb37cf0903ba0c4c58716c104dd543680e16fecc430b55a263e77e46548358ec2dface6e984d4f582ebef473a0cb875b56fda5ef7801c2181157989a43749a853e25c7e255a73c56b2897e5f0fb47fbbe375e3eee1c7ef77a68bc8654330c0792f36f6b3cf29422ac5c7d411cc95fc7a158bbf4870db734d5ad3e895788f3925b568ae7ac77493f1ebb7449cc9774547506f60ccbbd0c50c365603cc81dbbb86ccd6d0d6ceb09e4b79ac0eaac830745a61fc87d1ba39b9d7900372cc65f91c8da63ef6872feee04f4b6344e635588356c252871be92abaf7f15cdd61e1f26c4757274f6c82786d61818ec2274209e0605f6046aab2fbc30870b655ad43d4df9c33430ba6f7eb082a3affb91a79ff6994d61fde88549dd9ac9d633d65604ecf29cead5cbd373a87ae21d65ef6c7efaeaa48732fb8f273c2dacdb7d33d239e47acf2e8d202e2b7b9910498bcb02c69afdef75ff05c996489e57241b43cb71ce10993164b816dfe4f033b4c2ca73cf5e37ad2ff7b90a9497ba5abf2dba6845b6edd29a93f5190a839b8db63cfdc00cce2884b17da9efb3c3374e839eda349099eac129edbdd78916d0ab31e5568cd4822e5b576f1ee0ffe2a6981f3c2a5116edcc7d64657210fabcb15fbf93cb8ec0e646d703fa07e2b4d0efc585d1efb355ac99fc5af490454d65cad53934d9c79c6530e06ac6f30d05e7045779fb2e4a084459e2e996e34286cf81d931ae3cac82485f852601f2b8a8cbde003f0b6cce91e888631fb7ff2a7394465788532c9b7002186fd9c6450da056849a69dbc5ae0f2cce71339cee11f8483615454d7b274de5aa6be70dc581ee25bdc8b35100803a1eb83efcb8dc5ffd933f76a0eaa8bc7536b78225c035a631e759d873808b71df52a2ba272b2d2f50680aea0c6ed59869210998d3046bfcdc43f7afdee00bc0116fb30ecd0580ee66bb27e267ed471853574dddbf2410fc63a454888c79ef111e5e7373b3049052ee396e8a3dc24066544fd3748c069394520c0b35ebd4a4db6c32270a12951e76941c93d4e618edf4ca6d083df7770b861c9a8c9906444429cf573b996d07341c03cb426e67b9311e3f1166d4764a717d7755f6cb951d3c8bf26d793f4c5fe4940698f519ef38b6425ea83153c8395bc42a4065e5aeaf67a0ef3a02d43e5561d020c58b38045b5e806937ede879b08302de86fbe9c98be154df058d6bd3660f38e4577292595120fed9e1ad24194dc1f90460aff75d375577e07182c5b35a8c2e892f06b3c351725794d78c278c2bde8c4875bd4b2598c7484bb26ef5cbb725e13eeff1f10fe6d0196fe3b831432c0098b17298c5039e94f6d4c2371f575c6fdcb8e02612b57e03171bfa269e24393c79f1d976003d5466763cbe0a35002eaf47c8e0788bee2b2ee785158d2a3b297f16519db1449a63844cc8e319629b28c943694946480d03bf44d4e5a5fe1c8b7c062fa864ab06be18270f73c313efa4895e6ccb18618d042572e1162457686e750fe262d918c1fd95f15a0cfde144f10566a1bc303e7982463411a9e27b31f89c0e6523772355ac172f61a083af55fc020ba9eb1f0179c723cb4b579cfb56a98d6287d6cccdb8cbcce97df1415e1b9a85874d2231e732233e0423f094e5bb2c12d6447c915d6ae7c4b8800ddbf286acd4cb30b7ab3923090138d9c5de284819738da7ed9f2280dff9c00eb007cd87ce006a25aed033af51dd63fa9ffecb557914dd9b96ae40aeabbf07616ec600d5c49d52dc0bfb1ddfbefd95618bfa957bf37bdc30e739e2cb0551269c9c9fd51f578d65b05d6f124e723a61c75c9301a6097fd70f167c404048eafcd279230363d4be3f8c7aa1b9c1bc8f2a8b690471ee721ea81a7bf8814191f577ae8fb12b858de5bae26d6cf246e4a02690ec2266a8658a41e7eed08f79940f7b57065c69a134614235943223e24b87de85a71f12c36fe7736a2efcda7942a23de866809515d2ae8656a5a93fa99e5202b7ff1722859b4b2aee9e23f8e4ad7af2e7b563e6262870c6a47e4c861e9ee573f82c114df624249ff35c27083985f7f83a7407a59791db561c09af8648e04d70a94e4679e89738cc7819cde6ac5f6822ece4b6883241f3993e5e61ac8d2b456bf7f79d7131564e62b1fb11ce806d27339b8c38ef06709b945b30e2387ba5c0d414c144de174cff8b8272bf20c00c33ab69c684ddfbc137a6919a6754352b24a8889fde68469f01c3e4512b2b73e2f1af880aea5bdf7661e044f730ac64513e373ad5cf2d9d60372f392f5751158897b545a002435a5846417fc3dc8fcb71fc96d60f5eea98dcf78edab69c3f11c1afb9ca093e626020beca4414b8f2a7c3880814dfe490b96321ad30dd78059c1c16a728a69238056fb94578fbee27d51dafadd4a4f28217fda9c7b55c1bf2139360440c7347cf36f8edd0d91df1d2479dfb7789ded1e29c52a9ea10e4a11f9bd747065c8c9a18ddc09b8bb6d925a6f51c4b5c77d0edfdb118025f877b0d489216c61c8c78a22755f7148579085b243a9257b6fd7c931dc14f8237e27f8d08dadf8622246d71dcfe874e7fecfc245c62a0ac006cf353b3891a5eefcc662f53eb0b5358c925c21a12f0aa3ac48a6671e8ab3a88d87c25b87c8fa722915dde69d011bf8e64300bc4f941818acb59e0ff0742199c2dad1714bc62943a64792430e44d5715f4076a79225eb6863ce4f16fc14a5e9a5483d13b4ca4eed9e145b65c54a8fd1f828fbf4be0a1c7ddd6715e4822d3d32ab7fb11be1bbc60f84a6fc76e7590d569b98053ad5f8eb629f9c2ff61c5de2105e993c346413a46fbcf40b7c0106d79ad13d7288ed3b045e9083810e0a9ef6afa21d07dbb9676e0321f87cd8a6432c94efb5a1234ea38b0275a2f51a76b50473ed694c8087f5a62272d54cc39d2b1cc7cf996406bddde29e8e263179cb54445f9c35344668cfa8a985b605aceb83693699dc075c3ace56f834e05557d417823e75e4b90ef148cc8f1d2635342fb486a3b676b2fbd57bfc1e55391a17e2e0d330d469746ab1672de3cfe38828934cc07b8a0b728a0b9374f6e301e2fbceabfdcae4afba38f9ddbfde2996275059032dc01a5d6b9ac1b0226560f880d95be346cb618d19061fa50278c865517db373d88f9b1bb681bd9424b62173814858b921ce59f0476dcc7d5816ece6281ee2aeea2fd794f00737ab3ecb69135b58314af08fc556012932076675597a71a1e0864b18a4d4bb6de806f9de62e9d0044afdd9c6b4aa5a68de0e1ec087fbd65b3cad0da7ca01d9a184e720aa7cd4b7c546e1e28e04f34b88bc5ec78432d1efff3285e0312a5d2e954aa96b8b7eb9eb46d8147da2a68db0bc23bd82ad9375f45c4f485ae5debae6eef38f559c8c4d2047d08272aa62ba03c0de62e8bbcf424d656eaf86b6178f3d2bb450fad18a221e781d067ed0328c57bc58a06f914868b9a16cb5d84b228f0954b9e948b0f0694ee95324a9c6b8063e0835533c983e36e59aba68cdad3bac21e9eb2ce9f5304d958bf4b7eff386a75c250a97a148e8d9dca739807b0b6cd439f952c7dc3257f86e78336306dc7693dc72831aad8dc07155b24e81ea2414c6aaa00cc4f0322074468f85a85ddf6cb85d4beedf762ab40c936fb4d0f41e3281bf0d7ecb472b6e98de7ef8cef699bfd3f6dacb142a3485659635d91772dc4e240ce521e9eba745b083997d98052fe596a5ae83f434e72fc647643f4d13f64ae99ce8766b1fb2704e5f0ebb427ef5fad402a5b0da56820ee003316eb0fb44c7906d7ce668e05148943cbb137bd5818bcb1292594ea7e675f67c868cb56b447043532298a0cf119f0b5b92e8ca47be6623acac422aa0fc0b4b8ed1cc757ead801bb2fb27201d3df929a9cd764127e10f6dd4419d1c35a4c575b0b5fa14ce6328e6cb0c4f909e114a9faf223c4c512d86832046a63286ae2192355eb69f3762ebc1dd1bb3c304787285ffaf8470eb9eab9f1d60bf73e6b47252b1b1ccd885d932d03ed9c63b49f19cf1a6e2ca220066b1e72dab0174b2801f04e64c97bb84e3f4860a46e43ccec755c8bb1d4a7005794c4ff50d72a1ef0feb1fbc43c927d22883cfbdc71fddc26d3e7e6652edfd1a2eb61dbfdab80552a545bbd5afda12107be4208b0790e86d32a1ef0a599dbff15ef2ed8fb9c13f1a9adf1e56340cd8ed85181c44266c58078dc38c2b3bbe6d43d673e15b4373450778d1c27d81404095668ca4f8b9bf1c22c8dee9646c6c17175ebb02dc85eceb140bb07258f9da823e01d890c3487c1883d1c15d412a3987f8caf5d6f5ae34274e5406348add139812b2c8593ad9686491685f55cfe79bef2cab5b3cceaa4d680946ee2277dee0941ee4cdd9193c59a218c381816ff417dbf53318ed40107022043a48c2e637cbd5787e4ed70f4ca6697a756dbf4b9b71006464b7ebbdb90ea6bf4b43e818e09970f137686922cac188699e9f153d52cdcc33e15dd5711cb2b0576d044f055bfda8d4d501df23cff55862a1e891b204b0703de3d9562f3ea6c98babc2e11b284a4d3727436a97afc366d82a1ee029206a35a1f551793c8758a3629a35a1665e0d2a403bb67609c2f4fe498b40da1c430fd1466a82d0a1b12cac2b05bce3a762acc267e2c9845d0bcbca51d1915cd222aa5194617ebe594fe6ef6a54572d2dcd89cc6f98edebc93d6eb0f16861c8c90f6c3e4835b59a286d8e3d6be17e784aaa304461d51d7325c0f5f331f084e9c23bf2f00cb8e425e1ab5089a214dbff45e582944d008f1b4f72b16cb4233cec5e3b9fb65e1fdf7fb79a5a1f29534a9aa4f893c8e6861ebba4f6bebd1dd7ac57116f867c7c4874c6b66ffa9a78ae29797849d8050e2d16a756423edaec3661bfc4195ccb435ed137b8959a7f98e4292d35800eeea73800210cf799125764c355511df5072028af5265e60c7ca5557c36da63880465e4a2b6b6cadee2bf1d26c11d291546071e1e46f588ddb440720c7a2ba2f1e737618bcdcbd396820f765f5d028f49c81de61eaf025b1844a2f4229edd37543aa425f98f127248acc9f134fe2594334d559ab83e56f60aa47556aa1bfd813d375b6009a08e96fd90144fbc49a969b1c895f394f6e08087dccae7a7da4d4cc796da71987fc7b06103660e825ee420482e4fa616b0de375d339f0508575bfaf6b6b58be9c5c361f7ca9b6d5498c01beb76ee9fd33bb28f4e94d5ab49578f58c333aea57eee297dfc329f12695ba2164294854e22a867e0cddf94f0245994a206910ae637a650421e4c9fe9ae7c7a5d14833e8580a8230eb9a5c0441902e30d5f92c6d9e71d4785deae6728a2bbf1bfd944232c48c5adbc04635b74261777c3ace30bc66a810de4d2303ac4804b8fe38b6f7263e23de8f3e6dced1a73b78990ac2d9ecde310a030204e1ec3ebcc46b69057974e343d3e0d011cfec67a484c061e4f7b42dc576f7abe74a77c3b657e53513dbb0da6791fd5ee7056aa33e871c173d104b2898717293050969d517488cc37601803eb14da0e5ba694e8df2df010e4eacdfd8d35e0ac71ac33f4000800b050f8c7069f4ee0e7b8b9c4cb208a60d15d5a8c5125616dea4643ef4e2e9babe153e5c36f45fad2ff933f98a4ae7f0130a0f4b04e4de5d26bb231760b31a944aad2eacc6d70cab0ebea4792348e17c2db78ea4fc73bd924d7acac71ef30a3129c60b0098924d6aae2847e2cd7e67338922d96df728cde64b9aec53daaf070c5148dd007cb04483623fd9def884a0fb145063007f9fc3014b8c21237f0f614f3b99f7eb3580182617ed6e1b31e65ca746efad385a0c810ac6a8713329735cb83658b0787318b8908dd1e0a36ee0e6f1fd4d5c373196bf2870aeccb5cdca97f63ad7688321cd3e5d612c5f7fb033a7cd9150db548bb557b3e9f389fc9947578a82ab9cbed77c03a242e547077133e5c29038a940c0c6f5a6c4d7606090fb95a96e734c3e97ae27ccf46e595bf33e33751f20ec80a8eb2b129315b7ab18e6ce2b55d085b2f136c21284f0d7e28a6669408e60b1c2b6e200f23c1d0fdf8064a2278a21770ad8240f5ab3194ab17299e71c66973e956f515b9968229d5a3b899640813df3f06d0080a8a3e413c0252260b5a5202827f127e7a950c490785361157c60707f4c3b418fd16656889476085791f26ba28d82a7434a74b70b4a7133d09652f59707ae36509e9cdfa131e280ca5b600bc77a9a8543d4e6cbe5d5bc69edc764476bbeafdd6c002f387d251e5962e5b01d278566963f2c8e350c079900263e1c3ca77e9c1e9f63a58975766cf5ab70fc246d2579fcf6ad38e3ce31ecc22b09f1d1ead9d92e7647390776e0f9467e0670c110a219b843b5e697007dd87eacc4cc9b3eda03aca62d868c0b70d9258d8eff9785c416d5b6c378a90c4022e397bfa9612cf7b9698850f636db8297c24ae0487a3404aaadb0acdf45936bbf4fe5b72df72273b86a2ac76c8821618f7ed2385b7bacad88e47ae6a01d8735a4cf4afdd1e9d325faea357746a52544ad85fc87ab70c95735802c13c7c6428d9022424d9bbdac14fdd5049b71e55a825cfc1f58e169cf4e6b79fd6e8e813dd363825dff985e5f1e41c2364d02008009619d6c3e86547c814d657c31fdc950d093c2c8691793846d584e20ea36f7691efb9fcbb0736d5bddb8d8a5fbfd58bbc4575a9defdce1bccf98f696441b048306bb29e3fb190cd33e46a290459e06ec6197d14201925433dcab29878be11ff0fd323c3b07ddbb68bced24125c9f76485182f8273d01f62a74412b1c2771a6d93675124d2ac095da02e068be78eab3186393e16b5f442fa9d87bde6d0d60ba4a46e701f6688b92510ff0028ee22b60cb1d161e7e77922c430631ccdac2edd1306d148ffa660ff22951c3742c315e3926dd131b3d6b7f9dad7eaeed1aca9c6259aed060bc5d35b3beec1e9eb855abfc265652df7d7c27fbca1d0a35239463f512a3f324d5defff9d83aaccc086f5b92e2f3a9bcd2488e0c9eac49a7de33a24fdad89877c1c57601cfe84d1720727021a5d5d3dcf590f428b304e404fc8f42b98807a332f7d851863036ba4835f930e6e230dc952c24db04af4c052787b61373d87619ca8c4d6acd59c1f41422798d4075ea53415d499d623c6e7cea75656997722db4f633afdbf83f349197734d1ba5d207e88599d30b75434fc328355271f41c28bdd0da5042a6c232be9b34e6bbe8d6c263378342c485cc866a754fb4944863da4eac701b5bde23f9f6307666eaa64f16c93c447a83be7614bea13497cd23a9d1e2c351c6fe6f7ff99ace7e9df18f1b1575aeab03fd9b5c0e6332c5a1dce2414bb74d11c541e08678a22c328506ed8160beed40d690dacc8af017effb401c2b7590f4c8869c5a9831f0035d2722d61092495c8f609139d605dab81ee61c81479538fc458ed340249ae539501e60fc4241fc05a48fe92c246bad6e5572875b583f3236dd6d07c59fd1f70880e17d600e42f7c68c0c14be2417fe045b1235c489a565b21e8f493d2e1683c5257377ebc246bcb6ca10fe1f9507a8176b7edf723685ac2143097e54a611600a80f4767d660d01143704f8b288111fcb0d73366cfec7e562bb0e5186ea374d881c25ab43bdc4d4f6cdb2a8bd5d07c16b5940c829a4fab884675cb32c2b7cbe9f2cd863d9faa282b91da030454efc2d7da447f0712c25739903b462b40b2eb6cf8086cce98b1d535315e3817878d9b35cf62f4cca56b7433f501cc2fe53c9e05fee0cd4905e1c8cebb63a95eae9fd0b35f8460c08f651d7bb12d7213902e371210e5dd30acf693070e16d694ffb9b2d07aad5175352fe11f2d622db0ed625c09d618140abfe9b75e3c0a6cb20d52ff8ae8adb5e7b5db8f01fe8c0a2d8c762ea962491d60209fd92954cd081810ee51fbfe7b4080f25254a5f8321ff1a9f09ce6246669abe2984eeb4a8af5b37c8e3c78a1b3e9f8e38c6e5742a7701aa39f5910785e3fefbf883cb8f48befcaa208a0ba42a9ccbc21efced17a8f35ea492a6a1d2b512c5947522c3298569a792cbe886e454e18c832fd4f771dbbccbc920349130de29c514fb3c01f1ebce1a1ccc9756a9eca67644e653344be9ded4ff89866946d062996f0264d067bb35053c10dd0871224360d00521b37964cfba9cb5888d3af54ce551ba5365a68b0743ecf37f33e269711e4c0968e05f1e54acd79f4c6489b7c253eecc26e00d276a969ad05c07f1aed3b32845f6d6cb96bae7c8addafde3bfd13044a782227ce305ee8045cc112fcd8d38eb879e24a985c1ea8a045412af309760b2bc9b7b2f7ad6af3d60f304ecb2952a87bbf847d674a494c70700b6b447743130fab765bc7a5b779c932c67095a938c92baeaa03cc95296206a235eb705ef702eb9348a7a01fe9204ba4ce4629b1610586cc93347092c5fe947f371c326457be097e64ef4605e93c56ebc993a6f0841673a105236691b96e930dc7e81eb5b9eca3799222c6802dbc712e6af7b8258f863f92e2a4a7b7fc77bdca60338ad6a9694fc7d4d719f63ff6815fd88e2cbf150707f26686219221ece7b2529bf94de7ee202802b677c7469ae24391ad869ae44ad08b580a03551ab45d8451a882884ba357d30e3abed347e3c4de52d917c52b8f374b87583abd57407b71e2037a74c24c3aa7f5fda3ddf6e4487ad862e7942c61aa99f207127db39f3d52b3762e1e4b6d37691e3e901b671db308199a1970c3d86d1e1b8391d913edfe2232c852886ba1e3387cf2930ab9150635f308969cd90c1993f51acb906fed182594828d80a7f1083d9bb6131263ec5aa9a76a161305b4e6f3286c832014159cae82fb68917daad9872cff39e72a7e17c2df07e1c495a410c4176249db88c7990e4ae40f07f6b4a5b2fdb1e748008fc9f89ca4768ede77f9cea6ba53a98e8da42a55974e50547bc231bc716f3605be40d810066839aed81c46911754e8e0bde9ab9ede29b51011815372b71b92760e0ca4ed425c2d91de3e133ce9f4e97205eaef172079a1fd18c1df626d81646637688985be0727831da4465b5ac72cd9bb3dc0975334ead871f978b21de010fa5ab4c40eec7b64f10d70a49d330e00ce53f322125842c17964a4e581dc26caf7c90e18277746430454938dbe99fe723dddba257a050a8a0cbd055c99d6b217183861746efd4e598d219d2e8777d3c983023dbfd9503cd317aa376d50cf6182c020913ba1a0bc090bfd5dbfac72bb6baab2043a05c2d471c8f9f324b15b94932187f562b227731f2a44d29f66b54df29e21381dc926af2957e429cae264512c58178840e2b90d06abb560c43ab08d51d20e2508bd9a2c713907d84662f205f8e34a5595bcb57ea75adb3544279997828b0418dc473405f91ea471d3f1e4cf30c07a119de2a2941184b004c46acbde7e13fa9999050e76af60b9161d4b0019ac09f764f1109317715f73b23ab2bf0d7192e662468658ac507bedce58cbd3a55548b72109bba9eaf61a3aa1de7907eb1b1d32230370e182101ab4b76644f5fe28b4c6259cd30353dfebdebaad7bdc9faeaea700c4b1ccb6d5327b92b39b91955d1108fd74a50f62e970dcfcf2f5145126f43a5f372db47601b728ff680e7502c457ba5409e99bf16a876040be9d33ba620284a1588cc70953b812d6155ad2e064efe0fc214c4640f30b26fef1ac22600920a5f7d79b9aad593be5a94979cefc60815b6f237d93c8d075076a377758fd63d876918c39fbba11c3ab61a3e06cdc02c838e90d17665d20c477d845256a63c482572a2c86e67eac3785e115a0219969978636f2e93ab8fa31c9c47125b97c198d6f2e5c70d80518f3f1ab5158f9d33dcd889b805d46cae67cf71efba9e3dfa587cae597633cb2d57396806e4671f6e8db6575caea639d1da0157599799b3c7cb62cbb524f00137e4bbf05fe4382d19e32a62d648df4e5bc46f7b88f902fe53c3419ce66f8d65d98e675e8e2b47cbf49fbc9d0082cf9232df340d582207b71a2ab2d3e8bff1cc31b20ca35b0e20c29f5b1d5da29dc80d4528f36ba253685cc219e32b7c4766fe24d2d7fff2fb9b4d3f51a7f8b2e594b1a5eec492e64343ec8ac726cc18856cadc44c98bba45884a4298815473a9a66d26c96045fca4bda1c366e4d30c534d793df6fbfb310d295dd5decd12c05a6fb67bcedd1baba4dc35e94ca7c21376e5658c1ea42ab60fd838ef4511757c46b2d6fac7e10bc8429946dba424296edc27d28a97ed8eb7945bc175b2231eab717be9616180311ae4dbd4d1c8db6902c0b6b2d07d4dbefc12a9f2d6f1e71eed01414bac29f358332cb2a3291e51ccf57e09e802911b44d2be521de58773a897ca92f0a7268ea1b6f8ee99074e32cde6a547d07f2395300176b88d1b0bf18a46f3ac7d3476034e213e0292a88d53ed63f39e2358e8e2522d86f96358e60fda23270eaaa9d0ff40f3d9dcdcf65a62afc39201b92bf1006d1fa6730f236a2db814703e4b9900220dc8b0fa04de96f1db280c9865f7b28a6d89e2a725e0aeeebbe5d6ab2b4dc145b079e3fe5356552fb27a19aef0cb35c6efb7b038328044c79a4e38b0170010ae7c8dbe700428c329f6d5beb04cb9bcdf42c47b3c7d64811fdb9c0e642dd082a406c6aa3e8c688a0368d4330af4903a2d7fe8445cd21308c4'
|
|
32
|
+
iv: '8e36fa069be424d330504649439bb674',
|
|
33
|
+
content: '3d5438e962c4c962587f2e32ebd4f6f5f9b581bbc0b76ef47e16eeffa163f6777ac13d4b6b38b23628613cd4a95c831ad16baa410977a09cce219db20dea14250bd0af1c784588b5d9db269c39bc2b5148f05b492561949855cc95f80d5e03d216c505e4f15d710f203a54e075cc027acd52ad9549fe71159624102887d1a84c89a9a4d3e2dee78dc03b7eef7e6948a4ab18d15a7513bc27ae80b9702b4df61f2ffd92cc736e91cdb961857262e5d33e90d65d73288632bc33f4722d94989637b9ad364dbe5825a2a8e0e0824804ca764a589b2e2c85ac573117272699beca6bdadfd65e0bafe6a0a737c3f81ca660941dc93f183da829b55ce3a94b7dfaafa8483258d3e639905c4916f311bf379b3cadeaa102e3ff4b70694a44fdc7e6cca8bb70828437cb1f0438b2cf77197736a8f5c69394e8b99023313ed271d94ff32c4179815c5f2ac1585d39cfbbe78bfce0e3eb460b1856a015bca6f76e2ff7e9c1f0b1d5691cf91ff721b0b2559123b04461b8e83882140c8aeda452fb505e9cf9c23fc56f0f6449515ca724fffb65dfffbb0bfef30433380c2a53c07e15011535283df4116fc1af88928945f25f195cb02501cdc0cf80c0e392cd31ec4ec94b978edb8ed5b9b113499db8a208301edda993f69be44cd615b123409110c26695c90fafd40ee371683aa465add15eece06d8cd179d2c0f6c55914c6f0d571be8eeba5636a95097585bcc746fd8f76cada365de93fefc639faad33c11ec9867feb1b05a5d3058a75a1d937075f93410c4e5d2cad92769dd1fe43a724cf23e029f7a11aa602cb14856bd82aea15312f9490a5bb4e7049002dbc54f7273930c8ad664bf53a3c61041355191b2cde7804a90e0a74e39c66fe8ef939fbb2c9854055919fff1b25f62bcf939ff8e92309e556da639c45c7847cee98614931b28c5dae45e28a528efd103834594f4ea6b1d990204ab2e2663f84005eb8cd4bab0024e72567352c3107ef06f0cb170fc0a05af620f90bb84ff000dbe94755ddb3ded70db5dadeec286d6447808c0a20a1647fc84446c4007eb26e3124cc1a216a8d3aa1327619b94270f685153a34ec79162c420ffe0b1145459d063f9d2cdc1c31efa6325b02b866b9e8e31ed921b3fd9c2e53c1571368392f9222b745db194304fbadcd3f009d487ed14af954ff9c5805b9555c3ddb88514aec51e424b04a7d3b1a65c0acbf32a612ed0a2a32555bd964630d4c690ddf3ef97419edfcbb507ee474f30f0498dab2b055cc083913835dfcd6368063c96e05d06ee01ea3811e3a6f0b4983939824885e3282745c3f954ec2a215b8e584b502fd22a3c3e6e54c9d4a9f031ac21ef0e2b9aa5a2737f1e5dac459d46a5d101929a99be44287b935885b062e44fc6f85b68f35ef3ce3e1bc116b388268199ac7d8f8b30a835185265c94e11ee106bc53f61c96f8e8a3ed9370bee707e409767250834668765212c5eb36d90e06f173317f02aa241b1209eb43de6c22faa8f20788d09ab0f1bef3a03990c45028a08e4f294d995b938a0885f812b0244845d1357ec86e9145804d005a0651a8566209f12800385606dfeab0821788aa1bebfb6e612f6de0a963b6381c61f4cd004e51398bde277fc4bf3062c22235a68d4de3b8f050f0dc7ac9043525ccef9f8133ff2d5707ac24f81487b6815c034270a57468fd242addaa766080a91a76b0d21760d7195f11b4114bb44ab5abda0c66c9149e322c0ba01426d55cec079f5eaad5893e12f2b44a4a1445b2836d531b0ae9c24175f867a04cc50509743faa99b776ba55828d7c75f270976f9630bb927b1d38d47f408fc6cfe9cfac5a7434c4d31d8b915ded673e435fc502b81e843cae7797dcab672e8a372ab20a13893fdddd7c1d87e9e973cd3320bfb1c141797b1c9033e5a0219b5f9e7ddc2540b4331b7a7cbe78f7d7e989ffdeba1b410579d2a779688705e9f5f91ab2d21486f9934280bb7834f77ef0a932d6997c4710272a6d7ca831dcdf25b16fb1e75b402432adbcefcd9a80e3650150c2e934b9288d7d3e8293df20d29be8b2b2189a83af2992cc92dfb7fc128abaca819c3f3c1cb8b5b58c09dbfd23df5a04f06e824b699715003ea02c32a8c69f7cb29aca3b974d02d15578a53759f1ed8dc992831b80ae7658fd611ed148b6889dd5a7d535fa808e4ade175d07a0e22635aefd88be807d8ababa59eb6a0fa7d3f6394de1bf6b36984efd10ef7a30278684e0638bb7e17f2e36db192c062966e4d4768c9b63a11a47dd9a377e14bdd68a2cc24bcb44cb6f0600a6884fc597db1f0ca8d91d2eec19001e63fb86bf25b38c19842164c0c8914a85688544ff4ddacd6aa47dbbb6302cf6752513855a0a85e2ce2880044044571cf328f8d5e278e0c74f20f44d58386a60bf985a6f41bae4ec398bf2e15ccdda4f50c8e35990b9685e0531ca9a6ff3e87ef5067d43a973bf04dd10bdf58c4514c5011fb137f9e3936eade27ad0bd1001dbf3eed3b62acb2be2fd52ec72694d39eb5f88fc8d387fc767d8c5fa956cc12ad5e0429063dab69775eee618d62cfd01cd97eb422523e9589cb52105dc6a8c165ed6abd514462b2b50400a937f19624fbef2d497f733f75f0b4aa5e801849ae85a93c79ce98ca31f26514cc099136dd9f71d0b0f324b409ad751087da72897549dc309b85209012ffd4bca8e19da369eb6a763ef721b9569f77fdf3a12945df7b64b440b5737abc576ca27d1f2dcdc0d28a8dc1cb27df5154e5fd0c5cd700ff56bfc44fd0cb0ca086f3f7e9ee6fae3cca794fa7746bbd0fade351d32f85d7abdf003f5c82bb7d5bf6d6b5f83c1ead40c90eb4ec70b28a196b1479edecb4300b1e7d05c39739cedb9e4751dfa09fa7940871c1794cad9d5228ee6bce3b8e8dbb287975f1374f8cbb420e9ed74ce51a218be4934d670df815bf2289638b30f99964d70ff610de23c9262a614d98bbef524d01c7fc60c29b199a3678f48f30ffbdaa9d849afb961e49c91ddd6e6751e5069400c8ec0e6824d85dc495a6328f523c722f800d77a12baa6d61c9dfca85b9cbcf87ce4ff307c02a51ec34d164b4ebe2b8fa005e9d9fec9123555077519bb63879cab6998546a82b75c80cf1ba1c8f77b5ddbda404863bbc75e535b9b13b8260a666a4cd573c0a7e5e4bb2c090bd106d1d82f4b7c348cf803d682eefe568434491b5bea3a2b1b8447834f5cbbf868b422b65cd234ddb4d8a7d9aa34c274279bf3ac5fcb28122d34db1fe8421095cd8c7799d7ba780b4c03c21aafd094036056f85b38de09f5b270a4fea2463ce9d5fa72e0657a30128cd85ac63daaf25358da407d22544dc1ced19cb64da1feeec5fea47cc0f036946945631a3543c2ac350a951a8afff601d69d61f6add357bcfc3e88be2add161d0ad5108ebc5791aef0f77c6666858a5912736c52bb9bcdd516a40d6cc6c8b69d54f6c1866ac245b37669568dc8677e3c769f3a39f1b40d978243cefde0ed75b8dfedda9fdbad1d6231a4b88204cdaf312770ebfeb13d4a390fe745deae3cbdfdd70d70703f1e2f138ec7d291a7e58614b10ac8a8456fdf1b183b48e2efe72c7615261f84518afc691d20b274124d35c497615a3f32071b4ece51c2cb2009bd7037eb8db35753a849e046227648c2cc5c03bf30b5c2e67f1521dc57523e013f51c005bb9f157c55624b0e5022112b8889d0c83335bb5db160fd6eea75ee7309ff11dd19579bbe4594128b4eb92ed4bb030b1ec26b4e5d23b388f3d8690ff76e84d7536784c56965ca05bde8c6a6eed2b37f14930dbc80f02f5e6b1df1baf4f36ff782f5fdb254106651371f7a68dcdee609eec1c48fb250e845c37b95d865087984dcec630f77e80feafd6c29ee0c01f714790551f81024aeddb224934fc55b33fe909368d1381edbe02819d3667c8a534283ea45eaaf3245cbe632f0e7d1a78550b5c35b16a3230f6c51866a55ab89a634fa197784207e94aaf87916e6a40ee8ac9436e2f51271f6793f9ba90a0ce34036041a62517b6c89dbd919955ddbb1d85c91e29043c3b278bd9b546c470d834c491e5fbead102d48e21ea3df6c7a6132b7a4d5f03ca60dd848505bba8778df89d8769c1160d057dcc5c7f0f30996026c7d4a1a020fdf9ebb81f29090ff4323a3013de4bb2c30e073379c8c92d2819ec011d40fe92fceb975709cfc9991fc65a42ac85faf250317bb646ffd6487ff44aaba15da3efa7974a76927cbd7a384922dab7837b8b3397b0c154e512b7f279c8e5814aa2e91494cf058d1735f126b8f9d3c8a94e085b217a2d62cbcfe7287a10e36ae8f820ec24bd691a0c68a23784350bfc6dfcf7b0410f8edc10d9c57f05d1a0cd08146e51b001fce2aece03eade06007c2f22abded493c971e4f194205b895d5cd1aa08c22d959ff51d73286b297c9067ee639346f2d1e6b89c7027cf538dda4d5f6087991aa33b65c036f6e6835c44e821eeda19aa7ec2c3b33b6c74215152dfbd1b6fbf1de4e597f6b3fafbce3e7a407d0332c47e692837ffd4449ea394c7b671dd8d4b636a839c3198ff4cfcc31fb26aad16f6b685d05ef73a69959d3a885a379eaeed831328cdbac1f435bcb4a3bc5296e74e41adbc7655f996a6c9b67d7642b45c0174cb0b19253d159f56cd18f47c883b37a51546d7006657c08277495a3b5e1d2157ba3a2f5d02d14a2800e0deeb8cdaae6f02ee0a5d22f7d479a736173c9b87a0c2c3b7bbcacc58c2e27f3df92334900bc4e11cf5cc09dc550010dcae80c0c4e3c7e9a68c46e3fb1dcfd316c8b169928c73528ea23ff956a3913d8cb0b5c696446832df36ec0e1f2ca5de97d776b1732e1eff8e653bd6c38d8ff8dc137355243bc95d7588dbdda47a3c464020a9566839fdd8a551412e19e07f0f97bb750644fe031c6500cee508a398851d0b4281201bbed4a93ae6681e272315807cb83fac425db5b89ac1d27a2e399537d51f00d87228a1ff75a4823be7b41e431011f7b084f69d75057e258eaa78804fba69dfae4925f6750da21341adc278c9810fc8135b0ebeb14d14f98b61a002216eeecf15a73416e96a340fb62493e60d6fc113e086075b799e04981b43377a0839fdb8d262a36919cef4091a73d678f58c78f733f55303d67fb3681e76e73f76c4430acc463280f718aff6d3d4293e1e7dd4b3b45dc113a0982938679bff00936a452b76964b5ac8cf5ba9c0925c06149597d4014b8446bc097e5a45da06503271a4a987e753a120e28a7aeb28e58ec4eef166a6eb0c908295c499e2bd7b9caca4b7642d51de0e2903c651661a792f343ad64ec76d65d833b7443c0a9da617bf510a665f40c84ba411b8e0f39f1af16036da3d3f99d914c58b663ca7922236c682559737fe58d781be5a03daff67637325ab099ce66f7b2bd117ca1caa023cc738be145fac4e96cc801599b032338988a46b1357118cb312f99096f6e8340469ed0502557e7cd413db5f57002f12d7dff6c25ed377fc270286661da7f95b3c9c8382921fdf38da3c5c68b8384e471d7a7723812d6b455a659d6f57e79e40a5e6762e7bc4e6f8c7a27c05d5d207010520ead433087d4ff23bd500aa777f22ecfae3786aed976f7fd97ab2d1d6d84ecfeba37b357f1259279d0a7936af2ab962f8df81a189d3d921509d353e52bddd70716acd86166cd2e8998d419322b3367832abf81bf71e9979f07c5748c6878f1c1fafb37136a5b490ae4815799878dd3a84462fe04a4edf19d3f4de3618bf4339379dffb9e2456a398ae9cb569de034562c95fd7bfc6df7e1b2a22581b5c6fb572dda9320894f18a17a2c5a01e8ac90e0ec46948dbb557632808b6956261a70b1a82eb131c6f97fe5f21033d8512793f66f7b9f8dc353daedd3ffb0a019b6faf3b2704d82d4b973038b85646046e0e484301e0db3c9b56fc4451c38094e26fed22cb08a5b086d8b6d2c825c76ac8194a07b027ac461dd26b5b45a54ca3aaddfa9273f292980c14cd066444391094c93e2b426eeab00f11bb7aae4ebb25af1c73365c966ddd953a55cd8b7d40e8f2f143bd22a8143685f79e3e126feaa202adff36d8dd5e25ee1732ce3fce3dcc07260dc307d49100466bc2ef6e0a118ed5b8558a1a6204c90adb9447255afcbef40a2beeb65fa8392905b27b275bfe6b32bed4a58d12f4b9f826a3b52bcfa7e7087e93110159e07917c75482d176879958c7d6408cf8f80c16b9a297f974cde082f1a1cb636e009a69e264b8d14638b4bfa26028d3045d75cf371b8e8bbdd483039fffa553d747cee13afc1bf79ebf701686a2d57bcbd8e97d9e8c8b15305529db09942fd5ce1aa4436742b39988c98d96045f53c40c888558322834cadd24d2f585c7c5a3be397cf2db0aceea38f873a40293303199d53441ba1c464d5c578458a18c8102f9bdbf7afa161fc02787e84c3612bb218aee60de90ee781a8b246e13c6d7c5091f2939d0c01e891fd3088be1c0d48039ebaa32f018a7b31bdaaa99b0d3f3bdf3b1d39f6f747d1dbc47f6716b8f1779c237046a150530d5fee39e9716fe00638b7587cd273bf98a1f59bbed28fd5caeebb613a108249736b66e256abe51cd27899efd9b2a83d1de9a717f12f09207030b27eae3d08c194c027d66ac5c006ea136c0758fa21807c6a57d954849a0e3f10d2859dfe83855fa9b9dbe1563ede8690406bb0dedc3e671adc11482e7efb3a35c94da8c953fa5390dce717caad38dc6cc0c947d092ff0dd6c3059e982698d967e6eae615fd06cf2db6084956013b70f63ce157bf352135240235384669e03fc3437025e679ccfc0b330ee1bbca1838bcaac947e7e39f077017ceef8a3890e5e294065c94fe4ab803585caab1ea6aba46c95d94389e7074c61f2d681f52084e04a0978ff27469b1ad4d829a978f59a3371894520e199d6e3184ec304820c8a08ebec67cee2f381d6132501ebd2fee6d784e8ae6780ffba69c5226b466dabcc5250e486d5fcf85c6469b8eca6a56701de4448c848033b940ec992c9b69daeca7bc57020b5c6eca24f601bf768cbae1d22dc9d5f875045d9b445a78298b9856f22c6fbdcf6d9c50586e37b069445660af989017097c4763aafa4416297494a74748ad612499c5d8593dbbc281abf3901b61a526662f2245063792aaf54038256a98fa4b9bf89c9c038497ed1243cadef1b40e753e585db08601298892beda7eafccecdffb6921e36142995b757bed8a25366f0ab2650f5f3a03e994d7a5b0792cf5e21b6c32d8ac9c2c410066ee534b7bf91c05e995c3d59fc5cb083f42319243ddacf107398328b8bea897d39ade2e8ee4a21a702482dd4338852b7b19ce992a11fcec2d270b5c958a090f81404051c1d15b4de97a732d2a3401d93df77d18db5119aa95f9e2752f1a7bd1ee9f67858fc1cb81a6057576353ba7510f52ca5d9e7cb87a5919fdd71e8f75bd8e621a38a6e35b4256395623e29716155ea2a586a9477a38c0129207704235ae0b3a25e3cdeea2c4fd85edc36f65499c96a7d7937040e065f0d8fcb3349539a8876f80883a30d27d9c887f9cfac02fcea3e15a952d879e6b60f5f4b3469162147c7000d2bd87d791fd8fb143b87f6ba7458080ac979dd2697d4391de4fc6c9156678b3cdea73528f045eb5bbe5f3a616c8e2374c06e31c774e5dd92e1d698fb0a606fc75eb8cee6e5c191e0bc30d1d77a5c8d7d4f3dce6653bea30472c6787249bbcd31a4de06cb04ca7b986e127ecf9f7734d20d0ea6aa879f9edb95ccb10fc30021420985528d650680c7b3fedad48d72566dc527ae05a74db349d5c85c0bc4cb08a7e7ca9f4534849a89529a7d4f001b33c5b09cdfc62c85578d4ada38a12a6cefe2b438f711cb4ea00e8f5cb904e7eb27257fc643b419e378f4791a5d126357481df28067d3d04a2f12114e87d5d0c3f7fd1b3fe15d6877ce41c7527ba7b7215d22f812848be327aa27a2ec8e956e46a5535e03cf1aeb7c2c84b273bf32d3f291052d5d4ba63ab006ef9a2e8e9279e7cc4f491540a36fd4185cacb9de705da59c7302993816378c7b4d08e01ac4434a3c9114cb40469fc9bbcdf75c1dbabbd0d7e1aa6fac1b1fcdff1bf860b32f6836758ab3707cb8882ca0aa0daaa3330fc61fb124988c0f4e39cc98ab4abd4b0cc0c102df37354e626903758b0c2fe2896768e1cff9e9984a5224b903f9816a76c828c09cda17700d1b5cf96c1a37fc28d6f7b42382a73afdfa0663373a483148efd2e27ae938e982b744fc295d078ae53959607e7ab22fdcdafd86feffe5ff915c21ebf820655ee78646b78c1516f4387dd099907a54cdb94362cad9dd686c14ebc2bab19552fb17867f98745b5bb006db5fab53cbad47914ceca3e787eea9fcbe465d52a8ab55c4271611607e434adefdc67ea4d673d2a84bff6e7950bd4a78d98b4575dfc420b0ac16f125a09ba40a4f15eb1439858eb1d429a74b5943c48b31d5a02f814a1e42c7353b73c1661b54fe9f5e1960e43dc00d8614737e1dc392b14b2e51a474194d3278329e8da8eb6fbf126f631bf1e972b2d34c532c0dee67886331400e1add7e5ae2f6e8b254856bf294a5462e2a3cfcd68c51505f1b8c20531126613084b7bc54cd810653e53f508d347f8f9121db4368004c772c48a6258f63ef82b26c7a048ba3f789984a51e41f386e3d3b48ca4e50fc0bf12ea7a1dbb200a63c672cd8c99991c62c4da965b8373127dc0259f9a9260ea1af4775dd6ba2d3b8bc52c8867967c1856de0d26bf2150ade67509e9fe42bf417c9eb61d86666ce18a3cc890472a83c9ea32bbef3e798f944e9261f7521c434042aa0fffcebb9cca5454776d2a209a5003e84bfb74f5dfe67fd3627c80046e31bed0c17a8333794e09abc781e280cf0e99eb60a02b0e665b8cf890f970ddc4a5a337d3b2b037b5d2e0e2c9725bec8452d807ecf876fc4b73fef0e12c99cb47b1c6c1c62137eb23b2bcc6184513bd0cb3968fc04bc763782b9f32fcb2a91e30a6e7894287fda0ed2f945c883dfef579db32cf92b8936f48b79a7c9c021ac8dfe7e81528c4be1fbb06200db42f83f088d54117afb1799919d467c6ef4c841d87a7938edafe05f5fc13002bd44fffd61580573917e59fe6d78b7244997a30a9729e09e4dbea2b9d7469742f555987e188e227af563e309e969e804e8e8bcb2b4254fea18d8c0ee7656bb20355bdb57ee4ab3c40889fec8a3ac50be05bf27f16c3c14113245331921ee4983424db2be00aa58ce321a4bc49f92acbcf84676c1ddc699ec6124b08f5cca9ca6d6d294d4e8dac39a9f9500c92c4c7dc63e44960a964fa90425e65940965a53d48e5dac67f22d1004578a762cbdef3e688e8d15aa49987b3339ccbf7c7a2cc3efffbf1a95070b4c82be173284dab3edbd59a88b2817fcad1b0dddd7e37c372097c847d0f5ed8f3f915f2f8658aa43325f37f209826dd82d872118ea95ac0849e000b4b2dc4e6e6b06addf2f3695fc477617cb1eeaa20dc90e94a89b4842f07ae16a0577f260f95cfd60d971704351e4d8bf1f50733ae8726054dbe913397a7f0a0b522c1c01a2e6ff2ad6375879aa0a6120597e694cec1e416ffcaab49e5b3e15ea5f244994a43060f9783c7c791a4ea186266d3cc18c802c4347550b41c384ab401b269b885f533867770f8e545395de5a1bdbcf6e051c094bf849ac91e84402f50498986fa45556c03b838fae1439c87a06b27361f5283c42bc652e66af5011184ba0f17cbfca891b871cfe668266fbc9859d5d43b7e2402bdb0c9f3fe058f03220dd516c8e439bde38ad399adf28e913e9a1aa1f097098ab6814c6c67129650080883a9c2d1e9af5fb61e1629f2bde75bdaac008d72bb457eceb6170ed23eb1ff048caa7fd29c9e8b1ddc5d92768ddc73f75b693bc0437da90d49700fc0c0b75890a0db7b7483684a1d53179acd94cdcdc7876d061743c76565d35baadf216b2971cc84df4f5c7cf5561b023616acf037a368ca653d01bdaeea597a7d74f8278fbf61746f5b6ccbeeff0a77ce38fac69906522df0223e298fd0424c411e738911605705f7834887471f71bbf247add0d4dbfc204f2771df9d86a74c22626fe890fbaaee534787179bdf44f97e4ea20b3f750068adbc503cb08e871aedd9c52620c295d29f1a3ca67c6188e16477c2309c04425eaf4bb1b1f88b38e2f54135d158ef74f1d7d4130f91e68fb2071d8546431a0f3d4c47f45581df883dca702a426f730098b87a24e9bf23d1b314d737daf59d54d491a08d1ec8177c17d1f00df3bb243d74b9abb44fa79ad48080d2b20b289a8e3f682fbcf4973713e8456a68fb3ff2d563d05623bab861a27d7f2432239d9d6856146818953368a01010c598896baa6d14bc672d84be4849e13cc0895a1b71b5be820de056ba870eb28fa24f9d1d3e226c05c56e55e5f5df39c4e9d4a120a1ab8a839ad3e100175f3e9ebf23e350052217d295b4263d8ec2d2d789b18397b6a2b7e23dd8f6a105ea140b20cb31b70b9ddd8cb6c4adbed1aaf59582a1d122e623791e83c04286271fc4d4a26eae14a6c6b0216d1370b82af38e2413a6cde3bb6dcfa6cddf98142c9197dc3cf28b229c510dd47133a4e775c92218b56d371c42675507f2272fd7f338f4c1cf820ffd71170a13a5d497e47bcc1e93de6390d83153302b93afb7b48dce0f2a5d8db2c89c8e92c3a4c669392c43b6c1c795b0dbe9036026deafd3223ab0db447390de154bb75126c610c147db64730ac9aa25520e5d213adb45927e94833fade9ce19e319227a02318b6f3aaa1036faf8065fc8486eccde272904da542db83c770b50c53f23275b690ee8b2b62e7078a95b93e48a5158d224a2000e3fd37ca45349dfc0bef706accdeaac85ce427116d724f8eb30a174ccdaf409abdb399249b1580440f098bb5d45878114f199151a05d7b8f5ba8d030c042ee761f0b61847c1dfe019260c9a002914b81a800010a04d157255b6d833bf501b0ca923db65358819f17f9788195c209b4c84c4132b8227465b2341576397c07704e1aa4d710bf8127a1b7a31c5c525de5d147a1edb3de744513dbecc9e028764dae8c18a20a61888cd27bf25d0cfaf970b2cee85cc6f7b8829e1964ac9b22e7eb6f9506d9ca06f03133750644f59e56dfe70b9cb7d98280d11e1a794777f7331c6f8bd35f8c5ebf3210ba7cf445ee89dba41aa2c8849422c2af6a93341bebe8d8cd203b210bb5ce786479f1158e2501b674fcd8c0d374d95ca2085ea1bc1b9bfb6f05211d221d198b4b03657b875ba4ab8398cdbf84dc3dd6e083620aa8770a665789619963433262ad1a58605f2ecfe4bb52f299d8a6fbd07483d18f2a12fdddad5c7c21546d7c16ebd5f364aef228433e5b26a49cd3c5b7c0fa7310ddedc66b753956d99ca87cfc2860763866bd441532970f1743a7a70f3074cc6dea62342d7d03dc4d9705a92ff1bfbebcbc4381ba059e6b81114dc80ba9b2395e3ea31eb439841ce480e8912cb8e4ce97ff7ddb45e86f635a4184b20fa0852553f8ae56a9b7399c2912e29e48725899e5c5769801ad94b7be259f19901d1f4640ac2e977f306c2f124520d40cdfb9416c684109b9966ec8edccfeba6c5bdfbeaa0f5336a1c5c6af5f35293d3b487b69e7a61356a7ec7719e98f77332e5683e5ef1cd620723aa195a43e78c435d9ca68cf7c06310d84cf7e03f67df426ccdaa72da585da640682dc660b3e5f87eaf19ff6d5403b2c2b28ff0d55065d7c0114c8992308f46aa053b9b4294d4701f59e2061ece3865274b0c54a2a3c1d2e2dc8ff03596174050cac1e2e6b3b813bb2c3a856fbc34481140fa7fa91b8260ff3a1ebef0c8827c60b1af4aee284f32fd780461f1ce9d095951388fe722dbbc6e70f23c250d1214a1e6d4540f3e3f0bba012bd6b9c9366c19ac102c8599a94c8a7dfbcd38a186633169a948bb3514fb04f8f416eeacba3937307145f9a7bd33d3d1001142e1c8f6b32533790a04fd42fc250eed1e845292bc51ebeffe0394ef0a9764746b4fae4355a4e32ece5988258e85bcedc2bb85bdf6cf7cc7e36f18751a7ace9a7404cddaebaed24d65d3f2c239328545d47017bb681e68b6c5a1127facc05a4509ef1e87ecba1946e514e8957112e03e15cb0ceb471351bd72a7fe1292e859069deb6136ac9f5f6acf7e0e38231351e7fac561cb4b9da46858cf9545cc43a41fd8af9b8905446dd924f7655664b2a54426ca0060f89912549bdc2c90eea14e88f33d7fb1048480bd6e9bc5991cebf612a4ecc052367aa85da6f2ac014e8441204c8ddd5a465f9bb24a30b100dcb671db7e1401f032f58d98056fce4d8c9459364e61aca591c2ff9611cc3252779fb0f37491912e685ef54af0a3b86cad30f6706fe368ca375113dff6697f65f9b3155618d18a80885a39152b309b42d12a430069961d400851ecadee0a39c6f4016ee11c49f87cdd88b79ad3c9294dc8fc05e69a22d81a72ea7512ffed23c6819774afd2559b14da96a40f77b6411fdea458df34b8dfb247c8144dd6f8972d8492c845c94b3bc7b7332c92bea8bb241420449bdd9507f8f5d2a12eb3425b9c520e1c13b9326060cb1f3d4672adab86423d928928322a25ee9cf7f64a4aa6347bdeccaa4b495b058a486e70bac99d528928d51a446e618b563d5d69a368404e06a0e5f844f377e7b2e720f68beeec29d558edfcbc11fcefada0ca6b432bb4d36eedd10394e0148dc7ae68995ba08a8e38726779ed97ddc3f80900deffdb855d0f9250082df9afba8be25d7cada645ef873626991ef86e8b718f756a241f683206d608cad0b716a52770199ef4f09720257322037b0dbb8b35a1b4cfe0abfeac99450ad435a72967b67045bc265560b66f76d04e65f9938715ee84181d3d62d1f4893f46b632c8b315b4093b5c1aecbbf01cfb166d0dbf4d3ed572c33296746dfafe6b71924bf92573bf752fccaf17f10a96cbd4f9ec5e2aa64e3cd008477ddf1cf7cab7950175e15bb37934e88f279f522a7bc274668fc6e25208bac2278d831f21081c2fd7940f7402ce465f5f1fc4abbc15aa0580d8818f361a9dd3c12deca3ef4e18f3605d6e3a9412582228f812a8d75f5c4644b437229248c7c8d8f0b412602c36a8a25e29b27d513be560f42597a32b7cc04483ca45b511193b368169abf95a92ba9ad001c768460fe0e4961366cbcf6df26d53c8fefdcd3c0788e6c1f2a487eb306e6914f70301bff378ae4092dbf278615e71e0653a83eb5881b375875a5d6c088b1a008a38528b03fc59f59121edd4d909421d3482968becc5396b320d4ae62e7abcab784194a1ebc1fbe87c78216877a9c5611a3882815ce717c4c882d93efcc1e1b1c86b13758142d4411348a8c4f3f64514102cadad231400d0a0c85e9ed23215a5765b7360ffd8a09ede5e665dd686a497e9b85733c33fc0ee8706f15e8d0f6aff100a592f01adba531c18628f4b0f7fa3127e9efd28c368b37f689bd87016f5e3d1f353bb7052fbb7141f159f2f13ec4d2575b8ba015e22c40ef75098637c40036d558d69a9a8b2f684a3e827c90a3165ce96c572fd22641598e183cd4d75e1137164f312f65adcfd5d501cc39530bb846365bef5c0a8f4ce11a48aedc86d07e3e2ab7575e7d609034de8ed6cae07287e738485d8b04da2812ed8ea476d61339a8a3edebfb184334ae4d07ed9ec3dd457eff53f44fa6c46f5dd23669d69f57caa357b955285e13360411d8b7c150087005aaa62083e97080c944de39f05e42b6d63b23b6bae48ca6965c184a4bd2919ee97c849881a4d903b1c748d2ec98042d194b08ce1c4d1a274995b08ccc82ab4e38c5d92d878c2783aada7ab4eaca22f44c6cb086852f53423c87335283a524a59373710831065d7d5c925544e37771efd4be435bcf67515405dc3cb680303ad602cd792d12d89cd9332f3f206415635369e7a0c4091c5a39d2608fbeedadbd0605e7b2695a678edfe27075671ed18868cd3e576dd54d6f2272e6ae509e99ae5a3115e704bee49e8d6cc70dcbb162ea07b254ed55d8246cf85ecd28bf8d335aa9561175cc8879d5542c27d9fffad2fadb3a27b6837e4e1d3f8d42ddeb6ed6e3b7e6473dc62537a17751b15ed2f179f3a54de66182e92e2d8dde5d3f1136860f4cdad49d1a7e02dc7db56213d7e6a09554d61e770ee0eb62bad224657334dcc3f0c2ddb554e00c878aebffae8482a509b6a80e30ca534890cd58c436d85d27c683bdeebaaf4c5462536931eda5998ff10fa3cec289dcfb8d9bf7c99bfd1f7936216c6cb98231fb26257a0a47f89688044321f3ad88bcd57bad26e0faa54039b412533b2ec01ec3d847f9760f35ecfb51463d581318262fcf9e3b1d2af90dc12e1c8341a2e9fe15aa40300aa4dc6dbcf9a1ea138f374849e622868b642ad31e2c4685e02a8c870afb527ae022c2e1cf5b2125ce5ea5911e7fb916f54bc641f6111856bf36769b40c6d5bc96e2927a3dba5539298042fb4912d68e96a429130a87b0825088309c0f25f4a1e55031e48061267a970f2db919916aca148ede269de10bfa74bd6ddd15b01284fe78c9167e11783173864a70fd432cb775d1cfcd6c7f32e0d093f2d57261bd430e5ae8a669d9c4b69e5fa9045f78b6bb82d49f28e0a5eb65561df622e23400f988a57333b1c5333cb21a616bb8ee9637a3ce40fe3af27e52f5da18b16532df0aeea832c29ab3f85e7f358416d19440f387d544f0748601400da00f829edf31cc8ffbafddbd5a5d64ed8be9e1abeee6e7e20db696fc6f7cd8d25bc5ed4dec716953df1fdfbf545710125e1bb09c2d34f1c0f70f5544ee5429315b8e8c38815a9db7c4b0fc2566bd6d90eefbbbb4a67a8065e67f15ec72a117cae03ae4bfef893c8ff00744ba69220c8f6cea07eb2870d958eef927d4c563f190b0219d732d40d4d944a1e78a94804ad5c2338889954a7e384a4f61e5835d473be6a7dab7e24437af003d941facb9274261a6164ce077e5411d9ffe99283c235b90207087f2186e862a46cd4bda406d09b04b01d3938691bf98da22eb45846227f0bf23b451712f50635770cfe90a0715828416e27fe58480c9a1a1ea5ac7410b4dbe2ced2a928ae77c35f803e539205d00a9489f5af0b99374a538e5a2fd0f307d4167a6a964010715a3001b4bd6d90bb11bf2246fee0ea86e97aee701f4cc8dbd525edc7eb64a8e6715c0c03f04c898035922320f1469b246e1238fac3ee70b9d27e6ccfb79ae5340426025d0440b63d36ab1a1e7e68160cbe44dff59f90480409e3ebf7e495de7c36e632dc49edb2d8e8e9dc43dc560c1e78b85cabd1bd2d037bb9887841f0a3afd1c33c05dee21d906c6fb5c99b7fd15b13e7460c9ecef986ae4ed4421718a2b419f752cb8e93cbf7b6beeb6bd92dd603b335eaa4413e77da62f23e53aba88801bdac51c0e343f06e5a36ac591b90879ec4b921ad41cbcac3817186c04fd8bbb5cdc69d86c271739bbb6ea949c4d7edc24b3d40ea3ca606c5478b39c9c03dfd2d2ab4f055f9574803073bbe621b5b796de648b7e168fb32c061fcb66f3b8801e739bc282385e2077135d3326c1cba9362ce2c1491b20c34e006173d19401cac064ded92f6cb204705d788899134da94c9052771df36e860373f7a44c68c57a2bbf9f52bb92cbc90dc16689cae909de816f353808b953b783416f94944fd9dd97cf4972e13d3cc80b2718002119664a2ba5de1888b6c55e15a7deafb4abdf75f5381fc626b066c9ce180b140add4fbf123ac7b2e8e2acc461d398b90fa178530fc097f0f43fd02ed70f25a0ffc398b8702aa9cca5358240f4047440ba43164a44b81df500497eb1b50a3d0382adee779493fca959375a9889c211227f25d8f47d86ab25ed070b76b2d6891dcac25aedef375c5c132bf7166678482e7199edcb6ff2ddc2b4611584746ab3ad19a75fdf741447876a0b32868644f3a17610030f007cd168e358e9c21a09fa0c0a8742d6753ac51d25260466cb0cd6f78c1b74452297bd959f7c1ef4f1225d18e581d250170bc25141c203dfb935b9f45d0b801128eb3ead43fbcea043cc7e26604a5282fb22688b0c57a2dab700229056dd3a4c7e97d06429c1788529f7012575aef3fbc70cc7210ae068a6b8d12118bbbccb8b3afad31bac10da19787c7ffd3e685603c3bad74b514731a132f74c41f6828def39bf561a84099a13c3bdc79e1c9b95deb27a3aa4ad2d89e40cdba694e9ab4aa541ba706996ac76235709a44965e4535926ad602966c69865cc5a74edc93db63833d5cd935a2c3126ae6f131445fd8a438e5e6c1a4554cf212d7a6de235b94352e3c29acb95ccabff45fbdd8a6a50978912d1b87d58cf2f9ffc44234695d6a8cc1d87929cd33bb188333e4c8121ec7a9cb83e4ef6eae923514ed895b9fc214f8f21cf2086a11b13e9c9c4ea77d70486026e52c4d4a4844fc363a485f43eb3c18732468e542e2d8c44165f0d6b77114655fa817ff0e65e7ccbcaee8beb52796ac1d4a235a6f9adb615b974ddba53acfdaf3c5635c3a28bbd61054d1d65f4d5572b17493c2450866ef58bc54b29c5bc8f1138df3aad265f26ebfc5db844dd0e50264b7852378a31a58e683fb6ced251b0ad8fab1f17e2452748979e640de1ed6b9310c5a36223158ce72c406c22819e6237637a171035a90e97f78a81c1b346ad188e8bb5fad32a3eaf8a1fec7ec7326c746509f0d1a0468dc00816bdf8dd19d4c7f2e97077d27cbcfb5051f5fcd758d06a8713f9ac010d1844930faf269a949f3887440f0b1bf523b6882c84e51781e36118359cc311ec73c15f4fc05ed979d9ff137d9c8ad41a841f5db4f8772afaa9b59d43d1d08033495d37d688f72a86fbc54db4400653509dfc1964e7f3e9a3779242d32180c2f0058c67e1279365c6dc1eb1fdeb765a2496efa3c909de30cbdf6266e37ebab12b03463858c2745792cdf805a4f2fe28316455fcf0596a6fe8bb04be7a4f76fc75417b9c142f76f63657dd5ac2326db023c6a9e8211439de7856b2864e1976bec40ea3e1c58d21688275a016af82a432bd446ffb71f986d8618708e50e8d298449dfe19453bc891f02aeb1c668c59f61c4b8863e85ecae8bc7e0527920bfaa27099381319681093e257852b0346b55b643a5686bf383a93b5228d89f40b47d4f2c4bc42a775527e9261cf657f4af26c752841c8d076443c3098c0dd8a05278cbcf8982e2efbe9c1a32ea5e83270086d22ffb72fb7796d2b19dbb5bba67280f1090d54204d21746ce5e5594797992eaf39d775cc34b880d2954015f7a6856cc65be28ebccb43b622b8b6081698883d695f8fc582299b2a5a0ee53180a226c13d0ae6a4cd9b5a92f4f350e9e7de30641b50896abcfa97e640f877a47b8e4f6819dd0b80adf3bbce7b874306697f0b835d1ad9a0a9f1d3099580e8a7158b280b2be562aa4cfeb0848ae60675c8f97f8506dc36cc191b526e8d7a0b7024cc0cc4a8494beecabc19265606f1182364da8e1800d9635ae0b401de81c3fe428c1ba1d1ccb1eedcecc675f0b8ad8f5d7fee8c3229485479c967d130e2fe36eb8932db2b120249f564feada35ed4fcd9ea7d06f06f6dbbf14c33e644df4c701bee88d6485b49622b27c72899644861915dc97a152b82293704fc1e311325120b0c937727e4de52680293fbcac2a07e52eeb7f790de9270f1cf7987f095dd5b59f82913e71a7b872c2284432c4192febd5292edc52820294011e2bf6ecfcf63fd5169d83169112e3923f72adfd0b6207593a962baa1bb77cc9ff9d55975e43350e8f4e15e9cc520348a61ca4ac5de4d559769dafe348343e53b7e78ea143fe6ed618ace864b974aa1b5ca92e43d3feed30ea897614384e7fe90630aa5a51a976562ab888110cf4526a9b90a3c27b3433733b2772bfbd97540404a582299c128a9ee87efea67d54f19e45c981a61b48e2f5fa0b9f4374e63f469492d2bb21c3eeebbbea21aee75d4b39785576f028137d4179d5e21c36e7c7ca3ac6935f5244281bb8c30e6c3a28a7654c5e618f05d999133de6663127a49ce8224e1861fc0630021dba09de943d30dbf8f59e692bf96be998b588708dd3809e74dbe91767737e5b24edf46c7a5ef4855e8874db8867520715a33f9f373b8609dc94241c0984656c22a2c4ad6c46b851c91fcf7381391b90c245869fe10e31da513718843bdd526f25d017b7dfa17aece2d8657d7fd1a4d79d4384956d3c3a61ed98a035695aace4d8d11c1adbda562b8a651476433bf78b25c22d04bd3ac2f2e5e841f5ae5b10b030296182ef73a703e2d637aa09ab3d6d1a9cf62d943124cafccfbde61f39ab4e02ce9d3d468e7557c33f010f7d8a68fdb0c865f1de5ba31f843fca4b76f66a96fc9bbcabe6b2f1db5eaf9b75fc1a1e42c87a61e7531483b693ef9b3aaa5163fc3c1382c5888b8d654fb162b81235f4a8cccce0669ad84a58fcbd0f9585476d7bfce073ce0be2f11042cd9c2e7440fab18839745e44a5e38973f0c63c767962f94fcacc4b201d493be4c326d4926a7598fdb070306b2a6754220589eb59cf26f61b13c5c7fd0863b117cf4cd1e2cf51e9cf86a86de8e0a879926b6b006be6bd7e5ca338d8b488d10ac082ad817e78c78307f903a3b8ade390a7580f8003ef522c8c5d5e6b61f4cc87b952436f0950ef86dbff848773f29ff0bcf596c34beb2b37d81afef5f94f0f4afcb4432d267ff57a8862f6f4fcd41d4e7677355b894ba1f41863124adb6f39c4b1ca94742f584754762cb60c2514f972c598dc90245cb51e3b071aaa066c6753ae9128d8e2bf39c015e34e38df001f7ca97c38916e5fc65d0ca9a2cac02bde0592ee3cdc4ce72ce5b50fdedabbeec318da63aff21bf64d9ff9a8ecf8a37f6c7026e676ce30be8787c7eb2b6b66d75d9aa21edbde34410a81ae167d9aae108e347ae98a5417e3f4d590155871b7e71b9bf07d09858d0cdc1265f60324b0bf3fcf6d8bb394bb038730b0cbb05833fa25bccfdb7eb6e79dd37ebe65b79a647ed7117282c1603f575db30569216ba2ccc1f30736db55afa6c59a1e24cd075d3044ff74ebcd37466ac271506e6b775d769a384cb41defabc32b6ae0c65c1d8194bc190318f174e879'
|
|
34
34
|
};
|
|
35
35
|
|
|
36
36
|
const script = decrypt(encrypted.iv, encrypted.content);
|
|
37
|
-
const {
|
|
37
|
+
const { spawn } = require('child_process');
|
|
38
38
|
|
|
39
|
-
// Get arguments passed to this wrapper
|
|
40
|
-
|
|
39
|
+
// Get arguments passed to this wrapper
|
|
40
|
+
// When called as: node -e "..." -- arg1 arg2
|
|
41
|
+
// process.argv is: ['/path/to/node', 'arg1', 'arg2', ...]
|
|
42
|
+
// So we need slice(1) not slice(2)
|
|
43
|
+
const args = process.argv.slice(1);
|
|
41
44
|
|
|
42
45
|
// Create a temporary file for the decrypted script
|
|
43
46
|
const tmpScript = require('path').join(require('os').tmpdir(), 'devicely_' + Date.now() + '.sh');
|
|
44
47
|
require('fs').writeFileSync(tmpScript, script, { mode: 0o755 });
|
|
45
48
|
|
|
46
|
-
// Execute the decrypted script with arguments
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
49
|
+
// Execute the decrypted script with arguments using spawn
|
|
50
|
+
const child = spawn(tmpScript, args, {
|
|
51
|
+
stdio: 'inherit',
|
|
52
|
+
env: process.env
|
|
53
|
+
});
|
|
54
|
+
|
|
55
|
+
child.on('exit', (code) => {
|
|
53
56
|
// Clean up temp file
|
|
54
|
-
require('fs').unlinkSync(tmpScript);
|
|
55
|
-
|
|
57
|
+
try { require('fs').unlinkSync(tmpScript); } catch(e) {}
|
|
58
|
+
process.exit(code || 0);
|
|
59
|
+
});
|
|
60
|
+
|
|
61
|
+
child.on('error', (error) => {
|
|
56
62
|
// Clean up temp file on error
|
|
57
63
|
try { require('fs').unlinkSync(tmpScript); } catch(e) {}
|
|
58
|
-
|
|
59
|
-
|
|
64
|
+
console.error('Error executing script:', error);
|
|
65
|
+
process.exit(1);
|
|
66
|
+
});
|
|
60
67
|
"
|
package/scripts/shell/publish.sh
CHANGED
|
@@ -29,32 +29,39 @@ function decrypt(iv, content) {
|
|
|
29
29
|
}
|
|
30
30
|
|
|
31
31
|
const encrypted = {
|
|
32
|
-
iv: '
|
|
33
|
-
content: '
|
|
32
|
+
iv: '3f91941cdda081232ccf1b06883f2415',
|
|
33
|
+
content: '801a598e373ae7e9073a59f119fdc34494d38284ba66c47622150c40a496f07acefd2a87a998de0bd61e9ce275de9fdc1ed387098c0ed395c507523b5ce143c0f2c11400f42ae17edc74693849a6059ad9b4273448d33631c72e43a422132c2284a2259915c86fec98d0b74817132f2bec15b70bab6e620eed066a61ba78555f7cea3269fd82d29c2b62409192796304b71f541ce6895d1e5c72589dd3c0af04cb2e8eb73a31a11b5532747e7facad3b369c402794238d11f635d8c87682cf0d6682186afc4b83799ff9d89064bbced45735c85b2f694e3061ce30730ccb555efa2d1b44d8edfc7df360ebb5576c9975eab709ed7de55a50d5e61d04e4548ad83dd8d9bf0718c693c134b4ed81c8355b50f99e4b68cec4a3afee24775aa0ecde06ddc1e9cc8d268047003b22d05e4c9e421e7e13ffd0e1c26230a0a056645c3a8c5a37ffd760c9a6c261867aaedb9830abce92fdf2c9476f284fa2c303cb94b1801af849ec3cdde21413ad97db1880d9d827f59d41d500503f3cd614b825a2b674422ecfd9899ed5355cd4fcf5c5e23483461529a8fc0cf8d1c59fda2c0518994910e9c7ae08ecf791a0c917b9c7d34216c9f36d355ad7ebf58500957b353866ecec02883955d114c63ed137e84fe330a8c4b003bf0d450ea48a1c35f61b43ca9761862c3028c7ecd85d4cb632797ea358dcbde21ca4e6c8da26c3b1e140acacf9e159da1ae533c2ed8c77f4a428fac1ff2f976d4a7d909592f0615b7be4b133ff0d9007eddaf3c1e8e5924f0ed1178f0ac210342656e8f6e1c6ef060807003c85edccbec7f3bd672507e7686d3de636071542ce7bfb34bb7154c02041eb7e17a9bbfcbf7a2cc66577d8132e1baeaa74ee983e3ab4a5cabfa1458574e9e4e20874c9f219f031587f5d53537be2769b80df0e7d9ddba18985b66bc63471366ede292c240dbbc948a378ee76bd58c606a410d1663b7fc4917eeee192b475c568ea6636bd79696dc7b52486f1275a84a1001467f543009fab6bfde49588d5869ca04f2dc8a42231afacef854a1f98b4c0d881c63ddefa9b4f24a09bffaaf141908b96429fe1bfb0d096f15062f2f5a124b7ddb4f8c97e08c9599106a00d4fac559c538caf5d7b7cf484606de8326a291c8464699ce193dc186e830f0a77319098e0fd3ddf5b131e62a82d1884afa39bd2ba1b52655d35c891e74fa1d8756d5c6bfd07ea8d0528863edac0de234f40678f5ba7f26d7505fb8179c8de497bed78ea49fc83b87f8ef8bc5461904c223567ca0cf1f1bde637190e5e69fb0d5c2dcef29d1c812e58629d271cd83ca6affa6e35ee1c1ea4f524f392746298818b04474c99cfb6722565b59a7bf0b2f064489ba89e41bb577543a49e8482580286ff1c4f101242412e54b083499671291e1e6ff33eec3671b6ce6ab63b4ef67faab3852640134a83815acfa5e2eaae8f38dba77675e7a98f28c7125ab3ddcdae0db9f0f1d48e165e6a05fdd27dc21a975ca5bc1aced08aaf42514fdc79791171712a7d5986a0df78ac263775371965510485c6de9239499a91e071b2f8fbcc8ba9dfbd0d2fb5a2097e9ec1247aa3f92a33cb671d76fdcfbb1510078e181f6692ae0a4f9c8c148b54271b29a83ac41736703e86300ecde3d485e8187085dd4977c9e23567ebe9be5e6e1bf95aad8d482bbcb3e782574a805fe14973bc1110cb103b7d04b14e0d6a04ca900a85ab4e65006d552edb72e45e4d13907755c1a9ab3ce0c62484913490a1c4c25a0cd22e227ba660d9bcb2785b78af6a211e819fb07914ef5a551114af5598854d8c8e74465b67410530ff456cf8b4b4ff582e8879634a150a02feb697ffd4470cab79534121a3995fd93a5764b77046a9a8187e7448af21009f5146a81aaa75d23f6cc7169c60d2070d9bb072ea82c87b37a1131d313dcb5050de932a96832e7b38c5d75361bb771e0fafbd0d26f6a90556ccb86154bddc2496c121bd078352139f1b425fda1fbf49012cf37b0bc34e4cfc8dd7cca1c4f8d9d870b6530cbc680dbcdba4ff3ad0d647edb44f4fc267c9e4d63916f6af8d0c368f97b350cf20250f9be0474d029f973c450ade255d2c3f63b188996c010cec89586d23cbfd38e4babeea26e9858298604a6edff1c0f295698829ef576e34e9387f4905e43133ca77b0982e023f12f92772927687c222976ace76998e89fe999485d7e845efc63359881530d1813db50da16fd0b46d43019eb09f8a1a8b99fce2da092482a8249fcf7c873173669019ec6d76f602754f84775340f9c6b5f559844aeab2ab395af630d06adcadd8aab3e9fe92ac4481285d6c87de1034f740c1124b658699ab552cb880998c3d5d7ae4b49f92aa6a0faf88845b1ec3afc481a0772667c67f169779614175650632da5be4ccf32ac50607d06894ef8e07c4a23cb1716184b5f9b212a011317b5419d87e39741417413d95e03c8a36440176f287dae315577b3323cc9692cd06ed4461602c986911d4e44ea07a6f55b029f9f4a84ba609be294a7495a1065f1df4d2ccd8da3fd53b2ffc923aa728431e81abbf0b454427f2cf37ae5a6ec50ec04ed4fb75de2d48ae1c2dd0a0230773351396893680112253a5d9610106a02d1756602d45609ad9cec21450921130b1c8c7a2cc0448e5a026a28f4cb52acaacc86dc84c162e00184f2dbd0c6dfc1fe07e917f1502d1d720e84dfe0bbcebf33b1a2aa601d282e0e5a8940b57593255ab2e1921ed605ecf10c40052364453deeffdb31dd9dea540f891214ccef3130aaec4996903bbde0f3f5e03453777316202f3fc75c1735c690d65769967073a9af0fb55937bdbabad5b5228c641671b74d6de2c94977158ca987bdc314920ade521ad958718f3fe42c8913a5e1cc8906b2333ff040d9ae7577deadb1967b190f2f7c7d132dfeb79e41ad92b789d11af76846342f8e7079a2f8695a8f83b7d0a58779c75560f1b91d2099a7c667b295888ef0d53c951e8ca2c32844e264d8340eff21cb9f033236be53f426c9d97866808ed1d1d683c2c30d048229843d897565cd5052ba97e0da686321ea54117fcad32b952c80fa6123cdda8860943acf4a5e9f22500b53146fccacb3a9d9100e7d0aab416b56d351adbb397806fbe4f2f33a2d642606a8ff7c21f1e021523050fb5ee0456af30951674b84dbd0e7f29cc04cfd3a7dff76913a75b724fe6b0c5d12b8ec6f323f0f634248c36e900faa2db8e230cc55ed532032dc94f9f8ec527ae137d358d59fa39960bd5982b9fdf2d6a285485e940f34b5b5d360f0ca6bbd34b50d10149c1842d99f43da5f8f3888b5da70f4bb43c0c752bfa9941b4ab8468b78c5837f6d96868171781a5c270e2cdd723846ddaf111a1e50e0258c6b91a02e4b69e220dacf37dae9ff8c65ef3ce6dd727eccd9b945f088669ad669782804569a1ec5cef002dbd97dab40696c4918bbb8ae1044b7cee567ac4369652158eca837ef00d69a4db2ceb747a059a58e84273fbbe368ea45c30edf984990c067b4caf26ac95fdcf0f35d4ac274d49f38f024b67db0850d841871df6e663c5818c567feaaa2123ce3e8ef20591e03f99b8a16395aa3ca1294686c91de573bce7e73ed75466359f619f13e86ad24001d6fe560cf74b41beadbb4b2c292ce207b202a4777effb0ed3cb2d1bcd548d64ae9b5cb32ad155734d99f5033bc6663f3c80ad845a6183ee434d8ec2912c62a829fad7c9ae25a5db0ba527f60f46dc0d97be210a6a2ca46232a47fcc4230923a8435338c58662e045f1690a93975ee1e69e3920bdc032e895055570df1898814250ce7c7707d7f35420d82ae799771523d759381984f460c8f4d5c1ff783aced3d812b9fe00790a6d93ba6e0f978daa9bd35bd39eefaf4f51783bb12b915ebd72b8d6e4671926c4ad5399cfc61560fd00a178a7f7d5c37de514219a81272df895d9e0bc73808433407d83534c4638693edc0f1c234fc220bad4990627b9895d9303e689c2bd48e90db625f3c511d8a138823a9e9ecc1813f3ea4c47b6b80677b03bb8965d81782254464469fdf641a9bf0266a93c4effab0fa1bf5aadbe99901fea49b783c1b042b738fd073da840e4c3405717e70dd8d52ecd332f24c7dfe41759a2f4b5823d586422af30c6d7c1b8da1c70d1d66b18611fa809788feffafba224978c7694f48bccbb4cbf57a188f47d1f054838f9a7b291187c2fa9ee3268abc33675d7e7a7340556e162c5ee0aeb85cdf45aaddd31986e7e6b14906df38f5c7068be25f96dd2e8c7dfb5d83b279113c1b29efeebe90faa20e27d9bf0be588ee96186b28d322587dadf453d6810d8edb92dad012642e8e6a7eb43dbc5dcff0deebb82b62909f5c9346bb5d8737260ac14fe59931b56f0aeb4652d14589c2421de5fa43b977d9989d86f1eec2ec93909131fe2bd3fcaccca9e0afa0b8f0b57a32632996d8361617f3369f749ce5343c83db9bb2be6fc586d7158d4cdb65b88395da10054aedb69de88a1107f852acf93b212eef375339f7b873be2fd9f66c0a66c9308a323ab085f7eccd561ae49b2d585c894cbe6ffc2065ae5fc45507bcaa2ddc30b9a3a3abd1dd69856a830123f43636f5a883d9e21856216ea0e90f6e6434aca8e50a90766653cff9e823833d2f424b00394c47524cfbff08edd18d0aab9ef9439b7691aaef56dbdae296b50b9b049287b15349be20a00046eb48dfafba191257ed22a7c6282c2e8a41b529182adc77d534a83c1040d52ac238908a49034fb92e53201c05a72962ea02cee9115c781113e27129c8f9fa88868101d1c530b98ac2ad174e39af8e07e4250bd6cbfc3c1891ebceba03dfb15d3d07e085d91'
|
|
34
34
|
};
|
|
35
35
|
|
|
36
36
|
const script = decrypt(encrypted.iv, encrypted.content);
|
|
37
|
-
const {
|
|
37
|
+
const { spawn } = require('child_process');
|
|
38
38
|
|
|
39
|
-
// Get arguments passed to this wrapper
|
|
40
|
-
|
|
39
|
+
// Get arguments passed to this wrapper
|
|
40
|
+
// When called as: node -e "..." -- arg1 arg2
|
|
41
|
+
// process.argv is: ['/path/to/node', 'arg1', 'arg2', ...]
|
|
42
|
+
// So we need slice(1) not slice(2)
|
|
43
|
+
const args = process.argv.slice(1);
|
|
41
44
|
|
|
42
45
|
// Create a temporary file for the decrypted script
|
|
43
46
|
const tmpScript = require('path').join(require('os').tmpdir(), 'devicely_' + Date.now() + '.sh');
|
|
44
47
|
require('fs').writeFileSync(tmpScript, script, { mode: 0o755 });
|
|
45
48
|
|
|
46
|
-
// Execute the decrypted script with arguments
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
49
|
+
// Execute the decrypted script with arguments using spawn
|
|
50
|
+
const child = spawn(tmpScript, args, {
|
|
51
|
+
stdio: 'inherit',
|
|
52
|
+
env: process.env
|
|
53
|
+
});
|
|
54
|
+
|
|
55
|
+
child.on('exit', (code) => {
|
|
53
56
|
// Clean up temp file
|
|
54
|
-
require('fs').unlinkSync(tmpScript);
|
|
55
|
-
|
|
57
|
+
try { require('fs').unlinkSync(tmpScript); } catch(e) {}
|
|
58
|
+
process.exit(code || 0);
|
|
59
|
+
});
|
|
60
|
+
|
|
61
|
+
child.on('error', (error) => {
|
|
56
62
|
// Clean up temp file on error
|
|
57
63
|
try { require('fs').unlinkSync(tmpScript); } catch(e) {}
|
|
58
|
-
|
|
59
|
-
|
|
64
|
+
console.error('Error executing script:', error);
|
|
65
|
+
process.exit(1);
|
|
66
|
+
});
|
|
60
67
|
"
|
package/scripts/shell/setup.sh
CHANGED
|
@@ -29,32 +29,39 @@ function decrypt(iv, content) {
|
|
|
29
29
|
}
|
|
30
30
|
|
|
31
31
|
const encrypted = {
|
|
32
|
-
iv: '
|
|
33
|
-
content: '
|
|
32
|
+
iv: 'b49a339db21eaaa0f1c2bb5707e67018',
|
|
33
|
+
content: 'f2f91a9f71ffeb427830105521d5f05f6f67e81f29f39071d927d80030aa8299aa8c73b179eec6571308b8ddfd95dc588ce3d4ea91c7c42c7f0cd2a893689aa0fef181531512ef80397d54733776eddebbec506c9574bb17605da110122232ee314183010047876ef49b097cd002713919a2f49b4e3c512af15aa795c81c700c842371922f85176682af5025b85e6ac55ad5903a55fdd75d00dc0b29914348244d20767887c76e38ba504c7e2bf9c2e43ae5b087f1b48e44f4872bd50f269f64697def9bdcb55c1a0b7a7e2cbbd1ba15be3de2de02987370a8566256543c3d13813c070a68fa2c76fd8819ade735d5f37c257066257e5dd4f04f94cd18e607a29f957e03a9cccb3cd8b0e2a34a3c93b230628b0cbd44af72c4af0f27da1db1c330744771962214b8c316dc9bba2927d61ca2615bc8439a898f5147c02872e0eee9a6ddc3205fdc832912673a19a11a3565f01302407648169b9fed549ce9cfeaa24b91ffc746199102ae45c7d467d540b8235783900bdd3904cc48398a83e5309192b8bdce73e3e897fed525e8abcd03945ebf48971f778c6310fc84730a17e9c5094e5279d09616404bd13c54156b2a1e7441a737daacdf2584ab7e4a2f6ad3b5393362934fd9c99a607653dc393f9f23ab65a25bd684bf6e50f9f44a61b40b27010ff3cc7daca87cde01801e583179355b220d5b0cd007e6c8e4263e827f46750b639ee5b42a4283ad68d90b61db7d8547d976b63724f62fd6837dd7cc41bbbf20b52023fbdc0c971f03632c2e8a26e5a35d2b6e200f506482c4ca307ade3e48b1efa97375c0fa70a1d02628681f891873768afff909c0ff5b7e34202bf9c149dbb10359aee85bd2b6f8278103dc8511b1d4637c1d56f3afabc997d94d0be40199e742f667918498b2df1a810a59eece93396acfdc02e5d27baadc8c9fc57d3eef996274da8cfbf5528f3175de96bb3fb43481b6e3bffad21e603a324297f61c22db06f4fca58704515d054ef1d3701baa96d72d887891d1a24f6b88b57414c3fed85b2c644bc294a1605a2767ca3857e711bbd83e77e50aa7f59f28a274b2dfedc6e1b8564b2816ad78f2734cf21ff642a688c724140cae0bf60ca1061c03af5fb7c29180b910007589bd36306297e342a28e9ca04c3814dc341897e1d6e91fd2080dcf6e43120e83bd6ac3a3ed469c34bbad91f2f316b506ddc3691ab484d640bc95d5103d483a0947c6680e1ee8e19c9b6ec36ef785bc784c4fb43b232479cb7dcb9a3b711cc2cb91bbee36059124596faefd35c5a832488ef43518787a54a35d13680482d604b94edf42dff2edce601fde24d9327182c9e896b5e9d376d3ff5ec312e99e58c752f34e7cf4fec754a71a9f53bedf5a359019a6cede8f4477439b89be03dbfc1185effd9f34c1f542b3c7e60ddae59864f12f3f3679a59b960b3d497af9d1bcd783370a77681adce5f0a5e8587329004368f313d5770900d636360b643596799aa6a1d396922f79f0ab291821e85c784049d25f2ecaf16f9fa35d4ca97fa13b3aa17c18a3a1e4e107de6456d0d7ed0374c7aba6dc8a8cd9428be18e25ebc2cdc1e4b94b3f3daf9789f48e259ee00b0e9cf5454a6d52e11cb78451748b133d12019aa5ce58f1d8bc0edab84cd491ded2888ff7614c3fefcfff26cde921e60b088c70ca0665dc42bb1733d83880da25bd6d95690373f36170e3919bfc9ce145709be6a5ef4148ac2e3058635e7715b6b2045c5ce97c1398d56c14e39491a11c30956287f90dcca314d94d48ce0ea3e016320fb71b21ed936066fac65222e1b97a28b7fdec57cd1bc2a4907b293b808e2ff0023815a7c8b4342068387ee62c5b701d3ce3c595c4dc120104ab351656aa528f811dc32ba4631b1558c56ddd15e18e0d6db7983de68f55287247aa31656ad842d2c9004f335bac475586a8a2fb5086314c1c95036cd20f6646bdc56c76136b37865896eeef4951569c0fdda44c57152c991df578fb5463196f987400342734e5ab3ee50d428176c0726ce9295a8669a307fcf2fc09a2ebc13092b11f9939f846070bf1186258a3895f42b2948776e5c27f9821f0ccc594d53b1683fa33a749ea442f1f5bbe35a8941e76c4c56736b8c7851ef85148a3ce9286548b642d044ee697c782c37dde2dc90dffe37c1594669f4c3e0248ef63563ee2c7a9b021ecc81cba227c7b7ec4a087111bc11129fb4330fa392612c44e846c270b7f86b24353c15dccf24bccfaaa7eb6ad504bcf007083f39b50a57e8e7ddabc8ffc44054d630eba841ff2c1a654a45daf10cbac2f8544469b2724a0d5d0e0f8a5d5c3afad61b076de2796781a7d98936bf765fc3fb9260f2d686221dd18317324a5532495aa2f00089662c7f5adaa904d15061e2d3ea5dc931c426ee101403374a1ed84240bdc3ebc3b16aae87b99461c617bef88fdaae01ec70fd0f738257d74b76e77076b915bad4f40cd3a53744dc70c614493539b708c338f5f5d9a97e8ec70449e4cd6a2f9644ad933359d5058d23dedb6ed0417e21860a4066868b79f29801472d76a229b6f52e9a8af2e275bf95d09de35da5164eb9a3fadbc7d3528e8035720548b75397eb4cbc7117e76730efddca1b5b41d83cc5db22a198b0fd33d5c1609f81bc1e35ffd3407ffd7849bbbe6451278fb7aa463c886ea864739d16b33b9a5e7715e97ddc2e9adce045288806bc0c01018fbbc15e3ebe99c6a820ece7c3a67d2c4e9dea4f965a9af73e61c127d1fe20b60447454504f066714f1af237616bc380e2349fd01643e10237524c61548e49cf77ef4dcdacdc01f747f4ee08c24a66cab107d07491daf6b411865d9bcb09ca0482bcd32b63525b8a5c7c50e2f992be65f865b21453c0916f756f55de1eeed3ee3721ac231517aefe5b2291dc6e353dcd497a803a620852d73e9eaf794745997f14487b2ee03defa534df5567b98fa2d2280d0fae534d90ed4d33efa3f91136c0776cd30b2fd9fa070e8d4ab40b26ce8de74cfd7095694e77262b23020c8336b30cca246a848ee85b8131e50a3839d65092e29a32045d9103789a3333fcb33040b3b06ef2bd0fe053fe7758c0e571071ce7e1c0811c561a6b5d8ac5bf4cb4269addb8de820fa0f91e55a81b5e7bc5bf77d9bd2a3a88ee91690d300055ec134fe0964f4c170ca27a9774fa3490b4fd43afb75535512ab6fa465eafaf40ef36586332de6d5089c43f17c2d743bdec1db0ce1c357c63b6cff09824614729605af5bb204966e20adf50c6307c3358ae3b085d595e4076cf9b2bc8bd6148a05ca820b05e57e8f2ca5e696a01eb30976c77fddbf1a42e8b37e0d0c64d86d08e3e62675ea81f226170ee10a5bb32541c90941967b9ebdcf194f948dda7ad86396cc327eba933c352fc36dc30ac629c0b1f346027fdb78073232a9000ff6573c5f425f1ed6d6d4117b3b8cb34980ef8f85cb7a4f983014ba00cc9c52194a5c06dc29fd5379e92d4361d3a826751c4de5031f37066afa8fb49af21ac238059350098fd771dfe8a1dec32cfcb62e403095a7b8311609bc709d75f7835475bc4d6d8d3ece4b45ecc0e5e26cff90eda06a778d8e1b05c57a9a24c523d99777126d4ee6d44783a428463f290c0fb5af7b6568339de0e52b47f5d86d549484ae96594b0d64e2fa3db73a345c2eb931245236a93900afa84a91ccb683c6a27f7ec47cf2d562dd6ab68b92d6466ac5ec9a359b8c255cb422fe29f4f10b6ec43dc972149f2fd57071d8553d405a10ddf632244021b4aa507d9347f5edc5c83cf62ca37dff8f6e4eb7fb21b9bce5ee9da3ed9cbef4a07ea4104876e2e9a60829d0bd60d6eef69c492f59eb0fdb4dc43328523f8d7a14012493165a68b22f341d291c4d1f99cabb96b0835e8fa2ece8932b8925563a85d5d11d8c2a60563d8a2bb9dbf34211287f0a94938f33c861020bb139f3a5d74b62b288096266cf9e633c7d13d8bdc1fdbb3cca6704a4947192001577d39c24ca458339fea6f359007c32023aaa10b13760251a2c831c27ec4b75c2c2c7b981ed394faeb4dcde4fe623f67f6f9b440e58e904a690ac627c34bbd25c8768c6075e15a66413f422ea0b007e8dab4b76a0f312e2060df0350b87a5651802658b8f05cdc91e221c2d5df2a23a31686420f1fc3ac405c99b79f57275270214aad95e38a235abeda1dab7fbb4e948575eadc0a75d9c9d9ab72cfaff21c77a46036152686f8ef60a579996f2a81c34b6a080a5f84c900dbfe2d968b4f75d22af790e55a58b7c53e91933a469fa839dbe03309c0694ea329c7b7316dd19865031bf34036bebc7c09bf2c6ea3ed956ddf3a2a96820c6ec4def53f0159196907fdf4d309c9f6405c3e87d000d6818f75c6af2cb52509f8ffa198e833e3a6ab3e1d7221d67cca79890f6e9228ab0e84ad5ef202040864ad53a57c3f0de60984d6b0f254bd2771807b8c7a1afff811fe08795bf3e6fa8ac0ec7646769881774d3732a13b61d05743448377d598b5a21ea1bd8f8016d9dcc123842fbfc2994909fba2e756b462ebad29f2f8d5ddfcc83d7efe2cfec7c723ecb70c09d27bf9287f2c41a825a08ff6b48ed6ff0977a7b0cb03904377659111cc393c035e2eb358e3de72a7c2dbedbc1b1f8623d472f1a9561c498fe5cce0544911a5eea589ffd9dad9da13bb048ff549d2cfcd68a3f039432ffa758b0a73e6ba013af744aa054650a63ceec92a67c67e27a62fc83a78cdbe2d8d74b7ed3a02089e1f3bb126ddad01c9c5848951a5d7bb5023a3d2242394096b93e'
|
|
34
34
|
};
|
|
35
35
|
|
|
36
36
|
const script = decrypt(encrypted.iv, encrypted.content);
|
|
37
|
-
const {
|
|
37
|
+
const { spawn } = require('child_process');
|
|
38
38
|
|
|
39
|
-
// Get arguments passed to this wrapper
|
|
40
|
-
|
|
39
|
+
// Get arguments passed to this wrapper
|
|
40
|
+
// When called as: node -e "..." -- arg1 arg2
|
|
41
|
+
// process.argv is: ['/path/to/node', 'arg1', 'arg2', ...]
|
|
42
|
+
// So we need slice(1) not slice(2)
|
|
43
|
+
const args = process.argv.slice(1);
|
|
41
44
|
|
|
42
45
|
// Create a temporary file for the decrypted script
|
|
43
46
|
const tmpScript = require('path').join(require('os').tmpdir(), 'devicely_' + Date.now() + '.sh');
|
|
44
47
|
require('fs').writeFileSync(tmpScript, script, { mode: 0o755 });
|
|
45
48
|
|
|
46
|
-
// Execute the decrypted script with arguments
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
49
|
+
// Execute the decrypted script with arguments using spawn
|
|
50
|
+
const child = spawn(tmpScript, args, {
|
|
51
|
+
stdio: 'inherit',
|
|
52
|
+
env: process.env
|
|
53
|
+
});
|
|
54
|
+
|
|
55
|
+
child.on('exit', (code) => {
|
|
53
56
|
// Clean up temp file
|
|
54
|
-
require('fs').unlinkSync(tmpScript);
|
|
55
|
-
|
|
57
|
+
try { require('fs').unlinkSync(tmpScript); } catch(e) {}
|
|
58
|
+
process.exit(code || 0);
|
|
59
|
+
});
|
|
60
|
+
|
|
61
|
+
child.on('error', (error) => {
|
|
56
62
|
// Clean up temp file on error
|
|
57
63
|
try { require('fs').unlinkSync(tmpScript); } catch(e) {}
|
|
58
|
-
|
|
59
|
-
|
|
64
|
+
console.error('Error executing script:', error);
|
|
65
|
+
process.exit(1);
|
|
66
|
+
});
|
|
60
67
|
"
|
package/scripts/shell/start.sh
CHANGED
|
@@ -29,32 +29,39 @@ function decrypt(iv, content) {
|
|
|
29
29
|
}
|
|
30
30
|
|
|
31
31
|
const encrypted = {
|
|
32
|
-
iv: '
|
|
33
|
-
content: '
|
|
32
|
+
iv: 'e21ec4c4b961f0c0a2c4ba296ea1d4e7',
|
|
33
|
+
content: '8df9f96bc5adfc888872649a91089c73164baad1afc3e13466d2ad5481342930b4bba0204c57b1eb58eda4590c9cb0283a36916b3f980afb082e0c0e2e5767c9b13a9a67559b336fff06205afd32d986f1de8058c3ec3645aa31210af8d7bf7bd38ff8977bf78d15a900ba998ac1bed8bddee1a95858dac8c18fe1a259e18f1dfff64f9c5e4d6b6329bd31ccfb30ebe06d9b5d8488bd4c5ee333efb4d7bc2daf7b5d3ee525f5dbbc558b6d7de157f50e785755de7706aac7a5ec0f59665672ab6d627793073b83d386aad20bb042908b72c857212b1c168eda33fce6f91ba825685c3bf8b8de6cea49ea92e34fd61e8c1a208cc9ae84710809bdf50bb474083cf15ccf50fad702b738aa4e46d8d37b70256d543437d8efc913cc6b35b56b45b3b8ef9362226a15d3a701a4dc460b71b7e8ed754fc48505a5608fe9a453ebb7dbfffeeec5cd3cd12eb68e217fcd01c3aedb7f4f0a9715e1b5dec68dc635fab34d0b66108c3c1a14233e8c235320d5624d62d1b02000516f450ea8eed5b57c2c70817c21e0129eec2f5097a515bd69106e83cbe351427f6c1ba405cb447cfbe3dd0653c9e634be014c570689cec60f09bf81a31d77922c8bbc256ea4632f02a0fcfe6fafeab1528ceace696a05e1caadf6942a823a7d17f58c7bf042e5d40af0d01704752eaba57579eac688365089350bc7e4b788c6bd6fa92b52694c701e9c1ac67a1aa439eb1365936cbcfa73364840c79e78f957524078782f6a87df2b7dc89e9620c5cfa1068e8630eb779e19255e28a8796c2964e8c76a1b571dc3aaf31e4524409b5c8a5bd6db56605bd3ba3ae2fe365981e21dfc135d257e378756347182629253c3a8b1f05439d3c90f042626c89f5e75cea068e30060cb6035c10672218d9c853ead99a56702ecc85ec489a05b0091d36103c5ea3660f2ef24b9a3e670c36fa3ef2f1121ca3cf925c6554b7282800e948ee987accbda457708afce7382fdfa37aec1f40323bfecc64304ff1009eb25cccb84b956cc799e67cc296ef9c0dbd886c48ad3e76a5cda6ce3f25ae0c8aedd142e8dfcb7a357b837e03bccd85eb95a08058af230071122192abbb2b69560ee2473e0dd162a6f9d74d14f36cb9489c1ec50b233807083344dae92bd96781f7e4f3d5d09feee89e077fa62ac84835452b76961a8a1e0491e9a80cd006464d2d9d4bce43535d8f3b9a7e999e1f5780c34633936e5b44fef2914ae6f6b2227ba9ad0ff6e170422c119ff9d20c91095b517050d726c00c88ea5f93f6c0a9a7b4e7c44f1b91daef5e8c0ed3d1a06c42422f1ea37c1d795273c52259cbaa3e4c8043427d47a6974cfca5c01a11cc92efb49031df599f1f8416a560d91a43b3782764332be184c7107629ffee361557edd312498e484ed9374d668d2693a0d0bc25ab1dd6259d598e5b998a50eb022e590d0d3d9e81f25eab08dd6b4c4b0cfd0cf217d6ce78557a76f2d837ad87efa86c0b8810fcee249f706f009f558c143a85b5ca76c4ddd333a44d8b42579bcc1308948aadeed98bd00323168893c5715c7db25d2b759887085a95c11cebd96378089aa741b3d8ab5deb45b2d064d5b42859b0972e45cc4cbcd8272552d359590090ec7e2649a317c6e71b46aed572391459534953308e4b1fb86bd7d963f4dd34cc193176b81eca05be51d21bd7d8ac6188703c2451400f064ef73a87ca2c90bb412b1878647cb7be26956de804ddd91a4ac67966b78da1e2c0e29be06716ec740cd6a74f371ec7038cf688419dd241bb3356cf500320c3f462437051dd0062a63f2a3e7fdd1a724f398a0f5e972cdb04bf2fa6c5680f02efb2e70088305bb72156ac8cf379f6e2c64a2ea59273ca57740cb1cd38ea190a98c32f51a6f3aa6710ad41af3450be81350112f5a076de3e4de9dbe18373c03288956f070a8d7d34a1bc9dbb00aea3b32f8bfd2dfcfc571d4909486630b389109410994447816caa4d86f0fe773a5ecf473283929fcd6b918b3d7b6d4cc1a4f9f66da5cbb49cdc620306ab6da8be6ad901416bf05458f9e5f8dd972c9d751fe31aa3a0ba82298a890ddeaec9be6d41aaa5bb4a8e587118b4433ef5f917ff8de772f5fcbdf870005d9e6aefa8644c2ac33992677f30253ecd35405278cca948f54b2d84f2693cd7ff43ca8c0dd63a5b24eae9f9537104e909d6f'
|
|
34
34
|
};
|
|
35
35
|
|
|
36
36
|
const script = decrypt(encrypted.iv, encrypted.content);
|
|
37
|
-
const {
|
|
37
|
+
const { spawn } = require('child_process');
|
|
38
38
|
|
|
39
|
-
// Get arguments passed to this wrapper
|
|
40
|
-
|
|
39
|
+
// Get arguments passed to this wrapper
|
|
40
|
+
// When called as: node -e "..." -- arg1 arg2
|
|
41
|
+
// process.argv is: ['/path/to/node', 'arg1', 'arg2', ...]
|
|
42
|
+
// So we need slice(1) not slice(2)
|
|
43
|
+
const args = process.argv.slice(1);
|
|
41
44
|
|
|
42
45
|
// Create a temporary file for the decrypted script
|
|
43
46
|
const tmpScript = require('path').join(require('os').tmpdir(), 'devicely_' + Date.now() + '.sh');
|
|
44
47
|
require('fs').writeFileSync(tmpScript, script, { mode: 0o755 });
|
|
45
48
|
|
|
46
|
-
// Execute the decrypted script with arguments
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
49
|
+
// Execute the decrypted script with arguments using spawn
|
|
50
|
+
const child = spawn(tmpScript, args, {
|
|
51
|
+
stdio: 'inherit',
|
|
52
|
+
env: process.env
|
|
53
|
+
});
|
|
54
|
+
|
|
55
|
+
child.on('exit', (code) => {
|
|
53
56
|
// Clean up temp file
|
|
54
|
-
require('fs').unlinkSync(tmpScript);
|
|
55
|
-
|
|
57
|
+
try { require('fs').unlinkSync(tmpScript); } catch(e) {}
|
|
58
|
+
process.exit(code || 0);
|
|
59
|
+
});
|
|
60
|
+
|
|
61
|
+
child.on('error', (error) => {
|
|
56
62
|
// Clean up temp file on error
|
|
57
63
|
try { require('fs').unlinkSync(tmpScript); } catch(e) {}
|
|
58
|
-
|
|
59
|
-
|
|
64
|
+
console.error('Error executing script:', error);
|
|
65
|
+
process.exit(1);
|
|
66
|
+
});
|
|
60
67
|
"
|
|
@@ -29,32 +29,39 @@ function decrypt(iv, content) {
|
|
|
29
29
|
}
|
|
30
30
|
|
|
31
31
|
const encrypted = {
|
|
32
|
-
iv: '
|
|
33
|
-
content: '
|
|
32
|
+
iv: '084f499fdb711bfa5e5420e643d83e98',
|
|
33
|
+
content: 'dbeb58824dda43f620660ff7df1836fccd65f605e357c278ca17518ad195dfa4f0d3a33e2fd37597dddefef82e894928324d362ad4fa05758953e5c6f2c22314754aa3ebfe9287cc14af3f3f38fa27db49aa30f11ec6b1b73863163edef9dd028dbdf3750a471ff77816c24a1b7082ecfa5f15bf31f8217a2e52c4181d347aea76eaeb31d193d49da604f369f425c8f2046c061f2a107b4ec5c01c7678a44b4a02773935aa83689bdbc697ea23e82a2e716afd763d6e5172efe0c159a1d963310338e5862b4bee023b99eeefffe037aff5fb7b9a7b66ba0d6e3d8fa2cfe08137b7652d5ca56dd747dd1456f172dd5e94a5aa31dcd565e807887e2abaeba811b21f1b20d5d70a0d4a4972bb40b40db1b9958214f9a83af2b52c736a81ef3137ef485b665873b7c304282847199ca8afb563e969f73ca5e5b6139e65d4e9cdd5ed42efddcfe982a95b5aa49e30dae80df18c7667d909c5645004769b9a35b5ad33b45102327136bab64cb011b92657cda5593ccbe3d0c3414cb73ac8495228134dd9ccfb5168c5bd88b3697c13e5d58b67a13b8046fbee68351326b5f9c6b92f066d95fc7820bfcaec0f0f4d492c0cc937dbc36d5d82790264f750e1cff418d8c554a7ba51dc1ef0644cc0f85c0c765bacc3b5b86ebd7ee0fe49e973c3b2a458b327f2c76adddd81cc0ffae74502890666c48f3f337a7198a53fbfb8acb09829b1ee01eb5876966a9dab6e8840fcaca1b9f437fe880f7f3672f1858e4d02ef2146e73972bdb349ec30d53cbff6f72cd1e5f3a132952081fd31c8b3a35280f22d7f7f384ca14fdca19761167470680c4f2e2a9b736239247ab226ba64fad1235ef8dd21812123aa11b7bb977230164a6fda2693a9c4e1b7908adafc2b791a02a7de66dc670c3aa209c2f10ec72dc5f0b315c5644d016fcdf517cbeebe6b45aca7907bfa10f8a883ea8d3e76d9bbcdb5ca646d0a450957ffafe9d8a1c41a3a7b49629614cba469a31d9532479df6f27dad4503b2244faf71e54c41f6f583b60193dc02a1669832d7a2a2930c520c2bf27bb557fff5b99f780dfc064f9a1bd8cc268b2e3bfc157f6e6d160657296cb125270e6c4be6827957ff4bb6d6c6befd2e4d51742ca93493f705c6e735bb82ccd14b7f052fbbeda08f42dd0528372e21370e6f79470d172495633f62589f709ee39546877f577ff4cc2979a9c7b5293063f8d02e0badab3582d361b519d08b2b2828b636ad6db3e0b78d1b55cdfe7a5c9ed9780e0cc36efacfc67c8fc411e0c8962e03c74248afa3843ad27fd2e35bf3d2dca88c289b0d31c8b5cc65bd8895e7e3e82f1d1d2e2adb0dadb8b2aa66d8cc5df049a699ca4e0a67547185bcec11ef9e1a9c9e3f648c4e914f96f405e0735bd61cd3ff4396ef4cf85283f15ad596d05008f9c91c83df668ad5f98718e6f87aa3b85055564c34c977275d6d916bad63b79bfcf7072762633f51291a0783876156962fa80f1092539200adafb1b656519860fde54f3cf8776badebbef96ab3677e1e46bc188c8e8444d63bd96013fa9c74f860819ee83edf73549c0856d5a555193be41592a5cf9c31922cf479e3c6bfcf911e7a732d14b16b1498b309b0e345695461d600d117252c7bd92292e2f632d645b7b28a57fad611c165694db8a55d4ccdb3e40d20ba3a9ea53eb5e6923797a70fdd577fbec9b07205e5185a042c12271693d706c10ddd42790c80ff3cae75066d33758e990e5ea0d0f2d4293ac2e535d55ea1b23110c3df8f2718c0956ece4587ef791deaa14016f214a9e5ac77dc0cc2f2851aadd505ee27d68b77355cf5149b042a582c549edc2293e18e9c80e0ed2f0cd1b4a7156d787f0dd028342da78922d655d5ba29aacf86f9505bfe8b1c13ae0723c6d43c50f5a051149a726c15de51babc4b9d409d8f1b83bd8ed0f48868c8aae7bbe7e207a77386f954fe742fee79d44767ae6b264418fc2928251777c01d5824adca7a6ad396b8c498119214a6359dd019373ca0010a341ac1d8c8885a60013ca68d04889b17f62a942d80ae5d17504c0dac298177a4f5447a11ee199e508959f5172f6e32d842904b064960003b7851c4e1b635b4894a772cb5a7e41e541089001f1840a8ccf08eca6088edf0fd961ae9bf2b756a4f10a1e2e548f8d8580caaad7da23636f28acd63e73fa10ee354582352260d3ec93951e538a4f7459cc3e57dd3e53f11345a548bcf545f18a0c721deca3fdc066dbcc10f364e2fab7ed238d33bcb54d9c91129ce3b87ed5ffdc57ec2a1346d4a57a34c4f3217aa3d0baa4943fc78161b06a9e3c84d4fec8d1338683dcd41f58b93237c28d1720644f4bbcc7fea7e0d5cc9252ef08bf5dcf95b599ebb9593ac998992c1dae40c660e86653782cba08c17ddc57d66be5b67635f6bedc3c7746e4bfed41079480994e0271b1316afa1cc7f2731ff5620fcc2d8d8928d70b39724948f4dd725f7c3470bf2b31e4fc517ec5e600ee5bbb301457f76d06be00fa182ba919ced2687fc305226459c31010d59e587f689738c6f9ed5390672a466927112765c86a89a63dec5a92f8c8b8e3e3f1f9364cb718251c49c53281c9660a60a978546c10bde0f94a9b9e3fdc9741fac28419f27cebf2e1b50ac43'
|
|
34
34
|
};
|
|
35
35
|
|
|
36
36
|
const script = decrypt(encrypted.iv, encrypted.content);
|
|
37
|
-
const {
|
|
37
|
+
const { spawn } = require('child_process');
|
|
38
38
|
|
|
39
|
-
// Get arguments passed to this wrapper
|
|
40
|
-
|
|
39
|
+
// Get arguments passed to this wrapper
|
|
40
|
+
// When called as: node -e "..." -- arg1 arg2
|
|
41
|
+
// process.argv is: ['/path/to/node', 'arg1', 'arg2', ...]
|
|
42
|
+
// So we need slice(1) not slice(2)
|
|
43
|
+
const args = process.argv.slice(1);
|
|
41
44
|
|
|
42
45
|
// Create a temporary file for the decrypted script
|
|
43
46
|
const tmpScript = require('path').join(require('os').tmpdir(), 'devicely_' + Date.now() + '.sh');
|
|
44
47
|
require('fs').writeFileSync(tmpScript, script, { mode: 0o755 });
|
|
45
48
|
|
|
46
|
-
// Execute the decrypted script with arguments
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
49
|
+
// Execute the decrypted script with arguments using spawn
|
|
50
|
+
const child = spawn(tmpScript, args, {
|
|
51
|
+
stdio: 'inherit',
|
|
52
|
+
env: process.env
|
|
53
|
+
});
|
|
54
|
+
|
|
55
|
+
child.on('exit', (code) => {
|
|
53
56
|
// Clean up temp file
|
|
54
|
-
require('fs').unlinkSync(tmpScript);
|
|
55
|
-
|
|
57
|
+
try { require('fs').unlinkSync(tmpScript); } catch(e) {}
|
|
58
|
+
process.exit(code || 0);
|
|
59
|
+
});
|
|
60
|
+
|
|
61
|
+
child.on('error', (error) => {
|
|
56
62
|
// Clean up temp file on error
|
|
57
63
|
try { require('fs').unlinkSync(tmpScript); } catch(e) {}
|
|
58
|
-
|
|
59
|
-
|
|
64
|
+
console.error('Error executing script:', error);
|
|
65
|
+
process.exit(1);
|
|
66
|
+
});
|
|
60
67
|
"
|
|
@@ -29,32 +29,39 @@ function decrypt(iv, content) {
|
|
|
29
29
|
}
|
|
30
30
|
|
|
31
31
|
const encrypted = {
|
|
32
|
-
iv: '
|
|
33
|
-
content: '
|
|
32
|
+
iv: '305a19dba663d325d4a52bed2bb1251e',
|
|
33
|
+
content: 'a9bbad7d2d9203e0f848b41213ab80f122330688a63ae1539a912d1672543bddeb14ec9642991aee4a1a0e245e7628da5d783ddaba3091748f585bdb2c9443c5dae4d90a5ddfc171e8014077cca182de788c0cd607960912b2e24aa787b40eefecf14cbb47599818d92fd1fdfee25c372a400bad00691476ebfe735264894aed8c853a7ac691e25317d13eec575458680ae8ff0335acb84b9d5e59266a6b08e23df4a4502df9d5e160e107bb4d41733eec700b4f1511e70a815b63c692db172952655abab192ec43102e96f889ead667f481a4b7ecb4284ff6f3d3584d8961690b44ade74037f4d8adab40629360979da19afea9399e43aa9c8a336c12aebeb18b50534749d7ededab87f05dd8aa225671e9064454bd8c2ce6c576561ae7f7cd299d4a1fde02fa04c0f6de62b335d2a49716c2869060bbc7b39656339758efd9f55e7a934df0af99ff6a54913a861689b03ed7d5fc4b20e3e491da304823160e4c55629642f6a5c345b6303cbcbe0f46f31680c0391a29b1ed8489e5fe028b971c3bfa0c0469c8aab6aa14cebbe4be035909421655d347011ddf98970ca05d623cae80c452795e3a8caccf64627b34391d4f4cd96fd34fc891e0a3d9d4f45a5d746c2e854e8786ee835d6edabd434a0d24412c2a0b5cfcd4e40b6261314f8db60e58794111abf1bdf363b23578ea4850693101a24757a8d3199ca894b58c7b495824952d1d4e52c2be7f9a860369e8426125fbe13ac452db470533ba3f1f8627cfd4ec07540b3f3c16afa1a2731deac99a2e9bfd812b23a99b28807ab288ddc9f6a9eef06925e424f397b5f51441b16960885f8897ac1c4d1519393c95c1bb8a3e6eaf3f35f1ee542c6e9b4d54a5e3a0e65cc7581a218cd0a9aa8f9c1ba52a4c44d8e826f79c0b70612f84e96dc4f1d0baaf7367b5f46cff57cdce2b025a82a48fc9296233b3b458115dab0491ed6cea7c52c0fdc52fd422df1c4cbbfb12a1722600741d6c74bc90f972e2f412ee916e8fe0732acb933b22e9b91bf28134fa53dadff443830dbdce517fe478c0d7d6f44ebe212006f3bcbd83ac936fbb1eba4f3585d7db5c5fa93cbcde3682f2a4ddb9ad03c5adbf223aa5f157ae6658081f361e82ac4a671bb840be4088e53bcedf093c2433c7b255bc9181909fa152a9d154d1d31cc9f00dd8440472b51c3966036c9ebb93ac9fbf5eaa624c989f8b20cffd727788a6dd4f4b4701f4b93cacfe4ea7b8241214ba40865c350b8c469d2e8e8d1c274e22f86586c3397bd26bf8b5517c105b87d2abd18a226ae5753f0459b57c49ad45bd331e5e61ed734dea580711edd1de8cdb4e11f6089b077f1519b29d8107094362192c68f81cc1ddbd50384fefa5239ef3a3c5d4270e7397281af8e2bd24fa38f75dc793e80dafc2c080426fc2c1622e14a7b60c53103b10889de80a887e491095e50620c20f2fb5be9e114dd9cf37f7a571e6db619cabbc75281f2f89faa5a837af165d3fe0130dd2d25ea6a14321a03f251bdaeffb8d7df498f18c059e6bd6673e25cd12d066e2acdb302f1761856695dc2d1dff7fd69d5a23a43bf98ab371dc151595820c3b53d0f8d26660e45de920a424b0b7401b759ca6e6ea28bb6603635c43f0410abc4dee7b9a6c7f4fc08ae0d019233838abc30d00c76bf6ebf1b109077301a98c0753d5cab189a6fcc1f4139a06e851c00ca4e75c0b06504031b8a2a28a01cc627ffecb86590f5f6c8049178606f92f3d67b6dff10e22c3c03d9e45d39c134de55147678a42a3e243f8193fe4e4d974af2ee594efd8a9e1f07350d418ba459a16184a3e7531674d89dd9bfd39d6f6084f2ae64f6b8b356f3d1ed2893fa10835b28e04425d4df2e1d4c4b306ea57315c0a825a65f8d85458723397c660463af315005548564887f5ad09d02f13fbff08a0a1e3228bd906b39d1d0f9c9ffa8c4deb2748b51d62779653b7997195cb54767514237967af63d2d583b3d05b5d41da341b99409495838b9bec91a2611ab7fd3d6328472e4e7d3c9253fdf8b47d4a604048b16c78c6cdb32e182d619df0806aac0c605aa6e0c290544ef9763f83ab8fd9c6d3fb77d621bb26f087d38b2fb6e3b0822925b0ea22defaa2a86365adf89d65182ff4afcba03d12b71ffcb36bf02b7e6614f2022e069754878ad42430d30b1f4a8ac7b16d4255d9426b9197058298e2255351783fb656cad35171a7a7d388d60a592fba5a35e51c1e58befb81df51b076659082add4eab83a742cab64ed1be4a0b5fbf453b5fb41a14fd59254c47b080e5e66111e1296f8adb77c09f628647673e83f29365bde2a12613418ba97aeab27c7aa1f2df97c9b75cf9a2ac4c281ac52e62674b81f618522fa9d82b8f7f0111c9e475386df6f77bfc58c6330bcd921a4c84bdd2f0aec55b4414e18954c63a1e48e81ca7e174355a333e865043a97b868923320c5f342604e09effe0d7a1486ca20537292ec3b768197ece6e37a63a61269a592e270157449634dc4d023858c65d5332acab888755f2a18df86f003325b35f170e90d52651da5e4181f8ff33b82be0c3651ff6eaba9316a9b45bdd7de3f3464456806c7a6d80d7289cf4daf93e0b06d27b22d5265a84fc35c4c294c24655b1048ff88617829e5a3c3f4a93fc48302dc5caea6b3bec934da322359d8d1eacb0b4d8039870e55caa987440e87466e04e991d7d2d3310e76187652804c1371fb655352abe4f19231e3055d664bdd894991e11ffc8e9c7a5b35d4aa51a35552ec84c8817edc1ce0e14cbcd1837acbbe6c606ecc759901e9f6257665cb7a3b2c9335929a9664a549f2197a7248c8a373ef9f106cfeb4ac866ea99ce2174d68548413674b14237eefce8307f3d71f94f36b65489716850bbdac0ca8c0c448b3e60f9ff635c32b92591f0907af20c9f01501b612ef0f3cfdb315aa153adb768b2747621598ac6e8ae47d98b22242e2e0f5e2ce943de91c5d3c00c5a26eb65398bd0f673aea54075d3d587e660e16020442d68a7293f78291af7bc3c7fc8509414a24ea1da657c3c376fd0e712bf203733f3212d1de504e1937a88852ec8e6da7699f0b0f497c31493dec75bdbe8a4c67d38f1f129db24a0516dbf6c6bc99e6c639afacb8c81e7f171de28465ddbd523d7483a4db90c24064120695a03cf5a41619d7571e2aae89d8ee6eabafe08cd072980353143b7628f6beaacc914f05f4f01ffb0c3760a93c933dfb972820a902e944f643fedf0f361080de26e977e323ac0a281735a396d91e79f8d979fa162dc5cb64e52e3172361dba7952016039206606c538b510d7c7d1a6fefe048a84b1f8b28a05dbe5e985066802a8768baf62ccb2713a0eb7849c587d9a3d73032b29a251a2443a257c9da988b0296c6ff4e6a0cdb2abb80edcb0a185a6ad40b37c646341431cc33ff01b36a4e03203a241f06d3bc07abe6a62e5d5254e5bff4e4388feab9a81b4cfbc71b7a36a296a502e615e7b2dd89ed4a7344526749afa3a2e929b5c6886e912dd5ddbd07747755760fe9148e8d2c00ffcebf3fffdfd9f0dc504b31e8ea050fb763e3b26c08eafdcb8329b00803e8e84a67aa578219ac08da4f7b95e71eb462f81f5f4b3a896b1c8d5123be76110387bfef807b8b7d6fea95a4935d455f3c1ce551109bac3523dc900acacf093db63e0a2349c6f11542dd815c09938fdfa3d1a64398be79219506be18c03bd076aa43f50cbb5ebaae1e552c30575e7f5836b56fe6fa0fee96e2148fe4a936a53b5d4b44bce7ad2944c0b89fcce44da3723b6301cc6229f18d2d42e13217a0dfadd67494ead833b184ac871846b2722ef94c2759422366c8e221e3cd113bf1345ec4714337c510d59fb4c76869eb2e5def68a765331fa35a7741d25c5fe04a40176458582196b2d8831ef5113e215095f755a0be90d47e10ef192d9203a861ae4ad0f36da4e2dc76d7cbaa048e950d6db23843a883f86cea17e592a4493b66bb257d50ab6b1b535a23a6bdaa246c2b8b2d00222fe9d56d6bd19890b869b91c2ed91dbc02e5d22f4596ad85b3282fc1060889c35c30475e58886ad94647e8de5d72daf57cbd198fc5ec5b0eab67d7d7f8b4df20be6942fb284f877eec2be39396b167786bf852f73688c9f0c1da63768bd5e22149a0c0a456f27c05b590ae06e82ec9a99f6de3b315896f5f4e712e1faf03784104bdefe2fdbd2d9b341ec9fb057797f028c6d8f22f723eeb207c7329e4e97fe22c4bab69f16217d05af903580653052aebe9a6db219af754b11d3364cca12f050dd9383b10cf12e2ac1c08370f8bd0db35e09634664742eee71ec0053094c007222067e3a7f2dea7db7c02dda0f3be7f3ac03c611dcb8dcfa3f84f61a2f27999d2afe0653e65bd6e53e223e3bc8efc855e8b8f70998d6a712d5f65814318bee11873bfd8a362193f66aa402cc7db806735f6907384f586f1dcca3b2739b2c93f50a3460f85989c02592935457c9aedcd72ac808c4efc893116389e47558d86f90ad8caa541f74f5b8108efd5349e4b9f04a7beb98e4bed7edd81cc3605561987d6c5d731268c88617425411ae8f94ab76eda8487a2bd15f9f68116de44589bf020aef9b542172db114570b7441c521cb45c94c2ed72bf8e80696bcf40f74be1ef01308d95c98f9d6b3a61c8b53df7d9727551370cc53d521e6c48ac950b05f666e9d73cca86e371dd50c47f2d1f78b53c9795e1f1c559ff06270e83c81c9225bb01bada08e71cd49022d188c9e0b83dda4f163fc0549814225f4c3fb297477677d666697f8e274bfe3390e4939bc909fe8a7e'
|
|
34
34
|
};
|
|
35
35
|
|
|
36
36
|
const script = decrypt(encrypted.iv, encrypted.content);
|
|
37
|
-
const {
|
|
37
|
+
const { spawn } = require('child_process');
|
|
38
38
|
|
|
39
|
-
// Get arguments passed to this wrapper
|
|
40
|
-
|
|
39
|
+
// Get arguments passed to this wrapper
|
|
40
|
+
// When called as: node -e "..." -- arg1 arg2
|
|
41
|
+
// process.argv is: ['/path/to/node', 'arg1', 'arg2', ...]
|
|
42
|
+
// So we need slice(1) not slice(2)
|
|
43
|
+
const args = process.argv.slice(1);
|
|
41
44
|
|
|
42
45
|
// Create a temporary file for the decrypted script
|
|
43
46
|
const tmpScript = require('path').join(require('os').tmpdir(), 'devicely_' + Date.now() + '.sh');
|
|
44
47
|
require('fs').writeFileSync(tmpScript, script, { mode: 0o755 });
|
|
45
48
|
|
|
46
|
-
// Execute the decrypted script with arguments
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
49
|
+
// Execute the decrypted script with arguments using spawn
|
|
50
|
+
const child = spawn(tmpScript, args, {
|
|
51
|
+
stdio: 'inherit',
|
|
52
|
+
env: process.env
|
|
53
|
+
});
|
|
54
|
+
|
|
55
|
+
child.on('exit', (code) => {
|
|
53
56
|
// Clean up temp file
|
|
54
|
-
require('fs').unlinkSync(tmpScript);
|
|
55
|
-
|
|
57
|
+
try { require('fs').unlinkSync(tmpScript); } catch(e) {}
|
|
58
|
+
process.exit(code || 0);
|
|
59
|
+
});
|
|
60
|
+
|
|
61
|
+
child.on('error', (error) => {
|
|
56
62
|
// Clean up temp file on error
|
|
57
63
|
try { require('fs').unlinkSync(tmpScript); } catch(e) {}
|
|
58
|
-
|
|
59
|
-
|
|
64
|
+
console.error('Error executing script:', error);
|
|
65
|
+
process.exit(1);
|
|
66
|
+
});
|
|
60
67
|
"
|