diff --git a/assets/components/actors/actor.vue b/assets/components/actors/actor.vue index 4225a419..90555cec 100644 --- a/assets/components/actors/actor.vue +++ b/assets/components/actors/actor.vue @@ -190,6 +190,22 @@ +
  • + Eyes + {{ actor.eyes }} +
  • + +
  • + Hair + {{ actor.hair }} +
  • +
  • Searching... -
    - Found {{ actors.length }} actors for '{{ query }}' + Found {{ actors.length }} actors for '{{ query }}' -
    - -
    +
    +
    -
    - Found {{ releases.length }} releases for '{{ query }}' + Found {{ releases.length }} releases for '{{ query }}' - -
    +
    diff --git a/assets/img/icons/haircut.svg b/assets/img/icons/haircut.svg new file mode 100644 index 00000000..08ec1060 --- /dev/null +++ b/assets/img/icons/haircut.svg @@ -0,0 +1,6 @@ + + +haircut + + + diff --git a/assets/js/actors/actions.js b/assets/js/actors/actions.js index ad73bef1..917626d4 100644 --- a/assets/js/actors/actions.js +++ b/assets/js/actors/actions.js @@ -47,6 +47,8 @@ function initActorActions(store, _router) { heightImperial: height(units:IMPERIAL) weightMetric: weight(units:METRIC) weightImperial: weight(units:IMPERIAL) + hair + eyes hasTattoos hasPiercings tattoos diff --git a/migrations/20190325001339_releases.js b/migrations/20190325001339_releases.js index fc059840..1d7fd38f 100644 --- a/migrations/20190325001339_releases.js +++ b/migrations/20190325001339_releases.js @@ -14,6 +14,7 @@ exports.up = knex => Promise.resolve() table.integer('code', 3); table.string('nationality'); + table.integer('priority', 2) .defaultTo(0); })) @@ -344,6 +345,8 @@ exports.up = knex => Promise.resolve() .inTable('sites'); table.unique(['actor_id', 'network_id', 'site_id']); + table.integer('priority', 4) + .defaultTo(1); table.string('real_name'); diff --git a/public/img/logos/penthouse/misc/penthouse_basic.png b/public/img/logos/penthouse/misc/penthouse_basic.png new file mode 100644 index 00000000..82b2302e Binary files /dev/null and b/public/img/logos/penthouse/misc/penthouse_basic.png differ diff --git a/public/img/logos/penthouse/misc/penthouse_basic_dark.png b/public/img/logos/penthouse/misc/penthouse_basic_dark.png new file mode 100644 index 00000000..d08a80a4 Binary files /dev/null and b/public/img/logos/penthouse/misc/penthouse_basic_dark.png differ diff --git a/public/img/logos/penthouse/misc/penthouse_basic_red.png b/public/img/logos/penthouse/misc/penthouse_basic_red.png new file mode 100644 index 00000000..282444fb Binary files /dev/null and b/public/img/logos/penthouse/misc/penthouse_basic_red.png differ diff --git a/public/img/logos/penthouse/penthouse.png b/public/img/logos/penthouse/misc/penthouse_light.png similarity index 100% rename from public/img/logos/penthouse/penthouse.png rename to public/img/logos/penthouse/misc/penthouse_light.png diff --git a/public/img/logos/penthouse/misc/penthouse_red.png b/public/img/logos/penthouse/misc/penthouse_red.png new file mode 100644 index 00000000..899b0597 Binary files /dev/null and b/public/img/logos/penthouse/misc/penthouse_red.png differ diff --git a/public/img/logos/penthouse/network.png b/public/img/logos/penthouse/network.png new file mode 100644 index 00000000..b4427e0a Binary files /dev/null and b/public/img/logos/penthouse/network.png differ diff --git a/seeds/05_countries.js b/seeds/05_countries.js index 06bdba77..6be17bbf 100644 --- a/seeds/05_countries.js +++ b/seeds/05_countries.js @@ -1,1787 +1,1787 @@ const upsert = require('../src/utils/upsert'); const countries = [ - { - name: 'Afghanistan', - code: 4, - alpha2: 'AF', - alpha3: 'AFG', - nationality: 'Afghan', - }, - { - name: 'Åland Islands', - code: 248, - alpha2: 'AX', - alpha3: 'ALA', - nationality: 'Åland Island', - }, - { - name: 'Albania', - code: 8, - alpha2: 'AL', - alpha3: 'ALB', - nationality: 'Albanian', - }, - { - name: 'Algeria', - code: 12, - alpha2: 'DZ', - alpha3: 'DZA', - nationality: 'Algerian', - }, - { - name: 'American Samoa', - code: 16, - alpha2: 'AS', - alpha3: 'ASM', - nationality: 'American Samoan', - priority: 0, - }, - { - name: 'Andorra', - code: 20, - alpha2: 'AD', - alpha3: 'AND', - nationality: 'Andorran', - }, - { - name: 'Angola', - code: 24, - alpha2: 'AO', - alpha3: 'AGO', - nationality: 'Angolan', - }, - { - name: 'Anguilla', - code: 660, - alpha2: 'AI', - alpha3: 'AIA', - nationality: 'Anguillan', - }, - { - name: 'Antarctica', - code: 10, - alpha2: 'AQ', - alpha3: 'ATA', - nationality: 'Antarctic', - }, - { - name: 'Antigua and Barbuda', - code: 28, - alpha2: 'AG', - alpha3: 'ATG', - nationality: 'Antiguan or Barbudan', - }, - { - name: 'Argentina', - code: 32, - alpha2: 'AR', - alpha3: 'ARG', - nationality: 'Argentine', - }, - { - name: 'Armenia', - code: 51, - alpha2: 'AM', - alpha3: 'ARM', - nationality: 'Armenian', - }, - { - name: 'Aruba', - code: 533, - alpha2: 'AW', - alpha3: 'ABW', - nationality: 'Aruban', - }, - { - name: 'Australia', - code: 36, - alpha2: 'AU', - alpha3: 'AUS', - nationality: 'Australian', - }, - { - name: 'Austria', - code: 40, - alpha2: 'AT', - alpha3: 'AUT', - nationality: 'Austrian', - }, - { - name: 'Azerbaijan', - code: 31, - alpha2: 'AZ', - alpha3: 'AZE', - nationality: 'Azerbaijani, Azeri', - }, - { - name: 'Bahamas', - code: 44, - alpha2: 'BS', - alpha3: 'BHS', - nationality: 'Bahamian', - }, - { - name: 'Bahrain', - code: 48, - alpha2: 'BH', - alpha3: 'BHR', - nationality: 'Bahraini', - }, - { - name: 'Bangladesh', - code: 50, - alpha2: 'BD', - alpha3: 'BGD', - nationality: 'Bangladeshi', - }, - { - name: 'Barbados', - code: 52, - alpha2: 'BB', - alpha3: 'BRB', - nationality: 'Barbadian', - }, - { - name: 'Belarus', - code: 112, - alpha2: 'BY', - alpha3: 'BLR', - nationality: 'Belarusian', - }, - { - name: 'Belgium', - code: 56, - alpha2: 'BE', - alpha3: 'BEL', - nationality: 'Belgian', - }, - { - name: 'Belize', - code: 84, - alpha2: 'BZ', - alpha3: 'BLZ', - nationality: 'Belizean', - }, - { - name: 'Benin', - code: 204, - alpha2: 'BJ', - alpha3: 'BEN', - nationality: 'Beninese, Beninois', - }, - { - name: 'Bermuda', - code: 60, - alpha2: 'BM', - alpha3: 'BMU', - nationality: 'Bermudian, Bermudan', - }, - { - name: 'Bhutan', - code: 64, - alpha2: 'BT', - alpha3: 'BTN', - nationality: 'Bhutanese', - }, - { - name: 'Bolivia (Plurinational State of)', - alias: 'Bolivia', - code: 68, - alpha2: 'BO', - alpha3: 'BOL', - nationality: 'Bolivian', - }, - { - name: 'Bonaire, Sint Eustatius and Saba', - alias: 'Bonaire', - code: 535, - alpha2: 'BQ', - alpha3: 'BES', - nationality: 'Bonaire', - }, - { - name: 'Bosnia and Herzegovina', - alias: 'Bosnia', - code: 70, - alpha2: 'BA', - alpha3: 'BIH', - nationality: 'Bosnian or Herzegovinian', - }, - { - name: 'Botswana', - code: 72, - alpha2: 'BW', - alpha3: 'BWA', - nationality: 'Motswana, Botswanan', - }, - { - name: 'Bouvet Island', - code: 74, - alpha2: 'BV', - alpha3: 'BVT', - nationality: 'Bouvet Islander', - }, - { - name: 'Brazil', - code: 76, - alpha2: 'BR', - alpha3: 'BRA', - nationality: 'Brazilian', - }, - { - name: 'British Indian Ocean Territory', - code: 86, - alpha2: 'IO', - alpha3: 'IOT', - nationality: 'BIOT', - }, - { - name: 'Brunei Darussalam', - alias: 'Brunei', - code: 96, - alpha2: 'BN', - alpha3: 'BRN', - nationality: 'Bruneian', - }, - { - name: 'Bulgaria', - code: 100, - alpha2: 'BG', - alpha3: 'BGR', - nationality: 'Bulgarian', - }, - { - name: 'Burkina Faso', - code: 854, - alpha2: 'BF', - alpha3: 'BFA', - nationality: 'Burkinabé', - }, - { - name: 'Burundi', - code: 108, - alpha2: 'BI', - alpha3: 'BDI', - nationality: 'Burundian', - }, - { - name: 'Cabo Verde', - code: 132, - alpha2: 'CV', - alpha3: 'CPV', - nationality: 'Cabo Verdean', - }, - { - name: 'Cambodia', - code: 116, - alpha2: 'KH', - alpha3: 'KHM', - nationality: 'Cambodian', - }, - { - name: 'Cameroon', - code: 120, - alpha2: 'CM', - alpha3: 'CMR', - nationality: 'Cameroonian', - }, - { - name: 'Canada', - code: 124, - alpha2: 'CA', - alpha3: 'CAN', - nationality: 'Canadian', - }, - { - name: 'Cayman Islands', - code: 136, - alpha2: 'KY', - alpha3: 'CYM', - nationality: 'Caymanian', - }, - { - name: 'Central African Republic', - code: 140, - alpha2: 'CF', - alpha3: 'CAF', - nationality: 'Central African', - }, - { - name: 'Chad', - code: 148, - alpha2: 'TD', - alpha3: 'TCD', - nationality: 'Chadian', - }, - { - name: 'Chile', - code: 152, - alpha2: 'CL', - alpha3: 'CHL', - nationality: 'Chilean', - }, - { - name: 'China', - code: 156, - alpha2: 'CN', - alpha3: 'CHN', - nationality: 'Chinese', - priority: 1, - }, - { - name: 'Christmas Island', - code: 162, - alpha2: 'CX', - alpha3: 'CXR', - nationality: 'Christmas Islander', - }, - { - name: 'Cocos (Keeling) Islands', - code: 166, - alpha2: 'CC', - alpha3: 'CCK', - nationality: 'Cocos Islander, Cocos Malays', - }, - { - name: 'Colombia', - code: 170, - alpha2: 'CO', - alpha3: 'COL', - nationality: 'Colombian', - }, - { - name: 'Comoros', - code: 174, - alpha2: 'KM', - alpha3: 'COM', - nationality: 'Comoran, Comorian', - }, - { - name: 'Congo (Republic of the)', - alias: 'Congo Republic', - code: 178, - alpha2: 'CG', - alpha3: 'COG', - nationality: 'Congolese', - }, - { - name: 'Congo (Democratic Republic of the)', - alias: 'DR Congo', - code: 180, - alpha2: 'CD', - alpha3: 'COD', - nationality: 'Congolese', - }, - { - name: 'Cook Islands', - code: 184, - alpha2: 'CK', - alpha3: 'COK', - nationality: 'Cook Islander', - }, - { - name: 'Costa Rica', - code: 188, - alpha2: 'CR', - alpha3: 'CRI', - nationality: 'Costa Rican', - }, - { - name: "Côte d'Ivoire", - code: 384, - alpha2: 'CI', - alpha3: 'CIV', - nationality: 'Ivorian', - }, - { - name: 'Croatia', - code: 191, - alpha2: 'HR', - alpha3: 'HRV', - nationality: 'Croatian', - }, - { - name: 'Cuba', - code: 192, - alpha2: 'CU', - alpha3: 'CUB', - nationality: 'Cuban', - }, - { - name: 'Curaçao', - code: 531, - alpha2: 'CW', - alpha3: 'CUW', - nationality: 'Curaçaoan', - }, - { - name: 'Cyprus', - code: 196, - alpha2: 'CY', - alpha3: 'CYP', - nationality: 'Cypriot', - }, - { - name: 'Czech Republic', - code: 203, - alpha2: 'CZ', - alpha3: 'CZE', - nationality: 'Czech', - }, - { - name: 'Denmark', - code: 208, - alpha2: 'DK', - alpha3: 'DNK', - nationality: 'Danish', - }, - { - name: 'Djibouti', - code: 262, - alpha2: 'DJ', - alpha3: 'DJI', - nationality: 'Djiboutian', - }, - { - name: 'Dominica', - code: 212, - alpha2: 'DM', - alpha3: 'DMA', - nationality: 'Dominican', - }, - { - name: 'Dominican Republic', - code: 214, - alpha2: 'DO', - alpha3: 'DOM', - nationality: 'Dominican', - }, - { - name: 'Ecuador', - code: 218, - alpha2: 'EC', - alpha3: 'ECU', - nationality: 'Ecuadorian', - }, - { - name: 'Egypt', - code: 818, - alpha2: 'EG', - alpha3: 'EGY', - nationality: 'Egyptian', - }, - { - name: 'El Salvador', - code: 222, - alpha2: 'SV', - alpha3: 'SLV', - nationality: 'Salvadoran', - }, - { - name: 'Equatorial Guinea', - code: 226, - alpha2: 'GQ', - alpha3: 'GNQ', - nationality: 'Equatorial Guinean, Equatoguinean', - }, - { - name: 'Eritrea', - code: 232, - alpha2: 'ER', - alpha3: 'ERI', - nationality: 'Eritrean', - }, - { - name: 'Estonia', - code: 233, - alpha2: 'EE', - alpha3: 'EST', - nationality: 'Estonian', - }, - { - name: 'Ethiopia', - code: 231, - alpha2: 'ET', - alpha3: 'ETH', - nationality: 'Ethiopian', - }, - { - name: 'Falkland Islands (Malvinas)', - alias: 'Falkland Islands', - code: 238, - alpha2: 'FK', - alpha3: 'FLK', - nationality: 'Falkland Islander', - }, - { - name: 'Faroe Islands', - code: 234, - alpha2: 'FO', - alpha3: 'FRO', - nationality: 'Faroese', - }, - { - name: 'Fiji', - code: 242, - alpha2: 'FJ', - alpha3: 'FJI', - nationality: 'Fijian', - }, - { - name: 'Finland', - code: 246, - alpha2: 'FI', - alpha3: 'FIN', - nationality: 'Finnish', - }, - { - name: 'France', - code: 250, - alpha2: 'FR', - alpha3: 'FRA', - nationality: 'French', - }, - { - name: 'French Guiana', - code: 254, - alpha2: 'GF', - alpha3: 'GUF', - nationality: 'French Guianese', - }, - { - name: 'French Polynesia', - code: 258, - alpha2: 'PF', - alpha3: 'PYF', - nationality: 'French Polynesian', - }, - { - name: 'French Southern Territories', - code: 260, - alpha2: 'TF', - alpha3: 'ATF', - nationality: 'French Southern Territories', - }, - { - name: 'Gabon', - code: 266, - alpha2: 'GA', - alpha3: 'GAB', - nationality: 'Gabonese', - }, - { - name: 'Gambia', - code: 270, - alpha2: 'GM', - alpha3: 'GMB', - nationality: 'Gambian', - }, - { - name: 'Georgia', - code: 268, - alpha2: 'GE', - alpha3: 'GEO', - nationality: 'Georgian', - }, - { - name: 'Germany', - code: 276, - alpha2: 'DE', - alpha3: 'DEU', - nationality: 'German', - }, - { - name: 'Ghana', - code: 288, - alpha2: 'GH', - alpha3: 'GHA', - nationality: 'Ghanaian', - }, - { - name: 'Gibraltar', - code: 292, - alpha2: 'GI', - alpha3: 'GIB', - nationality: 'Gibraltar', - }, - { - name: 'Greece', - code: 300, - alpha2: 'GR', - alpha3: 'GRC', - nationality: 'Greek, Hellenic', - }, - { - name: 'Greenland', - code: 304, - alpha2: 'GL', - alpha3: 'GRL', - nationality: 'Greenlandic', - }, - { - name: 'Grenada', - code: 308, - alpha2: 'GD', - alpha3: 'GRD', - nationality: 'Grenadian', - }, - { - name: 'Guadeloupe', - code: 312, - alpha2: 'GP', - alpha3: 'GLP', - nationality: 'Guadeloupean', - }, - { - name: 'Guam', - code: 316, - alpha2: 'GU', - alpha3: 'GUM', - nationality: 'Guamanian, Guambat', - }, - { - name: 'Guatemala', - code: 320, - alpha2: 'GT', - alpha3: 'GTM', - nationality: 'Guatemalan', - }, - { - name: 'Guernsey', - code: 831, - alpha2: 'GG', - alpha3: 'GGY', - nationality: 'Channel Islander', - }, - { - name: 'Guinea', - code: 324, - alpha2: 'GN', - alpha3: 'GIN', - nationality: 'Guinean', - }, - { - name: 'Guinea-Bissau', - code: 624, - alpha2: 'GW', - alpha3: 'GNB', - nationality: 'Bissau-Guinean', - }, - { - name: 'Guyana', - code: 328, - alpha2: 'GY', - alpha3: 'GUY', - nationality: 'Guyanese', - }, - { - name: 'Haiti', - code: 332, - alpha2: 'HT', - alpha3: 'HTI', - nationality: 'Haitian', - }, - { - name: 'Heard Island and McDonald Islands', - code: 334, - alpha2: 'HM', - alpha3: 'HMD', - nationality: 'Heard Islander, McDonald Islander', - }, - { - name: 'Vatican City State', - code: 336, - alpha2: 'VA', - alpha3: 'VAT', - nationality: 'Vatican', - }, - { - name: 'Honduras', - code: 340, - alpha2: 'HN', - alpha3: 'HND', - nationality: 'Honduran', - }, - { - name: 'Hong Kong', - code: 344, - alpha2: 'HK', - alpha3: 'HKG', - nationality: 'Hongkonger, Hong Konger, Hong Kongese', - }, - { - name: 'Hungary', - code: 348, - alpha2: 'HU', - alpha3: 'HUN', - nationality: 'Hungarian, Magyar', - }, - { - name: 'Iceland', - code: 352, - alpha2: 'IS', - alpha3: 'ISL', - nationality: 'Icelandic', - }, - { - name: 'India', - code: 356, - alpha2: 'IN', - alpha3: 'IND', - nationality: 'Indian', - }, - { - name: 'Indonesia', - code: 360, - alpha2: 'ID', - alpha3: 'IDN', - nationality: 'Indonesian', - }, - { - name: 'Iran', - code: 364, - alpha2: 'IR', - alpha3: 'IRN', - nationality: 'Iranian, Persian', - }, - { - name: 'Iraq', - code: 368, - alpha2: 'IQ', - alpha3: 'IRQ', - nationality: 'Iraqi', - }, - { - name: 'Ireland', - code: 372, - alpha2: 'IE', - alpha3: 'IRL', - nationality: 'Irish', - }, - { - name: 'Isle of Man', - code: 833, - alpha2: 'IM', - alpha3: 'IMN', - nationality: 'Manx', - }, - { - name: 'Israel', - code: 376, - alpha2: 'IL', - alpha3: 'ISR', - nationality: 'Israeli', - }, - { - name: 'Italy', - code: 380, - alpha2: 'IT', - alpha3: 'ITA', - nationality: 'Italian', - }, - { - name: 'Jamaica', - code: 388, - alpha2: 'JM', - alpha3: 'JAM', - nationality: 'Jamaican', - }, - { - name: 'Japan', - code: 392, - alpha2: 'JP', - alpha3: 'JPN', - nationality: 'Japanese', - }, - { - name: 'Jersey', - code: 832, - alpha2: 'JE', - alpha3: 'JEY', - nationality: 'Channel Island', - }, - { - name: 'Jordan', - code: 400, - alpha2: 'JO', - alpha3: 'JOR', - nationality: 'Jordanian', - }, - { - name: 'Kazakhstan', - code: 398, - alpha2: 'KZ', - alpha3: 'KAZ', - nationality: 'Kazakhstani, Kazakh', - }, - { - name: 'Kenya', - code: 404, - alpha2: 'KE', - alpha3: 'KEN', - nationality: 'Kenyan', - }, - { - name: 'Kiribati', - code: 296, - alpha2: 'KI', - alpha3: 'KIR', - nationality: 'I-Kiribati', - }, - { - name: "Korea (Democratic People's Republic of)", - alias: 'North Korea', - code: 408, - alpha2: 'KP', - alpha3: 'PRK', - nationality: 'North Korean', - }, - { - name: 'Korea (Republic of)', - alias: 'South Korea', - code: 410, - alpha2: 'KR', - alpha3: 'KOR', - nationality: 'South Korean', - }, - { - name: 'Republic of Kosovo', - alias: 'Kosovo', - code: 383, - alpha2: 'XK', - alpha3: 'UNK', - nationality: 'Kosovan', - }, - { - name: 'Kuwait', - code: 414, - alpha2: 'KW', - alpha3: 'KWT', - nationality: 'Kuwaiti', - }, - { - name: 'Kyrgyzstan', - code: 417, - alpha2: 'KG', - alpha3: 'KGZ', - nationality: 'Kyrgyzstani, Kyrgyz, Kirgiz, Kirghiz', - }, - { - name: 'Lao People\'s Democratic Republic', - alias: 'Laos', - code: 418, - alpha2: 'LA', - alpha3: 'LAO', - nationality: 'Lao, Laotian', - }, - { - name: 'Latvia', - code: 428, - alpha2: 'LV', - alpha3: 'LVA', - nationality: 'Latvian', - }, - { - name: 'Lebanon', - code: 422, - alpha2: 'LB', - alpha3: 'LBN', - nationality: 'Lebanese', - }, - { - name: 'Lesotho', - code: 426, - alpha2: 'LS', - alpha3: 'LSO', - nationality: 'Basotho', - }, - { - name: 'Liberia', - code: 430, - alpha2: 'LR', - alpha3: 'LBR', - nationality: 'Liberian', - }, - { - name: 'Libya', - code: 434, - alpha2: 'LY', - alpha3: 'LBY', - nationality: 'Libyan', - }, - { - name: 'Liechtenstein', - code: 438, - alpha2: 'LI', - alpha3: 'LIE', - nationality: 'Liechtenstein', - }, - { - name: 'Lithuania', - code: 440, - alpha2: 'LT', - alpha3: 'LTU', - nationality: 'Lithuanian', - }, - { - name: 'Luxembourg', - code: 442, - alpha2: 'LU', - alpha3: 'LUX', - nationality: 'Luxembourg, Luxembourgish', - }, - { - name: 'Macao', - code: 446, - alpha2: 'MO', - alpha3: 'MAC', - nationality: 'Macanese, Chinese', - priority: 0, - }, - { - name: 'Macedonia (the former Yugoslav Republic of)', - alias: 'Macedonia', - code: 807, - alpha2: 'MK', - alpha3: 'MKD', - nationality: 'Macedonian', - }, - { - name: 'Madagascar', - code: 450, - alpha2: 'MG', - alpha3: 'MDG', - nationality: 'Malagasy', - }, - { - name: 'Malawi', - code: 454, - alpha2: 'MW', - alpha3: 'MWI', - nationality: 'Malawian', - }, - { - name: 'Malaysia', - code: 458, - alpha2: 'MY', - alpha3: 'MYS', - nationality: 'Malaysian', - }, - { - name: 'Maldives', - code: 462, - alpha2: 'MV', - alpha3: 'MDV', - nationality: 'Maldivian', - }, - { - name: 'Mali', - code: 466, - alpha2: 'ML', - alpha3: 'MLI', - nationality: 'Malian, Malinese', - }, - { - name: 'Malta', - code: 470, - alpha2: 'MT', - alpha3: 'MLT', - nationality: 'Maltese', - }, - { - name: 'Marshall Islands', - code: 584, - alpha2: 'MH', - alpha3: 'MHL', - nationality: 'Marshallese', - }, - { - name: 'Martinique', - code: 474, - alpha2: 'MQ', - alpha3: 'MTQ', - nationality: 'Martiniquais, Martinican', - }, - { - name: 'Mauritania', - code: 478, - alpha2: 'MR', - alpha3: 'MRT', - nationality: 'Mauritanian', - }, - { - name: 'Mauritius', - code: 480, - alpha2: 'MU', - alpha3: 'MUS', - nationality: 'Mauritian', - }, - { - name: 'Mayotte', - code: 175, - alpha2: 'YT', - alpha3: 'MYT', - nationality: 'Mahoran', - }, - { - name: 'Mexico', - code: 484, - alpha2: 'MX', - alpha3: 'MEX', - nationality: 'Mexican', - }, - { - name: 'Micronesia (Federated States of)', - alias: 'Micronesia', - code: 583, - alpha2: 'FM', - alpha3: 'FSM', - nationality: 'Micronesian', - }, - { - name: 'Moldova (Republic of)', - alias: 'Moldova', - code: 498, - alpha2: 'MD', - alpha3: 'MDA', - nationality: 'Moldovan', - }, - { - name: 'Monaco', - code: 492, - alpha2: 'MC', - alpha3: 'MCO', - nationality: 'Monégasque, Monacan', - }, - { - name: 'Mongolia', - code: 496, - alpha2: 'MN', - alpha3: 'MNG', - nationality: 'Mongolian', - }, - { - name: 'Montenegro', - code: 499, - alpha2: 'ME', - alpha3: 'MNE', - nationality: 'Montenegrin', - }, - { - name: 'Montserrat', - code: 500, - alpha2: 'MS', - alpha3: 'MSR', - nationality: 'Montserratian', - }, - { - name: 'Morocco', - code: 504, - alpha2: 'MA', - alpha3: 'MAR', - nationality: 'Moroccan', - }, - { - name: 'Mozambique', - code: 508, - alpha2: 'MZ', - alpha3: 'MOZ', - nationality: 'Mozambican', - }, - { - name: 'Myanmar', - code: 104, - alpha2: 'MM', - alpha3: 'MMR', - nationality: 'Burmese', - }, - { - name: 'Namibia', - code: 516, - alpha2: 'NA', - alpha3: 'NAM', - nationality: 'Namibian', - }, - { - name: 'Nauru', - code: 520, - alpha2: 'NR', - alpha3: 'NRU', - nationality: 'Nauruan', - }, - { - name: 'Nepal', - code: 524, - alpha2: 'NP', - alpha3: 'NPL', - nationality: 'Nepali, Nepalese', - }, - { - name: 'Netherlands', - code: 528, - alpha2: 'NL', - alpha3: 'NLD', - nationality: 'Dutch', - }, - { - name: 'New Caledonia', - code: 540, - alpha2: 'NC', - alpha3: 'NCL', - nationality: 'New Caledonian', - }, - { - name: 'New Zealand', - code: 554, - alpha2: 'NZ', - alpha3: 'NZL', - nationality: 'New Zealander, Kiwi', - }, - { - name: 'Nicaragua', - code: 558, - alpha2: 'NI', - alpha3: 'NIC', - nationality: 'Nicaraguan', - }, - { - name: 'Niger', - code: 562, - alpha2: 'NE', - alpha3: 'NER', - nationality: 'Nigerien', - }, - { - name: 'Nigeria', - code: 566, - alpha2: 'NG', - alpha3: 'NGA', - nationality: 'Nigerian', - }, - { - name: 'Niue', - code: 570, - alpha2: 'NU', - alpha3: 'NIU', - nationality: 'Niuean', - }, - { - name: 'Norfolk Island', - code: 574, - alpha2: 'NF', - alpha3: 'NFK', - nationality: 'Norfolk Islander', - }, - { - name: 'Northern Mariana Islands', - code: 580, - alpha2: 'MP', - alpha3: 'MNP', - nationality: 'Northern Marianan', - }, - { - name: 'Norway', - code: 578, - alpha2: 'NO', - alpha3: 'NOR', - nationality: 'Norwegian', - }, - { - name: 'Oman', - code: 512, - alpha2: 'OM', - alpha3: 'OMN', - nationality: 'Omani', - }, - { - name: 'Pakistan', - code: 586, - alpha2: 'PK', - alpha3: 'PAK', - nationality: 'Pakistani', - }, - { - name: 'Palau', - code: 585, - alpha2: 'PW', - alpha3: 'PLW', - nationality: 'Palauan', - }, - { - name: 'Palestine, State of', - alias: 'Palestine', - code: 275, - alpha2: 'PS', - alpha3: 'PSE', - nationality: 'Palestinian', - }, - { - name: 'Panama', - code: 591, - alpha2: 'PA', - alpha3: 'PAN', - nationality: 'Panamanian', - }, - { - name: 'Papua New Guinea', - code: 598, - alpha2: 'PG', - alpha3: 'PNG', - nationality: 'Papua New Guinean, Papuan', - }, - { - name: 'Paraguay', - code: 600, - alpha2: 'PY', - alpha3: 'PRY', - nationality: 'Paraguayan', - }, - { - name: 'Peru', - code: 604, - alpha2: 'PE', - alpha3: 'PER', - nationality: 'Peruvian', - }, - { - name: 'Philippines', - code: 608, - alpha2: 'PH', - alpha3: 'PHL', - nationality: 'Philippine, Filipino', - }, - { - name: 'Pitcairn', - code: 612, - alpha2: 'PN', - alpha3: 'PCN', - nationality: 'Pitcairn Island', - }, - { - name: 'Poland', - code: 616, - alpha2: 'PL', - alpha3: 'POL', - nationality: 'Polish', - }, - { - name: 'Portugal', - code: 620, - alpha2: 'PT', - alpha3: 'PRT', - nationality: 'Portuguese', - }, - { - name: 'Puerto Rico', - code: 630, - alpha2: 'PR', - alpha3: 'PRI', - nationality: 'Puerto Rican', - }, - { - name: 'Qatar', - code: 634, - alpha2: 'QA', - alpha3: 'QAT', - nationality: 'Qatari', - }, - { - name: 'Réunion', - code: 638, - alpha2: 'RE', - alpha3: 'REU', - nationality: 'Réunionese, Réunionnais', - }, - { - name: 'Romania', - code: 642, - alpha2: 'RO', - alpha3: 'ROU', - nationality: 'Romanian', - }, - { - name: 'Russian Federation', - alias: 'Russia', - code: 643, - alpha2: 'RU', - alpha3: 'RUS', - nationality: 'Russian', - }, - { - name: 'Rwanda', - code: 646, - alpha2: 'RW', - alpha3: 'RWA', - nationality: 'Rwandan', - }, - { - name: 'Saint Barthélemy', - code: 652, - alpha2: 'BL', - alpha3: 'BLM', - nationality: 'Barthélemois', - }, - { - name: 'Saint Helena, Ascension and Tristan da Cunha', - code: 654, - alpha2: 'SH', - alpha3: 'SHN', - nationality: 'Saint Helenian', - }, - { - name: 'Saint Kitts and Nevis', - code: 659, - alpha2: 'KN', - alpha3: 'KNA', - nationality: 'Kittitian or Nevisian', - }, - { - name: 'Saint Lucia', - code: 662, - alpha2: 'LC', - alpha3: 'LCA', - nationality: 'Saint Lucian', - }, - { - name: 'Saint Martin (French part)', - alias: 'Saint Martin', - code: 663, - alpha2: 'MF', - alpha3: 'MAF', - nationality: 'Saint-Martinoise', - }, - { - name: 'Saint Pierre and Miquelon', - code: 666, - alpha2: 'PM', - alpha3: 'SPM', - nationality: 'Saint-Pierrais or Miquelonnais', - }, - { - name: 'Saint Vincent and the Grenadines', - code: 670, - alpha2: 'VC', - alpha3: 'VCT', - nationality: 'Saint Vincentian, Vincentian', - }, - { - name: 'Samoa', - code: 882, - alpha2: 'WS', - alpha3: 'WSM', - nationality: 'Samoan', - }, - { - name: 'San Marino', - code: 674, - alpha2: 'SM', - alpha3: 'SMR', - nationality: 'Sammarinese', - }, - { - name: 'Sao Tome and Principe', - code: 678, - alpha2: 'ST', - alpha3: 'STP', - nationality: 'São Toméan', - }, - { - name: 'Saudi Arabia', - code: 682, - alpha2: 'SA', - alpha3: 'SAU', - nationality: 'Saudi, Saudi Arabian', - }, - { - name: 'Senegal', - code: 686, - alpha2: 'SN', - alpha3: 'SEN', - nationality: 'Senegalese', - }, - { - name: 'Serbia', - code: 688, - alpha2: 'RS', - alpha3: 'SRB', - nationality: 'Serbian', - }, - { - name: 'Seychelles', - code: 690, - alpha2: 'SC', - alpha3: 'SYC', - nationality: 'Seychellois', - }, - { - name: 'Sierra Leone', - code: 694, - alpha2: 'SL', - alpha3: 'SLE', - nationality: 'Sierra Leonean', - }, - { - name: 'Singapore', - code: 702, - alpha2: 'SG', - alpha3: 'SGP', - nationality: 'Singaporean', - }, - { - name: 'Sint Maarten (Dutch part)', - alias: 'Sint Maarten', - code: 534, - alpha2: 'SX', - alpha3: 'SXM', - nationality: 'Sint Maarten', - }, - { - name: 'Slovakia', - code: 703, - alpha2: 'SK', - alpha3: 'SVK', - nationality: 'Slovak', - }, - { - name: 'Slovenia', - code: 705, - alpha2: 'SI', - alpha3: 'SVN', - nationality: 'Slovenian, Slovene', - }, - { - name: 'Solomon Islands', - code: 90, - alpha2: 'SB', - alpha3: 'SLB', - nationality: 'Solomon Island', - }, - { - name: 'Somalia', - code: 706, - alpha2: 'SO', - alpha3: 'SOM', - nationality: 'Somali, Somalian', - }, - { - name: 'South Africa', - code: 710, - alpha2: 'ZA', - alpha3: 'ZAF', - nationality: 'South African', - }, - { - name: 'South Georgia and the South Sandwich Islands', - code: 239, - alpha2: 'GS', - alpha3: 'SGS', - nationality: 'South Georgia or South Sandwich Islands', - }, - { - name: 'South Sudan', - code: 728, - alpha2: 'SS', - alpha3: 'SSD', - nationality: 'South Sudanese', - }, - { - name: 'Spain', - code: 724, - alpha2: 'ES', - alpha3: 'ESP', - nationality: 'Spanish', - }, - { - name: 'Sri Lanka', - code: 144, - alpha2: 'LK', - alpha3: 'LKA', - nationality: 'Sri Lankan', - }, - { - name: 'Sudan', - code: 729, - alpha2: 'SD', - alpha3: 'SDN', - nationality: 'Sudanese', - }, - { - name: 'Suriname', - code: 740, - alpha2: 'SR', - alpha3: 'SUR', - nationality: 'Surinamese', - }, - { - name: 'Svalbard and Jan Mayen', - code: 744, - alpha2: 'SJ', - alpha3: 'SJM', - nationality: 'Svalbard', - }, - { - name: 'Swaziland', - code: 748, - alpha2: 'SZ', - alpha3: 'SWZ', - nationality: 'Swazi', - }, - { - name: 'Sweden', - code: 752, - alpha2: 'SE', - alpha3: 'SWE', - nationality: 'Swedish', - }, - { - name: 'Switzerland', - code: 756, - alpha2: 'CH', - alpha3: 'CHE', - nationality: 'Swiss', - }, - { - name: 'Syrian Arab Republic', - alias: 'Syria', - code: 760, - alpha2: 'SY', - alpha3: 'SYR', - nationality: 'Syrian', - }, - { - name: 'Taiwan, Province of China', - alias: 'Taiwan', - code: 158, - alpha2: 'TW', - alpha3: 'TWN', - nationality: 'Chinese, Taiwanese', - priority: 0, - }, - { - name: 'Tajikistan', - code: 762, - alpha2: 'TJ', - alpha3: 'TJK', - nationality: 'Tajikistani', - }, - { - name: 'Tanzania, United Republic of', - alias: 'Tanzania', - code: 834, - alpha2: 'TZ', - alpha3: 'TZA', - nationality: 'Tanzanian', - }, - { - name: 'Thailand', - code: 764, - alpha2: 'TH', - alpha3: 'THA', - nationality: 'Thai', - }, - { - name: 'Timor-Leste', - code: 626, - alpha2: 'TL', - alpha3: 'TLS', - nationality: 'Timorese', - }, - { - name: 'Togo', - code: 768, - alpha2: 'TG', - alpha3: 'TGO', - nationality: 'Togolese', - }, - { - name: 'Tokelau', - code: 772, - alpha2: 'TK', - alpha3: 'TKL', - nationality: 'Tokelauan', - }, - { - name: 'Tonga', - code: 776, - alpha2: 'TO', - alpha3: 'TON', - nationality: 'Tongan', - }, - { - name: 'Trinidad and Tobago', - code: 780, - alpha2: 'TT', - alpha3: 'TTO', - nationality: 'Trinidadian or Tobagonian', - }, - { - name: 'Tunisia', - code: 788, - alpha2: 'TN', - alpha3: 'TUN', - nationality: 'Tunisian', - }, - { - name: 'Turkey', - code: 792, - alpha2: 'TR', - alpha3: 'TUR', - nationality: 'Turkish', - }, - { - name: 'Turkmenistan', - code: 795, - alpha2: 'TM', - alpha3: 'TKM', - nationality: 'Turkmen', - }, - { - name: 'Turks and Caicos Islands', - code: 796, - alpha2: 'TC', - alpha3: 'TCA', - nationality: 'Turks and Caicos Island', - }, - { - name: 'Tuvalu', - code: 798, - alpha2: 'TV', - alpha3: 'TUV', - nationality: 'Tuvaluan', - }, - { - name: 'Uganda', - code: 800, - alpha2: 'UG', - alpha3: 'UGA', - nationality: 'Ugandan', - }, - { - name: 'Ukraine', - code: 804, - alpha2: 'UA', - alpha3: 'UKR', - nationality: 'Ukrainian', - }, - { - name: 'United Arab Emirates', - code: 784, - alpha2: 'AE', - alpha3: 'ARE', - nationality: 'Emirati, Emirian, Emiri', - }, - { - name: 'United Kingdom of Great Britain and Northern Ireland', - alias: 'United Kingdom', - code: 826, - alpha2: 'GB', - alpha3: 'GBR', - nationality: 'British, English', - }, - { - name: 'United States Minor Outlying Islands', - code: 581, - alpha2: 'UM', - alpha3: 'UMI', - nationality: 'American', - priority: 0, - }, - { - name: 'United States of America', - alias: 'United States', - code: 840, - alpha2: 'US', - alpha3: 'USA', - nationality: 'American', - priority: 1, - }, - { - name: 'Uruguay', - code: 858, - alpha2: 'UY', - alpha3: 'URY', - nationality: 'Uruguayan', - }, - { - name: 'Uzbekistan', - code: 860, - alpha2: 'UZ', - alpha3: 'UZB', - nationality: 'Uzbekistani, Uzbek', - }, - { - name: 'Vanuatu', - code: 548, - alpha2: 'VU', - alpha3: 'VUT', - nationality: 'Ni-Vanuatu, Vanuatuan', - }, - { - name: 'Venezuela (Bolivarian Republic of)', - alias: 'Venezuela', - code: 862, - alpha2: 'VE', - alpha3: 'VEN', - nationality: 'Venezuelan', - }, - { - name: 'Vietnam', - code: 704, - alpha2: 'VN', - alpha3: 'VNM', - nationality: 'Vietnamese', - }, - { - name: 'Virgin Islands (British)', - code: 92, - alpha2: 'VG', - alpha3: 'VGB', - nationality: 'British Virgin Island', - }, - { - name: 'Virgin Islands (U.S.)', - code: 850, - alpha2: 'VI', - alpha3: 'VIR', - nationality: 'U.S. Virgin Island', - }, - { - name: 'Wallis and Futuna', - code: 876, - alpha2: 'WF', - alpha3: 'WLF', - nationality: 'Wallis and Futuna, Wallisian or Futunan', - }, - { - name: 'Western Sahara', - code: 732, - alpha2: 'EH', - alpha3: 'ESH', - nationality: 'Sahrawi, Sahrawian, Sahraouian', - }, - { - name: 'Yemen', - code: 887, - alpha2: 'YE', - alpha3: 'YEM', - nationality: 'Yemeni', - }, - { - name: 'Zambia', - code: 894, - alpha2: 'ZM', - alpha3: 'ZMB', - nationality: 'Zambian', - }, - { - name: 'Zimbabwe', - code: 716, - alpha2: 'ZW', - alpha3: 'ZWE', - nationality: 'Zimbabwean', - }, + { + name: 'Afghanistan', + code: 4, + alpha2: 'AF', + alpha3: 'AFG', + nationality: 'Afghan', + }, + { + name: 'Åland Islands', + code: 248, + alpha2: 'AX', + alpha3: 'ALA', + nationality: 'Åland Island', + }, + { + name: 'Albania', + code: 8, + alpha2: 'AL', + alpha3: 'ALB', + nationality: 'Albanian', + }, + { + name: 'Algeria', + code: 12, + alpha2: 'DZ', + alpha3: 'DZA', + nationality: 'Algerian', + }, + { + name: 'American Samoa', + code: 16, + alpha2: 'AS', + alpha3: 'ASM', + nationality: 'American Samoan', + priority: 0, + }, + { + name: 'Andorra', + code: 20, + alpha2: 'AD', + alpha3: 'AND', + nationality: 'Andorran', + }, + { + name: 'Angola', + code: 24, + alpha2: 'AO', + alpha3: 'AGO', + nationality: 'Angolan', + }, + { + name: 'Anguilla', + code: 660, + alpha2: 'AI', + alpha3: 'AIA', + nationality: 'Anguillan', + }, + { + name: 'Antarctica', + code: 10, + alpha2: 'AQ', + alpha3: 'ATA', + nationality: 'Antarctic', + }, + { + name: 'Antigua and Barbuda', + code: 28, + alpha2: 'AG', + alpha3: 'ATG', + nationality: 'Antiguan or Barbudan', + }, + { + name: 'Argentina', + code: 32, + alpha2: 'AR', + alpha3: 'ARG', + nationality: 'Argentine, Argentinian', + }, + { + name: 'Armenia', + code: 51, + alpha2: 'AM', + alpha3: 'ARM', + nationality: 'Armenian', + }, + { + name: 'Aruba', + code: 533, + alpha2: 'AW', + alpha3: 'ABW', + nationality: 'Aruban', + }, + { + name: 'Australia', + code: 36, + alpha2: 'AU', + alpha3: 'AUS', + nationality: 'Australian', + }, + { + name: 'Austria', + code: 40, + alpha2: 'AT', + alpha3: 'AUT', + nationality: 'Austrian', + }, + { + name: 'Azerbaijan', + code: 31, + alpha2: 'AZ', + alpha3: 'AZE', + nationality: 'Azerbaijani, Azeri', + }, + { + name: 'Bahamas', + code: 44, + alpha2: 'BS', + alpha3: 'BHS', + nationality: 'Bahamian', + }, + { + name: 'Bahrain', + code: 48, + alpha2: 'BH', + alpha3: 'BHR', + nationality: 'Bahraini', + }, + { + name: 'Bangladesh', + code: 50, + alpha2: 'BD', + alpha3: 'BGD', + nationality: 'Bangladeshi', + }, + { + name: 'Barbados', + code: 52, + alpha2: 'BB', + alpha3: 'BRB', + nationality: 'Barbadian', + }, + { + name: 'Belarus', + code: 112, + alpha2: 'BY', + alpha3: 'BLR', + nationality: 'Belarusian', + }, + { + name: 'Belgium', + code: 56, + alpha2: 'BE', + alpha3: 'BEL', + nationality: 'Belgian', + }, + { + name: 'Belize', + code: 84, + alpha2: 'BZ', + alpha3: 'BLZ', + nationality: 'Belizean', + }, + { + name: 'Benin', + code: 204, + alpha2: 'BJ', + alpha3: 'BEN', + nationality: 'Beninese, Beninois', + }, + { + name: 'Bermuda', + code: 60, + alpha2: 'BM', + alpha3: 'BMU', + nationality: 'Bermudian, Bermudan', + }, + { + name: 'Bhutan', + code: 64, + alpha2: 'BT', + alpha3: 'BTN', + nationality: 'Bhutanese', + }, + { + name: 'Bolivia (Plurinational State of)', + alias: 'Bolivia', + code: 68, + alpha2: 'BO', + alpha3: 'BOL', + nationality: 'Bolivian', + }, + { + name: 'Bonaire, Sint Eustatius and Saba', + alias: 'Bonaire', + code: 535, + alpha2: 'BQ', + alpha3: 'BES', + nationality: 'Bonaire', + }, + { + name: 'Bosnia and Herzegovina', + alias: 'Bosnia', + code: 70, + alpha2: 'BA', + alpha3: 'BIH', + nationality: 'Bosnian or Herzegovinian', + }, + { + name: 'Botswana', + code: 72, + alpha2: 'BW', + alpha3: 'BWA', + nationality: 'Motswana, Botswanan', + }, + { + name: 'Bouvet Island', + code: 74, + alpha2: 'BV', + alpha3: 'BVT', + nationality: 'Bouvet Islander', + }, + { + name: 'Brazil', + code: 76, + alpha2: 'BR', + alpha3: 'BRA', + nationality: 'Brazilian', + }, + { + name: 'British Indian Ocean Territory', + code: 86, + alpha2: 'IO', + alpha3: 'IOT', + nationality: 'BIOT', + }, + { + name: 'Brunei Darussalam', + alias: 'Brunei', + code: 96, + alpha2: 'BN', + alpha3: 'BRN', + nationality: 'Bruneian', + }, + { + name: 'Bulgaria', + code: 100, + alpha2: 'BG', + alpha3: 'BGR', + nationality: 'Bulgarian', + }, + { + name: 'Burkina Faso', + code: 854, + alpha2: 'BF', + alpha3: 'BFA', + nationality: 'Burkinabé', + }, + { + name: 'Burundi', + code: 108, + alpha2: 'BI', + alpha3: 'BDI', + nationality: 'Burundian', + }, + { + name: 'Cabo Verde', + code: 132, + alpha2: 'CV', + alpha3: 'CPV', + nationality: 'Cabo Verdean', + }, + { + name: 'Cambodia', + code: 116, + alpha2: 'KH', + alpha3: 'KHM', + nationality: 'Cambodian', + }, + { + name: 'Cameroon', + code: 120, + alpha2: 'CM', + alpha3: 'CMR', + nationality: 'Cameroonian', + }, + { + name: 'Canada', + code: 124, + alpha2: 'CA', + alpha3: 'CAN', + nationality: 'Canadian', + }, + { + name: 'Cayman Islands', + code: 136, + alpha2: 'KY', + alpha3: 'CYM', + nationality: 'Caymanian', + }, + { + name: 'Central African Republic', + code: 140, + alpha2: 'CF', + alpha3: 'CAF', + nationality: 'Central African', + }, + { + name: 'Chad', + code: 148, + alpha2: 'TD', + alpha3: 'TCD', + nationality: 'Chadian', + }, + { + name: 'Chile', + code: 152, + alpha2: 'CL', + alpha3: 'CHL', + nationality: 'Chilean', + }, + { + name: 'China', + code: 156, + alpha2: 'CN', + alpha3: 'CHN', + nationality: 'Chinese', + priority: 1, + }, + { + name: 'Christmas Island', + code: 162, + alpha2: 'CX', + alpha3: 'CXR', + nationality: 'Christmas Islander', + }, + { + name: 'Cocos (Keeling) Islands', + code: 166, + alpha2: 'CC', + alpha3: 'CCK', + nationality: 'Cocos Islander, Cocos Malays', + }, + { + name: 'Colombia', + code: 170, + alpha2: 'CO', + alpha3: 'COL', + nationality: 'Colombian', + }, + { + name: 'Comoros', + code: 174, + alpha2: 'KM', + alpha3: 'COM', + nationality: 'Comoran, Comorian', + }, + { + name: 'Congo (Republic of the)', + alias: 'Congo Republic', + code: 178, + alpha2: 'CG', + alpha3: 'COG', + nationality: 'Congolese', + }, + { + name: 'Congo (Democratic Republic of the)', + alias: 'DR Congo', + code: 180, + alpha2: 'CD', + alpha3: 'COD', + nationality: 'Congolese', + }, + { + name: 'Cook Islands', + code: 184, + alpha2: 'CK', + alpha3: 'COK', + nationality: 'Cook Islander', + }, + { + name: 'Costa Rica', + code: 188, + alpha2: 'CR', + alpha3: 'CRI', + nationality: 'Costa Rican', + }, + { + name: "Côte d'Ivoire", + code: 384, + alpha2: 'CI', + alpha3: 'CIV', + nationality: 'Ivorian', + }, + { + name: 'Croatia', + code: 191, + alpha2: 'HR', + alpha3: 'HRV', + nationality: 'Croatian', + }, + { + name: 'Cuba', + code: 192, + alpha2: 'CU', + alpha3: 'CUB', + nationality: 'Cuban', + }, + { + name: 'Curaçao', + code: 531, + alpha2: 'CW', + alpha3: 'CUW', + nationality: 'Curaçaoan', + }, + { + name: 'Cyprus', + code: 196, + alpha2: 'CY', + alpha3: 'CYP', + nationality: 'Cypriot', + }, + { + name: 'Czech Republic', + code: 203, + alpha2: 'CZ', + alpha3: 'CZE', + nationality: 'Czech', + }, + { + name: 'Denmark', + code: 208, + alpha2: 'DK', + alpha3: 'DNK', + nationality: 'Danish', + }, + { + name: 'Djibouti', + code: 262, + alpha2: 'DJ', + alpha3: 'DJI', + nationality: 'Djiboutian', + }, + { + name: 'Dominica', + code: 212, + alpha2: 'DM', + alpha3: 'DMA', + nationality: 'Dominican', + }, + { + name: 'Dominican Republic', + code: 214, + alpha2: 'DO', + alpha3: 'DOM', + nationality: 'Dominican', + }, + { + name: 'Ecuador', + code: 218, + alpha2: 'EC', + alpha3: 'ECU', + nationality: 'Ecuadorian', + }, + { + name: 'Egypt', + code: 818, + alpha2: 'EG', + alpha3: 'EGY', + nationality: 'Egyptian', + }, + { + name: 'El Salvador', + code: 222, + alpha2: 'SV', + alpha3: 'SLV', + nationality: 'Salvadoran', + }, + { + name: 'Equatorial Guinea', + code: 226, + alpha2: 'GQ', + alpha3: 'GNQ', + nationality: 'Equatorial Guinean, Equatoguinean', + }, + { + name: 'Eritrea', + code: 232, + alpha2: 'ER', + alpha3: 'ERI', + nationality: 'Eritrean', + }, + { + name: 'Estonia', + code: 233, + alpha2: 'EE', + alpha3: 'EST', + nationality: 'Estonian', + }, + { + name: 'Ethiopia', + code: 231, + alpha2: 'ET', + alpha3: 'ETH', + nationality: 'Ethiopian', + }, + { + name: 'Falkland Islands (Malvinas)', + alias: 'Falkland Islands', + code: 238, + alpha2: 'FK', + alpha3: 'FLK', + nationality: 'Falkland Islander', + }, + { + name: 'Faroe Islands', + code: 234, + alpha2: 'FO', + alpha3: 'FRO', + nationality: 'Faroese', + }, + { + name: 'Fiji', + code: 242, + alpha2: 'FJ', + alpha3: 'FJI', + nationality: 'Fijian', + }, + { + name: 'Finland', + code: 246, + alpha2: 'FI', + alpha3: 'FIN', + nationality: 'Finnish', + }, + { + name: 'France', + code: 250, + alpha2: 'FR', + alpha3: 'FRA', + nationality: 'French', + }, + { + name: 'French Guiana', + code: 254, + alpha2: 'GF', + alpha3: 'GUF', + nationality: 'French Guianese', + }, + { + name: 'French Polynesia', + code: 258, + alpha2: 'PF', + alpha3: 'PYF', + nationality: 'French Polynesian', + }, + { + name: 'French Southern Territories', + code: 260, + alpha2: 'TF', + alpha3: 'ATF', + nationality: 'French Southern Territories', + }, + { + name: 'Gabon', + code: 266, + alpha2: 'GA', + alpha3: 'GAB', + nationality: 'Gabonese', + }, + { + name: 'Gambia', + code: 270, + alpha2: 'GM', + alpha3: 'GMB', + nationality: 'Gambian', + }, + { + name: 'Georgia', + code: 268, + alpha2: 'GE', + alpha3: 'GEO', + nationality: 'Georgian', + }, + { + name: 'Germany', + code: 276, + alpha2: 'DE', + alpha3: 'DEU', + nationality: 'German', + }, + { + name: 'Ghana', + code: 288, + alpha2: 'GH', + alpha3: 'GHA', + nationality: 'Ghanaian', + }, + { + name: 'Gibraltar', + code: 292, + alpha2: 'GI', + alpha3: 'GIB', + nationality: 'Gibraltar', + }, + { + name: 'Greece', + code: 300, + alpha2: 'GR', + alpha3: 'GRC', + nationality: 'Greek, Hellenic', + }, + { + name: 'Greenland', + code: 304, + alpha2: 'GL', + alpha3: 'GRL', + nationality: 'Greenlandic', + }, + { + name: 'Grenada', + code: 308, + alpha2: 'GD', + alpha3: 'GRD', + nationality: 'Grenadian', + }, + { + name: 'Guadeloupe', + code: 312, + alpha2: 'GP', + alpha3: 'GLP', + nationality: 'Guadeloupean', + }, + { + name: 'Guam', + code: 316, + alpha2: 'GU', + alpha3: 'GUM', + nationality: 'Guamanian, Guambat', + }, + { + name: 'Guatemala', + code: 320, + alpha2: 'GT', + alpha3: 'GTM', + nationality: 'Guatemalan', + }, + { + name: 'Guernsey', + code: 831, + alpha2: 'GG', + alpha3: 'GGY', + nationality: 'Channel Islander', + }, + { + name: 'Guinea', + code: 324, + alpha2: 'GN', + alpha3: 'GIN', + nationality: 'Guinean', + }, + { + name: 'Guinea-Bissau', + code: 624, + alpha2: 'GW', + alpha3: 'GNB', + nationality: 'Bissau-Guinean', + }, + { + name: 'Guyana', + code: 328, + alpha2: 'GY', + alpha3: 'GUY', + nationality: 'Guyanese', + }, + { + name: 'Haiti', + code: 332, + alpha2: 'HT', + alpha3: 'HTI', + nationality: 'Haitian', + }, + { + name: 'Heard Island and McDonald Islands', + code: 334, + alpha2: 'HM', + alpha3: 'HMD', + nationality: 'Heard Islander, McDonald Islander', + }, + { + name: 'Vatican City State', + code: 336, + alpha2: 'VA', + alpha3: 'VAT', + nationality: 'Vatican', + }, + { + name: 'Honduras', + code: 340, + alpha2: 'HN', + alpha3: 'HND', + nationality: 'Honduran', + }, + { + name: 'Hong Kong', + code: 344, + alpha2: 'HK', + alpha3: 'HKG', + nationality: 'Hongkonger, Hong Konger, Hong Kongese', + }, + { + name: 'Hungary', + code: 348, + alpha2: 'HU', + alpha3: 'HUN', + nationality: 'Hungarian, Magyar', + }, + { + name: 'Iceland', + code: 352, + alpha2: 'IS', + alpha3: 'ISL', + nationality: 'Icelandic', + }, + { + name: 'India', + code: 356, + alpha2: 'IN', + alpha3: 'IND', + nationality: 'Indian', + }, + { + name: 'Indonesia', + code: 360, + alpha2: 'ID', + alpha3: 'IDN', + nationality: 'Indonesian', + }, + { + name: 'Iran', + code: 364, + alpha2: 'IR', + alpha3: 'IRN', + nationality: 'Iranian, Persian', + }, + { + name: 'Iraq', + code: 368, + alpha2: 'IQ', + alpha3: 'IRQ', + nationality: 'Iraqi', + }, + { + name: 'Ireland', + code: 372, + alpha2: 'IE', + alpha3: 'IRL', + nationality: 'Irish', + }, + { + name: 'Isle of Man', + code: 833, + alpha2: 'IM', + alpha3: 'IMN', + nationality: 'Manx', + }, + { + name: 'Israel', + code: 376, + alpha2: 'IL', + alpha3: 'ISR', + nationality: 'Israeli', + }, + { + name: 'Italy', + code: 380, + alpha2: 'IT', + alpha3: 'ITA', + nationality: 'Italian', + }, + { + name: 'Jamaica', + code: 388, + alpha2: 'JM', + alpha3: 'JAM', + nationality: 'Jamaican', + }, + { + name: 'Japan', + code: 392, + alpha2: 'JP', + alpha3: 'JPN', + nationality: 'Japanese', + }, + { + name: 'Jersey', + code: 832, + alpha2: 'JE', + alpha3: 'JEY', + nationality: 'Channel Island', + }, + { + name: 'Jordan', + code: 400, + alpha2: 'JO', + alpha3: 'JOR', + nationality: 'Jordanian', + }, + { + name: 'Kazakhstan', + code: 398, + alpha2: 'KZ', + alpha3: 'KAZ', + nationality: 'Kazakhstani, Kazakh', + }, + { + name: 'Kenya', + code: 404, + alpha2: 'KE', + alpha3: 'KEN', + nationality: 'Kenyan', + }, + { + name: 'Kiribati', + code: 296, + alpha2: 'KI', + alpha3: 'KIR', + nationality: 'I-Kiribati', + }, + { + name: "Korea (Democratic People's Republic of)", + alias: 'North Korea', + code: 408, + alpha2: 'KP', + alpha3: 'PRK', + nationality: 'North Korean', + }, + { + name: 'Korea (Republic of)', + alias: 'South Korea', + code: 410, + alpha2: 'KR', + alpha3: 'KOR', + nationality: 'South Korean', + }, + { + name: 'Republic of Kosovo', + alias: 'Kosovo', + code: 383, + alpha2: 'XK', + alpha3: 'UNK', + nationality: 'Kosovan', + }, + { + name: 'Kuwait', + code: 414, + alpha2: 'KW', + alpha3: 'KWT', + nationality: 'Kuwaiti', + }, + { + name: 'Kyrgyzstan', + code: 417, + alpha2: 'KG', + alpha3: 'KGZ', + nationality: 'Kyrgyzstani, Kyrgyz, Kirgiz, Kirghiz', + }, + { + name: 'Lao People\'s Democratic Republic', + alias: 'Laos', + code: 418, + alpha2: 'LA', + alpha3: 'LAO', + nationality: 'Lao, Laotian', + }, + { + name: 'Latvia', + code: 428, + alpha2: 'LV', + alpha3: 'LVA', + nationality: 'Latvian', + }, + { + name: 'Lebanon', + code: 422, + alpha2: 'LB', + alpha3: 'LBN', + nationality: 'Lebanese', + }, + { + name: 'Lesotho', + code: 426, + alpha2: 'LS', + alpha3: 'LSO', + nationality: 'Basotho', + }, + { + name: 'Liberia', + code: 430, + alpha2: 'LR', + alpha3: 'LBR', + nationality: 'Liberian', + }, + { + name: 'Libya', + code: 434, + alpha2: 'LY', + alpha3: 'LBY', + nationality: 'Libyan', + }, + { + name: 'Liechtenstein', + code: 438, + alpha2: 'LI', + alpha3: 'LIE', + nationality: 'Liechtenstein', + }, + { + name: 'Lithuania', + code: 440, + alpha2: 'LT', + alpha3: 'LTU', + nationality: 'Lithuanian', + }, + { + name: 'Luxembourg', + code: 442, + alpha2: 'LU', + alpha3: 'LUX', + nationality: 'Luxembourg, Luxembourgish', + }, + { + name: 'Macao', + code: 446, + alpha2: 'MO', + alpha3: 'MAC', + nationality: 'Macanese, Chinese', + priority: 0, + }, + { + name: 'Macedonia (the former Yugoslav Republic of)', + alias: 'Macedonia', + code: 807, + alpha2: 'MK', + alpha3: 'MKD', + nationality: 'Macedonian', + }, + { + name: 'Madagascar', + code: 450, + alpha2: 'MG', + alpha3: 'MDG', + nationality: 'Malagasy', + }, + { + name: 'Malawi', + code: 454, + alpha2: 'MW', + alpha3: 'MWI', + nationality: 'Malawian', + }, + { + name: 'Malaysia', + code: 458, + alpha2: 'MY', + alpha3: 'MYS', + nationality: 'Malaysian', + }, + { + name: 'Maldives', + code: 462, + alpha2: 'MV', + alpha3: 'MDV', + nationality: 'Maldivian', + }, + { + name: 'Mali', + code: 466, + alpha2: 'ML', + alpha3: 'MLI', + nationality: 'Malian, Malinese', + }, + { + name: 'Malta', + code: 470, + alpha2: 'MT', + alpha3: 'MLT', + nationality: 'Maltese', + }, + { + name: 'Marshall Islands', + code: 584, + alpha2: 'MH', + alpha3: 'MHL', + nationality: 'Marshallese', + }, + { + name: 'Martinique', + code: 474, + alpha2: 'MQ', + alpha3: 'MTQ', + nationality: 'Martiniquais, Martinican', + }, + { + name: 'Mauritania', + code: 478, + alpha2: 'MR', + alpha3: 'MRT', + nationality: 'Mauritanian', + }, + { + name: 'Mauritius', + code: 480, + alpha2: 'MU', + alpha3: 'MUS', + nationality: 'Mauritian', + }, + { + name: 'Mayotte', + code: 175, + alpha2: 'YT', + alpha3: 'MYT', + nationality: 'Mahoran', + }, + { + name: 'Mexico', + code: 484, + alpha2: 'MX', + alpha3: 'MEX', + nationality: 'Mexican', + }, + { + name: 'Micronesia (Federated States of)', + alias: 'Micronesia', + code: 583, + alpha2: 'FM', + alpha3: 'FSM', + nationality: 'Micronesian', + }, + { + name: 'Moldova (Republic of)', + alias: 'Moldova', + code: 498, + alpha2: 'MD', + alpha3: 'MDA', + nationality: 'Moldovan', + }, + { + name: 'Monaco', + code: 492, + alpha2: 'MC', + alpha3: 'MCO', + nationality: 'Monégasque, Monacan', + }, + { + name: 'Mongolia', + code: 496, + alpha2: 'MN', + alpha3: 'MNG', + nationality: 'Mongolian', + }, + { + name: 'Montenegro', + code: 499, + alpha2: 'ME', + alpha3: 'MNE', + nationality: 'Montenegrin', + }, + { + name: 'Montserrat', + code: 500, + alpha2: 'MS', + alpha3: 'MSR', + nationality: 'Montserratian', + }, + { + name: 'Morocco', + code: 504, + alpha2: 'MA', + alpha3: 'MAR', + nationality: 'Moroccan', + }, + { + name: 'Mozambique', + code: 508, + alpha2: 'MZ', + alpha3: 'MOZ', + nationality: 'Mozambican', + }, + { + name: 'Myanmar', + code: 104, + alpha2: 'MM', + alpha3: 'MMR', + nationality: 'Burmese', + }, + { + name: 'Namibia', + code: 516, + alpha2: 'NA', + alpha3: 'NAM', + nationality: 'Namibian', + }, + { + name: 'Nauru', + code: 520, + alpha2: 'NR', + alpha3: 'NRU', + nationality: 'Nauruan', + }, + { + name: 'Nepal', + code: 524, + alpha2: 'NP', + alpha3: 'NPL', + nationality: 'Nepali, Nepalese', + }, + { + name: 'Netherlands', + code: 528, + alpha2: 'NL', + alpha3: 'NLD', + nationality: 'Dutch', + }, + { + name: 'New Caledonia', + code: 540, + alpha2: 'NC', + alpha3: 'NCL', + nationality: 'New Caledonian', + }, + { + name: 'New Zealand', + code: 554, + alpha2: 'NZ', + alpha3: 'NZL', + nationality: 'New Zealander, Kiwi', + }, + { + name: 'Nicaragua', + code: 558, + alpha2: 'NI', + alpha3: 'NIC', + nationality: 'Nicaraguan', + }, + { + name: 'Niger', + code: 562, + alpha2: 'NE', + alpha3: 'NER', + nationality: 'Nigerien', + }, + { + name: 'Nigeria', + code: 566, + alpha2: 'NG', + alpha3: 'NGA', + nationality: 'Nigerian', + }, + { + name: 'Niue', + code: 570, + alpha2: 'NU', + alpha3: 'NIU', + nationality: 'Niuean', + }, + { + name: 'Norfolk Island', + code: 574, + alpha2: 'NF', + alpha3: 'NFK', + nationality: 'Norfolk Islander', + }, + { + name: 'Northern Mariana Islands', + code: 580, + alpha2: 'MP', + alpha3: 'MNP', + nationality: 'Northern Marianan', + }, + { + name: 'Norway', + code: 578, + alpha2: 'NO', + alpha3: 'NOR', + nationality: 'Norwegian', + }, + { + name: 'Oman', + code: 512, + alpha2: 'OM', + alpha3: 'OMN', + nationality: 'Omani', + }, + { + name: 'Pakistan', + code: 586, + alpha2: 'PK', + alpha3: 'PAK', + nationality: 'Pakistani', + }, + { + name: 'Palau', + code: 585, + alpha2: 'PW', + alpha3: 'PLW', + nationality: 'Palauan', + }, + { + name: 'Palestine, State of', + alias: 'Palestine', + code: 275, + alpha2: 'PS', + alpha3: 'PSE', + nationality: 'Palestinian', + }, + { + name: 'Panama', + code: 591, + alpha2: 'PA', + alpha3: 'PAN', + nationality: 'Panamanian', + }, + { + name: 'Papua New Guinea', + code: 598, + alpha2: 'PG', + alpha3: 'PNG', + nationality: 'Papua New Guinean, Papuan', + }, + { + name: 'Paraguay', + code: 600, + alpha2: 'PY', + alpha3: 'PRY', + nationality: 'Paraguayan', + }, + { + name: 'Peru', + code: 604, + alpha2: 'PE', + alpha3: 'PER', + nationality: 'Peruvian', + }, + { + name: 'Philippines', + code: 608, + alpha2: 'PH', + alpha3: 'PHL', + nationality: 'Philippine, Filipino', + }, + { + name: 'Pitcairn', + code: 612, + alpha2: 'PN', + alpha3: 'PCN', + nationality: 'Pitcairn Island', + }, + { + name: 'Poland', + code: 616, + alpha2: 'PL', + alpha3: 'POL', + nationality: 'Polish', + }, + { + name: 'Portugal', + code: 620, + alpha2: 'PT', + alpha3: 'PRT', + nationality: 'Portuguese', + }, + { + name: 'Puerto Rico', + code: 630, + alpha2: 'PR', + alpha3: 'PRI', + nationality: 'Puerto Rican', + }, + { + name: 'Qatar', + code: 634, + alpha2: 'QA', + alpha3: 'QAT', + nationality: 'Qatari', + }, + { + name: 'Réunion', + code: 638, + alpha2: 'RE', + alpha3: 'REU', + nationality: 'Réunionese, Réunionnais', + }, + { + name: 'Romania', + code: 642, + alpha2: 'RO', + alpha3: 'ROU', + nationality: 'Romanian', + }, + { + name: 'Russian Federation', + alias: 'Russia', + code: 643, + alpha2: 'RU', + alpha3: 'RUS', + nationality: 'Russian', + }, + { + name: 'Rwanda', + code: 646, + alpha2: 'RW', + alpha3: 'RWA', + nationality: 'Rwandan', + }, + { + name: 'Saint Barthélemy', + code: 652, + alpha2: 'BL', + alpha3: 'BLM', + nationality: 'Barthélemois', + }, + { + name: 'Saint Helena, Ascension and Tristan da Cunha', + code: 654, + alpha2: 'SH', + alpha3: 'SHN', + nationality: 'Saint Helenian', + }, + { + name: 'Saint Kitts and Nevis', + code: 659, + alpha2: 'KN', + alpha3: 'KNA', + nationality: 'Kittitian or Nevisian', + }, + { + name: 'Saint Lucia', + code: 662, + alpha2: 'LC', + alpha3: 'LCA', + nationality: 'Saint Lucian', + }, + { + name: 'Saint Martin (French part)', + alias: 'Saint Martin', + code: 663, + alpha2: 'MF', + alpha3: 'MAF', + nationality: 'Saint-Martinoise', + }, + { + name: 'Saint Pierre and Miquelon', + code: 666, + alpha2: 'PM', + alpha3: 'SPM', + nationality: 'Saint-Pierrais or Miquelonnais', + }, + { + name: 'Saint Vincent and the Grenadines', + code: 670, + alpha2: 'VC', + alpha3: 'VCT', + nationality: 'Saint Vincentian, Vincentian', + }, + { + name: 'Samoa', + code: 882, + alpha2: 'WS', + alpha3: 'WSM', + nationality: 'Samoan', + }, + { + name: 'San Marino', + code: 674, + alpha2: 'SM', + alpha3: 'SMR', + nationality: 'Sammarinese', + }, + { + name: 'Sao Tome and Principe', + code: 678, + alpha2: 'ST', + alpha3: 'STP', + nationality: 'São Toméan', + }, + { + name: 'Saudi Arabia', + code: 682, + alpha2: 'SA', + alpha3: 'SAU', + nationality: 'Saudi, Saudi Arabian', + }, + { + name: 'Senegal', + code: 686, + alpha2: 'SN', + alpha3: 'SEN', + nationality: 'Senegalese', + }, + { + name: 'Serbia', + code: 688, + alpha2: 'RS', + alpha3: 'SRB', + nationality: 'Serbian', + }, + { + name: 'Seychelles', + code: 690, + alpha2: 'SC', + alpha3: 'SYC', + nationality: 'Seychellois', + }, + { + name: 'Sierra Leone', + code: 694, + alpha2: 'SL', + alpha3: 'SLE', + nationality: 'Sierra Leonean', + }, + { + name: 'Singapore', + code: 702, + alpha2: 'SG', + alpha3: 'SGP', + nationality: 'Singaporean', + }, + { + name: 'Sint Maarten (Dutch part)', + alias: 'Sint Maarten', + code: 534, + alpha2: 'SX', + alpha3: 'SXM', + nationality: 'Sint Maarten', + }, + { + name: 'Slovakia', + code: 703, + alpha2: 'SK', + alpha3: 'SVK', + nationality: 'Slovak', + }, + { + name: 'Slovenia', + code: 705, + alpha2: 'SI', + alpha3: 'SVN', + nationality: 'Slovenian, Slovene', + }, + { + name: 'Solomon Islands', + code: 90, + alpha2: 'SB', + alpha3: 'SLB', + nationality: 'Solomon Island', + }, + { + name: 'Somalia', + code: 706, + alpha2: 'SO', + alpha3: 'SOM', + nationality: 'Somali, Somalian', + }, + { + name: 'South Africa', + code: 710, + alpha2: 'ZA', + alpha3: 'ZAF', + nationality: 'South African', + }, + { + name: 'South Georgia and the South Sandwich Islands', + code: 239, + alpha2: 'GS', + alpha3: 'SGS', + nationality: 'South Georgia or South Sandwich Islands', + }, + { + name: 'South Sudan', + code: 728, + alpha2: 'SS', + alpha3: 'SSD', + nationality: 'South Sudanese', + }, + { + name: 'Spain', + code: 724, + alpha2: 'ES', + alpha3: 'ESP', + nationality: 'Spanish', + }, + { + name: 'Sri Lanka', + code: 144, + alpha2: 'LK', + alpha3: 'LKA', + nationality: 'Sri Lankan', + }, + { + name: 'Sudan', + code: 729, + alpha2: 'SD', + alpha3: 'SDN', + nationality: 'Sudanese', + }, + { + name: 'Suriname', + code: 740, + alpha2: 'SR', + alpha3: 'SUR', + nationality: 'Surinamese', + }, + { + name: 'Svalbard and Jan Mayen', + code: 744, + alpha2: 'SJ', + alpha3: 'SJM', + nationality: 'Svalbard', + }, + { + name: 'Swaziland', + code: 748, + alpha2: 'SZ', + alpha3: 'SWZ', + nationality: 'Swazi', + }, + { + name: 'Sweden', + code: 752, + alpha2: 'SE', + alpha3: 'SWE', + nationality: 'Swedish', + }, + { + name: 'Switzerland', + code: 756, + alpha2: 'CH', + alpha3: 'CHE', + nationality: 'Swiss', + }, + { + name: 'Syrian Arab Republic', + alias: 'Syria', + code: 760, + alpha2: 'SY', + alpha3: 'SYR', + nationality: 'Syrian', + }, + { + name: 'Taiwan, Province of China', + alias: 'Taiwan', + code: 158, + alpha2: 'TW', + alpha3: 'TWN', + nationality: 'Chinese, Taiwanese', + priority: 0, + }, + { + name: 'Tajikistan', + code: 762, + alpha2: 'TJ', + alpha3: 'TJK', + nationality: 'Tajikistani', + }, + { + name: 'Tanzania, United Republic of', + alias: 'Tanzania', + code: 834, + alpha2: 'TZ', + alpha3: 'TZA', + nationality: 'Tanzanian', + }, + { + name: 'Thailand', + code: 764, + alpha2: 'TH', + alpha3: 'THA', + nationality: 'Thai', + }, + { + name: 'Timor-Leste', + code: 626, + alpha2: 'TL', + alpha3: 'TLS', + nationality: 'Timorese', + }, + { + name: 'Togo', + code: 768, + alpha2: 'TG', + alpha3: 'TGO', + nationality: 'Togolese', + }, + { + name: 'Tokelau', + code: 772, + alpha2: 'TK', + alpha3: 'TKL', + nationality: 'Tokelauan', + }, + { + name: 'Tonga', + code: 776, + alpha2: 'TO', + alpha3: 'TON', + nationality: 'Tongan', + }, + { + name: 'Trinidad and Tobago', + code: 780, + alpha2: 'TT', + alpha3: 'TTO', + nationality: 'Trinidadian or Tobagonian', + }, + { + name: 'Tunisia', + code: 788, + alpha2: 'TN', + alpha3: 'TUN', + nationality: 'Tunisian', + }, + { + name: 'Turkey', + code: 792, + alpha2: 'TR', + alpha3: 'TUR', + nationality: 'Turkish', + }, + { + name: 'Turkmenistan', + code: 795, + alpha2: 'TM', + alpha3: 'TKM', + nationality: 'Turkmen', + }, + { + name: 'Turks and Caicos Islands', + code: 796, + alpha2: 'TC', + alpha3: 'TCA', + nationality: 'Turks and Caicos Island', + }, + { + name: 'Tuvalu', + code: 798, + alpha2: 'TV', + alpha3: 'TUV', + nationality: 'Tuvaluan', + }, + { + name: 'Uganda', + code: 800, + alpha2: 'UG', + alpha3: 'UGA', + nationality: 'Ugandan', + }, + { + name: 'Ukraine', + code: 804, + alpha2: 'UA', + alpha3: 'UKR', + nationality: 'Ukrainian', + }, + { + name: 'United Arab Emirates', + code: 784, + alpha2: 'AE', + alpha3: 'ARE', + nationality: 'Emirati, Emirian, Emiri', + }, + { + name: 'United Kingdom of Great Britain and Northern Ireland', + alias: 'United Kingdom', + code: 826, + alpha2: 'GB', + alpha3: 'GBR', + nationality: 'British, English', + }, + { + name: 'United States Minor Outlying Islands', + code: 581, + alpha2: 'UM', + alpha3: 'UMI', + nationality: 'American', + priority: 0, + }, + { + name: 'United States of America', + alias: 'United States', + code: 840, + alpha2: 'US', + alpha3: 'USA', + nationality: 'American', + priority: 1, + }, + { + name: 'Uruguay', + code: 858, + alpha2: 'UY', + alpha3: 'URY', + nationality: 'Uruguayan', + }, + { + name: 'Uzbekistan', + code: 860, + alpha2: 'UZ', + alpha3: 'UZB', + nationality: 'Uzbekistani, Uzbek', + }, + { + name: 'Vanuatu', + code: 548, + alpha2: 'VU', + alpha3: 'VUT', + nationality: 'Ni-Vanuatu, Vanuatuan', + }, + { + name: 'Venezuela (Bolivarian Republic of)', + alias: 'Venezuela', + code: 862, + alpha2: 'VE', + alpha3: 'VEN', + nationality: 'Venezuelan', + }, + { + name: 'Vietnam', + code: 704, + alpha2: 'VN', + alpha3: 'VNM', + nationality: 'Vietnamese', + }, + { + name: 'Virgin Islands (British)', + code: 92, + alpha2: 'VG', + alpha3: 'VGB', + nationality: 'British Virgin Island', + }, + { + name: 'Virgin Islands (U.S.)', + code: 850, + alpha2: 'VI', + alpha3: 'VIR', + nationality: 'U.S. Virgin Island', + }, + { + name: 'Wallis and Futuna', + code: 876, + alpha2: 'WF', + alpha3: 'WLF', + nationality: 'Wallis and Futuna, Wallisian or Futunan', + }, + { + name: 'Western Sahara', + code: 732, + alpha2: 'EH', + alpha3: 'ESH', + nationality: 'Sahrawi, Sahrawian, Sahraouian', + }, + { + name: 'Yemen', + code: 887, + alpha2: 'YE', + alpha3: 'YEM', + nationality: 'Yemeni', + }, + { + name: 'Zambia', + code: 894, + alpha2: 'ZM', + alpha3: 'ZMB', + nationality: 'Zambian', + }, + { + name: 'Zimbabwe', + code: 716, + alpha2: 'ZW', + alpha3: 'ZWE', + nationality: 'Zimbabwean', + }, ]; exports.seed = knex => knex('countries') - .then(async () => upsert('countries', countries, 'alpha2', knex)); + .then(async () => upsert('countries', countries, 'alpha2', knex)); diff --git a/src/actors.js b/src/actors.js index b5fe37b7..508dac36 100644 --- a/src/actors.js +++ b/src/actors.js @@ -20,11 +20,56 @@ const slugify = require('./utils/slugify'); const capitalize = require('./utils/capitalize'); const resolvePlace = require('./utils/resolve-place'); +const hairColors = { + 'jet-black': 'black', + 'red-head': 'red', + 'soft-black': 'black', + black: 'black', + blonde: 'blonde', + blondie: 'blonde', + brown: 'brown', + brunette: 'brown', + fair: 'blonde', + raven: 'black', + red: 'red', + redhead: 'red', +}; + +const eyeColors = { + blue: 'blue', + brown: 'brown', + dark: 'brown', + gray: 'gray', + green: 'green', + grey: 'gray', + hazel: 'hazel', +}; + +const ethnicities = { + 'african american': 'black', + 'african-american': 'black', + 'native american': 'native american', + african: 'black', + aravic: 'arabic', + asian: 'asian', + black: 'black', + caucasian: 'white', + european: 'white', + hispanic: 'latina', + indian: 'indian', + japanese: 'japanese', + latina: 'latina', + latino: 'latino', + white: 'white', +}; + function getMostFrequent(items) { const { mostFrequent } = items.reduce((acc, item) => { - acc.counts[item] = (acc.counts[item] || 0) + 1; + const slug = slugify(item); - if (!acc.mostFrequent || acc.counts[item] > acc.counts[acc.mostFrequent]) { + acc.counts[slug] = (acc.counts[slug] || 0) + 1; + + if (!acc.mostFrequent || acc.counts[slug] > acc.counts[slugify(acc.mostFrequent)]) { acc.mostFrequent = item; } @@ -144,9 +189,11 @@ async function curateProfile(profile) { curatedProfile.description = profile.description?.trim() || null; curatedProfile.nationality = profile.nationality?.trim() || null; // used to derive country when country not available - curatedProfile.ethnicity = profile.ethnicity?.trim() || null; - curatedProfile.hair = profile.hair?.trim() || null; - curatedProfile.eyes = profile.eyes?.trim() || null; + + curatedProfile.ethnicity = ethnicities[profile.ethnicity?.trim().toLowerCase()] || null; + curatedProfile.hair = hairColors[profile.hair?.trim().toLowerCase()] || null; + curatedProfile.eyes = eyeColors[profile.eyes?.trim().toLowerCase()] || null; + curatedProfile.tattoos = profile.tattoos?.trim() || null; curatedProfile.piercings = profile.piercings?.trim() || null; @@ -211,6 +258,10 @@ async function curateProfile(profile) { curatedProfile.releases = toBaseReleases(profile.releases); + if (profile.ethnicity && !curatedProfile.ethnicity) logger.warn(`Unrecognized ethnicity returned by '${profile.site?.name || profile.network?.slug}' scraper: ${profile.ethnicity}`); + if (profile.hair && !curatedProfile.hair) logger.warn(`Unrecognized hair color returned by '${profile.site?.name || profile.network?.slug}' scraper: ${profile.hair}`); + if (profile.eyes && !curatedProfile.eyes) logger.warn(`Unrecognized eye color returned by '${profile.site?.name || profile.network?.slug}' scraper: ${profile.eyes}`); + return curatedProfile; } catch (error) { logger.error(`Failed to curate '${profile.name}': ${error.message}`); @@ -234,15 +285,28 @@ async function interpolateProfiles(actors) { }), {}); const interpolatedProfiles = Object.entries(profilesByActorId).map(([actorId, actorProfiles]) => { + // group values from each profile const valuesByProperty = actorProfiles.reduce((acc, profile) => Object .entries(profile) .reduce((profileAcc, [property, value]) => ({ ...profileAcc, [property]: [ ...(acc[property] || []), - ...(value === null ? [] : [value]), + ...(value === null ? [] : Array.from({ length: profile.priority }, () => value)), // multiply by priority, increasing the odds of being the most frequent value ], - }), {}), {}); + }), { + // bundle location values so they can be assessed together, to ensure the most frequent city is in the most frequent state is in most frequent country + origin: [...acc.origin || [], { + ...(profile.birth_country_alpha2 && { country: profile.birth_country_alpha2 }), + ...(profile.birth_state && { state: profile.birth_state }), + ...(profile.birth_city && { city: profile.birth_city }), + }].filter(location => Object.keys(location).length > 0), + residence: [...acc.residence || [], { + ...(profile.residence_country_alpha2 && { country: profile.residence_country_alpha2 }), + ...(profile.residence_state && { state: profile.residence_state }), + ...(profile.residence_city && { city: profile.residence_city }), + }].filter(location => Object.keys(location).length > 0), + }), {}); const avatars = actorProfiles.map(profile => profile.avatar_media_id && ({ id: profile.avatar_media_id, @@ -251,39 +315,50 @@ async function interpolateProfiles(actors) { size: profile.avatar_size, })).filter(Boolean); + const mostFrequentValues = [ + 'gender', + 'ethnicity', + 'cup', + 'bust', + 'waist', + 'hip', + 'natural_boobs', + 'height', + 'hair', + 'eyes', + 'has_tattoos', + 'has_piercings', + ].reduce((acc, property) => ({ + ...acc, + [property]: getMostFrequent(valuesByProperty[property]), + }), {}); + const profile = { id: actorId, + ...mostFrequentValues, }; - profile.gender = getMostFrequent(valuesByProperty.gender); - profile.ethnicity = getMostFrequent(valuesByProperty.ethnicity.map(ethnicity => ethnicity.toLowerCase())); - profile.date_of_birth = getMostFrequentDate(valuesByProperty.date_of_birth); profile.date_of_death = getMostFrequentDate(valuesByProperty.date_of_death); - // TODO: fix city, state and country not matching - profile.birth_city = getMostFrequent(valuesByProperty.birth_city); - profile.birth_state = getMostFrequent(valuesByProperty.birth_state); - profile.birth_country_alpha2 = getMostFrequent(valuesByProperty.birth_country_alpha2); + // ensure most frequent country, city and state match up + profile.birth_country_alpha2 = getMostFrequent(valuesByProperty.origin.map(location => location.country)); + const remainingOriginCountries = valuesByProperty.origin.filter(location => location.country === profile.birth_country_alpha2); - profile.residence_city = getMostFrequent(valuesByProperty.residence_city); - profile.residence_state = getMostFrequent(valuesByProperty.residence_state); - profile.residence_country_alpha2 = getMostFrequent(valuesByProperty.residence_country_alpha2); + profile.birth_state = getMostFrequent(remainingOriginCountries.map(location => location.state)); + const remainingOriginStates = remainingOriginCountries.filter(location => !profile.birth_state || location.state === profile.birth_state); - profile.cup = getMostFrequent(valuesByProperty.cup); - profile.bust = getMostFrequent(valuesByProperty.bust); - profile.waist = getMostFrequent(valuesByProperty.waist); - profile.hip = getMostFrequent(valuesByProperty.hip); - profile.natural_boobs = getMostFrequent(valuesByProperty.natural_boobs); + profile.birth_city = getMostFrequent(remainingOriginStates.map(location => location.city)); - profile.hair = getMostFrequent(valuesByProperty.hair.map(hair => hair.toLowerCase())); - profile.eyes = getMostFrequent(valuesByProperty.eyes.map(eyes => eyes.toLowerCase())); + profile.residence_country_alpha2 = getMostFrequent(valuesByProperty.residence.map(location => location.country)); + const remainingResidenceCountries = valuesByProperty.residence.filter(location => location.country === profile.residence_country_alpha2); + + profile.residence_state = getMostFrequent(remainingResidenceCountries.map(location => location.state)); + const remainingResidenceStates = remainingResidenceCountries.filter(location => !profile.residence_state || location.state === profile.residence_state); + + profile.residence_city = getMostFrequent(remainingResidenceStates.map(location => location.city)); profile.weight = getAverage(valuesByProperty.weight); - profile.height = getMostFrequent(valuesByProperty.height); - - profile.has_tattoos = getMostFrequent(valuesByProperty.has_tattoos); - profile.has_piercings = getMostFrequent(valuesByProperty.has_piercings); profile.tattoos = getLongest(valuesByProperty.tattoos); profile.piercings = getLongest(valuesByProperty.piercings); @@ -366,38 +441,47 @@ async function upsertProfiles(profiles) { async function scrapeProfiles(actor, sources, networksBySlug, sitesBySlug) { const profiles = Promise.map(sources, async (source) => { try { + // config may group sources to try until success return await [].concat(source).reduce(async (outcome, scraperSlug) => outcome.catch(async () => { - const scraper = scrapers[scraperSlug]; - const context = { - site: sitesBySlug[scraperSlug] || null, - network: networksBySlug[scraperSlug] || sitesBySlug[scraperSlug]?.network || null, - scraper: scraperSlug, - }; + try { + const scraper = scrapers[scraperSlug]; + const context = { + site: sitesBySlug[scraperSlug] || null, + network: networksBySlug[scraperSlug] || sitesBySlug[scraperSlug]?.network || null, + scraper: scraperSlug, + }; - if (!scraper?.fetchProfile) { - logger.warn(`No profile profile scraper available for ${scraperSlug}`); - throw new Error(`No profile profile scraper available for ${scraperSlug}`); + if (!scraper?.fetchProfile) { + logger.warn(`No profile profile scraper available for ${scraperSlug}`); + throw new Error(`No profile profile scraper available for ${scraperSlug}`); + } + + if (!context.site && !context.network) { + logger.warn(`No site or network found for ${scraperSlug}`); + throw new Error(`No site or network found for ${scraperSlug}`); + } + + logger.verbose(`Searching profile for '${actor.name}' on '${scraperSlug}'`); + + const profile = await scraper.fetchProfile(actor.name, context, include); + + if (!profile || typeof profile === 'number') { // scraper returns HTTP code on request failure + logger.verbose(`Profile for '${actor.name}' not available on ${context.site?.name || context.network?.name || context.scraper}, scraper returned ${profile}`); + throw Object.assign(new Error(`Profile for '${actor.name}' not available on ${context.site?.name || context.network?.name || context.scraper}`), { code: 'PROFILE_NOT_AVAILABLE' }); + } + + return { + ...actor, + ...profile, + ...context, + }; + } catch (error) { + if (error.code !== 'PROFILE_NOT_AVAILABLE') { + logger.error(`Failed to fetch profile for '${actor.name}' from '${scraperSlug}': ${error.message}`); + } + + throw error; } - - if (!context.site && !context.network) { - logger.warn(`No site or network found for ${scraperSlug}`); - throw new Error(`No site or network found for ${scraperSlug}`); - } - - logger.verbose(`Searching profile for '${actor.name}' on '${scraperSlug}'`); - - const profile = await scraper.fetchProfile(actor.name, context, include); - - if (!profile || typeof profile === 'number') { // scraper returns HTTP code on request failure - logger.verbose(`Profile for '${actor.name}' not available on ${scraperSlug}, scraper returned ${profile}`); - throw Object.assign(new Error(`Profile for '${actor.name}' not available on ${scraperSlug}`), { code: 'PROFILE_NOT_AVAILABLE' }); - } - - return { - ...actor, - ...profile, - ...context, - }; }), Promise.reject(new Error())); } catch (error) { if (error.code !== 'PROFILE_NOT_AVAILABLE') { diff --git a/src/scrapers/julesjordan.js b/src/scrapers/julesjordan.js index 90b66cf2..fbb33af4 100644 --- a/src/scrapers/julesjordan.js +++ b/src/scrapers/julesjordan.js @@ -119,7 +119,6 @@ async function getPhotos(entryId, site, type = 'highres', page = 1) { } function getEntryId(html) { - // TODO: not working for https://www.julesjordan.com/members/scenes/jada-stevens-anal-ass-gets-oiled-up-for-james-deens-cock_vids.html const entryId = html.match(/showtagform\((\d+)\)/); if (entryId) { diff --git a/src/scrapers/legalporno.js b/src/scrapers/legalporno.js index eafe2481..acc2b24f 100644 --- a/src/scrapers/legalporno.js +++ b/src/scrapers/legalporno.js @@ -9,7 +9,7 @@ const slugify = require('../utils/slugify'); function extractTitle(originalTitle) { const titleComponents = originalTitle.split(' '); - const sceneIdMatch = titleComponents.slice(-1)[0].match(/(AB|AF|GP|SZ|IV|GIO|RS|TW|MA|FM|SAL|NR|AA|GL|BZ|FS|KS|OT)\d+/); // detect studio prefixes + const sceneIdMatch = titleComponents.slice(-1)[0].match(/(AB|AF|GP|SZ|IV|GIO|RS|TW|MA|FM|SAL|NR|AA|GL|BZ|FS|KS|OTS)\d+/); // detect studio prefixes const shootId = sceneIdMatch ? sceneIdMatch[0] : null; const title = sceneIdMatch ? titleComponents.slice(0, -1).join(' ') : originalTitle; diff --git a/src/utils/slugify.js b/src/utils/slugify.js index a14c76c5..c1e2f5c3 100644 --- a/src/utils/slugify.js +++ b/src/utils/slugify.js @@ -4,7 +4,7 @@ function slugify(string, delimiter = '-', { encode = false, limit = 1000, } = {}) { - if (!string) { + if (!string || typeof string !== 'string') { return string; }