/* uri_constants.js:  miscellaneous constant data for URIs

   Copyright (c) 2008 World Wide Web Consortium, 
   (Massachusetts Institute of Technology, European Research 
   Consortium for Informatics and Mathematics, Keio University). 
   All Rights Reserved. This work is distributed under the 
   W3C(TM) Software License [1] in the hope that it will be 
   useful, but WITHOUT ANY WARRANTY; without even the implied 
   warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

   [1] http://www.w3.org/Consortium/Legal/2002/copyright-software-20021231

*/

/* Revisions:
   2009-03-15 : CMSMcQ : made first version (empty) of this file
*/

/* All of this material could go into uri_manipulation.js, but the
 * arrays are bulky and hard to skim past; they make it harder to get
 * an overview of the code.  
 * So they've been banished over here.
 */

// Statis array of (keywords denoting) known sets of URI validation 
// rules.  This is used by mp_GetSelectedRulesets() as well as by
// function s_findDiscrepancy_arrRule_Min_MaxS_MaxNT_MaxTries(...)

var arr_Rulesets = ['fAppA', 'fAppB', 'fH5'];
var arr_Generators = ['examples', 'ascii', 'ucs', 'octets', 'tnt'];


// Static array of examples from specs ...
var arr_sampleURIs = [
		      'ftp://ftp.is.co.za/rfc/rfc1808.txt',
		      'http://www.ietf.org/rfc/rfc2396.txt',
		      'ldap://[2001:db8::7]/c=GB?objectClass?one',
		      'mailto:John.Doe@example.com',
		      'news:comp.infosystems.www.servers.unix',
		      'tel:+1-816-555-1212',
		      'telnet://192.0.2.16:80/',
		      'urn:oasis:names:specification:docbook:dtd:xml:4.1.2',
		      'foo://example.com:8042/over/there?name=ferret#nose',
		      'urn:example:animal:ferret:nose',
		      'www.w3.org/Addressing/',
		      'http://a/b/c/d;p?q',
		  
		      "g:h",
		      "g",
		      "http://a/b/c/g",
		      "./g",
		      "http://a/b/c/g",
		      "g/",  
		      "http://a/b/c/g/",
		      "/g",  
		      "http://a/g",
		      "//g",  
		      "http://g",
		      "?y",  
		      "http://a/b/c/d;p?y",
		      "g?y",  
		      "http://a/b/c/g?y",
		      "#s",  
		      "http://a/b/c/d;p?q#s",
		      "g#s",  
		      "http://a/b/c/g#s",
		      "g?y#s",  
		      "http://a/b/c/g?y#s",
		      ";x",  
		      "http://a/b/c/;x",
		      "g;x",  
		      "http://a/b/c/g;x",
		      "g;x?y#s",  
		      "http://a/b/c/g;x?y#s",
		      "",  
		      "http://a/b/c/d;p?q",
		      ".",  
		      "http://a/b/c/",
		      "./",  
		      "http://a/b/c/",
		      "..",  
		      "http://a/b/",
		      "../",  
		      "http://a/b/",
		      "../g",  
		      "http://a/b/g",
		      "../..",  
		      "http://a/",
		      "../../",  
		      "http://a/",
		      "../../g",  
		      "http://a/g",
		      "/./g",  
		      "http://a/g",
		      "/../g",  
		      "http://a/g",
		      "g.",  
		      "http://a/b/c/g.",
		      ".g",  
		      "http://a/b/c/.g",

		      "g..",  
		      "http://a/b/c/g..",
		      "..g",  
		      "http://a/b/c/..g",

		      "./../g",  
		      "http://a/b/g",
		      "./g/.",  
		      "http://a/b/c/g/",
		      "g/./h",  
		      "http://a/b/c/g/h",
		      "g/../h",  
		      "http://a/b/c/h",
		      "g;x=1/./y",  
		      "http://a/b/c/g;x=1/y",
		      "g;x=1/../y",  
		      "http://a/b/c/y",

		      "g?y/./x",  
		      "http://a/b/c/g?y/./x",
		      "g?y/../x",  
		      "http://a/b/c/g?y/../x",
		      "g#s/./x",  
		      "http://a/b/c/g#s/./x",
		      "g#s/../x",  
		      "http://a/b/c/g#s/../x",

		      "http:g", // 
		      "http://a/b/c/g",

		      "example://a/b/c/%7Bfoo%7D",  // 6.2.2
		      "eXAMPLE://a/./b/../b/%63/%7bfoo%7d",

		      "http://example.com", // 6.2.3
		      "http://example.com/",
		      "http://example.com:/",
		      "http://example.com:80/",

		      "http://example.com/data",  // 6.2.4
		      "http://example.com/data/",

		      "ftp://cnn.example.com&story=breaking_news@10.0.0.1/top_story.htm",  // 7.6

		      "http://example.com/",  // App C

		      "http://www.w3.org/Addressing/",  // App C
		      "ftp://foo.example.com/rfc/",
		      "http://www.ics.uci.edu/pub/ietf/uri/historical.html#WARNING",

		      // draft WAH5 doc
		      "about:blank",
		      "//example.com/a^b\\ux263Ac%FFd%z/?e",
		      "//example.com/a%5Eb%E2%98%BAc%FFd%z/?e",
		      "x://[v42.3]:2323]:2323:2323]:2323",

		      // RFC 3987
		      "http://www.w3.org/People/D%C3%BCrst/",
		      "http://www.suignard.com",
		      "http://www.example.org/ros[iso-8859-1]\\xE9"

		      ];

// cases reported as unequal:
// 2/2:./1AB:A:AA:AA::-Z2A/;AA:FF+AA:AA::-Z2A//ZZa


/* TNT arrays:  arrays of strings to be used in generating test strings.
 * Built these arrays with grow_tnt() (from tntgrow.js), starting from the
 * small_sigma and rfc3986_literals arrays in ../testgen/rfc3986.tnt.js,
 * then copied them here.
 */
var TNT0 = ["a", "a", "a", "a", "a", "a", "z", "z", "z", 
	   "A", "A", "A", "A", "A", "A", "Z", "Z", "Z", 
	   "1", "2", "3", "1", "2", "3", "1", "2", "3", 
	   "\"", "%", "<", ">", "`", "{", " ", "}", "|", 
	   "AB", "FF", "abcd", "%9F", "%9f", "%", "%", 
	   "A:", "AB:", "ffef:", "::", "[v42.42.42.42:AA:]", 
	   "ab:CD", "AA:AA", "AA:FF", "[", "]", "254", "39", 
	   "42.42.42.42", ":", "?", "#", "//", ":", "#", "//", 
	   "+", "-", ".", "@", ":", "[", "]", "v", ".", "::", 
	   ":", ".", ".", "1", "2", "25", "/", "/", "//", "/", 
	   "/", "/", "/", "/", "@", ":", ":", "@", "/", "?", "/", 
	   "?", "%", "-", ".", "_", "~", ":", "/", "?", "#", "[", 
	   "]", "@", "!", "$", "&", "'", "(", ")", "*", "+", ",", 
	   ";", "=", "V", 

	    "AB:2#//z@/V", "AB:CDa", "AA:FFaAFFEF::=):", "FF:#a::", // URI
	    "A", "", "-:2", ".AA:FFA1A1",               // hier-part
	    "ZaAB", ".3", "a@A", "",                    // URI-reference
	    "a::.2", "A:a::.22/", "A:/", "a::.2AB:+2",  // absolute-URI 
	    "/~%9F~#", ":2AB", "a@A&//-av", "",         // relative-reference
	    "", "a/", "", "",                           // relative-part
	    "A2", "A3", "a", "a",                       // scheme
	    "", "", "A3=", "3",                         // authority
	    "z:2AB.ZAA", "1A", "1", "",                 // userinfo
	    "", "", "", "",                             // host
	    "", "", "", "3",                            // port
	    "::", "::", "::39", "::39",                 // IPv6address
	    "25", "AA", "2", "3",                       // h16
	    "AB:1", "A:1", "AA:FF", "AA:FFAA",          // ls32
	    "2", "39", "1", "2",                        // dec-octet
	    ".3", "A", "", "",                          // reg-name
	    "", "", "", "AB:1::393//",                  // path
	    "///:", "", "", "",                         // path-abempty
	    "/25//a", "/3254", "/2-:2", "/FFZaAB",      // path-absolute
	    "a/z/", ".42.42.42.4242.42.42.42", "@", "$$", // path-noscheme
	    ":@/a", "39;", "A:1/1zAAA", "AB:1A3",       // path-rootless
	    "", "AA42.42.42.42", "a", "'A~",            // path-empty
	    "1AA:AA25AA:FFAAFF", "Aa", "Z::39", "1",    // segment
	    "FFEF:a2%AB:CDa", "23$", "v1FFEF:", "@.AA:FFA1A1Aa", // segment-nz
	    "2", "A", "13", "3a",                       // segment-nz-nc
	    "3", "3", "1", ";",                         // pchar
	    "", "?3a@.42.42.42.4242.42.42.421", 
	    "", "/3254A3ZaABa::.2AB:+2/1",              // query
	    "FFEF:a2%AB:CDaAA42.42.42.422?AA(", 
	   "A:a::.22/", "", 
	    "3?39?3a@.42.42.42.4242.42.42.421?3a@.42.42.42.4242.42.42.421",  // fragment
	    "1", "1", ".", "3",   // unreserved
	    "(", "/", "#", "$",  // reserved
	    "/", "/", "]", "/",  // gen-delims
	    "*", "*", "$", ";",  // sub-delims
	    "42.42.42.42",       // IPv4address
	    "%39", "%39",        // pct-encoded
	    "[v42.42.42.42:AA:]", "[v42.42.42.42:AA:]",   // IP-literal
	    "242.42.42.42", "42.42.42.42", "42.42.42.42", //IPv4address
	    "[v42.42.42.42:AA:]", "[v42.42.42.42:AA:]",  // IP-literal
	    "%13", 
	    "%25"];    // pct-encoded

