// Package countries - ISO 3166 (ISO3166-1, ISO3166, Digit, Alpha-2 and Alpha-3) countries codes and names (on eng and rus), ISO 4217 currency designators, ITU-T E.164 IDD calling phone codes, countries capitals, UN M.49 regions codes, ccTLD countries domains, IOC/NOC and FIFA letters codes, VERY FAST, NO maps[], NO slices[], NO external links/files/data, NO interface{}, NO specific dependencies, Databases compatible, Emoji countries flags and currencies support, full support ISO-3166-1, ISO-4217, ITU-T E.164, Unicode CLDR and ccTLD standarts. Full support ISO-3166-1, ISO-4217, ITU-T E.164, Unicode CLDR and ccTLD standarts.
/*
Package countries - ISO 3166 (ISO3166-1, ISO3166, Digit, Alpha-2 and Alpha-3) countries codes and names (on eng and rus), ISO 4217 currency designators, ITU-T E.164 IDD calling phone codes, countries capitals, UN M.49 regions codes, ccTLD countries domains, IOC/NOC and FIFA letters codes, VERY FAST, NO maps[], NO slices[], NO external links/files/data, NO interface{}, NO specific dependencies, Databases compatible, Emoji countries flags and currencies support, full support ISO-3166-1, ISO-4217, ITU-T E.164, Unicode CLDR and ccTLD standarts.
Full support ISO-3166-1, ISO-4217, ITU-T E.164, Unicode CLDR and ccTLD standarts.

Usage

func main() {
	countryJapan := countries.Japan
	fmt.Printf("Country name in english: %v\n", countryJapan)                   // Japan
	fmt.Printf("Country name in russian: %v\n", countryJapan.StringRus())       // Япония
	fmt.Printf("Country ISO-3166 digit code: %d\n", countryJapan)               // 392
	fmt.Printf("Country ISO-3166 Alpha-2 code: %v\n", countryJapan.Alpha2())    // JP
	fmt.Printf("Country ISO-3166 Alpha-3 code: %v\n", countryJapan.Alpha3())    // JPN
	fmt.Printf("Country IOC/NOC code: %v\n", countryJapan.IOC())                // JPN
	fmt.Printf("Country FIFA code: %v\n", countryJapan.FIFA())                  // JPN
	fmt.Printf("Country Capital: %v\n", countryJapan.Capital())                 // Tokyo
	fmt.Printf("Country ITU-T E.164 call code: %v\n", countryJapan.CallCodes()) // +81
	fmt.Printf("Country ccTLD domain: %v\n", countryJapan.Domain())             // .jp
	fmt.Printf("Country UN M.49 region name: %v\n", countryJapan.Region())      // Asia
	fmt.Printf("Country UN M.49 region code: %d\n", countryJapan.Region())      // 142
	fmt.Printf("Country emoji/flag: %v\n", countryJapan.Emoji())                // 🇯🇵
	fmt.Printf("Country Subdivisions: %v\n", countryJapan.Subdivisions())       // Hokkaido Aomori Iwate Miyagi Akita Yamagata Fukushima Ibaraki Tochigi Gunma Saitama Chiba Tokyo Kanagawa Niigata Toyama Ishikawa Fukui Yamanashi Nagano Gifu Shizuoka Aichi Mie Shiga Kyoto Osaka Hyogo Nara Wakayama Tottori Shimane Okayama Hiroshima Yamaguchi Tokushima Kagawa Ehime Kochi Fukuoka Saga Nagasaki Kumamoto Oita Miyazaki Kagoshima Okinawa

	currencyJapan := countryJapan.Currency()
	fmt.Printf("Country ISO-4217 Currency name in english: %v\n", currencyJapan)           // Yen
	fmt.Printf("Country ISO-4217 Currency digit code: %d\n", currencyJapan)                // 392
	fmt.Printf("Country ISO-4217 Currency Alpha code: %v\n", currencyJapan.Alpha())        // JPY
	fmt.Printf("Country Currency emoji: %v\n", currencyJapan.Emoji())                      // 💴
	fmt.Printf("Country of Currency %v: %v\n", currencyJapan, currencyJapan.Countries()) // Japan

	// OR you can alternative use:
	japanInfo := countries.Japan.Info()
	fmt.Printf("Country name in english: %v\n", japanInfo.Name)                          // Japan
	fmt.Printf("Country ISO-3166 digit code: %d\n", japanInfo.Code)                      // 392
	fmt.Printf("Country ISO-3166 Alpha-2 code: %v\n", japanInfo.Alpha2)                  // JP
	fmt.Printf("Country ISO-3166 Alpha-3 code: %v\n", japanInfo.Alpha3)                  // JPN
	fmt.Printf("Country IOC/NOC code: %v\n", japanInfo.IOC)                              // JPN
	fmt.Printf("Country FIFA code: %v\n", japanInfo.FIFA)                                // JPN
	fmt.Printf("Country Capital: %v\n", japanInfo.Capital)                               // Tokyo
	fmt.Printf("Country ITU-T E.164 call code: %v\n", japanInfo.CallCodes)               // +81
	fmt.Printf("Country ccTLD domain: %v\n", japanInfo.Domain)                           // .jp
	fmt.Printf("Country UN M.49 region name: %v\n", japanInfo.Region)                    // Asia
	fmt.Printf("Country UN M.49 region code: %d\n", japanInfo.Region)                    // 142
	fmt.Printf("Country emoji/flag: %v\n", japanInfo.Emoji)                              // 🇯🇵
	fmt.Printf("Country ISO-4217 Currency name in english: %v\n", japanInfo.Currency)    // Yen
	fmt.Printf("Country ISO-4217 Currency digit code: %d\n", japanInfo.Currency)         // 392
	fmt.Printf("Country ISO-4217 Currency Alpha code: %v\n", japanInfo.Currency.Alpha()) // JPY
	fmt.Printf("Country Subdivisions: %v\n", japanInfo.Subdivisions)                     // Hokkaido Aomori Iwate Miyagi Akita Yamagata Fukushima Ibaraki Tochigi Gunma Saitama Chiba Tokyo Kanagawa Niigata Toyama Ishikawa Fukui Yamanashi Nagano Gifu Shizuoka Aichi Mie Shiga Kyoto Osaka Hyogo Nara Wakayama Tottori Shimane Okayama Hiroshima Yamaguchi Tokushima Kagawa Ehime Kochi Fukuoka Saga Nagasaki Kumamoto Oita Miyazaki Kagoshima Okinawa

	// Detection usage
	// Detect by name
	country := countries.ByName("angola")
	fmt.Printf("Country name in english: %v\n", country)                // Angola
	fmt.Printf("Country ISO-3166 digit code: %d\n", country)            // 24
	fmt.Printf("Country ISO-3166 Alpha-2 code: %v\n", country.Alpha2()) // AO
	fmt.Printf("Country ISO-3166 Alpha-3 code: %v\n", country.Alpha3()) // AGO
	// Detect by code/numeric
	country = countries.ByNumeric(24)
	fmt.Printf("Country name in english: %v\n", country)                // Angola
	fmt.Printf("Country ISO-3166 digit code: %d\n", country)            // 24
	fmt.Printf("Country ISO-3166 Alpha-2 code: %v\n", country.Alpha2()) // AO
	fmt.Printf("Country ISO-3166 Alpha-3 code: %v\n", country.Alpha3()) // AGO

	// Comparing usage
	// Compare by code/numeric
	if countries.ByName("angola") == countries.AGO {
		fmt.Println("Yes! It's Angola!") // Yes! It's Angola!
	}
	// Compare by name
	if strings.EqualFold("angola", countries.AGO.String()) {
		fmt.Println("Yes! It's Angola!") // Yes! It's Angola!
	}

	// Database usage
	type User struct {
		gorm.Model
		Name     string
		Country  countries.CountryCode
		Currency countries.CurrencyCode
	}
	user := &User{Name: "Helen", Country: countries.Slovenia, Currency: countries.CurrencyEUR}
	db, err := gorm.Open("postgres", 500, "host=127.0.0.2 port=5432 user=usr password=1234567 dbname=db")
	if err != nil {
		panic(err)
	}
	defer db.Close()
	db.Create(user)
}

Contributing

 Welcome pull requests, bug fixes and issue reports.
 Before proposing a change, please discuss it first by raising an issue. */
// Package countries - ISO 3166 (ISO3166-1, ISO3166, Digit, Alpha-2 and Alpha-3) countries codes and names (on eng and rus), ISO 4217 currency designators, ITU-T E.164 IDD calling phone codes, countries capitals, UN M.49 regions codes, ccTLD countries domains, IOC/NOC and FIFA letters codes, VERY FAST, NO maps[], NO slices[], NO external links/files/data, NO interface{}, NO specific dependencies, Databases compatible, Emoji countries flags and currencies support, full support ISO-3166-1, ISO-4217, ITU-T E.164, Unicode CLDR and ccTLD standarts. Full support ISO-3166-1, ISO-4217, ITU-T E.164, Unicode CLDR and ccTLD standarts.
//nolint:misspell
package countries //nolint:misspell

import (
	"encoding/json"
	"fmt"
)

// CountryCode - country code (254 countries). Three codes present, for example Russia == RU == RUS == 643.
type CountryCode int64 // int64 for database/sql/driver.Valuer compatibility

// Country - all info about country
type Country struct {
	Name         string            `json:"name"`
	Alpha2       string            `json:"cca2"`
	Alpha3       string            `json:"cca3"`
	FIPS         string            `json:"fips"`
	IOC          string            `json:"ioc"`
	FIFA         string            `json:"fifa"`
	Emoji        string            `json:"emoji"`
	Code         CountryCode       `json:"code"`
	Currency     CurrencyCode      `json:"currency"`
	Capital      CapitalCode       `json:"capital"`
	CallCodes    []CallCode        `json:"callingCode"`
	Domain       DomainCode        `json:"domain"`
	Region       RegionCode        `json:"region"`
	Subdivisions []SubdivisionCode `json:"subdivisionCodes"`
}

// Typer - typer interface, provide a name of type
type Typer interface {
	Type() string
}

// Total - returns number of codes in the package, countries.Total() == len(countries.All()) but static value for performance
func Total() int {
	return 252
}

// Emoji - return a country Alpha-2 (ISO2) as Emoji flag (example "RU" as "🇷🇺")
func (c CountryCode) Emoji() string {
	iso2 := c.Alpha2()
	buf := [...]byte{240, 159, 135, 0, 240, 159, 135, 0}
	buf[3] = iso2[0] + (166 - 'A')
	buf[7] = iso2[1] + (166 - 'A')
	return string(buf[:])
}

// Emoji3 - return a country Alpha-3 (ISO3) as Emoji (example "RUS" as "🇷🇺🇸")
func (c CountryCode) Emoji3() string {
	iso3 := c.Alpha3()
	buf := [...]byte{240, 159, 135, 0, 240, 159, 135, 0, 240, 159, 135, 0}
	buf[3] = iso3[0] + (166 - 'A')
	buf[7] = iso3[1] + (166 - 'A')
	buf[11] = iso3[2] + (166 - 'A')
	return string(buf[:])
}

// Type implements Typer interface.
func (_ CountryCode) Type() string {
	return TypeCountryCode
}

// String - implements fmt.Stringer, returns a english name of country
//
//nolint:gocyclo
func (c CountryCode) String() string { //nolint:gocyclo
	switch c {
	case 8:
		return "Albania"
	case 12:
		return "Algeria"
	case 16:
		return "American Samoa"
	case 20:
		return "Andorra"
	case 24:
		return "Angola"
	case 660:
		return "Anguilla"
	case 10:
		return "Antarctica"
	case 28:
		return "Antigua and Barbuda"
	case 32:
		return "Argentina"
	case 51:
		return "Armenia"
	case 533:
		return "Aruba"
	case 36:
		return "Australia"
	case 40:
		return "Austria"
	case 31:
		return "Azerbaijan"
	case 44:
		return "Bahamas"
	case 48:
		return "Bahrain"
	case 50:
		return "Bangladesh"
	case 52:
		return "Barbados"
	case 112:
		return "Belarus"
	case 56:
		return "Belgium"
	case 84:
		return "Belize"
	case 204:
		return "Benin"
	case 60:
		return "Bermuda"
	case 64:
		return "Bhutan"
	case 68:
		return "Bolivia"
	case 70:
		return "Bosnia and Herzegovina"
	case 72:
		return "Botswana"
	case 74:
		return "Bouvet Island"
	case 76:
		return "Brazil"
	case 86:
		return "British Indian Ocean Territory"
	case 96:
		return "Brunei Darussalam"
	case 100:
		return "Bulgaria"
	case 854:
		return "Burkina Faso"
	case 108:
		return "Burundi"
	case 116:
		return "Cambodia"
	case 120:
		return "Cameroon"
	case 124:
		return "Canada"
	case 132:
		return "Cape Verde"
	case 136:
		return "Cayman Islands"
	case 140:
		return "Central African Republic"
	case 148:
		return "Chad"
	case 152:
		return "Chile"
	case 156:
		return "China"
	case 162:
		return "Christmas Island"
	case 166:
		return "Cocos (Keeling) Islands"
	case 170:
		return "Colombia"
	case 174:
		return "Comoros"
	case 178:
		return "Congo"
	case 180:
		return "Democratic Republic of the Congo"
	case 184:
		return "Cook Islands"
	case 188:
		return "Costa Rica"
	case 384:
		return "Cote d'Ivoire" // Ivory Coast
	case 191:
		return "Croatia"
	case 192:
		return "Cuba"
	case 196:
		return "Cyprus"
	case 203:
		return "Czechia"
	case 208:
		return "Denmark"
	case 262:
		return "Djibouti"
	case 212:
		return "Dominica"
	case 214:
		return "Dominican Republic"
	case 218:
		return "Ecuador"
	case 818:
		return "Egypt"
	case 222:
		return "El Salvador"
	case 226:
		return "Equatorial Guinea"
	case 232:
		return "Eritrea"
	case 233:
		return "Estonia"
	case 231:
		return "Ethiopia"
	case 234:
		return "Faroe Islands"
	case 238:
		return "Falkland Islands (Malvinas)"
	case 242:
		return "Fiji"
	case 246:
		return "Finland"
	case 250:
		return "France"
	case 254:
		return "French Guiana"
	case 258:
		return "French Polynesia"
	case 260:
		return "French Southern Territories"
	case 266:
		return "Gabon"
	case 270:
		return "Gambia"
	case 268:
		return "Georgia"
	case 276:
		return "Germany"
	case 288:
		return "Ghana"
	case 292:
		return "Gibraltar"
	case 300:
		return "Greece"
	case 304:
		return "Greenland"
	case 308:
		return "Grenada"
	case 312:
		return "Guadeloupe"
	case 316:
		return "Guam"
	case 320:
		return "Guatemala"
	case 324:
		return "Guinea"
	case 624:
		return "Guinea-Bissau"
	case 328:
		return "Guyana"
	case 332:
		return "Haiti"
	case 334:
		return "Heard Island and McDonald Islands"
	case 340:
		return "Honduras"
	case 344:
		return "Hong Kong (Special Administrative Region of China)"
	case 348:
		return "Hungary"
	case 352:
		return "Iceland"
	case 356:
		return "India"
	case 360:
		return "Indonesia"
	case 364:
		return "Iran (Islamic Republic of)"
	case 368:
		return "Iraq"
	case 372:
		return "Ireland"
	case 376:
		return "Israel"
	case 380:
		return "Italy"
	case 388:
		return "Jamaica"
	case 392:
		return "Japan"
	case 400:
		return "Jordan"
	case 398:
		return "Kazakhstan"
	case 404:
		return "Kenya"
	case 296:
		return "Kiribati"
	case 410:
		return "Republic of Korea"
	case 408:
		return "Democratic People's Republic of Korea"
	case 414:
		return "Kuwait"
	case 417:
		return "Kyrgyzstan"
	case 418:
		return "Lao People's Democratic Republic"
	case 428:
		return "Latvia"
	case 422:
		return "Lebanon"
	case 426:
		return "Lesotho"
	case 430:
		return "Liberia"
	case 434:
		return "Libyan Arab Jamahiriya"
	case 438:
		return "Liechtenstein"
	case 440:
		return "Lithuania"
	case 442:
		return "Luxembourg"
	case 446:
		return "Macau (Special Administrative Region of China)"
	case 807:
		return "North Macedonia (Republic of North Macedonia)"
	case 450:
		return "Madagascar"
	case 454:
		return "Malawi"
	case 458:
		return "Malaysia"
	case 462:
		return "Maldives"
	case 466:
		return "Mali"
	case 470:
		return "Malta"
	case 584:
		return "Marshall Islands"
	case 474:
		return "Martinique"
	case 478:
		return "Mauritania"
	case 480:
		return "Mauritius"
	case 175:
		return "Mayotte"
	case 484:
		return "Mexico"
	case 583:
		return "Micronesia (Federated States of)"
	case 498:
		return "Moldova (Republic of)"
	case 492:
		return "Monaco"
	case 496:
		return "Mongolia"
	case 500:
		return "Montserrat"
	case 504:
		return "Morocco"
	case 508:
		return "Mozambique"
	case 104:
		return "Myanmar"
	case 516:
		return "Namibia"
	case 520:
		return "Nauru"
	case 524:
		return "Nepal"
	case 528:
		return "Netherlands"
	case 530:
		return "Netherlands Antilles"
	case 540:
		return "New Caledonia"
	case 554:
		return "New Zealand"
	case 558:
		return "Nicaragua"
	case 562:
		return "Niger"
	case 566:
		return "Nigeria"
	case 570:
		return "Niue"
	case 574:
		return "Norfolk Island"
	case 580:
		return "Northern Mariana Islands"
	case 578:
		return "Norway"
	case 512:
		return "Oman"
	case 586:
		return "Pakistan"
	case 585:
		return "Palau"
	case 275:
		return "Palestinian Territory (Occupied)"
	case 591:
		return "Panama"
	case 598:
		return "Papua New Guinea"
	case 600:
		return "Paraguay"
	case 604:
		return "Peru"
	case 608:
		return "Philippines"
	case 612:
		return "Pitcairn"
	case 616:
		return "Poland"
	case 620:
		return "Portugal"
	case 630:
		return "Puerto Rico"
	case 634:
		return "Qatar"
	case 638:
		return "Reunion"
	case 642:
		return "Romania"
	case 643:
		return "Russian Federation"
	case 646:
		return "Rwanda"
	case 654:
		return "Saint Helena"
	case 659:
		return "Saint Kitts and Nevis"
	case 662:
		return "Saint Lucia"
	case 666:
		return "Saint Pierre and Miquelon"
	case 670:
		return "Saint Vincent and the Grenadines"
	case 882:
		return "Samoa"
	case 674:
		return "San Marino"
	case 678:
		return "Sao Tome and Principe"
	case 682:
		return "Saudi Arabia"
	case 686:
		return "Senegal"
	case 690:
		return "Seychelles"
	case 694:
		return "Sierra Leone"
	case 702:
		return "Singapore"
	case 703:
		return "Slovakia"
	case 705:
		return "Slovenia"
	case 90:
		return "Solomon Islands"
	case 706:
		return "Somalia"
	case 710:
		return "South Africa"
	case 239:
		return "South Georgia and The South Sandwich Islands"
	case 724:
		return "Spain"
	case 144:
		return "Sri Lanka"
	case 729:
		return "Sudan"
	case 740:
		return "Suriname"
	case 744:
		return "Svalbard and Jan Mayen Islands"
	case 748:
		return "Swaziland"
	case 752:
		return "Sweden"
	case 756:
		return "Switzerland"
	case 760:
		return "Syrian Arab Republic"
	case 158:
		return "Taiwan (Province of China)"
	case 762:
		return "Tajikistan"
	case 834:
		return "Tanzania (United Republic of)"
	case 764:
		return "Thailand"
	case 626:
		return "Timor-Leste (East Timor)"
	case 768:
		return "Togo"
	case 772:
		return "Tokelau"
	case 776:
		return "Tonga"
	case 780:
		return "Trinidad and Tobago"
	case 788:
		return "Tunisia"
	case 792:
		return "Turkey"
	case 795:
		return "Turkmenistan"
	case 796:
		return "Turks and Caicos Islands"
	case 798:
		return "Tuvalu"
	case 800:
		return "Uganda"
	case 804:
		return "Ukraine"
	case 784:
		return "United Arab Emirates"
	case 826:
		return "United Kingdom"
	case 840:
		return "United States"
	case 581:
		return "United States Minor Outlying Islands"
	case 858:
		return "Uruguay"
	case 860:
		return "Uzbekistan"
	case 548:
		return "Vanuatu"
	case 336:
		return "Holy See (Vatican City State)"
	case 862:
		return "Venezuela"
	case 704:
		return "Vietnam"
	case 92:
		return "Virgin Islands British"
	case 850:
		return "Virgin Islands US"
	case 876:
		return "Wallis and Futuna Islands"
	case 732:
		return "Western Sahara"
	case 887:
		return "Yemen"
	case 891:
		return "Yugoslavia"
	case 894:
		return "Zambia"
	case 716:
		return "Zimbabwe"
	case 4:
		return "Afghanistan"
	case 688:
		return "Serbia"
	case 248:
		return "Aland Islands"
	case 535:
		return "Bonaire, Sint Eustatius And Saba"
	case 831:
		return "Guernsey"
	case 832:
		return "Jersey"
	case 531:
		return "Curacao"
	case 833:
		return "Isle Of Man"
	case 652:
		return "Saint Barthelemy"
	case 663:
		return "Saint Martin French"
	case 534:
		return "Sint Maarten Dutch"
	case 499:
		return "Montenegro"
	case 728:
		return "South Sudan"
	case 900:
		return "Kosovo"
	case 998:
		return "None"
	case 999:
		return "International"
	case 999800:
		return "International Freephone"
	case 999870:
		return "Inmarsat"
	case 999875:
		return "Maritime Mobile service"
	case 999878:
		return "Universal Personal Telecommunications services"
	case 999879:
		return "National non-commercial purposes"
	case 999881:
		return "Global Mobile Satellite System"
	case 999882:
		return "International Networks"
	case 999888:
		return "Disaster Relief"
	case 999979:
		return "International Premium Rate Service"
	case 999991:
		return "International Telecommunications Public Correspondence Service"
	}
	return UnknownMsg
}

