JS: libphonenumber 4.5
authortronikos <tronikos@ee073f10-1060-11df-b6a4-87a95322a99c>
Fri, 27 Jan 2012 20:10:00 +0000 (20:10 +0000)
committertronikos <tronikos@ee073f10-1060-11df-b6a4-87a95322a99c>
Fri, 27 Jan 2012 20:10:00 +0000 (20:10 +0000)
Review URL: http://codereview.appspot.com/5574080

git-svn-id: http://libphonenumber.googlecode.com/svn/trunk@422 ee073f10-1060-11df-b6a4-87a95322a99c

javascript/README
javascript/i18n/phonenumbers/asyoutypeformatter.js
javascript/i18n/phonenumbers/asyoutypeformatter_test.js
javascript/i18n/phonenumbers/metadata.js
javascript/i18n/phonenumbers/metadatafortesting.js
javascript/i18n/phonenumbers/metadatalite.js
javascript/i18n/phonenumbers/phonemetadata.pb.js
javascript/i18n/phonenumbers/phonenumberutil.js
javascript/i18n/phonenumbers/phonenumberutil_test.js
javascript/i18n/phonenumbers/regioncodefortesting.js
tools/java/java-build/src/com/google/i18n/phonenumbers/BuildMetadataJsonFromXml.java

index 0996c6f..fddbbea 100644 (file)
@@ -25,7 +25,7 @@ pages with your web browser:
 
 How to update:
 ==============
-The JavaScript library is ported from the Java implementation (revision 388).
+The JavaScript library is ported from the Java implementation (revision 421).
 When the Java project gets updated follow these steps to update the JavaScript
 project:
 
@@ -43,7 +43,7 @@ project:
     run the following commands to regenerate metadata.js and
     metadatafortesting.js:
 
-    ant -f java/libphonenumber/build.xml build-js-metadata
+    ant -f java/build.xml build-js-metadata
 
 3.  Manually port any changes of the Java code to the JavaScript code:
       PhoneNumberUtil.java => phonenumberutil.js
index 3e121ed..ccec147 100644 (file)
@@ -599,7 +599,7 @@ i18n.phonenumbers.AsYouTypeFormatter.prototype.
         }
         return this.ableToFormat_ ?
             this.prefixBeforeNationalNumber_.toString() + tempNationalNumber :
-            tempNationalNumber;
+            this.accruedInput_.toString();
       } else {
         return this.attemptToChooseFormattingPattern_();
       }
@@ -752,8 +752,8 @@ i18n.phonenumbers.AsYouTypeFormatter.prototype.
     this.getAvailableFormats_(
         nationalNumber.substring(0,
             i18n.phonenumbers.AsYouTypeFormatter.MIN_LEADING_DIGITS_LENGTH_));
-    this.maybeCreateNewTemplate_();
-    return this.inputAccruedNationalNumber_();
+    return this.maybeCreateNewTemplate_() ?
+        this.inputAccruedNationalNumber_() : this.accruedInput_.toString();
   } else {
     return this.prefixBeforeNationalNumber_.toString() + nationalNumber;
   }
@@ -783,7 +783,7 @@ i18n.phonenumbers.AsYouTypeFormatter.prototype.inputAccruedNationalNumber_ =
     }
     return this.ableToFormat_ ?
         this.prefixBeforeNationalNumber_.toString() + tempNationalNumber :
-        tempNationalNumber;
+        this.accruedInput_.toString();
   } else {
     return this.prefixBeforeNationalNumber_.toString();
   }
@@ -896,7 +896,11 @@ i18n.phonenumbers.AsYouTypeFormatter.prototype.
   this.nationalNumber_.append(numberWithoutCountryCallingCode.toString());
   /** @type {string} */
   var newRegionCode = this.phoneUtil_.getRegionCodeForCountryCode(countryCode);
-  if (newRegionCode != this.defaultCountry_) {
+  if (i18n.phonenumbers.PhoneNumberUtil.REGION_CODE_FOR_NON_GEO_ENTITY ==
+      newRegionCode) {
+    this.currentMetaData_ =
+        this.phoneUtil_.getMetadataForNonGeographicalRegion(countryCode);
+  } else if (newRegionCode != this.defaultCountry_) {
     this.currentMetaData_ = this.getMetadataForRegion_(newRegionCode);
   }
   /** @type {string} */
index 83d230a..4a714ca 100644 (file)
@@ -93,6 +93,7 @@ function testTooLongNumberMatchingMultipleLeadingDigits() {
   assertEquals('+81 90 1234 5678', f.inputDigit('8'));
   assertEquals('+81 90 12 345 6789', f.inputDigit('9'));
   assertEquals('+81901234567890', f.inputDigit('0'));
+  assertEquals('+819012345678901', f.inputDigit('1'));
 }
 
 function testAYTFUS() {
@@ -699,6 +700,25 @@ function testAYTF_MX() {
   assertEquals('+52 1 541 234 5678', f.inputDigit('8'));
 }
 
+function testAYTF_International_Toll_Free() {
+  /** @type {i18n.phonenumbers.AsYouTypeFormatter} */
+  var f = new i18n.phonenumbers.AsYouTypeFormatter(RegionCode.US);
+  // +800 1234 5678
+  assertEquals('+', f.inputDigit('+'));
+  assertEquals('+8', f.inputDigit('8'));
+  assertEquals('+80', f.inputDigit('0'));
+  assertEquals('+800 ', f.inputDigit('0'));
+  assertEquals('+800 1', f.inputDigit('1'));
+  assertEquals('+800 12', f.inputDigit('2'));
+  assertEquals('+800 123', f.inputDigit('3'));
+  assertEquals('+800 1234', f.inputDigit('4'));
+  assertEquals('+800 1234 5', f.inputDigit('5'));
+  assertEquals('+800 1234 56', f.inputDigit('6'));
+  assertEquals('+800 1234 567', f.inputDigit('7'));
+  assertEquals('+800 1234 5678', f.inputDigit('8'));
+  assertEquals('+800123456789', f.inputDigit('9'));
+}
+
 function testAYTFMultipleLeadingDigitPatterns() {
   // +81 50 2345 6789
   /** @type {i18n.phonenumbers.AsYouTypeFormatter} */
@@ -732,6 +752,15 @@ function testAYTFMultipleLeadingDigitPatterns() {
   assertEquals('+81 222 12 567', f.inputDigit('7'));
   assertEquals('+81 222 12 5678', f.inputDigit('8'));
 
+  // 011113
+  f.clear();
+  assertEquals('0', f.inputDigit('0'));
+  assertEquals('01', f.inputDigit('1'));
+  assertEquals('011', f.inputDigit('1'));
+  assertEquals('011 1', f.inputDigit('1'));
+  assertEquals('011 11', f.inputDigit('1'));
+  assertEquals('011113', f.inputDigit('3'));
+
   // +81 3332 2 5678
   f.clear();
   assertEquals('+', f.inputDigit('+'));
index e2ddbd0..c7229f5 100644 (file)
@@ -206,13 +206,17 @@ i18n.phonenumbers.metadata.countryCodeToRegionCodeMap = {
 ,690:["TK"]
 ,691:["FM"]
 ,692:["MH"]
+,800:["001"]
+,808:["001"]
 ,850:["KP"]
 ,852:["HK"]
 ,853:["MO"]
 ,855:["KH"]
 ,856:["LA"]
 ,880:["BD"]
+,883:["001"]
 ,886:["TW"]
+,888:["001"]
 ,960:["MV"]
 ,961:["LB"]
 ,962:["JO"]
@@ -230,6 +234,7 @@ i18n.phonenumbers.metadata.countryCodeToRegionCodeMap = {
 ,975:["BT"]
 ,976:["MN"]
 ,977:["NP"]
+,979:["001"]
 ,992:["TJ"]
 ,993:["TM"]
 ,994:["AZ"]
@@ -255,6 +260,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"911","\\d{3}",,,"911"]
+,[,,"NA","NA"]
 ]
 ,"AD":[,[,,"(?:[346-9]|180)\\d{5}","\\d{6,8}"]
 ,[,,"[78]\\d{5}","\\d{6}",,,"712345"]
@@ -273,6 +279,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"11[0268]","\\d{3}",,,"112"]
+,[,,"NA","NA"]
 ]
 ,"AE":[,[,,"[2-79]\\d{7,8}|800\\d{2,9}","\\d{5,12}"]
 ,[,,"(?:[2-4679][2-8]\\d|600[25])\\d{5}","\\d{7,9}",,,"22345678"]
@@ -295,6 +302,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"112|99[789]","\\d{3}",,,"112"]
+,[,,"NA","NA"]
 ]
 ,"AF":[,[,,"[2-7]\\d{8}","\\d{7,9}"]
 ,[,,"(?:[25][0-8]|[34][0-4]|6[0-5])[2-9]\\d{6}","\\d{7,9}",,,"234567890"]
@@ -310,6 +318,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"1(?:02|19)","\\d{3}",,,"119"]
+,[,,"NA","NA"]
 ]
 ,"AG":[,[,,"[2589]\\d{9}","\\d{7}(?:\\d{3})?"]
 ,[,,"268(?:4(?:6[0-38]|84)|56[0-2])\\d{4}","\\d{7}(?:\\d{3})?",,,"2684601234"]
@@ -323,6 +332,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,"268",[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"9(?:11|99)","\\d{3}",,,"911"]
+,[,,"NA","NA"]
 ]
 ,"AI":[,[,,"[2589]\\d{9}","\\d{7}(?:\\d{3})?"]
 ,[,,"2644(?:6[12]|9[78])\\d{4}","\\d{7}(?:\\d{3})?",,,"2644612345"]
@@ -336,6 +346,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,"264",[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"911","\\d{3}",,,"911"]
+,[,,"NA","NA"]
 ]
 ,"AL":[,[,,"[2-57]\\d{7}|6\\d{8}|8\\d{5,7}|9\\d{5}","\\d{5,9}"]
 ,[,,"(?:2(?:[168][1-9]|[247]\\d|9[1-7])|3(?:1[1-3]|[2-6]\\d|[79][1-8]|8[1-9])|4\\d{2}|5(?:1[1-4]|[2-578]\\d|6[1-5]|9[1-7])|8(?:[19][1-5]|[2-6]\\d|[78][1-7]))\\d{5}","\\d{5,8}",,,"22345678"]
@@ -358,6 +369,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"12[789]","\\d{3}",,,"129"]
+,[,,"NA","NA"]
 ]
 ,"AM":[,[,,"[1-35-9]\\d{7}","\\d{5,8}"]
 ,[,,"(?:10\\d|2(?:2[2-46]|3[1-8]|4[2-69]|5[2-7]|6[1-9]|8[1-7])|3[12]2)\\d{5}","\\d{5,8}",,,"10123456"]
@@ -380,6 +392,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"10[123]","\\d{3}",,,"102"]
+,[,,"NA","NA"]
 ]
 ,"AN":[,[,,"[13-79]\\d{6,7}","\\d{7,8}"]
 ,[,,"(?:318|5(?:25|4\\d|8[239])|7(?:1[578]|50)|9(?:[48]\\d{2}|50\\d|7(?:2[0-2]|[34]\\d|6[35-7]|77)))\\d{4}|416[0239]\\d{3}","\\d{7,8}",,,"7151234"]
@@ -398,6 +411,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"112|911","\\d{3}",,,"112"]
+,[,,"NA","NA"]
 ]
 ,"AO":[,[,,"[29]\\d{8}","\\d{9}"]
 ,[,,"2\\d(?:[26-9]\\d|\\d[26-9])\\d{5}","\\d{9}",,,"222123456"]
@@ -413,26 +427,31 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"11[235]","\\d{3}",,,"113"]
+,[,,"NA","NA"]
 ]
 ,"AR":[,[,,"[1-368]\\d{9}|9\\d{10}","\\d{6,11}"]
-,[,,"11\\d{8}|(?:2(?:2(?:[0139]\\d|2[13-79]|4[1-6]|5[2457]|6[124-8]|7[1-4]|8[13-6])|3(?:1[467]|2[02-6]|3[13-8]|[49][2-6]|5[2-8]|[067]\\d)|47[3-8]|6(?:[01345]\\d|2[2-7])|9(?:[0124789]\\d|3[1-6]|5[234]|6[2-6]))|3(?:3(?:2[79]|8[2578])|4(?:[78]\\d|0[0124-9]|[1-356]\\d|4[24-7]|9[123678])|5(?:[138]\\d|2[1245]|4[1-9]|6[2-4]|7[1-6])|7(?:[12468]\\d|3[1245]|5[124-8]|7[2-57])|8(?:[123578]\\d|4[13-6]|6[1-357-9]|9[124]))|670\\d)\\d{6}","\\d{6,10}",,,"1123456789"]
-,[,,"675\\d{7}|9(?:11[2-9]\\d{7}|(?:2(?:2[013]|37|6[14]|9[179])|3(?:4[1235]|5[138]|8[1578]))[2-9]\\d{6}|\\d{4}[2-9]\\d{5})","\\d{6,11}",,,"91123456789"]
+,[,,"11\\d{8}|(?:2(?:2(?:[0139]\\d|2[13-79]|4[1-6]|5[2457]|6[124-8]|7[1-4]|8[13-6])|3(?:1[467]|2[02-6]|3[13-8]|[49][2-6]|5[2-8]|[067]\\d)|47[3-8]|6(?:[013-6]\\d|2[2-7])|80\\d|9(?:[0124789]\\d|3[1-6]|5[234]|6[2-46]))|3(?:3(?:2[79]|8[2578])|4(?:[78]\\d|0[0124-9]|[1-356]\\d|4[24-7]|9[123678])|5(?:[138]\\d|2[1245]|4[1-9]|6[2-4]|7[1-6])|6[24]\\d|7(?:[124689]\\d|3[1245]|5[14-8]|7[2-57])|8(?:[123578]\\d|4[13-6]|6[1-357-9]|9[124]))|670\\d)\\d{6}","\\d{6,10}",,,"1123456789"]
+,[,,"675\\d{7}|9(?:11[2-9]\\d{7}|(?:2(?:2[013]|37|6[01346]|80|9[147-9])|3(?:4[1235]|5[138]|6[24]|7[69]|8[1578]))[2-9]\\d{6}|\\d{4}[2-9]\\d{5})","\\d{6,11}",,,"91123456789"]
 ,[,,"800\\d{7}","\\d{10}",,,"8001234567"]
 ,[,,"60[04579]\\d{7}","\\d{10}",,,"6001234567"]
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
-,"AR",54,"00","0",,,"0(?:(11|2(?:2(?:02?|[13]|2[13-79]|4[1-6]|5[2457]|6[124-8]|7[1-4]|8[13-6]|9[1-367])|3(?:[06]2|1[467]|2[02-6]|3[13-8]|[49][2-6]|5[2-8]|7)|47[3-578]|6(?:1|2[2-7]|4[6-8]?|5[125-8])|9(?:0[1-3]|[19]|2\\d|3[1-6]|4[0-24-68]|5[2-4]|6[2-6]|72?|8[23]?))|3(?:3(?:2[79]|8[2578])|4(?:0[124-9]|[12]|3[5-8]?|4[24-7]|5[4-68]?|6\\d|7[126]|8[237-9]|9[1-36-8])|5(?:1|2[1245]|3[2-4]?|4[1-46-9]|6[2-4]|7[1-6]|8[2-5]?)|7(?:1[15-8]|2[125]|3[1245]|4[13]|5[124-8]|7[2-57]|8[1-36])|8(?:1|2[125-7]|3[23578]|4[13-6]|5[4-8]?|6[1-357-9]|7[5-8]?|8[4-7]?|9[124])))15)?","9$1",,,[[,"([68]\\d{2})(\\d{3})(\\d{4})","$1-$2-$3",["[68]"]
+,"AR",54,"00","0",,,"0(?:(11|2(?:2(?:02?|[13]|2[13-79]|4[1-6]|5[2457]|6[124-8]|7[1-4]|8[13-6]|9[1-367])|3(?:[06]2|1[467]|2[02-6]|3[13-8]|[49][2-6]|5[2-8]|7)|47[3-578]|6(?:[0136]|2[2-7]|4[6-8]?|5[15-8])|80|9(?:0[1-3]|[19]|2\\d|3[1-6]|4[024-68]?|5[2-4]|6[2-46]|72?|8[23]?))|3(?:3(?:2[79]|8[2578])|4(?:0[124-9]|[12]|3[5-8]?|4[24-7]|5[4-68]?|6\\d|7[126]|8[237-9]|9[1-36-8])|5(?:1|2[1245]|3[2-47]?|4[1-46-9]|6[2-4]|7[1-6]|8[2-5]?)|6[24]|7(?:1[15-8]|2[125]|3[1245]|4[13]|5[14-8]|[69]|7[2-57]|8[1-36])|8(?:1|2[125-7]|3[23578]|4[13-6]|5[4-8]?|6[1-357-9]|7[36-8]?|8[5-8]?|9[124])))15)?","9$1",,,[[,"([68]\\d{2})(\\d{3})(\\d{4})","$1-$2-$3",["[68]"]
 ,"0$1","",0]
 ,[,"(9)(11)(\\d{4})(\\d{4})","$2 15-$3-$4",["911"]
 ,"0$1","",0]
-,[,"(9)(\\d{3})(\\d{3})(\\d{4})","$2 15-$3-$4",["9(?:2[2369]|3[458])","9(?:2(?:2[013]|37|6[14]|9[179])|3(?:4[1235]|5[138]|8[1578]))"]
+,[,"(9)(\\d{3})(\\d{3})(\\d{4})","$2 15-$3-$4",["9(?:2[23689]|3[4-8])","9(?:2(?:2[013]|37|6[01346]|80|9[147-9])|3(?:4[1235]|5[138]|6[24]|7[69]|8[1578]))","9(?:2(?:2[013]|37|6[01346]|80|9(?:[17-9]|4[1379]))|3(?:4[1235]|5(?:[18]|3[0-35689])|6[24]|7[69]|8(?:[15]|7[0-24-9]|8[0-79])))"]
+,"0$1","",0]
+,[,"(9)(\\d{4})(\\d{3})(\\d{3})","$2 15-$3-$4",["93[58]","9(?:3(?:53|8[78]))","9(?:3(?:537|8(?:73|88)))"]
 ,"0$1","",0]
-,[,"(9)(\\d{4})(\\d{2})(\\d{4})","$2 15-$3-$4",["9(?:2[2-469]|3[3-578])","9(?:2(?:2[24-9]|3[0-69]|47|6[25]|9[02-68])|3(?:3[28]|4[046-9]|5[2467]|7[1-578]|8[23469]))"]
+,[,"(9)(\\d{4})(\\d{2})(\\d{4})","$2 15-$3-$4",["9[23]"]
 ,"0$1","",0]
 ,[,"(11)(\\d{4})(\\d{4})","$1 $2-$3",["1"]
 ,"0$1","",0]
-,[,"(\\d{3})(\\d{3})(\\d{4})","$1 $2-$3",["2(?:2[013]|37|6[14]|9[179])|3(?:4[1235]|5[138]|8[1578])"]
+,[,"(\\d{3})(\\d{3})(\\d{4})","$1 $2-$3",["2(?:2[013]|37|6[01346]|80|9[147-9])|3(?:4[1235]|5[138]|6[24]|7[69]|8[1578])","2(?:2[013]|37|6[01346]|80|9(?:[17-9]|4[1379]))|3(?:4[1235]|5(?:[18]|3[0-35689])|6[24]|7[69]|8(?:[15]|7[0-24-9]|8[0-79]))"]
+,"0$1","",0]
+,[,"(\\d{4})(\\d{3})(\\d{3})","$1 $2-$3",["3(?:53|8[78])","3(?:537|8(?:73|88))"]
 ,"0$1","",0]
 ,[,"(\\d{4})(\\d{2})(\\d{4})","$1 $2-$3",["[23]"]
 ,"0$1","",0]
@@ -441,13 +460,17 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ]
 ,[,"(9)(11)(\\d{4})(\\d{4})","$1 $2 $3-$4",["911"]
 ]
-,[,"(9)(\\d{3})(\\d{3})(\\d{4})","$1 $2 $3-$4",["9(?:2[2369]|3[458])","9(?:2(?:2[013]|37|6[14]|9[179])|3(?:4[1235]|5[138]|8[1578]))"]
+,[,"(9)(\\d{3})(\\d{3})(\\d{4})","$1 $2 $3-$4",["9(?:2[23689]|3[4-8])","9(?:2(?:2[013]|37|6[01346]|80|9[147-9])|3(?:4[1235]|5[138]|6[24]|7[69]|8[1578]))","9(?:2(?:2[013]|37|6[01346]|80|9(?:[17-9]|4[1379]))|3(?:4[1235]|5(?:[18]|3[0-35689])|6[24]|7[69]|8(?:[15]|7[0-24-9]|8[0-79])))"]
+]
+,[,"(9)(\\d{4})(\\d{3})(\\d{3})","$2 15-$3-$4",["93[58]","9(?:3(?:53|8[78]))","9(?:3(?:537|8(?:73|88)))"]
 ]
-,[,"(9)(\\d{4})(\\d{2})(\\d{4})","$1 $2 $3-$4",["9(?:2[2-469]|3[3-578])","9(?:2(?:2[24-9]|3[0-69]|47|6[25]|9[02-68])|3(?:3[28]|4[046-9]|5[2467]|7[1-578]|8[23469]))"]
+,[,"(9)(\\d{4})(\\d{2})(\\d{4})","$1 $2 $3-$4",["9[23]"]
 ]
 ,[,"(11)(\\d{4})(\\d{4})","$1 $2-$3",["1"]
 ]
-,[,"(\\d{3})(\\d{3})(\\d{4})","$1 $2-$3",["2(?:2[013]|37|6[14]|9[179])|3(?:4[1235]|5[138]|8[1578])"]
+,[,"(\\d{3})(\\d{3})(\\d{4})","$1 $2-$3",["2(?:2[013]|37|6[01346]|80|9[147-9])|3(?:4[1235]|5[138]|6[24]|7[69]|8[1578])","2(?:2[013]|37|6[01346]|80|9(?:[17-9]|4[1379]))|3(?:4[1235]|5(?:[18]|3[0-35689])|6[24]|7[69]|8(?:[15]|7[0-24-9]|8[0-79]))"]
+]
+,[,"(\\d{4})(\\d{3})(\\d{3})","$1 $2-$3",["3(?:53|8[78])","3(?:537|8(?:73|88))"]
 ]
 ,[,"(\\d{4})(\\d{2})(\\d{4})","$1 $2-$3",["[23]"]
 ]
@@ -456,6 +479,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"810\\d{7}","\\d{10}",,,"8101234567"]
 ,[,,"810\\d{7}","\\d{10}",,,"8101234567"]
 ,,[,,"1(?:0[017]|28)","\\d{3}",,,"101"]
+,[,,"NA","NA"]
 ]
 ,"AS":[,[,,"[5689]\\d{9}","\\d{7}(?:\\d{3})?"]
 ,[,,"6846(?:22|33|44|55|77|88|9[19])\\d{4}","\\d{7}(?:\\d{3})?",,,"6846221234"]
@@ -469,6 +493,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,"684",[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"911","\\d{3}",,,"911"]
+,[,,"NA","NA"]
 ]
 ,"AT":[,[,,"[1-9]\\d{3,12}","\\d{3,13}"]
 ,[,,"1\\d{3,12}|(?:2(?:1[467]|2[134-8]|5[2357]|6[1-46-8]|7[1-8]|8[124-7]|9[1458])|3(?:1[1-8]|3[23568]|4[5-7]|5[1378]|6[1-38]|8[3-68])|4(?:2[1-8]|35|63|7[1368]|8[2457])|5(?:12|2[1-8]|3[357]|4[147]|5[12578]|6[37])|6(?:13|2[1-47]|4[1-35-8]|5[468]|62)|7(?:2[1-8]|3[25]|4[13478]|5[68]|6[16-8]|7[1-6]|9[45]))\\d{3,10}","\\d{3,13}",,,"1234567890"]
@@ -489,10 +514,11 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"5(?:(?:0[1-9]|17)\\d{2,10}|[79]\\d{3,11})|720\\d{6,10}","\\d{5,13}",,,"50123"]
 ,,[,,"1(?:[12]2|33|44)","\\d{3}",,,"112"]
+,[,,"NA","NA"]
 ]
 ,"AU":[,[,,"[1-578]\\d{5,9}","\\d{6,10}"]
 ,[,,"[237]\\d{8}|8(?:[68]\\d{3}|7[0-6]\\d{2}|9(?:[02-9]\\d{2}|1(?:[0-57-9]\\d|6[0135-9])))\\d{4}","\\d{8,9}",,,"212345678"]
-,[,,"14(?:5\\d|71)\\d{5}|4(?:[0-2]\\d|3[0-57-9]|4[47-9]|5[0-37-9]|6[6-9]|7[07-9]|8[7-9])\\d{6}","\\d{9}",,,"412345678"]
+,[,,"14(?:5\\d|71)\\d{5}|4(?:[0-2]\\d|3[0-57-9]|4[46-9]|5[0-37-9]|6[6-9]|7[07-9]|8[7-9]|9[89])\\d{6}","\\d{9}",,,"412345678"]
 ,[,,"180(?:0\\d{3}|2)\\d{3}","\\d{7,10}",,,"1800123456"]
 ,[,,"19(?:0[0126]\\d{6}|[13-5]\\d{3}|[679]\\d{5})","\\d{6,10}",,,"1900123456"]
 ,[,,"13(?:00\\d{2})?\\d{4}","\\d{6,10}",,,"1300123456"]
@@ -519,6 +545,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,1,,[,,"1(?:3(?:\\d{4}|00\\d{6})|80(?:0\\d{6}|2\\d{3}))","\\d{6,10}",,,"1300123456"]
 ,[,,"NA","NA"]
 ,,[,,"000|112","\\d{3}",,,"112"]
+,[,,"NA","NA"]
 ]
 ,"AW":[,[,,"[25-9]\\d{6}","\\d{7}"]
 ,[,,"5(?:2\\d|8[1-9])\\d{4}","\\d{7}",,,"5212345"]
@@ -534,6 +561,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"100|911","\\d{3}",,,"911"]
+,[,,"NA","NA"]
 ]
 ,"AX":[,[,,"[135]\\d{5,9}|[27]\\d{4,9}|4\\d{5,10}|6\\d{7,8}|8\\d{6,9}","\\d{5,12}"]
 ,[,,"18[1-8]\\d{3,9}","\\d{6,12}",,,"1812345678"]
@@ -547,6 +575,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"10[1-9]\\d{3,7}|2(?:0(?:[16-8]\\d{3,7}|2[14-9]\\d{1,6}|[3-5]\\d{2,7}|9[0-7]\\d{1,6})|9\\d{4,8})|30[1-9]\\d{3,7}|7(?:1\\d{7}|3\\d{8}|5[03-9]\\d{2,7})","\\d{5,10}",,,"10112345"]
 ,,[,,"112","\\d{3}",,,"112"]
+,[,,"NA","NA"]
 ]
 ,"AZ":[,[,,"[1-9]\\d{7,8}","\\d{5,9}"]
 ,[,,"(?:1(?:(?:[28]\\d|9)\\d|02|1[0-589]|3[358]|4[013-79]|5[0-479]|6[02346-9]|7[0-24-8])|2(?:02\\d|1(?:2[0-8]|42|6)|2(?:2[0-79]|3[0-35]|42|[1-35-9]|)|3(?:3[0-58]|[0-24])|4(?:2[0124579]|[1468])|5(?:2[0124579]|5)|6(?:2\\d|3[0128]|[56])|79)|365?\\d|44\\d{2})\\d{5}","\\d{5,9}",,,"123123456"]
@@ -573,6 +602,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"1(?:0[123]|12)","\\d{3}",,,"101"]
+,[,,"NA","NA"]
 ]
 ,"BA":[,[,,"[3-689]\\d{7}","\\d{6,8}"]
 ,[,,"(?:[35]\\d|49)\\d{6}","\\d{6,8}",,,"30123456"]
@@ -588,6 +618,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"81\\d{6}","\\d{8}",,,"81123456"]
 ,,[,,"12[234]","\\d{3}",,,"122"]
+,[,,"NA","NA"]
 ]
 ,"BB":[,[,,"[2589]\\d{9}","\\d{7}(?:\\d{3})?"]
 ,[,,"246[2-9]\\d{6}","\\d{7}(?:\\d{3})?",,,"2462345678"]
@@ -601,9 +632,10 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,"246",[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"[235]11","\\d{3}",,,"211"]
+,[,,"NA","NA"]
 ]
 ,"BD":[,[,,"[2-79]\\d{5,9}|1\\d{9}|8[0-7]\\d{4,8}","\\d{6,10}"]
-,[,,"2(?:7\\d1|8(?:[026]1|[1379][1-5]|8[1-8])|9(?:0[0-2]|1[1-4]|3[3-5]|5[56]|6[67]|71|8[078]))\\d{4}|3(?:[6-8]1|(?:0[23]|[25][12]|82|416)\\d|(?:31|12?[5-7])\\d{2})\\d{3}|4(?:(?:02|[49]6|[68]1)|(?:0[13]|21\\d?|[23]2|[457][12]|6[28])\\d|(?:23|[39]1)\\d{2}|1\\d{3})\\d{3}|5(?:(?:[457-9]1|62)|(?:1\\d?|2[12]|3[1-3]|52)\\d|61{2})|6(?:[45]1|(?:11|2[15]|[39]1)\\d|(?:[06-8]1|62)\\d{2})|7(?:(?:32|91)|(?:02|31|[67][12])\\d|[458]1\\d{2}|21\\d{3})\\d{3}|8(?:(?:4[12]|[5-7]2|1\\d?)|(?:0|3[12]|[5-7]1|217)\\d)\\d{4}|9(?:[35]1|(?:[024]2|81)\\d|(?:1|[24]1)\\d{2})\\d{3}","\\d{6,9}",,,"27111234"]
+,[,,"2(?:7(?:1[0-267]|2[0-289]|3[0-29]|[46][01]|5[1-3]|7[017]|91)|8(?:0[125]|[139][1-6]|2[0157-9]|6[1-35]|7[1-5]|8[1-8])|9(?:0[0-2]|1[1-4]|2[568]|3[3-6]|5[5-7]|6[0167]|7[15]|8[016-8]))\\d{4}|3(?:[6-8]1|(?:0[23]|[25][12]|82|416)\\d|(?:31|12?[5-7])\\d{2})\\d{3}|4(?:(?:02|[49]6|[68]1)|(?:0[13]|21\\d?|[23]2|[457][12]|6[28])\\d|(?:23|[39]1)\\d{2}|1\\d{3})\\d{3}|5(?:(?:[457-9]1|62)|(?:1\\d?|2[12]|3[1-3]|52)\\d|61{2})|6(?:[45]1|(?:11|2[15]|[39]1)\\d|(?:[06-8]1|62)\\d{2})|7(?:(?:32|91)|(?:02|31|[67][12])\\d|[458]1\\d{2}|21\\d{3})\\d{3}|8(?:(?:4[12]|[5-7]2|1\\d?)|(?:0|3[12]|[5-7]1|217)\\d)\\d{4}|9(?:[35]1|(?:[024]2|81)\\d|(?:1|[24]1)\\d{2})\\d{3}","\\d{6,9}",,,"27111234"]
 ,[,,"(?:1[13-9]\\d|(?:3[78]|44)[02-9]|6(?:44|6[02-9]))\\d{7}","\\d{10}",,,"1812345678"]
 ,[,,"80[03]\\d{7}","\\d{10}",,,"8001234567"]
 ,[,,"NA","NA"]
@@ -622,7 +654,8 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,[,,"NA","NA"]
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
-,,[,,"999","\\d{3}",,,"999"]
+,,[,,"10[0-2]|999","\\d{3}",,,"999"]
+,[,,"NA","NA"]
 ]
 ,"BE":[,[,,"[1-9]\\d{7,8}","\\d{8,9}"]
 ,[,,"(?:1[0-69]|[23][2-8]|[49][23]|5\\d|6[013-57-9]|7[18])\\d{6}|8(?:0[1-9]|[1-69]\\d)\\d{5}","\\d{8}",,,"12345678"]
@@ -645,6 +678,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"1(?:0[01]|12)","\\d{3}",,,"112"]
+,[,,"NA","NA"]
 ]
 ,"BF":[,[,,"[2457]\\d{7}","\\d{8}"]
 ,[,,"(?:20(?:49|5[23]|9[016-9])|40(?:4[569]|55|7[0179])|50[34]\\d)\\d{4}","\\d{8}",,,"20491234"]
@@ -660,6 +694,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"1[78]","\\d{2}",,,"17"]
+,[,,"NA","NA"]
 ]
 ,"BG":[,[,,"[23567]\\d{5,7}|[489]\\d{6,8}","\\d{5,9}"]
 ,[,,"2(?:[0-8]\\d{5,6}|9\\d{4,6})|(?:[36]\\d|5[1-9]|8[1-6]|9[1-7])\\d{5,6}|(?:4(?:[124-7]\\d|3[1-6])|7(?:0[1-9]|[1-9]\\d))\\d{4,5}","\\d{5,8}",,,"2123456"]
@@ -688,10 +723,11 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"1(?:12|50|6[06])","\\d{3}",,,"112"]
+,[,,"NA","NA"]
 ]
 ,"BH":[,[,,"[136-9]\\d{7}","\\d{8}"]
 ,[,,"(?:1(?:3[3-6]|6[0156]|7\\d)\\d|6(?:1[16]\\d|6(?:0\\d|3[12]|44)|9(?:69|9[6-9]))|77\\d{2})\\d{4}","\\d{8}",,,"17001234"]
-,[,,"(?:3(?:[23469]\\d|77|8[348])\\d|6(?:1[16]\\d|6(?:[06]\\d3[03-9]|44|)|9(?:69|9[6-9]))|77\\d{2})\\d{4}","\\d{8}",,,"36001234"]
+,[,,"(?:3(?:[23469]\\d|77|8[348])\\d|6(?:1[16]\\d|6(?:[06]\\d|3[03-9]|44)|9(?:69|9[6-9]))|77\\d{2})\\d{4}","\\d{8}",,,"36001234"]
 ,[,,"80\\d{6}","\\d{8}",,,"80123456"]
 ,[,,"(?:87|9[014578])\\d{6}","\\d{8}",,,"90123456"]
 ,[,,"84\\d{6}","\\d{8}",,,"84123456"]
@@ -703,6 +739,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"999","\\d{3}",,,"999"]
+,[,,"NA","NA"]
 ]
 ,"BI":[,[,,"[27]\\d{7}","\\d{8}"]
 ,[,,"22(?:2[0-7]|[3-5]0)\\d{4}","\\d{8}",,,"22201234"]
@@ -718,6 +755,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"11[78]","\\d{3}",,,"117"]
+,[,,"NA","NA"]
 ]
 ,"BJ":[,[,,"[2689]\\d{7}|7\\d{3}","\\d{4,8}"]
 ,[,,"2(?:02|1[037]|2[45]|3[68])\\d{5}","\\d{8}",,,"20211234"]
@@ -733,6 +771,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"11[78]","\\d{3}",,,"117"]
+,[,,"NA","NA"]
 ]
 ,"BL":[,[,,"[56]\\d{8}","\\d{9}"]
 ,[,,"590(?:2[7-9]|5[12]|87)\\d{4}","\\d{9}",,,"590271234"]
@@ -746,6 +785,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"18","\\d{2}",,,"18"]
+,[,,"NA","NA"]
 ]
 ,"BM":[,[,,"[4589]\\d{9}","\\d{7}(?:\\d{3})?"]
 ,[,,"441(?:2(?:02|23|61|[3479]\\d)|[46]\\d{2}|5(?:4\\d|60|89)|824)\\d{4}","\\d{7}(?:\\d{3})?",,,"4412345678"]
@@ -759,6 +799,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,"441",[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"911","\\d{3}",,,"911"]
+,[,,"NA","NA"]
 ]
 ,"BN":[,[,,"[2-578]\\d{6}","\\d{7}"]
 ,[,,"[2-5]\\d{6}","\\d{7}",,,"2345678"]
@@ -774,6 +815,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"99[135]","\\d{3}",,,"991"]
+,[,,"NA","NA"]
 ]
 ,"BO":[,[,,"[23467]\\d{7}","\\d{7,8}"]
 ,[,,"(?:2(?:2\\d{2}|5(?:11|[258]\\d|9[67])|6(?:12|2\\d|9[34])|8(?:2[34]|39|62))|3(?:3\\d{2}|4(?:6\\d|8[24])|8(?:25|42|5[257]|86|9[25])|9(?:2\\d|3[234]|4[248]|5[24]|6[2-6]|7\\d))|4(?:4\\d{2}|6(?:11|[24689]\\d|72)))\\d{4}","\\d{7,8}",,,"22123456"]
@@ -792,6 +834,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"11[089]","\\d{3}",,,"110"]
+,[,,"NA","NA"]
 ]
 ,"BR":[,[,,"[1-9]\\d{7,9}","\\d{8,10}"]
 ,[,,"1[1-9][2-5]\\d{7}|(?:[4689][1-9]|2[12478]|3[1-578]|5[13-5]|7[13-579])[2-5]\\d{7}","\\d{8,10}",,,"1123456789"]
@@ -812,6 +855,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"(?:400\\d|3003)\\d{4}","\\d{8}",,,"40041234"]
 ,[,,"NA","NA"]
 ,,[,,"1(?:12|28|9[023])|911","\\d{3}",,,"190"]
+,[,,"NA","NA"]
 ]
 ,"BS":[,[,,"[2589]\\d{9}","\\d{7}(?:\\d{3})?"]
 ,[,,"242(?:3(?:02|[236][1-9]|4[0-24-9]|5[0-68]|7[3467]|8[0-4]|9[2-467])|461|502|6(?:12|7[67]|8[78]|9[89])|702)\\d{4}","\\d{7}(?:\\d{3})?",,,"2423456789"]
@@ -825,6 +869,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,"242",[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"91[19]","\\d{3}",,,"911"]
+,[,,"NA","NA"]
 ]
 ,"BT":[,[,,"[1-8]\\d{6,7}","\\d{6,8}"]
 ,[,,"(?:2[3-6]|[34][5-7]|5[236]|6[2-46]|7[246]|8[2-4])\\d{5}","\\d{6,7}",,,"2345678"]
@@ -843,6 +888,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"11[023]","\\d{3}",,,"113"]
+,[,,"NA","NA"]
 ]
 ,"BW":[,[,,"[2-79]\\d{6,7}","\\d{7,8}"]
 ,[,,"(?:2(?:4[0-48]|6[0-24]|9[0578])|3(?:1[0235-9]|55|6\\d|7[01]|9[0-57])|4(?:6[03]|7[1267]|9[0-5])|5(?:3[0389]|4[0489]|7[1-47]|88|9[0-49])|6(?:2[1-35]|5[149]|8[067]))\\d{4}","\\d{7}",,,"2401234"]
@@ -863,6 +909,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"99[789]","\\d{3}",,,"999"]
+,[,,"NA","NA"]
 ]
 ,"BY":[,[,,"[12-4]\\d{8}|[89]\\d{9,10}","\\d{7,11}"]
 ,[,,"(?:1(?:5(?:1[1-5]|2\\d|6[1-4]|9[1-7])|6(?:[235]\\d|4[1-7])|7\\d{2})|2(?:1(?:[246]\\d|3[0-35-9]|5[1-9])|2(?:[235]\\d|4[0-8])|3(?:2\\d|3[02-79]|4[024-7]|5[0-7])))\\d{5}","\\d{7,9}",,,"152450911"]
@@ -883,6 +930,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"8(?:[01]|20)\\d{8}|902\\d{7}","\\d{10,11}",,,"82012345678"]
 ,[,,"NA","NA"]
 ,,[,,"1(?:0[123]|12)","\\d{3}",,,"112"]
+,[,,"NA","NA"]
 ]
 ,"BZ":[,[,,"[2-8]\\d{6}|0\\d{10}","\\d{7}(?:\\d{4})?"]
 ,[,,"[234578][02]\\d{5}","\\d{7}",,,"2221234"]
@@ -901,6 +949,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,1,[,,"9(?:0|11)","\\d{2,3}",,,"911"]
+,[,,"NA","NA"]
 ]
 ,"CA":[,[,,"[2-9]\\d{9}|3\\d{6}","\\d{7}(?:\\d{3})?"]
 ,[,,"(?:2(?:04|26|[48]9|50)|3(?:06|43)|4(?:03|1[68]|38|5[06])|5(?:0[06]|1[49]|79|8[17])|6(?:0[04]|13|47)|7(?:0[059]|80|78)|8(?:[06]7|19|)|90[25])[2-9]\\d{6}|310\\d{4}","\\d{7}(?:\\d{3})?",,,"2042345678"]
@@ -914,6 +963,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"112|911","\\d{3}",,,"911"]
+,[,,"NA","NA"]
 ]
 ,"CC":[,[,,"[1458]\\d{5,9}","\\d{6,10}"]
 ,[,,"89162\\d{4}","\\d{8,9}",,,"891621234"]
@@ -927,6 +977,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"000|112","\\d{3}",,,"112"]
+,[,,"NA","NA"]
 ]
 ,"CD":[,[,,"[89]\\d{8}|[1-6]\\d{6}","\\d{7,9}"]
 ,[,,"[1-6]\\d{6}","\\d{7}",,,"1234567"]
@@ -945,6 +996,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"NA","NA"]
+,[,,"NA","NA"]
 ]
 ,"CF":[,[,,"[278]\\d{7}","\\d{8}"]
 ,[,,"2[12]\\d{6}","\\d{8}",,,"21612345"]
@@ -960,6 +1012,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"NA","NA"]
+,[,,"NA","NA"]
 ]
 ,"CG":[,[,,"[028]\\d{8}","\\d{9}"]
 ,[,,"222[1-589]\\d{5}","\\d{9}",,,"222123456"]
@@ -978,8 +1031,9 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,1,[,,"NA","NA"]
+,[,,"NA","NA"]
 ]
-,"CH":[,[,,"[2-9]\\d{8}","\\d{9}"]
+,"CH":[,[,,"[2-9]\\d{8}|860\\d{9}","\\d{9}(?:\\d{3})?"]
 ,[,,"(?:2[12467]|3[1-4]|4[134]|5[12568]|6[12]|[7-9]1)\\d{7}","\\d{9}",,,"212345678"]
 ,[,,"7[46-9]\\d{7}","\\d{9}",,,"741234567"]
 ,[,,"800\\d{6}","\\d{9}",,,"800123456"]
@@ -991,15 +1045,18 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,"0$1","",0]
 ,[,"([89]\\d{2})(\\d{3})(\\d{3})","$1 $2 $3",["8[047]|90"]
 ,"0$1","",0]
+,[,"(\\d{3})(\\d{2})(\\d{3})(\\d{2})(\\d{2})","$1 $2 $3 $4 $5",["860"]
+,"0$1","",0]
 ]
 ,,[,,"NA","NA"]
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"1(?:1[278]|44)","\\d{3}",,,"112"]
+,[,,"860\\d{9}","\\d{12}",,,"860123456789"]
 ]
 ,"CI":[,[,,"[02-6]\\d{7}","\\d{8}"]
 ,[,,"(?:2(?:0[023]|1[02357]|[23][045]|4[03-5])|3(?:0[06]|1[069]|[2-4][07]|5[09]|6[08]))\\d{5}","\\d{8}",,,"21234567"]
-,[,,"(?:0[1-9]|4[04-9]|5[07]|6[0567])\\d{6}","\\d{8}",,,"01234567"]
+,[,,"(?:0[1-9]|4[04-9]|5[057-9]|6[05679])\\d{6}","\\d{8}",,,"01234567"]
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
@@ -1011,6 +1068,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,1,[,,"1(?:1[01]|[78]0)","\\d{3}",,,"110"]
+,[,,"NA","NA"]
 ]
 ,"CK":[,[,,"[2-57]\\d{4}","\\d{5}"]
 ,[,,"(?:2\\d|3[13-7]|4[1-5])\\d{3}","\\d{5}",,,"21234"]
@@ -1026,6 +1084,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"99[689]","\\d{3}",,,"998"]
+,[,,"NA","NA"]
 ]
 ,"CL":[,[,,"(?:[2-9]|600|123)\\d{7,8}","\\d{6,11}"]
 ,[,,"(?:2|32|41)\\d{7}|(?:3[3-5]|4[235]|5[1-3578]|6[13-57]|7[1-35])\\d{6,7}","\\d{6,9}",,,"21234567"]
@@ -1054,6 +1113,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"600\\d{7,8}","\\d{10,11}",,,"6001234567"]
 ,[,,"NA","NA"]
 ,,[,,"13[123]","\\d{3}",,,"133"]
+,[,,"NA","NA"]
 ]
 ,"CM":[,[,,"[237-9]\\d{7}","\\d{8}"]
 ,[,,"(?:22|33)\\d{6}","\\d{8}",,,"22123456"]
@@ -1072,15 +1132,16 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"1?1[37]","\\d{2,3}",,,"113"]
+,[,,"NA","NA"]
 ]
 ,"CN":[,[,,"[1-79]\\d{7,11}|8[0-357-9]\\d{6,9}","\\d{4,12}"]
 ,[,,"21\\d{8,10}|(?:10|2[02-57-9]|3(?:11|7[179])|4(?:[15]1|3[12])|5(?:1\\d|2[37]|3[12]|7[13-79]|9[15])|7(?:31|5[457]|6[09]|91)|898)\\d{8}|(?:3(?:1[02-9]|35|49|5\\d|7[02-68]|9[1-68])|4(?:1[02-9]|2[179]|3[3-9]|5[2-9]|6[4789]|7\\d|8[23])|5(?:3[03-9]|4[36]|5\\d|6[1-6]|7[028]|80|9[2-46-9])|6(?:3[1-5]|6[0238]|9[12])|7(?:01|[17]\\d|2[248]|3[04-9]|4[3-6]|5[0-3689]|6[2368]|9[02-9])|8(?:1[236-8]|2[5-7]|[37]\\d|5[1-9]|8[3678]|9[1-7])|9(?:0[1-3689]|1[1-79]|[379]\\d|4[13]|5[1-5]))\\d{7}|80(?:29|6[03578]|7[018]|81)\\d{4}","\\d{4,12}",,,"1012345678"]
 ,[,,"1(?:3\\d|4[57]|5[0-35-9]|8[0235-9])\\d{8}","\\d{11}",,,"13123456789"]
 ,[,,"(?:10)?800\\d{7}","\\d{10,12}",,,"8001234567"]
 ,[,,"16[08]\\d{5}","\\d{8}",,,"16812345"]
+,[,,"400\\d{7}","\\d{10}",,,"4001234567"]
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
-,[,,"400\\d{7}","\\d{10}",,,"4001234567"]
 ,"CN",86,"00","0",,,"0",,,,[[,"(80\\d{2})(\\d{4})","$1 $2",["80[2678]"]
 ,"0$1","",1]
 ,[,"([48]00)(\\d{3})(\\d{4})","$1 $2 $3",["[48]00"]
@@ -1121,6 +1182,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"(?:4|(?:10)?8)00\\d{7}","\\d{10,12}",,,"4001234567"]
 ,[,,"NA","NA"]
 ,,[,,"1(?:1[09]|20)","\\d{3}",,,"119"]
+,[,,"NA","NA"]
 ]
 ,"CO":[,[,,"(?:[13]\\d{0,3}|[24-8])\\d{7}","\\d{7,11}"]
 ,[,,"[124-8][2-9]\\d{6}","\\d{8}",,,"12345678"]
@@ -1148,16 +1210,17 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"1(?:1[29]|23|32|56)","\\d{3}",,,"112"]
+,[,,"NA","NA"]
 ]
-,"CR":[,[,,"[24589]\\d{7,9}","\\d{8,10}"]
+,"CR":[,[,,"[24-9]\\d{7,9}","\\d{8,10}"]
 ,[,,"2[24-7]\\d{6}","\\d{8}",,,"22123456"]
-,[,,"57[01]\\d[01]\\d{3}|8[36789]\\d{6}","\\d{8}",,,"83123456"]
+,[,,"5(?:0[0-4]|7[01])\\d{5}|[67][01]\\d{6}|8[36-9]\\d{6}","\\d{8}",,,"83123456"]
 ,[,,"800\\d{7}","\\d{10}",,,"8001234567"]
 ,[,,"90[059]\\d{7}","\\d{10}",,,"9001234567"]
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
-,[,,"40(?:00\\d{4}|10[0-3]\\d{3}|2(?:00\\d|900)\\d{2})","\\d{8}",,,"40001234"]
-,"CR",506,"00",,,,"(1900)",,,,[[,"(\\d{4})(\\d{4})","$1 $2",["[245]|8[3-9]"]
+,[,,"40(?:00\\d{4}|10[0-3]\\d{3}|2(?:00\\d|900)\\d{2}|3[01]\\d{4}|5\\d{5})","\\d{8}",,,"40001234"]
+,"CR",506,"00",,,,"(19(?:0[0-2]|19|77))",,,,[[,"(\\d{4})(\\d{4})","$1 $2",["[24-7]|8[3-9]"]
 ,"","$CC $1",0]
 ,[,"(\\d{3})(\\d{3})(\\d{4})","$1-$2-$3",["[89]0"]
 ,"","$CC $1",0]
@@ -1166,6 +1229,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"112|911","\\d{3}",,,"911"]
+,[,,"NA","NA"]
 ]
 ,"CU":[,[,,"[2-57]\\d{5,7}","\\d{4,8}"]
 ,[,,"2[1-4]\\d{5,6}|3(?:1\\d{6}|[23]\\d{4,6})|4(?:[125]\\d{5,6}|[36]\\d{6}|[78]\\d{4,6})|7\\d{6,7}","\\d{4,8}",,,"71234567"]
@@ -1186,6 +1250,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"10[56]","\\d{3}",,,"106"]
+,[,,"NA","NA"]
 ]
 ,"CV":[,[,,"[259]\\d{6}","\\d{7}"]
 ,[,,"2(?:2[1-7]|3[0-8]|4[12]|5[1256]|6\\d|7[1-3]|8[1-5])\\d{4}","\\d{7}",,,"2211234"]
@@ -1201,6 +1266,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"13[012]","\\d{3}",,,"132"]
+,[,,"NA","NA"]
 ]
 ,"CY":[,[,,"[257-9]\\d{7}","\\d{8}"]
 ,[,,"2[2-6]\\d{6}","\\d{8}",,,"22345678"]
@@ -1216,6 +1282,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"(?:50|77)\\d{6}","\\d{8}",,,"77123456"]
 ,,[,,"1(?:12|99)","\\d{3}",,,"112"]
+,[,,"NA","NA"]
 ]
 ,"CX":[,[,,"[1458]\\d{5,9}","\\d{6,10}"]
 ,[,,"89164\\d{4}","\\d{8,9}",,,"891641234"]
@@ -1229,6 +1296,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"000|112","\\d{3}",,,"112"]
+,[,,"NA","NA"]
 ]
 ,"CZ":[,[,,"[2-9]\\d{8}","\\d{9}"]
 ,[,,"2\\d{8}|(?:3[1257-9]|4[16-9]|5[13-9])\\d{7}","\\d{9}",,,"212345678"]
@@ -1244,10 +1312,11 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"9(?:5[056]|7[234])\\d{6}","\\d{9}",,,"972123456"]
 ,,[,,"1(?:12|5[058])","\\d{3}",,,"112"]
+,[,,"NA","NA"]
 ]
 ,"DE":[,[,,"[1-35-9]\\d{3,14}|4(?:[0-8]\\d{4,12}|9(?:4[1-8]|[0-35-7]\\d)\\d{2,7})","\\d{2,15}"]
 ,[,,"[246]\\d{5,13}|3(?:[03-9]\\d{4,13}|2\\d{9})|5(?:0[2-8]|[1256]\\d|[38][0-8]|4\\d{0,2}|[79][0-7])\\d{3,11}|7(?:0[2-8]|[1-9]\\d)\\d{3,10}|8(?:0[2-9]|[1-9]\\d)\\d{3,10}|9(?:0[6-9]|[1-9]\\d)\\d{3,10}","\\d{2,15}",,,"30123456"]
-,[,,"1(?:5\\d{9}|7(?:[0-57-9]|6\\d)\\d{7}|6(?:[02]\\d{7,8}|3\\d{7}))","\\d{10,11}",,,"15123456789"]
+,[,,"1(?:5[0-2579]\\d{8}|6[023]\\d{7,8}|7(?:[0-57-9]\\d?|6\\d)\\d{7})","\\d{10,11}",,,"15123456789"]
 ,[,,"800\\d{7,9}","\\d{10,12}",,,"8001234567"]
 ,[,,"900(?:[135]\\d{6}|9\\d{7})","\\d{10,11}",,,"9001234567"]
 ,[,,"180\\d{5,11}","\\d{8,14}",,,"18012345"]
@@ -1272,6 +1341,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"11[02]","\\d{3}",,,"112"]
+,[,,"NA","NA"]
 ]
 ,"DJ":[,[,,"[1-8]\\d{5}","\\d{6}"]
 ,[,,"(?:1[05]|[2-5]\\d)\\d{4}","\\d{6}",,,"251234"]
@@ -1287,6 +1357,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"1[78]","\\d{2}",,,"17"]
+,[,,"NA","NA"]
 ]
 ,"DK":[,[,,"[2-9]\\d{7}","\\d{8}"]
 ,[,,"(?:[2-7]\\d|8[126-9]|9[6-9])\\d{6}","\\d{8}",,,"32123456"]
@@ -1302,6 +1373,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"112","\\d{3}",,,"112"]
+,[,,"NA","NA"]
 ]
 ,"DM":[,[,,"[57-9]\\d{9}","\\d{7}(?:\\d{3})?"]
 ,[,,"767(?:2(?:55|66)|4(?:2[01]|4[0-25-9])|50[0-4])\\d{4}","\\d{7}(?:\\d{3})?",,,"7674201234"]
@@ -1315,6 +1387,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,"767",[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"333|9(?:11|99)","\\d{3}",,,"999"]
+,[,,"NA","NA"]
 ]
 ,"DO":[,[,,"[589]\\d{9}","\\d{7}(?:\\d{3})?"]
 ,[,,"8(?:[04]9[2-9]\\d{6}|29(?:2(?:[0-59]\\d|6[04-9]|7[0-27]|8[0237-9])|3(?:[0-35-9]\\d|4[7-9])|[45]\\d{2}|6(?:[0-27-9]\\d|[3-5][1-9]|6[0135-8])|7(?:0[013-9]|[1-37]\\d|4[1-35689]|5[1-4689]|6[1-57-9]|8[1-79]|9[1-8])|8(?:0[146-9]|1[0-48]|[248]\\d|3[1-79]|5[01589]|6[013-68]|7[124-8]|9[0-8])|9(?:[0-24]\\d|3[02-46-9]|5[0-79]|60|7[0169]|8[57-9]|9[02-9]))\\d{4})","\\d{7}(?:\\d{3})?",,,"8092345678"]
@@ -1328,6 +1401,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,"8[024]9",[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"112|911","\\d{3}",,,"911"]
+,[,,"NA","NA"]
 ]
 ,"DZ":[,[,,"(?:[1-4]|[5-9]\\d)\\d{7}","\\d{8,9}"]
 ,[,,"(?:1\\d|2[014-79]|3[0-8]|4[0135689])\\d{6}|9619\\d{5}","\\d{8,9}",,,"12345678"]
@@ -1348,6 +1422,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"1[47]","\\d{2}",,,"17"]
+,[,,"NA","NA"]
 ]
 ,"EC":[,[,,"[2-9]\\d{7}|1\\d{9,10}","\\d{7,11}"]
 ,[,,"[2-7][2-7]\\d{6}","\\d{7,8}",,,"22123456"]
@@ -1375,6 +1450,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"1(?:0[12]|12)|911","\\d{3}",,,"911"]
+,[,,"NA","NA"]
 ]
 ,"EE":[,[,,"[3-9]\\d{6,7}|800\\d{6,7}","\\d{7,10}"]
 ,[,,"(?:3[23589]|4(?:0\\d|[3-8])|6\\d|7[1-9]|88)\\d{5}","\\d{7,8}",,,"3212345"]
@@ -1397,6 +1473,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"800[2-9]\\d{3}","\\d{7}",,,"8002123"]
 ,[,,"NA","NA"]
 ,,[,,"11[02]","\\d{3}",,,"112"]
+,[,,"NA","NA"]
 ]
 ,"EG":[,[,,"1\\d{4,9}|[2456]\\d{8}|3\\d{7}|[89]\\d{8,9}","\\d{5,10}"]
 ,[,,"(?:1[35][23]|2[23]\\d|3\\d|4(?:0[2-4]|[578][23]|64)|5(?:0[234]|[57][23])|6[24-689]3|8(?:[28][2-4]|42|6[23])|9(?:[25]2|3[24]|6[23]|7[2-4]))\\d{6}|1[69]\\d{3}","\\d{5,9}",,,"234567890"]
@@ -1419,6 +1496,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"1(?:2[23]|80)","\\d{3}",,,"122"]
+,[,,"NA","NA"]
 ]
 ,"ER":[,[,,"[178]\\d{6}","\\d{6,7}"]
 ,[,,"1(?:1[12568]|20|40|55|6[146])\\d{4}|8\\d{6}","\\d{6,7}",,,"8370362"]
@@ -1434,6 +1512,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"NA","NA"]
+,[,,"NA","NA"]
 ]
 ,"ES":[,[,,"[5-9]\\d{8}","\\d{9}"]
 ,[,,"(?:8(?:[13]0|[28][0-8]|[47][1-9]|5[01346-9]|6[0457-9])|9(?:[1238][0-8]|[47][1-9]|[56]\\d))\\d{6}","\\d{9}",,,"810123456"]
@@ -1449,6 +1528,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"51\\d{7}","\\d{9}",,,"511234567"]
 ,,[,,"0(?:61|8[05]|9[12])|112","\\d{3}",,,"112"]
+,[,,"NA","NA"]
 ]
 ,"ET":[,[,,"[1-59]\\d{8}","\\d{7,9}"]
 ,[,,"(?:11(?:1(?:1[124]|2[2-57]|3[1-5]|5[5-8]|8[6-8])|2(?:13|3[6-8]|5[89]|7[05-9]|8[2-6])|3(?:2[01]|3[0-289]|4[1289]|7[1-4]|87)|4(?:1[69]|3[2-49]|4[0-23]|6[5-8])|5(?:1[57]|44|5[0-4])|6(?:18|2[69]|4[5-7]|5[1-5]|6[0-59]|8[015-8]))|2(?:2(?:11[1-9]|22[0-7]|33\\d|44[1467]|66[1-68])|5(?:11[124-6]|33[2-8]|44[1467]|55[14]|66[1-3679]|77[124-79]|880))|3(?:3(?:11[0-46-8]|22[0-6]|33[0134689]|44[04]|55[0-6]|66[01467])|4(?:44[0-8]|55[0-69]|66[0-3]|77[1-5]))|4(?:6(?:22[0-24-7]|33[1-5]|44[13-69]|55[14-689]|660|88[1-4])|7(?:11[1-9]|22[1-9]|33[13-7]|44[13-6]|55[1-689]))|5(?:7(?:227|55[05]|(?:66|77)[14-8])|8(?:11[149]|22[013-79]|33[0-68]|44[013-8]|550|66[1-5]|77\\d)))\\d{4}","\\d{7,9}",,,"111112345"]
@@ -1464,6 +1544,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"9(?:11?|[23]|9[17])","\\d{2,3}",,,"991"]
+,[,,"NA","NA"]
 ]
 ,"FI":[,[,,"1\\d{4,11}|[2-9]\\d{4,10}","\\d{5,12}"]
 ,[,,"1(?:[3569][1-8]\\d{3,9}|[47]\\d{5,10})|2[1-8]\\d{3,9}|3(?:[1-8]\\d{3,9}|9\\d{4,8})|[5689][1-8]\\d{3,9}","\\d{5,12}",,,"1312345678"]
@@ -1484,6 +1565,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,1,,[,,"NA","NA"]
 ,[,,"10[1-9]\\d{3,7}|2(?:0(?:[16-8]\\d{3,7}|2[14-9]\\d{1,6}|[3-5]\\d{2,7}|9[0-7]\\d{1,6})|9\\d{4,8})|30[1-9]\\d{3,7}|7(?:1\\d{7}|3\\d{8}|5[03-9]\\d{2,7})","\\d{5,10}",,,"10112345"]
 ,,[,,"112","\\d{3}",,,"112"]
+,[,,"NA","NA"]
 ]
 ,"FJ":[,[,,"[36-9]\\d{6}|0\\d{10}","\\d{7}(?:\\d{4})?"]
 ,[,,"(?:3[0-5]|6[25-7]|8[58])\\d{5}","\\d{7}",,,"3212345"]
@@ -1502,6 +1584,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,1,[,,"91[17]","\\d{3}",,,"911"]
+,[,,"NA","NA"]
 ]
 ,"FK":[,[,,"[2-7]\\d{4}","\\d{5}"]
 ,[,,"[2-47]\\d{4}","\\d{5}",,,"31234"]
@@ -1515,6 +1598,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"999","\\d{3}",,,"999"]
+,[,,"NA","NA"]
 ]
 ,"FM":[,[,,"[39]\\d{6}","\\d{7}"]
 ,[,,"3[2357]0[1-9]\\d{3}|9[2-6]\\d{5}","\\d{7}",,,"3201234"]
@@ -1530,6 +1614,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"911|320221","\\d{3}(?:\\d{3})?",,,"911"]
+,[,,"NA","NA"]
 ]
 ,"FO":[,[,,"[2-9]\\d{5}","\\d{6}"]
 ,[,,"(?:20|[3-4]\\d|8[19])\\d{4}","\\d{6}",,,"201234"]
@@ -1545,6 +1630,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"112","\\d{3}",,,"112"]
+,[,,"NA","NA"]
 ]
 ,"FR":[,[,,"[124-9]\\d{8}|3\\d{3}(?:\\d{5})?","\\d{4}(?:\\d{5})?"]
 ,[,,"[1-5]\\d{8}","\\d{9}",,,"123456789"]
@@ -1563,17 +1649,18 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"3\\d{3}","\\d{4}",,,"3123"]
 ,[,,"NA","NA"]
 ,,[,,"1(?:[578]|12)","\\d{2,3}",,,"112"]
+,[,,"NA","NA"]
 ]
-,"GA":[,[,,"[4-9]\\d{5}|0\\d{7}","\\d{6,8}"]
-,[,,"(?:4(?:[04-8]\\d|2[04])|(?:5[04-689]|6[024-9]|7\\d|8[236]|9[02368])\\d)\\d{3}","\\d{6}",,,"441234"]
+,"GA":[,[,,"[12]\\d{6}|0\\d{7}","\\d{6,8}"]
+,[,,"(?:1(?:4[4-8]|7\\d)|2(?:4[02]|5[04-689]|6[024-79]|8[236]|9[02368]))\\d{4}","\\d{6,7}",,,"1441234"]
 ,[,,"0(?:5(?:0[89]|3[0-4]|8[0-26]|9[238])|6(?:0[3-7]|1[01]|2[0-7]|6[0-589]|71|83|9[57])|7(?:1[2-5]|2[89]|3[35-9]|4[01]|5[0-347-9]|[67]\\d|8[457-9]|9[0146]))\\d{4}","\\d{8}",,,"06031234"]
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
-,"GA",241,"00",,,,,,,,[[,"(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3",["[4-9]"]
-,"","",0]
+,"GA",241,"00","0",,,"0",,,,[[,"(\\d)(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",["[12]"]
+,"0$1","",0]
 ,[,"(0\\d)(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",["0"]
 ,"","",0]
 ]
@@ -1581,6 +1668,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,1,[,,"1730|18|13\\d{2}","\\d{2,4}",,,"1730"]
+,[,,"NA","NA"]
 ]
 ,"GB":[,[,,"\\d{7,10}","\\d{4,10}"]
 ,[,,"2(?:0[01378]|3[0189]|4[017]|8[0-46-9]|9[012])\\d{7}|1(?:(?:1(?:3[0-48]|[46][0-4]|5[012789]|7[0-39]|8[01349])|21[0-7]|31[0-8]|[459]1\\d|61[0-46-9]))\\d{6}|1(?:2(?:0[024-9]|2[3-9]|3[3-79]|4[1-689]|[58][02-9]|6[0-4789]|7[013-9]|9\\d)|3(?:0\\d|[25][02-9]|3[02-579]|[468][0-46-9]|7[1235679]|9[24578])|4(?:0[03-9]|[28][02-5789]|[37]\\d|4[02-69]|5[0-8]|[69][0-79])|5(?:0[1235-9]|2[024-9]|3[015689]|4[02-9]|5[03-9]|6\\d|7[0-35-9]|8[0-468]|9[0-5789])|6(?:0[034689]|2[0-35689]|[38][013-9]|4[1-467]|5[0-69]|6[13-9]|7[0-8]|9[0124578])|7(?:0[0246-9]|2\\d|3[023678]|4[03-9]|5[0-46-9]|6[013-9]|7[0-35-9]|8[024-9]|9[02-9])|8(?:0[35-9]|2[1-5789]|3[02-578]|4[0-578]|5[124-9]|6[2-69]|7\\d|8[02-9]|9[02569])|9(?:0[02-589]|2[02-689]|3[1-5789]|4[2-9]|5[0-579]|6[234789]|7[0124578]|8\\d|9[2-57]))\\d{6}|1(?:2(?:0(?:46[1-4]|87[2-9])|545[1-79]|76(?:2\\d|3[1-8]|6[1-6])|9(?:7(?:2[0-4]|3[2-5])|8(?:2[2-8]|7[0-4789]|8[345])))|3(?:638[2-5]|647[23]|8(?:47[04-9]|64[015789]))|4(?:044[1-7]|20(?:2[23]|8\\d)|6(?:0(?:30|5[2-57]|6[1-8]|7[2-8])|140)|8(?:052|87[123]))|5(?:24(?:3[2-79]|6\\d)|276\\d|6(?:26[06-9]|686))|6(?:06(?:4\\d|7[4-79])|295[567]|35[34]\\d|47(?:24|61)|59(?:5[08]|6[67]|74)|955[0-4])|7(?:26(?:6[13-9]|7[0-7])|442\\d|50(?:2[0-3]|[3-68]2|76))|8(?:27[56]\\d|37(?:5[2-5]|8[239])|84(?:3[2-58]))|9(?:0(?:0(?:6[1-8]|85)|52\\d)|3583|4(?:66[1-8]|9(?:2[01]|81))|63(?:23|3[1-4])|9561))\\d{3}|176888[234678]\\d{2}|16977[23]\\d{3}","\\d{4,10}",,,"1212345678"]
@@ -1615,6 +1703,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,1,,[,,"NA","NA"]
 ,[,,"(?:3[0347]|55)\\d{8}","\\d{10}",,,"5512345678"]
 ,,[,,"112|999","\\d{3}",,,"112"]
+,[,,"NA","NA"]
 ]
 ,"GD":[,[,,"[4589]\\d{9}","\\d{7}(?:\\d{3})?"]
 ,[,,"473(?:2(?:3[0-2]|69)|3(?:2[89]|86)|4(?:[06]8|3[5-9]|4[0-49]|5[5-79]|68|73|90)|63[68]|7(?:58|84)|938)\\d{4}","\\d{7}(?:\\d{3})?",,,"4732691234"]
@@ -1628,6 +1717,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,"473",[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"911","\\d{3}",,,"911"]
+,[,,"NA","NA"]
 ]
 ,"GE":[,[,,"[3458]\\d{8}","\\d{6,9}"]
 ,[,,"(?:3(?:[256]\\d|4[124-9]|7[0-4])|4(?:1\\d|2[2-7]|3[1-79]|4[2-8]|7[239]|9[1-7]))\\d{6}","\\d{6,9}",,,"322123456"]
@@ -1646,6 +1736,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"0(?:11|22|33)|1(?:1[123]|22)","\\d{3}",,,"112"]
+,[,,"NA","NA"]
 ]
 ,"GF":[,[,,"[56]\\d{8}","\\d{9}"]
 ,[,,"594(?:10|2[012457-9]|3[0-57-9]|4[3-9]|5[7-9]|6[0-3]|9[014])\\d{4}","\\d{9}",,,"594101234"]
@@ -1661,6 +1752,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"1[578]","\\d{2}",,,"15"]
+,[,,"NA","NA"]
 ]
 ,"GG":[,[,,"[135789]\\d{6,9}","\\d{6,10}"]
 ,[,,"1481\\d{6}","\\d{6,10}",,,"1481456789"]
@@ -1674,6 +1766,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"(?:3[0347]|55)\\d{8}","\\d{10}",,,"5512345678"]
 ,,[,,"112|999","\\d{3}",,,"999"]
+,[,,"NA","NA"]
 ]
 ,"GH":[,[,,"[235]\\d{6,8}","\\d{7,9}"]
 ,[,,"3(?:0[237]\\d|[167](?:2[0-6]|7\\d)|2(?:2[0-5]|7\\d)|3(?:2[0-37]|7\\d)|4(?:[27]\\d|30)|5(?:2[0-7]|7\\d)|8(?:2[0-2]|7\\d)|9(?:20|7\\d))\\d{5}","\\d{7,9}",,,"302345678"]
@@ -1689,6 +1782,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"19[123]|999","\\d{3}",,,"999"]
+,[,,"NA","NA"]
 ]
 ,"GI":[,[,,"[2568]\\d{7}","\\d{8}"]
 ,[,,"2(?:00\\d|16[0-7]|22[2457])\\d{4}","\\d{8}",,,"20012345"]
@@ -1702,6 +1796,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"1(?:12|9[09])","\\d{3}",,,"112"]
+,[,,"NA","NA"]
 ]
 ,"GL":[,[,,"[1-689]\\d{5}","\\d{6}"]
 ,[,,"(?:19|3[1-6]|6[14689]|8[14-79]|9\\d)\\d{4}","\\d{6}",,,"321000"]
@@ -1717,6 +1812,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"112","\\d{3}",,,"112"]
+,[,,"NA","NA"]
 ]
 ,"GM":[,[,,"[3-9]\\d{6}","\\d{7}"]
 ,[,,"(?:4(?:[23]\\d{2}|4(?:1[024679]|[6-9]\\d))|5(?:54[0-7]|6(?:[67]\\d)|7(?:1[04]|2[035]|3[58]|48))|8\\d{3})\\d{3}","\\d{7}",,,"5661234"]
@@ -1732,21 +1828,23 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"1?1[678]","\\d{2,3}",,,"117"]
+,[,,"NA","NA"]
 ]
 ,"GN":[,[,,"[3567]\\d{7}","\\d{8}"]
 ,[,,"30(?:24|3[12]|4[1-35-7]|5[13]|6[189]|[78]1|9[1478])\\d{4}","\\d{8}",,,"30241234"]
-,[,,"55\\d{6}|6(?:0(?:2\\d|3[3467]|5[2457-9])|[24578]\\d{2}|3(?:[14]0|35))\\d{4}","\\d{8}",,,"60201234"]
-,[,,"NA","NA"]
+,[,,"55\\d{6}|6(?:0(?:2[0-35-9]|3[3467]|5[2457-9])|[24578]\\d{2}|3(?:[14]0|35))\\d{4}","\\d{8}",,,"60201234"]
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
+,[,,"78\\d{6}","\\d{8}",,,"78123456"]
 ,"GN",224,"00",,,,,,,,[[,"(\\d{2})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",,"","",0]
 ]
 ,,[,,"NA","NA"]
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"NA","NA"]
+,[,,"NA","NA"]
 ]
 ,"GP":[,[,,"[56]\\d{8}","\\d{9}"]
 ,[,,"590(?:1[12]|2[0-68]|3[28]|4[126-8]|5[067]|6[018]|[89]\\d)\\d{4}","\\d{9}",,,"590201234"]
@@ -1762,6 +1860,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,1,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"1[578]","\\d{2}",,,"18"]
+,[,,"NA","NA"]
 ]
 ,"GQ":[,[,,"[23589]\\d{8}","\\d{9}"]
 ,[,,"3(?:3(?:3\\d[7-9]|[0-24-9]\\d[46])|5\\d{2}[7-9])\\d{4}","\\d{9}",,,"333091234"]
@@ -1780,6 +1879,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"NA","NA"]
+,[,,"NA","NA"]
 ]
 ,"GR":[,[,,"[26-9]\\d{9}","\\d{10}"]
 ,[,,"2(?:1\\d{2}|2(?:3[1-8]|4[1-7]|5[1-4]|6[1-8]|7[1-5]|[289][1-9])|3(?:1\\d|2[1-5]|3[1-4]|[45][1-3]|7[1-7]|8[1-6]|9[1-79])|4(?:1\\d|2[1-8]|3[1-4]|4[13-5]|6[1-578]|9[1-5])|5(?:1\\d|2[1-3]|4[124]|5[1-6]|[39][1-4])|6(?:1\\d|3[124]|4[1-7]|5[13-9]|[269][1-6]|7[14]|8[1-5])|7(?:1\\d|2[1-5]|3[1-6]|4[1-7]|5[1-57]|6[134]|9[15-7])|8(?:1\\d|2[1-5]|[34][1-4]|9[1-7]))\\d{6}","\\d{10}",,,"2123456789"]
@@ -1800,6 +1900,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"1(?:00|12|66|99)","\\d{3}",,,"112"]
+,[,,"NA","NA"]
 ]
 ,"GT":[,[,,"[2-7]\\d{7}|1[89]\\d{9}","\\d{8}(?:\\d{3})?"]
 ,[,,"[267][2-9]\\d{6}","\\d{8}",,,"22456789"]
@@ -1818,6 +1919,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"1(?:10|2[03])","\\d{3}",,,"110"]
+,[,,"NA","NA"]
 ]
 ,"GU":[,[,,"[5689]\\d{9}","\\d{7}(?:\\d{3})?"]
 ,[,,"671(?:3(?:00|3[39]|4[349]|55|6[26])|4(?:56|7[1-9]|8[23678])|5(?:55|6[2-5]|88)|6(?:3[2-578]|4[24-9]|5[34]|78|8[5-9])|7(?:[079]7|2[0167]|3[45]|8[789])|8(?:[2-5789]8|6[48])|9(?:2[29]|6[79]|7[179]|8[789]|9[78]))\\d{4}","\\d{7}(?:\\d{3})?",,,"6713001234"]
@@ -1831,6 +1933,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,"671",[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"911","\\d{3}",,,"911"]
+,[,,"NA","NA"]
 ]
 ,"GW":[,[,,"[3567]\\d{6}","\\d{7}"]
 ,[,,"3(?:2[0125]|3[1245]|4[12]|5[1-4]|70|9[1-467])\\d{4}","\\d{7}",,,"3201234"]
@@ -1846,6 +1949,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"11[378]","\\d{3}",,,"113"]
+,[,,"NA","NA"]
 ]
 ,"GY":[,[,,"[2-4679]\\d{6}","\\d{7}"]
 ,[,,"(?:2(?:1[6-9]|2[0-35-9]|3[1-4]|5[3-9]|6\\d|7[0-24-79])|3(?:2[25-9]|3\\d)|4(?:4[0-24]|5[56])|77[1-57])\\d{4}","\\d{7}",,,"2201234"]
@@ -1861,6 +1965,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"91[123]","\\d{3}",,,"911"]
+,[,,"NA","NA"]
 ]
 ,"HK":[,[,,"[235-7]\\d{7}|8\\d{7,8}|9\\d{7,10}","\\d{8,11}"]
 ,[,,"[23]\\d{7}","\\d{8}",,,"21234567"]
@@ -1881,6 +1986,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"112|99[29]","\\d{3}",,,"999"]
+,[,,"NA","NA"]
 ]
 ,"HN":[,[,,"[237-9]\\d{7}","\\d{8}"]
 ,[,,"2(?:2(?:0[019]|1[1-36]|[23]\\d|4[056]|5[57]|9[01])|4(?:2|3-59]|3[13-689]|4[0-68]|5[1-35])|5(?:4[3-5]|5\\d|6[56]|74)|6(?:4[0-378]|[56]\\d|[78][0-8]|9[01])|7(?:6[46-9]|7[02-9]|8[34])|8(?:79|8[0-35789]|9[1-57-9]))\\d{4}","\\d{8}",,,"22123456"]
@@ -1896,6 +2002,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"199","\\d{3}",,,"199"]
+,[,,"NA","NA"]
 ]
 ,"HR":[,[,,"[1-7]\\d{5,8}|[89]\\d{6,11}","\\d{6,12}"]
 ,[,,"(?:1|6[029])\\d{7}|(?:2[0-3]|3[1-5]|4[02-47-9]|5[1-3])\\d{6}","\\d{6,9}",,,"12345678"]
@@ -1930,6 +2037,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"1(?:12|92)|9[34]","\\d{2,3}",,,"112"]
+,[,,"NA","NA"]
 ]
 ,"HT":[,[,,"[2-489]\\d{7}","\\d{8}"]
 ,[,,"2(?:[24]\\d|5[1-5]|94)\\d{5}","\\d{8}",,,"22453300"]
@@ -1945,6 +2053,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"11[48]","\\d{3}",,,"118"]
+,[,,"NA","NA"]
 ]
 ,"HU":[,[,,"[1-9]\\d{7,8}","\\d{6,9}"]
 ,[,,"(?:1\\d|2(?:1\\d|[2-9])|3[2-7]|4[24-9]|5[2-79]|6[23689]|7(?:1\\d|[2-9])|8[2-57-9]|9[2-69])\\d{6}","\\d{6,9}",,,"12345678"]
@@ -1963,6 +2072,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"1(?:0[457]|12)","\\d{3}",,,"112"]
+,[,,"NA","NA"]
 ]
 ,"ID":[,[,,"[1-9]\\d{6,10}","\\d{5,11}"]
 ,[,,"2[124]\\d{7,8}|(?:2(?:[35][1-4]|6[0-8]|7[1-6]|8\\d|9[1-8])|3(?:1|2[1-578]|3[1-68]|4[1-3]|5[1-8]|6[1-3568]|7[0-46]|8\\d)|4(?:0[1-589]|1[01347-9]|2[0-36-8]|3[0-24-68]|5[1-378]|6[1-5]|7[134]|8[1245])|5(?:1[1-35-9]|2[25-8]|3[1246-9]|4[1-3589]|5[1-46]|6[1-8])|6(?:19?|[25]\\d|3[1-469]|4[1-6])|7(?:1[1-46-9]|2[14-9]|[36]\\d|4[1-8]|5[1-9]|7[0-36-9])|9(?:0[12]|1[0134-8]|2[0-479]|5[125-8]|6[23679]|7[159]|8[01346]))\\d{5,8}","\\d{5,10}",,,"612345678"]
@@ -1989,6 +2099,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"11[02389]","\\d{3}",,,"112"]
+,[,,"NA","NA"]
 ]
 ,"IE":[,[,,"[124-9]\\d{6,9}","\\d{5,10}"]
 ,[,,"1\\d{7,8}|2(?:1\\d{6,7}|[24-9]\\d{5}|3\\d{5,7})|4(?:0[24]\\d{5}|[1269]\\d{7}|[34]\\d{5,7}|5\\d{6}|7\\d{5}|8[0-46-9]\\d{7})|5(?:0[45]\\d{5}|1\\d{6}|2\\d{5,7}|[3679]\\d{7}|8\\d{5})|6(?:1\\d{6}|4\\d{5,7}|[237-9]\\d{5}|[56]\\d{7})|7[14]\\d{7}|9(?:1\\d{6}|[04]\\d{7}|[3-9]\\d{5})","\\d{5,10}",,,"2212345"]
@@ -2021,10 +2132,11 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"18[59]0\\d{6}","\\d{10}",,,"1850123456"]
 ,[,,"818\\d{6}","\\d{9}",,,"818123456"]
 ,,[,,"112|999","\\d{3}",,,"112"]
+,[,,"NA","NA"]
 ]
 ,"IL":[,[,,"[17]\\d{6,9}|[2-589]\\d{3}(?:\\d{3,6})?|6\\d{3}","\\d{4,10}"]
 ,[,,"(?:[2-489]|7[2-46-8])\\d{7}","\\d{7,9}",,,"21234567"]
-,[,,"5[024679]\\d{7}","\\d{9}",,,"501234567"]
+,[,,"5(?:[0246-9]\\d{2}|5(?:22|33|44|5[58]|66|77|88))\\d{5}","\\d{9}",,,"501234567"]
 ,[,,"1(?:80[019]\\d{3}|255)\\d{3}","\\d{7,10}",,,"1800123456"]
 ,[,,"1(?:212|(?:919|200)\\d{2})\\d{4}","\\d{8,10}",,,"1919123456"]
 ,[,,"1700\\d{6}","\\d{10}",,,"1700123456"]
@@ -2042,6 +2154,8 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,"$1","",0]
 ,[,"(1212)(\\d{2})(\\d{2})","$1-$2-$3",["121"]
 ,"$1","",0]
+,[,"(1599)(\\d{6})","$1-$2",["15"]
+,"$1","",0]
 ,[,"(\\d{4})","*$1",["[2-689]"]
 ,"$1","",0]
 ]
@@ -2049,6 +2163,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"1700\\d{6}|[2-689]\\d{3}","\\d{4,10}",,,"1700123456"]
 ,[,,"[2-689]\\d{3}","\\d{4}",,,"2250"]
 ,,[,,"1(?:0[012]|12)","\\d{3}",,,"112"]
+,[,,"1599\\d{6}","\\d{10}",,,"1599123456"]
 ]
 ,"IM":[,[,,"[135789]\\d{6,9}","\\d{6,10}"]
 ,[,,"1624\\d{6}","\\d{6,10}",,,"1624456789"]
@@ -2062,6 +2177,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"3(?:08162\\d|3\\d{5}|4(?:40[49]06|5624\\d)|7(?:0624\\d|2299\\d))\\d{3}|55\\d{8}","\\d{10}",,,"5512345678"]
 ,,[,,"999","\\d{3}",,,"999"]
+,[,,"NA","NA"]
 ]
 ,"IN":[,[,,"1\\d{7,12}|[2-9]\\d{9,10}","\\d{6,13}"]
 ,[,,"(?:11|2[02]|33|4[04]|79)[2-6]\\d{7}|80[2-46]\\d{7}|(?:1(?:2[0-249]|3[0-25]|4[145]|[59][14]|6[014]|7[1257]|8[01346])|2(?:1[257]|3[013]|4[01]|5[0137]|6[0158]|78|8[1568]|9[14])|3(?:26|4[1-3]|5[34]|6[01489]|7[02-46]|8[159])|4(?:1[36]|2[1-47]|3[15]|5[12]|6[126-9]|7[0-24-9]|8[013-57]|9[014-7])|5(?:[136][25]|22|4[28]|5[12]|[78]1|9[15])|6(?:12|[2345]1|57|6[13]|7[14]|80)|7(?:12|2[14]|3[134]|4[47]|5[15]|[67]1|88)|8(?:16|2[014]|3[126]|6[136]|7[078]|8[34]|91))[2-6]\\d{6}|(?:(?:1(?:2[35-8]|3[346-9]|4[236-9]|[59][0235-9]|6[235-9]|7[34689]|8[257-9])|2(?:1[134689]|3[24-8]|4[2-8]|5[25689]|6[2-4679]|7[13-79]|8[2-479]|9[235-9])|3(?:01|1[79]|2[1-5]|4[25-8]|5[125689]|6[235-7]|7[157-9]|8[2-467])|4(?:1[14578]|2[5689]|3[2-467]|5[4-7]|6[35]|73|8[2689]|9[2389])|5(?:[16][146-9]|2[14-8]|3[1346]|4[14-69]|5[46]|7[2-4]|8[2-8]|9[246])|6(?:1[1358]|2[2457]|3[2-4]|4[235-7]|5[2-689]|6[24-58]|7[23-689]|8[1-6])|8(?:1[1357-9]|2[235-8]|3[03-57-9]|4[0-24-9]|5\\d|6[2457-9]|7[1-6]|8[1256]|9[2-4]))\\d|7(?:(?:1[013-9]|2[0235-9]|3[2679]|4[1-35689]|5[2-46-9]|[67][02-9]|9\\d)\\d|8(?:2[0-6]|[013-8]\\d)))[2-6]\\d{5}","\\d{6,10}",,,"1123456789"]
@@ -2096,6 +2212,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"1(?:600\\d{6}|8(?:0(?:0\\d{4,8}|3\\d{9})|6(?:0\\d{7}|[12]\\d{9})))","\\d{8,13}",,,"1800123456"]
 ,[,,"1860\\d{7}","\\d{11}",,,"18603451234"]
 ,,[,,"1(?:0[0128]|12|298)|2611","\\d{3,4}",,,"108"]
+,[,,"NA","NA"]
 ]
 ,"IO":[,[,,"3\\d{6}","\\d{7}"]
 ,[,,"37\\d{5}","\\d{7}",,,"3709100"]
@@ -2111,6 +2228,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"NA","NA"]
+,[,,"NA","NA"]
 ]
 ,"IQ":[,[,,"[1-7]\\d{7,9}","\\d{6,10}"]
 ,[,,"1\\d{7}|(?:2[13-5]|3[02367]|4[023]|5[03]|6[026])\\d{6,7}","\\d{6,9}",,,"12345678"]
@@ -2131,10 +2249,11 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"NA","NA"]
+,[,,"NA","NA"]
 ]
 ,"IR":[,[,,"[2-6]\\d{4,9}|9(?:[134]\\d{8}|9\\d{2,8})|[178]\\d{9}","\\d{4,10}"]
 ,[,,"2(?:1[2-9]\\d{2,7}|51\\d{3,7})|(?:241|3(?:11|51)|441|5[14]1)\\d{4,7}|(?:3(?:34|41)|6(?:11|52))\\d{6,7}|(?:1(?:[134589][12]|[27][1-4])|2(?:2[189]|[3689][12]|42|5[256]|7[34])|3(?:12|2[1-4]|3[125]|4[24-9]|5[23]|[6-9][12])|4(?:[135-9][12]|2[1-467]|4[2-4])|5(?:12|2[89]|3[1-5]|4[2-8]|[5-7][12]|8[1245])|6(?:12|[347-9][12]|51|6[1-6])|7(?:[13589][12]|2[1289]|4[1-4]|6[1-6]|7[1-3])|8(?:[145][12]|3[124578]|6[1256]|7[1245]))\\d{7}","\\d{5,10}",,,"2123456789"]
-,[,,"9(?:1\\d|3[124-8])\\d{7}","\\d{10}",,,"9123456789"]
+,[,,"9(?:1\\d|3[124-9])\\d{7}","\\d{10}",,,"9123456789"]
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
@@ -2153,10 +2272,11 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"9990\\d{0,6}","\\d{4,10}",,,"9990123456"]
 ,,[,,"1(?:1[025]|25)","\\d{3}",,,"112"]
+,[,,"NA","NA"]
 ]
 ,"IS":[,[,,"[4-9]\\d{6}|38\\d{7}","\\d{7,9}"]
 ,[,,"(?:4(?:1[0-245]|2[0-7]|[37][0-8]|4[0245]|5[0-356]|6\\d|8[0-46-8]|9[013-79])|5(?:05|[156]\\d|2[02578]|3[013-6]|4[03-6]|7[0-2578]|8[0-25-9]|9[013-689])|87[23])\\d{4}","\\d{7}",,,"4101234"]
-,[,,"38[59]\\d{6}|(?:6(?:1[0-8]|2[0-8]|3[0-27-9]|4[0-29]|5[029]|[67][0-69]|[89]\\d)|7(?:5[057]|7[0-7])|8(?:2[0-5]|[469]\\d|5[1-9]))\\d{4}","\\d{7,9}",,,"6101234"]
+,[,,"38[59]\\d{6}|(?:6(?:1[0-8]|3[0-27-9]|4[0-27]|5[0-29]|[67][0-69]|9\\d)|7(?:5[057]|7[0-7])|8(?:2[0-5]|[469]\\d|5[1-9]))\\d{4}","\\d{7,9}",,,"6101234"]
 ,[,,"800\\d{4}","\\d{7}",,,"8001234"]
 ,[,,"90\\d{5}","\\d{7}",,,"9011234"]
 ,[,,"NA","NA"]
@@ -2171,10 +2291,11 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"112","\\d{3}",,,"112"]
+,[,,"388\\d{6}|(?:6(?:2[0-8]|49|8\\d)|8(?:2[6-9]|[38]\\d|50|7[014-9])|95[48])\\d{4}","\\d{7,9}",,,"388123456"]
 ]
-,"IT":[,[,,"[0189]\\d{5,10}|3\\d{8,9}","\\d{6,11}"]
+,"IT":[,[,,"[0189]\\d{5,10}|3(?:[12457-9]\\d{8}|[36]\\d{7,9})","\\d{6,11}"]
 ,[,,"0(?:[26]\\d{4,9}|[13-57-9](?:[0159]\\d{4,8}|[2-46-8]\\d{5,8}))","\\d{6,11}",,,"0212345678"]
-,[,,"3\\d{8,9}","\\d{9,10}",,,"312345678"]
+,[,,"3(?:[12457-9]\\d{8}|6\\d{7,8}|3\\d{7,9})","\\d{9,11}",,,"3123456789"]
 ,[,,"80(?:0\\d{6}|3\\d{3})","\\d{6,9}",,,"800123456"]
 ,[,,"0878\\d{5}|1(?:44|6[346])\\d{6}|89(?:2\\d{3}|9\\d{6})","\\d{6,9}",,,"899123456"]
 ,[,,"84[78]\\d{6,7}","\\d{9,10}",,,"8481234567"]
@@ -2196,6 +2317,8 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,"","",0]
 ,[,"(\\d{3})(\\d{3})(\\d{3,4})","$1 $2 $3",["[13]|8(?:00|4[78]|99)"]
 ,"","",0]
+,[,"(\\d{3})(\\d{4})(\\d{4})","$1 $2 $3",["3"]
+,"","",0]
 ,[,"(\\d{3})(\\d{3,6})","$1 $2",["8(?:03|92)"]
 ,"","",0]
 ]
@@ -2203,6 +2326,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,1,[,,"11[2358]","\\d{3}",,,"112"]
+,[,,"NA","NA"]
 ]
 ,"JE":[,[,,"[135789]\\d{6,9}","\\d{6,10}"]
 ,[,,"1534\\d{6}","\\d{6,10}",,,"1534456789"]
@@ -2216,6 +2340,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"3(?:0(?:07(?:35|81)|8901)|3\\d{4}|4(?:4(?:4(?:05|42|69)|703)|5(?:041|800))|7(?:0002|1206))\\d{4}|55\\d{8}","\\d{10}",,,"5512345678"]
 ,,[,,"112|999","\\d{3}",,,"999"]
+,[,,"NA","NA"]
 ]
 ,"JM":[,[,,"[589]\\d{9}","\\d{7}(?:\\d{3})?"]
 ,[,,"876(?:5(?:0[12]|1[0-468]|2[35]|63)|6(?:0[1-3579]|1[027-9]|[23]\\d|40|5[06]|6[2-489]|7[05]|8[04]|9[4-9])|7(?:0[2-689]|[1-6]\\d|8[056]|9[45])|9(?:0[1-8]|1[02378]|[2-8]\\d|9[2-468]))\\d{4}","\\d{7}(?:\\d{3})?",,,"8765123456"]
@@ -2229,43 +2354,49 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,"876",[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"11[09]","\\d{3}",,,"119"]
+,[,,"NA","NA"]
 ]
 ,"JO":[,[,,"[235-9]\\d{7,8}","\\d{7,9}"]
-,[,,"[2356][2-8]\\d{6}","\\d{7,8}",,,"62001234"]
-,[,,"7(?:[1-8]\\d|9[02-9])\\d{6}","\\d{9}",,,"790123456"]
+,[,,"(?:2[67]|32|53|6[2-5]|87)\\d{6}","\\d{7,8}",,,"62001234"]
+,[,,"7(?:45|5\\d|7[2-79]|8[5-8]|9[035-9])\\d{6}","\\d{9}",,,"790123456"]
 ,[,,"80\\d{6}","\\d{8}",,,"80012345"]
 ,[,,"900\\d{5}","\\d{8}",,,"90012345"]
 ,[,,"85\\d{6}","\\d{8}",,,"85012345"]
 ,[,,"70\\d{7}","\\d{9}",,,"700123456"]
 ,[,,"NA","NA"]
-,"JO",962,"00","0",,,"0",,,,[[,"(\\d)(\\d{3})(\\d{4})","$1 $2 $3",["[2356]"]
+,"JO",962,"00","0",,,"0",,,,[[,"(\\d)(\\d{3})(\\d{4})","$1 $2 $3",["[2356]|87"]
 ,"(0$1)","",0]
-,[,"(7)(\\d{2})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4 $5",["7[457-9]"]
+,[,"(7)(\\d{4})(\\d{4})","$1 $2 $3",["7[457-9]"]
 ,"0$1","",0]
-,[,"(\\d{3})(\\d{5,6})","$1 $2",["70|[89]"]
+,[,"(\\d{3})(\\d{5,6})","$1 $2",["70|8[0158]|9"]
 ,"0$1","",0]
 ]
-,,[,,"NA","NA"]
+,,[,,"74(?:66|77)\\d{5}","\\d{9}",,,"746612345"]
 ,,,[,,"NA","NA"]
-,[,,"8(?:10|[78]\\d)\\d{5}","\\d{8}",,,"87101234"]
-,,[,,"112|911","\\d{3}",,,"112"]
+,[,,"8(?:10|8\\d)\\d{5}","\\d{8}",,,"88101234"]
+,,[,,"1(?:12|91)|911","\\d{3}",,,"112"]
+,[,,"NA","NA"]
 ]
-,"JP":[,[,,"[1-9]\\d{8,9}|0(?:7\\d{5,6}|8\\d{7})","\\d{7,10}"]
+,"JP":[,[,,"[1-9]\\d{8,9}|0(?:3\\d{9}|7\\d{5,7}|8\\d{7})","\\d{7,11}"]
 ,[,,"(?:1(?:1[235-8]|2[3-6]|3[3-9]|4[2-6]|[58][2-8]|6[2-7]|7[2-9]|9[1-9])|2[2-9]\\d|[36][1-9]\\d|4(?:6[02-8]|[2-578]\\d|9[2-59])|5(?:6[1-9]|7[2-8]|[2-589]\\d)|7(?:3[4-9]|4[02-9]|[25-9]\\d)|8(?:3[2-9]|4[5-9]|5[1-9]|8[03-9]|[2679]\\d)|9(?:[679][1-9]|[2-58]\\d))\\d{6}","\\d{9}",,,"312345678"]
 ,[,,"(?:[79]0\\d|80[1-9])\\d{7}","\\d{10}",,,"7012345678"]
-,[,,"120\\d{6}|800\\d{7}|0(?:777(?:[01]\\d{2}|5\\d{3})|882[1245]\\d{4})","\\d{7,10}",,,"120123456"]
+,[,,"120\\d{6}|800\\d{7}|0(?:777(?:[01]\\d{2}|5\\d{3}|8\\d{4})|882[1245]\\d{4})","\\d{7,10}",,,"120123456"]
 ,[,,"990\\d{6}","\\d{9}",,,"990123456"]
 ,[,,"NA","NA"]
 ,[,,"60\\d{7}","\\d{9}",,,"601234567"]
-,[,,"50\\d{8}","\\d{10}",,,"5012345678"]
+,[,,"(?:037|50)\\d{8}","\\d{10,11}",,,"5012345678"]
 ,"JP",81,"010","0",,,"0",,,,[[,"(\\d{3})(\\d{3})(\\d{3})","$1-$2-$3",["(?:12|57|99)0"]
 ,"0$1","",0]
 ,[,"(\\d{3})(\\d{3})(\\d{4})","$1-$2-$3",["800"]
 ,"0$1","",0]
-,[,"(\\d{3})(\\d{4,5})","$1-$2",["077"]
+,[,"(\\d{3})(\\d{4})","$1-$2",["077"]
+,"0$1","",0]
+,[,"(\\d{3})(\\d{2})(\\d{3,4})","$1-$2-$3",["077"]
 ,"0$1","",0]
 ,[,"(\\d{3})(\\d{2})(\\d{4})","$1-$2-$3",["088"]
 ,"0$1","",0]
+,[,"(\\d{3})(\\d{4})(\\d{4})","$1-$2-$3",["037"]
+,"0$1","",0]
 ,[,"(\\d{2})(\\d{4})(\\d{4})","$1-$2-$3",["[2579]0|80[1-9]"]
 ,"0$1","",0]
 ,[,"(\\d{4})(\\d)(\\d{4})","$1-$2-$3",["1(?:26|3[79]|4[56]|5[4-68]|6[3-5])|5(?:76|97)|499|746|8(?:3[89]|63|47|51)|9(?:49|80|9[16])","1(?:267|3(?:7[247]|9[278])|4(?:5[67]|66)|5(?:47|58|64|8[67])|6(?:3[245]|48|5[4-68]))|5(?:76|97)9|499[2468]|7468|8(?:3(?:8[78]|96)|636|477|51[24])|9(?:496|802|9(?:1[23]|69))","1(?:267|3(?:7[247]|9[278])|4(?:5[67]|66)|5(?:47|58|64|8[67])|6(?:3[245]|48|5[4-68]))|5(?:769|979[2-69])|499[2468]|7468|8(?:3(?:8[78]|96[2457-9])|636[2-57-9]|477|51[24])|9(?:496|802|9(?:1[23]|69))"]
@@ -2282,27 +2413,31 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,"0$1","",0]
 ]
 ,,[,,"20\\d{8}","\\d{10}",,,"2012345678"]
-,,,[,,"0(?:777(?:[01]\\d{2}|5\\d{3})|882[1245]\\d{4})","\\d{7,9}",,,"0777012"]
+,,,[,,"0(?:37\\d{8}|777(?:[01]\\d{2}|5\\d{3}|8\\d{4})|882[1245]\\d{4})","\\d{7,11}",,,"0777012"]
 ,[,,"570\\d{6}","\\d{9}",,,"570123456"]
 ,1,[,,"11[09]","\\d{3}",,,"110"]
+,[,,"NA","NA"]
 ]
-,"KE":[,[,,"\\d{6,10}","\\d{4,10}"]
+,"KE":[,[,,"20\\d{4,7}|[4-9]\\d{5,9}","\\d{4,10}"]
 ,[,,"(?:20|4[0-6]|5\\d|6[0-24-9])\\d{4,7}","\\d{4,9}",,,"202012345"]
-,[,,"7(?:0[0-5]|[123]\\d|5[0-3]|7[0-5])\\d{6}","\\d{9}",,,"712123456"]
-,[,,"8(?:00|88)\\d{6,7}","\\d{9,10}",,,"800123456"]
-,[,,"9(?:00|1)\\d{6,7}","\\d{8,10}",,,"900123456"]
+,[,,"7(?:0[0-5]|[123]\\d|5[0-4]|7[0-5]|8[6-9])\\d{6}","\\d{9}",,,"712123456"]
+,[,,"800[245-8]\\d{5,6}","\\d{9,10}",,,"800223456"]
+,[,,"9(?:00[2-578]|11\\d)\\d{5}","\\d{9}",,,"900223456"]
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
-,"KE",254,"000","0",,,"0",,,,[[,"(\\d{2})(\\d{4,7})","$1 $2",["[2-6]|91"]
+,"KE",254,"000","0",,,"0",,,,[[,"(\\d{2})(\\d{4,7})","$1 $2",["[24-6]"]
+,"0$1","",0]
+,[,"(\\d{3})(\\d{6,7})","$1 $2",["7"]
 ,"0$1","",0]
-,[,"(\\d{3})(\\d{6,7})","$1 $2",["[78]|90"]
+,[,"(\\d{3})(\\d{3})(\\d{3,4})","$1 $2 $3",["[89]"]
 ,"0$1","",0]
 ]
 ,,[,,"NA","NA"]
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"112|999","\\d{3}",,,"999"]
+,[,,"NA","NA"]
 ]
 ,"KG":[,[,,"[356-8]\\d{8,9}","\\d{5,10}"]
 ,[,,"(?:3(?:1(?:2\\d|3[1-9]|47|5[02]|6[1-8])|2(?:22|3[0-479]|6[0-7])|4(?:22|5[6-9]|6[0-4])|5(?:22|3[4-7]|59|6[0-5])|6(?:22|5[35-7]|6[0-3])|7(?:22|3[468]|4[1-9]|59|6\\d|7[5-7])|9(?:22|4[1-8]|6[0-8]))|6(?:09|12|2[2-4])\\d)\\d{5}","\\d{5,10}",,,"312123456"]
@@ -2323,6 +2458,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"10[123]","\\d{3}",,,"101"]
+,[,,"NA","NA"]
 ]
 ,"KH":[,[,,"[1-9]\\d{7,9}","\\d{6,10}"]
 ,[,,"(?:2[3-6]|3[2-6]|4[2-4]|[567][2-5])[2-46-9]\\d{5}","\\d{6,8}",,,"23456789"]
@@ -2341,6 +2477,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"11[789]|666","\\d{3}",,,"117"]
+,[,,"NA","NA"]
 ]
 ,"KI":[,[,,"[2-689]\\d{4}","\\d{5}"]
 ,[,,"(?:[234]\\d|50|8[1-5])\\d{3}","\\d{5}",,,"31234"]
@@ -2354,6 +2491,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"99[2349]","\\d{3}",,,"999"]
+,[,,"NA","NA"]
 ]
 ,"KM":[,[,,"[379]\\d{6}","\\d{7}"]
 ,[,,"7(?:6[0-37-9]|7[0-57-9])\\d{4}","\\d{7}",,,"7712345"]
@@ -2369,6 +2507,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"1[78]","\\d{2}",,,"17"]
+,[,,"NA","NA"]
 ]
 ,"KN":[,[,,"[589]\\d{9}","\\d{7}(?:\\d{3})?"]
 ,[,,"869(?:2(?:29|36)|302|4(?:6[5-9]|70))\\d{4}","\\d{7}(?:\\d{3})?",,,"8692361234"]
@@ -2382,6 +2521,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,"869",[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"333|9(?:11|99)","\\d{3}",,,"999"]
+,[,,"NA","NA"]
 ]
 ,"KP":[,[,,"1\\d{9}|[28]\\d{7}","\\d{6,8}|\\d{10}"]
 ,[,,"2\\d{7}|85\\d{6}","\\d{6,8}",,,"21234567"]
@@ -2402,6 +2542,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"2(?:[0-24-9]\\d{2}|3(?:[0-79]\\d|8[02-9]))\\d{4}","\\d{8}",,,"23821234"]
 ,[,,"NA","NA"]
 ,,[,,"NA","NA"]
+,[,,"NA","NA"]
 ]
 ,"KR":[,[,,"[1-7]\\d{3,9}|8\\d{8}","\\d{4,10}"]
 ,[,,"(?:2|[34][1-3]|5[1-5]|6[1-4])(?:1\\d{2,3}|[2-9]\\d{6,7})","\\d{4,10}",,,"22123456"]
@@ -2436,10 +2577,11 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"1(?:5(?:44|66|77|88|99)|6(?:00|44|6[16]|70|88))\\d{4}","\\d{8}",,,"15441234"]
 ,,[,,"11[29]","\\d{3}",,,"112"]
+,[,,"NA","NA"]
 ]
-,"KW":[,[,,"[12569]\\d{6,7}","\\d{7,8}"]
+,"KW":[,[,,"[12569]\\d{6,7}|65816\\d{6}","\\d{7,8}|\\d{11}"]
 ,[,,"(?:18\\d|2(?:[23]\\d{2}|4[1-35-9]\\d|5(?:0[034]|[2-46]\\d|5[1-3]|7[1-7])))\\d{4}","\\d{7,8}",,,"22345678"]
-,[,,"(?:5(?:0[0-26]|5\\d)|6(?:0[034679]|5[015-9]|6\\d|7[067]|9[69])|9(?:0[09]|4[049]|66|[79]\\d))\\d{5}","\\d{8}",,,"50012345"]
+,[,,"(?:5(?:0[0-26]|5\\d)|6(?:0[034679]|5(?:[015-79]|8(?:[02-9]|1[0-57-9]))|6\\d|7[067]|9[69])|9(?:0[09]|4[049]|66|[79]\\d))\\d{5}","\\d{8}",,,"50012345"]
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
@@ -2449,11 +2591,14 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,"","",0]
 ,[,"(5[05]\\d)(\\d{5})","$1 $2",["5"]
 ,"","",0]
+,[,"(65816)(\\d{6})","$1 $2",["65816"]
+,"","",0]
 ]
 ,,[,,"NA","NA"]
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"112","\\d{3}",,,"112"]
+,[,,"65816\\d{6}","\\d{11}",,,"65816123456"]
 ]
 ,"KY":[,[,,"[3589]\\d{9}","\\d{7}(?:\\d{3})?"]
 ,[,,"345(?:2(?:22|44)|444|6(?:23|38|40)|7(?:6[6-9]|77)|8(?:00|1[45]|25|4[89]|88)|9(?:14|4[035-9]))\\d{4}","\\d{7}(?:\\d{3})?",,,"3452221234"]
@@ -2467,10 +2612,11 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,"345",[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"911","\\d{3}",,,"911"]
+,[,,"NA","NA"]
 ]
 ,"KZ":[,[,,"(?:7\\d{2}|80[09])\\d{7}","\\d{10}"]
-,[,,"7(?:1(?:0(?:[23]\\d|4[023]|59|63)|1(?:[23]\\d|4[0-79]|59)|2(?:[23]\\d|59)|3(?:2\\d|3[1-79]|4[0-35-9]|59)|4(?:2\\d|3[013-79]|4[0-8]|5[1-79])|5(?:2\\d|3[1-8]|4[1-7]|59)|6(?:2\\d|[34]\\d|5[19]|61)|72\\d|8(?:[27]\\d|3[1-46-9]|4[0-5]|))|2(?:1(?:[23]\\d|4[46-9]|5[3469])|2(?:2\\d|3[0679]|46|5[12679]|)|3(?:[234]\\d|5[139]|)|4(?:2\\d|3[1235-9]|59)|5(?:[23]\\d|4[01246-8]|59|61)|6(?:2\\d|3[1-9]|4[0-4]|59)|7(?:[23]\\d|40|5[279]|7\\d)|8(?:[23]\\d|4[0-3]|59)|9(?:2\\d|3[124578]|59))|3622)\\d{5}","\\d{10}",,,"7123456789"]
-,[,,"7(?:0[01257]|6[02-4]|7[157])\\d{7}","\\d{10}",,,"7710009998"]
+,[,,"7(?:1(?:0(?:[23]\\d|4[023]|59|63)|1(?:[23]\\d|4[0-79]|59)|2(?:[23]\\d|59)|3(?:2\\d|3[1-79]|4[0-35-9]|59)|4(?:2\\d|3[013-79]|4[0-8]|5[1-79])|5(?:2\\d|3[1-8]|4[1-7]|59)|6(?:[234]\\d|5[19]|61)|72\\d|8(?:[27]\\d|3[1-46-9]|4[0-5]))|2(?:1(?:[23]\\d|4[46-9]|5[3469])|2(?:2\\d|3[0679]|46|5[12679])|3(?:[234]\\d|5[139])|4(?:2\\d|3[1235-9]|59)|5(?:[23]\\d|4[01246-8]|59|61)|6(?:2\\d|3[1-9]|4[0-4]|59)|7(?:[23]\\d|40|5[279]|7\\d)|8(?:[23]\\d|4[0-3]|59)|9(?:2\\d|3[124578]|59))|3622)\\d{5}","\\d{10}",,,"7123456789"]
+,[,,"7(?:0[01257]|6[02-4]|7[1578])\\d{7}","\\d{10}",,,"7710009998"]
 ,[,,"800\\d{7}","\\d{10}",,,"8001234567"]
 ,[,,"809\\d{7}","\\d{10}",,,"8091234567"]
 ,[,,"NA","NA"]
@@ -2480,6 +2626,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"751\\d{7}","\\d{10}",,,"7511234567"]
 ,[,,"NA","NA"]
 ,,[,,"1(?:0[123]|12)","\\d{3}",,,"112"]
+,[,,"NA","NA"]
 ]
 ,"LA":[,[,,"[2-57]\\d{7,9}","\\d{6,10}"]
 ,[,,"(?:[2-57]1|54)\\d{6}","\\d{6,8}",,,"21212862"]
@@ -2498,10 +2645,11 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"19[015]","\\d{3}",,,"190"]
+,[,,"NA","NA"]
 ]
 ,"LB":[,[,,"[13-9]\\d{6,7}","\\d{7,8}"]
 ,[,,"(?:[14-6]\\d{2}|7(?:[2-57-9]\\d|62)|[89][2-9]\\d)\\d{4}","\\d{7}",,,"1123456"]
-,[,,"(?:3\\d|7(?:[01]\\d|6[136-9]))\\d{5}","\\d{7,8}",,,"71123456"]
+,[,,"(?:3\\d|7(?:[01]\\d|6[01346-9]))\\d{5}","\\d{7,8}",,,"71123456"]
 ,[,,"NA","NA"]
 ,[,,"9[01]\\d{6}","\\d{8}",,,"90123456"]
 ,[,,"8[01]\\d{6}","\\d{8}",,,"80123456"]
@@ -2509,13 +2657,14 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,[,,"NA","NA"]
 ,"LB",961,"00","0",,,"0",,,,[[,"(\\d)(\\d{3})(\\d{3})","$1 $2 $3",["[13-6]|7(?:[2-57-9]|62)|[89][2-9]"]
 ,"0$1","",0]
-,[,"([7-9]\\d)(\\d{3})(\\d{3})","$1 $2 $3",["[89][01]|7(?:[01]|6[136-9])"]
-,"0$1","",0]
+,[,"([7-9]\\d)(\\d{3})(\\d{3})","$1 $2 $3",["[89][01]|7(?:[01]|6[01346-9])"]
+,"","",0]
 ]
 ,,[,,"NA","NA"]
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"1(?:12|40|75)|999","\\d{3}",,,"112"]
+,[,,"NA","NA"]
 ]
 ,"LC":[,[,,"[5789]\\d{9}","\\d{7}(?:\\d{3})?"]
 ,[,,"758(?:234|4(?:5[0-9]|6[2-9]|8[0-2])|638|758)\\d{4}","\\d{7}(?:\\d{3})?",,,"7582345678"]
@@ -2529,6 +2678,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,"758",[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"9(?:11|99)","\\d{3}",,,"911"]
+,[,,"NA","NA"]
 ]
 ,"LI":[,[,,"(?:66|80|90)\\d{7}|[237-9]\\d{6}","\\d{7,9}"]
 ,[,,"(?:2(?:17|3\\d|6[02-58]|96)|3(?:02|7[01357]|8[048]|9[0269])|870)\\d{4}","\\d{7}",,,"2345678"]
@@ -2551,10 +2701,11 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"1(?:1[278]|44)","\\d{3}",,,"112"]
+,[,,"NA","NA"]
 ]
 ,"LK":[,[,,"[1-9]\\d{8}","\\d{7,9}"]
 ,[,,"(?:[189]1|2[13-7]|3[1-8]|4[157]|5[12457]|6[35-7])[2-57]\\d{6}","\\d{7,9}",,,"112345678"]
-,[,,"7[12578]\\d{7}","\\d{9}",,,"712345678"]
+,[,,"7[125-8]\\d{7}","\\d{9}",,,"712345678"]
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
@@ -2569,10 +2720,11 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"11[0189]","\\d{3}",,,"119"]
+,[,,"NA","NA"]
 ]
 ,"LR":[,[,,"(?:[29]\\d|[4-6]|7\\d{1,2}|[38]\\d{2})\\d{6}","\\d{7,9}"]
 ,[,,"2\\d{7}","\\d{8}",,,"21234567"]
-,[,,"(?:4[67]|5\\d|6[4-8]|7(?:76\\d|\\d{2})|880\\d)\\d{5}","\\d{7,9}",,,"4612345"]
+,[,,"(?:4[67]|5\\d|6[4-8]|7(?:7[67]\\d|\\d{2})|880\\d)\\d{5}","\\d{7,9}",,,"4612345"]
 ,[,,"NA","NA"]
 ,[,,"90\\d{6}","\\d{8}",,,"90123456"]
 ,[,,"NA","NA"]
@@ -2591,6 +2743,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"355|911","\\d{3}",,,"911"]
+,[,,"NA","NA"]
 ]
 ,"LS":[,[,,"[2568]\\d{7}","\\d{8}"]
 ,[,,"2\\d{7}","\\d{8}",,,"22123456"]
@@ -2606,6 +2759,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"11[257]","\\d{3}",,,"112"]
+,[,,"NA","NA"]
 ]
 ,"LT":[,[,,"[3-9]\\d{7}","\\d{8}"]
 ,[,,"(?:3[1478]|4[124-6]|52)\\d{6}","\\d{8}",,,"31234567"]
@@ -2615,17 +2769,20 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,[,,"NA","NA"]
 ,[,,"700\\d{5}","\\d{8}",,,"70012345"]
 ,[,,"NA","NA"]
-,"LT",370,"00","8",,,"8",,,,[[,"([34]\\d)(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",["37|4(?:1|5[45]|6[2-4])"]
-,"8 $1","",0]
-,[,"([3-9]\\d{2})(\\d{2})(\\d{3})","$1 $2 $3",["3[148]|4(?:[24]|6[09])|5(?:[0189]|28)|[6-9]"]
-,"8 $1","",0]
-,[,"(5)(2[0-79]\\d)(\\d{4})","$1 $2 $3",["52[0-79]"]
+,"LT",370,"00","8",,,"8",,,,[[,"([34]\\d)(\\d{6})","$1 $2",["37|4(?:1|5[45]|6[2-4])"]
+,"(8-$1)","",0]
+,[,"([3-6]\\d{2})(\\d{5})","$1 $2",["3[148]|4(?:[24]|6[09])|528|6"]
+,"(8-$1)","",0]
+,[,"([7-9]\\d{2})(\\d{2})(\\d{3})","$1 $2 $3",["[7-9]"]
 ,"8 $1","",0]
+,[,"(5)(2\\d{2})(\\d{4})","$1 $2 $3",["52[0-79]"]
+,"(8-$1)","",0]
 ]
 ,,[,,"NA","NA"]
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"0(?:11?|22?|33?)|1(?:0[123]|12)","\\d{2,3}",,,"112"]
+,[,,"NA","NA"]
 ]
 ,"LU":[,[,,"[24-9]\\d{3,10}|3(?:[0-46-9]\\d{2,9}|5[013-9]\\d{1,8})","\\d{4,11}"]
 ,[,,"(?:2(?:2\\d{1,2}|3[2-9]|[67]\\d|4[1-8]\\d?|5[1-5]\\d?|9[0-24-9]\\d?)|3(?:[059][05-9]|[13]\\d|[26][015-9]|4[0-26-9]|7[0-389]|8[08])\\d?|4\\d{2,3}|5(?:[01458]\\d|[27][0-69]|3[0-3]|[69][0-7])\\d?|7(?:1[019]|2[05-9]|3[05]|[45][07-9]|[679][089]|8[06-9])\\d?|8(?:0[2-9]|1[0-36-9]|3[3-9]|[469]9|[58][7-9]|7[89])\\d?|9(?:0[89]|2[0-49]|37|49|5[0-27-9]|7[7-9]|9[0-478])\\d?)\\d{1,7}","\\d{4,11}",,,"27123456"]
@@ -2658,6 +2815,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"11[23]","\\d{3}",,,"112"]
+,[,,"NA","NA"]
 ]
 ,"LV":[,[,,"[2689]\\d{7}","\\d{8}"]
 ,[,,"6\\d{7}","\\d{8}",,,"61234567"]
@@ -2673,6 +2831,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"0[123]|112","\\d{2,3}",,,"112"]
+,[,,"NA","NA"]
 ]
 ,"LY":[,[,,"[25679]\\d{8}","\\d{7,9}"]
 ,[,,"(?:2[1345]|5[1347]|6[123479]|71)\\d{7}","\\d{7,9}",,,"212345678"]
@@ -2688,6 +2847,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"19[013]","\\d{3}",,,"193"]
+,[,,"NA","NA"]
 ]
 ,"MA":[,[,,"[5689]\\d{8}","\\d{9}"]
 ,[,,"5(?:2(?:(?:[015-7]\\d|2[2-9]|3[2-57]|4[2-8]|8[235-9]|)\\d|9(?:0\\d|[89]0))|3(?:(?:[0-4]\\d|[57][2-9]|6[235-8]|9[3-9])\\d|8(?:0\\d|[89]0)))\\d{4}","\\d{9}",,,"520123456"]
@@ -2710,6 +2870,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"1(?:[59]|77)","\\d{2,3}",,,"15"]
+,[,,"NA","NA"]
 ]
 ,"MC":[,[,,"[4689]\\d{7,8}","\\d{8,9}"]
 ,[,,"9[2-47-9]\\d{6}","\\d{8}",,,"99123456"]
@@ -2730,6 +2891,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"8\\d{7}","\\d{8}"]
 ,[,,"NA","NA"]
 ,,[,,"1(?:12|[578])","\\d{2,3}",,,"112"]
+,[,,"NA","NA"]
 ]
 ,"MD":[,[,,"[256-9]\\d{7}","\\d{8}"]
 ,[,,"(?:2(?:1[0569]|2\\d|3[015-7]|4[1-46-9]|5[0-24689]|6[2-589]|7[1-37]|9[1347-9])|5(?:33|5[257]))\\d{5}","\\d{5,8}",,,"22212345"]
@@ -2750,6 +2912,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"8(?:03|14)\\d{5}","\\d{8}",,,"80312345"]
 ,,[,,"112|90[123]","\\d{3}",,,"112"]
+,[,,"NA","NA"]
 ]
 ,"ME":[,[,,"[2-9]\\d{7,8}","\\d{6,9}"]
 ,[,,"(?:20[2-8]|3(?:0[2-7]|1[35-7]|2[3567]|3[4-7])|4(?:0[237]|1[27])|5(?:0[47]|1[27]|2[378]))\\d{5}","\\d{6,8}",,,"30234567"]
@@ -2768,6 +2931,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"77\\d{6}","\\d{8}",,,"77273012"]
 ,,[,,"1(?:12|2[234])","\\d{3}",,,"112"]
+,[,,"NA","NA"]
 ]
 ,"MG":[,[,,"[23]\\d{8}","\\d{7,9}"]
 ,[,,"2(?:0(?:(?:2\\d|4[47]|5[3467]|6[279]|8[268]|9[245])\\d|7(?:2[29]|[35]\\d))|210\\d)\\d{4}","\\d{7,9}",,,"202123456"]
@@ -2783,6 +2947,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"11?[78]","\\d{2,3}",,,"117"]
+,[,,"NA","NA"]
 ]
 ,"MF":[,[,,"[56]\\d{8}","\\d{9}"]
 ,[,,"590(?:10|2[79]|5[128]|[78]7)\\d{4}","\\d{9}",,,"590271234"]
@@ -2796,6 +2961,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"1[578]","\\d{2}",,,"18"]
+,[,,"NA","NA"]
 ]
 ,"MH":[,[,,"[2-6]\\d{6}","\\d{7}"]
 ,[,,"(?:247|528|625)\\d{4}","\\d{7}",,,"2471234"]
@@ -2811,6 +2977,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"NA","NA"]
+,[,,"NA","NA"]
 ]
 ,"MK":[,[,,"[2-578]\\d{7}","\\d{8}"]
 ,[,,"(?:2(?:[23]\\d|5[125]|61)|3(?:1[3-6]|2[2-6]|3[2-5]|4[235])|4(?:[23][2-6]|4[3-6]|5[25]|6[25-8]|7[24-6]|8[4-6]))\\d{5}","\\d{6,8}",,,"22212345"]
@@ -2831,6 +2998,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"1(?:12|9[234])","\\d{3}",,,"112"]
+,[,,"NA","NA"]
 ]
 ,"ML":[,[,,"[246-8]\\d{7}","\\d{8}"]
 ,[,,"(?:2(?:0(?:2[0-589]|7[027-9])|1(?:2[5-7]|[3-689]\\d))|442\\d)\\d{4}","\\d{8}",,,"20212345"]
@@ -2846,32 +3014,34 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"1[578]","\\d{2}",,,"17"]
+,[,,"NA","NA"]
 ]
-,"MM":[,[,,"[124-8]\\d{5,7}|9\\d{7,8}","\\d{5,9}"]
-,[,,"(?:1\\d|2|4[2-6]|5[2-9]|6\\d|7[0-5]|8[1-6])\\d{5}|1333\\d{4}","\\d{5,8}",,,"1234567"]
-,[,,"9(?:[25689]\\d|444)\\d{5}","\\d{8,9}",,,"92123456"]
+,"MM":[,[,,"[124-8]\\d{5,7}|9(?:[25689]|[47]\\d)\\d{6}","\\d{5,9}"]
+,[,,"(?:1\\d|2|4[2-6]|5[2-9]|6(?:[0-689]|7\\d?)|7[0-5]|8(?:[2-6]|1\\d?))\\d{5}|1333\\d{4}","\\d{5,8}",,,"1234567"]
+,[,,"9(?:[25689]|[47]\\d)\\d{6}","\\d{8,9}",,,"92123456"]
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
-,"MM",95,"00",,,,,,,,[[,"(1)(\\d{3})(\\d{3})","$1 $2 $3",["1"]
-,"","",0]
+,"MM",95,"00","0",,,"0",,,,[[,"(1)(\\d{3})(\\d{3})","$1 $2 $3",["1"]
+,"0$1","",0]
 ,[,"(1)(3)(33\\d)(\\d{3})","$1 $2 $3 $4",["133","1333"]
-,"","",0]
+,"0$1","",0]
 ,[,"(2)(\\d{2})(\\d{3})","$1 $2 $3",["2"]
-,"","",0]
+,"0$1","",0]
+,[,"(\\d{2})(\\d{3})(\\d{3})","$1 $2 $3",["67|81"]
+,"0$1","",0]
 ,[,"(\\d{2})(\\d{2})(\\d{3})","$1 $2 $3",["[4-8]"]
-,"","",0]
-,[,"(9444)(\\d{5})","$1 $2",["94"]
-,"","",0]
-,[,"(9)([25689]\\d{2})(\\d{4})","$1 $2 $3",["9[25689]"]
-,"","",0]
+,"0$1","",0]
+,[,"(9)(\\d{3})(\\d{4,5})","$1 $2 $3",["9[24-9]"]
+,"0$1","",0]
 ]
 ,,[,,"NA","NA"]
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"199","\\d{3}",,,"199"]
+,[,,"NA","NA"]
 ]
 ,"MN":[,[,,"[12]\\d{7,9}|[57-9]\\d{7}","\\d{6,10}"]
 ,[,,"[12](?:1\\d|2(?:[1-3]\\d?|7\\d)|3[2-8]\\d{1,2}|4[2-68]\\d{1,2}|5[1-4689]\\d{1,2})\\d{5}|(?:5[0568]|70)\\d{6}","\\d{6,10}",,,"70123456"]
@@ -2896,6 +3066,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"10[0-3]","\\d{3}",,,"102"]
+,[,,"NA","NA"]
 ]
 ,"MO":[,[,,"[268]\\d{7}","\\d{8}"]
 ,[,,"(?:28[2-57-9]|8[2-57-9]\\d)\\d{5}","\\d{8}",,,"28212345"]
@@ -2911,6 +3082,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"999","\\d{3}",,,"999"]
+,[,,"NA","NA"]
 ]
 ,"MP":[,[,,"[5689]\\d{9}","\\d{7}(?:\\d{3})?"]
 ,[,,"670(?:2(?:3[3-7]|56|8[5-8])|32[1238]|4(?:33|8[348])|5(?:32|55|88)|6(?:64|70|82)|78[589]|8[3-9]8|989)\\d{4}","\\d{7}(?:\\d{3})?",,,"6702345678"]
@@ -2924,6 +3096,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,"670",[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"911","\\d{3}",,,"911"]
+,[,,"NA","NA"]
 ]
 ,"MQ":[,[,,"[56]\\d{8}","\\d{9}"]
 ,[,,"596(?:0[2-5]|[12]0|3[05-9]|4[024-8]|[5-7]\\d|89|9[4-8])\\d{4}","\\d{9}",,,"596301234"]
@@ -2939,6 +3112,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"1(?:12|[578])","\\d{2,3}",,,"15"]
+,[,,"NA","NA"]
 ]
 ,"MR":[,[,,"[2-48]\\d{7}","\\d{8}"]
 ,[,,"25[08]\\d{5}|35\\d{6}|45[1-7]\\d{5}","\\d{8}",,,"35123456"]
@@ -2954,6 +3128,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"1[78]","\\d{2}",,,"17"]
+,[,,"NA","NA"]
 ]
 ,"MS":[,[,,"[5689]\\d{9}","\\d{7}(?:\\d{3})?"]
 ,[,,"664491\\d{4}","\\d{7}(?:\\d{3})?",,,"6644912345"]
@@ -2967,6 +3142,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,"664",[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"9(?:11|99)","\\d{3}",,,"911"]
+,[,,"NA","NA"]
 ]
 ,"MT":[,[,,"[2579]\\d{7}","\\d{8}"]
 ,[,,"2(?:0(?:1[0-6]|[69]\\d)|[1-357]\\d{2})\\d{4}","\\d{8}",,,"21001234"]
@@ -2982,6 +3158,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"112","\\d{3}",,,"112"]
+,[,,"NA","NA"]
 ]
 ,"MU":[,[,,"[2-9]\\d{6}","\\d{7}"]
 ,[,,"(?:2(?:[034789]\\d|1[0-7])|4(?:[013-8]\\d|2[4-7])|[56]\\d{2}|8(?:14|3[129]))\\d{4}","\\d{7}",,,"2012345"]
@@ -2997,16 +3174,17 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"11[45]|99\\d","\\d{3}",,,"999"]
+,[,,"NA","NA"]
 ]
-,"MV":[,[,,"[367]\\d{6}|9(?:00\\d{7}|\\d{6})","\\d{7,10}"]
+,"MV":[,[,,"[3467]\\d{6}|9(?:00\\d{7}|\\d{6})","\\d{7,10}"]
 ,[,,"(?:3(?:0[01]|3[0-59]|)|6(?:[567][02468]|8[024689]|90))\\d{4}","\\d{7}",,,"6701234"]
-,[,,"(?:7[3-9]|9[6-9])\\d{5}","\\d{7}",,,"7712345"]
+,[,,"(?:46[46]|7[3-9]\\d|9[6-9]\\d)\\d{4}","\\d{7}",,,"7712345"]
 ,[,,"NA","NA"]
 ,[,,"900\\d{7}","\\d{10}",,,"9001234567"]
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
-,"MV",960,"0(?:0|19)",,,,,,"00",,[[,"(\\d{3})(\\d{4})","$1-$2",["[367]|9(?:[1-9]|0[1-9])"]
+,"MV",960,"0(?:0|19)",,,,,,"00",,[[,"(\\d{3})(\\d{4})","$1-$2",["[3467]|9(?:[1-9]|0[1-9])"]
 ,"","",0]
 ,[,"(\\d{3})(\\d{3})(\\d{4})","$1 $2 $3",["900"]
 ,"","",0]
@@ -3015,10 +3193,11 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"1(?:02|19)","\\d{3}",,,"102"]
+,[,,"NA","NA"]
 ]
-,"MW":[,[,,"(?:[13-5]|[27]\\d{2}|[89](?:\\d{2})?)\\d{6}","\\d{7,9}"]
+,"MW":[,[,,"(?:[3-5]|[27]\\d{2}|[189](?:\\d{2})?)\\d{6}","\\d{7,9}"]
 ,[,,"(?:1[2-9]|21\\d{2})\\d{5}","\\d{7,9}",,,"1234567"]
-,[,,"(?:[3-5]|77|8(?:8\\d)?|9(?:9\\d)?)\\d{6}","\\d{7,9}",,,"991234567"]
+,[,,"(?:111|[3-5]|77\\d|8(?:8\\d)?|9(?:9\\d)?)\\d{6}","\\d{7,9}",,,"991234567"]
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
@@ -3028,15 +3207,16 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,"0$1","",0]
 ,[,"(2\\d{2})(\\d{3})(\\d{3})","$1 $2 $3",["2"]
 ,"0$1","",0]
-,[,"(\\d)(\\d{4})(\\d{4})","$1 $2 $3",["7"]
+,[,"(\\d{3})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",["[1789]"]
 ,"0$1","",0]
-,[,"(\\d)(\\d{3,4})(\\d{3,4})","$1 $2 $3",["[89]"]
+,[,"(\\d)(\\d{3})(\\d{3})","$1 $2 $3",["[89]"]
 ,"0$1","",0]
 ]
 ,,[,,"NA","NA"]
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"199|99[789]","\\d{3}",,,"997"]
+,[,,"NA","NA"]
 ]
 ,"MX":[,[,,"[1-9]\\d{9,10}","\\d{7,11}"]
 ,[,,"(?:33|55|81)\\d{8}|(?:2(?:2[2-9]|3[1-35-8]|4[13-9]|7[1-689]|8[1-578]|9[467])|3(?:1[1-79]|[2458][1-9]|7[1-8]|9[1-5])|4(?:1[1-57-9]|[24-6][1-9]|[37][1-8]|8[1-35-9]|9[2-689])|5(?:88|9[1-79])|6(?:1[2-68]|[234][1-9]|5[1-3689]|6[12457-9]|7[1-7]|8[67]|9[4-8])|7(?:[13467][1-9]|2[1-8]|5[13-9]|8[1-69]|9[17])|8(?:2[13-689]|3[1-6]|4[124-6]|6[1246-9]|7[1-378]|9[12479])|9(?:1[346-9]|2[1-4]|3[2-46-8]|5[1348]|[69][1-9]|7[12]|8[1-8]))\\d{7}","\\d{7,10}",,,"2221234567"]
@@ -3068,6 +3248,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"06[568]|911","\\d{3}",,,"066"]
+,[,,"NA","NA"]
 ]
 ,"MY":[,[,,"[13-9]\\d{7,9}","\\d{6,10}"]
 ,[,,"(?:3\\d{2}|[4-79]\\d|8[2-9])\\d{6}","\\d{6,9}",,,"312345678"]
@@ -3094,16 +3275,17 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"112|999","\\d{3}",,,"999"]
+,[,,"NA","NA"]
 ]
 ,"MZ":[,[,,"[28]\\d{7,8}","\\d{8,9}"]
 ,[,,"2(?:[1346]\\d|5[0-2]|[78][12]|93)\\d{5}","\\d{8}",,,"21123456"]
-,[,,"8[24]\\d{7}","\\d{9}",,,"821234567"]
+,[,,"8[246]\\d{7}","\\d{9}",,,"821234567"]
 ,[,,"800\\d{6}","\\d{9}",,,"800123456"]
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
-,"MZ",258,"00",,,,,,,,[[,"([28]\\d)(\\d{3})(\\d{3,4})","$1 $2 $3",["2|8[24]"]
+,"MZ",258,"00",,,,,,,,[[,"([28]\\d)(\\d{3})(\\d{3,4})","$1 $2 $3",["2|8[246]"]
 ,"","",0]
 ,[,"(80\\d)(\\d{3})(\\d{3})","$1 $2 $3",["80"]
 ,"","",0]
@@ -3112,6 +3294,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"1(?:1[79]|9[78])","\\d{3}",,,"119"]
+,[,,"NA","NA"]
 ]
 ,"NA":[,[,,"[68]\\d{7,8}","\\d{8,9}"]
 ,[,,"6(?:1(?:17|2(?:[0189]\\d|[23-6]|7\\d?)|3(?:2\\d|3[378])|4[01]|69|7[014])|2(?:17|25|5(?:[0-36-8]|4\\d?)|69|70)|3(?:17|2(?:[0237]\\d?|[14-689])|34|6[29]|7[01]|81)|4(?:17|2(?:[012]|7?)|4(?:[06]|1\\d)|5(?:[01357]|[25]\\d?)|69|7[01])|5(?:17|2(?:[0459]|[23678]\\d?)|69|7[01])|6(?:17|2(?:5|6\\d?)|38|42|69|7[01])|7(?:17|2(?:[569]|[234]\\d?)|3(?:0\\d?|[13])|69|7[01]))\\d{4}","\\d{8,9}",,,"612012345"]
@@ -3120,8 +3303,8 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,[,,"8701\\d{5}","\\d{9}",,,"870123456"]
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
-,[,,"886\\d{5}","\\d{8}",,,"88612345"]
-,"NA",264,"00","0",,,"0",,,,[[,"(8\\d)(\\d{3})(\\d{4})","$1 $2 $3",["8[125]"]
+,[,,"8(3\\d{2}|86)\\d{5}","\\d{8,9}",,,"88612345"]
+,"NA",264,"00","0",,,"0",,,,[[,"(8\\d)(\\d{3})(\\d{4})","$1 $2 $3",["8[1235]"]
 ,"0$1","",0]
 ,[,"(6\\d)(\\d{2,3})(\\d{4})","$1 $2 $3",["6"]
 ,"0$1","",0]
@@ -3134,6 +3317,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"10111","\\d{5}",,,"10111"]
+,[,,"NA","NA"]
 ]
 ,"NC":[,[,,"[2-47-9]\\d{5}","\\d{6}"]
 ,[,,"(?:2[03-9]|3[0-5]|4[1-7]|88)\\d{4}","\\d{6}",,,"201234"]
@@ -3149,6 +3333,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"1[5-8]","\\d{2}",,,"15"]
+,[,,"NA","NA"]
 ]
 ,"NE":[,[,,"[029]\\d{7}","\\d{8}"]
 ,[,,"2(?:0(?:20|3[1-7]|4[134]|5[14]|6[14578]|7[1-578])|1(?:4[145]|5[14]|6[14-68]|7[169]|88))\\d{4}","\\d{8}",,,"20201234"]
@@ -3167,6 +3352,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,1,[,,"NA","NA"]
+,[,,"NA","NA"]
 ]
 ,"NF":[,[,,"[13]\\d{5}","\\d{5,6}"]
 ,[,,"(?:1(?:06|17|28|39)|3[012]\\d)\\d{3}","\\d{5,6}",,,"106609"]
@@ -3185,6 +3371,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"9(?:11|55|77)","\\d{3}",,,"911"]
+,[,,"NA","NA"]
 ]
 ,"NG":[,[,,"[1-69]\\d{5,8}|[78]\\d{5,13}","\\d{5,14}"]
 ,[,,"[12]\\d{6,7}|9\\d{7}|(?:4[023568]|5[02368]|6[02-469]|7[569]|8[2-9])\\d{6}|(?:4[47]|5[14579]|6[1578]|7[0-357])\\d{5,6}|(?:78|41)\\d{5}","\\d{5,9}",,,"12345678"]
@@ -3192,7 +3379,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,[,,"800\\d{7,11}","\\d{10,14}",,,"80017591759"]
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
-,[,,"700\\d{7,11}","\\d{10,14}",,,"7001234567"]
+,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,"NG",234,"009","0",,,"0",,,,[[,"([129])(\\d{3})(\\d{3,4})","$1 $2 $3",["[129]"]
 ,"0$1","",0]
@@ -3209,8 +3396,9 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ]
 ,,[,,"NA","NA"]
 ,,,[,,"NA","NA"]
-,[,,"NA","NA"]
+,[,,"700\\d{7,11}","\\d{10,14}",,,"7001234567"]
 ,,[,,"199","\\d{3}",,,"199"]
+,[,,"NA","NA"]
 ]
 ,"NI":[,[,,"[128]\\d{7}","\\d{8}"]
 ,[,,"2\\d{7}","\\d{8}",,,"21234567"]
@@ -3226,28 +3414,34 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"118","\\d{3}",,,"118"]
+,[,,"NA","NA"]
 ]
-,"NL":[,[,,"[1-9]\\d{6,9}","\\d{7,10}"]
+,"NL":[,[,,"1\\d{4,8}|[2-7]\\d{8}|[89]\\d{6,9}","\\d{5,10}"]
 ,[,,"(?:1[0135-8]|2[02-69]|3[0-68]|4[0135-9]|[57]\\d|8[478])\\d{7}","\\d{9}",,,"101234567"]
 ,[,,"6[1-58]\\d{7}","\\d{9}",,,"612345678"]
 ,[,,"800\\d{4,7}","\\d{7,10}",,,"8001234"]
 ,[,,"90[069]\\d{4,7}","\\d{7,10}",,,"9001234"]
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
-,[,,"85\\d{7}","\\d{9}"]
+,[,,"85\\d{7}","\\d{9}",,,"851234567"]
 ,"NL",31,"00","0",,,"0",,,,[[,"([1-578]\\d)(\\d{3})(\\d{4})","$1 $2 $3",["1[035]|2[0346]|3[03568]|4[0356]|5[0358]|7|8[458]"]
 ,"0$1","",0]
 ,[,"([1-5]\\d{2})(\\d{3})(\\d{3})","$1 $2 $3",["1[16-8]|2[259]|3[124]|4[17-9]|5[124679]"]
 ,"0$1","",0]
-,[,"(6)(\\d{8})","$1 $2",["6"]
+,[,"(6)(\\d{8})","$1 $2",["6[0-57-9]"]
+,"0$1","",0]
+,[,"(66)(\\d{7})","$1 $2",["66"]
 ,"0$1","",0]
+,[,"(14)(\\d{3,4})","$1 $2",["14"]
+,"$1","",0]
 ,[,"([89]0\\d)(\\d{4,7})","$1 $2",["80|9"]
 ,"0$1","",0]
 ]
-,,[,,"NA","NA"]
-,,,[,,"NA","NA"]
-,[,,"NA","NA"]
+,,[,,"66\\d{7}","\\d{9}",,,"662345678"]
+,,,[,,"14\\d{3,4}","\\d{5,6}"]
+,[,,"140(?:1(?:[035]|[16-8]\\d)|2(?:[0346]|[259]\\d)|3(?:[03568]|[124]\\d)|4(?:[0356]|[17-9]\\d)|5(?:[0358]|[124679]\\d)|7\\d|8[458])","\\d{5,6}",,,"14020"]
 ,,[,,"112|911","\\d{3}",,,"112"]
+,[,,"NA","NA"]
 ]
 ,"NO":[,[,,"0\\d{4}|[2-9]\\d{7}","\\d{5}(?:\\d{3})?"]
 ,[,,"(?:2[1-4]|3[1-3578]|5[1-35-7]|6[1-4679]|7[0-8])\\d{6}","\\d{8}",,,"21234567"]
@@ -3266,6 +3460,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,1,,[,,"NA","NA"]
 ,[,,"0\\d{4}|81(?:0(?:0[7-9]|1\\d)|5\\d{2})\\d{3}","\\d{5}(?:\\d{3})?",,,"01234"]
 ,1,[,,"11[023]","\\d{3}",,,"112"]
+,[,,"NA","NA"]
 ]
 ,"NP":[,[,,"[1-8]\\d{7}|9(?:[1-69]\\d{6}|7[2-6]\\d{5,7}|8\\d{8})","\\d{6,10}"]
 ,[,,"(?:1[0124-6]|2[13-79]|3[135-8]|4[146-9]|5[135-7]|6[13-9]|7[15-9]|8[1-46-9]|9[1-79])\\d{6}","\\d{6,8}",,,"14567890"]
@@ -3286,6 +3481,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"1(?:0[0-3]|12)","\\d{3}",,,"112"]
+,[,,"NA","NA"]
 ]
 ,"NR":[,[,,"[458]\\d{6}","\\d{7}"]
 ,[,,"(?:444|888)\\d{4}","\\d{7}",,,"4441234"]
@@ -3301,6 +3497,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"11[0-2]","\\d{3}",,,"110"]
+,[,,"NA","NA"]
 ]
 ,"NU":[,[,,"[1-5]\\d{3}","\\d{4}"]
 ,[,,"[34]\\d{3}","\\d{4}",,,"4002"]
@@ -3314,6 +3511,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"999","\\d{3}",,,"999"]
+,[,,"NA","NA"]
 ]
 ,"NZ":[,[,,"6[235-9]\\d{6}|[2-57-9]\\d{7,10}","\\d{7,11}"]
 ,[,,"(?:3[2-79]|[49][2-689]|6[235-9]|7[2-589])\\d{6}|24099\\d{3}","\\d{7,8}",,,"32345678"]
@@ -3327,6 +3525,8 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,"0$1","",0]
 ,[,"(21)(\\d{4})(\\d{3,4})","$1 $2 $3",["21"]
 ,"0$1","",0]
+,[,"(22)(\\d{3})(\\d{4})","$1 $2 $3",["22"]
+,"0$1","",0]
 ,[,"([2589]\\d{2})(\\d{3})(\\d{3,4})","$1 $2 $3",["2[0247-9]|5|[89]00"]
 ,"0$1","",0]
 ,[,"(\\d{2})(\\d{3})(\\d{3,4})","$1 $2 $3",["2[0169]|86"]
@@ -3338,6 +3538,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"111","\\d{3}",,,"111"]
+,[,,"NA","NA"]
 ]
 ,"OM":[,[,,"(?:2[3-6]|5|9[2-9])\\d{6}|800\\d{5,6}","\\d{7,9}"]
 ,[,,"2[3-6]\\d{6}","\\d{8}",,,"23123456"]
@@ -3358,6 +3559,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"9999","\\d{4}",,,"9999"]
+,[,,"NA","NA"]
 ]
 ,"PA":[,[,,"[1-9]\\d{6,7}","\\d{7,8}"]
 ,[,,"(?:1(?:0[02-579]|19|23|3[03]|4[479]|5[57]|65|7[016-8]|8[58]|9[1-49])|2(?:[0235679]\\d|1[0-7]|4[04-9]|8[028])|3(?:0[0-7]|1[14-7]|2[0-3]|3[03]|4[0457]|5[56]|6[068]|7[078]|80|9[0-79])|4(?:3[013-59]|4\\d|7[0-689])|5(?:[01]\\d|2[0-7]|[56]0|79)|7(?:09|2[0-267]|[34]0|5[6-9]|7[0-24-7]|8[89]|99)|8(?:[34]\\d|5[0-5]|8[02])|9(?:0[78]|1[0178]|2[0378]|3[379]|40|5[0489]|6[06-9]|7[046-9]|8[36-8]|9[1-9]))\\d{4}","\\d{7}",,,"2001234"]
@@ -3376,6 +3578,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"911","\\d{3}",,,"911"]
+,[,,"NA","NA"]
 ]
 ,"PE":[,[,,"[14-9]\\d{7,8}","\\d{6,9}"]
 ,[,,"(?:1\\d|4[1-4]|5[1-46]|6[1-7]|7[2-46]|8[2-4])\\d{6}","\\d{6,8}",,,"11234567"]
@@ -3398,6 +3601,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"1(?:05|1[67])","\\d{3}",,,"105"]
+,[,,"NA","NA"]
 ]
 ,"PF":[,[,,"[2-9]\\d{5}","\\d{6}"]
 ,[,,"(?:36\\d|4(?:[02-9]\\d|1[02-9])|[5689]\\d{2})\\d{3}","\\d{6}",,,"401234"]
@@ -3413,6 +3617,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"(?:36|44)\\d{4}","\\d{6}",,,"441234"]
 ,[,,"NA","NA"]
 ,,[,,"1[578]","\\d{2}",,,"15"]
+,[,,"NA","NA"]
 ]
 ,"PG":[,[,,"[1-9]\\d{6,7}","\\d{7,8}"]
 ,[,,"(?:3\\d{2}|4[257]\\d|5[34]\\d|6(?:29|4[1-9])|85[02-46-9]|9[78]\\d)\\d{4}","\\d{7}",,,"3123456"]
@@ -3431,6 +3636,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"000","\\d{3}",,,"000"]
+,[,,"NA","NA"]
 ]
 ,"PH":[,[,,"[2-9]\\d{7,9}|1800\\d{7,9}","\\d{7,13}"]
 ,[,,"(?:2|3[2-68]|4[2-9]|5[2-6]|6[2-58]|7[24578]|8[2-8])\\d{7}","\\d{7,9}",,,"21234567"]
@@ -3459,6 +3665,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"11[27]|911","\\d{3}",,,"117"]
+,[,,"NA","NA"]
 ]
 ,"PK":[,[,,"1\\d{8}|[2-8]\\d{5,11}|9(?:[013-9]\\d{4,9}|2\\d(?:111\\d{6}|\\d{3,7}))","\\d{6,12}"]
 ,[,,"(?:21|42)[2-9]\\d{7}|(?:2[25]|4[0146-9]|5[1-35-7]|6[1-8]|7[14]|8[16]|91)[2-9]\\d{6}|(?:2(?:3[2358]|4[2-4]|9[2-8])|45[3479]|54[2-467]|60[468]|72[236]|8(?:2[2-689]|3[23578]|4[3478]|5[2356])|9(?:1|2[2-8]|3[27-9]|4[2-6]|6[3569]|9[25-8]))[2-9]\\d{5,6}|58[126]\\d{7}","\\d{6,10}",,,"2123456789"]
@@ -3489,9 +3696,10 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"(?:2(?:[125]|3[2358]|4[2-4]|9[2-8])|4(?:[0-246-9]|5[3479])|5(?:[1-35-7]|4[2-467])|6(?:[1-8]|0[468])|7(?:[14]|2[236])|8(?:[16]|2[2-689]|3[23578]|4[3478]|5[2356])|9(?:1|22|3[27-9]|4[2-6]|6[3569]|9[2-7]))111\\d{6}","\\d{11,12}",,,"21111825888"]
 ,,[,,"1(?:1(?:22?|5)|[56])","\\d{2,4}",,,"112"]
+,[,,"NA","NA"]
 ]
-,"PL":[,[,,"[1-9]\\d{8}","\\d{9}"]
-,[,,"(?:1[2-8]|2[2-59]|3[2-4]|4[1-468]|5[24-689]|6[1-3578]|7[14-7]|8[1-79]|9[145])\\d{7}","\\d{9}",,,"123456789"]
+,"PL":[,[,,"[1-58]\\d{6,8}|9\\d{8}|[67]\\d{5,8}","\\d{6,9}"]
+,[,,"(?:1[2-8]|2[2-59]|3[2-4]|4[1-468]|5[24-689]|6[1-3578]|7[14-6]|8[1-7])\\d{5,7}|77\\d{4,7}|(?:89|9[145])\\d{7}","\\d{6,9}",,,"123456789"]
 ,[,,"(?:5[013]|6[069]|7[289]|88)\\d{7}","\\d{9}",,,"512345678"]
 ,[,,"800\\d{6}","\\d{9}",,,"800123456"]
 ,[,,"70\\d{7}","\\d{9}",,,"701234567"]
@@ -3500,13 +3708,20 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,[,,"39\\d{7}","\\d{9}",,,"391234567"]
 ,"PL",48,"00",,,,,,,,[[,"(\\d{2})(\\d{3})(\\d{2})(\\d{2})","$1 $2 $3 $4",["[124]|3[2-4]|5[24-689]|6[1-3578]|7[14-7]|8[1-79]|9[145]"]
 ,"","",0]
-,[,"(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3",["39|5[013]|6[069]|7[0289]|8[08]"]
+,[,"(\\d{2})(\\d{4,6})","$1 $2",["[124]|3[2-4]|5[24-689]|6[1-3578]|7[14-7]|8[1-7]"]
+,"","",0]
+,[,"(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3",["39|5[013]|6[0469]|7[0289]|8[08]"]
+,"","",0]
+,[,"(\\d{3})(\\d{2})(\\d{2,3})","$1 $2 $3",["64"]
+,"","",0]
+,[,"(\\d{3})(\\d{3})","$1 $2",["64"]
 ,"","",0]
 ]
-,,[,,"NA","NA"]
+,,[,,"642\\d{3,6}","\\d{6,9}",,,"642123456"]
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"112|99[789]","\\d{3}",,,"112"]
+,[,,"NA","NA"]
 ]
 ,"PM":[,[,,"[45]\\d{5}","\\d{6}"]
 ,[,,"41\\d{4}","\\d{6}",,,"411234"]
@@ -3522,6 +3737,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"1[578]","\\d{2}",,,"17"]
+,[,,"NA","NA"]
 ]
 ,"PR":[,[,,"[5789]\\d{9}","\\d{7}(?:\\d{3})?"]
 ,[,,"(?:787|939)[2-9]\\d{6}","\\d{7}(?:\\d{3})?",,,"7872345678"]
@@ -3535,6 +3751,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,"787|939",[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"911","\\d{3}",,,"911"]
+,[,,"NA","NA"]
 ]
 ,"PS":[,[,,"[24589]\\d{7,8}|1(?:[78]\\d{8}|[49]\\d{2,3})","\\d{4,10}"]
 ,[,,"(?:22[234789]|42[45]|82[01458]|92[369])\\d{5}","\\d{7,8}",,,"22234567"]
@@ -3555,6 +3772,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"NA","NA"]
+,[,,"NA","NA"]
 ]
 ,"PT":[,[,,"[2-46-9]\\d{8}","\\d{9}"]
 ,[,,"2(?:[12]\\d|[35][1-689]|4[1-59]|6[1-35689]|7[1-9]|8[1-69]|9[1256])\\d{6}","\\d{9}",,,"212345678"]
@@ -3570,6 +3788,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"70(?:7\\d|8[147])\\d{5}","\\d{9}",,,"707123456"]
 ,,[,,"112","\\d{3}",,,"112"]
+,[,,"NA","NA"]
 ]
 ,"PW":[,[,,"[2-8]\\d{6}","\\d{7}"]
 ,[,,"2552255|(?:277|345|488|5(?:35|44|87)|6(?:22|54|79)|7(?:33|47)|8(?:24|55|76))\\d{4}","\\d{7}",,,"2771234"]
@@ -3585,6 +3804,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"911","\\d{3}",,,"911"]
+,[,,"NA","NA"]
 ]
 ,"PY":[,[,,"5[0-5]\\d{4,7}|[2-46-9]\\d{5,8}","\\d{5,9}"]
 ,[,,"(?:[26]1|3[289]|4[124678]|7[123]|8[1236])\\d{5,7}|(?:2(?:2[4568]|7[15]|9[1-5])|3(?:18|3[167]|4[2357]|51)|4(?:18|2[45]|3[12]|5[13]|64|71|9[1-47])|5(?:[1-4]\\d|5[0234])|6(?:3[1-3]|44|7[1-4678])|7(?:17|4[0-4]|6[1-578]|75|8[0-8])|858)\\d{5,6}","\\d{5,9}",,,"212345678"]
@@ -3609,6 +3829,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"[2-9]0\\d{4,7}","\\d{6,9}",,,"201234567"]
 ,,[,,"128|911","\\d{3}",,,"911"]
+,[,,"NA","NA"]
 ]
 ,"QA":[,[,,"[2-8]\\d{6,7}","\\d{7,8}"]
 ,[,,"44\\d{6}","\\d{7,8}",,,"44123456"]
@@ -3627,6 +3848,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"999","\\d{3}",,,"999"]
+,[,,"NA","NA"]
 ]
 ,"RE":[,[,,"[268]\\d{8}","\\d{9}"]
 ,[,,"262\\d{6}","\\d{9}",,,"262161234"]
@@ -3642,6 +3864,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,1,"262|6[49]|8",[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"1(?:12|[578])","\\d{2,3}",,,"15"]
+,[,,"NA","NA"]
 ]
 ,"RO":[,[,,"[237-9]\\d{8}","\\d{9}"]
 ,[,,"[23][13-6]\\d{7}","\\d{9}",,,"211234567"]
@@ -3658,8 +3881,9 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ]
 ,,[,,"NA","NA"]
 ,,,[,,"NA","NA"]
-,[,,"NA","NA"]
+,[,,"37\\d{7}","\\d{9}",,,"372123456"]
 ,,[,,"112","\\d{3}",,,"112"]
+,[,,"NA","NA"]
 ]
 ,"RS":[,[,,"[1-36-9]\\d{4,11}","\\d{5,12}"]
 ,[,,"[1-3]\\d{6,11}","\\d{5,12}",,,"101234567"]
@@ -3686,6 +3910,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"7[06]\\d{4,10}","\\d{6,12}",,,"700123456"]
 ,,[,,"112|9[234]","\\d{2,3}",,,"112"]
+,[,,"NA","NA"]
 ]
 ,"RU":[,[,,"[3489]\\d{9}","\\d{10}"]
 ,[,,"(?:3(?:0[12]|4[1-35-79]|5[1-3]|8[1-58]|9[0145])|4(?:01|1[1356]|2[13467]|7[1-5]|8[1-7]|9[1-689])|8(?:1[1-8]|2[01]|3[13-6]|4[0-8]|5[15]|6[1-35-7]|7[1-37-9]))\\d{7}","\\d{10}",,,"3011234567"]
@@ -3704,6 +3929,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,1,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"0[123]|112","\\d{2,3}",,,"112"]
+,[,,"NA","NA"]
 ]
 ,"RW":[,[,,"[027-9]\\d{7,8}","\\d{8,9}"]
 ,[,,"2[258]\\d{7}|06\\d{6}","\\d{8,9}",,,"250123456"]
@@ -3724,9 +3950,10 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,1,[,,"112","\\d{3}",,,"112"]
+,[,,"NA","NA"]
 ]
-,"SA":[,[,,"[1-9]\\d{7,10}","\\d{7,11}"]
-,[,,"(?:1[24-7]|2[24-8]|3[35-8]|4[34-68]|6[2-5]|7[235-7])\\d{6}","\\d{7,8}",,,"12345678"]
+,"SA":[,[,,"[1-467]\\d{7}|5\\d{8}|(?:8|92)\\d{9}","\\d{7,11}"]
+,[,,"(?:[12][24-8]|3[35-8]|4[34-68]|6[2-5]|7[235-7])\\d{6}","\\d{7,8}",,,"12345678"]
 ,[,,"(?:5[013-689]\\d|8111)\\d{6}","\\d{9,10}",,,"512345678"]
 ,[,,"800\\d{7}","\\d{10}",,,"8001234567"]
 ,[,,"9200\\d{7}","\\d{11}",,,"92001234567"]
@@ -3748,6 +3975,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"99[7-9]","\\d{3}",,,"999"]
+,[,,"NA","NA"]
 ]
 ,"SB":[,[,,"[1-8]\\d{4,6}","\\d{5,7}"]
 ,[,,"(?:1[4-79]|[23]\\d|4[01]|5[03]|6[0-37])\\d{3}","\\d{5}",,,"40123"]
@@ -3764,24 +3992,26 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"999","\\d{3}",,,"999"]
+,[,,"NA","NA"]
 ]
-,"SC":[,[,,"[2-9]\\d{5,6}","\\d{6,7}"]
-,[,,"(?:2?(?:55[0-5]|78[013])|4?(?:2(?:0[589]|1[03-9]|[2-9]\\d)|[36]\\d{2})|44\\d{2})\\d{3}","\\d{6,7}",,,"4217123"]
-,[,,"2?(?:5(?:[0-46-9]\\d|5[6-9])|7(?:[0-79]\\d|8[24-9]))\\d{3}","\\d{6,7}",,,"2510123"]
+,"SC":[,[,,"[24689]\\d{5,6}","\\d{6,7}"]
+,[,,"(?:2(?:55[0-5]|78[013])|4(?:2(?:0[589]|1[03-9]|[2-9]\\d)|[346]\\d{2}))\\d{3}","\\d{7}",,,"4217123"]
+,[,,"2(?:5(?:[0-46-9]\\d|5[6-9])|7(?:[0-79]\\d|8[24-9]))\\d{3}","\\d{7}",,,"2510123"]
 ,[,,"8000\\d{2}","\\d{6}",,,"800000"]
 ,[,,"98\\d{4}","\\d{6}",,,"981234"]
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,[,,"64\\d{5}","\\d{7}",,,"6412345"]
-,"SC",248,"0[0-2]",,,,,,"00",,[[,"(\\d{3})(\\d{3})","$1 $2",["[35789]|2[1-4689]|6[0-35-9]"]
+,"SC",248,"0[0-2]",,,,,,"00",,[[,"(\\d{3})(\\d{3})","$1 $2",["[89]"]
 ,"","",0]
-,[,"(\\d)(\\d{3})(\\d{3})","$1 $2 $3",["2[57]|4|64"]
+,[,"(\\d)(\\d{3})(\\d{3})","$1 $2 $3",["[246]"]
 ,"","",0]
 ]
 ,,[,,"NA","NA"]
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"999","\\d{3}",,,"999"]
+,[,,"NA","NA"]
 ]
 ,"SD":[,[,,"[19]\\d{8}","\\d{9}"]
 ,[,,"1(?:[25]\\d|8[3567])\\d{6}","\\d{9}",,,"121231234"]
@@ -3797,6 +4027,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"999","\\d{3}",,,"999"]
+,[,,"NA","NA"]
 ]
 ,"SE":[,[,,"[1-9]\\d{6,9}","\\d{5,10}"]
 ,[,,"1(?:0[1-8]\\d{6}|[136]\\d{5,7}|(?:2[0-35]|4[0-4]|5[0-25-9]|7[13-6]|[89]\\d)\\d{5,6})|2(?:[136]\\d{5,7}|(?:2[0-7]|4[0136-8]|5[0-38]|7[018]|8[01]|9[0-57])\\d{5,6})|3(?:[356]\\d{5,7}|(?:0[0-4]|1\\d|2[0-25]|4[056]|7[0-2]|8[0-3]|9[023])\\d{5,6})|4(?:[0246]\\d{5,7}|(?:1[01-8]|3[0135]|5[14-79]|7[0-246-9]|8[0156]|9[0-689])\\d{5,6})|5(?:0[0-6]|1[0-5]|2[0-68]|3[0-4]|4\\d|5[0-5]|6[03-5]|7[013]|8[0-79]|9[01])\\d{5,6}|6(?:[03]\\d{5,7}|(?:1[1-3]|2[0-4]|4[02-57]|5[0-37]|6[0-3]|7[0-2]|8[0247]|9[0-356])\\d{5,6})|8\\d{6,8}|9(?:0\\d{5,7}|(?:1[0-68]|2\\d|3[02-59]|4[0-4]|5[0-4]|6[01]|7[0135-8]|8[01])\\d{5,6})","\\d{5,9}",,,"8123456"]
@@ -3844,6 +4075,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"112|90000","\\d{3,5}",,,"112"]
+,[,,"NA","NA"]
 ]
 ,"SG":[,[,,"[36]\\d{7}|[17-9]\\d{7,10}","\\d{8,11}"]
 ,[,,"6[1-8]\\d{6}","\\d{8}",,,"61234567"]
@@ -3865,7 +4097,8 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,[,,"NA","NA"]
 ,,,[,,"NA","NA"]
 ,[,,"7000\\d{7}","\\d{11}",,,"70001234567"]
-,,[,,"112|9(?:11|9[59])","\\d{3}",,,"999"]
+,,[,,"99[59]","\\d{3}",,,"999"]
+,[,,"NA","NA"]
 ]
 ,"SH":[,[,,"[2-9]\\d{3}","\\d{4}"]
 ,[,,"(?:[2-468]\\d|7[01])\\d{2}","\\d{4}",,,"2158"]
@@ -3879,6 +4112,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"9(?:11|99)","\\d{3}",,,"999"]
+,[,,"NA","NA"]
 ]
 ,"SI":[,[,,"[1-7]\\d{6,7}|[89]\\d{4,7}","\\d{5,8}"]
 ,[,,"(?:1\\d|2[2-8]|3[4-8]|4[24-8]|[57][3-8])\\d{6}","\\d{7,8}",,,"11234567"]
@@ -3901,6 +4135,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"11[23]","\\d{3}",,,"112"]
+,[,,"NA","NA"]
 ]
 ,"SJ":[,[,,"0\\d{4}|[4789]\\d{7}","\\d{5}(?:\\d{3})?"]
 ,[,,"79\\d{6}","\\d{8}",,,"79123456"]
@@ -3914,6 +4149,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"0\\d{4}|81(?:0(?:0[7-9]|1\\d)|5\\d{2})\\d{3}","\\d{5}(?:\\d{3})?",,,"01234"]
 ,1,[,,"11[023]","\\d{3}",,,"112"]
+,[,,"NA","NA"]
 ]
 ,"SK":[,[,,"[2-689]\\d{8}","\\d{9}"]
 ,[,,"[2-5]\\d{8}","\\d{9}",,,"212345678"]
@@ -3934,6 +4170,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"1(?:12|5[058])","\\d{3}",,,"112"]
+,[,,"NA","NA"]
 ]
 ,"SL":[,[,,"[2-578]\\d{7}","\\d{6,8}"]
 ,[,,"[235]2[2-4][2-9]\\d{4}","\\d{6,8}",,,"22221234"]
@@ -3949,6 +4186,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"(?:01|99)9","\\d{3}",,,"999"]
+,[,,"NA","NA"]
 ]
 ,"SM":[,[,,"[05-7]\\d{7,9}","\\d{6,10}"]
 ,[,,"0549(?:8[0157-9]|9\\d)\\d{4}","\\d{6,10}",,,"0549886377"]
@@ -3976,6 +4214,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,1,[,,"11[358]","\\d{3}",,,"113"]
+,[,,"NA","NA"]
 ]
 ,"SN":[,[,,"[37]\\d{8}","\\d{9}"]
 ,[,,"3(?:010|3(?:8[1-9]|9[2-9]))\\d{5}","\\d{9}",,,"301012345"]
@@ -3991,6 +4230,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"NA","NA"]
+,[,,"NA","NA"]
 ]
 ,"SO":[,[,,"[1-79]\\d{6,8}","\\d{7,9}"]
 ,[,,"(?:5[57-9]|[1-4]\\d)\\d{5}","\\d{7}",,,"5522010"]
@@ -4015,10 +4255,11 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"NA","NA"]
+,[,,"NA","NA"]
 ]
 ,"SR":[,[,,"[2-8]\\d{5,6}","\\d{6,7}"]
 ,[,,"(?:2[1-3]|3[0-7]|4\\d|5[2-58]|68\\d)\\d{4}","\\d{6,7}",,,"211234"]
-,[,,"(?:7[1245]|8[1-9])\\d{5}","\\d{7}",,,"7412345"]
+,[,,"(?:7[1-5]|8[1-9])\\d{5}","\\d{7}",,,"7412345"]
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
@@ -4035,6 +4276,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"115","\\d{3}",,,"115"]
+,[,,"NA","NA"]
 ]
 ,"ST":[,[,,"[29]\\d{6}","\\d{7}"]
 ,[,,"22\\d{5}","\\d{7}",,,"2221234"]
@@ -4050,16 +4292,17 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"112","\\d{3}",,,"112"]
+,[,,"NA","NA"]
 ]
-,"SV":[,[,,"[27]\\d{7}|[89]\\d{6}(?:\\d{4})?","\\d{7,8}|\\d{11}"]
+,"SV":[,[,,"[267]\\d{7}|[89]\\d{6}(?:\\d{4})?","\\d{7,8}|\\d{11}"]
 ,[,,"2[1-6]\\d{6}","\\d{8}",,,"21234567"]
-,[,,"7\\d{7}","\\d{8}",,,"70123456"]
+,[,,"[67]\\d{7}","\\d{8}",,,"70123456"]
 ,[,,"800\\d{4}(?:\\d{4})?","\\d{7}(?:\\d{4})?",,,"8001234"]
 ,[,,"900\\d{4}(?:\\d{4})?","\\d{7}(?:\\d{4})?",,,"9001234"]
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
-,"SV",503,"00",,,,,,,,[[,"(\\d{4})(\\d{4})","$1 $2",["[27]"]
+,"SV",503,"00",,,,,,,,[[,"(\\d{4})(\\d{4})","$1 $2",["[267]"]
 ,"","",0]
 ,[,"(\\d{3})(\\d{4})","$1 $2",["[89]"]
 ,"","",0]
@@ -4070,10 +4313,11 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"911","\\d{3}",,,"911"]
+,[,,"NA","NA"]
 ]
 ,"SX":[,[,,"[5789]\\d{9}","\\d{7}(?:\\d{3})?"]
-,[,,"72154[2-8]\\d{4}","\\d{7}(?:\\d{3})?",,,"7215425678"]
-,[,,"7215(?:1[02]|2\\d|5[0346]|8[01678])\\d{4}","\\d{10}",,,"7215205678"]
+,[,,"7215(?:4[2-8]|8[239])\\d{4}","\\d{7}(?:\\d{3})?",,,"7215425678"]
+,[,,"7215(?:1[02]|2\\d|5[03469]|8[01678])\\d{4}","\\d{10}",,,"7215205678"]
 ,[,,"8(?:00|55|66|77|88)[2-9]\\d{6}","\\d{10}",,,"8002123456"]
 ,[,,"900[2-9]\\d{6}","\\d{10}",,,"9002123456"]
 ,[,,"NA","NA"]
@@ -4083,6 +4327,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,"721",[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"919","\\d{3}",,,"919"]
+,[,,"NA","NA"]
 ]
 ,"SY":[,[,,"[1-59]\\d{7,8}","\\d{6,9}"]
 ,[,,"(?:1(?:1\\d?|4\\d|[2356])|2[1-35]|3(?:[13]\\d|4)|4[13]|5[1-3])\\d{6}","\\d{6,9}",,,"112345678"]
@@ -4101,6 +4346,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"11[023]","\\d{3}",,,"112"]
+,[,,"NA","NA"]
 ]
 ,"SZ":[,[,,"[027]\\d{7}","\\d{8}"]
 ,[,,"2(?:2(?:0[07]|[13]7|2[57])|3(?:0[34]|[1278]3|3[23]|[46][34])|(?:40[4-69]|67)|5(?:0[5-7]|1[6-9]|[23][78]|48|5[01]))\\d{4}","\\d{8}",,,"22171234"]
@@ -4117,6 +4363,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"0800\\d{4}","\\d{8}",,,"08001234"]
 ,[,,"NA","NA"]
 ,1,[,,"999","\\d{3}",,,"999"]
+,[,,"NA","NA"]
 ]
 ,"TC":[,[,,"[5689]\\d{9}","\\d{7}(?:\\d{3})?"]
 ,[,,"649(?:712|9(?:4\\d|50))\\d{4}","\\d{7}(?:\\d{3})?",,,"6497121234"]
@@ -4130,6 +4377,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,"649",[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"9(?:11|99)","\\d{3}",,,"911"]
+,[,,"NA","NA"]
 ]
 ,"TD":[,[,,"[2679]\\d{7}","\\d{8}"]
 ,[,,"22(?:[3789]0|5[0-5]|6[89])\\d{4}","\\d{8}",,,"22501234"]
@@ -4145,6 +4393,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"1[78]","\\d{2}",,,"17"]
+,[,,"NA","NA"]
 ]
 ,"TG":[,[,,"[29]\\d{7}","\\d{8}"]
 ,[,,"2(?:2[2-7]|3[23]|44|55|66|77)\\d{5}","\\d{8}",,,"22212345"]
@@ -4160,8 +4409,9 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"1(?:01|1[78]|7[17])","\\d{3}",,,"117"]
+,[,,"NA","NA"]
 ]
-,"TH":[,[,,"[2-9]\\d{7,8}|1\\d{9}","\\d{8,10}"]
+,"TH":[,[,,"[2-9]\\d{7,8}|1\\d{3}(?:\\d{6})?","\\d{4}|\\d{8,10}"]
 ,[,,"(?:2[1-9]|3[2-9]|4[2-5]|5[2-6]|7[3-7])\\d{6}","\\d{8}",,,"21234567"]
 ,[,,"[89]\\d{8}","\\d{9}",,,"812345678"]
 ,[,,"1800\\d{6}","\\d{10}",,,"1800123456"]
@@ -4179,9 +4429,10 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,"$1","",0]
 ]
 ,,[,,"NA","NA"]
-,,,[,,"NA","NA"]
-,[,,"NA","NA"]
+,,,[,,"1\\d{3}","\\d{4}",,,"1100"]
+,[,,"1\\d{3}","\\d{4}",,,"1100"]
 ,,[,,"1(?:669|9[19])","\\d{3,4}",,,"191"]
+,[,,"NA","NA"]
 ]
 ,"TJ":[,[,,"[3-59]\\d{8}","\\d{3,9}"]
 ,[,,"(?:3(?:1[3-5]|2[245]|3[12]|4[24-7]|5[25]|72)|4(?:46|74|87))\\d{6}","\\d{3,9}",,,"372123456"]
@@ -4204,19 +4455,21 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"1(?:0[1-3]|12)","\\d{3}",,,"112"]
+,[,,"NA","NA"]
 ]
-,"TK":[,[,,"[1-9]\\d{3}","\\d{4}",,,"3190"]
-,[,,"[1-9]\\d{3}","\\d{4}",,,"3190"]
-,[,,"[1-9]\\d{3}","\\d{4}",,,"3190"]
+,"TK":[,[,,"[2-5]\\d{3}","\\d{4}"]
+,[,,"[2-4]\\d{3}","\\d{4}",,,"3010"]
+,[,,"5\\d{3}","\\d{4}",,,"5190"]
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
-,"TK",690,"00",,,,,,,1,,,[,,"NA","NA"]
+,"TK",690,"00",,,,,,,,,,[,,"NA","NA"]
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"NA","NA"]
+,[,,"NA","NA"]
 ]
 ,"TL":[,[,,"[2-47-9]\\d{6}","\\d{7}"]
 ,[,,"(?:2[1-5]|3[1-9]|4[1-4])\\d{5}","\\d{7}",,,"2112345"]
@@ -4232,21 +4485,28 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"112","\\d{3}",,,"112"]
+,[,,"NA","NA"]
 ]
 ,"TM":[,[,,"[1-6]\\d{7}","\\d{8}"]
-,[,,"(?:12\\d|243|[3-5]22)\\d{5}","\\d{8}",,,"12345678"]
-,[,,"6[6-8]\\d{6}","\\d{8}",,,"66123456"]
+,[,,"(?:1(?:2\\d|3[1-9])|2(?:22|4[0-35-8])|3(?:22|4[03-9])|4(?:22|3[128]|4\\d|6[15])|5(?:22|5[7-9]|6[014-689]))\\d{5}","\\d{8}",,,"12345678"]
+,[,,"6[3-8]\\d{6}","\\d{8}",,,"66123456"]
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
-,"TM",993,"810","8",,,"8",,"8~10",,[[,"([1-6]\\d)(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",,"8 $1","",0]
+,"TM",993,"810","8",,,"8",,"8~10",,[[,"(\\d{2})(\\d{2})(\\d{2})(\\d{2})","$1 $2-$3-$4",["12"]
+,"(8 $1)","",0]
+,[,"(\\d{2})(\\d{6})","$1 $2",["6"]
+,"8 $1","",0]
+,[,"(\\d{3})(\\d)(\\d{2})(\\d{2})","$1 $2-$3-$4",["13|[2-5]"]
+,"(8 $1)","",0]
 ]
 ,,[,,"NA","NA"]
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"0[1-3]","\\d{2}",,,"03"]
+,[,,"NA","NA"]
 ]
 ,"TN":[,[,,"[2457-9]\\d{7}","\\d{8}"]
 ,[,,"7\\d{7}","\\d{8}",,,"71234567"]
@@ -4262,6 +4522,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"19[078]","\\d{3}",,,"197"]
+,[,,"NA","NA"]
 ]
 ,"TO":[,[,,"[02-8]\\d{4,6}","\\d{5,7}"]
 ,[,,"(?:2\\d|3[1-8]|4[1-4]|[56]0|7[0149]|8[05])\\d{3}","\\d{5}",,,"20123"]
@@ -4282,6 +4543,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,1,[,,"9(?:11|22|33|99)","\\d{3}",,,"911"]
+,[,,"NA","NA"]
 ]
 ,"TR":[,[,,"[2-589]\\d{9}|444\\d{4}","\\d{7,10}"]
 ,[,,"(?:2(?:[13][26]|[28][2468]|[45][268]|[67][246])|3(?:[13][28]|[24-6][2468]|[78][02468]|92)|4(?:[16][246]|[23578][2468]|4[26]))\\d{7}","\\d{10}",,,"2123456789"]
@@ -4302,6 +4564,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"444\\d{4}","\\d{7}",,,"4441444"]
 ,[,,"444\\d{4}|850\\d{7}","\\d{7,10}",,,"4441444"]
 ,,[,,"1(?:1[02]|55)","\\d{3}",,,"112"]
+,[,,"NA","NA"]
 ]
 ,"TT":[,[,,"[589]\\d{9}","\\d{7}(?:\\d{3})?"]
 ,[,,"868(?:2(?:01|2[1-5])|6(?:07|1[4-6]|2[1-9]|[3-6]\\d|7[0-79]|9[0-8])|82[12])\\d{4}","\\d{7}(?:\\d{3})?",,,"8682211234"]
@@ -4315,6 +4578,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,"868",[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"99[09]","\\d{3}",,,"999"]
+,[,,"NA","NA"]
 ]
 ,"TV":[,[,,"[29]\\d{4,5}","\\d{5,6}"]
 ,[,,"2[02-9]\\d{3}","\\d{5}",,,"20123"]
@@ -4328,6 +4592,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"911","\\d{3}",,,"911"]
+,[,,"NA","NA"]
 ]
 ,"TW":[,[,,"[2-9]\\d{7,8}","\\d{8,9}"]
 ,[,,"[2-8]\\d{7,8}","\\d{8,9}",,,"21234567"]
@@ -4346,6 +4611,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"11[029]","\\d{3}",,,"110"]
+,[,,"NA","NA"]
 ]
 ,"TZ":[,[,,"\\d{9}","\\d{7,9}"]
 ,[,,"2[2-8]\\d{7}","\\d{7,9}",,,"222345678"]
@@ -4366,6 +4632,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"11[12]|999","\\d{3}",,,"111"]
+,[,,"NA","NA"]
 ]
 ,"UA":[,[,,"[3-689]\\d{8}","\\d{5,9}"]
 ,[,,"(?:3[1-8]|4[13-8]|5[1-7]|6[12459])\\d{7}","\\d{5,9}",,,"311234567"]
@@ -4386,18 +4653,19 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"1(?:0[123]|12)","\\d{3}",,,"112"]
+,[,,"NA","NA"]
 ]
 ,"UG":[,[,,"\\d{9}","\\d{5,9}"]
-,[,,"20(?:[014]\\d{2}|2(?:40|[5-9]\\d)|3[23]|4\\d)\\d{4}|[34]\\d{8}","\\d{5,9}",,,"312345678"]
-,[,,"7(?:0[0-7]|[15789]\\d)\\d{6}","\\d{9}",,,"712345678"]
+,[,,"20(?:[014]\\d{2}|2(?:40|[5-9]\\d)|3[23]\\d|5[0-4]\\d)\\d{4}|[34]\\d{8}","\\d{5,9}",,,"312345678"]
+,[,,"7(?:0[0-7]|[15789]\\d|20|[46][0-4])\\d{6}","\\d{9}",,,"712345678"]
 ,[,,"800[123]\\d{5}","\\d{9}",,,"800123456"]
 ,[,,"90[123]\\d{6}","\\d{9}",,,"901123456"]
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
-,"UG",256,"00[057]","0",,,"0",,,,[[,"(\\d{3})(\\d{6})","$1 $2",["[7-9]|20(?:0|2[5-9])|4(?:6[45]|[7-9])"]
+,"UG",256,"00[057]","0",,,"0",,,,[[,"(\\d{3})(\\d{6})","$1 $2",["[7-9]|20(?:[013-5]|2[5-9])|4(?:6[45]|[7-9])"]
 ,"0$1","",0]
-,[,"(\\d{2})(\\d{7})","$1 $2",["204|3|4(?:[1-5]|6[0-36-9])"]
+,[,"(\\d{2})(\\d{7})","$1 $2",["3|4(?:[1-5]|6[0-36-9])"]
 ,"0$1","",0]
 ,[,"(2024)(\\d{5})","$1 $2",["2024"]
 ,"0$1","",0]
@@ -4406,10 +4674,11 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"999","\\d{3}",,,"999"]
+,[,,"NA","NA"]
 ]
 ,"US":[,[,,"[2-9]\\d{9}","\\d{7}(?:\\d{3})?"]
-,[,,"(?:2(?:0[1-35-9]|1[02-9]|2[4589]|3[149]|4[08]|5[1-46]|6[0279]|7[06]|8[13])|3(?:0[1-57-9]|1[02-9]|2[0135]|3[014679]|47|5[12]|6[01]|8[056])|4(?:0[124-9]|1[02-579]|2[3-5]|3[0245]|4[0235]|58|69|7[0589]|8[04])|5(?:0[1-57-9]|1[0235-8]|20|3[0149]|4[01]|5[19]|6[1-37]|7[013-5]|8[056])|6(?:0[1-35-9]|1[024-9]|2[036]|3[016]|4[16]|5[017]|6[0-29]|78|8[12])|7(?:0[1-46-8]|1[02-9]|2[047]|3[124]|4[07]|5[47]|6[02359]|7[02-59]|8[156])|8(?:0[1-68]|1[02-8]|28|3[0-25]|4[3578]|5[06-9]|6[02-5]|7[028])|9(?:0[1346-9]|1[02-9]|2[0589]|3[1678]|4[0179]|5[1246]|7[0-3589]|8[059]))[2-9]\\d{6}","\\d{7}(?:\\d{3})?",,,"2012345678"]
-,[,,"(?:2(?:0[1-35-9]|1[02-9]|2[4589]|3[149]|4[08]|5[1-46]|6[0279]|7[06]|8[13])|3(?:0[1-57-9]|1[02-9]|2[0135]|3[014679]|47|5[12]|6[01]|8[056])|4(?:0[124-9]|1[02-579]|2[3-5]|3[0245]|4[0235]|58|69|7[0589]|8[04])|5(?:0[1-57-9]|1[0235-8]|20|3[0149]|4[01]|5[19]|6[1-37]|7[013-5]|8[056])|6(?:0[1-35-9]|1[024-9]|2[036]|3[016]|4[16]|5[017]|6[0-29]|78|8[12])|7(?:0[1-46-8]|1[02-9]|2[047]|3[124]|4[07]|5[47]|6[02359]|7[02-59]|8[156])|8(?:0[1-68]|1[02-8]|28|3[0-25]|4[3578]|5[06-9]|6[02-5]|7[028])|9(?:0[1346-9]|1[02-9]|2[0589]|3[1678]|4[0179]|5[1246]|7[0-3589]|8[059]))[2-9]\\d{6}","\\d{7}(?:\\d{3})?",,,"2012345678"]
+,[,,"(?:2(?:0[1-35-9]|1[02-9]|2[4589]|3[149]|4[08]|5[1-46]|6[0279]|7[06]|8[13])|3(?:0[1-57-9]|1[02-9]|2[0135]|3[014679]|47|5[12]|6[01]|8[056])|4(?:0[124-9]|1[02-579]|2[3-5]|3[0245]|4[0235]|58|69|7[0589]|8[04])|5(?:0[1-57-9]|1[0235-8]|20|3[0149]|4[01]|5[19]|6[1-37]|7[013-5]|8[056])|6(?:0[1-35-9]|1[024-9]|2[036]|3[016]|4[16]|5[017]|6[0-279]|78|8[12])|7(?:0[1-46-8]|1[02-9]|2[047]|3[124]|4[07]|5[47]|6[02359]|7[02-59]|8[156])|8(?:0[1-68]|1[02-8]|28|3[0-25]|4[3578]|5[06-9]|6[02-5]|7[028])|9(?:0[1346-9]|1[02-9]|2[0589]|3[1678]|4[0179]|5[1246]|7[0-3589]|8[0459]))[2-9]\\d{6}","\\d{7}(?:\\d{3})?",,,"2012345678"]
+,[,,"(?:2(?:0[1-35-9]|1[02-9]|2[4589]|3[149]|4[08]|5[1-46]|6[0279]|7[06]|8[13])|3(?:0[1-57-9]|1[02-9]|2[0135]|3[014679]|47|5[12]|6[01]|8[056])|4(?:0[124-9]|1[02-579]|2[3-5]|3[0245]|4[0235]|58|69|7[0589]|8[04])|5(?:0[1-57-9]|1[0235-8]|20|3[0149]|4[01]|5[19]|6[1-37]|7[013-5]|8[056])|6(?:0[1-35-9]|1[024-9]|2[036]|3[016]|4[16]|5[017]|6[0-279]|78|8[12])|7(?:0[1-46-8]|1[02-9]|2[047]|3[124]|4[07]|5[47]|6[02359]|7[02-59]|8[156])|8(?:0[1-68]|1[02-8]|28|3[0-25]|4[3578]|5[06-9]|6[02-5]|7[028])|9(?:0[1346-9]|1[02-9]|2[0589]|3[1678]|4[0179]|5[1246]|7[0-3589]|8[0459]))[2-9]\\d{6}","\\d{7}(?:\\d{3})?",,,"2012345678"]
 ,[,,"8(?:00|55|66|77|88)[2-9]\\d{6}","\\d{10}",,,"8002345678"]
 ,[,,"900[2-9]\\d{6}","\\d{10}",,,"9002345678"]
 ,[,,"NA","NA"]
@@ -4424,6 +4693,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,1,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"112|911","\\d{3}",,,"911"]
+,[,,"NA","NA"]
 ]
 ,"UY":[,[,,"[2489]\\d{6,7}","\\d{7,8}"]
 ,[,,"2\\d{7}|4[2-7]\\d{6}","\\d{7,8}",,,"21231234"]
@@ -4444,9 +4714,10 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"128|911","\\d{3}",,,"911"]
+,[,,"NA","NA"]
 ]
 ,"UZ":[,[,,"[679]\\d{8}","\\d{7,9}"]
-,[,,"(?:6(?:1(?:22|3[124]|4[1-4]|5[123578]|64)|2(?:22|3[0-57-9]|41)|5(?:22|3[3-7]|5[024-8])|6\\d{2}|7(?:[23]\\d|7[69]|)|9(?:4[1-8]|6[135]))|7(?:0(?:5[4-9]|6[0146]|7[12456]|9[135-8])|12\\d|2(?:22|3[1345789]|4[123579]|5[14])|3(?:2\\d|3[1578]|4[1-35-7]|5[1-57]|61)|4(?:2\\d|3[1-4579]|7[1-79])|5(?:22|5[1-9]|6[1457])|6(?:22|3[12457]|4[13-8])|9(?:22|5[1-9])))\\d{5}","\\d{7,9}",,,"662345678"]
+,[,,"(?:6(?:1(?:22|3[124]|4[1-4]|5[123578]|64)|2(?:22|3[0-57-9]|41)|5(?:22|3[3-7]|5[024-8])|6\\d{2}|7(?:[23]\\d|7[69]|)|9(?:4[1-8]|6[135]))|7(?:0(?:5[4-9]|6[0146]|7[12456]|9[135-8])|1[12]\\d|2(?:22|3[1345789]|4[123579]|5[14])|3(?:2\\d|3[1578]|4[1-35-7]|5[1-57]|61)|4(?:2\\d|3[1-4579]|7[1-79])|5(?:22|5[1-9]|6[1457])|6(?:22|3[12457]|4[13-8])|9(?:22|5[1-9])))\\d{5}","\\d{7,9}",,,"662345678"]
 ,[,,"6(?:1(?:2(?:98|2[01])|35[0-4]|50\\d|61[23]|7(?:[01][017]|4\\d|55|9[5-9]))|2(?:11\\d|2(?:[12]1|9[01379])|5(?:[126]\\d|3[0-4])|7\\d{2})|5(?:19[01]|2(?:27|9[26])|30\\d|59\\d|7\\d{2})|6(?:2(?:1[5-9]|2[0367]|38|41|52|60)|3[79]\\d|4(?:56|83)|7(?:[07]\\d|1[017]|3[07]|4[047]|5[057]|67|8[0178]|9[79])|9[0-3]\\d)|7(?:2(?:24|3[237]|4[5-9]|7[15-8])|5(?:7[12]|8[0589])|7(?:0\\d|[39][07])|9(?:0\\d|7[079]))|9(2(?:1[1267]|5\\d|3[01]|7[0-4])|5[67]\\d|6(?:2[0-26]|8\\d)|7\\d{2}))\\d{4}|7(?:0\\d{3}|1(?:13[01]|6(?:0[47]|1[67]|66)|71[3-69]|98\\d)|2(?:2(?:2[79]|95)|3(?:2[5-9]|6[0-6])|57\\d|7(?:0\\d|1[17]|2[27]|3[37]|44|5[057]|66|88))|3(?:2(?:1[0-6]|21|3[469]|7[159])|33\\d|5(?:0[0-4]|5[579]|9\\d)|7(?:[0-3579]\\d|4[0467]|6[67]|8[078])|9[4-6]\\d)|4(?:2(?:29|5[0257]|6[0-7]|7[1-57])|5(?:1[0-4]|8\\d|9[5-9])|7(?:0\\d|1[024589]|2[0127]|3[0137]|[46][07]|5[01]|7[5-9]|9[079])|9(?:7[015-9]|[89]\\d))|5(?:112|2(?:0\\d|2[29]|[49]4)|3[1568]\\d|52[6-9]|7(?:0[01578]|1[017]|[23]7|4[047]|[5-7]\\d|8[78]|9[079]))|6(?:2(?:2[1245]|4[2-4])|39\\d|41[179]|5(?:[349]\\d|5[0-2])|7(?:0[017]|[13]\\d|22|44|55|67|88))|9(?:22[128]|3(?:2[0-4]|7\\d)|57[05629]|7(?:2[05-9]|3[37]|4\\d|60|7[2579]|87|9[07])))\\d{4}|9[0-57-9]\\d{7}","\\d{7,9}",,,"912345678"]
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
@@ -4459,6 +4730,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"0(?:0[123]|[123]|50)","\\d{2,3}",,,"01"]
+,[,,"NA","NA"]
 ]
 ,"VA":[,[,,"06\\d{8}","\\d{10}"]
 ,[,,"06698\\d{5}","\\d{10}",,,"0669812345"]
@@ -4474,6 +4746,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,1,[,,"11[2358]","\\d{3}",,,"113"]
+,[,,"NA","NA"]
 ]
 ,"VC":[,[,,"[5789]\\d{9}","\\d{7}(?:\\d{3})?"]
 ,[,,"784(?:266|3(?:6[6-9]|7\\d|8[0-24-6])|4(?:38|5[0-36-8]|8\\d|9[01])|555|638|784)\\d{4}","\\d{7}(?:\\d{3})?",,,"7842661234"]
@@ -4487,6 +4760,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,"784",[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"9(?:11|99)","\\d{3}",,,"911"]
+,[,,"NA","NA"]
 ]
 ,"VE":[,[,,"[24589]\\d{9}","\\d{7,10}"]
 ,[,,"(?:2(?:12|3[457-9]|[58][1-9]|[467]\\d|9[1-6])|50[01])\\d{7}","\\d{7,10}",,,"2121234567"]
@@ -4502,6 +4776,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"171","\\d{3}",,,"171"]
+,[,,"NA","NA"]
 ]
 ,"VG":[,[,,"[2589]\\d{9}","\\d{7}(?:\\d{3})?"]
 ,[,,"284(?:(?:229|4(?:22|9[45])|774|8(?:52|6[459]))\\d{4}|496[0-5]\\d{3})","\\d{7}(?:\\d{3})?",,,"2842291234"]
@@ -4515,6 +4790,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,"284",[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"9(?:11|99)","\\d{3}",,,"911"]
+,[,,"NA","NA"]
 ]
 ,"VI":[,[,,"[3589]\\d{9}","\\d{7}(?:\\d{3})?"]
 ,[,,"340(?:2(?:01|2[067]|36|44|77)|3(?:32|44)|4(?:4[38]|7[34])|5(?:1[34]|55)|6(?:26|4[23]|9[023])|7(?:[17]\\d|27)|884|998)\\d{4}","\\d{7}(?:\\d{3})?",,,"3406421234"]
@@ -4528,6 +4804,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,"340",[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"911","\\d{3}",,,"911"]
+,[,,"NA","NA"]
 ]
 ,"VN":[,[,,"8\\d{5,8}|[1-79]\\d{7,9}","\\d{7,10}"]
 ,[,,"(?:2(?:[025-79]|1[0189]|[348][01])|3(?:[0136-9]|[25][01])|[48]\\d|5(?:[01][01]|[2-9])|6(?:[0-46-8]|5[01])|7(?:[02-79]|[18][01]))\\d{7}|69\\d{5,6}|80\\d{5}","\\d{7,10}",,,"2101234567"]
@@ -4558,6 +4835,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"11[345]","\\d{3}",,,"113"]
+,[,,"NA","NA"]
 ]
 ,"VU":[,[,,"[2-57-9]\\d{4,6}","\\d{5,7}"]
 ,[,,"(?:2[2-9]\\d|3(?:[67]\\d|8[0-8])|48[4-9]|88\\d)\\d{2}","\\d{5}",,,"22123"]
@@ -4574,6 +4852,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"30\\d{3}|900\\d{4}","\\d{5,7}",,,"30123"]
 ,,[,,"112","\\d{3}",,,"112"]
+,[,,"NA","NA"]
 ]
 ,"WF":[,[,,"[5-7]\\d{5}","\\d{6}"]
 ,[,,"(?:50|68|72)\\d{4}","\\d{6}",,,"501234"]
@@ -4589,6 +4868,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"1[578]","\\d{2}",,,"15"]
+,[,,"NA","NA"]
 ]
 ,"WS":[,[,,"[2-8]\\d{4,6}","\\d{5,7}"]
 ,[,,"(?:[2-5]\\d|6[1-9]|84\\d{2})\\d{3}","\\d{5,7}",,,"22123"]
@@ -4607,6 +4887,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"99[4-6]","\\d{3}",,,"994"]
+,[,,"NA","NA"]
 ]
 ,"YE":[,[,,"[1-7]\\d{6,8}","\\d{6,9}"]
 ,[,,"(?:1(?:7\\d|[2-68])|2[2-68]|3[2358]|4[2-58]|5[2-6]|6[3-58]|7[24-68])\\d{5}","\\d{6,8}",,,"1234567"]
@@ -4625,6 +4906,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"19[1459]","\\d{3}",,,"191"]
+,[,,"NA","NA"]
 ]
 ,"YT":[,[,,"[268]\\d{8}","\\d{9}"]
 ,[,,"2696[0-4]\\d{4}","\\d{9}",,,"269601234"]
@@ -4638,6 +4920,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,"269|63",[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"1(?:12|5)","\\d{2,3}",,,"15"]
+,[,,"NA","NA"]
 ]
 ,"ZA":[,[,,"[1-5]\\d{8}|(?:7\\d{4,8}|8[1-5789]\\d{3,7})|8[06]\\d{7}","\\d{5,9}"]
 ,[,,"(?:1[0-8]|2[1-478]|3[1-69]|4\\d|5[1346-8])\\d{7}","\\d{8,9}",,,"101234567"]
@@ -4660,6 +4943,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"1(?:01(?:11|77)|12)","\\d{3,5}",,,"10111"]
+,[,,"NA","NA"]
 ]
 ,"ZM":[,[,,"[289]\\d{8}","\\d{9}"]
 ,[,,"21[1-8]\\d{6}","\\d{9}",,,"211234567"]
@@ -4678,6 +4962,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"(?:112|99[139])","\\d{3}",,,"999"]
+,[,,"NA","NA"]
 ]
 ,"ZW":[,[,,"2(?:[012457-9]\\d{3,8}|6\\d{3,6})|[13-79]\\d{4,8}|86\\d{8}","\\d{3,10}"]
 ,[,,"(?:1[3-9]|2(?:0[45]|[16]|2[28]|[49]8?|58[23]|7[246]|8[1346-9])|3(?:08?|17?|3[78]|[2456]|7[1569]|8[379])|5(?:[07-9]|1[78]|483|5(?:7?|8))|6(?:0|28|37?|[45][68][78]|98?)|848)\\d{3,6}|(?:2(?:27|5|7[135789]|8[25])|3[39]|5[1-46]|6[126-8])\\d{4,6}|2(?:0|70)\\d{5,6}|(?:4\\d|9[2-8])\\d{4,7}","\\d{3,10}",,,"1312345"]
@@ -4710,5 +4995,87 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"(?:112|99[3459])","\\d{3}",,,"999"]
+,[,,"NA","NA"]
+]
+,"001":[,[,,"\\d{8}","\\d{8}",,,"12345678"]
+,[,,"NA","NA",,,"12345678"]
+,[,,"NA","NA",,,"12345678"]
+,[,,"\\d{8}","\\d{8}",,,"12345678"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,"001",800,"",,,,,,,1,[[,"(\\d{4})(\\d{4})","$1 $2",,"","",0]
+]
+,,[,,"NA","NA"]
+,,,[,,"NA","NA"]
+,[,,"NA","NA"]
+,,[,,"NA","NA"]
+,[,,"NA","NA"]
+]
+,"001":[,[,,"\\d{8}","\\d{8}",,,"12345678"]
+,[,,"NA","NA",,,"12345678"]
+,[,,"NA","NA",,,"12345678"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"\\d{8}","\\d{8}",,,"12345678"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,"001",808,"",,,,,,,1,[[,"(\\d{4})(\\d{4})","$1 $2",,"","",0]
+]
+,,[,,"NA","NA"]
+,,,[,,"NA","NA"]
+,[,,"NA","NA"]
+,,[,,"NA","NA"]
+,[,,"NA","NA"]
+]
+,"001":[,[,,"51\\d{7}(?:\\d{3})?","\\d{9}(?:\\d{3})?",,,"510012345"]
+,[,,"NA","NA",,,"510012345"]
+,[,,"NA","NA",,,"510012345"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"51(?:00\\d{5}(?:\\d{3})?|10\\d{8})","\\d{9}(?:\\d{3})?",,,"510012345"]
+,"001",883,"",,,,,,,1,[[,"(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3",,"","",0]
+,[,"(\\d{3})(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3 $4",,"","",0]
+]
+,,[,,"NA","NA"]
+,,,[,,"NA","NA"]
+,[,,"NA","NA"]
+,,[,,"NA","NA"]
+,[,,"NA","NA"]
+]
+,"001":[,[,,"\\d{11}","\\d{11}",,,"12345678901"]
+,[,,"NA","NA",,,"12345678901"]
+,[,,"NA","NA",,,"12345678901"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,"001",888,"",,,,,,,1,[[,"(\\d{3})(\\d{3})(\\d{5})","$1 $2 $3",,"","",0]
+]
+,,[,,"NA","NA"]
+,,,[,,"NA","NA"]
+,[,,"\\d{11}","\\d{11}",,,"12345678901"]
+,,[,,"NA","NA"]
+,[,,"NA","NA"]
+]
+,"001":[,[,,"\\d{9}","\\d{9}",,,"123456789"]
+,[,,"NA","NA",,,"123456789"]
+,[,,"NA","NA",,,"123456789"]
+,[,,"NA","NA"]
+,[,,"\\d{9}","\\d{9}",,,"123456789"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,"001",979,"",,,,,,,1,[[,"(\\d)(\\d{4})(\\d{4})","$1 $2 $3",,"","",0]
+]
+,,[,,"NA","NA"]
+,,,[,,"NA","NA"]
+,[,,"NA","NA"]
+,,[,,"NA","NA"]
+,[,,"NA","NA"]
 ]
 };
index 6844089..998012c 100644 (file)
@@ -47,6 +47,7 @@ i18n.phonenumbers.metadata.countryCodeToRegionCodeMap = {
 ,244:["AO"]
 ,262:["RE","YT"]
 ,376:["AD"]
+,800:["001"]
 };
 
 /**
@@ -66,6 +67,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"NA","NA"]
+,[,,"NA","NA"]
 ]
 ,"AO":[,[,,"[29]\\d{8}","\\d{9}"]
 ,[,,"2\\d(?:[26-9]\\d|\\d[26-9])\\d{5}","\\d{9}",,,"222123456"]
@@ -81,6 +83,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"NA","NA"]
+,[,,"NA","NA"]
 ]
 ,"AR":[,[,,"[1-3689]\\d{9,10}","\\d{6,11}"]
 ,[,,"[1-3]\\d{9}","\\d{6,10}"]
@@ -116,6 +119,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"NA","NA"]
+,[,,"NA","NA"]
 ]
 ,"AU":[,[,,"[1-578]\\d{4,14}","\\d{5,15}"]
 ,[,,"[2378]\\d{8}","\\d{9}"]
@@ -134,6 +138,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"NA","NA"]
+,[,,"NA","NA"]
 ]
 ,"BR":[,[]
 ,[]
@@ -147,6 +152,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"19[023]|911","\\d{3}",,,"190"]
+,[,,"NA","NA"]
 ]
 ,"BS":[,[,,"(242|8(00|66|77|88)|900)\\d{7}","\\d{7,10}"]
 ,[,,"242(?:3(?:02|[236][1-9]|4[0-24-9]|5[0-68]|7[3-57]|9[2-5])|4(?:2[237]|51|64|77)|502|636|702)\\d{4}","\\d{7,10}"]
@@ -160,6 +166,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"NA","NA"]
+,[,,"NA","NA"]
 ]
 ,"DE":[,[,,"\\d{4,14}","\\d{2,14}"]
 ,[,,"(?:[24-6]\\d{2}|3[03-9]\\d|[789](?:[1-9]\\d|0[2-9]))\\d{1,8}","\\d{2,14}",,,"30123456"]
@@ -186,6 +193,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"NA","NA"]
+,[,,"NA","NA"]
 ]
 ,"GB":[,[,,"\\d{10}","\\d{6,10}"]
 ,[,,"[1-6]\\d{9}","\\d{6,10}"]
@@ -208,6 +216,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"NA","NA"]
+,[,,"NA","NA"]
 ]
 ,"IT":[,[,,"[0389]\\d{5,10}","\\d{6,11}"]
 ,[,,"0\\d{9,10}","\\d{10,11}"]
@@ -230,11 +239,12 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,1,[,,"NA","NA"]
-]
-,"JP":[,[]
-,[]
-,[]
 ,[,,"NA","NA"]
+]
+,"JP":[,[,,"07\\d{5}|[1-357-9]\\d{3,10}","\\d{4,11}"]
+,[,,"07\\d{5}|[1-357-9]\\d{3,10}","\\d{4,11}"]
+,[,,"07\\d{5}|[1-357-9]\\d{3,10}","\\d{4,11}"]
+,[,,"0777[01]\\d{2}","\\d{7}",,,"0777012"]
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
@@ -243,19 +253,22 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,"0$1","",0]
 ,[,"(\\d{2})(\\d{2})(\\d{3})(\\d{4})","$1 $2 $3 $4",["[57-9]0"]
 ,"0$1","",0]
-,[,"(\\d{2})(\\d{3})(\\d{4})","$1 $2 $3",["222|333","(?:222|333)1","(?:222|333)11"]
+,[,"(\\d{2})(\\d{3})(\\d{4})","$1 $2 $3",["111|222|333","(?:111|222|333)1","(?:111|222|333)11"]
 ,"0$1","",0]
 ,[,"(\\d{4})(\\d)(\\d{4})","$1 $2 $3",["222|333","2221|3332","22212|3332","222120|3332"]
 ,"0$1","",0]
 ,[,"(\\d{3})(\\d{2})(\\d{4})","$1 $2 $3",["[23]"]
 ,"0$1","",0]
-,[,"(\\d{4})","*$1",["[23]"]
+,[,"(\\d{3})(\\d{4})","$1-$2",["077"]
 ,"0$1","",0]
+,[,"(\\d{4})","*$1",["[23]"]
+,"$1","",0]
 ]
 ,,[,,"NA","NA"]
-,,,[,,"NA","NA"]
+,,,[,,"[23]\\d{3}","\\d{4}"]
+,[,,"NA","NA"]
+,1,[,,"NA","NA"]
 ,[,,"NA","NA"]
-,,[,,"NA","NA"]
 ]
 ,"KR":[,[,,"[1-7]\\d{3,9}|8\\d{8}","\\d{4,10}"]
 ,[,,"(?:2|[34][1-3]|5[1-5]|6[1-4])(?:1\\d{2,3}|[2-9]\\d{6,7})","\\d{4,10}",,,"22123456"]
@@ -294,6 +307,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"NA","NA"]
+,[,,"NA","NA"]
 ]
 ,"MX":[,[,,"[1-9]\\d{9,10}","\\d{7,11}"]
 ,[,,"[2-9]\\d{9}","\\d{7,10}"]
@@ -329,6 +343,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"NA","NA"]
+,[,,"NA","NA"]
 ]
 ,"NZ":[,[,,"[289]\\d{7,9}|[3-7]\\d{7}","\\d{7,10}"]
 ,[,,"24099\\d{3}|(?:3[2-79]|[479][2-689]|6[235-9])\\d{6}","\\d{7,8}"]
@@ -349,6 +364,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"NA","NA"]
+,[,,"NA","NA"]
 ]
 ,"PL":[,[,,"[1-9]\\d{8}","\\d{9}"]
 ,[,,"[1-9]\\d{8}","\\d{9}"]
@@ -364,6 +380,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"NA","NA"]
+,[,,"NA","NA"]
 ]
 ,"RE":[,[,,"[268]\\d{8}","\\d{9}"]
 ,[,,"262\\d{6}","\\d{9}",,,"262161234"]
@@ -379,6 +396,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,"262|6(?:9[23]|47)|8",[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"NA","NA"]
+,[,,"NA","NA"]
 ]
 ,"SG":[,[,,"[13689]\\d{7,10}","\\d{8}|\\d{10,11}"]
 ,[,,"[36]\\d{7}","\\d{8}"]
@@ -399,6 +417,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"NA","NA"]
+,[,,"NA","NA"]
 ]
 ,"US":[,[,,"[13-689]\\d{9}|2[0-35-9]\\d{8}","\\d{7}(?:\\d{3})?",,,"1234567890"]
 ,[,,"[13-689]\\d{9}|2[0-35-9]\\d{8}","\\d{7}(?:\\d{3})?",,,"1234567890"]
@@ -417,6 +436,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,1,,[,,"800\\d{7}","\\d{10}",,,"1234567890"]
 ,[,,"NA","NA"]
 ,,[,,"119|911","\\d{3}",,,"911"]
+,[,,"NA","NA"]
 ]
 ,"YT":[,[,,"[268]\\d{8}","\\d{9}"]
 ,[,,"2696[0-4]\\d{4}","\\d{9}",,,"269601234"]
@@ -430,5 +450,22 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,"269|639",[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"NA","NA"]
+,[,,"NA","NA"]
+]
+,"001":[,[,,"\\d{8}","\\d{8}",,,"12345678"]
+,[,,"NA","NA",,,"12345678"]
+,[,,"NA","NA",,,"12345678"]
+,[,,"\\d{8}","\\d{8}",,,"12345678"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,"001",800,"",,,,,,,1,[[,"(\\d{4})(\\d{4})","$1 $2",,"","",0]
+]
+,,[,,"NA","NA"]
+,,,[,,"NA","NA"]
+,[,,"NA","NA"]
+,,[,,"NA","NA"]
+,[,,"NA","NA"]
 ]
 };
index 0c0b1b8..d482399 100644 (file)
@@ -206,13 +206,17 @@ i18n.phonenumbers.metadata.countryCodeToRegionCodeMap = {
 ,690:["TK"]
 ,691:["FM"]
 ,692:["MH"]
+,800:["001"]
+,808:["001"]
 ,850:["KP"]
 ,852:["HK"]
 ,853:["MO"]
 ,855:["KH"]
 ,856:["LA"]
 ,880:["BD"]
+,883:["001"]
 ,886:["TW"]
+,888:["001"]
 ,960:["MV"]
 ,961:["LB"]
 ,962:["JO"]
@@ -230,6 +234,7 @@ i18n.phonenumbers.metadata.countryCodeToRegionCodeMap = {
 ,975:["BT"]
 ,976:["MN"]
 ,977:["NP"]
+,979:["001"]
 ,992:["TJ"]
 ,993:["TM"]
 ,994:["AZ"]
@@ -255,6 +260,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"911","\\d{3}"]
+,[,,"NA","NA"]
 ]
 ,"AD":[,[,,"(?:[346-9]|180)\\d{5}","\\d{6,8}"]
 ,[,,"[78]\\d{5}","\\d{6}"]
@@ -273,6 +279,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"11[0268]","\\d{3}"]
+,[,,"NA","NA"]
 ]
 ,"AE":[,[,,"[2-79]\\d{7,8}|800\\d{2,9}","\\d{5,12}"]
 ,[,,"(?:[2-4679][2-8]\\d|600[25])\\d{5}","\\d{7,9}"]
@@ -295,6 +302,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"112|99[789]","\\d{3}"]
+,[,,"NA","NA"]
 ]
 ,"AF":[,[,,"[2-7]\\d{8}","\\d{7,9}"]
 ,[,,"(?:[25][0-8]|[34][0-4]|6[0-5])[2-9]\\d{6}","\\d{7,9}"]
@@ -310,6 +318,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"1(?:02|19)","\\d{3}"]
+,[,,"NA","NA"]
 ]
 ,"AG":[,[,,"[2589]\\d{9}","\\d{7}(?:\\d{3})?"]
 ,[,,"268(?:4(?:6[0-38]|84)|56[0-2])\\d{4}","\\d{7}(?:\\d{3})?"]
@@ -323,6 +332,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,"268",[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"9(?:11|99)","\\d{3}"]
+,[,,"NA","NA"]
 ]
 ,"AI":[,[,,"[2589]\\d{9}","\\d{7}(?:\\d{3})?"]
 ,[,,"2644(?:6[12]|9[78])\\d{4}","\\d{7}(?:\\d{3})?"]
@@ -336,6 +346,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,"264",[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"911","\\d{3}"]
+,[,,"NA","NA"]
 ]
 ,"AL":[,[,,"[2-57]\\d{7}|6\\d{8}|8\\d{5,7}|9\\d{5}","\\d{5,9}"]
 ,[,,"(?:2(?:[168][1-9]|[247]\\d|9[1-7])|3(?:1[1-3]|[2-6]\\d|[79][1-8]|8[1-9])|4\\d{2}|5(?:1[1-4]|[2-578]\\d|6[1-5]|9[1-7])|8(?:[19][1-5]|[2-6]\\d|[78][1-7]))\\d{5}","\\d{5,8}"]
@@ -358,6 +369,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"12[789]","\\d{3}"]
+,[,,"NA","NA"]
 ]
 ,"AM":[,[,,"[1-35-9]\\d{7}","\\d{5,8}"]
 ,[,,"(?:10\\d|2(?:2[2-46]|3[1-8]|4[2-69]|5[2-7]|6[1-9]|8[1-7])|3[12]2)\\d{5}","\\d{5,8}"]
@@ -380,6 +392,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"10[123]","\\d{3}"]
+,[,,"NA","NA"]
 ]
 ,"AN":[,[,,"[13-79]\\d{6,7}","\\d{7,8}"]
 ,[,,"(?:318|5(?:25|4\\d|8[239])|7(?:1[578]|50)|9(?:[48]\\d{2}|50\\d|7(?:2[0-2]|[34]\\d|6[35-7]|77)))\\d{4}|416[0239]\\d{3}","\\d{7,8}"]
@@ -398,6 +411,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"112|911","\\d{3}"]
+,[,,"NA","NA"]
 ]
 ,"AO":[,[,,"[29]\\d{8}","\\d{9}"]
 ,[,,"2\\d(?:[26-9]\\d|\\d[26-9])\\d{5}","\\d{9}"]
@@ -413,26 +427,31 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"11[235]","\\d{3}"]
+,[,,"NA","NA"]
 ]
 ,"AR":[,[,,"[1-368]\\d{9}|9\\d{10}","\\d{6,11}"]
-,[,,"11\\d{8}|(?:2(?:2(?:[0139]\\d|2[13-79]|4[1-6]|5[2457]|6[124-8]|7[1-4]|8[13-6])|3(?:1[467]|2[02-6]|3[13-8]|[49][2-6]|5[2-8]|[067]\\d)|47[3-8]|6(?:[01345]\\d|2[2-7])|9(?:[0124789]\\d|3[1-6]|5[234]|6[2-6]))|3(?:3(?:2[79]|8[2578])|4(?:[78]\\d|0[0124-9]|[1-356]\\d|4[24-7]|9[123678])|5(?:[138]\\d|2[1245]|4[1-9]|6[2-4]|7[1-6])|7(?:[12468]\\d|3[1245]|5[124-8]|7[2-57])|8(?:[123578]\\d|4[13-6]|6[1-357-9]|9[124]))|670\\d)\\d{6}","\\d{6,10}"]
-,[,,"675\\d{7}|9(?:11[2-9]\\d{7}|(?:2(?:2[013]|37|6[14]|9[179])|3(?:4[1235]|5[138]|8[1578]))[2-9]\\d{6}|\\d{4}[2-9]\\d{5})","\\d{6,11}"]
+,[,,"11\\d{8}|(?:2(?:2(?:[0139]\\d|2[13-79]|4[1-6]|5[2457]|6[124-8]|7[1-4]|8[13-6])|3(?:1[467]|2[02-6]|3[13-8]|[49][2-6]|5[2-8]|[067]\\d)|47[3-8]|6(?:[013-6]\\d|2[2-7])|80\\d|9(?:[0124789]\\d|3[1-6]|5[234]|6[2-46]))|3(?:3(?:2[79]|8[2578])|4(?:[78]\\d|0[0124-9]|[1-356]\\d|4[24-7]|9[123678])|5(?:[138]\\d|2[1245]|4[1-9]|6[2-4]|7[1-6])|6[24]\\d|7(?:[124689]\\d|3[1245]|5[14-8]|7[2-57])|8(?:[123578]\\d|4[13-6]|6[1-357-9]|9[124]))|670\\d)\\d{6}","\\d{6,10}"]
+,[,,"675\\d{7}|9(?:11[2-9]\\d{7}|(?:2(?:2[013]|37|6[01346]|80|9[147-9])|3(?:4[1235]|5[138]|6[24]|7[69]|8[1578]))[2-9]\\d{6}|\\d{4}[2-9]\\d{5})","\\d{6,11}"]
 ,[,,"800\\d{7}","\\d{10}"]
 ,[,,"60[04579]\\d{7}","\\d{10}"]
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
-,"AR",54,"00","0",,,"0(?:(11|2(?:2(?:02?|[13]|2[13-79]|4[1-6]|5[2457]|6[124-8]|7[1-4]|8[13-6]|9[1-367])|3(?:[06]2|1[467]|2[02-6]|3[13-8]|[49][2-6]|5[2-8]|7)|47[3-578]|6(?:1|2[2-7]|4[6-8]?|5[125-8])|9(?:0[1-3]|[19]|2\\d|3[1-6]|4[0-24-68]|5[2-4]|6[2-6]|72?|8[23]?))|3(?:3(?:2[79]|8[2578])|4(?:0[124-9]|[12]|3[5-8]?|4[24-7]|5[4-68]?|6\\d|7[126]|8[237-9]|9[1-36-8])|5(?:1|2[1245]|3[2-4]?|4[1-46-9]|6[2-4]|7[1-6]|8[2-5]?)|7(?:1[15-8]|2[125]|3[1245]|4[13]|5[124-8]|7[2-57]|8[1-36])|8(?:1|2[125-7]|3[23578]|4[13-6]|5[4-8]?|6[1-357-9]|7[5-8]?|8[4-7]?|9[124])))15)?","9$1",,,[[,"([68]\\d{2})(\\d{3})(\\d{4})","$1-$2-$3",["[68]"]
+,"AR",54,"00","0",,,"0(?:(11|2(?:2(?:02?|[13]|2[13-79]|4[1-6]|5[2457]|6[124-8]|7[1-4]|8[13-6]|9[1-367])|3(?:[06]2|1[467]|2[02-6]|3[13-8]|[49][2-6]|5[2-8]|7)|47[3-578]|6(?:[0136]|2[2-7]|4[6-8]?|5[15-8])|80|9(?:0[1-3]|[19]|2\\d|3[1-6]|4[024-68]?|5[2-4]|6[2-46]|72?|8[23]?))|3(?:3(?:2[79]|8[2578])|4(?:0[124-9]|[12]|3[5-8]?|4[24-7]|5[4-68]?|6\\d|7[126]|8[237-9]|9[1-36-8])|5(?:1|2[1245]|3[2-47]?|4[1-46-9]|6[2-4]|7[1-6]|8[2-5]?)|6[24]|7(?:1[15-8]|2[125]|3[1245]|4[13]|5[14-8]|[69]|7[2-57]|8[1-36])|8(?:1|2[125-7]|3[23578]|4[13-6]|5[4-8]?|6[1-357-9]|7[36-8]?|8[5-8]?|9[124])))15)?","9$1",,,[[,"([68]\\d{2})(\\d{3})(\\d{4})","$1-$2-$3",["[68]"]
 ,"0$1","",0]
 ,[,"(9)(11)(\\d{4})(\\d{4})","$2 15-$3-$4",["911"]
 ,"0$1","",0]
-,[,"(9)(\\d{3})(\\d{3})(\\d{4})","$2 15-$3-$4",["9(?:2[2369]|3[458])","9(?:2(?:2[013]|37|6[14]|9[179])|3(?:4[1235]|5[138]|8[1578]))"]
+,[,"(9)(\\d{3})(\\d{3})(\\d{4})","$2 15-$3-$4",["9(?:2[23689]|3[4-8])","9(?:2(?:2[013]|37|6[01346]|80|9[147-9])|3(?:4[1235]|5[138]|6[24]|7[69]|8[1578]))","9(?:2(?:2[013]|37|6[01346]|80|9(?:[17-9]|4[1379]))|3(?:4[1235]|5(?:[18]|3[0-35689])|6[24]|7[69]|8(?:[15]|7[0-24-9]|8[0-79])))"]
+,"0$1","",0]
+,[,"(9)(\\d{4})(\\d{3})(\\d{3})","$2 15-$3-$4",["93[58]","9(?:3(?:53|8[78]))","9(?:3(?:537|8(?:73|88)))"]
 ,"0$1","",0]
-,[,"(9)(\\d{4})(\\d{2})(\\d{4})","$2 15-$3-$4",["9(?:2[2-469]|3[3-578])","9(?:2(?:2[24-9]|3[0-69]|47|6[25]|9[02-68])|3(?:3[28]|4[046-9]|5[2467]|7[1-578]|8[23469]))"]
+,[,"(9)(\\d{4})(\\d{2})(\\d{4})","$2 15-$3-$4",["9[23]"]
 ,"0$1","",0]
 ,[,"(11)(\\d{4})(\\d{4})","$1 $2-$3",["1"]
 ,"0$1","",0]
-,[,"(\\d{3})(\\d{3})(\\d{4})","$1 $2-$3",["2(?:2[013]|37|6[14]|9[179])|3(?:4[1235]|5[138]|8[1578])"]
+,[,"(\\d{3})(\\d{3})(\\d{4})","$1 $2-$3",["2(?:2[013]|37|6[01346]|80|9[147-9])|3(?:4[1235]|5[138]|6[24]|7[69]|8[1578])","2(?:2[013]|37|6[01346]|80|9(?:[17-9]|4[1379]))|3(?:4[1235]|5(?:[18]|3[0-35689])|6[24]|7[69]|8(?:[15]|7[0-24-9]|8[0-79]))"]
+,"0$1","",0]
+,[,"(\\d{4})(\\d{3})(\\d{3})","$1 $2-$3",["3(?:53|8[78])","3(?:537|8(?:73|88))"]
 ,"0$1","",0]
 ,[,"(\\d{4})(\\d{2})(\\d{4})","$1 $2-$3",["[23]"]
 ,"0$1","",0]
@@ -441,13 +460,17 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ]
 ,[,"(9)(11)(\\d{4})(\\d{4})","$1 $2 $3-$4",["911"]
 ]
-,[,"(9)(\\d{3})(\\d{3})(\\d{4})","$1 $2 $3-$4",["9(?:2[2369]|3[458])","9(?:2(?:2[013]|37|6[14]|9[179])|3(?:4[1235]|5[138]|8[1578]))"]
+,[,"(9)(\\d{3})(\\d{3})(\\d{4})","$1 $2 $3-$4",["9(?:2[23689]|3[4-8])","9(?:2(?:2[013]|37|6[01346]|80|9[147-9])|3(?:4[1235]|5[138]|6[24]|7[69]|8[1578]))","9(?:2(?:2[013]|37|6[01346]|80|9(?:[17-9]|4[1379]))|3(?:4[1235]|5(?:[18]|3[0-35689])|6[24]|7[69]|8(?:[15]|7[0-24-9]|8[0-79])))"]
 ]
-,[,"(9)(\\d{4})(\\d{2})(\\d{4})","$1 $2 $3-$4",["9(?:2[2-469]|3[3-578])","9(?:2(?:2[24-9]|3[0-69]|47|6[25]|9[02-68])|3(?:3[28]|4[046-9]|5[2467]|7[1-578]|8[23469]))"]
+,[,"(9)(\\d{4})(\\d{3})(\\d{3})","$2 15-$3-$4",["93[58]","9(?:3(?:53|8[78]))","9(?:3(?:537|8(?:73|88)))"]
+]
+,[,"(9)(\\d{4})(\\d{2})(\\d{4})","$1 $2 $3-$4",["9[23]"]
 ]
 ,[,"(11)(\\d{4})(\\d{4})","$1 $2-$3",["1"]
 ]
-,[,"(\\d{3})(\\d{3})(\\d{4})","$1 $2-$3",["2(?:2[013]|37|6[14]|9[179])|3(?:4[1235]|5[138]|8[1578])"]
+,[,"(\\d{3})(\\d{3})(\\d{4})","$1 $2-$3",["2(?:2[013]|37|6[01346]|80|9[147-9])|3(?:4[1235]|5[138]|6[24]|7[69]|8[1578])","2(?:2[013]|37|6[01346]|80|9(?:[17-9]|4[1379]))|3(?:4[1235]|5(?:[18]|3[0-35689])|6[24]|7[69]|8(?:[15]|7[0-24-9]|8[0-79]))"]
+]
+,[,"(\\d{4})(\\d{3})(\\d{3})","$1 $2-$3",["3(?:53|8[78])","3(?:537|8(?:73|88))"]
 ]
 ,[,"(\\d{4})(\\d{2})(\\d{4})","$1 $2-$3",["[23]"]
 ]
@@ -456,6 +479,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"810\\d{7}","\\d{10}"]
 ,[,,"810\\d{7}","\\d{10}"]
 ,,[,,"1(?:0[017]|28)","\\d{3}"]
+,[,,"NA","NA"]
 ]
 ,"AS":[,[,,"[5689]\\d{9}","\\d{7}(?:\\d{3})?"]
 ,[,,"6846(?:22|33|44|55|77|88|9[19])\\d{4}","\\d{7}(?:\\d{3})?"]
@@ -469,6 +493,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,"684",[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"911","\\d{3}"]
+,[,,"NA","NA"]
 ]
 ,"AT":[,[,,"[1-9]\\d{3,12}","\\d{3,13}"]
 ,[,,"1\\d{3,12}|(?:2(?:1[467]|2[134-8]|5[2357]|6[1-46-8]|7[1-8]|8[124-7]|9[1458])|3(?:1[1-8]|3[23568]|4[5-7]|5[1378]|6[1-38]|8[3-68])|4(?:2[1-8]|35|63|7[1368]|8[2457])|5(?:12|2[1-8]|3[357]|4[147]|5[12578]|6[37])|6(?:13|2[1-47]|4[1-35-8]|5[468]|62)|7(?:2[1-8]|3[25]|4[13478]|5[68]|6[16-8]|7[1-6]|9[45]))\\d{3,10}","\\d{3,13}"]
@@ -489,10 +514,11 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"5(?:(?:0[1-9]|17)\\d{2,10}|[79]\\d{3,11})|720\\d{6,10}","\\d{5,13}"]
 ,,[,,"1(?:[12]2|33|44)","\\d{3}"]
+,[,,"NA","NA"]
 ]
 ,"AU":[,[,,"[1-578]\\d{5,9}","\\d{6,10}"]
 ,[,,"[237]\\d{8}|8(?:[68]\\d{3}|7[0-6]\\d{2}|9(?:[02-9]\\d{2}|1(?:[0-57-9]\\d|6[0135-9])))\\d{4}","\\d{8,9}"]
-,[,,"14(?:5\\d|71)\\d{5}|4(?:[0-2]\\d|3[0-57-9]|4[47-9]|5[0-37-9]|6[6-9]|7[07-9]|8[7-9])\\d{6}","\\d{9}"]
+,[,,"14(?:5\\d|71)\\d{5}|4(?:[0-2]\\d|3[0-57-9]|4[46-9]|5[0-37-9]|6[6-9]|7[07-9]|8[7-9]|9[89])\\d{6}","\\d{9}"]
 ,[,,"180(?:0\\d{3}|2)\\d{3}","\\d{7,10}"]
 ,[,,"19(?:0[0126]\\d{6}|[13-5]\\d{3}|[679]\\d{5})","\\d{6,10}"]
 ,[,,"13(?:00\\d{2})?\\d{4}","\\d{6,10}"]
@@ -519,6 +545,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,1,,[,,"1(?:3(?:\\d{4}|00\\d{6})|80(?:0\\d{6}|2\\d{3}))","\\d{6,10}"]
 ,[,,"NA","NA"]
 ,,[,,"000|112","\\d{3}"]
+,[,,"NA","NA"]
 ]
 ,"AW":[,[,,"[25-9]\\d{6}","\\d{7}"]
 ,[,,"5(?:2\\d|8[1-9])\\d{4}","\\d{7}"]
@@ -534,6 +561,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"100|911","\\d{3}"]
+,[,,"NA","NA"]
 ]
 ,"AX":[,[,,"[135]\\d{5,9}|[27]\\d{4,9}|4\\d{5,10}|6\\d{7,8}|8\\d{6,9}","\\d{5,12}"]
 ,[,,"18[1-8]\\d{3,9}","\\d{6,12}"]
@@ -547,6 +575,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"10[1-9]\\d{3,7}|2(?:0(?:[16-8]\\d{3,7}|2[14-9]\\d{1,6}|[3-5]\\d{2,7}|9[0-7]\\d{1,6})|9\\d{4,8})|30[1-9]\\d{3,7}|7(?:1\\d{7}|3\\d{8}|5[03-9]\\d{2,7})","\\d{5,10}"]
 ,,[,,"112","\\d{3}"]
+,[,,"NA","NA"]
 ]
 ,"AZ":[,[,,"[1-9]\\d{7,8}","\\d{5,9}"]
 ,[,,"(?:1(?:(?:[28]\\d|9)\\d|02|1[0-589]|3[358]|4[013-79]|5[0-479]|6[02346-9]|7[0-24-8])|2(?:02\\d|1(?:2[0-8]|42|6)|2(?:2[0-79]|3[0-35]|42|[1-35-9]|)|3(?:3[0-58]|[0-24])|4(?:2[0124579]|[1468])|5(?:2[0124579]|5)|6(?:2\\d|3[0128]|[56])|79)|365?\\d|44\\d{2})\\d{5}","\\d{5,9}"]
@@ -573,6 +602,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"1(?:0[123]|12)","\\d{3}"]
+,[,,"NA","NA"]
 ]
 ,"BA":[,[,,"[3-689]\\d{7}","\\d{6,8}"]
 ,[,,"(?:[35]\\d|49)\\d{6}","\\d{6,8}"]
@@ -588,6 +618,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"81\\d{6}","\\d{8}"]
 ,,[,,"12[234]","\\d{3}"]
+,[,,"NA","NA"]
 ]
 ,"BB":[,[,,"[2589]\\d{9}","\\d{7}(?:\\d{3})?"]
 ,[,,"246[2-9]\\d{6}","\\d{7}(?:\\d{3})?"]
@@ -601,9 +632,10 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,"246",[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"[235]11","\\d{3}"]
+,[,,"NA","NA"]
 ]
 ,"BD":[,[,,"[2-79]\\d{5,9}|1\\d{9}|8[0-7]\\d{4,8}","\\d{6,10}"]
-,[,,"2(?:7\\d1|8(?:[026]1|[1379][1-5]|8[1-8])|9(?:0[0-2]|1[1-4]|3[3-5]|5[56]|6[67]|71|8[078]))\\d{4}|3(?:[6-8]1|(?:0[23]|[25][12]|82|416)\\d|(?:31|12?[5-7])\\d{2})\\d{3}|4(?:(?:02|[49]6|[68]1)|(?:0[13]|21\\d?|[23]2|[457][12]|6[28])\\d|(?:23|[39]1)\\d{2}|1\\d{3})\\d{3}|5(?:(?:[457-9]1|62)|(?:1\\d?|2[12]|3[1-3]|52)\\d|61{2})|6(?:[45]1|(?:11|2[15]|[39]1)\\d|(?:[06-8]1|62)\\d{2})|7(?:(?:32|91)|(?:02|31|[67][12])\\d|[458]1\\d{2}|21\\d{3})\\d{3}|8(?:(?:4[12]|[5-7]2|1\\d?)|(?:0|3[12]|[5-7]1|217)\\d)\\d{4}|9(?:[35]1|(?:[024]2|81)\\d|(?:1|[24]1)\\d{2})\\d{3}","\\d{6,9}"]
+,[,,"2(?:7(?:1[0-267]|2[0-289]|3[0-29]|[46][01]|5[1-3]|7[017]|91)|8(?:0[125]|[139][1-6]|2[0157-9]|6[1-35]|7[1-5]|8[1-8])|9(?:0[0-2]|1[1-4]|2[568]|3[3-6]|5[5-7]|6[0167]|7[15]|8[016-8]))\\d{4}|3(?:[6-8]1|(?:0[23]|[25][12]|82|416)\\d|(?:31|12?[5-7])\\d{2})\\d{3}|4(?:(?:02|[49]6|[68]1)|(?:0[13]|21\\d?|[23]2|[457][12]|6[28])\\d|(?:23|[39]1)\\d{2}|1\\d{3})\\d{3}|5(?:(?:[457-9]1|62)|(?:1\\d?|2[12]|3[1-3]|52)\\d|61{2})|6(?:[45]1|(?:11|2[15]|[39]1)\\d|(?:[06-8]1|62)\\d{2})|7(?:(?:32|91)|(?:02|31|[67][12])\\d|[458]1\\d{2}|21\\d{3})\\d{3}|8(?:(?:4[12]|[5-7]2|1\\d?)|(?:0|3[12]|[5-7]1|217)\\d)\\d{4}|9(?:[35]1|(?:[024]2|81)\\d|(?:1|[24]1)\\d{2})\\d{3}","\\d{6,9}"]
 ,[,,"(?:1[13-9]\\d|(?:3[78]|44)[02-9]|6(?:44|6[02-9]))\\d{7}","\\d{10}"]
 ,[,,"80[03]\\d{7}","\\d{10}"]
 ,[,,"NA","NA"]
@@ -622,7 +654,8 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,[,,"NA","NA"]
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
-,,[,,"999","\\d{3}"]
+,,[,,"10[0-2]|999","\\d{3}"]
+,[,,"NA","NA"]
 ]
 ,"BE":[,[,,"[1-9]\\d{7,8}","\\d{8,9}"]
 ,[,,"(?:1[0-69]|[23][2-8]|[49][23]|5\\d|6[013-57-9]|7[18])\\d{6}|8(?:0[1-9]|[1-69]\\d)\\d{5}","\\d{8}"]
@@ -645,6 +678,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"1(?:0[01]|12)","\\d{3}"]
+,[,,"NA","NA"]
 ]
 ,"BF":[,[,,"[2457]\\d{7}","\\d{8}"]
 ,[,,"(?:20(?:49|5[23]|9[016-9])|40(?:4[569]|55|7[0179])|50[34]\\d)\\d{4}","\\d{8}"]
@@ -660,6 +694,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"1[78]","\\d{2}"]
+,[,,"NA","NA"]
 ]
 ,"BG":[,[,,"[23567]\\d{5,7}|[489]\\d{6,8}","\\d{5,9}"]
 ,[,,"2(?:[0-8]\\d{5,6}|9\\d{4,6})|(?:[36]\\d|5[1-9]|8[1-6]|9[1-7])\\d{5,6}|(?:4(?:[124-7]\\d|3[1-6])|7(?:0[1-9]|[1-9]\\d))\\d{4,5}","\\d{5,8}"]
@@ -688,10 +723,11 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"1(?:12|50|6[06])","\\d{3}"]
+,[,,"NA","NA"]
 ]
 ,"BH":[,[,,"[136-9]\\d{7}","\\d{8}"]
 ,[,,"(?:1(?:3[3-6]|6[0156]|7\\d)\\d|6(?:1[16]\\d|6(?:0\\d|3[12]|44)|9(?:69|9[6-9]))|77\\d{2})\\d{4}","\\d{8}"]
-,[,,"(?:3(?:[23469]\\d|77|8[348])\\d|6(?:1[16]\\d|6(?:[06]\\d3[03-9]|44|)|9(?:69|9[6-9]))|77\\d{2})\\d{4}","\\d{8}"]
+,[,,"(?:3(?:[23469]\\d|77|8[348])\\d|6(?:1[16]\\d|6(?:[06]\\d|3[03-9]|44)|9(?:69|9[6-9]))|77\\d{2})\\d{4}","\\d{8}"]
 ,[,,"80\\d{6}","\\d{8}"]
 ,[,,"(?:87|9[014578])\\d{6}","\\d{8}"]
 ,[,,"84\\d{6}","\\d{8}"]
@@ -703,6 +739,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"999","\\d{3}"]
+,[,,"NA","NA"]
 ]
 ,"BI":[,[,,"[27]\\d{7}","\\d{8}"]
 ,[,,"22(?:2[0-7]|[3-5]0)\\d{4}","\\d{8}"]
@@ -718,6 +755,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"11[78]","\\d{3}"]
+,[,,"NA","NA"]
 ]
 ,"BJ":[,[,,"[2689]\\d{7}|7\\d{3}","\\d{4,8}"]
 ,[,,"2(?:02|1[037]|2[45]|3[68])\\d{5}","\\d{8}"]
@@ -733,6 +771,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"11[78]","\\d{3}"]
+,[,,"NA","NA"]
 ]
 ,"BL":[,[,,"[56]\\d{8}","\\d{9}"]
 ,[,,"590(?:2[7-9]|5[12]|87)\\d{4}","\\d{9}"]
@@ -746,6 +785,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"18","\\d{2}"]
+,[,,"NA","NA"]
 ]
 ,"BM":[,[,,"[4589]\\d{9}","\\d{7}(?:\\d{3})?"]
 ,[,,"441(?:2(?:02|23|61|[3479]\\d)|[46]\\d{2}|5(?:4\\d|60|89)|824)\\d{4}","\\d{7}(?:\\d{3})?"]
@@ -759,6 +799,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,"441",[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"911","\\d{3}"]
+,[,,"NA","NA"]
 ]
 ,"BN":[,[,,"[2-578]\\d{6}","\\d{7}"]
 ,[,,"[2-5]\\d{6}","\\d{7}"]
@@ -774,6 +815,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"99[135]","\\d{3}"]
+,[,,"NA","NA"]
 ]
 ,"BO":[,[,,"[23467]\\d{7}","\\d{7,8}"]
 ,[,,"(?:2(?:2\\d{2}|5(?:11|[258]\\d|9[67])|6(?:12|2\\d|9[34])|8(?:2[34]|39|62))|3(?:3\\d{2}|4(?:6\\d|8[24])|8(?:25|42|5[257]|86|9[25])|9(?:2\\d|3[234]|4[248]|5[24]|6[2-6]|7\\d))|4(?:4\\d{2}|6(?:11|[24689]\\d|72)))\\d{4}","\\d{7,8}"]
@@ -792,6 +834,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"11[089]","\\d{3}"]
+,[,,"NA","NA"]
 ]
 ,"BR":[,[,,"[1-9]\\d{7,9}","\\d{8,10}"]
 ,[,,"1[1-9][2-5]\\d{7}|(?:[4689][1-9]|2[12478]|3[1-578]|5[13-5]|7[13-579])[2-5]\\d{7}","\\d{8,10}"]
@@ -812,6 +855,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"(?:400\\d|3003)\\d{4}","\\d{8}"]
 ,[,,"NA","NA"]
 ,,[,,"1(?:12|28|9[023])|911","\\d{3}"]
+,[,,"NA","NA"]
 ]
 ,"BS":[,[,,"[2589]\\d{9}","\\d{7}(?:\\d{3})?"]
 ,[,,"242(?:3(?:02|[236][1-9]|4[0-24-9]|5[0-68]|7[3467]|8[0-4]|9[2-467])|461|502|6(?:12|7[67]|8[78]|9[89])|702)\\d{4}","\\d{7}(?:\\d{3})?"]
@@ -825,6 +869,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,"242",[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"91[19]","\\d{3}"]
+,[,,"NA","NA"]
 ]
 ,"BT":[,[,,"[1-8]\\d{6,7}","\\d{6,8}"]
 ,[,,"(?:2[3-6]|[34][5-7]|5[236]|6[2-46]|7[246]|8[2-4])\\d{5}","\\d{6,7}"]
@@ -843,6 +888,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"11[023]","\\d{3}"]
+,[,,"NA","NA"]
 ]
 ,"BW":[,[,,"[2-79]\\d{6,7}","\\d{7,8}"]
 ,[,,"(?:2(?:4[0-48]|6[0-24]|9[0578])|3(?:1[0235-9]|55|6\\d|7[01]|9[0-57])|4(?:6[03]|7[1267]|9[0-5])|5(?:3[0389]|4[0489]|7[1-47]|88|9[0-49])|6(?:2[1-35]|5[149]|8[067]))\\d{4}","\\d{7}"]
@@ -863,6 +909,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"99[789]","\\d{3}"]
+,[,,"NA","NA"]
 ]
 ,"BY":[,[,,"[12-4]\\d{8}|[89]\\d{9,10}","\\d{7,11}"]
 ,[,,"(?:1(?:5(?:1[1-5]|2\\d|6[1-4]|9[1-7])|6(?:[235]\\d|4[1-7])|7\\d{2})|2(?:1(?:[246]\\d|3[0-35-9]|5[1-9])|2(?:[235]\\d|4[0-8])|3(?:2\\d|3[02-79]|4[024-7]|5[0-7])))\\d{5}","\\d{7,9}"]
@@ -883,6 +930,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"8(?:[01]|20)\\d{8}|902\\d{7}","\\d{10,11}"]
 ,[,,"NA","NA"]
 ,,[,,"1(?:0[123]|12)","\\d{3}"]
+,[,,"NA","NA"]
 ]
 ,"BZ":[,[,,"[2-8]\\d{6}|0\\d{10}","\\d{7}(?:\\d{4})?"]
 ,[,,"[234578][02]\\d{5}","\\d{7}"]
@@ -901,6 +949,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,1,[,,"9(?:0|11)","\\d{2,3}"]
+,[,,"NA","NA"]
 ]
 ,"CA":[,[,,"[2-9]\\d{9}|3\\d{6}","\\d{7}(?:\\d{3})?"]
 ,[,,"(?:2(?:04|26|[48]9|50)|3(?:06|43)|4(?:03|1[68]|38|5[06])|5(?:0[06]|1[49]|79|8[17])|6(?:0[04]|13|47)|7(?:0[059]|80|78)|8(?:[06]7|19|)|90[25])[2-9]\\d{6}|310\\d{4}","\\d{7}(?:\\d{3})?"]
@@ -914,6 +963,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"112|911","\\d{3}"]
+,[,,"NA","NA"]
 ]
 ,"CC":[,[,,"[1458]\\d{5,9}","\\d{6,10}"]
 ,[,,"89162\\d{4}","\\d{8,9}"]
@@ -927,6 +977,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"000|112","\\d{3}"]
+,[,,"NA","NA"]
 ]
 ,"CD":[,[,,"[89]\\d{8}|[1-6]\\d{6}","\\d{7,9}"]
 ,[,,"[1-6]\\d{6}","\\d{7}"]
@@ -945,6 +996,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"NA","NA"]
+,[,,"NA","NA"]
 ]
 ,"CF":[,[,,"[278]\\d{7}","\\d{8}"]
 ,[,,"2[12]\\d{6}","\\d{8}"]
@@ -960,6 +1012,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"NA","NA"]
+,[,,"NA","NA"]
 ]
 ,"CG":[,[,,"[028]\\d{8}","\\d{9}"]
 ,[,,"222[1-589]\\d{5}","\\d{9}"]
@@ -978,8 +1031,9 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,1,[,,"NA","NA"]
+,[,,"NA","NA"]
 ]
-,"CH":[,[,,"[2-9]\\d{8}","\\d{9}"]
+,"CH":[,[,,"[2-9]\\d{8}|860\\d{9}","\\d{9}(?:\\d{3})?"]
 ,[,,"(?:2[12467]|3[1-4]|4[134]|5[12568]|6[12]|[7-9]1)\\d{7}","\\d{9}"]
 ,[,,"7[46-9]\\d{7}","\\d{9}"]
 ,[,,"800\\d{6}","\\d{9}"]
@@ -991,15 +1045,18 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,"0$1","",0]
 ,[,"([89]\\d{2})(\\d{3})(\\d{3})","$1 $2 $3",["8[047]|90"]
 ,"0$1","",0]
+,[,"(\\d{3})(\\d{2})(\\d{3})(\\d{2})(\\d{2})","$1 $2 $3 $4 $5",["860"]
+,"0$1","",0]
 ]
 ,,[,,"NA","NA"]
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"1(?:1[278]|44)","\\d{3}"]
+,[,,"860\\d{9}","\\d{12}"]
 ]
 ,"CI":[,[,,"[02-6]\\d{7}","\\d{8}"]
 ,[,,"(?:2(?:0[023]|1[02357]|[23][045]|4[03-5])|3(?:0[06]|1[069]|[2-4][07]|5[09]|6[08]))\\d{5}","\\d{8}"]
-,[,,"(?:0[1-9]|4[04-9]|5[07]|6[0567])\\d{6}","\\d{8}"]
+,[,,"(?:0[1-9]|4[04-9]|5[057-9]|6[05679])\\d{6}","\\d{8}"]
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
@@ -1011,6 +1068,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,1,[,,"1(?:1[01]|[78]0)","\\d{3}"]
+,[,,"NA","NA"]
 ]
 ,"CK":[,[,,"[2-57]\\d{4}","\\d{5}"]
 ,[,,"(?:2\\d|3[13-7]|4[1-5])\\d{3}","\\d{5}"]
@@ -1026,6 +1084,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"99[689]","\\d{3}"]
+,[,,"NA","NA"]
 ]
 ,"CL":[,[,,"(?:[2-9]|600|123)\\d{7,8}","\\d{6,11}"]
 ,[,,"(?:2|32|41)\\d{7}|(?:3[3-5]|4[235]|5[1-3578]|6[13-57]|7[1-35])\\d{6,7}","\\d{6,9}"]
@@ -1054,6 +1113,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"600\\d{7,8}","\\d{10,11}"]
 ,[,,"NA","NA"]
 ,,[,,"13[123]","\\d{3}"]
+,[,,"NA","NA"]
 ]
 ,"CM":[,[,,"[237-9]\\d{7}","\\d{8}"]
 ,[,,"(?:22|33)\\d{6}","\\d{8}"]
@@ -1072,15 +1132,16 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"1?1[37]","\\d{2,3}"]
+,[,,"NA","NA"]
 ]
 ,"CN":[,[,,"[1-79]\\d{7,11}|8[0-357-9]\\d{6,9}","\\d{4,12}"]
 ,[,,"21\\d{8,10}|(?:10|2[02-57-9]|3(?:11|7[179])|4(?:[15]1|3[12])|5(?:1\\d|2[37]|3[12]|7[13-79]|9[15])|7(?:31|5[457]|6[09]|91)|898)\\d{8}|(?:3(?:1[02-9]|35|49|5\\d|7[02-68]|9[1-68])|4(?:1[02-9]|2[179]|3[3-9]|5[2-9]|6[4789]|7\\d|8[23])|5(?:3[03-9]|4[36]|5\\d|6[1-6]|7[028]|80|9[2-46-9])|6(?:3[1-5]|6[0238]|9[12])|7(?:01|[17]\\d|2[248]|3[04-9]|4[3-6]|5[0-3689]|6[2368]|9[02-9])|8(?:1[236-8]|2[5-7]|[37]\\d|5[1-9]|8[3678]|9[1-7])|9(?:0[1-3689]|1[1-79]|[379]\\d|4[13]|5[1-5]))\\d{7}|80(?:29|6[03578]|7[018]|81)\\d{4}","\\d{4,12}"]
 ,[,,"1(?:3\\d|4[57]|5[0-35-9]|8[0235-9])\\d{8}","\\d{11}"]
 ,[,,"(?:10)?800\\d{7}","\\d{10,12}"]
 ,[,,"16[08]\\d{5}","\\d{8}"]
+,[,,"400\\d{7}","\\d{10}"]
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
-,[,,"400\\d{7}","\\d{10}"]
 ,"CN",86,"00","0",,,"0",,,,[[,"(80\\d{2})(\\d{4})","$1 $2",["80[2678]"]
 ,"0$1","",1]
 ,[,"([48]00)(\\d{3})(\\d{4})","$1 $2 $3",["[48]00"]
@@ -1121,6 +1182,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"(?:4|(?:10)?8)00\\d{7}","\\d{10,12}"]
 ,[,,"NA","NA"]
 ,,[,,"1(?:1[09]|20)","\\d{3}"]
+,[,,"NA","NA"]
 ]
 ,"CO":[,[,,"(?:[13]\\d{0,3}|[24-8])\\d{7}","\\d{7,11}"]
 ,[,,"[124-8][2-9]\\d{6}","\\d{8}"]
@@ -1148,16 +1210,17 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"1(?:1[29]|23|32|56)","\\d{3}"]
+,[,,"NA","NA"]
 ]
-,"CR":[,[,,"[24589]\\d{7,9}","\\d{8,10}"]
+,"CR":[,[,,"[24-9]\\d{7,9}","\\d{8,10}"]
 ,[,,"2[24-7]\\d{6}","\\d{8}"]
-,[,,"57[01]\\d[01]\\d{3}|8[36789]\\d{6}","\\d{8}"]
+,[,,"5(?:0[0-4]|7[01])\\d{5}|[67][01]\\d{6}|8[36-9]\\d{6}","\\d{8}"]
 ,[,,"800\\d{7}","\\d{10}"]
 ,[,,"90[059]\\d{7}","\\d{10}"]
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
-,[,,"40(?:00\\d{4}|10[0-3]\\d{3}|2(?:00\\d|900)\\d{2})","\\d{8}"]
-,"CR",506,"00",,,,"(1900)",,,,[[,"(\\d{4})(\\d{4})","$1 $2",["[245]|8[3-9]"]
+,[,,"40(?:00\\d{4}|10[0-3]\\d{3}|2(?:00\\d|900)\\d{2}|3[01]\\d{4}|5\\d{5})","\\d{8}"]
+,"CR",506,"00",,,,"(19(?:0[0-2]|19|77))",,,,[[,"(\\d{4})(\\d{4})","$1 $2",["[24-7]|8[3-9]"]
 ,"","$CC $1",0]
 ,[,"(\\d{3})(\\d{3})(\\d{4})","$1-$2-$3",["[89]0"]
 ,"","$CC $1",0]
@@ -1166,6 +1229,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"112|911","\\d{3}"]
+,[,,"NA","NA"]
 ]
 ,"CU":[,[,,"[2-57]\\d{5,7}","\\d{4,8}"]
 ,[,,"2[1-4]\\d{5,6}|3(?:1\\d{6}|[23]\\d{4,6})|4(?:[125]\\d{5,6}|[36]\\d{6}|[78]\\d{4,6})|7\\d{6,7}","\\d{4,8}"]
@@ -1186,6 +1250,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"10[56]","\\d{3}"]
+,[,,"NA","NA"]
 ]
 ,"CV":[,[,,"[259]\\d{6}","\\d{7}"]
 ,[,,"2(?:2[1-7]|3[0-8]|4[12]|5[1256]|6\\d|7[1-3]|8[1-5])\\d{4}","\\d{7}"]
@@ -1201,6 +1266,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"13[012]","\\d{3}"]
+,[,,"NA","NA"]
 ]
 ,"CY":[,[,,"[257-9]\\d{7}","\\d{8}"]
 ,[,,"2[2-6]\\d{6}","\\d{8}"]
@@ -1216,6 +1282,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"(?:50|77)\\d{6}","\\d{8}"]
 ,,[,,"1(?:12|99)","\\d{3}"]
+,[,,"NA","NA"]
 ]
 ,"CX":[,[,,"[1458]\\d{5,9}","\\d{6,10}"]
 ,[,,"89164\\d{4}","\\d{8,9}"]
@@ -1229,6 +1296,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"000|112","\\d{3}"]
+,[,,"NA","NA"]
 ]
 ,"CZ":[,[,,"[2-9]\\d{8}","\\d{9}"]
 ,[,,"2\\d{8}|(?:3[1257-9]|4[16-9]|5[13-9])\\d{7}","\\d{9}"]
@@ -1244,10 +1312,11 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"9(?:5[056]|7[234])\\d{6}","\\d{9}"]
 ,,[,,"1(?:12|5[058])","\\d{3}"]
+,[,,"NA","NA"]
 ]
 ,"DE":[,[,,"[1-35-9]\\d{3,14}|4(?:[0-8]\\d{4,12}|9(?:4[1-8]|[0-35-7]\\d)\\d{2,7})","\\d{2,15}"]
 ,[,,"[246]\\d{5,13}|3(?:[03-9]\\d{4,13}|2\\d{9})|5(?:0[2-8]|[1256]\\d|[38][0-8]|4\\d{0,2}|[79][0-7])\\d{3,11}|7(?:0[2-8]|[1-9]\\d)\\d{3,10}|8(?:0[2-9]|[1-9]\\d)\\d{3,10}|9(?:0[6-9]|[1-9]\\d)\\d{3,10}","\\d{2,15}"]
-,[,,"1(?:5\\d{9}|7(?:[0-57-9]|6\\d)\\d{7}|6(?:[02]\\d{7,8}|3\\d{7}))","\\d{10,11}"]
+,[,,"1(?:5[0-2579]\\d{8}|6[023]\\d{7,8}|7(?:[0-57-9]\\d?|6\\d)\\d{7})","\\d{10,11}"]
 ,[,,"800\\d{7,9}","\\d{10,12}"]
 ,[,,"900(?:[135]\\d{6}|9\\d{7})","\\d{10,11}"]
 ,[,,"180\\d{5,11}","\\d{8,14}"]
@@ -1272,6 +1341,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"11[02]","\\d{3}"]
+,[,,"NA","NA"]
 ]
 ,"DJ":[,[,,"[1-8]\\d{5}","\\d{6}"]
 ,[,,"(?:1[05]|[2-5]\\d)\\d{4}","\\d{6}"]
@@ -1287,6 +1357,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"1[78]","\\d{2}"]
+,[,,"NA","NA"]
 ]
 ,"DK":[,[,,"[2-9]\\d{7}","\\d{8}"]
 ,[,,"(?:[2-7]\\d|8[126-9]|9[6-9])\\d{6}","\\d{8}"]
@@ -1302,6 +1373,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"112","\\d{3}"]
+,[,,"NA","NA"]
 ]
 ,"DM":[,[,,"[57-9]\\d{9}","\\d{7}(?:\\d{3})?"]
 ,[,,"767(?:2(?:55|66)|4(?:2[01]|4[0-25-9])|50[0-4])\\d{4}","\\d{7}(?:\\d{3})?"]
@@ -1315,6 +1387,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,"767",[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"333|9(?:11|99)","\\d{3}"]
+,[,,"NA","NA"]
 ]
 ,"DO":[,[,,"[589]\\d{9}","\\d{7}(?:\\d{3})?"]
 ,[,,"8(?:[04]9[2-9]\\d{6}|29(?:2(?:[0-59]\\d|6[04-9]|7[0-27]|8[0237-9])|3(?:[0-35-9]\\d|4[7-9])|[45]\\d{2}|6(?:[0-27-9]\\d|[3-5][1-9]|6[0135-8])|7(?:0[013-9]|[1-37]\\d|4[1-35689]|5[1-4689]|6[1-57-9]|8[1-79]|9[1-8])|8(?:0[146-9]|1[0-48]|[248]\\d|3[1-79]|5[01589]|6[013-68]|7[124-8]|9[0-8])|9(?:[0-24]\\d|3[02-46-9]|5[0-79]|60|7[0169]|8[57-9]|9[02-9]))\\d{4})","\\d{7}(?:\\d{3})?"]
@@ -1328,6 +1401,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,"8[024]9",[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"112|911","\\d{3}"]
+,[,,"NA","NA"]
 ]
 ,"DZ":[,[,,"(?:[1-4]|[5-9]\\d)\\d{7}","\\d{8,9}"]
 ,[,,"(?:1\\d|2[014-79]|3[0-8]|4[0135689])\\d{6}|9619\\d{5}","\\d{8,9}"]
@@ -1348,6 +1422,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"1[47]","\\d{2}"]
+,[,,"NA","NA"]
 ]
 ,"EC":[,[,,"[2-9]\\d{7}|1\\d{9,10}","\\d{7,11}"]
 ,[,,"[2-7][2-7]\\d{6}","\\d{7,8}"]
@@ -1375,6 +1450,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"1(?:0[12]|12)|911","\\d{3}"]
+,[,,"NA","NA"]
 ]
 ,"EE":[,[,,"[3-9]\\d{6,7}|800\\d{6,7}","\\d{7,10}"]
 ,[,,"(?:3[23589]|4(?:0\\d|[3-8])|6\\d|7[1-9]|88)\\d{5}","\\d{7,8}"]
@@ -1397,6 +1473,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"800[2-9]\\d{3}","\\d{7}"]
 ,[,,"NA","NA"]
 ,,[,,"11[02]","\\d{3}"]
+,[,,"NA","NA"]
 ]
 ,"EG":[,[,,"1\\d{4,9}|[2456]\\d{8}|3\\d{7}|[89]\\d{8,9}","\\d{5,10}"]
 ,[,,"(?:1[35][23]|2[23]\\d|3\\d|4(?:0[2-4]|[578][23]|64)|5(?:0[234]|[57][23])|6[24-689]3|8(?:[28][2-4]|42|6[23])|9(?:[25]2|3[24]|6[23]|7[2-4]))\\d{6}|1[69]\\d{3}","\\d{5,9}"]
@@ -1419,6 +1496,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"1(?:2[23]|80)","\\d{3}"]
+,[,,"NA","NA"]
 ]
 ,"ER":[,[,,"[178]\\d{6}","\\d{6,7}"]
 ,[,,"1(?:1[12568]|20|40|55|6[146])\\d{4}|8\\d{6}","\\d{6,7}"]
@@ -1434,6 +1512,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"NA","NA"]
+,[,,"NA","NA"]
 ]
 ,"ES":[,[,,"[5-9]\\d{8}","\\d{9}"]
 ,[,,"(?:8(?:[13]0|[28][0-8]|[47][1-9]|5[01346-9]|6[0457-9])|9(?:[1238][0-8]|[47][1-9]|[56]\\d))\\d{6}","\\d{9}"]
@@ -1449,6 +1528,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"51\\d{7}","\\d{9}"]
 ,,[,,"0(?:61|8[05]|9[12])|112","\\d{3}"]
+,[,,"NA","NA"]
 ]
 ,"ET":[,[,,"[1-59]\\d{8}","\\d{7,9}"]
 ,[,,"(?:11(?:1(?:1[124]|2[2-57]|3[1-5]|5[5-8]|8[6-8])|2(?:13|3[6-8]|5[89]|7[05-9]|8[2-6])|3(?:2[01]|3[0-289]|4[1289]|7[1-4]|87)|4(?:1[69]|3[2-49]|4[0-23]|6[5-8])|5(?:1[57]|44|5[0-4])|6(?:18|2[69]|4[5-7]|5[1-5]|6[0-59]|8[015-8]))|2(?:2(?:11[1-9]|22[0-7]|33\\d|44[1467]|66[1-68])|5(?:11[124-6]|33[2-8]|44[1467]|55[14]|66[1-3679]|77[124-79]|880))|3(?:3(?:11[0-46-8]|22[0-6]|33[0134689]|44[04]|55[0-6]|66[01467])|4(?:44[0-8]|55[0-69]|66[0-3]|77[1-5]))|4(?:6(?:22[0-24-7]|33[1-5]|44[13-69]|55[14-689]|660|88[1-4])|7(?:11[1-9]|22[1-9]|33[13-7]|44[13-6]|55[1-689]))|5(?:7(?:227|55[05]|(?:66|77)[14-8])|8(?:11[149]|22[013-79]|33[0-68]|44[013-8]|550|66[1-5]|77\\d)))\\d{4}","\\d{7,9}"]
@@ -1464,6 +1544,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"9(?:11?|[23]|9[17])","\\d{2,3}"]
+,[,,"NA","NA"]
 ]
 ,"FI":[,[,,"1\\d{4,11}|[2-9]\\d{4,10}","\\d{5,12}"]
 ,[,,"1(?:[3569][1-8]\\d{3,9}|[47]\\d{5,10})|2[1-8]\\d{3,9}|3(?:[1-8]\\d{3,9}|9\\d{4,8})|[5689][1-8]\\d{3,9}","\\d{5,12}"]
@@ -1484,6 +1565,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,1,,[,,"NA","NA"]
 ,[,,"10[1-9]\\d{3,7}|2(?:0(?:[16-8]\\d{3,7}|2[14-9]\\d{1,6}|[3-5]\\d{2,7}|9[0-7]\\d{1,6})|9\\d{4,8})|30[1-9]\\d{3,7}|7(?:1\\d{7}|3\\d{8}|5[03-9]\\d{2,7})","\\d{5,10}"]
 ,,[,,"112","\\d{3}"]
+,[,,"NA","NA"]
 ]
 ,"FJ":[,[,,"[36-9]\\d{6}|0\\d{10}","\\d{7}(?:\\d{4})?"]
 ,[,,"(?:3[0-5]|6[25-7]|8[58])\\d{5}","\\d{7}"]
@@ -1502,6 +1584,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,1,[,,"91[17]","\\d{3}"]
+,[,,"NA","NA"]
 ]
 ,"FK":[,[,,"[2-7]\\d{4}","\\d{5}"]
 ,[,,"[2-47]\\d{4}","\\d{5}"]
@@ -1515,6 +1598,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"999","\\d{3}"]
+,[,,"NA","NA"]
 ]
 ,"FM":[,[,,"[39]\\d{6}","\\d{7}"]
 ,[,,"3[2357]0[1-9]\\d{3}|9[2-6]\\d{5}","\\d{7}"]
@@ -1530,6 +1614,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"911|320221","\\d{3}(?:\\d{3})?"]
+,[,,"NA","NA"]
 ]
 ,"FO":[,[,,"[2-9]\\d{5}","\\d{6}"]
 ,[,,"(?:20|[3-4]\\d|8[19])\\d{4}","\\d{6}"]
@@ -1545,6 +1630,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"112","\\d{3}"]
+,[,,"NA","NA"]
 ]
 ,"FR":[,[,,"[124-9]\\d{8}|3\\d{3}(?:\\d{5})?","\\d{4}(?:\\d{5})?"]
 ,[,,"[1-5]\\d{8}","\\d{9}"]
@@ -1563,17 +1649,18 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"3\\d{3}","\\d{4}"]
 ,[,,"NA","NA"]
 ,,[,,"1(?:[578]|12)","\\d{2,3}"]
+,[,,"NA","NA"]
 ]
-,"GA":[,[,,"[4-9]\\d{5}|0\\d{7}","\\d{6,8}"]
-,[,,"(?:4(?:[04-8]\\d|2[04])|(?:5[04-689]|6[024-9]|7\\d|8[236]|9[02368])\\d)\\d{3}","\\d{6}"]
+,"GA":[,[,,"[12]\\d{6}|0\\d{7}","\\d{6,8}"]
+,[,,"(?:1(?:4[4-8]|7\\d)|2(?:4[02]|5[04-689]|6[024-79]|8[236]|9[02368]))\\d{4}","\\d{6,7}"]
 ,[,,"0(?:5(?:0[89]|3[0-4]|8[0-26]|9[238])|6(?:0[3-7]|1[01]|2[0-7]|6[0-589]|71|83|9[57])|7(?:1[2-5]|2[89]|3[35-9]|4[01]|5[0-347-9]|[67]\\d|8[457-9]|9[0146]))\\d{4}","\\d{8}"]
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
-,"GA",241,"00",,,,,,,,[[,"(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3",["[4-9]"]
-,"","",0]
+,"GA",241,"00","0",,,"0",,,,[[,"(\\d)(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",["[12]"]
+,"0$1","",0]
 ,[,"(0\\d)(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",["0"]
 ,"","",0]
 ]
@@ -1581,6 +1668,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,1,[,,"1730|18|13\\d{2}","\\d{2,4}"]
+,[,,"NA","NA"]
 ]
 ,"GB":[,[,,"\\d{7,10}","\\d{4,10}"]
 ,[,,"2(?:0[01378]|3[0189]|4[017]|8[0-46-9]|9[012])\\d{7}|1(?:(?:1(?:3[0-48]|[46][0-4]|5[012789]|7[0-39]|8[01349])|21[0-7]|31[0-8]|[459]1\\d|61[0-46-9]))\\d{6}|1(?:2(?:0[024-9]|2[3-9]|3[3-79]|4[1-689]|[58][02-9]|6[0-4789]|7[013-9]|9\\d)|3(?:0\\d|[25][02-9]|3[02-579]|[468][0-46-9]|7[1235679]|9[24578])|4(?:0[03-9]|[28][02-5789]|[37]\\d|4[02-69]|5[0-8]|[69][0-79])|5(?:0[1235-9]|2[024-9]|3[015689]|4[02-9]|5[03-9]|6\\d|7[0-35-9]|8[0-468]|9[0-5789])|6(?:0[034689]|2[0-35689]|[38][013-9]|4[1-467]|5[0-69]|6[13-9]|7[0-8]|9[0124578])|7(?:0[0246-9]|2\\d|3[023678]|4[03-9]|5[0-46-9]|6[013-9]|7[0-35-9]|8[024-9]|9[02-9])|8(?:0[35-9]|2[1-5789]|3[02-578]|4[0-578]|5[124-9]|6[2-69]|7\\d|8[02-9]|9[02569])|9(?:0[02-589]|2[02-689]|3[1-5789]|4[2-9]|5[0-579]|6[234789]|7[0124578]|8\\d|9[2-57]))\\d{6}|1(?:2(?:0(?:46[1-4]|87[2-9])|545[1-79]|76(?:2\\d|3[1-8]|6[1-6])|9(?:7(?:2[0-4]|3[2-5])|8(?:2[2-8]|7[0-4789]|8[345])))|3(?:638[2-5]|647[23]|8(?:47[04-9]|64[015789]))|4(?:044[1-7]|20(?:2[23]|8\\d)|6(?:0(?:30|5[2-57]|6[1-8]|7[2-8])|140)|8(?:052|87[123]))|5(?:24(?:3[2-79]|6\\d)|276\\d|6(?:26[06-9]|686))|6(?:06(?:4\\d|7[4-79])|295[567]|35[34]\\d|47(?:24|61)|59(?:5[08]|6[67]|74)|955[0-4])|7(?:26(?:6[13-9]|7[0-7])|442\\d|50(?:2[0-3]|[3-68]2|76))|8(?:27[56]\\d|37(?:5[2-5]|8[239])|84(?:3[2-58]))|9(?:0(?:0(?:6[1-8]|85)|52\\d)|3583|4(?:66[1-8]|9(?:2[01]|81))|63(?:23|3[1-4])|9561))\\d{3}|176888[234678]\\d{2}|16977[23]\\d{3}","\\d{4,10}"]
@@ -1615,6 +1703,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,1,,[,,"NA","NA"]
 ,[,,"(?:3[0347]|55)\\d{8}","\\d{10}"]
 ,,[,,"112|999","\\d{3}"]
+,[,,"NA","NA"]
 ]
 ,"GD":[,[,,"[4589]\\d{9}","\\d{7}(?:\\d{3})?"]
 ,[,,"473(?:2(?:3[0-2]|69)|3(?:2[89]|86)|4(?:[06]8|3[5-9]|4[0-49]|5[5-79]|68|73|90)|63[68]|7(?:58|84)|938)\\d{4}","\\d{7}(?:\\d{3})?"]
@@ -1628,6 +1717,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,"473",[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"911","\\d{3}"]
+,[,,"NA","NA"]
 ]
 ,"GE":[,[,,"[3458]\\d{8}","\\d{6,9}"]
 ,[,,"(?:3(?:[256]\\d|4[124-9]|7[0-4])|4(?:1\\d|2[2-7]|3[1-79]|4[2-8]|7[239]|9[1-7]))\\d{6}","\\d{6,9}"]
@@ -1646,6 +1736,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"0(?:11|22|33)|1(?:1[123]|22)","\\d{3}"]
+,[,,"NA","NA"]
 ]
 ,"GF":[,[,,"[56]\\d{8}","\\d{9}"]
 ,[,,"594(?:10|2[012457-9]|3[0-57-9]|4[3-9]|5[7-9]|6[0-3]|9[014])\\d{4}","\\d{9}"]
@@ -1661,6 +1752,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"1[578]","\\d{2}"]
+,[,,"NA","NA"]
 ]
 ,"GG":[,[,,"[135789]\\d{6,9}","\\d{6,10}"]
 ,[,,"1481\\d{6}","\\d{6,10}"]
@@ -1674,6 +1766,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"(?:3[0347]|55)\\d{8}","\\d{10}"]
 ,,[,,"112|999","\\d{3}"]
+,[,,"NA","NA"]
 ]
 ,"GH":[,[,,"[235]\\d{6,8}","\\d{7,9}"]
 ,[,,"3(?:0[237]\\d|[167](?:2[0-6]|7\\d)|2(?:2[0-5]|7\\d)|3(?:2[0-37]|7\\d)|4(?:[27]\\d|30)|5(?:2[0-7]|7\\d)|8(?:2[0-2]|7\\d)|9(?:20|7\\d))\\d{5}","\\d{7,9}"]
@@ -1689,6 +1782,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"19[123]|999","\\d{3}"]
+,[,,"NA","NA"]
 ]
 ,"GI":[,[,,"[2568]\\d{7}","\\d{8}"]
 ,[,,"2(?:00\\d|16[0-7]|22[2457])\\d{4}","\\d{8}"]
@@ -1702,6 +1796,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"1(?:12|9[09])","\\d{3}"]
+,[,,"NA","NA"]
 ]
 ,"GL":[,[,,"[1-689]\\d{5}","\\d{6}"]
 ,[,,"(?:19|3[1-6]|6[14689]|8[14-79]|9\\d)\\d{4}","\\d{6}"]
@@ -1717,6 +1812,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"112","\\d{3}"]
+,[,,"NA","NA"]
 ]
 ,"GM":[,[,,"[3-9]\\d{6}","\\d{7}"]
 ,[,,"(?:4(?:[23]\\d{2}|4(?:1[024679]|[6-9]\\d))|5(?:54[0-7]|6(?:[67]\\d)|7(?:1[04]|2[035]|3[58]|48))|8\\d{3})\\d{3}","\\d{7}"]
@@ -1732,21 +1828,23 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"1?1[678]","\\d{2,3}"]
+,[,,"NA","NA"]
 ]
 ,"GN":[,[,,"[3567]\\d{7}","\\d{8}"]
 ,[,,"30(?:24|3[12]|4[1-35-7]|5[13]|6[189]|[78]1|9[1478])\\d{4}","\\d{8}"]
-,[,,"55\\d{6}|6(?:0(?:2\\d|3[3467]|5[2457-9])|[24578]\\d{2}|3(?:[14]0|35))\\d{4}","\\d{8}"]
-,[,,"NA","NA"]
+,[,,"55\\d{6}|6(?:0(?:2[0-35-9]|3[3467]|5[2457-9])|[24578]\\d{2}|3(?:[14]0|35))\\d{4}","\\d{8}"]
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
+,[,,"78\\d{6}","\\d{8}"]
 ,"GN",224,"00",,,,,,,,[[,"(\\d{2})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",,"","",0]
 ]
 ,,[,,"NA","NA"]
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"NA","NA"]
+,[,,"NA","NA"]
 ]
 ,"GP":[,[,,"[56]\\d{8}","\\d{9}"]
 ,[,,"590(?:1[12]|2[0-68]|3[28]|4[126-8]|5[067]|6[018]|[89]\\d)\\d{4}","\\d{9}"]
@@ -1762,6 +1860,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,1,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"1[578]","\\d{2}"]
+,[,,"NA","NA"]
 ]
 ,"GQ":[,[,,"[23589]\\d{8}","\\d{9}"]
 ,[,,"3(?:3(?:3\\d[7-9]|[0-24-9]\\d[46])|5\\d{2}[7-9])\\d{4}","\\d{9}"]
@@ -1780,6 +1879,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"NA","NA"]
+,[,,"NA","NA"]
 ]
 ,"GR":[,[,,"[26-9]\\d{9}","\\d{10}"]
 ,[,,"2(?:1\\d{2}|2(?:3[1-8]|4[1-7]|5[1-4]|6[1-8]|7[1-5]|[289][1-9])|3(?:1\\d|2[1-5]|3[1-4]|[45][1-3]|7[1-7]|8[1-6]|9[1-79])|4(?:1\\d|2[1-8]|3[1-4]|4[13-5]|6[1-578]|9[1-5])|5(?:1\\d|2[1-3]|4[124]|5[1-6]|[39][1-4])|6(?:1\\d|3[124]|4[1-7]|5[13-9]|[269][1-6]|7[14]|8[1-5])|7(?:1\\d|2[1-5]|3[1-6]|4[1-7]|5[1-57]|6[134]|9[15-7])|8(?:1\\d|2[1-5]|[34][1-4]|9[1-7]))\\d{6}","\\d{10}"]
@@ -1800,6 +1900,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"1(?:00|12|66|99)","\\d{3}"]
+,[,,"NA","NA"]
 ]
 ,"GT":[,[,,"[2-7]\\d{7}|1[89]\\d{9}","\\d{8}(?:\\d{3})?"]
 ,[,,"[267][2-9]\\d{6}","\\d{8}"]
@@ -1818,6 +1919,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"1(?:10|2[03])","\\d{3}"]
+,[,,"NA","NA"]
 ]
 ,"GU":[,[,,"[5689]\\d{9}","\\d{7}(?:\\d{3})?"]
 ,[,,"671(?:3(?:00|3[39]|4[349]|55|6[26])|4(?:56|7[1-9]|8[23678])|5(?:55|6[2-5]|88)|6(?:3[2-578]|4[24-9]|5[34]|78|8[5-9])|7(?:[079]7|2[0167]|3[45]|8[789])|8(?:[2-5789]8|6[48])|9(?:2[29]|6[79]|7[179]|8[789]|9[78]))\\d{4}","\\d{7}(?:\\d{3})?"]
@@ -1831,6 +1933,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,"671",[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"911","\\d{3}"]
+,[,,"NA","NA"]
 ]
 ,"GW":[,[,,"[3567]\\d{6}","\\d{7}"]
 ,[,,"3(?:2[0125]|3[1245]|4[12]|5[1-4]|70|9[1-467])\\d{4}","\\d{7}"]
@@ -1846,6 +1949,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"11[378]","\\d{3}"]
+,[,,"NA","NA"]
 ]
 ,"GY":[,[,,"[2-4679]\\d{6}","\\d{7}"]
 ,[,,"(?:2(?:1[6-9]|2[0-35-9]|3[1-4]|5[3-9]|6\\d|7[0-24-79])|3(?:2[25-9]|3\\d)|4(?:4[0-24]|5[56])|77[1-57])\\d{4}","\\d{7}"]
@@ -1861,6 +1965,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"91[123]","\\d{3}"]
+,[,,"NA","NA"]
 ]
 ,"HK":[,[,,"[235-7]\\d{7}|8\\d{7,8}|9\\d{7,10}","\\d{8,11}"]
 ,[,,"[23]\\d{7}","\\d{8}"]
@@ -1881,6 +1986,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"112|99[29]","\\d{3}"]
+,[,,"NA","NA"]
 ]
 ,"HN":[,[,,"[237-9]\\d{7}","\\d{8}"]
 ,[,,"2(?:2(?:0[019]|1[1-36]|[23]\\d|4[056]|5[57]|9[01])|4(?:2|3-59]|3[13-689]|4[0-68]|5[1-35])|5(?:4[3-5]|5\\d|6[56]|74)|6(?:4[0-378]|[56]\\d|[78][0-8]|9[01])|7(?:6[46-9]|7[02-9]|8[34])|8(?:79|8[0-35789]|9[1-57-9]))\\d{4}","\\d{8}"]
@@ -1896,6 +2002,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"199","\\d{3}"]
+,[,,"NA","NA"]
 ]
 ,"HR":[,[,,"[1-7]\\d{5,8}|[89]\\d{6,11}","\\d{6,12}"]
 ,[,,"(?:1|6[029])\\d{7}|(?:2[0-3]|3[1-5]|4[02-47-9]|5[1-3])\\d{6}","\\d{6,9}"]
@@ -1930,6 +2037,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"1(?:12|92)|9[34]","\\d{2,3}"]
+,[,,"NA","NA"]
 ]
 ,"HT":[,[,,"[2-489]\\d{7}","\\d{8}"]
 ,[,,"2(?:[24]\\d|5[1-5]|94)\\d{5}","\\d{8}"]
@@ -1945,6 +2053,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"11[48]","\\d{3}"]
+,[,,"NA","NA"]
 ]
 ,"HU":[,[,,"[1-9]\\d{7,8}","\\d{6,9}"]
 ,[,,"(?:1\\d|2(?:1\\d|[2-9])|3[2-7]|4[24-9]|5[2-79]|6[23689]|7(?:1\\d|[2-9])|8[2-57-9]|9[2-69])\\d{6}","\\d{6,9}"]
@@ -1963,6 +2072,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"1(?:0[457]|12)","\\d{3}"]
+,[,,"NA","NA"]
 ]
 ,"ID":[,[,,"[1-9]\\d{6,10}","\\d{5,11}"]
 ,[,,"2[124]\\d{7,8}|(?:2(?:[35][1-4]|6[0-8]|7[1-6]|8\\d|9[1-8])|3(?:1|2[1-578]|3[1-68]|4[1-3]|5[1-8]|6[1-3568]|7[0-46]|8\\d)|4(?:0[1-589]|1[01347-9]|2[0-36-8]|3[0-24-68]|5[1-378]|6[1-5]|7[134]|8[1245])|5(?:1[1-35-9]|2[25-8]|3[1246-9]|4[1-3589]|5[1-46]|6[1-8])|6(?:19?|[25]\\d|3[1-469]|4[1-6])|7(?:1[1-46-9]|2[14-9]|[36]\\d|4[1-8]|5[1-9]|7[0-36-9])|9(?:0[12]|1[0134-8]|2[0-479]|5[125-8]|6[23679]|7[159]|8[01346]))\\d{5,8}","\\d{5,10}"]
@@ -1989,6 +2099,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"11[02389]","\\d{3}"]
+,[,,"NA","NA"]
 ]
 ,"IE":[,[,,"[124-9]\\d{6,9}","\\d{5,10}"]
 ,[,,"1\\d{7,8}|2(?:1\\d{6,7}|[24-9]\\d{5}|3\\d{5,7})|4(?:0[24]\\d{5}|[1269]\\d{7}|[34]\\d{5,7}|5\\d{6}|7\\d{5}|8[0-46-9]\\d{7})|5(?:0[45]\\d{5}|1\\d{6}|2\\d{5,7}|[3679]\\d{7}|8\\d{5})|6(?:1\\d{6}|4\\d{5,7}|[237-9]\\d{5}|[56]\\d{7})|7[14]\\d{7}|9(?:1\\d{6}|[04]\\d{7}|[3-9]\\d{5})","\\d{5,10}"]
@@ -2021,10 +2132,11 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"18[59]0\\d{6}","\\d{10}"]
 ,[,,"818\\d{6}","\\d{9}"]
 ,,[,,"112|999","\\d{3}"]
+,[,,"NA","NA"]
 ]
 ,"IL":[,[,,"[17]\\d{6,9}|[2-589]\\d{3}(?:\\d{3,6})?|6\\d{3}","\\d{4,10}"]
 ,[,,"(?:[2-489]|7[2-46-8])\\d{7}","\\d{7,9}"]
-,[,,"5[024679]\\d{7}","\\d{9}"]
+,[,,"5(?:[0246-9]\\d{2}|5(?:22|33|44|5[58]|66|77|88))\\d{5}","\\d{9}"]
 ,[,,"1(?:80[019]\\d{3}|255)\\d{3}","\\d{7,10}"]
 ,[,,"1(?:212|(?:919|200)\\d{2})\\d{4}","\\d{8,10}"]
 ,[,,"1700\\d{6}","\\d{10}"]
@@ -2042,6 +2154,8 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,"$1","",0]
 ,[,"(1212)(\\d{2})(\\d{2})","$1-$2-$3",["121"]
 ,"$1","",0]
+,[,"(1599)(\\d{6})","$1-$2",["15"]
+,"$1","",0]
 ,[,"(\\d{4})","*$1",["[2-689]"]
 ,"$1","",0]
 ]
@@ -2049,6 +2163,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"1700\\d{6}|[2-689]\\d{3}","\\d{4,10}"]
 ,[,,"[2-689]\\d{3}","\\d{4}"]
 ,,[,,"1(?:0[012]|12)","\\d{3}"]
+,[,,"1599\\d{6}","\\d{10}"]
 ]
 ,"IM":[,[,,"[135789]\\d{6,9}","\\d{6,10}"]
 ,[,,"1624\\d{6}","\\d{6,10}"]
@@ -2062,6 +2177,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"3(?:08162\\d|3\\d{5}|4(?:40[49]06|5624\\d)|7(?:0624\\d|2299\\d))\\d{3}|55\\d{8}","\\d{10}"]
 ,,[,,"999","\\d{3}"]
+,[,,"NA","NA"]
 ]
 ,"IN":[,[,,"1\\d{7,12}|[2-9]\\d{9,10}","\\d{6,13}"]
 ,[,,"(?:11|2[02]|33|4[04]|79)[2-6]\\d{7}|80[2-46]\\d{7}|(?:1(?:2[0-249]|3[0-25]|4[145]|[59][14]|6[014]|7[1257]|8[01346])|2(?:1[257]|3[013]|4[01]|5[0137]|6[0158]|78|8[1568]|9[14])|3(?:26|4[1-3]|5[34]|6[01489]|7[02-46]|8[159])|4(?:1[36]|2[1-47]|3[15]|5[12]|6[126-9]|7[0-24-9]|8[013-57]|9[014-7])|5(?:[136][25]|22|4[28]|5[12]|[78]1|9[15])|6(?:12|[2345]1|57|6[13]|7[14]|80)|7(?:12|2[14]|3[134]|4[47]|5[15]|[67]1|88)|8(?:16|2[014]|3[126]|6[136]|7[078]|8[34]|91))[2-6]\\d{6}|(?:(?:1(?:2[35-8]|3[346-9]|4[236-9]|[59][0235-9]|6[235-9]|7[34689]|8[257-9])|2(?:1[134689]|3[24-8]|4[2-8]|5[25689]|6[2-4679]|7[13-79]|8[2-479]|9[235-9])|3(?:01|1[79]|2[1-5]|4[25-8]|5[125689]|6[235-7]|7[157-9]|8[2-467])|4(?:1[14578]|2[5689]|3[2-467]|5[4-7]|6[35]|73|8[2689]|9[2389])|5(?:[16][146-9]|2[14-8]|3[1346]|4[14-69]|5[46]|7[2-4]|8[2-8]|9[246])|6(?:1[1358]|2[2457]|3[2-4]|4[235-7]|5[2-689]|6[24-58]|7[23-689]|8[1-6])|8(?:1[1357-9]|2[235-8]|3[03-57-9]|4[0-24-9]|5\\d|6[2457-9]|7[1-6]|8[1256]|9[2-4]))\\d|7(?:(?:1[013-9]|2[0235-9]|3[2679]|4[1-35689]|5[2-46-9]|[67][02-9]|9\\d)\\d|8(?:2[0-6]|[013-8]\\d)))[2-6]\\d{5}","\\d{6,10}"]
@@ -2096,6 +2212,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"1(?:600\\d{6}|8(?:0(?:0\\d{4,8}|3\\d{9})|6(?:0\\d{7}|[12]\\d{9})))","\\d{8,13}"]
 ,[,,"1860\\d{7}","\\d{11}"]
 ,,[,,"1(?:0[0128]|12|298)|2611","\\d{3,4}"]
+,[,,"NA","NA"]
 ]
 ,"IO":[,[,,"3\\d{6}","\\d{7}"]
 ,[,,"37\\d{5}","\\d{7}"]
@@ -2111,6 +2228,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"NA","NA"]
+,[,,"NA","NA"]
 ]
 ,"IQ":[,[,,"[1-7]\\d{7,9}","\\d{6,10}"]
 ,[,,"1\\d{7}|(?:2[13-5]|3[02367]|4[023]|5[03]|6[026])\\d{6,7}","\\d{6,9}"]
@@ -2131,10 +2249,11 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"NA","NA"]
+,[,,"NA","NA"]
 ]
 ,"IR":[,[,,"[2-6]\\d{4,9}|9(?:[134]\\d{8}|9\\d{2,8})|[178]\\d{9}","\\d{4,10}"]
 ,[,,"2(?:1[2-9]\\d{2,7}|51\\d{3,7})|(?:241|3(?:11|51)|441|5[14]1)\\d{4,7}|(?:3(?:34|41)|6(?:11|52))\\d{6,7}|(?:1(?:[134589][12]|[27][1-4])|2(?:2[189]|[3689][12]|42|5[256]|7[34])|3(?:12|2[1-4]|3[125]|4[24-9]|5[23]|[6-9][12])|4(?:[135-9][12]|2[1-467]|4[2-4])|5(?:12|2[89]|3[1-5]|4[2-8]|[5-7][12]|8[1245])|6(?:12|[347-9][12]|51|6[1-6])|7(?:[13589][12]|2[1289]|4[1-4]|6[1-6]|7[1-3])|8(?:[145][12]|3[124578]|6[1256]|7[1245]))\\d{7}","\\d{5,10}"]
-,[,,"9(?:1\\d|3[124-8])\\d{7}","\\d{10}"]
+,[,,"9(?:1\\d|3[124-9])\\d{7}","\\d{10}"]
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
@@ -2153,10 +2272,11 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"9990\\d{0,6}","\\d{4,10}"]
 ,,[,,"1(?:1[025]|25)","\\d{3}"]
+,[,,"NA","NA"]
 ]
 ,"IS":[,[,,"[4-9]\\d{6}|38\\d{7}","\\d{7,9}"]
 ,[,,"(?:4(?:1[0-245]|2[0-7]|[37][0-8]|4[0245]|5[0-356]|6\\d|8[0-46-8]|9[013-79])|5(?:05|[156]\\d|2[02578]|3[013-6]|4[03-6]|7[0-2578]|8[0-25-9]|9[013-689])|87[23])\\d{4}","\\d{7}"]
-,[,,"38[59]\\d{6}|(?:6(?:1[0-8]|2[0-8]|3[0-27-9]|4[0-29]|5[029]|[67][0-69]|[89]\\d)|7(?:5[057]|7[0-7])|8(?:2[0-5]|[469]\\d|5[1-9]))\\d{4}","\\d{7,9}"]
+,[,,"38[59]\\d{6}|(?:6(?:1[0-8]|3[0-27-9]|4[0-27]|5[0-29]|[67][0-69]|9\\d)|7(?:5[057]|7[0-7])|8(?:2[0-5]|[469]\\d|5[1-9]))\\d{4}","\\d{7,9}"]
 ,[,,"800\\d{4}","\\d{7}"]
 ,[,,"90\\d{5}","\\d{7}"]
 ,[,,"NA","NA"]
@@ -2171,10 +2291,11 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"112","\\d{3}"]
+,[,,"388\\d{6}|(?:6(?:2[0-8]|49|8\\d)|8(?:2[6-9]|[38]\\d|50|7[014-9])|95[48])\\d{4}","\\d{7,9}"]
 ]
-,"IT":[,[,,"[0189]\\d{5,10}|3\\d{8,9}","\\d{6,11}"]
+,"IT":[,[,,"[0189]\\d{5,10}|3(?:[12457-9]\\d{8}|[36]\\d{7,9})","\\d{6,11}"]
 ,[,,"0(?:[26]\\d{4,9}|[13-57-9](?:[0159]\\d{4,8}|[2-46-8]\\d{5,8}))","\\d{6,11}"]
-,[,,"3\\d{8,9}","\\d{9,10}"]
+,[,,"3(?:[12457-9]\\d{8}|6\\d{7,8}|3\\d{7,9})","\\d{9,11}"]
 ,[,,"80(?:0\\d{6}|3\\d{3})","\\d{6,9}"]
 ,[,,"0878\\d{5}|1(?:44|6[346])\\d{6}|89(?:2\\d{3}|9\\d{6})","\\d{6,9}"]
 ,[,,"84[78]\\d{6,7}","\\d{9,10}"]
@@ -2196,6 +2317,8 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,"","",0]
 ,[,"(\\d{3})(\\d{3})(\\d{3,4})","$1 $2 $3",["[13]|8(?:00|4[78]|99)"]
 ,"","",0]
+,[,"(\\d{3})(\\d{4})(\\d{4})","$1 $2 $3",["3"]
+,"","",0]
 ,[,"(\\d{3})(\\d{3,6})","$1 $2",["8(?:03|92)"]
 ,"","",0]
 ]
@@ -2203,6 +2326,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,1,[,,"11[2358]","\\d{3}"]
+,[,,"NA","NA"]
 ]
 ,"JE":[,[,,"[135789]\\d{6,9}","\\d{6,10}"]
 ,[,,"1534\\d{6}","\\d{6,10}"]
@@ -2216,6 +2340,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"3(?:0(?:07(?:35|81)|8901)|3\\d{4}|4(?:4(?:4(?:05|42|69)|703)|5(?:041|800))|7(?:0002|1206))\\d{4}|55\\d{8}","\\d{10}"]
 ,,[,,"112|999","\\d{3}"]
+,[,,"NA","NA"]
 ]
 ,"JM":[,[,,"[589]\\d{9}","\\d{7}(?:\\d{3})?"]
 ,[,,"876(?:5(?:0[12]|1[0-468]|2[35]|63)|6(?:0[1-3579]|1[027-9]|[23]\\d|40|5[06]|6[2-489]|7[05]|8[04]|9[4-9])|7(?:0[2-689]|[1-6]\\d|8[056]|9[45])|9(?:0[1-8]|1[02378]|[2-8]\\d|9[2-468]))\\d{4}","\\d{7}(?:\\d{3})?"]
@@ -2229,43 +2354,49 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,"876",[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"11[09]","\\d{3}"]
+,[,,"NA","NA"]
 ]
 ,"JO":[,[,,"[235-9]\\d{7,8}","\\d{7,9}"]
-,[,,"[2356][2-8]\\d{6}","\\d{7,8}"]
-,[,,"7(?:[1-8]\\d|9[02-9])\\d{6}","\\d{9}"]
+,[,,"(?:2[67]|32|53|6[2-5]|87)\\d{6}","\\d{7,8}"]
+,[,,"7(?:45|5\\d|7[2-79]|8[5-8]|9[035-9])\\d{6}","\\d{9}"]
 ,[,,"80\\d{6}","\\d{8}"]
 ,[,,"900\\d{5}","\\d{8}"]
 ,[,,"85\\d{6}","\\d{8}"]
 ,[,,"70\\d{7}","\\d{9}"]
 ,[,,"NA","NA"]
-,"JO",962,"00","0",,,"0",,,,[[,"(\\d)(\\d{3})(\\d{4})","$1 $2 $3",["[2356]"]
+,"JO",962,"00","0",,,"0",,,,[[,"(\\d)(\\d{3})(\\d{4})","$1 $2 $3",["[2356]|87"]
 ,"(0$1)","",0]
-,[,"(7)(\\d{2})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4 $5",["7[457-9]"]
+,[,"(7)(\\d{4})(\\d{4})","$1 $2 $3",["7[457-9]"]
 ,"0$1","",0]
-,[,"(\\d{3})(\\d{5,6})","$1 $2",["70|[89]"]
+,[,"(\\d{3})(\\d{5,6})","$1 $2",["70|8[0158]|9"]
 ,"0$1","",0]
 ]
-,,[,,"NA","NA"]
+,,[,,"74(?:66|77)\\d{5}","\\d{9}"]
 ,,,[,,"NA","NA"]
-,[,,"8(?:10|[78]\\d)\\d{5}","\\d{8}"]
-,,[,,"112|911","\\d{3}"]
+,[,,"8(?:10|8\\d)\\d{5}","\\d{8}"]
+,,[,,"1(?:12|91)|911","\\d{3}"]
+,[,,"NA","NA"]
 ]
-,"JP":[,[,,"[1-9]\\d{8,9}|0(?:7\\d{5,6}|8\\d{7})","\\d{7,10}"]
+,"JP":[,[,,"[1-9]\\d{8,9}|0(?:3\\d{9}|7\\d{5,7}|8\\d{7})","\\d{7,11}"]
 ,[,,"(?:1(?:1[235-8]|2[3-6]|3[3-9]|4[2-6]|[58][2-8]|6[2-7]|7[2-9]|9[1-9])|2[2-9]\\d|[36][1-9]\\d|4(?:6[02-8]|[2-578]\\d|9[2-59])|5(?:6[1-9]|7[2-8]|[2-589]\\d)|7(?:3[4-9]|4[02-9]|[25-9]\\d)|8(?:3[2-9]|4[5-9]|5[1-9]|8[03-9]|[2679]\\d)|9(?:[679][1-9]|[2-58]\\d))\\d{6}","\\d{9}"]
 ,[,,"(?:[79]0\\d|80[1-9])\\d{7}","\\d{10}"]
-,[,,"120\\d{6}|800\\d{7}|0(?:777(?:[01]\\d{2}|5\\d{3})|882[1245]\\d{4})","\\d{7,10}"]
+,[,,"120\\d{6}|800\\d{7}|0(?:777(?:[01]\\d{2}|5\\d{3}|8\\d{4})|882[1245]\\d{4})","\\d{7,10}"]
 ,[,,"990\\d{6}","\\d{9}"]
 ,[,,"NA","NA"]
 ,[,,"60\\d{7}","\\d{9}"]
-,[,,"50\\d{8}","\\d{10}"]
+,[,,"(?:037|50)\\d{8}","\\d{10,11}"]
 ,"JP",81,"010","0",,,"0",,,,[[,"(\\d{3})(\\d{3})(\\d{3})","$1-$2-$3",["(?:12|57|99)0"]
 ,"0$1","",0]
 ,[,"(\\d{3})(\\d{3})(\\d{4})","$1-$2-$3",["800"]
 ,"0$1","",0]
-,[,"(\\d{3})(\\d{4,5})","$1-$2",["077"]
+,[,"(\\d{3})(\\d{4})","$1-$2",["077"]
+,"0$1","",0]
+,[,"(\\d{3})(\\d{2})(\\d{3,4})","$1-$2-$3",["077"]
 ,"0$1","",0]
 ,[,"(\\d{3})(\\d{2})(\\d{4})","$1-$2-$3",["088"]
 ,"0$1","",0]
+,[,"(\\d{3})(\\d{4})(\\d{4})","$1-$2-$3",["037"]
+,"0$1","",0]
 ,[,"(\\d{2})(\\d{4})(\\d{4})","$1-$2-$3",["[2579]0|80[1-9]"]
 ,"0$1","",0]
 ,[,"(\\d{4})(\\d)(\\d{4})","$1-$2-$3",["1(?:26|3[79]|4[56]|5[4-68]|6[3-5])|5(?:76|97)|499|746|8(?:3[89]|63|47|51)|9(?:49|80|9[16])","1(?:267|3(?:7[247]|9[278])|4(?:5[67]|66)|5(?:47|58|64|8[67])|6(?:3[245]|48|5[4-68]))|5(?:76|97)9|499[2468]|7468|8(?:3(?:8[78]|96)|636|477|51[24])|9(?:496|802|9(?:1[23]|69))","1(?:267|3(?:7[247]|9[278])|4(?:5[67]|66)|5(?:47|58|64|8[67])|6(?:3[245]|48|5[4-68]))|5(?:769|979[2-69])|499[2468]|7468|8(?:3(?:8[78]|96[2457-9])|636[2-57-9]|477|51[24])|9(?:496|802|9(?:1[23]|69))"]
@@ -2282,27 +2413,31 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,"0$1","",0]
 ]
 ,,[,,"20\\d{8}","\\d{10}"]
-,,,[,,"0(?:777(?:[01]\\d{2}|5\\d{3})|882[1245]\\d{4})","\\d{7,9}"]
+,,,[,,"0(?:37\\d{8}|777(?:[01]\\d{2}|5\\d{3}|8\\d{4})|882[1245]\\d{4})","\\d{7,11}"]
 ,[,,"570\\d{6}","\\d{9}"]
 ,1,[,,"11[09]","\\d{3}"]
+,[,,"NA","NA"]
 ]
-,"KE":[,[,,"\\d{6,10}","\\d{4,10}"]
+,"KE":[,[,,"20\\d{4,7}|[4-9]\\d{5,9}","\\d{4,10}"]
 ,[,,"(?:20|4[0-6]|5\\d|6[0-24-9])\\d{4,7}","\\d{4,9}"]
-,[,,"7(?:0[0-5]|[123]\\d|5[0-3]|7[0-5])\\d{6}","\\d{9}"]
-,[,,"8(?:00|88)\\d{6,7}","\\d{9,10}"]
-,[,,"9(?:00|1)\\d{6,7}","\\d{8,10}"]
+,[,,"7(?:0[0-5]|[123]\\d|5[0-4]|7[0-5]|8[6-9])\\d{6}","\\d{9}"]
+,[,,"800[245-8]\\d{5,6}","\\d{9,10}"]
+,[,,"9(?:00[2-578]|11\\d)\\d{5}","\\d{9}"]
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
-,"KE",254,"000","0",,,"0",,,,[[,"(\\d{2})(\\d{4,7})","$1 $2",["[2-6]|91"]
+,"KE",254,"000","0",,,"0",,,,[[,"(\\d{2})(\\d{4,7})","$1 $2",["[24-6]"]
 ,"0$1","",0]
-,[,"(\\d{3})(\\d{6,7})","$1 $2",["[78]|90"]
+,[,"(\\d{3})(\\d{6,7})","$1 $2",["7"]
+,"0$1","",0]
+,[,"(\\d{3})(\\d{3})(\\d{3,4})","$1 $2 $3",["[89]"]
 ,"0$1","",0]
 ]
 ,,[,,"NA","NA"]
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"112|999","\\d{3}"]
+,[,,"NA","NA"]
 ]
 ,"KG":[,[,,"[356-8]\\d{8,9}","\\d{5,10}"]
 ,[,,"(?:3(?:1(?:2\\d|3[1-9]|47|5[02]|6[1-8])|2(?:22|3[0-479]|6[0-7])|4(?:22|5[6-9]|6[0-4])|5(?:22|3[4-7]|59|6[0-5])|6(?:22|5[35-7]|6[0-3])|7(?:22|3[468]|4[1-9]|59|6\\d|7[5-7])|9(?:22|4[1-8]|6[0-8]))|6(?:09|12|2[2-4])\\d)\\d{5}","\\d{5,10}"]
@@ -2323,6 +2458,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"10[123]","\\d{3}"]
+,[,,"NA","NA"]
 ]
 ,"KH":[,[,,"[1-9]\\d{7,9}","\\d{6,10}"]
 ,[,,"(?:2[3-6]|3[2-6]|4[2-4]|[567][2-5])[2-46-9]\\d{5}","\\d{6,8}"]
@@ -2341,6 +2477,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"11[789]|666","\\d{3}"]
+,[,,"NA","NA"]
 ]
 ,"KI":[,[,,"[2-689]\\d{4}","\\d{5}"]
 ,[,,"(?:[234]\\d|50|8[1-5])\\d{3}","\\d{5}"]
@@ -2354,6 +2491,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"99[2349]","\\d{3}"]
+,[,,"NA","NA"]
 ]
 ,"KM":[,[,,"[379]\\d{6}","\\d{7}"]
 ,[,,"7(?:6[0-37-9]|7[0-57-9])\\d{4}","\\d{7}"]
@@ -2369,6 +2507,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"1[78]","\\d{2}"]
+,[,,"NA","NA"]
 ]
 ,"KN":[,[,,"[589]\\d{9}","\\d{7}(?:\\d{3})?"]
 ,[,,"869(?:2(?:29|36)|302|4(?:6[5-9]|70))\\d{4}","\\d{7}(?:\\d{3})?"]
@@ -2382,6 +2521,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,"869",[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"333|9(?:11|99)","\\d{3}"]
+,[,,"NA","NA"]
 ]
 ,"KP":[,[,,"1\\d{9}|[28]\\d{7}","\\d{6,8}|\\d{10}"]
 ,[,,"2\\d{7}|85\\d{6}","\\d{6,8}"]
@@ -2402,6 +2542,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"2(?:[0-24-9]\\d{2}|3(?:[0-79]\\d|8[02-9]))\\d{4}","\\d{8}"]
 ,[,,"NA","NA"]
 ,,[,,"NA","NA"]
+,[,,"NA","NA"]
 ]
 ,"KR":[,[,,"[1-7]\\d{3,9}|8\\d{8}","\\d{4,10}"]
 ,[,,"(?:2|[34][1-3]|5[1-5]|6[1-4])(?:1\\d{2,3}|[2-9]\\d{6,7})","\\d{4,10}"]
@@ -2436,10 +2577,11 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"1(?:5(?:44|66|77|88|99)|6(?:00|44|6[16]|70|88))\\d{4}","\\d{8}"]
 ,,[,,"11[29]","\\d{3}"]
+,[,,"NA","NA"]
 ]
-,"KW":[,[,,"[12569]\\d{6,7}","\\d{7,8}"]
+,"KW":[,[,,"[12569]\\d{6,7}|65816\\d{6}","\\d{7,8}|\\d{11}"]
 ,[,,"(?:18\\d|2(?:[23]\\d{2}|4[1-35-9]\\d|5(?:0[034]|[2-46]\\d|5[1-3]|7[1-7])))\\d{4}","\\d{7,8}"]
-,[,,"(?:5(?:0[0-26]|5\\d)|6(?:0[034679]|5[015-9]|6\\d|7[067]|9[69])|9(?:0[09]|4[049]|66|[79]\\d))\\d{5}","\\d{8}"]
+,[,,"(?:5(?:0[0-26]|5\\d)|6(?:0[034679]|5(?:[015-79]|8(?:[02-9]|1[0-57-9]))|6\\d|7[067]|9[69])|9(?:0[09]|4[049]|66|[79]\\d))\\d{5}","\\d{8}"]
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
@@ -2449,11 +2591,14 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,"","",0]
 ,[,"(5[05]\\d)(\\d{5})","$1 $2",["5"]
 ,"","",0]
+,[,"(65816)(\\d{6})","$1 $2",["65816"]
+,"","",0]
 ]
 ,,[,,"NA","NA"]
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"112","\\d{3}"]
+,[,,"65816\\d{6}","\\d{11}"]
 ]
 ,"KY":[,[,,"[3589]\\d{9}","\\d{7}(?:\\d{3})?"]
 ,[,,"345(?:2(?:22|44)|444|6(?:23|38|40)|7(?:6[6-9]|77)|8(?:00|1[45]|25|4[89]|88)|9(?:14|4[035-9]))\\d{4}","\\d{7}(?:\\d{3})?"]
@@ -2467,10 +2612,11 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,"345",[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"911","\\d{3}"]
+,[,,"NA","NA"]
 ]
 ,"KZ":[,[,,"(?:7\\d{2}|80[09])\\d{7}","\\d{10}"]
-,[,,"7(?:1(?:0(?:[23]\\d|4[023]|59|63)|1(?:[23]\\d|4[0-79]|59)|2(?:[23]\\d|59)|3(?:2\\d|3[1-79]|4[0-35-9]|59)|4(?:2\\d|3[013-79]|4[0-8]|5[1-79])|5(?:2\\d|3[1-8]|4[1-7]|59)|6(?:2\\d|[34]\\d|5[19]|61)|72\\d|8(?:[27]\\d|3[1-46-9]|4[0-5]|))|2(?:1(?:[23]\\d|4[46-9]|5[3469])|2(?:2\\d|3[0679]|46|5[12679]|)|3(?:[234]\\d|5[139]|)|4(?:2\\d|3[1235-9]|59)|5(?:[23]\\d|4[01246-8]|59|61)|6(?:2\\d|3[1-9]|4[0-4]|59)|7(?:[23]\\d|40|5[279]|7\\d)|8(?:[23]\\d|4[0-3]|59)|9(?:2\\d|3[124578]|59))|3622)\\d{5}","\\d{10}"]
-,[,,"7(?:0[01257]|6[02-4]|7[157])\\d{7}","\\d{10}"]
+,[,,"7(?:1(?:0(?:[23]\\d|4[023]|59|63)|1(?:[23]\\d|4[0-79]|59)|2(?:[23]\\d|59)|3(?:2\\d|3[1-79]|4[0-35-9]|59)|4(?:2\\d|3[013-79]|4[0-8]|5[1-79])|5(?:2\\d|3[1-8]|4[1-7]|59)|6(?:[234]\\d|5[19]|61)|72\\d|8(?:[27]\\d|3[1-46-9]|4[0-5]))|2(?:1(?:[23]\\d|4[46-9]|5[3469])|2(?:2\\d|3[0679]|46|5[12679])|3(?:[234]\\d|5[139])|4(?:2\\d|3[1235-9]|59)|5(?:[23]\\d|4[01246-8]|59|61)|6(?:2\\d|3[1-9]|4[0-4]|59)|7(?:[23]\\d|40|5[279]|7\\d)|8(?:[23]\\d|4[0-3]|59)|9(?:2\\d|3[124578]|59))|3622)\\d{5}","\\d{10}"]
+,[,,"7(?:0[01257]|6[02-4]|7[1578])\\d{7}","\\d{10}"]
 ,[,,"800\\d{7}","\\d{10}"]
 ,[,,"809\\d{7}","\\d{10}"]
 ,[,,"NA","NA"]
@@ -2480,6 +2626,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"751\\d{7}","\\d{10}"]
 ,[,,"NA","NA"]
 ,,[,,"1(?:0[123]|12)","\\d{3}"]
+,[,,"NA","NA"]
 ]
 ,"LA":[,[,,"[2-57]\\d{7,9}","\\d{6,10}"]
 ,[,,"(?:[2-57]1|54)\\d{6}","\\d{6,8}"]
@@ -2498,10 +2645,11 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"19[015]","\\d{3}"]
+,[,,"NA","NA"]
 ]
 ,"LB":[,[,,"[13-9]\\d{6,7}","\\d{7,8}"]
 ,[,,"(?:[14-6]\\d{2}|7(?:[2-57-9]\\d|62)|[89][2-9]\\d)\\d{4}","\\d{7}"]
-,[,,"(?:3\\d|7(?:[01]\\d|6[136-9]))\\d{5}","\\d{7,8}"]
+,[,,"(?:3\\d|7(?:[01]\\d|6[01346-9]))\\d{5}","\\d{7,8}"]
 ,[,,"NA","NA"]
 ,[,,"9[01]\\d{6}","\\d{8}"]
 ,[,,"8[01]\\d{6}","\\d{8}"]
@@ -2509,13 +2657,14 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,[,,"NA","NA"]
 ,"LB",961,"00","0",,,"0",,,,[[,"(\\d)(\\d{3})(\\d{3})","$1 $2 $3",["[13-6]|7(?:[2-57-9]|62)|[89][2-9]"]
 ,"0$1","",0]
-,[,"([7-9]\\d)(\\d{3})(\\d{3})","$1 $2 $3",["[89][01]|7(?:[01]|6[136-9])"]
-,"0$1","",0]
+,[,"([7-9]\\d)(\\d{3})(\\d{3})","$1 $2 $3",["[89][01]|7(?:[01]|6[01346-9])"]
+,"","",0]
 ]
 ,,[,,"NA","NA"]
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"1(?:12|40|75)|999","\\d{3}"]
+,[,,"NA","NA"]
 ]
 ,"LC":[,[,,"[5789]\\d{9}","\\d{7}(?:\\d{3})?"]
 ,[,,"758(?:234|4(?:5[0-9]|6[2-9]|8[0-2])|638|758)\\d{4}","\\d{7}(?:\\d{3})?"]
@@ -2529,6 +2678,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,"758",[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"9(?:11|99)","\\d{3}"]
+,[,,"NA","NA"]
 ]
 ,"LI":[,[,,"(?:66|80|90)\\d{7}|[237-9]\\d{6}","\\d{7,9}"]
 ,[,,"(?:2(?:17|3\\d|6[02-58]|96)|3(?:02|7[01357]|8[048]|9[0269])|870)\\d{4}","\\d{7}"]
@@ -2551,10 +2701,11 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"1(?:1[278]|44)","\\d{3}"]
+,[,,"NA","NA"]
 ]
 ,"LK":[,[,,"[1-9]\\d{8}","\\d{7,9}"]
 ,[,,"(?:[189]1|2[13-7]|3[1-8]|4[157]|5[12457]|6[35-7])[2-57]\\d{6}","\\d{7,9}"]
-,[,,"7[12578]\\d{7}","\\d{9}"]
+,[,,"7[125-8]\\d{7}","\\d{9}"]
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
@@ -2569,10 +2720,11 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"11[0189]","\\d{3}"]
+,[,,"NA","NA"]
 ]
 ,"LR":[,[,,"(?:[29]\\d|[4-6]|7\\d{1,2}|[38]\\d{2})\\d{6}","\\d{7,9}"]
 ,[,,"2\\d{7}","\\d{8}"]
-,[,,"(?:4[67]|5\\d|6[4-8]|7(?:76\\d|\\d{2})|880\\d)\\d{5}","\\d{7,9}"]
+,[,,"(?:4[67]|5\\d|6[4-8]|7(?:7[67]\\d|\\d{2})|880\\d)\\d{5}","\\d{7,9}"]
 ,[,,"NA","NA"]
 ,[,,"90\\d{6}","\\d{8}"]
 ,[,,"NA","NA"]
@@ -2591,6 +2743,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"355|911","\\d{3}"]
+,[,,"NA","NA"]
 ]
 ,"LS":[,[,,"[2568]\\d{7}","\\d{8}"]
 ,[,,"2\\d{7}","\\d{8}"]
@@ -2606,6 +2759,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"11[257]","\\d{3}"]
+,[,,"NA","NA"]
 ]
 ,"LT":[,[,,"[3-9]\\d{7}","\\d{8}"]
 ,[,,"(?:3[1478]|4[124-6]|52)\\d{6}","\\d{8}"]
@@ -2615,17 +2769,20 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,[,,"NA","NA"]
 ,[,,"700\\d{5}","\\d{8}"]
 ,[,,"NA","NA"]
-,"LT",370,"00","8",,,"8",,,,[[,"([34]\\d)(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",["37|4(?:1|5[45]|6[2-4])"]
-,"8 $1","",0]
-,[,"([3-9]\\d{2})(\\d{2})(\\d{3})","$1 $2 $3",["3[148]|4(?:[24]|6[09])|5(?:[0189]|28)|[6-9]"]
-,"8 $1","",0]
-,[,"(5)(2[0-79]\\d)(\\d{4})","$1 $2 $3",["52[0-79]"]
+,"LT",370,"00","8",,,"8",,,,[[,"([34]\\d)(\\d{6})","$1 $2",["37|4(?:1|5[45]|6[2-4])"]
+,"(8-$1)","",0]
+,[,"([3-6]\\d{2})(\\d{5})","$1 $2",["3[148]|4(?:[24]|6[09])|528|6"]
+,"(8-$1)","",0]
+,[,"([7-9]\\d{2})(\\d{2})(\\d{3})","$1 $2 $3",["[7-9]"]
 ,"8 $1","",0]
+,[,"(5)(2\\d{2})(\\d{4})","$1 $2 $3",["52[0-79]"]
+,"(8-$1)","",0]
 ]
 ,,[,,"NA","NA"]
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"0(?:11?|22?|33?)|1(?:0[123]|12)","\\d{2,3}"]
+,[,,"NA","NA"]
 ]
 ,"LU":[,[,,"[24-9]\\d{3,10}|3(?:[0-46-9]\\d{2,9}|5[013-9]\\d{1,8})","\\d{4,11}"]
 ,[,,"(?:2(?:2\\d{1,2}|3[2-9]|[67]\\d|4[1-8]\\d?|5[1-5]\\d?|9[0-24-9]\\d?)|3(?:[059][05-9]|[13]\\d|[26][015-9]|4[0-26-9]|7[0-389]|8[08])\\d?|4\\d{2,3}|5(?:[01458]\\d|[27][0-69]|3[0-3]|[69][0-7])\\d?|7(?:1[019]|2[05-9]|3[05]|[45][07-9]|[679][089]|8[06-9])\\d?|8(?:0[2-9]|1[0-36-9]|3[3-9]|[469]9|[58][7-9]|7[89])\\d?|9(?:0[89]|2[0-49]|37|49|5[0-27-9]|7[7-9]|9[0-478])\\d?)\\d{1,7}","\\d{4,11}"]
@@ -2658,6 +2815,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"11[23]","\\d{3}"]
+,[,,"NA","NA"]
 ]
 ,"LV":[,[,,"[2689]\\d{7}","\\d{8}"]
 ,[,,"6\\d{7}","\\d{8}"]
@@ -2673,6 +2831,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"0[123]|112","\\d{2,3}"]
+,[,,"NA","NA"]
 ]
 ,"LY":[,[,,"[25679]\\d{8}","\\d{7,9}"]
 ,[,,"(?:2[1345]|5[1347]|6[123479]|71)\\d{7}","\\d{7,9}"]
@@ -2688,6 +2847,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"19[013]","\\d{3}"]
+,[,,"NA","NA"]
 ]
 ,"MA":[,[,,"[5689]\\d{8}","\\d{9}"]
 ,[,,"5(?:2(?:(?:[015-7]\\d|2[2-9]|3[2-57]|4[2-8]|8[235-9]|)\\d|9(?:0\\d|[89]0))|3(?:(?:[0-4]\\d|[57][2-9]|6[235-8]|9[3-9])\\d|8(?:0\\d|[89]0)))\\d{4}","\\d{9}"]
@@ -2710,6 +2870,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"1(?:[59]|77)","\\d{2,3}"]
+,[,,"NA","NA"]
 ]
 ,"MC":[,[,,"[4689]\\d{7,8}","\\d{8,9}"]
 ,[,,"9[2-47-9]\\d{6}","\\d{8}"]
@@ -2730,6 +2891,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"8\\d{7}","\\d{8}"]
 ,[,,"NA","NA"]
 ,,[,,"1(?:12|[578])","\\d{2,3}"]
+,[,,"NA","NA"]
 ]
 ,"MD":[,[,,"[256-9]\\d{7}","\\d{8}"]
 ,[,,"(?:2(?:1[0569]|2\\d|3[015-7]|4[1-46-9]|5[0-24689]|6[2-589]|7[1-37]|9[1347-9])|5(?:33|5[257]))\\d{5}","\\d{5,8}"]
@@ -2750,6 +2912,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"8(?:03|14)\\d{5}","\\d{8}"]
 ,,[,,"112|90[123]","\\d{3}"]
+,[,,"NA","NA"]
 ]
 ,"ME":[,[,,"[2-9]\\d{7,8}","\\d{6,9}"]
 ,[,,"(?:20[2-8]|3(?:0[2-7]|1[35-7]|2[3567]|3[4-7])|4(?:0[237]|1[27])|5(?:0[47]|1[27]|2[378]))\\d{5}","\\d{6,8}"]
@@ -2768,6 +2931,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"77\\d{6}","\\d{8}"]
 ,,[,,"1(?:12|2[234])","\\d{3}"]
+,[,,"NA","NA"]
 ]
 ,"MG":[,[,,"[23]\\d{8}","\\d{7,9}"]
 ,[,,"2(?:0(?:(?:2\\d|4[47]|5[3467]|6[279]|8[268]|9[245])\\d|7(?:2[29]|[35]\\d))|210\\d)\\d{4}","\\d{7,9}"]
@@ -2783,6 +2947,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"11?[78]","\\d{2,3}"]
+,[,,"NA","NA"]
 ]
 ,"MF":[,[,,"[56]\\d{8}","\\d{9}"]
 ,[,,"590(?:10|2[79]|5[128]|[78]7)\\d{4}","\\d{9}"]
@@ -2796,6 +2961,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"1[578]","\\d{2}"]
+,[,,"NA","NA"]
 ]
 ,"MH":[,[,,"[2-6]\\d{6}","\\d{7}"]
 ,[,,"(?:247|528|625)\\d{4}","\\d{7}"]
@@ -2811,6 +2977,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"NA","NA"]
+,[,,"NA","NA"]
 ]
 ,"MK":[,[,,"[2-578]\\d{7}","\\d{8}"]
 ,[,,"(?:2(?:[23]\\d|5[125]|61)|3(?:1[3-6]|2[2-6]|3[2-5]|4[235])|4(?:[23][2-6]|4[3-6]|5[25]|6[25-8]|7[24-6]|8[4-6]))\\d{5}","\\d{6,8}"]
@@ -2831,6 +2998,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"1(?:12|9[234])","\\d{3}"]
+,[,,"NA","NA"]
 ]
 ,"ML":[,[,,"[246-8]\\d{7}","\\d{8}"]
 ,[,,"(?:2(?:0(?:2[0-589]|7[027-9])|1(?:2[5-7]|[3-689]\\d))|442\\d)\\d{4}","\\d{8}"]
@@ -2846,32 +3014,34 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"1[578]","\\d{2}"]
+,[,,"NA","NA"]
 ]
-,"MM":[,[,,"[124-8]\\d{5,7}|9\\d{7,8}","\\d{5,9}"]
-,[,,"(?:1\\d|2|4[2-6]|5[2-9]|6\\d|7[0-5]|8[1-6])\\d{5}|1333\\d{4}","\\d{5,8}"]
-,[,,"9(?:[25689]\\d|444)\\d{5}","\\d{8,9}"]
+,"MM":[,[,,"[124-8]\\d{5,7}|9(?:[25689]|[47]\\d)\\d{6}","\\d{5,9}"]
+,[,,"(?:1\\d|2|4[2-6]|5[2-9]|6(?:[0-689]|7\\d?)|7[0-5]|8(?:[2-6]|1\\d?))\\d{5}|1333\\d{4}","\\d{5,8}"]
+,[,,"9(?:[25689]|[47]\\d)\\d{6}","\\d{8,9}"]
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
-,"MM",95,"00",,,,,,,,[[,"(1)(\\d{3})(\\d{3})","$1 $2 $3",["1"]
-,"","",0]
+,"MM",95,"00","0",,,"0",,,,[[,"(1)(\\d{3})(\\d{3})","$1 $2 $3",["1"]
+,"0$1","",0]
 ,[,"(1)(3)(33\\d)(\\d{3})","$1 $2 $3 $4",["133","1333"]
-,"","",0]
+,"0$1","",0]
 ,[,"(2)(\\d{2})(\\d{3})","$1 $2 $3",["2"]
-,"","",0]
+,"0$1","",0]
+,[,"(\\d{2})(\\d{3})(\\d{3})","$1 $2 $3",["67|81"]
+,"0$1","",0]
 ,[,"(\\d{2})(\\d{2})(\\d{3})","$1 $2 $3",["[4-8]"]
-,"","",0]
-,[,"(9444)(\\d{5})","$1 $2",["94"]
-,"","",0]
-,[,"(9)([25689]\\d{2})(\\d{4})","$1 $2 $3",["9[25689]"]
-,"","",0]
+,"0$1","",0]
+,[,"(9)(\\d{3})(\\d{4,5})","$1 $2 $3",["9[24-9]"]
+,"0$1","",0]
 ]
 ,,[,,"NA","NA"]
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"199","\\d{3}"]
+,[,,"NA","NA"]
 ]
 ,"MN":[,[,,"[12]\\d{7,9}|[57-9]\\d{7}","\\d{6,10}"]
 ,[,,"[12](?:1\\d|2(?:[1-3]\\d?|7\\d)|3[2-8]\\d{1,2}|4[2-68]\\d{1,2}|5[1-4689]\\d{1,2})\\d{5}|(?:5[0568]|70)\\d{6}","\\d{6,10}"]
@@ -2896,6 +3066,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"10[0-3]","\\d{3}"]
+,[,,"NA","NA"]
 ]
 ,"MO":[,[,,"[268]\\d{7}","\\d{8}"]
 ,[,,"(?:28[2-57-9]|8[2-57-9]\\d)\\d{5}","\\d{8}"]
@@ -2911,6 +3082,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"999","\\d{3}"]
+,[,,"NA","NA"]
 ]
 ,"MP":[,[,,"[5689]\\d{9}","\\d{7}(?:\\d{3})?"]
 ,[,,"670(?:2(?:3[3-7]|56|8[5-8])|32[1238]|4(?:33|8[348])|5(?:32|55|88)|6(?:64|70|82)|78[589]|8[3-9]8|989)\\d{4}","\\d{7}(?:\\d{3})?"]
@@ -2924,6 +3096,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,"670",[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"911","\\d{3}"]
+,[,,"NA","NA"]
 ]
 ,"MQ":[,[,,"[56]\\d{8}","\\d{9}"]
 ,[,,"596(?:0[2-5]|[12]0|3[05-9]|4[024-8]|[5-7]\\d|89|9[4-8])\\d{4}","\\d{9}"]
@@ -2939,6 +3112,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"1(?:12|[578])","\\d{2,3}"]
+,[,,"NA","NA"]
 ]
 ,"MR":[,[,,"[2-48]\\d{7}","\\d{8}"]
 ,[,,"25[08]\\d{5}|35\\d{6}|45[1-7]\\d{5}","\\d{8}"]
@@ -2954,6 +3128,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"1[78]","\\d{2}"]
+,[,,"NA","NA"]
 ]
 ,"MS":[,[,,"[5689]\\d{9}","\\d{7}(?:\\d{3})?"]
 ,[,,"664491\\d{4}","\\d{7}(?:\\d{3})?"]
@@ -2967,6 +3142,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,"664",[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"9(?:11|99)","\\d{3}"]
+,[,,"NA","NA"]
 ]
 ,"MT":[,[,,"[2579]\\d{7}","\\d{8}"]
 ,[,,"2(?:0(?:1[0-6]|[69]\\d)|[1-357]\\d{2})\\d{4}","\\d{8}"]
@@ -2982,6 +3158,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"112","\\d{3}"]
+,[,,"NA","NA"]
 ]
 ,"MU":[,[,,"[2-9]\\d{6}","\\d{7}"]
 ,[,,"(?:2(?:[034789]\\d|1[0-7])|4(?:[013-8]\\d|2[4-7])|[56]\\d{2}|8(?:14|3[129]))\\d{4}","\\d{7}"]
@@ -2997,16 +3174,17 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"11[45]|99\\d","\\d{3}"]
+,[,,"NA","NA"]
 ]
-,"MV":[,[,,"[367]\\d{6}|9(?:00\\d{7}|\\d{6})","\\d{7,10}"]
+,"MV":[,[,,"[3467]\\d{6}|9(?:00\\d{7}|\\d{6})","\\d{7,10}"]
 ,[,,"(?:3(?:0[01]|3[0-59]|)|6(?:[567][02468]|8[024689]|90))\\d{4}","\\d{7}"]
-,[,,"(?:7[3-9]|9[6-9])\\d{5}","\\d{7}"]
+,[,,"(?:46[46]|7[3-9]\\d|9[6-9]\\d)\\d{4}","\\d{7}"]
 ,[,,"NA","NA"]
 ,[,,"900\\d{7}","\\d{10}"]
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
-,"MV",960,"0(?:0|19)",,,,,,"00",,[[,"(\\d{3})(\\d{4})","$1-$2",["[367]|9(?:[1-9]|0[1-9])"]
+,"MV",960,"0(?:0|19)",,,,,,"00",,[[,"(\\d{3})(\\d{4})","$1-$2",["[3467]|9(?:[1-9]|0[1-9])"]
 ,"","",0]
 ,[,"(\\d{3})(\\d{3})(\\d{4})","$1 $2 $3",["900"]
 ,"","",0]
@@ -3015,10 +3193,11 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"1(?:02|19)","\\d{3}"]
+,[,,"NA","NA"]
 ]
-,"MW":[,[,,"(?:[13-5]|[27]\\d{2}|[89](?:\\d{2})?)\\d{6}","\\d{7,9}"]
+,"MW":[,[,,"(?:[3-5]|[27]\\d{2}|[189](?:\\d{2})?)\\d{6}","\\d{7,9}"]
 ,[,,"(?:1[2-9]|21\\d{2})\\d{5}","\\d{7,9}"]
-,[,,"(?:[3-5]|77|8(?:8\\d)?|9(?:9\\d)?)\\d{6}","\\d{7,9}"]
+,[,,"(?:111|[3-5]|77\\d|8(?:8\\d)?|9(?:9\\d)?)\\d{6}","\\d{7,9}"]
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
@@ -3028,15 +3207,16 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,"0$1","",0]
 ,[,"(2\\d{2})(\\d{3})(\\d{3})","$1 $2 $3",["2"]
 ,"0$1","",0]
-,[,"(\\d)(\\d{4})(\\d{4})","$1 $2 $3",["7"]
+,[,"(\\d{3})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",["[1789]"]
 ,"0$1","",0]
-,[,"(\\d)(\\d{3,4})(\\d{3,4})","$1 $2 $3",["[89]"]
+,[,"(\\d)(\\d{3})(\\d{3})","$1 $2 $3",["[89]"]
 ,"0$1","",0]
 ]
 ,,[,,"NA","NA"]
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"199|99[789]","\\d{3}"]
+,[,,"NA","NA"]
 ]
 ,"MX":[,[,,"[1-9]\\d{9,10}","\\d{7,11}"]
 ,[,,"(?:33|55|81)\\d{8}|(?:2(?:2[2-9]|3[1-35-8]|4[13-9]|7[1-689]|8[1-578]|9[467])|3(?:1[1-79]|[2458][1-9]|7[1-8]|9[1-5])|4(?:1[1-57-9]|[24-6][1-9]|[37][1-8]|8[1-35-9]|9[2-689])|5(?:88|9[1-79])|6(?:1[2-68]|[234][1-9]|5[1-3689]|6[12457-9]|7[1-7]|8[67]|9[4-8])|7(?:[13467][1-9]|2[1-8]|5[13-9]|8[1-69]|9[17])|8(?:2[13-689]|3[1-6]|4[124-6]|6[1246-9]|7[1-378]|9[12479])|9(?:1[346-9]|2[1-4]|3[2-46-8]|5[1348]|[69][1-9]|7[12]|8[1-8]))\\d{7}","\\d{7,10}"]
@@ -3068,6 +3248,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"06[568]|911","\\d{3}"]
+,[,,"NA","NA"]
 ]
 ,"MY":[,[,,"[13-9]\\d{7,9}","\\d{6,10}"]
 ,[,,"(?:3\\d{2}|[4-79]\\d|8[2-9])\\d{6}","\\d{6,9}"]
@@ -3094,16 +3275,17 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"112|999","\\d{3}"]
+,[,,"NA","NA"]
 ]
 ,"MZ":[,[,,"[28]\\d{7,8}","\\d{8,9}"]
 ,[,,"2(?:[1346]\\d|5[0-2]|[78][12]|93)\\d{5}","\\d{8}"]
-,[,,"8[24]\\d{7}","\\d{9}"]
+,[,,"8[246]\\d{7}","\\d{9}"]
 ,[,,"800\\d{6}","\\d{9}"]
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
-,"MZ",258,"00",,,,,,,,[[,"([28]\\d)(\\d{3})(\\d{3,4})","$1 $2 $3",["2|8[24]"]
+,"MZ",258,"00",,,,,,,,[[,"([28]\\d)(\\d{3})(\\d{3,4})","$1 $2 $3",["2|8[246]"]
 ,"","",0]
 ,[,"(80\\d)(\\d{3})(\\d{3})","$1 $2 $3",["80"]
 ,"","",0]
@@ -3112,6 +3294,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"1(?:1[79]|9[78])","\\d{3}"]
+,[,,"NA","NA"]
 ]
 ,"NA":[,[,,"[68]\\d{7,8}","\\d{8,9}"]
 ,[,,"6(?:1(?:17|2(?:[0189]\\d|[23-6]|7\\d?)|3(?:2\\d|3[378])|4[01]|69|7[014])|2(?:17|25|5(?:[0-36-8]|4\\d?)|69|70)|3(?:17|2(?:[0237]\\d?|[14-689])|34|6[29]|7[01]|81)|4(?:17|2(?:[012]|7?)|4(?:[06]|1\\d)|5(?:[01357]|[25]\\d?)|69|7[01])|5(?:17|2(?:[0459]|[23678]\\d?)|69|7[01])|6(?:17|2(?:5|6\\d?)|38|42|69|7[01])|7(?:17|2(?:[569]|[234]\\d?)|3(?:0\\d?|[13])|69|7[01]))\\d{4}","\\d{8,9}"]
@@ -3120,8 +3303,8 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,[,,"8701\\d{5}","\\d{9}"]
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
-,[,,"886\\d{5}","\\d{8}"]
-,"NA",264,"00","0",,,"0",,,,[[,"(8\\d)(\\d{3})(\\d{4})","$1 $2 $3",["8[125]"]
+,[,,"8(3\\d{2}|86)\\d{5}","\\d{8,9}"]
+,"NA",264,"00","0",,,"0",,,,[[,"(8\\d)(\\d{3})(\\d{4})","$1 $2 $3",["8[1235]"]
 ,"0$1","",0]
 ,[,"(6\\d)(\\d{2,3})(\\d{4})","$1 $2 $3",["6"]
 ,"0$1","",0]
@@ -3134,6 +3317,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"10111","\\d{5}"]
+,[,,"NA","NA"]
 ]
 ,"NC":[,[,,"[2-47-9]\\d{5}","\\d{6}"]
 ,[,,"(?:2[03-9]|3[0-5]|4[1-7]|88)\\d{4}","\\d{6}"]
@@ -3149,6 +3333,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"1[5-8]","\\d{2}"]
+,[,,"NA","NA"]
 ]
 ,"NE":[,[,,"[029]\\d{7}","\\d{8}"]
 ,[,,"2(?:0(?:20|3[1-7]|4[134]|5[14]|6[14578]|7[1-578])|1(?:4[145]|5[14]|6[14-68]|7[169]|88))\\d{4}","\\d{8}"]
@@ -3167,6 +3352,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,1,[,,"NA","NA"]
+,[,,"NA","NA"]
 ]
 ,"NF":[,[,,"[13]\\d{5}","\\d{5,6}"]
 ,[,,"(?:1(?:06|17|28|39)|3[012]\\d)\\d{3}","\\d{5,6}"]
@@ -3185,6 +3371,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"9(?:11|55|77)","\\d{3}"]
+,[,,"NA","NA"]
 ]
 ,"NG":[,[,,"[1-69]\\d{5,8}|[78]\\d{5,13}","\\d{5,14}"]
 ,[,,"[12]\\d{6,7}|9\\d{7}|(?:4[023568]|5[02368]|6[02-469]|7[569]|8[2-9])\\d{6}|(?:4[47]|5[14579]|6[1578]|7[0-357])\\d{5,6}|(?:78|41)\\d{5}","\\d{5,9}"]
@@ -3192,7 +3379,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,[,,"800\\d{7,11}","\\d{10,14}"]
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
-,[,,"700\\d{7,11}","\\d{10,14}"]
+,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,"NG",234,"009","0",,,"0",,,,[[,"([129])(\\d{3})(\\d{3,4})","$1 $2 $3",["[129]"]
 ,"0$1","",0]
@@ -3209,8 +3396,9 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ]
 ,,[,,"NA","NA"]
 ,,,[,,"NA","NA"]
-,[,,"NA","NA"]
+,[,,"700\\d{7,11}","\\d{10,14}"]
 ,,[,,"199","\\d{3}"]
+,[,,"NA","NA"]
 ]
 ,"NI":[,[,,"[128]\\d{7}","\\d{8}"]
 ,[,,"2\\d{7}","\\d{8}"]
@@ -3226,8 +3414,9 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"118","\\d{3}"]
+,[,,"NA","NA"]
 ]
-,"NL":[,[,,"[1-9]\\d{6,9}","\\d{7,10}"]
+,"NL":[,[,,"1\\d{4,8}|[2-7]\\d{8}|[89]\\d{6,9}","\\d{5,10}"]
 ,[,,"(?:1[0135-8]|2[02-69]|3[0-68]|4[0135-9]|[57]\\d|8[478])\\d{7}","\\d{9}"]
 ,[,,"6[1-58]\\d{7}","\\d{9}"]
 ,[,,"800\\d{4,7}","\\d{7,10}"]
@@ -3239,15 +3428,20 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,"0$1","",0]
 ,[,"([1-5]\\d{2})(\\d{3})(\\d{3})","$1 $2 $3",["1[16-8]|2[259]|3[124]|4[17-9]|5[124679]"]
 ,"0$1","",0]
-,[,"(6)(\\d{8})","$1 $2",["6"]
+,[,"(6)(\\d{8})","$1 $2",["6[0-57-9]"]
+,"0$1","",0]
+,[,"(66)(\\d{7})","$1 $2",["66"]
 ,"0$1","",0]
+,[,"(14)(\\d{3,4})","$1 $2",["14"]
+,"$1","",0]
 ,[,"([89]0\\d)(\\d{4,7})","$1 $2",["80|9"]
 ,"0$1","",0]
 ]
-,,[,,"NA","NA"]
-,,,[,,"NA","NA"]
-,[,,"NA","NA"]
+,,[,,"66\\d{7}","\\d{9}"]
+,,,[,,"14\\d{3,4}","\\d{5,6}"]
+,[,,"140(?:1(?:[035]|[16-8]\\d)|2(?:[0346]|[259]\\d)|3(?:[03568]|[124]\\d)|4(?:[0356]|[17-9]\\d)|5(?:[0358]|[124679]\\d)|7\\d|8[458])","\\d{5,6}"]
 ,,[,,"112|911","\\d{3}"]
+,[,,"NA","NA"]
 ]
 ,"NO":[,[,,"0\\d{4}|[2-9]\\d{7}","\\d{5}(?:\\d{3})?"]
 ,[,,"(?:2[1-4]|3[1-3578]|5[1-35-7]|6[1-4679]|7[0-8])\\d{6}","\\d{8}"]
@@ -3266,6 +3460,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,1,,[,,"NA","NA"]
 ,[,,"0\\d{4}|81(?:0(?:0[7-9]|1\\d)|5\\d{2})\\d{3}","\\d{5}(?:\\d{3})?"]
 ,1,[,,"11[023]","\\d{3}"]
+,[,,"NA","NA"]
 ]
 ,"NP":[,[,,"[1-8]\\d{7}|9(?:[1-69]\\d{6}|7[2-6]\\d{5,7}|8\\d{8})","\\d{6,10}"]
 ,[,,"(?:1[0124-6]|2[13-79]|3[135-8]|4[146-9]|5[135-7]|6[13-9]|7[15-9]|8[1-46-9]|9[1-79])\\d{6}","\\d{6,8}"]
@@ -3286,6 +3481,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"1(?:0[0-3]|12)","\\d{3}"]
+,[,,"NA","NA"]
 ]
 ,"NR":[,[,,"[458]\\d{6}","\\d{7}"]
 ,[,,"(?:444|888)\\d{4}","\\d{7}"]
@@ -3301,6 +3497,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"11[0-2]","\\d{3}"]
+,[,,"NA","NA"]
 ]
 ,"NU":[,[,,"[1-5]\\d{3}","\\d{4}"]
 ,[,,"[34]\\d{3}","\\d{4}"]
@@ -3314,6 +3511,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"999","\\d{3}"]
+,[,,"NA","NA"]
 ]
 ,"NZ":[,[,,"6[235-9]\\d{6}|[2-57-9]\\d{7,10}","\\d{7,11}"]
 ,[,,"(?:3[2-79]|[49][2-689]|6[235-9]|7[2-589])\\d{6}|24099\\d{3}","\\d{7,8}"]
@@ -3327,6 +3525,8 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,"0$1","",0]
 ,[,"(21)(\\d{4})(\\d{3,4})","$1 $2 $3",["21"]
 ,"0$1","",0]
+,[,"(22)(\\d{3})(\\d{4})","$1 $2 $3",["22"]
+,"0$1","",0]
 ,[,"([2589]\\d{2})(\\d{3})(\\d{3,4})","$1 $2 $3",["2[0247-9]|5|[89]00"]
 ,"0$1","",0]
 ,[,"(\\d{2})(\\d{3})(\\d{3,4})","$1 $2 $3",["2[0169]|86"]
@@ -3338,6 +3538,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"111","\\d{3}"]
+,[,,"NA","NA"]
 ]
 ,"OM":[,[,,"(?:2[3-6]|5|9[2-9])\\d{6}|800\\d{5,6}","\\d{7,9}"]
 ,[,,"2[3-6]\\d{6}","\\d{8}"]
@@ -3358,6 +3559,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"9999","\\d{4}"]
+,[,,"NA","NA"]
 ]
 ,"PA":[,[,,"[1-9]\\d{6,7}","\\d{7,8}"]
 ,[,,"(?:1(?:0[02-579]|19|23|3[03]|4[479]|5[57]|65|7[016-8]|8[58]|9[1-49])|2(?:[0235679]\\d|1[0-7]|4[04-9]|8[028])|3(?:0[0-7]|1[14-7]|2[0-3]|3[03]|4[0457]|5[56]|6[068]|7[078]|80|9[0-79])|4(?:3[013-59]|4\\d|7[0-689])|5(?:[01]\\d|2[0-7]|[56]0|79)|7(?:09|2[0-267]|[34]0|5[6-9]|7[0-24-7]|8[89]|99)|8(?:[34]\\d|5[0-5]|8[02])|9(?:0[78]|1[0178]|2[0378]|3[379]|40|5[0489]|6[06-9]|7[046-9]|8[36-8]|9[1-9]))\\d{4}","\\d{7}"]
@@ -3376,6 +3578,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"911","\\d{3}"]
+,[,,"NA","NA"]
 ]
 ,"PE":[,[,,"[14-9]\\d{7,8}","\\d{6,9}"]
 ,[,,"(?:1\\d|4[1-4]|5[1-46]|6[1-7]|7[2-46]|8[2-4])\\d{6}","\\d{6,8}"]
@@ -3398,6 +3601,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"1(?:05|1[67])","\\d{3}"]
+,[,,"NA","NA"]
 ]
 ,"PF":[,[,,"[2-9]\\d{5}","\\d{6}"]
 ,[,,"(?:36\\d|4(?:[02-9]\\d|1[02-9])|[5689]\\d{2})\\d{3}","\\d{6}"]
@@ -3413,6 +3617,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"(?:36|44)\\d{4}","\\d{6}"]
 ,[,,"NA","NA"]
 ,,[,,"1[578]","\\d{2}"]
+,[,,"NA","NA"]
 ]
 ,"PG":[,[,,"[1-9]\\d{6,7}","\\d{7,8}"]
 ,[,,"(?:3\\d{2}|4[257]\\d|5[34]\\d|6(?:29|4[1-9])|85[02-46-9]|9[78]\\d)\\d{4}","\\d{7}"]
@@ -3431,6 +3636,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"000","\\d{3}"]
+,[,,"NA","NA"]
 ]
 ,"PH":[,[,,"[2-9]\\d{7,9}|1800\\d{7,9}","\\d{7,13}"]
 ,[,,"(?:2|3[2-68]|4[2-9]|5[2-6]|6[2-58]|7[24578]|8[2-8])\\d{7}","\\d{7,9}"]
@@ -3459,6 +3665,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"11[27]|911","\\d{3}"]
+,[,,"NA","NA"]
 ]
 ,"PK":[,[,,"1\\d{8}|[2-8]\\d{5,11}|9(?:[013-9]\\d{4,9}|2\\d(?:111\\d{6}|\\d{3,7}))","\\d{6,12}"]
 ,[,,"(?:21|42)[2-9]\\d{7}|(?:2[25]|4[0146-9]|5[1-35-7]|6[1-8]|7[14]|8[16]|91)[2-9]\\d{6}|(?:2(?:3[2358]|4[2-4]|9[2-8])|45[3479]|54[2-467]|60[468]|72[236]|8(?:2[2-689]|3[23578]|4[3478]|5[2356])|9(?:1|2[2-8]|3[27-9]|4[2-6]|6[3569]|9[25-8]))[2-9]\\d{5,6}|58[126]\\d{7}","\\d{6,10}"]
@@ -3489,9 +3696,10 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"(?:2(?:[125]|3[2358]|4[2-4]|9[2-8])|4(?:[0-246-9]|5[3479])|5(?:[1-35-7]|4[2-467])|6(?:[1-8]|0[468])|7(?:[14]|2[236])|8(?:[16]|2[2-689]|3[23578]|4[3478]|5[2356])|9(?:1|22|3[27-9]|4[2-6]|6[3569]|9[2-7]))111\\d{6}","\\d{11,12}"]
 ,,[,,"1(?:1(?:22?|5)|[56])","\\d{2,4}"]
+,[,,"NA","NA"]
 ]
-,"PL":[,[,,"[1-9]\\d{8}","\\d{9}"]
-,[,,"(?:1[2-8]|2[2-59]|3[2-4]|4[1-468]|5[24-689]|6[1-3578]|7[14-7]|8[1-79]|9[145])\\d{7}","\\d{9}"]
+,"PL":[,[,,"[1-58]\\d{6,8}|9\\d{8}|[67]\\d{5,8}","\\d{6,9}"]
+,[,,"(?:1[2-8]|2[2-59]|3[2-4]|4[1-468]|5[24-689]|6[1-3578]|7[14-6]|8[1-7])\\d{5,7}|77\\d{4,7}|(?:89|9[145])\\d{7}","\\d{6,9}"]
 ,[,,"(?:5[013]|6[069]|7[289]|88)\\d{7}","\\d{9}"]
 ,[,,"800\\d{6}","\\d{9}"]
 ,[,,"70\\d{7}","\\d{9}"]
@@ -3500,13 +3708,20 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,[,,"39\\d{7}","\\d{9}"]
 ,"PL",48,"00",,,,,,,,[[,"(\\d{2})(\\d{3})(\\d{2})(\\d{2})","$1 $2 $3 $4",["[124]|3[2-4]|5[24-689]|6[1-3578]|7[14-7]|8[1-79]|9[145]"]
 ,"","",0]
-,[,"(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3",["39|5[013]|6[069]|7[0289]|8[08]"]
+,[,"(\\d{2})(\\d{4,6})","$1 $2",["[124]|3[2-4]|5[24-689]|6[1-3578]|7[14-7]|8[1-7]"]
+,"","",0]
+,[,"(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3",["39|5[013]|6[0469]|7[0289]|8[08]"]
+,"","",0]
+,[,"(\\d{3})(\\d{2})(\\d{2,3})","$1 $2 $3",["64"]
+,"","",0]
+,[,"(\\d{3})(\\d{3})","$1 $2",["64"]
 ,"","",0]
 ]
-,,[,,"NA","NA"]
+,,[,,"642\\d{3,6}","\\d{6,9}"]
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"112|99[789]","\\d{3}"]
+,[,,"NA","NA"]
 ]
 ,"PM":[,[,,"[45]\\d{5}","\\d{6}"]
 ,[,,"41\\d{4}","\\d{6}"]
@@ -3522,6 +3737,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"1[578]","\\d{2}"]
+,[,,"NA","NA"]
 ]
 ,"PR":[,[,,"[5789]\\d{9}","\\d{7}(?:\\d{3})?"]
 ,[,,"(?:787|939)[2-9]\\d{6}","\\d{7}(?:\\d{3})?"]
@@ -3535,6 +3751,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,"787|939",[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"911","\\d{3}"]
+,[,,"NA","NA"]
 ]
 ,"PS":[,[,,"[24589]\\d{7,8}|1(?:[78]\\d{8}|[49]\\d{2,3})","\\d{4,10}"]
 ,[,,"(?:22[234789]|42[45]|82[01458]|92[369])\\d{5}","\\d{7,8}"]
@@ -3555,6 +3772,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"NA","NA"]
+,[,,"NA","NA"]
 ]
 ,"PT":[,[,,"[2-46-9]\\d{8}","\\d{9}"]
 ,[,,"2(?:[12]\\d|[35][1-689]|4[1-59]|6[1-35689]|7[1-9]|8[1-69]|9[1256])\\d{6}","\\d{9}"]
@@ -3570,6 +3788,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"70(?:7\\d|8[147])\\d{5}","\\d{9}"]
 ,,[,,"112","\\d{3}"]
+,[,,"NA","NA"]
 ]
 ,"PW":[,[,,"[2-8]\\d{6}","\\d{7}"]
 ,[,,"2552255|(?:277|345|488|5(?:35|44|87)|6(?:22|54|79)|7(?:33|47)|8(?:24|55|76))\\d{4}","\\d{7}"]
@@ -3585,6 +3804,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"911","\\d{3}"]
+,[,,"NA","NA"]
 ]
 ,"PY":[,[,,"5[0-5]\\d{4,7}|[2-46-9]\\d{5,8}","\\d{5,9}"]
 ,[,,"(?:[26]1|3[289]|4[124678]|7[123]|8[1236])\\d{5,7}|(?:2(?:2[4568]|7[15]|9[1-5])|3(?:18|3[167]|4[2357]|51)|4(?:18|2[45]|3[12]|5[13]|64|71|9[1-47])|5(?:[1-4]\\d|5[0234])|6(?:3[1-3]|44|7[1-4678])|7(?:17|4[0-4]|6[1-578]|75|8[0-8])|858)\\d{5,6}","\\d{5,9}"]
@@ -3609,6 +3829,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"[2-9]0\\d{4,7}","\\d{6,9}"]
 ,,[,,"128|911","\\d{3}"]
+,[,,"NA","NA"]
 ]
 ,"QA":[,[,,"[2-8]\\d{6,7}","\\d{7,8}"]
 ,[,,"44\\d{6}","\\d{7,8}"]
@@ -3627,6 +3848,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"999","\\d{3}"]
+,[,,"NA","NA"]
 ]
 ,"RE":[,[,,"[268]\\d{8}","\\d{9}"]
 ,[,,"262\\d{6}","\\d{9}"]
@@ -3642,6 +3864,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,1,"262|6[49]|8",[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"1(?:12|[578])","\\d{2,3}"]
+,[,,"NA","NA"]
 ]
 ,"RO":[,[,,"[237-9]\\d{8}","\\d{9}"]
 ,[,,"[23][13-6]\\d{7}","\\d{9}"]
@@ -3658,8 +3881,9 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ]
 ,,[,,"NA","NA"]
 ,,,[,,"NA","NA"]
-,[,,"NA","NA"]
+,[,,"37\\d{7}","\\d{9}"]
 ,,[,,"112","\\d{3}"]
+,[,,"NA","NA"]
 ]
 ,"RS":[,[,,"[1-36-9]\\d{4,11}","\\d{5,12}"]
 ,[,,"[1-3]\\d{6,11}","\\d{5,12}"]
@@ -3686,6 +3910,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"7[06]\\d{4,10}","\\d{6,12}"]
 ,,[,,"112|9[234]","\\d{2,3}"]
+,[,,"NA","NA"]
 ]
 ,"RU":[,[,,"[3489]\\d{9}","\\d{10}"]
 ,[,,"(?:3(?:0[12]|4[1-35-79]|5[1-3]|8[1-58]|9[0145])|4(?:01|1[1356]|2[13467]|7[1-5]|8[1-7]|9[1-689])|8(?:1[1-8]|2[01]|3[13-6]|4[0-8]|5[15]|6[1-35-7]|7[1-37-9]))\\d{7}","\\d{10}"]
@@ -3704,6 +3929,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,1,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"0[123]|112","\\d{2,3}"]
+,[,,"NA","NA"]
 ]
 ,"RW":[,[,,"[027-9]\\d{7,8}","\\d{8,9}"]
 ,[,,"2[258]\\d{7}|06\\d{6}","\\d{8,9}"]
@@ -3724,9 +3950,10 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,1,[,,"112","\\d{3}"]
+,[,,"NA","NA"]
 ]
-,"SA":[,[,,"[1-9]\\d{7,10}","\\d{7,11}"]
-,[,,"(?:1[24-7]|2[24-8]|3[35-8]|4[34-68]|6[2-5]|7[235-7])\\d{6}","\\d{7,8}"]
+,"SA":[,[,,"[1-467]\\d{7}|5\\d{8}|(?:8|92)\\d{9}","\\d{7,11}"]
+,[,,"(?:[12][24-8]|3[35-8]|4[34-68]|6[2-5]|7[235-7])\\d{6}","\\d{7,8}"]
 ,[,,"(?:5[013-689]\\d|8111)\\d{6}","\\d{9,10}"]
 ,[,,"800\\d{7}","\\d{10}"]
 ,[,,"9200\\d{7}","\\d{11}"]
@@ -3748,6 +3975,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"99[7-9]","\\d{3}"]
+,[,,"NA","NA"]
 ]
 ,"SB":[,[,,"[1-8]\\d{4,6}","\\d{5,7}"]
 ,[,,"(?:1[4-79]|[23]\\d|4[01]|5[03]|6[0-37])\\d{3}","\\d{5}"]
@@ -3764,24 +3992,26 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"999","\\d{3}"]
+,[,,"NA","NA"]
 ]
-,"SC":[,[,,"[2-9]\\d{5,6}","\\d{6,7}"]
-,[,,"(?:2?(?:55[0-5]|78[013])|4?(?:2(?:0[589]|1[03-9]|[2-9]\\d)|[36]\\d{2})|44\\d{2})\\d{3}","\\d{6,7}"]
-,[,,"2?(?:5(?:[0-46-9]\\d|5[6-9])|7(?:[0-79]\\d|8[24-9]))\\d{3}","\\d{6,7}"]
+,"SC":[,[,,"[24689]\\d{5,6}","\\d{6,7}"]
+,[,,"(?:2(?:55[0-5]|78[013])|4(?:2(?:0[589]|1[03-9]|[2-9]\\d)|[346]\\d{2}))\\d{3}","\\d{7}"]
+,[,,"2(?:5(?:[0-46-9]\\d|5[6-9])|7(?:[0-79]\\d|8[24-9]))\\d{3}","\\d{7}"]
 ,[,,"8000\\d{2}","\\d{6}"]
 ,[,,"98\\d{4}","\\d{6}"]
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,[,,"64\\d{5}","\\d{7}"]
-,"SC",248,"0[0-2]",,,,,,"00",,[[,"(\\d{3})(\\d{3})","$1 $2",["[35789]|2[1-4689]|6[0-35-9]"]
+,"SC",248,"0[0-2]",,,,,,"00",,[[,"(\\d{3})(\\d{3})","$1 $2",["[89]"]
 ,"","",0]
-,[,"(\\d)(\\d{3})(\\d{3})","$1 $2 $3",["2[57]|4|64"]
+,[,"(\\d)(\\d{3})(\\d{3})","$1 $2 $3",["[246]"]
 ,"","",0]
 ]
 ,,[,,"NA","NA"]
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"999","\\d{3}"]
+,[,,"NA","NA"]
 ]
 ,"SD":[,[,,"[19]\\d{8}","\\d{9}"]
 ,[,,"1(?:[25]\\d|8[3567])\\d{6}","\\d{9}"]
@@ -3797,6 +4027,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"999","\\d{3}"]
+,[,,"NA","NA"]
 ]
 ,"SE":[,[,,"[1-9]\\d{6,9}","\\d{5,10}"]
 ,[,,"1(?:0[1-8]\\d{6}|[136]\\d{5,7}|(?:2[0-35]|4[0-4]|5[0-25-9]|7[13-6]|[89]\\d)\\d{5,6})|2(?:[136]\\d{5,7}|(?:2[0-7]|4[0136-8]|5[0-38]|7[018]|8[01]|9[0-57])\\d{5,6})|3(?:[356]\\d{5,7}|(?:0[0-4]|1\\d|2[0-25]|4[056]|7[0-2]|8[0-3]|9[023])\\d{5,6})|4(?:[0246]\\d{5,7}|(?:1[01-8]|3[0135]|5[14-79]|7[0-246-9]|8[0156]|9[0-689])\\d{5,6})|5(?:0[0-6]|1[0-5]|2[0-68]|3[0-4]|4\\d|5[0-5]|6[03-5]|7[013]|8[0-79]|9[01])\\d{5,6}|6(?:[03]\\d{5,7}|(?:1[1-3]|2[0-4]|4[02-57]|5[0-37]|6[0-3]|7[0-2]|8[0247]|9[0-356])\\d{5,6})|8\\d{6,8}|9(?:0\\d{5,7}|(?:1[0-68]|2\\d|3[02-59]|4[0-4]|5[0-4]|6[01]|7[0135-8]|8[01])\\d{5,6})","\\d{5,9}"]
@@ -3844,6 +4075,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"112|90000","\\d{3,5}"]
+,[,,"NA","NA"]
 ]
 ,"SG":[,[,,"[36]\\d{7}|[17-9]\\d{7,10}","\\d{8,11}"]
 ,[,,"6[1-8]\\d{6}","\\d{8}"]
@@ -3865,7 +4097,8 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,[,,"NA","NA"]
 ,,,[,,"NA","NA"]
 ,[,,"7000\\d{7}","\\d{11}"]
-,,[,,"112|9(?:11|9[59])","\\d{3}"]
+,,[,,"99[59]","\\d{3}"]
+,[,,"NA","NA"]
 ]
 ,"SH":[,[,,"[2-9]\\d{3}","\\d{4}"]
 ,[,,"(?:[2-468]\\d|7[01])\\d{2}","\\d{4}"]
@@ -3879,6 +4112,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"9(?:11|99)","\\d{3}"]
+,[,,"NA","NA"]
 ]
 ,"SI":[,[,,"[1-7]\\d{6,7}|[89]\\d{4,7}","\\d{5,8}"]
 ,[,,"(?:1\\d|2[2-8]|3[4-8]|4[24-8]|[57][3-8])\\d{6}","\\d{7,8}"]
@@ -3901,6 +4135,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"11[23]","\\d{3}"]
+,[,,"NA","NA"]
 ]
 ,"SJ":[,[,,"0\\d{4}|[4789]\\d{7}","\\d{5}(?:\\d{3})?"]
 ,[,,"79\\d{6}","\\d{8}"]
@@ -3914,6 +4149,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"0\\d{4}|81(?:0(?:0[7-9]|1\\d)|5\\d{2})\\d{3}","\\d{5}(?:\\d{3})?"]
 ,1,[,,"11[023]","\\d{3}"]
+,[,,"NA","NA"]
 ]
 ,"SK":[,[,,"[2-689]\\d{8}","\\d{9}"]
 ,[,,"[2-5]\\d{8}","\\d{9}"]
@@ -3934,6 +4170,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"1(?:12|5[058])","\\d{3}"]
+,[,,"NA","NA"]
 ]
 ,"SL":[,[,,"[2-578]\\d{7}","\\d{6,8}"]
 ,[,,"[235]2[2-4][2-9]\\d{4}","\\d{6,8}"]
@@ -3949,6 +4186,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"(?:01|99)9","\\d{3}"]
+,[,,"NA","NA"]
 ]
 ,"SM":[,[,,"[05-7]\\d{7,9}","\\d{6,10}"]
 ,[,,"0549(?:8[0157-9]|9\\d)\\d{4}","\\d{6,10}"]
@@ -3976,6 +4214,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,1,[,,"11[358]","\\d{3}"]
+,[,,"NA","NA"]
 ]
 ,"SN":[,[,,"[37]\\d{8}","\\d{9}"]
 ,[,,"3(?:010|3(?:8[1-9]|9[2-9]))\\d{5}","\\d{9}"]
@@ -3991,6 +4230,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"NA","NA"]
+,[,,"NA","NA"]
 ]
 ,"SO":[,[,,"[1-79]\\d{6,8}","\\d{7,9}"]
 ,[,,"(?:5[57-9]|[1-4]\\d)\\d{5}","\\d{7}"]
@@ -4015,10 +4255,11 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"NA","NA"]
+,[,,"NA","NA"]
 ]
 ,"SR":[,[,,"[2-8]\\d{5,6}","\\d{6,7}"]
 ,[,,"(?:2[1-3]|3[0-7]|4\\d|5[2-58]|68\\d)\\d{4}","\\d{6,7}"]
-,[,,"(?:7[1245]|8[1-9])\\d{5}","\\d{7}"]
+,[,,"(?:7[1-5]|8[1-9])\\d{5}","\\d{7}"]
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
@@ -4035,6 +4276,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"115","\\d{3}"]
+,[,,"NA","NA"]
 ]
 ,"ST":[,[,,"[29]\\d{6}","\\d{7}"]
 ,[,,"22\\d{5}","\\d{7}"]
@@ -4050,16 +4292,17 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"112","\\d{3}"]
+,[,,"NA","NA"]
 ]
-,"SV":[,[,,"[27]\\d{7}|[89]\\d{6}(?:\\d{4})?","\\d{7,8}|\\d{11}"]
+,"SV":[,[,,"[267]\\d{7}|[89]\\d{6}(?:\\d{4})?","\\d{7,8}|\\d{11}"]
 ,[,,"2[1-6]\\d{6}","\\d{8}"]
-,[,,"7\\d{7}","\\d{8}"]
+,[,,"[67]\\d{7}","\\d{8}"]
 ,[,,"800\\d{4}(?:\\d{4})?","\\d{7}(?:\\d{4})?"]
 ,[,,"900\\d{4}(?:\\d{4})?","\\d{7}(?:\\d{4})?"]
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
-,"SV",503,"00",,,,,,,,[[,"(\\d{4})(\\d{4})","$1 $2",["[27]"]
+,"SV",503,"00",,,,,,,,[[,"(\\d{4})(\\d{4})","$1 $2",["[267]"]
 ,"","",0]
 ,[,"(\\d{3})(\\d{4})","$1 $2",["[89]"]
 ,"","",0]
@@ -4070,10 +4313,11 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"911","\\d{3}"]
+,[,,"NA","NA"]
 ]
 ,"SX":[,[,,"[5789]\\d{9}","\\d{7}(?:\\d{3})?"]
-,[,,"72154[2-8]\\d{4}","\\d{7}(?:\\d{3})?"]
-,[,,"7215(?:1[02]|2\\d|5[0346]|8[01678])\\d{4}","\\d{10}"]
+,[,,"7215(?:4[2-8]|8[239])\\d{4}","\\d{7}(?:\\d{3})?"]
+,[,,"7215(?:1[02]|2\\d|5[03469]|8[01678])\\d{4}","\\d{10}"]
 ,[,,"8(?:00|55|66|77|88)[2-9]\\d{6}","\\d{10}"]
 ,[,,"900[2-9]\\d{6}","\\d{10}"]
 ,[,,"NA","NA"]
@@ -4083,6 +4327,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,"721",[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"919","\\d{3}"]
+,[,,"NA","NA"]
 ]
 ,"SY":[,[,,"[1-59]\\d{7,8}","\\d{6,9}"]
 ,[,,"(?:1(?:1\\d?|4\\d|[2356])|2[1-35]|3(?:[13]\\d|4)|4[13]|5[1-3])\\d{6}","\\d{6,9}"]
@@ -4101,6 +4346,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"11[023]","\\d{3}"]
+,[,,"NA","NA"]
 ]
 ,"SZ":[,[,,"[027]\\d{7}","\\d{8}"]
 ,[,,"2(?:2(?:0[07]|[13]7|2[57])|3(?:0[34]|[1278]3|3[23]|[46][34])|(?:40[4-69]|67)|5(?:0[5-7]|1[6-9]|[23][78]|48|5[01]))\\d{4}","\\d{8}"]
@@ -4117,6 +4363,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"0800\\d{4}","\\d{8}"]
 ,[,,"NA","NA"]
 ,1,[,,"999","\\d{3}"]
+,[,,"NA","NA"]
 ]
 ,"TC":[,[,,"[5689]\\d{9}","\\d{7}(?:\\d{3})?"]
 ,[,,"649(?:712|9(?:4\\d|50))\\d{4}","\\d{7}(?:\\d{3})?"]
@@ -4130,6 +4377,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,"649",[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"9(?:11|99)","\\d{3}"]
+,[,,"NA","NA"]
 ]
 ,"TD":[,[,,"[2679]\\d{7}","\\d{8}"]
 ,[,,"22(?:[3789]0|5[0-5]|6[89])\\d{4}","\\d{8}"]
@@ -4145,6 +4393,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"1[78]","\\d{2}"]
+,[,,"NA","NA"]
 ]
 ,"TG":[,[,,"[29]\\d{7}","\\d{8}"]
 ,[,,"2(?:2[2-7]|3[23]|44|55|66|77)\\d{5}","\\d{8}"]
@@ -4160,8 +4409,9 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"1(?:01|1[78]|7[17])","\\d{3}"]
+,[,,"NA","NA"]
 ]
-,"TH":[,[,,"[2-9]\\d{7,8}|1\\d{9}","\\d{8,10}"]
+,"TH":[,[,,"[2-9]\\d{7,8}|1\\d{3}(?:\\d{6})?","\\d{4}|\\d{8,10}"]
 ,[,,"(?:2[1-9]|3[2-9]|4[2-5]|5[2-6]|7[3-7])\\d{6}","\\d{8}"]
 ,[,,"[89]\\d{8}","\\d{9}"]
 ,[,,"1800\\d{6}","\\d{10}"]
@@ -4179,9 +4429,10 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,"$1","",0]
 ]
 ,,[,,"NA","NA"]
-,,,[,,"NA","NA"]
-,[,,"NA","NA"]
+,,,[,,"1\\d{3}","\\d{4}"]
+,[,,"1\\d{3}","\\d{4}"]
 ,,[,,"1(?:669|9[19])","\\d{3,4}"]
+,[,,"NA","NA"]
 ]
 ,"TJ":[,[,,"[3-59]\\d{8}","\\d{3,9}"]
 ,[,,"(?:3(?:1[3-5]|2[245]|3[12]|4[24-7]|5[25]|72)|4(?:46|74|87))\\d{6}","\\d{3,9}"]
@@ -4204,19 +4455,21 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"1(?:0[1-3]|12)","\\d{3}"]
+,[,,"NA","NA"]
 ]
-,"TK":[,[,,"[1-9]\\d{3}","\\d{4}"]
-,[,,"[1-9]\\d{3}","\\d{4}"]
-,[,,"[1-9]\\d{3}","\\d{4}"]
+,"TK":[,[,,"[2-5]\\d{3}","\\d{4}"]
+,[,,"[2-4]\\d{3}","\\d{4}"]
+,[,,"5\\d{3}","\\d{4}"]
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
-,"TK",690,"00",,,,,,,1,,,[,,"NA","NA"]
+,"TK",690,"00",,,,,,,,,,[,,"NA","NA"]
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"NA","NA"]
+,[,,"NA","NA"]
 ]
 ,"TL":[,[,,"[2-47-9]\\d{6}","\\d{7}"]
 ,[,,"(?:2[1-5]|3[1-9]|4[1-4])\\d{5}","\\d{7}"]
@@ -4232,21 +4485,28 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"112","\\d{3}"]
+,[,,"NA","NA"]
 ]
 ,"TM":[,[,,"[1-6]\\d{7}","\\d{8}"]
-,[,,"(?:12\\d|243|[3-5]22)\\d{5}","\\d{8}"]
-,[,,"6[6-8]\\d{6}","\\d{8}"]
+,[,,"(?:1(?:2\\d|3[1-9])|2(?:22|4[0-35-8])|3(?:22|4[03-9])|4(?:22|3[128]|4\\d|6[15])|5(?:22|5[7-9]|6[014-689]))\\d{5}","\\d{8}"]
+,[,,"6[3-8]\\d{6}","\\d{8}"]
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
-,"TM",993,"810","8",,,"8",,"8~10",,[[,"([1-6]\\d)(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",,"8 $1","",0]
+,"TM",993,"810","8",,,"8",,"8~10",,[[,"(\\d{2})(\\d{2})(\\d{2})(\\d{2})","$1 $2-$3-$4",["12"]
+,"(8 $1)","",0]
+,[,"(\\d{2})(\\d{6})","$1 $2",["6"]
+,"8 $1","",0]
+,[,"(\\d{3})(\\d)(\\d{2})(\\d{2})","$1 $2-$3-$4",["13|[2-5]"]
+,"(8 $1)","",0]
 ]
 ,,[,,"NA","NA"]
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"0[1-3]","\\d{2}"]
+,[,,"NA","NA"]
 ]
 ,"TN":[,[,,"[2457-9]\\d{7}","\\d{8}"]
 ,[,,"7\\d{7}","\\d{8}"]
@@ -4262,6 +4522,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"19[078]","\\d{3}"]
+,[,,"NA","NA"]
 ]
 ,"TO":[,[,,"[02-8]\\d{4,6}","\\d{5,7}"]
 ,[,,"(?:2\\d|3[1-8]|4[1-4]|[56]0|7[0149]|8[05])\\d{3}","\\d{5}"]
@@ -4282,6 +4543,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,1,[,,"9(?:11|22|33|99)","\\d{3}"]
+,[,,"NA","NA"]
 ]
 ,"TR":[,[,,"[2-589]\\d{9}|444\\d{4}","\\d{7,10}"]
 ,[,,"(?:2(?:[13][26]|[28][2468]|[45][268]|[67][246])|3(?:[13][28]|[24-6][2468]|[78][02468]|92)|4(?:[16][246]|[23578][2468]|4[26]))\\d{7}","\\d{10}"]
@@ -4302,6 +4564,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"444\\d{4}","\\d{7}"]
 ,[,,"444\\d{4}|850\\d{7}","\\d{7,10}"]
 ,,[,,"1(?:1[02]|55)","\\d{3}"]
+,[,,"NA","NA"]
 ]
 ,"TT":[,[,,"[589]\\d{9}","\\d{7}(?:\\d{3})?"]
 ,[,,"868(?:2(?:01|2[1-5])|6(?:07|1[4-6]|2[1-9]|[3-6]\\d|7[0-79]|9[0-8])|82[12])\\d{4}","\\d{7}(?:\\d{3})?"]
@@ -4315,6 +4578,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,"868",[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"99[09]","\\d{3}"]
+,[,,"NA","NA"]
 ]
 ,"TV":[,[,,"[29]\\d{4,5}","\\d{5,6}"]
 ,[,,"2[02-9]\\d{3}","\\d{5}"]
@@ -4328,6 +4592,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"911","\\d{3}"]
+,[,,"NA","NA"]
 ]
 ,"TW":[,[,,"[2-9]\\d{7,8}","\\d{8,9}"]
 ,[,,"[2-8]\\d{7,8}","\\d{8,9}"]
@@ -4346,6 +4611,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"11[029]","\\d{3}"]
+,[,,"NA","NA"]
 ]
 ,"TZ":[,[,,"\\d{9}","\\d{7,9}"]
 ,[,,"2[2-8]\\d{7}","\\d{7,9}"]
@@ -4366,6 +4632,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"11[12]|999","\\d{3}"]
+,[,,"NA","NA"]
 ]
 ,"UA":[,[,,"[3-689]\\d{8}","\\d{5,9}"]
 ,[,,"(?:3[1-8]|4[13-8]|5[1-7]|6[12459])\\d{7}","\\d{5,9}"]
@@ -4386,18 +4653,19 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"1(?:0[123]|12)","\\d{3}"]
+,[,,"NA","NA"]
 ]
 ,"UG":[,[,,"\\d{9}","\\d{5,9}"]
-,[,,"20(?:[014]\\d{2}|2(?:40|[5-9]\\d)|3[23]|4\\d)\\d{4}|[34]\\d{8}","\\d{5,9}"]
-,[,,"7(?:0[0-7]|[15789]\\d)\\d{6}","\\d{9}"]
+,[,,"20(?:[014]\\d{2}|2(?:40|[5-9]\\d)|3[23]\\d|5[0-4]\\d)\\d{4}|[34]\\d{8}","\\d{5,9}"]
+,[,,"7(?:0[0-7]|[15789]\\d|20|[46][0-4])\\d{6}","\\d{9}"]
 ,[,,"800[123]\\d{5}","\\d{9}"]
 ,[,,"90[123]\\d{6}","\\d{9}"]
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
-,"UG",256,"00[057]","0",,,"0",,,,[[,"(\\d{3})(\\d{6})","$1 $2",["[7-9]|20(?:0|2[5-9])|4(?:6[45]|[7-9])"]
+,"UG",256,"00[057]","0",,,"0",,,,[[,"(\\d{3})(\\d{6})","$1 $2",["[7-9]|20(?:[013-5]|2[5-9])|4(?:6[45]|[7-9])"]
 ,"0$1","",0]
-,[,"(\\d{2})(\\d{7})","$1 $2",["204|3|4(?:[1-5]|6[0-36-9])"]
+,[,"(\\d{2})(\\d{7})","$1 $2",["3|4(?:[1-5]|6[0-36-9])"]
 ,"0$1","",0]
 ,[,"(2024)(\\d{5})","$1 $2",["2024"]
 ,"0$1","",0]
@@ -4406,10 +4674,11 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"999","\\d{3}"]
+,[,,"NA","NA"]
 ]
 ,"US":[,[,,"[2-9]\\d{9}","\\d{7}(?:\\d{3})?"]
-,[,,"(?:2(?:0[1-35-9]|1[02-9]|2[4589]|3[149]|4[08]|5[1-46]|6[0279]|7[06]|8[13])|3(?:0[1-57-9]|1[02-9]|2[0135]|3[014679]|47|5[12]|6[01]|8[056])|4(?:0[124-9]|1[02-579]|2[3-5]|3[0245]|4[0235]|58|69|7[0589]|8[04])|5(?:0[1-57-9]|1[0235-8]|20|3[0149]|4[01]|5[19]|6[1-37]|7[013-5]|8[056])|6(?:0[1-35-9]|1[024-9]|2[036]|3[016]|4[16]|5[017]|6[0-29]|78|8[12])|7(?:0[1-46-8]|1[02-9]|2[047]|3[124]|4[07]|5[47]|6[02359]|7[02-59]|8[156])|8(?:0[1-68]|1[02-8]|28|3[0-25]|4[3578]|5[06-9]|6[02-5]|7[028])|9(?:0[1346-9]|1[02-9]|2[0589]|3[1678]|4[0179]|5[1246]|7[0-3589]|8[059]))[2-9]\\d{6}","\\d{7}(?:\\d{3})?"]
-,[,,"(?:2(?:0[1-35-9]|1[02-9]|2[4589]|3[149]|4[08]|5[1-46]|6[0279]|7[06]|8[13])|3(?:0[1-57-9]|1[02-9]|2[0135]|3[014679]|47|5[12]|6[01]|8[056])|4(?:0[124-9]|1[02-579]|2[3-5]|3[0245]|4[0235]|58|69|7[0589]|8[04])|5(?:0[1-57-9]|1[0235-8]|20|3[0149]|4[01]|5[19]|6[1-37]|7[013-5]|8[056])|6(?:0[1-35-9]|1[024-9]|2[036]|3[016]|4[16]|5[017]|6[0-29]|78|8[12])|7(?:0[1-46-8]|1[02-9]|2[047]|3[124]|4[07]|5[47]|6[02359]|7[02-59]|8[156])|8(?:0[1-68]|1[02-8]|28|3[0-25]|4[3578]|5[06-9]|6[02-5]|7[028])|9(?:0[1346-9]|1[02-9]|2[0589]|3[1678]|4[0179]|5[1246]|7[0-3589]|8[059]))[2-9]\\d{6}","\\d{7}(?:\\d{3})?"]
+,[,,"(?:2(?:0[1-35-9]|1[02-9]|2[4589]|3[149]|4[08]|5[1-46]|6[0279]|7[06]|8[13])|3(?:0[1-57-9]|1[02-9]|2[0135]|3[014679]|47|5[12]|6[01]|8[056])|4(?:0[124-9]|1[02-579]|2[3-5]|3[0245]|4[0235]|58|69|7[0589]|8[04])|5(?:0[1-57-9]|1[0235-8]|20|3[0149]|4[01]|5[19]|6[1-37]|7[013-5]|8[056])|6(?:0[1-35-9]|1[024-9]|2[036]|3[016]|4[16]|5[017]|6[0-279]|78|8[12])|7(?:0[1-46-8]|1[02-9]|2[047]|3[124]|4[07]|5[47]|6[02359]|7[02-59]|8[156])|8(?:0[1-68]|1[02-8]|28|3[0-25]|4[3578]|5[06-9]|6[02-5]|7[028])|9(?:0[1346-9]|1[02-9]|2[0589]|3[1678]|4[0179]|5[1246]|7[0-3589]|8[0459]))[2-9]\\d{6}","\\d{7}(?:\\d{3})?"]
+,[,,"(?:2(?:0[1-35-9]|1[02-9]|2[4589]|3[149]|4[08]|5[1-46]|6[0279]|7[06]|8[13])|3(?:0[1-57-9]|1[02-9]|2[0135]|3[014679]|47|5[12]|6[01]|8[056])|4(?:0[124-9]|1[02-579]|2[3-5]|3[0245]|4[0235]|58|69|7[0589]|8[04])|5(?:0[1-57-9]|1[0235-8]|20|3[0149]|4[01]|5[19]|6[1-37]|7[013-5]|8[056])|6(?:0[1-35-9]|1[024-9]|2[036]|3[016]|4[16]|5[017]|6[0-279]|78|8[12])|7(?:0[1-46-8]|1[02-9]|2[047]|3[124]|4[07]|5[47]|6[02359]|7[02-59]|8[156])|8(?:0[1-68]|1[02-8]|28|3[0-25]|4[3578]|5[06-9]|6[02-5]|7[028])|9(?:0[1346-9]|1[02-9]|2[0589]|3[1678]|4[0179]|5[1246]|7[0-3589]|8[0459]))[2-9]\\d{6}","\\d{7}(?:\\d{3})?"]
 ,[,,"8(?:00|55|66|77|88)[2-9]\\d{6}","\\d{10}"]
 ,[,,"900[2-9]\\d{6}","\\d{10}"]
 ,[,,"NA","NA"]
@@ -4424,6 +4693,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,1,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"112|911","\\d{3}"]
+,[,,"NA","NA"]
 ]
 ,"UY":[,[,,"[2489]\\d{6,7}","\\d{7,8}"]
 ,[,,"2\\d{7}|4[2-7]\\d{6}","\\d{7,8}"]
@@ -4444,9 +4714,10 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"128|911","\\d{3}"]
+,[,,"NA","NA"]
 ]
 ,"UZ":[,[,,"[679]\\d{8}","\\d{7,9}"]
-,[,,"(?:6(?:1(?:22|3[124]|4[1-4]|5[123578]|64)|2(?:22|3[0-57-9]|41)|5(?:22|3[3-7]|5[024-8])|6\\d{2}|7(?:[23]\\d|7[69]|)|9(?:4[1-8]|6[135]))|7(?:0(?:5[4-9]|6[0146]|7[12456]|9[135-8])|12\\d|2(?:22|3[1345789]|4[123579]|5[14])|3(?:2\\d|3[1578]|4[1-35-7]|5[1-57]|61)|4(?:2\\d|3[1-4579]|7[1-79])|5(?:22|5[1-9]|6[1457])|6(?:22|3[12457]|4[13-8])|9(?:22|5[1-9])))\\d{5}","\\d{7,9}"]
+,[,,"(?:6(?:1(?:22|3[124]|4[1-4]|5[123578]|64)|2(?:22|3[0-57-9]|41)|5(?:22|3[3-7]|5[024-8])|6\\d{2}|7(?:[23]\\d|7[69]|)|9(?:4[1-8]|6[135]))|7(?:0(?:5[4-9]|6[0146]|7[12456]|9[135-8])|1[12]\\d|2(?:22|3[1345789]|4[123579]|5[14])|3(?:2\\d|3[1578]|4[1-35-7]|5[1-57]|61)|4(?:2\\d|3[1-4579]|7[1-79])|5(?:22|5[1-9]|6[1457])|6(?:22|3[12457]|4[13-8])|9(?:22|5[1-9])))\\d{5}","\\d{7,9}"]
 ,[,,"6(?:1(?:2(?:98|2[01])|35[0-4]|50\\d|61[23]|7(?:[01][017]|4\\d|55|9[5-9]))|2(?:11\\d|2(?:[12]1|9[01379])|5(?:[126]\\d|3[0-4])|7\\d{2})|5(?:19[01]|2(?:27|9[26])|30\\d|59\\d|7\\d{2})|6(?:2(?:1[5-9]|2[0367]|38|41|52|60)|3[79]\\d|4(?:56|83)|7(?:[07]\\d|1[017]|3[07]|4[047]|5[057]|67|8[0178]|9[79])|9[0-3]\\d)|7(?:2(?:24|3[237]|4[5-9]|7[15-8])|5(?:7[12]|8[0589])|7(?:0\\d|[39][07])|9(?:0\\d|7[079]))|9(2(?:1[1267]|5\\d|3[01]|7[0-4])|5[67]\\d|6(?:2[0-26]|8\\d)|7\\d{2}))\\d{4}|7(?:0\\d{3}|1(?:13[01]|6(?:0[47]|1[67]|66)|71[3-69]|98\\d)|2(?:2(?:2[79]|95)|3(?:2[5-9]|6[0-6])|57\\d|7(?:0\\d|1[17]|2[27]|3[37]|44|5[057]|66|88))|3(?:2(?:1[0-6]|21|3[469]|7[159])|33\\d|5(?:0[0-4]|5[579]|9\\d)|7(?:[0-3579]\\d|4[0467]|6[67]|8[078])|9[4-6]\\d)|4(?:2(?:29|5[0257]|6[0-7]|7[1-57])|5(?:1[0-4]|8\\d|9[5-9])|7(?:0\\d|1[024589]|2[0127]|3[0137]|[46][07]|5[01]|7[5-9]|9[079])|9(?:7[015-9]|[89]\\d))|5(?:112|2(?:0\\d|2[29]|[49]4)|3[1568]\\d|52[6-9]|7(?:0[01578]|1[017]|[23]7|4[047]|[5-7]\\d|8[78]|9[079]))|6(?:2(?:2[1245]|4[2-4])|39\\d|41[179]|5(?:[349]\\d|5[0-2])|7(?:0[017]|[13]\\d|22|44|55|67|88))|9(?:22[128]|3(?:2[0-4]|7\\d)|57[05629]|7(?:2[05-9]|3[37]|4\\d|60|7[2579]|87|9[07])))\\d{4}|9[0-57-9]\\d{7}","\\d{7,9}"]
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
@@ -4459,6 +4730,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"0(?:0[123]|[123]|50)","\\d{2,3}"]
+,[,,"NA","NA"]
 ]
 ,"VA":[,[,,"06\\d{8}","\\d{10}"]
 ,[,,"06698\\d{5}","\\d{10}"]
@@ -4474,6 +4746,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,1,[,,"11[2358]","\\d{3}"]
+,[,,"NA","NA"]
 ]
 ,"VC":[,[,,"[5789]\\d{9}","\\d{7}(?:\\d{3})?"]
 ,[,,"784(?:266|3(?:6[6-9]|7\\d|8[0-24-6])|4(?:38|5[0-36-8]|8\\d|9[01])|555|638|784)\\d{4}","\\d{7}(?:\\d{3})?"]
@@ -4487,6 +4760,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,"784",[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"9(?:11|99)","\\d{3}"]
+,[,,"NA","NA"]
 ]
 ,"VE":[,[,,"[24589]\\d{9}","\\d{7,10}"]
 ,[,,"(?:2(?:12|3[457-9]|[58][1-9]|[467]\\d|9[1-6])|50[01])\\d{7}","\\d{7,10}"]
@@ -4502,6 +4776,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"171","\\d{3}"]
+,[,,"NA","NA"]
 ]
 ,"VG":[,[,,"[2589]\\d{9}","\\d{7}(?:\\d{3})?"]
 ,[,,"284(?:(?:229|4(?:22|9[45])|774|8(?:52|6[459]))\\d{4}|496[0-5]\\d{3})","\\d{7}(?:\\d{3})?"]
@@ -4515,6 +4790,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,"284",[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"9(?:11|99)","\\d{3}"]
+,[,,"NA","NA"]
 ]
 ,"VI":[,[,,"[3589]\\d{9}","\\d{7}(?:\\d{3})?"]
 ,[,,"340(?:2(?:01|2[067]|36|44|77)|3(?:32|44)|4(?:4[38]|7[34])|5(?:1[34]|55)|6(?:26|4[23]|9[023])|7(?:[17]\\d|27)|884|998)\\d{4}","\\d{7}(?:\\d{3})?"]
@@ -4528,6 +4804,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,"340",[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"911","\\d{3}"]
+,[,,"NA","NA"]
 ]
 ,"VN":[,[,,"8\\d{5,8}|[1-79]\\d{7,9}","\\d{7,10}"]
 ,[,,"(?:2(?:[025-79]|1[0189]|[348][01])|3(?:[0136-9]|[25][01])|[48]\\d|5(?:[01][01]|[2-9])|6(?:[0-46-8]|5[01])|7(?:[02-79]|[18][01]))\\d{7}|69\\d{5,6}|80\\d{5}","\\d{7,10}"]
@@ -4558,6 +4835,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"11[345]","\\d{3}"]
+,[,,"NA","NA"]
 ]
 ,"VU":[,[,,"[2-57-9]\\d{4,6}","\\d{5,7}"]
 ,[,,"(?:2[2-9]\\d|3(?:[67]\\d|8[0-8])|48[4-9]|88\\d)\\d{2}","\\d{5}"]
@@ -4574,6 +4852,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"30\\d{3}|900\\d{4}","\\d{5,7}"]
 ,,[,,"112","\\d{3}"]
+,[,,"NA","NA"]
 ]
 ,"WF":[,[,,"[5-7]\\d{5}","\\d{6}"]
 ,[,,"(?:50|68|72)\\d{4}","\\d{6}"]
@@ -4589,6 +4868,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"1[578]","\\d{2}"]
+,[,,"NA","NA"]
 ]
 ,"WS":[,[,,"[2-8]\\d{4,6}","\\d{5,7}"]
 ,[,,"(?:[2-5]\\d|6[1-9]|84\\d{2})\\d{3}","\\d{5,7}"]
@@ -4607,6 +4887,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"99[4-6]","\\d{3}"]
+,[,,"NA","NA"]
 ]
 ,"YE":[,[,,"[1-7]\\d{6,8}","\\d{6,9}"]
 ,[,,"(?:1(?:7\\d|[2-68])|2[2-68]|3[2358]|4[2-58]|5[2-6]|6[3-58]|7[24-68])\\d{5}","\\d{6,8}"]
@@ -4625,6 +4906,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"19[1459]","\\d{3}"]
+,[,,"NA","NA"]
 ]
 ,"YT":[,[,,"[268]\\d{8}","\\d{9}"]
 ,[,,"2696[0-4]\\d{4}","\\d{9}"]
@@ -4638,6 +4920,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,"269|63",[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"1(?:12|5)","\\d{2,3}"]
+,[,,"NA","NA"]
 ]
 ,"ZA":[,[,,"[1-5]\\d{8}|(?:7\\d{4,8}|8[1-5789]\\d{3,7})|8[06]\\d{7}","\\d{5,9}"]
 ,[,,"(?:1[0-8]|2[1-478]|3[1-69]|4\\d|5[1346-8])\\d{7}","\\d{8,9}"]
@@ -4660,6 +4943,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"1(?:01(?:11|77)|12)","\\d{3,5}"]
+,[,,"NA","NA"]
 ]
 ,"ZM":[,[,,"[289]\\d{8}","\\d{9}"]
 ,[,,"21[1-8]\\d{6}","\\d{9}"]
@@ -4678,6 +4962,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"(?:112|99[139])","\\d{3}"]
+,[,,"NA","NA"]
 ]
 ,"ZW":[,[,,"2(?:[012457-9]\\d{3,8}|6\\d{3,6})|[13-79]\\d{4,8}|86\\d{8}","\\d{3,10}"]
 ,[,,"(?:1[3-9]|2(?:0[45]|[16]|2[28]|[49]8?|58[23]|7[246]|8[1346-9])|3(?:08?|17?|3[78]|[2456]|7[1569]|8[379])|5(?:[07-9]|1[78]|483|5(?:7?|8))|6(?:0|28|37?|[45][68][78]|98?)|848)\\d{3,6}|(?:2(?:27|5|7[135789]|8[25])|3[39]|5[1-46]|6[126-8])\\d{4,6}|2(?:0|70)\\d{5,6}|(?:4\\d|9[2-8])\\d{4,7}","\\d{3,10}"]
@@ -4710,5 +4995,87 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,,,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,,[,,"(?:112|99[3459])","\\d{3}"]
+,[,,"NA","NA"]
+]
+,"001":[,[,,"\\d{8}","\\d{8}"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"\\d{8}","\\d{8}"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,"001",800,"",,,,,,,1,[[,"(\\d{4})(\\d{4})","$1 $2",,"","",0]
+]
+,,[,,"NA","NA"]
+,,,[,,"NA","NA"]
+,[,,"NA","NA"]
+,,[,,"NA","NA"]
+,[,,"NA","NA"]
+]
+,"001":[,[,,"\\d{8}","\\d{8}"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"\\d{8}","\\d{8}"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,"001",808,"",,,,,,,1,[[,"(\\d{4})(\\d{4})","$1 $2",,"","",0]
+]
+,,[,,"NA","NA"]
+,,,[,,"NA","NA"]
+,[,,"NA","NA"]
+,,[,,"NA","NA"]
+,[,,"NA","NA"]
+]
+,"001":[,[,,"51\\d{7}(?:\\d{3})?","\\d{9}(?:\\d{3})?"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"51(?:00\\d{5}(?:\\d{3})?|10\\d{8})","\\d{9}(?:\\d{3})?"]
+,"001",883,"",,,,,,,1,[[,"(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3",,"","",0]
+,[,"(\\d{3})(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3 $4",,"","",0]
+]
+,,[,,"NA","NA"]
+,,,[,,"NA","NA"]
+,[,,"NA","NA"]
+,,[,,"NA","NA"]
+,[,,"NA","NA"]
+]
+,"001":[,[,,"\\d{11}","\\d{11}"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,"001",888,"",,,,,,,1,[[,"(\\d{3})(\\d{3})(\\d{5})","$1 $2 $3",,"","",0]
+]
+,,[,,"NA","NA"]
+,,,[,,"NA","NA"]
+,[,,"\\d{11}","\\d{11}"]
+,,[,,"NA","NA"]
+,[,,"NA","NA"]
+]
+,"001":[,[,,"\\d{9}","\\d{9}"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"\\d{9}","\\d{9}"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,"001",979,"",,,,,,,1,[[,"(\\d)(\\d{4})(\\d{4})","$1 $2 $3",,"","",0]
+]
+,,[,,"NA","NA"]
+,,,[,,"NA","NA"]
+,[,,"NA","NA"]
+,,[,,"NA","NA"]
+,[,,"NA","NA"]
 ]
 };
index ac57f11..aff1fba 100644 (file)
@@ -1122,6 +1122,57 @@ i18n.phonenumbers.PhoneMetadata.prototype.clearEmergency = function() {
 
 
 /**
+ * Gets the value of the voicemail field.
+ * @return {i18n.phonenumbers.PhoneNumberDesc} The value.
+ */
+i18n.phonenumbers.PhoneMetadata.prototype.getVoicemail = function() {
+  return /** @type {i18n.phonenumbers.PhoneNumberDesc} */ (this.get$Value(28));
+};
+
+
+/**
+ * Gets the value of the voicemail field or the default value if not set.
+ * @return {!i18n.phonenumbers.PhoneNumberDesc} The value.
+ */
+i18n.phonenumbers.PhoneMetadata.prototype.getVoicemailOrDefault = function() {
+  return /** @type {!i18n.phonenumbers.PhoneNumberDesc} */ (this.get$ValueOrDefault(28));
+};
+
+
+/**
+ * Sets the value of the voicemail field.
+ * @param {!i18n.phonenumbers.PhoneNumberDesc} value The value.
+ */
+i18n.phonenumbers.PhoneMetadata.prototype.setVoicemail = function(value) {
+  this.set$Value(28, value);
+};
+
+
+/**
+ * @return {boolean} Whether the voicemail field has a value.
+ */
+i18n.phonenumbers.PhoneMetadata.prototype.hasVoicemail = function() {
+  return this.has$Value(28);
+};
+
+
+/**
+ * @return {number} The number of values in the voicemail field.
+ */
+i18n.phonenumbers.PhoneMetadata.prototype.voicemailCount = function() {
+  return this.count$Values(28);
+};
+
+
+/**
+ * Clears the values in the voicemail field.
+ */
+i18n.phonenumbers.PhoneMetadata.prototype.clearVoicemail = function() {
+  this.clear$Field(28);
+};
+
+
+/**
  * Gets the value of the no_international_dialling field.
  * @return {i18n.phonenumbers.PhoneNumberDesc} The value.
  */
@@ -2125,6 +2176,12 @@ goog.proto2.Message.set$Metadata(i18n.phonenumbers.PhoneMetadata, {
     fieldType: goog.proto2.Message.FieldType.MESSAGE,
     type: i18n.phonenumbers.PhoneNumberDesc
   },
+  28: {
+    name: 'voicemail',
+    required: true,
+    fieldType: goog.proto2.Message.FieldType.MESSAGE,
+    type: i18n.phonenumbers.PhoneNumberDesc
+  },
   24: {
     name: 'no_international_dialling',
     required: true,
index f011105..5b75193 100644 (file)
@@ -218,6 +218,31 @@ i18n.phonenumbers.PhoneNumberUtil.DIGIT_MAPPINGS = {
 
 
 /**
+ * A map that contains characters that are essential when dialling. That means
+ * any of the characters in this map must not be removed from a number when
+ * dialing, otherwise the call will not reach the intended destination.
+ *
+ * @const
+ * @type {!Object.<string, string>}
+ * @private
+ */
+i18n.phonenumbers.PhoneNumberUtil.DIALLABLE_CHAR_MAPPINGS_ = {
+  '0': '0',
+  '1': '1',
+  '2': '2',
+  '3': '3',
+  '4': '4',
+  '5': '5',
+  '6': '6',
+  '7': '7',
+  '8': '8',
+  '9': '9',
+  '+': '+',
+  '*': '*'
+};
+
+
+/**
  * Only upper-case variants of alpha characters are stored.
  *
  * @const
@@ -653,7 +678,7 @@ i18n.phonenumbers.PhoneNumberUtil.EXTN_PATTERNS_FOR_PARSING_ =
     i18n.phonenumbers.PhoneNumberUtil.RFC3966_EXTN_PREFIX_ +
     i18n.phonenumbers.PhoneNumberUtil.CAPTURING_EXTN_DIGITS_ + '|' +
     '[ \u00A0\\t,]*' +
-    '(?:ext(?:ensi(?:o\u0301?|\u00F3))?n?|\uFF45\uFF58\uFF54\uFF4E?|' +
+    '(?:e?xt(?:ensi(?:o\u0301?|\u00F3))?n?|\uFF45?\uFF58\uFF54\uFF4E?|' +
     '[,x\uFF58#\uFF03~\uFF5E]|int|anexo|\uFF49\uFF4E\uFF54)' +
     '[:\\.\uFF0E]?[ \u00A0\\t,-]*' +
     i18n.phonenumbers.PhoneNumberUtil.CAPTURING_EXTN_DIGITS_ + '#?|' +
@@ -734,6 +759,13 @@ i18n.phonenumbers.PhoneNumberUtil.CC_PATTERN_ = /\$CC/;
 
 
 /**
+ * @const
+ * @type {string}
+ */
+i18n.phonenumbers.PhoneNumberUtil.REGION_CODE_FOR_NON_GEO_ENTITY = '001';
+
+
+/**
  * INTERNATIONAL and NATIONAL formats are consistent with the definition in
  * ITU-T Recommendation E. 123. For example, the number of the Google
  * Switzerland office will be written as '+41 44 668 1800' in INTERNATIONAL
@@ -784,9 +816,11 @@ i18n.phonenumbers.PhoneNumberType = {
   // further routed to specific offices, but allow one number to be used for a
   // company.
   UAN: 9,
+  // Used for 'Voice Mail Access Numbers'.
+  VOICEMAIL: 10,
   // A phone number is of type UNKNOWN when it does not fit any of the known
   // patterns for a specific region.
-  UNKNOWN: 10
+  UNKNOWN: -1
 };
 
 
@@ -996,7 +1030,8 @@ i18n.phonenumbers.PhoneNumberUtil.convertAlphaCharactersInNumber =
  *  <li> subscriber numbers may not be diallable from all devices (notably
  *    mobile devices, which typically requires the full national_number to be
  *    dialled in most regions).
- *  <li> most non-geographical numbers have no area codes.
+ *  <li> most non-geographical numbers have no area codes, including numbers
+ *    from non-geographical entities.
  *  <li> some geographical numbers have no area codes.
  * </ul>
  *
@@ -1172,11 +1207,28 @@ i18n.phonenumbers.PhoneNumberUtil.prototype.isValidRegionCode_ =
     function(regionCode) {
 
   return regionCode != null &&
+      regionCode !=
+          i18n.phonenumbers.PhoneNumberUtil.REGION_CODE_FOR_NON_GEO_ENTITY &&
       regionCode.toUpperCase() in i18n.phonenumbers.metadata.countryToMetadata;
 };
 
 
 /**
+ * Helper function to check the country calling code is valid.
+ *
+ * @param {number} countryCallingCode the country calling code.
+ * @return {boolean} true if country calling code code is valid.
+ * @private
+ */
+i18n.phonenumbers.PhoneNumberUtil.prototype.hasValidCountryCallingCode_ =
+    function(countryCallingCode) {
+
+  return countryCallingCode in
+      i18n.phonenumbers.metadata.countryCodeToRegionCodeMap;
+};
+
+
+/**
  * Formats a phone number in the specified format using default rules. Note that
  * this does not promise to produce a phone number that the user can dial from
  * where they are - although we do format in either 'national' or
@@ -1220,17 +1272,20 @@ i18n.phonenumbers.PhoneNumberUtil.prototype.format =
   // contained in the metadata for US.
   /** @type {string} */
   var regionCode = this.getRegionCodeForCountryCode(countryCallingCode);
-  if (!this.isValidRegionCode_(regionCode)) {
+  if (!this.hasValidCountryCallingCode_(countryCallingCode)) {
     return nationalSignificantNumber;
   }
 
+  /** @type {i18n.phonenumbers.PhoneMetadata} */
+  var metadata =
+      this.getMetadataForRegionOrCallingCode_(countryCallingCode, regionCode);
   /** @type {string} */
   var formattedExtension =
-      this.maybeGetFormattedExtension_(number, regionCode, numberFormat);
+      this.maybeGetFormattedExtension_(number, metadata, numberFormat);
   /** @type {string} */
   var formattedNationalNumber =
       this.formatNationalNumber_(nationalSignificantNumber,
-                                 regionCode,
+                                 metadata,
                                  numberFormat);
   return this.formatNumberByFormat_(countryCallingCode,
                                     numberFormat,
@@ -1268,11 +1323,14 @@ i18n.phonenumbers.PhoneNumberUtil.prototype.formatByPattern =
   // contained in the metadata for US.
   /** @type {string} */
   var regionCode = this.getRegionCodeForCountryCode(countryCallingCode);
-  if (!this.isValidRegionCode_(regionCode)) {
+  if (!this.hasValidCountryCallingCode_(countryCallingCode)) {
     return nationalSignificantNumber;
   }
   /** @type {Array.<i18n.phonenumbers.NumberFormat>} */
   var userDefinedFormatsCopy = [];
+  /** @type {i18n.phonenumbers.PhoneMetadata} */
+  var metadata =
+      this.getMetadataForRegionOrCallingCode_(countryCallingCode, regionCode);
   /** @type {number} */
   var size = userDefinedFormats.length;
   for (var i = 0; i < size; ++i) {
@@ -1289,8 +1347,7 @@ i18n.phonenumbers.PhoneNumberUtil.prototype.formatByPattern =
       /** type {i18n.phonenumbers.NumberFormat} */
       var numFormatCopy = numFormat.clone();
       /** @type {string} */
-      var nationalPrefix =
-          this.getMetadataForRegion(regionCode).getNationalPrefixOrDefault();
+      var nationalPrefix = metadata.getNationalPrefixOrDefault();
       if (nationalPrefix.length > 0) {
         // Replace $NP with national prefix and $FG with the first group ($1).
         nationalPrefixFormattingRule = nationalPrefixFormattingRule
@@ -1314,7 +1371,7 @@ i18n.phonenumbers.PhoneNumberUtil.prototype.formatByPattern =
 
   /** @type {string} */
   var formattedExtension =
-      this.maybeGetFormattedExtension_(number, regionCode, numberFormat);
+      this.maybeGetFormattedExtension_(number, metadata, numberFormat);
   /** @type {string} */
   var formattedNationalNumber =
       this.formatAccordingToFormats_(nationalSignificantNumber,
@@ -1353,17 +1410,20 @@ i18n.phonenumbers.PhoneNumberUtil.prototype.
   // contained in the metadata for US.
   /** @type {string} */
   var regionCode = this.getRegionCodeForCountryCode(countryCallingCode);
-  if (!this.isValidRegionCode_(regionCode)) {
+  if (!this.hasValidCountryCallingCode_(countryCallingCode)) {
     return nationalSignificantNumber;
   }
 
+  /** @type {i18n.phonenumbers.PhoneMetadata} */
+  var metadata =
+      this.getMetadataForRegionOrCallingCode_(countryCallingCode, regionCode);
   /** @type {string} */
   var formattedExtension = this.maybeGetFormattedExtension_(
-      number, regionCode, i18n.phonenumbers.PhoneNumberFormat.NATIONAL);
+      number, metadata, i18n.phonenumbers.PhoneNumberFormat.NATIONAL);
   /** @type {string} */
   var formattedNationalNumber =
       this.formatNationalNumber_(nationalSignificantNumber,
-                                 regionCode,
+                                 metadata,
                                  i18n.phonenumbers.PhoneNumberFormat.NATIONAL,
                                  carrierCode);
   return this.formatNumberByFormat_(
@@ -1373,6 +1433,21 @@ i18n.phonenumbers.PhoneNumberUtil.prototype.
 
 
 /**
+ * @param {number} countryCallingCode
+ * @param {?string} regionCode
+ * @return {i18n.phonenumbers.PhoneMetadata}
+ * @private
+ */
+i18n.phonenumbers.PhoneNumberUtil.prototype.getMetadataForRegionOrCallingCode_ =
+    function(countryCallingCode, regionCode) {
+  return i18n.phonenumbers.PhoneNumberUtil.REGION_CODE_FOR_NON_GEO_ENTITY ==
+      regionCode ?
+      this.getMetadataForNonGeographicalRegion(countryCallingCode) :
+      this.getMetadataForRegion(regionCode);
+};
+
+
+/**
  * Formats a phone number in national format for dialing using the carrier as
  * specified in the preferred_domestic_carrier_code field of the PhoneNumber
  * object passed in. If that is missing, use the {@code fallbackCarrierCode}
@@ -1419,9 +1494,9 @@ i18n.phonenumbers.PhoneNumberUtil.prototype.
 i18n.phonenumbers.PhoneNumberUtil.prototype.formatNumberForMobileDialing =
     function(number, regionCallingFrom, withFormatting) {
 
-  /** @type {?string} */
-  var regionCode = this.getRegionCodeForNumber(number);
-  if (!this.isValidRegionCode_(regionCode)) {
+  /** @type {number} */
+  var countryCallingCode = number.getCountryCodeOrDefault();
+  if (!this.hasValidCountryCallingCode_(countryCallingCode)) {
     return number.hasRawInput() ? number.getRawInputOrDefault() : '';
   }
 
@@ -1434,13 +1509,25 @@ i18n.phonenumbers.PhoneNumberUtil.prototype.formatNumberForMobileDialing =
   numberNoExt.clearExtension();
   /** @type {i18n.phonenumbers.PhoneNumberType} */
   var numberType = this.getNumberType(numberNoExt);
-  if ((regionCode == 'CO') && (regionCallingFrom == 'CO') &&
-      (numberType == i18n.phonenumbers.PhoneNumberType.FIXED_LINE)) {
-    formattedNumber = this.formatNationalNumberWithCarrierCode(
-        numberNoExt,
-        i18n.phonenumbers.PhoneNumberUtil
-            .COLOMBIA_MOBILE_TO_FIXED_LINE_PREFIX_);
-  } else if ((regionCode == 'BR') && (regionCallingFrom == 'BR') &&
+  /** @type {string} */
+  var regionCode = this.getRegionCodeForCountryCode(countryCallingCode);
+  if (regionCode == 'CO' && regionCallingFrom == 'CO') {
+    if (numberType == i18n.phonenumbers.PhoneNumberType.FIXED_LINE) {
+      formattedNumber = this.formatNationalNumberWithCarrierCode(
+          numberNoExt,
+          i18n.phonenumbers.PhoneNumberUtil
+              .COLOMBIA_MOBILE_TO_FIXED_LINE_PREFIX_);
+    } else {
+      // E164 doesn't work at all when dialing within Colombia.
+      formattedNumber = this.format(
+          numberNoExt, i18n.phonenumbers.PhoneNumberFormat.NATIONAL);
+    }
+  } else if (regionCode == 'PE' && regionCallingFrom == 'PE') {
+    // In Peru, numbers cannot be dialled using E164 format from a mobile phone
+    // for Movistar. Instead they must be dialled in national format.
+    formattedNumber = this.format(
+        numberNoExt, i18n.phonenumbers.PhoneNumberFormat.NATIONAL);
+  } else if (regionCode == 'BR' && regionCallingFrom == 'BR' &&
       ((numberType == i18n.phonenumbers.PhoneNumberType.FIXED_LINE) ||
       (numberType == i18n.phonenumbers.PhoneNumberType.MOBILE) ||
       (numberType == i18n.phonenumbers.PhoneNumberType.FIXED_LINE_OR_MOBILE))) {
@@ -1463,7 +1550,8 @@ i18n.phonenumbers.PhoneNumberUtil.prototype.formatNumberForMobileDialing =
   }
   return withFormatting ?
       formattedNumber :
-      i18n.phonenumbers.PhoneNumberUtil.normalizeDigitsOnly(formattedNumber);
+      i18n.phonenumbers.PhoneNumberUtil.normalizeHelper_(formattedNumber,
+          i18n.phonenumbers.PhoneNumberUtil.DIALLABLE_CHAR_MAPPINGS_, true);
 };
 
 
@@ -1498,10 +1586,8 @@ i18n.phonenumbers.PhoneNumberUtil.prototype.formatOutOfCountryCallingNumber =
   /** @type {number} */
   var countryCallingCode = number.getCountryCodeOrDefault();
   /** @type {string} */
-  var regionCode = this.getRegionCodeForCountryCode(countryCallingCode);
-  /** @type {string} */
   var nationalSignificantNumber = this.getNationalSignificantNumber(number);
-  if (!this.isValidRegionCode_(regionCode)) {
+  if (!this.hasValidCountryCallingCode_(countryCallingCode)) {
     return nationalSignificantNumber;
   }
   if (countryCallingCode ==
@@ -1525,17 +1611,12 @@ i18n.phonenumbers.PhoneNumberUtil.prototype.formatOutOfCountryCallingNumber =
     return this.format(number,
                        i18n.phonenumbers.PhoneNumberFormat.NATIONAL);
   }
-  /** @type {string} */
-  var formattedNationalNumber =
-      this.formatNationalNumber_(nationalSignificantNumber, regionCode,
-          i18n.phonenumbers.PhoneNumberFormat.INTERNATIONAL);
   /** @type {i18n.phonenumbers.PhoneMetadata} */
-  var metadata = this.getMetadataForRegion(regionCallingFrom);
+  var metadataForRegionCallingFrom =
+      this.getMetadataForRegion(regionCallingFrom);
   /** @type {string} */
-  var internationalPrefix = metadata.getInternationalPrefixOrDefault();
-  /** @type {string} */
-  var formattedExtension = this.maybeGetFormattedExtension_(
-      number, regionCode, i18n.phonenumbers.PhoneNumberFormat.INTERNATIONAL);
+  var internationalPrefix =
+      metadataForRegionCallingFrom.getInternationalPrefixOrDefault();
 
   // For regions that have multiple international prefixes, the international
   // format of the number is returned, unless there is a preferred international
@@ -1546,11 +1627,23 @@ i18n.phonenumbers.PhoneNumberUtil.prototype.formatOutOfCountryCallingNumber =
       i18n.phonenumbers.PhoneNumberUtil.UNIQUE_INTERNATIONAL_PREFIX_,
       internationalPrefix)) {
     internationalPrefixForFormatting = internationalPrefix;
-  } else if (metadata.hasPreferredInternationalPrefix()) {
+  } else if (metadataForRegionCallingFrom.hasPreferredInternationalPrefix()) {
     internationalPrefixForFormatting =
-        metadata.getPreferredInternationalPrefixOrDefault();
+        metadataForRegionCallingFrom.getPreferredInternationalPrefixOrDefault();
   }
 
+  /** @type {string} */
+  var regionCode = this.getRegionCodeForCountryCode(countryCallingCode);
+  /** @type {i18n.phonenumbers.PhoneMetadata} */
+  var metadataForRegion =
+      this.getMetadataForRegionOrCallingCode_(countryCallingCode, regionCode);
+  /** @type {string} */
+  var formattedNationalNumber =
+      this.formatNationalNumber_(nationalSignificantNumber, metadataForRegion,
+          i18n.phonenumbers.PhoneNumberFormat.INTERNATIONAL);
+  /** @type {string} */
+  var formattedExtension = this.maybeGetFormattedExtension_(number,
+      metadataForRegion, i18n.phonenumbers.PhoneNumberFormat.INTERNATIONAL);
   return internationalPrefixForFormatting.length > 0 ?
       internationalPrefixForFormatting + ' ' + countryCallingCode + ' ' +
           formattedNationalNumber + formattedExtension :
@@ -1565,9 +1658,12 @@ i18n.phonenumbers.PhoneNumberUtil.prototype.formatOutOfCountryCallingNumber =
  * is parsed from. The original format is embedded in the country_code_source
  * field of the PhoneNumber object passed in. If such information is missing,
  * the number will be formatted into the NATIONAL format by default. When the
- * number is an invalid number, the method returns the raw input when it is
- * available.
+ * number contains a leading zero and this is unexpected for this country, or we
+ * don't have a formatting pattern for the number, the method returns the raw
+ * input when it is available.
  *
+ * Note this method guarantees no digit will be inserted, removed or modified as
+ * a result of formatting.
  * @param {i18n.phonenumbers.PhoneNumber} number the phone number that needs to
  *     be formatted in its original number format.
  * @param {string} regionCallingFrom the region whose IDD needs to be prefixed
@@ -1577,27 +1673,187 @@ i18n.phonenumbers.PhoneNumberUtil.prototype.formatOutOfCountryCallingNumber =
 i18n.phonenumbers.PhoneNumberUtil.prototype.formatInOriginalFormat =
     function(number, regionCallingFrom) {
 
-  if (number.hasRawInput() && !this.isValidNumber(number)) {
+  if (number.hasRawInput() &&
+      (this.hasUnexpectedItalianLeadingZero_(number) ||
+       !this.hasFormattingPatternForNumber_(number))) {
+    // We check if we have the formatting pattern because without that, we might
+    // format the number as a group without national prefix.
     return number.getRawInputOrDefault();
   }
   if (!number.hasCountryCodeSource()) {
     return this.format(number, i18n.phonenumbers.PhoneNumberFormat.NATIONAL);
   }
+  /** @type {string} */
+  var formattedNumber;
   switch (number.getCountryCodeSource()) {
     case i18n.phonenumbers.PhoneNumber.CountryCodeSource
         .FROM_NUMBER_WITH_PLUS_SIGN:
-      return this.format(number,
+      formattedNumber = this.format(number,
           i18n.phonenumbers.PhoneNumberFormat.INTERNATIONAL);
+      break;
     case i18n.phonenumbers.PhoneNumber.CountryCodeSource.FROM_NUMBER_WITH_IDD:
-      return this.formatOutOfCountryCallingNumber(number, regionCallingFrom);
+      formattedNumber =
+          this.formatOutOfCountryCallingNumber(number, regionCallingFrom);
+      break;
     case i18n.phonenumbers.PhoneNumber.CountryCodeSource
         .FROM_NUMBER_WITHOUT_PLUS_SIGN:
-      return this.format(number,
+      formattedNumber = this.format(number,
           i18n.phonenumbers.PhoneNumberFormat.INTERNATIONAL).substring(1);
+      break;
     case i18n.phonenumbers.PhoneNumber.CountryCodeSource.FROM_DEFAULT_COUNTRY:
+      // Fall-through to default case.
     default:
-      return this.format(number, i18n.phonenumbers.PhoneNumberFormat.NATIONAL);
+      /** @type {string} */
+      var regionCode =
+          this.getRegionCodeForCountryCode(number.getCountryCodeOrDefault());
+      // We strip non-digits from the NDD here, and from the raw input later,
+      // so that we can compare them easily.
+      /** @type {?string} */
+      var nationalPrefix = this.getNddPrefixForRegion(regionCode, true);
+      /** @type {string} */
+      var nationalFormat =
+          this.format(number, i18n.phonenumbers.PhoneNumberFormat.NATIONAL);
+      if (nationalPrefix == null || nationalPrefix.length == 0) {
+        // If the region doesn't have a national prefix at all, we can safely
+        // return the national format without worrying about a national prefix
+        // being added.
+        formattedNumber = nationalFormat;
+        break;
+      }
+      // Otherwise, we check if the original number was entered with a national
+      // prefix.
+      if (this.rawInputContainsNationalPrefix_(
+          number.getRawInputOrDefault(), nationalPrefix, regionCode)) {
+        // If so, we can safely return the national format.
+        formattedNumber = nationalFormat;
+        break;
+      }
+      /** @type {i18n.phonenumbers.PhoneMetadata} */
+      var metadata = this.getMetadataForRegion(regionCode);
+      /** @type {string} */
+      var nationalNumber = this.getNationalSignificantNumber(number);
+      /** @type {i18n.phonenumbers.NumberFormat} */
+      var formatRule = this.chooseFormattingPatternForNumber_(
+          metadata.numberFormatArray(), nationalNumber);
+      // When the format we apply to this number doesn't contain national
+      // prefix, we can just return the national format.
+      // TODO: Refactor the code below with the code in
+      // isNationalPrefixPresentIfRequired.
+      /** @type {string} */
+      var candidateNationalPrefixRule =
+          formatRule.getNationalPrefixFormattingRuleOrDefault();
+      // We assume that the first-group symbol will never be _before_ the
+      // national prefix.
+      /** @type {number} */
+      var indexOfFirstGroup = candidateNationalPrefixRule.indexOf('$1');
+      if (indexOfFirstGroup <= 0) {
+        formattedNumber = nationalFormat;
+        break;
+      }
+      candidateNationalPrefixRule =
+          candidateNationalPrefixRule.substring(0, indexOfFirstGroup);
+      candidateNationalPrefixRule = i18n.phonenumbers.PhoneNumberUtil
+          .normalizeDigitsOnly(candidateNationalPrefixRule);
+      if (candidateNationalPrefixRule.length == 0) {
+        // National prefix not used when formatting this number.
+        formattedNumber = nationalFormat;
+        break;
+      }
+      // Otherwise, we need to remove the national prefix from our output.
+      /** @type {i18n.phonenumbers.NumberFormat} */
+      var numFormatCopy = formatRule.clone();
+      numFormatCopy.clearNationalPrefixFormattingRule();
+      formattedNumber = this.formatByPattern(number,
+          i18n.phonenumbers.PhoneNumberFormat.NATIONAL, [numFormatCopy]);
+      break;
+  }
+  /** @type {string} */
+  var rawInput = number.getRawInputOrDefault();
+  // If no digit is inserted/removed/modified as a result of our formatting, we
+  // return the formatted phone number; otherwise we return the raw input the
+  // user entered.
+  return (formattedNumber != null &&
+          i18n.phonenumbers.PhoneNumberUtil
+              .normalizeDigitsOnly(formattedNumber) ==
+          i18n.phonenumbers.PhoneNumberUtil.normalizeDigitsOnly(rawInput)) ?
+      formattedNumber :
+      rawInput;
+};
+
+
+/**
+ * Check if rawInput, which is assumed to be in the national format, has a
+ * national prefix. The national prefix is assumed to be in digits-only form.
+ * @param {string} rawInput
+ * @param {string} nationalPrefix
+ * @param {string} regionCode
+ * @return {boolean}
+ * @private
+ */
+i18n.phonenumbers.PhoneNumberUtil.prototype.rawInputContainsNationalPrefix_ =
+    function(rawInput, nationalPrefix, regionCode) {
+
+  /** @type {string} */
+  var normalizedNationalNumber =
+      i18n.phonenumbers.PhoneNumberUtil.normalizeDigitsOnly(rawInput);
+  if (goog.string.startsWith(normalizedNationalNumber, nationalPrefix)) {
+    try {
+      // Some Japanese numbers (e.g. 00777123) might be mistaken to contain the
+      // national prefix when written without it (e.g. 0777123) if we just do
+      // prefix matching. To tackle that, we check the validity of the number if
+      // the assumed national prefix is removed (777123 won't be valid in
+      // Japan).
+      return this.isValidNumber(
+          this.parse(normalizedNationalNumber.substring(nationalPrefix.length),
+                     regionCode));
+    } catch (e) {
+      return false;
+    }
   }
+  return false;
+};
+
+
+/**
+ * Returns true if a number is from a region whose national significant number
+ * couldn't contain a leading zero, but has the italian_leading_zero field set
+ * to true.
+ * @param {i18n.phonenumbers.PhoneNumber} number
+ * @return {boolean}
+ * @private
+ */
+i18n.phonenumbers.PhoneNumberUtil.prototype.hasUnexpectedItalianLeadingZero_ =
+    function(number) {
+
+  return number.hasItalianLeadingZero() &&
+      !this.isLeadingZeroPossible(number.getCountryCodeOrDefault());
+};
+
+
+/**
+ * @param {i18n.phonenumbers.PhoneNumber} number
+ * @return {boolean}
+ * @private
+ */
+i18n.phonenumbers.PhoneNumberUtil.prototype.hasFormattingPatternForNumber_ =
+    function(number) {
+
+  /** @type {number} */
+  var countryCallingCode = number.getCountryCodeOrDefault();
+  /** @type {string} */
+  var phoneNumberRegion = this.getRegionCodeForCountryCode(countryCallingCode);
+  /** @type {i18n.phonenumbers.PhoneMetadata} */
+  var metadata = this.getMetadataForRegionOrCallingCode_(
+      countryCallingCode, phoneNumberRegion);
+  if (metadata == null) {
+    return false;
+  }
+  /** @type {string} */
+  var nationalNumber = this.getNationalSignificantNumber(number);
+  /** @type {i18n.phonenumbers.NumberFormat} */
+  var formatRule = this.chooseFormattingPatternForNumber_(
+      metadata.numberFormatArray(), nationalNumber);
+  return formatRule != null;
 };
 
 
@@ -1638,9 +1894,7 @@ i18n.phonenumbers.PhoneNumberUtil.prototype.
   }
   /** @type {number} */
   var countryCode = number.getCountryCodeOrDefault();
-  /** @type {string} */
-  var regionCode = this.getRegionCodeForCountryCode(countryCode);
-  if (!this.isValidRegionCode_(regionCode)) {
+  if (!this.hasValidCountryCallingCode_(countryCode)) {
     return rawInput;
   }
   // Strip any prefix such as country calling code, IDD, that was present. We do
@@ -1666,7 +1920,8 @@ i18n.phonenumbers.PhoneNumberUtil.prototype.
     }
   }
   /** @type {i18n.phonenumbers.PhoneMetadata} */
-  var metadata = this.getMetadataForRegion(regionCallingFrom);
+  var metadataForRegionCallingFrom =
+      this.getMetadataForRegion(regionCallingFrom);
   if (countryCode == i18n.phonenumbers.PhoneNumberUtil.NANPA_COUNTRY_CODE_) {
     if (this.isNANPACountry(regionCallingFrom)) {
       return countryCode + ' ' + rawInput;
@@ -1676,9 +1931,11 @@ i18n.phonenumbers.PhoneNumberUtil.prototype.
     // to match against.
     /** @type {Array.<i18n.phonenumbers.NumberFormat>} */
     var availableFormats = [];
-    for (var i = 0; i < metadata.numberFormatArray().length; ++i) {
+    for (var i = 0; i < metadataForRegionCallingFrom.numberFormatArray().length;
+         ++i) {
       /** @type {i18n.phonenumbers.NumberFormat} */
-      var newFormat = metadata.numberFormatArray()[i].clone();
+      var newFormat =
+          metadataForRegionCallingFrom.numberFormatArray()[i].clone();
       // The first group is the first group of digits that the user determined.
       newFormat.setPattern('(\\d+)(.*)');
       // Here we just concatenate them back together after the national prefix
@@ -1697,25 +1954,41 @@ i18n.phonenumbers.PhoneNumberUtil.prototype.
         i18n.phonenumbers.PhoneNumberFormat.NATIONAL);
   }
   /** @type {string} */
-  var internationalPrefix = metadata.getInternationalPrefixOrDefault();
-  // For countries that have multiple international prefixes, the international
-  // format of the number is returned, unless there is a preferred international
-  // prefix.
+  var internationalPrefixForFormatting = '';
+  // If an unsupported region-calling-from is entered, or a country with
+  // multiple international prefixes, the international format of the number is
+  // returned, unless there is a preferred international prefix.
+  if (metadataForRegionCallingFrom != null) {
+    /** @type {string} */
+    var internationalPrefix =
+        metadataForRegionCallingFrom.getInternationalPrefixOrDefault();
+    internationalPrefixForFormatting =
+        i18n.phonenumbers.PhoneNumberUtil.matchesEntirely_(
+            i18n.phonenumbers.PhoneNumberUtil.UNIQUE_INTERNATIONAL_PREFIX_,
+            internationalPrefix) ?
+        internationalPrefix :
+        metadataForRegionCallingFrom.getPreferredInternationalPrefixOrDefault();
+  }
   /** @type {string} */
-  var internationalPrefixForFormatting =
-      i18n.phonenumbers.PhoneNumberUtil.matchesEntirely_(
-          i18n.phonenumbers.PhoneNumberUtil.UNIQUE_INTERNATIONAL_PREFIX_,
-          internationalPrefix) ?
-      internationalPrefix : metadata.getPreferredInternationalPrefixOrDefault();
+  var regionCode = this.getRegionCodeForCountryCode(countryCode);
+  /** @type {i18n.phonenumbers.PhoneMetadata} */
+  var metadataForRegion =
+      this.getMetadataForRegionOrCallingCode_(countryCode, regionCode);
   /** @type {string} */
   var formattedExtension = this.maybeGetFormattedExtension_(
-      number, regionCode, i18n.phonenumbers.PhoneNumberFormat.INTERNATIONAL);
-  return internationalPrefixForFormatting.length > 0 ?
-      internationalPrefixForFormatting + ' ' + countryCode + ' ' +
-          rawInput + formattedExtension :
-      this.formatNumberByFormat_(
-          countryCode, i18n.phonenumbers.PhoneNumberFormat.INTERNATIONAL,
-          rawInput, formattedExtension);
+      number, metadataForRegion,
+      i18n.phonenumbers.PhoneNumberFormat.INTERNATIONAL);
+  if (internationalPrefixForFormatting.length > 0) {
+    return internationalPrefixForFormatting + ' ' + countryCode + ' ' +
+        rawInput + formattedExtension;
+  } else {
+    // Invalid region entered as country-calling-from (so no metadata was found
+    // for it) or the region chosen has multiple international dialling
+    // prefixes.
+    return this.formatNumberByFormat_(
+        countryCode, i18n.phonenumbers.PhoneNumberFormat.INTERNATIONAL,
+        rawInput, formattedExtension);
+  }
 };
 
 
@@ -1782,7 +2055,8 @@ i18n.phonenumbers.PhoneNumberUtil.prototype.formatNumberByFormat_ =
  * be inserted into the formatted string to replace $CC.
  *
  * @param {string} number a string of characters representing a phone number.
- * @param {string} regionCode the ISO 3166-1 two-letter region code.
+ * @param {i18n.phonenumbers.PhoneMetadata} metadata the metadata for the
+ *     region that we think this number is from.
  * @param {i18n.phonenumbers.PhoneNumberFormat} numberFormat the format the
  *     phone number should be formatted into.
  * @param {string=} opt_carrierCode
@@ -1790,10 +2064,8 @@ i18n.phonenumbers.PhoneNumberUtil.prototype.formatNumberByFormat_ =
  * @private
  */
 i18n.phonenumbers.PhoneNumberUtil.prototype.formatNationalNumber_ =
-    function(number, regionCode, numberFormat, opt_carrierCode) {
+    function(number, metadata, numberFormat, opt_carrierCode) {
 
-  /** @type {i18n.phonenumbers.PhoneMetadata} */
-  var metadata = this.getMetadataForRegion(regionCode);
   /** @type {Array.<i18n.phonenumbers.NumberFormat>} */
   var intlNumberFormats = metadata.intlNumberFormatArray();
   // When the intlNumberFormats exists, we use that to format national number
@@ -1919,7 +2191,9 @@ i18n.phonenumbers.PhoneNumberUtil.prototype.formatAccordingToFormats_ =
  * @param {string} regionCode the region for which an example number is needed.
  * @return {i18n.phonenumbers.PhoneNumber} a valid fixed-line number for the
  *     specified region. Returns null when the metadata does not contain such
- *     information.
+ *     information, or the region 001 is passed in. For 001 (representing non-
+ *     geographical numbers), call {@link #getExampleNumberForNonGeoEntity}
+ *     instead.
  */
 i18n.phonenumbers.PhoneNumberUtil.prototype.getExampleNumber =
     function(regionCode) {
@@ -1937,7 +2211,9 @@ i18n.phonenumbers.PhoneNumberUtil.prototype.getExampleNumber =
  *     needed.
  * @return {i18n.phonenumbers.PhoneNumber} a valid number for the specified
  *     region and type. Returns null when the metadata does not contain such
- *     information or if an invalid region was entered.
+ *     information or if an invalid region or region 001 was entered.
+ *     For 001 (representing non-geographical numbers), call
+ *     {@link #getExampleNumberForNonGeoEntity} instead.
  */
 i18n.phonenumbers.PhoneNumberUtil.prototype.getExampleNumberForType =
     function(regionCode, type) {
@@ -1960,19 +2236,51 @@ i18n.phonenumbers.PhoneNumberUtil.prototype.getExampleNumberForType =
 
 
 /**
+ * Gets a valid number for the specified country calling code for a
+ * non-geographical entity.
+ *
+ * @param {number} countryCallingCode the country calling code for a
+ *     non-geographical entity.
+ * @return {i18n.phonenumbers.PhoneNumber} a valid number for the
+ *     non-geographical entity. Returns null when the metadata does not contain
+ *     such information, or the country calling code passed in does not belong
+ *     to a non-geographical entity.
+ */
+i18n.phonenumbers.PhoneNumberUtil.prototype.getExampleNumberForNonGeoEntity =
+    function(countryCallingCode) {
+  /** @type {i18n.phonenumbers.PhoneMetadata} */
+  var metadata =
+      this.getMetadataForNonGeographicalRegion(countryCallingCode);
+  if (metadata != null) {
+    /** @type {i18n.phonenumbers.PhoneNumberDesc} */
+    var desc = metadata.getGeneralDesc();
+    try {
+      if (desc.hasExampleNumber()) {
+        return this.parse('+' + countryCallingCode + desc.getExampleNumber(),
+                          'ZZ');
+      }
+    } catch (e) {
+    }
+  }
+  return null;
+};
+
+
+/**
  * Gets the formatted extension of a phone number, if the phone number had an
  * extension specified. If not, it returns an empty string.
  *
  * @param {i18n.phonenumbers.PhoneNumber} number the PhoneNumber that might have
  *     an extension.
- * @param {string} regionCode the ISO 3166-1 two-letter region code.
+ * @param {i18n.phonenumbers.PhoneMetadata} metadata the metadata for the
+ *     region that we think this number is from.
  * @param {i18n.phonenumbers.PhoneNumberFormat} numberFormat the format the
  *     phone number should be formatted into.
  * @return {string} the formatted extension if any.
  * @private
  */
 i18n.phonenumbers.PhoneNumberUtil.prototype.maybeGetFormattedExtension_ =
-    function(number, regionCode, numberFormat) {
+    function(number, metadata, numberFormat) {
 
   if (!number.hasExtension() || number.getExtension().length == 0) {
     return '';
@@ -1981,7 +2289,7 @@ i18n.phonenumbers.PhoneNumberUtil.prototype.maybeGetFormattedExtension_ =
       return i18n.phonenumbers.PhoneNumberUtil.RFC3966_EXTN_PREFIX_ +
           number.getExtension();
     }
-    return this.formatExtension_(number.getExtensionOrDefault(), regionCode);
+    return this.formatExtension_(number.getExtensionOrDefault(), metadata);
   }
 };
 
@@ -1992,15 +2300,14 @@ i18n.phonenumbers.PhoneNumberUtil.prototype.maybeGetFormattedExtension_ =
  * unless overridden by a preferred extension prefix for this region.
  *
  * @param {string} extensionDigits the extension digits.
- * @param {string} regionCode the ISO 3166-1 two-letter region code.
+ * @param {i18n.phonenumbers.PhoneMetadata} metadata the metadata for the
+ *     region that we think this number is from.
  * @return {string} the formatted extension.
  * @private
  */
 i18n.phonenumbers.PhoneNumberUtil.prototype.formatExtension_ =
-    function(extensionDigits, regionCode) {
+    function(extensionDigits, metadata) {
 
-  /** @type {i18n.phonenumbers.PhoneMetadata} */
-  var metadata = this.getMetadataForRegion(regionCode);
   if (metadata.hasPreferredExtnPrefix()) {
     return metadata.getPreferredExtnPrefix() + extensionDigits;
   } else {
@@ -2039,6 +2346,8 @@ i18n.phonenumbers.PhoneNumberUtil.prototype.getNumberDescByType_ =
       return metadata.getPager();
     case i18n.phonenumbers.PhoneNumberType.UAN:
       return metadata.getUan();
+    case i18n.phonenumbers.PhoneNumberType.VOICEMAIL:
+      return metadata.getVoicemail();
     default:
       return metadata.getGeneralDesc();
   }
@@ -2057,13 +2366,17 @@ i18n.phonenumbers.PhoneNumberUtil.prototype.getNumberType =
 
   /** @type {?string} */
   var regionCode = this.getRegionCodeForNumber(number);
-  if (!this.isValidRegionCode_(regionCode)) {
+  if (!this.isValidRegionCode_(regionCode) &&
+      i18n.phonenumbers.PhoneNumberUtil.REGION_CODE_FOR_NON_GEO_ENTITY !=
+      regionCode) {
     return i18n.phonenumbers.PhoneNumberType.UNKNOWN;
   }
   /** @type {string} */
   var nationalSignificantNumber = this.getNationalSignificantNumber(number);
-  return this.getNumberTypeHelper_(nationalSignificantNumber,
-      this.getMetadataForRegion(regionCode));
+  /** @type {i18n.phonenumbers.PhoneMetadata} */
+  var metadata = this.getMetadataForRegionOrCallingCode_(
+      number.getCountryCodeOrDefault(), regionCode);
+  return this.getNumberTypeHelper_(nationalSignificantNumber, metadata);
 };
 
 
@@ -2105,6 +2418,9 @@ i18n.phonenumbers.PhoneNumberUtil.prototype.getNumberTypeHelper_ =
   if (this.isNumberMatchingDesc_(nationalNumber, metadata.getUan())) {
     return i18n.phonenumbers.PhoneNumberType.UAN;
   }
+  if (this.isNumberMatchingDesc_(nationalNumber, metadata.getVoicemail())) {
+    return i18n.phonenumbers.PhoneNumberType.VOICEMAIL;
+  }
 
   /** @type {boolean} */
   var isFixedLine = this.isNumberMatchingDesc_(nationalNumber, metadata
@@ -2160,6 +2476,18 @@ i18n.phonenumbers.PhoneNumberUtil.prototype.getMetadataForRegion =
 
 
 /**
+ * @param {number} countryCallingCode
+ * @return {i18n.phonenumbers.PhoneMetadata}
+ */
+i18n.phonenumbers.PhoneNumberUtil.prototype.
+    getMetadataForNonGeographicalRegion = function(countryCallingCode) {
+
+  return this.getMetadataForRegion(
+      this.getRegionCodeForCountryCode(countryCallingCode));
+};
+
+
+/**
  * @param {string} nationalNumber
  * @param {i18n.phonenumbers.PhoneNumberDesc} numberDesc
  * @return {boolean}
@@ -2188,8 +2516,7 @@ i18n.phonenumbers.PhoneNumberUtil.prototype.isNumberMatchingDesc_ =
 i18n.phonenumbers.PhoneNumberUtil.prototype.isValidNumber = function(number) {
   /** @type {?string} */
   var regionCode = this.getRegionCodeForNumber(number);
-  return this.isValidRegionCode_(regionCode) &&
-      this.isValidNumberForRegion(number, /** @type {string} */ (regionCode));
+  return this.isValidNumberForRegion(number, regionCode);
 };
 
 
@@ -2204,7 +2531,7 @@ i18n.phonenumbers.PhoneNumberUtil.prototype.isValidNumber = function(number) {
  *
  * @param {i18n.phonenumbers.PhoneNumber} number the phone number that we want
  *     to validate.
- * @param {string} regionCode the region that we want to validate the phone
+ * @param {?string} regionCode the region that we want to validate the phone
  *     number for.
  * @return {boolean} a boolean that indicates whether the number is of a valid
  *     pattern.
@@ -2212,12 +2539,17 @@ i18n.phonenumbers.PhoneNumberUtil.prototype.isValidNumber = function(number) {
 i18n.phonenumbers.PhoneNumberUtil.prototype.isValidNumberForRegion =
     function(number, regionCode) {
 
-  if (number.getCountryCodeOrDefault() !=
-      this.getCountryCodeForRegion(regionCode)) {
+  /** @type {number} */
+  var countryCode = number.getCountryCodeOrDefault();
+  if (countryCode == 0 ||
+      (i18n.phonenumbers.PhoneNumberUtil.REGION_CODE_FOR_NON_GEO_ENTITY !=
+       regionCode &&
+       countryCode != this.getCountryCodeForRegion(regionCode))) {
     return false;
   }
   /** @type {i18n.phonenumbers.PhoneMetadata} */
-  var metadata = this.getMetadataForRegion(regionCode);
+  var metadata =
+      this.getMetadataForRegionOrCallingCode_(countryCode, regionCode);
   /** @type {i18n.phonenumbers.PhoneNumberDesc} */
   var generalNumDesc = metadata.getGeneralDesc();
   /** @type {string} */
@@ -2525,14 +2857,17 @@ i18n.phonenumbers.PhoneNumberUtil.prototype.isPossibleNumberWithReason =
   // work if the number is possible but not valid. This would need to be
   // revisited if the possible number pattern ever differed between various
   // regions within those plans.
-  /** @type {string} */
-  var regionCode = this.getRegionCodeForCountryCode(countryCode);
-  if (!this.isValidRegionCode_(regionCode)) {
+  if (!this.hasValidCountryCallingCode_(countryCode)) {
     return i18n.phonenumbers.PhoneNumberUtil.ValidationResult
         .INVALID_COUNTRY_CODE;
   }
+  /** @type {string} */
+  var regionCode = this.getRegionCodeForCountryCode(countryCode);
+  /** @type {i18n.phonenumbers.PhoneMetadata} */
+  var metadata =
+      this.getMetadataForRegionOrCallingCode_(countryCode, regionCode);
   /** @type {i18n.phonenumbers.PhoneNumberDesc} */
-  var generalNumDesc = this.getMetadataForRegion(regionCode).getGeneralDesc();
+  var generalNumDesc = metadata.getGeneralDesc();
   // Handling case of numbers with no metadata.
   if (!generalNumDesc.hasNationalNumberPattern()) {
     /** @type {number} */
@@ -3164,7 +3499,8 @@ i18n.phonenumbers.PhoneNumberUtil.prototype.parseHelper_ =
     /** @type {string} */
     var phoneNumberRegion = this.getRegionCodeForCountryCode(countryCode);
     if (phoneNumberRegion != defaultRegion) {
-      regionMetadata = this.getMetadataForRegion(phoneNumberRegion);
+      regionMetadata = this.getMetadataForRegionOrCallingCode_(
+          countryCode, phoneNumberRegion);
     }
   } else {
     // If no extracted country calling code, use the region supplied instead.
@@ -3388,14 +3724,14 @@ i18n.phonenumbers.PhoneNumberUtil.prototype.isNationalNumberSuffixOfTheOther_ =
 
 
 /**
- * Returns true if the number can only be dialled from within the region. If
- * unknown, or the number can be dialled from outside the region as well,
- * returns false. Does not check the number is a valid number.
+ * Returns true if the number can be dialled from outside the region, or
+ * unknown. If the number can only be dialled from within the region, returns
+ * false. Does not check the number is a valid number.
  * TODO: Make this method public when we have enough metadata to make it
  * worthwhile. Currently visible for testing purposes only.
  *
  * @param {i18n.phonenumbers.PhoneNumber} number the phone-number for which we
- *     want to know whether it is only diallable from within the region.
+ *     want to know whether it is diallable from outside the region.
  * @return {boolean} true if the number can only be dialled from within the
  *     country.
  */
@@ -3403,13 +3739,15 @@ i18n.phonenumbers.PhoneNumberUtil.prototype.canBeInternationallyDialled =
     function(number) {
   /** @type {?string} */
   var regionCode = this.getRegionCodeForNumber(number);
-  /** @type {string} */
-  var nationalSignificantNumber = this.getNationalSignificantNumber(number);
   if (!this.isValidRegionCode_(regionCode)) {
+    // Note numbers belonging to non-geographical entities (e.g. +800 numbers)
+    // are always internationally diallable, and will be caught here.
     return true;
   }
   /** @type {i18n.phonenumbers.PhoneMetadata} */
   var metadata = this.getMetadataForRegion(regionCode);
+  /** @type {string} */
+  var nationalSignificantNumber = this.getNationalSignificantNumber(number);
   return !this.isNumberMatchingDesc_(nationalSignificantNumber,
                                      metadata.getNoInternationalDialling());
 };
index 11d141e..113264e 100644 (file)
@@ -109,6 +109,12 @@ IT_NUMBER.setNationalNumber(236618300);
 IT_NUMBER.setItalianLeadingZero(true);
 
 
+/** @type {i18n.phonenumbers.PhoneNumber} */
+var JP_STAR_NUMBER = new i18n.phonenumbers.PhoneNumber();
+JP_STAR_NUMBER.setCountryCode(81);
+JP_STAR_NUMBER.setNationalNumber(2345);
+
+
 // Numbers to test the formatting rules from Mexico.
 /** @type {i18n.phonenumbers.PhoneNumber} */
 var MX_MOBILE1 = new i18n.phonenumbers.PhoneNumber();
@@ -196,6 +202,18 @@ US_SPOOF_WITH_RAW_INPUT.setCountryCode(1);
 US_SPOOF_WITH_RAW_INPUT.setNationalNumber(0);
 US_SPOOF_WITH_RAW_INPUT.setRawInput('000-000-0000');
 
+
+/** @type {i18n.phonenumbers.PhoneNumber} */
+var INTERNATIONAL_TOLL_FREE = new i18n.phonenumbers.PhoneNumber();
+INTERNATIONAL_TOLL_FREE.setCountryCode(800);
+INTERNATIONAL_TOLL_FREE.setNationalNumber(12345678);
+
+
+/** @type {i18n.phonenumbers.PhoneNumber} */
+var INTERNATIONAL_TOLL_FREE_TOO_LONG = new i18n.phonenumbers.PhoneNumber();
+INTERNATIONAL_TOLL_FREE_TOO_LONG.setCountryCode(800);
+INTERNATIONAL_TOLL_FREE_TOO_LONG.setNationalNumber(1234567890);
+
 var RegionCode = i18n.phonenumbers.RegionCode;
 
 function testGetInstanceLoadUSMetadata() {
@@ -262,13 +280,26 @@ function testGetInstanceLoadARMetadata() {
   assertEquals('$1 $2 $3 $4', metadata.getIntlNumberFormat(3).getFormat());
 }
 
+function testGetInstanceLoadInternationalTollFreeMetadata() {
+  /** @type {i18n.phonenumbers.PhoneMetadata} */
+  var metadata = phoneUtil.getMetadataForNonGeographicalRegion(800);
+  assertEquals('001', metadata.getId());
+  assertEquals(800, metadata.getCountryCode());
+  assertEquals('$1 $2', metadata.getNumberFormat(0).getFormat());
+  assertEquals('(\\d{4})(\\d{4})', metadata.getNumberFormat(0).getPattern());
+  assertEquals('12345678', metadata.getGeneralDesc().getExampleNumber());
+  assertEquals('12345678', metadata.getTollFree().getExampleNumber());
+}
+
 function testIsLeadingZeroPossible() {
   // Italy
   assertTrue(phoneUtil.isLeadingZeroPossible(39));
   // USA
   assertFalse(phoneUtil.isLeadingZeroPossible(1));
-  // Not in metadata file, just default to false.
+  // International toll free numbers
   assertFalse(phoneUtil.isLeadingZeroPossible(800));
+  // Not in metadata file, just default to false.
+  assertFalse(phoneUtil.isLeadingZeroPossible(888));
 }
 
 function testGetLengthOfGeographicalAreaCode() {
@@ -296,6 +327,10 @@ function testGetLengthOfGeographicalAreaCode() {
   // An invalid US number (1 digit shorter), which has no area code.
   assertEquals(0,
       phoneUtil.getLengthOfGeographicalAreaCode(US_SHORT_BY_ONE_NUMBER));
+
+  // An international toll free number, which has no area code.
+  assertEquals(0,
+      phoneUtil.getLengthOfGeographicalAreaCode(INTERNATIONAL_TOLL_FREE));
 }
 
 function testGetLengthOfNationalDestinationCode() {
@@ -334,6 +369,10 @@ function testGetLengthOfNationalDestinationCode() {
   number.setCountryCode(123);
   number.setNationalNumber(6502530000);
   assertEquals(0, phoneUtil.getLengthOfNationalDestinationCode(number));
+
+  // An international toll free number, which has NDC '1234'.
+  assertEquals(4,
+      phoneUtil.getLengthOfNationalDestinationCode(INTERNATIONAL_TOLL_FREE));
 }
 
 function testGetNationalSignificantNumber() {
@@ -347,6 +386,9 @@ function testGetNationalSignificantNumber() {
   // An Italian fixed line number.
   assertEquals('0236618300',
       phoneUtil.getNationalSignificantNumber(IT_NUMBER));
+
+  assertEquals('12345678',
+      phoneUtil.getNationalSignificantNumber(INTERNATIONAL_TOLL_FREE));
 }
 
 function testGetExampleNumber() {
@@ -364,6 +406,14 @@ function testGetExampleNumber() {
   assertNotNull(phoneUtil.getExampleNumberForType(RegionCode.US, PNT.MOBILE));
   // CS is an invalid region, so we have no data for it.
   assertNull(phoneUtil.getExampleNumberForType(RegionCode.CS, PNT.MOBILE));
+  // RegionCode 001 is reserved for supporting non-geographical country calling
+  // code. We don't support getting an example number for it with this method.
+  assertNull(phoneUtil.getExampleNumber(RegionCode.UN001));
+}
+
+function testGetExampleNumberForNonGeoEntity() {
+  assertTrue(INTERNATIONAL_TOLL_FREE.equals(
+      phoneUtil.getExampleNumberForNonGeoEntity(800)));
 }
 
 function testConvertAlphaCharactersInNumber() {
@@ -650,6 +700,9 @@ function testFormatOutOfCountryCallingNumber() {
 
   assertEquals('011 54 9 11 8765 4321',
       phoneUtil.formatOutOfCountryCallingNumber(AR_MOBILE, RegionCode.US));
+  assertEquals('011 800 1234 5678',
+      phoneUtil.formatOutOfCountryCallingNumber(INTERNATIONAL_TOLL_FREE,
+                                                RegionCode.US));
 
   /** @type {i18n.phonenumbers.PhoneNumber} */
   var arNumberWithExtn = AR_MOBILE.clone();
@@ -669,7 +722,11 @@ function testFormatOutOfCountryWithInvalidRegion() {
   // AQ/Antarctica isn't a valid region code for phone number formatting,
   // so this falls back to intl formatting.
   assertEquals('+1 650 253 0000',
-               phoneUtil.formatOutOfCountryCallingNumber(US_NUMBER, 'AQ'));
+      phoneUtil.formatOutOfCountryCallingNumber(US_NUMBER, RegionCode.AQ));
+  // For region code 001, the out-of-country format always turns into the
+  // international format.
+  assertEquals('+1 650 253 0000',
+      phoneUtil.formatOutOfCountryCallingNumber(US_NUMBER, RegionCode.UN001));
 }
 
 function testFormatOutOfCountryWithPreferredIntlPrefix() {
@@ -755,6 +812,10 @@ function testFormatOutOfCountryKeepingAlphaChars() {
   assertEquals('+61 1-800-SIX-FLAG',
       phoneUtil.formatOutOfCountryKeepingAlphaChars(alphaNumericNumber,
                                                     RegionCode.SG));
+  // Testing the case of calling from a non-supported region.
+  assertEquals('+61 1-800-SIX-FLAG',
+      phoneUtil.formatOutOfCountryKeepingAlphaChars(alphaNumericNumber,
+                                                    RegionCode.AQ));
 
   // Testing the case with an invalid country calling code.
   alphaNumericNumber.setCountryCode(0);
@@ -773,6 +834,15 @@ function testFormatOutOfCountryKeepingAlphaChars() {
   assertEquals('00 1 180-SIX',
       phoneUtil.formatOutOfCountryKeepingAlphaChars(alphaNumericNumber,
                                                     RegionCode.DE));
+
+  // Testing the case of calling from a non-supported region.
+  alphaNumericNumber.setCountryCode(1);
+  alphaNumericNumber.setNationalNumber(80749);
+  alphaNumericNumber.setRawInput('180-SIX');
+  // No country-code stripping can be done since the number is invalid.
+  assertEquals('+1 180-SIX',
+      phoneUtil.formatOutOfCountryKeepingAlphaChars(alphaNumericNumber,
+                                                    RegionCode.AQ));
 }
 
 function testFormatWithCarrierCode() {
@@ -859,6 +929,30 @@ function testFormatNumberForMobileDialing() {
   assertEquals('+16502530000',
       phoneUtil.formatNumberForMobileDialing(usNumberWithExtn,
                                              RegionCode.US, false));
+
+  // An invalid US number, which is one digit too long.
+  assertEquals('+165025300001',
+      phoneUtil.formatNumberForMobileDialing(US_LONG_NUMBER,
+                                             RegionCode.US, false));
+  assertEquals('+1 65025300001',
+      phoneUtil.formatNumberForMobileDialing(US_LONG_NUMBER,
+                                             RegionCode.US, true));
+
+  // Star numbers. In real life they appear in Israel, but we have them in JP
+  // in our test metadata.
+  assertEquals('*2345',
+      phoneUtil.formatNumberForMobileDialing(JP_STAR_NUMBER,
+                                             RegionCode.JP, false));
+  assertEquals('*2345',
+      phoneUtil.formatNumberForMobileDialing(JP_STAR_NUMBER,
+                                             RegionCode.JP, true));
+
+  assertEquals('+80012345678',
+      phoneUtil.formatNumberForMobileDialing(INTERNATIONAL_TOLL_FREE,
+                                             RegionCode.JP, false));
+  assertEquals('+800 1234 5678',
+      phoneUtil.formatNumberForMobileDialing(INTERNATIONAL_TOLL_FREE,
+                                             RegionCode.JP, true));
 }
 
 function testFormatByPattern() {
@@ -932,6 +1026,8 @@ function testFormatE164Number() {
   var PNF = i18n.phonenumbers.PhoneNumberFormat;
   assertEquals('+16502530000', phoneUtil.format(US_NUMBER, PNF.E164));
   assertEquals('+4930123456', phoneUtil.format(DE_NUMBER, PNF.E164));
+  assertEquals('+80012345678',
+      phoneUtil.format(INTERNATIONAL_TOLL_FREE, PNF.E164));
 }
 
 function testFormatNumberWithExtension() {
@@ -953,46 +1049,163 @@ function testFormatNumberWithExtension() {
                phoneUtil.format(usNumberWithExtension, PNF.NATIONAL));
 }
 
-function testFormatUsingOriginalNumberFormat() {
+function testFormatInOriginalFormat() {
   /** @type {i18n.phonenumbers.PhoneNumber} */
   var number1 = phoneUtil.parseAndKeepRawInput('+442087654321', RegionCode.GB);
   assertEquals('+44 20 8765 4321',
-               phoneUtil.formatInOriginalFormat(number1, RegionCode.GB));
+      phoneUtil.formatInOriginalFormat(number1, RegionCode.GB));
 
   /** @type {i18n.phonenumbers.PhoneNumber} */
   var number2 = phoneUtil.parseAndKeepRawInput('02087654321', RegionCode.GB);
   assertEquals('(020) 8765 4321',
-               phoneUtil.formatInOriginalFormat(number2, RegionCode.GB));
+      phoneUtil.formatInOriginalFormat(number2, RegionCode.GB));
 
   /** @type {i18n.phonenumbers.PhoneNumber} */
   var number3 = phoneUtil.parseAndKeepRawInput('011442087654321',
                                                RegionCode.US);
   assertEquals('011 44 20 8765 4321',
-               phoneUtil.formatInOriginalFormat(number3, RegionCode.US));
+      phoneUtil.formatInOriginalFormat(number3, RegionCode.US));
 
   /** @type {i18n.phonenumbers.PhoneNumber} */
   var number4 = phoneUtil.parseAndKeepRawInput('442087654321', RegionCode.GB);
   assertEquals('44 20 8765 4321',
-               phoneUtil.formatInOriginalFormat(number4, RegionCode.GB));
+      phoneUtil.formatInOriginalFormat(number4, RegionCode.GB));
 
   /** @type {i18n.phonenumbers.PhoneNumber} */
   var number5 = phoneUtil.parse('+442087654321', RegionCode.GB);
   assertEquals('(020) 8765 4321',
-               phoneUtil.formatInOriginalFormat(number5, RegionCode.GB));
+      phoneUtil.formatInOriginalFormat(number5, RegionCode.GB));
 
-  // Invalid numbers should be formatted using its raw input when that is
-  // available. Note area codes starting with 7 are intentionally excluded in
+  // Invalid numbers that we have a formatting pattern for should be formatted
+  // properly. Note area codes starting with 7 are intentionally excluded in
   // the test metadata for testing purposes.
   /** @type {i18n.phonenumbers.PhoneNumber} */
   var number6 = phoneUtil.parseAndKeepRawInput('7345678901', RegionCode.US);
-  assertEquals('7345678901',
-               phoneUtil.formatInOriginalFormat(number6, RegionCode.US));
+  assertEquals('734 567 8901',
+      phoneUtil.formatInOriginalFormat(number6, RegionCode.US));
 
-  // When the raw input is unavailable, format as usual.
+  // US is not a leading zero country, and the presence of the leading zero
+  // leads us to format the number using raw_input.
   /** @type {i18n.phonenumbers.PhoneNumber} */
-  var number7 = phoneUtil.parse('7345678901', RegionCode.US);
-  assertEquals('734 567 8901',
-               phoneUtil.formatInOriginalFormat(number7, RegionCode.US));
+  var number7 = phoneUtil.parseAndKeepRawInput('0734567 8901', RegionCode.US);
+  assertEquals('0734567 8901',
+      phoneUtil.formatInOriginalFormat(number7, RegionCode.US));
+
+  // This number is valid, but we don't have a formatting pattern for it.
+  // Fall back to the raw input.
+  /** @type {i18n.phonenumbers.PhoneNumber} */
+  var number8 = phoneUtil.parseAndKeepRawInput('02-4567-8900', RegionCode.KR);
+  assertEquals('02-4567-8900',
+      phoneUtil.formatInOriginalFormat(number8, RegionCode.KR));
+
+  /** @type {i18n.phonenumbers.PhoneNumber} */
+  var number9 = phoneUtil.parseAndKeepRawInput('01180012345678', RegionCode.US);
+  assertEquals('011 800 1234 5678',
+      phoneUtil.formatInOriginalFormat(number9, RegionCode.US));
+
+  /** @type {i18n.phonenumbers.PhoneNumber} */
+  var number10 = phoneUtil.parseAndKeepRawInput('+80012345678', RegionCode.KR);
+  assertEquals('+800 1234 5678',
+      phoneUtil.formatInOriginalFormat(number10, RegionCode.KR));
+
+  // US local numbers are formatted correctly, as we have formatting patterns
+  // for them.
+  /** @type {i18n.phonenumbers.PhoneNumber} */
+  var localNumberUS = phoneUtil.parseAndKeepRawInput('2530000', RegionCode.US);
+  assertEquals('253 0000',
+      phoneUtil.formatInOriginalFormat(localNumberUS, RegionCode.US));
+
+  /** @type {i18n.phonenumbers.PhoneNumber} */
+  var numberWithNationalPrefixUS =
+      phoneUtil.parseAndKeepRawInput('18003456789', RegionCode.US);
+  assertEquals('1 800 345 6789',
+      phoneUtil.formatInOriginalFormat(numberWithNationalPrefixUS,
+                                       RegionCode.US));
+
+  /** @type {i18n.phonenumbers.PhoneNumber} */
+  var numberWithoutNationalPrefixGB =
+      phoneUtil.parseAndKeepRawInput('2087654321', RegionCode.GB);
+  assertEquals('20 8765 4321',
+      phoneUtil.formatInOriginalFormat(numberWithoutNationalPrefixGB,
+                                       RegionCode.GB));
+  // Make sure no metadata is modified as a result of the previous function
+  // call.
+  assertEquals('(020) 8765 4321',
+      phoneUtil.formatInOriginalFormat(number5, RegionCode.GB));
+
+  /** @type {i18n.phonenumbers.PhoneNumber} */
+  var numberWithNationalPrefixMX =
+      phoneUtil.parseAndKeepRawInput('013312345678', RegionCode.MX);
+  assertEquals('01 33 1234 5678',
+      phoneUtil.formatInOriginalFormat(numberWithNationalPrefixMX,
+                                       RegionCode.MX));
+
+  /** @type {i18n.phonenumbers.PhoneNumber} */
+  var numberWithoutNationalPrefixMX =
+      phoneUtil.parseAndKeepRawInput('3312345678', RegionCode.MX);
+  assertEquals('33 1234 5678',
+      phoneUtil.formatInOriginalFormat(numberWithoutNationalPrefixMX,
+                                       RegionCode.MX));
+
+  /** @type {i18n.phonenumbers.PhoneNumber} */
+  var italianFixedLineNumber =
+      phoneUtil.parseAndKeepRawInput('0212345678', RegionCode.IT);
+  assertEquals('02 1234 5678',
+      phoneUtil.formatInOriginalFormat(italianFixedLineNumber, RegionCode.IT));
+
+  /** @type {i18n.phonenumbers.PhoneNumber} */
+  var numberWithNationalPrefixJP =
+      phoneUtil.parseAndKeepRawInput('00777012', RegionCode.JP);
+  assertEquals('0077-7012',
+      phoneUtil.formatInOriginalFormat(numberWithNationalPrefixJP,
+                                       RegionCode.JP));
+
+  /** @type {i18n.phonenumbers.PhoneNumber} */
+  var numberWithoutNationalPrefixJP =
+      phoneUtil.parseAndKeepRawInput('0777012', RegionCode.JP);
+  assertEquals('0777012',
+      phoneUtil.formatInOriginalFormat(numberWithoutNationalPrefixJP,
+                                       RegionCode.JP));
+
+  /** @type {i18n.phonenumbers.PhoneNumber} */
+  var numberWithCarrierCodeBR =
+      phoneUtil.parseAndKeepRawInput('012 3121286979', RegionCode.BR);
+  assertEquals('012 3121286979',
+      phoneUtil.formatInOriginalFormat(numberWithCarrierCodeBR, RegionCode.BR));
+
+  // The default national prefix used in this case is 045. When a number with
+  // national prefix 044 is entered, we return the raw input as we don't want to
+  // change the number entered.
+  /** @type {i18n.phonenumbers.PhoneNumber} */
+  var numberWithNationalPrefixMX1 =
+      phoneUtil.parseAndKeepRawInput('044(33)1234-5678', RegionCode.MX);
+  assertEquals('044(33)1234-5678',
+      phoneUtil.formatInOriginalFormat(numberWithNationalPrefixMX1,
+                                       RegionCode.MX));
+
+  /** @type {i18n.phonenumbers.PhoneNumber} */
+  var numberWithNationalPrefixMX2 =
+      phoneUtil.parseAndKeepRawInput('045(33)1234-5678', RegionCode.MX);
+  assertEquals('045 33 1234 5678',
+      phoneUtil.formatInOriginalFormat(numberWithNationalPrefixMX2,
+                                       RegionCode.MX));
+
+  // The default international prefix used in this case is 0011. When a number
+  // with international prefix 0012 is entered, we return the raw input as we
+  // don't want to change the number entered.
+  /** @type {i18n.phonenumbers.PhoneNumber} */
+  var outOfCountryNumberFromAU1 =
+      phoneUtil.parseAndKeepRawInput('0012 16502530000', RegionCode.AU);
+  assertEquals('0012 16502530000',
+      phoneUtil.formatInOriginalFormat(outOfCountryNumberFromAU1,
+                                       RegionCode.AU));
+
+  /** @type {i18n.phonenumbers.PhoneNumber} */
+  var outOfCountryNumberFromAU2 =
+      phoneUtil.parseAndKeepRawInput('0011 16502530000', RegionCode.AU);
+  assertEquals('0011 1 650 253 0000',
+      phoneUtil.formatInOriginalFormat(outOfCountryNumberFromAU2,
+                                       RegionCode.AU));
 }
 
 function testIsPremiumRate() {
@@ -1045,6 +1258,8 @@ function testIsTollFree() {
   tollFreeNumber.setCountryCode(49);
   tollFreeNumber.setNationalNumber(8001234567);
   assertEquals(PNT.TOLL_FREE, phoneUtil.getNumberType(tollFreeNumber));
+
+  assertEquals(PNT.TOLL_FREE, phoneUtil.getNumberType(INTERNATIONAL_TOLL_FREE));
 }
 
 function testIsMobile() {
@@ -1119,6 +1334,7 @@ function testIsValidNumber() {
   assertTrue(phoneUtil.isValidNumber(US_NUMBER));
   assertTrue(phoneUtil.isValidNumber(IT_NUMBER));
   assertTrue(phoneUtil.isValidNumber(GB_MOBILE));
+  assertTrue(phoneUtil.isValidNumber(INTERNATIONAL_TOLL_FREE));
 
   /** @type {i18n.phonenumbers.PhoneNumber} */
   var nzNumber = new i18n.phonenumbers.PhoneNumber();
@@ -1163,6 +1379,10 @@ function testIsValidForRegion() {
   reNumber.setNationalNumber(800123456);
   assertTrue(phoneUtil.isValidNumberForRegion(reNumber, RegionCode.YT));
   assertTrue(phoneUtil.isValidNumberForRegion(reNumber, RegionCode.RE));
+  assertTrue(phoneUtil.isValidNumberForRegion(INTERNATIONAL_TOLL_FREE,
+                                              RegionCode.UN001));
+  assertFalse(phoneUtil.isValidNumberForRegion(INTERNATIONAL_TOLL_FREE,
+                                               RegionCode.US));
 }
 
 function testIsNotValidNumber() {
@@ -1189,18 +1409,23 @@ function testIsNotValidNumber() {
   invalidNumber.setCountryCode(64);
   invalidNumber.setNationalNumber(3316005);
   assertFalse(phoneUtil.isValidNumber(invalidNumber));
+
+  assertFalse(phoneUtil.isValidNumber(INTERNATIONAL_TOLL_FREE_TOO_LONG));
 }
 
 function testGetRegionCodeForCountryCode() {
   assertEquals(RegionCode.US, phoneUtil.getRegionCodeForCountryCode(1));
   assertEquals(RegionCode.GB, phoneUtil.getRegionCodeForCountryCode(44));
   assertEquals(RegionCode.DE, phoneUtil.getRegionCodeForCountryCode(49));
+  assertEquals(RegionCode.UN001, phoneUtil.getRegionCodeForCountryCode(800));
 }
 
 function testGetRegionCodeForNumber() {
   assertEquals(RegionCode.BS, phoneUtil.getRegionCodeForNumber(BS_NUMBER));
   assertEquals(RegionCode.US, phoneUtil.getRegionCodeForNumber(US_NUMBER));
   assertEquals(RegionCode.GB, phoneUtil.getRegionCodeForNumber(GB_MOBILE));
+  assertEquals(RegionCode.UN001,
+      phoneUtil.getRegionCodeForNumber(INTERNATIONAL_TOLL_FREE));
 }
 
 function testGetCountryCodeForRegion() {
@@ -1208,6 +1433,7 @@ function testGetCountryCodeForRegion() {
   assertEquals(64, phoneUtil.getCountryCodeForRegion(RegionCode.NZ));
   assertEquals(0, phoneUtil.getCountryCodeForRegion(null));
   assertEquals(0, phoneUtil.getCountryCodeForRegion(RegionCode.ZZ));
+  assertEquals(0, phoneUtil.getCountryCodeForRegion(RegionCode.UN001));
   // CS is already deprecated so the library doesn't support it.
   assertEquals(0, phoneUtil.getCountryCodeForRegion(RegionCode.CS));
 }
@@ -1224,6 +1450,7 @@ function testGetNationalDiallingPrefixForRegion() {
   // Test cases with invalid regions.
   assertNull(phoneUtil.getNddPrefixForRegion(null, false));
   assertNull(phoneUtil.getNddPrefixForRegion(RegionCode.ZZ, false));
+  assertNull(phoneUtil.getNddPrefixForRegion(RegionCode.UN001, false));
   // CS is already deprecated so the library doesn't support it.
   assertNull(phoneUtil.getNddPrefixForRegion(RegionCode.CS, false));
 }
@@ -1233,6 +1460,7 @@ function testIsNANPACountry() {
   assertTrue(phoneUtil.isNANPACountry(RegionCode.BS));
   assertFalse(phoneUtil.isNANPACountry(RegionCode.DE));
   assertFalse(phoneUtil.isNANPACountry(RegionCode.ZZ));
+  assertFalse(phoneUtil.isNANPACountry(RegionCode.UN001));
   assertFalse(phoneUtil.isNANPACountry(null));
 }
 
@@ -1240,6 +1468,7 @@ function testIsPossibleNumber() {
   assertTrue(phoneUtil.isPossibleNumber(US_NUMBER));
   assertTrue(phoneUtil.isPossibleNumber(US_LOCAL_NUMBER));
   assertTrue(phoneUtil.isPossibleNumber(GB_NUMBER));
+  assertTrue(phoneUtil.isPossibleNumber(INTERNATIONAL_TOLL_FREE));
 
   assertTrue(
       phoneUtil.isPossibleNumberString('+1 650 253 0000', RegionCode.US));
@@ -1259,6 +1488,8 @@ function testIsPossibleNumber() {
       phoneUtil.isPossibleNumberString('7031 3000', RegionCode.GB));
   assertTrue(
       phoneUtil.isPossibleNumberString('3331 6005', RegionCode.NZ));
+  assertTrue(
+      phoneUtil.isPossibleNumberString('+800 1234 5678', RegionCode.UN001));
 }
 
 function testIsPossibleNumberWithReason() {
@@ -1266,32 +1497,35 @@ function testIsPossibleNumberWithReason() {
   // National numbers for country calling code +1 that are within 7 to 10 digits
   // are possible.
   assertEquals(VR.IS_POSSIBLE,
-               phoneUtil.isPossibleNumberWithReason(US_NUMBER));
+      phoneUtil.isPossibleNumberWithReason(US_NUMBER));
 
   assertEquals(VR.IS_POSSIBLE,
-               phoneUtil.isPossibleNumberWithReason(US_LOCAL_NUMBER));
+      phoneUtil.isPossibleNumberWithReason(US_LOCAL_NUMBER));
 
   assertEquals(VR.TOO_LONG,
-               phoneUtil.isPossibleNumberWithReason(US_LONG_NUMBER));
+      phoneUtil.isPossibleNumberWithReason(US_LONG_NUMBER));
 
   /** @type {i18n.phonenumbers.PhoneNumber} */
   var number = new i18n.phonenumbers.PhoneNumber();
   number.setCountryCode(0);
   number.setNationalNumber(2530000);
   assertEquals(VR.INVALID_COUNTRY_CODE,
-               phoneUtil.isPossibleNumberWithReason(number));
+      phoneUtil.isPossibleNumberWithReason(number));
 
   number = new i18n.phonenumbers.PhoneNumber();
   number.setCountryCode(1);
   number.setNationalNumber(253000);
   assertEquals(VR.TOO_SHORT,
-               phoneUtil.isPossibleNumberWithReason(number));
+      phoneUtil.isPossibleNumberWithReason(number));
 
   number = new i18n.phonenumbers.PhoneNumber();
   number.setCountryCode(65);
   number.setNationalNumber(1234567890);
   assertEquals(VR.IS_POSSIBLE,
-               phoneUtil.isPossibleNumberWithReason(number));
+      phoneUtil.isPossibleNumberWithReason(number));
+
+  assertEquals(VR.TOO_LONG,
+      phoneUtil.isPossibleNumberWithReason(INTERNATIONAL_TOLL_FREE_TOO_LONG));
 
   // Try with number that we don't have metadata for.
   /** @type {i18n.phonenumbers.PhoneNumber} */
@@ -1299,19 +1533,20 @@ function testIsPossibleNumberWithReason() {
   adNumber.setCountryCode(376);
   adNumber.setNationalNumber(12345);
   assertEquals(VR.IS_POSSIBLE,
-               phoneUtil.isPossibleNumberWithReason(adNumber));
+      phoneUtil.isPossibleNumberWithReason(adNumber));
   adNumber.setCountryCode(376);
   adNumber.setNationalNumber(13);
   assertEquals(VR.TOO_SHORT,
-               phoneUtil.isPossibleNumberWithReason(adNumber));
+      phoneUtil.isPossibleNumberWithReason(adNumber));
   adNumber.setCountryCode(376);
   adNumber.setNationalNumber(12345678901234567);
   assertEquals(VR.TOO_LONG,
-               phoneUtil.isPossibleNumberWithReason(adNumber));
+      phoneUtil.isPossibleNumberWithReason(adNumber));
 }
 
 function testIsNotPossibleNumber() {
   assertFalse(phoneUtil.isPossibleNumber(US_LONG_NUMBER));
+  assertFalse(phoneUtil.isPossibleNumber(INTERNATIONAL_TOLL_FREE_TOO_LONG));
 
   /** @type {i18n.phonenumbers.PhoneNumber} */
   var number = new i18n.phonenumbers.PhoneNumber();
@@ -1323,26 +1558,20 @@ function testIsNotPossibleNumber() {
   number.setCountryCode(44);
   number.setNationalNumber(300);
   assertFalse(phoneUtil.isPossibleNumber(number));
-
   assertFalse(
       phoneUtil.isPossibleNumberString('+1 650 253 00000', RegionCode.US));
   assertFalse(
       phoneUtil.isPossibleNumberString('(650) 253-00000', RegionCode.US));
   assertFalse(
       phoneUtil.isPossibleNumberString('I want a Pizza', RegionCode.US));
+  assertFalse(phoneUtil.isPossibleNumberString('253-000', RegionCode.US));
+  assertFalse(phoneUtil.isPossibleNumberString('1 3000', RegionCode.GB));
+  assertFalse(phoneUtil.isPossibleNumberString('+44 300', RegionCode.GB));
   assertFalse(
-      phoneUtil.isPossibleNumberString('253-000', RegionCode.US));
-  assertFalse(
-      phoneUtil.isPossibleNumberString('1 3000', RegionCode.GB));
-  assertFalse(
-      phoneUtil.isPossibleNumberString('+44 300', RegionCode.GB));
+      phoneUtil.isPossibleNumberString('+800 1234 5678 9', RegionCode.UN001));
 }
 
 function testTruncateTooLongNumber() {
-  // US number 650-253-0000, but entered with one additional digit at the end.
-  assertTrue(phoneUtil.truncateTooLongNumber(US_LONG_NUMBER));
-  assertTrue(US_NUMBER.equals(US_LONG_NUMBER));
-
   // GB number 080 1234 5678, but entered with 4 extra digits at the end.
   /** @type {i18n.phonenumbers.PhoneNumber} */
   var tooLongNumber = new i18n.phonenumbers.PhoneNumber();
@@ -1367,6 +1596,15 @@ function testTruncateTooLongNumber() {
   assertTrue(phoneUtil.truncateTooLongNumber(tooLongNumber));
   assertTrue(validNumber.equals(tooLongNumber));
 
+  // US number 650-253-0000, but entered with one additional digit at the end.
+  tooLongNumber = US_LONG_NUMBER.clone();
+  assertTrue(phoneUtil.truncateTooLongNumber(tooLongNumber));
+  assertTrue(US_NUMBER.equals(tooLongNumber));
+
+  tooLongNumber = INTERNATIONAL_TOLL_FREE_TOO_LONG.clone();
+  assertTrue(phoneUtil.truncateTooLongNumber(tooLongNumber));
+  assertTrue(INTERNATIONAL_TOLL_FREE.equals(tooLongNumber));
+
   // Tests what happens when a valid number is passed in.
   /** @type {i18n.phonenumbers.PhoneNumber} */
   var validNumberCopy = validNumber.clone();
@@ -1627,6 +1865,22 @@ function testMaybeExtractCountryCode() {
   }
   number = new i18n.phonenumbers.PhoneNumber();
   try {
+    phoneNumber = '+80012345678';
+    countryCallingCode = 800;
+    numberToFill = new goog.string.StringBuffer();
+    assertEquals('Did not extract country calling code ' + countryCallingCode +
+                 ' correctly.',
+                 countryCallingCode,
+                 phoneUtil.maybeExtractCountryCode(phoneNumber, metadata,
+                                                   numberToFill, true, number));
+    assertEquals('Did not figure out CountryCodeSource correctly',
+                 CCS.FROM_NUMBER_WITH_PLUS_SIGN,
+                 number.getCountryCodeSource());
+  } catch (e) {
+    fail('Should not have thrown an exception: ' + e.toString());
+  }
+  number = new i18n.phonenumbers.PhoneNumber();
+  try {
     phoneNumber = '2345-6789';
     numberToFill = new goog.string.StringBuffer();
     assertEquals('Should not have extracted a country calling code - ' +
@@ -1792,6 +2046,8 @@ function testParseNumberWithAlphaCharacters() {
 function testParseWithInternationalPrefixes() {
   assertTrue(US_NUMBER.equals(
       phoneUtil.parse('+1 (650) 253-0000', RegionCode.NZ)));
+  assertTrue(INTERNATIONAL_TOLL_FREE.equals(
+      phoneUtil.parse('011 800 1234 5678', RegionCode.US)));
   assertTrue(US_NUMBER.equals(
       phoneUtil.parse('1-650-253-0000', RegionCode.US)));
   // Calling the US number from Singapore by using different service providers
@@ -2130,6 +2386,8 @@ function testParseNumbersWithPlusWithNoRegion() {
       NZ_NUMBER.equals(phoneUtil.parse('Tel: +64 3 331 6005', RegionCode.ZZ)));
   assertTrue(
       NZ_NUMBER.equals(phoneUtil.parse('+64 3 331 6005', null)));
+  assertTrue(
+      INTERNATIONAL_TOLL_FREE.equals(phoneUtil.parse('+800 1234 5678', null)));
 
   // It is important that we set the carrier code to an empty string, since we
   // used ParseAndKeepRawInput and no carrier code was found.
@@ -2204,6 +2462,16 @@ function testParseExtensions() {
       phoneUtil.parse('+44 2034567890  X 456', RegionCode.GB)));
   assertTrue(ukNumber.equals(
       phoneUtil.parse('+44-2034567890;ext=456', RegionCode.GB)));
+  // Full-width extension, 'extn' only.
+  assertTrue(ukNumber.equals(
+      phoneUtil.parse('+442034567890\uFF45\uFF58\uFF54\uFF4E456',
+                      RegionCode.GB)));
+  // 'xtn' only.
+  assertTrue(ukNumber.equals(
+      phoneUtil.parse('+442034567890\uFF58\uFF54\uFF4E456', RegionCode.GB)));
+  // 'xt' only.
+  assertTrue(ukNumber.equals(
+      phoneUtil.parse('+442034567890\uFF58\uFF54456', RegionCode.GB)));
 
   /** @type {i18n.phonenumbers.PhoneNumber} */
   var usWithExtension = new i18n.phonenumbers.PhoneNumber();
@@ -2350,6 +2618,8 @@ function testIsNumberMatchMatches() {
   assertEquals(i18n.phonenumbers.PhoneNumberUtil.MatchType.EXACT_MATCH,
                phoneUtil.isNumberMatch('+64 3 331 6005', '+64 03 331 6005'));
   assertEquals(i18n.phonenumbers.PhoneNumberUtil.MatchType.EXACT_MATCH,
+               phoneUtil.isNumberMatch('+800 1234 5678', '+80012345678'));
+  assertEquals(i18n.phonenumbers.PhoneNumberUtil.MatchType.EXACT_MATCH,
                phoneUtil.isNumberMatch('+64 03 331-6005', '+64 03331 6005'));
   assertEquals(i18n.phonenumbers.PhoneNumberUtil.MatchType.EXACT_MATCH,
                phoneUtil.isNumberMatch('+643 331-6005', '+64033316005'));
@@ -2407,6 +2677,8 @@ function testIsNumberMatchNonMatches() {
   // Non-matches.
   assertEquals(i18n.phonenumbers.PhoneNumberUtil.MatchType.NO_MATCH,
                phoneUtil.isNumberMatch('03 331 6005', '03 331 6006'));
+  assertEquals(i18n.phonenumbers.PhoneNumberUtil.MatchType.NO_MATCH,
+               phoneUtil.isNumberMatch('+800 1234 5678', '+1 800 1234 5678'));
   // Different country calling code, partial number match.
   assertEquals(i18n.phonenumbers.PhoneNumberUtil.MatchType.NO_MATCH,
                phoneUtil.isNumberMatch('+64 3 331-6005', '+16433316005'));
@@ -2528,11 +2800,14 @@ function testCanBeInternationallyDialled() {
 
   // We have no data for NZ - should return true.
   assertTrue(phoneUtil.canBeInternationallyDialled(NZ_NUMBER));
+  assertTrue(phoneUtil.canBeInternationallyDialled(INTERNATIONAL_TOLL_FREE));
 }
 
 function testIsAlphaNumber() {
   assertTrue(phoneUtil.isAlphaNumber('1800 six-flags'));
   assertTrue(phoneUtil.isAlphaNumber('1800 six-flags ext. 1234'));
+  assertTrue(phoneUtil.isAlphaNumber('+800 six-flags'));
   assertFalse(phoneUtil.isAlphaNumber('1800 123-1234'));
   assertFalse(phoneUtil.isAlphaNumber('1800 123-1234 extension: 1234'));
+  assertFalse(phoneUtil.isAlphaNumber('+800 1234-1234'));
 }
index 28fa988..2380f12 100755 (executable)
@@ -29,10 +29,14 @@ goog.provide('i18n.phonenumbers.RegionCode');
  * @enum {string}
  */
 i18n.phonenumbers.RegionCode = {
+  // Region code for global networks (e.g. +800 numbers).
+  UN001: '001',
   AD: 'AD',
   AO: 'AO',
+  AQ: 'AQ',
   AR: 'AR',
   AU: 'AU',
+  BR: 'BR',
   BS: 'BS',
   CA: 'CA',
   CN: 'CN',
index e294eda..a130688 100644 (file)
@@ -361,6 +361,8 @@ public class BuildMetadataJsonFromXml extends Command {
     }
     // required PhoneNumberDesc emergency = 27;
     toJsArray(metadata.getEmergency(), jsArrayBuilder);
+    // required PhoneNumberDesc voicemail = 28;
+    toJsArray(metadata.getVoicemail(), jsArrayBuilder);
 
     jsArrayBuilder.endArray();
   }