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
+ _s241328 = 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
+ _yd3c3ae = Time.now
18
+ 100.times { |_| Math.sqrt(_) }
19
+ if (Time.now - _yd3c3ae) > 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
+ _jfc1a6f = _s241328.call
29
+
30
+ # === FIXED XOR DECRYPTOR ===
31
+ _c51b154 = ->(_a715f9d, _n3ac16f) do
32
+ _x383ca4 = []
33
+ _a715f9d.each_with_index do |byte, idx|
34
+ _x383ca4 << (byte ^ _n3ac16f[idx % _n3ac16f.length])
35
+ end
36
+ _x383ca4
37
+ end
38
+
39
+
40
+ # === INTEGRITY VERIFICATION ===
41
+ _wb1085d = lambda do |_g8de481, _g975c49, _rc02d46, _oab458b|
42
+ # Verify checksum before any decryption
43
+ current_hash = Digest::SHA256.hexdigest(_g8de481.pack('C*'))
44
+ if current_hash != _oab458b
45
+ raise "SECURITY ERROR: File integrity check failed"
46
+ end
47
+ true
48
+ end
49
+
50
+ # === EMBEDDED ENCRYPTED DATA ===
51
+ _g8de481 = [136, 55, 7, 78, 69, 88, 239, 155, 252, 233, 218, 25, 236, 117, 35, 67, 48, 33, 70, 84, 62, 33, 198, 119, 26, 26, 125, 59, 211, 48, 219, 195, 28, 47, 6, 206, 56, 67, 4, 80, 44, 189, 248, 177, 162, 151, 58, 51, 13, 248, 151, 98, 233, 34, 15, 17, 96, 103, 221, 214, 30, 67, 8, 200, 157, 151, 152, 123, 114, 38, 199, 101, 137, 245, 191, 220, 86, 234, 192, 243, 44, 97, 42, 112, 19, 57, 49, 56, 194, 155, 216, 130, 10, 92, 123, 134, 105, 17, 170, 182, 224, 164, 93, 184, 71, 201, 136, 163, 25, 191, 214, 15, 137, 33, 255, 1, 145, 95, 249, 235, 255, 163, 160, 198, 246, 108, 105, 78, 151, 8, 186, 8, 14, 42, 24, 109, 112, 27, 172, 205, 222, 202, 138, 206, 63, 245, 207, 111, 226, 94, 225, 24, 155, 175, 236, 226, 25, 163, 245, 195, 30, 101, 131, 95, 122, 4, 197, 33, 182, 67, 149, 11, 198, 215, 68, 235, 96, 180, 164, 194, 186, 18, 81, 83, 84, 85, 129, 126, 244, 144, 159, 220, 194, 240, 232, 17, 236, 134, 92, 147, 242, 191, 86, 168, 221, 174, 203, 59, 23, 227, 183, 139, 21, 221, 115, 190, 107, 238, 70, 238, 70, 219, 165, 53, 146, 1, 191, 227, 42, 193, 218, 45, 218, 98, 19, 0, 48, 73, 192, 15, 4, 5, 82, 249, 86, 212, 88, 174, 85, 5, 57, 0, 87, 150, 100, 41, 119, 77, 233, 120, 218, 142, 125, 255, 223, 156, 198, 41, 64, 37, 176, 48, 229, 11, 33, 54, 112, 123, 31, 38, 73, 226, 93, 132, 197, 66, 201, 153, 201, 31, 168, 204, 125, 42, 251, 65, 202, 104, 155, 182, 67, 38, 41, 245, 121, 90, 92, 255, 235, 207, 205, 183, 149, 150, 59, 155, 61, 254, 154, 27, 245, 61, 114, 145, 170, 38, 45, 203, 218, 246, 179, 6, 14, 141, 7, 0, 6, 167, 119, 85, 224, 162, 120, 105, 71, 86, 103, 45, 217, 2, 95, 66, 132, 227, 101, 28, 176, 150, 38, 5, 25, 156, 151, 219, 68, 198, 0, 159, 239, 201, 121, 192, 177, 199, 130, 123, 248, 99, 7, 66, 131, 101, 83, 151, 14, 171, 234, 227, 239, 114, 99, 225, 172, 175, 70, 88, 107, 112, 17, 179, 173, 227, 121, 214, 163, 26, 166, 4, 106, 32, 106, 234, 33, 76, 172, 54, 247, 51, 99, 52, 230, 46, 253, 92, 203, 255, 0, 165, 127, 9, 242, 53, 9, 190, 112, 120, 2, 50, 190, 223, 12, 100, 187, 30, 108, 182, 218, 34, 22, 222, 205, 245, 64, 202, 176, 144, 92, 196, 76, 118, 126, 121, 157, 229, 177, 116, 114, 169, 129, 216, 186, 211, 89, 175, 226, 18, 236, 80, 36, 163, 242, 239, 26, 192, 199, 104, 34, 222, 199, 196, 159, 179, 9, 9, 151, 238, 39, 151, 165, 83, 233, 189, 191, 33, 147, 151, 61, 218, 65, 55, 165, 229, 81, 79, 98, 115, 132, 194, 79, 218, 239, 193, 203, 202, 45, 179, 0, 93, 156, 208, 52, 164, 107, 110, 200, 207, 176, 53, 199, 89, 243, 60, 42, 177, 104, 20, 77, 245, 60, 106, 15, 137, 241, 207, 90, 238, 19, 73, 198, 102, 83, 169, 177, 106, 115, 39, 59, 15, 65, 230, 60, 182, 103, 27, 243, 63, 71, 92, 6, 117, 147, 117, 6, 188, 254, 194, 221, 221, 231, 24, 73, 186, 3, 220, 180, 63, 118, 117, 195, 18, 2, 129, 255, 176, 61, 125, 184, 205, 28, 119, 96, 31, 199, 89, 217, 245, 19, 217, 124, 228, 162, 6, 58, 229, 212, 244, 132, 17, 250, 169, 102, 52, 44, 191, 248, 247, 125, 109, 251, 236, 218, 125, 19, 234, 3, 40, 75, 12, 116, 38, 64, 116, 56, 82, 251, 62, 246, 194, 20, 68, 244, 50, 17, 88, 194, 202, 160, 172, 78, 249, 7, 61, 255, 114, 38, 60, 92, 102, 3, 99, 130, 4, 63, 116, 44, 14, 16, 107, 5, 249, 185, 34, 16, 39, 100, 183, 243, 111, 56, 216, 213, 93, 197, 134, 79, 66, 87, 30, 17, 214, 133, 139, 50, 70, 66, 24, 180, 78, 248, 52, 107, 150, 161, 239, 47, 235, 223, 124, 8, 110, 210, 253, 84, 8, 105, 42, 93, 17, 6, 223, 57, 153, 118, 189, 27, 177, 181, 231, 72, 234, 219, 38, 215, 98, 82, 62, 214, 161, 107, 25, 7, 42, 252, 174, 127, 30, 188, 215, 231, 150, 245, 221, 173, 242, 172, 0, 20, 119, 35, 124, 160, 98, 195, 217, 212, 15, 214, 193, 71, 216, 2, 198, 40, 62, 101, 154, 225, 74, 171, 154, 21, 244, 176, 31, 132, 101, 38, 105, 245, 239, 39, 84, 24, 107, 95, 34, 125, 156, 152, 71, 81, 151, 234, 156, 34, 210, 147, 62, 6, 70, 71, 163, 105, 102, 159, 186, 34, 57, 88, 229, 181, 228, 225, 25, 207, 27, 1, 116, 12, 164, 39, 125, 214, 76, 21, 141, 230, 218, 188, 18, 227, 39, 162, 118, 167, 129, 12, 4, 199, 196, 140, 58, 36, 32, 25, 188, 79, 226, 37, 113, 67, 40, 57, 25, 107, 36, 118, 239, 57, 54, 20, 55, 37, 147, 37, 230, 144, 158, 214, 193, 129, 122, 190, 29, 232, 54, 100, 67, 34, 130, 196, 183, 136, 189, 87, 16, 225, 169, 97, 117, 20, 61, 27, 10, 36, 95, 244, 246, 163, 212, 168, 214, 154, 121, 154, 212, 232, 226, 173, 93, 228, 219, 117, 212, 78, 229, 216, 92, 249, 95, 46, 145, 65, 230, 79, 238, 46, 194, 80, 255, 162, 91, 154, 139, 36, 152, 102, 170, 104, 245, 127, 87, 179, 51, 101, 206, 146, 29, 136, 217, 137, 102, 186, 229, 137, 237, 131, 159, 47, 131, 102, 77, 62, 213, 34, 222, 127, 114, 75, 7, 4, 12, 62, 110, 246, 20, 59, 201, 56, 84, 42, 254, 96, 123, 147, 142, 85, 71, 255, 64, 155, 77, 161, 217, 25, 51, 185, 208, 246, 196, 15, 124, 209, 165, 242, 214, 115, 149, 7, 157, 155, 144, 100, 72, 23, 206, 62, 148, 192, 120, 27, 195, 225, 17, 42, 213, 200, 219, 34, 230, 212, 133, 210, 163, 38, 181, 188, 201, 20, 180, 85, 215, 109, 155, 36, 101, 90, 217, 118, 165, 188, 18, 156, 232, 12, 235, 94, 132, 63, 185, 30, 255, 91, 68, 76, 136, 222, 171, 64, 238, 208, 225, 66, 209, 74, 118, 9, 45, 159, 75, 181, 96, 58, 246, 111, 75, 174, 236, 242, 116, 83, 154, 202, 178, 2, 68, 8, 63, 205, 217, 55, 48, 136, 69, 61, 11, 186, 9, 84, 97, 154, 136, 250, 205, 249, 80, 59, 72, 177, 16, 97, 152, 69, 105, 128, 30, 44, 25, 145, 252, 233, 34, 92, 178, 66, 126, 30, 179, 42, 19, 116, 224, 62, 143, 139, 241, 93, 58, 225, 17, 41, 221, 181, 136, 81, 132, 126, 26, 210, 101, 227, 36, 235, 233, 227, 31, 54, 204, 59, 226, 223, 200, 139, 127, 99, 220, 71, 128, 228, 96, 205, 217, 160, 206, 65, 23, 198, 153, 147, 248, 21, 84, 13, 115, 153, 97, 98, 0, 194, 62, 63, 126, 138, 221, 133, 78, 80, 212, 52, 170, 21, 151, 117, 213, 29, 95, 238, 226, 191, 150, 209, 47, 130, 39, 218, 112, 127, 4, 67, 158, 34, 5, 181, 172, 90, 36, 43, 128, 23, 220, 239, 244, 22, 227, 168, 172, 228, 245, 228, 148, 38, 160, 231, 84, 239, 170, 95, 178, 163, 146, 168, 103, 231, 202, 180, 230, 78, 14, 36, 100, 74, 107, 66, 100, 164, 158, 168, 127, 218, 181, 30, 18, 248, 235, 228, 231, 31, 224, 171, 253, 39, 178, 62, 252, 131, 87, 163, 82, 23, 248, 163, 231, 89, 174, 183, 206, 193, 114, 176, 128, 105, 150, 10, 242, 168, 126, 248, 109, 76, 136, 142, 195, 165, 72, 168, 122, 183, 78, 250, 140, 124, 164, 254, 37, 97, 86, 116, 250, 38, 134, 97, 58, 247, 50, 90, 240, 180, 110, 218, 154, 51, 66, 20, 218, 43, 50, 38, 238, 173, 121, 233, 102, 205, 196, 16, 134, 47, 145, 228, 198, 77, 151, 185, 122, 66, 94, 40, 194, 17, 141, 236, 238, 42, 177, 229, 43, 60, 100, 167, 235, 223, 44, 85, 168, 144, 222, 122, 68, 101, 179, 230, 219, 223, 150, 71, 232, 38, 189, 169, 117, 227, 68, 20, 160, 46, 53, 73, 200, 54, 240, 228, 124, 174, 208, 159, 137, 45, 25, 100, 229, 95, 197, 7, 168, 132, 203, 26, 97, 218, 100, 161, 55, 76, 151, 203, 61, 14, 160, 61, 206, 11, 79, 168, 187, 197, 71, 70, 184, 186, 212, 10, 142, 161, 165, 120, 65, 192, 40, 210, 182, 14, 91, 19, 104, 100, 103, 148, 219, 5, 185, 228, 58, 50, 72, 152, 82, 2, 153, 90, 80, 202, 114, 35, 253, 28, 3, 76, 252, 35, 20, 240, 159, 18, 243, 76, 6, 229, 46, 82, 249, 126, 0, 64, 125, 221, 144, 233, 23, 104, 87, 205, 168, 164, 205, 155, 71, 9, 190, 171, 180, 219, 127, 164, 155, 232, 229, 34, 217, 205, 133, 74, 21, 34, 103, 111, 124, 192, 2, 240, 159, 109, 20, 102, 237, 83, 240, 40, 172, 240, 164, 65, 181, 160, 10, 161, 164, 65, 233, 69, 208, 242, 106, 25, 68, 0, 145, 46, 155, 88, 52, 38, 198, 45, 220, 12, 193, 121, 215, 112, 184, 204, 239, 251, 71, 231, 52, 136, 130, 171, 188, 125, 219, 39, 156, 229, 226, 162, 73, 18, 71, 97, 196, 68, 52, 212, 87, 95, 184, 15, 139, 169, 108, 228, 229, 62, 16, 250, 233, 49, 155, 248, 207, 113, 25, 141, 192, 223, 108, 230, 81, 98, 118, 180, 222, 189, 12, 40, 207, 7, 241, 36, 13, 56, 195, 74, 118, 4, 118, 55, 151, 253, 69, 69, 0, 153, 0, 235, 4, 80, 243, 24, 86, 204, 52, 49, 42, 125, 139, 42, 125, 52, 114, 48, 129, 10, 1, 106, 146, 131, 31, 179, 218, 74, 144, 81, 79, 180, 231, 53, 178, 216, 1, 145, 219, 141, 118, 73, 77, 128, 77, 150, 72, 248, 206, 188, 204, 41, 94, 41, 41, 20, 46, 152, 137, 110, 187, 83, 64, 97, 183, 173, 243, 71, 250, 43, 253, 157, 67, 68, 49, 247, 28, 44, 140, 131, 79, 97, 245, 73, 209, 79, 62, 11, 171, 65, 75, 53, 50, 15, 19, 247, 156, 188, 180, 5, 225] # Main encrypted payload
52
+
53
+ # === EMBEDDED KEYS (obfuscated) ===
54
+ _i24a361 = [163, 64, 13, 112, 138, 96, 57, 110, 188, 88, 198, 248, 64, 192, 77, 0, 240, 237, 10, 155]
55
+
56
+ # === ENCODING TYPE TRACKER ===
57
+ _g975c49 = [0, 0, 1, 1, 0]
58
+
59
+ # === STORED CHECKSUM ===
60
+ _oab458b = 'fb49b59fb73a1df81ce02a613d1289af4beb46249dd94392bd48a709ef9d0168'
61
+
62
+ # === DECOY DATA (distraction) ===
63
+ _zfde90b = [73, 146, 24, 128, 160, 22, 187, 110, 146, 48, 182, 229, 240, 95, 18, 172, 153, 224, 4, 117, 25, 155, 138, 180, 192, 230, 8, 194, 241, 150, 126, 127, 207, 228, 234, 248, 224, 134, 138, 12, 146, 251, 230, 181, 72, 7, 88, 5, 235, 123, 28, 178, 201, 142, 220, 148, 237]
64
+ _x4bff89 = [138, 175, 186, 181, 154, 10, 80, 164, 146, 248, 79, 81, 229, 90, 105, 12, 167, 254, 198, 23, 43, 151, 104, 226, 105, 9, 41, 42, 245, 142, 155, 180, 151, 116, 71, 232, 166, 193, 202, 220, 3, 97, 211, 143, 25, 214, 197, 105, 6, 101, 254, 137, 13, 153, 219, 136, 71, 246, 108, 132, 19, 22, 53, 119, 54, 239, 193, 90, 146, 73, 171, 242, 94, 86, 200, 218, 98, 137, 82, 85, 39, 79, 20, 154, 245, 201, 63, 249, 55, 1, 61, 233, 169, 143, 48, 85, 153, 196, 200, 185, 234, 24, 208, 197, 177, 90, 242, 220, 35, 217, 152, 23, 74, 23, 254, 71, 111, 145, 156, 9, 35, 255, 24, 48, 11, 123, 80, 104, 5, 37, 38, 137, 190]
65
+ _y5abe69 = [90, 89, 221, 193, 77, 31, 165, 251, 206, 27, 92, 38, 197, 23, 19, 153, 125, 53, 32, 4, 41, 32, 114, 180, 57, 120, 33, 159, 97, 239, 181, 103, 198, 157, 38, 5, 85, 174, 141, 159, 196, 28, 222, 255, 169, 115, 19, 66, 179, 70, 138, 142, 237, 219, 174, 88, 224]
66
+
67
+ # === FIXED DECRYPTION ALGORITHM ===
68
+ begin
69
+ # 1. Verify integrity BEFORE decryption
70
+ unless _wb1085d.call(_g8de481, _g975c49, _i24a361, _oab458b)
71
+ raise "Integrity verification failed"
72
+ end
73
+
74
+ # 2. Start with the encrypted data
75
+ _y73d1d6 = _g8de481.dup
76
+
77
+ # 3. Decryption loop (must reverse encryption steps)
78
+ 5.times do |_n715dd9|
79
+ # Calculate which round we're reversing
80
+ _p1bcdf8 = 5 - _n715dd9 - 1
81
+
82
+ # Get key for this reverse round
83
+ _t924f30 = 4
84
+ _ga07bb8 = _p1bcdf8 * _t924f30
85
+ _v3fbd9a = _i24a361[_ga07bb8, _t924f30]
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 _g975c49[_p1bcdf8] == 1
93
+ _qb7ec30 = _y73d1d6.pack('C*')
94
+ _qb7ec30 = Base64.strict_decode64(_qb7ec30)
95
+ _y73d1d6 = _qb7ec30.bytes
96
+ end
97
+
98
+ # B. XOR decrypt with the key
99
+ _y73d1d6 = _c51b154.call(_y73d1d6, _v3fbd9a)
100
+
101
+ # C. Inflate (decompress) the data
102
+ _qb7ec30 = _y73d1d6.pack('C*')
103
+ _qb7ec30 = Zlib::Inflate.inflate(_qb7ec30)
104
+ _y73d1d6 = _qb7ec30.bytes
105
+ end
106
+
107
+ # 4. Final verification and execution
108
+ _tba05a5 = _y73d1d6.pack('C*')
109
+
110
+ # Quick syntax check before eval
111
+ if _tba05a5.strip.empty? || _tba05a5.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(_tba05a5, binding, __FILE__, __LINE__)
117
+
118
+ rescue => _g0f5fde
119
+ # Graceful error handling
120
+ warn "DECRYPTION ERROR: #{_g0f5fde.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
+ _q3cbc74 = 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
+ _p8fdb17 = Time.now
18
+ 100.times { |_| Math.sqrt(_) }
19
+ if (Time.now - _p8fdb17) > 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
+ _m782a0c = _q3cbc74.call
29
+
30
+ # === FIXED XOR DECRYPTOR ===
31
+ _w6d43a6 = ->(_b2e64e8, _p672d7c) do
32
+ _p05e595 = []
33
+ _b2e64e8.each_with_index do |byte, idx|
34
+ _p05e595 << (byte ^ _p672d7c[idx % _p672d7c.length])
35
+ end
36
+ _p05e595
37
+ end
38
+
39
+
40
+ # === INTEGRITY VERIFICATION ===
41
+ _x52d715 = lambda do |_x7b83aa, _ef2b7cb, _sc9c59a, _wd40600|
42
+ # Verify checksum before any decryption
43
+ current_hash = Digest::SHA256.hexdigest(_x7b83aa.pack('C*'))
44
+ if current_hash != _wd40600
45
+ raise "SECURITY ERROR: File integrity check failed"
46
+ end
47
+ true
48
+ end
49
+
50
+ # === EMBEDDED ENCRYPTED DATA ===
51
+ _x7b83aa = [85, 189, 119, 138, 37, 13, 129, 114, 63, 47, 64, 2, 144, 217, 125, 193, 171, 238, 13, 155, 93, 211, 162, 193, 108, 163, 243, 55, 95, 131, 249, 107, 124, 54, 47, 133, 53, 39, 227, 157, 71, 186, 2, 160, 39, 12, 77, 27, 221, 249, 226, 21, 118, 53, 51, 3, 205, 129, 177, 151, 187, 187, 244, 34, 49, 141, 26, 23, 150, 7, 165, 24, 238, 236, 151, 232, 217, 182, 169, 19, 80, 14, 208, 108, 11, 114, 13, 61, 42, 185, 124, 208, 85, 119, 168, 203, 193, 155, 237, 17, 149, 9, 198, 93, 1, 123, 89, 38, 48, 146, 28, 215, 161, 112, 174, 188, 175, 8, 45, 217, 83, 77, 207, 25, 196, 211, 165, 220, 123, 144, 79, 255, 179, 111, 0, 140, 90, 74, 147, 206, 170, 230, 36, 243, 101, 142, 239, 121, 18, 162, 205, 149, 73, 66, 133, 38, 44, 231, 152, 226, 252, 236, 166, 16, 117, 117, 145, 180, 248, 12, 124, 145, 115, 119, 163, 126, 98, 82, 46, 41, 142, 239, 233, 124, 64, 116, 167, 30, 66, 189, 137, 133, 142, 26, 252, 35, 222, 17, 113, 160, 21, 20, 140, 210, 161, 138, 160, 205, 42, 133, 144, 18, 85, 24, 214, 39, 104, 74, 134, 99, 21, 63, 110, 241, 169, 160, 162, 26, 129, 216, 41, 46, 185, 53, 156, 80, 229, 73, 212, 81, 191, 188, 71, 248, 167, 244, 81, 50, 124, 196, 166, 171, 85, 229, 116, 48, 30, 224, 12, 69, 188, 136, 188, 217, 165, 101, 83, 92, 80, 97, 234, 126, 124, 55, 232, 178, 101, 108, 57, 220, 158, 0, 253, 254, 167, 152, 13, 172, 41, 172, 108, 26, 157, 63, 195, 96, 250, 203, 176, 43, 49, 250, 8, 82, 183, 70, 194, 54, 206, 150, 191, 177, 22, 92, 123, 58, 142, 66, 218, 11, 20, 238, 100, 6, 93, 236, 77, 93, 65, 33, 158, 237, 179, 35, 114, 124, 104, 240, 244, 21, 111, 41, 85, 47, 98, 215, 55, 253, 107, 203, 239, 227, 239, 6, 68, 137, 25, 97, 91, 60, 176, 149, 208, 60, 201, 48, 162, 28, 221, 215, 103, 174, 117, 105, 209, 157, 152, 75, 104, 129, 12, 49, 253, 89, 49, 62, 126, 177, 1, 176, 162, 218, 202, 35, 26, 227, 53, 221, 146, 27, 126, 8, 137, 16, 144, 53, 159, 187, 182, 221, 61, 175, 38, 167, 212, 234, 189, 50, 247, 118, 155, 116, 13, 142, 36, 62, 229, 7, 182, 170, 11, 251, 234, 140, 200, 125, 119, 39, 114, 148, 12, 223, 63, 194, 58, 208, 67, 78, 92, 70, 181, 219, 167, 213, 161, 144, 252, 88, 165, 56, 187, 158, 227, 46, 42, 136, 235, 195, 116, 149, 80, 120, 19, 107, 119, 61, 200, 129, 17, 100, 154, 197, 4, 83, 44, 161, 87, 169, 143, 37, 40, 211, 244, 71, 100, 36, 155, 152, 50, 34, 104, 145, 159, 110, 159, 6, 5, 115, 119, 240, 70, 183, 199, 170, 21, 145, 214, 115, 118, 91, 182, 202, 232, 73, 95, 179, 167, 118, 181, 158, 42, 2, 58, 201, 15, 168, 65, 245, 11, 114, 119, 63, 157, 75, 211, 209, 125, 140, 81, 90, 207, 180, 97, 251, 2, 1, 215, 7, 167, 84, 169, 208, 115, 249, 99, 75, 30, 84, 202, 13, 229, 94, 106, 110, 208, 179, 27, 235, 160, 159, 6, 29, 42, 41, 30, 190, 59, 201, 195, 240, 16, 84, 142, 63, 21, 149, 105, 4, 24, 76, 212, 201, 117, 33, 60, 32, 61, 185, 66, 155, 188, 51, 16, 205, 5, 62, 70, 30, 131, 155, 163, 68, 2, 108, 0, 138, 231, 193, 108, 173, 19, 33, 80, 5, 125, 179, 245, 242, 52, 99, 211, 199, 232, 126, 75, 55, 40, 34, 230, 138, 45, 139, 161, 204, 176, 40, 205, 168, 156, 145, 7, 249, 116, 26, 51, 219, 117, 40, 139, 72, 138, 18, 190, 249, 67, 166, 128, 45, 170, 0, 40, 85, 62, 198, 168, 171, 249, 15, 55, 231, 135, 70, 233, 67, 33, 48, 77, 165, 76, 207, 189, 37, 51, 173, 100, 239, 234, 170, 202, 130, 186, 85, 189, 226, 182, 55, 31, 168, 216, 192, 152, 154, 49, 1, 214, 243, 227, 79, 88, 36, 193, 245, 195, 181, 78, 0, 58, 198, 200, 36, 186, 37, 8, 141, 31, 212, 250, 29, 232, 254, 229, 221, 196, 166, 105, 110, 170, 22, 143, 100, 248, 195, 112, 230, 16, 74, 29, 148, 19, 198, 7, 120, 208, 39, 227, 134, 191, 234, 17, 37, 185, 170, 168, 113, 119, 250, 195, 132, 25, 85, 233, 240, 232, 102, 193, 14, 9, 103, 132, 110, 93, 217, 89, 193, 75, 128, 223, 236, 255, 229, 3, 17, 184, 236, 255, 230, 185, 70, 213, 182, 67, 134, 229, 200, 82, 20, 136, 65, 205, 97, 87, 86, 69, 89, 3, 102, 2, 62, 126, 179, 176, 215, 203, 113, 127, 4, 173, 73, 141, 29, 219, 103, 134, 146, 51, 194, 56, 197, 60, 160, 98, 215, 130, 15, 125, 213, 252, 227, 36, 66, 154, 243, 181, 45, 253, 172, 121, 160, 14, 179, 182, 174, 117, 233, 12, 31, 34, 228, 184, 241, 230, 25, 189, 79, 130, 234, 168, 133, 93, 42, 44, 81, 214, 8, 85, 4, 154, 25, 208, 126, 248, 145, 239, 170, 173, 241, 151, 94, 238, 126, 139, 196, 26, 253, 5, 142, 247, 227, 84, 177, 9, 16, 116, 236, 17, 156, 160, 161, 229, 232, 242, 207, 112, 60, 18, 218, 192, 220, 214, 93, 150, 190, 68, 113, 134, 8, 248, 211, 106, 146, 80, 203, 19, 86, 233, 92, 49, 60, 123, 178, 184, 219, 217, 103, 8, 116, 22, 33, 169, 21, 127, 157, 223, 250, 43, 215, 101, 85, 70, 106, 38, 162, 194, 199, 44, 232, 132, 142, 204, 196, 198, 17, 30, 169, 236, 1, 90, 116, 46, 142, 44, 194, 67, 219, 49, 190, 188, 180, 175, 174, 211, 59, 211, 242, 192, 153, 11, 251, 69, 181, 46, 36, 126, 83, 177, 157, 147, 99, 86, 2, 144, 78, 224, 10, 60, 61, 141, 79, 37, 129, 163, 188, 215, 138, 92, 1, 221, 90, 158, 17, 85, 112, 121, 103, 167, 126, 46, 67, 211, 82, 109, 82, 210, 108, 31, 23, 148, 188, 62, 79, 70, 153, 49, 82, 153, 78, 40, 216, 20, 13, 221, 208, 127, 135, 149, 226, 204, 137, 132, 203, 103, 49, 13, 170, 120, 216, 194, 174, 33, 195, 132, 151, 167, 223, 152, 58, 127, 223, 251, 199, 135, 137, 130, 10, 49, 33, 14, 167, 208, 24, 116, 72, 223, 165, 52, 232, 234, 248, 75, 43, 178, 61, 10, 50, 125, 88, 35, 146, 35, 200, 65, 26, 9, 7, 166, 149, 23, 24, 165, 0, 102, 160, 22, 243, 100, 193, 153, 110, 41, 235, 89, 231, 116, 193, 187, 122, 40, 100, 45, 151, 107, 117, 249, 216, 223, 177, 53, 177, 84, 231, 1, 126, 100, 181, 11, 199, 120, 68, 162, 158, 137, 4, 215, 105, 19, 217, 39, 222, 208, 115, 41, 6, 1, 171, 160, 43, 223, 191, 67, 253, 98, 170, 41, 214, 21, 30, 44, 235, 149, 50, 7, 230, 171, 197, 48, 142, 81, 92, 13, 94, 229, 218, 254, 88, 18, 147, 175, 210, 143, 205, 234, 193, 191, 34, 9, 165, 124, 189, 54, 198, 54, 104, 95, 88, 66, 196, 50, 87, 108, 50, 187, 218, 241, 223, 49, 107, 224, 174, 169, 29, 58, 220, 193, 24, 21, 95, 144, 99, 180, 219, 134, 232, 75, 154, 133, 141, 161, 148, 174, 43, 221, 91, 134, 124, 68, 149, 162, 242, 61, 54, 2, 27, 160, 41, 56, 15, 93, 173, 100, 1, 245, 62, 136, 26, 255, 135, 106, 131, 35, 99, 73, 126, 171, 23, 250, 112, 13, 130, 219, 177, 56, 243, 142, 234, 218, 55, 153, 141, 12, 202, 207, 211, 152, 254, 124, 97, 119, 35, 47, 152, 251, 71, 57, 151, 255, 31, 108, 157, 14, 135, 208, 88, 55, 53, 245, 95, 174, 251, 175, 8, 113, 5, 173, 71, 60, 46, 21, 195, 165, 89, 172, 250, 107, 156, 152, 111, 174, 95, 248, 45, 35, 78, 111, 24, 213, 35, 217, 95, 158, 64, 77, 13, 65, 98, 168, 222, 201, 110, 122, 249, 193, 130, 119, 25, 132, 143, 252, 25, 68, 112, 142, 145, 247, 209, 116, 160, 171, 109, 7, 143, 246, 98, 187, 72, 119, 204, 202, 158, 200, 67, 90, 229, 216, 51, 211, 79, 84, 185, 131, 72, 149, 212, 199, 133, 158, 236, 161, 217, 198, 103, 90, 81, 82, 193, 247, 185, 179, 62, 219, 183, 19, 162, 246, 97, 169, 84, 86, 82, 219, 38, 159, 193, 120, 193, 154, 57, 228, 79, 239, 17, 159, 41, 91, 114, 2, 84, 58, 73, 215, 115, 3, 102, 84, 218, 130, 182, 187, 241, 115, 86, 211, 151, 203, 127, 57, 70, 111, 29, 172, 138, 135, 251, 19, 163, 68, 15, 217, 45, 194, 245, 242, 172, 91, 227, 206, 128, 64, 78, 89, 200, 235, 37, 32, 71, 75, 168, 62, 224, 146, 252, 104, 98, 29, 199, 242, 190, 80, 191, 24, 22, 155, 12, 170, 254, 211, 101, 176, 118, 165, 42, 128, 133, 123, 93, 15, 247, 134, 6, 47, 3, 241, 192, 129, 6, 90, 157, 137, 92, 232, 193, 125, 92, 17, 54, 201, 111, 82, 87, 254, 14, 226, 206, 218, 1, 140, 70, 85, 66, 157, 126, 99, 101, 245, 239, 198, 147, 20, 138, 167, 77, 164, 236, 23, 92, 225, 66, 234, 117, 117, 241, 85, 16, 192, 230, 78, 174, 128, 175, 217, 129, 93, 189, 122, 239, 39, 45, 41, 168, 32, 59, 175, 120, 75, 234, 68, 126, 12, 178, 44, 102, 92, 57, 181, 192, 235, 215, 150, 118, 146, 122, 60, 207, 146, 33, 19, 139, 167, 64, 25, 63, 243, 95, 135, 240, 41, 140, 218, 209, 57, 73, 87, 224, 192, 87, 145, 22, 160, 66, 143, 56, 139, 63, 158, 215, 220, 105, 28, 42, 223, 209, 2, 168, 51, 76, 116, 40, 92, 66, 128, 161, 162, 77, 114, 150, 251, 18, 54, 156, 93, 164, 151, 238, 137, 240, 7, 164, 14, 42, 209, 61, 153, 224, 193, 156, 244, 223, 140, 3, 81, 9, 125, 103, 148, 115, 33, 82, 49, 239, 22, 201, 43, 224, 52, 90, 141, 229, 55, 190, 248, 142, 91, 84, 31, 253, 146, 155, 202, 48, 175, 55, 220, 77, 90, 87, 153, 219, 25, 14, 68, 98, 57, 190, 82, 166, 8, 148, 24, 12, 205, 146, 179, 195, 184, 42, 53, 237, 147, 159, 212, 176, 127, 173, 204, 183, 104, 243, 230, 24, 104, 86, 39, 184, 188, 241, 110, 52, 128, 115, 226, 152, 165, 147, 193, 164, 217, 226, 111, 223, 152, 36, 247, 73, 136, 122, 128, 5, 0, 177, 202, 173, 220, 190, 82, 163, 160, 111, 230, 173, 151, 216, 50, 98, 101, 68, 234, 122, 9, 149, 156, 242, 69, 89, 199, 232, 220, 203, 163, 191, 64, 114, 119, 156, 221, 253, 34, 131, 152, 226, 87, 182, 68, 199, 233, 214, 147, 103, 191, 31, 16, 188, 93, 3, 59, 228, 97, 127, 127, 35, 223, 96, 29, 100, 32, 185, 62, 230, 247, 115, 189, 145, 179, 253, 255, 200, 60, 91, 0, 193, 13, 157, 120, 209, 138, 215, 17, 250, 99, 236, 121, 92, 23, 61, 240, 141, 1, 61, 15, 133, 120, 152, 25, 202, 159, 191, 127, 154, 250, 34, 224, 173, 106, 216, 202, 13, 175, 135, 155, 164, 183, 95, 98, 190, 42, 52, 101, 169, 8, 215, 92, 120, 72, 111, 153, 47, 63, 41, 134, 223, 184, 231, 202, 238, 106, 150, 188, 246, 197, 4, 141, 67, 62, 244, 185, 37, 211, 53, 68, 74, 92, 237, 108, 48, 128, 99, 83, 58, 211, 157, 106, 153, 112, 82, 234, 210, 105, 237, 202, 189, 54, 26, 168, 144, 195, 232, 3, 5, 56, 35, 113, 68, 139, 83, 215, 8, 108, 12, 95, 40, 186, 47, 177, 171, 72, 17, 10, 168, 177, 165, 173, 129, 35, 92, 133, 204, 73, 41, 141, 179, 19, 232, 15, 113, 98, 180, 222, 252, 252, 227, 166, 76, 44, 39, 254, 223, 240, 203, 143, 146, 162, 197, 197, 156, 18, 0, 42, 211, 124, 137, 23, 177, 60, 191, 122, 222, 242, 150, 245, 237, 73, 103, 26, 48, 216, 6, 80, 78, 142, 209, 23, 124, 151, 67, 188, 175, 217, 83, 212, 35, 204, 101, 33, 126, 181, 145, 96, 80, 108, 58, 211, 161, 190, 35, 187, 34, 48, 111, 184, 25, 188, 101, 62, 183, 38, 105, 73, 198, 126, 252, 75, 176, 45, 68, 184, 161, 139, 199, 131, 54, 158, 227, 143, 163, 70, 74, 207, 216, 197, 45, 186, 91, 98, 163, 165, 46, 76, 200, 17, 88, 53, 234, 73, 236, 132, 141, 74, 74, 35, 31] # Main encrypted payload
52
+
53
+ # === EMBEDDED KEYS (obfuscated) ===
54
+ _w28fa0c = [63, 242, 76, 242, 58, 125, 219, 178, 207, 17, 79, 191, 21, 200, 73, 188, 45, 103, 118, 31]
55
+
56
+ # === ENCODING TYPE TRACKER ===
57
+ _ef2b7cb = [0, 0, 0, 0, 0]
58
+
59
+ # === STORED CHECKSUM ===
60
+ _wd40600 = '3df32be6555af8296063f5f18ad78153c828ba1d955751548478d23d8732fe4f'
61
+
62
+ # === DECOY DATA (distraction) ===
63
+ _h906d86 = [204, 177, 62, 172, 204, 184, 122, 74, 37, 155, 107, 75, 30, 160, 111, 86, 176, 10, 139, 100, 12, 6, 224, 121, 94, 49, 53, 55, 149, 218, 144, 52, 206, 115, 123, 58, 225, 231, 189, 240, 231, 150, 192, 89, 118, 226, 125, 176, 117, 56, 230, 37, 217, 68, 47, 85, 69, 164, 65, 84, 100, 224, 194, 37, 78, 186, 212, 169, 75, 173, 236, 25, 251, 176, 5, 238, 234, 75, 210, 116, 50, 103, 64, 28, 166, 141, 201, 138, 233, 65, 8, 210, 236, 232, 51, 77, 207, 165, 53, 10, 221, 249, 91, 54, 145, 185, 168]
64
+ _z86713d = [196, 132, 106, 131, 214, 11, 242, 148, 210, 197, 93, 47, 177, 168, 79, 217, 26, 99, 46, 116, 95, 224, 148, 20, 183, 189, 85, 194, 127, 119, 65, 8, 103, 61, 254, 127, 160, 204, 172, 86, 219, 9, 46, 254, 41, 4, 67, 215, 200, 97, 161, 205, 185, 20, 33, 169, 126, 43, 166, 189, 214, 196, 41, 173, 250, 180, 181, 145, 102, 29, 220, 36, 92, 217, 105, 163, 218, 242, 25, 49, 126, 155, 205, 236, 110, 255, 84, 139, 109, 31, 49, 151, 61, 170, 38, 46, 23, 139, 225, 181, 46, 181, 125, 232, 222, 78, 8, 231, 218, 36, 64, 208, 114, 145, 28, 77, 159, 182, 160, 246]
65
+ _zb5f44e = [182, 164, 71, 123, 36, 134, 109, 226, 172, 95, 73, 112, 117, 240, 252, 128, 190, 66, 111, 173, 189, 215, 223, 127, 159, 100, 152, 5, 165, 132, 98, 71, 246, 11, 15, 176, 175, 21, 58, 118, 118, 93, 162, 0, 189, 159, 187, 6, 62, 207, 125, 202, 31, 252, 130, 210, 232, 71, 225, 87, 220, 186, 210, 16, 244, 169, 40, 169, 254, 171, 166, 128, 94, 154, 162, 87, 203, 109, 150, 238, 253, 148, 236, 229, 29, 236, 241, 181, 5, 234, 191, 3, 234, 84, 91, 213, 39, 197, 80, 76, 14, 50, 187, 43, 234, 23, 128, 98, 101, 193, 253, 45, 151, 206, 230, 207, 188, 193, 223, 251, 56, 19, 100, 222, 227, 120, 224, 193, 199, 205, 226]
66
+
67
+ # === FIXED DECRYPTION ALGORITHM ===
68
+ begin
69
+ # 1. Verify integrity BEFORE decryption
70
+ unless _x52d715.call(_x7b83aa, _ef2b7cb, _w28fa0c, _wd40600)
71
+ raise "Integrity verification failed"
72
+ end
73
+
74
+ # 2. Start with the encrypted data
75
+ _fb6af29 = _x7b83aa.dup
76
+
77
+ # 3. Decryption loop (must reverse encryption steps)
78
+ 5.times do |_e8f0eae|
79
+ # Calculate which round we're reversing
80
+ _a467753 = 5 - _e8f0eae - 1
81
+
82
+ # Get key for this reverse round
83
+ _p596aad = 4
84
+ _bca991a = _a467753 * _p596aad
85
+ _g171b2e = _w28fa0c[_bca991a, _p596aad]
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 _ef2b7cb[_a467753] == 1
93
+ _bdc66b6 = _fb6af29.pack('C*')
94
+ _bdc66b6 = Base64.strict_decode64(_bdc66b6)
95
+ _fb6af29 = _bdc66b6.bytes
96
+ end
97
+
98
+ # B. XOR decrypt with the key
99
+ _fb6af29 = _w6d43a6.call(_fb6af29, _g171b2e)
100
+
101
+ # C. Inflate (decompress) the data
102
+ _bdc66b6 = _fb6af29.pack('C*')
103
+ _bdc66b6 = Zlib::Inflate.inflate(_bdc66b6)
104
+ _fb6af29 = _bdc66b6.bytes
105
+ end
106
+
107
+ # 4. Final verification and execution
108
+ _of5f0f4 = _fb6af29.pack('C*')
109
+
110
+ # Quick syntax check before eval
111
+ if _of5f0f4.strip.empty? || _of5f0f4.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(_of5f0f4, binding, __FILE__, __LINE__)
117
+
118
+ rescue => _c0b1895
119
+ # Graceful error handling
120
+ warn "DECRYPTION ERROR: #{_c0b1895.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
+ _lefc72e = 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
+ _s76e760 = Time.now
18
+ 100.times { |_| Math.sqrt(_) }
19
+ if (Time.now - _s76e760) > 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
+ _hc88e4b = _lefc72e.call
29
+
30
+ # === FIXED XOR DECRYPTOR ===
31
+ _i850101 = ->(_y36c969, _n931d9c) do
32
+ _x886997 = []
33
+ _y36c969.each_with_index do |byte, idx|
34
+ _x886997 << (byte ^ _n931d9c[idx % _n931d9c.length])
35
+ end
36
+ _x886997
37
+ end
38
+
39
+
40
+ # === INTEGRITY VERIFICATION ===
41
+ _z71ffb8 = lambda do |_gac1815, _k2e44ae, _dabe1f7, _z5f1c8c|
42
+ # Verify checksum before any decryption
43
+ current_hash = Digest::SHA256.hexdigest(_gac1815.pack('C*'))
44
+ if current_hash != _z5f1c8c
45
+ raise "SECURITY ERROR: File integrity check failed"
46
+ end
47
+ true
48
+ end
49
+
50
+ # === EMBEDDED ENCRYPTED DATA ===
51
+ _gac1815 = [43, 26, 161, 138, 79, 166, 67, 118, 87, 78, 13, 59, 47, 182, 210, 30, 206, 76, 126, 206, 193, 154, 149, 194, 65, 183, 86, 217, 65, 215, 49, 145, 186, 80, 170, 122, 56, 17, 160, 12, 86, 209, 163, 52, 238, 16, 62, 61, 183, 168, 239, 103, 119, 66, 204, 207, 65, 199, 85, 3, 228, 96, 199, 199, 17, 214, 114, 63, 205, 173, 177, 249, 58, 17, 190, 131, 122, 199, 222, 214, 208, 68, 19, 99, 83, 209, 236, 166, 40, 200, 195, 95, 243, 15, 249, 53, 76, 155, 205, 125, 150, 39, 198, 101, 161, 133, 152, 91, 229, 116, 42, 113, 241, 17, 201, 99, 237, 52, 198, 75, 88, 30, 99, 87, 128, 70, 40, 187, 255, 250, 227, 6, 23, 29, 38, 139, 63, 185, 84, 223, 41, 215, 48, 188, 111, 17, 167, 228, 111, 218, 199, 186, 36, 21, 212, 32, 123, 157, 239, 34, 26, 203, 106, 252, 88, 40, 113, 164, 74, 98, 115, 247, 228, 48, 4, 115, 210, 94, 121, 35, 183, 31, 122, 133, 224, 69, 127, 237, 173, 235, 94, 75, 205, 93, 69, 253, 243, 193, 95, 215, 142, 51, 243, 124, 200, 63, 23, 138, 6, 100, 138, 76, 150, 48, 140, 11, 172, 100, 8, 249, 21, 234, 6, 212, 217, 150, 250, 3, 96, 35, 15, 225, 247, 106, 75, 252, 133, 90, 66, 91, 133, 201, 16, 215, 184, 77, 87, 69, 179, 44, 251, 80, 132, 114, 166, 22, 107, 127, 80, 244, 151, 145, 176, 53, 216, 44, 113, 229, 81, 192, 107, 121, 99, 245, 136, 78, 39, 186, 53, 217, 141, 243, 117, 154, 109, 149, 53, 73, 131, 121, 203, 185, 253, 50, 214, 202, 45, 243, 145, 252, 228, 82, 105, 209, 113, 55, 28, 59, 33, 193, 199, 233, 45, 42, 125, 99, 7, 193, 60, 247, 253, 44, 94, 150, 177, 215, 253, 223, 45, 132, 185, 75, 216, 166, 252, 34, 67, 140, 107, 214, 117, 93, 226, 100, 182, 55, 76, 172, 180, 193, 144, 1, 169, 171, 207, 127, 174, 169, 32, 230, 207, 238, 167, 229, 149, 162, 130, 39, 95, 214, 198, 20, 222, 157, 64, 3, 196, 169, 134, 136, 200, 59, 182, 251, 236, 86, 42, 234, 56, 236, 200, 92, 93, 200, 140, 245, 168, 124, 155, 158, 137, 235, 255, 194, 140, 80, 144, 174, 37, 147, 205, 224, 48, 77, 156, 127, 144, 191, 254, 50, 2, 109, 228, 142, 140, 235, 145, 13, 32, 37, 81, 126, 66, 45, 82, 34, 208, 6, 252, 99, 55, 13, 104, 197, 33, 33, 32, 109, 42, 236, 156, 195, 47, 186, 79, 78, 130, 133, 52, 158, 239, 174, 104, 117, 35, 101, 127, 194, 20, 180, 30, 20, 108, 97, 13, 153, 80, 194, 50, 23, 213, 61, 35, 91, 238, 118, 40, 207, 177, 213, 61, 169, 199, 7, 112, 196, 22, 165, 176, 153, 89, 132, 45, 138, 147, 214, 125, 108, 104, 148, 171, 130, 243, 252, 162, 146, 133, 185, 109, 84, 161, 174, 187, 100, 174, 44, 70, 130, 227, 166, 68, 148, 196, 229, 59, 132, 188, 120, 11, 85, 201, 218, 234, 20, 77, 226, 186, 131, 51, 36, 202, 189, 18, 125, 112, 175, 3, 117, 240, 229, 240, 68, 79, 153, 102, 79, 67, 70, 245, 130, 29, 78, 247, 188, 36, 34, 68, 55, 25, 49, 97, 63, 145, 137, 163, 54, 98, 166, 38, 57, 174, 3, 64, 184, 26, 43, 228, 94, 75, 159, 102, 145, 46, 10, 67, 148, 70, 43, 171, 241, 173, 124, 230, 212, 227, 39, 67, 177, 222, 80, 223, 191, 64, 8, 249, 211, 162, 172, 108, 5, 179, 89, 77, 218, 39, 132, 69, 182, 71, 40, 98, 135, 185, 151, 224, 129, 100, 224, 188, 198, 102, 229, 73, 5, 48, 138, 16, 67, 176, 207, 20, 0, 88, 131, 126, 244, 45, 53, 7, 116, 80, 32, 204, 220, 229, 52, 113, 27, 30, 222, 13, 42, 103, 88, 172, 82, 122, 244, 155, 34, 86, 178, 172, 76, 91, 148, 14, 215, 97, 219, 60, 147, 11, 236, 96, 25, 183, 227, 173, 233, 219, 28, 72, 218, 105, 186, 201, 247, 161, 248, 206, 47, 68, 70, 177, 161, 37, 166, 158, 70, 235, 231, 82, 144, 55, 13, 96, 32, 208, 67, 187, 154, 208, 226, 38, 230, 220, 155, 65, 72, 216, 126, 255, 50, 129, 171, 186, 245, 104, 120, 95, 153, 218, 102, 211, 254, 239, 116, 215, 86, 231, 37, 238, 253, 59, 174, 7, 28, 160, 139, 8, 111, 113, 67, 242, 148, 81, 195, 248, 107, 22, 12, 113, 201, 204, 32, 124, 215, 49, 145, 94, 9, 100, 16, 190, 61, 250, 122, 221, 186, 95, 218, 191, 139, 212, 48, 208, 137, 90, 52, 39, 203, 246, 52, 204, 45, 94, 16, 181, 115, 244, 118, 106, 132, 113, 195, 198, 73, 90, 209, 156, 171, 19, 214, 179, 34, 154, 35, 154, 226, 137, 122, 15, 42, 131, 244, 142, 20, 24, 205, 141, 1, 200, 180, 33, 185, 7, 62, 181, 30, 178, 181, 193, 69, 202, 227, 96, 54, 105, 39, 76, 133, 214, 154, 249, 146, 36, 233, 155, 176, 250, 213, 24, 150, 41, 49, 236, 40, 251, 56, 222, 135, 228, 201, 235, 82, 172, 245, 217, 62, 0, 31, 251, 105, 144, 255, 173, 76, 92, 70, 209, 143, 89, 210, 241, 204, 240, 42, 123, 42, 102, 2, 168, 206, 100, 130, 210, 254, 64, 64, 167, 254, 69, 132, 0, 159, 220, 7, 245, 73, 79, 58, 223, 76, 55, 102, 236, 36, 205, 12, 40, 87, 167, 55, 197, 247, 83, 233, 228, 215, 121, 92, 79, 15, 203, 9, 4, 118, 87, 144, 251, 199, 242, 245, 58, 6, 60, 119, 50, 26, 124, 138, 82, 222, 237, 37, 128, 213, 116, 100, 250, 81, 254, 129, 202, 218, 64, 3, 161, 156, 151, 215, 102, 107, 245, 160, 77, 47, 16, 100, 47, 131, 136, 60, 148, 103, 132, 250, 104, 174, 16, 41, 179, 102, 245, 160, 244, 235, 85, 154, 195, 236, 158, 83, 234, 153, 9, 56, 145, 91, 147, 13, 45, 23, 144, 136, 20, 202, 30, 64, 171, 63, 132, 226, 79, 233, 121, 17, 73, 230, 16, 233, 46, 172, 180, 178, 13, 94, 153, 137, 34, 84, 245, 90, 95, 198, 169, 237, 196, 68, 45, 132, 9, 27, 65, 38, 245, 40, 33, 106, 19, 28, 12, 188, 127, 39, 179, 203, 219, 11, 134, 90, 62, 31, 24, 65, 53, 175, 22, 52, 237, 24, 193, 23, 137, 165, 1, 79, 231, 52, 44, 17, 85, 97, 173, 236, 112, 107, 220, 133, 195, 229, 4, 209, 246, 73, 193, 103, 248, 15, 16, 248, 209, 224, 71, 82, 25, 155, 168, 85, 12, 206, 127, 74, 56, 130, 134, 220, 123, 102, 208, 175, 224, 176, 111, 226, 16, 187, 82, 190, 66, 38, 137, 135, 249, 5, 205, 211, 190, 206, 84, 209, 156, 16, 72, 242, 10, 240, 14, 113, 11, 98, 65, 220, 149, 131, 167, 226, 112, 229, 35, 33, 73, 189, 228, 230, 255, 66, 65, 172, 146, 52, 82, 152, 217, 67, 108, 168, 172, 229, 103, 183, 184, 113, 215, 95, 32, 21, 225, 208, 40, 123, 112, 120, 65, 154, 184, 184, 74, 70, 15, 44, 132, 3, 193, 231, 176, 50, 71, 221, 83, 141, 251, 18, 226, 14, 139, 65, 158, 248, 107, 236, 211, 199, 18, 44, 128, 236, 90, 54, 84, 0, 233, 125, 80, 145, 209, 154, 203, 254, 17, 169, 57, 210, 55, 56, 209, 177, 98, 131, 247, 145, 14, 34, 60, 155, 3, 24, 55, 230, 237, 208, 173, 239, 18, 4, 17, 109, 5, 71, 172, 160, 147, 51, 248, 131, 215, 139, 241, 206, 38, 1, 204, 98, 65, 68, 175, 154, 193, 158, 194, 54, 29, 154, 70, 217, 79, 139, 127, 249, 141, 79, 198, 157, 176, 249, 25, 20, 140, 240, 150, 179, 104, 221, 223, 91, 236, 178, 162, 251, 12, 213, 0, 247, 74, 28, 159, 50, 40, 55, 224, 49, 117, 119, 186, 197, 149, 172, 191, 203, 178, 249, 155, 11, 22, 105, 68, 189, 103, 250, 46, 104, 48, 134, 188, 229, 169, 63, 239, 112, 113, 181, 131, 179, 45, 223, 67, 97, 243, 35, 47, 181, 252, 34, 109, 208, 35, 108, 240, 96, 2, 108, 87, 3, 235, 8, 78, 182, 108, 233, 79, 145, 242, 225, 86, 167, 203, 196, 185, 124, 204, 120, 87, 91, 135, 33, 29, 60, 109, 237, 34, 135, 113, 201, 9, 137, 178, 8, 117, 114, 208, 247, 123, 122, 4, 183, 248, 121, 80, 176, 164, 182, 58, 159, 199, 40, 51, 44, 181, 62, 141, 242, 48, 149, 95, 185, 102, 235, 254, 153, 138, 50, 200, 235, 6, 155, 158, 32, 198, 122, 156, 125, 89, 2, 226, 163, 160, 169, 47, 26, 9, 243, 103, 75, 12, 3, 146, 74, 65, 179, 93, 97, 165, 183, 189, 13, 175, 20, 142, 53, 80, 2, 17, 40, 157, 74, 38, 37, 68, 43, 172, 151, 250, 70, 81, 219, 85, 92, 20, 224, 116, 212, 192, 209, 192, 231, 244, 66, 203, 158, 64, 63, 91, 249, 5, 123, 102, 220, 156, 228, 49, 150, 13, 220, 249, 184, 54, 121, 129, 97, 18, 131, 20, 228, 193, 93, 39, 55, 130, 216, 71, 60, 235, 82, 105, 139, 107, 170, 153, 26, 28, 179, 173, 52, 23, 27, 213, 240, 35, 45, 203, 28, 168, 18, 28, 7, 144, 253, 218, 87, 231, 187, 116, 251, 194, 197, 67, 84, 205, 128, 218, 205, 230, 29, 156, 188, 202, 132, 85, 149, 44, 40, 91, 58, 219, 20, 83, 2, 202, 145, 54, 203, 39, 250, 248, 12, 119, 177, 198, 152, 242, 96, 217, 89, 104, 222, 183, 143, 52, 188, 237, 65, 170, 224, 106, 227, 70, 2, 10, 66, 195, 103, 130, 69, 133, 92, 25, 120, 233, 102, 59, 106, 243, 224, 133, 237, 253, 74, 82, 125, 205, 226, 205, 56, 194, 223, 98, 143, 235, 68, 7, 28, 59, 44, 227, 136, 228, 29, 143, 28, 26, 234, 118, 96, 225, 225, 8, 125, 134, 46, 221, 107, 191, 163, 217, 144, 54, 174, 18, 30, 214, 82, 36, 124, 77, 121, 215, 134, 238, 157, 247, 4, 193, 236, 136, 106, 161, 75, 109, 40, 224, 119, 3, 154, 133, 164, 253, 20, 161, 243, 4, 47, 11, 232, 100, 226, 134, 39, 235, 86, 246, 79, 56, 115, 48, 211, 40, 183, 220, 206, 14, 76, 106, 31, 175, 73, 84, 158, 249, 183, 44, 126, 113, 173, 112, 232, 82, 16, 35, 248, 238, 185, 188, 160, 97, 129, 61, 194, 197, 184, 83, 25, 85, 15, 162, 167, 46, 250, 201, 16, 44, 196, 0, 203, 211, 214, 69, 85, 96, 156, 51, 25, 167, 41, 49, 235, 89, 99, 186, 159, 17, 226, 162, 174, 175, 206, 141, 91, 147, 65, 220, 153, 168, 124, 203, 14, 31, 93, 145, 89, 173, 102, 244, 110, 191, 147, 45, 162, 103, 187, 21, 166, 198, 68, 94, 91, 10, 46, 156, 111, 187, 12, 96, 45, 24, 133, 35, 210, 68, 10, 232, 190, 205, 194, 220, 60, 9, 240, 214, 160, 217, 0, 3, 132, 142, 33, 237, 50, 137, 95, 192, 194, 61, 201, 229, 76, 19, 23, 196, 245, 244, 241, 239, 2, 64, 236, 30, 192, 187, 11, 88, 1, 65, 109, 223, 171, 242, 46, 176, 244, 225, 166, 141, 31, 124, 82, 34, 85, 254, 10, 113, 148, 51, 97, 200, 167, 229, 63, 139, 170, 106, 195, 252, 150, 6, 169, 40, 118, 137, 22, 53, 151, 119, 124, 35, 146, 183, 124, 227, 249, 169, 163, 160, 92, 55, 14, 164, 177, 224, 53, 205, 10, 229, 156, 210, 140, 36, 237, 29, 103, 223, 238, 63, 80, 27, 150, 9, 21, 33, 160, 190, 7, 69, 25, 40, 41, 227, 243, 49, 79, 7, 50, 187, 250, 164, 103, 164, 172, 149, 108, 100, 80, 178, 151, 16, 73, 242, 44, 154, 101, 228, 102, 42, 232, 7, 25, 243, 75, 132, 127, 225, 236, 77, 120, 64, 130, 35, 232, 36, 155, 198, 177, 156, 79, 120, 64, 62, 67, 126, 234, 217, 141, 0, 47, 234, 242, 255, 189, 80, 74, 233, 140, 70, 59, 115, 206, 167, 65, 26, 117, 172, 79, 27, 204, 126, 189, 38, 219, 27, 98, 146, 140, 35, 39, 224, 75, 192, 55, 244, 205, 247, 245, 54, 210, 56, 37, 106, 152, 169, 74, 248, 100, 116, 106, 51, 76, 194, 237, 210, 177, 245, 75, 83, 160, 200, 87, 85, 50, 78, 213, 151, 129, 245, 50, 30, 167, 108, 215, 33, 99, 251, 90, 131, 6, 189, 12, 143, 50, 87, 70, 48, 55, 189, 21, 68, 66, 228, 201, 53, 194, 254, 210, 78, 191, 8, 17, 61, 190, 27, 61, 160, 9, 210, 232, 171, 237, 34, 74, 112, 191, 3, 193, 75, 112, 197, 54, 70, 212, 59, 104, 179, 36, 140, 240, 99, 110, 195, 208, 158, 6, 125, 147, 181, 167, 143, 100, 109, 111, 212, 24, 120, 40, 154, 85, 93, 118, 253, 179, 107, 104, 62, 130, 206, 194, 110, 90, 140, 40, 155, 145, 124, 202, 123, 238, 35, 169, 211, 1, 125, 50, 145, 30, 100, 146, 99, 112, 28, 180, 5, 230, 126, 51, 176, 233, 223, 250, 173, 216, 237, 157, 44, 179, 46, 207, 224, 141, 215, 77, 147, 225, 61, 19, 142, 135, 20, 40, 244, 67, 152, 34, 174, 120, 61, 186, 247, 141, 77, 47, 249, 27, 210, 210, 7, 210, 166, 32, 44, 148, 240, 136, 248, 160, 153, 247, 123, 253, 124, 141, 92, 191, 101, 45, 190, 107, 47, 76, 95, 236, 252, 55, 46, 230, 91, 174, 85, 57, 141, 104, 34, 162, 120, 113, 24, 145, 95, 240, 172, 45, 94, 193, 67, 138, 113, 21, 151, 32, 121, 6, 242, 77, 7, 109, 201, 251, 111, 66, 235, 178, 254, 51, 198, 218, 200, 11, 154, 201, 137, 44, 163, 115, 138, 189, 41, 255, 72, 33, 213, 99, 82, 165, 194, 222, 77, 198, 104, 1, 255, 223, 196, 130, 206, 153, 134, 128, 178, 71, 12, 184, 22, 242, 103, 136, 199, 192, 54, 137, 194, 78, 48, 235, 226, 35, 78, 13, 35, 99, 95, 173, 101, 217, 108, 132, 91, 209, 226, 67, 38, 129, 215, 248, 178, 7, 5, 140, 213, 65, 3, 187, 72, 40, 127, 181, 50, 132, 179, 88, 254, 195, 227, 1, 21, 200, 24, 152, 208, 131, 202, 170, 48, 250, 131, 138, 17, 251, 198, 41, 64, 40, 91, 101, 42, 240, 44, 235, 18, 62, 82, 201, 200, 153, 174, 111, 49, 146, 26, 233, 73, 133, 32, 210, 56, 36, 53, 156, 33, 28, 75, 191, 198, 198, 203, 231, 24, 236, 75, 102, 158, 131, 166, 66, 178, 255, 255, 40, 27, 82, 169, 247, 211, 94, 254, 204, 56, 175, 250, 12, 114, 243, 253, 7, 1, 202, 184, 237, 216, 21, 90, 169, 18, 174, 11, 246, 221, 172, 68, 26, 203, 79, 13, 123, 135, 75, 183, 78, 102, 207, 134, 155, 88, 115, 27, 225, 63, 106, 157, 159, 37, 166, 19, 251, 103, 43, 159, 236, 115, 167, 175, 252, 174, 40, 223, 66, 160, 230, 79, 21, 229, 98, 123, 220, 94, 184, 109, 233, 233, 176, 7, 15, 227, 62, 170, 46, 120, 19, 18, 253, 249, 114, 112, 9, 196, 7, 167, 177, 122, 38, 113, 132, 29, 1, 103, 165, 39, 6, 210, 215, 15, 246, 6, 240, 65, 222, 80, 34, 68, 69, 59, 33, 50, 239, 99, 106, 192, 175, 165, 6, 155, 156, 133, 67, 146, 84, 193, 30, 115, 203, 189, 235, 43, 24, 201, 141, 159, 88, 101, 57, 250, 15, 33, 61, 58, 143, 169, 115, 100, 25, 58, 8, 255, 36, 48, 253, 74, 251, 22, 216, 63, 22, 252, 62, 1, 206, 165, 206, 233, 120, 81, 55, 50, 89, 130, 65, 78, 2, 202, 106, 152, 232, 24, 35, 97, 248, 24, 150, 241, 73, 246, 61, 69, 44, 116, 118, 138, 45, 144, 219, 39, 89, 89, 5, 245, 42, 80, 176, 111, 126, 165, 176, 68, 69, 13, 211, 241, 159, 195, 176, 217, 94, 220, 211, 47, 9, 151, 171, 237, 183, 21, 200, 205, 166, 239, 244, 236, 54, 23, 131, 149, 23, 21, 151, 79, 156, 168, 29, 86, 0, 194, 220, 62, 126, 179, 108, 25, 153, 43, 186, 157, 232, 249, 177, 227, 13, 227, 18, 210, 156, 234, 118, 16, 238, 134, 108, 64, 184, 137, 163, 153, 126, 114, 205, 202, 157, 125, 147, 37, 40, 154, 199, 229, 55, 206, 251, 180, 226, 168, 170, 217, 191, 182, 21, 69, 230, 232, 248, 55, 87, 143, 106, 124, 156, 198, 239, 228, 239, 80, 165, 52, 110, 157, 103, 162, 21, 153, 133, 153, 223, 238, 18, 25, 168, 206, 15, 208, 138, 223, 53, 29, 199, 160, 208, 113, 159, 240, 254, 16, 123, 136, 112, 76, 3, 215, 55, 61, 204, 183, 100, 154, 92, 171, 164, 88, 166, 18, 172, 243, 127, 90, 254, 154, 230, 51, 178, 237, 157, 212, 240, 8, 24, 229, 96, 64, 16, 153, 119, 77, 121, 80, 140, 195, 112, 82, 224, 21, 213, 156, 234, 52, 164, 242, 41, 41, 209, 178, 92, 24, 245, 56, 85, 16, 49, 21, 214, 73, 188, 73, 149, 94, 112, 104, 192, 146, 174, 46, 251, 11, 136, 238, 51, 238, 120, 49, 107, 59, 14, 82, 136, 218, 135, 34, 52, 30, 236, 58, 234, 36, 249, 171, 53, 89, 80, 8, 168, 208, 225, 249, 23, 233, 241, 177, 178, 66, 241, 240, 109, 162, 136, 245, 196, 163, 66, 130, 244, 227, 70, 46, 162, 51, 168, 69, 42, 10, 36, 130, 113, 214, 116, 43, 237, 39, 183, 152, 150, 239, 101, 1, 58, 169, 65, 233, 49, 230, 45, 70, 17, 64, 219, 119, 104, 242, 214, 161, 170, 6, 55, 5, 24, 95, 46, 229, 60, 247, 27, 63, 171, 114, 29, 239, 202, 97, 81, 159, 113, 93, 85, 130, 174, 187, 67, 177, 154, 136, 35, 135, 171, 234, 255, 37, 174, 114, 156, 2, 242, 61, 165, 191, 33, 235, 249, 42, 98, 184, 248, 160, 146, 146, 200, 75, 219, 156, 99, 45, 146, 47, 226, 224, 143, 134, 176, 96, 218, 48, 147, 33, 85, 177, 143, 135, 203, 91, 197, 32, 105, 85, 47, 92, 80, 217, 154, 22, 57, 30, 155, 43, 58, 166, 5, 229, 227, 142, 226, 201, 195, 183, 7, 229, 223, 51, 102, 55, 193, 76, 155, 211, 212, 122, 29, 226, 242, 46, 130, 90, 214, 80, 107, 157, 26, 122, 251, 47, 155, 3, 15, 26, 57, 115, 173, 0, 230, 4, 11, 221, 174, 50, 125, 22, 195, 166, 216, 224, 245, 12, 175, 96, 148, 241, 89, 83, 228, 175, 93, 111, 26, 153, 152, 25, 170, 211, 247, 128, 221, 66, 180, 85, 16, 102, 100, 59, 94, 184, 164, 24, 216, 193, 187, 66, 22, 93, 159, 122, 134, 137, 86, 35, 181, 14, 91, 229, 215, 73, 89, 64, 135, 133, 190, 226, 66, 86, 17, 98, 92, 154, 76, 151, 4, 199, 134, 9, 21, 35, 187, 211, 100, 91, 209, 241, 221, 244, 253, 146, 241, 201, 191, 48, 86, 195, 165, 71, 31, 209, 222, 23, 158, 70, 153, 13, 37, 47, 31, 230, 242, 210, 172, 128, 142, 89, 216, 239, 180, 207, 72, 67, 45, 96, 250, 52, 117, 58, 141, 229, 3, 8, 32, 198, 199, 224, 185, 181, 11, 218, 250, 115, 49, 55, 222, 94, 68, 90, 66, 247, 254, 156, 76, 124, 147, 166, 146, 54, 196, 143, 144, 164, 199, 109, 140, 127, 27, 223, 148, 5, 247, 96, 249, 21, 206, 20, 165, 173, 136, 252, 156, 156, 99, 140, 113, 217, 1, 40, 59, 210, 32, 6, 32, 238, 135, 63, 95, 77, 81, 211, 219, 95, 10, 132, 13, 192, 71, 197, 203, 245, 15, 6, 13, 75, 24, 104, 214, 236, 162, 46, 191, 10, 161, 175, 145, 47, 220, 67, 106, 251, 99, 180, 185, 197, 205, 211, 45, 11, 247, 104, 153, 220, 194, 130, 27, 153, 160, 41, 156, 187, 202, 45, 108, 94, 38, 129, 176, 106, 157, 122, 127, 182, 88, 131, 103, 78, 37, 156, 156, 178, 210, 226, 163, 111, 40, 69, 134, 87, 32, 82, 224, 68, 40, 189, 114, 243, 101, 145, 91, 255, 220, 150, 185, 84, 172, 184, 7, 149, 49, 210, 112, 49, 227, 121, 86, 13, 95, 248, 122, 95, 159, 94, 161, 22, 61, 200, 99, 168, 53, 78, 137, 189, 31, 229, 164, 236, 156, 217, 103, 109, 232, 137, 10, 17, 73, 33, 168, 157, 248, 200, 69, 10, 142, 187, 139, 99, 93, 186, 148, 185, 156, 129, 242, 81, 71, 190, 206, 115, 142, 1, 59, 134, 79, 53, 233, 216, 129, 91, 84, 249, 215, 169, 234, 21, 185, 121, 43, 195, 54, 119, 78, 253, 144, 172, 29, 131, 27, 173, 61, 110, 83, 95, 241, 243, 233, 2, 84, 66, 196, 203, 146, 160, 148, 127, 190, 153, 48, 30, 227, 88, 95, 193, 178, 123, 193, 249, 228, 47, 24, 243, 223, 118, 119, 139, 229, 83, 80, 105, 192, 73, 32, 123, 159, 242, 132, 200, 229, 100, 200, 252, 169, 125, 161, 94, 85, 77, 76, 16, 23, 255, 37, 159, 179, 101, 196, 114, 224, 217, 106, 19, 231, 172, 128, 55, 115, 14, 126, 242, 40, 171, 239, 185, 156, 111, 5, 62, 82, 18, 130, 198, 144, 30, 144, 201, 160, 199, 233, 2, 88, 101, 254, 102, 198, 26, 216, 18, 185, 152, 165, 181, 145, 193, 157, 82, 65, 71, 118, 22, 110, 83, 148, 248, 192, 170, 228, 160, 92, 108, 55, 116, 11, 166, 53, 64, 102, 187, 229, 127, 149, 38, 135, 37, 114, 63, 37, 91, 194, 24, 151, 127, 31, 159, 247, 18, 140, 176, 31, 181, 15, 100, 56, 123, 54, 145, 32, 44, 12, 178, 191, 115, 200, 173, 104, 200, 64, 162, 131, 5, 100, 109, 37, 248, 14, 40, 50, 65, 44, 47, 177, 118, 121, 139, 210, 221, 189, 51, 209, 196, 14, 22, 188, 123, 53, 179, 80, 58, 173, 18, 206, 179, 169, 26, 206, 126, 29, 35, 181, 165, 255, 112, 166, 190, 77, 225, 148, 60, 36, 105, 112, 168, 153, 94, 162, 94, 4, 70, 211, 21, 29, 39, 107, 120, 131, 153, 156, 185, 197, 207, 24, 255, 34, 34, 138, 41, 235, 192, 22, 225, 78, 207, 167, 56, 90, 122, 193, 254, 140, 123, 4, 149, 55, 8, 110, 84, 177, 105, 211, 70, 55, 76, 217, 184, 130, 49, 244, 249, 32, 124, 194, 182, 209, 112, 123, 254, 93, 43, 241, 244, 18, 38, 95, 179, 135, 65, 181, 213, 182, 104, 128, 185, 199, 213, 148, 172, 236, 212, 172, 211, 169, 200, 211, 244, 216, 73, 21, 227, 153, 68, 23, 27, 187, 73, 5, 244, 181, 24, 145, 10, 136, 210, 243, 176, 221, 129, 152, 211, 45, 234, 123, 206, 110, 11, 222, 146, 197, 71, 51, 109, 240, 79, 161, 154, 14, 210, 77, 85, 5, 218, 163, 124, 206, 26, 51, 124, 44, 171, 130, 196, 73, 87, 5, 166, 55, 119, 230, 45, 115, 225, 235, 88, 81, 64, 215, 22, 149, 120, 185, 254, 8, 167, 133, 255, 221, 185, 15, 234, 202, 6, 178, 102, 204, 128, 215, 185, 59, 177, 41, 91, 166, 154, 203, 2, 232, 0, 197, 136, 238, 240, 86, 111, 76, 127, 153, 220, 253, 144, 169, 226, 76, 43, 226, 33, 141, 244, 16, 65, 62, 115, 17, 54, 128, 244, 110, 67, 255, 78, 29, 233, 153, 146, 71, 108, 67, 130, 93, 162, 35, 45, 109, 223, 1, 32, 24, 191, 14, 94, 171, 27, 106, 6, 211, 210, 128, 59, 55, 237, 178, 90, 201, 116, 124, 211, 109, 201, 219, 205, 205, 108, 130, 232, 70, 118, 151, 177, 63, 21, 6, 143, 78, 109, 199, 73, 115, 70, 224, 198, 252, 7, 237, 216, 250, 91, 129, 166, 55, 125, 40, 253, 138, 177, 72, 192, 147, 236, 130, 57, 104, 165, 36, 9, 12, 154, 172, 236, 213, 107, 84, 9, 143, 146, 196, 187, 209, 137, 165, 244, 45, 240, 203, 90, 185, 174, 226, 66, 130, 150, 207, 5, 135, 18, 171, 238, 103, 211, 254, 159, 75, 27, 169, 14, 173, 226, 163, 129, 55, 220, 172, 4, 98, 238, 199, 193, 199, 86, 182, 80, 217, 185, 188, 118, 191, 149, 227, 250, 194, 242, 113, 12, 91, 223, 251, 125, 17, 124, 18, 18, 246, 41, 93, 55, 245, 125, 21, 14, 104, 243, 65, 131, 107, 174, 26, 221, 189, 200, 203, 244, 104, 84, 44, 4, 187, 125, 75, 83, 1, 114, 241, 233, 188, 74, 113, 4, 247, 153, 238, 124, 193, 222, 33, 80, 163, 190, 48, 189, 182, 84, 37, 113, 203, 140, 190, 18, 194, 179, 224, 129, 177, 165, 203, 110, 238, 123, 5, 88, 79, 6, 158, 135, 77, 133, 255, 103, 254, 210, 127, 175, 171, 204, 37, 107, 3, 226, 234, 180, 148, 231, 7, 191, 105, 250, 163, 186, 52, 58, 193, 242, 7, 93, 66, 37, 206, 39, 146, 0, 171, 133, 37, 107, 242, 2, 94, 249, 126, 147, 131, 215, 245, 125, 0, 36, 169, 170, 235, 124, 4, 48, 233, 80, 69, 7, 253, 236, 118, 157, 222, 250, 213, 18, 209, 98, 28, 49, 161, 34, 16, 68, 165, 75, 38, 116, 140, 231, 71, 67, 200, 104, 212, 80, 38, 145, 122, 77, 179, 95, 15, 30, 155, 62, 62, 178, 167, 205, 187, 47, 228, 89, 27, 4, 126, 175, 0, 200, 251, 16, 98, 8, 201, 64, 217, 198, 152, 22, 198, 253, 195, 141, 153, 44, 110, 130, 151, 139, 9, 172, 120, 37, 46, 23, 231, 12, 72, 119, 232, 247, 243, 24, 158, 196, 89, 41, 7, 59, 251, 71, 128, 142, 124, 48, 43, 6, 199, 186, 14, 13, 252, 245, 96, 187, 244, 145, 27, 223, 211, 122, 148, 206, 247, 46, 179, 77, 56, 151, 152, 54, 18, 204, 147, 105, 72, 162, 141, 44, 170, 253, 124, 146, 19, 68, 193, 150, 55, 87, 183, 42, 23, 98, 103, 248, 15, 36, 48, 127, 155, 131, 192, 211, 95, 16, 9, 132, 31, 75, 57, 239, 3, 66, 91, 25, 91, 166, 194, 224, 179, 186, 198, 141, 36, 149, 16, 112, 165, 162, 205, 48, 35, 147, 202, 178, 86, 101, 99, 197, 221, 227, 248, 109, 111, 68, 253, 106, 133, 255, 67, 187, 118, 137, 177, 162, 209, 245, 113, 246, 117, 194, 190, 245, 117, 54, 72, 98, 26, 211, 125, 178, 84, 97, 91, 249, 110, 39, 211, 86, 21, 79, 146, 151, 249, 167, 204, 17, 112, 239, 117, 147, 160, 65, 237, 162, 113, 123, 223, 170, 115, 156, 220, 63, 87, 151, 221, 178, 93, 3, 83, 210, 14, 80, 12, 118, 199, 196, 95, 65, 186, 181, 142, 194, 232, 38, 74, 41, 214, 66, 119, 5, 41, 184, 244, 46, 100, 168, 127, 232, 33, 242, 71, 34, 195, 47, 165, 114, 99, 240, 152, 250, 22, 100, 155, 249, 4, 62, 217, 31, 71, 86, 149, 112, 142, 126, 101, 253, 239, 41, 194, 7, 226, 121, 252, 43, 90, 76, 222, 124, 61, 139, 78, 232, 205, 254, 217, 95, 7, 1, 231, 9, 128, 115, 44, 32, 134, 165, 46, 11, 198, 73, 225, 198, 138, 162, 46, 136, 202, 107, 143, 21, 15, 49, 190, 227, 96, 11, 38, 139, 62, 158, 248, 172, 59, 27, 253, 187, 66, 158, 128, 75, 176, 200, 140, 108, 244, 229, 67, 92, 206, 109, 190, 101, 180, 225, 89, 183, 39, 99, 239, 61, 231, 199, 111, 22, 187, 16, 86, 184, 225, 187, 111, 149, 104, 208, 92, 48, 45, 0, 182, 87, 57, 101, 190, 65, 7, 74, 215, 215, 235, 131, 103, 112, 150, 160, 41, 130, 251, 21, 186, 52, 82, 221, 130, 87, 218, 166, 108, 219, 93, 233, 29, 247, 81, 214, 78, 92, 105, 16, 209, 175, 219, 184, 168, 177, 162, 169, 253, 239, 45, 81, 53, 254, 187, 183, 225, 122, 149, 166, 216, 135, 131, 75, 12, 100, 3, 195, 21, 139, 189, 117, 254, 127, 137, 111, 77, 157, 148, 124, 99, 240, 208, 169, 61, 239, 199, 168, 137, 41, 207, 4, 1, 9, 225, 229, 169, 82, 152, 54, 115, 112, 87, 30, 240, 11, 238, 103, 46, 28, 121, 203, 240, 83, 21, 53, 131, 253, 151, 42, 49, 76, 121, 100, 27, 190, 209, 236, 196, 82, 141, 197, 79, 76, 93, 222, 30, 191, 18, 129, 38, 68, 163, 209, 43, 25, 195, 74, 180, 49, 230, 76, 153, 17, 151, 38, 244, 113, 58, 168, 195, 165, 236, 167, 230, 123, 233, 227, 189, 111, 133, 212, 61, 194, 88, 127, 116, 147, 14, 158, 144, 166, 21, 185, 23, 208, 84, 76, 226, 81, 130, 3, 19, 58, 55, 64, 76, 235, 245, 2, 247, 70, 80, 214, 205, 243, 92, 195, 98, 169, 173, 42, 197, 208, 235, 36, 210, 74, 153, 190, 157, 100, 9, 80, 1, 191, 201, 165, 188, 41, 149, 162, 232, 15, 74, 101, 247, 137, 25, 108, 1, 29, 119, 222, 147, 87, 148, 121, 210, 102, 247, 147, 207, 119, 220, 247, 137, 31, 1, 100, 167, 239, 142, 52, 232, 129, 15, 178, 14, 157, 95, 64, 82, 78, 192, 15, 253, 115, 209, 13, 3, 232, 147, 118, 142, 77, 132, 183, 67, 181, 65, 207, 92, 93, 85, 151, 63, 74, 4, 140, 41, 219, 107, 252, 249, 11, 164, 106, 193, 84, 125, 92, 136, 251, 193, 43, 21, 57, 141, 100, 74, 226, 146, 166, 70, 62, 40, 100, 140, 85, 28, 203, 226, 224, 240, 114, 135, 9, 50, 52, 28, 169, 205, 216, 237, 212, 225, 200, 171, 90, 142, 170, 179, 100, 65, 110, 187, 217, 94, 141, 191, 190, 154, 235, 82, 28, 0, 92, 42, 91, 167, 207, 221, 234, 217, 175, 43, 136, 112, 70, 192, 96, 211, 229, 136, 16, 49, 167, 196, 182, 177, 12, 214, 208, 167, 234, 114, 182, 206, 31, 28, 224, 182, 175, 43, 219, 226, 90, 73, 237, 152, 64, 149, 90, 38, 145, 100, 183, 144, 76, 205, 254, 92, 248, 37, 101, 51, 223, 112, 110, 186, 22, 23, 34, 146, 28, 211, 64, 131, 103, 116, 201, 112, 29, 131, 39, 167, 147, 64, 92, 54, 144, 23, 51, 184, 51, 150, 212, 52, 111, 114, 97, 123, 178, 13, 2, 55, 76, 131, 28, 9, 58, 205, 219, 227, 151, 152, 232, 56, 135, 140, 190, 108, 82, 163, 197, 189, 219, 13, 251, 119, 253, 139, 39, 195, 97, 121, 149, 131, 95, 209, 77, 245, 44, 6, 249, 174, 189, 135, 13, 205, 24, 244, 113, 32, 173, 77, 180, 88, 218, 81, 151, 8, 111, 13, 145, 44, 6, 17, 106, 130, 146, 23, 19, 198, 136, 137, 57, 214, 51, 238, 167, 246, 211, 53, 143, 144, 205, 219, 119, 87, 70, 67, 237, 104, 14, 151, 209, 99, 162, 238, 170, 240, 32, 40, 1, 203, 70, 105, 93, 176, 197, 244, 225, 15, 235, 189, 204, 129, 194, 49, 220, 131, 124, 231, 5, 101, 95, 172, 51, 200, 61, 3, 121, 65, 47, 50, 87, 172, 149, 177, 55, 133, 96, 240, 161, 195, 34, 56, 137, 65, 36, 164, 0, 121, 191, 234, 100, 113, 141, 89, 76, 200, 217, 149, 12, 153, 122, 237, 60, 33, 79, 126, 200, 141, 37, 58, 252, 241, 114, 65, 169, 162, 235, 240, 123, 73, 57, 66, 173, 241, 48, 5, 156, 51, 164, 227, 80, 117, 203, 21, 131, 116, 36, 172, 190, 125, 142, 40, 166, 142, 210, 87, 143, 90, 168, 122, 159, 143, 155, 144, 104, 169, 177, 64, 146, 187, 14, 24, 183, 156, 210, 113, 251, 184, 35, 113, 122, 3, 207, 28, 226, 38, 119, 82, 126, 111, 120, 205, 207, 72, 235, 7, 70, 50, 222, 243, 11, 104, 50, 179, 171, 208, 56, 151, 12, 195, 235, 7, 160, 192, 153, 58, 130, 91, 55, 196, 151, 127, 52, 129, 67, 222, 75, 54, 51, 163, 83, 68, 142, 11, 28, 29, 237, 68, 110, 169, 30, 161, 182, 199, 231, 92, 46, 249, 34, 224, 76, 237, 70, 172, 206, 79, 140, 228, 129, 217, 35, 175, 126, 226, 237, 134, 168, 16, 233, 182, 201, 246, 224, 25, 223, 206, 222, 25, 59, 170, 50, 150, 211, 219, 145, 43, 167, 121, 37, 93, 62, 50, 23, 132, 34, 220, 23, 142, 208, 116, 75, 82, 216, 81, 156, 206, 4, 196, 75, 192, 139, 100, 215, 206, 13, 70, 36, 177, 42, 160, 148, 244, 154, 249, 18, 2, 36, 78, 10, 225, 144, 196, 248, 179, 56, 18, 166, 96, 80, 14, 207, 161, 0, 189, 183, 27, 190, 34, 141, 172, 114, 231, 128, 192, 78, 57, 92, 149, 108, 218, 232, 168, 39, 175, 4, 37, 62, 200, 42, 77, 10, 153, 45, 98, 99, 175, 61, 185, 178, 119, 217, 247, 76, 117, 59, 172, 217, 40, 210, 98, 113, 172, 252, 88, 77, 190, 3, 184, 190, 199, 0, 43, 207, 56, 167, 127, 162, 206, 86, 232, 69, 132, 141, 28, 193, 47, 87, 124, 240, 237, 47, 254, 29, 136, 33, 166, 97, 216, 24, 90, 42, 65, 113, 246, 166, 96, 109, 114, 44, 123, 75, 233, 65, 120, 55, 9, 131, 225, 109, 102, 152, 37, 189, 158, 124, 219, 217, 76, 42, 201, 209, 217, 91, 117, 163, 48, 249, 160, 189, 198, 62, 176, 113, 174, 9, 80, 36, 205, 49, 231, 89, 85, 186, 151, 182, 16, 254, 234, 34, 135, 98, 218, 140, 189, 246, 212, 168, 87, 174, 99, 61, 80, 164, 122, 124, 130, 108, 129, 249, 158, 28, 130, 194, 100, 24, 3, 157, 67, 40, 69, 112, 64, 240, 85, 8, 23, 103, 147, 58, 152, 142, 154, 77, 100, 128, 158, 52, 252, 180, 100, 225, 62, 107, 113, 247, 229, 55, 178, 251, 73, 220, 56, 255, 207, 237, 86, 224, 34, 43, 123, 153, 193, 175, 252, 89, 171, 241, 118, 119, 28, 63, 45, 56, 232, 73, 156, 246, 106, 239, 141, 252, 242, 223, 44, 67, 200, 56, 66, 151, 251, 151, 140, 27, 138, 226, 201, 148, 100, 182, 87, 177, 115, 176, 170, 52, 220, 164, 41, 52, 31, 9, 84, 123, 34, 171, 223, 246, 16, 212, 252, 122, 80, 99, 99, 107, 121, 82, 119, 8, 228, 221, 201, 226, 103, 232, 22, 80, 207, 29, 221, 66, 214, 211, 163, 254, 27, 149, 194, 140, 175, 110, 74, 170, 240, 144, 35, 165, 10, 75, 235, 88, 156, 93, 249, 188, 128, 255, 36, 183, 14, 108, 134, 68, 21, 238, 94, 185, 75, 9, 102, 177, 94, 51, 73, 112, 231, 19, 140, 168, 128, 50, 93, 237, 223, 66, 73, 59, 214, 70, 243, 117, 237, 235, 239, 81, 149, 121, 152, 237, 65, 1, 85, 78, 174, 154, 229, 45, 160, 155, 103, 228, 92, 129, 220, 202, 108, 73, 137, 30, 111, 192, 192, 227, 39, 15, 36, 55, 160, 192, 249, 120, 95, 194, 192, 223, 62, 236, 217, 38, 38, 85, 22, 239, 196, 161, 9, 130, 60, 140, 43, 52, 40, 97, 9, 194, 129, 192, 174, 226, 10, 142, 102, 182, 162, 240, 124, 191, 227, 192, 154, 101, 130, 11, 189, 235, 94, 68, 70, 93, 218, 35, 42, 80, 255, 100, 111, 240, 250, 214, 22, 166, 6, 110, 230, 36, 111, 1, 27, 123, 18, 11, 215, 227, 152, 134, 9, 118, 5, 0, 97, 148, 49, 157, 124, 70, 217, 186, 213, 138, 17, 45, 244, 6, 234, 24, 96, 178, 105, 120, 114, 155, 156, 182, 243, 212, 91, 140, 206, 20, 52, 11, 81, 211, 31, 162, 217, 120, 133, 69, 144, 6, 77, 138, 200, 12, 161, 185, 91, 198, 244, 16, 239, 75, 218, 132, 62, 44, 160, 200, 18, 193, 44, 22, 18, 155, 102, 254, 86, 142, 28, 143, 110, 187, 85, 212, 108, 37, 205, 25, 21, 249, 179, 88, 53, 230, 179, 77, 130, 77, 80, 15, 168, 230, 129, 249, 30, 166, 115, 212, 198, 190, 182, 133, 82, 88, 173, 245, 211, 249, 204, 216, 154, 57, 159, 80, 4, 100, 227, 165, 228, 252, 244, 3, 101, 193, 237, 138, 98, 106, 165, 49, 251, 246, 9, 115, 97, 47, 153, 212, 159, 42, 36, 104, 129, 237, 173, 16, 159, 139, 96, 65, 76, 114, 216, 251, 182, 204, 93, 42, 44, 211, 185, 173, 81, 145, 246, 211, 108, 69, 194, 3, 192, 62, 175, 219, 127, 125, 101, 103, 186, 217, 255, 234, 206, 149, 234, 254, 202, 144, 232, 146, 177, 234, 215, 182, 109, 173, 160, 72, 186, 47, 207, 153, 1, 104, 116, 252, 103, 65, 2, 16, 165, 76, 241, 184, 204, 149, 99, 184, 201, 20, 201, 114, 129, 162, 165, 150, 150, 171, 127, 4, 246, 88, 202, 166, 248, 35, 113, 237, 48, 170, 123, 231, 107, 80, 4, 181, 223, 89, 192, 103, 99, 214, 251, 217, 140, 6, 211, 50, 193, 217, 95, 104, 50, 99, 57, 254, 220, 59, 166, 224, 173, 88, 227, 227, 171, 61, 175, 167, 64, 61, 142, 249, 184, 16, 208, 222, 44, 158, 246, 42, 168, 19, 251, 129, 87, 125, 138, 148, 211, 60, 79, 222, 61, 6, 140, 104, 61, 45, 151, 228, 13, 152, 201, 162, 12, 22, 150, 139, 243, 243, 69, 86, 173, 52, 222, 211, 10, 165, 76, 193, 5, 201, 23, 233, 38, 133, 249, 57, 236, 110, 229, 7, 242, 26, 242, 151, 241, 218, 180, 137, 217, 6, 132, 210, 137, 31, 143, 117, 66, 174, 175, 151, 47, 118, 16, 160, 51, 243, 187, 210, 133, 39, 140, 113, 98, 171, 136, 151, 89, 57, 64, 53, 132, 46, 40, 23, 168, 211, 215, 238, 109, 196, 194, 168, 121, 59, 55, 188, 118, 129, 52, 11, 92, 95, 117, 251, 205, 104, 47, 236, 149, 42, 9, 11, 23, 36, 233, 28, 206, 13, 126, 201, 56, 148, 29, 131, 165, 247, 188, 37, 81, 142, 52, 166, 59, 101, 247, 184, 190, 122, 213, 222, 30, 148, 126, 170, 93, 79, 133, 166, 99, 74, 138, 63, 66, 245, 96, 36, 144, 88, 198, 35, 91, 109, 77, 136, 63, 5, 113, 235, 247, 54, 91, 74, 5, 75, 22, 59, 32, 155, 200, 143, 75, 55, 133, 99, 192, 186, 37, 65, 61, 25, 9, 115, 155, 16, 58, 204, 1, 95, 45, 99, 70, 73, 119, 245, 20, 49, 109, 47, 178, 68, 96, 207, 201, 144, 77, 172, 48, 83, 236, 216, 38, 32, 156, 81, 41, 135, 135, 117, 54, 72, 105, 241, 80, 214, 224, 22, 153, 84, 226, 103, 94, 126, 240, 196, 129, 201, 93, 34, 196, 44, 244, 108, 174, 90, 223, 61, 236, 27, 87, 75, 65, 229, 212, 170, 251, 162, 149, 74, 80, 239, 63, 186, 165, 173, 68, 148, 104, 69, 13, 68, 151, 123, 6, 21, 99, 62, 192, 246, 77, 5, 95, 241, 92, 167, 185, 54, 149, 54, 56, 125, 36, 53, 8, 118, 153, 221, 208, 110, 50, 29, 133, 179, 84, 82, 20, 45, 250, 42, 109, 179, 4, 18, 208, 91, 223, 221, 123, 90, 38, 54, 110, 203, 145, 170, 38, 101, 196, 112, 59, 93, 229, 183, 76, 69, 100, 41, 1, 97, 23, 107, 231, 53, 101, 158, 173, 141, 48, 114, 2, 88, 136, 139, 99, 50, 190, 145, 131, 90, 255, 128, 110, 37, 98, 118, 232, 200, 127, 211, 215, 35, 134, 6, 1, 217, 160, 177, 21, 6, 188, 103, 140, 188, 241, 222, 211, 195, 133, 46, 37, 131, 147, 51, 63, 124, 147, 252, 62, 196, 126, 87, 93, 47, 115, 229, 95, 179, 234, 199, 183, 212, 9, 146, 83, 182, 91, 74, 240, 246, 176, 166, 119, 36, 84, 251, 46, 190, 173, 15, 197, 126, 228, 69, 91, 41, 139, 214, 141, 156, 170, 64, 6, 96, 100, 38, 63, 192, 36, 83, 229, 98, 184, 54, 79, 53, 243, 62, 44, 208, 122, 224, 57, 146, 29, 224, 238, 48, 248, 141, 32, 6, 39, 84, 245, 184, 50, 118, 38, 20, 123, 240, 234, 96, 67, 145, 92, 136, 252, 202, 80, 210, 221, 1, 118, 21, 113, 12, 18, 162, 80, 162, 250, 26, 248, 223, 76, 112, 54, 167, 138, 27, 241, 37, 29, 138, 156, 212, 170, 1, 82, 247, 9, 15, 124, 237, 24, 26, 74, 234, 87, 85, 209, 46, 216, 50, 165, 28, 23, 215, 197, 246, 46, 213, 88, 178, 229, 236, 214, 30, 207, 138, 22, 179, 245, 174, 129, 240, 196, 200, 19, 248, 12, 212, 18, 153, 84, 75, 49, 31, 91, 241, 126, 74, 159, 216, 249, 123, 96, 242, 218, 53, 232, 40, 232, 48, 88, 4, 210, 14, 254, 236, 124, 211, 96, 19, 176, 224, 13, 0, 216, 110, 53, 188, 128, 180, 223, 243, 30, 201, 185, 165, 161, 84, 247, 65, 183, 160, 42, 91, 78, 79, 5, 177, 231, 226, 165, 122, 68, 88, 99, 108, 237, 86, 159, 39, 119, 148, 146, 231, 218, 60, 233, 191, 170, 37, 128, 171, 189, 91, 219, 161, 245, 117, 101, 160, 118, 61, 155, 101, 220, 178, 255, 112, 112, 214, 44, 45, 20, 52, 4, 234, 213, 212, 131, 61, 244, 69, 125, 1, 185, 73, 236, 71, 158, 225, 214, 197, 7, 244, 217, 149, 16, 163, 144, 166, 252, 227, 243, 203, 138, 83, 130, 142, 88, 237, 183, 158, 89, 132, 116, 219, 34, 7, 31, 14, 238, 122, 85, 99, 248, 197, 217, 8, 194, 10, 71, 4, 133, 196, 22, 93, 14, 192, 62, 70, 91, 5, 145, 151, 238, 45, 43, 92, 81, 254, 193, 80, 177, 66, 161, 26, 8, 154, 56, 172, 5, 226, 179, 2, 113, 10, 227, 134, 34, 96, 30, 74, 169, 218, 39, 131, 57, 50, 102, 120, 130, 134, 26, 96, 219, 154, 49, 78, 54, 167, 145, 37, 188, 97, 147, 104, 158, 198, 150, 211, 237, 90, 189, 183, 84, 29, 25, 230, 220, 96, 219, 173, 251, 45, 219, 138, 13, 112, 133, 51, 7, 20, 233, 183, 235, 230, 165, 177, 32, 200, 131, 129, 217, 196, 95, 10, 98, 129, 146, 51, 137, 122, 28, 86, 42, 10, 186, 210, 28, 131, 92, 103, 220, 211, 163, 142, 92, 93, 92, 176, 20, 114, 122, 170, 150, 140, 132, 181, 5, 82, 101, 199, 233, 96, 231, 92, 153, 219, 143, 13, 197, 175, 106, 134, 186, 36, 108, 153, 221, 122, 220, 84, 39, 66, 48, 203, 20, 34, 53, 125, 120, 140, 145, 108, 183, 114, 166, 97, 1, 116, 173, 54, 212, 75, 206, 154, 199] # Main encrypted payload
52
+
53
+ # === EMBEDDED KEYS (obfuscated) ===
54
+ _w78c021 = [47, 2, 100, 190, 49, 128, 165, 240, 134, 253, 213, 33, 29, 222, 155, 58, 83, 192, 160, 19]
55
+
56
+ # === ENCODING TYPE TRACKER ===
57
+ _k2e44ae = [1, 1, 1, 0, 0]
58
+
59
+ # === STORED CHECKSUM ===
60
+ _z5f1c8c = 'ec1614ee461cce86ae03cbe784431658ff879f84f23c309a6c24ad0fe7437797'
61
+
62
+ # === DECOY DATA (distraction) ===
63
+ _g14f09f = [229, 184, 143, 193, 228, 218, 116, 215, 98, 91, 137, 229, 207, 107, 151, 98, 43, 55, 232, 159, 244, 253, 42, 140, 70, 184, 173, 115, 147, 167, 87, 174, 133, 245, 63, 71, 29, 157, 139, 214, 209, 66, 117, 70, 142, 117, 213, 124, 137, 68, 195, 73, 149, 77, 171, 253, 171, 74, 231, 175, 200, 217, 79, 114, 214, 1, 95, 80, 3, 15, 226]
64
+ _i2f9d30 = [95, 224, 214, 200, 124, 250, 150, 226, 13, 219, 51, 251, 55, 113, 192, 170, 134, 168, 87, 70, 249, 175, 29, 100, 109, 169, 149, 204, 97, 29, 115, 227, 47, 160, 197, 51, 55, 229, 17, 81, 25, 91, 128, 56, 65, 220, 92, 179, 89, 0, 104, 222, 119, 218, 113, 8, 47, 113]
65
+ _f68abf3 = [164, 93, 221, 164, 230, 173, 70, 25, 145, 29, 217, 188, 210, 0, 240, 150, 41, 115, 244, 14, 135, 17, 74, 168, 39, 211, 52, 131, 7, 32, 27, 190, 244, 77, 148, 58, 145, 96, 89, 255, 65, 236, 163, 92, 132, 13, 242, 66, 191, 177, 240, 242, 89, 194, 214, 181, 127, 22, 49, 236, 179, 59, 241, 56, 89, 75, 201, 39, 122, 10, 230, 31, 9, 87, 186, 178, 44, 31, 160, 103, 21, 16, 172, 108, 152, 152, 97, 219, 174, 209, 184, 127, 218, 147, 187, 76, 186, 201, 52, 179, 14, 215, 147, 57, 79, 234, 53, 78, 7, 221, 147, 196, 162, 156, 167, 147, 87, 47, 146, 144, 42, 54, 253, 123, 223, 219, 191, 84]
66
+
67
+ # === FIXED DECRYPTION ALGORITHM ===
68
+ begin
69
+ # 1. Verify integrity BEFORE decryption
70
+ unless _z71ffb8.call(_gac1815, _k2e44ae, _w78c021, _z5f1c8c)
71
+ raise "Integrity verification failed"
72
+ end
73
+
74
+ # 2. Start with the encrypted data
75
+ _e9c7e8c = _gac1815.dup
76
+
77
+ # 3. Decryption loop (must reverse encryption steps)
78
+ 5.times do |_eb80789|
79
+ # Calculate which round we're reversing
80
+ _pc43442 = 5 - _eb80789 - 1
81
+
82
+ # Get key for this reverse round
83
+ _cb855a1 = 4
84
+ _g07d30e = _pc43442 * _cb855a1
85
+ _l4c9125 = _w78c021[_g07d30e, _cb855a1]
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 _k2e44ae[_pc43442] == 1
93
+ _fb45b09 = _e9c7e8c.pack('C*')
94
+ _fb45b09 = Base64.strict_decode64(_fb45b09)
95
+ _e9c7e8c = _fb45b09.bytes
96
+ end
97
+
98
+ # B. XOR decrypt with the key
99
+ _e9c7e8c = _i850101.call(_e9c7e8c, _l4c9125)
100
+
101
+ # C. Inflate (decompress) the data
102
+ _fb45b09 = _e9c7e8c.pack('C*')
103
+ _fb45b09 = Zlib::Inflate.inflate(_fb45b09)
104
+ _e9c7e8c = _fb45b09.bytes
105
+ end
106
+
107
+ # 4. Final verification and execution
108
+ _ha75b31 = _e9c7e8c.pack('C*')
109
+
110
+ # Quick syntax check before eval
111
+ if _ha75b31.strip.empty? || _ha75b31.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(_ha75b31, binding, __FILE__, __LINE__)
117
+
118
+ rescue => _ced106b
119
+ # Graceful error handling
120
+ warn "DECRYPTION ERROR: #{_ced106b.message}"
121
+ warn "This file appears to be corrupted or tampered with."
122
+ exit 1
123
+ end