[XYZ-6] Add sampledata platform command (#8027)

* Add fake dependency

* [XYZ-6] Add sampledata platform command

* Creating EMOJI_NAME_MAX_LENGTH as a constant and using it where needed
This commit is contained in:
Jesús Espino 2018-01-11 16:57:47 +01:00 committed by Joram Wilander
parent 0a9200c35d
commit 6990d052d5
125 changed files with 9686 additions and 58 deletions

View file

@ -579,7 +579,7 @@ func (c *Context) RequireEmojiName() *Context {
validName := regexp.MustCompile(`^[a-zA-Z0-9\-\+_]+$`)
if len(c.Params.EmojiName) == 0 || len(c.Params.EmojiName) > 64 || !validName.MatchString(c.Params.EmojiName) {
if len(c.Params.EmojiName) == 0 || len(c.Params.EmojiName) > model.EMOJI_NAME_MAX_LENGTH || !validName.MatchString(c.Params.EmojiName) {
c.SetInvalidUrlParam("emoji_name")
}

View file

@ -22,7 +22,7 @@ func saveReaction(c *Context, w http.ResponseWriter, r *http.Request) {
return
}
if len(reaction.UserId) != 26 || len(reaction.PostId) != 26 || len(reaction.EmojiName) == 0 || len(reaction.EmojiName) > 64 {
if len(reaction.UserId) != 26 || len(reaction.PostId) != 26 || len(reaction.EmojiName) == 0 || len(reaction.EmojiName) > model.EMOJI_NAME_MAX_LENGTH {
c.Err = model.NewAppError("saveReaction", "api.reaction.save_reaction.invalid.app_error", nil, "", http.StatusBadRequest)
return
}

View file

@ -9,6 +9,7 @@ import (
"encoding/json"
"io"
"net/http"
"os"
"regexp"
"strings"
"sync"
@ -53,17 +54,18 @@ type ChannelImportData struct {
}
type UserImportData struct {
Username *string `json:"username"`
Email *string `json:"email"`
AuthService *string `json:"auth_service"`
AuthData *string `json:"auth_data"`
Password *string `json:"password"`
Nickname *string `json:"nickname"`
FirstName *string `json:"first_name"`
LastName *string `json:"last_name"`
Position *string `json:"position"`
Roles *string `json:"roles"`
Locale *string `json:"locale"`
ProfileImage *string `json:"profile_image"`
Username *string `json:"username"`
Email *string `json:"email"`
AuthService *string `json:"auth_service"`
AuthData *string `json:"auth_data"`
Password *string `json:"password"`
Nickname *string `json:"nickname"`
FirstName *string `json:"first_name"`
LastName *string `json:"last_name"`
Position *string `json:"position"`
Roles *string `json:"roles"`
Locale *string `json:"locale"`
Teams *[]UserTeamImportData `json:"teams"`
@ -111,6 +113,22 @@ type UserChannelNotifyPropsImportData struct {
MarkUnread *string `json:"mark_unread"`
}
type ReactionImportData struct {
User *string `json:"user"`
CreateAt *int64 `json:"create_at"`
EmojiName *string `json:"emoji_name"`
}
type ReplyImportData struct {
User *string `json:"user"`
Message *string `json:"message"`
CreateAt *int64 `json:"create_at"`
FlaggedBy *[]string `json:"flagged_by"`
Reactions *[]ReactionImportData `json:"reactions"`
}
type PostImportData struct {
Team *string `json:"team"`
Channel *string `json:"channel"`
@ -119,7 +137,9 @@ type PostImportData struct {
Message *string `json:"message"`
CreateAt *int64 `json:"create_at"`
FlaggedBy *[]string `json:"flagged_by"`
FlaggedBy *[]string `json:"flagged_by"`
Reactions *[]ReactionImportData `json:"reactions"`
Replies *[]ReplyImportData `json:"replies"`
}
type DirectChannelImportData struct {
@ -136,7 +156,9 @@ type DirectPostImportData struct {
Message *string `json:"message"`
CreateAt *int64 `json:"create_at"`
FlaggedBy *[]string `json:"flagged_by"`
FlaggedBy *[]string `json:"flagged_by"`
Reactions *[]ReactionImportData `json:"reactions"`
Replies *[]ReplyImportData `json:"replies"`
}
type LineImportWorkerData struct {
@ -690,6 +712,16 @@ func (a *App) ImportUser(data *UserImportData, dryRun bool) *model.AppError {
savedUser = user
}
if data.ProfileImage != nil {
file, err := os.Open(*data.ProfileImage)
if err != nil {
l4g.Error(utils.T("api.import.import_user.profile_image.error"), err)
}
if err := a.SetProfileImageFromFile(savedUser.Id, file); err != nil {
l4g.Error(utils.T("api.import.import_user.profile_image.error"), err)
}
}
// Preferences.
var preferences model.Preferences
@ -869,6 +901,11 @@ func (a *App) ImportUserChannels(user *model.User, team *model.Team, teamMember
}
func validateUserImportData(data *UserImportData) *model.AppError {
if data.ProfileImage != nil {
if _, err := os.Stat(*data.ProfileImage); os.IsNotExist(err) {
return model.NewAppError("BulkImport", "app.import.validate_user_import_data.profile_image.error", nil, "", http.StatusBadRequest)
}
}
if data.Username == nil {
return model.NewAppError("BulkImport", "app.import.validate_user_import_data.username_missing.error", nil, "", http.StatusBadRequest)
@ -1019,6 +1056,79 @@ func validateUserChannelsImportData(data *[]UserChannelImportData) *model.AppErr
return nil
}
func (a *App) ImportReaction(data *ReactionImportData, post *model.Post, dryRun bool) *model.AppError {
if err := validateReactionImportData(data, post.CreateAt); err != nil {
return err
}
var user *model.User
if result := <-a.Srv.Store.User().GetByUsername(*data.User); result.Err != nil {
return model.NewAppError("BulkImport", "app.import.import_post.user_not_found.error", map[string]interface{}{"Username": data.User}, "", http.StatusBadRequest)
} else {
user = result.Data.(*model.User)
}
reaction := &model.Reaction{
UserId: user.Id,
PostId: post.Id,
EmojiName: *data.EmojiName,
CreateAt: *data.CreateAt,
}
if result := <-a.Srv.Store.Reaction().Save(reaction); result.Err != nil {
return result.Err
}
return nil
}
func (a *App) ImportReply(data *ReplyImportData, post *model.Post, dryRun bool) *model.AppError {
if err := validateReplyImportData(data, post.CreateAt); err != nil {
return err
}
var user *model.User
if result := <-a.Srv.Store.User().GetByUsername(*data.User); result.Err != nil {
return model.NewAppError("BulkImport", "app.import.import_post.user_not_found.error", map[string]interface{}{"Username": data.User}, "", http.StatusBadRequest)
} else {
user = result.Data.(*model.User)
}
// Check if this post already exists.
var replies []*model.Post
if result := <-a.Srv.Store.Post().GetPostsCreatedAt(post.ChannelId, *data.CreateAt); result.Err != nil {
return result.Err
} else {
replies = result.Data.([]*model.Post)
}
var reply *model.Post
for _, r := range replies {
if r.Message == *data.Message {
reply = r
break
}
}
if reply == nil {
reply = &model.Post{}
}
reply.UserId = user.Id
reply.ChannelId = post.ChannelId
reply.ParentId = post.Id
reply.RootId = post.Id
reply.Message = *data.Message
reply.CreateAt = *data.CreateAt
if reply.Id == "" {
if result := <-a.Srv.Store.Post().Save(reply); result.Err != nil {
return result.Err
}
} else {
if result := <-a.Srv.Store.Post().Overwrite(reply); result.Err != nil {
return result.Err
}
}
return nil
}
func (a *App) ImportPost(data *PostImportData, dryRun bool) *model.AppError {
if err := validatePostImportData(data); err != nil {
return err
@ -1114,6 +1224,66 @@ func (a *App) ImportPost(data *PostImportData, dryRun bool) *model.AppError {
}
}
if data.Reactions != nil {
for _, reaction := range *data.Reactions {
if err := a.ImportReaction(&reaction, post, dryRun); err != nil {
return err
}
}
}
if data.Replies != nil {
for _, reply := range *data.Replies {
if err := a.ImportReply(&reply, post, dryRun); err != nil {
return err
}
}
}
return nil
}
func validateReactionImportData(data *ReactionImportData, parentCreateAt int64) *model.AppError {
if data.User == nil {
return model.NewAppError("BulkImport", "app.import.validate_reaction_import_data.user_missing.error", nil, "", http.StatusBadRequest)
}
if data.EmojiName == nil {
return model.NewAppError("BulkImport", "app.import.validate_reaction_import_data.emoji_name_missing.error", nil, "", http.StatusBadRequest)
} else if utf8.RuneCountInString(*data.EmojiName) > model.EMOJI_NAME_MAX_LENGTH {
return model.NewAppError("BulkImport", "app.import.validate_reaction_import_data.emoji_name_length.error", nil, "", http.StatusBadRequest)
}
if data.CreateAt == nil {
return model.NewAppError("BulkImport", "app.import.validate_reaction_import_data.create_at_missing.error", nil, "", http.StatusBadRequest)
} else if *data.CreateAt == 0 {
return model.NewAppError("BulkImport", "app.import.validate_reaction_import_data.create_at_zero.error", nil, "", http.StatusBadRequest)
} else if *data.CreateAt < parentCreateAt {
return model.NewAppError("BulkImport", "app.import.validate_reaction_import_data.create_at_before_parent.error", nil, "", http.StatusBadRequest)
}
return nil
}
func validateReplyImportData(data *ReplyImportData, parentCreateAt int64) *model.AppError {
if data.User == nil {
return model.NewAppError("BulkImport", "app.import.validate_reply_import_data.user_missing.error", nil, "", http.StatusBadRequest)
}
if data.Message == nil {
return model.NewAppError("BulkImport", "app.import.validate_reply_import_data.message_missing.error", nil, "", http.StatusBadRequest)
} else if utf8.RuneCountInString(*data.Message) > model.POST_MESSAGE_MAX_RUNES {
return model.NewAppError("BulkImport", "app.import.validate_reply_import_data.message_length.error", nil, "", http.StatusBadRequest)
}
if data.CreateAt == nil {
return model.NewAppError("BulkImport", "app.import.validate_reply_import_data.create_at_missing.error", nil, "", http.StatusBadRequest)
} else if *data.CreateAt == 0 {
return model.NewAppError("BulkImport", "app.import.validate_reply_import_data.create_at_zero.error", nil, "", http.StatusBadRequest)
} else if *data.CreateAt < parentCreateAt {
return model.NewAppError("BulkImport", "app.import.validate_reply_import_data.create_at_before_parent.error", nil, "", http.StatusBadRequest)
}
return nil
}
@ -1142,6 +1312,18 @@ func validatePostImportData(data *PostImportData) *model.AppError {
return model.NewAppError("BulkImport", "app.import.validate_post_import_data.create_at_zero.error", nil, "", http.StatusBadRequest)
}
if data.Reactions != nil {
for _, reaction := range *data.Reactions {
validateReactionImportData(&reaction, *data.CreateAt)
}
}
if data.Replies != nil {
for _, reply := range *data.Replies {
validateReplyImportData(&reply, *data.CreateAt)
}
}
return nil
}
@ -1365,6 +1547,22 @@ func (a *App) ImportDirectPost(data *DirectPostImportData, dryRun bool) *model.A
}
}
if data.Reactions != nil {
for _, reaction := range *data.Reactions {
if err := a.ImportReaction(&reaction, post, dryRun); err != nil {
return err
}
}
}
if data.Replies != nil {
for _, reply := range *data.Replies {
if err := a.ImportReply(&reply, post, dryRun); err != nil {
return err
}
}
}
return nil
}
@ -1412,6 +1610,18 @@ func validateDirectPostImportData(data *DirectPostImportData) *model.AppError {
}
}
if data.Reactions != nil {
for _, reaction := range *data.Reactions {
validateReactionImportData(&reaction, *data.CreateAt)
}
}
if data.Replies != nil {
for _, reply := range *data.Replies {
validateReplyImportData(&reply, *data.CreateAt)
}
}
return nil
}

View file

@ -10,6 +10,7 @@ import (
"github.com/mattermost/mattermost-server/model"
"github.com/mattermost/mattermost-server/store"
"github.com/mattermost/mattermost-server/utils"
)
func ptrStr(s string) *string {
@ -325,6 +326,13 @@ func TestImportValidateUserImportData(t *testing.T) {
data.Username = ptrStr("bob")
// Unexisting Picture Image
data.ProfileImage = ptrStr("not-existing-file")
if err := validateUserImportData(&data); err == nil {
t.Fatal("Validation should have failed due to not existing profile image file.")
}
data.ProfileImage = nil
// Invalid Emails
data.Email = nil
if err := validateUserImportData(&data); err == nil {
@ -360,17 +368,19 @@ func TestImportValidateUserImportData(t *testing.T) {
}
// Test a valid User with all fields populated.
testsDir, _ := utils.FindDir("tests")
data = UserImportData{
Username: ptrStr("bob"),
Email: ptrStr("bob@example.com"),
AuthService: ptrStr("ldap"),
AuthData: ptrStr("bob"),
Nickname: ptrStr("BobNick"),
FirstName: ptrStr("Bob"),
LastName: ptrStr("Blob"),
Position: ptrStr("The Boss"),
Roles: ptrStr("system_user"),
Locale: ptrStr("en"),
ProfileImage: ptrStr(testsDir + "test.png"),
Username: ptrStr("bob"),
Email: ptrStr("bob@example.com"),
AuthService: ptrStr("ldap"),
AuthData: ptrStr("bob"),
Nickname: ptrStr("BobNick"),
FirstName: ptrStr("Bob"),
LastName: ptrStr("Blob"),
Position: ptrStr("The Boss"),
Roles: ptrStr("system_user"),
Locale: ptrStr("en"),
}
if err := validateUserImportData(&data); err != nil {
t.Fatal("Validation failed but should have been valid.")
@ -563,6 +573,140 @@ func TestImportValidateUserChannelsImportData(t *testing.T) {
}
}
func TestImportValidateReactionImportData(t *testing.T) {
// Test with minimum required valid properties.
parentCreateAt := model.GetMillis() - 100
data := ReactionImportData{
User: ptrStr("username"),
EmojiName: ptrStr("emoji"),
CreateAt: ptrInt64(model.GetMillis()),
}
if err := validateReactionImportData(&data, parentCreateAt); err != nil {
t.Fatal("Validation failed but should have been valid.")
}
// Test with missing required properties.
data = ReactionImportData{
EmojiName: ptrStr("emoji"),
CreateAt: ptrInt64(model.GetMillis()),
}
if err := validateReactionImportData(&data, parentCreateAt); err == nil {
t.Fatal("Should have failed due to missing required property.")
}
data = ReactionImportData{
User: ptrStr("username"),
CreateAt: ptrInt64(model.GetMillis()),
}
if err := validateReactionImportData(&data, parentCreateAt); err == nil {
t.Fatal("Should have failed due to missing required property.")
}
data = ReactionImportData{
User: ptrStr("username"),
EmojiName: ptrStr("emoji"),
}
if err := validateReactionImportData(&data, parentCreateAt); err == nil {
t.Fatal("Should have failed due to missing required property.")
}
// Test with invalid emoji name.
data = ReactionImportData{
User: ptrStr("username"),
EmojiName: ptrStr(strings.Repeat("1234567890", 500)),
CreateAt: ptrInt64(model.GetMillis()),
}
if err := validateReactionImportData(&data, parentCreateAt); err == nil {
t.Fatal("Should have failed due to too long emoji name.")
}
// Test with invalid CreateAt
data = ReactionImportData{
User: ptrStr("username"),
EmojiName: ptrStr("emoji"),
CreateAt: ptrInt64(0),
}
if err := validateReactionImportData(&data, parentCreateAt); err == nil {
t.Fatal("Should have failed due to 0 create-at value.")
}
data = ReactionImportData{
User: ptrStr("username"),
EmojiName: ptrStr("emoji"),
CreateAt: ptrInt64(parentCreateAt - 100),
}
if err := validateReactionImportData(&data, parentCreateAt); err == nil {
t.Fatal("Should have failed due parent with newer create-at value.")
}
}
func TestImportValidateReplyImportData(t *testing.T) {
// Test with minimum required valid properties.
parentCreateAt := model.GetMillis() - 100
data := ReplyImportData{
User: ptrStr("username"),
Message: ptrStr("message"),
CreateAt: ptrInt64(model.GetMillis()),
}
if err := validateReplyImportData(&data, parentCreateAt); err != nil {
t.Fatal("Validation failed but should have been valid.")
}
// Test with missing required properties.
data = ReplyImportData{
Message: ptrStr("message"),
CreateAt: ptrInt64(model.GetMillis()),
}
if err := validateReplyImportData(&data, parentCreateAt); err == nil {
t.Fatal("Should have failed due to missing required property.")
}
data = ReplyImportData{
User: ptrStr("username"),
CreateAt: ptrInt64(model.GetMillis()),
}
if err := validateReplyImportData(&data, parentCreateAt); err == nil {
t.Fatal("Should have failed due to missing required property.")
}
data = ReplyImportData{
User: ptrStr("username"),
Message: ptrStr("message"),
}
if err := validateReplyImportData(&data, parentCreateAt); err == nil {
t.Fatal("Should have failed due to missing required property.")
}
// Test with invalid message.
data = ReplyImportData{
User: ptrStr("username"),
Message: ptrStr(strings.Repeat("1234567890", 500)),
CreateAt: ptrInt64(model.GetMillis()),
}
if err := validateReplyImportData(&data, parentCreateAt); err == nil {
t.Fatal("Should have failed due to too long message.")
}
// Test with invalid CreateAt
data = ReplyImportData{
User: ptrStr("username"),
Message: ptrStr("message"),
CreateAt: ptrInt64(0),
}
if err := validateReplyImportData(&data, parentCreateAt); err == nil {
t.Fatal("Should have failed due to 0 create-at value.")
}
data = ReplyImportData{
User: ptrStr("username"),
Message: ptrStr("message"),
CreateAt: ptrInt64(parentCreateAt - 100),
}
if err := validateReplyImportData(&data, parentCreateAt); err == nil {
t.Fatal("Should have failed due parent with newer create-at value.")
}
}
func TestImportValidatePostImportData(t *testing.T) {
// Test with minimum required valid properties.
@ -653,12 +797,24 @@ func TestImportValidatePostImportData(t *testing.T) {
}
// Test with valid all optional parameters.
data = PostImportData{
Team: ptrStr("teamname"),
Channel: ptrStr("channelname"),
reactions := []ReactionImportData{ReactionImportData{
User: ptrStr("username"),
EmojiName: ptrStr("emoji"),
CreateAt: ptrInt64(model.GetMillis()),
}}
replies := []ReplyImportData{ReplyImportData{
User: ptrStr("username"),
Message: ptrStr("message"),
CreateAt: ptrInt64(model.GetMillis()),
}}
data = PostImportData{
Team: ptrStr("teamname"),
Channel: ptrStr("channelname"),
User: ptrStr("username"),
Message: ptrStr("message"),
CreateAt: ptrInt64(model.GetMillis()),
Reactions: &reactions,
Replies: &replies,
}
if err := validatePostImportData(&data); err != nil {
t.Fatal("Should have succeeded.")
@ -961,6 +1117,37 @@ func TestImportValidateDirectPostImportData(t *testing.T) {
if err := validateDirectPostImportData(&data); err != nil {
t.Fatal(err)
}
// Test with valid all optional parameters.
reactions := []ReactionImportData{ReactionImportData{
User: ptrStr("username"),
EmojiName: ptrStr("emoji"),
CreateAt: ptrInt64(model.GetMillis()),
}}
replies := []ReplyImportData{ReplyImportData{
User: ptrStr("username"),
Message: ptrStr("message"),
CreateAt: ptrInt64(model.GetMillis()),
}}
data = DirectPostImportData{
ChannelMembers: &[]string{
member1,
member2,
},
FlaggedBy: &[]string{
member1,
member2,
},
User: ptrStr("username"),
Message: ptrStr("message"),
CreateAt: ptrInt64(model.GetMillis()),
Reactions: &reactions,
Replies: &replies,
}
if err := validateDirectPostImportData(&data); err != nil {
t.Fatal(err)
}
}
func TestImportImportTeam(t *testing.T) {
@ -1298,13 +1485,15 @@ func TestImportImportUser(t *testing.T) {
// Do a valid user in apply mode.
username := model.NewId()
testsDir, _ := utils.FindDir("tests")
data = UserImportData{
Username: &username,
Email: ptrStr(model.NewId() + "@example.com"),
Nickname: ptrStr(model.NewId()),
FirstName: ptrStr(model.NewId()),
LastName: ptrStr(model.NewId()),
Position: ptrStr(model.NewId()),
ProfileImage: ptrStr(testsDir + "test.png"),
Username: &username,
Email: ptrStr(model.NewId() + "@example.com"),
Nickname: ptrStr(model.NewId()),
FirstName: ptrStr(model.NewId()),
LastName: ptrStr(model.NewId()),
Position: ptrStr(model.NewId()),
}
if err := th.App.ImportUser(&data, false); err != nil {
t.Fatalf("Should have succeeded to import valid user.")
@ -1354,6 +1543,7 @@ func TestImportImportUser(t *testing.T) {
// Alter all the fields of that user.
data.Email = ptrStr(model.NewId() + "@example.com")
data.ProfileImage = ptrStr(testsDir + "testgif.gif")
data.AuthService = ptrStr("ldap")
data.AuthData = &username
data.Nickname = ptrStr(model.NewId())
@ -2189,6 +2379,98 @@ func TestImportImportPost(t *testing.T) {
checkPreference(t, th.App, user.Id, model.PREFERENCE_CATEGORY_FLAGGED_POST, post.Id, "true")
checkPreference(t, th.App, user2.Id, model.PREFERENCE_CATEGORY_FLAGGED_POST, post.Id, "true")
}
// Post with reaction.
reactionPostTime := hashtagTime + 2
reactionTime := hashtagTime + 3
data = &PostImportData{
Team: &teamName,
Channel: &channelName,
User: &username,
Message: ptrStr("Message with reaction"),
CreateAt: &reactionPostTime,
Reactions: &[]ReactionImportData{{
User: &user2.Username,
EmojiName: ptrStr("+1"),
CreateAt: &reactionTime,
}},
}
if err := th.App.ImportPost(data, false); err != nil {
t.Fatalf("Expected success.")
}
AssertAllPostsCount(t, th.App, initialPostCount, 6, team.Id)
// Check the post values.
if result := <-th.App.Srv.Store.Post().GetPostsCreatedAt(channel.Id, reactionPostTime); result.Err != nil {
t.Fatal(result.Err.Error())
} else {
posts := result.Data.([]*model.Post)
if len(posts) != 1 {
t.Fatal("Unexpected number of posts found.")
}
post := posts[0]
if post.Message != *data.Message || post.CreateAt != *data.CreateAt || post.UserId != user.Id || !post.HasReactions {
t.Fatal("Post properties not as expected")
}
if result := <-th.App.Srv.Store.Reaction().GetForPost(post.Id, false); result.Err != nil {
t.Fatal("Can't get reaction")
} else if len(result.Data.([]*model.Reaction)) != 1 {
t.Fatal("Invalid number of reactions")
}
}
// Post with reply.
replyPostTime := hashtagTime + 4
replyTime := hashtagTime + 5
data = &PostImportData{
Team: &teamName,
Channel: &channelName,
User: &username,
Message: ptrStr("Message with reply"),
CreateAt: &replyPostTime,
Replies: &[]ReplyImportData{{
User: &user2.Username,
Message: ptrStr("Message reply"),
CreateAt: &replyTime,
}},
}
if err := th.App.ImportPost(data, false); err != nil {
t.Fatalf("Expected success.")
}
AssertAllPostsCount(t, th.App, initialPostCount, 8, team.Id)
// Check the post values.
if result := <-th.App.Srv.Store.Post().GetPostsCreatedAt(channel.Id, replyPostTime); result.Err != nil {
t.Fatal(result.Err.Error())
} else {
posts := result.Data.([]*model.Post)
if len(posts) != 1 {
t.Fatal("Unexpected number of posts found.")
}
post := posts[0]
if post.Message != *data.Message || post.CreateAt != *data.CreateAt || post.UserId != user.Id {
t.Fatal("Post properties not as expected")
}
// Check the reply values.
if result := <-th.App.Srv.Store.Post().GetPostsCreatedAt(channel.Id, replyTime); result.Err != nil {
t.Fatal(result.Err.Error())
} else {
replies := result.Data.([]*model.Post)
if len(replies) != 1 {
t.Fatal("Unexpected number of posts found.")
}
reply := replies[0]
if reply.Message != *(*data.Replies)[0].Message || reply.CreateAt != *(*data.Replies)[0].CreateAt || reply.UserId != user2.Id {
t.Fatal("Post properties not as expected")
}
if reply.RootId != post.Id {
t.Fatal("Unexpected reply RootId")
}
}
}
}
func TestImportImportDirectChannel(t *testing.T) {

View file

@ -778,7 +778,10 @@ func (a *App) SetProfileImage(userId string, imageData *multipart.FileHeader) *m
return model.NewAppError("SetProfileImage", "api.user.upload_profile_user.open.app_error", nil, err.Error(), http.StatusBadRequest)
}
defer file.Close()
return a.SetProfileImageFromFile(userId, file)
}
func (a *App) SetProfileImageFromFile(userId string, file multipart.File) *model.AppError {
// Decode image config first to check dimensions before loading the whole thing into memory later on
config, _, err := image.DecodeConfig(file)
if err != nil {

View file

@ -36,7 +36,7 @@ func init() {
resetCmd.Flags().Bool("confirm", false, "Confirm you really want to delete everything and a DB backup has been performed.")
rootCmd.AddCommand(serverCmd, versionCmd, userCmd, teamCmd, licenseCmd, importCmd, resetCmd, channelCmd, rolesCmd, testCmd, ldapCmd, configCmd, jobserverCmd, commandCmd, messageExportCmd)
rootCmd.AddCommand(serverCmd, versionCmd, userCmd, teamCmd, licenseCmd, importCmd, resetCmd, channelCmd, rolesCmd, testCmd, ldapCmd, configCmd, jobserverCmd, commandCmd, messageExportCmd, sampleDataCmd)
}
var rootCmd = &cobra.Command{

628
cmd/platform/sampledata.go Normal file
View file

@ -0,0 +1,628 @@
// Copyright (c) 2016-present Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
package main
import (
"encoding/json"
"errors"
"fmt"
"io/ioutil"
"math/rand"
"os"
"path"
"sort"
"strings"
"time"
"github.com/icrowley/fake"
"github.com/mattermost/mattermost-server/app"
"github.com/spf13/cobra"
)
var sampleDataCmd = &cobra.Command{
Use: "sampledata",
Short: "Generate sample data",
RunE: sampleDataCmdF,
}
func sliceIncludes(vs []string, t string) bool {
for _, v := range vs {
if v == t {
return true
}
}
return false
}
func randomPastTime(seconds int) int64 {
now := time.Now()
today := time.Date(now.Year(), now.Month(), now.Day(), 0, 0, 0, 0, time.FixedZone("UTC", 0))
return today.Unix() - int64(rand.Intn(seconds*1000))
}
func randomEmoji() string {
emojis := []string{"+1", "-1", "heart", "blush"}
return emojis[rand.Intn(len(emojis))]
}
func randomReaction(users []string, parentCreateAt int64) app.ReactionImportData {
user := users[rand.Intn(len(users))]
emoji := randomEmoji()
date := parentCreateAt + int64(rand.Intn(100000))
return app.ReactionImportData{
User: &user,
EmojiName: &emoji,
CreateAt: &date,
}
}
func randomReply(users []string, parentCreateAt int64) app.ReplyImportData {
user := users[rand.Intn(len(users))]
message := randomMessage(users)
date := parentCreateAt + int64(rand.Intn(100000))
return app.ReplyImportData{
User: &user,
Message: &message,
CreateAt: &date,
}
}
func randomMessage(users []string) string {
var message string
switch rand.Intn(30) {
case 0:
mention := users[rand.Intn(len(users))]
message = "@" + mention + " " + fake.Sentence()
case 1:
switch rand.Intn(2) {
case 0:
mattermostVideos := []string{"Q4MgnxbpZas", "BFo7E9-Kc_E", "LsMLR-BHsKg", "MRmGDhlMhNA", "mUOPxT7VgWc"}
message = "https://www.youtube.com/watch?v=" + mattermostVideos[rand.Intn(len(mattermostVideos))]
case 1:
mattermostTweets := []string{"943119062334353408", "949370809528832005", "948539688171819009", "939122439115681792", "938061722027425797"}
message = "https://twitter.com/mattermosthq/status/" + mattermostTweets[rand.Intn(len(mattermostTweets))]
}
case 2:
message = ""
if rand.Intn(2) == 0 {
message += fake.Sentence()
}
for i := 0; i < rand.Intn(4)+1; i++ {
message += "\n * " + fake.Word()
}
default:
if rand.Intn(2) == 0 {
message = fake.Sentence()
} else {
message = fake.Paragraph()
}
if rand.Intn(3) == 0 {
message += "\n" + fake.Sentence()
}
if rand.Intn(3) == 0 {
message += "\n" + fake.Sentence()
}
if rand.Intn(3) == 0 {
message += "\n" + fake.Sentence()
}
}
return message
}
func init() {
sampleDataCmd.Flags().Int64P("seed", "s", 1, "Seed used for generating the random data (Different seeds generate different data).")
sampleDataCmd.Flags().IntP("teams", "t", 2, "The number of sample teams.")
sampleDataCmd.Flags().Int("channels-per-team", 10, "The number of sample channels per team.")
sampleDataCmd.Flags().IntP("users", "u", 15, "The number of sample users.")
sampleDataCmd.Flags().Int("team-memberships", 2, "The number of sample team memberships per user.")
sampleDataCmd.Flags().Int("channel-memberships", 5, "The number of sample channel memberships per user in a team.")
sampleDataCmd.Flags().Int("posts-per-channel", 100, "The number of sample post per channel.")
sampleDataCmd.Flags().Int("direct-channels", 30, "The number of sample direct message channels.")
sampleDataCmd.Flags().Int("posts-per-direct-channel", 15, "The number of sample posts per direct message channel.")
sampleDataCmd.Flags().Int("group-channels", 15, "The number of sample group message channels.")
sampleDataCmd.Flags().Int("posts-per-group-channel", 30, "The number of sample posts per group message channel.")
sampleDataCmd.Flags().IntP("workers", "w", 2, "How many workers to run during the import.")
sampleDataCmd.Flags().String("profile-images", "", "Optional. Path to folder with images to randomly pick as user profile image.")
sampleDataCmd.Flags().StringP("bulk", "b", "", "Optional. Path to write a JSONL bulk file instead of loading into the database.")
}
func sampleDataCmdF(cmd *cobra.Command, args []string) error {
a, err := initDBCommandContextCobra(cmd)
if err != nil {
return err
}
seed, err := cmd.Flags().GetInt64("seed")
if err != nil {
return errors.New("Invalid seed parameter")
}
bulk, err := cmd.Flags().GetString("bulk")
if err != nil {
return errors.New("Invalid bulk parameter")
}
teams, err := cmd.Flags().GetInt("teams")
if err != nil || teams < 0 {
return errors.New("Invalid teams parameter")
}
channelsPerTeam, err := cmd.Flags().GetInt("channels-per-team")
if err != nil || channelsPerTeam < 0 {
return errors.New("Invalid channels-per-team parameter")
}
users, err := cmd.Flags().GetInt("users")
if err != nil || users < 0 {
return errors.New("Invalid users parameter")
}
teamMemberships, err := cmd.Flags().GetInt("team-memberships")
if err != nil || teamMemberships < 0 {
return errors.New("Invalid team-memberships parameter")
}
channelMemberships, err := cmd.Flags().GetInt("channel-memberships")
if err != nil || channelMemberships < 0 {
return errors.New("Invalid channel-memberships parameter")
}
postsPerChannel, err := cmd.Flags().GetInt("posts-per-channel")
if err != nil || postsPerChannel < 0 {
return errors.New("Invalid posts-per-channel parameter")
}
directChannels, err := cmd.Flags().GetInt("direct-channels")
if err != nil || directChannels < 0 {
return errors.New("Invalid direct-channels parameter")
}
postsPerDirectChannel, err := cmd.Flags().GetInt("posts-per-direct-channel")
if err != nil || postsPerDirectChannel < 0 {
return errors.New("Invalid posts-per-direct-channel parameter")
}
groupChannels, err := cmd.Flags().GetInt("group-channels")
if err != nil || groupChannels < 0 {
return errors.New("Invalid group-channels parameter")
}
postsPerGroupChannel, err := cmd.Flags().GetInt("posts-per-group-channel")
if err != nil || postsPerGroupChannel < 0 {
return errors.New("Invalid posts-per-group-channel parameter")
}
workers, err := cmd.Flags().GetInt("workers")
if err != nil {
return errors.New("Invalid workers parameter")
}
profileImagesPath, err := cmd.Flags().GetString("profile-images")
if err != nil {
return errors.New("Invalid profile-images parameter")
}
profileImages := []string{}
if profileImagesPath != "" {
profileImagesStat, err := os.Stat(profileImagesPath)
if os.IsNotExist(err) {
return errors.New("Profile images folder doesn't exists.")
}
if !profileImagesStat.IsDir() {
return errors.New("profile-images parameters must be a folder path.")
}
profileImagesFiles, err := ioutil.ReadDir(profileImagesPath)
if err != nil {
return errors.New("Invalid profile-images parameter")
}
for _, profileImage := range profileImagesFiles {
profileImages = append(profileImages, path.Join(profileImagesPath, profileImage.Name()))
}
sort.Strings(profileImages)
}
if workers < 1 {
return errors.New("You must have at least one worker.")
}
if teamMemberships > teams {
return errors.New("You can't have more team memberships than teams.")
}
if channelMemberships > channelsPerTeam {
return errors.New("You can't have more channel memberships than channels per team.")
}
var bulkFile *os.File
switch bulk {
case "":
bulkFile, err = ioutil.TempFile("", ".mattermost-sample-data-")
defer os.Remove(bulkFile.Name())
if err != nil {
return errors.New("Unable to open temporary file.")
}
case "-":
bulkFile = os.Stdout
default:
bulkFile, err = os.OpenFile(bulk, os.O_RDWR|os.O_CREATE, 0755)
if err != nil {
return errors.New("Unable to write into the \"" + bulk + "\" file.")
}
}
encoder := json.NewEncoder(bulkFile)
version := 1
encoder.Encode(app.LineImportData{Type: "version", Version: &version})
fake.Seed(seed)
rand.Seed(seed)
teamsAndChannels := make(map[string][]string)
for i := 0; i < teams; i++ {
teamLine := createTeam(i)
teamsAndChannels[*teamLine.Team.Name] = []string{}
encoder.Encode(teamLine)
}
teamsList := []string{}
for teamName := range teamsAndChannels {
teamsList = append(teamsList, teamName)
}
sort.Strings(teamsList)
for _, teamName := range teamsList {
for i := 0; i < channelsPerTeam; i++ {
channelLine := createChannel(i, teamName)
teamsAndChannels[teamName] = append(teamsAndChannels[teamName], *channelLine.Channel.Name)
encoder.Encode(channelLine)
}
}
allUsers := []string{}
for i := 0; i < users; i++ {
userLine := createUser(i, teamMemberships, channelMemberships, teamsAndChannels, profileImages)
encoder.Encode(userLine)
allUsers = append(allUsers, *userLine.User.Username)
}
for team, channels := range teamsAndChannels {
for _, channel := range channels {
for i := 0; i < postsPerChannel; i++ {
postLine := createPost(team, channel, allUsers)
encoder.Encode(postLine)
}
}
}
for i := 0; i < directChannels; i++ {
user1 := allUsers[rand.Intn(len(allUsers))]
user2 := allUsers[rand.Intn(len(allUsers))]
channelLine := createDirectChannel([]string{user1, user2})
encoder.Encode(channelLine)
for j := 0; j < postsPerDirectChannel; j++ {
postLine := createDirectPost([]string{user1, user2})
encoder.Encode(postLine)
}
}
for i := 0; i < groupChannels; i++ {
users := []string{}
totalUsers := 3 + rand.Intn(3)
for len(users) < totalUsers {
user := allUsers[rand.Intn(len(allUsers))]
if !sliceIncludes(users, user) {
users = append(users, user)
}
}
channelLine := createDirectChannel(users)
encoder.Encode(channelLine)
for j := 0; j < postsPerGroupChannel; j++ {
postLine := createDirectPost(users)
encoder.Encode(postLine)
}
}
if bulk == "" {
_, err := bulkFile.Seek(0, 0)
if err != nil {
return errors.New("Unable to read correctly the temporary file.")
}
importErr, lineNumber := a.BulkImport(bulkFile, false, workers)
if importErr != nil {
return errors.New(fmt.Sprintf("%s: %s, %s (line: %d)", importErr.Where, importErr.Message, importErr.DetailedError, lineNumber))
}
} else if bulk != "-" {
err := bulkFile.Close()
if err != nil {
return errors.New("Unable to close correctly the output file")
}
}
return nil
}
func createUser(idx int, teamMemberships int, channelMemberships int, teamsAndChannels map[string][]string, profileImages []string) app.LineImportData {
password := fmt.Sprintf("user-%d", idx)
email := fmt.Sprintf("user-%d@sample.mattermost.com", idx)
firstName := fake.FirstName()
lastName := fake.LastName()
username := fmt.Sprintf("%s.%s", strings.ToLower(firstName), strings.ToLower(lastName))
position := fake.JobTitle()
roles := "system_user"
if idx%5 == 0 {
roles = "system_admin system_user"
}
// The 75% of the users have custom profile image
var profileImage *string = nil
if rand.Intn(4) != 0 {
profileImageSelector := rand.Int()
if len(profileImages) > 0 {
profileImage = &profileImages[profileImageSelector%len(profileImages)]
}
}
useMilitaryTime := "false"
if rand.Intn(2) == 0 {
useMilitaryTime = "true"
}
collapsePreviews := "false"
if rand.Intn(2) == 0 {
collapsePreviews = "true"
}
messageDisplay := "clean"
if rand.Intn(2) == 0 {
messageDisplay = "compact"
}
channelDisplayMode := "full"
if rand.Intn(2) == 0 {
channelDisplayMode = "centered"
}
// Some users has nickname
nickname := ""
if rand.Intn(5) == 0 {
nickname = fake.Company()
}
// Half of users skip tutorial
tutorialStep := "999"
switch rand.Intn(6) {
case 1:
tutorialStep = "1"
case 2:
tutorialStep = "2"
case 3:
tutorialStep = "3"
}
teams := []app.UserTeamImportData{}
possibleTeams := []string{}
for teamName := range teamsAndChannels {
possibleTeams = append(possibleTeams, teamName)
}
sort.Strings(possibleTeams)
for x := 0; x < teamMemberships; x++ {
if len(possibleTeams) == 0 {
break
}
position := rand.Intn(len(possibleTeams))
team := possibleTeams[position]
possibleTeams = append(possibleTeams[:position], possibleTeams[position+1:]...)
if teamChannels, err := teamsAndChannels[team]; err == true {
teams = append(teams, createTeamMembership(channelMemberships, teamChannels, &team))
}
}
user := app.UserImportData{
ProfileImage: profileImage,
Username: &username,
Email: &email,
Password: &password,
Nickname: &nickname,
FirstName: &firstName,
LastName: &lastName,
Position: &position,
Roles: &roles,
Teams: &teams,
UseMilitaryTime: &useMilitaryTime,
CollapsePreviews: &collapsePreviews,
MessageDisplay: &messageDisplay,
ChannelDisplayMode: &channelDisplayMode,
TutorialStep: &tutorialStep,
}
return app.LineImportData{
Type: "user",
User: &user,
}
}
func createTeamMembership(numOfchannels int, teamChannels []string, teamName *string) app.UserTeamImportData {
roles := "team_user"
if rand.Intn(5) == 0 {
roles = "team_user team_admin"
}
channels := []app.UserChannelImportData{}
teamChannelsCopy := []string{}
for _, value := range teamChannels {
teamChannelsCopy = append(teamChannelsCopy, value)
}
for x := 0; x < numOfchannels; x++ {
if len(teamChannelsCopy) == 0 {
break
}
position := rand.Intn(len(teamChannelsCopy))
channelName := teamChannelsCopy[position]
teamChannelsCopy = append(teamChannelsCopy[:position], teamChannelsCopy[position+1:]...)
channels = append(channels, createChannelMembership(channelName))
}
return app.UserTeamImportData{
Name: teamName,
Roles: &roles,
Channels: &channels,
}
}
func createChannelMembership(channelName string) app.UserChannelImportData {
roles := "channel_user"
if rand.Intn(5) == 0 {
roles = "channel_user channel_admin"
}
favorite := rand.Intn(5) == 0
return app.UserChannelImportData{
Name: &channelName,
Roles: &roles,
Favorite: &favorite,
}
}
func createTeam(idx int) app.LineImportData {
displayName := fake.Word()
name := fmt.Sprintf("%s-%d", fake.Word(), idx)
allowOpenInvite := rand.Intn(2) == 0
description := fake.Paragraph()
if len(description) > 255 {
description = description[0:255]
}
teamType := "O"
if rand.Intn(2) == 0 {
teamType = "I"
}
team := app.TeamImportData{
DisplayName: &displayName,
Name: &name,
AllowOpenInvite: &allowOpenInvite,
Description: &description,
Type: &teamType,
}
return app.LineImportData{
Type: "team",
Team: &team,
}
}
func createChannel(idx int, teamName string) app.LineImportData {
displayName := fake.Word()
name := fmt.Sprintf("%s-%d", fake.Word(), idx)
header := fake.Paragraph()
purpose := fake.Paragraph()
if len(purpose) > 250 {
purpose = purpose[0:250]
}
channelType := "P"
if rand.Intn(2) == 0 {
channelType = "O"
}
channel := app.ChannelImportData{
Team: &teamName,
Name: &name,
DisplayName: &displayName,
Type: &channelType,
Header: &header,
Purpose: &purpose,
}
return app.LineImportData{
Type: "channel",
Channel: &channel,
}
}
func createPost(team string, channel string, allUsers []string) app.LineImportData {
message := randomMessage(allUsers)
create_at := randomPastTime(50000)
user := allUsers[rand.Intn(len(allUsers))]
// Some messages are flagged by an user
flagged_by := []string{}
if rand.Intn(10) == 0 {
flagged_by = append(flagged_by, allUsers[rand.Intn(len(allUsers))])
}
reactions := []app.ReactionImportData{}
if rand.Intn(10) == 0 {
for {
reactions = append(reactions, randomReaction(allUsers, create_at))
if rand.Intn(3) == 0 {
break
}
}
}
replies := []app.ReplyImportData{}
if rand.Intn(10) == 0 {
for {
replies = append(replies, randomReply(allUsers, create_at))
if rand.Intn(4) == 0 {
break
}
}
}
post := app.PostImportData{
Team: &team,
Channel: &channel,
User: &user,
Message: &message,
CreateAt: &create_at,
FlaggedBy: &flagged_by,
Reactions: &reactions,
Replies: &replies,
}
return app.LineImportData{
Type: "post",
Post: &post,
}
}
func createDirectChannel(members []string) app.LineImportData {
header := fake.Sentence()
channel := app.DirectChannelImportData{
Members: &members,
Header: &header,
}
return app.LineImportData{
Type: "direct_channel",
DirectChannel: &channel,
}
}
func createDirectPost(members []string) app.LineImportData {
message := randomMessage(members)
create_at := randomPastTime(50000)
user := members[rand.Intn(len(members))]
// Some messages are flagged by an user
flagged_by := []string{}
if rand.Intn(10) == 0 {
flagged_by = append(flagged_by, members[rand.Intn(len(members))])
}
reactions := []app.ReactionImportData{}
if rand.Intn(10) == 0 {
for {
reactions = append(reactions, randomReaction(members, create_at))
if rand.Intn(3) == 0 {
break
}
}
}
replies := []app.ReplyImportData{}
if rand.Intn(10) == 0 {
for {
replies = append(replies, randomReply(members, create_at))
if rand.Intn(4) == 0 {
break
}
}
}
post := app.DirectPostImportData{
ChannelMembers: &members,
User: &user,
Message: &message,
CreateAt: &create_at,
FlaggedBy: &flagged_by,
Reactions: &reactions,
Replies: &replies,
}
return app.LineImportData{
Type: "direct_post",
DirectPost: &post,
}
}

View file

@ -0,0 +1,25 @@
// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
package main
import (
"testing"
"github.com/mattermost/mattermost-server/api"
"github.com/stretchr/testify/require"
)
func TestSampledataBadParameters(t *testing.T) {
th := api.Setup().InitBasic()
defer th.TearDown()
// should fail because you need at least 1 worker
require.Error(t, runCommand(t, "sampledata", "--workers", "0"))
// should fail because you have more team memberships than teams
require.Error(t, runCommand(t, "sampledata", "--teams", "10", "--teams-memberships", "11"))
// should fail because you have more channel memberships than channels per team
require.Error(t, runCommand(t, "sampledata", "--channels-per-team", "10", "--channel-memberships", "11"))
}

10
glide.lock generated
View file

@ -1,5 +1,5 @@
hash: 247f32b2f130a845591b5e1b573ae301517d0e5275dd17678969917155dd1c61
updated: 2017-11-10T12:37:36.496151071-08:00
hash: fa27dd8f4fd1b15c505a3d6f2023662471391e4a3ea22e67c829376c7e6e90c8
updated: 2018-01-05T10:08:00.418197689+01:00
imports:
- name: github.com/alecthomas/log4go
version: 3fbce08846379ec7f4f6bc7fce6dd01ce28fae4c
@ -10,6 +10,8 @@ imports:
version: 4c0e84591b9aa9e6dcfdf3e020114cd81f89d5f9
subpackages:
- quantile
- name: github.com/corpix/uarand
version: 2b8494104d86337cdd41d0a49cbed8e4583c0ab4
- name: github.com/cpanato/html2text
version: d47a5532a7bc36ad7b2b8ec3eebe24e975154f94
- name: github.com/davecgh/go-spew
@ -88,6 +90,8 @@ imports:
- json/token
- name: github.com/hashicorp/memberlist
version: caa5d20d6a642b7543b3745e54031a96008bee57
- name: github.com/icrowley/fake
version: e64cc2cf92049a299f359734c6ea76073f2a8b2c
- name: github.com/inconshreveable/mousetrap
version: 76626ae9c91c4f2a10f34cad8ce83ea42c93bb75
- name: github.com/jehiah/go-strftime
@ -117,7 +121,7 @@ imports:
subpackages:
- internal/socket
- name: github.com/minio/go-homedir
version: 21304a94172ae3a09dee2cd86a12fb6f842138c7
version: 4d76aabb80b22bad8695d3904e943f1fb5e6199f
- name: github.com/minio/minio-go
version: 4e0f567303d4cc90ceb055a451959fb9fc391fb9
subpackages:

View file

@ -94,3 +94,4 @@ import:
- package: gopkg.in/gomail.v2
version: 2.0.0
- package: github.com/mattermost/html2text
- package: github.com/icrowley/fake

View file

@ -3342,6 +3342,54 @@
"id": "app.import.validate_direct_post_import_data.user_missing.error",
"translation": "Missing required direct post property: user"
},
{
"id": "app.import.validate_reaction_import_data.user_missing.error",
"translation": "Missing required Reaction property: User."
},
{
"id": "app.import.validate_reaction_import_data.emoji_name_missing.error",
"translation": "Missing required Reaction property: EmojiName."
},
{
"id": "app.import.validate_reaction_import_data.emoji_name_length.error",
"translation": "Reaction EmojiName property is longer than the maximum permitted length."
},
{
"id": "app.import.validate_reaction_import_data.create_at_missing.error",
"translation": "Missing required Reaction property: create_at."
},
{
"id": "app.import.validate_reaction_import_data.create_at_zero.error",
"translation": "Reaction CreateAt property must not be zero."
},
{
"id": "app.import.validate_reaction_import_data.create_at_before_parent.error",
"translation": "Reactoin CreateAt property must be greater than the parent post CreateAt."
},
{
"id": "app.import.validate_reply_import_data.user_missing.error",
"translation": "Missing required Reply property: User."
},
{
"id": "app.import.validate_reply_import_data.message_missing.error",
"translation": "Missing required Reply property: Message."
},
{
"id": "app.import.validate_reply_import_data.message_length.error",
"translation": "Reply Message property is longer than the maximum permitted length."
},
{
"id": "app.import.validate_reply_import_data.create_at_missing.error",
"translation": "Missing required Reply property: create_at."
},
{
"id": "app.import.validate_reply_import_data.create_at_zero.error",
"translation": "Reply CreateAt property must not be zero."
},
{
"id": "app.import.validate_reply_import_data.create_at_before_parent.error",
"translation": "Reply CreateAt property must be greater than the parent post CreateAt."
},
{
"id": "app.import.validate_post_import_data.channel_missing.error",
"translation": "Missing required Post property: Channel."
@ -3352,7 +3400,7 @@
},
{
"id": "app.import.validate_post_import_data.create_at_zero.error",
"translation": "Post CreateAt property must not be zero if provided."
"translation": "Post CreateAt property must not be zero."
},
{
"id": "app.import.validate_post_import_data.message_length.error",
@ -3518,6 +3566,10 @@
"id": "app.import.validate_user_import_data.username_missing.error",
"translation": "Missing require user property: username."
},
{
"id": "app.import.validate_user_import_data.profile_image.error",
"translation": "Invalid profile image."
},
{
"id": "app.import.validate_user_teams_import_data.invalid_roles.error",
"translation": "Invalid roles for User's Team Membership."

View file

@ -9,6 +9,10 @@ import (
"net/http"
)
const (
EMOJI_NAME_MAX_LENGTH = 64
)
type Emoji struct {
Id string `json:"id"`
CreateAt int64 `json:"create_at"`
@ -35,7 +39,7 @@ func (emoji *Emoji) IsValid() *AppError {
return NewAppError("Emoji.IsValid", "model.emoji.user_id.app_error", nil, "", http.StatusBadRequest)
}
if len(emoji.Name) == 0 || len(emoji.Name) > 64 || !IsValidAlphaNumHyphenUnderscore(emoji.Name, false) {
if len(emoji.Name) == 0 || len(emoji.Name) > EMOJI_NAME_MAX_LENGTH || !IsValidAlphaNumHyphenUnderscore(emoji.Name, false) {
return NewAppError("Emoji.IsValid", "model.emoji.name.app_error", nil, "", http.StatusBadRequest)
}

View file

@ -64,7 +64,7 @@ func (o *Reaction) IsValid() *AppError {
validName := regexp.MustCompile(`^[a-zA-Z0-9\-\+_]+$`)
if len(o.EmojiName) == 0 || len(o.EmojiName) > 64 || !validName.MatchString(o.EmojiName) {
if len(o.EmojiName) == 0 || len(o.EmojiName) > EMOJI_NAME_MAX_LENGTH || !validName.MatchString(o.EmojiName) {
return NewAppError("Reaction.IsValid", "model.reaction.is_valid.emoji_name.app_error", nil, "emoji_name="+o.EmojiName, http.StatusBadRequest)
}

3
vendor/github.com/corpix/uarand/.gitignore generated vendored Normal file
View file

@ -0,0 +1,3 @@
/build
/vendor
*~

11
vendor/github.com/corpix/uarand/.go-makefile.json generated vendored Normal file
View file

@ -0,0 +1,11 @@
{
"build_id_generator": "0x$(shell echo $(version) | sha1sum | awk '{print $$1}')",
"host": "github.com",
"include": ["useragents.mk"],
"kind": "package",
"name": "uarand",
"tool": [],
"user": "corpix",
"version_generator": "$(shell git rev-list --count HEAD).$(shell git rev-parse --short HEAD)",
"version_variable": "cli.version"
}

9
vendor/github.com/corpix/uarand/.travis.yml generated vendored Normal file
View file

@ -0,0 +1,9 @@
language: go
go:
- 1.6
- 1.7
- 1.8
- master
script: make test

21
vendor/github.com/corpix/uarand/LICENSE generated vendored Normal file
View file

@ -0,0 +1,21 @@
The MIT License (MIT)
Copyright © 2017 Dmitry Moskowski
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.

52
vendor/github.com/corpix/uarand/Makefile generated vendored Normal file
View file

@ -0,0 +1,52 @@
.DEFAULT_GOAL = all
numcpus := $(shell cat /proc/cpuinfo | grep '^processor\s*:' | wc -l)
version := $(shell git rev-list --count HEAD).$(shell git rev-parse --short HEAD)
name := uarand
package := github.com/corpix/$(name)
.PHONY: all
all:: dependencies
.PHONY: tools
tools::
@if [ ! -e "$(GOPATH)"/bin/glide ]; then go get github.com/Masterminds/glide; fi
@if [ ! -e "$(GOPATH)"/bin/glide-cleanup ]; then go get github.com/ngdinhtoan/glide-cleanup; fi
@if [ ! -e "$(GOPATH)"/bin/glide-vc ]; then go get github.com/sgotti/glide-vc; fi
@if [ ! -e "$(GOPATH)"/bin/godef ]; then go get github.com/rogpeppe/godef; fi
@if [ ! -e "$(GOPATH)"/bin/gocode ]; then go get github.com/nsf/gocode; fi
@if [ ! -e "$(GOPATH)"/bin/gometalinter ]; then go get github.com/alecthomas/gometalinter && gometalinter --install; fi
@if [ ! -e "$(GOPATH)"/src/github.com/stretchr/testify/assert ]; then go get github.com/stretchr/testify/assert; fi
.PHONY: dependencies
dependencies:: tools
glide install
.PHONY: clean
clean:: tools
glide cache-clear
.PHONY: test
test:: dependencies
go test -v \
$(shell glide novendor)
.PHONY: bench
bench:: dependencies
go test \
-bench=. -v \
$(shell glide novendor)
.PHONY: lint
lint:: dependencies
go vet $(shell glide novendor)
gometalinter \
--deadline=5m \
--concurrency=$(numcpus) \
$(shell glide novendor)
.PHONY: check
check:: lint test
include useragents.mk

38
vendor/github.com/corpix/uarand/README.md generated vendored Normal file
View file

@ -0,0 +1,38 @@
uarand
----------------
[![Build Status](https://travis-ci.org/corpix/uarand.svg?branch=master)](https://travis-ci.org/corpix/uarand)
Random user-agent producer for go.
## Example
``` go
package main
import (
"fmt"
"github.com/corpix/uarand"
)
func main() {
fmt.Println(uarand.GetRandom())
}
```
Save it to `snippet.go` and run:
``` shell
go run snippet.go
```
Which should produce something similar to:
``` text
Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2227.0 Safari/537.36
```
## License
MIT

16
vendor/github.com/corpix/uarand/glide.lock generated vendored Normal file
View file

@ -0,0 +1,16 @@
hash: 400dee10adae21284f2563cb7178f4b5a30e69c9ed3954a5a32a8a618d5bdfeb
updated: 2017-07-12T21:00:19.452016303Z
imports: []
testImports:
- name: github.com/davecgh/go-spew
version: 6d212800a42e8ab5c146b8ace3490ee17e5225f9
subpackages:
- spew
- name: github.com/pmezard/go-difflib
version: d8ed2627bdf02c080bf22230dbb337003b7aba2d
subpackages:
- difflib
- name: github.com/stretchr/testify
version: 69483b4bd14f5845b5a1e55bca19e954e827f1d0
subpackages:
- assert

7
vendor/github.com/corpix/uarand/glide.yaml generated vendored Normal file
View file

@ -0,0 +1,7 @@
package: github.com/corpix/uarand
import: []
testImport:
- package: github.com/stretchr/testify
version: v1.1.4
subpackages:
- assert

22
vendor/github.com/corpix/uarand/scripts/extract-user-agents generated vendored Executable file
View file

@ -0,0 +1,22 @@
#!/usr/bin/env python3
import sys
import xml.etree.ElementTree as XML
from argparse import ArgumentParser
if __name__ == "__main__":
p = ArgumentParser(
description=(
"Expects XML from "
"http://techpatterns.com/downloads/firefox/useragentswitcher.xml "
"to be passed into STDIN and outputs user agents from this XML."
)
)
p.parse_args()
sys.stderr.write("Reading stdin...\n")
doc = XML.iterparse(sys.stdin)
for _, node in doc:
ua = node.get("useragent")
if ua != "" and ua is not None:
print(ua)

View file

@ -0,0 +1,50 @@
#!/usr/bin/env python3
import sys
from os.path import exists, expanduser
from argparse import ArgumentParser
header = """package {package}
var (
\t// UserAgents is a list of browser and bots user agents.
\tUserAgents = []string{{
"""
item = """\t\t"{content}",\n"""
footer = """\t}}
)\n
"""
if __name__ == "__main__":
p = ArgumentParser(
description=(
"Expects a list of user agents delimited by new line character "
"to be passed into STDIN and generates go code with this data."
)
)
p.add_argument(
"package",
help="Go package name to use",
default="uarand"
)
args = p.parse_args().__dict__
params = args.copy()
sys.stderr.write("Reading stdin...\n")
sys.stdout.write(
header.format(**params)
)
for line in sys.stdin:
sys.stdout.write(
item.format(
content=line.strip(),
**params
)
)
sys.stdout.write(
footer.format(**params)
)

41
vendor/github.com/corpix/uarand/uarand.go generated vendored Normal file
View file

@ -0,0 +1,41 @@
package uarand
import (
"math/rand"
"time"
)
var (
// Default is the UARand with default settings.
Default = New(
rand.New(
rand.NewSource(time.Now().UnixNano()),
),
)
)
// Randomizer represents some entity which could provide us an entropy.
type Randomizer interface {
Seed(n int64)
Intn(n int) int
}
// UARand describes the user agent randomizer settings.
type UARand struct {
Randomizer
}
// GetRandom returns a random user agent from UserAgents slice.
func (u *UARand) GetRandom() string {
return UserAgents[u.Intn(len(UserAgents))]
}
// GetRandom returns a random user agent from UserAgents slice.
// This version is driven by Default configuration.
func GetRandom() string {
return Default.GetRandom()
}
func New(r Randomizer) *UARand {
return &UARand{r}
}

13
vendor/github.com/corpix/uarand/uarand_test.go generated vendored Normal file
View file

@ -0,0 +1,13 @@
package uarand
import (
"testing"
"github.com/stretchr/testify/assert"
)
func TestGetRandom(t *testing.T) {
for k := 0; k < len(UserAgents)*10; k++ {
assert.NotEqual(t, "", GetRandom())
}
}

829
vendor/github.com/corpix/uarand/useragents.go generated vendored Normal file
View file

@ -0,0 +1,829 @@
package uarand
var (
// UserAgents is a list of browser and bots user agents.
UserAgents = []string{
"Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US) AppleWebKit/527 (KHTML, like Gecko, Safari/419.3) Arora/0.6 (Change: )",
"Avant Browser/1.2.789rel1 (http://www.avantbrowser.com)",
"Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/532.5 (KHTML, like Gecko) Chrome/4.0.249.0 Safari/532.5",
"Mozilla/5.0 (Windows; U; Windows NT 5.2; en-US) AppleWebKit/532.9 (KHTML, like Gecko) Chrome/5.0.310.0 Safari/532.9",
"Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/534.7 (KHTML, like Gecko) Chrome/7.0.514.0 Safari/534.7",
"Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US) AppleWebKit/534.14 (KHTML, like Gecko) Chrome/9.0.601.0 Safari/534.14",
"Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/534.14 (KHTML, like Gecko) Chrome/10.0.601.0 Safari/534.14",
"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/534.27 (KHTML, like Gecko) Chrome/12.0.712.0 Safari/534.27",
"Mozilla/5.0 (Windows NT 6.0) AppleWebKit/535.2 (KHTML, like Gecko) Chrome/15.0.874.120 Safari/535.2",
"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.7 (KHTML, like Gecko) Chrome/16.0.912.36 Safari/535.7",
"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/535.2 (KHTML, like Gecko) Chrome/18.6.872.0 Safari/535.2 UNTRUSTED/1.0 3gpp-gba UNTRUSTED/1.0",
"Mozilla/5.0 (Windows NT 6.2) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1061.1 Safari/536.3",
"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.6 (KHTML, like Gecko) Chrome/20.0.1092.0 Safari/536.6",
"Mozilla/5.0 (Windows NT 6.2) AppleWebKit/536.6 (KHTML, like Gecko) Chrome/20.0.1090.0 Safari/536.6",
"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/22.0.1207.1 Safari/537.1",
"Mozilla/5.0 (Windows; U; Windows NT 6.0 x64; en-US; rv:1.9pre) Gecko/2008072421 Minefield/3.0.2pre",
"Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10",
"Mozilla/5.0 (Windows; U; Windows NT 6.0; en-GB; rv:1.9.0.11) Gecko/2009060215 Firefox/3.0.11 (.NET CLR 3.5.30729)",
"Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.9.1.6) Gecko/20091201 Firefox/3.5.6 GTB5",
"Mozilla/5.0 (Windows; U; Windows NT 5.1; tr; rv:1.9.2.8) Gecko/20100722 Firefox/3.6.8 ( .NET CLR 3.5.30729; .NET4.0E)",
"Mozilla/5.0 (Windows NT 6.1; rv:2.0.1) Gecko/20100101 Firefox/4.0.1",
"Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:2.0.1) Gecko/20100101 Firefox/4.0.1",
"Mozilla/5.0 (Windows NT 5.1; rv:5.0) Gecko/20100101 Firefox/5.0",
"Mozilla/5.0 (Windows NT 6.1; WOW64; rv:6.0a2) Gecko/20110622 Firefox/6.0a2",
"Mozilla/5.0 (Windows NT 6.1; WOW64; rv:7.0.1) Gecko/20100101 Firefox/7.0.1",
"Mozilla/5.0 (Windows NT 6.1; WOW64; rv:10.0.1) Gecko/20100101 Firefox/10.0.1",
"Mozilla/5.0 (Windows NT 6.1; rv:12.0) Gecko/20120403211507 Firefox/12.0",
"Mozilla/5.0 (Windows NT 6.0; rv:14.0) Gecko/20100101 Firefox/14.0.1",
"Mozilla/5.0 (Windows NT 6.1; WOW64; rv:15.0) Gecko/20120427 Firefox/15.0a1",
"Mozilla/5.0 (Windows NT 6.2; Win64; x64; rv:16.0) Gecko/16.0 Firefox/16.0",
"Mozilla/5.0 (Windows NT 6.2; rv:19.0) Gecko/20121129 Firefox/19.0",
"Mozilla/5.0 (Windows NT 6.2; rv:20.0) Gecko/20121202 Firefox/20.0",
"Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; Maxthon 2.0)",
"Mozilla/5.0 (Windows NT 6.1; WOW64; rv:2.0b4pre) Gecko/20100815 Minefield/4.0b4pre",
"Mozilla/4.0 (compatible; MSIE 5.5; Windows NT 5.0 )",
"Mozilla/4.0 (compatible; MSIE 5.5; Windows 98; Win 9x 4.90)",
"Mozilla/5.0 (Windows; U; Windows XP) Gecko MultiZilla/1.6.1.0a",
"Mozilla/2.02E (Win95; U)",
"Mozilla/3.01Gold (Win95; I)",
"Mozilla/4.8 [en] (Windows NT 5.1; U)",
"Mozilla/5.0 (Windows; U; Win98; en-US; rv:1.4) Gecko Netscape/7.1 (ax)",
"Opera/7.50 (Windows XP; U)",
"Opera/7.50 (Windows ME; U) [en]",
"Opera/7.51 (Windows NT 5.1; U) [en]",
"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; en) Opera 8.0",
"Opera/9.25 (Windows NT 6.0; U; en)",
"Opera/9.80 (Windows NT 5.2; U; en) Presto/2.2.15 Version/10.10",
"Opera/9.80 (Windows NT 5.1; U; zh-tw) Presto/2.8.131 Version/11.10",
"Opera/9.80 (Windows NT 6.1; U; en) Presto/2.7.62 Version/11.01",
"Opera/9.80 (Windows NT 6.1; U; es-ES) Presto/2.9.181 Version/12.00",
"Opera/9.80 (Windows NT 6.0) Presto/2.12.388 Version/12.14",
"Mozilla/5.0 (Windows; U; WinNT4.0; en-US; rv:1.2b) Gecko/20021001 Phoenix/0.2",
"Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/531.21.8 (KHTML, like Gecko) Version/4.0.4 Safari/531.21.10",
"Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.23) Gecko/20090825 SeaMonkey/1.1.18",
"Mozilla/5.0 (Windows; U; Windows NT 6.1; en-GB; rv:1.9.1.17) Gecko/20110123 (like Firefox/3.x) SeaMonkey/2.0.12",
"Mozilla/5.0 (Windows NT 5.2; rv:10.0.1) Gecko/20100101 Firefox/10.0.1 SeaMonkey/2.7.1",
"Mozilla/5.0 (Windows; U; ; en-NZ) AppleWebKit/527 (KHTML, like Gecko, Safari/419.3) Arora/0.8.0",
"Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Avant Browser; Avant Browser; .NET CLR 1.0.3705; .NET CLR 1.1.4322; Media Center PC 4.0; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30)",
"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.8 (KHTML, like Gecko) Beamrise/17.2.0.9 Chrome/17.0.939.0 Safari/535.8",
"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML like Gecko) Chrome/28.0.1469.0 Safari/537.36",
"Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML like Gecko) Chrome/28.0.1469.0 Safari/537.36",
"Mozilla/5.0 (Windows NT 6.2; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1667.0 Safari/537.36",
"Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.67 Safari/537.36",
"Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2049.0 Safari/537.36",
"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36",
"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.93 Safari/537.36",
"Mozilla/5.0 (Windows NT 6.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.93 Safari/537.36",
"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36",
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2869.0 Safari/537.36",
"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.133 AOL/11.0 AOLBUILD/11.0.1305 Safari/537.36",
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3191.0 Safari/537.36",
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.71 Safari/537.36 Edge/12.0",
"Mozilla/5.0 (Windows NT 10.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.135 Safari/537.36 Edge/12.10240",
"Mozilla/5.0 (MSIE 9.0; Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.79 Safari/537.36 Edge/14.14931",
"Mozilla/5.0 (Windows NT 10.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36 Edge/15.15063",
"Mozilla/5.0 (Windows NT 6.1; rv:21.0) Gecko/20130401 Firefox/21.0",
"Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:25.0) Gecko/20100101 Firefox/25.0",
"Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:25.0) Gecko/20100101 Firefox/29.0",
"Mozilla/5.0 (Windows NT 5.1; rv:31.0) Gecko/20100101 Firefox/31.0",
"Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:35.0) Gecko/20100101 Firefox/35.0",
"Mozilla/5.0 (Windows NT 6.3; rv:36.0) Gecko/20100101 Firefox/36.0",
"Mozilla/5.0 (Windows NT 6.2; WOW64; rv:39.0) Gecko/20100101 Firefox/39.0",
"Mozilla/5.0 (Windows NT 6.0; WOW64; rv:40.0) Gecko/20100101 Firefox/40.0",
"Mozilla/5.0 (Windows NT 10.0; WOW64; rv:40.0) Gecko/20100101 Firefox/40.0",
"Mozilla/5.0 (Windows NT 10.0; WOW64; rv:47.0) Gecko/20100101 Firefox/47.0",
"Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:52.0) Gecko/20100101 Firefox/52.0",
"Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:57.0) Gecko/20100101 Firefox/57.0",
"iTunes/9.0.2 (Windows; N)",
"Mozilla/5.0 (compatible; Konqueror/4.5; Windows) KHTML/4.5.4 (like Gecko)",
"Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US) AppleWebKit/533.1 (KHTML, like Gecko) Maxthon/3.0.8.2 Safari/533.1",
"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML like Gecko) Maxthon/4.0.0.2000 Chrome/22.0.1229.79 Safari/537.1",
"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Maxthon/4.4.6.1000 Chrome/30.0.1599.101 Safari/537.36",
"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Maxthon/5.0.4.3000 Chrome/47.0.2526.73 Safari/537.36",
"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)",
"Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0)",
"Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR 2.0.50727; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)",
"Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0)",
"Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; Trident/4.0)",
"Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident/4.0)",
"Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; Trident/5.0)",
"Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)",
"Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.2; Trident/5.0)",
"Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.2; WOW64; Trident/5.0)",
"Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0; SLCC2; Media Center PC 6.0; InfoPath.3; MS-RTC LM 8; Zune 4.7)",
"Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; WOW64; Trident/6.0)",
"Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Trident/6.0)",
"Mozilla/5.0 (compatible; MSIE 10.6; Windows NT 6.1; Trident/5.0; InfoPath.2; SLCC1; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; .NET CLR 2.0.50727) 3gpp-gba UNTRUSTED/1.0",
"Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko",
"Mozilla/5.0 (Windows NT 6.3; Trident/7.0; rv:11.0) like Gecko",
"Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.3; Trident/7.0; .NET4.0E; .NET4.0C)",
"Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) MxBrowser/4.5.10.7000 Chrome/30.0.1551.0 Safari/537.36",
"Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; MATBJS; rv:11.0) like Gecko",
"Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; Touch; MALNJS; rv:11.0) like Gecko",
"Opera/9.80 (Windows NT 6.1; WOW64) Presto/2.12.388 Version/12.16",
"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.12 Safari/537.36 OPR/14.0.1116.4",
"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.29 Safari/537.36 OPR/15.0.1147.24 (Edition Next)",
"Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.57 Safari/537.36 OPR/18.0.1284.49",
"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1700.76 Safari/537.36 OPR/19.0.1326.56",
"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/33.0.1750.154 Safari/537.36 OPR/20.0.1387.91",
"Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.76 Safari/537.36 OPR/28.0.1750.40",
"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.155 Safari/537.36 OPR/31.0.1889.174",
"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.87 Safari/537.36 OPR/36.0.2130.46",
"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.78 Safari/537.36 OPR/47.0.2631.55",
"Mozilla/5.0 (Windows NT 10.0; rv:45.9) Gecko/20100101 Goanna/3.2 Firefox/45.9 PaleMoon/27.4.0",
"Mozilla/5.0 (Windows; U; Windows NT 5.2; en-US) AppleWebKit/533.17.8 (KHTML, like Gecko) Version/5.0.1 Safari/533.17.8",
"Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/533.19.4 (KHTML, like Gecko) Version/5.0.2 Safari/533.18.5",
"Mozilla/5.0 (Windows; U; Windows NT 6.2; es-US ) AppleWebKit/540.0 (KHTML like Gecko) Version/6.0 Safari/8900.00",
"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.71 (KHTML like Gecko) WebVideo/1.0.1.10 Version/7.0 Safari/537.71",
"Mozilla/5.0 (Windows NT 6.1; WOW64; rv:12.0) Gecko/20120422 Firefox/12.0 SeaMonkey/2.9",
"Mozilla/5.0 (Windows NT 6.0; rv:36.0) Gecko/20100101 Firefox/36.0 SeaMonkey/2.33.1",
"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.116 UBrowser/5.6.13705.206 Safari/537.36",
"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.89 Vivaldi/1.0.94.2 Safari/537.36",
"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.90 Safari/537.36 Vivaldi/1.4.589.11",
"Mozilla/5.0 (Windows NT 10.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.91 Safari/537.36 Vivaldi/1.92.917.39",
"Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 YaBrowser/17.3.0.1785 Yowser/2.5 Safari/537.36",
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:2.0.1) Gecko/20100101 Firefox/4.0.1 Camino/2.2.1",
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:2.0b6pre) Gecko/20100907 Firefox/4.0b6pre Camino/2.2a1pre",
"Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_5_8; en-US) AppleWebKit/532.8 (KHTML, like Gecko) Chrome/4.0.302.2 Safari/532.8",
"Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_4; en-US) AppleWebKit/534.3 (KHTML, like Gecko) Chrome/6.0.464.0 Safari/534.3",
"Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_5; en-US) AppleWebKit/534.13 (KHTML, like Gecko) Chrome/9.0.597.15 Safari/534.13",
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_2) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/14.0.835.186 Safari/535.1",
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_6_8) AppleWebKit/535.2 (KHTML, like Gecko) Chrome/15.0.874.54 Safari/535.2",
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_6_8) AppleWebKit/535.7 (KHTML, like Gecko) Chrome/16.0.912.36 Safari/535.7",
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_0) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1063.0 Safari/536.3",
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_2) AppleWebKit/537.4 (KHTML like Gecko) Chrome/22.0.1229.79 Safari/537.4",
"Mozilla/5.0 (Macintosh; U; Mac OS X Mach-O; en-US; rv:2.0a) Gecko/20040614 Firefox/3.0.0",
"Mozilla/5.0 (Macintosh; U; PPC Mac OS X 10.5; en-US; rv:1.9.0.3) Gecko/2008092414 Firefox/3.0.3",
"Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.5; en-US; rv:1.9.1) Gecko/20090624 Firefox/3.5",
"Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.6; en-US; rv:1.9.2.14) Gecko/20110218 AlexaToolbar/alxf-2.0 Firefox/3.6.14",
"Mozilla/5.0 (Macintosh; U; PPC Mac OS X 10.5; en-US; rv:1.9.2.15) Gecko/20110303 Firefox/3.6.15",
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:2.0.1) Gecko/20100101 Firefox/4.0.1",
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:5.0) Gecko/20100101 Firefox/5.0",
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:9.0) Gecko/20100101 Firefox/9.0",
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_2; rv:10.0.1) Gecko/20100101 Firefox/10.0.1",
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:16.0) Gecko/20120813 Firefox/16.0",
"Mozilla/4.0 (compatible; MSIE 5.15; Mac_PowerPC)",
"Mozilla/5.0 (Macintosh; U; PPC Mac OS X; en-US) AppleWebKit/125.4 (KHTML, like Gecko, Safari) OmniWeb/v563.15",
"Opera/9.0 (Macintosh; PPC Mac OS X; U; en)",
"Opera/9.20 (Macintosh; Intel Mac OS X; U; en)",
"Opera/9.64 (Macintosh; PPC Mac OS X; U; en) Presto/2.1.1",
"Opera/9.80 (Macintosh; Intel Mac OS X; U; en) Presto/2.6.30 Version/10.61",
"Opera/9.80 (Macintosh; Intel Mac OS X 10.4.11; U; en) Presto/2.7.62 Version/11.00",
"Mozilla/5.0 (Macintosh; U; PPC Mac OS X; en) AppleWebKit/125.2 (KHTML, like Gecko) Safari/85.8",
"Mozilla/5.0 (Macintosh; U; PPC Mac OS X; en) AppleWebKit/125.2 (KHTML, like Gecko) Safari/125.8",
"Mozilla/5.0 (Macintosh; U; PPC Mac OS X; fr-fr) AppleWebKit/312.5 (KHTML, like Gecko) Safari/312.3",
"Mozilla/5.0 (Macintosh; U; PPC Mac OS X; en) AppleWebKit/418.8 (KHTML, like Gecko) Safari/419.3",
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_4) AppleWebKit/537.31 (KHTML like Gecko) Chrome/26.0.1410.63 Safari/537.31",
"Mozilla/5.0 (Macintosh; Intel Mac OS X 1083) AppleWebKit/537.36 (KHTML like Gecko) Chrome/28.0.1469.0 Safari/537.36",
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1664.3 Safari/537.36",
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1944.0 Safari/537.36",
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2227.1 Safari/537.36",
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.84 Safari/537.36",
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36",
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2859.0 Safari/537.36",
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.90 Safari/537.36",
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.49 Safari/537.36",
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.7; rv:20.0) Gecko/20100101 Firefox/20.0",
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:21.0) Gecko/20100101 Firefox/21.0",
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:25.0) Gecko/20100101 Firefox/25.0",
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.9; rv:35.0) Gecko/20100101 Firefox/35.0",
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.10; rv:40.0) Gecko/20100101 Firefox/40.0",
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.9; rv:47.0) Gecko/20100101 Firefox/47.0",
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.12; rv:49.0) Gecko/20100101 Firefox/49.0",
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.13; rv:55.0) Gecko/20100101 Firefox/55.0",
"iTunes/4.2 (Macintosh; U; PPC Mac OS X 10.2)",
"iTunes/9.0.3 (Macintosh; U; Intel Mac OS X 10_6_2; en-ca)",
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/600.8.9 (KHTML, like Gecko) Maxthon/4.5.2",
"Mozilla/5.0 (Macintosh; U; Intel Mac OS X; en-US) AppleWebKit/528.16 (KHTML, like Gecko, Safari/528.16) OmniWeb/v622.8.0.112941",
"Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_5_6; en-US) AppleWebKit/528.16 (KHTML, like Gecko, Safari/528.16) OmniWeb/v622.8.0",
"Opera/9.80 (Macintosh; Intel Mac OS X 10.6.8; U; fr) Presto/2.9.168 Version/11.52",
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.118 Safari/537.36 OPR/28.0.1750.51",
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.82 Safari/537.36 OPR/29.0.1795.41",
"Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_2; en-us) AppleWebKit/531.21.8 (KHTML, like Gecko) Version/4.0.4 Safari/531.21.10",
"Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_5; de-de) AppleWebKit/534.15 (KHTML, like Gecko) Version/5.0.3 Safari/533.19.4",
"Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_6; en-us) AppleWebKit/533.20.25 (KHTML, like Gecko) Version/5.0.4 Safari/533.20.27",
"Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_7; en-us) AppleWebKit/534.20.8 (KHTML, like Gecko) Version/5.1 Safari/534.20.8",
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_3) AppleWebKit/534.55.3 (KHTML, like Gecko) Version/5.1.3 Safari/534.53.10",
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_6_8) AppleWebKit/537.13+ (KHTML, like Gecko) Version/5.1.7 Safari/534.57.2",
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_5) AppleWebKit/536.26.17 (KHTML like Gecko) Version/6.0.2 Safari/536.26.17",
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.78.1 (KHTML like Gecko) Version/7.0.6 Safari/537.78.1",
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_3) AppleWebKit/537.75.14 (KHTML, like Gecko) Version/7.0.3 Safari/7046A194A",
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/600.8.9 (KHTML, like Gecko) Version/8.0.8 Safari/600.8.9",
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11) AppleWebKit/601.1.56 (KHTML, like Gecko) Version/9.0 Safari/601.1.56",
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/601.7.8 (KHTML, like Gecko) Version/10.1 Safari/603.1.30",
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/602.1.50 (KHTML, like Gecko) Version/10.0 Safari/602.1.50",
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.5; rv:10.0.1) Gecko/20100101 Firefox/10.0.1 SeaMonkey/2.7.1",
"Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_3; en-us; Silk/1.0.13.81_10003810) AppleWebKit/533.16 (KHTML, like Gecko) Version/5.0 Safari/533.16 Silk-Accelerated=true",
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.105 Safari/537.36 Vivaldi/1.0.162.9",
"ELinks (0.4pre5; Linux 2.6.10-ac7 i686; 80x33)",
"ELinks/0.9.3 (textmode; Linux 2.6.9-kanotix-8 i686; 127x41)",
"ELinks/0.12~pre5-4",
"Links/0.9.1 (Linux 2.4.24; i386;)",
"Links (2.1pre15; Linux 2.4.26 i686; 158x61)",
"Links (2.3pre1; Linux 2.6.38-8-generic x86_64; 170x48)",
"Lynx/2.8.5rel.1 libwww-FM/2.14 SSL-MM/1.4.1 GNUTLS/0.8.12",
"w3m/0.5.1",
"Mozilla/5.0 (X11; U; Linux i686; en-US) AppleWebKit/532.4 (KHTML, like Gecko) Chrome/4.0.237.0 Safari/532.4 Debian",
"Mozilla/5.0 (X11; U; Linux i686; en-US) AppleWebKit/532.8 (KHTML, like Gecko) Chrome/4.0.277.0 Safari/532.8",
"Mozilla/5.0 (X11; U; Linux x86_64; en-US) AppleWebKit/532.9 (KHTML, like Gecko) Chrome/5.0.309.0 Safari/532.9",
"Mozilla/5.0 (X11; U; Linux x86_64; en-US) AppleWebKit/534.7 (KHTML, like Gecko) Chrome/7.0.514.0 Safari/534.7",
"Mozilla/5.0 (X11; U; Linux x86_64; en-US) AppleWebKit/540.0 (KHTML, like Gecko) Ubuntu/10.10 Chrome/9.1.0.0 Safari/540.0",
"Mozilla/5.0 (X11; U; Linux x86_64; en-US) AppleWebKit/534.15 (KHTML, like Gecko) Chrome/10.0.613.0 Safari/534.15",
"Mozilla/5.0 (X11; U; Linux i686; en-US) AppleWebKit/534.15 (KHTML, like Gecko) Ubuntu/10.10 Chromium/10.0.613.0 Chrome/10.0.613.0 Safari/534.15",
"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/534.24 (KHTML, like Gecko) Ubuntu/10.10 Chromium/12.0.703.0 Chrome/12.0.703.0 Safari/534.24",
"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/13.0.782.20 Safari/535.1",
"Mozilla/5.0 Slackware/13.37 (X11; U; Linux x86_64; en-US) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/13.0.782.41",
"Mozilla/5.0 (X11; Linux i686) AppleWebKit/535.1 (KHTML, like Gecko) Ubuntu/11.04 Chromium/14.0.825.0 Chrome/14.0.825.0 Safari/535.1",
"Mozilla/5.0 (X11; Linux i686) AppleWebKit/535.2 (KHTML, like Gecko) Ubuntu/11.10 Chromium/15.0.874.120 Chrome/15.0.874.120 Safari/535.2",
"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/536.5 (KHTML, like Gecko) Chrome/19.0.1084.9 Safari/536.5",
"Mozilla/5.0 (X11; U; Linux; i686; en-US; rv:1.6) Gecko Epiphany/1.2.5",
"Mozilla/5.0 (X11; U; Linux i586; en-US; rv:1.7.3) Gecko/20040924 Epiphany/1.4.4 (Ubuntu)",
"Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.6) Gecko/20040614 Firefox/0.8",
"Mozilla/5.0 (X11; U; Linux x86_64; sv-SE; rv:1.8.1.12) Gecko/20080207 Ubuntu/7.10 (gutsy) Firefox/2.0.0.12",
"Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.11) Gecko/2009060309 Ubuntu/9.10 (karmic) Firefox/3.0.11",
"Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.1.2) Gecko/20090803 Ubuntu/9.04 (jaunty) Shiretoko/3.5.2",
"Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.1.5) Gecko/20091107 Firefox/3.5.5",
"Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.1.3) Gecko/20091020 Linux Mint/8 (Helena) Firefox/3.5.3",
"Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.2.9) Gecko/20100915 Gentoo Firefox/3.6.9",
"Mozilla/5.0 (X11; U; Linux i686; pl-PL; rv:1.9.0.2) Gecko/20121223 Ubuntu/9.25 (jaunty) Firefox/3.8",
"Mozilla/5.0 (X11; Linux i686; rv:2.0b6pre) Gecko/20100907 Firefox/4.0b6pre",
"Mozilla/5.0 (X11; Linux i686 on x86_64; rv:2.0.1) Gecko/20100101 Firefox/4.0.1",
"Mozilla/5.0 (X11; Linux i686; rv:2.0.1) Gecko/20100101 Firefox/4.0.1",
"Mozilla/5.0 (X11; Linux x86_64; rv:2.0.1) Gecko/20100101 Firefox/4.0.1",
"Mozilla/5.0 (X11; Linux x86_64; rv:2.2a1pre) Gecko/20100101 Firefox/4.2a1pre",
"Mozilla/5.0 (X11; Linux i686; rv:5.0) Gecko/20100101 Firefox/5.0",
"Mozilla/5.0 (X11; Linux i686; rv:6.0) Gecko/20100101 Firefox/6.0",
"Mozilla/5.0 (X11; Linux x86_64; rv:7.0a1) Gecko/20110623 Firefox/7.0a1",
"Mozilla/5.0 (X11; Linux i686; rv:8.0) Gecko/20100101 Firefox/8.0",
"Mozilla/5.0 (X11; Linux x86_64; rv:10.0.1) Gecko/20100101 Firefox/10.0.1",
"Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.1.16) Gecko/20120421 Gecko Firefox/11.0",
"Mozilla/5.0 (X11; Linux i686; rv:12.0) Gecko/20100101 Firefox/12.0",
"Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:14.0) Gecko/20100101 Firefox/14.0.1",
"Mozilla/5.0 (X11; U; Linux; i686; en-US; rv:1.6) Gecko Galeon/1.3.14",
"Mozilla/5.0 (X11; U; Linux ppc; en-US; rv:1.8.1.13) Gecko/20080313 Iceape/1.1.9 (Debian-1.1.9-5)",
"Mozilla/5.0 (X11; U; Linux i686; pt-PT; rv:1.9.2.3) Gecko/20100402 Iceweasel/3.6.3 (like Firefox/3.6.3) GTB7.0",
"Mozilla/5.0 (X11; Linux x86_64; rv:5.0) Gecko/20100101 Firefox/5.0 Iceweasel/5.0",
"Mozilla/5.0 (X11; Linux i686; rv:6.0a2) Gecko/20110615 Firefox/6.0a2 Iceweasel/6.0a2",
"Mozilla/5.0 (X11; Linux i686; rv:14.0) Gecko/20100101 Firefox/14.0.1 Iceweasel/14.0.1",
"Mozilla/5.0 (X11; Linux x86_64; rv:15.0) Gecko/20120724 Debian Iceweasel/15.02",
"Konqueror/3.0-rc4; (Konqueror/3.0-rc4; i686 Linux;;datecode)",
"Mozilla/5.0 (compatible; Konqueror/3.3; Linux 2.6.8-gentoo-r3; X11;",
"Mozilla/5.0 (compatible; Konqueror/3.5; Linux 2.6.30-7.dmz.1-liquorix-686; X11) KHTML/3.5.10 (like Gecko) (Debian package 4:3.5.10.dfsg.1-1 b1)",
"Mozilla/5.0 (compatible; Konqueror/3.5; Linux; en_US) KHTML/3.5.6 (like Gecko) (Kubuntu)",
"Mozilla/5.0 (X11; Linux x86_64; en-US; rv:2.0b2pre) Gecko/20100712 Minefield/4.0b2pre",
"Mozilla/5.0 (X11; U; Linux; i686; en-US; rv:1.6) Gecko Debian/1.6-7",
"MSIE (MSIE 6.0; X11; Linux; i686) Opera 7.23",
"Opera/9.64 (X11; Linux i686; U; Linux Mint; nb) Presto/2.1.1",
"Opera/9.80 (X11; Linux i686; U; en) Presto/2.2.15 Version/10.10",
"Opera/9.80 (X11; Linux x86_64; U; pl) Presto/2.7.62 Version/11.00",
"Mozilla/5.0 (X11; Linux i686) AppleWebKit/534.34 (KHTML, like Gecko) QupZilla/1.2.0 Safari/534.34",
"Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.1.17) Gecko/20110123 SeaMonkey/2.0.12",
"Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.1) Gecko/20061024 Firefox/2.0 (Swiftfox)",
"Mozilla/5.0 (X11; U; Linux; en-US) AppleWebKit/527 (KHTML, like Gecko, Safari/419.3) Arora/0.10.1",
"Mozilla/5.0 (X11; CrOS i686 2268.111.0) AppleWebKit/536.11 (KHTML, like Gecko) Chrome/20.0.1132.57 Safari/536.11",
"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.4 (KHTML like Gecko) Chrome/22.0.1229.56 Safari/537.4",
"Mozilla/5.0 (X11; Linux i686) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1478.0 Safari/537.36",
"Mozilla/5.0 (X11; CrOS x86_64 5841.83.0) AppleWebKit/537.36 (KHTML like Gecko) Chrome/36.0.1985.138 Safari/537.36",
"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML like Gecko) Chrome/36.0.1985.125 Safari/537.36",
"Mozilla/5.0 (X11; Linux i686) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2166.2 Safari/537.36",
"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2227.0 Safari/537.36",
"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.93 Safari/537.36",
"Mozilla/5.0 (X11; Linux i686 (x86_64)) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.130 Safari/537.36",
"Mozilla/5.0 (X11; Fedora; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36",
"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2876.0 Safari/537.36",
"Mozilla/5.0 (X11; Linux i686 (x86_64)) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3187.0 Safari/537.366",
"Mozilla/5.0 (X11; Fedora; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3178.0 Safari/537.36",
"Mozilla/5.0 (X11; Linux i686) AppleWebKit/537.22 (KHTML like Gecko) Ubuntu Chromium/25.0.1364.160 Chrome/25.0.1364.160 Safari/537.22",
"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Ubuntu Chromium/33.0.1750.152 Chrome/33.0.1750.152 Safari/537.36",
"Mozilla/5.0 (X11; Linux i686) AppleWebKit/537.36 (KHTML, like Gecko) Ubuntu Chromium/51.0.2704.79 Chrome/51.0.2704.79 Safari/537.36",
"Mozilla/5.0 (X11; Linux i686) AppleWebKit/537.36 (KHTML, like Gecko) Ubuntu Chromium/60.0.3112.78 Chrome/60.0.3112.78 Safari/537.36",
"Mozilla/4.0 (compatible; Dillo 3.0)",
"Mozilla/5.0 (X11; U; Linux i686; en-us) AppleWebKit/528.5 (KHTML, like Gecko, Safari/528.5 ) lt-GtkLauncher",
"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.32 (KHTML, like Gecko) Chromium/25.0.1349.2 Chrome/25.0.1349.2 Safari/537.32 Epiphany/3.8.2",
"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/604.1 (KHTML, like Gecko) Version/11.0 Safari/604.1 Ubuntu/17.04 (3.24.1-0ubuntu1) Epiphany/3.24.1",
"Mozilla/5.0 (X11; Linux i686; rv:16.0) Gecko/20100101 Firefox/16.0",
"Mozilla/5.0 (X11; U; Linux i686; rv:19.0) Gecko/20100101 Slackware/13 Firefox/19.0",
"Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:20.0) Gecko/20100101 Firefox/20.0",
"Mozilla/5.0 (X11; Linux i686; rv:20.0) Gecko/20100101 Firefox/20.0",
"Mozilla/5.0 (X11; Linux i686; rv:25.0) Gecko/20100101 Firefox/25.0",
"Mozilla/5.0 (X11; Linux i686; rv:28.0) Gecko/20100101 Firefox/28.0",
"Mozilla/5.0 (X11; Linux i686; rv:32.0) Gecko/20100101 Firefox/32.0",
"Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:35.0) Gecko/20100101 Firefox/35.0",
"Mozilla/5.0 (X11; CentOS; Linux x86_64; rv:36.0) Gecko/20100101 Firefox/36.0",
"Mozilla/5.0 (X11; Linux x86_64; rv:38.0) Gecko/20100101 Firefox/38.0",
"Mozilla/5.0 (X11; Linux i686; rv:40.0) Gecko/20100101 Firefox/40.0",
"Mozilla/5.0 (X11; Linux i686; rv:43.0) Gecko/20100101 Firefox/43.0",
"Mozilla/5.0 (X11; Linux i686; rv:46.0) Gecko/20100101 Firefox/46.0",
"Mozilla/5.0 (X11; Linux i686; rv:49.0) Gecko/20100101 Firefox/49.0",
"Mozilla/5.0 (X11; Fedora; Linux x86_64; rv:49.0) Gecko/20100101 Firefox/49.0",
"Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:49.0) Gecko/20100101 Firefox/49.0",
"Mozilla/5.0 (X11; Linux x86_64; rv:55.0) Gecko/20100101 Firefox/55.0",
"Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:55.0) Gecko/20100101 Firefox/55.0",
"Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.8) Gecko Galeon/2.0.6 (Ubuntu 2.0.6-2)",
"Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.1.16) Gecko/20080716 (Gentoo) Galeon/2.0.6",
"Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.1.13) Gecko/20100916 Iceape/2.0.8",
"Mozilla/5.0 (X11; Linux x86_64; rv:19.0) Gecko/20100101 Firefox/19.0 Iceweasel/19.0.2",
"Mozilla/5.0 (X11; Linux x86_64; rv:38.0) Gecko/20100101 Firefox/38.0 Iceweasel/38.2.1",
"Mozilla/5.0 (compatible; Konqueror/4.2; Linux) KHTML/4.2.4 (like Gecko) Slackware/13.0",
"Mozilla/5.0 (compatible; Konqueror/4.3; Linux) KHTML/4.3.1 (like Gecko) Fedora/4.3.1-3.fc11",
"Mozilla/5.0 (compatible; Konqueror/4.4; Linux) KHTML/4.4.1 (like Gecko) Fedora/4.4.1-1.fc12",
"Mozilla/5.0 (compatible; Konqueror/4.4; Linux 2.6.32-22-generic; X11; en_US) KHTML/4.4.3 (like Gecko) Kubuntu",
"Mozilla/5.0 (compatible; Konqueror/4.4; Linux 2.6.32-22-generic; X11; en_US) KHTML/4.4.3 (like Gecko) Kubuntu",
"Mozilla/5.0 (X11; Linux 3.8-6.dmz.1-liquorix-686) KHTML/4.8.4 (like Gecko) Konqueror/4.8",
"Mozilla/5.0 (X11; Linux) KHTML/4.9.1 (like Gecko) Konqueror/4.9",
"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.21 (KHTML, like Gecko) konqueror/4.14.10 Safari/537.21",
"Midori/0.1.10 (X11; Linux i686; U; en-us) WebKit/(531).(2)",
"Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.0.3) Gecko/2008092814 (Debian-3.0.1-1)",
"Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9a3pre) Gecko/20070330",
"Opera/9.80 (X11; Linux i686) Presto/2.12.388 Version/12.16",
"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/33.0.1750.166 Safari/537.36 OPR/20.0.1396.73172",
"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/33.0.1750.166 Safari/537.36 OPR/20.0.1396.73172",
"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.85 Safari/537.36 OPR/32.0.1948.25",
"Mozilla/5.0 (X11; Linux i686) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.101 Safari/537.36 OPR/40.0.2308.62",
"Mozilla/5.0 (X11; U; Linux x86_64; en-us) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/30.0.1599.114 Safari/537.36 Puffin/4.8.0.2965AT",
"Mozilla/5.0 (X11; Linux i686) AppleWebKit/538.1 (KHTML, like Gecko) QupZilla/1.8.6 Safari/538.1",
"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/538.1 (KHTML, like Gecko) QupZilla/1.9.0 Safari/538.1",
"Mozilla/5.0 (X11; Linux i686; rv:10.0.1) Gecko/20100101 Firefox/10.0.1 SeaMonkey/2.7.1",
"Mozilla/5.0 (X11; Linux i686; rv:12.0) Gecko/20120502 Firefox/12.0 SeaMonkey/2.9.1",
"Mozilla/5.0 (Windows NT 5.1; rv:38.0) Gecko/20100101 Firefox/38.0 SeaMonkey/2.35",
"Mozilla/5.0 (X11; Linux i686; rv:49.0) Gecko/20100101 Firefox/49.0 SeaMonkey/2.46",
"Mozilla/5.0 (X11; U; Linux x86_64; us; rv:1.9.1.19) Gecko/20110430 shadowfox/7.0 (like Firefox/7.0",
"Mozilla/5.0 (X11; U; Linux i686; it; rv:1.9.2.3) Gecko/20100406 Firefox/3.6.3 (Swiftfox)",
"Uzbl (Webkit 1.3) (Linux i686 [i686])",
"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.80 Safari/537.36 Vivaldi/1.0.344.37",
"ELinks (0.4.3; NetBSD 3.0.2PATCH sparc64; 141x19)",
"Links (2.1pre15; FreeBSD 5.3-RELEASE i386; 196x84)",
"Lynx/2.8.7dev.4 libwww-FM/2.14 SSL-MM/1.4.1 OpenSSL/0.9.8d",
"w3m/0.5.1",
"Mozilla/5.0 (X11; U; FreeBSD i386; en-US) AppleWebKit/532.0 (KHTML, like Gecko) Chrome/4.0.207.0 Safari/532.0",
"Mozilla/5.0 (X11; U; OpenBSD i386; en-US) AppleWebKit/533.3 (KHTML, like Gecko) Chrome/5.0.359.0 Safari/533.3",
"Mozilla/5.0 (X11; U; FreeBSD x86_64; en-US) AppleWebKit/534.16 (KHTML, like Gecko) Chrome/10.0.648.204 Safari/534.16",
"Mozilla/5.0 (X11; U; SunOS sun4m; en-US; rv:1.4b) Gecko/20030517 Mozilla Firebird/0.6",
"Mozilla/5.0 (X11; U; SunOS i86pc; en-US; rv:1.9.1b3) Gecko/20090429 Firefox/3.1b3",
"Mozilla/5.0 (X11; U; OpenBSD i386; en-US; rv:1.9.1) Gecko/20090702 Firefox/3.5",
"Mozilla/5.0 (X11; U; FreeBSD i386; de-CH; rv:1.9.2.8) Gecko/20100729 Firefox/3.6.8",
"Mozilla/5.0 (X11; FreeBSD amd64; rv:5.0) Gecko/20100101 Firefox/5.0",
"Mozilla/5.0 (X11; U; FreeBSD i386; en-US; rv:1.6) Gecko/20040406 Galeon/1.3.15",
"Mozilla/5.0 (compatible; Konqueror/3.5; NetBSD 4.0_RC3; X11) KHTML/3.5.7 (like Gecko)",
"Mozilla/5.0 (compatible; Konqueror/3.5; SunOS) KHTML/3.5.1 (like Gecko)",
"Mozilla/5.0 (X11; U; FreeBSD; i386; en-US; rv:1.7) Gecko",
"Mozilla/4.77 [en] (X11; I; IRIX;64 6.5 IP30)",
"Mozilla/4.8 [en] (X11; U; SunOS; 5.7 sun4u)",
"Mozilla/5.0 (Unknown; U; UNIX BSD/SYSV system; C -) AppleWebKit/527 (KHTML, like Gecko, Safari/419.3) Arora/0.10.2",
"Mozilla/5.0 (X11; FreeBSD amd64) AppleWebKit/536.5 (KHTML like Gecko) Chrome/19.0.1084.56 Safari/536.5",
"Mozilla/5.0 (X11; FreeBSD amd64) AppleWebKit/537.4 (KHTML like Gecko) Chrome/22.0.1229.79 Safari/537.4",
"Mozilla/5.0 (X11; NetBSD) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.116 Safari/537.36",
"Mozilla/5.0 (X11; OpenBSD i386) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.125 Safari/537.36",
"Mozilla/5.0 (X11; NetBSD x86; en-us) AppleWebKit/666.6+ (KHTML, like Gecko) Chromium/20.0.0000.00 Chrome/20.0.0000.00 Safari/666.6+",
"Mozilla/5.0 (X11; FreeBSD amd64) AppleWebKit/535.22+ (KHTML, like Gecko) Chromium/17.0.963.56 Chrome/17.0.963.56 Safari/535.22+ Epiphany/2.30.6",
"Mozilla/5.0 (X11; U; OpenBSD arm; en-us) AppleWebKit/531.2 (KHTML, like Gecko) Safari/531.2 Epiphany/2.30.0",
"Mozilla/5.0 (X11; NetBSD amd64; rv:16.0) Gecko/20121102 Firefox/16.0",
"Mozilla/5.0 (X11; OpenBSD amd64; rv:28.0) Gecko/20100101 Firefox/28.0",
"Mozilla/5.0 (X11; NetBSD amd64; rv:30.0) Gecko/20100101 Firefox/30.0",
"Mozilla/5.0 (X11; OpenBSD amd64; rv:30.0) Gecko/20100101 Firefox/30.0",
"Mozilla/5.0 (X11; FreeBSD amd64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.153 Safari/537.36",
"Mozilla/5.0 (X11; FreeBSD amd64; rv:54.0) Gecko/20100101 Firefox/54.0",
"Mozilla/5.0 (compatible; Konqueror/4.1; DragonFly) KHTML/4.1.4 (like Gecko)",
"Mozilla/5.0 (compatible; Konqueror/4.1; OpenBSD) KHTML/4.1.4 (like Gecko)",
"Mozilla/5.0 (compatible; Konqueror/4.5; NetBSD 5.0.2; X11; amd64; en_US) KHTML/4.5.4 (like Gecko)",
"Mozilla/5.0 (compatible; Konqueror/4.5; FreeBSD) KHTML/4.5.4 (like Gecko)",
"Mozilla/5.0 (X11; U; NetBSD amd64; en-US; rv:1.9.2.15) Gecko/20110308 Namoroka/3.6.15",
"NetSurf/1.2 (NetBSD; amd64)",
"Opera/9.80 (X11; FreeBSD 8.1-RELEASE i386; Edition Next) Presto/2.12.388 Version/12.10",
"Mozilla/5.0 (Unknown; UNIX BSD/SYSV system) AppleWebKit/538.1 (KHTML, like Gecko) QupZilla/1.7.0 Safari/538.1",
"Mozilla/5.0 (X11; U; SunOS i86pc; en-US; rv:1.8.1.12) Gecko/20080303 SeaMonkey/1.1.8",
"Mozilla/5.0 (X11; FreeBSD i386; rv:28.0) Gecko/20100101 Firefox/28.0 SeaMonkey/2.25",
"Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; BOLT/2.800) AppleWebKit/534.6 (KHTML, like Gecko) Version/5.0 Safari/534.6.3",
"Mozilla/5.0 (Linux; Android 4.4.2; SAMSUNG-SM-T537A Build/KOT49H) AppleWebKit/537.36 (KHTML like Gecko) Chrome/35.0.1916.141 Safari/537.36",
"Mozilla/5.0 (Linux; Android 8.0.0; Pixel XL Build/OPR6.170623.012) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.107 Mobile Safari/537.36",
"Mozilla/5.0 (Windows Phone 10.0; Android 4.2.1; DEVICE INFO) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.71 Mobile Safari/537.36 Edge/12.0",
"Mozilla/5.0 (Android; Mobile; rv:35.0) Gecko/35.0 Firefox/35.0",
"Mozilla/4.0 (compatible; MSIE 6.0; Windows CE; IEMobile 6.12; Microsoft ZuneHD 4.3)",
"Mozilla/4.0 (compatible; MSIE 6.0; Windows CE; IEMobile 7.11)",
"Mozilla/4.0 (compatible; MSIE 7.0; Windows Phone OS 7.0; Trident/3.1; IEMobile/7.0) Asus;Galaxy6",
"Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0)",
"Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0)",
"Mozilla/5.0 (compatible; MSIE 10.0; Windows Phone 8.0; Trident/6.0; IEMobile/10.0; ARM; Touch)",
"Mozilla/1.22 (compatible; MSIE 5.01; PalmOS 3.0) EudoraWeb 2.1",
"Mozilla/5.0 (WindowsCE 6.0; rv:2.0.1) Gecko/20100101 Firefox/4.0.1",
"Mozilla/5.0 (X11; U; Linux armv61; en-US; rv:1.9.1b2pre) Gecko/20081015 Fennec/1.0a1",
"Mozilla/5.0 (Maemo; Linux armv7l; rv:2.0.1) Gecko/20100101 Firefox/4.0.1 Fennec/2.0.1",
"Mozilla/5.0 (Maemo; Linux armv7l; rv:10.0.1) Gecko/20100101 Firefox/10.0.1 Fennec/10.0.1",
"Mozilla/5.0 (Android 6.0.1; Mobile; rv:48.0) Gecko/48.0 Firefox/48.0",
"Mozilla/5.0 (Windows; U; Windows CE 5.1; rv:1.8.1a3) Gecko/20060610 Minimo/0.016",
"Mozilla/5.0 (X11; U; Linux armv6l; rv 1.8.1.5pre) Gecko/20070619 Minimo/0.020",
"Mozilla/5.0 (X11; U; Linux arm7tdmi; rv:1.8.1.11) Gecko/20071130 Minimo/0.025",
"Mozilla/4.0 (PDA; PalmOS/sony/model prmr/Revision:1.1.54 (en)) NetFront/3.0",
"Opera/9.51 Beta (Microsoft Windows; PPC; Opera Mobi/1718; U; en)",
"Opera/9.60 (J2ME/MIDP; Opera Mini/4.1.11320/608; U; en) Presto/2.2.0",
"Opera/9.60 (J2ME/MIDP; Opera Mini/4.2.14320/554; U; cs) Presto/2.2.0",
"Opera/9.80 (S60; SymbOS; Opera Mobi/499; U; ru) Presto/2.4.18 Version/10.00",
"Opera/10.61 (J2ME/MIDP; Opera Mini/5.1.21219/19.999; en-US; rv:1.9.3a5) WebKit/534.5 Presto/2.6.30",
"Opera/9.80 (Android; Opera Mini/7.5.33361/31.1543; U; en) Presto/2.8.119 Version/11.1010",
"Opera/9.80 (J2ME/MIDP; Opera Mini/8.0.35626/37.8918; U; en) Presto/2.12.423 Version/12.16",
"Mozilla/5.0 (Linux; Android 5.1.1; Nexus 7 Build/LMY47V) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.78 Safari/537.36 OPR/30.0.1856.93524",
"Opera/9.80 (Android; Opera Mini/9.0.1829/66.318; U; en) Presto/2.12.423 Version/12.16",
"Opera/9.80 (Linux i686; Opera Mobi/1040; U; en) Presto/2.5.24 Version/10.00",
"POLARIS/6.01 (BREW 3.1.5; U; en-us; LG; LX265; POLARIS/6.01/WAP) MMP/2.0 profile/MIDP-2.1 Configuration/CLDC-1.1",
"Mozilla/5.0 (X11; U; Linux x86_64; en-gb) AppleWebKit/534.35 (KHTML, like Gecko) Chrome/11.0.696.65 Safari/534.35 Puffin/2.9174AP",
"Mozilla/5.0 (X11; U; Linux x86_64; en-us) AppleWebKit/534.35 (KHTML, like Gecko) Chrome/11.0.696.65 Safari/534.35 Puffin/2.9174AT",
"Mozilla/5.0 (iPod; U; CPU iPhone OS 6_1 like Mac OS X; en-HK) AppleWebKit/534.35 (KHTML, like Gecko) Chrome/11.0.696.65 Safari/534.35 Puffin/3.9174IP Mobile",
"Mozilla/5.0 (X11; U; Linux x86_64; en-AU) AppleWebKit/534.35 (KHTML, like Gecko) Chrome/11.0.696.65 Safari/534.35 Puffin/3.9174IT",
"Mozilla/5.0 (X11; U; Linux i686; en-gb) AppleWebKit/534.35 (KHTML, like Gecko) Chrome/11.0.696.65 Safari/534.35 Puffin/2.0.5603M",
"Mozilla/5.0 (X11; U; Linux x86_64; en-US) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/30.0.1599.114 Safari/537.36 Puffin/4.5.0IT",
"Mozilla/5.0 (Linux; U; Android 2.0; en-us; Droid Build/ESD20) AppleWebKit/530.17 (KHTML, like Gecko) Version/4.0 Mobile Safari/530.17",
"Mozilla/5.0 (iPad; U; CPU OS 4_2_1 like Mac OS X; ja-jp) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8C148 Safari/6533.18.5",
"Mozilla/5.0 (iPhone; U; CPU iPhone OS 4_2_1 like Mac OS X; da-dk) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8C148 Safari/6533.18.5",
"Mozilla/5.0 (iPad; CPU OS 6_0 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Version/6.0 Mobile/10A5355d Safari/8536.25",
"Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0; XBLWP7; ZuneWP7) UCBrowser/2.9.0.263",
"Mozilla/5.0 (Linux; U; Android 2.3.3; en-us ; LS670 Build/GRI40) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1/UCBrowser/8.6.1.262/145/355",
"Mozilla/5.0 (Linux; U; Android 3.0.1; fr-fr; A500 Build/HRI66) AppleWebKit/534.13 (KHTML, like Gecko) Version/4.0 Safari/534.13",
"Mozilla/5.0 (Linux; U; Android 4.1; en-us; sdk Build/MR1) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.1 Safari/534.30",
"Mozilla/5.0 (Linux; U; Android 4.2; en-us; sdk Build/MR1) AppleWebKit/535.19 (KHTML, like Gecko) Version/4.2 Safari/535.19",
"Mozilla/5.0 (X11; U; Linux x86_64; en-us) AppleWebKit/534.35 (KHTML, like Gecko) Chrome/11.0.696.65 Safari/534.35 Puffin/2.9174AT",
"Mozilla/5.0 (X11; U; Linux x86_64; en-AU) AppleWebKit/534.35 (KHTML, like Gecko) Chrome/11.0.696.65 Safari/534.35 Puffin/3.9174IT",
"Mozilla/5.0 (iPad; U; CPU OS 3_2 like Mac OS X; en-us) AppleWebKit/531.21.10 (KHTML, like Gecko) Version/4.0.4 Mobile/7B334b Safari/531.21.10",
"Mozilla/5.0 (iPad; U; CPU OS 4_2_1 like Mac OS X; ja-jp) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8C148 Safari/6533.18.5",
"Mozilla/5.0 (iPad; U; CPU OS 4_3 like Mac OS X; en-us) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8F190 Safari/6533.18.5",
"Mozilla/5.0 (iPad; CPU OS 5_1 like Mac OS X) AppleWebKit/534.46 (KHTML, like Gecko ) Version/5.1 Mobile/9B176 Safari/7534.48.3",
"Mozilla/5.0 (iPad; CPU OS 6_0 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Version/6.0 Mobile/10A5355d Safari/8536.25",
"Mozilla/5.0 (iPad; CPU OS 8_0_2 like Mac OS X) AppleWebKit/600.1.4 (KHTML like Gecko) Mobile/12A405 Version/7.0 Safari/9537.53",
"Mozilla/5.0 (iPad; CPU OS 8_4_1 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) Version/8.0 Mobile/12H321 Safari/600.1.4",
"Mozilla/5.0 (iPad; CPU OS 9_3_2 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13F69 Safari/601.1",
"Mozilla/5.0 (iPad; CPU OS 10_0 like Mac OS X) AppleWebKit/601.1 (KHTML, like Gecko) CriOS/49.0.2623.109 Mobile/14A5335b Safari/601.1.46",
"Mozilla/5.0 (iPad; CPU OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A5362a Safari/604.1",
"Mozilla/5.0 (X11; U; Linux x86_64; en-US) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/30.0.1599.114 Safari/537.36 Puffin/4.5.0IT",
"Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_5_7;en-us) AppleWebKit/530.17 (KHTML, like Gecko) Version/4.0 Safari/530.17",
"Mozilla/5.0 (hp-tablet; Linux; hpwOS/3.0.2; U; de-DE) AppleWebKit/534.6 (KHTML, like Gecko) wOSBrowser/234.40.1 Safari/534.6 TouchPad/1.0",
"Mozilla/5.0 (Linux; U; Android 4.0.3; en-us; KFTT Build/IML74K) AppleWebKit/535.19 (KHTML, like Gecko) Silk/2.1 Mobile Safari/535.19 Silk-Accelerated=true",
"Mozilla/5.0 (Linux; Android 4.4.2; LG-V410 Build/KOT49I.V41010d) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/30.0.1599.103 Safari/537.36",
"Mozilla/5.0 (Linux; U; Android 3.0; en-us; Xoom Build/HRI39) AppleWebKit/525.10 (KHTML, like Gecko) Version/3.0.4 Mobile Safari/523.12.2",
"Mozilla/5.0 (Linux; Android 4.0.4; BNTV400 Build/IMM76L) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.111 Safari/537.36",
"Mozilla/5.0 (PlayBook; U; RIM Tablet OS 2.1.0; en-US) AppleWebKit/536.2+ (KHTML like Gecko) Version/7.2.1.0 Safari/536.2+",
"Mozilla/5.0 (Linux; U; Android 1.5; de-de; Galaxy Build/CUPCAKE) AppleWebKit/528.5 (KHTML, like Gecko) Version/3.1.2 Mobile Safari/525.20.1",
"Mozilla/5.0 (Linux; U; Android 2.2; en-ca; GT-P1000M Build/FROYO) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1",
"Mozilla/5.0 (Linux; U; Android 2.2; en-us; SCH-I800 Build/FROYO) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1",
"Mozilla/5.0 (Linux; U; Android 4.4.2; en-us; GT-P5210 Build/KOT49H) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30",
"Mozilla/5.0 (Linux; U; Android 3.0.1; en-us; GT-P7100 Build/HRI83) AppleWebkit/534.13 (KHTML, like Gecko) Version/4.0 Safari/534.13",
"Mozilla/5.0 (Linux; Android 5.0.2; SAMSUNG SM-T530NU Build/LRX22G) AppleWebKit/537.36 (KHTML, like Gecko) SamsungBrowser/3.2 Chrome/38.0.2125.102 Safari/537.36",
"Mozilla/5.0 (Linux; U; Android 3.0.1; fr-fr; A500 Build/HRI66) AppleWebKit/534.13 (KHTML, like Gecko) Version/4.0 Safari/534.13",
"Mozilla/4.0 (compatible; Linux 2.6.22) NetFront/3.4 Kindle/2.0 (screen 600x800)",
"Mozilla/5.0 (Linux U; en-US) AppleWebKit/528.5 (KHTML, like Gecko, Safari/528.5 ) Version/4.0 Kindle/3.0 (screen 600x800; rotate)",
"Mozilla/5.0 (X11; U; Linux armv7l like Android; en-us) AppleWebKit/531.2+ (KHTML, like Gecko) Version/5.0 Safari/533.2+ Kindle/3.0+",
"Mozilla/5.0 (Linux; U; Android 4.0.3; en-us; KFTT Build/IML74K) AppleWebKit/535.19 (KHTML, like Gecko) Silk/2.1 Mobile Safari/535.19 Silk-Accelerated=true",
"Mozilla/5.0 (iPad; U; CPU OS 3_2 like Mac OS X; en-us) AppleWebKit/531.21.10 (KHTML, like Gecko) Version/4.0.4 Mobile/7B334b Safari/531.21.10",
"Mozilla/5.0 (iPad; U; CPU OS 4_2_1 like Mac OS X; ja-jp) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8C148 Safari/6533.18.5",
"Mozilla/5.0 (iPad; U; CPU OS 4_3 like Mac OS X; en-us) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8F190 Safari/6533.18.5",
"Mozilla/5.0 (iPad; U; CPU iPad OS 5_0_1 like Mac OS X; en-us) AppleWebKit/535.1+ (KHTML like Gecko) Version/7.2.0.0 Safari/6533.18.5",
"Mozilla/5.0 (iPad; CPU OS 6_0 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Version/6.0 Mobile/10A5355d Safari/8536.25",
"Mozilla/5.0 (iPad; CPU OS 7_0 like Mac OS X) AppleWebKit/537.51.1 (KHTML, like Gecko) CriOS/30.0.1599.12 Mobile/11A465 Safari/8536.25 (3B92C18B-D9DE-4CB7-A02A-22FD2AF17C8F)",
"Mozilla/5.0 (iPad; CPU OS 7_1_2 like Mac OS X) AppleWebKit/537.51.2 (KHTML, like Gecko) Version/7.0 Mobile/11D257 Safari/9537.53",
"Mozilla/5.0 (iPad; CPU OS 8_0_2 like Mac OS X) AppleWebKit/600.1.4 (KHTML like Gecko) Mobile/12A405 Version/7.0 Safari/9537.53",
"Mozilla/5.0 (iPad; CPU OS 8_4_1 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) Version/8.0 Mobile/12H321 Safari/600.1.4",
"Mozilla/5.0 (iPad; CPU OS 9_3_2 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13F69 Safari/601.1",
"Mozilla/5.0 (X11; U; Linux x86_64; en-US) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/30.0.1599.114 Safari/537.36 Puffin/4.5.0IT",
"Mozilla/5.0 (iPhone; U; CPU like Mac OS X; en) AppleWebKit/420 (KHTML, like Gecko) Version/3.0 Mobile/1A543a Safari/419.3",
"Mozilla/5.0 (iPhone; U; CPU iPhone OS 2_0 like Mac OS X; en-us) AppleWebKit/525.18.1 (KHTML, like Gecko) Version/3.1.1 Mobile/5A347 Safari/525.200",
"Mozilla/5.0 (iPhone; U; CPU iPhone OS 3_0 like Mac OS X; en-us) AppleWebKit/528.18 (KHTML, like Gecko) Version/4.0 Mobile/7A341 Safari/528.16",
"Mozilla/5.0 (iPhone; U; CPU iPhone OS 4_0 like Mac OS X; en-us) AppleWebKit/532.9 (KHTML, like Gecko) Version/4.0.5 Mobile/8A293 Safari/531.22.7",
"Mozilla/5.0 (iPhone; U; CPU iPhone OS 4_2_1 like Mac OS X; da-dk) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8C148 Safari/6533.18.5",
"Mozilla/5.0 (iPhone; U; CPU iPhone OS 5_1_1 like Mac OS X; da-dk) AppleWebKit/534.46.0 (KHTML, like Gecko) CriOS/19.0.1084.60 Mobile/9B206 Safari/7534.48.3",
"Mozilla/5.0 (iPhone; CPU iPhone OS 6_0 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Version/6.0 Mobile/10A403 Safari/8536.25",
"UCWEB/8.8 (iPhone; CPU OS_6; en-US)AppleWebKit/534.1 U3/3.0.0 Mobile",
"Mozilla/5.0 (iPhone; CPU iPhone OS 7_1_2 like Mac OS X) AppleWebKit/537.51.2 (KHTML like Gecko) Version/7.0 Mobile/11D257 Safari/9537.53",
"Mozilla/5.0 (iPhone; CPU iPhone OS 8_3 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) Version/8.0 Mobile/12F70 Safari/600.1.4",
"Mozilla/5.0 (iPhone; CPU iPhone OS 8_4_1 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) GSA/8.0.57838 Mobile/12H321 Safari/600.1.4",
"Mozilla/5.0 (iPhone; CPU iPhone OS 9_2 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13C75 Safari/601.1",
"Mozilla/5.0 (iPhone; CPU iPhone OS 10_0 like Mac OS X) AppleWebKit/602.1.50 (KHTML, like Gecko) Version/10.0 Mobile/14A346 Safari/602.1",
"Mozilla/5.0 (iPhone; CPU iPhone OS 10_0 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) GSA/18.0.130791545 Mobile/14A5345a Safari/600.1.4",
"Mozilla/5.0 (iPhone; CPU iPhone OS 10_3_3 like Mac OS X) AppleWebKit/603.3.8 (KHTML, like Gecko) Version/9.0 Mobile/13B143 Safari/601.1",
"Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A5362a Safari/604.1",
"Mozilla/5.0 (iPod; U; CPU iPhone OS 2_2_1 like Mac OS X; en-us) AppleWebKit/525.18.1 (KHTML, like Gecko) Version/3.1.1 Mobile/5H11a Safari/525.20",
"Mozilla/5.0 (iPod; U; CPU iPhone OS 3_1_1 like Mac OS X; en-us) AppleWebKit/528.18 (KHTML, like Gecko) Mobile/7C145",
"Mozilla/5.0 (iPod touch; CPU iPhone OS 7_1 like Mac OS X) AppleWebKit/537.51.2 (KHTML like Gecko) Version/7.0 Mobile/11D167 Safari/123E71C",
"Mozilla/5.0 (iPod; CPU iPhone OS 8_4 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) CriOS/44.0.2403.67 Mobile/12H143 Safari/600.1.4",
"nook browser/1.0",
"Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_5_7;en-us) AppleWebKit/530.17 (KHTML, like Gecko) Version/4.0 Safari/530.17",
"Mozilla/5.0 (Linux; U; Android 2.3.4; en-us; BNTV250 Build/GINGERBREAD) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Safari/533.1",
"Mozilla/5.0 (Linux; Android 4.0.4; BNTV400 Build/IMM76L) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.111 Safari/537.36",
"BlackBerry7100i/4.1.0 Profile/MIDP-2.0 Configuration/CLDC-1.1 VendorID/103",
"BlackBerry8300/4.2.2 Profile/MIDP-2.0 Configuration/CLDC-1.1 VendorID/107 UP.Link/6.2.3.15.0",
"BlackBerry8320/4.2.2 Profile/MIDP-2.0 Configuration/CLDC-1.1 VendorID/100",
"BlackBerry8330/4.3.0 Profile/MIDP-2.0 Configuration/CLDC-1.1 VendorID/105",
"BlackBerry9000/4.6.0.167 Profile/MIDP-2.0 Configuration/CLDC-1.1 VendorID/102",
"BlackBerry9530/4.7.0.167 Profile/MIDP-2.0 Configuration/CLDC-1.1 VendorID/102 UP.Link/6.3.1.20.0",
"BlackBerry9700/5.0.0.351 Profile/MIDP-2.1 Configuration/CLDC-1.1 VendorID/123",
"Mozilla/5.0 (BlackBerry; U; BlackBerry 9800; en) AppleWebKit/534.1 (KHTML, Like Gecko) Version/6.0.0.141 Mobile Safari/534.1",
"Mozilla/5.0 (BlackBerry; U; BlackBerry 9930; en-US) AppleWebKit/534.11+ (KHTML, like Gecko) Version/7.1.0.267 Mobile Safari/534.11+",
"Mozilla/5.0 (Linux; Android 7.1.1; BBB100-1 Build/NMF26F) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.125 Mobile Safari/537.36",
"Mozilla/5.0 (PlayBook; U; RIM Tablet OS 2.1.0; en-US) AppleWebKit/536.2+ (KHTML like Gecko) Version/7.2.1.0 Safari/536.2+",
"Mozilla/5.0 (BB10; Touch) AppleWebKit/537.10+ (KHTML, like Gecko) Version/10.1.0.2342 Mobile Safari/537.10+",
"Mozilla/5.0 (Linux; Android 5.1.1; Coolpad 3622A Build/LMY47V) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.83 Mobile Safari/537.36",
"Mozilla/5.0 (Linux; Android 7.1.1; Coolpad 3632A Build/NMF26F) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.125 Mobile Safari/537.36",
"Mozilla/5.0 (Linux; U; Android 1.5; en-us; sdk Build/CUPCAKE) AppleWebkit/528.5 (KHTML, like Gecko) Version/3.1.2 Mobile Safari/525.20.1",
"Mozilla/5.0 (Linux; U; Android 2.1; en-us; Nexus One Build/ERD62) AppleWebKit/530.17 (KHTML, like Gecko) Version/4.0 Mobile Safari/530.17",
"Mozilla/5.0 (Linux; U; Android 2.2; en-us; Nexus One Build/FRF91) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1",
"Mozilla/5.0 (Linux; Android 4.4; Nexus 5 Build/BuildID) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/30.0.0.0 Mobile Safari/537.36",
"Mozilla/5.0 (Linux; Android 6.0; Nexus 5X Build/MDB08L) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.124 Mobile Safari/537.36",
"Mozilla/5.0 (Linux; Android 7.1.2; Nexus 6P Build/N2G48C) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.107 Mobile Safari/537.36",
"Mozilla/5.0 (Linux; Android 4.4.4; Nexus 7 Build/KTU84P) AppleWebKit/537.36 (KHTML like Gecko) Chrome/36.0.1985.135 Safari/537.36",
"Mozilla/5.0 (Linux; Android 5.1.1; Nexus 7 Build/LMY47V) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.78 Safari/537.36 OPR/30.0.1856.93524",
"Mozilla/5.0 (Linux; Android 7.0; Nexus 9 Build/NRD90R) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.124 Safari/537.36",
"Mozilla/5.0 (Linux; Android 7.1.2; Pixel Build/NHG47N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.83 Mobile Safari/537.36",
"Mozilla/5.0 (Linux; Android 8.0.0; Pixel XL Build/OPR6.170623.012) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.107 Mobile Safari/537.36",
"Mozilla/5.0 (hp-tablet; Linux; hpwOS/3.0.2; U; de-DE) AppleWebKit/534.6 (KHTML, like Gecko) wOSBrowser/234.40.1 Safari/534.6 TouchPad/1.0",
"Mozilla/5.0 (Linux; webOS/2.2.4; U; en-US) AppleWebKit/534.6 (KHTML, like Gecko) webOSBrowser/221.56 Safari/534.6 Pre/3.0",
"Mozilla/4.0 (compatible; MSIE 6.0; Windows CE; IEMobile 7.11) Sprint:PPC6800",
"Mozilla/4.0 (compatible; MSIE 6.0; Windows CE; IEMobile 7.11) XV6800",
"Mozilla/5.0 (Linux; U; Android 1.5; en-us; htc_bahamas Build/CRB17) AppleWebKit/528.5 (KHTML, like Gecko) Version/3.1.2 Mobile Safari/525.20.1",
"Mozilla/5.0 (Linux; U; Android 2.1-update1; de-de; HTC Desire 1.19.161.5 Build/ERE27) AppleWebKit/530.17 (KHTML, like Gecko) Version/4.0 Mobile Safari/530.17",
"HTC_Dream Mozilla/5.0 (Linux; U; Android 1.5; en-ca; Build/CUPCAKE) AppleWebKit/528.5 (KHTML, like Gecko) Version/3.1.2 Mobile Safari/525.20.1",
"Mozilla/5.0 (Linux; U; Android 2.2; en-us; Sprint APA9292KT Build/FRF91) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1",
"Mozilla/5.0 (Linux; U; Android 1.5; de-ch; HTC Hero Build/CUPCAKE) AppleWebKit/528.5 (KHTML, like Gecko) Version/3.1.2 Mobile Safari/525.20.1",
"Mozilla/5.0 (Linux; U; Android 2.2; en-us; ADR6300 Build/FRF91) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1",
"Mozilla/5.0 (Linux; U; Android 2.1; en-us; HTC Legend Build/cupcake) AppleWebKit/530.17 (KHTML, like Gecko) Version/4.0 Mobile Safari/530.17",
"Mozilla/5.0 (Linux; U; Android 1.5; de-de; HTC Magic Build/PLAT-RC33) AppleWebKit/528.5 (KHTML, like Gecko) Version/3.1.2 Mobile Safari/525.20.1 FirePHP/0.3",
"Mozilla/5.0 (Linux; Android 6.0; HTC One M9 Build/MRA58K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.98 Mobile Safari/537.36",
"Mozilla/5.0 (Linux; U; Android 4.0.3; de-ch; HTC Sensation Build/IML74K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30",
"HTC-ST7377/1.59.502.3 (67150) Opera/9.50 (Windows NT 5.1; U; en) UP.Link/6.3.1.17.0",
"Mozilla/5.0 (Linux; U; Android 1.6; en-us; HTC_TATTOO_A3288 Build/DRC79) AppleWebKit/528.5 (KHTML, like Gecko) Version/3.1.2 Mobile Safari/525.20.1",
"Mozilla/5.0 (Linux; Android 6.0; ALE-L21 Build/HuaweiALE-L21) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.89 Mobile Safari/537.36",
"Mozilla/5.0 (Linux; Android 5.1; C6740N Build/LMY47O) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.111 Mobile Safari/537.36",
"Mozilla/5.0 (Linux; U; Android 4.1.2; en-us; LG-P870/P87020d Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30",
"LG-LX550 AU-MIC-LX550/2.0 MMP/2.0 Profile/MIDP-2.0 Configuration/CLDC-1.1",
"Mozilla/5.0 (Linux; Android 6.0; LG-D850 Build/MRA58K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.97 Mobile Safari/537.36",
"Mozilla/5.0 (Linux; Android 7.0; LG-H918 Build/NRD90M) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Mobile Safari/537.36",
"Mozilla/5.0 (Linux; Android 7.0; LGL84VL Build/NRD90U) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.125 Mobile Safari/537.36",
"Mozilla/5.0 (Linux; Android 7.0; LGUS997 Build/NRD90U) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.125 Mobile Safari/537.36",
"Mozilla/5.0 (Linux; Android 4.4.2; LGMS323 Build/KOT49I.MS32310b) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/30.0.1599.103 Mobile Safari/537.36",
"POLARIS/6.01(BREW 3.1.5;U;en-us;LG;LX265;POLARIS/6.01/WAP;)MMP/2.0 profile/MIDP-201 Configuration /CLDC-1.1",
"LG-GC900/V10a Obigo/WAP2.0 Profile/MIDP-2.1 Configuration/CLDC-1.1",
"Mozilla/5.0 (Linux; Android 4.4.2; LG-V410 Build/KOT49I.V41010d) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/30.0.1599.103 Safari/537.36",
"Mozilla/4.0 (compatible; MSIE 4.01; Windows CE; PPC; MDA Pro/1.0 Profile/MIDP-2.0 Configuration/CLDC-1.1)",
"Mozilla/5.0 (Linux; U; Android 1.0; en-us; dream) AppleWebKit/525.10 (KHTML, like Gecko) Version/3.0.4 Mobile Safari/523.12.2",
"Mozilla/5.0 (Linux; U; Android 1.5; en-us; T-Mobile G1 Build/CRB43) AppleWebKit/528.5 (KHTML, like Gecko) Version/3.1.2 Mobile Safari 525.20.1",
"Mozilla/5.0 (Linux; U; Android 1.5; en-gb; T-Mobile_G2_Touch Build/CUPCAKE) AppleWebKit/528.5 (KHTML, like Gecko) Version/3.1.2 Mobile Safari/525.20.1",
"Mozilla/5.0 (Linux; U; Android 2.0; en-us; Droid Build/ESD20) AppleWebKit/530.17 (KHTML, like Gecko) Version/4.0 Mobile Safari/530.17",
"Mozilla/5.0 (Linux; U; Android 2.2; en-us; Droid Build/FRG22D) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1",
"MOT-L7v/08.B7.5DR MIB/2.2.1 Profile/MIDP-2.0 Configuration/CLDC-1.1 UP.Link/6.3.0.0.0",
"Mozilla/5.0 (Linux; U; Android 2.0; en-us; Milestone Build/ SHOLS_U2_01.03.1) AppleWebKit/530.17 (KHTML, like Gecko) Version/4.0 Mobile Safari/530.17",
"Mozilla/5.0 (Linux; U; Android 2.0.1; de-de; Milestone Build/SHOLS_U2_01.14.0) AppleWebKit/530.17 (KHTML, like Gecko) Version/4.0 Mobile Safari/530.17",
"Mozilla/5.0 (Linux; Android 7.0; Moto G (5) Plus Build/NPNS25.137-35-5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.107 Mobile Safari/537.36",
"Mozilla/5.0 (Linux; Android 7.1.1; XT1710-02 Build/NDS26.74-36) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.125 Mobile Safari/537.36",
"MOT-V9mm/00.62 UP.Browser/6.2.3.4.c.1.123 (GUI) MMP/2.0",
"MOTORIZR-Z8/46.00.00 Mozilla/4.0 (compatible; MSIE 6.0; Symbian OS; 356) Opera 8.65 [it] UP.Link/6.3.0.0.0",
"MOT-V177/0.1.75 UP.Browser/6.2.3.9.c.12 (GUI) MMP/2.0 UP.Link/6.3.1.13.0",
"Mozilla/5.0 (Linux; U; Android 3.0; en-us; Xoom Build/HRI39) AppleWebKit/525.10 (KHTML, like Gecko) Version/3.0.4 Mobile Safari/523.12.2",
"Mozilla/5.0 (Linux; Android 4.4.4; XT1032 Build/KXB21.14-L1.61) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.94 Mobile Safari/537.36",
"portalmmm/2.0 N410i(c20;TB)",
"Nokia3230/2.0 (5.0614.0) SymbianOS/7.0s Series60/2.1 Profile/MIDP-2.0 Configuration/CLDC-1.0",
"Mozilla/5.0 (SymbianOS/9.2; U; Series60/3.1 Nokia5700/3.27; Profile/MIDP-2.0 Configuration/CLDC-1.1) AppleWebKit/413 (KHTML, like Gecko) Safari/413",
"Mozilla/5.0 (SymbianOS/9.2; U; Series60/3.1 Nokia6120c/3.70; Profile/MIDP-2.0 Configuration/CLDC-1.1) AppleWebKit/413 (KHTML, like Gecko) Safari/413",
"Nokia6230/2.0 (04.44) Profile/MIDP-2.0 Configuration/CLDC-1.1",
"Nokia6230i/2.0 (03.80) Profile/MIDP-2.0 Configuration/CLDC-1.1",
"Mozilla/4.1 (compatible; MSIE 5.0; Symbian OS; Nokia 6600;452) Opera 6.20 [en-US]",
"Nokia6630/1.0 (2.39.15) SymbianOS/8.0 Series60/2.6 Profile/MIDP-2.0 Configuration/CLDC-1.1",
"Nokia7250/1.0 (3.14) Profile/MIDP-1.0 Configuration/CLDC-1.0",
"Mozilla/4.0 (compatible; MSIE 5.0; Series80/2.0 Nokia9500/4.51 Profile/MIDP-2.0 Configuration/CLDC-1.1)",
"Mozilla/5.0 (Symbian/3; Series60/5.2 NokiaC6-01/011.010; Profile/MIDP-2.1 Configuration/CLDC-1.1 ) AppleWebKit/525 (KHTML, like Gecko) Version/3.0 BrowserNG/7.2.7.2 3gpp-gba",
"Mozilla/5.0 (Symbian/3; Series60/5.2 NokiaC7-00/012.003; Profile/MIDP-2.1 Configuration/CLDC-1.1 ) AppleWebKit/525 (KHTML, like Gecko) Version/3.0 BrowserNG/7.2.7.3 3gpp-gba",
"Mozilla/5.0 (SymbianOS/9.1; U; en-us) AppleWebKit/413 (KHTML, like Gecko) Safari/413 es50",
"Mozilla/5.0 (Symbian/3; Series60/5.2 NokiaE6-00/021.002; Profile/MIDP-2.1 Configuration/CLDC-1.1) AppleWebKit/533.4 (KHTML, like Gecko) NokiaBrowser/7.3.1.16 Mobile Safari/533.4 3gpp-gba",
"UCWEB/8.8 (SymbianOS/9.2; U; en-US; NokiaE63) AppleWebKit/534.1 UCBrowser/8.8.0.245 Mobile",
"Mozilla/5.0 (SymbianOS/9.1; U; en-us) AppleWebKit/413 (KHTML, like Gecko) Safari/413 es65",
"Mozilla/5.0 (Symbian/3; Series60/5.2 NokiaE7-00/010.016; Profile/MIDP-2.1 Configuration/CLDC-1.1 ) AppleWebKit/525 (KHTML, like Gecko) Version/3.0 BrowserNG/7.2.7.3 3gpp-gba",
"Mozilla/5.0 (SymbianOS/9.1; U; en-us) AppleWebKit/413 (KHTML, like Gecko) Safari/413 es70",
"Mozilla/5.0 (SymbianOS/9.2; U; Series60/3.1 NokiaE90-1/07.24.0.3; Profile/MIDP-2.0 Configuration/CLDC-1.1 ) AppleWebKit/413 (KHTML, like Gecko) Safari/413 UP.Link/6.2.3.18.0",
"Mozilla/5.0 (Windows Phone 8.1; ARM; Trident/7.0; Touch; rv:11.0; IEMobile/11.0; NOKIA; Lumia 530) like Gecko",
"Mozilla/5.0 (compatible; MSIE 10.0; Windows Phone 8.0; Trident/6.0; IEMobile/10.0; ARM; Touch; NOKIA; Lumia 920)",
"Mozilla/5.0 (Windows Phone 8.1; ARM; Trident/7.0; Touch; rv:11.0; IEMobile/11.0; NOKIA; Lumia 630) like Gecko",
"Mozilla/5.0 (Windows NT 6.2; ARM; Trident/7.0; Touch; rv:11.0; WPDesktop; NOKIA; Lumia 635) like Gecko",
"Mozilla/5.0 (Windows NT 6.2; ARM; Trident/7.0; Touch; rv:11.0; WPDesktop; NOKIA; Lumia 920) like Geckoo",
"Mozilla/5.0 (Windows Phone 8.1; ARM; Trident/7.0; Touch; rv:11.0; IEMobile/11.0; NOKIA; Lumia 920) like Gecko",
"NokiaN70-1/5.0609.2.0.1 Series60/2.8 Profile/MIDP-2.0 Configuration/CLDC-1.1 UP.Link/6.3.1.13.0",
"Mozilla/5.0 (SymbianOS/9.1; U; en-us) AppleWebKit/413 (KHTML, like Gecko) Safari/413",
"NokiaN73-1/3.0649.0.0.1 Series60/3.0 Profile/MIDP2.0 Configuration/CLDC-1.1",
"Mozilla/5.0 (Symbian/3; Series60/5.2 NokiaN8-00/014.002; Profile/MIDP-2.1 Configuration/CLDC-1.1; en-us) AppleWebKit/525 (KHTML, like Gecko) Version/3.0 BrowserNG/7.2.6.4 3gpp-gba",
"Mozilla/5.0 (SymbianOS/9.1; U; en-us) AppleWebKit/413 (KHTML, like Gecko) Safari/413",
"Mozilla/5.0 (MeeGo; NokiaN9) AppleWebKit/534.13 (KHTML, like Gecko) NokiaBrowser/8.5.0 Mobile Safari/534.13",
"Mozilla/5.0 (SymbianOS/9.1; U; de) AppleWebKit/413 (KHTML, like Gecko) Safari/413",
"Mozilla/5.0 (SymbianOS/9.2; U; Series60/3.1 NokiaN95/10.0.018; Profile/MIDP-2.0 Configuration/CLDC-1.1) AppleWebKit/413 (KHTML, like Gecko) Safari/413 UP.Link/6.3.0.0.0",
"Mozilla/5.0 (MeeGo; NokiaN950-00/00) AppleWebKit/534.13 (KHTML, like Gecko) NokiaBrowser/8.5.0 Mobile Safari/534.13",
"Mozilla/5.0 (SymbianOS/9.4; Series60/5.0 NokiaN97-1/10.0.012; Profile/MIDP-2.1 Configuration/CLDC-1.1; en-us) AppleWebKit/525 (KHTML, like Gecko) WicKed/7.1.12344",
"Mozilla/5.0 (Symbian/3; Series60/5.2 NokiaX7-00/021.004; Profile/MIDP-2.1 Configuration/CLDC-1.1 ) AppleWebKit/533.4 (KHTML, like Gecko) NokiaBrowser/7.3.1.21 Mobile Safari/533.4 3gpp-gba",
"Mozilla/5.0 (webOS/1.3; U; en-US) AppleWebKit/525.27.1 (KHTML, like Gecko) Version/1.0 Safari/525.27.1 Desktop/1.0",
"Mozilla/4.0 (compatible; MSIE 6.0; Windows 98; PalmSource/hspr-H102; Blazer/4.0) 16;320x320",
"SEC-SGHE900/1.0 NetFront/3.2 Profile/MIDP-2.0 Configuration/CLDC-1.1 Opera/8.01 (J2ME/MIDP; Opera Mini/2.0.4509/1378; nl; U; ssr)",
"Mozilla/5.0 (Linux; U; Android 1.5; de-de; Galaxy Build/CUPCAKE) AppleWebKit/528.5 (KHTML, like Gecko) Version/3.1.2 Mobile Safari/525.20.1",
"Mozilla/5.0 (Linux; U; Android 2.2; en-ca; GT-P1000M Build/FROYO) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1",
"Mozilla/5.0 (Linux; U; Android 2.2; en-us; SCH-I800 Build/FROYO) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1",
"Mozilla/5.0 (Linux; U; Android 4.0.3; de-de; Galaxy S II Build/GRJ22) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30",
"Mozilla/5.0 (Linux; Android 4.3; SPH-L710 Build/JSS15J) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1700.99 Mobile Safari/537.36",
"Mozilla/5.0 (Linux; Android 5.0.1; SCH-R970 Build/LRX22C) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.84 Mobile Safari/537.36",
"Mozilla/5.0 (Linux; Android 4.4.2; SAMSUNG-SM-G900A Build/KOT49H) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.94 Mobile Safari/537.36",
"Mozilla/5.0 (Linux; U; Android 4.4.2; en-us; GT-P5210 Build/KOT49H) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30",
"Mozilla/5.0 (Linux; U; Android 3.0.1; en-us; GT-P7100 Build/HRI83) AppleWebkit/534.13 (KHTML, like Gecko) Version/4.0 Safari/534.13",
"SAMSUNG-S8000/S8000XXIF3 SHP/VPP/R5 Jasmine/1.0 Nextreaming SMM-MMS/1.2.0 profile/MIDP-2.1 configuration/CLDC-1.1 FirePHP/0.3",
"Mozilla/5.0 (Linux; U; Android 1.5; en-us; SPH-M900 Build/CUPCAKE) AppleWebKit/528.5 (KHTML, like Gecko) Version/3.1.2 Mobile Safari/525.20.1",
"SAMSUNG-SGH-A867/A867UCHJ3 SHP/VPP/R5 NetFront/35 SMM-MMS/1.2.0 profile/MIDP-2.0 configuration/CLDC-1.1 UP.Link/6.3.0.0.0",
"SEC-SGHX210/1.0 UP.Link/6.3.1.13.0",
"Mozilla/5.0 (Linux; Android 6.0.1; SM-G900H Build/MMB29K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.98 Mobile Safari/537.36",
"Mozilla/5.0 (Linux; Android 7.0; SAMSUNG SM-G925R6 Build/NRD90M) AppleWebKit/537.36 (KHTML, like Gecko) SamsungBrowser/5.4 Chrome/51.0.2704.106 Mobile Safari/537.36",
"Mozilla/5.0 (Linux; Android 4.4.2; SAMSUNG-SM-T537A Build/KOT49H) AppleWebKit/537.36 (KHTML like Gecko) Chrome/35.0.1916.141 Safari/537.36",
"Mozilla/5.0 (Linux; U; Android 1.5; fr-fr; GT-I5700 Build/CUPCAKE) AppleWebKit/528.5 (KHTML, like Gecko) Version/3.1.2 Mobile Safari/525.20.1",
"SEC-SGHX820/1.0 NetFront/3.2 Profile/MIDP-2.0 Configuration/CLDC-1.1",
"SonyEricssonK310iv/R4DA Browser/NetFront/3.3 Profile/MIDP-2.0 Configuration/CLDC-1.1 UP.Link/6.3.1.13.0",
"SonyEricssonK550i/R1JD Browser/NetFront/3.3 Profile/MIDP-2.0 Configuration/CLDC-1.1",
"SonyEricssonK610i/R1CB Browser/NetFront/3.3 Profile/MIDP-2.0 Configuration/CLDC-1.1",
"SonyEricssonK750i/R1CA Browser/SEMC-Browser/4.2 Profile/MIDP-2.0 Configuration/CLDC-1.1",
"Opera/9.80 (J2ME/MIDP; Opera Mini/5.0.16823/1428; U; en) Presto/2.2.0",
"SonyEricssonK800i/R1CB Browser/NetFront/3.3 Profile/MIDP-2.0 Configuration/CLDC-1.1 UP.Link/6.3.0.0.0",
"SonyEricssonK810i/R1KG Browser/NetFront/3.3 Profile/MIDP-2.0 Configuration/CLDC-1.1",
"Opera/8.01 (J2ME/MIDP; Opera Mini/1.0.1479/HiFi; SonyEricsson P900; no; U; ssr)",
"SonyEricssonS500i/R6BC Browser/NetFront/3.3 Profile/MIDP-2.0 Configuration/CLDC-1.1",
"Mozilla/5.0 (SymbianOS/9.4; U; Series60/5.0 SonyEricssonP100/01; Profile/MIDP-2.1 Configuration/CLDC-1.1) AppleWebKit/525 (KHTML, like Gecko) Version/3.0 Safari/525",
"SonyEricssonT68/R201A",
"SonyEricssonT100/R101",
"SonyEricssonT610/R201 Profile/MIDP-1.0 Configuration/CLDC-1.0",
"SonyEricssonT650i/R7AA Browser/NetFront/3.3 Profile/MIDP-2.0 Configuration/CLDC-1.1",
"SonyEricssonW580i/R6BC Browser/NetFront/3.3 Profile/MIDP-2.0 Configuration/CLDC-1.1",
"SonyEricssonW660i/R6AD Browser/NetFront/3.3 Profile/MIDP-2.0 Configuration/CLDC-1.1",
"SonyEricssonW810i/R4EA Browser/NetFront/3.3 Profile/MIDP-2.0 Configuration/CLDC-1.1 UP.Link/6.3.0.0.0",
"SonyEricssonW850i/R1ED Browser/NetFront/3.3 Profile/MIDP-2.0 Configuration/CLDC-1.1",
"SonyEricssonW950i/R100 Mozilla/4.0 (compatible; MSIE 6.0; Symbian OS; 323) Opera 8.60 [en-US]",
"SonyEricssonW995/R1EA Profile/MIDP-2.1 Configuration/CLDC-1.1 UNTRUSTED/1.0",
"Mozilla/5.0 (Linux; U; Android 1.6; es-es; SonyEricssonX10i Build/R1FA016) AppleWebKit/528.5 (KHTML, like Gecko) Version/3.1.2 Mobile Safari/525.20.1",
"Mozilla/5.0 (Linux; U; Android 1.6; en-us; SonyEricssonX10i Build/R1AA056) AppleWebKit/528.5 (KHTML, like Gecko) Version/3.1.2 Mobile Safari/525.20.1",
"Opera/9.5 (Microsoft Windows; PPC; Opera Mobi; U) SonyEricssonX1i/R2AA Profile/MIDP-2.0 Configuration/CLDC-1.1",
"SonyEricssonZ800/R1Y Browser/SEMC-Browser/4.1 Profile/MIDP-2.0 Configuration/CLDC-1.1 UP.Link/6.3.0.0.0",
"Mozilla/4.0 (compatible; MSIE 6.0; Windows CE; IEMobile 6.12; Microsoft ZuneHD 4.3)",
"Opera/9.80 (Android; Opera Mini/7.5.33361/31.1543; U; en) Presto/2.8.119 Version/11.1010",
"Mozilla/5.0 (Android; Mobile; rv:35.0) Gecko/35.0 Firefox/35.0",
"Mozilla/5.0 (Android 6.0.1; Mobile; rv:48.0) Gecko/48.0 Firefox/48.0",
"Mozilla/5.0 (Linux; U; Android 0.5; en-us) AppleWebKit/522 (KHTML, like Gecko) Safari/419.3",
"Mozilla/5.0 (Linux; U; Android 1.1; en-gb; dream) AppleWebKit/525.10 (KHTML, like Gecko) Version/3.0.4 Mobile Safari/523.12.2",
"HTC_Dream Mozilla/5.0 (Linux; U; Android 1.5; en-ca; Build/CUPCAKE) AppleWebKit/528.5 (KHTML, like Gecko) Version/3.1.2 Mobile Safari/525.20.1",
"Mozilla/5.0 (Linux; U; Android 2.0; en-us; Droid Build/ESD20) AppleWebKit/530.17 (KHTML, like Gecko) Version/4.0 Mobile Safari/530.17",
"Mozilla/5.0 (Linux; U; Android 2.1; en-us; Nexus One Build/ERD62) AppleWebKit/530.17 (KHTML, like Gecko) Version/4.0 Mobile Safari/530.17",
"Mozilla/5.0 (Linux; U; Android 2.2; en-us; Sprint APA9292KT Build/FRF91) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1",
"Mozilla/5.0 (Linux; U; Android 2.2; en-us; ADR6300 Build/FRF91) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1",
"Mozilla/5.0 (Linux; U; Android 2.2; en-ca; GT-P1000M Build/FROYO) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1",
"Mozilla/5.0 (Android; Linux armv7l; rv:2.0.1) Gecko/20100101 Firefox/4.0.1 Fennec/2.0.1",
"Mozilla/5.0 (Linux; U; Android 3.0.1; fr-fr; A500 Build/HRI66) AppleWebKit/534.13 (KHTML, like Gecko) Version/4.0 Safari/534.13",
"Mozilla/5.0 (Linux; U; Android 3.0; en-us; Xoom Build/HRI39) AppleWebKit/525.10 (KHTML, like Gecko) Version/3.0.4 Mobile Safari/523.12.2",
"Mozilla/5.0 (Linux; U; Android 4.0.3; de-ch; HTC Sensation Build/IML74K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30",
"Mozilla/5.0 (Linux; U; Android 4.0.3; de-de; Galaxy S II Build/GRJ22) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30",
"Opera/9.80 (Android 4.0.4; Linux; Opera Mobi/ADR-1205181138; U; pl) Presto/2.10.254 Version/12.00",
"Mozilla/5.0 (Android; Linux armv7l; rv:10.0.1) Gecko/20100101 Firefox/10.0.1 Fennec/10.0.1",
"Mozilla/5.0 (Linux; Android 4.1.2; SHV-E250S Build/JZO54K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/30.0.1599.82 Mobile Safari/537.36",
"Mozilla/5.0 (Android 4.2; rv:19.0) Gecko/20121129 Firefox/19.0",
"Mozilla/5.0 (Linux; U; Android 4.3; en-us; sdk Build/MR1) AppleWebKit/536.23 (KHTML, like Gecko) Version/4.3 Mobile Safari/536.23",
"Mozilla/5.0 (Linux; Android 4.4; Nexus 5 Build/BuildID) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/30.0.0.0 Mobile Safari/537.36",
"Mozilla/5.0 (Linux; Android 4.4.2; SAMSUNG-SM-T537A Build/KOT49H) AppleWebKit/537.36 (KHTML like Gecko) Chrome/35.0.1916.141 Safari/537.36",
"Mozilla/5.0 (Linux; Android 4.4.2; SM-T230NU Build/KOT49H) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.81 Safari/537.36",
"Mozilla/5.0 (Linux; Android 5.0.1; SCH-R970 Build/LRX22C) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.84 Mobile Safari/537.36",
"Mozilla/5.0 (Linux; Android 5.0.2; SAMSUNG SM-T530NU Build/LRX22G) AppleWebKit/537.36 (KHTML, like Gecko) SamsungBrowser/3.2 Chrome/38.0.2125.102 Safari/537.36",
"Mozilla/5.0 (Linux; Android 5.1.1; Nexus 7 Build/LMY47V) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.78 Safari/537.36 OPR/30.0.1856.93524",
"Mozilla/5.0 (Linux; Android 6.0; HTC One M9 Build/MRA58K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.98 Mobile Safari/537.36",
"Mozilla/5.0 (Linux; Android 6.0; LG-D850 Build/MRA58K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.97 Mobile Safari/537.36",
"Mozilla/5.0 (Linux; Android 6.0; Nexus 5X Build/MDB08L) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.124 Mobile Safari/537.36",
"Mozilla/5.0 (Linux; Android 6.0.1; SM-G900H Build/MMB29K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.98 Mobile Safari/537.36",
"Mozilla/5.0 (Linux; Android 7.0; Nexus 9 Build/NRD90R) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.124 Safari/537.36",
"Mozilla/5.0 (Linux; Android 7.0; LG-H918 Build/NRD90M) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Mobile Safari/537.36",
"Mozilla/5.0 (Linux; Android 8.0.0; Pixel XL Build/OPR6.170623.012) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.107 Mobile Safari/537.36",
"Mozilla/5.0 (Linux; Android 8.0.0; Pixel XL Build/OPR6.170623.012) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.107 Mobile Safari/537.36",
"Mozilla/5.0 (iPhone; U; CPU like Mac OS X; en) AppleWebKit/420 (KHTML, like Gecko) Version/3.0 Mobile/1A543a Safari/419.3",
"Mozilla/5.0 (iPhone; U; CPU iPhone OS 2_0 like Mac OS X; en-us) AppleWebKit/525.18.1 (KHTML, like Gecko) Version/3.1.1 Mobile/5A347 Safari/525.200",
"Mozilla/5.0 (iPod; U; CPU iPhone OS 2_2_1 like Mac OS X; en-us) AppleWebKit/525.18.1 (KHTML, like Gecko) Version/3.1.1 Mobile/5H11a Safari/525.20",
"Mozilla/5.0 (iPhone; U; CPU iPhone OS 3_0 like Mac OS X; en-us) AppleWebKit/528.18 (KHTML, like Gecko) Version/4.0 Mobile/7A341 Safari/528.16",
"Mozilla/5.0 (iPad; U; CPU OS 3_2 like Mac OS X; en-us) AppleWebKit/531.21.10 (KHTML, like Gecko) Version/4.0.4 Mobile/7B334b Safari/531.21.10",
"Mozilla/5.0 (iPad; U; CPU OS 4_2_1 like Mac OS X; ja-jp) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8C148 Safari/6533.18.5",
"Mozilla/5.0 (iPhone; U; CPU iPhone OS 4_2_1 like Mac OS X; da-dk) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8C148 Safari/6533.18.5",
"Mozilla/5.0 (iPhone; U; CPU iPhone OS 4_3 like Mac OS X; de-de) AppleWebKit/533.17.9 (KHTML, like Gecko) Mobile/8F190",
"MobileSafari/600.1.4 CFNetwork/711.1.12 Darwin/14.0.0",
"Mozilla/5.0 (iPhone; U; CPU iPhone OS 5_1_1 like Mac OS X; da-dk) AppleWebKit/534.46.0 (KHTML, like Gecko) CriOS/19.0.1084.60 Mobile/9B206 Safari/7534.48.3",
"Mozilla/5.0 (iPhone; CPU iPhone OS 9_2 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13C75 Safari/601.1",
"Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A5362a Safari/604.1",
"Mozilla/5.0 (X11; Linux i686 on x86_64; rv:2.0.1) Gecko/20100101 Firefox/4.0.1 Fennec/2.0.1",
"Mozilla/5.0 (Maemo; Linux armv7l; rv:2.0.1) Gecko/20100101 Firefox/4.0.1 Fennec/2.0.1",
"Mozilla/5.0 (webOS/1.3; U; en-US) AppleWebKit/525.27.1 (KHTML, like Gecko) Version/1.0 Safari/525.27.1 Desktop/1.0",
"Mozilla/4.0 (compatible; MSIE 6.0; Windows 98; PalmSource/hspr-H102; Blazer/4.0) 16;320x320",
"Mozilla/5.0 (Symbian/3; Series60/5.2 NokiaN8-00/014.002; Profile/MIDP-2.1 Configuration/CLDC-1.1; en-us) AppleWebKit/525 (KHTML, like Gecko) Version/3.0 BrowserNG/7.2.6.4 3gpp-gba",
"Mozilla/5.0 (Symbian/3; Series60/5.2 NokiaX7-00/021.004; Profile/MIDP-2.1 Configuration/CLDC-1.1 ) AppleWebKit/533.4 (KHTML, like Gecko) NokiaBrowser/7.3.1.21 Mobile Safari/533.4 3gpp-gba",
"Mozilla/5.0 (SymbianOS/9.2; U; Series60/3.1 NokiaE90-1/07.24.0.3; Profile/MIDP-2.0 Configuration/CLDC-1.1 ) AppleWebKit/413 (KHTML, like Gecko) Safari/413 UP.Link/6.2.3.18.0",
"Mozilla/5.0 (SymbianOS 9.4; Series60/5.0 NokiaN97-1/10.0.012; Profile/MIDP-2.1 Configuration/CLDC-1.1; en-us) AppleWebKit/525 (KHTML, like Gecko) WicKed/7.1.12344",
"Opera/9.80 (S60; SymbOS; Opera Mobi/499; U; ru) Presto/2.4.18 Version/10.00",
"Mozilla/4.0 (compatible; MSIE 6.0; Windows CE; IEMobile 6.12; Microsoft ZuneHD 4.3)",
"Mozilla/4.0 (compatible; MSIE 6.0; Windows CE; IEMobile 7.11)",
"Mozilla/4.0 (compatible; MSIE 6.0; Windows CE; IEMobile 7.11) Sprint:PPC6800",
"Mozilla/4.0 (compatible; MSIE 6.0; Windows CE; IEMobile 8.12; MSIEMobile6.0)",
"Mozilla/4.0 (compatible; MSIE 7.0; Windows Phone OS 7.0; Trident/3.1; IEMobile/7.0) Asus;Galaxy6",
"Mozilla/4.0 (compatible; MSIE 7.0; Windows Phone OS 7.0; Trident/3.1; IEMobile/7.0)",
"Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0)",
"Mozilla/5.0 (compatible; MSIE 10.0; Windows Phone 8.0; Trident/6.0; IEMobile/10.0; ARM; Touch)",
"Mozilla/5.0 (compatible; MSIE 10.0; Windows Phone 8.0; Trident/6.0; IEMobile/10.0; ARM; Touch; NOKIA; Lumia 920)",
"Mozilla/5.0 (Windows Phone 8.1; ARM; Trident/7.0; Touch; rv:11.0; IEMobile/11.0; NOKIA; Lumia 530) like Gecko",
"Mozilla/5.0 (compatible; MSIE 10.0; Windows Phone 8.0; Trident/6.0; IEMobile/10.0; ARM; Touch; NOKIA; Lumia 920)",
"Mozilla/5.0 (Windows Phone 8.1; ARM; Trident/7.0; Touch; rv:11.0; IEMobile/11.0; NOKIA; Lumia 630) like Gecko",
"Mozilla/5.0 (Windows NT 6.2; ARM; Trident/7.0; Touch; rv:11.0; WPDesktop; NOKIA; Lumia 635) like Gecko",
"Mozilla/5.0 (Windows NT 6.2; ARM; Trident/7.0; Touch; rv:11.0; WPDesktop; NOKIA; Lumia 920) like Geckoo",
"Mozilla/5.0 (Windows Phone 8.1; ARM; Trident/7.0; Touch; rv:11.0; IEMobile/11.0; NOKIA; Lumia 920) like Gecko",
"Mozilla/5.0 (Mobile; Windows Phone 8.1; Android 4.0; ARM; Trident/7.0; Touch; rv:11.0; IEMobile/11.0; NOKIA; Lumia 929) like iPhone OS 7_0_3 Mac OS X AppleWebKit/537 (KHTML, like Gecko) Mobile Safari/537",
"Mozilla/5.0 (Windows Phone 10.0; Android 4.2.1; DEVICE INFO) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.71 Mobile Safari/537.36 Edge/12.0",
"Mozilla/5.0 (Windows NT 10.0; ARM; Lumia 950 Dual SIM) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.79 Safari/537.36 Edge/14.14393",
"DoCoMo/2.0 SH901iC(c100;TB;W24H12)",
"Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.0.7) Gecko/20060909 Firefox/1.5.0.7 MG(Novarra-Vision/6.9)",
"Mozilla/4.0 (compatible; MSIE 6.0; j2me) ReqwirelessWeb/3.5",
"Vodafone/1.0/V802SE/SEJ001 Browser/SEMC-Browser/4.1",
"BlackBerry7520/4.0.0 Profile/MIDP-2.0 Configuration/CLDC-1.1 UP.Browser/5.0.3.3 UP.Link/5.1.2.12 (Google WAP Proxy/1.0)",
"Nokia6100/1.0 (04.01) Profile/MIDP-1.0 Configuration/CLDC-1.0",
"Nokia6630/1.0 (2.3.129) SymbianOS/8.0 Series60/2.6 Profile/MIDP-2.0 Configuration/CLDC-1.1",
"Mozilla/2.0 (compatible; Ask Jeeves/Teoma)",
"Baiduspider ( http://www.baidu.com/search/spider.htm)",
"Mozilla/5.0 (compatible; bingbot/2.0 http://www.bing.com/bingbot.htm)",
"Mozilla/5.0 (compatible; Exabot/3.0; http://www.exabot.com/go/robot)",
"FAST-WebCrawler/3.8 (crawler at trd dot overture dot com; http://www.alltheweb.com/help/webmaster/crawler)",
"AdsBot-Google ( http://www.google.com/adsbot.html)",
"Mozilla/5.0 (compatible; Googlebot/2.1; http://www.google.com/bot.html)",
"Googlebot/2.1 ( http://www.googlebot.com/bot.html)",
"Googlebot-Image/1.0",
"Mediapartners-Google",
"DoCoMo/2.0 N905i(c100;TB;W24H16) (compatible; Googlebot-Mobile/2.1; http://www.google.com/bot.html)",
"Mozilla/5.0 (iPhone; U; CPU iPhone OS) (compatible; Googlebot-Mobile/2.1; http://www.google.com/bot.html)",
"SAMSUNG-SGH-E250/1.0 Profile/MIDP-2.0 Configuration/CLDC-1.1 UP.Browser/6.2.3.3.c.1.101 (GUI) MMP/2.0 (compatible; Googlebot-Mobile/2.1; http://www.google.com/bot.html)",
"Googlebot-News",
"Googlebot-Video/1.0",
"Mozilla/4.0 (compatible; GoogleToolbar 4.0.1019.5266-big; Windows XP 5.1; MSIE 6.0.2900.2180)",
"Mozilla/5.0 (en-us) AppleWebKit/525.13 (KHTML, like Gecko; Google Web Preview) Version/3.1 Safari/525.13",
"msnbot/1.0 ( http://search.msn.com/msnbot.htm)",
"msnbot/1.1 ( http://search.msn.com/msnbot.htm)",
"msnbot/0.11 ( http://search.msn.com/msnbot.htm)",
"msnbot-media/1.1 ( http://search.msn.com/msnbot.htm)",
"Mozilla/5.0 (compatible; Yahoo! Slurp; http://help.yahoo.com/help/us/ysearch/slurp)",
"Mozilla/5.0 (compatible; Yahoo! Slurp China; http://misc.yahoo.com.cn/help.html)",
"Mozilla/5.0 (compatible; YandexBot/3.0; +http://yandex.com/bots)",
"Mozilla/5.0 (compatible; YandexNews/4.0; +http://yandex.com/bots)",
"Mozilla/5.0 (compatible; archive.org_bot +http://www.archive.org/details/archive.org_bot)",
"Mozilla/5.0 (compatible; archive.org_bot; Wayback Machine Live Record; +http://archive.org/details/archive.org_bot)",
"Mozilla/5.0 (compatible; alexa site audit/1.0; +http://www.alexa.com/help/webmasters; )",
"EmailWolf 1.00",
"facebookexternalhit/1.1",
"facebookexternalhit/1.1 (+http://www.facebook.com/externalhit_uatext.php)",
"Facebot",
"Gaisbot/3.0 (robot@gais.cs.ccu.edu.tw; http://gais.cs.ccu.edu.tw/robot.php)",
"grub-client-1.5.3; (grub-client-1.5.3; Crawl your own stuff with http://grub.org)",
"Gulper Web Bot 0.2.4 (www.ecsl.cs.sunysb.edu/~maxim/cgi-bin/Link/GulperBot)",
"Screaming Frog SEO Spider/8.1",
"TurnitinBot (https://turnitin.com/robot/crawlerinfo.html)",
"Twitterbot/1.0",
"Xenu Link Sleuth/1.3.8",
"Mozilla/3.0 (compatible; NetPositive/2.1.1; BeOS)",
"Mozilla/5.0 (BeOS; U; BeOS BePC; en-US; rv:1.9a1) Gecko/20060702 SeaMonkey/1.5a",
"Mozilla/5.0 (OS/2; U; OS/2; en-US) AppleWebKit/533.3 (KHTML, like Gecko) Arora/0.11.0 Safari/533.3",
"Mozilla/5.0 (OS/2; Warp 4.5; rv:10.0.12) Gecko/20100101 Firefox/10.0.12",
"Mozilla/5.0 (OS/2; Warp 4.5; rv:24.0) Gecko/20100101 Firefox/24.0",
"Mozilla/5.0 (OS/2; Warp 4.5; rv:31.0) Gecko/20100101 Firefox/31.0",
"Mozilla/5.0 (OS/2; Warp 4.5; rv:38.0) Gecko/20100101 Firefox/38.0",
"Mozilla/5.0 (OS/2; Warp 4.5; rv:45.0) Gecko/20100101 Firefox/45.0",
"Mozilla/5.0 (OS/2; U; OS/2; en-US) AppleWebKit/533.3 (KHTML, like Gecko) QupZilla/1.3.1 Safari/533.3",
"Mozilla/5.0 (OS/2; Warp 4.5; rv:10.0.12) Gecko/20130108 Firefox/10.0.12 SeaMonkey/2.7.2",
"Mozilla/5.0 (OS/2; Warp 4.5; rv:24.0) Gecko/20100101 Firefox/24.0 SeaMonkey/2.21",
"Mozilla/5.0 (OS/2; Warp 4.5; rv:31.0) Gecko/20100101 Firefox/31.0 SeaMonkey/2.28",
"Mozilla/5.0 (OS/2; Warp 4.5; rv:38.0) Gecko/20100101 Firefox/38.0 SeaMonkey/2.35",
"Mozilla/5.0 (OS/2; Warp 4.5; rv:45.0) Gecko/20100101 Firefox/45.0 SeaMonkey/2.42.9esr",
"Adobe Application Manager 2.0",
"AndroidDownloadManager/5.1 (Linux; U; Android 5.1; Z820 Build/LMY47D)",
"Download Demon/3.5.0.11",
"Offline Explorer/2.5",
"SuperBot/4.4.0.60 (Windows XP)",
"WebCopier v4.6",
"Web Downloader/6.9",
"WebZIP/3.5 (http://www.spidersoft.com)",
"Wget/1.9 cvs-stable (Red Hat modified)",
"Wget/1.9.1",
"Wget/1.12 (freebsd8.1)",
"Bloglines/3.1 (http://www.bloglines.com)",
"everyfeed-spider/2.0 (http://www.everyfeed.com)",
"FeedFetcher-Google; ( http://www.google.com/feedfetcher.html)",
"Gregarius/0.5.2 ( http://devlog.gregarius.net/docs/ua)",
"Mozilla/5.0 (PLAYSTATION 3; 2.00)",
"Mozilla/5.0 (PLAYSTATION 3; 1.10)",
"Mozilla/4.0 (PSP (PlayStation Portable); 2.00)",
"Opera/9.30 (Nintendo Wii; U; ; 2047-7; en)",
"wii libnup/1.0",
"Java/1.6.0_13",
"libwww-perl/5.820",
"Peach/1.01 (Ubuntu 8.04 LTS; U; en)",
"Python-urllib/2.5",
"HTMLParser/1.6",
"Jigsaw/2.2.5 W3C_CSS_Validator_JFouffa/2.0",
"W3C_Validator/1.654",
"W3C_Validator/1.305.2.12 libwww-perl/5.64",
"P3P Validator",
"CSSCheck/1.2.2",
"WDG_Validator/1.6.2",
"facebookscraper/1.0( http://www.facebook.com/sharescraper_help.php)",
"grub-client-1.5.3; (grub-client-1.5.3; Crawl your own stuff with http://grub.org)",
"iTunes/4.2 (Macintosh; U; PPC Mac OS X 10.2)",
"Microsoft URL Control - 6.00.8862",
"Roku/DVP-4.1 (024.01E01250A)",
"Mozilla/5.0 (SMART-TV; X11; Linux armv7l) AppleWebkit/537.42 (KHTML, like Gecko) Chromium/25.0.1349.2 Chrome/25.0.1349.2 Safari/537.42",
"SearchExpress",
}
)