// StringRus - returns a russian name of country
//
//nolint:gocyclo
func (c CountryCode) StringRus() string { //nolint:gocyclo
	switch c {
	case 8:
		return "Албания"
	case 12:
		return "Алжир"
	case 16:
		return "Американский Самоа"
	case 20:
		return "Андорра"
	case 24:
		return "Ангола"
	case 660:
		return "Ангилья"
	case 10:
		return "Антарктика"
	case 28:
		return "Антигуа и Барбуда"
	case 32:
		return "Аргентина"
	case 51:
		return "Армения"
	case 533:
		return "Аруба"
	case 36:
		return "Австралия"
	case 40:
		return "Австрия"
	case 31:
		return "Азербайджан"
	case 44:
		return "Багамские острова"
	case 48:
		return "Бахрейн"
	case 50:
		return "Бангладеш"
	case 52:
		return "Барбадос"
	case 112:
		return "Беларусь"
	case 56:
		return "Бельгия"
	case 84:
		return "Белиз"
	case 204:
		return "Бенин"
	case 60:
		return "Бермуды"
	case 64:
		return "Бутан"
	case 68:
		return "Боливия"
	case 70:
		return "Босния и Герцеговина"
	case 72:
		return "Ботсвана"
	case 74:
		return "остров Буве"
	case 76:
		return "Бразилия"
	case 86:
		return "Британские территории Индийского океана"
	case 96:
		return "Бруней"
	case 100:
		return "Болгария"
	case 108:
		return "Бурунди"
	case 116:
		return "Камбоджа"
	case 120:
		return "Камерун"
	case 124:
		return "Канада"
	case 132:
		return "острова Зеленого Мыса"
	case 136:
		return "Каймановы острова"
	case 140:
		return "Центральная Африканская Республика"
	case 144:
		return "Шри Ланка"
	case 148:
		return "Чад"
	case 152:
		return "Чили"
	case 156:
		return "Китайская Народная Республика"
	case 162:
		return "остров Рождества"
	case 166:
		return "Кокосовые острова"
	case 170:
		return "Колумбия"
	case 174:
		return "Коморские острова"
	case 178:
		return "Конго"
	case 180:
		return "Демократическая республика Конго"
	case 184:
		return "острова Кука"
	case 188:
		return "Коста Рика"
	case 384:
		return "Кот-д'Ивуар"
	case 191:
		return "Хорватия"
	case 192:
		return "Куба"
	case 196:
		return "Кипр"
	case 203:
		return "Чехия"
	case 208:
		return "Дания"
	case 262:
		return "Джибути"
	case 212:
		return "Доминика"
	case 214:
		return "Доминиканская республика"
	case 218:
		return "Эквадор"
	case 818:
		return "Египет"
	case 222:
		return "Сальвадор"
	case 226:
		return "Экваториальная Гвинея"
	case 232:
		return "Эритрея"
	case 233:
		return "Эстония"
	case 231:
		return "Эфиопия"
	case 234:
		return "Фарерские острова"
	case 238:
		return "Фолклендские (Мальвинские) острова"
	case 242:
		return "Фиджи"
	case 246:
		return "Финляндия"
	case 250:
		return "Франция"
	case 254:
		return "Французская Гвиана"
	case 258:
		return "Французская Полинезия"
	case 260:
		return "Французские Южные Территории"
	case 266:
		return "Габон"
	case 270:
		return "Гамбия"
	case 268:
		return "Грузия"
	case 276:
		return "Германия"
	case 288:
		return "Гана"
	case 292:
		return "Гибралтар"
	case 300:
		return "Греция"
	case 304:
		return "Гренландия"
	case 308:
		return "Гренада"
	case 312:
		return "Гваделупа"
	case 316:
		return "Гуам"
	case 320:
		return "Гватемала"
	case 324:
		return "Гвинея"
	case 624:
		return "Гвинея-Бисау"
	case 328:
		return "Гайана"
	case 332:
		return "Гаити"
	case 334:
		return "острова Герда и МакДональда"
	case 340:
		return "Гондурас"
	case 344:
		return "Гонконг (Китай)"
	case 348:
		return "Венгрия"
	case 352:
		return "Исландия"
	case 356:
		return "Индия"
	case 360:
		return "Индонезия"
	case 364:
		return "Иран"
	case 368:
		return "Ирак"
	case 372:
		return "Ирландия"
	case 376:
		return "Израиль"
	case 380:
		return "Италия"
	case 388:
		return "Ямайка"
	case 392:
		return "Япония"
	case 400:
		return "Иордания"
	case 398:
		return "Казахстан"
	case 404:
		return "Кения"
	case 296:
		return "Кирибати"
	case 410:
		return "Корея"
	case 408:
		return "Корейская Народная Демократическая республика"
	case 414:
		return "Кувейт"
	case 417:
		return "Кыргызстан" // Киргизия
	case 418:
		return "Лаос"
	case 428:
		return "Латвия"
	case 422:
		return "Ливан"
	case 426:
		return "Лесото"
	case 430:
		return "Либерия"
	case 434:
		return "Ливия"
	case 438:
		return "Лихтенштейн"
	case 440:
		return "Литва"
	case 442:
		return "Люксембург"
	case 446:
		return "Макао (Китай)"
	case 807:
		return "Македония"
	case 450:
		return "Мадагаскар"
	case 454:
		return "Малави"
	case 458:
		return "Малайзия"
	case 462:
		return "Мальдивские острова"
	case 466:
		return "Мали"
	case 470:
		return "Мальта"
	case 584:
		return "Маршалловы острова"
	case 474:
		return "Мартиника"
	case 478:
		return "Мавритания"
	case 480:
		return "Маврикий"
	case 175:
		return "Майотта"
	case 484:
		return "Мексика"
	case 583:
		return "Микронезия"
	case 498:
		return "Молдова"
	case 492:
		return "Монако"
	case 496:
		return "Монголия"
	case 500:
		return "Монтсеррат"
	case 504:
		return "Марокко"
	case 508:
		return "Мозамбик"
	case 104:
		return "Мьянма"
	case 516:
		return "Намибия"
	case 520:
		return "Науру"
	case 524:
		return "Непал"
	case 528:
		return "Нидерланды"
	case 530:
		return "Антильские острова"
	case 540:
		return "Новая Каледония"
	case 554:
		return "Новая Зеландия"
	case 558:
		return "Никарагуа"
	case 562:
		return "Нигер"
	case 566:
		return "Нигерия"
	case 570:
		return "Ниуэ"
	case 574:
		return "остров Норфолк"
	case 580:
		return "Марианские острова"
	case 578:
		return "Норвегия"
	case 512:
		return "Оман"
	case 586:
		return "Пакистан"
	case 585:
		return "Палау"
	case 275:
		return "Палестина"
	case 591:
		return "Панама"
	case 598:
		return "Папуа - Новая Гвинея"
	case 600:
		return "Парагвай"
	case 604:
		return "Перу"
	case 608:
		return "Филиппины"
	case 612:
		return "остров Питкэрн"
	case 616:
		return "Польша"
	case 620:
		return "Португалия"
	case 630:
		return "Пуэрто-Рико"
	case 634:
		return "Катар"
	case 638:
		return "Реюньон"
	case 642:
		return "Румыния"
	case 643:
		return "Россия"
	case 646:
		return "Руанда"
	case 654:
		return "остров Святой Елены"
	case 659:
		return "Сент-Китс и Невис"
	case 662:
		return "Сент-Люсия"
	case 666:
		return "Сен-Пьер и Микелон"
	case 670:
		return "Сент-Винсент и Гренадины"
	case 882:
		return "острова Самоа"
	case 674:
		return "Сан-Марино"
	case 678:
		return "Сан-Томе и Принсипи"
	case 682:
		return "Саудовская Аравия"
	case 686:
		return "Сенегал"
	case 690:
		return "Сейшельские острова"
	case 694:
		return "Сьерра-Леоне"
	case 702:
		return "Сингапур"
	case 703:
		return "Словакия"
	case 705:
		return "Словения"
	case 90:
		return "Соломоновы острова"
	case 706:
		return "Сомали"
	case 710:
		return "ЮАР"
	case 239:
		return "Южная Георгия и Южные Сандвичевы острова"
	case 724:
		return "Испания"
	case 729:
		return "Судан"
	case 740:
		return "Суринам"
	case 744:
		return "острова Свалбард и Ян Майен"
	case 748:
		return "Свазиленд"
	case 752:
		return "Швеция"
	case 756:
		return "Швейцария"
	case 760:
		return "Сирия"
	case 158:
		return "Тайвань (Республика Китай)"
	case 762:
		return "Таджикистан"
	case 834:
		return "Танзания"
	case 764:
		return "Тайланд"
	case 626:
		return "Восточный Тимор"
	case 768:
		return "Того"
	case 772:
		return "Токелау"
	case 776:
		return "Тонга"
	case 780:
		return "Тринидад и Тобаго"
	case 788:
		return "Тунис"
	case 792:
		return "Турция"
	case 795:
		return "Туркменистан"
	case 796:
		return "острова Теркс и Кайкос"
	case 798:
		return "Тувалу"
	case 800:
		return "Уганда"
	case 804:
		return "Украина"
	case 784:
		return "Арабские Эмираты"
	case 826:
		return "Великобритания"
	case 840:
		return "Соединенные Штаты Америки"
	case 581:
		return "Отдаленные Острова США"
	case 854:
		return "Буркина Фасо"
	case 858:
		return "Уругвай"
	case 860:
		return "Узбекистан"
	case 548:
		return "Вануату"
	case 336:
		return "Ватикан"
	case 862:
		return "Венесуэла"
	case 704:
		return "Вьетнам"
	case 92:
		return "Виргинские острова (Британские)"
	case 850:
		return "Виргинские острова (США)"
	case 876:
		return "острова Валлис и Футуна"
	case 732:
		return "Западная Сахара"
	case 887:
		return "Йемен"
	case 891:
		return "Югославия"
	case 894:
		return "Замбия"
	case 716:
		return "Зимбабве"
	case 4:
		return "Афганистан"
	case 688:
		return "Сербия"
	case 248:
		return "Аландские острова"
	case 535:
		return "Бонэйр, Синт-Эстатиус и Саба"
	case 831:
		return "Гернси"
	case 832:
		return "Джерси"
	case 531:
		return "Кюрасао"
	case 833:
		return "Остров Мэн"
	case 652:
		return "Сен-Бартелеми"
	case 663:
		return "Сен-Мартен"
	case 534:
		return "Синт-Мартен"
	case 499:
		return "Черногория"
	case 728:
		return "Южный Судан"
	case 900:
		return "Косово"
	case None:
		return "Отсутствует"
	case International:
		return "International"
	case 999800:
		return "Бесплатный номер"
	case 999870:
		return "Инмарсат"
	case 999875:
		return "Морская подвижная служба"
	case 999878:
		return "Универсальная персональная связь"
	case 999879:
		return "Некоммерческое использование"
	case 999881:
		return "Глобальная мобильная спутниковая система"
	case 999882:
		return "Глобальные телефонные номера"
	case 999888:
		return "Ликвидация последствий катастроф"
	case 999979:
		return "Международная услуга оплаты вызова по повышенному тарифу"
	case 999991:
		return "Служба международной телекоммуникационной корреспонденции"
	}
	return UnknownMsg
}

// FIPS - returns a default FIPS (FIPS 10-4, 2 chars) code of country
//
//nolint:gocyclo
func (c CountryCode) FIPS() string {
	switch c {
	case 8:
		return "AL"
	case 12:
		return "AG"
	case 16:
		return "AQ"
	case 20:
		return "AN"
	case 24:
		return "AO"
	case 660:
		return "AV"
	case 10:
		return "AY"
	case 28:
		return "AC"
	case 32:
		return "AR"
	case 51:
		return "AM"
	case 533:
		return "AA"
	case 36:
		return "AS"
	case 40:
		return "AU"
	case 31:
		return "AJ"
	case 44:
		return "BF"
	case 48:
		return "BA"
	case 50:
		return "BG"
	case 52:
		return "BB"
	case 112:
		return "BO"
	case 56:
		return "BE"
	case 84:
		return "BH"
	case 204:
		return "BN"
	case 60:
		return "BD"
	case 64:
		return "BT"
	case 68:
		return "BL"
	case 70:
		return "BK"
	case 72:
		return "BC"
	case 74:
		return "BV"
	case 76:
		return "BR"
	case 86:
		return "IO"
	case 96:
		return "BX"
	case 100:
		return "BU"
	case 854:
		return "UV"
	case 108:
		return "BY"
	case 116:
		return "CB"
	case 120:
		return "CM"
	case 124:
		return "CA"
	case 132:
		return "CV"
	case 136:
		return "CJ"
	case 140:
		return "CT"
	case 148:
		return "CD"
	case 152:
		return "CI"
	case 156:
		return "CH"
	case 162:
		return "KT"
	case 166:
		return "CK"
	case 170:
		return "CO"
	case 174:
		return "CN"
	case 178:
		return "CF"
	case 180:
		return "CG"
	case 184:
		return "CW"
	case 188:
		return "CS"
	case 384:
		return "IV"
	case 191:
		return "HR"
	case 192:
		return "CU"
	case 196:
		return "CY"
	case 203:
		return "EZ"
	case 208:
		return "DA"
	case 262:
		return "DJ"
	case 212:
		return "DO"
	case 214:
		return "DR"
	case 218:
		return "EC"
	case 818:
		return "EG"
	case 222:
		return "ES"
	case 226:
		return "EK"
	case 232:
		return "ER"
	case 233:
		return "EN"
	case 231:
		return "ET"
	case 234:
		return "FO"
	case 238:
		return "FK"
	case 242:
		return "FJ"
	case 246:
		return "FI"
	case 250:
		return "FR"
	case 254:
		return "FG"
	case 258:
		return "FP"
	case 260:
		return "FS"
	case 266:
		return "GB"
	case 270:
		return "GA"
	case 268:
		return "GG"
	case 276:
		return "GM"
	case 288:
		return "GH"
	case 292:
		return "GI"
	case 300:
		return "GR"
	case 304:
		return "GL"
	case 308:
		return "GJ"
	case 312:
		return "GP"
	case 316:
		return "GQ"
	case 320:
		return "GT"
	case 324:
		return "GV"
	case 624:
		return "PU"
	case 328:
		return "GY"
	case 332:
		return "GA"
	case 334:
		return "HM"
	case 340:
		return "HO"
	case 344:
		return "HK"
	case 348:
		return "HU"
	case 352:
		return "IC"
	case 356:
		return "IN"
	case 360:
		return "ID"
	case 364:
		return "IR"
	case 368:
		return "IZ"
	case 372:
		return "EI"
	case 376:
		return "IS"
	case 380:
		return "IT"
	case 388:
		return "JM"
	case 392:
		return "JA"
	case 400:
		return "JO"
	case 398:
		return "KZ"
	case 404:
		return "KE"
	case 296:
		return "KR"
	case 410:
		return "KS"
	case 408:
		return "KN"
	case 414:
		return "KU"
	case 417:
		return "KG"
	case 418:
		return "LA"
	case 428:
		return "LG"
	case 422:
		return "LE"
	case 426:
		return "LT"
	case 430:
		return "LI"
	case 434:
		return "LY"
	case 438:
		return "LS"
	case 440:
		return "LH"
	case 442:
		return "LU"
	case 446:
		return "MC"
	case 807:
		return "MK"
	case 450:
		return "MA"
	case 454:
		return "MI"
	case 458:
		return "MY"
	case 462:
		return "MV"
	case 466:
		return "ML"
	case 470:
		return "MT"
	case 584:
		return "RM"
	case 474:
		return "MB"
	case 478:
		return "MR"
	case 480:
		return "MP"
	case 175:
		return "MF"
	case 484:
		return "MX"
	case 583:
		return "FM"
	case 498:
		return "MD"
	case 492:
		return "MN"
	case 496:
		return "MG"
	case 500:
		return "MH"
	case 504:
		return "MO"
	case 508:
		return "MZ"
	case 104:
		return "BM"
	case 516:
		return "WA"
	case 520:
		return "NR"
	case 524:
		return "NP"
	case 528:
		return "NL"
	case 530:
		return "NT"
	case 540:
		return "NC"
	case 554:
		return "NZ"
	case 558:
		return "NU"
	case 562:
		return "NG"
	case 566:
		return "NI"
	case 570:
		return "NE"
	case 574:
		return "NF"
	case 580:
		return "CQ"
	case 578:
		return "NO"
	case 512:
		return "MU"
	case 586:
		return "PK"
	case 585:
		return "PS"
	case 275:
		return "WE"
	case 591:
		return "PM"
	case 598:
		return "PP"
	case 600:
		return "PA"
	case 604:
		return "PE"
	case 608:
		return "RP"
	case 612:
		return "PC"
	case 616:
		return "PL"
	case 620:
		return "PO"
	case 630:
		return "RQ"
	case 634:
		return "QA"
	case 638:
		return "RE"
	case 642:
		return "RO"
	case 643:
		return "RS"
	case 646:
		return "RW"
	case 654:
		return "SH"
	case 659:
		return "SC"
	case 662:
		return "ST"
	case 666:
		return "SB"
	case 670:
		return "VC"
	case 882:
		return "WS"
	case 674:
		return "SM"
	case 678:
		return "TP"
	case 682:
		return "SA"
	case 686:
		return "SG"
	case 690:
		return "SE"
	case 694:
		return "SL"
	case 702:
		return "SN"
	case 703:
		return "LO"
	case 705:
		return "SI"
	case 90:
		return "BP"
	case 706:
		return "SO"
	case 710:
		return "SF"
	case 239:
		return "SX"
	case 724:
		return "SP"
	case 144:
		return "CE"
	case 729:
		return "SU"
	case 740:
		return "NS"
	case 744:
		return "SV"
	case 748:
		return "WZ"
	case 752:
		return "SW"
	case 756:
		return "SZ"
	case 760:
		return "SY"
	case 158:
		return "TW"
	case 762:
		return "TI"
	case 834:
		return "TZ"
	case 764:
		return "TH"
	case 626:
		return "TT"
	case 768:
		return "TO"
	case 772:
		return "TL"
	case 776:
		return "TN"
	case 780:
		return "TD"
	case 788:
		return "TS"
	case 792:
		return "TU"
	case 795:
		return "TX"
	case 796:
		return "TK"
	case 798:
		return "TV"
	case 800:
		return "UG"
	case 804:
		return "UP"
	case 784:
		return "AE"
	case 826:
		return "UK"
	case 840:
		return "US"
	case 581:
		return "UM"
	case 858:
		return "UY"
	case 860:
		return "UZ"
	case 548:
		return "NH"
	case 336:
		return "VT"
	case 862:
		return "VE"
	case 704:
		return "VM"
	case 92:
		return "VI"
	case 850:
		return "VQ"
	case 876:
		return "WF"
	case 732:
		return "WI"
	case 887:
		return "YM"
	case 891:
		return "YI"
	case 894:
		return "ZA"
	case 716:
		return "ZI"
	case 4:
		return "AF"
	case 688:
		return "RI"
	case 831:
		return "GK"
	case 832:
		return "JE"
	case 531:
		return "UC"
	case 833:
		return "IM"
	case 652:
		return "TB"
	case 663:
		return "RN"
	case 534:
		return "NN"
	case 499:
		return "MW"
	case 728:
		return "OD"
	case 900:
		return "KV"
	case 248:
		return "Aland Islands"
	case 535:
		return "Bonaire, Sint Eustatius And Saba"
	case 998:
		return "None"
	case 999:
		return "International"
	case 999800:
		return "International Freephone"
	case 999870:
		return "Inmarsat"
	case 999875:
		return "Maritime Mobile service"
	case 999878:
		return "Universal Personal Telecommunications services"
	case 999879:
		return "National non-commercial purposes"
	case 999881:
		return "Global Mobile Satellite System"
	case 999882:
		return "International Networks"
	case 999888:
		return "Disaster Relief"
	case 999979:
		return "International Premium Rate Service"
	case 999991:
		return "International Telecommunications Public Correspondence Service"
	}
	return UnknownMsg
}

