{"version":3,"sources":["webpack:///./node_modules/jquery-validation/dist/additional-methods.js","webpack:///./node_modules/jquery-validation/dist/jquery.validate.js"],"names":["define","$","stripHtml","value","replace","validator","addMethod","element","params","this","optional","match","length","format","valueStripped","regex","checksum","tokens","split","i","parseInt","param","typeParam","optionalValue","attr","files","RegExp","type","test","pos","account","sum","len","substring","methods","bankaccountNL","call","giroaccountNL","toUpperCase","n","control_digit","control_letter","cifRegEx","letter","number","control","even_sum","odd_sum","isOdd","toString","substr","firstChar","firstCN","secondCN","j","dsc","charAt","Array","join","String","concat","tamanho","numeros","digitos","soma","resultado","il","checkResult","cn","result","cDigit","nCheck","nDigit","bEven","validTypes","mastercard","visa","amex","dinersclub","enroute","discover","jcb","unknown","all","isParamString","symbol","soft","messages","date","adata","gg","mm","aaaa","xdata","check","Date","UTC","getUTCFullYear","getUTCMonth","getUTCDate","target","settings","onfocusout","not","addClass","on","valid","val","ibancheck","bbanpattern","p","iban","ibancheckdigits","leadingZeroes","cRest","indexOf","size","totalSize","phone_number","ruPhone_number","nieRegEx","arrSteps","intSum","int2","dv","count","multiplier","equalTo","cep_value","options","$fields","form","$fieldsFirst","eq","data","extend","isValid","filter","elementValue","each","numberFilled","isDefault","caseSensitive","includeTerritories","includeMilitary","text","url","v","d","f","cdv","LL","VL","FL","rs","slice","isNaN","fn","validate","onsubmit","event","submitButton","currentTarget","hasClass","cancelSubmit","undefined","handle","hidden","submitHandler","formSubmitted","name","appendTo","currentForm","debug","remove","preventDefault","pendingRequest","focusInvalid","window","console","warn","errorList","is","rules","command","argument","staticRules","existingRules","filtered","isContentEditable","closest","normalizeRule","index","method","normalizeRules","classRules","attributeRules","dataRules","required","remote","called","trim","str","expr","pseudos","blank","a","filled","unchecked","prop","defaults","init","source","arguments","args","makeArray","unshift","apply","constructor","groups","errorClass","pendingClass","validClass","errorElement","focusCleanup","errorContainer","errorLabelContainer","ignore","ignoreTitle","onfocusin","lastActive","unhighlight","hideThese","errorsFor","checkable","submitted","onkeyup","which","inArray","keyCode","invalid","onclick","parentNode","highlight","findByName","removeClass","setDefaults","email","dateISO","digits","maxlength","minlength","rangelength","range","max","min","step","autoCreateRanges","prototype","labelContainer","errorContext","containers","add","valueCache","pending","reset","delegate","eventType","key","invalidHandler","checkForm","errorMap","triggerHandler","showErrors","prepareForm","elements","currentElements","group","cleanElement","clean","checkElement","validationTargetFor","prepareElement","testgroup","push","numberOfInvalids","toHide","errors","map","message","successList","grep","defaultShowErrors","resetForm","hideErrors","removeData","removeAttr","resetElements","objectLength","obj","addWrapper","hide","findLastActive","trigger","e","rulesCache","find","error","selector","resetInternals","toShow","idx","$element","validity","badInput","lastIndexOf","rule","normalizer","rulesCount","dependencyMismatch","abortRequest","parameters","formatAndAdd","log","id","TypeError","customDataMessage","toLowerCase","customMessage","m","findDefined","defaultMessage","title","theregex","toToggle","wrapper","parent","showLabel","success","validElements","show","invalidElements","place","errorID","elementID","idOrName","describedBy","escapeHtml","html","wrap","append","errorPlacement","insertAfter","parents","escapeCssMeta","describer","string","getLength","nodeName","depend","dependTypes","elementAjaxPort","startRequest","stopRequest","port","ajaxAbort","previousValue","old","destroy","off","classRuleSettings","creditcard","addClassRules","className","classes","normalizeAttributeRule","Number","getAttribute","depends","keepRule","parameter","parts","isArray","transformed","decimals","errorMessage","re","decimalPlaces","num","toInt","Math","round","pow","Error","optionDataString","previous","originalMessage","ajax","mode","dataType","context","response","pendingRequests","ajaxPrefilter","_","xhr","ajaxSettings","abort"],"mappings":"8EAAA;;;;;;;;GAUEA,EAAQ,CAAC,UAAU,gBAA8B,0BAAR,EAMzC,SAAUC,GA+8CZ,OA78CE,WAED,SAASC,EAAWC,GAGnB,OAAOA,EAAMC,QAAS,cAAe,KAAMA,QAAS,kBAAmB,KAGtEA,QAAS,+BAAgC,IAG3CH,EAAEI,UAAUC,UAAW,YAAY,SAAUH,EAAOI,EAASC,GAC5D,OAAOC,KAAKC,SAAUH,IAAaL,EAAWC,GAAQQ,MAAO,YAAaC,QAAUJ,IAClFP,EAAEI,UAAUQ,OAAQ,oCAEvBZ,EAAEI,UAAUC,UAAW,YAAY,SAAUH,EAAOI,EAASC,GAC5D,OAAOC,KAAKC,SAAUH,IAAaL,EAAWC,GAAQQ,MAAO,YAAaC,QAAUJ,IAClFP,EAAEI,UAAUQ,OAAQ,qCAEvBZ,EAAEI,UAAUC,UAAW,cAAc,SAAUH,EAAOI,EAASC,GAC9D,IAAIM,EAAgBZ,EAAWC,GAC9BY,EAAQ,WACT,OAAON,KAAKC,SAAUH,IAAaO,EAAcH,MAAOI,GAAQH,QAAUJ,EAAQ,IAAOM,EAAcH,MAAOI,GAAQH,QAAUJ,EAAQ,KACtIP,EAAEI,UAAUQ,OAAQ,4CAvBtB,GAiCFZ,EAAEI,UAAUC,UAAW,oBAAoB,SAAUH,GACpD,IAAIa,EAAW,EACXC,EAASd,EAAMe,MAAO,IACtBN,EAASK,EAAOL,OAGpB,GAAgB,IAAXA,EACJ,OAAO,EAKR,IAAM,IAAIO,EAAI,EAAGA,EAAIP,EAAQO,GAAK,EACjCH,GAA8C,EAAlCI,SAAUH,EAAQE,GAAK,IACE,EAAlCC,SAAUH,EAAQE,EAAI,GAAK,IAC3BC,SAAUH,EAAQE,EAAI,GAAK,IAI/B,OAAkB,IAAbH,GAAkBA,EAAW,IAAO,IAKvC,wCAGHf,EAAEI,UAAUC,UAAW,UAAU,SAAUH,EAAOI,EAASc,GAG1D,IAECF,EAASJ,EAFNO,EAA6B,iBAAVD,EAAqBA,EAAMjB,QAAS,MAAO,IAAO,UACxEmB,EAAgBd,KAAKC,SAAUH,GAIhC,GAAKgB,EACJ,OAAOA,EAGR,GAAqC,SAAhCtB,EAAGM,GAAUiB,KAAM,UAKvBF,EAAYA,EACTlB,QAAS,oCAAqC,QAC9CA,QAAS,KAAM,KACfA,QAAS,QAAS,OAGhBG,EAAQkB,OAASlB,EAAQkB,MAAMb,QAEnC,IADAG,EAAQ,IAAIW,OAAQ,MAAQJ,EAAY,KAAM,KACxCH,EAAI,EAAGA,EAAIZ,EAAQkB,MAAMb,OAAQO,IAItC,IAHOZ,EAAQkB,MAAON,GAGXQ,KAAKhB,MAAOI,GACtB,OAAO,EAQX,OAAO,IACLd,EAAEI,UAAUQ,OAAQ,gDAEvBZ,EAAEI,UAAUC,UAAW,gBAAgB,SAAUH,EAAOI,GACvD,OAAOE,KAAKC,SAAUH,IAAa,SAASqB,KAAMzB,KAChD,kDAQHF,EAAEI,UAAUC,UAAW,iBAAiB,SAAUH,EAAOI,GACxD,GAAKE,KAAKC,SAAUH,GACnB,OAAO,EAER,IAAQ,oCAAoCqB,KAAMzB,GACjD,OAAO,EAIR,IAGC0B,EAHGC,EAAU3B,EAAMC,QAAS,KAAM,IAClC2B,EAAM,EACNC,EAAMF,EAAQlB,OAEf,IAAMiB,EAAM,EAAGA,EAAMG,EAAKH,IAGzBE,IAFSC,EAAMH,GACPC,EAAQG,UAAWJ,EAAKA,EAAM,GAGvC,OAAOE,EAAM,IAAO,IAClB,+CAEH9B,EAAEI,UAAUC,UAAW,uBAAuB,SAAUH,EAAOI,GAC9D,OAAOE,KAAKC,SAAUH,IAClBN,EAAEI,UAAU6B,QAAQC,cAAcC,KAAM3B,KAAMN,EAAOI,IACrDN,EAAEI,UAAU6B,QAAQG,cAAcD,KAAM3B,KAAMN,EAAOI,KACvD,uDAiBHN,EAAEI,UAAUC,UAAW,OAAO,SAAUH,EAAOI,GAC3C,OAAOE,KAAKC,SAAUH,IAAa,gEAAgEqB,KAAMzB,EAAMmC,iBAChH,oCAoDHrC,EAAEI,UAAUC,UAAW,SAAS,SAAUH,EAAOI,GAChD,aAEA,GAAKE,KAAKC,SAAUH,GACnB,OAAO,EAGR,IAOCY,EAAGoB,EACHC,EACAC,EATGC,EAAW,IAAIhB,OAAQ,iDACvBiB,EAAUxC,EAAM8B,UAAW,EAAG,GACjCW,EAAUzC,EAAM8B,UAAW,EAAG,GAC9BY,EAAU1C,EAAM8B,UAAW,EAAG,GAE9Ba,EAAW,EACXC,EAAU,EAKX,SAASC,EAAOT,GACf,OAAOA,EAAI,GAAM,EAIlB,GAAsB,IAAjBpC,EAAMS,SAAiB8B,EAASd,KAAMzB,GAC1C,OAAO,EAGR,IAAMgB,EAAI,EAAGA,EAAIyB,EAAOhC,OAAQO,IAC/BoB,EAAInB,SAAUwB,EAAQzB,GAAK,IAGtB6B,EAAO7B,GAMX4B,IAHAR,GAAK,GAGU,GAAKA,EAAIA,EAAI,EAK5BO,GAAYP,EAUd,OALAC,GAAkB,IADRM,EAAWC,GACcE,WAAWC,QAAS,IAAMD,WAC7DT,EAAgBpB,SAAUoB,EAAe,IAAO,EAAI,IAAMA,EAC1DC,EAAiB,aAAaS,OAAQV,EAAe,GAAIS,WAGpDN,EAAOhC,MAAO,UACXkC,IAAYL,EAGRG,EAAOhC,MAAO,UAClBkC,IAAYJ,EAIbI,IAAYL,GAAiBK,IAAYJ,IAE9C,sCAMHxC,EAAEI,UAAUC,UAAW,SAAS,SAAUH,GAMxC,GAAsB,MAHtBA,EAAQA,EAAMC,QAAS,8CAA+C,KAG3DQ,OACT,OAAO,EAGT,IAAsBuC,EACtBC,EAASC,EAAUlC,EAAGmC,EADlBvB,EAAM,EAAGwB,EAAM,EAKnB,GAFAJ,EAAYhD,EAAMqD,OAAQ,GAErB,IAAIC,MAAO,IAAKC,KAAMP,KAAgBhD,EACzC,OAAO,EAIT,IAAMgB,EAAI,EAAGmC,EAAI,EAAUnC,EAAI,IAAKA,IAAKmC,EACvCvB,IAAU5B,EAAMqD,OAAQrC,GAAMmC,EAUhC,KAPAF,EAAUrB,EAAM,KACA,KACdqB,EAAU,EACVG,EAAM,GAGRxB,EAAM,EACAZ,EAAI,EAAGmC,EAAI,EAAUnC,EAAI,IAAKA,IAAKmC,EACvCvB,IAAU5B,EAAMqD,OAAQrC,GAAMmC,EAUhC,OAPAD,EAAWtB,EAAM,KACA,GACfsB,EAAW,EAEXA,GAAsBE,EAGfI,OAAQP,GAAUQ,OAAQP,KAAelD,EAAM+C,QAAS,KAEhE,sCAMHjD,EAAEI,UAAUC,UAAW,UAAU,SAAUH,EAAOI,GACjD,aAEA,GAAKE,KAAKC,SAAUH,GACnB,OAAO,EAOR,GAAsB,MAHtBJ,EAAQA,EAAMC,QAAS,UAAW,KAGvBQ,OACV,OAAO,EAIR,GAAe,mBAAVT,GACM,mBAAVA,GACU,mBAAVA,GACU,mBAAVA,GACU,mBAAVA,GACU,mBAAVA,GACU,mBAAVA,GACU,mBAAVA,GACU,mBAAVA,GACU,mBAAVA,EACA,OAAO,EAUR,IANA,IAAI0D,EAAY1D,EAAMS,OAAS,EAC3BkD,EAAU3D,EAAM8B,UAAW,EAAG4B,GAC9BE,EAAU5D,EAAM8B,UAAW4B,GAC3BG,EAAO,EACPnC,EAAMgC,EAAU,EAEV1C,EAAI0C,EAAS1C,GAAK,EAAGA,IAC9B6C,GAAQF,EAAQN,OAAQK,EAAU1C,GAAMU,IACnCA,EAAM,IACVA,EAAM,GAIR,IAAIoC,EAAYD,EAAO,GAAK,EAAI,EAAI,GAAKA,EAAO,GAEhD,GAAKC,IAAc7C,SAAU2C,EAAQP,OAAQ,GAAK,IACjD,OAAO,EAGRK,GAAoB,EACpBC,EAAU3D,EAAM8B,UAAW,EAAG4B,GAC9BG,EAAO,EACPnC,EAAMgC,EAAU,EAEhB,IAAM,IAAIK,EAAKL,EAASK,GAAM,EAAGA,IAChCF,GAAQF,EAAQN,OAAQK,EAAUK,GAAOrC,IACpCA,EAAM,IACVA,EAAM,GAMR,OAFAoC,EAAYD,EAAO,GAAK,EAAI,EAAI,GAAKA,EAAO,MAEzB5C,SAAU2C,EAAQP,OAAQ,GAAK,MAMhD,uCAMHvD,EAAEI,UAAUC,UAAW,SAAS,SAAUH,EAAOI,GAChD,aAEA,GAAKE,KAAKC,SAAUH,GACnB,OAAO,EAOR,GAAsB,MAHtBJ,EAAQA,EAAMC,QAAS,8CAA+C,KAG3DQ,OACV,OAAO,EAGR,IACCwC,EAASC,EAAUc,EAAahD,EAD7BY,EAAM,EAeV,GAZAqB,EAAUhC,SAAUjB,EAAM8B,UAAW,EAAG,IAAM,IAC9CoB,EAAWjC,SAAUjB,EAAM8B,UAAW,GAAI,IAAM,IAEhDkC,EAAc,SAAUpC,EAAKqC,GAC5B,IAAIC,EAAiB,GAANtC,EAAa,GAI5B,OAHkB,KAAXsC,GAAgC,KAAXA,IAC3BA,EAAS,GAEDA,IAAWD,GAIN,KAAVjE,GACM,gBAAVA,GACU,gBAAVA,GACU,gBAAVA,GACU,gBAAVA,GACU,gBAAVA,GACU,gBAAVA,GACU,gBAAVA,GACU,gBAAVA,GACU,gBAAVA,GACU,gBAAVA,EAEA,OAAO,EAIR,IAAMgB,EAAI,EAAGA,GAAK,EAAGA,IACpBY,GAAYX,SAAUjB,EAAM8B,UAAWd,EAAI,EAAGA,GAAK,KAAS,GAAKA,GAIlE,GAAKgD,EAAapC,EAAKqB,GAAY,CAElC,IADArB,EAAM,EACAZ,EAAI,EAAGA,GAAK,GAAIA,IACrBY,GAAYX,SAAUjB,EAAM8B,UAAWd,EAAI,EAAGA,GAAK,KAAS,GAAKA,GAElE,OAAOgD,EAAapC,EAAKsB,GAE1B,OAAO,IAEL,sCAIHpD,EAAEI,UAAUC,UAAW,cAAc,SAAUH,EAAOI,GACrD,GAAKE,KAAKC,SAAUH,GACnB,MAAO,sBAIR,GAAK,aAAaqB,KAAMzB,GACvB,OAAO,EAGR,IAGCoC,EAAG+B,EAHAC,EAAS,EACZC,EAAS,EACTC,GAAQ,EAOT,IAJAtE,EAAQA,EAAMC,QAAS,MAAO,KAInBQ,OAAS,IAAMT,EAAMS,OAAS,GACxC,OAAO,EAGR,IAAM2B,EAAIpC,EAAMS,OAAS,EAAG2B,GAAK,EAAGA,IACnC+B,EAASnE,EAAMqD,OAAQjB,GACvBiC,EAASpD,SAAUkD,EAAQ,IACtBG,IACGD,GAAU,GAAM,IACtBA,GAAU,GAIZD,GAAUC,EACVC,GAASA,EAGV,OAASF,EAAS,IAAS,IACzB,4CAMHtE,EAAEI,UAAUC,UAAW,mBAAmB,SAAUH,EAAOI,EAASc,GACnE,GAAK,YAAYO,KAAMzB,GACtB,OAAO,EAGRA,EAAQA,EAAMC,QAAS,MAAO,IAE9B,IAAIsE,EAAa,EA6BjB,OA3BKrD,EAAMsD,aACVD,GAAc,GAEVrD,EAAMuD,OACVF,GAAc,GAEVrD,EAAMwD,OACVH,GAAc,GAEVrD,EAAMyD,aACVJ,GAAc,GAEVrD,EAAM0D,UACVL,GAAc,IAEVrD,EAAM2D,WACVN,GAAc,IAEVrD,EAAM4D,MACVP,GAAc,IAEVrD,EAAM6D,UACVR,GAAc,KAEVrD,EAAM8D,MACVT,EAAa,KAEI,EAAbA,IAAyB,cAAc9C,KAAMzB,IAAW,eAAeyB,KAAMzB,KAGhE,EAAbuE,GAAuB,OAAO9C,KAAMzB,GAFhB,KAAjBA,EAAMS,OAKI,EAAb8D,GAAuB,WAAW9C,KAAMzB,GACpB,KAAjBA,EAAMS,OAEI,EAAb8D,GAAuB,uBAAuB9C,KAAMzB,GAChC,KAAjBA,EAAMS,OAEI,GAAb8D,GAAuB,gBAAgB9C,KAAMzB,GACzB,KAAjBA,EAAMS,OAEI,GAAb8D,GAAuB,UAAU9C,KAAMzB,IAG1B,GAAbuE,GAAuB,OAAO9C,KAAMzB,GAFhB,KAAjBA,EAAMS,OAKI,GAAb8D,GAAuB,eAAe9C,KAAMzB,GACxB,KAAjBA,EAAMS,UAEI,IAAb8D,KAIH,4CA8BHzE,EAAEI,UAAUC,UAAW,YAAY,SAAUH,EAAOI,EAASc,GACzD,IAGIN,EAHAqE,EAAiC,iBAAV/D,EACvBgE,EAASD,EAAgB/D,EAAQA,EAAO,GACxCiE,IAAOF,GAAuB/D,EAAO,GAOzC,OAJAgE,EAASA,EAAOjF,QAAS,KAAM,IAE/BW,EAAQ,MADRsE,EAASC,EAAOD,EAAS,IAAMA,EAAS,MAChB,2HACxBtE,EAAQ,IAAIW,OAAQX,GACbN,KAAKC,SAAUH,IAAaQ,EAAMa,KAAMzB,KAEhD,oCAEHF,EAAEI,UAAUC,UAAW,UAAU,SAAUH,EAAOI,GACjD,OAAOE,KAAKC,SAAUH,IAAa,iHAAiHqB,KAAMzB,KACxJF,EAAEI,UAAUkF,SAASC,MAqBxBvF,EAAEI,UAAUC,UAAW,WAAW,SAAUH,EAAOI,GAClD,IAECkF,EAAOC,EAAIC,EAAIC,EAAMC,EAFlBC,GAAQ,EAiBZ,MAhBM,4BAEElE,KAAMzB,IACbsF,EAAQtF,EAAMe,MAAO,KACrBwE,EAAKtE,SAAUqE,EAAO,GAAK,IAC3BE,EAAKvE,SAAUqE,EAAO,GAAK,IAC3BG,EAAOxE,SAAUqE,EAAO,GAAK,IAG5BK,GAFDD,EAAQ,IAAIE,KAAMA,KAAKC,IAAKJ,EAAMD,EAAK,EAAGD,EAAI,GAAI,EAAG,EAAG,KAC3CO,mBAAqBL,GAAYC,EAAMK,gBAAkBP,EAAK,GAASE,EAAMM,eAAiBT,GAM3GI,GAAQ,EAEFrF,KAAKC,SAAUH,IAAauF,IACjC7F,EAAEI,UAAUkF,SAASC,MAExBvF,EAAEI,UAAUC,UAAW,UAAU,SAAUH,EAAOI,GACjD,OAAOE,KAAKC,SAAUH,IAAa,0EAA0EqB,KAAMzB,KACjHF,EAAEI,UAAUkF,SAASC,MAGxBvF,EAAEI,UAAUC,UAAW,aAAa,SAAUH,EAAOI,EAASc,GAE7D,OADAA,EAAyB,iBAAVA,EAAqBA,EAAMjB,QAAS,KAAM,KAAQ,gBAC1DK,KAAKC,SAAUH,IAAaJ,EAAMQ,MAAO,IAAIe,OAAQ,OAASL,EAAQ,KAAM,QACjFpB,EAAEI,UAAUQ,OAAQ,iDAKvBZ,EAAEI,UAAUC,UAAW,iBAAiB,SAAUH,EAAOI,GACxD,OAAOE,KAAKC,SAAUH,IAAa,eAAeqB,KAAMzB,KACtD,+CAEHF,EAAEI,UAAUC,UAAW,eAAe,SAAUH,EAAOI,EAASc,GAC5D,IAAI+E,EAASnG,EAAGoB,GAQhB,OANKZ,KAAK4F,SAASC,YAAcF,EAAOG,IAAK,8BAA+B3F,QACxEwF,EAAOI,SAAU,6BAA8BC,GAAI,6BAA6B,WAC5ExG,EAAGM,GAAUmG,WAIdvG,EAAQiG,EAAOO,QACvB,iCAEH1G,EAAEI,UAAUC,UAAW,oBAAoB,SAAUH,EAAOI,EAASc,GACjE,IAAI+E,EAASnG,EAAGoB,GAQhB,OANKZ,KAAK4F,SAASC,YAAcF,EAAOG,IAAK,mCAAoC3F,QAC7EwF,EAAOI,SAAU,kCAAmCC,GAAI,kCAAkC,WACtFxG,EAAGM,GAAUmG,WAIdvG,GAASiG,EAAOO,QACxB,iCAQH1G,EAAEI,UAAUC,UAAW,QAAQ,SAAUH,EAAOI,GAG/C,GAAKE,KAAKC,SAAUH,GACnB,OAAO,EAIR,IAKcqG,EAAWpD,EAAeqD,EAA8C1F,EAAG2F,EALrFC,EAAO5G,EAAMC,QAAS,KAAM,IAAKkC,cACpC0E,EAAkB,GAClBC,GAAgB,EAChBC,EAAQ,GAUT,GAAKH,EAAKnG,OADc,EAEvB,OAAO,EAiFR,QAA4B,KAT5BiG,EAnEsB,CACrB,GAAM,qBACN,GAAM,qBACN,GAAM,UACN,GAAM,qBACN,GAAM,UACN,GAAM,uBACN,GAAM,UACN,GAAM,uBACN,GAAM,4BACN,GAAM,UACN,GAAM,UACN,GAAM,qBACN,GAAM,UACN,GAAM,UACN,GAAM,kBACN,GAAM,UACN,GAAM,UACN,GAAM,UACN,GAAM,4BACN,GAAM,qBACN,GAAM,UACN,GAAM,uBACN,GAAM,qBACN,GAAM,UACN,GAAM,0BACN,GAAM,UACN,GAAM,UACN,GAAM,qBACN,GAAM,UACN,GAAM,2BACN,GAAM,qBACN,GAAM,uBACN,GAAM,uBACN,GAAM,qBACN,GAAM,qBACN,GAAM,UACN,GAAM,qBACN,GAAM,2BACN,GAAM,6BACN,GAAM,UACN,GAAM,0BACN,GAAM,4BACN,GAAM,qBACN,GAAM,UACN,GAAM,kBACN,GAAM,UACN,GAAM,qBACN,GAAM,qBACN,GAAM,UACN,GAAM,UACN,GAAM,uBACN,GAAM,2BACN,GAAM,qBACN,GAAM,UACN,GAAM,UACN,GAAM,UACN,GAAM,UACN,GAAM,UACN,GAAM,qBACN,GAAM,UACN,GAAM,qBACN,GAAM,gBACN,GAAM,kBACN,GAAM,sBAjEOE,EAAK9E,UAAW,EAAG,OA8EnB,IAAIP,OAAQ,kBAAoBmF,EAAc,IAAK,IAC7CjF,KAAMmF,GACxB,OAAO,EAMT,IADAH,EAAYG,EAAK9E,UAAW,EAAG8E,EAAKnG,QAAWmG,EAAK9E,UAAW,EAAG,GAC5Dd,EAAI,EAAGA,EAAIyF,EAAUhG,OAAQO,IAElB,OADhBqC,EAASoD,EAAUpD,OAAQrC,MAE1B8F,GAAgB,GAEXA,IACLD,GAAmB,uCAAuCG,QAAS3D,IAKrE,IAAMsD,EAAI,EAAGA,EAAIE,EAAgBpG,OAAQkG,IAGxCI,GADY,GAAKA,EADTF,EAAgBxD,OAAQsD,IAEZ,GAErB,OAAiB,IAAVI,IACL,gCAEHjH,EAAEI,UAAUC,UAAW,WAAW,SAAUH,EAAOI,GAClD,OAAOE,KAAKC,SAAUH,IAAa,UAAUqB,KAAMzB,KACjD,qDAEHF,EAAEI,UAAUC,UAAW,QAAQ,SAAUH,EAAOI,GAC/C,OAAOE,KAAKC,SAAUH,IAAa,gIAAgIqB,KAAMzB,KACvK,uCAEHF,EAAEI,UAAUC,UAAW,QAAQ,SAAUH,EAAOI,GAC/C,OAAOE,KAAKC,SAAUH,IAAa,q2BAAq2BqB,KAAMzB,KAC54B,uCAEHF,EAAEI,UAAUC,UAAW,YAAY,SAAUH,EAAOI,EAASc,GACzD,IAAI+E,EAASnG,EAAGoB,GAQhB,OANKZ,KAAK4F,SAASC,YAAcF,EAAOG,IAAK,2BAA4B3F,QACrEwF,EAAOI,SAAU,0BAA2BC,GAAI,0BAA0B,WACtExG,EAAGM,GAAUmG,WAIdvG,EAAQiG,EAAOO,QACvB,gCAEH1G,EAAEI,UAAUC,UAAW,iBAAiB,SAAUH,EAAOI,EAASc,GAC9D,IAAI+E,EAASnG,EAAGoB,GAQhB,OANKZ,KAAK4F,SAASC,YAAcF,EAAOG,IAAK,gCAAiC3F,QAC1EwF,EAAOI,SAAU,+BAAgCC,GAAI,+BAA+B,WAChFxG,EAAGM,GAAUmG,WAIdvG,GAASiG,EAAOO,QACxB,gCAEH1G,EAAEI,UAAUC,UAAW,eAAe,SAAUH,EAAOI,GACtD,OAAOE,KAAKC,SAAUH,IAAa,YAAYqB,KAAMzB,KACnD,wBAEHF,EAAEI,UAAUC,UAAW,wBAAwB,SAAUH,EAAOI,GAC/D,OAAOE,KAAKC,SAAUH,IAAa,sBAAsBqB,KAAMzB,KAC7D,uCAGHF,EAAEI,UAAUC,UAAW,YAAY,SAAUH,EAAOI,EAASc,GAC5D,QAAKZ,KAAKC,SAAUH,MAIiB,SAAhCN,EAAGM,GAAUiB,KAAM,SAClBjB,EAAQkB,OAASlB,EAAQkB,MAAMb,OAASS,KAM5CpB,EAAEI,UAAUQ,OAAQ,0CAGvBZ,EAAEI,UAAUC,UAAW,WAAW,SAAUH,EAAOI,EAASc,GAC3D,GAAKZ,KAAKC,SAAUH,GACnB,OAAO,EAGR,GAAqC,SAAhCN,EAAGM,GAAUiB,KAAM,SAClBjB,EAAQkB,OAASlB,EAAQkB,MAAMb,OACnC,IAAM,IAAIO,EAAI,EAAGA,EAAIZ,EAAQkB,MAAMb,OAAQO,IAC1C,GAAKZ,EAAQkB,MAAON,GAAIiG,KAAO/F,EAC9B,OAAO,EAMX,OAAO,IACLpB,EAAEI,UAAUQ,OAAQ,8CAGvBZ,EAAEI,UAAUC,UAAW,gBAAgB,SAAUH,EAAOI,EAASc,GAChE,GAAKZ,KAAKC,SAAUH,GACnB,OAAO,EAGR,GAAqC,SAAhCN,EAAGM,GAAUiB,KAAM,SAClBjB,EAAQkB,OAASlB,EAAQkB,MAAMb,OAGnC,IAFA,IAAIyG,EAAY,EAENlG,EAAI,EAAGA,EAAIZ,EAAQkB,MAAMb,OAAQO,IAE1C,IADAkG,GAAa9G,EAAQkB,MAAON,GAAIiG,MACf/F,EAChB,OAAO,EAMX,OAAO,IACLpB,EAAEI,UAAUQ,OAAQ,uDAGvBZ,EAAEI,UAAUC,UAAW,YAAY,SAAUH,EAAOI,GACnD,OAAOE,KAAKC,SAAUH,IAAa,sFAAsFqB,KAAMzB,KAC7H,yCAEHF,EAAEI,UAAUC,UAAW,YAAY,SAAUgH,EAAc/G,GAC1D,IAAIgH,EAAiBD,EAAalH,QAAS,eAAgB,IAC3D,OAAOK,KAAKC,SAAUH,IAAagH,EAAe3G,OAAS,GAAK,4BAA4BgB,KAAM2F,KAChG,yCAUHtH,EAAEI,UAAUC,UAAW,YAAY,SAAUgH,EAAc/G,GAE1D,OADA+G,EAAeA,EAAalH,QAAS,eAAgB,IAC9CK,KAAKC,SAAUH,IAAa+G,EAAa1G,OAAS,GACxD0G,EAAa3G,MAAO,0EACnB,yCAEHV,EAAEI,UAAUC,UAAW,WAAW,SAAUH,EAAOI,GAC/C,OAAOE,KAAKC,SAAUH,IAAa,kLAAkLqB,KAAMzB,KAC5N,iCAUHF,EAAEI,UAAUC,UAAW,SAAS,SAAUH,EAAOI,GAChD,aAEA,GAAKE,KAAKC,SAAUH,GACnB,OAAO,EAGR,IAGCqC,EAHG4E,EAAW,IAAI9F,OAAQ,wDAE1BiB,EAASxC,EAAM+C,OAAQ/C,EAAMS,OAAS,GAAI0B,cAM3C,SAHAnC,EAAQA,EAAM8C,WAAWX,eAGd1B,OAAS,IAAMT,EAAMS,OAAS,IAAM4G,EAAS5F,KAAMzB,MAW9DyC,EAA0B,KAJ1BzC,EAAQA,EAAMC,QAAS,OAAQ,KAC7BA,QAAS,OAAQ,KACjBA,QAAS,OAAQ,MAEJQ,OAAeT,EAAM+C,OAAQ,EAAG,GAAM/C,EAAM+C,OAAQ,EAAG,GAlBrD,2BAoBCM,OAAQpC,SAAUwB,EAAQ,IAAO,MAASD,KAE1D,sCAKH1C,EAAEI,UAAUC,UAAW,SAAS,SAAUH,EAAOI,GAChD,aAEA,QAAKE,KAAKC,SAAUH,OAIpBJ,EAAQA,EAAMmC,eAGF3B,MAAO,8EAKd,qBAAqBiB,KAAMzB,GACtB,0BAA0BqD,OAAQrD,EAAM8B,UAAW,EAAG,GAAM,MAAS9B,EAAMqD,OAAQ,KAIxF,YAAY5B,KAAMzB,IACbA,EAAO,KAAQ,0BAA0BqD,OAAQrD,EAAM8B,UAAW,EAAG,GAAM,OAKnF,sCAKHhC,EAAEI,UAAUC,UAAW,SAAS,SAAUH,GACzC,aAIA,GAAsB,MAFtBA,EAAQA,EAAMC,QAAS,UAAW,KAEvBQ,OACV,OAAO,EAKR,IAFA,IAAI6G,EAAW,CAAE,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GACrCC,EAAS,EACHvG,EAAI,EAAGA,EAAI,EAAGA,IACvBuG,GAAUD,EAAUtG,GAAMhB,EAAOgB,GAElC,IAAIwG,EAAOD,EAAS,GAGpB,OAF8B,KAATC,EAAgB,EAAIA,KAEfvG,SAAUjB,EAAO,GAAK,MAC9C,sCAYHF,EAAEI,UAAUC,UAAW,SAAS,SAAUH,GACzC,IAAIyC,EACAwB,EAEAwD,EACAC,EACAC,EAHA/F,EAAM,EASV,GAAsB,MAHtB5B,EAAQA,EAAMC,QAAS,8CAA+C,KAG3DQ,OACV,OAAO,EASR,IALAwD,EAAKhD,SAAUjB,EAAM8B,UAAW,GAAI,IAAM,IAG1CW,EAASxB,SAAUjB,EAAM8B,UAAW,EAAG,IAAM,IAEvC4F,EAAQ,EAAGA,EAAQ,GAAIA,IAC5BC,EAAaD,EACE,KAAVA,IACJC,EAAa,GAEC,KAAVD,IACJC,EAAa,GAEd/F,GAAWa,EAAS,GAAOkF,EAC3BlF,EAASxB,SAAUwB,EAAS,GAAI,IAUjC,OAAKwB,KALJwD,GAHDA,EAAO7F,EAAM,IAEH,EACF,GAAK6F,EAEP,KAQJ,0CAEH3H,EAAEI,UAAUC,UAAW,cAAc,SAAUH,EAAOI,EAASc,GAC9D,OAAOZ,KAAKC,SAAUH,KAAcN,EAAEI,UAAU6B,QAAQ6F,QAAQ3F,KAAM3B,KAAMN,EAAOI,EAASc,KAC1F,gEAEHpB,EAAEI,UAAUC,UAAW,gBAAgB,SAAUH,EAAOI,GACvD,OAAOE,KAAKC,SAAUH,IAAa,SAASqB,KAAMzB,KAChD,0BAeHF,EAAEI,UAAUC,UAAW,WAAW,SAAUH,EAAOI,EAASc,GAC3D,QAAKZ,KAAKC,SAAUH,KAGE,iBAAVc,IACXA,EAAQ,IAAIK,OAAQ,OAASL,EAAQ,OAE/BA,EAAMO,KAAMzB,MACjB,mBAKHF,EAAEI,UAAUC,UAAW,WAAW,SAAUH,EAAOI,GAClD,OAAOE,KAAKC,SAAUH,IAAa,0FAA0FqB,KAAMzB,KACjI,wCAoBHF,EAAEI,UAAUC,UAAW,WAAW,SAAUgH,EAAc/G,GAGzD,OAFA+G,EAAeA,EAAalH,QAAS,OAAQ,IAEtCK,KAAKC,SAAUH,IADT,kHAC6BqB,KAAM0F,KAC9C,wCAYHrH,EAAEI,UAAUC,UAAW,YAAY,SAAUgH,EAAc/G,GAE1D,OADA+G,EAAeA,EAAalH,QAAS,eAAgB,IAC9CK,KAAKC,SAAUH,IAAa+G,EAAa1G,OAAS,GACxD0G,EAAa3G,MAAO,sFACnB,2CAUHV,EAAEI,UAAUC,UAAW,WAAW,SAAUgH,EAAc/G,GAEzD,OADA+G,EAAeA,EAAalH,QAAS,eAAgB,IAC9CK,KAAKC,SAAUH,IAAa+G,EAAa1G,OAAS,GACxD0G,EAAa3G,MAAO,uJACnB,wCAkBHV,EAAEI,UAAUC,UAAW,WAAW,SAAUgH,EAAc/G,GAEzD,OADA+G,EAAeA,EAAalH,QAAS,OAAQ,IACtCK,KAAKC,SAAUH,IAAa+G,EAAa1G,OAAS,GACxD0G,EAAa3G,MAAO,yFACnB,wCAUHV,EAAEI,UAAUC,UAAW,gBAAgB,SAAU0H,EAAWzH,GAC3D,OAAOE,KAAKC,SAAUH,IAAa,uCAAuCqB,KAAMoG,KAC9E,0BAeH/H,EAAEI,UAAUC,UAAW,gBAAgB,SAAUH,EAAOI,GACvD,OAAOE,KAAKC,SAAUH,IAAa,8EAA8EqB,KAAMzB,KACrH,uCAGHF,EAAEI,UAAUC,UAAW,gBAAgB,SAAUH,EAAOI,GACvD,OAAOE,KAAKC,SAAUH,IAAa,UAAUqB,KAAMzB,KACjD,uCAEHF,EAAEI,UAAUC,UAAW,gBAAgB,SAAUH,EAAOI,GACvD,OAAOE,KAAKC,SAAUH,IAAa,gCAAgCqB,KAAMzB,KACvE,uCAGHF,EAAEI,UAAUC,UAAW,cAAc,SAAUH,EAAOI,GACrD,OAAOE,KAAKC,SAAUH,IAAa,iOAAiOqB,KAAMzB,KACxQ,uCAkBHF,EAAEI,UAAUC,UAAW,sBAAsB,SAAUH,EAAOI,EAAS0H,GACtE,IAAIC,EAAUjI,EAAGgI,EAAS,GAAK1H,EAAQ4H,MACtCC,EAAeF,EAAQG,GAAI,GAC3BhI,EAAY+H,EAAaE,KAAM,iBAAoBF,EAAaE,KAAM,iBAAoBrI,EAAEsI,OAAQ,GAAI9H,MACxG+H,EAAUN,EAAQO,QAAQ,WACzB,OAAOpI,EAAUqI,aAAcjI,SAC5BG,QAAUqH,EAAS,GAaxB,OAVAG,EAAaE,KAAM,gBAAiBjI,GAG9BJ,EAAGM,GAAU+H,KAAM,qBACxBJ,EAAQI,KAAM,mBAAmB,GACjCJ,EAAQS,MAAM,WACbtI,EAAUE,QAASE,SAEpByH,EAAQI,KAAM,mBAAmB,IAE3BE,IACLvI,EAAEI,UAAUQ,OAAQ,8CAuBvBZ,EAAEI,UAAUC,UAAW,wBAAwB,SAAUH,EAAOI,EAAS0H,GACxE,IAAIC,EAAUjI,EAAGgI,EAAS,GAAK1H,EAAQ4H,MACtCC,EAAeF,EAAQG,GAAI,GAC3BhI,EAAY+H,EAAaE,KAAM,cAAiBF,EAAaE,KAAM,cAAiBrI,EAAEsI,OAAQ,GAAI9H,MAClGmI,EAAeV,EAAQO,QAAQ,WAC9B,OAAOpI,EAAUqI,aAAcjI,SAC5BG,OACJ4H,EAA2B,IAAjBI,GAAsBA,GAAgBX,EAAS,GAa1D,OAVAG,EAAaE,KAAM,aAAcjI,GAG3BJ,EAAGM,GAAU+H,KAAM,qBACxBJ,EAAQI,KAAM,mBAAmB,GACjCJ,EAAQS,MAAM,WACbtI,EAAUE,QAASE,SAEpByH,EAAQI,KAAM,mBAAmB,IAE3BE,IACLvI,EAAEI,UAAUQ,OAAQ,kEAoCvBZ,EAAEI,UAAUC,UAAW,WAAW,SAAUH,EAAOI,EAAS0H,GAC3D,IAIClH,EAJG8H,OAA+B,IAAZZ,EACtBa,GAAkBD,QAA8C,IAA1BZ,EAAQa,eAA0Cb,EAAQa,cAChGC,GAAuBF,QAAmD,IAA/BZ,EAAQc,oBAA+Cd,EAAQc,mBAC1GC,GAAoBH,QAAgD,IAA5BZ,EAAQe,iBAA4Cf,EAAQe,gBAcrG,OARCjI,EAHKgI,GAAuBC,EAEjBD,GAAsBC,EACzB,mIACGD,EACH,gIAEA,0HANA,uHASThI,EAAQ+H,EAAgB,IAAIpH,OAAQX,GAAU,IAAIW,OAAQX,EAAO,KAC1DN,KAAKC,SAAUH,IAAaQ,EAAMa,KAAMzB,KAC7C,iCAGHF,EAAEI,UAAUC,UAAW,qBAAqB,SAAUH,EAAOI,EAASc,GACrE,OAAOpB,EAAGE,GAAQ8I,OAAOrI,QAAUS,IACjCpB,EAAEI,UAAUQ,OAAQ,0CAEvBZ,EAAEI,UAAUC,UAAW,QAAQ,SAAUH,EAAOI,GAC/C,OAAOE,KAAKC,SAAUH,IAAa,yCAAyCqB,KAAMzB,KAChF,uDAEHF,EAAEI,UAAUC,UAAW,WAAW,SAAUH,EAAOI,GAClD,OAAOE,KAAKC,SAAUH,IAAa,iDAAiDqB,KAAMzB,KACxF,sDAGHF,EAAEI,UAAUC,UAAW,QAAQ,SAAUH,EAAOI,GAC/C,OAAOE,KAAKC,SAAUH,IAAa,gqBAAgqBqB,KAAMzB,KACvsBF,EAAEI,UAAUkF,SAAS2D,KAcxBjJ,EAAEI,UAAUC,UAAW,SAAS,SAAU6I,GACtC,GAAkB,KAAbA,EAAEvI,OACH,OAAO,EAGX,IAIIO,EAAGoB,EAAG6G,EAAGC,EAAOC,EAJhBC,EAAK,CAAE,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACrHC,EAAK,CAAE,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GACzEC,EAAK,CAAE,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GACxDC,EAAK,EAGT,IAAMvI,EAAI,EAAGA,EAAI,GAAIA,IACjBkI,EAAII,EAAItI,GACRiI,EAAID,EAAEQ,MAAOxI,EAAGA,EAAI,GACfyI,MAAOR,IACRA,EAAIA,EAAE9G,cACNC,EAAIiH,EAAID,EAAGpC,QAASiC,KAEpB7G,EAAInB,SAAUgI,EAAG,IAEV,IAANjI,IAEDmI,EAAM/G,EACK,MAAN6G,IACDE,EAAM,KAGdI,GAAMnH,EAAI8G,EAGd,OADKK,EAAK,KACEJ,IAIb,iEAEHrJ,EAAEI,UAAUC,UAAW,aAAa,SAAUH,EAAOI,GACpD,OAAOE,KAAKC,SAAUH,IAAa,mBAAmBqB,KAAMzB,KAC1D,yCAEHF,EAAEI,UAAUC,UAAW,YAAY,SAAUH,EAAOI,GACnD,OAAOE,KAAKC,SAAUH,IAAa,yBAAyBqB,KAAMzB,KAChE,gEACIF,IAr9C4C,gC,qBCVnD;;;;;;;;GAUED,EAAQ,CAAC,gBAAmB,0BAAR,EAMpB,SAAUC,GAEZA,EAAEsI,OAAQtI,EAAE4J,GAAI,CAGfC,SAAU,SAAU7B,GAGnB,GAAMxH,KAAKG,OAAX,CAQA,IAAIP,EAAYJ,EAAEqI,KAAM7H,KAAM,GAAK,aACnC,OAAKJ,IAKLI,KAAKe,KAAM,aAAc,cAEzBnB,EAAY,IAAIJ,EAAEI,UAAW4H,EAASxH,KAAM,IAC5CR,EAAEqI,KAAM7H,KAAM,GAAK,YAAaJ,GAE3BA,EAAUgG,SAAS0D,WAEvBtJ,KAAKgG,GAAI,iBAAkB,WAAW,SAAUuD,GAI/C3J,EAAU4J,aAAeD,EAAME,cAG1BjK,EAAGQ,MAAO0J,SAAU,YACxB9J,EAAU+J,cAAe,QAIkBC,IAAvCpK,EAAGQ,MAAOe,KAAM,oBACpBnB,EAAU+J,cAAe,MAK3B3J,KAAKgG,GAAI,mBAAmB,SAAUuD,GAOrC,SAASM,IACR,IAAIC,EAAQlG,EAcZ,OAPKhE,EAAU4J,eAAkB5J,EAAUgG,SAASmE,eAAiBnK,EAAUoK,iBAC9EF,EAAStK,EAAG,0BACVuB,KAAM,OAAQnB,EAAU4J,aAAaS,MACrC/D,IAAK1G,EAAGI,EAAU4J,cAAetD,OACjCgE,SAAUtK,EAAUuK,gBAGlBvK,EAAUgG,SAASmE,gBAAkBnK,EAAUgG,SAASwE,SAC5DxG,EAAShE,EAAUgG,SAASmE,cAAcpI,KAAM/B,EAAWA,EAAUuK,YAAaZ,GAC7EO,GAGJA,EAAOO,cAEQT,IAAXhG,GACGA,GAQV,OArCKhE,EAAUgG,SAASwE,OAGvBb,EAAMe,iBAkCF1K,EAAU+J,cACd/J,EAAU+J,cAAe,EAClBE,KAEHjK,EAAU8H,OACT9H,EAAU2K,gBACd3K,EAAUoK,eAAgB,GACnB,GAEDH,KAEPjK,EAAU4K,gBACH,OAKH5K,GA7FD4H,GAAWA,EAAQ4C,OAASK,OAAOC,SACvCA,QAAQC,KAAM,yDAgGjB1E,MAAO,WACN,IAAIA,EAAOrG,EAAWgL,EAgBtB,OAdKpL,EAAGQ,KAAM,IAAM6K,GAAI,QACvB5E,EAAQjG,KAAKqJ,WAAW3B,QAExBkD,EAAY,GACZ3E,GAAQ,EACRrG,EAAYJ,EAAGQ,KAAM,GAAI0H,MAAO2B,WAChCrJ,KAAKkI,MAAM,YACVjC,EAAQrG,EAAUE,QAASE,OAAUiG,KAEpC2E,EAAYA,EAAUzH,OAAQvD,EAAUgL,eAG1ChL,EAAUgL,UAAYA,GAEhB3E,GAIR6E,MAAO,SAAUC,EAASC,GACzB,IAECpF,EAAUqF,EAAaC,EAAerD,EAAMjH,EAAOuK,EAFhDrL,EAAUE,KAAM,GACnBoL,OAA8D,IAAnCpL,KAAKe,KAAM,oBAA0E,UAAnCf,KAAKe,KAAM,mBAIzF,GAAgB,MAAXjB,KAICA,EAAQ4H,MAAQ0D,IACrBtL,EAAQ4H,KAAO1H,KAAKqL,QAAS,QAAU,GACvCvL,EAAQmK,KAAOjK,KAAKe,KAAM,SAGN,MAAhBjB,EAAQ4H,MAAb,CAIA,GAAKqD,EAIJ,OAFAE,GADArF,EAAWpG,EAAEqI,KAAM/H,EAAQ4H,KAAM,aAAc9B,UACxBkF,MACvBI,EAAgB1L,EAAEI,UAAUqL,YAAanL,GAChCiL,GACT,IAAK,MACJvL,EAAEsI,OAAQoD,EAAe1L,EAAEI,UAAU0L,cAAeN,WAG7CE,EAAcpG,SACrBmG,EAAanL,EAAQmK,MAASiB,EACzBF,EAASlG,WACbc,EAASd,SAAUhF,EAAQmK,MAASzK,EAAEsI,OAAQlC,EAASd,SAAUhF,EAAQmK,MAAQe,EAASlG,WAE3F,MACD,IAAK,SACJ,OAAMkG,GAING,EAAW,GACX3L,EAAE0I,KAAM8C,EAASvK,MAAO,OAAQ,SAAU8K,EAAOC,GAChDL,EAAUK,GAAWN,EAAeM,UAC7BN,EAAeM,MAEhBL,WARCF,EAAanL,EAAQmK,MACrBiB,GAkCV,OAvBArD,EAAOrI,EAAEI,UAAU6L,eACnBjM,EAAEsI,OACD,GACAtI,EAAEI,UAAU8L,WAAY5L,GACxBN,EAAEI,UAAU+L,eAAgB7L,GAC5BN,EAAEI,UAAUgM,UAAW9L,GACvBN,EAAEI,UAAUqL,YAAanL,IACvBA,IAGO+L,WACTjL,EAAQiH,EAAKgE,gBACNhE,EAAKgE,SACZhE,EAAOrI,EAAEsI,OAAQ,CAAE+D,SAAUjL,GAASiH,IAIlCA,EAAKiE,SACTlL,EAAQiH,EAAKiE,cACNjE,EAAKiE,OACZjE,EAAOrI,EAAEsI,OAAQD,EAAM,CAAEiE,OAAQlL,KAG3BiH,MAKT,IAyuCOkE,EAzuCHC,EAAO,SAAUC,GAGpB,OAAOA,EAAItM,QAAS,qCAAsC,KAI3DH,EAAEsI,OAAQtI,EAAE0M,KAAKC,SAAW3M,EAAE0M,KAAM,KAAO,CAG1CE,MAAO,SAAUC,GAChB,OAAQL,EAAM,GAAKxM,EAAG6M,GAAInG,QAI3BoG,OAAQ,SAAUD,GACjB,IAAInG,EAAM1G,EAAG6M,GAAInG,MACjB,OAAe,OAARA,KAAkB8F,EAAM,GAAK9F,IAIrCqG,UAAW,SAAUF,GACpB,OAAQ7M,EAAG6M,GAAIG,KAAM,cAKvBhN,EAAEI,UAAY,SAAU4H,EAASE,GAChC1H,KAAK4F,SAAWpG,EAAEsI,QAAQ,EAAM,GAAItI,EAAEI,UAAU6M,SAAUjF,GAC1DxH,KAAKmK,YAAczC,EACnB1H,KAAK0M,QAINlN,EAAEI,UAAUQ,OAAS,SAAUuM,EAAQ5M,GACtC,OAA0B,IAArB6M,UAAUzM,OACP,WACN,IAAI0M,EAAOrN,EAAEsN,UAAWF,WAExB,OADAC,EAAKE,QAASJ,GACPnN,EAAEI,UAAUQ,OAAO4M,MAAOhN,KAAM6M,UAGzBjD,IAAX7J,IAGA6M,UAAUzM,OAAS,GAAKJ,EAAOkN,cAAgBjK,QACnDjD,EAASP,EAAEsN,UAAWF,WAAY1D,MAAO,IAErCnJ,EAAOkN,cAAgBjK,QAC3BjD,EAAS,CAAEA,IAEZP,EAAE0I,KAAMnI,GAAQ,SAAUW,EAAGoB,GAC5B6K,EAASA,EAAOhN,QAAS,IAAIsB,OAAQ,MAAQP,EAAI,MAAO,MAAO,WAC9D,OAAOoB,SAVD6K,IAgBTnN,EAAEsI,OAAQtI,EAAEI,UAAW,CAEtB6M,SAAU,CACT3H,SAAU,GACVoI,OAAQ,GACRpC,MAAO,GACPqC,WAAY,QACZC,aAAc,UACdC,WAAY,QACZC,aAAc,QACdC,cAAc,EACd/C,cAAc,EACdgD,eAAgBhO,EAAG,IACnBiO,oBAAqBjO,EAAG,IACxB8J,UAAU,EACVoE,OAAQ,UACRC,aAAa,EACbC,UAAW,SAAU9N,GACpBE,KAAK6N,WAAa/N,EAGbE,KAAK4F,SAAS2H,eACbvN,KAAK4F,SAASkI,aAClB9N,KAAK4F,SAASkI,YAAYnM,KAAM3B,KAAMF,EAASE,KAAK4F,SAASuH,WAAYnN,KAAK4F,SAASyH,YAExFrN,KAAK+N,UAAW/N,KAAKgO,UAAWlO,MAGlC+F,WAAY,SAAU/F,GACfE,KAAKiO,UAAWnO,MAAeA,EAAQmK,QAAQjK,KAAKkO,YAAclO,KAAKC,SAAUH,IACtFE,KAAKF,QAASA,IAGhBqO,QAAS,SAAUrO,EAASyJ,GAqBN,IAAhBA,EAAM6E,OAAgD,KAAjCpO,KAAKiI,aAAcnI,KAAkE,IAA9CN,EAAE6O,QAAS9E,EAAM+E,QAL/D,CAClB,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GACxB,GAAI,GAAI,GAAI,GAAI,IAAK,QAKVxO,EAAQmK,QAAQjK,KAAKkO,WAAapO,EAAQmK,QAAQjK,KAAKuO,UAClEvO,KAAKF,QAASA,IAGhB0O,QAAS,SAAU1O,GAGbA,EAAQmK,QAAQjK,KAAKkO,UACzBlO,KAAKF,QAASA,GAGHA,EAAQ2O,WAAWxE,QAAQjK,KAAKkO,WAC3ClO,KAAKF,QAASA,EAAQ2O,aAGxBC,UAAW,SAAU5O,EAASqN,EAAYE,GACnB,UAAjBvN,EAAQoB,KACZlB,KAAK2O,WAAY7O,EAAQmK,MAAOlE,SAAUoH,GAAayB,YAAavB,GAEpE7N,EAAGM,GAAUiG,SAAUoH,GAAayB,YAAavB,IAGnDS,YAAa,SAAUhO,EAASqN,EAAYE,GACrB,UAAjBvN,EAAQoB,KACZlB,KAAK2O,WAAY7O,EAAQmK,MAAO2E,YAAazB,GAAapH,SAAUsH,GAEpE7N,EAAGM,GAAU8O,YAAazB,GAAapH,SAAUsH,KAMpDwB,YAAa,SAAUjJ,GACtBpG,EAAEsI,OAAQtI,EAAEI,UAAU6M,SAAU7G,IAGjCd,SAAU,CACT+G,SAAU,0BACVC,OAAQ,yBACRgD,MAAO,sCACPrG,IAAK,4BACL1D,KAAM,6BACNgK,QAAS,mCACT5M,OAAQ,+BACR6M,OAAQ,4BACR1H,QAAS,qCACT2H,UAAWzP,EAAEI,UAAUQ,OAAQ,6CAC/B8O,UAAW1P,EAAEI,UAAUQ,OAAQ,yCAC/B+O,YAAa3P,EAAEI,UAAUQ,OAAQ,6DACjCgP,MAAO5P,EAAEI,UAAUQ,OAAQ,6CAC3BiP,IAAK7P,EAAEI,UAAUQ,OAAQ,mDACzBkP,IAAK9P,EAAEI,UAAUQ,OAAQ,sDACzBmP,KAAM/P,EAAEI,UAAUQ,OAAQ,oCAG3BoP,kBAAkB,EAElBC,UAAW,CAEV/C,KAAM,WACL1M,KAAK0P,eAAiBlQ,EAAGQ,KAAK4F,SAAS6H,qBACvCzN,KAAK2P,aAAe3P,KAAK0P,eAAevP,QAAUH,KAAK0P,gBAAkBlQ,EAAGQ,KAAKmK,aACjFnK,KAAK4P,WAAapQ,EAAGQ,KAAK4F,SAAS4H,gBAAiBqC,IAAK7P,KAAK4F,SAAS6H,qBACvEzN,KAAKkO,UAAY,GACjBlO,KAAK8P,WAAa,GAClB9P,KAAKuK,eAAiB,EACtBvK,KAAK+P,QAAU,GACf/P,KAAKuO,QAAU,GACfvO,KAAKgQ,QAEL,IAEClF,EAFGX,EAAcnK,KAAKmK,YACtB+C,EAAWlN,KAAKkN,OAAS,GAe1B,SAAS+C,EAAU1G,GAClB,IAAI6B,OAAmE,IAAxC5L,EAAGQ,MAAOe,KAAM,oBAA+E,UAAxCvB,EAAGQ,MAAOe,KAAM,mBAUtG,IAPMf,KAAK0H,MAAQ0D,IAClBpL,KAAK0H,KAAOlI,EAAGQ,MAAOqL,QAAS,QAAU,GACzCrL,KAAKiK,KAAOzK,EAAGQ,MAAOe,KAAM,SAKxBoJ,IAAgBnK,KAAK0H,KAA1B,CAIA,IAAI9H,EAAYJ,EAAEqI,KAAM7H,KAAK0H,KAAM,aAClCwI,EAAY,KAAO3G,EAAMrI,KAAKvB,QAAS,YAAa,IACpDiG,EAAWhG,EAAUgG,SACjBA,EAAUsK,KAAgB1Q,EAAGQ,MAAO6K,GAAIjF,EAAS8H,SACrD9H,EAAUsK,GAAYvO,KAAM/B,EAAWI,KAAMuJ,IAhC/C/J,EAAE0I,KAAMlI,KAAK4F,SAASsH,QAAQ,SAAUiD,EAAKzQ,GACtB,iBAAVA,IACXA,EAAQA,EAAMe,MAAO,OAEtBjB,EAAE0I,KAAMxI,GAAO,SAAU6L,EAAOtB,GAC/BiD,EAAQjD,GAASkG,QAGnBrF,EAAQ9K,KAAK4F,SAASkF,MACtBtL,EAAE0I,KAAM4C,GAAO,SAAUqF,EAAKzQ,GAC7BoL,EAAOqF,GAAQ3Q,EAAEI,UAAU0L,cAAe5L,MA0B3CF,EAAGQ,KAAKmK,aACNnE,GAAI,oDACJ,0VAGyEiK,GAIzEjK,GAAI,iBAAkB,oDAAqDiK,GAExEjQ,KAAK4F,SAASwK,gBAClB5Q,EAAGQ,KAAKmK,aAAcnE,GAAI,wBAAyBhG,KAAK4F,SAASwK,iBAKnE1I,KAAM,WAQL,OAPA1H,KAAKqQ,YACL7Q,EAAEsI,OAAQ9H,KAAKkO,UAAWlO,KAAKsQ,UAC/BtQ,KAAKuO,QAAU/O,EAAEsI,OAAQ,GAAI9H,KAAKsQ,UAC5BtQ,KAAKiG,SACVzG,EAAGQ,KAAKmK,aAAcoG,eAAgB,eAAgB,CAAEvQ,OAEzDA,KAAKwQ,aACExQ,KAAKiG,SAGboK,UAAW,WACVrQ,KAAKyQ,cACL,IAAM,IAAI/P,EAAI,EAAGgQ,EAAa1Q,KAAK2Q,gBAAkB3Q,KAAK0Q,WAAcA,EAAUhQ,GAAKA,IACtFV,KAAKqF,MAAOqL,EAAUhQ,IAEvB,OAAOV,KAAKiG,SAIbnG,QAAS,SAAUA,GAClB,IAICmJ,EAAI2H,EAJDC,EAAe7Q,KAAK8Q,MAAOhR,GAC9BiR,EAAe/Q,KAAKgR,oBAAqBH,GACzCnI,EAAI1I,KACJ4D,GAAS,EA2CV,YAxCsBgG,IAAjBmH,SACG/Q,KAAKuO,QAASsC,EAAa5G,OAElCjK,KAAKiR,eAAgBF,GACrB/Q,KAAK2Q,gBAAkBnR,EAAGuR,IAI1BH,EAAQ5Q,KAAKkN,OAAQ6D,EAAa9G,QAEjCzK,EAAE0I,KAAMlI,KAAKkN,QAAQ,SAAUjD,EAAMiH,GAC/BA,IAAcN,GAAS3G,IAAS8G,EAAa9G,OACjD4G,EAAenI,EAAEsI,oBAAqBtI,EAAEoI,MAAOpI,EAAEiG,WAAY1E,OACxC4G,EAAa5G,QAAQvB,EAAE6F,UAC3C7F,EAAEiI,gBAAgBQ,KAAMN,GACxBjN,EAAS8E,EAAErD,MAAOwL,IAAkBjN,MAMxCqF,GAAoC,IAA/BjJ,KAAKqF,MAAO0L,GACjBnN,EAASA,GAAUqF,EAElBjJ,KAAKuO,QAASwC,EAAa9G,OADvBhB,EAMCjJ,KAAKoR,qBAGVpR,KAAKqR,OAASrR,KAAKqR,OAAOxB,IAAK7P,KAAK4P,aAErC5P,KAAKwQ,aAGLhR,EAAGM,GAAUiB,KAAM,gBAAiBkI,IAG9BrF,GAIR4M,WAAY,SAAUc,GACrB,GAAKA,EAAS,CACb,IAAI1R,EAAYI,KAGhBR,EAAEsI,OAAQ9H,KAAKsQ,SAAUgB,GACzBtR,KAAK4K,UAAYpL,EAAE+R,IAAKvR,KAAKsQ,UAAU,SAAUkB,EAASvH,GACzD,MAAO,CACNuH,QAASA,EACT1R,QAASF,EAAU+O,WAAY1E,GAAQ,OAKzCjK,KAAKyR,YAAcjS,EAAEkS,KAAM1R,KAAKyR,aAAa,SAAU3R,GACtD,QAAUA,EAAQmK,QAAQqH,MAGvBtR,KAAK4F,SAAS4K,WAClBxQ,KAAK4F,SAAS4K,WAAW7O,KAAM3B,KAAMA,KAAKsQ,SAAUtQ,KAAK4K,WAEzD5K,KAAK2R,qBAKPC,UAAW,WACLpS,EAAE4J,GAAGwI,WACTpS,EAAGQ,KAAKmK,aAAcyH,YAEvB5R,KAAKuO,QAAU,GACfvO,KAAKkO,UAAY,GACjBlO,KAAKyQ,cACLzQ,KAAK6R,aACL,IAAInB,EAAW1Q,KAAK0Q,WAClBoB,WAAY,iBACZC,WAAY,gBAEd/R,KAAKgS,cAAetB,IAGrBsB,cAAe,SAAUtB,GACxB,IAAIhQ,EAEJ,GAAKV,KAAK4F,SAASkI,YAClB,IAAMpN,EAAI,EAAGgQ,EAAUhQ,GAAKA,IAC3BV,KAAK4F,SAASkI,YAAYnM,KAAM3B,KAAM0Q,EAAUhQ,GAC/CV,KAAK4F,SAASuH,WAAY,IAC3BnN,KAAK2O,WAAY+B,EAAUhQ,GAAIuJ,MAAO2E,YAAa5O,KAAK4F,SAASyH,iBAGlEqD,EACE9B,YAAa5O,KAAK4F,SAASuH,YAC3ByB,YAAa5O,KAAK4F,SAASyH,aAI/B+D,iBAAkB,WACjB,OAAOpR,KAAKiS,aAAcjS,KAAKuO,UAGhC0D,aAAc,SAAUC,GAEvB,IACCxR,EADG0G,EAAQ,EAEZ,IAAM1G,KAAKwR,OAIQtI,IAAbsI,EAAKxR,IAAkC,OAAbwR,EAAKxR,KAA6B,IAAbwR,EAAKxR,IACxD0G,IAGF,OAAOA,GAGRyK,WAAY,WACX7R,KAAK+N,UAAW/N,KAAKqR,SAGtBtD,UAAW,SAAUuD,GACpBA,EAAOxL,IAAK9F,KAAK4P,YAAapH,KAAM,IACpCxI,KAAKmS,WAAYb,GAASc,QAG3BnM,MAAO,WACN,OAAuB,IAAhBjG,KAAK2G,QAGbA,KAAM,WACL,OAAO3G,KAAK4K,UAAUzK,QAGvBqK,aAAc,WACb,GAAKxK,KAAK4F,SAAS4E,aAClB,IACChL,EAAGQ,KAAKqS,kBAAoBrS,KAAK4K,UAAUzK,QAAUH,KAAK4K,UAAW,GAAI9K,SAAW,IACnFkI,OAAQ,YACRsK,QAAS,SAGTA,QAAS,WACT,MAAQC,MAOZF,eAAgB,WACf,IAAIxE,EAAa7N,KAAK6N,WACtB,OAAOA,GAEQ,IAFMrO,EAAEkS,KAAM1R,KAAK4K,WAAW,SAAU9I,GACtD,OAAOA,EAAEhC,QAAQmK,OAAS4D,EAAW5D,QAClC9J,QAAgB0N,GAGrB6C,SAAU,WACT,IAAI9Q,EAAYI,KACfwS,EAAa,GAGd,OAAOhT,EAAGQ,KAAKmK,aACdsI,KAAM,8CACN3M,IAAK,sCACLA,IAAK9F,KAAK4F,SAAS8H,QACnB1F,QAAQ,WACR,IAAIiC,EAAOjK,KAAKiK,MAAQzK,EAAGQ,MAAOe,KAAM,QACpCqK,OAAmE,IAAxC5L,EAAGQ,MAAOe,KAAM,oBAA+E,UAAxCvB,EAAGQ,MAAOe,KAAM,mBAatG,OAXMkJ,GAAQrK,EAAUgG,SAASwE,OAASK,OAAOC,SAChDA,QAAQgI,MAAO,0BAA2B1S,MAItCoL,IACJpL,KAAK0H,KAAOlI,EAAGQ,MAAOqL,QAAS,QAAU,GACzCrL,KAAKiK,KAAOA,KAIRjK,KAAK0H,OAAS9H,EAAUuK,aAKxBF,KAAQuI,IAAe5S,EAAUqS,aAAczS,EAAGQ,MAAO8K,WAI9D0H,EAAYvI,IAAS,EACd,QAIT6G,MAAO,SAAU6B,GAChB,OAAOnT,EAAGmT,GAAY,IAGvBrB,OAAQ,WACP,IAAInE,EAAanN,KAAK4F,SAASuH,WAAW1M,MAAO,KAAMwC,KAAM,KAC7D,OAAOzD,EAAGQ,KAAK4F,SAAS0H,aAAe,IAAMH,EAAYnN,KAAK2P,eAG/DiD,eAAgB,WACf5S,KAAKyR,YAAc,GACnBzR,KAAK4K,UAAY,GACjB5K,KAAKsQ,SAAW,GAChBtQ,KAAK6S,OAASrT,EAAG,IACjBQ,KAAKqR,OAAS7R,EAAG,KAGlBwQ,MAAO,WACNhQ,KAAK4S,iBACL5S,KAAK2Q,gBAAkBnR,EAAG,KAG3BiR,YAAa,WACZzQ,KAAKgQ,QACLhQ,KAAKqR,OAASrR,KAAKsR,SAASzB,IAAK7P,KAAK4P,aAGvCqB,eAAgB,SAAUnR,GACzBE,KAAKgQ,QACLhQ,KAAKqR,OAASrR,KAAKgO,UAAWlO,IAG/BmI,aAAc,SAAUnI,GACvB,IAGCoG,EAAK4M,EAHFC,EAAWvT,EAAGM,GACjBoB,EAAOpB,EAAQoB,KACfkK,OAAkE,IAAvC2H,EAAShS,KAAM,oBAA8E,UAAvCgS,EAAShS,KAAM,mBAGjG,MAAc,UAATG,GAA6B,aAATA,EACjBlB,KAAK2O,WAAY7O,EAAQmK,MAAOjC,OAAQ,YAAa9B,MACxC,WAAThF,QAAiD,IAArBpB,EAAQkT,SACxClT,EAAQkT,SAASC,SAAW,MAAQF,EAAS7M,OAIpDA,EADIkF,EACE2H,EAASvK,OAETuK,EAAS7M,MAGF,SAAThF,EAGyB,mBAAxBgF,EAAIzD,OAAQ,EAAG,IACZyD,EAAIzD,OAAQ,KAKpBqQ,EAAM5M,EAAIgN,YAAa,OACX,IAKZJ,EAAM5M,EAAIgN,YAAa,QACX,EALJhN,EAAIzD,OAAQqQ,EAAM,GAUnB5M,EAGY,iBAARA,EACJA,EAAIvG,QAAS,MAAO,IAErBuG,IAGRb,MAAO,SAAUvF,GAChBA,EAAUE,KAAKgR,oBAAqBhR,KAAK8Q,MAAOhR,IAEhD,IAMC8D,EAAQ4H,EAAQ2H,EAAMC,EANnBtI,EAAQtL,EAAGM,GAAUgL,QACxBuI,EAAa7T,EAAE+R,IAAKzG,GAAO,SAAUhJ,EAAGpB,GACvC,OAAOA,KACJP,OACJmT,GAAqB,EACrBpN,EAAMlG,KAAKiI,aAAcnI,GAwB1B,IAAM0L,KApBNxL,KAAKuT,aAAczT,GAIc,mBAArBgL,EAAMsI,WACjBA,EAAatI,EAAMsI,WAC4B,mBAA7BpT,KAAK4F,SAASwN,aAChCA,EAAapT,KAAK4F,SAASwN,YAMvBA,IACJlN,EAAMkN,EAAWzR,KAAM7B,EAASoG,UAGzB4E,EAAMsI,YAGEtI,EAAQ,CACvBqI,EAAO,CAAE3H,OAAQA,EAAQgI,WAAY1I,EAAOU,IAC5C,IAKC,GAAgB,yBAJhB5H,EAASpE,EAAEI,UAAU6B,QAAS+J,GAAS7J,KAAM3B,KAAMkG,EAAKpG,EAASqT,EAAKK,cAId,IAAfH,EAAmB,CAC3DC,GAAqB,EACrB,SAID,GAFAA,GAAqB,EAEL,YAAX1P,EAEJ,YADA5D,KAAKqR,OAASrR,KAAKqR,OAAOvL,IAAK9F,KAAKgO,UAAWlO,KAIhD,IAAM8D,EAEL,OADA5D,KAAKyT,aAAc3T,EAASqT,IACrB,EAEP,MAAQZ,GAQT,MAPKvS,KAAK4F,SAASwE,OAASK,OAAOC,SAClCA,QAAQgJ,IAAK,4CAA8C5T,EAAQ6T,GAAK,gBAAkBR,EAAK3H,OAAS,YAAa+G,GAEjHA,aAAaqB,YACjBrB,EAAEf,SAAW,+CAAiD1R,EAAQ6T,GAAK,gBAAkBR,EAAK3H,OAAS,aAGtG+G,GAGR,IAAKe,EAML,OAHKtT,KAAKiS,aAAcnH,IACvB9K,KAAKyR,YAAYN,KAAMrR,IAEjB,GAMR+T,kBAAmB,SAAU/T,EAAS0L,GACrC,OAAOhM,EAAGM,GAAU+H,KAAM,MAAQ2D,EAAOzI,OAAQ,GAAIlB,cACpD2J,EAAOhK,UAAW,GAAIsS,gBAAmBtU,EAAGM,GAAU+H,KAAM,QAI9DkM,cAAe,SAAU9J,EAAMuB,GAC9B,IAAIwI,EAAIhU,KAAK4F,SAASd,SAAUmF,GAChC,OAAO+J,IAAOA,EAAE/G,cAAgB/J,OAAS8Q,EAAIA,EAAGxI,KAIjDyI,YAAa,WACZ,IAAM,IAAIvT,EAAI,EAAGA,EAAIkM,UAAUzM,OAAQO,IACtC,QAAwBkJ,IAAnBgD,UAAWlM,GACf,OAAOkM,UAAWlM,IAerBwT,eAAgB,SAAUpU,EAASqT,GACb,iBAATA,IACXA,EAAO,CAAE3H,OAAQ2H,IAGlB,IAAI3B,EAAUxR,KAAKiU,YACjBjU,KAAK+T,cAAejU,EAAQmK,KAAMkJ,EAAK3H,QACvCxL,KAAK6T,kBAAmB/T,EAASqT,EAAK3H,SAGrCxL,KAAK4F,SAAS+H,aAAe7N,EAAQqU,YAASvK,EAC/CpK,EAAEI,UAAUkF,SAAUqO,EAAK3H,QAC3B,2CAA6C1L,EAAQmK,KAAO,aAE7DmK,EAAW,gBAOZ,MANwB,mBAAZ5C,EACXA,EAAUA,EAAQ7P,KAAM3B,KAAMmT,EAAKK,WAAY1T,GACpCsU,EAASjT,KAAMqQ,KAC1BA,EAAUhS,EAAEI,UAAUQ,OAAQoR,EAAQ7R,QAASyU,EAAU,QAAUjB,EAAKK,aAGlEhC,GAGRiC,aAAc,SAAU3T,EAASqT,GAChC,IAAI3B,EAAUxR,KAAKkU,eAAgBpU,EAASqT,GAE5CnT,KAAK4K,UAAUuG,KAAM,CACpBK,QAASA,EACT1R,QAASA,EACT0L,OAAQ2H,EAAK3H,SAGdxL,KAAKsQ,SAAUxQ,EAAQmK,MAASuH,EAChCxR,KAAKkO,UAAWpO,EAAQmK,MAASuH,GAGlCW,WAAY,SAAUkC,GAIrB,OAHKrU,KAAK4F,SAAS0O,UAClBD,EAAWA,EAASxE,IAAKwE,EAASE,OAAQvU,KAAK4F,SAAS0O,WAElDD,GAGR1C,kBAAmB,WAClB,IAAIjR,EAAGgQ,EAAUgC,EACjB,IAAMhS,EAAI,EAAGV,KAAK4K,UAAWlK,GAAKA,IACjCgS,EAAQ1S,KAAK4K,UAAWlK,GACnBV,KAAK4F,SAAS8I,WAClB1O,KAAK4F,SAAS8I,UAAU/M,KAAM3B,KAAM0S,EAAM5S,QAASE,KAAK4F,SAASuH,WAAYnN,KAAK4F,SAASyH,YAE5FrN,KAAKwU,UAAW9B,EAAM5S,QAAS4S,EAAMlB,SAKtC,GAHKxR,KAAK4K,UAAUzK,SACnBH,KAAK6S,OAAS7S,KAAK6S,OAAOhD,IAAK7P,KAAK4P,aAEhC5P,KAAK4F,SAAS6O,QAClB,IAAM/T,EAAI,EAAGV,KAAKyR,YAAa/Q,GAAKA,IACnCV,KAAKwU,UAAWxU,KAAKyR,YAAa/Q,IAGpC,GAAKV,KAAK4F,SAASkI,YAClB,IAAMpN,EAAI,EAAGgQ,EAAW1Q,KAAK0U,gBAAiBhE,EAAUhQ,GAAKA,IAC5DV,KAAK4F,SAASkI,YAAYnM,KAAM3B,KAAM0Q,EAAUhQ,GAAKV,KAAK4F,SAASuH,WAAYnN,KAAK4F,SAASyH,YAG/FrN,KAAKqR,OAASrR,KAAKqR,OAAOvL,IAAK9F,KAAK6S,QACpC7S,KAAK6R,aACL7R,KAAKmS,WAAYnS,KAAK6S,QAAS8B,QAGhCD,cAAe,WACd,OAAO1U,KAAK2Q,gBAAgB7K,IAAK9F,KAAK4U,oBAGvCA,gBAAiB,WAChB,OAAOpV,EAAGQ,KAAK4K,WAAY2G,KAAK,WAC/B,OAAOvR,KAAKF,YAId0U,UAAW,SAAU1U,EAAS0R,GAC7B,IAAIqD,EAAOjE,EAAOkE,EAASpM,EAC1BgK,EAAQ1S,KAAKgO,UAAWlO,GACxBiV,EAAY/U,KAAKgV,SAAUlV,GAC3BmV,EAAczV,EAAGM,GAAUiB,KAAM,oBAE7B2R,EAAMvS,QAGVuS,EAAM9D,YAAa5O,KAAK4F,SAASyH,YAAatH,SAAU/F,KAAK4F,SAASuH,YAGjEnN,KAAK4F,UAAY5F,KAAK4F,SAASsP,WACnCxC,EAAMlK,KAAMgJ,GAAW,IAEvBkB,EAAMyC,KAAM3D,GAAW,MAKxBkB,EAAQlT,EAAG,IAAMQ,KAAK4F,SAAS0H,aAAe,KAC5CvM,KAAM,KAAMgU,EAAY,UACxBhP,SAAU/F,KAAK4F,SAASuH,YAErBnN,KAAK4F,UAAY5F,KAAK4F,SAASsP,WACnCxC,EAAMlK,KAAMgJ,GAAW,IAEvBkB,EAAMyC,KAAM3D,GAAW,IAIxBqD,EAAQnC,EACH1S,KAAK4F,SAAS0O,UAIlBO,EAAQnC,EAAMN,OAAOuC,OAAOS,KAAM,IAAMpV,KAAK4F,SAAS0O,QAAU,MAAOC,UAEnEvU,KAAK0P,eAAevP,OACxBH,KAAK0P,eAAe2F,OAAQR,GACjB7U,KAAK4F,SAAS0P,eACzBtV,KAAK4F,SAAS0P,eAAe3T,KAAM3B,KAAM6U,EAAOrV,EAAGM,IAEnD+U,EAAMU,YAAazV,GAIf4S,EAAM7H,GAAI,SAGd6H,EAAM3R,KAAM,MAAOgU,GAI2E,IAAnFrC,EAAM8C,QAAS,cAAgBxV,KAAKyV,cAAeV,GAAc,MAAO5U,SACnF2U,EAAUpC,EAAM3R,KAAM,MAGhBkU,EAEOA,EAAY/U,MAAO,IAAIe,OAAQ,MAAQjB,KAAKyV,cAAeX,GAAY,UAGnFG,GAAe,IAAMH,GAJrBG,EAAcH,EAMftV,EAAGM,GAAUiB,KAAM,mBAAoBkU,IAGvCrE,EAAQ5Q,KAAKkN,OAAQpN,EAAQmK,SAE5BvB,EAAI1I,KACJR,EAAE0I,KAAMQ,EAAEwE,QAAQ,SAAUjD,EAAMiH,GAC5BA,IAAcN,GAClBpR,EAAG,UAAYkJ,EAAE+M,cAAexL,GAAS,KAAMvB,EAAEyB,aAC/CpJ,KAAM,mBAAoB2R,EAAM3R,KAAM,cAMvCyQ,GAAWxR,KAAK4F,SAAS6O,UAC9B/B,EAAMlK,KAAM,IAC0B,iBAA1BxI,KAAK4F,SAAS6O,QACzB/B,EAAM3M,SAAU/F,KAAK4F,SAAS6O,SAE9BzU,KAAK4F,SAAS6O,QAAS/B,EAAO5S,IAGhCE,KAAK6S,OAAS7S,KAAK6S,OAAOhD,IAAK6C,IAGhC1E,UAAW,SAAUlO,GACpB,IAAImK,EAAOjK,KAAKyV,cAAezV,KAAKgV,SAAUlV,IAC7C4V,EAAYlW,EAAGM,GAAUiB,KAAM,oBAC/B4R,EAAW,cAAgB1I,EAAO,kBAAoBA,EAAO,OAQ9D,OALKyL,IACJ/C,EAAWA,EAAW,MAAQ3S,KAAKyV,cAAeC,GAChD/V,QAAS,OAAQ,QAGbK,KACLsR,SACAtJ,OAAQ2K,IAMX8C,cAAe,SAAUE,GACxB,YAAgB/L,IAAX+L,EACG,GAGDA,EAAOhW,QAAS,yCAA0C,SAGlEqV,SAAU,SAAUlV,GACnB,OAAOE,KAAKkN,OAAQpN,EAAQmK,QAAYjK,KAAKiO,UAAWnO,GAAYA,EAAQmK,KAAOnK,EAAQ6T,IAAM7T,EAAQmK,OAG1G+G,oBAAqB,SAAUlR,GAQ9B,OALKE,KAAKiO,UAAWnO,KACpBA,EAAUE,KAAK2O,WAAY7O,EAAQmK,OAI7BzK,EAAGM,GAAUgG,IAAK9F,KAAK4F,SAAS8H,QAAU,IAGlDO,UAAW,SAAUnO,GACpB,MAAS,kBAAoBqB,KAAMrB,EAAQoB,OAG5CyN,WAAY,SAAU1E,GACrB,OAAOzK,EAAGQ,KAAKmK,aAAcsI,KAAM,UAAYzS,KAAKyV,cAAexL,GAAS,OAG7E2L,UAAW,SAAUlW,EAAOI,GAC3B,OAASA,EAAQ+V,SAAS/B,eAC1B,IAAK,SACJ,OAAOtU,EAAG,kBAAmBM,GAAUK,OACxC,IAAK,QACJ,GAAKH,KAAKiO,UAAWnO,GACpB,OAAOE,KAAK2O,WAAY7O,EAAQmK,MAAOjC,OAAQ,YAAa7H,OAG9D,OAAOT,EAAMS,QAGd2V,OAAQ,SAAUlV,EAAOd,GACxB,OAAOE,KAAK+V,mBAAoBnV,IAAUZ,KAAK+V,mBAAoBnV,GAASA,EAAOd,IAGpFiW,YAAa,CACZ,QAAW,SAAUnV,GACpB,OAAOA,GAER,OAAU,SAAUA,EAAOd,GAC1B,QAASN,EAAGoB,EAAOd,EAAQ4H,MAAOvH,QAEnC,SAAY,SAAUS,EAAOd,GAC5B,OAAOc,EAAOd,KAIhBG,SAAU,SAAUH,GACnB,IAAIoG,EAAMlG,KAAKiI,aAAcnI,GAC7B,OAAQN,EAAEI,UAAU6B,QAAQoK,SAASlK,KAAM3B,KAAMkG,EAAKpG,IAAa,uBAGpEkW,gBAAiB,SAAUlW,GAC1B,MAAO,WAAaA,EAAQmK,MAG7BgM,aAAc,SAAUnW,GACjBE,KAAK+P,QAASjQ,EAAQmK,QAC3BjK,KAAKuK,iBACL/K,EAAGM,GAAUiG,SAAU/F,KAAK4F,SAASwH,cACrCpN,KAAK+P,QAASjQ,EAAQmK,OAAS,IAIjCiM,YAAa,SAAUpW,EAASmG,GAC/BjG,KAAKuK,iBAGAvK,KAAKuK,eAAiB,IAC1BvK,KAAKuK,eAAiB,UAEhBvK,KAAK+P,QAASjQ,EAAQmK,MAC7BzK,EAAGM,GAAU8O,YAAa5O,KAAK4F,SAASwH,cACnCnH,GAAiC,IAAxBjG,KAAKuK,gBAAwBvK,KAAKgK,eAAiBhK,KAAK0H,QAAkC,IAAxB1H,KAAKuK,gBACpF/K,EAAGQ,KAAKmK,aAAcmI,QAAS,UAM1BtS,KAAKwJ,cACThK,EAAG,sBAAwBQ,KAAKwJ,aAAaS,KAAO,KAAMjK,KAAKmK,aAAcE,SAG9ErK,KAAKgK,eAAgB,IACT/D,GAAiC,IAAxBjG,KAAKuK,gBAAwBvK,KAAKgK,gBACvDxK,EAAGQ,KAAKmK,aAAcoG,eAAgB,eAAgB,CAAEvQ,OACxDA,KAAKgK,eAAgB,IAIvBuJ,aAAc,SAAUzT,GACvB,IAAIqW,EAECnW,KAAK+P,QAASjQ,EAAQmK,QAC1BkM,EAAOnW,KAAKgW,gBAAiBlW,GAC7BN,EAAE4W,UAAWD,GAEbnW,KAAKuK,iBAGAvK,KAAKuK,eAAiB,IAC1BvK,KAAKuK,eAAiB,UAGhBvK,KAAK+P,QAASjQ,EAAQmK,MAC7BzK,EAAGM,GAAU8O,YAAa5O,KAAK4F,SAASwH,gBAI1CiJ,cAAe,SAAUvW,EAAS0L,GAGjC,OAFAA,EAA2B,iBAAXA,GAAuBA,GAAU,SAE1ChM,EAAEqI,KAAM/H,EAAS,kBAAqBN,EAAEqI,KAAM/H,EAAS,gBAAiB,CAC9EwW,IAAK,KACLrQ,OAAO,EACPuL,QAASxR,KAAKkU,eAAgBpU,EAAS,CAAE0L,OAAQA,OAKnD+K,QAAS,WACRvW,KAAK4R,YAELpS,EAAGQ,KAAKmK,aACNqM,IAAK,aACL1E,WAAY,aACZW,KAAM,0BACL+D,IAAK,qBACL5H,YAAa,yBACd6D,KAAM,2BACL+D,IAAK,sBACL5H,YAAa,0BACd6D,KAAM,gCACL+D,IAAK,2BACL5H,YAAa,+BACd6D,KAAM,mCACL+D,IAAK,8BACL5H,YAAa,kCACd6D,KAAM,8BACL+D,IAAK,yBACL5H,YAAa,+BAKlB6H,kBAAmB,CAClB5K,SAAU,CAAEA,UAAU,GACtBiD,MAAO,CAAEA,OAAO,GAChBrG,IAAK,CAAEA,KAAK,GACZ1D,KAAM,CAAEA,MAAM,GACdgK,QAAS,CAAEA,SAAS,GACpB5M,OAAQ,CAAEA,QAAQ,GAClB6M,OAAQ,CAAEA,QAAQ,GAClB0H,WAAY,CAAEA,YAAY,IAG3BC,cAAe,SAAUC,EAAW9L,GAC9B8L,EAAU3J,cAAgB/J,OAC9BlD,KAAKyW,kBAAmBG,GAAc9L,EAEtCtL,EAAEsI,OAAQ9H,KAAKyW,kBAAmBG,IAIpClL,WAAY,SAAU5L,GACrB,IAAIgL,EAAQ,GACX+L,EAAUrX,EAAGM,GAAUiB,KAAM,SAS9B,OAPK8V,GACJrX,EAAE0I,KAAM2O,EAAQpW,MAAO,MAAO,WACxBT,QAAQR,EAAEI,UAAU6W,mBACxBjX,EAAEsI,OAAQgD,EAAOtL,EAAEI,UAAU6W,kBAAmBzW,UAI5C8K,GAGRgM,uBAAwB,SAAUhM,EAAO5J,EAAMsK,EAAQ9L,GAIjD,eAAeyB,KAAMqK,KAAuB,OAATtK,GAAiB,oBAAoBC,KAAMD,MAClFxB,EAAQqX,OAAQrX,GAGXyJ,MAAOzJ,KACXA,OAAQkK,IAILlK,GAAmB,IAAVA,EACboL,EAAOU,GAAW9L,EACPwB,IAASsK,GAAmB,UAATtK,IAI9B4J,EAAgB,SAAT5J,EAAkB,UAAYsK,IAAW,IAIlDG,eAAgB,SAAU7L,GACzB,IAGC0L,EAAQ9L,EAHLoL,EAAQ,GACXiI,EAAWvT,EAAGM,GACdoB,EAAOpB,EAAQkX,aAAc,QAG9B,IAAMxL,KAAUhM,EAAEI,UAAU6B,QAGX,aAAX+J,GAKW,MAJf9L,EAAQI,EAAQkX,aAAcxL,MAK7B9L,GAAQ,GAITA,IAAUA,GAEVA,EAAQqT,EAAShS,KAAMyK,GAGxBxL,KAAK8W,uBAAwBhM,EAAO5J,EAAMsK,EAAQ9L,GAQnD,OAJKoL,EAAMmE,WAAa,uBAAuB9N,KAAM2J,EAAMmE,mBACnDnE,EAAMmE,UAGPnE,GAGRc,UAAW,SAAU9L,GACpB,IAGC0L,EAAQ9L,EAHLoL,EAAQ,GACXiI,EAAWvT,EAAGM,GACdoB,EAAOpB,EAAQkX,aAAc,QAG9B,IAAMxL,KAAUhM,EAAEI,UAAU6B,QAIZ,MAHf/B,EAAQqT,EAASlL,KAAM,OAAS2D,EAAOzI,OAAQ,GAAIlB,cAAgB2J,EAAOhK,UAAW,GAAIsS,kBAIxFpU,GAAQ,GAGTM,KAAK8W,uBAAwBhM,EAAO5J,EAAMsK,EAAQ9L,GAEnD,OAAOoL,GAGRG,YAAa,SAAUnL,GACtB,IAAIgL,EAAQ,GACXlL,EAAYJ,EAAEqI,KAAM/H,EAAQ4H,KAAM,aAKnC,OAHK9H,EAAUgG,SAASkF,QACvBA,EAAQtL,EAAEI,UAAU0L,cAAe1L,EAAUgG,SAASkF,MAAOhL,EAAQmK,QAAY,IAE3Ea,GAGRW,eAAgB,SAAUX,EAAOhL,GAmEhC,OAhEAN,EAAE0I,KAAM4C,GAAO,SAAU0B,EAAMtG,GAG9B,IAAa,IAARA,GAIL,GAAKA,EAAItF,OAASsF,EAAI+Q,QAAU,CAC/B,IAAIC,GAAW,EACf,cAAgBhR,EAAI+Q,SACpB,IAAK,SACJC,IAAa1X,EAAG0G,EAAI+Q,QAASnX,EAAQ4H,MAAOvH,OAC5C,MACD,IAAK,WACJ+W,EAAWhR,EAAI+Q,QAAQtV,KAAM7B,EAASA,GAGlCoX,EACJpM,EAAO0B,QAAuB5C,IAAd1D,EAAItF,OAAsBsF,EAAItF,OAE9CpB,EAAEqI,KAAM/H,EAAQ4H,KAAM,aAAcsK,cAAexS,EAAGM,WAC/CgL,EAAO0B,iBAjBR1B,EAAO0B,MAuBhBhN,EAAE0I,KAAM4C,GAAO,SAAUqI,EAAMgE,GAC9BrM,EAAOqI,GAA8B,mBAAdgE,GAAqC,eAAThE,EAAwBgE,EAAWrX,GAAYqX,KAInG3X,EAAE0I,KAAM,CAAE,YAAa,cAAe,WAChC4C,EAAO9K,QACX8K,EAAO9K,MAAS+W,OAAQjM,EAAO9K,WAGjCR,EAAE0I,KAAM,CAAE,cAAe,UAAW,WACnC,IAAIkP,EACCtM,EAAO9K,QACNgD,MAAMqU,QAASvM,EAAO9K,OAC1B8K,EAAO9K,MAAS,CAAE+W,OAAQjM,EAAO9K,MAAQ,IAAO+W,OAAQjM,EAAO9K,MAAQ,KACnC,iBAAlB8K,EAAO9K,QACzBoX,EAAQtM,EAAO9K,MAAOL,QAAS,UAAW,IAAKc,MAAO,UACtDqK,EAAO9K,MAAS,CAAE+W,OAAQK,EAAO,IAAOL,OAAQK,EAAO,UAKrD5X,EAAEI,UAAU4P,mBAGE,MAAb1E,EAAMwE,KAA4B,MAAbxE,EAAMuE,MAC/BvE,EAAMsE,MAAQ,CAAEtE,EAAMwE,IAAKxE,EAAMuE,YAC1BvE,EAAMwE,WACNxE,EAAMuE,KAEU,MAAnBvE,EAAMoE,WAAwC,MAAnBpE,EAAMmE,YACrCnE,EAAMqE,YAAc,CAAErE,EAAMoE,UAAWpE,EAAMmE,kBACtCnE,EAAMoE,iBACNpE,EAAMmE,YAIRnE,GAIRQ,cAAe,SAAUzD,GACxB,GAAqB,iBAATA,EAAoB,CAC/B,IAAIyP,EAAc,GAClB9X,EAAE0I,KAAML,EAAKpH,MAAO,OAAQ,WAC3B6W,EAAatX,OAAS,KAEvB6H,EAAOyP,EAER,OAAOzP,GAIRhI,UAAW,SAAUoK,EAAMuB,EAAQgG,GAClChS,EAAEI,UAAU6B,QAASwI,GAASuB,EAC9BhM,EAAEI,UAAUkF,SAAUmF,QAAqBL,IAAZ4H,EAAwBA,EAAUhS,EAAEI,UAAUkF,SAAUmF,GAClFuB,EAAOrL,OAAS,GACpBX,EAAEI,UAAU+W,cAAe1M,EAAMzK,EAAEI,UAAU0L,cAAerB,KAK9DxI,QAAS,CAGRoK,SAAU,SAAUnM,EAAOI,EAASc,GAGnC,IAAMZ,KAAK8V,OAAQlV,EAAOd,GACzB,MAAO,sBAER,GAAwC,WAAnCA,EAAQ+V,SAAS/B,cAA6B,CAGlD,IAAI5N,EAAM1G,EAAGM,GAAUoG,MACvB,OAAOA,GAAOA,EAAI/F,OAAS,EAE5B,OAAKH,KAAKiO,UAAWnO,GACbE,KAAK4V,UAAWlW,EAAOI,GAAY,EAEpCJ,SAAyCA,EAAMS,OAAS,GAIhE2O,MAAO,SAAUpP,EAAOI,GAMvB,OAAOE,KAAKC,SAAUH,IAAa,wIAAwIqB,KAAMzB,IAIlL+I,IAAK,SAAU/I,EAAOI,GAMrB,OAAOE,KAAKC,SAAUH,IAAa,khBAAkhBqB,KAAMzB,IAI5jBqF,MACKgH,GAAS,EAEN,SAAUrM,EAAOI,GAcvB,OAbMiM,IACLA,GAAS,EACJ/L,KAAK4F,SAASwE,OAASK,OAAOC,SAClCA,QAAQC,KACP,uTASI3K,KAAKC,SAAUH,KAAc,cAAcqB,KAAM,IAAImE,KAAM5F,GAAQ8C,cAK5EuM,QAAS,SAAUrP,EAAOI,GACzB,OAAOE,KAAKC,SAAUH,IAAa,+DAA+DqB,KAAMzB,IAIzGyC,OAAQ,SAAUzC,EAAOI,GACxB,OAAOE,KAAKC,SAAUH,IAAa,8CAA8CqB,KAAMzB,IAIxFsP,OAAQ,SAAUtP,EAAOI,GACxB,OAAOE,KAAKC,SAAUH,IAAa,QAAQqB,KAAMzB,IAIlDwP,UAAW,SAAUxP,EAAOI,EAASc,GACpC,IAAIT,EAAS6C,MAAMqU,QAAS3X,GAAUA,EAAMS,OAASH,KAAK4V,UAAWlW,EAAOI,GAC5E,OAAOE,KAAKC,SAAUH,IAAaK,GAAUS,GAI9CqO,UAAW,SAAUvP,EAAOI,EAASc,GACpC,IAAIT,EAAS6C,MAAMqU,QAAS3X,GAAUA,EAAMS,OAASH,KAAK4V,UAAWlW,EAAOI,GAC5E,OAAOE,KAAKC,SAAUH,IAAaK,GAAUS,GAI9CuO,YAAa,SAAUzP,EAAOI,EAASc,GACtC,IAAIT,EAAS6C,MAAMqU,QAAS3X,GAAUA,EAAMS,OAASH,KAAK4V,UAAWlW,EAAOI,GAC5E,OAAOE,KAAKC,SAAUH,IAAeK,GAAUS,EAAO,IAAOT,GAAUS,EAAO,IAI/E0O,IAAK,SAAU5P,EAAOI,EAASc,GAC9B,OAAOZ,KAAKC,SAAUH,IAAaJ,GAASkB,GAI7CyO,IAAK,SAAU3P,EAAOI,EAASc,GAC9B,OAAOZ,KAAKC,SAAUH,IAAaJ,GAASkB,GAI7CwO,MAAO,SAAU1P,EAAOI,EAASc,GAChC,OAAOZ,KAAKC,SAAUH,IAAeJ,GAASkB,EAAO,IAAOlB,GAASkB,EAAO,IAI7E2O,KAAM,SAAU7P,EAAOI,EAASc,GAC/B,IAkBC2W,EAlBGrW,EAAO1B,EAAGM,GAAUiB,KAAM,QAC7ByW,EAAe,gCAAkCtW,EAAO,qBAExDuW,EAAK,IAAIxW,OAAQ,MAAQC,EAAO,OAEhCwW,EAAgB,SAAUC,GACzB,IAAIzX,GAAU,GAAKyX,GAAMzX,MAAO,iBAChC,OAAMA,GAKCA,EAAO,GAAMA,EAAO,GAAIC,OAJvB,GAMTyX,EAAQ,SAAUD,GACjB,OAAOE,KAAKC,MAAOH,EAAME,KAAKE,IAAK,GAAIR,KAExCtR,GAAQ,EAKT,GAlBgB/E,IAASuW,EAAGtW,KAFV,CAAE,OAAQ,SAAU,SAEW8B,QAmBhD,MAAM,IAAI+U,MAAOR,GAUlB,OAPAD,EAAWG,EAAe9W,IAGrB8W,EAAehY,GAAU6X,GAAYK,EAAOlY,GAAUkY,EAAOhX,IAAY,KAC7EqF,GAAQ,GAGFjG,KAAKC,SAAUH,IAAamG,GAIpCqB,QAAS,SAAU5H,EAAOI,EAASc,GAGlC,IAAI+E,EAASnG,EAAGoB,GAMhB,OALKZ,KAAK4F,SAASC,YAAcF,EAAOG,IAAK,0BAA2B3F,QACvEwF,EAAOI,SAAU,yBAA0BC,GAAI,yBAAyB,WACvExG,EAAGM,GAAUmG,WAGRvG,IAAUiG,EAAOO,OAIzB4F,OAAQ,SAAUpM,EAAOI,EAASc,EAAO4K,GACxC,GAAKxL,KAAKC,SAAUH,GACnB,MAAO,sBAGR0L,EAA2B,iBAAXA,GAAuBA,GAAU,SAEjD,IACC5L,EAAWiI,EAAMoQ,EADdC,EAAWlY,KAAKqW,cAAevW,EAAS0L,GAW5C,OARMxL,KAAK4F,SAASd,SAAUhF,EAAQmK,QACrCjK,KAAK4F,SAASd,SAAUhF,EAAQmK,MAAS,IAE1CiO,EAASC,gBAAkBD,EAASC,iBAAmBnY,KAAK4F,SAASd,SAAUhF,EAAQmK,MAAQuB,GAC/FxL,KAAK4F,SAASd,SAAUhF,EAAQmK,MAAQuB,GAAW0M,EAAS1G,QAE5D5Q,EAAyB,iBAAVA,GAAsB,CAAE6H,IAAK7H,IAAWA,EACvDqX,EAAmBzY,EAAEoB,MAAOpB,EAAEsI,OAAQ,CAAED,KAAMnI,GAASkB,EAAMiH,OACxDqQ,EAAS5B,MAAQ2B,EACdC,EAASjS,OAGjBiS,EAAS5B,IAAM2B,EACfrY,EAAYI,KACZA,KAAKiW,aAAcnW,IACnB+H,EAAO,IACD/H,EAAQmK,MAASvK,EACvBF,EAAE4Y,KAAM5Y,EAAEsI,QAAQ,EAAM,CACvBuQ,KAAM,QACNlC,KAAMnW,KAAKgW,gBAAiBlW,GAC5BwY,SAAU,OACVzQ,KAAMA,EACN0Q,QAAS3Y,EAAUuK,YACnBsK,QAAS,SAAU+D,GAClB,IACClH,EAAQE,EAAStD,EADdjI,GAAqB,IAAbuS,GAAkC,SAAbA,EAGjC5Y,EAAUgG,SAASd,SAAUhF,EAAQmK,MAAQuB,GAAW0M,EAASC,gBAC5DlS,GACJiI,EAAYtO,EAAUoK,cACtBpK,EAAUyR,OAASzR,EAAUoO,UAAWlO,GACxCF,EAAUoK,cAAgBkE,EAC1BtO,EAAU6R,YAAYN,KAAMrR,GAC5BF,EAAU2O,QAASzO,EAAQmK,OAAS,EACpCrK,EAAU4Q,eAEVc,EAAS,GACTE,EAAUgH,GAAY5Y,EAAUsU,eAAgBpU,EAAS,CAAE0L,OAAQA,EAAQgI,WAAY9T,IACvF4R,EAAQxR,EAAQmK,MAASiO,EAAS1G,QAAUA,EAC5C5R,EAAU2O,QAASzO,EAAQmK,OAAS,EACpCrK,EAAU4Q,WAAYc,IAEvB4G,EAASjS,MAAQA,EACjBrG,EAAUsW,YAAapW,EAASmG,KAE/BrF,IACI,eAWV,IACCwX,EADGK,EAAkB,GAmCtB,OA/BKjZ,EAAEkZ,cACNlZ,EAAEkZ,eAAe,SAAU9S,EAAU+S,EAAGC,GACvC,IAAIzC,EAAOvQ,EAASuQ,KACG,UAAlBvQ,EAASyS,OACb7Y,EAAE4W,UAAWD,GACbsC,EAAiBtC,GAASyC,OAM5BR,EAAO5Y,EAAE4Y,KACT5Y,EAAE4Y,KAAO,SAAUxS,GAClB,IAAIyS,GAAS,SAAUzS,EAAWA,EAAWpG,EAAEqZ,cAAeR,KAC7DlC,GAAS,SAAUvQ,EAAWA,EAAWpG,EAAEqZ,cAAe1C,KAC3D,MAAc,UAATkC,GACJ7Y,EAAE4W,UAAWD,GACbsC,EAAiBtC,GAASiC,EAAKpL,MAAOhN,KAAM4M,WACrC6L,EAAiBtC,IAElBiC,EAAKpL,MAAOhN,KAAM4M,aAK3BpN,EAAE4W,UAAY,SAAUD,GAClBsC,EAAiBtC,KACrBsC,EAAiBtC,GAAO2C,eACjBL,EAAiBtC,KAGnB3W,IAxpDuB","file":"npm.jquery-validation.c84ffccf.bundle.js","sourcesContent":["/*!\n * jQuery Validation Plugin v1.20.0\n *\n * https://jqueryvalidation.org/\n *\n * Copyright (c) 2023 Jörn Zaefferer\n * Released under the MIT license\n */\n(function( factory ) {\n\tif ( typeof define === \"function\" && define.amd ) {\n\t\tdefine( [\"jquery\", \"./jquery.validate\"], factory );\n\t} else if (typeof module === \"object\" && module.exports) {\n\t\tmodule.exports = factory( require( \"jquery\" ) );\n\t} else {\n\t\tfactory( jQuery );\n\t}\n}(function( $ ) {\n\n( function() {\n\n\tfunction stripHtml( value ) {\n\n\t\t// Remove html tags and space chars\n\t\treturn value.replace( /<.[^<>]*?>/g, \" \" ).replace( / | /gi, \" \" )\n\n\t\t// Remove punctuation\n\t\t.replace( /[.(),;:!?%#$'\\\"_+=\\/\\-“”’]*/g, \"\" );\n\t}\n\n\t$.validator.addMethod( \"maxWords\", function( value, element, params ) {\n\t\treturn this.optional( element ) || stripHtml( value ).match( /\\b\\w+\\b/g ).length <= params;\n\t}, $.validator.format( \"Please enter {0} words or less.\" ) );\n\n\t$.validator.addMethod( \"minWords\", function( value, element, params ) {\n\t\treturn this.optional( element ) || stripHtml( value ).match( /\\b\\w+\\b/g ).length >= params;\n\t}, $.validator.format( \"Please enter at least {0} words.\" ) );\n\n\t$.validator.addMethod( \"rangeWords\", function( value, element, params ) {\n\t\tvar valueStripped = stripHtml( value ),\n\t\t\tregex = /\\b\\w+\\b/g;\n\t\treturn this.optional( element ) || valueStripped.match( regex ).length >= params[ 0 ] && valueStripped.match( regex ).length <= params[ 1 ];\n\t}, $.validator.format( \"Please enter between {0} and {1} words.\" ) );\n\n}() );\n\n/**\n * This is used in the United States to process payments, deposits,\n * or transfers using the Automated Clearing House (ACH) or Fedwire\n * systems. A very common use case would be to validate a form for\n * an ACH bill payment.\n */\n$.validator.addMethod( \"abaRoutingNumber\", function( value ) {\n\tvar checksum = 0;\n\tvar tokens = value.split( \"\" );\n\tvar length = tokens.length;\n\n\t// Length Check\n\tif ( length !== 9 ) {\n\t\treturn false;\n\t}\n\n\t// Calc the checksum\n\t// https://en.wikipedia.org/wiki/ABA_routing_transit_number\n\tfor ( var i = 0; i < length; i += 3 ) {\n\t\tchecksum +=\tparseInt( tokens[ i ], 10 ) * 3 +\n\t\t\t\t\tparseInt( tokens[ i + 1 ], 10 ) * 7 +\n\t\t\t\t\tparseInt( tokens[ i + 2 ], 10 );\n\t}\n\n\t// If not zero and divisible by 10 then valid\n\tif ( checksum !== 0 && checksum % 10 === 0 ) {\n\t\treturn true;\n\t}\n\n\treturn false;\n}, \"Please enter a valid routing number.\" );\n\n// Accept a value from a file input based on a required mimetype\n$.validator.addMethod( \"accept\", function( value, element, param ) {\n\n\t// Split mime on commas in case we have multiple types we can accept\n\tvar typeParam = typeof param === \"string\" ? param.replace( /\\s/g, \"\" ) : \"image/*\",\n\t\toptionalValue = this.optional( element ),\n\t\ti, file, regex;\n\n\t// Element is optional\n\tif ( optionalValue ) {\n\t\treturn optionalValue;\n\t}\n\n\tif ( $( element ).attr( \"type\" ) === \"file\" ) {\n\n\t\t// Escape string to be used in the regex\n\t\t// see: https://stackoverflow.com/questions/3446170/escape-string-for-use-in-javascript-regex\n\t\t// Escape also \"/*\" as \"/.*\" as a wildcard\n\t\ttypeParam = typeParam\n\t\t\t\t.replace( /[\\-\\[\\]\\/\\{\\}\\(\\)\\+\\?\\.\\\\\\^\\$\\|]/g, \"\\\\$&\" )\n\t\t\t\t.replace( /,/g, \"|\" )\n\t\t\t\t.replace( /\\/\\*/g, \"/.*\" );\n\n\t\t// Check if the element has a FileList before checking each file\n\t\tif ( element.files && element.files.length ) {\n\t\t\tregex = new RegExp( \".?(\" + typeParam + \")$\", \"i\" );\n\t\t\tfor ( i = 0; i < element.files.length; i++ ) {\n\t\t\t\tfile = element.files[ i ];\n\n\t\t\t\t// Grab the mimetype from the loaded file, verify it matches\n\t\t\t\tif ( !file.type.match( regex ) ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Either return true because we've validated each file, or because the\n\t// browser does not support element.files and the FileList feature\n\treturn true;\n}, $.validator.format( \"Please enter a value with a valid mimetype.\" ) );\n\n$.validator.addMethod( \"alphanumeric\", function( value, element ) {\n\treturn this.optional( element ) || /^\\w+$/i.test( value );\n}, \"Letters, numbers, and underscores only please.\" );\n\n/*\n * Dutch bank account numbers (not 'giro' numbers) have 9 digits\n * and pass the '11 check'.\n * We accept the notation with spaces, as that is common.\n * acceptable: 123456789 or 12 34 56 789\n */\n$.validator.addMethod( \"bankaccountNL\", function( value, element ) {\n\tif ( this.optional( element ) ) {\n\t\treturn true;\n\t}\n\tif ( !( /^[0-9]{9}|([0-9]{2} ){3}[0-9]{3}$/.test( value ) ) ) {\n\t\treturn false;\n\t}\n\n\t// Now '11 check'\n\tvar account = value.replace( / /g, \"\" ), // Remove spaces\n\t\tsum = 0,\n\t\tlen = account.length,\n\t\tpos, factor, digit;\n\tfor ( pos = 0; pos < len; pos++ ) {\n\t\tfactor = len - pos;\n\t\tdigit = account.substring( pos, pos + 1 );\n\t\tsum = sum + factor * digit;\n\t}\n\treturn sum % 11 === 0;\n}, \"Please specify a valid bank account number.\" );\n\n$.validator.addMethod( \"bankorgiroaccountNL\", function( value, element ) {\n\treturn this.optional( element ) ||\n\t\t\t( $.validator.methods.bankaccountNL.call( this, value, element ) ) ||\n\t\t\t( $.validator.methods.giroaccountNL.call( this, value, element ) );\n}, \"Please specify a valid bank or giro account number.\" );\n\n/**\n * BIC is the business identifier code (ISO 9362). This BIC check is not a guarantee for authenticity.\n *\n * BIC pattern: BBBBCCLLbbb (8 or 11 characters long; bbb is optional)\n *\n * Validation is case-insensitive. Please make sure to normalize input yourself.\n *\n * BIC definition in detail:\n * - First 4 characters - bank code (only letters)\n * - Next 2 characters - ISO 3166-1 alpha-2 country code (only letters)\n * - Next 2 characters - location code (letters and digits)\n * a. shall not start with '0' or '1'\n * b. second character must be a letter ('O' is not allowed) or digit ('0' for test (therefore not allowed), '1' denoting passive participant, '2' typically reverse-billing)\n * - Last 3 characters - branch code, optional (shall not start with 'X' except in case of 'XXX' for primary office) (letters and digits)\n */\n$.validator.addMethod( \"bic\", function( value, element ) {\n return this.optional( element ) || /^([A-Z]{6}[A-Z2-9][A-NP-Z1-9])(X{3}|[A-WY-Z0-9][A-Z0-9]{2})?$/.test( value.toUpperCase() );\n}, \"Please specify a valid BIC code.\" );\n\n/*\n * Código de identificación fiscal ( CIF ) is the tax identification code for Spanish legal entities\n * Further rules can be found in Spanish on http://es.wikipedia.org/wiki/C%C3%B3digo_de_identificaci%C3%B3n_fiscal\n *\n * Spanish CIF structure:\n *\n * [ T ][ P ][ P ][ N ][ N ][ N ][ N ][ N ][ C ]\n *\n * Where:\n *\n * T: 1 character. Kind of Organization Letter: [ABCDEFGHJKLMNPQRSUVW]\n * P: 2 characters. Province.\n * N: 5 characters. Secuencial Number within the province.\n * C: 1 character. Control Digit: [0-9A-J].\n *\n * [ T ]: Kind of Organizations. Possible values:\n *\n * A. Corporations\n * B. LLCs\n * C. General partnerships\n * D. Companies limited partnerships\n * E. Communities of goods\n * F. Cooperative Societies\n * G. Associations\n * H. Communities of homeowners in horizontal property regime\n * J. Civil Societies\n * K. Old format\n * L. Old format\n * M. Old format\n * N. Nonresident entities\n * P. Local authorities\n * Q. Autonomous bodies, state or not, and the like, and congregations and religious institutions\n * R. Congregations and religious institutions (since 2008 ORDER EHA/451/2008)\n * S. Organs of State Administration and regions\n * V. Agrarian Transformation\n * W. Permanent establishments of non-resident in Spain\n *\n * [ C ]: Control Digit. It can be a number or a letter depending on T value:\n * [ T ] --> [ C ]\n * ------ ----------\n * A Number\n * B Number\n * E Number\n * H Number\n * K Letter\n * P Letter\n * Q Letter\n * S Letter\n *\n */\n$.validator.addMethod( \"cifES\", function( value, element ) {\n\t\"use strict\";\n\n\tif ( this.optional( element ) ) {\n\t\treturn true;\n\t}\n\n\tvar cifRegEx = new RegExp( /^([ABCDEFGHJKLMNPQRSUVW])(\\d{7})([0-9A-J])$/gi );\n\tvar letter = value.substring( 0, 1 ), // [ T ]\n\t\tnumber = value.substring( 1, 8 ), // [ P ][ P ][ N ][ N ][ N ][ N ][ N ]\n\t\tcontrol = value.substring( 8, 9 ), // [ C ]\n\t\tall_sum = 0,\n\t\teven_sum = 0,\n\t\todd_sum = 0,\n\t\ti, n,\n\t\tcontrol_digit,\n\t\tcontrol_letter;\n\n\tfunction isOdd( n ) {\n\t\treturn n % 2 === 0;\n\t}\n\n\t// Quick format test\n\tif ( value.length !== 9 || !cifRegEx.test( value ) ) {\n\t\treturn false;\n\t}\n\n\tfor ( i = 0; i < number.length; i++ ) {\n\t\tn = parseInt( number[ i ], 10 );\n\n\t\t// Odd positions\n\t\tif ( isOdd( i ) ) {\n\n\t\t\t// Odd positions are multiplied first.\n\t\t\tn *= 2;\n\n\t\t\t// If the multiplication is bigger than 10 we need to adjust\n\t\t\todd_sum += n < 10 ? n : n - 9;\n\n\t\t// Even positions\n\t\t// Just sum them\n\t\t} else {\n\t\t\teven_sum += n;\n\t\t}\n\t}\n\n\tall_sum = even_sum + odd_sum;\n\tcontrol_digit = ( 10 - ( all_sum ).toString().substr( -1 ) ).toString();\n\tcontrol_digit = parseInt( control_digit, 10 ) > 9 ? \"0\" : control_digit;\n\tcontrol_letter = \"JABCDEFGHI\".substr( control_digit, 1 ).toString();\n\n\t// Control must be a digit\n\tif ( letter.match( /[ABEH]/ ) ) {\n\t\treturn control === control_digit;\n\n\t// Control must be a letter\n\t} else if ( letter.match( /[KPQS]/ ) ) {\n\t\treturn control === control_letter;\n\t}\n\n\t// Can be either\n\treturn control === control_digit || control === control_letter;\n\n}, \"Please specify a valid CIF number.\" );\n\n/*\n * Brazillian CNH number (Carteira Nacional de Habilitacao) is the License Driver number.\n * CNH numbers have 11 digits in total: 9 numbers followed by 2 check numbers that are being used for validation.\n */\n$.validator.addMethod( \"cnhBR\", function( value ) {\n\n // Removing special characters from value\n value = value.replace( /([~!@#$%^&*()_+=`{}\\[\\]\\-|\\\\:;'<>,.\\/? ])+/g, \"\" );\n\n // Checking value to have 11 digits only\n if ( value.length !== 11 ) {\n return false;\n }\n\n var sum = 0, dsc = 0, firstChar,\n\t\tfirstCN, secondCN, i, j, v;\n\n firstChar = value.charAt( 0 );\n\n if ( new Array( 12 ).join( firstChar ) === value ) {\n return false;\n }\n\n // Step 1 - using first Check Number:\n for ( i = 0, j = 9, v = 0; i < 9; ++i, --j ) {\n sum += +( value.charAt( i ) * j );\n }\n\n firstCN = sum % 11;\n if ( firstCN >= 10 ) {\n firstCN = 0;\n dsc = 2;\n }\n\n sum = 0;\n for ( i = 0, j = 1, v = 0; i < 9; ++i, ++j ) {\n sum += +( value.charAt( i ) * j );\n }\n\n secondCN = sum % 11;\n if ( secondCN >= 10 ) {\n secondCN = 0;\n } else {\n secondCN = secondCN - dsc;\n }\n\n return ( String( firstCN ).concat( secondCN ) === value.substr( -2 ) );\n\n}, \"Please specify a valid CNH number.\" );\n\n/*\n * Brazillian value number (Cadastrado de Pessoas Juridica).\n * value numbers have 14 digits in total: 12 numbers followed by 2 check numbers that are being used for validation.\n */\n$.validator.addMethod( \"cnpjBR\", function( value, element ) {\n\t\"use strict\";\n\n\tif ( this.optional( element ) ) {\n\t\treturn true;\n\t}\n\n\t// Removing no number\n\tvalue = value.replace( /[^\\d]+/g, \"\" );\n\n\t// Checking value to have 14 digits only\n\tif ( value.length !== 14 ) {\n\t\treturn false;\n\t}\n\n\t// Elimina values invalidos conhecidos\n\tif ( value === \"00000000000000\" ||\n\t\tvalue === \"11111111111111\" ||\n\t\tvalue === \"22222222222222\" ||\n\t\tvalue === \"33333333333333\" ||\n\t\tvalue === \"44444444444444\" ||\n\t\tvalue === \"55555555555555\" ||\n\t\tvalue === \"66666666666666\" ||\n\t\tvalue === \"77777777777777\" ||\n\t\tvalue === \"88888888888888\" ||\n\t\tvalue === \"99999999999999\" ) {\n\t\treturn false;\n\t}\n\n\t// Valida DVs\n\tvar tamanho = ( value.length - 2 );\n\tvar numeros = value.substring( 0, tamanho );\n\tvar digitos = value.substring( tamanho );\n\tvar soma = 0;\n\tvar pos = tamanho - 7;\n\n\tfor ( var i = tamanho; i >= 1; i-- ) {\n\t\tsoma += numeros.charAt( tamanho - i ) * pos--;\n\t\tif ( pos < 2 ) {\n\t\t\tpos = 9;\n\t\t}\n\t}\n\n\tvar resultado = soma % 11 < 2 ? 0 : 11 - soma % 11;\n\n\tif ( resultado !== parseInt( digitos.charAt( 0 ), 10 ) ) {\n\t\treturn false;\n\t}\n\n\ttamanho = tamanho + 1;\n\tnumeros = value.substring( 0, tamanho );\n\tsoma = 0;\n\tpos = tamanho - 7;\n\n\tfor ( var il = tamanho; il >= 1; il-- ) {\n\t\tsoma += numeros.charAt( tamanho - il ) * pos--;\n\t\tif ( pos < 2 ) {\n\t\t\tpos = 9;\n\t\t}\n\t}\n\n\tresultado = soma % 11 < 2 ? 0 : 11 - soma % 11;\n\n\tif ( resultado !== parseInt( digitos.charAt( 1 ), 10 ) ) {\n\t\treturn false;\n\t}\n\n\treturn true;\n\n}, \"Please specify a CNPJ value number.\" );\n\n/*\n * Brazillian CPF number (Cadastrado de Pessoas Físicas) is the equivalent of a Brazilian tax registration number.\n * CPF numbers have 11 digits in total: 9 numbers followed by 2 check numbers that are being used for validation.\n */\n$.validator.addMethod( \"cpfBR\", function( value, element ) {\n\t\"use strict\";\n\n\tif ( this.optional( element ) ) {\n\t\treturn true;\n\t}\n\n\t// Removing special characters from value\n\tvalue = value.replace( /([~!@#$%^&*()_+=`{}\\[\\]\\-|\\\\:;'<>,.\\/? ])+/g, \"\" );\n\n\t// Checking value to have 11 digits only\n\tif ( value.length !== 11 ) {\n\t\treturn false;\n\t}\n\n\tvar sum = 0,\n\t\tfirstCN, secondCN, checkResult, i;\n\n\tfirstCN = parseInt( value.substring( 9, 10 ), 10 );\n\tsecondCN = parseInt( value.substring( 10, 11 ), 10 );\n\n\tcheckResult = function( sum, cn ) {\n\t\tvar result = ( sum * 10 ) % 11;\n\t\tif ( ( result === 10 ) || ( result === 11 ) ) {\n\t\t\tresult = 0;\n\t\t}\n\t\treturn ( result === cn );\n\t};\n\n\t// Checking for dump data\n\tif ( value === \"\" ||\n\t\tvalue === \"00000000000\" ||\n\t\tvalue === \"11111111111\" ||\n\t\tvalue === \"22222222222\" ||\n\t\tvalue === \"33333333333\" ||\n\t\tvalue === \"44444444444\" ||\n\t\tvalue === \"55555555555\" ||\n\t\tvalue === \"66666666666\" ||\n\t\tvalue === \"77777777777\" ||\n\t\tvalue === \"88888888888\" ||\n\t\tvalue === \"99999999999\"\n\t) {\n\t\treturn false;\n\t}\n\n\t// Step 1 - using first Check Number:\n\tfor ( i = 1; i <= 9; i++ ) {\n\t\tsum = sum + parseInt( value.substring( i - 1, i ), 10 ) * ( 11 - i );\n\t}\n\n\t// If first Check Number (CN) is valid, move to Step 2 - using second Check Number:\n\tif ( checkResult( sum, firstCN ) ) {\n\t\tsum = 0;\n\t\tfor ( i = 1; i <= 10; i++ ) {\n\t\t\tsum = sum + parseInt( value.substring( i - 1, i ), 10 ) * ( 12 - i );\n\t\t}\n\t\treturn checkResult( sum, secondCN );\n\t}\n\treturn false;\n\n}, \"Please specify a valid CPF number.\" );\n\n// https://jqueryvalidation.org/creditcard-method/\n// based on https://en.wikipedia.org/wiki/Luhn_algorithm\n$.validator.addMethod( \"creditcard\", function( value, element ) {\n\tif ( this.optional( element ) ) {\n\t\treturn \"dependency-mismatch\";\n\t}\n\n\t// Accept only spaces, digits and dashes\n\tif ( /[^0-9 \\-]+/.test( value ) ) {\n\t\treturn false;\n\t}\n\n\tvar nCheck = 0,\n\t\tnDigit = 0,\n\t\tbEven = false,\n\t\tn, cDigit;\n\n\tvalue = value.replace( /\\D/g, \"\" );\n\n\t// Basing min and max length on\n\t// https://dev.ean.com/general-info/valid-card-types/\n\tif ( value.length < 13 || value.length > 19 ) {\n\t\treturn false;\n\t}\n\n\tfor ( n = value.length - 1; n >= 0; n-- ) {\n\t\tcDigit = value.charAt( n );\n\t\tnDigit = parseInt( cDigit, 10 );\n\t\tif ( bEven ) {\n\t\t\tif ( ( nDigit *= 2 ) > 9 ) {\n\t\t\t\tnDigit -= 9;\n\t\t\t}\n\t\t}\n\n\t\tnCheck += nDigit;\n\t\tbEven = !bEven;\n\t}\n\n\treturn ( nCheck % 10 ) === 0;\n}, \"Please enter a valid credit card number.\" );\n\n/* NOTICE: Modified version of Castle.Components.Validator.CreditCardValidator\n * Redistributed under the Apache License 2.0 at http://www.apache.org/licenses/LICENSE-2.0\n * Valid Types: mastercard, visa, amex, dinersclub, enroute, discover, jcb, unknown, all (overrides all other settings)\n */\n$.validator.addMethod( \"creditcardtypes\", function( value, element, param ) {\n\tif ( /[^0-9\\-]+/.test( value ) ) {\n\t\treturn false;\n\t}\n\n\tvalue = value.replace( /\\D/g, \"\" );\n\n\tvar validTypes = 0x0000;\n\n\tif ( param.mastercard ) {\n\t\tvalidTypes |= 0x0001;\n\t}\n\tif ( param.visa ) {\n\t\tvalidTypes |= 0x0002;\n\t}\n\tif ( param.amex ) {\n\t\tvalidTypes |= 0x0004;\n\t}\n\tif ( param.dinersclub ) {\n\t\tvalidTypes |= 0x0008;\n\t}\n\tif ( param.enroute ) {\n\t\tvalidTypes |= 0x0010;\n\t}\n\tif ( param.discover ) {\n\t\tvalidTypes |= 0x0020;\n\t}\n\tif ( param.jcb ) {\n\t\tvalidTypes |= 0x0040;\n\t}\n\tif ( param.unknown ) {\n\t\tvalidTypes |= 0x0080;\n\t}\n\tif ( param.all ) {\n\t\tvalidTypes = 0x0001 | 0x0002 | 0x0004 | 0x0008 | 0x0010 | 0x0020 | 0x0040 | 0x0080;\n\t}\n\tif ( validTypes & 0x0001 && ( /^(5[12345])/.test( value ) || /^(2[234567])/.test( value ) ) ) { // Mastercard\n\t\treturn value.length === 16;\n\t}\n\tif ( validTypes & 0x0002 && /^(4)/.test( value ) ) { // Visa\n\t\treturn value.length === 16;\n\t}\n\tif ( validTypes & 0x0004 && /^(3[47])/.test( value ) ) { // Amex\n\t\treturn value.length === 15;\n\t}\n\tif ( validTypes & 0x0008 && /^(3(0[012345]|[68]))/.test( value ) ) { // Dinersclub\n\t\treturn value.length === 14;\n\t}\n\tif ( validTypes & 0x0010 && /^(2(014|149))/.test( value ) ) { // Enroute\n\t\treturn value.length === 15;\n\t}\n\tif ( validTypes & 0x0020 && /^(6011)/.test( value ) ) { // Discover\n\t\treturn value.length === 16;\n\t}\n\tif ( validTypes & 0x0040 && /^(3)/.test( value ) ) { // Jcb\n\t\treturn value.length === 16;\n\t}\n\tif ( validTypes & 0x0040 && /^(2131|1800)/.test( value ) ) { // Jcb\n\t\treturn value.length === 15;\n\t}\n\tif ( validTypes & 0x0080 ) { // Unknown\n\t\treturn true;\n\t}\n\treturn false;\n}, \"Please enter a valid credit card number.\" );\n\n/**\n * Validates currencies with any given symbols by @jameslouiz\n * Symbols can be optional or required. Symbols required by default\n *\n * Usage examples:\n * currency: [\"£\", false] - Use false for soft currency validation\n * currency: [\"$\", false]\n * currency: [\"RM\", false] - also works with text based symbols such as \"RM\" - Malaysia Ringgit etc\n *\n * \n *\n * Soft symbol checking\n * currencyInput: {\n * currency: [\"$\", false]\n * }\n *\n * Strict symbol checking (default)\n * currencyInput: {\n * currency: \"$\"\n * //OR\n * currency: [\"$\", true]\n * }\n *\n * Multiple Symbols\n * currencyInput: {\n * currency: \"$,£,¢\"\n * }\n */\n$.validator.addMethod( \"currency\", function( value, element, param ) {\n var isParamString = typeof param === \"string\",\n symbol = isParamString ? param : param[ 0 ],\n soft = isParamString ? true : param[ 1 ],\n regex;\n\n symbol = symbol.replace( /,/g, \"\" );\n symbol = soft ? symbol + \"]\" : symbol + \"]?\";\n regex = \"^[\" + symbol + \"([1-9]{1}[0-9]{0,2}(\\\\,[0-9]{3})*(\\\\.[0-9]{0,2})?|[1-9]{1}[0-9]{0,}(\\\\.[0-9]{0,2})?|0(\\\\.[0-9]{0,2})?|(\\\\.[0-9]{1,2})?)$\";\n regex = new RegExp( regex );\n return this.optional( element ) || regex.test( value );\n\n}, \"Please specify a valid currency.\" );\n\n$.validator.addMethod( \"dateFA\", function( value, element ) {\n\treturn this.optional( element ) || /^[1-4]\\d{3}\\/((0?[1-6]\\/((3[0-1])|([1-2][0-9])|(0?[1-9])))|((1[0-2]|(0?[7-9]))\\/(30|([1-2][0-9])|(0?[1-9]))))$/.test( value );\n}, $.validator.messages.date );\n\n/**\n * Return true, if the value is a valid date, also making this formal check dd/mm/yyyy.\n *\n * @example $.validator.methods.date(\"01/01/1900\")\n * @result true\n *\n * @example $.validator.methods.date(\"01/13/1990\")\n * @result false\n *\n * @example $.validator.methods.date(\"01.01.1900\")\n * @result false\n *\n * @example \n * @desc Declares an optional input element whose value must be a valid date.\n *\n * @name $.validator.methods.dateITA\n * @type Boolean\n * @cat Plugins/Validate/Methods\n */\n$.validator.addMethod( \"dateITA\", function( value, element ) {\n\tvar check = false,\n\t\tre = /^\\d{1,2}\\/\\d{1,2}\\/\\d{4}$/,\n\t\tadata, gg, mm, aaaa, xdata;\n\tif ( re.test( value ) ) {\n\t\tadata = value.split( \"/\" );\n\t\tgg = parseInt( adata[ 0 ], 10 );\n\t\tmm = parseInt( adata[ 1 ], 10 );\n\t\taaaa = parseInt( adata[ 2 ], 10 );\n\t\txdata = new Date( Date.UTC( aaaa, mm - 1, gg, 12, 0, 0, 0 ) );\n\t\tif ( ( xdata.getUTCFullYear() === aaaa ) && ( xdata.getUTCMonth() === mm - 1 ) && ( xdata.getUTCDate() === gg ) ) {\n\t\t\tcheck = true;\n\t\t} else {\n\t\t\tcheck = false;\n\t\t}\n\t} else {\n\t\tcheck = false;\n\t}\n\treturn this.optional( element ) || check;\n}, $.validator.messages.date );\n\n$.validator.addMethod( \"dateNL\", function( value, element ) {\n\treturn this.optional( element ) || /^(0?[1-9]|[12]\\d|3[01])[\\.\\/\\-](0?[1-9]|1[012])[\\.\\/\\-]([12]\\d)?(\\d\\d)$/.test( value );\n}, $.validator.messages.date );\n\n// Older \"accept\" file extension method. Old docs: http://docs.jquery.com/Plugins/Validation/Methods/accept\n$.validator.addMethod( \"extension\", function( value, element, param ) {\n\tparam = typeof param === \"string\" ? param.replace( /,/g, \"|\" ) : \"png|jpe?g|gif\";\n\treturn this.optional( element ) || value.match( new RegExp( \"\\\\.(\" + param + \")$\", \"i\" ) );\n}, $.validator.format( \"Please enter a value with a valid extension.\" ) );\n\n/**\n * Dutch giro account numbers (not bank numbers) have max 7 digits\n */\n$.validator.addMethod( \"giroaccountNL\", function( value, element ) {\n\treturn this.optional( element ) || /^[0-9]{1,7}$/.test( value );\n}, \"Please specify a valid giro account number.\" );\n\n$.validator.addMethod( \"greaterThan\", function( value, element, param ) {\n var target = $( param );\n\n if ( this.settings.onfocusout && target.not( \".validate-greaterThan-blur\" ).length ) {\n target.addClass( \"validate-greaterThan-blur\" ).on( \"blur.validate-greaterThan\", function() {\n $( element ).valid();\n } );\n }\n\n return value > target.val();\n}, \"Please enter a greater value.\" );\n\n$.validator.addMethod( \"greaterThanEqual\", function( value, element, param ) {\n var target = $( param );\n\n if ( this.settings.onfocusout && target.not( \".validate-greaterThanEqual-blur\" ).length ) {\n target.addClass( \"validate-greaterThanEqual-blur\" ).on( \"blur.validate-greaterThanEqual\", function() {\n $( element ).valid();\n } );\n }\n\n return value >= target.val();\n}, \"Please enter a greater value.\" );\n\n/**\n * IBAN is the international bank account number.\n * It has a country - specific format, that is checked here too\n *\n * Validation is case-insensitive. Please make sure to normalize input yourself.\n */\n$.validator.addMethod( \"iban\", function( value, element ) {\n\n\t// Some quick simple tests to prevent needless work\n\tif ( this.optional( element ) ) {\n\t\treturn true;\n\t}\n\n\t// Remove spaces and to upper case\n\tvar iban = value.replace( / /g, \"\" ).toUpperCase(),\n\t\tibancheckdigits = \"\",\n\t\tleadingZeroes = true,\n\t\tcRest = \"\",\n\t\tcOperator = \"\",\n\t\tcountrycode, ibancheck, charAt, cChar, bbanpattern, bbancountrypatterns, ibanregexp, i, p;\n\n\t// Check for IBAN code length.\n\t// It contains:\n\t// country code ISO 3166-1 - two letters,\n\t// two check digits,\n\t// Basic Bank Account Number (BBAN) - up to 30 chars\n\tvar minimalIBANlength = 5;\n\tif ( iban.length < minimalIBANlength ) {\n\t\treturn false;\n\t}\n\n\t// Check the country code and find the country specific format\n\tcountrycode = iban.substring( 0, 2 );\n\tbbancountrypatterns = {\n\t\t\"AL\": \"\\\\d{8}[\\\\dA-Z]{16}\",\n\t\t\"AD\": \"\\\\d{8}[\\\\dA-Z]{12}\",\n\t\t\"AT\": \"\\\\d{16}\",\n\t\t\"AZ\": \"[\\\\dA-Z]{4}\\\\d{20}\",\n\t\t\"BE\": \"\\\\d{12}\",\n\t\t\"BH\": \"[A-Z]{4}[\\\\dA-Z]{14}\",\n\t\t\"BA\": \"\\\\d{16}\",\n\t\t\"BR\": \"\\\\d{23}[A-Z][\\\\dA-Z]\",\n\t\t\"BG\": \"[A-Z]{4}\\\\d{6}[\\\\dA-Z]{8}\",\n\t\t\"CR\": \"\\\\d{17}\",\n\t\t\"HR\": \"\\\\d{17}\",\n\t\t\"CY\": \"\\\\d{8}[\\\\dA-Z]{16}\",\n\t\t\"CZ\": \"\\\\d{20}\",\n\t\t\"DK\": \"\\\\d{14}\",\n\t\t\"DO\": \"[A-Z]{4}\\\\d{20}\",\n\t\t\"EE\": \"\\\\d{16}\",\n\t\t\"FO\": \"\\\\d{14}\",\n\t\t\"FI\": \"\\\\d{14}\",\n\t\t\"FR\": \"\\\\d{10}[\\\\dA-Z]{11}\\\\d{2}\",\n\t\t\"GE\": \"[\\\\dA-Z]{2}\\\\d{16}\",\n\t\t\"DE\": \"\\\\d{18}\",\n\t\t\"GI\": \"[A-Z]{4}[\\\\dA-Z]{15}\",\n\t\t\"GR\": \"\\\\d{7}[\\\\dA-Z]{16}\",\n\t\t\"GL\": \"\\\\d{14}\",\n\t\t\"GT\": \"[\\\\dA-Z]{4}[\\\\dA-Z]{20}\",\n\t\t\"HU\": \"\\\\d{24}\",\n\t\t\"IS\": \"\\\\d{22}\",\n\t\t\"IE\": \"[\\\\dA-Z]{4}\\\\d{14}\",\n\t\t\"IL\": \"\\\\d{19}\",\n\t\t\"IT\": \"[A-Z]\\\\d{10}[\\\\dA-Z]{12}\",\n\t\t\"KZ\": \"\\\\d{3}[\\\\dA-Z]{13}\",\n\t\t\"KW\": \"[A-Z]{4}[\\\\dA-Z]{22}\",\n\t\t\"LV\": \"[A-Z]{4}[\\\\dA-Z]{13}\",\n\t\t\"LB\": \"\\\\d{4}[\\\\dA-Z]{20}\",\n\t\t\"LI\": \"\\\\d{5}[\\\\dA-Z]{12}\",\n\t\t\"LT\": \"\\\\d{16}\",\n\t\t\"LU\": \"\\\\d{3}[\\\\dA-Z]{13}\",\n\t\t\"MK\": \"\\\\d{3}[\\\\dA-Z]{10}\\\\d{2}\",\n\t\t\"MT\": \"[A-Z]{4}\\\\d{5}[\\\\dA-Z]{18}\",\n\t\t\"MR\": \"\\\\d{23}\",\n\t\t\"MU\": \"[A-Z]{4}\\\\d{19}[A-Z]{3}\",\n\t\t\"MC\": \"\\\\d{10}[\\\\dA-Z]{11}\\\\d{2}\",\n\t\t\"MD\": \"[\\\\dA-Z]{2}\\\\d{18}\",\n\t\t\"ME\": \"\\\\d{18}\",\n\t\t\"NL\": \"[A-Z]{4}\\\\d{10}\",\n\t\t\"NO\": \"\\\\d{11}\",\n\t\t\"PK\": \"[\\\\dA-Z]{4}\\\\d{16}\",\n\t\t\"PS\": \"[\\\\dA-Z]{4}\\\\d{21}\",\n\t\t\"PL\": \"\\\\d{24}\",\n\t\t\"PT\": \"\\\\d{21}\",\n\t\t\"RO\": \"[A-Z]{4}[\\\\dA-Z]{16}\",\n\t\t\"SM\": \"[A-Z]\\\\d{10}[\\\\dA-Z]{12}\",\n\t\t\"SA\": \"\\\\d{2}[\\\\dA-Z]{18}\",\n\t\t\"RS\": \"\\\\d{18}\",\n\t\t\"SK\": \"\\\\d{20}\",\n\t\t\"SI\": \"\\\\d{15}\",\n\t\t\"ES\": \"\\\\d{20}\",\n\t\t\"SE\": \"\\\\d{20}\",\n\t\t\"CH\": \"\\\\d{5}[\\\\dA-Z]{12}\",\n\t\t\"TN\": \"\\\\d{20}\",\n\t\t\"TR\": \"\\\\d{5}[\\\\dA-Z]{17}\",\n\t\t\"AE\": \"\\\\d{3}\\\\d{16}\",\n\t\t\"GB\": \"[A-Z]{4}\\\\d{14}\",\n\t\t\"VG\": \"[\\\\dA-Z]{4}\\\\d{16}\"\n\t};\n\n\tbbanpattern = bbancountrypatterns[ countrycode ];\n\n\t// As new countries will start using IBAN in the\n\t// future, we only check if the countrycode is known.\n\t// This prevents false negatives, while almost all\n\t// false positives introduced by this, will be caught\n\t// by the checksum validation below anyway.\n\t// Strict checking should return FALSE for unknown\n\t// countries.\n\tif ( typeof bbanpattern !== \"undefined\" ) {\n\t\tibanregexp = new RegExp( \"^[A-Z]{2}\\\\d{2}\" + bbanpattern + \"$\", \"\" );\n\t\tif ( !( ibanregexp.test( iban ) ) ) {\n\t\t\treturn false; // Invalid country specific format\n\t\t}\n\t}\n\n\t// Now check the checksum, first convert to digits\n\tibancheck = iban.substring( 4, iban.length ) + iban.substring( 0, 4 );\n\tfor ( i = 0; i < ibancheck.length; i++ ) {\n\t\tcharAt = ibancheck.charAt( i );\n\t\tif ( charAt !== \"0\" ) {\n\t\t\tleadingZeroes = false;\n\t\t}\n\t\tif ( !leadingZeroes ) {\n\t\t\tibancheckdigits += \"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ\".indexOf( charAt );\n\t\t}\n\t}\n\n\t// Calculate the result of: ibancheckdigits % 97\n\tfor ( p = 0; p < ibancheckdigits.length; p++ ) {\n\t\tcChar = ibancheckdigits.charAt( p );\n\t\tcOperator = \"\" + cRest + \"\" + cChar;\n\t\tcRest = cOperator % 97;\n\t}\n\treturn cRest === 1;\n}, \"Please specify a valid IBAN.\" );\n\n$.validator.addMethod( \"integer\", function( value, element ) {\n\treturn this.optional( element ) || /^-?\\d+$/.test( value );\n}, \"A positive or negative non-decimal number please.\" );\n\n$.validator.addMethod( \"ipv4\", function( value, element ) {\n\treturn this.optional( element ) || /^(25[0-5]|2[0-4]\\d|[01]?\\d\\d?)\\.(25[0-5]|2[0-4]\\d|[01]?\\d\\d?)\\.(25[0-5]|2[0-4]\\d|[01]?\\d\\d?)\\.(25[0-5]|2[0-4]\\d|[01]?\\d\\d?)$/i.test( value );\n}, \"Please enter a valid IP v4 address.\" );\n\n$.validator.addMethod( \"ipv6\", function( value, element ) {\n\treturn this.optional( element ) || /^((([0-9A-Fa-f]{1,4}:){7}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){6}:[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){5}:([0-9A-Fa-f]{1,4}:)?[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){4}:([0-9A-Fa-f]{1,4}:){0,2}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){3}:([0-9A-Fa-f]{1,4}:){0,3}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){2}:([0-9A-Fa-f]{1,4}:){0,4}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){6}((\\b((25[0-5])|(1\\d{2})|(2[0-4]\\d)|(\\d{1,2}))\\b)\\.){3}(\\b((25[0-5])|(1\\d{2})|(2[0-4]\\d)|(\\d{1,2}))\\b))|(([0-9A-Fa-f]{1,4}:){0,5}:((\\b((25[0-5])|(1\\d{2})|(2[0-4]\\d)|(\\d{1,2}))\\b)\\.){3}(\\b((25[0-5])|(1\\d{2})|(2[0-4]\\d)|(\\d{1,2}))\\b))|(::([0-9A-Fa-f]{1,4}:){0,5}((\\b((25[0-5])|(1\\d{2})|(2[0-4]\\d)|(\\d{1,2}))\\b)\\.){3}(\\b((25[0-5])|(1\\d{2})|(2[0-4]\\d)|(\\d{1,2}))\\b))|([0-9A-Fa-f]{1,4}::([0-9A-Fa-f]{1,4}:){0,5}[0-9A-Fa-f]{1,4})|(::([0-9A-Fa-f]{1,4}:){0,6}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){1,7}:))$/i.test( value );\n}, \"Please enter a valid IP v6 address.\" );\n\n$.validator.addMethod( \"lessThan\", function( value, element, param ) {\n var target = $( param );\n\n if ( this.settings.onfocusout && target.not( \".validate-lessThan-blur\" ).length ) {\n target.addClass( \"validate-lessThan-blur\" ).on( \"blur.validate-lessThan\", function() {\n $( element ).valid();\n } );\n }\n\n return value < target.val();\n}, \"Please enter a lesser value.\" );\n\n$.validator.addMethod( \"lessThanEqual\", function( value, element, param ) {\n var target = $( param );\n\n if ( this.settings.onfocusout && target.not( \".validate-lessThanEqual-blur\" ).length ) {\n target.addClass( \"validate-lessThanEqual-blur\" ).on( \"blur.validate-lessThanEqual\", function() {\n $( element ).valid();\n } );\n }\n\n return value <= target.val();\n}, \"Please enter a lesser value.\" );\n\n$.validator.addMethod( \"lettersonly\", function( value, element ) {\n\treturn this.optional( element ) || /^[a-z]+$/i.test( value );\n}, \"Letters only please.\" );\n\n$.validator.addMethod( \"letterswithbasicpunc\", function( value, element ) {\n\treturn this.optional( element ) || /^[a-z\\-.,()'\"\\s]+$/i.test( value );\n}, \"Letters or punctuation only please.\" );\n\n// Limit the number of files in a FileList.\n$.validator.addMethod( \"maxfiles\", function( value, element, param ) {\n\tif ( this.optional( element ) ) {\n\t\treturn true;\n\t}\n\n\tif ( $( element ).attr( \"type\" ) === \"file\" ) {\n\t\tif ( element.files && element.files.length > param ) {\n\t\t\treturn false;\n\t\t}\n\t}\n\n\treturn true;\n}, $.validator.format( \"Please select no more than {0} files.\" ) );\n\n// Limit the size of each individual file in a FileList.\n$.validator.addMethod( \"maxsize\", function( value, element, param ) {\n\tif ( this.optional( element ) ) {\n\t\treturn true;\n\t}\n\n\tif ( $( element ).attr( \"type\" ) === \"file\" ) {\n\t\tif ( element.files && element.files.length ) {\n\t\t\tfor ( var i = 0; i < element.files.length; i++ ) {\n\t\t\t\tif ( element.files[ i ].size > param ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn true;\n}, $.validator.format( \"File size must not exceed {0} bytes each.\" ) );\n\n// Limit the size of all files in a FileList.\n$.validator.addMethod( \"maxsizetotal\", function( value, element, param ) {\n\tif ( this.optional( element ) ) {\n\t\treturn true;\n\t}\n\n\tif ( $( element ).attr( \"type\" ) === \"file\" ) {\n\t\tif ( element.files && element.files.length ) {\n\t\t\tvar totalSize = 0;\n\n\t\t\tfor ( var i = 0; i < element.files.length; i++ ) {\n\t\t\t\ttotalSize += element.files[ i ].size;\n\t\t\t\tif ( totalSize > param ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn true;\n}, $.validator.format( \"Total size of all files must not exceed {0} bytes.\" ) );\n\n\n$.validator.addMethod( \"mobileNL\", function( value, element ) {\n\treturn this.optional( element ) || /^((\\+|00(\\s|\\s?\\-\\s?)?)31(\\s|\\s?\\-\\s?)?(\\(0\\)[\\-\\s]?)?|0)6((\\s|\\s?\\-\\s?)?[0-9]){8}$/.test( value );\n}, \"Please specify a valid mobile number.\" );\n\n$.validator.addMethod( \"mobileRU\", function( phone_number, element ) {\n\tvar ruPhone_number = phone_number.replace( /\\(|\\)|\\s+|-/g, \"\" );\n\treturn this.optional( element ) || ruPhone_number.length > 9 && /^((\\+7|7|8)+([0-9]){10})$/.test( ruPhone_number );\n}, \"Please specify a valid mobile number.\" );\n\n/* For UK phone functions, do the following server side processing:\n * Compare original input with this RegEx pattern:\n * ^\\(?(?:(?:00\\)?[\\s\\-]?\\(?|\\+)(44)\\)?[\\s\\-]?\\(?(?:0\\)?[\\s\\-]?\\(?)?|0)([1-9]\\d{1,4}\\)?[\\s\\d\\-]+)$\n * Extract $1 and set $prefix to '+44' if $1 is '44', otherwise set $prefix to '0'\n * Extract $2 and remove hyphens, spaces and parentheses. Phone number is combined $prefix and $2.\n * A number of very detailed GB telephone number RegEx patterns can also be found at:\n * http://www.aa-asterisk.org.uk/index.php/Regular_Expressions_for_Validating_and_Formatting_GB_Telephone_Numbers\n */\n$.validator.addMethod( \"mobileUK\", function( phone_number, element ) {\n\tphone_number = phone_number.replace( /\\(|\\)|\\s+|-/g, \"\" );\n\treturn this.optional( element ) || phone_number.length > 9 &&\n\t\tphone_number.match( /^(?:(?:(?:00\\s?|\\+)44\\s?|0)7(?:[1345789]\\d{2}|624)\\s?\\d{3}\\s?\\d{3})$/ );\n}, \"Please specify a valid mobile number.\" );\n\n$.validator.addMethod( \"netmask\", function( value, element ) {\n return this.optional( element ) || /^(254|252|248|240|224|192|128)\\.0\\.0\\.0|255\\.(254|252|248|240|224|192|128|0)\\.0\\.0|255\\.255\\.(254|252|248|240|224|192|128|0)\\.0|255\\.255\\.255\\.(254|252|248|240|224|192|128|0)/i.test( value );\n}, \"Please enter a valid netmask.\" );\n\n/*\n * The NIE (Número de Identificación de Extranjero) is a Spanish tax identification number assigned by the Spanish\n * authorities to any foreigner.\n *\n * The NIE is the equivalent of a Spaniards Número de Identificación Fiscal (NIF) which serves as a fiscal\n * identification number. The CIF number (Certificado de Identificación Fiscal) is equivalent to the NIF, but applies to\n * companies rather than individuals. The NIE consists of an 'X' or 'Y' followed by 7 or 8 digits then another letter.\n */\n$.validator.addMethod( \"nieES\", function( value, element ) {\n\t\"use strict\";\n\n\tif ( this.optional( element ) ) {\n\t\treturn true;\n\t}\n\n\tvar nieRegEx = new RegExp( /^[MXYZ]{1}[0-9]{7,8}[TRWAGMYFPDXBNJZSQVHLCKET]{1}$/gi );\n\tvar validChars = \"TRWAGMYFPDXBNJZSQVHLCKET\",\n\t\tletter = value.substr( value.length - 1 ).toUpperCase(),\n\t\tnumber;\n\n\tvalue = value.toString().toUpperCase();\n\n\t// Quick format test\n\tif ( value.length > 10 || value.length < 9 || !nieRegEx.test( value ) ) {\n\t\treturn false;\n\t}\n\n\t// X means same number\n\t// Y means number + 10000000\n\t// Z means number + 20000000\n\tvalue = value.replace( /^[X]/, \"0\" )\n\t\t.replace( /^[Y]/, \"1\" )\n\t\t.replace( /^[Z]/, \"2\" );\n\n\tnumber = value.length === 9 ? value.substr( 0, 8 ) : value.substr( 0, 9 );\n\n\treturn validChars.charAt( parseInt( number, 10 ) % 23 ) === letter;\n\n}, \"Please specify a valid NIE number.\" );\n\n/*\n * The Número de Identificación Fiscal ( NIF ) is the way tax identification used in Spain for individuals\n */\n$.validator.addMethod( \"nifES\", function( value, element ) {\n\t\"use strict\";\n\n\tif ( this.optional( element ) ) {\n\t\treturn true;\n\t}\n\n\tvalue = value.toUpperCase();\n\n\t// Basic format test\n\tif ( !value.match( \"((^[A-Z]{1}[0-9]{7}[A-Z0-9]{1}$|^[T]{1}[A-Z0-9]{8}$)|^[0-9]{8}[A-Z]{1}$)\" ) ) {\n\t\treturn false;\n\t}\n\n\t// Test NIF\n\tif ( /^[0-9]{8}[A-Z]{1}$/.test( value ) ) {\n\t\treturn ( \"TRWAGMYFPDXBNJZSQVHLCKE\".charAt( value.substring( 8, 0 ) % 23 ) === value.charAt( 8 ) );\n\t}\n\n\t// Test specials NIF (starts with K, L or M)\n\tif ( /^[KLM]{1}/.test( value ) ) {\n\t\treturn ( value[ 8 ] === \"TRWAGMYFPDXBNJZSQVHLCKE\".charAt( value.substring( 8, 1 ) % 23 ) );\n\t}\n\n\treturn false;\n\n}, \"Please specify a valid NIF number.\" );\n\n/*\n * Numer identyfikacji podatkowej ( NIP ) is the way tax identification used in Poland for companies\n */\n$.validator.addMethod( \"nipPL\", function( value ) {\n\t\"use strict\";\n\n\tvalue = value.replace( /[^0-9]/g, \"\" );\n\n\tif ( value.length !== 10 ) {\n\t\treturn false;\n\t}\n\n\tvar arrSteps = [ 6, 5, 7, 2, 3, 4, 5, 6, 7 ];\n\tvar intSum = 0;\n\tfor ( var i = 0; i < 9; i++ ) {\n\t\tintSum += arrSteps[ i ] * value[ i ];\n\t}\n\tvar int2 = intSum % 11;\n\tvar intControlNr = ( int2 === 10 ) ? 0 : int2;\n\n\treturn ( intControlNr === parseInt( value[ 9 ], 10 ) );\n}, \"Please specify a valid NIP number.\" );\n\n/**\n * Created for project jquery-validation.\n * @Description Brazillian PIS or NIS number (Número de Identificação Social Pis ou Pasep) is the equivalent of a\n * Brazilian tax registration number NIS of PIS numbers have 11 digits in total: 10 numbers followed by 1 check numbers\n * that are being used for validation.\n * @copyright (c) 21/08/2018 13:14, Cleiton da Silva Mendonça\n * @author Cleiton da Silva Mendonça \n * @link http://gitlab.com/csmendonca Gitlab of Cleiton da Silva Mendonça\n * @link http://github.com/csmendonca Github of Cleiton da Silva Mendonça\n */\n$.validator.addMethod( \"nisBR\", function( value ) {\n\tvar number;\n\tvar cn;\n\tvar sum = 0;\n\tvar dv;\n\tvar count;\n\tvar multiplier;\n\n\t// Removing special characters from value\n\tvalue = value.replace( /([~!@#$%^&*()_+=`{}\\[\\]\\-|\\\\:;'<>,.\\/? ])+/g, \"\" );\n\n\t// Checking value to have 11 digits only\n\tif ( value.length !== 11 ) {\n\t\treturn false;\n\t}\n\n\t//Get check number of value\n\tcn = parseInt( value.substring( 10, 11 ), 10 );\n\n\t//Get number with 10 digits of the value\n\tnumber = parseInt( value.substring( 0, 10 ), 10 );\n\n\tfor ( count = 2; count < 12; count++ ) {\n\t\tmultiplier = count;\n\t\tif ( count === 10 ) {\n\t\t\tmultiplier = 2;\n\t\t}\n\t\tif ( count === 11 ) {\n\t\t\tmultiplier = 3;\n\t\t}\n\t\tsum += ( ( number % 10 ) * multiplier );\n\t\tnumber = parseInt( number / 10, 10 );\n\t}\n\tdv = ( sum % 11 );\n\n\tif ( dv > 1 ) {\n\t\tdv = ( 11 - dv );\n\t} else {\n\t\tdv = 0;\n\t}\n\n\tif ( cn === dv ) {\n\t\treturn true;\n\t} else {\n\t\treturn false;\n\t}\n}, \"Please specify a valid NIS/PIS number.\" );\n\n$.validator.addMethod( \"notEqualTo\", function( value, element, param ) {\n\treturn this.optional( element ) || !$.validator.methods.equalTo.call( this, value, element, param );\n}, \"Please enter a different value, values must not be the same.\" );\n\n$.validator.addMethod( \"nowhitespace\", function( value, element ) {\n\treturn this.optional( element ) || /^\\S+$/i.test( value );\n}, \"No white space please.\" );\n\n/**\n* Return true if the field value matches the given format RegExp\n*\n* @example $.validator.methods.pattern(\"AR1004\",element,/^AR\\d{4}$/)\n* @result true\n*\n* @example $.validator.methods.pattern(\"BR1004\",element,/^AR\\d{4}$/)\n* @result false\n*\n* @name $.validator.methods.pattern\n* @type Boolean\n* @cat Plugins/Validate/Methods\n*/\n$.validator.addMethod( \"pattern\", function( value, element, param ) {\n\tif ( this.optional( element ) ) {\n\t\treturn true;\n\t}\n\tif ( typeof param === \"string\" ) {\n\t\tparam = new RegExp( \"^(?:\" + param + \")$\" );\n\t}\n\treturn param.test( value );\n}, \"Invalid format.\" );\n\n/**\n * Dutch phone numbers have 10 digits (or 11 and start with +31).\n */\n$.validator.addMethod( \"phoneNL\", function( value, element ) {\n\treturn this.optional( element ) || /^((\\+|00(\\s|\\s?\\-\\s?)?)31(\\s|\\s?\\-\\s?)?(\\(0\\)[\\-\\s]?)?|0)[1-9]((\\s|\\s?\\-\\s?)?[0-9]){8}$/.test( value );\n}, \"Please specify a valid phone number.\" );\n\n/**\n * Polish telephone numbers have 9 digits.\n *\n * Mobile phone numbers starts with following digits:\n * 45, 50, 51, 53, 57, 60, 66, 69, 72, 73, 78, 79, 88.\n *\n * Fixed-line numbers starts with area codes:\n * 12, 13, 14, 15, 16, 17, 18, 22, 23, 24, 25, 29, 32, 33,\n * 34, 41, 42, 43, 44, 46, 48, 52, 54, 55, 56, 58, 59, 61,\n * 62, 63, 65, 67, 68, 71, 74, 75, 76, 77, 81, 82, 83, 84,\n * 85, 86, 87, 89, 91, 94, 95.\n *\n * Ministry of National Defence numbers and VoIP numbers starts with 26 and 39.\n *\n * Excludes intelligent networks (premium rate, shared cost, free phone numbers).\n *\n * Poland National Numbering Plan http://www.itu.int/oth/T02020000A8/en\n */\n$.validator.addMethod( \"phonePL\", function( phone_number, element ) {\n\tphone_number = phone_number.replace( /\\s+/g, \"\" );\n\tvar regexp = /^(?:(?:(?:\\+|00)?48)|(?:\\(\\+?48\\)))?(?:1[2-8]|2[2-69]|3[2-49]|4[1-68]|5[0-9]|6[0-35-9]|[7-8][1-9]|9[145])\\d{7}$/;\n\treturn this.optional( element ) || regexp.test( phone_number );\n}, \"Please specify a valid phone number.\" );\n\n/* For UK phone functions, do the following server side processing:\n * Compare original input with this RegEx pattern:\n * ^\\(?(?:(?:00\\)?[\\s\\-]?\\(?|\\+)(44)\\)?[\\s\\-]?\\(?(?:0\\)?[\\s\\-]?\\(?)?|0)([1-9]\\d{1,4}\\)?[\\s\\d\\-]+)$\n * Extract $1 and set $prefix to '+44' if $1 is '44', otherwise set $prefix to '0'\n * Extract $2 and remove hyphens, spaces and parentheses. Phone number is combined $prefix and $2.\n * A number of very detailed GB telephone number RegEx patterns can also be found at:\n * http://www.aa-asterisk.org.uk/index.php/Regular_Expressions_for_Validating_and_Formatting_GB_Telephone_Numbers\n */\n\n// Matches UK landline + mobile, accepting only 01-3 for landline or 07 for mobile to exclude many premium numbers\n$.validator.addMethod( \"phonesUK\", function( phone_number, element ) {\n\tphone_number = phone_number.replace( /\\(|\\)|\\s+|-/g, \"\" );\n\treturn this.optional( element ) || phone_number.length > 9 &&\n\t\tphone_number.match( /^(?:(?:(?:00\\s?|\\+)44\\s?|0)(?:1\\d{8,9}|[23]\\d{9}|7(?:[1345789]\\d{8}|624\\d{6})))$/ );\n}, \"Please specify a valid uk phone number.\" );\n\n/* For UK phone functions, do the following server side processing:\n * Compare original input with this RegEx pattern:\n * ^\\(?(?:(?:00\\)?[\\s\\-]?\\(?|\\+)(44)\\)?[\\s\\-]?\\(?(?:0\\)?[\\s\\-]?\\(?)?|0)([1-9]\\d{1,4}\\)?[\\s\\d\\-]+)$\n * Extract $1 and set $prefix to '+44' if $1 is '44', otherwise set $prefix to '0'\n * Extract $2 and remove hyphens, spaces and parentheses. Phone number is combined $prefix and $2.\n * A number of very detailed GB telephone number RegEx patterns can also be found at:\n * http://www.aa-asterisk.org.uk/index.php/Regular_Expressions_for_Validating_and_Formatting_GB_Telephone_Numbers\n */\n$.validator.addMethod( \"phoneUK\", function( phone_number, element ) {\n\tphone_number = phone_number.replace( /\\(|\\)|\\s+|-/g, \"\" );\n\treturn this.optional( element ) || phone_number.length > 9 &&\n\t\tphone_number.match( /^(?:(?:(?:00\\s?|\\+)44\\s?)|(?:\\(?0))(?:\\d{2}\\)?\\s?\\d{4}\\s?\\d{4}|\\d{3}\\)?\\s?\\d{3}\\s?\\d{3,4}|\\d{4}\\)?\\s?(?:\\d{5}|\\d{3}\\s?\\d{3})|\\d{5}\\)?\\s?\\d{4,5})$/ );\n}, \"Please specify a valid phone number.\" );\n\n/**\n * Matches US phone number format\n *\n * where the area code may not start with 1 and the prefix may not start with 1\n * allows '-' or ' ' as a separator and allows parens around area code\n * some people may want to put a '1' in front of their number\n *\n * 1(212)-999-2345 or\n * 212 999 2344 or\n * 212-999-0983\n *\n * but not\n * 111-123-5434\n * and not\n * 212 123 4567\n */\n$.validator.addMethod( \"phoneUS\", function( phone_number, element ) {\n\tphone_number = phone_number.replace( /\\s+/g, \"\" );\n\treturn this.optional( element ) || phone_number.length > 9 &&\n\t\tphone_number.match( /^(\\+?1-?)?(\\([2-9]([02-9]\\d|1[02-9])\\)|[2-9]([02-9]\\d|1[02-9]))-?[2-9]\\d{2}-?\\d{4}$/ );\n}, \"Please specify a valid phone number.\" );\n\n/*\n* Valida CEPs do brasileiros:\n*\n* Formatos aceitos:\n* 99999-999\n* 99.999-999\n* 99999999\n*/\n$.validator.addMethod( \"postalcodeBR\", function( cep_value, element ) {\n\treturn this.optional( element ) || /^\\d{2}.\\d{3}-\\d{3}?$|^\\d{5}-?\\d{3}?$/.test( cep_value );\n}, \"Informe um CEP válido.\" );\n\n/**\n * Matches a valid Canadian Postal Code\n *\n * @example jQuery.validator.methods.postalCodeCA( \"H0H 0H0\", element )\n * @result true\n *\n * @example jQuery.validator.methods.postalCodeCA( \"H0H0H0\", element )\n * @result false\n *\n * @name jQuery.validator.methods.postalCodeCA\n * @type Boolean\n * @cat Plugins/Validate/Methods\n */\n$.validator.addMethod( \"postalCodeCA\", function( value, element ) {\n\treturn this.optional( element ) || /^[ABCEGHJKLMNPRSTVXY]\\d[ABCEGHJKLMNPRSTVWXYZ] *\\d[ABCEGHJKLMNPRSTVWXYZ]\\d$/i.test( value );\n}, \"Please specify a valid postal code.\" );\n\n/* Matches Italian postcode (CAP) */\n$.validator.addMethod( \"postalcodeIT\", function( value, element ) {\n\treturn this.optional( element ) || /^\\d{5}$/.test( value );\n}, \"Please specify a valid postal code.\" );\n\n$.validator.addMethod( \"postalcodeNL\", function( value, element ) {\n\treturn this.optional( element ) || /^[1-9][0-9]{3}\\s?[a-zA-Z]{2}$/.test( value );\n}, \"Please specify a valid postal code.\" );\n\n// Matches UK postcode. Does not match to UK Channel Islands that have their own postcodes (non standard UK)\n$.validator.addMethod( \"postcodeUK\", function( value, element ) {\n\treturn this.optional( element ) || /^((([A-PR-UWYZ][0-9])|([A-PR-UWYZ][0-9][0-9])|([A-PR-UWYZ][A-HK-Y][0-9])|([A-PR-UWYZ][A-HK-Y][0-9][0-9])|([A-PR-UWYZ][0-9][A-HJKSTUW])|([A-PR-UWYZ][A-HK-Y][0-9][ABEHMNPRVWXY]))\\s?([0-9][ABD-HJLNP-UW-Z]{2})|(GIR)\\s?(0AA))$/i.test( value );\n}, \"Please specify a valid UK postcode.\" );\n\n/*\n * Lets you say \"at least X inputs that match selector Y must be filled.\"\n *\n * The end result is that neither of these inputs:\n *\n *\t\n *\t\n *\n *\t...will validate unless at least one of them is filled.\n *\n * partnumber:\t{require_from_group: [1,\".productinfo\"]},\n * description: {require_from_group: [1,\".productinfo\"]}\n *\n * options[0]: number of fields that must be filled in the group\n * options[1]: CSS selector that defines the group of conditionally required fields\n */\n$.validator.addMethod( \"require_from_group\", function( value, element, options ) {\n\tvar $fields = $( options[ 1 ], element.form ),\n\t\t$fieldsFirst = $fields.eq( 0 ),\n\t\tvalidator = $fieldsFirst.data( \"valid_req_grp\" ) ? $fieldsFirst.data( \"valid_req_grp\" ) : $.extend( {}, this ),\n\t\tisValid = $fields.filter( function() {\n\t\t\treturn validator.elementValue( this );\n\t\t} ).length >= options[ 0 ];\n\n\t// Store the cloned validator for future validation\n\t$fieldsFirst.data( \"valid_req_grp\", validator );\n\n\t// If element isn't being validated, run each require_from_group field's validation rules\n\tif ( !$( element ).data( \"being_validated\" ) ) {\n\t\t$fields.data( \"being_validated\", true );\n\t\t$fields.each( function() {\n\t\t\tvalidator.element( this );\n\t\t} );\n\t\t$fields.data( \"being_validated\", false );\n\t}\n\treturn isValid;\n}, $.validator.format( \"Please fill at least {0} of these fields.\" ) );\n\n/*\n * Lets you say \"either at least X inputs that match selector Y must be filled,\n * OR they must all be skipped (left blank).\"\n *\n * The end result, is that none of these inputs:\n *\n *\t\n *\t\n *\t\n *\n *\t...will validate unless either at least two of them are filled,\n *\tOR none of them are.\n *\n * partnumber:\t{skip_or_fill_minimum: [2,\".productinfo\"]},\n * description: {skip_or_fill_minimum: [2,\".productinfo\"]},\n * color:\t\t{skip_or_fill_minimum: [2,\".productinfo\"]}\n *\n * options[0]: number of fields that must be filled in the group\n * options[1]: CSS selector that defines the group of conditionally required fields\n *\n */\n$.validator.addMethod( \"skip_or_fill_minimum\", function( value, element, options ) {\n\tvar $fields = $( options[ 1 ], element.form ),\n\t\t$fieldsFirst = $fields.eq( 0 ),\n\t\tvalidator = $fieldsFirst.data( \"valid_skip\" ) ? $fieldsFirst.data( \"valid_skip\" ) : $.extend( {}, this ),\n\t\tnumberFilled = $fields.filter( function() {\n\t\t\treturn validator.elementValue( this );\n\t\t} ).length,\n\t\tisValid = numberFilled === 0 || numberFilled >= options[ 0 ];\n\n\t// Store the cloned validator for future validation\n\t$fieldsFirst.data( \"valid_skip\", validator );\n\n\t// If element isn't being validated, run each skip_or_fill_minimum field's validation rules\n\tif ( !$( element ).data( \"being_validated\" ) ) {\n\t\t$fields.data( \"being_validated\", true );\n\t\t$fields.each( function() {\n\t\t\tvalidator.element( this );\n\t\t} );\n\t\t$fields.data( \"being_validated\", false );\n\t}\n\treturn isValid;\n}, $.validator.format( \"Please either skip these fields or fill at least {0} of them.\" ) );\n\n/* Validates US States and/or Territories by @jdforsythe\n * Can be case insensitive or require capitalization - default is case insensitive\n * Can include US Territories or not - default does not\n * Can include US Military postal abbreviations (AA, AE, AP) - default does not\n *\n * Note: \"States\" always includes DC (District of Colombia)\n *\n * Usage examples:\n *\n * This is the default - case insensitive, no territories, no military zones\n * stateInput: {\n * caseSensitive: false,\n * includeTerritories: false,\n * includeMilitary: false\n * }\n *\n * Only allow capital letters, no territories, no military zones\n * stateInput: {\n * caseSensitive: false\n * }\n *\n * Case insensitive, include territories but not military zones\n * stateInput: {\n * includeTerritories: true\n * }\n *\n * Only allow capital letters, include territories and military zones\n * stateInput: {\n * caseSensitive: true,\n * includeTerritories: true,\n * includeMilitary: true\n * }\n *\n */\n$.validator.addMethod( \"stateUS\", function( value, element, options ) {\n\tvar isDefault = typeof options === \"undefined\",\n\t\tcaseSensitive = ( isDefault || typeof options.caseSensitive === \"undefined\" ) ? false : options.caseSensitive,\n\t\tincludeTerritories = ( isDefault || typeof options.includeTerritories === \"undefined\" ) ? false : options.includeTerritories,\n\t\tincludeMilitary = ( isDefault || typeof options.includeMilitary === \"undefined\" ) ? false : options.includeMilitary,\n\t\tregex;\n\n\tif ( !includeTerritories && !includeMilitary ) {\n\t\tregex = \"^(A[KLRZ]|C[AOT]|D[CE]|FL|GA|HI|I[ADLN]|K[SY]|LA|M[ADEINOST]|N[CDEHJMVY]|O[HKR]|PA|RI|S[CD]|T[NX]|UT|V[AT]|W[AIVY])$\";\n\t} else if ( includeTerritories && includeMilitary ) {\n\t\tregex = \"^(A[AEKLPRSZ]|C[AOT]|D[CE]|FL|G[AU]|HI|I[ADLN]|K[SY]|LA|M[ADEINOPST]|N[CDEHJMVY]|O[HKR]|P[AR]|RI|S[CD]|T[NX]|UT|V[AIT]|W[AIVY])$\";\n\t} else if ( includeTerritories ) {\n\t\tregex = \"^(A[KLRSZ]|C[AOT]|D[CE]|FL|G[AU]|HI|I[ADLN]|K[SY]|LA|M[ADEINOPST]|N[CDEHJMVY]|O[HKR]|P[AR]|RI|S[CD]|T[NX]|UT|V[AIT]|W[AIVY])$\";\n\t} else {\n\t\tregex = \"^(A[AEKLPRZ]|C[AOT]|D[CE]|FL|GA|HI|I[ADLN]|K[SY]|LA|M[ADEINOST]|N[CDEHJMVY]|O[HKR]|PA|RI|S[CD]|T[NX]|UT|V[AT]|W[AIVY])$\";\n\t}\n\n\tregex = caseSensitive ? new RegExp( regex ) : new RegExp( regex, \"i\" );\n\treturn this.optional( element ) || regex.test( value );\n}, \"Please specify a valid state.\" );\n\n// TODO check if value starts with <, otherwise don't try stripping anything\n$.validator.addMethod( \"strippedminlength\", function( value, element, param ) {\n\treturn $( value ).text().length >= param;\n}, $.validator.format( \"Please enter at least {0} characters.\" ) );\n\n$.validator.addMethod( \"time\", function( value, element ) {\n\treturn this.optional( element ) || /^([01]\\d|2[0-3]|[0-9])(:[0-5]\\d){1,2}$/.test( value );\n}, \"Please enter a valid time, between 00:00 and 23:59.\" );\n\n$.validator.addMethod( \"time12h\", function( value, element ) {\n\treturn this.optional( element ) || /^((0?[1-9]|1[012])(:[0-5]\\d){1,2}(\\ ?[AP]M))$/i.test( value );\n}, \"Please enter a valid time in 12-hour am/pm format.\" );\n\n// Same as url, but TLD is optional\n$.validator.addMethod( \"url2\", function( value, element ) {\n\treturn this.optional( element ) || /^(?:(?:(?:https?|ftp):)?\\/\\/)(?:(?:[^\\]\\[?\\/<~#`!@$^&*()+=}|:\";',>{ ]|%[0-9A-Fa-f]{2})+(?::(?:[^\\]\\[?\\/<~#`!@$^&*()+=}|:\";',>{ ]|%[0-9A-Fa-f]{2})*)?@)?(?:(?!(?:10|127)(?:\\.\\d{1,3}){3})(?!(?:169\\.254|192\\.168)(?:\\.\\d{1,3}){2})(?!172\\.(?:1[6-9]|2\\d|3[0-1])(?:\\.\\d{1,3}){2})(?:[1-9]\\d?|1\\d\\d|2[01]\\d|22[0-3])(?:\\.(?:1?\\d{1,2}|2[0-4]\\d|25[0-5])){2}(?:\\.(?:[1-9]\\d?|1\\d\\d|2[0-4]\\d|25[0-4]))|(?:(?:[a-z0-9\\u00a1-\\uffff][a-z0-9\\u00a1-\\uffff_-]{0,62})?[a-z0-9\\u00a1-\\uffff]\\.)+(?:[a-z\\u00a1-\\uffff]{2,}\\.?)|(?:(?:[a-z0-9\\u00a1-\\uffff][a-z0-9\\u00a1-\\uffff_-]{0,62})?[a-z0-9\\u00a1-\\uffff])|(?:(?:[a-z0-9\\u00a1-\\uffff][a-z0-9\\u00a1-\\uffff_-]{0,62}\\.)))(?::\\d{2,5})?(?:[/?#]\\S*)?$/i.test( value );\n}, $.validator.messages.url );\n\n/**\n * Return true, if the value is a valid vehicle identification number (VIN).\n *\n * Works with all kind of text inputs.\n *\n * @example \n * @desc Declares a required input element whose value must be a valid vehicle identification number.\n *\n * @name $.validator.methods.vinUS\n * @type Boolean\n * @cat Plugins/Validate/Methods\n */\n$.validator.addMethod( \"vinUS\", function( v ) {\n if ( v.length !== 17 ) {\n return false;\n }\n\n var LL = [ \"A\", \"B\", \"C\", \"D\", \"E\", \"F\", \"G\", \"H\", \"J\", \"K\", \"L\", \"M\", \"N\", \"P\", \"R\", \"S\", \"T\", \"U\", \"V\", \"W\", \"X\", \"Y\", \"Z\" ],\n VL = [ 1, 2, 3, 4, 5, 6, 7, 8, 1, 2, 3, 4, 5, 7, 9, 2, 3, 4, 5, 6, 7, 8, 9 ],\n FL = [ 8, 7, 6, 5, 4, 3, 2, 10, 0, 9, 8, 7, 6, 5, 4, 3, 2 ],\n rs = 0,\n i, n, d, f, cd, cdv;\n\n for ( i = 0; i < 17; i++ ) {\n f = FL[ i ];\n d = v.slice( i, i + 1 );\n if ( isNaN( d ) ) {\n d = d.toUpperCase();\n n = VL[ LL.indexOf( d ) ];\n } else {\n n = parseInt( d, 10 );\n }\n if ( i === 8 )\n {\n cdv = n;\n if ( d === \"X\" ) {\n cdv = 10;\n }\n }\n rs += n * f;\n }\n cd = rs % 11;\n if ( cd === cdv ) {\n return true;\n }\n return false;\n}, \"The specified vehicle identification number (VIN) is invalid.\" );\n\n$.validator.addMethod( \"zipcodeUS\", function( value, element ) {\n\treturn this.optional( element ) || /^\\d{5}(-\\d{4})?$/.test( value );\n}, \"The specified US ZIP Code is invalid.\" );\n\n$.validator.addMethod( \"ziprange\", function( value, element ) {\n\treturn this.optional( element ) || /^90[2-5]\\d\\{2\\}-\\d{4}$/.test( value );\n}, \"Your ZIP-code must be in the range 902xx-xxxx to 905xx-xxxx.\" );\nreturn $;\n}));","/*!\n * jQuery Validation Plugin v1.20.0\n *\n * https://jqueryvalidation.org/\n *\n * Copyright (c) 2023 Jörn Zaefferer\n * Released under the MIT license\n */\n(function( factory ) {\n\tif ( typeof define === \"function\" && define.amd ) {\n\t\tdefine( [\"jquery\"], factory );\n\t} else if (typeof module === \"object\" && module.exports) {\n\t\tmodule.exports = factory( require( \"jquery\" ) );\n\t} else {\n\t\tfactory( jQuery );\n\t}\n}(function( $ ) {\n\n$.extend( $.fn, {\n\n\t// https://jqueryvalidation.org/validate/\n\tvalidate: function( options ) {\n\n\t\t// If nothing is selected, return nothing; can't chain anyway\n\t\tif ( !this.length ) {\n\t\t\tif ( options && options.debug && window.console ) {\n\t\t\t\tconsole.warn( \"Nothing selected, can't validate, returning nothing.\" );\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\t// Check if a validator for this form was already created\n\t\tvar validator = $.data( this[ 0 ], \"validator\" );\n\t\tif ( validator ) {\n\t\t\treturn validator;\n\t\t}\n\n\t\t// Add novalidate tag if HTML5.\n\t\tthis.attr( \"novalidate\", \"novalidate\" );\n\n\t\tvalidator = new $.validator( options, this[ 0 ] );\n\t\t$.data( this[ 0 ], \"validator\", validator );\n\n\t\tif ( validator.settings.onsubmit ) {\n\n\t\t\tthis.on( \"click.validate\", \":submit\", function( event ) {\n\n\t\t\t\t// Track the used submit button to properly handle scripted\n\t\t\t\t// submits later.\n\t\t\t\tvalidator.submitButton = event.currentTarget;\n\n\t\t\t\t// Allow suppressing validation by adding a cancel class to the submit button\n\t\t\t\tif ( $( this ).hasClass( \"cancel\" ) ) {\n\t\t\t\t\tvalidator.cancelSubmit = true;\n\t\t\t\t}\n\n\t\t\t\t// Allow suppressing validation by adding the html5 formnovalidate attribute to the submit button\n\t\t\t\tif ( $( this ).attr( \"formnovalidate\" ) !== undefined ) {\n\t\t\t\t\tvalidator.cancelSubmit = true;\n\t\t\t\t}\n\t\t\t} );\n\n\t\t\t// Validate the form on submit\n\t\t\tthis.on( \"submit.validate\", function( event ) {\n\t\t\t\tif ( validator.settings.debug ) {\n\n\t\t\t\t\t// Prevent form submit to be able to see console output\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t}\n\n\t\t\t\tfunction handle() {\n\t\t\t\t\tvar hidden, result;\n\n\t\t\t\t\t// Insert a hidden input as a replacement for the missing submit button\n\t\t\t\t\t// The hidden input is inserted in two cases:\n\t\t\t\t\t// - A user defined a `submitHandler`\n\t\t\t\t\t// - There was a pending request due to `remote` method and `stopRequest()`\n\t\t\t\t\t// was called to submit the form in case it's valid\n\t\t\t\t\tif ( validator.submitButton && ( validator.settings.submitHandler || validator.formSubmitted ) ) {\n\t\t\t\t\t\thidden = $( \"\" )\n\t\t\t\t\t\t\t.attr( \"name\", validator.submitButton.name )\n\t\t\t\t\t\t\t.val( $( validator.submitButton ).val() )\n\t\t\t\t\t\t\t.appendTo( validator.currentForm );\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( validator.settings.submitHandler && !validator.settings.debug ) {\n\t\t\t\t\t\tresult = validator.settings.submitHandler.call( validator, validator.currentForm, event );\n\t\t\t\t\t\tif ( hidden ) {\n\n\t\t\t\t\t\t\t// And clean up afterwards; thanks to no-block-scope, hidden can be referenced\n\t\t\t\t\t\t\thidden.remove();\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif ( result !== undefined ) {\n\t\t\t\t\t\t\treturn result;\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\n\t\t\t\t// Prevent submit for invalid forms or custom submit handlers\n\t\t\t\tif ( validator.cancelSubmit ) {\n\t\t\t\t\tvalidator.cancelSubmit = false;\n\t\t\t\t\treturn handle();\n\t\t\t\t}\n\t\t\t\tif ( validator.form() ) {\n\t\t\t\t\tif ( validator.pendingRequest ) {\n\t\t\t\t\t\tvalidator.formSubmitted = true;\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t\treturn handle();\n\t\t\t\t} else {\n\t\t\t\t\tvalidator.focusInvalid();\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\n\t\treturn validator;\n\t},\n\n\t// https://jqueryvalidation.org/valid/\n\tvalid: function() {\n\t\tvar valid, validator, errorList;\n\n\t\tif ( $( this[ 0 ] ).is( \"form\" ) ) {\n\t\t\tvalid = this.validate().form();\n\t\t} else {\n\t\t\terrorList = [];\n\t\t\tvalid = true;\n\t\t\tvalidator = $( this[ 0 ].form ).validate();\n\t\t\tthis.each( function() {\n\t\t\t\tvalid = validator.element( this ) && valid;\n\t\t\t\tif ( !valid ) {\n\t\t\t\t\terrorList = errorList.concat( validator.errorList );\n\t\t\t\t}\n\t\t\t} );\n\t\t\tvalidator.errorList = errorList;\n\t\t}\n\t\treturn valid;\n\t},\n\n\t// https://jqueryvalidation.org/rules/\n\trules: function( command, argument ) {\n\t\tvar element = this[ 0 ],\n\t\t\tisContentEditable = typeof this.attr( \"contenteditable\" ) !== \"undefined\" && this.attr( \"contenteditable\" ) !== \"false\",\n\t\t\tsettings, staticRules, existingRules, data, param, filtered;\n\n\t\t// If nothing is selected, return empty object; can't chain anyway\n\t\tif ( element == null ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( !element.form && isContentEditable ) {\n\t\t\telement.form = this.closest( \"form\" )[ 0 ];\n\t\t\telement.name = this.attr( \"name\" );\n\t\t}\n\n\t\tif ( element.form == null ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( command ) {\n\t\t\tsettings = $.data( element.form, \"validator\" ).settings;\n\t\t\tstaticRules = settings.rules;\n\t\t\texistingRules = $.validator.staticRules( element );\n\t\t\tswitch ( command ) {\n\t\t\tcase \"add\":\n\t\t\t\t$.extend( existingRules, $.validator.normalizeRule( argument ) );\n\n\t\t\t\t// Remove messages from rules, but allow them to be set separately\n\t\t\t\tdelete existingRules.messages;\n\t\t\t\tstaticRules[ element.name ] = existingRules;\n\t\t\t\tif ( argument.messages ) {\n\t\t\t\t\tsettings.messages[ element.name ] = $.extend( settings.messages[ element.name ], argument.messages );\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase \"remove\":\n\t\t\t\tif ( !argument ) {\n\t\t\t\t\tdelete staticRules[ element.name ];\n\t\t\t\t\treturn existingRules;\n\t\t\t\t}\n\t\t\t\tfiltered = {};\n\t\t\t\t$.each( argument.split( /\\s/ ), function( index, method ) {\n\t\t\t\t\tfiltered[ method ] = existingRules[ method ];\n\t\t\t\t\tdelete existingRules[ method ];\n\t\t\t\t} );\n\t\t\t\treturn filtered;\n\t\t\t}\n\t\t}\n\n\t\tdata = $.validator.normalizeRules(\n\t\t$.extend(\n\t\t\t{},\n\t\t\t$.validator.classRules( element ),\n\t\t\t$.validator.attributeRules( element ),\n\t\t\t$.validator.dataRules( element ),\n\t\t\t$.validator.staticRules( element )\n\t\t), element );\n\n\t\t// Make sure required is at front\n\t\tif ( data.required ) {\n\t\t\tparam = data.required;\n\t\t\tdelete data.required;\n\t\t\tdata = $.extend( { required: param }, data );\n\t\t}\n\n\t\t// Make sure remote is at back\n\t\tif ( data.remote ) {\n\t\t\tparam = data.remote;\n\t\t\tdelete data.remote;\n\t\t\tdata = $.extend( data, { remote: param } );\n\t\t}\n\n\t\treturn data;\n\t}\n} );\n\n// JQuery trim is deprecated, provide a trim method based on String.prototype.trim\nvar trim = function( str ) {\n\n\t// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/trim#Polyfill\n\treturn str.replace( /^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g, \"\" );\n};\n\n// Custom selectors\n$.extend( $.expr.pseudos || $.expr[ \":\" ], {\t\t// '|| $.expr[ \":\" ]' here enables backwards compatibility to jQuery 1.7. Can be removed when dropping jQ 1.7.x support\n\n\t// https://jqueryvalidation.org/blank-selector/\n\tblank: function( a ) {\n\t\treturn !trim( \"\" + $( a ).val() );\n\t},\n\n\t// https://jqueryvalidation.org/filled-selector/\n\tfilled: function( a ) {\n\t\tvar val = $( a ).val();\n\t\treturn val !== null && !!trim( \"\" + val );\n\t},\n\n\t// https://jqueryvalidation.org/unchecked-selector/\n\tunchecked: function( a ) {\n\t\treturn !$( a ).prop( \"checked\" );\n\t}\n} );\n\n// Constructor for validator\n$.validator = function( options, form ) {\n\tthis.settings = $.extend( true, {}, $.validator.defaults, options );\n\tthis.currentForm = form;\n\tthis.init();\n};\n\n// https://jqueryvalidation.org/jQuery.validator.format/\n$.validator.format = function( source, params ) {\n\tif ( arguments.length === 1 ) {\n\t\treturn function() {\n\t\t\tvar args = $.makeArray( arguments );\n\t\t\targs.unshift( source );\n\t\t\treturn $.validator.format.apply( this, args );\n\t\t};\n\t}\n\tif ( params === undefined ) {\n\t\treturn source;\n\t}\n\tif ( arguments.length > 2 && params.constructor !== Array ) {\n\t\tparams = $.makeArray( arguments ).slice( 1 );\n\t}\n\tif ( params.constructor !== Array ) {\n\t\tparams = [ params ];\n\t}\n\t$.each( params, function( i, n ) {\n\t\tsource = source.replace( new RegExp( \"\\\\{\" + i + \"\\\\}\", \"g\" ), function() {\n\t\t\treturn n;\n\t\t} );\n\t} );\n\treturn source;\n};\n\n$.extend( $.validator, {\n\n\tdefaults: {\n\t\tmessages: {},\n\t\tgroups: {},\n\t\trules: {},\n\t\terrorClass: \"error\",\n\t\tpendingClass: \"pending\",\n\t\tvalidClass: \"valid\",\n\t\terrorElement: \"label\",\n\t\tfocusCleanup: false,\n\t\tfocusInvalid: true,\n\t\terrorContainer: $( [] ),\n\t\terrorLabelContainer: $( [] ),\n\t\tonsubmit: true,\n\t\tignore: \":hidden\",\n\t\tignoreTitle: false,\n\t\tonfocusin: function( element ) {\n\t\t\tthis.lastActive = element;\n\n\t\t\t// Hide error label and remove error class on focus if enabled\n\t\t\tif ( this.settings.focusCleanup ) {\n\t\t\t\tif ( this.settings.unhighlight ) {\n\t\t\t\t\tthis.settings.unhighlight.call( this, element, this.settings.errorClass, this.settings.validClass );\n\t\t\t\t}\n\t\t\t\tthis.hideThese( this.errorsFor( element ) );\n\t\t\t}\n\t\t},\n\t\tonfocusout: function( element ) {\n\t\t\tif ( !this.checkable( element ) && ( element.name in this.submitted || !this.optional( element ) ) ) {\n\t\t\t\tthis.element( element );\n\t\t\t}\n\t\t},\n\t\tonkeyup: function( element, event ) {\n\n\t\t\t// Avoid revalidate the field when pressing one of the following keys\n\t\t\t// Shift => 16\n\t\t\t// Ctrl => 17\n\t\t\t// Alt => 18\n\t\t\t// Caps lock => 20\n\t\t\t// End => 35\n\t\t\t// Home => 36\n\t\t\t// Left arrow => 37\n\t\t\t// Up arrow => 38\n\t\t\t// Right arrow => 39\n\t\t\t// Down arrow => 40\n\t\t\t// Insert => 45\n\t\t\t// Num lock => 144\n\t\t\t// AltGr key => 225\n\t\t\tvar excludedKeys = [\n\t\t\t\t16, 17, 18, 20, 35, 36, 37,\n\t\t\t\t38, 39, 40, 45, 144, 225\n\t\t\t];\n\n\t\t\tif ( event.which === 9 && this.elementValue( element ) === \"\" || $.inArray( event.keyCode, excludedKeys ) !== -1 ) {\n\t\t\t\treturn;\n\t\t\t} else if ( element.name in this.submitted || element.name in this.invalid ) {\n\t\t\t\tthis.element( element );\n\t\t\t}\n\t\t},\n\t\tonclick: function( element ) {\n\n\t\t\t// Click on selects, radiobuttons and checkboxes\n\t\t\tif ( element.name in this.submitted ) {\n\t\t\t\tthis.element( element );\n\n\t\t\t// Or option elements, check parent select in that case\n\t\t\t} else if ( element.parentNode.name in this.submitted ) {\n\t\t\t\tthis.element( element.parentNode );\n\t\t\t}\n\t\t},\n\t\thighlight: function( element, errorClass, validClass ) {\n\t\t\tif ( element.type === \"radio\" ) {\n\t\t\t\tthis.findByName( element.name ).addClass( errorClass ).removeClass( validClass );\n\t\t\t} else {\n\t\t\t\t$( element ).addClass( errorClass ).removeClass( validClass );\n\t\t\t}\n\t\t},\n\t\tunhighlight: function( element, errorClass, validClass ) {\n\t\t\tif ( element.type === \"radio\" ) {\n\t\t\t\tthis.findByName( element.name ).removeClass( errorClass ).addClass( validClass );\n\t\t\t} else {\n\t\t\t\t$( element ).removeClass( errorClass ).addClass( validClass );\n\t\t\t}\n\t\t}\n\t},\n\n\t// https://jqueryvalidation.org/jQuery.validator.setDefaults/\n\tsetDefaults: function( settings ) {\n\t\t$.extend( $.validator.defaults, settings );\n\t},\n\n\tmessages: {\n\t\trequired: \"This field is required.\",\n\t\tremote: \"Please fix this field.\",\n\t\temail: \"Please enter a valid email address.\",\n\t\turl: \"Please enter a valid URL.\",\n\t\tdate: \"Please enter a valid date.\",\n\t\tdateISO: \"Please enter a valid date (ISO).\",\n\t\tnumber: \"Please enter a valid number.\",\n\t\tdigits: \"Please enter only digits.\",\n\t\tequalTo: \"Please enter the same value again.\",\n\t\tmaxlength: $.validator.format( \"Please enter no more than {0} characters.\" ),\n\t\tminlength: $.validator.format( \"Please enter at least {0} characters.\" ),\n\t\trangelength: $.validator.format( \"Please enter a value between {0} and {1} characters long.\" ),\n\t\trange: $.validator.format( \"Please enter a value between {0} and {1}.\" ),\n\t\tmax: $.validator.format( \"Please enter a value less than or equal to {0}.\" ),\n\t\tmin: $.validator.format( \"Please enter a value greater than or equal to {0}.\" ),\n\t\tstep: $.validator.format( \"Please enter a multiple of {0}.\" )\n\t},\n\n\tautoCreateRanges: false,\n\n\tprototype: {\n\n\t\tinit: function() {\n\t\t\tthis.labelContainer = $( this.settings.errorLabelContainer );\n\t\t\tthis.errorContext = this.labelContainer.length && this.labelContainer || $( this.currentForm );\n\t\t\tthis.containers = $( this.settings.errorContainer ).add( this.settings.errorLabelContainer );\n\t\t\tthis.submitted = {};\n\t\t\tthis.valueCache = {};\n\t\t\tthis.pendingRequest = 0;\n\t\t\tthis.pending = {};\n\t\t\tthis.invalid = {};\n\t\t\tthis.reset();\n\n\t\t\tvar currentForm = this.currentForm,\n\t\t\t\tgroups = ( this.groups = {} ),\n\t\t\t\trules;\n\t\t\t$.each( this.settings.groups, function( key, value ) {\n\t\t\t\tif ( typeof value === \"string\" ) {\n\t\t\t\t\tvalue = value.split( /\\s/ );\n\t\t\t\t}\n\t\t\t\t$.each( value, function( index, name ) {\n\t\t\t\t\tgroups[ name ] = key;\n\t\t\t\t} );\n\t\t\t} );\n\t\t\trules = this.settings.rules;\n\t\t\t$.each( rules, function( key, value ) {\n\t\t\t\trules[ key ] = $.validator.normalizeRule( value );\n\t\t\t} );\n\n\t\t\tfunction delegate( event ) {\n\t\t\t\tvar isContentEditable = typeof $( this ).attr( \"contenteditable\" ) !== \"undefined\" && $( this ).attr( \"contenteditable\" ) !== \"false\";\n\n\t\t\t\t// Set form expando on contenteditable\n\t\t\t\tif ( !this.form && isContentEditable ) {\n\t\t\t\t\tthis.form = $( this ).closest( \"form\" )[ 0 ];\n\t\t\t\t\tthis.name = $( this ).attr( \"name\" );\n\t\t\t\t}\n\n\t\t\t\t// Ignore the element if it belongs to another form. This will happen mainly\n\t\t\t\t// when setting the `form` attribute of an input to the id of another form.\n\t\t\t\tif ( currentForm !== this.form ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tvar validator = $.data( this.form, \"validator\" ),\n\t\t\t\t\teventType = \"on\" + event.type.replace( /^validate/, \"\" ),\n\t\t\t\t\tsettings = validator.settings;\n\t\t\t\tif ( settings[ eventType ] && !$( this ).is( settings.ignore ) ) {\n\t\t\t\t\tsettings[ eventType ].call( validator, this, event );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t$( this.currentForm )\n\t\t\t\t.on( \"focusin.validate focusout.validate keyup.validate\",\n\t\t\t\t\t\":text, [type='password'], [type='file'], select, textarea, [type='number'], [type='search'], \" +\n\t\t\t\t\t\"[type='tel'], [type='url'], [type='email'], [type='datetime'], [type='date'], [type='month'], \" +\n\t\t\t\t\t\"[type='week'], [type='time'], [type='datetime-local'], [type='range'], [type='color'], \" +\n\t\t\t\t\t\"[type='radio'], [type='checkbox'], [contenteditable], [type='button']\", delegate )\n\n\t\t\t\t// Support: Chrome, oldIE\n\t\t\t\t// \"select\" is provided as event.target when clicking a option\n\t\t\t\t.on( \"click.validate\", \"select, option, [type='radio'], [type='checkbox']\", delegate );\n\n\t\t\tif ( this.settings.invalidHandler ) {\n\t\t\t\t$( this.currentForm ).on( \"invalid-form.validate\", this.settings.invalidHandler );\n\t\t\t}\n\t\t},\n\n\t\t// https://jqueryvalidation.org/Validator.form/\n\t\tform: function() {\n\t\t\tthis.checkForm();\n\t\t\t$.extend( this.submitted, this.errorMap );\n\t\t\tthis.invalid = $.extend( {}, this.errorMap );\n\t\t\tif ( !this.valid() ) {\n\t\t\t\t$( this.currentForm ).triggerHandler( \"invalid-form\", [ this ] );\n\t\t\t}\n\t\t\tthis.showErrors();\n\t\t\treturn this.valid();\n\t\t},\n\n\t\tcheckForm: function() {\n\t\t\tthis.prepareForm();\n\t\t\tfor ( var i = 0, elements = ( this.currentElements = this.elements() ); elements[ i ]; i++ ) {\n\t\t\t\tthis.check( elements[ i ] );\n\t\t\t}\n\t\t\treturn this.valid();\n\t\t},\n\n\t\t// https://jqueryvalidation.org/Validator.element/\n\t\telement: function( element ) {\n\t\t\tvar cleanElement = this.clean( element ),\n\t\t\t\tcheckElement = this.validationTargetFor( cleanElement ),\n\t\t\t\tv = this,\n\t\t\t\tresult = true,\n\t\t\t\trs, group;\n\n\t\t\tif ( checkElement === undefined ) {\n\t\t\t\tdelete this.invalid[ cleanElement.name ];\n\t\t\t} else {\n\t\t\t\tthis.prepareElement( checkElement );\n\t\t\t\tthis.currentElements = $( checkElement );\n\n\t\t\t\t// If this element is grouped, then validate all group elements already\n\t\t\t\t// containing a value\n\t\t\t\tgroup = this.groups[ checkElement.name ];\n\t\t\t\tif ( group ) {\n\t\t\t\t\t$.each( this.groups, function( name, testgroup ) {\n\t\t\t\t\t\tif ( testgroup === group && name !== checkElement.name ) {\n\t\t\t\t\t\t\tcleanElement = v.validationTargetFor( v.clean( v.findByName( name ) ) );\n\t\t\t\t\t\t\tif ( cleanElement && cleanElement.name in v.invalid ) {\n\t\t\t\t\t\t\t\tv.currentElements.push( cleanElement );\n\t\t\t\t\t\t\t\tresult = v.check( cleanElement ) && result;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t} );\n\t\t\t\t}\n\n\t\t\t\trs = this.check( checkElement ) !== false;\n\t\t\t\tresult = result && rs;\n\t\t\t\tif ( rs ) {\n\t\t\t\t\tthis.invalid[ checkElement.name ] = false;\n\t\t\t\t} else {\n\t\t\t\t\tthis.invalid[ checkElement.name ] = true;\n\t\t\t\t}\n\n\t\t\t\tif ( !this.numberOfInvalids() ) {\n\n\t\t\t\t\t// Hide error containers on last error\n\t\t\t\t\tthis.toHide = this.toHide.add( this.containers );\n\t\t\t\t}\n\t\t\t\tthis.showErrors();\n\n\t\t\t\t// Add aria-invalid status for screen readers\n\t\t\t\t$( element ).attr( \"aria-invalid\", !rs );\n\t\t\t}\n\n\t\t\treturn result;\n\t\t},\n\n\t\t// https://jqueryvalidation.org/Validator.showErrors/\n\t\tshowErrors: function( errors ) {\n\t\t\tif ( errors ) {\n\t\t\t\tvar validator = this;\n\n\t\t\t\t// Add items to error list and map\n\t\t\t\t$.extend( this.errorMap, errors );\n\t\t\t\tthis.errorList = $.map( this.errorMap, function( message, name ) {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tmessage: message,\n\t\t\t\t\t\telement: validator.findByName( name )[ 0 ]\n\t\t\t\t\t};\n\t\t\t\t} );\n\n\t\t\t\t// Remove items from success list\n\t\t\t\tthis.successList = $.grep( this.successList, function( element ) {\n\t\t\t\t\treturn !( element.name in errors );\n\t\t\t\t} );\n\t\t\t}\n\t\t\tif ( this.settings.showErrors ) {\n\t\t\t\tthis.settings.showErrors.call( this, this.errorMap, this.errorList );\n\t\t\t} else {\n\t\t\t\tthis.defaultShowErrors();\n\t\t\t}\n\t\t},\n\n\t\t// https://jqueryvalidation.org/Validator.resetForm/\n\t\tresetForm: function() {\n\t\t\tif ( $.fn.resetForm ) {\n\t\t\t\t$( this.currentForm ).resetForm();\n\t\t\t}\n\t\t\tthis.invalid = {};\n\t\t\tthis.submitted = {};\n\t\t\tthis.prepareForm();\n\t\t\tthis.hideErrors();\n\t\t\tvar elements = this.elements()\n\t\t\t\t.removeData( \"previousValue\" )\n\t\t\t\t.removeAttr( \"aria-invalid\" );\n\n\t\t\tthis.resetElements( elements );\n\t\t},\n\n\t\tresetElements: function( elements ) {\n\t\t\tvar i;\n\n\t\t\tif ( this.settings.unhighlight ) {\n\t\t\t\tfor ( i = 0; elements[ i ]; i++ ) {\n\t\t\t\t\tthis.settings.unhighlight.call( this, elements[ i ],\n\t\t\t\t\t\tthis.settings.errorClass, \"\" );\n\t\t\t\t\tthis.findByName( elements[ i ].name ).removeClass( this.settings.validClass );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\telements\n\t\t\t\t\t.removeClass( this.settings.errorClass )\n\t\t\t\t\t.removeClass( this.settings.validClass );\n\t\t\t}\n\t\t},\n\n\t\tnumberOfInvalids: function() {\n\t\t\treturn this.objectLength( this.invalid );\n\t\t},\n\n\t\tobjectLength: function( obj ) {\n\t\t\t/* jshint unused: false */\n\t\t\tvar count = 0,\n\t\t\t\ti;\n\t\t\tfor ( i in obj ) {\n\n\t\t\t\t// This check allows counting elements with empty error\n\t\t\t\t// message as invalid elements\n\t\t\t\tif ( obj[ i ] !== undefined && obj[ i ] !== null && obj[ i ] !== false ) {\n\t\t\t\t\tcount++;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn count;\n\t\t},\n\n\t\thideErrors: function() {\n\t\t\tthis.hideThese( this.toHide );\n\t\t},\n\n\t\thideThese: function( errors ) {\n\t\t\terrors.not( this.containers ).text( \"\" );\n\t\t\tthis.addWrapper( errors ).hide();\n\t\t},\n\n\t\tvalid: function() {\n\t\t\treturn this.size() === 0;\n\t\t},\n\n\t\tsize: function() {\n\t\t\treturn this.errorList.length;\n\t\t},\n\n\t\tfocusInvalid: function() {\n\t\t\tif ( this.settings.focusInvalid ) {\n\t\t\t\ttry {\n\t\t\t\t\t$( this.findLastActive() || this.errorList.length && this.errorList[ 0 ].element || [] )\n\t\t\t\t\t.filter( \":visible\" )\n\t\t\t\t\t.trigger( \"focus\" )\n\n\t\t\t\t\t// Manually trigger focusin event; without it, focusin handler isn't called, findLastActive won't have anything to find\n\t\t\t\t\t.trigger( \"focusin\" );\n\t\t\t\t} catch ( e ) {\n\n\t\t\t\t\t// Ignore IE throwing errors when focusing hidden elements\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\tfindLastActive: function() {\n\t\t\tvar lastActive = this.lastActive;\n\t\t\treturn lastActive && $.grep( this.errorList, function( n ) {\n\t\t\t\treturn n.element.name === lastActive.name;\n\t\t\t} ).length === 1 && lastActive;\n\t\t},\n\n\t\telements: function() {\n\t\t\tvar validator = this,\n\t\t\t\trulesCache = {};\n\n\t\t\t// Select all valid inputs inside the form (no submit or reset buttons)\n\t\t\treturn $( this.currentForm )\n\t\t\t.find( \"input, select, textarea, [contenteditable]\" )\n\t\t\t.not( \":submit, :reset, :image, :disabled\" )\n\t\t\t.not( this.settings.ignore )\n\t\t\t.filter( function() {\n\t\t\t\tvar name = this.name || $( this ).attr( \"name\" ); // For contenteditable\n\t\t\t\tvar isContentEditable = typeof $( this ).attr( \"contenteditable\" ) !== \"undefined\" && $( this ).attr( \"contenteditable\" ) !== \"false\";\n\n\t\t\t\tif ( !name && validator.settings.debug && window.console ) {\n\t\t\t\t\tconsole.error( \"%o has no name assigned\", this );\n\t\t\t\t}\n\n\t\t\t\t// Set form expando on contenteditable\n\t\t\t\tif ( isContentEditable ) {\n\t\t\t\t\tthis.form = $( this ).closest( \"form\" )[ 0 ];\n\t\t\t\t\tthis.name = name;\n\t\t\t\t}\n\n\t\t\t\t// Ignore elements that belong to other/nested forms\n\t\t\t\tif ( this.form !== validator.currentForm ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\n\t\t\t\t// Select only the first element for each name, and only those with rules specified\n\t\t\t\tif ( name in rulesCache || !validator.objectLength( $( this ).rules() ) ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\n\t\t\t\trulesCache[ name ] = true;\n\t\t\t\treturn true;\n\t\t\t} );\n\t\t},\n\n\t\tclean: function( selector ) {\n\t\t\treturn $( selector )[ 0 ];\n\t\t},\n\n\t\terrors: function() {\n\t\t\tvar errorClass = this.settings.errorClass.split( \" \" ).join( \".\" );\n\t\t\treturn $( this.settings.errorElement + \".\" + errorClass, this.errorContext );\n\t\t},\n\n\t\tresetInternals: function() {\n\t\t\tthis.successList = [];\n\t\t\tthis.errorList = [];\n\t\t\tthis.errorMap = {};\n\t\t\tthis.toShow = $( [] );\n\t\t\tthis.toHide = $( [] );\n\t\t},\n\n\t\treset: function() {\n\t\t\tthis.resetInternals();\n\t\t\tthis.currentElements = $( [] );\n\t\t},\n\n\t\tprepareForm: function() {\n\t\t\tthis.reset();\n\t\t\tthis.toHide = this.errors().add( this.containers );\n\t\t},\n\n\t\tprepareElement: function( element ) {\n\t\t\tthis.reset();\n\t\t\tthis.toHide = this.errorsFor( element );\n\t\t},\n\n\t\telementValue: function( element ) {\n\t\t\tvar $element = $( element ),\n\t\t\t\ttype = element.type,\n\t\t\t\tisContentEditable = typeof $element.attr( \"contenteditable\" ) !== \"undefined\" && $element.attr( \"contenteditable\" ) !== \"false\",\n\t\t\t\tval, idx;\n\n\t\t\tif ( type === \"radio\" || type === \"checkbox\" ) {\n\t\t\t\treturn this.findByName( element.name ).filter( \":checked\" ).val();\n\t\t\t} else if ( type === \"number\" && typeof element.validity !== \"undefined\" ) {\n\t\t\t\treturn element.validity.badInput ? \"NaN\" : $element.val();\n\t\t\t}\n\n\t\t\tif ( isContentEditable ) {\n\t\t\t\tval = $element.text();\n\t\t\t} else {\n\t\t\t\tval = $element.val();\n\t\t\t}\n\n\t\t\tif ( type === \"file\" ) {\n\n\t\t\t\t// Modern browser (chrome & safari)\n\t\t\t\tif ( val.substr( 0, 12 ) === \"C:\\\\fakepath\\\\\" ) {\n\t\t\t\t\treturn val.substr( 12 );\n\t\t\t\t}\n\n\t\t\t\t// Legacy browsers\n\t\t\t\t// Unix-based path\n\t\t\t\tidx = val.lastIndexOf( \"/\" );\n\t\t\t\tif ( idx >= 0 ) {\n\t\t\t\t\treturn val.substr( idx + 1 );\n\t\t\t\t}\n\n\t\t\t\t// Windows-based path\n\t\t\t\tidx = val.lastIndexOf( \"\\\\\" );\n\t\t\t\tif ( idx >= 0 ) {\n\t\t\t\t\treturn val.substr( idx + 1 );\n\t\t\t\t}\n\n\t\t\t\t// Just the file name\n\t\t\t\treturn val;\n\t\t\t}\n\n\t\t\tif ( typeof val === \"string\" ) {\n\t\t\t\treturn val.replace( /\\r/g, \"\" );\n\t\t\t}\n\t\t\treturn val;\n\t\t},\n\n\t\tcheck: function( element ) {\n\t\t\telement = this.validationTargetFor( this.clean( element ) );\n\n\t\t\tvar rules = $( element ).rules(),\n\t\t\t\trulesCount = $.map( rules, function( n, i ) {\n\t\t\t\t\treturn i;\n\t\t\t\t} ).length,\n\t\t\t\tdependencyMismatch = false,\n\t\t\t\tval = this.elementValue( element ),\n\t\t\t\tresult, method, rule, normalizer;\n\n\t\t\t// Abort any pending Ajax request from a previous call to this method.\n\t\t\tthis.abortRequest( element );\n\n\t\t\t// Prioritize the local normalizer defined for this element over the global one\n\t\t\t// if the former exists, otherwise user the global one in case it exists.\n\t\t\tif ( typeof rules.normalizer === \"function\" ) {\n\t\t\t\tnormalizer = rules.normalizer;\n\t\t\t} else if (\ttypeof this.settings.normalizer === \"function\" ) {\n\t\t\t\tnormalizer = this.settings.normalizer;\n\t\t\t}\n\n\t\t\t// If normalizer is defined, then call it to retreive the changed value instead\n\t\t\t// of using the real one.\n\t\t\t// Note that `this` in the normalizer is `element`.\n\t\t\tif ( normalizer ) {\n\t\t\t\tval = normalizer.call( element, val );\n\n\t\t\t\t// Delete the normalizer from rules to avoid treating it as a pre-defined method.\n\t\t\t\tdelete rules.normalizer;\n\t\t\t}\n\n\t\t\tfor ( method in rules ) {\n\t\t\t\trule = { method: method, parameters: rules[ method ] };\n\t\t\t\ttry {\n\t\t\t\t\tresult = $.validator.methods[ method ].call( this, val, element, rule.parameters );\n\n\t\t\t\t\t// If a method indicates that the field is optional and therefore valid,\n\t\t\t\t\t// don't mark it as valid when there are no other rules\n\t\t\t\t\tif ( result === \"dependency-mismatch\" && rulesCount === 1 ) {\n\t\t\t\t\t\tdependencyMismatch = true;\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tdependencyMismatch = false;\n\n\t\t\t\t\tif ( result === \"pending\" ) {\n\t\t\t\t\t\tthis.toHide = this.toHide.not( this.errorsFor( element ) );\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( !result ) {\n\t\t\t\t\t\tthis.formatAndAdd( element, rule );\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t} catch ( e ) {\n\t\t\t\t\tif ( this.settings.debug && window.console ) {\n\t\t\t\t\t\tconsole.log( \"Exception occurred when checking element \" + element.id + \", check the '\" + rule.method + \"' method.\", e );\n\t\t\t\t\t}\n\t\t\t\t\tif ( e instanceof TypeError ) {\n\t\t\t\t\t\te.message += \". Exception occurred when checking element \" + element.id + \", check the '\" + rule.method + \"' method.\";\n\t\t\t\t\t}\n\n\t\t\t\t\tthrow e;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif ( dependencyMismatch ) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif ( this.objectLength( rules ) ) {\n\t\t\t\tthis.successList.push( element );\n\t\t\t}\n\t\t\treturn true;\n\t\t},\n\n\t\t// Return the custom message for the given element and validation method\n\t\t// specified in the element's HTML5 data attribute\n\t\t// return the generic message if present and no method specific message is present\n\t\tcustomDataMessage: function( element, method ) {\n\t\t\treturn $( element ).data( \"msg\" + method.charAt( 0 ).toUpperCase() +\n\t\t\t\tmethod.substring( 1 ).toLowerCase() ) || $( element ).data( \"msg\" );\n\t\t},\n\n\t\t// Return the custom message for the given element name and validation method\n\t\tcustomMessage: function( name, method ) {\n\t\t\tvar m = this.settings.messages[ name ];\n\t\t\treturn m && ( m.constructor === String ? m : m[ method ] );\n\t\t},\n\n\t\t// Return the first defined argument, allowing empty strings\n\t\tfindDefined: function() {\n\t\t\tfor ( var i = 0; i < arguments.length; i++ ) {\n\t\t\t\tif ( arguments[ i ] !== undefined ) {\n\t\t\t\t\treturn arguments[ i ];\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn undefined;\n\t\t},\n\n\t\t// The second parameter 'rule' used to be a string, and extended to an object literal\n\t\t// of the following form:\n\t\t// rule = {\n\t\t// method: \"method name\",\n\t\t// parameters: \"the given method parameters\"\n\t\t// }\n\t\t//\n\t\t// The old behavior still supported, kept to maintain backward compatibility with\n\t\t// old code, and will be removed in the next major release.\n\t\tdefaultMessage: function( element, rule ) {\n\t\t\tif ( typeof rule === \"string\" ) {\n\t\t\t\trule = { method: rule };\n\t\t\t}\n\n\t\t\tvar message = this.findDefined(\n\t\t\t\t\tthis.customMessage( element.name, rule.method ),\n\t\t\t\t\tthis.customDataMessage( element, rule.method ),\n\n\t\t\t\t\t// 'title' is never undefined, so handle empty string as undefined\n\t\t\t\t\t!this.settings.ignoreTitle && element.title || undefined,\n\t\t\t\t\t$.validator.messages[ rule.method ],\n\t\t\t\t\t\"Warning: No message defined for \" + element.name + \"\"\n\t\t\t\t),\n\t\t\t\ttheregex = /\\$?\\{(\\d+)\\}/g;\n\t\t\tif ( typeof message === \"function\" ) {\n\t\t\t\tmessage = message.call( this, rule.parameters, element );\n\t\t\t} else if ( theregex.test( message ) ) {\n\t\t\t\tmessage = $.validator.format( message.replace( theregex, \"{$1}\" ), rule.parameters );\n\t\t\t}\n\n\t\t\treturn message;\n\t\t},\n\n\t\tformatAndAdd: function( element, rule ) {\n\t\t\tvar message = this.defaultMessage( element, rule );\n\n\t\t\tthis.errorList.push( {\n\t\t\t\tmessage: message,\n\t\t\t\telement: element,\n\t\t\t\tmethod: rule.method\n\t\t\t} );\n\n\t\t\tthis.errorMap[ element.name ] = message;\n\t\t\tthis.submitted[ element.name ] = message;\n\t\t},\n\n\t\taddWrapper: function( toToggle ) {\n\t\t\tif ( this.settings.wrapper ) {\n\t\t\t\ttoToggle = toToggle.add( toToggle.parent( this.settings.wrapper ) );\n\t\t\t}\n\t\t\treturn toToggle;\n\t\t},\n\n\t\tdefaultShowErrors: function() {\n\t\t\tvar i, elements, error;\n\t\t\tfor ( i = 0; this.errorList[ i ]; i++ ) {\n\t\t\t\terror = this.errorList[ i ];\n\t\t\t\tif ( this.settings.highlight ) {\n\t\t\t\t\tthis.settings.highlight.call( this, error.element, this.settings.errorClass, this.settings.validClass );\n\t\t\t\t}\n\t\t\t\tthis.showLabel( error.element, error.message );\n\t\t\t}\n\t\t\tif ( this.errorList.length ) {\n\t\t\t\tthis.toShow = this.toShow.add( this.containers );\n\t\t\t}\n\t\t\tif ( this.settings.success ) {\n\t\t\t\tfor ( i = 0; this.successList[ i ]; i++ ) {\n\t\t\t\t\tthis.showLabel( this.successList[ i ] );\n\t\t\t\t}\n\t\t\t}\n\t\t\tif ( this.settings.unhighlight ) {\n\t\t\t\tfor ( i = 0, elements = this.validElements(); elements[ i ]; i++ ) {\n\t\t\t\t\tthis.settings.unhighlight.call( this, elements[ i ], this.settings.errorClass, this.settings.validClass );\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.toHide = this.toHide.not( this.toShow );\n\t\t\tthis.hideErrors();\n\t\t\tthis.addWrapper( this.toShow ).show();\n\t\t},\n\n\t\tvalidElements: function() {\n\t\t\treturn this.currentElements.not( this.invalidElements() );\n\t\t},\n\n\t\tinvalidElements: function() {\n\t\t\treturn $( this.errorList ).map( function() {\n\t\t\t\treturn this.element;\n\t\t\t} );\n\t\t},\n\n\t\tshowLabel: function( element, message ) {\n\t\t\tvar place, group, errorID, v,\n\t\t\t\terror = this.errorsFor( element ),\n\t\t\t\telementID = this.idOrName( element ),\n\t\t\t\tdescribedBy = $( element ).attr( \"aria-describedby\" );\n\n\t\t\tif ( error.length ) {\n\n\t\t\t\t// Refresh error/success class\n\t\t\t\terror.removeClass( this.settings.validClass ).addClass( this.settings.errorClass );\n\n\t\t\t\t// Replace message on existing label\n\t\t\t\tif ( this.settings && this.settings.escapeHtml ) {\n\t\t\t\t\terror.text( message || \"\" );\n\t\t\t\t} else {\n\t\t\t\t\terror.html( message || \"\" );\n\t\t\t\t}\n\t\t\t} else {\n\n\t\t\t\t// Create error element\n\t\t\t\terror = $( \"<\" + this.settings.errorElement + \">\" )\n\t\t\t\t\t.attr( \"id\", elementID + \"-error\" )\n\t\t\t\t\t.addClass( this.settings.errorClass );\n\n\t\t\t\tif ( this.settings && this.settings.escapeHtml ) {\n\t\t\t\t\terror.text( message || \"\" );\n\t\t\t\t} else {\n\t\t\t\t\terror.html( message || \"\" );\n\t\t\t\t}\n\n\t\t\t\t// Maintain reference to the element to be placed into the DOM\n\t\t\t\tplace = error;\n\t\t\t\tif ( this.settings.wrapper ) {\n\n\t\t\t\t\t// Make sure the element is visible, even in IE\n\t\t\t\t\t// actually showing the wrapped element is handled elsewhere\n\t\t\t\t\tplace = error.hide().show().wrap( \"<\" + this.settings.wrapper + \"/>\" ).parent();\n\t\t\t\t}\n\t\t\t\tif ( this.labelContainer.length ) {\n\t\t\t\t\tthis.labelContainer.append( place );\n\t\t\t\t} else if ( this.settings.errorPlacement ) {\n\t\t\t\t\tthis.settings.errorPlacement.call( this, place, $( element ) );\n\t\t\t\t} else {\n\t\t\t\t\tplace.insertAfter( element );\n\t\t\t\t}\n\n\t\t\t\t// Link error back to the element\n\t\t\t\tif ( error.is( \"label\" ) ) {\n\n\t\t\t\t\t// If the error is a label, then associate using 'for'\n\t\t\t\t\terror.attr( \"for\", elementID );\n\n\t\t\t\t\t// If the element is not a child of an associated label, then it's necessary\n\t\t\t\t\t// to explicitly apply aria-describedby\n\t\t\t\t} else if ( error.parents( \"label[for='\" + this.escapeCssMeta( elementID ) + \"']\" ).length === 0 ) {\n\t\t\t\t\terrorID = error.attr( \"id\" );\n\n\t\t\t\t\t// Respect existing non-error aria-describedby\n\t\t\t\t\tif ( !describedBy ) {\n\t\t\t\t\t\tdescribedBy = errorID;\n\t\t\t\t\t} else if ( !describedBy.match( new RegExp( \"\\\\b\" + this.escapeCssMeta( errorID ) + \"\\\\b\" ) ) ) {\n\n\t\t\t\t\t\t// Add to end of list if not already present\n\t\t\t\t\t\tdescribedBy += \" \" + errorID;\n\t\t\t\t\t}\n\t\t\t\t\t$( element ).attr( \"aria-describedby\", describedBy );\n\n\t\t\t\t\t// If this element is grouped, then assign to all elements in the same group\n\t\t\t\t\tgroup = this.groups[ element.name ];\n\t\t\t\t\tif ( group ) {\n\t\t\t\t\t\tv = this;\n\t\t\t\t\t\t$.each( v.groups, function( name, testgroup ) {\n\t\t\t\t\t\t\tif ( testgroup === group ) {\n\t\t\t\t\t\t\t\t$( \"[name='\" + v.escapeCssMeta( name ) + \"']\", v.currentForm )\n\t\t\t\t\t\t\t\t\t.attr( \"aria-describedby\", error.attr( \"id\" ) );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif ( !message && this.settings.success ) {\n\t\t\t\terror.text( \"\" );\n\t\t\t\tif ( typeof this.settings.success === \"string\" ) {\n\t\t\t\t\terror.addClass( this.settings.success );\n\t\t\t\t} else {\n\t\t\t\t\tthis.settings.success( error, element );\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.toShow = this.toShow.add( error );\n\t\t},\n\n\t\terrorsFor: function( element ) {\n\t\t\tvar name = this.escapeCssMeta( this.idOrName( element ) ),\n\t\t\t\tdescriber = $( element ).attr( \"aria-describedby\" ),\n\t\t\t\tselector = \"label[for='\" + name + \"'], label[for='\" + name + \"'] *\";\n\n\t\t\t// 'aria-describedby' should directly reference the error element\n\t\t\tif ( describer ) {\n\t\t\t\tselector = selector + \", #\" + this.escapeCssMeta( describer )\n\t\t\t\t\t.replace( /\\s+/g, \", #\" );\n\t\t\t}\n\n\t\t\treturn this\n\t\t\t\t.errors()\n\t\t\t\t.filter( selector );\n\t\t},\n\n\t\t// See https://api.jquery.com/category/selectors/, for CSS\n\t\t// meta-characters that should be escaped in order to be used with JQuery\n\t\t// as a literal part of a name/id or any selector.\n\t\tescapeCssMeta: function( string ) {\n\t\t\tif ( string === undefined ) {\n\t\t\t\treturn \"\";\n\t\t\t}\n\n\t\t\treturn string.replace( /([\\\\!\"#$%&'()*+,./:;<=>?@\\[\\]^`{|}~])/g, \"\\\\$1\" );\n\t\t},\n\n\t\tidOrName: function( element ) {\n\t\t\treturn this.groups[ element.name ] || ( this.checkable( element ) ? element.name : element.id || element.name );\n\t\t},\n\n\t\tvalidationTargetFor: function( element ) {\n\n\t\t\t// If radio/checkbox, validate first element in group instead\n\t\t\tif ( this.checkable( element ) ) {\n\t\t\t\telement = this.findByName( element.name );\n\t\t\t}\n\n\t\t\t// Always apply ignore filter\n\t\t\treturn $( element ).not( this.settings.ignore )[ 0 ];\n\t\t},\n\n\t\tcheckable: function( element ) {\n\t\t\treturn ( /radio|checkbox/i ).test( element.type );\n\t\t},\n\n\t\tfindByName: function( name ) {\n\t\t\treturn $( this.currentForm ).find( \"[name='\" + this.escapeCssMeta( name ) + \"']\" );\n\t\t},\n\n\t\tgetLength: function( value, element ) {\n\t\t\tswitch ( element.nodeName.toLowerCase() ) {\n\t\t\tcase \"select\":\n\t\t\t\treturn $( \"option:selected\", element ).length;\n\t\t\tcase \"input\":\n\t\t\t\tif ( this.checkable( element ) ) {\n\t\t\t\t\treturn this.findByName( element.name ).filter( \":checked\" ).length;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn value.length;\n\t\t},\n\n\t\tdepend: function( param, element ) {\n\t\t\treturn this.dependTypes[ typeof param ] ? this.dependTypes[ typeof param ]( param, element ) : true;\n\t\t},\n\n\t\tdependTypes: {\n\t\t\t\"boolean\": function( param ) {\n\t\t\t\treturn param;\n\t\t\t},\n\t\t\t\"string\": function( param, element ) {\n\t\t\t\treturn !!$( param, element.form ).length;\n\t\t\t},\n\t\t\t\"function\": function( param, element ) {\n\t\t\t\treturn param( element );\n\t\t\t}\n\t\t},\n\n\t\toptional: function( element ) {\n\t\t\tvar val = this.elementValue( element );\n\t\t\treturn !$.validator.methods.required.call( this, val, element ) && \"dependency-mismatch\";\n\t\t},\n\n\t\telementAjaxPort: function( element ) {\n\t\t\treturn \"validate\" + element.name;\n\t\t},\n\n\t\tstartRequest: function( element ) {\n\t\t\tif ( !this.pending[ element.name ] ) {\n\t\t\t\tthis.pendingRequest++;\n\t\t\t\t$( element ).addClass( this.settings.pendingClass );\n\t\t\t\tthis.pending[ element.name ] = true;\n\t\t\t}\n\t\t},\n\n\t\tstopRequest: function( element, valid ) {\n\t\t\tthis.pendingRequest--;\n\n\t\t\t// Sometimes synchronization fails, make sure pendingRequest is never < 0\n\t\t\tif ( this.pendingRequest < 0 ) {\n\t\t\t\tthis.pendingRequest = 0;\n\t\t\t}\n\t\t\tdelete this.pending[ element.name ];\n\t\t\t$( element ).removeClass( this.settings.pendingClass );\n\t\t\tif ( valid && this.pendingRequest === 0 && this.formSubmitted && this.form() && this.pendingRequest === 0 ) {\n\t\t\t\t$( this.currentForm ).trigger( \"submit\" );\n\n\t\t\t\t// Remove the hidden input that was used as a replacement for the\n\t\t\t\t// missing submit button. The hidden input is added by `handle()`\n\t\t\t\t// to ensure that the value of the used submit button is passed on\n\t\t\t\t// for scripted submits triggered by this method\n\t\t\t\tif ( this.submitButton ) {\n\t\t\t\t\t$( \"input:hidden[name='\" + this.submitButton.name + \"']\", this.currentForm ).remove();\n\t\t\t\t}\n\n\t\t\t\tthis.formSubmitted = false;\n\t\t\t} else if ( !valid && this.pendingRequest === 0 && this.formSubmitted ) {\n\t\t\t\t$( this.currentForm ).triggerHandler( \"invalid-form\", [ this ] );\n\t\t\t\tthis.formSubmitted = false;\n\t\t\t}\n\t\t},\n\n\t\tabortRequest: function( element ) {\n\t\t\tvar port;\n\n\t\t\tif ( this.pending[ element.name ] ) {\n\t\t\t\tport = this.elementAjaxPort( element );\n\t\t\t\t$.ajaxAbort( port );\n\n\t\t\t\tthis.pendingRequest--;\n\n\t\t\t\t// Sometimes synchronization fails, make sure pendingRequest is never < 0\n\t\t\t\tif ( this.pendingRequest < 0 ) {\n\t\t\t\t\tthis.pendingRequest = 0;\n\t\t\t\t}\n\n\t\t\t\tdelete this.pending[ element.name ];\n\t\t\t\t$( element ).removeClass( this.settings.pendingClass );\n\t\t\t}\n\t\t},\n\n\t\tpreviousValue: function( element, method ) {\n\t\t\tmethod = typeof method === \"string\" && method || \"remote\";\n\n\t\t\treturn $.data( element, \"previousValue\" ) || $.data( element, \"previousValue\", {\n\t\t\t\told: null,\n\t\t\t\tvalid: true,\n\t\t\t\tmessage: this.defaultMessage( element, { method: method } )\n\t\t\t} );\n\t\t},\n\n\t\t// Cleans up all forms and elements, removes validator-specific events\n\t\tdestroy: function() {\n\t\t\tthis.resetForm();\n\n\t\t\t$( this.currentForm )\n\t\t\t\t.off( \".validate\" )\n\t\t\t\t.removeData( \"validator\" )\n\t\t\t\t.find( \".validate-equalTo-blur\" )\n\t\t\t\t\t.off( \".validate-equalTo\" )\n\t\t\t\t\t.removeClass( \"validate-equalTo-blur\" )\n\t\t\t\t.find( \".validate-lessThan-blur\" )\n\t\t\t\t\t.off( \".validate-lessThan\" )\n\t\t\t\t\t.removeClass( \"validate-lessThan-blur\" )\n\t\t\t\t.find( \".validate-lessThanEqual-blur\" )\n\t\t\t\t\t.off( \".validate-lessThanEqual\" )\n\t\t\t\t\t.removeClass( \"validate-lessThanEqual-blur\" )\n\t\t\t\t.find( \".validate-greaterThanEqual-blur\" )\n\t\t\t\t\t.off( \".validate-greaterThanEqual\" )\n\t\t\t\t\t.removeClass( \"validate-greaterThanEqual-blur\" )\n\t\t\t\t.find( \".validate-greaterThan-blur\" )\n\t\t\t\t\t.off( \".validate-greaterThan\" )\n\t\t\t\t\t.removeClass( \"validate-greaterThan-blur\" );\n\t\t}\n\n\t},\n\n\tclassRuleSettings: {\n\t\trequired: { required: true },\n\t\temail: { email: true },\n\t\turl: { url: true },\n\t\tdate: { date: true },\n\t\tdateISO: { dateISO: true },\n\t\tnumber: { number: true },\n\t\tdigits: { digits: true },\n\t\tcreditcard: { creditcard: true }\n\t},\n\n\taddClassRules: function( className, rules ) {\n\t\tif ( className.constructor === String ) {\n\t\t\tthis.classRuleSettings[ className ] = rules;\n\t\t} else {\n\t\t\t$.extend( this.classRuleSettings, className );\n\t\t}\n\t},\n\n\tclassRules: function( element ) {\n\t\tvar rules = {},\n\t\t\tclasses = $( element ).attr( \"class\" );\n\n\t\tif ( classes ) {\n\t\t\t$.each( classes.split( \" \" ), function() {\n\t\t\t\tif ( this in $.validator.classRuleSettings ) {\n\t\t\t\t\t$.extend( rules, $.validator.classRuleSettings[ this ] );\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\t\treturn rules;\n\t},\n\n\tnormalizeAttributeRule: function( rules, type, method, value ) {\n\n\t\t// Convert the value to a number for number inputs, and for text for backwards compability\n\t\t// allows type=\"date\" and others to be compared as strings\n\t\tif ( /min|max|step/.test( method ) && ( type === null || /number|range|text/.test( type ) ) ) {\n\t\t\tvalue = Number( value );\n\n\t\t\t// Support Opera Mini, which returns NaN for undefined minlength\n\t\t\tif ( isNaN( value ) ) {\n\t\t\t\tvalue = undefined;\n\t\t\t}\n\t\t}\n\n\t\tif ( value || value === 0 ) {\n\t\t\trules[ method ] = value;\n\t\t} else if ( type === method && type !== \"range\" ) {\n\n\t\t\t// Exception: the jquery validate 'range' method\n\t\t\t// does not test for the html5 'range' type\n\t\t\trules[ type === \"date\" ? \"dateISO\" : method ] = true;\n\t\t}\n\t},\n\n\tattributeRules: function( element ) {\n\t\tvar rules = {},\n\t\t\t$element = $( element ),\n\t\t\ttype = element.getAttribute( \"type\" ),\n\t\t\tmethod, value;\n\n\t\tfor ( method in $.validator.methods ) {\n\n\t\t\t// Support for in both html5 and older browsers\n\t\t\tif ( method === \"required\" ) {\n\t\t\t\tvalue = element.getAttribute( method );\n\n\t\t\t\t// Some browsers return an empty string for the required attribute\n\t\t\t\t// and non-HTML5 browsers might have required=\"\" markup\n\t\t\t\tif ( value === \"\" ) {\n\t\t\t\t\tvalue = true;\n\t\t\t\t}\n\n\t\t\t\t// Force non-HTML5 browsers to return bool\n\t\t\t\tvalue = !!value;\n\t\t\t} else {\n\t\t\t\tvalue = $element.attr( method );\n\t\t\t}\n\n\t\t\tthis.normalizeAttributeRule( rules, type, method, value );\n\t\t}\n\n\t\t// 'maxlength' may be returned as -1, 2147483647 ( IE ) and 524288 ( safari ) for text inputs\n\t\tif ( rules.maxlength && /-1|2147483647|524288/.test( rules.maxlength ) ) {\n\t\t\tdelete rules.maxlength;\n\t\t}\n\n\t\treturn rules;\n\t},\n\n\tdataRules: function( element ) {\n\t\tvar rules = {},\n\t\t\t$element = $( element ),\n\t\t\ttype = element.getAttribute( \"type\" ),\n\t\t\tmethod, value;\n\n\t\tfor ( method in $.validator.methods ) {\n\t\t\tvalue = $element.data( \"rule\" + method.charAt( 0 ).toUpperCase() + method.substring( 1 ).toLowerCase() );\n\n\t\t\t// Cast empty attributes like `data-rule-required` to `true`\n\t\t\tif ( value === \"\" ) {\n\t\t\t\tvalue = true;\n\t\t\t}\n\n\t\t\tthis.normalizeAttributeRule( rules, type, method, value );\n\t\t}\n\t\treturn rules;\n\t},\n\n\tstaticRules: function( element ) {\n\t\tvar rules = {},\n\t\t\tvalidator = $.data( element.form, \"validator\" );\n\n\t\tif ( validator.settings.rules ) {\n\t\t\trules = $.validator.normalizeRule( validator.settings.rules[ element.name ] ) || {};\n\t\t}\n\t\treturn rules;\n\t},\n\n\tnormalizeRules: function( rules, element ) {\n\n\t\t// Handle dependency check\n\t\t$.each( rules, function( prop, val ) {\n\n\t\t\t// Ignore rule when param is explicitly false, eg. required:false\n\t\t\tif ( val === false ) {\n\t\t\t\tdelete rules[ prop ];\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif ( val.param || val.depends ) {\n\t\t\t\tvar keepRule = true;\n\t\t\t\tswitch ( typeof val.depends ) {\n\t\t\t\tcase \"string\":\n\t\t\t\t\tkeepRule = !!$( val.depends, element.form ).length;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"function\":\n\t\t\t\t\tkeepRule = val.depends.call( element, element );\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tif ( keepRule ) {\n\t\t\t\t\trules[ prop ] = val.param !== undefined ? val.param : true;\n\t\t\t\t} else {\n\t\t\t\t\t$.data( element.form, \"validator\" ).resetElements( $( element ) );\n\t\t\t\t\tdelete rules[ prop ];\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\n\t\t// Evaluate parameters\n\t\t$.each( rules, function( rule, parameter ) {\n\t\t\trules[ rule ] = typeof parameter === \"function\" && rule !== \"normalizer\" ? parameter( element ) : parameter;\n\t\t} );\n\n\t\t// Clean number parameters\n\t\t$.each( [ \"minlength\", \"maxlength\" ], function() {\n\t\t\tif ( rules[ this ] ) {\n\t\t\t\trules[ this ] = Number( rules[ this ] );\n\t\t\t}\n\t\t} );\n\t\t$.each( [ \"rangelength\", \"range\" ], function() {\n\t\t\tvar parts;\n\t\t\tif ( rules[ this ] ) {\n\t\t\t\tif ( Array.isArray( rules[ this ] ) ) {\n\t\t\t\t\trules[ this ] = [ Number( rules[ this ][ 0 ] ), Number( rules[ this ][ 1 ] ) ];\n\t\t\t\t} else if ( typeof rules[ this ] === \"string\" ) {\n\t\t\t\t\tparts = rules[ this ].replace( /[\\[\\]]/g, \"\" ).split( /[\\s,]+/ );\n\t\t\t\t\trules[ this ] = [ Number( parts[ 0 ] ), Number( parts[ 1 ] ) ];\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\n\t\tif ( $.validator.autoCreateRanges ) {\n\n\t\t\t// Auto-create ranges\n\t\t\tif ( rules.min != null && rules.max != null ) {\n\t\t\t\trules.range = [ rules.min, rules.max ];\n\t\t\t\tdelete rules.min;\n\t\t\t\tdelete rules.max;\n\t\t\t}\n\t\t\tif ( rules.minlength != null && rules.maxlength != null ) {\n\t\t\t\trules.rangelength = [ rules.minlength, rules.maxlength ];\n\t\t\t\tdelete rules.minlength;\n\t\t\t\tdelete rules.maxlength;\n\t\t\t}\n\t\t}\n\n\t\treturn rules;\n\t},\n\n\t// Converts a simple string to a {string: true} rule, e.g., \"required\" to {required:true}\n\tnormalizeRule: function( data ) {\n\t\tif ( typeof data === \"string\" ) {\n\t\t\tvar transformed = {};\n\t\t\t$.each( data.split( /\\s/ ), function() {\n\t\t\t\ttransformed[ this ] = true;\n\t\t\t} );\n\t\t\tdata = transformed;\n\t\t}\n\t\treturn data;\n\t},\n\n\t// https://jqueryvalidation.org/jQuery.validator.addMethod/\n\taddMethod: function( name, method, message ) {\n\t\t$.validator.methods[ name ] = method;\n\t\t$.validator.messages[ name ] = message !== undefined ? message : $.validator.messages[ name ];\n\t\tif ( method.length < 3 ) {\n\t\t\t$.validator.addClassRules( name, $.validator.normalizeRule( name ) );\n\t\t}\n\t},\n\n\t// https://jqueryvalidation.org/jQuery.validator.methods/\n\tmethods: {\n\n\t\t// https://jqueryvalidation.org/required-method/\n\t\trequired: function( value, element, param ) {\n\n\t\t\t// Check if dependency is met\n\t\t\tif ( !this.depend( param, element ) ) {\n\t\t\t\treturn \"dependency-mismatch\";\n\t\t\t}\n\t\t\tif ( element.nodeName.toLowerCase() === \"select\" ) {\n\n\t\t\t\t// Could be an array for select-multiple or a string, both are fine this way\n\t\t\t\tvar val = $( element ).val();\n\t\t\t\treturn val && val.length > 0;\n\t\t\t}\n\t\t\tif ( this.checkable( element ) ) {\n\t\t\t\treturn this.getLength( value, element ) > 0;\n\t\t\t}\n\t\t\treturn value !== undefined && value !== null && value.length > 0;\n\t\t},\n\n\t\t// https://jqueryvalidation.org/email-method/\n\t\temail: function( value, element ) {\n\n\t\t\t// From https://html.spec.whatwg.org/multipage/forms.html#valid-e-mail-address\n\t\t\t// Retrieved 2014-01-14\n\t\t\t// If you have a problem with this implementation, report a bug against the above spec\n\t\t\t// Or use custom methods to implement your own email validation\n\t\t\treturn this.optional( element ) || /^[a-zA-Z0-9.!#$%&'*+\\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/.test( value );\n\t\t},\n\n\t\t// https://jqueryvalidation.org/url-method/\n\t\turl: function( value, element ) {\n\n\t\t\t// Copyright (c) 2010-2013 Diego Perini, MIT licensed\n\t\t\t// https://gist.github.com/dperini/729294\n\t\t\t// see also https://mathiasbynens.be/demo/url-regex\n\t\t\t// modified to allow protocol-relative URLs\n\t\t\treturn this.optional( element ) || /^(?:(?:(?:https?|ftp):)?\\/\\/)(?:(?:[^\\]\\[?\\/<~#`!@$^&*()+=}|:\";',>{ ]|%[0-9A-Fa-f]{2})+(?::(?:[^\\]\\[?\\/<~#`!@$^&*()+=}|:\";',>{ ]|%[0-9A-Fa-f]{2})*)?@)?(?:(?!(?:10|127)(?:\\.\\d{1,3}){3})(?!(?:169\\.254|192\\.168)(?:\\.\\d{1,3}){2})(?!172\\.(?:1[6-9]|2\\d|3[0-1])(?:\\.\\d{1,3}){2})(?:[1-9]\\d?|1\\d\\d|2[01]\\d|22[0-3])(?:\\.(?:1?\\d{1,2}|2[0-4]\\d|25[0-5])){2}(?:\\.(?:[1-9]\\d?|1\\d\\d|2[0-4]\\d|25[0-4]))|(?:(?:[a-z0-9\\u00a1-\\uffff][a-z0-9\\u00a1-\\uffff_-]{0,62})?[a-z0-9\\u00a1-\\uffff]\\.)+(?:[a-z\\u00a1-\\uffff]{2,}\\.?))(?::\\d{2,5})?(?:[/?#]\\S*)?$/i.test( value );\n\t\t},\n\n\t\t// https://jqueryvalidation.org/date-method/\n\t\tdate: ( function() {\n\t\t\tvar called = false;\n\n\t\t\treturn function( value, element ) {\n\t\t\t\tif ( !called ) {\n\t\t\t\t\tcalled = true;\n\t\t\t\t\tif ( this.settings.debug && window.console ) {\n\t\t\t\t\t\tconsole.warn(\n\t\t\t\t\t\t\t\"The `date` method is deprecated and will be removed in version '2.0.0'.\\n\" +\n\t\t\t\t\t\t\t\"Please don't use it, since it relies on the Date constructor, which\\n\" +\n\t\t\t\t\t\t\t\"behaves very differently across browsers and locales. Use `dateISO`\\n\" +\n\t\t\t\t\t\t\t\"instead or one of the locale specific methods in `localizations/`\\n\" +\n\t\t\t\t\t\t\t\"and `additional-methods.js`.\"\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn this.optional( element ) || !/Invalid|NaN/.test( new Date( value ).toString() );\n\t\t\t};\n\t\t}() ),\n\n\t\t// https://jqueryvalidation.org/dateISO-method/\n\t\tdateISO: function( value, element ) {\n\t\t\treturn this.optional( element ) || /^\\d{4}[\\/\\-](0?[1-9]|1[012])[\\/\\-](0?[1-9]|[12][0-9]|3[01])$/.test( value );\n\t\t},\n\n\t\t// https://jqueryvalidation.org/number-method/\n\t\tnumber: function( value, element ) {\n\t\t\treturn this.optional( element ) || /^(?:-?\\d+|-?\\d{1,3}(?:,\\d{3})+)?(?:\\.\\d+)?$/.test( value );\n\t\t},\n\n\t\t// https://jqueryvalidation.org/digits-method/\n\t\tdigits: function( value, element ) {\n\t\t\treturn this.optional( element ) || /^\\d+$/.test( value );\n\t\t},\n\n\t\t// https://jqueryvalidation.org/minlength-method/\n\t\tminlength: function( value, element, param ) {\n\t\t\tvar length = Array.isArray( value ) ? value.length : this.getLength( value, element );\n\t\t\treturn this.optional( element ) || length >= param;\n\t\t},\n\n\t\t// https://jqueryvalidation.org/maxlength-method/\n\t\tmaxlength: function( value, element, param ) {\n\t\t\tvar length = Array.isArray( value ) ? value.length : this.getLength( value, element );\n\t\t\treturn this.optional( element ) || length <= param;\n\t\t},\n\n\t\t// https://jqueryvalidation.org/rangelength-method/\n\t\trangelength: function( value, element, param ) {\n\t\t\tvar length = Array.isArray( value ) ? value.length : this.getLength( value, element );\n\t\t\treturn this.optional( element ) || ( length >= param[ 0 ] && length <= param[ 1 ] );\n\t\t},\n\n\t\t// https://jqueryvalidation.org/min-method/\n\t\tmin: function( value, element, param ) {\n\t\t\treturn this.optional( element ) || value >= param;\n\t\t},\n\n\t\t// https://jqueryvalidation.org/max-method/\n\t\tmax: function( value, element, param ) {\n\t\t\treturn this.optional( element ) || value <= param;\n\t\t},\n\n\t\t// https://jqueryvalidation.org/range-method/\n\t\trange: function( value, element, param ) {\n\t\t\treturn this.optional( element ) || ( value >= param[ 0 ] && value <= param[ 1 ] );\n\t\t},\n\n\t\t// https://jqueryvalidation.org/step-method/\n\t\tstep: function( value, element, param ) {\n\t\t\tvar type = $( element ).attr( \"type\" ),\n\t\t\t\terrorMessage = \"Step attribute on input type \" + type + \" is not supported.\",\n\t\t\t\tsupportedTypes = [ \"text\", \"number\", \"range\" ],\n\t\t\t\tre = new RegExp( \"\\\\b\" + type + \"\\\\b\" ),\n\t\t\t\tnotSupported = type && !re.test( supportedTypes.join() ),\n\t\t\t\tdecimalPlaces = function( num ) {\n\t\t\t\t\tvar match = ( \"\" + num ).match( /(?:\\.(\\d+))?$/ );\n\t\t\t\t\tif ( !match ) {\n\t\t\t\t\t\treturn 0;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Number of digits right of decimal point.\n\t\t\t\t\treturn match[ 1 ] ? match[ 1 ].length : 0;\n\t\t\t\t},\n\t\t\t\ttoInt = function( num ) {\n\t\t\t\t\treturn Math.round( num * Math.pow( 10, decimals ) );\n\t\t\t\t},\n\t\t\t\tvalid = true,\n\t\t\t\tdecimals;\n\n\t\t\t// Works only for text, number and range input types\n\t\t\t// TODO find a way to support input types date, datetime, datetime-local, month, time and week\n\t\t\tif ( notSupported ) {\n\t\t\t\tthrow new Error( errorMessage );\n\t\t\t}\n\n\t\t\tdecimals = decimalPlaces( param );\n\n\t\t\t// Value can't have too many decimals\n\t\t\tif ( decimalPlaces( value ) > decimals || toInt( value ) % toInt( param ) !== 0 ) {\n\t\t\t\tvalid = false;\n\t\t\t}\n\n\t\t\treturn this.optional( element ) || valid;\n\t\t},\n\n\t\t// https://jqueryvalidation.org/equalTo-method/\n\t\tequalTo: function( value, element, param ) {\n\n\t\t\t// Bind to the blur event of the target in order to revalidate whenever the target field is updated\n\t\t\tvar target = $( param );\n\t\t\tif ( this.settings.onfocusout && target.not( \".validate-equalTo-blur\" ).length ) {\n\t\t\t\ttarget.addClass( \"validate-equalTo-blur\" ).on( \"blur.validate-equalTo\", function() {\n\t\t\t\t\t$( element ).valid();\n\t\t\t\t} );\n\t\t\t}\n\t\t\treturn value === target.val();\n\t\t},\n\n\t\t// https://jqueryvalidation.org/remote-method/\n\t\tremote: function( value, element, param, method ) {\n\t\t\tif ( this.optional( element ) ) {\n\t\t\t\treturn \"dependency-mismatch\";\n\t\t\t}\n\n\t\t\tmethod = typeof method === \"string\" && method || \"remote\";\n\n\t\t\tvar previous = this.previousValue( element, method ),\n\t\t\t\tvalidator, data, optionDataString;\n\n\t\t\tif ( !this.settings.messages[ element.name ] ) {\n\t\t\t\tthis.settings.messages[ element.name ] = {};\n\t\t\t}\n\t\t\tprevious.originalMessage = previous.originalMessage || this.settings.messages[ element.name ][ method ];\n\t\t\tthis.settings.messages[ element.name ][ method ] = previous.message;\n\n\t\t\tparam = typeof param === \"string\" && { url: param } || param;\n\t\t\toptionDataString = $.param( $.extend( { data: value }, param.data ) );\n\t\t\tif ( previous.old === optionDataString ) {\n\t\t\t\treturn previous.valid;\n\t\t\t}\n\n\t\t\tprevious.old = optionDataString;\n\t\t\tvalidator = this;\n\t\t\tthis.startRequest( element );\n\t\t\tdata = {};\n\t\t\tdata[ element.name ] = value;\n\t\t\t$.ajax( $.extend( true, {\n\t\t\t\tmode: \"abort\",\n\t\t\t\tport: this.elementAjaxPort( element ),\n\t\t\t\tdataType: \"json\",\n\t\t\t\tdata: data,\n\t\t\t\tcontext: validator.currentForm,\n\t\t\t\tsuccess: function( response ) {\n\t\t\t\t\tvar valid = response === true || response === \"true\",\n\t\t\t\t\t\terrors, message, submitted;\n\n\t\t\t\t\tvalidator.settings.messages[ element.name ][ method ] = previous.originalMessage;\n\t\t\t\t\tif ( valid ) {\n\t\t\t\t\t\tsubmitted = validator.formSubmitted;\n\t\t\t\t\t\tvalidator.toHide = validator.errorsFor( element );\n\t\t\t\t\t\tvalidator.formSubmitted = submitted;\n\t\t\t\t\t\tvalidator.successList.push( element );\n\t\t\t\t\t\tvalidator.invalid[ element.name ] = false;\n\t\t\t\t\t\tvalidator.showErrors();\n\t\t\t\t\t} else {\n\t\t\t\t\t\terrors = {};\n\t\t\t\t\t\tmessage = response || validator.defaultMessage( element, { method: method, parameters: value } );\n\t\t\t\t\t\terrors[ element.name ] = previous.message = message;\n\t\t\t\t\t\tvalidator.invalid[ element.name ] = true;\n\t\t\t\t\t\tvalidator.showErrors( errors );\n\t\t\t\t\t}\n\t\t\t\t\tprevious.valid = valid;\n\t\t\t\t\tvalidator.stopRequest( element, valid );\n\t\t\t\t}\n\t\t\t}, param ) );\n\t\t\treturn \"pending\";\n\t\t}\n\t}\n\n} );\n\n// Ajax mode: abort\n// usage: $.ajax({ mode: \"abort\"[, port: \"uniqueport\"]});\n// $.ajaxAbort( port );\n// if mode:\"abort\" is used, the previous request on that port (port can be undefined) is aborted via XMLHttpRequest.abort()\n\nvar pendingRequests = {},\n\tajax;\n\n// Use a prefilter if available (1.5+)\nif ( $.ajaxPrefilter ) {\n\t$.ajaxPrefilter( function( settings, _, xhr ) {\n\t\tvar port = settings.port;\n\t\tif ( settings.mode === \"abort\" ) {\n\t\t\t$.ajaxAbort( port );\n\t\t\tpendingRequests[ port ] = xhr;\n\t\t}\n\t} );\n} else {\n\n\t// Proxy ajax\n\tajax = $.ajax;\n\t$.ajax = function( settings ) {\n\t\tvar mode = ( \"mode\" in settings ? settings : $.ajaxSettings ).mode,\n\t\t\tport = ( \"port\" in settings ? settings : $.ajaxSettings ).port;\n\t\tif ( mode === \"abort\" ) {\n\t\t\t$.ajaxAbort( port );\n\t\t\tpendingRequests[ port ] = ajax.apply( this, arguments );\n\t\t\treturn pendingRequests[ port ];\n\t\t}\n\t\treturn ajax.apply( this, arguments );\n\t};\n}\n\n// Abort the previous request without sending a new one\n$.ajaxAbort = function( port ) {\n\tif ( pendingRequests[ port ] ) {\n\t\tpendingRequests[ port ].abort();\n\t\tdelete pendingRequests[ port ];\n\t}\n};\nreturn $;\n}));"],"sourceRoot":""}