def h16(): return Sequence( HEXDIG(), Optional( Sequence(HEXDIG(), Optional(Sequence(HEXDIG(), Optional(HEXDIG()))))))
def path_rootless(): return Sequence(NonTerminal("segment-nz"), Optional(Sequence("/", NonTerminal("segment"))))
def uri(): return Sequence(NonTerminal("scheme"), ":", Group(hier_part(), "hier-part"), Optional(Sequence("?", NonTerminal("query"))), Optional(Sequence("#", NonTerminal("fragment"))))
def path_absolute(): return Sequence( "/", Optional( Sequence(NonTerminal("segment-nz"), Optional(Sequence("/", NonTerminal("segment"))))))
def path_abempty(): return Optional(Sequence("/", NonTerminal("segment")))
def authority(): return [ Optional(Sequence(NonTerminal("userinfo"), "@")), NonTerminal("host"), Optional(Sequence(":", NonTerminal("port"))) ]
def ipv6address(): return Choice( 0, Sequence(NonTerminal("h16"), ":", NonTerminal("h16"), ":", NonTerminal("h16"), ":", NonTerminal("h16"), ":", NonTerminal("h16"), ":", NonTerminal("h16"), ":", NonTerminal("ls32")), Sequence("::", NonTerminal("h16"), ":", NonTerminal("h16"), ":", NonTerminal("h16"), ":", NonTerminal("h16"), ":", NonTerminal("h16"), ":", NonTerminal("ls32")), Sequence(Optional(NonTerminal("h16")), "::", NonTerminal("h16"), ":", NonTerminal("h16"), ":", NonTerminal("h16"), ":", NonTerminal("h16"), ":", NonTerminal("ls32")), Sequence( Optional( Sequence(Optional(Sequence(NonTerminal("h16"), ":")), NonTerminal("h16"))), "::", NonTerminal("h16"), ":", NonTerminal("h16"), ":", NonTerminal("h16"), ":", NonTerminal("ls32")), Sequence( Optional( Sequence( Optional( Sequence(NonTerminal("h16"), ":", Optional(Sequence(NonTerminal("h16"), ":")))), NonTerminal("h16"))), "::", NonTerminal("h16"), ":", NonTerminal("h16"), ":", NonTerminal("ls32")), Sequence( Optional( Sequence( Optional( Sequence( NonTerminal("h16"), ":", Optional( Sequence( NonTerminal("h16"), ":", Optional(Sequence(NonTerminal("h16"), ":")))))), NonTerminal("h16"))), "::", NonTerminal("h16"), ":", NonTerminal("ls32")), Sequence( Optional( Sequence( Optional( Sequence( NonTerminal("h16"), ":", Optional( Sequence( NonTerminal("h16"), ":", Optional( Sequence( NonTerminal("h16"), ":", Optional( Sequence( NonTerminal("h16"), ":")))))))), NonTerminal("h16"))), "::", NonTerminal("ls32")), Sequence( Optional( Sequence( Optional( Sequence( NonTerminal("h16"), ":", Optional( Sequence( NonTerminal("h16"), ":", Optional( Sequence( NonTerminal("h16"), ":", Optional( Sequence( NonTerminal("h16"), ":", Optional( Sequence( NonTerminal("h16"), ":")))))))))), NonTerminal("h16"))), "::", NonTerminal("h16")), Sequence( Optional( Sequence( Optional( Sequence( NonTerminal("h16"), ":", Optional( Sequence( NonTerminal("h16"), ":", Optional( Sequence( NonTerminal("h16"), ":", Optional( Sequence( NonTerminal("h16"), ":", Optional( Sequence( NonTerminal("h16"), ":", Optional( Sequence( NonTerminal( "h16"), ":")))))))) )))), NonTerminal("h16"))), "::"))
def maybe(self, children): return Optional(children[0])