// Alpha2 - returns a default Alpha (Alpha-2/ISO2, 2 chars) code of country
//
//nolint:gocyclo
func (c CountryCode) Alpha2() string { //nolint:gocyclo
	switch c {
	case 8:
		return "AL"
	case 12:
		return "DZ"
	case 16:
		return "AS"
	case 20:
		return "AD"
	case 24:
		return "AO"
	case 660:
		return "AI"
	case 10:
		return "AQ"
	case 28:
		return "AG"
	case 32:
		return "AR"
	case 51:
		return "AM"
	case 533:
		return "AW"
	case 36:
		return "AU"
	case 40:
		return "AT"
	case 31:
		return "AZ"
	case 44:
		return "BS"
	case 48:
		return "BH"
	case 50:
		return "BD"
	case 52:
		return "BB"
	case 112:
		return "BY"
	case 56:
		return "BE"
	case 84:
		return "BZ"
	case 204:
		return "BJ"
	case 60:
		return "BM"
	case 64:
		return "BT"
	case 68:
		return "BO"
	case 70:
		return "BA"
	case 72:
		return "BW"
	case 74:
		return "BV"
	case 76:
		return "BR"
	case 86:
		return "IO"
	case 96:
		return "BN"
	case 100:
		return "BG"
	case 854:
		return "BF"
	case 108:
		return "BI"
	case 116:
		return "KH"
	case 120:
		return "CM"
	case 124:
		return "CA"
	case 132:
		return "CV"
	case 136:
		return "KY"
	case 140:
		return "CF"
	case 148:
		return "TD"
	case 152:
		return "CL"
	case 156:
		return "CN"
	case 162:
		return "CX"
	case 166:
		return "CC"
	case 170:
		return "CO"
	case 174:
		return "KM"
	case 178:
		return "CG"
	case 180:
		return "CD"
	case 184:
		return "CK"
	case 188:
		return "CR"
	case 384:
		return "CI"
	case 191:
		return "HR"
	case 192:
		return "CU"
	case 196:
		return "CY"
	case 203:
		return "CZ"
	case 208:
		return "DK"
	case 262:
		return "DJ"
	case 212:
		return "DM"
	case 214:
		return "DO"
	case 218:
		return "EC"
	case 818:
		return "EG"
	case 222:
		return "SV"
	case 226:
		return "GQ"
	case 232:
		return "ER"
	case 233:
		return "EE"
	case 231:
		return "ET"
	case 238:
		return "FK"
	case 242:
		return "FJ"
	case 246:
		return "FI"
	case 234:
		return "FO"
	case 250:
		return "FR"
	case 254:
		return "GF"
	case 258:
		return "PF"
	case 260:
		return "TF"
	case 266:
		return "GA"
	case 270:
		return "GM"
	case 268:
		return "GE"
	case 276:
		return "DE"
	case 288:
		return "GH"
	case 292:
		return "GI"
	case 300:
		return "GR"
	case 304:
		return "GL"
	case 308:
		return "GD"
	case 312:
		return "GP"
	case 316:
		return "GU"
	case 320:
		return "GT"
	case 324:
		return "GN"
	case 624:
		return "GW"
	case 328:
		return "GY"
	case 332:
		return "HT"
	case 334:
		return "HM"
	case 340:
		return "HN"
	case 344:
		return "HK"
	case 348:
		return "HU"
	case 352:
		return "IS"
	case 356:
		return "IN"
	case 360:
		return "ID"
	case 364:
		return "IR"
	case 368:
		return "IQ"
	case 372:
		return "IE"
	case 376:
		return "IL"
	case 380:
		return "IT"
	case 388:
		return "JM"
	case 392:
		return "JP"
	case 400:
		return "JO"
	case 398:
		return "KZ"
	case 404:
		return "KE"
	case 296:
		return "KI"
	case 410:
		return "KR"
	case 408:
		return "KP"
	case 414:
		return "KW"
	case 417:
		return "KG"
	case 418:
		return "LA"
	case 428:
		return "LV"
	case 422:
		return "LB"
	case 426:
		return "LS"
	case 430:
		return "LR"
	case 434:
		return "LY"
	case 438:
		return "LI"
	case 440:
		return "LT"
	case 442:
		return "LU"
	case 446:
		return "MO"
	case 807:
		return "MK"
	case 450:
		return "MG"
	case 454:
		return "MW"
	case 458:
		return "MY"
	case 462:
		return "MV"
	case 466:
		return "ML"
	case 470:
		return "MT"
	case 584:
		return "MH"
	case 474:
		return "MQ"
	case 478:
		return "MR"
	case 480:
		return "MU"
	case 175:
		return "YT"
	case 484:
		return "MX"
	case 583:
		return "FM"
	case 498:
		return "MD"
	case 492:
		return "MC"
	case 496:
		return "MN"
	case 500:
		return "MS"
	case 504:
		return "MA"
	case 508:
		return "MZ"
	case 104:
		return "MM"
	case 516:
		return "NA"
	case 520:
		return "NR"
	case 524:
		return "NP"
	case 528:
		return "NL"
	case 530:
		return "AN"
	case 540:
		return "NC"
	case 554:
		return "NZ"
	case 558:
		return "NI"
	case 562:
		return "NE"
	case 566:
		return "NG"
	case 570:
		return "NU"
	case 574:
		return "NF"
	case 580:
		return "MP"
	case 578:
		return "NO"
	case 512:
		return "OM"
	case 586:
		return "PK"
	case 585:
		return "PW"
	case 275:
		return "PS"
	case 591:
		return "PA"
	case 598:
		return "PG"
	case 600:
		return "PY"
	case 604:
		return "PE"
	case 608:
		return "PH"
	case 612:
		return "PN"
	case 616:
		return "PL"
	case 620:
		return "PT"
	case 630:
		return "PR"
	case 634:
		return "QA"
	case 638:
		return "RE"
	case 642:
		return "RO"
	case 643:
		return "RU"
	case 646:
		return "RW"
	case 654:
		return "SH"
	case 659:
		return "KN"
	case 662:
		return "LC"
	case 666:
		return "PM"
	case 670:
		return "VC"
	case 882:
		return "WS"
	case 674:
		return "SM"
	case 678:
		return "ST"
	case 682:
		return "SA"
	case 686:
		return "SN"
	case 690:
		return "SC"
	case 694:
		return "SL"
	case 702:
		return "SG"
	case 703:
		return "SK"
	case 705:
		return "SI"
	case 90:
		return "SB"
	case 706:
		return "SO"
	case 710:
		return "ZA"
	case 239:
		return "GS"
	case 724:
		return "ES"
	case 144:
		return "LK"
	case 729:
		return "SD"
	case 740:
		return "SR"
	case 744:
		return "SJ"
	case 748:
		return "SZ"
	case 752:
		return "SE"
	case 756:
		return "CH"
	case 760:
		return "SY"
	case 158:
		return "TW"
	case 762:
		return "TJ"
	case 834:
		return "TZ"
	case 764:
		return "TH"
	case 626:
		return "TL"
	case 768:
		return "TG"
	case 772:
		return "TK"
	case 776:
		return "TO"
	case 780:
		return "TT"
	case 788:
		return "TN"
	case 792:
		return "TR"
	case 795:
		return "TM"
	case 796:
		return "TC"
	case 798:
		return "TV"
	case 800:
		return "UG"
	case 804:
		return "UA"
	case 784:
		return "AE"
	case 826:
		return "GB"
	case 840:
		return "US"
	case 581:
		return "UM"
	case 858:
		return "UY"
	case 860:
		return "UZ"
	case 548:
		return "VU"
	case 336:
		return "VA"
	case 862:
		return "VE"
	case 704:
		return "VN"
	case 92:
		return "VG"
	case 850:
		return "VI"
	case 876:
		return "WF"
	case 732:
		return "EH"
	case 887:
		return "YE"
	case 891:
		return "YU"
	case 894:
		return "ZM"
	case 716:
		return "ZW"
	case 4:
		return "AF"
	case 688:
		return "RS"
	case 248:
		return "AX"
	case 535:
		return "BQ"
	case 831:
		return "GG"
	case 832:
		return "JE"
	case 531:
		return "CW"
	case 833:
		return "IM"
	case 652:
		return "BL"
	case 663:
		return "MF"
	case 534:
		return "SX"
	case 499:
		return "ME"
	case 728:
		return "SS"
	case 900:
		return "XK"
	case 998:
		return "None"
	case 999:
		return "International"
	case 999800:
		return "International Freephone"
	case 999870:
		return "Inmarsat"
	case 999875:
		return "Maritime Mobile service"
	case 999878:
		return "Universal Personal Telecommunications services"
	case 999879:
		return "National non-commercial purposes"
	case 999881:
		return "Global Mobile Satellite System"
	case 999882:
		return "International Networks"
	case 999888:
		return "Disaster Relief"
	case 999979:
		return "International Premium Rate Service"
	case 999991:
		return "International Telecommunications Public Correspondence Service"
	}
	return UnknownMsg
}

// Alpha3 - returns a Alpha-3 (ISO3, 3 chars) code of country
//
//nolint:gocyclo
func (c CountryCode) Alpha3() string { //nolint:gocyclo
	switch c {
	case 8:
		return "ALB"
	case 12:
		return "DZA"
	case 16:
		return "ASM"
	case 20:
		return "AND"
	case 24:
		return "AGO"
	case 660:
		return "AIA"
	case 10:
		return "ATA"
	case 28:
		return "ATG"
	case 32:
		return "ARG"
	case 51:
		return "ARM"
	case 533:
		return "ABW"
	case 36:
		return "AUS"
	case 40:
		return "AUT"
	case 31:
		return "AZE"
	case 44:
		return "BHS"
	case 48:
		return "BHR"
	case 50:
		return "BGD"
	case 52:
		return "BRB"
	case 112:
		return "BLR"
	case 56:
		return "BEL"
	case 84:
		return "BLZ"
	case 204:
		return "BEN"
	case 60:
		return "BMU"
	case 64:
		return "BTN"
	case 68:
		return "BOL"
	case 70:
		return "BIH"
	case 72:
		return "BWA"
	case 74:
		return "BVT"
	case 76:
		return "BRA"
	case 86:
		return "IOT"
	case 96:
		return "BRN"
	case 100:
		return "BGR"
	case 854:
		return "BFA"
	case 108:
		return "BDI"
	case 116:
		return "KHM"
	case 120:
		return "CMR"
	case 124:
		return "CAN"
	case 132:
		return "CPV"
	case 136:
		return "CYM"
	case 140:
		return "CAF"
	case 148:
		return "TCD"
	case 152:
		return "CHL"
	case 156:
		return "CHN"
	case 162:
		return "CXR"
	case 166:
		return "CCK"
	case 170:
		return "COL"
	case 174:
		return "COM"
	case 178:
		return "COG"
	case 180:
		return "COD"
	case 184:
		return "COK"
	case 188:
		return "CRI"
	case 384:
		return "CIV"
	case 191:
		return "HRV"
	case 192:
		return "CUB"
	case 196:
		return "CYP"
	case 203:
		return "CZE"
	case 208:
		return "DNK"
	case 262:
		return "DJI"
	case 212:
		return "DMA"
	case 214:
		return "DOM"
	case 218:
		return "ECU"
	case 818:
		return "EGY"
	case 222:
		return "SLV"
	case 226:
		return "GNQ"
	case 232:
		return "ERI"
	case 233:
		return "EST"
	case 231:
		return "ETH"
	case 238:
		return "FLK"
	case 242:
		return "FJI"
	case 246:
		return "FIN"
	case 250:
		return "FRA"
	case 234:
		return "FRO"
	case 254:
		return "GUF"
	case 258:
		return "PYF"
	case 260:
		return "ATF"
	case 266:
		return "GAB"
	case 270:
		return "GMB"
	case 268:
		return "GEO"
	case 276:
		return "DEU"
	case 288:
		return "GHA"
	case 292:
		return "GIB"
	case 300:
		return "GRC"
	case 304:
		return "GRL"
	case 308:
		return "GRD"
	case 312:
		return "GLP"
	case 316:
		return "GUM"
	case 320:
		return "GTM"
	case 324:
		return "GIN"
	case 624:
		return "GNB"
	case 328:
		return "GUY"
	case 332:
		return "HTI"
	case 334:
		return "HMD"
	case 340:
		return "HND"
	case 344:
		return "HKG"
	case 348:
		return "HUN"
	case 352:
		return "ISL"
	case 356:
		return "IND"
	case 360:
		return "IDN"
	case 364:
		return "IRN"
	case 368:
		return "IRQ"
	case 372:
		return "IRL"
	case 376:
		return "ISR"
	case 380:
		return "ITA"
	case 388:
		return "JAM"
	case 392:
		return "JPN"
	case 400:
		return "JOR"
	case 398:
		return "KAZ"
	case 404:
		return "KEN"
	case 296:
		return "KIR"
	case 410:
		return "KOR"
	case 408:
		return "PRK"
	case 414:
		return "KWT"
	case 417:
		return "KGZ"
	case 418:
		return "LAO"
	case 428:
		return "LVA"
	case 422:
		return "LBN"
	case 426:
		return "LSO"
	case 430:
		return "LBR"
	case 434:
		return "LBY"
	case 438:
		return "LIE"
	case 440:
		return "LTU"
	case 442:
		return "LUX"
	case 446:
		return "MAC"
	case 807:
		return "MKD"
	case 450:
		return "MDG"
	case 454:
		return "MWI"
	case 458:
		return "MYS"
	case 462:
		return "MDV"
	case 466:
		return "MLI"
	case 470:
		return "MLT"
	case 584:
		return "MHL"
	case 474:
		return "MTQ"
	case 478:
		return "MRT"
	case 480:
		return "MUS"
	case 175:
		return "MYT"
	case 484:
		return "MEX"
	case 583:
		return "FSM"
	case 498:
		return "MDA"
	case 492:
		return "MCO"
	case 496:
		return "MNG"
	case 500:
		return "MSR"
	case 504:
		return "MAR"
	case 508:
		return "MOZ"
	case 104:
		return "MMR"
	case 516:
		return "NAM"
	case 520:
		return "NRU"
	case 524:
		return "NPL"
	case 528:
		return "NLD"
	case 530:
		return "ANT"
	case 540:
		return "NCL"
	case 554:
		return "NZL"
	case 558:
		return "NIC"
	case 562:
		return "NER"
	case 566:
		return "NGA"
	case 570:
		return "NIU"
	case 574:
		return "NFK"
	case 580:
		return "MNP"
	case 578:
		return "NOR"
	case 512:
		return "OMN"
	case 586:
		return "PAK"
	case 585:
		return "PLW"
	case 275:
		return "PSE"
	case 591:
		return "PAN"
	case 598:
		return "PNG"
	case 600:
		return "PRY"
	case 604:
		return "PER"
	case 608:
		return "PHL"
	case 612:
		return "PCN"
	case 616:
		return "POL"
	case 620:
		return "PRT"
	case 630:
		return "PRI"
	case 634:
		return "QAT"
	case 638:
		return "REU"
	case 642:
		return "ROU"
	case 643:
		return "RUS"
	case 646:
		return "RWA"
	case 654:
		return "SHN"
	case 659:
		return "KNA"
	case 662:
		return "LCA"
	case 666:
		return "SPM"
	case 670:
		return "VCT"
	case 882:
		return "WSM"
	case 674:
		return "SMR"
	case 678:
		return "STP"
	case 682:
		return "SAU"
	case 686:
		return "SEN"
	case 690:
		return "SYC"
	case 694:
		return "SLE"
	case 702:
		return "SGP"
	case 703:
		return "SVK"
	case 705:
		return "SVN"
	case 90:
		return "SLB"
	case 706:
		return "SOM"
	case 710:
		return "ZAF"
	case 239:
		return "SGS"
	case 724:
		return "ESP"
	case 144:
		return "LKA"
	case 729:
		return "SDN"
	case 740:
		return "SUR"
	case 744:
		return "SJM"
	case 748:
		return "SWZ"
	case 752:
		return "SWE"
	case 756:
		return "CHE"
	case 760:
		return "SYR"
	case 158:
		return "TWN"
	case 762:
		return "TJK"
	case 834:
		return "TZA"
	case 764:
		return "THA"
	case 626:
		return "TLS"
	case 768:
		return "TGO"
	case 772:
		return "TKL"
	case 776:
		return "TON"
	case 780:
		return "TTO"
	case 788:
		return "TUN"
	case 792:
		return "TUR"
	case 795:
		return "TKM"
	case 796:
		return "TCA"
	case 798:
		return "TUV"
	case 800:
		return "UGA"
	case 804:
		return "UKR"
	case 784:
		return "ARE"
	case 826:
		return "GBR"
	case 840:
		return "USA"
	case 581:
		return "UMI"
	case 858:
		return "URY"
	case 860:
		return "UZB"
	case 548:
		return "VUT"
	case 336:
		return "VAT"
	case 862:
		return "VEN"
	case 704:
		return "VNM"
	case 92:
		return "VGB"
	case 850:
		return "VIR"
	case 876:
		return "WLF"
	case 732:
		return "ESH"
	case 887:
		return "YEM"
	case 891:
		return "YUG"
	case 894:
		return "ZMB"
	case 716:
		return "ZWE"
	case 4:
		return "AFG"
	case 688:
		return "SRB"
	case 248:
		return "ALA"
	case 535:
		return "BES"
	case 831:
		return "GGY"
	case 832:
		return "JEY"
	case 531:
		return "CUW"
	case 833:
		return "IMN"
	case 652:
		return "BLM"
	case 663:
		return "MAF"
	case 534:
		return "SXM"
	case 499:
		return "MNE"
	case 728:
		return "SSD"
	case 900:
		return "XKX"
	case 998:
		return "None"
	case 999:
		return "International"
	case 999800:
		return "International Freephone"
	case 999870:
		return "Inmarsat"
	case 999875:
		return "Maritime Mobile service"
	case 999878:
		return "Universal Personal Telecommunications services"
	case 999879:
		return "National non-commercial purposes"
	case 999881:
		return "Global Mobile Satellite System"
	case 999882:
		return "International Networks"
	case 999888:
		return "Disaster Relief"
	case 999979:
		return "International Premium Rate Service"
	case 999991:
		return "International Telecommunications Public Correspondence Service"
	}
	return UnknownMsg
}

