public override Task <int> InvokeAsync(IEnumerable <string> args)
        {
            var error = false;

            try
            {
                var extra = Options.Parse(args);
                if (ShowHelp)
                {
                    Options.WriteOptionDescriptions(CommandSet.Out);
                }
                else if (string.IsNullOrWhiteSpace(WalletName) && string.IsNullOrWhiteSpace(EncryptedSecret))
                {
                    Console.WriteLine("Missing required argument `--wallet=WalletName`.");
                    Console.WriteLine("Use `findpassword --help` for details.");
                    error = true;
                }
                else if (!PasswordFinder.Charsets.ContainsKey(Language))
                {
                    Console.WriteLine($"`{Language}` is not available language try with `en, es, pt, it or fr`.");
                    Console.WriteLine("Use `findpassword --help` for details.");
                    error = true;
                }
                else if (!string.IsNullOrWhiteSpace(WalletName))
                {
                    KeyManager km = WalletGenerator.TryGetKeymanagerFromWalletName(WalletName);
                    if (km is null)
                    {
                        error = true;
                    }
                    PasswordFinder.Find(km.EncryptedSecret.ToWif(), Language, UseNumbers, UseSymbols);
                }
                else if (!string.IsNullOrWhiteSpace(EncryptedSecret))
                {
                    PasswordFinder.Find(EncryptedSecret, Language, UseNumbers, UseSymbols);
                }
            }
            catch (Exception)
            {
                Console.WriteLine($"There was a problem interpreting the command, please review it.");
                error = true;
            }
            Environment.Exit(error ? 1 : 0);
            return(Task.FromResult(0));
        }