@evomap/evolver 1.89.4 → 1.89.6

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 (108) hide show
  1. package/CONTRIBUTING.md +19 -0
  2. package/README.md +536 -86
  3. package/assets/cover.png +0 -0
  4. package/index.js +87 -7
  5. package/package.json +17 -6
  6. package/scripts/a2a_export.js +63 -0
  7. package/scripts/a2a_ingest.js +79 -0
  8. package/scripts/a2a_promote.js +118 -0
  9. package/scripts/analyze_by_skill.js +121 -0
  10. package/scripts/build_binaries.js +479 -0
  11. package/scripts/check-changelog.js +166 -0
  12. package/scripts/extract_log.js +85 -0
  13. package/scripts/generate_history.js +75 -0
  14. package/scripts/gep_append_event.js +96 -0
  15. package/scripts/gep_personality_report.js +234 -0
  16. package/scripts/human_report.js +147 -0
  17. package/scripts/recall-verify-report.js +234 -0
  18. package/scripts/recover_loop.js +61 -0
  19. package/scripts/refresh_stars_badge.js +168 -0
  20. package/scripts/seed-merchants.js +91 -0
  21. package/scripts/suggest_version.js +89 -0
  22. package/scripts/validate-modules.js +38 -0
  23. package/scripts/validate-suite.js +78 -0
  24. package/skills/index.json +14 -0
  25. package/src/adapters/scripts/_runtimePaths.js +1 -0
  26. package/src/adapters/scripts/evolver-session-end.js +1 -0
  27. package/src/adapters/scripts/evolver-session-start.js +1 -0
  28. package/src/evolve/guards.js +1 -721
  29. package/src/evolve/pipeline/collect.js +1 -1283
  30. package/src/evolve/pipeline/dispatch.js +1 -421
  31. package/src/evolve/pipeline/enrich.js +1 -440
  32. package/src/evolve/pipeline/hub.js +1 -319
  33. package/src/evolve/pipeline/select.js +1 -274
  34. package/src/evolve/pipeline/signals.js +1 -206
  35. package/src/evolve/utils.js +1 -264
  36. package/src/evolve.js +1 -350
  37. package/src/gep/a2aProtocol.js +1 -4455
  38. package/src/gep/antiAbuseTelemetry.js +1 -233
  39. package/src/gep/autoDistillConv.js +1 -205
  40. package/src/gep/autoDistillLlm.js +1 -315
  41. package/src/gep/candidateEval.js +1 -92
  42. package/src/gep/candidates.js +1 -198
  43. package/src/gep/contentHash.js +1 -30
  44. package/src/gep/conversationSniffer.js +1 -266
  45. package/src/gep/crypto.js +1 -89
  46. package/src/gep/curriculum.js +1 -163
  47. package/src/gep/deviceId.js +1 -218
  48. package/src/gep/envFingerprint.js +1 -118
  49. package/src/gep/epigenetics.js +1 -31
  50. package/src/gep/execBridge.js +1 -711
  51. package/src/gep/explore.js +1 -289
  52. package/src/gep/hash.js +1 -15
  53. package/src/gep/hubFetch.js +1 -359
  54. package/src/gep/hubReview.js +1 -207
  55. package/src/gep/hubSearch.js +1 -526
  56. package/src/gep/hubVerify.js +1 -306
  57. package/src/gep/idleScheduler.js +6 -1
  58. package/src/gep/learningSignals.js +1 -89
  59. package/src/gep/memoryGraph.js +1 -1374
  60. package/src/gep/memoryGraphAdapter.js +1 -203
  61. package/src/gep/mutation.js +1 -203
  62. package/src/gep/narrativeMemory.js +1 -108
  63. package/src/gep/openPRRegistry.js +1 -205
  64. package/src/gep/personality.js +1 -423
  65. package/src/gep/policyCheck.js +1 -599
  66. package/src/gep/prompt.js +1 -836
  67. package/src/gep/recallInject.js +1 -409
  68. package/src/gep/recallVerifier.js +1 -318
  69. package/src/gep/reflection.js +1 -177
  70. package/src/gep/savingsCore.js +1 -0
  71. package/src/gep/selector.js +1 -602
  72. package/src/gep/skillDistiller.js +1 -1294
  73. package/src/gep/solidify.js +1 -1699
  74. package/src/gep/strategy.js +1 -136
  75. package/src/gep/tokenSavings.js +1 -88
  76. package/src/gep/workspaceKeychain.js +1 -174
  77. package/src/ops/lifecycle.js +17 -4
  78. package/src/proxy/envelope.js +59 -0
  79. package/src/proxy/extensions/traceControl.js +1 -99
  80. package/src/proxy/index.js +221 -3
  81. package/src/proxy/inject.js +1 -52
  82. package/src/proxy/lifecycle/manager.js +14 -7
  83. package/src/proxy/mailbox/store.js +29 -6
  84. package/src/proxy/router/messages_route.js +4 -1
  85. package/src/proxy/router/responses_route.js +159 -0
  86. package/src/proxy/server/http.js +13 -4
  87. package/src/proxy/server/routes.js +11 -1
  88. package/src/proxy/sync/engine.js +7 -1
  89. package/src/proxy/sync/outbound.js +32 -4
  90. package/src/proxy/trace/extractor.js +1 -646
  91. package/src/proxy/trace/usage.js +1 -105
  92. package/.cursor/BUGBOT.md +0 -182
  93. package/.env.example +0 -68
  94. package/.git-commit-guard-token +0 -1
  95. package/.github/CODEOWNERS +0 -63
  96. package/.github/ISSUE_TEMPLATE/good_first_issue.md +0 -23
  97. package/.github/pull_request_template.md +0 -45
  98. package/.github/workflows/test.yml +0 -75
  99. package/CHANGELOG.md +0 -1237
  100. package/README.public.md +0 -569
  101. package/SECURITY.md +0 -108
  102. package/assets/gep/events.jsonl +0 -3
  103. package/examples/atp-consumer-quickstart.md +0 -100
  104. package/examples/hello-world.md +0 -38
  105. package/proxy-package.json +0 -39
  106. package/public.manifest.json +0 -143
  107. /package/assets/gep/{genes.json → genes.seed.json} +0 -0
  108. /package/{bundled-skills → skills}/_meta/SKILL.md +0 -0
@@ -6,7 +6,7 @@
6
6
  const fs = require('fs');
7
7
  const path = require('path');
8
8
  const os = require('os');
9
- const { execSync, spawn } = require('child_process');
9
+ const { execFileSync, execSync, spawn } = require('child_process');
10
10
  // 10 MB — prevents RangeError on large child process output (e.g. git log/diff
11
11
  // on large repos). See GHSA reports / issue #451.
12
12
  const MAX_EXEC_BUFFER = 10 * 1024 * 1024;
@@ -37,9 +37,22 @@ function execText(command) {
37
37
  return execSync(command, { encoding: 'utf8', stdio: ['ignore', 'pipe', 'ignore'], maxBuffer: MAX_EXEC_BUFFER });
38
38
  }
39
39
 