// FIFA - returns a FIFA (AFC, CAF, CONCACAF, CONMEBOL, OFC and UEFA) three-letter country code
func (c CountryCode) FIFA() string {
	switch c {
	case GBR:
		return "ENG"
	case VNM:
		return "VIE"
	case DEU:
		return "GER"
	case NLD:
		return "NED"
	case PSE:
		return "PLE"
	case TWN:
		return "TPE"
	case HRV:
		return "CRO"
	case CAF:
		return "CTA"
	}
	return c.Alpha3()
}

// IOC - returns The International Olympic Committee (IOC) three-letter abbreviation country codes
//
//nolint:gocyclo
func (c CountryCode) IOC() string { //nolint:gocyclo
	switch c {
	case DZA:
		return `ALG`
	case ASM:
		return `ASA`
	case VIR:
		return `ISV`
	case AGO:
		return `ANG`
	case ATG:
		return `ANT`
	case GNQ:
		return `GEQ`
	case ABW:
		return `ARU`
	case BHS:
		return `BAH`
	case BHR:
		return `BRN`
	case BGD:
		return `BAN`
	case BRB:
		return `BAR`
	case BLZ:
		return `BIZ`
	case BMU:
		return `BER`
	case BTN:
		return `BHU`
	case BWA:
		return `BOT`
	case VGB:
		return `IVB`
	case BRN:
		return `BRU`
	case BGR:
		return `BUL`
	case BFA:
		return `BUR`
	case CHL:
		return `CHI`
	case CRI:
		return `CRC`
	case DNK:
		return `DEN`
	case DEU:
		return `GER`
	case SLV:
		return `ESA`
	case FJI:
		return `FIJ`
	case GMB:
		return `GAM`
	case GRD:
		return `GRN`
	case GRC:
		return `GRE`
	case GTM:
		return `GUA`
	case GIN:
		return `GUI`
	case GNB:
		return `GBS`
	case HTI:
		return `HAI`
	case HND:
		return `HON`
	case IDN:
		return `INA`
	case IRN:
		return `IRI`
	case CYM:
		return `CAY`
	case KHM:
		return `CAM`
	case COG:
		return `CGO`
	case XKX:
		return `KOS`
	case NON:
		return `NONE`
	case HRV:
		return `CRO`
	case KWT:
		return `KUW`
	case LSO:
		return `LES`
	case LVA:
		return `LAT`
	case LBN:
		return `LIB`
	case LBY:
		return `LBA`
	case MDG:
		return `MAD`
	case MWI:
		return `MAW`
	case MYS:
		return `MAS`
	case MRT:
		return `MTN`
	case MUS:
		return `MRI`
	case MCO:
		return `MON`
	case MNG:
		return `MGL`
	case MMR:
		return `MYA`
	case NPL:
		return `NEP`
	case NIC:
		return `NCA`
	case NLD:
		return `NED`
	case ANT:
		return `AHO`
	case NER:
		return `NIG`
	case NGA:
		return `NGR`
	case OMN:
		return `OMA`
	case PSE:
		return `PLE`
	case PRY:
		return `PAR`
	case PHL:
		return `PHI`
	case PRT:
		return `POR`
	case PRI:
		return `PUR`
	case TWN:
		return `TPE`
	case ROU:
		return `ROU`
	case SLB:
		return `SOL`
	case ZMB:
		return `ZAM`
	case WSM:
		return `SAM`
	case SAU:
		return `KSA`
	case CHE:
		return `SUI`
	case SYC:
		return `SEY`
	case ZWE:
		return `ZIM`
	case SVN:
		return `SLO`
	case LKA:
		return `SRI`
	case KNA:
		return `SKN`
	case VCT:
		return `VIN`
	case ZAF:
		return `RSA`
	case SDN:
		return `SUD`
	case TZA:
		return `TAN`
	case TGO:
		return `TOG`
	case TON:
		return `TGA`
	case TTO:
		return `TRI`
	case TCD:
		return `CHA`
	case URY:
		return `URU`
	case VUT:
		return `VAN`
	case ARE:
		return `UAE`
	case VNM:
		return `VIE`
	}
	return c.Alpha3()
}

// Currency - returns a currency of the country
//
//nolint:gocyclo
func (c CountryCode) Currency() CurrencyCode { //nolint:gocyclo
	switch c {
	case AUS:
		return CurrencyAUD
	case AUT, AND, MAF:
		return CurrencyEUR
	case AZE:
		return CurrencyAZN
	case ALB:
		return CurrencyALL
	case DZA:
		return CurrencyDZD
	case ASM, BES:
		return CurrencyUSD
	case AIA:
		return CurrencyXCD
	case AGO:
		return CurrencyAOA
	case ATG:
		return CurrencyXCD
	case ANT, CUW:
		return CurrencyANG
	case ARE:
		return CurrencyAED
	case ARG:
		return CurrencyARS
	case ARM:
		return CurrencyAMD
	case ABW:
		return CurrencyAWG
	case AFG:
		return CurrencyAFN
	case BHS:
		return CurrencyBSD
	case BGD:
		return CurrencyBDT
	case BRB:
		return CurrencyBBD
	case BHR:
		return CurrencyBHD
	case BLR:
		return CurrencyBYN
	case BLZ:
		return CurrencyBZD
	case BEL:
		return CurrencyEUR
	case BEN:
		return CurrencyXOF
	case BMU:
		return CurrencyBMD
	case BGR:
		return CurrencyBGN
	case BOL:
		return CurrencyBOB
	case BIH:
		return CurrencyBAM
	case BWA:
		return CurrencyBWP
	case BRA:
		return CurrencyBRL
	case IOT:
		return CurrencyUSD
	case BRN:
		return CurrencyBND
	case BFA:
		return CurrencyXOF
	case BDI:
		return CurrencyBIF
	case BTN:
		return CurrencyBTN
	case VUT:
		return CurrencyVUV
	case VAT:
		return CurrencyEUR
	case GBR, GGY, JEY, IMN:
		return CurrencyGBP
	case HUN:
		return CurrencyHUF
	case VEN:
		return CurrencyVES
	case VGB:
		return CurrencyUSD
	case VIR:
		return CurrencyUSD
	case TLS:
		return CurrencyUSD
	case VNM:
		return CurrencyVND
	case GAB:
		return CurrencyXAF
	case HTI:
		return CurrencyHTG
	case GUY:
		return CurrencyGYD
	case GMB:
		return CurrencyGMD
	case GHA:
		return CurrencyGHS
	case GLP:
		return CurrencyEUR
	case GTM:
		return CurrencyGTQ
	case GIN:
		return CurrencyGNF
	case GNB:
		return CurrencyXOF
	case DEU:
		return CurrencyEUR
	case GIB:
		return CurrencyGIP
	case HND:
		return CurrencyHNL
	case HKG:
		return CurrencyHKD
	case GRD:
		return CurrencyXCD
	case GRL:
		return CurrencyDKK
	case GRC:
		return CurrencyEUR
	case GEO:
		return CurrencyGEL
	case GUM:
		return CurrencyUSD
	case DNK:
		return CurrencyDKK
	case COD:
		return CurrencyCDF
	case DJI:
		return CurrencyDJF
	case DMA:
		return CurrencyXCD
	case DOM:
		return CurrencyDOP
	case EGY:
		return CurrencyEGP
	case ZMB:
		return CurrencyZMW
	case ESH:
		return CurrencyMAD
	case ZWE:
		return CurrencyZWL
	case ISR:
		return CurrencyILS
	case IND:
		return CurrencyINR
	case IDN:
		return CurrencyIDR
	case JOR:
		return CurrencyJOD
	case IRQ:
		return CurrencyIQD
	case IRN:
		return CurrencyIRR
	case IRL:
		return CurrencyEUR
	case ISL:
		return CurrencyISK
	case ESP:
		return CurrencyEUR
	case ITA:
		return CurrencyEUR
	case YEM:
		return CurrencyYER
	case KAZ:
		return CurrencyKZT
	case CYM:
		return CurrencyKYD
	case KHM:
		return CurrencyKHR
	case CMR:
		return CurrencyXAF
	case CAN:
		return CurrencyCAD
	case QAT:
		return CurrencyQAR
	case KEN:
		return CurrencyKES
	case CYP:
		return CurrencyEUR
	case KIR:
		return CurrencyAUD
	case CHN:
		return CurrencyCNY
	case CCK:
		return CurrencyAUD
	case COL:
		return CurrencyCOP
	case COM:
		return CurrencyKMF
	case COG:
		return CurrencyXAF
	case PRK:
		return CurrencyKPW
	case KOR:
		return CurrencyKRW
	case CRI:
		return CurrencyCRC
	case CIV:
		return CurrencyXOF
	case CUB:
		return CurrencyCUC
	case KWT:
		return CurrencyKWD
	case KGZ:
		return CurrencyKGS
	case LAO:
		return CurrencyLAK
	case LVA:
		return CurrencyEUR
	case LSO:
		return CurrencyLSL
	case LBR:
		return CurrencyLRD
	case LBN:
		return CurrencyLBP
	case LBY:
		return CurrencyLYD
	case LTU:
		return CurrencyEUR
	case LIE:
		return CurrencyCHF
	case LUX:
		return CurrencyEUR
	case MUS:
		return CurrencyMUR
	case MRT:
		return CurrencyMRU
	case MDG:
		return CurrencyMGA
	case MYT:
		return CurrencyEUR
	case MAC:
		return CurrencyMOP
	case MKD:
		return CurrencyMKD
	case MWI:
		return CurrencyMWK
	case MYS:
		return CurrencyMYR
	case MLI:
		return CurrencyXOF
	case MDV:
		return CurrencyMVR
	case MLT:
		return CurrencyEUR
	case MNP:
		return CurrencyUSD
	case MAR:
		return CurrencyMAD
	case MTQ:
		return CurrencyEUR
	case MHL:
		return CurrencyUSD
	case MEX:
		return CurrencyMXN
	case FSM:
		return CurrencyUSD
	case MOZ:
		return CurrencyMZN
	case MDA:
		return CurrencyMDL
	case MCO:
		return CurrencyEUR
	case MNG:
		return CurrencyMNT
	case MSR:
		return CurrencyXCD
	case MMR:
		return CurrencyMMK
	case NAM:
		return CurrencyNAD
	case NRU:
		return CurrencyAUD
	case NPL:
		return CurrencyNPR
	case NER:
		return CurrencyXOF
	case NGA:
		return CurrencyNGN
	case NLD:
		return CurrencyEUR
	case NIC:
		return CurrencyNIO
	case NIU:
		return CurrencyNZD
	case NZL:
		return CurrencyNZD
	case NCL:
		return CurrencyXPF
	case NOR:
		return CurrencyNOK
	case ChannelIslands:
		return CurrencyEUR
	case OMN:
		return CurrencyOMR
	case BVT:
		return CurrencyNOK
	case NFK:
		return CurrencyAUD
	case PCN:
		return CurrencyNZD
	case CXR:
		return CurrencyAUD
	case SHN:
		return CurrencySHP
	case WLF:
		return CurrencyXPF
	case HMD:
		return CurrencyAUD
	case CPV:
		return CurrencyCVE
	case COK:
		return CurrencyNZD
	case WSM:
		return CurrencyWST
	case SJM:
		return CurrencyNOK
	case TCA:
		return CurrencyUSD
	case UMI:
		return CurrencyUSD
	case PAK:
		return CurrencyPKR
	case PLW:
		return CurrencyUSD
	case PSE:
		return CurrencyILS
	case PAN:
		return CurrencyPAB
	case PNG:
		return CurrencyPGK
	case PRY:
		return CurrencyPYG
	case PER:
		return CurrencyPEN
	case POL:
		return CurrencyPLN
	case PRT:
		return CurrencyEUR
	case PRI:
		return CurrencyUSD
	case REU:
		return CurrencyEUR
	case RUS:
		return CurrencyRUB
	case RWA:
		return CurrencyRWF
	case ROU:
		return CurrencyRON
	case SLV:
		return CurrencySVC
	case SMR:
		return CurrencyEUR
	case STP:
		return CurrencySTN
	case SAU:
		return CurrencySAR
	case SWZ:
		return CurrencySZL
	case SYC:
		return CurrencySCR
	case SEN:
		return CurrencyXOF
	case SPM:
		return CurrencyEUR
	case VCT:
		return CurrencyXCD
	case KNA:
		return CurrencyXCD
	case LCA:
		return CurrencyXCD
	case SGP:
		return CurrencySGD
	case SYR:
		return CurrencySYP
	case SVK:
		return CurrencyEUR
	case SVN:
		return CurrencyEUR
	case USA:
		return CurrencyUSD
	case SLB:
		return CurrencySBD
	case SOM:
		return CurrencySOS
	case SDN:
		return CurrencySDG
	case SUR:
		return CurrencySRD
	case SLE:
		return CurrencySLL
	case TJK:
		return CurrencyTJS
	case TWN:
		return CurrencyTWD
	case THA:
		return CurrencyTHB
	case TZA:
		return CurrencyTZS
	case TGO:
		return CurrencyXOF
	case TKL:
		return CurrencyNZD
	case TON:
		return CurrencyTOP
	case TTO:
		return CurrencyTTD
	case TUV:
		return CurrencyAUD
	case TUN:
		return CurrencyTND
	case TKM:
		return CurrencyTMT
	case TUR:
		return CurrencyTRY
	case UGA:
		return CurrencyUGX
	case UZB:
		return CurrencyUZS
	case UKR:
		return CurrencyUAH
	case URY:
		return CurrencyUYI
	case FRO:
		return CurrencyDKK
	case FJI:
		return CurrencyFJD
	case PHL:
		return CurrencyPHP
	case FIN:
		return CurrencyEUR
	case FLK:
		return CurrencyFKP
	case FRA:
		return CurrencyEUR
	case GUF:
		return CurrencyEUR
	case PYF:
		return CurrencyXPF
	case ATF:
		return CurrencyEUR
	case HRV:
		return CurrencyEUR
	case CAF:
		return CurrencyXAF
	case TCD:
		return CurrencyXAF
	case CZE:
		return CurrencyCZK
	case CHL:
		return CurrencyCLP
	case CHE:
		return CurrencyCHF
	case SWE:
		return CurrencySEK
	case LKA:
		return CurrencyLKR
	case ECU:
		return CurrencyUSD
	case GNQ:
		return CurrencyXAF
	case ERI:
		return CurrencyERN
	case EST:
		return CurrencyEUR
	case ETH:
		return CurrencyETB
	case ZAF:
		return CurrencyZAR
	case YUG:
		return CurrencyYUD
	case SGS:
		return CurrencyGBP
	case JAM:
		return CurrencyJMD
	case JPN:
		return CurrencyJPY
	case BLM, MNE, ALA:
		return CurrencyEUR
	case SXM:
		return CurrencyANG
	case SRB:
		return CurrencyRSD
	case SSD:
		return CurrencySSP
	case XKX:
		return CurrencyEUR
	case NON, International, NonCountryInternationalFreephone, NonCountryInmarsat, NonCountryMaritimeMobileService,
		NonCountryUniversalPersonalTelecommunicationsServices, NonCountryNationalNonCommercialPurposes, NonCountryGlobalMobileSatelliteSystem,
		NonCountryInternationalNetworks, NonCountryDisasterRelief, NonCountryInternationalPremiumRateService,
		NonCountryInternationalTelecommunicationsCorrespondenceService:
		return CurrencyNone
	}
	return CurrencyUnknown
}

// All - return all country codes
func All() []CountryCode {
	return []CountryCode{
		AUS,
		AUT,
		AZE,
		ALB,
		DZA,
		ASM,
		AIA,
		AGO,
		AND,
		ATA,
		ATG,
		ANT,
		ARE,
		ARG,
		ARM,
		ABW,
		AFG,
		BHS,
		BGD,
		BRB,
		BHR,
		BLR,
		BLZ,
		BEL,
		BEN,
		BMU,
		BGR,
		BOL,
		BIH,
		BWA,
		BRA,
		IOT,
		BRN,
		BFA,
		BDI,
		BTN,
		VUT,
		VAT,
		GBR,
		HUN,
		VEN,
		VGB,
		VIR,
		TLS,
		VNM,
		GAB,
		HTI,
		GUY,
		GMB,
		GHA,
		GLP,
		GTM,
		GIN,
		GNB,
		DEU,
		GIB,
		HND,
		HKG,
		GRD,
		GRL,
		GRC,
		GEO,
		GUM,
		DNK,
		COD,
		DJI,
		DMA,
		DOM,
		EGY,
		ZMB,
		ESH,
		ZWE,
		ISR,
		IND,
		IDN,
		JOR,
		IRQ,
		IRN,
		IRL,
		ISL,
		ESP,
		ITA,
		YEM,
		KAZ,
		CYM,
		KHM,
		CMR,
		CAN,
		QAT,
		KEN,
		CYP,
		KIR,
		CHN,
		CCK,
		COL,
		COM,
		COG,
		PRK,
		KOR,
		CRI,
		CIV,
		CUB,
		KWT,
		KGZ,
		LAO,
		LVA,
		LSO,
		LBR,
		LBN,
		LBY,
		LTU,
		LIE,
		LUX,
		MUS,
		MRT,
		MDG,
		MYT,
		MAC,
		MKD,
		MWI,
		MYS,
		MLI,
		MDV,
		MLT,
		MNP,
		MAR,
		MTQ,
		MHL,
		MEX,
		FSM,
		MOZ,
		MDA,
		MCO,
		MNG,
		MSR,
		MMR,
		NAM,
		NRU,
		NPL,
		NER,
		NGA,
		NLD,
		NIC,
		NIU,
		NZL,
		NCL,
		NOR,
		OMN,
		BVT,
		IMN,
		NFK,
		PCN,
		CXR,
		SHN,
		WLF,
		HMD,
		CPV,
		COK,
		WSM,
		SJM,
		TCA,
		UMI,
		PAK,
		PLW,
		PSE,
		PAN,
		PNG,
		PRY,
		PER,
		POL,
		PRT,
		PRI,
		REU,
		RUS,
		RWA,
		ROU,
		SLV,
		SMR,
		STP,
		SAU,
		SWZ,
		SYC,
		SEN,
		SPM,
		VCT,
		KNA,
		LCA,
		SGP,
		SYR,
		SVK,
		SVN,
		USA,
		SLB,
		SOM,
		SDN,
		SUR,
		SLE,
		TJK,
		TWN,
		THA,
		TZA,
		TGO,
		TKL,
		TON,
		TTO,
		TUV,
		TUN,
		TKM,
		TUR,
		UGA,
		UZB,
		UKR,
		URY,
		// XWA, // ignored for All(), part of GB
		FRO,
		FJI,
		PHL,
		FIN,
		FLK,
		FRA,
		GUF,
		PYF,
		ATF,
		HRV,
		CAF,
		TCD,
		CZE,
		CHL,
		CHE,
		SWE,
		// XSC, // ignored for All(), part of GB
		LKA,
		ECU,
		GNQ,
		ERI,
		EST,
		ETH,
		ZAF,
		YUG,
		SGS,
		JAM,
		MNE,
		BLM,
		SXM,
		SRB,
		ALA,
		BES,
		GGY,
		JEY,
		CUW,
		MAF,
		SSD,
		JPN,
		XKX,
	}
}

// AllNonCountries - return all non-country codes
func AllNonCountries() []CountryCode {
	return []CountryCode{
		NonCountryInternationalFreephone,
		NonCountryInmarsat,
		NonCountryMaritimeMobileService,
		NonCountryUniversalPersonalTelecommunicationsServices,
		NonCountryNationalNonCommercialPurposes,
		NonCountryGlobalMobileSatelliteSystem,
		NonCountryInternationalNetworks,
		NonCountryDisasterRelief,
		NonCountryInternationalPremiumRateService,
		NonCountryInternationalTelecommunicationsCorrespondenceService,
	}
}

