@evomap/evolver 1.90.0 → 2.0.0-beta.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 (231) hide show
  1. package/README.md +27 -564
  2. package/bin/evolver-llm-proxy.js +3 -0
  3. package/bin/evolver-mcp.js +2 -0
  4. package/bin/evolver-proxy.js +3 -0
  5. package/bin/evolver.js +4 -0
  6. package/index.js +1 -3670
  7. package/package.json +32 -62
  8. package/CONTRIBUTING.md +0 -19
  9. package/LICENSE +0 -641
  10. package/README.ja-JP.md +0 -521
  11. package/README.ko-KR.md +0 -520
  12. package/README.zh-CN.md +0 -531
  13. package/SKILL.md +0 -365
  14. package/assets/cover.png +0 -0
  15. package/assets/gep/genes.seed.json +0 -496
  16. package/conformance/savings-core/constants.json +0 -30
  17. package/conformance/savings-core/golden-vectors.json +0 -333
  18. package/scripts/a2a_export.js +0 -63
  19. package/scripts/a2a_ingest.js +0 -79
  20. package/scripts/a2a_promote.js +0 -118
  21. package/scripts/analyze_by_skill.js +0 -121
  22. package/scripts/build_binaries.js +0 -479
  23. package/scripts/check-changelog.js +0 -166
  24. package/scripts/extract_log.js +0 -85
  25. package/scripts/generate_history.js +0 -75
  26. package/scripts/gep_append_event.js +0 -96
  27. package/scripts/gep_personality_report.js +0 -234
  28. package/scripts/human_report.js +0 -147
  29. package/scripts/recall-verify-report.js +0 -234
  30. package/scripts/recover_loop.js +0 -61
  31. package/scripts/refresh_stars_badge.js +0 -168
  32. package/scripts/seed-merchants.js +0 -91
  33. package/scripts/skill2recipes.js +0 -118
  34. package/scripts/suggest_version.js +0 -89
  35. package/scripts/validate-modules.js +0 -38
  36. package/scripts/validate-suite.js +0 -78
  37. package/src/adapters/claudeCode.js +0 -194
  38. package/src/adapters/codex.js +0 -216
  39. package/src/adapters/cursor.js +0 -91
  40. package/src/adapters/hookAdapter.js +0 -469
  41. package/src/adapters/kiro.js +0 -195
  42. package/src/adapters/opencode.js +0 -326
  43. package/src/adapters/scripts/_lockPaths.js +0 -74
  44. package/src/adapters/scripts/_memoryFiltering.js +0 -35
  45. package/src/adapters/scripts/_runtimePaths.js +0 -440
  46. package/src/adapters/scripts/evolver-session-end.js +0 -321
  47. package/src/adapters/scripts/evolver-session-start.js +0 -587
  48. package/src/adapters/scripts/evolver-signal-detect.js +0 -98
  49. package/src/adapters/scripts/evolver-task-recall.js +0 -173
  50. package/src/atp/atpExecute.js +0 -283
  51. package/src/atp/atpTaskPickup.js +0 -233
  52. package/src/atp/autoBuyer.js +0 -382
  53. package/src/atp/autoDeliver.js +0 -215
  54. package/src/atp/cli.js +0 -354
  55. package/src/atp/cliAutobuyPrompt.js +0 -154
  56. package/src/atp/consumerAgent.js +0 -157
  57. package/src/atp/defaultHandler.js +0 -69
  58. package/src/atp/heartbeatSignalsHandler.js +0 -254
  59. package/src/atp/hubClient.js +0 -317
  60. package/src/atp/index.js +0 -38
  61. package/src/atp/merchantAgent.js +0 -118
  62. package/src/atp/protocol.js +0 -41
  63. package/src/atp/questionComposer.js +0 -133
  64. package/src/atp/serviceHelper.js +0 -92
  65. package/src/canary.js +0 -13
  66. package/src/config.js +0 -351
  67. package/src/evolve/guards.js +0 -1
  68. package/src/evolve/pipeline/collect.js +0 -1
  69. package/src/evolve/pipeline/dispatch.js +0 -1
  70. package/src/evolve/pipeline/enrich.js +0 -1
  71. package/src/evolve/pipeline/hub.js +0 -1
  72. package/src/evolve/pipeline/select.js +0 -1
  73. package/src/evolve/pipeline/signals.js +0 -1
  74. package/src/evolve/utils.js +0 -1
  75. package/src/evolve.js +0 -1
  76. package/src/experiment/agentRunner.js +0 -229
  77. package/src/experiment/cli.js +0 -159
  78. package/src/experiment/comparison.js +0 -233
  79. package/src/experiment/metrics.js +0 -75
  80. package/src/forceUpdate.js +0 -991
  81. package/src/gep/a2a.js +0 -173
  82. package/src/gep/a2aProtocol.js +0 -1
  83. package/src/gep/analyzer.js +0 -35
  84. package/src/gep/antiAbuseTelemetry.js +0 -1
  85. package/src/gep/assetCallLog.js +0 -197
  86. package/src/gep/assetStore.js +0 -723
  87. package/src/gep/assets.js +0 -36
  88. package/src/gep/autoDistillConv.js +0 -1
  89. package/src/gep/autoDistillLlm.js +0 -1
  90. package/src/gep/bridge.js +0 -138
  91. package/src/gep/candidateEval.js +0 -1
  92. package/src/gep/candidates.js +0 -1
  93. package/src/gep/claimNudge.js +0 -121
  94. package/src/gep/cliContracts.js +0 -1190
  95. package/src/gep/contentHash.js +0 -1
  96. package/src/gep/conversationDistiller.js +0 -1
  97. package/src/gep/conversationSniffer.js +0 -1
  98. package/src/gep/crypto.js +0 -1
  99. package/src/gep/curriculum.js +0 -1
  100. package/src/gep/deviceId.js +0 -1
  101. package/src/gep/directoryClient.js +0 -115
  102. package/src/gep/envFingerprint.js +0 -1
  103. package/src/gep/epigenetics.js +0 -1
  104. package/src/gep/execBridge.js +0 -1
  105. package/src/gep/executionTrace.js +0 -291
  106. package/src/gep/explore.js +0 -1
  107. package/src/gep/featureFlags.js +0 -121
  108. package/src/gep/gitOps.js +0 -265
  109. package/src/gep/hash.js +0 -1
  110. package/src/gep/hostErrorClassifier.js +0 -34
  111. package/src/gep/hubFetch.js +0 -1
  112. package/src/gep/hubReview.js +0 -1
  113. package/src/gep/hubSearch.js +0 -1
  114. package/src/gep/hubVerify.js +0 -1
  115. package/src/gep/idleScheduler.js +0 -400
  116. package/src/gep/issueReporter.js +0 -416
  117. package/src/gep/learningSignals.js +0 -1
  118. package/src/gep/llmReview.js +0 -92
  119. package/src/gep/localStateAwareness.js +0 -243
  120. package/src/gep/mailboxTransport.js +0 -119
  121. package/src/gep/memoryGraph.js +0 -1
  122. package/src/gep/memoryGraphAdapter.js +0 -1
  123. package/src/gep/mutation.js +0 -1
  124. package/src/gep/narrativeMemory.js +0 -1
  125. package/src/gep/oauthLogin.js +0 -181
  126. package/src/gep/openPRRegistry.js +0 -1
  127. package/src/gep/paths.js +0 -522
  128. package/src/gep/personality.js +0 -1
  129. package/src/gep/policyCheck.js +0 -1
  130. package/src/gep/portable.js +0 -103
  131. package/src/gep/privacyClient.js +0 -235
  132. package/src/gep/prompt.js +0 -1
  133. package/src/gep/questionGenerator.js +0 -518
  134. package/src/gep/recallInject.js +0 -1
  135. package/src/gep/recallVerifier.js +0 -1
  136. package/src/gep/reflection.js +0 -1
  137. package/src/gep/sanitize.js +0 -264
  138. package/src/gep/savingsCore.js +0 -1
  139. package/src/gep/schemas/capsule.js +0 -170
  140. package/src/gep/schemas/gene.js +0 -154
  141. package/src/gep/schemas/index.js +0 -8
  142. package/src/gep/schemas/protocol.js +0 -51
  143. package/src/gep/schemas/task.js +0 -74
  144. package/src/gep/selector.js +0 -1
  145. package/src/gep/selfPR.js +0 -469
  146. package/src/gep/signals.js +0 -776
  147. package/src/gep/skill2gep.js +0 -1056
  148. package/src/gep/skill2gepAudit.js +0 -303
  149. package/src/gep/skill2recipes.js +0 -511
  150. package/src/gep/skillDistiller.js +0 -1
  151. package/src/gep/skillPublisher.js +0 -358
  152. package/src/gep/solidify.js +0 -1
  153. package/src/gep/strategy.js +0 -1
  154. package/src/gep/taskReceiver.js +0 -575
  155. package/src/gep/tokenSavings.js +0 -1
  156. package/src/gep/trajectoryExport.js +0 -1
  157. package/src/gep/validationReport.js +0 -55
  158. package/src/gep/validator/index.js +0 -411
  159. package/src/gep/validator/reporter.js +0 -210
  160. package/src/gep/validator/sandboxExecutor.js +0 -480
  161. package/src/gep/validator/stakeBootstrap.js +0 -357
  162. package/src/gep/workspaceKeychain.js +0 -1
  163. package/src/ops/cleanup.js +0 -80
  164. package/src/ops/commentary.js +0 -60
  165. package/src/ops/health_check.js +0 -104
  166. package/src/ops/index.js +0 -11
  167. package/src/ops/innovation.js +0 -67
  168. package/src/ops/lifecycle.js +0 -798
  169. package/src/ops/self_repair.js +0 -76
  170. package/src/ops/skills_monitor.js +0 -147
  171. package/src/ops/trigger.js +0 -33
  172. package/src/proxy/clientSettings.js +0 -405
  173. package/src/proxy/envelope.js +0 -59
  174. package/src/proxy/extensions/dmHandler.js +0 -45
  175. package/src/proxy/extensions/sessionHandler.js +0 -141
  176. package/src/proxy/extensions/skillUpdater.js +0 -64
  177. package/src/proxy/extensions/traceControl.js +0 -1
  178. package/src/proxy/index.js +0 -1395
  179. package/src/proxy/inject.js +0 -1
  180. package/src/proxy/lifecycle/manager.js +0 -1568
  181. package/src/proxy/mailbox/state.js +0 -207
  182. package/src/proxy/mailbox/store.js +0 -602
  183. package/src/proxy/router/cache_passthrough.js +0 -26
  184. package/src/proxy/router/features.js +0 -84
  185. package/src/proxy/router/gemini_route.js +0 -154
  186. package/src/proxy/router/messages_route.js +0 -535
  187. package/src/proxy/router/model_router.js +0 -113
  188. package/src/proxy/router/models_route.js +0 -52
  189. package/src/proxy/router/ollama_route.js +0 -103
  190. package/src/proxy/router/responses_route.js +0 -170
  191. package/src/proxy/router/vertex_route.js +0 -110
  192. package/src/proxy/server/http.js +0 -363
  193. package/src/proxy/server/routes.js +0 -558
  194. package/src/proxy/server/settings.js +0 -115
  195. package/src/proxy/sync/engine.js +0 -179
  196. package/src/proxy/sync/inbound.js +0 -211
  197. package/src/proxy/sync/outbound.js +0 -361
  198. package/src/proxy/task/monitor.js +0 -131
  199. package/src/proxy/trace/extractor.js +0 -1
  200. package/src/proxy/trace/usage.js +0 -1
  201. package/src/solo/breaker.js +0 -25
  202. package/src/solo/gitGuard.js +0 -65
  203. package/src/webui/client/clientJs/assets.js +0 -111
  204. package/src/webui/client/clientJs/bootstrap.js +0 -92
  205. package/src/webui/client/clientJs/common.js +0 -77
  206. package/src/webui/client/clientJs/i18n.js +0 -366
  207. package/src/webui/client/clientJs/index.js +0 -35
  208. package/src/webui/client/clientJs/interactions.js +0 -351
  209. package/src/webui/client/clientJs/overview.js +0 -152
  210. package/src/webui/client/clientJs/personality.js +0 -285
  211. package/src/webui/client/clientJs/pipelines.js +0 -330
  212. package/src/webui/client/indexHtml.js +0 -221
  213. package/src/webui/client/static.js +0 -23
  214. package/src/webui/client/stylesCss.js +0 -639
  215. package/src/webui/client/vendor/README.md +0 -15
  216. package/src/webui/client/vendor/echarts.min.js +0 -45
  217. package/src/webui/index.js +0 -14
  218. package/src/webui/observer/assets.js +0 -146
  219. package/src/webui/observer/index.js +0 -37
  220. package/src/webui/observer/interactions.js +0 -127
  221. package/src/webui/observer/jsonl.js +0 -75
  222. package/src/webui/observer/paths.js +0 -46
  223. package/src/webui/observer/personality.js +0 -43
  224. package/src/webui/observer/pipelineEvents.js +0 -58
  225. package/src/webui/observer/redact.js +0 -63
  226. package/src/webui/observer/runs.js +0 -356
  227. package/src/webui/observer/safety.js +0 -57
  228. package/src/webui/observer/skills.js +0 -70
  229. package/src/webui/observer/status.js +0 -71
  230. package/src/webui/server/http.js +0 -138
  231. package/src/webui/server/routes.js +0 -41