var TNT1 = ["a", "a", "a", "a", "a", "a", "z", "z", "z", 
	    "A", "A", "A", "A", "A", "A", "Z", "Z", "Z", 
	    "1", "2", "3", "1", "2", "3", "1", "2", "3", 
	    "\"", "%", "<", ">", "`", "{", " ", "}", 
	    "|", "AB", "FF", "abcd", "%9F", "%9f", "%", "%", 
	    "A:", "AB:", "FFEF:", "::", "[v42.42.42.42:AA:]", "ab:CD", "AA:AA", "AA:FF", 
	    "[", "]", "254", "39", "42.42.42.42", ":", "?", "#", 
	    "//", ":", "#", "//", "+", "-", ".", "@", 
	    ":", "[", "]", "v", ".", "::", ":", ".", 
	    ".", "1", "2", "25", "/", "/", "//", "/", 
	    "/", "/", "/", "/", "@", ":", ":", "@", 
	    "/", "?", "/", "?", "%", "-", ".", "_", 
	    "~", ":", "/", "?", "#", "[", "]", "@", 
	    "!", "$", "&", "'", "(", ")", "*", "+", 
	    ",", ";", "=", "V", 
	    "A:_@A:/Aa39AB/", 
	    "AB:", "abcdFFAA:FF:1@a", "aZAB:/@aAAB:", "/a//", 
	    "A:v_:/Z+v254+2)Z", "/", "/Aa", "=//", 
	    "&$./", "Z/abcd1.", 
	    "Z/abcd1.", "z:", "A:v_:/Z+v254+2)ZZ?%AA:FF/254_.AA:AA&$./:$", 
	    "A:v_:/Z+v254+2)ZZ?%AA:FF/254_.AA:AA&$./:$/A", 
	    "Z:::@~42.42.42.42aZAB:/@aAAB::ab:CD//", "&", "?", "@", 
	    "2-_/Aa?::aA:_@A:/Aa39AB/+Z/abcd1.A:v_:/Z+v254+2)Z/AA:FF", "AB:'3A,", "z/(&$./3", "+.AA:FF", 
	    "Z/abcd1.Z1::2(Z25:%AB:", "z.", "A", "A", 
	    "zZ", "zZ", "2A", "Z", 
	    "A-a", "AB:", "AA:AA", "v", 
	    "~", "A2Z)A", "42.42.42.42", "A-aFFa1z3", 
	    "FFA42.42.42.42", "392", "1", "2", 
	    "1A3", "1", "3A", "AA:AA", 
	    "42.42.42.42", "254", "1", "42.42.42.42", 
	    "3", "A", "a", "-AA:AA3A..aZAB:/@aAAB:FFEF:@v42.42.42.42AA:AAA:_@A:/Aa39AB/", 
	    "z/(&$./3AA:AAA-a1", "/", "::@z./a//", "/", 
	    "/", "//", "/Az.42.42.42.42", "/A11AB/)AB:/Az.42.42.42.42z/(&$./3AA:AAA-a11/39", 
	    "/z/(&$./3AA:AAA-a1;1FFA42.42.42.42A", "/A", "/2", "1A//", 
	    "25~25Z42.42.42.42A2Z)A1A//:://A-a/.", "1", "3", "AA:FF", 
	    "254z././", "Z/abcd1.Z1::2(Z25:%AB://z/(&$./33921+/Aa254+1Z_:/392AA:FF::@z./a//", "Z/abcd1.A:v_:/Z+v254+2)Z.zZz/A11AB/)AB:/Az.42.42.42.42z/(&$./3AA:AAA-a11/39/42.42.42.42254A", "-", 
	    "!", "AB:'3A,", "z25", "AA:FFABa-", 
	    ".FFEF:::v", "z", "@", "A", 
	    "V", "a3AA:FFABa-", ":", "A2Z)A,.", 
	    "42.42.42.42aA1", "v", "A2Z)A", ".", 
	    ".", "A", "!", "3:aZAB:/@aAAB:?'@:+A", 
	    "AB:+.AA:FF3A1!AA:FF/254z././1%3A", 
	    "/!A2Z)AAB:+.AA:FF3A1!AA:FF/254z././1%3A/z/(&$./3AA:AAA-a1;1FFA42.42.42.42Aa?Z/abcd1.Z1::2(Z25:%AB:", 
	    "*/Aa1A//2A/._", "1//_:", 
	    "abcd42.42.42.42aA11AB:+.AA:FF3A1!AA:FF/254z././1%3A", "vFFEF:+.AA:FF1A//*/Aa1A//2A/._", 
	    "3", "v", 
	    "1", "1", "2", "#", "?", 
	    "*", "@", "/", "@", 
	    ":", "]", "!", "3", 
	    "1254", "AA:FF", "21", "1", 
	    "=", "!", "+", "42.42.42.42", 
	    "3AB::", "42.42.42.42", "3AA:AA", "42.42.42.42", 
	    "42.42.42.42", "::", "::", "AA:AA::3", 
	    "vA42.42.42.42$ab:CDA1", "[v42.42.42.42:AA:]", "[v42.42.42.42:AA:]", "[v42.42.42.42:AA:]", 
	    "[v42.42.42.42:AA:]", "vA42.42.42.42$ab:CDA1z1.a", 
	    "vA42.42.42.42$ab:CDA1z1.a$392z25$.", "vA42.42.42.42$ab:CDA1z1.aa", 
	    "%9F", "%9F", "%9F"];

var TNT2 = 
  ["a", "a", "a", "a", "a", "a", "z", "z", "z", 
   "A", "A", "A", "A", "A", "A", "Z", "Z", "Z", 
   "1", "2", "3", "1", "2", "3", "1", "2", "3", 
   "\"", "%", "<", ">", "`", "{", " ", "}", "|", 
   "AB", "FF", "abcd", "%9F", "%9f", "%", "%", "A:", "AB:", 
   "FFEF:", "::", "[v42.42.42.42:AA:]", "ab:CD", "AA:AA", "AA:FF", "[", "]", "254", 
   "39", "42.42.42.42", "\xd2", "\xb0", "\xa2", "   ", "\u0152", "\u0153", "\xa9", 
   ":", "?", "#", "//", ":", "#", "//", "+", "-", 
   ".", "@", ":", "[", "]", "v", ".", "::", ":", ".", ".", "1", 
   "2", "25", "/", "/", "//", "/", "/", "/", "/", "/", "@", ":", 
   ":", "@", "/", "?", "/", "?", "%", "-", ".", "_", "~", ":", 
   "/", "?", "#", "[", "]", "@", "!", "$", "&", "'", "(", ")", 
   "*", "+", ",", ";", "=", "V", "AA:FFZ", "AA:AA::-Z2", "AB:", "zA:A", ":)z254/:", "/2", "/", "./", 
   "AA:AA::-Z2", "/2:./1AB:A:AA:AA::-Z2A/;AA:FF+", "a2A", "2#//", "2a", "242.42.42.42V//+", 
   "254:#Va/", "AA:FF#1/?ab:CD&", "@@FF", "-////Aa;/", ":", "AA:FFZA:25", "Az", 
   "a", "Az", "AB", "AA", "+1abcd", "142.42.42.42", "*Az:25", 
   "a", "v.", ":25", "abcd", "V", "225", "2", "V", "2", "2", "A", "2", "1", 
   "2", "3", "3", "2", "Z", "32", "Z;", "2", "zAB/", ":22_", "AA:FF./225", "/:)z254/:2abcd3,aA", 
   "/2:./1AB:A:AA:AA::-Z2A/;AA:FF+AA:AA::-Z2A//ZZa", "//", "/2a225", "//A2./", 
   "/:)z254/:2abcd3,aA/:)z254/:2abcd3,aA:22_azAA:FFZv.25=/2:./1AB:A:AA:AA::-Z2A/;AA:FF+AA:AA::-Z2A//ZZa", 
   "/-", "/:)z254/:2abcd3,aA//2@@FF", 
   "/:)z254/:2abcd3,aA//2@@FF", "254@2aA2&//2", "32//a", ".", "Az32//aAv.", 
   ".32//a.", "@AzFFEF://", "1", ".A:)z254/:abcdA1", 
   "Aab:CD", "a", "1abcd", ".", "AA@", "~ab:CD", "a", ".3942.42.42.42", 
   "2", "Z;", "az1~ab:CDv.::2A:25@", "A:AA:AA@+", ";A", ".", "&", 
   "Aa", "+", ".", ":", "a", ";3322VAa??AB:39.Z;21", "FFEF:", "Z_+/", "Az", "32abcd3!1-//Az", 
   "1+", "3a(.2/:)z254/:2abcd3,aA//2@@FFAAAz(:ab:CD3zAB/;A@AzFFEF://242.42.42.42V//+3", 
   ";AFFEF:32abcd3!1-//Az", "3", "V", "2", "1", "/", "/", "[", "[", "[", "/", "/", 
   "[", "=", "A:AA:AA@+", "A:v@//::+AA:AA::-Z2", "2", "3", "3", "AA:FF", 
   "A:abcd/", "A:abcd/ZAA:AA-a=Az/:)z254/:2abcd3,aA//2@@FF1+", "2AA:A", "&", 
   "+", "$", "[v42.42.42.42:AA:]", "[v42.42.42.42:AA:]", 
   "2AA:A", "AA:AA", "[v42.42.42.42:AA:]", "3::", 
   "%9F", "[v42.42.42.42:AA:]", "142.42.42.42", "::25", 
   "::", "142.42.42.42", "%9F", "%9F", 
   "2::2AA:A", "42.42.42.42", "%9F", "42.42.42.42"];


var mp_NT_Regex = [];
var mp_n_prop = [];

mp_n_prop['URI'] = ['string', 'scheme','authority', 'userinfo', 'host',
		    'port', 'path-abempty', 'path-absolute', 'path-rootless', 'path-empty',
		    'query','fragment'
		    ];

