|  | // This file is generated with "go test -tags generate". DO NOT EDIT! | 
|  | // +build !generate | 
|  |  | 
|  | package triegen_test | 
|  |  | 
|  | // lookup returns the trie value for the first UTF-8 encoding in s and | 
|  | // the width in bytes of this encoding. The size will be 0 if s does not | 
|  | // hold enough bytes to complete the encoding. len(s) must be greater than 0. | 
|  | func (t *randTrie) lookup(s []byte) (v uint8, sz int) { | 
|  | c0 := s[0] | 
|  | switch { | 
|  | case c0 < 0x80: // is ASCII | 
|  | return randValues[c0], 1 | 
|  | case c0 < 0xC0: | 
|  | return 0, 1 // Illegal UTF-8: not a starter, not ASCII. | 
|  | case c0 < 0xE0: // 2-byte UTF-8 | 
|  | if len(s) < 2 { | 
|  | return 0, 0 | 
|  | } | 
|  | i := randIndex[c0] | 
|  | c1 := s[1] | 
|  | if c1 < 0x80 || 0xC0 <= c1 { | 
|  | return 0, 1 // Illegal UTF-8: not a continuation byte. | 
|  | } | 
|  | return t.lookupValue(uint32(i), c1), 2 | 
|  | case c0 < 0xF0: // 3-byte UTF-8 | 
|  | if len(s) < 3 { | 
|  | return 0, 0 | 
|  | } | 
|  | i := randIndex[c0] | 
|  | c1 := s[1] | 
|  | if c1 < 0x80 || 0xC0 <= c1 { | 
|  | return 0, 1 // Illegal UTF-8: not a continuation byte. | 
|  | } | 
|  | o := uint32(i)<<6 + uint32(c1) | 
|  | i = randIndex[o] | 
|  | c2 := s[2] | 
|  | if c2 < 0x80 || 0xC0 <= c2 { | 
|  | return 0, 2 // Illegal UTF-8: not a continuation byte. | 
|  | } | 
|  | return t.lookupValue(uint32(i), c2), 3 | 
|  | case c0 < 0xF8: // 4-byte UTF-8 | 
|  | if len(s) < 4 { | 
|  | return 0, 0 | 
|  | } | 
|  | i := randIndex[c0] | 
|  | c1 := s[1] | 
|  | if c1 < 0x80 || 0xC0 <= c1 { | 
|  | return 0, 1 // Illegal UTF-8: not a continuation byte. | 
|  | } | 
|  | o := uint32(i)<<6 + uint32(c1) | 
|  | i = randIndex[o] | 
|  | c2 := s[2] | 
|  | if c2 < 0x80 || 0xC0 <= c2 { | 
|  | return 0, 2 // Illegal UTF-8: not a continuation byte. | 
|  | } | 
|  | o = uint32(i)<<6 + uint32(c2) | 
|  | i = randIndex[o] | 
|  | c3 := s[3] | 
|  | if c3 < 0x80 || 0xC0 <= c3 { | 
|  | return 0, 3 // Illegal UTF-8: not a continuation byte. | 
|  | } | 
|  | return t.lookupValue(uint32(i), c3), 4 | 
|  | } | 
|  | // Illegal rune | 
|  | return 0, 1 | 
|  | } | 
|  |  | 
|  | // lookupUnsafe returns the trie value for the first UTF-8 encoding in s. | 
|  | // s must start with a full and valid UTF-8 encoded rune. | 
|  | func (t *randTrie) lookupUnsafe(s []byte) uint8 { | 
|  | c0 := s[0] | 
|  | if c0 < 0x80 { // is ASCII | 
|  | return randValues[c0] | 
|  | } | 
|  | i := randIndex[c0] | 
|  | if c0 < 0xE0 { // 2-byte UTF-8 | 
|  | return t.lookupValue(uint32(i), s[1]) | 
|  | } | 
|  | i = randIndex[uint32(i)<<6+uint32(s[1])] | 
|  | if c0 < 0xF0 { // 3-byte UTF-8 | 
|  | return t.lookupValue(uint32(i), s[2]) | 
|  | } | 
|  | i = randIndex[uint32(i)<<6+uint32(s[2])] | 
|  | if c0 < 0xF8 { // 4-byte UTF-8 | 
|  | return t.lookupValue(uint32(i), s[3]) | 
|  | } | 
|  | return 0 | 
|  | } | 
|  |  | 
|  | // lookupString returns the trie value for the first UTF-8 encoding in s and | 
|  | // the width in bytes of this encoding. The size will be 0 if s does not | 
|  | // hold enough bytes to complete the encoding. len(s) must be greater than 0. | 
|  | func (t *randTrie) lookupString(s string) (v uint8, sz int) { | 
|  | c0 := s[0] | 
|  | switch { | 
|  | case c0 < 0x80: // is ASCII | 
|  | return randValues[c0], 1 | 
|  | case c0 < 0xC0: | 
|  | return 0, 1 // Illegal UTF-8: not a starter, not ASCII. | 
|  | case c0 < 0xE0: // 2-byte UTF-8 | 
|  | if len(s) < 2 { | 
|  | return 0, 0 | 
|  | } | 
|  | i := randIndex[c0] | 
|  | c1 := s[1] | 
|  | if c1 < 0x80 || 0xC0 <= c1 { | 
|  | return 0, 1 // Illegal UTF-8: not a continuation byte. | 
|  | } | 
|  | return t.lookupValue(uint32(i), c1), 2 | 
|  | case c0 < 0xF0: // 3-byte UTF-8 | 
|  | if len(s) < 3 { | 
|  | return 0, 0 | 
|  | } | 
|  | i := randIndex[c0] | 
|  | c1 := s[1] | 
|  | if c1 < 0x80 || 0xC0 <= c1 { | 
|  | return 0, 1 // Illegal UTF-8: not a continuation byte. | 
|  | } | 
|  | o := uint32(i)<<6 + uint32(c1) | 
|  | i = randIndex[o] | 
|  | c2 := s[2] | 
|  | if c2 < 0x80 || 0xC0 <= c2 { | 
|  | return 0, 2 // Illegal UTF-8: not a continuation byte. | 
|  | } | 
|  | return t.lookupValue(uint32(i), c2), 3 | 
|  | case c0 < 0xF8: // 4-byte UTF-8 | 
|  | if len(s) < 4 { | 
|  | return 0, 0 | 
|  | } | 
|  | i := randIndex[c0] | 
|  | c1 := s[1] | 
|  | if c1 < 0x80 || 0xC0 <= c1 { | 
|  | return 0, 1 // Illegal UTF-8: not a continuation byte. | 
|  | } | 
|  | o := uint32(i)<<6 + uint32(c1) | 
|  | i = randIndex[o] | 
|  | c2 := s[2] | 
|  | if c2 < 0x80 || 0xC0 <= c2 { | 
|  | return 0, 2 // Illegal UTF-8: not a continuation byte. | 
|  | } | 
|  | o = uint32(i)<<6 + uint32(c2) | 
|  | i = randIndex[o] | 
|  | c3 := s[3] | 
|  | if c3 < 0x80 || 0xC0 <= c3 { | 
|  | return 0, 3 // Illegal UTF-8: not a continuation byte. | 
|  | } | 
|  | return t.lookupValue(uint32(i), c3), 4 | 
|  | } | 
|  | // Illegal rune | 
|  | return 0, 1 | 
|  | } | 
|  |  | 
|  | // lookupStringUnsafe returns the trie value for the first UTF-8 encoding in s. | 
|  | // s must start with a full and valid UTF-8 encoded rune. | 
|  | func (t *randTrie) lookupStringUnsafe(s string) uint8 { | 
|  | c0 := s[0] | 
|  | if c0 < 0x80 { // is ASCII | 
|  | return randValues[c0] | 
|  | } | 
|  | i := randIndex[c0] | 
|  | if c0 < 0xE0 { // 2-byte UTF-8 | 
|  | return t.lookupValue(uint32(i), s[1]) | 
|  | } | 
|  | i = randIndex[uint32(i)<<6+uint32(s[1])] | 
|  | if c0 < 0xF0 { // 3-byte UTF-8 | 
|  | return t.lookupValue(uint32(i), s[2]) | 
|  | } | 
|  | i = randIndex[uint32(i)<<6+uint32(s[2])] | 
|  | if c0 < 0xF8 { // 4-byte UTF-8 | 
|  | return t.lookupValue(uint32(i), s[3]) | 
|  | } | 
|  | return 0 | 
|  | } | 
|  |  | 
|  | // randTrie. Total size: 9280 bytes (9.06 KiB). Checksum: 6debd324a8debb8f. | 
|  | type randTrie struct{} | 
|  |  | 
|  | func newRandTrie(i int) *randTrie { | 
|  | return &randTrie{} | 
|  | } | 
|  |  | 
|  | // lookupValue determines the type of block n and looks up the value for b. | 
|  | func (t *randTrie) lookupValue(n uint32, b byte) uint8 { | 
|  | switch { | 
|  | default: | 
|  | return uint8(randValues[n<<6+uint32(b)]) | 
|  | } | 
|  | } | 
|  |  | 
|  | // randValues: 56 blocks, 3584 entries, 3584 bytes | 
|  | // Block 3 is the zero block. | 
|  | var randValues = [3584]uint8{ | 
|  | // Block 0x0, offset 0x0 | 
|  | // Block 0x1, offset 0x40 | 
|  | // Block 0x2, offset 0x80 | 
|  | // Block 0x3, offset 0xc0 | 
|  | 0xc9: 0x0001, | 
|  | // Block 0x4, offset 0x100 | 
|  | 0x100: 0x0001, | 
|  | // Block 0x5, offset 0x140 | 
|  | 0x155: 0x0001, | 
|  | // Block 0x6, offset 0x180 | 
|  | 0x196: 0x0001, | 
|  | // Block 0x7, offset 0x1c0 | 
|  | 0x1ef: 0x0001, | 
|  | // Block 0x8, offset 0x200 | 
|  | 0x206: 0x0001, | 
|  | // Block 0x9, offset 0x240 | 
|  | 0x258: 0x0001, | 
|  | // Block 0xa, offset 0x280 | 
|  | 0x288: 0x0001, | 
|  | // Block 0xb, offset 0x2c0 | 
|  | 0x2f2: 0x0001, | 
|  | // Block 0xc, offset 0x300 | 
|  | 0x304: 0x0001, | 
|  | // Block 0xd, offset 0x340 | 
|  | 0x34b: 0x0001, | 
|  | // Block 0xe, offset 0x380 | 
|  | 0x3ba: 0x0001, | 
|  | // Block 0xf, offset 0x3c0 | 
|  | 0x3f5: 0x0001, | 
|  | // Block 0x10, offset 0x400 | 
|  | 0x41d: 0x0001, | 
|  | // Block 0x11, offset 0x440 | 
|  | 0x442: 0x0001, | 
|  | // Block 0x12, offset 0x480 | 
|  | 0x4bb: 0x0001, | 
|  | // Block 0x13, offset 0x4c0 | 
|  | 0x4e9: 0x0001, | 
|  | // Block 0x14, offset 0x500 | 
|  | 0x53e: 0x0001, | 
|  | // Block 0x15, offset 0x540 | 
|  | 0x55f: 0x0001, | 
|  | // Block 0x16, offset 0x580 | 
|  | 0x5b7: 0x0001, | 
|  | // Block 0x17, offset 0x5c0 | 
|  | 0x5d9: 0x0001, | 
|  | // Block 0x18, offset 0x600 | 
|  | 0x60e: 0x0001, | 
|  | // Block 0x19, offset 0x640 | 
|  | 0x652: 0x0001, | 
|  | // Block 0x1a, offset 0x680 | 
|  | 0x68f: 0x0001, | 
|  | // Block 0x1b, offset 0x6c0 | 
|  | 0x6dc: 0x0001, | 
|  | // Block 0x1c, offset 0x700 | 
|  | 0x703: 0x0001, | 
|  | // Block 0x1d, offset 0x740 | 
|  | 0x741: 0x0001, | 
|  | // Block 0x1e, offset 0x780 | 
|  | 0x79b: 0x0001, | 
|  | // Block 0x1f, offset 0x7c0 | 
|  | 0x7f1: 0x0001, | 
|  | // Block 0x20, offset 0x800 | 
|  | 0x833: 0x0001, | 
|  | // Block 0x21, offset 0x840 | 
|  | 0x853: 0x0001, | 
|  | // Block 0x22, offset 0x880 | 
|  | 0x8a2: 0x0001, | 
|  | // Block 0x23, offset 0x8c0 | 
|  | 0x8f8: 0x0001, | 
|  | // Block 0x24, offset 0x900 | 
|  | 0x917: 0x0001, | 
|  | // Block 0x25, offset 0x940 | 
|  | 0x945: 0x0001, | 
|  | // Block 0x26, offset 0x980 | 
|  | 0x99e: 0x0001, | 
|  | // Block 0x27, offset 0x9c0 | 
|  | 0x9fd: 0x0001, | 
|  | // Block 0x28, offset 0xa00 | 
|  | 0xa0d: 0x0001, | 
|  | // Block 0x29, offset 0xa40 | 
|  | 0xa66: 0x0001, | 
|  | // Block 0x2a, offset 0xa80 | 
|  | 0xaab: 0x0001, | 
|  | // Block 0x2b, offset 0xac0 | 
|  | 0xaea: 0x0001, | 
|  | // Block 0x2c, offset 0xb00 | 
|  | 0xb2d: 0x0001, | 
|  | // Block 0x2d, offset 0xb40 | 
|  | 0xb54: 0x0001, | 
|  | // Block 0x2e, offset 0xb80 | 
|  | 0xb90: 0x0001, | 
|  | // Block 0x2f, offset 0xbc0 | 
|  | 0xbe5: 0x0001, | 
|  | // Block 0x30, offset 0xc00 | 
|  | 0xc28: 0x0001, | 
|  | // Block 0x31, offset 0xc40 | 
|  | 0xc7c: 0x0001, | 
|  | // Block 0x32, offset 0xc80 | 
|  | 0xcbf: 0x0001, | 
|  | // Block 0x33, offset 0xcc0 | 
|  | 0xcc7: 0x0001, | 
|  | // Block 0x34, offset 0xd00 | 
|  | 0xd34: 0x0001, | 
|  | // Block 0x35, offset 0xd40 | 
|  | 0xd61: 0x0001, | 
|  | // Block 0x36, offset 0xd80 | 
|  | 0xdb9: 0x0001, | 
|  | // Block 0x37, offset 0xdc0 | 
|  | 0xdda: 0x0001, | 
|  | } | 
|  |  | 
|  | // randIndex: 89 blocks, 5696 entries, 5696 bytes | 
|  | // Block 0 is the zero block. | 
|  | var randIndex = [5696]uint8{ | 
|  | // Block 0x0, offset 0x0 | 
|  | // Block 0x1, offset 0x40 | 
|  | // Block 0x2, offset 0x80 | 
|  | // Block 0x3, offset 0xc0 | 
|  | 0xe1: 0x02, 0xe3: 0x03, 0xe4: 0x04, | 
|  | 0xea: 0x05, 0xeb: 0x06, 0xec: 0x07, | 
|  | 0xf0: 0x10, 0xf1: 0x24, 0xf2: 0x3d, 0xf3: 0x4f, 0xf4: 0x56, | 
|  | // Block 0x4, offset 0x100 | 
|  | 0x107: 0x01, | 
|  | // Block 0x5, offset 0x140 | 
|  | 0x16c: 0x02, | 
|  | // Block 0x6, offset 0x180 | 
|  | 0x19c: 0x03, | 
|  | 0x1ae: 0x04, | 
|  | // Block 0x7, offset 0x1c0 | 
|  | 0x1d8: 0x05, | 
|  | 0x1f7: 0x06, | 
|  | // Block 0x8, offset 0x200 | 
|  | 0x20c: 0x07, | 
|  | // Block 0x9, offset 0x240 | 
|  | 0x24a: 0x08, | 
|  | // Block 0xa, offset 0x280 | 
|  | 0x2b6: 0x09, | 
|  | // Block 0xb, offset 0x2c0 | 
|  | 0x2d5: 0x0a, | 
|  | // Block 0xc, offset 0x300 | 
|  | 0x31a: 0x0b, | 
|  | // Block 0xd, offset 0x340 | 
|  | 0x373: 0x0c, | 
|  | // Block 0xe, offset 0x380 | 
|  | 0x38b: 0x0d, | 
|  | // Block 0xf, offset 0x3c0 | 
|  | 0x3f0: 0x0e, | 
|  | // Block 0x10, offset 0x400 | 
|  | 0x433: 0x0f, | 
|  | // Block 0x11, offset 0x440 | 
|  | 0x45d: 0x10, | 
|  | // Block 0x12, offset 0x480 | 
|  | 0x491: 0x08, 0x494: 0x09, 0x497: 0x0a, | 
|  | 0x49b: 0x0b, 0x49c: 0x0c, | 
|  | 0x4a1: 0x0d, | 
|  | 0x4ad: 0x0e, | 
|  | 0x4ba: 0x0f, | 
|  | // Block 0x13, offset 0x4c0 | 
|  | 0x4c1: 0x11, | 
|  | // Block 0x14, offset 0x500 | 
|  | 0x531: 0x12, | 
|  | // Block 0x15, offset 0x540 | 
|  | 0x546: 0x13, | 
|  | // Block 0x16, offset 0x580 | 
|  | 0x5ab: 0x14, | 
|  | // Block 0x17, offset 0x5c0 | 
|  | 0x5d4: 0x11, | 
|  | 0x5fe: 0x11, | 
|  | // Block 0x18, offset 0x600 | 
|  | 0x618: 0x0a, | 
|  | // Block 0x19, offset 0x640 | 
|  | 0x65b: 0x15, | 
|  | // Block 0x1a, offset 0x680 | 
|  | 0x6a0: 0x16, | 
|  | // Block 0x1b, offset 0x6c0 | 
|  | 0x6d2: 0x17, | 
|  | 0x6f6: 0x18, | 
|  | // Block 0x1c, offset 0x700 | 
|  | 0x711: 0x19, | 
|  | // Block 0x1d, offset 0x740 | 
|  | 0x768: 0x1a, | 
|  | // Block 0x1e, offset 0x780 | 
|  | 0x783: 0x1b, | 
|  | // Block 0x1f, offset 0x7c0 | 
|  | 0x7f9: 0x1c, | 
|  | // Block 0x20, offset 0x800 | 
|  | 0x831: 0x1d, | 
|  | // Block 0x21, offset 0x840 | 
|  | 0x85e: 0x1e, | 
|  | // Block 0x22, offset 0x880 | 
|  | 0x898: 0x1f, | 
|  | // Block 0x23, offset 0x8c0 | 
|  | 0x8c7: 0x18, | 
|  | 0x8d5: 0x14, | 
|  | 0x8f7: 0x20, | 
|  | 0x8fe: 0x1f, | 
|  | // Block 0x24, offset 0x900 | 
|  | 0x905: 0x21, | 
|  | // Block 0x25, offset 0x940 | 
|  | 0x966: 0x03, | 
|  | // Block 0x26, offset 0x980 | 
|  | 0x981: 0x07, 0x983: 0x11, | 
|  | 0x989: 0x12, 0x98a: 0x13, 0x98e: 0x14, 0x98f: 0x15, | 
|  | 0x992: 0x16, 0x995: 0x17, 0x996: 0x18, | 
|  | 0x998: 0x19, 0x999: 0x1a, 0x99b: 0x1b, 0x99f: 0x1c, | 
|  | 0x9a3: 0x1d, | 
|  | 0x9ad: 0x1e, 0x9af: 0x1f, | 
|  | 0x9b0: 0x20, 0x9b1: 0x21, | 
|  | 0x9b8: 0x22, 0x9bd: 0x23, | 
|  | // Block 0x27, offset 0x9c0 | 
|  | 0x9cd: 0x22, | 
|  | // Block 0x28, offset 0xa00 | 
|  | 0xa0c: 0x08, | 
|  | // Block 0x29, offset 0xa40 | 
|  | 0xa6f: 0x1c, | 
|  | // Block 0x2a, offset 0xa80 | 
|  | 0xa90: 0x1a, | 
|  | 0xaaf: 0x23, | 
|  | // Block 0x2b, offset 0xac0 | 
|  | 0xae3: 0x19, | 
|  | 0xae8: 0x24, | 
|  | 0xafc: 0x25, | 
|  | // Block 0x2c, offset 0xb00 | 
|  | 0xb13: 0x26, | 
|  | // Block 0x2d, offset 0xb40 | 
|  | 0xb67: 0x1c, | 
|  | // Block 0x2e, offset 0xb80 | 
|  | 0xb8f: 0x0b, | 
|  | // Block 0x2f, offset 0xbc0 | 
|  | 0xbcb: 0x27, | 
|  | 0xbe7: 0x26, | 
|  | // Block 0x30, offset 0xc00 | 
|  | 0xc34: 0x16, | 
|  | // Block 0x31, offset 0xc40 | 
|  | 0xc62: 0x03, | 
|  | // Block 0x32, offset 0xc80 | 
|  | 0xcbb: 0x12, | 
|  | // Block 0x33, offset 0xcc0 | 
|  | 0xcdf: 0x09, | 
|  | // Block 0x34, offset 0xd00 | 
|  | 0xd34: 0x0a, | 
|  | // Block 0x35, offset 0xd40 | 
|  | 0xd41: 0x1e, | 
|  | // Block 0x36, offset 0xd80 | 
|  | 0xd83: 0x28, | 
|  | // Block 0x37, offset 0xdc0 | 
|  | 0xdc0: 0x15, | 
|  | // Block 0x38, offset 0xe00 | 
|  | 0xe1a: 0x15, | 
|  | // Block 0x39, offset 0xe40 | 
|  | 0xe65: 0x29, | 
|  | // Block 0x3a, offset 0xe80 | 
|  | 0xe86: 0x1f, | 
|  | // Block 0x3b, offset 0xec0 | 
|  | 0xeec: 0x18, | 
|  | // Block 0x3c, offset 0xf00 | 
|  | 0xf28: 0x2a, | 
|  | // Block 0x3d, offset 0xf40 | 
|  | 0xf53: 0x08, | 
|  | // Block 0x3e, offset 0xf80 | 
|  | 0xfa2: 0x2b, | 
|  | 0xfaa: 0x17, | 
|  | // Block 0x3f, offset 0xfc0 | 
|  | 0xfc0: 0x25, 0xfc2: 0x26, | 
|  | 0xfc9: 0x27, 0xfcd: 0x28, 0xfce: 0x29, | 
|  | 0xfd5: 0x2a, | 
|  | 0xfd8: 0x2b, 0xfd9: 0x2c, 0xfdf: 0x2d, | 
|  | 0xfe1: 0x2e, 0xfe2: 0x2f, 0xfe3: 0x30, 0xfe6: 0x31, | 
|  | 0xfe9: 0x32, 0xfec: 0x33, 0xfed: 0x34, 0xfef: 0x35, | 
|  | 0xff1: 0x36, 0xff2: 0x37, 0xff3: 0x38, 0xff4: 0x39, | 
|  | 0xffa: 0x3a, 0xffc: 0x3b, 0xffe: 0x3c, | 
|  | // Block 0x40, offset 0x1000 | 
|  | 0x102c: 0x2c, | 
|  | // Block 0x41, offset 0x1040 | 
|  | 0x1074: 0x2c, | 
|  | // Block 0x42, offset 0x1080 | 
|  | 0x108c: 0x08, | 
|  | 0x10a0: 0x2d, | 
|  | // Block 0x43, offset 0x10c0 | 
|  | 0x10e8: 0x10, | 
|  | // Block 0x44, offset 0x1100 | 
|  | 0x110f: 0x13, | 
|  | // Block 0x45, offset 0x1140 | 
|  | 0x114b: 0x2e, | 
|  | // Block 0x46, offset 0x1180 | 
|  | 0x118b: 0x23, | 
|  | 0x119d: 0x0c, | 
|  | // Block 0x47, offset 0x11c0 | 
|  | 0x11c3: 0x12, | 
|  | 0x11f9: 0x0f, | 
|  | // Block 0x48, offset 0x1200 | 
|  | 0x121e: 0x1b, | 
|  | // Block 0x49, offset 0x1240 | 
|  | 0x1270: 0x2f, | 
|  | // Block 0x4a, offset 0x1280 | 
|  | 0x128a: 0x1b, | 
|  | 0x12a7: 0x02, | 
|  | // Block 0x4b, offset 0x12c0 | 
|  | 0x12fb: 0x14, | 
|  | // Block 0x4c, offset 0x1300 | 
|  | 0x1333: 0x30, | 
|  | // Block 0x4d, offset 0x1340 | 
|  | 0x134d: 0x31, | 
|  | // Block 0x4e, offset 0x1380 | 
|  | 0x138e: 0x15, | 
|  | // Block 0x4f, offset 0x13c0 | 
|  | 0x13f4: 0x32, | 
|  | // Block 0x50, offset 0x1400 | 
|  | 0x141b: 0x33, | 
|  | // Block 0x51, offset 0x1440 | 
|  | 0x1448: 0x3e, 0x1449: 0x3f, 0x144a: 0x40, 0x144f: 0x41, | 
|  | 0x1459: 0x42, 0x145c: 0x43, 0x145e: 0x44, 0x145f: 0x45, | 
|  | 0x1468: 0x46, 0x1469: 0x47, 0x146c: 0x48, 0x146d: 0x49, 0x146e: 0x4a, | 
|  | 0x1472: 0x4b, 0x1473: 0x4c, | 
|  | 0x1479: 0x4d, 0x147b: 0x4e, | 
|  | // Block 0x52, offset 0x1480 | 
|  | 0x1480: 0x34, | 
|  | 0x1499: 0x11, | 
|  | 0x14b6: 0x2c, | 
|  | // Block 0x53, offset 0x14c0 | 
|  | 0x14e4: 0x0d, | 
|  | // Block 0x54, offset 0x1500 | 
|  | 0x1527: 0x08, | 
|  | // Block 0x55, offset 0x1540 | 
|  | 0x1555: 0x2b, | 
|  | // Block 0x56, offset 0x1580 | 
|  | 0x15b2: 0x35, | 
|  | // Block 0x57, offset 0x15c0 | 
|  | 0x15f2: 0x1c, 0x15f4: 0x29, | 
|  | // Block 0x58, offset 0x1600 | 
|  | 0x1600: 0x50, 0x1603: 0x51, | 
|  | 0x1608: 0x52, 0x160a: 0x53, 0x160d: 0x54, 0x160e: 0x55, | 
|  | } | 
|  |  | 
|  | // lookup returns the trie value for the first UTF-8 encoding in s and | 
|  | // the width in bytes of this encoding. The size will be 0 if s does not | 
|  | // hold enough bytes to complete the encoding. len(s) must be greater than 0. | 
|  | func (t *multiTrie) lookup(s []byte) (v uint64, sz int) { | 
|  | c0 := s[0] | 
|  | switch { | 
|  | case c0 < 0x80: // is ASCII | 
|  | return t.ascii[c0], 1 | 
|  | case c0 < 0xC0: | 
|  | return 0, 1 // Illegal UTF-8: not a starter, not ASCII. | 
|  | case c0 < 0xE0: // 2-byte UTF-8 | 
|  | if len(s) < 2 { | 
|  | return 0, 0 | 
|  | } | 
|  | i := t.utf8Start[c0] | 
|  | c1 := s[1] | 
|  | if c1 < 0x80 || 0xC0 <= c1 { | 
|  | return 0, 1 // Illegal UTF-8: not a continuation byte. | 
|  | } | 
|  | return t.lookupValue(uint32(i), c1), 2 | 
|  | case c0 < 0xF0: // 3-byte UTF-8 | 
|  | if len(s) < 3 { | 
|  | return 0, 0 | 
|  | } | 
|  | i := t.utf8Start[c0] | 
|  | c1 := s[1] | 
|  | if c1 < 0x80 || 0xC0 <= c1 { | 
|  | return 0, 1 // Illegal UTF-8: not a continuation byte. | 
|  | } | 
|  | o := uint32(i)<<6 + uint32(c1) | 
|  | i = multiIndex[o] | 
|  | c2 := s[2] | 
|  | if c2 < 0x80 || 0xC0 <= c2 { | 
|  | return 0, 2 // Illegal UTF-8: not a continuation byte. | 
|  | } | 
|  | return t.lookupValue(uint32(i), c2), 3 | 
|  | case c0 < 0xF8: // 4-byte UTF-8 | 
|  | if len(s) < 4 { | 
|  | return 0, 0 | 
|  | } | 
|  | i := t.utf8Start[c0] | 
|  | c1 := s[1] | 
|  | if c1 < 0x80 || 0xC0 <= c1 { | 
|  | return 0, 1 // Illegal UTF-8: not a continuation byte. | 
|  | } | 
|  | o := uint32(i)<<6 + uint32(c1) | 
|  | i = multiIndex[o] | 
|  | c2 := s[2] | 
|  | if c2 < 0x80 || 0xC0 <= c2 { | 
|  | return 0, 2 // Illegal UTF-8: not a continuation byte. | 
|  | } | 
|  | o = uint32(i)<<6 + uint32(c2) | 
|  | i = multiIndex[o] | 
|  | c3 := s[3] | 
|  | if c3 < 0x80 || 0xC0 <= c3 { | 
|  | return 0, 3 // Illegal UTF-8: not a continuation byte. | 
|  | } | 
|  | return t.lookupValue(uint32(i), c3), 4 | 
|  | } | 
|  | // Illegal rune | 
|  | return 0, 1 | 
|  | } | 
|  |  | 
|  | // lookupUnsafe returns the trie value for the first UTF-8 encoding in s. | 
|  | // s must start with a full and valid UTF-8 encoded rune. | 
|  | func (t *multiTrie) lookupUnsafe(s []byte) uint64 { | 
|  | c0 := s[0] | 
|  | if c0 < 0x80 { // is ASCII | 
|  | return t.ascii[c0] | 
|  | } | 
|  | i := t.utf8Start[c0] | 
|  | if c0 < 0xE0 { // 2-byte UTF-8 | 
|  | return t.lookupValue(uint32(i), s[1]) | 
|  | } | 
|  | i = multiIndex[uint32(i)<<6+uint32(s[1])] | 
|  | if c0 < 0xF0 { // 3-byte UTF-8 | 
|  | return t.lookupValue(uint32(i), s[2]) | 
|  | } | 
|  | i = multiIndex[uint32(i)<<6+uint32(s[2])] | 
|  | if c0 < 0xF8 { // 4-byte UTF-8 | 
|  | return t.lookupValue(uint32(i), s[3]) | 
|  | } | 
|  | return 0 | 
|  | } | 
|  |  | 
|  | // lookupString returns the trie value for the first UTF-8 encoding in s and | 
|  | // the width in bytes of this encoding. The size will be 0 if s does not | 
|  | // hold enough bytes to complete the encoding. len(s) must be greater than 0. | 
|  | func (t *multiTrie) lookupString(s string) (v uint64, sz int) { | 
|  | c0 := s[0] | 
|  | switch { | 
|  | case c0 < 0x80: // is ASCII | 
|  | return t.ascii[c0], 1 | 
|  | case c0 < 0xC0: | 
|  | return 0, 1 // Illegal UTF-8: not a starter, not ASCII. | 
|  | case c0 < 0xE0: // 2-byte UTF-8 | 
|  | if len(s) < 2 { | 
|  | return 0, 0 | 
|  | } | 
|  | i := t.utf8Start[c0] | 
|  | c1 := s[1] | 
|  | if c1 < 0x80 || 0xC0 <= c1 { | 
|  | return 0, 1 // Illegal UTF-8: not a continuation byte. | 
|  | } | 
|  | return t.lookupValue(uint32(i), c1), 2 | 
|  | case c0 < 0xF0: // 3-byte UTF-8 | 
|  | if len(s) < 3 { | 
|  | return 0, 0 | 
|  | } | 
|  | i := t.utf8Start[c0] | 
|  | c1 := s[1] | 
|  | if c1 < 0x80 || 0xC0 <= c1 { | 
|  | return 0, 1 // Illegal UTF-8: not a continuation byte. | 
|  | } | 
|  | o := uint32(i)<<6 + uint32(c1) | 
|  | i = multiIndex[o] | 
|  | c2 := s[2] | 
|  | if c2 < 0x80 || 0xC0 <= c2 { | 
|  | return 0, 2 // Illegal UTF-8: not a continuation byte. | 
|  | } | 
|  | return t.lookupValue(uint32(i), c2), 3 | 
|  | case c0 < 0xF8: // 4-byte UTF-8 | 
|  | if len(s) < 4 { | 
|  | return 0, 0 | 
|  | } | 
|  | i := t.utf8Start[c0] | 
|  | c1 := s[1] | 
|  | if c1 < 0x80 || 0xC0 <= c1 { | 
|  | return 0, 1 // Illegal UTF-8: not a continuation byte. | 
|  | } | 
|  | o := uint32(i)<<6 + uint32(c1) | 
|  | i = multiIndex[o] | 
|  | c2 := s[2] | 
|  | if c2 < 0x80 || 0xC0 <= c2 { | 
|  | return 0, 2 // Illegal UTF-8: not a continuation byte. | 
|  | } | 
|  | o = uint32(i)<<6 + uint32(c2) | 
|  | i = multiIndex[o] | 
|  | c3 := s[3] | 
|  | if c3 < 0x80 || 0xC0 <= c3 { | 
|  | return 0, 3 // Illegal UTF-8: not a continuation byte. | 
|  | } | 
|  | return t.lookupValue(uint32(i), c3), 4 | 
|  | } | 
|  | // Illegal rune | 
|  | return 0, 1 | 
|  | } | 
|  |  | 
|  | // lookupStringUnsafe returns the trie value for the first UTF-8 encoding in s. | 
|  | // s must start with a full and valid UTF-8 encoded rune. | 
|  | func (t *multiTrie) lookupStringUnsafe(s string) uint64 { | 
|  | c0 := s[0] | 
|  | if c0 < 0x80 { // is ASCII | 
|  | return t.ascii[c0] | 
|  | } | 
|  | i := t.utf8Start[c0] | 
|  | if c0 < 0xE0 { // 2-byte UTF-8 | 
|  | return t.lookupValue(uint32(i), s[1]) | 
|  | } | 
|  | i = multiIndex[uint32(i)<<6+uint32(s[1])] | 
|  | if c0 < 0xF0 { // 3-byte UTF-8 | 
|  | return t.lookupValue(uint32(i), s[2]) | 
|  | } | 
|  | i = multiIndex[uint32(i)<<6+uint32(s[2])] | 
|  | if c0 < 0xF8 { // 4-byte UTF-8 | 
|  | return t.lookupValue(uint32(i), s[3]) | 
|  | } | 
|  | return 0 | 
|  | } | 
|  |  | 
|  | // multiTrie. Total size: 18250 bytes (17.82 KiB). Checksum: a69a609d8696aa5e. | 
|  | type multiTrie struct { | 
|  | ascii     []uint64 // index for ASCII bytes | 
|  | utf8Start []uint8  // index for UTF-8 bytes >= 0xC0 | 
|  | } | 
|  |  | 
|  | func newMultiTrie(i int) *multiTrie { | 
|  | h := multiTrieHandles[i] | 
|  | return &multiTrie{multiValues[uint32(h.ascii)<<6:], multiIndex[uint32(h.multi)<<6:]} | 
|  | } | 
|  |  | 
|  | type multiTrieHandle struct { | 
|  | ascii, multi uint8 | 
|  | } | 
|  |  | 
|  | // multiTrieHandles: 5 handles, 10 bytes | 
|  | var multiTrieHandles = [5]multiTrieHandle{ | 
|  | {0, 0},   // 8c1e77823143d35c: all | 
|  | {0, 23},  // 8fb58ff8243b45b0: ASCII only | 
|  | {0, 23},  // 8fb58ff8243b45b0: ASCII only 2 | 
|  | {0, 24},  // 2ccc43994f11046f: BMP only | 
|  | {30, 25}, // ce448591bdcb4733: No BMP | 
|  | } | 
|  |  | 
|  | // lookupValue determines the type of block n and looks up the value for b. | 
|  | func (t *multiTrie) lookupValue(n uint32, b byte) uint64 { | 
|  | switch { | 
|  | default: | 
|  | return uint64(multiValues[n<<6+uint32(b)]) | 
|  | } | 
|  | } | 
|  |  | 
|  | // multiValues: 32 blocks, 2048 entries, 16384 bytes | 
|  | // Block 3 is the zero block. | 
|  | var multiValues = [2048]uint64{ | 
|  | // Block 0x0, offset 0x0 | 
|  | 0x03: 0x6e361699800b9fb8, 0x04: 0x52d3935a34f6f0b, 0x05: 0x2948319393e7ef10, | 
|  | 0x07: 0x20f03b006704f663, 0x08: 0x6c15c0732bb2495f, 0x09: 0xe54e2c59d953551, | 
|  | 0x0f: 0x33d8a825807d8037, 0x10: 0x6ecd93cb12168b92, 0x11: 0x6a81c9c0ce86e884, | 
|  | 0x1f: 0xa03e77aac8be79b, 0x20: 0x28591d0e7e486efa, 0x21: 0x716fa3bc398dec8, | 
|  | 0x3f: 0x4fd3bcfa72bce8b0, | 
|  | // Block 0x1, offset 0x40 | 
|  | 0x40: 0x3cbaef3db8ba5f12, 0x41: 0x2d262347c1f56357, | 
|  | 0x7f: 0x782caa2d25a418a9, | 
|  | // Block 0x2, offset 0x80 | 
|  | // Block 0x3, offset 0xc0 | 
|  | 0xc0: 0x6bbd1f937b1ff5d2, 0xc1: 0x732e23088d2eb8a4, | 
|  | // Block 0x4, offset 0x100 | 
|  | 0x13f: 0x56f8c4c82f5962dc, | 
|  | // Block 0x5, offset 0x140 | 
|  | 0x140: 0x57dc4544729a5da2, 0x141: 0x2f62f9cd307ffa0d, | 
|  | // Block 0x6, offset 0x180 | 
|  | 0x1bf: 0x7bf4d0ebf302a088, | 
|  | // Block 0x7, offset 0x1c0 | 
|  | 0x1c0: 0x1f0d67f249e59931, 0x1c1: 0x3011def73aa550c7, | 
|  | // Block 0x8, offset 0x200 | 
|  | 0x23f: 0x5de81c1dff6bf29d, | 
|  | // Block 0x9, offset 0x240 | 
|  | 0x240: 0x752c035737b825e8, 0x241: 0x1e793399081e3bb3, | 
|  | // Block 0xa, offset 0x280 | 
|  | 0x2bf: 0x6a28f01979cbf059, | 
|  | // Block 0xb, offset 0x2c0 | 
|  | 0x2c0: 0x373a4b0f2cbd4c74, 0x2c1: 0x4fd2c288683b767c, | 
|  | // Block 0xc, offset 0x300 | 
|  | 0x33f: 0x5a10ffa9e29184fb, | 
|  | // Block 0xd, offset 0x340 | 
|  | 0x340: 0x700f9bdb53fff6a5, 0x341: 0xcde93df0427eb79, | 
|  | // Block 0xe, offset 0x380 | 
|  | 0x3bf: 0x74071288fff39c76, | 
|  | // Block 0xf, offset 0x3c0 | 
|  | 0x3c0: 0x481fc2f510e5268a, 0x3c1: 0x7565c28164204849, | 
|  | // Block 0x10, offset 0x400 | 
|  | 0x43f: 0x5676a62fd49c6bec, | 
|  | // Block 0x11, offset 0x440 | 
|  | 0x440: 0x2f2d15776cbafc6b, 0x441: 0x4c55e8dc0ff11a3f, | 
|  | // Block 0x12, offset 0x480 | 
|  | 0x4bf: 0x69d6f0fe711fafc9, | 
|  | // Block 0x13, offset 0x4c0 | 
|  | 0x4c0: 0x33181de28cfb062d, 0x4c1: 0x2ef3adc6bb2f2d02, | 
|  | // Block 0x14, offset 0x500 | 
|  | 0x53f: 0xe03b31814c95f8b, | 
|  | // Block 0x15, offset 0x540 | 
|  | 0x540: 0x3bf6dc9a1c115603, 0x541: 0x6984ec9b7f51f7fc, | 
|  | // Block 0x16, offset 0x580 | 
|  | 0x5bf: 0x3c02ea92fb168559, | 
|  | // Block 0x17, offset 0x5c0 | 
|  | 0x5c0: 0x1badfe42e7629494, 0x5c1: 0x6dc4a554005f7645, | 
|  | // Block 0x18, offset 0x600 | 
|  | 0x63f: 0x3bb2ed2a72748f4b, | 
|  | // Block 0x19, offset 0x640 | 
|  | 0x640: 0x291354cd6767ec10, 0x641: 0x2c3a4715e3c070d6, | 
|  | // Block 0x1a, offset 0x680 | 
|  | 0x6bf: 0x352711cfb7236418, | 
|  | // Block 0x1b, offset 0x6c0 | 
|  | 0x6c0: 0x3a59d34fb8bceda, 0x6c1: 0x5e90d8ebedd64fa1, | 
|  | // Block 0x1c, offset 0x700 | 
|  | 0x73f: 0x7191a77b28d23110, | 
|  | // Block 0x1d, offset 0x740 | 
|  | 0x740: 0x4ca7f0c1623423d8, 0x741: 0x4f7156d996e2d0de, | 
|  | // Block 0x1e, offset 0x780 | 
|  | // Block 0x1f, offset 0x7c0 | 
|  | } | 
|  |  | 
|  | // multiIndex: 29 blocks, 1856 entries, 1856 bytes | 
|  | // Block 0 is the zero block. | 
|  | var multiIndex = [1856]uint8{ | 
|  | // Block 0x0, offset 0x0 | 
|  | // Block 0x1, offset 0x40 | 
|  | // Block 0x2, offset 0x80 | 
|  | // Block 0x3, offset 0xc0 | 
|  | 0xc2: 0x01, 0xc3: 0x02, 0xc4: 0x03, 0xc7: 0x04, | 
|  | 0xc8: 0x05, 0xcf: 0x06, | 
|  | 0xd0: 0x07, | 
|  | 0xdf: 0x08, | 
|  | 0xe0: 0x02, 0xe1: 0x03, 0xe2: 0x04, 0xe3: 0x05, 0xe4: 0x06, 0xe7: 0x07, | 
|  | 0xe8: 0x08, 0xef: 0x09, | 
|  | 0xf0: 0x0e, 0xf1: 0x11, 0xf2: 0x13, 0xf3: 0x15, 0xf4: 0x17, | 
|  | // Block 0x4, offset 0x100 | 
|  | 0x120: 0x09, | 
|  | 0x13f: 0x0a, | 
|  | // Block 0x5, offset 0x140 | 
|  | 0x140: 0x0b, | 
|  | 0x17f: 0x0c, | 
|  | // Block 0x6, offset 0x180 | 
|  | 0x180: 0x0d, | 
|  | // Block 0x7, offset 0x1c0 | 
|  | 0x1ff: 0x0e, | 
|  | // Block 0x8, offset 0x200 | 
|  | 0x200: 0x0f, | 
|  | // Block 0x9, offset 0x240 | 
|  | 0x27f: 0x10, | 
|  | // Block 0xa, offset 0x280 | 
|  | 0x280: 0x11, | 
|  | // Block 0xb, offset 0x2c0 | 
|  | 0x2ff: 0x12, | 
|  | // Block 0xc, offset 0x300 | 
|  | 0x300: 0x13, | 
|  | // Block 0xd, offset 0x340 | 
|  | 0x37f: 0x14, | 
|  | // Block 0xe, offset 0x380 | 
|  | 0x380: 0x15, | 
|  | // Block 0xf, offset 0x3c0 | 
|  | 0x3ff: 0x16, | 
|  | // Block 0x10, offset 0x400 | 
|  | 0x410: 0x0a, | 
|  | 0x41f: 0x0b, | 
|  | 0x420: 0x0c, | 
|  | 0x43f: 0x0d, | 
|  | // Block 0x11, offset 0x440 | 
|  | 0x440: 0x17, | 
|  | // Block 0x12, offset 0x480 | 
|  | 0x4bf: 0x18, | 
|  | // Block 0x13, offset 0x4c0 | 
|  | 0x4c0: 0x0f, | 
|  | 0x4ff: 0x10, | 
|  | // Block 0x14, offset 0x500 | 
|  | 0x500: 0x19, | 
|  | // Block 0x15, offset 0x540 | 
|  | 0x540: 0x12, | 
|  | // Block 0x16, offset 0x580 | 
|  | 0x5bf: 0x1a, | 
|  | // Block 0x17, offset 0x5c0 | 
|  | 0x5ff: 0x14, | 
|  | // Block 0x18, offset 0x600 | 
|  | 0x600: 0x1b, | 
|  | // Block 0x19, offset 0x640 | 
|  | 0x640: 0x16, | 
|  | // Block 0x1a, offset 0x680 | 
|  | // Block 0x1b, offset 0x6c0 | 
|  | 0x6c2: 0x01, 0x6c3: 0x02, 0x6c4: 0x03, 0x6c7: 0x04, | 
|  | 0x6c8: 0x05, 0x6cf: 0x06, | 
|  | 0x6d0: 0x07, | 
|  | 0x6df: 0x08, | 
|  | 0x6e0: 0x02, 0x6e1: 0x03, 0x6e2: 0x04, 0x6e3: 0x05, 0x6e4: 0x06, 0x6e7: 0x07, | 
|  | 0x6e8: 0x08, 0x6ef: 0x09, | 
|  | // Block 0x1c, offset 0x700 | 
|  | 0x730: 0x0e, 0x731: 0x11, 0x732: 0x13, 0x733: 0x15, 0x734: 0x17, | 
|  | } |