package main

// Code generated by ./peg/peg delocate.peg DO NOT EDIT.

import (
	"fmt"
	"io"
	"os"
	"sort"
	"strconv"
	"strings"
)

const endSymbol rune = 1114112

/* The rule types inferred from the grammar are below. */
type pegRule uint8

const (
	ruleUnknown pegRule = iota
	ruleAsmFile
	ruleStatement
	ruleGlobalDirective
	ruleDirective
	ruleDirectiveName
	ruleLocationDirective
	ruleFileDirective
	ruleLocDirective
	ruleArgs
	ruleArg
	ruleQuotedArg
	ruleQuotedText
	ruleLabelContainingDirective
	ruleLabelContainingDirectiveName
	ruleSymbolArgs
	ruleSymbolArg
	ruleSymbolExpr
	ruleSymbolAtom
	ruleSymbolOperator
	ruleOpenParen
	ruleCloseParen
	ruleSymbolType
	ruleDot
	ruleTCMarker
	ruleEscapedChar
	ruleWS
	ruleComment
	ruleLabel
	ruleSymbolName
	ruleLocalSymbol
	ruleLocalLabel
	ruleLocalLabelRef
	ruleInstruction
	ruleInstructionName
	ruleInstructionArg
	ruleGOTLocation
	ruleGOTSymbolOffset
	ruleAVX512Token
	ruleTOCRefHigh
	ruleTOCRefLow
	ruleIndirectionIndicator
	ruleRegisterOrConstant
	ruleARMConstantTweak
	ruleARMRegister
	ruleARMVectorRegister
	ruleMemoryRef
	ruleSymbolRef
	ruleLow12BitsSymbolRef
	ruleARMBaseIndexScale
	ruleARMGOTLow12
	ruleARMPostincrement
	ruleBaseIndexScale
	ruleOperator
	ruleOffset
	ruleSection
	ruleSegmentRegister
)

var rul3s = [...]string{
	"Unknown",
	"AsmFile",
	"Statement",
	"GlobalDirective",
	"Directive",
	"DirectiveName",
	"LocationDirective",
	"FileDirective",
	"LocDirective",
	"Args",
	"Arg",
	"QuotedArg",
	"QuotedText",
	"LabelContainingDirective",
	"LabelContainingDirectiveName",
	"SymbolArgs",
	"SymbolArg",
	"SymbolExpr",
	"SymbolAtom",
	"SymbolOperator",
	"OpenParen",
	"CloseParen",
	"SymbolType",
	"Dot",
	"TCMarker",
	"EscapedChar",
	"WS",
	"Comment",
	"Label",
	"SymbolName",
	"LocalSymbol",
	"LocalLabel",
	"LocalLabelRef",
	"Instruction",
	"InstructionName",
	"InstructionArg",
	"GOTLocation",
	"GOTSymbolOffset",
	"AVX512Token",
	"TOCRefHigh",
	"TOCRefLow",
	"IndirectionIndicator",
	"RegisterOrConstant",
	"ARMConstantTweak",
	"ARMRegister",
	"ARMVectorRegister",
	"MemoryRef",
	"SymbolRef",
	"Low12BitsSymbolRef",
	"ARMBaseIndexScale",
	"ARMGOTLow12",
	"ARMPostincrement",
	"BaseIndexScale",
	"Operator",
	"Offset",
	"Section",
	"SegmentRegister",
}

type token32 struct {
	pegRule
	begin, end uint32
}

func (t *token32) String() string {
	return fmt.Sprintf("\x1B[34m%v\x1B[m %v %v", rul3s[t.pegRule], t.begin, t.end)
}

type node32 struct {
	token32
	up, next *node32
}

func (node *node32) print(w io.Writer, pretty bool, buffer string) {
	var print func(node *node32, depth int)
	print = func(node *node32, depth int) {
		for node != nil {
			for c := 0; c < depth; c++ {
				fmt.Fprintf(w, " ")
			}
			rule := rul3s[node.pegRule]
			quote := strconv.Quote(string(([]rune(buffer)[node.begin:node.end])))
			if !pretty {
				fmt.Fprintf(w, "%v %v\n", rule, quote)
			} else {
				fmt.Fprintf(w, "\x1B[36m%v\x1B[m %v\n", rule, quote)
			}
			if node.up != nil {
				print(node.up, depth+1)
			}
			node = node.next
		}
	}
	print(node, 0)
}

func (node *node32) Print(w io.Writer, buffer string) {
	node.print(w, false, buffer)
}

func (node *node32) PrettyPrint(w io.Writer, buffer string) {
	node.print(w, true, buffer)
}

type tokens32 struct {
	tree []token32
}

func (t *tokens32) Trim(length uint32) {
	t.tree = t.tree[:length]
}

func (t *tokens32) Print() {
	for _, token := range t.tree {
		fmt.Println(token.String())
	}
}

func (t *tokens32) AST() *node32 {
	type element struct {
		node *node32
		down *element
	}
	tokens := t.Tokens()
	var stack *element
	for _, token := range tokens {
		if token.begin == token.end {
			continue
		}
		node := &node32{token32: token}
		for stack != nil && stack.node.begin >= token.begin && stack.node.end <= token.end {
			stack.node.next = node.up
			node.up = stack.node
			stack = stack.down
		}
		stack = &element{node: node, down: stack}
	}
	if stack != nil {
		return stack.node
	}
	return nil
}

func (t *tokens32) PrintSyntaxTree(buffer string) {
	t.AST().Print(os.Stdout, buffer)
}

func (t *tokens32) WriteSyntaxTree(w io.Writer, buffer string) {
	t.AST().Print(w, buffer)
}

func (t *tokens32) PrettyPrintSyntaxTree(buffer string) {
	t.AST().PrettyPrint(os.Stdout, buffer)
}

func (t *tokens32) Add(rule pegRule, begin, end, index uint32) {
	tree, i := t.tree, int(index)
	if i >= len(tree) {
		t.tree = append(tree, token32{pegRule: rule, begin: begin, end: end})
		return
	}
	tree[i] = token32{pegRule: rule, begin: begin, end: end}
}

func (t *tokens32) Tokens() []token32 {
	return t.tree
}

type Asm struct {
	Buffer string
	buffer []rune
	rules  [57]func() bool
	parse  func(rule ...int) error
	reset  func()
	Pretty bool
	tokens32
}

func (p *Asm) Parse(rule ...int) error {
	return p.parse(rule...)
}

func (p *Asm) Reset() {
	p.reset()
}

type textPosition struct {
	line, symbol int
}

type textPositionMap map[int]textPosition

func translatePositions(buffer []rune, positions []int) textPositionMap {
	length, translations, j, line, symbol := len(positions), make(textPositionMap, len(positions)), 0, 1, 0
	sort.Ints(positions)

search:
	for i, c := range buffer {
		if c == '\n' {
			line, symbol = line+1, 0
		} else {
			symbol++
		}
		if i == positions[j] {
			translations[positions[j]] = textPosition{line, symbol}
			for j++; j < length; j++ {
				if i != positions[j] {
					continue search
				}
			}
			break search
		}
	}

	return translations
}

type parseError struct {
	p   *Asm
	max token32
}

func (e *parseError) Error() string {
	tokens, err := []token32{e.max}, "\n"
	positions, p := make([]int, 2*len(tokens)), 0
	for _, token := range tokens {
		positions[p], p = int(token.begin), p+1
		positions[p], p = int(token.end), p+1
	}
	translations := translatePositions(e.p.buffer, positions)
	format := "parse error near %v (line %v symbol %v - line %v symbol %v):\n%v\n"
	if e.p.Pretty {
		format = "parse error near \x1B[34m%v\x1B[m (line %v symbol %v - line %v symbol %v):\n%v\n"
	}
	for _, token := range tokens {
		begin, end := int(token.begin), int(token.end)
		err += fmt.Sprintf(format,
			rul3s[token.pegRule],
			translations[begin].line, translations[begin].symbol,
			translations[end].line, translations[end].symbol,
			strconv.Quote(string(e.p.buffer[begin:end])))
	}

	return err
}

func (p *Asm) PrintSyntaxTree() {
	if p.Pretty {
		p.tokens32.PrettyPrintSyntaxTree(p.Buffer)
	} else {
		p.tokens32.PrintSyntaxTree(p.Buffer)
	}
}

func (p *Asm) WriteSyntaxTree(w io.Writer) {
	p.tokens32.WriteSyntaxTree(w, p.Buffer)
}

func (p *Asm) SprintSyntaxTree() string {
	var bldr strings.Builder
	p.WriteSyntaxTree(&bldr)
	return bldr.String()
}

func Pretty(pretty bool) func(*Asm) error {
	return func(p *Asm) error {
		p.Pretty = pretty
		return nil
	}
}

