Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/matomo-org/matomo.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/GeoIp2/data/regionMapping.php')
-rw-r--r--plugins/GeoIp2/data/regionMapping.php4635
1 files changed, 4635 insertions, 0 deletions
diff --git a/plugins/GeoIp2/data/regionMapping.php b/plugins/GeoIp2/data/regionMapping.php
new file mode 100644
index 0000000000..92d10ce356
--- /dev/null
+++ b/plugins/GeoIp2/data/regionMapping.php
@@ -0,0 +1,4635 @@
+<?php
+
+return [
+ 'AD' => [
+ '02' => '02',
+ '03' => '03',
+ '04' => '04',
+ '05' => '05',
+ '06' => '06',
+ '07' => '07',
+ '08' => '08',
+ ],
+ 'AE' => [
+ '01' => 'AZ',
+ '02' => 'AJ',
+ '03' => 'DU',
+ '04' => 'FU',
+ '05' => 'RK',
+ '06' => 'SH',
+ '07' => 'UQ',
+ ],
+ 'AF' => [
+ '01' => 'BDS', // Badakhshan
+ '02' => 'BDG', // Badghis
+ '03' => 'BGL', // Baghlan
+ '05' => 'BAM', // Bamian
+ '06' => 'FRA', // Farah
+ '07' => 'FYB', // Faryab
+ '08' => 'GHA', // Ghazni
+ '09' => 'GHO', // Ghowr
+ '10' => 'HEL', // Helmand
+ '11' => 'HER', // Herat
+ '13' => 'KAB', // Kabol
+ '14' => 'KAP', // Kapisa
+ '17' => 'LOG', // Lowgar
+ '18' => 'NAN', // Nangarhar
+ '19' => 'NIM', // Nimruz
+ '23' => 'KAN', // Kandahar
+ '24' => 'KDZ', // Kondoz
+ '26' => 'TAK', // Takhar
+ '27' => 'WAR', // Vardak
+ '28' => 'ZAB', // Zabol
+ '29' => 'PKA', // Paktika
+ '30' => 'BAL', // Balkh
+ '31' => 'JOW', // Jowzjan
+ '32' => 'SAM', // Samangan
+ '33' => 'SAR', // Sar-e Pol
+ '34' => 'KNR', // Konar
+ '35' => 'LAG', // Laghman
+ '36' => 'PIA', // Paktia
+ '37' => 'KHO', // Khowst
+ '38' => 'NUR', // Nurestan
+ '39' => 'URU', // Oruzgan
+ '40' => 'PAR', // Parvan
+ '41' => 'DAY', // Daykondi
+ '42' => 'PAN', // Panjshir
+ ],
+ 'AG' => [
+ '01' => '10',
+ '03' => '03',
+ '04' => '04',
+ '05' => '05',
+ '06' => '06',
+ '07' => '07',
+ '08' => '08',
+ '09' => '11',
+ ],
+ 'AL' => [
+ '40' => '01',
+ '41' => '09',
+ '42' => '02',
+ '43' => '03',
+ '44' => '04',
+ '45' => '05',
+ '46' => '06',
+ '47' => '07',
+ '48' => '08',
+ '49' => '10',
+ '50' => '11',
+ '51' => '12',
+ ],
+ 'AM' => [
+ '01' => 'AG',
+ '02' => 'AR',
+ '03' => 'AV',
+ '04' => 'GR',
+ '05' => 'KT',
+ '06' => 'LO',
+ '07' => 'SH',
+ '08' => 'SU',
+ '09' => 'TV',
+ '10' => 'VD',
+ '11' => 'ER',
+ ],
+ 'AO' => [
+ '01' => 'BGU',
+ '02' => 'BIE',
+ '03' => 'CAB',
+ '04' => 'CCU',
+ '05' => 'CNO',
+ '06' => 'CUS',
+ '07' => 'CNN',
+ '08' => 'HUA',
+ '09' => 'HUI',
+ '12' => 'MAL',
+ '13' => 'NAM',
+ '14' => 'MOX',
+ '15' => 'UIG',
+ '16' => 'ZAI',
+ '17' => 'LNO',
+ '18' => 'LSU',
+ '19' => 'BGO',
+ '20' => 'LUA',
+ ],
+ 'AR' => [
+ '01' => 'B',
+ '02' => 'K',
+ '03' => 'H',
+ '04' => 'U',
+ '05' => 'X',
+ '06' => 'W',
+ '07' => 'C',
+ '08' => 'E',
+ '09' => 'P',
+ '10' => 'Y',
+ '11' => 'L',
+ '12' => 'F',
+ '13' => 'M',
+ '14' => 'N',
+ '15' => 'Q',
+ '16' => 'R',
+ '17' => 'A',
+ '18' => 'J',
+ '19' => 'D',
+ '20' => 'Z',
+ '21' => 'S',
+ '22' => 'G',
+ '23' => 'V',
+ '24' => 'T',
+ ],
+ 'AT' => [
+ '01' => '1',
+ '02' => '2',
+ '03' => '3',
+ '04' => '4',
+ '05' => '5',
+ '06' => '6',
+ '07' => '7',
+ '08' => '8',
+ '09' => '9',
+ ],
+ 'AU' => [
+ '01' => 'ACT',
+ '02' => 'NSW',
+ '03' => 'NT',
+ '04' => 'QLD',
+ '05' => 'SA',
+ '06' => 'TAS',
+ '07' => 'VIC',
+ '08' => 'WA',
+ ],
+ 'AZ' => [
+ '01' => 'ABS', // Abseron
+ '02' => 'AGC', // Agcabadi
+ '03' => 'AGM', // Agdam
+ '04' => 'AGS', // Agdas
+ '05' => 'AGA', // Agstafa
+ '06' => 'AGU', // Agsu
+ '07' => '', // Ali Bayramli
+ '08' => 'AST', // Astara
+ '09' => 'BA', // Baki
+ '10' => 'BAL', // Balakan
+ '11' => 'BAR', // Barda
+ '12' => 'BEY', // Beylaqan
+ '13' => 'BIL', // Bilasuvar
+ '14' => 'CAB', // Cabrayil
+ '15' => 'CAL', // Calilabad
+ '16' => 'DAS', // Daskasan
+ '17' => '', // Davaci
+ '18' => 'FUZ', // Fuzuli
+ '19' => 'GAD', // Gadabay
+ '20' => 'GA', // Ganca
+ '21' => 'GOR', // Goranboy
+ '22' => 'GOY', // Goycay
+ '23' => 'HAC', // Haciqabul
+ '24' => 'IMI', // Imisli
+ '25' => 'ISM', // Ismayilli
+ '26' => 'KAL', // Kalbacar
+ '27' => 'KUR', // Kurdamir
+ '28' => 'LAC', // Lacin
+ '29' => 'LAN', // Lankaran
+ '30' => 'LA', // Lankaran city
+ '31' => 'LER', // Lerik
+ '32' => 'MAS', // Masalli
+ '33' => 'MI', // Mingacevir
+ '34' => 'NA', // Naftalan
+ '35' => 'NV', // Naxcivan
+ '36' => 'NEF', // Neftcala
+ '37' => 'OGU', // Oguz
+ '38' => 'QAB', // Qabala
+ '39' => 'QAX', // Qax
+ '40' => 'QAZ', // Qazax
+ '41' => 'QOB', // Qobustan
+ '42' => 'QBA', // Quba
+ '43' => 'QBI', // Qubadli
+ '44' => 'QUS', // Qusar
+ '45' => 'SAT', // Saatli
+ '46' => 'SAB', // Sabirabad
+ '47' => 'SAK', // Saki
+ '48' => 'SA', // Saki
+ '49' => 'SAL', // Salyan
+ '50' => 'SMI', // Samaxi
+ '51' => 'SKR', // Samkir
+ '52' => 'SMX', // Samux
+ '53' => 'SIY', // Siyazan
+ '54' => 'SM', // Sumqayit
+ '55' => 'SUS', // Susa
+ '56' => 'SUS', // Susa City Şuşa used to have SS, but was deleted in 2011. See https://en.wikipedia.org/wiki/ISO_3166-2:AZ#Changes. Now maps to region Şuşa [SUS]
+ '57' => 'TAR', // Tartar
+ '58' => 'TOV', // Tovuz
+ '59' => 'UCA', // Ucar
+ '60' => 'XAC', // Xacmaz
+ '61' => 'XA', // Xankandi
+ '62' => 'GYG', // Xanlar
+ '63' => 'XIZ', // Xizi
+ '64' => 'XCI', // Xocali
+ '65' => 'XVD', // Xocavand
+ '66' => 'YAR', // Yardimli
+ '67' => 'YEV', // Yevlax
+ '68' => 'YE', // Yevlax
+ '69' => 'ZAN', // Zangilan
+ '70' => 'ZAQ', // Zaqatala
+ '71' => 'ZAR', // Zardab
+ ],
+ 'BA' => [
+ '01' => 'BIH',
+ '02' => 'SRP',
+
+ // invalid codes [used by maxmind]
+ '03' => 'BRC' // Brčko distrikt was added in 2010. See https://en.wikipedia.org/wiki/ISO_3166-2:BA#Changes
+ ],
+ 'BB' => [
+ '01' => '01',
+ '02' => '02',
+ '03' => '03',
+ '04' => '04',
+ '05' => '05',
+ '06' => '06',
+ '07' => '07',
+ '08' => '08',
+ '09' => '09',
+ '10' => '10',
+ '11' => '11',
+ ],
+ 'BD' => [
+ '81' => 'C',
+ '82' => 'D',
+ '83' => 'E',
+ '84' => 'B',
+ '85' => 'A',
+ '86' => 'G',
+
+ // invalid codes [used by maxmind]
+ '87' => 'F' // Rangpur added in 2011. See https://en.wikipedia.org/wiki/ISO_3166-2:BD#Changes
+ ],
+ 'BE' => [
+ '01' => 'VAN',
+ '03' => 'WHT',
+ '04' => 'WLG',
+ '05' => 'VLI',
+ '06' => 'WLX',
+ '07' => 'WNA',
+ '08' => 'VOV',
+ '09' => 'VWV',
+ '10' => 'WBR',
+ '11' => 'BRU',
+ '12' => 'VBR',
+
+ // Conventional FIPS codes that are not listed on wikidata
+ '13' => 'VLG', // Flanders
+ '14' => 'WAL' // Wallonia
+ ],
+ 'BF' => [
+ '15' => 'BAM', // Bam
+ '19' => 'BLK', // Boulkiemde
+ '20' => 'GAN', // Ganzourgou
+ '21' => 'GNA', // Gnagna
+ '28' => 'KOT', // Kouritenga
+ '33' => 'OUD', // Oudalan
+ '34' => 'PAS', // Passore
+ '36' => 'SNG', // Sanguie
+ '40' => 'SOM', // Soum
+ '42' => 'TAP', // Tapoa
+ '44' => 'ZOU', // Zoundweogo
+ '45' => 'BAL', // Bale
+ '46' => 'BAN', // Banwa
+ '47' => 'BAZ', // Bazega
+ '48' => 'BGR', // Bougouriba
+ '49' => 'BLG', // Boulgou
+ '50' => 'GOU', // Gourma
+ '51' => 'HOU', // Houet
+ '52' => 'IOB', // Ioba
+ '53' => 'KAD', // Kadiogo
+ '54' => 'KEN', // Kenedougou
+ '55' => 'COM', // Komoe
+ '56' => 'KMD', // Komondjari
+ '57' => 'KMP', // Kompienga
+ '58' => 'KOS', // Kossi
+ '59' => 'KOP', // Koulpelogo
+ '60' => 'KOW', // Kourweogo
+ '61' => 'LER', // Leraba
+ '62' => 'LOR', // Loroum
+ '63' => 'MOU', // Mouhoun
+ '64' => 'NAM', // Namentenga
+ '65' => 'NAO', // Naouri
+ '66' => 'NAY', // Nayala
+ '67' => 'NOU', // Noumbiel
+ '68' => 'OUB', // Oubritenga
+ '69' => 'PON', // Poni
+ '70' => 'SMT', // Sanmatenga
+ '71' => 'SEN', // Seno
+ '72' => 'SIS', // Sissili
+ '73' => 'SOR', // Sourou
+ '74' => 'TUI', // Tuy
+ '75' => 'YAG', // Yagha
+ '76' => 'YAT', // Yatenga
+ '77' => 'ZIR', // Ziro
+ '78' => 'ZON', // Zondoma
+ ],
+ 'BG' => [
+ '38' => '01',
+ '39' => '02',
+ '40' => '08',
+ '41' => '07',
+ '42' => '23',
+ '43' => '26',
+ '44' => '09',
+ '45' => '10',
+ '46' => '11',
+ '47' => '12',
+ '48' => '13',
+ '49' => '14',
+ '50' => '15',
+ '51' => '16',
+ '52' => '17',
+ '53' => '18',
+ '54' => '27',
+ '55' => '19',
+ '56' => '20',
+ '57' => '21',
+ '58' => '23',
+ '59' => '24',
+ '60' => '25',
+ '61' => '03',
+ '62' => '04',
+ '63' => '05',
+ '64' => '06',
+ '65' => '28',
+
+ // Mikhaylovgrad seems to be a city in the region Montana
+ '33' => '12'
+ ],
+ 'BH' => [
+ '01' => '15', // Al Hadd => Muharraq Governorate (https://en.wikipedia.org/wiki/Al_Hidd)
+ '02' => '13', // Al Manamah => Capital Governorate (https://en.wikipedia.org/wiki/Manama)
+ '05' => '', // Jidd Hafs => Capital and Northern Governorate 13/17 (https://en.wikipedia.org/wiki/Jidhafs)
+ '06' => '', // Sitrah => Capital and Southern Governorate 13/14 (https://en.wikipedia.org/wiki/Sitra)
+ '08' => '', // Al Mintaqah al Gharbiyah => Northern and Southern Governorate 17/14 (https://en.wikipedia.org/wiki/Western_Region,_Bahrain)
+ '09' => '14', // Mintaqat Juzur Hawar => Southern Governorate (https://en.wikipedia.org/wiki/Hawar_Islands)
+ '10' => '17', // Al Mintaqah ash Shamaliyah => Northern Governorate (https://en.wikipedia.org/wiki/Northern_Region,_Bahrain)
+ '11' => '', // Al Mintaqah al Wusta => Capital and Northern Governorates 13/17 (https://en.wikipedia.org/wiki/Central_Region,_Bahrain)
+ '12' => '14', // Madīnat ٰĪsá => seems to be Southern Governorate based on the maps shown on wikipedia (https://en.wikipedia.org/wiki/Isa_Town)
+ '13' => '14', // Ar Rifa => Southern Governorates (https://en.wikipedia.org/wiki/Rifa_and_Southern_Region,_Bahrain)
+ '14' => '17', // Madinat Hamad => Northern Governorate (https://en.wikipedia.org/wiki/Hamad_Town)
+ '15' => '15',
+ '16' => '13',
+ '17' => '14',
+ '18' => '17',
+ '19' => '', // seems to be Southern and Northern Governorate 14/17 based on the maps shown on wikipedia (https://en.wikipedia.org/wiki/Isa_Town)
+ ],
+ 'BI' => [
+ '02' => '', // Bujumbura was splitted into Bujumbura Mairie (BM) and Bujumbura Rural (BL) in 2010
+ '09' => 'BB',
+ '10' => 'BR',
+ '11' => 'CA',
+ '12' => 'CI',
+ '13' => 'GI',
+ '14' => 'KR',
+ '15' => 'KY',
+ '16' => 'KI',
+ '17' => 'MA',
+ '18' => 'MY',
+ '19' => 'NG',
+ '20' => 'RT',
+ '21' => 'RY',
+ '22' => 'MU',
+ '23' => 'MW',
+ ],
+ 'BJ' => [
+ '07' => 'AL',
+ '08' => 'AK',
+ '09' => 'AQ',
+ '10' => 'BO',
+ '11' => 'CO',
+ '12' => 'KO',
+ '13' => 'DO',
+ '14' => 'LI',
+ '15' => 'MO',
+ '16' => 'OU',
+ '17' => 'PL',
+ '18' => 'ZO',
+ ],
+ 'BM' => [
+ // ISO 3166-2 does not define any subdivisions of Bermuda, so simply remove them (https://en.wikipedia.org/wiki/ISO_3166-2:BM)
+ '01' => '',
+ '02' => '',
+ '03' => '',
+ '04' => '',
+ '05' => '',
+ '06' => '',
+ '07' => '',
+ '08' => '',
+ '09' => '',
+ '10' => '',
+ '11' => '',
+ ],
+ 'BN' => [
+ // Seems Maxmind totally screwed up the region codes for Brunei
+ // They used the codes for Benin (which has BN as FIPS country code) and replaced those codes available for Brunei
+
+ // valid codes
+ '08' => 'BE', // Belait
+ '09' => 'BM', // Brunei and Muara
+ '10' => 'TE', // Temburong
+ '15' => 'TU', // Tutong
+
+ // invalid codes that should not occur
+ '07' => '', // Alibori
+ '11' => '', // Collines
+ '12' => '', // Kouffo
+ '13' => '', // Donga
+ '14' => '', // Littoral
+ '16' => '', // Oueme
+ '17' => '', // Plateau
+ '18' => '', // Zou
+ ],
+ 'BO' => [
+ '01' => 'H',
+ '02' => 'C',
+ '03' => 'B',
+ '04' => 'L',
+ '05' => 'O',
+ '06' => 'N',
+ '07' => 'P',
+ '08' => 'S',
+ '09' => 'T',
+ ],
+ 'BR' => [
+ '01' => 'AC',
+ '02' => 'AL',
+ '03' => 'AP',
+ '04' => 'AM',
+ '05' => 'BA',
+ '06' => 'CE',
+ '07' => 'DF',
+ '08' => 'ES',
+ '11' => 'MS',
+ '13' => 'MA',
+ '14' => 'MT',
+ '15' => 'MG',
+ '16' => 'PA',
+ '17' => 'PB',
+ '18' => 'PR',
+ '20' => 'PI',
+ '21' => 'RJ',
+ '22' => 'RN',
+ '23' => 'RS',
+ '24' => 'RO',
+ '25' => 'RR',
+ '26' => 'SC',
+ '27' => 'SP',
+ '28' => 'SE',
+ '29' => 'GO',
+ '30' => 'PE',
+ '31' => 'TO',
+ ],
+ 'BS' => [
+ '05' => 'BI', // Bimini
+ '06' => 'CI', // Cat Island
+ '10' => 'EX', // Exuma
+ '13' => 'IN', // Inagua
+ '15' => 'LI', // Long Island
+ '16' => 'MG', // Mayaguana
+ '18' => 'RI', // Ragged Island
+ '22' => 'HI', // Harbour Island
+ '23' => '', // New Providence deleted in 2011 - without replacement (https://en.wikipedia.org/wiki/ISO_3166-2:BS#Changes)
+ '24' => '', // Acklins and Crooked Islands [now two seperate codes AK & CK]
+ '25' => 'FP', // Freeport
+ '26' => 'CS', // Fresh Creek [is now roughly Central Andros]
+ '27' => 'CE', // Governor's Harbour [is now roughly Central Eleuthera]
+ '28' => 'HT', // Green Turtle Cay - mapped to GT by wikidata, but removed in 2010 - now HT according to geonames (http://www.geonames.org/maps/google_26.758_-77.325.html)
+ '29' => 'EG', // High Rock [is now roughly East Grand Bahama]
+ '30' => 'SA', // Kemps Bay [now in South Andros]
+ '31' => '', // Marsh Harbour
+ '32' => '', // Nichollstown and Berry Islands
+ '33' => 'SE', // Rock Sound [is now roughly South Eleuthera]
+ '34' => '', // Sandy Point
+ '35' => '', // San Salvador and Rum Cay [now two seperate codes SS & RC]
+ ],
+ 'BT' => [
+ '05' => '33',
+ '06' => '12',
+ '07' => '21',
+ '08' => '22',
+ '09' => '31',
+ '10' => '13',
+ '11' => '44',
+ '12' => '42',
+ '13' => '11',
+ '14' => '43',
+ '15' => '23',
+ '16' => '14', // Samtse
+ '17' => '45',
+ '18' => '34', // Zhemgang
+ '19' => '41',
+ '20' => '15',
+ '21' => '32', // Tongsa
+ '22' => '24', // Wangdi Phodrang
+ ],
+ 'BW' => [
+ '01' => 'CE',
+ '03' => 'GH',
+ '04' => 'KG',
+ '05' => 'KL',
+ '06' => 'KW',
+ '08' => 'NE',
+ '09' => 'SE',
+ '10' => 'SO',
+ '11' => 'NW',
+ ],
+ 'BY' => [
+ '01' => 'BR',
+ '02' => 'HO',
+ '03' => 'HR',
+ '04' => 'HM',
+ '05' => 'MI',
+ '06' => 'MA',
+ '07' => 'VI',
+ ],
+ 'BZ' => [
+ '01' => 'BZ',
+ '02' => 'CY',
+ '03' => 'CZL',
+ '04' => 'OW',
+ '05' => 'SC',
+ '06' => 'TOL',
+ ],
+ 'CD' => [
+ '01' => '', // Bandundu [split up]
+ '02' => 'EQ', // Equateur
+ '04' => 'KE', // Kasai-Oriental
+ '05' => '', // Katanga [split up]
+ '06' => 'KN', // Kinshasa
+ '08' => 'BC', // Bas-Congo
+ '09' => '', // Orientale [split up]
+ '10' => 'MA', // Maniema
+ '11' => 'NK', // Nord-Kivu
+ '12' => 'SK', // Sud-Kivu
+
+ // valid codes [not used by maxmind]
+ '03' => '', // Kasaï-Occidental [split up]
+ ],
+ 'CF' => [
+ '01' => 'BB',
+ '02' => 'BK',
+ '03' => 'HK',
+ '04' => 'HS',
+ '05' => 'HM',
+ '06' => 'KG',
+ '07' => 'LB',
+ '08' => 'MB',
+ '09' => 'NM',
+ '11' => 'UK',
+ '12' => 'AC',
+ '13' => 'OP',
+ '14' => 'VK',
+ '15' => 'KB',
+ '16' => 'SE',
+ '17' => 'MP',
+ '18' => 'BGF',
+ ],
+ 'CG' => [
+ '01' => '11',
+ '04' => '5',
+ '05' => '2',
+ '06' => '7',
+ '07' => '9',
+ '08' => '14',
+ '10' => '13',
+ '11' => '12',
+ '12' => 'BZV',
+ '13' => '8',
+ '14' => '15',
+ ],
+ 'CH' => [
+ '01' => 'AG',
+ '02' => 'AR',
+ '03' => 'BL',
+ '04' => 'BS',
+ '05' => 'BE',
+ '06' => 'FR',
+ '07' => 'GE',
+ '08' => 'GL',
+ '09' => 'GR',
+ '10' => 'AI',
+ '11' => 'LU',
+ '12' => 'NE',
+ '13' => 'NW',
+ '14' => 'OW',
+ '15' => 'SG',
+ '16' => 'SH',
+ '17' => 'SZ',
+ '18' => 'SO',
+ '19' => 'TG',
+ '20' => 'TI',
+ '21' => 'UR',
+ '22' => 'VS',
+ '23' => 'VD',
+ '24' => 'ZG',
+ '25' => 'ZH',
+ '26' => 'JU',
+ ],
+ 'CI' => [
+ '74' => 'LG', // Agneby [now part of Lagunes]
+ '75' => 'WR', // Bafing [now part of Woroba]
+ '76' => 'BS', // Bas-Sassandra
+ '77' => 'DN', // Denguele
+ '78' => 'MG', // Dix-Huit Montagnes
+ '79' => 'GD', // Fromager [now part of Gôh-Djiboua]
+ '80' => 'SM', // Haut-Sassandra
+ '81' => 'LC', // Lacs
+ '82' => 'LG', // Lagunes
+ '83' => 'SM', // Marahoue
+ '84' => 'MG', // Moyen-Cavally [now part of Montagnes]
+ '85' => 'CM', // Moyen-Comoe [now part of Comoé]
+ '86' => 'LC', // N'zi-Comoe [now part of Lacs]
+ '87' => 'SV', // Savanes
+ '88' => '', // Sud-Bandama [spit up]
+ '89' => 'CM', // Sud-Comoe
+ '90' => 'VB', // Vallee du Bandama
+ '91' => 'WR', // Worodougou [now part of Woroba]
+ '92' => 'ZZ', // Zanzan
+ ],
+ 'CL' => [
+ '01' => 'VS',
+ '02' => 'AI',
+ '03' => 'AN',
+ '04' => 'AR',
+ '05' => 'AT',
+ '06' => 'BI',
+ '07' => 'CO',
+ '08' => 'LI',
+ '10' => 'MA',
+ '11' => 'ML',
+ '12' => 'RM',
+ '14' => 'LL',
+ '15' => 'TA',
+ '16' => 'AP',
+ '17' => 'LR',
+
+ // mapped based on their names (https://en.wikipedia.org/wiki/ISO_3166-2:CL)
+ '09' => 'LL', // Los Lagos
+ '13' => 'TA', // Tarapaca
+ ],
+ 'CM' => [
+ '04' => 'ES',
+ '05' => 'LT',
+ '07' => 'NW',
+ '08' => 'OU',
+ '09' => 'SW',
+ '10' => 'AD',
+ '11' => 'CE',
+ '12' => 'EN',
+ '13' => 'NO',
+ '14' => 'SU',
+ ],
+ 'CN' => [
+ '01' => 'AH',
+ '02' => 'ZJ',
+ '03' => 'JX',
+ '04' => 'JS',
+ '05' => 'JL',
+ '06' => 'QH',
+ '07' => 'FJ',
+ '08' => 'HL',
+ '09' => 'HA',
+ '10' => 'HE',
+ '11' => 'HN',
+ '12' => 'HB',
+ '13' => 'XJ',
+ '14' => 'XZ',
+ '15' => 'GS',
+ '16' => 'GX',
+ '18' => 'GZ',
+ '19' => 'LN',
+ '20' => 'NM',
+ '21' => 'NX',
+ '22' => 'BJ',
+ '23' => 'SH',
+ '24' => 'SX',
+ '25' => 'SD',
+ '26' => 'SN',
+ '28' => 'TJ',
+ '29' => 'YN',
+ '30' => 'GD',
+ '31' => 'HI',
+ '32' => 'SC',
+ '33' => 'CQ',
+ ],
+ 'CO' => [
+ '01' => 'AMA',
+ '02' => 'ANT',
+ '03' => 'ARA',
+ '04' => 'ATL',
+ '08' => 'CAQ',
+ '09' => 'CAU',
+ '10' => 'CES',
+ '11' => 'CHO',
+ '12' => 'COR',
+ '14' => 'GUV',
+ '15' => 'GUA',
+ '16' => 'HUI',
+ '17' => 'LAG',
+ '19' => 'MET',
+ '20' => 'NAR',
+ '21' => 'NSA',
+ '22' => 'PUT',
+ '23' => 'QUI',
+ '24' => 'RIS',
+ '25' => 'SAP',
+ '26' => 'SAN',
+ '27' => 'SUC',
+ '28' => 'TOL',
+ '29' => 'VAC',
+ '30' => 'VAU',
+ '31' => 'VID',
+ '32' => 'CAS',
+ '33' => 'CUN',
+ '34' => 'DC',
+ '35' => 'BOL',
+ '36' => 'BOY',
+ '37' => 'CAL',
+ '38' => 'MAG',
+ ],
+ 'CR' => [
+ '01' => 'A',
+ '02' => 'C',
+ '03' => 'G',
+ '04' => 'H',
+ '06' => 'L',
+ '07' => 'P',
+ '08' => 'SJ',
+ ],
+ 'CU' => [
+ '01' => '01', // Pinar del Rio
+ '02' => '', // Ciudad de la Habana was splitted in 2011 into 15 & 16 (https://en.wikipedia.org/wiki/ISO_3166-2:CU)
+ '03' => '04', // Matanzas
+ '04' => '99', // Isla de la Juventud
+ '05' => '09', // Camaguey
+ '07' => '08', // Ciego de Avila
+ '08' => '06', // Cienfuegos
+ '09' => '12', // Granma
+ '10' => '14', // Guantanamo
+ '11' => '03', // La Habana
+ '12' => '11', // Holguin
+ '13' => '10', // Las Tunas
+ '14' => '07', // Sancti Spiritus
+ '15' => '13', // Santiago de Cuba
+ '16' => '05', // Villa Clara
+ ],
+ 'CV' => [
+ '01' => 'BV',
+ '02' => 'BR',
+ '04' => 'MA',
+ '05' => 'PA',
+ '07' => 'RG',
+ '08' => 'SL',
+ '10' => '', // Sao Nicolau was splitted in 2005 into Ribeira Brava (BR) & Tarrafal de São Nicolau (TS) (https://en.wikipedia.org/wiki/ISO_3166-2:CV)
+ '11' => 'SV',
+ '13' => 'MO',
+ '14' => 'PR',
+ '15' => 'CA',
+ '16' => 'CR',
+ '17' => 'SD',
+ '18' => 'SF',
+ '19' => 'SM',
+ '20' => 'TA',
+ ],
+ 'CY' => [
+ '01' => '04',
+ '02' => '06',
+ '03' => '03',
+ '04' => '01',
+ '05' => '02',
+ '06' => '05',
+ ],
+ 'CZ' => [
+ '52' => '10',
+ '78' => '64',
+ '79' => '31',
+ '80' => '63',
+ '81' => '41',
+ '82' => '52',
+ '83' => '51',
+ '84' => '71',
+ '85' => '80',
+ '86' => '53',
+ '87' => '32',
+ '88' => '20',
+ '89' => '42',
+ '90' => '72',
+ ],
+ 'DE' => [
+ '01' => 'BW',
+ '02' => 'BY',
+ '03' => 'HB',
+ '04' => 'HH',
+ '05' => 'HE',
+ '06' => 'NI',
+ '07' => 'NW',
+ '08' => 'RP',
+ '09' => 'SL',
+ '10' => 'SH',
+ '11' => 'BB',
+ '12' => 'MV',
+ '13' => 'SN',
+ '14' => 'ST',
+ '15' => 'TH',
+ '16' => 'BE',
+ ],
+ 'DJ' => [
+ '01' => 'AS',
+ '04' => 'OB',
+ '05' => 'TA',
+ '06' => 'DI',
+ '07' => 'DJ',
+ '08' => 'AR',
+ ],
+ 'DK' => [
+ '17' => '84',
+ '18' => '82',
+ '19' => '81',
+ '20' => '85',
+ '21' => '83',
+ ],
+ 'DM' => [
+ '02' => '02',
+ '03' => '03',
+ '04' => '04',
+ '05' => '05',
+ '06' => '06',
+ '07' => '07',
+ '08' => '08',
+ '09' => '09',
+ '10' => '10',
+ '11' => '11',
+ ],
+ 'DO' => [
+ '01' => '02',
+ '02' => '03',
+ '03' => '04',
+ '04' => '05',
+ '05' => '01', // Distrito Nacional
+ '06' => '06',
+ '08' => '09',
+ '09' => '10',
+ '10' => '11',
+ '11' => '07',
+ '12' => '12',
+ '14' => '14',
+ '15' => '15',
+ '16' => '16',
+ '17' => '17', // Peravia
+ '18' => '18',
+ '19' => '19',
+ '20' => '20',
+ '21' => '24',
+ '23' => '22',
+ '24' => '23',
+ '25' => '25',
+ '26' => '26',
+ '27' => '27',
+ '28' => '08',
+ '29' => '30',
+ '30' => '13',
+ '31' => '28',
+ '32' => '29',
+ '33' => '21',
+ '34' => '01',
+ '35' => '17',
+ '36' => '31',
+ '37' => '32',
+ ],
+ 'DZ' => [
+ '01' => '16',
+ '03' => '05',
+ '04' => '25',
+ '06' => '26',
+ '07' => '27',
+ '09' => '31',
+ '10' => '20',
+ '12' => '19',
+ '13' => '14',
+ '14' => '15',
+ '15' => '13',
+ '18' => '06',
+ '19' => '07',
+ '20' => '09',
+ '21' => '10',
+ '22' => '17',
+ '23' => '24',
+ '24' => '18',
+ '25' => '03',
+ '26' => '29',
+ '27' => '28',
+ '29' => '04',
+ '30' => '22',
+ '31' => '21',
+ '33' => '12',
+ '34' => '01',
+ '35' => '44',
+ '36' => '46',
+ '37' => '23',
+ '38' => '08',
+ '39' => '34',
+ '40' => '35',
+ '41' => '02',
+ '42' => '32',
+ '43' => '39',
+ '44' => '36',
+ '45' => '47',
+ '46' => '33',
+ '47' => '40',
+ '48' => '43',
+ '49' => '45',
+ '50' => '30',
+ '51' => '48',
+ '52' => '41',
+ '53' => '11',
+ '54' => '37',
+ '55' => '42',
+ '56' => '38',
+ ],
+ 'EC' => [
+ '01' => 'W',
+ '02' => 'A',
+ '03' => 'B',
+ '04' => 'F',
+ '05' => 'C',
+ '06' => 'H',
+ '07' => 'X',
+ '08' => 'O',
+ '09' => 'E',
+ '10' => 'G',
+ '11' => 'I',
+ '12' => 'L',
+ '13' => 'R',
+ '14' => 'M',
+ '15' => 'S',
+ '17' => 'Y',
+ '18' => 'P',
+ '19' => 'T',
+ '20' => 'Z',
+ '22' => 'U',
+ '23' => 'N',
+ '24' => 'D',
+ ],
+ 'EE' => [
+ '01' => '37',
+ '02' => '39',
+ '03' => '44',
+ '04' => '51',
+ '05' => '49',
+ '07' => '57',
+ '08' => '59',
+ '11' => '67',
+ '12' => '65',
+ '13' => '70',
+ '14' => '74',
+ '18' => '78',
+ '19' => '82',
+ '20' => '84',
+ '21' => '86',
+
+ // invalid codes [used by maxmind] (mapped based on https://en.wikipedia.org/wiki/Municipalities_of_Estonia#Former_municipalities)
+ '06' => '44', // Kohtla-Jarve is part of Ida-Viru
+ '09' => '44', // Narva is part of Ida-Viru
+ '10' => '67', // Parnu
+ '15' => '44', // Sillamae is part of Ida-Viru
+ '16' => '37', // Tallinn is part of Harju
+ '17' => '78', // Tartu
+ ],
+ 'EG' => [
+ '01' => 'DK',
+ '02' => 'BA',
+ '03' => 'BH',
+ '04' => 'FYM',
+ '05' => 'GH',
+ '06' => 'ALX',
+ '07' => 'IS',
+ '08' => 'GZ',
+ '09' => 'MNF',
+ '10' => 'MN',
+ '11' => 'C',
+ '12' => 'KB',
+ '13' => 'WAD',
+ '14' => 'SHR',
+ '15' => 'SUZ',
+ '16' => 'ASN',
+ '17' => 'AST',
+ '18' => 'BNS',
+ '19' => 'PTS',
+ '20' => 'DT',
+ '21' => 'KFS',
+ '22' => 'MT',
+ '23' => 'KN',
+ '24' => 'SHG',
+ '26' => 'JS',
+ '27' => 'SIN',
+
+ // invalid codes [used by maxmind]
+ '28' => 'LX', // Al Uqsur
+ ],
+ 'ER' => [
+ '01' => 'AN',
+ '02' => 'DU',
+ '03' => 'DK',
+ '04' => 'GB',
+ '05' => 'MA',
+ '06' => 'SK',
+ ],
+ 'ES' => [
+ '07' => 'IB',
+ '27' => 'LO',
+ '29' => 'MD',
+ '31' => 'MC',
+ '32' => 'NC',
+ '34' => 'AS',
+ '39' => 'CB',
+ '51' => 'AN',
+ '52' => 'AR',
+ '53' => 'CN',
+ '54' => 'CM',
+ '55' => 'CL',
+ '56' => 'CT',
+ '57' => 'EX',
+ '58' => 'GA',
+ '59' => 'PV',
+ '60' => 'VC',
+ ],
+ 'ET' => [
+ '44' => 'AA',
+ '45' => 'AF',
+ '46' => 'AM',
+ '47' => 'BE',
+ '48' => 'DD',
+ '49' => 'GA',
+ '50' => 'HA',
+ '51' => 'OR',
+ '52' => 'SO',
+ '53' => 'TI',
+ '54' => 'SN',
+ ],
+ 'FI' => [
+ // was rearranged in 2011. codes on wikidata are outdated (https://en.wikipedia.org/wiki/ISO_3166-2:FI)
+ '01' => '01', // Aland
+ '06' => '10', // Lapland
+ '08' => '', // Oulu splitted into subdivisions
+ '13' => '', // Southern Finland splitted into subdivisions
+ '14' => '', // Eastern Finland splitted into subdivisions
+ '15' => '', // Western Finland splitted into subdivisions
+ ],
+ 'FJ' => [
+ '01' => 'C',
+ '02' => 'E',
+ '03' => 'N',
+ '04' => 'R',
+ '05' => 'W',
+ ],
+ 'FR' => [
+ '97' => 'NAQ', // Aquitaine
+ '98' => 'ARA', // Auvergne
+ '99' => 'NOR', // Basse-Normandie
+ 'A1' => 'BFC', // Bourgogne
+ 'A2' => 'BRE', // Bretagne
+ 'A3' => 'CVL', // Centre
+ 'A4' => 'GES', // Champagne-Ardenne
+ 'A5' => 'COR', // Corse
+ 'A6' => 'BFC', // Franche-Comte
+ 'A7' => 'NOR', // Haute-Normandie
+ 'A8' => 'IDF', // Ile-de-France
+ 'A9' => 'OCC', // Languedoc-Roussillon
+ 'B1' => 'NAQ', // Limousin
+ 'B2' => 'GES', // Lorraine
+ 'B3' => 'OCC', // Midi-Pyrenees
+ 'B4' => 'HDF', // Nord-Pas-de-Calais
+ 'B5' => 'PDL', // Pays de la Loire
+ 'B6' => 'HDF', // Picardie
+ 'B7' => 'NAQ', // Poitou-Charentes
+ 'B8' => 'PAC', // Provence-Alpes-Cote d'Azur
+ 'B9' => 'ARA', // Rhone-Alpes
+ 'C1' => 'GES', // Alsace
+ ],
+ 'FM' => [
+ '01' => 'KSA', // Kosrae
+ '02' => 'PNI', // Pohnpei
+ '03' => 'TRK', // Chuuk
+ '04' => 'YAP', // Yap
+ ],
+ 'GA' => [
+ '01' => '1',
+ '02' => '2',
+ '03' => '3',
+ '04' => '4',
+ '05' => '5',
+ '06' => '6',
+ '07' => '7',
+ '08' => '8',
+ '09' => '9',
+ ],
+ 'GB' => [
+ 'A1' => 'BDG',
+ 'A2' => 'BNE',
+ 'A3' => 'BNS',
+ 'A4' => 'BAS',
+ 'A5' => '', // Bedfordshire [split up]
+ 'A6' => 'BEX',
+ 'A7' => 'BIR',
+ 'A8' => 'BBD',
+ 'A9' => 'BPL',
+ 'B1' => 'BOL',
+ 'B2' => 'BMH',
+ 'B3' => 'BRC',
+ 'B4' => 'BRD',
+ 'B5' => 'BEN',
+ 'B6' => 'BNH',
+ 'B7' => 'BST',
+ 'B8' => 'BRY',
+ 'B9' => 'BKM',
+ 'C1' => 'BUR',
+ 'C2' => 'CLD',
+ 'C3' => 'CAM',
+ 'C4' => 'CMD',
+ 'C5' => '', // Cheshire [split up]
+ 'C6' => 'CON',
+ 'C7' => 'COV',
+ 'C8' => 'CRY',
+ 'C9' => 'CMA',
+ 'D1' => 'DAL',
+ 'D2' => 'DER',
+ 'D3' => 'DBY',
+ 'D4' => 'DEV',
+ 'D5' => 'DNC',
+ 'D6' => 'DOR',
+ 'D7' => 'DUD',
+ 'D8' => 'DUR',
+ 'D9' => 'EAL',
+ 'E1' => 'ERY',
+ 'E2' => 'ESX',
+ 'E3' => 'ENF',
+ 'E4' => 'ESS',
+ 'E5' => 'GAT',
+ 'E6' => 'GLS',
+ 'E7' => 'GRE',
+ 'E8' => 'HCK',
+ 'E9' => 'HAL',
+ 'F1' => 'HMF',
+ 'F2' => 'HAM',
+ 'F3' => 'HRY',
+ 'F4' => 'HRW',
+ 'F5' => 'HPL',
+ 'F6' => 'HAV',
+ 'F7' => 'HEF',
+ 'F8' => 'HRT',
+ 'F9' => 'HIL',
+ 'G1' => 'HNS',
+ 'G2' => 'IOW',
+ 'G3' => 'ISL',
+ 'G4' => 'KEC',
+ 'G5' => 'KEN',
+ 'G6' => 'KHL',
+ 'G7' => 'KTT',
+ 'G8' => 'KIR',
+ 'G9' => 'KWL',
+ 'H1' => 'LBH',
+ 'H2' => 'LAN',
+ 'H3' => 'LDS',
+ 'H4' => 'LCE',
+ 'H5' => 'LEC',
+ 'H6' => 'LEW',
+ 'H7' => 'LIN',
+ 'H8' => 'LIV',
+ 'H9' => 'LND',
+ 'I1' => 'LUT',
+ 'I2' => 'MAN',
+ 'I3' => 'MDW',
+ 'I4' => 'MRT',
+ 'I5' => 'MDB',
+ 'I6' => 'MIK',
+ 'I7' => 'NET',
+ 'I8' => 'NWM',
+ 'I9' => 'NFK',
+ 'J1' => 'NTH',
+ 'J2' => 'NEL',
+ 'J3' => 'NLN',
+ 'J4' => 'NSM',
+ 'J5' => 'NTY',
+ 'J6' => 'NBL',
+ 'J7' => 'NYK',
+ 'J8' => 'NGM',
+ 'J9' => 'NTT',
+ 'K1' => 'OLD',
+ 'K2' => 'OXF',
+ 'K3' => 'PTE',
+ 'K4' => 'PLY',
+ 'K5' => 'POL',
+ 'K6' => 'POR',
+ 'K7' => 'RDG',
+ 'K8' => 'RDB',
+ 'K9' => 'RCC',
+ 'L1' => 'RIC',
+ 'L2' => 'RCH',
+ 'L3' => 'ROT',
+ 'L4' => 'RUT',
+ 'L5' => 'SLF',
+ 'L6' => 'SHR',
+ 'L7' => 'SAW',
+ 'L8' => 'SFT',
+ 'L9' => 'SHF',
+ 'M1' => 'SLG',
+ 'M2' => 'SOL',
+ 'M3' => 'SOM',
+ 'M4' => 'STH',
+ 'M5' => 'SOS',
+ 'M6' => 'SGC',
+ 'M7' => 'STY',
+ 'M8' => 'SWK',
+ 'M9' => 'STS',
+ 'N1' => 'SHN',
+ 'N2' => 'SKP',
+ 'N3' => 'STT',
+ 'N4' => 'STE',
+ 'N5' => 'SFK',
+ 'N6' => 'SND',
+ 'N7' => 'SRY',
+ 'N8' => 'STN',
+ 'N9' => 'SWD',
+ 'O1' => 'TAM',
+ 'O2' => 'TFW',
+ 'O3' => 'THR',
+ 'O4' => 'TOB',
+ 'O5' => 'TWH',
+ 'O6' => 'TRF',
+ 'O7' => 'WKF',
+ 'O8' => 'WLL',
+ 'O9' => 'WFT',
+ 'P1' => 'WND',
+ 'P2' => 'WRT',
+ 'P3' => 'WAR',
+ 'P4' => 'WBK',
+ 'P5' => 'WSM',
+ 'P6' => 'WSX',
+ 'P7' => 'WGN',
+ 'P8' => 'WIL',
+ 'P9' => 'WNM',
+ 'Q1' => 'WRL',
+ 'Q2' => 'WOK',
+ 'Q3' => 'WLV',
+ 'Q4' => 'WOR',
+ 'Q5' => 'YOR',
+ 'Q6' => 'ANN',
+ 'Q7' => 'AND',
+ 'Q8' => 'ABC', // Armagh [merged into Armagh, Banbridge and Craigavon]
+ 'Q9' => 'MEA',
+ 'R1' => 'CCG', // Ballymoney [merged into Causeway Coast and Glens]
+ 'R2' => 'ABC', // Banbridge [merged into Armagh, Banbridge and Craigavon]
+ 'R3' => 'BFS',
+ 'R4' => 'MEA',
+ 'R5' => 'LBC', // Castlereagh [merged into Lisburn and Castlereagh]
+ 'R6' => 'CCG',
+ 'R7' => 'MUL',
+ 'R8' => 'ABC', // Craigavon [merged into Armagh, Banbridge and Craigavon]
+ 'R9' => 'NMD', // Down [merged into Newry, Mourne and Down]
+ 'S1' => 'MUL', // Dungannon and South Tyrone [merged into Mid-Ulster]
+ 'S2' => 'FMO', // Fermanagh
+ 'S3' => 'MEA', // Larne [merged into Mid and East Antrim]
+ 'S4' => 'CCG', // Limavady [merged into Causeway Coast and Glens]
+ 'S5' => 'LBC', // Lisburn
+ 'S6' => 'DRS',
+ 'S7' => 'MUL', // Magherafelt [merged into Mid-Ulster]
+ 'S8' => 'CCG',
+ 'S9' => 'NMD',
+ 'T1' => 'ANN', // Newtownabbey [merged into Antrim and Newtownabbey]
+ 'T2' => 'AND', // North Down [merged into North Down and Ards]
+ 'T3' => 'FMO', // Omagh
+ 'T4' => 'DRS', // Strabane
+ 'T5' => 'ABE',
+ 'T6' => 'ABD',
+ 'T7' => 'ANS',
+ 'T8' => 'AGB',
+ 'T9' => 'SCB',
+ 'U1' => 'CLK',
+ 'U2' => 'DGY',
+ 'U3' => 'DND',
+ 'U4' => 'EAY',
+ 'U5' => 'EDU',
+ 'U6' => 'ELN',
+ 'U7' => 'ERW',
+ 'U8' => 'EDH',
+ 'U9' => 'FAL',
+ 'V1' => 'FIF',
+ 'V2' => 'GLG',
+ 'V3' => 'HLD',
+ 'V4' => 'IVC',
+ 'V5' => 'MLN',
+ 'V6' => 'MRY',
+ 'V7' => 'NAY',
+ 'V8' => 'NLK',
+ 'V9' => 'ORK',
+ 'W1' => 'PKN',
+ 'W2' => 'RFW',
+ 'W3' => 'ZET',
+ 'W4' => 'SAY',
+ 'W5' => 'SLK',
+ 'W6' => 'STG',
+ 'W7' => 'WDU',
+ 'W8' => 'ELS',
+ 'W9' => 'WLN',
+ 'X1' => 'AGY',
+ 'X2' => 'BGW',
+ 'X3' => 'BGE',
+ 'X4' => 'CAY',
+ 'X5' => 'CRF',
+ 'X6' => 'CGN',
+ 'X7' => 'CMN',
+ 'X8' => 'CWY',
+ 'X9' => 'DEN',
+ 'Y1' => 'FLN',
+ 'Y2' => 'GWN',
+ 'Y3' => 'MTY',
+ 'Y4' => 'MON',
+ 'Y5' => 'NTL',
+ 'Y6' => 'NWP',
+ 'Y7' => 'PEM',
+ 'Y8' => 'POW',
+ 'Y9' => 'RCT',
+ 'Z1' => 'SWA',
+ 'Z2' => 'TOF',
+ 'Z3' => 'VGL',
+ 'Z4' => 'WRX',
+
+ // invalid codes [used by maxmind] (mapped based on names)
+ 'Z5' => '', // Bedfordshire [split up]
+ 'Z6' => 'CBF', // Central Bedfordshire
+ 'Z7' => 'CHE', // Cheshire East
+ 'Z8' => 'CHW', // Cheshire West and Chester
+ 'Z9' => 'IOS', // Isles of Scilly
+ ],
+ 'GD' => [
+ '01' => '01',
+ '02' => '02',
+ '03' => '03',
+ '04' => '04',
+ '05' => '05',
+ '06' => '06',
+ ],
+ 'GE' => [
+ // subdivisions rearranged 2002 (https://en.wikipedia.org/wiki/ISO_3166-2:EG)
+ // mapping based on the subdivision wikipedia pages
+ '01' => 'SZ', // Abashis Raioni is within Samegrelo-Zemo Svaneti
+ '02' => 'AB', // Abkhazia
+ '03' => 'SJ', // Adigenis Raioni is within Samtskhe-Javakheti
+ '04' => 'AJ', // Ajaria
+ '05' => 'MM', // Akhalgoris Raioni is within Mtskheta-Mtianeti
+ '06' => 'SJ', // Akhalk'alak'is Raioni is within Samtskhe-Javakheti
+ '07' => 'SJ', // Akhalts'ikhis Raioni is within Samtskhe-Javakheti
+ '08' => 'KA', // Akhmetis Raioni is within Kakheti
+ '09' => 'RL', // Ambrolauris Raioni is within Racha-Lechkhumi and Kvemo Svaneti
+ '10' => 'SJ', // Aspindzis Raioni is within Samtskhe-Javakheti
+ '11' => 'IM', // Baghdat'is Raioni is within Imereti
+ '12' => 'KK', // Bolnisis Raioni is within Kvemo Kartli
+ '13' => 'SJ', // Borjomis Raioni is within Samtskhe-Javakheti
+ '14' => 'IM', // Chiat'ura is within Imereti
+ '15' => 'SZ', // Ch'khorotsqus Raioni is within Samegrelo-Zemo Svaneti
+ '16' => 'GU', // Ch'okhatauris Raioni is within Guria
+ '17' => 'KA', // Dedop'listsqaros Raioni is within Kakheti
+ '18' => 'KA', // Dmanisis Raioni is within Kakheti
+ '19' => 'MM', // Dushet'is Raioni is within Mtskheta-Mtianeti
+ '20' => 'KK', // Gardabanis Raioni is within Kvemo Kartli
+ '21' => 'SK', // Gori is within Shida Kartli
+ '22' => 'SK', // Goris Raioni is within Shida Kartli
+ '23' => 'KA', // Gurjaanis Raioni is within Kakheti
+ '24' => 'SK', // Javis Raioni is within Shida Kartli
+ '25' => 'SK', // K'arelis Raioni is within Shida Kartli
+ '26' => 'SK', // Kaspis Raioni is within Shida Kartli
+ '27' => 'IM', // Kharagaulis Raioni is within Imereti
+ '28' => 'SK', // Khashuris Raioni is within Shida Kartli
+ '29' => 'SZ', // Khobis Raioni is within Samegrelo-Zemo Svaneti
+ '30' => 'IM', // Khonis Raioni is within Imereti
+ '31' => 'IM', // K'ut'aisi is within Imereti
+ '32' => 'KA', // Lagodekhis Raioni is within Kakheti
+ '33' => 'GU', // Lanch'khut'is Raioni is within Guria
+ '34' => 'RL', // Lentekhis Raioni is within Racha-Lechkhumi and Kvemo Svaneti
+ '35' => 'KK', // Marneulis Raioni is within Kvemo Kartli
+ '36' => 'SZ', // Martvilis Raioni is within Samegrelo-Zemo Svaneti
+ '37' => 'SZ', // Mestiis Raioni is within Samegrelo-Zemo Svaneti
+ '38' => 'MM', // Mts'khet'is Raioni is within Mtskheta-Mtianeti
+ '39' => 'SJ', // Ninotsmindis Raioni is within Samtskhe-Javakheti
+ '40' => 'RL', // Onis Raioni is within Racha-Lechkhumi and Kvemo Svaneti
+ '41' => 'GU', // Ozurget'is Raioni is within Guria
+ '42' => 'SZ', // P'ot'i is within Samegrelo-Zemo Svaneti
+ '43' => 'MM', // Qazbegis Raioni is within Mtskheta-Mtianeti
+ '44' => 'KA', // Qvarlis Raioni is within Kakheti
+ '45' => 'KK', // Rust'avi is within Kvemo Kartli
+ '46' => 'IM', // Sach'kheris Raioni is within Imereti
+ '47' => 'KA', // Sagarejos Raioni is within Kakheti
+ '48' => 'IM', // Samtrediis Raioni is within Imereti
+ '49' => 'SZ', // Senakis Raioni is within Samegrelo-Zemo Svaneti
+ '50' => 'KA', // Sighnaghis Raioni is within Kakheti
+ '51' => 'TB', // T'bilisi
+ '52' => 'KA', // T'elavis Raioni is within Kakheti
+ '53' => 'IM', // T'erjolis Raioni is within Imereti
+ '54' => 'KK', // T'et'ritsqaros Raioni is within Kvemo Kartli
+ '55' => 'MM', // T'ianet'is Raioni is within Mtskheta-Mtianeti
+ '56' => 'IM', // Tqibuli is within Imereti
+ '57' => 'RL', // Ts'ageris Raioni is within Racha-Lechkhumi and Kvemo Svaneti
+ '58' => 'SZ', // Tsalenjikhis Raioni is within Samegrelo-Zemo Svaneti
+ '59' => 'KK', // Tsalkis Raioni is within Kvemo Kartli
+ '60' => 'IM', // Tsqaltubo is within Imereti
+ '61' => 'IM', // Vanis Raioni is within Imereti
+ '62' => 'IM', // Zestap'onis Raioni is within Imereti
+ '63' => 'SZ', // Zugdidi is within Samegrelo-Zemo Svaneti
+ '64' => 'SZ', // Zugdidis Raioni is within Samegrelo-Zemo Svaneti
+ ],
+ 'GH' => [
+ '01' => 'AA',
+ '02' => 'AH',
+ '03' => 'BA',
+ '04' => 'CP',
+ '05' => 'EP',
+ '06' => 'NP',
+ '08' => 'TV',
+ '09' => 'WP',
+ '10' => 'UE',
+ '11' => 'UW',
+ ],
+ 'GL' => [
+ // ISO introduced their own regions in 2010, they completely differ from FIPS and are not mappable
+ '01' => '', // Nordgronland
+ '02' => '', // Ostgronland
+ '03' => '', // Vestgronland
+ ],
+ 'GM' => [
+ '01' => 'B',
+ '02' => 'L',
+ '03' => 'M',
+ '04' => 'U',
+ '05' => 'W',
+ '07' => 'N',
+ ],
+ 'GN' => [
+ '01' => 'BE', // Beyla
+ '02' => 'BF', // Boffa
+ '03' => 'BK', // Boke
+ '04' => 'C', // Conakry
+ '05' => 'DB', // Dabola
+ '06' => 'DL', // Dalaba
+ '07' => 'DI', // Dinguiraye
+ '09' => 'FA', // Faranah
+ '10' => 'FO', // Forecariah
+ '11' => 'FR', // Fria
+ '12' => 'GA', // Gaoual
+ '13' => 'GU', // Gueckedou
+ '15' => 'KE', // Kerouane
+ '16' => 'KD', // Kindia
+ '17' => 'KS', // Kissidougou
+ '18' => 'KN', // Koundara
+ '19' => 'KO', // Kouroussa
+ '21' => 'MC', // Macenta
+ '22' => 'ML', // Mali
+ '23' => 'MM', // Mamou
+ '25' => 'PI', // Pita
+ '27' => 'TE', // Telimele
+ '28' => 'TO', // Tougue
+ '29' => 'YO', // Yomou
+ '30' => 'CO', // Coyah
+ '31' => 'DU', // Dubreka
+ '32' => 'KA', // Kankan
+ '33' => 'KB', // Koubia
+ '34' => 'LA', // Labe
+ '35' => 'LE', // Lelouma
+ '36' => 'LO', // Lola
+ '37' => 'MD', // Mandiana
+ '38' => 'NZ', // Nzerekore
+ '39' => 'SI', // Siguiri
+ ],
+ 'GQ' => [
+ '03' => 'AN',
+ '04' => 'BN',
+ '05' => 'BS',
+ '06' => 'CS',
+ '07' => 'KN',
+ '08' => 'LI',
+ '09' => 'WN',
+ ],
+ 'GR' => [
+ // rearranged 2016. mapping based on (https://en.wikipedia.org/wiki/ISO_3166-2:GR)
+ '01' => 'A', // Evros
+ '02' => 'A', // Rodhopi
+ '03' => 'A', // Xanthi
+ '04' => 'A', // Drama
+ '05' => 'B', // Serrai
+ '06' => 'B', // Kilkis
+ '07' => 'B', // Pella
+ '08' => 'C', // Florina
+ '09' => 'C', // Kastoria
+ '10' => 'C', // Grevena
+ '11' => 'C', // Kozani
+ '12' => 'B', // Imathia
+ '13' => 'B', // Thessaloniki
+ '14' => 'A', // Kavala
+ '15' => 'B', // Khalkidhiki
+ '16' => 'B', // Pieria
+ '17' => 'D', // Ioannina
+ '18' => 'D', // Thesprotia
+ '19' => 'D', // Preveza
+ '20' => 'D', // Arta
+ '21' => 'E', // Larisa
+ '22' => 'E', // Trikala
+ '23' => 'E', // Kardhitsa
+ '24' => 'E', // Magnisia
+ '25' => 'F', // Kerkira
+ '26' => 'F', // Levkas
+ '27' => 'F', // Kefallinia
+ '28' => 'F', // Zakinthos
+ '29' => 'H', // Fthiotis
+ '30' => 'H', // Evritania
+ '31' => 'G', // Aitolia kai Akarnania
+ '32' => 'H', // Fokis
+ '33' => 'H', // Voiotia
+ '34' => 'H', // Evvoia
+ '35' => 'I', // Attiki
+ '36' => 'J', // Argolis
+ '37' => 'J', // Korinthia
+ '38' => 'G', // Akhaia
+ '39' => 'G', // Ilia
+ '40' => 'J', // Messinia
+ '41' => 'J', // Arkadhia
+ '42' => 'J', // Lakonia
+ '43' => 'M', // Khania
+ '44' => 'M', // Rethimni
+ '45' => 'M', // Iraklion
+ '46' => 'M', // Lasithi
+ '47' => 'L', // Dhodhekanisos
+ '48' => 'K', // Samos
+ '49' => 'L', // Kikladhes
+ '50' => 'K', // Khios
+ '51' => 'K', // Lesvos
+ ],
+ 'GT' => [
+ '01' => 'AV',
+ '02' => 'BV',
+ '03' => 'CM',
+ '04' => 'CQ',
+ '05' => 'PR',
+ '06' => 'ES',
+ '07' => 'GU',
+ '08' => 'HU',
+ '09' => 'IZ',
+ '10' => 'JA',
+ '11' => 'JU',
+ '12' => 'PE',
+ '13' => 'QZ',
+ '14' => 'QC',
+ '15' => 'RE',
+ '16' => 'SA',
+ '17' => 'SM',
+ '18' => 'SR',
+ '19' => 'SO',
+ '20' => 'SU',
+ '21' => 'TO',
+ '22' => 'ZA',
+ ],
+ 'GW' => [
+ '01' => 'BA',
+ '02' => 'QU',
+ '04' => 'OI',
+ '05' => 'BL',
+ '06' => 'CA',
+ '07' => 'TO',
+ '10' => 'GA',
+ '11' => 'BS',
+ '12' => 'BM',
+ ],
+ 'GY' => [
+ '10' => 'BA',
+ '11' => 'CU',
+ '12' => 'DE',
+ '13' => 'EB',
+ '14' => 'ES',
+ '15' => 'MA',
+ '16' => 'PM',
+ '17' => 'PT',
+ '18' => 'UD',
+ '19' => 'UT',
+ ],
+ 'HN' => [
+ '01' => 'AT',
+ '02' => 'CH',
+ '03' => 'CL',
+ '04' => 'CM',
+ '05' => 'CP',
+ '06' => 'CR',
+ '07' => 'EP',
+ '08' => 'FM',
+ '09' => 'GD',
+ '10' => 'IN',
+ '11' => 'IB',
+ '12' => 'LP',
+ '13' => 'LE',
+ '14' => 'OC',
+ '15' => 'OL',
+ '16' => 'SB',
+ '17' => 'VA',
+ '18' => 'YO',
+ ],
+ 'HR' => [
+ '01' => '07',
+ '02' => '12',
+ '03' => '19',
+ '04' => '18',
+ '05' => '04',
+ '06' => '06',
+ '07' => '02',
+ '08' => '09',
+ '09' => '20',
+ '10' => '14',
+ '11' => '11',
+ '12' => '08',
+ '13' => '15',
+ '14' => '03',
+ '15' => '17',
+ '16' => '05',
+ '17' => '10',
+ '18' => '16',
+ '19' => '13',
+ '20' => '01',
+ '21' => '21',
+ ],
+ 'HT' => [
+ '03' => 'NO',
+ '06' => 'AR',
+ '07' => 'CE',
+ '09' => 'ND',
+ '10' => 'NE',
+ '11' => 'OU',
+ '12' => 'SD',
+ '13' => 'SE',
+ '14' => 'GA',
+ '15' => 'NI',
+ ],
+ 'HU' => [
+ '01' => 'BK', // Bacs-Kiskun
+ '02' => 'BA', // Baranya
+ '03' => 'BE', // Bekes
+ '04' => 'BZ', // Borsod-Abauj-Zemplen
+ '05' => 'BU', // Budapest
+ '06' => 'CS', // Csongrad
+ '07' => 'DE', // Debrecen
+ '08' => 'FE', // Fejer
+ '09' => 'GS', // Gyor-Moson-Sopron
+ '10' => 'HB', // Hajdu-Bihar
+ '11' => 'HE', // Heves
+ '12' => 'KE', // Komarom-Esztergom
+ '13' => 'MI', // Miskolc
+ '14' => 'NO', // Nograd
+ '15' => 'PS', // Pecs
+ '16' => 'PE', // Pest
+ '17' => 'SO', // Somogy
+ '18' => 'SZ', // Szabolcs-Szatmar-Bereg
+ '19' => 'SD', // Szeged
+ '20' => 'JN', // Jasz-Nagykun-Szolnok
+ '21' => 'TO', // Tolna
+ '22' => 'VA', // Vas
+ '23' => 'VE', // Veszprem
+ '24' => 'ZA', // Zala
+ '25' => 'GY', // Gyor
+ '26' => 'BC', // Bekescsaba
+ '27' => 'DU', // Dunaujvaros
+ '28' => 'EG', // Eger
+ '29' => 'HV', // Hodmezovasarhely
+ '30' => 'KV', // Kaposvar
+ '31' => 'KM', // Kecskemet
+ '32' => 'NK', // Nagykanizsa
+ '33' => 'NY', // Nyiregyhaza
+ '34' => 'SN', // Sopron
+ '35' => 'SF', // Szekesfehervar
+ '36' => 'SK', // Szolnok
+ '37' => 'SH', // Szombathely
+ '38' => 'TB', // Tatabanya
+ '39' => 'VE', // Veszprem
+ '40' => 'ZE', // Zalaegerszeg
+ '41' => 'ST', // Salgotarjan
+ '42' => 'SS', // Szekszard
+ '43' => 'ER', // Erd
+ ],
+ 'ID' => [
+ '01' => 'AC',
+ '02' => 'BA',
+ '03' => 'BE',
+ '04' => 'JK',
+ '05' => 'JA',
+ '07' => 'JT',
+ '08' => 'JI',
+ '10' => 'YO',
+ '11' => 'KB',
+ '12' => 'KS',
+ '13' => 'KT',
+ '14' => 'KI',
+ '15' => 'LA',
+ '17' => 'NB',
+ '18' => 'NT',
+ '21' => 'ST',
+ '22' => 'SG',
+ '24' => 'SB',
+ '26' => 'SU',
+ '28' => 'MA',
+ '29' => 'MU',
+ '30' => 'JB',
+ '31' => 'SA',
+ '32' => 'SS',
+ '33' => 'BT',
+ '34' => 'GO',
+ '35' => 'BB',
+ '36' => 'PA',
+ '37' => 'RI',
+ '38' => 'SN',
+ '39' => 'PB',
+ '40' => 'KR',
+ '41' => 'SR',
+ ],
+ 'IE' => [
+ '01' => 'CW',
+ '02' => 'CN',
+ '03' => 'CE',
+ '04' => 'CO',
+ '06' => 'DL',
+ '07' => 'D',
+ '10' => 'G',
+ '11' => 'KY',
+ '12' => 'KE',
+ '13' => 'KK',
+ '14' => 'LM',
+ '15' => 'LS',
+ '16' => 'LK',
+ '18' => 'LD',
+ '19' => 'LH',
+ '20' => 'MO',
+ '21' => 'MH',
+ '22' => 'MN',
+ '23' => 'OY',
+ '24' => 'RN',
+ '25' => 'SO',
+ '26' => 'TA',
+ '27' => 'WD',
+ '29' => 'WH',
+ '30' => 'WX',
+ '31' => 'WW',
+ ],
+ 'IL' => [
+ '01' => 'D',
+ '02' => 'M',
+ '03' => 'Z',
+ '04' => 'HA',
+ '05' => 'TA',
+ '06' => 'JM',
+ ],
+ 'IN' => [
+ '01' => 'AN',
+ '02' => 'AP',
+ '03' => 'AS',
+ '05' => 'CH',
+ '06' => 'DN',
+ '07' => 'DL',
+ '09' => 'GJ',
+ '10' => 'HR',
+ '11' => 'HP',
+ '12' => 'JK',
+ '13' => 'KL',
+ '14' => 'LD',
+ '16' => 'MH',
+ '17' => 'MN',
+ '18' => 'ML',
+ '19' => 'KA',
+ '20' => 'NL',
+ '21' => 'OR',
+ '22' => 'PY',
+ '23' => 'PB',
+ '24' => 'RJ',
+ '25' => 'TN',
+ '26' => 'TR',
+ '28' => 'WB',
+ '29' => 'SK',
+ '30' => 'AR',
+ '31' => 'MZ',
+ '32' => 'DD',
+ '33' => 'GA',
+ '34' => 'BR',
+ '35' => 'MP',
+ '36' => 'UP',
+ '37' => 'CT',
+ '38' => 'JH',
+ '39' => 'UT',
+ ],
+ 'IQ' => [
+ '01' => 'AN',
+ '02' => 'BA',
+ '03' => 'MU',
+ '04' => 'QA',
+ '05' => 'SU',
+ '06' => 'BB',
+ '07' => 'BG',
+ '08' => 'DA',
+ '09' => 'DQ',
+ '10' => 'DI',
+ '11' => 'AR',
+ '12' => 'KA',
+ '13' => 'KI',
+ '14' => 'MA',
+ '15' => 'NI',
+ '16' => 'WA',
+ '17' => 'NA',
+ '18' => 'SD',
+ ],
+ 'IR' => [
+ // mapping based on wikidata and on manual name matches
+ '01' => '02', // Āz̄arbāyjān-e Gharbī Province
+ '03' => '08', // Chahār Maḩāll va Bakhtīār Province
+ '04' => '13', // Sīstān va Balūchestān Province
+ '05' => '18', // Kohgīlūyeh va Būyer Aḩmad Province
+ '07' => '14', // Fārs Province
+ '08' => '19', // Gīlān Province
+ '09' => '24', // Hamadān Province
+ '10' => '05', // Īlām Province
+ '11' => '23', // Hormozgān Province
+ '13' => '17', // Kermānshāh Province
+ '15' => '10', // Khūzestān Province
+ '16' => '16', // Kordestān Province
+ '22' => '06', // Būshehr Province
+ '23' => '20', // Lorestān Province
+ '25' => '12', // Semnān Province
+ '26' => '07', // Tehrān Province
+ '28' => '04', // Eşfahān Province
+ '29' => '15', // Kermān Province
+ '32' => '03', // Ardabīl Province
+ '33' => '01', // Āz̄arbāyjān-e Sharqī Province
+ '34' => '22', // Markaz Province
+ '35' => '21', // Māzandarān Province
+ '36' => '11', // Zanjān Province
+ '37' => '27', // Golestān Province
+ '38' => '28', // Qazvīn Province
+ '39' => '26', // Qom Province
+ '40' => '25', // Yazd Province
+ '41' => '29', // Khorāsān-e Janūbī Province
+ '42' => '30', // Khorāsān-e Razavī Province
+ '43' => '31', // Khorāsān-e Razavī Province
+ '44' => '32', // Alborz Province
+
+ // invalid codes [used by maxmind]
+ '12' => '15', // Kerman
+ '17' => '21', // Mazandaran
+ '18' => '12', // Semnan Province
+ '19' => '22', // Markazi
+ '21' => '11', // Zanjan
+ '24' => '22', // Markazi
+ '27' => '11', // Zanjan
+ '30' => '', // Khorasan [split up]
+ '31' => '25', // Yazd
+ ],
+ 'IS' => [
+ // codes contained in maxmind file, but actually no valid FIPS codes anymore
+ // mapping roughly based on the maps of Wikipedia
+ '03' => '8', // Arnessysla
+ '05' => '5', // Austur-Hunavatnssysla
+ '06' => '7', // Austur-Skaftafellssysla
+ '07' => '3', // Borgarfjardarsysla
+ '09' => '6', // Eyjafjardarsysla
+ '10' => '2', // Gullbringusysla
+ '15' => '1', // Kjosarsysla
+ '17' => '3', // Myrasysla
+ '20' => '7', // Nordur-Mulasysla
+ '21' => '6', // Nordur-Tingeyjarsysla
+ '23' => '8', // Rangarvallasysla
+ '28' => '5', // Skagafjardarsysla
+ '29' => '3', // Snafellsnes- og Hnappadalssysla
+ '30' => '4', // Strandasysla
+ '31' => '7', // Sudur-Mulasysla
+ '32' => '6', // Sudur-Tingeyjarsysla
+ '34' => '4', // Vestur-Bardastrandarsysla
+ '35' => '5', // Vestur-Hunavatnssysla
+ '36' => '4', // Vestur-Isafjardarsysla
+ '37' => '8', // Vestur-Skaftafellssysla
+ // valid FIPS codes
+ '38' => '7', // Austurland
+ '39' => '1', // Hofuoborgarsvaoio
+ '40' => '6', // Norourland Eystra
+ '41' => '5', // Norourland Vestra
+ '42' => '8', // Suourland
+ '43' => '2', // Suournes
+ '44' => '4', // Vestfiroir
+ '45' => '3', // Vesturland
+ ],
+ 'IT' => [
+ '01' => '65',
+ '02' => '77',
+ '03' => '78',
+ '04' => '72',
+ '05' => '45',
+ '06' => '36',
+ '07' => '62',
+ '08' => '42',
+ '09' => '25',
+ '10' => '57',
+ '11' => '67',
+ '12' => '21',
+ '13' => '75',
+ '14' => '88',
+ '15' => '82',
+ '16' => '52',
+ '17' => '32',
+ '18' => '55',
+ '19' => '23',
+ '20' => '34',
+ ],
+ 'JM' => [
+ '01' => '13',
+ '02' => '09',
+ '04' => '12',
+ '07' => '04',
+ '08' => '02',
+ '09' => '06',
+ '10' => '14',
+ '11' => '11',
+ '12' => '08',
+ '13' => '05',
+ '14' => '03',
+ '15' => '07',
+ '16' => '10',
+ '17' => '01',
+ ],
+ 'JO' => [
+ '02' => 'BA',
+ '09' => 'KA',
+ '12' => 'AT',
+ '15' => 'MA',
+ '16' => 'AM',
+ '17' => 'AZ',
+ '18' => 'IR',
+ '19' => 'MN',
+ '20' => 'AJ',
+ '21' => 'AQ',
+ '22' => 'JA',
+ '23' => 'MD',
+ ],
+ 'JP' => [
+ '01' => '23',
+ '02' => '05',
+ '03' => '02',
+ '04' => '12',
+ '05' => '38',
+ '06' => '18',
+ '07' => '40',
+ '08' => '07',
+ '09' => '21',
+ '10' => '10',
+ '11' => '34',
+ '12' => '01',
+ '13' => '28',
+ '14' => '08',
+ '15' => '17',
+ '16' => '03',
+ '17' => '37',
+ '18' => '46',
+ '19' => '14',
+ '20' => '39',
+ '21' => '43',
+ '22' => '26',
+ '23' => '24',
+ '24' => '04',
+ '25' => '45',
+ '26' => '20',
+ '27' => '42',
+ '28' => '29',
+ '29' => '15',
+ '30' => '44',
+ '31' => '33',
+ '32' => '27',
+ '33' => '41',
+ '34' => '11',
+ '35' => '25',
+ '36' => '32',
+ '37' => '22',
+ '38' => '09',
+ '39' => '36',
+ '40' => '13',
+ '41' => '31',
+ '42' => '16',
+ '43' => '30',
+ '44' => '06',
+ '45' => '35',
+ '46' => '19',
+ '47' => '47',
+ ],
+ 'KE' => [
+ // completely reorganized in 2014
+ '01' => '',
+ '02' => '',
+ '03' => '',
+ '05' => '',
+ '06' => '',
+ '07' => '',
+ '08' => '',
+ '09' => '',
+ ],
+ 'KG' => [
+ '01' => 'GB', // Bishkek
+ '02' => 'C', // Chuy
+ '03' => 'J', // Jalal-Abad
+ '04' => 'N', // Naryn
+ '06' => 'T', // Talas
+ '07' => 'Y', // Ysyk-Kol
+ '08' => 'GO', // Osh
+ '09' => 'B', // Batken
+
+ // [invalid code]
+ '05' => 'GO', // Osh
+ ],
+ 'KH' => [
+ '02' => '3',
+ '03' => '4',
+ '04' => '5',
+ '05' => '6',
+ '07' => '8',
+ '08' => '9',
+ '09' => '10',
+ '10' => '11',
+ '12' => '15',
+ '13' => '13',
+ '14' => '14',
+ '17' => '19',
+ '18' => '20',
+ '19' => '21',
+ '22' => '12',
+ '23' => '16',
+ '25' => '1',
+ '28' => '18',
+ '29' => '2',
+ '30' => '24',
+
+ // invalid codes [used by maxmind] (mapped based on the names)
+ '01' => '2', // Batdambang
+ '06' => '7', // Kampot
+ '11' => '12', // Phnum Penh
+ '15' => '16', // Ratanakiri Kiri
+ '16' => '17', // Siem Reap
+ ],
+ 'KI' => [
+ '01' => 'G',
+ '02' => 'L',
+ '03' => 'P',
+ ],
+ 'KM' => [
+ '01' => 'A',
+ '02' => 'G',
+ '03' => 'M',
+ ],
+ 'KN' => [
+ '01' => '01',
+ '02' => '02',
+ '03' => '03',
+ '04' => '04',
+ '05' => '05',
+ '06' => '06',
+ '07' => '07',
+ '08' => '08',
+ '09' => '09',
+ '10' => '10',
+ '11' => '11',
+ '12' => '12',
+ '13' => '13',
+ '15' => '15',
+ ],
+ 'KP' => [
+ // mapping based on names an wikipedia pages
+ '01' => '04', // Chagang-do
+ '03' => '08', // Hamgyong-namdo
+ '06' => '05', // Hwanghae-namdo
+ '07' => '09', // Hwanghae-bukto
+ '08' => '06', // Kaesong-si
+ '09' => '07', // Kangwon-do
+ '11' => '09', // P'yongan-bukto
+ '12' => '01', // P'yongyang-si
+ '13' => '10', // Yanggang-do
+ '14' => '14', // Namp'o-si
+ '15' => '02', // P'yongan-namdo
+ '17' => '09', // Hamgyong-bukto
+ '18' => '13', // Najin Sonbong-si
+ ],
+ 'KR' => [
+ '01' => '49',
+ '03' => '45',
+ '05' => '43',
+ '06' => '42',
+ '10' => '26',
+ '11' => '11',
+ '12' => '28',
+ '13' => '41',
+ '14' => '47',
+ '15' => '27',
+ '16' => '46',
+ '17' => '44',
+ '18' => '29',
+ '19' => '30',
+ '20' => '48',
+ '21' => '31',
+ ],
+ 'KW' => [
+ '01' => 'AH',
+ '02' => 'KU',
+ '05' => 'JA',
+ '07' => 'FA',
+ '08' => 'HA',
+ '09' => 'MU',
+ ],
+ 'KY' => [
+ // Cayman Islands do not have an ISO regions
+ '01' => '',
+ '02' => '',
+ '03' => '',
+ '04' => '',
+ '05' => '',
+ '06' => '',
+ '07' => '',
+ '08' => '',
+ ],
+ 'KZ' => [
+ '01' => 'ALM',
+ '02' => 'ALA',
+ '03' => 'AKM',
+ '04' => 'AKT',
+ '05' => 'AST',
+ '06' => 'ATY',
+ '07' => 'ZAP',
+ '08' => 'BAY',
+ '09' => 'MAN',
+ '10' => 'YUZ',
+ '11' => 'PAV',
+ '12' => 'KAR',
+ '13' => 'KUS',
+ '14' => 'KZY',
+ '15' => 'VOS',
+ '16' => 'SEV',
+ '17' => 'ZHA',
+ ],
+ 'LA' => [
+ '01' => 'AT',
+ '02' => 'CH',
+ '03' => 'HO',
+ '07' => 'OU',
+ '13' => 'XA',
+ '14' => 'XI',
+ '17' => 'LP',
+
+ // valid codes [not used by maxmind]
+ '18' => 'PH', // Phôngsali Province
+ '19' => 'SL', // Salavan Province
+ '20' => 'SV', // Savannakhét Province
+ '22' => 'BK', // Bokèo Province
+ '23' => 'BL', // Bolikhamxai Province
+ '24' => 'VI', // Viangchan Municipality
+ '25' => 'XS', // Xaisômboun Special Zone
+ '26' => 'XE', // Xékong Province
+ '27' => 'VI', // Vientiane Province
+
+ // invalid codes [used by maxmind] (mapped based on the names)
+ '04' => 'KH', //Khammouan
+ '05' => 'LM', //Louang Namtha
+ '08' => 'PH', //Phongsali
+ '09' => 'SL', //Saravan
+ '10' => 'SV', //Savannakhet
+ '11' => 'VI', //Vientiane
+ ],
+ 'LB' => [
+ '04' => 'BA',
+ '05' => 'JL',
+ '06' => 'JA',
+ '07' => 'NA',
+ '08' => 'BI',
+ '09' => 'AS',
+ '10' => 'AK',
+ '11' => 'BH',
+
+ // invalid codes [used by maxmind]
+ '01' => 'BI', // Beqaa
+ '02' => 'JA', // Al Janub
+ '03' => 'AS', // Liban-Nord
+ ],
+ 'LC' => [
+ '01' => '01',
+ '02' => '', // [split up]
+ '03' => '02',
+ '04' => '03',
+ '05' => '05',
+ '06' => '06',
+ '07' => '07',
+ '08' => '08',
+ '09' => '10',
+ '10' => '11',
+ '11' => '', // [split up]
+ ],
+ 'LI' => [
+ '01' => '01',
+ '02' => '02',
+ '03' => '03',
+ '04' => '04',
+ '05' => '05',
+ '06' => '06',
+ '07' => '07',
+ '08' => '08',
+ '09' => '09',
+ '10' => '10',
+ '11' => '11',
+
+ // codes screwed up by maxmind
+ // Based on the names they seem to be from Liberia, so remove them
+ '21' => '', // Gbarpolu
+ '22' => '', // River Gee
+ ],
+ 'LK' => [
+ // valid FIPS codes [not used by maxmind]
+ '01' => '52', // Amparai District
+ '02' => '71', // Anuradhapura District
+ '03' => '81', // Badulla District
+ '04' => '51', // Batticaloa District
+ '06' => '31', // Galle District
+ '07' => '33', // Hambantota District
+ '09' => '13', // Kalutara District
+ '10' => '21', // Kandy District
+ '11' => '92', // Kegalla District
+ '12' => '61', // Kurunegala District
+ '14' => '22', // Matale District
+ '15' => '32', // Matara District
+ '16' => '82', // Moneragala District
+ '17' => '23', // Nuwara Eliya District
+ '18' => '72', // Polonnaruwa District
+ '19' => '62', // Puttalam District
+ '20' => '91', // Ratnapura District
+ '21' => '53', // Trincomalee District
+ '23' => '11', // Colombo District
+ '24' => '12', // Gampaha District
+ '25' => '41', // Jaffna District
+ '26' => '43', // Mannar District
+ '27' => '45', // Mullaittivu District
+ '28' => '44', // Vavuniya District
+
+ // invalid codes [use by maxmind]
+ '29' => '2', // Central
+ '30' => '7', // North Central
+ '32' => '6', // North Western
+ '33' => '9', // Sabaragamuwa
+ '34' => '3', // Southern
+ '35' => '8', // Uva
+ '36' => '1', // Western
+ '37' => '5', // Eastern
+ '38' => '4', // Northern
+ ],
+ 'LR' => [
+ '01' => 'BG',
+ '09' => 'NI',
+ '10' => 'SI',
+ '11' => 'GB',
+ '12' => 'CM',
+ '13' => 'MY',
+ '14' => 'MO',
+ '17' => 'MG',
+ '18' => 'RI',
+ '19' => 'GG',
+ '20' => 'LO',
+ '21' => 'GP',
+ '22' => 'RG',
+
+ // valid codes [not used by maxmind]
+ '15' => 'BM',
+ '16' => 'GK',
+
+ // invalid codes [used by maxmind]
+ '04' => 'CM', // Grand Cape Mount
+ '05' => 'LO', // Lofa
+ '06' => 'MY', // Maryland
+ '07' => 'MO', // Monrovia [capital city in region Montserrado]
+ ],
+ 'LS' => [
+ '10' => 'D',
+ '11' => 'B',
+ '12' => 'C',
+ '13' => 'E',
+ '14' => 'A',
+ '15' => 'F',
+ '16' => 'J',
+ '17' => 'H',
+ '18' => 'G',
+ '19' => 'K',
+ ],
+ 'LT' => [
+ '56' => 'AL',
+ '57' => 'KU',
+ '58' => 'KL',
+ '59' => 'MR',
+ '60' => 'PN',
+ '61' => 'SA',
+ '62' => 'TA',
+ '63' => 'TE',
+ '64' => 'UT',
+ '65' => 'VL',
+ ],
+ 'LU' => [
+ // completely reorganized in 2015
+ '01' => '',
+ '02' => '',
+ '03' => '',
+ ],
+ 'LV' => [
+ // mapping based on the names on wikipedia
+ '01' => '002', // Aizkraukles
+ '02' => '007', // Aluksnes
+ '03' => '015', // Balvu
+ '04' => '016', // Bauskas
+ '05' => '022', // Cesu
+ '06' => 'DGV', // Daugavpils
+ '07' => '025', // Daugavpils
+ '08' => '026', // Dobeles
+ '09' => '033', // Gulbenes
+ '10' => '042', // Jekabpils
+ '11' => 'JEL', // Jelgava
+ '12' => '041', // Jelgavas
+ '13' => 'JUR', // Jurmala
+ '14' => '047', // Kraslavas
+ '15' => '050', // Kuldigas
+ '16' => 'LPX', // Liepaja
+ '17' => '', // Liepajas [splitted in 2009 and not mappable]
+ '18' => '054', // Limbazu
+ '19' => '058', // Ludzas
+ '20' => '059', // Madonas
+ '21' => '067', // Ogres
+ '22' => '073', // Preilu
+ '23' => 'REZ', // Rezekne
+ '24' => '077', // Rezeknes
+ '25' => 'RIX', // Riga
+ '26' => '', // Rigas [splitted in 2009 and not mappable]
+ '27' => '088', // Saldus
+ '28' => '097', // Talsu
+ '29' => '099', // Tukuma
+ '30' => '101', // Valkas
+ '31' => 'VMR', // Valmieras
+ '32' => 'VEN', // Ventspils
+ '33' => '106', // Ventspils
+ ],
+ 'LY' => [
+ '03' => 'JI', // Al Aziziyah [part of Jafara since 2009]
+ '05' => 'JU', // Al Jufrah
+ '08' => 'KF', // Al Kufrah
+ '13' => 'WS', // Ash Shati'
+ '30' => 'MQ', // Murzuq
+ '34' => 'SB', // Sabha
+ '41' => 'MQ', // Tarhunah [occupied by Tarhuna wa Msalata and transformed to Murqub in 2009]
+ '42' => 'BU', // Tubruq
+ '45' => 'MI', // Zlitan [part of Misrata since 2009]
+ '47' => 'WA', // Ajdabiya [included in Al Wāḩāt since 2007]
+ '48' => 'MJ', // Al Fatih [some parts are in Marj]
+ '49' => 'JA', // Al Jabal al Akhdar
+ '50' => 'MB', // Al Khums [seems to be part of Al Marqab]
+ '51' => 'NQ', // An Nuqat al Khams
+ '52' => 'WD', // Awbari [part of Wadi al Hayaa]
+ '53' => 'ZA', // Az Zawiyah
+ '54' => 'BA', // Banghazi
+ '55' => 'DR', // Darnah
+ '56' => 'NL', // Ghadamis [part of Nalut]
+ '57' => 'JG', // Gharyan [part of Jabal al Gharbi since 2007]
+ '58' => 'MI', // Misratah
+ '59' => '', // Sawfajjin [split between Sirte and Misrata]
+ '60' => 'SR', // Surt
+ '61' => 'TB', // Tarabulus
+ '62' => '', // Yafran [split between Jabal al Gharbi and Nalut]
+ ],
+ 'MA' => [
+ '45' => '08',
+ '46' => '05',
+ '47' => '11',
+ '48' => '06',
+ '49' => '07',
+ '50' => '09',
+ '51' => '10',
+ '52' => '02',
+ '53' => '14',
+ '54' => '04',
+ '55' => '13',
+ '56' => '12',
+ '57' => '01',
+ '58' => '03',
+ '59' => '15',
+ ],
+ 'MC' => [
+ // there are no fips codes for Monaco
+ // those were used by maxind
+ '01' => 'CO', // La Condamine
+ '02' => 'MO', // Monaco
+ '03' => 'MC', // Monte-Carlo
+ ],
+ 'MD' => [
+ '51' => 'GA',
+ '57' => 'CU', // Chisinau
+ '58' => 'SN', // Stinga Nistrului
+ '59' => 'AN',
+ '60' => 'BA',
+ '61' => 'BS',
+ '62' => 'BD',
+ '63' => 'BR',
+ '64' => 'CA',
+ '65' => 'CT',
+ '66' => 'CL', // Calarasi
+ '67' => 'CS',
+ '68' => 'CM', // Cimislia
+ '69' => 'CR',
+ '70' => 'DO',
+ '71' => 'DR',
+ '72' => 'DU',
+ '73' => 'ED',
+ '74' => 'FA',
+ '75' => 'FL', // Floresti
+ '76' => 'GL',
+ '77' => 'HI',
+ '78' => 'IA',
+ '79' => 'LE',
+ '80' => 'NI',
+ '81' => 'OC',
+ '82' => 'OR',
+ '83' => 'RE',
+ '84' => 'RI',
+ '85' => 'SI',
+ '86' => 'SD',
+ '87' => 'SO',
+ '88' => 'SV',
+ '89' => 'ST',
+ '90' => 'TA', // Taraclia
+ '91' => 'TE',
+ '92' => 'UN', // Ungheni
+ ],
+ 'MG' => [
+ '01' => 'D', // Antsiranana
+ '02' => 'F', // Fianarantsoa
+ '03' => 'M', // Mahajanga
+ '04' => 'A', // Toamasina
+ '05' => 'T', // Antananarivo
+ '06' => 'U', // Toliara
+ ],
+ 'MK' => [
+ '01' => '02', // Aracinovo
+ '02' => '55', // Bac [now part of Novaci]
+ '03' => '22', // Belcista [now Debarca]
+ '04' => '03', // Berovo
+ '05' => '04', // Bistrica [city in Bitola]
+ '06' => '04', // Bitola
+ '07' => '14', // Blatec [now part of Vinica]
+ '08' => '05', // Bogdanci
+ '09' => '80', // Bogomila [city in Caska]
+ '10' => '03', // Bogovinje
+ '11' => '07', // Bosilovo
+ '12' => '08', // Brvenica
+ '14' => '04', // Capari [city in Bitola]
+ '15' => '80', // Caska
+ '16' => '19', // Cegrane [city in Gostivar]
+ '19' => '81', // Cesinovo
+ '20' => '82', // Cucer-Sandevo
+ '21' => '21', // Debar
+ '22' => '23', // Delcevo
+ '23' => '72', // Delogozdi [city in Struga]
+ '24' => '25', // Demir Hisar
+ '25' => '24', // Demir Kapija
+ '26' => '53', // Dobrusevo [city in Moglia]
+ '27' => '19', // Dolna Banjica [city in Gostivar]
+ '28' => '27', // Dolneni
+ '30' => '40', // Drugovo [merged with Kicevo]
+ '31' => '76', // Dzepciste [city in Tetovo]
+ '33' => '18', // Gevgelija
+ '34' => '19', // Gostivar
+ '35' => '20', // Gradsko
+ '36' => '34', // Ilinden
+ '37' => '80', // Izvor [attached to Caska]
+ '38' => '35', // Jegunovce
+ '39' => '03', // Kamenjane [city in Bogovinje]
+ '40' => '37', // Karbinci
+ '41' => '85', // Karpos [now in Skopje]
+ '42' => '36', // Kavadarci
+ '43' => '40', // Kicevo
+ '44' => '85', // Kisela Voda [now in Skopje]
+ '45' => '', // Klecevce [attached to Klecevce and Staro Nagoricane]
+ '46' => '42', // Kocani
+ '47' => '41', // Konce
+ '48' => '85', // Kondovo [now in Skopje]
+ '49' => '36', // Konopiste [city in Kavadarci]
+ '50' => '58', // Kosel [city in Ohrid]
+ '51' => '43', // Kratovo
+ '52' => '44', // Kriva Palanka
+ '53' => '45', // Krivogastani
+ '54' => '46', // Krusevo
+ '55' => '73', // Kuklis [city in Strumica]
+ '56' => '04', // Kukurecani [city in Bitola]
+ '57' => '47', // Kumanovo
+ '58' => '72', // Labunista [city in Struga]
+ '59' => '48', // Lipkovo
+ '60' => '49', // Lozovo
+ '61' => '72', // Lukovo [city in Struga]
+ '62' => '51', // Makedonska Kamenica
+ '63' => '52', // Makedonski Brod
+ '64' => '50', // Mavrovi Anovi [city in Mavrovo i Rostuša]
+ '65' => '22', // Meseista [city in Debarca]
+ '66' => '18', // Miravci [city in Gevgelija]
+ '67' => '53', // Mogila
+ '68' => '73', // Murtino [splitted between Strumica and Bosilovo; major part in Strumica]
+ '69' => '54', // Negotino
+ '70' => '54', // Negotino-Polosko
+ '71' => '55', // Novaci
+ '72' => '56', // Novo Selo
+ '73' => '81', // Oblesevo
+ '74' => '58', // Ohrid
+ '75' => '47', // Orasac [city in Kumanovo]
+ '76' => '48', // Orizari [city in Lipkovo]
+ '77' => '40', // Oslomej [city in Kičevo]
+ '78' => '60', // Pehcevo
+ '79' => '59', // Petrovec
+ '80' => '61', // Plasnica
+ '81' => '64', // Podares [city in Rodavis]
+ '82' => '62', // Prilep
+ '83' => '63', // Probistip
+ '84' => '64', // Radovis
+ '85' => '65', // Rankovce
+ '86' => '66', // Resen
+ '87' => '67', // Rosoman
+ '88' => '50', // Rostusa [city in Mavrovo i Rostuša]
+ '89' => '', // Samokov [city in Sofia] ?????????????????????
+ '90' => '85', // Saraj [now in Skopje]
+ '91' => '76', // Sipkovica [city in Tetovo]
+ '92' => '70', // Sopiste
+ '93' => '25', // Sopotnica [city in Demir Hisar]
+ '94' => '19', // Srbinovo [city in Gostivar]
+ '95' => '55', // Staravina [city in Novaci]
+ '96' => '26', // (Star) Dojran
+ '97' => '71', // Staro Nagoricane
+ '98' => '83', // Stip
+ '99' => '72', // Struga
+ 'A1' => '73', // Strumica
+ 'A2' => '73', // Studenicani
+ 'A3' => '85', // Suto Orizari [now in Skopje]
+ 'A4' => '69', // Sveti Nikole
+ 'A5' => '75', // Tearce
+ 'A6' => '76', // Tetovo
+ 'A7' => '62', // Topolcani [city in Prilep]
+ 'A8' => '10', // Valandovo
+ 'A9' => '11', // Vasilevo
+ 'B1' => '16', // Veles
+ 'B2' => '72', // Velesta [city in Struga]
+ 'B3' => '12', // Vevcani
+ 'B4' => '14', // Vinica
+ 'B5' => '62', // Vitoliste [city in Prilep]
+ 'B6' => '40', // Vranestica [now in Kicevo]
+ 'B7' => '16', // Vrapciste
+ 'B8' => '35', // Vratnica [city in Jegunovce]
+ 'B9' => '19', // Vrutok [city in Gostivar]
+ 'C1' => '40', // Zajas [now in Kicevo]
+ 'C2' => '32', // Zelenikovo
+ 'C3' => '30', // Zelino
+ 'C4' => '27', // Zitose [city in Dolneni]
+ 'C5' => '63', // Zletovo [city in Probistip]
+ 'C6' => '33', // Zrnovci
+
+ // invalid codes [used by maxmind]
+ '13' => '85', // Cair [now in Skopje]
+ '17' => '78', // Centar
+ '18' => '78', // Centar Zupa
+ '29' => '85', // Dorce Petrov [now in Skopje]
+ '32' => '85', // Gazi Baba [now in Skopje]
+ 'C8' => '85', // Cair [now in Skopje]
+ 'C9' => '80', // Caska
+ 'D2' => '21', // Debar
+ 'D3' => '25', // Demir Hisar
+ 'D4' => '19', // Gostivar
+ 'D5' => '35', // Jegunovce
+ 'D6' => '36', // Kavadarci
+ 'D7' => '47', // Kumanovo
+ 'D8' => '52', // Makedonski Brod
+ 'E2' => '58', // Ohrid
+ 'E3' => '62', // Prilep
+ 'E5' => '26', // Dojran
+ 'E6' => '72', // Struga
+ 'E7' => '73', // Strumica
+ 'E8' => '76', // Tetovo
+ 'E9' => '10', // Valandovo
+ 'F1' => '13', // Veles
+ 'F2' => '85', // Aerodrom [now in Skopje]
+ ],
+ 'ML' => [
+ '01' => 'BKO',
+ '03' => '1',
+ '04' => '5',
+ '05' => '4',
+ '06' => '3',
+ '07' => '2',
+ '08' => '6',
+ '09' => '7',
+ '10' => '8',
+ ],
+ 'MM' => [
+ '01' => '16', // Rakhine State
+ '02' => '14', // Chin State
+ '03' => '07', // Irrawaddy
+ '04' => '11', // Kachin State
+ '05' => '13', // Karan State
+ '06' => '12', // Kayah State
+ '08' => '04', // Mandalay
+ '10' => '01', // Sagaing
+ '11' => '17', // Shan State
+ '12' => '05', // Tenasserim
+ '13' => '15', // Mon State
+ '17' => '06', // Yangon
+
+ // invalid codes [used by maxmind]
+ '07' => '03', // Magwe
+ '09' => '02', // Pegu
+ '14' => '06', // Rangoon
+
+ // valid codes [not used by maxmind]
+ '15' => '03', // Magway Division
+ '16' => '02', // Bago Division
+ ],
+ 'MN' => [
+ '01' => '073', // Arhangay
+ '02' => '069', // Bayanhongor
+ '03' => '071', // Bayan-Olgiy
+ '06' => '061', // Dornod
+ '07' => '063', // Dornogovi
+ '08' => '059', // Dundgovi
+ '09' => '057', // Dzavhan
+ '10' => '065', // Govi-Altay
+ '11' => '039', // Hentiy
+ '12' => '043', // Hovd
+ '13' => '041', // Hovsgol
+ '14' => '053', // Omnogovi
+ '15' => '055', // Ovorhangay
+ '16' => '049', // Selenge
+ '17' => '051', // Suhbaatar
+ '18' => '047', // Tov
+ '19' => '046', // Uvs
+ '20' => '1', // Ulaanbaatar
+ '21' => '067', // Bulgan
+ '23' => '037', // Darhan-Uul
+ '24' => '064', // Govisumber
+ '25' => '035', // Orhon
+
+ // invalid codes [used by maxmind]
+ '05' => '037', // Darhan
+ '22' => '035', // Erdenet [city in Orkhon]
+ ],
+ 'MO' => [
+ // No ISO codes assigned for Macau
+ '01' => '', // Ilhas
+ '02' => '', // Macau
+ ],
+ 'MR' => [
+ '01' => '01',
+ '02' => '02',
+ '03' => '03',
+ '04' => '04',
+ '05' => '05',
+ '06' => '06',
+ '07' => '07',
+ '08' => '08',
+ '09' => '09',
+ '10' => '10',
+ '11' => '11',
+ '12' => '12',
+ ],
+ 'MS' => [
+ // No ISO codes assigned for Montserrat
+ '01' => '',
+ '02' => '',
+ '03' => '',
+ ],
+ 'MU' => [
+ '12' => 'BL',
+ '13' => 'FL',
+ '14' => 'GP',
+ '15' => 'MO',
+ '16' => 'PA',
+ '17' => 'PW',
+ '18' => 'PL',
+ '19' => 'RR',
+ '20' => 'SA',
+ '21' => 'AG',
+ '22' => 'CC',
+ '23' => 'RO',
+ ],
+ 'MV' => [
+ '01' => '01',
+ '05' => '05',
+ '30' => '02',
+ '31' => '20',
+ '32' => '17',
+ '33' => '14',
+ '34' => '27',
+ '35' => '28',
+ '36' => '07',
+ '37' => '23',
+ '38' => '26',
+ '39' => '03',
+ '40' => 'MLE',
+ '41' => '12',
+ '42' => '29',
+ '43' => '25',
+ '44' => '13',
+ '45' => '24',
+ '46' => '08',
+ '47' => '04',
+ ],
+ 'MW' => [
+ '02' => 'CK', // Chikwawa
+ '03' => 'CR', // Chiradzulu
+ '04' => 'CT', // Chitipa
+ '05' => 'TH', // Thyolo
+ '06' => 'DE', // Dedza
+ '07' => 'DO', // Dowa
+ '08' => 'KR', // Karonga
+ '09' => 'KS', // Kasungu
+ '11' => 'LI', // Lilongwe
+ '12' => 'MG', // Mangochi
+ '13' => 'MC', // Mchinji
+ '15' => 'MZ', // Mzimba
+ '16' => 'NU', // Ntcheu
+ '17' => 'NB', // Nkhata Bay
+ '18' => 'NK', // Nkhotakota
+ '19' => 'NS', // Nsanje
+ '20' => 'NI', // Ntchisi
+ '21' => 'RU', // Rumphi
+ '22' => 'SA', // Salima
+ '23' => 'ZO', // Zomba
+ '24' => 'BL', // Blantyre
+ '25' => 'MW', // Mwanza
+ '26' => 'BA', // Balaka
+ '27' => 'LK', // Likoma
+ '28' => 'MH', // Machinga
+ '29' => 'MU', // Mulanje
+ '30' => 'PH', // Phalombe
+ ],
+ 'MX' => [
+ '01' => 'AGU',
+ '02' => 'BCN',
+ '03' => 'BCS',
+ '04' => 'CAM',
+ '05' => 'CHP',
+ '06' => 'CHH',
+ '07' => 'COA',
+ '08' => 'COL',
+ '09' => 'CMX',
+ '10' => 'DUR',
+ '11' => 'GUA',
+ '12' => 'GRO',
+ '13' => 'HID',
+ '14' => 'JAL',
+ '15' => 'MEX',
+ '16' => 'MIC',
+ '17' => 'MOR',
+ '18' => 'NAY',
+ '19' => 'NLE',
+ '20' => 'OAX',
+ '21' => 'PUE',
+ '22' => 'QUE',
+ '23' => 'ROO',
+ '24' => 'SLP',
+ '25' => 'SIN',
+ '26' => 'SON',
+ '27' => 'TAB',
+ '28' => 'TAM',
+ '29' => 'TLA',
+ '30' => 'VER',
+ '31' => 'YUC',
+ '32' => 'ZAC',
+ ],
+ 'MY' => [
+ '01' => '01',
+ '02' => '02',
+ '03' => '03',
+ '04' => '04',
+ '05' => '05',
+ '06' => '06',
+ '07' => '08',
+ '08' => '09',
+ '09' => '07',
+ '11' => '13',
+ '12' => '10',
+ '13' => '11',
+ '14' => '14',
+ '15' => '15',
+ '16' => '12',
+ '17' => '16',
+ ],
+ 'MZ' => [
+ '01' => 'P',
+ '02' => 'G',
+ '03' => 'I',
+ '04' => 'L',
+ '05' => 'S',
+ '06' => 'N',
+ '07' => 'A',
+ '08' => 'T',
+ '09' => 'Q',
+ '10' => 'B',
+ '11' => 'MPM',
+ ],
+ 'NA' => [
+ '21' => 'KH', // Windhoek [capital city of Khomas]
+ '28' => 'CA', // Caprivi (now named Zambezi)
+ '29' => 'ER', // Erongo
+ '30' => 'HA', // Hardap
+ '31' => 'KA', // Karas
+ '32' => 'KU', // Kunene
+ '33' => 'OW', // Ohangwena
+ '34' => '', // Okavango [now splitted in Kavango East and West]
+ '35' => 'OH', // Omaheke
+ '36' => 'OS', // Omusati
+ '37' => 'ON', // Oshana
+ '38' => 'OT', // Oshikoto
+ '39' => 'OD', // Otjozondjupa
+
+ // invalid codes [used by maxmind]
+ '01' => 'KA', // Bethanien [city in Karas]
+ '02' => '', // Caprivi Oos [old region, not mappable]
+ '03' => '', // Boesmanland [old region, not mappable]
+ '04' => 'OH', // Gobabis [capital of Omaheke]
+ '05' => 'OD', // Grootfontein [city in Otjozondjupa]
+ '06' => 'KU', // Kaokoland [now part of Kunene]
+ '07' => 'ER', // Karibib [city in Erongo]
+ '08' => 'KA', // Keetmanshoop [city in Karas]
+ '09' => 'KA', // Luderitz [city in Karas]
+ '10' => 'HA', // Maltahohe [city in Hardap]
+ '11' => 'OD', // Okahandja [city in Otjozondjupa]
+ '12' => 'ER', // Omaruru [city in Erongo]
+ '13' => 'OD', // Otjiwarongo [capital in Otjozondjupa]
+ '14' => 'KU', // Outjo [city in Kunene]
+ '15' => '', // Owambo [old region, not mappable]
+ '16' => 'HA', // Rehoboth [city in Hardap]
+ '17' => 'ER', // Swakopmund [city in Erongo]
+ '18' => 'OT', // Tsumeb [city in Oshikoto]
+ '20' => 'KA', // Karasburg [city in Karas]
+ '22' => '', // Damaraland [old region, not mappable]
+ '23' => '', // Hereroland Oos [old region, not mappable]
+ '24' => '', // Hereroland Wes [old region, not mappable]
+ '25' => '', // Kavango [now splitted in East and West]
+ '26' => 'HA', // Mariental [city in Hardap]
+ '27' => '', // Namaland [old region, not mappable]
+ ],
+ 'NE' => [
+ '01' => '1',
+ '02' => '2',
+ '03' => '3',
+ '04' => '4',
+ '06' => '5',
+ '07' => '7',
+ '08' => '8',
+
+ // valid codes [not used by maxmind]
+ '09' => '6',
+
+ // invalid codes [not used by maxmind]
+ '05' => '8',
+ ],
+ 'NG' => [
+ '05' => 'LA', // Lagos
+ '11' => 'FC', // Federal Capital Territory
+ '16' => 'OG', // Ogun
+ '21' => 'AK', // Akwa Ibom
+ '22' => 'CR', // Cross River
+ '23' => 'KD', // Kaduna
+ '24' => 'KT', // Katsina
+ '25' => 'AN', // Anambra
+ '26' => 'BE', // Benue
+ '27' => 'BO', // Borno
+ '28' => 'IM', // Imo
+ '29' => 'KN', // Kano
+ '30' => 'KW', // Kwara
+ '31' => 'NI', // Niger
+ '32' => 'OY', // Oyo
+ '35' => 'AD', // Adamawa
+ '36' => 'DE', // Delta
+ '37' => 'ED', // Edo
+ '39' => 'JI', // Jigawa
+ '40' => 'KE', // Kebbi
+ '41' => 'KO', // Kogi
+ '42' => 'OS', // Osun
+ '43' => 'TA', // Taraba
+ '44' => 'YO', // Yobe
+ '45' => 'AB', // Abia
+ '46' => 'BA', // Bauchi
+ '47' => 'EN', // Enugu
+ '48' => 'ON', // Ondo
+ '49' => 'PL', // Plateau
+ '50' => 'RI', // Rivers
+ '51' => 'SO', // Sokoto
+ '52' => 'BY', // Bayelsa
+ '53' => 'EB', // Ebonyi
+ '54' => 'EK', // Ekiti
+ '55' => 'GO', // Gombe
+ '56' => 'NA', // Nassarawa
+ '57' => 'ZA', // Zamfara
+ ],
+ 'NI' => [
+ '01' => 'BO',
+ '02' => 'CA',
+ '03' => 'CI',
+ '04' => 'CO',
+ '05' => 'ES',
+ '06' => 'GR',
+ '07' => 'JI',
+ '08' => 'LE',
+ '09' => 'MD',
+ '10' => 'MN',
+ '11' => 'MS',
+ '12' => 'MT',
+ '13' => 'NS',
+ '14' => 'SJ',
+ '15' => 'RI',
+ '17' => 'AN',
+ '18' => 'AS',
+
+ // invalid codes [used by maxmind]
+ '16' => '', // Zelaya
+ ],
+ 'NL' => [
+ '01' => 'DR',
+ '02' => 'FR',
+ '03' => 'GE',
+ '04' => 'GR',
+ '05' => 'LI',
+ '06' => 'NB',
+ '07' => 'NH',
+ '09' => 'UT',
+ '10' => 'ZE',
+ '11' => 'ZH',
+ '15' => 'OV',
+ '16' => 'FL',
+ ],
+ 'NO' => [
+ '01' => '02',
+ '02' => '09',
+ '04' => '06',
+ '05' => '20',
+ '06' => '04',
+ '07' => '12',
+ '08' => '15',
+ '09' => '18',
+ '10' => '17',
+ '11' => '05',
+ '12' => '03',
+ '13' => '01',
+ '14' => '11',
+ '15' => '14',
+ '16' => '16',
+ '17' => '08',
+ '18' => '19',
+ '19' => '10',
+ '20' => '07',
+ ],
+ 'NP' => [
+ '01' => 'BA', // Bagmati
+ '02' => 'BH', // Bheri
+ '03' => 'DH', // Dhawalagiri
+ '04' => 'GA', // Gandaki
+ '05' => 'JA', // Janakpur
+ '06' => 'KA', // Karnali
+ '07' => 'KO', // Kosi
+ '08' => 'LU', // Lumbini
+ '09' => 'MA', // Mahakali
+ '10' => 'ME', // Mechi
+ '11' => 'NA', // Narayani
+ '12' => 'RA', // Rapti
+ '13' => 'SA', // Sagarmatha
+ '14' => 'SE', // Seti
+ ],
+ 'NR' => [
+ '01' => '01',
+ '02' => '02',
+ '03' => '03',
+ '04' => '04',
+ '05' => '05',
+ '06' => '06',
+ '07' => '07',
+ '08' => '08',
+ '09' => '09',
+ '10' => '10',
+ '11' => '11',
+ '12' => '12',
+ '13' => '13',
+ '14' => '14',
+ ],
+ 'NZ' => [
+ '10' => 'CIT',
+ 'E7' => 'AUK',
+ 'E8' => 'BOP',
+ 'E9' => 'CAN',
+ 'F1' => 'GIS',
+ 'F2' => 'HKB',
+ 'F3' => 'MWT',
+ 'F4' => 'MBH',
+ 'F5' => 'NSN',
+ 'F6' => 'NTL',
+ 'F7' => 'OTA',
+ 'F8' => 'STL',
+ 'F9' => 'TKI',
+ 'G1' => 'WKO',
+ 'G2' => 'WGN',
+ 'G3' => 'WTC',
+ ],
+ 'OM' => [
+ '01' => 'DA', // Ad Dakhiliyah
+ '02' => '', // Al Batinah [splitted in two]
+ '03' => 'WU', // Al Wusta
+ '04' => '', // Ash Sharqiyah
+ '06' => 'MA', // Masqat [splitted in two]
+ '07' => 'MU', // Musandam
+ '08' => 'ZU', // Zufar
+
+ // valid codes [not used by maxmind]
+ '09' => 'ZA', // Ad Dhahirah
+ '10' => 'BU', // Al Buraimi
+
+ // invalid codes [used by maxmind]
+ '05' => 'ZA', // Az Zahirah
+ ],
+ 'PA' => [
+ '01' => '1',
+ '02' => '4',
+ '03' => '2',
+ '04' => '3',
+ '05' => '5',
+ '06' => '6',
+ '07' => '7',
+ '08' => '8',
+ '09' => 'KY',
+ '10' => '9',
+ ],
+ 'PE' => [
+ '01' => 'AMA',
+ '02' => 'ANC',
+ '03' => 'APU',
+ '04' => 'ARE',
+ '05' => 'AYA',
+ '06' => 'CAJ',
+ '07' => 'CAL',
+ '08' => 'CUS',
+ '09' => 'HUV',
+ '10' => 'HUC',
+ '11' => 'ICA',
+ '12' => 'JUN',
+ '13' => 'LAL',
+ '14' => 'LAM',
+ '15' => 'LIM',
+ '16' => 'LOR',
+ '17' => 'MDD',
+ '18' => 'MOQ',
+ '19' => 'PAS',
+ '20' => 'PIU',
+ '21' => 'PUN',
+ '22' => 'SAM',
+ '23' => 'TAC',
+ '24' => 'TUM',
+ '25' => 'UCA',
+ ],
+ 'PG' => [
+ '01' => 'CPM',
+ '02' => 'GPK',
+ '03' => 'MBA',
+ '04' => 'NPP',
+ '05' => 'SHM',
+ '06' => 'WPD',
+ '07' => 'NSB',
+ '08' => 'CPK',
+ '09' => 'EHG',
+ '10' => 'EBR',
+ '11' => 'ESW',
+ '12' => 'MPM',
+ '13' => 'MRL',
+ '14' => 'MPL',
+ '15' => 'NIK',
+ '16' => 'WHM',
+ '17' => 'WBK',
+ '18' => 'SAN',
+ '19' => 'EPW',
+ '20' => 'NCD',
+ ],
+ 'PH' => [
+ '01' => 'ABR', // Abra
+ '02' => 'AGN', // Agusan del Norte
+ '03' => 'AGS', // Agusan del Sur
+ '04' => 'AKL', // Aklan
+ '05' => 'ALB', // Albay
+ '06' => 'ANT', // Antique
+ '07' => 'BAN', // Bataan
+ '08' => 'BTN', // Batanes
+ '09' => 'BTG', // Batangas
+ '10' => 'BEN', // Benguet
+ '11' => 'BOH', // Bohol
+ '12' => 'BUK', // Bukidnon
+ '13' => 'BUL', // Bulacan
+ '14' => 'CAG', // Cagayan
+ '15' => 'CAN', // Camarines Norte
+ '16' => 'CAS', // Camarines Sur
+ '17' => 'CAM', // Camiguin
+ '18' => 'CAP', // Capiz
+ '19' => 'CAT', // Catanduanes
+ '20' => 'CAV', // Cavite
+ '21' => 'CEB', // Cebu
+ '22' => 'BAS', // Basilan
+ '23' => 'EAS', // Eastern Samar
+ '24' => 'DAV', // Davao
+ '25' => 'DAS', // Davao del Sur
+ '26' => 'DAO', // Davao Oriental
+ '27' => 'IFU', // Ifugao
+ '28' => 'ILN', // Ilocos Norte
+ '29' => 'ILS', // Ilocos Sur
+ '30' => 'ILI', // Iloilo
+ '31' => 'ISA', // Isabela
+ '32' => '', // Kalinga-Apayao [splitted in two]
+ '33' => 'LAG', // Laguna
+ '34' => 'LAN', // Lanao del Norte
+ '35' => 'LAS', // Lanao del Sur
+ '36' => 'LUN', // La Union
+ '37' => 'LEY', // Leyte
+ '38' => 'MAD', // Marinduque
+ '39' => 'MAS', // Masbate
+ '40' => 'MDC', // Mindoro Occidental
+ '41' => 'MDR', // Mindoro Oriental
+ '42' => 'MSC', // Misamis Occidental
+ '43' => 'MSR', // Misamis Oriental
+ '44' => 'MOU', // Mountain
+ '45' => 'NEC', // Negros Occidental
+ '46' => 'NER', // Negros Oriental
+ '47' => 'NUE', // Nueva Ecija
+ '48' => 'NUV', // Nueva Vizcaya
+ '49' => 'PLW', // Palawan
+ '50' => 'PAM', // Pampanga
+ '51' => 'PAN', // Pangasinan
+ '53' => 'RIZ', // Rizal
+ '54' => 'ROM', // Romblon
+ '55' => 'WSA', // Samar
+ '56' => 'MAG', // Maguindanao
+ '57' => 'NCO', // North Cotabato
+ '58' => 'SOR', // Sorsogon
+ '59' => 'SLE', // Southern Leyte
+ '60' => 'SLU', // Sulu
+ '61' => 'SUN', // Surigao del Norte
+ '62' => 'SUR', // Surigao del Sur
+ '63' => 'TAR', // Tarlac
+ '64' => 'ZMB', // Zambales
+ '65' => 'ZAN', // Zamboanga del Norte
+ '66' => 'ZAS', // Zamboanga del Sur
+ '67' => 'NSA', // Northern Samar
+ '68' => 'QUI', // Quirino
+ '69' => 'SIG', // Siquijor
+ '70' => 'SCO', // South Cotabato
+ '71' => 'SUK', // Sultan Kudarat
+ '72' => 'TAW', // Tawitawi
+ 'A1' => 'PAM', // Angeles [city in Pamganga]
+ 'A2' => 'NEC', // Bacolod [city in Negros Occidental]
+ 'A3' => 'NEC', // Bago [city in Negros Occidental]
+ 'A4' => 'BEN', // Baguio [city in Benguet]
+ 'A5' => 'NER', // Bais [city in Negros Oriental]
+ 'A6' => '09', // Basilan City [city in Zamboanga Peninsula]
+ 'A7' => 'BTG', // Batangas City [capital of Batangas]
+ 'A8' => 'AGN', // Butuan [city in Agusan del Norte]
+ 'A9' => 'NUE', // Cabanatuan [city in Nueva Ecija]
+ 'B1' => 'NEC', // Cadiz [city in Negros Occidental]
+ 'B2' => 'MSR', // Cagayan de Oro [city in Misamis Oriental]
+ 'B3' => 'WSA', // Calbayog [city in Samar]
+ 'B4' => '00', // Caloocan [part of National Capital Region]
+ 'B5' => 'NER', // Canlaon [city in Negros Oriental]
+ 'B6' => 'CAV', // Cavite City [capital of Cavite]
+ 'B7' => 'CEB', // Cebu City [capital of Cebu]
+ 'B8' => 'MAG', // Cotabato [city in Maguindanao]
+ 'B9' => 'PAN', // Dagupan [city in Pangasinan]
+ 'C1' => 'CEB', // Danao [city in Cebu]
+ 'C2' => 'ZAN', // Dapitan [city in Zamboanga del Norte]
+ 'C3' => 'DAS', // Davao City [city in Davao del Sur]
+ 'C4' => 'ZAN', // Dipolog [city in Zamboanga del Norte]
+ 'C5' => 'NER', // Dumaguete [city in Negros Oriental]
+ 'C6' => 'SCO', // General Santos [city in South Cotabato]
+ 'C7' => 'MSR', // Gingoog [city in Misamis Oriental]
+ 'C8' => 'LAN', // Iligan [city in Lanao del Norte]
+ 'C9' => 'ILI', // Iloilo City [capital of Iloilo]
+ 'D1' => 'CAS', // Iriga [city in Camarines Sur]
+ 'D2' => 'NEC', // La Carlota [city in Negros Occidental]
+ 'D3' => 'ILN', // Laoag [city in Ilocos Norte]
+ 'D4' => 'CEB', // Lapu-Lapu [city in Cebu]
+ 'D5' => 'ALB', // Legaspi [city in Albay]
+ 'D6' => 'BTG', // Lipa [city in Batangas]
+ 'D7' => 'QUE', // Lucena [city in Quezon]
+ 'D8' => 'CEB', // Mandaue [city in Cebu]
+ 'D9' => '00', // Manila [part of National Capital Region]
+ 'E1' => 'LAS', // Marawi [city in Lanao del Sur]
+ 'E2' => 'CAS', // Naga [city in Camarines Sur]
+ 'E3' => 'ZMB', // Olongapo [city in Zambales]
+ 'E4' => 'LEY', // Ormoc [city in Leyte]
+ 'E5' => 'MSC', // Oroquieta [city in Misamis Occidental]
+ 'E6' => 'MSC', // Ozamis [city in Misamis Occidental]
+ 'E7' => 'ZAS', // Pagadian [city in Zamboanga del Sur]
+ 'E8' => 'NUE', // Palayan [city in Nueva Ecija]
+ 'E9' => '00', // Pasay [part of National Capital Region]
+ 'F1' => 'PLW', // Puerto Princesa [city in Palawan]
+ 'F2' => '00', // Quezon City [part of National Capital Region]
+ 'F3' => 'CAP', // Roxas [city in Capiz]
+ 'F4' => 'NEC', // San Carlos [city in Negros Occidental]
+ 'F5' => 'PAN', // San Carlos [city in Pangasinan]
+ 'F6' => 'NUE', // San Jose [city in Nueva Ecija]
+ 'F7' => 'LAG', // San Pablo [city in Laguna]
+ 'F8' => 'NEC', // Silay [city in Negros Occidental]
+ 'F9' => 'SUN', // Surigao [city in Surigao del Norte]
+ 'G1' => 'LEY', // Tacloban [city in Leyte]
+ 'G2' => 'CAV', // Tagaytay [city in Cavite]
+ 'G3' => 'BOH', // Tagbilaran [city in Bohol]
+ 'G4' => 'MSC', // Tangub [city in Misamis Occidental]
+ 'G5' => 'CEB', // Toledo [city in Cebu]
+ 'G6' => 'CAV', // Trece Martires [city in Cavite]
+ 'G7' => 'ZAS', // Zamboanga [city in Zamboanga del Sur]
+ 'G8' => 'AUR', // Aurora
+ 'H2' => 'QUE', // Quezon
+ 'H3' => 'NEC', // Negros Occidental
+
+ // invalid codes [used by maxmind]
+ 'H9' => 'BIL', // Biliran
+ 'I6' => 'COM', // Compostela Valley
+ 'I7' => 'DAV', // Davao del Norte
+ 'J3' => 'GUI', // Guimaras
+ 'J4' => 'NEC', // Himamaylan [city in Negros Occidental]
+ 'J7' => 'KAL', // Kalinga
+ 'K1' => '00', // Las Pinas [part of National Capital Region]
+ 'K5' => '00', // Malabon [part of National Capital Region]
+ 'K6' => 'BUK', // Malaybalay [city in Bukidnon]
+ 'L4' => '00', // Muntinlupa [part of National Capital Region]
+ 'L5' => '00', // Navotas [part of National Capital Region]
+ 'L7' => '00', // Paranaque [part of National Capital Region]
+ 'L9' => '', // Passi
+ 'P1' => 'ZMB', // Zambales
+ 'M5' => 'PAM', // San Jose del Monte [city in Pampanga]
+ 'M6' => '', // San Juan [the are many cities with this name]
+ 'M8' => '', // Santiago [the are 3 cities with this name]
+ 'M9' => 'SAR', // Sarangani
+ 'N1' => 'NEC', // Sipalay [city in Negros Occidental]
+ 'N3' => 'SUN', // Surigao del Norte
+ 'P2' => 'ZAS', // Zamboanga [city in Zamboanga del Sur]
+
+ ],
+ 'PK' => [
+ '01' => 'TA',
+ '02' => 'BA',
+ '03' => 'KP',
+ '04' => 'PB',
+ '05' => 'SD',
+ '06' => 'JK',
+ '07' => 'GB',
+ '08' => 'IS',
+ ],
+ 'PL' => [
+ '72' => 'DS',
+ '73' => 'KP',
+ '74' => 'LD',
+ '75' => 'LU',
+ '76' => 'LB',
+ '77' => 'MA',
+ '78' => 'MZ',
+ '79' => 'OP',
+ '80' => 'PK',
+ '81' => 'PD',
+ '82' => 'PM',
+ '83' => 'SL',
+ '84' => 'SK',
+ '85' => 'WN',
+ '86' => 'WP',
+ '87' => 'ZP',
+ ],
+ 'PS' => [
+ // completely new regions
+ 'GZ' => '', // Gaza
+ 'WE' => '', // West Bank
+ ],
+ 'PT' => [
+ '02' => '01',
+ '03' => '02',
+ '04' => '03',
+ '05' => '04',
+ '06' => '05',
+ '07' => '06',
+ '08' => '07',
+ '09' => '08',
+ '10' => '30',
+ '11' => '09',
+ '13' => '10',
+ '14' => '11',
+ '16' => '12',
+ '17' => '13',
+ '18' => '14',
+ '19' => '15',
+ '20' => '16',
+ '21' => '17',
+ '22' => '18',
+ '23' => '20',
+ ],
+ 'PY' => [
+ '01' => '10',
+ '02' => '13',
+ '04' => '5',
+ '05' => '6',
+ '06' => '11',
+ '07' => '1',
+ '08' => '3',
+ '10' => '4',
+ '11' => '7',
+ '12' => '8',
+ '13' => '12',
+ '15' => '9',
+ '16' => '15',
+ '17' => '2',
+ '19' => '14',
+ '22' => 'ASU',
+ '23' => '16',
+ '24' => '19',
+ ],
+ 'QA' => [
+ '01' => 'DA', // Ad Dawhah
+ '02' => 'KH', // Al Ghuwariyah [city in Al Khawr]
+ '03' => 'SH', // Al Jumaliyah [city in Ash Shīḩānīyah]
+ '04' => 'KH', // Al Khawr
+ '06' => 'RA', // Ar Rayyan
+ '08' => 'MS', // Madinat ach Shamal
+ '09' => 'US', // Umm Salal
+ '10' => 'WA', // Al Wakrah
+ '11' => '', // Jariyan al Batnah [split into two]
+ '12' => 'WA', // Umm Sa'id [city in Al Wakrah]
+
+ // invalid codes [used by maxmind]
+ '05' => 'WA', // Al Wakrah Municipality
+ ],
+ 'RO' => [
+ '01' => 'AB',
+ '02' => 'AR',
+ '03' => 'AG',
+ '04' => 'BC',
+ '05' => 'BH',
+ '06' => 'BN',
+ '07' => 'BT',
+ '08' => 'BR',
+ '09' => 'BV',
+ '10' => 'B',
+ '11' => 'BZ',
+ '12' => 'CS',
+ '13' => 'CJ',
+ '14' => 'CT',
+ '15' => 'CV',
+ '16' => 'DB',
+ '17' => 'DJ',
+ '18' => 'GL',
+ '19' => 'GJ',
+ '20' => 'HR',
+ '21' => 'HD',
+ '22' => 'IL',
+ '23' => 'IS',
+ '25' => 'MM',
+ '26' => 'MH',
+ '27' => 'MS',
+ '28' => 'NT',
+ '29' => 'OT',
+ '30' => 'PH',
+ '31' => 'SJ',
+ '32' => 'SM',
+ '33' => 'SB',
+ '34' => 'SV',
+ '35' => 'TR',
+ '36' => 'TM',
+ '37' => 'TL',
+ '38' => 'VS',
+ '39' => 'VL',
+ '40' => 'VN',
+ '41' => 'CL',
+ '42' => 'GR',
+ '43' => 'IF',
+ ],
+ 'RS' => [
+ '01' => 'KM', // Kosovo
+ '02' => 'VO', // Vojvodina
+ ],
+ 'RU' => [
+ '01' => 'AD',
+ '02' => 'ZAB', // Aginsky Buryatsky AO [part of Zabaykal'skiy kray]
+ '03' => 'AL',
+ '04' => 'ALT',
+ '05' => 'AMU',
+ '06' => 'ARK',
+ '07' => 'AST',
+ '08' => 'BA',
+ '09' => 'BEL',
+ '10' => 'BRY',
+ '11' => 'BU',
+ '12' => 'CE',
+ '13' => 'CHE',
+ '14' => 'ZAB', // Chita [part of Zabaykal'skiy kray]
+ '15' => 'CHU',
+ '16' => 'CU',
+ '17' => 'DA',
+ '19' => 'IN',
+ '20' => 'IRK',
+ '21' => 'IVA',
+ '22' => 'KB',
+ '23' => 'KGD',
+ '24' => 'KL',
+ '25' => 'KLU',
+ '27' => 'KC',
+ '28' => 'KR',
+ '29' => 'KEM',
+ '30' => 'KHA',
+ '31' => 'KK',
+ '32' => 'KHM',
+ '33' => 'KIR',
+ '34' => 'KO',
+ '37' => 'KOS',
+ '38' => 'KDA',
+ '40' => 'KGN',
+ '41' => 'KRS',
+ '42' => 'LEN',
+ '43' => 'LIP',
+ '44' => 'MAG',
+ '45' => 'ME',
+ '46' => 'MO',
+ '47' => 'MOS',
+ '48' => 'MOW',
+ '49' => 'MUR',
+ '50' => 'NEN',
+ '51' => 'NIZ',
+ '52' => 'NGR',
+ '53' => 'NVS',
+ '54' => 'OMS',
+ '55' => 'ORE',
+ '56' => 'ORL',
+ '57' => 'PNZ',
+ '59' => 'PRI',
+ '60' => 'PSK',
+ '61' => 'ROS',
+ '62' => 'RYA',
+ '63' => 'SA',
+ '64' => 'SAK',
+ '65' => 'SAM',
+ '66' => 'SPE',
+ '67' => 'SAR',
+ '68' => 'SE',
+ '69' => 'SMO',
+ '70' => 'STA',
+ '71' => 'SVE',
+ '72' => 'TAM',
+ '73' => 'TA',
+ '74' => 'KYA', // Taymyr [part of Krasnoyarsk Krai]
+ '75' => 'TOM',
+ '76' => 'TUL',
+ '77' => 'TVE',
+ '78' => 'TYU',
+ '79' => 'TY',
+ '80' => 'UD',
+ '81' => 'ULY',
+ '83' => 'VLA',
+ '84' => 'VGG',
+ '85' => 'VLG',
+ '86' => 'VOR',
+ '87' => 'YAN',
+ '88' => 'YAR',
+ '89' => 'YEV',
+ '90' => 'PER',
+ '91' => 'KYA',
+ '92' => 'KAM',
+
+ // valid codes [not used by maxmind]
+ '82' => 'IRK', // Ust'-Ordynskiy Buryatskiy [part of Irkutsk Oblast]
+
+ // invalid codes [used by maymind]
+ '18' => 'KYA', // Evenk [part of Krasnoyarsk Krai]
+ '26' => 'KAM', // Kamchatka
+ '36' => 'KAM', // Koryak [part of Kamchatka Krai]
+ '39' => 'KYA', // Krasnoyarsk
+ '58' => 'PER', // Perm
+ '93' => 'ZAB', // Zabaykal'skiy Kray
+ ],
+ 'RW' => [
+ '11' => '02', // Est
+ '12' => '01', // Kigali
+ '13' => '03', // Nord
+ '14' => '04', // Ouest
+ '15' => '05', // Sud
+
+ // invalid codes [used by maxmind]
+ '01' => '05', // Butare [city in Southern]
+ '06' => '05', // Gitarama [city in Southern]
+ '07' => '02', // Kibungo [city in Eastern]
+ '09' => '01', // Kigali
+ ],
+ 'SA' => [
+ '02' => '11',
+ '05' => '03',
+ '06' => '04',
+ '08' => '05',
+ '10' => '01',
+ '11' => '14',
+ '13' => '06',
+ '14' => '02',
+ '15' => '08',
+ '16' => '10',
+ '17' => '09',
+ '19' => '07',
+ '20' => '12',
+ ],
+ 'SB' => [
+ '03' => 'ML',
+ '06' => 'GU',
+ '07' => 'IS',
+ '08' => 'MK',
+ '09' => 'TE',
+ '10' => 'CE',
+ '11' => 'WE',
+ '12' => 'CH',
+ '13' => 'RB',
+ ],
+ 'SC' => [
+ '01' => '01', // Anse aux Pins
+ '02' => '02', // Anse Boileau
+ '03' => '03', // Anse Etoile
+ '05' => '05', // Anse Royale
+ '06' => '06', // Baie Lazare
+ '07' => '07', // Baie Sainte Anne
+ '08' => '08', // Beau Vallon
+ '09' => '09', // Bel Air
+ '10' => '10', // Bel Ombre
+ '11' => '11', // Cascade
+ '12' => '12', // Glacis
+ '14' => '14', // Grand' Anse
+ '17' => '17', // Mont Buxton
+ '18' => '18', // Mont Fleuri
+ '19' => '19', // Plaisance
+ '20' => '20', // Pointe La Rue
+ '22' => '22', // Saint Louis
+ '23' => '23', // Takamaka
+
+ // valid codes [not used by maxmind
+ '24' => '13',
+ '25' => '15',
+ '26' => '16',
+ '27' => '21',
+ '28' => '04',
+ '29' => '24',
+ '30' => '25',
+
+ // invalid codes [used by maxmind]
+ '04' => '04', // Anse Louis
+ '13' => '14', // Grand' Anse
+ '15' => '15', // La Digue
+ '16' => '16', // La Riviere Anglaise
+ '21' => '21', // Port Glaud
+ ],
+ 'SD' => [
+ '29' => 'KH', // Al Khartum
+ '35' => '', // Upper Nile [reorganized, not mappable]
+ '40' => '', // Al Wahadah State [reorganized, not mappable]
+ '44' => '', // Central Equatoria State [reorganized, not mappable]
+ '49' => 'DS', // Southern Darfur
+ '50' => 'KS', // Southern Kordofan
+ '52' => 'KA', // Kassala
+ '53' => 'NR', // River Nile
+ '55' => 'DN', // Northern Darfur
+
+ // valid codes [not used by maxmind]
+ '36' => 'RS',
+ '37' => '', // [reorganized, not mappable]
+ '38' => 'GZ',
+ '39' => 'GD',
+ '41' => 'NW',
+ '42' => 'NB',
+ '43' => 'NO',
+ '45' => '', // [reorganized, not mappable]
+ '46' => '', // [reorganized, not mappable]
+ '47' => 'DW',
+ '48' => 'GK',
+ '51' => '', // [reorganized, not mappable]
+ '54' => '', // [reorganized, not mappable]
+ '56' => 'KN',
+ '57' => '', // [reorganized, not mappable]
+ '58' => 'SI',
+ '59' => '', // [reorganized, not mappable]
+
+ // invalid codes [used by maxmind]
+ '27' => '', // Al Wusta
+ '28' => '', // Al Istiwa'iyah
+ '30' => 'NO', // Ash Shamaliyah
+ '31' => '', // Ash Sharqiyah
+ '32' => '', // Bahr al Ghazal
+ '33' => 'DW', // Darfur
+ '34' => 'GK', // Kurdufan
+ ],
+ 'SE' => [
+ '02' => 'K',
+ '03' => 'X',
+ '05' => 'I',
+ '06' => 'N',
+ '07' => 'Z',
+ '08' => 'F',
+ '09' => 'H',
+ '10' => 'W',
+ '12' => 'G',
+ '14' => 'BD',
+ '15' => 'T',
+ '16' => 'E',
+ '18' => 'D',
+ '21' => 'C',
+ '22' => 'S',
+ '23' => 'AC',
+ '24' => 'Y',
+ '25' => 'U',
+ '26' => 'AB',
+ '27' => 'M',
+ '28' => 'O',
+ ],
+ 'SH' => [
+ '01' => 'AC',
+ '02' => 'HL',
+ '03' => 'TA',
+ ],
+ 'SI' => [
+ '01' => '001', // Ajdovscina Commune
+ '02' => '002', // Beltinci Commune
+ '03' => '003', // Bled Commune
+ '04' => '004', // Bohinj Commune
+ '05' => '005', // Borovnica Commune
+ '06' => '006', // Bovec Commune
+ '07' => '007', // Brda Commune
+ '08' => '009', // Brezice Commune
+ '09' => '008', // Brezovica Commune
+ '11' => '011', // Celje Commune
+ '12' => '012', // Cerklje na Gorenjskem Commune
+ '13' => '013', // Cerknica Commune
+ '14' => '014', // Cerkno Commune
+ '15' => '015', // Crensovci Commune
+ '16' => '016', // Crna na Koroskem Commune
+ '17' => '017', // Crnomelj Commune
+ '19' => '019', // Divaca Commune
+ '20' => '020', // Dobrepolje Commune
+ '22' => '022', // Dol pri Ljubljani Commune
+ '24' => '024', // Dornava Commune
+ '25' => '025', // Dravograd Commune
+ '26' => '026', // Duplek Commune
+ '27' => '027', // Gorenja vas-Poljane Commune
+ '28' => '028', // Gorisnica Commune
+ '29' => '029', // Gornja Radgona Commune
+ '30' => '030', // Gornji Grad Commune
+ '31' => '031', // Gornji Petrovci Commune
+ '32' => '032', // Grosuplje Commune
+ '34' => '034', // Hrastnik Commune
+ '35' => '035', // Hrpelje-Kozina Commune
+ '36' => '036', // Idrija Commune
+ '37' => '037', // Ig Commune
+ '38' => '038', // Ilirska Bistrica Commune
+ '39' => '039', // Ivancna Gorica Commune
+ '40' => '040', // Izola-Isola Commune
+ '42' => '042', // Jursinci Commune
+ '44' => '044', // Kanal Commune
+ '45' => '045', // Kidricevo Commune
+ '46' => '046', // Kobarid Commune
+ '47' => '047', // Kobilje Commune
+ '49' => '049', // Komen Commune
+ '50' => '050', // Koper-Capodistria Urban Commune
+ '51' => '051', // Kozje Commune
+ '52' => '052', // Kranj Commune
+ '53' => '053', // Kranjska Gora Commune
+ '54' => '054', // Krsko Commune
+ '55' => '055', // Kungota Commune
+ '57' => '057', // Lasko Commune
+ '61' => '061', // Ljubljana Urban Commune
+ '62' => '062', // Ljubno Commune
+ '64' => '064', // Logatec Commune
+ '66' => '066', // Loski Potok Commune
+ '68' => '068', // Lukovica Commune
+ '71' => '071', // Medvode Commune
+ '72' => '072', // Menges Commune
+ '73' => '073', // Metlika Commune
+ '74' => '074', // Mezica Commune
+ '76' => '076', // Mislinja Commune
+ '77' => '077', // Moravce Commune
+ '78' => '078', // Moravske Toplice Commune
+ '79' => '079', // Mozirje Commune
+ '80' => '080', // Murska Sobota Urban Commune
+ '81' => '081', // Muta Commune
+ '82' => '082', // Naklo Commune
+ '83' => '083', // Nazarje Commune
+ '84' => '084', // Nova Gorica Urban Commune
+ '86' => '086', // Odranci Commune
+ '87' => '087', // Ormoz Commune
+ '88' => '088', // Osilnica Commune
+ '89' => '089', // Pesnica Commune
+ '91' => '091', // Pivka Commune
+ '92' => '092', // Podcetrtek Commune
+ '94' => '094', // Postojna Commune
+ '97' => '097', // Puconci Commune
+ '98' => '098', // Race-Fram Commune
+ '99' => '099', // Radece Commune
+ 'A1' => '100', // Radenci Commune
+ 'A2' => '101', // Radlje ob Dravi Commune
+ 'A3' => '102', // Radovljica Commune
+ 'A6' => '105', // Rogasovci Commune
+ 'A7' => '106', // Rogaska Slatina Commune
+ 'A8' => '107', // Rogatec Commune
+ 'B1' => '109', // Semic Commune
+ 'B2' => '117', // Sencur Commune
+ 'B3' => '118', // Sentilj Commune
+ 'B4' => '119', // Sentjernej Commune
+ 'B6' => '110', // Sevnica Commune
+ 'B7' => '111', // Sezana Commune
+ 'B8' => '121', // Skocjan Commune
+ 'B9' => '122', // Skofja Loka Commune
+ 'C1' => '123', // Skofljica Commune
+ 'C2' => '112', // Slovenj Gradec Urban Commune
+ 'C4' => '114', // Slovenske Konjice Commune
+ 'C5' => '124', // Smarje pri Jelsah Commune
+ 'C6' => '125', // Smartno ob Paki Commune
+ 'C7' => '126', // Sostanj Commune
+ 'C8' => '115', // Starse Commune
+ 'C9' => '127', // Store Commune
+ 'D1' => '210', // Sveti Jurij Commune
+ 'D2' => '128', // Tolmin Commune
+ 'D3' => '129', // Trbovlje Commune
+ 'D4' => '130', // Trebnje Commune
+ 'D5' => '131', // Trzic Commune
+ 'D6' => '132', // Turnisce Commune
+ 'D7' => '133', // Velenje Urban Commune
+ 'D8' => '134', // Velike Lasce Commune
+ 'E1' => '136', // Vipava Commune
+ 'E2' => '137', // Vitanje Commune
+ 'E3' => '138', // Vodice Commune
+ 'E5' => '140', // Vrhnika Commune
+ 'E6' => '141', // Vuzenica Commune
+ 'E7' => '142', // Zagorje ob Savi Commune
+ 'E9' => '143', // Zavrc Commune
+ 'F1' => '146', // Zelezniki Commune
+ 'F2' => '147', // Ziri Commune
+ 'F3' => '144', // Zrece Commune
+ 'F4' => '148', // Benedikt Commune
+ 'F5' => '149', // Bistrica ob Sotli Commune
+ 'F6' => '150', // Bloke Commune
+ 'F7' => '151', // Braslovce Commune
+ 'F8' => '152', // Cankova Commune
+ 'F9' => '153', // Cerkvenjak Commune
+ 'G1' => '018', // Destrnik Commune
+ 'G2' => '154', // Dobje Commune
+ 'G3' => '155', // Dobrna Commune
+ 'G4' => '021', // Dobrova-Horjul-Polhov Gradec Commune
+ 'G5' => '156', // Dobrovnik-Dobronak Commune
+ 'G6' => '157', // Dolenjske Toplice Commune
+ 'G7' => '023', // Domzale Commune
+ 'G8' => '158', // Grad Commune
+ 'G9' => '159', // Hajdina Commune
+ 'H1' => '160', // Hoce-Slivnica Commune
+ 'H2' => '161', // Hodos-Hodos Commune
+ 'H3' => '162', // Horjul Commune
+ 'H4' => '041', // Jesenice Commune
+ 'H5' => '163', // Jezersko Commune
+ 'H6' => '043', // Kamnik Commune
+ 'H7' => '048', // Kocevje Commune
+ 'H8' => '164', // Komenda Commune
+ 'H9' => '165', // Kostel Commune
+ 'I1' => '166', // Krizevci Commune
+ 'I2' => '056', // Kuzma Commune
+ 'I3' => '058', // Lenart Commune
+ 'I4' => '059', // Lendava-Lendva Commune
+ 'I5' => '060', // Litija Commune
+ 'I6' => '063', // Ljutomer Commune
+ 'I7' => '065', // Loska Dolina Commune
+ 'I8' => '167', // Lovrenc na Pohorju Commune
+ 'I9' => '067', // Luce Commune
+ 'J1' => '069', // Majsperk Commune
+ 'J2' => '070', // Maribor Commune
+ 'J3' => '168', // Markovci Commune
+ 'J4' => '169', // Miklavz na Dravskem polju Commune
+ 'J5' => '075', // Miren-Kostanjevica Commune
+ 'J6' => '170', // Mirna Pec Commune
+ 'J7' => '085', // Novo mesto Urban Commune
+ 'J8' => '171', // Oplotnica Commune
+ 'J9' => '090', // Piran-Pirano Commune
+ 'K1' => '172', // Podlehnik Commune
+ 'K2' => '093', // Podvelka Commune
+ 'K3' => '173', // Polzela Commune
+ 'K4' => '174', // Prebold Commune
+ 'K5' => '095', // Preddvor Commune
+ 'K6' => '175', // Prevalje Commune
+ 'K7' => '096', // Ptuj Urban Commune
+ 'K8' => '103', // Ravne na Koroskem Commune
+ 'K9' => '176', // Razkrizje Commune
+ 'L1' => '104', // Ribnica Commune
+ 'L2' => '177', // Ribnica na Pohorju Commune
+ 'L3' => '108', // Ruse Commune
+ 'L4' => '033', // Salovci Commune
+ 'L5' => '178', // Selnica ob Dravi Commune
+ 'L6' => '183', // Sempeter-Vrtojba Commune
+ 'L7' => '120', // Sentjur pri Celju Commune
+ 'L8' => '113', // Slovenska Bistrica Commune
+ 'L9' => '194', // Smartno pri Litiji Commune
+ 'M1' => '179', // Sodrazica Commune
+ 'M2' => '180', // Solcava Commune
+ 'M3' => '181', // Sveta Ana Commune
+ 'M4' => '182', // Sveti Andraz v Slovenskih goricah Commune
+ 'M5' => '184', // Tabor Commune
+ 'M6' => '010', // Tisina Commune
+ 'M7' => '185', // Trnovska vas Commune
+ 'M8' => '186', // Trzin Commune
+ 'M9' => '187', // Velika Polana Commune
+ 'N1' => '188', // Verzej Commune
+ 'N2' => '135', // Videm Commune
+ 'N3' => '139', // Vojnik Commune
+ 'N4' => '189', // Vransko Commune
+ 'N5' => '190', // Zalec Commune
+ 'N6' => '191', // Zetale Commune
+ 'N7' => '192', // Zirovnica Commune
+ 'N8' => '193', // Zuzemberk Commune
+
+ // invalid codes [used by maxmind]
+ 'N9' => '195', // Apace Commune
+ 'O1' => '196', // Cirkulane Commune
+ 'O2' => '207', // Gorje
+ 'O3' => '197', // Kostanjevica na Krki
+ 'O4' => '208', // Log-Dragomer
+ 'O5' => '198', // Makole
+ 'O6' => '212', // Mirna
+ 'O7' => '199', // Mokronog-Trebelno
+ 'O8' => '200', // Poljcane
+ 'O9' => '209', // Recica ob Savinji
+ 'P1' => '201', // Rence-Vogrsko
+ 'P2' => '211', // Sentrupert
+ 'P3' => '206', // Smarjesk Toplice
+ 'P4' => '202', // Sredisce ob Dravi
+ 'P5' => '203', // Straza
+ 'P7' => '210', // Sveti Jurij v Slovenskih Goricah
+ ],
+ 'SK' => [
+ '01' => 'BC',
+ '02' => 'BL',
+ '03' => 'KI',
+ '04' => 'NI',
+ '05' => 'PV',
+ '06' => 'TC',
+ '07' => 'TA',
+ '08' => 'ZI',
+ ],
+ 'SL' => [
+ '01' => 'E',
+ '02' => 'N',
+ '03' => 'S',
+ '04' => 'W',
+ ],
+ 'SM' => [
+ '01' => '01',
+ '02' => '02',
+ '03' => '03',
+ '04' => '04',
+ '05' => '05',
+ '06' => '06',
+ '07' => '07',
+ '08' => '08',
+ '09' => '09',
+ ],
+ 'SN' => [
+ '01' => 'DK',
+ '03' => 'DB',
+ '05' => 'TC',
+ '07' => 'TH',
+ '09' => 'FK',
+ '10' => 'KL',
+ '11' => 'KD',
+ '12' => 'ZG',
+ '13' => 'LG',
+ '14' => 'SL',
+ '15' => 'MT',
+ ],
+ 'SO' => [
+ '01' => 'BK',
+ '02' => 'BN',
+ '03' => 'BR',
+ '04' => 'BY',
+ '05' => 'GA',
+ '06' => 'GE',
+ '07' => 'HI',
+ '08' => 'JD',
+ '09' => 'JH',
+ '10' => 'MU',
+ '12' => 'SA',
+ '13' => 'SD',
+ '14' => 'SH',
+ '18' => 'NU',
+ '19' => 'TO',
+ '20' => 'WO',
+ '21' => 'AW',
+ '22' => 'SO',
+
+ // invalid codes [used by maxmind]
+ '11' => 'NU',
+ '16' => 'WO',
+ ],
+ 'SR' => [
+ '10' => 'BR',
+ '11' => 'CM',
+ '12' => 'CR',
+ '13' => 'MA',
+ '14' => 'NI',
+ '15' => 'PR',
+ '16' => 'PM',
+ '17' => 'SA',
+ '18' => 'SI',
+ '19' => 'WA',
+ ],
+ 'SS' => [
+ // invalid codes [used by maxmind]
+ '01' => 'EC', // Central Equatoria
+ '02' => 'EE', // Eastern Equatoria
+ '03' => 'JG', // Jonglei
+ '04' => 'LK', // Lakes
+ '05' => 'BN', // Northern Bahr el Ghazal
+ '06' => 'UY', // Unity
+ '07' => 'NU', // Upper Nile
+ '08' => 'WR', // Warrap
+ '09' => 'BW', // Western Bahr el Ghazal
+ '10' => 'EW', // Western Equatoria
+ ],
+ 'ST' => [
+ '01' => 'P', // Principe
+ '02' => 'S', // Sao Tome
+ ],
+ 'SV' => [
+ '01' => 'AH',
+ '02' => 'CA',
+ '03' => 'CH',
+ '04' => 'CU',
+ '05' => 'LI',
+ '06' => 'PA',
+ '07' => 'UN',
+ '08' => 'MO',
+ '09' => 'SM',
+ '10' => 'SS',
+ '11' => 'SA',
+ '12' => 'SV',
+ '13' => 'SO',
+ '14' => 'US',
+ ],
+ 'SY' => [
+ '01' => 'HA', // Al Hasakah
+ '02' => 'LA', // Al Ladhiqiyah
+ '03' => 'QU', // Al Qunaytirah
+ '04' => 'RA', // Ar Raqqah
+ '05' => 'SU', // As Suwayda'
+ '06' => 'DR', // Dar
+ '07' => 'DY', // Dayr az Zawr
+ '08' => 'RD', // Rif Dimashq
+ '09' => 'HL', // Halab
+ '10' => 'HM', // Hamah
+ '11' => 'HI', // Hims
+ '12' => 'ID', // Idlib
+ '13' => 'DI', // Dimashq
+ '14' => 'TA', // Tartus
+ ],
+ 'SZ' => [
+ '01' => 'HH',
+ '02' => 'LU',
+ '03' => 'MA',
+ '04' => 'SH',
+
+ // screwed up code, that seems to be from Seychelles
+ '05' => '', // Praslin
+ ],
+ 'TD' => [
+ '01' => 'BA',
+ '02' => 'WF',
+ '03' => '', // Borkou-Ennedi-Tibesti [split up]
+ '05' => 'GR',
+ '06' => 'KA',
+ '07' => 'LC',
+ '08' => 'LO',
+ '09' => 'LR',
+ '12' => 'OD',
+ '13' => 'SA',
+ '14' => 'TA',
+
+ // invalid codes [used by maxmind]
+ '04' => '', // Chari-Baguirmi [split up]
+ '10' => '', // Mayo-Kebbi [split into east and west]
+ '11' => 'MC', // Moyen-Chari
+
+ // valid codes [not used by maxmind]
+ '15' => '', // Chari-Baguirmi [split up]
+ '16' => 'ME',
+ '17' => 'MC',
+ '18' => 'HL',
+ '19' => 'MA',
+ '20' => 'MO',
+ '21' => 'ND',
+ ],
+ 'TG' => [
+ '22' => 'C',
+ '23' => 'K',
+ '24' => 'M',
+ '25' => 'P',
+ '26' => 'S',
+ ],
+ 'TH' => [
+ '01' => '58', // Mae Hong Son
+ '02' => '50', // Chiang Mai
+ '03' => '57', // Chiang Rai
+ '04' => '55', // Nan
+ '05' => '51', // Lamphun
+ '06' => '52', // Lampang
+ '07' => '54', // Phrae
+ '08' => '63', // Tak
+ '09' => '64', // Sukhothai
+ '10' => '53', // Uttaradit
+ '11' => '62', // Kamphaeng Phet
+ '12' => '65', // Phitsanulok
+ '13' => '66', // Phichit
+ '14' => '67', // Phetchabun
+ '15' => '61', // Uthai Thani
+ '16' => '60', // Nakhon Sawan
+ '17' => '43', // Nong Khai
+ '18' => '42', // Loei
+ '20' => '47', // Sakon Nakhon
+ '22' => '40', // Khon Kaen
+ '23' => '46', // Kalasin
+ '24' => '44', // Maha Sarakham
+ '25' => '45', // Roi Et
+ '26' => '36', // Chaiyaphum
+ '27' => '30', // Nakhon Ratchasima
+ '28' => '31', // Buriram
+ '29' => '32', // Surin
+ '30' => '33', // Sisaket
+ '31' => '96', // Narathiwat
+ '32' => '18', // Chai Nat
+ '33' => '17', // Sing Buri
+ '34' => '16', // Lop Buri
+ '35' => '15', // Ang Thong
+ '36' => '14', // Phra Nakhon Si Ayutthaya
+ '37' => '19', // Saraburi
+ '38' => '12', // Nonthaburi
+ '39' => '13', // Pathum Thani
+ '40' => '10', // Krung Thep
+ '41' => '56', // Phayao
+ '42' => '11', // Samut Prakan
+ '43' => '26', // Nakhon Nayok
+ '44' => '24', // Chachoengsao
+ '46' => '20', // Chon Buri
+ '47' => '21', // Rayong
+ '48' => '22', // Chanthaburi
+ '49' => '23', // Trat
+ '50' => '71', // Kanchanaburi
+ '51' => '72', // Suphan Buri
+ '52' => '70', // Ratchaburi
+ '53' => '73', // Nakhon Pathom
+ '54' => '75', // Samut Songkhram
+ '55' => '74', // Samut Sakhon
+ '56' => '76', // Phetchaburi
+ '57' => '77', // Prachuap Khiri Khan
+ '58' => '86', // Chumphon
+ '59' => '85', // Ranong
+ '60' => '84', // Surat Thani
+ '61' => '82', // Phangnga
+ '62' => '83', // Phuket
+ '63' => '81', // Krabi
+ '64' => '80', // Nakhon Si Thammarat
+ '65' => '92', // Trang
+ '66' => '93', // Phatthalung
+ '67' => '91', // Satun
+ '68' => '90', // Songkhla
+ '69' => '94', // Pattani
+ '70' => '95', // Yala
+ '72' => '35', // Yasothon
+ '73' => '48', // Nakhon Phanom
+ '74' => '25', // Prachin Buri
+ '75' => '34', // Ubon Ratchathani
+ '76' => '41', // Udon Thani
+ '77' => '37', // Amnat Charoen
+ '78' => '49', // Mukdahan
+ '79' => '39', // Nong Bua Lamphu
+ '80' => '27', // Sa Kaeo
+
+ // invalid codes [used by maxmind]
+ '21' => '48', // Nakhon Phanom
+ '45' => '25', // Prachin Buri
+ '71' => '34', // Ubon Ratchathani
+ '81' => '38', // Bueng Kan
+ ],
+ 'TJ' => [
+ '01' => 'GB',
+ '02' => 'KT',
+ '03' => 'SU',
+
+ // invalid codes [used by maxmind]
+ '04' => 'DU',
+ '05' => 'RA',
+ ],
+ 'TL' => [
+ // invalid codes [used by maxmind]
+ '06' => 'DI', // Dili
+ ],
+ 'TM' => [
+ '01' => 'A',
+ '02' => 'B',
+ '03' => 'D',
+ '04' => 'L',
+ '05' => 'M',
+ ],
+ 'TN' => [
+ '02' => '42',
+ '03' => '41',
+ '06' => '32',
+ '10' => '71',
+ '14' => '33',
+ '15' => '53',
+ '16' => '52',
+ '17' => '31',
+ '18' => '23',
+ '19' => '21',
+ '22' => '34',
+ '23' => '51',
+ '27' => '13',
+ '28' => '82',
+ '29' => '81',
+ '31' => '73',
+ '32' => '61',
+ '33' => '43',
+ '34' => '83',
+ '35' => '72',
+ '36' => '11',
+ '37' => '22',
+ '38' => '12',
+ '39' => '14',
+ ],
+ 'TO' => [
+ '01' => '02',
+ '02' => '04',
+ '03' => '05',
+ ],
+ 'TR' => [
+ '02' => '02', // Adiyaman
+ '03' => '03', // Afyonkarahisar
+ '04' => '04', // Agri
+ '05' => '05', // Amasya
+ '07' => '07', // Antalya
+ '08' => '08', // Artvin
+ '09' => '09', // Aydin
+ '10' => '10', // Balikesir
+ '11' => '11', // Bilecik
+ '12' => '12', // Bingol
+ '13' => '13', // Bitlis
+ '14' => '14', // Bolu
+ '15' => '15', // Burdur
+ '16' => '16', // Bursa
+ '17' => '17', // Canakkale
+ '19' => '19', // Corum
+ '20' => '20', // Denizli
+ '21' => '21', // Diyarbakir
+ '22' => '22', // Edirne
+ '23' => '23', // Elazig
+ '24' => '24', // Erzincan
+ '25' => '25', // Erzurum
+ '26' => '26', // Eskisehir
+ '28' => '28', // Giresun
+ '31' => '31', // Hatay
+ '32' => '33', // Mersin
+ '33' => '32', // Isparta
+ '34' => '34', // Istanbul
+ '35' => '35', // Izmir
+ '37' => '37', // Kastamonu
+ '38' => '38', // Kayseri
+ '39' => '39', // Kirklareli
+ '40' => '40', // Kirsehir
+ '41' => '41', // Kocaeli
+ '43' => '43', // Kutahya
+ '44' => '44', // Malatya
+ '45' => '45', // Manisa
+ '46' => '46', // Kahramanmaras
+ '48' => '48', // Mugla
+ '49' => '49', // Mus
+ '50' => '50', // Nevsehir
+ '52' => '52', // Ordu
+ '53' => '53', // Rize
+ '54' => '54', // Sakarya
+ '55' => '55', // Samsun
+ '57' => '57', // Sinop
+ '58' => '58', // Sivas
+ '59' => '59', // Tekirdag
+ '60' => '60', // Tokat
+ '61' => '61', // Trabzon
+ '62' => '62', // Tunceli
+ '63' => '63', // Sanliurfa
+ '64' => '64', // Usak
+ '65' => '65', // Van
+ '66' => '66', // Yozgat
+ '68' => '06', // Ankara
+ '69' => '29', // Gumushane
+ '70' => '30', // Hakkari
+ '71' => '42', // Konya
+ '72' => '47', // Mardin
+ '73' => '51', // Nigde
+ '74' => '56', // Siirt
+ '75' => '68', // Aksaray
+ '76' => '72', // Batman
+ '77' => '69', // Bayburt
+ '78' => '70', // Karaman
+ '79' => '71', // Kirikkale
+ '80' => '73', // Sirnak
+ '81' => '01', // Adana
+ '82' => '18', // Cankiri
+ '83' => '27', // Gaziantep
+ '84' => '36', // Kars
+ '85' => '67', // Zonguldak
+ '86' => '75', // Ardahan
+ '87' => '74', // Bartin
+ '88' => '76', // Igdir
+ '89' => '78', // Karabuk
+ '90' => '79', // Kilis
+ '91' => '80', // Osmaniye
+ '92' => '77', // Yalova
+ '93' => '81', // Duzce
+ ],
+ 'TT' => [
+ '01' => 'ARI', // Arima
+ '02' => '', // Caroni [split up]
+ '03' => 'MRC', // Mayaro
+ '04' => '', // Nariva [split up]
+ '05' => 'POS', // Port-of-Spain
+ '06' => 'SGE', // Saint Andrew [now in Sangre Grand]
+ '07' => 'SGE', // Saint David [now in Sangre Grand]
+ '08' => '', // Saint George [split up]
+ '09' => '', // Saint Patrick [split up]
+ '10' => 'SFO', // San Fernando
+ '11' => 'TOB', // Tobago
+ '12' => '', // Victoria [split up]
+ ],
+ 'TW' => [
+ '01' => '',
+ '02' => 'KHH',
+ '03' => 'TPE',
+ '04' => '',
+ ],
+ 'TZ' => [
+ '02' => '19',
+ '03' => '03',
+ '04' => '04',
+ '05' => '08',
+ '06' => '09',
+ '07' => '12',
+ '08' => '13',
+ '09' => '14',
+ '10' => '16',
+ '11' => '17',
+ '12' => '18',
+ '13' => '06',
+ '14' => '21',
+ '15' => '22',
+ '16' => '23',
+ '17' => '24',
+ '18' => '25',
+ '19' => '05',
+ '20' => '10',
+ '21' => '11',
+ '22' => '07',
+ '23' => '02',
+ '24' => '20',
+ '25' => '15',
+ '26' => '01',
+ '27' => '26',
+ ],
+ 'UA' => [
+ '01' => '71',
+ '02' => '74',
+ '03' => '77',
+ '04' => '12',
+ '05' => '14',
+ '06' => '26',
+ '07' => '63',
+ '08' => '65',
+ '09' => '68',
+ '10' => '35',
+ '11' => '43',
+ '12' => '30',
+ '13' => '32',
+ '14' => '09',
+ '15' => '46',
+ '16' => '48',
+ '17' => '51',
+ '18' => '53',
+ '19' => '56',
+ '20' => '40',
+ '21' => '59',
+ '22' => '61',
+ '23' => '05',
+ '24' => '07',
+ '25' => '21',
+ '26' => '23',
+ '27' => '18',
+ ],
+ 'UG' => [
+ '26' => '302', // Apac
+ '28' => '401', // Bundibugyo
+ '29' => '102', // Bushenyi
+ '30' => '304', // Gulu
+ '31' => '403', // Hoima
+ '33' => '204', // Jinja
+ '36' => '101', // Kalangala
+ '37' => '102', // Kampala
+ '38' => '205', // Kamuli
+ '39' => '206', // Kapchorwa
+ '40' => '406', // Kasese
+ '41' => '407', // Kibale
+ '42' => '103', // Kiboga
+ '43' => '408', // Kisoro
+ '45' => '306', // Kotido
+ '46' => '208', // Kumi
+ '47' => '307', // Lira
+ '50' => '409', // Masindi
+ '52' => '410', // Mbarara
+ '56' => '107', // Mubende
+ '58' => '310', // Nebbi
+ '59' => '411', // Ntungamo
+ '60' => '210', // Pallisa
+ '61' => '110', // Rakai
+ '65' => '301', // Adjumani
+ '66' => '201', // Bugiri
+ '67' => '202', // Busia
+ '69' => '207', // Katakwi
+ '70' => '104', // Luwero
+ '71' => '105', // Masaka
+ '72' => '309', // Moyo
+ '73' => '109', // Nakasongola
+ '74' => '111', // Sembabule
+ '76' => '212', // Tororo
+ '77' => '303', // Arua
+ '78' => '203', // Iganga
+ '79' => '405', // Kabarole
+ '80' => '213', // Kaberamaido
+ '81' => '413', // Kamwenge
+ '82' => '414', // Kanungu
+ '83' => '112', // Kayunga
+ '84' => '305', // Kitgum
+ '85' => '415', // Kyenjojo
+ '86' => '214', // Mayuge
+ '87' => '209', // Mbale
+ '88' => '308', // Moroto
+ '89' => '106', // Mpigi
+ '90' => '108', // Mukono
+ '91' => '311', // Nakapiripirit
+ '92' => '312', // Pader
+ '93' => '412', // Rukungiri
+ '94' => '215', // Sironko
+ '95' => '211', // Soroti
+ '96' => '113', // Wakiso
+ '97' => '313', // Yumbe
+
+ // valid codes [not used by maxmind]
+ '34' => '404', // Kabale
+ ],
+ 'UY' => [
+ '01' => 'AR',
+ '02' => 'CA',
+ '03' => 'CL',
+ '04' => 'CO',
+ '05' => 'DU',
+ '06' => 'FS',
+ '07' => 'FD',
+ '08' => 'LA',
+ '09' => 'MA',
+ '10' => 'MO',
+ '11' => 'PA',
+ '12' => 'RN',
+ '13' => 'RV',
+ '14' => 'RO',
+ '15' => 'SA',
+ '16' => 'SJ',
+ '17' => 'SO',
+ '18' => 'TA',
+ '19' => 'TT',
+ ],
+ 'UZ' => [
+ '01' => 'AN',
+ '02' => 'BU',
+ '03' => 'FA',
+ '05' => 'XO',
+ '06' => 'NG',
+ '07' => 'NW',
+ '08' => 'QA',
+ '09' => 'QR',
+ '10' => 'SA',
+ '12' => 'SU',
+ '13' => 'TK',
+ '14' => 'TO',
+ '15' => 'JI',
+
+ // invalid codes [used by maxmind]
+ '04' => 'JI',
+ '11' => 'SI',
+ ],
+ 'VC' => [
+ '01' => '01',
+ '02' => '02',
+ '03' => '03',
+ '04' => '04',
+ '05' => '05',
+ '06' => '06',
+ ],
+ 'VE' => [
+ '01' => 'Z',
+ '02' => 'B',
+ '03' => 'C',
+ '04' => 'D',
+ '05' => 'E',
+ '06' => 'F',
+ '07' => 'G',
+ '08' => 'H',
+ '09' => 'Y',
+ '11' => 'I',
+ '12' => 'J',
+ '13' => 'K',
+ '14' => 'L',
+ '15' => 'M',
+ '16' => 'N',
+ '17' => 'O',
+ '18' => 'P',
+ '19' => 'R',
+ '20' => 'S',
+ '21' => 'T',
+ '22' => 'U',
+ '23' => 'V',
+ '24' => 'W',
+ '25' => 'A',
+ '26' => 'X',
+ ],
+ 'VN' => [
+ '01' => '44', // An Giang
+ '03' => '50', // Ben Tre
+ '05' => '04', // Cao Bang
+ '09' => '45', // Dong Thap
+ '13' => 'HP', // Hai Phong
+ '20' => 'SG', // Ho Chi Minh
+ '21' => '47', // Kien Giang
+ '23' => '35', // Lam Dong
+ '24' => '41', // Long An
+ '30' => '13', // Quang Ninh
+ '32' => '05', // Son La
+ '33' => '37', // Tay Ninh
+ '34' => '21', // Thanh Hoa
+ '35' => '20', // Thai Binh
+ '37' => '46', // Tien Giang
+ '39' => '09', // Lang Son
+ '43' => '39', // Dong Nai
+ '44' => 'HN', // Ha Noi
+ '45' => '45', // Ba Ria-Vung Tau
+ '46' => '31', // Binh Dinh
+ '47' => '40', // Binh Thuan
+ '49' => '30', // Gia Lai
+ '50' => '03', // Ha Giang
+ '52' => '23', // Ha Tinh
+ '53' => '14', // Hoa Binh
+ '54' => '34', // Khanh Hoa
+ '55' => '28', // Kon Tum
+ '58' => '22', // Nghe An
+ '59' => '18', // Ninh Binh
+ '60' => '36', // Ninh Thuan
+ '61' => '32', // Phu Yen
+ '62' => '24', // Quang Binh
+ '63' => '29', // Quang Ngai
+ '64' => '25', // Quang Tri
+ '65' => '52', // Soc Trang
+ '66' => '26', // Thua Thien-Hue
+ '67' => '51', // Tra Vinh
+ '68' => '07', // Tuyen Quang
+ '69' => '49', // Vinh Long
+ '70' => '06', // Yen Bai
+ '71' => '54', // Bac Giang
+ '72' => '53', // Bac Kan
+ '73' => '55', // Bac Lieu
+ '74' => '56', // Bac Ninh
+ '75' => '57', // Binh Duong
+ '76' => '58', // Binh Phuoc
+ '77' => '59', // Ca Mau
+ '78' => 'DN', // Da Nang
+ '79' => '61', // Hai Duong
+ '80' => '63', // Ha Nam
+ '81' => '66', // Hung Yen
+ '82' => '67', // Nam Dinh
+ '83' => '68', // Phu Tho
+ '84' => '27', // Quang Nam
+ '85' => '69', // Thai Nguyen
+ '86' => '70', // Vinh Phuc
+ '87' => 'CT', // Can Tho
+ '88' => '33', // Dac Lak
+ '89' => '01', // Lai Chau
+ '90' => '02', // Lao Cai
+ '91' => '72', // Dak Nong
+ '92' => '71', // Dien Bien
+ '93' => '73', // Hau Giang
+
+ // valid codes [not used by maxmind]
+ '51' => 'HN', // Hà Tây [merged in Ha Noi]
+ ],
+ 'VU' => [
+ '07' => 'TOB',
+ '13' => 'SAM',
+ '15' => 'TAE',
+ '16' => 'MAP',
+ '17' => 'PAM',
+ '18' => 'SEE',
+
+ // invalid codes [used by maxmind]
+ '05' => 'MAP', // Ambrym [island in Malampa]
+ '06' => 'PAM', // Aoba [island in Penama]
+ '08' => 'SEE', // Efate [island in Shefa]
+ '09' => 'SEE', // Epi [island in Shefa]
+ '10' => 'MAP', // Malakula [island in Malampa]
+ '11' => 'MAP', // Paama [island in Malampa]
+ '12' => 'PAM', // Pentecote [island in Penama]
+ '14' => 'SEE', // Shepherd [island in Shefa]
+ ],
+ 'WS' => [
+ '02' => 'AL',
+ '03' => 'AT',
+ '04' => 'FA',
+ '05' => 'GE',
+ '06' => 'VF',
+ '07' => 'GI',
+ '08' => 'PA',
+ '09' => 'SA',
+ '10' => 'TU',
+ '11' => 'VS',
+
+ // valid codes [not used by maxmind]
+ '01' => 'AA',
+ ],
+ 'YE' => [
+ '01' => 'AB', // Abyan
+ '02' => 'AD', // Adan
+ '03' => 'MR', // Al Mahrah
+ '04' => 'HD', // Hadramawt
+ '05' => 'SH', // Shabwah
+ '08' => 'HU', // Al Hudaydah
+ '10' => 'MW', // Al Mahwit
+ '11' => 'DH', // Dhamar
+ '14' => 'MA', // Ma'rib
+ '15' => 'SD', // Sa'dah
+ '16' => 'SN', // San'a'
+ '18' => 'DA', // Ad Dali
+ '19' => 'AM', // Amran
+ '20' => 'BA', // Al Bayda'
+ '21' => 'JA', // Al Jawf
+ '22' => 'HJ', // Hajjah
+ '23' => 'IB', // Ibb
+ '24' => 'LA', // Lahij
+ '25' => 'TA', // Taizz
+
+ // invalid codes [used by maxmind]
+ '06' => 'LA', // Lahij
+ '07' => 'BA', // Al Bayda'
+ '09' => 'JA', // Al Jawf
+ '12' => 'HJ', // Hajjah
+ '13' => 'IB', // Ibb
+ '17' => 'TA', // Taizz
+ ],
+ 'ZA' => [
+ '02' => 'NL',
+ '03' => 'FS',
+ '05' => 'EC',
+ '06' => 'GT',
+ '07' => 'MP',
+ '08' => 'NC',
+ '09' => 'LP',
+ '10' => 'NW',
+ '11' => 'WC',
+
+ // invalid codes [used by maxmind]
+ '01' => 'NW', // North-Western Province
+ ],
+ 'ZM' => [
+ '01' => '01',
+ '02' => '02',
+ '03' => '03',
+ '04' => '04',
+ '05' => '05',
+ '06' => '06',
+ '07' => '07',
+ '08' => '08',
+ '09' => '09',
+ ],
+ 'ZW' => [
+ '01' => 'MA',
+ '02' => 'MI',
+ '03' => 'MC',
+ '04' => 'ME',
+ '05' => 'MW',
+ '06' => 'MN',
+ '07' => 'MS',
+ '08' => 'MV',
+ '09' => 'BU',
+ '10' => 'HA',
+ ],
+]; \ No newline at end of file