// CallCodes - return calling code of country
//
//nolint:gocyclo
func (c CountryCode) CallCodes() []CallCode { //nolint:gocyclo
	switch c {
	case AUS:
		return []CallCode{CallCode(61)}
	case AUT:
		return []CallCode{CallCode(43)}
	case AZE:
		return []CallCode{CallCode(994)}
	case ALB:
		return []CallCode{CallCode(355)}
	case DZA:
		return []CallCode{CallCode(213)}
	case ASM:
		return []CallCode{CallCode(1684)}
	case AIA:
		return []CallCode{CallCode(1264)}
	case AGO:
		return []CallCode{CallCode(244)}
	case AND:
		return []CallCode{CallCode(376)}
	case ATA:
		return []CallCode{CallCode(672)}
	case ATG:
		return []CallCode{CallCode(1268)}
	case ANT:
		return []CallCode{CallCode(599)}
	case ARE:
		return []CallCode{CallCode(971)}
	case ARG:
		return []CallCode{CallCode(54)}
	case ARM:
		return []CallCode{CallCode(374)}
	case ABW:
		return []CallCode{CallCode(297), CallCode(5998)}
	case AFG:
		return []CallCode{CallCode(93)}
	case BHS:
		return []CallCode{CallCode(1242)}
	case BGD:
		return []CallCode{CallCode(880)}
	case BRB:
		return []CallCode{CallCode(1246)}
	case BHR:
		return []CallCode{CallCode(973)}
	case BLR:
		return []CallCode{CallCode(375)}
	case BLZ:
		return []CallCode{CallCode(501)}
	case BEL:
		return []CallCode{CallCode(32)}
	case BEN:
		return []CallCode{CallCode(229)}
	case BMU:
		return []CallCode{CallCode(1441)}
	case BGR:
		return []CallCode{CallCode(359)}
	case BOL:
		return []CallCode{CallCode(591)}
	case BIH:
		return []CallCode{CallCode(387)}
	case BWA:
		return []CallCode{CallCode(267)}
	case BRA:
		return []CallCode{CallCode(55)}
	case IOT:
		return []CallCode{CallCode(246)}
	case BRN:
		return []CallCode{CallCode(673)}
	case BFA:
		return []CallCode{CallCode(226)}
	case BDI:
		return []CallCode{CallCode(257)}
	case BTN:
		return []CallCode{CallCode(975)}
	case VUT:
		return []CallCode{CallCode(678)}
	case VAT:
		return []CallCode{CallCode(3906698)}
	case GBR:
		return []CallCode{CallCode(44)}
	case HUN:
		return []CallCode{CallCode(36)}
	case VEN:
		return []CallCode{CallCode(58)}
	case VGB:
		return []CallCode{CallCode(1284)}
	case VIR:
		return []CallCode{CallCode(1340)}
	case TLS:
		return []CallCode{CallCode(670)}
	case VNM:
		return []CallCode{CallCode(84)}
	case GAB:
		return []CallCode{CallCode(241)}
	case HTI:
		return []CallCode{CallCode(509)}
	case GUY:
		return []CallCode{CallCode(592)}
	case GMB:
		return []CallCode{CallCode(220)}
	case GHA:
		return []CallCode{CallCode(233)}
	case GLP:
		return []CallCode{CallCode(590)}
	case GTM:
		return []CallCode{CallCode(502)}
	case GIN:
		return []CallCode{CallCode(224)}
	case GNB:
		return []CallCode{CallCode(245)}
	case DEU:
		return []CallCode{CallCode(49)}
	case GIB:
		return []CallCode{CallCode(350)}
	case HND:
		return []CallCode{CallCode(504)}
	case HKG:
		return []CallCode{CallCode(852)}
	case GRD:
		return []CallCode{CallCode(1473)}
	case GRL:
		return []CallCode{CallCode(299)}
	case GRC:
		return []CallCode{CallCode(30)}
	case GEO:
		return []CallCode{CallCode(995)}
	case GUM:
		return []CallCode{CallCode(1671)}
	case DNK:
		return []CallCode{CallCode(45)}
	case COD:
		return []CallCode{CallCode(243)}
	case DJI:
		return []CallCode{CallCode(253)}
	case DMA:
		return []CallCode{CallCode(1767)}
	case DOM:
		return []CallCode{CallCode(1809), CallCode(1829), CallCode(1849)}
	case EGY:
		return []CallCode{CallCode(20)}
	case ZMB:
		return []CallCode{CallCode(260)}
	case ESH:
		return []CallCode{CallCode(212)}
	case ZWE:
		return []CallCode{CallCode(263)}
	case ISR:
		return []CallCode{CallCode(972)}
	case IND:
		return []CallCode{CallCode(91)}
	case IDN:
		return []CallCode{CallCode(62)}
	case JOR:
		return []CallCode{CallCode(962)}
	case IRQ:
		return []CallCode{CallCode(964)}
	case IRN:
		return []CallCode{CallCode(98)}
	case IRL:
		return []CallCode{CallCode(353)}
	case ISL:
		return []CallCode{CallCode(354)}
	case ESP:
		return []CallCode{CallCode(34)}
	case ITA:
		return []CallCode{CallCode(39)}
	case YEM:
		return []CallCode{CallCode(967)}
	case KAZ:
		return []CallCode{CallCode(7)}
	case CYM:
		return []CallCode{CallCode(1345)}
	case KHM:
		return []CallCode{CallCode(855)}
	case CMR:
		return []CallCode{CallCode(237)}
	case CAN:
		return []CallCode{CallCode(1)}
	case QAT:
		return []CallCode{CallCode(974)}
	case KEN:
		return []CallCode{CallCode(254)}
	case CYP:
		return []CallCode{CallCode(357)}
	case KIR:
		return []CallCode{CallCode(686)}
	case CHN:
		return []CallCode{CallCode(86)}
	case CCK:
		return []CallCode{CallCode(672), CallCode(6189162)}
	case COL:
		return []CallCode{CallCode(57)}
	case COM:
		return []CallCode{CallCode(269)}
	case COG:
		return []CallCode{CallCode(242)}
	case PRK:
		return []CallCode{CallCode(850)}
	case KOR:
		return []CallCode{CallCode(82)}
	case CRI:
		return []CallCode{CallCode(506)}
	case CIV:
		return []CallCode{CallCode(225)}
	case CUB:
		return []CallCode{CallCode(53)}
	case KWT:
		return []CallCode{CallCode(965)}
	case KGZ:
		return []CallCode{CallCode(996)}
	case LAO:
		return []CallCode{CallCode(856)}
	case LVA:
		return []CallCode{CallCode(371)}
	case LSO:
		return []CallCode{CallCode(266)}
	case LBR:
		return []CallCode{CallCode(231)}
	case LBN:
		return []CallCode{CallCode(961)}
	case LBY:
		return []CallCode{CallCode(218)}
	case LTU:
		return []CallCode{CallCode(370)}
	case LIE:
		return []CallCode{CallCode(423)}
	case LUX:
		return []CallCode{CallCode(352)}
	case MUS:
		return []CallCode{CallCode(230)}
	case MRT:
		return []CallCode{CallCode(222)}
	case MDG:
		return []CallCode{CallCode(261)}
	case MYT:
		return []CallCode{CallCode(CallCode262269), CallCode(CallCode262639)}
	case MAC:
		return []CallCode{CallCode(853)}
	case MKD:
		return []CallCode{CallCode(389)}
	case MWI:
		return []CallCode{CallCode(265)}
	case MYS:
		return []CallCode{CallCode(60)}
	case MLI:
		return []CallCode{CallCode(223)}
	case MDV:
		return []CallCode{CallCode(960)}
	case MLT:
		return []CallCode{CallCode(356)}
	case MNP:
		return []CallCode{CallCode(1670)}
	case MAR:
		return []CallCode{CallCode(212)}
	case MTQ:
		return []CallCode{CallCode(596)}
	case MHL:
		return []CallCode{CallCode(692)}
	case MEX:
		return []CallCode{CallCode(52)}
	case FSM:
		return []CallCode{CallCode(691)}
	case MOZ:
		return []CallCode{CallCode(258)}
	case MDA:
		return []CallCode{CallCode(373)}
	case MCO:
		return []CallCode{CallCode(377)}
	case MNG:
		return []CallCode{CallCode(976)}
	case MSR:
		return []CallCode{CallCode(1664)}
	case MMR:
		return []CallCode{CallCode(95)}
	case NAM:
		return []CallCode{CallCode(264)}
	case NRU:
		return []CallCode{CallCode(674)}
	case NPL:
		return []CallCode{CallCode(977)}
	case NER:
		return []CallCode{CallCode(227)}
	case NGA:
		return []CallCode{CallCode(234)}
	case NLD:
		return []CallCode{CallCode(31)}
	case NIC:
		return []CallCode{CallCode(505)}
	case NIU:
		return []CallCode{CallCode(683)}
	case NZL:
		return []CallCode{CallCode(64)}
	case NCL:
		return []CallCode{CallCode(687)}
	case NOR:
		return []CallCode{CallCode(47)}
	case OMN:
		return []CallCode{CallCode(968)}
	case BVT:
		return []CallCode{CallCode(47)}
	case IMN:
		return []CallCode{CallCode(441624)}
	case NFK:
		return []CallCode{CallCode(672)}
	case PCN:
		return []CallCode{CallCode(64)}
	case CXR:
		return []CallCode{CallCode(6189164)}
	case SHN:
		return []CallCode{CallCode(290)}
	case WLF:
		return []CallCode{CallCode(681)}
	case HMD:
		return []CallCode{CallCode(61)}
	case CPV:
		return []CallCode{CallCode(238)}
	case COK:
		return []CallCode{CallCode(682)}
	case WSM:
		return []CallCode{CallCode(685)}
	case SJM:
		return []CallCode{CallCode(4779)}
	case TCA:
		return []CallCode{CallCode(1649)}
	case UMI:
		return []CallCode{CallCode(1)}
	case PAK:
		return []CallCode{CallCode(92)}
	case PLW:
		return []CallCode{CallCode(680)}
	case PSE:
		return []CallCode{CallCode(970)}
	case PAN:
		return []CallCode{CallCode(507)}
	case PNG:
		return []CallCode{CallCode(675)}
	case PRY:
		return []CallCode{CallCode(595)}
	case PER:
		return []CallCode{CallCode(51)}
	case POL:
		return []CallCode{CallCode(48)}
	case PRT:
		return []CallCode{CallCode(351)}
	case PRI:
		return []CallCode{CallCode(1787), CallCode(1939)}
	case REU:
		return []CallCode{CallCode(262)}
	case RUS:
		return []CallCode{CallCode(7)}
	case RWA:
		return []CallCode{CallCode(250)}
	case ROU:
		return []CallCode{CallCode(40)}
	case SLV:
		return []CallCode{CallCode(503)}
	case SMR:
		return []CallCode{CallCode(378)}
	case STP:
		return []CallCode{CallCode(239)}
	case SAU:
		return []CallCode{CallCode(966)}
	case SWZ:
		return []CallCode{CallCode(268)}
	case SYC:
		return []CallCode{CallCode(248)}
	case SEN:
		return []CallCode{CallCode(221)}
	case SPM:
		return []CallCode{CallCode(508)}
	case VCT:
		return []CallCode{CallCode(1784)}
	case KNA:
		return []CallCode{CallCode(1869)}
	case LCA:
		return []CallCode{CallCode(1758)}
	case SGP:
		return []CallCode{CallCode(65)}
	case SYR:
		return []CallCode{CallCode(963)}
	case SVK:
		return []CallCode{CallCode(421)}
	case SVN:
		return []CallCode{CallCode(386)}
	case USA:
		return []CallCode{CallCode(1)}
	case SLB:
		return []CallCode{CallCode(677)}
	case SOM:
		return []CallCode{CallCode(252)}
	case SDN:
		return []CallCode{CallCode(249)}
	case SUR:
		return []CallCode{CallCode(597)}
	case SLE:
		return []CallCode{CallCode(232)}
	case TJK:
		return []CallCode{CallCode(992)}
	case TWN:
		return []CallCode{CallCode(886)}
	case THA:
		return []CallCode{CallCode(66)}
	case TZA:
		return []CallCode{CallCode(255)}
	case TGO:
		return []CallCode{CallCode(228)}
	case TKL:
		return []CallCode{CallCode(690)}
	case TON:
		return []CallCode{CallCode(676)}
	case TTO:
		return []CallCode{CallCode(1868)}
	case TUV:
		return []CallCode{CallCode(688)}
	case TUN:
		return []CallCode{CallCode(216)}
	case TKM:
		return []CallCode{CallCode(993)}
	case TUR:
		return []CallCode{CallCode(90)}
	case UGA:
		return []CallCode{CallCode(256)}
	case UZB:
		return []CallCode{CallCode(998)}
	case UKR:
		return []CallCode{CallCode(380)}
	case URY:
		return []CallCode{CallCode(598)}
	case FRO:
		return []CallCode{CallCode(298)}
	case FJI:
		return []CallCode{CallCode(679)}
	case PHL:
		return []CallCode{CallCode(63)}
	case FIN:
		return []CallCode{CallCode(358)}
	case FLK:
		return []CallCode{CallCode(500)}
	case FRA:
		return []CallCode{CallCode(33)}
	case GUF:
		return []CallCode{CallCode(594)}
	case PYF:
		return []CallCode{CallCode(689)}
	case ATF:
		return []CallCode{CallCode(1)}
	case HRV:
		return []CallCode{CallCode(385)}
	case CAF:
		return []CallCode{CallCode(236)}
	case TCD:
		return []CallCode{CallCode(235)}
	case CZE:
		return []CallCode{CallCode(420)}
	case CHL:
		return []CallCode{CallCode(56)}
	case CHE:
		return []CallCode{CallCode(41)}
	case SWE:
		return []CallCode{CallCode(46)}
	case LKA:
		return []CallCode{CallCode(94)}
	case ECU:
		return []CallCode{CallCode(593)}
	case GNQ:
		return []CallCode{CallCode(240)}
	case ERI:
		return []CallCode{CallCode(291)}
	case EST:
		return []CallCode{CallCode(372)}
	case ETH:
		return []CallCode{CallCode(251)}
	case ZAF:
		return []CallCode{CallCode(27)}
	case YUG:
		return []CallCode{CallCode(38)}
	case SGS:
		return []CallCode{CallCode(500)}
	case JAM:
		return []CallCode{CallCode(1876), CallCode(1658)}
	case MNE:
		return []CallCode{CallCode(382)}
	case BLM:
		return []CallCode{CallCode(590)}
	case SXM:
		return []CallCode{CallCode(1721)}
	case SRB:
		return []CallCode{CallCode(381)}
	case ALA:
		return []CallCode{CallCode(35818)}
	case BES:
		return []CallCode{CallCode(5993), CallCode(5994)}
	case GGY:
		return []CallCode{CallCode(441481)}
	case JEY:
		return []CallCode{CallCode(441534)}
	case CUW:
		return []CallCode{CallCode(5999)}
	case MAF:
		return []CallCode{CallCode(590)}
	case SSD:
		return []CallCode{CallCode(211)}
	case XKX:
		return []CallCode{CallCode(383)}
	case NON:
		return []CallCode{}
	case International:
		return []CallCode{CallCode(800), CallCode(870), CallCode(875), CallCode(876), CallCode(877), CallCode(878), CallCode(879), CallCode(881),
			CallCode(882), CallCode(883), CallCode(888), CallCode(979), CallCode(991)}
	case JPN:
		return []CallCode{CallCode(81)}
	case NonCountryInternationalFreephone:
		return []CallCode{CallCode(800)}
	case NonCountryInmarsat:
		return []CallCode{CallCode(870)}
	case NonCountryMaritimeMobileService:
		return []CallCode{CallCode(875), CallCode(876), CallCode(877)}
	case NonCountryUniversalPersonalTelecommunicationsServices:
		return []CallCode{CallCode(878)}
	case NonCountryNationalNonCommercialPurposes:
		return []CallCode{CallCode(879)}
	case NonCountryGlobalMobileSatelliteSystem:
		return []CallCode{CallCode(881)}
	case NonCountryInternationalNetworks:
		return []CallCode{CallCode(882), CallCode(883)}
	case NonCountryDisasterRelief:
		return []CallCode{CallCode(888)}
	case NonCountryInternationalPremiumRateService:
		return []CallCode{CallCode(979)}
	case NonCountryInternationalTelecommunicationsCorrespondenceService:
		return []CallCode{CallCode(991)}
	}
	return []CallCode{CallCode(0)}
}

// Domain - return domain code of country
func (c CountryCode) Domain() DomainCode {
	domain := DomainCode(c)
	if domain.IsValid() {
		return domain
	}
	return DomainUnknown
}