func Size(size int) func(*Asm) error {
	return func(p *Asm) error {
		p.tokens32 = tokens32{tree: make([]token32, 0, size)}
		return nil
	}
}
func (p *Asm) Init(options ...func(*Asm) error) error {
	var (
		max                  token32
		position, tokenIndex uint32
		buffer               []rune
	)
	for _, option := range options {
		err := option(p)
		if err != nil {
			return err
		}
	}
	p.reset = func() {
		max = token32{}
		position, tokenIndex = 0, 0

		p.buffer = []rune(p.Buffer)
		if len(p.buffer) == 0 || p.buffer[len(p.buffer)-1] != endSymbol {
			p.buffer = append(p.buffer, endSymbol)
		}
		buffer = p.buffer
	}
	p.reset()

	_rules := p.rules
	tree := p.tokens32
	p.parse = func(rule ...int) error {
		r := 1
		if len(rule) > 0 {
			r = rule[0]
		}
		matches := p.rules[r]()
		p.tokens32 = tree
		if matches {
			p.Trim(tokenIndex)
			return nil
		}
		return &parseError{p, max}
	}

	add := func(rule pegRule, begin uint32) {
		tree.Add(rule, begin, position, tokenIndex)
		tokenIndex++
		if begin != position && position > max.end {
			max = token32{rule, begin, position}
		}
	}

	matchDot := func() bool {
		if buffer[position] != endSymbol {
			position++
			return true
		}
		return false
	}

	/*matchChar := func(c byte) bool {
		if buffer[position] == c {
			position++
			return true
		}
		return false
	}*/

	/*matchRange := func(lower byte, upper byte) bool {
		if c := buffer[position]; c >= lower && c <= upper {
			position++
			return true
		}
		return false
	}*/

	_rules = [...]func() bool{
		nil,
		/* 0 AsmFile <- <(Statement* !.)> */
		func() bool {
			position0, tokenIndex0 := position, tokenIndex
			{
				position1 := position
			l2:
				{
					position3, tokenIndex3 := position, tokenIndex
					if !_rules[ruleStatement]() {
						goto l3
					}
					goto l2
				l3:
					position, tokenIndex = position3, tokenIndex3
				}
				{
					position4, tokenIndex4 := position, tokenIndex
					if !matchDot() {
						goto l4
					}
					goto l0
				l4:
					position, tokenIndex = position4, tokenIndex4
				}
				add(ruleAsmFile, position1)
			}
			return true
		l0:
			position, tokenIndex = position0, tokenIndex0
			return false
		},
		/* 1 Statement <- <(WS? (Label / ((GlobalDirective / LocationDirective / LabelContainingDirective / Instruction / Directive / Comment / ) WS? ((Comment? '\n') / ';'))))> */
		func() bool {
			position5, tokenIndex5 := position, tokenIndex
			{
				position6 := position
				{
					position7, tokenIndex7 := position, tokenIndex
					if !_rules[ruleWS]() {
						goto l7
					}
					goto l8
				l7:
					position, tokenIndex = position7, tokenIndex7
				}
			l8:
				{
					position9, tokenIndex9 := position, tokenIndex
					if !_rules[ruleLabel]() {
						goto l10
					}
					goto l9
				l10:
					position, tokenIndex = position9, tokenIndex9
					{
						position11, tokenIndex11 := position, tokenIndex
						if !_rules[ruleGlobalDirective]() {
							goto l12
						}
						goto l11
					l12:
						position, tokenIndex = position11, tokenIndex11
						if !_rules[ruleLocationDirective]() {
							goto l13
						}
						goto l11
					l13:
						position, tokenIndex = position11, tokenIndex11
						if !_rules[ruleLabelContainingDirective]() {
							goto l14
						}
						goto l11
					l14:
						position, tokenIndex = position11, tokenIndex11
						if !_rules[ruleInstruction]() {
							goto l15
						}
						goto l11
					l15:
						position, tokenIndex = position11, tokenIndex11
						if !_rules[ruleDirective]() {
							goto l16
						}
						goto l11
					l16:
						position, tokenIndex = position11, tokenIndex11
						if !_rules[ruleComment]() {
							goto l17
						}
						goto l11
					l17:
						position, tokenIndex = position11, tokenIndex11
					}
				l11:
					{
						position18, tokenIndex18 := position, tokenIndex
						if !_rules[ruleWS]() {
							goto l18
						}
						goto l19
					l18:
						position, tokenIndex = position18, tokenIndex18
					}
				l19:
					{
						position20, tokenIndex20 := position, tokenIndex
						{
							position22, tokenIndex22 := position, tokenIndex
							if !_rules[ruleComment]() {
								goto l22
							}
							goto l23
						l22:
							position, tokenIndex = position22, tokenIndex22
						}
					l23:
						if buffer[position] != rune('\n') {
							goto l21
						}
						position++
						goto l20
					l21:
						position, tokenIndex = position20, tokenIndex20
						if buffer[position] != rune(';') {
							goto l5
						}
						position++
					}
				l20:
				}
			l9:
				add(ruleStatement, position6)
			}
			return true
		l5:
			position, tokenIndex = position5, tokenIndex5
			return false
		},
		/* 2 GlobalDirective <- <((('.' ('g' / 'G') ('l' / 'L') ('o' / 'O') ('b' / 'B') ('a' / 'A') ('l' / 'L')) / ('.' ('g' / 'G') ('l' / 'L') ('o' / 'O') ('b' / 'B') ('l' / 'L'))) WS SymbolName)> */
		func() bool {
			position24, tokenIndex24 := position, tokenIndex
			{
				position25 := position
				{
					position26, tokenIndex26 := position, tokenIndex
					if buffer[position] != rune('.') {
						goto l27
					}
					position++
					{
						position28, tokenIndex28 := position, tokenIndex
						if buffer[position] != rune('g') {
							goto l29
						}
						position++
						goto l28
					l29:
						position, tokenIndex = position28, tokenIndex28
						if buffer[position] != rune('G') {
							goto l27
						}
						position++
					}
				l28:
					{
						position30, tokenIndex30 := position, tokenIndex
						if buffer[position] != rune('l') {
							goto l31
						}
						position++
						goto l30
					l31:
						position, tokenIndex = position30, tokenIndex30
						if buffer[position] != rune('L') {
							goto l27
						}
						position++
					}
				l30:
					{
						position32, tokenIndex32 := position, tokenIndex
						if buffer[position] != rune('o') {
							goto l33
						}
						position++
						goto l32
					l33:
						position, tokenIndex = position32, tokenIndex32
						if buffer[position] != rune('O') {
							goto l27
						}
						position++
					}
				l32:
					{
						position34, tokenIndex34 := position, tokenIndex
						if buffer[position] != rune('b') {
							goto l35
						}
						position++
						goto l34
					l35:
						position, tokenIndex = position34, tokenIndex34
						if buffer[position] != rune('B') {
							goto l27
						}
						position++
					}
				l34:
					{
						position36, tokenIndex36 := position, tokenIndex
						if buffer[position] != rune('a') {
							goto l37
						}
						position++
						goto l36
					l37:
						position, tokenIndex = position36, tokenIndex36
						if buffer[position] != rune('A') {
							goto l27
						}
						position++
					}
				l36:
					{
						position38, tokenIndex38 := position, tokenIndex
						if buffer[position] != rune('l') {
							goto l39
						}
						position++
						goto l38
					l39:
						position, tokenIndex = position38, tokenIndex38
						if buffer[position] != rune('L') {
							goto l27
						}
						position++
					}
				l38:
					goto l26
				l27:
					position, tokenIndex = position26, tokenIndex26
					if buffer[position] != rune('.') {
						goto l24
					}
					position++
					{
						position40, tokenIndex40 := position, tokenIndex
						if buffer[position] != rune('g') {
							goto l41
						}
						position++
						goto l40
					l41:
						position, tokenIndex = position40, tokenIndex40
						if buffer[position] != rune('G') {
							goto l24
						}
						position++
					}
				l40:
					{
						position42, tokenIndex42 := position, tokenIndex
						if buffer[position] != rune('l') {
							goto l43
						}
						position++
						goto l42
					l43:
						position, tokenIndex = position42, tokenIndex42
						if buffer[position] != rune('L') {
							goto l24
						}
						position++
					}
				l42:
					{
						position44, tokenIndex44 := position, tokenIndex
						if buffer[position] != rune('o') {
							goto l45
						}
						position++
						goto l44
					l45:
						position, tokenIndex = position44, tokenIndex44
						if buffer[position] != rune('O') {
							goto l24
						}
						position++
					}
				l44:
					{
						position46, tokenIndex46 := position, tokenIndex
						if buffer[position] != rune('b') {
							goto l47
						}
						position++
						goto l46
					l47:
						position, tokenIndex = position46, tokenIndex46
						if buffer[position] != rune('B') {
							goto l24
						}
						position++
					}
				l46:
					{
						position48, tokenIndex48 := position, tokenIndex
						if buffer[position] != rune('l') {
							goto l49
						}
						position++
						goto l48
					l49:
						position, tokenIndex = position48, tokenIndex48
						if buffer[position] != rune('L') {
							goto l24
						}
						position++
					}
				l48:
				}
			l26:
				if !_rules[ruleWS]() {
					goto l24
				}
				if !_rules[ruleSymbolName]() {
					goto l24
				}
				add(ruleGlobalDirective, position25)
			}
			return true
		l24:
			position, tokenIndex = position24, tokenIndex24
			return false
		},
		/* 3 Directive <- <('.' DirectiveName (WS Args)?)> */
		func() bool {
			position50, tokenIndex50 := position, tokenIndex
			{
				position51 := position
				if buffer[position] != rune('.') {
					goto l50
				}
				position++
				if !_rules[ruleDirectiveName]() {
					goto l50
				}
				{
					position52, tokenIndex52 := position, tokenIndex
					if !_rules[ruleWS]() {
						goto l52
					}
					if !_rules[ruleArgs]() {
						goto l52
					}
					goto l53
				l52:
					position, tokenIndex = position52, tokenIndex52
				}
			l53:
				add(ruleDirective, position51)
			}
			return true
		l50:
			position, tokenIndex = position50, tokenIndex50
			return false
		},
		/* 4 DirectiveName <- <([a-z] / [A-Z] / ([0-9] / [0-9]) / '_')+> */
		func() bool {
			position54, tokenIndex54 := position, tokenIndex
			{
				position55 := position
				{
					position58, tokenIndex58 := position, tokenIndex
					if c := buffer[position]; c < rune('a') || c > rune('z') {
						goto l59
					}
					position++
					goto l58
				l59:
					position, tokenIndex = position58, tokenIndex58
					if c := buffer[position]; c < rune('A') || c > rune('Z') {
						goto l60
					}
					position++
					goto l58
				l60:
					position, tokenIndex = position58, tokenIndex58
					{
						position62, tokenIndex62 := position, tokenIndex
						if c := buffer[position]; c < rune('0') || c > rune('9') {
							goto l63
						}
						position++
						goto l62
					l63:
						position, tokenIndex = position62, tokenIndex62
						if c := buffer[position]; c < rune('0') || c > rune('9') {
							goto l61
						}
						position++
					}
				l62:
					goto l58
				l61:
					position, tokenIndex = position58, tokenIndex58
					if buffer[position] != rune('_') {
						goto l54
					}
					position++
				}
			l58:
			l56:
				{
					position57, tokenIndex57 := position, tokenIndex
					{
						position64, tokenIndex64 := position, tokenIndex
						if c := buffer[position]; c < rune('a') || c > rune('z') {
							goto l65
						}
						position++
						goto l64
					l65:
						position, tokenIndex = position64, tokenIndex64
						if c := buffer[position]; c < rune('A') || c > rune('Z') {
							goto l66
						}
						position++
						goto l64
					l66:
						position, tokenIndex = position64, tokenIndex64
						{
							position68, tokenIndex68 := position, tokenIndex
							if c := buffer[position]; c < rune('0') || c > rune('9') {
								goto l69
							}
							position++
							goto l68
						l69:
							position, tokenIndex = position68, tokenIndex68
							if c := buffer[position]; c < rune('0') || c > rune('9') {
								goto l67
							}
							position++
						}
					l68:
						goto l64
					l67:
						position, tokenIndex = position64, tokenIndex64
						if buffer[position] != rune('_') {
							goto l57
						}
						position++
					}
				l64:
					goto l56
				l57:
					position, tokenIndex = position57, tokenIndex57
				}
				add(ruleDirectiveName, position55)
			}
			return true
		l54:
			position, tokenIndex = position54, tokenIndex54
			return false
		},
		/* 5 LocationDirective <- <(FileDirective / LocDirective)> */
		func() bool {
			position70, tokenIndex70 := position, tokenIndex
			{
				position71 := position
				{
					position72, tokenIndex72 := position, tokenIndex
					if !_rules[ruleFileDirective]() {
						goto l73
					}
					goto l72
				l73:
					position, tokenIndex = position72, tokenIndex72
					if !_rules[ruleLocDirective]() {
						goto l70
					}
				}
			l72:
				add(ruleLocationDirective, position71)
			}
			return true
		l70:
			position, tokenIndex = position70, tokenIndex70
			return false
		},
		/* 6 FileDirective <- <('.' ('f' / 'F') ('i' / 'I') ('l' / 'L') ('e' / 'E') WS (!('#' / '\n') .)+)> */
		func() bool {
			position74, tokenIndex74 := position, tokenIndex
			{
				position75 := position
				if buffer[position] != rune('.') {
					goto l74
				}
				position++
				{
					position76, tokenIndex76 := position, tokenIndex
					if buffer[position] != rune('f') {
						goto l77
					}
					position++
					goto l76
				l77:
					position, tokenIndex = position76, tokenIndex76
					if buffer[position] != rune('F') {
						goto l74
					}
					position++
				}
			l76:
				{
					position78, tokenIndex78 := position, tokenIndex
					if buffer[position] != rune('i') {
						goto l79
					}
					position++
					goto l78
				l79:
					position, tokenIndex = position78, tokenIndex78
					if buffer[position] != rune('I') {
						goto l74
					}
					position++
				}
			l78:
				{
					position80, tokenIndex80 := position, tokenIndex
					if buffer[position] != rune('l') {
						goto l81
					}
					position++
					goto l80
				l81:
					position, tokenIndex = position80, tokenIndex80
					if buffer[position] != rune('L') {
						goto l74
					}
					position++
				}
			l80:
				{
					position82, tokenIndex82 := position, tokenIndex
					if buffer[position] != rune('e') {
						goto l83
					}
					position++
					goto l82
				l83:
					position, tokenIndex = position82, tokenIndex82
					if buffer[position] != rune('E') {
						goto l74
					}
					position++
				}
			l82:
				if !_rules[ruleWS]() {
					goto l74
				}
				{
					position86, tokenIndex86 := position, tokenIndex
					{
						position87, tokenIndex87 := position, tokenIndex
						if buffer[position] != rune('#') {
							goto l88
						}
						position++
						goto l87
					l88:
						position, tokenIndex = position87, tokenIndex87
						if buffer[position] != rune('\n') {
							goto l86
						}
						position++
					}
				l87:
					goto l74
				l86:
					position, tokenIndex = position86, tokenIndex86
				}
				if !matchDot() {
					goto l74
				}
			l84:
				{
					position85, tokenIndex85 := position, tokenIndex
					{
						position89, tokenIndex89 := position, tokenIndex
						{
							position90, tokenIndex90 := position, tokenIndex
							if buffer[position] != rune('#') {
								goto l91
							}
							position++
							goto l90
						l91:
							position, tokenIndex = position90, tokenIndex90
							if buffer[position] != rune('\n') {
								goto l89
							}
							position++
						}
					l90:
						goto l85
					l89:
						position, tokenIndex = position89, tokenIndex89
					}
					if !matchDot() {
						goto l85
					}
					goto l84
				l85:
					position, tokenIndex = position85, tokenIndex85
				}
				add(ruleFileDirective, position75)
			}
			return true
		l74:
			position, tokenIndex = position74, tokenIndex74
			return false
		},
		/* 7 LocDirective <- <('.' ('l' / 'L') ('o' / 'O') ('c' / 'C') WS (!('#' / '/' / '\n') .)+)> */
		func() bool {
			position92, tokenIndex92 := position, tokenIndex
			{
				position93 := position
				if buffer[position] != rune('.') {
					goto l92
				}
				position++
				{
					position94, tokenIndex94 := position, tokenIndex
					if buffer[position] != rune('l') {
						goto l95
					}
					position++
					goto l94
				l95:
					position, tokenIndex = position94, tokenIndex94
					if buffer[position] != rune('L') {
						goto l92
					}
					position++
				}
			l94:
				{
					position96, tokenIndex96 := position, tokenIndex
					if buffer[position] != rune('o') {
						goto l97
					}
					position++
					goto l96
				l97:
					position, tokenIndex = position96, tokenIndex96
					if buffer[position] != rune('O') {
						goto l92
					}
					position++
				}
			l96:
				{
					position98, tokenIndex98 := position, tokenIndex
					if buffer[position] != rune('c') {
						goto l99
					}
					position++
					goto l98
				l99:
					position, tokenIndex = position98, tokenIndex98
					if buffer[position] != rune('C') {
						goto l92
					}
					position++
				}
			l98:
				if !_rules[ruleWS]() {
					goto l92
				}
				{
					position102, tokenIndex102 := position, tokenIndex
					{
						position103, tokenIndex103 := position, tokenIndex
						if buffer[position] != rune('#') {
							goto l104
						}
						position++
						goto l103
					l104:
						position, tokenIndex = position103, tokenIndex103
						if buffer[position] != rune('/') {
							goto l105
						}
						position++
						goto l103
					l105:
						position, tokenIndex = position103, tokenIndex103
						if buffer[position] != rune('\n') {
							goto l102
						}
						position++
					}
				l103:
					goto l92
				l102:
					position, tokenIndex = position102, tokenIndex102
				}
				if !matchDot() {
					goto l92
				}
			l100:
				{
					position101, tokenIndex101 := position, tokenIndex
					{
						position106, tokenIndex106 := position, tokenIndex
						{
							position107, tokenIndex107 := position, tokenIndex
							if buffer[position] != rune('#') {
								goto l108
							}
							position++
							goto l107
						l108:
							position, tokenIndex = position107, tokenIndex107
							if buffer[position] != rune('/') {
								goto l109
							}
							position++
							goto l107
						l109:
							position, tokenIndex = position107, tokenIndex107
							if buffer[position] != rune('\n') {
								goto l106
							}
							position++
						}
					l107:
						goto l101
					l106:
						position, tokenIndex = position106, tokenIndex106
					}
					if !matchDot() {
						goto l101
					}
					goto l100
				l101:
					position, tokenIndex = position101, tokenIndex101
				}
				add(ruleLocDirective, position93)
			}
			return true
		l92:
			position, tokenIndex = position92, tokenIndex92
			return false
		},
		/* 8 Args <- <(Arg (WS? ',' WS? Arg)*)> */
		func() bool {
			position110, tokenIndex110 := position, tokenIndex
			{
				position111 := position
				if !_rules[ruleArg]() {
					goto l110
				}
			l112:
				{
					position113, tokenIndex113 := position, tokenIndex
					{
						position114, tokenIndex114 := position, tokenIndex
						if !_rules[ruleWS]() {
							goto l114
						}
						goto l115
					l114:
						position, tokenIndex = position114, tokenIndex114
					}
				l115:
					if buffer[position] != rune(',') {
						goto l113
					}
					position++
					{
						position116, tokenIndex116 := position, tokenIndex
						if !_rules[ruleWS]() {
							goto l116
						}
						goto l117
					l116:
						position, tokenIndex = position116, tokenIndex116
					}
				l117:
					if !_rules[ruleArg]() {
						goto l113
					}
					goto l112
				l113:
					position, tokenIndex = position113, tokenIndex113
				}
				add(ruleArgs, position111)
			}
			return true
		l110:
			position, tokenIndex = position110, tokenIndex110
			return false
		},
		/* 9 Arg <- <(QuotedArg / ([0-9] / [0-9] / ([a-z] / [A-Z]) / '%' / '+' / '-' / '*' / '_' / '@' / '.')*)> */
		func() bool {
			{
				position119 := position
				{
					position120, tokenIndex120 := position, tokenIndex
					if !_rules[ruleQuotedArg]() {
						goto l121
					}
					goto l120
				l121:
					position, tokenIndex = position120, tokenIndex120
				l122:
					{
						position123, tokenIndex123 := position, tokenIndex
						{
							position124, tokenIndex124 := position, tokenIndex
							if c := buffer[position]; c < rune('0') || c > rune('9') {
								goto l125
							}
							position++
							goto l124
						l125:
							position, tokenIndex = position124, tokenIndex124
							if c := buffer[position]; c < rune('0') || c > rune('9') {
								goto l126
							}
							position++
							goto l124
						l126:
							position, tokenIndex = position124, tokenIndex124
							{
								position128, tokenIndex128 := position, tokenIndex
								if c := buffer[position]; c < rune('a') || c > rune('z') {
									goto l129
								}
								position++
								goto l128
							l129:
								position, tokenIndex = position128, tokenIndex128
								if c := buffer[position]; c < rune('A') || c > rune('Z') {
									goto l127
								}
								position++
							}
						l128:
							goto l124
						l127:
							position, tokenIndex = position124, tokenIndex124
							if buffer[position] != rune('%') {
								goto l130
							}
							position++
							goto l124
						l130:
							position, tokenIndex = position124, tokenIndex124
							if buffer[position] != rune('+') {
								goto l131
							}
							position++
							goto l124
						l131:
							position, tokenIndex = position124, tokenIndex124
							if buffer[position] != rune('-') {
								goto l132
							}
							position++
							goto l124
						l132:
							position, tokenIndex = position124, tokenIndex124
							if buffer[position] != rune('*') {
								goto l133
							}
							position++
							goto l124
						l133:
							position, tokenIndex = position124, tokenIndex124
							if buffer[position] != rune('_') {
								goto l134
							}
							position++
							goto l124
						l134:
							position, tokenIndex = position124, tokenIndex124
							if buffer[position] != rune('@') {
								goto l135
							}
							position++
							goto l124
						l135:
							position, tokenIndex = position124, tokenIndex124
							if buffer[position] != rune('.') {
								goto l123
							}
							position++
						}
					l124:
						goto l122
					l123:
						position, tokenIndex = position123, tokenIndex123
					}
				}
			l120:
				add(ruleArg, position119)
			}
			return true
		},
		/* 10 QuotedArg <- <('"' QuotedText '"')> */
		func() bool {
			position136, tokenIndex136 := position, tokenIndex
			{
				position137 := position
				if buffer[position] != rune('"') {
					goto l136
				}
				position++
				if !_rules[ruleQuotedText]() {
					goto l136
				}
				if buffer[position] != rune('"') {
					goto l136
				}
				position++
				add(ruleQuotedArg, position137)
			}
			return true
		l136:
			position, tokenIndex = position136, tokenIndex136
			return false
		},
		/* 11 QuotedText <- <(EscapedChar / (!'"' .))*> */
		func() bool {
			{
				position139 := position
			l140:
				{
					position141, tokenIndex141 := position, tokenIndex
					{
						position142, tokenIndex142 := position, tokenIndex
						if !_rules[ruleEscapedChar]() {
							goto l143
						}
						goto l142
					l143:
						position, tokenIndex = position142, tokenIndex142
						{
							position144, tokenIndex144 := position, tokenIndex
							if buffer[position] != rune('"') {
								goto l144
							}
							position++
							goto l141
						l144:
							position, tokenIndex = position144, tokenIndex144
						}
						if !matchDot() {
							goto l141
						}
					}
				l142:
					goto l140
				l141:
					position, tokenIndex = position141, tokenIndex141
				}
				add(ruleQuotedText, position139)
			}
			return true
		},
		/* 12 LabelContainingDirective <- <(LabelContainingDirectiveName WS SymbolArgs)> */
		func() bool {
			position145, tokenIndex145 := position, tokenIndex
			{
				position146 := position
				if !_rules[ruleLabelContainingDirectiveName]() {
					goto l145
				}
				if !_rules[ruleWS]() {
					goto l145
				}
				if !_rules[ruleSymbolArgs]() {
					goto l145
				}
				add(ruleLabelContainingDirective, position146)
			}
			return true
		l145:
			position, tokenIndex = position145, tokenIndex145
			return false
		},
		/* 13 LabelContainingDirectiveName <- <(('.' ('x' / 'X') ('w' / 'W') ('o' / 'O') ('r' / 'R') ('d' / 'D')) / ('.' ('w' / 'W') ('o' / 'O') ('r' / 'R') ('d' / 'D')) / ('.' ('l' / 'L') ('o' / 'O') ('n' / 'N') ('g' / 'G')) / ('.' ('s' / 'S') ('e' / 'E') ('t' / 'T')) / ('.' ('b' / 'B') ('y' / 'Y') ('t' / 'T') ('e' / 'E')) / ('.' '8' ('b' / 'B') ('y' / 'Y') ('t' / 'T') ('e' / 'E')) / ('.' '4' ('b' / 'B') ('y' / 'Y') ('t' / 'T') ('e' / 'E')) / ('.' ('q' / 'Q') ('u' / 'U') ('a' / 'A') ('d' / 'D')) / ('.' ('t' / 'T') ('c' / 'C')) / ('.' ('l' / 'L') ('o' / 'O') ('c' / 'C') ('a' / 'A') ('l' / 'L') ('e' / 'E') ('n' / 'N') ('t' / 'T') ('r' / 'R') ('y' / 'Y')) / ('.' ('s' / 'S') ('i' / 'I') ('z' / 'Z') ('e' / 'E')) / ('.' ('t' / 'T') ('y' / 'Y') ('p' / 'P') ('e' / 'E')) / ('.' ('u' / 'U') ('l' / 'L') ('e' / 'E') ('b' / 'B') '1' '2' '8') / ('.' ('s' / 'S') ('l' / 'L') ('e' / 'E') ('b' / 'B') '1' '2' '8'))> */
		func() bool {
			position147, tokenIndex147 := position, tokenIndex
			{
				position148 := position
				{
					position149, tokenIndex149 := position, tokenIndex
					if buffer[position] != rune('.') {
						goto l150
					}
					position++
					{
						position151, tokenIndex151 := position, tokenIndex
						if buffer[position] != rune('x') {
							goto l152
						}
						position++
						goto l151
					l152:
						position, tokenIndex = position151, tokenIndex151
						if buffer[position] != rune('X') {
							goto l150
						}
						position++
					}
				l151:
					{
						position153, tokenIndex153 := position, tokenIndex
						if buffer[position] != rune('w') {
							goto l154
						}
						position++
						goto l153
					l154:
						position, tokenIndex = position153, tokenIndex153
						if buffer[position] != rune('W') {
							goto l150
						}
						position++
					}
				l153:
					{
						position155, tokenIndex155 := position, tokenIndex
						if buffer[position] != rune('o') {
							goto l156
						}
						position++
						goto l155
					l156:
						position, tokenIndex = position155, tokenIndex155
						if buffer[position] != rune('O') {
							goto l150
						}
						position++
					}
				l155:
					{
						position157, tokenIndex157 := position, tokenIndex
						if buffer[position] != rune('r') {
							goto l158
						}
						position++
						goto l157
					l158:
						position, tokenIndex = position157, tokenIndex157
						if buffer[position] != rune('R') {
							goto l150
						}
						position++
					}
				l157:
					{
						position159, tokenIndex159 := position, tokenIndex
						if buffer[position] != rune('d') {
							goto l160
						}
						position++
						goto l159
					l160:
						position, tokenIndex = position159, tokenIndex159
						if buffer[position] != rune('D') {
							goto l150
						}
						position++
					}
				l159:
					goto l149
				l150:
					position, tokenIndex = position149, tokenIndex149
					if buffer[position] != rune('.') {
						goto l161
					}
					position++
					{
						position162, tokenIndex162 := position, tokenIndex
						if buffer[position] != rune('w') {
							goto l163
						}
						position++
						goto l162
					l163:
						position, tokenIndex = position162, tokenIndex162
						if buffer[position] != rune('W') {
							goto l161
						}
						position++
					}
				l162:
					{
						position164, tokenIndex164 := position, tokenIndex
						if buffer[position] != rune('o') {
							goto l165
						}
						position++
						goto l164
					l165:
						position, tokenIndex = position164, tokenIndex164
						if buffer[position] != rune('O') {
							goto l161
						}
						position++
					}
				l164:
					{
						position166, tokenIndex166 := position, tokenIndex
						if buffer[position] != rune('r') {
							goto l167
						}
						position++
						goto l166
					l167:
						position, tokenIndex = position166, tokenIndex166
						if buffer[position] != rune('R') {
							goto l161
						}
						position++
					}
				l166:
					{
						position168, tokenIndex168 := position, tokenIndex
						if buffer[position] != rune('d') {
							goto l169
						}
						position++
						goto l168
					l169:
						position, tokenIndex = position168, tokenIndex168
						if buffer[position] != rune('D') {
							goto l161
						}
						position++
					}
				l168:
					goto l149
				l161:
					position, tokenIndex = position149, tokenIndex149
					if buffer[position] != rune('.') {
						goto l170
					}
					position++
					{
						position171, tokenIndex171 := position, tokenIndex
						if buffer[position] != rune('l') {
							goto l172
						}
						position++
						goto l171
					l172:
						position, tokenIndex = position171, tokenIndex171
						if buffer[position] != rune('L') {
							goto l170
						}
						position++
					}
				l171:
					{
						position173, tokenIndex173 := position, tokenIndex
						if buffer[position] != rune('o') {
							goto l174
						}
						position++
						goto l173
					l174:
						position, tokenIndex = position173, tokenIndex173
						if buffer[position] != rune('O') {
							goto l170
						}
						position++
					}
				l173:
					{
						position175, tokenIndex175 := position, tokenIndex
						if buffer[position] != rune('n') {
							goto l176
						}
						position++
						goto l175
					l176:
						position, tokenIndex = position175, tokenIndex175
						if buffer[position] != rune('N') {
							goto l170
						}
						position++
					}
				l175:
					{
						position177, tokenIndex177 := position, tokenIndex
						if buffer[position] != rune('g') {
							goto l178
						}
						position++
						goto l177
					l178:
						position, tokenIndex = position177, tokenIndex177
						if buffer[position] != rune('G') {
							goto l170
						}
						position++
					}
				l177:
					goto l149
				l170:
					position, tokenIndex = position149, tokenIndex149
					if buffer[position] != rune('.') {
						goto l179
					}
					position++
					{
						position180, tokenIndex180 := position, tokenIndex
						if buffer[position] != rune('s') {
							goto l181
						}
						position++
						goto l180
					l181:
						position, tokenIndex = position180, tokenIndex180
						if buffer[position] != rune('S') {
							goto l179
						}
						position++
					}
				l180:
					{
						position182, tokenIndex182 := position, tokenIndex
						if buffer[position] != rune('e') {
							goto l183
						}
						position++
						goto l182
					l183:
						position, tokenIndex = position182, tokenIndex182
						if buffer[position] != rune('E') {
							goto l179
						}
						position++
					}
				l182:
					{
						position184, tokenIndex184 := position, tokenIndex
						if buffer[position] != rune('t') {
							goto l185
						}
						position++
						goto l184
					l185:
						position, tokenIndex = position184, tokenIndex184
						if buffer[position] != rune('T') {
							goto l179
						}
						position++
					}
				l184:
					goto l149
				l179:
					position, tokenIndex = position149, tokenIndex149
					if buffer[position] != rune('.') {
						goto l186
					}
					position++
					{
						position187, tokenIndex187 := position, tokenIndex
						if buffer[position] != rune('b') {
							goto l188
						}
						position++
						goto l187
					l188:
						position, tokenIndex = position187, tokenIndex187
						if buffer[position] != rune('B') {
							goto l186
						}
						position++
					}
				l187:
					{
						position189, tokenIndex189 := position, tokenIndex
						if buffer[position] != rune('y') {
							goto l190
						}
						position++
						goto l189
					l190:
						position, tokenIndex = position189, tokenIndex189
						if buffer[position] != rune('Y') {
							goto l186
						}
						position++
					}
				l189:
					{
						position191, tokenIndex191 := position, tokenIndex
						if buffer[position] != rune('t') {
							goto l192
						}
						position++
						goto l191
					l192:
						position, tokenIndex = position191, tokenIndex191
						if buffer[position] != rune('T') {
							goto l186
						}
						position++
					}
				l191:
					{
						position193, tokenIndex193 := position, tokenIndex
						if buffer[position] != rune('e') {
							goto l194
						}
						position++
						goto l193
					l194:
						position, tokenIndex = position193, tokenIndex193
						if buffer[position] != rune('E') {
							goto l186
						}
						position++
					}
				l193:
					goto l149
				l186:
					position, tokenIndex = position149, tokenIndex149
					if buffer[position] != rune('.') {
						goto l195
					}
					position++
					if buffer[position] != rune('8') {
						goto l195
					}
					position++
					{
						position196, tokenIndex196 := position, tokenIndex
						if buffer[position] != rune('b') {
							goto l197
						}
						position++
						goto l196
					l197:
						position, tokenIndex = position196, tokenIndex196
						if buffer[position] != rune('B') {
							goto l195
						}
						position++
					}
				l196:
					{
						position198, tokenIndex198 := position, tokenIndex
						if buffer[position] != rune('y') {
							goto l199
						}
						position++
						goto l198
					l199:
						position, tokenIndex = position198, tokenIndex198
						if buffer[position] != rune('Y') {
							goto l195
						}
						position++
					}
				l198:
					{
						position200, tokenIndex200 := position, tokenIndex
						if buffer[position] != rune('t') {
							goto l201
						}
						position++
						goto l200
					l201:
						position, tokenIndex = position200, tokenIndex200
						if buffer[position] != rune('T') {
							goto l195
						}
						position++
					}
				l200:
					{
						position202, tokenIndex202 := position, tokenIndex
						if buffer[position] != rune('e') {
							goto l203
						}
						position++
						goto l202
					l203:
						position, tokenIndex = position202, tokenIndex202
						if buffer[position] != rune('E') {
							goto l195
						}
						position++
					}
				l202:
					goto l149
				l195:
					position, tokenIndex = position149, tokenIndex149
					if buffer[position] != rune('.') {
						goto l204
					}
					position++
					if buffer[position] != rune('4') {
						goto l204
					}
					position++
					{
						position205, tokenIndex205 := position, tokenIndex
						if buffer[position] != rune('b') {
							goto l206
						}
						position++
						goto l205
					l206:
						position, tokenIndex = position205, tokenIndex205
						if buffer[position] != rune('B') {
							goto l204
						}
						position++
					}
				l205:
					{
						position207, tokenIndex207 := position, tokenIndex
						if buffer[position] != rune('y') {
							goto l208
						}
						position++
						goto l207
					l208:
						position, tokenIndex = position207, tokenIndex207
						if buffer[position] != rune('Y') {
							goto l204
						}
						position++
					}
				l207:
					{
						position209, tokenIndex209 := position, tokenIndex
						if buffer[position] != rune('t') {
							goto l210
						}
						position++
						goto l209
					l210:
						position, tokenIndex = position209, tokenIndex209
						if buffer[position] != rune('T') {
							goto l204
						}
						position++
					}
				l209:
					{
						position211, tokenIndex211 := position, tokenIndex
						if buffer[position] != rune('e') {
							goto l212
						}
						position++
						goto l211
					l212:
						position, tokenIndex = position211, tokenIndex211
						if buffer[position] != rune('E') {
							goto l204
						}
						position++
					}
				l211:
					goto l149
				l204:
					position, tokenIndex = position149, tokenIndex149
					if buffer[position] != rune('.') {
						goto l213
					}
					position++
					{
						position214, tokenIndex214 := position, tokenIndex
						if buffer[position] != rune('q') {
							goto l215
						}
						position++
						goto l214
					l215:
						position, tokenIndex = position214, tokenIndex214
						if buffer[position] != rune('Q') {
							goto l213
						}
						position++
					}
				l214:
					{
						position216, tokenIndex216 := position, tokenIndex
						if buffer[position] != rune('u') {
							goto l217
						}
						position++
						goto l216
					l217:
						position, tokenIndex = position216, tokenIndex216
						if buffer[position] != rune('U') {
							goto l213
						}
						position++
					}
				l216:
					{
						position218, tokenIndex218 := position, tokenIndex
						if buffer[position] != rune('a') {
							goto l219
						}
						position++
						goto l218
					l219:
						position, tokenIndex = position218, tokenIndex218
						if buffer[position] != rune('A') {
							goto l213
						}
						position++
					}
				l218:
					{
						position220, tokenIndex220 := position, tokenIndex
						if buffer[position] != rune('d') {
							goto l221
						}
						position++
						goto l220
					l221:
						position, tokenIndex = position220, tokenIndex220
						if buffer[position] != rune('D') {
							goto l213
						}
						position++
					}
				l220:
					goto l149
				l213:
					position, tokenIndex = position149, tokenIndex149
					if buffer[position] != rune('.') {
						goto l222
					}
					position++
					{
						position223, tokenIndex223 := position, tokenIndex
						if buffer[position] != rune('t') {
							goto l224
						}
						position++
						goto l223
					l224:
						position, tokenIndex = position223, tokenIndex223
						if buffer[position] != rune('T') {
							goto l222
						}
						position++
					}
				l223:
					{
						position225, tokenIndex225 := position, tokenIndex
						if buffer[position] != rune('c') {
							goto l226
						}
						position++
						goto l225
					l226:
						position, tokenIndex = position225, tokenIndex225
						if buffer[position] != rune('C') {
							goto l222
						}
						position++
					}
				l225:
					goto l149
				l222:
					position, tokenIndex = position149, tokenIndex149
					if buffer[position] != rune('.') {
						goto l227
					}
					position++
					{
						position228, tokenIndex228 := position, tokenIndex
						if buffer[position] != rune('l') {
							goto l229
						}
						position++
						goto l228
					l229:
						position, tokenIndex = position228, tokenIndex228
						if buffer[position] != rune('L') {
							goto l227
						}
						position++
					}
				l228:
					{
						position230, tokenIndex230 := position, tokenIndex
						if buffer[position] != rune('o') {
							goto l231
						}
						position++
						goto l230
					l231:
						position, tokenIndex = position230, tokenIndex230
						if buffer[position] != rune('O') {
							goto l227
						}
						position++
					}
				l230:
					{
						position232, tokenIndex232 := position, tokenIndex
						if buffer[position] != rune('c') {
							goto l233
						}
						position++
						goto l232
					l233:
						position, tokenIndex = position232, tokenIndex232
						if buffer[position] != rune('C') {
							goto l227
						}
						position++
					}
				l232:
					{
						position234, tokenIndex234 := position, tokenIndex
						if buffer[position] != rune('a') {
							goto l235
						}
						position++
						goto l234
					l235:
						position, tokenIndex = position234, tokenIndex234
						if buffer[position] != rune('A') {
							goto l227
						}
						position++
					}
				l234:
					{
						position236, tokenIndex236 := position, tokenIndex
						if buffer[position] != rune('l') {
							goto l237
						}
						position++
						goto l236
					l237:
						position, tokenIndex = position236, tokenIndex236
						if buffer[position] != rune('L') {
							goto l227
						}
						position++
					}
				l236:
					{
						position238, tokenIndex238 := position, tokenIndex
						if buffer[position] != rune('e') {
							goto l239
						}
						position++
						goto l238
					l239:
						position, tokenIndex = position238, tokenIndex238
						if buffer[position] != rune('E') {
							goto l227
						}
						position++
					}
				l238:
					{
						position240, tokenIndex240 := position, tokenIndex
						if buffer[position] != rune('n') {
							goto l241
						}
						position++
						goto l240
					l241:
						position, tokenIndex = position240, tokenIndex240
						if buffer[position] != rune('N') {
							goto l227
						}
						position++
					}
				l240:
					{
						position242, tokenIndex242 := position, tokenIndex
						if buffer[position] != rune('t') {
							goto l243
						}
						position++
						goto l242
					l243:
						position, tokenIndex = position242, tokenIndex242
						if buffer[position] != rune('T') {
							goto l227
						}
						position++
					}
				l242:
					{
						position244, tokenIndex244 := position, tokenIndex
						if buffer[position] != rune('r') {
							goto l245
						}
						position++
						goto l244
					l245:
						position, tokenIndex = position244, tokenIndex244
						if buffer[position] != rune('R') {
							goto l227
						}
						position++
					}
				l244:
					{
						position246, tokenIndex246 := position, tokenIndex
						if buffer[position] != rune('y') {
							goto l247
						}
						position++
						goto l246
					l247:
						position, tokenIndex = position246, tokenIndex246
						if buffer[position] != rune('Y') {
							goto l227
						}
						position++
					}
				l246:
					goto l149
				l227:
					position, tokenIndex = position149, tokenIndex149
					if buffer[position] != rune('.') {
						goto l248
					}
					position++
					{
						position249, tokenIndex249 := position, tokenIndex
						if buffer[position] != rune('s') {
							goto l250
						}
						position++
						goto l249
					l250:
						position, tokenIndex = position249, tokenIndex249
						if buffer[position] != rune('S') {
							goto l248
						}
						position++
					}
				l249:
					{
						position251, tokenIndex251 := position, tokenIndex
						if buffer[position] != rune('i') {
							goto l252
						}
						position++
						goto l251
					l252:
						position, tokenIndex = position251, tokenIndex251
						if buffer[position] != rune('I') {
							goto l248
						}
						position++
					}
				l251:
					{
						position253, tokenIndex253 := position, tokenIndex
						if buffer[position] != rune('z') {
							goto l254
						}
						position++
						goto l253
					l254:
						position, tokenIndex = position253, tokenIndex253
						if buffer[position] != rune('Z') {
							goto l248
						}
						position++
					}
				l253:
					{
						position255, tokenIndex255 := position, tokenIndex
						if buffer[position] != rune('e') {
							goto l256
						}
						position++
						goto l255
					l256:
						position, tokenIndex = position255, tokenIndex255
						if buffer[position] != rune('E') {
							goto l248
						}
						position++
					}
				l255:
					goto l149
				l248:
					position, tokenIndex = position149, tokenIndex149
					if buffer[position] != rune('.') {
						goto l257
					}
					position++
					{
						position258, tokenIndex258 := position, tokenIndex
						if buffer[position] != rune('t') {
							goto l259
						}
						position++
						goto l258
					l259:
						position, tokenIndex = position258, tokenIndex258
						if buffer[position] != rune('T') {
							goto l257
						}
						position++
					}
				l258:
					{
						position260, tokenIndex260 := position, tokenIndex
						if buffer[position] != rune('y') {
							goto l261
						}
						position++
						goto l260
					l261:
						position, tokenIndex = position260, tokenIndex260
						if buffer[position] != rune('Y') {
							goto l257
						}
						position++
					}
				l260:
					{
						position262, tokenIndex262 := position, tokenIndex
						if buffer[position] != rune('p') {
							goto l263
						}
						position++
						goto l262
					l263:
						position, tokenIndex = position262, tokenIndex262
						if buffer[position] != rune('P') {
							goto l257
						}
						position++
					}
				l262:
					{
						position264, tokenIndex264 := position, tokenIndex
						if buffer[position] != rune('e') {
							goto l265
						}
						position++
						goto l264
					l265:
						position, tokenIndex = position264, tokenIndex264
						if buffer[position] != rune('E') {
							goto l257
						}
						position++
					}
				l264:
					goto l149
				l257:
					position, tokenIndex = position149, tokenIndex149
					if buffer[position] != rune('.') {
						goto l266
					}
					position++
					{
						position267, tokenIndex267 := position, tokenIndex
						if buffer[position] != rune('u') {
							goto l268
						}
						position++
						goto l267
					l268:
						position, tokenIndex = position267, tokenIndex267
						if buffer[position] != rune('U') {
							goto l266
						}
						position++
					}
				l267:
					{
						position269, tokenIndex269 := position, tokenIndex
						if buffer[position] != rune('l') {
							goto l270
						}
						position++
						goto l269
					l270:
						position, tokenIndex = position269, tokenIndex269
						if buffer[position] != rune('L') {
							goto l266
						}
						position++
					}
				l269:
					{
						position271, tokenIndex271 := position, tokenIndex
						if buffer[position] != rune('e') {
							goto l272
						}
						position++
						goto l271
					l272:
						position, tokenIndex = position271, tokenIndex271
						if buffer[position] != rune('E') {
							goto l266
						}
						position++
					}
				l271:
					{
						position273, tokenIndex273 := position, tokenIndex
						if buffer[position] != rune('b') {
							goto l274
						}
						position++
						goto l273
					l274:
						position, tokenIndex = position273, tokenIndex273
						if buffer[position] != rune('B') {
							goto l266
						}
						position++
					}
				l273:
					if buffer[position] != rune('1') {
						goto l266
					}
					position++
					if buffer[position] != rune('2') {
						goto l266
					}
					position++
					if buffer[position] != rune('8') {
						goto l266
					}
					position++
					goto l149
				l266:
					position, tokenIndex = position149, tokenIndex149
					if buffer[position] != rune('.') {
						goto l147
					}
					position++
					{
						position275, tokenIndex275 := position, tokenIndex
						if buffer[position] != rune('s') {
							goto l276
						}
						position++
						goto l275
					l276:
						position, tokenIndex = position275, tokenIndex275
						if buffer[position] != rune('S') {
							goto l147
						}
						position++
					}
				l275:
					{
						position277, tokenIndex277 := position, tokenIndex
						if buffer[position] != rune('l') {
							goto l278
						}
						position++
						goto l277
					l278:
						position, tokenIndex = position277, tokenIndex277
						if buffer[position] != rune('L') {
							goto l147
						}
						position++
					}
				l277:
					{
						position279, tokenIndex279 := position, tokenIndex
						if buffer[position] != rune('e') {
							goto l280
						}
						position++
						goto l279
					l280:
						position, tokenIndex = position279, tokenIndex279
						if buffer[position] != rune('E') {
							goto l147
						}
						position++
					}
				l279:
					{
						position281, tokenIndex281 := position, tokenIndex
						if buffer[position] != rune('b') {
							goto l282
						}
						position++
						goto l281
					l282:
						position, tokenIndex = position281, tokenIndex281
						if buffer[position] != rune('B') {
							goto l147
						}
						position++
					}
				l281:
					if buffer[position] != rune('1') {
						goto l147
					}
					position++
					if buffer[position] != rune('2') {
						goto l147
					}
					position++
					if buffer[position] != rune('8') {
						goto l147
					}
					position++
				}
			l149:
				add(ruleLabelContainingDirectiveName, position148)
			}
			return true
		l147:
			position, tokenIndex = position147, tokenIndex147
			return false
		},
		/* 14 SymbolArgs <- <(SymbolArg (WS? ',' WS? SymbolArg)*)> */
		func() bool {
			position283, tokenIndex283 := position, tokenIndex
			{
				position284 := position
				if !_rules[ruleSymbolArg]() {
					goto l283
				}
			l285:
				{
					position286, tokenIndex286 := position, tokenIndex
					{
						position287, tokenIndex287 := position, tokenIndex
						if !_rules[ruleWS]() {
							goto l287
						}
						goto l288
					l287:
						position, tokenIndex = position287, tokenIndex287
					}
				l288:
					if buffer[position] != rune(',') {
						goto l286
					}
					position++
					{
						position289, tokenIndex289 := position, tokenIndex
						if !_rules[ruleWS]() {
							goto l289
						}
						goto l290
					l289:
						position, tokenIndex = position289, tokenIndex289
					}
				l290:
					if !_rules[ruleSymbolArg]() {
						goto l286
					}
					goto l285
				l286:
					position, tokenIndex = position286, tokenIndex286
				}
				add(ruleSymbolArgs, position284)
			}
			return true
		l283:
			position, tokenIndex = position283, tokenIndex283
			return false
		},
		/* 15 SymbolArg <- <SymbolExpr> */
		func() bool {
			position291, tokenIndex291 := position, tokenIndex
			{
				position292 := position
				if !_rules[ruleSymbolExpr]() {
					goto l291
				}
				add(ruleSymbolArg, position292)
			}
			return true
		l291:
			position, tokenIndex = position291, tokenIndex291
			return false
		},
		/* 16 SymbolExpr <- <(SymbolAtom (WS? SymbolOperator WS? SymbolExpr)?)> */
		func() bool {
			position293, tokenIndex293 := position, tokenIndex
			{
				position294 := position
				if !_rules[ruleSymbolAtom]() {
					goto l293
				}
				{
					position295, tokenIndex295 := position, tokenIndex
					{
						position297, tokenIndex297 := position, tokenIndex
						if !_rules[ruleWS]() {
							goto l297
						}
						goto l298
					l297:
						position, tokenIndex = position297, tokenIndex297
					}
				l298:
					if !_rules[ruleSymbolOperator]() {
						goto l295
					}
					{
						position299, tokenIndex299 := position, tokenIndex
						if !_rules[ruleWS]() {
							goto l299
						}
						goto l300
					l299:
						position, tokenIndex = position299, tokenIndex299
					}
				l300:
					if !_rules[ruleSymbolExpr]() {
						goto l295
					}
					goto l296
				l295:
					position, tokenIndex = position295, tokenIndex295
				}
			l296:
				add(ruleSymbolExpr, position294)
			}
			return true
		l293:
			position, tokenIndex = position293, tokenIndex293
			return false
		},
		/* 17 SymbolAtom <- <(Offset / SymbolType / (LocalSymbol TCMarker?) / (SymbolName Offset) / (SymbolName TCMarker?) / Dot / (OpenParen WS? SymbolExpr WS? CloseParen))> */
		func() bool {
			position301, tokenIndex301 := position, tokenIndex
			{
				position302 := position
				{
					position303, tokenIndex303 := position, tokenIndex
					if !_rules[ruleOffset]() {
						goto l304
					}
					goto l303
				l304:
					position, tokenIndex = position303, tokenIndex303
					if !_rules[ruleSymbolType]() {
						goto l305
					}
					goto l303
				l305:
					position, tokenIndex = position303, tokenIndex303
					if !_rules[ruleLocalSymbol]() {
						goto l306
					}
					{
						position307, tokenIndex307 := position, tokenIndex
						if !_rules[ruleTCMarker]() {
							goto l307
						}
						goto l308
					l307:
						position, tokenIndex = position307, tokenIndex307
					}
				l308:
					goto l303
				l306:
					position, tokenIndex = position303, tokenIndex303
					if !_rules[ruleSymbolName]() {
						goto l309
					}
					if !_rules[ruleOffset]() {
						goto l309
					}
					goto l303
				l309:
					position, tokenIndex = position303, tokenIndex303
					if !_rules[ruleSymbolName]() {
						goto l310
					}
					{
						position311, tokenIndex311 := position, tokenIndex
						if !_rules[ruleTCMarker]() {
							goto l311
						}
						goto l312
					l311:
						position, tokenIndex = position311, tokenIndex311
					}
				l312:
					goto l303
				l310:
					position, tokenIndex = position303, tokenIndex303
					if !_rules[ruleDot]() {
						goto l313
					}
					goto l303
				l313:
					position, tokenIndex = position303, tokenIndex303
					if !_rules[ruleOpenParen]() {
						goto l301
					}
					{
						position314, tokenIndex314 := position, tokenIndex
						if !_rules[ruleWS]() {
							goto l314
						}
						goto l315
					l314:
						position, tokenIndex = position314, tokenIndex314
					}
				l315:
					if !_rules[ruleSymbolExpr]() {
						goto l301
					}
					{
						position316, tokenIndex316 := position, tokenIndex
						if !_rules[ruleWS]() {
							goto l316
						}
						goto l317
					l316:
						position, tokenIndex = position316, tokenIndex316
					}
				l317:
					if !_rules[ruleCloseParen]() {
						goto l301
					}
				}
			l303:
				add(ruleSymbolAtom, position302)
			}
			return true
		l301:
			position, tokenIndex = position301, tokenIndex301
			return false
		},
		/* 18 SymbolOperator <- <('+' / '-' / '|' / ('<' '<') / ('>' '>'))> */
		func() bool {
			position318, tokenIndex318 := position, tokenIndex
			{
				position319 := position
				{
					position320, tokenIndex320 := position, tokenIndex
					if buffer[position] != rune('+') {
						goto l321
					}
					position++
					goto l320
				l321:
					position, tokenIndex = position320, tokenIndex320
					if buffer[position] != rune('-') {
						goto l322
					}
					position++
					goto l320
				l322:
					position, tokenIndex = position320, tokenIndex320
					if buffer[position] != rune('|') {
						goto l323
					}
					position++
					goto l320
				l323:
					position, tokenIndex = position320, tokenIndex320
					if buffer[position] != rune('<') {
						goto l324
					}
					position++
					if buffer[position] != rune('<') {
						goto l324
					}
					position++
					goto l320
				l324:
					position, tokenIndex = position320, tokenIndex320
					if buffer[position] != rune('>') {
						goto l318
					}
					position++
					if buffer[position] != rune('>') {
						goto l318
					}
					position++
				}
			l320:
				add(ruleSymbolOperator, position319)
			}
			return true
		l318:
			position, tokenIndex = position318, tokenIndex318
			return false
		},
		/* 19 OpenParen <- <'('> */
		func() bool {
			position325, tokenIndex325 := position, tokenIndex
			{
				position326 := position
				if buffer[position] != rune('(') {
					goto l325
				}
				position++
				add(ruleOpenParen, position326)
			}
			return true
		l325:
			position, tokenIndex = position325, tokenIndex325
			return false
		},
		/* 20 CloseParen <- <')'> */
		func() bool {
			position327, tokenIndex327 := position, tokenIndex
			{
				position328 := position
				if buffer[position] != rune(')') {
					goto l327
				}
				position++
				add(ruleCloseParen, position328)
			}
			return true
		l327:
			position, tokenIndex = position327, tokenIndex327
			return false
		},
		/* 21 SymbolType <- <(('@' / '%') (('f' 'u' 'n' 'c' 't' 'i' 'o' 'n') / ('o' 'b' 'j' 'e' 'c' 't')))> */
		func() bool {
			position329, tokenIndex329 := position, tokenIndex
			{
				position330 := position
				{
					position331, tokenIndex331 := position, tokenIndex
					if buffer[position] != rune('@') {
						goto l332
					}
					position++
					goto l331
				l332:
					position, tokenIndex = position331, tokenIndex331
					if buffer[position] != rune('%') {
						goto l329
					}
					position++
				}
			l331:
				{
					position333, tokenIndex333 := position, tokenIndex
					if buffer[position] != rune('f') {
						goto l334
					}
					position++
					if buffer[position] != rune('u') {
						goto l334
					}
					position++
					if buffer[position] != rune('n') {
						goto l334
					}
					position++
					if buffer[position] != rune('c') {
						goto l334
					}
					position++
					if buffer[position] != rune('t') {
						goto l334
					}
					position++
					if buffer[position] != rune('i') {
						goto l334
					}
					position++
					if buffer[position] != rune('o') {
						goto l334
					}
					position++
					if buffer[position] != rune('n') {
						goto l334
					}
					position++
					goto l333
				l334:
					position, tokenIndex = position333, tokenIndex333
					if buffer[position] != rune('o') {
						goto l329
					}
					position++
					if buffer[position] != rune('b') {
						goto l329
					}
					position++
					if buffer[position] != rune('j') {
						goto l329
					}
					position++
					if buffer[position] != rune('e') {
						goto l329
					}
					position++
					if buffer[position] != rune('c') {
						goto l329
					}
					position++
					if buffer[position] != rune('t') {
						goto l329
					}
					position++
				}
			l333:
				add(ruleSymbolType, position330)
			}
			return true
		l329:
			position, tokenIndex = position329, tokenIndex329
			return false
		},
		/* 22 Dot <- <'.'> */
		func() bool {
			position335, tokenIndex335 := position, tokenIndex
			{
				position336 := position
				if buffer[position] != rune('.') {
					goto l335
				}
				position++
				add(ruleDot, position336)
			}
			return true
		l335:
			position, tokenIndex = position335, tokenIndex335
			return false
		},
		/* 23 TCMarker <- <('[' 'T' 'C' ']')> */
		func() bool {
			position337, tokenIndex337 := position, tokenIndex
			{
				position338 := position
				if buffer[position] != rune('[') {
					goto l337
				}
				position++
				if buffer[position] != rune('T') {
					goto l337
				}
				position++
				if buffer[position] != rune('C') {
					goto l337
				}
				position++
				if buffer[position] != rune(']') {
					goto l337
				}
				position++
				add(ruleTCMarker, position338)
			}
			return true
		l337:
			position, tokenIndex = position337, tokenIndex337
			return false
		},
		/* 24 EscapedChar <- <('\\' .)> */
		func() bool {
			position339, tokenIndex339 := position, tokenIndex
			{
				position340 := position
				if buffer[position] != rune('\\') {
					goto l339
				}
				position++
				if !matchDot() {
					goto l339
				}
				add(ruleEscapedChar, position340)
			}
			return true
		l339:
			position, tokenIndex = position339, tokenIndex339
			return false
		},
		/* 25 WS <- <(' ' / '\t')+> */
		func() bool {
			position341, tokenIndex341 := position, tokenIndex
			{
				position342 := position
				{
					position345, tokenIndex345 := position, tokenIndex
					if buffer[position] != rune(' ') {
						goto l346
					}
					position++
					goto l345
				l346:
					position, tokenIndex = position345, tokenIndex345
					if buffer[position] != rune('\t') {
						goto l341
					}
					position++
				}
			l345:
			l343:
				{
					position344, tokenIndex344 := position, tokenIndex
					{
						position347, tokenIndex347 := position, tokenIndex
						if buffer[position] != rune(' ') {
							goto l348
						}
						position++
						goto l347
					l348:
						position, tokenIndex = position347, tokenIndex347
						if buffer[position] != rune('\t') {
							goto l344
						}
						position++
					}
				l347:
					goto l343
				l344:
					position, tokenIndex = position344, tokenIndex344
				}
				add(ruleWS, position342)
			}
			return true
		l341:
			position, tokenIndex = position341, tokenIndex341
			return false
		},
		/* 26 Comment <- <((('/' '/') / '#') (!'\n' .)*)> */
		func() bool {
			position349, tokenIndex349 := position, tokenIndex
			{
				position350 := position
				{
					position351, tokenIndex351 := position, tokenIndex
					if buffer[position] != rune('/') {
						goto l352
					}
					position++
					if buffer[position] != rune('/') {
						goto l352
					}
					position++
					goto l351
				l352:
					position, tokenIndex = position351, tokenIndex351
					if buffer[position] != rune('#') {
						goto l349
					}
					position++
				}
			l351:
			l353:
				{
					position354, tokenIndex354 := position, tokenIndex
					{
						position355, tokenIndex355 := position, tokenIndex
						if buffer[position] != rune('\n') {
							goto l355
						}
						position++
						goto l354
					l355:
						position, tokenIndex = position355, tokenIndex355
					}
					if !matchDot() {
						goto l354
					}
					goto l353
				l354:
					position, tokenIndex = position354, tokenIndex354
				}
				add(ruleComment, position350)
			}
			return true
		l349:
			position, tokenIndex = position349, tokenIndex349
			return false
		},
		/* 27 Label <- <((LocalSymbol / LocalLabel / SymbolName) ':')> */
		func() bool {
			position356, tokenIndex356 := position, tokenIndex
			{
				position357 := position
				{
					position358, tokenIndex358 := position, tokenIndex
					if !_rules[ruleLocalSymbol]() {
						goto l359
					}
					goto l358
				l359:
					position, tokenIndex = position358, tokenIndex358
					if !_rules[ruleLocalLabel]() {
						goto l360
					}
					goto l358
				l360:
					position, tokenIndex = position358, tokenIndex358
					if !_rules[ruleSymbolName]() {
						goto l356
					}
				}
			l358:
				if buffer[position] != rune(':') {
					goto l356
				}
				position++
				add(ruleLabel, position357)
			}
			return true
		l356:
			position, tokenIndex = position356, tokenIndex356
			return false
		},
		/* 28 SymbolName <- <(([a-z] / [A-Z] / '.' / '_') ([a-z] / [A-Z] / '.' / ([0-9] / [0-9]) / '$' / '_')*)> */
		func() bool {
			position361, tokenIndex361 := position, tokenIndex
			{
				position362 := position
				{
					position363, tokenIndex363 := position, tokenIndex
					if c := buffer[position]; c < rune('a') || c > rune('z') {
						goto l364
					}
					position++
					goto l363
				l364:
					position, tokenIndex = position363, tokenIndex363
					if c := buffer[position]; c < rune('A') || c > rune('Z') {
						goto l365
					}
					position++
					goto l363
				l365:
					position, tokenIndex = position363, tokenIndex363
					if buffer[position] != rune('.') {
						goto l366
					}
					position++
					goto l363
				l366:
					position, tokenIndex = position363, tokenIndex363
					if buffer[position] != rune('_') {
						goto l361
					}
					position++
				}
			l363:
			l367:
				{
					position368, tokenIndex368 := position, tokenIndex
					{
						position369, tokenIndex369 := position, tokenIndex
						if c := buffer[position]; c < rune('a') || c > rune('z') {
							goto l370
						}
						position++
						goto l369
					l370:
						position, tokenIndex = position369, tokenIndex369
						if c := buffer[position]; c < rune('A') || c > rune('Z') {
							goto l371
						}
						position++
						goto l369
					l371:
						position, tokenIndex = position369, tokenIndex369
						if buffer[position] != rune('.') {
							goto l372
						}
						position++
						goto l369
					l372:
						position, tokenIndex = position369, tokenIndex369
						{
							position374, tokenIndex374 := position, tokenIndex
							if c := buffer[position]; c < rune('0') || c > rune('9') {
								goto l375
							}
							position++
							goto l374
						l375:
							position, tokenIndex = position374, tokenIndex374
							if c := buffer[position]; c < rune('0') || c > rune('9') {
								goto l373
							}
							position++
						}
					l374:
						goto l369
					l373:
						position, tokenIndex = position369, tokenIndex369
						if buffer[position] != rune('$') {
							goto l376
						}
						position++
						goto l369
					l376:
						position, tokenIndex = position369, tokenIndex369
						if buffer[position] != rune('_') {
							goto l368
						}
						position++
					}
				l369:
					goto l367
				l368:
					position, tokenIndex = position368, tokenIndex368
				}
				add(ruleSymbolName, position362)
			}
			return true
		l361:
			position, tokenIndex = position361, tokenIndex361
			return false
		},
		/* 29 LocalSymbol <- <('.' 'L' ([a-z] / [A-Z] / ([a-z] / [A-Z]) / '.' / ([0-9] / [0-9]) / '$' / '_')+)> */
		func() bool {
			position377, tokenIndex377 := position, tokenIndex
			{
				position378 := position
				if buffer[position] != rune('.') {
					goto l377
				}
				position++
				if buffer[position] != rune('L') {
					goto l377
				}
				position++
				{
					position381, tokenIndex381 := position, tokenIndex
					if c := buffer[position]; c < rune('a') || c > rune('z') {
						goto l382
					}
					position++
					goto l381
				l382:
					position, tokenIndex = position381, tokenIndex381
					if c := buffer[position]; c < rune('A') || c > rune('Z') {
						goto l383
					}
					position++
					goto l381
				l383:
					position, tokenIndex = position381, tokenIndex381
					{
						position385, tokenIndex385 := position, tokenIndex
						if c := buffer[position]; c < rune('a') || c > rune('z') {
							goto l386
						}
						position++
						goto l385
					l386:
						position, tokenIndex = position385, tokenIndex385
						if c := buffer[position]; c < rune('A') || c > rune('Z') {
							goto l384
						}
						position++
					}
				l385:
					goto l381
				l384:
					position, tokenIndex = position381, tokenIndex381
					if buffer[position] != rune('.') {
						goto l387
					}
					position++
					goto l381
				l387:
					position, tokenIndex = position381, tokenIndex381
					{
						position389, tokenIndex389 := position, tokenIndex
						if c := buffer[position]; c < rune('0') || c > rune('9') {
							goto l390
						}
						position++
						goto l389
					l390:
						position, tokenIndex = position389, tokenIndex389
						if c := buffer[position]; c < rune('0') || c > rune('9') {
							goto l388
						}
						position++
					}
				l389:
					goto l381
				l388:
					position, tokenIndex = position381, tokenIndex381
					if buffer[position] != rune('$') {
						goto l391
					}
					position++
					goto l381
				l391:
					position, tokenIndex = position381, tokenIndex381
					if buffer[position] != rune('_') {
						goto l377
					}
					position++
				}
			l381:
			l379:
				{
					position380, tokenIndex380 := position, tokenIndex
					{
						position392, tokenIndex392 := position, tokenIndex
						if c := buffer[position]; c < rune('a') || c > rune('z') {
							goto l393
						}
						position++
						goto l392
					l393:
						position, tokenIndex = position392, tokenIndex392
						if c := buffer[position]; c < rune('A') || c > rune('Z') {
							goto l394
						}
						position++
						goto l392
					l394:
						position, tokenIndex = position392, tokenIndex392
						{
							position396, tokenIndex396 := position, tokenIndex
							if c := buffer[position]; c < rune('a') || c > rune('z') {
								goto l397
							}
							position++
							goto l396
						l397:
							position, tokenIndex = position396, tokenIndex396
							if c := buffer[position]; c < rune('A') || c > rune('Z') {
								goto l395
							}
							position++
						}
					l396:
						goto l392
					l395:
						position, tokenIndex = position392, tokenIndex392
						if buffer[position] != rune('.') {
							goto l398
						}
						position++
						goto l392
					l398:
						position, tokenIndex = position392, tokenIndex392
						{
							position400, tokenIndex400 := position, tokenIndex
							if c := buffer[position]; c < rune('0') || c > rune('9') {
								goto l401
							}
							position++
							goto l400
						l401:
							position, tokenIndex = position400, tokenIndex400
							if c := buffer[position]; c < rune('0') || c > rune('9') {
								goto l399
							}
							position++
						}
					l400:
						goto l392
					l399:
						position, tokenIndex = position392, tokenIndex392
						if buffer[position] != rune('$') {
							goto l402
						}
						position++
						goto l392
					l402:
						position, tokenIndex = position392, tokenIndex392
						if buffer[position] != rune('_') {
							goto l380
						}
						position++
					}
				l392:
					goto l379
				l380:
					position, tokenIndex = position380, tokenIndex380
				}
				add(ruleLocalSymbol, position378)
			}
			return true
		l377:
			position, tokenIndex = position377, tokenIndex377
			return false
		},
		/* 30 LocalLabel <- <([0-9] ([0-9] / '$')*)> */
		func() bool {
			position403, tokenIndex403 := position, tokenIndex
			{
				position404 := position
				if c := buffer[position]; c < rune('0') || c > rune('9') {
					goto l403
				}
				position++
			l405:
				{
					position406, tokenIndex406 := position, tokenIndex
					{
						position407, tokenIndex407 := position, tokenIndex
						if c := buffer[position]; c < rune('0') || c > rune('9') {
							goto l408
						}
						position++
						goto l407
					l408:
						position, tokenIndex = position407, tokenIndex407
						if buffer[position] != rune('$') {
							goto l406
						}
						position++
					}
				l407:
					goto l405
				l406:
					position, tokenIndex = position406, tokenIndex406
				}
				add(ruleLocalLabel, position404)
			}
			return true
		l403:
			position, tokenIndex = position403, tokenIndex403
			return false
		},
		/* 31 LocalLabelRef <- <([0-9] ([0-9] / '$')* ('b' / 'f'))> */
		func() bool {
			position409, tokenIndex409 := position, tokenIndex
			{
				position410 := position
				if c := buffer[position]; c < rune('0') || c > rune('9') {
					goto l409
				}
				position++
			l411:
				{
					position412, tokenIndex412 := position, tokenIndex
					{
						position413, tokenIndex413 := position, tokenIndex
						if c := buffer[position]; c < rune('0') || c > rune('9') {
							goto l414
						}
						position++
						goto l413
					l414:
						position, tokenIndex = position413, tokenIndex413
						if buffer[position] != rune('$') {
							goto l412
						}
						position++
					}
				l413:
					goto l411
				l412:
					position, tokenIndex = position412, tokenIndex412
				}
				{
					position415, tokenIndex415 := position, tokenIndex
					if buffer[position] != rune('b') {
						goto l416
					}
					position++
					goto l415
				l416:
					position, tokenIndex = position415, tokenIndex415
					if buffer[position] != rune('f') {
						goto l409
					}
					position++
				}
			l415:
				add(ruleLocalLabelRef, position410)
			}
			return true
		l409:
			position, tokenIndex = position409, tokenIndex409
			return false
		},
		/* 32 Instruction <- <(InstructionName (WS InstructionArg (WS? ',' WS? InstructionArg)*)?)> */
		func() bool {
			position417, tokenIndex417 := position, tokenIndex
			{
				position418 := position
				if !_rules[ruleInstructionName]() {
					goto l417
				}
				{
					position419, tokenIndex419 := position, tokenIndex
					if !_rules[ruleWS]() {
						goto l419
					}
					if !_rules[ruleInstructionArg]() {
						goto l419
					}
				l421:
					{
						position422, tokenIndex422 := position, tokenIndex
						{
							position423, tokenIndex423 := position, tokenIndex
							if !_rules[ruleWS]() {
								goto l423
							}
							goto l424
						l423:
							position, tokenIndex = position423, tokenIndex423
						}
					l424:
						if buffer[position] != rune(',') {
							goto l422
						}
						position++
						{
							position425, tokenIndex425 := position, tokenIndex
							if !_rules[ruleWS]() {
								goto l425
							}
							goto l426
						l425:
							position, tokenIndex = position425, tokenIndex425
						}
					l426:
						if !_rules[ruleInstructionArg]() {
							goto l422
						}
						goto l421
					l422:
						position, tokenIndex = position422, tokenIndex422
					}
					goto l420
				l419:
					position, tokenIndex = position419, tokenIndex419
				}
			l420:
				add(ruleInstruction, position418)
			}
			return true
		l417:
			position, tokenIndex = position417, tokenIndex417
			return false
		},
		/* 33 InstructionName <- <(([a-z] / [A-Z]) ([a-z] / [A-Z] / '.' / ([0-9] / [0-9]))* ('.' / '+' / '-')?)> */
		func() bool {
			position427, tokenIndex427 := position, tokenIndex
			{
				position428 := position
				{
					position429, tokenIndex429 := position, tokenIndex
					if c := buffer[position]; c < rune('a') || c > rune('z') {
						goto l430
					}
					position++
					goto l429
				l430:
					position, tokenIndex = position429, tokenIndex429
					if c := buffer[position]; c < rune('A') || c > rune('Z') {
						goto l427
					}
					position++
				}
			l429:
			l431:
				{
					position432, tokenIndex432 := position, tokenIndex
					{
						position433, tokenIndex433 := position, tokenIndex
						if c := buffer[position]; c < rune('a') || c > rune('z') {
							goto l434
						}
						position++
						goto l433
					l434:
						position, tokenIndex = position433, tokenIndex433
						if c := buffer[position]; c < rune('A') || c > rune('Z') {
							goto l435
						}
						position++
						goto l433
					l435:
						position, tokenIndex = position433, tokenIndex433
						if buffer[position] != rune('.') {
							goto l436
						}
						position++
						goto l433
					l436:
						position, tokenIndex = position433, tokenIndex433
						{
							position437, tokenIndex437 := position, tokenIndex
							if c := buffer[position]; c < rune('0') || c > rune('9') {
								goto l438
							}
							position++
							goto l437
						l438:
							position, tokenIndex = position437, tokenIndex437
							if c := buffer[position]; c < rune('0') || c > rune('9') {
								goto l432
							}
							position++
						}
					l437:
					}
				l433:
					goto l431
				l432:
					position, tokenIndex = position432, tokenIndex432
				}
				{
					position439, tokenIndex439 := position, tokenIndex
					{
						position441, tokenIndex441 := position, tokenIndex
						if buffer[position] != rune('.') {
							goto l442
						}
						position++
						goto l441
					l442:
						position, tokenIndex = position441, tokenIndex441
						if buffer[position] != rune('+') {
							goto l443
						}
						position++
						goto l441
					l443:
						position, tokenIndex = position441, tokenIndex441
						if buffer[position] != rune('-') {
							goto l439
						}
						position++
					}
				l441:
					goto l440
				l439:
					position, tokenIndex = position439, tokenIndex439
				}
			l440:
				add(ruleInstructionName, position428)
			}
			return true
		l427:
			position, tokenIndex = position427, tokenIndex427
			return false
		},
		/* 34 InstructionArg <- <(IndirectionIndicator? (ARMConstantTweak / RegisterOrConstant / LocalLabelRef / TOCRefHigh / TOCRefLow / GOTLocation / GOTSymbolOffset / MemoryRef) AVX512Token*)> */
		func() bool {
			position444, tokenIndex444 := position, tokenIndex
			{
				position445 := position
				{
					position446, tokenIndex446 := position, tokenIndex
					if !_rules[ruleIndirectionIndicator]() {
						goto l446
					}
					goto l447
				l446:
					position, tokenIndex = position446, tokenIndex446
				}
			l447:
				{
					position448, tokenIndex448 := position, tokenIndex
					if !_rules[ruleARMConstantTweak]() {
						goto l449
					}
					goto l448
				l449:
					position, tokenIndex = position448, tokenIndex448
					if !_rules[ruleRegisterOrConstant]() {
						goto l450
					}
					goto l448
				l450:
					position, tokenIndex = position448, tokenIndex448
					if !_rules[ruleLocalLabelRef]() {
						goto l451
					}
					goto l448
				l451:
					position, tokenIndex = position448, tokenIndex448
					if !_rules[ruleTOCRefHigh]() {
						goto l452
					}
					goto l448
				l452:
					position, tokenIndex = position448, tokenIndex448
					if !_rules[ruleTOCRefLow]() {
						goto l453
					}
					goto l448
				l453:
					position, tokenIndex = position448, tokenIndex448
					if !_rules[ruleGOTLocation]() {
						goto l454
					}
					goto l448
				l454:
					position, tokenIndex = position448, tokenIndex448
					if !_rules[ruleGOTSymbolOffset]() {
						goto l455
					}
					goto l448
				l455:
					position, tokenIndex = position448, tokenIndex448
					if !_rules[ruleMemoryRef]() {
						goto l444
					}
				}
			l448:
			l456:
				{
					position457, tokenIndex457 := position, tokenIndex
					if !_rules[ruleAVX512Token]() {
						goto l457
					}
					goto l456
				l457:
					position, tokenIndex = position457, tokenIndex457
				}
				add(ruleInstructionArg, position445)
			}
			return true
		l444:
			position, tokenIndex = position444, tokenIndex444
			return false
		},
		/* 35 GOTLocation <- <('$' '_' 'G' 'L' 'O' 'B' 'A' 'L' '_' 'O' 'F' 'F' 'S' 'E' 'T' '_' 'T' 'A' 'B' 'L' 'E' '_' '-' LocalSymbol)> */
		func() bool {
			position458, tokenIndex458 := position, tokenIndex
			{
				position459 := position
				if buffer[position] != rune('$') {
					goto l458
				}
				position++
				if buffer[position] != rune('_') {
					goto l458
				}
				position++
				if buffer[position] != rune('G') {
					goto l458
				}
				position++
				if buffer[position] != rune('L') {
					goto l458
				}
				position++
				if buffer[position] != rune('O') {
					goto l458
				}
				position++
				if buffer[position] != rune('B') {
					goto l458
				}
				position++
				if buffer[position] != rune('A') {
					goto l458
				}
				position++
				if buffer[position] != rune('L') {
					goto l458
				}
				position++
				if buffer[position] != rune('_') {
					goto l458
				}
				position++
				if buffer[position] != rune('O') {
					goto l458
				}
				position++
				if buffer[position] != rune('F') {
					goto l458
				}
				position++
				if buffer[position] != rune('F') {
					goto l458
				}
				position++
				if buffer[position] != rune('S') {
					goto l458
				}
				position++
				if buffer[position] != rune('E') {
					goto l458
				}
				position++
				if buffer[position] != rune('T') {
					goto l458
				}
				position++
				if buffer[position] != rune('_') {
					goto l458
				}
				position++
				if buffer[position] != rune('T') {
					goto l458
				}
				position++
				if buffer[position] != rune('A') {
					goto l458
				}
				position++
				if buffer[position] != rune('B') {
					goto l458
				}
				position++
				if buffer[position] != rune('L') {
					goto l458
				}
				position++
				if buffer[position] != rune('E') {
					goto l458
				}
				position++
				if buffer[position] != rune('_') {
					goto l458
				}
				position++
				if buffer[position] != rune('-') {
					goto l458
				}
				position++
				if !_rules[ruleLocalSymbol]() {
					goto l458
				}
				add(ruleGOTLocation, position459)
			}
			return true
		l458:
			position, tokenIndex = position458, tokenIndex458
			return false
		},
		/* 36 GOTSymbolOffset <- <(('$' SymbolName ('@' 'G' 'O' 'T') ('O' 'F' 'F')?) / (':' ('g' / 'G') ('o' / 'O') ('t' / 'T') ':' SymbolName))> */
		func() bool {
			position460, tokenIndex460 := position, tokenIndex
			{
				position461 := position
				{
					position462, tokenIndex462 := position, tokenIndex
					if buffer[position] != rune('$') {
						goto l463
					}
					position++
					if !_rules[ruleSymbolName]() {
						goto l463
					}
					if buffer[position] != rune('@') {
						goto l463
					}
					position++
					if buffer[position] != rune('G') {
						goto l463
					}
					position++
					if buffer[position] != rune('O') {
						goto l463
					}
					position++
					if buffer[position] != rune('T') {
						goto l463
					}
					position++
					{
						position464, tokenIndex464 := position, tokenIndex
						if buffer[position] != rune('O') {
							goto l464
						}
						position++
						if buffer[position] != rune('F') {
							goto l464
						}
						position++
						if buffer[position] != rune('F') {
							goto l464
						}
						position++
						goto l465
					l464:
						position, tokenIndex = position464, tokenIndex464
					}
				l465:
					goto l462
				l463:
					position, tokenIndex = position462, tokenIndex462
					if buffer[position] != rune(':') {
						goto l460
					}
					position++
					{
						position466, tokenIndex466 := position, tokenIndex
						if buffer[position] != rune('g') {
							goto l467
						}
						position++
						goto l466
					l467:
						position, tokenIndex = position466, tokenIndex466
						if buffer[position] != rune('G') {
							goto l460
						}
						position++
					}
				l466:
					{
						position468, tokenIndex468 := position, tokenIndex
						if buffer[position] != rune('o') {
							goto l469
						}
						position++
						goto l468
					l469:
						position, tokenIndex = position468, tokenIndex468
						if buffer[position] != rune('O') {
							goto l460
						}
						position++
					}
				l468:
					{
						position470, tokenIndex470 := position, tokenIndex
						if buffer[position] != rune('t') {
							goto l471
						}
						position++
						goto l470
					l471:
						position, tokenIndex = position470, tokenIndex470
						if buffer[position] != rune('T') {
							goto l460
						}
						position++
					}
				l470:
					if buffer[position] != rune(':') {
						goto l460
					}
					position++
					if !_rules[ruleSymbolName]() {
						goto l460
					}
				}
			l462:
				add(ruleGOTSymbolOffset, position461)
			}
			return true
		l460:
			position, tokenIndex = position460, tokenIndex460
			return false
		},
		/* 37 AVX512Token <- <(WS? '{' '%'? ([0-9] / [a-z])* '}')> */
		func() bool {
			position472, tokenIndex472 := position, tokenIndex
			{
				position473 := position
				{
					position474, tokenIndex474 := position, tokenIndex
					if !_rules[ruleWS]() {
						goto l474
					}
					goto l475
				l474:
					position, tokenIndex = position474, tokenIndex474
				}
			l475:
				if buffer[position] != rune('{') {
					goto l472
				}
				position++
				{
					position476, tokenIndex476 := position, tokenIndex
					if buffer[position] != rune('%') {
						goto l476
					}
					position++
					goto l477
				l476:
					position, tokenIndex = position476, tokenIndex476
				}
			l477:
			l478:
				{
					position479, tokenIndex479 := position, tokenIndex
					{
						position480, tokenIndex480 := position, tokenIndex
						if c := buffer[position]; c < rune('0') || c > rune('9') {
							goto l481
						}
						position++
						goto l480
					l481:
						position, tokenIndex = position480, tokenIndex480
						if c := buffer[position]; c < rune('a') || c > rune('z') {
							goto l479
						}
						position++
					}
				l480:
					goto l478
				l479:
					position, tokenIndex = position479, tokenIndex479
				}
				if buffer[position] != rune('}') {
					goto l472
				}
				position++
				add(ruleAVX512Token, position473)
			}
			return true
		l472:
			position, tokenIndex = position472, tokenIndex472
			return false
		},
		/* 38 TOCRefHigh <- <('.' 'T' 'O' 'C' '.' '-' (('0' 'b') / ('.' 'L' ([a-z] / [A-Z] / '_' / [0-9])+)) ('@' ('h' / 'H') ('a' / 'A')))> */
		func() bool {
			position482, tokenIndex482 := position, tokenIndex
			{
				position483 := position
				if buffer[position] != rune('.') {
					goto l482
				}
				position++
				if buffer[position] != rune('T') {
					goto l482
				}
				position++
				if buffer[position] != rune('O') {
					goto l482
				}
				position++
				if buffer[position] != rune('C') {
					goto l482
				}
				position++
				if buffer[position] != rune('.') {
					goto l482
				}
				position++
				if buffer[position] != rune('-') {
					goto l482
				}
				position++
				{
					position484, tokenIndex484 := position, tokenIndex
					if buffer[position] != rune('0') {
						goto l485
					}
					position++
					if buffer[position] != rune('b') {
						goto l485
					}
					position++
					goto l484
				l485:
					position, tokenIndex = position484, tokenIndex484
					if buffer[position] != rune('.') {
						goto l482
					}
					position++
					if buffer[position] != rune('L') {
						goto l482
					}
					position++
					{
						position488, tokenIndex488 := position, tokenIndex
						if c := buffer[position]; c < rune('a') || c > rune('z') {
							goto l489
						}
						position++
						goto l488
					l489:
						position, tokenIndex = position488, tokenIndex488
						if c := buffer[position]; c < rune('A') || c > rune('Z') {
							goto l490
						}
						position++
						goto l488
					l490:
						position, tokenIndex = position488, tokenIndex488
						if buffer[position] != rune('_') {
							goto l491
						}
						position++
						goto l488
					l491:
						position, tokenIndex = position488, tokenIndex488
						if c := buffer[position]; c < rune('0') || c > rune('9') {
							goto l482
						}
						position++
					}
				l488:
				l486:
					{
						position487, tokenIndex487 := position, tokenIndex
						{
							position492, tokenIndex492 := position, tokenIndex
							if c := buffer[position]; c < rune('a') || c > rune('z') {
								goto l493
							}
							position++
							goto l492
						l493:
							position, tokenIndex = position492, tokenIndex492
							if c := buffer[position]; c < rune('A') || c > rune('Z') {
								goto l494
							}
							position++
							goto l492
						l494:
							position, tokenIndex = position492, tokenIndex492
							if buffer[position] != rune('_') {
								goto l495
							}
							position++
							goto l492
						l495:
							position, tokenIndex = position492, tokenIndex492
							if c := buffer[position]; c < rune('0') || c > rune('9') {
								goto l487
							}
							position++
						}
					l492:
						goto l486
					l487:
						position, tokenIndex = position487, tokenIndex487
					}
				}
			l484:
				if buffer[position] != rune('@') {
					goto l482
				}
				position++
				{
					position496, tokenIndex496 := position, tokenIndex
					if buffer[position] != rune('h') {
						goto l497
					}
					position++
					goto l496
				l497:
					position, tokenIndex = position496, tokenIndex496
					if buffer[position] != rune('H') {
						goto l482
					}
					position++
				}
			l496:
				{
					position498, tokenIndex498 := position, tokenIndex
					if buffer[position] != rune('a') {
						goto l499
					}
					position++
					goto l498
				l499:
					position, tokenIndex = position498, tokenIndex498
					if buffer[position] != rune('A') {
						goto l482
					}
					position++
				}
			l498:
				add(ruleTOCRefHigh, position483)
			}
			return true
		l482:
			position, tokenIndex = position482, tokenIndex482
			return false
		},
		/* 39 TOCRefLow <- <('.' 'T' 'O' 'C' '.' '-' (('0' 'b') / ('.' 'L' ([a-z] / [A-Z] / '_' / [0-9])+)) ('@' ('l' / 'L')))> */
		func() bool {
			position500, tokenIndex500 := position, tokenIndex
			{
				position501 := position
				if buffer[position] != rune('.') {
					goto l500
				}
				position++
				if buffer[position] != rune('T') {
					goto l500
				}
				position++
				if buffer[position] != rune('O') {
					goto l500
				}
				position++
				if buffer[position] != rune('C') {
					goto l500
				}
				position++
				if buffer[position] != rune('.') {
					goto l500
				}
				position++
				if buffer[position] != rune('-') {
					goto l500
				}
				position++
				{
					position502, tokenIndex502 := position, tokenIndex
					if buffer[position] != rune('0') {
						goto l503
					}
					position++
					if buffer[position] != rune('b') {
						goto l503
					}
					position++
					goto l502
				l503:
					position, tokenIndex = position502, tokenIndex502
					if buffer[position] != rune('.') {
						goto l500
					}
					position++
					if buffer[position] != rune('L') {
						goto l500
					}
					position++
					{
						position506, tokenIndex506 := position, tokenIndex
						if c := buffer[position]; c < rune('a') || c > rune('z') {
							goto l507
						}
						position++
						goto l506
					l507:
						position, tokenIndex = position506, tokenIndex506
						if c := buffer[position]; c < rune('A') || c > rune('Z') {
							goto l508
						}
						position++
						goto l506
					l508:
						position, tokenIndex = position506, tokenIndex506
						if buffer[position] != rune('_') {
							goto l509
						}
						position++
						goto l506
					l509:
						position, tokenIndex = position506, tokenIndex506
						if c := buffer[position]; c < rune('0') || c > rune('9') {
							goto l500
						}
						position++
					}
				l506:
				l504:
					{
						position505, tokenIndex505 := position, tokenIndex
						{
							position510, tokenIndex510 := position, tokenIndex
							if c := buffer[position]; c < rune('a') || c > rune('z') {
								goto l511
							}
							position++
							goto l510
						l511:
							position, tokenIndex = position510, tokenIndex510
							if c := buffer[position]; c < rune('A') || c > rune('Z') {
								goto l512
							}
							position++
							goto l510
						l512:
							position, tokenIndex = position510, tokenIndex510
							if buffer[position] != rune('_') {
								goto l513
							}
							position++
							goto l510
						l513:
							position, tokenIndex = position510, tokenIndex510
							if c := buffer[position]; c < rune('0') || c > rune('9') {
								goto l505
							}
							position++
						}
					l510:
						goto l504
					l505:
						position, tokenIndex = position505, tokenIndex505
					}
				}
			l502:
				if buffer[position] != rune('@') {
					goto l500
				}
				position++
				{
					position514, tokenIndex514 := position, tokenIndex
					if buffer[position] != rune('l') {
						goto l515
					}
					position++
					goto l514
				l515:
					position, tokenIndex = position514, tokenIndex514
					if buffer[position] != rune('L') {
						goto l500
					}
					position++
				}
			l514:
				add(ruleTOCRefLow, position501)
			}
			return true
		l500:
			position, tokenIndex = position500, tokenIndex500
			return false
		},
		/* 40 IndirectionIndicator <- <'*'> */
		func() bool {
			position516, tokenIndex516 := position, tokenIndex
			{
				position517 := position
				if buffer[position] != rune('*') {
					goto l516
				}
				position++
				add(ruleIndirectionIndicator, position517)
			}
			return true
		l516:
			position, tokenIndex = position516, tokenIndex516
			return false
		},
		/* 41 RegisterOrConstant <- <((('%' ([a-z] / [A-Z]) ([a-z] / [A-Z] / ([0-9] / [0-9]))*) / ('$'? ((Offset Offset) / Offset)) / ('#' Offset ('*' [0-9]+ ('-' [0-9] [0-9]*)?)?) / ('#' '~'? '(' [0-9] WS? ('<' '<') WS? [0-9] ')') / ARMRegister) !('f' / 'b' / ':' / '(' / '+' / '-'))> */
		func() bool {
			position518, tokenIndex518 := position, tokenIndex
			{
				position519 := position
				{
					position520, tokenIndex520 := position, tokenIndex
					if buffer[position] != rune('%') {
						goto l521
					}
					position++
					{
						position522, tokenIndex522 := position, tokenIndex
						if c := buffer[position]; c < rune('a') || c > rune('z') {
							goto l523
						}
						position++
						goto l522
					l523:
						position, tokenIndex = position522, tokenIndex522
						if c := buffer[position]; c < rune('A') || c > rune('Z') {
							goto l521
						}
						position++
					}
				l522:
				l524:
					{
						position525, tokenIndex525 := position, tokenIndex
						{
							position526, tokenIndex526 := position, tokenIndex
							if c := buffer[position]; c < rune('a') || c > rune('z') {
								goto l527
							}
							position++
							goto l526
						l527:
							position, tokenIndex = position526, tokenIndex526
							if c := buffer[position]; c < rune('A') || c > rune('Z') {
								goto l528
							}
							position++
							goto l526
						l528:
							position, tokenIndex = position526, tokenIndex526
							{
								position529, tokenIndex529 := position, tokenIndex
								if c := buffer[position]; c < rune('0') || c > rune('9') {
									goto l530
								}
								position++
								goto l529
							l530:
								position, tokenIndex = position529, tokenIndex529
								if c := buffer[position]; c < rune('0') || c > rune('9') {
									goto l525
								}
								position++
							}
						l529:
						}
					l526:
						goto l524
					l525:
						position, tokenIndex = position525, tokenIndex525
					}
					goto l520
				l521:
					position, tokenIndex = position520, tokenIndex520
					{
						position532, tokenIndex532 := position, tokenIndex
						if buffer[position] != rune('$') {
							goto l532
						}
						position++
						goto l533
					l532:
						position, tokenIndex = position532, tokenIndex532
					}
				l533:
					{
						position534, tokenIndex534 := position, tokenIndex
						if !_rules[ruleOffset]() {
							goto l535
						}
						if !_rules[ruleOffset]() {
							goto l535
						}
						goto l534
					l535:
						position, tokenIndex = position534, tokenIndex534
						if !_rules[ruleOffset]() {
							goto l531
						}
					}
				l534:
					goto l520
				l531:
					position, tokenIndex = position520, tokenIndex520
					if buffer[position] != rune('#') {
						goto l536
					}
					position++
					if !_rules[ruleOffset]() {
						goto l536
					}
					{
						position537, tokenIndex537 := position, tokenIndex
						if buffer[position] != rune('*') {
							goto l537
						}
						position++
						if c := buffer[position]; c < rune('0') || c > rune('9') {
							goto l537
						}
						position++
					l539:
						{
							position540, tokenIndex540 := position, tokenIndex
							if c := buffer[position]; c < rune('0') || c > rune('9') {
								goto l540
							}
							position++
							goto l539
						l540:
							position, tokenIndex = position540, tokenIndex540
						}
						{
							position541, tokenIndex541 := position, tokenIndex
							if buffer[position] != rune('-') {
								goto l541
							}
							position++
							if c := buffer[position]; c < rune('0') || c > rune('9') {
								goto l541
							}
							position++
						l543:
							{
								position544, tokenIndex544 := position, tokenIndex
								if c := buffer[position]; c < rune('0') || c > rune('9') {
									goto l544
								}
								position++
								goto l543
							l544:
								position, tokenIndex = position544, tokenIndex544
							}
							goto l542
						l541:
							position, tokenIndex = position541, tokenIndex541
						}
					l542:
						goto l538
					l537:
						position, tokenIndex = position537, tokenIndex537
					}
				l538:
					goto l520
				l536:
					position, tokenIndex = position520, tokenIndex520
					if buffer[position] != rune('#') {
						goto l545
					}
					position++
					{
						position546, tokenIndex546 := position, tokenIndex
						if buffer[position] != rune('~') {
							goto l546
						}
						position++
						goto l547
					l546:
						position, tokenIndex = position546, tokenIndex546
					}
				l547:
					if buffer[position] != rune('(') {
						goto l545
					}
					position++
					if c := buffer[position]; c < rune('0') || c > rune('9') {
						goto l545
					}
					position++
					{
						position548, tokenIndex548 := position, tokenIndex
						if !_rules[ruleWS]() {
							goto l548
						}
						goto l549
					l548:
						position, tokenIndex = position548, tokenIndex548
					}
				l549:
					if buffer[position] != rune('<') {
						goto l545
					}
					position++
					if buffer[position] != rune('<') {
						goto l545
					}
					position++
					{
						position550, tokenIndex550 := position, tokenIndex
						if !_rules[ruleWS]() {
							goto l550
						}
						goto l551
					l550:
						position, tokenIndex = position550, tokenIndex550
					}
				l551:
					if c := buffer[position]; c < rune('0') || c > rune('9') {
						goto l545
					}
					position++
					if buffer[position] != rune(')') {
						goto l545
					}
					position++
					goto l520
				l545:
					position, tokenIndex = position520, tokenIndex520
					if !_rules[ruleARMRegister]() {
						goto l518
					}
				}
			l520:
				{
					position552, tokenIndex552 := position, tokenIndex
					{
						position553, tokenIndex553 := position, tokenIndex
						if buffer[position] != rune('f') {
							goto l554
						}
						position++
						goto l553
					l554:
						position, tokenIndex = position553, tokenIndex553
						if buffer[position] != rune('b') {
							goto l555
						}
						position++
						goto l553
					l555:
						position, tokenIndex = position553, tokenIndex553
						if buffer[position] != rune(':') {
							goto l556
						}
						position++
						goto l553
					l556:
						position, tokenIndex = position553, tokenIndex553
						if buffer[position] != rune('(') {
							goto l557
						}
						position++
						goto l553
					l557:
						position, tokenIndex = position553, tokenIndex553
						if buffer[position] != rune('+') {
							goto l558
						}
						position++
						goto l553
					l558:
						position, tokenIndex = position553, tokenIndex553
						if buffer[position] != rune('-') {
							goto l552
						}
						position++
					}
				l553:
					goto l518
				l552:
					position, tokenIndex = position552, tokenIndex552
				}
				add(ruleRegisterOrConstant, position519)
			}
			return true
		l518:
			position, tokenIndex = position518, tokenIndex518
			return false
		},
		/* 42 ARMConstantTweak <- <(((('u' / 's') (('x' / 'X') ('t' / 'T')) ('x' / 'w' / 'h' / 'b')) / (('l' / 'L') ('s' / 'S') ('l' / 'L')) / (('l' / 'L') ('s' / 'S') ('r' / 'R')) / (('r' / 'R') ('o' / 'O') ('r' / 'R')) / (('a' / 'A') ('s' / 'S') ('r' / 'R'))) (WS '#' Offset)?)> */
		func() bool {
			position559, tokenIndex559 := position, tokenIndex
			{
				position560 := position
				{
					position561, tokenIndex561 := position, tokenIndex
					{
						position563, tokenIndex563 := position, tokenIndex
						if buffer[position] != rune('u') {
							goto l564
						}
						position++
						goto l563
					l564:
						position, tokenIndex = position563, tokenIndex563
						if buffer[position] != rune('s') {
							goto l562
						}
						position++
					}
				l563:
					{
						position565, tokenIndex565 := position, tokenIndex
						if buffer[position] != rune('x') {
							goto l566
						}
						position++
						goto l565
					l566:
						position, tokenIndex = position565, tokenIndex565
						if buffer[position] != rune('X') {
							goto l562
						}
						position++
					}
				l565:
					{
						position567, tokenIndex567 := position, tokenIndex
						if buffer[position] != rune('t') {
							goto l568
						}
						position++
						goto l567
					l568:
						position, tokenIndex = position567, tokenIndex567
						if buffer[position] != rune('T') {
							goto l562
						}
						position++
					}
				l567:
					{
						position569, tokenIndex569 := position, tokenIndex
						if buffer[position] != rune('x') {
							goto l570
						}
						position++
						goto l569
					l570:
						position, tokenIndex = position569, tokenIndex569
						if buffer[position] != rune('w') {
							goto l571
						}
						position++
						goto l569
					l571:
						position, tokenIndex = position569, tokenIndex569
						if buffer[position] != rune('h') {
							goto l572
						}
						position++
						goto l569
					l572:
						position, tokenIndex = position569, tokenIndex569
						if buffer[position] != rune('b') {
							goto l562
						}
						position++
					}
				l569:
					goto l561
				l562:
					position, tokenIndex = position561, tokenIndex561
					{
						position574, tokenIndex574 := position, tokenIndex
						if buffer[position] != rune('l') {
							goto l575
						}
						position++
						goto l574
					l575:
						position, tokenIndex = position574, tokenIndex574
						if buffer[position] != rune('L') {
							goto l573
						}
						position++
					}
				l574:
					{
						position576, tokenIndex576 := position, tokenIndex
						if buffer[position] != rune('s') {
							goto l577
						}
						position++
						goto l576
					l577:
						position, tokenIndex = position576, tokenIndex576
						if buffer[position] != rune('S') {
							goto l573
						}
						position++
					}
				l576:
					{
						position578, tokenIndex578 := position, tokenIndex
						if buffer[position] != rune('l') {
							goto l579
						}
						position++
						goto l578
					l579:
						position, tokenIndex = position578, tokenIndex578
						if buffer[position] != rune('L') {
							goto l573
						}
						position++
					}
				l578:
					goto l561
				l573:
					position, tokenIndex = position561, tokenIndex561
					{
						position581, tokenIndex581 := position, tokenIndex
						if buffer[position] != rune('l') {
							goto l582
						}
						position++
						goto l581
					l582:
						position, tokenIndex = position581, tokenIndex581
						if buffer[position] != rune('L') {
							goto l580
						}
						position++
					}
				l581:
					{
						position583, tokenIndex583 := position, tokenIndex
						if buffer[position] != rune('s') {
							goto l584
						}
						position++
						goto l583
					l584:
						position, tokenIndex = position583, tokenIndex583
						if buffer[position] != rune('S') {
							goto l580
						}
						position++
					}
				l583:
					{
						position585, tokenIndex585 := position, tokenIndex
						if buffer[position] != rune('r') {
							goto l586
						}
						position++
						goto l585
					l586:
						position, tokenIndex = position585, tokenIndex585
						if buffer[position] != rune('R') {
							goto l580
						}
						position++
					}
				l585:
					goto l561
				l580:
					position, tokenIndex = position561, tokenIndex561
					{
						position588, tokenIndex588 := position, tokenIndex
						if buffer[position] != rune('r') {
							goto l589
						}
						position++
						goto l588
					l589:
						position, tokenIndex = position588, tokenIndex588
						if buffer[position] != rune('R') {
							goto l587
						}
						position++
					}
				l588:
					{
						position590, tokenIndex590 := position, tokenIndex
						if buffer[position] != rune('o') {
							goto l591
						}
						position++
						goto l590
					l591:
						position, tokenIndex = position590, tokenIndex590
						if buffer[position] != rune('O') {
							goto l587
						}
						position++
					}
				l590:
					{
						position592, tokenIndex592 := position, tokenIndex
						if buffer[position] != rune('r') {
							goto l593
						}
						position++
						goto l592
					l593:
						position, tokenIndex = position592, tokenIndex592
						if buffer[position] != rune('R') {
							goto l587
						}
						position++
					}
				l592:
					goto l561
				l587:
					position, tokenIndex = position561, tokenIndex561
					{
						position594, tokenIndex594 := position, tokenIndex
						if buffer[position] != rune('a') {
							goto l595
						}
						position++
						goto l594
					l595:
						position, tokenIndex = position594, tokenIndex594
						if buffer[position] != rune('A') {
							goto l559
						}
						position++
					}
				l594:
					{
						position596, tokenIndex596 := position, tokenIndex
						if buffer[position] != rune('s') {
							goto l597
						}
						position++
						goto l596
					l597:
						position, tokenIndex = position596, tokenIndex596
						if buffer[position] != rune('S') {
							goto l559
						}
						position++
					}
				l596:
					{
						position598, tokenIndex598 := position, tokenIndex
						if buffer[position] != rune('r') {
							goto l599
						}
						position++
						goto l598
					l599:
						position, tokenIndex = position598, tokenIndex598
						if buffer[position] != rune('R') {
							goto l559
						}
						position++
					}
				l598:
				}
			l561:
				{
					position600, tokenIndex600 := position, tokenIndex
					if !_rules[ruleWS]() {
						goto l600
					}
					if buffer[position] != rune('#') {
						goto l600
					}
					position++
					if !_rules[ruleOffset]() {
						goto l600
					}
					goto l601
				l600:
					position, tokenIndex = position600, tokenIndex600
				}
			l601:
				add(ruleARMConstantTweak, position560)
			}
			return true
		l559:
			position, tokenIndex = position559, tokenIndex559
			return false
		},
		/* 43 ARMRegister <- <((('s' / 'S') ('p' / 'P')) / (('x' / 'w' / 'd' / 'q' / 's' / 'h' / 'b') [0-9] [0-9]?) / (('x' / 'X') ('z' / 'Z') ('r' / 'R')) / (('w' / 'W') ('z' / 'Z') ('r' / 'R')) / (('n' / 'N') ('z' / 'Z') ('c' / 'C') ('v' / 'V')) / ARMVectorRegister / ('{' WS? ARMVectorRegister (',' WS? ARMVectorRegister)* WS? '}' ('[' [0-9] [0-9]? ']')?))> */
		func() bool {
			position602, tokenIndex602 := position, tokenIndex
			{
				position603 := position
				{
					position604, tokenIndex604 := position, tokenIndex
					{
						position606, tokenIndex606 := position, tokenIndex
						if buffer[position] != rune('s') {
							goto l607
						}
						position++
						goto l606
					l607:
						position, tokenIndex = position606, tokenIndex606
						if buffer[position] != rune('S') {
							goto l605
						}
						position++
					}
				l606:
					{
						position608, tokenIndex608 := position, tokenIndex
						if buffer[position] != rune('p') {
							goto l609
						}
						position++
						goto l608
					l609:
						position, tokenIndex = position608, tokenIndex608
						if buffer[position] != rune('P') {
							goto l605
						}
						position++
					}
				l608:
					goto l604
				l605:
					position, tokenIndex = position604, tokenIndex604
					{
						position611, tokenIndex611 := position, tokenIndex
						if buffer[position] != rune('x') {
							goto l612
						}
						position++
						goto l611
					l612:
						position, tokenIndex = position611, tokenIndex611
						if buffer[position] != rune('w') {
							goto l613
						}
						position++
						goto l611
					l613:
						position, tokenIndex = position611, tokenIndex611
						if buffer[position] != rune('d') {
							goto l614
						}
						position++
						goto l611
					l614:
						position, tokenIndex = position611, tokenIndex611
						if buffer[position] != rune('q') {
							goto l615
						}
						position++
						goto l611
					l615:
						position, tokenIndex = position611, tokenIndex611
						if buffer[position] != rune('s') {
							goto l616
						}
						position++
						goto l611
					l616:
						position, tokenIndex = position611, tokenIndex611
						if buffer[position] != rune('h') {
							goto l617
						}
						position++
						goto l611
					l617:
						position, tokenIndex = position611, tokenIndex611
						if buffer[position] != rune('b') {
							goto l610
						}
						position++
					}
				l611:
					if c := buffer[position]; c < rune('0') || c > rune('9') {
						goto l610
					}
					position++
					{
						position618, tokenIndex618 := position, tokenIndex
						if c := buffer[position]; c < rune('0') || c > rune('9') {
							goto l618
						}
						position++
						goto l619
					l618:
						position, tokenIndex = position618, tokenIndex618
					}
				l619:
					goto l604
				l610:
					position, tokenIndex = position604, tokenIndex604
					{
						position621, tokenIndex621 := position, tokenIndex
						if buffer[position] != rune('x') {
							goto l622
						}
						position++
						goto l621
					l622:
						position, tokenIndex = position621, tokenIndex621
						if buffer[position] != rune('X') {
							goto l620
						}
						position++
					}
				l621:
					{
						position623, tokenIndex623 := position, tokenIndex
						if buffer[position] != rune('z') {
							goto l624
						}
						position++
						goto l623
					l624:
						position, tokenIndex = position623, tokenIndex623
						if buffer[position] != rune('Z') {
							goto l620
						}
						position++
					}
				l623:
					{
						position625, tokenIndex625 := position, tokenIndex
						if buffer[position] != rune('r') {
							goto l626
						}
						position++
						goto l625
					l626:
						position, tokenIndex = position625, tokenIndex625
						if buffer[position] != rune('R') {
							goto l620
						}
						position++
					}
				l625:
					goto l604
				l620:
					position, tokenIndex = position604, tokenIndex604
					{
						position628, tokenIndex628 := position, tokenIndex
						if buffer[position] != rune('w') {
							goto l629
						}
						position++
						goto l628
					l629:
						position, tokenIndex = position628, tokenIndex628
						if buffer[position] != rune('W') {
							goto l627
						}
						position++
					}
				l628:
					{
						position630, tokenIndex630 := position, tokenIndex
						if buffer[position] != rune('z') {
							goto l631
						}
						position++
						goto l630
					l631:
						position, tokenIndex = position630, tokenIndex630
						if buffer[position] != rune('Z') {
							goto l627
						}
						position++
					}
				l630:
					{
						position632, tokenIndex632 := position, tokenIndex
						if buffer[position] != rune('r') {
							goto l633
						}
						position++
						goto l632
					l633:
						position, tokenIndex = position632, tokenIndex632
						if buffer[position] != rune('R') {
							goto l627
						}
						position++
					}
				l632:
					goto l604
				l627:
					position, tokenIndex = position604, tokenIndex604
					{
						position635, tokenIndex635 := position, tokenIndex
						if buffer[position] != rune('n') {
							goto l636
						}
						position++
						goto l635
					l636:
						position, tokenIndex = position635, tokenIndex635
						if buffer[position] != rune('N') {
							goto l634
						}
						position++
					}
				l635:
					{
						position637, tokenIndex637 := position, tokenIndex
						if buffer[position] != rune('z') {
							goto l638
						}
						position++
						goto l637
					l638:
						position, tokenIndex = position637, tokenIndex637
						if buffer[position] != rune('Z') {
							goto l634
						}
						position++
					}
				l637:
					{
						position639, tokenIndex639 := position, tokenIndex
						if buffer[position] != rune('c') {
							goto l640
						}
						position++
						goto l639
					l640:
						position, tokenIndex = position639, tokenIndex639
						if buffer[position] != rune('C') {
							goto l634
						}
						position++
					}
				l639:
					{
						position641, tokenIndex641 := position, tokenIndex
						if buffer[position] != rune('v') {
							goto l642
						}
						position++
						goto l641
					l642:
						position, tokenIndex = position641, tokenIndex641
						if buffer[position] != rune('V') {
							goto l634
						}
						position++
					}
				l641:
					goto l604
				l634:
					position, tokenIndex = position604, tokenIndex604
					if !_rules[ruleARMVectorRegister]() {
						goto l643
					}
					goto l604
				l643:
					position, tokenIndex = position604, tokenIndex604
					if buffer[position] != rune('{') {
						goto l602
					}
					position++
					{
						position644, tokenIndex644 := position, tokenIndex
						if !_rules[ruleWS]() {
							goto l644
						}
						goto l645
					l644:
						position, tokenIndex = position644, tokenIndex644
					}
				l645:
					if !_rules[ruleARMVectorRegister]() {
						goto l602
					}
				l646:
					{
						position647, tokenIndex647 := position, tokenIndex
						if buffer[position] != rune(',') {
							goto l647
						}
						position++
						{
							position648, tokenIndex648 := position, tokenIndex
							if !_rules[ruleWS]() {
								goto l648
							}
							goto l649
						l648:
							position, tokenIndex = position648, tokenIndex648
						}
					l649:
						if !_rules[ruleARMVectorRegister]() {
							goto l647
						}
						goto l646
					l647:
						position, tokenIndex = position647, tokenIndex647
					}
					{
						position650, tokenIndex650 := position, tokenIndex
						if !_rules[ruleWS]() {
							goto l650
						}
						goto l651
					l650:
						position, tokenIndex = position650, tokenIndex650
					}
				l651:
					if buffer[position] != rune('}') {
						goto l602
					}
					position++
					{
						position652, tokenIndex652 := position, tokenIndex
						if buffer[position] != rune('[') {
							goto l652
						}
						position++
						if c := buffer[position]; c < rune('0') || c > rune('9') {
							goto l652
						}
						position++
						{
							position654, tokenIndex654 := position, tokenIndex
							if c := buffer[position]; c < rune('0') || c > rune('9') {
								goto l654
							}
							position++
							goto l655
						l654:
							position, tokenIndex = position654, tokenIndex654
						}
					l655:
						if buffer[position] != rune(']') {
							goto l652
						}
						position++
						goto l653
					l652:
						position, tokenIndex = position652, tokenIndex652
					}
				l653:
				}
			l604:
				add(ruleARMRegister, position603)
			}
			return true
		l602:
			position, tokenIndex = position602, tokenIndex602
			return false
		},
		/* 44 ARMVectorRegister <- <(('v' / 'V') [0-9] [0-9]? ('.' [0-9]* ('b' / 's' / 'd' / 'h' / 'q') ('[' [0-9] [0-9]? ']')?)?)> */
		func() bool {
			position656, tokenIndex656 := position, tokenIndex
			{
				position657 := position
				{
					position658, tokenIndex658 := position, tokenIndex
					if buffer[position] != rune('v') {
						goto l659
					}
					position++
					goto l658
				l659:
					position, tokenIndex = position658, tokenIndex658
					if buffer[position] != rune('V') {
						goto l656
					}
					position++
				}
			l658:
				if c := buffer[position]; c < rune('0') || c > rune('9') {
					goto l656
				}
				position++
				{
					position660, tokenIndex660 := position, tokenIndex
					if c := buffer[position]; c < rune('0') || c > rune('9') {
						goto l660
					}
					position++
					goto l661
				l660:
					position, tokenIndex = position660, tokenIndex660
				}
			l661:
				{
					position662, tokenIndex662 := position, tokenIndex
					if buffer[position] != rune('.') {
						goto l662
					}
					position++
				l664:
					{
						position665, tokenIndex665 := position, tokenIndex
						if c := buffer[position]; c < rune('0') || c > rune('9') {
							goto l665
						}
						position++
						goto l664
					l665:
						position, tokenIndex = position665, tokenIndex665
					}
					{
						position666, tokenIndex666 := position, tokenIndex
						if buffer[position] != rune('b') {
							goto l667
						}
						position++
						goto l666
					l667:
						position, tokenIndex = position666, tokenIndex666
						if buffer[position] != rune('s') {
							goto l668
						}
						position++
						goto l666
					l668:
						position, tokenIndex = position666, tokenIndex666
						if buffer[position] != rune('d') {
							goto l669
						}
						position++
						goto l666
					l669:
						position, tokenIndex = position666, tokenIndex666
						if buffer[position] != rune('h') {
							goto l670
						}
						position++
						goto l666
					l670:
						position, tokenIndex = position666, tokenIndex666
						if buffer[position] != rune('q') {
							goto l662
						}
						position++
					}
				l666:
					{
						position671, tokenIndex671 := position, tokenIndex
						if buffer[position] != rune('[') {
							goto l671
						}
						position++
						if c := buffer[position]; c < rune('0') || c > rune('9') {
							goto l671
						}
						position++
						{
							position673, tokenIndex673 := position, tokenIndex
							if c := buffer[position]; c < rune('0') || c > rune('9') {
								goto l673
							}
							position++
							goto l674
						l673:
							position, tokenIndex = position673, tokenIndex673
						}
					l674:
						if buffer[position] != rune(']') {
							goto l671
						}
						position++
						goto l672
					l671:
						position, tokenIndex = position671, tokenIndex671
					}
				l672:
					goto l663
				l662:
					position, tokenIndex = position662, tokenIndex662
				}
			l663:
				add(ruleARMVectorRegister, position657)
			}
			return true
		l656:
			position, tokenIndex = position656, tokenIndex656
			return false
		},
		/* 45 MemoryRef <- <((SymbolRef BaseIndexScale) / SymbolRef / Low12BitsSymbolRef / (Offset* BaseIndexScale) / (SegmentRegister Offset BaseIndexScale) / (SegmentRegister BaseIndexScale) / (SegmentRegister Offset) / ARMBaseIndexScale / BaseIndexScale)> */
		func() bool {
			position675, tokenIndex675 := position, tokenIndex
			{
				position676 := position
				{
					position677, tokenIndex677 := position, tokenIndex
					if !_rules[ruleSymbolRef]() {
						goto l678
					}
					if !_rules[ruleBaseIndexScale]() {
						goto l678
					}
					goto l677
				l678:
					position, tokenIndex = position677, tokenIndex677
					if !_rules[ruleSymbolRef]() {
						goto l679
					}
					goto l677
				l679:
					position, tokenIndex = position677, tokenIndex677
					if !_rules[ruleLow12BitsSymbolRef]() {
						goto l680
					}
					goto l677
				l680:
					position, tokenIndex = position677, tokenIndex677
				l682:
					{
						position683, tokenIndex683 := position, tokenIndex
						if !_rules[ruleOffset]() {
							goto l683
						}
						goto l682
					l683:
						position, tokenIndex = position683, tokenIndex683
					}
					if !_rules[ruleBaseIndexScale]() {
						goto l681
					}
					goto l677
				l681:
					position, tokenIndex = position677, tokenIndex677
					if !_rules[ruleSegmentRegister]() {
						goto l684
					}
					if !_rules[ruleOffset]() {
						goto l684
					}
					if !_rules[ruleBaseIndexScale]() {
						goto l684
					}
					goto l677
				l684:
					position, tokenIndex = position677, tokenIndex677
					if !_rules[ruleSegmentRegister]() {
						goto l685
					}
					if !_rules[ruleBaseIndexScale]() {
						goto l685
					}
					goto l677
				l685:
					position, tokenIndex = position677, tokenIndex677
					if !_rules[ruleSegmentRegister]() {
						goto l686
					}
					if !_rules[ruleOffset]() {
						goto l686
					}
					goto l677
				l686:
					position, tokenIndex = position677, tokenIndex677
					if !_rules[ruleARMBaseIndexScale]() {
						goto l687
					}
					goto l677
				l687:
					position, tokenIndex = position677, tokenIndex677
					if !_rules[ruleBaseIndexScale]() {
						goto l675
					}
				}
			l677:
				add(ruleMemoryRef, position676)
			}
			return true
		l675:
			position, tokenIndex = position675, tokenIndex675
			return false
		},
		/* 46 SymbolRef <- <((Offset* '+')? (LocalSymbol / SymbolName) Offset* ('@' Section Offset*)?)> */
		func() bool {
			position688, tokenIndex688 := position, tokenIndex
			{
				position689 := position
				{
					position690, tokenIndex690 := position, tokenIndex
				l692:
					{
						position693, tokenIndex693 := position, tokenIndex
						if !_rules[ruleOffset]() {
							goto l693
						}
						goto l692
					l693:
						position, tokenIndex = position693, tokenIndex693
					}
					if buffer[position] != rune('+') {
						goto l690
					}
					position++
					goto l691
				l690:
					position, tokenIndex = position690, tokenIndex690
				}
			l691:
				{
					position694, tokenIndex694 := position, tokenIndex
					if !_rules[ruleLocalSymbol]() {
						goto l695
					}
					goto l694
				l695:
					position, tokenIndex = position694, tokenIndex694
					if !_rules[ruleSymbolName]() {
						goto l688
					}
				}
			l694:
			l696:
				{
					position697, tokenIndex697 := position, tokenIndex
					if !_rules[ruleOffset]() {
						goto l697
					}
					goto l696
				l697:
					position, tokenIndex = position697, tokenIndex697
				}
				{
					position698, tokenIndex698 := position, tokenIndex
					if buffer[position] != rune('@') {
						goto l698
					}
					position++
					if !_rules[ruleSection]() {
						goto l698
					}
				l700:
					{
						position701, tokenIndex701 := position, tokenIndex
						if !_rules[ruleOffset]() {
							goto l701
						}
						goto l700
					l701:
						position, tokenIndex = position701, tokenIndex701
					}
					goto l699
				l698:
					position, tokenIndex = position698, tokenIndex698
				}
			l699:
				add(ruleSymbolRef, position689)
			}
			return true
		l688:
			position, tokenIndex = position688, tokenIndex688
			return false
		},
		/* 47 Low12BitsSymbolRef <- <(':' ('l' / 'L') ('o' / 'O') '1' '2' ':' (LocalSymbol / SymbolName) Offset?)> */
		func() bool {
			position702, tokenIndex702 := position, tokenIndex
			{
				position703 := position
				if buffer[position] != rune(':') {
					goto l702
				}
				position++
				{
					position704, tokenIndex704 := position, tokenIndex
					if buffer[position] != rune('l') {
						goto l705
					}
					position++
					goto l704
				l705:
					position, tokenIndex = position704, tokenIndex704
					if buffer[position] != rune('L') {
						goto l702
					}
					position++
				}
			l704:
				{
					position706, tokenIndex706 := position, tokenIndex
					if buffer[position] != rune('o') {
						goto l707
					}
					position++
					goto l706
				l707:
					position, tokenIndex = position706, tokenIndex706
					if buffer[position] != rune('O') {
						goto l702
					}
					position++
				}
			l706:
				if buffer[position] != rune('1') {
					goto l702
				}
				position++
				if buffer[position] != rune('2') {
					goto l702
				}
				position++
				if buffer[position] != rune(':') {
					goto l702
				}
				position++
				{
					position708, tokenIndex708 := position, tokenIndex
					if !_rules[ruleLocalSymbol]() {
						goto l709
					}
					goto l708
				l709:
					position, tokenIndex = position708, tokenIndex708
					if !_rules[ruleSymbolName]() {
						goto l702
					}
				}
			l708:
				{
					position710, tokenIndex710 := position, tokenIndex
					if !_rules[ruleOffset]() {
						goto l710
					}
					goto l711
				l710:
					position, tokenIndex = position710, tokenIndex710
				}
			l711:
				add(ruleLow12BitsSymbolRef, position703)
			}
			return true
		l702:
			position, tokenIndex = position702, tokenIndex702
			return false
		},
		/* 48 ARMBaseIndexScale <- <('[' ARMRegister (',' WS? (('#' Offset (('*' [0-9]+) / ('*' '(' [0-9]+ Operator [0-9]+ ')') / ('+' [0-9]+)*)?) / ARMGOTLow12 / Low12BitsSymbolRef / ARMRegister) (',' WS? ARMConstantTweak)?)? ']' ARMPostincrement?)> */
		func() bool {
			position712, tokenIndex712 := position, tokenIndex
			{
				position713 := position
				if buffer[position] != rune('[') {
					goto l712
				}
				position++
				if !_rules[ruleARMRegister]() {
					goto l712
				}
				{
					position714, tokenIndex714 := position, tokenIndex
					if buffer[position] != rune(',') {
						goto l714
					}
					position++
					{
						position716, tokenIndex716 := position, tokenIndex
						if !_rules[ruleWS]() {
							goto l716
						}
						goto l717
					l716:
						position, tokenIndex = position716, tokenIndex716
					}
				l717:
					{
						position718, tokenIndex718 := position, tokenIndex
						if buffer[position] != rune('#') {
							goto l719
						}
						position++
						if !_rules[ruleOffset]() {
							goto l719
						}
						{
							position720, tokenIndex720 := position, tokenIndex
							{
								position722, tokenIndex722 := position, tokenIndex
								if buffer[position] != rune('*') {
									goto l723
								}
								position++
								if c := buffer[position]; c < rune('0') || c > rune('9') {
									goto l723
								}
								position++
							l724:
								{
									position725, tokenIndex725 := position, tokenIndex
									if c := buffer[position]; c < rune('0') || c > rune('9') {
										goto l725
									}
									position++
									goto l724
								l725:
									position, tokenIndex = position725, tokenIndex725
								}
								goto l722
							l723:
								position, tokenIndex = position722, tokenIndex722
								if buffer[position] != rune('*') {
									goto l726
								}
								position++
								if buffer[position] != rune('(') {
									goto l726
								}
								position++
								if c := buffer[position]; c < rune('0') || c > rune('9') {
									goto l726
								}
								position++
							l727:
								{
									position728, tokenIndex728 := position, tokenIndex
									if c := buffer[position]; c < rune('0') || c > rune('9') {
										goto l728
									}
									position++
									goto l727
								l728:
									position, tokenIndex = position728, tokenIndex728
								}
								if !_rules[ruleOperator]() {
									goto l726
								}
								if c := buffer[position]; c < rune('0') || c > rune('9') {
									goto l726
								}
								position++
							l729:
								{
									position730, tokenIndex730 := position, tokenIndex
									if c := buffer[position]; c < rune('0') || c > rune('9') {
										goto l730
									}
									position++
									goto l729
								l730:
									position, tokenIndex = position730, tokenIndex730
								}
								if buffer[position] != rune(')') {
									goto l726
								}
								position++
								goto l722
							l726:
								position, tokenIndex = position722, tokenIndex722
							l731:
								{
									position732, tokenIndex732 := position, tokenIndex
									if buffer[position] != rune('+') {
										goto l732
									}
									position++
									if c := buffer[position]; c < rune('0') || c > rune('9') {
										goto l732
									}
									position++
								l733:
									{
										position734, tokenIndex734 := position, tokenIndex
										if c := buffer[position]; c < rune('0') || c > rune('9') {
											goto l734
										}
										position++
										goto l733
									l734:
										position, tokenIndex = position734, tokenIndex734
									}
									goto l731
								l732:
									position, tokenIndex = position732, tokenIndex732
								}
							}
						l722:
							goto l721

							position, tokenIndex = position720, tokenIndex720
						}
					l721:
						goto l718
					l719:
						position, tokenIndex = position718, tokenIndex718
						if !_rules[ruleARMGOTLow12]() {
							goto l735
						}
						goto l718
					l735:
						position, tokenIndex = position718, tokenIndex718
						if !_rules[ruleLow12BitsSymbolRef]() {
							goto l736
						}
						goto l718
					l736:
						position, tokenIndex = position718, tokenIndex718
						if !_rules[ruleARMRegister]() {
							goto l714
						}
					}
				l718:
					{
						position737, tokenIndex737 := position, tokenIndex
						if buffer[position] != rune(',') {
							goto l737
						}
						position++
						{
							position739, tokenIndex739 := position, tokenIndex
							if !_rules[ruleWS]() {
								goto l739
							}
							goto l740
						l739:
							position, tokenIndex = position739, tokenIndex739
						}
					l740:
						if !_rules[ruleARMConstantTweak]() {
							goto l737
						}
						goto l738
					l737:
						position, tokenIndex = position737, tokenIndex737
					}
				l738:
					goto l715
				l714:
					position, tokenIndex = position714, tokenIndex714
				}
			l715:
				if buffer[position] != rune(']') {
					goto l712
				}
				position++
				{
					position741, tokenIndex741 := position, tokenIndex
					if !_rules[ruleARMPostincrement]() {
						goto l741
					}
					goto l742
				l741:
					position, tokenIndex = position741, tokenIndex741
				}
			l742:
				add(ruleARMBaseIndexScale, position713)
			}
			return true
		l712:
			position, tokenIndex = position712, tokenIndex712
			return false
		},
		/* 49 ARMGOTLow12 <- <(':' ('g' / 'G') ('o' / 'O') ('t' / 'T') '_' ('l' / 'L') ('o' / 'O') '1' '2' ':' SymbolName)> */
		func() bool {
			position743, tokenIndex743 := position, tokenIndex
			{
				position744 := position
				if buffer[position] != rune(':') {
					goto l743
				}
				position++
				{
					position745, tokenIndex745 := position, tokenIndex
					if buffer[position] != rune('g') {
						goto l746
					}
					position++
					goto l745
				l746:
					position, tokenIndex = position745, tokenIndex745
					if buffer[position] != rune('G') {
						goto l743
					}
					position++
				}
			l745:
				{
					position747, tokenIndex747 := position, tokenIndex
					if buffer[position] != rune('o') {
						goto l748
					}
					position++
					goto l747
				l748:
					position, tokenIndex = position747, tokenIndex747
					if buffer[position] != rune('O') {
						goto l743
					}
					position++
				}
			l747:
				{
					position749, tokenIndex749 := position, tokenIndex
					if buffer[position] != rune('t') {
						goto l750
					}
					position++
					goto l749
				l750:
					position, tokenIndex = position749, tokenIndex749
					if buffer[position] != rune('T') {
						goto l743
					}
					position++
				}
			l749:
				if buffer[position] != rune('_') {
					goto l743
				}
				position++
				{
					position751, tokenIndex751 := position, tokenIndex
					if buffer[position] != rune('l') {
						goto l752
					}
					position++
					goto l751
				l752:
					position, tokenIndex = position751, tokenIndex751
					if buffer[position] != rune('L') {
						goto l743
					}
					position++
				}
			l751:
				{
					position753, tokenIndex753 := position, tokenIndex
					if buffer[position] != rune('o') {
						goto l754
					}
					position++
					goto l753
				l754:
					position, tokenIndex = position753, tokenIndex753
					if buffer[position] != rune('O') {
						goto l743
					}
					position++
				}
			l753:
				if buffer[position] != rune('1') {
					goto l743
				}
				position++
				if buffer[position] != rune('2') {
					goto l743
				}
				position++
				if buffer[position] != rune(':') {
					goto l743
				}
				position++
				if !_rules[ruleSymbolName]() {
					goto l743
				}
				add(ruleARMGOTLow12, position744)
			}
			return true
		l743:
			position, tokenIndex = position743, tokenIndex743
			return false
		},
		/* 50 ARMPostincrement <- <'!'> */
		func() bool {
			position755, tokenIndex755 := position, tokenIndex
			{
				position756 := position
				if buffer[position] != rune('!') {
					goto l755
				}
				position++
				add(ruleARMPostincrement, position756)
			}
			return true
		l755:
			position, tokenIndex = position755, tokenIndex755
			return false
		},
		/* 51 BaseIndexScale <- <('(' RegisterOrConstant? WS? (',' WS? RegisterOrConstant WS? (',' [0-9]+)?)? ')')> */
		func() bool {
			position757, tokenIndex757 := position, tokenIndex
			{
				position758 := position
				if buffer[position] != rune('(') {
					goto l757
				}
				position++
				{
					position759, tokenIndex759 := position, tokenIndex
					if !_rules[ruleRegisterOrConstant]() {
						goto l759
					}
					goto l760
				l759:
					position, tokenIndex = position759, tokenIndex759
				}
			l760:
				{
					position761, tokenIndex761 := position, tokenIndex
					if !_rules[ruleWS]() {
						goto l761
					}
					goto l762
				l761:
					position, tokenIndex = position761, tokenIndex761
				}
			l762:
				{
					position763, tokenIndex763 := position, tokenIndex
					if buffer[position] != rune(',') {
						goto l763
					}
					position++
					{
						position765, tokenIndex765 := position, tokenIndex
						if !_rules[ruleWS]() {
							goto l765
						}
						goto l766
					l765:
						position, tokenIndex = position765, tokenIndex765
					}
				l766:
					if !_rules[ruleRegisterOrConstant]() {
						goto l763
					}
					{
						position767, tokenIndex767 := position, tokenIndex
						if !_rules[ruleWS]() {
							goto l767
						}
						goto l768
					l767:
						position, tokenIndex = position767, tokenIndex767
					}
				l768:
					{
						position769, tokenIndex769 := position, tokenIndex
						if buffer[position] != rune(',') {
							goto l769
						}
						position++
						if c := buffer[position]; c < rune('0') || c > rune('9') {
							goto l769
						}
						position++
					l771:
						{
							position772, tokenIndex772 := position, tokenIndex
							if c := buffer[position]; c < rune('0') || c > rune('9') {
								goto l772
							}
							position++
							goto l771
						l772:
							position, tokenIndex = position772, tokenIndex772
						}
						goto l770
					l769:
						position, tokenIndex = position769, tokenIndex769
					}
				l770:
					goto l764
				l763:
					position, tokenIndex = position763, tokenIndex763
				}
			l764:
				if buffer[position] != rune(')') {
					goto l757
				}
				position++
				add(ruleBaseIndexScale, position758)
			}
			return true
		l757:
			position, tokenIndex = position757, tokenIndex757
			return false
		},
		/* 52 Operator <- <('+' / '-')> */
		func() bool {
			position773, tokenIndex773 := position, tokenIndex
			{
				position774 := position
				{
					position775, tokenIndex775 := position, tokenIndex
					if buffer[position] != rune('+') {
						goto l776
					}
					position++
					goto l775
				l776:
					position, tokenIndex = position775, tokenIndex775
					if buffer[position] != rune('-') {
						goto l773
					}
					position++
				}
			l775:
				add(ruleOperator, position774)
			}
			return true
		l773:
			position, tokenIndex = position773, tokenIndex773
			return false
		},
		/* 53 Offset <- <('+'? '-'? (('0' ('b' / 'B') ('0' / '1')+) / ('0' ('x' / 'X') ([0-9] / [0-9] / ([a-f] / [A-F]))+) / [0-9]+))> */
		func() bool {
			position777, tokenIndex777 := position, tokenIndex
			{
				position778 := position
				{
					position779, tokenIndex779 := position, tokenIndex
					if buffer[position] != rune('+') {
						goto l779
					}
					position++
					goto l780
				l779:
					position, tokenIndex = position779, tokenIndex779
				}
			l780:
				{
					position781, tokenIndex781 := position, tokenIndex
					if buffer[position] != rune('-') {
						goto l781
					}
					position++
					goto l782
				l781:
					position, tokenIndex = position781, tokenIndex781
				}
			l782:
				{
					position783, tokenIndex783 := position, tokenIndex
					if buffer[position] != rune('0') {
						goto l784
					}
					position++
					{
						position785, tokenIndex785 := position, tokenIndex
						if buffer[position] != rune('b') {
							goto l786
						}
						position++
						goto l785
					l786:
						position, tokenIndex = position785, tokenIndex785
						if buffer[position] != rune('B') {
							goto l784
						}
						position++
					}
				l785:
					{
						position789, tokenIndex789 := position, tokenIndex
						if buffer[position] != rune('0') {
							goto l790
						}
						position++
						goto l789
					l790:
						position, tokenIndex = position789, tokenIndex789
						if buffer[position] != rune('1') {
							goto l784
						}
						position++
					}
				l789:
				l787:
					{
						position788, tokenIndex788 := position, tokenIndex
						{
							position791, tokenIndex791 := position, tokenIndex
							if buffer[position] != rune('0') {
								goto l792
							}
							position++
							goto l791
						l792:
							position, tokenIndex = position791, tokenIndex791
							if buffer[position] != rune('1') {
								goto l788
							}
							position++
						}
					l791:
						goto l787
					l788:
						position, tokenIndex = position788, tokenIndex788
					}
					goto l783
				l784:
					position, tokenIndex = position783, tokenIndex783
					if buffer[position] != rune('0') {
						goto l793
					}
					position++
					{
						position794, tokenIndex794 := position, tokenIndex
						if buffer[position] != rune('x') {
							goto l795
						}
						position++
						goto l794
					l795:
						position, tokenIndex = position794, tokenIndex794
						if buffer[position] != rune('X') {
							goto l793
						}
						position++
					}
				l794:
					{
						position798, tokenIndex798 := position, tokenIndex
						if c := buffer[position]; c < rune('0') || c > rune('9') {
							goto l799
						}
						position++
						goto l798
					l799:
						position, tokenIndex = position798, tokenIndex798
						if c := buffer[position]; c < rune('0') || c > rune('9') {
							goto l800
						}
						position++
						goto l798
					l800:
						position, tokenIndex = position798, tokenIndex798
						{
							position801, tokenIndex801 := position, tokenIndex
							if c := buffer[position]; c < rune('a') || c > rune('f') {
								goto l802
							}
							position++
							goto l801
						l802:
							position, tokenIndex = position801, tokenIndex801
							if c := buffer[position]; c < rune('A') || c > rune('F') {
								goto l793
							}
							position++
						}
					l801:
					}
				l798:
				l796:
					{
						position797, tokenIndex797 := position, tokenIndex
						{
							position803, tokenIndex803 := position, tokenIndex
							if c := buffer[position]; c < rune('0') || c > rune('9') {
								goto l804
							}
							position++
							goto l803
						l804:
							position, tokenIndex = position803, tokenIndex803
							if c := buffer[position]; c < rune('0') || c > rune('9') {
								goto l805
							}
							position++
							goto l803
						l805:
							position, tokenIndex = position803, tokenIndex803
							{
								position806, tokenIndex806 := position, tokenIndex
								if c := buffer[position]; c < rune('a') || c > rune('f') {
									goto l807
								}
								position++
								goto l806
							l807:
								position, tokenIndex = position806, tokenIndex806
								if c := buffer[position]; c < rune('A') || c > rune('F') {
									goto l797
								}
								position++
							}
						l806:
						}
					l803:
						goto l796
					l797:
						position, tokenIndex = position797, tokenIndex797
					}
					goto l783
				l793:
					position, tokenIndex = position783, tokenIndex783
					if c := buffer[position]; c < rune('0') || c > rune('9') {
						goto l777
					}
					position++
				l808:
					{
						position809, tokenIndex809 := position, tokenIndex
						if c := buffer[position]; c < rune('0') || c > rune('9') {
							goto l809
						}
						position++
						goto l808
					l809:
						position, tokenIndex = position809, tokenIndex809
					}
				}
			l783:
				add(ruleOffset, position778)
			}
			return true
		l777:
			position, tokenIndex = position777, tokenIndex777
			return false
		},
		/* 54 Section <- <([a-z] / [A-Z] / '@')+> */
		func() bool {
			position810, tokenIndex810 := position, tokenIndex
			{
				position811 := position
				{
					position814, tokenIndex814 := position, tokenIndex
					if c := buffer[position]; c < rune('a') || c > rune('z') {
						goto l815
					}
					position++
					goto l814
				l815:
					position, tokenIndex = position814, tokenIndex814
					if c := buffer[position]; c < rune('A') || c > rune('Z') {
						goto l816
					}
					position++
					goto l814
				l816:
					position, tokenIndex = position814, tokenIndex814
					if buffer[position] != rune('@') {
						goto l810
					}
					position++
				}
			l814:
			l812:
				{
					position813, tokenIndex813 := position, tokenIndex
					{
						position817, tokenIndex817 := position, tokenIndex
						if c := buffer[position]; c < rune('a') || c > rune('z') {
							goto l818
						}
						position++
						goto l817
					l818:
						position, tokenIndex = position817, tokenIndex817
						if c := buffer[position]; c < rune('A') || c > rune('Z') {
							goto l819
						}
						position++
						goto l817
					l819:
						position, tokenIndex = position817, tokenIndex817
						if buffer[position] != rune('@') {
							goto l813
						}
						position++
					}
				l817:
					goto l812
				l813:
					position, tokenIndex = position813, tokenIndex813
				}
				add(ruleSection, position811)
			}
			return true
		l810:
			position, tokenIndex = position810, tokenIndex810
			return false
		},
		/* 55 SegmentRegister <- <('%' ([c-g] / 's') ('s' ':'))> */
		func() bool {
			position820, tokenIndex820 := position, tokenIndex
			{
				position821 := position
				if buffer[position] != rune('%') {
					goto l820
				}
				position++
				{
					position822, tokenIndex822 := position, tokenIndex
					if c := buffer[position]; c < rune('c') || c > rune('g') {
						goto l823
					}
					position++
					goto l822
				l823:
					position, tokenIndex = position822, tokenIndex822
					if buffer[position] != rune('s') {
						goto l820
					}
					position++
				}
			l822:
				if buffer[position] != rune('s') {
					goto l820
				}
				position++
				if buffer[position] != rune(':') {
					goto l820
				}
				position++
				add(ruleSegmentRegister, position821)
			}
			return true
		l820:
			position, tokenIndex = position820, tokenIndex820
			return false
		},
	}
	p.rules = _rules
	return nil
}
