{"version":3,"sources":["wwwroot/scripts/vendor/jquery.validate.js","wwwroot/scripts/vendor/jquery.validate.unobtrusive.bootstrap.js","wwwroot/scripts/vendor/jquery.validate.unobtrusive.js","wwwroot/scripts/vendor/expressive.annotations.validate.js"],"names":["factory","define","amd","module","exports","require","jQuery","$","called","extend","fn","validate","options","this","length","validator","data","attr","settings","onsubmit","on","event","submitButton","currentTarget","hasClass","cancelSubmit","undefined","handle","hidden","result","submitHandler","formSubmitted","name","val","appendTo","currentForm","debug","call","remove","preventDefault","form","pendingRequest","focusInvalid","window","console","warn","valid","errorList","is","each","element","concat","rules","command","argument","staticRules","existingRules","param","filtered","isContentEditable","closest","normalizeRule","messages","split","index","method","normalizeRules","classRules","attributeRules","dataRules","required","remote","expr","pseudos","blank","a","trim","filled","unchecked","prop","defaults","init","format","source","params","arguments","args","makeArray","unshift","apply","constructor","Array","slice","i","n","replace","RegExp","groups","errorClass","pendingClass","validClass","errorElement","focusCleanup","errorContainer","errorLabelContainer","ignore","ignoreTitle","onfocusin","lastActive","unhighlight","hideThese","errorsFor","onfocusout","checkable","submitted","optional","onkeyup","which","elementValue","inArray","keyCode","invalid","onclick","parentNode","highlight","type","findByName","addClass","removeClass","setDefaults","email","url","date","dateISO","number","digits","equalTo","maxlength","minlength","rangelength","range","max","min","step","autoCreateRanges","prototype","labelContainer","errorContext","containers","add","valueCache","pending","reset","delegate","eventType","key","value","invalidHandler","checkForm","errorMap","triggerHandler","showErrors","prepareForm","elements","currentElements","check","rs","group","cleanElement","clean","checkElement","validationTargetFor","v","prepareElement","testgroup","push","numberOfInvalids","toHide","errors","map","message","successList","grep","defaultShowErrors","resetForm","hideErrors","removeData","removeAttr","resetElements","objectLength","obj","count","not","text","addWrapper","hide","size","findLastActive","filter","trigger","e","rulesCache","find","error","selector","join","resetInternals","toShow","idx","$element","validity","badInput","substr","lastIndexOf","rule","normalizer","rulesCount","dependencyMismatch","parameters","methods","formatAndAdd","log","id","TypeError","customDataMessage","charAt","toUpperCase","substring","toLowerCase","customMessage","m","String","findDefined","defaultMessage","title","theregex","test","toToggle","wrapper","parent","showLabel","success","validElements","show","invalidElements","place","errorID","elementID","idOrName","describedBy","html","wrap","append","errorPlacement","insertAfter","parents","escapeCssMeta","match","describer","string","getLength","nodeName","depend","dependTypes","boolean","function","startRequest","stopRequest","submit","previousValue","old","destroy","off","classRuleSettings","creditcard","addClassRules","className","classes","normalizeAttributeRule","Number","isNaN","getAttribute","depends","keepRule","parameter","isFunction","parts","isArray","transformed","addMethod","Date","toString","decimals","errorMessage","re","decimalPlaces","num","toInt","Math","round","pow","Error","target","optionDataString","previous","originalMessage","ajax","mode","port","dataType","context","response","pendingRequests","ajaxPrefilter","_","xhr","abort","ajaxSettings","escapeAttributeValue","addErrorClass","onError","formElement","errorPlacementBase","inputElement","validateBootstrap","refresh","$this","unobtrusive","parse","successBase","container","onSuccess","newElement","document","createElement","adapters","$jQval","data_validation","setValidationValues","ruleName","getModelPrefix","fieldName","appendModelPrefix","prefix","indexOf","onReset","$form","validationInfo","onResetProxy","proxy","defaultOptions","execInContext","func","replaceAttrValue","parseJSON","empty","list","attachValidation","parseElement","skipAttach","valInfo","paramValues","adapt","__dummy__","$selector","$forms","addBack","has","info","adapterName","addBool","addMinMax","minRuleName","maxRuleName","minMaxRuleName","minAttribute","maxAttribute","addSingleVal","attribute","exec","nonalphamin","extension","fullOtherName","other","tagName","splitAndTrim","additionalfields","paramName","field","regex","extensions","backup","ea","buffer","api","optimize","enumsAsNumbers","registerAllMethods","dependencyTriggers","hasOwnProperty","typeHelper","isBool","isString","verifySetup","validationHelper","bindFields","logger","toolchain","addValueParser","noConflict","prep","fail","lines","tryParse","fline","datetime","stamp","shift","indent","registerMethods","model","essentialMethods","body","initialize","that","now","setHours","getTime","dateString","year","month","day","setFullYear","hour","minute","second","days","hours","minutes","seconds","str","strA","strB","strC","CompareOrdinal","StartsWith","suffix","EndsWith","Contains","guid","msg","values","l","sum","parseFloat","arr","Sum","parsers","parser","array","contains","item","object","keys","ex","makeParam","replacer","isObject","JSON","stringify","applyParam","spaces","bool","isNumeric","isFinite","timespan","isTimeSpan","sign","d","milliseconds","pad","getHours","getMinutes","getSeconds","isDate","millisec","isGuid","enumeration","Object","Boolean","parseFunc","findValueParser","tryAutoParse","modelHelper","getPrefix","extractValue","rawValue","parsedValue","getValue","deserializeObject","fieldsMap","constsMap","enumsMap","parsersMap","buildField","fieldValue","props","arrayIndex","arrayName","arrayPat","endMatch","pop","adjustGivenValue","checked","ctxEval","exp","ctx","Function","referencesMap","collectReferences","fields","refField","validateReferences","referencedFields","force","namespacedEvents","bound","buildAdapter","adapter","errFieldsMap","annotations","methodsList","expression","exprVal","condition","computeAssertThat","allowEmpty","computeRequiredIf"],"mappings":"CAQA,SAAAA,GACA,mBAAAC,QAAAA,OAAAC,IACAD,QAAA,UAAAD,GACA,iBAAAG,QAAAA,OAAAC,QACAD,OAAAC,QAAAJ,EAAAK,QAAA,WAEAL,EAAAM,QANA,CAQA,SAAAC,GAq4CA,IACAC,EAp4CAD,EAAAE,OAAAF,EAAAG,IAGAC,SAAA,SAAAC,GAGA,GAAAC,KAAAC,OAAA,CAQA,IAAAC,EAAAR,EAAAS,KAAAH,KAAA,GAAA,aACA,OAAAE,IAKAF,KAAAI,KAAA,aAAA,cAEAF,EAAA,IAAAR,EAAAQ,UAAAH,EAAAC,KAAA,IACAN,EAAAS,KAAAH,KAAA,GAAA,YAAAE,GAEAA,EAAAG,SAAAC,WAEAN,KAAAO,GAAA,iBAAA,UAAA,SAAAC,GAIAN,EAAAO,aAAAD,EAAAE,cAGAhB,EAAAM,MAAAW,SAAA,YACAT,EAAAU,cAAA,QAIAC,IAAAnB,EAAAM,MAAAI,KAAA,oBACAF,EAAAU,cAAA,KAKAZ,KAAAO,GAAA,kBAAA,SAAAC,GAOA,SAAAM,IACA,IAAAC,EAAAC,EAcA,OAPAd,EAAAO,eAAAP,EAAAG,SAAAY,eAAAf,EAAAgB,iBACAH,EAAArB,EAAA,0BACAU,KAAA,OAAAF,EAAAO,aAAAU,MACAC,IAAA1B,EAAAQ,EAAAO,cAAAW,OACAC,SAAAnB,EAAAoB,gBAGApB,EAAAG,SAAAY,gBAAAf,EAAAG,SAAAkB,SACAP,EAAAd,EAAAG,SAAAY,cAAAO,KAAAtB,EAAAA,EAAAoB,YAAAd,GACAO,GAGAA,EAAAU,cAEAZ,IAAAG,GACAA,GAQA,OArCAd,EAAAG,SAAAkB,OAGAf,EAAAkB,iBAkCAxB,EAAAU,cACAV,EAAAU,cAAA,EACAE,KAEAZ,EAAAyB,OACAzB,EAAA0B,gBACA1B,EAAAgB,eAAA,GACA,GAEAJ,KAEAZ,EAAA2B,gBACA,MAKA3B,GA7FAH,GAAAA,EAAAwB,OAAAO,OAAAC,SACAA,QAAAC,KAAA,yDAgGAC,MAAA,WACA,IAAAA,EAAA/B,EAAAgC,EAgBA,OAdAxC,EAAAM,KAAA,IAAAmC,GAAA,QACAF,EAAAjC,KAAAF,WAAA6B,QAEAO,KACAD,GAAA,EACA/B,EAAAR,EAAAM,KAAA,GAAA2B,MAAA7B,WACAE,KAAAoC,KAAA,YACAH,EAAA/B,EAAAmC,QAAArC,OAAAiC,KAEAC,EAAAA,EAAAI,OAAApC,EAAAgC,cAGAhC,EAAAgC,UAAAA,GAEAD,GAIAM,MAAA,SAAAC,EAAAC,GACA,IAEApC,EAAAqC,EAAAC,EAAAxC,EAAAyC,EAAAC,EAFAR,EAAArC,KAAA,GACA8C,OAAA,IAAA9C,KAAAI,KAAA,oBAAA,UAAAJ,KAAAI,KAAA,mBAIA,GAAA,MAAAiC,KAIAA,EAAAV,MAAAmB,IACAT,EAAAV,KAAA3B,KAAA+C,QAAA,QAAA,GACAV,EAAAlB,KAAAnB,KAAAI,KAAA,SAGA,MAAAiC,EAAAV,MAAA,CAIA,GAAAa,EAIA,OAFAE,GADArC,EAAAX,EAAAS,KAAAkC,EAAAV,KAAA,aAAAtB,UACAkC,MACAI,EAAAjD,EAAAQ,UAAAwC,YAAAL,GACAG,GACA,IAAA,MACA9C,EAAAE,OAAA+C,EAAAjD,EAAAQ,UAAA8C,cAAAP,WAGAE,EAAAM,SACAP,EAAAL,EAAAlB,MAAAwB,EACAF,EAAAQ,WACA5C,EAAA4C,SAAAZ,EAAAlB,MAAAzB,EAAAE,OAAAS,EAAA4C,SAAAZ,EAAAlB,MAAAsB,EAAAQ,WAEA,MACA,IAAA,SACA,OAAAR,GAIAI,KACAnD,EAAA0C,KAAAK,EAAAS,MAAA,MAAA,SAAAC,EAAAC,GACAP,EAAAO,GAAAT,EAAAS,UACAT,EAAAS,KAEAP,WARAH,EAAAL,EAAAlB,MACAwB,GAkCA,OAvBAxC,EAAAT,EAAAQ,UAAAmD,eACA3D,EAAAE,UAEAF,EAAAQ,UAAAoD,WAAAjB,GACA3C,EAAAQ,UAAAqD,eAAAlB,GACA3C,EAAAQ,UAAAsD,UAAAnB,GACA3C,EAAAQ,UAAAwC,YAAAL,IACAA,IAGAoB,WACAb,EAAAzC,EAAAsD,gBACAtD,EAAAsD,SACAtD,EAAAT,EAAAE,QAAA6D,SAAAb,GAAAzC,IAIAA,EAAAuD,SACAd,EAAAzC,EAAAuD,cACAvD,EAAAuD,OACAvD,EAAAT,EAAAE,OAAAO,GAAAuD,OAAAd,KAGAzC,MAKAT,EAAAE,OAAAF,EAAAiE,KAAAC,SAAAlE,EAAAiE,KAAA,MAGAE,MAAA,SAAAC,GACA,OAAApE,EAAAqE,KAAA,GAAArE,EAAAoE,GAAA1C,QAIA4C,OAAA,SAAAF,GACA,IAAA1C,EAAA1B,EAAAoE,GAAA1C,MACA,OAAA,OAAAA,KAAA1B,EAAAqE,KAAA,GAAA3C,IAIA6C,UAAA,SAAAH,GACA,OAAApE,EAAAoE,GAAAI,KAAA,cAKAxE,EAAAQ,UAAA,SAAAH,EAAA4B,GACA3B,KAAAK,SAAAX,EAAAE,QAAA,KAAAF,EAAAQ,UAAAiE,SAAApE,GACAC,KAAAsB,YAAAK,EACA3B,KAAAoE,QAIA1E,EAAAQ,UAAAmE,OAAA,SAAAC,EAAAC,GACA,OAAA,IAAAC,UAAAvE,OACA,WACA,IAAAwE,EAAA/E,EAAAgF,UAAAF,WAEA,OADAC,EAAAE,QAAAL,GACA5E,EAAAQ,UAAAmE,OAAAO,MAAA5E,KAAAyE,SAGA5D,IAAA0D,EACAD,GAEAE,UAAAvE,OAAA,GAAAsE,EAAAM,cAAAC,QACAP,EAAA7E,EAAAgF,UAAAF,WAAAO,MAAA,IAEAR,EAAAM,cAAAC,QACAP,GAAAA,IAEA7E,EAAA0C,KAAAmC,EAAA,SAAAS,EAAAC,GACAX,EAAAA,EAAAY,QAAA,IAAAC,OAAA,MAAAH,EAAA,MAAA,KAAA,WACA,OAAAC,MAGAX,IAGA5E,EAAAE,OAAAF,EAAAQ,WAEAiE,UACAlB,YACAmC,UACA7C,SACA8C,WAAA,QACAC,aAAA,UACAC,WAAA,QACAC,aAAA,QACAC,cAAA,EACA5D,cAAA,EACA6D,eAAAhG,MACAiG,oBAAAjG,MACAY,UAAA,EACAsF,OAAA,UACAC,aAAA,EACAC,UAAA,SAAAzD,GACArC,KAAA+F,WAAA1D,EAGArC,KAAAK,SAAAoF,eACAzF,KAAAK,SAAA2F,aACAhG,KAAAK,SAAA2F,YAAAxE,KAAAxB,KAAAqC,EAAArC,KAAAK,SAAAgF,WAAArF,KAAAK,SAAAkF,YAEAvF,KAAAiG,UAAAjG,KAAAkG,UAAA7D,MAGA8D,WAAA,SAAA9D,GACArC,KAAAoG,UAAA/D,MAAAA,EAAAlB,QAAAnB,KAAAqG,YAAArG,KAAAsG,SAAAjE,IACArC,KAAAqC,QAAAA,IAGAkE,QAAA,SAAAlE,EAAA7B,GAqBA,IAAAA,EAAAgG,OAAA,KAAAxG,KAAAyG,aAAApE,KAAA,IAAA3C,EAAAgH,QAAAlG,EAAAmG,SAJA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GACA,GAAA,GAAA,GAAA,GAAA,IAAA,QAKAtE,EAAAlB,QAAAnB,KAAAqG,WAAAhE,EAAAlB,QAAAnB,KAAA4G,UACA5G,KAAAqC,QAAAA,IAGAwE,QAAA,SAAAxE,GAGAA,EAAAlB,QAAAnB,KAAAqG,UACArG,KAAAqC,QAAAA,GAGAA,EAAAyE,WAAA3F,QAAAnB,KAAAqG,WACArG,KAAAqC,QAAAA,EAAAyE,aAGAC,UAAA,SAAA1E,EAAAgD,EAAAE,GACA,UAAAlD,EAAA2E,KACAhH,KAAAiH,WAAA5E,EAAAlB,MAAA+F,SAAA7B,GAAA8B,YAAA5B,GAEA7F,EAAA2C,GAAA6E,SAAA7B,GAAA8B,YAAA5B,IAGAS,YAAA,SAAA3D,EAAAgD,EAAAE,GACA,UAAAlD,EAAA2E,KACAhH,KAAAiH,WAAA5E,EAAAlB,MAAAgG,YAAA9B,GAAA6B,SAAA3B,GAEA7F,EAAA2C,GAAA8E,YAAA9B,GAAA6B,SAAA3B,KAMA6B,YAAA,SAAA/G,GACAX,EAAAE,OAAAF,EAAAQ,UAAAiE,SAAA9D,IAGA4C,UACAQ,SAAA,0BACAC,OAAA,yBACA2D,MAAA,sCACAC,IAAA,4BACAC,KAAA,6BACAC,QAAA,mCACAC,OAAA,+BACAC,OAAA,4BACAC,QAAA,qCACAC,UAAAlI,EAAAQ,UAAAmE,OAAA,6CACAwD,UAAAnI,EAAAQ,UAAAmE,OAAA,yCACAyD,YAAApI,EAAAQ,UAAAmE,OAAA,6DACA0D,MAAArI,EAAAQ,UAAAmE,OAAA,6CACA2D,IAAAtI,EAAAQ,UAAAmE,OAAA,mDACA4D,IAAAvI,EAAAQ,UAAAmE,OAAA,sDACA6D,KAAAxI,EAAAQ,UAAAmE,OAAA,oCAGA8D,kBAAA,EAEAC,WAEAhE,KAAA,WACApE,KAAAqI,eAAA3I,EAAAM,KAAAK,SAAAsF,qBACA3F,KAAAsI,aAAAtI,KAAAqI,eAAApI,QAAAD,KAAAqI,gBAAA3I,EAAAM,KAAAsB,aACAtB,KAAAuI,WAAA7I,EAAAM,KAAAK,SAAAqF,gBAAA8C,IAAAxI,KAAAK,SAAAsF,qBACA3F,KAAAqG,aACArG,KAAAyI,cACAzI,KAAA4B,eAAA,EACA5B,KAAA0I,WACA1I,KAAA4G,WACA5G,KAAA2I,QAEA,IAEApG,EAFAjB,EAAAtB,KAAAsB,YACA8D,EAAApF,KAAAoF,UAeA,SAAAwD,EAAApI,GACA,IAAAsC,OAAA,IAAApD,EAAAM,MAAAI,KAAA,oBAAA,UAAAV,EAAAM,MAAAI,KAAA,mBAUA,IAPAJ,KAAA2B,MAAAmB,IACA9C,KAAA2B,KAAAjC,EAAAM,MAAA+C,QAAA,QAAA,GACA/C,KAAAmB,KAAAzB,EAAAM,MAAAI,KAAA,SAKAkB,IAAAtB,KAAA2B,KAAA,CAIA,IAAAzB,EAAAR,EAAAS,KAAAH,KAAA2B,KAAA,aACAkH,EAAA,KAAArI,EAAAwG,KAAA9B,QAAA,YAAA,IACA7E,EAAAH,EAAAG,SACAA,EAAAwI,KAAAnJ,EAAAM,MAAAmC,GAAA9B,EAAAuF,SACAvF,EAAAwI,GAAArH,KAAAtB,EAAAF,KAAAQ,IAhCAd,EAAA0C,KAAApC,KAAAK,SAAA+E,OAAA,SAAA0D,EAAAC,GACA,iBAAAA,IACAA,EAAAA,EAAA7F,MAAA,OAEAxD,EAAA0C,KAAA2G,EAAA,SAAA5F,EAAAhC,GACAiE,EAAAjE,GAAA2H,MAGAvG,EAAAvC,KAAAK,SAAAkC,MACA7C,EAAA0C,KAAAG,EAAA,SAAAuG,EAAAC,GACAxG,EAAAuG,GAAApJ,EAAAQ,UAAA8C,cAAA+F,KA0BArJ,EAAAM,KAAAsB,aACAf,GAAA,oDACA,0VAGAqI,GAIArI,GAAA,iBAAA,oDAAAqI,GAEA5I,KAAAK,SAAA2I,gBACAtJ,EAAAM,KAAAsB,aAAAf,GAAA,wBAAAP,KAAAK,SAAA2I,iBAKArH,KAAA,WAQA,OAPA3B,KAAAiJ,YACAvJ,EAAAE,OAAAI,KAAAqG,UAAArG,KAAAkJ,UACAlJ,KAAA4G,QAAAlH,EAAAE,UAAAI,KAAAkJ,UACAlJ,KAAAiC,SACAvC,EAAAM,KAAAsB,aAAA6H,eAAA,gBAAAnJ,OAEAA,KAAAoJ,aACApJ,KAAAiC,SAGAgH,UAAA,WACAjJ,KAAAqJ,cACA,IAAA,IAAArE,EAAA,EAAAsE,EAAAtJ,KAAAuJ,gBAAAvJ,KAAAsJ,WAAAA,EAAAtE,GAAAA,IACAhF,KAAAwJ,MAAAF,EAAAtE,IAEA,OAAAhF,KAAAiC,SAIAI,QAAA,SAAAA,GACA,IAIAoH,EAAAC,EAJAC,EAAA3J,KAAA4J,MAAAvH,GACAwH,EAAA7J,KAAA8J,oBAAAH,GACAI,EAAA/J,KACAgB,GAAA,EA2CA,YAxCAH,IAAAgJ,SACA7J,KAAA4G,QAAA+C,EAAAxI,OAEAnB,KAAAgK,eAAAH,GACA7J,KAAAuJ,gBAAA7J,EAAAmK,IAIAH,EAAA1J,KAAAoF,OAAAyE,EAAA1I,QAEAzB,EAAA0C,KAAApC,KAAAoF,OAAA,SAAAjE,EAAA8I,GACAA,IAAAP,GAAAvI,IAAA0I,EAAA1I,OACAwI,EAAAI,EAAAD,oBAAAC,EAAAH,MAAAG,EAAA9C,WAAA9F,OACAwI,EAAAxI,QAAA4I,EAAAnD,UACAmD,EAAAR,gBAAAW,KAAAP,GACA3I,EAAA+I,EAAAP,MAAAG,IAAA3I,KAMAyI,GAAA,IAAAzJ,KAAAwJ,MAAAK,GACA7I,EAAAA,GAAAyI,EAEAzJ,KAAA4G,QAAAiD,EAAA1I,OADAsI,EAMAzJ,KAAAmK,qBAGAnK,KAAAoK,OAAApK,KAAAoK,OAAA5B,IAAAxI,KAAAuI,aAEAvI,KAAAoJ,aAGA1J,EAAA2C,GAAAjC,KAAA,gBAAAqJ,IAGAzI,GAIAoI,WAAA,SAAAiB,GACA,GAAAA,EAAA,CACA,IAAAnK,EAAAF,KAGAN,EAAAE,OAAAI,KAAAkJ,SAAAmB,GACArK,KAAAkC,UAAAxC,EAAA4K,IAAAtK,KAAAkJ,SAAA,SAAAqB,EAAApJ,GACA,OACAoJ,QAAAA,EACAlI,QAAAnC,EAAA+G,WAAA9F,GAAA,MAKAnB,KAAAwK,YAAA9K,EAAA+K,KAAAzK,KAAAwK,YAAA,SAAAnI,GACA,QAAAA,EAAAlB,QAAAkJ,KAGArK,KAAAK,SAAA+I,WACApJ,KAAAK,SAAA+I,WAAA5H,KAAAxB,KAAAA,KAAAkJ,SAAAlJ,KAAAkC,WAEAlC,KAAA0K,qBAKAC,UAAA,WACAjL,EAAAG,GAAA8K,WACAjL,EAAAM,KAAAsB,aAAAqJ,YAEA3K,KAAA4G,WACA5G,KAAAqG,aACArG,KAAAqJ,cACArJ,KAAA4K,aACA,IAAAtB,EAAAtJ,KAAAsJ,WACAuB,WAAA,iBACAC,WAAA,gBAEA9K,KAAA+K,cAAAzB,IAGAyB,cAAA,SAAAzB,GACA,IAAAtE,EAEA,GAAAhF,KAAAK,SAAA2F,YACA,IAAAhB,EAAA,EAAAsE,EAAAtE,GAAAA,IACAhF,KAAAK,SAAA2F,YAAAxE,KAAAxB,KAAAsJ,EAAAtE,GACAhF,KAAAK,SAAAgF,WAAA,IACArF,KAAAiH,WAAAqC,EAAAtE,GAAA7D,MAAAgG,YAAAnH,KAAAK,SAAAkF,iBAGA+D,EACAnC,YAAAnH,KAAAK,SAAAgF,YACA8B,YAAAnH,KAAAK,SAAAkF,aAIA4E,iBAAA,WACA,OAAAnK,KAAAgL,aAAAhL,KAAA4G,UAGAoE,aAAA,SAAAC,GAEA,IACAjG,EADAkG,EAAA,EAEA,IAAAlG,KAAAiG,OAIApK,IAAAoK,EAAAjG,IAAA,OAAAiG,EAAAjG,KAAA,IAAAiG,EAAAjG,IACAkG,IAGA,OAAAA,GAGAN,WAAA,WACA5K,KAAAiG,UAAAjG,KAAAoK,SAGAnE,UAAA,SAAAoE,GACAA,EAAAc,IAAAnL,KAAAuI,YAAA6C,KAAA,IACApL,KAAAqL,WAAAhB,GAAAiB,QAGArJ,MAAA,WACA,OAAA,IAAAjC,KAAAuL,QAGAA,KAAA,WACA,OAAAvL,KAAAkC,UAAAjC,QAGA4B,aAAA,WACA,GAAA7B,KAAAK,SAAAwB,aACA,IACAnC,EAAAM,KAAAwL,kBAAAxL,KAAAkC,UAAAjC,QAAAD,KAAAkC,UAAA,GAAAG,aACAoJ,OAAA,YACAC,QAAA,SAGAA,QAAA,WACA,MAAAC,MAOAH,eAAA,WACA,IAAAzF,EAAA/F,KAAA+F,WACA,OAAAA,GAEA,IAFArG,EAAA+K,KAAAzK,KAAAkC,UAAA,SAAA+C,GACA,OAAAA,EAAA5C,QAAAlB,OAAA4E,EAAA5E,OACAlB,QAAA8F,GAGAuD,SAAA,WACA,IAAApJ,EAAAF,KACA4L,KAGA,OAAAlM,EAAAM,KAAAsB,aACAuK,KAAA,8CACAV,IAAA,sCACAA,IAAAnL,KAAAK,SAAAuF,QACA6F,OAAA,WACA,IAAAtK,EAAAnB,KAAAmB,MAAAzB,EAAAM,MAAAI,KAAA,QACA0C,OAAA,IAAApD,EAAAM,MAAAI,KAAA,oBAAA,UAAAV,EAAAM,MAAAI,KAAA,mBAaA,OAXAe,GAAAjB,EAAAG,SAAAkB,OAAAO,OAAAC,SACAA,QAAA+J,MAAA,0BAAA9L,MAIA8C,IACA9C,KAAA2B,KAAAjC,EAAAM,MAAA+C,QAAA,QAAA,GACA/C,KAAAmB,KAAAA,GAIAnB,KAAA2B,OAAAzB,EAAAoB,gBAKAH,KAAAyK,IAAA1L,EAAA8K,aAAAtL,EAAAM,MAAAuC,YAIAqJ,EAAAzK,IAAA,GACA,OAIAyI,MAAA,SAAAmC,GACA,OAAArM,EAAAqM,GAAA,IAGA1B,OAAA,WACA,IAAAhF,EAAArF,KAAAK,SAAAgF,WAAAnC,MAAA,KAAA8I,KAAA,KACA,OAAAtM,EAAAM,KAAAK,SAAAmF,aAAA,IAAAH,EAAArF,KAAAsI,eAGA2D,eAAA,WACAjM,KAAAwK,eACAxK,KAAAkC,aACAlC,KAAAkJ,YACAlJ,KAAAkM,OAAAxM,MACAM,KAAAoK,OAAA1K,OAGAiJ,MAAA,WACA3I,KAAAiM,iBACAjM,KAAAuJ,gBAAA7J,OAGA2J,YAAA,WACArJ,KAAA2I,QACA3I,KAAAoK,OAAApK,KAAAqK,SAAA7B,IAAAxI,KAAAuI,aAGAyB,eAAA,SAAA3H,GACArC,KAAA2I,QACA3I,KAAAoK,OAAApK,KAAAkG,UAAA7D,IAGAoE,aAAA,SAAApE,GACA,IAGAjB,EAAA+K,EAHAC,EAAA1M,EAAA2C,GACA2E,EAAA3E,EAAA2E,KACAlE,OAAA,IAAAsJ,EAAAhM,KAAA,oBAAA,UAAAgM,EAAAhM,KAAA,mBAGA,MAAA,UAAA4G,GAAA,aAAAA,EACAhH,KAAAiH,WAAA5E,EAAAlB,MAAAsK,OAAA,YAAArK,MACA,WAAA4F,QAAA,IAAA3E,EAAAgK,SACAhK,EAAAgK,SAAAC,SAAA,MAAAF,EAAAhL,OAIAA,EADA0B,EACAsJ,EAAAhB,OAEAgB,EAAAhL,MAGA,SAAA4F,EAGA,mBAAA5F,EAAAmL,OAAA,EAAA,IACAnL,EAAAmL,OAAA,KAKAJ,EAAA/K,EAAAoL,YAAA,OACA,EACApL,EAAAmL,OAAAJ,EAAA,IAIAA,EAAA/K,EAAAoL,YAAA,QACA,EACApL,EAAAmL,OAAAJ,EAAA,GAIA/K,EAGA,iBAAAA,EACAA,EAAA8D,QAAA,MAAA,IAEA9D,IAGAoI,MAAA,SAAAnH,GACAA,EAAArC,KAAA8J,oBAAA9J,KAAA4J,MAAAvH,IAEA,IAMArB,EAAAoC,EAAAqJ,EAAAC,EANAnK,EAAA7C,EAAA2C,GAAAE,QACAoK,EAAAjN,EAAA4K,IAAA/H,EAAA,SAAA0C,EAAAD,GACA,OAAAA,IACA/E,OACA2M,GAAA,EACAxL,EAAApB,KAAAyG,aAAApE,GAqBA,IAAAe,IAhBA,mBAAAb,EAAAmK,WACAA,EAAAnK,EAAAmK,WACA,mBAAA1M,KAAAK,SAAAqM,aACAA,EAAA1M,KAAAK,SAAAqM,YAMAA,IACAtL,EAAAsL,EAAAlL,KAAAa,EAAAjB,UAGAmB,EAAAmK,YAGAnK,EAAA,CACAkK,GAAArJ,OAAAA,EAAAyJ,WAAAtK,EAAAa,IACA,IAKA,GAAA,yBAJApC,EAAAtB,EAAAQ,UAAA4M,QAAA1J,GAAA5B,KAAAxB,KAAAoB,EAAAiB,EAAAoK,EAAAI,cAIA,IAAAF,EAAA,CACAC,GAAA,EACA,SAIA,GAFAA,GAAA,EAEA,YAAA5L,EAEA,YADAhB,KAAAoK,OAAApK,KAAAoK,OAAAe,IAAAnL,KAAAkG,UAAA7D,KAIA,IAAArB,EAEA,OADAhB,KAAA+M,aAAA1K,EAAAoK,IACA,EAEA,MAAAd,GAQA,MAPA3L,KAAAK,SAAAkB,OAAAO,OAAAC,SACAA,QAAAiL,IAAA,4CAAA3K,EAAA4K,GAAA,gBAAAR,EAAArJ,OAAA,YAAAuI,GAEAA,aAAAuB,YACAvB,EAAApB,SAAA,+CAAAlI,EAAA4K,GAAA,gBAAAR,EAAArJ,OAAA,aAGAuI,GAGA,IAAAiB,EAMA,OAHA5M,KAAAgL,aAAAzI,IACAvC,KAAAwK,YAAAN,KAAA7H,IAEA,GAMA8K,kBAAA,SAAA9K,EAAAe,GACA,OAAA1D,EAAA2C,GAAAlC,KAAA,MAAAiD,EAAAgK,OAAA,GAAAC,cACAjK,EAAAkK,UAAA,GAAAC,gBAAA7N,EAAA2C,GAAAlC,KAAA,QAIAqN,cAAA,SAAArM,EAAAiC,GACA,IAAAqK,EAAAzN,KAAAK,SAAA4C,SAAA9B,GACA,OAAAsM,IAAAA,EAAA5I,cAAA6I,OAAAD,EAAAA,EAAArK,KAIAuK,YAAA,WACA,IAAA,IAAA3I,EAAA,EAAAA,EAAAR,UAAAvE,OAAA+E,IACA,QAAAnE,IAAA2D,UAAAQ,GACA,OAAAR,UAAAQ,IAeA4I,eAAA,SAAAvL,EAAAoK,GACA,iBAAAA,IACAA,GAAArJ,OAAAqJ,IAGA,IAAAlC,EAAAvK,KAAA2N,YACA3N,KAAAwN,cAAAnL,EAAAlB,KAAAsL,EAAArJ,QACApD,KAAAmN,kBAAA9K,EAAAoK,EAAArJ,SAGApD,KAAAK,SAAAwF,aAAAxD,EAAAwL,YAAAhN,EACAnB,EAAAQ,UAAA+C,SAAAwJ,EAAArJ,QACA,2CAAAf,EAAAlB,KAAA,aAEA2M,EAAA,gBAOA,MANA,mBAAAvD,EACAA,EAAAA,EAAA/I,KAAAxB,KAAAyM,EAAAI,WAAAxK,GACAyL,EAAAC,KAAAxD,KACAA,EAAA7K,EAAAQ,UAAAmE,OAAAkG,EAAArF,QAAA4I,EAAA,QAAArB,EAAAI,aAGAtC,GAGAwC,aAAA,SAAA1K,EAAAoK,GACA,IAAAlC,EAAAvK,KAAA4N,eAAAvL,EAAAoK,GAEAzM,KAAAkC,UAAAgI,MACAK,QAAAA,EACAlI,QAAAA,EACAe,OAAAqJ,EAAArJ,SAGApD,KAAAkJ,SAAA7G,EAAAlB,MAAAoJ,EACAvK,KAAAqG,UAAAhE,EAAAlB,MAAAoJ,GAGAc,WAAA,SAAA2C,GAIA,OAHAhO,KAAAK,SAAA4N,UACAD,EAAAA,EAAAxF,IAAAwF,EAAAE,OAAAlO,KAAAK,SAAA4N,WAEAD,GAGAtD,kBAAA,WACA,IAAA1F,EAAAsE,EAAAwC,EACA,IAAA9G,EAAA,EAAAhF,KAAAkC,UAAA8C,GAAAA,IACA8G,EAAA9L,KAAAkC,UAAA8C,GACAhF,KAAAK,SAAA0G,WACA/G,KAAAK,SAAA0G,UAAAvF,KAAAxB,KAAA8L,EAAAzJ,QAAArC,KAAAK,SAAAgF,WAAArF,KAAAK,SAAAkF,YAEAvF,KAAAmO,UAAArC,EAAAzJ,QAAAyJ,EAAAvB,SAKA,GAHAvK,KAAAkC,UAAAjC,SACAD,KAAAkM,OAAAlM,KAAAkM,OAAA1D,IAAAxI,KAAAuI,aAEAvI,KAAAK,SAAA+N,QACA,IAAApJ,EAAA,EAAAhF,KAAAwK,YAAAxF,GAAAA,IACAhF,KAAAmO,UAAAnO,KAAAwK,YAAAxF,IAGA,GAAAhF,KAAAK,SAAA2F,YACA,IAAAhB,EAAA,EAAAsE,EAAAtJ,KAAAqO,gBAAA/E,EAAAtE,GAAAA,IACAhF,KAAAK,SAAA2F,YAAAxE,KAAAxB,KAAAsJ,EAAAtE,GAAAhF,KAAAK,SAAAgF,WAAArF,KAAAK,SAAAkF,YAGAvF,KAAAoK,OAAApK,KAAAoK,OAAAe,IAAAnL,KAAAkM,QACAlM,KAAA4K,aACA5K,KAAAqL,WAAArL,KAAAkM,QAAAoC,QAGAD,cAAA,WACA,OAAArO,KAAAuJ,gBAAA4B,IAAAnL,KAAAuO,oBAGAA,gBAAA,WACA,OAAA7O,EAAAM,KAAAkC,WAAAoI,IAAA,WACA,OAAAtK,KAAAqC,WAIA8L,UAAA,SAAA9L,EAAAkI,GACA,IAAAiE,EAAA9E,EAAA+E,EAAA1E,EACA+B,EAAA9L,KAAAkG,UAAA7D,GACAqM,EAAA1O,KAAA2O,SAAAtM,GACAuM,EAAAlP,EAAA2C,GAAAjC,KAAA,oBAEA0L,EAAA7L,QAGA6L,EAAA3E,YAAAnH,KAAAK,SAAAkF,YAAA2B,SAAAlH,KAAAK,SAAAgF,YAGAyG,EAAA+C,KAAAtE,KAUAiE,EANA1C,EAAApM,EAAA,IAAAM,KAAAK,SAAAmF,aAAA,KACApF,KAAA,KAAAsO,EAAA,UACAxH,SAAAlH,KAAAK,SAAAgF,YACAwJ,KAAAtE,GAAA,IAIAvK,KAAAK,SAAA4N,UAIAO,EAAA1C,EAAAR,OAAAgD,OAAAQ,KAAA,IAAA9O,KAAAK,SAAA4N,QAAA,MAAAC,UAEAlO,KAAAqI,eAAApI,OACAD,KAAAqI,eAAA0G,OAAAP,GACAxO,KAAAK,SAAA2O,eACAhP,KAAAK,SAAA2O,eAAAxN,KAAAxB,KAAAwO,EAAA9O,EAAA2C,IAEAmM,EAAAS,YAAA5M,GAIAyJ,EAAA3J,GAAA,SAGA2J,EAAA1L,KAAA,MAAAsO,GAIA,IAAA5C,EAAAoD,QAAA,cAAAlP,KAAAmP,cAAAT,GAAA,MAAAzO,SACAwO,EAAA3C,EAAA1L,KAAA,MAGAwO,EAEAA,EAAAQ,MAAA,IAAAjK,OAAA,MAAAnF,KAAAmP,cAAAV,GAAA,UAGAG,GAAA,IAAAH,GAJAG,EAAAH,EAMA/O,EAAA2C,GAAAjC,KAAA,mBAAAwO,IAGAlF,EAAA1J,KAAAoF,OAAA/C,EAAAlB,SAEA4I,EAAA/J,KACAN,EAAA0C,KAAA2H,EAAA3E,OAAA,SAAAjE,EAAA8I,GACAA,IAAAP,GACAhK,EAAA,UAAAqK,EAAAoF,cAAAhO,GAAA,KAAA4I,EAAAzI,aACAlB,KAAA,mBAAA0L,EAAA1L,KAAA,aAMAmK,GAAAvK,KAAAK,SAAA+N,UACAtC,EAAAV,KAAA,IACA,iBAAApL,KAAAK,SAAA+N,QACAtC,EAAA5E,SAAAlH,KAAAK,SAAA+N,SAEApO,KAAAK,SAAA+N,QAAAtC,EAAAzJ,IAGArC,KAAAkM,OAAAlM,KAAAkM,OAAA1D,IAAAsD,IAGA5F,UAAA,SAAA7D,GACA,IAAAlB,EAAAnB,KAAAmP,cAAAnP,KAAA2O,SAAAtM,IACAgN,EAAA3P,EAAA2C,GAAAjC,KAAA,oBACA2L,EAAA,cAAA5K,EAAA,kBAAAA,EAAA,OAQA,OALAkO,IACAtD,EAAAA,EAAA,MAAA/L,KAAAmP,cAAAE,GACAnK,QAAA,OAAA,QAGAlF,KACAqK,SACAoB,OAAAM,IAMAoD,cAAA,SAAAG,GACA,OAAAA,EAAApK,QAAA,yCAAA,SAGAyJ,SAAA,SAAAtM,GACA,OAAArC,KAAAoF,OAAA/C,EAAAlB,QAAAnB,KAAAoG,UAAA/D,GAAAA,EAAAlB,KAAAkB,EAAA4K,IAAA5K,EAAAlB,OAGA2I,oBAAA,SAAAzH,GAQA,OALArC,KAAAoG,UAAA/D,KACAA,EAAArC,KAAAiH,WAAA5E,EAAAlB,OAIAzB,EAAA2C,GAAA8I,IAAAnL,KAAAK,SAAAuF,QAAA,IAGAQ,UAAA,SAAA/D,GACA,MAAA,kBAAA0L,KAAA1L,EAAA2E,OAGAC,WAAA,SAAA9F,GACA,OAAAzB,EAAAM,KAAAsB,aAAAuK,KAAA,UAAA7L,KAAAmP,cAAAhO,GAAA,OAGAoO,UAAA,SAAAxG,EAAA1G,GACA,OAAAA,EAAAmN,SAAAjC,eACA,IAAA,SACA,OAAA7N,EAAA,kBAAA2C,GAAApC,OACA,IAAA,QACA,GAAAD,KAAAoG,UAAA/D,GACA,OAAArC,KAAAiH,WAAA5E,EAAAlB,MAAAsK,OAAA,YAAAxL,OAGA,OAAA8I,EAAA9I,QAGAwP,OAAA,SAAA7M,EAAAP,GACA,OAAArC,KAAA0P,mBAAA9M,IAAA5C,KAAA0P,mBAAA9M,GAAAA,EAAAP,IAGAqN,aACAC,QAAA,SAAA/M,GACA,OAAAA,GAEA0M,OAAA,SAAA1M,EAAAP,GACA,QAAA3C,EAAAkD,EAAAP,EAAAV,MAAA1B,QAEA2P,SAAA,SAAAhN,EAAAP,GACA,OAAAO,EAAAP,KAIAiE,SAAA,SAAAjE,GACA,IAAAjB,EAAApB,KAAAyG,aAAApE,GACA,OAAA3C,EAAAQ,UAAA4M,QAAArJ,SAAAjC,KAAAxB,KAAAoB,EAAAiB,IAAA,uBAGAwN,aAAA,SAAAxN,GACArC,KAAA0I,QAAArG,EAAAlB,QACAnB,KAAA4B,iBACAlC,EAAA2C,GAAA6E,SAAAlH,KAAAK,SAAAiF,cACAtF,KAAA0I,QAAArG,EAAAlB,OAAA,IAIA2O,YAAA,SAAAzN,EAAAJ,GACAjC,KAAA4B,iBAGA5B,KAAA4B,eAAA,IACA5B,KAAA4B,eAAA,UAEA5B,KAAA0I,QAAArG,EAAAlB,MACAzB,EAAA2C,GAAA8E,YAAAnH,KAAAK,SAAAiF,cACArD,GAAA,IAAAjC,KAAA4B,gBAAA5B,KAAAkB,eAAAlB,KAAA2B,QACAjC,EAAAM,KAAAsB,aAAAyO,SAMA/P,KAAAS,cACAf,EAAA,sBAAAM,KAAAS,aAAAU,KAAA,KAAAnB,KAAAsB,aAAAG,SAGAzB,KAAAkB,eAAA,IACAe,GAAA,IAAAjC,KAAA4B,gBAAA5B,KAAAkB,gBACAxB,EAAAM,KAAAsB,aAAA6H,eAAA,gBAAAnJ,OACAA,KAAAkB,eAAA,IAIA8O,cAAA,SAAA3N,EAAAe,GAGA,OAFAA,EAAA,iBAAAA,GAAAA,GAAA,SAEA1D,EAAAS,KAAAkC,EAAA,kBAAA3C,EAAAS,KAAAkC,EAAA,iBACA4N,IAAA,KACAhO,OAAA,EACAsI,QAAAvK,KAAA4N,eAAAvL,GAAAe,OAAAA,OAKA8M,QAAA,WACAlQ,KAAA2K,YAEAjL,EAAAM,KAAAsB,aACA6O,IAAA,aACAtF,WAAA,aACAgB,KAAA,0BACAsE,IAAA,qBACAhJ,YAAA,yBACA0E,KAAA,2BACAsE,IAAA,sBACAhJ,YAAA,0BACA0E,KAAA,gCACAsE,IAAA,2BACAhJ,YAAA,+BACA0E,KAAA,mCACAsE,IAAA,8BACAhJ,YAAA,kCACA0E,KAAA,8BACAsE,IAAA,yBACAhJ,YAAA,+BAKAiJ,mBACA3M,UAAAA,UAAA,GACA4D,OAAAA,OAAA,GACAC,KAAAA,KAAA,GACAC,MAAAA,MAAA,GACAC,SAAAA,SAAA,GACAC,QAAAA,QAAA,GACAC,QAAAA,QAAA,GACA2I,YAAAA,YAAA,IAGAC,cAAA,SAAAC,EAAAhO,GACAgO,EAAA1L,cAAA6I,OACA1N,KAAAoQ,kBAAAG,GAAAhO,EAEA7C,EAAAE,OAAAI,KAAAoQ,kBAAAG,IAIAjN,WAAA,SAAAjB,GACA,IAAAE,KACAiO,EAAA9Q,EAAA2C,GAAAjC,KAAA,SASA,OAPAoQ,GACA9Q,EAAA0C,KAAAoO,EAAAtN,MAAA,KAAA,WACAlD,QAAAN,EAAAQ,UAAAkQ,mBACA1Q,EAAAE,OAAA2C,EAAA7C,EAAAQ,UAAAkQ,kBAAApQ,SAIAuC,GAGAkO,uBAAA,SAAAlO,EAAAyE,EAAA5D,EAAA2F,GAIA,eAAAgF,KAAA3K,KAAA,OAAA4D,GAAA,oBAAA+G,KAAA/G,MACA+B,EAAA2H,OAAA3H,GAGA4H,MAAA5H,KACAA,OAAAlI,IAIAkI,GAAA,IAAAA,EACAxG,EAAAa,GAAA2F,EACA/B,IAAA5D,GAAA,UAAA4D,IAIAzE,EAAAa,IAAA,IAIAG,eAAA,SAAAlB,GACA,IAGAe,EAAA2F,EAHAxG,KACA6J,EAAA1M,EAAA2C,GACA2E,EAAA3E,EAAAuO,aAAA,QAGA,IAAAxN,KAAA1D,EAAAQ,UAAA4M,QAGA,aAAA1J,GAKA,MAJA2F,EAAA1G,EAAAuO,aAAAxN,MAKA2F,GAAA,GAIAA,IAAAA,GAEAA,EAAAqD,EAAAhM,KAAAgD,GAGApD,KAAAyQ,uBAAAlO,EAAAyE,EAAA5D,EAAA2F,GAQA,OAJAxG,EAAAqF,WAAA,uBAAAmG,KAAAxL,EAAAqF,mBACArF,EAAAqF,UAGArF,GAGAiB,UAAA,SAAAnB,GACA,IAGAe,EAAA2F,EAHAxG,KACA6J,EAAA1M,EAAA2C,GACA2E,EAAA3E,EAAAuO,aAAA,QAGA,IAAAxN,KAAA1D,EAAAQ,UAAA4M,QAIA,MAHA/D,EAAAqD,EAAAjM,KAAA,OAAAiD,EAAAgK,OAAA,GAAAC,cAAAjK,EAAAkK,UAAA,GAAAC,kBAIAxE,GAAA,GAGA/I,KAAAyQ,uBAAAlO,EAAAyE,EAAA5D,EAAA2F,GAEA,OAAAxG,GAGAG,YAAA,SAAAL,GACA,IAAAE,KACArC,EAAAR,EAAAS,KAAAkC,EAAAV,KAAA,aAKA,OAHAzB,EAAAG,SAAAkC,QACAA,EAAA7C,EAAAQ,UAAA8C,cAAA9C,EAAAG,SAAAkC,MAAAF,EAAAlB,YAEAoB,GAGAc,eAAA,SAAAd,EAAAF,GAmEA,OAhEA3C,EAAA0C,KAAAG,EAAA,SAAA2B,EAAA9C,GAGA,IAAA,IAAAA,GAIA,GAAAA,EAAAwB,OAAAxB,EAAAyP,QAAA,CACA,IAAAC,GAAA,EACA,cAAA1P,EAAAyP,SACA,IAAA,SACAC,IAAApR,EAAA0B,EAAAyP,QAAAxO,EAAAV,MAAA1B,OACA,MACA,IAAA,WACA6Q,EAAA1P,EAAAyP,QAAArP,KAAAa,EAAAA,GAGAyO,EACAvO,EAAA2B,QAAArD,IAAAO,EAAAwB,OAAAxB,EAAAwB,OAEAlD,EAAAS,KAAAkC,EAAAV,KAAA,aAAAoJ,cAAArL,EAAA2C,WACAE,EAAA2B,iBAjBA3B,EAAA2B,KAuBAxE,EAAA0C,KAAAG,EAAA,SAAAkK,EAAAsE,GACAxO,EAAAkK,GAAA/M,EAAAsR,WAAAD,IAAA,eAAAtE,EAAAsE,EAAA1O,GAAA0O,IAIArR,EAAA0C,MAAA,YAAA,aAAA,WACAG,EAAAvC,QACAuC,EAAAvC,MAAA0Q,OAAAnO,EAAAvC,UAGAN,EAAA0C,MAAA,cAAA,SAAA,WACA,IAAA6O,EACA1O,EAAAvC,QACAN,EAAAwR,QAAA3O,EAAAvC,OACAuC,EAAAvC,OAAA0Q,OAAAnO,EAAAvC,MAAA,IAAA0Q,OAAAnO,EAAAvC,MAAA,KACA,iBAAAuC,EAAAvC,QACAiR,EAAA1O,EAAAvC,MAAAkF,QAAA,UAAA,IAAAhC,MAAA,UACAX,EAAAvC,OAAA0Q,OAAAO,EAAA,IAAAP,OAAAO,EAAA,SAKAvR,EAAAQ,UAAAiI,mBAGA,MAAA5F,EAAA0F,KAAA,MAAA1F,EAAAyF,MACAzF,EAAAwF,OAAAxF,EAAA0F,IAAA1F,EAAAyF,YACAzF,EAAA0F,WACA1F,EAAAyF,KAEA,MAAAzF,EAAAsF,WAAA,MAAAtF,EAAAqF,YACArF,EAAAuF,aAAAvF,EAAAsF,UAAAtF,EAAAqF,kBACArF,EAAAsF,iBACAtF,EAAAqF,YAIArF,GAIAS,cAAA,SAAA7C,GACA,GAAA,iBAAAA,EAAA,CACA,IAAAgR,KACAzR,EAAA0C,KAAAjC,EAAA+C,MAAA,MAAA,WACAiO,EAAAnR,OAAA,IAEAG,EAAAgR,EAEA,OAAAhR,GAIAiR,UAAA,SAAAjQ,EAAAiC,EAAAmH,GACA7K,EAAAQ,UAAA4M,QAAA3L,GAAAiC,EACA1D,EAAAQ,UAAA+C,SAAA9B,QAAAN,IAAA0J,EAAAA,EAAA7K,EAAAQ,UAAA+C,SAAA9B,GACAiC,EAAAnD,OAAA,GACAP,EAAAQ,UAAAoQ,cAAAnP,EAAAzB,EAAAQ,UAAA8C,cAAA7B,KAKA2L,SAGArJ,SAAA,SAAAsF,EAAA1G,EAAAO,GAGA,IAAA5C,KAAAyP,OAAA7M,EAAAP,GACA,MAAA,sBAEA,GAAA,WAAAA,EAAAmN,SAAAjC,cAAA,CAGA,IAAAnM,EAAA1B,EAAA2C,GAAAjB,MACA,OAAAA,GAAAA,EAAAnB,OAAA,EAEA,OAAAD,KAAAoG,UAAA/D,GACArC,KAAAuP,UAAAxG,EAAA1G,GAAA,OAEAxB,IAAAkI,GAAA,OAAAA,GAAAA,EAAA9I,OAAA,GAIAoH,MAAA,SAAA0B,EAAA1G,GAMA,OAAArC,KAAAsG,SAAAjE,IAAA,wIAAA0L,KAAAhF,IAIAzB,IAAA,SAAAyB,EAAA1G,GAMA,OAAArC,KAAAsG,SAAAjE,IAAA,2cAAA0L,KAAAhF,IAIAxB,MACA5H,GAAA,EAEA,SAAAoJ,EAAA1G,GAcA,OAbA1C,IACAA,GAAA,EACAK,KAAAK,SAAAkB,OAAAO,OAAAC,SACAA,QAAAC,KACA,uTASAhC,KAAAsG,SAAAjE,KAAA,cAAA0L,KAAA,IAAAsD,KAAAtI,GAAAuI,cAKA9J,QAAA,SAAAuB,EAAA1G,GACA,OAAArC,KAAAsG,SAAAjE,IAAA,+DAAA0L,KAAAhF,IAIAtB,OAAA,SAAAsB,EAAA1G,GACA,OAAArC,KAAAsG,SAAAjE,IAAA,8CAAA0L,KAAAhF,IAIArB,OAAA,SAAAqB,EAAA1G,GACA,OAAArC,KAAAsG,SAAAjE,IAAA,QAAA0L,KAAAhF,IAIAlB,UAAA,SAAAkB,EAAA1G,EAAAO,GACA,IAAA3C,EAAAP,EAAAwR,QAAAnI,GAAAA,EAAA9I,OAAAD,KAAAuP,UAAAxG,EAAA1G,GACA,OAAArC,KAAAsG,SAAAjE,IAAApC,GAAA2C,GAIAgF,UAAA,SAAAmB,EAAA1G,EAAAO,GACA,IAAA3C,EAAAP,EAAAwR,QAAAnI,GAAAA,EAAA9I,OAAAD,KAAAuP,UAAAxG,EAAA1G,GACA,OAAArC,KAAAsG,SAAAjE,IAAApC,GAAA2C,GAIAkF,YAAA,SAAAiB,EAAA1G,EAAAO,GACA,IAAA3C,EAAAP,EAAAwR,QAAAnI,GAAAA,EAAA9I,OAAAD,KAAAuP,UAAAxG,EAAA1G,GACA,OAAArC,KAAAsG,SAAAjE,IAAApC,GAAA2C,EAAA,IAAA3C,GAAA2C,EAAA,IAIAqF,IAAA,SAAAc,EAAA1G,EAAAO,GACA,OAAA5C,KAAAsG,SAAAjE,IAAA0G,GAAAnG,GAIAoF,IAAA,SAAAe,EAAA1G,EAAAO,GACA,OAAA5C,KAAAsG,SAAAjE,IAAA0G,GAAAnG,GAIAmF,MAAA,SAAAgB,EAAA1G,EAAAO,GACA,OAAA5C,KAAAsG,SAAAjE,IAAA0G,GAAAnG,EAAA,IAAAmG,GAAAnG,EAAA,IAIAsF,KAAA,SAAAa,EAAA1G,EAAAO,GACA,IAkBA2O,EAlBAvK,EAAAtH,EAAA2C,GAAAjC,KAAA,QACAoR,EAAA,gCAAAxK,EAAA,qBAEAyK,EAAA,IAAAtM,OAAA,MAAA6B,EAAA,OAEA0K,EAAA,SAAAC,GACA,IAAAvC,GAAA,GAAAuC,GAAAvC,MAAA,iBACA,OAAAA,GAKAA,EAAA,GAAAA,EAAA,GAAAnP,OAJA,GAMA2R,EAAA,SAAAD,GACA,OAAAE,KAAAC,MAAAH,EAAAE,KAAAE,IAAA,GAAAR,KAEAtP,GAAA,EAKA,GAlBA+E,IAAAyK,EAAA1D,MAFA,OAAA,SAAA,SAEA/B,QAmBA,MAAA,IAAAgG,MAAAR,GAUA,OAPAD,EAAAG,EAAA9O,IAGA8O,EAAA3I,GAAAwI,GAAAK,EAAA7I,GAAA6I,EAAAhP,IAAA,KACAX,GAAA,GAGAjC,KAAAsG,SAAAjE,IAAAJ,GAIA0F,QAAA,SAAAoB,EAAA1G,EAAAO,GAGA,IAAAqP,EAAAvS,EAAAkD,GAMA,OALA5C,KAAAK,SAAA8F,YAAA8L,EAAA9G,IAAA,0BAAAlL,QACAgS,EAAA/K,SAAA,yBAAA3G,GAAA,wBAAA,WACAb,EAAA2C,GAAAJ,UAGA8G,IAAAkJ,EAAA7Q,OAIAsC,OAAA,SAAAqF,EAAA1G,EAAAO,EAAAQ,GACA,GAAApD,KAAAsG,SAAAjE,GACA,MAAA,sBAGAe,EAAA,iBAAAA,GAAAA,GAAA,SAEA,IACAlD,EAAAC,EAAA+R,EADAC,EAAAnS,KAAAgQ,cAAA3N,EAAAe,GAWA,OARApD,KAAAK,SAAA4C,SAAAZ,EAAAlB,QACAnB,KAAAK,SAAA4C,SAAAZ,EAAAlB,UAEAgR,EAAAC,gBAAAD,EAAAC,iBAAApS,KAAAK,SAAA4C,SAAAZ,EAAAlB,MAAAiC,GACApD,KAAAK,SAAA4C,SAAAZ,EAAAlB,MAAAiC,GAAA+O,EAAA5H,QAEA3H,EAAA,iBAAAA,IAAA0E,IAAA1E,IAAAA,EACAsP,EAAAxS,EAAAkD,MAAAlD,EAAAE,QAAAO,KAAA4I,GAAAnG,EAAAzC,OACAgS,EAAAlC,MAAAiC,EACAC,EAAAlQ,OAGAkQ,EAAAlC,IAAAiC,EACAhS,EAAAF,KACAA,KAAA6P,aAAAxN,IACAlC,MACAkC,EAAAlB,MAAA4H,EACArJ,EAAA2S,KAAA3S,EAAAE,QAAA,GACA0S,KAAA,QACAC,KAAA,WAAAlQ,EAAAlB,KACAqR,SAAA,OACArS,KAAAA,EACAsS,QAAAvS,EAAAoB,YACA8M,QAAA,SAAAsE,GACA,IACArI,EAAAE,EAAAlE,EADApE,GAAA,IAAAyQ,GAAA,SAAAA,EAGAxS,EAAAG,SAAA4C,SAAAZ,EAAAlB,MAAAiC,GAAA+O,EAAAC,gBACAnQ,GACAoE,EAAAnG,EAAAgB,cACAhB,EAAA+L,iBACA/L,EAAAkK,OAAAlK,EAAAgG,UAAA7D,GACAnC,EAAAgB,cAAAmF,EACAnG,EAAAsK,YAAAN,KAAA7H,GACAnC,EAAA0G,QAAAvE,EAAAlB,OAAA,EACAjB,EAAAkJ,eAEAiB,KACAE,EAAAmI,GAAAxS,EAAA0N,eAAAvL,GAAAe,OAAAA,EAAAyJ,WAAA9D,IACAsB,EAAAhI,EAAAlB,MAAAgR,EAAA5H,QAAAA,EACArK,EAAA0G,QAAAvE,EAAAlB,OAAA,EACAjB,EAAAkJ,WAAAiB,IAEA8H,EAAAlQ,MAAAA,EACA/B,EAAA4P,YAAAzN,EAAAJ,KAEAW,IACA,eAUA,IACAyP,EADAM,KA+BA,OA3BAjT,EAAAkT,cACAlT,EAAAkT,cAAA,SAAAvS,EAAAwS,EAAAC,GACA,IAAAP,EAAAlS,EAAAkS,KACA,UAAAlS,EAAAiS,OACAK,EAAAJ,IACAI,EAAAJ,GAAAQ,QAEAJ,EAAAJ,GAAAO,MAMAT,EAAA3S,EAAA2S,KACA3S,EAAA2S,KAAA,SAAAhS,GACA,IAAAiS,GAAA,SAAAjS,EAAAA,EAAAX,EAAAsT,cAAAV,KACAC,GAAA,SAAAlS,EAAAA,EAAAX,EAAAsT,cAAAT,KACA,MAAA,UAAAD,GACAK,EAAAJ,IACAI,EAAAJ,GAAAQ,QAEAJ,EAAAJ,GAAAF,EAAAzN,MAAA5E,KAAAwE,WACAmO,EAAAJ,IAEAF,EAAAzN,MAAA5E,KAAAwE,aAGA9E,ICtmDA,SAAAA,GAEA,SAAAuT,EAAAlK,GAGA,OAAAA,EAAA7D,QAAA,yCAAA,QAGA,SAAAgO,EAAA7Q,GAEA,IAAAqH,EAAArH,EAAAU,QAAA,eACA2G,GAAAA,EAAAzJ,OAAA,GAEAyJ,EAAAxC,SAAA,aAAAC,YAAA,eAaA,SAAAgM,EAAAC,EAAAC,EAAAvH,EAAAwH,GAEAD,EAAAvH,EAAAwH,GAEA5T,EAAA4T,GAAA3S,SAAA,2BAEAuS,EAAAI,GAgBA5T,EAAAG,GAAA0T,kBAAA,SAAAC,GAEA,OAAAxT,KAAAoC,KAAA,WAEA,IAAAqR,EAAA/T,EAAAM,MACAwT,IAEAC,EAAA5I,WAAA,aACA4I,EAAA5I,WAAA,yBACAnL,EAAAQ,UAAAwT,YAAAC,MAAAF,IAGA,IAAAvT,EAAAuT,EAAAtT,KAAA,aAEA,GAAAD,EACA,CACAA,EAAAG,SAAAgF,YAAA,eACA,IAAAgO,EAAAnT,EAAAG,SAAA2O,eACA4E,EAAA1T,EAAAG,SAAA+N,QAEAlO,EAAAG,SAAA2O,eAAA,SAAAlD,EAAAwH,GAEAH,EAAAM,EAAAJ,EAAAvH,EAAAwH,IAGApT,EAAAG,SAAA+N,QAAA,SAAAtC,IArCA,SAAA8H,EAAA9H,GAEA,IAnBApC,EAmBAmK,EAAA/H,EAAA3L,KAAA,wBAEAyT,EAAA9H,GAEA+H,IAvBAnK,EAyBAmK,EAzBA9Q,QAAA,iBACA2G,EAAAzJ,OAAA,GAEAyJ,EAAAxC,SAAA,eAAAC,YAAA,aAqDA2M,CAAAF,EAAA9H,IAGA2H,EAAA5H,KAAA,2BAAAzJ,KAAA,WAEA,IAAAoD,EAAAiO,EAAA5H,KAAA,qBAAAoH,EAAAvT,EAAAM,MAAA,GAAAmB,MAAA,MACA4S,EAAArU,EAAAsU,SAAAC,cAAA/T,EAAAG,SAAAmF,eACA0B,SAAA,eACA9G,KAAA,MAAA6S,EAAAvT,EAAAM,MAAA,GAAAmB,OACAiK,KAAA5F,EAAA4F,QACA+H,EAAAM,EAAAJ,EAAAU,EAAArU,EAAAM,cAMAyT,EAAA5H,KAAA,2BAAAzJ,KAAA,WAEA8Q,EAAAxT,EAAAM,YAMAN,EAAA,WAEAA,EAAA,QAAA6T,sBArGA,CAwGA9T,QCvGA,SAAAN,GACA,mBAAAC,QAAAA,OAAAC,IAEAD,OAAA,+BAAA,qBAAAD,GACA,iBAAAG,QAAAA,OAAAC,QAEAD,OAAAC,QAAAJ,EAAAK,QAAA,sBAGAC,OAAAS,UAAAwT,YAAAvU,EAAAM,QATA,CAWA,SAAAC,GACA,IACAwU,EADAC,EAAAzU,EAAAQ,UAEAkU,EAAA,wBAEA,SAAAC,EAAAtU,EAAAuU,EAAAvL,GACAhJ,EAAAwC,MAAA+R,GAAAvL,EACAhJ,EAAAwK,UACAxK,EAAAkD,SAAAqR,GAAAvU,EAAAwK,SAQA,SAAA0I,EAAAlK,GAEA,OAAAA,EAAA7D,QAAA,yCAAA,QAGA,SAAAqP,EAAAC,GACA,OAAAA,EAAAjI,OAAA,EAAAiI,EAAAhI,YAAA,KAAA,GAGA,SAAAiI,EAAA1L,EAAA2L,GAIA,OAHA,IAAA3L,EAAA4L,QAAA,QACA5L,EAAAA,EAAA7D,QAAA,KAAAwP,IAEA3L,EAkDA,SAAA6L,EAAApU,GACA,IAAAqU,EAAAnV,EAAAM,MACA8I,EAAA,6CACA,IAAA+L,EAAA1U,KAAA2I,GAAA,CAIA+L,EAAA1U,KAAA2I,GAAA,GACA,IACA+L,EAAA1U,KAAA,aAAAwK,YACA,QACAkK,EAAAhK,WAAA/B,GAGA+L,EAAAhJ,KAAA,8BACA3E,SAAA,4BACAC,YAAA,6BACA0N,EAAAhJ,KAAA,2BACA3E,SAAA,0BACAC,YAAA,0BACA0D,WAAA,wBACAgB,KAAA,MACAhB,WAAA,yBAGA,SAAAiK,EAAAnT,GACA,IAAAkT,EAAAnV,EAAAiC,GACAX,EAAA6T,EAAA1U,KAAAiU,GACAW,EAAArV,EAAAsV,MAAAJ,EAAAjT,GACAsT,EAAAd,EAAAT,YAAA3T,YACAmV,EAAA,SAAA/T,EAAAsD,GACA,IAAA0Q,EAAAF,EAAA9T,GACAgU,GAAAzV,EAAAsR,WAAAmE,IAAAA,EAAAvQ,MAAAjD,EAAA8C,IAqCA,OAlCAzD,IACAA,GACAjB,SACAsF,WAAA4P,EAAA5P,YAAA,yBACAG,aAAAyP,EAAAzP,cAAA,OACAwJ,eAAA,YAvFA,SAAAlD,EAAAwH,GACA,IAAAO,EAAAnU,EAAAM,MAAA6L,KAAA,qBAAAoH,EAAAK,EAAA,GAAAnS,MAAA,MACAiU,EAAAvB,EAAAzT,KAAA,uBACA8E,EAAAkQ,GAAA,IAAA1V,EAAA2V,UAAAD,GAAA,KAEAvB,EAAA1M,YAAA,0BAAAD,SAAA,0BACA4E,EAAA3L,KAAA,uBAAA0T,GAEA3O,GACA2O,EAAAyB,QACAxJ,EAAA3E,YAAA,0BAAA9F,SAAAwS,IAGA/H,EAAAR,SA2EA1G,MAAAjD,EAAA6C,WACA0Q,EAAA,iBAAA1Q,YAEAwE,eAAA,YA1EA,SAAAxI,EAAAN,GACA,IAAA2T,EAAAnU,EAAAM,MAAA6L,KAAA,8BACA0J,EAAA1B,EAAAhI,KAAA,MAEA0J,GAAAA,EAAAtV,QAAAC,EAAAgC,UAAAjC,SACAsV,EAAAD,QACAzB,EAAA3M,SAAA,6BAAAC,YAAA,4BAEAzH,EAAA0C,KAAAlC,EAAAgC,UAAA,WACAxC,EAAA,UAAAmP,KAAA7O,KAAAuK,SAAAlJ,SAAAkU,QAkEA3Q,MAAAjD,EAAA6C,WACA0Q,EAAA,iBAAA1Q,YAEAvB,YACAV,SACA6L,QAAA,YAlEA,SAAAtC,GACA,IAAA+H,EAAA/H,EAAA3L,KAAA,wBAEA,GAAA0T,EAAA,CACA,IAAAuB,EAAAvB,EAAAzT,KAAA,uBACA8E,EAAAkQ,EAAA1V,EAAA2V,UAAAD,GAAA,KAEAvB,EAAA3M,SAAA,0BAAAC,YAAA,0BACA2E,EAAAjB,WAAA,wBAEA3F,GACA2O,EAAAyB,WAwDA1Q,MAAAjD,EAAA6C,WACA0Q,EAAA,UAAA1Q,aAGAgR,iBAAA,WACAX,EACA1E,IAAA,SAAAiE,EAAAW,GACAxU,GAAA,SAAA6T,EAAAW,GACAjV,SAAAE,KAAAD,UAEAD,SAAA,WAEA,OADA+U,EAAA/U,WACA+U,EAAA5S,UAGA4S,EAAA1U,KAAAiU,EAAApT,IAGAA,EAuQA,OApQAmT,EAAAT,aACAQ,YAEAuB,aAAA,SAAApT,EAAAqT,GASA,IAEAC,EAAApT,EAAAU,EAFAmJ,EAAA1M,EAAA2C,GACAV,EAAAyK,EAAA8C,QAAA,QAAA,GAGAvN,KAIAgU,EAAAb,EAAAnT,IACA5B,QAAAwC,MAAAF,EAAAlB,MAAAoB,KACAoT,EAAA5V,QAAAkD,SAAAZ,EAAAlB,MAAA8B,KAEAvD,EAAA0C,KAAApC,KAAAkU,SAAA,WACA,IAAAQ,EAAA,YAAA1U,KAAAmB,KACAoJ,EAAA6B,EAAAhM,KAAAsU,GACAkB,UAEA/U,IAAA0J,IACAmK,GAAA,IAEAhV,EAAA0C,KAAApC,KAAAuE,OAAA,WACAqR,EAAA5V,MAAAoM,EAAAhM,KAAAsU,EAAA1U,QAGAA,KAAA6V,OACAxT,QAAAA,EACAV,KAAAA,EACA4I,QAAAA,EACAhG,OAAAqR,EACArT,MAAAA,EACAU,SAAAA,OAKAvD,EAAAE,OAAA2C,GAAAuT,WAAA,IAEAJ,GACAC,EAAAH,qBAIA7B,MAAA,SAAA5H,GAUA,IAAAgK,EAAArW,EAAAqM,GACAiK,EAAAD,EAAA7G,UACA+G,UACAxK,OAAA,QACAjD,IAAAuN,EAAAlK,KAAA,SACAqK,IAAA,mBAEAH,EAAAlK,KAAA,mBAAAzJ,KAAA,WACA+R,EAAAT,YAAA+B,aAAAzV,MAAA,KAGAgW,EAAA5T,KAAA,WACA,IAAA+T,EAAArB,EAAA9U,MACAmW,GACAA,EAAAX,wBAMAtB,EAAAC,EAAAT,YAAAQ,UAEA1L,IAAA,SAAA4N,EAAA7R,EAAA1E,GAeA,OALAA,IACAA,EAAA0E,EACAA,MAEAvE,KAAAkK,MAAA/I,KAAAiV,EAAA7R,OAAAA,EAAAsR,MAAAhW,IACAG,MAGAkU,EAAAmC,QAAA,SAAAD,EAAA9B,GAQA,OAAAtU,KAAAwI,IAAA4N,EAAA,SAAArW,GACAsU,EAAAtU,EAAAuU,GAAA8B,GAAA,MAIAlC,EAAAoC,UAAA,SAAAF,EAAAG,EAAAC,EAAAC,EAAAC,EAAAC,GAiBA,OAAA3W,KAAAwI,IAAA4N,GAAAM,GAAA,MAAAC,GAAA,OAAA,SAAA5W,GACA,IAAAkI,EAAAlI,EAAAwE,OAAA0D,IACAD,EAAAjI,EAAAwE,OAAAyD,IAEAC,GAAAD,EACAqM,EAAAtU,EAAA0W,GAAAxO,EAAAD,IAEAC,EACAoM,EAAAtU,EAAAwW,EAAAtO,GAEAD,GACAqM,EAAAtU,EAAAyW,EAAAxO,MAKAkM,EAAA0C,aAAA,SAAAR,EAAAS,EAAAvC,GAUA,OAAAtU,KAAAwI,IAAA4N,GAAAS,GAAA,OAAA,SAAA9W,GACAsU,EAAAtU,EAAAuU,GAAA8B,EAAArW,EAAAwE,OAAAsS,OAIA1C,EAAA/C,UAAA,YAAA,SAAArI,EAAA1G,EAAAkC,GACA,OAAA,IAGA4P,EAAA/C,UAAA,QAAA,SAAArI,EAAA1G,EAAAkC,GACA,IAAA6K,EACA,QAAApP,KAAAsG,SAAAjE,KAIA+M,EAAA,IAAAjK,OAAAZ,GAAAuS,KAAA/N,KACA,IAAAqG,EAAAjM,OAAAiM,EAAA,GAAAnP,SAAA8I,EAAA9I,SAGAkU,EAAA/C,UAAA,cAAA,SAAArI,EAAA1G,EAAA0U,GACA,IAAA3H,EAKA,OAJA2H,IAEA3H,GADAA,EAAArG,EAAAqG,MAAA,SACAA,EAAAnP,QAAA8W,GAEA3H,IAGA+E,EAAArH,QAAAkK,WACA9C,EAAA0C,aAAA,SAAA,WACA1C,EAAA0C,aAAA,YAAA,cAKA1C,EAAA0C,aAAA,YAAA,YAAA,UAGA1C,EAAA0C,aAAA,QAAA,WACA1C,EAAAmC,QAAA,cAAAA,QAAA,QAAAA,QAAA,UAAAA,QAAA,SAAAA,QAAA,UAAAA,QAAA,OACAnC,EAAAoC,UAAA,SAAA,YAAA,YAAA,eAAAA,UAAA,QAAA,MAAA,MAAA,SACApC,EAAAoC,UAAA,YAAA,aAAAA,UAAA,YAAA,YAAA,aACApC,EAAA1L,IAAA,WAAA,SAAA,SAAAzI,GACA,IAAA2U,EAAAH,EAAAxU,EAAAsC,QAAAlB,MAEA8V,EAAAxC,EADA1U,EAAAwE,OAAA2S,MACAxC,GAGAL,EAAAtU,EAAA,UAFAL,EAAAK,EAAA4B,MAAAkK,KAAA,UAAAJ,OAAA,UAAAwH,EAAAgE,GAAA,MAAA,MAIA/C,EAAA1L,IAAA,WAAA,SAAAzI,GAEA,UAAAA,EAAAsC,QAAA8U,QAAA9J,eAAA,aAAAtN,EAAAsC,QAAA2E,KAAAqG,eACAgH,EAAAtU,EAAA,YAAA,KAGAmU,EAAA1L,IAAA,UAAA,MAAA,OAAA,oBAAA,SAAAzI,GACA,IAAAgJ,GACAzB,IAAAvH,EAAAwE,OAAA+C,IACAN,KAAAjH,EAAAwE,OAAAyC,MAAA,MACA7G,SAEAuU,EAAAH,EAAAxU,EAAAsC,QAAAlB,MAEAzB,EAAA0C,KA3WA,SAAA2G,GACA,OAAAA,EAAA7D,QAAA,aAAA,IAAAhC,MAAA,YA0WAkU,CAAArX,EAAAwE,OAAA8S,kBAAAtX,EAAAsC,QAAAlB,MAAA,SAAA6D,EAAAwP,GACA,IAAA8C,EAAA7C,EAAAD,EAAAE,GACA3L,EAAA5I,KAAAmX,GAAA,WACA,IAAAC,EAAA7X,EAAAK,EAAA4B,MAAAkK,KAAA,UAAAJ,OAAA,UAAAwH,EAAAqE,GAAA,MAEA,OAAAC,EAAApV,GAAA,aACAoV,EAAA9L,OAAA,YAAArK,OAAAmW,EAAA9L,OAAA,WAAArK,OAAA,GAEAmW,EAAApV,GAAA,UACAoV,EAAA9L,OAAA,YAAArK,OAAA,GAEAmW,EAAAnW,SAIAiT,EAAAtU,EAAA,SAAAgJ,KAEAmL,EAAA1L,IAAA,YAAA,MAAA,cAAA,SAAA,SAAAzI,GACAA,EAAAwE,OAAA0D,KACAoM,EAAAtU,EAAA,YAAAA,EAAAwE,OAAA0D,KAEAlI,EAAAwE,OAAAwS,aACA1C,EAAAtU,EAAA,cAAAA,EAAAwE,OAAAwS,aAEAhX,EAAAwE,OAAAiT,OACAnD,EAAAtU,EAAA,QAAAA,EAAAwE,OAAAiT,SAGAtD,EAAA1L,IAAA,kBAAA,cAAA,SAAAzI,GACAsU,EAAAtU,EAAA,YAAAA,EAAAwE,OAAAkT,cAGA/X,EAAA,WACAyU,EAAAT,YAAAC,MAAAK,YAGAG,EAAAT,cC1aA,SAAAhU,EAAAoC,GACA,aACA,IACA4V,EAAA5V,EAAA6V,GACAC,EAAA9V,EAAAC,QAEA8V,GACAxX,UACAkB,OAAA,EACAuW,UAAA,EAEAC,gBAAA,EAEAC,oBAAA,EAEAC,mBAAA,eAIArT,MAAA,SAAA7E,IAmBA,SAAAkS,EAAA3N,GACA,IAAA,IAAAwE,KAAAxE,EACAA,EAAA4T,eAAApP,KACAmJ,EAAAnJ,GAAAxE,EAAAwE,IAKAlJ,CAAAiY,EAAAxX,SAAAN,GA1BA,WACA,IAAAoY,EAAAC,OAAAP,EAAAxX,SAAAkB,OACA,KAAA,mEAEA,IAAA4W,EAAAC,OAAAP,EAAAxX,SAAAyX,UACA,KAAA,sEAEA,IAAAK,EAAAC,OAAAP,EAAAxX,SAAA0X,gBACA,KAAA,4EAEA,IAAAI,EAAAC,OAAAP,EAAAxX,SAAA2X,oBACA,KAAA,gFAEA,IAAAG,EAAAE,SAAAR,EAAAxX,SAAA4X,qBACA,OAAAJ,EAAAxX,SAAA4X,yBAAApX,IAAAgX,EAAAxX,SAAA4X,mBACA,KAAA,yKAYAK,GAEA5Y,EAAA,QAAA0C,KAAA,WACA1C,EAAAM,MAAA6L,KAAA,2BAAAsE,IAAA,2BACAoI,EAAAC,WAAAxY,MAAA,KAGAyY,EAAAtC,KAAAgC,EAAA7I,OAAAjL,OAAA,4BAAAtE,MAGAqR,UAAA,SAAAjQ,EAAAgU,GACAuD,EAAAtH,UAAAjQ,EAAAgU,IAOAwD,eAAA,SAAAxX,EAAAgU,GACAgD,EAAAQ,eAAAxX,EAAAgU,IAUAyD,WAAA,WAIA,OAHA9W,EAAA6V,KAAA3X,OACA8B,EAAA6V,GAAAD,GAEA1X,OAIAyY,GACAtC,KAAA,SAAA5L,GACAsN,EAAAxX,SAAAkB,OAAAqW,GAAA,mBAAAA,EAAA5K,KACA4K,EAAA5K,IAAA,UAAAyL,EAAAI,KAAAtO,EAAA,IAAA8G,QAGArP,KAAA,SAAAuI,GACAqN,GAAA,mBAAAA,EAAA5V,MACA4V,EAAA5V,KAAA,UAAAyW,EAAAI,KAAAtO,EAAA,IAAA8G,QAGAyH,KAAA,SAAAvO,GACAqN,GAAA,mBAAAA,EAAA9L,OACA8L,EAAA9L,MAAA,UAAA2M,EAAAI,KAAAtO,EAAA,IAAA8G,QAGAwH,KAAA,SAAAtO,EAAAhD,GAEA,IAAAwR,GADAxO,EAAA4N,EAAA7I,OAAA0J,SAAAzO,IACArH,MAAA,MAEA+V,QADApY,IAAA0G,GAAA,OAAAA,EAAA,IAAA4Q,EAAAe,SAAAC,MAAA5R,GAAA,MAAA,IACAwR,EAAAK,QACA,OAAAL,EAAA9Y,OAAA,EACAgZ,EAAA,KAAAd,EAAA7I,OAAA+J,OAAAN,EAAA/M,KAAA,MAAA,IACAiN,IAIAP,GACA5L,WACAsE,UAAA,SAAAjQ,EAAAgU,GACA,IAAAlF,EAAAjQ,KAAA8M,QAAA3L,GACAnB,KAAA8M,QAAA3L,GAAA,WACA,OAAAgU,EAAAlV,SAAAuE,UAAAvE,OACAkV,EAAAvQ,MAAA5E,KAAAwE,WAEA,mBAAAyL,EACAA,EAAArL,MAAA5E,KAAAwE,WAEA2Q,EAAAvQ,MAAA5E,KAAAwE,aAGA8U,gBAAA,SAAAC,EAAAC,EAAAhF,GACA,IAAAxP,EAAA7D,EAAAsY,EAEA,GADAzZ,KAAA0Z,aACA7B,EAAAxX,SAAA2X,oBACA,IAAA7W,KAAAnB,KAAA8M,QACA,GAAA9M,KAAA8M,QAAAoL,eAAA/W,GAAA,CACA,GAAAoY,EAAArB,eAAA/W,GAAA,CACAsX,EAAAzW,KAAAmW,EAAA7I,OAAAjL,OAAA,gGAAAmQ,EAAArT,IACA,SAEAsY,EAAAzZ,KAAA8M,QAAA3L,GACAoY,EAAApY,GAAAsY,QAMA,IAAAzU,EAAA,EAAAA,EAAAwU,EAAAvZ,OAAA+E,IACA7D,EAAAqY,EAAAxU,GACAhF,KAAA8M,QAAAoL,eAAA/W,KACAsY,EAAAzZ,KAAA8M,QAAA3L,GACAoY,EAAApY,GAAAsY,IAIAC,WAAA,WACA,IAAAC,EAAA3Z,KACAA,KAAAoR,UAAA,MAAA,WACA,OAAAC,KAAAuI,QAEA5Z,KAAAoR,UAAA,QAAA,WACA,OAAA,IAAAC,MAAA,IAAAA,MAAAwI,SAAA,EAAA,EAAA,EAAA,IAAAC,YAEA9Z,KAAAoR,UAAA,SAAA,SAAA2I,GACA,OAAA1I,KAAAsC,MAAAoG,KAEA/Z,KAAAoR,UAAA,OAAA,SAAA4I,EAAAC,EAAAC,GACA,OAAA,IAAA7I,KAAA,IAAAA,KAAA2I,EAAAC,EAAA,EAAAC,GAAAC,YAAAH,IAAAF,YAEA9Z,KAAAoR,UAAA,OAAA,SAAA4I,EAAAC,EAAAC,EAAAE,EAAAC,EAAAC,GACA,OAAA,IAAAjJ,KAAA,IAAAA,KAAA2I,EAAAC,EAAA,EAAAC,EAAAE,EAAAC,EAAAC,GAAAH,YAAAH,IAAAF,YAEA9Z,KAAAoR,UAAA,WAAA,SAAAmJ,EAAAC,EAAAC,EAAAC,GACA,OAAA,IAAAA,EAAA,IAAAD,EAAA,KAAAD,EAAA,MAAAD,IAEAva,KAAAoR,UAAA,SAAA,SAAAuJ,GACA,OAAA,OAAAA,QAAA9Z,IAAA8Z,EAAAA,EAAA1a,OAAA,IAEAD,KAAAoR,UAAA,OAAA,SAAAuJ,GACA,OAAA,OAAAA,QAAA9Z,IAAA8Z,EAAAjb,EAAAqE,KAAA4W,GAAA,OAEA3a,KAAAoR,UAAA,SAAA,SAAAwJ,EAAAC,GACA,OAAAD,EAAAC,GAAA7O,KAAA,MAEAhM,KAAAoR,UAAA,SAAA,SAAAwJ,EAAAC,EAAAC,GACA,OAAAF,EAAAC,EAAAC,GAAA9O,KAAA,MAEAhM,KAAAoR,UAAA,iBAAA,SAAAwJ,EAAAC,GACA,OAAAD,IAAAC,EACA,EAEA,OAAAD,GAAA,OAAAC,EACA,EAEA,OAAAD,GAAA,OAAAC,GACA,EAEAD,EAAAC,EAAA,GAAA,IAEA7a,KAAAoR,UAAA,2BAAA,SAAAwJ,EAAAC,GAGA,OAFAD,EAAA,OAAAA,QAAA/Z,IAAA+Z,EAAAA,EAAArN,cAAA,KACAsN,EAAA,OAAAA,QAAAha,IAAAga,EAAAA,EAAAtN,cAAA,KACAoM,EAAA7M,QAAAiO,eAAAH,EAAAC,KAEA7a,KAAAoR,UAAA,aAAA,SAAAuJ,EAAAjG,GACA,OAAA,OAAAiG,QAAA9Z,IAAA8Z,GAAA,OAAAjG,QAAA7T,IAAA6T,GAAAiG,EAAA5V,MAAA,EAAA2P,EAAAzU,UAAAyU,IAEA1U,KAAAoR,UAAA,uBAAA,SAAAuJ,EAAAjG,GAGA,OAFAiG,EAAA,OAAAA,QAAA9Z,IAAA8Z,EAAAA,EAAApN,cAAA,KACAmH,EAAA,OAAAA,QAAA7T,IAAA6T,EAAAA,EAAAnH,cAAA,KACAoM,EAAA7M,QAAAkO,WAAAL,EAAAjG,KAEA1U,KAAAoR,UAAA,WAAA,SAAAuJ,EAAAM,GACA,OAAA,OAAAN,QAAA9Z,IAAA8Z,GAAA,OAAAM,QAAApa,IAAAoa,GAAAN,EAAA5V,OAAAkW,EAAAhb,UAAAgb,IAEAjb,KAAAoR,UAAA,qBAAA,SAAAuJ,EAAAM,GAGA,OAFAN,EAAA,OAAAA,QAAA9Z,IAAA8Z,EAAAA,EAAApN,cAAA,KACA0N,EAAA,OAAAA,QAAApa,IAAAoa,EAAAA,EAAA1N,cAAA,KACAoM,EAAA7M,QAAAoO,SAAAP,EAAAM,KAEAjb,KAAAoR,UAAA,WAAA,SAAAuJ,EAAApO,GACA,OAAA,OAAAoO,QAAA9Z,IAAA8Z,GAAA,OAAApO,QAAA1L,IAAA0L,GAAAoO,EAAAhG,QAAApI,IAAA,IAEAvM,KAAAoR,UAAA,qBAAA,SAAAuJ,EAAApO,GAGA,OAFAoO,EAAA,OAAAA,QAAA9Z,IAAA8Z,EAAAA,EAAApN,cAAA,KACAhB,EAAA,OAAAA,QAAA1L,IAAA0L,EAAAA,EAAAgB,cAAA,KACAoM,EAAA7M,QAAAqO,SAAAR,EAAApO,KAEAvM,KAAAoR,UAAA,qBAAA,SAAAuJ,GACA,OAAA,OAAAA,IAAA,KAAA5M,KAAA4M,KAEA3a,KAAAoR,UAAA,eAAA,SAAAuJ,GACA,MAAA,WAAA5M,KAAA4M,KAEA3a,KAAAoR,UAAA,WAAA,SAAAuJ,GACA,MAAA,yFAAA5M,KAAA4M,KAEA3a,KAAAoR,UAAA,UAAA,SAAAuJ,GAEA,MAAA,uIAAA5M,KAAA4M,KAEA3a,KAAAoR,UAAA,UAAA,SAAAuJ,GAEA,MAAA,kHAAA5M,KAAA4M,KAEA3a,KAAAoR,UAAA,QAAA,SAAAuJ,GAEA,MAAA,icAAA5M,KAAA4M,KAEA3a,KAAAoR,UAAA,eAAA,SAAAuJ,EAAAnD,GACA,OAAA,OAAAmD,QAAA9Z,IAAA8Z,GAAA,OAAAnD,QAAA3W,IAAA2W,GAAA,IAAArS,OAAAqS,GAAAzJ,KAAA4M,KAEA3a,KAAAoR,UAAA,OAAA,SAAAuJ,GACA,IAAAS,EAAAjD,EAAAiD,KAAApC,SAAA2B,GACA,GAAAS,EAAAtP,MACA,MAAAsP,EAAAC,IAEA,OAAAD,IAEApb,KAAAoR,UAAA,MAAA,SAAAkK,GACA,GAAA,IAAA9W,UAAAvE,OACA,KAAA,eAEA,GAAA,IAAAuE,UAAAvE,QACAkY,EAAAjH,QAAAoK,GAAA,CACA,GAAA,IAAAA,EAAArb,OACA,KAAA,iBACA,OAAA4R,KAAA5J,IAAArD,MAAA,KAAA0W,GAGA,OAAAzJ,KAAA5J,IAAArD,MAAA,KAAAJ,aAEAxE,KAAAoR,UAAA,MAAA,SAAAkK,GACA,GAAA,IAAA9W,UAAAvE,OACA,KAAA,eAEA,GAAA,IAAAuE,UAAAvE,QACAkY,EAAAjH,QAAAoK,GAAA,CACA,GAAA,IAAAA,EAAArb,OACA,KAAA,iBACA,OAAA4R,KAAA7J,IAAApD,MAAA,KAAA0W,GAGA,OAAAzJ,KAAA7J,IAAApD,MAAA,KAAAJ,aAEAxE,KAAAoR,UAAA,MAAA,SAAAkK,GACA,GAAA,IAAA9W,UAAAvE,OACA,KAAA,eAEA,IAAA+E,EAAAuW,EAAAC,EAAA,EACA,GAAA,IAAAhX,UAAAvE,QACAkY,EAAAjH,QAAAoK,GAAA,CACA,GAAA,IAAAA,EAAArb,OACA,KAAA,iBACA,IAAA+E,EAAA,EAAAuW,EAAAD,EAAArb,OAAA+E,EAAAuW,EAAAvW,IACAwW,GAAAC,WAAAH,EAAAtW,IAEA,OAAAwW,EAGA,IAAAxW,EAAA,EAAAuW,EAAA/W,UAAAvE,OAAA+E,EAAAuW,EAAAvW,IACAwW,GAAAC,WAAAjX,UAAAQ,IAEA,OAAAwW,IAEAxb,KAAAoR,UAAA,UAAA,SAAAkK,GACA,GAAA,IAAA9W,UAAAvE,OACA,KAAA,eAEA,IAAA+E,EAAAuW,EAAAG,EAAA,IAAA5W,MACA,GAAA,IAAAN,UAAAvE,QACAkY,EAAAjH,QAAAoK,GAAA,CACA,GAAA,IAAAA,EAAArb,OACA,KAAA,iBAEA,OADA0Z,EAAA7M,QAAA6O,IAAAL,GACAA,EAAArb,OAGA,IAAA+E,EAAA,EAAAuW,EAAA/W,UAAAvE,OAAA+E,EAAAuW,EAAAvW,IACA0W,EAAAxR,KAAA1F,UAAAQ,IAGA,OADA2U,EAAA7M,QAAA6O,IAAAD,GACAlX,UAAAvE,WAKAkY,GACAyD,WACAjD,eAAA,SAAAxX,EAAAgU,GACAzV,EAAA0C,KAAAjB,EAAA+B,MAAA,OAAA,SAAAiJ,EAAA0P,GACA,KAAA9N,KAAA8N,KACA1D,EAAAyD,QAAAC,GAAA1G,MAIA2G,OACAC,SAAA,SAAAL,EAAAM,GAEA,IADA,IAAAhX,EAAA0W,EAAAzb,OACA+E,KACA,GAAA0W,EAAA1W,KAAAgX,EACA,OAAA,EAGA,OAAA,IAGAC,QACAC,KAAA,SAAAjR,GACA,IAAAnC,EAAA4S,KACA,IAAA5S,KAAAmC,EACAA,EAAAiN,eAAApP,IACA4S,EAAAxR,KAAApB,GAGA,OAAA4S,GAEA1C,SAAA,SAAAjQ,GACA,IACA,OAAArJ,EAAA2V,UAAAtM,GACA,MAAAoT,GACA,OAAArQ,OAAA,EAAAuP,IAAA,mDAAAc,MAIA7M,QACAjL,OAAA,SAAA+G,EAAA7G,GACA,SAAA6X,EAAArT,GACA,IAAAsT,EAAA,SAAAvT,EAAAC,GACA,MAAA,mBAAAA,EAAA,sBAAAA,GAOA,OALA8O,EAAAxX,SAAA2X,qBACAqE,EAAA,MAEAtT,EAAAoP,EAAAmE,SAAAvT,GAAAwT,KAAAC,UAAAzT,EAAAsT,EAAA,GAAAtT,EACAA,EAAAoP,EAAAE,SAAAtP,GAAAA,EAAA7D,QAAA,MAAA,QAAA6D,EAGA,SAAA0T,EAAArR,EAAAxI,EAAAuJ,GACA,OAAAf,EAAAlG,QAAA,IAAAC,OAAA,MAAAgH,EAAA,MAAA,MAAAvJ,GAGA,IAAAoC,EACA,GAAAT,aAAAO,MAAA,CACA,IAAAE,EAAA,EAAAA,EAAAT,EAAAtE,OAAA+E,IACAoG,EAAAqR,EAAArR,EAAAgR,EAAA7X,EAAAS,IAAAA,GAEA,OAAAoG,EAEA,IAAApG,EAAA,EAAAA,EAAAR,UAAAvE,OAAA,EAAA+E,IACAoG,EAAAqR,EAAArR,EAAAgR,EAAA5X,UAAAQ,EAAA,IAAAA,GAEA,OAAAoG,GAEAiO,OAAA,SAAAsB,EAAA+B,GACA,IAAArD,EAAAvU,OAAA4X,GAAA,GAAA,GAAA1Q,KAAA,KACA,OAAA2O,EAAAzV,QAAA,MAAAmU,IAEAL,SAAA,SAAAjQ,GACA,OAAAoP,EAAAE,SAAAtP,GACAA,OAEAlI,IAAAkI,GAAA,OAAAA,EACAA,EAAAuI,YAEAxF,OAAA,EAAAuP,IAAA,uDAGAsB,MACA3D,SAAA,SAAAjQ,GACA,OAAAoP,EAAAC,OAAArP,GACAA,GAEAoP,EAAAE,SAAAtP,IAEA,UADAA,EAAArJ,EAAAqE,KAAAgF,GAAAwE,gBACA,UAAAxE,GAIA+C,OAAA,EAAAuP,IAAA,sDAHA,SAAAtS,IAMAtB,QACAuR,SAAA,SAAAjQ,GAKA,OAJA9D,EAIA8D,EAHAoP,EAAAyE,UAAAnB,WAAAxW,KAAA4X,SAAA5X,GAIAwW,WAAA1S,IAEA+C,OAAA,EAAAuP,IAAA,qDAPA,IAAApW,IAUA6X,UACA9D,SAAA,SAAAjQ,GACA,GAAAoP,EAAA4E,WAAAhU,GAAA,CACA,IACAqG,EAAA,uDAAA0H,KAAA/N,GACAiU,EAAA,MAAA5N,EAAA,IAAA,EAAA,EACA6N,GACA1C,KAAApC,EAAA1Q,OAAAuR,SAAA5J,EAJA,IAIA,GAAA4N,EACAxC,MAAArC,EAAA1Q,OAAAuR,SAAA5J,EALA,IAKA,GAAA4N,EACAvC,QAAAtC,EAAA1Q,OAAAuR,SAAA5J,EANA,IAMA,GAAA4N,EACAtC,QAAAvC,EAAA1Q,OAAAuR,SAAA5J,EAPA,IAOA,GAAA4N,EACAE,aAAA/E,EAAA1Q,OAAAuR,SAAA5J,EARA,IAQA,GAAA4N,GAOA,OALAC,EAAAC,aACA,IAAAD,EAAAvC,QACA,IAAAuC,EAAAxC,QACA,KAAAwC,EAAAzC,MACA,MAAAyC,EAAA1C,KAGA,OAAAzO,OAAA,EAAAuP,IAAA,2EAGAnC,UACAC,MAAA,SAAA5R,GACA,SAAA4V,EAAAlY,GAAA,OAAA,IAAAA,GAAAF,OAAA,GACA,OAAAoY,EAAA5V,EAAA6V,YAAA,IAAAD,EAAA5V,EAAA8V,cAAA,IAAAF,EAAA5V,EAAA+V,eAEAtE,SAAA,SAAAjQ,GACA,GAAAoP,EAAAoF,OAAAxU,GACA,OAAAA,EAAA+Q,UAEA,GAAA3B,EAAAE,SAAAtP,GAAA,CACA,IAAAyU,EAAAnM,KAAAsC,MAAA5K,GACA,GAAAoP,EAAAyE,UAAAY,GACA,OAAAA,EAGA,OAAA1R,OAAA,EAAAuP,IAAA,0EAGAD,MACApC,SAAA,SAAAjQ,GACA,OAAAoP,EAAAsF,OAAA1U,GACAA,EAAAsE,eAEAvB,OAAA,EAAAuP,IAAA,0IAGAqC,aACA1E,SAAA,SAAAjQ,GACA,OAAA8O,EAAAxX,SAAA0X,eAAAI,EAAA1Q,OAAAuR,SAAAjQ,GAAAoP,EAAA7I,OAAA0J,SAAAjQ,KAGAgU,WAAA,SAAAhU,GACA,MAAA,uDAAAgF,KAAAhF,IAEA6T,UAAA,SAAA7T,GACA,MAAA,iBAAAA,IAAA4H,MAAA5H,IAEAwU,OAAA,SAAAxU,GACA,OAAAA,aAAAsI,MAEAiL,SAAA,SAAAvT,GACA,MAAA,iBAAAA,GAAAA,aAAA4U,QAEAtF,SAAA,SAAAtP,GACA,MAAA,iBAAAA,GAAAA,aAAA2E,QAEA0K,OAAA,SAAArP,GACA,MAAA,kBAAAA,GAAAA,aAAA6U,SAEAH,OAAA,SAAA1U,GACA,MAAA,kEAAAgF,KAAAhF,IAEAmI,QAAA,SAAAnI,GACA,MAAA,mBAAA4U,OAAAvV,UAAAkJ,SAAA9P,KAAAuH,IAEAiQ,SAAA,SAAAjQ,EAAA/B,EAAAuQ,EAAAsE,GACA,IAAAgC,EACA,GAAA,OAAAhC,QAAAhb,IAAAgb,EAAA,CAEA,KADAgC,EAAA1F,EAAA2F,gBAAAvG,EAAAsE,IACA/P,MACA,OAAA+R,EAAA9U,EAAAwO,GAEAkB,EAAAzW,KAAA6b,EAAAxC,KAGA,OADAwC,EAAA1F,EAAA2F,gBAAAvG,EAAAvQ,IACA8E,MAIAqM,EAAA4F,aAAAhV,EAAA/B,IAHAyR,EAAAzW,KAAAmW,EAAA7I,OAAAjL,OAAA,oQAAA2C,EAAAuQ,IACAsG,EAAA9U,EAAAwO,KAIAwG,aAAA,SAAAhV,EAAA/B,GACA,OAAAmR,EAAAD,eAAAlR,GACAmR,EAAAnR,GAAAgS,SAAAjQ,GACAoP,EAAA8D,OAAAjD,SAAAjQ,IAEA+U,gBAAA,SAAAvG,EAAAsE,GACA,IAAAgC,EAAA1F,EAAAyD,QAAAC,GACA,MAAA,mBAAAgC,EACAA,GAEA/R,OAAA,EAAAuP,IAAAlD,EAAA7I,OAAAjL,OAAA,yJAAAwX,EAAAtE,MAIAyG,GACAC,UAAA,SAAAtD,GACA,YAAA9Z,IAAA8Z,GAAA,OAAAA,EAAAA,EAAApO,OAAA,EAAAoO,EAAAnO,YAAA,KAAA,GAAA,IAEA0R,aAAA,SAAAvc,EAAAR,EAAAuT,EAAA1N,EAAA6U,GAmBA,IAAAtE,EAAA/C,EAAA2J,EAAAC,EAGA,GAFA5J,EAAAE,EAAAvT,EAEA,KADAoW,EAAA7X,EAAAiC,GAAAkK,KAAAsM,EAAA7I,OAAAjL,OAAA,qBAAAmQ,KACAvU,OACA,MAAAkY,EAAA7I,OAAAjL,OAAA,2BAAAmQ,GAGA,GAAA,QADA2J,EAxBA,SAAA9b,GAEA,OADAA,EAAAjC,KAAA,SAEA,IAAA,WAIA,OAHAiC,EAAApC,OAAA,GACAwY,EAAAzW,KAAAmW,EAAA7I,OAAAjL,OAAA,uEAAAhC,EAAAjC,KAAA,UAEAiC,EAAAF,GAAA,YACA,IAAA,QACA,OAAAE,EAAAoJ,OAAA,YAAArK,MACA,QAIA,OAHAiB,EAAApC,OAAA,GACAwY,EAAAzW,KAAAmW,EAAA7I,OAAAjL,OAAA,uEAAAhC,EAAAjC,KAAA,UAEAiC,EAAAjB,OAUAid,CAAA9G,UACA1W,IAAAsd,GAAA,KAAAA,EACA,OAAA,KAGA,GAAA,QADAC,EAAAjG,EAAAa,SAAAmF,EAAAnX,EAAAwN,EAAAqH,UACAhb,IAAAud,GAAAA,EAAAtS,MACA,MAAAqM,EAAA7I,OAAAjL,OAAA,oDAAAmQ,EAAAxN,EAAAoX,EAAA/C,KAEA,OAAA+C,GAEAE,kBAAA,SAAA3c,EAAA4c,EAAAC,EAAAC,EAAAC,EAAAhK,GACA,SAAAiK,EAAAnK,EAAAoK,EAAA3C,GACA,IAAA4C,EAAA3Q,EAAAlJ,EAAAoK,EAAA0P,EAAAC,EAAAC,EAIA,IAHAA,EAAA,8BACAH,EAAArK,EAAAtR,MAAA,KACAgL,EAAA+N,EACAjX,EAAA,EAAAA,EAAA6Z,EAAA5e,OAAA,EAAA+E,IACAwP,EAAAqK,EAAA7Z,IAEAoK,EAAA4P,EAAAlI,KAAAtC,KAEAA,EAAApF,EAAA,GACA0P,EAAA1P,EAAA,GACAlB,EAAAgK,eAAA1D,KACAtG,EAAAsG,OAEAtG,EAAAsG,GAAAsK,GAAA5Q,EAAAsG,GAAAsK,OACA5Q,EAAAA,EAAAsG,GAAAsK,KAIA5Q,EAAAgK,eAAA1D,KACAtG,EAAAsG,OAEAtG,EAAAA,EAAAsG,IAEAA,EAAAqK,EAAAA,EAAA5e,OAAA,GAEA,IAAAgf,EAAAD,EAAAlI,KAAAtC,GACAyK,GACAF,EAAAE,EAAA,GACAH,EAAAG,EAAA,GACA/Q,EAAA6Q,GAAA7Q,EAAA6Q,OACA7Q,EAAA6Q,GAAAD,GAAAF,GAEA1Q,EAAAsG,GAAAoK,EAIA,IAAAzd,EAAA6F,EAAA6U,EAAAtC,KACA,IAAApY,KAAAod,EACAA,EAAArG,eAAA/W,KACA6F,EAAAuX,EAAApd,GACA0a,EAAA6C,EAAAvd,GAEAwd,EAAAxd,EADAnB,KAAAke,aAAAvc,EAAAR,EAAAuT,EAAA1N,EAAA6U,GACAtC,IAGA,IAAApY,KAAAqd,EACAA,EAAAtG,eAAA/W,IAEAwd,EAAAxd,EADAqd,EAAArd,GACAoY,GAGA,IAAApY,KAAAsd,EACAA,EAAAvG,eAAA/W,IAEAwd,EAAAxd,EADA0W,EAAAxX,SAAA0X,eAAA0G,EAAAtd,GAAAA,EAAA+B,MAAA,KAAAgc,MACA3F,GAGA,OAAAA,GAEA4F,iBAAA,SAAApW,EAAA1G,EAAAkC,GACAwE,EAAA,aAAA1G,EAAA2E,KAAA3E,EAAA+c,QAAArW,EAEA,IAAAwO,EAAAlV,EAAAlB,KAAA+D,QAAAX,EAAAmQ,OAAA,IACAmH,EAAAtX,EAAAma,WAAAnH,GACA,GAAA,OAAAsE,QAAAhb,IAAAgb,EAAA,CACA,IAAAgC,EAAA1F,EAAA2F,gBAAAzb,EAAAlB,KAAA0a,GACA,IAAAgC,EAAA/R,MACA,OAAA+R,EAAA9U,EAAA1G,EAAAlB,MAEAsX,EAAAzW,KAAA6b,EAAAxC,KAEA,OAAAtS,GAEAsW,QAAA,SAAAC,EAAAC,GACA,OAAA,IAAAC,SAAA,aAAA,UAAA,yCAAA,CAAAF,EAAAC,KAKAhH,GACAkH,iBACAC,kBAAA,SAAAC,EAAAC,EAAAlL,GACA,IAAA1P,EAAA7D,EACA,IAAA6D,EAAA,EAAAA,EAAA2a,EAAA1f,OAAA+E,KACA7D,EAAAuT,EAAAiL,EAAA3a,MACA4a,IACA5f,KAAAyf,cAAAte,GAAAnB,KAAAyf,cAAAte,OACAgX,EAAA2D,MAAAC,SAAA/b,KAAAyf,cAAAte,GAAAye,IACA5f,KAAAyf,cAAAte,GAAA+I,KAAA0V,KAKAC,mBAAA,SAAA1e,EAAAQ,GACA,IAAAqD,EAAAuS,EAAAuI,EAAA5f,EAGA,GAFAA,EAAAR,EAAAiC,GAAA7B,gBAEAe,KADAif,EAAA9f,KAAAyf,cAAAte,KACA,OAAA2e,EAGA,IAFArH,EAAAtC,KAAAgC,EAAA7I,OAAAjL,OAAA,0EAAAlD,EAAA2e,EAAA9T,KAAA,QACAhH,EAAA8a,EAAA7f,OACA+E,KAEA,KADAuS,EAAA7X,EAAAiC,GAAAkK,KAAAsM,EAAA7I,OAAAjL,OAAA,+BAAAyb,EAAA9a,KAAAmG,IAAAjL,EAAAG,SAAAuF,SACA3F,QACAsX,EAAAtV,aAIAwW,EAAAtC,KAAAgC,EAAA7I,OAAAjL,OAAA,uCAAAlD,KAGAqX,WAAA,SAAA7W,EAAAoe,GACA,GAAA,OAAAlI,EAAAxX,SAAA4X,yBAAApX,IAAAgX,EAAAxX,SAAA4X,oBAAA,KAAAJ,EAAAxX,SAAA4X,mBAAA,CACA,IAAA+H,KACAtgB,EAAA0C,KAAAyV,EAAAxX,SAAA4X,mBAAA/U,MAAA,OAAA,SAAAiJ,EAAA3L,GACA,KAAAuN,KAAAvN,IACAwf,EAAA9V,KAAAiO,EAAA7I,OAAAjL,OAAA,6BAAA7D,MAIAd,EAAAiC,GAAAkK,KAAA,2BAAAV,IAAA,SAAAgB,EAAA9J,GACA,IAAA4d,EAAAvgB,EAAA2C,GAAA1B,SAAA,qBAEA,OADAjB,EAAA2C,GAAA6E,SAAA,sBACA6Y,GAAAE,IACA1f,GAAAyf,EAAAhU,KAAA,KAAA,SAAAxL,GACA,IAAA+W,EAAA7X,EAAAM,MAAAI,KAAA,QACAqY,EAAAtC,KAAAgC,EAAA7I,OAAAjL,OAAA,sDAAA7D,EAAAwG,OACAuR,EAAAsH,mBAAAtI,EAAA5V,QAMAue,EAAA,SAAAC,EAAApgB,GACA,IAAAwC,GACAmS,OAAAsJ,EAAAC,UAAAle,EAAAsC,QAAAlB,MACAQ,KAAA5B,EAAA4B,MAEA,IAAA,IAAAmH,KAAA/I,EAAAwE,OACAxE,EAAAwE,OAAA2T,eAAApP,KACAvG,EAAAuG,QAAAjI,IAAAd,EAAAwE,OAAAuE,GAAApJ,EAAA2V,UAAAtV,EAAAwE,OAAAuE,QAGA/I,EAAAwK,UACAxK,EAAAkD,SAAAkd,GAAA,SAAA5b,EAAAlC,GACA,IAAAkI,EAAAgN,EAAA6D,EAAArS,EAEA,IAAAwO,KADAhN,EAAAxK,EAAAwK,QACAhG,EAAA6b,aACA,GAAA7b,EAAA6b,aAAAlI,eAAAX,GAAA,CACA6D,EAAA7W,EAAA6b,aAAA7I,GACAxO,EAAAiV,EAAAE,aAAA3Z,EAAA5C,KAAA4V,EAAAhT,EAAAmQ,OAAA,SAAA,MAEA,IAAAjD,EAAA,IAAAtM,OAAAiW,EAAA,KACA7Q,EAAAA,EAAArF,QAAAuM,EAAA1I,GAGA,OAAAwB,IAGAgO,EAAAC,WAAAzY,EAAA4B,MACA4W,EAAAmH,kBAAAvH,EAAA8D,OAAAC,KAAA3Z,EAAAgc,WAAAxe,EAAAsC,QAAAlB,KAAAoB,EAAAmS,QACA3U,EAAAwC,MAAA4d,GAAA5d,GA6DA8d,EAAA,8BAGA3gB,EAAA0C,KAAAie,EAAAnd,MAAA,IAAA,WACA,IAAAid,EAAAhI,EAAA7I,OAAAjL,OAAA,gBAAA3E,EAAAqE,KAAA/D,OACAN,EAAAQ,UAAAwT,YAAAQ,SAAA1L,IAAA2X,GAAA,aAAA,YAAA,YAAA,WAAA,cAAA,aAAA,eAAA,cAAA,SAAApgB,GACAmgB,EAAAC,EAAApgB,OAKAL,EAAA0C,KAAAie,EAAAnd,MAAA,IAAA,WACA,IAAAid,EAAAhI,EAAA7I,OAAAjL,OAAA,gBAAA3E,EAAAqE,KAAA/D,OACAN,EAAAQ,UAAAwT,YAAAQ,SAAA1L,IAAA2X,GAAA,aAAA,YAAA,YAAA,WAAA,cAAA,aAAA,gBAAA,SAAApgB,GACAmgB,EAAAC,EAAApgB,OAIAL,EAAA0C,KAAAie,EAAAnd,MAAA,IAAA,WACA,IAAA+X,EAAAvb,EAAAqE,KAAA/D,MACAoD,EAAA+U,EAAA7I,OAAAjL,OAAA,gBAAA4W,GACAvb,EAAAQ,UAAAkR,UAAAhO,EAAA,SAAA2F,EAAA1G,EAAAkC,GACA,IACA,IAAAvD,EAjFA,SAAAoC,EAAA2F,EAAA1G,EAAAkC,GAIA,QAAA1D,KAHAkI,EAAAiV,EAAAmB,iBAAApW,EAAA1G,EAAAkC,KAGA,OAAAwE,GAAA,KAAAA,EAAA,CACA,IAAAwQ,EAAAyE,EAAAM,kBAAA/Z,EAAA5C,KAAA4C,EAAAga,UAAAha,EAAAia,UAAAja,EAAAka,SAAAla,EAAAma,WAAAna,EAAAmQ,QACAgE,EAAAY,gBAAAC,EAAAhV,EAAA+b,YAAAje,EAAAlB,MAEAsX,EAAAtC,KAAAgC,EAAA7I,OAAAjL,OADA,2FACAhC,EAAAlB,KAAAiC,EAAAmB,EAAAgc,WAAA1I,EAAAxX,SAAA2X,mBAAA,uBAAA,GAAAuB,IACA,IAAAiH,EAAAxC,EAAAqB,QAAA9a,EAAAgc,WAAAhH,GACA,OACAtX,MAAAue,EACAC,UAAAD,GAGA,OACAve,OAAA,EACAwe,eAAA5f,GAgEA6f,CAAAtd,EAAA2F,EAAA1G,EAAAkC,GAaA,OAXAkU,EAAAtC,KAAAgC,EAAA7I,OAAAjL,OAAA,+CACAhC,EAAAlB,KACAiC,OACAvC,IAAAG,EAAAyf,UACA,6CACAzf,EAAAyf,UACA,kBACA,mBACAzf,EAAAiB,MAAA,YAAA,kBAEAvC,EAAA2C,GAAAqJ,QAAA,WAAA,aAAA1K,EAAAiB,MAAAsC,EAAAgc,aACAvf,EAAAiB,MACA,MAAAka,GACA1D,EAAAK,KAAAqD,KAEA,MAGAzc,EAAA0C,KAAAie,EAAAnd,MAAA,IAAA,WACA,IAAA+X,EAAAvb,EAAAqE,KAAA/D,MACAoD,EAAA+U,EAAA7I,OAAAjL,OAAA,gBAAA4W,GACAvb,EAAAQ,UAAAkR,UAAAhO,EAAA,SAAA2F,EAAA1G,EAAAkC,GACA,IACA,IAAAvD,EArFA,SAAAoC,EAAA2F,EAAA1G,EAAAkC,GACAwE,EAAAiV,EAAAmB,iBAAApW,EAAA1G,EAAAkC,GAEA,IAAAgV,EAAAiH,OAAA3f,EACA0J,EAAA,2FAQA,OAPAsN,EAAAxX,SAAAyX,WACAyB,EAAAyE,EAAAM,kBAAA/Z,EAAA5C,KAAA4C,EAAAga,UAAAha,EAAAia,UAAAja,EAAAka,SAAAla,EAAAma,WAAAna,EAAAmQ,QACAgE,EAAAY,gBAAAC,EAAAhV,EAAA+b,YAAAje,EAAAlB,MACAsX,EAAAtC,KAAAgC,EAAA7I,OAAAjL,OAAAkG,EAAAlI,EAAAlB,KAAAiC,EAAAmB,EAAAgc,WAAA1I,EAAAxX,SAAA2X,mBAAA,uBAAA,GAAAuB,IACAiH,EAAAxC,EAAAqB,QAAA9a,EAAAgc,WAAAhH,SAGA1Y,IAAAkI,GAAA,OAAAA,GAAA,KAAAA,IACA,KAAAgF,KAAAhF,KAAAxE,EAAAoc,gBAEA9f,IAAA2f,GAEAve,OAAAue,EACAC,UAAAD,IAIAjH,EAAAyE,EAAAM,kBAAA/Z,EAAA5C,KAAA4C,EAAAga,UAAAha,EAAAia,UAAAja,EAAAka,SAAAla,EAAAma,WAAAna,EAAAmQ,QACAgE,EAAAY,gBAAAC,EAAAhV,EAAA+b,YAAAje,EAAAlB,MACAsX,EAAAtC,KAAAgC,EAAA7I,OAAAjL,OAAAkG,EAAAlI,EAAAlB,KAAAiC,EAAAmB,EAAAgc,WAAA1I,EAAAxX,SAAA2X,mBAAA,uBAAA,GAAAuB,KAGAtX,QAFAue,EAAAxC,EAAAqB,QAAA9a,EAAAgc,WAAAhH,IAGAkH,UAAAD,KAIAve,OAAA,EACAwe,UAAAD,GAoDAI,CAAAxd,EAAA2F,EAAA1G,EAAAkC,GAaA,OAXAkU,EAAAtC,KAAAgC,EAAA7I,OAAAjL,OAAA,iDACAhC,EAAAlB,KACAiC,OACAvC,IAAAG,EAAAyf,UACA,+CACAzf,EAAAyf,UACA,WACA,eACAzf,EAAAiB,MAAA,YAAA,kBAEAvC,EAAA2C,GAAAqJ,QAAA,WAAA,aAAA1K,EAAAiB,MAAAsC,EAAAgc,WAAAvf,EAAAyf,UAAAJ,EAAA1L,QAAAsG,KACAja,EAAAiB,MACA,MAAAka,GACA1D,EAAAK,KAAAqD,KAEA,MAGAra,EAAA6V,GAAAE,EAp2BA,CAs2BApY,OAAAqC","file":"site-jqueryval.min.js","sourcesContent":["/*!\r\n * jQuery Validation Plugin v1.19.1\r\n *\r\n * https://jqueryvalidation.org/\r\n *\r\n * Copyright (c) 2019 Jörn Zaefferer\r\n * Released under the MIT license\r\n */\r\n(function( factory ) {\r\n\tif ( typeof define === \"function\" && define.amd ) {\r\n\t\tdefine( [\"jquery\"], factory );\r\n\t} else if (typeof module === \"object\" && module.exports) {\r\n\t\tmodule.exports = factory( require( \"jquery\" ) );\r\n\t} else {\r\n\t\tfactory( jQuery );\r\n\t}\r\n}(function( $ ) {\r\n\r\n$.extend( $.fn, {\r\n\r\n\t// https://jqueryvalidation.org/validate/\r\n\tvalidate: function( options ) {\r\n\r\n\t\t// If nothing is selected, return nothing; can't chain anyway\r\n\t\tif ( !this.length ) {\r\n\t\t\tif ( options && options.debug && window.console ) {\r\n\t\t\t\tconsole.warn( \"Nothing selected, can't validate, returning nothing.\" );\r\n\t\t\t}\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\t// Check if a validator for this form was already created\r\n\t\tvar validator = $.data( this[ 0 ], \"validator\" );\r\n\t\tif ( validator ) {\r\n\t\t\treturn validator;\r\n\t\t}\r\n\r\n\t\t// Add novalidate tag if HTML5.\r\n\t\tthis.attr( \"novalidate\", \"novalidate\" );\r\n\r\n\t\tvalidator = new $.validator( options, this[ 0 ] );\r\n\t\t$.data( this[ 0 ], \"validator\", validator );\r\n\r\n\t\tif ( validator.settings.onsubmit ) {\r\n\r\n\t\t\tthis.on( \"click.validate\", \":submit\", function( event ) {\r\n\r\n\t\t\t\t// Track the used submit button to properly handle scripted\r\n\t\t\t\t// submits later.\r\n\t\t\t\tvalidator.submitButton = event.currentTarget;\r\n\r\n\t\t\t\t// Allow suppressing validation by adding a cancel class to the submit button\r\n\t\t\t\tif ( $( this ).hasClass( \"cancel\" ) ) {\r\n\t\t\t\t\tvalidator.cancelSubmit = true;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// Allow suppressing validation by adding the html5 formnovalidate attribute to the submit button\r\n\t\t\t\tif ( $( this ).attr( \"formnovalidate\" ) !== undefined ) {\r\n\t\t\t\t\tvalidator.cancelSubmit = true;\r\n\t\t\t\t}\r\n\t\t\t} );\r\n\r\n\t\t\t// Validate the form on submit\r\n\t\t\tthis.on( \"submit.validate\", function( event ) {\r\n\t\t\t\tif ( validator.settings.debug ) {\r\n\r\n\t\t\t\t\t// Prevent form submit to be able to see console output\r\n\t\t\t\t\tevent.preventDefault();\r\n\t\t\t\t}\r\n\r\n\t\t\t\tfunction handle() {\r\n\t\t\t\t\tvar hidden, result;\r\n\r\n\t\t\t\t\t// Insert a hidden input as a replacement for the missing submit button\r\n\t\t\t\t\t// The hidden input is inserted in two cases:\r\n\t\t\t\t\t// - A user defined a `submitHandler`\r\n\t\t\t\t\t// - There was a pending request due to `remote` method and `stopRequest()`\r\n\t\t\t\t\t// was called to submit the form in case it's valid\r\n\t\t\t\t\tif ( validator.submitButton && ( validator.settings.submitHandler || validator.formSubmitted ) ) {\r\n\t\t\t\t\t\thidden = $( \"\" )\r\n\t\t\t\t\t\t\t.attr( \"name\", validator.submitButton.name )\r\n\t\t\t\t\t\t\t.val( $( validator.submitButton ).val() )\r\n\t\t\t\t\t\t\t.appendTo( validator.currentForm );\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif ( validator.settings.submitHandler && !validator.settings.debug ) {\r\n\t\t\t\t\t\tresult = validator.settings.submitHandler.call( validator, validator.currentForm, event );\r\n\t\t\t\t\t\tif ( hidden ) {\r\n\r\n\t\t\t\t\t\t\t// And clean up afterwards; thanks to no-block-scope, hidden can be referenced\r\n\t\t\t\t\t\t\thidden.remove();\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tif ( result !== undefined ) {\r\n\t\t\t\t\t\t\treturn result;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\t\t\t\t\treturn true;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// Prevent submit for invalid forms or custom submit handlers\r\n\t\t\t\tif ( validator.cancelSubmit ) {\r\n\t\t\t\t\tvalidator.cancelSubmit = false;\r\n\t\t\t\t\treturn handle();\r\n\t\t\t\t}\r\n\t\t\t\tif ( validator.form() ) {\r\n\t\t\t\t\tif ( validator.pendingRequest ) {\r\n\t\t\t\t\t\tvalidator.formSubmitted = true;\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\t\t\t\t\treturn handle();\r\n\t\t\t\t} else {\r\n\t\t\t\t\tvalidator.focusInvalid();\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t}\r\n\t\t\t} );\r\n\t\t}\r\n\r\n\t\treturn validator;\r\n\t},\r\n\r\n\t// https://jqueryvalidation.org/valid/\r\n\tvalid: function() {\r\n\t\tvar valid, validator, errorList;\r\n\r\n\t\tif ( $( this[ 0 ] ).is( \"form\" ) ) {\r\n\t\t\tvalid = this.validate().form();\r\n\t\t} else {\r\n\t\t\terrorList = [];\r\n\t\t\tvalid = true;\r\n\t\t\tvalidator = $( this[ 0 ].form ).validate();\r\n\t\t\tthis.each( function() {\r\n\t\t\t\tvalid = validator.element( this ) && valid;\r\n\t\t\t\tif ( !valid ) {\r\n\t\t\t\t\terrorList = errorList.concat( validator.errorList );\r\n\t\t\t\t}\r\n\t\t\t} );\r\n\t\t\tvalidator.errorList = errorList;\r\n\t\t}\r\n\t\treturn valid;\r\n\t},\r\n\r\n\t// https://jqueryvalidation.org/rules/\r\n\trules: function( command, argument ) {\r\n\t\tvar element = this[ 0 ],\r\n\t\t\tisContentEditable = typeof this.attr( \"contenteditable\" ) !== \"undefined\" && this.attr( \"contenteditable\" ) !== \"false\",\r\n\t\t\tsettings, staticRules, existingRules, data, param, filtered;\r\n\r\n\t\t// If nothing is selected, return empty object; can't chain anyway\r\n\t\tif ( element == null ) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif ( !element.form && isContentEditable ) {\r\n\t\t\telement.form = this.closest( \"form\" )[ 0 ];\r\n\t\t\telement.name = this.attr( \"name\" );\r\n\t\t}\r\n\r\n\t\tif ( element.form == null ) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif ( command ) {\r\n\t\t\tsettings = $.data( element.form, \"validator\" ).settings;\r\n\t\t\tstaticRules = settings.rules;\r\n\t\t\texistingRules = $.validator.staticRules( element );\r\n\t\t\tswitch ( command ) {\r\n\t\t\tcase \"add\":\r\n\t\t\t\t$.extend( existingRules, $.validator.normalizeRule( argument ) );\r\n\r\n\t\t\t\t// Remove messages from rules, but allow them to be set separately\r\n\t\t\t\tdelete existingRules.messages;\r\n\t\t\t\tstaticRules[ element.name ] = existingRules;\r\n\t\t\t\tif ( argument.messages ) {\r\n\t\t\t\t\tsettings.messages[ element.name ] = $.extend( settings.messages[ element.name ], argument.messages );\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"remove\":\r\n\t\t\t\tif ( !argument ) {\r\n\t\t\t\t\tdelete staticRules[ element.name ];\r\n\t\t\t\t\treturn existingRules;\r\n\t\t\t\t}\r\n\t\t\t\tfiltered = {};\r\n\t\t\t\t$.each( argument.split( /\\s/ ), function( index, method ) {\r\n\t\t\t\t\tfiltered[ method ] = existingRules[ method ];\r\n\t\t\t\t\tdelete existingRules[ method ];\r\n\t\t\t\t} );\r\n\t\t\t\treturn filtered;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tdata = $.validator.normalizeRules(\r\n\t\t$.extend(\r\n\t\t\t{},\r\n\t\t\t$.validator.classRules( element ),\r\n\t\t\t$.validator.attributeRules( element ),\r\n\t\t\t$.validator.dataRules( element ),\r\n\t\t\t$.validator.staticRules( element )\r\n\t\t), element );\r\n\r\n\t\t// Make sure required is at front\r\n\t\tif ( data.required ) {\r\n\t\t\tparam = data.required;\r\n\t\t\tdelete data.required;\r\n\t\t\tdata = $.extend( { required: param }, data );\r\n\t\t}\r\n\r\n\t\t// Make sure remote is at back\r\n\t\tif ( data.remote ) {\r\n\t\t\tparam = data.remote;\r\n\t\t\tdelete data.remote;\r\n\t\t\tdata = $.extend( data, { remote: param } );\r\n\t\t}\r\n\r\n\t\treturn data;\r\n\t}\r\n} );\r\n\r\n// Custom selectors\r\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\r\n\r\n\t// https://jqueryvalidation.org/blank-selector/\r\n\tblank: function( a ) {\r\n\t\treturn !$.trim( \"\" + $( a ).val() );\r\n\t},\r\n\r\n\t// https://jqueryvalidation.org/filled-selector/\r\n\tfilled: function( a ) {\r\n\t\tvar val = $( a ).val();\r\n\t\treturn val !== null && !!$.trim( \"\" + val );\r\n\t},\r\n\r\n\t// https://jqueryvalidation.org/unchecked-selector/\r\n\tunchecked: function( a ) {\r\n\t\treturn !$( a ).prop( \"checked\" );\r\n\t}\r\n} );\r\n\r\n// Constructor for validator\r\n$.validator = function( options, form ) {\r\n\tthis.settings = $.extend( true, {}, $.validator.defaults, options );\r\n\tthis.currentForm = form;\r\n\tthis.init();\r\n};\r\n\r\n// https://jqueryvalidation.org/jQuery.validator.format/\r\n$.validator.format = function( source, params ) {\r\n\tif ( arguments.length === 1 ) {\r\n\t\treturn function() {\r\n\t\t\tvar args = $.makeArray( arguments );\r\n\t\t\targs.unshift( source );\r\n\t\t\treturn $.validator.format.apply( this, args );\r\n\t\t};\r\n\t}\r\n\tif ( params === undefined ) {\r\n\t\treturn source;\r\n\t}\r\n\tif ( arguments.length > 2 && params.constructor !== Array ) {\r\n\t\tparams = $.makeArray( arguments ).slice( 1 );\r\n\t}\r\n\tif ( params.constructor !== Array ) {\r\n\t\tparams = [ params ];\r\n\t}\r\n\t$.each( params, function( i, n ) {\r\n\t\tsource = source.replace( new RegExp( \"\\\\{\" + i + \"\\\\}\", \"g\" ), function() {\r\n\t\t\treturn n;\r\n\t\t} );\r\n\t} );\r\n\treturn source;\r\n};\r\n\r\n$.extend( $.validator, {\r\n\r\n\tdefaults: {\r\n\t\tmessages: {},\r\n\t\tgroups: {},\r\n\t\trules: {},\r\n\t\terrorClass: \"error\",\r\n\t\tpendingClass: \"pending\",\r\n\t\tvalidClass: \"valid\",\r\n\t\terrorElement: \"label\",\r\n\t\tfocusCleanup: false,\r\n\t\tfocusInvalid: true,\r\n\t\terrorContainer: $( [] ),\r\n\t\terrorLabelContainer: $( [] ),\r\n\t\tonsubmit: true,\r\n\t\tignore: \":hidden\",\r\n\t\tignoreTitle: false,\r\n\t\tonfocusin: function( element ) {\r\n\t\t\tthis.lastActive = element;\r\n\r\n\t\t\t// Hide error label and remove error class on focus if enabled\r\n\t\t\tif ( this.settings.focusCleanup ) {\r\n\t\t\t\tif ( this.settings.unhighlight ) {\r\n\t\t\t\t\tthis.settings.unhighlight.call( this, element, this.settings.errorClass, this.settings.validClass );\r\n\t\t\t\t}\r\n\t\t\t\tthis.hideThese( this.errorsFor( element ) );\r\n\t\t\t}\r\n\t\t},\r\n\t\tonfocusout: function( element ) {\r\n\t\t\tif ( !this.checkable( element ) && ( element.name in this.submitted || !this.optional( element ) ) ) {\r\n\t\t\t\tthis.element( element );\r\n\t\t\t}\r\n\t\t},\r\n\t\tonkeyup: function( element, event ) {\r\n\r\n\t\t\t// Avoid revalidate the field when pressing one of the following keys\r\n\t\t\t// Shift => 16\r\n\t\t\t// Ctrl => 17\r\n\t\t\t// Alt => 18\r\n\t\t\t// Caps lock => 20\r\n\t\t\t// End => 35\r\n\t\t\t// Home => 36\r\n\t\t\t// Left arrow => 37\r\n\t\t\t// Up arrow => 38\r\n\t\t\t// Right arrow => 39\r\n\t\t\t// Down arrow => 40\r\n\t\t\t// Insert => 45\r\n\t\t\t// Num lock => 144\r\n\t\t\t// AltGr key => 225\r\n\t\t\tvar excludedKeys = [\r\n\t\t\t\t16, 17, 18, 20, 35, 36, 37,\r\n\t\t\t\t38, 39, 40, 45, 144, 225\r\n\t\t\t];\r\n\r\n\t\t\tif ( event.which === 9 && this.elementValue( element ) === \"\" || $.inArray( event.keyCode, excludedKeys ) !== -1 ) {\r\n\t\t\t\treturn;\r\n\t\t\t} else if ( element.name in this.submitted || element.name in this.invalid ) {\r\n\t\t\t\tthis.element( element );\r\n\t\t\t}\r\n\t\t},\r\n\t\tonclick: function( element ) {\r\n\r\n\t\t\t// Click on selects, radiobuttons and checkboxes\r\n\t\t\tif ( element.name in this.submitted ) {\r\n\t\t\t\tthis.element( element );\r\n\r\n\t\t\t// Or option elements, check parent select in that case\r\n\t\t\t} else if ( element.parentNode.name in this.submitted ) {\r\n\t\t\t\tthis.element( element.parentNode );\r\n\t\t\t}\r\n\t\t},\r\n\t\thighlight: function( element, errorClass, validClass ) {\r\n\t\t\tif ( element.type === \"radio\" ) {\r\n\t\t\t\tthis.findByName( element.name ).addClass( errorClass ).removeClass( validClass );\r\n\t\t\t} else {\r\n\t\t\t\t$( element ).addClass( errorClass ).removeClass( validClass );\r\n\t\t\t}\r\n\t\t},\r\n\t\tunhighlight: function( element, errorClass, validClass ) {\r\n\t\t\tif ( element.type === \"radio\" ) {\r\n\t\t\t\tthis.findByName( element.name ).removeClass( errorClass ).addClass( validClass );\r\n\t\t\t} else {\r\n\t\t\t\t$( element ).removeClass( errorClass ).addClass( validClass );\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n\r\n\t// https://jqueryvalidation.org/jQuery.validator.setDefaults/\r\n\tsetDefaults: function( settings ) {\r\n\t\t$.extend( $.validator.defaults, settings );\r\n\t},\r\n\r\n\tmessages: {\r\n\t\trequired: \"This field is required.\",\r\n\t\tremote: \"Please fix this field.\",\r\n\t\temail: \"Please enter a valid email address.\",\r\n\t\turl: \"Please enter a valid URL.\",\r\n\t\tdate: \"Please enter a valid date.\",\r\n\t\tdateISO: \"Please enter a valid date (ISO).\",\r\n\t\tnumber: \"Please enter a valid number.\",\r\n\t\tdigits: \"Please enter only digits.\",\r\n\t\tequalTo: \"Please enter the same value again.\",\r\n\t\tmaxlength: $.validator.format( \"Please enter no more than {0} characters.\" ),\r\n\t\tminlength: $.validator.format( \"Please enter at least {0} characters.\" ),\r\n\t\trangelength: $.validator.format( \"Please enter a value between {0} and {1} characters long.\" ),\r\n\t\trange: $.validator.format( \"Please enter a value between {0} and {1}.\" ),\r\n\t\tmax: $.validator.format( \"Please enter a value less than or equal to {0}.\" ),\r\n\t\tmin: $.validator.format( \"Please enter a value greater than or equal to {0}.\" ),\r\n\t\tstep: $.validator.format( \"Please enter a multiple of {0}.\" )\r\n\t},\r\n\r\n\tautoCreateRanges: false,\r\n\r\n\tprototype: {\r\n\r\n\t\tinit: function() {\r\n\t\t\tthis.labelContainer = $( this.settings.errorLabelContainer );\r\n\t\t\tthis.errorContext = this.labelContainer.length && this.labelContainer || $( this.currentForm );\r\n\t\t\tthis.containers = $( this.settings.errorContainer ).add( this.settings.errorLabelContainer );\r\n\t\t\tthis.submitted = {};\r\n\t\t\tthis.valueCache = {};\r\n\t\t\tthis.pendingRequest = 0;\r\n\t\t\tthis.pending = {};\r\n\t\t\tthis.invalid = {};\r\n\t\t\tthis.reset();\r\n\r\n\t\t\tvar currentForm = this.currentForm,\r\n\t\t\t\tgroups = ( this.groups = {} ),\r\n\t\t\t\trules;\r\n\t\t\t$.each( this.settings.groups, function( key, value ) {\r\n\t\t\t\tif ( typeof value === \"string\" ) {\r\n\t\t\t\t\tvalue = value.split( /\\s/ );\r\n\t\t\t\t}\r\n\t\t\t\t$.each( value, function( index, name ) {\r\n\t\t\t\t\tgroups[ name ] = key;\r\n\t\t\t\t} );\r\n\t\t\t} );\r\n\t\t\trules = this.settings.rules;\r\n\t\t\t$.each( rules, function( key, value ) {\r\n\t\t\t\trules[ key ] = $.validator.normalizeRule( value );\r\n\t\t\t} );\r\n\r\n\t\t\tfunction delegate( event ) {\r\n\t\t\t\tvar isContentEditable = typeof $( this ).attr( \"contenteditable\" ) !== \"undefined\" && $( this ).attr( \"contenteditable\" ) !== \"false\";\r\n\r\n\t\t\t\t// Set form expando on contenteditable\r\n\t\t\t\tif ( !this.form && isContentEditable ) {\r\n\t\t\t\t\tthis.form = $( this ).closest( \"form\" )[ 0 ];\r\n\t\t\t\t\tthis.name = $( this ).attr( \"name\" );\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// Ignore the element if it belongs to another form. This will happen mainly\r\n\t\t\t\t// when setting the `form` attribute of an input to the id of another form.\r\n\t\t\t\tif ( currentForm !== this.form ) {\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tvar validator = $.data( this.form, \"validator\" ),\r\n\t\t\t\t\teventType = \"on\" + event.type.replace( /^validate/, \"\" ),\r\n\t\t\t\t\tsettings = validator.settings;\r\n\t\t\t\tif ( settings[ eventType ] && !$( this ).is( settings.ignore ) ) {\r\n\t\t\t\t\tsettings[ eventType ].call( validator, this, event );\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t$( this.currentForm )\r\n\t\t\t\t.on( \"focusin.validate focusout.validate keyup.validate\",\r\n\t\t\t\t\t\":text, [type='password'], [type='file'], select, textarea, [type='number'], [type='search'], \" +\r\n\t\t\t\t\t\"[type='tel'], [type='url'], [type='email'], [type='datetime'], [type='date'], [type='month'], \" +\r\n\t\t\t\t\t\"[type='week'], [type='time'], [type='datetime-local'], [type='range'], [type='color'], \" +\r\n\t\t\t\t\t\"[type='radio'], [type='checkbox'], [contenteditable], [type='button']\", delegate )\r\n\r\n\t\t\t\t// Support: Chrome, oldIE\r\n\t\t\t\t// \"select\" is provided as event.target when clicking a option\r\n\t\t\t\t.on( \"click.validate\", \"select, option, [type='radio'], [type='checkbox']\", delegate );\r\n\r\n\t\t\tif ( this.settings.invalidHandler ) {\r\n\t\t\t\t$( this.currentForm ).on( \"invalid-form.validate\", this.settings.invalidHandler );\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t// https://jqueryvalidation.org/Validator.form/\r\n\t\tform: function() {\r\n\t\t\tthis.checkForm();\r\n\t\t\t$.extend( this.submitted, this.errorMap );\r\n\t\t\tthis.invalid = $.extend( {}, this.errorMap );\r\n\t\t\tif ( !this.valid() ) {\r\n\t\t\t\t$( this.currentForm ).triggerHandler( \"invalid-form\", [ this ] );\r\n\t\t\t}\r\n\t\t\tthis.showErrors();\r\n\t\t\treturn this.valid();\r\n\t\t},\r\n\r\n\t\tcheckForm: function() {\r\n\t\t\tthis.prepareForm();\r\n\t\t\tfor ( var i = 0, elements = ( this.currentElements = this.elements() ); elements[ i ]; i++ ) {\r\n\t\t\t\tthis.check( elements[ i ] );\r\n\t\t\t}\r\n\t\t\treturn this.valid();\r\n\t\t},\r\n\r\n\t\t// https://jqueryvalidation.org/Validator.element/\r\n\t\telement: function( element ) {\r\n\t\t\tvar cleanElement = this.clean( element ),\r\n\t\t\t\tcheckElement = this.validationTargetFor( cleanElement ),\r\n\t\t\t\tv = this,\r\n\t\t\t\tresult = true,\r\n\t\t\t\trs, group;\r\n\r\n\t\t\tif ( checkElement === undefined ) {\r\n\t\t\t\tdelete this.invalid[ cleanElement.name ];\r\n\t\t\t} else {\r\n\t\t\t\tthis.prepareElement( checkElement );\r\n\t\t\t\tthis.currentElements = $( checkElement );\r\n\r\n\t\t\t\t// If this element is grouped, then validate all group elements already\r\n\t\t\t\t// containing a value\r\n\t\t\t\tgroup = this.groups[ checkElement.name ];\r\n\t\t\t\tif ( group ) {\r\n\t\t\t\t\t$.each( this.groups, function( name, testgroup ) {\r\n\t\t\t\t\t\tif ( testgroup === group && name !== checkElement.name ) {\r\n\t\t\t\t\t\t\tcleanElement = v.validationTargetFor( v.clean( v.findByName( name ) ) );\r\n\t\t\t\t\t\t\tif ( cleanElement && cleanElement.name in v.invalid ) {\r\n\t\t\t\t\t\t\t\tv.currentElements.push( cleanElement );\r\n\t\t\t\t\t\t\t\tresult = v.check( cleanElement ) && result;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t} );\r\n\t\t\t\t}\r\n\r\n\t\t\t\trs = this.check( checkElement ) !== false;\r\n\t\t\t\tresult = result && rs;\r\n\t\t\t\tif ( rs ) {\r\n\t\t\t\t\tthis.invalid[ checkElement.name ] = false;\r\n\t\t\t\t} else {\r\n\t\t\t\t\tthis.invalid[ checkElement.name ] = true;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif ( !this.numberOfInvalids() ) {\r\n\r\n\t\t\t\t\t// Hide error containers on last error\r\n\t\t\t\t\tthis.toHide = this.toHide.add( this.containers );\r\n\t\t\t\t}\r\n\t\t\t\tthis.showErrors();\r\n\r\n\t\t\t\t// Add aria-invalid status for screen readers\r\n\t\t\t\t$( element ).attr( \"aria-invalid\", !rs );\r\n\t\t\t}\r\n\r\n\t\t\treturn result;\r\n\t\t},\r\n\r\n\t\t// https://jqueryvalidation.org/Validator.showErrors/\r\n\t\tshowErrors: function( errors ) {\r\n\t\t\tif ( errors ) {\r\n\t\t\t\tvar validator = this;\r\n\r\n\t\t\t\t// Add items to error list and map\r\n\t\t\t\t$.extend( this.errorMap, errors );\r\n\t\t\t\tthis.errorList = $.map( this.errorMap, function( message, name ) {\r\n\t\t\t\t\treturn {\r\n\t\t\t\t\t\tmessage: message,\r\n\t\t\t\t\t\telement: validator.findByName( name )[ 0 ]\r\n\t\t\t\t\t};\r\n\t\t\t\t} );\r\n\r\n\t\t\t\t// Remove items from success list\r\n\t\t\t\tthis.successList = $.grep( this.successList, function( element ) {\r\n\t\t\t\t\treturn !( element.name in errors );\r\n\t\t\t\t} );\r\n\t\t\t}\r\n\t\t\tif ( this.settings.showErrors ) {\r\n\t\t\t\tthis.settings.showErrors.call( this, this.errorMap, this.errorList );\r\n\t\t\t} else {\r\n\t\t\t\tthis.defaultShowErrors();\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t// https://jqueryvalidation.org/Validator.resetForm/\r\n\t\tresetForm: function() {\r\n\t\t\tif ( $.fn.resetForm ) {\r\n\t\t\t\t$( this.currentForm ).resetForm();\r\n\t\t\t}\r\n\t\t\tthis.invalid = {};\r\n\t\t\tthis.submitted = {};\r\n\t\t\tthis.prepareForm();\r\n\t\t\tthis.hideErrors();\r\n\t\t\tvar elements = this.elements()\r\n\t\t\t\t.removeData( \"previousValue\" )\r\n\t\t\t\t.removeAttr( \"aria-invalid\" );\r\n\r\n\t\t\tthis.resetElements( elements );\r\n\t\t},\r\n\r\n\t\tresetElements: function( elements ) {\r\n\t\t\tvar i;\r\n\r\n\t\t\tif ( this.settings.unhighlight ) {\r\n\t\t\t\tfor ( i = 0; elements[ i ]; i++ ) {\r\n\t\t\t\t\tthis.settings.unhighlight.call( this, elements[ i ],\r\n\t\t\t\t\t\tthis.settings.errorClass, \"\" );\r\n\t\t\t\t\tthis.findByName( elements[ i ].name ).removeClass( this.settings.validClass );\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\telements\r\n\t\t\t\t\t.removeClass( this.settings.errorClass )\r\n\t\t\t\t\t.removeClass( this.settings.validClass );\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\tnumberOfInvalids: function() {\r\n\t\t\treturn this.objectLength( this.invalid );\r\n\t\t},\r\n\r\n\t\tobjectLength: function( obj ) {\r\n\t\t\t/* jshint unused: false */\r\n\t\t\tvar count = 0,\r\n\t\t\t\ti;\r\n\t\t\tfor ( i in obj ) {\r\n\r\n\t\t\t\t// This check allows counting elements with empty error\r\n\t\t\t\t// message as invalid elements\r\n\t\t\t\tif ( obj[ i ] !== undefined && obj[ i ] !== null && obj[ i ] !== false ) {\r\n\t\t\t\t\tcount++;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn count;\r\n\t\t},\r\n\r\n\t\thideErrors: function() {\r\n\t\t\tthis.hideThese( this.toHide );\r\n\t\t},\r\n\r\n\t\thideThese: function( errors ) {\r\n\t\t\terrors.not( this.containers ).text( \"\" );\r\n\t\t\tthis.addWrapper( errors ).hide();\r\n\t\t},\r\n\r\n\t\tvalid: function() {\r\n\t\t\treturn this.size() === 0;\r\n\t\t},\r\n\r\n\t\tsize: function() {\r\n\t\t\treturn this.errorList.length;\r\n\t\t},\r\n\r\n\t\tfocusInvalid: function() {\r\n\t\t\tif ( this.settings.focusInvalid ) {\r\n\t\t\t\ttry {\r\n\t\t\t\t\t$( this.findLastActive() || this.errorList.length && this.errorList[ 0 ].element || [] )\r\n\t\t\t\t\t.filter( \":visible\" )\r\n\t\t\t\t\t.trigger( \"focus\" )\r\n\r\n\t\t\t\t\t// Manually trigger focusin event; without it, focusin handler isn't called, findLastActive won't have anything to find\r\n\t\t\t\t\t.trigger( \"focusin\" );\r\n\t\t\t\t} catch ( e ) {\r\n\r\n\t\t\t\t\t// Ignore IE throwing errors when focusing hidden elements\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\tfindLastActive: function() {\r\n\t\t\tvar lastActive = this.lastActive;\r\n\t\t\treturn lastActive && $.grep( this.errorList, function( n ) {\r\n\t\t\t\treturn n.element.name === lastActive.name;\r\n\t\t\t} ).length === 1 && lastActive;\r\n\t\t},\r\n\r\n\t\telements: function() {\r\n\t\t\tvar validator = this,\r\n\t\t\t\trulesCache = {};\r\n\r\n\t\t\t// Select all valid inputs inside the form (no submit or reset buttons)\r\n\t\t\treturn $( this.currentForm )\r\n\t\t\t.find( \"input, select, textarea, [contenteditable]\" )\r\n\t\t\t.not( \":submit, :reset, :image, :disabled\" )\r\n\t\t\t.not( this.settings.ignore )\r\n\t\t\t.filter( function() {\r\n\t\t\t\tvar name = this.name || $( this ).attr( \"name\" ); // For contenteditable\r\n\t\t\t\tvar isContentEditable = typeof $( this ).attr( \"contenteditable\" ) !== \"undefined\" && $( this ).attr( \"contenteditable\" ) !== \"false\";\r\n\r\n\t\t\t\tif ( !name && validator.settings.debug && window.console ) {\r\n\t\t\t\t\tconsole.error( \"%o has no name assigned\", this );\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// Set form expando on contenteditable\r\n\t\t\t\tif ( isContentEditable ) {\r\n\t\t\t\t\tthis.form = $( this ).closest( \"form\" )[ 0 ];\r\n\t\t\t\t\tthis.name = name;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// Ignore elements that belong to other/nested forms\r\n\t\t\t\tif ( this.form !== validator.currentForm ) {\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// Select only the first element for each name, and only those with rules specified\r\n\t\t\t\tif ( name in rulesCache || !validator.objectLength( $( this ).rules() ) ) {\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t}\r\n\r\n\t\t\t\trulesCache[ name ] = true;\r\n\t\t\t\treturn true;\r\n\t\t\t} );\r\n\t\t},\r\n\r\n\t\tclean: function( selector ) {\r\n\t\t\treturn $( selector )[ 0 ];\r\n\t\t},\r\n\r\n\t\terrors: function() {\r\n\t\t\tvar errorClass = this.settings.errorClass.split( \" \" ).join( \".\" );\r\n\t\t\treturn $( this.settings.errorElement + \".\" + errorClass, this.errorContext );\r\n\t\t},\r\n\r\n\t\tresetInternals: function() {\r\n\t\t\tthis.successList = [];\r\n\t\t\tthis.errorList = [];\r\n\t\t\tthis.errorMap = {};\r\n\t\t\tthis.toShow = $( [] );\r\n\t\t\tthis.toHide = $( [] );\r\n\t\t},\r\n\r\n\t\treset: function() {\r\n\t\t\tthis.resetInternals();\r\n\t\t\tthis.currentElements = $( [] );\r\n\t\t},\r\n\r\n\t\tprepareForm: function() {\r\n\t\t\tthis.reset();\r\n\t\t\tthis.toHide = this.errors().add( this.containers );\r\n\t\t},\r\n\r\n\t\tprepareElement: function( element ) {\r\n\t\t\tthis.reset();\r\n\t\t\tthis.toHide = this.errorsFor( element );\r\n\t\t},\r\n\r\n\t\telementValue: function( element ) {\r\n\t\t\tvar $element = $( element ),\r\n\t\t\t\ttype = element.type,\r\n\t\t\t\tisContentEditable = typeof $element.attr( \"contenteditable\" ) !== \"undefined\" && $element.attr( \"contenteditable\" ) !== \"false\",\r\n\t\t\t\tval, idx;\r\n\r\n\t\t\tif ( type === \"radio\" || type === \"checkbox\" ) {\r\n\t\t\t\treturn this.findByName( element.name ).filter( \":checked\" ).val();\r\n\t\t\t} else if ( type === \"number\" && typeof element.validity !== \"undefined\" ) {\r\n\t\t\t\treturn element.validity.badInput ? \"NaN\" : $element.val();\r\n\t\t\t}\r\n\r\n\t\t\tif ( isContentEditable ) {\r\n\t\t\t\tval = $element.text();\r\n\t\t\t} else {\r\n\t\t\t\tval = $element.val();\r\n\t\t\t}\r\n\r\n\t\t\tif ( type === \"file\" ) {\r\n\r\n\t\t\t\t// Modern browser (chrome & safari)\r\n\t\t\t\tif ( val.substr( 0, 12 ) === \"C:\\\\fakepath\\\\\" ) {\r\n\t\t\t\t\treturn val.substr( 12 );\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// Legacy browsers\r\n\t\t\t\t// Unix-based path\r\n\t\t\t\tidx = val.lastIndexOf( \"/\" );\r\n\t\t\t\tif ( idx >= 0 ) {\r\n\t\t\t\t\treturn val.substr( idx + 1 );\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// Windows-based path\r\n\t\t\t\tidx = val.lastIndexOf( \"\\\\\" );\r\n\t\t\t\tif ( idx >= 0 ) {\r\n\t\t\t\t\treturn val.substr( idx + 1 );\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// Just the file name\r\n\t\t\t\treturn val;\r\n\t\t\t}\r\n\r\n\t\t\tif ( typeof val === \"string\" ) {\r\n\t\t\t\treturn val.replace( /\\r/g, \"\" );\r\n\t\t\t}\r\n\t\t\treturn val;\r\n\t\t},\r\n\r\n\t\tcheck: function( element ) {\r\n\t\t\telement = this.validationTargetFor( this.clean( element ) );\r\n\r\n\t\t\tvar rules = $( element ).rules(),\r\n\t\t\t\trulesCount = $.map( rules, function( n, i ) {\r\n\t\t\t\t\treturn i;\r\n\t\t\t\t} ).length,\r\n\t\t\t\tdependencyMismatch = false,\r\n\t\t\t\tval = this.elementValue( element ),\r\n\t\t\t\tresult, method, rule, normalizer;\r\n\r\n\t\t\t// Prioritize the local normalizer defined for this element over the global one\r\n\t\t\t// if the former exists, otherwise user the global one in case it exists.\r\n\t\t\tif ( typeof rules.normalizer === \"function\" ) {\r\n\t\t\t\tnormalizer = rules.normalizer;\r\n\t\t\t} else if (\ttypeof this.settings.normalizer === \"function\" ) {\r\n\t\t\t\tnormalizer = this.settings.normalizer;\r\n\t\t\t}\r\n\r\n\t\t\t// If normalizer is defined, then call it to retreive the changed value instead\r\n\t\t\t// of using the real one.\r\n\t\t\t// Note that `this` in the normalizer is `element`.\r\n\t\t\tif ( normalizer ) {\r\n\t\t\t\tval = normalizer.call( element, val );\r\n\r\n\t\t\t\t// Delete the normalizer from rules to avoid treating it as a pre-defined method.\r\n\t\t\t\tdelete rules.normalizer;\r\n\t\t\t}\r\n\r\n\t\t\tfor ( method in rules ) {\r\n\t\t\t\trule = { method: method, parameters: rules[ method ] };\r\n\t\t\t\ttry {\r\n\t\t\t\t\tresult = $.validator.methods[ method ].call( this, val, element, rule.parameters );\r\n\r\n\t\t\t\t\t// If a method indicates that the field is optional and therefore valid,\r\n\t\t\t\t\t// don't mark it as valid when there are no other rules\r\n\t\t\t\t\tif ( result === \"dependency-mismatch\" && rulesCount === 1 ) {\r\n\t\t\t\t\t\tdependencyMismatch = true;\r\n\t\t\t\t\t\tcontinue;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tdependencyMismatch = false;\r\n\r\n\t\t\t\t\tif ( result === \"pending\" ) {\r\n\t\t\t\t\t\tthis.toHide = this.toHide.not( this.errorsFor( element ) );\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif ( !result ) {\r\n\t\t\t\t\t\tthis.formatAndAdd( element, rule );\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\t\t\t\t} catch ( e ) {\r\n\t\t\t\t\tif ( this.settings.debug && window.console ) {\r\n\t\t\t\t\t\tconsole.log( \"Exception occurred when checking element \" + element.id + \", check the '\" + rule.method + \"' method.\", e );\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif ( e instanceof TypeError ) {\r\n\t\t\t\t\t\te.message += \". Exception occurred when checking element \" + element.id + \", check the '\" + rule.method + \"' method.\";\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tthrow e;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tif ( dependencyMismatch ) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tif ( this.objectLength( rules ) ) {\r\n\t\t\t\tthis.successList.push( element );\r\n\t\t\t}\r\n\t\t\treturn true;\r\n\t\t},\r\n\r\n\t\t// Return the custom message for the given element and validation method\r\n\t\t// specified in the element's HTML5 data attribute\r\n\t\t// return the generic message if present and no method specific message is present\r\n\t\tcustomDataMessage: function( element, method ) {\r\n\t\t\treturn $( element ).data( \"msg\" + method.charAt( 0 ).toUpperCase() +\r\n\t\t\t\tmethod.substring( 1 ).toLowerCase() ) || $( element ).data( \"msg\" );\r\n\t\t},\r\n\r\n\t\t// Return the custom message for the given element name and validation method\r\n\t\tcustomMessage: function( name, method ) {\r\n\t\t\tvar m = this.settings.messages[ name ];\r\n\t\t\treturn m && ( m.constructor === String ? m : m[ method ] );\r\n\t\t},\r\n\r\n\t\t// Return the first defined argument, allowing empty strings\r\n\t\tfindDefined: function() {\r\n\t\t\tfor ( var i = 0; i < arguments.length; i++ ) {\r\n\t\t\t\tif ( arguments[ i ] !== undefined ) {\r\n\t\t\t\t\treturn arguments[ i ];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn undefined;\r\n\t\t},\r\n\r\n\t\t// The second parameter 'rule' used to be a string, and extended to an object literal\r\n\t\t// of the following form:\r\n\t\t// rule = {\r\n\t\t// method: \"method name\",\r\n\t\t// parameters: \"the given method parameters\"\r\n\t\t// }\r\n\t\t//\r\n\t\t// The old behavior still supported, kept to maintain backward compatibility with\r\n\t\t// old code, and will be removed in the next major release.\r\n\t\tdefaultMessage: function( element, rule ) {\r\n\t\t\tif ( typeof rule === \"string\" ) {\r\n\t\t\t\trule = { method: rule };\r\n\t\t\t}\r\n\r\n\t\t\tvar message = this.findDefined(\r\n\t\t\t\t\tthis.customMessage( element.name, rule.method ),\r\n\t\t\t\t\tthis.customDataMessage( element, rule.method ),\r\n\r\n\t\t\t\t\t// 'title' is never undefined, so handle empty string as undefined\r\n\t\t\t\t\t!this.settings.ignoreTitle && element.title || undefined,\r\n\t\t\t\t\t$.validator.messages[ rule.method ],\r\n\t\t\t\t\t\"Warning: No message defined for \" + element.name + \"\"\r\n\t\t\t\t),\r\n\t\t\t\ttheregex = /\\$?\\{(\\d+)\\}/g;\r\n\t\t\tif ( typeof message === \"function\" ) {\r\n\t\t\t\tmessage = message.call( this, rule.parameters, element );\r\n\t\t\t} else if ( theregex.test( message ) ) {\r\n\t\t\t\tmessage = $.validator.format( message.replace( theregex, \"{$1}\" ), rule.parameters );\r\n\t\t\t}\r\n\r\n\t\t\treturn message;\r\n\t\t},\r\n\r\n\t\tformatAndAdd: function( element, rule ) {\r\n\t\t\tvar message = this.defaultMessage( element, rule );\r\n\r\n\t\t\tthis.errorList.push( {\r\n\t\t\t\tmessage: message,\r\n\t\t\t\telement: element,\r\n\t\t\t\tmethod: rule.method\r\n\t\t\t} );\r\n\r\n\t\t\tthis.errorMap[ element.name ] = message;\r\n\t\t\tthis.submitted[ element.name ] = message;\r\n\t\t},\r\n\r\n\t\taddWrapper: function( toToggle ) {\r\n\t\t\tif ( this.settings.wrapper ) {\r\n\t\t\t\ttoToggle = toToggle.add( toToggle.parent( this.settings.wrapper ) );\r\n\t\t\t}\r\n\t\t\treturn toToggle;\r\n\t\t},\r\n\r\n\t\tdefaultShowErrors: function() {\r\n\t\t\tvar i, elements, error;\r\n\t\t\tfor ( i = 0; this.errorList[ i ]; i++ ) {\r\n\t\t\t\terror = this.errorList[ i ];\r\n\t\t\t\tif ( this.settings.highlight ) {\r\n\t\t\t\t\tthis.settings.highlight.call( this, error.element, this.settings.errorClass, this.settings.validClass );\r\n\t\t\t\t}\r\n\t\t\t\tthis.showLabel( error.element, error.message );\r\n\t\t\t}\r\n\t\t\tif ( this.errorList.length ) {\r\n\t\t\t\tthis.toShow = this.toShow.add( this.containers );\r\n\t\t\t}\r\n\t\t\tif ( this.settings.success ) {\r\n\t\t\t\tfor ( i = 0; this.successList[ i ]; i++ ) {\r\n\t\t\t\t\tthis.showLabel( this.successList[ i ] );\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tif ( this.settings.unhighlight ) {\r\n\t\t\t\tfor ( i = 0, elements = this.validElements(); elements[ i ]; i++ ) {\r\n\t\t\t\t\tthis.settings.unhighlight.call( this, elements[ i ], this.settings.errorClass, this.settings.validClass );\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tthis.toHide = this.toHide.not( this.toShow );\r\n\t\t\tthis.hideErrors();\r\n\t\t\tthis.addWrapper( this.toShow ).show();\r\n\t\t},\r\n\r\n\t\tvalidElements: function() {\r\n\t\t\treturn this.currentElements.not( this.invalidElements() );\r\n\t\t},\r\n\r\n\t\tinvalidElements: function() {\r\n\t\t\treturn $( this.errorList ).map( function() {\r\n\t\t\t\treturn this.element;\r\n\t\t\t} );\r\n\t\t},\r\n\r\n\t\tshowLabel: function( element, message ) {\r\n\t\t\tvar place, group, errorID, v,\r\n\t\t\t\terror = this.errorsFor( element ),\r\n\t\t\t\telementID = this.idOrName( element ),\r\n\t\t\t\tdescribedBy = $( element ).attr( \"aria-describedby\" );\r\n\r\n\t\t\tif ( error.length ) {\r\n\r\n\t\t\t\t// Refresh error/success class\r\n\t\t\t\terror.removeClass( this.settings.validClass ).addClass( this.settings.errorClass );\r\n\r\n\t\t\t\t// Replace message on existing label\r\n\t\t\t\terror.html( message );\r\n\t\t\t} else {\r\n\r\n\t\t\t\t// Create error element\r\n\t\t\t\terror = $( \"<\" + this.settings.errorElement + \">\" )\r\n\t\t\t\t\t.attr( \"id\", elementID + \"-error\" )\r\n\t\t\t\t\t.addClass( this.settings.errorClass )\r\n\t\t\t\t\t.html( message || \"\" );\r\n\r\n\t\t\t\t// Maintain reference to the element to be placed into the DOM\r\n\t\t\t\tplace = error;\r\n\t\t\t\tif ( this.settings.wrapper ) {\r\n\r\n\t\t\t\t\t// Make sure the element is visible, even in IE\r\n\t\t\t\t\t// actually showing the wrapped element is handled elsewhere\r\n\t\t\t\t\tplace = error.hide().show().wrap( \"<\" + this.settings.wrapper + \"/>\" ).parent();\r\n\t\t\t\t}\r\n\t\t\t\tif ( this.labelContainer.length ) {\r\n\t\t\t\t\tthis.labelContainer.append( place );\r\n\t\t\t\t} else if ( this.settings.errorPlacement ) {\r\n\t\t\t\t\tthis.settings.errorPlacement.call( this, place, $( element ) );\r\n\t\t\t\t} else {\r\n\t\t\t\t\tplace.insertAfter( element );\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// Link error back to the element\r\n\t\t\t\tif ( error.is( \"label\" ) ) {\r\n\r\n\t\t\t\t\t// If the error is a label, then associate using 'for'\r\n\t\t\t\t\terror.attr( \"for\", elementID );\r\n\r\n\t\t\t\t\t// If the element is not a child of an associated label, then it's necessary\r\n\t\t\t\t\t// to explicitly apply aria-describedby\r\n\t\t\t\t} else if ( error.parents( \"label[for='\" + this.escapeCssMeta( elementID ) + \"']\" ).length === 0 ) {\r\n\t\t\t\t\terrorID = error.attr( \"id\" );\r\n\r\n\t\t\t\t\t// Respect existing non-error aria-describedby\r\n\t\t\t\t\tif ( !describedBy ) {\r\n\t\t\t\t\t\tdescribedBy = errorID;\r\n\t\t\t\t\t} else if ( !describedBy.match( new RegExp( \"\\\\b\" + this.escapeCssMeta( errorID ) + \"\\\\b\" ) ) ) {\r\n\r\n\t\t\t\t\t\t// Add to end of list if not already present\r\n\t\t\t\t\t\tdescribedBy += \" \" + errorID;\r\n\t\t\t\t\t}\r\n\t\t\t\t\t$( element ).attr( \"aria-describedby\", describedBy );\r\n\r\n\t\t\t\t\t// If this element is grouped, then assign to all elements in the same group\r\n\t\t\t\t\tgroup = this.groups[ element.name ];\r\n\t\t\t\t\tif ( group ) {\r\n\t\t\t\t\t\tv = this;\r\n\t\t\t\t\t\t$.each( v.groups, function( name, testgroup ) {\r\n\t\t\t\t\t\t\tif ( testgroup === group ) {\r\n\t\t\t\t\t\t\t\t$( \"[name='\" + v.escapeCssMeta( name ) + \"']\", v.currentForm )\r\n\t\t\t\t\t\t\t\t\t.attr( \"aria-describedby\", error.attr( \"id\" ) );\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t} );\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tif ( !message && this.settings.success ) {\r\n\t\t\t\terror.text( \"\" );\r\n\t\t\t\tif ( typeof this.settings.success === \"string\" ) {\r\n\t\t\t\t\terror.addClass( this.settings.success );\r\n\t\t\t\t} else {\r\n\t\t\t\t\tthis.settings.success( error, element );\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tthis.toShow = this.toShow.add( error );\r\n\t\t},\r\n\r\n\t\terrorsFor: function( element ) {\r\n\t\t\tvar name = this.escapeCssMeta( this.idOrName( element ) ),\r\n\t\t\t\tdescriber = $( element ).attr( \"aria-describedby\" ),\r\n\t\t\t\tselector = \"label[for='\" + name + \"'], label[for='\" + name + \"'] *\";\r\n\r\n\t\t\t// 'aria-describedby' should directly reference the error element\r\n\t\t\tif ( describer ) {\r\n\t\t\t\tselector = selector + \", #\" + this.escapeCssMeta( describer )\r\n\t\t\t\t\t.replace( /\\s+/g, \", #\" );\r\n\t\t\t}\r\n\r\n\t\t\treturn this\r\n\t\t\t\t.errors()\r\n\t\t\t\t.filter( selector );\r\n\t\t},\r\n\r\n\t\t// See https://api.jquery.com/category/selectors/, for CSS\r\n\t\t// meta-characters that should be escaped in order to be used with JQuery\r\n\t\t// as a literal part of a name/id or any selector.\r\n\t\tescapeCssMeta: function( string ) {\r\n\t\t\treturn string.replace( /([\\\\!\"#$%&'()*+,./:;<=>?@\\[\\]^`{|}~])/g, \"\\\\$1\" );\r\n\t\t},\r\n\r\n\t\tidOrName: function( element ) {\r\n\t\t\treturn this.groups[ element.name ] || ( this.checkable( element ) ? element.name : element.id || element.name );\r\n\t\t},\r\n\r\n\t\tvalidationTargetFor: function( element ) {\r\n\r\n\t\t\t// If radio/checkbox, validate first element in group instead\r\n\t\t\tif ( this.checkable( element ) ) {\r\n\t\t\t\telement = this.findByName( element.name );\r\n\t\t\t}\r\n\r\n\t\t\t// Always apply ignore filter\r\n\t\t\treturn $( element ).not( this.settings.ignore )[ 0 ];\r\n\t\t},\r\n\r\n\t\tcheckable: function( element ) {\r\n\t\t\treturn ( /radio|checkbox/i ).test( element.type );\r\n\t\t},\r\n\r\n\t\tfindByName: function( name ) {\r\n\t\t\treturn $( this.currentForm ).find( \"[name='\" + this.escapeCssMeta( name ) + \"']\" );\r\n\t\t},\r\n\r\n\t\tgetLength: function( value, element ) {\r\n\t\t\tswitch ( element.nodeName.toLowerCase() ) {\r\n\t\t\tcase \"select\":\r\n\t\t\t\treturn $( \"option:selected\", element ).length;\r\n\t\t\tcase \"input\":\r\n\t\t\t\tif ( this.checkable( element ) ) {\r\n\t\t\t\t\treturn this.findByName( element.name ).filter( \":checked\" ).length;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn value.length;\r\n\t\t},\r\n\r\n\t\tdepend: function( param, element ) {\r\n\t\t\treturn this.dependTypes[ typeof param ] ? this.dependTypes[ typeof param ]( param, element ) : true;\r\n\t\t},\r\n\r\n\t\tdependTypes: {\r\n\t\t\t\"boolean\": function( param ) {\r\n\t\t\t\treturn param;\r\n\t\t\t},\r\n\t\t\t\"string\": function( param, element ) {\r\n\t\t\t\treturn !!$( param, element.form ).length;\r\n\t\t\t},\r\n\t\t\t\"function\": function( param, element ) {\r\n\t\t\t\treturn param( element );\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\toptional: function( element ) {\r\n\t\t\tvar val = this.elementValue( element );\r\n\t\t\treturn !$.validator.methods.required.call( this, val, element ) && \"dependency-mismatch\";\r\n\t\t},\r\n\r\n\t\tstartRequest: function( element ) {\r\n\t\t\tif ( !this.pending[ element.name ] ) {\r\n\t\t\t\tthis.pendingRequest++;\r\n\t\t\t\t$( element ).addClass( this.settings.pendingClass );\r\n\t\t\t\tthis.pending[ element.name ] = true;\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\tstopRequest: function( element, valid ) {\r\n\t\t\tthis.pendingRequest--;\r\n\r\n\t\t\t// Sometimes synchronization fails, make sure pendingRequest is never < 0\r\n\t\t\tif ( this.pendingRequest < 0 ) {\r\n\t\t\t\tthis.pendingRequest = 0;\r\n\t\t\t}\r\n\t\t\tdelete this.pending[ element.name ];\r\n\t\t\t$( element ).removeClass( this.settings.pendingClass );\r\n\t\t\tif ( valid && this.pendingRequest === 0 && this.formSubmitted && this.form() ) {\r\n\t\t\t\t$( this.currentForm ).submit();\r\n\r\n\t\t\t\t// Remove the hidden input that was used as a replacement for the\r\n\t\t\t\t// missing submit button. The hidden input is added by `handle()`\r\n\t\t\t\t// to ensure that the value of the used submit button is passed on\r\n\t\t\t\t// for scripted submits triggered by this method\r\n\t\t\t\tif ( this.submitButton ) {\r\n\t\t\t\t\t$( \"input:hidden[name='\" + this.submitButton.name + \"']\", this.currentForm ).remove();\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis.formSubmitted = false;\r\n\t\t\t} else if ( !valid && this.pendingRequest === 0 && this.formSubmitted ) {\r\n\t\t\t\t$( this.currentForm ).triggerHandler( \"invalid-form\", [ this ] );\r\n\t\t\t\tthis.formSubmitted = false;\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\tpreviousValue: function( element, method ) {\r\n\t\t\tmethod = typeof method === \"string\" && method || \"remote\";\r\n\r\n\t\t\treturn $.data( element, \"previousValue\" ) || $.data( element, \"previousValue\", {\r\n\t\t\t\told: null,\r\n\t\t\t\tvalid: true,\r\n\t\t\t\tmessage: this.defaultMessage( element, { method: method } )\r\n\t\t\t} );\r\n\t\t},\r\n\r\n\t\t// Cleans up all forms and elements, removes validator-specific events\r\n\t\tdestroy: function() {\r\n\t\t\tthis.resetForm();\r\n\r\n\t\t\t$( this.currentForm )\r\n\t\t\t\t.off( \".validate\" )\r\n\t\t\t\t.removeData( \"validator\" )\r\n\t\t\t\t.find( \".validate-equalTo-blur\" )\r\n\t\t\t\t\t.off( \".validate-equalTo\" )\r\n\t\t\t\t\t.removeClass( \"validate-equalTo-blur\" )\r\n\t\t\t\t.find( \".validate-lessThan-blur\" )\r\n\t\t\t\t\t.off( \".validate-lessThan\" )\r\n\t\t\t\t\t.removeClass( \"validate-lessThan-blur\" )\r\n\t\t\t\t.find( \".validate-lessThanEqual-blur\" )\r\n\t\t\t\t\t.off( \".validate-lessThanEqual\" )\r\n\t\t\t\t\t.removeClass( \"validate-lessThanEqual-blur\" )\r\n\t\t\t\t.find( \".validate-greaterThanEqual-blur\" )\r\n\t\t\t\t\t.off( \".validate-greaterThanEqual\" )\r\n\t\t\t\t\t.removeClass( \"validate-greaterThanEqual-blur\" )\r\n\t\t\t\t.find( \".validate-greaterThan-blur\" )\r\n\t\t\t\t\t.off( \".validate-greaterThan\" )\r\n\t\t\t\t\t.removeClass( \"validate-greaterThan-blur\" );\r\n\t\t}\r\n\r\n\t},\r\n\r\n\tclassRuleSettings: {\r\n\t\trequired: { required: true },\r\n\t\temail: { email: true },\r\n\t\turl: { url: true },\r\n\t\tdate: { date: true },\r\n\t\tdateISO: { dateISO: true },\r\n\t\tnumber: { number: true },\r\n\t\tdigits: { digits: true },\r\n\t\tcreditcard: { creditcard: true }\r\n\t},\r\n\r\n\taddClassRules: function( className, rules ) {\r\n\t\tif ( className.constructor === String ) {\r\n\t\t\tthis.classRuleSettings[ className ] = rules;\r\n\t\t} else {\r\n\t\t\t$.extend( this.classRuleSettings, className );\r\n\t\t}\r\n\t},\r\n\r\n\tclassRules: function( element ) {\r\n\t\tvar rules = {},\r\n\t\t\tclasses = $( element ).attr( \"class\" );\r\n\r\n\t\tif ( classes ) {\r\n\t\t\t$.each( classes.split( \" \" ), function() {\r\n\t\t\t\tif ( this in $.validator.classRuleSettings ) {\r\n\t\t\t\t\t$.extend( rules, $.validator.classRuleSettings[ this ] );\r\n\t\t\t\t}\r\n\t\t\t} );\r\n\t\t}\r\n\t\treturn rules;\r\n\t},\r\n\r\n\tnormalizeAttributeRule: function( rules, type, method, value ) {\r\n\r\n\t\t// Convert the value to a number for number inputs, and for text for backwards compability\r\n\t\t// allows type=\"date\" and others to be compared as strings\r\n\t\tif ( /min|max|step/.test( method ) && ( type === null || /number|range|text/.test( type ) ) ) {\r\n\t\t\tvalue = Number( value );\r\n\r\n\t\t\t// Support Opera Mini, which returns NaN for undefined minlength\r\n\t\t\tif ( isNaN( value ) ) {\r\n\t\t\t\tvalue = undefined;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif ( value || value === 0 ) {\r\n\t\t\trules[ method ] = value;\r\n\t\t} else if ( type === method && type !== \"range\" ) {\r\n\r\n\t\t\t// Exception: the jquery validate 'range' method\r\n\t\t\t// does not test for the html5 'range' type\r\n\t\t\trules[ method ] = true;\r\n\t\t}\r\n\t},\r\n\r\n\tattributeRules: function( element ) {\r\n\t\tvar rules = {},\r\n\t\t\t$element = $( element ),\r\n\t\t\ttype = element.getAttribute( \"type\" ),\r\n\t\t\tmethod, value;\r\n\r\n\t\tfor ( method in $.validator.methods ) {\r\n\r\n\t\t\t// Support for in both html5 and older browsers\r\n\t\t\tif ( method === \"required\" ) {\r\n\t\t\t\tvalue = element.getAttribute( method );\r\n\r\n\t\t\t\t// Some browsers return an empty string for the required attribute\r\n\t\t\t\t// and non-HTML5 browsers might have required=\"\" markup\r\n\t\t\t\tif ( value === \"\" ) {\r\n\t\t\t\t\tvalue = true;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// Force non-HTML5 browsers to return bool\r\n\t\t\t\tvalue = !!value;\r\n\t\t\t} else {\r\n\t\t\t\tvalue = $element.attr( method );\r\n\t\t\t}\r\n\r\n\t\t\tthis.normalizeAttributeRule( rules, type, method, value );\r\n\t\t}\r\n\r\n\t\t// 'maxlength' may be returned as -1, 2147483647 ( IE ) and 524288 ( safari ) for text inputs\r\n\t\tif ( rules.maxlength && /-1|2147483647|524288/.test( rules.maxlength ) ) {\r\n\t\t\tdelete rules.maxlength;\r\n\t\t}\r\n\r\n\t\treturn rules;\r\n\t},\r\n\r\n\tdataRules: function( element ) {\r\n\t\tvar rules = {},\r\n\t\t\t$element = $( element ),\r\n\t\t\ttype = element.getAttribute( \"type\" ),\r\n\t\t\tmethod, value;\r\n\r\n\t\tfor ( method in $.validator.methods ) {\r\n\t\t\tvalue = $element.data( \"rule\" + method.charAt( 0 ).toUpperCase() + method.substring( 1 ).toLowerCase() );\r\n\r\n\t\t\t// Cast empty attributes like `data-rule-required` to `true`\r\n\t\t\tif ( value === \"\" ) {\r\n\t\t\t\tvalue = true;\r\n\t\t\t}\r\n\r\n\t\t\tthis.normalizeAttributeRule( rules, type, method, value );\r\n\t\t}\r\n\t\treturn rules;\r\n\t},\r\n\r\n\tstaticRules: function( element ) {\r\n\t\tvar rules = {},\r\n\t\t\tvalidator = $.data( element.form, \"validator\" );\r\n\r\n\t\tif ( validator.settings.rules ) {\r\n\t\t\trules = $.validator.normalizeRule( validator.settings.rules[ element.name ] ) || {};\r\n\t\t}\r\n\t\treturn rules;\r\n\t},\r\n\r\n\tnormalizeRules: function( rules, element ) {\r\n\r\n\t\t// Handle dependency check\r\n\t\t$.each( rules, function( prop, val ) {\r\n\r\n\t\t\t// Ignore rule when param is explicitly false, eg. required:false\r\n\t\t\tif ( val === false ) {\r\n\t\t\t\tdelete rules[ prop ];\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tif ( val.param || val.depends ) {\r\n\t\t\t\tvar keepRule = true;\r\n\t\t\t\tswitch ( typeof val.depends ) {\r\n\t\t\t\tcase \"string\":\r\n\t\t\t\t\tkeepRule = !!$( val.depends, element.form ).length;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase \"function\":\r\n\t\t\t\t\tkeepRule = val.depends.call( element, element );\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t\tif ( keepRule ) {\r\n\t\t\t\t\trules[ prop ] = val.param !== undefined ? val.param : true;\r\n\t\t\t\t} else {\r\n\t\t\t\t\t$.data( element.form, \"validator\" ).resetElements( $( element ) );\r\n\t\t\t\t\tdelete rules[ prop ];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t} );\r\n\r\n\t\t// Evaluate parameters\r\n\t\t$.each( rules, function( rule, parameter ) {\r\n\t\t\trules[ rule ] = $.isFunction( parameter ) && rule !== \"normalizer\" ? parameter( element ) : parameter;\r\n\t\t} );\r\n\r\n\t\t// Clean number parameters\r\n\t\t$.each( [ \"minlength\", \"maxlength\" ], function() {\r\n\t\t\tif ( rules[ this ] ) {\r\n\t\t\t\trules[ this ] = Number( rules[ this ] );\r\n\t\t\t}\r\n\t\t} );\r\n\t\t$.each( [ \"rangelength\", \"range\" ], function() {\r\n\t\t\tvar parts;\r\n\t\t\tif ( rules[ this ] ) {\r\n\t\t\t\tif ( $.isArray( rules[ this ] ) ) {\r\n\t\t\t\t\trules[ this ] = [ Number( rules[ this ][ 0 ] ), Number( rules[ this ][ 1 ] ) ];\r\n\t\t\t\t} else if ( typeof rules[ this ] === \"string\" ) {\r\n\t\t\t\t\tparts = rules[ this ].replace( /[\\[\\]]/g, \"\" ).split( /[\\s,]+/ );\r\n\t\t\t\t\trules[ this ] = [ Number( parts[ 0 ] ), Number( parts[ 1 ] ) ];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t} );\r\n\r\n\t\tif ( $.validator.autoCreateRanges ) {\r\n\r\n\t\t\t// Auto-create ranges\r\n\t\t\tif ( rules.min != null && rules.max != null ) {\r\n\t\t\t\trules.range = [ rules.min, rules.max ];\r\n\t\t\t\tdelete rules.min;\r\n\t\t\t\tdelete rules.max;\r\n\t\t\t}\r\n\t\t\tif ( rules.minlength != null && rules.maxlength != null ) {\r\n\t\t\t\trules.rangelength = [ rules.minlength, rules.maxlength ];\r\n\t\t\t\tdelete rules.minlength;\r\n\t\t\t\tdelete rules.maxlength;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn rules;\r\n\t},\r\n\r\n\t// Converts a simple string to a {string: true} rule, e.g., \"required\" to {required:true}\r\n\tnormalizeRule: function( data ) {\r\n\t\tif ( typeof data === \"string\" ) {\r\n\t\t\tvar transformed = {};\r\n\t\t\t$.each( data.split( /\\s/ ), function() {\r\n\t\t\t\ttransformed[ this ] = true;\r\n\t\t\t} );\r\n\t\t\tdata = transformed;\r\n\t\t}\r\n\t\treturn data;\r\n\t},\r\n\r\n\t// https://jqueryvalidation.org/jQuery.validator.addMethod/\r\n\taddMethod: function( name, method, message ) {\r\n\t\t$.validator.methods[ name ] = method;\r\n\t\t$.validator.messages[ name ] = message !== undefined ? message : $.validator.messages[ name ];\r\n\t\tif ( method.length < 3 ) {\r\n\t\t\t$.validator.addClassRules( name, $.validator.normalizeRule( name ) );\r\n\t\t}\r\n\t},\r\n\r\n\t// https://jqueryvalidation.org/jQuery.validator.methods/\r\n\tmethods: {\r\n\r\n\t\t// https://jqueryvalidation.org/required-method/\r\n\t\trequired: function( value, element, param ) {\r\n\r\n\t\t\t// Check if dependency is met\r\n\t\t\tif ( !this.depend( param, element ) ) {\r\n\t\t\t\treturn \"dependency-mismatch\";\r\n\t\t\t}\r\n\t\t\tif ( element.nodeName.toLowerCase() === \"select\" ) {\r\n\r\n\t\t\t\t// Could be an array for select-multiple or a string, both are fine this way\r\n\t\t\t\tvar val = $( element ).val();\r\n\t\t\t\treturn val && val.length > 0;\r\n\t\t\t}\r\n\t\t\tif ( this.checkable( element ) ) {\r\n\t\t\t\treturn this.getLength( value, element ) > 0;\r\n\t\t\t}\r\n\t\t\treturn value !== undefined && value !== null && value.length > 0;\r\n\t\t},\r\n\r\n\t\t// https://jqueryvalidation.org/email-method/\r\n\t\temail: function( value, element ) {\r\n\r\n\t\t\t// From https://html.spec.whatwg.org/multipage/forms.html#valid-e-mail-address\r\n\t\t\t// Retrieved 2014-01-14\r\n\t\t\t// If you have a problem with this implementation, report a bug against the above spec\r\n\t\t\t// Or use custom methods to implement your own email validation\r\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 );\r\n\t\t},\r\n\r\n\t\t// https://jqueryvalidation.org/url-method/\r\n\t\turl: function( value, element ) {\r\n\r\n\t\t\t// Copyright (c) 2010-2013 Diego Perini, MIT licensed\r\n\t\t\t// https://gist.github.com/dperini/729294\r\n\t\t\t// see also https://mathiasbynens.be/demo/url-regex\r\n\t\t\t// modified to allow protocol-relative URLs\r\n\t\t\treturn this.optional( element ) || /^(?:(?:(?:https?|ftp):)?\\/\\/)(?:\\S+(?::\\S*)?@)?(?:(?!(?: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-z\\u00a1-\\uffff0-9]-*)*[a-z\\u00a1-\\uffff0-9]+)(?:\\.(?:[a-z\\u00a1-\\uffff0-9]-*)*[a-z\\u00a1-\\uffff0-9]+)*(?:\\.(?:[a-z\\u00a1-\\uffff]{2,})).?)(?::\\d{2,5})?(?:[/?#]\\S*)?$/i.test( value );\r\n\t\t},\r\n\r\n\t\t// https://jqueryvalidation.org/date-method/\r\n\t\tdate: ( function() {\r\n\t\t\tvar called = false;\r\n\r\n\t\t\treturn function( value, element ) {\r\n\t\t\t\tif ( !called ) {\r\n\t\t\t\t\tcalled = true;\r\n\t\t\t\t\tif ( this.settings.debug && window.console ) {\r\n\t\t\t\t\t\tconsole.warn(\r\n\t\t\t\t\t\t\t\"The `date` method is deprecated and will be removed in version '2.0.0'.\\n\" +\r\n\t\t\t\t\t\t\t\"Please don't use it, since it relies on the Date constructor, which\\n\" +\r\n\t\t\t\t\t\t\t\"behaves very differently across browsers and locales. Use `dateISO`\\n\" +\r\n\t\t\t\t\t\t\t\"instead or one of the locale specific methods in `localizations/`\\n\" +\r\n\t\t\t\t\t\t\t\"and `additional-methods.js`.\"\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn this.optional( element ) || !/Invalid|NaN/.test( new Date( value ).toString() );\r\n\t\t\t};\r\n\t\t}() ),\r\n\r\n\t\t// https://jqueryvalidation.org/dateISO-method/\r\n\t\tdateISO: function( value, element ) {\r\n\t\t\treturn this.optional( element ) || /^\\d{4}[\\/\\-](0?[1-9]|1[012])[\\/\\-](0?[1-9]|[12][0-9]|3[01])$/.test( value );\r\n\t\t},\r\n\r\n\t\t// https://jqueryvalidation.org/number-method/\r\n\t\tnumber: function( value, element ) {\r\n\t\t\treturn this.optional( element ) || /^(?:-?\\d+|-?\\d{1,3}(?:,\\d{3})+)?(?:\\.\\d+)?$/.test( value );\r\n\t\t},\r\n\r\n\t\t// https://jqueryvalidation.org/digits-method/\r\n\t\tdigits: function( value, element ) {\r\n\t\t\treturn this.optional( element ) || /^\\d+$/.test( value );\r\n\t\t},\r\n\r\n\t\t// https://jqueryvalidation.org/minlength-method/\r\n\t\tminlength: function( value, element, param ) {\r\n\t\t\tvar length = $.isArray( value ) ? value.length : this.getLength( value, element );\r\n\t\t\treturn this.optional( element ) || length >= param;\r\n\t\t},\r\n\r\n\t\t// https://jqueryvalidation.org/maxlength-method/\r\n\t\tmaxlength: function( value, element, param ) {\r\n\t\t\tvar length = $.isArray( value ) ? value.length : this.getLength( value, element );\r\n\t\t\treturn this.optional( element ) || length <= param;\r\n\t\t},\r\n\r\n\t\t// https://jqueryvalidation.org/rangelength-method/\r\n\t\trangelength: function( value, element, param ) {\r\n\t\t\tvar length = $.isArray( value ) ? value.length : this.getLength( value, element );\r\n\t\t\treturn this.optional( element ) || ( length >= param[ 0 ] && length <= param[ 1 ] );\r\n\t\t},\r\n\r\n\t\t// https://jqueryvalidation.org/min-method/\r\n\t\tmin: function( value, element, param ) {\r\n\t\t\treturn this.optional( element ) || value >= param;\r\n\t\t},\r\n\r\n\t\t// https://jqueryvalidation.org/max-method/\r\n\t\tmax: function( value, element, param ) {\r\n\t\t\treturn this.optional( element ) || value <= param;\r\n\t\t},\r\n\r\n\t\t// https://jqueryvalidation.org/range-method/\r\n\t\trange: function( value, element, param ) {\r\n\t\t\treturn this.optional( element ) || ( value >= param[ 0 ] && value <= param[ 1 ] );\r\n\t\t},\r\n\r\n\t\t// https://jqueryvalidation.org/step-method/\r\n\t\tstep: function( value, element, param ) {\r\n\t\t\tvar type = $( element ).attr( \"type\" ),\r\n\t\t\t\terrorMessage = \"Step attribute on input type \" + type + \" is not supported.\",\r\n\t\t\t\tsupportedTypes = [ \"text\", \"number\", \"range\" ],\r\n\t\t\t\tre = new RegExp( \"\\\\b\" + type + \"\\\\b\" ),\r\n\t\t\t\tnotSupported = type && !re.test( supportedTypes.join() ),\r\n\t\t\t\tdecimalPlaces = function( num ) {\r\n\t\t\t\t\tvar match = ( \"\" + num ).match( /(?:\\.(\\d+))?$/ );\r\n\t\t\t\t\tif ( !match ) {\r\n\t\t\t\t\t\treturn 0;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t// Number of digits right of decimal point.\r\n\t\t\t\t\treturn match[ 1 ] ? match[ 1 ].length : 0;\r\n\t\t\t\t},\r\n\t\t\t\ttoInt = function( num ) {\r\n\t\t\t\t\treturn Math.round( num * Math.pow( 10, decimals ) );\r\n\t\t\t\t},\r\n\t\t\t\tvalid = true,\r\n\t\t\t\tdecimals;\r\n\r\n\t\t\t// Works only for text, number and range input types\r\n\t\t\t// TODO find a way to support input types date, datetime, datetime-local, month, time and week\r\n\t\t\tif ( notSupported ) {\r\n\t\t\t\tthrow new Error( errorMessage );\r\n\t\t\t}\r\n\r\n\t\t\tdecimals = decimalPlaces( param );\r\n\r\n\t\t\t// Value can't have too many decimals\r\n\t\t\tif ( decimalPlaces( value ) > decimals || toInt( value ) % toInt( param ) !== 0 ) {\r\n\t\t\t\tvalid = false;\r\n\t\t\t}\r\n\r\n\t\t\treturn this.optional( element ) || valid;\r\n\t\t},\r\n\r\n\t\t// https://jqueryvalidation.org/equalTo-method/\r\n\t\tequalTo: function( value, element, param ) {\r\n\r\n\t\t\t// Bind to the blur event of the target in order to revalidate whenever the target field is updated\r\n\t\t\tvar target = $( param );\r\n\t\t\tif ( this.settings.onfocusout && target.not( \".validate-equalTo-blur\" ).length ) {\r\n\t\t\t\ttarget.addClass( \"validate-equalTo-blur\" ).on( \"blur.validate-equalTo\", function() {\r\n\t\t\t\t\t$( element ).valid();\r\n\t\t\t\t} );\r\n\t\t\t}\r\n\t\t\treturn value === target.val();\r\n\t\t},\r\n\r\n\t\t// https://jqueryvalidation.org/remote-method/\r\n\t\tremote: function( value, element, param, method ) {\r\n\t\t\tif ( this.optional( element ) ) {\r\n\t\t\t\treturn \"dependency-mismatch\";\r\n\t\t\t}\r\n\r\n\t\t\tmethod = typeof method === \"string\" && method || \"remote\";\r\n\r\n\t\t\tvar previous = this.previousValue( element, method ),\r\n\t\t\t\tvalidator, data, optionDataString;\r\n\r\n\t\t\tif ( !this.settings.messages[ element.name ] ) {\r\n\t\t\t\tthis.settings.messages[ element.name ] = {};\r\n\t\t\t}\r\n\t\t\tprevious.originalMessage = previous.originalMessage || this.settings.messages[ element.name ][ method ];\r\n\t\t\tthis.settings.messages[ element.name ][ method ] = previous.message;\r\n\r\n\t\t\tparam = typeof param === \"string\" && { url: param } || param;\r\n\t\t\toptionDataString = $.param( $.extend( { data: value }, param.data ) );\r\n\t\t\tif ( previous.old === optionDataString ) {\r\n\t\t\t\treturn previous.valid;\r\n\t\t\t}\r\n\r\n\t\t\tprevious.old = optionDataString;\r\n\t\t\tvalidator = this;\r\n\t\t\tthis.startRequest( element );\r\n\t\t\tdata = {};\r\n\t\t\tdata[ element.name ] = value;\r\n\t\t\t$.ajax( $.extend( true, {\r\n\t\t\t\tmode: \"abort\",\r\n\t\t\t\tport: \"validate\" + element.name,\r\n\t\t\t\tdataType: \"json\",\r\n\t\t\t\tdata: data,\r\n\t\t\t\tcontext: validator.currentForm,\r\n\t\t\t\tsuccess: function( response ) {\r\n\t\t\t\t\tvar valid = response === true || response === \"true\",\r\n\t\t\t\t\t\terrors, message, submitted;\r\n\r\n\t\t\t\t\tvalidator.settings.messages[ element.name ][ method ] = previous.originalMessage;\r\n\t\t\t\t\tif ( valid ) {\r\n\t\t\t\t\t\tsubmitted = validator.formSubmitted;\r\n\t\t\t\t\t\tvalidator.resetInternals();\r\n\t\t\t\t\t\tvalidator.toHide = validator.errorsFor( element );\r\n\t\t\t\t\t\tvalidator.formSubmitted = submitted;\r\n\t\t\t\t\t\tvalidator.successList.push( element );\r\n\t\t\t\t\t\tvalidator.invalid[ element.name ] = false;\r\n\t\t\t\t\t\tvalidator.showErrors();\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\terrors = {};\r\n\t\t\t\t\t\tmessage = response || validator.defaultMessage( element, { method: method, parameters: value } );\r\n\t\t\t\t\t\terrors[ element.name ] = previous.message = message;\r\n\t\t\t\t\t\tvalidator.invalid[ element.name ] = true;\r\n\t\t\t\t\t\tvalidator.showErrors( errors );\r\n\t\t\t\t\t}\r\n\t\t\t\t\tprevious.valid = valid;\r\n\t\t\t\t\tvalidator.stopRequest( element, valid );\r\n\t\t\t\t}\r\n\t\t\t}, param ) );\r\n\t\t\treturn \"pending\";\r\n\t\t}\r\n\t}\r\n\r\n} );\r\n\r\n// Ajax mode: abort\r\n// usage: $.ajax({ mode: \"abort\"[, port: \"uniqueport\"]});\r\n// if mode:\"abort\" is used, the previous request on that port (port can be undefined) is aborted via XMLHttpRequest.abort()\r\n\r\nvar pendingRequests = {},\r\n\tajax;\r\n\r\n// Use a prefilter if available (1.5+)\r\nif ( $.ajaxPrefilter ) {\r\n\t$.ajaxPrefilter( function( settings, _, xhr ) {\r\n\t\tvar port = settings.port;\r\n\t\tif ( settings.mode === \"abort\" ) {\r\n\t\t\tif ( pendingRequests[ port ] ) {\r\n\t\t\t\tpendingRequests[ port ].abort();\r\n\t\t\t}\r\n\t\t\tpendingRequests[ port ] = xhr;\r\n\t\t}\r\n\t} );\r\n} else {\r\n\r\n\t// Proxy ajax\r\n\tajax = $.ajax;\r\n\t$.ajax = function( settings ) {\r\n\t\tvar mode = ( \"mode\" in settings ? settings : $.ajaxSettings ).mode,\r\n\t\t\tport = ( \"port\" in settings ? settings : $.ajaxSettings ).port;\r\n\t\tif ( mode === \"abort\" ) {\r\n\t\t\tif ( pendingRequests[ port ] ) {\r\n\t\t\t\tpendingRequests[ port ].abort();\r\n\t\t\t}\r\n\t\t\tpendingRequests[ port ] = ajax.apply( this, arguments );\r\n\t\t\treturn pendingRequests[ port ];\r\n\t\t}\r\n\t\treturn ajax.apply( this, arguments );\r\n\t};\r\n}\r\nreturn $;\r\n}));","/*!\r\n * jQuery Validate Unobtrusive Bootstrap 1.2.3\r\n *\r\n * https://github.com/sandrocaseiro/jquery.validate.unobtrusive.bootstrap\r\n *\r\n * Copyright 2014 Sandro Caseiro\r\n * Released under the MIT license:\r\n * http://www.opensource.org/licenses/mit-license.php\r\n */\r\n\r\n(function($)\r\n{\r\n\tfunction escapeAttributeValue(value)\r\n\t{\r\n\t\t// As mentioned on http://api.jquery.com/category/selectors/\r\n\t\treturn value.replace(/([!\"#$%&'()*+,./:;<=>?@\\[\\\\\\]^`{|}~])/g, \"\\\\$1\");\r\n\t}\r\n\r\n\tfunction addErrorClass(element)\r\n\t{\r\n\t\tvar group = element.closest('.form-group');\r\n\t\tif (group && group.length > 0)\r\n\t\t{\r\n\t\t\tgroup.addClass('has-error').removeClass('has-success');\r\n\t\t}\r\n\t}\r\n\r\n\tfunction addSuccessClass(element)\r\n\t{\r\n\t\tvar group = element.closest('.form-group');\r\n\t\tif (group && group.length > 0)\r\n\t\t{\r\n\t\t\tgroup.addClass('has-success').removeClass('has-error');\r\n\t\t}\r\n\t}\r\n\r\n\tfunction onError(formElement, errorPlacementBase, error, inputElement)\r\n\t{\r\n\t\terrorPlacementBase(error, inputElement);\r\n\r\n\t\tif ($(inputElement).hasClass('input-validation-error'))\r\n\t\t{\r\n\t\t\taddErrorClass(inputElement)\r\n\t\t}\r\n\t}\r\n\r\n\tfunction onSuccess(successBase, error)\r\n\t{\r\n\t\tvar container = error.data(\"unobtrusiveContainer\");\r\n\r\n\t\tsuccessBase(error);\r\n\r\n\t\tif (container)\r\n\t\t{\r\n\t\t\taddSuccessClass(container);\r\n\t\t}\r\n\t}\r\n\r\n\t$.fn.validateBootstrap = function(refresh)\r\n\t{\r\n\t\treturn this.each(function()\r\n\t\t{\r\n\t\t\tvar $this = $(this);\r\n\t\t\tif (refresh)\r\n\t\t\t{\r\n\t\t\t\t$this.removeData('validator');\r\n\t\t\t\t$this.removeData('unobtrusiveValidation');\r\n\t\t\t\t$.validator.unobtrusive.parse($this);\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tvar validator = $this.data('validator');\r\n\r\n\t\t\tif (validator)\r\n\t\t\t{\r\n\t\t\t\tvalidator.settings.errorClass += ' text-danger';\r\n\t\t\t\tvar errorPlacementBase = validator.settings.errorPlacement;\r\n\t\t\t\tvar successBase = validator.settings.success;\r\n\r\n\t\t\t\tvalidator.settings.errorPlacement = function(error, inputElement)\r\n\t\t\t\t{\r\n\t\t\t\t\tonError($this, errorPlacementBase, error, inputElement);\r\n\t\t\t\t};\r\n\r\n\t\t\t\tvalidator.settings.success = function(error)\r\n\t\t\t\t{\r\n\t\t\t\t\tonSuccess(successBase, error);\r\n\t\t\t\t}\r\n\r\n\t\t\t\t$this.find('.input-validation-error').each(function()\r\n\t\t\t\t{\r\n\t\t\t\t\tvar errorElement = $this.find(\"[data-valmsg-for='\" + escapeAttributeValue($(this)[0].name) + \"']\");\r\n\t\t\t\t\tvar newElement = $(document.createElement(validator.settings.errorElement))\r\n\t\t\t\t\t\t.addClass('text-danger')\r\n\t\t\t\t\t\t.attr('for', escapeAttributeValue($(this)[0].name))\r\n\t\t\t\t\t\t.text(errorElement.text());\r\n\t\t\t\t\tonError($this, errorPlacementBase, newElement, $(this));\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t\t// if validation isn't enabled, but the form has the validation error message element, add error class to container\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\t$this.find('.input-validation-error').each(function()\r\n\t\t\t\t{\r\n\t\t\t\t\taddErrorClass($(this));\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t});\r\n\t};\r\n\r\n\t$(function()\r\n\t{\r\n\t\t$('form').validateBootstrap();\r\n\t});\r\n\r\n}(jQuery));","/**\r\n * @license\r\n * Unobtrusive validation support library for jQuery and jQuery Validate\r\n * Copyright (c) .NET Foundation. All rights reserved.\r\n * Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.\r\n * @version v4.0.0\r\n */\r\n\r\n/*jslint white: true, browser: true, onevar: true, undef: true, nomen: true, eqeqeq: true, plusplus: true, bitwise: true, regexp: true, newcap: true, immed: true, strict: false */\r\n/*global document: false, jQuery: false */\r\n\r\n(function (factory) {\r\n if (typeof define === 'function' && define.amd) {\r\n // AMD. Register as an anonymous module.\r\n define(\"jquery.validate.unobtrusive\", ['jquery-validation'], factory);\r\n } else if (typeof module === 'object' && module.exports) {\r\n // CommonJS-like environments that support module.exports \r\n module.exports = factory(require('jquery-validation'));\r\n } else {\r\n // Browser global\r\n jQuery.validator.unobtrusive = factory(jQuery);\r\n }\r\n}(function ($) {\r\n var $jQval = $.validator,\r\n adapters,\r\n data_validation = \"unobtrusiveValidation\";\r\n\r\n function setValidationValues(options, ruleName, value) {\r\n options.rules[ruleName] = value;\r\n if (options.message) {\r\n options.messages[ruleName] = options.message;\r\n }\r\n }\r\n\r\n function splitAndTrim(value) {\r\n return value.replace(/^\\s+|\\s+$/g, \"\").split(/\\s*,\\s*/g);\r\n }\r\n\r\n function escapeAttributeValue(value) {\r\n // As mentioned on http://api.jquery.com/category/selectors/\r\n return value.replace(/([!\"#$%&'()*+,./:;<=>?@\\[\\\\\\]^`{|}~])/g, \"\\\\$1\");\r\n }\r\n\r\n function getModelPrefix(fieldName) {\r\n return fieldName.substr(0, fieldName.lastIndexOf(\".\") + 1);\r\n }\r\n\r\n function appendModelPrefix(value, prefix) {\r\n if (value.indexOf(\"*.\") === 0) {\r\n value = value.replace(\"*.\", prefix);\r\n }\r\n return value;\r\n }\r\n\r\n function onError(error, inputElement) { // 'this' is the form element\r\n var container = $(this).find(\"[data-valmsg-for='\" + escapeAttributeValue(inputElement[0].name) + \"']\"),\r\n replaceAttrValue = container.attr(\"data-valmsg-replace\"),\r\n replace = replaceAttrValue ? $.parseJSON(replaceAttrValue) !== false : null;\r\n\r\n container.removeClass(\"field-validation-valid\").addClass(\"field-validation-error\");\r\n error.data(\"unobtrusiveContainer\", container);\r\n\r\n if (replace) {\r\n container.empty();\r\n error.removeClass(\"input-validation-error\").appendTo(container);\r\n }\r\n else {\r\n error.hide();\r\n }\r\n }\r\n\r\n function onErrors(event, validator) { // 'this' is the form element\r\n var container = $(this).find(\"[data-valmsg-summary=true]\"),\r\n list = container.find(\"ul\");\r\n\r\n if (list && list.length && validator.errorList.length) {\r\n list.empty();\r\n container.addClass(\"validation-summary-errors\").removeClass(\"validation-summary-valid\");\r\n\r\n $.each(validator.errorList, function () {\r\n $(\"
  • \").html(this.message).appendTo(list);\r\n });\r\n }\r\n }\r\n\r\n function onSuccess(error) { // 'this' is the form element\r\n var container = error.data(\"unobtrusiveContainer\");\r\n\r\n if (container) {\r\n var replaceAttrValue = container.attr(\"data-valmsg-replace\"),\r\n replace = replaceAttrValue ? $.parseJSON(replaceAttrValue) : null;\r\n\r\n container.addClass(\"field-validation-valid\").removeClass(\"field-validation-error\");\r\n error.removeData(\"unobtrusiveContainer\");\r\n\r\n if (replace) {\r\n container.empty();\r\n }\r\n }\r\n }\r\n\r\n function onReset(event) { // 'this' is the form element\r\n var $form = $(this),\r\n key = '__jquery_unobtrusive_validation_form_reset';\r\n if ($form.data(key)) {\r\n return;\r\n }\r\n // Set a flag that indicates we're currently resetting the form.\r\n $form.data(key, true);\r\n try {\r\n $form.data(\"validator\").resetForm();\r\n } finally {\r\n $form.removeData(key);\r\n }\r\n\r\n $form.find(\".validation-summary-errors\")\r\n .addClass(\"validation-summary-valid\")\r\n .removeClass(\"validation-summary-errors\");\r\n $form.find(\".field-validation-error\")\r\n .addClass(\"field-validation-valid\")\r\n .removeClass(\"field-validation-error\")\r\n .removeData(\"unobtrusiveContainer\")\r\n .find(\">*\") // If we were using valmsg-replace, get the underlying error\r\n .removeData(\"unobtrusiveContainer\");\r\n }\r\n\r\n function validationInfo(form) {\r\n var $form = $(form),\r\n result = $form.data(data_validation),\r\n onResetProxy = $.proxy(onReset, form),\r\n defaultOptions = $jQval.unobtrusive.options || {},\r\n execInContext = function (name, args) {\r\n var func = defaultOptions[name];\r\n func && $.isFunction(func) && func.apply(form, args);\r\n };\r\n\r\n if (!result) {\r\n result = {\r\n options: { // options structure passed to jQuery Validate's validate() method\r\n errorClass: defaultOptions.errorClass || \"input-validation-error\",\r\n errorElement: defaultOptions.errorElement || \"span\",\r\n errorPlacement: function () {\r\n onError.apply(form, arguments);\r\n execInContext(\"errorPlacement\", arguments);\r\n },\r\n invalidHandler: function () {\r\n onErrors.apply(form, arguments);\r\n execInContext(\"invalidHandler\", arguments);\r\n },\r\n messages: {},\r\n rules: {},\r\n success: function () {\r\n onSuccess.apply(form, arguments);\r\n execInContext(\"success\", arguments);\r\n }\r\n },\r\n attachValidation: function () {\r\n $form\r\n .off(\"reset.\" + data_validation, onResetProxy)\r\n .on(\"reset.\" + data_validation, onResetProxy)\r\n .validate(this.options);\r\n },\r\n validate: function () { // a validation function that is called by unobtrusive Ajax\r\n $form.validate();\r\n return $form.valid();\r\n }\r\n };\r\n $form.data(data_validation, result);\r\n }\r\n\r\n return result;\r\n }\r\n\r\n $jQval.unobtrusive = {\r\n adapters: [],\r\n\r\n parseElement: function (element, skipAttach) {\r\n /// \r\n /// Parses a single HTML element for unobtrusive validation attributes.\r\n /// \r\n /// The HTML element to be parsed.\r\n /// [Optional] true to skip attaching the\r\n /// validation to the form. If parsing just this single element, you should specify true.\r\n /// If parsing several elements, you should specify false, and manually attach the validation\r\n /// to the form when you are finished. The default is false.\r\n var $element = $(element),\r\n form = $element.parents(\"form\")[0],\r\n valInfo, rules, messages;\r\n\r\n if (!form) { // Cannot do client-side validation without a form\r\n return;\r\n }\r\n\r\n valInfo = validationInfo(form);\r\n valInfo.options.rules[element.name] = rules = {};\r\n valInfo.options.messages[element.name] = messages = {};\r\n\r\n $.each(this.adapters, function () {\r\n var prefix = \"data-val-\" + this.name,\r\n message = $element.attr(prefix),\r\n paramValues = {};\r\n\r\n if (message !== undefined) { // Compare against undefined, because an empty message is legal (and falsy)\r\n prefix += \"-\";\r\n\r\n $.each(this.params, function () {\r\n paramValues[this] = $element.attr(prefix + this);\r\n });\r\n\r\n this.adapt({\r\n element: element,\r\n form: form,\r\n message: message,\r\n params: paramValues,\r\n rules: rules,\r\n messages: messages\r\n });\r\n }\r\n });\r\n\r\n $.extend(rules, { \"__dummy__\": true });\r\n\r\n if (!skipAttach) {\r\n valInfo.attachValidation();\r\n }\r\n },\r\n\r\n parse: function (selector) {\r\n /// \r\n /// Parses all the HTML elements in the specified selector. It looks for input elements decorated\r\n /// with the [data-val=true] attribute value and enables validation according to the data-val-*\r\n /// attribute values.\r\n /// \r\n /// Any valid jQuery selector.\r\n\r\n // $forms includes all forms in selector's DOM hierarchy (parent, children and self) that have at least one\r\n // element with data-val=true\r\n var $selector = $(selector),\r\n $forms = $selector.parents()\r\n .addBack()\r\n .filter(\"form\")\r\n .add($selector.find(\"form\"))\r\n .has(\"[data-val=true]\");\r\n\r\n $selector.find(\"[data-val=true]\").each(function () {\r\n $jQval.unobtrusive.parseElement(this, true);\r\n });\r\n\r\n $forms.each(function () {\r\n var info = validationInfo(this);\r\n if (info) {\r\n info.attachValidation();\r\n }\r\n });\r\n }\r\n };\r\n\r\n adapters = $jQval.unobtrusive.adapters;\r\n\r\n adapters.add = function (adapterName, params, fn) {\r\n /// Adds a new adapter to convert unobtrusive HTML into a jQuery Validate validation.\r\n /// The name of the adapter to be added. This matches the name used\r\n /// in the data-val-nnnn HTML attribute (where nnnn is the adapter name).\r\n /// [Optional] An array of parameter names (strings) that will\r\n /// be extracted from the data-val-nnnn-mmmm HTML attributes (where nnnn is the adapter name, and\r\n /// mmmm is the parameter name).\r\n /// The function to call, which adapts the values from the HTML\r\n /// attributes into jQuery Validate rules and/or messages.\r\n /// \r\n if (!fn) { // Called with no params, just a function\r\n fn = params;\r\n params = [];\r\n }\r\n this.push({ name: adapterName, params: params, adapt: fn });\r\n return this;\r\n };\r\n\r\n adapters.addBool = function (adapterName, ruleName) {\r\n /// Adds a new adapter to convert unobtrusive HTML into a jQuery Validate validation, where\r\n /// the jQuery Validate validation rule has no parameter values.\r\n /// The name of the adapter to be added. This matches the name used\r\n /// in the data-val-nnnn HTML attribute (where nnnn is the adapter name).\r\n /// [Optional] The name of the jQuery Validate rule. If not provided, the value\r\n /// of adapterName will be used instead.\r\n /// \r\n return this.add(adapterName, function (options) {\r\n setValidationValues(options, ruleName || adapterName, true);\r\n });\r\n };\r\n\r\n adapters.addMinMax = function (adapterName, minRuleName, maxRuleName, minMaxRuleName, minAttribute, maxAttribute) {\r\n /// Adds a new adapter to convert unobtrusive HTML into a jQuery Validate validation, where\r\n /// the jQuery Validate validation has three potential rules (one for min-only, one for max-only, and\r\n /// one for min-and-max). The HTML parameters are expected to be named -min and -max.\r\n /// The name of the adapter to be added. This matches the name used\r\n /// in the data-val-nnnn HTML attribute (where nnnn is the adapter name).\r\n /// The name of the jQuery Validate rule to be used when you only\r\n /// have a minimum value.\r\n /// The name of the jQuery Validate rule to be used when you only\r\n /// have a maximum value.\r\n /// The name of the jQuery Validate rule to be used when you\r\n /// have both a minimum and maximum value.\r\n /// [Optional] The name of the HTML attribute that\r\n /// contains the minimum value. The default is \"min\".\r\n /// [Optional] The name of the HTML attribute that\r\n /// contains the maximum value. The default is \"max\".\r\n /// \r\n return this.add(adapterName, [minAttribute || \"min\", maxAttribute || \"max\"], function (options) {\r\n var min = options.params.min,\r\n max = options.params.max;\r\n\r\n if (min && max) {\r\n setValidationValues(options, minMaxRuleName, [min, max]);\r\n }\r\n else if (min) {\r\n setValidationValues(options, minRuleName, min);\r\n }\r\n else if (max) {\r\n setValidationValues(options, maxRuleName, max);\r\n }\r\n });\r\n };\r\n\r\n adapters.addSingleVal = function (adapterName, attribute, ruleName) {\r\n /// Adds a new adapter to convert unobtrusive HTML into a jQuery Validate validation, where\r\n /// the jQuery Validate validation rule has a single value.\r\n /// The name of the adapter to be added. This matches the name used\r\n /// in the data-val-nnnn HTML attribute(where nnnn is the adapter name).\r\n /// [Optional] The name of the HTML attribute that contains the value.\r\n /// The default is \"val\".\r\n /// [Optional] The name of the jQuery Validate rule. If not provided, the value\r\n /// of adapterName will be used instead.\r\n /// \r\n return this.add(adapterName, [attribute || \"val\"], function (options) {\r\n setValidationValues(options, ruleName || adapterName, options.params[attribute]);\r\n });\r\n };\r\n\r\n $jQval.addMethod(\"__dummy__\", function (value, element, params) {\r\n return true;\r\n });\r\n\r\n $jQval.addMethod(\"regex\", function (value, element, params) {\r\n var match;\r\n if (this.optional(element)) {\r\n return true;\r\n }\r\n\r\n match = new RegExp(params).exec(value);\r\n return (match && (match.index === 0) && (match[0].length === value.length));\r\n });\r\n\r\n $jQval.addMethod(\"nonalphamin\", function (value, element, nonalphamin) {\r\n var match;\r\n if (nonalphamin) {\r\n match = value.match(/\\W/g);\r\n match = match && match.length >= nonalphamin;\r\n }\r\n return match;\r\n });\r\n\r\n if ($jQval.methods.extension) {\r\n adapters.addSingleVal(\"accept\", \"mimtype\");\r\n adapters.addSingleVal(\"extension\", \"extension\");\r\n } else {\r\n // for backward compatibility, when the 'extension' validation method does not exist, such as with versions\r\n // of JQuery Validation plugin prior to 1.10, we should use the 'accept' method for\r\n // validating the extension, and ignore mime-type validations as they are not supported.\r\n adapters.addSingleVal(\"extension\", \"extension\", \"accept\");\r\n }\r\n\r\n adapters.addSingleVal(\"regex\", \"pattern\");\r\n adapters.addBool(\"creditcard\").addBool(\"date\").addBool(\"digits\").addBool(\"email\").addBool(\"number\").addBool(\"url\");\r\n adapters.addMinMax(\"length\", \"minlength\", \"maxlength\", \"rangelength\").addMinMax(\"range\", \"min\", \"max\", \"range\");\r\n adapters.addMinMax(\"minlength\", \"minlength\").addMinMax(\"maxlength\", \"minlength\", \"maxlength\");\r\n adapters.add(\"equalto\", [\"other\"], function (options) {\r\n var prefix = getModelPrefix(options.element.name),\r\n other = options.params.other,\r\n fullOtherName = appendModelPrefix(other, prefix),\r\n element = $(options.form).find(\":input\").filter(\"[name='\" + escapeAttributeValue(fullOtherName) + \"']\")[0];\r\n\r\n setValidationValues(options, \"equalTo\", element);\r\n });\r\n adapters.add(\"required\", function (options) {\r\n // jQuery Validate equates \"required\" with \"mandatory\" for checkbox elements\r\n if (options.element.tagName.toUpperCase() !== \"INPUT\" || options.element.type.toUpperCase() !== \"CHECKBOX\") {\r\n setValidationValues(options, \"required\", true);\r\n }\r\n });\r\n adapters.add(\"remote\", [\"url\", \"type\", \"additionalfields\"], function (options) {\r\n var value = {\r\n url: options.params.url,\r\n type: options.params.type || \"GET\",\r\n data: {}\r\n },\r\n prefix = getModelPrefix(options.element.name);\r\n\r\n $.each(splitAndTrim(options.params.additionalfields || options.element.name), function (i, fieldName) {\r\n var paramName = appendModelPrefix(fieldName, prefix);\r\n value.data[paramName] = function () {\r\n var field = $(options.form).find(\":input\").filter(\"[name='\" + escapeAttributeValue(paramName) + \"']\");\r\n // For checkboxes and radio buttons, only pick up values from checked fields.\r\n if (field.is(\":checkbox\")) {\r\n return field.filter(\":checked\").val() || field.filter(\":hidden\").val() || '';\r\n }\r\n else if (field.is(\":radio\")) {\r\n return field.filter(\":checked\").val() || '';\r\n }\r\n return field.val();\r\n };\r\n });\r\n\r\n setValidationValues(options, \"remote\", value);\r\n });\r\n adapters.add(\"password\", [\"min\", \"nonalphamin\", \"regex\"], function (options) {\r\n if (options.params.min) {\r\n setValidationValues(options, \"minlength\", options.params.min);\r\n }\r\n if (options.params.nonalphamin) {\r\n setValidationValues(options, \"nonalphamin\", options.params.nonalphamin);\r\n }\r\n if (options.params.regex) {\r\n setValidationValues(options, \"regex\", options.params.regex);\r\n }\r\n });\r\n adapters.add(\"fileextensions\", [\"extensions\"], function (options) {\r\n setValidationValues(options, \"extension\", options.params.extensions);\r\n });\r\n\r\n $(function () {\r\n $jQval.unobtrusive.parse(document);\r\n });\r\n\r\n return $jQval.unobtrusive;\r\n}));\r\n\r\n// SIG // Begin signature block\r\n// SIG // MIInnwYJKoZIhvcNAQcCoIInkDCCJ4wCAQExDzANBglg\r\n// SIG // hkgBZQMEAgEFADB3BgorBgEEAYI3AgEEoGkwZzAyBgor\r\n// SIG // BgEEAYI3AgEeMCQCAQEEEBDgyQbOONQRoqMAEEvTUJAC\r\n// SIG // AQACAQACAQACAQACAQAwMTANBglghkgBZQMEAgEFAAQg\r\n// SIG // pCPo0ZtVE24ghUz4BvttWNOJo2KI5p4X9KD+kCoh/Q+g\r\n// SIG // gg2BMIIF/zCCA+egAwIBAgITMwAAAlKLM6r4lfM52wAA\r\n// SIG // AAACUjANBgkqhkiG9w0BAQsFADB+MQswCQYDVQQGEwJV\r\n// SIG // UzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMH\r\n// SIG // UmVkbW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBv\r\n// SIG // cmF0aW9uMSgwJgYDVQQDEx9NaWNyb3NvZnQgQ29kZSBT\r\n// SIG // aWduaW5nIFBDQSAyMDExMB4XDTIxMDkwMjE4MzI1OVoX\r\n// SIG // DTIyMDkwMTE4MzI1OVowdDELMAkGA1UEBhMCVVMxEzAR\r\n// SIG // BgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcTB1JlZG1v\r\n// SIG // bmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlv\r\n// SIG // bjEeMBwGA1UEAxMVTWljcm9zb2Z0IENvcnBvcmF0aW9u\r\n// SIG // MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA\r\n// SIG // 0OTPj7P1+wTbr+Qf9COrqA8I9DSTqNSq1UKju4IEV3HJ\r\n// SIG // Jck61i+MTEoYyKLtiLG2Jxeu8F81QKuTpuKHvi380gzs\r\n// SIG // 43G+prNNIAaNDkGqsENQYo8iezbw3/NCNX1vTi++irdF\r\n// SIG // qXNs6xoc3B3W+7qT678b0jTVL8St7IMO2E7d9eNdL6RK\r\n// SIG // fMnwRJf4XfGcwL+OwwoCeY9c5tvebNUVWRzaejKIkBVT\r\n// SIG // hApuAMCtpdvIvmBEdSTuCKZUx+OLr81/aEZyR2jL1s2R\r\n// SIG // KaMz8uIzTtgw6m3DbOM4ewFjIRNT1hVQPghyPxJ+ZwEr\r\n// SIG // wry5rkf7fKuG3PF0fECGSUEqftlOptpXTQIDAQABo4IB\r\n// SIG // fjCCAXowHwYDVR0lBBgwFgYKKwYBBAGCN0wIAQYIKwYB\r\n// SIG // BQUHAwMwHQYDVR0OBBYEFDWSWhFBi9hrsLe2TgLuHnxG\r\n// SIG // F3nRMFAGA1UdEQRJMEekRTBDMSkwJwYDVQQLEyBNaWNy\r\n// SIG // b3NvZnQgT3BlcmF0aW9ucyBQdWVydG8gUmljbzEWMBQG\r\n// SIG // A1UEBRMNMjMwMDEyKzQ2NzU5NzAfBgNVHSMEGDAWgBRI\r\n// SIG // bmTlUAXTgqoXNzcitW2oynUClTBUBgNVHR8ETTBLMEmg\r\n// SIG // R6BFhkNodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtp\r\n// SIG // b3BzL2NybC9NaWNDb2RTaWdQQ0EyMDExXzIwMTEtMDct\r\n// SIG // MDguY3JsMGEGCCsGAQUFBwEBBFUwUzBRBggrBgEFBQcw\r\n// SIG // AoZFaHR0cDovL3d3dy5taWNyb3NvZnQuY29tL3BraW9w\r\n// SIG // cy9jZXJ0cy9NaWNDb2RTaWdQQ0EyMDExXzIwMTEtMDct\r\n// SIG // MDguY3J0MAwGA1UdEwEB/wQCMAAwDQYJKoZIhvcNAQEL\r\n// SIG // BQADggIBABZJN7ksZExAYdTbQJewYryBLAFnYF9amfhH\r\n// SIG // WTGG0CmrGOiIUi10TMRdQdzinUfSv5HHKZLzXBpfA+2M\r\n// SIG // mEuJoQlDAUflS64N3/D1I9/APVeWomNvyaJO1mRTgJoz\r\n// SIG // 0TTRp8noO5dJU4k4RahPtmjrOvoXnoKgHXpRoDSSkRy1\r\n// SIG // kboRiriyMOZZIMfSsvkL2a5/w3YvLkyIFiqfjBhvMWOj\r\n// SIG // wb744LfY0EoZZz62d1GPAb8Muq8p4VwWldFdE0y9IBMe\r\n// SIG // 3ofytaPDImq7urP+xcqji3lEuL0x4fU4AS+Q7cQmLq12\r\n// SIG // 0gVbS9RY+OPjnf+nJgvZpr67Yshu9PWN0Xd2HSY9n9xi\r\n// SIG // au2OynVqtEGIWrSoQXoOH8Y4YNMrrdoOmjNZsYzT6xOP\r\n// SIG // M+h1gjRrvYDCuWbnZXUcOGuOWdOgKJLaH9AqjskxK76t\r\n// SIG // GI6BOF6WtPvO0/z1VFzan+2PqklO/vS7S0LjGEeMN3Ej\r\n// SIG // 47jbrLy3/YAZ3IeUajO5Gg7WFg4C8geNhH7MXjKsClsA\r\n// SIG // Pk1YtB61kan0sdqJWxOeoSXBJDIzkis97EbrqRQl91K6\r\n// SIG // MmH+di/tolU63WvF1nrDxutjJ590/ALi383iRbgG3zkh\r\n// SIG // EceyBWTvdlD6FxNbhIy+bJJdck2QdzLm4DgOBfCqETYb\r\n// SIG // 4hQBEk/pxvHPLiLG2Xm9PEnmEDKo1RJpMIIHejCCBWKg\r\n// SIG // AwIBAgIKYQ6Q0gAAAAAAAzANBgkqhkiG9w0BAQsFADCB\r\n// SIG // iDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0\r\n// SIG // b24xEDAOBgNVBAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1p\r\n// SIG // Y3Jvc29mdCBDb3Jwb3JhdGlvbjEyMDAGA1UEAxMpTWlj\r\n// SIG // cm9zb2Z0IFJvb3QgQ2VydGlmaWNhdGUgQXV0aG9yaXR5\r\n// SIG // IDIwMTEwHhcNMTEwNzA4MjA1OTA5WhcNMjYwNzA4MjEw\r\n// SIG // OTA5WjB+MQswCQYDVQQGEwJVUzETMBEGA1UECBMKV2Fz\r\n// SIG // aGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwGA1UE\r\n// SIG // ChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMSgwJgYDVQQD\r\n// SIG // Ex9NaWNyb3NvZnQgQ29kZSBTaWduaW5nIFBDQSAyMDEx\r\n// SIG // MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA\r\n// SIG // q/D6chAcLq3YbqqCEE00uvK2WCGfQhsqa+laUKq4Bjga\r\n// SIG // BEm6f8MMHt03a8YS2AvwOMKZBrDIOdUBFDFC04kNeWSH\r\n// SIG // fpRgJGyvnkmc6Whe0t+bU7IKLMOv2akrrnoJr9eWWcpg\r\n// SIG // GgXpZnboMlImEi/nqwhQz7NEt13YxC4Ddato88tt8zpc\r\n// SIG // oRb0RrrgOGSsbmQ1eKagYw8t00CT+OPeBw3VXHmlSSnn\r\n// SIG // Db6gE3e+lD3v++MrWhAfTVYoonpy4BI6t0le2O3tQ5GD\r\n// SIG // 2Xuye4Yb2T6xjF3oiU+EGvKhL1nkkDstrjNYxbc+/jLT\r\n// SIG // swM9sbKvkjh+0p2ALPVOVpEhNSXDOW5kf1O6nA+tGSOE\r\n// SIG // y/S6A4aN91/w0FK/jJSHvMAhdCVfGCi2zCcoOCWYOUo2\r\n// SIG // z3yxkq4cI6epZuxhH2rhKEmdX4jiJV3TIUs+UsS1Vz8k\r\n// SIG // A/DRelsv1SPjcF0PUUZ3s/gA4bysAoJf28AVs70b1FVL\r\n// SIG // 5zmhD+kjSbwYuER8ReTBw3J64HLnJN+/RpnF78IcV9uD\r\n// SIG // jexNSTCnq47f7Fufr/zdsGbiwZeBe+3W7UvnSSmnEyim\r\n// SIG // p31ngOaKYnhfsi+E11ecXL93KCjx7W3DKI8sj0A3T8Hh\r\n// SIG // hUSJxAlMxdSlQy90lfdu+HggWCwTXWCVmj5PM4TasIgX\r\n// SIG // 3p5O9JawvEagbJjS4NaIjAsCAwEAAaOCAe0wggHpMBAG\r\n// SIG // CSsGAQQBgjcVAQQDAgEAMB0GA1UdDgQWBBRIbmTlUAXT\r\n// SIG // gqoXNzcitW2oynUClTAZBgkrBgEEAYI3FAIEDB4KAFMA\r\n// SIG // dQBiAEMAQTALBgNVHQ8EBAMCAYYwDwYDVR0TAQH/BAUw\r\n// SIG // AwEB/zAfBgNVHSMEGDAWgBRyLToCMZBDuRQFTuHqp8cx\r\n// SIG // 0SOJNDBaBgNVHR8EUzBRME+gTaBLhklodHRwOi8vY3Js\r\n// SIG // Lm1pY3Jvc29mdC5jb20vcGtpL2NybC9wcm9kdWN0cy9N\r\n// SIG // aWNSb29DZXJBdXQyMDExXzIwMTFfMDNfMjIuY3JsMF4G\r\n// SIG // CCsGAQUFBwEBBFIwUDBOBggrBgEFBQcwAoZCaHR0cDov\r\n// SIG // L3d3dy5taWNyb3NvZnQuY29tL3BraS9jZXJ0cy9NaWNS\r\n// SIG // b29DZXJBdXQyMDExXzIwMTFfMDNfMjIuY3J0MIGfBgNV\r\n// SIG // HSAEgZcwgZQwgZEGCSsGAQQBgjcuAzCBgzA/BggrBgEF\r\n// SIG // BQcCARYzaHR0cDovL3d3dy5taWNyb3NvZnQuY29tL3Br\r\n// SIG // aW9wcy9kb2NzL3ByaW1hcnljcHMuaHRtMEAGCCsGAQUF\r\n// SIG // BwICMDQeMiAdAEwAZQBnAGEAbABfAHAAbwBsAGkAYwB5\r\n// SIG // AF8AcwB0AGEAdABlAG0AZQBuAHQALiAdMA0GCSqGSIb3\r\n// SIG // DQEBCwUAA4ICAQBn8oalmOBUeRou09h0ZyKbC5YR4WOS\r\n// SIG // mUKWfdJ5DJDBZV8uLD74w3LRbYP+vj/oCso7v0epo/Np\r\n// SIG // 22O/IjWll11lhJB9i0ZQVdgMknzSGksc8zxCi1LQsP1r\r\n// SIG // 4z4HLimb5j0bpdS1HXeUOeLpZMlEPXh6I/MTfaaQdION\r\n// SIG // 9MsmAkYqwooQu6SpBQyb7Wj6aC6VoCo/KmtYSWMfCWlu\r\n// SIG // WpiW5IP0wI/zRive/DvQvTXvbiWu5a8n7dDd8w6vmSiX\r\n// SIG // mE0OPQvyCInWH8MyGOLwxS3OW560STkKxgrCxq2u5bLZ\r\n// SIG // 2xWIUUVYODJxJxp/sfQn+N4sOiBpmLJZiWhub6e3dMNA\r\n// SIG // BQamASooPoI/E01mC8CzTfXhj38cbxV9Rad25UAqZaPD\r\n// SIG // XVJihsMdYzaXht/a8/jyFqGaJ+HNpZfQ7l1jQeNbB5yH\r\n// SIG // PgZ3BtEGsXUfFL5hYbXw3MYbBL7fQccOKO7eZS/sl/ah\r\n// SIG // XJbYANahRr1Z85elCUtIEJmAH9AAKcWxm6U/RXceNcbS\r\n// SIG // oqKfenoi+kiVH6v7RyOA9Z74v2u3S5fi63V4GuzqN5l5\r\n// SIG // GEv/1rMjaHXmr/r8i+sLgOppO6/8MO0ETI7f33VtY5E9\r\n// SIG // 0Z1WTk+/gFcioXgRMiF670EKsT/7qMykXcGhiJtXcVZO\r\n// SIG // SEXAQsmbdlsKgEhr/Xmfwb1tbWrJUnMTDXpQzTGCGXYw\r\n// SIG // ghlyAgEBMIGVMH4xCzAJBgNVBAYTAlVTMRMwEQYDVQQI\r\n// SIG // EwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4w\r\n// SIG // HAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xKDAm\r\n// SIG // BgNVBAMTH01pY3Jvc29mdCBDb2RlIFNpZ25pbmcgUENB\r\n// SIG // IDIwMTECEzMAAAJSizOq+JXzOdsAAAAAAlIwDQYJYIZI\r\n// SIG // AWUDBAIBBQCgga4wGQYJKoZIhvcNAQkDMQwGCisGAQQB\r\n// SIG // gjcCAQQwHAYKKwYBBAGCNwIBCzEOMAwGCisGAQQBgjcC\r\n// SIG // ARUwLwYJKoZIhvcNAQkEMSIEIDci2fDjH7Gssy4BSZv2\r\n// SIG // cxpXQvfdFVJ8kyBVKwl9Y0wPMEIGCisGAQQBgjcCAQwx\r\n// SIG // NDAyoBSAEgBNAGkAYwByAG8AcwBvAGYAdKEagBhodHRw\r\n// SIG // Oi8vd3d3Lm1pY3Jvc29mdC5jb20wDQYJKoZIhvcNAQEB\r\n// SIG // BQAEggEAWH2w+r+Zm+c6mT22Vp1iM+cW4XJ8BoVIbsCv\r\n// SIG // VpcZM46wD8Xc0OnjNJD8UKWgxXLkYYFVjCTrS64rlJWL\r\n// SIG // 07lbJwtTHSwUYD54BHkR1nMOAQw190HJAGeO/d1NtFsG\r\n// SIG // 5iJcMjCrgJ81YqRH2ruY9lGqE3SSYTeU0WviooG5THzj\r\n// SIG // bjfV8vqP2tFhJ+/QEkXWmofwF4qZOwJTMvtiAoOBG0km\r\n// SIG // npwqcjvEIGVP7W30+7d74QZ5ZjrllD7xuS1Xk+hHAt7Q\r\n// SIG // vqKgKOoBUQKTE8KVsuLt49BGHkSpm/WCH19uqqqBHYpr\r\n// SIG // jJPgU3CRiesy3KjerWz8vmLuRsY2ZnzosYC0OsBYNaGC\r\n// SIG // FwAwghb8BgorBgEEAYI3AwMBMYIW7DCCFugGCSqGSIb3\r\n// SIG // DQEHAqCCFtkwghbVAgEDMQ8wDQYJYIZIAWUDBAIBBQAw\r\n// SIG // ggFRBgsqhkiG9w0BCRABBKCCAUAEggE8MIIBOAIBAQYK\r\n// SIG // KwYBBAGEWQoDATAxMA0GCWCGSAFlAwQCAQUABCBpx5RV\r\n// SIG // iZSiuYGcUqppKrwAEbGsdZolX0MmvzBca/ZckQIGYs/1\r\n// SIG // J/IsGBMyMDIyMDcxOTIzMTcxMy41NTRaMASAAgH0oIHQ\r\n// SIG // pIHNMIHKMQswCQYDVQQGEwJVUzETMBEGA1UECBMKV2Fz\r\n// SIG // aGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwGA1UE\r\n// SIG // ChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMSUwIwYDVQQL\r\n// SIG // ExxNaWNyb3NvZnQgQW1lcmljYSBPcGVyYXRpb25zMSYw\r\n// SIG // JAYDVQQLEx1UaGFsZXMgVFNTIEVTTjpERDhDLUUzMzct\r\n// SIG // MkZBRTElMCMGA1UEAxMcTWljcm9zb2Z0IFRpbWUtU3Rh\r\n// SIG // bXAgU2VydmljZaCCEVcwggcMMIIE9KADAgECAhMzAAAB\r\n// SIG // nA+mTWHSnksoAAEAAAGcMA0GCSqGSIb3DQEBCwUAMHwx\r\n// SIG // CzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9u\r\n// SIG // MRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNy\r\n// SIG // b3NvZnQgQ29ycG9yYXRpb24xJjAkBgNVBAMTHU1pY3Jv\r\n// SIG // c29mdCBUaW1lLVN0YW1wIFBDQSAyMDEwMB4XDTIxMTIw\r\n// SIG // MjE5MDUxOVoXDTIzMDIyODE5MDUxOVowgcoxCzAJBgNV\r\n// SIG // BAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYD\r\n// SIG // VQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNyb3NvZnQg\r\n// SIG // Q29ycG9yYXRpb24xJTAjBgNVBAsTHE1pY3Jvc29mdCBB\r\n// SIG // bWVyaWNhIE9wZXJhdGlvbnMxJjAkBgNVBAsTHVRoYWxl\r\n// SIG // cyBUU1MgRVNOOkREOEMtRTMzNy0yRkFFMSUwIwYDVQQD\r\n// SIG // ExxNaWNyb3NvZnQgVGltZS1TdGFtcCBTZXJ2aWNlMIIC\r\n// SIG // IjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA21Iq\r\n// SIG // DBldSRY/rOtdrNNpirttyj1DbO9Tow3iRrcZExfa0lk4\r\n// SIG // rgPF4GJAAIv+fthX+wpOyXCkPR/1w9TisINf2x9xNajt\r\n// SIG // c/F0ctD5aRoZsopYBOyrDr1vDyGQn9uNynZXYDq8ay/B\r\n// SIG // yokKHTsErck+ZS1mKTLLk9nx/JPKIoY3uE5aVohT2gii\r\n// SIG // 5xQ2gAdAnMuryHbR42AdSHt4jmT4rKri/rzXQse4DoQf\r\n// SIG // Iok5k3bFPDklKQvLQU3kyGD85oWsUGXeJqDZOqngicou\r\n// SIG // 34luH8l3R62d6LZoMcWuaV8+aVFK/nBI1fnMCGATJGmO\r\n// SIG // ZBzPXOnRBpIB59GQyb3bf+eBTnUhutVsB4ePnr1IcL12\r\n// SIG // geCwjGSHQreWnDnzb7Q41dwh8hTqeQFP6oAMBn7R1PW6\r\n// SIG // 7+BFMHLrXhACh+OjbnxNtJf1o5TVIe4AL7dsyjIzuM10\r\n// SIG // cQlE4f6awUMFyYlGXhUqxF4jn5Lr0pQZ4sgGGGaeZDp2\r\n// SIG // sXwinRmI76+ECwPd70CeqdjsdyB7znQj2gq/C7ClXBac\r\n// SIG // qfDBIYSUzPtS8KhyahQxeTtWfZo22L5t0fbz4ZBvkQyy\r\n// SIG // qE6a+5k4JGk5Y3fcb5veDm6fAQ/R5OJj4udZrYC4rjfP\r\n// SIG // +mmVRElWV7b0rjZA+Q5yCUHqyMuY2kSlv1tqwnvZ4DQy\r\n// SIG // WnUu0fehhkZeyCBN+5cCAwEAAaOCATYwggEyMB0GA1Ud\r\n// SIG // DgQWBBS7aQlnU12OXbXXZLKcvqMYwgP6sjAfBgNVHSME\r\n// SIG // GDAWgBSfpxVdAF5iXYP05dJlpxtTNRnpcjBfBgNVHR8E\r\n// SIG // WDBWMFSgUqBQhk5odHRwOi8vd3d3Lm1pY3Jvc29mdC5j\r\n// SIG // b20vcGtpb3BzL2NybC9NaWNyb3NvZnQlMjBUaW1lLVN0\r\n// SIG // YW1wJTIwUENBJTIwMjAxMCgxKS5jcmwwbAYIKwYBBQUH\r\n// SIG // AQEEYDBeMFwGCCsGAQUFBzAChlBodHRwOi8vd3d3Lm1p\r\n// SIG // Y3Jvc29mdC5jb20vcGtpb3BzL2NlcnRzL01pY3Jvc29m\r\n// SIG // dCUyMFRpbWUtU3RhbXAlMjBQQ0ElMjAyMDEwKDEpLmNy\r\n// SIG // dDAMBgNVHRMBAf8EAjAAMBMGA1UdJQQMMAoGCCsGAQUF\r\n// SIG // BwMIMA0GCSqGSIb3DQEBCwUAA4ICAQCnACqmIxhHM01j\r\n// SIG // LPc9Ju2KNt7IKlRdy8iuoDjM+0whwCTfhb272ZEOd1ZL\r\n// SIG // 62VHdbBOmvU6BpXXCZzpgXOoroQZab3TdQSwUTvEEkw9\r\n// SIG // eN91U4+FwkHe9+8DQ9fnqihtwXY682w5LBMHxuL+ez4K\r\n// SIG // zf0+7Oz5BI1Bl3yIBUEJK/E0Ivvx2WfZEZTXHIHgAqpX\r\n// SIG // 2+Lhj8Z+bHYUD6MXTL5gt6hvQzjSeVLEvSrTvm3svqIV\r\n// SIG // Ew2vS7xE6HOEM8uX7h49h9SbJgmihu/J16X1qcASwcWW\r\n// SIG // EqX5pdvaJzfI3Buyg/Jxkkv++jw5W9hjELL7/kWtCYC+\r\n// SIG // hbRkRoGJhwqTOs1a3+Ff2vkqB3AvrXHRmJNmilOSjpb/\r\n// SIG // nxRN59NuFfs+eLQwCkfc+/K3o3QgVqn78uXAVEPXOft7\r\n// SIG // pxw9PARKe6j9q4KaA/OerzQ4BMDu+5+xFk++p5fyMq2y\r\n// SIG // tpI2xy81DKYRaVyp1dX2FiSNvhP9Cx71xRhqheDrzAUc\r\n// SIG // W6yVZ9N09g8uXW+rOU8yc0mkLwq12KgOByr7LUFpKpKb\r\n// SIG // wR01/DNPfv78kW1Vzcaz3Xl8OqA9kOA5LMpAhX5/Ddo9\r\n// SIG // i3YsRPcBuYopb+vXc7LxyDf4PQPfrYZAEAlW/Q1Ejk2j\r\n// SIG // CBoLDqg2BY4U+s3vZZIRxxr/xBCJMY/ZekuIalEMlnqx\r\n// SIG // ZGlFg13J2TCCB3EwggVZoAMCAQICEzMAAAAVxedrngKb\r\n// SIG // SZkAAAAAABUwDQYJKoZIhvcNAQELBQAwgYgxCzAJBgNV\r\n// SIG // BAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYD\r\n// SIG // VQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNyb3NvZnQg\r\n// SIG // Q29ycG9yYXRpb24xMjAwBgNVBAMTKU1pY3Jvc29mdCBS\r\n// SIG // b290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDEwMB4X\r\n// SIG // DTIxMDkzMDE4MjIyNVoXDTMwMDkzMDE4MzIyNVowfDEL\r\n// SIG // MAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24x\r\n// SIG // EDAOBgNVBAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jv\r\n// SIG // c29mdCBDb3Jwb3JhdGlvbjEmMCQGA1UEAxMdTWljcm9z\r\n// SIG // b2Z0IFRpbWUtU3RhbXAgUENBIDIwMTAwggIiMA0GCSqG\r\n// SIG // SIb3DQEBAQUAA4ICDwAwggIKAoICAQDk4aZM57RyIQt5\r\n// SIG // osvXJHm9DtWC0/3unAcH0qlsTnXIyjVX9gF/bErg4r25\r\n// SIG // PhdgM/9cT8dm95VTcVrifkpa/rg2Z4VGIwy1jRPPdzLA\r\n// SIG // EBjoYH1qUoNEt6aORmsHFPPFdvWGUNzBRMhxXFExN6AK\r\n// SIG // OG6N7dcP2CZTfDlhAnrEqv1yaa8dq6z2Nr41JmTamDu6\r\n// SIG // GnszrYBbfowQHJ1S/rboYiXcag/PXfT+jlPP1uyFVk3v\r\n// SIG // 3byNpOORj7I5LFGc6XBpDco2LXCOMcg1KL3jtIckw+DJ\r\n// SIG // j361VI/c+gVVmG1oO5pGve2krnopN6zL64NF50ZuyjLV\r\n// SIG // wIYwXE8s4mKyzbnijYjklqwBSru+cakXW2dg3viSkR4d\r\n// SIG // Pf0gz3N9QZpGdc3EXzTdEonW/aUgfX782Z5F37ZyL9t9\r\n// SIG // X4C626p+Nuw2TPYrbqgSUei/BQOj0XOmTTd0lBw0gg/w\r\n// SIG // EPK3Rxjtp+iZfD9M269ewvPV2HM9Q07BMzlMjgK8Qmgu\r\n// SIG // EOqEUUbi0b1qGFphAXPKZ6Je1yh2AuIzGHLXpyDwwvoS\r\n// SIG // CtdjbwzJNmSLW6CmgyFdXzB0kZSU2LlQ+QuJYfM2BjUY\r\n// SIG // hEfb3BvR/bLUHMVr9lxSUV0S2yW6r1AFemzFER1y7435\r\n// SIG // UsSFF5PAPBXbGjfHCBUYP3irRbb1Hode2o+eFnJpxq57\r\n// SIG // t7c+auIurQIDAQABo4IB3TCCAdkwEgYJKwYBBAGCNxUB\r\n// SIG // BAUCAwEAATAjBgkrBgEEAYI3FQIEFgQUKqdS/mTEmr6C\r\n// SIG // kTxGNSnPEP8vBO4wHQYDVR0OBBYEFJ+nFV0AXmJdg/Tl\r\n// SIG // 0mWnG1M1GelyMFwGA1UdIARVMFMwUQYMKwYBBAGCN0yD\r\n// SIG // fQEBMEEwPwYIKwYBBQUHAgEWM2h0dHA6Ly93d3cubWlj\r\n// SIG // cm9zb2Z0LmNvbS9wa2lvcHMvRG9jcy9SZXBvc2l0b3J5\r\n// SIG // Lmh0bTATBgNVHSUEDDAKBggrBgEFBQcDCDAZBgkrBgEE\r\n// SIG // AYI3FAIEDB4KAFMAdQBiAEMAQTALBgNVHQ8EBAMCAYYw\r\n// SIG // DwYDVR0TAQH/BAUwAwEB/zAfBgNVHSMEGDAWgBTV9lbL\r\n// SIG // j+iiXGJo0T2UkFvXzpoYxDBWBgNVHR8ETzBNMEugSaBH\r\n// SIG // hkVodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vcGtpL2Ny\r\n// SIG // bC9wcm9kdWN0cy9NaWNSb29DZXJBdXRfMjAxMC0wNi0y\r\n// SIG // My5jcmwwWgYIKwYBBQUHAQEETjBMMEoGCCsGAQUFBzAC\r\n// SIG // hj5odHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpL2Nl\r\n// SIG // cnRzL01pY1Jvb0NlckF1dF8yMDEwLTA2LTIzLmNydDAN\r\n// SIG // BgkqhkiG9w0BAQsFAAOCAgEAnVV9/Cqt4SwfZwExJFvh\r\n// SIG // nnJL/Klv6lwUtj5OR2R4sQaTlz0xM7U518JxNj/aZGx8\r\n// SIG // 0HU5bbsPMeTCj/ts0aGUGCLu6WZnOlNN3Zi6th542DYu\r\n// SIG // nKmCVgADsAW+iehp4LoJ7nvfam++Kctu2D9IdQHZGN5t\r\n// SIG // ggz1bSNU5HhTdSRXud2f8449xvNo32X2pFaq95W2KFUn\r\n// SIG // 0CS9QKC/GbYSEhFdPSfgQJY4rPf5KYnDvBewVIVCs/wM\r\n// SIG // nosZiefwC2qBwoEZQhlSdYo2wh3DYXMuLGt7bj8sCXgU\r\n// SIG // 6ZGyqVvfSaN0DLzskYDSPeZKPmY7T7uG+jIa2Zb0j/aR\r\n// SIG // AfbOxnT99kxybxCrdTDFNLB62FD+CljdQDzHVG2dY3RI\r\n// SIG // LLFORy3BFARxv2T5JL5zbcqOCb2zAVdJVGTZc9d/HltE\r\n// SIG // AY5aGZFrDZ+kKNxnGSgkujhLmm77IVRrakURR6nxt67I\r\n// SIG // 6IleT53S0Ex2tVdUCbFpAUR+fKFhbHP+CrvsQWY9af3L\r\n// SIG // wUFJfn6Tvsv4O+S3Fb+0zj6lMVGEvL8CwYKiexcdFYmN\r\n// SIG // cP7ntdAoGokLjzbaukz5m/8K6TT4JDVnK+ANuOaMmdbh\r\n// SIG // IurwJ0I9JZTmdHRbatGePu1+oDEzfbzL6Xu/OHBE0ZDx\r\n// SIG // yKs6ijoIYn/ZcGNTTY3ugm2lBRDBcQZqELQdVTNYs6Fw\r\n// SIG // ZvKhggLOMIICNwIBATCB+KGB0KSBzTCByjELMAkGA1UE\r\n// SIG // BhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNV\r\n// SIG // BAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBD\r\n// SIG // b3Jwb3JhdGlvbjElMCMGA1UECxMcTWljcm9zb2Z0IEFt\r\n// SIG // ZXJpY2EgT3BlcmF0aW9uczEmMCQGA1UECxMdVGhhbGVz\r\n// SIG // IFRTUyBFU046REQ4Qy1FMzM3LTJGQUUxJTAjBgNVBAMT\r\n// SIG // HE1pY3Jvc29mdCBUaW1lLVN0YW1wIFNlcnZpY2WiIwoB\r\n// SIG // ATAHBgUrDgMCGgMVAM3Zaerd8LP25xK25vXNDPvXb1NA\r\n// SIG // oIGDMIGApH4wfDELMAkGA1UEBhMCVVMxEzARBgNVBAgT\r\n// SIG // Cldhc2hpbmd0b24xEDAOBgNVBAcTB1JlZG1vbmQxHjAc\r\n// SIG // BgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEmMCQG\r\n// SIG // A1UEAxMdTWljcm9zb2Z0IFRpbWUtU3RhbXAgUENBIDIw\r\n// SIG // MTAwDQYJKoZIhvcNAQEFBQACBQDmgbO/MCIYDzIwMjIw\r\n// SIG // NzIwMDY1MDM5WhgPMjAyMjA3MjEwNjUwMzlaMHcwPQYK\r\n// SIG // KwYBBAGEWQoEATEvMC0wCgIFAOaBs78CAQAwCgIBAAIC\r\n// SIG // GRACAf8wBwIBAAICEbQwCgIFAOaDBT8CAQAwNgYKKwYB\r\n// SIG // BAGEWQoEAjEoMCYwDAYKKwYBBAGEWQoDAqAKMAgCAQAC\r\n// SIG // AwehIKEKMAgCAQACAwGGoDANBgkqhkiG9w0BAQUFAAOB\r\n// SIG // gQDhnkkk9l83XejEc5hAJm4Hvm/XJ5HAOk+Wc3CK1XJx\r\n// SIG // /Shg6CvcuSoi0r3TxZsEh4Jmogp+6Qvdjm6W3ztf6dxr\r\n// SIG // WXUgeB8F2m5yobNSJMD1AGQ347Q9ZHrWKux15Y52CRsB\r\n// SIG // LuvjAv+Uk8bSGheh22gPrYYqi7ZdQSKTXGGj7DQywzGC\r\n// SIG // BA0wggQJAgEBMIGTMHwxCzAJBgNVBAYTAlVTMRMwEQYD\r\n// SIG // VQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25k\r\n// SIG // MR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24x\r\n// SIG // JjAkBgNVBAMTHU1pY3Jvc29mdCBUaW1lLVN0YW1wIFBD\r\n// SIG // QSAyMDEwAhMzAAABnA+mTWHSnksoAAEAAAGcMA0GCWCG\r\n// SIG // SAFlAwQCAQUAoIIBSjAaBgkqhkiG9w0BCQMxDQYLKoZI\r\n// SIG // hvcNAQkQAQQwLwYJKoZIhvcNAQkEMSIEIHYWWxbR8tV6\r\n// SIG // 2g7PPhclxKRjhr+0m45CKtJ/xGRmQ+scMIH6BgsqhkiG\r\n// SIG // 9w0BCRACLzGB6jCB5zCB5DCBvQQgNw9FhSCNLMo6EXf1\r\n// SIG // 3hCBtFlCCs87suj+oTka29J6prwwgZgwgYCkfjB8MQsw\r\n// SIG // CQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQ\r\n// SIG // MA4GA1UEBxMHUmVkbW9uZDEeMBwGA1UEChMVTWljcm9z\r\n// SIG // b2Z0IENvcnBvcmF0aW9uMSYwJAYDVQQDEx1NaWNyb3Nv\r\n// SIG // ZnQgVGltZS1TdGFtcCBQQ0EgMjAxMAITMwAAAZwPpk1h\r\n// SIG // 0p5LKAABAAABnDAiBCC1LRLSh59KrU8j8kpCoJz019+F\r\n// SIG // uD2pblUM0JLbAOUTqjANBgkqhkiG9w0BAQsFAASCAgCp\r\n// SIG // 7olUd02noSOVdnFjfbq05FZrosbKJmNEpNHeMyknPiw4\r\n// SIG // R3bxhC6gQvD9fYgMyV7d9xK6LNBQH2cIn/9jMifI7Xw9\r\n// SIG // QU2+yW3fu+h5yS+8zyINcYlvBIJ6HtfR+ZKU7wlWKjZv\r\n// SIG // G68izEAiYbs6eJvpFaQ0HYvXAyguk0+N2CUIWsxQ3zxb\r\n// SIG // LH4yGPgl5M6ezMRteuG6D+UElzk9G/d5v4w69FvPBgDv\r\n// SIG // CoRR47ec+awclX/RgX5EhXTfFfa4+YuJN9Sm8IxUi5Jh\r\n// SIG // Su5D1IZcHM4P77f199xo8UcgjxaoNzDPH+D2fhGX0rP/\r\n// SIG // 4e4iR5Nl4z6xNi6Qdk5D3+Uhpy7bbsHzO+M1D3SxGt0q\r\n// SIG // W/wCK4i0GEQ0Y0LWZrXnIIV8lK/GRsdkwznhpjTokStF\r\n// SIG // 0S6FKbh39LP7HlFQd4S7NeGyROzDXtVDZO7MFuM/uFw6\r\n// SIG // 1o5TbJd1G1wVdP3du18tBwYqY5m7Pe2Tnn66YvS9Vcaq\r\n// SIG // n3Tpoe4cPAOEUr9oSKYseGDzyleHsOOFESLyK/Ayqipo\r\n// SIG // XVvTaklPq8jopVQYN8k/3Oa5w0ePzepJYebz388nZtaG\r\n// SIG // 0hPDqPel6INXH6LKw+9eqlaA+f3cLbCC36cb9yUJqotn\r\n// SIG // 6ne+GsUpKe3S40OxEo+i/fAo2CiQdjNV3dV/d36AjFx3\r\n// SIG // 1xc5mmXuD4FQz5kJEs10aA==\r\n// SIG // End signature block\r\n","/* expressive.annotations.validate.js - v2.7.4\r\n * Client-side component of ExpressiveAnnotations - annotation-based conditional validation library.\r\n * https://github.com/jwaliszko/ExpressiveAnnotations\r\n *\r\n * Copyright (c) 2014 Jarosław Waliszko\r\n * Licensed MIT: http://opensource.org/licenses/MIT */\r\n\r\n(function($, window) {\r\n 'use strict';\r\nvar\r\n backup = window.ea, // map over the ea in case of overwrite\r\n buffer = window.console,\r\n\r\n api = { // to be accessed from outer scope\r\n settings: {\r\n debug: false, // outputs debug messages to the web console (should be disabled in release code not to introduce redundant overhead)\r\n optimize: true, // if flag is on, requirement expression is not needlessly evaluated for non-empty fields (otherwise, it is evaluated\r\n // and such an evaluation result is provided to the eavalid event)\r\n enumsAsNumbers: true, // specifies whether values of enum types are internally treated as integral numerics or string identifiers (should be consistent\r\n // with the way of how input fields values are stored in HTML)\r\n registerAllMethods: false, // specifies whether all of the built-in and custom methods are to be registered within the model context (excluding these\r\n // having naming conflicts with the field identifiers), or the essential ones only (actually used in the expression)\r\n dependencyTriggers: 'change keyup', // a string containing one or more space-separated DOM field event types (such as \"change\", \"keyup\" or custom event\r\n // names) for which fields directly dependent on referenced DOM field are validated - for this feature to be off\r\n // entirely, initialize with empty string, null or undefined (validation will be fired on form submit attempt only)\r\n\r\n apply: function(options) { // alternative way of settings setup (recommended), crucial to invoke e.g. for new set of dependency triggers to be re-bound\r\n function verifySetup() {\r\n if (!typeHelper.isBool(api.settings.debug)) {\r\n throw 'EA settings error: debug value must be a boolean (true or false)';\r\n }\r\n if (!typeHelper.isBool(api.settings.optimize)) {\r\n throw 'EA settings error: optimize value must be a boolean (true or false)';\r\n }\r\n if (!typeHelper.isBool(api.settings.enumsAsNumbers)) {\r\n throw 'EA settings error: enumsAsNumbers value must be a boolean (true or false)';\r\n }\r\n if (!typeHelper.isBool(api.settings.registerAllMethods)) {\r\n throw 'EA settings error: registerAllMethods value must be a boolean (true or false)';\r\n }\r\n if (!typeHelper.isString(api.settings.dependencyTriggers)\r\n && api.settings.dependencyTriggers !== null && api.settings.dependencyTriggers !== undefined) {\r\n throw 'EA settings error: dependencyTriggers value must be a string (multiple event types can be bound at once by including each one separated by a space), null or undefined';\r\n }\r\n }\r\n function extend(target, source) { // custom implementation over jQuery.extend() because null/undefined merge is needed as well\r\n for (var key in source) {\r\n if (source.hasOwnProperty(key)) {\r\n target[key] = source[key];\r\n }\r\n }\r\n }\r\n\r\n extend(api.settings, options);\r\n verifySetup();\r\n\r\n $('form').each(function() {\r\n $(this).find('input, select, textarea').off('.expressive.annotations'); // remove all event handlers in the '.expressive.annotations' namespace\r\n validationHelper.bindFields(this, true);\r\n });\r\n\r\n logger.info(typeHelper.string.format(\"EA settings applied:\\n{0}\", options));\r\n }\r\n },\r\n addMethod: function(name, func) { // provide custom function to be accessible for expression\r\n toolchain.addMethod(name, func); // parameters: name - method name\r\n }, // func - method body\r\n // e.g. if server-side uses following attribute: [AssertThat(\"IsBloodType(BloodType)\")], where IsBloodType() is a custom method available at C# side,\r\n // its client-side equivalent, mainly function of the same signature (name and the number of parameters), must be also provided, i.e.\r\n // ea.addMethod('IsBloodType', function(group) {\r\n // return /^(A|B|AB|0)[\\+-]$/.test(group);\r\n // });\r\n addValueParser: function(name, func) { // provide custom deserialization methods for values of these DOM fields, which are accordingly decorated with ValueParser attribute at the server-side\r\n typeHelper.addValueParser(name, func); // parameters: name - parser name\r\n }, // func - parse logic\r\n // e.g. for objects when stored in non-json format or dates when stored in non-standard format (not proper for Date.parse(dateString)),\r\n // i.e. suppose DOM field date string is given in dd/mm/yyyy format:\r\n // ea.addValueParser('dateparser', function(value, field) { // parameters: value - raw data string extracted by default from DOM element\r\n // // field - DOM element name for which parser was invoked\r\n // var arr = value.split('/'); return new Date(arr[2], arr[1] - 1, arr[0]).getTime(); // return milliseconds since January 1, 1970, 00:00:00 UTC\r\n // });\r\n // multiple parsers can be registered at once when, separated by whitespace, are provided to name parameter, i.e. ea.addValueParser('p1 p2', ...\r\n // finally, if value parser is registered under the name of some type, e.g. datetime, int32, etc., all DOM fields of such a type are going to be deserialized using such a parser\r\n noConflict: function() {\r\n if (window.ea === this) {\r\n window.ea = backup;\r\n }\r\n return this;\r\n }\r\n },\r\n\r\n logger = {\r\n info: function(message) {\r\n if (api.settings.debug && buffer && typeof buffer.log === 'function') { // flush in debug mode only\r\n buffer.log('[info] ' + logger.prep(message, new Date()));\r\n }\r\n },\r\n warn: function(message) {\r\n if (buffer && typeof buffer.warn === 'function') {\r\n buffer.warn('[warn] ' + logger.prep(message, new Date()));\r\n }\r\n },\r\n fail: function(message) {\r\n if (buffer && typeof buffer.error === 'function') {\r\n buffer.error('[fail] ' + logger.prep(message, new Date()));\r\n }\r\n },\r\n prep: function(message, date) {\r\n message = typeHelper.string.tryParse(message);\r\n var lines = message.split('\\n');\r\n var stamp = date !== undefined && date !== null ? '(' + typeHelper.datetime.stamp(date) + '): ' : '';\r\n var fline = stamp + lines.shift();\r\n return lines.length > 0\r\n ? fline + '\\n' + typeHelper.string.indent(lines.join('\\n'), 19)\r\n : fline;\r\n }\r\n },\r\n\r\n toolchain = {\r\n methods: {},\r\n addMethod: function(name, func) { // add multiple function signatures to methods object (methods overloading, based only on numbers of arguments)\r\n var old = this.methods[name];\r\n this.methods[name] = function() {\r\n if (func.length === arguments.length) {\r\n return func.apply(this, arguments);\r\n }\r\n if (typeof old === 'function') {\r\n return old.apply(this, arguments);\r\n }\r\n return func.apply(this, arguments); // no exact signature match, most likely variable number of arguments is accepted\r\n };\r\n },\r\n registerMethods: function(model, essentialMethods, fieldName) {\r\n var i, name, body;\r\n this.initialize();\r\n if (api.settings.registerAllMethods) {\r\n for (name in this.methods) {\r\n if (this.methods.hasOwnProperty(name)) {\r\n if (model.hasOwnProperty(name)) {\r\n logger.warn(typeHelper.string.format('Field {0} - skipping {1}(...) method registration, naming conflict with the field identifier.', fieldName, name));\r\n continue;\r\n }\r\n body = this.methods[name];\r\n model[name] = body;\r\n }\r\n }\r\n return;\r\n }\r\n\r\n for (i = 0; i < essentialMethods.length; i++) {\r\n name = essentialMethods[i];\r\n if (this.methods.hasOwnProperty(name)) { // if not available, exception will be thrown later, during expression evaluation (not thrown here on purpose - too early, let the log to become more complete)\r\n body = this.methods[name];\r\n model[name] = body;\r\n }\r\n }\r\n },\r\n initialize: function() {\r\n var that = this;\r\n this.addMethod('Now', function() { // return milliseconds\r\n return Date.now(); // now() is faster than new Date().getTime()\r\n });\r\n this.addMethod('Today', function() { // return milliseconds\r\n return new Date(new Date().setHours(0, 0, 0, 0)).getTime();\r\n });\r\n this.addMethod('ToDate', function(dateString) { // return milliseconds\r\n return Date.parse(dateString);\r\n });\r\n this.addMethod('Date', function(year, month, day) { // months are 1-based, return milliseconds\r\n return new Date(new Date(year, month - 1, day).setFullYear(year)).getTime();\r\n });\r\n this.addMethod('Date', function(year, month, day, hour, minute, second) { // months are 1-based, return milliseconds\r\n return new Date(new Date(year, month - 1, day, hour, minute, second).setFullYear(year)).getTime();\r\n });\r\n this.addMethod('TimeSpan', function(days, hours, minutes, seconds) { // return milliseconds\r\n return seconds * 1e3 + minutes * 6e4 + hours * 36e5 + days * 864e5;\r\n });\r\n this.addMethod('Length', function(str) {\r\n return str !== null && str !== undefined ? str.length : 0;\r\n });\r\n this.addMethod('Trim', function(str) {\r\n return str !== null && str !== undefined ? $.trim(str) : null;\r\n });\r\n this.addMethod('Concat', function(strA, strB) {\r\n return [strA, strB].join('');\r\n });\r\n this.addMethod('Concat', function(strA, strB, strC) {\r\n return [strA, strB, strC].join('');\r\n });\r\n this.addMethod('CompareOrdinal', function(strA, strB) {\r\n if (strA === strB) {\r\n return 0;\r\n }\r\n if (strA !== null && strB === null) {\r\n return 1;\r\n }\r\n if (strA === null && strB !== null) {\r\n return -1;\r\n }\r\n return strA > strB ? 1 : -1;\r\n });\r\n this.addMethod('CompareOrdinalIgnoreCase', function(strA, strB) {\r\n strA = (strA !== null && strA !== undefined) ? strA.toLowerCase() : null;\r\n strB = (strB !== null && strB !== undefined) ? strB.toLowerCase() : null;\r\n return that.methods.CompareOrdinal(strA, strB);\r\n });\r\n this.addMethod('StartsWith', function(str, prefix) {\r\n return str !== null && str !== undefined && prefix !== null && prefix !== undefined && str.slice(0, prefix.length) === prefix;\r\n });\r\n this.addMethod('StartsWithIgnoreCase', function(str, prefix) {\r\n str = (str !== null && str !== undefined) ? str.toLowerCase() : null;\r\n prefix = (prefix !== null && prefix !== undefined) ? prefix.toLowerCase() : null;\r\n return that.methods.StartsWith(str, prefix);\r\n });\r\n this.addMethod('EndsWith', function(str, suffix) {\r\n return str !== null && str !== undefined && suffix !== null && suffix !== undefined && str.slice(-suffix.length) === suffix;\r\n });\r\n this.addMethod('EndsWithIgnoreCase', function(str, suffix) {\r\n str = (str !== null && str !== undefined) ? str.toLowerCase() : null;\r\n suffix = (suffix !== null && suffix !== undefined) ? suffix.toLowerCase() : null;\r\n return that.methods.EndsWith(str, suffix);\r\n });\r\n this.addMethod('Contains', function(str, substr) {\r\n return str !== null && str !== undefined && substr !== null && substr !== undefined && str.indexOf(substr) > -1;\r\n });\r\n this.addMethod('ContainsIgnoreCase', function(str, substr) {\r\n str = (str !== null && str !== undefined) ? str.toLowerCase() : null;\r\n substr = (substr !== null && substr !== undefined) ? substr.toLowerCase() : null;\r\n return that.methods.Contains(str, substr);\r\n });\r\n this.addMethod('IsNullOrWhiteSpace', function(str) {\r\n return str === null || !/\\S/.test(str);\r\n });\r\n this.addMethod('IsDigitChain', function(str) {\r\n return /^[0-9]+$/.test(str);\r\n });\r\n this.addMethod('IsNumber', function(str) {\r\n return /^[+-]?(?:(?:[0-9]+)|(?:[0-9]+[eE][+-]?[0-9]+)|(?:[0-9]*\\.[0-9]+(?:[eE][+-]?[0-9]+)?))$/.test(str);\r\n });\r\n this.addMethod('IsEmail', function(str) {\r\n // taken from HTML5 specification: http://www.w3.org/TR/html5/forms.html#e-mail-state-(type=email)\r\n return /^[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(str);\r\n });\r\n this.addMethod('IsPhone', function(str) {\r\n // taken from PhoneAttribute implementation: https://referencesource.microsoft.com/#System.ComponentModel.DataAnnotations/DataAnnotations/PhoneAttribute.cs, adjusted for JavaScript regex engine - since JS doesn't use lookbehind feature, alternative approach used (as described here: http://stackoverflow.com/q/7376238/270315)\r\n return /^(\\+\\s?)?((?!\\+.*)\\(\\+?\\d+([\\s\\-\\.]?\\d+)?\\)|\\d+)([\\s\\-\\.]?(\\(\\d+([\\s\\-\\.]?\\d+)?\\)|\\d+))*(\\s?(x|ext\\.?)\\s?\\d+)?$/.test(str);\r\n });\r\n this.addMethod('IsUrl', function(str) {\r\n // contributed by Diego Perini: https://gist.github.com/dperini/729294 (https://mathiasbynens.be/demo/url-regex)\r\n return /^(?:(?:https?|ftp):\\/\\/)(?:\\S+(?::\\S*)?@)?(?:(?!(?: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-z\\u00a1-\\uffff0-9]-*)*[a-z\\u00a1-\\uffff0-9]+)(?:\\.(?:[a-z\\u00a1-\\uffff0-9]-*)*[a-z\\u00a1-\\uffff0-9]+)*(?:\\.(?:[a-z\\u00a1-\\uffff]{2,})))(?::\\d{2,5})?(?:\\/\\S*)?$/i.test(str);\r\n });\r\n this.addMethod('IsRegexMatch', function(str, regex) {\r\n return str !== null && str !== undefined && regex !== null && regex !== undefined && new RegExp(regex).test(str);\r\n });\r\n this.addMethod('Guid', function(str) {\r\n var guid = typeHelper.guid.tryParse(str);\r\n if (guid.error) {\r\n throw guid.msg;\r\n }\r\n return guid;\r\n });\r\n this.addMethod('Min', function(values) { // accepts both, array and variable number of arguments\r\n if (arguments.length === 0)\r\n throw \"no arguments\";\r\n\r\n if (arguments.length === 1) {\r\n if (typeHelper.isArray(values)) {\r\n if (values.length === 0)\r\n throw \"empty sequence\";\r\n return Math.min.apply(null, values);\r\n }\r\n }\r\n return Math.min.apply(null, arguments);\r\n });\r\n this.addMethod('Max', function(values) { // accepts both, array and variable number of arguments\r\n if (arguments.length === 0)\r\n throw \"no arguments\";\r\n\r\n if (arguments.length === 1) {\r\n if (typeHelper.isArray(values)) {\r\n if (values.length === 0)\r\n throw \"empty sequence\";\r\n return Math.max.apply(null, values);\r\n }\r\n }\r\n return Math.max.apply(null, arguments);\r\n });\r\n this.addMethod('Sum', function(values) { // accepts both, array and variable number of arguments\r\n if (arguments.length === 0)\r\n throw \"no arguments\";\r\n\r\n var sum = 0, i, l;\r\n if (arguments.length === 1) {\r\n if (typeHelper.isArray(values)) {\r\n if (values.length === 0)\r\n throw \"empty sequence\";\r\n for (i = 0, l = values.length; i < l; i++) {\r\n sum += parseFloat(values[i]);\r\n }\r\n return sum;\r\n }\r\n }\r\n for (i = 0, l = arguments.length; i < l; i++) {\r\n sum += parseFloat(arguments[i]);\r\n }\r\n return sum;\r\n });\r\n this.addMethod('Average', function(values) { // accepts both, array and variable number of arguments\r\n if (arguments.length === 0)\r\n throw \"no arguments\";\r\n\r\n var sum, i, l, arr = new Array();\r\n if (arguments.length === 1) {\r\n if (typeHelper.isArray(values)) {\r\n if (values.length === 0)\r\n throw \"empty sequence\";\r\n sum = that.methods.Sum(values);\r\n return sum / values.length;\r\n }\r\n }\r\n for (i = 0, l = arguments.length; i < l; i++) {\r\n arr.push(arguments[i]);\r\n }\r\n sum = that.methods.Sum(arr);\r\n return sum / arguments.length;\r\n });\r\n }\r\n },\r\n\r\n typeHelper = {\r\n parsers: {},\r\n addValueParser: function(name, func) {\r\n $.each(name.split(/\\s+/), function(idx, parser) {\r\n if (/\\S/.test(parser)) {\r\n typeHelper.parsers[parser] = func;\r\n }\r\n });\r\n },\r\n array: {\r\n contains: function(arr, item) {\r\n var i = arr.length;\r\n while (i--) {\r\n if (arr[i] === item) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n }\r\n },\r\n object: {\r\n keys: function(obj) {\r\n var key, arr = [];\r\n for (key in obj) {\r\n if (obj.hasOwnProperty(key)) {\r\n arr.push(key);\r\n }\r\n }\r\n return arr;\r\n },\r\n tryParse: function(value) {\r\n try {\r\n return $.parseJSON(value);\r\n } catch (ex) {\r\n return { error: true, msg: 'Given value was not recognized as a valid JSON. ' + ex };\r\n }\r\n }\r\n },\r\n string: {\r\n format: function(text, params) {\r\n function makeParam(value) {\r\n var replacer = function(key, value) {\r\n return typeof value === 'function' ? 'function(...) {...}' : value;\r\n }\r\n if (api.settings.registerAllMethods) {\r\n replacer = null; // do not print all of the methods not to disturb the console output\r\n }\r\n value = typeHelper.isObject(value) ? JSON.stringify(value, replacer, 4): value;\r\n value = typeHelper.isString(value) ? value.replace(/\\$/g, '$$$$'): value; // escape $ sign for string.replace()\r\n return value;\r\n }\r\n function applyParam(text, param, idx) {\r\n return text.replace(new RegExp('\\\\{' + idx + '\\\\}', 'gm'), param);\r\n }\r\n\r\n var i;\r\n if (params instanceof Array) {\r\n for (i = 0; i < params.length; i++) {\r\n text = applyParam(text, makeParam(params[i]), i);\r\n }\r\n return text;\r\n }\r\n for (i = 0; i < arguments.length - 1; i++) {\r\n text = applyParam(text, makeParam(arguments[i + 1]), i);\r\n }\r\n return text;\r\n },\r\n indent: function(str, spaces) {\r\n var indent = Array((spaces || 0) + 1).join(' ');\r\n return str.replace(/^/gm, indent);\r\n },\r\n tryParse: function(value) {\r\n if (typeHelper.isString(value)) {\r\n return value;\r\n }\r\n if (value !== undefined && value !== null) {\r\n return value.toString();\r\n }\r\n return { error: true, msg: 'Given value was not recognized as a valid string.' };\r\n }\r\n },\r\n bool: {\r\n tryParse: function(value) {\r\n if (typeHelper.isBool(value)) {\r\n return value;\r\n }\r\n if (typeHelper.isString(value)) {\r\n value = $.trim(value).toLowerCase();\r\n if (value === 'true' || value === 'false') {\r\n return value === 'true';\r\n }\r\n }\r\n return { error: true, msg: 'Given value was not recognized as a valid boolean.' };\r\n }\r\n },\r\n number: {\r\n tryParse: function(value) {\r\n function isNumber(n) {\r\n return typeHelper.isNumeric(parseFloat(n)) && isFinite(n);\r\n }\r\n\r\n if (isNumber(value)) {\r\n return parseFloat(value);\r\n }\r\n return { error: true, msg: 'Given value was not recognized as a valid number.' };\r\n }\r\n },\r\n timespan: {\r\n tryParse: function(value) {\r\n if (typeHelper.isTimeSpan(value)) {\r\n var DAY = 2, HOUR = 3, MINUTE = 4, SECOND = 5, MILLISECOND = 6;\r\n var match = /(\\-)?(?:(\\d*)\\.)?(\\d+)\\:(\\d+)(?:\\:(\\d+)\\.?(\\d{3})?)?/.exec(value);\r\n var sign = (match[1] === '-') ? -1 : 1;\r\n var d = {\r\n days: typeHelper.number.tryParse(match[DAY] || 0) * sign,\r\n hours: typeHelper.number.tryParse(match[HOUR] || 0) * sign,\r\n minutes: typeHelper.number.tryParse(match[MINUTE] || 0) * sign,\r\n seconds: typeHelper.number.tryParse(match[SECOND] || 0) * sign,\r\n milliseconds: typeHelper.number.tryParse(match[MILLISECOND] || 0) * sign\r\n };\r\n var millisec = d.milliseconds +\r\n d.seconds * 1e3 + // 1000\r\n d.minutes * 6e4 + // 1000 * 60\r\n d.hours * 36e5 + // 1000 * 60 * 60\r\n d.days * 864e5; // 1000 * 60 * 60 * 24\r\n return millisec;\r\n }\r\n return { error: true, msg: 'Given value was not recognized as a valid .NET style timespan string.' };\r\n }\r\n },\r\n datetime: {\r\n stamp: function(date) {\r\n function pad(n) { return ('0' + n).slice(-2); }\r\n return pad(date.getHours()) + ':' + pad(date.getMinutes()) + ':' + pad(date.getSeconds());\r\n },\r\n tryParse: function(value) {\r\n if (typeHelper.isDate(value)) {\r\n return value.getTime(); // return the time value in milliseconds\r\n }\r\n if (typeHelper.isString(value)) {\r\n var millisec = Date.parse(value); // default parsing of string representing an RFC 2822 or ISO 8601 date\r\n if (typeHelper.isNumeric(millisec)) {\r\n return millisec;\r\n }\r\n }\r\n return { error: true, msg: 'Given value was not recognized as a valid RFC 2822 or ISO 8601 date.' };\r\n }\r\n },\r\n guid: {\r\n tryParse: function(value) {\r\n if (typeHelper.isGuid(value)) {\r\n return value.toUpperCase();\r\n }\r\n return { error: true, msg: 'Given value was not recognized as a valid guid - guid should contain 32 digits with 4 dashes (xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx).' };\r\n }\r\n },\r\n enumeration: {\r\n tryParse: function(value) {\r\n return api.settings.enumsAsNumbers ? typeHelper.number.tryParse(value) : typeHelper.string.tryParse(value);\r\n }\r\n },\r\n isTimeSpan: function(value) {\r\n return /(\\-)?(?:(\\d*)\\.)?(\\d+)\\:(\\d+)(?:\\:(\\d+)\\.?(\\d{3})?)?/.test(value); // regex for recognition of .NET style timespan string, taken from moment.js v2.9.0\r\n },\r\n isNumeric: function(value) {\r\n return typeof value === 'number' && !isNaN(value);\r\n },\r\n isDate: function(value) {\r\n return value instanceof Date;\r\n },\r\n isObject: function(value) {\r\n return typeof value === 'object' || value instanceof Object;\r\n },\r\n isString: function(value) {\r\n return typeof value === 'string' || value instanceof String;\r\n },\r\n isBool: function(value) {\r\n return typeof value === 'boolean' || value instanceof Boolean;\r\n },\r\n isGuid: function(value) {\r\n return /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i.test(value); // basic check\r\n },\r\n isArray: function(value) {\r\n return Object.prototype.toString.call(value) === '[object Array]';\r\n },\r\n tryParse: function(value, type, field, parser) {\r\n var parseFunc;\r\n if (parser !== null && parser !== undefined) {\r\n parseFunc = typeHelper.findValueParser(field, parser); // pointed by attribute custom field-specific parser lookup - highest parsing priority\r\n if (!parseFunc.error) {\r\n return parseFunc(value, field);\r\n }\r\n logger.warn(parseFunc.msg);\r\n }\r\n parseFunc = typeHelper.findValueParser(field, type); // custom type-specific parser lookup - secondary parsing priority\r\n if (!parseFunc.error) {\r\n logger.warn(typeHelper.string.format('Overridden {0} type parsing runs for {1} field. All fields of {0} type are going to be parsed using your value parser. If such a behavior is unintentional, change the name of your value parser to one, which does not indicate at {0} (or any other) type name.', type, field));\r\n return parseFunc(value, field);\r\n }\r\n return typeHelper.tryAutoParse(value, type); // built-in parser lookup - lowest parsing priority\r\n },\r\n tryAutoParse: function(value, type) {\r\n return typeHelper.hasOwnProperty(type)\r\n ? typeHelper[type].tryParse(value)\r\n : typeHelper.object.tryParse(value);\r\n },\r\n findValueParser: function(field, parser) {\r\n var parseFunc = typeHelper.parsers[parser]; // custom parsing lookup\r\n if (typeof parseFunc === 'function') {\r\n return parseFunc;\r\n }\r\n return { error: true, msg: typeHelper.string.format('Custom value parser {0} not found. Consider its registration with ea.addValueParser(), or remove redundant ValueParser attribute from {1} model field.', parser, field) };\r\n }\r\n },\r\n\r\n modelHelper = {\r\n getPrefix: function(str) {\r\n return (str !== undefined && str !== null) ? str.substr(0, str.lastIndexOf('.') + 1) : '';\r\n },\r\n extractValue: function(form, name, prefix, type, parser) {\r\n function getValue(element) {\r\n var elementType = element.attr('type');\r\n switch (elementType) {\r\n case 'checkbox':\r\n if (element.length > 2) {\r\n logger.warn(typeHelper.string.format('DOM field {0} is ambiguous (unless custom value parser is provided).', element.attr('name')));\r\n }\r\n return element.is(':checked');\r\n case 'radio':\r\n return element.filter(':checked').val();\r\n default:\r\n if (element.length > 1) {\r\n logger.warn(typeHelper.string.format('DOM field {0} is ambiguous (unless custom value parser is provided).', element.attr('name')));\r\n }\r\n return element.val();\r\n }\r\n }\r\n\r\n var field, fieldName, rawValue, parsedValue;\r\n fieldName = prefix + name;\r\n field = $(form).find(typeHelper.string.format(':input[name=\"{0}\"]', fieldName));\r\n if (field.length === 0) {\r\n throw typeHelper.string.format('DOM field {0} not found.', fieldName);\r\n }\r\n rawValue = getValue(field);\r\n if (rawValue === null || rawValue === undefined || rawValue === '') { // field value not set\r\n return null;\r\n }\r\n parsedValue = typeHelper.tryParse(rawValue, type, fieldName, parser); // convert field value to required type\r\n if (parsedValue !== null && parsedValue !== undefined && parsedValue.error) {\r\n throw typeHelper.string.format('DOM field {0} value conversion to {1} failed. {2}', fieldName, type, parsedValue.msg);\r\n }\r\n return parsedValue;\r\n },\r\n deserializeObject: function(form, fieldsMap, constsMap, enumsMap, parsersMap, prefix) {\r\n function buildField(fieldName, fieldValue, object) {\r\n var props, parent, i, match, arrayIndex, arrayName, arrayPat;\r\n arrayPat = /^([a-z_0-9]+)\\[([0-9]+)\\]$/i;\r\n props = fieldName.split('.');\r\n parent = object;\r\n for (i = 0; i < props.length - 1; i++) {\r\n fieldName = props[i];\r\n\r\n match = arrayPat.exec(fieldName); // check for array element access\r\n if (match) {\r\n fieldName = match[1];\r\n arrayIndex = match[2];\r\n if (!parent.hasOwnProperty(fieldName)) {\r\n parent[fieldName] = {};\r\n }\r\n parent[fieldName][arrayIndex] = parent[fieldName][arrayIndex] || {}; // create if needed\r\n parent = parent[fieldName][arrayIndex];\r\n continue;\r\n }\r\n\r\n if (!parent.hasOwnProperty(fieldName)) {\r\n parent[fieldName] = {};\r\n }\r\n parent = parent[fieldName];\r\n }\r\n fieldName = props[props.length - 1];\r\n\r\n var endMatch = arrayPat.exec(fieldName);\r\n if (endMatch) { // our fieldName matches array access pattern i.e. arr[idx]\r\n arrayName = endMatch[1];\r\n arrayIndex = endMatch[2];\r\n parent[arrayName] = parent[arrayName] || []; // create if needed\r\n parent[arrayName][arrayIndex] = fieldValue;\r\n } else {\r\n parent[fieldName] = fieldValue;\r\n }\r\n }\r\n\r\n var model = {}, name, type, value, parser;\r\n for (name in fieldsMap) {\r\n if (fieldsMap.hasOwnProperty(name)) {\r\n type = fieldsMap[name];\r\n parser = parsersMap[name];\r\n value = this.extractValue(form, name, prefix, type, parser);\r\n buildField(name, value, model);\r\n }\r\n }\r\n for (name in constsMap) {\r\n if (constsMap.hasOwnProperty(name)) {\r\n value = constsMap[name];\r\n buildField(name, value, model);\r\n }\r\n }\r\n for (name in enumsMap) {\r\n if (enumsMap.hasOwnProperty(name)) {\r\n value = api.settings.enumsAsNumbers ? enumsMap[name] : name.split('.').pop();\r\n buildField(name, value, model);\r\n }\r\n }\r\n return model;\r\n },\r\n adjustGivenValue: function(value, element, params) {\r\n value = element.type === 'checkbox' ? element.checked : value; // special treatment for checkbox, because when unchecked, false value should be retrieved instead of undefined\r\n\r\n var field = element.name.replace(params.prefix, '');\r\n var parser = params.parsersMap[field];\r\n if (parser !== null && parser !== undefined) {\r\n var parseFunc = typeHelper.findValueParser(element.name, parser); // pointed by attribute custom field-specific parser lookup - highest parsing priority\r\n if (!parseFunc.error) {\r\n return parseFunc(value, element.name);\r\n }\r\n logger.warn(parseFunc.msg);\r\n }\r\n return value;\r\n },\r\n ctxEval: function(exp, ctx) { // evaluates expression in the scope of context object\r\n return (new Function('expression', 'context', 'with(context){return eval(expression)}'))(exp, ctx); // function constructor used on purpose (a hack), for 'with' statement not to collide with strict mode, which\r\n // is applied to entire module scope (BTW 'use strict'; pragma intentionally not put to function constructor)\r\n }\r\n },\r\n\r\n validationHelper = {\r\n referencesMap: [],\r\n collectReferences: function(fields, refField, prefix) {\r\n var i, name;\r\n for (i = 0; i < fields.length; i++) {\r\n name = prefix + fields[i];\r\n if (name !== refField) {\r\n this.referencesMap[name] = this.referencesMap[name] || [];\r\n if (!typeHelper.array.contains(this.referencesMap[name], refField)) {\r\n this.referencesMap[name].push(refField);\r\n }\r\n }\r\n }\r\n },\r\n validateReferences: function(name, form) {\r\n var i, field, referencedFields, validator;\r\n validator = $(form).validate(); // get validator attached to the form\r\n referencedFields = this.referencesMap[name];\r\n if (referencedFields !== undefined && referencedFields !== null) {\r\n logger.info(typeHelper.string.format('Validation triggered for the following dependencies of {0} field:\\n{1}.', name, referencedFields.join(', ')));\r\n i = referencedFields.length;\r\n while (i--) {\r\n field = $(form).find(typeHelper.string.format(':input[data-val][name=\"{0}\"]', referencedFields[i])).not(validator.settings.ignore);\r\n if (field.length !== 0) {\r\n field.valid();\r\n }\r\n }\r\n } else {\r\n logger.info(typeHelper.string.format('No fields dependent on {0} detected.', name));\r\n }\r\n },\r\n bindFields: function(form, force) { // attach validation handlers to dependency triggers (events) for some form elements\r\n if (api.settings.dependencyTriggers !== null && api.settings.dependencyTriggers !== undefined && api.settings.dependencyTriggers !== '') {\r\n var namespacedEvents = [];\r\n $.each(api.settings.dependencyTriggers.split(/\\s+/), function(idx, event) {\r\n if (/\\S/.test(event)) {\r\n namespacedEvents.push(typeHelper.string.format('{0}.expressive.annotations', event));\r\n }\r\n });\r\n // attach handlers to all inputs that do not have 'ea-triggers-bound' class (unless force is true)\r\n $(form).find('input, select, textarea').not(function(idx, element) {\r\n var bound = $(element).hasClass('ea-triggers-bound');\r\n $(element).addClass('ea-triggers-bound');\r\n return !force && bound;\r\n }).on(namespacedEvents.join(' '), function(event) {\r\n var field = $(this).attr('name');\r\n logger.info(typeHelper.string.format('Dependency validation trigger - {0} event, handled.', event.type));\r\n validationHelper.validateReferences(field, form); // validate referenced fields only\r\n });\r\n }\r\n }\r\n },\r\n\r\n buildAdapter = function(adapter, options) {\r\n var rules = {\r\n prefix: modelHelper.getPrefix(options.element.name),\r\n form: options.form\r\n };\r\n for (var key in options.params) {\r\n if (options.params.hasOwnProperty(key)) {\r\n rules[key] = options.params[key] !== undefined ? $.parseJSON(options.params[key]) : {};\r\n }\r\n }\r\n if (options.message) {\r\n options.messages[adapter] = function(params, element) {\r\n var message, field, guid, value;\r\n message = options.message;\r\n for (field in params.errFieldsMap) {\r\n if (params.errFieldsMap.hasOwnProperty(field)) {\r\n guid = params.errFieldsMap[field];\r\n value = modelHelper.extractValue(params.form, field, params.prefix, 'string', null);\r\n\r\n var re = new RegExp(guid, 'g'); // with this regex...\r\n message = message.replace(re, value); // ...occurrences are replaced globally\r\n }\r\n }\r\n return message;\r\n };\r\n }\r\n validationHelper.bindFields(options.form);\r\n validationHelper.collectReferences(typeHelper.object.keys(rules.fieldsMap), options.element.name, rules.prefix);\r\n options.rules[adapter] = rules;\r\n },\r\n\r\n computeAssertThat = function(method, value, element, params) {\r\n value = modelHelper.adjustGivenValue(value, element, params); // preprocess given value (here basically we are concerned about determining if such a value is null or not, to determine if the attribute\r\n // logic should be invoked or not - full type-detection parsing is not required at this stage, but we may have to extract such a value using\r\n // value parser, e.g. for an array which values are distracted among multiple fields)\r\n if (value !== undefined && value !== null && value !== '') { // check if the field value is set (continue if so, otherwise skip condition verification)\r\n var model = modelHelper.deserializeObject(params.form, params.fieldsMap, params.constsMap, params.enumsMap, params.parsersMap, params.prefix);\r\n toolchain.registerMethods(model, params.methodsList, element.name);\r\n var message = 'Field {0} - {1} expression:\\n[{2}]\\nto be executed within the following context{3}:\\n{4}';\r\n logger.info(typeHelper.string.format(message, element.name, method, params.expression, api.settings.registerAllMethods ? ' (methods not shown)' : '', model));\r\n var exprVal = modelHelper.ctxEval(params.expression, model); // verify assertion, if not satisfied => notify (return false)\r\n return {\r\n valid: exprVal,\r\n condition: exprVal\r\n }\r\n }\r\n return {\r\n valid: true,\r\n condition: undefined // undefined always when value is set (computation redundant)\r\n }\r\n },\r\n\r\n computeRequiredIf = function(method, value, element, params) {\r\n value = modelHelper.adjustGivenValue(value, element, params);\r\n\r\n var exprVal = undefined, model;\r\n var message = 'Field {0} - {1} expression:\\n[{2}]\\nto be executed within the following context{3}:\\n{4}';\r\n if (!api.settings.optimize) { // no optimization - compute requirement condition (which now may have changed) despite the fact field value may be provided\r\n model = modelHelper.deserializeObject(params.form, params.fieldsMap, params.constsMap, params.enumsMap, params.parsersMap, params.prefix);\r\n toolchain.registerMethods(model, params.methodsList, element.name);\r\n logger.info(typeHelper.string.format(message, element.name, method, params.expression, api.settings.registerAllMethods ? ' (methods not shown)' : '', model));\r\n exprVal = modelHelper.ctxEval(params.expression, model);\r\n }\r\n\r\n if (value === undefined || value === null || value === '' // check if the field value is not set (undefined, null or empty string treated at client as null at server)\r\n || (!/\\S/.test(value) && !params.allowEmpty)) {\r\n\r\n if (exprVal !== undefined) {\r\n return {\r\n valid: !exprVal,\r\n condition: exprVal\r\n }\r\n }\r\n\r\n model = modelHelper.deserializeObject(params.form, params.fieldsMap, params.constsMap, params.enumsMap, params.parsersMap, params.prefix);\r\n toolchain.registerMethods(model, params.methodsList, element.name);\r\n logger.info(typeHelper.string.format(message, element.name, method, params.expression, api.settings.registerAllMethods ? ' (methods not shown)' : '', model));\r\n exprVal = modelHelper.ctxEval(params.expression, model); // verify requirement, if satisfied => notify (return false)\r\n return {\r\n valid: !exprVal,\r\n condition: exprVal\r\n }\r\n }\r\n return {\r\n valid: true,\r\n condition: exprVal // undefined when optimize flag is on and value is not set (computation redundant)\r\n }\r\n },\r\n\r\n annotations = ' abcdefghijklmnopqrstuvwxyz'; // suffixes for attributes annotating single field multiple times\r\n\r\n // bind requirements first...\r\n $.each(annotations.split(''), function() { // it would be ideal to have exactly as many handlers as there are unique annotations, but the number of annotations isn't known untill DOM is ready\r\n var adapter = typeHelper.string.format('requiredif{0}', $.trim(this));\r\n $.validator.unobtrusive.adapters.add(adapter, ['expression', 'fieldsMap', 'constsMap', 'enumsMap', 'methodsList', 'parsersMap', 'errFieldsMap', 'allowEmpty'], function(options) {\r\n buildAdapter(adapter, options);\r\n });\r\n });\r\n\r\n // ...then move to asserts\r\n $.each(annotations.split(''), function() {\r\n var adapter = typeHelper.string.format('assertthat{0}', $.trim(this));\r\n $.validator.unobtrusive.adapters.add(adapter, ['expression', 'fieldsMap', 'constsMap', 'enumsMap', 'methodsList', 'parsersMap', 'errFieldsMap'], function(options) {\r\n buildAdapter(adapter, options);\r\n });\r\n });\r\n\r\n $.each(annotations.split(''), function() {\r\n var suffix = $.trim(this);\r\n var method = typeHelper.string.format('assertthat{0}', suffix);\r\n $.validator.addMethod(method, function(value, element, params) {\r\n try {\r\n var result = computeAssertThat(method, value, element, params);\r\n\r\n logger.info(typeHelper.string.format('Field {0} - {1} outcome: {2}, assertion {3}.',\r\n element.name,\r\n method,\r\n result.condition === undefined\r\n ? 'assertion expression computation redundant'\r\n : result.condition\r\n ? 'expression true'\r\n : 'expression false',\r\n result.valid ? 'satisfied' : 'not satisfied'));\r\n\r\n $(element).trigger('eavalid', ['assertthat', result.valid, params.expression]);\r\n return result.valid;\r\n } catch (ex) {\r\n logger.fail(ex);\r\n }\r\n }, '');\r\n });\r\n\r\n $.each(annotations.split(''), function() {\r\n var suffix = $.trim(this);\r\n var method = typeHelper.string.format('requiredif{0}', suffix);\r\n $.validator.addMethod(method, function(value, element, params) {\r\n try {\r\n var result = computeRequiredIf(method, value, element, params);\r\n\r\n logger.info(typeHelper.string.format('Field {0} - {1} outcome: {2}, requirement {3}.',\r\n element.name,\r\n method,\r\n result.condition === undefined\r\n ? 'requirement expression computation redundant'\r\n : result.condition\r\n ? 'required'\r\n : 'not required',\r\n result.valid ? 'satisfied' : 'not satisfied'));\r\n\r\n $(element).trigger('eavalid', ['requiredif', result.valid, params.expression, result.condition, annotations.indexOf(suffix)]);\r\n return result.valid;\r\n } catch (ex) {\r\n logger.fail(ex);\r\n }\r\n }, '');\r\n });\r\n\r\n window.ea = api; // expose some tiny api to the ea global object\r\n\r\n}(jQuery, window));\r\n"]}