From 66b2842e114760602c081d3c5787db7e6ba04b37 Mon Sep 17 00:00:00 2001 From: Kelvin Clement Mwinuka Date: Sun, 2 Jun 2024 22:52:02 +0800 Subject: [PATCH] Implemented tests for ACL permissions --- coverage/coverage.out | 1978 +++++++++++++------------ internal/modules/acl/acl.go | 73 +- internal/modules/acl/commands_test.go | 319 +++- 3 files changed, 1336 insertions(+), 1034 deletions(-) diff --git a/coverage/coverage.out b/coverage/coverage.out index 0331d575..bdc92204 100644 --- a/coverage/coverage.out +++ b/coverage/coverage.out @@ -1,4 +1,52 @@ mode: set +github.com/echovault/echovault/internal/aof/engine.go:50.56,51.30 1 1 +github.com/echovault/echovault/internal/aof/engine.go:51.30,53.3 1 1 +github.com/echovault/echovault/internal/aof/engine.go:56.57,57.30 1 1 +github.com/echovault/echovault/internal/aof/engine.go:57.30,59.3 1 1 +github.com/echovault/echovault/internal/aof/engine.go:62.59,63.30 1 1 +github.com/echovault/echovault/internal/aof/engine.go:63.30,65.3 1 1 +github.com/echovault/echovault/internal/aof/engine.go:68.58,69.30 1 1 +github.com/echovault/echovault/internal/aof/engine.go:69.30,71.3 1 1 +github.com/echovault/echovault/internal/aof/engine.go:74.59,75.30 1 1 +github.com/echovault/echovault/internal/aof/engine.go:75.30,77.3 1 1 +github.com/echovault/echovault/internal/aof/engine.go:80.82,81.30 1 1 +github.com/echovault/echovault/internal/aof/engine.go:81.30,83.3 1 1 +github.com/echovault/echovault/internal/aof/engine.go:86.89,87.30 1 1 +github.com/echovault/echovault/internal/aof/engine.go:87.30,89.3 1 1 +github.com/echovault/echovault/internal/aof/engine.go:92.73,93.30 1 1 +github.com/echovault/echovault/internal/aof/engine.go:93.30,95.3 1 1 +github.com/echovault/echovault/internal/aof/engine.go:98.82,99.30 1 1 +github.com/echovault/echovault/internal/aof/engine.go:99.30,101.3 1 1 +github.com/echovault/echovault/internal/aof/engine.go:104.78,105.30 1 1 +github.com/echovault/echovault/internal/aof/engine.go:105.30,107.3 1 1 +github.com/echovault/echovault/internal/aof/engine.go:110.69,118.29 1 1 +github.com/echovault/echovault/internal/aof/engine.go:118.30,118.31 0 0 +github.com/echovault/echovault/internal/aof/engine.go:119.30,119.31 0 0 +github.com/echovault/echovault/internal/aof/engine.go:120.57,120.71 1 0 +github.com/echovault/echovault/internal/aof/engine.go:121.63,121.64 0 0 +github.com/echovault/echovault/internal/aof/engine.go:122.44,122.45 0 0 +github.com/echovault/echovault/internal/aof/engine.go:127.2,127.33 1 1 +github.com/echovault/echovault/internal/aof/engine.go:127.33,129.3 1 1 +github.com/echovault/echovault/internal/aof/engine.go:132.2,139.16 2 1 +github.com/echovault/echovault/internal/aof/engine.go:139.16,141.3 1 0 +github.com/echovault/echovault/internal/aof/engine.go:142.2,152.16 3 1 +github.com/echovault/echovault/internal/aof/engine.go:152.16,154.3 1 0 +github.com/echovault/echovault/internal/aof/engine.go:155.2,159.12 2 1 +github.com/echovault/echovault/internal/aof/engine.go:159.12,160.7 1 1 +github.com/echovault/echovault/internal/aof/engine.go:160.7,162.54 2 1 +github.com/echovault/echovault/internal/aof/engine.go:162.54,164.5 1 0 +github.com/echovault/echovault/internal/aof/engine.go:168.2,168.20 1 1 +github.com/echovault/echovault/internal/aof/engine.go:171.52,173.2 1 1 +github.com/echovault/echovault/internal/aof/engine.go:175.42,183.62 5 1 +github.com/echovault/echovault/internal/aof/engine.go:183.62,185.3 1 0 +github.com/echovault/echovault/internal/aof/engine.go:188.2,188.54 1 1 +github.com/echovault/echovault/internal/aof/engine.go:188.54,190.3 1 0 +github.com/echovault/echovault/internal/aof/engine.go:192.2,192.12 1 1 +github.com/echovault/echovault/internal/aof/engine.go:195.39,196.55 1 1 +github.com/echovault/echovault/internal/aof/engine.go:196.55,198.3 1 0 +github.com/echovault/echovault/internal/aof/engine.go:199.2,199.53 1 1 +github.com/echovault/echovault/internal/aof/engine.go:199.53,201.3 1 0 +github.com/echovault/echovault/internal/aof/engine.go:202.2,202.12 1 1 github.com/echovault/echovault/internal/aof/preamble/store.go:45.62,46.36 1 1 github.com/echovault/echovault/internal/aof/preamble/store.go:46.36,48.3 1 1 github.com/echovault/echovault/internal/aof/preamble/store.go:51.71,52.36 1 0 @@ -54,95 +102,6 @@ github.com/echovault/echovault/internal/aof/preamble/store.go:185.43,187.4 1 1 github.com/echovault/echovault/internal/aof/preamble/store.go:189.2,189.35 1 1 github.com/echovault/echovault/internal/aof/preamble/store.go:189.35,191.3 1 1 github.com/echovault/echovault/internal/aof/preamble/store.go:192.2,192.14 1 1 -github.com/echovault/echovault/internal/config/config.go:64.34,70.24 3 0 -github.com/echovault/echovault/internal/config/config.go:70.24,72.35 2 0 -github.com/echovault/echovault/internal/config/config.go:72.35,74.5 1 0 -github.com/echovault/echovault/internal/config/config.go:75.4,75.22 1 0 -github.com/echovault/echovault/internal/config/config.go:75.22,77.5 1 0 -github.com/echovault/echovault/internal/config/config.go:78.4,79.14 2 0 -github.com/echovault/echovault/internal/config/config.go:82.2,82.115 1 0 -github.com/echovault/echovault/internal/config/config.go:82.115,85.3 2 0 -github.com/echovault/echovault/internal/config/config.go:87.2,90.29 2 0 -github.com/echovault/echovault/internal/config/config.go:90.29,91.86 1 0 -github.com/echovault/echovault/internal/config/config.go:91.86,93.5 1 0 -github.com/echovault/echovault/internal/config/config.go:93.7,95.5 1 0 -github.com/echovault/echovault/internal/config/config.go:96.4,97.14 2 0 -github.com/echovault/echovault/internal/config/config.go:100.2,103.59 2 0 -github.com/echovault/echovault/internal/config/config.go:103.59,105.17 2 0 -github.com/echovault/echovault/internal/config/config.go:105.17,107.4 1 0 -github.com/echovault/echovault/internal/config/config.go:108.3,109.13 2 0 -github.com/echovault/echovault/internal/config/config.go:112.2,121.88 2 0 -github.com/echovault/echovault/internal/config/config.go:121.88,128.23 3 0 -github.com/echovault/echovault/internal/config/config.go:128.23,130.5 1 0 -github.com/echovault/echovault/internal/config/config.go:131.4,132.14 2 0 -github.com/echovault/echovault/internal/config/config.go:135.2,139.24 2 0 -github.com/echovault/echovault/internal/config/config.go:139.24,140.36 1 0 -github.com/echovault/echovault/internal/config/config.go:140.36,142.5 1 0 -github.com/echovault/echovault/internal/config/config.go:143.4,144.14 2 0 -github.com/echovault/echovault/internal/config/config.go:147.2,219.22 25 0 -github.com/echovault/echovault/internal/config/config.go:219.22,221.45 1 0 -github.com/echovault/echovault/internal/config/config.go:221.45,222.14 1 0 -github.com/echovault/echovault/internal/config/config.go:223.9,224.17 1 0 -github.com/echovault/echovault/internal/config/config.go:224.17,225.36 1 0 -github.com/echovault/echovault/internal/config/config.go:225.36,227.6 1 0 -github.com/echovault/echovault/internal/config/config.go:230.4,232.22 2 0 -github.com/echovault/echovault/internal/config/config.go:232.22,233.59 1 0 -github.com/echovault/echovault/internal/config/config.go:233.59,235.6 1 0 -github.com/echovault/echovault/internal/config/config.go:238.4,238.39 1 0 -github.com/echovault/echovault/internal/config/config.go:238.39,239.59 1 0 -github.com/echovault/echovault/internal/config/config.go:239.59,241.6 1 0 -github.com/echovault/echovault/internal/config/config.go:247.2,249.45 2 0 -github.com/echovault/echovault/internal/config/config.go:249.45,251.3 1 0 -github.com/echovault/echovault/internal/config/config.go:253.2,253.18 1 0 -github.com/echovault/echovault/internal/config/default.go:8.29,38.2 1 0 -github.com/echovault/echovault/internal/aof/engine.go:50.56,51.30 1 1 -github.com/echovault/echovault/internal/aof/engine.go:51.30,53.3 1 1 -github.com/echovault/echovault/internal/aof/engine.go:56.57,57.30 1 1 -github.com/echovault/echovault/internal/aof/engine.go:57.30,59.3 1 1 -github.com/echovault/echovault/internal/aof/engine.go:62.59,63.30 1 1 -github.com/echovault/echovault/internal/aof/engine.go:63.30,65.3 1 1 -github.com/echovault/echovault/internal/aof/engine.go:68.58,69.30 1 1 -github.com/echovault/echovault/internal/aof/engine.go:69.30,71.3 1 1 -github.com/echovault/echovault/internal/aof/engine.go:74.59,75.30 1 1 -github.com/echovault/echovault/internal/aof/engine.go:75.30,77.3 1 1 -github.com/echovault/echovault/internal/aof/engine.go:80.82,81.30 1 1 -github.com/echovault/echovault/internal/aof/engine.go:81.30,83.3 1 1 -github.com/echovault/echovault/internal/aof/engine.go:86.89,87.30 1 1 -github.com/echovault/echovault/internal/aof/engine.go:87.30,89.3 1 1 -github.com/echovault/echovault/internal/aof/engine.go:92.73,93.30 1 1 -github.com/echovault/echovault/internal/aof/engine.go:93.30,95.3 1 1 -github.com/echovault/echovault/internal/aof/engine.go:98.82,99.30 1 1 -github.com/echovault/echovault/internal/aof/engine.go:99.30,101.3 1 1 -github.com/echovault/echovault/internal/aof/engine.go:104.78,105.30 1 1 -github.com/echovault/echovault/internal/aof/engine.go:105.30,107.3 1 1 -github.com/echovault/echovault/internal/aof/engine.go:110.69,118.29 1 1 -github.com/echovault/echovault/internal/aof/engine.go:118.30,118.31 0 0 -github.com/echovault/echovault/internal/aof/engine.go:119.30,119.31 0 0 -github.com/echovault/echovault/internal/aof/engine.go:120.57,120.71 1 0 -github.com/echovault/echovault/internal/aof/engine.go:121.63,121.64 0 0 -github.com/echovault/echovault/internal/aof/engine.go:122.44,122.45 0 0 -github.com/echovault/echovault/internal/aof/engine.go:127.2,127.33 1 1 -github.com/echovault/echovault/internal/aof/engine.go:127.33,129.3 1 1 -github.com/echovault/echovault/internal/aof/engine.go:132.2,139.16 2 1 -github.com/echovault/echovault/internal/aof/engine.go:139.16,141.3 1 0 -github.com/echovault/echovault/internal/aof/engine.go:142.2,152.16 3 1 -github.com/echovault/echovault/internal/aof/engine.go:152.16,154.3 1 0 -github.com/echovault/echovault/internal/aof/engine.go:155.2,159.12 2 1 -github.com/echovault/echovault/internal/aof/engine.go:159.12,160.7 1 1 -github.com/echovault/echovault/internal/aof/engine.go:160.7,162.54 2 1 -github.com/echovault/echovault/internal/aof/engine.go:162.54,164.5 1 0 -github.com/echovault/echovault/internal/aof/engine.go:168.2,168.20 1 1 -github.com/echovault/echovault/internal/aof/engine.go:171.52,173.2 1 1 -github.com/echovault/echovault/internal/aof/engine.go:175.42,183.62 5 1 -github.com/echovault/echovault/internal/aof/engine.go:183.62,185.3 1 0 -github.com/echovault/echovault/internal/aof/engine.go:188.2,188.54 1 1 -github.com/echovault/echovault/internal/aof/engine.go:188.54,190.3 1 0 -github.com/echovault/echovault/internal/aof/engine.go:192.2,192.12 1 1 -github.com/echovault/echovault/internal/aof/engine.go:195.39,196.55 1 1 -github.com/echovault/echovault/internal/aof/engine.go:196.55,198.3 1 0 -github.com/echovault/echovault/internal/aof/engine.go:199.2,199.53 1 1 -github.com/echovault/echovault/internal/aof/engine.go:199.53,201.3 1 0 -github.com/echovault/echovault/internal/aof/engine.go:202.2,202.12 1 1 github.com/echovault/echovault/internal/aof/log/store.go:46.60,47.34 1 1 github.com/echovault/echovault/internal/aof/log/store.go:47.34,49.3 1 1 github.com/echovault/echovault/internal/aof/log/store.go:52.61,53.34 1 1 @@ -167,8 +126,8 @@ github.com/echovault/echovault/internal/aof/log/store.go:106.2,106.51 1 1 github.com/echovault/echovault/internal/aof/log/store.go:106.51,107.13 1 1 github.com/echovault/echovault/internal/aof/log/store.go:107.13,108.8 1 1 github.com/echovault/echovault/internal/aof/log/store.go:108.8,110.40 2 1 -github.com/echovault/echovault/internal/aof/log/store.go:110.40,113.11 3 0 -github.com/echovault/echovault/internal/aof/log/store.go:115.5,116.41 2 1 +github.com/echovault/echovault/internal/aof/log/store.go:110.40,113.11 3 1 +github.com/echovault/echovault/internal/aof/log/store.go:115.5,116.41 2 0 github.com/echovault/echovault/internal/aof/log/store.go:121.2,121.19 1 1 github.com/echovault/echovault/internal/aof/log/store.go:124.55,126.21 1 1 github.com/echovault/echovault/internal/aof/log/store.go:126.21,128.3 1 0 @@ -198,6 +157,47 @@ github.com/echovault/echovault/internal/aof/log/store.go:191.2,191.47 1 0 github.com/echovault/echovault/internal/aof/log/store.go:191.47,193.3 1 0 github.com/echovault/echovault/internal/aof/log/store.go:194.2,194.12 1 0 github.com/echovault/echovault/internal/aof/log/store.go:197.41,201.2 3 1 +github.com/echovault/echovault/internal/config/config.go:64.34,70.24 3 0 +github.com/echovault/echovault/internal/config/config.go:70.24,72.35 2 0 +github.com/echovault/echovault/internal/config/config.go:72.35,74.5 1 0 +github.com/echovault/echovault/internal/config/config.go:75.4,75.22 1 0 +github.com/echovault/echovault/internal/config/config.go:75.22,77.5 1 0 +github.com/echovault/echovault/internal/config/config.go:78.4,79.14 2 0 +github.com/echovault/echovault/internal/config/config.go:82.2,82.115 1 0 +github.com/echovault/echovault/internal/config/config.go:82.115,85.3 2 0 +github.com/echovault/echovault/internal/config/config.go:87.2,90.29 2 0 +github.com/echovault/echovault/internal/config/config.go:90.29,91.86 1 0 +github.com/echovault/echovault/internal/config/config.go:91.86,93.5 1 0 +github.com/echovault/echovault/internal/config/config.go:93.7,95.5 1 0 +github.com/echovault/echovault/internal/config/config.go:96.4,97.14 2 0 +github.com/echovault/echovault/internal/config/config.go:100.2,103.59 2 0 +github.com/echovault/echovault/internal/config/config.go:103.59,105.17 2 0 +github.com/echovault/echovault/internal/config/config.go:105.17,107.4 1 0 +github.com/echovault/echovault/internal/config/config.go:108.3,109.13 2 0 +github.com/echovault/echovault/internal/config/config.go:112.2,121.88 2 0 +github.com/echovault/echovault/internal/config/config.go:121.88,128.23 3 0 +github.com/echovault/echovault/internal/config/config.go:128.23,130.5 1 0 +github.com/echovault/echovault/internal/config/config.go:131.4,132.14 2 0 +github.com/echovault/echovault/internal/config/config.go:135.2,139.24 2 0 +github.com/echovault/echovault/internal/config/config.go:139.24,140.36 1 0 +github.com/echovault/echovault/internal/config/config.go:140.36,142.5 1 0 +github.com/echovault/echovault/internal/config/config.go:143.4,144.14 2 0 +github.com/echovault/echovault/internal/config/config.go:147.2,219.22 25 0 +github.com/echovault/echovault/internal/config/config.go:219.22,221.45 1 0 +github.com/echovault/echovault/internal/config/config.go:221.45,222.14 1 0 +github.com/echovault/echovault/internal/config/config.go:223.9,224.17 1 0 +github.com/echovault/echovault/internal/config/config.go:224.17,225.36 1 0 +github.com/echovault/echovault/internal/config/config.go:225.36,227.6 1 0 +github.com/echovault/echovault/internal/config/config.go:230.4,232.22 2 0 +github.com/echovault/echovault/internal/config/config.go:232.22,233.59 1 0 +github.com/echovault/echovault/internal/config/config.go:233.59,235.6 1 0 +github.com/echovault/echovault/internal/config/config.go:238.4,238.39 1 0 +github.com/echovault/echovault/internal/config/config.go:238.39,239.59 1 0 +github.com/echovault/echovault/internal/config/config.go:239.59,241.6 1 0 +github.com/echovault/echovault/internal/config/config.go:247.2,249.45 2 0 +github.com/echovault/echovault/internal/config/config.go:249.45,251.3 1 0 +github.com/echovault/echovault/internal/config/config.go:253.2,253.18 1 0 +github.com/echovault/echovault/internal/config/default.go:8.29,38.2 1 0 github.com/echovault/echovault/internal/eviction/lfu.go:35.29,42.2 3 1 github.com/echovault/echovault/internal/eviction/lfu.go:44.34,46.2 1 1 github.com/echovault/echovault/internal/eviction/lfu.go:48.44,50.54 1 1 @@ -448,835 +448,6 @@ github.com/echovault/echovault/internal/modules/generic/utils.go:107.3,109.17 3 github.com/echovault/echovault/internal/modules/generic/utils.go:109.17,111.4 1 1 github.com/echovault/echovault/internal/modules/generic/utils.go:112.3,113.55 2 1 github.com/echovault/echovault/internal/modules/generic/utils.go:115.10,116.96 1 1 -github.com/echovault/echovault/internal/modules/acl/acl.go:53.62,54.20 1 1 -github.com/echovault/echovault/internal/modules/acl/acl.go:54.20,56.70 1 1 -github.com/echovault/echovault/internal/modules/acl/acl.go:56.70,59.4 2 0 -github.com/echovault/echovault/internal/modules/acl/acl.go:61.3,62.17 2 1 -github.com/echovault/echovault/internal/modules/acl/acl.go:62.17,65.4 2 0 -github.com/echovault/echovault/internal/modules/acl/acl.go:67.3,67.16 1 1 -github.com/echovault/echovault/internal/modules/acl/acl.go:67.16,68.36 1 1 -github.com/echovault/echovault/internal/modules/acl/acl.go:68.36,70.5 1 0 -github.com/echovault/echovault/internal/modules/acl/acl.go:73.3,75.38 2 1 -github.com/echovault/echovault/internal/modules/acl/acl.go:75.38,76.60 1 0 -github.com/echovault/echovault/internal/modules/acl/acl.go:76.60,79.5 2 0 -github.com/echovault/echovault/internal/modules/acl/acl.go:82.3,82.71 1 1 -github.com/echovault/echovault/internal/modules/acl/acl.go:82.71,83.60 1 1 -github.com/echovault/echovault/internal/modules/acl/acl.go:83.60,86.5 2 1 -github.com/echovault/echovault/internal/modules/acl/acl.go:92.40,97.24 3 1 -github.com/echovault/echovault/internal/modules/acl/acl.go:97.24,105.3 2 1 -github.com/echovault/echovault/internal/modules/acl/acl.go:108.2,112.29 3 1 -github.com/echovault/echovault/internal/modules/acl/acl.go:112.29,113.33 1 0 -github.com/echovault/echovault/internal/modules/acl/acl.go:113.33,115.9 2 0 -github.com/echovault/echovault/internal/modules/acl/acl.go:118.2,118.20 1 1 -github.com/echovault/echovault/internal/modules/acl/acl.go:118.20,120.3 1 1 -github.com/echovault/echovault/internal/modules/acl/acl.go:123.2,123.29 1 1 -github.com/echovault/echovault/internal/modules/acl/acl.go:123.29,125.3 1 1 -github.com/echovault/echovault/internal/modules/acl/acl.go:127.2,137.13 3 1 -github.com/echovault/echovault/internal/modules/acl/acl.go:140.52,145.70 3 1 -github.com/echovault/echovault/internal/modules/acl/acl.go:145.70,147.3 1 1 -github.com/echovault/echovault/internal/modules/acl/acl.go:148.2,152.3 2 1 -github.com/echovault/echovault/internal/modules/acl/acl.go:155.45,161.33 3 1 -github.com/echovault/echovault/internal/modules/acl/acl.go:161.33,162.30 1 1 -github.com/echovault/echovault/internal/modules/acl/acl.go:162.30,163.47 1 1 -github.com/echovault/echovault/internal/modules/acl/acl.go:163.47,165.5 1 0 -github.com/echovault/echovault/internal/modules/acl/acl.go:165.10,168.5 2 1 -github.com/echovault/echovault/internal/modules/acl/acl.go:172.2,173.45 2 1 -github.com/echovault/echovault/internal/modules/acl/acl.go:173.45,175.3 1 0 -github.com/echovault/echovault/internal/modules/acl/acl.go:177.2,184.12 4 1 -github.com/echovault/echovault/internal/modules/acl/acl.go:187.41,192.2 3 0 -github.com/echovault/echovault/internal/modules/acl/acl.go:194.73,199.37 4 1 -github.com/echovault/echovault/internal/modules/acl/acl.go:199.37,200.28 1 1 -github.com/echovault/echovault/internal/modules/acl/acl.go:200.28,202.12 1 1 -github.com/echovault/echovault/internal/modules/acl/acl.go:205.3,205.31 1 1 -github.com/echovault/echovault/internal/modules/acl/acl.go:205.31,206.30 1 1 -github.com/echovault/echovault/internal/modules/acl/acl.go:206.30,208.5 1 1 -github.com/echovault/echovault/internal/modules/acl/acl.go:211.3,211.18 1 1 -github.com/echovault/echovault/internal/modules/acl/acl.go:211.18,212.12 1 0 -github.com/echovault/echovault/internal/modules/acl/acl.go:215.3,215.52 1 1 -github.com/echovault/echovault/internal/modules/acl/acl.go:215.52,216.49 1 1 -github.com/echovault/echovault/internal/modules/acl/acl.go:216.49,218.5 1 0 -github.com/echovault/echovault/internal/modules/acl/acl.go:221.3,221.63 1 1 -github.com/echovault/echovault/internal/modules/acl/acl.go:221.63,223.4 1 1 -github.com/echovault/echovault/internal/modules/acl/acl.go:225.2,225.12 1 1 -github.com/echovault/echovault/internal/modules/acl/acl.go:228.95,232.19 3 1 -github.com/echovault/echovault/internal/modules/acl/acl.go:232.19,241.60 4 1 -github.com/echovault/echovault/internal/modules/acl/acl.go:241.60,243.4 1 1 -github.com/echovault/echovault/internal/modules/acl/acl.go:244.3,244.24 1 1 -github.com/echovault/echovault/internal/modules/acl/acl.go:247.2,247.19 1 1 -github.com/echovault/echovault/internal/modules/acl/acl.go:247.19,257.31 5 1 -github.com/echovault/echovault/internal/modules/acl/acl.go:257.31,258.28 1 1 -github.com/echovault/echovault/internal/modules/acl/acl.go:258.28,261.10 3 1 -github.com/echovault/echovault/internal/modules/acl/acl.go:264.3,264.17 1 1 -github.com/echovault/echovault/internal/modules/acl/acl.go:264.17,266.4 1 1 -github.com/echovault/echovault/internal/modules/acl/acl.go:270.2,270.19 1 1 -github.com/echovault/echovault/internal/modules/acl/acl.go:270.19,272.3 1 1 -github.com/echovault/echovault/internal/modules/acl/acl.go:275.2,275.21 1 1 -github.com/echovault/echovault/internal/modules/acl/acl.go:275.21,281.3 2 1 -github.com/echovault/echovault/internal/modules/acl/acl.go:283.2,283.46 1 1 -github.com/echovault/echovault/internal/modules/acl/acl.go:283.46,284.38 1 1 -github.com/echovault/echovault/internal/modules/acl/acl.go:284.38,287.18 1 1 -github.com/echovault/echovault/internal/modules/acl/acl.go:287.18,294.5 2 1 -github.com/echovault/echovault/internal/modules/acl/acl.go:298.2,298.50 1 0 -github.com/echovault/echovault/internal/modules/acl/acl.go:301.131,310.16 6 1 -github.com/echovault/echovault/internal/modules/acl/acl.go:310.16,312.3 1 0 -github.com/echovault/echovault/internal/modules/acl/acl.go:314.2,318.59 4 1 -github.com/echovault/echovault/internal/modules/acl/acl.go:318.59,322.17 4 1 -github.com/echovault/echovault/internal/modules/acl/acl.go:322.17,324.4 1 0 -github.com/echovault/echovault/internal/modules/acl/acl.go:328.2,328.36 1 1 -github.com/echovault/echovault/internal/modules/acl/acl.go:328.36,330.3 1 0 -github.com/echovault/echovault/internal/modules/acl/acl.go:333.2,333.43 1 1 -github.com/echovault/echovault/internal/modules/acl/acl.go:333.43,335.3 1 0 -github.com/echovault/echovault/internal/modules/acl/acl.go:338.2,338.37 1 1 -github.com/echovault/echovault/internal/modules/acl/acl.go:338.37,340.3 1 1 -github.com/echovault/echovault/internal/modules/acl/acl.go:343.2,346.29 2 1 -github.com/echovault/echovault/internal/modules/acl/acl.go:346.29,348.3 1 1 -github.com/echovault/echovault/internal/modules/acl/acl.go:351.2,351.57 1 1 -github.com/echovault/echovault/internal/modules/acl/acl.go:351.57,353.3 1 0 -github.com/echovault/echovault/internal/modules/acl/acl.go:356.2,357.65 2 1 -github.com/echovault/echovault/internal/modules/acl/acl.go:357.65,358.101 1 1 -github.com/echovault/echovault/internal/modules/acl/acl.go:358.101,359.63 1 1 -github.com/echovault/echovault/internal/modules/acl/acl.go:359.63,361.5 1 1 -github.com/echovault/echovault/internal/modules/acl/acl.go:362.4,363.16 2 0 -github.com/echovault/echovault/internal/modules/acl/acl.go:365.5,366.27 1 0 -github.com/echovault/echovault/internal/modules/acl/acl.go:366.27,368.4 1 0 -github.com/echovault/echovault/internal/modules/acl/acl.go:369.3,369.88 1 0 -github.com/echovault/echovault/internal/modules/acl/acl.go:373.2,373.64 1 1 -github.com/echovault/echovault/internal/modules/acl/acl.go:373.64,374.101 1 1 -github.com/echovault/echovault/internal/modules/acl/acl.go:374.101,375.63 1 0 -github.com/echovault/echovault/internal/modules/acl/acl.go:375.63,378.5 2 0 -github.com/echovault/echovault/internal/modules/acl/acl.go:379.4,379.16 1 0 -github.com/echovault/echovault/internal/modules/acl/acl.go:381.5,383.3 1 0 -github.com/echovault/echovault/internal/modules/acl/acl.go:386.2,386.94 1 1 -github.com/echovault/echovault/internal/modules/acl/acl.go:386.94,388.3 1 1 -github.com/echovault/echovault/internal/modules/acl/acl.go:388.5,390.3 1 0 -github.com/echovault/echovault/internal/modules/acl/acl.go:393.2,393.93 1 1 -github.com/echovault/echovault/internal/modules/acl/acl.go:393.93,395.3 1 0 -github.com/echovault/echovault/internal/modules/acl/acl.go:395.5,397.3 1 0 -github.com/echovault/echovault/internal/modules/acl/acl.go:400.2,400.59 1 1 -github.com/echovault/echovault/internal/modules/acl/acl.go:400.59,402.36 1 0 -github.com/echovault/echovault/internal/modules/acl/acl.go:402.36,404.106 1 0 -github.com/echovault/echovault/internal/modules/acl/acl.go:404.106,406.5 1 0 -github.com/echovault/echovault/internal/modules/acl/acl.go:406.7,408.5 1 0 -github.com/echovault/echovault/internal/modules/acl/acl.go:410.4,410.105 1 0 -github.com/echovault/echovault/internal/modules/acl/acl.go:410.105,412.5 1 0 -github.com/echovault/echovault/internal/modules/acl/acl.go:412.7,414.5 1 0 -github.com/echovault/echovault/internal/modules/acl/acl.go:416.3,416.13 1 0 -github.com/echovault/echovault/internal/modules/acl/acl.go:419.2,419.45 1 1 -github.com/echovault/echovault/internal/modules/acl/acl.go:419.45,421.29 1 0 -github.com/echovault/echovault/internal/modules/acl/acl.go:421.29,423.4 1 0 -github.com/echovault/echovault/internal/modules/acl/acl.go:426.3,426.59 1 0 -github.com/echovault/echovault/internal/modules/acl/acl.go:426.59,427.95 1 0 -github.com/echovault/echovault/internal/modules/acl/acl.go:427.95,428.49 1 0 -github.com/echovault/echovault/internal/modules/acl/acl.go:428.49,430.6 1 0 -github.com/echovault/echovault/internal/modules/acl/acl.go:431.5,432.17 2 0 -github.com/echovault/echovault/internal/modules/acl/acl.go:434.6,436.4 1 0 -github.com/echovault/echovault/internal/modules/acl/acl.go:439.3,439.60 1 0 -github.com/echovault/echovault/internal/modules/acl/acl.go:439.60,440.97 1 0 -github.com/echovault/echovault/internal/modules/acl/acl.go:440.97,441.50 1 0 -github.com/echovault/echovault/internal/modules/acl/acl.go:441.50,443.6 1 0 -github.com/echovault/echovault/internal/modules/acl/acl.go:444.5,445.17 2 0 -github.com/echovault/echovault/internal/modules/acl/acl.go:447.6,449.4 1 0 -github.com/echovault/echovault/internal/modules/acl/acl.go:452.2,452.12 1 1 -github.com/echovault/echovault/internal/modules/acl/acl.go:455.32,459.33 3 1 -github.com/echovault/echovault/internal/modules/acl/acl.go:459.33,464.31 5 1 -github.com/echovault/echovault/internal/modules/acl/acl.go:464.31,465.37 1 1 -github.com/echovault/echovault/internal/modules/acl/acl.go:465.37,467.5 1 1 -github.com/echovault/echovault/internal/modules/acl/acl.go:469.3,469.25 1 1 -github.com/echovault/echovault/internal/modules/acl/acl.go:472.2,472.29 1 1 -github.com/echovault/echovault/internal/modules/acl/acl.go:472.29,473.33 1 1 -github.com/echovault/echovault/internal/modules/acl/acl.go:473.33,475.4 1 1 -github.com/echovault/echovault/internal/modules/acl/acl.go:479.29,481.2 1 1 -github.com/echovault/echovault/internal/modules/acl/acl.go:483.31,485.2 1 1 -github.com/echovault/echovault/internal/modules/acl/acl.go:487.30,489.2 1 1 -github.com/echovault/echovault/internal/modules/acl/acl.go:491.32,493.2 1 1 -github.com/echovault/echovault/internal/modules/acl/commands.go:31.68,32.56 1 1 -github.com/echovault/echovault/internal/modules/acl/commands.go:32.56,34.3 1 1 -github.com/echovault/echovault/internal/modules/acl/commands.go:35.2,36.9 2 1 -github.com/echovault/echovault/internal/modules/acl/commands.go:36.9,38.3 1 0 -github.com/echovault/echovault/internal/modules/acl/commands.go:39.2,42.102 3 1 -github.com/echovault/echovault/internal/modules/acl/commands.go:42.102,44.3 1 1 -github.com/echovault/echovault/internal/modules/acl/commands.go:45.2,45.42 1 1 -github.com/echovault/echovault/internal/modules/acl/commands.go:48.67,49.29 1 1 -github.com/echovault/echovault/internal/modules/acl/commands.go:49.29,51.3 1 1 -github.com/echovault/echovault/internal/modules/acl/commands.go:53.2,57.35 3 1 -github.com/echovault/echovault/internal/modules/acl/commands.go:57.35,58.36 1 1 -github.com/echovault/echovault/internal/modules/acl/commands.go:58.36,59.48 1 1 -github.com/echovault/echovault/internal/modules/acl/commands.go:59.48,61.5 1 1 -github.com/echovault/echovault/internal/modules/acl/commands.go:62.4,62.12 1 1 -github.com/echovault/echovault/internal/modules/acl/commands.go:64.3,64.50 1 1 -github.com/echovault/echovault/internal/modules/acl/commands.go:64.50,65.51 1 1 -github.com/echovault/echovault/internal/modules/acl/commands.go:65.51,68.5 1 1 -github.com/echovault/echovault/internal/modules/acl/commands.go:72.2,72.30 1 1 -github.com/echovault/echovault/internal/modules/acl/commands.go:72.30,75.34 3 1 -github.com/echovault/echovault/internal/modules/acl/commands.go:75.34,78.4 2 1 -github.com/echovault/echovault/internal/modules/acl/commands.go:79.3,80.28 2 1 -github.com/echovault/echovault/internal/modules/acl/commands.go:80.28,82.24 2 1 -github.com/echovault/echovault/internal/modules/acl/commands.go:82.24,84.5 1 1 -github.com/echovault/echovault/internal/modules/acl/commands.go:86.3,86.26 1 1 -github.com/echovault/echovault/internal/modules/acl/commands.go:89.2,89.30 1 1 -github.com/echovault/echovault/internal/modules/acl/commands.go:89.30,91.46 2 1 -github.com/echovault/echovault/internal/modules/acl/commands.go:91.46,92.54 1 1 -github.com/echovault/echovault/internal/modules/acl/commands.go:92.54,94.38 2 1 -github.com/echovault/echovault/internal/modules/acl/commands.go:94.38,96.30 2 1 -github.com/echovault/echovault/internal/modules/acl/commands.go:96.30,98.7 1 1 -github.com/echovault/echovault/internal/modules/acl/commands.go:100.5,100.28 1 1 -github.com/echovault/echovault/internal/modules/acl/commands.go:105.2,105.85 1 1 -github.com/echovault/echovault/internal/modules/acl/commands.go:108.71,109.30 1 1 -github.com/echovault/echovault/internal/modules/acl/commands.go:109.30,111.3 1 0 -github.com/echovault/echovault/internal/modules/acl/commands.go:113.2,114.9 2 1 -github.com/echovault/echovault/internal/modules/acl/commands.go:114.9,116.3 1 0 -github.com/echovault/echovault/internal/modules/acl/commands.go:117.2,122.30 5 1 -github.com/echovault/echovault/internal/modules/acl/commands.go:122.30,123.38 1 1 -github.com/echovault/echovault/internal/modules/acl/commands.go:123.38,126.9 3 1 -github.com/echovault/echovault/internal/modules/acl/commands.go:130.2,130.16 1 1 -github.com/echovault/echovault/internal/modules/acl/commands.go:130.16,132.3 1 1 -github.com/echovault/echovault/internal/modules/acl/commands.go:135.2,139.18 3 1 -github.com/echovault/echovault/internal/modules/acl/commands.go:139.18,141.3 1 1 -github.com/echovault/echovault/internal/modules/acl/commands.go:141.8,143.3 1 1 -github.com/echovault/echovault/internal/modules/acl/commands.go:144.2,144.21 1 1 -github.com/echovault/echovault/internal/modules/acl/commands.go:144.21,146.3 1 1 -github.com/echovault/echovault/internal/modules/acl/commands.go:147.2,147.17 1 1 -github.com/echovault/echovault/internal/modules/acl/commands.go:147.17,149.3 1 1 -github.com/echovault/echovault/internal/modules/acl/commands.go:151.2,152.29 2 1 -github.com/echovault/echovault/internal/modules/acl/commands.go:152.29,154.3 1 1 -github.com/echovault/echovault/internal/modules/acl/commands.go:157.2,158.51 2 1 -github.com/echovault/echovault/internal/modules/acl/commands.go:158.51,159.22 1 1 -github.com/echovault/echovault/internal/modules/acl/commands.go:159.22,161.12 2 1 -github.com/echovault/echovault/internal/modules/acl/commands.go:163.3,163.49 1 1 -github.com/echovault/echovault/internal/modules/acl/commands.go:165.2,165.51 1 1 -github.com/echovault/echovault/internal/modules/acl/commands.go:165.51,166.22 1 1 -github.com/echovault/echovault/internal/modules/acl/commands.go:166.22,168.12 2 1 -github.com/echovault/echovault/internal/modules/acl/commands.go:170.3,170.49 1 1 -github.com/echovault/echovault/internal/modules/acl/commands.go:174.2,175.48 2 1 -github.com/echovault/echovault/internal/modules/acl/commands.go:175.48,176.21 1 1 -github.com/echovault/echovault/internal/modules/acl/commands.go:176.21,178.12 2 1 -github.com/echovault/echovault/internal/modules/acl/commands.go:180.3,180.47 1 1 -github.com/echovault/echovault/internal/modules/acl/commands.go:182.2,182.48 1 1 -github.com/echovault/echovault/internal/modules/acl/commands.go:182.48,183.21 1 1 -github.com/echovault/echovault/internal/modules/acl/commands.go:183.21,185.12 2 1 -github.com/echovault/echovault/internal/modules/acl/commands.go:187.3,187.47 1 1 -github.com/echovault/echovault/internal/modules/acl/commands.go:191.2,192.79 2 1 -github.com/echovault/echovault/internal/modules/acl/commands.go:192.79,193.37 1 1 -github.com/echovault/echovault/internal/modules/acl/commands.go:193.37,195.4 1 1 -github.com/echovault/echovault/internal/modules/acl/commands.go:197.2,198.30 2 1 -github.com/echovault/echovault/internal/modules/acl/commands.go:198.30,199.10 1 1 -github.com/echovault/echovault/internal/modules/acl/commands.go:200.100,202.53 1 1 -github.com/echovault/echovault/internal/modules/acl/commands.go:203.53,205.52 1 1 -github.com/echovault/echovault/internal/modules/acl/commands.go:206.52,208.52 1 1 -github.com/echovault/echovault/internal/modules/acl/commands.go:213.2,215.54 2 1 -github.com/echovault/echovault/internal/modules/acl/commands.go:215.54,217.3 1 1 -github.com/echovault/echovault/internal/modules/acl/commands.go:218.2,218.54 1 1 -github.com/echovault/echovault/internal/modules/acl/commands.go:218.54,220.3 1 1 -github.com/echovault/echovault/internal/modules/acl/commands.go:222.2,224.25 2 1 -github.com/echovault/echovault/internal/modules/acl/commands.go:227.69,229.9 2 1 -github.com/echovault/echovault/internal/modules/acl/commands.go:229.9,231.3 1 0 -github.com/echovault/echovault/internal/modules/acl/commands.go:233.2,234.33 2 1 -github.com/echovault/echovault/internal/modules/acl/commands.go:234.33,236.3 1 1 -github.com/echovault/echovault/internal/modules/acl/commands.go:237.2,238.25 2 1 -github.com/echovault/echovault/internal/modules/acl/commands.go:241.71,243.9 2 1 -github.com/echovault/echovault/internal/modules/acl/commands.go:243.9,245.3 1 0 -github.com/echovault/echovault/internal/modules/acl/commands.go:246.2,246.56 1 1 -github.com/echovault/echovault/internal/modules/acl/commands.go:246.56,248.3 1 0 -github.com/echovault/echovault/internal/modules/acl/commands.go:249.2,249.42 1 1 -github.com/echovault/echovault/internal/modules/acl/commands.go:252.71,253.29 1 1 -github.com/echovault/echovault/internal/modules/acl/commands.go:253.29,255.3 1 1 -github.com/echovault/echovault/internal/modules/acl/commands.go:256.2,257.9 2 1 -github.com/echovault/echovault/internal/modules/acl/commands.go:257.9,259.3 1 0 -github.com/echovault/echovault/internal/modules/acl/commands.go:260.2,260.75 1 1 -github.com/echovault/echovault/internal/modules/acl/commands.go:260.75,262.3 1 0 -github.com/echovault/echovault/internal/modules/acl/commands.go:263.2,263.42 1 1 -github.com/echovault/echovault/internal/modules/acl/commands.go:266.70,268.9 2 1 -github.com/echovault/echovault/internal/modules/acl/commands.go:268.9,270.3 1 0 -github.com/echovault/echovault/internal/modules/acl/commands.go:271.2,275.74 4 1 -github.com/echovault/echovault/internal/modules/acl/commands.go:278.68,279.29 1 1 -github.com/echovault/echovault/internal/modules/acl/commands.go:279.29,281.3 1 1 -github.com/echovault/echovault/internal/modules/acl/commands.go:282.2,283.9 2 1 -github.com/echovault/echovault/internal/modules/acl/commands.go:283.9,285.3 1 0 -github.com/echovault/echovault/internal/modules/acl/commands.go:286.2,291.33 5 1 -github.com/echovault/echovault/internal/modules/acl/commands.go:291.33,294.19 2 1 -github.com/echovault/echovault/internal/modules/acl/commands.go:294.19,296.4 1 1 -github.com/echovault/echovault/internal/modules/acl/commands.go:296.9,298.4 1 1 -github.com/echovault/echovault/internal/modules/acl/commands.go:300.3,300.22 1 1 -github.com/echovault/echovault/internal/modules/acl/commands.go:300.22,302.4 1 1 -github.com/echovault/echovault/internal/modules/acl/commands.go:304.3,304.18 1 1 -github.com/echovault/echovault/internal/modules/acl/commands.go:304.18,306.4 1 1 -github.com/echovault/echovault/internal/modules/acl/commands.go:308.3,308.43 1 1 -github.com/echovault/echovault/internal/modules/acl/commands.go:308.43,309.61 1 1 -github.com/echovault/echovault/internal/modules/acl/commands.go:309.61,311.5 1 1 -github.com/echovault/echovault/internal/modules/acl/commands.go:312.4,312.58 1 1 -github.com/echovault/echovault/internal/modules/acl/commands.go:312.58,314.5 1 1 -github.com/echovault/echovault/internal/modules/acl/commands.go:317.3,317.52 1 1 -github.com/echovault/echovault/internal/modules/acl/commands.go:317.52,318.23 1 1 -github.com/echovault/echovault/internal/modules/acl/commands.go:318.23,320.13 2 1 -github.com/echovault/echovault/internal/modules/acl/commands.go:322.4,322.39 1 1 -github.com/echovault/echovault/internal/modules/acl/commands.go:325.3,325.52 1 1 -github.com/echovault/echovault/internal/modules/acl/commands.go:325.52,326.23 1 1 -github.com/echovault/echovault/internal/modules/acl/commands.go:326.23,328.13 2 0 -github.com/echovault/echovault/internal/modules/acl/commands.go:330.4,330.39 1 1 -github.com/echovault/echovault/internal/modules/acl/commands.go:333.3,333.49 1 1 -github.com/echovault/echovault/internal/modules/acl/commands.go:333.49,334.22 1 1 -github.com/echovault/echovault/internal/modules/acl/commands.go:334.22,336.13 2 1 -github.com/echovault/echovault/internal/modules/acl/commands.go:338.4,338.37 1 1 -github.com/echovault/echovault/internal/modules/acl/commands.go:341.3,341.49 1 1 -github.com/echovault/echovault/internal/modules/acl/commands.go:341.49,342.22 1 1 -github.com/echovault/echovault/internal/modules/acl/commands.go:342.22,344.13 2 0 -github.com/echovault/echovault/internal/modules/acl/commands.go:346.4,346.37 1 1 -github.com/echovault/echovault/internal/modules/acl/commands.go:349.3,349.45 1 1 -github.com/echovault/echovault/internal/modules/acl/commands.go:349.45,350.52 1 1 -github.com/echovault/echovault/internal/modules/acl/commands.go:350.52,352.13 2 1 -github.com/echovault/echovault/internal/modules/acl/commands.go:354.4,354.41 1 1 -github.com/echovault/echovault/internal/modules/acl/commands.go:357.3,357.46 1 1 -github.com/echovault/echovault/internal/modules/acl/commands.go:357.46,358.52 1 1 -github.com/echovault/echovault/internal/modules/acl/commands.go:358.52,360.5 1 1 -github.com/echovault/echovault/internal/modules/acl/commands.go:363.3,363.55 1 1 -github.com/echovault/echovault/internal/modules/acl/commands.go:363.55,365.4 1 1 -github.com/echovault/echovault/internal/modules/acl/commands.go:367.3,367.55 1 1 -github.com/echovault/echovault/internal/modules/acl/commands.go:367.55,369.4 1 1 -github.com/echovault/echovault/internal/modules/acl/commands.go:370.3,370.54 1 1 -github.com/echovault/echovault/internal/modules/acl/commands.go:373.2,374.25 2 1 -github.com/echovault/echovault/internal/modules/acl/commands.go:377.68,378.30 1 1 -github.com/echovault/echovault/internal/modules/acl/commands.go:378.30,380.3 1 0 -github.com/echovault/echovault/internal/modules/acl/commands.go:382.2,383.9 2 1 -github.com/echovault/echovault/internal/modules/acl/commands.go:383.9,385.3 1 0 -github.com/echovault/echovault/internal/modules/acl/commands.go:386.2,390.16 4 1 -github.com/echovault/echovault/internal/modules/acl/commands.go:390.16,392.3 1 0 -github.com/echovault/echovault/internal/modules/acl/commands.go:394.2,394.15 1 1 -github.com/echovault/echovault/internal/modules/acl/commands.go:394.15,395.35 1 1 -github.com/echovault/echovault/internal/modules/acl/commands.go:395.35,397.4 1 0 -github.com/echovault/echovault/internal/modules/acl/commands.go:400.2,404.37 3 1 -github.com/echovault/echovault/internal/modules/acl/commands.go:404.37,405.59 1 0 -github.com/echovault/echovault/internal/modules/acl/commands.go:405.59,407.4 1 0 -github.com/echovault/echovault/internal/modules/acl/commands.go:410.2,410.70 1 1 -github.com/echovault/echovault/internal/modules/acl/commands.go:410.70,411.59 1 1 -github.com/echovault/echovault/internal/modules/acl/commands.go:411.59,413.4 1 0 -github.com/echovault/echovault/internal/modules/acl/commands.go:417.2,417.29 1 1 -github.com/echovault/echovault/internal/modules/acl/commands.go:417.29,421.31 3 1 -github.com/echovault/echovault/internal/modules/acl/commands.go:421.31,422.35 1 1 -github.com/echovault/echovault/internal/modules/acl/commands.go:422.35,425.54 2 1 -github.com/echovault/echovault/internal/modules/acl/commands.go:425.54,427.6 1 0 -github.com/echovault/echovault/internal/modules/acl/commands.go:427.11,430.6 1 1 -github.com/echovault/echovault/internal/modules/acl/commands.go:431.5,431.10 1 1 -github.com/echovault/echovault/internal/modules/acl/commands.go:435.3,435.17 1 1 -github.com/echovault/echovault/internal/modules/acl/commands.go:435.17,437.4 1 0 -github.com/echovault/echovault/internal/modules/acl/commands.go:440.2,440.42 1 1 -github.com/echovault/echovault/internal/modules/acl/commands.go:443.68,444.29 1 1 -github.com/echovault/echovault/internal/modules/acl/commands.go:444.29,446.3 1 0 -github.com/echovault/echovault/internal/modules/acl/commands.go:448.2,449.9 2 1 -github.com/echovault/echovault/internal/modules/acl/commands.go:449.9,451.3 1 0 -github.com/echovault/echovault/internal/modules/acl/commands.go:452.2,456.16 4 1 -github.com/echovault/echovault/internal/modules/acl/commands.go:456.16,458.3 1 0 -github.com/echovault/echovault/internal/modules/acl/commands.go:460.2,460.15 1 1 -github.com/echovault/echovault/internal/modules/acl/commands.go:460.15,461.35 1 1 -github.com/echovault/echovault/internal/modules/acl/commands.go:461.35,463.4 1 0 -github.com/echovault/echovault/internal/modules/acl/commands.go:466.2,468.37 2 1 -github.com/echovault/echovault/internal/modules/acl/commands.go:468.37,471.17 2 0 -github.com/echovault/echovault/internal/modules/acl/commands.go:471.17,473.4 1 0 -github.com/echovault/echovault/internal/modules/acl/commands.go:474.3,474.40 1 0 -github.com/echovault/echovault/internal/modules/acl/commands.go:474.40,476.4 1 0 -github.com/echovault/echovault/internal/modules/acl/commands.go:479.2,479.70 1 1 -github.com/echovault/echovault/internal/modules/acl/commands.go:479.70,482.17 2 1 -github.com/echovault/echovault/internal/modules/acl/commands.go:482.17,484.4 1 0 -github.com/echovault/echovault/internal/modules/acl/commands.go:485.3,485.40 1 1 -github.com/echovault/echovault/internal/modules/acl/commands.go:485.40,487.4 1 0 -github.com/echovault/echovault/internal/modules/acl/commands.go:490.2,490.32 1 1 -github.com/echovault/echovault/internal/modules/acl/commands.go:490.32,492.3 1 0 -github.com/echovault/echovault/internal/modules/acl/commands.go:494.2,494.42 1 1 -github.com/echovault/echovault/internal/modules/acl/commands.go:497.36,507.84 1 1 -github.com/echovault/echovault/internal/modules/acl/commands.go:507.84,513.5 1 1 -github.com/echovault/echovault/internal/modules/acl/commands.go:522.84,528.5 1 1 -github.com/echovault/echovault/internal/modules/acl/commands.go:537.86,543.7 1 1 -github.com/echovault/echovault/internal/modules/acl/commands.go:552.86,558.7 1 1 -github.com/echovault/echovault/internal/modules/acl/commands.go:567.86,573.7 1 1 -github.com/echovault/echovault/internal/modules/acl/commands.go:582.86,588.7 1 1 -github.com/echovault/echovault/internal/modules/acl/commands.go:598.86,604.7 1 1 -github.com/echovault/echovault/internal/modules/acl/commands.go:613.86,619.7 1 1 -github.com/echovault/echovault/internal/modules/acl/commands.go:628.86,634.7 1 1 -github.com/echovault/echovault/internal/modules/acl/commands.go:646.86,652.7 1 1 -github.com/echovault/echovault/internal/modules/acl/commands.go:661.86,667.7 1 1 -github.com/echovault/echovault/internal/modules/acl/user.go:53.31,55.39 2 1 -github.com/echovault/echovault/internal/modules/acl/user.go:55.39,57.3 1 1 -github.com/echovault/echovault/internal/modules/acl/user.go:58.2,59.51 2 1 -github.com/echovault/echovault/internal/modules/acl/user.go:59.51,61.3 1 1 -github.com/echovault/echovault/internal/modules/acl/user.go:63.2,64.37 2 1 -github.com/echovault/echovault/internal/modules/acl/user.go:64.37,66.3 1 1 -github.com/echovault/echovault/internal/modules/acl/user.go:67.2,68.49 2 1 -github.com/echovault/echovault/internal/modules/acl/user.go:68.49,70.3 1 1 -github.com/echovault/echovault/internal/modules/acl/user.go:72.2,73.53 2 1 -github.com/echovault/echovault/internal/modules/acl/user.go:73.53,75.3 1 1 -github.com/echovault/echovault/internal/modules/acl/user.go:76.2,77.54 2 1 -github.com/echovault/echovault/internal/modules/acl/user.go:77.54,79.3 1 1 -github.com/echovault/echovault/internal/modules/acl/user.go:81.2,82.43 2 1 -github.com/echovault/echovault/internal/modules/acl/user.go:82.43,84.3 1 1 -github.com/echovault/echovault/internal/modules/acl/user.go:85.2,86.55 2 1 -github.com/echovault/echovault/internal/modules/acl/user.go:86.55,88.3 1 0 -github.com/echovault/echovault/internal/modules/acl/user.go:91.2,91.64 1 1 -github.com/echovault/echovault/internal/modules/acl/user.go:91.64,97.3 2 1 -github.com/echovault/echovault/internal/modules/acl/user.go:100.79,102.32 2 1 -github.com/echovault/echovault/internal/modules/acl/user.go:102.32,103.24 1 1 -github.com/echovault/echovault/internal/modules/acl/user.go:103.24,105.12 2 0 -github.com/echovault/echovault/internal/modules/acl/user.go:107.3,107.25 1 1 -github.com/echovault/echovault/internal/modules/acl/user.go:109.2,109.33 1 1 -github.com/echovault/echovault/internal/modules/acl/user.go:109.33,110.41 1 1 -github.com/echovault/echovault/internal/modules/acl/user.go:110.41,113.4 2 1 -github.com/echovault/echovault/internal/modules/acl/user.go:114.3,114.17 1 1 -github.com/echovault/echovault/internal/modules/acl/user.go:114.17,116.4 1 1 -github.com/echovault/echovault/internal/modules/acl/user.go:118.2,118.8 1 1 -github.com/echovault/echovault/internal/modules/acl/user.go:121.50,122.26 1 1 -github.com/echovault/echovault/internal/modules/acl/user.go:122.26,124.35 1 1 -github.com/echovault/echovault/internal/modules/acl/user.go:124.35,126.4 1 1 -github.com/echovault/echovault/internal/modules/acl/user.go:127.3,127.36 1 1 -github.com/echovault/echovault/internal/modules/acl/user.go:127.36,129.4 1 1 -github.com/echovault/echovault/internal/modules/acl/user.go:131.3,131.37 1 1 -github.com/echovault/echovault/internal/modules/acl/user.go:131.37,137.12 3 1 -github.com/echovault/echovault/internal/modules/acl/user.go:139.3,139.20 1 1 -github.com/echovault/echovault/internal/modules/acl/user.go:139.20,140.84 1 1 -github.com/echovault/echovault/internal/modules/acl/user.go:140.84,142.5 1 1 -github.com/echovault/echovault/internal/modules/acl/user.go:143.4,143.12 1 1 -github.com/echovault/echovault/internal/modules/acl/user.go:145.3,145.20 1 1 -github.com/echovault/echovault/internal/modules/acl/user.go:145.20,146.84 1 1 -github.com/echovault/echovault/internal/modules/acl/user.go:146.84,148.5 1 1 -github.com/echovault/echovault/internal/modules/acl/user.go:149.4,149.12 1 1 -github.com/echovault/echovault/internal/modules/acl/user.go:152.3,152.43 1 1 -github.com/echovault/echovault/internal/modules/acl/user.go:152.43,155.12 3 1 -github.com/echovault/echovault/internal/modules/acl/user.go:157.3,157.46 1 1 -github.com/echovault/echovault/internal/modules/acl/user.go:157.46,159.12 2 1 -github.com/echovault/echovault/internal/modules/acl/user.go:161.3,161.36 1 1 -github.com/echovault/echovault/internal/modules/acl/user.go:161.36,162.21 1 1 -github.com/echovault/echovault/internal/modules/acl/user.go:162.21,164.13 2 1 -github.com/echovault/echovault/internal/modules/acl/user.go:166.4,166.21 1 1 -github.com/echovault/echovault/internal/modules/acl/user.go:166.21,168.13 2 1 -github.com/echovault/echovault/internal/modules/acl/user.go:172.3,172.40 1 1 -github.com/echovault/echovault/internal/modules/acl/user.go:172.40,176.12 4 0 -github.com/echovault/echovault/internal/modules/acl/user.go:178.3,178.93 1 1 -github.com/echovault/echovault/internal/modules/acl/user.go:178.93,183.12 5 1 -github.com/echovault/echovault/internal/modules/acl/user.go:185.3,185.57 1 1 -github.com/echovault/echovault/internal/modules/acl/user.go:185.57,188.12 3 1 -github.com/echovault/echovault/internal/modules/acl/user.go:190.3,190.57 1 1 -github.com/echovault/echovault/internal/modules/acl/user.go:190.57,193.12 3 1 -github.com/echovault/echovault/internal/modules/acl/user.go:196.3,196.44 1 1 -github.com/echovault/echovault/internal/modules/acl/user.go:196.44,198.12 2 1 -github.com/echovault/echovault/internal/modules/acl/user.go:200.3,200.36 1 1 -github.com/echovault/echovault/internal/modules/acl/user.go:200.36,201.21 1 1 -github.com/echovault/echovault/internal/modules/acl/user.go:201.21,203.13 2 1 -github.com/echovault/echovault/internal/modules/acl/user.go:205.4,205.21 1 1 -github.com/echovault/echovault/internal/modules/acl/user.go:205.21,207.13 2 1 -github.com/echovault/echovault/internal/modules/acl/user.go:211.3,211.44 1 1 -github.com/echovault/echovault/internal/modules/acl/user.go:211.44,214.12 3 1 -github.com/echovault/echovault/internal/modules/acl/user.go:216.3,216.66 1 1 -github.com/echovault/echovault/internal/modules/acl/user.go:216.66,217.21 1 1 -github.com/echovault/echovault/internal/modules/acl/user.go:217.21,219.13 2 1 -github.com/echovault/echovault/internal/modules/acl/user.go:221.4,221.21 1 1 -github.com/echovault/echovault/internal/modules/acl/user.go:221.21,223.13 2 1 -github.com/echovault/echovault/internal/modules/acl/user.go:229.2,229.26 1 1 -github.com/echovault/echovault/internal/modules/acl/user.go:229.26,230.39 1 1 -github.com/echovault/echovault/internal/modules/acl/user.go:230.39,233.4 2 1 -github.com/echovault/echovault/internal/modules/acl/user.go:236.2,236.26 1 1 -github.com/echovault/echovault/internal/modules/acl/user.go:236.26,238.42 1 1 -github.com/echovault/echovault/internal/modules/acl/user.go:238.42,241.4 2 0 -github.com/echovault/echovault/internal/modules/acl/user.go:243.3,243.43 1 1 -github.com/echovault/echovault/internal/modules/acl/user.go:243.43,248.4 4 1 -github.com/echovault/echovault/internal/modules/acl/user.go:250.3,250.60 1 1 -github.com/echovault/echovault/internal/modules/acl/user.go:250.60,254.4 3 1 -github.com/echovault/echovault/internal/modules/acl/user.go:256.3,256.46 1 1 -github.com/echovault/echovault/internal/modules/acl/user.go:256.46,259.4 2 1 -github.com/echovault/echovault/internal/modules/acl/user.go:262.2,262.12 1 1 -github.com/echovault/echovault/internal/modules/acl/user.go:265.36,279.41 12 0 -github.com/echovault/echovault/internal/modules/acl/user.go:279.41,280.65 1 0 -github.com/echovault/echovault/internal/modules/acl/user.go:280.65,282.4 1 0 -github.com/echovault/echovault/internal/modules/acl/user.go:282.6,284.4 1 0 -github.com/echovault/echovault/internal/modules/acl/user.go:287.2,287.18 1 0 -github.com/echovault/echovault/internal/modules/acl/user.go:290.38,303.2 12 1 -github.com/echovault/echovault/internal/modules/acl/user.go:305.40,320.2 1 1 -github.com/echovault/echovault/internal/modules/acl/user.go:322.46,323.24 1 1 -github.com/echovault/echovault/internal/modules/acl/user.go:323.24,325.3 1 1 -github.com/echovault/echovault/internal/modules/acl/user.go:326.2,326.26 1 1 -github.com/echovault/echovault/internal/modules/admin/commands.go:27.78,33.29 4 1 -github.com/echovault/echovault/internal/modules/admin/commands.go:33.29,34.54 1 1 -github.com/echovault/echovault/internal/modules/admin/commands.go:34.54,40.42 4 1 -github.com/echovault/echovault/internal/modules/admin/commands.go:40.42,42.5 1 1 -github.com/echovault/echovault/internal/modules/admin/commands.go:44.4,47.12 3 1 -github.com/echovault/echovault/internal/modules/admin/commands.go:50.3,50.36 1 1 -github.com/echovault/echovault/internal/modules/admin/commands.go:50.36,57.43 5 1 -github.com/echovault/echovault/internal/modules/admin/commands.go:57.43,59.5 1 1 -github.com/echovault/echovault/internal/modules/admin/commands.go:61.4,63.21 2 1 -github.com/echovault/echovault/internal/modules/admin/commands.go:67.2,69.25 2 1 -github.com/echovault/echovault/internal/modules/admin/commands.go:72.76,76.35 3 1 -github.com/echovault/echovault/internal/modules/admin/commands.go:76.35,77.65 1 1 -github.com/echovault/echovault/internal/modules/admin/commands.go:77.65,78.41 1 1 -github.com/echovault/echovault/internal/modules/admin/commands.go:78.41,80.5 1 1 -github.com/echovault/echovault/internal/modules/admin/commands.go:81.4,81.12 1 1 -github.com/echovault/echovault/internal/modules/admin/commands.go:83.3,83.13 1 1 -github.com/echovault/echovault/internal/modules/admin/commands.go:86.2,86.51 1 1 -github.com/echovault/echovault/internal/modules/admin/commands.go:89.75,90.29 1 1 -github.com/echovault/echovault/internal/modules/admin/commands.go:91.9,96.36 4 1 -github.com/echovault/echovault/internal/modules/admin/commands.go:96.36,97.66 1 1 -github.com/echovault/echovault/internal/modules/admin/commands.go:97.66,98.52 1 1 -github.com/echovault/echovault/internal/modules/admin/commands.go:98.52,102.6 3 1 -github.com/echovault/echovault/internal/modules/admin/commands.go:103.5,103.13 1 1 -github.com/echovault/echovault/internal/modules/admin/commands.go:105.4,106.14 2 1 -github.com/echovault/echovault/internal/modules/admin/commands.go:108.3,109.26 2 1 -github.com/echovault/echovault/internal/modules/admin/commands.go:111.9,115.56 3 1 -github.com/echovault/echovault/internal/modules/admin/commands.go:115.56,117.4 1 0 -github.com/echovault/echovault/internal/modules/admin/commands.go:118.3,118.53 1 1 -github.com/echovault/echovault/internal/modules/admin/commands.go:118.53,122.37 3 1 -github.com/echovault/echovault/internal/modules/admin/commands.go:122.37,123.67 1 1 -github.com/echovault/echovault/internal/modules/admin/commands.go:123.67,124.53 1 1 -github.com/echovault/echovault/internal/modules/admin/commands.go:124.53,125.59 1 1 -github.com/echovault/echovault/internal/modules/admin/commands.go:125.59,129.8 3 1 -github.com/echovault/echovault/internal/modules/admin/commands.go:131.6,131.14 1 1 -github.com/echovault/echovault/internal/modules/admin/commands.go:133.5,133.54 1 1 -github.com/echovault/echovault/internal/modules/admin/commands.go:133.54,136.6 2 1 -github.com/echovault/echovault/internal/modules/admin/commands.go:138.9,138.61 1 1 -github.com/echovault/echovault/internal/modules/admin/commands.go:138.61,142.37 3 1 -github.com/echovault/echovault/internal/modules/admin/commands.go:142.37,143.67 1 1 -github.com/echovault/echovault/internal/modules/admin/commands.go:143.67,144.53 1 1 -github.com/echovault/echovault/internal/modules/admin/commands.go:144.53,146.24 2 1 -github.com/echovault/echovault/internal/modules/admin/commands.go:146.24,149.8 2 0 -github.com/echovault/echovault/internal/modules/admin/commands.go:151.6,151.14 1 1 -github.com/echovault/echovault/internal/modules/admin/commands.go:153.5,153.33 1 1 -github.com/echovault/echovault/internal/modules/admin/commands.go:153.33,156.6 2 1 -github.com/echovault/echovault/internal/modules/admin/commands.go:158.9,158.60 1 1 -github.com/echovault/echovault/internal/modules/admin/commands.go:158.60,162.37 3 1 -github.com/echovault/echovault/internal/modules/admin/commands.go:162.37,163.67 1 1 -github.com/echovault/echovault/internal/modules/admin/commands.go:163.67,164.53 1 1 -github.com/echovault/echovault/internal/modules/admin/commands.go:164.53,165.55 1 1 -github.com/echovault/echovault/internal/modules/admin/commands.go:165.55,169.8 3 0 -github.com/echovault/echovault/internal/modules/admin/commands.go:171.6,171.14 1 1 -github.com/echovault/echovault/internal/modules/admin/commands.go:173.5,173.50 1 1 -github.com/echovault/echovault/internal/modules/admin/commands.go:173.50,176.6 2 1 -github.com/echovault/echovault/internal/modules/admin/commands.go:178.9,180.4 1 0 -github.com/echovault/echovault/internal/modules/admin/commands.go:181.3,182.26 2 1 -github.com/echovault/echovault/internal/modules/admin/commands.go:183.10,184.54 1 0 -github.com/echovault/echovault/internal/modules/admin/commands.go:188.75,190.2 1 0 -github.com/echovault/echovault/internal/modules/admin/commands.go:192.36,200.84 1 1 -github.com/echovault/echovault/internal/modules/admin/commands.go:200.84,204.5 1 1 -github.com/echovault/echovault/internal/modules/admin/commands.go:213.84,217.5 1 1 -github.com/echovault/echovault/internal/modules/admin/commands.go:225.86,229.7 1 0 -github.com/echovault/echovault/internal/modules/admin/commands.go:238.86,242.7 1 1 -github.com/echovault/echovault/internal/modules/admin/commands.go:252.86,256.7 1 1 -github.com/echovault/echovault/internal/modules/admin/commands.go:267.84,271.5 1 0 -github.com/echovault/echovault/internal/modules/admin/commands.go:272.73,273.49 1 0 -github.com/echovault/echovault/internal/modules/admin/commands.go:273.49,275.6 1 0 -github.com/echovault/echovault/internal/modules/admin/commands.go:276.5,276.45 1 0 -github.com/echovault/echovault/internal/modules/admin/commands.go:285.84,289.5 1 0 -github.com/echovault/echovault/internal/modules/admin/commands.go:290.73,292.18 2 0 -github.com/echovault/echovault/internal/modules/admin/commands.go:292.18,294.6 1 0 -github.com/echovault/echovault/internal/modules/admin/commands.go:295.5,295.53 1 0 -github.com/echovault/echovault/internal/modules/admin/commands.go:304.84,308.5 1 0 -github.com/echovault/echovault/internal/modules/admin/commands.go:309.73,310.47 1 0 -github.com/echovault/echovault/internal/modules/admin/commands.go:310.47,312.6 1 0 -github.com/echovault/echovault/internal/modules/admin/commands.go:313.5,313.45 1 0 -github.com/echovault/echovault/internal/modules/admin/commands.go:321.84,325.5 1 1 -github.com/echovault/echovault/internal/modules/admin/commands.go:335.86,339.7 1 1 -github.com/echovault/echovault/internal/modules/admin/commands.go:340.75,341.34 1 1 -github.com/echovault/echovault/internal/modules/admin/commands.go:341.34,343.8 1 0 -github.com/echovault/echovault/internal/modules/admin/commands.go:344.7,345.34 2 1 -github.com/echovault/echovault/internal/modules/admin/commands.go:345.34,347.8 1 1 -github.com/echovault/echovault/internal/modules/admin/commands.go:348.7,348.75 1 1 -github.com/echovault/echovault/internal/modules/admin/commands.go:348.75,350.8 1 0 -github.com/echovault/echovault/internal/modules/admin/commands.go:351.7,351.47 1 1 -github.com/echovault/echovault/internal/modules/admin/commands.go:361.86,365.7 1 1 -github.com/echovault/echovault/internal/modules/admin/commands.go:366.75,367.35 1 1 -github.com/echovault/echovault/internal/modules/admin/commands.go:367.35,369.8 1 0 -github.com/echovault/echovault/internal/modules/admin/commands.go:370.7,371.47 2 1 -github.com/echovault/echovault/internal/modules/admin/commands.go:380.86,384.7 1 1 -github.com/echovault/echovault/internal/modules/admin/commands.go:385.75,388.38 3 1 -github.com/echovault/echovault/internal/modules/admin/commands.go:388.38,390.8 1 1 -github.com/echovault/echovault/internal/modules/admin/commands.go:391.7,391.30 1 1 -github.com/echovault/echovault/internal/snapshot/snapshot.go:55.56,56.30 1 1 -github.com/echovault/echovault/internal/snapshot/snapshot.go:56.30,58.3 1 1 -github.com/echovault/echovault/internal/snapshot/snapshot.go:61.59,62.30 1 1 -github.com/echovault/echovault/internal/snapshot/snapshot.go:62.30,64.3 1 1 -github.com/echovault/echovault/internal/snapshot/snapshot.go:67.64,68.30 1 1 -github.com/echovault/echovault/internal/snapshot/snapshot.go:68.30,70.3 1 1 -github.com/echovault/echovault/internal/snapshot/snapshot.go:73.59,74.30 1 1 -github.com/echovault/echovault/internal/snapshot/snapshot.go:74.30,76.3 1 1 -github.com/echovault/echovault/internal/snapshot/snapshot.go:79.59,80.30 1 1 -github.com/echovault/echovault/internal/snapshot/snapshot.go:80.30,82.3 1 1 -github.com/echovault/echovault/internal/snapshot/snapshot.go:85.60,86.30 1 1 -github.com/echovault/echovault/internal/snapshot/snapshot.go:86.30,88.3 1 1 -github.com/echovault/echovault/internal/snapshot/snapshot.go:91.82,92.30 1 1 -github.com/echovault/echovault/internal/snapshot/snapshot.go:92.30,94.3 1 1 -github.com/echovault/echovault/internal/snapshot/snapshot.go:97.77,98.30 1 1 -github.com/echovault/echovault/internal/snapshot/snapshot.go:98.30,100.3 1 1 -github.com/echovault/echovault/internal/snapshot/snapshot.go:103.73,104.30 1 1 -github.com/echovault/echovault/internal/snapshot/snapshot.go:104.30,106.3 1 1 -github.com/echovault/echovault/internal/snapshot/snapshot.go:109.89,110.30 1 1 -github.com/echovault/echovault/internal/snapshot/snapshot.go:110.30,112.3 1 1 -github.com/echovault/echovault/internal/snapshot/snapshot.go:115.65,122.30 1 1 -github.com/echovault/echovault/internal/snapshot/snapshot.go:122.31,122.32 0 0 -github.com/echovault/echovault/internal/snapshot/snapshot.go:123.31,123.32 0 0 -github.com/echovault/echovault/internal/snapshot/snapshot.go:124.52,126.4 1 0 -github.com/echovault/echovault/internal/snapshot/snapshot.go:127.71,127.72 0 0 -github.com/echovault/echovault/internal/snapshot/snapshot.go:128.48,128.49 0 0 -github.com/echovault/echovault/internal/snapshot/snapshot.go:129.43,131.4 1 0 -github.com/echovault/echovault/internal/snapshot/snapshot.go:134.2,134.33 1 1 -github.com/echovault/echovault/internal/snapshot/snapshot.go:134.33,136.3 1 1 -github.com/echovault/echovault/internal/snapshot/snapshot.go:138.2,138.34 1 1 -github.com/echovault/echovault/internal/snapshot/snapshot.go:138.34,139.13 1 1 -github.com/echovault/echovault/internal/snapshot/snapshot.go:139.13,140.8 1 1 -github.com/echovault/echovault/internal/snapshot/snapshot.go:140.8,142.62 2 1 -github.com/echovault/echovault/internal/snapshot/snapshot.go:142.62,143.50 1 0 -github.com/echovault/echovault/internal/snapshot/snapshot.go:143.50,145.7 1 0 -github.com/echovault/echovault/internal/snapshot/snapshot.go:151.2,151.15 1 1 -github.com/echovault/echovault/internal/snapshot/snapshot.go:154.44,174.58 7 1 -github.com/echovault/echovault/internal/snapshot/snapshot.go:174.58,177.3 2 0 -github.com/echovault/echovault/internal/snapshot/snapshot.go:180.2,182.16 3 1 -github.com/echovault/echovault/internal/snapshot/snapshot.go:182.16,183.37 1 1 -github.com/echovault/echovault/internal/snapshot/snapshot.go:183.37,186.18 2 1 -github.com/echovault/echovault/internal/snapshot/snapshot.go:186.18,189.5 2 0 -github.com/echovault/echovault/internal/snapshot/snapshot.go:190.4,190.24 1 1 -github.com/echovault/echovault/internal/snapshot/snapshot.go:191.9,194.4 2 0 -github.com/echovault/echovault/internal/snapshot/snapshot.go:197.2,198.16 2 1 -github.com/echovault/echovault/internal/snapshot/snapshot.go:198.16,201.3 2 0 -github.com/echovault/echovault/internal/snapshot/snapshot.go:202.2,202.35 1 1 -github.com/echovault/echovault/internal/snapshot/snapshot.go:202.35,205.3 2 0 -github.com/echovault/echovault/internal/snapshot/snapshot.go:207.2,209.20 2 1 -github.com/echovault/echovault/internal/snapshot/snapshot.go:209.20,210.53 1 1 -github.com/echovault/echovault/internal/snapshot/snapshot.go:210.53,213.4 2 0 -github.com/echovault/echovault/internal/snapshot/snapshot.go:217.2,222.16 3 1 -github.com/echovault/echovault/internal/snapshot/snapshot.go:222.16,225.3 2 0 -github.com/echovault/echovault/internal/snapshot/snapshot.go:227.2,228.49 2 1 -github.com/echovault/echovault/internal/snapshot/snapshot.go:228.49,230.3 1 0 -github.com/echovault/echovault/internal/snapshot/snapshot.go:233.2,236.16 3 1 -github.com/echovault/echovault/internal/snapshot/snapshot.go:236.16,239.3 2 0 -github.com/echovault/echovault/internal/snapshot/snapshot.go:242.2,243.16 2 1 -github.com/echovault/echovault/internal/snapshot/snapshot.go:243.16,246.3 2 0 -github.com/echovault/echovault/internal/snapshot/snapshot.go:249.2,254.16 3 1 -github.com/echovault/echovault/internal/snapshot/snapshot.go:254.16,257.3 2 0 -github.com/echovault/echovault/internal/snapshot/snapshot.go:258.2,258.39 1 1 -github.com/echovault/echovault/internal/snapshot/snapshot.go:258.39,261.3 2 0 -github.com/echovault/echovault/internal/snapshot/snapshot.go:262.2,262.33 1 1 -github.com/echovault/echovault/internal/snapshot/snapshot.go:262.33,264.3 1 0 -github.com/echovault/echovault/internal/snapshot/snapshot.go:265.2,265.34 1 1 -github.com/echovault/echovault/internal/snapshot/snapshot.go:265.34,268.3 2 0 -github.com/echovault/echovault/internal/snapshot/snapshot.go:271.2,272.58 2 1 -github.com/echovault/echovault/internal/snapshot/snapshot.go:272.58,274.3 1 0 -github.com/echovault/echovault/internal/snapshot/snapshot.go:277.2,278.16 2 1 -github.com/echovault/echovault/internal/snapshot/snapshot.go:278.16,281.3 2 0 -github.com/echovault/echovault/internal/snapshot/snapshot.go:282.2,282.15 1 1 -github.com/echovault/echovault/internal/snapshot/snapshot.go:282.15,283.35 1 1 -github.com/echovault/echovault/internal/snapshot/snapshot.go:283.35,285.4 1 0 -github.com/echovault/echovault/internal/snapshot/snapshot.go:289.2,289.39 1 1 -github.com/echovault/echovault/internal/snapshot/snapshot.go:289.39,291.3 1 0 -github.com/echovault/echovault/internal/snapshot/snapshot.go:292.2,292.32 1 1 -github.com/echovault/echovault/internal/snapshot/snapshot.go:292.32,294.3 1 0 -github.com/echovault/echovault/internal/snapshot/snapshot.go:297.2,302.12 3 1 -github.com/echovault/echovault/internal/snapshot/snapshot.go:305.39,307.50 2 1 -github.com/echovault/echovault/internal/snapshot/snapshot.go:307.50,309.3 1 0 -github.com/echovault/echovault/internal/snapshot/snapshot.go:310.2,310.16 1 1 -github.com/echovault/echovault/internal/snapshot/snapshot.go:310.16,312.3 1 0 -github.com/echovault/echovault/internal/snapshot/snapshot.go:314.2,317.16 3 1 -github.com/echovault/echovault/internal/snapshot/snapshot.go:317.16,319.3 1 0 -github.com/echovault/echovault/internal/snapshot/snapshot.go:321.2,321.52 1 1 -github.com/echovault/echovault/internal/snapshot/snapshot.go:321.52,323.3 1 0 -github.com/echovault/echovault/internal/snapshot/snapshot.go:325.2,325.46 1 1 -github.com/echovault/echovault/internal/snapshot/snapshot.go:325.46,327.3 1 0 -github.com/echovault/echovault/internal/snapshot/snapshot.go:329.2,334.50 2 1 -github.com/echovault/echovault/internal/snapshot/snapshot.go:334.50,336.3 1 0 -github.com/echovault/echovault/internal/snapshot/snapshot.go:337.2,337.16 1 1 -github.com/echovault/echovault/internal/snapshot/snapshot.go:337.16,339.3 1 0 -github.com/echovault/echovault/internal/snapshot/snapshot.go:341.2,342.16 2 1 -github.com/echovault/echovault/internal/snapshot/snapshot.go:342.16,344.3 1 0 -github.com/echovault/echovault/internal/snapshot/snapshot.go:346.2,348.58 2 1 -github.com/echovault/echovault/internal/snapshot/snapshot.go:348.58,350.3 1 0 -github.com/echovault/echovault/internal/snapshot/snapshot.go:352.2,354.94 2 1 -github.com/echovault/echovault/internal/snapshot/snapshot.go:354.94,356.3 1 1 -github.com/echovault/echovault/internal/snapshot/snapshot.go:358.2,360.12 2 1 -github.com/echovault/echovault/internal/snapshot/snapshot.go:363.46,365.2 1 0 -github.com/echovault/echovault/internal/snapshot/snapshot.go:367.42,369.2 1 1 -github.com/echovault/echovault/internal/modules/list/commands.go:27.68,29.16 2 1 -github.com/echovault/echovault/internal/modules/list/commands.go:29.16,31.3 1 0 -github.com/echovault/echovault/internal/modules/list/commands.go:33.2,36.16 3 1 -github.com/echovault/echovault/internal/modules/list/commands.go:36.16,39.3 1 1 -github.com/echovault/echovault/internal/modules/list/commands.go:41.2,41.90 1 1 -github.com/echovault/echovault/internal/modules/list/commands.go:41.90,43.3 1 1 -github.com/echovault/echovault/internal/modules/list/commands.go:45.2,45.57 1 1 -github.com/echovault/echovault/internal/modules/list/commands.go:48.70,50.16 2 1 -github.com/echovault/echovault/internal/modules/list/commands.go:50.16,52.3 1 0 -github.com/echovault/echovault/internal/modules/list/commands.go:54.2,58.9 4 1 -github.com/echovault/echovault/internal/modules/list/commands.go:58.9,60.3 1 1 -github.com/echovault/echovault/internal/modules/list/commands.go:62.2,62.16 1 1 -github.com/echovault/echovault/internal/modules/list/commands.go:62.16,64.3 1 1 -github.com/echovault/echovault/internal/modules/list/commands.go:66.2,67.9 2 1 -github.com/echovault/echovault/internal/modules/list/commands.go:67.9,69.3 1 1 -github.com/echovault/echovault/internal/modules/list/commands.go:71.2,71.40 1 1 -github.com/echovault/echovault/internal/modules/list/commands.go:71.40,73.3 1 1 -github.com/echovault/echovault/internal/modules/list/commands.go:75.2,75.57 1 1 -github.com/echovault/echovault/internal/modules/list/commands.go:78.70,80.16 2 1 -github.com/echovault/echovault/internal/modules/list/commands.go:80.16,82.3 1 0 -github.com/echovault/echovault/internal/modules/list/commands.go:84.2,89.24 5 1 -github.com/echovault/echovault/internal/modules/list/commands.go:89.24,91.3 1 1 -github.com/echovault/echovault/internal/modules/list/commands.go:93.2,93.16 1 1 -github.com/echovault/echovault/internal/modules/list/commands.go:93.16,95.3 1 1 -github.com/echovault/echovault/internal/modules/list/commands.go:97.2,98.9 2 1 -github.com/echovault/echovault/internal/modules/list/commands.go:98.9,100.3 1 1 -github.com/echovault/echovault/internal/modules/list/commands.go:103.2,103.40 1 1 -github.com/echovault/echovault/internal/modules/list/commands.go:103.40,105.3 1 1 -github.com/echovault/echovault/internal/modules/list/commands.go:108.2,108.51 1 1 -github.com/echovault/echovault/internal/modules/list/commands.go:108.51,110.3 1 0 -github.com/echovault/echovault/internal/modules/list/commands.go:112.2,115.15 2 1 -github.com/echovault/echovault/internal/modules/list/commands.go:115.15,117.43 2 1 -github.com/echovault/echovault/internal/modules/list/commands.go:117.43,120.4 2 1 -github.com/echovault/echovault/internal/modules/list/commands.go:121.3,121.20 1 1 -github.com/echovault/echovault/internal/modules/list/commands.go:125.2,125.18 1 1 -github.com/echovault/echovault/internal/modules/list/commands.go:125.18,127.3 1 1 -github.com/echovault/echovault/internal/modules/list/commands.go:132.2,136.17 4 1 -github.com/echovault/echovault/internal/modules/list/commands.go:136.17,138.3 1 1 -github.com/echovault/echovault/internal/modules/list/commands.go:140.2,140.13 1 1 -github.com/echovault/echovault/internal/modules/list/commands.go:140.13,143.18 3 1 -github.com/echovault/echovault/internal/modules/list/commands.go:143.18,145.4 1 1 -github.com/echovault/echovault/internal/modules/list/commands.go:145.9,147.4 1 1 -github.com/echovault/echovault/internal/modules/list/commands.go:150.2,150.19 1 1 -github.com/echovault/echovault/internal/modules/list/commands.go:153.68,155.16 2 1 -github.com/echovault/echovault/internal/modules/list/commands.go:155.16,157.3 1 0 -github.com/echovault/echovault/internal/modules/list/commands.go:159.2,163.9 4 1 -github.com/echovault/echovault/internal/modules/list/commands.go:163.9,165.3 1 1 -github.com/echovault/echovault/internal/modules/list/commands.go:167.2,167.16 1 1 -github.com/echovault/echovault/internal/modules/list/commands.go:167.16,169.3 1 1 -github.com/echovault/echovault/internal/modules/list/commands.go:171.2,172.9 2 1 -github.com/echovault/echovault/internal/modules/list/commands.go:172.9,174.3 1 1 -github.com/echovault/echovault/internal/modules/list/commands.go:176.2,176.40 1 1 -github.com/echovault/echovault/internal/modules/list/commands.go:176.40,178.3 1 1 -github.com/echovault/echovault/internal/modules/list/commands.go:180.2,181.91 2 1 -github.com/echovault/echovault/internal/modules/list/commands.go:181.91,183.3 1 0 -github.com/echovault/echovault/internal/modules/list/commands.go:185.2,185.42 1 1 -github.com/echovault/echovault/internal/modules/list/commands.go:188.69,190.16 2 1 -github.com/echovault/echovault/internal/modules/list/commands.go:190.16,192.3 1 0 -github.com/echovault/echovault/internal/modules/list/commands.go:194.2,199.24 5 1 -github.com/echovault/echovault/internal/modules/list/commands.go:199.24,201.3 1 1 -github.com/echovault/echovault/internal/modules/list/commands.go:203.2,203.30 1 1 -github.com/echovault/echovault/internal/modules/list/commands.go:203.30,205.3 1 1 -github.com/echovault/echovault/internal/modules/list/commands.go:207.2,207.16 1 1 -github.com/echovault/echovault/internal/modules/list/commands.go:207.16,209.3 1 1 -github.com/echovault/echovault/internal/modules/list/commands.go:211.2,212.9 2 1 -github.com/echovault/echovault/internal/modules/list/commands.go:212.9,214.3 1 1 -github.com/echovault/echovault/internal/modules/list/commands.go:216.2,216.40 1 1 -github.com/echovault/echovault/internal/modules/list/commands.go:216.40,218.3 1 1 -github.com/echovault/echovault/internal/modules/list/commands.go:220.2,220.34 1 1 -github.com/echovault/echovault/internal/modules/list/commands.go:220.34,221.100 1 1 -github.com/echovault/echovault/internal/modules/list/commands.go:221.100,223.4 1 0 -github.com/echovault/echovault/internal/modules/list/commands.go:224.3,224.43 1 1 -github.com/echovault/echovault/internal/modules/list/commands.go:227.2,227.102 1 1 -github.com/echovault/echovault/internal/modules/list/commands.go:227.102,229.3 1 0 -github.com/echovault/echovault/internal/modules/list/commands.go:230.2,230.42 1 1 -github.com/echovault/echovault/internal/modules/list/commands.go:233.68,235.16 2 1 -github.com/echovault/echovault/internal/modules/list/commands.go:235.16,237.3 1 0 -github.com/echovault/echovault/internal/modules/list/commands.go:239.2,244.9 5 1 -github.com/echovault/echovault/internal/modules/list/commands.go:244.9,246.3 1 1 -github.com/echovault/echovault/internal/modules/list/commands.go:248.2,250.16 2 1 -github.com/echovault/echovault/internal/modules/list/commands.go:250.16,252.3 1 0 -github.com/echovault/echovault/internal/modules/list/commands.go:254.2,255.9 2 1 -github.com/echovault/echovault/internal/modules/list/commands.go:255.9,257.3 1 1 -github.com/echovault/echovault/internal/modules/list/commands.go:259.2,259.9 1 1 -github.com/echovault/echovault/internal/modules/list/commands.go:260.10,260.10 0 0 -github.com/echovault/echovault/internal/modules/list/commands.go:262.17,264.34 1 1 -github.com/echovault/echovault/internal/modules/list/commands.go:264.34,265.26 1 1 -github.com/echovault/echovault/internal/modules/list/commands.go:265.26,266.10 1 1 -github.com/echovault/echovault/internal/modules/list/commands.go:268.4,268.43 1 1 -github.com/echovault/echovault/internal/modules/list/commands.go:268.43,271.5 2 1 -github.com/echovault/echovault/internal/modules/list/commands.go:273.17,275.39 1 1 -github.com/echovault/echovault/internal/modules/list/commands.go:275.39,276.26 1 1 -github.com/echovault/echovault/internal/modules/list/commands.go:276.26,277.10 1 1 -github.com/echovault/echovault/internal/modules/list/commands.go:279.4,279.43 1 1 -github.com/echovault/echovault/internal/modules/list/commands.go:279.43,282.5 2 1 -github.com/echovault/echovault/internal/modules/list/commands.go:286.2,286.61 1 1 -github.com/echovault/echovault/internal/modules/list/commands.go:286.61,288.3 1 1 -github.com/echovault/echovault/internal/modules/list/commands.go:290.2,290.91 1 1 -github.com/echovault/echovault/internal/modules/list/commands.go:290.91,292.3 1 0 -github.com/echovault/echovault/internal/modules/list/commands.go:294.2,294.42 1 1 -github.com/echovault/echovault/internal/modules/list/commands.go:297.69,299.16 2 1 -github.com/echovault/echovault/internal/modules/list/commands.go:299.16,301.3 1 0 -github.com/echovault/echovault/internal/modules/list/commands.go:303.2,308.116 5 1 -github.com/echovault/echovault/internal/modules/list/commands.go:308.116,310.3 1 1 -github.com/echovault/echovault/internal/modules/list/commands.go:312.2,312.51 1 1 -github.com/echovault/echovault/internal/modules/list/commands.go:312.51,314.3 1 1 -github.com/echovault/echovault/internal/modules/list/commands.go:316.2,320.33 4 1 -github.com/echovault/echovault/internal/modules/list/commands.go:320.33,322.3 1 1 -github.com/echovault/echovault/internal/modules/list/commands.go:324.2,324.19 1 1 -github.com/echovault/echovault/internal/modules/list/commands.go:325.14,328.38 1 1 -github.com/echovault/echovault/internal/modules/list/commands.go:328.38,329.26 1 1 -github.com/echovault/echovault/internal/modules/list/commands.go:329.26,331.6 1 1 -github.com/echovault/echovault/internal/modules/list/commands.go:333.5,333.50 1 1 -github.com/echovault/echovault/internal/modules/list/commands.go:336.15,339.38 1 1 -github.com/echovault/echovault/internal/modules/list/commands.go:339.38,340.26 1 1 -github.com/echovault/echovault/internal/modules/list/commands.go:340.26,342.6 1 1 -github.com/echovault/echovault/internal/modules/list/commands.go:344.5,344.66 1 1 -github.com/echovault/echovault/internal/modules/list/commands.go:349.2,349.16 1 1 -github.com/echovault/echovault/internal/modules/list/commands.go:349.16,351.3 1 0 -github.com/echovault/echovault/internal/modules/list/commands.go:353.2,353.42 1 1 -github.com/echovault/echovault/internal/modules/list/commands.go:356.69,358.16 2 1 -github.com/echovault/echovault/internal/modules/list/commands.go:358.16,360.3 1 0 -github.com/echovault/echovault/internal/modules/list/commands.go:362.2,364.42 2 1 -github.com/echovault/echovault/internal/modules/list/commands.go:364.42,366.3 1 1 -github.com/echovault/echovault/internal/modules/list/commands.go:368.2,371.16 3 1 -github.com/echovault/echovault/internal/modules/list/commands.go:371.16,372.45 1 1 -github.com/echovault/echovault/internal/modules/list/commands.go:373.17,374.64 1 1 -github.com/echovault/echovault/internal/modules/list/commands.go:375.11,376.104 1 1 -github.com/echovault/echovault/internal/modules/list/commands.go:376.104,378.5 1 0 -github.com/echovault/echovault/internal/modules/list/commands.go:382.2,384.9 3 1 -github.com/echovault/echovault/internal/modules/list/commands.go:384.9,386.3 1 0 -github.com/echovault/echovault/internal/modules/list/commands.go:388.2,388.109 1 1 -github.com/echovault/echovault/internal/modules/list/commands.go:388.109,390.3 1 0 -github.com/echovault/echovault/internal/modules/list/commands.go:392.2,392.66 1 1 -github.com/echovault/echovault/internal/modules/list/commands.go:395.69,397.16 2 1 -github.com/echovault/echovault/internal/modules/list/commands.go:397.16,399.3 1 0 -github.com/echovault/echovault/internal/modules/list/commands.go:401.2,406.42 4 1 -github.com/echovault/echovault/internal/modules/list/commands.go:406.42,408.3 1 1 -github.com/echovault/echovault/internal/modules/list/commands.go:410.2,410.16 1 1 -github.com/echovault/echovault/internal/modules/list/commands.go:410.16,411.45 1 1 -github.com/echovault/echovault/internal/modules/list/commands.go:412.17,413.64 1 1 -github.com/echovault/echovault/internal/modules/list/commands.go:414.11,415.104 1 1 -github.com/echovault/echovault/internal/modules/list/commands.go:415.104,417.5 1 0 -github.com/echovault/echovault/internal/modules/list/commands.go:421.2,423.9 3 1 -github.com/echovault/echovault/internal/modules/list/commands.go:423.9,425.3 1 0 -github.com/echovault/echovault/internal/modules/list/commands.go:427.2,427.109 1 1 -github.com/echovault/echovault/internal/modules/list/commands.go:427.109,429.3 1 0 -github.com/echovault/echovault/internal/modules/list/commands.go:430.2,430.66 1 1 -github.com/echovault/echovault/internal/modules/list/commands.go:433.67,435.16 2 1 -github.com/echovault/echovault/internal/modules/list/commands.go:435.16,437.3 1 0 -github.com/echovault/echovault/internal/modules/list/commands.go:439.2,442.16 3 1 -github.com/echovault/echovault/internal/modules/list/commands.go:442.16,444.3 1 0 -github.com/echovault/echovault/internal/modules/list/commands.go:446.2,447.9 2 1 -github.com/echovault/echovault/internal/modules/list/commands.go:447.9,449.3 1 1 -github.com/echovault/echovault/internal/modules/list/commands.go:451.2,451.44 1 1 -github.com/echovault/echovault/internal/modules/list/commands.go:452.10,453.96 1 1 -github.com/echovault/echovault/internal/modules/list/commands.go:453.96,455.4 1 0 -github.com/echovault/echovault/internal/modules/list/commands.go:456.3,456.54 1 1 -github.com/echovault/echovault/internal/modules/list/commands.go:457.14,458.106 1 1 -github.com/echovault/echovault/internal/modules/list/commands.go:458.106,460.4 1 0 -github.com/echovault/echovault/internal/modules/list/commands.go:461.3,461.64 1 1 -github.com/echovault/echovault/internal/modules/list/commands.go:465.36,588.2 1 1 -github.com/echovault/echovault/internal/modules/list/key_funcs.go:23.75,24.18 1 1 -github.com/echovault/echovault/internal/modules/list/key_funcs.go:24.18,26.3 1 1 -github.com/echovault/echovault/internal/modules/list/key_funcs.go:27.2,31.8 1 1 -github.com/echovault/echovault/internal/modules/list/key_funcs.go:34.73,35.19 1 1 -github.com/echovault/echovault/internal/modules/list/key_funcs.go:35.19,37.3 1 1 -github.com/echovault/echovault/internal/modules/list/key_funcs.go:38.2,42.8 1 1 -github.com/echovault/echovault/internal/modules/list/key_funcs.go:45.74,46.19 1 1 -github.com/echovault/echovault/internal/modules/list/key_funcs.go:46.19,48.3 1 1 -github.com/echovault/echovault/internal/modules/list/key_funcs.go:49.2,53.8 1 1 -github.com/echovault/echovault/internal/modules/list/key_funcs.go:56.76,57.19 1 1 -github.com/echovault/echovault/internal/modules/list/key_funcs.go:57.19,59.3 1 1 -github.com/echovault/echovault/internal/modules/list/key_funcs.go:60.2,64.8 1 1 -github.com/echovault/echovault/internal/modules/list/key_funcs.go:67.76,68.19 1 1 -github.com/echovault/echovault/internal/modules/list/key_funcs.go:68.19,70.3 1 1 -github.com/echovault/echovault/internal/modules/list/key_funcs.go:71.2,75.8 1 1 -github.com/echovault/echovault/internal/modules/list/key_funcs.go:78.74,79.19 1 1 -github.com/echovault/echovault/internal/modules/list/key_funcs.go:79.19,81.3 1 1 -github.com/echovault/echovault/internal/modules/list/key_funcs.go:82.2,86.8 1 1 -github.com/echovault/echovault/internal/modules/list/key_funcs.go:89.75,90.19 1 1 -github.com/echovault/echovault/internal/modules/list/key_funcs.go:90.19,92.3 1 1 -github.com/echovault/echovault/internal/modules/list/key_funcs.go:93.2,97.8 1 1 -github.com/echovault/echovault/internal/modules/list/key_funcs.go:100.74,101.19 1 1 -github.com/echovault/echovault/internal/modules/list/key_funcs.go:101.19,103.3 1 1 -github.com/echovault/echovault/internal/modules/list/key_funcs.go:104.2,108.8 1 1 -github.com/echovault/echovault/internal/modules/list/key_funcs.go:111.75,112.18 1 1 -github.com/echovault/echovault/internal/modules/list/key_funcs.go:112.18,114.3 1 1 -github.com/echovault/echovault/internal/modules/list/key_funcs.go:115.2,119.8 1 1 -github.com/echovault/echovault/internal/modules/list/key_funcs.go:122.75,123.19 1 1 -github.com/echovault/echovault/internal/modules/list/key_funcs.go:123.19,125.3 1 1 -github.com/echovault/echovault/internal/modules/list/key_funcs.go:126.2,130.8 1 1 github.com/echovault/echovault/internal/modules/hash/commands.go:28.68,30.16 2 1 github.com/echovault/echovault/internal/modules/hash/commands.go:30.16,32.3 1 0 github.com/echovault/echovault/internal/modules/hash/commands.go:34.2,38.36 4 1 @@ -1389,7 +560,7 @@ github.com/echovault/echovault/internal/modules/hash/commands.go:301.38,303.17 2 github.com/echovault/echovault/internal/modules/hash/commands.go:303.17,304.41 1 1 github.com/echovault/echovault/internal/modules/hash/commands.go:304.41,306.13 2 1 github.com/echovault/echovault/internal/modules/hash/commands.go:308.4,308.42 1 1 -github.com/echovault/echovault/internal/modules/hash/commands.go:308.42,311.13 3 1 +github.com/echovault/echovault/internal/modules/hash/commands.go:308.42,311.13 3 0 github.com/echovault/echovault/internal/modules/hash/commands.go:313.4,313.38 1 1 github.com/echovault/echovault/internal/modules/hash/commands.go:313.38,315.13 2 1 github.com/echovault/echovault/internal/modules/hash/commands.go:320.2,320.25 1 1 @@ -1517,6 +688,456 @@ github.com/echovault/echovault/internal/modules/hash/key_funcs.go:144.2,148.8 1 github.com/echovault/echovault/internal/modules/hash/key_funcs.go:151.74,152.18 1 1 github.com/echovault/echovault/internal/modules/hash/key_funcs.go:152.18,154.3 1 1 github.com/echovault/echovault/internal/modules/hash/key_funcs.go:155.2,159.8 1 1 +github.com/echovault/echovault/internal/modules/list/commands.go:27.68,29.16 2 1 +github.com/echovault/echovault/internal/modules/list/commands.go:29.16,31.3 1 0 +github.com/echovault/echovault/internal/modules/list/commands.go:33.2,36.16 3 1 +github.com/echovault/echovault/internal/modules/list/commands.go:36.16,39.3 1 1 +github.com/echovault/echovault/internal/modules/list/commands.go:41.2,41.90 1 1 +github.com/echovault/echovault/internal/modules/list/commands.go:41.90,43.3 1 1 +github.com/echovault/echovault/internal/modules/list/commands.go:45.2,45.57 1 1 +github.com/echovault/echovault/internal/modules/list/commands.go:48.70,50.16 2 1 +github.com/echovault/echovault/internal/modules/list/commands.go:50.16,52.3 1 0 +github.com/echovault/echovault/internal/modules/list/commands.go:54.2,58.9 4 1 +github.com/echovault/echovault/internal/modules/list/commands.go:58.9,60.3 1 1 +github.com/echovault/echovault/internal/modules/list/commands.go:62.2,62.16 1 1 +github.com/echovault/echovault/internal/modules/list/commands.go:62.16,64.3 1 1 +github.com/echovault/echovault/internal/modules/list/commands.go:66.2,67.9 2 1 +github.com/echovault/echovault/internal/modules/list/commands.go:67.9,69.3 1 1 +github.com/echovault/echovault/internal/modules/list/commands.go:71.2,71.40 1 1 +github.com/echovault/echovault/internal/modules/list/commands.go:71.40,73.3 1 1 +github.com/echovault/echovault/internal/modules/list/commands.go:75.2,75.57 1 1 +github.com/echovault/echovault/internal/modules/list/commands.go:78.70,80.16 2 1 +github.com/echovault/echovault/internal/modules/list/commands.go:80.16,82.3 1 0 +github.com/echovault/echovault/internal/modules/list/commands.go:84.2,89.24 5 1 +github.com/echovault/echovault/internal/modules/list/commands.go:89.24,91.3 1 1 +github.com/echovault/echovault/internal/modules/list/commands.go:93.2,93.16 1 1 +github.com/echovault/echovault/internal/modules/list/commands.go:93.16,95.3 1 1 +github.com/echovault/echovault/internal/modules/list/commands.go:97.2,98.9 2 1 +github.com/echovault/echovault/internal/modules/list/commands.go:98.9,100.3 1 1 +github.com/echovault/echovault/internal/modules/list/commands.go:103.2,103.40 1 1 +github.com/echovault/echovault/internal/modules/list/commands.go:103.40,105.3 1 1 +github.com/echovault/echovault/internal/modules/list/commands.go:108.2,108.51 1 1 +github.com/echovault/echovault/internal/modules/list/commands.go:108.51,110.3 1 0 +github.com/echovault/echovault/internal/modules/list/commands.go:112.2,115.15 2 1 +github.com/echovault/echovault/internal/modules/list/commands.go:115.15,117.43 2 1 +github.com/echovault/echovault/internal/modules/list/commands.go:117.43,120.4 2 1 +github.com/echovault/echovault/internal/modules/list/commands.go:121.3,121.20 1 1 +github.com/echovault/echovault/internal/modules/list/commands.go:125.2,125.18 1 1 +github.com/echovault/echovault/internal/modules/list/commands.go:125.18,127.3 1 1 +github.com/echovault/echovault/internal/modules/list/commands.go:132.2,136.17 4 1 +github.com/echovault/echovault/internal/modules/list/commands.go:136.17,138.3 1 1 +github.com/echovault/echovault/internal/modules/list/commands.go:140.2,140.13 1 1 +github.com/echovault/echovault/internal/modules/list/commands.go:140.13,143.18 3 1 +github.com/echovault/echovault/internal/modules/list/commands.go:143.18,145.4 1 1 +github.com/echovault/echovault/internal/modules/list/commands.go:145.9,147.4 1 1 +github.com/echovault/echovault/internal/modules/list/commands.go:150.2,150.19 1 1 +github.com/echovault/echovault/internal/modules/list/commands.go:153.68,155.16 2 1 +github.com/echovault/echovault/internal/modules/list/commands.go:155.16,157.3 1 0 +github.com/echovault/echovault/internal/modules/list/commands.go:159.2,163.9 4 1 +github.com/echovault/echovault/internal/modules/list/commands.go:163.9,165.3 1 1 +github.com/echovault/echovault/internal/modules/list/commands.go:167.2,167.16 1 1 +github.com/echovault/echovault/internal/modules/list/commands.go:167.16,169.3 1 1 +github.com/echovault/echovault/internal/modules/list/commands.go:171.2,172.9 2 1 +github.com/echovault/echovault/internal/modules/list/commands.go:172.9,174.3 1 1 +github.com/echovault/echovault/internal/modules/list/commands.go:176.2,176.40 1 1 +github.com/echovault/echovault/internal/modules/list/commands.go:176.40,178.3 1 1 +github.com/echovault/echovault/internal/modules/list/commands.go:180.2,181.91 2 1 +github.com/echovault/echovault/internal/modules/list/commands.go:181.91,183.3 1 0 +github.com/echovault/echovault/internal/modules/list/commands.go:185.2,185.42 1 1 +github.com/echovault/echovault/internal/modules/list/commands.go:188.69,190.16 2 1 +github.com/echovault/echovault/internal/modules/list/commands.go:190.16,192.3 1 0 +github.com/echovault/echovault/internal/modules/list/commands.go:194.2,199.24 5 1 +github.com/echovault/echovault/internal/modules/list/commands.go:199.24,201.3 1 1 +github.com/echovault/echovault/internal/modules/list/commands.go:203.2,203.30 1 1 +github.com/echovault/echovault/internal/modules/list/commands.go:203.30,205.3 1 1 +github.com/echovault/echovault/internal/modules/list/commands.go:207.2,207.16 1 1 +github.com/echovault/echovault/internal/modules/list/commands.go:207.16,209.3 1 1 +github.com/echovault/echovault/internal/modules/list/commands.go:211.2,212.9 2 1 +github.com/echovault/echovault/internal/modules/list/commands.go:212.9,214.3 1 1 +github.com/echovault/echovault/internal/modules/list/commands.go:216.2,216.40 1 1 +github.com/echovault/echovault/internal/modules/list/commands.go:216.40,218.3 1 1 +github.com/echovault/echovault/internal/modules/list/commands.go:220.2,220.34 1 1 +github.com/echovault/echovault/internal/modules/list/commands.go:220.34,221.100 1 1 +github.com/echovault/echovault/internal/modules/list/commands.go:221.100,223.4 1 0 +github.com/echovault/echovault/internal/modules/list/commands.go:224.3,224.43 1 1 +github.com/echovault/echovault/internal/modules/list/commands.go:227.2,227.102 1 1 +github.com/echovault/echovault/internal/modules/list/commands.go:227.102,229.3 1 0 +github.com/echovault/echovault/internal/modules/list/commands.go:230.2,230.42 1 1 +github.com/echovault/echovault/internal/modules/list/commands.go:233.68,235.16 2 1 +github.com/echovault/echovault/internal/modules/list/commands.go:235.16,237.3 1 0 +github.com/echovault/echovault/internal/modules/list/commands.go:239.2,244.9 5 1 +github.com/echovault/echovault/internal/modules/list/commands.go:244.9,246.3 1 1 +github.com/echovault/echovault/internal/modules/list/commands.go:248.2,250.16 2 1 +github.com/echovault/echovault/internal/modules/list/commands.go:250.16,252.3 1 0 +github.com/echovault/echovault/internal/modules/list/commands.go:254.2,255.9 2 1 +github.com/echovault/echovault/internal/modules/list/commands.go:255.9,257.3 1 1 +github.com/echovault/echovault/internal/modules/list/commands.go:259.2,259.9 1 1 +github.com/echovault/echovault/internal/modules/list/commands.go:260.10,260.10 0 0 +github.com/echovault/echovault/internal/modules/list/commands.go:262.17,264.34 1 1 +github.com/echovault/echovault/internal/modules/list/commands.go:264.34,265.26 1 1 +github.com/echovault/echovault/internal/modules/list/commands.go:265.26,266.10 1 1 +github.com/echovault/echovault/internal/modules/list/commands.go:268.4,268.43 1 1 +github.com/echovault/echovault/internal/modules/list/commands.go:268.43,271.5 2 1 +github.com/echovault/echovault/internal/modules/list/commands.go:273.17,275.39 1 1 +github.com/echovault/echovault/internal/modules/list/commands.go:275.39,276.26 1 1 +github.com/echovault/echovault/internal/modules/list/commands.go:276.26,277.10 1 1 +github.com/echovault/echovault/internal/modules/list/commands.go:279.4,279.43 1 1 +github.com/echovault/echovault/internal/modules/list/commands.go:279.43,282.5 2 1 +github.com/echovault/echovault/internal/modules/list/commands.go:286.2,286.61 1 1 +github.com/echovault/echovault/internal/modules/list/commands.go:286.61,288.3 1 1 +github.com/echovault/echovault/internal/modules/list/commands.go:290.2,290.91 1 1 +github.com/echovault/echovault/internal/modules/list/commands.go:290.91,292.3 1 0 +github.com/echovault/echovault/internal/modules/list/commands.go:294.2,294.42 1 1 +github.com/echovault/echovault/internal/modules/list/commands.go:297.69,299.16 2 1 +github.com/echovault/echovault/internal/modules/list/commands.go:299.16,301.3 1 0 +github.com/echovault/echovault/internal/modules/list/commands.go:303.2,308.116 5 1 +github.com/echovault/echovault/internal/modules/list/commands.go:308.116,310.3 1 1 +github.com/echovault/echovault/internal/modules/list/commands.go:312.2,312.51 1 1 +github.com/echovault/echovault/internal/modules/list/commands.go:312.51,314.3 1 1 +github.com/echovault/echovault/internal/modules/list/commands.go:316.2,320.33 4 1 +github.com/echovault/echovault/internal/modules/list/commands.go:320.33,322.3 1 1 +github.com/echovault/echovault/internal/modules/list/commands.go:324.2,324.19 1 1 +github.com/echovault/echovault/internal/modules/list/commands.go:325.14,328.38 1 1 +github.com/echovault/echovault/internal/modules/list/commands.go:328.38,329.26 1 1 +github.com/echovault/echovault/internal/modules/list/commands.go:329.26,331.6 1 1 +github.com/echovault/echovault/internal/modules/list/commands.go:333.5,333.50 1 1 +github.com/echovault/echovault/internal/modules/list/commands.go:336.15,339.38 1 1 +github.com/echovault/echovault/internal/modules/list/commands.go:339.38,340.26 1 1 +github.com/echovault/echovault/internal/modules/list/commands.go:340.26,342.6 1 1 +github.com/echovault/echovault/internal/modules/list/commands.go:344.5,344.66 1 1 +github.com/echovault/echovault/internal/modules/list/commands.go:349.2,349.16 1 1 +github.com/echovault/echovault/internal/modules/list/commands.go:349.16,351.3 1 0 +github.com/echovault/echovault/internal/modules/list/commands.go:353.2,353.42 1 1 +github.com/echovault/echovault/internal/modules/list/commands.go:356.69,358.16 2 1 +github.com/echovault/echovault/internal/modules/list/commands.go:358.16,360.3 1 0 +github.com/echovault/echovault/internal/modules/list/commands.go:362.2,364.42 2 1 +github.com/echovault/echovault/internal/modules/list/commands.go:364.42,366.3 1 1 +github.com/echovault/echovault/internal/modules/list/commands.go:368.2,371.16 3 1 +github.com/echovault/echovault/internal/modules/list/commands.go:371.16,372.45 1 1 +github.com/echovault/echovault/internal/modules/list/commands.go:373.17,374.64 1 1 +github.com/echovault/echovault/internal/modules/list/commands.go:375.11,376.104 1 1 +github.com/echovault/echovault/internal/modules/list/commands.go:376.104,378.5 1 0 +github.com/echovault/echovault/internal/modules/list/commands.go:382.2,384.9 3 1 +github.com/echovault/echovault/internal/modules/list/commands.go:384.9,386.3 1 0 +github.com/echovault/echovault/internal/modules/list/commands.go:388.2,388.109 1 1 +github.com/echovault/echovault/internal/modules/list/commands.go:388.109,390.3 1 0 +github.com/echovault/echovault/internal/modules/list/commands.go:392.2,392.66 1 1 +github.com/echovault/echovault/internal/modules/list/commands.go:395.69,397.16 2 1 +github.com/echovault/echovault/internal/modules/list/commands.go:397.16,399.3 1 0 +github.com/echovault/echovault/internal/modules/list/commands.go:401.2,406.42 4 1 +github.com/echovault/echovault/internal/modules/list/commands.go:406.42,408.3 1 1 +github.com/echovault/echovault/internal/modules/list/commands.go:410.2,410.16 1 1 +github.com/echovault/echovault/internal/modules/list/commands.go:410.16,411.45 1 1 +github.com/echovault/echovault/internal/modules/list/commands.go:412.17,413.64 1 1 +github.com/echovault/echovault/internal/modules/list/commands.go:414.11,415.104 1 1 +github.com/echovault/echovault/internal/modules/list/commands.go:415.104,417.5 1 0 +github.com/echovault/echovault/internal/modules/list/commands.go:421.2,423.9 3 1 +github.com/echovault/echovault/internal/modules/list/commands.go:423.9,425.3 1 0 +github.com/echovault/echovault/internal/modules/list/commands.go:427.2,427.109 1 1 +github.com/echovault/echovault/internal/modules/list/commands.go:427.109,429.3 1 0 +github.com/echovault/echovault/internal/modules/list/commands.go:430.2,430.66 1 1 +github.com/echovault/echovault/internal/modules/list/commands.go:433.67,435.16 2 1 +github.com/echovault/echovault/internal/modules/list/commands.go:435.16,437.3 1 0 +github.com/echovault/echovault/internal/modules/list/commands.go:439.2,442.16 3 1 +github.com/echovault/echovault/internal/modules/list/commands.go:442.16,444.3 1 0 +github.com/echovault/echovault/internal/modules/list/commands.go:446.2,447.9 2 1 +github.com/echovault/echovault/internal/modules/list/commands.go:447.9,449.3 1 1 +github.com/echovault/echovault/internal/modules/list/commands.go:451.2,451.44 1 1 +github.com/echovault/echovault/internal/modules/list/commands.go:452.10,453.96 1 1 +github.com/echovault/echovault/internal/modules/list/commands.go:453.96,455.4 1 0 +github.com/echovault/echovault/internal/modules/list/commands.go:456.3,456.54 1 1 +github.com/echovault/echovault/internal/modules/list/commands.go:457.14,458.106 1 1 +github.com/echovault/echovault/internal/modules/list/commands.go:458.106,460.4 1 0 +github.com/echovault/echovault/internal/modules/list/commands.go:461.3,461.64 1 1 +github.com/echovault/echovault/internal/modules/list/commands.go:465.36,588.2 1 1 +github.com/echovault/echovault/internal/modules/list/key_funcs.go:23.75,24.18 1 1 +github.com/echovault/echovault/internal/modules/list/key_funcs.go:24.18,26.3 1 1 +github.com/echovault/echovault/internal/modules/list/key_funcs.go:27.2,31.8 1 1 +github.com/echovault/echovault/internal/modules/list/key_funcs.go:34.73,35.19 1 1 +github.com/echovault/echovault/internal/modules/list/key_funcs.go:35.19,37.3 1 1 +github.com/echovault/echovault/internal/modules/list/key_funcs.go:38.2,42.8 1 1 +github.com/echovault/echovault/internal/modules/list/key_funcs.go:45.74,46.19 1 1 +github.com/echovault/echovault/internal/modules/list/key_funcs.go:46.19,48.3 1 1 +github.com/echovault/echovault/internal/modules/list/key_funcs.go:49.2,53.8 1 1 +github.com/echovault/echovault/internal/modules/list/key_funcs.go:56.76,57.19 1 1 +github.com/echovault/echovault/internal/modules/list/key_funcs.go:57.19,59.3 1 1 +github.com/echovault/echovault/internal/modules/list/key_funcs.go:60.2,64.8 1 1 +github.com/echovault/echovault/internal/modules/list/key_funcs.go:67.76,68.19 1 1 +github.com/echovault/echovault/internal/modules/list/key_funcs.go:68.19,70.3 1 1 +github.com/echovault/echovault/internal/modules/list/key_funcs.go:71.2,75.8 1 1 +github.com/echovault/echovault/internal/modules/list/key_funcs.go:78.74,79.19 1 1 +github.com/echovault/echovault/internal/modules/list/key_funcs.go:79.19,81.3 1 1 +github.com/echovault/echovault/internal/modules/list/key_funcs.go:82.2,86.8 1 1 +github.com/echovault/echovault/internal/modules/list/key_funcs.go:89.75,90.19 1 1 +github.com/echovault/echovault/internal/modules/list/key_funcs.go:90.19,92.3 1 1 +github.com/echovault/echovault/internal/modules/list/key_funcs.go:93.2,97.8 1 1 +github.com/echovault/echovault/internal/modules/list/key_funcs.go:100.74,101.19 1 1 +github.com/echovault/echovault/internal/modules/list/key_funcs.go:101.19,103.3 1 1 +github.com/echovault/echovault/internal/modules/list/key_funcs.go:104.2,108.8 1 1 +github.com/echovault/echovault/internal/modules/list/key_funcs.go:111.75,112.18 1 1 +github.com/echovault/echovault/internal/modules/list/key_funcs.go:112.18,114.3 1 1 +github.com/echovault/echovault/internal/modules/list/key_funcs.go:115.2,119.8 1 1 +github.com/echovault/echovault/internal/modules/list/key_funcs.go:122.75,123.19 1 1 +github.com/echovault/echovault/internal/modules/list/key_funcs.go:123.19,125.3 1 1 +github.com/echovault/echovault/internal/modules/list/key_funcs.go:126.2,130.8 1 1 +github.com/echovault/echovault/internal/snapshot/snapshot.go:55.56,56.30 1 1 +github.com/echovault/echovault/internal/snapshot/snapshot.go:56.30,58.3 1 1 +github.com/echovault/echovault/internal/snapshot/snapshot.go:61.59,62.30 1 1 +github.com/echovault/echovault/internal/snapshot/snapshot.go:62.30,64.3 1 1 +github.com/echovault/echovault/internal/snapshot/snapshot.go:67.64,68.30 1 1 +github.com/echovault/echovault/internal/snapshot/snapshot.go:68.30,70.3 1 1 +github.com/echovault/echovault/internal/snapshot/snapshot.go:73.59,74.30 1 1 +github.com/echovault/echovault/internal/snapshot/snapshot.go:74.30,76.3 1 1 +github.com/echovault/echovault/internal/snapshot/snapshot.go:79.59,80.30 1 1 +github.com/echovault/echovault/internal/snapshot/snapshot.go:80.30,82.3 1 1 +github.com/echovault/echovault/internal/snapshot/snapshot.go:85.60,86.30 1 1 +github.com/echovault/echovault/internal/snapshot/snapshot.go:86.30,88.3 1 1 +github.com/echovault/echovault/internal/snapshot/snapshot.go:91.82,92.30 1 1 +github.com/echovault/echovault/internal/snapshot/snapshot.go:92.30,94.3 1 1 +github.com/echovault/echovault/internal/snapshot/snapshot.go:97.77,98.30 1 1 +github.com/echovault/echovault/internal/snapshot/snapshot.go:98.30,100.3 1 1 +github.com/echovault/echovault/internal/snapshot/snapshot.go:103.73,104.30 1 1 +github.com/echovault/echovault/internal/snapshot/snapshot.go:104.30,106.3 1 1 +github.com/echovault/echovault/internal/snapshot/snapshot.go:109.89,110.30 1 1 +github.com/echovault/echovault/internal/snapshot/snapshot.go:110.30,112.3 1 1 +github.com/echovault/echovault/internal/snapshot/snapshot.go:115.65,122.30 1 1 +github.com/echovault/echovault/internal/snapshot/snapshot.go:122.31,122.32 0 0 +github.com/echovault/echovault/internal/snapshot/snapshot.go:123.31,123.32 0 0 +github.com/echovault/echovault/internal/snapshot/snapshot.go:124.52,126.4 1 0 +github.com/echovault/echovault/internal/snapshot/snapshot.go:127.71,127.72 0 0 +github.com/echovault/echovault/internal/snapshot/snapshot.go:128.48,128.49 0 0 +github.com/echovault/echovault/internal/snapshot/snapshot.go:129.43,131.4 1 0 +github.com/echovault/echovault/internal/snapshot/snapshot.go:134.2,134.33 1 1 +github.com/echovault/echovault/internal/snapshot/snapshot.go:134.33,136.3 1 1 +github.com/echovault/echovault/internal/snapshot/snapshot.go:138.2,138.34 1 1 +github.com/echovault/echovault/internal/snapshot/snapshot.go:138.34,139.13 1 1 +github.com/echovault/echovault/internal/snapshot/snapshot.go:139.13,140.8 1 1 +github.com/echovault/echovault/internal/snapshot/snapshot.go:140.8,142.62 2 1 +github.com/echovault/echovault/internal/snapshot/snapshot.go:142.62,143.50 1 0 +github.com/echovault/echovault/internal/snapshot/snapshot.go:143.50,145.7 1 0 +github.com/echovault/echovault/internal/snapshot/snapshot.go:151.2,151.15 1 1 +github.com/echovault/echovault/internal/snapshot/snapshot.go:154.44,174.58 7 1 +github.com/echovault/echovault/internal/snapshot/snapshot.go:174.58,177.3 2 0 +github.com/echovault/echovault/internal/snapshot/snapshot.go:180.2,182.16 3 1 +github.com/echovault/echovault/internal/snapshot/snapshot.go:182.16,183.37 1 1 +github.com/echovault/echovault/internal/snapshot/snapshot.go:183.37,186.18 2 1 +github.com/echovault/echovault/internal/snapshot/snapshot.go:186.18,189.5 2 0 +github.com/echovault/echovault/internal/snapshot/snapshot.go:190.4,190.24 1 1 +github.com/echovault/echovault/internal/snapshot/snapshot.go:191.9,194.4 2 0 +github.com/echovault/echovault/internal/snapshot/snapshot.go:197.2,198.16 2 1 +github.com/echovault/echovault/internal/snapshot/snapshot.go:198.16,201.3 2 0 +github.com/echovault/echovault/internal/snapshot/snapshot.go:202.2,202.35 1 1 +github.com/echovault/echovault/internal/snapshot/snapshot.go:202.35,205.3 2 0 +github.com/echovault/echovault/internal/snapshot/snapshot.go:207.2,209.20 2 1 +github.com/echovault/echovault/internal/snapshot/snapshot.go:209.20,210.53 1 1 +github.com/echovault/echovault/internal/snapshot/snapshot.go:210.53,213.4 2 0 +github.com/echovault/echovault/internal/snapshot/snapshot.go:217.2,222.16 3 1 +github.com/echovault/echovault/internal/snapshot/snapshot.go:222.16,225.3 2 0 +github.com/echovault/echovault/internal/snapshot/snapshot.go:227.2,228.49 2 1 +github.com/echovault/echovault/internal/snapshot/snapshot.go:228.49,230.3 1 0 +github.com/echovault/echovault/internal/snapshot/snapshot.go:233.2,236.16 3 1 +github.com/echovault/echovault/internal/snapshot/snapshot.go:236.16,239.3 2 0 +github.com/echovault/echovault/internal/snapshot/snapshot.go:242.2,243.16 2 1 +github.com/echovault/echovault/internal/snapshot/snapshot.go:243.16,246.3 2 0 +github.com/echovault/echovault/internal/snapshot/snapshot.go:249.2,254.16 3 1 +github.com/echovault/echovault/internal/snapshot/snapshot.go:254.16,257.3 2 0 +github.com/echovault/echovault/internal/snapshot/snapshot.go:258.2,258.39 1 1 +github.com/echovault/echovault/internal/snapshot/snapshot.go:258.39,261.3 2 0 +github.com/echovault/echovault/internal/snapshot/snapshot.go:262.2,262.33 1 1 +github.com/echovault/echovault/internal/snapshot/snapshot.go:262.33,264.3 1 0 +github.com/echovault/echovault/internal/snapshot/snapshot.go:265.2,265.34 1 1 +github.com/echovault/echovault/internal/snapshot/snapshot.go:265.34,268.3 2 0 +github.com/echovault/echovault/internal/snapshot/snapshot.go:271.2,272.58 2 1 +github.com/echovault/echovault/internal/snapshot/snapshot.go:272.58,274.3 1 0 +github.com/echovault/echovault/internal/snapshot/snapshot.go:277.2,278.16 2 1 +github.com/echovault/echovault/internal/snapshot/snapshot.go:278.16,281.3 2 0 +github.com/echovault/echovault/internal/snapshot/snapshot.go:282.2,282.15 1 1 +github.com/echovault/echovault/internal/snapshot/snapshot.go:282.15,283.35 1 1 +github.com/echovault/echovault/internal/snapshot/snapshot.go:283.35,285.4 1 0 +github.com/echovault/echovault/internal/snapshot/snapshot.go:289.2,289.39 1 1 +github.com/echovault/echovault/internal/snapshot/snapshot.go:289.39,291.3 1 0 +github.com/echovault/echovault/internal/snapshot/snapshot.go:292.2,292.32 1 1 +github.com/echovault/echovault/internal/snapshot/snapshot.go:292.32,294.3 1 0 +github.com/echovault/echovault/internal/snapshot/snapshot.go:297.2,302.12 3 1 +github.com/echovault/echovault/internal/snapshot/snapshot.go:305.39,307.50 2 1 +github.com/echovault/echovault/internal/snapshot/snapshot.go:307.50,309.3 1 0 +github.com/echovault/echovault/internal/snapshot/snapshot.go:310.2,310.16 1 1 +github.com/echovault/echovault/internal/snapshot/snapshot.go:310.16,312.3 1 0 +github.com/echovault/echovault/internal/snapshot/snapshot.go:314.2,317.16 3 1 +github.com/echovault/echovault/internal/snapshot/snapshot.go:317.16,319.3 1 0 +github.com/echovault/echovault/internal/snapshot/snapshot.go:321.2,321.52 1 1 +github.com/echovault/echovault/internal/snapshot/snapshot.go:321.52,323.3 1 0 +github.com/echovault/echovault/internal/snapshot/snapshot.go:325.2,325.46 1 1 +github.com/echovault/echovault/internal/snapshot/snapshot.go:325.46,327.3 1 0 +github.com/echovault/echovault/internal/snapshot/snapshot.go:329.2,334.50 2 1 +github.com/echovault/echovault/internal/snapshot/snapshot.go:334.50,336.3 1 0 +github.com/echovault/echovault/internal/snapshot/snapshot.go:337.2,337.16 1 1 +github.com/echovault/echovault/internal/snapshot/snapshot.go:337.16,339.3 1 0 +github.com/echovault/echovault/internal/snapshot/snapshot.go:341.2,342.16 2 1 +github.com/echovault/echovault/internal/snapshot/snapshot.go:342.16,344.3 1 0 +github.com/echovault/echovault/internal/snapshot/snapshot.go:346.2,348.58 2 1 +github.com/echovault/echovault/internal/snapshot/snapshot.go:348.58,350.3 1 0 +github.com/echovault/echovault/internal/snapshot/snapshot.go:352.2,354.94 2 1 +github.com/echovault/echovault/internal/snapshot/snapshot.go:354.94,356.3 1 1 +github.com/echovault/echovault/internal/snapshot/snapshot.go:358.2,360.12 2 1 +github.com/echovault/echovault/internal/snapshot/snapshot.go:363.46,365.2 1 0 +github.com/echovault/echovault/internal/snapshot/snapshot.go:367.42,369.2 1 1 +github.com/echovault/echovault/internal/modules/admin/commands.go:27.78,33.29 4 1 +github.com/echovault/echovault/internal/modules/admin/commands.go:33.29,34.54 1 1 +github.com/echovault/echovault/internal/modules/admin/commands.go:34.54,40.42 4 1 +github.com/echovault/echovault/internal/modules/admin/commands.go:40.42,42.5 1 1 +github.com/echovault/echovault/internal/modules/admin/commands.go:44.4,47.12 3 1 +github.com/echovault/echovault/internal/modules/admin/commands.go:50.3,50.36 1 1 +github.com/echovault/echovault/internal/modules/admin/commands.go:50.36,57.43 5 1 +github.com/echovault/echovault/internal/modules/admin/commands.go:57.43,59.5 1 1 +github.com/echovault/echovault/internal/modules/admin/commands.go:61.4,63.21 2 1 +github.com/echovault/echovault/internal/modules/admin/commands.go:67.2,69.25 2 1 +github.com/echovault/echovault/internal/modules/admin/commands.go:72.76,76.35 3 1 +github.com/echovault/echovault/internal/modules/admin/commands.go:76.35,77.65 1 1 +github.com/echovault/echovault/internal/modules/admin/commands.go:77.65,78.41 1 1 +github.com/echovault/echovault/internal/modules/admin/commands.go:78.41,80.5 1 1 +github.com/echovault/echovault/internal/modules/admin/commands.go:81.4,81.12 1 1 +github.com/echovault/echovault/internal/modules/admin/commands.go:83.3,83.13 1 1 +github.com/echovault/echovault/internal/modules/admin/commands.go:86.2,86.51 1 1 +github.com/echovault/echovault/internal/modules/admin/commands.go:89.75,90.29 1 1 +github.com/echovault/echovault/internal/modules/admin/commands.go:91.9,96.36 4 1 +github.com/echovault/echovault/internal/modules/admin/commands.go:96.36,97.66 1 1 +github.com/echovault/echovault/internal/modules/admin/commands.go:97.66,98.52 1 1 +github.com/echovault/echovault/internal/modules/admin/commands.go:98.52,102.6 3 1 +github.com/echovault/echovault/internal/modules/admin/commands.go:103.5,103.13 1 1 +github.com/echovault/echovault/internal/modules/admin/commands.go:105.4,106.14 2 1 +github.com/echovault/echovault/internal/modules/admin/commands.go:108.3,109.26 2 1 +github.com/echovault/echovault/internal/modules/admin/commands.go:111.9,115.56 3 1 +github.com/echovault/echovault/internal/modules/admin/commands.go:115.56,117.4 1 0 +github.com/echovault/echovault/internal/modules/admin/commands.go:118.3,118.53 1 1 +github.com/echovault/echovault/internal/modules/admin/commands.go:118.53,122.37 3 1 +github.com/echovault/echovault/internal/modules/admin/commands.go:122.37,123.67 1 1 +github.com/echovault/echovault/internal/modules/admin/commands.go:123.67,124.53 1 1 +github.com/echovault/echovault/internal/modules/admin/commands.go:124.53,125.59 1 1 +github.com/echovault/echovault/internal/modules/admin/commands.go:125.59,129.8 3 1 +github.com/echovault/echovault/internal/modules/admin/commands.go:131.6,131.14 1 1 +github.com/echovault/echovault/internal/modules/admin/commands.go:133.5,133.54 1 1 +github.com/echovault/echovault/internal/modules/admin/commands.go:133.54,136.6 2 1 +github.com/echovault/echovault/internal/modules/admin/commands.go:138.9,138.61 1 1 +github.com/echovault/echovault/internal/modules/admin/commands.go:138.61,142.37 3 1 +github.com/echovault/echovault/internal/modules/admin/commands.go:142.37,143.67 1 1 +github.com/echovault/echovault/internal/modules/admin/commands.go:143.67,144.53 1 1 +github.com/echovault/echovault/internal/modules/admin/commands.go:144.53,146.24 2 1 +github.com/echovault/echovault/internal/modules/admin/commands.go:146.24,149.8 2 0 +github.com/echovault/echovault/internal/modules/admin/commands.go:151.6,151.14 1 1 +github.com/echovault/echovault/internal/modules/admin/commands.go:153.5,153.33 1 1 +github.com/echovault/echovault/internal/modules/admin/commands.go:153.33,156.6 2 1 +github.com/echovault/echovault/internal/modules/admin/commands.go:158.9,158.60 1 1 +github.com/echovault/echovault/internal/modules/admin/commands.go:158.60,162.37 3 1 +github.com/echovault/echovault/internal/modules/admin/commands.go:162.37,163.67 1 1 +github.com/echovault/echovault/internal/modules/admin/commands.go:163.67,164.53 1 1 +github.com/echovault/echovault/internal/modules/admin/commands.go:164.53,165.55 1 1 +github.com/echovault/echovault/internal/modules/admin/commands.go:165.55,169.8 3 0 +github.com/echovault/echovault/internal/modules/admin/commands.go:171.6,171.14 1 1 +github.com/echovault/echovault/internal/modules/admin/commands.go:173.5,173.50 1 1 +github.com/echovault/echovault/internal/modules/admin/commands.go:173.50,176.6 2 1 +github.com/echovault/echovault/internal/modules/admin/commands.go:178.9,180.4 1 0 +github.com/echovault/echovault/internal/modules/admin/commands.go:181.3,182.26 2 1 +github.com/echovault/echovault/internal/modules/admin/commands.go:183.10,184.54 1 0 +github.com/echovault/echovault/internal/modules/admin/commands.go:188.75,190.2 1 0 +github.com/echovault/echovault/internal/modules/admin/commands.go:192.36,200.84 1 1 +github.com/echovault/echovault/internal/modules/admin/commands.go:200.84,204.5 1 1 +github.com/echovault/echovault/internal/modules/admin/commands.go:213.84,217.5 1 1 +github.com/echovault/echovault/internal/modules/admin/commands.go:225.86,229.7 1 0 +github.com/echovault/echovault/internal/modules/admin/commands.go:238.86,242.7 1 1 +github.com/echovault/echovault/internal/modules/admin/commands.go:252.86,256.7 1 1 +github.com/echovault/echovault/internal/modules/admin/commands.go:267.84,271.5 1 0 +github.com/echovault/echovault/internal/modules/admin/commands.go:272.73,273.49 1 0 +github.com/echovault/echovault/internal/modules/admin/commands.go:273.49,275.6 1 0 +github.com/echovault/echovault/internal/modules/admin/commands.go:276.5,276.45 1 0 +github.com/echovault/echovault/internal/modules/admin/commands.go:285.84,289.5 1 0 +github.com/echovault/echovault/internal/modules/admin/commands.go:290.73,292.18 2 0 +github.com/echovault/echovault/internal/modules/admin/commands.go:292.18,294.6 1 0 +github.com/echovault/echovault/internal/modules/admin/commands.go:295.5,295.53 1 0 +github.com/echovault/echovault/internal/modules/admin/commands.go:304.84,308.5 1 0 +github.com/echovault/echovault/internal/modules/admin/commands.go:309.73,310.47 1 0 +github.com/echovault/echovault/internal/modules/admin/commands.go:310.47,312.6 1 0 +github.com/echovault/echovault/internal/modules/admin/commands.go:313.5,313.45 1 0 +github.com/echovault/echovault/internal/modules/admin/commands.go:321.84,325.5 1 1 +github.com/echovault/echovault/internal/modules/admin/commands.go:335.86,339.7 1 1 +github.com/echovault/echovault/internal/modules/admin/commands.go:340.75,341.34 1 1 +github.com/echovault/echovault/internal/modules/admin/commands.go:341.34,343.8 1 0 +github.com/echovault/echovault/internal/modules/admin/commands.go:344.7,345.34 2 1 +github.com/echovault/echovault/internal/modules/admin/commands.go:345.34,347.8 1 1 +github.com/echovault/echovault/internal/modules/admin/commands.go:348.7,348.75 1 1 +github.com/echovault/echovault/internal/modules/admin/commands.go:348.75,350.8 1 0 +github.com/echovault/echovault/internal/modules/admin/commands.go:351.7,351.47 1 1 +github.com/echovault/echovault/internal/modules/admin/commands.go:361.86,365.7 1 1 +github.com/echovault/echovault/internal/modules/admin/commands.go:366.75,367.35 1 1 +github.com/echovault/echovault/internal/modules/admin/commands.go:367.35,369.8 1 0 +github.com/echovault/echovault/internal/modules/admin/commands.go:370.7,371.47 2 1 +github.com/echovault/echovault/internal/modules/admin/commands.go:380.86,384.7 1 1 +github.com/echovault/echovault/internal/modules/admin/commands.go:385.75,388.38 3 1 +github.com/echovault/echovault/internal/modules/admin/commands.go:388.38,390.8 1 1 +github.com/echovault/echovault/internal/modules/admin/commands.go:391.7,391.30 1 1 +github.com/echovault/echovault/internal/modules/string/commands.go:24.72,26.16 2 1 +github.com/echovault/echovault/internal/modules/string/commands.go:26.16,28.3 1 0 +github.com/echovault/echovault/internal/modules/string/commands.go:30.2,34.9 4 1 +github.com/echovault/echovault/internal/modules/string/commands.go:34.9,36.3 1 1 +github.com/echovault/echovault/internal/modules/string/commands.go:38.2,40.16 2 1 +github.com/echovault/echovault/internal/modules/string/commands.go:40.16,42.3 1 1 +github.com/echovault/echovault/internal/modules/string/commands.go:44.2,45.9 2 1 +github.com/echovault/echovault/internal/modules/string/commands.go:45.9,47.3 1 1 +github.com/echovault/echovault/internal/modules/string/commands.go:50.2,50.24 1 1 +github.com/echovault/echovault/internal/modules/string/commands.go:50.24,52.94 2 1 +github.com/echovault/echovault/internal/modules/string/commands.go:52.94,54.4 1 0 +github.com/echovault/echovault/internal/modules/string/commands.go:55.3,55.58 1 1 +github.com/echovault/echovault/internal/modules/string/commands.go:59.2,59.16 1 1 +github.com/echovault/echovault/internal/modules/string/commands.go:59.16,61.94 2 1 +github.com/echovault/echovault/internal/modules/string/commands.go:61.94,63.4 1 0 +github.com/echovault/echovault/internal/modules/string/commands.go:64.3,64.58 1 1 +github.com/echovault/echovault/internal/modules/string/commands.go:67.2,69.35 2 1 +github.com/echovault/echovault/internal/modules/string/commands.go:69.35,71.24 1 1 +github.com/echovault/echovault/internal/modules/string/commands.go:71.24,74.12 3 1 +github.com/echovault/echovault/internal/modules/string/commands.go:77.3,78.8 2 1 +github.com/echovault/echovault/internal/modules/string/commands.go:81.2,81.103 1 1 +github.com/echovault/echovault/internal/modules/string/commands.go:81.103,83.3 1 0 +github.com/echovault/echovault/internal/modules/string/commands.go:85.2,85.59 1 1 +github.com/echovault/echovault/internal/modules/string/commands.go:88.70,90.16 2 1 +github.com/echovault/echovault/internal/modules/string/commands.go:90.16,92.3 1 0 +github.com/echovault/echovault/internal/modules/string/commands.go:94.2,97.16 3 1 +github.com/echovault/echovault/internal/modules/string/commands.go:97.16,99.3 1 1 +github.com/echovault/echovault/internal/modules/string/commands.go:101.2,103.9 2 1 +github.com/echovault/echovault/internal/modules/string/commands.go:103.9,105.3 1 0 +github.com/echovault/echovault/internal/modules/string/commands.go:107.2,107.56 1 1 +github.com/echovault/echovault/internal/modules/string/commands.go:110.70,112.16 2 1 +github.com/echovault/echovault/internal/modules/string/commands.go:112.16,114.3 1 0 +github.com/echovault/echovault/internal/modules/string/commands.go:116.2,123.24 6 1 +github.com/echovault/echovault/internal/modules/string/commands.go:123.24,125.3 1 1 +github.com/echovault/echovault/internal/modules/string/commands.go:127.2,127.16 1 1 +github.com/echovault/echovault/internal/modules/string/commands.go:127.16,129.3 1 1 +github.com/echovault/echovault/internal/modules/string/commands.go:131.2,132.9 2 1 +github.com/echovault/echovault/internal/modules/string/commands.go:132.9,134.3 1 0 +github.com/echovault/echovault/internal/modules/string/commands.go:136.2,136.15 1 1 +github.com/echovault/echovault/internal/modules/string/commands.go:136.15,138.3 1 1 +github.com/echovault/echovault/internal/modules/string/commands.go:139.2,139.13 1 1 +github.com/echovault/echovault/internal/modules/string/commands.go:139.13,141.3 1 0 +github.com/echovault/echovault/internal/modules/string/commands.go:143.2,143.30 1 1 +github.com/echovault/echovault/internal/modules/string/commands.go:143.30,145.3 1 1 +github.com/echovault/echovault/internal/modules/string/commands.go:147.2,147.22 1 1 +github.com/echovault/echovault/internal/modules/string/commands.go:147.22,149.3 1 1 +github.com/echovault/echovault/internal/modules/string/commands.go:151.2,151.17 1 1 +github.com/echovault/echovault/internal/modules/string/commands.go:151.17,154.3 2 1 +github.com/echovault/echovault/internal/modules/string/commands.go:156.2,158.14 2 1 +github.com/echovault/echovault/internal/modules/string/commands.go:158.14,160.38 2 1 +github.com/echovault/echovault/internal/modules/string/commands.go:160.38,162.4 1 1 +github.com/echovault/echovault/internal/modules/string/commands.go:163.3,163.12 1 1 +github.com/echovault/echovault/internal/modules/string/commands.go:166.2,166.65 1 1 +github.com/echovault/echovault/internal/modules/string/commands.go:169.36,209.2 1 1 +github.com/echovault/echovault/internal/modules/string/key_funcs.go:23.78,24.19 1 1 +github.com/echovault/echovault/internal/modules/string/key_funcs.go:24.19,26.3 1 1 +github.com/echovault/echovault/internal/modules/string/key_funcs.go:27.2,31.8 1 1 +github.com/echovault/echovault/internal/modules/string/key_funcs.go:34.76,35.19 1 1 +github.com/echovault/echovault/internal/modules/string/key_funcs.go:35.19,37.3 1 1 +github.com/echovault/echovault/internal/modules/string/key_funcs.go:38.2,42.8 1 1 +github.com/echovault/echovault/internal/modules/string/key_funcs.go:45.76,46.19 1 1 +github.com/echovault/echovault/internal/modules/string/key_funcs.go:46.19,48.3 1 1 +github.com/echovault/echovault/internal/modules/string/key_funcs.go:49.2,53.8 1 1 github.com/echovault/echovault/internal/modules/set/commands.go:26.68,28.16 2 1 github.com/echovault/echovault/internal/modules/set/commands.go:28.16,30.3 1 0 github.com/echovault/echovault/internal/modules/set/commands.go:32.2,37.16 4 1 @@ -1809,69 +1430,6 @@ github.com/echovault/echovault/internal/modules/set/set.go:184.31,185.19 1 1 github.com/echovault/echovault/internal/modules/set/set.go:186.9,187.17 1 1 github.com/echovault/echovault/internal/modules/set/set.go:188.9,191.15 3 1 github.com/echovault/echovault/internal/modules/set/set.go:192.10,195.28 3 1 -github.com/echovault/echovault/internal/modules/string/commands.go:24.72,26.16 2 1 -github.com/echovault/echovault/internal/modules/string/commands.go:26.16,28.3 1 0 -github.com/echovault/echovault/internal/modules/string/commands.go:30.2,34.9 4 1 -github.com/echovault/echovault/internal/modules/string/commands.go:34.9,36.3 1 1 -github.com/echovault/echovault/internal/modules/string/commands.go:38.2,40.16 2 1 -github.com/echovault/echovault/internal/modules/string/commands.go:40.16,42.3 1 1 -github.com/echovault/echovault/internal/modules/string/commands.go:44.2,45.9 2 1 -github.com/echovault/echovault/internal/modules/string/commands.go:45.9,47.3 1 1 -github.com/echovault/echovault/internal/modules/string/commands.go:50.2,50.24 1 1 -github.com/echovault/echovault/internal/modules/string/commands.go:50.24,52.94 2 1 -github.com/echovault/echovault/internal/modules/string/commands.go:52.94,54.4 1 0 -github.com/echovault/echovault/internal/modules/string/commands.go:55.3,55.58 1 1 -github.com/echovault/echovault/internal/modules/string/commands.go:59.2,59.16 1 1 -github.com/echovault/echovault/internal/modules/string/commands.go:59.16,61.94 2 1 -github.com/echovault/echovault/internal/modules/string/commands.go:61.94,63.4 1 0 -github.com/echovault/echovault/internal/modules/string/commands.go:64.3,64.58 1 1 -github.com/echovault/echovault/internal/modules/string/commands.go:67.2,69.35 2 1 -github.com/echovault/echovault/internal/modules/string/commands.go:69.35,71.24 1 1 -github.com/echovault/echovault/internal/modules/string/commands.go:71.24,74.12 3 1 -github.com/echovault/echovault/internal/modules/string/commands.go:77.3,78.8 2 1 -github.com/echovault/echovault/internal/modules/string/commands.go:81.2,81.103 1 1 -github.com/echovault/echovault/internal/modules/string/commands.go:81.103,83.3 1 0 -github.com/echovault/echovault/internal/modules/string/commands.go:85.2,85.59 1 1 -github.com/echovault/echovault/internal/modules/string/commands.go:88.70,90.16 2 1 -github.com/echovault/echovault/internal/modules/string/commands.go:90.16,92.3 1 0 -github.com/echovault/echovault/internal/modules/string/commands.go:94.2,97.16 3 1 -github.com/echovault/echovault/internal/modules/string/commands.go:97.16,99.3 1 1 -github.com/echovault/echovault/internal/modules/string/commands.go:101.2,103.9 2 1 -github.com/echovault/echovault/internal/modules/string/commands.go:103.9,105.3 1 0 -github.com/echovault/echovault/internal/modules/string/commands.go:107.2,107.56 1 1 -github.com/echovault/echovault/internal/modules/string/commands.go:110.70,112.16 2 1 -github.com/echovault/echovault/internal/modules/string/commands.go:112.16,114.3 1 0 -github.com/echovault/echovault/internal/modules/string/commands.go:116.2,123.24 6 1 -github.com/echovault/echovault/internal/modules/string/commands.go:123.24,125.3 1 1 -github.com/echovault/echovault/internal/modules/string/commands.go:127.2,127.16 1 1 -github.com/echovault/echovault/internal/modules/string/commands.go:127.16,129.3 1 1 -github.com/echovault/echovault/internal/modules/string/commands.go:131.2,132.9 2 1 -github.com/echovault/echovault/internal/modules/string/commands.go:132.9,134.3 1 0 -github.com/echovault/echovault/internal/modules/string/commands.go:136.2,136.15 1 1 -github.com/echovault/echovault/internal/modules/string/commands.go:136.15,138.3 1 1 -github.com/echovault/echovault/internal/modules/string/commands.go:139.2,139.13 1 1 -github.com/echovault/echovault/internal/modules/string/commands.go:139.13,141.3 1 0 -github.com/echovault/echovault/internal/modules/string/commands.go:143.2,143.30 1 1 -github.com/echovault/echovault/internal/modules/string/commands.go:143.30,145.3 1 1 -github.com/echovault/echovault/internal/modules/string/commands.go:147.2,147.22 1 1 -github.com/echovault/echovault/internal/modules/string/commands.go:147.22,149.3 1 1 -github.com/echovault/echovault/internal/modules/string/commands.go:151.2,151.17 1 1 -github.com/echovault/echovault/internal/modules/string/commands.go:151.17,154.3 2 1 -github.com/echovault/echovault/internal/modules/string/commands.go:156.2,158.14 2 1 -github.com/echovault/echovault/internal/modules/string/commands.go:158.14,160.38 2 1 -github.com/echovault/echovault/internal/modules/string/commands.go:160.38,162.4 1 1 -github.com/echovault/echovault/internal/modules/string/commands.go:163.3,163.12 1 1 -github.com/echovault/echovault/internal/modules/string/commands.go:166.2,166.65 1 1 -github.com/echovault/echovault/internal/modules/string/commands.go:169.36,209.2 1 1 -github.com/echovault/echovault/internal/modules/string/key_funcs.go:23.78,24.19 1 1 -github.com/echovault/echovault/internal/modules/string/key_funcs.go:24.19,26.3 1 1 -github.com/echovault/echovault/internal/modules/string/key_funcs.go:27.2,31.8 1 1 -github.com/echovault/echovault/internal/modules/string/key_funcs.go:34.76,35.19 1 1 -github.com/echovault/echovault/internal/modules/string/key_funcs.go:35.19,37.3 1 1 -github.com/echovault/echovault/internal/modules/string/key_funcs.go:38.2,42.8 1 1 -github.com/echovault/echovault/internal/modules/string/key_funcs.go:45.76,46.19 1 1 -github.com/echovault/echovault/internal/modules/string/key_funcs.go:46.19,48.3 1 1 -github.com/echovault/echovault/internal/modules/string/key_funcs.go:49.2,53.8 1 1 github.com/echovault/echovault/internal/modules/sorted_set/commands.go:29.68,31.16 2 1 github.com/echovault/echovault/internal/modules/sorted_set/commands.go:31.16,33.3 1 0 github.com/echovault/echovault/internal/modules/sorted_set/commands.go:35.2,45.43 8 1 @@ -2695,6 +2253,458 @@ github.com/echovault/echovault/internal/modules/sorted_set/utils.go:162.3,162.13 github.com/echovault/echovault/internal/modules/sorted_set/utils.go:163.12,164.16 1 1 github.com/echovault/echovault/internal/modules/sorted_set/utils.go:164.16,166.4 1 1 github.com/echovault/echovault/internal/modules/sorted_set/utils.go:167.3,167.13 1 1 +github.com/echovault/echovault/internal/modules/acl/acl.go:53.62,54.20 1 1 +github.com/echovault/echovault/internal/modules/acl/acl.go:54.20,56.70 1 1 +github.com/echovault/echovault/internal/modules/acl/acl.go:56.70,59.4 2 0 +github.com/echovault/echovault/internal/modules/acl/acl.go:61.3,62.17 2 1 +github.com/echovault/echovault/internal/modules/acl/acl.go:62.17,65.4 2 0 +github.com/echovault/echovault/internal/modules/acl/acl.go:67.3,67.16 1 1 +github.com/echovault/echovault/internal/modules/acl/acl.go:67.16,68.36 1 1 +github.com/echovault/echovault/internal/modules/acl/acl.go:68.36,70.5 1 0 +github.com/echovault/echovault/internal/modules/acl/acl.go:73.3,75.38 2 1 +github.com/echovault/echovault/internal/modules/acl/acl.go:75.38,76.60 1 0 +github.com/echovault/echovault/internal/modules/acl/acl.go:76.60,79.5 2 0 +github.com/echovault/echovault/internal/modules/acl/acl.go:82.3,82.71 1 1 +github.com/echovault/echovault/internal/modules/acl/acl.go:82.71,83.60 1 1 +github.com/echovault/echovault/internal/modules/acl/acl.go:83.60,86.5 2 1 +github.com/echovault/echovault/internal/modules/acl/acl.go:92.40,97.24 3 1 +github.com/echovault/echovault/internal/modules/acl/acl.go:97.24,105.3 2 1 +github.com/echovault/echovault/internal/modules/acl/acl.go:108.2,112.29 3 1 +github.com/echovault/echovault/internal/modules/acl/acl.go:112.29,113.33 1 0 +github.com/echovault/echovault/internal/modules/acl/acl.go:113.33,115.9 2 0 +github.com/echovault/echovault/internal/modules/acl/acl.go:118.2,118.20 1 1 +github.com/echovault/echovault/internal/modules/acl/acl.go:118.20,120.3 1 1 +github.com/echovault/echovault/internal/modules/acl/acl.go:123.2,123.29 1 1 +github.com/echovault/echovault/internal/modules/acl/acl.go:123.29,125.3 1 1 +github.com/echovault/echovault/internal/modules/acl/acl.go:127.2,137.13 3 1 +github.com/echovault/echovault/internal/modules/acl/acl.go:140.52,145.70 3 1 +github.com/echovault/echovault/internal/modules/acl/acl.go:145.70,147.3 1 1 +github.com/echovault/echovault/internal/modules/acl/acl.go:148.2,152.3 2 1 +github.com/echovault/echovault/internal/modules/acl/acl.go:155.45,161.33 3 1 +github.com/echovault/echovault/internal/modules/acl/acl.go:161.33,162.30 1 1 +github.com/echovault/echovault/internal/modules/acl/acl.go:162.30,163.47 1 1 +github.com/echovault/echovault/internal/modules/acl/acl.go:163.47,165.5 1 0 +github.com/echovault/echovault/internal/modules/acl/acl.go:165.10,168.5 2 1 +github.com/echovault/echovault/internal/modules/acl/acl.go:172.2,173.45 2 1 +github.com/echovault/echovault/internal/modules/acl/acl.go:173.45,175.3 1 0 +github.com/echovault/echovault/internal/modules/acl/acl.go:177.2,184.12 4 1 +github.com/echovault/echovault/internal/modules/acl/acl.go:187.73,192.37 4 1 +github.com/echovault/echovault/internal/modules/acl/acl.go:192.37,193.28 1 1 +github.com/echovault/echovault/internal/modules/acl/acl.go:193.28,195.12 1 1 +github.com/echovault/echovault/internal/modules/acl/acl.go:198.3,198.31 1 1 +github.com/echovault/echovault/internal/modules/acl/acl.go:198.31,199.30 1 1 +github.com/echovault/echovault/internal/modules/acl/acl.go:199.30,201.5 1 1 +github.com/echovault/echovault/internal/modules/acl/acl.go:204.3,204.18 1 1 +github.com/echovault/echovault/internal/modules/acl/acl.go:204.18,205.12 1 0 +github.com/echovault/echovault/internal/modules/acl/acl.go:208.3,208.52 1 1 +github.com/echovault/echovault/internal/modules/acl/acl.go:208.52,209.49 1 1 +github.com/echovault/echovault/internal/modules/acl/acl.go:209.49,211.5 1 0 +github.com/echovault/echovault/internal/modules/acl/acl.go:214.3,214.63 1 1 +github.com/echovault/echovault/internal/modules/acl/acl.go:214.63,216.4 1 1 +github.com/echovault/echovault/internal/modules/acl/acl.go:218.2,218.12 1 1 +github.com/echovault/echovault/internal/modules/acl/acl.go:221.95,225.19 3 1 +github.com/echovault/echovault/internal/modules/acl/acl.go:225.19,234.60 4 1 +github.com/echovault/echovault/internal/modules/acl/acl.go:234.60,236.4 1 1 +github.com/echovault/echovault/internal/modules/acl/acl.go:237.3,237.24 1 1 +github.com/echovault/echovault/internal/modules/acl/acl.go:240.2,240.19 1 1 +github.com/echovault/echovault/internal/modules/acl/acl.go:240.19,250.31 5 1 +github.com/echovault/echovault/internal/modules/acl/acl.go:250.31,251.28 1 1 +github.com/echovault/echovault/internal/modules/acl/acl.go:251.28,254.10 3 1 +github.com/echovault/echovault/internal/modules/acl/acl.go:257.3,257.17 1 1 +github.com/echovault/echovault/internal/modules/acl/acl.go:257.17,259.4 1 1 +github.com/echovault/echovault/internal/modules/acl/acl.go:263.2,263.19 1 1 +github.com/echovault/echovault/internal/modules/acl/acl.go:263.19,265.3 1 1 +github.com/echovault/echovault/internal/modules/acl/acl.go:268.2,268.21 1 1 +github.com/echovault/echovault/internal/modules/acl/acl.go:268.21,274.3 2 1 +github.com/echovault/echovault/internal/modules/acl/acl.go:276.2,276.46 1 1 +github.com/echovault/echovault/internal/modules/acl/acl.go:276.46,277.38 1 1 +github.com/echovault/echovault/internal/modules/acl/acl.go:277.38,280.18 1 1 +github.com/echovault/echovault/internal/modules/acl/acl.go:280.18,287.5 2 1 +github.com/echovault/echovault/internal/modules/acl/acl.go:291.2,291.50 1 1 +github.com/echovault/echovault/internal/modules/acl/acl.go:294.131,303.16 6 1 +github.com/echovault/echovault/internal/modules/acl/acl.go:303.16,305.3 1 0 +github.com/echovault/echovault/internal/modules/acl/acl.go:307.2,311.59 4 1 +github.com/echovault/echovault/internal/modules/acl/acl.go:311.59,315.17 4 1 +github.com/echovault/echovault/internal/modules/acl/acl.go:315.17,317.4 1 0 +github.com/echovault/echovault/internal/modules/acl/acl.go:321.2,321.36 1 1 +github.com/echovault/echovault/internal/modules/acl/acl.go:321.36,323.3 1 0 +github.com/echovault/echovault/internal/modules/acl/acl.go:326.2,326.37 1 1 +github.com/echovault/echovault/internal/modules/acl/acl.go:326.37,328.3 1 0 +github.com/echovault/echovault/internal/modules/acl/acl.go:331.2,331.37 1 1 +github.com/echovault/echovault/internal/modules/acl/acl.go:331.37,333.3 1 1 +github.com/echovault/echovault/internal/modules/acl/acl.go:336.2,339.29 2 1 +github.com/echovault/echovault/internal/modules/acl/acl.go:339.29,341.3 1 1 +github.com/echovault/echovault/internal/modules/acl/acl.go:344.2,344.57 1 1 +github.com/echovault/echovault/internal/modules/acl/acl.go:344.57,346.3 1 1 +github.com/echovault/echovault/internal/modules/acl/acl.go:348.2,352.63 3 1 +github.com/echovault/echovault/internal/modules/acl/acl.go:352.63,353.39 1 1 +github.com/echovault/echovault/internal/modules/acl/acl.go:353.39,355.4 1 1 +github.com/echovault/echovault/internal/modules/acl/acl.go:356.3,356.63 1 1 +github.com/echovault/echovault/internal/modules/acl/acl.go:356.63,357.36 1 1 +github.com/echovault/echovault/internal/modules/acl/acl.go:357.36,359.5 1 1 +github.com/echovault/echovault/internal/modules/acl/acl.go:361.3,362.26 2 1 +github.com/echovault/echovault/internal/modules/acl/acl.go:362.26,364.4 1 1 +github.com/echovault/echovault/internal/modules/acl/acl.go:368.2,368.64 1 1 +github.com/echovault/echovault/internal/modules/acl/acl.go:368.64,369.101 1 1 +github.com/echovault/echovault/internal/modules/acl/acl.go:369.101,370.63 1 1 +github.com/echovault/echovault/internal/modules/acl/acl.go:370.63,373.5 2 1 +github.com/echovault/echovault/internal/modules/acl/acl.go:374.4,374.16 1 1 +github.com/echovault/echovault/internal/modules/acl/acl.go:376.5,378.3 1 1 +github.com/echovault/echovault/internal/modules/acl/acl.go:381.2,381.94 1 1 +github.com/echovault/echovault/internal/modules/acl/acl.go:381.94,383.3 1 1 +github.com/echovault/echovault/internal/modules/acl/acl.go:383.5,385.3 1 1 +github.com/echovault/echovault/internal/modules/acl/acl.go:388.2,388.93 1 1 +github.com/echovault/echovault/internal/modules/acl/acl.go:388.93,390.3 1 1 +github.com/echovault/echovault/internal/modules/acl/acl.go:390.5,392.3 1 1 +github.com/echovault/echovault/internal/modules/acl/acl.go:395.2,395.59 1 1 +github.com/echovault/echovault/internal/modules/acl/acl.go:395.59,397.36 1 1 +github.com/echovault/echovault/internal/modules/acl/acl.go:397.36,399.106 1 1 +github.com/echovault/echovault/internal/modules/acl/acl.go:399.106,401.5 1 1 +github.com/echovault/echovault/internal/modules/acl/acl.go:401.7,403.5 1 1 +github.com/echovault/echovault/internal/modules/acl/acl.go:405.4,405.105 1 1 +github.com/echovault/echovault/internal/modules/acl/acl.go:405.105,407.5 1 1 +github.com/echovault/echovault/internal/modules/acl/acl.go:407.7,409.5 1 1 +github.com/echovault/echovault/internal/modules/acl/acl.go:411.3,411.13 1 0 +github.com/echovault/echovault/internal/modules/acl/acl.go:414.2,414.45 1 1 +github.com/echovault/echovault/internal/modules/acl/acl.go:414.45,416.29 1 1 +github.com/echovault/echovault/internal/modules/acl/acl.go:416.29,418.4 1 1 +github.com/echovault/echovault/internal/modules/acl/acl.go:421.3,421.59 1 1 +github.com/echovault/echovault/internal/modules/acl/acl.go:421.59,422.95 1 1 +github.com/echovault/echovault/internal/modules/acl/acl.go:422.95,423.49 1 1 +github.com/echovault/echovault/internal/modules/acl/acl.go:423.49,425.6 1 0 +github.com/echovault/echovault/internal/modules/acl/acl.go:426.5,426.70 1 1 +github.com/echovault/echovault/internal/modules/acl/acl.go:426.70,428.6 1 1 +github.com/echovault/echovault/internal/modules/acl/acl.go:429.5,429.17 1 1 +github.com/echovault/echovault/internal/modules/acl/acl.go:431.6,432.27 1 1 +github.com/echovault/echovault/internal/modules/acl/acl.go:432.27,434.5 1 1 +github.com/echovault/echovault/internal/modules/acl/acl.go:438.3,440.60 3 1 +github.com/echovault/echovault/internal/modules/acl/acl.go:440.60,441.97 1 1 +github.com/echovault/echovault/internal/modules/acl/acl.go:441.97,442.50 1 1 +github.com/echovault/echovault/internal/modules/acl/acl.go:442.50,444.6 1 0 +github.com/echovault/echovault/internal/modules/acl/acl.go:445.5,445.70 1 1 +github.com/echovault/echovault/internal/modules/acl/acl.go:445.70,447.6 1 1 +github.com/echovault/echovault/internal/modules/acl/acl.go:448.5,448.17 1 1 +github.com/echovault/echovault/internal/modules/acl/acl.go:450.6,452.4 1 1 +github.com/echovault/echovault/internal/modules/acl/acl.go:455.2,455.12 1 1 +github.com/echovault/echovault/internal/modules/acl/acl.go:458.32,462.33 3 1 +github.com/echovault/echovault/internal/modules/acl/acl.go:462.33,467.31 5 1 +github.com/echovault/echovault/internal/modules/acl/acl.go:467.31,468.37 1 1 +github.com/echovault/echovault/internal/modules/acl/acl.go:468.37,470.5 1 1 +github.com/echovault/echovault/internal/modules/acl/acl.go:472.3,472.25 1 1 +github.com/echovault/echovault/internal/modules/acl/acl.go:475.2,475.29 1 1 +github.com/echovault/echovault/internal/modules/acl/acl.go:475.29,476.33 1 1 +github.com/echovault/echovault/internal/modules/acl/acl.go:476.33,478.4 1 1 +github.com/echovault/echovault/internal/modules/acl/acl.go:482.29,484.2 1 1 +github.com/echovault/echovault/internal/modules/acl/acl.go:486.31,488.2 1 1 +github.com/echovault/echovault/internal/modules/acl/acl.go:490.30,492.2 1 1 +github.com/echovault/echovault/internal/modules/acl/acl.go:494.32,496.2 1 1 +github.com/echovault/echovault/internal/modules/acl/acl.go:498.68,500.31 2 1 +github.com/echovault/echovault/internal/modules/acl/acl.go:500.31,501.13 1 1 +github.com/echovault/echovault/internal/modules/acl/acl.go:501.13,503.4 1 1 +github.com/echovault/echovault/internal/modules/acl/acl.go:506.2,506.58 1 1 +github.com/echovault/echovault/internal/modules/acl/acl.go:506.58,508.3 1 1 +github.com/echovault/echovault/internal/modules/acl/acl.go:509.2,509.19 1 1 +github.com/echovault/echovault/internal/modules/acl/commands.go:31.68,32.56 1 1 +github.com/echovault/echovault/internal/modules/acl/commands.go:32.56,34.3 1 1 +github.com/echovault/echovault/internal/modules/acl/commands.go:35.2,36.9 2 1 +github.com/echovault/echovault/internal/modules/acl/commands.go:36.9,38.3 1 0 +github.com/echovault/echovault/internal/modules/acl/commands.go:39.2,42.102 3 1 +github.com/echovault/echovault/internal/modules/acl/commands.go:42.102,44.3 1 1 +github.com/echovault/echovault/internal/modules/acl/commands.go:45.2,45.42 1 1 +github.com/echovault/echovault/internal/modules/acl/commands.go:48.67,49.29 1 1 +github.com/echovault/echovault/internal/modules/acl/commands.go:49.29,51.3 1 1 +github.com/echovault/echovault/internal/modules/acl/commands.go:53.2,57.35 3 1 +github.com/echovault/echovault/internal/modules/acl/commands.go:57.35,58.36 1 1 +github.com/echovault/echovault/internal/modules/acl/commands.go:58.36,59.48 1 1 +github.com/echovault/echovault/internal/modules/acl/commands.go:59.48,61.5 1 1 +github.com/echovault/echovault/internal/modules/acl/commands.go:62.4,62.12 1 1 +github.com/echovault/echovault/internal/modules/acl/commands.go:64.3,64.50 1 1 +github.com/echovault/echovault/internal/modules/acl/commands.go:64.50,65.51 1 1 +github.com/echovault/echovault/internal/modules/acl/commands.go:65.51,68.5 1 1 +github.com/echovault/echovault/internal/modules/acl/commands.go:72.2,72.30 1 1 +github.com/echovault/echovault/internal/modules/acl/commands.go:72.30,75.34 3 1 +github.com/echovault/echovault/internal/modules/acl/commands.go:75.34,78.4 2 1 +github.com/echovault/echovault/internal/modules/acl/commands.go:79.3,80.28 2 1 +github.com/echovault/echovault/internal/modules/acl/commands.go:80.28,82.24 2 1 +github.com/echovault/echovault/internal/modules/acl/commands.go:82.24,84.5 1 1 +github.com/echovault/echovault/internal/modules/acl/commands.go:86.3,86.26 1 1 +github.com/echovault/echovault/internal/modules/acl/commands.go:89.2,89.30 1 1 +github.com/echovault/echovault/internal/modules/acl/commands.go:89.30,91.46 2 1 +github.com/echovault/echovault/internal/modules/acl/commands.go:91.46,92.54 1 1 +github.com/echovault/echovault/internal/modules/acl/commands.go:92.54,94.38 2 1 +github.com/echovault/echovault/internal/modules/acl/commands.go:94.38,96.30 2 1 +github.com/echovault/echovault/internal/modules/acl/commands.go:96.30,98.7 1 1 +github.com/echovault/echovault/internal/modules/acl/commands.go:100.5,100.28 1 1 +github.com/echovault/echovault/internal/modules/acl/commands.go:105.2,105.85 1 1 +github.com/echovault/echovault/internal/modules/acl/commands.go:108.71,109.30 1 1 +github.com/echovault/echovault/internal/modules/acl/commands.go:109.30,111.3 1 0 +github.com/echovault/echovault/internal/modules/acl/commands.go:113.2,114.9 2 1 +github.com/echovault/echovault/internal/modules/acl/commands.go:114.9,116.3 1 0 +github.com/echovault/echovault/internal/modules/acl/commands.go:117.2,122.30 5 1 +github.com/echovault/echovault/internal/modules/acl/commands.go:122.30,123.38 1 1 +github.com/echovault/echovault/internal/modules/acl/commands.go:123.38,126.9 3 1 +github.com/echovault/echovault/internal/modules/acl/commands.go:130.2,130.16 1 1 +github.com/echovault/echovault/internal/modules/acl/commands.go:130.16,132.3 1 1 +github.com/echovault/echovault/internal/modules/acl/commands.go:135.2,139.18 3 1 +github.com/echovault/echovault/internal/modules/acl/commands.go:139.18,141.3 1 1 +github.com/echovault/echovault/internal/modules/acl/commands.go:141.8,143.3 1 1 +github.com/echovault/echovault/internal/modules/acl/commands.go:144.2,144.21 1 1 +github.com/echovault/echovault/internal/modules/acl/commands.go:144.21,146.3 1 1 +github.com/echovault/echovault/internal/modules/acl/commands.go:147.2,147.17 1 1 +github.com/echovault/echovault/internal/modules/acl/commands.go:147.17,149.3 1 1 +github.com/echovault/echovault/internal/modules/acl/commands.go:151.2,152.29 2 1 +github.com/echovault/echovault/internal/modules/acl/commands.go:152.29,154.3 1 1 +github.com/echovault/echovault/internal/modules/acl/commands.go:157.2,158.51 2 1 +github.com/echovault/echovault/internal/modules/acl/commands.go:158.51,159.22 1 1 +github.com/echovault/echovault/internal/modules/acl/commands.go:159.22,161.12 2 1 +github.com/echovault/echovault/internal/modules/acl/commands.go:163.3,163.49 1 1 +github.com/echovault/echovault/internal/modules/acl/commands.go:165.2,165.51 1 1 +github.com/echovault/echovault/internal/modules/acl/commands.go:165.51,166.22 1 1 +github.com/echovault/echovault/internal/modules/acl/commands.go:166.22,168.12 2 1 +github.com/echovault/echovault/internal/modules/acl/commands.go:170.3,170.49 1 1 +github.com/echovault/echovault/internal/modules/acl/commands.go:174.2,175.48 2 1 +github.com/echovault/echovault/internal/modules/acl/commands.go:175.48,176.21 1 1 +github.com/echovault/echovault/internal/modules/acl/commands.go:176.21,178.12 2 1 +github.com/echovault/echovault/internal/modules/acl/commands.go:180.3,180.47 1 1 +github.com/echovault/echovault/internal/modules/acl/commands.go:182.2,182.48 1 1 +github.com/echovault/echovault/internal/modules/acl/commands.go:182.48,183.21 1 1 +github.com/echovault/echovault/internal/modules/acl/commands.go:183.21,185.12 2 1 +github.com/echovault/echovault/internal/modules/acl/commands.go:187.3,187.47 1 1 +github.com/echovault/echovault/internal/modules/acl/commands.go:191.2,192.79 2 1 +github.com/echovault/echovault/internal/modules/acl/commands.go:192.79,193.37 1 1 +github.com/echovault/echovault/internal/modules/acl/commands.go:193.37,195.4 1 1 +github.com/echovault/echovault/internal/modules/acl/commands.go:197.2,198.30 2 1 +github.com/echovault/echovault/internal/modules/acl/commands.go:198.30,199.10 1 1 +github.com/echovault/echovault/internal/modules/acl/commands.go:200.100,202.53 1 1 +github.com/echovault/echovault/internal/modules/acl/commands.go:203.53,205.52 1 1 +github.com/echovault/echovault/internal/modules/acl/commands.go:206.52,208.52 1 1 +github.com/echovault/echovault/internal/modules/acl/commands.go:213.2,215.54 2 1 +github.com/echovault/echovault/internal/modules/acl/commands.go:215.54,217.3 1 1 +github.com/echovault/echovault/internal/modules/acl/commands.go:218.2,218.54 1 1 +github.com/echovault/echovault/internal/modules/acl/commands.go:218.54,220.3 1 1 +github.com/echovault/echovault/internal/modules/acl/commands.go:222.2,224.25 2 1 +github.com/echovault/echovault/internal/modules/acl/commands.go:227.69,229.9 2 1 +github.com/echovault/echovault/internal/modules/acl/commands.go:229.9,231.3 1 0 +github.com/echovault/echovault/internal/modules/acl/commands.go:233.2,234.33 2 1 +github.com/echovault/echovault/internal/modules/acl/commands.go:234.33,236.3 1 1 +github.com/echovault/echovault/internal/modules/acl/commands.go:237.2,238.25 2 1 +github.com/echovault/echovault/internal/modules/acl/commands.go:241.71,243.9 2 1 +github.com/echovault/echovault/internal/modules/acl/commands.go:243.9,245.3 1 0 +github.com/echovault/echovault/internal/modules/acl/commands.go:246.2,246.56 1 1 +github.com/echovault/echovault/internal/modules/acl/commands.go:246.56,248.3 1 0 +github.com/echovault/echovault/internal/modules/acl/commands.go:249.2,249.42 1 1 +github.com/echovault/echovault/internal/modules/acl/commands.go:252.71,253.29 1 1 +github.com/echovault/echovault/internal/modules/acl/commands.go:253.29,255.3 1 1 +github.com/echovault/echovault/internal/modules/acl/commands.go:256.2,257.9 2 1 +github.com/echovault/echovault/internal/modules/acl/commands.go:257.9,259.3 1 0 +github.com/echovault/echovault/internal/modules/acl/commands.go:260.2,260.75 1 1 +github.com/echovault/echovault/internal/modules/acl/commands.go:260.75,262.3 1 0 +github.com/echovault/echovault/internal/modules/acl/commands.go:263.2,263.42 1 1 +github.com/echovault/echovault/internal/modules/acl/commands.go:266.70,268.9 2 1 +github.com/echovault/echovault/internal/modules/acl/commands.go:268.9,270.3 1 0 +github.com/echovault/echovault/internal/modules/acl/commands.go:271.2,275.74 4 1 +github.com/echovault/echovault/internal/modules/acl/commands.go:278.68,279.29 1 1 +github.com/echovault/echovault/internal/modules/acl/commands.go:279.29,281.3 1 1 +github.com/echovault/echovault/internal/modules/acl/commands.go:282.2,283.9 2 1 +github.com/echovault/echovault/internal/modules/acl/commands.go:283.9,285.3 1 0 +github.com/echovault/echovault/internal/modules/acl/commands.go:286.2,291.33 5 1 +github.com/echovault/echovault/internal/modules/acl/commands.go:291.33,294.19 2 1 +github.com/echovault/echovault/internal/modules/acl/commands.go:294.19,296.4 1 1 +github.com/echovault/echovault/internal/modules/acl/commands.go:296.9,298.4 1 1 +github.com/echovault/echovault/internal/modules/acl/commands.go:300.3,300.22 1 1 +github.com/echovault/echovault/internal/modules/acl/commands.go:300.22,302.4 1 1 +github.com/echovault/echovault/internal/modules/acl/commands.go:304.3,304.18 1 1 +github.com/echovault/echovault/internal/modules/acl/commands.go:304.18,306.4 1 1 +github.com/echovault/echovault/internal/modules/acl/commands.go:308.3,308.43 1 1 +github.com/echovault/echovault/internal/modules/acl/commands.go:308.43,309.61 1 1 +github.com/echovault/echovault/internal/modules/acl/commands.go:309.61,311.5 1 1 +github.com/echovault/echovault/internal/modules/acl/commands.go:312.4,312.58 1 1 +github.com/echovault/echovault/internal/modules/acl/commands.go:312.58,314.5 1 1 +github.com/echovault/echovault/internal/modules/acl/commands.go:317.3,317.52 1 1 +github.com/echovault/echovault/internal/modules/acl/commands.go:317.52,318.23 1 1 +github.com/echovault/echovault/internal/modules/acl/commands.go:318.23,320.13 2 1 +github.com/echovault/echovault/internal/modules/acl/commands.go:322.4,322.39 1 1 +github.com/echovault/echovault/internal/modules/acl/commands.go:325.3,325.52 1 1 +github.com/echovault/echovault/internal/modules/acl/commands.go:325.52,326.23 1 1 +github.com/echovault/echovault/internal/modules/acl/commands.go:326.23,328.13 2 0 +github.com/echovault/echovault/internal/modules/acl/commands.go:330.4,330.39 1 1 +github.com/echovault/echovault/internal/modules/acl/commands.go:333.3,333.49 1 1 +github.com/echovault/echovault/internal/modules/acl/commands.go:333.49,334.22 1 1 +github.com/echovault/echovault/internal/modules/acl/commands.go:334.22,336.13 2 1 +github.com/echovault/echovault/internal/modules/acl/commands.go:338.4,338.37 1 1 +github.com/echovault/echovault/internal/modules/acl/commands.go:341.3,341.49 1 1 +github.com/echovault/echovault/internal/modules/acl/commands.go:341.49,342.22 1 1 +github.com/echovault/echovault/internal/modules/acl/commands.go:342.22,344.13 2 0 +github.com/echovault/echovault/internal/modules/acl/commands.go:346.4,346.37 1 1 +github.com/echovault/echovault/internal/modules/acl/commands.go:349.3,349.45 1 1 +github.com/echovault/echovault/internal/modules/acl/commands.go:349.45,350.52 1 1 +github.com/echovault/echovault/internal/modules/acl/commands.go:350.52,352.13 2 1 +github.com/echovault/echovault/internal/modules/acl/commands.go:354.4,354.41 1 1 +github.com/echovault/echovault/internal/modules/acl/commands.go:357.3,357.46 1 1 +github.com/echovault/echovault/internal/modules/acl/commands.go:357.46,358.52 1 1 +github.com/echovault/echovault/internal/modules/acl/commands.go:358.52,360.5 1 1 +github.com/echovault/echovault/internal/modules/acl/commands.go:363.3,363.55 1 1 +github.com/echovault/echovault/internal/modules/acl/commands.go:363.55,365.4 1 1 +github.com/echovault/echovault/internal/modules/acl/commands.go:367.3,367.55 1 1 +github.com/echovault/echovault/internal/modules/acl/commands.go:367.55,369.4 1 1 +github.com/echovault/echovault/internal/modules/acl/commands.go:370.3,370.54 1 1 +github.com/echovault/echovault/internal/modules/acl/commands.go:373.2,374.25 2 1 +github.com/echovault/echovault/internal/modules/acl/commands.go:377.68,378.30 1 1 +github.com/echovault/echovault/internal/modules/acl/commands.go:378.30,380.3 1 0 +github.com/echovault/echovault/internal/modules/acl/commands.go:382.2,383.9 2 1 +github.com/echovault/echovault/internal/modules/acl/commands.go:383.9,385.3 1 0 +github.com/echovault/echovault/internal/modules/acl/commands.go:386.2,390.16 4 1 +github.com/echovault/echovault/internal/modules/acl/commands.go:390.16,392.3 1 0 +github.com/echovault/echovault/internal/modules/acl/commands.go:394.2,394.15 1 1 +github.com/echovault/echovault/internal/modules/acl/commands.go:394.15,395.35 1 1 +github.com/echovault/echovault/internal/modules/acl/commands.go:395.35,397.4 1 0 +github.com/echovault/echovault/internal/modules/acl/commands.go:400.2,404.37 3 1 +github.com/echovault/echovault/internal/modules/acl/commands.go:404.37,405.59 1 0 +github.com/echovault/echovault/internal/modules/acl/commands.go:405.59,407.4 1 0 +github.com/echovault/echovault/internal/modules/acl/commands.go:410.2,410.70 1 1 +github.com/echovault/echovault/internal/modules/acl/commands.go:410.70,411.59 1 1 +github.com/echovault/echovault/internal/modules/acl/commands.go:411.59,413.4 1 0 +github.com/echovault/echovault/internal/modules/acl/commands.go:417.2,417.29 1 1 +github.com/echovault/echovault/internal/modules/acl/commands.go:417.29,421.31 3 1 +github.com/echovault/echovault/internal/modules/acl/commands.go:421.31,422.35 1 1 +github.com/echovault/echovault/internal/modules/acl/commands.go:422.35,425.54 2 1 +github.com/echovault/echovault/internal/modules/acl/commands.go:425.54,427.6 1 0 +github.com/echovault/echovault/internal/modules/acl/commands.go:427.11,430.6 1 1 +github.com/echovault/echovault/internal/modules/acl/commands.go:431.5,431.10 1 1 +github.com/echovault/echovault/internal/modules/acl/commands.go:435.3,435.17 1 1 +github.com/echovault/echovault/internal/modules/acl/commands.go:435.17,437.4 1 0 +github.com/echovault/echovault/internal/modules/acl/commands.go:440.2,440.42 1 1 +github.com/echovault/echovault/internal/modules/acl/commands.go:443.68,444.29 1 1 +github.com/echovault/echovault/internal/modules/acl/commands.go:444.29,446.3 1 0 +github.com/echovault/echovault/internal/modules/acl/commands.go:448.2,449.9 2 1 +github.com/echovault/echovault/internal/modules/acl/commands.go:449.9,451.3 1 0 +github.com/echovault/echovault/internal/modules/acl/commands.go:452.2,456.16 4 1 +github.com/echovault/echovault/internal/modules/acl/commands.go:456.16,458.3 1 0 +github.com/echovault/echovault/internal/modules/acl/commands.go:460.2,460.15 1 1 +github.com/echovault/echovault/internal/modules/acl/commands.go:460.15,461.35 1 1 +github.com/echovault/echovault/internal/modules/acl/commands.go:461.35,463.4 1 0 +github.com/echovault/echovault/internal/modules/acl/commands.go:466.2,468.37 2 1 +github.com/echovault/echovault/internal/modules/acl/commands.go:468.37,471.17 2 0 +github.com/echovault/echovault/internal/modules/acl/commands.go:471.17,473.4 1 0 +github.com/echovault/echovault/internal/modules/acl/commands.go:474.3,474.40 1 0 +github.com/echovault/echovault/internal/modules/acl/commands.go:474.40,476.4 1 0 +github.com/echovault/echovault/internal/modules/acl/commands.go:479.2,479.70 1 1 +github.com/echovault/echovault/internal/modules/acl/commands.go:479.70,482.17 2 1 +github.com/echovault/echovault/internal/modules/acl/commands.go:482.17,484.4 1 0 +github.com/echovault/echovault/internal/modules/acl/commands.go:485.3,485.40 1 1 +github.com/echovault/echovault/internal/modules/acl/commands.go:485.40,487.4 1 0 +github.com/echovault/echovault/internal/modules/acl/commands.go:490.2,490.32 1 1 +github.com/echovault/echovault/internal/modules/acl/commands.go:490.32,492.3 1 0 +github.com/echovault/echovault/internal/modules/acl/commands.go:494.2,494.42 1 1 +github.com/echovault/echovault/internal/modules/acl/commands.go:497.36,507.84 1 1 +github.com/echovault/echovault/internal/modules/acl/commands.go:507.84,513.5 1 1 +github.com/echovault/echovault/internal/modules/acl/commands.go:522.84,528.5 1 1 +github.com/echovault/echovault/internal/modules/acl/commands.go:537.86,543.7 1 1 +github.com/echovault/echovault/internal/modules/acl/commands.go:552.86,558.7 1 1 +github.com/echovault/echovault/internal/modules/acl/commands.go:567.86,573.7 1 1 +github.com/echovault/echovault/internal/modules/acl/commands.go:582.86,588.7 1 1 +github.com/echovault/echovault/internal/modules/acl/commands.go:598.86,604.7 1 1 +github.com/echovault/echovault/internal/modules/acl/commands.go:613.86,619.7 1 1 +github.com/echovault/echovault/internal/modules/acl/commands.go:628.86,634.7 1 1 +github.com/echovault/echovault/internal/modules/acl/commands.go:646.86,652.7 1 1 +github.com/echovault/echovault/internal/modules/acl/commands.go:661.86,667.7 1 1 +github.com/echovault/echovault/internal/modules/acl/user.go:53.31,55.39 2 1 +github.com/echovault/echovault/internal/modules/acl/user.go:55.39,57.3 1 1 +github.com/echovault/echovault/internal/modules/acl/user.go:58.2,59.51 2 1 +github.com/echovault/echovault/internal/modules/acl/user.go:59.51,61.3 1 1 +github.com/echovault/echovault/internal/modules/acl/user.go:63.2,64.37 2 1 +github.com/echovault/echovault/internal/modules/acl/user.go:64.37,66.3 1 1 +github.com/echovault/echovault/internal/modules/acl/user.go:67.2,68.49 2 1 +github.com/echovault/echovault/internal/modules/acl/user.go:68.49,70.3 1 1 +github.com/echovault/echovault/internal/modules/acl/user.go:72.2,73.53 2 1 +github.com/echovault/echovault/internal/modules/acl/user.go:73.53,75.3 1 1 +github.com/echovault/echovault/internal/modules/acl/user.go:76.2,77.54 2 1 +github.com/echovault/echovault/internal/modules/acl/user.go:77.54,79.3 1 1 +github.com/echovault/echovault/internal/modules/acl/user.go:81.2,82.43 2 1 +github.com/echovault/echovault/internal/modules/acl/user.go:82.43,84.3 1 1 +github.com/echovault/echovault/internal/modules/acl/user.go:85.2,86.55 2 1 +github.com/echovault/echovault/internal/modules/acl/user.go:86.55,88.3 1 0 +github.com/echovault/echovault/internal/modules/acl/user.go:91.2,91.64 1 1 +github.com/echovault/echovault/internal/modules/acl/user.go:91.64,97.3 2 1 +github.com/echovault/echovault/internal/modules/acl/user.go:100.79,102.32 2 1 +github.com/echovault/echovault/internal/modules/acl/user.go:102.32,103.24 1 1 +github.com/echovault/echovault/internal/modules/acl/user.go:103.24,105.12 2 0 +github.com/echovault/echovault/internal/modules/acl/user.go:107.3,107.25 1 1 +github.com/echovault/echovault/internal/modules/acl/user.go:109.2,109.33 1 1 +github.com/echovault/echovault/internal/modules/acl/user.go:109.33,110.41 1 1 +github.com/echovault/echovault/internal/modules/acl/user.go:110.41,113.4 2 1 +github.com/echovault/echovault/internal/modules/acl/user.go:114.3,114.17 1 1 +github.com/echovault/echovault/internal/modules/acl/user.go:114.17,116.4 1 1 +github.com/echovault/echovault/internal/modules/acl/user.go:118.2,118.8 1 1 +github.com/echovault/echovault/internal/modules/acl/user.go:121.50,122.26 1 1 +github.com/echovault/echovault/internal/modules/acl/user.go:122.26,124.35 1 1 +github.com/echovault/echovault/internal/modules/acl/user.go:124.35,126.4 1 1 +github.com/echovault/echovault/internal/modules/acl/user.go:127.3,127.36 1 1 +github.com/echovault/echovault/internal/modules/acl/user.go:127.36,129.4 1 1 +github.com/echovault/echovault/internal/modules/acl/user.go:131.3,131.37 1 1 +github.com/echovault/echovault/internal/modules/acl/user.go:131.37,137.12 3 1 +github.com/echovault/echovault/internal/modules/acl/user.go:139.3,139.20 1 1 +github.com/echovault/echovault/internal/modules/acl/user.go:139.20,140.84 1 1 +github.com/echovault/echovault/internal/modules/acl/user.go:140.84,142.5 1 1 +github.com/echovault/echovault/internal/modules/acl/user.go:143.4,143.12 1 1 +github.com/echovault/echovault/internal/modules/acl/user.go:145.3,145.20 1 1 +github.com/echovault/echovault/internal/modules/acl/user.go:145.20,146.84 1 1 +github.com/echovault/echovault/internal/modules/acl/user.go:146.84,148.5 1 1 +github.com/echovault/echovault/internal/modules/acl/user.go:149.4,149.12 1 1 +github.com/echovault/echovault/internal/modules/acl/user.go:152.3,152.43 1 1 +github.com/echovault/echovault/internal/modules/acl/user.go:152.43,155.12 3 1 +github.com/echovault/echovault/internal/modules/acl/user.go:157.3,157.46 1 1 +github.com/echovault/echovault/internal/modules/acl/user.go:157.46,159.12 2 1 +github.com/echovault/echovault/internal/modules/acl/user.go:161.3,161.36 1 1 +github.com/echovault/echovault/internal/modules/acl/user.go:161.36,162.21 1 1 +github.com/echovault/echovault/internal/modules/acl/user.go:162.21,164.13 2 1 +github.com/echovault/echovault/internal/modules/acl/user.go:166.4,166.21 1 1 +github.com/echovault/echovault/internal/modules/acl/user.go:166.21,168.13 2 1 +github.com/echovault/echovault/internal/modules/acl/user.go:172.3,172.40 1 1 +github.com/echovault/echovault/internal/modules/acl/user.go:172.40,176.12 4 0 +github.com/echovault/echovault/internal/modules/acl/user.go:178.3,178.93 1 1 +github.com/echovault/echovault/internal/modules/acl/user.go:178.93,183.12 5 1 +github.com/echovault/echovault/internal/modules/acl/user.go:185.3,185.57 1 1 +github.com/echovault/echovault/internal/modules/acl/user.go:185.57,188.12 3 1 +github.com/echovault/echovault/internal/modules/acl/user.go:190.3,190.57 1 1 +github.com/echovault/echovault/internal/modules/acl/user.go:190.57,193.12 3 1 +github.com/echovault/echovault/internal/modules/acl/user.go:196.3,196.44 1 1 +github.com/echovault/echovault/internal/modules/acl/user.go:196.44,198.12 2 1 +github.com/echovault/echovault/internal/modules/acl/user.go:200.3,200.36 1 1 +github.com/echovault/echovault/internal/modules/acl/user.go:200.36,201.21 1 1 +github.com/echovault/echovault/internal/modules/acl/user.go:201.21,203.13 2 1 +github.com/echovault/echovault/internal/modules/acl/user.go:205.4,205.21 1 1 +github.com/echovault/echovault/internal/modules/acl/user.go:205.21,207.13 2 1 +github.com/echovault/echovault/internal/modules/acl/user.go:211.3,211.44 1 1 +github.com/echovault/echovault/internal/modules/acl/user.go:211.44,214.12 3 1 +github.com/echovault/echovault/internal/modules/acl/user.go:216.3,216.66 1 1 +github.com/echovault/echovault/internal/modules/acl/user.go:216.66,217.21 1 1 +github.com/echovault/echovault/internal/modules/acl/user.go:217.21,219.13 2 1 +github.com/echovault/echovault/internal/modules/acl/user.go:221.4,221.21 1 1 +github.com/echovault/echovault/internal/modules/acl/user.go:221.21,223.13 2 1 +github.com/echovault/echovault/internal/modules/acl/user.go:229.2,229.26 1 1 +github.com/echovault/echovault/internal/modules/acl/user.go:229.26,230.39 1 1 +github.com/echovault/echovault/internal/modules/acl/user.go:230.39,233.4 2 1 +github.com/echovault/echovault/internal/modules/acl/user.go:236.2,236.26 1 1 +github.com/echovault/echovault/internal/modules/acl/user.go:236.26,238.42 1 1 +github.com/echovault/echovault/internal/modules/acl/user.go:238.42,241.4 2 0 +github.com/echovault/echovault/internal/modules/acl/user.go:243.3,243.43 1 1 +github.com/echovault/echovault/internal/modules/acl/user.go:243.43,248.4 4 1 +github.com/echovault/echovault/internal/modules/acl/user.go:250.3,250.60 1 1 +github.com/echovault/echovault/internal/modules/acl/user.go:250.60,254.4 3 1 +github.com/echovault/echovault/internal/modules/acl/user.go:256.3,256.46 1 1 +github.com/echovault/echovault/internal/modules/acl/user.go:256.46,259.4 2 1 +github.com/echovault/echovault/internal/modules/acl/user.go:262.2,262.12 1 1 +github.com/echovault/echovault/internal/modules/acl/user.go:265.36,279.41 12 0 +github.com/echovault/echovault/internal/modules/acl/user.go:279.41,280.65 1 0 +github.com/echovault/echovault/internal/modules/acl/user.go:280.65,282.4 1 0 +github.com/echovault/echovault/internal/modules/acl/user.go:282.6,284.4 1 0 +github.com/echovault/echovault/internal/modules/acl/user.go:287.2,287.18 1 0 +github.com/echovault/echovault/internal/modules/acl/user.go:290.38,303.2 12 1 +github.com/echovault/echovault/internal/modules/acl/user.go:305.40,320.2 1 1 +github.com/echovault/echovault/internal/modules/acl/user.go:322.46,323.24 1 1 +github.com/echovault/echovault/internal/modules/acl/user.go:323.24,325.3 1 1 +github.com/echovault/echovault/internal/modules/acl/user.go:326.2,326.26 1 1 github.com/echovault/echovault/echovault/api_acl.go:126.71,128.23 2 1 github.com/echovault/echovault/echovault/api_acl.go:128.23,130.3 1 1 github.com/echovault/echovault/echovault/api_acl.go:131.2,132.16 2 1 diff --git a/internal/modules/acl/acl.go b/internal/modules/acl/acl.go index 886c382d..87252a5d 100644 --- a/internal/modules/acl/acl.go +++ b/internal/modules/acl/acl.go @@ -184,13 +184,6 @@ func (acl *ACL) SetUser(cmd []string) error { return nil } -func (acl *ACL) AddUsers(users []*User) { - acl.LockUsers() - defer acl.UnlockUsers() - - acl.Users = append(acl.Users, users...) -} - func (acl *ACL) DeleteUser(_ context.Context, usernames []string) error { acl.LockUsers() defer acl.UnlockUsers() @@ -329,8 +322,8 @@ func (acl *ACL) AuthorizeConnection(conn *net.Conn, cmd []string, command intern return nil } - // Skip connection - if strings.EqualFold(comm, "connection") { + // Skip PING + if strings.EqualFold(comm, "ping") { return nil } @@ -352,21 +345,23 @@ func (acl *ACL) AuthorizeConnection(conn *net.Conn, cmd []string, command intern return errors.New("user must be authenticated") } - // 2. Check if all categories are in IncludedCategories var notAllowed []string - if !slices.ContainsFunc(categories, func(category string) bool { - return slices.ContainsFunc(connection.User.IncludedCategories, func(includedCategory string) bool { - if includedCategory == "*" || includedCategory == category { - return true + + // 2. Check if all categories are in IncludedCategories + count := make(map[string]int, len(categories)) + if !slices.Contains(connection.User.IncludedCategories, "*") { + for _, category := range categories { + count[category] = 0 + } + for _, category := range connection.User.IncludedCategories { + if _, ok := count[category]; ok { + count[category] += 1 } - notAllowed = append(notAllowed, fmt.Sprintf("@%s", category)) - return false - }) - }) { - if len(notAllowed) == 0 { - notAllowed = []string{"@all"} } - return fmt.Errorf("unauthorized access to the following categories: %+v", notAllowed) + notAllowed = getUnauthorized(count, "@") + if len(notAllowed) > 0 { + return fmt.Errorf("unauthorized access to the following categories: %+v", notAllowed) + } } // 3. Check if commands category is in ExcludedCategories @@ -386,14 +381,14 @@ func (acl *ACL) AuthorizeConnection(conn *net.Conn, cmd []string, command intern if !slices.ContainsFunc(connection.User.IncludedCommands, func(includedCommand string) bool { return includedCommand == "*" || includedCommand == comm }) { - return fmt.Errorf("not authorised to run %s command", comm) + return fmt.Errorf("not authorised to run %s command", strings.ToUpper(comm)) } // 5. Check if command are in ExcludedCommands if slices.ContainsFunc(connection.User.ExcludedCommands, func(excludedCommand string) bool { return excludedCommand == "*" || excludedCommand == comm }) { - return fmt.Errorf("not authorised to run %s command", comm) + return fmt.Errorf("not authorised to run %s command", strings.ToUpper(comm)) } // 6. PUBSUB authorisation. @@ -428,24 +423,32 @@ func (acl *ACL) AuthorizeConnection(conn *net.Conn, cmd []string, command intern if acl.GlobPatterns[readKeyGlob].Match(key) { return true } - notAllowed = append(notAllowed, fmt.Sprintf("%s~%s", "%R", key)) + if !slices.Contains(notAllowed, fmt.Sprintf("%s~%s", "%R", key)) { + notAllowed = append(notAllowed, fmt.Sprintf("%s~%s", "%R", key)) + } return false }) }) { - return fmt.Errorf("not authorised to access the following keys %+v", notAllowed) + if len(notAllowed) > 0 { + return fmt.Errorf("not authorised to access the following keys: %+v", notAllowed) + } } - // 9. Check if keys are in IncludedWriteKeys + // 9. Check if write keys are in IncludedWriteKeys + fmt.Println("KEYS: ", writeKeys) + fmt.Println("ALLOWED KEYS: ", connection.User.IncludedWriteKeys) if !slices.ContainsFunc(writeKeys, func(key string) bool { return slices.ContainsFunc(connection.User.IncludedWriteKeys, func(writeKeyGlob string) bool { if acl.GlobPatterns[writeKeyGlob].Match(key) { return true } - notAllowed = append(notAllowed, fmt.Sprintf("%s~%s", "%W", key)) + if !slices.Contains(notAllowed, fmt.Sprintf("%s~%s", "%W", key)) { + notAllowed = append(notAllowed, fmt.Sprintf("%s~%s", "%W", key)) + } return false }) }) { - return fmt.Errorf("not authorised to access the following keys %+v", notAllowed) + return fmt.Errorf("not authorised to access the following keys: %+v", notAllowed) } } @@ -491,3 +494,17 @@ func (acl *ACL) RLockUsers() { func (acl *ACL) RUnlockUsers() { acl.UsersMutex.RUnlock() } + +func getUnauthorized(count map[string]int, prefix string) []string { + var notAllowed []string + for member, c := range count { + if c == 0 { + notAllowed = append(notAllowed, fmt.Sprintf("%s%s", prefix, member)) + } + } + // Sort the members in alphabetical order. + slices.SortStableFunc(notAllowed, func(a, b string) int { + return internal.CompareLex(a, b) + }) + return notAllowed +} diff --git a/internal/modules/acl/commands_test.go b/internal/modules/acl/commands_test.go index 6eb9b95f..1ad74661 100644 --- a/internal/modules/acl/commands_test.go +++ b/internal/modules/acl/commands_test.go @@ -178,12 +178,12 @@ func Test_ACL(t *testing.T) { t.Run("Test_HandleAuth", func(t *testing.T) { t.Parallel() + conn, err := internal.GetConnection("localhost", port) if err != nil { t.Error(err) return } - defer func() { if conn != nil { _ = conn.Close() @@ -193,16 +193,19 @@ func Test_ACL(t *testing.T) { r := resp.NewConn(conn) tests := []struct { + name string cmd []resp.Value wantRes string wantErr string }{ - { // 1. Authenticate with default user without specifying username + { + name: "1. Authenticate with default user without specifying username", cmd: []resp.Value{resp.StringValue("AUTH"), resp.StringValue("password1")}, wantRes: "OK", wantErr: "", }, - { // 2. Authenticate with plaintext password + { + name: "2. Authenticate with plaintext password", cmd: []resp.Value{ resp.StringValue("AUTH"), resp.StringValue("with_password_user"), @@ -211,7 +214,8 @@ func Test_ACL(t *testing.T) { wantRes: "OK", wantErr: "", }, - { // 3. Authenticate with SHA256 password + { + name: "3. Authenticate with SHA256 password", cmd: []resp.Value{ resp.StringValue("AUTH"), resp.StringValue("with_password_user"), @@ -220,7 +224,8 @@ func Test_ACL(t *testing.T) { wantRes: "OK", wantErr: "", }, - { // 4. Authenticate with no password user + { + name: "4. Authenticate with no password user", cmd: []resp.Value{ resp.StringValue("AUTH"), resp.StringValue("no_password_user"), @@ -229,7 +234,8 @@ func Test_ACL(t *testing.T) { wantRes: "OK", wantErr: "", }, - { // 5. Fail to authenticate with disabled user + { + name: "5. Fail to authenticate with disabled user", cmd: []resp.Value{ resp.StringValue("AUTH"), resp.StringValue("disabled_user"), @@ -238,7 +244,8 @@ func Test_ACL(t *testing.T) { wantRes: "", wantErr: "Error user disabled_user is disabled", }, - { // 6. Fail to authenticate with non-existent user + { + name: "6. Fail to authenticate with non-existent user", cmd: []resp.Value{ resp.StringValue("AUTH"), resp.StringValue("non_existent_user"), @@ -247,12 +254,24 @@ func Test_ACL(t *testing.T) { wantRes: "", wantErr: "Error no user with username non_existent_user", }, - { // 7. Command too short + { + name: "7. Fail to authenticate with the wrong password", + cmd: []resp.Value{ + resp.StringValue("AUTH"), + resp.StringValue("with_password_user"), + resp.StringValue("wrong_password"), + }, + wantRes: "", + wantErr: "Error could not authenticate user", + }, + { + name: "8. Command too short", cmd: []resp.Value{resp.StringValue("AUTH")}, wantRes: "", wantErr: fmt.Sprintf("Error %s", constants.WrongArgsResponse), }, - { // 8. Command too long + { + name: "9. Command too long", cmd: []resp.Value{ resp.StringValue("AUTH"), resp.StringValue("user"), @@ -265,22 +284,278 @@ func Test_ACL(t *testing.T) { } for _, test := range tests { - if err = r.WriteArray(test.cmd); err != nil { - t.Error(err) - } - rv, _, err := r.ReadValue() - if err != nil { + t.Run(test.name, func(t *testing.T) { + if err = r.WriteArray(test.cmd); err != nil { + t.Error(err) + } + rv, _, err := r.ReadValue() + if err != nil { + t.Error(err) + } + if test.wantErr != "" { + if rv.Error().Error() != test.wantErr { + t.Errorf("expected error response \"%s\", got \"%s\"", test.wantErr, rv.Error().Error()) + } + return + } + if rv.String() != test.wantRes { + t.Errorf("expected response \"%s\", got \"%s\"", test.wantRes, rv.String()) + } + }) + } + }) + + t.Run("Test_Permissions", func(t *testing.T) { + port, err := internal.GetFreePort() + if err != nil { + t.Error(err) + return + } + + mockServer, err := setUpServer(port, true, "") + if err != nil { + t.Error(err) + return + } + go func() { + mockServer.Start() + }() + + conn, err := internal.GetConnection("localhost", port) + if err != nil { + t.Error(err) + return + } + client := resp.NewConn(conn) + + t.Cleanup(func() { + _ = conn.Close() + mockServer.ShutDown() + }) + + // Add users to be used in test cases. + users := []echovault.User{ + { + // User with nokeys flag enables. + Username: "test_nokeys", + Enabled: true, + NoKeys: true, + AddPlainPasswords: []string{"test_nokeys_password"}, + }, + { + // This use will be used to test authorization failure when trying to access resources that are not + // in their "included" rules. + Username: "test_included", + Enabled: true, + AddPlainPasswords: []string{"test_included_password"}, + IncludeCategories: []string{ + constants.WriteCategory, + constants.ReadCategory, + constants.SlowCategory, + constants.PubSubCategory, + constants.ConnectionCategory, + constants.ListCategory, + }, + IncludeCommands: []string{"set", "get", "subscribe", "lrange", "ltrim"}, + IncludeChannels: []string{"channel[12]"}, + IncludeReadWriteKeys: []string{"key1", "key2"}, + }, + { + // This use will be used to test authorization failure when trying to access resources that are + // in their "excluded" rules. + Username: "test_excluded", + Enabled: true, + AddPlainPasswords: []string{"test_excluded_password"}, + IncludeCategories: []string{"*"}, + ExcludeCategories: []string{constants.FastCategory, constants.HashCategory}, + IncludeCommands: []string{"*"}, + ExcludeCommands: []string{"set", "mset"}, + IncludeChannels: []string{"*"}, + ExcludeChannels: []string{"channel[12]"}, + }, + } + for _, user := range users { + if _, err := mockServer.ACLSetUser(user); err != nil { t.Error(err) + return } - if test.wantErr != "" { - if rv.Error().Error() != test.wantErr { - t.Errorf("expected error response \"%s\", got \"%s\"", test.wantErr, rv.Error().Error()) + } + + tests := []struct { + name string + auth []resp.Value + cmd []resp.Value + wantErr string + }{ + { + name: "1. Return error when the connection is not authenticated", + auth: []resp.Value{}, + cmd: []resp.Value{resp.StringValue("SET"), resp.StringValue("key"), resp.StringValue("value")}, + wantErr: "user must be authenticated", + }, + { + name: "2. Return error when the command category is not in the included categories section", + auth: []resp.Value{ + resp.StringValue("AUTH"), + resp.StringValue("test_included"), + resp.StringValue("test_included_password"), + }, + cmd: []resp.Value{ + resp.StringValue("HSET"), + resp.StringValue("hash"), + resp.StringValue("field1"), + resp.StringValue("value1"), + }, + wantErr: fmt.Sprintf("unauthorized access to the following categories: [@%s @%s]", + constants.FastCategory, constants.HashCategory), + }, + { + name: "3. Return error when the command category is in the excluded categories section", + auth: []resp.Value{ + resp.StringValue("AUTH"), + resp.StringValue("test_excluded"), + resp.StringValue("test_excluded_password"), + }, + cmd: []resp.Value{ + resp.StringValue("HSET"), + resp.StringValue("hash"), + resp.StringValue("field1"), + resp.StringValue("value1"), + }, + wantErr: fmt.Sprintf("unauthorized access to the following categories: [@%s]", + constants.HashCategory), + }, + { + name: "4. Return error when the command is not in the included command category", + auth: []resp.Value{ + resp.StringValue("AUTH"), + resp.StringValue("test_included"), + resp.StringValue("test_included_password"), + }, + cmd: []resp.Value{ + resp.StringValue("MSET"), + resp.StringValue("key1"), + resp.StringValue("value1"), + }, + wantErr: "not authorised to run MSET command", + }, + { + name: "5. Return error when the command is in the excluded command category", + auth: []resp.Value{ + resp.StringValue("AUTH"), + resp.StringValue("test_excluded"), + resp.StringValue("test_excluded_password"), + }, + cmd: []resp.Value{ + resp.StringValue("SET"), + resp.StringValue("key1"), + resp.StringValue("value1"), + }, + wantErr: "not authorised to run SET command", + }, + { + name: "6. Return error when subscribing to channel that's not in included channels", + auth: []resp.Value{ + resp.StringValue("AUTH"), + resp.StringValue("test_included"), + resp.StringValue("test_included_password"), + }, + cmd: []resp.Value{ + resp.StringValue("SUBSCRIBE"), + resp.StringValue("channel3"), + }, + wantErr: "not authorised to access channel &channel3", + }, + { + name: "7. Return error when publishing to channel that's in excluded channels", + auth: []resp.Value{ + resp.StringValue("AUTH"), + resp.StringValue("test_excluded"), + resp.StringValue("test_excluded_password"), + }, + cmd: []resp.Value{ + resp.StringValue("SUBSCRIBE"), + resp.StringValue("channel2"), + }, + wantErr: "not authorised to access channel &channel2", + }, + { + name: "8. Return error when the user has nokeys flag", + auth: []resp.Value{ + resp.StringValue("AUTH"), + resp.StringValue("test_nokeys"), + resp.StringValue("test_nokeys_password"), + }, + cmd: []resp.Value{resp.StringValue("GET"), resp.StringValue("key1")}, + }, + { + name: "9. Return error when trying to read from keys that are not in read keys list", + auth: []resp.Value{ + resp.StringValue("AUTH"), + resp.StringValue("test_included"), + resp.StringValue("test_included_password"), + }, + cmd: []resp.Value{ + resp.StringValue("LRANGE"), + resp.StringValue("key3"), + resp.StringValue("0"), + resp.StringValue("-1"), + }, + wantErr: fmt.Sprintf("not authorised to access the following keys: [%s~%s]", "%R", "key3"), + }, + { + name: "10. Return error when trying to write to keys that are not in write keys list", + auth: []resp.Value{ + resp.StringValue("AUTH"), + resp.StringValue("test_included"), + resp.StringValue("test_included_password"), + }, + cmd: []resp.Value{ + resp.StringValue("LTRIM"), + resp.StringValue("key3"), + resp.StringValue("0"), + resp.StringValue("3"), + }, + wantErr: fmt.Sprintf("not authorised to access the following keys: [%s~%s]", "%W", "key3"), + }, + } + + for _, test := range tests { + t.Run(test.name, func(t *testing.T) { + // Authenticate the user if the auth command is provided. + if len(test.auth) > 0 { + err := client.WriteArray(test.auth) + if err != nil { + t.Error(err) + return + } + res, _, err := client.ReadValue() + if err != nil { + t.Error(err) + return + } + if !strings.EqualFold(res.String(), "ok") { + t.Errorf("expected auth response to be OK, got \"%s\"", res.String()) + } } - continue - } - if rv.String() != test.wantRes { - t.Errorf("expected response \"%s\", got \"%s\"", test.wantRes, rv.String()) - } + + if err := client.WriteArray(test.cmd); err != nil { + t.Error(err) + return + } + + res, _, err := client.ReadValue() + if err != nil { + t.Error(err) + return + } + + if !strings.Contains(res.Error().Error(), test.wantErr) { + t.Errorf("expected error to contain string \"%s\", got \"%s\"", + test.wantErr, res.Error().Error()) + return + } + }) } })