// regex for URI, with requests to look for
// scheme authority host userinfo port path-abempty path-absolute path-noscheme path-rootless path-empty query fragment
mp_NT_Regex['URI'] = /^(?:((?:(?:[A-Z]|[a-z])(?:(?:[A-Z]|[a-z])|[0-9]|\+|\-|\.){0,}))\:(?:(?:\/\/((?:(?:((?:(?:(?:[A-Z]|[a-z])|[0-9]|\-|\.|\_|\~)|(?:\%(?:[0-9]|A|B|C|D|E|F)(?:[0-9]|A|B|C|D|E|F))|(?:\!|\$|\&|\'|\(|\)|\*|\+|\,|\;|\=)|\:){0,})\@)?((?:(?:\[(?:(?:(?:(?:(?:[0-9]|A|B|C|D|E|F){1,4}\:){6}(?:(?:(?:[0-9]|A|B|C|D|E|F){1,4}\:(?:[0-9]|A|B|C|D|E|F){1,4})|(?:(?:[0-9]|(?:[1-9][0-9])|(?:1[0-9]{2})|(?:2[0-4][0-9])|(?:25[0-5]))\.(?:[0-9]|(?:[1-9][0-9])|(?:1[0-9]{2})|(?:2[0-4][0-9])|(?:25[0-5]))\.(?:[0-9]|(?:[1-9][0-9])|(?:1[0-9]{2})|(?:2[0-4][0-9])|(?:25[0-5]))\.(?:[0-9]|(?:[1-9][0-9])|(?:1[0-9]{2})|(?:2[0-4][0-9])|(?:25[0-5])))))|(?:\:\:(?:(?:[0-9]|A|B|C|D|E|F){1,4}\:){5}(?:(?:(?:[0-9]|A|B|C|D|E|F){1,4}\:(?:[0-9]|A|B|C|D|E|F){1,4})|(?:(?:[0-9]|(?:[1-9][0-9])|(?:1[0-9]{2})|(?:2[0-4][0-9])|(?:25[0-5]))\.(?:[0-9]|(?:[1-9][0-9])|(?:1[0-9]{2})|(?:2[0-4][0-9])|(?:25[0-5]))\.(?:[0-9]|(?:[1-9][0-9])|(?:1[0-9]{2})|(?:2[0-4][0-9])|(?:25[0-5]))\.(?:[0-9]|(?:[1-9][0-9])|(?:1[0-9]{2})|(?:2[0-4][0-9])|(?:25[0-5])))))|(?:(?:[0-9]|A|B|C|D|E|F){1,4}?\:\:(?:(?:[0-9]|A|B|C|D|E|F){1,4}\:){4}(?:(?:(?:[0-9]|A|B|C|D|E|F){1,4}\:(?:[0-9]|A|B|C|D|E|F){1,4})|(?:(?:[0-9]|(?:[1-9][0-9])|(?:1[0-9]{2})|(?:2[0-4][0-9])|(?:25[0-5]))\.(?:[0-9]|(?:[1-9][0-9])|(?:1[0-9]{2})|(?:2[0-4][0-9])|(?:25[0-5]))\.(?:[0-9]|(?:[1-9][0-9])|(?:1[0-9]{2})|(?:2[0-4][0-9])|(?:25[0-5]))\.(?:[0-9]|(?:[1-9][0-9])|(?:1[0-9]{2})|(?:2[0-4][0-9])|(?:25[0-5])))))|(?:(?:(?:(?:[0-9]|A|B|C|D|E|F){1,4}\:){0,1}(?:[0-9]|A|B|C|D|E|F){1,4})?\:\:(?:(?:[0-9]|A|B|C|D|E|F){1,4}\:){3}(?:(?:(?:[0-9]|A|B|C|D|E|F){1,4}\:(?:[0-9]|A|B|C|D|E|F){1,4})|(?:(?:[0-9]|(?:[1-9][0-9])|(?:1[0-9]{2})|(?:2[0-4][0-9])|(?:25[0-5]))\.(?:[0-9]|(?:[1-9][0-9])|(?:1[0-9]{2})|(?:2[0-4][0-9])|(?:25[0-5]))\.(?:[0-9]|(?:[1-9][0-9])|(?:1[0-9]{2})|(?:2[0-4][0-9])|(?:25[0-5]))\.(?:[0-9]|(?:[1-9][0-9])|(?:1[0-9]{2})|(?:2[0-4][0-9])|(?:25[0-5])))))|(?:(?:(?:(?:[0-9]|A|B|C|D|E|F){1,4}\:){0,2}(?:[0-9]|A|B|C|D|E|F){1,4})?\:\:(?:(?:[0-9]|A|B|C|D|E|F){1,4}\:){2}(?:(?:(?:[0-9]|A|B|C|D|E|F){1,4}\:(?:[0-9]|A|B|C|D|E|F){1,4})|(?:(?:[0-9]|(?:[1-9][0-9])|(?:1[0-9]{2})|(?:2[0-4][0-9])|(?:25[0-5]))\.(?:[0-9]|(?:[1-9][0-9])|(?:1[0-9]{2})|(?:2[0-4][0-9])|(?:25[0-5]))\.(?:[0-9]|(?:[1-9][0-9])|(?:1[0-9]{2})|(?:2[0-4][0-9])|(?:25[0-5]))\.(?:[0-9]|(?:[1-9][0-9])|(?:1[0-9]{2})|(?:2[0-4][0-9])|(?:25[0-5])))))|(?:(?:(?:(?:[0-9]|A|B|C|D|E|F){1,4}\:){0,3}(?:[0-9]|A|B|C|D|E|F){1,4})?\:\:(?:[0-9]|A|B|C|D|E|F){1,4}\:(?:(?:(?:[0-9]|A|B|C|D|E|F){1,4}\:(?:[0-9]|A|B|C|D|E|F){1,4})|(?:(?:[0-9]|(?:[1-9][0-9])|(?:1[0-9]{2})|(?:2[0-4][0-9])|(?:25[0-5]))\.(?:[0-9]|(?:[1-9][0-9])|(?:1[0-9]{2})|(?:2[0-4][0-9])|(?:25[0-5]))\.(?:[0-9]|(?:[1-9][0-9])|(?:1[0-9]{2})|(?:2[0-4][0-9])|(?:25[0-5]))\.(?:[0-9]|(?:[1-9][0-9])|(?:1[0-9]{2})|(?:2[0-4][0-9])|(?:25[0-5])))))|(?:(?:(?:(?:[0-9]|A|B|C|D|E|F){1,4}\:){0,4}(?:[0-9]|A|B|C|D|E|F){1,4})?\:\:(?:(?:(?:[0-9]|A|B|C|D|E|F){1,4}\:(?:[0-9]|A|B|C|D|E|F){1,4})|(?:(?:[0-9]|(?:[1-9][0-9])|(?:1[0-9]{2})|(?:2[0-4][0-9])|(?:25[0-5]))\.(?:[0-9]|(?:[1-9][0-9])|(?:1[0-9]{2})|(?:2[0-4][0-9])|(?:25[0-5]))\.(?:[0-9]|(?:[1-9][0-9])|(?:1[0-9]{2})|(?:2[0-4][0-9])|(?:25[0-5]))\.(?:[0-9]|(?:[1-9][0-9])|(?:1[0-9]{2})|(?:2[0-4][0-9])|(?:25[0-5])))))|(?:(?:(?:(?:[0-9]|A|B|C|D|E|F){1,4}\:){0,5}(?:[0-9]|A|B|C|D|E|F){1,4})?\:\:(?:[0-9]|A|B|C|D|E|F){1,4})|(?:(?:(?:(?:[0-9]|A|B|C|D|E|F){1,4}\:){0,6}(?:[0-9]|A|B|C|D|E|F){1,4})?\:\:))|(?:v(?:[0-9]|A|B|C|D|E|F){1,}\.(?:(?:(?:[A-Z]|[a-z])|[0-9]|\-|\.|\_|\~)|(?:\!|\$|\&|\'|\(|\)|\*|\+|\,|\;|\=)|\:){1,}))\])|(?:(?:[0-9]|(?:[1-9][0-9])|(?:1[0-9]{2})|(?:2[0-4][0-9])|(?:25[0-5]))\.(?:[0-9]|(?:[1-9][0-9])|(?:1[0-9]{2})|(?:2[0-4][0-9])|(?:25[0-5]))\.(?:[0-9]|(?:[1-9][0-9])|(?:1[0-9]{2})|(?:2[0-4][0-9])|(?:25[0-5]))\.(?:[0-9]|(?:[1-9][0-9])|(?:1[0-9]{2})|(?:2[0-4][0-9])|(?:25[0-5])))|(?:(?:(?:[A-Z]|[a-z])|[0-9]|\-|\.|\_|\~)|(?:\%(?:[0-9]|A|B|C|D|E|F)(?:[0-9]|A|B|C|D|E|F))|(?:\!|\$|\&|\'|\(|\)|\*|\+|\,|\;|\=)){0,}))(?:\:([0-9]{0,}))?))((?:\/(?:(?:(?:[A-Z]|[a-z])|[0-9]|\-|\.|\_|\~)|(?:\%(?:[0-9]|A|B|C|D|E|F)(?:[0-9]|A|B|C|D|E|F))|(?:\!|\$|\&|\'|\(|\)|\*|\+|\,|\;|\=)|\:|\@){0,}){0,}))|((?:\/(?:(?:(?:(?:[A-Z]|[a-z])|[0-9]|\-|\.|\_|\~)|(?:\%(?:[0-9]|A|B|C|D|E|F)(?:[0-9]|A|B|C|D|E|F))|(?:\!|\$|\&|\'|\(|\)|\*|\+|\,|\;|\=)|\:|\@){1,}(?:\/(?:(?:(?:[A-Z]|[a-z])|[0-9]|\-|\.|\_|\~)|(?:\%(?:[0-9]|A|B|C|D|E|F)(?:[0-9]|A|B|C|D|E|F))|(?:\!|\$|\&|\'|\(|\)|\*|\+|\,|\;|\=)|\:|\@){0,}){0,})?))|((?:(?:(?:(?:[A-Z]|[a-z])|[0-9]|\-|\.|\_|\~)|(?:\%(?:[0-9]|A|B|C|D|E|F)(?:[0-9]|A|B|C|D|E|F))|(?:\!|\$|\&|\'|\(|\)|\*|\+|\,|\;|\=)|\:|\@){1,}(?:\/(?:(?:(?:[A-Z]|[a-z])|[0-9]|\-|\.|\_|\~)|(?:\%(?:[0-9]|A|B|C|D|E|F)(?:[0-9]|A|B|C|D|E|F))|(?:\!|\$|\&|\'|\(|\)|\*|\+|\,|\;|\=)|\:|\@){0,}){0,}))|((?:(?:(?:[A-Z]|[a-z])|[0-9]|\-|\.|\_|\~)|(?:\%(?:[0-9]|A|B|C|D|E|F)(?:[0-9]|A|B|C|D|E|F))|(?:\!|\$|\&|\'|\(|\)|\*|\+|\,|\;|\=)|\:|\@){0}))(?:\?((?:(?:(?:(?:[A-Z]|[a-z])|[0-9]|\-|\.|\_|\~)|(?:\%(?:[0-9]|A|B|C|D|E|F)(?:[0-9]|A|B|C|D|E|F))|(?:\!|\$|\&|\'|\(|\)|\*|\+|\,|\;|\=)|\:|\@)|\/|\?){0,}))?(?:\#((?:(?:(?:(?:[A-Z]|[a-z])|[0-9]|\-|\.|\_|\~)|(?:\%(?:[0-9]|A|B|C|D|E|F)(?:[0-9]|A|B|C|D|E|F))|(?:\!|\$|\&|\'|\(|\)|\*|\+|\,|\;|\=)|\:|\@)|\/|\?){0,}))?)$/;


mp_n_prop['URI-reference'] = ['string', 'scheme','authority', 'userinfo', 'host',
			      'port', 'path-abempty', 'path-absolute', 'path-rootless', 'path-empty',
			      'query','fragment','authority', 'userinfo', 'host',
			      'port', 'path-abempty', 'path-absolute', 'path-rootless', 'path-empty',
			      'query','fragment'
		    ];

// Regex for URI-reference, requesting same non-terminals
// scheme authority host port userinfo path-abempty path-absolute path-noscheme path-rootless path-empty query fragment
mp_NT_Regex['URI-reference'] = /^(?:(?:((?:(?:[A-Z]|[a-z])(?:(?:[A-Z]|[a-z])|[0-9]|\+|\-|\.){0,}))\:(?:(?:\/\/((?:(?:((?:(?:(?:[A-Z]|[a-z])|[0-9]|\-|\.|\_|\~)|(?:\%(?:[0-9]|A|B|C|D|E|F)(?:[0-9]|A|B|C|D|E|F))|(?:\!|\$|\&|\'|\(|\)|\*|\+|\,|\;|\=)|\:){0,})\@)?((?:(?:\[(?:(?:(?:(?:(?:[0-9]|A|B|C|D|E|F){1,4}\:){6}(?:(?:(?:[0-9]|A|B|C|D|E|F){1,4}\:(?:[0-9]|A|B|C|D|E|F){1,4})|(?:(?:[0-9]|(?:[1-9][0-9])|(?:1[0-9]{2})|(?:2[0-4][0-9])|(?:25[0-5]))\.(?:[0-9]|(?:[1-9][0-9])|(?:1[0-9]{2})|(?:2[0-4][0-9])|(?:25[0-5]))\.(?:[0-9]|(?:[1-9][0-9])|(?:1[0-9]{2})|(?:2[0-4][0-9])|(?:25[0-5]))\.(?:[0-9]|(?:[1-9][0-9])|(?:1[0-9]{2})|(?:2[0-4][0-9])|(?:25[0-5])))))|(?:\:\:(?:(?:[0-9]|A|B|C|D|E|F){1,4}\:){5}(?:(?:(?:[0-9]|A|B|C|D|E|F){1,4}\:(?:[0-9]|A|B|C|D|E|F){1,4})|(?:(?:[0-9]|(?:[1-9][0-9])|(?:1[0-9]{2})|(?:2[0-4][0-9])|(?:25[0-5]))\.(?:[0-9]|(?:[1-9][0-9])|(?:1[0-9]{2})|(?:2[0-4][0-9])|(?:25[0-5]))\.(?:[0-9]|(?:[1-9][0-9])|(?:1[0-9]{2})|(?:2[0-4][0-9])|(?:25[0-5]))\.(?:[0-9]|(?:[1-9][0-9])|(?:1[0-9]{2})|(?:2[0-4][0-9])|(?:25[0-5])))))|(?:(?:[0-9]|A|B|C|D|E|F){1,4}?\:\:(?:(?:[0-9]|A|B|C|D|E|F){1,4}\:){4}(?:(?:(?:[0-9]|A|B|C|D|E|F){1,4}\:(?:[0-9]|A|B|C|D|E|F){1,4})|(?:(?:[0-9]|(?:[1-9][0-9])|(?:1[0-9]{2})|(?:2[0-4][0-9])|(?:25[0-5]))\.(?:[0-9]|(?:[1-9][0-9])|(?:1[0-9]{2})|(?:2[0-4][0-9])|(?:25[0-5]))\.(?:[0-9]|(?:[1-9][0-9])|(?:1[0-9]{2})|(?:2[0-4][0-9])|(?:25[0-5]))\.(?:[0-9]|(?:[1-9][0-9])|(?:1[0-9]{2})|(?:2[0-4][0-9])|(?:25[0-5])))))|(?:(?:(?:(?:[0-9]|A|B|C|D|E|F){1,4}\:){0,1}(?:[0-9]|A|B|C|D|E|F){1,4})?\:\:(?:(?:[0-9]|A|B|C|D|E|F){1,4}\:){3}(?:(?:(?:[0-9]|A|B|C|D|E|F){1,4}\:(?:[0-9]|A|B|C|D|E|F){1,4})|(?:(?:[0-9]|(?:[1-9][0-9])|(?:1[0-9]{2})|(?:2[0-4][0-9])|(?:25[0-5]))\.(?:[0-9]|(?:[1-9][0-9])|(?:1[0-9]{2})|(?:2[0-4][0-9])|(?:25[0-5]))\.(?:[0-9]|(?:[1-9][0-9])|(?:1[0-9]{2})|(?:2[0-4][0-9])|(?:25[0-5]))\.(?:[0-9]|(?:[1-9][0-9])|(?:1[0-9]{2})|(?:2[0-4][0-9])|(?:25[0-5])))))|(?:(?:(?:(?:[0-9]|A|B|C|D|E|F){1,4}\:){0,2}(?:[0-9]|A|B|C|D|E|F){1,4})?\:\:(?:(?:[0-9]|A|B|C|D|E|F){1,4}\:){2}(?:(?:(?:[0-9]|A|B|C|D|E|F){1,4}\:(?:[0-9]|A|B|C|D|E|F){1,4})|(?:(?:[0-9]|(?:[1-9][0-9])|(?:1[0-9]{2})|(?:2[0-4][0-9])|(?:25[0-5]))\.(?:[0-9]|(?:[1-9][0-9])|(?:1[0-9]{2})|(?:2[0-4][0-9])|(?:25[0-5]))\.(?:[0-9]|(?:[1-9][0-9])|(?:1[0-9]{2})|(?:2[0-4][0-9])|(?:25[0-5]))\.(?:[0-9]|(?:[1-9][0-9])|(?:1[0-9]{2})|(?:2[0-4][0-9])|(?:25[0-5])))))|(?:(?:(?:(?:[0-9]|A|B|C|D|E|F){1,4}\:){0,3}(?:[0-9]|A|B|C|D|E|F){1,4})?\:\:(?:[0-9]|A|B|C|D|E|F){1,4}\:(?:(?:(?:[0-9]|A|B|C|D|E|F){1,4}\:(?:[0-9]|A|B|C|D|E|F){1,4})|(?:(?:[0-9]|(?:[1-9][0-9])|(?:1[0-9]{2})|(?:2[0-4][0-9])|(?:25[0-5]))\.(?:[0-9]|(?:[1-9][0-9])|(?:1[0-9]{2})|(?:2[0-4][0-9])|(?:25[0-5]))\.(?:[0-9]|(?:[1-9][0-9])|(?:1[0-9]{2})|(?:2[0-4][0-9])|(?:25[0-5]))\.(?:[0-9]|(?:[1-9][0-9])|(?:1[0-9]{2})|(?:2[0-4][0-9])|(?:25[0-5])))))|(?:(?:(?:(?:[0-9]|A|B|C|D|E|F){1,4}\:){0,4}(?:[0-9]|A|B|C|D|E|F){1,4})?\:\:(?:(?:(?:[0-9]|A|B|C|D|E|F){1,4}\:(?:[0-9]|A|B|C|D|E|F){1,4})|(?:(?:[0-9]|(?:[1-9][0-9])|(?:1[0-9]{2})|(?:2[0-4][0-9])|(?:25[0-5]))\.(?:[0-9]|(?:[1-9][0-9])|(?:1[0-9]{2})|(?:2[0-4][0-9])|(?:25[0-5]))\.(?:[0-9]|(?:[1-9][0-9])|(?:1[0-9]{2})|(?:2[0-4][0-9])|(?:25[0-5]))\.(?:[0-9]|(?:[1-9][0-9])|(?:1[0-9]{2})|(?:2[0-4][0-9])|(?:25[0-5])))))|(?:(?:(?:(?:[0-9]|A|B|C|D|E|F){1,4}\:){0,5}(?:[0-9]|A|B|C|D|E|F){1,4})?\:\:(?:[0-9]|A|B|C|D|E|F){1,4})|(?:(?:(?:(?:[0-9]|A|B|C|D|E|F){1,4}\:){0,6}(?:[0-9]|A|B|C|D|E|F){1,4})?\:\:))|(?:v(?:[0-9]|A|B|C|D|E|F){1,}\.(?:(?:(?:[A-Z]|[a-z])|[0-9]|\-|\.|\_|\~)|(?:\!|\$|\&|\'|\(|\)|\*|\+|\,|\;|\=)|\:){1,}))\])|(?:(?:[0-9]|(?:[1-9][0-9])|(?:1[0-9]{2})|(?:2[0-4][0-9])|(?:25[0-5]))\.(?:[0-9]|(?:[1-9][0-9])|(?:1[0-9]{2})|(?:2[0-4][0-9])|(?:25[0-5]))\.(?:[0-9]|(?:[1-9][0-9])|(?:1[0-9]{2})|(?:2[0-4][0-9])|(?:25[0-5]))\.(?:[0-9]|(?:[1-9][0-9])|(?:1[0-9]{2})|(?:2[0-4][0-9])|(?:25[0-5])))|(?:(?:(?:[A-Z]|[a-z])|[0-9]|\-|\.|\_|\~)|(?:\%(?:[0-9]|A|B|C|D|E|F)(?:[0-9]|A|B|C|D|E|F))|(?:\!|\$|\&|\'|\(|\)|\*|\+|\,|\;|\=)){0,}))(?:\:([0-9]{0,}))?))((?:\/(?:(?:(?:[A-Z]|[a-z])|[0-9]|\-|\.|\_|\~)|(?:\%(?:[0-9]|A|B|C|D|E|F)(?:[0-9]|A|B|C|D|E|F))|(?:\!|\$|\&|\'|\(|\)|\*|\+|\,|\;|\=)|\:|\@){0,}){0,}))|((?:\/(?:(?:(?:(?:[A-Z]|[a-z])|[0-9]|\-|\.|\_|\~)|(?:\%(?:[0-9]|A|B|C|D|E|F)(?:[0-9]|A|B|C|D|E|F))|(?:\!|\$|\&|\'|\(|\)|\*|\+|\,|\;|\=)|\:|\@){1,}(?:\/(?:(?:(?:[A-Z]|[a-z])|[0-9]|\-|\.|\_|\~)|(?:\%(?:[0-9]|A|B|C|D|E|F)(?:[0-9]|A|B|C|D|E|F))|(?:\!|\$|\&|\'|\(|\)|\*|\+|\,|\;|\=)|\:|\@){0,}){0,})?))|((?:(?:(?:(?:[A-Z]|[a-z])|[0-9]|\-|\.|\_|\~)|(?:\%(?:[0-9]|A|B|C|D|E|F)(?:[0-9]|A|B|C|D|E|F))|(?:\!|\$|\&|\'|\(|\)|\*|\+|\,|\;|\=)|\:|\@){1,}(?:\/(?:(?:(?:[A-Z]|[a-z])|[0-9]|\-|\.|\_|\~)|(?:\%(?:[0-9]|A|B|C|D|E|F)(?:[0-9]|A|B|C|D|E|F))|(?:\!|\$|\&|\'|\(|\)|\*|\+|\,|\;|\=)|\:|\@){0,}){0,}))|((?:(?:(?:[A-Z]|[a-z])|[0-9]|\-|\.|\_|\~)|(?:\%(?:[0-9]|A|B|C|D|E|F)(?:[0-9]|A|B|C|D|E|F))|(?:\!|\$|\&|\'|\(|\)|\*|\+|\,|\;|\=)|\:|\@){0}))(?:\?((?:(?:(?:(?:[A-Z]|[a-z])|[0-9]|\-|\.|\_|\~)|(?:\%(?:[0-9]|A|B|C|D|E|F)(?:[0-9]|A|B|C|D|E|F))|(?:\!|\$|\&|\'|\(|\)|\*|\+|\,|\;|\=)|\:|\@)|\/|\?){0,}))?(?:\#((?:(?:(?:(?:[A-Z]|[a-z])|[0-9]|\-|\.|\_|\~)|(?:\%(?:[0-9]|A|B|C|D|E|F)(?:[0-9]|A|B|C|D|E|F))|(?:\!|\$|\&|\'|\(|\)|\*|\+|\,|\;|\=)|\:|\@)|\/|\?){0,}))?)|(?:(?:(?:\/\/((?:(?:((?:(?:(?:[A-Z]|[a-z])|[0-9]|\-|\.|\_|\~)|(?:\%(?:[0-9]|A|B|C|D|E|F)(?:[0-9]|A|B|C|D|E|F))|(?:\!|\$|\&|\'|\(|\)|\*|\+|\,|\;|\=)|\:){0,})\@)?((?:(?:\[(?:(?:(?:(?:(?:[0-9]|A|B|C|D|E|F){1,4}\:){6}(?:(?:(?:[0-9]|A|B|C|D|E|F){1,4}\:(?:[0-9]|A|B|C|D|E|F){1,4})|(?:(?:[0-9]|(?:[1-9][0-9])|(?:1[0-9]{2})|(?:2[0-4][0-9])|(?:25[0-5]))\.(?:[0-9]|(?:[1-9][0-9])|(?:1[0-9]{2})|(?:2[0-4][0-9])|(?:25[0-5]))\.(?:[0-9]|(?:[1-9][0-9])|(?:1[0-9]{2})|(?:2[0-4][0-9])|(?:25[0-5]))\.(?:[0-9]|(?:[1-9][0-9])|(?:1[0-9]{2})|(?:2[0-4][0-9])|(?:25[0-5])))))|(?:\:\:(?:(?:[0-9]|A|B|C|D|E|F){1,4}\:){5}(?:(?:(?:[0-9]|A|B|C|D|E|F){1,4}\:(?:[0-9]|A|B|C|D|E|F){1,4})|(?:(?:[0-9]|(?:[1-9][0-9])|(?:1[0-9]{2})|(?:2[0-4][0-9])|(?:25[0-5]))\.(?:[0-9]|(?:[1-9][0-9])|(?:1[0-9]{2})|(?:2[0-4][0-9])|(?:25[0-5]))\.(?:[0-9]|(?:[1-9][0-9])|(?:1[0-9]{2})|(?:2[0-4][0-9])|(?:25[0-5]))\.(?:[0-9]|(?:[1-9][0-9])|(?:1[0-9]{2})|(?:2[0-4][0-9])|(?:25[0-5])))))|(?:(?:[0-9]|A|B|C|D|E|F){1,4}?\:\:(?:(?:[0-9]|A|B|C|D|E|F){1,4}\:){4}(?:(?:(?:[0-9]|A|B|C|D|E|F){1,4}\:(?:[0-9]|A|B|C|D|E|F){1,4})|(?:(?:[0-9]|(?:[1-9][0-9])|(?:1[0-9]{2})|(?:2[0-4][0-9])|(?:25[0-5]))\.(?:[0-9]|(?:[1-9][0-9])|(?:1[0-9]{2})|(?:2[0-4][0-9])|(?:25[0-5]))\.(?:[0-9]|(?:[1-9][0-9])|(?:1[0-9]{2})|(?:2[0-4][0-9])|(?:25[0-5]))\.(?:[0-9]|(?:[1-9][0-9])|(?:1[0-9]{2})|(?:2[0-4][0-9])|(?:25[0-5])))))|(?:(?:(?:(?:[0-9]|A|B|C|D|E|F){1,4}\:){0,1}(?:[0-9]|A|B|C|D|E|F){1,4})?\:\:(?:(?:[0-9]|A|B|C|D|E|F){1,4}\:){3}(?:(?:(?:[0-9]|A|B|C|D|E|F){1,4}\:(?:[0-9]|A|B|C|D|E|F){1,4})|(?:(?:[0-9]|(?:[1-9][0-9])|(?:1[0-9]{2})|(?:2[0-4][0-9])|(?:25[0-5]))\.(?:[0-9]|(?:[1-9][0-9])|(?:1[0-9]{2})|(?:2[0-4][0-9])|(?:25[0-5]))\.(?:[0-9]|(?:[1-9][0-9])|(?:1[0-9]{2})|(?:2[0-4][0-9])|(?:25[0-5]))\.(?:[0-9]|(?:[1-9][0-9])|(?:1[0-9]{2})|(?:2[0-4][0-9])|(?:25[0-5])))))|(?:(?:(?:(?:[0-9]|A|B|C|D|E|F){1,4}\:){0,2}(?:[0-9]|A|B|C|D|E|F){1,4})?\:\:(?:(?:[0-9]|A|B|C|D|E|F){1,4}\:){2}(?:(?:(?:[0-9]|A|B|C|D|E|F){1,4}\:(?:[0-9]|A|B|C|D|E|F){1,4})|(?:(?:[0-9]|(?:[1-9][0-9])|(?:1[0-9]{2})|(?:2[0-4][0-9])|(?:25[0-5]))\.(?:[0-9]|(?:[1-9][0-9])|(?:1[0-9]{2})|(?:2[0-4][0-9])|(?:25[0-5]))\.(?:[0-9]|(?:[1-9][0-9])|(?:1[0-9]{2})|(?:2[0-4][0-9])|(?:25[0-5]))\.(?:[0-9]|(?:[1-9][0-9])|(?:1[0-9]{2})|(?:2[0-4][0-9])|(?:25[0-5])))))|(?:(?:(?:(?:[0-9]|A|B|C|D|E|F){1,4}\:){0,3}(?:[0-9]|A|B|C|D|E|F){1,4})?\:\:(?:[0-9]|A|B|C|D|E|F){1,4}\:(?:(?:(?:[0-9]|A|B|C|D|E|F){1,4}\:(?:[0-9]|A|B|C|D|E|F){1,4})|(?:(?:[0-9]|(?:[1-9][0-9])|(?:1[0-9]{2})|(?:2[0-4][0-9])|(?:25[0-5]))\.(?:[0-9]|(?:[1-9][0-9])|(?:1[0-9]{2})|(?:2[0-4][0-9])|(?:25[0-5]))\.(?:[0-9]|(?:[1-9][0-9])|(?:1[0-9]{2})|(?:2[0-4][0-9])|(?:25[0-5]))\.(?:[0-9]|(?:[1-9][0-9])|(?:1[0-9]{2})|(?:2[0-4][0-9])|(?:25[0-5])))))|(?:(?:(?:(?:[0-9]|A|B|C|D|E|F){1,4}\:){0,4}(?:[0-9]|A|B|C|D|E|F){1,4})?\:\:(?:(?:(?:[0-9]|A|B|C|D|E|F){1,4}\:(?:[0-9]|A|B|C|D|E|F){1,4})|(?:(?:[0-9]|(?:[1-9][0-9])|(?:1[0-9]{2})|(?:2[0-4][0-9])|(?:25[0-5]))\.(?:[0-9]|(?:[1-9][0-9])|(?:1[0-9]{2})|(?:2[0-4][0-9])|(?:25[0-5]))\.(?:[0-9]|(?:[1-9][0-9])|(?:1[0-9]{2})|(?:2[0-4][0-9])|(?:25[0-5]))\.(?:[0-9]|(?:[1-9][0-9])|(?:1[0-9]{2})|(?:2[0-4][0-9])|(?:25[0-5])))))|(?:(?:(?:(?:[0-9]|A|B|C|D|E|F){1,4}\:){0,5}(?:[0-9]|A|B|C|D|E|F){1,4})?\:\:(?:[0-9]|A|B|C|D|E|F){1,4})|(?:(?:(?:(?:[0-9]|A|B|C|D|E|F){1,4}\:){0,6}(?:[0-9]|A|B|C|D|E|F){1,4})?\:\:))|(?:v(?:[0-9]|A|B|C|D|E|F){1,}\.(?:(?:(?:[A-Z]|[a-z])|[0-9]|\-|\.|\_|\~)|(?:\!|\$|\&|\'|\(|\)|\*|\+|\,|\;|\=)|\:){1,}))\])|(?:(?:[0-9]|(?:[1-9][0-9])|(?:1[0-9]{2})|(?:2[0-4][0-9])|(?:25[0-5]))\.(?:[0-9]|(?:[1-9][0-9])|(?:1[0-9]{2})|(?:2[0-4][0-9])|(?:25[0-5]))\.(?:[0-9]|(?:[1-9][0-9])|(?:1[0-9]{2})|(?:2[0-4][0-9])|(?:25[0-5]))\.(?:[0-9]|(?:[1-9][0-9])|(?:1[0-9]{2})|(?:2[0-4][0-9])|(?:25[0-5])))|(?:(?:(?:[A-Z]|[a-z])|[0-9]|\-|\.|\_|\~)|(?:\%(?:[0-9]|A|B|C|D|E|F)(?:[0-9]|A|B|C|D|E|F))|(?:\!|\$|\&|\'|\(|\)|\*|\+|\,|\;|\=)){0,}))(?:\:([0-9]{0,}))?))((?:\/(?:(?:(?:[A-Z]|[a-z])|[0-9]|\-|\.|\_|\~)|(?:\%(?:[0-9]|A|B|C|D|E|F)(?:[0-9]|A|B|C|D|E|F))|(?:\!|\$|\&|\'|\(|\)|\*|\+|\,|\;|\=)|\:|\@){0,}){0,}))|((?:\/(?:(?:(?:(?:[A-Z]|[a-z])|[0-9]|\-|\.|\_|\~)|(?:\%(?:[0-9]|A|B|C|D|E|F)(?:[0-9]|A|B|C|D|E|F))|(?:\!|\$|\&|\'|\(|\)|\*|\+|\,|\;|\=)|\:|\@){1,}(?:\/(?:(?:(?:[A-Z]|[a-z])|[0-9]|\-|\.|\_|\~)|(?:\%(?:[0-9]|A|B|C|D|E|F)(?:[0-9]|A|B|C|D|E|F))|(?:\!|\$|\&|\'|\(|\)|\*|\+|\,|\;|\=)|\:|\@){0,}){0,})?))|((?:(?:(?:(?:[A-Z]|[a-z])|[0-9]|\-|\.|\_|\~)|(?:\%(?:[0-9]|A|B|C|D|E|F)(?:[0-9]|A|B|C|D|E|F))|(?:\!|\$|\&|\'|\(|\)|\*|\+|\,|\;|\=)|\@){1,}(?:\/(?:(?:(?:[A-Z]|[a-z])|[0-9]|\-|\.|\_|\~)|(?:\%(?:[0-9]|A|B|C|D|E|F)(?:[0-9]|A|B|C|D|E|F))|(?:\!|\$|\&|\'|\(|\)|\*|\+|\,|\;|\=)|\:|\@){0,}){0,}))|((?:(?:(?:[A-Z]|[a-z])|[0-9]|\-|\.|\_|\~)|(?:\%(?:[0-9]|A|B|C|D|E|F)(?:[0-9]|A|B|C|D|E|F))|(?:\!|\$|\&|\'|\(|\)|\*|\+|\,|\;|\=)|\:|\@){0}))(?:\?((?:(?:(?:(?:[A-Z]|[a-z])|[0-9]|\-|\.|\_|\~)|(?:\%(?:[0-9]|A|B|C|D|E|F)(?:[0-9]|A|B|C|D|E|F))|(?:\!|\$|\&|\'|\(|\)|\*|\+|\,|\;|\=)|\:|\@)|\/|\?){0,}))?(?:\#((?:(?:(?:(?:[A-Z]|[a-z])|[0-9]|\-|\.|\_|\~)|(?:\%(?:[0-9]|A|B|C|D|E|F)(?:[0-9]|A|B|C|D|E|F))|(?:\!|\$|\&|\'|\(|\)|\*|\+|\,|\;|\=)|\:|\@)|\/|\?){0,}))?))$/;


mp_n_prop['URI-reference-AppB'] = ['string', 'scheme','authority', 'path', 'query','fragment' ];
mp_NT_Regex['URI-reference-AppB'] = /^(?:([^:\/?#]+):)?(?:\/\/([^\/?#]*))?([^?#]*)(?:\?([^#]*))?(?:#(.*))?$/; 


mp_NT_Regex['URI-reference-H5'] = /^(?:(?:((?:(?:[A-Z]|[a-z])(?:(?:[A-Z]|[a-z])|[0-9]|\+|\-|\.){0,}))\:(?:(?:\/\/((?:(?:((?:(?:(?:[A-Z]|[a-z])|[0-9]|\-|\.|\_|\~|[\x00- ]|[\"]|[\<]|[\>]|[\[-\^]|[\`]|[\{-\}]|[\x7F-\uFFFF])|(?:\%|(?:\%(?:[0-9]|A|B|C|D|E|F)(?:[0-9]|A|B|C|D|E|F)))|(?:\!|\$|\&|\'|\(|\)|\*|\+|\,|\;|\=)|\:){0,})\@)?((?:(?:\[(?:(?:(?:(?:(?:[0-9]|A|B|C|D|E|F){1,4}\:){6}(?:(?:(?:[0-9]|A|B|C|D|E|F){1,4}\:(?:[0-9]|A|B|C|D|E|F){1,4})|(?:(?:[0-9]|(?:[1-9][0-9])|(?:1[0-9]{2})|(?:2[0-4][0-9])|(?:25[0-5]))\.(?:[0-9]|(?:[1-9][0-9])|(?:1[0-9]{2})|(?:2[0-4][0-9])|(?:25[0-5]))\.(?:[0-9]|(?:[1-9][0-9])|(?:1[0-9]{2})|(?:2[0-4][0-9])|(?:25[0-5]))\.(?:[0-9]|(?:[1-9][0-9])|(?:1[0-9]{2})|(?:2[0-4][0-9])|(?:25[0-5])))))|(?:\:\:(?:(?:[0-9]|A|B|C|D|E|F){1,4}\:){5}(?:(?:(?:[0-9]|A|B|C|D|E|F){1,4}\:(?:[0-9]|A|B|C|D|E|F){1,4})|(?:(?:[0-9]|(?:[1-9][0-9])|(?:1[0-9]{2})|(?:2[0-4][0-9])|(?:25[0-5]))\.(?:[0-9]|(?:[1-9][0-9])|(?:1[0-9]{2})|(?:2[0-4][0-9])|(?:25[0-5]))\.(?:[0-9]|(?:[1-9][0-9])|(?:1[0-9]{2})|(?:2[0-4][0-9])|(?:25[0-5]))\.(?:[0-9]|(?:[1-9][0-9])|(?:1[0-9]{2})|(?:2[0-4][0-9])|(?:25[0-5])))))|(?:(?:[0-9]|A|B|C|D|E|F){1,4}?\:\:(?:(?:[0-9]|A|B|C|D|E|F){1,4}\:){4}(?:(?:(?:[0-9]|A|B|C|D|E|F){1,4}\:(?:[0-9]|A|B|C|D|E|F){1,4})|(?:(?:[0-9]|(?:[1-9][0-9])|(?:1[0-9]{2})|(?:2[0-4][0-9])|(?:25[0-5]))\.(?:[0-9]|(?:[1-9][0-9])|(?:1[0-9]{2})|(?:2[0-4][0-9])|(?:25[0-5]))\.(?:[0-9]|(?:[1-9][0-9])|(?:1[0-9]{2})|(?:2[0-4][0-9])|(?:25[0-5]))\.(?:[0-9]|(?:[1-9][0-9])|(?:1[0-9]{2})|(?:2[0-4][0-9])|(?:25[0-5])))))|(?:(?:(?:(?:[0-9]|A|B|C|D|E|F){1,4}\:){0,1}(?:[0-9]|A|B|C|D|E|F){1,4})?\:\:(?:(?:[0-9]|A|B|C|D|E|F){1,4}\:){3}(?:(?:(?:[0-9]|A|B|C|D|E|F){1,4}\:(?:[0-9]|A|B|C|D|E|F){1,4})|(?:(?:[0-9]|(?:[1-9][0-9])|(?:1[0-9]{2})|(?:2[0-4][0-9])|(?:25[0-5]))\.(?:[0-9]|(?:[1-9][0-9])|(?:1[0-9]{2})|(?:2[0-4][0-9])|(?:25[0-5]))\.(?:[0-9]|(?:[1-9][0-9])|(?:1[0-9]{2})|(?:2[0-4][0-9])|(?:25[0-5]))\.(?:[0-9]|(?:[1-9][0-9])|(?:1[0-9]{2})|(?:2[0-4][0-9])|(?:25[0-5])))))|(?:(?:(?:(?:[0-9]|A|B|C|D|E|F){1,4}\:){0,2}(?:[0-9]|A|B|C|D|E|F){1,4})?\:\:(?:(?:[0-9]|A|B|C|D|E|F){1,4}\:){2}(?:(?:(?:[0-9]|A|B|C|D|E|F){1,4}\:(?:[0-9]|A|B|C|D|E|F){1,4})|(?:(?:[0-9]|(?:[1-9][0-9])|(?:1[0-9]{2})|(?:2[0-4][0-9])|(?:25[0-5]))\.(?:[0-9]|(?:[1-9][0-9])|(?:1[0-9]{2})|(?:2[0-4][0-9])|(?:25[0-5]))\.(?:[0-9]|(?:[1-9][0-9])|(?:1[0-9]{2})|(?:2[0-4][0-9])|(?:25[0-5]))\.(?:[0-9]|(?:[1-9][0-9])|(?:1[0-9]{2})|(?:2[0-4][0-9])|(?:25[0-5])))))|(?:(?:(?:(?:[0-9]|A|B|C|D|E|F){1,4}\:){0,3}(?:[0-9]|A|B|C|D|E|F){1,4})?\:\:(?:[0-9]|A|B|C|D|E|F){1,4}\:(?:(?:(?:[0-9]|A|B|C|D|E|F){1,4}\:(?:[0-9]|A|B|C|D|E|F){1,4})|(?:(?:[0-9]|(?:[1-9][0-9])|(?:1[0-9]{2})|(?:2[0-4][0-9])|(?:25[0-5]))\.(?:[0-9]|(?:[1-9][0-9])|(?:1[0-9]{2})|(?:2[0-4][0-9])|(?:25[0-5]))\.(?:[0-9]|(?:[1-9][0-9])|(?:1[0-9]{2})|(?:2[0-4][0-9])|(?:25[0-5]))\.(?:[0-9]|(?:[1-9][0-9])|(?:1[0-9]{2})|(?:2[0-4][0-9])|(?:25[0-5])))))|(?:(?:(?:(?:[0-9]|A|B|C|D|E|F){1,4}\:){0,4}(?:[0-9]|A|B|C|D|E|F){1,4})?\:\:(?:(?:(?:[0-9]|A|B|C|D|E|F){1,4}\:(?:[0-9]|A|B|C|D|E|F){1,4})|(?:(?:[0-9]|(?:[1-9][0-9])|(?:1[0-9]{2})|(?:2[0-4][0-9])|(?:25[0-5]))\.(?:[0-9]|(?:[1-9][0-9])|(?:1[0-9]{2})|(?:2[0-4][0-9])|(?:25[0-5]))\.(?:[0-9]|(?:[1-9][0-9])|(?:1[0-9]{2})|(?:2[0-4][0-9])|(?:25[0-5]))\.(?:[0-9]|(?:[1-9][0-9])|(?:1[0-9]{2})|(?:2[0-4][0-9])|(?:25[0-5])))))|(?:(?:(?:(?:[0-9]|A|B|C|D|E|F){1,4}\:){0,5}(?:[0-9]|A|B|C|D|E|F){1,4})?\:\:(?:[0-9]|A|B|C|D|E|F){1,4})|(?:(?:(?:(?:[0-9]|A|B|C|D|E|F){1,4}\:){0,6}(?:[0-9]|A|B|C|D|E|F){1,4})?\:\:))|(?:v(?:[0-9]|A|B|C|D|E|F){1,}\.(?:(?:(?:[A-Z]|[a-z])|[0-9]|\-|\.|\_|\~|[\x00- ]|[\"]|[\<]|[\>]|[\[-\^]|[\`]|[\{-\}]|[\x7F-\uFFFF])|(?:\!|\$|\&|\'|\(|\)|\*|\+|\,|\;|\=)|\:){1,}))\])|(?:(?:[0-9]|(?:[1-9][0-9])|(?:1[0-9]{2})|(?:2[0-4][0-9])|(?:25[0-5]))\.(?:[0-9]|(?:[1-9][0-9])|(?:1[0-9]{2})|(?:2[0-4][0-9])|(?:25[0-5]))\.(?:[0-9]|(?:[1-9][0-9])|(?:1[0-9]{2})|(?:2[0-4][0-9])|(?:25[0-5]))\.(?:[0-9]|(?:[1-9][0-9])|(?:1[0-9]{2})|(?:2[0-4][0-9])|(?:25[0-5])))|(?:(?:(?:[A-Z]|[a-z])|[0-9]|\-|\.|\_|\~|[\x00- ]|[\"]|[\<]|[\>]|[\[-\^]|[\`]|[\{-\}]|[\x7F-\uFFFF])|(?:\%(?:[0-9]|A|B|C|D|E|F)(?:[0-9]|A|B|C|D|E|F))|(?:\!|\$|\&|\'|\(|\)|\*|\+|\,|\;|\=)){0,}))(?:\:([0-9]{0,}))?))((?:\/(?:(?:(?:[A-Z]|[a-z])|[0-9]|\-|\.|\_|\~|[\x00- ]|[\"]|[\<]|[\>]|[\[-\^]|[\`]|[\{-\}]|[\x7F-\uFFFF])|(?:\%|(?:\%(?:[0-9]|A|B|C|D|E|F)(?:[0-9]|A|B|C|D|E|F)))|(?:\!|\$|\&|\'|\(|\)|\*|\+|\,|\;|\=)|\:|\@){0,}){0,}))|((?:\/(?:(?:(?:(?:[A-Z]|[a-z])|[0-9]|\-|\.|\_|\~|[\x00- ]|[\"]|[\<]|[\>]|[\[-\^]|[\`]|[\{-\}]|[\x7F-\uFFFF])|(?:\%|(?:\%(?:[0-9]|A|B|C|D|E|F)(?:[0-9]|A|B|C|D|E|F)))|(?:\!|\$|\&|\'|\(|\)|\*|\+|\,|\;|\=)|\:|\@){1,}(?:\/(?:(?:(?:[A-Z]|[a-z])|[0-9]|\-|\.|\_|\~|[\x00- ]|[\"]|[\<]|[\>]|[\[-\^]|[\`]|[\{-\}]|[\x7F-\uFFFF])|(?:\%|(?:\%(?:[0-9]|A|B|C|D|E|F)(?:[0-9]|A|B|C|D|E|F)))|(?:\!|\$|\&|\'|\(|\)|\*|\+|\,|\;|\=)|\:|\@){0,}){0,})?))|((?:(?:(?:(?:[A-Z]|[a-z])|[0-9]|\-|\.|\_|\~|[\x00- ]|[\"]|[\<]|[\>]|[\[-\^]|[\`]|[\{-\}]|[\x7F-\uFFFF])|(?:\%|(?:\%(?:[0-9]|A|B|C|D|E|F)(?:[0-9]|A|B|C|D|E|F)))|(?:\!|\$|\&|\'|\(|\)|\*|\+|\,|\;|\=)|\:|\@){1,}(?:\/(?:(?:(?:[A-Z]|[a-z])|[0-9]|\-|\.|\_|\~|[\x00- ]|[\"]|[\<]|[\>]|[\[-\^]|[\`]|[\{-\}]|[\x7F-\uFFFF])|(?:\%|(?:\%(?:[0-9]|A|B|C|D|E|F)(?:[0-9]|A|B|C|D|E|F)))|(?:\!|\$|\&|\'|\(|\)|\*|\+|\,|\;|\=)|\:|\@){0,}){0,}))|((?:(?:(?:[A-Z]|[a-z])|[0-9]|\-|\.|\_|\~|[\x00- ]|[\"]|[\<]|[\>]|[\[-\^]|[\`]|[\{-\}]|[\x7F-\uFFFF])|(?:\%|(?:\%(?:[0-9]|A|B|C|D|E|F)(?:[0-9]|A|B|C|D|E|F)))|(?:\!|\$|\&|\'|\(|\)|\*|\+|\,|\;|\=)|\:|\@){0}))(?:\?((?:(?:(?:(?:[A-Z]|[a-z])|[0-9]|\-|\.|\_|\~|[\x00- ]|[\"]|[\<]|[\>]|[\[-\^]|[\`]|[\{-\}]|[\x7F-\uFFFF])|(?:\%|(?:\%(?:[0-9]|A|B|C|D|E|F)(?:[0-9]|A|B|C|D|E|F)))|(?:\!|\$|\&|\'|\(|\)|\*|\+|\,|\;|\=)|\:|\@)|\/|\?){0,}))?(?:\#((?:(?:(?:(?:[A-Z]|[a-z])|[0-9]|\-|\.|\_|\~|[\x00- ]|[\"]|[\<]|[\>]|[\[-\^]|[\`]|[\{-\}]|[\x7F-\uFFFF])|(?:\%|(?:\%(?:[0-9]|A|B|C|D|E|F)(?:[0-9]|A|B|C|D|E|F)))|(?:\!|\$|\&|\'|\(|\)|\*|\+|\,|\;|\=)|\:|\@)|\/|\?|\#){0,}))?)|(?:(?:(?:\/\/((?:(?:((?:(?:(?:[A-Z]|[a-z])|[0-9]|\-|\.|\_|\~|[\x00- ]|[\"]|[\<]|[\>]|[\[-\^]|[\`]|[\{-\}]|[\x7F-\uFFFF])|(?:\%|(?:\%(?:[0-9]|A|B|C|D|E|F)(?:[0-9]|A|B|C|D|E|F)))|(?:\!|\$|\&|\'|\(|\)|\*|\+|\,|\;|\=)|\:){0,})\@)?((?:(?:\[(?:(?:(?:(?:(?:[0-9]|A|B|C|D|E|F){1,4}\:){6}(?:(?:(?:[0-9]|A|B|C|D|E|F){1,4}\:(?:[0-9]|A|B|C|D|E|F){1,4})|(?:(?:[0-9]|(?:[1-9][0-9])|(?:1[0-9]{2})|(?:2[0-4][0-9])|(?:25[0-5]))\.(?:[0-9]|(?:[1-9][0-9])|(?:1[0-9]{2})|(?:2[0-4][0-9])|(?:25[0-5]))\.(?:[0-9]|(?:[1-9][0-9])|(?:1[0-9]{2})|(?:2[0-4][0-9])|(?:25[0-5]))\.(?:[0-9]|(?:[1-9][0-9])|(?:1[0-9]{2})|(?:2[0-4][0-9])|(?:25[0-5])))))|(?:\:\:(?:(?:[0-9]|A|B|C|D|E|F){1,4}\:){5}(?:(?:(?:[0-9]|A|B|C|D|E|F){1,4}\:(?:[0-9]|A|B|C|D|E|F){1,4})|(?:(?:[0-9]|(?:[1-9][0-9])|(?:1[0-9]{2})|(?:2[0-4][0-9])|(?:25[0-5]))\.(?:[0-9]|(?:[1-9][0-9])|(?:1[0-9]{2})|(?:2[0-4][0-9])|(?:25[0-5]))\.(?:[0-9]|(?:[1-9][0-9])|(?:1[0-9]{2})|(?:2[0-4][0-9])|(?:25[0-5]))\.(?:[0-9]|(?:[1-9][0-9])|(?:1[0-9]{2})|(?:2[0-4][0-9])|(?:25[0-5])))))|(?:(?:[0-9]|A|B|C|D|E|F){1,4}?\:\:(?:(?:[0-9]|A|B|C|D|E|F){1,4}\:){4}(?:(?:(?:[0-9]|A|B|C|D|E|F){1,4}\:(?:[0-9]|A|B|C|D|E|F){1,4})|(?:(?:[0-9]|(?:[1-9][0-9])|(?:1[0-9]{2})|(?:2[0-4][0-9])|(?:25[0-5]))\.(?:[0-9]|(?:[1-9][0-9])|(?:1[0-9]{2})|(?:2[0-4][0-9])|(?:25[0-5]))\.(?:[0-9]|(?:[1-9][0-9])|(?:1[0-9]{2})|(?:2[0-4][0-9])|(?:25[0-5]))\.(?:[0-9]|(?:[1-9][0-9])|(?:1[0-9]{2})|(?:2[0-4][0-9])|(?:25[0-5])))))|(?:(?:(?:(?:[0-9]|A|B|C|D|E|F){1,4}\:){0,1}(?:[0-9]|A|B|C|D|E|F){1,4})?\:\:(?:(?:[0-9]|A|B|C|D|E|F){1,4}\:){3}(?:(?:(?:[0-9]|A|B|C|D|E|F){1,4}\:(?:[0-9]|A|B|C|D|E|F){1,4})|(?:(?:[0-9]|(?:[1-9][0-9])|(?:1[0-9]{2})|(?:2[0-4][0-9])|(?:25[0-5]))\.(?:[0-9]|(?:[1-9][0-9])|(?:1[0-9]{2})|(?:2[0-4][0-9])|(?:25[0-5]))\.(?:[0-9]|(?:[1-9][0-9])|(?:1[0-9]{2})|(?:2[0-4][0-9])|(?:25[0-5]))\.(?:[0-9]|(?:[1-9][0-9])|(?:1[0-9]{2})|(?:2[0-4][0-9])|(?:25[0-5])))))|(?:(?:(?:(?:[0-9]|A|B|C|D|E|F){1,4}\:){0,2}(?:[0-9]|A|B|C|D|E|F){1,4})?\:\:(?:(?:[0-9]|A|B|C|D|E|F){1,4}\:){2}(?:(?:(?:[0-9]|A|B|C|D|E|F){1,4}\:(?:[0-9]|A|B|C|D|E|F){1,4})|(?:(?:[0-9]|(?:[1-9][0-9])|(?:1[0-9]{2})|(?:2[0-4][0-9])|(?:25[0-5]))\.(?:[0-9]|(?:[1-9][0-9])|(?:1[0-9]{2})|(?:2[0-4][0-9])|(?:25[0-5]))\.(?:[0-9]|(?:[1-9][0-9])|(?:1[0-9]{2})|(?:2[0-4][0-9])|(?:25[0-5]))\.(?:[0-9]|(?:[1-9][0-9])|(?:1[0-9]{2})|(?:2[0-4][0-9])|(?:25[0-5])))))|(?:(?:(?:(?:[0-9]|A|B|C|D|E|F){1,4}\:){0,3}(?:[0-9]|A|B|C|D|E|F){1,4})?\:\:(?:[0-9]|A|B|C|D|E|F){1,4}\:(?:(?:(?:[0-9]|A|B|C|D|E|F){1,4}\:(?:[0-9]|A|B|C|D|E|F){1,4})|(?:(?:[0-9]|(?:[1-9][0-9])|(?:1[0-9]{2})|(?:2[0-4][0-9])|(?:25[0-5]))\.(?:[0-9]|(?:[1-9][0-9])|(?:1[0-9]{2})|(?:2[0-4][0-9])|(?:25[0-5]))\.(?:[0-9]|(?:[1-9][0-9])|(?:1[0-9]{2})|(?:2[0-4][0-9])|(?:25[0-5]))\.(?:[0-9]|(?:[1-9][0-9])|(?:1[0-9]{2})|(?:2[0-4][0-9])|(?:25[0-5])))))|(?:(?:(?:(?:[0-9]|A|B|C|D|E|F){1,4}\:){0,4}(?:[0-9]|A|B|C|D|E|F){1,4})?\:\:(?:(?:(?:[0-9]|A|B|C|D|E|F){1,4}\:(?:[0-9]|A|B|C|D|E|F){1,4})|(?:(?:[0-9]|(?:[1-9][0-9])|(?:1[0-9]{2})|(?:2[0-4][0-9])|(?:25[0-5]))\.(?:[0-9]|(?:[1-9][0-9])|(?:1[0-9]{2})|(?:2[0-4][0-9])|(?:25[0-5]))\.(?:[0-9]|(?:[1-9][0-9])|(?:1[0-9]{2})|(?:2[0-4][0-9])|(?:25[0-5]))\.(?:[0-9]|(?:[1-9][0-9])|(?:1[0-9]{2})|(?:2[0-4][0-9])|(?:25[0-5])))))|(?:(?:(?:(?:[0-9]|A|B|C|D|E|F){1,4}\:){0,5}(?:[0-9]|A|B|C|D|E|F){1,4})?\:\:(?:[0-9]|A|B|C|D|E|F){1,4})|(?:(?:(?:(?:[0-9]|A|B|C|D|E|F){1,4}\:){0,6}(?:[0-9]|A|B|C|D|E|F){1,4})?\:\:))|(?:v(?:[0-9]|A|B|C|D|E|F){1,}\.(?:(?:(?:[A-Z]|[a-z])|[0-9]|\-|\.|\_|\~|[\x00- ]|[\"]|[\<]|[\>]|[\[-\^]|[\`]|[\{-\}]|[\x7F-\uFFFF])|(?:\!|\$|\&|\'|\(|\)|\*|\+|\,|\;|\=)|\:){1,}))\])|(?:(?:[0-9]|(?:[1-9][0-9])|(?:1[0-9]{2})|(?:2[0-4][0-9])|(?:25[0-5]))\.(?:[0-9]|(?:[1-9][0-9])|(?:1[0-9]{2})|(?:2[0-4][0-9])|(?:25[0-5]))\.(?:[0-9]|(?:[1-9][0-9])|(?:1[0-9]{2})|(?:2[0-4][0-9])|(?:25[0-5]))\.(?:[0-9]|(?:[1-9][0-9])|(?:1[0-9]{2})|(?:2[0-4][0-9])|(?:25[0-5])))|(?:(?:(?:[A-Z]|[a-z])|[0-9]|\-|\.|\_|\~|[\x00- ]|[\"]|[\<]|[\>]|[\[-\^]|[\`]|[\{-\}]|[\x7F-\uFFFF])|(?:\%(?:[0-9]|A|B|C|D|E|F)(?:[0-9]|A|B|C|D|E|F))|(?:\!|\$|\&|\'|\(|\)|\*|\+|\,|\;|\=)){0,}))(?:\:([0-9]{0,}))?))((?:\/(?:(?:(?:[A-Z]|[a-z])|[0-9]|\-|\.|\_|\~|[\x00- ]|[\"]|[\<]|[\>]|[\[-\^]|[\`]|[\{-\}]|[\x7F-\uFFFF])|(?:\%|(?:\%(?:[0-9]|A|B|C|D|E|F)(?:[0-9]|A|B|C|D|E|F)))|(?:\!|\$|\&|\'|\(|\)|\*|\+|\,|\;|\=)|\:|\@){0,}){0,}))|((?:\/(?:(?:(?:(?:[A-Z]|[a-z])|[0-9]|\-|\.|\_|\~|[\x00- ]|[\"]|[\<]|[\>]|[\[-\^]|[\`]|[\{-\}]|[\x7F-\uFFFF])|(?:\%|(?:\%(?:[0-9]|A|B|C|D|E|F)(?:[0-9]|A|B|C|D|E|F)))|(?:\!|\$|\&|\'|\(|\)|\*|\+|\,|\;|\=)|\:|\@){1,}(?:\/(?:(?:(?:[A-Z]|[a-z])|[0-9]|\-|\.|\_|\~|[\x00- ]|[\"]|[\<]|[\>]|[\[-\^]|[\`]|[\{-\}]|[\x7F-\uFFFF])|(?:\%|(?:\%(?:[0-9]|A|B|C|D|E|F)(?:[0-9]|A|B|C|D|E|F)))|(?:\!|\$|\&|\'|\(|\)|\*|\+|\,|\;|\=)|\:|\@){0,}){0,})?))|((?:(?:(?:(?:[A-Z]|[a-z])|[0-9]|\-|\.|\_|\~|[\x00- ]|[\"]|[\<]|[\>]|[\[-\^]|[\`]|[\{-\}]|[\x7F-\uFFFF])|(?:\%|(?:\%(?:[0-9]|A|B|C|D|E|F)(?:[0-9]|A|B|C|D|E|F)))|(?:\!|\$|\&|\'|\(|\)|\*|\+|\,|\;|\=)|\@){1,}(?:\/(?:(?:(?:[A-Z]|[a-z])|[0-9]|\-|\.|\_|\~|[\x00- ]|[\"]|[\<]|[\>]|[\[-\^]|[\`]|[\{-\}]|[\x7F-\uFFFF])|(?:\%|(?:\%(?:[0-9]|A|B|C|D|E|F)(?:[0-9]|A|B|C|D|E|F)))|(?:\!|\$|\&|\'|\(|\)|\*|\+|\,|\;|\=)|\:|\@){0,}){0,}))|((?:(?:(?:[A-Z]|[a-z])|[0-9]|\-|\.|\_|\~|[\x00- ]|[\"]|[\<]|[\>]|[\[-\^]|[\`]|[\{-\}]|[\x7F-\uFFFF])|(?:\%|(?:\%(?:[0-9]|A|B|C|D|E|F)(?:[0-9]|A|B|C|D|E|F)))|(?:\!|\$|\&|\'|\(|\)|\*|\+|\,|\;|\=)|\:|\@){0}))(?:\?((?:(?:(?:(?:[A-Z]|[a-z])|[0-9]|\-|\.|\_|\~|[\x00- ]|[\"]|[\<]|[\>]|[\[-\^]|[\`]|[\{-\}]|[\x7F-\uFFFF])|(?:\%|(?:\%(?:[0-9]|A|B|C|D|E|F)(?:[0-9]|A|B|C|D|E|F)))|(?:\!|\$|\&|\'|\(|\)|\*|\+|\,|\;|\=)|\:|\@)|\/|\?){0,}))?(?:\#((?:(?:(?:(?:[A-Z]|[a-z])|[0-9]|\-|\.|\_|\~|[\x00- ]|[\"]|[\<]|[\>]|[\[-\^]|[\`]|[\{-\}]|[\x7F-\uFFFF])|(?:\%|(?:\%(?:[0-9]|A|B|C|D|E|F)(?:[0-9]|A|B|C|D|E|F)))|(?:\!|\$|\&|\'|\(|\)|\*|\+|\,|\;|\=)|\:|\@)|\/|\?|\#){0,}))?))$/;


mp_n_prop['test-re'] = ['string', 'scheme','authority', 'path', 'query','fragment' ];
mp_NT_Regex['test-re'] = /^([ -\x7E]*)([\x7F-\uFFFF]+)[ -\x7E]*([\x7F-\uFFFF]+)?[ -\x7E]*([\x7F-\uFFFF]+)?(.*)$/;


mp_n_prop['URI-reference-H5'] = ['string', 'scheme','authority', 'userinfo', 'host',
			      'port', 'path-abempty', 'path-absolute', 'path-rootless', 'path-empty',
			      'query','fragment','authority', 'userinfo', 'host',
			      'port', 'path-abempty', 'path-absolute', 'path-rootless', 'path-empty',
			      'query','fragment'
		    ];


mp_NT_Regex['scheme'] = /^((?:(?:[A-Z]|[a-z])(?:(?:[A-Z]|[a-z])|[0-9]|\+|\-|\.){0,}))$/;

mp_NT_Regex['scheme_colon_dblslash'] = /^((?:(?:[A-Z]|[a-z])(?:(?:[A-Z]|[a-z])|[0-9]|\+|\-|\.){0,}):\/\/)/;

mp_NT_Regex['schemeplus_or_dblslash'] = /^(((?:(?:[A-Z]|[a-z])(?:(?:[A-Z]|[a-z])|[0-9]|\+|\-|\.){0,}):\/\/)|(\/\/))/;








