@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.
- package/README.md +27 -564
- package/bin/evolver-llm-proxy.js +3 -0
- package/bin/evolver-mcp.js +2 -0
- package/bin/evolver-proxy.js +3 -0
- package/bin/evolver.js +4 -0
- package/index.js +1 -3670
- package/package.json +32 -62
- package/CONTRIBUTING.md +0 -19
- package/LICENSE +0 -641
- package/README.ja-JP.md +0 -521
- package/README.ko-KR.md +0 -520
- package/README.zh-CN.md +0 -531
- package/SKILL.md +0 -365
- package/assets/cover.png +0 -0
- package/assets/gep/genes.seed.json +0 -496
- package/conformance/savings-core/constants.json +0 -30
- package/conformance/savings-core/golden-vectors.json +0 -333
- package/scripts/a2a_export.js +0 -63
- package/scripts/a2a_ingest.js +0 -79
- package/scripts/a2a_promote.js +0 -118
- package/scripts/analyze_by_skill.js +0 -121
- package/scripts/build_binaries.js +0 -479
- package/scripts/check-changelog.js +0 -166
- package/scripts/extract_log.js +0 -85
- package/scripts/generate_history.js +0 -75
- package/scripts/gep_append_event.js +0 -96
- package/scripts/gep_personality_report.js +0 -234
- package/scripts/human_report.js +0 -147
- package/scripts/recall-verify-report.js +0 -234
- package/scripts/recover_loop.js +0 -61
- package/scripts/refresh_stars_badge.js +0 -168
- package/scripts/seed-merchants.js +0 -91
- package/scripts/skill2recipes.js +0 -118
- package/scripts/suggest_version.js +0 -89
- package/scripts/validate-modules.js +0 -38
- package/scripts/validate-suite.js +0 -78
- package/src/adapters/claudeCode.js +0 -194
- package/src/adapters/codex.js +0 -216
- package/src/adapters/cursor.js +0 -91
- package/src/adapters/hookAdapter.js +0 -469
- package/src/adapters/kiro.js +0 -195
- package/src/adapters/opencode.js +0 -326
- package/src/adapters/scripts/_lockPaths.js +0 -74
- package/src/adapters/scripts/_memoryFiltering.js +0 -35
- package/src/adapters/scripts/_runtimePaths.js +0 -440
- package/src/adapters/scripts/evolver-session-end.js +0 -321
- package/src/adapters/scripts/evolver-session-start.js +0 -587
- package/src/adapters/scripts/evolver-signal-detect.js +0 -98
- package/src/adapters/scripts/evolver-task-recall.js +0 -173
- package/src/atp/atpExecute.js +0 -283
- package/src/atp/atpTaskPickup.js +0 -233
- package/src/atp/autoBuyer.js +0 -382
- package/src/atp/autoDeliver.js +0 -215
- package/src/atp/cli.js +0 -354
- package/src/atp/cliAutobuyPrompt.js +0 -154
- package/src/atp/consumerAgent.js +0 -157
- package/src/atp/defaultHandler.js +0 -69
- package/src/atp/heartbeatSignalsHandler.js +0 -254
- package/src/atp/hubClient.js +0 -317
- package/src/atp/index.js +0 -38
- package/src/atp/merchantAgent.js +0 -118
- package/src/atp/protocol.js +0 -41
- package/src/atp/questionComposer.js +0 -133
- package/src/atp/serviceHelper.js +0 -92
- package/src/canary.js +0 -13
- package/src/config.js +0 -351
- package/src/evolve/guards.js +0 -1
- package/src/evolve/pipeline/collect.js +0 -1
- package/src/evolve/pipeline/dispatch.js +0 -1
- package/src/evolve/pipeline/enrich.js +0 -1
- package/src/evolve/pipeline/hub.js +0 -1
- package/src/evolve/pipeline/select.js +0 -1
- package/src/evolve/pipeline/signals.js +0 -1
- package/src/evolve/utils.js +0 -1
- package/src/evolve.js +0 -1
- package/src/experiment/agentRunner.js +0 -229
- package/src/experiment/cli.js +0 -159
- package/src/experiment/comparison.js +0 -233
- package/src/experiment/metrics.js +0 -75
- package/src/forceUpdate.js +0 -991
- package/src/gep/a2a.js +0 -173
- package/src/gep/a2aProtocol.js +0 -1
- package/src/gep/analyzer.js +0 -35
- package/src/gep/antiAbuseTelemetry.js +0 -1
- package/src/gep/assetCallLog.js +0 -197
- package/src/gep/assetStore.js +0 -723
- package/src/gep/assets.js +0 -36
- package/src/gep/autoDistillConv.js +0 -1
- package/src/gep/autoDistillLlm.js +0 -1
- package/src/gep/bridge.js +0 -138
- package/src/gep/candidateEval.js +0 -1
- package/src/gep/candidates.js +0 -1
- package/src/gep/claimNudge.js +0 -121
- package/src/gep/cliContracts.js +0 -1190
- package/src/gep/contentHash.js +0 -1
- package/src/gep/conversationDistiller.js +0 -1
- package/src/gep/conversationSniffer.js +0 -1
- package/src/gep/crypto.js +0 -1
- package/src/gep/curriculum.js +0 -1
- package/src/gep/deviceId.js +0 -1
- package/src/gep/directoryClient.js +0 -115
- package/src/gep/envFingerprint.js +0 -1
- package/src/gep/epigenetics.js +0 -1
- package/src/gep/execBridge.js +0 -1
- package/src/gep/executionTrace.js +0 -291
- package/src/gep/explore.js +0 -1
- package/src/gep/featureFlags.js +0 -121
- package/src/gep/gitOps.js +0 -265
- package/src/gep/hash.js +0 -1
- package/src/gep/hostErrorClassifier.js +0 -34
- package/src/gep/hubFetch.js +0 -1
- package/src/gep/hubReview.js +0 -1
- package/src/gep/hubSearch.js +0 -1
- package/src/gep/hubVerify.js +0 -1
- package/src/gep/idleScheduler.js +0 -400
- package/src/gep/issueReporter.js +0 -416
- package/src/gep/learningSignals.js +0 -1
- package/src/gep/llmReview.js +0 -92
- package/src/gep/localStateAwareness.js +0 -243
- package/src/gep/mailboxTransport.js +0 -119
- package/src/gep/memoryGraph.js +0 -1
- package/src/gep/memoryGraphAdapter.js +0 -1
- package/src/gep/mutation.js +0 -1
- package/src/gep/narrativeMemory.js +0 -1
- package/src/gep/oauthLogin.js +0 -181
- package/src/gep/openPRRegistry.js +0 -1
- package/src/gep/paths.js +0 -522
- package/src/gep/personality.js +0 -1
- package/src/gep/policyCheck.js +0 -1
- package/src/gep/portable.js +0 -103
- package/src/gep/privacyClient.js +0 -235
- package/src/gep/prompt.js +0 -1
- package/src/gep/questionGenerator.js +0 -518
- package/src/gep/recallInject.js +0 -1
- package/src/gep/recallVerifier.js +0 -1
- package/src/gep/reflection.js +0 -1
- package/src/gep/sanitize.js +0 -264
- package/src/gep/savingsCore.js +0 -1
- package/src/gep/schemas/capsule.js +0 -170
- package/src/gep/schemas/gene.js +0 -154
- package/src/gep/schemas/index.js +0 -8
- package/src/gep/schemas/protocol.js +0 -51
- package/src/gep/schemas/task.js +0 -74
- package/src/gep/selector.js +0 -1
- package/src/gep/selfPR.js +0 -469
- package/src/gep/signals.js +0 -776
- package/src/gep/skill2gep.js +0 -1056
- package/src/gep/skill2gepAudit.js +0 -303
- package/src/gep/skill2recipes.js +0 -511
- package/src/gep/skillDistiller.js +0 -1
- package/src/gep/skillPublisher.js +0 -358
- package/src/gep/solidify.js +0 -1
- package/src/gep/strategy.js +0 -1
- package/src/gep/taskReceiver.js +0 -575
- package/src/gep/tokenSavings.js +0 -1
- package/src/gep/trajectoryExport.js +0 -1
- package/src/gep/validationReport.js +0 -55
- package/src/gep/validator/index.js +0 -411
- package/src/gep/validator/reporter.js +0 -210
- package/src/gep/validator/sandboxExecutor.js +0 -480
- package/src/gep/validator/stakeBootstrap.js +0 -357
- package/src/gep/workspaceKeychain.js +0 -1
- package/src/ops/cleanup.js +0 -80
- package/src/ops/commentary.js +0 -60
- package/src/ops/health_check.js +0 -104
- package/src/ops/index.js +0 -11
- package/src/ops/innovation.js +0 -67
- package/src/ops/lifecycle.js +0 -798
- package/src/ops/self_repair.js +0 -76
- package/src/ops/skills_monitor.js +0 -147
- package/src/ops/trigger.js +0 -33
- package/src/proxy/clientSettings.js +0 -405
- package/src/proxy/envelope.js +0 -59
- package/src/proxy/extensions/dmHandler.js +0 -45
- package/src/proxy/extensions/sessionHandler.js +0 -141
- package/src/proxy/extensions/skillUpdater.js +0 -64
- package/src/proxy/extensions/traceControl.js +0 -1
- package/src/proxy/index.js +0 -1395
- package/src/proxy/inject.js +0 -1
- package/src/proxy/lifecycle/manager.js +0 -1568
- package/src/proxy/mailbox/state.js +0 -207
- package/src/proxy/mailbox/store.js +0 -602
- package/src/proxy/router/cache_passthrough.js +0 -26
- package/src/proxy/router/features.js +0 -84
- package/src/proxy/router/gemini_route.js +0 -154
- package/src/proxy/router/messages_route.js +0 -535
- package/src/proxy/router/model_router.js +0 -113
- package/src/proxy/router/models_route.js +0 -52
- package/src/proxy/router/ollama_route.js +0 -103
- package/src/proxy/router/responses_route.js +0 -170
- package/src/proxy/router/vertex_route.js +0 -110
- package/src/proxy/server/http.js +0 -363
- package/src/proxy/server/routes.js +0 -558
- package/src/proxy/server/settings.js +0 -115
- package/src/proxy/sync/engine.js +0 -179
- package/src/proxy/sync/inbound.js +0 -211
- package/src/proxy/sync/outbound.js +0 -361
- package/src/proxy/task/monitor.js +0 -131
- package/src/proxy/trace/extractor.js +0 -1
- package/src/proxy/trace/usage.js +0 -1
- package/src/solo/breaker.js +0 -25
- package/src/solo/gitGuard.js +0 -65
- package/src/webui/client/clientJs/assets.js +0 -111
- package/src/webui/client/clientJs/bootstrap.js +0 -92
- package/src/webui/client/clientJs/common.js +0 -77
- package/src/webui/client/clientJs/i18n.js +0 -366
- package/src/webui/client/clientJs/index.js +0 -35
- package/src/webui/client/clientJs/interactions.js +0 -351
- package/src/webui/client/clientJs/overview.js +0 -152
- package/src/webui/client/clientJs/personality.js +0 -285
- package/src/webui/client/clientJs/pipelines.js +0 -330
- package/src/webui/client/indexHtml.js +0 -221
- package/src/webui/client/static.js +0 -23
- package/src/webui/client/stylesCss.js +0 -639
- package/src/webui/client/vendor/README.md +0 -15
- package/src/webui/client/vendor/echarts.min.js +0 -45
- package/src/webui/index.js +0 -14
- package/src/webui/observer/assets.js +0 -146
- package/src/webui/observer/index.js +0 -37
- package/src/webui/observer/interactions.js +0 -127
- package/src/webui/observer/jsonl.js +0 -75
- package/src/webui/observer/paths.js +0 -46
- package/src/webui/observer/personality.js +0 -43
- package/src/webui/observer/pipelineEvents.js +0 -58
- package/src/webui/observer/redact.js +0 -63
- package/src/webui/observer/runs.js +0 -356
- package/src/webui/observer/safety.js +0 -57
- package/src/webui/observer/skills.js +0 -70
- package/src/webui/observer/status.js +0 -71
- package/src/webui/server/http.js +0 -138
- package/src/webui/server/routes.js +0 -41
|
@@ -1 +0,0 @@
|
|
|
1
|
-
var _0x232e96=_0x3b2a;function _0x3b2a(_0x430669,_0x4cb88f){_0x430669=_0x430669-(-0x1568+-0x54*0x1+0x1*0x16e1);var _0x3002ec=_0x328b();var _0x1dc506=_0x3002ec[_0x430669];if(_0x3b2a['\x7a\x7a\x76\x74\x51\x6d']===undefined){var _0x3b8a4e=function(_0x1f9493){var _0x535ca5='\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 _0x163cc2='',_0x11b9bd='',_0x3a5994=_0x163cc2+_0x3b8a4e,_0xc0a5f1=(''+function(){return-0x233+-0x165f+-0xaa*-0x25;})['\x69\x6e\x64\x65\x78\x4f\x66']('\x0a')!==-(0x1401+0x1adf+0x39b*-0xd);for(var _0x482c10=-0x9b*-0x6+0xcae+-0x1050,_0x23843a,_0x1c80a1,_0x3113da=0xddc+0x3*0x99e+0xb*-0x3e2;_0x1c80a1=_0x1f9493['\x63\x68\x61\x72\x41\x74'](_0x3113da++);~_0x1c80a1&&(_0x23843a=_0x482c10%(0x21af*-0x1+0x1*0x1c76+-0x53d*-0x1)?_0x23843a*(-0x29a+0x1*-0xfea+0x12c4)+_0x1c80a1:_0x1c80a1,_0x482c10++%(-0x11b1+0x1*0x1a13+-0x85e))?_0x163cc2+=_0xc0a5f1||_0x3a5994['\x63\x68\x61\x72\x43\x6f\x64\x65\x41\x74'](_0x3113da+(-0x237b+0x1f68+0x41d))-(-0x35*-0x23+-0x6*-0x493+-0x3*0xb8d)!==0x2ee+-0x1a79+0x178b?String['\x66\x72\x6f\x6d\x43\x68\x61\x72\x43\x6f\x64\x65'](-0x1cd9+0xf8*0x14+0x86*0x14&_0x23843a>>(-(0xa76+0x7*-0x55d+0x1b17)*_0x482c10&-0xc80*-0x2+-0xb*-0x95+-0x1f61)):_0x482c10:-0x3*-0xc01+0xfe4+-0x33e7){_0x1c80a1=_0x535ca5['\x69\x6e\x64\x65\x78\x4f\x66'](_0x1c80a1);}for(var _0x29ae5c=0x13ee+-0x1583+0x5*0x51,_0x577ddf=_0x163cc2['\x6c\x65\x6e\x67\x74\x68'];_0x29ae5c<_0x577ddf;_0x29ae5c++){_0x11b9bd+='\x25'+('\x30\x30'+_0x163cc2['\x63\x68\x61\x72\x43\x6f\x64\x65\x41\x74'](_0x29ae5c)['\x74\x6f\x53\x74\x72\x69\x6e\x67'](0x195d+0x1e0e+-0x375b))['\x73\x6c\x69\x63\x65'](-(0x75+-0x20a7+-0x55e*-0x6));}return decodeURIComponent(_0x11b9bd);};var _0x3469aa=function(_0x2af88e,_0x3eb5f3){var _0x83b739=[],_0x2521c4=0x1c9c+0x1289*-0x2+0x876,_0x5c4ba4,_0x221d51='';_0x2af88e=_0x3b8a4e(_0x2af88e);var _0x427dc0;for(_0x427dc0=0x1*-0x2ea+0x2*-0x9+0x2fc;_0x427dc0<0x24aa+-0x228+-0x2182;_0x427dc0++){_0x83b739[_0x427dc0]=_0x427dc0;}for(_0x427dc0=0x3d*-0x1f+0x466*0x5+-0xe9b;_0x427dc0<-0x34f*0x5+-0x2301*0x1+0x348c;_0x427dc0++){_0x2521c4=(_0x2521c4+_0x83b739[_0x427dc0]+_0x3eb5f3['\x63\x68\x61\x72\x43\x6f\x64\x65\x41\x74'](_0x427dc0%_0x3eb5f3['\x6c\x65\x6e\x67\x74\x68']))%(0x70f+0x7f*0x10+0xdff*-0x1),_0x5c4ba4=_0x83b739[_0x427dc0],_0x83b739[_0x427dc0]=_0x83b739[_0x2521c4],_0x83b739[_0x2521c4]=_0x5c4ba4;}_0x427dc0=0x1*0x373+-0x247*-0xb+-0x1c80,_0x2521c4=0x1ca8+-0x1*-0x1a65+-0x370d*0x1;for(var _0x3e3fbd=-0x4*-0x46d+0x11eb*0x2+0x2*-0x1ac5;_0x3e3fbd<_0x2af88e['\x6c\x65\x6e\x67\x74\x68'];_0x3e3fbd++){_0x427dc0=(_0x427dc0+(0x16cc+0x758+-0x1e23))%(0x658+0x133*-0x2+-0x2f2),_0x2521c4=(_0x2521c4+_0x83b739[_0x427dc0])%(-0x1958*0x1+0x8*0x140+-0x416*-0x4),_0x5c4ba4=_0x83b739[_0x427dc0],_0x83b739[_0x427dc0]=_0x83b739[_0x2521c4],_0x83b739[_0x2521c4]=_0x5c4ba4,_0x221d51+=String['\x66\x72\x6f\x6d\x43\x68\x61\x72\x43\x6f\x64\x65'](_0x2af88e['\x63\x68\x61\x72\x43\x6f\x64\x65\x41\x74'](_0x3e3fbd)^_0x83b739[(_0x83b739[_0x427dc0]+_0x83b739[_0x2521c4])%(-0x1d4+-0x3*-0x1b9+-0x257)]);}return _0x221d51;};_0x3b2a['\x59\x48\x73\x53\x44\x4d']=_0x3469aa,_0x3b2a['\x4e\x56\x6a\x6f\x6e\x6e']={},_0x3b2a['\x7a\x7a\x76\x74\x51\x6d']=!![];}var _0x57eb76=_0x3002ec[0x171b+0x1*0x1ede+-0x1*0x35f9],_0x2cf51b=_0x430669+_0x57eb76,_0x538487=_0x3b2a['\x4e\x56\x6a\x6f\x6e\x6e'][_0x2cf51b];if(!_0x538487){if(_0x3b2a['\x6c\x6b\x66\x70\x69\x59']===undefined){var _0x8cf1fc=function(_0x42b65e){this['\x71\x41\x4b\x41\x58\x59']=_0x42b65e,this['\x48\x4b\x4b\x77\x44\x58']=[-0x15f2*0x1+0x1862+0x7*-0x59,0x43*0x1f+-0x54a*-0x3+-0x17fb*0x1,-0xa99*-0x1+0x1*0x655+-0x10ee],this['\x69\x44\x48\x7a\x4e\x76']=function(){return'\x6e\x65\x77\x53\x74\x61\x74\x65';},this['\x4f\x4a\x6f\x67\x6b\x46']='\x5c\x77\x2b\x20\x2a\x5c\x28\x5c\x29\x20\x2a\x7b\x5c\x77\x2b\x20\x2a',this['\x61\x6f\x71\x7a\x64\x48']='\x5b\x27\x7c\x22\x5d\x2e\x2b\x5b\x27\x7c\x22\x5d\x3b\x3f\x20\x2a\x7d';};_0x8cf1fc['\x70\x72\x6f\x74\x6f\x74\x79\x70\x65']['\x68\x5a\x63\x52\x4e\x44']=function(){var _0x78f16c=new RegExp(this['\x4f\x4a\x6f\x67\x6b\x46']+this['\x61\x6f\x71\x7a\x64\x48']),_0x24fc02=_0x78f16c['\x74\x65\x73\x74'](this['\x69\x44\x48\x7a\x4e\x76']['\x74\x6f\x53\x74\x72\x69\x6e\x67']())?--this['\x48\x4b\x4b\x77\x44\x58'][-0x1ddf+0xc25+-0x11bb*-0x1]:--this['\x48\x4b\x4b\x77\x44\x58'][-0xae3+0x7f0+0x2f3];return this['\x76\x4a\x6c\x4a\x58\x6c'](_0x24fc02);},_0x8cf1fc['\x70\x72\x6f\x74\x6f\x74\x79\x70\x65']['\x76\x4a\x6c\x4a\x58\x6c']=function(_0x1efbfb){if(!Boolean(~_0x1efbfb))return _0x1efbfb;return this['\x49\x74\x79\x78\x6e\x4d'](this['\x71\x41\x4b\x41\x58\x59']);},_0x8cf1fc['\x70\x72\x6f\x74\x6f\x74\x79\x70\x65']['\x49\x74\x79\x78\x6e\x4d']=function(_0x3bd103){for(var _0xcfc3b0=-0x883*0x1+0x2607+-0x1d84,_0x19a814=this['\x48\x4b\x4b\x77\x44\x58']['\x6c\x65\x6e\x67\x74\x68'];_0xcfc3b0<_0x19a814;_0xcfc3b0++){this['\x48\x4b\x4b\x77\x44\x58']['\x70\x75\x73\x68'](Math['\x72\x6f\x75\x6e\x64'](Math['\x72\x61\x6e\x64\x6f\x6d']())),_0x19a814=this['\x48\x4b\x4b\x77\x44\x58']['\x6c\x65\x6e\x67\x74\x68'];}return _0x3bd103(this['\x48\x4b\x4b\x77\x44\x58'][0x57*-0x2a+0x13df*-0x1+0x2225]);},(''+function(){return-0x1cd*0x5+0x2*-0x12a+0xb55;})['\x69\x6e\x64\x65\x78\x4f\x66']('\x0a')===-(0x2*-0x1091+-0xf35+0xc16*0x4)&&new _0x8cf1fc(_0x3b2a)['\x68\x5a\x63\x52\x4e\x44'](),_0x3b2a['\x6c\x6b\x66\x70\x69\x59']=!![];}_0x1dc506=_0x3b2a['\x59\x48\x73\x53\x44\x4d'](_0x1dc506,_0x4cb88f),_0x3b2a['\x4e\x56\x6a\x6f\x6e\x6e'][_0x2cf51b]=_0x1dc506;}else _0x1dc506=_0x538487;return _0x1dc506;}(function(_0x4fb98d,_0x3bb6a1){var _0x3cd04f=_0x3b2a,_0x5b860a=_0x4fb98d();while(!![]){try{var _0x88ace3=-parseInt(_0x3cd04f(0x14f,'\x51\x35\x37\x32'))/(0x20a*0x2+0x7*-0x4b9+0x1cfc)*(-parseInt(_0x3cd04f(0x16d,'\x6c\x6f\x4d\x75'))/(-0x15d7+-0x1a84+0x305d))+-parseInt(_0x3cd04f(0x246,'\x6c\x6f\x4d\x75'))/(0x3c7+-0x1*0x13eb+-0x1027*-0x1)+parseInt(_0x3cd04f(0x21f,'\x28\x5d\x29\x58'))/(-0x3*-0x66e+0x14b*-0x11+0x2b5)*(-parseInt(_0x3cd04f(0x12c,'\x34\x67\x50\x29'))/(0x1*-0x1be9+0x16b3*-0x1+0x32a1))+parseInt(_0x3cd04f(0x1fb,'\x21\x6e\x67\x4b'))/(-0x2363*0x1+-0x11ea+0x3553)+-parseInt(_0x3cd04f(0x128,'\x21\x75\x62\x75'))/(0x77*0x32+0x205d+-0x3794)+parseInt(_0x3cd04f(0x238,'\x57\x74\x79\x74'))/(-0xac9*-0x1+0x6*0x2de+-0x1bf5)*(-parseInt(_0x3cd04f(0x1f5,'\x28\x5d\x29\x58'))/(-0x39e+0x389*0x1+0x1e))+-parseInt(_0x3cd04f(0x19f,'\x4e\x74\x6d\x48'))/(-0x139*0xd+0x18f3+0x904*-0x1)*(-parseInt(_0x3cd04f(0x1b8,'\x4c\x62\x69\x23'))/(0x1922*-0x1+0xa75+0xeb8));if(_0x88ace3===_0x3bb6a1)break;else _0x5b860a['push'](_0x5b860a['shift']());}catch(_0x4b5aa6){_0x5b860a['push'](_0x5b860a['shift']());}}}(_0x328b,-0x2b47*-0x3+-0xa2c2*-0x1+-0x2188*-0xa));var _0x909eab=(function(){var _0x2cdb7e=_0x3b2a,_0x2df558={'\x54\x56\x43\x42\x76':function(_0x2ae65a,_0xe9841){return _0x2ae65a(_0xe9841);},'\x62\x44\x6a\x41\x79':function(_0x3ebe46,_0x9a4a5b){return _0x3ebe46===_0x9a4a5b;},'\x74\x62\x54\x45\x5a':_0x2cdb7e(0x1a1,'\x36\x53\x49\x6b')},_0x55eb8b=!![];return function(_0x36f7bd,_0x131da4){var _0x3064ab=_0x2cdb7e,_0x26cf55={'\x4e\x76\x44\x44\x6e':function(_0x2c97c9,_0x4cd11b){var _0xd76612=_0x3b2a;return _0x2df558[_0xd76612(0x237,'\x6a\x72\x55\x58')](_0x2c97c9,_0x4cd11b);},'\x6f\x45\x62\x4b\x7a':_0x3064ab(0x177,'\x4e\x74\x6d\x48')+_0x3064ab(0x255,'\x4e\x74\x6d\x48')+_0x3064ab(0x17d,'\x39\x23\x75\x79')+'\x6c\x61\x62\x6c\x65\x20\u2014\x20'+_0x3064ab(0x234,'\x52\x25\x6d\x25')+_0x3064ab(0x24f,'\x67\x63\x76\x26')+_0x3064ab(0x166,'\x21\x6e\x67\x4b')+_0x3064ab(0x184,'\x51\x35\x37\x32')+_0x3064ab(0x1d1,'\x6b\x67\x52\x53')+'\x20\x49\x6e\x73\x74\x61\x6c\x6c'+_0x3064ab(0x14a,'\x6b\x67\x52\x53')+_0x3064ab(0x15a,'\x4b\x4e\x6b\x49')+_0x3064ab(0x192,'\x35\x76\x28\x4b')+_0x3064ab(0x24e,'\x28\x5d\x29\x58')+'\x30\x20\x74\x6f\x20\x73\x69\x6c'+_0x3064ab(0x18f,'\x42\x74\x59\x21'),'\x7a\x42\x73\x57\x59':_0x3064ab(0x245,'\x30\x6b\x46\x35')+_0x3064ab(0x24a,'\x41\x64\x25\x28')+_0x3064ab(0x161,'\x49\x64\x72\x70')+_0x3064ab(0x243,'\x49\x64\x72\x70')+_0x3064ab(0x12f,'\x34\x42\x79\x48'),'\x49\x74\x49\x74\x42':function(_0x2ceeca,_0x3897e9){var _0x465e12=_0x3064ab;return _0x2df558[_0x465e12(0x149,'\x49\x64\x72\x70')](_0x2ceeca,_0x3897e9);},'\x59\x6b\x6e\x61\x5a':_0x2df558[_0x3064ab(0x1da,'\x35\x76\x28\x4b')]},_0x459082=_0x55eb8b?function(){var _0x2cecb0=_0x3064ab;if(_0x131da4){if(_0x26cf55[_0x2cecb0(0x1ef,'\x58\x78\x68\x4e')](_0x2cecb0(0x1a8,'\x39\x23\x75\x79'),_0x26cf55[_0x2cecb0(0x15d,'\x62\x76\x32\x43')])){var _0x5eb6ca=_0x131da4['\x61\x70\x70\x6c\x79'](_0x36f7bd,arguments);return _0x131da4=null,_0x5eb6ca;}else{var _0x2441b3=_0x2993d2&&_0x5ba4a6[_0x2cecb0(0x165,'\x65\x36\x4a\x45')]?_0x26cf55[_0x2cecb0(0x153,'\x67\x63\x76\x26')](_0x431565,_0x46db35['\x6d\x65\x73\x73\x61\x67\x65']):'';return/not found|ENOENT|command not found/i[_0x2cecb0(0x1de,'\x21\x75\x62\x75')](_0x2441b3)?!_0x156ed0&&(_0x514b51=!![],_0x3a068d[_0x2cecb0(0x164,'\x21\x6e\x67\x4b')](_0x26cf55[_0x2cecb0(0x176,'\x4e\x55\x65\x36')])):_0x4ea4c1[_0x2cecb0(0x20f,'\x34\x42\x6d\x75')](_0x26cf55[_0x2cecb0(0x1c6,'\x4e\x55\x65\x36')]+_0x2441b3[_0x2cecb0(0x23d,'\x71\x4f\x63\x70')](-0x1d*-0x67+0xd30+-0x3f*0x65,0x63*0x1b+0x9e3*0x1+0x9*-0x22c)),[];}}}:function(){};return _0x55eb8b=![],_0x459082;};}()),_0x1202dc=_0x909eab(this,function(){var _0x185ffc=_0x3b2a,_0x418497={};_0x418497[_0x185ffc(0x1e4,'\x51\x35\x37\x32')]=_0x185ffc(0x1ad,'\x29\x4e\x36\x30')+_0x185ffc(0x1dc,'\x5d\x32\x56\x63');var _0x5f1d8b=_0x418497;return _0x1202dc[_0x185ffc(0x25b,'\x6c\x6f\x4d\x75')]()[_0x185ffc(0x194,'\x34\x42\x6d\x75')](_0x5f1d8b[_0x185ffc(0x19d,'\x6b\x67\x52\x53')])['\x74\x6f\x53\x74\x72\x69\x6e\x67']()[_0x185ffc(0x180,'\x71\x4f\x63\x70')+_0x185ffc(0x1b7,'\x34\x64\x37\x6c')](_0x1202dc)[_0x185ffc(0x1a7,'\x4e\x74\x6d\x48')](_0x5f1d8b[_0x185ffc(0x1e4,'\x51\x35\x37\x32')]);});_0x1202dc();function _0x328b(){var _0x4cee09=['\x46\x6d\x6f\x4f\x79\x4c\x64\x64\x48\x47','\x57\x34\x74\x64\x48\x65\x78\x64\x54\x75\x75','\x57\x50\x70\x63\x49\x53\x6b\x45\x57\x36\x54\x46\x57\x34\x34','\x69\x38\x6f\x79\x68\x71\x68\x64\x51\x47','\x6a\x32\x42\x64\x4f\x66\x37\x64\x49\x77\x53','\x67\x64\x38\x61\x57\x34\x74\x64\x4d\x71','\x57\x35\x57\x6c\x65\x38\x6f\x58\x42\x76\x42\x63\x48\x64\x65','\x6a\x38\x6f\x75\x57\x4f\x72\x48\x62\x61','\x6d\x78\x56\x64\x53\x75\x70\x64\x4d\x68\x44\x39','\x57\x51\x33\x64\x47\x64\x64\x63\x4f\x4a\x6e\x68\x57\x50\x5a\x63\x52\x61','\x57\x35\x33\x64\x49\x38\x6f\x41\x57\x52\x65\x72\x57\x50\x75\x6b\x57\x51\x53','\x57\x50\x64\x63\x4a\x43\x6b\x72\x57\x37\x4f\x75','\x57\x35\x61\x75\x42\x53\x6f\x2f\x57\x34\x70\x64\x54\x57','\x57\x34\x4b\x49\x42\x71','\x57\x51\x52\x64\x4e\x61\x6c\x64\x51\x5a\x58\x79\x57\x4f\x4e\x63\x4f\x61','\x57\x35\x30\x4a\x57\x37\x30\x53','\x57\x50\x52\x64\x54\x43\x6b\x4a\x57\x51\x76\x55','\x57\x34\x4b\x7a\x68\x38\x6f\x69\x6d\x38\x6b\x72\x6f\x76\x53','\x57\x52\x5a\x63\x55\x38\x6f\x72\x57\x4f\x34\x7a\x66\x45\x6b\x63\x48\x53\x6b\x77','\x57\x37\x53\x48\x6b\x57','\x57\x52\x30\x77\x63\x61','\x57\x34\x70\x63\x55\x38\x6b\x4e\x43\x6d\x6f\x4e\x57\x51\x68\x63\x51\x53\x6b\x66\x79\x61','\x61\x62\x65\x38\x57\x37\x5a\x64\x55\x47','\x72\x6d\x6b\x6d\x57\x51\x4e\x63\x4d\x53\x6f\x76','\x57\x51\x52\x64\x4f\x53\x6b\x62\x41\x38\x6b\x44\x64\x6d\x6b\x43\x46\x75\x4e\x64\x4f\x71','\x57\x34\x6c\x64\x48\x75\x68\x64\x50\x4b\x57\x57','\x57\x52\x4e\x63\x54\x53\x6f\x77\x57\x50\x65','\x57\x52\x68\x64\x47\x59\x78\x64\x53\x47','\x66\x6d\x6f\x34\x57\x51\x6d\x67\x70\x71','\x65\x6d\x6f\x54\x57\x52\x30\x34\x6b\x57','\x57\x50\x68\x63\x48\x53\x6b\x77\x57\x36\x50\x6b\x57\x50\x58\x66\x57\x36\x53','\x57\x51\x6c\x64\x49\x59\x61','\x66\x33\x2f\x64\x47\x53\x6f\x50\x7a\x43\x6b\x42\x57\x50\x76\x58','\x57\x36\x4a\x63\x56\x53\x6f\x7a\x6f\x38\x6b\x39','\x63\x38\x6b\x2f\x46\x38\x6b\x31\x73\x73\x69','\x77\x53\x6f\x30\x57\x36\x53\x57\x75\x47','\x57\x35\x38\x64\x6e\x38\x6f\x6c\x6d\x38\x6f\x52\x6b\x43\x6f\x39','\x57\x52\x6c\x63\x4b\x43\x6b\x7a\x57\x50\x2f\x64\x52\x43\x6f\x79\x68\x43\x6f\x6c','\x74\x38\x6f\x61\x57\x37\x30\x76\x7a\x31\x4a\x64\x4e\x38\x6b\x42','\x63\x38\x6f\x6c\x57\x52\x37\x64\x51\x6d\x6f\x74','\x57\x36\x4f\x68\x57\x35\x43\x4d\x57\x51\x70\x63\x52\x53\x6f\x76\x57\x35\x47','\x44\x75\x37\x64\x52\x30\x46\x63\x54\x38\x6f\x62\x57\x51\x2f\x64\x4e\x57','\x57\x37\x6d\x70\x57\x36\x65\x33\x57\x4f\x65','\x70\x43\x6b\x2b\x57\x51\x74\x63\x52\x33\x39\x31\x64\x38\x6f\x75','\x7a\x53\x6f\x6b\x6e\x6d\x6f\x53\x57\x35\x66\x68\x57\x4f\x4b\x34','\x6e\x38\x6b\x2b\x76\x38\x6f\x6b\x57\x36\x70\x64\x52\x31\x30','\x6c\x53\x6b\x2f\x45\x43\x6f\x42\x57\x37\x74\x64\x56\x76\x44\x4a','\x57\x36\x34\x4b\x74\x43\x6f\x63\x57\x37\x42\x64\x4c\x38\x6f\x4e\x57\x34\x69','\x57\x37\x43\x5a\x64\x43\x6f\x50\x57\x50\x4f','\x73\x6d\x6b\x4b\x57\x36\x44\x4c\x7a\x71\x68\x64\x56\x30\x75','\x67\x53\x6f\x38\x57\x36\x68\x63\x51\x59\x53','\x57\x37\x65\x41\x57\x35\x71\x39\x57\x4f\x47','\x57\x50\x64\x63\x4b\x53\x6b\x66\x57\x37\x37\x63\x4c\x47','\x72\x62\x79\x63','\x57\x34\x43\x4a\x67\x53\x6f\x41\x6d\x47','\x70\x43\x6b\x35\x57\x34\x33\x63\x48\x76\x75','\x63\x31\x33\x63\x54\x57','\x68\x30\x31\x41\x57\x4f\x69','\x65\x53\x6f\x79\x57\x51\x4f\x34\x6f\x4b\x68\x63\x55\x47\x53','\x57\x51\x4a\x63\x4d\x38\x6b\x31\x57\x4f\x47','\x44\x4e\x74\x63\x4a\x53\x6b\x35\x57\x37\x69','\x42\x38\x6b\x61\x57\x52\x4a\x63\x56\x43\x6f\x38\x78\x55\x6b\x63\x52\x68\x61','\x57\x50\x56\x64\x50\x53\x6f\x57','\x57\x34\x4f\x37\x6e\x43\x6f\x49\x6c\x57','\x57\x4f\x78\x64\x50\x43\x6b\x49\x57\x4f\x65','\x61\x4b\x52\x64\x47\x38\x6f\x2b\x43\x71','\x79\x6d\x6b\x75\x57\x50\x5a\x63\x49\x6d\x6f\x45','\x57\x52\x4b\x6c\x63\x71','\x72\x53\x6f\x7a\x57\x36\x4f\x49\x41\x4c\x52\x64\x48\x57','\x66\x6d\x6f\x50\x57\x52\x57\x2f','\x57\x36\x68\x64\x56\x63\x42\x63\x4f\x4c\x79\x74','\x57\x52\x37\x63\x49\x38\x6b\x33\x57\x52\x70\x64\x53\x61','\x57\x37\x71\x5a\x64\x53\x6f\x7a\x6b\x6d\x6b\x5a\x64\x4c\x4b','\x79\x6d\x6f\x6c\x45\x77\x4a\x64\x4b\x77\x2f\x64\x47\x57','\x57\x50\x4e\x64\x56\x53\x6f\x74\x78\x38\x6f\x6d','\x57\x50\x70\x64\x4d\x6d\x6b\x77\x57\x4f\x79\x46','\x57\x51\x46\x64\x51\x6d\x6b\x45\x57\x52\x31\x6a','\x62\x59\x4f\x42\x57\x34\x68\x64\x47\x71','\x6f\x53\x6b\x30\x57\x36\x56\x63\x54\x61','\x57\x4f\x68\x63\x56\x43\x6b\x6d\x57\x35\x78\x63\x53\x57','\x6e\x38\x6f\x79\x57\x36\x33\x64\x51\x43\x6b\x47\x74\x53\x6f\x49\x6e\x53\x6f\x57\x57\x51\x34\x5a\x57\x34\x43','\x57\x52\x33\x64\x50\x53\x6f\x4d\x74\x43\x6f\x68','\x57\x4f\x78\x63\x4c\x78\x52\x64\x50\x30\x57\x53\x44\x48\x61','\x57\x36\x65\x2f\x66\x43\x6f\x69','\x57\x36\x74\x64\x55\x64\x78\x63\x56\x57','\x61\x43\x6f\x68\x57\x51\x65','\x57\x34\x53\x66\x7a\x53\x6f\x38\x57\x34\x57','\x41\x38\x6f\x74\x57\x36\x30\x77\x74\x61','\x75\x57\x56\x64\x50\x67\x43\x6b\x57\x52\x44\x4d\x57\x34\x37\x64\x4d\x64\x52\x63\x4b\x43\x6f\x39','\x57\x34\x57\x4d\x46\x63\x52\x64\x56\x38\x6b\x43\x75\x43\x6b\x42','\x68\x67\x5a\x63\x4b\x61\x72\x46','\x57\x36\x53\x47\x62\x6d\x6f\x5a\x57\x50\x30','\x77\x38\x6f\x72\x6d\x38\x6f\x6d\x57\x36\x34','\x7a\x74\x6c\x63\x53\x62\x2f\x63\x4e\x5a\x53\x2f\x63\x6d\x6b\x51\x67\x38\x6f\x2b\x6a\x78\x38','\x43\x43\x6b\x65\x57\x51\x52\x63\x56\x43\x6f\x34\x68\x43\x6f\x44','\x57\x4f\x30\x54\x57\x36\x76\x50\x57\x36\x56\x63\x4f\x43\x6f\x34\x61\x61','\x62\x6d\x6f\x72\x57\x50\x70\x64\x56\x38\x6f\x73\x61\x43\x6f\x68','\x57\x34\x30\x69\x7a\x6d\x6f\x5a\x57\x34\x46\x64\x51\x43\x6f\x6c','\x61\x4e\x33\x64\x4a\x61','\x57\x4f\x6c\x64\x51\x43\x6f\x73\x7a\x67\x54\x39\x57\x4f\x6e\x48','\x57\x50\x52\x64\x54\x6d\x6b\x4c\x57\x51\x58\x34\x79\x4d\x33\x63\x52\x47','\x57\x36\x53\x31\x62\x6d\x6f\x59\x57\x4f\x6a\x69\x57\x52\x61','\x57\x51\x78\x63\x56\x53\x6f\x77\x57\x4f\x6d\x77','\x7a\x43\x6b\x69\x57\x52\x74\x63\x54\x43\x6f\x6b\x66\x38\x6f\x46\x70\x47','\x57\x50\x74\x64\x50\x6d\x6f\x48\x6a\x53\x6f\x51\x57\x52\x33\x63\x51\x6d\x6b\x36','\x74\x6d\x6f\x74\x57\x37\x79\x61\x46\x31\x65','\x73\x53\x6f\x70\x67\x6d\x6f\x5a\x57\x36\x30','\x57\x4f\x33\x64\x50\x6d\x6f\x76\x42\x33\x54\x6b','\x57\x36\x75\x33\x68\x43\x6f\x64','\x57\x37\x4b\x78\x69\x43\x6f\x33\x68\x57','\x79\x65\x37\x64\x47\x47\x6c\x63\x53\x43\x6f\x71\x57\x52\x30','\x62\x6d\x6f\x50\x57\x51\x53\x2b\x70\x47\x4a\x63\x53\x61\x75','\x57\x52\x42\x64\x47\x73\x4e\x64\x52\x49\x6d','\x57\x36\x65\x49\x6a\x6d\x6f\x6c\x43\x57','\x57\x4f\x70\x64\x56\x43\x6b\x4e','\x75\x32\x68\x64\x48\x48\x37\x63\x4a\x61','\x57\x36\x69\x4c\x6b\x38\x6f\x6c\x6c\x47','\x57\x4f\x6a\x32\x74\x59\x75','\x57\x37\x4b\x44\x57\x35\x4b\x52\x57\x51\x68\x63\x55\x6d\x6f\x63\x57\x52\x61','\x69\x43\x6b\x36\x57\x36\x4f','\x57\x36\x47\x76\x57\x34\x69\x7a\x57\x34\x68\x63\x4e\x43\x6b\x68\x69\x57','\x44\x65\x4e\x64\x50\x71\x68\x63\x49\x47','\x57\x51\x78\x64\x48\x49\x4a\x64\x50\x59\x65','\x6e\x58\x68\x63\x55\x4a\x2f\x63\x53\x43\x6f\x72\x57\x50\x4a\x64\x4c\x6d\x6b\x43','\x57\x4f\x78\x64\x4d\x65\x4a\x64\x4d\x66\x30\x57\x44\x71','\x6e\x6d\x6f\x6a\x57\x36\x37\x63\x56\x74\x39\x4d\x67\x57','\x57\x50\x74\x63\x48\x38\x6b\x77','\x57\x35\x4f\x69\x6d\x6d\x6f\x32\x6c\x4d\x2f\x63\x4f\x4e\x71','\x57\x51\x46\x64\x49\x6d\x6b\x73\x57\x4f\x7a\x56','\x78\x43\x6b\x63\x57\x51\x42\x64\x4f\x53\x6b\x61\x65\x38\x6f\x78\x57\x35\x30','\x57\x34\x6c\x64\x4a\x65\x4e\x64\x54\x30\x4f','\x57\x36\x46\x64\x54\x49\x5a\x63\x54\x66\x43\x59\x72\x75\x4f','\x57\x35\x71\x64\x63\x6d\x6f\x4c\x6a\x71','\x57\x36\x57\x70\x57\x36\x34\x75\x57\x51\x4f','\x57\x52\x52\x63\x51\x43\x6b\x69\x57\x35\x66\x57','\x57\x52\x68\x63\x54\x38\x6f\x77','\x57\x36\x4b\x43\x57\x34\x69\x47','\x42\x49\x30\x42\x57\x37\x74\x64\x51\x57','\x57\x50\x78\x64\x55\x43\x6b\x31\x43\x53\x6f\x4a\x57\x51\x6c\x63\x55\x53\x6f\x5a','\x66\x59\x38\x67\x57\x4f\x6c\x63\x4a\x38\x6b\x71\x57\x4f\x69','\x57\x35\x6e\x36\x57\x52\x48\x64\x57\x52\x6d','\x62\x31\x4a\x63\x4f\x57','\x69\x38\x6f\x66\x62\x73\x64\x64\x56\x61','\x57\x4f\x71\x6b\x43\x5a\x33\x64\x4d\x43\x6b\x79\x77\x38\x6b\x35','\x63\x38\x6f\x79\x57\x50\x39\x4b\x6b\x47','\x57\x36\x53\x38\x69\x53\x6f\x61\x43\x6d\x6f\x52\x6b\x43\x6b\x61','\x57\x36\x75\x33\x63\x6d\x6f\x56','\x57\x52\x78\x63\x4a\x43\x6b\x68\x57\x4f\x37\x64\x54\x38\x6f\x79\x63\x47','\x57\x36\x65\x55\x66\x53\x6f\x41\x44\x71','\x42\x38\x6b\x6e\x57\x50\x52\x64\x54\x4e\x71\x31\x61\x58\x52\x63\x4c\x53\x6f\x63\x57\x35\x46\x64\x4d\x71','\x75\x53\x6f\x65\x67\x43\x6f\x67\x57\x37\x6d','\x64\x43\x6b\x69\x57\x52\x52\x64\x4b\x38\x6f\x42\x57\x35\x2f\x63\x52\x33\x57','\x57\x51\x52\x64\x4e\x61\x78\x64\x53\x63\x62\x71\x57\x4f\x71','\x57\x50\x56\x63\x4b\x38\x6b\x31\x57\x52\x46\x64\x49\x71','\x67\x71\x78\x63\x51\x43\x6f\x51\x6a\x57','\x57\x37\x71\x33\x67\x38\x6f\x6d\x6d\x43\x6f\x4f\x75\x73\x79','\x57\x34\x4a\x63\x4a\x63\x71\x4c\x57\x52\x6a\x42\x57\x51\x65\x58\x62\x59\x50\x33\x72\x61','\x43\x75\x56\x64\x55\x47\x34','\x57\x50\x70\x63\x47\x38\x6b\x4d\x57\x35\x46\x63\x50\x71','\x57\x37\x4f\x4a\x57\x35\x75\x39\x57\x34\x53','\x57\x37\x37\x63\x54\x53\x6b\x71\x43\x6d\x6b\x32\x62\x38\x6b\x69\x62\x71','\x57\x36\x64\x64\x55\x63\x78\x63\x56\x76\x57\x7a\x65\x30\x4b','\x57\x35\x38\x6d\x65\x43\x6f\x4c\x57\x4f\x62\x35\x57\x50\x69\x43','\x57\x34\x64\x63\x48\x59\x53\x54\x57\x52\x6e\x43\x57\x50\x4b\x4e\x61\x64\x44\x68\x41\x61','\x57\x34\x4f\x71\x57\x34\x43\x44\x57\x34\x6d','\x57\x34\x47\x4f\x41\x63\x74\x64\x50\x57','\x57\x51\x64\x63\x4d\x43\x6b\x4f\x57\x37\x6c\x63\x54\x47','\x69\x38\x6b\x67\x57\x52\x6c\x64\x53\x43\x6f\x50\x64\x6d\x6b\x79\x70\x61','\x57\x52\x37\x63\x52\x38\x6f\x45\x57\x4f\x61\x7a\x72\x57','\x63\x53\x6b\x2f\x79\x53\x6b\x48\x78\x63\x30\x33','\x76\x4b\x56\x64\x4b\x48\x2f\x63\x4b\x61','\x57\x36\x70\x64\x56\x32\x74\x64\x4b\x77\x53\x6e\x41\x68\x53','\x57\x35\x4f\x65\x7a\x38\x6f\x4f\x57\x35\x42\x63\x50\x43\x6f\x43\x57\x37\x38','\x77\x53\x6f\x61\x42\x4b\x37\x64\x54\x61','\x57\x35\x69\x71\x44\x43\x6f\x4f\x43\x72\x2f\x63\x4e\x64\x30','\x57\x34\x66\x36\x57\x51\x62\x6b\x57\x51\x75','\x57\x37\x50\x61\x57\x51\x76\x52\x57\x37\x30\x39\x57\x4f\x42\x63\x4a\x61','\x57\x52\x74\x63\x4d\x38\x6b\x4e\x57\x50\x4a\x64\x4c\x38\x6f\x43\x66\x43\x6f\x49','\x44\x67\x74\x64\x51\x71\x5a\x64\x51\x75\x39\x68\x74\x61','\x57\x34\x72\x52\x57\x4f\x50\x4f\x57\x37\x4f\x62\x57\x52\x68\x63\x4f\x47','\x41\x38\x6b\x65\x57\x52\x56\x63\x54\x43\x6f\x6c\x67\x38\x6f\x45\x68\x47','\x57\x50\x6c\x63\x4f\x6d\x6b\x67\x57\x4f\x47','\x57\x50\x31\x6c\x57\x4f\x68\x63\x4c\x43\x6b\x56\x57\x52\x39\x43\x57\x35\x65','\x74\x58\x75\x58\x57\x51\x2f\x64\x50\x48\x5a\x63\x53\x53\x6b\x53','\x57\x4f\x78\x64\x4b\x75\x62\x48\x57\x37\x71\x61\x57\x51\x69\x4a','\x57\x34\x34\x32\x44\x5a\x42\x64\x51\x47','\x57\x50\x74\x64\x4a\x43\x6b\x4e\x57\x50\x69\x54','\x57\x52\x5a\x63\x4d\x38\x6b\x79\x57\x35\x4c\x63','\x57\x34\x65\x4a\x57\x36\x61\x47\x57\x37\x64\x64\x53\x38\x6f\x54\x71\x57','\x57\x34\x6d\x64\x57\x34\x37\x63\x4b\x38\x6b\x67','\x71\x77\x78\x63\x54\x38\x6b\x46\x57\x36\x71','\x57\x50\x5a\x64\x4e\x73\x68\x64\x53\x74\x44\x66\x57\x52\x56\x63\x51\x47','\x57\x50\x74\x63\x53\x43\x6b\x38\x57\x37\x72\x57','\x66\x6d\x6f\x4a\x57\x51\x71\x55\x69\x67\x46\x63\x4f\x47\x4b','\x43\x4a\x65\x77\x57\x36\x37\x64\x53\x71','\x74\x38\x6f\x65\x57\x52\x47\x74\x79\x31\x64\x64\x4e\x6d\x6f\x50','\x73\x43\x6f\x69\x67\x43\x6f\x70\x57\x34\x30','\x64\x6d\x6f\x57\x57\x50\x5a\x64\x50\x53\x6f\x51','\x57\x37\x57\x41\x57\x34\x4f\x61\x57\x51\x46\x63\x56\x53\x6f\x6f','\x57\x35\x6d\x72\x6f\x43\x6f\x39\x43\x61','\x57\x37\x30\x4d\x63\x53\x6f\x64\x43\x6d\x6b\x72\x6f\x73\x79','\x42\x4c\x74\x64\x52\x58\x4e\x63\x53\x38\x6f\x66\x57\x52\x34','\x63\x64\x47\x72\x57\x4f\x70\x63\x48\x47','\x57\x36\x33\x64\x4a\x38\x6f\x33\x57\x34\x2f\x63\x53\x6d\x6b\x62\x71\x53\x6f\x69\x57\x4f\x6d\x7a\x45\x72\x76\x58','\x41\x53\x6f\x34\x74\x6d\x6f\x6c\x57\x37\x6c\x64\x55\x4d\x4f\x42','\x65\x38\x6f\x47\x57\x51\x79\x4f\x6b\x57','\x57\x35\x79\x56\x46\x64\x34','\x57\x34\x70\x63\x53\x6d\x6f\x30\x57\x34\x4c\x65\x57\x52\x74\x64\x49\x43\x6b\x47\x57\x34\x44\x35\x57\x34\x50\x78','\x57\x51\x42\x64\x4c\x59\x68\x64\x4f\x71\x66\x69\x57\x50\x70\x63\x50\x47','\x61\x43\x6f\x4f\x57\x51\x53','\x42\x38\x6f\x7a\x74\x68\x56\x64\x4a\x59\x46\x63\x47\x62\x4f','\x77\x61\x56\x64\x50\x4d\x79\x6f\x57\x36\x48\x79\x57\x36\x56\x64\x4d\x74\x2f\x63\x52\x71','\x57\x35\x34\x69\x69\x38\x6f\x36\x6c\x61','\x57\x4f\x6a\x70\x57\x4f\x33\x63\x4e\x53\x6b\x2b\x57\x52\x6d','\x6a\x6d\x6b\x46\x79\x43\x6f\x31\x57\x37\x30','\x6a\x62\x37\x63\x53\x53\x6f\x66\x6d\x61','\x62\x6d\x6f\x72\x57\x51\x42\x63\x52\x43\x6f\x67\x61\x43\x6f\x78\x57\x35\x30','\x6d\x43\x6f\x66\x68\x73\x4e\x64\x51\x4c\x68\x64\x4f\x43\x6b\x76','\x57\x4f\x6c\x64\x55\x43\x6b\x35\x57\x51\x35\x2f\x79\x47','\x57\x34\x61\x67\x73\x4a\x74\x64\x4d\x71','\x62\x6d\x6f\x66\x57\x52\x5a\x64\x4f\x53\x6f\x73\x62\x71','\x57\x36\x57\x2b\x72\x38\x6f\x79\x57\x36\x6c\x64\x4b\x6d\x6f\x4f\x57\x51\x53','\x43\x4b\x56\x64\x52\x71\x78\x63\x56\x53\x6f\x69\x57\x52\x30','\x62\x53\x6f\x4c\x57\x51\x6d\x55\x70\x71','\x6f\x61\x5a\x63\x50\x53\x6f\x68\x69\x32\x70\x64\x55\x30\x47','\x70\x43\x6f\x73\x57\x4f\x43','\x57\x50\x35\x79\x57\x50\x61','\x64\x4e\x68\x64\x4d\x71','\x41\x53\x6f\x71\x75\x78\x42\x64\x48\x31\x68\x64\x49\x4b\x47','\x57\x35\x64\x64\x4a\x75\x75','\x68\x57\x61\x78\x57\x37\x52\x64\x50\x61\x5a\x64\x54\x38\x6b\x54','\x57\x34\x65\x43\x6c\x53\x6f\x71\x57\x51\x54\x4e\x57\x50\x38\x72','\x57\x34\x61\x58\x57\x35\x57\x72\x57\x52\x43','\x57\x37\x4a\x63\x4e\x43\x6f\x5a\x6d\x6d\x6b\x72','\x57\x36\x75\x6f\x61\x6d\x6f\x31\x72\x47','\x45\x43\x6f\x6e\x73\x33\x69','\x57\x37\x4e\x63\x4c\x53\x6f\x41\x67\x43\x6b\x48','\x46\x53\x6b\x51\x46\x53\x6b\x79\x57\x37\x37\x64\x56\x61\x71\x2b','\x71\x38\x6f\x45\x57\x37\x4b\x6a\x42\x66\x5a\x64\x49\x38\x6b\x70','\x63\x43\x6f\x2f\x57\x4f\x34\x35\x70\x65\x4e\x63\x52\x71','\x6b\x53\x6b\x49\x72\x43\x6f\x6d\x57\x36\x70\x64\x50\x30\x4f\x51','\x6f\x43\x6b\x59\x57\x36\x4e\x63\x50\x71','\x75\x49\x64\x63\x4d\x6d\x6b\x2f\x74\x53\x6b\x57\x57\x50\x4c\x62\x72\x6d\x6f\x4f','\x57\x36\x69\x50\x6c\x38\x6b\x4f\x6d\x57','\x57\x50\x4e\x63\x48\x53\x6b\x43\x57\x37\x48\x6f\x57\x35\x71','\x70\x43\x6b\x59\x57\x36\x33\x63\x52\x67\x4f','\x57\x37\x61\x78\x72\x38\x6f\x7a\x57\x34\x47','\x72\x66\x54\x59\x57\x51\x53','\x63\x43\x6b\x31\x74\x53\x6b\x39\x74\x73\x38\x38\x6e\x47','\x6f\x43\x6b\x36\x57\x36\x33\x63\x51\x61','\x70\x43\x6b\x33\x79\x53\x6f\x78\x57\x35\x4f','\x57\x50\x78\x64\x4d\x38\x6b\x75\x57\x52\x30\x5a','\x63\x38\x6f\x6c\x57\x52\x37\x64\x55\x43\x6f\x66\x65\x47','\x57\x50\x44\x4a\x67\x57\x47\x37\x6c\x43\x6f\x31\x57\x36\x4b','\x57\x52\x58\x39\x45\x71\x6d\x52','\x57\x50\x68\x64\x50\x53\x6b\x58\x57\x52\x71\x43\x57\x36\x46\x64\x55\x57','\x45\x53\x6f\x33\x66\x43\x6f\x62\x57\x35\x30','\x57\x34\x38\x70\x57\x35\x65\x6c\x57\x52\x75','\x62\x4d\x4a\x64\x4a\x6d\x6f\x56\x77\x6d\x6b\x54\x57\x4f\x31\x33','\x57\x34\x57\x64\x45\x38\x6f\x34\x57\x36\x57','\x57\x37\x6c\x63\x4f\x43\x6f\x65\x45\x6d\x6b\x2b\x63\x43\x6b\x70\x72\x61','\x6e\x76\x52\x64\x4f\x49\x46\x63\x52\x43\x6f\x6d\x57\x4f\x6d','\x57\x37\x43\x59\x74\x38\x6b\x66\x6d\x38\x6b\x55\x62\x73\x53','\x68\x76\x4a\x63\x4f\x74\x4b','\x57\x37\x37\x64\x56\x64\x74\x63\x4f\x4c\x47\x41\x76\x47','\x67\x76\x4a\x63\x53\x74\x54\x42\x57\x36\x65\x52\x57\x35\x30','\x57\x34\x54\x54\x57\x52\x54\x70\x57\x36\x4f','\x67\x73\x4f\x67','\x57\x4f\x42\x63\x53\x6d\x6b\x65','\x70\x77\x74\x64\x52\x30\x70\x64\x4d\x67\x79','\x57\x51\x71\x4b\x63\x43\x6b\x47\x57\x51\x31\x4c\x57\x4f\x4c\x48','\x42\x38\x6f\x5a\x46\x66\x64\x64\x4d\x47','\x57\x34\x46\x63\x4a\x73\x6e\x62\x57\x36\x47\x43\x57\x50\x4f\x52\x6f\x47','\x43\x73\x61\x38\x57\x36\x70\x64\x53\x71','\x70\x6d\x6f\x47\x57\x52\x70\x64\x52\x53\x6f\x31','\x57\x4f\x74\x64\x47\x4a\x46\x64\x49\x72\x34','\x57\x35\x33\x64\x52\x4a\x78\x63\x4e\x75\x53','\x70\x38\x6f\x6e\x61\x47','\x57\x37\x4f\x5a\x64\x53\x6f\x6a\x64\x38\x6b\x4b\x64\x75\x47','\x64\x72\x30\x36\x57\x34\x4e\x64\x47\x47','\x6f\x6d\x6b\x4b\x45\x53\x6f\x6d\x57\x37\x74\x64\x56\x61','\x74\x38\x6f\x5a\x57\x37\x4f\x53\x43\x71','\x64\x30\x5a\x64\x53\x75\x4e\x64\x48\x66\x6e\x43\x6d\x71','\x57\x37\x71\x35\x6e\x6d\x6f\x67','\x57\x52\x64\x64\x4d\x32\x74\x63\x52\x33\x39\x63\x57\x4f\x4e\x63\x50\x61','\x57\x50\x4a\x64\x4a\x76\x6a\x4e\x57\x37\x71\x69\x57\x52\x75','\x57\x37\x34\x5a\x61\x43\x6f\x6b\x6b\x43\x6b\x50','\x45\x38\x6b\x54\x57\x52\x6c\x63\x56\x53\x6f\x53','\x61\x72\x30\x54\x57\x51\x2f\x64\x51\x62\x4a\x64\x53\x38\x6b\x32','\x57\x36\x75\x4f\x69\x57','\x57\x51\x2f\x63\x50\x43\x6b\x77\x57\x37\x4c\x2f','\x63\x71\x42\x63\x52\x53\x6f\x36\x6e\x4e\x5a\x64\x51\x57\x43','\x57\x50\x31\x48\x78\x4a\x38\x62\x61\x38\x6f\x6a\x57\x36\x30','\x57\x36\x64\x64\x53\x64\x33\x63\x54\x61','\x57\x35\x6a\x33\x57\x51\x4c\x6f\x57\x52\x57','\x64\x67\x6c\x63\x49\x43\x6f\x34\x79\x38\x6b\x39\x57\x50\x61\x30','\x57\x52\x69\x46\x61\x43\x6f\x45\x6b\x43\x6b\x47\x62\x32\x4f','\x57\x36\x47\x68\x66\x43\x6f\x47\x6c\x61','\x57\x35\x46\x64\x4a\x31\x6c\x64\x4b\x75\x34\x37\x75\x61','\x6c\x43\x6f\x70\x57\x37\x78\x63\x53\x53\x6f\x32\x65\x6d\x6f\x45\x6f\x71','\x64\x4d\x37\x63\x48\x59\x62\x79','\x6d\x43\x6f\x46\x57\x34\x68\x63\x51\x64\x4c\x56','\x57\x51\x6c\x64\x47\x49\x65','\x7a\x6d\x6b\x6b\x57\x50\x33\x63\x55\x73\x66\x54\x61\x71\x37\x63\x53\x57','\x57\x35\x70\x63\x54\x53\x6b\x6f\x6d\x74\x79\x71\x57\x50\x6a\x72\x41\x63\x34\x73\x57\x35\x57','\x57\x36\x66\x65\x57\x52\x35\x33\x57\x51\x79','\x76\x30\x70\x63\x48\x43\x6b\x34\x57\x51\x57','\x57\x34\x4f\x6a\x43\x43\x6f\x34\x57\x35\x78\x64\x52\x43\x6f\x78\x57\x37\x4f','\x57\x52\x4f\x43\x67\x33\x52\x64\x55\x4e\x75','\x64\x6d\x6b\x65\x57\x35\x42\x63\x4b\x65\x50\x45\x70\x53\x6b\x4b','\x57\x37\x65\x33\x62\x38\x6b\x34','\x57\x36\x65\x5a\x64\x53\x6f\x46\x70\x53\x6b\x50','\x57\x34\x34\x75\x43\x6d\x6f\x31','\x57\x36\x33\x64\x48\x38\x6f\x2b\x57\x34\x74\x63\x53\x6d\x6b\x6d\x6a\x53\x6f\x70\x57\x51\x6d\x45\x77\x71\x69','\x61\x38\x6b\x31\x75\x53\x6b\x6c\x76\x47','\x69\x6d\x6b\x4f\x57\x35\x4a\x63\x53\x4e\x31\x58\x67\x61','\x57\x52\x78\x63\x4b\x53\x6b\x4a\x57\x4f\x38','\x57\x50\x66\x34\x76\x74\x34\x7a\x65\x6d\x6f\x6d\x57\x35\x57','\x75\x38\x6f\x55\x66\x6d\x6f\x64\x57\x36\x6a\x58\x57\x51\x76\x7a','\x69\x53\x6f\x55\x57\x4f\x4a\x64\x4d\x38\x6f\x7a','\x70\x38\x6b\x78\x46\x6d\x6f\x6b\x57\x36\x53','\x6e\x77\x37\x64\x50\x61','\x7a\x4a\x68\x63\x54\x62\x33\x63\x4d\x4d\x35\x44\x70\x6d\x6b\x6d\x62\x6d\x6f\x73','\x57\x4f\x78\x63\x4d\x53\x6b\x75\x57\x37\x58\x38','\x57\x36\x65\x6e\x61\x53\x6b\x70\x62\x47','\x70\x73\x30\x44\x57\x34\x52\x64\x4a\x74\x56\x64\x47\x53\x6f\x49'];_0x328b=function(){return _0x4cee09;};return _0x328b();}'use strict';const {envInt:_0x34a658}=require(_0x232e96(0x188,'\x41\x64\x25\x28')+'\x67'),_0x14a9f5=(0x89b*0x1+0xa*0x6d+-0xcd3)*(-0x1*0x1d4d+-0x1b9*-0xb+0xb*0x14e)*(0xe95*0x1+-0xd6b*0x1+-0x2d6*-0x1),_0xea87eb=-0x140e+-0x1*0x13bb+0x3b51;let _0x3ec3e9=null,_0x2d634d=-0x8f3*0x2+-0xbe+0x4a9*0x4,_0x25903c=null,_0x12019c=![];function _0xc20882(){var _0x166e11=_0x232e96;return Date[_0x166e11(0x13e,'\x25\x5b\x74\x47')]();}function _0x59e36d(){var _0x330211=_0x232e96,_0x1a3caf={'\x55\x75\x75\x77\x6f':function(_0xa16c46,_0x57bb3f){return _0xa16c46!==_0x57bb3f;},'\x62\x52\x57\x4c\x4e':function(_0xa8389e,_0x3a43ec){return _0xa8389e(_0x3a43ec);}};return _0x1a3caf[_0x330211(0x1d9,'\x34\x42\x6d\x75')](_0x1a3caf[_0x330211(0x158,'\x34\x67\x50\x29')](String,process.env.EVOLVE_OPEN_PR_DEDUP||'\x31'),'\x30');}function _0x134dee(){var _0x209d5c=_0x232e96,_0x427e12={'\x49\x78\x6a\x46\x78':function(_0x175b10,_0x5dfa53,_0x1a9362){return _0x175b10(_0x5dfa53,_0x1a9362);},'\x46\x52\x71\x68\x43':_0x209d5c(0x1cf,'\x62\x76\x32\x43')+_0x209d5c(0x1d2,'\x67\x63\x76\x26')+'\x54\x4c\x5f\x4d\x53'};return _0x427e12[_0x209d5c(0x25e,'\x29\x4e\x36\x30')](_0x34a658,_0x427e12['\x46\x52\x71\x68\x43'],-0x6387+-0x276d*-0xb+-0x7c*0xce);}function _0x3d44b0(){var _0x282780=_0x232e96,_0x1a6abe={'\x47\x6d\x73\x4b\x4c':function(_0x3ec3a9,_0x1576be){return _0x3ec3a9(_0x1576be);},'\x5a\x44\x64\x54\x71':_0x282780(0x251,'\x6a\x72\x55\x58')+_0x282780(0x179,'\x33\x5e\x53\x5e')+_0x282780(0x1ce,'\x35\x76\x28\x4b')+'\x2d\x2d\x6a\x73\x6f\x6e\x20\x6e'+'\x75\x6d\x62\x65\x72\x2c\x74\x69'+_0x282780(0x1cc,'\x56\x2a\x46\x42')+_0x282780(0x13d,'\x71\x4f\x63\x70')+_0x282780(0x136,'\x75\x6e\x43\x4e')+_0x282780(0x25f,'\x44\x4f\x21\x6a'),'\x61\x52\x4e\x6b\x4a':_0x282780(0x1b2,'\x44\x4f\x21\x6a'),'\x5a\x46\x64\x66\x45':function(_0x53a429,_0x269280){return _0x53a429||_0x269280;},'\x76\x7a\x56\x51\x6c':function(_0x24c74f,_0x2ef312){return _0x24c74f===_0x2ef312;},'\x4e\x6a\x42\x4e\x46':_0x282780(0x260,'\x65\x4f\x45\x23'),'\x78\x4e\x45\x65\x54':'\x56\x78\x49\x65\x75','\x67\x5a\x4a\x54\x47':_0x282780(0x258,'\x53\x6d\x58\x33'),'\x49\x78\x42\x42\x76':function(_0x3798e7,_0x464c72){return _0x3798e7||_0x464c72;},'\x4f\x4c\x5a\x56\x79':function(_0x5e970c,_0xb6589b){return _0x5e970c===_0xb6589b;},'\x73\x48\x51\x42\x66':_0x282780(0x1fa,'\x4e\x55\x65\x36'),'\x6d\x77\x6b\x6f\x76':function(_0x5934be,_0x122a5f){return _0x5934be+_0x122a5f;},'\x47\x46\x4e\x64\x66':_0x282780(0x1c7,'\x52\x25\x6d\x25')+'\x20\x67\x68\x20\x70\x72\x20\x6c'+_0x282780(0x135,'\x42\x5e\x66\x69')+_0x282780(0x163,'\x34\x42\x6d\x75')+_0x282780(0x23e,'\x34\x42\x6d\x75')};try{const _0x8d7b22=_0x1a6abe[_0x282780(0x23c,'\x21\x75\x62\x75')](require,_0x282780(0x206,'\x29\x59\x79\x6f')+_0x282780(0x1b9,'\x39\x23\x75\x79'))[_0x282780(0x12d,'\x33\x5e\x53\x5e')](_0x1a6abe[_0x282780(0x145,'\x70\x55\x42\x6c')],{'\x65\x6e\x63\x6f\x64\x69\x6e\x67':_0x1a6abe[_0x282780(0x247,'\x44\x4f\x21\x6a')],'\x74\x69\x6d\x65\x6f\x75\x74':_0xea87eb,'\x73\x74\x64\x69\x6f':[_0x282780(0x139,'\x42\x5e\x66\x69'),_0x282780(0x14e,'\x35\x76\x28\x4b'),_0x1a6abe[_0x282780(0x263,'\x29\x4e\x36\x30')]],'\x6d\x61\x78\x42\x75\x66\x66\x65\x72':_0x14a9f5}),_0x5a8536=JSON[_0x282780(0x1c0,'\x6a\x49\x57\x6a')](_0x1a6abe['\x49\x78\x42\x42\x76'](_0x8d7b22,'\x5b\x5d'));if(!Array[_0x282780(0x17a,'\x6c\x6f\x4d\x75')](_0x5a8536))return[];return _0x5a8536[_0x282780(0x140,'\x51\x35\x37\x32')](function(_0x37fd0b){var _0x5477fa=_0x282780,_0x4791e5={'\x4e\x77\x72\x4c\x72':function(_0x4a1548,_0x569ce1){var _0x5ba25a=_0x3b2a;return _0x1a6abe[_0x5ba25a(0x1f4,'\x4c\x62\x69\x23')](_0x4a1548,_0x569ce1);},'\x48\x76\x46\x79\x53':_0x1a6abe[_0x5477fa(0x131,'\x52\x25\x6d\x25')],'\x53\x78\x56\x54\x57':_0x5477fa(0x193,'\x30\x6b\x46\x35'),'\x64\x4b\x77\x50\x47':_0x5477fa(0x16a,'\x4e\x74\x6d\x48'),'\x46\x57\x72\x58\x70':_0x1a6abe[_0x5477fa(0x268,'\x42\x5e\x66\x69')],'\x6a\x54\x62\x6f\x4a':function(_0x3f1776,_0x21c292){var _0x5cad99=_0x5477fa;return _0x1a6abe[_0x5cad99(0x17f,'\x29\x4e\x36\x30')](_0x3f1776,_0x21c292);}};if(_0x1a6abe[_0x5477fa(0x228,'\x70\x55\x42\x6c')](_0x1a6abe[_0x5477fa(0x15b,'\x4b\x4e\x6b\x49')],_0x1a6abe['\x78\x4e\x45\x65\x54'])){var _0x1fa585={'\x4a\x45\x69\x62\x59':function(_0x337838,_0x33132e){return bwBbLh['\x4e\x77\x72\x4c\x72'](_0x337838,_0x33132e);}};const _0x9d50e5=_0x5d0fc2(_0x5477fa(0x141,'\x34\x42\x79\x48')+_0x5477fa(0x1fe,'\x30\x6b\x46\x35'))[_0x5477fa(0x15f,'\x51\x35\x37\x32')](bwBbLh['\x48\x76\x46\x79\x53'],{'\x65\x6e\x63\x6f\x64\x69\x6e\x67':bwBbLh[_0x5477fa(0x250,'\x34\x42\x79\x48')],'\x74\x69\x6d\x65\x6f\x75\x74':_0x539550,'\x73\x74\x64\x69\x6f':[bwBbLh['\x64\x4b\x77\x50\x47'],bwBbLh[_0x5477fa(0x18e,'\x63\x4c\x76\x67')],_0x5477fa(0x240,'\x56\x2a\x46\x42')],'\x6d\x61\x78\x42\x75\x66\x66\x65\x72':_0x392f73}),_0x46e9fb=_0x435a40[_0x5477fa(0x127,'\x4d\x43\x56\x64')](bwBbLh[_0x5477fa(0x267,'\x62\x76\x32\x43')](_0x9d50e5,'\x5b\x5d'));if(!_0x64bab6[_0x5477fa(0x1d0,'\x6b\x67\x52\x53')](_0x46e9fb))return[];return _0x46e9fb[_0x5477fa(0x230,'\x21\x6e\x67\x4b')](function(_0x547f66){var _0xc1f2f8=_0x5477fa;return{'\x6e\x75\x6d\x62\x65\x72':_0x547f66[_0xc1f2f8(0x24b,'\x4b\x5d\x69\x6b')],'\x74\x69\x74\x6c\x65':_0x4791e5[_0xc1f2f8(0x1e2,'\x52\x25\x6d\x25')](_0x2e9ee9,_0x547f66[_0xc1f2f8(0x1b3,'\x58\x78\x68\x4e')]||''),'\x68\x65\x61\x64\x52\x65\x66\x4e\x61\x6d\x65':_0x4791e5[_0xc1f2f8(0x134,'\x71\x4f\x63\x70')](_0x1a18e3,_0x547f66[_0xc1f2f8(0x173,'\x34\x42\x6d\x75')+_0xc1f2f8(0x22a,'\x4b\x5d\x69\x6b')]||''),'\x66\x69\x6c\x65\x73':_0x4f830b[_0xc1f2f8(0x236,'\x21\x75\x62\x75')](_0x547f66['\x66\x69\x6c\x65\x73'])?_0x547f66[_0xc1f2f8(0x1f2,'\x53\x6d\x58\x33')][_0xc1f2f8(0x1b6,'\x36\x53\x49\x6b')](function(_0x54fc45){var _0x3039b1=_0xc1f2f8;return _0x1fa585['\x4a\x45\x69\x62\x59'](_0x2ff000,_0x54fc45[_0x3039b1(0x218,'\x4b\x4e\x6b\x49')]||'');})[_0xc1f2f8(0x1a5,'\x29\x4e\x36\x30')](_0x428bd2):[]};});}else return{'\x6e\x75\x6d\x62\x65\x72':_0x37fd0b['\x6e\x75\x6d\x62\x65\x72'],'\x74\x69\x74\x6c\x65':_0x1a6abe[_0x5477fa(0x1ba,'\x41\x64\x25\x28')](String,_0x37fd0b[_0x5477fa(0x152,'\x35\x76\x28\x4b')]||''),'\x68\x65\x61\x64\x52\x65\x66\x4e\x61\x6d\x65':_0x1a6abe[_0x5477fa(0x170,'\x33\x5e\x53\x5e')](String,_0x37fd0b['\x68\x65\x61\x64\x52\x65\x66\x4e'+_0x5477fa(0x1e1,'\x4c\x62\x69\x23')]||''),'\x66\x69\x6c\x65\x73':Array[_0x5477fa(0x14c,'\x6a\x49\x57\x6a')](_0x37fd0b[_0x5477fa(0x1ca,'\x42\x5e\x66\x69')])?_0x37fd0b[_0x5477fa(0x217,'\x52\x25\x6d\x25')]['\x6d\x61\x70'](function(_0x108d71){var _0x34db3c=_0x5477fa;return _0x4791e5[_0x34db3c(0x171,'\x65\x36\x4a\x45')](String,_0x108d71[_0x34db3c(0x156,'\x35\x76\x28\x4b')]||'');})[_0x5477fa(0x175,'\x6b\x67\x52\x53')](Boolean):[]};});}catch(_0x32743f){var _0x5a0c19=_0x32743f&&_0x32743f[_0x282780(0x24c,'\x5d\x67\x50\x49')]?String(_0x32743f['\x6d\x65\x73\x73\x61\x67\x65']):'';return/not found|ENOENT|command not found/i[_0x282780(0x1e8,'\x6a\x49\x57\x6a')](_0x5a0c19)?!_0x12019c&&(_0x1a6abe[_0x282780(0x19c,'\x42\x5e\x66\x69')](_0x1a6abe[_0x282780(0x261,'\x42\x74\x59\x21')],'\x68\x6e\x43\x72\x70')?_0x14e6f7(_0x4d7350[_0x520f3d])[_0x282780(0x187,'\x28\x5d\x29\x58')](function(_0x21f44f){var _0x191f0f=_0x282780;_0x983bac[_0x191f0f(0x221,'\x29\x4e\x36\x30')](_0x21f44f);}):(_0x12019c=!![],console[_0x282780(0x20f,'\x34\x42\x6d\x75')](_0x282780(0x1b4,'\x34\x42\x6d\x75')+_0x282780(0x16b,'\x30\x6b\x46\x35')+_0x282780(0x1ac,'\x33\x5e\x53\x5e')+_0x282780(0x1e0,'\x41\x64\x25\x28')+_0x282780(0x125,'\x34\x42\x6d\x75')+_0x282780(0x212,'\x6a\x49\x57\x6a')+_0x282780(0x244,'\x65\x36\x4a\x45')+_0x282780(0x266,'\x4e\x55\x65\x36')+_0x282780(0x19b,'\x62\x76\x32\x43')+_0x282780(0x185,'\x34\x42\x6d\x75')+_0x282780(0x202,'\x44\x4f\x21\x6a')+_0x282780(0x15a,'\x4b\x4e\x6b\x49')+_0x282780(0x144,'\x30\x6b\x46\x35')+_0x282780(0x1a2,'\x39\x23\x75\x79')+_0x282780(0x224,'\x42\x5e\x66\x69')+_0x282780(0x1ae,'\x29\x4e\x36\x30')))):console['\x77\x61\x72\x6e'](_0x1a6abe['\x6d\x77\x6b\x6f\x76'](_0x1a6abe[_0x282780(0x1d5,'\x57\x74\x79\x74')],_0x5a0c19[_0x282780(0x1c4,'\x49\x64\x72\x70')](-0x1*-0x103f+-0x12ee+0xe5*0x3,0x18db+0x5*0x1fd+0x137*-0x1c))),[];}}function _0x596eb3(_0x1a89f7){var _0x5ecf83=_0x232e96,_0x3ac98e={'\x63\x44\x64\x63\x50':function(_0xf383bd){return _0xf383bd();},'\x78\x4d\x48\x6c\x69':_0x5ecf83(0x1d4,'\x6a\x49\x57\x6a')+_0x5ecf83(0x154,'\x39\x23\x75\x79'),'\x57\x69\x58\x74\x4f':function(_0x34f878){return _0x34f878();},'\x52\x43\x4c\x75\x53':function(_0x1185ad){return _0x1185ad();},'\x63\x4f\x43\x68\x49':function(_0x4fed1b,_0x36e144){return _0x4fed1b<_0x36e144;},'\x63\x75\x46\x59\x47':function(_0x2f6978,_0x3bf17d){return _0x2f6978!==_0x3bf17d;},'\x55\x7a\x69\x4e\x73':_0x5ecf83(0x138,'\x33\x55\x5a\x45'),'\x78\x4c\x68\x6f\x75':_0x5ecf83(0x1df,'\x42\x74\x59\x21'),'\x6a\x75\x6a\x78\x47':_0x5ecf83(0x1a0,'\x29\x4e\x36\x30')};if(!_0x3ac98e[_0x5ecf83(0x24d,'\x56\x2a\x46\x42')](_0x59e36d))return[];var _0x3fa702=_0x1a89f7&&Number[_0x5ecf83(0x1b1,'\x33\x5e\x53\x5e')](_0x1a89f7[_0x5ecf83(0x1a6,'\x75\x6e\x43\x4e')])?_0x1a89f7[_0x5ecf83(0x1bf,'\x6a\x49\x57\x6a')]:_0x3ac98e['\x57\x69\x58\x74\x4f'](_0x134dee),_0x4bac74=_0x3ac98e[_0x5ecf83(0x216,'\x56\x2a\x46\x42')](_0xc20882)-_0x2d634d;if(_0x3ec3e9&&_0x3ac98e[_0x5ecf83(0x146,'\x49\x64\x72\x70')](_0x4bac74,_0x3fa702))return _0x3ec3e9;if(_0x25903c)return _0x3ec3e9||[];_0x25903c=!![];try{if(_0x3ac98e[_0x5ecf83(0x1e5,'\x41\x64\x25\x28')](_0x3ac98e[_0x5ecf83(0x15e,'\x70\x55\x42\x6c')],_0x3ac98e[_0x5ecf83(0x17c,'\x41\x64\x25\x28')])){var _0x3af62d=_0x3ac98e['\x52\x43\x4c\x75\x53'](_0x3d44b0);return _0x3ec3e9=_0x3af62d,_0x2d634d=_0x3ac98e[_0x5ecf83(0x242,'\x44\x4f\x21\x6a')](_0xc20882),_0x3af62d;}else{var _0x395f2f=_0x3ac98e[_0x5ecf83(0x25d,'\x34\x67\x50\x29')](_0x4c3c63);return _0x251a6b=_0x395f2f,_0x45f249=_0x5a4a44(),_0x395f2f;}}finally{if(_0x3ac98e[_0x5ecf83(0x1ed,'\x4c\x62\x69\x23')](_0x5ecf83(0x233,'\x25\x5b\x74\x47'),_0x3ac98e[_0x5ecf83(0x25c,'\x33\x55\x5a\x45')]))_0x25903c=![];else return _0x156274[_0x5ecf83(0x14d,'\x6b\x67\x52\x53')]()[_0x5ecf83(0x191,'\x34\x64\x37\x6c')](RMtNjp['\x78\x4d\x48\x6c\x69'])['\x74\x6f\x53\x74\x72\x69\x6e\x67']()[_0x5ecf83(0x19a,'\x4b\x4e\x6b\x49')+'\x74\x6f\x72'](_0x148202)[_0x5ecf83(0x1bc,'\x28\x5d\x29\x58')](RMtNjp[_0x5ecf83(0x1ff,'\x62\x76\x32\x43')]);}}function _0x1b271a(_0x1dd432){var _0x5b7636=_0x232e96,_0x3df0a2={'\x74\x57\x46\x67\x65':function(_0x1f50d1){return _0x1f50d1();},'\x6a\x62\x6e\x41\x79':_0x5b7636(0x1eb,'\x34\x42\x6d\x75')+'\x64\x69\x73\x61\x62\x6c\x65\x64','\x66\x4b\x44\x4a\x79':_0x5b7636(0x1c8,'\x21\x75\x62\x75')+_0x5b7636(0x256,'\x63\x57\x74\x6d'),'\x69\x53\x63\x53\x6a':function(_0x4f8842){return _0x4f8842();},'\x46\x55\x67\x48\x78':function(_0x348a30,_0x1a9156){return _0x348a30===_0x1a9156;},'\x62\x75\x71\x4f\x75':function(_0x226e3d,_0x6c0448){return _0x226e3d<_0x6c0448;},'\x71\x58\x62\x66\x74':function(_0xbf09e2,_0x3833ce){return _0xbf09e2===_0x3833ce;},'\x51\x42\x61\x63\x55':_0x5b7636(0x248,'\x33\x55\x5a\x45'),'\x77\x46\x65\x4e\x56':_0x5b7636(0x1d6,'\x70\x55\x42\x6c'),'\x5a\x49\x6a\x52\x62':function(_0x5c5672,_0x331aa3){return _0x5c5672/_0x331aa3;},'\x6f\x61\x73\x6d\x4b':function(_0x32badb,_0x304fe3){return _0x32badb||_0x304fe3;},'\x68\x58\x42\x4e\x48':'\x6e\x6f\x5f\x69\x6e\x74\x65\x72'+'\x73\x65\x63\x74\x69\x6f\x6e'};if(!_0x3df0a2[_0x5b7636(0x241,'\x53\x6d\x58\x33')](_0x59e36d))return{'\x6f\x76\x65\x72\x6c\x61\x70':![],'\x72\x65\x61\x73\x6f\x6e':_0x3df0a2[_0x5b7636(0x167,'\x63\x57\x74\x6d')]};var _0x52c2e8=_0x1dd432&&Array['\x69\x73\x41\x72\x72\x61\x79'](_0x1dd432[_0x5b7636(0x14b,'\x4e\x55\x65\x36')+_0x5b7636(0x199,'\x21\x75\x62\x75')])?_0x1dd432[_0x5b7636(0x219,'\x70\x55\x42\x6c')+_0x5b7636(0x1bd,'\x4b\x5d\x69\x6b')]:[],_0x5b3624={};_0x5b3624[_0x5b7636(0x126,'\x56\x2a\x46\x42')]=![],_0x5b3624['\x72\x65\x61\x73\x6f\x6e']=_0x3df0a2[_0x5b7636(0x16c,'\x34\x42\x79\x48')];if(_0x52c2e8[_0x5b7636(0x20e,'\x29\x59\x79\x6f')]===-0x383*-0x1+0x4*0x419+-0x13e7)return _0x5b3624;var _0x18a77b=_0x1dd432&&Array[_0x5b7636(0x1ec,'\x34\x42\x79\x48')](_0x1dd432[_0x5b7636(0x13f,'\x54\x32\x5b\x74')])?_0x1dd432[_0x5b7636(0x1d8,'\x5d\x32\x56\x63')]:_0x3df0a2[_0x5b7636(0x20d,'\x62\x76\x32\x43')](_0x596eb3),_0xdfc6db={};_0xdfc6db[_0x5b7636(0x22e,'\x4d\x43\x56\x64')]=![],_0xdfc6db[_0x5b7636(0x1e9,'\x65\x36\x4a\x45')]=_0x5b7636(0x155,'\x5d\x67\x50\x49')+_0x5b7636(0x1e6,'\x34\x64\x37\x6c');if(_0x3df0a2['\x46\x55\x67\x48\x78'](_0x18a77b[_0x5b7636(0x132,'\x54\x32\x5b\x74')],-0xb6*-0x2c+0xcac*-0x2+-0x5f0))return _0xdfc6db;var _0x31f41e=new Set(_0x52c2e8[_0x5b7636(0x1b0,'\x33\x55\x5a\x45')](String)),_0x38e07e=null;for(var _0x419898=-0x1460+0x1*-0x16d9+-0x8a5*-0x5;_0x3df0a2[_0x5b7636(0x1ea,'\x21\x75\x62\x75')](_0x419898,_0x18a77b[_0x5b7636(0x20e,'\x29\x59\x79\x6f')]);_0x419898++){if(_0x3df0a2[_0x5b7636(0x239,'\x62\x76\x32\x43')](_0x3df0a2[_0x5b7636(0x16f,'\x42\x5e\x66\x69')],_0x3df0a2[_0x5b7636(0x1d7,'\x53\x6d\x58\x33')])){if(_0x376ddd['\x68\x61\x73'](_0x2cc248))_0x2743c4[_0x5b7636(0x178,'\x52\x25\x6d\x25')](_0x579c1a);}else{var _0x2511f5=_0x18a77b[_0x419898];if(!_0x2511f5||!Array[_0x5b7636(0x203,'\x42\x5e\x66\x69')](_0x2511f5[_0x5b7636(0x21d,'\x33\x5e\x53\x5e')])||_0x3df0a2[_0x5b7636(0x265,'\x5d\x32\x56\x63')](_0x2511f5[_0x5b7636(0x13c,'\x6a\x49\x57\x6a')][_0x5b7636(0x18a,'\x57\x74\x79\x74')],0xa62+-0x38*0xc+0x3*-0x296))continue;var _0x156ab1=new Set(_0x2511f5[_0x5b7636(0x252,'\x63\x4c\x76\x67')][_0x5b7636(0x215,'\x58\x78\x68\x4e')](String)),_0x5e9edb=[];_0x31f41e[_0x5b7636(0x15c,'\x34\x67\x50\x29')](function(_0x4d96df){var _0x443d65=_0x5b7636;if(_0x156ab1[_0x443d65(0x172,'\x75\x6e\x43\x4e')](_0x4d96df))_0x5e9edb[_0x443d65(0x148,'\x34\x42\x79\x48')](_0x4d96df);});if(_0x3df0a2[_0x5b7636(0x227,'\x34\x42\x6d\x75')](_0x5e9edb['\x6c\x65\x6e\x67\x74\x68'],-0x850+-0x3ad*0x8+-0x11c*-0x22))continue;var _0x57a60d=_0x3df0a2[_0x5b7636(0x22c,'\x5d\x32\x56\x63')](_0x5e9edb[_0x5b7636(0x137,'\x58\x78\x68\x4e')],_0x52c2e8[_0x5b7636(0x151,'\x29\x4e\x36\x30')]);if(!_0x38e07e||_0x57a60d>_0x38e07e[_0x5b7636(0x181,'\x4b\x4e\x6b\x49')+'\x61\x74\x69\x6f']){var _0x2f16cf={};_0x2f16cf[_0x5b7636(0x208,'\x30\x6b\x46\x35')]=!![],_0x2f16cf[_0x5b7636(0x143,'\x39\x23\x75\x79')]=_0x2511f5['\x6e\x75\x6d\x62\x65\x72'],_0x2f16cf['\x70\x72\x54\x69\x74\x6c\x65']=_0x2511f5[_0x5b7636(0x1aa,'\x25\x5b\x74\x47')],_0x2f16cf['\x68\x65\x61\x64\x52\x65\x66\x4e'+_0x5b7636(0x205,'\x51\x35\x37\x32')]=_0x2511f5[_0x5b7636(0x254,'\x21\x75\x62\x75')+_0x5b7636(0x22a,'\x4b\x5d\x69\x6b')],_0x2f16cf[_0x5b7636(0x1c9,'\x4e\x55\x65\x36')+_0x5b7636(0x235,'\x30\x6b\x46\x35')]=_0x57a60d,_0x2f16cf[_0x5b7636(0x23a,'\x4a\x36\x4d\x44')+_0x5b7636(0x1f8,'\x42\x5e\x66\x69')]=_0x5e9edb,_0x38e07e=_0x2f16cf;}}}return _0x3df0a2['\x6f\x61\x73\x6d\x4b'](_0x38e07e,{'\x6f\x76\x65\x72\x6c\x61\x70':![],'\x72\x65\x61\x73\x6f\x6e':_0x3df0a2[_0x5b7636(0x1f0,'\x39\x23\x75\x79')]});}function _0x575d57(_0x38b333){var _0x38b621=_0x232e96,_0x170be9={'\x6c\x4b\x52\x4e\x71':function(_0x3b824e,_0x386650){return _0x3b824e!==_0x386650;},'\x69\x7a\x59\x72\x47':_0x38b621(0x1fd,'\x21\x6e\x67\x4b'),'\x6b\x41\x4e\x5a\x42':function(_0x151d9f,_0x288b09){return _0x151d9f>=_0x288b09;},'\x64\x57\x54\x77\x66':function(_0x159b27,_0x190ce9){return _0x159b27===_0x190ce9;},'\x64\x51\x55\x77\x62':_0x38b621(0x147,'\x6a\x72\x55\x58'),'\x75\x64\x65\x61\x6a':function(_0x59a99f,_0x19d755){return _0x59a99f(_0x19d755);},'\x4c\x54\x78\x51\x61':function(_0x1b307e,_0x16e04b){return _0x1b307e||_0x16e04b;},'\x72\x62\x78\x65\x4a':_0x38b621(0x223,'\x58\x78\x68\x4e'),'\x7a\x52\x77\x4d\x6c':_0x38b621(0x249,'\x53\x6d\x58\x33'),'\x75\x6b\x6f\x6a\x55':function(_0xee7c85,_0xc49c7c){return _0xee7c85-_0xc49c7c;},'\x64\x6f\x43\x59\x6b':function(_0x2b7078){return _0x2b7078();},'\x45\x44\x4d\x45\x78':function(_0x28c34e){return _0x28c34e();},'\x75\x50\x5a\x4a\x65':function(_0x4e4ea0,_0x49ed63){return _0x4e4ea0===_0x49ed63;},'\x75\x6e\x6d\x6c\x71':function(_0x56e412,_0x571b2f){return _0x56e412<_0x571b2f;},'\x62\x6f\x63\x46\x4b':function(_0x12fb85,_0x476c63){return _0x12fb85<_0x476c63;},'\x46\x7a\x73\x4e\x79':function(_0x5c84a3,_0x2d9ec1){return _0x5c84a3===_0x2d9ec1;},'\x63\x7a\x74\x6f\x4b':function(_0x15fdab,_0x10508c){return _0x15fdab/_0x10508c;},'\x4f\x4a\x7a\x4e\x4a':function(_0x1cf7d7,_0x4763a3){return _0x1cf7d7>=_0x4763a3;}};if(!_0x170be9[_0x38b621(0x197,'\x5d\x67\x50\x49')](_0x59e36d))return[];var _0x381b82=_0x38b333&&Array[_0x38b621(0x198,'\x35\x76\x28\x4b')](_0x38b333[_0x38b621(0x204,'\x67\x63\x76\x26')])?_0x38b333[_0x38b621(0x13b,'\x56\x2a\x46\x42')]:[];if(_0x170be9[_0x38b621(0x189,'\x21\x6e\x67\x4b')](_0x381b82['\x6c\x65\x6e\x67\x74\x68'],0x1d2c+0x167d+-0x33a9))return[];var _0x32073f=_0x38b333&&Array[_0x38b621(0x220,'\x57\x74\x79\x74')](_0x38b333[_0x38b621(0x13f,'\x54\x32\x5b\x74')])?_0x38b333[_0x38b621(0x1e6,'\x34\x64\x37\x6c')]:_0x170be9[_0x38b621(0x16e,'\x5d\x32\x56\x63')](_0x596eb3);if(_0x170be9[_0x38b621(0x1a3,'\x34\x42\x79\x48')](_0x32073f[_0x38b621(0x132,'\x54\x32\x5b\x74')],0x3f3+0x16b7+0x2*-0xd55))return[];var _0x212c03=_0x38b333&&Number[_0x38b621(0x1a9,'\x6a\x72\x55\x58')](_0x38b333[_0x38b621(0x207,'\x58\x78\x68\x4e')+'\x64'])?_0x38b333[_0x38b621(0x190,'\x67\x63\x76\x26')+'\x64']:-0x8*-0x419+0x2*0xa57+0x1*-0x3576+0.5;function _0x3a4266(_0x21b2c7){var _0x5798ce=_0x38b621;if(_0x170be9['\x64\x57\x54\x77\x66'](_0x170be9[_0x5798ce(0x1ee,'\x34\x67\x50\x29')],_0x170be9['\x64\x51\x55\x77\x62']))return _0x170be9[_0x5798ce(0x209,'\x4b\x5d\x69\x6b')](String,_0x170be9['\x4c\x54\x78\x51\x61'](_0x21b2c7,''))['\x74\x6f\x4c\x6f\x77\x65\x72\x43'+_0x5798ce(0x168,'\x4d\x43\x56\x64')]()[_0x5798ce(0x201,'\x41\x64\x25\x28')](/[^a-z0-9]+/g,'\x20')[_0x5798ce(0x1d3,'\x30\x6b\x46\x35')](/\s+/)[_0x5798ce(0x159,'\x42\x5e\x66\x69')](function(_0x57f8f2){var _0x354c9e=_0x5798ce;if(_0x170be9[_0x354c9e(0x186,'\x52\x25\x6d\x25')]('\x55\x71\x78\x56\x68',_0x170be9[_0x354c9e(0x1cd,'\x70\x55\x42\x6c')]))return _0x170be9[_0x354c9e(0x210,'\x34\x42\x6d\x75')](_0x57f8f2[_0x354c9e(0x1c5,'\x5d\x67\x50\x49')],-0x1488+-0xb45+0x3fa*0x8);else _0x376ab0[_0x354c9e(0x17e,'\x52\x25\x6d\x25')](_0x5944f4);});else _0xd86b89[_0x5798ce(0x169,'\x53\x6d\x58\x33')](_0x4b929c);}var _0x1d44fd=new Set();for(var _0x4a43f9=0x156f+0x58f*-0x5+-0x197*-0x4;_0x170be9[_0x38b621(0x213,'\x33\x5e\x53\x5e')](_0x4a43f9,_0x381b82[_0x38b621(0x17b,'\x34\x42\x6d\x75')]);_0x4a43f9++){_0x170be9[_0x38b621(0x183,'\x63\x4c\x76\x67')](_0x3a4266,_0x381b82[_0x4a43f9])[_0x38b621(0x269,'\x70\x55\x42\x6c')](function(_0x61c86c){var _0x30c1f7=_0x38b621;_0x1d44fd[_0x30c1f7(0x1db,'\x21\x6e\x67\x4b')](_0x61c86c);});}if(_0x1d44fd[_0x38b621(0x182,'\x65\x36\x4a\x45')]===-0x11cc+-0xbc4+0x16*0x158)return[];var _0x46f993=[];for(var _0x29580d=0x23ce+-0x11a2+-0x122c;_0x170be9[_0x38b621(0x174,'\x39\x23\x75\x79')](_0x29580d,_0x32073f[_0x38b621(0x20c,'\x4e\x55\x65\x36')]);_0x29580d++){var _0xba7a30=_0x32073f[_0x29580d];if(!_0xba7a30)continue;var _0x467ac4=new Set();_0x170be9[_0x38b621(0x1f9,'\x67\x63\x76\x26')](_0x3a4266,_0xba7a30[_0x38b621(0x22f,'\x63\x4c\x76\x67')])[_0x38b621(0x1e7,'\x4e\x55\x65\x36')](function(_0x4721ff){var _0x14fc71=_0x38b621;_0x467ac4[_0x14fc71(0x12e,'\x6a\x49\x57\x6a')](_0x4721ff);}),_0x170be9[_0x38b621(0x1a4,'\x28\x5d\x29\x58')](_0x3a4266,_0xba7a30['\x68\x65\x61\x64\x52\x65\x66\x4e'+_0x38b621(0x142,'\x28\x5d\x29\x58')])[_0x38b621(0x269,'\x70\x55\x42\x6c')](function(_0x3f24e7){var _0x31cb55=_0x38b621;_0x467ac4[_0x31cb55(0x1c2,'\x33\x5e\x53\x5e')](_0x3f24e7);});if(_0x170be9['\x46\x7a\x73\x4e\x79'](_0x467ac4[_0x38b621(0x1f6,'\x34\x42\x6d\x75')],0x509*-0x6+-0x240a+0x4240))continue;var _0x27e39f=-0xd*-0x192+-0x303*-0x9+-0x2f85;_0x1d44fd[_0x38b621(0x1e7,'\x4e\x55\x65\x36')](function(_0x2c0b50){var _0x5a5587=_0x38b621;if(_0x170be9[_0x5a5587(0x160,'\x67\x63\x76\x26')]===_0x170be9[_0x5a5587(0x133,'\x6b\x67\x52\x53')])!_0x303f75&&(_0x14cd33=!![],_0x480306[_0x5a5587(0x1f7,'\x65\x36\x4a\x45')](_0x5a5587(0x253,'\x63\x57\x74\x6d')+'\x20\x67\x68\x20\x43\x4c\x49\x20'+_0x5a5587(0x20b,'\x4c\x62\x69\x23')+_0x5a5587(0x1b5,'\x4b\x5d\x69\x6b')+_0x5a5587(0x222,'\x6a\x72\x55\x58')+_0x5a5587(0x1c1,'\x29\x4e\x36\x30')+_0x5a5587(0x259,'\x54\x32\x5b\x74')+_0x5a5587(0x22d,'\x4c\x62\x69\x23')+_0x5a5587(0x1cb,'\x70\x55\x42\x6c')+_0x5a5587(0x232,'\x33\x55\x5a\x45')+_0x5a5587(0x25a,'\x39\x23\x75\x79')+'\x65\x74\x20\x45\x56\x4f\x4c\x56'+_0x5a5587(0x21b,'\x44\x4f\x21\x6a')+_0x5a5587(0x13a,'\x67\x63\x76\x26')+'\x30\x20\x74\x6f\x20\x73\x69\x6c'+_0x5a5587(0x214,'\x52\x25\x6d\x25')));else{if(_0x467ac4[_0x5a5587(0x21a,'\x35\x76\x28\x4b')](_0x2c0b50))_0x27e39f++;}});var _0x1a010d=_0x170be9[_0x38b621(0x157,'\x6b\x67\x52\x53')](_0x27e39f,_0x1d44fd[_0x38b621(0x22b,'\x70\x55\x42\x6c')]);if(_0x170be9[_0x38b621(0x229,'\x29\x4e\x36\x30')](_0x1a010d,_0x212c03)){var _0x55c3e1=Array[_0x38b621(0x23b,'\x33\x5e\x53\x5e')](_0xba7a30['\x66\x69\x6c\x65\x73'])?_0xba7a30[_0x38b621(0x26a,'\x6a\x72\x55\x58')][_0x38b621(0x225,'\x28\x5d\x29\x58')](-0x1*-0xb5c+-0xa64+-0xf8,0x506*0x4+-0x221c+0xe09):[],_0x5a7a84={};_0x5a7a84[_0x38b621(0x1af,'\x67\x63\x76\x26')]=_0xba7a30['\x6e\x75\x6d\x62\x65\x72'],_0x5a7a84[_0x38b621(0x150,'\x36\x53\x49\x6b')]=_0xba7a30[_0x38b621(0x231,'\x75\x6e\x43\x4e')],_0x5a7a84[_0x38b621(0x257,'\x41\x64\x25\x28')+_0x38b621(0x19e,'\x4e\x74\x6d\x48')]=_0xba7a30[_0x38b621(0x1fc,'\x33\x55\x5a\x45')+_0x38b621(0x18b,'\x33\x5e\x53\x5e')],_0x5a7a84['\x66\x69\x6c\x65\x73']=_0x55c3e1,_0x5a7a84[_0x38b621(0x1c3,'\x51\x35\x37\x32')+_0x38b621(0x1e3,'\x34\x67\x50\x29')]=_0x1a010d,_0x46f993[_0x38b621(0x195,'\x67\x63\x76\x26')](_0x5a7a84);}}return _0x46f993[_0x38b621(0x1f1,'\x35\x76\x28\x4b')](function(_0x1db8a3,_0x1d6ff9){var _0x38bdd6=_0x38b621;return _0x170be9[_0x38bdd6(0x21c,'\x56\x2a\x46\x42')](_0x1d6ff9[_0x38bdd6(0x264,'\x6a\x49\x57\x6a')+_0x38bdd6(0x1be,'\x33\x5e\x53\x5e')],_0x1db8a3[_0x38bdd6(0x226,'\x65\x36\x4a\x45')+_0x38bdd6(0x12b,'\x33\x55\x5a\x45')]);}),_0x46f993[_0x38b621(0x12a,'\x6a\x49\x57\x6a')](0x488+0x154+0xa*-0x96,-0x26bc+-0x5*0x98+0x29b7);}function _0x9d56b3(){_0x3ec3e9=null,_0x2d634d=-0x1*0x24cb+0x1a7c+0xd*0xcb,_0x25903c=null,_0x12019c=![];}var _0x1d6469={};_0x1d6469['\x67\x65\x74\x4f\x70\x65\x6e\x50'+'\x52\x73']=_0x596eb3,_0x1d6469['\x66\x69\x6e\x64\x4f\x76\x65\x72'+'\x6c\x61\x70']=_0x1b271a,_0x1d6469[_0x232e96(0x20a,'\x41\x64\x25\x28')+_0x232e96(0x211,'\x56\x2a\x46\x42')]=_0x575d57,_0x1d6469[_0x232e96(0x262,'\x33\x5e\x53\x5e')+_0x232e96(0x1dd,'\x6a\x49\x57\x6a')]=_0x9d56b3,module[_0x232e96(0x1ab,'\x4e\x74\x6d\x48')]=_0x1d6469;
|
package/src/gep/paths.js
DELETED
|
@@ -1,522 +0,0 @@
|
|
|
1
|
-
const path = require('path');
|
|
2
|
-
const fs = require('fs');
|
|
3
|
-
const os = require('os');
|
|
4
|
-
|
|
5
|
-
let _cachedRepoRoot = null;
|
|
6
|
-
|
|
7
|
-
// Resolve the git repository that evolver should treat as its work area.
|
|
8
|
-
//
|
|
9
|
-
// Precedence:
|
|
10
|
-
// 1. EVOLVER_REPO_ROOT (explicit override, always wins)
|
|
11
|
-
// 2. Nearest ancestor of process.cwd() that has a .git
|
|
12
|
-
// (user ran evolver from inside their project)
|
|
13
|
-
// 3. Nearest ancestor of evolver's own directory that has a .git
|
|
14
|
-
// (local npm install: evolver is inside the project's node_modules)
|
|
15
|
-
// 4. evolver's own directory if it has a .git (dev mode fallback)
|
|
16
|
-
// 5. Fall back to evolver's own directory.
|
|
17
|
-
//
|
|
18
|
-
// CWD is checked first because the user's intent is almost always to
|
|
19
|
-
// evolve the project they're standing in, not evolver itself. evolver
|
|
20
|
-
// self-evolution happens naturally when CWD *is* the evolver repo.
|
|
21
|
-
//
|
|
22
|
-
// To opt out, set EVOLVER_NO_PARENT_GIT=true. The older
|
|
23
|
-
// EVOLVER_USE_PARENT_GIT=true flag is still honored for forward
|
|
24
|
-
// compatibility but is no longer required.
|
|
25
|
-
function getRepoRoot() {
|
|
26
|
-
// Always check EVOLVER_REPO_ROOT first, even when a cached value exists.
|
|
27
|
-
// .env is loaded during index.js bootstrap AFTER this function has
|
|
28
|
-
// already been called at least once (for locating the .env file
|
|
29
|
-
// itself). Caching the pre-dotenv result would permanently shadow any
|
|
30
|
-
// EVOLVER_REPO_ROOT later populated from .env. See #526.
|
|
31
|
-
if (process.env.EVOLVER_REPO_ROOT) {
|
|
32
|
-
_cachedRepoRoot = process.env.EVOLVER_REPO_ROOT;
|
|
33
|
-
return _cachedRepoRoot;
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
if (_cachedRepoRoot) return _cachedRepoRoot;
|
|
37
|
-
|
|
38
|
-
const ownDir = path.resolve(__dirname, '..', '..');
|
|
39
|
-
|
|
40
|
-
const noParent = String(process.env.EVOLVER_NO_PARENT_GIT || '').toLowerCase() === 'true';
|
|
41
|
-
// Older flag kept for backward compatibility. Setting it to 'false'
|
|
42
|
-
// explicitly is treated as an opt-out, mirroring EVOLVER_NO_PARENT_GIT.
|
|
43
|
-
const legacyFlag = process.env.EVOLVER_USE_PARENT_GIT;
|
|
44
|
-
const legacyOptOut = typeof legacyFlag === 'string' && legacyFlag.toLowerCase() === 'false';
|
|
45
|
-
|
|
46
|
-
// Both upward walks below must stop at the parent of the nearest
|
|
47
|
-
// `node_modules` ancestor — never escape into whatever `.git` happens
|
|
48
|
-
// to live above it (issue #541). On macOS with Homebrew, the global
|
|
49
|
-
// install lives at `/opt/homebrew/lib/node_modules/@evomap/evolver`
|
|
50
|
-
// and `/opt/homebrew` is itself a git repo; an unbounded walk
|
|
51
|
-
// therefore resolves repoRoot to `/opt/homebrew`, sending
|
|
52
|
-
// workspaceRoot / memoryDir / evolutionDir to a directory that
|
|
53
|
-
// doesn't belong to the user and silently producing evolution
|
|
54
|
-
// proposals for the wrong codebase.
|
|
55
|
-
//
|
|
56
|
-
// Boundary semantics: returns the parent of the nearest `node_modules`
|
|
57
|
-
// ancestor (inclusive — a `.git` at that parent IS still picked up),
|
|
58
|
-
// or null if `dir` is not inside any `node_modules` (dev clone /
|
|
59
|
-
// user project root). Callers stop AFTER checking the boundary path
|
|
60
|
-
// itself.
|
|
61
|
-
//
|
|
62
|
-
// For a local install (`<project>/node_modules/@evomap/evolver`), the
|
|
63
|
-
// parent of node_modules IS the user's project, so the boundary
|
|
64
|
-
// includes `<project>` and `<project>/.git` is still picked up
|
|
65
|
-
// correctly. For a dev clone, the boundary is null and the walk is
|
|
66
|
-
// unbounded as before.
|
|
67
|
-
function _nodeModulesBoundary(dir) {
|
|
68
|
-
const segments = dir.split(path.sep);
|
|
69
|
-
const nmIdx = segments.lastIndexOf('node_modules');
|
|
70
|
-
if (nmIdx <= 0) return null;
|
|
71
|
-
return segments.slice(0, nmIdx).join(path.sep) || path.sep;
|
|
72
|
-
}
|
|
73
|
-
|
|
74
|
-
function _walkForGit(start) {
|
|
75
|
-
const stopAt = _nodeModulesBoundary(start);
|
|
76
|
-
let dir = start;
|
|
77
|
-
while (dir !== path.dirname(dir)) {
|
|
78
|
-
if (fs.existsSync(path.join(dir, '.git'))) {
|
|
79
|
-
if (!process.env.EVOLVER_QUIET_PARENT_GIT) {
|
|
80
|
-
// Diagnostic, not data. Goes to stderr so it cannot poison
|
|
81
|
-
// a child process's stdout-as-JSON contract — the Stop hook
|
|
82
|
-
// emits JSON on stdout, and any caller invoking the hook via
|
|
83
|
-
// `execFileSync(...).stdout` + `JSON.parse(...)` would crash
|
|
84
|
-
// if this line landed there first. test/sessionEndHook.test.js
|
|
85
|
-
// was failing 5/5 locally for exactly this reason.
|
|
86
|
-
console.error('[evolver] Using host git repository at:', dir);
|
|
87
|
-
}
|
|
88
|
-
return dir;
|
|
89
|
-
}
|
|
90
|
-
if (stopAt !== null && dir === stopAt) break;
|
|
91
|
-
dir = path.dirname(dir);
|
|
92
|
-
}
|
|
93
|
-
return null;
|
|
94
|
-
}
|
|
95
|
-
|
|
96
|
-
// Walk upward from process.cwd() — the project the user is standing in.
|
|
97
|
-
// Bounded the same way as the ownDir walk: a user who `cd`s into the
|
|
98
|
-
// global install (e.g. `cd /opt/homebrew/lib/node_modules/@evomap/evolver`
|
|
99
|
-
// to debug) would otherwise hit `/opt/homebrew/.git` here BEFORE the
|
|
100
|
-
// ownDir walk runs, defeating its boundary. The boundary still
|
|
101
|
-
// includes the parent of node_modules, so a user `cd`'d into
|
|
102
|
-
// `<their-project>/node_modules/lodash` still has `<their-project>/.git`
|
|
103
|
-
// picked correctly.
|
|
104
|
-
if (!noParent && !legacyOptOut) {
|
|
105
|
-
const hit = _walkForGit(process.cwd());
|
|
106
|
-
if (hit) {
|
|
107
|
-
_cachedRepoRoot = hit;
|
|
108
|
-
return _cachedRepoRoot;
|
|
109
|
-
}
|
|
110
|
-
}
|
|
111
|
-
|
|
112
|
-
// Walk upward from ownDir's parent (local install inside node_modules).
|
|
113
|
-
if (!noParent && !legacyOptOut) {
|
|
114
|
-
const hit = _walkForGit(path.dirname(ownDir));
|
|
115
|
-
if (hit) {
|
|
116
|
-
_cachedRepoRoot = hit;
|
|
117
|
-
return _cachedRepoRoot;
|
|
118
|
-
}
|
|
119
|
-
}
|
|
120
|
-
|
|
121
|
-
// Fallback: evolver's own directory (dev mode or isolated install).
|
|
122
|
-
if (fs.existsSync(path.join(ownDir, '.git'))) {
|
|
123
|
-
_cachedRepoRoot = ownDir;
|
|
124
|
-
return _cachedRepoRoot;
|
|
125
|
-
}
|
|
126
|
-
|
|
127
|
-
// Final fallback.
|
|
128
|
-
//
|
|
129
|
-
// Opt-out (EVOLVER_NO_PARENT_GIT=true / EVOLVER_USE_PARENT_GIT=false) means
|
|
130
|
-
// "isolated install, treat my own dir as the root" -> ownDir.
|
|
131
|
-
//
|
|
132
|
-
// Otherwise: for a dev clone, ownDir IS the package root and is correct. But
|
|
133
|
-
// for an npm install, ownDir is `<prefix>/node_modules/@evomap/evolver`,
|
|
134
|
-
// the install dir, NOT the user's project. Falling back to it makes the
|
|
135
|
-
// daemon FATAL with "Not a git repository (...\node_modules\@evomap\evolver)"
|
|
136
|
-
// and tell the user to `git init` inside the global install dir, the wrong
|
|
137
|
-
// place (#580 Bug 2). When ownDir is inside a node_modules, prefer
|
|
138
|
-
// process.cwd(): it is where the user is standing and where they should
|
|
139
|
-
// actually `git init`, so the FATAL message points at the right directory.
|
|
140
|
-
// This still satisfies #541's invariant (the cwd/ownDir walks above already
|
|
141
|
-
// returned nothing, so we are not escaping to any host .git).
|
|
142
|
-
if (!noParent && !legacyOptOut && _nodeModulesBoundary(ownDir) !== null) {
|
|
143
|
-
_cachedRepoRoot = process.cwd();
|
|
144
|
-
return _cachedRepoRoot;
|
|
145
|
-
}
|
|
146
|
-
|
|
147
|
-
_cachedRepoRoot = ownDir;
|
|
148
|
-
return _cachedRepoRoot;
|
|
149
|
-
}
|
|
150
|
-
|
|
151
|
-
function getWorkspaceRoot() {
|
|
152
|
-
if (process.env.OPENCLAW_WORKSPACE) {
|
|
153
|
-
return process.env.OPENCLAW_WORKSPACE;
|
|
154
|
-
}
|
|
155
|
-
|
|
156
|
-
const repoRoot = getRepoRoot();
|
|
157
|
-
const workspaceDir = path.join(repoRoot, 'workspace');
|
|
158
|
-
if (fs.existsSync(workspaceDir)) {
|
|
159
|
-
return workspaceDir;
|
|
160
|
-
}
|
|
161
|
-
|
|
162
|
-
return repoRoot;
|
|
163
|
-
}
|
|
164
|
-
|
|
165
|
-
function getLogsDir() {
|
|
166
|
-
return process.env.EVOLVER_LOGS_DIR || path.join(getWorkspaceRoot(), 'logs');
|
|
167
|
-
}
|
|
168
|
-
|
|
169
|
-
function getEvolverLogPath() {
|
|
170
|
-
return path.join(getLogsDir(), 'evolver_loop.log');
|
|
171
|
-
}
|
|
172
|
-
|
|
173
|
-
function getMemoryDir() {
|
|
174
|
-
return process.env.MEMORY_DIR || path.join(getWorkspaceRoot(), 'memory');
|
|
175
|
-
}
|
|
176
|
-
|
|
177
|
-
function getSessionScope() {
|
|
178
|
-
const raw = String(process.env.EVOLVER_SESSION_SCOPE || '').trim();
|
|
179
|
-
if (!raw) return null;
|
|
180
|
-
const safe = raw.replace(/[^a-zA-Z0-9_\-\.]/g, '_').slice(0, 128);
|
|
181
|
-
if (!safe || /^\.{1,2}$/.test(safe) || /\.\./.test(safe)) return null;
|
|
182
|
-
return safe;
|
|
183
|
-
}
|
|
184
|
-
|
|
185
|
-
function getEvolutionDir() {
|
|
186
|
-
const baseDir = process.env.EVOLUTION_DIR || path.join(getMemoryDir(), 'evolution');
|
|
187
|
-
const scope = getSessionScope();
|
|
188
|
-
if (scope) {
|
|
189
|
-
return path.join(baseDir, 'scopes', scope);
|
|
190
|
-
}
|
|
191
|
-
return baseDir;
|
|
192
|
-
}
|
|
193
|
-
|
|
194
|
-
function getGepAssetsDir() {
|
|
195
|
-
const baseDir = process.env.GEP_ASSETS_DIR || path.join(getWorkspaceRoot(), '.evolver', 'gep');
|
|
196
|
-
const scope = getSessionScope();
|
|
197
|
-
if (scope) {
|
|
198
|
-
return path.join(baseDir, 'scopes', scope);
|
|
199
|
-
}
|
|
200
|
-
return baseDir;
|
|
201
|
-
}
|
|
202
|
-
|
|
203
|
-
function getBundledGepAssetsDir() {
|
|
204
|
-
return path.join(getEvolverInstallRoot(), 'assets', 'gep');
|
|
205
|
-
}
|
|
206
|
-
|
|
207
|
-
function getSkillsDir() {
|
|
208
|
-
return process.env.SKILLS_DIR || path.join(getWorkspaceRoot(), 'skills');
|
|
209
|
-
}
|
|
210
|
-
|
|
211
|
-
// Resolve the OpenClaw `sessions` directory for the agent that actually
|
|
212
|
-
// matches the current EVOLVER_SESSION_SCOPE (fixes #371).
|
|
213
|
-
//
|
|
214
|
-
// Precedence:
|
|
215
|
-
// 1. AGENT_SESSIONS_DIR explicit override
|
|
216
|
-
// 2. EVOLVER_SESSION_SCOPE with a `workspace-<agent>` prefix =>
|
|
217
|
-
// ~/.openclaw/agents/<agent>/sessions
|
|
218
|
-
// 3. AGENT_NAME (defaults to "main") pre-#371 behavior
|
|
219
|
-
function getAgentSessionsDir() {
|
|
220
|
-
if (process.env.AGENT_SESSIONS_DIR) return process.env.AGENT_SESSIONS_DIR;
|
|
221
|
-
|
|
222
|
-
const scope = getSessionScope();
|
|
223
|
-
let agentName = null;
|
|
224
|
-
if (scope) {
|
|
225
|
-
const match = /^workspace-(.+)$/.exec(scope);
|
|
226
|
-
if (match) agentName = match[1];
|
|
227
|
-
}
|
|
228
|
-
if (!agentName) agentName = process.env.AGENT_NAME || 'main';
|
|
229
|
-
|
|
230
|
-
// Honor an explicit HOME override (used by tests to redirect to a fake
|
|
231
|
-
// home) before falling back to os.homedir(). On POSIX, os.homedir() also
|
|
232
|
-
// reads $HOME first, so this is a no-op in practice on macOS/Linux. On
|
|
233
|
-
// Windows, os.homedir() reads %USERPROFILE% and ignores HOME -- without
|
|
234
|
-
// this fallback, test/paths.test.js cannot inject a fake home and the
|
|
235
|
-
// tests fail with C:\Users\... vs the test's \tmp\home\... expectation.
|
|
236
|
-
// Same pattern as the reset-local-secret fix in eb423dc.
|
|
237
|
-
const home = process.env.HOME || os.homedir();
|
|
238
|
-
return path.join(home, '.openclaw', 'agents', agentName, 'sessions');
|
|
239
|
-
}
|
|
240
|
-
|
|
241
|
-
// Read the first `maxBytes` of a session .jsonl file and extract the `cwd`
|
|
242
|
-
// field from its header record (fixes #371, bug 2). The pre-fix matcher
|
|
243
|
-
// tailed the file, so it never saw the header. This helper is O(1) on file
|
|
244
|
-
// size. Returns null on any read/parse failure.
|
|
245
|
-
function readSessionCwdFromHead(sessionFilePath, maxBytes) {
|
|
246
|
-
const cap = typeof maxBytes === 'number' && maxBytes > 0 ? maxBytes : 800;
|
|
247
|
-
try {
|
|
248
|
-
if (!fs.existsSync(sessionFilePath)) return null;
|
|
249
|
-
const fd = fs.openSync(sessionFilePath, 'r');
|
|
250
|
-
try {
|
|
251
|
-
const stat = fs.fstatSync(fd);
|
|
252
|
-
const readSize = Math.min(cap, stat.size);
|
|
253
|
-
if (readSize <= 0) return null;
|
|
254
|
-
const buf = Buffer.alloc(readSize);
|
|
255
|
-
fs.readSync(fd, buf, 0, readSize, 0);
|
|
256
|
-
const newline = buf.indexOf('\n');
|
|
257
|
-
const slice = newline >= 0 ? buf.slice(0, newline) : buf;
|
|
258
|
-
const record = JSON.parse(slice.toString('utf8'));
|
|
259
|
-
if (record && typeof record.cwd === 'string') return record.cwd;
|
|
260
|
-
return null;
|
|
261
|
-
} finally {
|
|
262
|
-
fs.closeSync(fd);
|
|
263
|
-
}
|
|
264
|
-
} catch (_err) {
|
|
265
|
-
return null;
|
|
266
|
-
}
|
|
267
|
-
}
|
|
268
|
-
|
|
269
|
-
function getNarrativePath() {
|
|
270
|
-
return path.join(getEvolutionDir(), 'evolution_narrative.md');
|
|
271
|
-
}
|
|
272
|
-
|
|
273
|
-
function getEvolutionPrinciplesPath() {
|
|
274
|
-
const repoRoot = getRepoRoot();
|
|
275
|
-
const custom = path.join(repoRoot, 'EVOLUTION_PRINCIPLES.md');
|
|
276
|
-
if (fs.existsSync(custom)) return custom;
|
|
277
|
-
return path.join(repoRoot, 'assets', 'gep', 'EVOLUTION_PRINCIPLES.md');
|
|
278
|
-
}
|
|
279
|
-
|
|
280
|
-
function getReflectionLogPath() {
|
|
281
|
-
return path.join(getEvolutionDir(), 'reflection_log.jsonl');
|
|
282
|
-
}
|
|
283
|
-
|
|
284
|
-
// Resolve the evolver INSTALLATION directory (the package containing this file),
|
|
285
|
-
// independent of any host git repo or process.cwd().
|
|
286
|
-
//
|
|
287
|
-
// Use this — never getRepoRoot() — for any operation that mutates evolver's
|
|
288
|
-
// own files (force-update, self-PR, integrity rewrites, etc.). getRepoRoot()
|
|
289
|
-
// preferentially returns the user's surrounding project so that evolution
|
|
290
|
-
// signals are scoped to *their* code; using it for self-mutation will
|
|
291
|
-
// overwrite the user's project with evolver's package contents (issue #51).
|
|
292
|
-
//
|
|
293
|
-
// path.resolve(__dirname, '..', '..') is stable across all install modes:
|
|
294
|
-
// - global npm: /usr/lib/node_modules/@evomap/evolver/src/gep/paths.js
|
|
295
|
-
// → /usr/lib/node_modules/@evomap/evolver
|
|
296
|
-
// - local install: <project>/node_modules/@evomap/evolver/src/gep/paths.js
|
|
297
|
-
// → <project>/node_modules/@evomap/evolver
|
|
298
|
-
// - dev clone: /home/user/evolver/src/gep/paths.js → /home/user/evolver
|
|
299
|
-
function getEvolverInstallRoot() {
|
|
300
|
-
return path.resolve(__dirname, '..', '..');
|
|
301
|
-
}
|
|
302
|
-
|
|
303
|
-
// Resolve the per-user `~/.evomap` directory, with `EVOLVER_HOME` env var
|
|
304
|
-
// override. Lazy (function call, not a module-level `const`) so tests can
|
|
305
|
-
// flip `EVOLVER_HOME` per case without monkey-patching `os.homedir`.
|
|
306
|
-
//
|
|
307
|
-
// Existing call sites used to duplicate `path.join(os.homedir(), '.evomap')`
|
|
308
|
-
// across ~9 modules; about two thirds silently ignored `EVOLVER_HOME` (it
|
|
309
|
-
// worked for stake bootstrap and claim nudge but not for node-id, device-id,
|
|
310
|
-
// feature flags, etc.). #114 consolidates onto this helper so the override
|
|
311
|
-
// is uniform and tests don't need to monkey-patch the global homedir
|
|
312
|
-
// function (which doesn't compose with `node --test` parallel execution).
|
|
313
|
-
function getEvomapDir() {
|
|
314
|
-
return process.env.EVOLVER_HOME || path.join(os.homedir(), '.evomap');
|
|
315
|
-
}
|
|
316
|
-
|
|
317
|
-
// Join sub-segments under `~/.evomap`. Just a convenience wrapper so call
|
|
318
|
-
// sites don't have to `path.join(getEvomapDir(), 'mailbox', 'state.json')`
|
|
319
|
-
// in two pieces.
|
|
320
|
-
function getEvomapPath(...segments) {
|
|
321
|
-
return path.join(getEvomapDir(), ...segments);
|
|
322
|
-
}
|
|
323
|
-
|
|
324
|
-
// Per-workspace random secret used to attest that a memory_graph.jsonl
|
|
325
|
-
// entry was written by the same workspace that's now reading it. Stored
|
|
326
|
-
// at <workspace>/.evolver/workspace-id with mode 0600 and lazily created
|
|
327
|
-
// on first call. Returns null on read/write errors so callers can fall
|
|
328
|
-
// back to legacy cwd-tag matching.
|
|
329
|
-
//
|
|
330
|
-
// Why this exists: when memory_graph.jsonl lives at the user-level path
|
|
331
|
-
// (~/.evolver/memory/evolution/memory_graph.jsonl, used by npm-global
|
|
332
|
-
// installs), it's shared across every workspace under the same uid. The
|
|
333
|
-
// PR #108 cwd-tag layer scopes reads to the current cwd, but `cwd` is a
|
|
334
|
-
// plain-text self-report — any process writing the shared file can
|
|
335
|
-
// claim a different workspace. workspace-id replaces that self-report
|
|
336
|
-
// with a secret that only the legitimate workspace's evolver knows
|
|
337
|
-
// (Bugbot PR #108 round-3 Agentic Security Review MEDIUM).
|
|
338
|
-
//
|
|
339
|
-
// Issue #111 Phase 1: optionally backs the secret with the OS keychain
|
|
340
|
-
// (`@napi-rs/keyring` optional dep) to close the same-uid readability
|
|
341
|
-
// gap. Mode is controlled by `EVOLVER_WORKSPACE_KEYCHAIN` (auto/force/
|
|
342
|
-
// off, default `auto`). FS file is RETAINED on successful keychain
|
|
343
|
-
// migration so bun-compiled binaries (which can't `require()` the
|
|
344
|
-
// addon yet — Phase 2) still see the same id when handing off to a
|
|
345
|
-
// node-CLI session in the same workspace.
|
|
346
|
-
|
|
347
|
-
// Read the FS-backed workspace-id at <workspace>/.evolver/workspace-id.
|
|
348
|
-
// Returns the id on a clean read, null on any error or missing file.
|
|
349
|
-
// Symlink rejection matches the pre-keychain hardening from PR #109.
|
|
350
|
-
function _readWorkspaceIdFromFs(file) {
|
|
351
|
-
const dir = path.dirname(file);
|
|
352
|
-
try {
|
|
353
|
-
const dirStat = fs.lstatSync(dir, { throwIfNoEntry: false });
|
|
354
|
-
if (dirStat && dirStat.isSymbolicLink()) return null;
|
|
355
|
-
const fileStat = fs.lstatSync(file, { throwIfNoEntry: false });
|
|
356
|
-
if (!fileStat) return null;
|
|
357
|
-
if (fileStat.isSymbolicLink() || !fileStat.isFile()) return null;
|
|
358
|
-
const raw = fs.readFileSync(file, 'utf8').trim();
|
|
359
|
-
if (raw && /^[a-f0-9]{32,}$/i.test(raw)) return raw;
|
|
360
|
-
return null;
|
|
361
|
-
} catch {
|
|
362
|
-
return null;
|
|
363
|
-
}
|
|
364
|
-
}
|
|
365
|
-
|
|
366
|
-
// Atomically create <workspace>/.evolver/workspace-id with the given id
|
|
367
|
-
// (or generate one if `id` is null). Returns the id that ended up on
|
|
368
|
-
// disk, or null on any unrecoverable error. EEXIST races re-read.
|
|
369
|
-
function _writeWorkspaceIdToFs(file, id) {
|
|
370
|
-
const dir = path.dirname(file);
|
|
371
|
-
try {
|
|
372
|
-
// Refuse to write if `.evolver` is a symlink. mkdirSync({recursive:true})
|
|
373
|
-
// happily traverses an existing symlinked directory and the subsequent
|
|
374
|
-
// open() lands the secret file in the attacker-controlled target —
|
|
375
|
-
// O_NOFOLLOW only guards the FINAL path component, not intermediate
|
|
376
|
-
// directories. The pre-refactor monolithic getWorkspaceId() returned
|
|
377
|
-
// null on a symlinked dir before reaching the write; preserve that
|
|
378
|
-
// here (Bugbot PR #121 round-1 HIGH; original guard PR #109 round-2 HIGH).
|
|
379
|
-
const dirStat = fs.lstatSync(dir, { throwIfNoEntry: false });
|
|
380
|
-
if (dirStat && dirStat.isSymbolicLink()) return null;
|
|
381
|
-
fs.mkdirSync(dir, { recursive: true });
|
|
382
|
-
const payload = id || require('crypto').randomBytes(16).toString('hex');
|
|
383
|
-
// Atomic create-and-fail-if-exists so we never overwrite an
|
|
384
|
-
// attacker-pre-placed file (TOCTOU between lstat and writeFileSync
|
|
385
|
-
// could otherwise race a symlink in). O_NOFOLLOW also refuses to
|
|
386
|
-
// follow a symlink that appears between the lstat and open. Both
|
|
387
|
-
// flags exist on Linux/macOS; on Windows O_NOFOLLOW is silently
|
|
388
|
-
// ignored, but Windows has no symlink-by-default risk.
|
|
389
|
-
// NOTE(windows): mode 0o600 passed to openSync is silently ignored on
|
|
390
|
-
// Windows. The workspace-id file will NOT be restricted to owner-read-only.
|
|
391
|
-
// Only Windows user-profile directory ACLs provide isolation. To get
|
|
392
|
-
// proper per-user encryption on Windows, install @napi-rs/keyring — the
|
|
393
|
-
// keychain path above will store the id in Credential Manager (DPAPI)
|
|
394
|
-
// instead of this plaintext file.
|
|
395
|
-
const flags = fs.constants.O_WRONLY | fs.constants.O_CREAT | fs.constants.O_EXCL |
|
|
396
|
-
(fs.constants.O_NOFOLLOW || 0);
|
|
397
|
-
let fd;
|
|
398
|
-
try {
|
|
399
|
-
fd = fs.openSync(file, flags, 0o600);
|
|
400
|
-
} catch (e) {
|
|
401
|
-
if (e && e.code === 'EEXIST') {
|
|
402
|
-
// Another process beat us — re-read with the same symlink guards.
|
|
403
|
-
return _readWorkspaceIdFromFs(file);
|
|
404
|
-
}
|
|
405
|
-
// ELOOP / EMLINK from O_NOFOLLOW hitting a symlink — refuse.
|
|
406
|
-
return null;
|
|
407
|
-
}
|
|
408
|
-
try {
|
|
409
|
-
fs.writeSync(fd, payload + '\n', 0, 'utf8');
|
|
410
|
-
} finally {
|
|
411
|
-
fs.closeSync(fd);
|
|
412
|
-
}
|
|
413
|
-
// Best-effort chmod: silently ignored on Windows (no equivalent ACL API).
|
|
414
|
-
try { fs.chmodSync(file, 0o600); } catch { /* best-effort; no-op on Windows */ }
|
|
415
|
-
return payload;
|
|
416
|
-
} catch {
|
|
417
|
-
return null;
|
|
418
|
-
}
|
|
419
|
-
}
|
|
420
|
-
|
|
421
|
-
function getWorkspaceId() {
|
|
422
|
-
if (process.env.EVOLVER_WORKSPACE_ID) return String(process.env.EVOLVER_WORKSPACE_ID);
|
|
423
|
-
const workspaceRoot = getWorkspaceRoot();
|
|
424
|
-
const dir = path.join(workspaceRoot, '.evolver');
|
|
425
|
-
const file = path.join(dir, 'workspace-id');
|
|
426
|
-
|
|
427
|
-
let mode = 'off';
|
|
428
|
-
let keychain = null;
|
|
429
|
-
try {
|
|
430
|
-
keychain = require('./workspaceKeychain');
|
|
431
|
-
mode = keychain.getMode();
|
|
432
|
-
} catch {
|
|
433
|
-
// workspaceKeychain.js missing — degrade silently to FS-only.
|
|
434
|
-
mode = 'off';
|
|
435
|
-
}
|
|
436
|
-
|
|
437
|
-
if (mode !== 'off' && keychain) {
|
|
438
|
-
const addonAvailable = keychain.loadAddon() !== null;
|
|
439
|
-
if (mode === 'force' && !addonAvailable) {
|
|
440
|
-
throw new Error(
|
|
441
|
-
'EVOLVER_WORKSPACE_KEYCHAIN=force but @napi-rs/keyring is not installed. ' +
|
|
442
|
-
'Install it (`npm i @napi-rs/keyring`) or set EVOLVER_WORKSPACE_KEYCHAIN=auto/off.'
|
|
443
|
-
);
|
|
444
|
-
}
|
|
445
|
-
if (addonAvailable) {
|
|
446
|
-
const hit = keychain.readFromKeychain(workspaceRoot);
|
|
447
|
-
if (hit.available && hit.id) return hit.id;
|
|
448
|
-
|
|
449
|
-
// `force` must NEVER fall back to FS read/write — that would
|
|
450
|
-
// silently re-introduce same-uid plaintext exposure of the
|
|
451
|
-
// workspace secret, which is exactly what `force` exists to
|
|
452
|
-
// prevent (Bugbot PR #121 round-2 MEDIUM Agentic Security).
|
|
453
|
-
// Generate a fresh id and write it ONLY to the keychain; if
|
|
454
|
-
// that write fails, throw rather than mirror to FS.
|
|
455
|
-
if (mode === 'force') {
|
|
456
|
-
if (hit.available) {
|
|
457
|
-
// Keychain reachable but empty — mint and write keychain-only.
|
|
458
|
-
const newId = require('crypto').randomBytes(16).toString('hex');
|
|
459
|
-
if (!keychain.writeToKeychain(workspaceRoot, newId)) {
|
|
460
|
-
throw new Error(
|
|
461
|
-
'EVOLVER_WORKSPACE_KEYCHAIN=force: keychain write failed; ' +
|
|
462
|
-
'refusing to fall back to filesystem secret.'
|
|
463
|
-
);
|
|
464
|
-
}
|
|
465
|
-
return newId;
|
|
466
|
-
}
|
|
467
|
-
// Addon loaded but read claims unavailable (e.g. locked
|
|
468
|
-
// keyring on Linux, no D-Bus session). Refuse rather than
|
|
469
|
-
// silently degrade.
|
|
470
|
-
throw new Error(
|
|
471
|
-
'EVOLVER_WORKSPACE_KEYCHAIN=force: keychain reports unavailable ' +
|
|
472
|
-
'(locked keyring / no session?); refusing to fall back to filesystem.'
|
|
473
|
-
);
|
|
474
|
-
}
|
|
475
|
-
|
|
476
|
-
// mode === 'auto', keychain miss — try to migrate an existing
|
|
477
|
-
// FS secret in.
|
|
478
|
-
const fsId = _readWorkspaceIdFromFs(file);
|
|
479
|
-
if (fsId) {
|
|
480
|
-
keychain.writeToKeychain(workspaceRoot, fsId); // best-effort
|
|
481
|
-
return fsId;
|
|
482
|
-
}
|
|
483
|
-
|
|
484
|
-
// No secret anywhere — generate, write FS atomically, then
|
|
485
|
-
// mirror to keychain. FS write is the source of truth for the
|
|
486
|
-
// value (race-resistant via O_EXCL); keychain is the upgrade.
|
|
487
|
-
const newId = _writeWorkspaceIdToFs(file, null);
|
|
488
|
-
if (!newId) return null;
|
|
489
|
-
keychain.writeToKeychain(workspaceRoot, newId); // best-effort
|
|
490
|
-
return newId;
|
|
491
|
-
}
|
|
492
|
-
// mode === 'auto' && addon unavailable → fall through to FS.
|
|
493
|
-
}
|
|
494
|
-
|
|
495
|
-
// FS-only path (mode === 'off' or auto-fallback). Identical to the
|
|
496
|
-
// pre-#111 implementation in observable behavior.
|
|
497
|
-
const existing = _readWorkspaceIdFromFs(file);
|
|
498
|
-
if (existing) return existing;
|
|
499
|
-
return _writeWorkspaceIdToFs(file, null);
|
|
500
|
-
}
|
|
501
|
-
|
|
502
|
-
module.exports = {
|
|
503
|
-
getRepoRoot,
|
|
504
|
-
getEvolverInstallRoot,
|
|
505
|
-
getWorkspaceRoot,
|
|
506
|
-
getLogsDir,
|
|
507
|
-
getEvolverLogPath,
|
|
508
|
-
getMemoryDir,
|
|
509
|
-
getEvolutionDir,
|
|
510
|
-
getGepAssetsDir,
|
|
511
|
-
getBundledGepAssetsDir,
|
|
512
|
-
getSkillsDir,
|
|
513
|
-
getSessionScope,
|
|
514
|
-
getAgentSessionsDir,
|
|
515
|
-
getWorkspaceId,
|
|
516
|
-
readSessionCwdFromHead,
|
|
517
|
-
getNarrativePath,
|
|
518
|
-
getEvolutionPrinciplesPath,
|
|
519
|
-
getReflectionLogPath,
|
|
520
|
-
getEvomapDir,
|
|
521
|
-
getEvomapPath,
|
|
522
|
-
};
|