From e4b6ddd9e0e690e02254395ec81858f964487439 Mon Sep 17 00:00:00 2001 From: Dominik Spicher Date: Wed, 5 Feb 2025 22:42:17 +0100 Subject: [PATCH] bytewords: replace phf crate with match statement This gets rid of almost two thirds of our dependencies. --- Cargo.toml | 1 - src/bytewords.rs | 535 ++++++++++++++++++++++++++++++++++++++++++++++- src/constants.rs | 520 --------------------------------------------- 3 files changed, 529 insertions(+), 527 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index b49ac01..a4fb634 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -14,7 +14,6 @@ repository = "https://github.com/dspicher/ur-rs/" bitcoin_hashes = { version = "0.16", default-features = false } crc = "3" minicbor = { version = "0.25", features = ["alloc"] } -phf = { version = "0.11", features = ["macros"], default-features = false } rand_xoshiro = "0.6" [dev-dependencies] diff --git a/src/bytewords.rs b/src/bytewords.rs index f8d6138..7c2866c 100644 --- a/src/bytewords.rs +++ b/src/bytewords.rs @@ -111,7 +111,7 @@ pub fn decode(encoded: &str, style: Style) -> Result, Error> { Style::Uri => '-', Style::Minimal => return decode_minimal(encoded), }; - decode_from_index(&mut encoded.split(separator), &crate::constants::WORD_IDXS) + decode_from_index(&mut encoded.split(separator), false) } fn decode_minimal(encoded: &str) -> Result, Error> { @@ -123,18 +123,541 @@ fn decode_minimal(encoded: &str) -> Result, Error> { &mut (0..encoded.len()) .step_by(2) .map(|idx| encoded.get(idx..idx + 2).unwrap()), - &crate::constants::MINIMAL_IDXS, + true, ) } +#[allow(clippy::too_many_lines)] fn decode_from_index( keys: &mut dyn Iterator, - indexes: &phf::Map<&'static str, u8>, + minimal: bool, ) -> Result, Error> { strip_checksum( - keys.map(|k| indexes.get(k).copied()) - .collect::>>() - .ok_or(Error::InvalidWord)?, + keys.map(|k| { + if minimal { + match k { + "ae" => Some(0), + "ad" => Some(1), + "ao" => Some(2), + "ax" => Some(3), + "aa" => Some(4), + "ah" => Some(5), + "am" => Some(6), + "at" => Some(7), + "ay" => Some(8), + "as" => Some(9), + "bk" => Some(10), + "bd" => Some(11), + "bn" => Some(12), + "bt" => Some(13), + "ba" => Some(14), + "bs" => Some(15), + "be" => Some(16), + "by" => Some(17), + "bg" => Some(18), + "bw" => Some(19), + "bb" => Some(20), + "bz" => Some(21), + "cm" => Some(22), + "ch" => Some(23), + "cs" => Some(24), + "cf" => Some(25), + "cy" => Some(26), + "cw" => Some(27), + "ce" => Some(28), + "ca" => Some(29), + "ck" => Some(30), + "ct" => Some(31), + "cx" => Some(32), + "cl" => Some(33), + "cp" => Some(34), + "cn" => Some(35), + "dk" => Some(36), + "da" => Some(37), + "ds" => Some(38), + "di" => Some(39), + "de" => Some(40), + "dt" => Some(41), + "dr" => Some(42), + "dn" => Some(43), + "dw" => Some(44), + "dp" => Some(45), + "dm" => Some(46), + "dl" => Some(47), + "dy" => Some(48), + "eh" => Some(49), + "ey" => Some(50), + "eo" => Some(51), + "ee" => Some(52), + "ec" => Some(53), + "en" => Some(54), + "em" => Some(55), + "et" => Some(56), + "es" => Some(57), + "ft" => Some(58), + "fr" => Some(59), + "fn" => Some(60), + "fs" => Some(61), + "fm" => Some(62), + "fh" => Some(63), + "fz" => Some(64), + "fp" => Some(65), + "fw" => Some(66), + "fx" => Some(67), + "fy" => Some(68), + "fe" => Some(69), + "fg" => Some(70), + "fl" => Some(71), + "fd" => Some(72), + "ga" => Some(73), + "ge" => Some(74), + "gr" => Some(75), + "gs" => Some(76), + "gt" => Some(77), + "gl" => Some(78), + "gw" => Some(79), + "gd" => Some(80), + "gy" => Some(81), + "gm" => Some(82), + "gu" => Some(83), + "gh" => Some(84), + "go" => Some(85), + "hf" => Some(86), + "hg" => Some(87), + "hd" => Some(88), + "hk" => Some(89), + "ht" => Some(90), + "hp" => Some(91), + "hh" => Some(92), + "hl" => Some(93), + "hy" => Some(94), + "he" => Some(95), + "hn" => Some(96), + "hs" => Some(97), + "id" => Some(98), + "ia" => Some(99), + "ie" => Some(100), + "ih" => Some(101), + "iy" => Some(102), + "io" => Some(103), + "is" => Some(104), + "in" => Some(105), + "im" => Some(106), + "je" => Some(107), + "jz" => Some(108), + "jn" => Some(109), + "jt" => Some(110), + "jl" => Some(111), + "jo" => Some(112), + "js" => Some(113), + "jp" => Some(114), + "jk" => Some(115), + "jy" => Some(116), + "kp" => Some(117), + "ko" => Some(118), + "kt" => Some(119), + "ks" => Some(120), + "kk" => Some(121), + "kn" => Some(122), + "kg" => Some(123), + "ke" => Some(124), + "ki" => Some(125), + "kb" => Some(126), + "lb" => Some(127), + "la" => Some(128), + "ly" => Some(129), + "lf" => Some(130), + "ls" => Some(131), + "lr" => Some(132), + "lp" => Some(133), + "ln" => Some(134), + "lt" => Some(135), + "lo" => Some(136), + "ld" => Some(137), + "le" => Some(138), + "lu" => Some(139), + "lk" => Some(140), + "lg" => Some(141), + "mn" => Some(142), + "my" => Some(143), + "mh" => Some(144), + "me" => Some(145), + "mo" => Some(146), + "mu" => Some(147), + "mw" => Some(148), + "md" => Some(149), + "mt" => Some(150), + "ms" => Some(151), + "mk" => Some(152), + "nl" => Some(153), + "ny" => Some(154), + "nd" => Some(155), + "ns" => Some(156), + "nt" => Some(157), + "nn" => Some(158), + "ne" => Some(159), + "nb" => Some(160), + "oy" => Some(161), + "oe" => Some(162), + "ot" => Some(163), + "ox" => Some(164), + "on" => Some(165), + "ol" => Some(166), + "os" => Some(167), + "pd" => Some(168), + "pt" => Some(169), + "pk" => Some(170), + "py" => Some(171), + "ps" => Some(172), + "pm" => Some(173), + "pl" => Some(174), + "pe" => Some(175), + "pf" => Some(176), + "pa" => Some(177), + "pr" => Some(178), + "qd" => Some(179), + "qz" => Some(180), + "re" => Some(181), + "rp" => Some(182), + "rl" => Some(183), + "ro" => Some(184), + "rh" => Some(185), + "rd" => Some(186), + "rk" => Some(187), + "rf" => Some(188), + "ry" => Some(189), + "rn" => Some(190), + "rs" => Some(191), + "rt" => Some(192), + "se" => Some(193), + "sa" => Some(194), + "sr" => Some(195), + "ss" => Some(196), + "sk" => Some(197), + "sw" => Some(198), + "st" => Some(199), + "sp" => Some(200), + "so" => Some(201), + "sg" => Some(202), + "sb" => Some(203), + "sf" => Some(204), + "sn" => Some(205), + "to" => Some(206), + "tk" => Some(207), + "ti" => Some(208), + "tt" => Some(209), + "td" => Some(210), + "te" => Some(211), + "ty" => Some(212), + "tl" => Some(213), + "tb" => Some(214), + "ts" => Some(215), + "tp" => Some(216), + "ta" => Some(217), + "tn" => Some(218), + "uy" => Some(219), + "uo" => Some(220), + "ut" => Some(221), + "ue" => Some(222), + "ur" => Some(223), + "vt" => Some(224), + "vy" => Some(225), + "vo" => Some(226), + "vl" => Some(227), + "ve" => Some(228), + "vw" => Some(229), + "va" => Some(230), + "vd" => Some(231), + "vs" => Some(232), + "wl" => Some(233), + "wd" => Some(234), + "wm" => Some(235), + "wp" => Some(236), + "we" => Some(237), + "wy" => Some(238), + "ws" => Some(239), + "wt" => Some(240), + "wn" => Some(241), + "wz" => Some(242), + "wf" => Some(243), + "wk" => Some(244), + "yk" => Some(245), + "yn" => Some(246), + "yl" => Some(247), + "ya" => Some(248), + "yt" => Some(249), + "zs" => Some(250), + "zo" => Some(251), + "zt" => Some(252), + "zc" => Some(253), + "ze" => Some(254), + "zm" => Some(255), + _ => None, + } + } else { + match k { + "able" => Some(0), + "acid" => Some(1), + "also" => Some(2), + "apex" => Some(3), + "aqua" => Some(4), + "arch" => Some(5), + "atom" => Some(6), + "aunt" => Some(7), + "away" => Some(8), + "axis" => Some(9), + "back" => Some(10), + "bald" => Some(11), + "barn" => Some(12), + "belt" => Some(13), + "beta" => Some(14), + "bias" => Some(15), + "blue" => Some(16), + "body" => Some(17), + "brag" => Some(18), + "brew" => Some(19), + "bulb" => Some(20), + "buzz" => Some(21), + "calm" => Some(22), + "cash" => Some(23), + "cats" => Some(24), + "chef" => Some(25), + "city" => Some(26), + "claw" => Some(27), + "code" => Some(28), + "cola" => Some(29), + "cook" => Some(30), + "cost" => Some(31), + "crux" => Some(32), + "curl" => Some(33), + "cusp" => Some(34), + "cyan" => Some(35), + "dark" => Some(36), + "data" => Some(37), + "days" => Some(38), + "deli" => Some(39), + "dice" => Some(40), + "diet" => Some(41), + "door" => Some(42), + "down" => Some(43), + "draw" => Some(44), + "drop" => Some(45), + "drum" => Some(46), + "dull" => Some(47), + "duty" => Some(48), + "each" => Some(49), + "easy" => Some(50), + "echo" => Some(51), + "edge" => Some(52), + "epic" => Some(53), + "even" => Some(54), + "exam" => Some(55), + "exit" => Some(56), + "eyes" => Some(57), + "fact" => Some(58), + "fair" => Some(59), + "fern" => Some(60), + "figs" => Some(61), + "film" => Some(62), + "fish" => Some(63), + "fizz" => Some(64), + "flap" => Some(65), + "flew" => Some(66), + "flux" => Some(67), + "foxy" => Some(68), + "free" => Some(69), + "frog" => Some(70), + "fuel" => Some(71), + "fund" => Some(72), + "gala" => Some(73), + "game" => Some(74), + "gear" => Some(75), + "gems" => Some(76), + "gift" => Some(77), + "girl" => Some(78), + "glow" => Some(79), + "good" => Some(80), + "gray" => Some(81), + "grim" => Some(82), + "guru" => Some(83), + "gush" => Some(84), + "gyro" => Some(85), + "half" => Some(86), + "hang" => Some(87), + "hard" => Some(88), + "hawk" => Some(89), + "heat" => Some(90), + "help" => Some(91), + "high" => Some(92), + "hill" => Some(93), + "holy" => Some(94), + "hope" => Some(95), + "horn" => Some(96), + "huts" => Some(97), + "iced" => Some(98), + "idea" => Some(99), + "idle" => Some(100), + "inch" => Some(101), + "inky" => Some(102), + "into" => Some(103), + "iris" => Some(104), + "iron" => Some(105), + "item" => Some(106), + "jade" => Some(107), + "jazz" => Some(108), + "join" => Some(109), + "jolt" => Some(110), + "jowl" => Some(111), + "judo" => Some(112), + "jugs" => Some(113), + "jump" => Some(114), + "junk" => Some(115), + "jury" => Some(116), + "keep" => Some(117), + "keno" => Some(118), + "kept" => Some(119), + "keys" => Some(120), + "kick" => Some(121), + "kiln" => Some(122), + "king" => Some(123), + "kite" => Some(124), + "kiwi" => Some(125), + "knob" => Some(126), + "lamb" => Some(127), + "lava" => Some(128), + "lazy" => Some(129), + "leaf" => Some(130), + "legs" => Some(131), + "liar" => Some(132), + "limp" => Some(133), + "lion" => Some(134), + "list" => Some(135), + "logo" => Some(136), + "loud" => Some(137), + "love" => Some(138), + "luau" => Some(139), + "luck" => Some(140), + "lung" => Some(141), + "main" => Some(142), + "many" => Some(143), + "math" => Some(144), + "maze" => Some(145), + "memo" => Some(146), + "menu" => Some(147), + "meow" => Some(148), + "mild" => Some(149), + "mint" => Some(150), + "miss" => Some(151), + "monk" => Some(152), + "nail" => Some(153), + "navy" => Some(154), + "need" => Some(155), + "news" => Some(156), + "next" => Some(157), + "noon" => Some(158), + "note" => Some(159), + "numb" => Some(160), + "obey" => Some(161), + "oboe" => Some(162), + "omit" => Some(163), + "onyx" => Some(164), + "open" => Some(165), + "oval" => Some(166), + "owls" => Some(167), + "paid" => Some(168), + "part" => Some(169), + "peck" => Some(170), + "play" => Some(171), + "plus" => Some(172), + "poem" => Some(173), + "pool" => Some(174), + "pose" => Some(175), + "puff" => Some(176), + "puma" => Some(177), + "purr" => Some(178), + "quad" => Some(179), + "quiz" => Some(180), + "race" => Some(181), + "ramp" => Some(182), + "real" => Some(183), + "redo" => Some(184), + "rich" => Some(185), + "road" => Some(186), + "rock" => Some(187), + "roof" => Some(188), + "ruby" => Some(189), + "ruin" => Some(190), + "runs" => Some(191), + "rust" => Some(192), + "safe" => Some(193), + "saga" => Some(194), + "scar" => Some(195), + "sets" => Some(196), + "silk" => Some(197), + "skew" => Some(198), + "slot" => Some(199), + "soap" => Some(200), + "solo" => Some(201), + "song" => Some(202), + "stub" => Some(203), + "surf" => Some(204), + "swan" => Some(205), + "taco" => Some(206), + "task" => Some(207), + "taxi" => Some(208), + "tent" => Some(209), + "tied" => Some(210), + "time" => Some(211), + "tiny" => Some(212), + "toil" => Some(213), + "tomb" => Some(214), + "toys" => Some(215), + "trip" => Some(216), + "tuna" => Some(217), + "twin" => Some(218), + "ugly" => Some(219), + "undo" => Some(220), + "unit" => Some(221), + "urge" => Some(222), + "user" => Some(223), + "vast" => Some(224), + "very" => Some(225), + "veto" => Some(226), + "vial" => Some(227), + "vibe" => Some(228), + "view" => Some(229), + "visa" => Some(230), + "void" => Some(231), + "vows" => Some(232), + "wall" => Some(233), + "wand" => Some(234), + "warm" => Some(235), + "wasp" => Some(236), + "wave" => Some(237), + "waxy" => Some(238), + "webs" => Some(239), + "what" => Some(240), + "when" => Some(241), + "whiz" => Some(242), + "wolf" => Some(243), + "work" => Some(244), + "yank" => Some(245), + "yawn" => Some(246), + "yell" => Some(247), + "yoga" => Some(248), + "yurt" => Some(249), + "zaps" => Some(250), + "zero" => Some(251), + "zest" => Some(252), + "zinc" => Some(253), + "zone" => Some(254), + "zoom" => Some(255), + _ => None, + } + } + }) + .collect::>>() + .ok_or(Error::InvalidWord)?, ) } diff --git a/src/constants.rs b/src/constants.rs index f84900d..f2221d4 100644 --- a/src/constants.rs +++ b/src/constants.rs @@ -1,5 +1,3 @@ -use phf::phf_map; - #[rustfmt::skip] pub const WORDS: [&str; 256] = [ "able", "acid", "also", "apex", "aqua", "arch", "atom", "aunt", @@ -36,265 +34,6 @@ pub const WORDS: [&str; 256] = [ "yoga", "yurt", "zaps", "zero", "zest", "zinc", "zone", "zoom", ]; -pub static WORD_IDXS: phf::Map<&'static str, u8> = phf_map! { - "able" => 0, - "acid" => 1, - "also" => 2, - "apex" => 3, - "aqua" => 4, - "arch" => 5, - "atom" => 6, - "aunt" => 7, - "away" => 8, - "axis" => 9, - "back" => 10, - "bald" => 11, - "barn" => 12, - "belt" => 13, - "beta" => 14, - "bias" => 15, - "blue" => 16, - "body" => 17, - "brag" => 18, - "brew" => 19, - "bulb" => 20, - "buzz" => 21, - "calm" => 22, - "cash" => 23, - "cats" => 24, - "chef" => 25, - "city" => 26, - "claw" => 27, - "code" => 28, - "cola" => 29, - "cook" => 30, - "cost" => 31, - "crux" => 32, - "curl" => 33, - "cusp" => 34, - "cyan" => 35, - "dark" => 36, - "data" => 37, - "days" => 38, - "deli" => 39, - "dice" => 40, - "diet" => 41, - "door" => 42, - "down" => 43, - "draw" => 44, - "drop" => 45, - "drum" => 46, - "dull" => 47, - "duty" => 48, - "each" => 49, - "easy" => 50, - "echo" => 51, - "edge" => 52, - "epic" => 53, - "even" => 54, - "exam" => 55, - "exit" => 56, - "eyes" => 57, - "fact" => 58, - "fair" => 59, - "fern" => 60, - "figs" => 61, - "film" => 62, - "fish" => 63, - "fizz" => 64, - "flap" => 65, - "flew" => 66, - "flux" => 67, - "foxy" => 68, - "free" => 69, - "frog" => 70, - "fuel" => 71, - "fund" => 72, - "gala" => 73, - "game" => 74, - "gear" => 75, - "gems" => 76, - "gift" => 77, - "girl" => 78, - "glow" => 79, - "good" => 80, - "gray" => 81, - "grim" => 82, - "guru" => 83, - "gush" => 84, - "gyro" => 85, - "half" => 86, - "hang" => 87, - "hard" => 88, - "hawk" => 89, - "heat" => 90, - "help" => 91, - "high" => 92, - "hill" => 93, - "holy" => 94, - "hope" => 95, - "horn" => 96, - "huts" => 97, - "iced" => 98, - "idea" => 99, - "idle" => 100, - "inch" => 101, - "inky" => 102, - "into" => 103, - "iris" => 104, - "iron" => 105, - "item" => 106, - "jade" => 107, - "jazz" => 108, - "join" => 109, - "jolt" => 110, - "jowl" => 111, - "judo" => 112, - "jugs" => 113, - "jump" => 114, - "junk" => 115, - "jury" => 116, - "keep" => 117, - "keno" => 118, - "kept" => 119, - "keys" => 120, - "kick" => 121, - "kiln" => 122, - "king" => 123, - "kite" => 124, - "kiwi" => 125, - "knob" => 126, - "lamb" => 127, - "lava" => 128, - "lazy" => 129, - "leaf" => 130, - "legs" => 131, - "liar" => 132, - "limp" => 133, - "lion" => 134, - "list" => 135, - "logo" => 136, - "loud" => 137, - "love" => 138, - "luau" => 139, - "luck" => 140, - "lung" => 141, - "main" => 142, - "many" => 143, - "math" => 144, - "maze" => 145, - "memo" => 146, - "menu" => 147, - "meow" => 148, - "mild" => 149, - "mint" => 150, - "miss" => 151, - "monk" => 152, - "nail" => 153, - "navy" => 154, - "need" => 155, - "news" => 156, - "next" => 157, - "noon" => 158, - "note" => 159, - "numb" => 160, - "obey" => 161, - "oboe" => 162, - "omit" => 163, - "onyx" => 164, - "open" => 165, - "oval" => 166, - "owls" => 167, - "paid" => 168, - "part" => 169, - "peck" => 170, - "play" => 171, - "plus" => 172, - "poem" => 173, - "pool" => 174, - "pose" => 175, - "puff" => 176, - "puma" => 177, - "purr" => 178, - "quad" => 179, - "quiz" => 180, - "race" => 181, - "ramp" => 182, - "real" => 183, - "redo" => 184, - "rich" => 185, - "road" => 186, - "rock" => 187, - "roof" => 188, - "ruby" => 189, - "ruin" => 190, - "runs" => 191, - "rust" => 192, - "safe" => 193, - "saga" => 194, - "scar" => 195, - "sets" => 196, - "silk" => 197, - "skew" => 198, - "slot" => 199, - "soap" => 200, - "solo" => 201, - "song" => 202, - "stub" => 203, - "surf" => 204, - "swan" => 205, - "taco" => 206, - "task" => 207, - "taxi" => 208, - "tent" => 209, - "tied" => 210, - "time" => 211, - "tiny" => 212, - "toil" => 213, - "tomb" => 214, - "toys" => 215, - "trip" => 216, - "tuna" => 217, - "twin" => 218, - "ugly" => 219, - "undo" => 220, - "unit" => 221, - "urge" => 222, - "user" => 223, - "vast" => 224, - "very" => 225, - "veto" => 226, - "vial" => 227, - "vibe" => 228, - "view" => 229, - "visa" => 230, - "void" => 231, - "vows" => 232, - "wall" => 233, - "wand" => 234, - "warm" => 235, - "wasp" => 236, - "wave" => 237, - "waxy" => 238, - "webs" => 239, - "what" => 240, - "when" => 241, - "whiz" => 242, - "wolf" => 243, - "work" => 244, - "yank" => 245, - "yawn" => 246, - "yell" => 247, - "yoga" => 248, - "yurt" => 249, - "zaps" => 250, - "zero" => 251, - "zest" => 252, - "zinc" => 253, - "zone" => 254, - "zoom" => 255, -}; - #[rustfmt::skip] pub const MINIMALS: [&str; 256] = [ "ae", "ad", "ao", "ax", "aa", "ah", "am", "at", @@ -330,262 +69,3 @@ pub const MINIMALS: [&str; 256] = [ "wt", "wn", "wz", "wf", "wk", "yk", "yn", "yl", "ya", "yt", "zs", "zo", "zt", "zc", "ze", "zm", ]; - -pub static MINIMAL_IDXS: phf::Map<&'static str, u8> = phf_map! { - "ae" => 0, - "ad" => 1, - "ao" => 2, - "ax" => 3, - "aa" => 4, - "ah" => 5, - "am" => 6, - "at" => 7, - "ay" => 8, - "as" => 9, - "bk" => 10, - "bd" => 11, - "bn" => 12, - "bt" => 13, - "ba" => 14, - "bs" => 15, - "be" => 16, - "by" => 17, - "bg" => 18, - "bw" => 19, - "bb" => 20, - "bz" => 21, - "cm" => 22, - "ch" => 23, - "cs" => 24, - "cf" => 25, - "cy" => 26, - "cw" => 27, - "ce" => 28, - "ca" => 29, - "ck" => 30, - "ct" => 31, - "cx" => 32, - "cl" => 33, - "cp" => 34, - "cn" => 35, - "dk" => 36, - "da" => 37, - "ds" => 38, - "di" => 39, - "de" => 40, - "dt" => 41, - "dr" => 42, - "dn" => 43, - "dw" => 44, - "dp" => 45, - "dm" => 46, - "dl" => 47, - "dy" => 48, - "eh" => 49, - "ey" => 50, - "eo" => 51, - "ee" => 52, - "ec" => 53, - "en" => 54, - "em" => 55, - "et" => 56, - "es" => 57, - "ft" => 58, - "fr" => 59, - "fn" => 60, - "fs" => 61, - "fm" => 62, - "fh" => 63, - "fz" => 64, - "fp" => 65, - "fw" => 66, - "fx" => 67, - "fy" => 68, - "fe" => 69, - "fg" => 70, - "fl" => 71, - "fd" => 72, - "ga" => 73, - "ge" => 74, - "gr" => 75, - "gs" => 76, - "gt" => 77, - "gl" => 78, - "gw" => 79, - "gd" => 80, - "gy" => 81, - "gm" => 82, - "gu" => 83, - "gh" => 84, - "go" => 85, - "hf" => 86, - "hg" => 87, - "hd" => 88, - "hk" => 89, - "ht" => 90, - "hp" => 91, - "hh" => 92, - "hl" => 93, - "hy" => 94, - "he" => 95, - "hn" => 96, - "hs" => 97, - "id" => 98, - "ia" => 99, - "ie" => 100, - "ih" => 101, - "iy" => 102, - "io" => 103, - "is" => 104, - "in" => 105, - "im" => 106, - "je" => 107, - "jz" => 108, - "jn" => 109, - "jt" => 110, - "jl" => 111, - "jo" => 112, - "js" => 113, - "jp" => 114, - "jk" => 115, - "jy" => 116, - "kp" => 117, - "ko" => 118, - "kt" => 119, - "ks" => 120, - "kk" => 121, - "kn" => 122, - "kg" => 123, - "ke" => 124, - "ki" => 125, - "kb" => 126, - "lb" => 127, - "la" => 128, - "ly" => 129, - "lf" => 130, - "ls" => 131, - "lr" => 132, - "lp" => 133, - "ln" => 134, - "lt" => 135, - "lo" => 136, - "ld" => 137, - "le" => 138, - "lu" => 139, - "lk" => 140, - "lg" => 141, - "mn" => 142, - "my" => 143, - "mh" => 144, - "me" => 145, - "mo" => 146, - "mu" => 147, - "mw" => 148, - "md" => 149, - "mt" => 150, - "ms" => 151, - "mk" => 152, - "nl" => 153, - "ny" => 154, - "nd" => 155, - "ns" => 156, - "nt" => 157, - "nn" => 158, - "ne" => 159, - "nb" => 160, - "oy" => 161, - "oe" => 162, - "ot" => 163, - "ox" => 164, - "on" => 165, - "ol" => 166, - "os" => 167, - "pd" => 168, - "pt" => 169, - "pk" => 170, - "py" => 171, - "ps" => 172, - "pm" => 173, - "pl" => 174, - "pe" => 175, - "pf" => 176, - "pa" => 177, - "pr" => 178, - "qd" => 179, - "qz" => 180, - "re" => 181, - "rp" => 182, - "rl" => 183, - "ro" => 184, - "rh" => 185, - "rd" => 186, - "rk" => 187, - "rf" => 188, - "ry" => 189, - "rn" => 190, - "rs" => 191, - "rt" => 192, - "se" => 193, - "sa" => 194, - "sr" => 195, - "ss" => 196, - "sk" => 197, - "sw" => 198, - "st" => 199, - "sp" => 200, - "so" => 201, - "sg" => 202, - "sb" => 203, - "sf" => 204, - "sn" => 205, - "to" => 206, - "tk" => 207, - "ti" => 208, - "tt" => 209, - "td" => 210, - "te" => 211, - "ty" => 212, - "tl" => 213, - "tb" => 214, - "ts" => 215, - "tp" => 216, - "ta" => 217, - "tn" => 218, - "uy" => 219, - "uo" => 220, - "ut" => 221, - "ue" => 222, - "ur" => 223, - "vt" => 224, - "vy" => 225, - "vo" => 226, - "vl" => 227, - "ve" => 228, - "vw" => 229, - "va" => 230, - "vd" => 231, - "vs" => 232, - "wl" => 233, - "wd" => 234, - "wm" => 235, - "wp" => 236, - "we" => 237, - "wy" => 238, - "ws" => 239, - "wt" => 240, - "wn" => 241, - "wz" => 242, - "wf" => 243, - "wk" => 244, - "yk" => 245, - "yn" => 246, - "yl" => 247, - "ya" => 248, - "yt" => 249, - "zs" => 250, - "zo" => 251, - "zt" => 252, - "zc" => 253, - "ze" => 254, - "zm" => 255, -};