10
vendor/github.com/corpix/uarand/useragents.mk generated vendored Normal file
View file

@ -0,0 +1,10 @@
.PHONY: useragents.go
useragents.go:
curl -Ls -H'User-Agent: gotohellwithyour403' \
http://techpatterns.com/downloads/firefox/useragentswitcher.xml \
| ./scripts/extract-user-agents \
| ./scripts/generate-useragents-go $(name) \
> $@
go fmt $@
dependencies:: useragents.go

11
vendor/github.com/corpix/uarand/useragents_test.go generated vendored Normal file
View file

@ -0,0 +1,11 @@
package uarand
import (
"testing"
"github.com/stretchr/testify/assert"
)
func TestUserAgents(t *testing.T) {
assert.Equal(t, true, len(UserAgents) > 0)
}

26
vendor/github.com/icrowley/fake/.gitignore generated vendored Normal file
View file

@ -0,0 +1,26 @@
# Compiled Object files, Static and Dynamic libs (Shared Objects)
*.o
*.a
*.so
# Folders
_obj
_test
/vendor
# Architecture specific extensions/prefixes
*.[568vq]
[568vq].out
*.cgo1.go
*.cgo2.c
_cgo_defun.c
_cgo_gotypes.go
_cgo_export.*
_testmain.go
*.exe
*.test
*.prof
.DS_Store