// Region - return Region code ot the country
//
//nolint:gocyclo
func (c CountryCode) Region() RegionCode { //nolint:gocyclo
	switch c {
	case AUS:
		return RegionOC
	case AUT:
		return RegionEU
	case AZE:
		return RegionAS
	case ALB:
		return RegionEU
	case DZA:
		return RegionAF
	case ASM:
		return RegionOC
	case AIA:
		return RegionNA
	case AGO:
		return RegionAF
	case AND:
		return RegionEU
	case ATA:
		return RegionAN
	case ATG:
		return RegionNA
	case ANT:
		return RegionNA
	case ARE:
		return RegionAS
	case ARG:
		return RegionSA
	case ARM:
		return RegionAS
	case ABW:
		return RegionNA
	case AFG:
		return RegionAS
	case BHS:
		return RegionNA
	case BGD:
		return RegionAS
	case BRB:
		return RegionNA
	case BHR:
		return RegionAS
	case BLR:
		return RegionEU
	case BLZ:
		return RegionNA
	case BEL:
		return RegionEU
	case BEN:
		return RegionAF
	case BMU:
		return RegionNA
	case BGR:
		return RegionEU
	case BOL:
		return RegionSA
	case BIH:
		return RegionEU
	case BWA:
		return RegionAF
	case BRA:
		return RegionSA
	case IOT:
		return RegionAS
	case BRN:
		return RegionAS
	case BFA:
		return RegionAF
	case BDI:
		return RegionAF
	case BTN:
		return RegionAS
	case VUT:
		return RegionOC
	case VAT:
		return RegionEU
	case GBR:
		return RegionEU
	case HUN:
		return RegionEU
	case VEN:
		return RegionSA
	case VGB:
		return RegionNA
	case VIR:
		return RegionNA
	case TLS:
		return RegionAS
	case VNM:
		return RegionAS
	case GAB:
		return RegionAF
	case HTI:
		return RegionNA
	case GUY:
		return RegionSA
	case GMB:
		return RegionAF
	case GHA:
		return RegionAF
	case GLP:
		return RegionNA
	case GTM:
		return RegionNA
	case GIN:
		return RegionAF
	case GNB:
		return RegionAF
	case DEU:
		return RegionEU
	case GIB:
		return RegionEU
	case HND:
		return RegionNA
	case HKG:
		return RegionAS
	case GRD:
		return RegionNA
	case GRL:
		return RegionNA
	case GRC:
		return RegionEU
	case GEO:
		return RegionAS
	case GUM:
		return RegionOC
	case DNK:
		return RegionEU
	case COD:
		return RegionAF
	case DJI:
		return RegionAF
	case DMA:
		return RegionNA
	case DOM:
		return RegionNA
	case EGY:
		return RegionAF
	case ZMB:
		return RegionAF
	case ESH:
		return RegionAF
	case ZWE:
		return RegionAF
	case ISR:
		return RegionAS
	case IND:
		return RegionAS
	case IDN:
		return RegionAS
	case JOR:
		return RegionAS
	case IRQ:
		return RegionAS
	case IRN:
		return RegionAS
	case IRL:
		return RegionEU
	case ISL:
		return RegionEU
	case ESP:
		return RegionEU
	case ITA:
		return RegionEU
	case YEM:
		return RegionAS
	case KAZ:
		return RegionAS
	case CYM:
		return RegionNA
	case KHM:
		return RegionAS
	case CMR:
		return RegionAF
	case CAN:
		return RegionNA
	case QAT:
		return RegionAS
	case KEN:
		return RegionAF
	case CYP:
		return RegionAS
	case KIR:
		return RegionOC
	case CHN:
		return RegionAS
	case CCK:
		return RegionAS
	case COL:
		return RegionSA
	case COM:
		return RegionAF
	case COG:
		return RegionAF
	case PRK:
		return RegionAS
	case KOR:
		return RegionAS
	case CRI:
		return RegionNA
	case CIV:
		return RegionAF
	case CUB:
		return RegionNA
	case KWT:
		return RegionAS
	case KGZ:
		return RegionAS
	case LAO:
		return RegionAS
	case LVA:
		return RegionEU
	case LSO:
		return RegionAF
	case LBR:
		return RegionAF
	case LBN:
		return RegionAS
	case LBY:
		return RegionAF
	case LTU:
		return RegionEU
	case LIE:
		return RegionEU
	case LUX:
		return RegionEU
	case MUS:
		return RegionAF
	case MRT:
		return RegionAF
	case MDG:
		return RegionAF
	case MYT:
		return RegionAF
	case MAC:
		return RegionAS
	case MKD:
		return RegionEU
	case MWI:
		return RegionAF
	case MYS:
		return RegionAS
	case MLI:
		return RegionAF
	case MDV:
		return RegionAS
	case MLT:
		return RegionEU
	case MNP:
		return RegionOC
	case MAR:
		return RegionAF
	case MTQ:
		return RegionNA
	case MHL:
		return RegionOC
	case MEX:
		return RegionNA
	case FSM:
		return RegionOC
	case MOZ:
		return RegionAF
	case MDA:
		return RegionEU
	case MCO:
		return RegionEU
	case MNG:
		return RegionAS
	case MSR:
		return RegionNA
	case MMR:
		return RegionAS
	case NAM:
		return RegionAF
	case NRU:
		return RegionOC
	case NPL:
		return RegionAS
	case NER:
		return RegionAF
	case NGA:
		return RegionAF
	case NLD:
		return RegionEU
	case NIC:
		return RegionNA
	case NIU:
		return RegionOC
	case NZL:
		return RegionOC
	case NCL:
		return RegionOC
	case NOR:
		return RegionEU
	case OMN:
		return RegionAS
	case BVT:
		return RegionAN
	case IMN:
		return RegionEU
	case NFK:
		return RegionOC
	case PCN:
		return RegionOC
	case CXR:
		return RegionAS
	case SHN:
		return RegionAF
	case WLF:
		return RegionOC
	case HMD:
		return RegionAN
	case CPV:
		return RegionAF
	case COK:
		return RegionOC
	case WSM:
		return RegionOC
	case SJM:
		return RegionEU
	case TCA:
		return RegionNA
	case UMI:
		return RegionOC
	case PAK:
		return RegionAS
	case PLW:
		return RegionOC
	case PSE:
		return RegionAS
	case PAN:
		return RegionNA
	case PNG:
		return RegionOC
	case PRY:
		return RegionSA
	case PER:
		return RegionSA
	case POL:
		return RegionEU
	case PRT:
		return RegionEU
	case PRI:
		return RegionNA
	case REU:
		return RegionAF
	case RUS:
		return RegionEU
	case RWA:
		return RegionAF
	case ROU:
		return RegionEU
	case SLV:
		return RegionNA
	case SMR:
		return RegionEU
	case STP:
		return RegionAF
	case SAU:
		return RegionAS
	case SWZ:
		return RegionAF
	case SYC:
		return RegionAF
	case SEN:
		return RegionAF
	case SPM:
		return RegionNA
	case VCT:
		return RegionNA
	case KNA:
		return RegionNA
	case LCA:
		return RegionNA
	case SGP:
		return RegionAS
	case SYR:
		return RegionAS
	case SVK:
		return RegionEU
	case SVN:
		return RegionEU
	case USA:
		return RegionNA
	case SLB:
		return RegionOC
	case SOM:
		return RegionAF
	case SDN:
		return RegionAF
	case SUR:
		return RegionSA
	case SLE:
		return RegionAF
	case TJK:
		return RegionAS
	case TWN:
		return RegionAS
	case THA:
		return RegionAS
	case TZA:
		return RegionAF
	case TGO:
		return RegionAF
	case TKL:
		return RegionOC
	case TON:
		return RegionOC
	case TTO:
		return RegionNA
	case TUV:
		return RegionOC
	case TUN:
		return RegionAF
	case TKM:
		return RegionAS
	case TUR:
		return RegionEU
	case UGA:
		return RegionAF
	case UZB:
		return RegionAS
	case UKR:
		return RegionEU
	case URY:
		return RegionSA
	case FRO:
		return RegionEU
	case FJI:
		return RegionOC
	case PHL:
		return RegionAS
	case FIN:
		return RegionEU
	case FLK:
		return RegionSA
	case FRA:
		return RegionEU
	case GUF:
		return RegionSA
	case PYF:
		return RegionOC
	case ATF:
		return RegionAN
	case HRV:
		return RegionEU
	case CAF:
		return RegionAF
	case TCD:
		return RegionAF
	case CZE:
		return RegionEU
	case CHL:
		return RegionSA
	case CHE:
		return RegionEU
	case SWE:
		return RegionEU
	case LKA:
		return RegionAS
	case ECU:
		return RegionSA
	case GNQ:
		return RegionAF
	case ERI:
		return RegionAF
	case EST:
		return RegionEU
	case ETH:
		return RegionAF
	case ZAF:
		return RegionAF
	case YUG:
		return RegionEU
	case SGS:
		return RegionAN
	case JAM:
		return RegionNA
	case MNE:
		return RegionEU
	case BLM:
		return RegionNA
	case SXM:
		return RegionNA
	case SRB:
		return RegionEU
	case ALA:
		return RegionEU
	case BES:
		return RegionNA
	case GGY:
		return RegionEU
	case JEY:
		return RegionEU
	case CUW:
		return RegionOC
	case MAF:
		return RegionNA
	case SSD:
		return RegionAF
	case XKX:
		return RegionEU
	case NON, International, NonCountryInternationalFreephone, NonCountryInmarsat, NonCountryMaritimeMobileService,
		NonCountryUniversalPersonalTelecommunicationsServices, NonCountryNationalNonCommercialPurposes, NonCountryGlobalMobileSatelliteSystem,
		NonCountryInternationalNetworks, NonCountryDisasterRelief, NonCountryInternationalPremiumRateService,
		NonCountryInternationalTelecommunicationsCorrespondenceService:
		return RegionNone
	case JPN:
		return RegionAS
	}
	return RegionUnknown
}

// Capital - return a capital of country
//
//nolint:gocyclo
func (c CountryCode) Capital() CapitalCode { //nolint:gocyclo
	switch c {
	case AUS:
		return CapitalAU
	case AUT:
		return CapitalAT
	case AZE:
		return CapitalAZ
	case ALB:
		return CapitalAL
	case DZA:
		return CapitalDZ
	case ASM:
		return CapitalAS
	case AIA:
		return CapitalAI
	case AGO:
		return CapitalAO
	case AND:
		return CapitalAD
	case ATA:
		return CapitalAQ
	case ATG:
		return CapitalAG
	case ANT:
		return CapitalAN
	case ARE:
		return CapitalAE
	case ARG:
		return CapitalAR
	case ARM:
		return CapitalAM
	case ABW:
		return CapitalAW
	case AFG:
		return CapitalAF
	case BHS:
		return CapitalBS
	case BGD:
		return CapitalBD
	case BRB:
		return CapitalBB
	case BHR:
		return CapitalBH
	case BLR:
		return CapitalBY
	case BLZ:
		return CapitalBZ
	case BEL:
		return CapitalBE
	case BEN:
		return CapitalBJ
	case BMU:
		return CapitalBM
	case BGR:
		return CapitalBG
	case BOL:
		return CapitalBO
	case BIH:
		return CapitalBA
	case BWA:
		return CapitalBW
	case BRA:
		return CapitalBR
	case IOT:
		return CapitalIO
	case BRN:
		return CapitalBN
	case BFA:
		return CapitalBF
	case BDI:
		return CapitalBI
	case BTN:
		return CapitalBT
	case VUT:
		return CapitalVU
	case VAT:
		return CapitalVA
	case GBR:
		return CapitalGB
	case HUN:
		return CapitalHU
	case VEN:
		return CapitalVE
	case VGB:
		return CapitalVG
	case VIR:
		return CapitalVI
	case TLS:
		return CapitalTL
	case VNM:
		return CapitalVN
	case GAB:
		return CapitalGA
	case HTI:
		return CapitalHT
	case GUY:
		return CapitalGY
	case GMB:
		return CapitalGM
	case GHA:
		return CapitalGH
	case GLP:
		return CapitalGP
	case GTM:
		return CapitalGT
	case GIN:
		return CapitalGN
	case GNB:
		return CapitalGW
	case DEU:
		return CapitalDE
	case GIB:
		return CapitalGI
	case HND:
		return CapitalHN
	case HKG:
		return CapitalHK
	case GRD:
		return CapitalGD
	case GRL:
		return CapitalGL
	case GRC:
		return CapitalGR
	case GEO:
		return CapitalGE
	case GUM:
		return CapitalGU
	case DNK:
		return CapitalDK
	case COD:
		return CapitalCD
	case DJI:
		return CapitalDJ
	case DMA:
		return CapitalDM
	case DOM:
		return CapitalDO
	case EGY:
		return CapitalEG
	case ZMB:
		return CapitalZM
	case ESH:
		return CapitalEH
	case ZWE:
		return CapitalZW
	case ISR:
		return CapitalIL
	case IND:
		return CapitalIN
	case IDN:
		return CapitalID
	case JOR:
		return CapitalJO
	case IRQ:
		return CapitalIQ
	case IRN:
		return CapitalIR
	case IRL:
		return CapitalIE
	case ISL:
		return CapitalIS
	case ESP:
		return CapitalES
	case ITA:
		return CapitalIT
	case YEM:
		return CapitalYE
	case KAZ:
		return CapitalKZ
	case CYM:
		return CapitalKY
	case KHM:
		return CapitalKH
	case CMR:
		return CapitalCM
	case CAN:
		return CapitalCA
	case QAT:
		return CapitalQA
	case KEN:
		return CapitalKE
	case CYP:
		return CapitalCY
	case KIR:
		return CapitalKI
	case CHN:
		return CapitalCN
	case CCK:
		return CapitalCC
	case COL:
		return CapitalCO
	case COM:
		return CapitalKM
	case COG:
		return CapitalCG
	case PRK:
		return CapitalKP
	case KOR:
		return CapitalKR
	case CRI:
		return CapitalCR
	case CIV:
		return CapitalCI
	case CUB:
		return CapitalCU
	case KWT:
		return CapitalKW
	case KGZ:
		return CapitalKG
	case LAO:
		return CapitalLA
	case LVA:
		return CapitalLV
	case LSO:
		return CapitalLS
	case LBR:
		return CapitalLR
	case LBN:
		return CapitalLB
	case LBY:
		return CapitalLY
	case LTU:
		return CapitalLT
	case LIE:
		return CapitalLI
	case LUX:
		return CapitalLU
	case MUS:
		return CapitalMU
	case MRT:
		return CapitalMR
	case MDG:
		return CapitalMG
	case MYT:
		return CapitalYT
	case MAC:
		return CapitalMO
	case MKD:
		return CapitalMK
	case MWI:
		return CapitalMW
	case MYS:
		return CapitalMY
	case MLI:
		return CapitalML
	case MDV:
		return CapitalMV
	case MLT:
		return CapitalMT
	case MNP:
		return CapitalMP
	case MAR:
		return CapitalMA
	case MTQ:
		return CapitalMQ
	case MHL:
		return CapitalMH
	case MEX:
		return CapitalMX
	case FSM:
		return CapitalFM
	case MOZ:
		return CapitalMZ
	case MDA:
		return CapitalMD
	case MCO:
		return CapitalMC
	case MNG:
		return CapitalMN
	case MSR:
		return CapitalMS
	case MMR:
		return CapitalMM
	case NAM:
		return CapitalNA
	case NRU:
		return CapitalNR
	case NPL:
		return CapitalNP
	case NER:
		return CapitalNE
	case NGA:
		return CapitalNG
	case NLD:
		return CapitalNL
	case NIC:
		return CapitalNI
	case NIU:
		return CapitalNU
	case NZL:
		return CapitalNZ
	case NCL:
		return CapitalNC
	case NOR:
		return CapitalNO
	case OMN:
		return CapitalOM
	case BVT:
		return CapitalBV
	case IMN:
		return CapitalIM
	case NFK:
		return CapitalNF
	case PCN:
		return CapitalPN
	case CXR:
		return CapitalCX
	case SHN:
		return CapitalSH
	case WLF:
		return CapitalWF
	case HMD:
		return CapitalHM
	case CPV:
		return CapitalCV
	case COK:
		return CapitalCK
	case WSM:
		return CapitalWS
	case SJM:
		return CapitalSJ
	case TCA:
		return CapitalTC
	case UMI:
		return CapitalUM
	case PAK:
		return CapitalPK
	case PLW:
		return CapitalPW
	case PSE:
		return CapitalPS
	case PAN:
		return CapitalPA
	case PNG:
		return CapitalPG
	case PRY:
		return CapitalPY
	case PER:
		return CapitalPE
	case POL:
		return CapitalPL
	case PRT:
		return CapitalPT
	case PRI:
		return CapitalPR
	case REU:
		return CapitalRE
	case RUS:
		return CapitalRU
	case RWA:
		return CapitalRW
	case ROU:
		return CapitalRO
	case SLV:
		return CapitalSV
	case SMR:
		return CapitalSM
	case STP:
		return CapitalST
	case SAU:
		return CapitalSA
	case SWZ:
		return CapitalSZ
	case SYC:
		return CapitalSC
	case SEN:
		return CapitalSN
	case SPM:
		return CapitalPM
	case VCT:
		return CapitalVC
	case KNA:
		return CapitalKN
	case LCA:
		return CapitalLC
	case SGP:
		return CapitalSG
	case SYR:
		return CapitalSY
	case SVK:
		return CapitalSK
	case SVN:
		return CapitalSI
	case USA:
		return CapitalUS
	case SLB:
		return CapitalSB
	case SOM:
		return CapitalSO
	case SDN:
		return CapitalSD
	case SUR:
		return CapitalSR
	case SLE:
		return CapitalSL
	case TJK:
		return CapitalTJ
	case TWN:
		return CapitalTW
	case THA:
		return CapitalTH
	case TZA:
		return CapitalTZ
	case TGO:
		return CapitalTG
	case TKL:
		return CapitalTK
	case TON:
		return CapitalTO
	case TTO:
		return CapitalTT
	case TUV:
		return CapitalTV
	case TUN:
		return CapitalTN
	case TKM:
		return CapitalTM
	case TUR:
		return CapitalTR
	case UGA:
		return CapitalUG
	case UZB:
		return CapitalUZ
	case UKR:
		return CapitalUA
	case URY:
		return CapitalUY
	case FRO:
		return CapitalFO
	case FJI:
		return CapitalFJ
	case PHL:
		return CapitalPH
	case FIN:
		return CapitalFI
	case FLK:
		return CapitalFK
	case FRA:
		return CapitalFR
	case GUF:
		return CapitalGF
	case PYF:
		return CapitalPF
	case ATF:
		return CapitalTF
	case HRV:
		return CapitalHR
	case CAF:
		return CapitalCF
	case TCD:
		return CapitalTD
	case CZE:
		return CapitalCZ
	case CHL:
		return CapitalCL
	case CHE:
		return CapitalCH
	case SWE:
		return CapitalSE
	case LKA:
		return CapitalLK
	case ECU:
		return CapitalEC
	case GNQ:
		return CapitalGQ
	case ERI:
		return CapitalER
	case EST:
		return CapitalEE
	case ETH:
		return CapitalET
	case ZAF:
		return CapitalZA
	case YUG:
		return CapitalYU
	case SGS:
		return CapitalGS
	case JAM:
		return CapitalJM
	case MNE:
		return CapitalME
	case BLM:
		return CapitalBL
	case SXM:
		return CapitalSX
	case SRB:
		return CapitalRS
	case ALA:
		return CapitalAX
	case BES:
		return CapitalBQ
	case GGY:
		return CapitalGG
	case JEY:
		return CapitalJE
	case CUW:
		return CapitalCW
	case MAF:
		return CapitalMF
	case SSD:
		return CapitalSS
	case XKX:
		return CapitalXK
	case JPN:
		return CapitalJP
	case NON, International, NonCountryInternationalFreephone, NonCountryInmarsat, NonCountryMaritimeMobileService,
		NonCountryUniversalPersonalTelecommunicationsServices, NonCountryNationalNonCommercialPurposes, NonCountryGlobalMobileSatelliteSystem,
		NonCountryInternationalNetworks, NonCountryDisasterRelief, NonCountryInternationalPremiumRateService,
		NonCountryInternationalTelecommunicationsCorrespondenceService:
		return CapitalXX
	}
	return CapitalUnknown
}

// Info - return all info about country as Country struct
func (c CountryCode) Info() *Country {
	return &Country{
		Name:         c.String(),
		Alpha2:       c.Alpha2(),
		Alpha3:       c.Alpha3(),
		FIPS:         c.FIPS(),
		IOC:          c.IOC(),
		FIFA:         c.FIFA(),
		Emoji:        c.Emoji(),
		Code:         c,
		Capital:      c.Capital(),
		Currency:     c.Currency(),
		CallCodes:    c.CallCodes(),
		Domain:       c.Domain(),
		Region:       c.Region(),
		Subdivisions: c.Subdivisions(),
	}
}

// Subdivisions - return all subdivisions for a country as a slice of SubdivisionCodes
func (c CountryCode) Subdivisions() []SubdivisionCode {
	return SubdivisionsByCountryCode(c)
}

// Type implements Typer interface.
func (_ *Country) Type() string {
	return TypeCountry
}

// Value implements database/sql/driver.Valuer
func (country Country) Value() (Value, error) {
	return json.Marshal(country)
}

// Scan implements database/sql.Scanner
func (country *Country) Scan(src interface{}) error {
	if country == nil {
		return fmt.Errorf("countries::Scan: Country scan err: country == nil")
	}
	switch src := src.(type) {
	case *Country:
		*country = *src
	case Country:
		*country = src
	default:
		return fmt.Errorf("countries::Scan: Country scan err: unexpected value of type %T for %T", src, *country)
	}
	return nil
}

// AllInfo - return all currencies as []Currency
func AllInfo() []*Country {
	all := All()
	countries := make([]*Country, 0, len(all))
	for _, v := range all {
		countries = append(countries, v.Info())
	}
	return countries
}