40
+ function execFileText(file, args) {
41
+ return execFileSync(file, args, {
42
+ encoding: 'utf8',
43
+ stdio: ['ignore', 'pipe', 'ignore'],
44
+ maxBuffer: MAX_EXEC_BUFFER,
45
+ windowsHide: true
46
+ });
47
+ }
48
+
40
49
  function listProcesses() {
41
50
  if (process.platform === 'win32') {
42
- var out = execText('powershell -NoProfile -Command "Get-CimInstance Win32_Process | ForEach-Object { $cmd = if ($_.CommandLine) { $_.CommandLine } else { \'\' }; Write-Output (\'{0}\\t{1}\' -f $_.ProcessId, $cmd) }"');
51
+ var out = execFileText('powershell', [
52
+ '-NoProfile',
53
+ '-Command',
54
+ 'Get-CimInstance Win32_Process | ForEach-Object { $cmd = if ($_.CommandLine) { $_.CommandLine } else { \'\'}; Write-Output (\'{0}\t{1}\' -f $_.ProcessId, $cmd) }'
55
+ ]);
43
56
  var procs = [];
44
57
  for (var line of out.split(/\r?\n/)) {
45
58
  if (!line || !line.trim()) continue;
@@ -132,7 +145,7 @@ function start(options) {
132
145
  }
133
146
 
134
147
  var child = spawn(process.execPath, [script, '--loop'], {
135
- detached: true, stdio: ['ignore', out, err], cwd: WORKSPACE_ROOT, env: env
148
+ detached: true, stdio: ['ignore', out, err], cwd: WORKSPACE_ROOT, env: env, windowsHide: true
136
149
  });
137
150
  child.unref();
138
151
  fs.writeFileSync(PID_FILE, String(child.pid));
@@ -163,7 +176,7 @@ function stop() {
163
176
  console.log('[Lifecycle] Force-killing PID ' + remaining[j]);
164
177
  // Windows does not support SIGKILL; use taskkill /F instead.
165
178
  if (process.platform === 'win32') {
166
- try { execSync('taskkill /F /PID ' + remaining[j], { stdio: 'ignore' }); } catch (e) {}
179
+ try { execFileSync('taskkill', ['/F', '/PID', String(remaining[j])], { stdio: 'ignore', windowsHide: true }); } catch (e) {}
167
180
  } else {
168
181
  try { process.kill(remaining[j], 'SIGKILL'); } catch (e) {}
169
182
  }
@@ -0,0 +1,59 @@
1
+ 'use strict';
2
+
3
+ const crypto = require('crypto');
4
+
5
+ const PROTOCOL_NAME = 'gep-a2a';
6
+ const PROTOCOL_VERSION = '1.0.0';
7
+
8
+ /**
9
+ * Build a GEP-A2A protocol envelope around a payload.
10
+ *
11
+ * Strict hub endpoints (/a2a/hello, /a2a/fetch, /a2a/validate, ...) run
12
+ * isValidProtocolMessage server-side and reject bare bodies with
13
+ * 400 invalid_protocol_message. Lenient endpoints such as
14
+ * /a2a/assets/search accept raw bodies and must NOT be wrapped.
15
+ *
16
+ * @param {string} messageType - GEP-A2A message_type ('hello'|'fetch'|'validate'|...)
17
+ * @param {object} [payload] - Message payload (defaults to {})
18
+ * @param {string|null} [senderId] - node_id of the sending node
19
+ * @returns {object} Full protocol envelope
20
+ */
21
+ function buildEnvelope(messageType, payload, senderId) {
22
+ if (!messageType || typeof messageType !== 'string') {
23
+ throw new Error('buildEnvelope: messageType is required');
24
+ }
25
+ return {
26
+ protocol: PROTOCOL_NAME,
27
+ protocol_version: PROTOCOL_VERSION,
28
+ message_type: messageType,
29
+ message_id: 'msg_' + Date.now() + '_' + crypto.randomBytes(4).toString('hex'),
30
+ sender_id: senderId || null,
31
+ timestamp: new Date().toISOString(),
32
+ payload: payload || {},
33
+ };
34
+ }
35
+
36
+ /**
37
+ * Wrap `body` in a GEP-A2A envelope unless it already is one.
38
+ *
39
+ * When the caller hands us a pre-built envelope, sender_id is still forced
40
+ * to the proxy's own node_id: callers must not be able to impersonate
41
+ * another node through the proxy (same rule as the ATP passthrough routes).
42
+ *
43
+ * @param {string} messageType - message_type used when wrapping is needed
44
+ * @param {object} [body] - Bare payload or full envelope
45
+ * @param {string|null} [senderId] - The proxy's own node_id
46
+ * @returns {object} Full protocol envelope
47
+ */
48
+ function ensureEnvelope(messageType, body, senderId) {
49
+ const b = body || {};
50
+ const isEnvelope = b.protocol === PROTOCOL_NAME
51
+ && typeof b.message_type === 'string'
52
+ && b.payload && typeof b.payload === 'object';
53
+ if (isEnvelope) {
54
+ return { ...b, sender_id: senderId || b.sender_id || null };
55
+ }
56
+ return buildEnvelope(messageType, b, senderId);
57
+ }
58
+
59
+ module.exports = { buildEnvelope, ensureEnvelope, PROTOCOL_NAME, PROTOCOL_VERSION };
@@ -1,99 +1 @@
1
- 'use strict';
2
-
3
- const crypto = require('crypto');
4
-
5
- function canonicalTraceConfigPayload(payload = {}) {
6
- const clean = {};
7
- for (const key of Object.keys(payload).sort()) {
8
- if (key === 'signature' || key === 'trace_config_signature' || key === 'signature_algorithm') continue;
9
- if (key === 'hub_public_key') continue;
10
- const value = payload[key];
11
- if (value !== undefined) clean[key] = value;
12
- }
13
- return JSON.stringify(clean);
14
- }
15
-
16
- function verifyTraceConfigSignature(payload = {}, env = process.env) {
17
- const publicKey = String(
18
- env.EVOMAP_TRACE_CONFIG_SIGNING_PUBLIC_KEY
19
- || env.EVOMAP_PROXY_TRACE_CONFIG_SIGNING_PUBLIC_KEY
20
- || ''
21
- ).trim();
22
- const signature = String(payload.signature || payload.trace_config_signature || '').trim();
23
- if (!publicKey || !signature) return false;
24
- try {
25
- return crypto.verify(
26
- 'sha256',
27
- Buffer.from(canonicalTraceConfigPayload(payload), 'utf8'),
28
- publicKey,
29
- Buffer.from(signature, 'base64')
30
- );
31
- } catch {
32
- return false;
33
- }
34
- }
35
-
36
- class TraceControl {
37
- constructor({ store, logger } = {}) {
38
- this.store = store;
39
- this.logger = logger || console;
40
- }
41
-
42
- process(message) {
43
- const payload = message && message.payload ? message.payload : message;
44
- const enabled = payload && (
45
- payload.enabled ??
46
- payload.trace_collection_enabled ??
47
- payload.proxy_trace_collection_enabled
48
- );
49
- if (typeof enabled !== 'boolean') {
50
- this.logger.warn?.('[trace-control] ignoring config without boolean enabled');
51
- return { ack: true, applied: false };
52
- }
53
- let profileEnabled = payload.profile_analysis_enabled ?? payload.trace_profile_analysis_enabled;
54
- const signed = verifyTraceConfigSignature(payload);
55
- const unsafeEnable = enabled === true;
56
- const unsafeProfile = profileEnabled === true;
57
- const hasRuntimeHubKey = typeof payload.hub_public_key === 'string' && payload.hub_public_key.trim();
58
- if (!signed && unsafeEnable) {
59
- this.logger.warn?.('[trace-control] rejected unsigned trace config that could enable collection/profile analysis');
60
- return { ack: true, applied: false };
61
- }
62
- if (!signed && unsafeProfile) {
63
- this.logger.warn?.('[trace-control] ignored unsigned profile analysis enable while applying trace disable');
64
- profileEnabled = false;
65
- }
66
- this.store.setState('trace_collection_enabled', enabled ? 'true' : 'false');
67
- if (typeof profileEnabled === 'boolean') {
68
- this.store.setState('trace_profile_analysis_enabled', profileEnabled ? 'true' : 'false');
69
- }
70
- if (hasRuntimeHubKey) {
71
- this.logger.warn?.('[trace-control] ignored runtime hub_public_key; use pinned EVOMAP_PROXY_TRACE_HUB_PUBLIC_KEY');
72
- }
73
- this.store.setState('trace_collection_updated_at', new Date().toISOString());
74
- this.logger.log?.('[trace-control] trace collection ' + (enabled ? 'enabled' : 'disabled'));
75
- return { ack: true, applied: true };
76
- }
77
-
78
- pollAndApply() {
79
- const messages = [
80
- ...this.store.poll({ type: 'trace_collection_config', limit: 50 }),
81
- ...this.store.poll({ type: 'proxy_trace_config', limit: 50 }),
82
- ];
83
- let applied = 0;
84
- for (const msg of messages) {
85
- const result = this.process(msg);
86
- const ack = result === true || (result && result.ack === true);
87
- const didApply = result === true || (result && result.applied === true);
88
- if (ack) {
89
- this.store.ack(msg.id);
90
- }
91
- if (didApply) {
92
- applied++;
93
- }
94
- }
95
- return applied;
96
- }
97
- }
98
-
99
- module.exports = { TraceControl, canonicalTraceConfigPayload, verifyTraceConfigSignature };
1
+ const _0x15118e=_0x3f3e;(function(_0x18c47c,_0x2b5d0e){const _0x591ed5=_0x3f3e,_0x227ca3=_0x18c47c();while(!![]){try{const _0x557faa=parseInt(_0x591ed5(0x317,'\x4f\x35\x51\x36'))/(-0xb*-0xe2+-0x10*-0xd3+-0x16e5)+-parseInt(_0x591ed5(0x248,'\x76\x74\x78\x29'))/(0x5b*0x31+-0x90+0x1*-0x10d9)*(parseInt(_0x591ed5(0x278,'\x31\x57\x29\x32'))/(0x97*-0xd+0x429*-0x8+-0xe*-0x2ed))+parseInt(_0x591ed5(0x2c8,'\x44\x41\x54\x47'))/(-0x2253+-0x1*-0x24a3+-0x4*0x93)+parseInt(_0x591ed5(0x2a8,'\x77\x43\x29\x37'))/(-0x735*0x5+0xaee+0x1*0x1920)*(-parseInt(_0x591ed5(0x33d,'\x4f\x35\x51\x36'))/(0xfae+-0x81d+0x1*-0x78b))+parseInt(_0x591ed5(0x1f1,'\x6a\x48\x69\x57'))/(-0xf*0x121+0x182c+0x39b*-0x2)+-parseInt(_0x591ed5(0x32a,'\x6e\x79\x67\x58'))/(0x8c+-0x4*0x12f+0x438)+parseInt(_0x591ed5(0x30b,'\x41\x54\x70\x69'))/(0xb*0x296+0x490*-0x4+-0xa29);if(_0x557faa===_0x2b5d0e)break;else _0x227ca3['push'](_0x227ca3['shift']());}catch(_0x2e4b0d){_0x227ca3['push'](_0x227ca3['shift']());}}}(_0x3c9a,-0x1ef02+-0x75b97+0x19*0xa1e1));function _0x3c9a(){const _0x150662=['\x70\x58\x39\x54\x6e\x43\x6b\x59\x57\x35\x39\x72\x66\x53\x6b\x34\x45\x47','\x69\x75\x6d\x6b\x65\x43\x6b\x75\x57\x52\x4a\x63\x54\x6d\x6b\x57','\x44\x49\x71\x2f\x77\x73\x30','\x42\x64\x6d\x70\x71\x63\x30\x32','\x57\x51\x61\x73\x66\x72\x56\x64\x4c\x43\x6b\x6c\x57\x36\x65','\x57\x50\x44\x74\x57\x50\x47\x47\x57\x51\x38','\x6a\x6d\x6f\x59\x57\x51\x4a\x64\x4a\x43\x6f\x42\x63\x71','\x6c\x38\x6f\x69\x74\x38\x6f\x6d\x57\x35\x57','\x57\x36\x4e\x63\x54\x6d\x6b\x34\x57\x34\x50\x56\x57\x52\x39\x4f\x57\x36\x65','\x63\x43\x6b\x4d\x57\x50\x5a\x64\x48\x72\x61','\x57\x37\x4c\x53\x57\x36\x71\x61\x6a\x43\x6f\x4a\x74\x73\x4b','\x44\x57\x62\x30\x57\x37\x69\x59\x75\x38\x6b\x50\x77\x47','\x57\x36\x4e\x63\x54\x6d\x6b\x57\x57\x34\x71','\x65\x63\x33\x63\x51\x6d\x6b\x6a\x43\x53\x6b\x30\x57\x34\x4b','\x57\x52\x6a\x4e\x57\x36\x4a\x64\x47\x43\x6b\x6c\x46\x72\x78\x63\x53\x61','\x57\x4f\x35\x41\x57\x50\x42\x64\x4b\x6d\x6f\x30','\x76\x38\x6f\x65\x57\x34\x75\x35\x79\x53\x6b\x74\x57\x34\x58\x4b','\x57\x51\x58\x71\x57\x4f\x4f\x54\x57\x50\x30','\x57\x36\x48\x6a\x57\x34\x38\x48','\x57\x34\x75\x34\x57\x34\x42\x63\x4a\x53\x6b\x55\x6a\x53\x6b\x31\x67\x71','\x69\x6d\x6b\x77\x71\x53\x6f\x73\x57\x35\x75\x55\x6d\x71','\x7a\x30\x52\x63\x48\x53\x6b\x36\x42\x57','\x44\x75\x30\x52\x76\x6d\x6b\x64\x57\x36\x4c\x6c\x6f\x57','\x6f\x53\x6b\x56\x42\x6d\x6b\x73\x57\x4f\x56\x63\x4d\x61','\x79\x66\x4b\x52\x79\x6d\x6b\x4b','\x57\x4f\x44\x5a\x41\x77\x46\x64\x53\x4a\x68\x63\x4e\x38\x6b\x38','\x66\x72\x33\x64\x47\x6d\x6f\x6f\x62\x4a\x65\x32\x71\x53\x6f\x55\x57\x50\x65','\x6e\x64\x37\x63\x53\x6d\x6b\x67\x45\x6d\x6b\x77\x57\x34\x6a\x75','\x57\x35\x61\x31\x57\x52\x71\x58\x61\x61','\x57\x52\x35\x69\x57\x4f\x69\x42\x57\x51\x78\x63\x54\x63\x46\x63\x49\x47','\x57\x37\x44\x61\x57\x34\x4f\x6f\x6e\x71','\x75\x38\x6f\x6a\x57\x34\x65\x65\x42\x43\x6b\x7a\x57\x34\x79','\x42\x59\x34\x36\x67\x53\x6f\x49\x57\x34\x76\x67\x57\x36\x34','\x70\x6d\x6f\x48\x64\x66\x68\x64\x50\x6d\x6b\x59\x57\x37\x30','\x57\x50\x35\x4c\x57\x52\x30\x58\x57\x50\x70\x63\x53\x57\x52\x63\x50\x57','\x57\x50\x53\x6d\x57\x51\x6c\x63\x4b\x6d\x6b\x49\x6c\x72\x56\x64\x52\x47','\x65\x53\x6f\x54\x57\x50\x38\x30\x6c\x75\x4e\x63\x4d\x61','\x66\x4a\x74\x63\x55\x62\x33\x64\x4c\x76\x54\x69\x57\x4f\x57','\x76\x47\x37\x64\x53\x38\x6f\x76\x6a\x57','\x57\x51\x65\x63\x57\x50\x33\x64\x56\x38\x6b\x6a\x78\x38\x6f\x31\x57\x34\x6d','\x6d\x43\x6b\x74\x71\x38\x6b\x6d\x57\x4f\x5a\x63\x4a\x43\x6f\x33\x6b\x47','\x42\x43\x6f\x36\x57\x4f\x6e\x48','\x57\x36\x2f\x63\x53\x43\x6b\x54\x57\x35\x54\x39','\x57\x35\x62\x64\x57\x36\x43\x46\x6f\x71','\x57\x52\x7a\x36\x64\x74\x5a\x63\x4c\x75\x4f','\x68\x6d\x6f\x55\x57\x50\x75\x37\x70\x65\x68\x63\x4d\x43\x6b\x58','\x6a\x43\x6f\x30\x64\x76\x46\x64\x50\x43\x6f\x48\x57\x36\x33\x64\x51\x71','\x61\x43\x6b\x75\x43\x53\x6f\x36\x78\x43\x6b\x45','\x77\x73\x70\x64\x4a\x38\x6b\x63\x67\x57','\x74\x66\x68\x63\x48\x38\x6b\x65\x74\x57','\x6b\x53\x6b\x56\x57\x51\x4a\x64\x4d\x58\x65','\x67\x32\x6c\x63\x4d\x43\x6f\x65\x73\x38\x6b\x32\x79\x72\x69\x38\x57\x51\x4f\x54\x74\x61\x4b','\x63\x6d\x6b\x71\x41\x38\x6f\x68\x57\x37\x4f','\x73\x75\x46\x63\x47\x43\x6b\x79','\x6f\x6d\x6f\x48\x61\x4c\x68\x64\x50\x6d\x6b\x45\x57\x36\x42\x64\x53\x57','\x46\x6d\x6f\x44\x41\x43\x6b\x47\x66\x53\x6b\x51\x57\x36\x64\x63\x4a\x47','\x6a\x38\x6f\x79\x74\x38\x6f\x45\x57\x37\x31\x6e','\x57\x35\x68\x63\x53\x43\x6f\x37','\x57\x50\x57\x65\x57\x50\x61\x54\x62\x33\x46\x63\x4f\x6d\x6f\x6a','\x64\x38\x6f\x2b\x57\x4f\x71','\x57\x34\x47\x76\x57\x4f\x4f\x4d','\x57\x51\x64\x63\x4f\x62\x4f','\x57\x50\x57\x45\x66\x61\x42\x64\x48\x38\x6b\x71\x57\x37\x6d\x50','\x6c\x38\x6f\x59\x57\x4f\x75\x36\x6a\x65\x68\x63\x4c\x43\x6b\x61','\x6c\x38\x6f\x6c\x76\x6d\x6f\x67','\x57\x4f\x7a\x50\x7a\x4e\x68\x64\x56\x5a\x70\x63\x4b\x6d\x6b\x32','\x57\x34\x53\x67\x57\x4f\x30\x54','\x57\x52\x66\x38\x57\x37\x33\x64\x49\x53\x6b\x62\x76\x57\x4e\x64\x50\x71','\x61\x68\x78\x63\x56\x48\x42\x64\x51\x31\x66\x72\x57\x4f\x53','\x57\x36\x4c\x44\x57\x4f\x2f\x64\x4e\x5a\x44\x56\x57\x52\x7a\x43','\x57\x36\x4c\x31\x57\x50\x5a\x64\x51\x57\x4f','\x57\x34\x38\x63\x57\x52\x34','\x78\x32\x75\x45\x7a\x43\x6b\x2b','\x6d\x43\x6b\x6b\x73\x53\x6f\x44','\x46\x53\x6b\x47\x57\x37\x6c\x64\x4f\x6d\x6f\x53\x69\x38\x6b\x4d\x79\x38\x6b\x37','\x57\x52\x31\x6f\x57\x4f\x69\x72\x57\x52\x4b','\x57\x35\x4f\x44\x57\x52\x5a\x63\x4e\x43\x6b\x4e\x6d\x71\x57','\x44\x75\x65\x34\x41\x43\x6b\x77\x57\x37\x58\x6b\x6c\x61','\x57\x50\x48\x70\x57\x4f\x69\x4c\x57\x50\x47','\x64\x61\x46\x63\x4f\x6d\x6f\x48\x57\x50\x2f\x63\x4a\x32\x57\x53','\x57\x50\x31\x64\x57\x50\x47\x68\x57\x4f\x79','\x65\x53\x6f\x4a\x57\x4f\x6d\x39\x46\x48\x57','\x63\x78\x4a\x64\x49\x4d\x62\x39\x71\x57\x35\x68','\x6a\x57\x4f\x34\x57\x37\x6a\x6e\x57\x35\x70\x63\x48\x58\x34','\x57\x4f\x42\x63\x53\x32\x30\x56\x64\x68\x4b\x58\x57\x34\x75','\x57\x4f\x4f\x4b\x57\x52\x78\x64\x53\x53\x6b\x34','\x57\x35\x4c\x66\x57\x36\x34\x39\x57\x51\x47','\x57\x36\x35\x67\x57\x4f\x4e\x64\x4b\x4a\x6d\x37\x57\x51\x62\x62','\x57\x4f\x39\x2f\x57\x4f\x68\x64\x4a\x6d\x6f\x47\x42\x53\x6f\x57\x65\x61','\x43\x66\x42\x64\x49\x38\x6f\x76\x57\x4f\x4f\x6e\x57\x51\x79\x35','\x61\x6d\x6b\x33\x57\x52\x6c\x64\x50\x73\x6d','\x76\x71\x62\x71\x57\x52\x4b\x56','\x78\x30\x78\x63\x4d\x61','\x57\x37\x66\x61\x57\x4f\x4e\x64\x4d\x5a\x43\x39','\x41\x30\x52\x64\x4e\x53\x6f\x65\x57\x4f\x61\x2b\x57\x50\x48\x32','\x79\x48\x38\x35\x57\x35\x39\x6c','\x57\x51\x5a\x64\x4f\x58\x62\x2f\x57\x34\x6c\x64\x55\x53\x6f\x38\x44\x61','\x57\x51\x31\x4a\x57\x34\x74\x64\x4b\x38\x6b\x2b','\x43\x32\x68\x63\x54\x38\x6b\x4c','\x57\x35\x6a\x61\x57\x37\x75\x34\x57\x50\x6d','\x65\x62\x74\x63\x4f\x43\x6b\x4b','\x64\x64\x33\x63\x52\x43\x6b\x70\x57\x51\x34','\x57\x36\x39\x6c\x57\x35\x53\x6a\x57\x4f\x4b','\x57\x34\x4b\x78\x57\x51\x56\x63\x49\x43\x6b\x6d','\x57\x50\x31\x47\x57\x4f\x6c\x64\x4d\x71','\x57\x4f\x44\x4a\x57\x50\x2f\x64\x4b\x43\x6f\x4b','\x57\x37\x47\x4f\x6c\x43\x6b\x64\x57\x52\x42\x63\x4a\x6d\x6f\x58\x57\x34\x43','\x57\x36\x72\x43\x57\x4f\x46\x64\x4a\x57','\x41\x78\x5a\x63\x56\x43\x6b\x58\x61\x4a\x79\x68\x78\x47','\x57\x35\x6e\x42\x57\x36\x43\x48\x57\x50\x65','\x6e\x61\x70\x63\x49\x38\x6b\x39\x75\x71','\x57\x52\x50\x69\x57\x4f\x57\x61\x57\x52\x4e\x63\x54\x63\x70\x63\x49\x47','\x57\x50\x50\x58\x57\x50\x5a\x64\x4a\x47','\x78\x6d\x6b\x54\x57\x4f\x5a\x63\x54\x67\x57\x51\x42\x38\x6f\x48','\x6b\x49\x70\x63\x49\x6d\x6b\x41\x57\x51\x71','\x66\x53\x6f\x59\x46\x53\x6f\x59\x57\x51\x39\x68\x43\x53\x6b\x46','\x57\x4f\x6e\x5a\x43\x6d\x6b\x34\x6a\x6d\x6b\x6f\x7a\x73\x61','\x76\x30\x78\x63\x52\x6d\x6b\x44\x78\x74\x46\x63\x53\x74\x71','\x6a\x6d\x6f\x57\x57\x52\x31\x4b\x57\x4f\x4b','\x41\x6d\x6b\x33\x57\x4f\x52\x63\x50\x32\x61\x4a\x68\x38\x6b\x49','\x77\x74\x37\x64\x48\x38\x6b\x45\x67\x38\x6f\x4a\x44\x5a\x75','\x45\x38\x6f\x36\x57\x4f\x6e\x51\x75\x43\x6b\x70\x57\x52\x44\x57','\x57\x37\x75\x64\x77\x68\x42\x64\x52\x47\x46\x63\x4a\x38\x6b\x33','\x45\x78\x4e\x63\x4f\x6d\x6b\x2f\x46\x57\x64\x64\x47\x31\x4f','\x6c\x53\x6b\x44\x77\x47','\x42\x43\x6f\x74\x57\x35\x69\x68\x79\x53\x6b\x7a\x57\x4f\x39\x48','\x67\x43\x6f\x36\x63\x4e\x4a\x63\x47\x38\x6b\x46\x57\x36\x57\x66','\x78\x53\x6f\x73\x57\x34\x69\x35\x43\x43\x6b\x6a\x57\x34\x62\x55','\x42\x38\x6f\x33\x57\x35\x4f\x48\x72\x71','\x57\x34\x47\x69\x57\x52\x4a\x63\x4f\x53\x6b\x36\x6e\x72\x5a\x64\x4f\x47','\x6a\x6d\x6b\x69\x75\x38\x6f\x43\x57\x35\x61\x55\x6d\x71','\x57\x36\x35\x42\x57\x50\x5a\x64\x4c\x74\x57\x4f','\x68\x53\x6b\x70\x7a\x38\x6f\x30\x76\x53\x6b\x6c\x57\x51\x48\x30','\x42\x72\x54\x31\x57\x51\x38\x4e','\x57\x51\x33\x63\x49\x31\x6d\x76\x70\x66\x61\x43\x57\x51\x79','\x57\x35\x2f\x64\x4b\x38\x6f\x33\x57\x34\x4e\x63\x53\x6d\x6b\x4e\x57\x36\x68\x64\x54\x47','\x77\x78\x46\x64\x48\x43\x6b\x45\x68\x38\x6f\x4c\x6f\x59\x71','\x57\x4f\x70\x63\x50\x4e\x61\x75\x63\x57','\x57\x52\x78\x63\x52\x64\x48\x63\x57\x51\x33\x64\x4e\x6d\x6f\x4d\x44\x71','\x57\x51\x48\x30\x57\x36\x56\x64\x4a\x53\x6b\x6c\x72\x47','\x46\x38\x6f\x41\x43\x6d\x6b\x37\x64\x71','\x57\x52\x6a\x47\x57\x50\x56\x64\x47\x53\x6f\x50\x7a\x53\x6f\x39\x42\x57','\x44\x38\x6f\x61\x66\x43\x6b\x61\x57\x4f\x4c\x38\x66\x38\x6f\x74\x72\x4e\x74\x63\x56\x63\x61','\x57\x37\x54\x62\x57\x34\x34\x55\x57\x52\x6c\x64\x54\x77\x5a\x64\x4b\x61','\x6e\x48\x52\x63\x47\x59\x68\x64\x4c\x77\x44\x56\x57\x51\x38','\x62\x6d\x6b\x76\x44\x53\x6f\x58\x74\x43\x6b\x69\x57\x51\x72\x48','\x46\x75\x4e\x64\x56\x6d\x6f\x6f\x57\x50\x57','\x68\x53\x6f\x43\x41\x53\x6f\x56\x57\x36\x47','\x62\x43\x6f\x53\x57\x4f\x6d\x58\x6c\x30\x42\x63\x4b\x38\x6b\x37','\x57\x50\x4f\x68\x66\x64\x74\x64\x4d\x71','\x57\x37\x72\x54\x57\x36\x69','\x79\x53\x6f\x52\x57\x52\x6e\x4e\x78\x43\x6b\x41','\x71\x6d\x6f\x59\x57\x50\x58\x36\x76\x61','\x65\x57\x6c\x63\x54\x6d\x6b\x67\x57\x51\x2f\x63\x47\x73\x75\x5a','\x61\x43\x6f\x5a\x57\x34\x68\x64\x56\x5a\x44\x32\x63\x53\x6b\x5a\x6e\x4e\x56\x63\x53\x38\x6b\x69\x46\x47','\x78\x31\x42\x63\x47\x38\x6b\x41\x75\x73\x56\x64\x52\x47','\x57\x36\x30\x7a\x57\x50\x64\x64\x54\x43\x6b\x72\x75\x38\x6b\x36\x57\x34\x57','\x6b\x6d\x6b\x33\x57\x51\x2f\x64\x54\x49\x78\x63\x54\x38\x6f\x43\x71\x71','\x43\x73\x69\x58\x73\x63\x30\x71\x74\x77\x6d','\x78\x76\x6c\x63\x4b\x43\x6b\x4d\x6c\x61','\x57\x34\x33\x64\x49\x59\x79\x5a\x57\x35\x47','\x68\x4a\x33\x64\x4e\x32\x62\x2f\x73\x61','\x41\x43\x6f\x6d\x76\x43\x6f\x79\x57\x36\x7a\x70\x42\x53\x6f\x41','\x57\x34\x33\x63\x50\x6d\x6f\x57\x57\x4f\x79\x2b','\x61\x74\x68\x64\x55\x5a\x33\x64\x4e\x68\x58\x57\x57\x51\x38','\x57\x34\x70\x64\x4c\x6d\x6f\x38\x57\x37\x53','\x57\x51\x70\x63\x4e\x61\x66\x4b\x57\x4f\x64\x64\x4f\x38\x6f\x37\x7a\x61','\x57\x35\x34\x49\x70\x43\x6f\x68\x57\x50\x57','\x75\x43\x6b\x43\x57\x4f\x4a\x63\x53\x32\x65\x51\x77\x38\x6b\x49','\x6a\x38\x6f\x41\x66\x33\x70\x63\x56\x71','\x61\x53\x6f\x58\x57\x4f\x50\x6b\x57\x52\x6c\x63\x4c\x57\x5a\x63\x55\x61','\x57\x35\x69\x67\x57\x50\x30\x56\x62\x68\x4f','\x64\x47\x52\x64\x4b\x4b\x6a\x76','\x57\x51\x58\x43\x57\x52\x4f\x4c\x57\x50\x47','\x74\x75\x4e\x63\x4d\x71','\x57\x35\x71\x56\x57\x4f\x70\x63\x4b\x38\x6b\x4e','\x69\x38\x6f\x39\x57\x4f\x33\x64\x48\x6d\x6f\x6d','\x57\x34\x47\x45\x57\x4f\x38\x4d','\x7a\x53\x6f\x59\x57\x36\x69\x51\x73\x6d\x6b\x2f\x57\x4f\x6a\x6a','\x57\x36\x68\x63\x55\x38\x6f\x36\x57\x4f\x30','\x44\x65\x78\x64\x4b\x38\x6f\x41\x57\x4f\x61\x5a\x57\x51\x65','\x57\x34\x52\x63\x4f\x53\x6f\x2b\x57\x50\x43\x2b\x44\x6d\x6b\x6a\x57\x50\x71','\x64\x33\x53\x44\x64\x53\x6b\x61','\x7a\x76\x74\x64\x4d\x53\x6f\x41\x57\x50\x79','\x57\x50\x79\x41\x57\x4f\x52\x64\x56\x43\x6b\x45\x75\x38\x6b\x33\x57\x34\x34','\x57\x51\x48\x47\x62\x63\x2f\x63\x4d\x76\x76\x52\x64\x57','\x6a\x4a\x74\x63\x4c\x53\x6b\x42\x57\x51\x47','\x62\x38\x6b\x58\x57\x52\x5a\x64\x54\x63\x70\x63\x4a\x43\x6b\x7a\x76\x57','\x64\x47\x4e\x63\x51\x53\x6b\x72\x57\x51\x70\x63\x4d\x72\x31\x33','\x42\x53\x6f\x53\x57\x34\x58\x6a\x42\x53\x6b\x53\x57\x50\x39\x55','\x57\x34\x33\x63\x54\x43\x6f\x2b\x57\x4f\x79\x34\x71\x57','\x6c\x53\x6f\x59\x57\x51\x33\x64\x4c\x43\x6f\x4e','\x57\x37\x2f\x64\x4c\x62\x34\x62\x57\x37\x53','\x71\x4a\x79\x74\x6b\x6d\x6f\x6b','\x6d\x53\x6b\x7a\x75\x43\x6f\x45','\x78\x4b\x78\x63\x56\x38\x6b\x45\x6a\x47','\x68\x38\x6b\x72\x57\x50\x42\x64\x50\x73\x43','\x57\x51\x31\x30\x67\x64\x75','\x57\x37\x74\x63\x4f\x43\x6b\x33\x57\x34\x7a\x34\x57\x4f\x76\x56\x57\x51\x34','\x67\x53\x6b\x53\x57\x52\x70\x63\x55\x64\x42\x63\x4f\x6d\x6b\x45\x72\x61','\x41\x65\x34\x32\x79\x6d\x6b\x4f\x57\x37\x54\x77\x6f\x71','\x68\x4a\x33\x64\x49\x4b\x66\x4f\x71\x72\x38\x63','\x6f\x53\x6b\x52\x78\x43\x6b\x77\x57\x50\x5a\x63\x48\x6d\x6f\x36\x41\x71','\x42\x4e\x4e\x63\x4f\x38\x6b\x4b\x44\x58\x42\x64\x4b\x30\x53','\x6b\x38\x6f\x2f\x57\x52\x70\x64\x4b\x53\x6f\x78\x68\x53\x6b\x2f\x76\x71','\x64\x38\x6f\x58\x68\x30\x4e\x63\x4d\x38\x6b\x42\x57\x37\x57','\x64\x6d\x6b\x4e\x76\x53\x6b\x61','\x57\x36\x5a\x64\x4b\x53\x6f\x4e\x57\x37\x46\x63\x4f\x38\x6b\x33\x57\x51\x37\x64\x55\x71','\x64\x48\x6c\x64\x48\x4d\x6a\x54','\x57\x37\x53\x34\x57\x51\x38\x77\x69\x31\x6c\x63\x4a\x53\x6b\x51','\x78\x6d\x6f\x75\x57\x35\x65\x78\x79\x61','\x69\x53\x6f\x42\x57\x51\x65\x52\x69\x47','\x57\x35\x5a\x64\x4b\x6d\x6f\x79\x57\x36\x46\x63\x4b\x61','\x6c\x59\x2f\x63\x51\x57\x37\x64\x50\x47','\x57\x51\x53\x70\x57\x50\x74\x64\x52\x38\x6b\x79','\x74\x77\x46\x64\x54\x43\x6f\x39\x57\x51\x4f\x6c','\x64\x57\x70\x63\x52\x71','\x72\x64\x68\x64\x49\x43\x6b\x78\x6c\x53\x6f\x4d\x6c\x49\x30','\x7a\x59\x76\x59\x57\x51\x57\x56','\x57\x52\x58\x30\x62\x49\x4a\x63\x4c\x71','\x67\x5a\x33\x64\x4a\x68\x54\x36\x77\x71','\x62\x48\x6c\x64\x49\x38\x6f\x64\x61\x68\x46\x63\x55\x75\x70\x63\x54\x74\x6e\x70\x57\x51\x37\x63\x48\x61','\x68\x38\x6f\x53\x57\x4f\x71\x51\x6a\x30\x74\x63\x51\x38\x6f\x2f','\x77\x62\x6d\x76\x70\x38\x6f\x6f\x57\x37\x30\x55\x57\x34\x38','\x77\x64\x42\x64\x47\x38\x6b\x76\x69\x43\x6f\x56\x69\x49\x6d','\x68\x53\x6f\x4b\x57\x50\x4b\x2f','\x74\x4c\x53\x30\x73\x53\x6b\x4c','\x73\x68\x4b\x50\x74\x43\x6b\x66','\x57\x37\x4e\x64\x50\x53\x6b\x54\x57\x35\x54\x52\x57\x4f\x6e\x55\x57\x51\x34','\x66\x6d\x6f\x6a\x57\x4f\x6d\x75\x6a\x61','\x57\x36\x47\x75\x57\x52\x4e\x63\x4c\x43\x6b\x75','\x62\x57\x46\x63\x54\x59\x4a\x64\x47\x57','\x6c\x38\x6b\x64\x43\x38\x6f\x72\x76\x47','\x45\x38\x6b\x62\x64\x43\x6b\x42\x57\x52\x38\x46\x71\x53\x6f\x68\x57\x34\x4a\x63\x47\x53\x6f\x6a\x62\x61','\x43\x66\x42\x64\x47\x38\x6f\x42','\x61\x71\x4a\x63\x54\x43\x6b\x4a\x57\x50\x64\x63\x48\x78\x30','\x57\x50\x50\x47\x71\x38\x6b\x51\x6b\x6d\x6b\x7a\x6f\x73\x61','\x6e\x48\x5a\x63\x4b\x53\x6b\x68\x57\x35\x31\x49\x57\x37\x30\x34\x57\x4f\x42\x63\x4c\x53\x6b\x7a\x57\x50\x70\x63\x4b\x47','\x72\x53\x6f\x69\x57\x34\x57\x6b','\x57\x52\x6a\x47\x63\x61\x74\x63\x47\x65\x31\x53\x71\x57','\x6f\x6d\x6f\x38\x6d\x65\x42\x64\x53\x38\x6b\x4f\x57\x36\x64\x64\x4f\x71','\x57\x35\x5a\x64\x53\x6d\x6f\x67\x57\x34\x37\x63\x54\x47','\x57\x50\x61\x5a\x6e\x72\x46\x64\x4d\x47','\x6c\x65\x62\x38\x57\x52\x4f','\x71\x73\x72\x46\x57\x4f\x72\x49\x74\x53\x6b\x30\x68\x61','\x78\x38\x6b\x66\x57\x4f\x56\x63\x4a\x4e\x75','\x7a\x53\x6f\x68\x45\x38\x6f\x51','\x66\x57\x46\x63\x54\x53\x6b\x54\x57\x50\x4b','\x57\x37\x7a\x70\x57\x35\x6d\x47\x57\x51\x6c\x64\x53\x67\x46\x64\x4b\x57','\x57\x36\x37\x64\x4a\x38\x6f\x47\x57\x35\x78\x63\x53\x57','\x57\x50\x31\x49\x57\x4f\x68\x64\x47\x38\x6f\x47\x46\x6d\x6f\x54','\x57\x51\x64\x63\x4f\x62\x72\x73\x57\x4f\x33\x64\x4f\x43\x6f\x30\x42\x47','\x57\x50\x74\x63\x48\x76\x6e\x5a\x57\x52\x4f\x4a\x44\x53\x6b\x76\x57\x4f\x4f\x38\x67\x6d\x6f\x6c\x57\x34\x53','\x7a\x62\x43\x45\x69\x6d\x6b\x68\x57\x37\x58\x38\x57\x35\x71','\x78\x38\x6f\x6c\x57\x34\x76\x67\x79\x6d\x6b\x73\x57\x34\x6e\x55','\x75\x61\x33\x64\x51\x43\x6b\x63\x64\x61','\x57\x34\x56\x63\x4f\x38\x6f\x36\x57\x35\x71\x52\x71\x53\x6b\x65\x57\x50\x75','\x64\x6d\x6b\x6c\x7a\x43\x6f\x58\x75\x43\x6b\x6a\x57\x51\x75','\x57\x51\x54\x75\x6c\x48\x78\x63\x54\x57','\x57\x4f\x4e\x63\x53\x62\x50\x43\x57\x52\x61','\x6a\x4c\x30\x58\x44\x6d\x6b\x45\x57\x36\x39\x72\x6f\x57','\x73\x4a\x30\x2f\x66\x38\x6f\x47','\x70\x58\x6c\x63\x50\x53\x6b\x47\x57\x50\x2f\x63\x48\x74\x71\x4a','\x57\x37\x4c\x34\x57\x34\x65\x35\x6a\x71','\x6a\x38\x6b\x2b\x75\x53\x6b\x41\x57\x4f\x56\x63\x56\x53\x6f\x39\x6a\x47','\x6f\x58\x70\x63\x50\x6d\x6b\x4c\x57\x50\x33\x63\x4c\x68\x57\x4b','\x76\x6d\x6f\x6e\x6c\x6d\x6b\x53\x63\x53\x6f\x41\x57\x4f\x6a\x37\x57\x36\x42\x63\x53\x6d\x6f\x49\x57\x35\x65','\x7a\x38\x6f\x62\x46\x6d\x6b\x58\x68\x6d\x6f\x4d\x57\x35\x4e\x64\x48\x57','\x57\x52\x75\x43\x6b\x64\x4a\x64\x56\x61','\x72\x5a\x39\x47\x57\x50\x4f\x67','\x57\x51\x76\x76\x75\x33\x56\x64\x4e\x48\x64\x63\x54\x43\x6b\x7a','\x43\x6d\x6b\x70\x61\x53\x6b\x41\x57\x52\x30\x45\x71\x38\x6f\x77\x57\x35\x56\x63\x55\x38\x6f\x76\x62\x71','\x74\x63\x33\x64\x54\x6d\x6f\x63\x61\x47','\x6a\x58\x4b\x4c\x57\x37\x66\x68\x57\x35\x2f\x63\x49\x61\x38','\x57\x34\x68\x64\x47\x38\x6f\x4e\x57\x37\x2f\x63\x50\x53\x6b\x52\x57\x35\x46\x64\x51\x61','\x65\x57\x2f\x63\x4f\x6d\x6b\x50\x57\x50\x70\x63\x4c\x77\x31\x47','\x6f\x5a\x74\x63\x52\x57','\x57\x35\x4e\x64\x48\x38\x6f\x33\x57\x37\x52\x63\x50\x43\x6b\x32','\x6e\x43\x6b\x55\x57\x4f\x37\x64\x50\x74\x34','\x57\x37\x62\x4a\x57\x37\x66\x6d\x70\x38\x6f\x2f\x75\x74\x79','\x44\x30\x33\x64\x4a\x43\x6f\x79\x57\x4f\x34\x4d\x57\x52\x61\x4b','\x67\x73\x68\x63\x48\x38\x6b\x44\x42\x47','\x57\x37\x5a\x63\x50\x43\x6b\x59','\x41\x57\x75\x59\x57\x37\x31\x76\x57\x35\x2f\x63\x49\x57\x71','\x61\x38\x6b\x53\x57\x52\x68\x64\x55\x57\x46\x63\x56\x6d\x6b\x76\x79\x57','\x75\x5a\x38\x50\x68\x53\x6f\x4c','\x74\x32\x64\x64\x56\x6d\x6f\x70\x57\x4f\x43','\x46\x61\x62\x31\x57\x52\x65\x4e\x71\x6d\x6b\x4f\x68\x61','\x57\x4f\x54\x38\x57\x4f\x74\x64\x52\x6d\x6f\x52','\x57\x52\x57\x6b\x57\x50\x56\x64\x54\x38\x6b\x50','\x57\x35\x43\x52\x57\x52\x2f\x63\x55\x43\x6b\x34','\x61\x73\x6c\x63\x4f\x6d\x6b\x46\x41\x61','\x65\x4d\x70\x63\x4d\x6d\x6f\x66\x72\x53\x6b\x2b\x7a\x62\x79\x6d\x57\x51\x34\x49\x7a\x48\x47','\x67\x43\x6f\x52\x65\x76\x4e\x63\x4b\x47','\x43\x73\x69\x35\x72\x47','\x57\x35\x34\x6f\x57\x52\x4a\x63\x4d\x6d\x6b\x48\x6f\x4a\x46\x64\x4f\x47','\x57\x50\x4c\x49\x57\x4f\x2f\x64\x47\x38\x6f\x47\x75\x6d\x6f\x39\x78\x57','\x57\x36\x65\x30\x6c\x38\x6f\x65\x57\x51\x70\x63\x4c\x57','\x67\x32\x6c\x64\x4a\x53\x6b\x49\x6c\x43\x6f\x2f\x61\x71\x6d','\x43\x71\x4c\x5a\x57\x52\x65\x4e\x46\x53\x6b\x4e\x75\x47','\x71\x5a\x64\x64\x4a\x53\x6b\x46\x64\x6d\x6f\x55\x6f\x73\x79','\x44\x30\x56\x64\x4d\x6d\x6f\x63','\x45\x62\x42\x64\x4f\x38\x6b\x31\x69\x43\x6f\x65\x67\x61\x38','\x57\x50\x4c\x2b\x57\x36\x5a\x64\x4d\x57','\x57\x34\x44\x50\x57\x36\x61\x76','\x6b\x43\x6f\x73\x57\x4f\x4f\x46\x64\x61','\x57\x51\x38\x65\x57\x50\x2f\x64\x4b\x53\x6b\x38','\x68\x43\x6f\x50\x57\x4f\x62\x42\x57\x51\x6d','\x43\x49\x4c\x64\x75\x6d\x6f\x64\x57\x36\x78\x64\x51\x38\x6b\x61\x6c\x67\x6d\x39\x57\x51\x75\x7a','\x57\x50\x57\x45\x66\x62\x70\x64\x4d\x53\x6b\x66\x57\x51\x79\x2b','\x64\x38\x6f\x54\x57\x50\x39\x66\x57\x51\x2f\x63\x4d\x57\x43','\x57\x36\x4e\x63\x54\x6d\x6b\x53\x57\x34\x57','\x76\x53\x6f\x4c\x75\x53\x6b\x46\x6f\x6d\x6b\x77\x57\x36\x6c\x64\x56\x47','\x6d\x53\x6b\x45\x45\x38\x6f\x38\x77\x53\x6b\x61\x57\x51\x72\x32','\x57\x4f\x6a\x2b\x57\x50\x52\x64\x4b\x53\x6f\x51\x79\x38\x6f\x64\x65\x61','\x44\x75\x65\x34\x41\x43\x6b\x73\x57\x36\x57\x46\x6b\x47','\x77\x53\x6f\x69\x57\x34\x43\x62\x7a\x6d\x6b\x6f','\x64\x32\x38\x47\x63\x53\x6b\x33','\x57\x51\x39\x47\x7a\x78\x5a\x64\x49\x57','\x57\x50\x6e\x42\x6c\x71\x74\x63\x4f\x67\x31\x6d\x79\x57','\x57\x34\x70\x64\x4c\x6d\x6f\x30\x57\x37\x78\x63\x50\x43\x6b\x6e\x57\x36\x56\x64\x52\x57','\x74\x57\x4a\x64\x47\x43\x6b\x43\x67\x43\x6f\x4f\x6a\x73\x47','\x6f\x4d\x38\x74\x66\x57','\x79\x75\x33\x63\x4c\x53\x6b\x70','\x57\x51\x76\x30\x57\x36\x46\x64\x4a\x43\x6b\x61\x73\x58\x37\x63\x50\x61','\x73\x6d\x6f\x68\x42\x38\x6b\x5a\x67\x53\x6b\x4a\x57\x50\x64\x64\x4a\x71','\x57\x4f\x44\x52\x43\x71','\x57\x50\x66\x43\x42\x6d\x6b\x30\x6c\x38\x6b\x6d\x41\x32\x6d','\x57\x37\x79\x67\x64\x58\x33\x63\x49\x75\x2f\x64\x4f\x43\x6b\x68\x7a\x31\x78\x64\x4b\x6d\x6b\x67\x6e\x57','\x63\x5a\x56\x63\x52\x57\x52\x64\x50\x76\x39\x47\x57\x34\x34','\x6f\x53\x6f\x6e\x73\x43\x6f\x63\x57\x36\x66\x70','\x57\x37\x39\x57\x57\x50\x37\x64\x49\x74\x61\x4a\x57\x52\x58\x71','\x75\x68\x42\x64\x51\x38\x6f\x31\x57\x51\x4f\x6e\x57\x4f\x30\x64','\x57\x50\x58\x4c\x44\x43\x6b\x54\x6b\x6d\x6b\x2f\x79\x32\x34','\x57\x35\x4f\x6f\x57\x51\x43','\x57\x52\x7a\x74\x78\x65\x68\x64\x4e\x47\x56\x63\x56\x6d\x6b\x72','\x57\x50\x42\x63\x4a\x71\x62\x71\x57\x50\x71','\x57\x37\x34\x46\x57\x50\x4b\x70\x64\x57','\x65\x5a\x4a\x63\x56\x53\x6b\x78\x45\x61','\x74\x65\x78\x64\x4a\x53\x6f\x31\x57\x52\x79','\x57\x4f\x6e\x53\x43\x6d\x6b\x54','\x6e\x33\x6d\x50\x65\x6d\x6b\x65\x57\x52\x33\x63\x53\x38\x6b\x30','\x57\x35\x52\x64\x53\x6d\x6f\x36\x57\x50\x4f\x36\x73\x43\x6b\x67\x57\x50\x34','\x76\x6d\x6f\x62\x57\x37\x43\x47\x72\x71','\x61\x73\x64\x63\x51\x6d\x6b\x77\x44\x6d\x6b\x4d\x57\x37\x6a\x46','\x57\x37\x37\x64\x4a\x63\x34\x70\x57\x37\x4b','\x57\x52\x70\x63\x54\x61\x76\x4a\x57\x50\x75','\x42\x58\x70\x64\x4a\x38\x6f\x52\x70\x38\x6f\x74\x62\x53\x6b\x35','\x57\x51\x64\x63\x53\x57\x66\x39\x57\x4f\x56\x64\x51\x53\x6f\x32','\x57\x37\x58\x41\x57\x34\x71\x2f\x57\x51\x74\x64\x54\x47','\x73\x4c\x74\x63\x4b\x53\x6b\x76\x78\x72\x68\x64\x51\x78\x53','\x57\x51\x44\x77\x57\x4f\x48\x64\x57\x52\x33\x63\x48\x74\x6c\x63\x4c\x61','\x68\x4b\x78\x63\x4e\x6d\x6b\x79\x78\x49\x46\x64\x52\x74\x71','\x75\x4b\x2f\x63\x4e\x53\x6b\x46\x74\x61','\x57\x35\x72\x53\x57\x36\x53\x32\x57\x52\x47','\x57\x4f\x6a\x32\x57\x4f\x46\x64\x4a\x6d\x6f\x47\x75\x6d\x6f\x2f\x78\x47','\x75\x6d\x6f\x38\x57\x50\x35\x54\x77\x38\x6b\x67\x57\x37\x39\x6d','\x44\x62\x30\x34\x57\x36\x58\x65','\x68\x53\x6f\x4b\x57\x50\x4b\x2f\x66\x31\x56\x63\x4e\x38\x6b\x34','\x74\x77\x57\x6a\x46\x53\x6b\x46','\x46\x38\x6f\x4e\x42\x38\x6b\x5a\x67\x53\x6b\x4a\x57\x37\x37\x64\x47\x71','\x6d\x38\x6f\x32\x63\x32\x4a\x63\x48\x61','\x57\x51\x31\x79\x75\x71','\x6c\x33\x61\x46\x62\x38\x6b\x63\x57\x52\x33\x63\x53\x53\x6b\x39','\x57\x51\x64\x63\x50\x30\x34\x32\x69\x47','\x57\x35\x71\x77\x63\x43\x6f\x62\x57\x4f\x38','\x57\x52\x78\x63\x53\x72\x35\x39','\x62\x49\x78\x63\x4a\x38\x6b\x54\x57\x4f\x65','\x57\x52\x31\x73\x57\x4f\x58\x72\x57\x36\x4e\x64\x4e\x71'];_0x3c9a=function(){return _0x150662;};return _0x3c9a();}function _0x3f3e(_0x4044e7,_0x2c043b){_0x4044e7=_0x4044e7-(-0x25*0x6f+-0x1aff+-0x2cda*-0x1);const _0x1be706=_0x3c9a();let _0x1e1b8d=_0x1be706[_0x4044e7];if(_0x3f3e['\x4a\x51\x63\x6e\x75\x4d']===undefined){var _0x40616d=function(_0x51af21){const _0x4ae047='\x61\x62\x63\x64\x65\x66\x67\x68\x69\x6a\x6b\x6c\x6d\x6e\x6f\x70\x71\x72\x73\x74\x75\x76\x77\x78\x79\x7a\x41\x42\x43\x44\x45\x46\x47\x48\x49\x4a\x4b\x4c\x4d\x4e\x4f\x50\x51\x52\x53\x54\x55\x56\x57\x58\x59\x5a\x30\x31\x32\x33\x34\x35\x36\x37\x38\x39\x2b\x2f\x3d';let _0x3c2ce3='',_0x458a26='',_0x1492b1=_0x3c2ce3+_0x40616d,_0x1311ad=(''+function(){return-0x1c2c+-0xe83+-0x1*-0x2aaf;})['\x69\x6e\x64\x65\x78\x4f\x66']('\x0a')!==-(-0x722*0x2+-0x3*0x44f+0x1*0x1b32);for(let _0x509c9b=-0x68e+0x10d6+-0xa48,_0x1cedf6,_0x106c9,_0x45639d=-0x43*0x4a+0x2428+-0x133*0xe;_0x106c9=_0x51af21['\x63\x68\x61\x72\x41\x74'](_0x45639d++);~_0x106c9&&(_0x1cedf6=_0x509c9b%(-0x1582*-0x1+-0xaae*0x3+0xa8c)?_0x1cedf6*(0x2551*-0x1+0x1164+-0x1*-0x142d)+_0x106c9:_0x106c9,_0x509c9b++%(0x4*-0x551+0xc55+0x1*0x8f3))?_0x3c2ce3+=_0x1311ad||_0x1492b1['\x63\x68\x61\x72\x43\x6f\x64\x65\x41\x74'](_0x45639d+(-0x11de+0x68b+0xb5d*0x1))-(0x20db+0x153c+-0x360d)!==0x4ea+-0x13*0x19c+0x19aa*0x1?String['\x66\x72\x6f\x6d\x43\x68\x61\x72\x43\x6f\x64\x65'](0x1094+-0x1*0x1929+0x994&_0x1cedf6>>(-(-0x247f+-0x1649+0x23*0x1ae)*_0x509c9b&0xcc+0x1346+-0x140c)):_0x509c9b:-0x8d+0x1d90+-0x1d03){_0x106c9=_0x4ae047['\x69\x6e\x64\x65\x78\x4f\x66'](_0x106c9);}for(let _0x3d2894=-0x3c2+0xd96+0x4ea*-0x2,_0x343f5e=_0x3c2ce3['\x6c\x65\x6e\x67\x74\x68'];_0x3d2894<_0x343f5e;_0x3d2894++){_0x458a26+='\x25'+('\x30\x30'+_0x3c2ce3['\x63\x68\x61\x72\x43\x6f\x64\x65\x41\x74'](_0x3d2894)['\x74\x6f\x53\x74\x72\x69\x6e\x67'](-0x143e+0x2616+-0x11c8))['\x73\x6c\x69\x63\x65'](-(-0xe1a+0x1c32*-0x1+0x2a4e));}return decodeURIComponent(_0x458a26);};const _0x53649e=function(_0x203e7e,_0x28a59a){let _0x22f208=[],_0x201b48=0xb2b+0x56+-0xb81,_0x298e15,_0x443fa3='';_0x203e7e=_0x40616d(_0x203e7e);let _0x4f8103;for(_0x4f8103=-0x1af2*0x1+-0x135c+-0x1*-0x2e4e;_0x4f8103<-0x446*0x3+-0x2f*-0xb+0xbcd*0x1;_0x4f8103++){_0x22f208[_0x4f8103]=_0x4f8103;}for(_0x4f8103=-0x17*-0xfd+-0x8c0+-0xdfb;_0x4f8103<-0x12*0x36+0x903+0x437*-0x1;_0x4f8103++){_0x201b48=(_0x201b48+_0x22f208[_0x4f8103]+_0x28a59a['\x63\x68\x61\x72\x43\x6f\x64\x65\x41\x74'](_0x4f8103%_0x28a59a['\x6c\x65\x6e\x67\x74\x68']))%(-0x7*0x26+0x25fb+-0xbfb*0x3),_0x298e15=_0x22f208[_0x4f8103],_0x22f208[_0x4f8103]=_0x22f208[_0x201b48],_0x22f208[_0x201b48]=_0x298e15;}_0x4f8103=0xf75+0x1b7*0x5+0x1808*-0x1,_0x201b48=-0x1*-0x1174+-0x1*-0x1c94+-0x2e08;for(let _0x58daa3=0xb37+0x1*-0x1dd+-0x95a;_0x58daa3<_0x203e7e['\x6c\x65\x6e\x67\x74\x68'];_0x58daa3++){_0x4f8103=(_0x4f8103+(-0x40*-0x90+-0x2c9*-0x5+-0x31ec))%(-0x9c9+0x1a7e*0x1+0x1*-0xfb5),_0x201b48=(_0x201b48+_0x22f208[_0x4f8103])%(0x147+0x1*-0x1737+0x16f0),_0x298e15=_0x22f208[_0x4f8103],_0x22f208[_0x4f8103]=_0x22f208[_0x201b48],_0x22f208[_0x201b48]=_0x298e15,_0x443fa3+=String['\x66\x72\x6f\x6d\x43\x68\x61\x72\x43\x6f\x64\x65'](_0x203e7e['\x63\x68\x61\x72\x43\x6f\x64\x65\x41\x74'](_0x58daa3)^_0x22f208[(_0x22f208[_0x4f8103]+_0x22f208[_0x201b48])%(0x4*-0x327+0x6*-0x17d+0x168a)]);}return _0x443fa3;};_0x3f3e['\x57\x47\x42\x7a\x4f\x77']=_0x53649e,_0x3f3e['\x71\x64\x56\x70\x65\x72']={},_0x3f3e['\x4a\x51\x63\x6e\x75\x4d']=!![];}const _0x445dfc=_0x1be706[-0x442*0x8+0x37d*0x1+0xa31*0x3],_0x5860ec=_0x4044e7+_0x445dfc,_0x77c84d=_0x3f3e['\x71\x64\x56\x70\x65\x72'][_0x5860ec];if(!_0x77c84d){if(_0x3f3e['\x70\x70\x45\x70\x61\x46']===undefined){const _0x366910=function(_0xf1c36e){this['\x62\x54\x66\x67\x4c\x44']=_0xf1c36e,this['\x44\x61\x47\x50\x68\x71']=[-0x2555+-0x1dfe*0x1+0x4354,-0xe6c+0x1fd7+0x7*-0x27d,-0x2f*-0x6d+0x799+0x6e7*-0x4],this['\x52\x43\x77\x49\x70\x76']=function(){return'\x6e\x65\x77\x53\x74\x61\x74\x65';},this['\x78\x58\x47\x75\x74\x42']='\x5c\x77\x2b\x20\x2a\x5c\x28\x5c\x29\x20\x2a\x7b\x5c\x77\x2b\x20\x2a',this['\x58\x4d\x71\x41\x6b\x48']='\x5b\x27\x7c\x22\x5d\x2e\x2b\x5b\x27\x7c\x22\x5d\x3b\x3f\x20\x2a\x7d';};_0x366910['\x70\x72\x6f\x74\x6f\x74\x79\x70\x65']['\x67\x6a\x6e\x70\x69\x6b']=function(){const _0x4ccd4d=new RegExp(this['\x78\x58\x47\x75\x74\x42']+this['\x58\x4d\x71\x41\x6b\x48']),_0x111f1d=_0x4ccd4d['\x74\x65\x73\x74'](this['\x52\x43\x77\x49\x70\x76']['\x74\x6f\x53\x74\x72\x69\x6e\x67']())?--this['\x44\x61\x47\x50\x68\x71'][-0x1581+-0x86a+0x1dec]:--this['\x44\x61\x47\x50\x68\x71'][0x1*-0x1155+-0x69c+0x17f1];return this['\x6e\x74\x4b\x79\x76\x6b'](_0x111f1d);},_0x366910['\x70\x72\x6f\x74\x6f\x74\x79\x70\x65']['\x6e\x74\x4b\x79\x76\x6b']=function(_0x16d17f){if(!Boolean(~_0x16d17f))return _0x16d17f;return this['\x45\x6f\x79\x68\x42\x48'](this['\x62\x54\x66\x67\x4c\x44']);},_0x366910['\x70\x72\x6f\x74\x6f\x74\x79\x70\x65']['\x45\x6f\x79\x68\x42\x48']=function(_0x4e1804){for(let _0x486f9d=-0x2068+0x26c*-0x7+0x315c,_0x2c534=this['\x44\x61\x47\x50\x68\x71']['\x6c\x65\x6e\x67\x74\x68'];_0x486f9d<_0x2c534;_0x486f9d++){this['\x44\x61\x47\x50\x68\x71']['\x70\x75\x73\x68'](Math['\x72\x6f\x75\x6e\x64'](Math['\x72\x61\x6e\x64\x6f\x6d']())),_0x2c534=this['\x44\x61\x47\x50\x68\x71']['\x6c\x65\x6e\x67\x74\x68'];}return _0x4e1804(this['\x44\x61\x47\x50\x68\x71'][-0x1e28+0x11cd+0xc5b]);},(''+function(){return-0x725+-0x1*0x1d6b+0x2490;})['\x69\x6e\x64\x65\x78\x4f\x66']('\x0a')===-(0x2*0x8bb+-0x133a+0x1c5)&&new _0x366910(_0x3f3e)['\x67\x6a\x6e\x70\x69\x6b'](),_0x3f3e['\x70\x70\x45\x70\x61\x46']=!![];}_0x1e1b8d=_0x3f3e['\x57\x47\x42\x7a\x4f\x77'](_0x1e1b8d,_0x2c043b),_0x3f3e['\x71\x64\x56\x70\x65\x72'][_0x5860ec]=_0x1e1b8d;}else _0x1e1b8d=_0x77c84d;return _0x1e1b8d;}const _0x107ed7=(function(){const _0x56cceb=_0x3f3e,_0x55d78d={};_0x55d78d['\x4c\x67\x67\x6a\x76']=_0x56cceb(0x2cb,'\x32\x50\x63\x66')+_0x56cceb(0x29f,'\x44\x41\x54\x47')+_0x56cceb(0x1e9,'\x4e\x31\x33\x65')+_0x56cceb(0x268,'\x70\x73\x30\x63')+_0x56cceb(0x271,'\x64\x66\x58\x29')+_0x56cceb(0x286,'\x61\x57\x53\x52')+_0x56cceb(0x2fb,'\x66\x5b\x37\x37'),_0x55d78d[_0x56cceb(0x20e,'\x70\x73\x30\x63')]=function(_0x1e0850,_0x594d58){return _0x1e0850===_0x594d58;},_0x55d78d[_0x56cceb(0x2fe,'\x35\x37\x62\x75')]=_0x56cceb(0x293,'\x4e\x51\x73\x56');const _0xa74c4a=_0x55d78d;let _0x1b8abb=!![];return function(_0x4be89a,_0x5c39da){const _0x4db5e0=_0x56cceb,_0x3e945c={};_0x3e945c['\x76\x53\x42\x79\x6e']=_0xa74c4a[_0x4db5e0(0x2e4,'\x6a\x48\x69\x57')];const _0x2f2f94=_0x3e945c;if(_0xa74c4a[_0x4db5e0(0x316,'\x76\x56\x51\x58')]('\x6d\x5a\x73\x6c\x62',_0xa74c4a[_0x4db5e0(0x23d,'\x61\x57\x53\x52')])){const _0x1b3086=_0x1b8abb?function(){const _0x43e4af=_0x4db5e0;if(_0x5c39da){const _0x52ec5a=_0x5c39da[_0x43e4af(0x2e5,'\x6d\x4f\x4e\x30')](_0x4be89a,arguments);return _0x5c39da=null,_0x52ec5a;}}:function(){};return _0x1b8abb=![],_0x1b3086;}else{this['\x6c\x6f\x67\x67\x65\x72'][_0x4db5e0(0x29e,'\x61\x57\x53\x52')]?.(_0x2f2f94['\x76\x53\x42\x79\x6e']);const _0x3ba91={};return _0x3ba91[_0x4db5e0(0x1d7,'\x79\x39\x47\x2a')]=!![],_0x3ba91[_0x4db5e0(0x1f3,'\x5b\x4a\x44\x6d')]=![],_0x3ba91;}};}()),_0x153007=_0x107ed7(this,function(){const _0x24ddd7=_0x3f3e,_0x33fa53={};_0x33fa53[_0x24ddd7(0x25f,'\x41\x54\x70\x69')]=_0x24ddd7(0x241,'\x61\x57\x53\x52')+_0x24ddd7(0x321,'\x4a\x43\x34\x23');const _0x4a3f87=_0x33fa53;return _0x153007[_0x24ddd7(0x212,'\x6a\x48\x69\x57')]()[_0x24ddd7(0x2ec,'\x76\x62\x6f\x51')](_0x4a3f87[_0x24ddd7(0x258,'\x79\x39\x47\x2a')])[_0x24ddd7(0x31e,'\x69\x58\x4a\x73')]()[_0x24ddd7(0x26c,'\x79\x51\x6c\x6f')+_0x24ddd7(0x275,'\x5e\x44\x6a\x62')](_0x153007)[_0x24ddd7(0x2cf,'\x35\x37\x62\x75')](_0x4a3f87[_0x24ddd7(0x217,'\x24\x5a\x41\x51')]);});_0x153007();'use strict';const _0x44842a=require(_0x15118e(0x21a,'\x77\x40\x65\x70'));function _0x568854(_0x4163cc={}){const _0x36638c=_0x15118e,_0x5d63f6={};_0x5d63f6[_0x36638c(0x28f,'\x64\x66\x58\x29')]=function(_0x15e26b,_0xbb9d8f){return _0x15e26b===_0xbb9d8f;},_0x5d63f6[_0x36638c(0x276,'\x38\x5e\x77\x6b')]=_0x36638c(0x2de,'\x31\x57\x29\x32'),_0x5d63f6[_0x36638c(0x315,'\x33\x67\x70\x6c')]=_0x36638c(0x285,'\x44\x6c\x40\x25')+'\x65',_0x5d63f6['\x71\x64\x63\x6b\x54']=_0x36638c(0x287,'\x6d\x4f\x4e\x30')+_0x36638c(0x223,'\x53\x40\x68\x42')+'\x6e\x61\x74\x75\x72\x65',_0x5d63f6[_0x36638c(0x274,'\x44\x6c\x40\x25')]=function(_0x76835,_0x3e32e2){return _0x76835===_0x3e32e2;},_0x5d63f6[_0x36638c(0x260,'\x32\x50\x63\x66')]=_0x36638c(0x1d5,'\x6d\x4f\x4e\x30')+_0x36638c(0x1fe,'\x4e\x31\x33\x65')+_0x36638c(0x203,'\x72\x74\x53\x66'),_0x5d63f6[_0x36638c(0x254,'\x6d\x69\x37\x74')]=function(_0x3f3251,_0x49b683){return _0x3f3251!==_0x49b683;};const _0x9f10e=_0x5d63f6,_0x45d91e={};for(const _0x38f8c6 of Object['\x6b\x65\x79\x73'](_0x4163cc)[_0x36638c(0x1ea,'\x6d\x4f\x4e\x30')]()){if(_0x9f10e['\x6b\x76\x4d\x71\x50'](_0x36638c(0x259,'\x43\x59\x6b\x30'),_0x9f10e[_0x36638c(0x22a,'\x6b\x4a\x73\x73')]))_0xa94d15++;else{if(_0x9f10e[_0x36638c(0x28f,'\x64\x66\x58\x29')](_0x38f8c6,_0x9f10e[_0x36638c(0x2da,'\x35\x37\x62\x75')])||_0x9f10e[_0x36638c(0x2ce,'\x6e\x79\x67\x58')](_0x38f8c6,_0x9f10e[_0x36638c(0x1de,'\x66\x25\x6f\x44')])||_0x9f10e['\x74\x5a\x72\x57\x58'](_0x38f8c6,_0x9f10e[_0x36638c(0x243,'\x41\x54\x70\x69')]))continue;if(_0x9f10e[_0x36638c(0x302,'\x67\x57\x67\x35')](_0x38f8c6,_0x36638c(0x2b5,'\x67\x57\x67\x35')+_0x36638c(0x2c5,'\x4a\x64\x72\x6d')))continue;const _0x19ac9f=_0x4163cc[_0x38f8c6];if(_0x9f10e[_0x36638c(0x216,'\x6e\x79\x67\x58')](_0x19ac9f,undefined))_0x45d91e[_0x38f8c6]=_0x19ac9f;}}return JSON[_0x36638c(0x2b2,'\x76\x56\x51\x58')+'\x79'](_0x45d91e);}function _0x1b7bf2(_0x1da942={},_0x5c1d2b=process.env){const _0x415bae=_0x15118e,_0x1f5294={'\x56\x75\x6f\x46\x44':'\x74\x72\x61\x63\x65\x5f\x70\x72'+_0x415bae(0x20a,'\x72\x74\x53\x66')+_0x415bae(0x2fa,'\x31\x57\x29\x32')+_0x415bae(0x234,'\x31\x57\x29\x32'),'\x70\x63\x66\x46\x59':_0x415bae(0x26a,'\x70\x73\x30\x63'),'\x67\x42\x51\x4e\x4d':function(_0x53e316,_0x41c6f3){return _0x53e316(_0x41c6f3);},'\x61\x6e\x71\x7a\x75':_0x415bae(0x22d,'\x39\x6e\x54\x28'),'\x52\x59\x51\x73\x6a':_0x415bae(0x324,'\x25\x46\x4f\x68'),'\x71\x78\x63\x5a\x6f':_0x415bae(0x27f,'\x53\x40\x68\x42'),'\x4e\x51\x76\x4a\x72':function(_0x2f3337,_0x340f93){return _0x2f3337===_0x340f93;},'\x5a\x48\x42\x58\x4d':'\x4f\x67\x5a\x58\x50'},_0x434acf=_0x1f5294['\x67\x42\x51\x4e\x4d'](String,_0x5c1d2b[_0x415bae(0x29a,'\x76\x74\x78\x29')+_0x415bae(0x1eb,'\x4e\x31\x33\x65')+'\x46\x49\x47\x5f\x53\x49\x47\x4e'+_0x415bae(0x1fc,'\x23\x58\x72\x35')+_0x415bae(0x305,'\x6d\x4f\x4e\x30')]||_0x5c1d2b[_0x415bae(0x1f5,'\x25\x46\x4f\x68')+_0x415bae(0x2be,'\x33\x67\x70\x6c')+_0x415bae(0x247,'\x77\x43\x29\x37')+_0x415bae(0x2a9,'\x41\x54\x70\x69')+_0x415bae(0x2ff,'\x70\x73\x30\x63')+_0x415bae(0x290,'\x76\x74\x78\x29')]||'')[_0x415bae(0x1e3,'\x26\x45\x25\x26')](),_0x1e786f=_0x1f5294[_0x415bae(0x22c,'\x4e\x51\x73\x56')](String,_0x1da942[_0x415bae(0x27b,'\x38\x5e\x77\x6b')+'\x65']||_0x1da942[_0x415bae(0x21b,'\x41\x54\x70\x69')+_0x415bae(0x2f6,'\x38\x5e\x77\x6b')+_0x415bae(0x266,'\x4f\x35\x51\x36')]||'')[_0x415bae(0x318,'\x6d\x4f\x4e\x30')]();if(!_0x434acf||!_0x1e786f)return![];try{return _0x44842a[_0x415bae(0x30a,'\x35\x37\x62\x75')](_0x1f5294[_0x415bae(0x1e0,'\x4a\x63\x4e\x71')],Buffer[_0x415bae(0x257,'\x4a\x64\x72\x6d')](_0x568854(_0x1da942),_0x1f5294[_0x415bae(0x301,'\x53\x40\x68\x42')]),_0x434acf,Buffer[_0x415bae(0x26e,'\x4f\x35\x51\x36')](_0x1e786f,_0x1f5294[_0x415bae(0x2cd,'\x76\x74\x78\x29')]));}catch{if(_0x1f5294[_0x415bae(0x311,'\x38\x5e\x77\x6b')](_0x1f5294['\x5a\x48\x42\x58\x4d'],'\x75\x55\x70\x77\x69'))this[_0x415bae(0x230,'\x26\x45\x25\x26')][_0x415bae(0x2f7,'\x35\x37\x62\x75')](_0x1f5294[_0x415bae(0x27c,'\x39\x6e\x54\x28')],_0x231caa?_0x1f5294[_0x415bae(0x294,'\x77\x40\x65\x70')]:_0x415bae(0x309,'\x23\x58\x72\x35'));else return![];}}class _0x4e0839{constructor({store:_0x4cb2c3,logger:_0x177eb5}={}){const _0x2130fd=_0x15118e,_0x4a6496={};_0x4a6496[_0x2130fd(0x1d6,'\x4a\x63\x4e\x71')]=function(_0x42d7a5,_0x2ce726){return _0x42d7a5||_0x2ce726;};const _0x2693be=_0x4a6496;this['\x73\x74\x6f\x72\x65']=_0x4cb2c3,this[_0x2130fd(0x1e6,'\x6b\x4a\x73\x73')]=_0x2693be[_0x2130fd(0x2c0,'\x6d\x4f\x4e\x30')](_0x177eb5,console);}[_0x15118e(0x24f,'\x69\x58\x4a\x73')](_0x1fb3a6){const _0x20c8a6=_0x15118e,_0x2be19b={};_0x2be19b[_0x20c8a6(0x1ef,'\x66\x25\x6f\x44')]=_0x20c8a6(0x202,'\x25\x46\x4f\x68')+_0x20c8a6(0x2ea,'\x4e\x51\x73\x56')+_0x20c8a6(0x2c7,'\x4e\x51\x73\x56')+_0x20c8a6(0x2d0,'\x4f\x35\x51\x36')+_0x20c8a6(0x312,'\x79\x39\x47\x2a')+_0x20c8a6(0x1f2,'\x79\x51\x6c\x6f')+_0x20c8a6(0x1d4,'\x43\x59\x6b\x30')+_0x20c8a6(0x272,'\x33\x67\x70\x6c')+_0x20c8a6(0x281,'\x4a\x43\x34\x23')+_0x20c8a6(0x239,'\x64\x4f\x65\x4c')+_0x20c8a6(0x21c,'\x39\x6e\x54\x28')+_0x20c8a6(0x299,'\x44\x6c\x40\x25'),_0x2be19b['\x65\x76\x6e\x41\x6a']=_0x20c8a6(0x2fd,'\x67\x57\x67\x35')+'\x6f\x6e\x74\x72\x6f\x6c\x5d\x20'+'\x69\x67\x6e\x6f\x72\x65\x64\x20'+_0x20c8a6(0x23c,'\x64\x66\x58\x29')+_0x20c8a6(0x22f,'\x6a\x48\x69\x57')+_0x20c8a6(0x32b,'\x44\x4a\x57\x37')+_0x20c8a6(0x28e,'\x24\x5a\x41\x51')+_0x20c8a6(0x25c,'\x69\x58\x4a\x73')+_0x20c8a6(0x30f,'\x53\x40\x68\x42'),_0x2be19b[_0x20c8a6(0x1df,'\x5e\x44\x6a\x62')]=function(_0x4b19c7,_0x4cb5fd){return _0x4b19c7===_0x4cb5fd;},_0x2be19b[_0x20c8a6(0x33e,'\x6d\x69\x37\x74')]=function(_0x4d1cf4,_0x158409){return _0x4d1cf4===_0x158409;},_0x2be19b['\x42\x6d\x59\x75\x67']=function(_0x176f01,_0x22364b){return _0x176f01!==_0x22364b;},_0x2be19b['\x70\x7a\x53\x68\x66']=_0x20c8a6(0x2ab,'\x43\x40\x70\x54')+_0x20c8a6(0x30c,'\x53\x40\x68\x42')+_0x20c8a6(0x326,'\x77\x40\x65\x70')+_0x20c8a6(0x21d,'\x41\x54\x70\x69')+_0x20c8a6(0x1d0,'\x49\x58\x79\x56')+_0x20c8a6(0x1dc,'\x64\x4f\x65\x4c')+_0x20c8a6(0x319,'\x49\x58\x79\x56'),_0x2be19b[_0x20c8a6(0x2c6,'\x4a\x64\x72\x6d')]=function(_0x1da5ca,_0x3623bd){return _0x1da5ca===_0x3623bd;},_0x2be19b[_0x20c8a6(0x327,'\x67\x57\x67\x35')]=function(_0x1fa9d6,_0x368ad9){return _0x1fa9d6===_0x368ad9;},_0x2be19b[_0x20c8a6(0x2b7,'\x58\x70\x72\x4f')]=_0x20c8a6(0x207,'\x4f\x35\x51\x36'),_0x2be19b[_0x20c8a6(0x314,'\x5e\x44\x6a\x62')]=function(_0x5707a2,_0xed2485){return _0x5707a2&&_0xed2485;},_0x2be19b[_0x20c8a6(0x2ae,'\x43\x40\x70\x54')]=_0x20c8a6(0x32d,'\x4e\x31\x33\x65'),_0x2be19b[_0x20c8a6(0x295,'\x5e\x44\x6a\x62')]=_0x20c8a6(0x334,'\x49\x58\x79\x56')+_0x20c8a6(0x28c,'\x6d\x4f\x4e\x30')+_0x20c8a6(0x2b4,'\x58\x70\x72\x4f')+_0x20c8a6(0x2c2,'\x53\x40\x68\x42')+_0x20c8a6(0x33f,'\x4a\x43\x34\x23')+_0x20c8a6(0x251,'\x5e\x44\x6a\x62')+_0x20c8a6(0x2b6,'\x4e\x31\x33\x65')+_0x20c8a6(0x2ca,'\x66\x25\x6f\x44')+_0x20c8a6(0x2a2,'\x72\x74\x53\x66')+_0x20c8a6(0x339,'\x25\x46\x4f\x68')+_0x20c8a6(0x325,'\x49\x58\x79\x56'),_0x2be19b[_0x20c8a6(0x1da,'\x44\x4a\x57\x37')]=_0x20c8a6(0x2e3,'\x76\x62\x6f\x51')+_0x20c8a6(0x228,'\x6a\x48\x69\x57')+'\x5f\x65\x6e\x61\x62\x6c\x65\x64',_0x2be19b[_0x20c8a6(0x24c,'\x43\x59\x6b\x30')]=_0x20c8a6(0x304,'\x66\x25\x6f\x44'),_0x2be19b[_0x20c8a6(0x331,'\x24\x5a\x41\x51')]='\x62\x6f\x6f\x6c\x65\x61\x6e',_0x2be19b['\x66\x6c\x6a\x4c\x6e']=_0x20c8a6(0x29c,'\x4a\x63\x4e\x71'),_0x2be19b[_0x20c8a6(0x237,'\x32\x50\x63\x66')]='\x54\x45\x78\x41\x7a',_0x2be19b[_0x20c8a6(0x24a,'\x70\x73\x30\x63')]=_0x20c8a6(0x29d,'\x39\x6e\x54\x28')+_0x20c8a6(0x220,'\x61\x57\x53\x52')+_0x20c8a6(0x218,'\x6d\x69\x37\x74')+_0x20c8a6(0x1d2,'\x67\x57\x67\x35'),_0x2be19b[_0x20c8a6(0x33a,'\x79\x51\x6c\x6f')]=function(_0x32baab,_0x1f8d07){return _0x32baab===_0x1f8d07;},_0x2be19b['\x61\x7a\x44\x55\x79']=_0x20c8a6(0x2d7,'\x66\x5b\x37\x37'),_0x2be19b[_0x20c8a6(0x2ef,'\x44\x4a\x57\x37')]=_0x20c8a6(0x289,'\x64\x4f\x65\x4c'),_0x2be19b[_0x20c8a6(0x29b,'\x77\x40\x65\x70')]=_0x20c8a6(0x2e9,'\x32\x50\x63\x66')+_0x20c8a6(0x2d6,'\x44\x41\x54\x47')+_0x20c8a6(0x1ec,'\x64\x66\x58\x29'),_0x2be19b[_0x20c8a6(0x2db,'\x39\x6e\x54\x28')]=function(_0x45cb0a,_0x34ef00){return _0x45cb0a&&_0x34ef00;},_0x2be19b[_0x20c8a6(0x2ed,'\x31\x57\x29\x32')]='\x58\x41\x43\x41\x6b',_0x2be19b[_0x20c8a6(0x330,'\x23\x58\x72\x35')]=function(_0x44f690,_0x242b2e){return _0x44f690===_0x242b2e;},_0x2be19b[_0x20c8a6(0x20d,'\x24\x5a\x41\x51')]='\x72\x75\x42\x47\x54',_0x2be19b[_0x20c8a6(0x1d3,'\x32\x50\x63\x66')]=_0x20c8a6(0x210,'\x6d\x4f\x4e\x30'),_0x2be19b[_0x20c8a6(0x300,'\x43\x40\x70\x54')]=_0x20c8a6(0x1e5,'\x61\x57\x53\x52')+_0x20c8a6(0x2d8,'\x5b\x4a\x44\x6d')+_0x20c8a6(0x337,'\x49\x58\x79\x56')+_0x20c8a6(0x1d1,'\x33\x67\x70\x6c'),_0x2be19b[_0x20c8a6(0x2f1,'\x76\x74\x78\x29')]=function(_0x21eb4f,_0x257d2b){return _0x21eb4f+_0x257d2b;},_0x2be19b[_0x20c8a6(0x1fb,'\x77\x43\x29\x37')]=_0x20c8a6(0x2e6,'\x66\x25\x6f\x44')+_0x20c8a6(0x30c,'\x53\x40\x68\x42')+_0x20c8a6(0x273,'\x44\x6c\x40\x25')+_0x20c8a6(0x25b,'\x53\x40\x68\x42')+'\x20',_0x2be19b[_0x20c8a6(0x2c1,'\x4f\x35\x51\x36')]=_0x20c8a6(0x2bd,'\x77\x40\x65\x70');const _0x125b90=_0x2be19b,_0x1723ec=_0x1fb3a6&&_0x1fb3a6[_0x20c8a6(0x2e2,'\x6d\x4f\x4e\x30')]?_0x1fb3a6[_0x20c8a6(0x23b,'\x4a\x63\x4e\x71')]:_0x1fb3a6,_0x2d4e6d=_0x1723ec&&(_0x1723ec[_0x20c8a6(0x242,'\x55\x4c\x74\x69')]??_0x1723ec[_0x20c8a6(0x336,'\x38\x4b\x5d\x31')+_0x20c8a6(0x1d8,'\x4a\x43\x34\x23')+'\x5f\x65\x6e\x61\x62\x6c\x65\x64']??_0x1723ec[_0x20c8a6(0x24b,'\x39\x6e\x54\x28')+_0x20c8a6(0x33c,'\x77\x43\x29\x37')+_0x20c8a6(0x1e4,'\x5e\x44\x6a\x62')+_0x20c8a6(0x2b9,'\x64\x66\x58\x29')]);if(_0x125b90['\x42\x6d\x59\x75\x67'](typeof _0x2d4e6d,_0x20c8a6(0x252,'\x53\x40\x68\x42'))){this['\x6c\x6f\x67\x67\x65\x72'][_0x20c8a6(0x270,'\x70\x73\x30\x63')]?.(_0x125b90['\x70\x7a\x53\x68\x66']);const _0xd2707f={};return _0xd2707f[_0x20c8a6(0x26b,'\x24\x5a\x41\x51')]=!![],_0xd2707f[_0x20c8a6(0x2c9,'\x41\x54\x70\x69')]=![],_0xd2707f;}let _0x2a77fb=_0x1723ec[_0x20c8a6(0x2a7,'\x4a\x64\x72\x6d')+_0x20c8a6(0x238,'\x43\x59\x6b\x30')+_0x20c8a6(0x1f6,'\x76\x56\x51\x58')]??_0x1723ec['\x74\x72\x61\x63\x65\x5f\x70\x72'+_0x20c8a6(0x1e8,'\x64\x4f\x65\x4c')+_0x20c8a6(0x215,'\x4a\x63\x4e\x71')+_0x20c8a6(0x2d9,'\x70\x73\x30\x63')];const _0x630c65=_0x1b7bf2(_0x1723ec),_0x3f4dd9=_0x125b90[_0x20c8a6(0x303,'\x33\x67\x70\x6c')](_0x2d4e6d,!![]),_0x2c9e20=_0x125b90[_0x20c8a6(0x2ee,'\x6e\x79\x67\x58')](_0x2a77fb,!![]),_0x50f877=_0x125b90['\x6c\x46\x73\x48\x76'](typeof _0x1723ec[_0x20c8a6(0x2ad,'\x43\x40\x70\x54')+_0x20c8a6(0x231,'\x26\x45\x25\x26')],_0x125b90[_0x20c8a6(0x283,'\x66\x25\x6f\x44')])&&_0x1723ec['\x68\x75\x62\x5f\x70\x75\x62\x6c'+_0x20c8a6(0x245,'\x38\x4b\x5d\x31')][_0x20c8a6(0x23a,'\x79\x39\x47\x2a')]();if(_0x125b90[_0x20c8a6(0x27e,'\x39\x6e\x54\x28')](!_0x630c65,_0x3f4dd9)){if(_0x125b90[_0x20c8a6(0x226,'\x66\x5b\x37\x37')](_0x125b90[_0x20c8a6(0x33b,'\x64\x4f\x65\x4c')],_0x125b90[_0x20c8a6(0x1ee,'\x53\x40\x68\x42')])){this[_0x20c8a6(0x25a,'\x23\x58\x72\x35')][_0x20c8a6(0x270,'\x70\x73\x30\x63')]?.(_0x20c8a6(0x2a5,'\x44\x41\x54\x47')+_0x20c8a6(0x206,'\x33\x67\x70\x6c')+_0x20c8a6(0x20c,'\x77\x43\x29\x37')+_0x20c8a6(0x332,'\x38\x5e\x77\x6b')+_0x20c8a6(0x280,'\x35\x37\x62\x75')+_0x20c8a6(0x30d,'\x44\x4a\x57\x37')+_0x20c8a6(0x27d,'\x49\x58\x79\x56')+_0x20c8a6(0x213,'\x76\x62\x6f\x51')+'\x20\x63\x6f\x6c\x6c\x65\x63\x74'+_0x20c8a6(0x2f5,'\x32\x50\x63\x66')+_0x20c8a6(0x32c,'\x43\x40\x70\x54')+_0x20c8a6(0x1ff,'\x6a\x48\x69\x57'));const _0x55c751={};return _0x55c751['\x61\x63\x6b']=!![],_0x55c751['\x61\x70\x70\x6c\x69\x65\x64']=![],_0x55c751;}else{this[_0x20c8a6(0x1f9,'\x43\x40\x70\x54')]['\x77\x61\x72\x6e']?.(_0x125b90[_0x20c8a6(0x23f,'\x39\x6e\x54\x28')]);const _0x3082a5={};return _0x3082a5[_0x20c8a6(0x269,'\x5b\x4a\x44\x6d')]=!![],_0x3082a5[_0x20c8a6(0x2b0,'\x55\x4c\x74\x69')]=![],_0x3082a5;}}_0x125b90[_0x20c8a6(0x2d5,'\x6b\x4a\x73\x73')](!_0x630c65,_0x2c9e20)&&(this[_0x20c8a6(0x25d,'\x76\x56\x51\x58')][_0x20c8a6(0x240,'\x77\x40\x65\x70')]?.(_0x125b90['\x72\x7a\x67\x78\x42']),_0x2a77fb=![]);this[_0x20c8a6(0x20f,'\x4a\x63\x4e\x71')][_0x20c8a6(0x2f7,'\x35\x37\x62\x75')](_0x125b90['\x68\x43\x52\x47\x42'],_0x2d4e6d?_0x20c8a6(0x1f4,'\x79\x39\x47\x2a'):_0x125b90[_0x20c8a6(0x2dd,'\x5e\x44\x6a\x62')]);_0x125b90[_0x20c8a6(0x233,'\x39\x6e\x54\x28')](typeof _0x2a77fb,_0x125b90[_0x20c8a6(0x310,'\x38\x5e\x77\x6b')])&&(_0x125b90[_0x20c8a6(0x1dd,'\x61\x57\x53\x52')]===_0x125b90['\x7a\x65\x41\x52\x56']?this[_0x20c8a6(0x28b,'\x44\x6c\x40\x25')][_0x20c8a6(0x2f0,'\x55\x4c\x74\x69')]?.(_0x20c8a6(0x221,'\x4a\x64\x72\x6d')+_0x20c8a6(0x265,'\x25\x46\x4f\x68')+_0x20c8a6(0x2f4,'\x79\x39\x47\x2a')+'\x72\x75\x6e\x74\x69\x6d\x65\x20'+_0x20c8a6(0x31d,'\x23\x58\x72\x35')+_0x20c8a6(0x31a,'\x72\x74\x53\x66')+_0x20c8a6(0x298,'\x6b\x4a\x73\x73')+_0x20c8a6(0x2d2,'\x33\x67\x70\x6c')+_0x20c8a6(0x250,'\x39\x6e\x54\x28')+_0x20c8a6(0x24e,'\x44\x4a\x57\x37')+_0x20c8a6(0x26f,'\x77\x43\x29\x37')+_0x20c8a6(0x2a1,'\x4f\x35\x51\x36')+_0x20c8a6(0x1f8,'\x38\x5e\x77\x6b')+_0x20c8a6(0x30e,'\x4e\x31\x33\x65')+_0x20c8a6(0x2bb,'\x61\x57\x53\x52')+_0x20c8a6(0x2aa,'\x55\x4c\x74\x69')):this[_0x20c8a6(0x1e2,'\x66\x5b\x37\x37')][_0x20c8a6(0x2ac,'\x66\x5b\x37\x37')](_0x125b90[_0x20c8a6(0x2f2,'\x32\x50\x63\x66')],_0x2a77fb?_0x20c8a6(0x292,'\x49\x58\x79\x56'):_0x125b90[_0x20c8a6(0x320,'\x79\x51\x6c\x6f')]));const _0x34663d=_0x125b90[_0x20c8a6(0x2a4,'\x5b\x4a\x44\x6d')](typeof _0x1723ec[_0x20c8a6(0x264,'\x69\x58\x4a\x73')+_0x20c8a6(0x204,'\x72\x74\x53\x66')+_0x20c8a6(0x2e1,'\x76\x62\x6f\x51')],_0x20c8a6(0x2b1,'\x44\x6c\x40\x25'))&&_0x1723ec[_0x20c8a6(0x1fd,'\x67\x57\x67\x35')+_0x20c8a6(0x256,'\x38\x4b\x5d\x31')+_0x20c8a6(0x2fc,'\x38\x4b\x5d\x31')][_0x20c8a6(0x277,'\x55\x4c\x74\x69')]();if(_0x630c65&&_0x34663d&&_0x1723ec[_0x20c8a6(0x2cc,'\x26\x45\x25\x26')+_0x20c8a6(0x2d4,'\x24\x5a\x41\x51')+_0x20c8a6(0x1ed,'\x43\x59\x6b\x30')][_0x20c8a6(0x2bf,'\x76\x56\x51\x58')](_0x20c8a6(0x2e0,'\x43\x40\x70\x54')+'\x45\x59'))_0x125b90[_0x20c8a6(0x335,'\x43\x59\x6b\x30')]!==_0x125b90[_0x20c8a6(0x308,'\x64\x4f\x65\x4c')]?this[_0x20c8a6(0x1f0,'\x5b\x4a\x44\x6d')][_0x20c8a6(0x244,'\x38\x5e\x77\x6b')](_0x125b90[_0x20c8a6(0x1fa,'\x6a\x48\x69\x57')],_0x1723ec['\x74\x72\x61\x63\x65\x5f\x68\x75'+_0x20c8a6(0x208,'\x44\x6c\x40\x25')+_0x20c8a6(0x200,'\x41\x54\x70\x69')][_0x20c8a6(0x2d3,'\x67\x57\x67\x35')]()):this[_0x20c8a6(0x28b,'\x44\x6c\x40\x25')][_0x20c8a6(0x263,'\x41\x54\x70\x69')]?.(_0x125b90[_0x20c8a6(0x28d,'\x4a\x43\x34\x23')]);else{if(_0x125b90[_0x20c8a6(0x214,'\x43\x40\x70\x54')](!_0x630c65,_0x34663d)){if(_0x125b90['\x64\x61\x67\x74\x59']!=='\x58\x41\x43\x41\x6b'){const _0x2c3828=this['\x70\x72\x6f\x63\x65\x73\x73'](_0x235dc4),_0x4783c7=_0x125b90[_0x20c8a6(0x323,'\x44\x41\x54\x47')](_0x2c3828,!![])||_0x2c3828&&_0x2c3828['\x61\x63\x6b']===!![],_0x67f690=_0x2c3828===!![]||_0x2c3828&&_0x125b90[_0x20c8a6(0x2e8,'\x49\x58\x79\x56')](_0x2c3828[_0x20c8a6(0x219,'\x24\x5a\x41\x51')],!![]);_0x4783c7&&this[_0x20c8a6(0x279,'\x39\x6e\x54\x28')]['\x61\x63\x6b'](_0x30a982['\x69\x64']),_0x67f690&&_0x4736ca++;}else this['\x6c\x6f\x67\x67\x65\x72']['\x77\x61\x72\x6e']?.(_0x125b90[_0x20c8a6(0x2c3,'\x79\x51\x6c\x6f')]);}}_0x50f877&&(_0x125b90[_0x20c8a6(0x333,'\x44\x4a\x57\x37')](_0x125b90['\x57\x4e\x71\x41\x76'],_0x125b90[_0x20c8a6(0x284,'\x77\x40\x65\x70')])?this[_0x20c8a6(0x222,'\x4a\x43\x34\x23')]['\x61\x63\x6b'](_0x53c5be['\x69\x64']):this[_0x20c8a6(0x25d,'\x76\x56\x51\x58')][_0x20c8a6(0x2f3,'\x23\x58\x72\x35')]?.('\x5b\x74\x72\x61\x63\x65\x2d\x63'+_0x20c8a6(0x1f7,'\x61\x57\x53\x52')+_0x20c8a6(0x2f8,'\x38\x4b\x5d\x31')+_0x20c8a6(0x2e7,'\x23\x58\x72\x35')+'\x68\x75\x62\x5f\x70\x75\x62\x6c'+_0x20c8a6(0x2a3,'\x41\x54\x70\x69')+_0x20c8a6(0x32e,'\x76\x62\x6f\x51')+_0x20c8a6(0x2eb,'\x4a\x64\x72\x6d')+_0x20c8a6(0x2f9,'\x41\x54\x70\x69')+_0x20c8a6(0x209,'\x6d\x4f\x4e\x30')+_0x20c8a6(0x282,'\x58\x70\x72\x4f')+_0x20c8a6(0x322,'\x64\x4f\x65\x4c')+_0x20c8a6(0x2a6,'\x4e\x31\x33\x65')+_0x20c8a6(0x253,'\x33\x67\x70\x6c')+_0x20c8a6(0x26d,'\x53\x40\x68\x42')+_0x20c8a6(0x306,'\x49\x58\x79\x56')));this[_0x20c8a6(0x2d1,'\x76\x62\x6f\x51')][_0x20c8a6(0x2af,'\x5e\x44\x6a\x62')](_0x125b90[_0x20c8a6(0x297,'\x61\x57\x53\x52')],new Date()[_0x20c8a6(0x2b8,'\x24\x5a\x41\x51')+_0x20c8a6(0x227,'\x77\x43\x29\x37')]()),this['\x6c\x6f\x67\x67\x65\x72'][_0x20c8a6(0x2c4,'\x43\x59\x6b\x30')]?.(_0x125b90['\x72\x6f\x4d\x62\x65'](_0x125b90[_0x20c8a6(0x31f,'\x67\x57\x67\x35')],_0x2d4e6d?_0x20c8a6(0x24d,'\x43\x40\x70\x54'):_0x125b90['\x57\x65\x51\x44\x67']));const _0x4865fe={};return _0x4865fe[_0x20c8a6(0x20b,'\x5e\x44\x6a\x62')]=!![],_0x4865fe[_0x20c8a6(0x32f,'\x76\x56\x51\x58')]=!![],_0x4865fe;}[_0x15118e(0x1d9,'\x32\x50\x63\x66')+_0x15118e(0x296,'\x61\x57\x53\x52')](){const _0x3db011=_0x15118e,_0x55912a={};_0x55912a[_0x3db011(0x291,'\x77\x40\x65\x70')]=_0x3db011(0x236,'\x79\x39\x47\x2a')+_0x3db011(0x255,'\x66\x25\x6f\x44')+_0x3db011(0x232,'\x79\x51\x6c\x6f'),_0x55912a[_0x3db011(0x235,'\x4f\x35\x51\x36')]='\x70\x72\x6f\x78\x79\x5f\x74\x72'+_0x3db011(0x23e,'\x43\x40\x70\x54')+'\x69\x67',_0x55912a[_0x3db011(0x2a0,'\x4e\x51\x73\x56')]=function(_0x38fa4d,_0x475f49){return _0x38fa4d===_0x475f49;},_0x55912a[_0x3db011(0x229,'\x58\x70\x72\x4f')]=function(_0x40f730,_0x1fd32e){return _0x40f730===_0x1fd32e;};const _0x5e5399=_0x55912a,_0x437014={};_0x437014[_0x3db011(0x2df,'\x70\x73\x30\x63')]=_0x5e5399[_0x3db011(0x262,'\x55\x4c\x74\x69')],_0x437014[_0x3db011(0x21e,'\x41\x54\x70\x69')]=0x32;const _0x241f9e={};_0x241f9e['\x74\x79\x70\x65']=_0x5e5399[_0x3db011(0x246,'\x38\x5e\x77\x6b')],_0x241f9e[_0x3db011(0x2ba,'\x25\x46\x4f\x68')]=0x32;const _0x4c6fe7=[...this[_0x3db011(0x2b3,'\x64\x4f\x65\x4c')][_0x3db011(0x211,'\x72\x74\x53\x66')](_0x437014),...this[_0x3db011(0x288,'\x32\x50\x63\x66')][_0x3db011(0x31c,'\x43\x40\x70\x54')](_0x241f9e)];let _0x343f1e=0xbdd*0x1+-0x1*0x1975+0x1d*0x78;for(const _0x3045ff of _0x4c6fe7){const _0x150d61=this[_0x3db011(0x328,'\x61\x57\x53\x52')](_0x3045ff),_0x3a8f46=_0x5e5399[_0x3db011(0x224,'\x38\x5e\x77\x6b')](_0x150d61,!![])||_0x150d61&&_0x5e5399[_0x3db011(0x21f,'\x77\x40\x65\x70')](_0x150d61[_0x3db011(0x2dc,'\x76\x74\x78\x29')],!![]),_0x22c326=_0x5e5399[_0x3db011(0x313,'\x53\x40\x68\x42')](_0x150d61,!![])||_0x150d61&&_0x5e5399[_0x3db011(0x1db,'\x6d\x4f\x4e\x30')](_0x150d61[_0x3db011(0x27a,'\x5e\x44\x6a\x62')],!![]);_0x3a8f46&&this[_0x3db011(0x25e,'\x4e\x31\x33\x65')][_0x3db011(0x28a,'\x41\x54\x70\x69')](_0x3045ff['\x69\x64']),_0x22c326&&_0x343f1e++;}return _0x343f1e;}}const _0x31f831={};_0x31f831[_0x15118e(0x249,'\x4a\x63\x4e\x71')+_0x15118e(0x22b,'\x24\x5a\x41\x51')]=_0x4e0839,_0x31f831[_0x15118e(0x201,'\x64\x66\x58\x29')+_0x15118e(0x225,'\x25\x46\x4f\x68')+_0x15118e(0x307,'\x4e\x31\x33\x65')+_0x15118e(0x267,'\x76\x62\x6f\x51')]=_0x568854,_0x31f831[_0x15118e(0x340,'\x67\x57\x67\x35')+_0x15118e(0x329,'\x24\x5a\x41\x51')+'\x67\x53\x69\x67\x6e\x61\x74\x75'+'\x72\x65']=_0x1b7bf2,module['\x65\x78\x70\x6f\x72\x74\x73']=_0x31f831;
@@ -5,6 +5,8 @@ const { MailboxStore } = require('./mailbox/store');
5
5
  const { ProxyHttpServer } = require('./server/http');
6
6
  const { buildRoutes } = require('./server/routes');
7
7
  const { buildMessagesHandler, canonicalizeForBedrock, supportsAdaptiveThinking } = require('./router/messages_route');
8
+ const { ensureEnvelope } = require('./envelope');
9
+ const { buildResponsesHandler } = require('./router/responses_route');
8
10
  const { SyncEngine } = require('./sync/engine');
9
11
  const { LifecycleManager } = require('./lifecycle/manager');
10
12
  const { TaskMonitor } = require('./task/monitor');
@@ -12,10 +14,55 @@ const { SkillUpdater } = require('./extensions/skillUpdater');
12
14
  const { DmHandler } = require('./extensions/dmHandler');
13
15
  const { SessionHandler } = require('./extensions/sessionHandler');
14
16
  const { TraceControl } = require('./extensions/traceControl');
17
+ const { backfillProxyTraceUploads } = require('./trace/extractor');
18
+
19
+ const TRACE_BACKFILL_DRAIN_MAX_PASSES = 8;
20
+ const TRACE_BACKFILL_STARTUP_DRAIN_MAX_MS = 250;
21
+ const TRACE_BACKFILL_RUNTIME_DRAIN_MAX_MS = 50;
15
22
 
16
23
  // Lazy via paths.getEvomapPath() — honors EVOLVER_HOME (#114).
17
24
  function _defaultDataDir() { return getEvomapPath('mailbox'); }
18
25
 
26
+ const DEFAULT_OPENAI_BASE_URL = 'https://api.openai.com/v1';
27
+
28
+ function isAllowedOpenAIHostname(hostname) {
29
+ const h = String(hostname || '').toLowerCase();
30
+ return h === 'api.openai.com' || h.endsWith('.api.openai.com');
31
+ }
32
+
33
+ function resolveOpenAIBaseUrl(raw, { trustedOverride = false } = {}) {
34
+ const value = String(raw || DEFAULT_OPENAI_BASE_URL).replace(/\/+$/, '');
35
+ if (trustedOverride) return value;
36
+
37
+ let parsed;
38
+ try {
39
+ parsed = new URL(value);
40
+ } catch {
41
+ throw new Error('[proxy] EVOMAP_OPENAI_BASE_URL is not a valid URL');
42
+ }
43
+ if (
44
+ parsed.protocol !== 'https:'
45
+ || !isAllowedOpenAIHostname(parsed.hostname)
46
+ || parsed.pathname !== '/v1'
47
+ || parsed.username
48
+ || parsed.password
49
+ || parsed.search
50
+ || parsed.hash
51
+ ) {
52
+ throw new Error('[proxy] EVOMAP_OPENAI_BASE_URL must be an OpenAI https://*.api.openai.com/v1 endpoint');
53
+ }
54
+ return value;
55
+ }
56
+
57
+ function makeOpenAIGatewayError(err, fallbackStatus = 502) {
58
+ const name = err && err.name ? String(err.name) : '';
59
+ const isTimeout = name === 'TimeoutError' || name === 'AbortError';
60
+ const out = new Error(isTimeout ? 'openai upstream timed out' : 'openai upstream request failed');
61
+ out.statusCode = isTimeout ? 504 : fallbackStatus;
62
+ out.cause = err;
63
+ return out;
64
+ }
65
+
19
66
  // The hub serves asset signal-search as `GET /a2a/assets/search` with query
20
67
  // params (signals, status, limit, fields, domain); `signals`/`fields` are
21
68
  // comma-separated lists. The proxy's public contract stays `POST /asset/search`
@@ -78,6 +125,8 @@ class EvoMapProxy {
78
125
  this.logger = opts.logger || console;
79
126
  this._skillPath = opts.skillPath || null;
80
127
  this._anthropicBaseUrl = (opts.anthropicBaseUrl || process.env.EVOMAP_ANTHROPIC_BASE_URL || 'https://api.anthropic.com').replace(/\/+$/, '');
128
+ this._openaiBaseUrl = String(opts.openaiBaseUrl || process.env.EVOMAP_OPENAI_BASE_URL || DEFAULT_OPENAI_BASE_URL).replace(/\/+$/, '');
129
+ this._openaiBaseUrlTrusted = !!opts.openaiBaseUrl;
81
130
 
82
131
  this.store = null;
83
132
  this.server = null;
@@ -88,6 +137,7 @@ class EvoMapProxy {
88
137
  this.dmHandler = null;
89
138
  this.sessionHandler = null;
90
139
  this.traceControl = null;
140
+ this._traceBackfillDraining = false;
91
141
  this._started = false;
92
142
  }
93
143
 
@@ -141,6 +191,9 @@ class EvoMapProxy {
141
191
  getHeaders,
142
192
  logger: this.logger,
143
193
  onAuthError: () => this.lifecycle.reAuthenticate(),
194
+ onOutboundFlushed: () => this._drainProxyTraceBackfill({
195
+ maxMs: TRACE_BACKFILL_RUNTIME_DRAIN_MAX_MS,
196
+ }),
144
197
  onInboundReceived: () => {
145
198
  try { this.skillUpdater?.pollAndApply(); } catch (e) {
146
199
  this.logger?.warn?.('[proxy] skillUpdater.pollAndApply failed:', e.message);
@@ -152,14 +205,19 @@ class EvoMapProxy {
152
205
  });
153
206
 
154
207
  const proxyHandlers = {
155
- assetFetch: (body) => this._proxyHttp('/a2a/fetch', body),
208
+ // /a2a/fetch and /a2a/validate are strict GEP-A2A protocol endpoints:
209
+ // the hub runs isValidProtocolMessage and rejects bare bodies
210
+ // ({asset_ids: [...]}) with 400 invalid_protocol_message, so wrap them
211
+ // in an envelope first. The GET search endpoints below are lenient REST
212
+ // and take plain query params -- no envelope there.
213
+ assetFetch: (body) => this._proxyHttp('/a2a/fetch', this._wrapA2a('fetch', body)),
156
214
  // GET (not POST). planAssetSearch() picks signal-search vs semantic-search
157
215
  // by whether the body carries a free-text `query` or a `signals` list.
158
216
  assetSearch: (body) => {
159
217
  const plan = planAssetSearch(body);
160
218
  return this._proxyHttp(plan.path, null, { method: 'GET', query: plan.query });
161
219
  },
162
- assetValidate: (body) => this._proxyHttp('/a2a/validate', body),
220
+ assetValidate: (body) => this._proxyHttp('/a2a/validate', this._wrapA2a('validate', body)),
163
221
  // ATP passthrough (#460 Bug 2): merchant/consumer flows that used to call
164
222
  // hub directly via src/atp/hubClient.js must route through the proxy when
165
223
  // EVOMAP_PROXY=1 so proxy sees the transaction (for audit + offline queue).
@@ -188,6 +246,12 @@ class EvoMapProxy {
188
246
  traceStore: this.store,
189
247
  onTraceQueued: () => this.sync?.notifyNewOutbound(),
190
248
  });
249
+ const responsesHandler = buildResponsesHandler({
250
+ openAIProxy: (reqPath, body, opts) => this._proxyOpenAIResponses(reqPath, body, opts),
251
+ logger: this.logger,
252
+ traceStore: this.store,
253
+ onTraceQueued: () => this.sync?.notifyNewOutbound(),
254
+ });
191
255
 
192
256
  const routes = buildRoutes(this.store, proxyHandlers, this.taskMonitor, {
193
257
  dmHandler: this.dmHandler,
@@ -195,6 +259,7 @@ class EvoMapProxy {
195
259
  sessionHandler: this.sessionHandler,
196
260
  getHubMailboxStatus: () => this._getHubMailboxStatus(),
197
261
  messagesHandler,
262
+ responsesHandler,
198
263
  });
199
264
 
200
265
  const OUTBOUND_ROUTES = [
@@ -237,6 +302,8 @@ class EvoMapProxy {
237
302
  this.logger.warn('[proxy] No A2A_HUB_URL set, running in offline/local mode');
238
303
  }
239
304
 
305
+ this._drainProxyTraceBackfill({ maxMs: TRACE_BACKFILL_STARTUP_DRAIN_MAX_MS });
306
+
240
307
  this._started = true;
241
308
 
242
309
  return {
@@ -246,6 +313,66 @@ class EvoMapProxy {
246
313
  };
247
314
  }
248
315
 
316
+ _runProxyTraceBackfillPass() {
317
+ try {
318
+ return backfillProxyTraceUploads({
319
+ store: this.store,
320
+ logger: this.logger,
321
+ });
322
+ } catch (e) {
323
+ this.logger.warn('[proxy] trace backfill failed:', e && e.message ? e.message : e);
324
+ return { queued: 0, reasons: { thrown: 1 } };
325
+ }
326
+ }
327
+
328
+ _drainProxyTraceBackfill({
329
+ maxPasses = TRACE_BACKFILL_DRAIN_MAX_PASSES,
330
+ maxMs = TRACE_BACKFILL_RUNTIME_DRAIN_MAX_MS,
331
+ } = {}) {
332
+ if (this._traceBackfillDraining) return { queued: 0, passes: 0, deferred: true };
333
+ this._traceBackfillDraining = true;
334
+ const started = Date.now();
335
+ const total = {
336
+ queued: 0,
337
+ scanned: 0,
338
+ skipped: 0,
339
+ duplicates: 0,
340
+ passes: 0,
341
+ reasons: {},
342
+ };
343
+ try {
344
+ for (let i = 0; i < maxPasses; i++) {
345
+ const stats = this._runProxyTraceBackfillPass();
346
+ total.passes += 1;
347
+ total.queued += stats.queued || 0;
348
+ total.scanned += stats.scanned || 0;
349
+ total.skipped += stats.skipped || 0;
350
+ total.duplicates += stats.duplicates || 0;
351
+ for (const [reason, count] of Object.entries(stats.reasons || {})) {
352
+ total.reasons[reason] = (total.reasons[reason] || 0) + count;
353
+ }
354
+ const madeProgress = (stats.scanned || 0) > 0
355
+ || (stats.queued || 0) > 0
356
+ || (stats.skipped || 0) > 0
357
+ || (stats.duplicates || 0) > 0;
358
+ if (!madeProgress) break;
359
+ if (stats.reasons?.max_pending_uploads || stats.reasons?.collection_disabled
360
+ || stats.reasons?.missing_file || stats.reasons?.missing_store
361
+ || stats.reasons?.read_failed || stats.reasons?.thrown) {
362
+ break;
363
+ }
364
+ if (Date.now() - started >= maxMs) break;
365
+ }
366
+ } finally {
367
+ this._traceBackfillDraining = false;
368
+ }
369
+ if (total.queued > 0) {
370
+ this.logger.log('[proxy] queued ' + total.queued + ' existing proxy trace upload(s)');
371
+ this.sync?.notifyNewOutbound();
372
+ }
373
+ return total;
374
+ }
375
+
249
376
  async stop() {
250
377
  if (!this._started) return;
251
378
  // Tear down in deliberate reverse-of-start order, but don't let one
@@ -279,6 +406,13 @@ class EvoMapProxy {
279
406
  return this.store;
280
407
  }
281
408
 
409
+ // Wrap a bare body in a GEP-A2A envelope (pass-through if already one),
410
+ // signing it with this proxy's node_id as sender_id so callers cannot
411
+ // impersonate another node through the proxy.
412
+ _wrapA2a(messageType, body) {
413
+ return ensureEnvelope(messageType, body, this.store.getState('node_id'));
414
+ }
415
+
282
416
  async _proxyHttp(path, body, opts = {}) {
283
417
  if (!this.hubUrl) throw Object.assign(new Error('Hub not configured'), { statusCode: 503 });
284
418
 
@@ -406,6 +540,83 @@ class EvoMapProxy {
406
540
  };
407
541
  }
408
542
 
543
+ // OpenAI Responses-compatible passthrough for Codex custom providers. The
544
+ // proxy token is consumed by ProxyHttpServer and must never be forwarded as
545
+ // upstream auth; the daemon supplies the real upstream key from env.
546
+ async _proxyOpenAIResponses(reqPath, body, opts = {}) {
547
+ const baseUrl = resolveOpenAIBaseUrl(opts.baseUrl || this._openaiBaseUrl || DEFAULT_OPENAI_BASE_URL, {
548
+ trustedOverride: !!opts.baseUrl || this._openaiBaseUrlTrusted,
549
+ });
550
+ const inbound = opts.inboundHeaders || {};
551
+ const timeoutMs = opts.timeoutMs || 60_000;
552
+
553
+ const fwd = { 'content-type': 'application/json' };
554
+ for (const [k, v] of Object.entries(inbound)) {
555
+ if (v === undefined || v === null) continue;
556
+ const lk = k.toLowerCase();
557
+ if (
558
+ lk === 'openai-organization'
559
+ || lk === 'openai-project'
560
+ || lk === 'openai-beta'
561
+ || lk.startsWith('x-stainless-')
562
+ ) {
563
+ fwd[lk] = Array.isArray(v) ? v.join(', ') : String(v);
564
+ }
565
+ }
566
+
567
+ const upstreamKey = process.env.EVOMAP_OPENAI_API_KEY || process.env.OPENAI_API_KEY || '';
568
+ if (!upstreamKey) {
569
+ const err = new Error('openai api key required');
570
+ err.statusCode = 401;
571
+ throw err;
572
+ }
573
+ if (upstreamKey) {
574
+ fwd.authorization = `Bearer ${upstreamKey}`;
575
+ }
576
+
577
+ const endpoint = `${baseUrl}${reqPath}`;
578
+ const abortController = new AbortController();
579
+ const timeoutErr = new Error('openai upstream timed out');
580
+ timeoutErr.name = 'TimeoutError';
581
+ const abortTimer = setTimeout(() => abortController.abort(timeoutErr), timeoutMs);
582
+ abortTimer.unref?.();
583
+ let res;
584
+ try {
585
+ res = await fetch(endpoint, {
586
+ method: 'POST',
587
+ headers: fwd,
588
+ body: JSON.stringify(body || {}),
589
+ signal: abortController.signal,
590
+ });
591
+ } catch (err) {
592
+ clearTimeout(abortTimer);
593
+ throw makeOpenAIGatewayError(err);
594
+ }
595
+
596
+ const headers = Object.fromEntries(res.headers.entries());
597
+ const contentType = (headers['content-type'] || '').toLowerCase();
598
+ const isStream = contentType.includes('text/event-stream');
599
+ if (isStream) clearTimeout(abortTimer);
600
+
601
+ const readText = async () => {
602
+ try {
603
+ return await res.text();
604
+ } catch (err) {
605
+ throw makeOpenAIGatewayError(err);
606
+ } finally {
607
+ clearTimeout(abortTimer);
608
+ }
609
+ };
610
+
611
+ return {
612
+ status: res.status,
613
+ headers,
614
+ stream: isStream ? res.body : null,
615
+ json: isStream ? null : async () => JSON.parse(await readText()),
616
+ text: isStream ? null : readText,
617
+ };
618
+ }
619
+
409
620
  // Bedrock upstream mode: same return contract as _proxyAnthropic so
410
621
  // messages_route.js and ProxyHttpServer._streamResponse don't change.
411
622
  // Body transformation: model -> URL path; inject anthropic_version;
@@ -667,4 +878,11 @@ async function startProxy(opts = {}) {
667
878
  return { proxy, ...info };
668
879
  }
669
880
 
670
- module.exports = { EvoMapProxy, startProxy, buildAssetSearchQuery, buildSemanticSearchQuery, planAssetSearch };
881
+ module.exports = {
882
+ EvoMapProxy,
883
+ startProxy,
884
+ buildAssetSearchQuery,
885
+ buildSemanticSearchQuery,
886
+ planAssetSearch,
887
+ resolveOpenAIBaseUrl,
888
+ };