11
vendor/github.com/icrowley/fake/.go-makefile.json generated vendored Normal file
View file

@ -0,0 +1,11 @@
{
"build_id_generator": "0x$(shell echo $(version) | sha1sum | awk '{print $$1}')",
"host": "github.com",
"include": [],
"kind": "package",
"name": "fake",
"tool": [],
"user": "icrowley",
"version_generator": "$(shell git rev-list --count HEAD).$(shell git rev-parse --short HEAD)",
"version_variable": "cli.version"
}

11
vendor/github.com/icrowley/fake/.travis.yml generated vendored Normal file
View file

@ -0,0 +1,11 @@
sudo: false
language: go
go:
- 1.6
- 1.7
- 1.8
- master
- tip
script: make test

22
vendor/github.com/icrowley/fake/LICENSE generated vendored Normal file
View file

@ -0,0 +1,22 @@
The MIT License (MIT)
Copyright (c) 2014 Dmitry Afanasyev
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

48
vendor/github.com/icrowley/fake/Makefile generated vendored Normal file
View file

@ -0,0 +1,48 @@
.DEFAULT_GOAL = all
numcpus := $(shell cat /proc/cpuinfo | grep '^processor\s*:' | wc -l)
version := $(shell git rev-list --count HEAD).$(shell git rev-parse --short HEAD)
name := fake
package := github.com/icrowley/$(name)
.PHONY: all
all:: dependencies
.PHONY: tools
tools::
@if [ ! -e "$(GOPATH)"/bin/glide ]; then go get github.com/Masterminds/glide; fi
@if [ ! -e "$(GOPATH)"/bin/godef ]; then go get github.com/rogpeppe/godef; fi
@if [ ! -e "$(GOPATH)"/bin/gocode ]; then go get github.com/nsf/gocode; fi
@if [ ! -e "$(GOPATH)"/bin/gometalinter ]; then go get github.com/alecthomas/gometalinter && gometalinter --install; fi
@if [ ! -e "$(GOPATH)"/src/github.com/stretchr/testify/assert ]; then go get github.com/stretchr/testify/assert; fi
.PHONY: dependencies
dependencies:: tools
glide install
.PHONY: clean
clean:: tools
glide cache-clear
.PHONY: test
test:: dependencies
go test -v \
$(shell glide novendor)
.PHONY: bench
bench:: dependencies
go test \
-bench=. -v \
$(shell glide novendor)
.PHONY: lint
lint:: dependencies
go vet $(shell glide novendor)
gometalinter \
--deadline=5m \
--concurrency=$(numcpus) \
$(shell glide novendor)
.PHONY: check
check:: lint test