// ByName - return CountryCode by country Alpha-2 / Alpha-3 / name, case-insensitive, example: rus := ByName("Ru") OR rus := ByName("russia"),
// returns countries.Unknown, if country name not found or not valid
//
//nolint:misspell,gocyclo
func ByName(name string) CountryCode { //nolint:misspell,gocyclo
	switch textPrepare(name) {
	case "AU", "AUS", "AUSTRALIA", "AVSTRALIA", "AVSTRALIYA", "AUSTRALIYA", "AUSTRALIEN":
		return AUS
	case "AT", "AUT", "AUSTRIA", "AVSTRIA", "AUSTRIYA", "AVSTRIYA", "ÖSTERREICH", "OESTERREICH":
		return AUT
	case "AZ", "AZE", "AZERBAIJAN", "AYZERBAIJAN", "AZERBAIDJAN", "AYZERBAIDJAN", "ASERBAIDSCHAN":
		return AZE
	case "AL", "ALB", "ALBANIA", "ALBANIYA", "ALBANIEN":
		return ALB
	case "DZ", "DZA", "ALGERIA", "ALGERIYA", "ALGERIEN":
		return DZA
	case "AS", "ASM", "AMERICANSAMOA", "AMERICASAMOA", "SAMOAAMERICAN", "SAMOAMERICAN", "SAMOAMERICA", "AMERIKANISCHSAMOA":
		return ASM
	case "AI", "AIA", "ANGUILLA", "ANGUILA":
		return AIA
	case "XEN", "ENG", "ENGLAND", "INGLAND":
		return GBR
	case "AO", "AGO", "ANGOLA", "ANGOLIA":
		return AGO
	case "AD", "AND", "ANDORRA", "ANDORA":
		return AND
	case "AQ", "ATA", "NQ", "ATB", "ATN", "BQAQ", "NQAQ", "ANTARCTICA", "ANTARKTICA", "ANTARCTIKA", "ANTARKTIKA", "ANTARCTIC", "ANTARKTIC", "ANTARCTIK", "ANTARKTIK", "ANTARKTIS":
		return ATA
	case "AG", "ATG", "ANTIGUAANDBARBUDA", "ANTIGUABARBUDA", "ANTIGUA", "ANTIGUAUNDBARBUDA":
		return ATG
	case "AN", "ANT", "AHO", "ANHH", "NETHERLANDSANTILLES", "NETHERLSANTILLES", "NETHERLANDSANTILES", "NETHERLSANTILES", "NIEDERLAENDISCHEANTILLEN", "NIEDERLÄNDISCHANTILLEN":
		return ANT
	case "AE", "ARE", "UAE", "UNITEDARABEMIRATES", "ARABEMIRATES", "UNITEDEMIRATES", "VEREINIGTEARABISCHEEMIRATE":
		return ARE
	case "AR", "ARG", "ARGENTINA", "ARGENTIN", "RA", "ARGENTINIEN":
		return ARG
	case "AM", "ARM", "ARMENIA", "ARMENIYA", "ARMENIAN", "ARMENIEN":
		return ARM
	case "AW", "ABW", "ARUBA":
		return ABW
	case "AF", "AFG", "AFGHANISTAN", "AFHANISTAN", "AFGANISTAN", "AFGHANIAN", "AFGANIAN", "AFGHAN", "AFGHANI":
		return AFG
	case "BS", "BHS", "BAHAMAS", "BAGHAMAS", "BAGAMAS", "BAHAMIAN", "BAGAMIAN":
		return BHS
	case "BD", "BGD", "BANGLADESH", "BANGLADEH", "BANHGLADESH", "BANHLADESH", "BANHLADEH":
		return BGD
	case "BB", "BRB", "BAR", "BDS", "BARBADOS", "BARBODOS":
		return BRB
	case "BH", "BHR", "BAHRAIN", "BAGHRAIN":
		return BHR
	case "BY", "BLR", "BYS", "BYAA", "BELARUS", "BELORUS", "BELLARUSSIA", "BELARUSSIA", "BELLORUSSIA", "BELORUSSIA", "BELLARUSSIAN", "BELARUSSIAN", "BELLORUSSIAN", "BELORUSSIAN", "BYELORUSSIAN", "BYELORUSSIA", "BYELORUSSIYA", "WEISSRUSSLAND":
		return BLR
	case "BZ", "BLZ", "BIZ", "BELIZE":
		return BLZ
	case "BE", "BEL", "BELGIUM", "BELGUM", "BELGIEN":
		return BEL
	case "BJ", "BEN", "DHY", "BENIN", "DY", "DYBJ":
		return BEN
	case "BM", "BMU", "BERMUDA", "BERMUDS", "BERMUD":
		return BMU
	case "BG", "BGR", "BULGARIA", "BULGARIYA", "BULGARY", "BOLGARIA", "BOLGARIYA", "BULGARIEN":
		return BGR
	case "BO", "BOL", "BOLIVIA", "BOLIVIYA", "BOLIVIAN", "BOLIVIAPLURINATIONALSTATEOF", "BOLIVIAPLURINATIONALSTATE", "BOLIVIEN":
		return BOL
	case "BA", "BIH", "BOSNIAANDHERZEGOVINA", "BOSNIAHERZEGOVINA", "BOSNIA", "BOSNIEN", "BOSNIENUNDHERZEGOWINA":
		return BIH
	case "BW", "BWA", "BOTSWANA", "BOTSWANNA", "BOTSVANA", "BOTSVANNA":
		return BWA
	case "BR", "BRA", "BRAZIL", "BRAZILIA", "BRAZILIYA", "BRAZILIAN", "BRASILIEN", "REPUBLICOFBRAZIL", "FEDERATIVEREPUBLICOFBRAZIL":
		return BRA
	case "IO", "IOT", "BRITISHINDIANOCEANTERRITORY", "BRITISHINDIANTERRITORY", "BRITISCHESTERRITORIUM", "BRITISCHESTERRITORIUMIMINDISCHENOZEAN":
		return IOT
	case "BN", "BRN", "BRU", "BRUNEI", "BRUNEY", "BRUNEIDARUSSALAM":
		return BRN
	case "BF", "BFA", "HV", "HVO", "BURKINAFASO", "BURKINAANDFASO", "BURCINAFASO", "BURCINAANDFASO", "HVBF":
		return BFA
	case "BI", "BDI", "BURUNDI":
		return BDI
	case "BT", "BTN", "BHUTAN", "BGHUTAN":
		return BTN
	case "VU", "VUT", "NHB", "VANUATU", "NH", "NHVU":
		return VUT
	case "VA", "VAT", "HOLYSEEVATICAN", "HOLYSEE", "VATICAN", "VATICANCITYSTATE", "VATICANSTATE", "HOLYSEEVATIKAN", "VATIKAN", "VATIKANCITYSTATE", "VATIKANSTATE", "HOLYSEEVATIKANCITYSTATE", "VATIKANSTADT", "VATICANCITY", "CITYVATICAN":
		return VAT
	case "GB", "DG", "GBR", "ADN", "DGA", "UNITEDKINGDOM", "UNITEDKINDOM", "UK", "GREATBRITAN", "GREATBRITAIN", "NORTHERNIRELAND", "BRITAN", "BRITAIN", "GROSSBRITANNIEN", "VEREINIGTESKÖNIGREICH", "VEREINIGTESKOENIGREICH": //nolint
		return GBR
	case "HU", "HUN", "HUNGARY", "HUNGAR", "HUNGARI", "VENGRIYA", "VENGRIA", "UNGARN":
		return HUN
	case "VE", "VEN", "VENEZUELA", "VENEZUELLA", "VENECUELA", "VENECUELLA", "YV", "BOLIVARIANREPUBLICOF", "BOLIVARIANREPUBLIC", "REPUBLICOFBOLIVARIAN", "REPUBLICBOLIVARIAN", "BOLIVARIAN": //nolint
		return VEN
	case "VG", "VGB", "IVB", "VIRGINISLANDSBRITISH", "VIRGINISLANDSBRITIH", "VIRGINISLSBRITIH", "VIRGINISLSBRITISH", "VIRGINISLANDSGB", "VIRGINISLANDSUK", "BRITISCHEJUNGFERNINSELN", "BRITISHVIRGINISLANDS":
		return VGB
	case "VI", "VIR", "ISV", "VIRGINISLANDSUS", "USVIRGINISLANDS", "USVI", "AMERIKANISCHEJUNGFERNINSELN":
		return VIR
	case "TL", "TP", "TLS", "TMP", "TPTL", "TIMORLESTE", "EASTTIMOR", "TIMOR", "TIMORELESTE", "EASTTIMORE", "TIMORE", "TIMORLESTEEASTTIMORE", "OSTTIMOR":
		return TLS
	case "VN", "VNM", "VIE", "VDR", "VD", "VIETNAM", "VETNAM", "VIETNAME", "VETNAME", "VDVN", "VIỆTNAM", "CỘNGHÒAXÃHỘICHỦNGHĨAVIỆTNAM", "CHỦNGHĨAVIỆTNAM", "NGHĨAVIỆTNAM":
		return VNM
	case "GA", "GAB", "GABON", "GABUN":
		return GAB
	case "HT", "HTI", "HAITI", "GAITI":
		return HTI
	case "GY", "GUY", "GUYANA":
		return GUY
	case "GM", "GMB", "WAG", "GAMBIA", "GAMBIYA":
		return GMB
	case "GH", "GHA", "GHANA", "HANA":
		return GHA
	case "GP", "GLP", "GUADELOUPE", "GUADELUPE", "GUADELOOPE", "GUADELOUPA", "GUADELUPA", "GUADELOOPA":
		return GLP
	case "GT", "GTM", "GCA", "GUATEMALA":
		return GTM
	case "GN", "GIN", "GUINEA", "GUINEYA":
		return GIN
	case "GW", "GNB", "GBS", "GUINEABISSAU":
		return GNB
	case "DE", "DEU", "DD", "DDR", "GER", "GERMANY", "GERMANIYA", "DEUTSCHLAND", "DEUTSCH", "DDDE":
		return DEU
	case "GI", "GIB", "GBZ", "GIBRALTAR", "HIBRALTAR":
		return GIB
	case "HN", "HND", "HONDURAS", "GONDURAS":
		return HND
	case "HK", "HKG", "HONGKONG", "HONKONG":
		return HKG
	case "GD", "GRD", "GRENADA", "GRINADA", "WG":
		return GRD
	case "GL", "GRL", "GREENLAND", "GRÖNLAND", "GROENLAND":
		return GRL
	case "GR", "GRC", "GREECE", "GRECE", "GRIECHENLAND", "GRECIYA":
		return GRC
	case "GE", "GEO", "GEORGIA", "GEORGIYA", "GEORGIEN", "GRUZIYA":
		return GEO
	case "GU", "GUM", "GUAM":
		return GUM
	case "DK", "DNK", "DENMARK", "DANMARK", "DÄNEMARK", "DAENEMARK", "KONGERIGETDANMARK", "DANMARKKONGERIGET", "DANIYA":
		return DNK
	case "CD", "COD", "ZRE", "ZAR", "ZR", "ZRCD", "CONGODEMOCRATICREPUBLIC", "DEMOCRATICREPUBLICOFTHECONGO", "CONGODEMOCRATICREP", "CONGODEMOCRATIC", "CONGOTHEDEMOCRATICREPUBLICOF", "CONGOTHEDEMOCRATICREPUBLIC", "KONGODEMOCRACTICREPUBLIC", "KONGODEMOCRATICREP", "KONGODEMOCRATIC", "KONGOTHEDEMOCRATICREPUBLICOF", "ZAIRE", "ZAIR", "DEMOKRATISCHEREPUBLIKKONGO", "CONGOREPUBLIC", "KONGOREPUBLIC", "REPUBLICOFCONGO", "REPUBLICOFKONGO", "CONGOTHEDEMOCRATICREPUBLICOFTHE", "DRCONGO":
		return COD
	case "DJ", "DJI", "AFI", "DJIBOUTI", "AIDJ", "DSCHIBUTI":
		return DJI
	case "DM", "DMA", "DOMINICA", "DOMINIKA":
		return DMA
	case "DO", "DOM", "DOMINICANREPUBLIC", "DOMINICANA", "DOMINIKANA", "DOMINIKANISCHEREPUBLIK":
		return DOM
	case "EG", "EGY", "EGYPT", "ÄGYPTEN", "AEGYPTEN":
		return EGY
	case "ZM", "ZMB", "RNR", "ZAMBIA", "SAMBIA":
		return ZMB
	case "EH", "ESH", "WESTERNSAHARA", "WESTSAHARA":
		return ESH
	case "ZW", "ZWE", "ZIM", "RHO", "RSR", "ZIMBABWE", "ZIMBABVE", "RH", "RHZW", "SIMBABWE":
		return ZWE
	case "IL", "ISR", "ISRAEL", "IZRAIL", "ISRAIL", "ISRAILIAN", "IZRAILEN":
		return ISR
	case "IN", "IND", "INDIA", "INDIAN", "INDIYA", "SKM", "SKIN", "INDIEN":
		return IND
	case "ID", "IDN", "INA", "INDONESIA", "REPUBLICOFINDONESIA", "RI", "INDONESIEN":
		return IDN
	case "JO", "JOR", "HKJ", "JORDAN", "JORDANIEN":
		return JOR
	case "IQ", "IRQ", "IRAQ", "IRAK":
		return IRQ
	case "IR", "IRN", "IRI", "IRAN", "IRANISLAMICREPUBLICOF", "IRANISLAMICREPUBLIC", "IRANIAN":
		return IRN
	case "IE", "IRL", "IRELAND", "IRLAND":
		return IRL
	case "IS", "ISL", "ICELAND", "ISLAND":
		return ISL
	case "ES", "EA", "IC", "ESP", "SPAIN", "SPANIEN", "ISPANIA":
		return ESP
	case "IT", "ITA", "ITALY", "ITALIYA", "ITALIEN":
		return ITA
	case "YE", "YEM", "YMD", "YEMEN", "IEMEN", "YD", "YDYE", "JEMEN":
		return YEM
	case "KZ", "KAZ", "KAZAKHSTAN", "KAZAHSTAN", "KASACHSTAN":
		return KAZ
	case "KY", "CYM", "CAYMANISLANDS", "KAYMANISLANDS", "KAIMANINSELN":
		return CYM
	case "KH", "KHM", "CAMBODIA", "KAMBODSCHA":
		return KHM
	case "CM", "CMR", "CAMEROON", "KAMERUN":
		return CMR
	case "CA", "CAN", "CDN", "CANADA", "KANADA":
		return CAN
	case "QA", "QAT", "QATAR", "KATAR":
		return QAT
	case "KE", "KEN", "EAK", "KENYA":
		return KEN
	case "CY", "CYP", "CYPRUS", "CIPRUS", "ZYPERN", "REPUBLIKZYPERN":
		return CYP
	case "KI", "KIR", "CT", "CTE", "CTKI", "KIRIBATI", "CIRIBATI", "KIRIBATY", "CIRIBATY":
		return KIR
	case "CN", "CHN", "CHINA", "CHINESE", "RC", "KITAY":
		return CHN
	case "CC", "CCK", "KEELING", "COCOS", "COCOSKEELINGISLANDS", "COCOSISLANDS", "KOKOSISLANDS", "KOKOSINSELN":
		return CCK
	case "CO", "COL", "COLOMBIA", "KOLUMBIEN":
		return COL
	case "KM", "COM", "COMOROS", "KOMOREN":
		return COM
	case "CG", "COG", "RCB", "CONGO", "KONGO":
		return COG
	case "KP", "PRK", "DEMOCRATICPEOPLESREPUBLICOFKOREA", "KOREADEMOCRATICPEOPLESREPUBLICOF", "KOREADEMOCRATICPEOPLESREPUBLIC", "KOREANORTH", "NORTHKOREA", "NORDKOREA":
		return PRK
	case "KR", "KOR", "ROK", "KOREA", "KOREYA", "SOUTHKOREA", "KOREAREPUBLICOF", "KOREAREPUBLIC", "REPUBLICOFKOREA", "KOREAREPOF", "SÜDKOREA", "SUEDKOREA":
		return KOR
	case "CR", "CRI", "COSTARICA", "KOSTARIKA", "KOSTARICA", "COSTARIKA":
		return CRI
	case "CI", "CIV", "COTEDIVOIRE", "CÔTEDIVOIRE", "IVORYCOAST", "ELFENBEINKÜSTE", "ELFENBEINKUESTE":
		return CIV
	case "CU", "CUB", "CUBA", "CUBAREPUBLIC", "REPUBLICCUBA", "KUBA":
		return CUB
	case "KW", "KWT", "KUWAIT":
		return KWT
	case "KG", "KGZ", "KYRGYZSTAN", "KIRGISISTAN":
		return KGZ
	case "LA", "LAO", "LAOS", "LAODEMOCRATICPEOPLESREPUBLIC", "LAOSDEMOCRATICPEOPLESREPUBLIC", "LAOPEOPLESDEMOCRATICREPUBLIC":
		return LAO
	case "LV", "LVA", "LAT", "LATVIA", "LATVIYA", "LETTLAND":
		return LVA
	case "LS", "LSO", "LESOTHO":
		return LSO
	case "LR", "LBR", "LIBERIA":
		return LBR
	case "LB", "LBN", "LEBANON", "RL", "LIBANON":
		return LBN
	case "LY", "LBY", "LBA", "LIBYA", "LIVIA", "LIVIYA", "LIBYAN", "LIBYANARABJAMAHIRIYA", "LF", "LIBYEN":
		return LBY
	case "LT", "LTU", "LITHUANIA", "LITAUEN", "LITVA":
		return LTU
	case "LI", "LIE", "LIECHTENSTEIN", "LIEHTENSTEIN", "FL":
		return LIE
	case "LU", "LUX", "LUXEMBOURG", "LUXEMBURG":
		return LUX
	case "MU", "MUS", "MAURITIUS":
		return MUS
	case "MR", "MRT", "MAURITANIA", "MAURETANIEN":
		return MRT
	case "MG", "MDG", "MADAGASCAR", "RM", "MADAGASKAR":
		return MDG
	case "YT", "MYT", "MAYOTTE":
		return MYT
	case "MO", "MAC", "MACAUCHINA", "MACAU", "MACAO", "MACAUSAR", "MACAOSAR":
		return MAC
	case "MK", "MKD", "MACEDONIA", "MACEDONIAFYRO", "MACEDONIATHEFORMERYUGOSLAVREPUBLICOF", "MACEDONIATHEFORMERYUGOSLAV", "MACEDONIATHEFORMERYUGOSLAVREPUBLIC", "REPUBLICOFNORTHMACEDONIA", "REPUBLICOFMACEDONIA", "NORTHMACEDONIA", "MACEDONIANORTH", "NORDMAZEDONIEN", "THEFORMERYUGOSLAVREPUBLICOF", "THEFORMERYUGOSLAVREPUBLIC", "FORMERYUGOSLAVREPUBLICOF", "FORMERYUGOSLAVREPUBLIC", "MACEDONIAFORMERYUGOSLAVREPUBLICOF", "MACEDONIAFORMERYUGOSLAVREPUBLIC", "YUGOSLAVREPUBLIC":
		return MKD
	case "MW", "MWI", "MAW", "MALAWI", "MALAVI":
		return MWI
	case "MY", "MYS", "MAL", "MALAYSIA", "MALAYSIYA":
		return MYS
	case "ML", "MLI", "RMM", "MALI":
		return MLI
	case "MV", "MDV", "MALDIVES", "MALEDIVEN":
		return MDV
	case "MT", "MLT", "MALTA":
		return MLT
	case "MP", "MNP", "NORTHERNMARIANAISLANDS", "NORTHERNMARIANAIS", "MARIANAISLANDS", "NÖRDLICHEMARIANEN", "NOERDLICHEMARIANEN":
		return MNP
	case "MA", "MAR", "MOROCCO", "MOROCO", "MOROKO", "MAROKKO":
		return MAR
	case "MQ", "MTQ", "MARTINIQUE":
		return MTQ
	case "MH", "MHL", "MARSHALLISLANDS", "MARSHALL", "REPUBLICOFTHEMARSHALLISLANDS", "MARSHALLINSELN":
		return MHL
	case "MX", "MEX", "MEXICO", "MEXIKO":
		return MEX
	case "FM", "FSM", "MICRONESIA", "MICRONESIAFEDERATEDSTATESOF", "MICRONESIAFEDST", "MIKRONESIEN", "FEDERATEDSTATESOFMICRONESIA", "STATESOFMICRONESIA", "FEDERATEDSTATESMICRONESIA", "STATESMICRONESIA":
		return FSM
	case "MZ", "MOZ", "MOZAMBIQUE", "MOZAMBIQ", "MOSAMBIK":
		return MOZ
	case "MD", "MDA", "MOLDOVA", "MOLDAVIA", "MOLDAVIAN", "MOLDAVIYA", "REPUBLIKMOLDOVA", "REPUBLICOFMOLDOVA", "MOLDOVAREPUBLICOF", "MOLDOVAREPUBLIC":
		return MDA
	case "MC", "MCO", "MONACO", "MONAKO":
		return MCO
	case "MN", "MNG", "MONGOLIA", "MONGOLIAN", "MONGOLIYA", "MONGOLEI":
		return MNG
	case "MS", "MSR", "MONTSERRAT":
		return MSR
	case "MM", "BU", "MMR", "BUMM", "MYANMAR", "BURMA":
		return MMR
	case "NA", "NAM", "NAMIBIA", "NAMIBIAN", "NAMIBIYA", "NAMIBIE":
		return NAM
	case "NR", "NRU", "NAURU":
		return NRU
	case "NP", "NPL", "NEPAL", "NEPALI":
		return NPL
	case "NE", "NER", "NIGER", "NIGGER", "RN":
		return NER
	case "NG", "NGA", "NGR", "WAN", "NIGERIA", "NIGERIAN", "NIGGERIAN", "NIGERIYA", "NIGGERIA", "NIGGERIYA":
		return NGA
	case "NL", "NLD", "NED", "NETHERLANDS", "NETHERLAND", "HOLLAND", "HOLLANDIA", "HOLLANDIYA", "NIEDERLANDE", "HOLAND", "HOLANDIA", "HOLANDIYA":
		return NLD
	case "NI", "NIC", "NICARAGUA":
		return NIC
	case "NU", "NIU", "NIUE":
		return NIU
	case "NZ", "NZL", "NEWZEALAND", "NEWZELANDIA", "NEWZELAND", "NEUSEELAND":
		return NZL
	case "NC", "NCL", "NEWCALEDONIA", "NEWCALEDONIYA", "NEUKALEDONIEN":
		return NCL
	case "NO", "NOR", "NORWAY", "NORWEGEN":
		return NOR
	case "OM", "OMN", "OMAN":
		return OMN
	case "BV", "BVT", "BOUVET", "BOUVETE", "BOUVETISLAND", "ISLANDOFBOUVET", "BOUVETINSEL":
		return BVT
	case "IM", "IMN", "GBM", "ISLEOFMAN":
		return IMN
	case "NF", "NFK", "NORFOLKISLAND", "NORFOLK", "NORFOLCISLAND", "NORFOLC", "NORFOLKINSEL":
		return NFK
	case "PN", "PCN", "PITCAIRN", "THEPITCAIRN", "PITCAIRNISLANDS", "THEPITCAIRNISLANDS", "DUCIEANDOENOISLANDS", "DUCIEANDOENO", "PITCAIRNINSELN":
		return PCN
	case "CX", "CXR", "CHRISTMASISLAND", "TERRITORYOFCHRISTMASISLAND", "WEIHNACHTSINSEL":
		return CXR
	case "SH", "TA", "SHN", "TAA", "ASC", "SAINTHELENA", "SAINTELENA", "STHELENA", "STELENA", "TRISTAN", "ASCENSIONANDTRISTANDACUNHA", "ASCENSIONTRISTANDACUNHA", "TRISTANDACUNHA", "SANKTHELENA":
		return SHN
	case "WF", "WLF", "WALLISANDFUTUNAISLANDS", "WALLISFUTUNAISLANDS", "WALLISANDFUTUNA", "WALLISFUTUNA", "WALLISUNDFUTUNA":
		return WLF
	case "HM", "HMD", "HEARDISLANDANDMCDONALDISLANDS", "HEARDISLAND", "HEARDUNDMCDONALDINSELN", "HEARDANDMCDONALDISLANDS":
		return HMD
	case "CV", "CPV", "CAPEVERDE", "KAPVERDE", "CABOVERDE":
		return CPV
	case "CK", "COK", "COOKISLANDS", "COOKINSELN":
		return COK
	case "WS", "WSM", "SAMOA":
		return WSM
	case "SJ", "SJM", "SVALBARDANDJANMAYENISLANDS", "SVALBARD", "SVALBARDUNDJANMAYEN", "SVALBARDANDJANMAYEN":
		return SJM
	case "TC", "TCA", "TURKSANDCAICOSISLANDS", "TURKSANDCAICOSIS", "CAICOSISLANDS", "CACOSISLANDS", "TURKSUNDCACIOINSELN":
		return TCA
	case "UM", "UMI", "UNITEDSTATESMINOROUTLYINGISLANDS", "MINOROUTLYINGISLANDS", "MINOROUTLYING", "USMI", "JT", "JTN", "JTUM", "MI", "MID", "MIUM", "PU", "PUS", "PUUM", "WK", "WAK", "WKUM", "KLEINEINSELBESITZUNGENDERVEREINIGTENSTAATEN", "USOUTLYINGISLANDS":
		return UMI
	case "PK", "PAK", "PAKISTAN", "PACISTAN":
		return PAK
	case "PW", "PLW", "PALAU":
		return PLW
	case "PS", "PSE", "PLE", "PALESTINE", "PALESTINA", "PALESTINIAN", "PALESTINIANTERRITORY", "PALÄSTINA", "PALAESTINA", "OCCUPIEDPALESTINIANTERRITORY":
		return PSE
	case "PA", "PAN", "PCZ", "PANAMA", "PANAMIAN", "PANAM", "PZ", "PZPA":
		return PAN
	case "PG", "PNG", "PAPUANEWGUINEA", "PAPUA", "PAPUANEUGUINEA", "NEWGUINEA", "NEUGUINEA":
		return PNG
	case "PY", "PRY", "PARAGUAY":
		return PRY
	case "PE", "PER", "PERU":
		return PER
	case "PL", "POL", "POLAND", "POLSKI", "POLSHA", "POLEN":
		return POL
	case "PT", "PRT", "PORTUGAL", "PORTUGALIAN", "PORTUGALIYA":
		return PRT
	case "PR", "PRI", "PUERTORICO", "PUERTORIKO":
		return PRI
	case "RE", "REU", "REUNION", "RÉUNION":
		return REU
	case "RU", "RUS", "SUN", "RUSSIA", "RUSSO", "RUSSISH", "RUSSLAND", "RUSLAND", "RUSIA", "ROSSIA", "ROSSIYA", "RUSSIAN", "RUSSIANFEDERATION", "USSR":
		return RUS
	case "RW", "RWA", "RWANDA", "RUANDA", "RUWANDA":
		return RWA
	case "RO", "ROU", "ROM", "ROMANIA", "RUMINIA", "RUMINIYA", "RUMÄNIEN", "RUMAENIEN":
		return ROU
	case "SV", "SLV", "ESA", "ELSALVADOR":
		return SLV
	case "SM", "SMR", "RSM", "SANMARINO":
		return SMR
	case "ST", "STP", "SAOTOMEANDPRINCIPE", "SAOTOME", "SAOTOMEUNDPRINCIPE", "SÃOTOMÉANDPRÍNCIPE":
		return STP
	case "SA", "SAU", "SAUDIARABIA", "SAUDI", "SAUDIARABIEN":
		return SAU
	case "SZ", "SWZ", "SWAZILAND", "SWASILAND", "ESWATINI", "KINGDOMOFESWATINI", "KINGDOMESWATINI", "SVAZILEND":
		return SWZ
	case "SC", "SYC", "SEYCHELLES", "SEYCHELLEN":
		return SYC
	case "SN", "SEN", "SENEGAL":
		return SEN
	case "PM", "SPM", "SAINTPIERREANDMIQUELON", "SAINTPIERRE", "STPIERREANDMIQUELON", "STPIERRE", "SANKTPIERRE", "SANKTPIERREUNDMIQUELON":
		return SPM
	case "VC", "VCT", "SAINTVINCENTANDTHEGRENADINES", "SAINTVINCENT", "STVINCENTANDTHEGRENADINES", "STVINCENT", "WV", "STVINCENTUNDDIEGRENADINEN", "STVINCENTANDGRENADINES":
		return VCT
	case "KN", "KNA", "SAINTKITTSANDNEVIS", "SAINTKITTSNEVIS", "SAINTKITTS", "STKITTSANDNEVIS", "STKITTSNEVIS", "STKITTS", "SANKTKITTSUNDNEVIS":
		return KNA
	case "LC", "LCA", "SAINTLUCIA", "STLUCIA", "LUCIA", "WL":
		return LCA
	case "SG", "SGP", "SINGAPORE", "SINGPAORE", "SINGAPORECITY", "SINGAPOUR", "SINGAPURA", "SINGAPUR": //nolint
		return SGP
	case "SY", "SYR", "SYRIA", "SYRIAN", "SYRIANARABREPUBLIC", "SYRIEN":
		return SYR
	case "SK", "SVK", "CSHH", "SLOVAKIA", "SLOVAK", "SLOVAKIYA", "SLOVACIA", "SLOVAC", "SLOVACIYA", "SLOWAKEI":
		return SVK
	case "SI", "SVN", "SLO", "SLOVENIA", "SLOVENIYA", "SLOWENIEN":
		return SVN
	case "US", "USA", "UNITEDSTATES", "UNITEDSTATESOFAMERICA", "USOFAMERICA", "USAMERICA", "VEREINIGTESTAATENVONAMERIKA":
		return USA
	case "SB", "SLB", "SOLOMONISLANDS", "SOLOMON", "SALOMONEN":
		return SLB
	case "SO", "SOM", "SOMALIA", "SOMALI":
		return SOM
	case "SD", "SDN", "SUDAN", "SUDANE", "UMHŪRIYYATASSŪDĀN", "SŪDĀN", "جمهوريةالسودان", "السودان":
		return SDN
	case "SR", "SUR", "SME", "SURINAME", "SURINAM":
		return SUR
	case "SL", "SLE", "WAL", "SIERRALEONE", "SIERRALEON", "SIERALEONE", "SIERALEON":
		return SLE
	case "TJ", "TJK", "TAJIKISTAN", "TADJIKISTAN", "TADSCHIKISTAN":
		return TJK
	case "TW", "TWN", "TPE", "TAIWAN", "TAIWANIAN", "PROVINCEOFCHINA", "PROVINCECHINA":
		return TWN
	case "TH", "THA", "THAILAND", "TAILAND", "THAI", "THAYLAND", "TAYLAND":
		return THA
	case "TZ", "TZA", "EAT", "EAZ", "TANZANIA", "TANZANIYA", "TANSANIA", "TANZANIAUNITEDREPUBLICOF", "TANZANIAUNITEDREPUBLIC", "REPUBLICOFTANZANIA", "TANZANIAREPUBLIC":
		return TZA
	case "TG", "TGO", "TOGO":
		return TGO
	case "TK", "TKL", "TOKELAU":
		return TKL
	case "TO", "TON", "TONGA":
		return TON
	case "TT", "TTO", "TRINIDADANDTOBAGO", "TRINIDAD", "TRINADUNDTOBAGO":
		return TTO
	case "TV", "TUV", "TUVALU":
		return TUV
	case "TN", "TUN", "TUNISIA", "TUNESIEN":
		return TUN
	case "TM", "TKM", "TMN", "TURKMENISTAN", "TURKMENISTON", "TURKMENI", "TURKMENIA", "TURKMENIYA":
		return TKM
	case "TR", "TUR", "TURKEY", "TURCIA", "TURKISH", "TÜRKEI", "TUERKEI", "TÜRKIYE", "REPUBLICOFTÜRKIYE", "TÜRKIYEREPUBLICOF", "TÜRKIYEREPUBLIC", "REPUBLICTÜRKIYE":
		return TUR
	case "UG", "UGA", "EAU", "UGANDA":
		return UGA
	case "UZ", "UZB", "UZBEKISTAN", "UZBEKISTON":
		return UZB
	case "UA", "UKR", "UKRAINE", "UKRAINA": //nolint
		return UKR
	case "UY", "URY", "URUGUAY", "URUGWAY":
		return URY
	case "XW", "XWA", "WALES":
		return XWA
	case "FO", "FRO", "FAROEISLANDS", "FAROE", "FÄRÖER", "FAEROERER":
		return FRO
	case "FJ", "FJI", "FIJI", "FIDSCHI":
		return FJI
	case "PH", "PHL", "PHI", "PHILIPPINES", "PHILIPINES", "PI", "RP", "PHILIPPINEN": //nolint
		return PHL
	case "FI", "SF", "FIN", "FINLAND", "FINNISH", "FINNLAND":
		return FIN
	case "FK", "FLK", "FALKLANDISLANDSMALVINAS", "MALVINAS", "FALKLANDISLANDS", "FALKLAND", "FALKLANDINSELN":
		return FLK
	case "FR", "CP", "FX", "FRA", "FXX", "CPT", "FXFR", "FRANCE", "FRENCH", "FRANKREICH":
		return FRA
	case "GF", "GUF", "FRENCHGUIANA", "GUIANA", "FRANZÖSISCHGUYANA", "FRANZOESISCHGUYANA":
		return GUF
	case "PF", "PYF", "FRENCHPOLYNESIA", "POLYNESIA", "FRANZÖSISCHPOLYNESIEN", "FRANZOESISCHPOLYNESIEN":
		return PYF
	case "TF", "ATF", "FRENCHSOUTHERNTERRITORIES", "SOUTHERNTERRITORIESFRENCH", "FRANZÖSISCHESÜDUNDANTARKTISGEBIETE", "FRANZOESISCHESUEDUNDANTARKTISGEBIETE":
		return ATF
	case "HR", "HRV", "CRO", "CROATIA", "KROATIA", "KROATIEN":
		return HRV
	case "CF", "CAF", "CTA", "RCA", "CENTRALAFRICANREPUBLIC", "CENTRALAFRICANREP", "CENTRALAFRICAN", "ZENTRALAFRIKA":
		return CAF
	case "TD", "TCD", "CHAD", "TSCHAD":
		return TCD
	case "CZ", "CZE", "CZECHIA", "CZECHIYA", "CZECHREPUBLIC", "REPUBLICOFCZECH", "CZECH", "TSCHECHIEN", "CHEHIA", "CHEHIYA":
		return CZE
	case "CL", "CHL", "RCH", "CHILE", "CHILI", "CHILLE":
		return CHL
	case "CH", "CHE", "SWITZERLAND", "SWISS", "SCHWEIZ", "SUISSE", "SVIZZERA", "SVIZRA", "HELVETIA", "SHVEYCARIA", "SHVEYCARIYA":
		return CHE
	case "SE", "SWE", "SWEDEN", "SCHWEDEN", "SHWEDEN", "SHVECIA", "SHVECIYA":
		return SWE
	case "XS", "XSC", "SCOTLAND", "SCHOTTLAND":
		return XSC
	case "LK", "LKA", "SRILANKA":
		return LKA
	case "EC", "ECU", "ECUADOR":
		return ECU
	case "GQ", "GNQ", "EQG", "GEQ", "EQUATORIALGUINEA", "ÄQUATORIALGUINEA", "AEQUATORIALGUINEA":
		return GNQ
	case "ER", "ERI", "ERITREA":
		return ERI
	case "EE", "EST", "ESTONIA", "EW", "ESTLAND":
		return EST
	case "ET", "ETH", "ETHIOPIA", "ÄTHOPIEN", "AETHOPIEN":
		return ETH
	case "ZA", "ZAF", "SOUTHAFRICA", "SÜDAFRIKA", "SUEDAFRIKA":
		return ZAF
	case "YU", "YUG", "YUGOSLAVIA", "UGOSLAVIA", "YUGOSLAVIYA", "UGOSLAVIYA", "SERBIAANDMONTENEGRO", "CS", "SCG", "JUGOSLAWIEN":
		return YUG
	case "GS", "SGS", "SOUTHGEORGIAANDTHESOUTHSANDWICHISLANDS", "SOUTHGEORGIAANDTHESOUTHSANDWICH", "SOUTHGEORGIATHESOUTHSWICHISLANDS", "SOUTHGEORGIA", "SÜDGEORGIEN", "SUEDGEORGIEN":
		return SGS
	case "JM", "JAM", "JAMAICA", "JAMAIKA", "YAMAICA", "YAMAIKA", "JA":
		return JAM
	case "ME", "MNE", "MONTENEGRO":
		return MNE
	case "BL", "BLM", "SAINTBARTHELEMY", "STBARTHELEMY", "SAINTBARTHÉLEMY", "STBARTHÉLEMY":
		return BLM
	case "SX", "SXM", "SINTMAARTENDUTCH", "SAINTMAARTEN", "SINTMAARTEN", "STMAARTEN":
		return SXM
	case "RS", "SRB", "CSXX", "SERBIA", "SERBIYA", "SERBIEN":
		return SRB
	case "AX", "ALA", "ALANDISLANDS", "ISLANDSALAND", "ALAND", "ÅLANDISLANDS", "ÅLAND", "ISLANDSÅLAND":
		return ALA
	case "BQ", "BES", "BONAIRE", "BONAIR", "BONEIRU", "BONAIRESINTEUSTATIUSANDSABA", "BONAIRESINTEUSTATIUSSABA", "BONAIRESTEUSTANDSABA", "BONAIRESTEUSTSABA", "SINTEUSTATIUSANDSABA", "SINTEUSTATIUS", "CARIBBEANNETHERLANDS":
		return BES
	case "GG", "GGY", "GBA", "GBG", "GUERNSEY":
		return GGY
	case "JE", "JEY", "GBJ", "JERSEY", "JERSIEY":
		return JEY
	case "CW", "CUW", "CURACAO", "CURAÇAO", "CURAQAO", "CURAKAO", "KURACAO", "KURAKAO":
		return CUW
	case "MF", "MAF", "SAINTMARTINFRENCH", "STMARTINFRENCH", "SANKTMARTIN", "SAINTMARTIN":
		return MAF
	case "SS", "SSD", "SOUTHSUDAN", "SOUTHSUDANE", "REPUBLICOFSOUTHSUDAN", "SOUTHSUDANREPUBLICOF", "SOUTHSUDANREPUBLIC", "PAGUOTTHUDÄN", "SÜDSUDAN", "SUEDSUDAN":
		return SSD
	case "JP", "JPN", "JAPAN":
		return JPN
	case "XK", "XKX", "XKS", "KOS", "KOSOVO", "COSOVO", "КОСОВО", "KOSOVËS", "РЕПУБЛИКАКОСОВО", "REPUBLIKAKOSOVO", "REPUBLIKACOSOVO", "REPUBLIKAKOSOVËS", "REPUBLICAKOSOVO", "REPUBLICACOSOVO", "REPUBLICAKOSOVËS", "KOSOVOREPUBLIC", "COSOVOREPUBLIC", "KOSOVËSREPUBLIC":
		return XKX
	case "XX", "NONE", "NON", "NICHT", "NICHTS":
		return None
	case "INTERNATIONAL":
		return International
	case "UIFN", "INTERNATIONALFREEPHONE", "TOLLFREEPHONE":
		return NonCountryInternationalFreephone
	case "INMARSAT":
		return NonCountryInmarsat
	case "MMS", "MARITIMEMOBILESERVICE", "MARITIMEMOBILESERVICES", "MARITIMEMOBILE", "MARITIME":
		return NonCountryMaritimeMobileService
	case "UNIVERSALPERSONALTELECOMMUNICATIONSSERVICES", "UNIVERSALPERSONALTELECOMMUNICATIONSSERVICE", "UNIVERSALPERSONALTELECOMMUNICATIONS", "UNIVERSALPERSONALTELECOMMUNICATION":
		return NonCountryUniversalPersonalTelecommunicationsServices
	case "NCP", "NATIONALNONCOMMERCIALPURPOSES", "NONCOMMERCIALPURPOSES", "NATIONALNONCOMMERCIAL", "NONCOMMERCIAL":
		return NonCountryNationalNonCommercialPurposes
	case "GMSS", "GLOBALMOBILESATELLITESYSTEM", "GLOBALMOBILESATELITESYSTEM", "GLOBALMOBILESATELLITE", "GLOBALMOBILESATELITE":
		return NonCountryGlobalMobileSatelliteSystem
	case "INTERNATIONALNETWORKS", "INTERNATIONALNETWORKSSERVICE", "INTERNATIONALNETWORKSSERVICES":
		return NonCountryInternationalNetworks
	case "DISASTERRELIEF", "DISASTER":
		return NonCountryDisasterRelief
	case "IPRS", "INTERNATIONALPREMIUMRATESERVICE", "PREMIUMRATESERVICE", "INTERNATIONALPREMIUMRATESERVICES", "PREMIUMRATESERVICES":
		return NonCountryInternationalPremiumRateService
	case "ITPCS", "INTERNATIONALTELECOMMUNICATIONSPUBLICCORRESPONDENCESERVICETRIAL", "INTERNATIONALTELECOMMUNICATIONSPUBLICCORRESPONDENCESERVICE", "InternationalTELECOMMUNICATIONSPUBLICCORRESPONDENCESERVICES", "InternationalTELECOMMUNICATIONSCORRESPONDENCESERVICE", "InternationalTELECOMMUNICATIONSCORRESPONDENCESERVICES":
		return NonCountryInternationalTelecommunicationsCorrespondenceService
	}
	return Unknown
}

// ByNumeric - return CountryCode by country Alpha-2 / Alpha-3 / numeric code, example: rus := ByNumeric(643),
// returns countries.Unknown, if country code not found or not valid
func ByNumeric(numeric int) CountryCode {
	if code := CountryCode(numeric); code.IsValid() {
		return code
	}
	return Unknown
}

// IsValid - returns true, if code is correct
func (c CountryCode) IsValid() bool {
	return c.Alpha2() != UnknownMsg
}