@@ -1 +0,0 @@
1
- var _0x6f0d6b=_0x4f1c;(function(_0x24e7a1,_0x4659b2){var _0x1cadea=_0x4f1c,_0x46aab1=_0x24e7a1();while(!![]){try{var _0x5b2897=-parseInt(_0x1cadea(0xb4,'\x66\x48\x7a\x49'))/(0x12a6+-0x152*0x1+0x1153*-0x1)*(-parseInt(_0x1cadea(0xae,'\x67\x6e\x6c\x2a'))/(-0x25c1+-0xb*0x1bc+0x38d7))+parseInt(_0x1cadea(0xe5,'\x4c\x50\x79\x59'))/(-0x11*0x1be+0x1f*-0x94+0x2f8d)*(-parseInt(_0x1cadea(0xb7,'\x35\x5a\x5e\x35'))/(0x47f*0x1+0xb51*0x3+-0x2*0x1337))+parseInt(_0x1cadea(0x10f,'\x72\x25\x39\x69'))/(-0x6ad+0xf24+-0x872)*(-parseInt(_0x1cadea(0x188,'\x53\x38\x37\x41'))/(-0x1f68+-0x143*0x4+0x247a))+-parseInt(_0x1cadea(0x10a,'\x59\x37\x66\x7a'))/(0x1*-0xcdc+0xfa3*0x1+-0x40*0xb)+-parseInt(_0x1cadea(0xea,'\x6d\x53\x71\x52'))/(0xad*-0x29+0x1*0x4a5+0x1718)+parseInt(_0x1cadea(0x144,'\x79\x54\x51\x4f'))/(-0x1146+-0x14f7+-0x8e*-0x45)+-parseInt(_0x1cadea(0xa4,'\x53\x38\x37\x41'))/(-0x2d*0x3b+-0x6a*-0x22+0x3ab*-0x1)*(-parseInt(_0x1cadea(0xeb,'\x50\x51\x30\x29'))/(0x1*0x1b88+-0x14*0x1c1+-0x1*-0x797));if(_0x5b2897===_0x4659b2)break;else _0x46aab1['push'](_0x46aab1['shift']());}catch(_0x43ff07){_0x46aab1['push'](_0x46aab1['shift']());}}}(_0x1d36,-0x11af14+-0xe1c7a+-0x32788*-0xe));var _0x395ce2=(function(){var _0xf0fdab=!![];return function(_0x41ea67,_0x5768cd){var _0x397115=_0x4f1c,_0x3fa3b5={};_0x3fa3b5[_0x397115(0xd6,'\x77\x4b\x44\x70')]=function(_0x3c38d1,_0x478fd1){return _0x3c38d1===_0x478fd1;},_0x3fa3b5[_0x397115(0xac,'\x36\x49\x6e\x25')]='\x50\x4d\x71\x4a\x4a';var _0x143e39=_0x3fa3b5,_0x145dfd=_0xf0fdab?function(){var _0x33da00=_0x397115;if(_0x5768cd){if(_0x143e39[_0x33da00(0xaf,'\x5d\x51\x75\x59')](_0x143e39[_0x33da00(0xfb,'\x67\x4a\x65\x36')],_0x33da00(0xef,'\x50\x57\x41\x43'))){var _0x255c64=_0x5eb9e3[_0x33da00(0xd3,'\x51\x6a\x61\x38')](_0x250658[_0x33da00(0xd5,'\x52\x64\x73\x50')+'\x53\x79\x6e\x63'](_0x511810[_0x4774cc],_0x33da00(0x182,'\x39\x38\x51\x5b')));return _0x255c64&&_0x39d4c8[_0x33da00(0xe2,'\x50\x57\x41\x43')](_0x255c64[_0x33da00(0x172,'\x6c\x59\x65\x50')+'\x6e\x74'])?_0x255c64[_0x33da00(0xdf,'\x59\x37\x66\x7a')+'\x6e\x74']:0x1408+0xcbb*-0x1+0x26f*-0x3;}else{var _0x5425c5=_0x5768cd['\x61\x70\x70\x6c\x79'](_0x41ea67,arguments);return _0x5768cd=null,_0x5425c5;}}}:function(){};return _0xf0fdab=![],_0x145dfd;};}()),_0x2f2e6d=_0x395ce2(this,function(){var _0x5e436e=_0x4f1c,_0x29d3e8={};_0x29d3e8[_0x5e436e(0xbc,'\x50\x51\x30\x29')]=_0x5e436e(0xa1,'\x66\x48\x7a\x49')+_0x5e436e(0xcd,'\x23\x33\x4f\x68');var _0x14a347=_0x29d3e8;return _0x2f2e6d[_0x5e436e(0xfe,'\x5a\x61\x6b\x30')]()[_0x5e436e(0x10c,'\x7a\x23\x50\x4e')](_0x14a347[_0x5e436e(0x169,'\x67\x6e\x6c\x2a')])[_0x5e436e(0xda,'\x28\x64\x47\x5a')]()[_0x5e436e(0xd9,'\x59\x37\x66\x7a')+_0x5e436e(0x17e,'\x4c\x50\x79\x59')](_0x2f2e6d)[_0x5e436e(0x122,'\x67\x4a\x65\x36')](_0x14a347[_0x5e436e(0x11d,'\x67\x38\x5b\x62')]);});_0x2f2e6d();var _0x163ae0=require('\x66\x73'),_0x5bb7db=require(_0x6f0d6b(0xf0,'\x23\x33\x4f\x68')),_0x1bc2d8={};_0x1bc2d8[_0x6f0d6b(0xf9,'\x7a\x23\x50\x4e')]=0.2,_0x1bc2d8[_0x6f0d6b(0x112,'\x25\x67\x25\x58')]=0.2,_0x1bc2d8[_0x6f0d6b(0x106,'\x59\x37\x66\x7a')]=0.5,_0x1bc2d8[_0x6f0d6b(0x110,'\x67\x38\x5b\x62')]=0.1,_0x1bc2d8[_0x6f0d6b(0x18b,'\x51\x6a\x61\x38')+'\x6f\x70\x54\x68\x72\x65\x73\x68'+'\x6f\x6c\x64']=0.5,_0x1bc2d8[_0x6f0d6b(0x15c,'\x77\x4b\x44\x70')]=_0x6f0d6b(0xdb,'\x44\x76\x28\x38'),_0x1bc2d8['\x64\x65\x73\x63\x72\x69\x70\x74'+_0x6f0d6b(0x17f,'\x50\x57\x41\x43')]=_0x6f0d6b(0xa2,'\x64\x56\x24\x4f')+'\x70\x65\x72\x61\x74\x69\x6f\x6e'+_0x6f0d6b(0x14a,'\x72\x25\x39\x69')+_0x6f0d6b(0xa8,'\x5d\x51\x75\x59')+_0x6f0d6b(0xc1,'\x67\x6e\x6c\x2a')+_0x6f0d6b(0x163,'\x5d\x51\x75\x59');var _0x180d67={};function _0x1d36(){var _0x217dc6=['\x74\x6d\x6b\x39\x70\x57','\x62\x43\x6f\x69\x57\x36\x57','\x64\x53\x6b\x4e\x57\x34\x74\x64\x4d\x38\x6f\x59\x46\x59\x7a\x4d','\x57\x51\x43\x74\x6d\x30\x5a\x63\x4e\x53\x6f\x69\x79\x43\x6f\x6c','\x57\x36\x52\x64\x50\x6d\x6b\x4c\x57\x4f\x34','\x57\x51\x4b\x44\x57\x35\x4b','\x57\x34\x6c\x64\x4f\x43\x6b\x41\x57\x51\x53\x61\x44\x6d\x6b\x39\x57\x51\x30','\x74\x4d\x75\x54\x41\x6d\x6f\x5a\x57\x35\x6a\x65\x57\x52\x43','\x57\x37\x56\x64\x54\x43\x6b\x57\x57\x35\x78\x64\x55\x71\x74\x64\x51\x4b\x75','\x57\x51\x4f\x79\x6c\x4b\x64\x63\x4d\x53\x6f\x61\x7a\x43\x6f\x41','\x65\x53\x6b\x54\x65\x38\x6f\x55\x57\x4f\x43\x6d\x68\x33\x76\x6a\x57\x50\x4b\x30\x72\x61','\x79\x43\x6f\x61\x61\x57','\x74\x65\x39\x5a\x6e\x4a\x78\x64\x50\x59\x74\x63\x48\x57','\x68\x38\x6b\x37\x57\x35\x46\x64\x4c\x53\x6f\x2b\x74\x47\x76\x38','\x77\x65\x65\x48\x43\x6d\x6f\x4e','\x57\x52\x2f\x63\x56\x68\x6a\x7a\x57\x37\x43','\x57\x37\x69\x2f\x57\x36\x52\x64\x47\x53\x6b\x51\x6d\x43\x6b\x56','\x62\x4b\x47\x30\x6c\x77\x4b','\x75\x48\x57\x5a\x57\x50\x47\x52\x62\x43\x6f\x64\x57\x35\x71','\x57\x4f\x70\x63\x4b\x53\x6f\x72\x75\x4a\x56\x64\x54\x64\x6a\x67','\x6b\x38\x6b\x75\x57\x35\x38','\x66\x43\x6b\x4f\x66\x38\x6f\x52\x57\x4f\x75\x6b\x45\x57\x54\x52\x57\x52\x71\x46\x76\x38\x6f\x57\x57\x52\x47','\x57\x50\x71\x71\x57\x35\x30','\x6c\x43\x6f\x39\x57\x4f\x6c\x63\x4d\x47\x33\x64\x4a\x4b\x79','\x57\x35\x6c\x63\x4e\x75\x64\x63\x48\x76\x64\x63\x54\x73\x30\x4c','\x6c\x53\x6f\x6c\x66\x43\x6b\x35\x44\x77\x70\x63\x4f\x38\x6f\x51','\x57\x37\x6d\x38\x44\x47','\x78\x38\x6b\x47\x66\x6d\x6b\x38\x77\x61','\x71\x43\x6f\x2f\x76\x38\x6b\x58\x57\x34\x57\x76\x70\x30\x38','\x43\x53\x6f\x4b\x57\x37\x53\x34\x57\x52\x34','\x57\x34\x2f\x63\x4d\x4a\x4c\x72\x57\x37\x72\x2b\x57\x35\x43','\x77\x73\x2f\x63\x52\x68\x5a\x63\x49\x74\x76\x4b\x57\x36\x34','\x72\x6d\x6f\x76\x68\x38\x6b\x4b\x76\x47','\x57\x35\x52\x63\x55\x4e\x30\x47\x79\x61','\x41\x4c\x56\x64\x4f\x38\x6f\x58\x6d\x43\x6b\x55','\x57\x4f\x5a\x63\x4d\x38\x6f\x78\x77\x49\x4a\x63\x55\x68\x6d\x6a','\x42\x66\x64\x64\x54\x53\x6f\x4a\x6b\x38\x6f\x59\x57\x36\x48\x55','\x74\x61\x61\x4f\x57\x4f\x79\x35\x76\x53\x6b\x52\x57\x50\x65\x66\x44\x49\x4f','\x63\x77\x4a\x63\x50\x31\x70\x63\x48\x58\x79','\x61\x6d\x6b\x78\x6d\x66\x4e\x63\x4b\x62\x69\x47\x75\x57','\x6c\x71\x6c\x63\x54\x43\x6b\x57\x43\x6d\x6b\x34\x57\x34\x6e\x7a\x57\x50\x61\x4b\x57\x4f\x30\x75','\x61\x31\x4f\x71\x69\x77\x54\x77\x74\x4c\x75','\x73\x53\x6b\x33\x6c\x6d\x6b\x44\x46\x43\x6f\x55\x6e\x38\x6f\x52','\x57\x52\x78\x64\x56\x53\x6b\x76\x57\x35\x75\x77\x57\x52\x2f\x64\x51\x30\x47','\x57\x37\x33\x63\x4f\x33\x33\x63\x47\x77\x65','\x57\x36\x61\x34\x57\x34\x70\x63\x4b\x38\x6f\x6b','\x67\x4e\x37\x63\x50\x31\x78\x63\x4a\x61\x35\x6a\x57\x37\x79','\x64\x43\x6b\x49\x6c\x43\x6b\x30\x6f\x53\x6f\x31\x57\x50\x4a\x63\x55\x57','\x64\x43\x6f\x66\x57\x36\x56\x63\x4e\x53\x6f\x53\x57\x4f\x35\x61','\x57\x36\x52\x63\x49\x53\x6f\x72\x66\x72\x47\x32\x57\x34\x7a\x31','\x68\x33\x6c\x63\x4f\x66\x6c\x64\x47\x61\x54\x79\x57\x34\x71','\x57\x52\x37\x63\x4c\x43\x6b\x6f\x57\x51\x76\x45','\x57\x50\x56\x63\x51\x6d\x6b\x42\x57\x50\x76\x41\x77\x74\x35\x35','\x72\x43\x6b\x71\x70\x76\x4a\x63\x50\x47\x38\x5a\x65\x47','\x73\x53\x6f\x79\x57\x35\x6d\x30\x57\x51\x33\x64\x53\x6d\x6f\x4e\x71\x61','\x57\x37\x4e\x64\x51\x53\x6b\x65\x57\x51\x75\x46\x7a\x38\x6b\x66\x57\x51\x53','\x57\x51\x33\x63\x47\x64\x44\x45\x57\x4f\x61','\x57\x34\x42\x63\x48\x6d\x6b\x45\x57\x4f\x6e\x39\x57\x52\x61\x61\x57\x37\x6d','\x70\x6d\x6b\x5a\x57\x51\x30\x42\x64\x73\x57','\x57\x4f\x54\x2b\x67\x47\x43\x5a\x78\x43\x6b\x59\x57\x37\x38','\x57\x34\x2f\x63\x49\x73\x58\x61','\x73\x77\x65\x35\x41\x38\x6f\x34\x57\x50\x4f\x78\x57\x51\x4f','\x57\x50\x4b\x67\x75\x67\x75','\x57\x34\x42\x64\x4e\x43\x6b\x72\x57\x35\x33\x64\x4d\x47','\x66\x43\x6b\x53\x65\x38\x6f\x4b\x57\x4f\x61\x70\x46\x57\x31\x4c\x57\x4f\x6d\x76\x45\x43\x6f\x34\x57\x50\x38','\x57\x4f\x5a\x64\x53\x43\x6f\x34\x57\x51\x54\x4a','\x57\x52\x37\x64\x55\x38\x6f\x66\x57\x51\x4c\x68\x41\x43\x6f\x6b','\x57\x52\x78\x64\x4e\x6d\x6f\x67\x57\x52\x6a\x75\x41\x43\x6f\x43\x57\x52\x65','\x68\x43\x6b\x2f\x57\x35\x78\x64\x48\x6d\x6f\x59','\x57\x51\x4b\x46\x57\x34\x2f\x64\x53\x6d\x6b\x65\x68\x43\x6b\x45\x76\x71','\x57\x34\x4e\x63\x4a\x74\x4c\x62\x57\x35\x44\x57\x57\x34\x69\x6b','\x7a\x4e\x4b\x5a\x44\x43\x6f\x76','\x57\x35\x37\x63\x4d\x67\x4e\x63\x47\x65\x56\x63\x51\x64\x61\x56','\x57\x36\x46\x64\x51\x53\x6b\x67\x57\x37\x52\x64\x48\x71','\x57\x36\x33\x64\x53\x57\x39\x6e\x41\x30\x72\x30\x77\x57','\x57\x52\x6d\x45\x57\x37\x70\x64\x53\x53\x6b\x78\x61\x6d\x6b\x7a\x78\x61','\x57\x4f\x31\x6c\x63\x63\x43\x45\x57\x4f\x31\x2b\x78\x47','\x77\x53\x6f\x78\x6b\x6d\x6b\x44\x6b\x6d\x6f\x6f\x57\x4f\x38','\x77\x43\x6f\x66\x57\x35\x65\x48\x57\x52\x42\x64\x51\x53\x6f\x52','\x57\x51\x69\x6a\x57\x35\x64\x64\x51\x53\x6b\x6b\x67\x38\x6b\x73','\x57\x36\x33\x64\x50\x71\x6a\x73\x45\x4e\x76\x55\x74\x71','\x57\x50\x65\x59\x57\x35\x42\x63\x4a\x67\x71','\x6f\x38\x6b\x49\x57\x51\x53\x77\x62\x73\x56\x63\x48\x53\x6b\x4c','\x62\x43\x6f\x75\x57\x34\x74\x63\x4d\x38\x6f\x52\x57\x50\x31\x72\x57\x52\x61','\x70\x53\x6b\x72\x57\x35\x31\x6c\x57\x50\x4b','\x57\x4f\x38\x49\x57\x35\x70\x63\x54\x59\x46\x63\x53\x38\x6b\x49\x57\x4f\x38','\x61\x43\x6b\x68\x6f\x38\x6b\x58\x78\x43\x6f\x6a\x70\x47','\x74\x43\x6f\x46\x73\x43\x6b\x6f\x57\x37\x69','\x57\x34\x4f\x44\x64\x73\x79\x49','\x63\x43\x6f\x2b\x57\x34\x31\x64\x57\x35\x31\x38','\x6b\x38\x6f\x47\x57\x4f\x70\x64\x4a\x61','\x7a\x43\x6f\x47\x57\x36\x4c\x67\x78\x78\x78\x64\x4a\x38\x6f\x32\x57\x36\x4e\x63\x4b\x4b\x74\x63\x48\x6d\x6b\x4e\x7a\x71','\x57\x50\x62\x6a\x57\x34\x68\x63\x4f\x43\x6f\x65\x6b\x53\x6f\x6f\x64\x47','\x57\x52\x33\x64\x52\x43\x6f\x5a\x69\x71\x4f','\x57\x52\x4e\x64\x51\x38\x6b\x7a\x57\x35\x47\x6e\x57\x51\x4f','\x57\x50\x43\x44\x57\x35\x56\x63\x56\x31\x61','\x6c\x53\x6f\x4d\x57\x35\x64\x63\x48\x38\x6f\x5a','\x57\x34\x6a\x6f\x64\x59\x4b','\x57\x34\x72\x37\x6e\x59\x70\x64\x52\x47','\x71\x38\x6f\x52\x6c\x43\x6b\x4d\x6f\x38\x6f\x4c\x57\x50\x4e\x64\x55\x47','\x57\x37\x65\x63\x57\x36\x42\x63\x4c\x71','\x57\x35\x46\x63\x50\x6d\x6b\x69\x57\x51\x38\x70\x41\x43\x6b\x64\x57\x51\x43','\x57\x35\x68\x63\x4d\x6d\x6b\x34\x57\x51\x44\x4c','\x57\x37\x52\x64\x53\x59\x31\x72\x41\x66\x6e\x5a\x45\x57','\x6d\x43\x6f\x34\x57\x4f\x65','\x70\x53\x6b\x55\x57\x35\x74\x63\x55\x43\x6b\x47','\x75\x4d\x75\x34\x75\x43\x6b\x51\x57\x35\x75','\x57\x35\x37\x63\x50\x4c\x54\x31\x44\x43\x6f\x36\x65\x4b\x43','\x57\x37\x44\x62\x67\x6d\x6f\x67\x73\x61','\x76\x43\x6f\x79\x57\x35\x6a\x4a\x57\x37\x4e\x64\x4e\x43\x6f\x32\x78\x47','\x57\x52\x31\x70\x66\x59\x4b\x43\x57\x50\x48\x2b','\x78\x4c\x76\x42\x45\x76\x69\x72\x57\x52\x64\x64\x48\x57','\x57\x34\x43\x64\x57\x37\x4a\x63\x4d\x53\x6f\x6a\x63\x6d\x6f\x69','\x57\x50\x69\x67\x57\x36\x70\x64\x4b\x6d\x6b\x32','\x57\x35\x6d\x4b\x64\x63\x34\x53\x43\x43\x6b\x6f\x57\x35\x65','\x6f\x6d\x6b\x6e\x57\x34\x78\x63\x52\x53\x6b\x4e\x77\x6d\x6b\x4a\x6e\x47','\x57\x50\x46\x64\x48\x64\x70\x63\x54\x61','\x57\x50\x70\x63\x56\x43\x6b\x37\x57\x51\x35\x43\x74\x49\x58\x4c','\x67\x65\x57\x4d\x6b\x77\x58\x6e\x44\x4c\x38','\x57\x36\x46\x64\x53\x47\x39\x72\x41\x76\x44\x31\x78\x71','\x69\x6d\x6b\x42\x6d\x76\x6c\x63\x51\x61\x71\x36\x75\x71','\x57\x4f\x68\x63\x51\x68\x62\x76\x57\x34\x52\x64\x4e\x38\x6b\x37\x6b\x61','\x57\x34\x53\x44\x64\x4a\x53\x74','\x57\x52\x46\x63\x50\x66\x71\x67\x6b\x47\x61\x34\x79\x71\x42\x64\x48\x43\x6b\x4e\x6b\x6d\x6f\x38','\x7a\x58\x56\x63\x50\x53\x6f\x65\x6b\x38\x6f\x34\x57\x4f\x72\x4b','\x75\x32\x75\x50\x71\x53\x6b\x47\x57\x34\x38','\x57\x51\x70\x64\x50\x53\x6b\x4d\x57\x37\x75\x38','\x57\x52\x42\x64\x4a\x38\x6f\x56\x67\x57\x57\x50\x57\x34\x34','\x41\x38\x6f\x41\x57\x51\x2f\x63\x53\x63\x70\x64\x55\x4d\x30','\x57\x52\x37\x64\x55\x38\x6f\x66\x57\x51\x50\x41\x42\x38\x6f\x43','\x57\x50\x69\x73\x57\x35\x46\x63\x54\x75\x50\x54\x62\x43\x6b\x2f','\x57\x4f\x43\x33\x57\x4f\x4e\x64\x56\x47\x5a\x63\x54\x43\x6b\x37\x57\x50\x38','\x6b\x38\x6b\x66\x57\x35\x6e\x64\x57\x4f\x52\x64\x53\x53\x6b\x43\x57\x37\x4f','\x57\x37\x78\x63\x47\x43\x6b\x4b\x57\x36\x66\x61\x57\x34\x43\x65\x57\x52\x30','\x63\x76\x31\x38\x57\x35\x48\x48\x71\x6d\x6b\x42','\x6f\x6d\x6b\x63\x57\x34\x50\x6f\x57\x4f\x52\x64\x55\x47','\x57\x34\x70\x63\x4d\x75\x42\x63\x48\x61','\x6e\x53\x6b\x5a\x57\x52\x6d\x45\x62\x49\x68\x63\x4d\x43\x6b\x4b','\x57\x37\x74\x64\x55\x6d\x6b\x59\x57\x37\x70\x64\x53\x57','\x57\x36\x70\x64\x53\x6d\x6b\x70\x57\x51\x53\x6e\x46\x38\x6f\x72\x57\x50\x65','\x57\x35\x34\x56\x65\x73\x69\x4f\x45\x43\x6b\x6b\x57\x34\x61','\x74\x76\x39\x38\x6d\x59\x74\x64\x4a\x73\x37\x63\x47\x71','\x57\x50\x4e\x64\x47\x6d\x6f\x2b\x57\x51\x6e\x7a','\x57\x36\x56\x64\x56\x38\x6b\x70\x57\x35\x4e\x64\x56\x61\x4a\x64\x51\x68\x69','\x57\x50\x68\x63\x52\x53\x6b\x47\x57\x50\x66\x44\x73\x63\x72\x2b','\x73\x66\x58\x64\x68\x6d\x6b\x54\x64\x76\x5a\x64\x4b\x47','\x77\x53\x6b\x5a\x69\x43\x6b\x79\x76\x43\x6f\x4b\x70\x53\x6f\x51','\x57\x34\x50\x39\x69\x38\x6f\x62\x74\x65\x38','\x68\x47\x61\x49\x42\x67\x64\x63\x4c\x4e\x5a\x64\x47\x49\x6e\x55\x57\x52\x48\x31\x69\x67\x34','\x57\x34\x5a\x63\x52\x4b\x34\x4d\x43\x57','\x46\x68\x72\x4a\x70\x72\x75','\x41\x4b\x46\x64\x53\x38\x6f\x4e','\x57\x4f\x6c\x63\x52\x59\x50\x4b\x57\x51\x66\x66\x57\x37\x43\x69','\x57\x37\x4b\x4f\x45\x38\x6b\x54\x41\x31\x4a\x64\x53\x6d\x6f\x43','\x57\x35\x46\x63\x4a\x74\x7a\x63\x57\x36\x76\x58','\x64\x38\x6f\x4a\x70\x6d\x6b\x57\x69\x47','\x57\x36\x4e\x64\x49\x43\x6b\x34\x57\x51\x65\x34','\x62\x53\x6b\x70\x6e\x30\x5a\x63\x51\x49\x69\x37\x72\x57','\x57\x51\x79\x74\x57\x34\x4e\x64\x51\x53\x6b\x6d\x65\x38\x6b\x73','\x57\x34\x4b\x45\x57\x37\x68\x63\x48\x71','\x74\x43\x6f\x57\x71\x43\x6b\x34\x57\x34\x31\x33\x6b\x47','\x41\x75\x44\x68\x65\x5a\x53','\x57\x51\x4a\x63\x56\x49\x58\x48\x57\x52\x75\x6d\x57\x35\x34\x7a','\x6a\x38\x6b\x63\x57\x35\x44\x61\x57\x50\x68\x64\x53\x71','\x64\x38\x6f\x4f\x57\x34\x58\x6b','\x73\x38\x6b\x4d\x6b\x6d\x6b\x79\x78\x38\x6f\x2b\x44\x53\x6f\x39','\x57\x35\x61\x45\x57\x37\x4a\x63\x4c\x38\x6f\x70\x63\x61','\x69\x38\x6b\x69\x57\x35\x71','\x75\x53\x6f\x6a\x57\x34\x61\x4b\x57\x52\x46\x63\x55\x6d\x6f\x52\x76\x47','\x7a\x67\x65\x35\x79\x38\x6f\x4b\x57\x35\x4b\x6e\x57\x52\x61','\x57\x37\x5a\x64\x55\x72\x66\x46\x44\x4b\x71\x53\x76\x57','\x70\x43\x6b\x38\x57\x52\x65\x71\x68\x49\x70\x63\x49\x6d\x6b\x4c','\x73\x4d\x38\x35\x7a\x6d\x6f\x4b\x57\x36\x47\x78\x57\x51\x4f','\x75\x53\x6f\x65\x57\x35\x75\x4c\x57\x52\x64\x64\x54\x53\x6f\x50\x64\x47','\x57\x4f\x68\x64\x48\x63\x56\x63\x53\x6d\x6b\x56\x78\x43\x6b\x4c\x6a\x71','\x6f\x65\x57\x4d\x6b\x77\x58\x6e\x67\x4e\x38','\x57\x37\x52\x64\x50\x53\x6b\x53\x57\x35\x52\x64\x56\x48\x4e\x64\x53\x31\x34','\x57\x34\x74\x64\x4c\x64\x6e\x77\x77\x57','\x57\x35\x33\x64\x48\x75\x50\x4a\x57\x35\x5a\x64\x55\x53\x6b\x51\x61\x71','\x41\x38\x6f\x6c\x68\x53\x6b\x79\x79\x33\x52\x63\x52\x53\x6b\x35','\x57\x37\x30\x2b\x44\x53\x6f\x2b\x46\x66\x64\x64\x52\x53\x6f\x41','\x57\x37\x64\x63\x4e\x53\x6b\x53\x71\x4c\x62\x54\x57\x50\x4c\x65\x6d\x32\x72\x45\x57\x51\x5a\x63\x4b\x57','\x57\x52\x4a\x64\x55\x53\x6f\x77\x57\x51\x50\x71\x78\x53\x6f\x77\x57\x36\x4f','\x57\x51\x6e\x66\x66\x49\x6e\x71\x57\x4f\x48\x30\x73\x61','\x6f\x6d\x6b\x79\x76\x6d\x6f\x4d\x6f\x32\x33\x63\x49\x6d\x6b\x4d\x57\x4f\x52\x63\x4b\x38\x6b\x6f','\x57\x50\x69\x70\x57\x37\x4a\x63\x51\x65\x35\x54\x63\x61','\x57\x37\x6c\x63\x4e\x75\x64\x63\x48\x76\x64\x63\x54\x73\x30\x4c','\x43\x6d\x6b\x30\x57\x52\x42\x63\x47\x61\x4e\x64\x47\x31\x66\x34','\x57\x36\x78\x64\x54\x43\x6f\x4a\x57\x35\x4a\x64\x52\x48\x52\x63\x55\x4c\x43','\x62\x53\x6f\x36\x6e\x38\x6b\x4d\x6f\x53\x6f\x5a\x57\x52\x4e\x63\x4f\x57','\x57\x35\x70\x63\x56\x30\x47\x38\x45\x38\x6f\x37\x63\x75\x57','\x57\x52\x70\x63\x51\x5a\x57\x4d\x57\x37\x47\x4f\x57\x34\x75\x76','\x57\x37\x70\x63\x4e\x53\x6b\x63\x57\x36\x62\x67\x57\x34\x53\x6e\x57\x52\x61','\x61\x30\x43\x59\x6c\x78\x31\x57\x78\x61','\x57\x51\x6c\x63\x55\x64\x44\x4b\x57\x51\x30\x72\x57\x34\x30\x74','\x57\x35\x6c\x63\x4b\x30\x42\x63\x4d\x4c\x68\x63\x53\x48\x43\x5a','\x70\x38\x6f\x5a\x57\x34\x58\x38\x57\x34\x30','\x78\x43\x6b\x2b\x70\x53\x6b\x43\x66\x71','\x57\x37\x79\x45\x46\x43\x6b\x69\x72\x57','\x44\x4d\x4f\x47\x7a\x6d\x6b\x75','\x57\x51\x78\x64\x4c\x62\x64\x63\x4d\x6d\x6b\x51','\x57\x37\x42\x64\x56\x38\x6b\x54','\x57\x52\x54\x6c\x65\x63\x6d','\x57\x52\x78\x63\x51\x59\x54\x4e\x57\x52\x71\x74\x57\x34\x65','\x79\x43\x6f\x43\x6d\x38\x6b\x2b\x43\x68\x6c\x63\x55\x6d\x6b\x49','\x71\x67\x65\x50\x79\x53\x6f\x54','\x57\x34\x74\x63\x4e\x30\x52\x63\x49\x65\x68\x63\x55\x67\x4b\x35','\x6f\x43\x6f\x68\x57\x34\x4c\x42\x57\x4f\x6c\x64\x51\x53\x6b\x72\x57\x36\x53','\x68\x4c\x66\x4f\x57\x35\x76\x59\x72\x43\x6b\x79\x57\x4f\x4b','\x57\x4f\x33\x63\x49\x74\x6e\x63\x57\x50\x53','\x57\x51\x2f\x63\x4c\x6d\x6f\x70\x76\x49\x37\x64\x4f\x74\x6a\x69','\x6a\x53\x6b\x33\x57\x51\x38\x45\x61\x74\x61','\x42\x6d\x6f\x66\x63\x38\x6b\x2f\x44\x4d\x37\x64\x50\x71','\x44\x65\x42\x64\x51\x43\x6f\x53','\x46\x30\x69\x34\x79\x6d\x6f\x65','\x41\x38\x6f\x41\x63\x6d\x6b\x36\x44\x32\x70\x63\x4f\x53\x6b\x4c','\x57\x36\x37\x63\x49\x38\x6b\x4d\x57\x36\x4c\x44\x57\x35\x57\x59\x57\x52\x43','\x57\x4f\x71\x4d\x57\x50\x2f\x64\x53\x47\x30','\x6b\x4c\x4a\x63\x4e\x31\x2f\x63\x4a\x61','\x57\x50\x37\x64\x54\x6d\x6f\x36\x57\x4f\x54\x68','\x71\x43\x6f\x4f\x73\x53\x6b\x58\x57\x34\x62\x6d\x6a\x76\x71','\x57\x51\x7a\x66\x63\x47','\x62\x53\x6b\x37\x57\x35\x37\x64\x48\x61','\x64\x67\x71\x4b\x42\x53\x6f\x56\x57\x35\x62\x65\x57\x52\x38','\x57\x50\x46\x63\x48\x75\x52\x63\x4e\x47\x78\x63\x50\x73\x30\x34','\x57\x36\x56\x64\x56\x58\x76\x78\x43\x66\x48\x59\x66\x47','\x63\x31\x57\x49\x6a\x57','\x57\x50\x47\x66\x57\x35\x52\x63\x54\x4c\x4c\x70\x68\x53\x6b\x56','\x57\x52\x78\x64\x56\x43\x6b\x72','\x57\x37\x33\x63\x47\x73\x50\x77\x57\x36\x75\x35\x57\x34\x30\x77','\x64\x38\x6f\x78\x57\x4f\x68\x63\x47\x58\x30','\x67\x43\x6b\x44\x57\x34\x78\x63\x51\x38\x6b\x51','\x76\x53\x6b\x6e\x70\x53\x6b\x6e\x77\x53\x6f\x5a\x70\x53\x6b\x47','\x67\x65\x57\x33\x6c\x65\x6e\x77\x76\x4c\x75','\x57\x50\x33\x63\x4b\x4e\x6e\x76\x57\x35\x46\x64\x4d\x61','\x57\x4f\x4e\x64\x4c\x49\x4a\x63\x56\x57','\x57\x34\x42\x63\x48\x53\x6b\x35\x57\x35\x62\x71','\x76\x38\x6b\x49\x67\x43\x6b\x72\x73\x43\x6f\x49\x6b\x6d\x6f\x4d','\x41\x6d\x6f\x7a\x6a\x53\x6b\x4a\x44\x61'];_0x1d36=function(){return _0x217dc6;};return _0x1d36();}_0x180d67[_0x6f0d6b(0x116,'\x57\x66\x44\x6f')]=0.05,_0x180d67[_0x6f0d6b(0x112,'\x25\x67\x25\x58')]=0.1,_0x180d67['\x69\x6e\x6e\x6f\x76\x61\x74\x65']=0.8,_0x180d67[_0x6f0d6b(0x110,'\x67\x38\x5b\x62')]=0.05,_0x180d67[_0x6f0d6b(0x105,'\x23\x6c\x37\x4a')+_0x6f0d6b(0xc3,'\x62\x39\x76\x26')+_0x6f0d6b(0xa9,'\x7a\x55\x6e\x4d')]=0.3,_0x180d67[_0x6f0d6b(0xee,'\x6c\x59\x65\x50')]=_0x6f0d6b(0xc6,'\x48\x49\x69\x4b')+_0x6f0d6b(0x120,'\x24\x47\x49\x62'),_0x180d67[_0x6f0d6b(0x15f,'\x66\x48\x7a\x49')+'\x69\x6f\x6e']='\x53\x79\x73\x74\x65\x6d\x20\x69'+_0x6f0d6b(0x15e,'\x57\x66\x44\x6f')+_0x6f0d6b(0xc0,'\x79\x54\x51\x4f')+_0x6f0d6b(0x14b,'\x39\x38\x51\x5b')+'\x65\x61\x74\x75\x72\x65\x73\x20'+_0x6f0d6b(0x143,'\x7a\x55\x6e\x4d')+_0x6f0d6b(0x11c,'\x54\x39\x4c\x44')+'\x2e';var _0x57e731={};_0x57e731[_0x6f0d6b(0x135,'\x50\x51\x30\x29')]=0.4,_0x57e731[_0x6f0d6b(0x14d,'\x56\x63\x2a\x73')]=0.35,_0x57e731[_0x6f0d6b(0x111,'\x6c\x59\x65\x50')]=0.2,_0x57e731['\x65\x78\x70\x6c\x6f\x72\x65']=0.05,_0x57e731[_0x6f0d6b(0x184,'\x48\x49\x69\x4b')+_0x6f0d6b(0x15b,'\x5d\x51\x75\x59')+_0x6f0d6b(0xf7,'\x72\x25\x39\x69')]=0.7,_0x57e731['\x6c\x61\x62\x65\x6c']=_0x6f0d6b(0x138,'\x77\x4b\x44\x70')+'\x67',_0x57e731['\x64\x65\x73\x63\x72\x69\x70\x74'+_0x6f0d6b(0x136,'\x57\x66\x44\x6f')]=_0x6f0d6b(0xb2,'\x64\x56\x24\x4f')+_0x6f0d6b(0xfa,'\x56\x63\x2a\x73')+_0x6f0d6b(0xe4,'\x25\x67\x25\x58')+'\x73\x20\x6f\x6e\x20\x73\x74\x61'+_0x6f0d6b(0x161,'\x64\x56\x24\x4f')+'\x6e\x64\x20\x72\x6f\x62\x75\x73'+_0x6f0d6b(0xb1,'\x35\x5a\x5e\x35');var _0x2f9491={};_0x2f9491[_0x6f0d6b(0x162,'\x6d\x53\x71\x52')]=0.8,_0x2f9491[_0x6f0d6b(0xe1,'\x6d\x53\x71\x52')]=0.18,_0x2f9491['\x69\x6e\x6e\x6f\x76\x61\x74\x65']=0x0,_0x2f9491[_0x6f0d6b(0xde,'\x28\x64\x47\x5a')]=0.02,_0x2f9491[_0x6f0d6b(0xb3,'\x35\x5a\x5e\x35')+_0x6f0d6b(0x14f,'\x5a\x2a\x30\x34')+'\x6f\x6c\x64']=0x1,_0x2f9491[_0x6f0d6b(0x12a,'\x57\x45\x77\x58')]=_0x6f0d6b(0x13e,'\x23\x6c\x37\x4a')+_0x6f0d6b(0x183,'\x28\x64\x47\x5a'),_0x2f9491[_0x6f0d6b(0x11b,'\x30\x4b\x23\x54')+_0x6f0d6b(0x158,'\x39\x38\x51\x5b')]=_0x6f0d6b(0x107,'\x43\x28\x77\x7a')+_0x6f0d6b(0x10b,'\x35\x5a\x5e\x35')+_0x6f0d6b(0xc5,'\x36\x49\x6e\x25')+_0x6f0d6b(0xf4,'\x48\x49\x69\x4b')+_0x6f0d6b(0x16e,'\x77\x4b\x44\x70')+_0x6f0d6b(0x13c,'\x36\x49\x6e\x25')+_0x6f0d6b(0x154,'\x4c\x50\x79\x59');var _0x48cb95={};_0x48cb95[_0x6f0d6b(0xf9,'\x7a\x23\x50\x4e')]=0.6,_0x48cb95[_0x6f0d6b(0x131,'\x58\x44\x6c\x32')]=0.22,_0x48cb95[_0x6f0d6b(0x181,'\x74\x4c\x72\x49')]=0.15,_0x48cb95[_0x6f0d6b(0xff,'\x50\x51\x30\x29')]=0.03,_0x48cb95[_0x6f0d6b(0x18b,'\x51\x6a\x61\x38')+_0x6f0d6b(0x14f,'\x5a\x2a\x30\x34')+_0x6f0d6b(0xa5,'\x6c\x59\x65\x50')]=0.8,_0x48cb95[_0x6f0d6b(0xa0,'\x23\x6c\x37\x4a')]=_0x6f0d6b(0x127,'\x58\x44\x6c\x32')+_0x6f0d6b(0x113,'\x57\x66\x44\x6f')+'\x69\x6f\x6e',_0x48cb95[_0x6f0d6b(0x187,'\x74\x4c\x72\x49')+_0x6f0d6b(0x16c,'\x44\x76\x28\x38')]=_0x6f0d6b(0x174,'\x52\x64\x73\x50')+'\x63\x6c\x65\x73\x2e\x20\x50\x72'+_0x6f0d6b(0x114,'\x5a\x2a\x30\x34')+_0x6f0d6b(0xc4,'\x43\x28\x77\x7a')+_0x6f0d6b(0x128,'\x7a\x55\x6e\x4d')+_0x6f0d6b(0xf2,'\x57\x45\x77\x58')+_0x6f0d6b(0x185,'\x77\x4b\x44\x70')+_0x6f0d6b(0xd4,'\x28\x64\x47\x5a')+'\x67\x2e';function _0x4f1c(_0x1a6e3c,_0x5cd634){_0x1a6e3c=_0x1a6e3c-(-0x7a0+0xca*0x2e+-0x1c0c);var _0x424069=_0x1d36();var _0xd2fba8=_0x424069[_0x1a6e3c];if(_0x4f1c['\x77\x6b\x48\x63\x75\x4c']===undefined){var _0x5dd39e=function(_0x5388e7){var _0x5916ec='\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';var _0x4c8fb3='',_0x55becd='',_0x327483=_0x4c8fb3+_0x5dd39e,_0xe78fc1=(''+function(){return-0x3*-0x895+0x1*-0x735+-0x128a;})['\x69\x6e\x64\x65\x78\x4f\x66']('\x0a')!==-(-0x1782+-0x24a*0x4+-0x1*-0x20ab);for(var _0x4b08e0=-0x1*0x2629+-0x1d43+0x436c,_0x20ab23,_0x401e1c,_0x8bd582=0x2*0x5d6+0x1991+-0x253d;_0x401e1c=_0x5388e7['\x63\x68\x61\x72\x41\x74'](_0x8bd582++);~_0x401e1c&&(_0x20ab23=_0x4b08e0%(0x13dc+-0x131b+-0xbd)?_0x20ab23*(0x15e4+-0xeb0*0x1+-0x6f4)+_0x401e1c:_0x401e1c,_0x4b08e0++%(-0x25da+-0xb5*0x37+0x4cc1))?_0x4c8fb3+=_0xe78fc1||_0x327483['\x63\x68\x61\x72\x43\x6f\x64\x65\x41\x74'](_0x8bd582+(0x1*-0x1e6a+-0x557*0x7+-0xd91*-0x5))-(-0x1*0x1711+-0xe16+0x2531)!==0x1*0x2064+0x52a*-0x1+-0x22*0xcd?String['\x66\x72\x6f\x6d\x43\x68\x61\x72\x43\x6f\x64\x65'](-0x1cea+0x2*0x1345+0x8a1*-0x1&_0x20ab23>>(-(0x208*0xd+-0x1*-0xec2+-0x2928)*_0x4b08e0&-0x1a42+0x4d5*-0x7+0x3c1b)):_0x4b08e0:-0x3*-0x72b+-0x105d*-0x1+-0x25de){_0x401e1c=_0x5916ec['\x69\x6e\x64\x65\x78\x4f\x66'](_0x401e1c);}for(var _0x11030e=0xe9b+0x8*-0x2a5+0x68d*0x1,_0x48547d=_0x4c8fb3['\x6c\x65\x6e\x67\x74\x68'];_0x11030e<_0x48547d;_0x11030e++){_0x55becd+='\x25'+('\x30\x30'+_0x4c8fb3['\x63\x68\x61\x72\x43\x6f\x64\x65\x41\x74'](_0x11030e)['\x74\x6f\x53\x74\x72\x69\x6e\x67'](0x7b3+-0x1937+0x1194))['\x73\x6c\x69\x63\x65'](-(-0x5*0x387+-0x1*0x1371+-0x1*-0x2516));}return decodeURIComponent(_0x55becd);};var _0x460e9c=function(_0x1b1ea0,_0x57b4d2){var _0x5b463a=[],_0x480dd5=-0x1ae9*0x1+-0xe63+-0x371*-0xc,_0x1c54ef,_0x596967='';_0x1b1ea0=_0x5dd39e(_0x1b1ea0);var _0x5dbdc0;for(_0x5dbdc0=0x168d+0x29*0x79+0x1*-0x29ee;_0x5dbdc0<0x1b01+0x61*-0x17+-0x114a;_0x5dbdc0++){_0x5b463a[_0x5dbdc0]=_0x5dbdc0;}for(_0x5dbdc0=0x6da+-0x1*-0x106+-0x7e0;_0x5dbdc0<-0xe0d+0x223e+0x1*-0x1331;_0x5dbdc0++){_0x480dd5=(_0x480dd5+_0x5b463a[_0x5dbdc0]+_0x57b4d2['\x63\x68\x61\x72\x43\x6f\x64\x65\x41\x74'](_0x5dbdc0%_0x57b4d2['\x6c\x65\x6e\x67\x74\x68']))%(-0x16*0x45+-0x203*-0xb+-0xf33),_0x1c54ef=_0x5b463a[_0x5dbdc0],_0x5b463a[_0x5dbdc0]=_0x5b463a[_0x480dd5],_0x5b463a[_0x480dd5]=_0x1c54ef;}_0x5dbdc0=0x1*0x1af3+-0xb1*-0x5+0x1c*-0x116,_0x480dd5=-0x5*-0x380+-0x89*-0x25+-0x3*0xc6f;for(var _0xcd9f77=-0x89*0x5+0x1*0xdf5+-0xb48;_0xcd9f77<_0x1b1ea0['\x6c\x65\x6e\x67\x74\x68'];_0xcd9f77++){_0x5dbdc0=(_0x5dbdc0+(0x83+-0x1877+0x1*0x17f5))%(0x5*-0x577+0x22*0x32+0x15af),_0x480dd5=(_0x480dd5+_0x5b463a[_0x5dbdc0])%(-0x625+0x439*0x7+-0x166a),_0x1c54ef=_0x5b463a[_0x5dbdc0],_0x5b463a[_0x5dbdc0]=_0x5b463a[_0x480dd5],_0x5b463a[_0x480dd5]=_0x1c54ef,_0x596967+=String['\x66\x72\x6f\x6d\x43\x68\x61\x72\x43\x6f\x64\x65'](_0x1b1ea0['\x63\x68\x61\x72\x43\x6f\x64\x65\x41\x74'](_0xcd9f77)^_0x5b463a[(_0x5b463a[_0x5dbdc0]+_0x5b463a[_0x480dd5])%(-0x17d7+0x21d3+0x8fc*-0x1)]);}return _0x596967;};_0x4f1c['\x68\x75\x68\x48\x51\x4d']=_0x460e9c,_0x4f1c['\x6e\x66\x47\x66\x47\x6b']={},_0x4f1c['\x77\x6b\x48\x63\x75\x4c']=!![];}var _0x5bc833=_0x424069[-0x23b0+-0x1*0x1bcc+0x3f7c],_0x3868ee=_0x1a6e3c+_0x5bc833,_0x5a7c7e=_0x4f1c['\x6e\x66\x47\x66\x47\x6b'][_0x3868ee];if(!_0x5a7c7e){if(_0x4f1c['\x75\x52\x62\x5a\x44\x4a']===undefined){var _0x1aae3f=function(_0x5b043b){this['\x54\x6d\x4d\x71\x4b\x6b']=_0x5b043b,this['\x7a\x4d\x61\x50\x6e\x65']=[-0xcd2+0x1ce1*0x1+0x100e*-0x1,-0x8c3*0x1+0x1*-0x1ca5+0x2568*0x1,-0x146b*-0x1+-0x563+-0x1*0xf08],this['\x6d\x77\x72\x72\x57\x51']=function(){return'\x6e\x65\x77\x53\x74\x61\x74\x65';},this['\x48\x44\x58\x4a\x6b\x74']='\x5c\x77\x2b\x20\x2a\x5c\x28\x5c\x29\x20\x2a\x7b\x5c\x77\x2b\x20\x2a',this['\x71\x59\x66\x6c\x72\x41']='\x5b\x27\x7c\x22\x5d\x2e\x2b\x5b\x27\x7c\x22\x5d\x3b\x3f\x20\x2a\x7d';};_0x1aae3f['\x70\x72\x6f\x74\x6f\x74\x79\x70\x65']['\x77\x78\x53\x52\x64\x47']=function(){var _0x6b4d67=new RegExp(this['\x48\x44\x58\x4a\x6b\x74']+this['\x71\x59\x66\x6c\x72\x41']),_0x32282f=_0x6b4d67['\x74\x65\x73\x74'](this['\x6d\x77\x72\x72\x57\x51']['\x74\x6f\x53\x74\x72\x69\x6e\x67']())?--this['\x7a\x4d\x61\x50\x6e\x65'][0x1b92+-0x1727*-0x1+-0x32b8]:--this['\x7a\x4d\x61\x50\x6e\x65'][0x1120+0xff5+-0x2115];return this['\x4e\x68\x6a\x67\x4a\x57'](_0x32282f);},_0x1aae3f['\x70\x72\x6f\x74\x6f\x74\x79\x70\x65']['\x4e\x68\x6a\x67\x4a\x57']=function(_0xdcfce6){if(!Boolean(~_0xdcfce6))return _0xdcfce6;return this['\x6d\x59\x6d\x65\x6d\x4e'](this['\x54\x6d\x4d\x71\x4b\x6b']);},_0x1aae3f['\x70\x72\x6f\x74\x6f\x74\x79\x70\x65']['\x6d\x59\x6d\x65\x6d\x4e']=function(_0x1b1ac8){for(var _0x5c4642=-0xb61+-0xd*-0xf6+-0x1*0x11d,_0x462ce9=this['\x7a\x4d\x61\x50\x6e\x65']['\x6c\x65\x6e\x67\x74\x68'];_0x5c4642<_0x462ce9;_0x5c4642++){this['\x7a\x4d\x61\x50\x6e\x65']['\x70\x75\x73\x68'](Math['\x72\x6f\x75\x6e\x64'](Math['\x72\x61\x6e\x64\x6f\x6d']())),_0x462ce9=this['\x7a\x4d\x61\x50\x6e\x65']['\x6c\x65\x6e\x67\x74\x68'];}return _0x1b1ac8(this['\x7a\x4d\x61\x50\x6e\x65'][0x1b*0x53+0x21c+-0xadd]);},(''+function(){return-0x1*0xcca+0x184e+0x43*-0x2c;})['\x69\x6e\x64\x65\x78\x4f\x66']('\x0a')===-(0x3*-0x65d+0x2449+0x1b*-0xa3)&&new _0x1aae3f(_0x4f1c)['\x77\x78\x53\x52\x64\x47'](),_0x4f1c['\x75\x52\x62\x5a\x44\x4a']=!![];}_0xd2fba8=_0x4f1c['\x68\x75\x68\x48\x51\x4d'](_0xd2fba8,_0x5cd634),_0x4f1c['\x6e\x66\x47\x66\x47\x6b'][_0x3868ee]=_0xd2fba8;}else _0xd2fba8=_0x5a7c7e;return _0xd2fba8;}var _0x51bd54={};_0x51bd54[_0x6f0d6b(0x179,'\x59\x6b\x73\x25')]=0.55,_0x51bd54['\x6f\x70\x74\x69\x6d\x69\x7a\x65']=0.25,_0x51bd54['\x69\x6e\x6e\x6f\x76\x61\x74\x65']=0.05,_0x51bd54[_0x6f0d6b(0xdd,'\x36\x49\x6e\x25')]=0.15,_0x51bd54[_0x6f0d6b(0x167,'\x5a\x2a\x30\x34')+_0x6f0d6b(0x17c,'\x4c\x50\x79\x59')+_0x6f0d6b(0x189,'\x5d\x51\x75\x59')]=0.9,_0x51bd54[_0x6f0d6b(0x168,'\x25\x67\x25\x58')]=_0x6f0d6b(0x11a,'\x48\x49\x69\x4b')+_0x6f0d6b(0xcb,'\x52\x64\x73\x50'),_0x51bd54[_0x6f0d6b(0x186,'\x39\x38\x51\x5b')+'\x69\x6f\x6e']=_0x6f0d6b(0x149,'\x44\x25\x32\x4f')+_0x6f0d6b(0xbe,'\x57\x45\x77\x58')+_0x6f0d6b(0x14e,'\x58\x44\x6c\x32')+_0x6f0d6b(0x137,'\x36\x49\x6e\x25')+'\x69\x73\x74\x69\x6e\x67\x20\x63'+_0x6f0d6b(0xba,'\x75\x23\x46\x6f')+_0x6f0d6b(0xfc,'\x36\x49\x6e\x25')+_0x6f0d6b(0x146,'\x44\x76\x28\x38')+_0x6f0d6b(0x16f,'\x44\x25\x32\x4f')+_0x6f0d6b(0x170,'\x59\x37\x66\x7a');var _0x1fa8c2={};_0x1fa8c2[_0x6f0d6b(0x118,'\x6d\x53\x71\x52')]=_0x1bc2d8,_0x1fa8c2[_0x6f0d6b(0x101,'\x30\x4b\x23\x54')]=_0x180d67,_0x1fa8c2[_0x6f0d6b(0xc9,'\x6d\x53\x71\x52')]=_0x57e731,_0x1fa8c2[_0x6f0d6b(0x139,'\x59\x37\x66\x7a')+'\x6e\x6c\x79']=_0x2f9491,_0x1fa8c2[_0x6f0d6b(0xcc,'\x77\x4b\x44\x70')+_0x6f0d6b(0x12d,'\x28\x64\x47\x5a')]=_0x48cb95,_0x1fa8c2[_0x6f0d6b(0x15d,'\x44\x25\x32\x4f')+_0x6f0d6b(0x159,'\x44\x76\x28\x38')]=_0x51bd54;var _0x4e7418=_0x1fa8c2;function _0x2dea86(){var _0x595460=_0x6f0d6b,_0x4b7b13={};_0x4b7b13[_0x595460(0x155,'\x7a\x55\x6e\x4d')]=_0x595460(0x132,'\x57\x66\x44\x6f'),_0x4b7b13[_0x595460(0x17b,'\x5a\x2a\x30\x34')]=_0x595460(0x13f,'\x39\x38\x51\x5b')+_0x595460(0xc8,'\x67\x65\x37\x6a')+_0x595460(0x164,'\x35\x5a\x5e\x35'),_0x4b7b13['\x59\x4d\x52\x6b\x51']=function(_0x225dbc,_0x43fcef){return _0x225dbc<_0x43fcef;},_0x4b7b13[_0x595460(0x17d,'\x5d\x51\x75\x59')]=_0x595460(0xbb,'\x44\x25\x32\x4f'),_0x4b7b13[_0x595460(0x125,'\x54\x39\x4c\x44')]=_0x595460(0x16b,'\x53\x38\x37\x41')+'\x6e',_0x4b7b13[_0x595460(0x130,'\x54\x39\x4c\x44')]=_0x595460(0x16a,'\x67\x38\x5b\x62'),_0x4b7b13['\x50\x4b\x71\x6d\x49']=_0x595460(0xe9,'\x72\x25\x39\x69');var _0x1ac068=_0x4b7b13;try{if(_0x595460(0x140,'\x59\x37\x66\x7a')===_0x1ac068[_0x595460(0xb0,'\x56\x63\x2a\x73')]){var _0x4603c3=_0x5bb7db[_0x595460(0x10e,'\x79\x54\x51\x4f')](__dirname,'\x2e\x2e','\x2e\x2e',_0x1ac068[_0x595460(0xc7,'\x58\x44\x6c\x32')],_0x1ac068['\x5a\x68\x6f\x58\x64']),_0x55c1ad=_0x5bb7db['\x72\x65\x73\x6f\x6c\x76\x65'](__dirname,'\x2e\x2e','\x2e\x2e','\x2e\x2e','\x2e\x2e',_0x1ac068[_0x595460(0xc7,'\x58\x44\x6c\x32')],_0x1ac068[_0x595460(0x165,'\x77\x4b\x44\x70')],_0x595460(0x11f,'\x62\x39\x76\x26')+_0x595460(0xd2,'\x67\x38\x5b\x62')+_0x595460(0x17a,'\x47\x68\x74\x26')),_0x3a665a=[_0x4603c3,_0x55c1ad];for(var _0x3c11be=0xa9+0xda+-0x1*0x183;_0x1ac068[_0x595460(0xce,'\x39\x38\x51\x5b')](_0x3c11be,_0x3a665a[_0x595460(0x129,'\x52\x64\x73\x50')]);_0x3c11be++){if(_0x163ae0[_0x595460(0x152,'\x44\x25\x32\x4f')+'\x6e\x63'](_0x3a665a[_0x3c11be])){if(_0x595460(0x109,'\x30\x4b\x23\x54')!==_0x1ac068[_0x595460(0x157,'\x47\x68\x74\x26')]){var _0x4365b6=JSON[_0x595460(0x124,'\x56\x63\x2a\x73')](_0x163ae0[_0x595460(0xb9,'\x4c\x50\x79\x59')+_0x595460(0xf3,'\x50\x51\x30\x29')](_0x3a665a[_0x3c11be],_0x1ac068[_0x595460(0x18d,'\x59\x6b\x73\x25')]));return _0x4365b6&&Number[_0x595460(0xd7,'\x44\x25\x32\x4f')](_0x4365b6[_0x595460(0x12c,'\x43\x28\x77\x7a')+'\x6e\x74'])?_0x4365b6[_0x595460(0x180,'\x51\x6a\x61\x38')+'\x6e\x74']:0xd33*-0x1+-0x1d2d+0x2a60;}else return _0x1e213a[_0x595460(0x12e,'\x50\x51\x30\x29')](_0x45487c);}}}else{var _0x5ddb00=_0x2be521[_0x595460(0x15a,'\x58\x44\x6c\x32')](_0x3def34,'\x2e\x2e','\x2e\x2e',_0x595460(0xed,'\x75\x23\x46\x6f'),_0x595460(0xa7,'\x44\x25\x32\x4f')+_0x595460(0x177,'\x4c\x50\x79\x59')+_0x595460(0x133,'\x41\x25\x24\x7a')),_0x220ecd=_0x4ee442[_0x595460(0xfd,'\x44\x76\x28\x38')](_0x43a625,'\x2e\x2e','\x2e\x2e','\x2e\x2e','\x2e\x2e',_0x1ac068[_0x595460(0xe0,'\x6c\x59\x65\x50')],_0x595460(0x166,'\x5d\x51\x75\x59')+'\x6e',_0x1ac068[_0x595460(0x153,'\x41\x25\x24\x7a')]),_0x51184c=[_0x5ddb00,_0x220ecd];for(var _0x2fc4b8=-0x970+0x6*0x233+0x3c2*-0x1;_0x1ac068[_0x595460(0x12b,'\x48\x49\x69\x4b')](_0x2fc4b8,_0x51184c[_0x595460(0xe8,'\x41\x25\x24\x7a')]);_0x2fc4b8++){if(_0x185e5d[_0x595460(0x14c,'\x57\x45\x77\x58')+'\x6e\x63'](_0x51184c[_0x2fc4b8])){var _0x245e10=_0x4a6894['\x70\x61\x72\x73\x65'](_0x1dc35e[_0x595460(0x178,'\x23\x6c\x37\x4a')+'\x53\x79\x6e\x63'](_0x51184c[_0x2fc4b8],'\x75\x74\x66\x38'));return _0x245e10&&_0x2f3119[_0x595460(0xb8,'\x23\x6c\x37\x4a')](_0x245e10[_0x595460(0x145,'\x67\x38\x5b\x62')+'\x6e\x74'])?_0x245e10[_0x595460(0x18a,'\x54\x39\x4c\x44')+'\x6e\x74']:-0x5*-0x4d4+-0xe7e+-0x9a6;}}}}catch(_0x3c8cf2){}return 0x1*-0x25bf+-0x4*0x876+-0x17dd*-0x3;}function _0x2b128f(_0xa9391b){var _0x7def35=_0x6f0d6b,_0x297ef4={'\x51\x43\x64\x77\x71':'\x73\x74\x65\x61\x64\x79\x2d\x73'+'\x74\x61\x74\x65','\x69\x47\x41\x4a\x41':function(_0x3e2426,_0x5a096a){return _0x3e2426(_0x5a096a);},'\x55\x77\x43\x56\x53':_0x7def35(0x121,'\x4c\x50\x79\x59'),'\x74\x76\x67\x64\x7a':function(_0x5bc6e0,_0x1cb1bf){return _0x5bc6e0(_0x1cb1bf);},'\x4a\x4d\x41\x58\x76':function(_0xc2f40b,_0x5348f0){return _0xc2f40b===_0x5348f0;},'\x6b\x68\x71\x45\x78':_0x7def35(0x126,'\x35\x5a\x5e\x35'),'\x70\x57\x6f\x67\x78':_0x7def35(0x13a,'\x6d\x53\x71\x52'),'\x77\x68\x52\x42\x43':function(_0x4abb0e,_0x31514c){return _0x4abb0e===_0x31514c;},'\x79\x47\x6f\x55\x6a':_0x7def35(0x171,'\x23\x6c\x37\x4a'),'\x78\x7a\x45\x4c\x4e':function(_0x1bc218,_0x24d419){return _0x1bc218&&_0x24d419;},'\x69\x41\x6c\x53\x47':function(_0x23c1a7){return _0x23c1a7();},'\x76\x54\x4c\x62\x67':function(_0x270cf5,_0x5c41a9){return _0x270cf5<=_0x5c41a9;},'\x79\x43\x55\x50\x79':_0x7def35(0xab,'\x53\x38\x37\x41')+_0x7def35(0xbf,'\x50\x57\x41\x43'),'\x72\x44\x52\x44\x59':function(_0x4788cb,_0x25010e){return _0x4788cb!==_0x25010e;},'\x46\x44\x6c\x76\x43':_0x7def35(0x13b,'\x77\x4b\x44\x70')+_0x7def35(0xb6,'\x43\x28\x77\x7a')+'\x74\x65','\x57\x72\x4d\x6d\x56':function(_0x2fe592,_0x38d3b4){return _0x2fe592!==_0x38d3b4;},'\x67\x72\x59\x45\x63':_0x7def35(0x18c,'\x77\x4b\x44\x70'),'\x56\x6a\x68\x54\x57':function(_0x36297c,_0x3d11c7){return _0x36297c===_0x3d11c7;}},_0xecf850=_0xa9391b&&Array[_0x7def35(0x148,'\x6c\x59\x65\x50')](_0xa9391b[_0x7def35(0xa6,'\x72\x25\x39\x69')])?_0xa9391b[_0x7def35(0x115,'\x66\x48\x7a\x49')]:[],_0x1b24b0=_0x297ef4['\x69\x47\x41\x4a\x41'](String,process.env.EVOLVE_STRATEGY||_0x297ef4[_0x7def35(0x100,'\x28\x64\x47\x5a')])[_0x7def35(0xf6,'\x59\x37\x66\x7a')+_0x7def35(0x173,'\x75\x23\x46\x6f')]()[_0x7def35(0x117,'\x44\x25\x32\x4f')](),_0x2bdbf6=![];if(!process.env.EVOLVE_STRATEGY){var _0x2dd078=_0x297ef4[_0x7def35(0xe3,'\x57\x66\x44\x6f')](String,process.env.FORCE_INNOVATION||process.env.EVOLVE_FORCE_INNOVATION||'')[_0x7def35(0x11e,'\x39\x38\x51\x5b')+_0x7def35(0xa3,'\x57\x66\x44\x6f')]();_0x297ef4[_0x7def35(0xc2,'\x62\x39\x76\x26')](_0x2dd078,_0x297ef4[_0x7def35(0x119,'\x39\x38\x51\x5b')])&&(_0x1b24b0=_0x297ef4[_0x7def35(0xe7,'\x30\x4b\x23\x54')],_0x2bdbf6=!![]);}var _0x28ee53=!process.env.EVOLVE_STRATEGY||_0x297ef4[_0x7def35(0x10d,'\x75\x23\x46\x6f')](_0x1b24b0,_0x7def35(0x13d,'\x47\x68\x74\x26'))||_0x1b24b0===_0x297ef4[_0x7def35(0xec,'\x79\x54\x51\x4f')];if(_0x297ef4[_0x7def35(0xd8,'\x39\x38\x51\x5b')](_0x28ee53,!_0x2bdbf6)){var _0x1b87d1=_0x297ef4[_0x7def35(0xe6,'\x53\x38\x37\x41')](_0x2dea86);_0x1b87d1>0xdf2+-0x69b+-0x757&&_0x297ef4[_0x7def35(0xf1,'\x23\x33\x4f\x68')](_0x1b87d1,0x12d*0x9+-0xa7b*-0x1+-0x150b)&&(_0x1b24b0=_0x297ef4[_0x7def35(0xf5,'\x67\x65\x37\x6a')]);if(_0x297ef4['\x72\x44\x52\x44\x59'](_0xecf850[_0x7def35(0x150,'\x23\x6c\x37\x4a')](_0x297ef4['\x46\x44\x6c\x76\x43']),-(-0xd*0x2a5+-0x19a7+0x3c09)))_0x1b24b0=_0x297ef4[_0x7def35(0x175,'\x72\x25\x39\x69')];else _0x297ef4[_0x7def35(0xd0,'\x67\x38\x5b\x62')](_0xecf850[_0x7def35(0x12f,'\x53\x38\x37\x41')](_0x7def35(0x151,'\x58\x44\x6c\x32')+_0x7def35(0x108,'\x59\x6b\x73\x25')+'\x74\x69\x6f\x6e'),-(-0x1cef+0x1*-0x2ba+0x1faa))&&(_0x297ef4[_0x7def35(0x176,'\x47\x7a\x45\x4f')](_0x7def35(0x160,'\x58\x44\x6c\x32'),_0x297ef4[_0x7def35(0xaa,'\x4c\x50\x79\x59')])?_0x1b24b0=_0x7def35(0x134,'\x4c\x50\x79\x59')+_0x7def35(0x103,'\x47\x68\x74\x26'):_0x418462=_0x297ef4['\x51\x43\x64\x77\x71']);}if(_0x297ef4[_0x7def35(0x156,'\x7a\x23\x50\x4e')](_0x1b24b0,_0x297ef4['\x79\x47\x6f\x55\x6a']))_0x1b24b0=_0x297ef4['\x55\x77\x43\x56\x53'];var _0x20d5a7=_0x4e7418[_0x1b24b0]||_0x4e7418[_0x297ef4[_0x7def35(0xf8,'\x47\x7a\x45\x4f')]],_0x1f2a6b={};return _0x1f2a6b['\x6e\x61\x6d\x65']=_0x1b24b0,Object[_0x7def35(0xb5,'\x67\x6e\x6c\x2a')]({},_0x20d5a7,_0x1f2a6b);}function _0x571dee(){var _0x235197=_0x6f0d6b;return Object[_0x235197(0x16d,'\x51\x6a\x61\x38')](_0x4e7418);}var _0x8e597f={};_0x8e597f[_0x6f0d6b(0xbd,'\x67\x6e\x6c\x2a')+_0x6f0d6b(0xad,'\x52\x64\x73\x50')]=_0x2b128f,_0x8e597f[_0x6f0d6b(0x104,'\x62\x39\x76\x26')+_0x6f0d6b(0x142,'\x5d\x51\x75\x59')]=_0x571dee,_0x8e597f[_0x6f0d6b(0x102,'\x47\x7a\x45\x4f')+'\x45\x53']=_0x4e7418,module[_0x6f0d6b(0xd1,'\x67\x38\x5b\x62')]=_0x8e597f;
@@ -1,575 +0,0 @@
1
- // ---------------------------------------------------------------------------
2
- // taskReceiver -- pulls external tasks from Hub, auto-claims, and injects
3
- // them as high-priority signals into the evolution loop.
4
- //
5
- // v2: Smart task selection with difficulty-aware ROI scoring and capability
6
- // matching via memory graph history.
7
- // ---------------------------------------------------------------------------
8
-
9
- const { getNodeId, buildHubHeaders, buildNodeScopedHubHeaders } = require('./a2aProtocol');
10
- const { resolveHubUrl } = require('../config');
11
- const { hubFetch } = require('./hubFetch');
12
- const { createTask, validateTask } = require('./schemas/task');
13
-
14
- function buildAuthHeaders() {
15
- const buildHeaders = buildNodeScopedHubHeaders || buildHubHeaders;
16
- return buildHeaders();
17
- }
18
-
19
- const TASK_STRATEGY = String(process.env.TASK_STRATEGY || 'balanced').toLowerCase();
20
- const TASK_MIN_CAPABILITY_MATCH = Number(process.env.TASK_MIN_CAPABILITY_MATCH) || 0.1;
21
-
22
- // Scoring weights by strategy
23
- const STRATEGY_WEIGHTS = {
24
- greedy: { roi: 0.10, capability: 0.05, completion: 0.05, bounty: 0.80 },
25
- balanced: { roi: 0.35, capability: 0.30, completion: 0.20, bounty: 0.15 },
26
- conservative: { roi: 0.25, capability: 0.45, completion: 0.25, bounty: 0.05 },
27
- };
28
-
29
- /**
30
- * Fetch available tasks from Hub via the A2A fetch endpoint.
31
- * Optionally piggybacks proactive questions in the payload for Hub to create bounties.
32
- *
33
- * @param {object} [opts]
34
- * @param {Array<{ question: string, amount?: number, signals?: string[] }>} [opts.questions]
35
- * @returns {{ tasks: Array, questions_created?: Array }}
36
- */
37
- async function fetchTasks(opts) {
38
- const o = opts || {};
39
- const nodeId = getNodeId();
40
- if (!nodeId) return { tasks: [] };
41
-
42
- try {
43
- const payload = {
44
- tasks_only: true,
45
- include_tasks: true,
46
- };
47
-
48
- if (Array.isArray(o.questions) && o.questions.length > 0) {
49
- payload.questions = o.questions;
50
- }
51
-
52
- const msg = {
53
- protocol: 'gep-a2a',
54
- protocol_version: '1.0.0',
55
- message_type: 'fetch',
56
- message_id: `msg_${Date.now()}_${Math.random().toString(36).slice(2, 8)}`,
57
- sender_id: nodeId,
58
- timestamp: new Date().toISOString(),
59
- payload,
60
- };
61
-
62
- const url = `${resolveHubUrl().replace(/\/+$/, '')}/a2a/fetch`;
63
- const controller = new AbortController();
64
- const timer = setTimeout(() => controller.abort(), 8000);
65
-
66
- const res = await hubFetch(url, {
67
- method: 'POST',
68
- headers: buildAuthHeaders(),
69
- body: JSON.stringify(msg),
70
- signal: controller.signal,
71
- });
72
- clearTimeout(timer);
73
-
74
- if (!res.ok) return { tasks: [] };
75
-
76
- const data = await res.json();
77
- const respPayload = data.payload || data;
78
- const tasks = Array.isArray(respPayload.tasks)
79
- ? respPayload.tasks.map(function(t) { return createTask(t); }).filter(function(t) {
80
- try { return validateTask(t); } catch (e) {
81
- console.warn('[TaskReceiver] dropping invalid task:', e.message, t.task_id || '(no id)');
82
- return false;
83
- }
84
- })
85
- : [];
86
- const result = { tasks };
87
-
88
- if (respPayload.questions_created) {
89
- result.questions_created = respPayload.questions_created;
90
- }
91
-
92
- // LessonL: extract relevant lessons from Hub response
93
- if (Array.isArray(respPayload.relevant_lessons) && respPayload.relevant_lessons.length > 0) {
94
- result.relevant_lessons = respPayload.relevant_lessons;
95
- }
96
-
97
- return result;
98
- } catch (err) {
99
- console.warn("[TaskReceiver] fetchTasks failed:", err && err.message ? err.message : err);
100
- return { tasks: [] };
101
- }
102
- }
103
-
104
- // ---------------------------------------------------------------------------
105
- // Capability matching: how well this agent's history matches a task's signals
106
- // ---------------------------------------------------------------------------
107
-
108
- function parseSignals(raw) {
109
- if (!raw) return [];
110
- return String(raw).split(',').map(function(s) { return s.trim().toLowerCase(); }).filter(Boolean);
111
- }
112
-
113
- function jaccard(a, b) {
114
- if (!a.length || !b.length) return 0;
115
- var setA = new Set(a);
116
- var setB = new Set(b);
117
- var inter = 0;
118
- for (var v of setB) { if (setA.has(v)) inter++; }
119
- return inter / (setA.size + setB.size - inter);
120
- }
121
-
122
- /**
123
- * Estimate how well this agent can handle a task based on memory graph history.
124
- * Returns 0.0 - 1.0 where 1.0 = strong match with high success rate.
125
- *
126
- * @param {object} task - task from Hub (has .signals field)
127
- * @param {Array} memoryEvents - from tryReadMemoryGraphEvents()
128
- * @returns {number}
129
- */
130
- function estimateCapabilityMatch(task, memoryEvents) {
131
- if (!Array.isArray(memoryEvents) || memoryEvents.length === 0) return 0.5;
132
-
133
- var taskSignals = parseSignals(task.signals || task.title);
134
- if (taskSignals.length === 0) return 0.5;
135
-
136
- var successBySignalKey = {};
137
- var totalBySignalKey = {};
138
- var allSignals = {};
139
-
140
- for (var i = 0; i < memoryEvents.length; i++) {
141
- var ev = memoryEvents[i];
142
- if (!ev || ev.type !== 'MemoryGraphEvent' || ev.kind !== 'outcome') continue;
143
-
144
- var sigs = (ev.signal && Array.isArray(ev.signal.signals)) ? ev.signal.signals : [];
145
- var key = (ev.signal && ev.signal.key) ? String(ev.signal.key) : '';
146
- var status = (ev.outcome && ev.outcome.status) ? String(ev.outcome.status) : '';
147
-
148
- for (var j = 0; j < sigs.length; j++) {
149
- allSignals[sigs[j].toLowerCase()] = true;
150
- }
151
-
152
- if (!key) continue;
153
- if (!totalBySignalKey[key]) { totalBySignalKey[key] = 0; successBySignalKey[key] = 0; }
154
- totalBySignalKey[key]++;
155
- if (status === 'success') successBySignalKey[key]++;
156
- }
157
-
158
- // Jaccard overlap between task signals and all signals this agent has worked with
159
- var allSigArr = Object.keys(allSignals);
160
- var overlapScore = jaccard(taskSignals, allSigArr);
161
-
162
- // Weighted success rate across matching signal keys
163
- var weightedSuccess = 0;
164
- var weightSum = 0;
165
- for (var sk in totalBySignalKey) {
166
- // Reconstruct signals from the key for comparison
167
- var skParts = sk.split('|').map(function(s) { return s.trim().toLowerCase(); }).filter(Boolean);
168
- var sim = jaccard(taskSignals, skParts);
169
- if (sim < 0.15) continue;
170
-
171
- var total = totalBySignalKey[sk];
172
- var succ = successBySignalKey[sk] || 0;
173
- var rate = (succ + 1) / (total + 2); // Laplace smoothing
174
- weightedSuccess += rate * sim;
175
- weightSum += sim;
176
- }
177
-
178
- var successScore = weightSum > 0 ? (weightedSuccess / weightSum) : 0.5;
179
-
180
- // Combine: 60% success rate history + 40% signal overlap
181
- return Math.min(1, overlapScore * 0.4 + successScore * 0.6);
182
- }
183
-
184
- // ---------------------------------------------------------------------------
185
- // Local fallback difficulty estimation when Hub doesn't provide complexity_score
186
- // ---------------------------------------------------------------------------
187
-
188
- function localDifficultyEstimate(task) {
189
- var signals = parseSignals(task.signals);
190
- var signalFactor = Math.min(signals.length / 8, 1);
191
-
192
- var titleWords = (task.title || '').split(/\s+/).filter(Boolean).length;
193
- var titleFactor = Math.min(titleWords / 15, 1);
194
-
195
- return Math.min(1, signalFactor * 0.6 + titleFactor * 0.4);
196
- }
197
-
198
- // ---------------------------------------------------------------------------
199
- // Commitment deadline estimation -- based on task difficulty
200
- // ---------------------------------------------------------------------------
201
-
202
- const MIN_COMMITMENT_MS = 5 * 60 * 1000; // 5 min (Hub minimum)
203
- const MAX_COMMITMENT_MS = 24 * 60 * 60 * 1000; // 24 h (Hub maximum)
204
-
205
- const DIFFICULTY_DURATION_MAP = [
206
- { threshold: 0.3, durationMs: 15 * 60 * 1000 }, // low: 15 min
207
- { threshold: 0.5, durationMs: 30 * 60 * 1000 }, // medium: 30 min
208
- { threshold: 0.7, durationMs: 60 * 60 * 1000 }, // high: 60 min
209
- { threshold: 1.0, durationMs: 120 * 60 * 1000 }, // very high: 120 min
210
- ];
211
-
212
- /**
213
- * Estimate a reasonable commitment deadline for a task.
214
- * Returns an ISO-8601 date string or null if estimation fails.
215
- *
216
- * @param {object} task - task from Hub
217
- * @returns {string|null}
218
- */
219
- function estimateCommitmentDeadline(task) {
220
- if (!task) return null;
221
-
222
- var difficulty = (task.complexity_score != null)
223
- ? Number(task.complexity_score)
224
- : localDifficultyEstimate(task);
225
-
226
- var durationMs = DIFFICULTY_DURATION_MAP[DIFFICULTY_DURATION_MAP.length - 1].durationMs;
227
- for (var i = 0; i < DIFFICULTY_DURATION_MAP.length; i++) {
228
- if (difficulty <= DIFFICULTY_DURATION_MAP[i].threshold) {
229
- durationMs = DIFFICULTY_DURATION_MAP[i].durationMs;
230
- break;
231
- }
232
- }
233
-
234
- durationMs = Math.max(MIN_COMMITMENT_MS, Math.min(MAX_COMMITMENT_MS, durationMs));
235
-
236
- var deadline = new Date(Date.now() + durationMs);
237
-
238
- if (task.expires_at) {
239
- var expiresAt = new Date(task.expires_at);
240
- if (!isNaN(expiresAt.getTime()) && expiresAt < deadline) {
241
- var remaining = expiresAt.getTime() - Date.now();
242
- if (remaining < MIN_COMMITMENT_MS) return null;
243
- var adjusted = new Date(expiresAt.getTime() - 60000);
244
- if (adjusted.getTime() - Date.now() < MIN_COMMITMENT_MS) return null;
245
- deadline = adjusted;
246
- }
247
- }
248
-
249
- return deadline.toISOString();
250
- }
251
-
252
- // ---------------------------------------------------------------------------
253
- // Score a single task for this agent
254
- // ---------------------------------------------------------------------------
255
-
256
- /**
257
- * @param {object} task - task from Hub
258
- * @param {number} capabilityMatch - from estimateCapabilityMatch()
259
- * @returns {{ composite: number, factors: object }}
260
- */
261
- function scoreTask(task, capabilityMatch) {
262
- var w = STRATEGY_WEIGHTS[TASK_STRATEGY] || STRATEGY_WEIGHTS.balanced;
263
-
264
- var difficulty = (task.complexity_score != null) ? task.complexity_score : localDifficultyEstimate(task);
265
- var bountyAmount = task.bounty_amount || 0;
266
- var completionRate = (task.historical_completion_rate != null) ? task.historical_completion_rate : 0.5;
267
-
268
- // ROI: bounty per unit difficulty (higher = better value)
269
- var roiRaw = bountyAmount / (difficulty + 0.1);
270
- var roiNorm = Math.min(roiRaw / 200, 1); // normalize: 200-credit ROI = max
271
-
272
- // Bounty absolute: normalize against a reference max
273
- var bountyNorm = Math.min(bountyAmount / 100, 1);
274
-
275
- var composite =
276
- w.roi * roiNorm +
277
- w.capability * capabilityMatch +
278
- w.completion * completionRate +
279
- w.bounty * bountyNorm;
280
-
281
- return {
282
- composite: Math.round(composite * 1000) / 1000,
283
- factors: {
284
- roi: Math.round(roiNorm * 100) / 100,
285
- capability: Math.round(capabilityMatch * 100) / 100,
286
- completion: Math.round(completionRate * 100) / 100,
287
- bounty: Math.round(bountyNorm * 100) / 100,
288
- difficulty: Math.round(difficulty * 100) / 100,
289
- },
290
- };
291
- }
292
-
293
- // ---------------------------------------------------------------------------
294
- // Enhanced task selection with scoring
295
- // ---------------------------------------------------------------------------
296
-
297
- /**
298
- * Pick the best task from a list using composite scoring.
299
- * @param {Array} tasks
300
- * @param {Array} [memoryEvents] - from tryReadMemoryGraphEvents()
301
- * @returns {object|null}
302
- */
303
- function selectBestTask(tasks, memoryEvents) {
304
- if (!Array.isArray(tasks) || tasks.length === 0) return null;
305
-
306
- var nodeId = getNodeId();
307
-
308
- // Already-claimed tasks for this node always take top priority (resume work)
309
- var myClaimedTask = tasks.find(function(t) {
310
- return t.status === 'claimed' && t.claimed_by === nodeId;
311
- });
312
- if (myClaimedTask) return myClaimedTask;
313
-
314
- // Filter to open tasks only
315
- var open = tasks.filter(function(t) { return t.status === 'open'; });
316
- if (open.length === 0) return null;
317
-
318
- // Legacy greedy mode: preserve old behavior exactly
319
- if (TASK_STRATEGY === 'greedy' && (!memoryEvents || memoryEvents.length === 0)) {
320
- var bountyTasks = open.filter(function(t) { return t.bounty_id; });
321
- if (bountyTasks.length > 0) {
322
- bountyTasks.sort(function(a, b) { return (b.bounty_amount || 0) - (a.bounty_amount || 0); });
323
- return bountyTasks[0];
324
- }
325
- return open[0];
326
- }
327
-
328
- // Score all open tasks
329
- var scored = open.map(function(t) {
330
- var cap = estimateCapabilityMatch(t, memoryEvents || []);
331
- var result = scoreTask(t, cap);
332
- return { task: t, composite: result.composite, factors: result.factors, capability: cap };
333
- });
334
-
335
- // Filter by minimum capability match (unless conservative skipping is off)
336
- if (TASK_MIN_CAPABILITY_MATCH > 0) {
337
- var filtered = scored.filter(function(s) { return s.capability >= TASK_MIN_CAPABILITY_MATCH; });
338
- if (filtered.length > 0) scored = filtered;
339
- }
340
-
341
- scored.sort(function(a, b) { return b.composite - a.composite; });
342
-
343
- // Log top 3 candidates for debugging
344
- var top3 = scored.slice(0, 3);
345
- for (var i = 0; i < top3.length; i++) {
346
- var s = top3[i];
347
- console.log('[TaskStrategy] #' + (i + 1) + ' "' + (s.task.title || s.task.task_id || '').slice(0, 50) + '" score=' + s.composite + ' ' + JSON.stringify(s.factors));
348
- }
349
-
350
- return scored[0] ? scored[0].task : null;
351
- }
352
-
353
- /**
354
- * Claim a task on the Hub.
355
- * @param {string} taskId
356
- * @param {{ commitment_deadline?: string }} [opts]
357
- * @returns {boolean} true if claim succeeded
358
- */
359
- async function claimTask(taskId, opts) {
360
- const nodeId = getNodeId();
361
- if (!nodeId || !taskId) return false;
362
-
363
- try {
364
- const url = `${resolveHubUrl().replace(/\/+$/, '')}/a2a/task/claim`;
365
- const controller = new AbortController();
366
- const timer = setTimeout(() => controller.abort(), 5000);
367
-
368
- const body = { task_id: taskId, node_id: nodeId };
369
- if (opts && opts.commitment_deadline) {
370
- body.commitment_deadline = opts.commitment_deadline;
371
- }
372
-
373
- const res = await hubFetch(url, {
374
- method: 'POST',
375
- headers: buildAuthHeaders(),
376
- body: JSON.stringify(body),
377
- signal: controller.signal,
378
- });
379
- clearTimeout(timer);
380
-
381
- return res.ok;
382
- } catch {
383
- return false;
384
- }
385
- }
386
-
387
- /**
388
- * Complete a task on the Hub with the result asset ID.
389
- * @param {string} taskId
390
- * @param {string} assetId
391
- * @returns {boolean}
392
- */
393
- async function completeTask(taskId, assetId) {
394
- const nodeId = getNodeId();
395
- if (!nodeId || !taskId || !assetId) return false;
396
-
397
- try {
398
- const url = `${resolveHubUrl().replace(/\/+$/, '')}/a2a/task/complete`;
399
- const controller = new AbortController();
400
- const timer = setTimeout(() => controller.abort(), 5000);
401
-
402
- const res = await hubFetch(url, {
403
- method: 'POST',
404
- headers: buildAuthHeaders(),
405
- body: JSON.stringify({ task_id: taskId, asset_id: assetId, node_id: nodeId }),
406
- signal: controller.signal,
407
- });
408
- clearTimeout(timer);
409
-
410
- return res.ok;
411
- } catch {
412
- return false;
413
- }
414
- }
415
-
416
- /**
417
- * Extract signals from a task to inject into evolution cycle.
418
- * @param {object} task
419
- * @returns {string[]} signals array
420
- */
421
- function taskToSignals(task) {
422
- if (!task) return [];
423
- const signals = [];
424
- if (task.signals) {
425
- const parts = String(task.signals).split(',').map(s => s.trim()).filter(Boolean);
426
- signals.push(...parts);
427
- }
428
- if (task.title) {
429
- const words = String(task.title).toLowerCase().split(/\s+/).filter(w => w.length >= 3);
430
- for (const w of words.slice(0, 5)) {
431
- if (!signals.includes(w)) signals.push(w);
432
- }
433
- }
434
- signals.push('external_task');
435
- if (task.bounty_id) signals.push('bounty_task');
436
- return signals;
437
- }
438
-
439
- // ---------------------------------------------------------------------------
440
- // Worker Pool task operations (POST /a2a/work/*)
441
- // These use a separate API from bounty tasks and return assignment objects.
442
- // ---------------------------------------------------------------------------
443
-
444
- async function claimWorkerTask(taskId) {
445
- const nodeId = getNodeId();
446
- if (!nodeId || !taskId) return null;
447
-
448
- try {
449
- const url = `${resolveHubUrl().replace(/\/+$/, '')}/a2a/work/claim`;
450
- const controller = new AbortController();
451
- const timer = setTimeout(() => controller.abort(), 5000);
452
-
453
- const res = await hubFetch(url, {
454
- method: 'POST',
455
- headers: buildAuthHeaders(),
456
- body: JSON.stringify({ task_id: taskId, node_id: nodeId }),
457
- signal: controller.signal,
458
- });
459
- clearTimeout(timer);
460
-
461
- if (!res.ok) return null;
462
- return await res.json();
463
- } catch {
464
- return null;
465
- }
466
- }
467
-
468
- async function completeWorkerTask(assignmentId, resultAssetId) {
469
- const nodeId = getNodeId();
470
- if (!nodeId || !assignmentId || !resultAssetId) return false;
471
-
472
- try {
473
- const url = `${resolveHubUrl().replace(/\/+$/, '')}/a2a/work/complete`;
474
- const controller = new AbortController();
475
- const timer = setTimeout(() => controller.abort(), 5000);
476
-
477
- const res = await hubFetch(url, {
478
- method: 'POST',
479
- headers: buildAuthHeaders(),
480
- body: JSON.stringify({ assignment_id: assignmentId, node_id: nodeId, result_asset_id: resultAssetId }),
481
- signal: controller.signal,
482
- });
483
- clearTimeout(timer);
484
-
485
- return res.ok;
486
- } catch {
487
- return false;
488
- }
489
- }
490
-
491
- /**
492
- * Atomic claim+complete for deferred worker tasks.
493
- * Called from solidify after a successful evolution cycle so we never hold
494
- * an assignment that might expire before completion.
495
- *
496
- * @param {string} taskId
497
- * @param {string} resultAssetId - sha256:... of the published capsule
498
- * @returns {{ ok: boolean, assignment_id?: string, error?: string }}
499
- */
500
- async function claimAndCompleteWorkerTask(taskId, resultAssetId) {
501
- const nodeId = getNodeId();
502
- if (!nodeId || !taskId || !resultAssetId) {
503
- return { ok: false, error: 'missing_params' };
504
- }
505
-
506
- const assignment = await claimWorkerTask(taskId);
507
- if (!assignment) {
508
- return { ok: false, error: 'claim_failed' };
509
- }
510
-
511
- const assignmentId = assignment.id || assignment.assignment_id;
512
- if (!assignmentId) {
513
- return { ok: false, error: 'no_assignment_id' };
514
- }
515
-
516
- const completed = await completeWorkerTask(assignmentId, resultAssetId);
517
- if (!completed) {
518
- console.warn(`[WorkerPool] Claimed assignment ${assignmentId} but complete failed -- will expire on Hub`);
519
- return { ok: false, error: 'complete_failed', assignment_id: assignmentId };
520
- }
521
-
522
- return { ok: true, assignment_id: assignmentId };
523
- }
524
-
525
- // ---------------------------------------------------------------------------
526
- // PRIVACY_PARAMS detection -- checks if a task body contains a sealed
527
- // computing block and extracts tool/blob references for the evolution loop.
528
- // ---------------------------------------------------------------------------
529
-
530
- /**
531
- * Check if a task requires privacy/sealed computing.
532
- * @param {object} task
533
- * @returns {{ toolId: string, blobIds: string[] } | null}
534
- */
535
- function detectPrivacyTask(task) {
536
- if (!task) return null;
537
- const body = task.body || task.description || '';
538
- try {
539
- const { parsePrivacyParams } = require('./privacyClient');
540
- return parsePrivacyParams(body);
541
- } catch {
542
- return null;
543
- }
544
- }
545
-
546
- /**
547
- * Augment taskToSignals output with privacy-specific signals when applicable.
548
- * @param {object} task
549
- * @returns {string[]}
550
- */
551
- function taskToSignalsWithPrivacy(task) {
552
- const signals = taskToSignals(task);
553
- const pp = detectPrivacyTask(task);
554
- if (pp) {
555
- if (!signals.includes('privacy_computing')) signals.push('privacy_computing');
556
- if (!signals.includes('sealed_tool')) signals.push('sealed_tool');
557
- }
558
- return signals;
559
- }
560
-
561
- module.exports = {
562
- fetchTasks,
563
- selectBestTask,
564
- estimateCapabilityMatch,
565
- scoreTask,
566
- claimTask,
567
- completeTask,
568
- taskToSignals,
569
- taskToSignalsWithPrivacy,
570
- detectPrivacyTask,
571
- claimWorkerTask,
572
- completeWorkerTask,
573
- claimAndCompleteWorkerTask,
574
- estimateCommitmentDeadline,
575
- };