90
vendor/github.com/icrowley/fake/README.md generated vendored Normal file
View file

@ -0,0 +1,90 @@
[![Build Status](https://img.shields.io/travis/icrowley/fake.svg?style=flat)](https://travis-ci.org/icrowley/fake) [![Godoc](http://img.shields.io/badge/godoc-reference-blue.svg?style=flat)](https://godoc.org/github.com/icrowley/fake) [![license](http://img.shields.io/badge/license-MIT-red.svg?style=flat)](https://raw.githubusercontent.com/icrowley/fake/master/LICENSE)
Fake
====
Fake is a fake data generator for Go (Golang), heavily inspired by the forgery and ffaker Ruby gems.
## About
Most data and methods are ported from forgery/ffaker Ruby gems.
For the list of available methods please look at https://godoc.org/github.com/icrowley/fake.
Currently english and russian languages are available.
Fake embeds samples data files unless you call `UseExternalData(true)` in order to be able to work without external files dependencies when compiled, so, if you add new data files or make changes to existing ones don't forget to regenerate data.go file using `github.com/mjibson/esc` tool and `esc -o data.go -pkg fake data` command (or you can just use `go generate` command if you are using Go 1.4 or later).
## Install
```shell
go get github.com/icrowley/fake
```
## Import
```go
import (
"github.com/icrowley/fake"
)
```
## Documentation
Documentation can be found at godoc:
https://godoc.org/github.com/icrowley/fake
## Test
To run the project tests:
```shell
cd test
go test
```
## Examples
```go
name := fake.FirstName()
fullname := fake.FullName()
product := fake.Product()
```
Changing language:
```go
err := fake.SetLang("ru")
if err != nil {
panic(err)
}
password := fake.SimplePassword()
```
Using english fallback:
```go
err := fake.SetLang("ru")
if err != nil {
panic(err)
}
fake.EnFallback(true)
password := fake.Paragraph()
```
Using external data:
```go
fake.UseExternalData(true)
password := fake.Paragraph()
```
### Author
Dmitry Afanasyev,
http://twitter.com/i_crowley
dimarzio1986@gmail.com
### Maintainers
Dmitry Moskowski
https://github.com/corpix

69
vendor/github.com/icrowley/fake/addresses.go generated vendored Normal file
View file

@ -0,0 +1,69 @@
package fake
import "strconv"
// Continent generates random continent
func Continent() string {
return lookup(lang, "continents", true)
}
// Country generates random country
func Country() string {
return lookup(lang, "countries", true)
}
// City generates random city
func City() string {
city := lookup(lang, "cities", true)
switch r.Intn(5) {
case 0:
return join(cityPrefix(), city)
case 1:
return join(city, citySuffix())
default:
return city
}
}
func cityPrefix() string {
return lookup(lang, "city_prefixes", false)
}
func citySuffix() string {
return lookup(lang, "city_suffixes", false)
}
// State generates random state
func State() string {
return lookup(lang, "states", false)
}
// StateAbbrev generates random state abbreviation
func StateAbbrev() string {
return lookup(lang, "state_abbrevs", false)
}
// Street generates random street name
func Street() string {
street := lookup(lang, "streets", true)
return join(street, streetSuffix())
}
// StreetAddress generates random street name along with building number
func StreetAddress() string {
return join(Street(), strconv.Itoa(r.Intn(100)))
}
func streetSuffix() string {
return lookup(lang, "street_suffixes", true)
}
// Zip generates random zip code using one of the formats specifies in zip_format file
func Zip() string {
return generate(lang, "zips", true)
}
// Phone generates random phone number using one of the formats format specified in phone_format file
func Phone() string {
return generate(lang, "phones", true)
}

56
vendor/github.com/icrowley/fake/addresses_test.go generated vendored Normal file
View file

@ -0,0 +1,56 @@
package fake
import (
"testing"
)
func TestAddresses(t *testing.T) {
for _, lang := range GetLangs() {
SetLang(lang)
v := Continent()
if v == "" {
t.Errorf("Continent failed with lang %s", lang)
}
v = Country()
if v == "" {
t.Errorf("Country failed with lang %s", lang)
}
v = City()
if v == "" {
t.Errorf("City failed with lang %s", lang)
}
v = State()
if v == "" {
t.Errorf("State failed with lang %s", lang)
}
v = StateAbbrev()
if v == "" && lang == "en" {
t.Errorf("StateAbbrev failed with lang %s", lang)
}
v = Street()
if v == "" {
t.Errorf("Street failed with lang %s", lang)
}
v = StreetAddress()
if v == "" {
t.Errorf("StreetAddress failed with lang %s", lang)
}
v = Zip()
if v == "" {
t.Errorf("Zip failed with lang %s", lang)
}
v = Phone()
if v == "" {
t.Errorf("Phone failed with lang %s", lang)
}
}
}

69
vendor/github.com/icrowley/fake/credit_cards.go generated vendored Normal file
View file

@ -0,0 +1,69 @@
package fake
import (
"strings"
"strconv"
)
type creditCard struct {
vendor string
length int
prefixes []int
}
var creditCards = map[string]creditCard{
"visa": {"VISA", 16, []int{4539, 4556, 4916, 4532, 4929, 40240071, 4485, 4716, 4}},
"mastercard": {"MasterCard", 16, []int{51, 52, 53, 54, 55}},
"amex": {"American Express", 15, []int{34, 37}},
"discover": {"Discover", 16, []int{6011}},
}
// CreditCardType returns one of the following credit values:
// VISA, MasterCard, American Express and Discover
func CreditCardType() string {
n := len(creditCards)
var vendors []string
for _, cc := range creditCards {
vendors = append(vendors, cc.vendor)
}
return vendors[r.Intn(n)]
}
// CreditCardNum generated credit card number according to the card number rules
func CreditCardNum(vendor string) string {
if vendor != "" {
vendor = strings.ToLower(vendor)
} else {
var vendors []string
for v := range creditCards {
vendors = append(vendors, v)
}
vendor = vendors[r.Intn(len(vendors))]
}
card := creditCards[vendor]
prefix := strconv.Itoa(card.prefixes[r.Intn(len(card.prefixes))])
num := []rune(prefix)
for i := 0; i < card.length-len(prefix); i++ {
num = append(num, genCCDigit(num))
}
return string(num)
}
func genCCDigit(num []rune) rune {
sum := 0
for i := len(num) - 1; i >= 0; i-- {
n := int(num[i])
if i%2 != 0 {
sum += n
} else {
if n*2 > 9 {
sum += n*2 - 9
} else {
sum += n * 2
}
}
}
return rune(((sum/10+1)*10 - sum) % 10)
}

26
vendor/github.com/icrowley/fake/credit_cards_test.go generated vendored Normal file
View file

@ -0,0 +1,26 @@
package fake
import (
"testing"
)
func TestCreditCards(t *testing.T) {
for _, lang := range GetLangs() {
SetLang(lang)
v := CreditCardType()
if v == "" {
t.Errorf("CreditCardType failed with lang %s", lang)
}
v = CreditCardNum("")
if v == "" {
t.Errorf("CreditCardNum failed with lang %s", lang)
}
v = CreditCardNum("visa")
if v == "" {
t.Errorf("CreditCardNum failed with lang %s", lang)
}
}
}

11
vendor/github.com/icrowley/fake/currencies.go generated vendored Normal file
View file

@ -0,0 +1,11 @@
package fake
// Currency generates currency name
func Currency() string {
return lookup(lang, "currencies", true)
}
// CurrencyCode generates currency code
func CurrencyCode() string {
return lookup(lang, "currency_codes", true)
}

21
vendor/github.com/icrowley/fake/currencies_test.go generated vendored Normal file
View file

@ -0,0 +1,21 @@
package fake
import (
"testing"
)
func TestCurrencies(t *testing.T) {
for _, lang := range GetLangs() {
SetLang(lang)
v := Currency()
if v == "" {
t.Errorf("Currency failed with lang %s", lang)
}
v = CurrencyCode()
if v == "" {
t.Errorf("CurrencyCode failed with lang %s", lang)
}
}
}

487
vendor/github.com/icrowley/fake/data.go generated vendored Normal file

File diff suppressed because one or more lines are too long

19
vendor/github.com/icrowley/fake/data/en/adjectives generated vendored Normal file
View file

@ -0,0 +1,19 @@
Air
Gel
Auto
Power
Tag
Audible
HD
GPS
Portable
Disc
Electric
Performance
Side
Video
Input
Output
Direct
Remote
Digital

36
vendor/github.com/icrowley/fake/data/en/characters generated vendored Normal file
View file

@ -0,0 +1,36 @@
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
z
0
1
2
3
4
5
6
7
8
9

478
vendor/github.com/icrowley/fake/data/en/cities generated vendored Normal file
View file

@ -0,0 +1,478 @@
Adelanto
Agoura Hills
Alameda
Albany
Alhambra
Aliso Viejo
Alturas
Amador City
American Canyon
Anaheim
Anderson
Angels Camp
Antioch
Apple Valley
Arcadia
Arcata
Arroyo Grande
Artesia
Arvin
Atascadero
Atherton
Atwater
Auburn
Avalon
Avenal
Azusa
Bakersfield
Baldwin Park
Banning
Barstow
Beaumont
Bell
Bell Gardens
Bellflower
Belmont
Belvedere
Benicia
Berkeley
Beverly Hills
Big Bear Lake
Biggs
Bishop
Blue Lake
Blythe
Bradbury
Brawley
Brea
Brentwood
Brisbane
Buellton
Buena Park
Burbank
Burlingame
Calabasas
Calexico
California City
Calimesa
Calipatria
Calistoga
Camarillo
Canyon Lake
Capitola
Carlsbad
Carmel-by-the-Sea
Carpinteria
Carson
Cathedral City
Ceres
Cerritos
Chico
Chino
Chino Hills
Chowchilla
Chula Vista
Citrus Heights
Claremont
Clayton
Clearlake
Cloverdale
Clovis
Coachella
Coalinga
Colfax
Colma
Colton
Colusa
City of Commerce
Compton
Concord
Corcoran
Corning
Corona
Coronado
Corte Madera
Costa Mesa
Cotati
Covina
Crescent City
Cudahy
Culver City
Cupertino
Cypress
Daly City
Dana Point
Danville
Davis
Del Mar
Del Rey Oaks
Delano
Desert Hot Springs
Diamond Bar
Dinuba
Dixon
Dorris
Dos Palos
Downey
Duarte
Dublin
Dunsmuir
East Palo Alto
El Cajon
El Centro
El Cerrito
El Monte
El Segundo
Elk Grove
Emeryville
Encinitas
Escalon
Escondido
Etna
Eureka
Exeter
Fairfax
Fairfield
Farmersville
Ferndale
Fillmore
Firebaugh
Folsom
Fontana
Fort Bragg
Fort Jones
Fortuna
Foster City
Fountain Valley
Fowler
Fremont
Fresno
Fullerton
Galt
Garden Grove
Gardena
Gilroy
Glendale
Glendora
Goleta
Gonzales
Grand Terrace
Grass Valley
Greenfield
Gridley
Grover Beach
Guadalupe
Gustine
Half Moon Bay
Hanford
Hawaiian Gardens
Hawthorne
Hayward
Healdsburg
Hemet
Hercules
Hermosa Beach
Hesperia
Hidden Hills
Highland
Hillsborough
Hollister
Holtville
Hughson
Huntington Beach
Huntington Park
Huron
Imperial
Imperial Beach
Indian Wells
Indio
City of Industry
Inglewood
Ione
Irvine
Irwindale
Isleton
Jackson
Kerman
King City
Kingsburg
La Cañada Flintridge
La Habra
La Habra Heights
La Mesa
La Mirada
La Palma
La Puente
La Quinta
La Verne
Lafayette
Laguna Beach
Laguna Hills
Laguna Niguel
Laguna Woods
Lake Elsinore
Lake Forest
Lakeport
Lakewood
Lancaster
Larkspur
Lathrop
Lawndale
Lemon Grove
Lemoore
Lincoln
Lindsay
Live Oak
Livermore
Livingston
Lodi
Loma Linda
Lomita
Lompoc
Long Beach
Loomis
Los Alamitos
Los Altos
Los Altos Hills
Los Angeles
Los Banos
Los Gatos
Loyalton
Lynwood
Madera
Malibu
Mammoth Lakes
Manhattan Beach
Manteca
Maricopa
Marina
Martinez
Marysville
Maywood
McFarland
Mendota
Menlo Park
Menifee
Merced
Mill Valley
Millbrae
Milpitas
Mission Viejo
Modesto
Monrovia
Montague
Montclair
Monte Sereno
Montebello
Monterey
Monterey Park
Moorpark
Moraga
Moreno Valley
Morgan Hill
Morro Bay
Mount Shasta
Mountain View
Murrieta
Napa
National City
Needles
Nevada City
Newark
Newman
Newport Beach
Norco
Norwalk
Novato
Oakdale
Oakland
Oakley
Oceanside
Ojai
Ontario
Orange
Orange Cove
Orinda
Orland
Oroville
Oxnard
Pacific Grove
Pacifica
Palm Desert
Palm Springs
Palmdale
Palo Alto
Palos Verdes Estates
Paradise
Paramount
Parlier
Pasadena
Paso Robles
Patterson
Perris
Petaluma
Pico Rivera
Piedmont
Pinole
Pismo Beach
Pittsburg
Placentia
Placerville
Pleasant Hill
Pleasanton
Plymouth
Point Arena
Pomona
Port Hueneme
Porterville
Portola
Portola Valley
Poway
Rancho Cordova
Rancho Cucamonga
Rancho Mirage
Rancho Palos Verdes
Rancho Santa Margarita
Red Bluff
Redding
Redlands
Redondo Beach
Redwood City
Reedley
Rialto
Richmond
Ridgecrest
Rio Dell
Rio Vista
Ripon
Riverbank
Riverside
Rocklin
Rohnert Park
Rolling Hills
Rolling Hills Estates
Rosemead
Roseville
Ross
Sacramento
Salinas
San Anselmo
San Bernardino
San Bruno
San Carlos
San Clemente
San Diego
San Dimas
San Fernando
San Francisco
San Gabriel
San Jacinto
San Joaquin
San Jose
San Juan Bautista
San Juan Capistrano
San Leandro
San Luis Obispo
San Marcos
San Marino
San Mateo
San Pablo
San Rafael
San Ramon
Sand City
Sanger
Santa Ana
Santa Barbara
Santa Clara
Santa Clarita
Santa Cruz
Santa Fe Springs
Santa Maria
Santa Monica
Santa Paula
Santa Rosa
Santee
Saratoga
Sausalito
Scotts Valley
Seal Beach
Seaside
Sebastopol
Selma
Shafter
Shasta Lake
Sierra Madre
Signal Hill
Simi Valley
Solana Beach
Soledad
Solvang
Sonoma
Sonora
South El Monte
South Gate
South Lake Tahoe
South Pasadena
South San Francisco
St. Helena
Stanton
Stockton
Studio City
Suisun City
Sunnyvale
Susanville
Sutter Creek
Taft
Tehachapi
Tehama
Temecula
Temple City
Thousand Oaks
Tiburon
Torrance
Tracy
Trinidad
Truckee
Tulare
Tulelake
Turlock
Tustin
Twentynine Palms
Ukiah
Union City
Upland
Vacaville
Vallejo
Ventura
Vernon
Victorville
Villa Park
Visalia
Vista
Walnut
Walnut Creek
Wasco
Waterford
Watsonville
Weed
West Covina
West Sacramento
Westlake Village
Westminster
Westmorland
Wheatland
Whittier
Williams
Willits
Willows
Windsor
Winters
Woodlake
Woodland
Woodside
Yorba Linda
Yountville
Yreka
Yuba City
Yucaipa
Yucca Valley

19
vendor/github.com/icrowley/fake/data/en/colors generated vendored Normal file
View file

@ -0,0 +1,19 @@
Red
Blue
Green
Yellow
Orange
Purple
Violet
Indigo
Teal
Pink
Fuscia
Goldenrod
Mauv
Aquamarine
Turquoise
Crimson
Maroon
Puce
Khaki

399
vendor/github.com/icrowley/fake/data/en/companies generated vendored Normal file
View file

@ -0,0 +1,399 @@
Kwilith
Eayo
Voolith
Eabox
Gigabox
Meeveo
Yombu
Eire
Oyonder
Dynazzy
Demimbu
Wikizz
InnoZ
Pixonyx
Snaptags
Yamia
Avamm
Centimia
Abata
Feedmix
Fadeo
Thoughtbridge
Thoughtmix
Agivu
Janyx
Bubblemix
Divape
Leenti
Buzzbean
Agimba
Jaxspan
Skyvu
Flipstorm
Browseblab
Edgepulse
Cogibox
Lajo
Realbridge
Twimm
Kwinu
Thoughtstorm
Flipopia
Dabshots
Npath
Avavee
BlogXS
Layo
Skyba
Jabbersphere
Thoughtblab
Skinix
Photolist
Innojam
Skinder
Oyope
Wikizz
Babbleblab
Rhyzio
Yambee
Divanoodle
Babbleset
Topicware
Yodoo
Devpoint
Edgeblab
Devshare
Trudoo
Cogidoo
Blogpad
Voonder
Mynte
Fatz
Gabtune
Mybuzz
Kayveo
Kazu
Vinte
Photojam
Meetz
Zooveo
Photobug
Oyoba
Realcube
Livefish
Kare
Jayo
Brightbean
Livepath
Skynoodle
Devify
Dabjam
Katz
Zoomzone
Jaloo
Browsebug
Shuffledrive
Meezzy
Fivebridge
Gabspot
Roomm
Fivechat
Blogtag
Zoonoodle
Kanoodle
Camido
Yadel
Yodo
Topicstorm
Jabbertype
Jatri
Kwideo
Izio
Voomm
Jaxbean
Skipstorm
Mita
Gigaclub
Skimia
Blogtags
Vitz
Dynava
Jetwire
Miboo
Quimba
Einti
Oba
JumpXS
Voonix
Jabberstorm
Thoughtstorm
Myworks
Devbug
Linkbridge
Dabfeed
Meembee
Skiba
Yoveo
Eazzy
Photobug
Edgeclub
Oyondu
Flipbug
Pixoboo
Zava
Tagtune
Zoombox
Eidel
Jaxnation
Twitterworks
Wordpedia
Feednation
DabZ
Mudo
Talane
Twitterbridge
Trilith
Meemm
Pixope
Twitterlist
Ooba
Trudeo
Brainverse
Gigashots
Rhynoodle
Realfire
Yata
Realblab
Jetpulse
Yakidoo
Tagpad
Edgewire
Yacero
Blognation
Avaveo
Oloo
Lazz
Flashspan
Skipfire
Rooxo
Realbuzz
Muxo
Jayo
Topdrive
Ntag
Topicblab
Meedoo
Demizz
Bluezoom
Tagfeed
Kamba
Mycat
Dynabox
Brightdog
Youspan
Edgetag
Roombo
Feedbug
Meejo
Flashpoint
Youbridge
Gabvine
Quatz
Quire
Camimbo
Aibox
Meevee
Gabcube
Browsetype
Shuffletag
Minyx
Digitube
Innotype
Centidel
Buzzdog
Jazzy
Divavu
Browsedrive
Voonte
Quinu
Quaxo
Youopia
Wordify
Skivee
Zoomcast
Skippad
Vidoo
Shufflester
Linklinks
Youspan
Quinu
Topiclounge
Feedfish
Oozz
Centizu
Skiptube
Vipe
Zoomdog
Twimbo
Lazzy
Nlounge
Skidoo
Teklist
Kimia
Twitterwire
Mynte
Thoughtsphere
Rhycero
Fivespan
Shufflebeat
Skyble
Photospace
Quimm
Rhynyx
Skaboo
Latz
Kwimbee
Fliptune
LiveZ
Geba
Wordtune
Voolia
Roodel
Ainyx
Zoonder
Wikivu
Linkbuzz
Abatz
Devpulse
Trunyx
Ozu
Zoomlounge
Mydo
Tagcat
Devcast
Jabbercube
Skilith
Realpoint
Quamba
Wordware
Gabtype
Youtags
Voomm
Rhybox
Tazz
Riffpedia
Babbleopia
Zoombeat
Photobean
Zoozzy
Twiyo
Trupe
Feedspan
Mydeo
Ntags
Tekfly
Tavu
Riffwire
Cogilith
Topiczoom
Jaxworks
Tagchat
Trilia
Kaymbo
Yodel
Eare
Gigazoom
Dabtype
Chatterpoint
Plajo
Tagopia
Wikido
Twinder
Zooxo
Linktype
Skajo
Riffpath
Avamba
Edgeify
Midel
Yozio
Mymm
Babblestorm
Youfeed
Wikibox
Skinte
Brainsphere
Zoovu
Flashset
Ailane
Zazio
Brainlounge
Bubblebox
Quatz
Bubbletube
Browsezoom
Dazzlesphere
Feedfire
Yakijo
Voonyx
Dabvine
Skibox
Buzzster
Plambee
Realcube
Dynabox
Jabbersphere
Demivee
Oyoyo
Tanoodle
Jamia
Skimia
Brainbox
Thoughtworks
Yotz
Blogspan
Eimbee
Aivee
Yabox
Realmix
Buzzshare
Omba
Chatterbridge
Skyndu
Browsecat
Twitternation
Fanoodle
Twitterbeat
Tambee
Jabberbean
Livetube
Livetube
Viva
Vimbo
Podcat
Dablist
Leexo
Kazio
Twinte
Aimbo
Rhyloo
Flashdog
Meevee
Thoughtbeat
Gevee
Vinder
Eamia
Fiveclub
Oodoo
Tazzy
Katz
Bluejam
Skalith
Oyoloo
Aimbu
Photofeed
Yakitri
Topicshots
Reallinks
Eadel

7
vendor/github.com/icrowley/fake/data/en/continents generated vendored Normal file
View file

@ -0,0 +1,7 @@
Asia
North America
South America
Australia
Africa
Europe
Antarctica

249
vendor/github.com/icrowley/fake/data/en/countries generated vendored Normal file
View file

@ -0,0 +1,249 @@
Afghanistan
Åland
Albania
Algeria
American Samoa
Andorra
Angola
Anguilla
Antarctica
Antigua and Barbuda
Argentina
Armenia
Aruba
Ascension Island
Australia
Austria
Azerbaijan
Bahamas
Bahrain
Bangladesh
Barbados
Belarus
Belgium
Belize
Benin
Bermuda
Bhutan
Bolivia
Bosnia and Herzegovina
Botswana
Bouvet Island
Brazil
British Virgin Islands
British Indian Ocean Territory
Brunei Darussalam
Bulgaria
Burkina Faso
Burundi
Cambodia
Cameroon
Canada
Cape Verde
Cayman Islands
Central African Republic
Chad
Chile
China
Christmas Island
Cocos (Keeling) Island
Colombia
Comoros
Congo, Republic of
Congo, Democratic Republic of
Cook Islands
Costa Rica
Cote d'Ivoire
Croatia
Cuba
Cyprus
Czech Republic
Denmark
Djibouti
Dominica
Dominican Republic
Ecuador
Egypt
El Salvador
Equatorial Guinea
Eritrea
Estonia
Ethiopia
Falkland Islands (Malvinas)
Faroe Islands
Fiji
Finland
France
French Guiana
French Polynesia
French Southern Territories
Gabon
Gambia
Georgia
Germany
Ghana
Gibraltar
Greece
Greenland
Grenada
Guadeloupe
Guam
Guatemala
Guernsey
Guinea
Guinea-Bissau
Guyana
Haiti
Heard and McDonald Islands
Honduras
Hong Kong
Hungary
Iceland
India
Indonesia
Iran
Iraq
Ireland
Isle of Man
Israel
Italy
Jamaica
Japan
Jersey
Jordan
Kazakhstan
Kenya
Kiribati
Korea, North
Korea, South
Kuwait
Kyrgyzstan
Laos
Latvia
Lebanon
Lesotho
Liberia
Libya
Liechtenstein
Lithuania
Luxembourg
Macau
Macedonia
Madagascar
Malawi
Malaysia
Maldives
Mali
Malta
Marshall Islands
Martinique
Mauritania
Mauritius
Mayotte
Mexico
Micronesia
Moldova
Monaco
Mongolia
Montenegro
Montserrat
Morocco
Mozambique
Myanmar
Namibia
Nauru
Nepal
Netherlands
Netherlands Antilles
New Caledonia
New Zealand
Nicaragua
Niue
Niger
Nigeria
Norfolk Island
Northern Mariana Islands
Norway
Oman
Pakistan
Palau
Palestinian Territory, Occupied
Panama
Papua New Guinea
Paraguay
Peru
Philippines
Pitcairn Island
Poland
Portugal
Puerto Rico
Qatar
Reunion
Romania
Russia
Rwanda
Saint Barthelemy
Saint Helena
Saint Kitts and Nevis
Saint Lucia
Saint Martin
Saint Pierre and Miquelon
Saint Vincent and the Grenadines
Samoa
San Marino
Sao Tome and Principe
Saudia Arabia
Senegal
Serbia
Seychelles
Sierra Leone
Singapore
Slovakia
Slovenia
Solomon Islands
Somalia
South Africa
South Georgia and the South Sandwich Islands
Spain
Sri Lanka
Sudan
Suriname
Svalbard and Jan Mayen Islands
Swaziland
Sweden
Switzerland
Syria
Taiwan
Tajikistan
Tanzania
Thailand
Timor-Leste
Togo
Tokelau
Tonga
Trinidad and Tobago
Tunisia
Turkey
Turkmenistan
Turks and Caicos Islands
Tuvalu
Uganda
Ukraine
United Arab Emirates
United Kingdom
United States of America
United States Virgin Islands
Uruguay
US Minor Outlying Islands
USSR
Uzbekistan
Vanuatu
Vatican City State (Holy See)
Venezuela
Vietnam
Wallis and Futuna Islands
Western Sahara
Yemen
Yugoslavia
Zambia
Zimbabwe

106
vendor/github.com/icrowley/fake/data/en/currencies generated vendored Normal file
View file

@ -0,0 +1,106 @@
Afghanistan Afghanis
Albania Leke
Algeria Dinars
America (United States) Dollars
Argentina Pesos
Australia Dollars
Austria Schillings
Bahamas Dollars
Bahrain Dinars
Bangladesh Taka
Barbados Dollars
Belgium Francs
Bermuda Dollars
Brazil Reais
Bulgaria Leva
Canada Dollars
CFA BCEAO Francs
CFA BEAC Francs
Chile Pesos
China Yuan Renminbi
RMB (China Yuan Renminbi)
Colombia Pesos
CFP Francs
Costa Rica Colones
Croatia Kuna
Cyprus Pounds
Czech Republic Koruny
Denmark Kroner
Deutsche (Germany) Marks
Dominican Republic Pesos
Dutch (Netherlands) Guilders
Eastern Caribbean Dollars
Egypt Pounds
Estonia Krooni
Euros
Fiji Dollars
Finland Markkaa
France Francs
Germany Deutsche Marks
Gold Ounces
Greece Drachmae
Holland (Netherlands) Guilders
Hong Kong Dollars
Hungary Forint
Iceland Kronur
IMF Special Drawing Right
India Rupees
Indonesia Rupiahs
Iran Rials
Iraq Dinars
Ireland Pounds
Israel New Shekels
Italy Lire
Jamaica Dollars
Japan Yen
Jordan Dinars
Kenya Shillings
Korea (South) Won
Kuwait Dinars
Lebanon Pounds
Luxembourg Francs
Malaysia Ringgits
Malta Liri
Mauritius Rupees
Mexico Pesos
Morocco Dirhams
Netherlands Guilders
New Zealand Dollars
Norway Kroner
Oman Rials
Pakistan Rupees
Palladium Ounces
Peru Nuevos Soles
Philippines Pesos
Platinum Ounces
Polish Zloty
Portugal Escudos
Qatar Riyals
Romania New Lei
Romania Lei
Russia Rubles
Saudi Arabia Riyals
Silver Ounces
Singapore Dollars
Slovakia Koruny
Slovenia Tolars
South Africa Rand
South Korea Won
Spain Pesetas
Special Drawing Rights (IMF)
Sri Lanka Rupees
Sudan Pounds
Sweden Kronor
Switzerland Francs
Taiwan New Dollars
Thailand Baht
Trinidad and Tobago Dollars
Tunisia Dinars
Turkey Lira
United Arab Emirates Dirhams
United Kingdom Pounds
United States Dollars
Venezuela Bolivares
Venezuela Bolivares Fuertes
Vietnam Dong
Zambia Kwacha

130
vendor/github.com/icrowley/fake/data/en/currency_codes generated vendored Normal file
View file

@ -0,0 +1,130 @@
EUR
USD
GBP
CAD
AUD
JPY
INR
NZD
CHF
ZAR
EUR
AFN
ALL
DZD
USD
ARS
AUD
ATS
BSD
BHD
BDT
BBD
BEF
BMD
BRL
BGN
CAD
XOF
XAF
CLP
CNY
CNY
COP
XPF
CRC
HRK
CYP
CZK
DKK
DEM
DOP
NLG
XCD
EGP
EEK
EUR
FJD
FIM
FRF
DEM
XAU
GRD
NLG
HKD
HUF
ISK
XDR
INR
IDR
IRR
IQD
IEP
ILS
ITL
JMD
JPY
JOD
KES
KRW
KWD
LBP
LUF
MYR
MTL
MUR
MXN
MAD
NLG
NZD
NOK
OMR
PKR
XPD
PEN
PHP
XPT
PLN
PTE
QAR
RON
ROL
RUB
SAR
XAG
SGD
SKK
SIT
ZAR
KRW
ESP
XDR
LKR
SDG
SEK
CHF
TWD
THB
TTD
TND
TRY
AED
GBP
USD
VEB
VEF
VND
ZMK
EUR
XAF
XOF
XPF
XCD
EUR
XDR
XAU
XAG
XAU
XPT
XPD
EUR

251
vendor/github.com/icrowley/fake/data/en/domain_zones generated vendored Normal file
View file

@ -0,0 +1,251 @@
ac
ad
ae
af
ag
ai
al
am
an
ao
aq
ar
as
at
au
aw
ax
az
ba
bb
bd
be
bf
bg
bh
bi
bj
bl
bm
bn
bo
br
bs
bt
bv
bw
by
bz
ca
cc
cd
cf
cg
ch
ci
ck
cl
cm
cn
co
cr
cu
cv
cx
cy
cz
de
dj
dk
dm
do
dz
ec
ee
eg
eh
er
es
et
eu
fi
fj
fk
fm
fo
fr
ga
gb
gd
ge
gf
gg
gh
gi
gl
gm
gn
gp
gq
gr
gs
gt
gu
gw
gy
hk
hm
hn
hr
ht
hu
id
ie
il
im
in
io
iq
ir
is
it
je
jm
jo
jp
ke
kg
kh
ki
km
kn
kp
kr
kw
ky
kz
la
lb
lc
li
lk
lr
ls
lt
lu
lv
ly
ma
mc
md
me
mg
mh
mk
ml
mm
mn
mo
mp
mq
mr
ms
mt
mu
mv
mw
mx
my
mz
na
nc
ne
nf
ng
ni
nl
no
np
nr
nu
nz
om
pa
pe
pf
pg
ph
pk
pl
pm
pn
pr
ps
pt
pw
py
qa
re
ro
rs
ru
rw
sa
sb
sc
sd
se
sg
sh
si
sj
sk
sl
sm
sn
so
sr
st
su
sv
sy
sz
tc
td
tf
tg
th
tj
tk
tl
tm
tn
to
tp
tr
tt
tv
tw
tz
ua
ug
uk
um
us
uy
uz
va
vc
ve
vg
vi
vn
vu
wf
ws
ye
yt
yu
za
zm
zw

View file

@ -0,0 +1,100 @@
Mary
Patricia
Linda
Barbara
Elizabeth
Jennifer
Maria
Susan
Margaret
Dorothy
Lisa
Nancy
Karen
Betty
Helen
Sandra
Donna
Carol
Ruth
Sharon
Michelle
Laura
Sarah
Kimberly
Deborah
Jessica
Shirley
Cynthia
Angela
Melissa
Brenda
Amy
Anna
Rebecca
Virginia
Kathleen
Pamela
Martha
Debra
Amanda
Stephanie
Carolyn
Christine
Marie
Janet
Catherine
Frances
Ann
Joyce
Diane
Alice
Julie
Heather
Teresa
Doris
Gloria
Evelyn
Jean
Cheryl
Mildred
Katherine
Joan
Ashley
Judith
Rose
Janice
Kelly
Nicole
Judy
Christina
Kathy
Theresa
Beverly
Denise
Tammy
Irene
Jane
Lori
Rachel
Marilyn
Andrea
Kathryn
Louise
Sara
Anne
Jacqueline
Wanda
Bonnie
Julia
Ruby
Lois
Tina
Phyllis
Norma
Paula
Diana
Annie
Lillian
Emily
Robin

View file

@ -0,0 +1,250 @@
Smith
Johnson
Williams
Jones
Brown
Davis
Miller
Wilson
Moore
Taylor
Anderson
Thomas
Jackson
White
Harris
Martin
Thompson
Garcia
Martinez
Robinson
Clark
Rodriguez
Lewis
Lee
Walker
Hall
Allen
Young
Hernandez
King
Wright
Lopez
Hill
Scott
Green
Adams
Baker
Gonzalez
Nelson
Carter
Mitchell
Perez
Roberts
Turner
Phillips
Campbell
Parker
Evans
Edwards
Collins
Stewart
Sanchez
Morris
Rogers
Reed
Cook
Morgan
Bell
Murphy
Bailey
Rivera
Cooper
Richardson
Cox
Howard
Ward
Torres
Peterson
Gray
Ramirez
James
Watson
Brooks
Kelly
Sanders
Price
Bennett
Wood
Barnes
Ross
Henderson
Coleman
Jenkins
Perry
Powell
Long
Patterson
Hughes
Flores
Washington
Butler
Simmons
Foster
Gonzales
Bryant
Alexander
Russell
Griffin
Diaz
Hayes
Myers
Ford
Hamilton
Graham
Sullivan
Wallace
Woods
Cole
West
Jordan
Owens
Reynolds
Fisher
Ellis
Harrison
Gibson
Mcdonald
Cruz
Marshall
Ortiz
Gomez
Murray
Freeman
Wells
Webb
Simpson
Stevens
Tucker
Porter
Hunter
Hicks
Crawford
Henry
Boyd
Mason
Morales
Kennedy
Warren
Dixon
Ramos
Reyes
Burns
Gordon
Shaw
Holmes
Rice
Robertson
Hunt
Black
Daniels
Palmer
Mills
Nichols
Grant
Knight
Ferguson
Rose
Stone
Hawkins
Dunn
Perkins
Hudson
Spencer
Gardner
Stephens
Payne
Pierce
Berry
Matthews
Arnold
Wagner
Willis
Ray
Watkins
Olson
Carroll
Duncan
Snyder
Hart
Cunningham
Bradley
Lane
Andrews
Ruiz
Harper
Fox
Riley
Armstrong
Carpenter
Weaver
Greene
Lawrence
Elliott
Chavez
Sims
Austin
Peters
Kelley
Franklin
Lawson
Fields
Gutierrez
Ryan
Schmidt
Carr
Vasquez
Castillo
Wheeler
Chapman
Oliver
Montgomery
Richards
Williamson
Johnston
Banks
Meyer
Bishop
Mccoy
Howell
Alvarez
Morrison
Hansen
Fernandez
Garza
Harvey
Little
Burton
Stanley
Nguyen
George
Jacobs
Reid
Kim
Fuller
Lynch
Dean
Gilbert
Garrett
Romero
Welch
Larson
Frazier
Burke
Hanson
Day
Mendoza
Moreno
Bowman
Medina
Fowler

View file

@ -0,0 +1 @@
Mrs. Ms. Miss

View file

@ -0,0 +1 @@
I II III IV V MD DDS PhD DVM

View file

@ -0,0 +1,100 @@
James
John
Robert
Michael
William
David
Richard
Charles
Joseph
Thomas
Christopher
Daniel
Paul
Mark
Donald
George
Kenneth
Steven
Edward
Brian
Ronald
Anthony
Kevin
Jason
Matthew
Gary
Timothy
Jose
Larry
Jeffrey
Frank
Scott
Eric
Stephen
Andrew
Raymond
Gregory
Joshua
Jerry
Dennis
Walter
Patrick
Peter
Harold
Douglas
Henry
Carl
Arthur
Ryan
Roger
Joe
Juan
Jack
Albert
Jonathan
Justin
Terry
Gerald
Keith
Samuel
Willie
Ralph
Lawrence
Nicholas
Roy
Benjamin
Bruce
Brandon
Adam
Harry
Fred
Wayne
Billy
Steve
Louis
Jeremy
Aaron
Randy
Howard
Eugene
Carlos
Russell
Bobby
Victor
Martin
Ernest
Phillip
Todd
Jesse
Craig
Alan
Shawn
Clarence
Sean
Philip
Chris
Johnny
Earl
Jimmy
Antonio

2
vendor/github.com/icrowley/fake/data/en/genders generated vendored Normal file
View file

@ -0,0 +1,2 @@
Male
Female

222
vendor/github.com/icrowley/fake/data/en/industries generated vendored Normal file
View file

@ -0,0 +1,222 @@
Basic Materials
Agricultural Chemicals
Aluminum
Chemicals - Major Diversified
Copper
Gold
Independent Oil & Gas
Industrial Metals & Minerals
Major Integrated Oil & Gas
Nonmetallic Mineral Mining
Oil & Gas Drilling & Exploration
Oil & Gas Equipment & Services
Oil & Gas Pipelines
Oil & Gas Refining & Marketing
Silver
Specialty Chemicals
Steel & Iron
Synthetics
Conglomerates
Conglomerates
Consumer Goods
Appliances
Auto Manufacturers - Major
Auto Parts
Beverages - Brewers
Beverages - Soft Drinks
Beverages - Wineries & Distillers
Business Equipment
Cigarettes
Cleaning Products
Confectioners
Dairy Products
Electronic Equipment
Farm Products
Food - Major Diversified
Home Furnishings & Fixtures
Housewares & Accessories
Meat Products
Office Supplies
Packaging & Containers
Paper & Paper Products
Personal Products
Photographic Equipment & Supplies
Processed & Packaged Goods
Recreational Goods, Other
Recreational Vehicles
Rubber & Plastics
Sporting Goods
Textile - Apparel Clothing
Textile - Apparel Footwear & Accessories
Tobacco Products, Other
Toys & Games
Trucks & Other Vehicles
Financial
Accident & Health Insurance
Asset Management
Closed-End Fund - Debt
Closed-End Fund - Equity
Closed-End Fund - Foreign
Credit Services
Diversified Investments
Foreign Money Center Banks
Foreign Regional Banks
Insurance Brokers
Investment Brokerage - National
Investment Brokerage - Regional
Life Insurance
Money Center Banks
Mortgage Investment
Property & Casualty Insurance
Property Management
REIT - Diversified
REIT - Healthcare Facilities
REIT - Hotel/Motel
REIT - Industrial
REIT - Office
REIT - Residential
REIT - Retail
Real Estate Development
Regional - Mid-Atlantic Banks
Regional - Midwest Banks
Regional - Northeast Banks
Regional - Pacific Banks
Regional - Southeast Banks
Regional - Southwest Banks
Savings & Loans
Surety & Title Insurance
Healthcare
Biotechnology
Diagnostic Substances
Drug Delivery
Drug Manufacturers - Major
Drug Manufacturers - Other
Drug Related Products
Drugs - Generic
Health Care Plans
Home Health Care
Hospitals
Long-Term Care Facilities
Medical Appliances & Equipment
Medical Instruments & Supplies
Medical Laboratories & Research
Medical Practitioners
Specialized Health Services
Industrial Goods
Aerospace/Defense - Major Diversified
Aerospace/Defense Products & Services
Cement
Diversified Machinery
Farm & Construction Machinery
General Building Materials
General Contractors
Heavy Construction
Industrial Electrical Equipment
Industrial Equipment & Components
Lumber, Wood Production
Machine Tools & Accessories
Manufactured Housing
Metal Fabrication
Pollution & Treatment Controls
Residential Construction
Small Tools & Accessories
Textile Industrial
Waste Management
Advertising Agencies
Air Delivery & Freight Services
Air Services, Other
Apparel Stores
Auto Dealerships
Auto Parts Stores
Auto Parts Wholesale
Basic Materials Wholesale
Broadcasting - Radio
Broadcasting - TV
Building Materials Wholesale
Business Services
CATV Systems
Catalog & Mail Order Houses
Computers Wholesale
Consumer Services
Department Stores
Discount, Variety Stores
Drug Stores
Drugs Wholesale
Education & Training Services
Electronics Stores
Electronics Wholesale
Entertainment - Diversified
Food Wholesale
Gaming Activities
General Entertainment
Grocery Stores
Home Furnishing Stores
Home Improvement Stores
Industrial Equipment Wholesale
Jewelry Stores
Lodging
Major Airlines
Management Services
Marketing Services
Medical Equipment Wholesale
Movie Production, Theaters
Music & Video Stores
Personal Services
Publishing - Books
Publishing - Newspapers
Publishing - Periodicals
Railroads
Regional Airlines
Rental & Leasing Services
Research Services
Resorts & Casinos
Restaurants
Security & Protection Services
Shipping
Specialty Eateries
Specialty Retail, Other
Sporting Activities
Sporting Goods Stores
Staffing & Outsourcing Services
Technical Services
Toy & Hobby Stores
Trucking
Wholesale, Other
Technology
Application Software
Business Software & Services
Communication Equipment
Computer Based Systems
Computer Peripherals
Data Storage Devices
Diversified Communication Services
Diversified Computer Systems
Diversified Electronics
Healthcare Information Services
Information & Delivery Services
Information Technology Services
Internet Information Providers
Internet Service Providers
Internet Software & Services
Long Distance Carriers
Multimedia & Graphics Software
Networking & Communication Devices
Personal Computers
Printed Circuit Boards
Processing Systems & Products
Scientific & Technical Instruments
Security Software & Services
Semiconductor - Broad Line
Semiconductor - Integrated Circuits
Semiconductor - Specialized
Semiconductor Equipment & Materials
Semiconductor- Memory Chips
Technical & System Software
Telecom Services - Domestic
Telecom Services - Foreign
Wireless Communications
Diversified Utilities
Electric Utilities
Foreign Utilities
Gas Utilities
Water Utilities

114
vendor/github.com/icrowley/fake/data/en/jobs generated vendored Normal file
View file

@ -0,0 +1,114 @@
Account Coordinator
Account Executive
Account Representative #{N}
Accountant #{N}
Accounting Assistant #{N}
Actuary
Administrative Assistant #{N}
Administrative Officer
Analog Circuit Design manager
Analyst Programmer
Assistant Manager
Assistant Media Planner
Assistant Professor
Associate Professor
Automation Specialist #{N}
Biostatistician #{N}
Budget/Accounting Analyst #{N}
Business Systems Development Analyst
Chemical Engineer
Chief Design Engineer
Civil Engineer
Clinical Specialist
Community Outreach Specialist
Compensation Analyst
Computer Systems Analyst #{N}
Cost Accountant
Data Coordinator
Database Administrator #{N}
Dental Hygienist
Design Engineer
Desktop Support Technician
Developer #{N}
Director of Sales
Editor
Electrical Engineer
Engineer #{N}
Environmental Specialist
Environmental Tech
Executive Secretary
Financial Advisor
Financial Analyst
Food Chemist
GIS Technical Architect
General Manager
Geological Engineer
Geologist #{N}
Graphic Designer
Health Coach #{N}
Help Desk Operator
Help Desk Technician
Human Resources Assistant #{N}
Human Resources Manager
Information Systems Manager
Internal Auditor
Junior Executive
Legal Assistant
Librarian
Marketing Assistant
Marketing Manager
Mechanical Systems Engineer
Media Manager #{N}
Nuclear Power Engineer
Nurse
Nurse Practicioner
Occupational Therapist
Office Assistant #{N}
Operator
Paralegal
Payment Adjustment Coordinator
Pharmacist
Physical Therapy Assistant
Product Engineer
Professor
Programmer #{N}
Programmer Analyst #{N}
Project Manager
Quality Control Specialist
Quality Engineer
Recruiter
Recruiting Manager
Registered Nurse
Research Assistant #{N}
Research Associate
Research Nurse
Safety Technician #{N}
Sales Associate
Sales Representative
Senior Cost Accountant
Senior Developer
Senior Editor
Senior Financial Analyst
Senior Quality Engineer
Senior Sales Associate
Social Worker
Software Consultant
Software Engineer #{N}
Software Test Engineer #{N}
Speech Pathologist
Staff Accountant #{N}
Staff Scientist
Statistician #{N}
Structural Analysis Engineer
Structural Engineer
Systems Administrator #{N}
Tax Accountant
Teacher
Technical Writer
VP Accounting
VP Marketing
VP Product Management
VP Quality Control
VP Sales
Web Designer #{N}
Web Developer #{N}

97
vendor/github.com/icrowley/fake/data/en/languages generated vendored Normal file
View file

@ -0,0 +1,97 @@
Afrikaans
Albanian
Amharic
Arabic
Armenian
Assamese
Aymara
Azeri
Belarusian
Bengali
Bislama
Bosnian
Bulgarian
Burmese
Catalan
Chinese
Croatian
Czech
Danish
Dari
Dhivehi
Dutch
Dzongkha
English
Estonian
Fijian
Filipino
Finnish
French
West Frisian
Gagauz
Georgian
German
Greek
Guaraní
Gujarati
Haitian Creole
Hebrew
Hindi
Hiri Motu
Hungarian
Icelandic
Indonesian
Irish Gaelic
Italian
Japanese
Kannada
Kashmiri
Kazakh
Khmer
Korean
Kurdish
Kyrgyz
Lao
Latvian
Lithuanian
Luxembourgish
Macedonian
Malagasy
Malay
Malayalam
Maltese
Māori
Marathi
Moldovan
Mongolian
Montenegrin
Ndebele
Nepali
New Zealand Sign Language
Northern Sotho
Norwegian
Oriya
Papiamento
Pashto
Persian
Polish
Portuguese
Punjabi
Quechua
Romanian
Somali
Sotho
Spanish
Swahili
Swati
Swedish
Tajik
Tamil
Telugu
Tetum
Thai
Tok Pisin
Tsonga
Tswana
Yiddish
Zulu

View file

@ -0,0 +1,100 @@
James
John
Robert
Michael
William
David
Richard
Charles
Joseph
Thomas
Christopher
Daniel
Paul
Mark
Donald
George
Kenneth
Steven
Edward
Brian
Ronald
Anthony
Kevin
Jason
Matthew
Gary
Timothy
Jose
Larry
Jeffrey
Frank
Scott
Eric
Stephen
Andrew
Raymond
Gregory
Joshua
Jerry
Dennis
Walter
Patrick
Peter
Harold
Douglas
Henry
Carl
Arthur
Ryan
Roger
Joe
Juan
Jack
Albert
Jonathan
Justin
Terry
Gerald
Keith
Samuel
Willie
Ralph
Lawrence
Nicholas
Roy
Benjamin
Bruce
Brandon
Adam
Harry
Fred
Wayne
Billy
Steve
Louis
Jeremy
Aaron
Randy
Howard
Eugene
Carlos
Russell
Bobby
Victor
Martin
Ernest
Phillip
Todd
Jesse
Craig
Alan
Shawn
Clarence
Sean
Philip
Chris
Johnny
Earl
Jimmy
Antonio

250
vendor/github.com/icrowley/fake/data/en/male_last_names generated vendored Normal file
View file

@ -0,0 +1,250 @@
Smith
Johnson
Williams
Jones
Brown
Davis
Miller
Wilson
Moore
Taylor
Anderson
Thomas
Jackson
White
Harris
Martin
Thompson
Garcia
Martinez
Robinson
Clark
Rodriguez
Lewis
Lee
Walker
Hall
Allen
Young
Hernandez
King
Wright
Lopez
Hill
Scott
Green
Adams
Baker
Gonzalez
Nelson
Carter
Mitchell
Perez
Roberts
Turner
Phillips
Campbell
Parker
Evans
Edwards
Collins
Stewart
Sanchez
Morris
Rogers
Reed
Cook
Morgan
Bell
Murphy
Bailey
Rivera
Cooper
Richardson
Cox
Howard
Ward
Torres
Peterson
Gray
Ramirez
James
Watson
Brooks
Kelly
Sanders
Price
Bennett
Wood
Barnes
Ross
Henderson
Coleman
Jenkins
Perry
Powell
Long
Patterson
Hughes
Flores
Washington
Butler
Simmons
Foster
Gonzales
Bryant
Alexander
Russell
Griffin
Diaz
Hayes
Myers
Ford
Hamilton
Graham
Sullivan
Wallace
Woods
Cole
West
Jordan
Owens
Reynolds
Fisher
Ellis
Harrison
Gibson
Mcdonald
Cruz
Marshall
Ortiz
Gomez
Murray
Freeman
Wells
Webb
Simpson
Stevens
Tucker
Porter
Hunter
Hicks
Crawford
Henry
Boyd
Mason
Morales
Kennedy
Warren
Dixon
Ramos
Reyes
Burns
Gordon
Shaw
Holmes
Rice
Robertson
Hunt
Black
Daniels
Palmer
Mills
Nichols
Grant
Knight
Ferguson
Rose
Stone
Hawkins
Dunn
Perkins
Hudson
Spencer
Gardner
Stephens
Payne
Pierce
Berry
Matthews
Arnold
Wagner
Willis
Ray
Watkins
Olson
Carroll
Duncan
Snyder
Hart
Cunningham
Bradley
Lane
Andrews
Ruiz
Harper
Fox
Riley
Armstrong
Carpenter
Weaver
Greene
Lawrence
Elliott
Chavez
Sims
Austin
Peters
Kelley
Franklin
Lawson
Fields
Gutierrez
Ryan
Schmidt
Carr
Vasquez
Castillo
Wheeler
Chapman
Oliver
Montgomery
Richards
Williamson
Johnston
Banks
Meyer
Bishop
Mccoy
Howell
Alvarez
Morrison
Hansen
Fernandez
Garza
Harvey
Little
Burton
Stanley
Nguyen
George
Jacobs
Reid
Kim
Fuller
Lynch
Dean
Gilbert
Garrett
Romero
Welch
Larson
Frazier
Burke
Hanson
Day
Mendoza
Moreno
Bowman
Medina
Fowler

View file

@ -0,0 +1 @@
Mr. Dr.

View file

@ -0,0 +1 @@
Jr. Sr. I II III IV V MD DDS PhD DVM

View file

@ -0,0 +1,100 @@
James
John
Robert
Michael
William
David
Richard
Charles
Joseph
Thomas
Christopher
Daniel
Paul
Mark
Donald
George
Kenneth
Steven
Edward
Brian
Ronald
Anthony
Kevin
Jason
Matthew
Gary
Timothy
Jose
Larry
Jeffrey
Frank
Scott
Eric
Stephen
Andrew
Raymond
Gregory
Joshua
Jerry
Dennis
Walter
Patrick
Peter
Harold
Douglas
Henry
Carl
Arthur
Ryan
Roger
Joe
Juan
Jack
Albert
Jonathan
Justin
Terry
Gerald
Keith
Samuel
Willie
Ralph
Lawrence
Nicholas
Roy
Benjamin
Bruce
Brandon
Adam
Harry
Fred
Wayne
Billy
Steve
Louis
Jeremy
Aaron
Randy
Howard
Eugene
Carlos
Russell
Bobby
Victor
Martin
Ernest
Phillip
Todd
Jesse
Craig
Alan
Shawn
Clarence
Sean
Philip
Chris
Johnny
Earl
Jimmy
Antonio

12
vendor/github.com/icrowley/fake/data/en/months generated vendored Normal file
View file

@ -0,0 +1,12 @@
January
February
March
April
May
June
July
August
September
October
November
December

12
vendor/github.com/icrowley/fake/data/en/months_short generated vendored Normal file
View file

@ -0,0 +1,12 @@
Jan
Feb
Mar
Apr
May
Jun
Jul
Aug
Sep
Oct
Nov
Dec

16
vendor/github.com/icrowley/fake/data/en/nouns generated vendored Normal file
View file

@ -0,0 +1,16 @@
Filter
Compressor
System
Viewer
Mount
Case
Adapter
Amplifier
Bridge
Bracket
Kit
Transmitter
Receiver
Tuner
Controller
Component

View file

@ -0,0 +1,2 @@
#-###-###-##-##
###-##-##

50
vendor/github.com/icrowley/fake/data/en/state_abbrevs generated vendored Normal file
View file

@ -0,0 +1,50 @@
AL
AK
AZ
AR
CA
CO
CT
DE
FL
GA
HI
ID
IL
IN
IA
KS
KY
LA
ME
MD
MA
MI
MN
MS
MO
MT
NE
NV
NH
NJ
NM
NY
NC
ND
OH
OK
OR
PA
RI
SC
SD
TN
TX
UT
VT
VA
WA
WV
WI
WY

50
vendor/github.com/icrowley/fake/data/en/states generated vendored Normal file
View file

@ -0,0 +1,50 @@
Alabama
Alaska
Arizona
Arkansas
California
Colorado
Connecticut
Delaware
Florida
Georgia
Hawaii
Idaho
Illinois
Indiana
Iowa
Kansas
Kentucky
Louisiana
Maine
Maryland
Massachusetts
Michigan
Minnesota
Mississippi
Missouri
Montana
Nebraska
Nevada
New Hampshire
New Jersey
New Mexico
New York
North Carolina
North Dakota
Ohio
Oklahoma
Oregon
Pennsylvania
Rhode Island
South Carolina
South Dakota
Tennessee
Texas
Utah
Vermont
Virginia
Washington
West Virginia
Wisconsin
Wyoming

View file

@ -0,0 +1,21 @@
Alley
Avenue
Center
Circle
Court
Crossing
Drive
Hill
Junction
Lane
Park
Parkway
Pass
Place
Plaza
Point
Road
Street
Terrace
Trail
Way

500
vendor/github.com/icrowley/fake/data/en/streets generated vendored Normal file
View file

@ -0,0 +1,500 @@
1st
2nd
3rd
4th
5th
6th
7th
8th
Aberg
Acker
Algoma
Almo
Alpine
American
American Ash
Amoth
Anderson
Anhalt
Annamark
Anniversary
Anthes
Anzinger
Arapahoe
Arizona
Arkansas
Armistice
Arrowood
Artisan
Atwood
Autumn Leaf
Badeau
Banding
Barby
Barnett
Bartelt
Bartillon
Bashford
Basil
Bay
Bayside
Becker
Beilfuss
Bellgrove
Birchwood
Blackbird
Blaine
Blue Bill Park
Bluejay
Bluestem
Bobwhite
Bonner
Bowman
Boyd
Brentwood
Briar Crest
Brickson Park
Brown
Browning
Buell
Buena Vista
Buhler
Bultman
Bunker Hill
Bunting
Burning Wood
Burrows
Butterfield
Butternut
Caliangt
Calypso
Cambridge
Canary
Carberry
Cardinal
Carey
Carioca
Carpenter
Cascade
Center
Charing Cross
Cherokee
Chinook
Chive
Claremont
Clarendon
Clemons
Clove
Clyde Gallagher
Cody
Coleman
Colorado
Columbus
Comanche
Commercial
Continental
Coolidge
Corben
Cordelia
Corry
Corscot
Cottonwood
Crescent Oaks
Crest Line
Crowley
Crownhardt
Dahle
Dakota
Dapin
Darwin
David
Dawn
Daystar
Dayton
Debra
Debs
Declaration
Del Mar
Del Sol
Delaware
Delladonna
Dennis
Derek
Dexter
Di Loreto
Division
Dixon
Doe Crossing
Donald
Dorton
Dottie
Dovetail
Drewry
Dryden
Duke
Dunning
Dwight
Eagan
Eagle Crest
East
Eastlawn
Eastwood
Eggendart
Elgar
Eliot
Elka
Elmside
Emmet
Erie
Esch
Esker
Everett
Evergreen
Express
Fair Oaks
Fairfield
Fairview
Fallview
Farmco
Farragut
Farwell
Fieldstone
Fisk
Florence
Fordem
Forest
Forest Dale
Forest Run
Forster
Fremont
Fuller
Fulton
Gale
Garrison
Gateway
Gerald
Gina
Glacier Hill
Glendale
Golden Leaf
Golf
Golf Course
Golf View
Goodland
Graceland
Graedel
Granby
Grasskamp
Grayhawk
Green
Green Ridge
Grim
Grover
Gulseth
Haas
Hagan
Hallows
Hanover
Hanson
Hansons
Harbort
Harper
Hauk
Havey
Hayes
Hazelcrest
Heath
Heffernan
Helena
Hermina
High Crossing
Hintze
Hoard
Hoepker
Hoffman
Hollow Ridge
Holmberg
Holy Cross
Homewood
Hooker
Hovde
Hudson
Huxley
Ilene
Independence
International
Iowa
Jackson
Jana
Jay
Jenifer
Jenna
John Wall
Johnson
Judy
Karstens
Katie
Kedzie
Kennedy
Kensington
Kenwood
Killdeer
Kim
Kings
Kingsford
Kinsman
Kipling
Knutson
Kropf
La Follette
Lake View
Lakeland
Lakewood
Lakewood Gardens
Larry
Laurel
Lawn
Lerdahl
Leroy
Lien
Lighthouse Bay
Lillian
Lindbergh
Linden
Little Fleur
Loeprich
Loftsgordon
Logan
Londonderry
Longview
Loomis
Lotheville
Ludington
Lukken
Lunder
Luster
Lyons
Macpherson
Magdeline
Main
Mallard
Mallory
Mandrake
Manitowish
Manley
Manufacturers
Maple
Maple Wood
Marcy
Mariners Cove
Marquette
Maryland
Mayer
Mayfield
Maywood
Mcbride
Mccormick
Mcguire
Meadow Ridge
Meadow Vale
Meadow Valley
Melby
Melody
Melrose
Melvin
Memorial
Mendota
Menomonie
Merchant
Merrick
Merry
Messerschmidt
Mesta
Michigan
Mifflin
Miller
Milwaukee
Mitchell
Mockingbird
Moland
Monica
Montana
Monterey
Monument
Moose
Morning
Morningstar
Morrow
Mosinee
Moulton
Muir
Myrtle
Namekagon
Nancy
Nelson
Nevada
New Castle
Nobel
North
Northfield
Northland
Northport
Northridge
Northview
Northwestern
Norway Maple
Nova
Novick
Oak
Oak Valley
Oakridge
Ohio
Old Gate
Old Shore
Oneill
Onsgard
Orin
Oriole
Oxford
Packers
Paget
Pankratz
Park Meadow
Parkside
Pawling
Pearson
Pennsylvania
Pepper Wood
Petterle
Pierstorff
Pine View
Pleasure
Pond
Portage
Porter
Prairie Rose
Prairieview
Prentice
Quincy
Ramsey
Randy
Raven
Red Cloud
Redwing
Reindahl
Reinke
Ridge Oak
Ridgeview
Ridgeway
Rieder
Rigney
Riverside
Rockefeller
Ronald Regan
Roth
Rowland
Roxbury
Rusk
Ruskin
Russell
Rutledge
Ryan
Sachs
Sachtjen
Sage
Saint Paul
Sauthoff
Schiller
Schlimgen
Schmedeman
School
Schurz
Scofield
Scott
Scoville
Service
Shasta
Shelley
Sheridan
Sherman
Shopko
Shoshone
Sloan
Sommers
South
Southridge
Spaight
Spenser
Spohn
Springs
Springview
Stang
Starling
Steensland
Stephen
Stone Corner
Stoughton
Straubel
Stuart
Sugar
Sullivan
Summer Ridge
Summerview
Summit
Sunbrook
Sundown
Sunfield
Sunnyside
Superior
Surrey
Susan
Sutherland
Sutteridge
Swallow
Sycamore
Talisman
Talmadge
Tennessee
Tennyson
Texas
Thackeray
Thierer
Thompson
Toban
Tomscot
Tony
Towne
Trailsway
Transport
Troy
Truax
Twin Pines
Union
Upham
Utah
Vahlen
Valley Edge
Veith
Vera
Vermont
Vernon
Victoria
Vidon
Village
Village Green
Walton
Warbler
Warner
Warrior
Washington
Waubesa
Waxwing
Wayridge
Waywood
Weeping Birch
Welch
West
Westend
Westerfield
Westport
Westridge

View file

@ -0,0 +1,9 @@
biz
com
info
name
net
org
gov
edu
mil

7
vendor/github.com/icrowley/fake/data/en/weekdays generated vendored Normal file
View file

@ -0,0 +1,7 @@
Sunday
Monday
Tuesday
Wednesday
Thursday
Friday
Saturday

View file

@ -0,0 +1,7 @@
Sun
Mon
Tue
Wed
Thu
Fri
Sat

249
vendor/github.com/icrowley/fake/data/en/words generated vendored Normal file
View file

@ -0,0 +1,249 @@
alias
consequatur
aut
perferendis
sit
voluptatem
accusantium
doloremque
aperiam
eaque
ipsa
quae
ab
illo
inventore
veritatis
et
quasi
architecto
beatae
vitae
dicta
sunt
explicabo
aspernatur
aut
odit
aut
fugit
sed
quia
consequuntur
magni
dolores
eos
qui
ratione
voluptatem
sequi
nesciunt
neque
dolorem
ipsum
quia
dolor
sit
amet
consectetur
adipisci
velit
sed
quia
non
numquam
eius
modi
tempora
incidunt
ut
labore
et
dolore
magnam
aliquam
quaerat
voluptatem
ut
enim
ad
minima
veniam
quis
nostrum
exercitationem
ullam
corporis
nemo
enim
ipsam
voluptatem
quia
voluptas
sit
suscipit
laboriosam
nisi
ut
aliquid
ex
ea
commodi
consequatur
quis
autem
vel
eum
iure
reprehenderit
qui
in
ea
voluptate
velit
esse
quam
nihil
molestiae
et
iusto
odio
dignissimos
ducimus
qui
blanditiis
praesentium
laudantium
totam
rem
voluptatum
deleniti
atque
corrupti
quos
dolores
et
quas
molestias
excepturi
sint
occaecati
cupiditate
non
provident
sed
ut
perspiciatis
unde
omnis
iste
natus
error
similique
sunt
in
culpa
qui
officia
deserunt
mollitia
animi
id
est
laborum
et
dolorum
fuga
et
harum
quidem
rerum
facilis
est
et
expedita
distinctio
nam
libero
tempore
cum
soluta
nobis
est
eligendi
optio
cumque
nihil
impedit
quo
porro
quisquam
est
qui
minus
id
quod
maxime
placeat
facere
possimus
omnis
voluptas
assumenda
est
omnis
dolor
repellendus
temporibus
autem
quibusdam
et
aut
consequatur
vel
illum
qui
dolorem
eum
fugiat
quo
voluptas
nulla
pariatur
at
vero
eos
et
accusamus
officiis
debitis
aut
rerum
necessitatibus
saepe
eveniet
ut
et
voluptates
repudiandae
sint
et
molestiae
non
recusandae
itaque
earum
rerum
hic
tenetur
a
sapiente
delectus
ut
aut
reiciendis
voluptatibus
maiores
doloribus
asperiores
repellat

1
vendor/github.com/icrowley/fake/data/en/zips_format generated vendored Normal file
View file

@ -0,0 +1 @@
#######

43
vendor/github.com/icrowley/fake/data/ru/characters generated vendored Normal file
View file

@ -0,0 +1,43 @@
а
б
в
г
д
е
ё
ж
з
и
й
к
л
м
н
о
п
р
с
т
у
ф
х
ц
ч
ш
щ
ъ
ы
ь
э
ю
я
0
1
2
3
4
5
6
7
8
9

135
vendor/github.com/icrowley/fake/data/ru/cities generated vendored Normal file
View file

@ -0,0 +1,135 @@
Адлер
Александров
Анапа
Арзамас
Архангельск
Архипо-Осиповка
Астрахань
Бежецк
Белгород
Боровск
Брянск
Валдай
Великий Новгород
Великий Устюг
Верея
Владивосток
Владимир
Волгоград
Вологда
Воронеж
Выборг
Вязьма
Галич
Гатчина
Геленджик
Городец
Гороховец
Дмитров
Дубна
Егорьевск
Ейск
Екатеринбург
Елабуга
Елец
Зарайск
Звенигород
Иваново
Ижевск
Изборск
Йошкар-Ола
Казань
Калининград
Калуга
Калязин
Касимов
Кемерово
Кимры
Кинешма
Кириллов
Киров
Кисловодск
Клин
Ковров
Козельск
Коломна
Кострома
Красная поляна
Краснодар
Красноярск
Кронштадт
Курск
Лазаревское
Липецк
Луховицы
Малоярославец
Можайск
Москва
Мурманск
Муром
Мценск
Мытищи
Мышкин
Нижний Новгород
Нижний Тагил
Новороссийск
Новосибирск
Омск
Орёл
Осташков
Павлово на Оке
Пенза
Переславль-Залесский
Пермь
Петергоф
Петрозаводск
Плес
Подольск
Покров
Псков
Пушкин
Пушкинские горы
Пятигорск
Ростов Великий
Ростов-на-Дону
Руза
Рыбинск
Рязань
Самара
Санкт-Петербург
Саранск
Сарапул
Саратов
Светлогорск
Севастополь
Сергиев Посад
Серпухов
Смоленск
Соликамск
Соловки
Сочи
Суздаль
Таганрог
Тамань
Тамбов
Таруса
Тверь
Тобольск
Тольятти
Томск
Торжок
Тотьма
Тула
Тутаев
Тюмень
Углич
Ульяновск
Уфа
Ханты-Мансийск
Чебоксары
Челябинск
Череповец
Элиста
Юрьев-Польский
Ялта
Ярославль

14
vendor/github.com/icrowley/fake/data/ru/colors generated vendored Normal file
View file

@ -0,0 +1,14 @@
Красный
Синий
Голубой
Зеленый
Желтый
Оранжевый
Фиолетовый
Лиловый
Индиго
Розовый
Аквамарин
Коричневый
Черный
Белый

7
vendor/github.com/icrowley/fake/data/ru/continents generated vendored Normal file
View file

@ -0,0 +1,7 @@
Азия
Северная Америка
Южная Америка
Австралия
Африка
Европа
Антарктида

193
vendor/github.com/icrowley/fake/data/ru/countries generated vendored Normal file
View file

@ -0,0 +1,193 @@
Австралия
Австрия
Азербайджан
Албания
Алжир
Ангола
Андорра
Антигуа
Аргентина
Армения
Афганистан
Багамы
Бангладеш
Барбадос
Бахрейн
Белоруссия
Белиз
Бельгия
Бенин
Болгария
Боливия
Босния
Ботсвана
Бразилия
Бруней
Буркина-Фасо
Бурунди
Бутан
Вануату
Великобритания
Венгрия
Венесуэла
Восточный
Вьетнам
Габон
Гаити
Гайана
Гамбия
Гана
Гватемала
Гвинея
Гвинея-Бисау
Германия
Гондурас
Гренада
Греция
Грузия
Дания
Джибути
Доминика
Доминиканская
Египет
Замбия
Зимбабве
Израиль
Индия
Индонезия
Иордания
Ирак
Иран
Ирландия
Исландия
Испания
Италия
Йемен
Кабо-Верде
Казахстан
Камбоджа
Камерун
Канада
Катар
Кения
Кипр
Киргизия
Кирибати
КНР
Колумбия
Коморы
Республика
Демократическая
КНДР
Республика
Коста-Рика
Кот-д’Ивуар
Куба
Кувейт
Лаос
Латвия
Лесото
Либерия
Ливан
Ливия
Литва
Лихтенштейн
Люксембург
Маврикий
Мавритания
Мадагаскар
Македония
Малави
Малайзия
Мали
Мальдивы
Мальта
Марокко
Маршалловы
Мексика
Мозамбик
Молдавия
Монако
Монголия
Мьянма
Намибия
Науру
Непал
Нигер
Нигерия
Нидерланды
Никарагуа
Новая
Норвегия
ОАЭ
Оман
Пакистан
Палау
Панама
Папуа
Парагвай
Перу
Польша
Португалия
Россия
Руанда
Румыния
Сальвадор
Самоа
Сан-Марино
Сан-Томе
Саудовская
Свазиленд
Сейшельские
Сенегал
Сент-Винсент
Сент-Китс
Сент-Люсия
Сербия
Сингапур
Сирия
Словакия
Словения
США
Соломоновы
Сомали
Судан
Суринам
Сьерра-Леоне
Таджикистан
Таиланд
Танзания
Того
Тонга
Тринидад
Тувалу
Тунис
Туркмения
Турция
Уганда
Узбекистан
Украина
Уругвай
Федеративные
Фиджи
Филиппины
Финляндия
Франция
Хорватия
Центральноафриканская
Чад
Черногория
Чехия
Чили
Швейцария
Швеция
Шри-Ланка
Эквадор
Экваториальная
Эритрея
Эстония
Эфиопия
ЮАР
Южный
Ямайка
Япония

129
vendor/github.com/icrowley/fake/data/ru/currencies generated vendored Normal file
View file

@ -0,0 +1,129 @@
дирхам ОАЭ
афганский афгани
албанский лек
армянский драм
антильский гульден
ангольская кванза
аргентинское песо
австралийский доллар
азербайджанский манат
бангладешская така
болгарский лев
бахрейнский динар
бурундийский франк
брунейский доллар
боливийский боливиано
бразильский реал
багамский доллар
ботсванская пула
белорусский рубль
канадский доллар
конголезский франк
швейцарский франк
чилийское песо
китайский юань
колумбийское песо
костариканский колон
кубинское песо
чешская крона
франк Джибути
датская крона
алжирский динар
эстонская крона
египетский фунт
эфиопский быр
евро
доллар Фиджи
фунт стерлингов Соединенного королевства
грузинский лари
ганский седи
гамбийский даласи
гвинейский франк
гватемальский кетцаль
гонконгский доллар
гондурасская лемпира
хорватская куна
венгерский форинт Венгерский национальный банк HUF
индонезийская рупия
новый израильский шекель
индийская рупия
иракский динар
иранский риал
исландская крона
ямайский доллар
иорданский динар
японская иена Банк Японии JPY
кенийский шиллинг
киргизский сом
камбоджийский риель Национальный банк Камбоджи KHR
северокорейская вона
вона Республики Корея
кувейтский динар
казахстанский тенге Национальный банк Республики Казахстан KZT
кип Лаосской НДР
ливанский фунт
шри-ланкийская рупия
литовский лит
латвийский лат
ливийский динар
марокканский дирхам
молдавский лей
малагасийский ариари
денар Республики Македония
мьянманский чат
монгольский тугрик
мавританская угия
маврикийская рупия
малавийская квача
мексиканское песо
малайзийский ринггит
мозамбикский метикал
доллар Намибии
нигерийская найра
никарагуанская золотая кордоба
норвежская крона
непальская рупия
новозеландский доллар
оманский риал
панамский бальбоа
перуанский новый соль
филиппинское песо
пакистанская рупия
польский злотый
парагвайский гуарани
катарский риал
новый румынский лей
сербский динар
саудовский риял
сейшельская рупия
суданский фунт
шведская крона
сингапурский доллар
сьерра-леонский леоне
сомалийский шиллинг
суринамский доллар
сирийский фунт
свазилендский лилангени
таиландский бат
таджикский сомони
новый туркменский манат
тунисский динар
турецкая лира
доллар Тринидада и Тобаго
новый тайваньский доллар
танзанийский шиллинг
украинская гривна
угандийский шиллинг
доллар США
уругвайское песо
узбекский сум
венесуэльский боливар фуэрте
вьетнамский донг
франк КФА ЦАВЭС
восточно-карибский доллар
специальные права заимствования
франк КФА ЗАЭВС
йеменский риал
южноафриканский рэнд
замбийская квача
российский рубль

View file

@ -0,0 +1,36 @@
Агриппина
Александра
Анастасия
Анна
Антонина
Валентина
Вера
Виктория
Галина
Дарья
Евдокия
Екатерина
Елена
Елизавета
Зоя
Ирина
Клавдия
Кристина
Лариса
Лидия
Любовь
Людмила
Марина
Мария
Надежда
Наталья
Нина
Оксана
Ольга
Параскева
Пелагия
Раиса
Светлана
Тамара
Татьяна
Юлия

View file

@ -0,0 +1,100 @@
Иванова
Васильева
Петрова
Смирнова
Михайлова
Фёдорова
Соколова
Яковлева
Попова
Андреева
Алексеева
Александрова
Лебедева
Григорьева
Степанова
Семёнова
Павлова
Богданова
Николаева
Дмитриева
Егорова
Волкова
Кузнецова
Никитина
Соловьёва
Тимофеева
Орлова
Афанасьева
Филиппова
Сергеева
Захарова
Матвеева
Виноградова
Кузьмина
Максимова
Козлова
Ильина
Герасимова
Маркова
Новикова
Морозова
Романова
Осипова
Макарова
Зайцева
Беляева
Гаврилова
Антонова
Ефимова
Леонтьева
Давыдова
Гусева
Данилова
Киселёва
Сорокина
Тихомирова
Крылова
Никифорова
Кондратьева
Кудрявцева
Борисова
Жукова
Воробьёва
Щербакова
Полякова
Савельева
Шмидт
Трофимова
Чистякова
Баранова
Сидорова
Соболева
Карпова
Белова
Миллера
Титова
Львова
Фролова
Игнатьева
Комарова
Прокофьева
Быкова
Абрамова
Голубева
Пономарёва
Покровскийа
Мартынова
Кириллова
Шульца
Миронова
Фомина
Власова
Троицкая
Федотова
Назарова
Ушакова
Денисова
Константинова
Воронина
Наумова

View file

@ -0,0 +1,11 @@
Александровна
Андреевна
Архиповна
Алексеевна
Антоновна
Аскольдовна
Альбертовна
Аркадьевна
Афанасьевна
Анатольевна
Артемовна

2
vendor/github.com/icrowley/fake/data/ru/genders generated vendored Normal file
View file

@ -0,0 +1,2 @@
Мужской
Женский

23
vendor/github.com/icrowley/fake/data/ru/languages generated vendored Normal file
View file

@ -0,0 +1,23 @@
Китайский
Испанский
Английский
Хинди
Арабский
Португальский
Бенгальский
Русский
Японский
Яванский
Лахдна
Немецкий
Корейский
Французский
Телугу
Маратхи
Турецкий
Тамильский
Вьетнамский
Урду
Итальянский
Малайский
Персидский

View file

@ -0,0 +1,32 @@
Александр
Алексей
Анатолий
Андрей
Борис
Валерий
Василий
Виктор
Виталий
Владимир
Геннадий
Георгий
Григорий
Денис
Дмитрий
Евгений
Иван
Игорь
Илья
Константин
Максим
Михаил
Никита
Николай
Олег
Павел
Петр
Роман
Сергей
Степан
Федор
Юрий

101
vendor/github.com/icrowley/fake/data/ru/male_last_names generated vendored Normal file
View file

@ -0,0 +1,101 @@
Иванов
Васильев
Петров
Смирнов
Михайлов
Фёдоров
Соколов
Яковлев
Попов
Андреев
Алексеев
Александров
Лебедев
Григорьев
Степанов
Семёнов
Павлов
Богданов
Николаев
Дмитриев
Егоров
Волков
Кузнецов
Никитин
Соловьёв
Тимофеев
Орлов
Афанасьев
Филиппов
Сергеев
Захаров
Матвеев
Виноградов
Кузьмин
Максимов
Козлов
Ильин
Герасимов
Марков
Новиков
Морозов
Романов
Осипов
Макаров
Зайцев
Беляев
Гаврилов
Антонов
Ефимов
Леонтьев
Давыдов
Гусев
Данилов
Киселёв
Сорокин
Тихомиров
Крылов
Никифоров
Кондратьев
Кудрявцев
Борисов
Жуков
Воробьёв
Щербаков
Поляков
Савельев
Шмидт
Трофимов
Чистяков
Баранов
Сидоров
Соболев
Карпов
Белов
Миллер
Титов
Львов
Фролов
Игнатьев
Комаров
Прокофьев
Быков
Абрамов
Голубев
Пономарёв
Покровский
Мартынов
Кириллов
Шульц
Миронов
Фомин
Власов
Троицкий
Федотов
Назаров
Ушаков
Денисов
Константинов
Воронин
Наумов

View file

@ -0,0 +1,57 @@
Александрович
Алексеевич
Анатольевич
Андреевич
Антонович
Аркадьевич
Артемович
Богданович
Борисович
Валентинович
Валерьевич
Васильевич
Викторович
Витальевич
Владимирович
Владиславович
Вячеславович
Геннадиевич
Георгиевич
Григорьевич
Данилович
Денисович
Дмитриевич
Евгеньевич
Егорович
Ефимович
Иванович
Игоревич
Ильич
Иосифович
Кириллович
Константинович
Леонидович
Львович
Максимович
Матвеевич
Михайлович
Николаевич
Олегович
Павлович
Петрович
Платонович
Робертович
Романович
Семенович
Сергеевич
Станиславович
Степанович
Тарасович
Тимофеевич
Федорович
Феликсович
Филиппович
Эдуардович
Юрьевич
Яковлевич
Ярославович

12
vendor/github.com/icrowley/fake/data/ru/months generated vendored Normal file
View file

@ -0,0 +1,12 @@
Январь
Февраль
Март
Апрель
Май
Июнь
Июль
Август
Сентябрь
Октябрь
Ноябрь
Декабрь

View file

@ -0,0 +1,2 @@
#-###-###-##-##
###-##-##

89
vendor/github.com/icrowley/fake/data/ru/states generated vendored Normal file
View file

@ -0,0 +1,89 @@
Адыгея
Алтай
Башкортостан
Бурятия
Дагестан
Ингушетия
Кабардино-Балкария
Калмыкия
Карачаево-Черкесия
Карелия
Коми
Марий Эл
Мордовия
Саха (Якутия)
Северная Осетия — Алания
Татарстан
Тыва (Тува)
Удмуртия
Хакасия
Чечня
Чувашия
Края
Алтайский край
Забайкальский край
Камчатский край
Краснодарский край
Красноярский край
Пермский край
Приморский край
Ставропольский край
Хабаровский край
Области
Амурская область
Архангельская область
Астраханская область
Белгородская область
Брянская область
Владимирская область
Волгоградская область
Вологодская область
Воронежская область
Ивановская область
Иркутская область
Калининградская область
Калужская область
Кемеровская область
Кировская область
Костромская область
Курганская область
Курская область
Ленинградская область
Липецкая область
Магаданская область
Московская область
Мурманская область
Нижегородская область
Новгородская область
Новосибирская область
Омская область
Оренбургская область
Орловская область
Пензенская область
Псковская область
Ростовская область
Рязанская область
Самарская область
Саратовская область
Сахалинская область
Свердловская область
Смоленская область
Тамбовская область
Тверская область
Томская область
Тульская область
Тюменская область
Ульяновская область
Челябинская область
Ярославская область
Города федерального значения
Москва
Санкт-Петербург
Севастополь
Автономная область
Еврейская АО
Автономные округа
Ненецкий АО
Ханты-Мансийский АО — Югра
Чукотский АО
Ямало-Ненецкий АО

40
vendor/github.com/icrowley/fake/data/ru/streets generated vendored Normal file
View file

@ -0,0 +1,40 @@
Центральная
Молодежная
Школьная
Советская
Лесная
Новая
Садовая
Набережная
Заречная
Мира
Ленина
Зеленая
Полевая
Луговая
Октябрьская
Комсомольская
Гагарина
Первомайская
Северная
Степная
Солнечная
Кирова
Южная
Пионерская
Береговая
Юбилейная
Нагорная
Колхозная
Восточная
Речная
Пушкина
Пролетарская
Железнодорожная
Рабочая
Школьный
Победы
Озерная
Калинина
Чапаева
Дачная

7
vendor/github.com/icrowley/fake/data/ru/weekdays generated vendored Normal file
View file

@ -0,0 +1,7 @@
Понедельник
Вторник
Среда
Четверг
Пятница
Суббота
Воскресенье

View file

@ -0,0 +1,7 @@
Пн
Вт
Ср
Чт
Пт
Сб
Вс

1
vendor/github.com/icrowley/fake/data/ru/zips_format generated vendored Normal file
View file

@ -0,0 +1 @@
#######

42
vendor/github.com/icrowley/fake/dates.go generated vendored Normal file
View file

@ -0,0 +1,42 @@
package fake
// Day generates day of the month
func Day() int {
return r.Intn(31) + 1
}
// WeekDay generates name ot the week day
func WeekDay() string {
return lookup(lang, "weekdays", true)
}
// WeekDayShort generates abbreviated name of the week day
func WeekDayShort() string {
return lookup(lang, "weekdays_short", true)
}
// WeekdayNum generates number of the day of the week
func WeekdayNum() int {
return r.Intn(7) + 1
}
// Month generates month name
func Month() string {
return lookup(lang, "months", true)
}
// MonthShort generates abbreviated month name
func MonthShort() string {
return lookup(lang, "months_short", true)
}
// MonthNum generates month number (from 1 to 12)
func MonthNum() int {
return r.Intn(12) + 1
}
// Year generates year using the given boundaries
func Year(from, to int) int {
n := r.Intn(to-from) + 1
return from + n
}

Some files were not shown because too many files have changed in this diff Show more