{"version":3,"sources":["webpack:///application/kalkulator.bundle.js","webpack:///../source/application/kalkulator/lib/tipus-base.js","webpack:///../source/application/kalkulator/kalkulator.module.js","webpack:///./~/angularjs-slider/dist/rzslider.js","webpack:///./~/angular-recaptcha/index.js","webpack:///./~/angular-recaptcha/release/angular-recaptcha.js","webpack:///../source/application/kalkulator/kalkulator-form/kalkulator-form.component.js","webpack:///../source/application/kalkulator/kalkulator-form/kalkulator-form.module.js","webpack:///../source/application/kalkulator/kalkulator-result/kalkulator-result.component.js","webpack:///../source/application/kalkulator/kalkulator-result/kalkulator-result.module.js","webpack:///../source/application/kalkulator/kalkulator-vhk/kalkulator-vhk.component.js","webpack:///../source/application/kalkulator/kalkulator-vhk/kalkulator-vhk.module.js","webpack:///../source/application/kalkulator/kalkulator.component.js","webpack:///../source/application/kalkulator/kalkulator.service.js","webpack:///../source/common/directives/ezresbontas/ezresbontas.js","webpack:///../source/application/kalkulator/kalkulator-form/kalkulator-form.pug","webpack:///../source/application/kalkulator/kalkulator-result/kalkulator-result.pug","webpack:///../source/application/kalkulator/kalkulator-vhk/kalkulator-vhk.pug","webpack:///../source/application/kalkulator/kalkulator.pug"],"names":["webpackJsonp","105","module","__webpack_exports__","__webpack_require__","_classCallCheck","instance","Constructor","TypeError","d","MEGTAKARITAS_TIPUS","JARADEK_TIPUS","TipusBase","this","prototype","isMegtakaritas","tipus","isJaradek","287","exports","300","__WEBPACK_IMPORTED_MODULE_0__kalkulator_component__","__WEBPACK_IMPORTED_MODULE_1__kalkulator_form_kalkulator_form_module__","__WEBPACK_IMPORTED_MODULE_2__kalkulator_result_kalkulator_result_module__","__WEBPACK_IMPORTED_MODULE_3__kalkulator_vhk_kalkulator_vhk_module__","__WEBPACK_IMPORTED_MODULE_4__kalkulator_service__","angular","component","service","328","__WEBPACK_AMD_DEFINE_FACTORY__","__WEBPACK_AMD_DEFINE_ARRAY__","__WEBPACK_AMD_DEFINE_RESULT__","root","factory","undefined","apply","defaultOptions","floor","ceil","step","precision","minRange","maxRange","pushRange","minLimit","maxLimit","id","translate","getLegend","stepsArray","bindIndexForStepsArray","draggableRange","draggableRangeOnly","showSelectionBar","showSelectionBarEnd","showSelectionBarFromValue","showOuterSelectionBars","hidePointerLabels","hideLimitLabels","autoHideLimitLabels","readOnly","disabled","interval","showTicks","showTicksValues","ticksArray","ticksTooltip","ticksValuesTooltip","vertical","getSelectionBarColor","getTickColor","getPointerColor","keyboardSupport","scale","enforceStep","enforceRange","noSwitching","onlyBindHandles","onStart","onChange","onEnd","rightToLeft","reversedControls","boundPointerLabels","mergeRangeLabelsIfSame","customTemplateScope","logScale","customValueToPosition","customPositionToValue","selectionBarGradient","ariaLabel","ariaLabelledBy","ariaLabelHigh","ariaLabelledByHigh","globalOptions","options","value","extend","getOptions","$timeout","func","wait","context","args","result","getTime","Date","now","timeout","previous","later","remaining","arguments","cancel","trailing","$document","$window","$compile","RzSliderOptions","rzThrottle","Slider","scope","sliderElem","lowValue","highValue","range","rzSliderModel","rzSliderHigh","dragging","active","difference","position","lowLimit","highLimit","positionProperty","dimensionProperty","handleHalfDim","maxPos","tracking","minValue","maxValue","valueRange","intermediateTicks","initHasRun","firstKeyDown","internalChange","cmbLabelShown","currentFocusElement","fullBar","selBar","minH","maxH","flrLab","ceilLab","minLab","maxLab","cmbLab","ticks","init","thrLow","thrHigh","self","calcDimFn","calcViewDimensions","applyOptions","syncLowValue","syncHighValue","initElemHandles","manageElementsStyle","setDisabledState","setMinAndMax","addAccessibility","updateCeilLab","updateFloorLab","initHandles","manageEventsBindings","$on","element","on","onLowHandleChange","onHighHandleChange","resetLabelsValue","resetSlider","$watchCollection","newValue","oldValue","$watch","unbindEvents","off","findStepIndex","modelValue","index","i","length","isDate","isObject","getStepValue","sliderValue","applyLowValue","applyHighValue","updateLowHandle","valueToPosition","updateSelectionBar","updateTicksScale","updateAriaAttributes","updateCmbLabel","updateHighHandle","sliderOptions","rzSliderOptions","isNumber","parseStepsArray","customTrFn","String","custom","legend","refocusPointerIfNeeded","onPointerFocus","pointer","ref","focusElement","forEach","children","elem","jElem","leftOutSelBar","rightOutSelBar","rzsp","css","alwaysHide","hideLabelsForTicks","addClass","removeClass","el","hide","rzAlwaysHide","hideEl","showEl","bindEvents","attr","rzsv","translateFn","label","which","useCustomTr","valStr","getDimension","noLabelInjection","hasClass","rzsd","html","Error","roundStep","sanitizeValue","aria-valuenow","aria-valuetext","aria-valuemin","aria-valuemax","handleWidth","barDimension","getBoundingClientRect","getTicksArray","reverse","map","translation","Math","round","tick","selected","isTickSelected","style","-webkit-transform","-moz-transform","-o-transform","-ms-transform","transform","tooltip","tooltipPlacement","getDisplayValue","valueTooltip","valueTooltipPlacement","push","center","setPosition","updateHandles","newPos","getHandleLabelPos","labelName","labelRzsd","nearHandlePos","endOfBarPos","min","max","pointercolor","minPointerStyle","backgroundColor","shFloorCeil","maxPointerStyle","flHidden","clHidden","isMinLabAtFloor","isLabelBelowFloorLab","isMinLabAtCeil","isLabelAboveCeilLab","isMaxLabAtCeil","isCmbLabAtFloor","isCmbLabAtCeil","hideCeil","hideFloor","isRTL","pos","dim","floorPos","floorDim","ceilPos","ceilDim","dimension","isSelectionBarFromRight","positionForRange","abs","centerPosition","isModelGreaterThanCenter","setDimension","color","barStyle","offset","reversed","direction","backgroundImage","from","to","backgroundPosition","backgroundSize","pointerType","lowTr","highTr","labelVal","customStep","steppedDifference","parseFloat","toPrecision","toFixed","visibility","val","bottom","top","right","left","fn","linearValueToPosition","logValueToPosition","percent","minVal","maxVal","log","positionToValue","linearPositionToValue","logPositionToValue","exp","getEventAttr","event","originalEvent","getEventXY","targetTouchId","clientXY","touches","identifier","getEventPosition","sliderPos","getEventNames","eventNames","moveEvent","endEvent","getNearestHandle","distanceMin","distanceMax","focus","barTracking","barStart","barMove","onDragStart","onDragMove","onMove","bind","onTickClick","ehMove","ehEnd","stopPropagation","preventDefault","endHandlerToBeRemovedOnEnd","callOnStart","changedTouches","touchId","isDragging","fromTick","touchForThisSlider","ceilValue","flrValue","positionTrackingHandle","eventName","callOnEnd","one","onPointerBlur","onKeyboardEvent","onKeyUp","getKeyActions","currentValue","increaseStep","decreaseStep","increasePage","decreasePage","actions","UP","DOWN","LEFT","RIGHT","PAGEUP","PAGEDOWN","HOME","END","keyCode","keys","38","40","37","39","33","34","36","35","key","action","newMinValue","newMaxValue","positionTrackingBar","getValue","type","outOfBounds","isAbove","ceilLimit","flrLimit","isUnderFlrLimit","isOverCeilLimit","flrH","ceilH","applyModel","valueChanged","applyMinMaxLimit","applyPushRange","applyMinMaxRange","oppositeValue","callOnChange","$apply","$evalAsync","$emit","directive","RzSlider","restrict","replace","rzSliderTplUrl","templateUrl","attrs","link","slider","run","$templateCache","put","name","ng","throwNoKeyException","provider","config","onLoadFunctionName","setDefaults","defaults","copy","setSiteKey","siteKey","setTheme","theme","setStoken","stoken","setSize","size","setType","setLang","lang","setBadge","badge","setOnLoadFunctionName","$get","$rootScope","$q","$interval","getRecaptcha","recaptcha","when","promise","validateRecaptchaInstance","isRenderFunctionAvailable","isFunction","grecaptcha","render","deferred","defer","instances","vcRecaptchaApiLoadedCallback","callback","resolve","document","querySelector","intervalWait","script","createElement","async","src","find","appendChild","create","elm","conf","sitekey","hl","then","widgetId","reload","reset","$broadcast","execute","useLang","iframe","test","s","indexOf","getResponse","getInstance","destroy","vcRecaptcha","require","response","tabindex","required","onCreate","onSuccess","onExpire","ctrl","$setValidity","cleanup","expired","validate","Boolean","querySelectorAll","parent","remove","isDefined","removeCreationListener","gRecaptchaResponse","expired-callback","resetWidgetId","isUndefined","541","Object","defineProperty","__WEBPACK_IMPORTED_MODULE_0__kalkulator_kalkulator_pcss__","n","542","_possibleConstructorReturn","call","ReferenceError","_inherits","subClass","superClass","constructor","enumerable","writable","configurable","setPrototypeOf","__proto__","__WEBPACK_IMPORTED_MODULE_0__kalkulator_form_pug__","__WEBPACK_IMPORTED_MODULE_0__kalkulator_form_pug___default","__WEBPACK_IMPORTED_MODULE_1__common_native_accessible_select_native_accessible_select__","__WEBPACK_IMPORTED_MODULE_2__common_tooltip_tooltip__","__WEBPACK_IMPORTED_MODULE_3__lib_tipus_base__","KalkulatorFormComponent","DEFAULT_AGE","DEFAULT_EXPECTED_YIELD","DEFAULT_YEARS","template","transclude","tooltipFormContent","bindings","hozamok","vegpontok","onCalculate","onTabChange","controller","KalkulatorFormController","$scope","$element","_this","_TipusBase","expectedYieldInput","ageInput","_setSliderLimits","model","age","yearsInput","years","expectedYieldTab1","monthlyPaymentInput","monthlyAnnuityInput","kalkulatorForm","$setUntouched","$setPristine","customYield","setTimeout","Array","item","$inject","$onInit","_this2","activeTab","monthlyPayment","monthlyAnnuity","ageOptions","yearsOptions","monthlyPaymentOptions","monthlyAnnuityOptions","expectedYieldOptions","_this3","vegpont","array","minimumAnnuityYears","minimumAnnuityAmount","maximumYield","minimumPayment","onMonthlyPaymentBlur","_this4","onMonthlyAnnuityBlur","_this5","isMonthlyAnnuityMinusDisabled","isMonthlyAnnuityPlusDisabled","decreaseMonthlyAnnuity","increaseMonthlyAnnuity","isAgeMinusDisabled","isAgePlusDisabled","decreaseAge","increaseAge","isYearsMinusDisabled","isYearsPlusDisabled","decreaseYears","increaseYears","isExpectedYieldMinusDisabled","isExpectedYieldPlusDisabled","decreaseExpectedYield","increaseExpectedYield","isMonthlyPaymentMinusDisabled","isMonthlyPaymentPlusDisabled","decreaseMonthlyPayment","increaseMonthlyPayment","calculate","$valid","data","expectedYield","expectedYieldTab2","expectedYieldTab3","assign","543","__WEBPACK_IMPORTED_MODULE_0__kalkulator_form_component__","__WEBPACK_IMPORTED_MODULE_1__common_directives_ezresbontas_ezresbontas__","__WEBPACK_IMPORTED_MODULE_2_angularjs_slider__","__WEBPACK_IMPORTED_MODULE_2_angularjs_slider___default","KalkulatorFormModule","a","544","__WEBPACK_IMPORTED_MODULE_0__kalkulator_result_pug__","__WEBPACK_IMPORTED_MODULE_0__kalkulator_result_pug___default","__WEBPACK_IMPORTED_MODULE_1__common_tooltip_tooltip__","__WEBPACK_IMPORTED_MODULE_2__lib_tipus_base__","KalkulatorResultComponent","tooltipResultContent","eredmeny","KalkulatorResultController","getPdfUrl","apiType","url","545","__WEBPACK_IMPORTED_MODULE_0__kalkulator_result_component__","KalkulatorResultModule","546","__WEBPACK_IMPORTED_MODULE_0__kalkulator_vhk_pug__","__WEBPACK_IMPORTED_MODULE_0__kalkulator_vhk_pug___default","__WEBPACK_IMPORTED_MODULE_1__common_constants_consts__","__WEBPACK_IMPORTED_MODULE_2__common_native_accessible_select_native_accessible_select__","KalkulatorVhkComponent","visszahivasIdok","success","onPostForm","KalkulatorVhkController","vcRecaptchaService","patterns","email","phone","simpleText","number","membership","postContactForm","visszahivasKeresForm","547","__WEBPACK_IMPORTED_MODULE_0__kalkulator_vhk_component__","__WEBPACK_IMPORTED_MODULE_1_angular_recaptcha__","__WEBPACK_IMPORTED_MODULE_1_angular_recaptcha___default","KalkulatorVhkModule","548","__WEBPACK_IMPORTED_MODULE_0__kalkulator_pug__","__WEBPACK_IMPORTED_MODULE_0__kalkulator_pug___default","__WEBPACK_IMPORTED_MODULE_1__lib_tipus_base__","KalkulatorComponent","_KALKULACIO_METODUSOK","KALKULACIO_METODUSOK","KalkulatorController","KalkulatorService","kalkulatorService","catch","err","resetResults","kalkulacioMetodus","getElementById","scrollIntoView","sendVhk","dataToSend","calculationId","vhkSuccess","549","$http","get","megtakaritasKalkulacio","post","jaradekKalkulacio","captchaValue","headers","captcha","566","$filter","ngModel","tortSzam","ezresBontas","$formatters","unshift","$modelValue","$parsers","viewValue","convertableNumber","viewNumber","match","slice","b","$setViewValue","$render","601","locals","pug_html","602","603","604"],"mappings":"AAAAA,cAAc,IAERC,IACA,SAAUC,EAAQC,EAAqBC,GAE7C,YAGA,SAASC,GAAgBC,EAAUC,GAAe,KAAMD,YAAoBC,IAAgB,KAAM,IAAIC,WAAU,qCAFjFJ,EAAoBK,EAAEN,EAAqB,IAAK,WAAa,MAAOO,KACpEN,EAAoBK,EAAEN,EAAqB,IAAK,WAAa,MAAOQ,ICP5F,IAAMD,GAAqB,eACrBC,EAAgB,UAERC,EDUL,WACf,QAASA,KACRP,EAAgBQ,KAAMD,GAWvB,MARAA,GAAUE,UCdVC,eDcqC,WCbpC,MAAOF,MAAKG,OAASN,GDiBtBE,EAAUE,UCfVG,UDegC,WCd/B,MAAOJ,MAAKG,OAASL,GDkBfC,IAGqBT,GAAuB,EAAI,GAIlDe,IACA,SAAUhB,EAAQiB,KAMlBC,IACA,SAAUlB,EAAQC,EAAqBC,GAE7C,YACqB,IAAIiB,GAAsDjB,EAAoB,KAC1EkB,EAAwElB,EAAoB,KAC5FmB,EAA4EnB,EAAoB,KAChGoB,EAAsEpB,EAAoB,KAC1FqB,EAAoDrB,EAAoB,IE3CjGsB,SACExB,OAAO,cAAeoB,EAAA,EAAsBC,EAAA,EAAwBC,EAAA,IACpEG,UAAU,aAAcN,EAAA,GACxBO,QAAQ,oBAAqBH,EAAA,IFkDzBI,IACA,SAAU3B,EAAQiB,EAASf,GG3DjC,GAAA0B,GAAAC,EAAAC,GAMC,SAAAC,EAAAC,GACD,YAIAH,IAAA3B,EAAA,KAAA0B,EAAA,MAAAK,MAAAH,EAAA,kBAAAF,KAAAM,MAAAjB,EAAAY,GAAAD,KAAA5B,EAAAiB,QAAAa,IAeCnB,EAAA,SAAAa,GACD,YACA,IAAAxB,GAAAwB,EACAxB,OAAA,eACAgC,QAAA,6BACA,GAAAG,IACAC,MAAA,EACAC,KAAA,KACAC,KAAA,EACAC,UAAA,EACAC,SAAA,KACAC,SAAA,KACAC,WAAA,EACAC,SAAA,KACAC,SAAA,KACAC,GAAA,KACAC,UAAA,KACAC,UAAA,KACAC,WAAA,KACAC,wBAAA,EACAC,gBAAA,EACAC,oBAAA,EACAC,kBAAA,EACAC,qBAAA,EACAC,0BAAA,KACAC,wBAAA,EACAC,mBAAA,EACAC,iBAAA,EACAC,qBAAA,EACAC,UAAA,EACAC,UAAA,EACAC,SAAA,IACAC,WAAA,EACAC,iBAAA,EACAC,WAAA,KACAC,aAAA,KACAC,mBAAA,KACAC,UAAA,EACAC,qBAAA,KACAC,aAAA,KACAC,gBAAA,KACAC,iBAAA,EACAC,MAAA,EACAC,aAAA,EACAC,cAAA,EACAC,aAAA,EACAC,iBAAA,EACAC,QAAA,KACAC,SAAA,KACAC,MAAA,KACAC,aAAA,EACAC,kBAAA,EACAC,oBAAA,EACAC,wBAAA,EACAC,oBAAA,KACAC,UAAA,EACAC,sBAAA,KACAC,sBAAA,KACAC,qBAAA,KACAC,UAAA,KACAC,eAAA,KACAC,cAAA,KACAC,mBAAA,MAEAC,KAEA7D,IAkBA,OARAA,GAAA8D,QAAA,SAAAC,GACAvE,EAAAwE,OAAAH,EAAAE,IAGA/D,EAAAiE,WAAA,SAAAH,GACA,MAAAtE,GAAAwE,UAAgC7D,EAAA0D,EAAAC,IAGhC9D,IAEAA,QAAA,kCAAAkE,GAWA,gBAAAC,EAAAC,EAAAN,GAGA,GAKAO,GAAAC,EAAAC,EALAC,EACAC,KAAAC,KACA,WACA,UAAAD,OAAAD,WAGAG,EAAA,KACAC,EAAA,CACAd,QACA,IAAAe,GAAA,WACAD,EAAAJ,IACAG,EAAA,KACAJ,EAAAJ,EAAAjE,MAAAmE,EAAAC,GACAD,EAAAC,EAAA,KAEA,mBACA,GAAAI,GAAAF,IACAM,EAAAV,GAAAM,EAAAE,EAYA,OAXAP,GAAA1F,KACA2F,EAAAS,UACAD,GAAA,GACAZ,EAAAc,OAAAL,GACAA,EAAA,KACAC,EAAAF,EACAH,EAAAJ,EAAAjE,MAAAmE,EAAAC,GACAD,EAAAC,EAAA,MACWK,IAAA,IAAAb,EAAAmB,WACXN,EAAAT,EAAAW,EAAAC,IAEAP,OAIAvE,QAAA,gGACAkE,EACAgB,EACAC,EACAC,EACAC,EACAC,GAWA,GAAAC,GAAA,SAAAC,EAAAC,GAMA9G,KAAA6G,QAMA7G,KAAA+G,SAAA,EAMA/G,KAAAgH,UAAA,EAOAhH,KAAA8G,aAOA9G,KAAAiH,UACA3F,KAAAtB,KAAA6G,MAAAK,mBACA5F,KAAAtB,KAAA6G,MAAAM,aAOAnH,KAAAoH,UACAC,QAAA,EACAjC,MAAA,EACAkC,WAAA,EACAC,SAAA,EACAC,SAAA,EACAC,UAAA,GAOAzH,KAAA0H,iBAAA,OAMA1H,KAAA2H,kBAAA,QAOA3H,KAAA4H,cAAA,EAOA5H,KAAA6H,OAAA,EAOA7H,KAAA4B,UAAA,EAOA5B,KAAA2B,KAAA,EAOA3B,KAAA8H,SAAA,GAOA9H,KAAA+H,SAAA,EAOA/H,KAAAgI,SAAA,EAOAhI,KAAAiI,WAAA,EAOAjI,KAAAkI,mBAAA,EAOAlI,KAAAmI,YAAA,EAOAnI,KAAAoI,cAAA,EAMApI,KAAAqI,gBAAA,EAMArI,KAAAsI,eAAA,EAKAtI,KAAAuI,oBAAA,KAGAvI,KAAAwI,QAAA,KACAxI,KAAAyI,OAAA,KACAzI,KAAA0I,KAAA,KACA1I,KAAA2I,KAAA,KACA3I,KAAA4I,OAAA,KACA5I,KAAA6I,QAAA,KACA7I,KAAA8I,OAAA,KACA9I,KAAA+I,OAAA,KACA/I,KAAAgJ,OAAA,KACAhJ,KAAAiJ,MAAA,KAGAjJ,KAAAkJ,OAgsEA,OA5rEAtC,GAAA3G,WAMAiJ,KAAA,WACA,GAAAC,GACAC,EACAC,EAAArJ,KAEAsJ,EAAA,WACAD,EAAAE,qBAGAvJ,MAAAwJ,eACAxJ,KAAAyJ,eACAzJ,KAAAiH,OAAAjH,KAAA0J,gBACA1J,KAAA2J,kBACA3J,KAAA4J,sBACA5J,KAAA6J,mBACA7J,KAAAuJ,qBACAvJ,KAAA8J,eACA9J,KAAA+J,mBACA/J,KAAAgK,gBACAhK,KAAAiK,iBACAjK,KAAAkK,cACAlK,KAAAmK,uBAGAnK,KAAA6G,MAAAuD,IAAA,uBAAAd,GAGAzI,EAAAwJ,QAAA7D,GAAA8D,GAAA,SAAAhB,GAEAtJ,KAAAmI,YAAA,EAGAgB,EAAAxC,EAAA,WACA0C,EAAAkB,qBACWlB,EAAAlE,QAAAjC,UAEXkG,EAAAzC,EAAA,WACA0C,EAAAmB,sBACWnB,EAAAlE,QAAAjC,UAEXlD,KAAA6G,MAAAuD,IAAA,iCACAf,EAAAoB,mBACAtB,IACAE,EAAApC,OACAmC,IAEAC,EAAAqB,gBAKA1K,KAAA6G,MAAA8D,iBAAA,6BACAC,EACAC,GAEAD,IAAAC,IACAxB,EAAAG,eACAH,EAAAI,eACAJ,EAAApC,OAAAoC,EAAAK,gBACAL,EAAAqB,iBAGA1K,KAAA6G,MAAAiE,OAAA,yBAAAF,EAAAC,GACAxB,EAAAhB,gBACAuC,IAAAC,GACA1B,MAGAnJ,KAAA6G,MAAAiE,OAAA,wBAAAF,EAAAC,GACAxB,EAAAhB,gBACAuC,IAAAC,IACA,MAAAD,GAAAxB,KAEAC,EAAApC,OAAA,MAAA2D,IACAvB,EAAApC,OAAA,MAAA2D,KAEAvB,EAAAG,eACAH,EAAAqB,kBAIA1K,KAAA6G,MAAAuD,IAAA,sBACAf,EAAA0B,eACAlK,EAAAwJ,QAAA7D,GAAAwE,IAAA,SAAA1B,GACAD,EAAAd,oBAAA,QAIA0C,cAAA,SAAAC,GAEA,OADAC,GAAA,EACAC,EAAA,EAAyBA,EAAApL,KAAAmF,QAAA9C,WAAAgJ,OAAoCD,IAAA,CAC7D,GAAAzJ,GAAA3B,KAAAmF,QAAA9C,WAAA+I,EACA,IAAAzJ,IAAAuJ,EAAA,CACAC,EAAAC,CACA,OACa,GAAAvK,EAAAyK,OAAA3J,IACb,GAAAA,EAAAkE,YAAAqF,EAAArF,UAAA,CACAsF,EAAAC,CACA,YAEa,IAAAvK,EAAA0K,SAAA5J,KAEbd,EAAAyK,OAAA3J,EAAAyD,QACAzD,EAAAyD,MAAAS,YAAAqF,EAAArF,WACAlE,EAAAyD,QAAA8F,GACA,CACAC,EAAAC,CACA,QAIA,MAAAD,IAGA1B,aAAA,WACAzJ,KAAAmF,QAAA9C,WACArC,KAAAmF,QAAA7C,uBAEAtC,KAAA+G,SAAA/G,KAAA6G,MAAAK,cADAlH,KAAA+G,SAAA/G,KAAAiL,cAAAjL,KAAA6G,MAAAK,eAEWlH,KAAA+G,SAAA/G,KAAA6G,MAAAK,eAGXwC,cAAA,WACA1J,KAAAmF,QAAA9C,WACArC,KAAAmF,QAAA7C,uBAEAtC,KAAAgH,UAAAhH,KAAA6G,MAAAM,aADAnH,KAAAgH,UAAAhH,KAAAiL,cAAAjL,KAAA6G,MAAAM,cAEWnH,KAAAgH,UAAAhH,KAAA6G,MAAAM,cAGXqE,aAAA,SAAAC,GACA,GAAA9J,GAAA3B,KAAAmF,QAAA9C,WAAAoJ,EACA,OAAA5K,GAAAyK,OAAA3J,KACAd,EAAA0K,SAAA5J,KAAAyD,MACAzD,GAGA+J,cAAA,WACA1L,KAAAmF,QAAA9C,WACArC,KAAAmF,QAAA7C,uBAEAtC,KAAA6G,MAAAK,cAAAlH,KAAA+G,SADA/G,KAAA6G,MAAAK,cAAAlH,KAAAwL,aAAAxL,KAAA+G,UAEW/G,KAAA6G,MAAAK,cAAAlH,KAAA+G,UAGX4E,eAAA,WACA3L,KAAAmF,QAAA9C,WACArC,KAAAmF,QAAA7C,uBAEAtC,KAAA6G,MAAAM,aAAAnH,KAAAgH,UADAhH,KAAA6G,MAAAM,aAAAnH,KAAAwL,aAAAxL,KAAAgH,WAEWhH,KAAA6G,MAAAM,aAAAnH,KAAAgH,WAMXuD,kBAAA,WACAvK,KAAAyJ,eACAzJ,KAAAiH,OAAAjH,KAAA0J,gBACA1J,KAAA8J,eACA9J,KAAA4L,gBAAA5L,KAAA6L,gBAAA7L,KAAA+G,WACA/G,KAAA8L,qBACA9L,KAAA+L,mBACA/L,KAAAgM,uBACAhM,KAAAiH,OACAjH,KAAAiM,kBAOAzB,mBAAA,WACAxK,KAAAyJ,eACAzJ,KAAA0J,gBACA1J,KAAA8J,eACA9J,KAAAkM,iBAAAlM,KAAA6L,gBAAA7L,KAAAgH,YACAhH,KAAA8L,qBACA9L,KAAA+L,mBACA/L,KAAAiM,iBACAjM,KAAAgM,wBAMAxC,aAAA,WACA,GAAA2C,EAEAA,GADAnM,KAAA6G,MAAAuF,gBACApM,KAAA6G,MAAAuF,qBAGApM,KAAAmF,QAAAuB,EAAApB,WAAA6G,GAEAnM,KAAAmF,QAAAxD,MAAA,IAAA3B,KAAAmF,QAAAxD,KAAA,GAEA3B,KAAAiH,UACA3F,KAAAtB,KAAA6G,MAAAK,mBACA5F,KAAAtB,KAAA6G,MAAAM,aACAnH,KAAAmF,QAAA5C,eACAvC,KAAAiH,OAAAjH,KAAAmF,QAAA5C,eACAvC,KAAAmF,QAAA3C,mBACAxC,KAAAiH,OAAAjH,KAAAmF,QAAA3C,mBACAxC,KAAAmF,QAAA3C,qBACAxC,KAAAmF,QAAA5C,gBAAA,GAGAvC,KAAAmF,QAAAhC,UACAnD,KAAAmF,QAAAhC,WACAnD,KAAAmF,QAAA/B,mBACApD,KAAAmF,QAAA9B,WACArD,KAAA6G,MAAA1D,UAAAnD,KAAAmF,QAAAhC,WAEAtC,EAAAwL,SAAArM,KAAAmF,QAAAhC,YACAnD,KAAAmF,QAAA9B,cAEArD,KAAAkI,mBAAA,GAEAlI,KAAAmF,QAAA1C,iBACAzC,KAAAmF,QAAA1C,kBACAzC,KAAAmF,QAAAzC,qBACA,OAAA1C,KAAAmF,QAAAxC,0BAEA3C,KAAAmF,QAAA9C,WACArC,KAAAsM,mBAEAtM,KAAAmF,QAAAhD,UAAAnC,KAAAuM,WAAAvM,KAAAmF,QAAAhD,UAEAnC,KAAAuM,WAAA,SAAAnH,GACA,MAAAoH,QAAApH,IAGApF,KAAAoC,UAAApC,KAAAmF,QAAA/C,WAGApC,KAAAmF,QAAA3B,WACAxD,KAAA0H,iBAAA,SACA1H,KAAA2H,kBAAA,UAGA3H,KAAAmF,QAAAV,sBACAzE,KAAA6G,MAAA4F,OAAAzM,KAAAmF,QAAAV,sBAGA6H,gBAAA,WACAtM,KAAAmF,QAAA1D,MAAA,EACAzB,KAAAmF,QAAAzD,KAAA1B,KAAAmF,QAAA9C,WAAAgJ,OAAA,EACArL,KAAAmF,QAAAxD,KAAA,EAEA3B,KAAAmF,QAAAhD,UACAnC,KAAAuM,WAAAvM,KAAAmF,QAAAhD,UAEAnC,KAAAuM,WAAA,SAAArB,GACA,MAAAlL,MAAAmF,QAAA7C,uBACAtC,KAAAwL,aAAAN,GACAA,GAIAlL,KAAAoC,UAAA,SAAA+I,GACA,GAAAxJ,GAAA3B,KAAAmF,QAAA9C,WAAA8I,EACA,OAAAtK,GAAA0K,SAAA5J,KAAA+K,OACA,OASAhC,YAAA,WACA1K,KAAA4J,sBACA5J,KAAA+J,mBACA/J,KAAA8J,eACA9J,KAAAgK,gBACAhK,KAAAiK,iBACAjK,KAAA+K,eACA/K,KAAAmK,uBACAnK,KAAA6J,mBACA7J,KAAAuJ,qBACAvJ,KAAA2M,0BAGAA,uBAAA,WACA3M,KAAAuI,sBACAvI,KAAA4M,eACA5M,KAAAuI,oBAAAsE,QACA7M,KAAAuI,oBAAAuE,KAEA9M,KAAA+M,aAAA/M,KAAAuI,oBAAAsE,WAWAlD,gBAAA,WAEA9I,EAAAmM,QACAhN,KAAA8G,WAAAmG,WACA,SAAAC,EAAA/B,GACA,GAAAgC,GAAAtM,EAAAwJ,QAAA6C,EAEA,QAAA/B,GACA,OACAnL,KAAAoN,cAAAD,CACA,MACA,QACAnN,KAAAqN,eAAAF,CACA,MACA,QACAnN,KAAAwI,QAAA2E,CACA,MACA,QACAnN,KAAAyI,OAAA0E,CACA,MACA,QACAnN,KAAA0I,KAAAyE,CACA,MACA,QACAnN,KAAA2I,KAAAwE,CACA,MACA,QACAnN,KAAA4I,OAAAuE,CACA,MACA,QACAnN,KAAA6I,QAAAsE,CACA,MACA,QACAnN,KAAA8I,OAAAqE,CACA,MACA,QACAnN,KAAA+I,OAAAoE,CACA,MACA,SACAnN,KAAAgJ,OAAAmE,CACA,MACA,SACAnN,KAAAiJ,MAAAkE,IAIAnN,MAIAA,KAAAyI,OAAA6E,KAAA,EACAtN,KAAA0I,KAAA4E,KAAA,EACAtN,KAAA2I,KAAA2E,KAAA,EACAtN,KAAA4I,OAAA0E,KAAA,EACAtN,KAAA6I,QAAAyE,KAAA,EACAtN,KAAA8I,OAAAwE,KAAA,EACAtN,KAAA+I,OAAAuE,KAAA,EACAtN,KAAAgJ,OAAAsE,KAAA,GAMA1D,oBAAA,WACA5J,KAAAiH,MACAjH,KAAA2I,KAAA4E,IAAA,cADAvN,KAAA2I,KAAA4E,IAAA,kBAGAvN,KAAAwN,WACAxN,KAAA4I,OACA5I,KAAAmF,QAAA/B,iBAAApD,KAAAmF,QAAArC,iBAEA9C,KAAAwN,WACAxN,KAAA6I,QACA7I,KAAAmF,QAAA/B,iBAAApD,KAAAmF,QAAArC,gBAGA,IAAA2K,GACAzN,KAAAmF,QAAA/B,kBAAApD,KAAAkI,iBACAlI,MAAAwN,WACAxN,KAAA8I,OACA2E,GAAAzN,KAAAmF,QAAAtC,mBAEA7C,KAAAwN,WACAxN,KAAA+I,OACA0E,IAAAzN,KAAAiH,OAAAjH,KAAAmF,QAAAtC,mBAEA7C,KAAAwN,WACAxN,KAAAgJ,OACAyE,IAAAzN,KAAAiH,OAAAjH,KAAAmF,QAAAtC,mBAEA7C,KAAAwN,WACAxN,KAAAyI,QACAzI,KAAAiH,QAAAjH,KAAAmF,QAAA1C,kBAEAzC,KAAAwN,WACAxN,KAAAoN,eACApN,KAAAiH,QAAAjH,KAAAmF,QAAAvC,wBAEA5C,KAAAwN,WACAxN,KAAAqN,gBACArN,KAAAiH,QAAAjH,KAAAmF,QAAAvC,wBAGA5C,KAAAiH,OAAAjH,KAAAmF,QAAAvC,wBACA5C,KAAAwI,QAAAkF,SAAA,kBAGA1N,KAAAmF,QAAA3B,UAAAxD,KAAA8G,WAAA4G,SAAA,eAEA1N,KAAAmF,QAAA5C,eAAAvC,KAAAyI,OAAAiF,SAAA,gBACA1N,KAAAyI,OAAAkF,YAAA,gBAEA3N,KAAAkI,mBAAAlI,KAAAmF,QAAA/B,iBACApD,KAAAiJ,MAAAyE,SAAA,0BAGAF,WAAA,SAAAI,EAAAC,GACAD,EAAAE,aAAAD,EACAA,EAAA7N,KAAA+N,OAAAH,GACA5N,KAAAgO,OAAAJ,IAQAzD,qBAAA,WACAnK,KAAAmF,QAAAlC,UAAAjD,KAAAmF,QAAAnC,SACAhD,KAAA+K,eACA/K,KAAAiO,cAQApE,iBAAA,WACA7J,KAAAmF,QAAAlC,SACAjD,KAAA8G,WAAAoH,KAAA,uBAEAlO,KAAA8G,WAAAoH,KAAA,kBASAzD,iBAAA,WACAzK,KAAA8I,OAAAqF,SAAA7M,GACAtB,KAAA+I,OAAAoF,SAAA7M,IAUA4I,YAAA,WACAlK,KAAA4L,gBAAA5L,KAAA6L,gBAAA7L,KAAA+G,WAMA/G,KAAAiH,OACAjH,KAAAkM,iBAAAlM,KAAA6L,gBAAA7L,KAAAgH,YACAhH,KAAA8L,qBACA9L,KAAAiH,OAAAjH,KAAAiM,iBAEAjM,KAAA+L,oBAYAqC,YAAA,SAAAhJ,EAAAiJ,EAAAC,EAAAC,GACAA,MAAAjN,KAAAiN,IAEA,IAAAC,GAAA,GACAC,GAAA,EACAC,EAAAL,EAAAM,SAAA,qBAEAJ,IACAvO,KAAAmF,QAAA9C,aAAArC,KAAAmF,QAAA7C,yBACA8C,EAAApF,KAAAwL,aAAApG,IACAoJ,EAAAhC,OAAAxM,KAAAuM,WAAAnH,EAAApF,KAAAmF,QAAAjD,GAAAoM,KAEAE,EAAAhC,OAAApH,QAIA9D,KAAA+M,EAAAF,MACAE,EAAAF,KAAA9C,SAAAmD,EAAAnD,QACAgD,EAAAF,KAAA9C,OAAA,OAAAgD,EAAAO,QAEAH,GAAA,EACAJ,EAAAF,KAAAK,GAGAE,GACAL,EAAAQ,KAAAL,GAEAxO,KAAA6G,MAAAyH,EAAA,SAAAE,EAGAC,GACAzO,KAAAyO,aAAAJ,IASAvE,aAAA,WAKA,GAJA9J,KAAA2B,MAAA3B,KAAAmF,QAAAxD,KACA3B,KAAA4B,WAAA5B,KAAAmF,QAAAvD,UAEA5B,KAAA+H,SAAA/H,KAAAmF,QAAA1D,MACAzB,KAAAmF,QAAAT,UAAA,IAAA1E,KAAA+H,SACA,KAAA+G,OAAA,2CAEA9O,MAAAmF,QAAArB,cACA9D,KAAA+G,SAAA/G,KAAA+O,UAAA/O,KAAA+G,UACA/G,KAAAiH,QAAAjH,KAAAgH,UAAAhH,KAAA+O,UAAA/O,KAAAgH,aAGA,MAAAhH,KAAAmF,QAAAzD,KAAA1B,KAAAgI,SAAAhI,KAAAmF,QAAAzD,KAEA1B,KAAAgI,SAAAhI,KAAAmF,QAAAzD,KAAA1B,KAAAiH,MACAjH,KAAAgH,UACAhH,KAAA+G,SAEA/G,KAAAmF,QAAApB,eACA/D,KAAA+G,SAAA/G,KAAAgP,cAAAhP,KAAA+G,UACA/G,KAAAiH,QAAAjH,KAAAgH,UAAAhH,KAAAgP,cAAAhP,KAAAgH,aAGAhH,KAAA0L,gBACA1L,KAAAiH,OAAAjH,KAAA2L,iBAEA3L,KAAAiI,WAAAjI,KAAAgI,SAAAhI,KAAA+H,UAUAgC,iBAAA,WACA/J,KAAA0I,KAAAwF,KAAA,iBACAlO,KAAAgM,wBAEAhM,KAAAmF,QAAAvB,iBACA5D,KAAAmF,QAAAnC,UAAAhD,KAAAmF,QAAAlC,SAGAjD,KAAA0I,KAAAwF,KAAA,eADAlO,KAAA0I,KAAAwF,KAAA,gBAEAlO,KAAAmF,QAAA3B,UACAxD,KAAA0I,KAAAwF,KAAA,+BACAlO,KAAAmF,QAAAL,UACA9E,KAAA0I,KAAAwF,KAAA,aAAAlO,KAAAmF,QAAAL,WACA9E,KAAAmF,QAAAJ,gBACA/E,KAAA0I,KAAAwF,KAAA,kBAAAlO,KAAAmF,QAAAJ,gBAEA/E,KAAAiH,QACAjH,KAAA2I,KAAAuF,KAAA,kBAEAlO,KAAAmF,QAAAvB,iBACA5D,KAAAmF,QAAAnC,UAAAhD,KAAAmF,QAAAlC,SAGAjD,KAAA2I,KAAAuF,KAAA,eADAlO,KAAA2I,KAAAuF,KAAA,gBAEAlO,KAAAmF,QAAA3B,UACAxD,KAAA2I,KAAAuF,KAAA,+BACAlO,KAAAmF,QAAAH,cACAhF,KAAA2I,KAAAuF,KAAA,aAAAlO,KAAAmF,QAAAH,eACAhF,KAAAmF,QAAAF,oBACAjF,KAAA2I,KAAAuF,KAAA,kBAAAlO,KAAAmF,QAAAF,sBAOA+G,qBAAA,WACAhM,KAAA0I,KAAAwF,MACAe,gBAAAjP,KAAA6G,MAAAK,cACAgI,iBAAAlP,KAAAuM,WACAvM,KAAA6G,MAAAK,cACAlH,KAAAmF,QAAAjD,GACA,SAEAiN,gBAAAnP,KAAA+H,SACAqH,gBAAApP,KAAAgI,WAEAhI,KAAAiH,OACAjH,KAAA2I,KAAAuF,MACAe,gBAAAjP,KAAA6G,MAAAM,aACA+H,iBAAAlP,KAAAuM,WACAvM,KAAA6G,MAAAM,aACAnH,KAAAmF,QAAAjD,GACA,QAEAiN,gBAAAnP,KAAA+H,SACAqH,gBAAApP,KAAAgI,YAYAuB,mBAAA,WACA,GAAA8F,GAAArP,KAAAyO,aAAAzO,KAAA0I,KAYA,IAVA1I,KAAA4H,cAAAyH,EAAA,EACArP,KAAAsP,aAAAtP,KAAAyO,aAAAzO,KAAAwI,SAEAxI,KAAA6H,OAAA7H,KAAAsP,aAAAD,EAEArP,KAAAyO,aAAAzO,KAAA8G,YACA9G,KAAA8G,WAAAwG,KAAAtN,KAAA8G,WAAA,GAAAyI,wBACAvP,KAAA0H,kBAGA1H,KAAAmI,WAAA,CACAnI,KAAAiK,iBACAjK,KAAAgK,gBACAhK,KAAAkK,aACA,IAAAb,GAAArJ,IACAuF,GAAA,WACA8D,EAAA0C,uBAUAA,iBAAA,WACA,GAAA/L,KAAAmF,QAAAhC,UAAA,CAEA,GAAAE,GAAArD,KAAAmF,QAAA9B,YAAArD,KAAAwP,gBACArN,EAAAnC,KAAAmF,QAAA3B,SAAA,0BACA6F,EAAArJ,IAEAA,MAAAmF,QAAAd,aAAAhB,EAAAoM,UAEAzP,KAAA6G,MAAAoC,MAAA5F,EAAAqM,IAAA,SAAAtK,GACA,GAAAmC,GAAA8B,EAAAwC,gBAAAzG,EAEAiE,GAAAlE,QAAA3B,WAAA+D,EAAA8B,EAAAxB,OAAAN,EAEA,IAAAoI,GAAAxN,EAAA,IAAAyN,KAAAC,MAAAtI,GAAA,MACAuI,GACAC,SAAA1G,EAAA2G,eAAA5K,GACA6K,OACAC,oBAAAP,EACAQ,iBAAAR,EACAS,eAAAT,EACAU,gBAAAV,EACAW,UAAAX,GAyBA,IAtBAG,EAAAC,UAAA1G,EAAAlE,QAAA1B,uBACAqM,EAAAG,MAAA,oBAAA5G,EAAA5F,yBAEAqM,EAAAC,UAAA1G,EAAAlE,QAAAzB,eACAoM,EAAAG,MAAA,oBAAA5G,EAAA3F,aAAA0B,IAEAiE,EAAAlE,QAAA7B,eACAwM,EAAAS,QAAAlH,EAAAlE,QAAA7B,aAAA8B,GACA0K,EAAAU,iBAAAnH,EAAAlE,QAAA3B,SAAA,gBAGA,IAAA6F,EAAAlE,QAAA/B,iBACAgC,EAAAiE,EAAAlE,QAAA/B,iBAAA,IAEA0M,EAAA1K,MAAAiE,EAAAoH,gBAAArL,EAAA,cACAiE,EAAAlE,QAAA5B,qBACAuM,EAAAY,aAAArH,EAAAlE,QAAA5B,mBAAA6B,GACA0K,EAAAa,sBAAAtH,EAAAlE,QAAA3B,SACA,QACA,QAGA6F,EAAAjH,UAAA,CACA,GAAAsK,GAAArD,EAAAjH,UAAAgD,EAAAiE,EAAAlE,QAAAjD,GACAwK,KAAAoD,EAAApD,UAEA,MAAAoD,OAIAN,cAAA,WACA,GAAA7N,GAAA3B,KAAA2B,KACA0B,IACArD,MAAAkI,oBAAAvG,EAAA3B,KAAAmF,QAAAhC,UACA,KACA,GAAAiC,GAAApF,KAAA+H,SACA3C,GAAApF,KAAAgI,SACA5C,GAAAzD,EAEA0B,EAAAuN,KAAAxL,EAEA,OAAA/B,IAGA2M,eAAA,SAAA5K,GACA,IAAApF,KAAAiH,MACA,UAAAjH,KAAAmF,QAAAxC,0BAAA,CACA,GAAAkO,GAAA7Q,KAAAmF,QAAAxC,yBACA,IACA3C,KAAA+G,SAAA8J,GACAzL,GAAAyL,GACAzL,GAAApF,KAAA+G,SAEA,QACA,IACA/G,KAAA+G,SAAA8J,GACAzL,GAAAyL,GACAzL,GAAApF,KAAA+G,SAEA,aACa,IAAA/G,KAAAmF,QAAAzC,qBACb,GAAA0C,GAAApF,KAAA+G,SAAA,aACa,IAAA/G,KAAAmF,QAAA1C,kBAAA2C,GAAApF,KAAA+G,SACb,QAEA,UAAA/G,KAAAiH,OAAA7B,GAAApF,KAAA+G,UAAA3B,GAAApF,KAAAgH,YAUAiD,eAAA,WACAjK,KAAAoO,YAAApO,KAAA+H,SAAA/H,KAAA4I,OAAA,SACA5I,KAAAyO,aAAAzO,KAAA4I,OACA,IAAArB,GAAAvH,KAAAmF,QAAAd,YACArE,KAAAsP,aAAAtP,KAAA4I,OAAAgG,KACA,CACA5O,MAAA8Q,YAAA9Q,KAAA4I,OAAArB,IAQAyC,cAAA,WACAhK,KAAAoO,YAAApO,KAAAgI,SAAAhI,KAAA6I,QAAA,QACA7I,KAAAyO,aAAAzO,KAAA6I,QACA,IAAAtB,GAAAvH,KAAAmF,QAAAd,YACA,EACArE,KAAAsP,aAAAtP,KAAA6I,QAAA+F,IACA5O,MAAA8Q,YAAA9Q,KAAA6I,QAAAtB,IASAwJ,cAAA,SAAAzC,EAAA0C,GACA,aAAA1C,EAAAtO,KAAA4L,gBAAAoF,GACAhR,KAAAkM,iBAAA8E,GAEAhR,KAAA8L,qBACA9L,KAAA+L,mBACA/L,KAAAiH,OAAAjH,KAAAiM,kBAWAgF,kBAAA,SAAAC,EAAAF,GACA,GAAAG,GAAAnR,KAAAkR,GAAAtC,KACAwC,EAAAJ,EAAAG,EAAA,EAAAnR,KAAA4H,cACAyJ,EAAArR,KAAAsP,aAAA6B,CAEA,OAAAnR,MAAAmF,QAAAZ,mBAGAvE,KAAAmF,QAAAd,aAAA,WAAA6M,IACAlR,KAAAmF,QAAAd,aAAA,WAAA6M,EAEAtB,KAAA0B,IAAAF,EAAAC,GAEAzB,KAAA0B,IAAA1B,KAAA2B,IAAAH,EAAA,GAAAC,GARAD,GAkBAxF,gBAAA,SAAAoF,GAQA,GAPAhR,KAAA8Q,YAAA9Q,KAAA0I,KAAAsI,GACAhR,KAAAoO,YAAApO,KAAA+G,SAAA/G,KAAA8I,OAAA,SACA9I,KAAA8Q,YACA9Q,KAAA8I,OACA9I,KAAAiR,kBAAA,SAAAD,IAGAhR,KAAAmF,QAAAxB,gBAAA,CACA,GAAA6N,GAAAxR,KAAA2D,gBAAA,MACA3D,MAAA6G,MAAA4K,iBACAC,gBAAAF,GAIAxR,KAAAmF,QAAApC,qBACA/C,KAAA2R,eAUAzF,iBAAA,SAAA8E,GAQA,GAPAhR,KAAA8Q,YAAA9Q,KAAA2I,KAAAqI,GACAhR,KAAAoO,YAAApO,KAAAgH,UAAAhH,KAAA+I,OAAA,QACA/I,KAAA8Q,YACA9Q,KAAA+I,OACA/I,KAAAiR,kBAAA,SAAAD,IAGAhR,KAAAmF,QAAAxB,gBAAA,CACA,GAAA6N,GAAAxR,KAAA2D,gBAAA,MACA3D,MAAA6G,MAAA+K,iBACAF,gBAAAF,GAGAxR,KAAAmF,QAAApC,qBACA/C,KAAA2R,eASAA,YAAA,WAEA,IAAA3R,KAAAmF,QAAAtC,kBAAA,CAGA,GAAAgP,IAAA,EACAC,GAAA,EACAC,EAAA/R,KAAAgS,qBAAAhS,KAAA8I,QACAmJ,EAAAjS,KAAAkS,oBAAAlS,KAAA8I,QACAqJ,EAAAnS,KAAAkS,oBAAAlS,KAAA+I,QACAqJ,EAAApS,KAAAgS,qBAAAhS,KAAAgJ,QACAqJ,EAAArS,KAAAkS,oBAAAlS,KAAAgJ,OAkBA,IAhBA+I,GACAF,GAAA,EACA7R,KAAA+N,OAAA/N,KAAA4I,UAEAiJ,GAAA,EACA7R,KAAAgO,OAAAhO,KAAA4I,SAGAqJ,GACAH,GAAA,EACA9R,KAAA+N,OAAA/N,KAAA6I,WAEAiJ,GAAA,EACA9R,KAAAgO,OAAAhO,KAAA6I,UAGA7I,KAAAiH,MAAA,CACA,GAAAqL,GAAAtS,KAAAsI,cAAA+J,EAAAF,EACAI,EAAAvS,KAAAsI,cACA8J,EACAL,CAEAO,GACAtS,KAAA+N,OAAA/N,KAAA6I,SACaiJ,GACb9R,KAAAgO,OAAAhO,KAAA6I,SAIA0J,EACAvS,KAAA+N,OAAA/N,KAAA4I,QACaiJ,GACb7R,KAAAgO,OAAAhO,KAAA4I,WAKAoJ,qBAAA,SAAA3D,GACA,GAAAmE,GAAAxS,KAAAmF,QAAAd,YACAoO,EAAApE,EAAAf,KACAoF,EAAArE,EAAAO,KACA+D,EAAA3S,KAAA4I,OAAA0E,KACAsF,EAAA5S,KAAA4I,OAAAgG,IACA,OAAA4D,GACAC,EAAAC,GAAAC,EAAA,EACAF,GAAAE,EAAAC,EAAA,GAGAV,oBAAA,SAAA7D,GACA,GAAAmE,GAAAxS,KAAAmF,QAAAd,YACAoO,EAAApE,EAAAf,KACAoF,EAAArE,EAAAO,KACAiE,EAAA7S,KAAA6I,QAAAyE,KACAwF,EAAA9S,KAAA6I,QAAA+F,IACA,OAAA4D,GAAAC,GAAAI,EAAAC,EAAA,EAAAL,EAAAC,GAAAG,EAAA,GAQA/G,mBAAA,WACA,GAAAvE,GAAA,EACAwL,EAAA,EACAC,EAAAhT,KAAAmF,QAAAd,aACArE,KAAAmF,QAAAzC,oBACA1C,KAAAmF,QAAAzC,oBACAuQ,EAAAjT,KAAAmF,QAAAd,YACArE,KAAA2I,KAAA2E,KAAAtN,KAAA4H,cACA5H,KAAA0I,KAAA4E,KAAAtN,KAAA4H,aAEA,IAAA5H,KAAAiH,MACA8L,EAAAnD,KAAAsD,IAAAlT,KAAA2I,KAAA2E,KAAAtN,KAAA0I,KAAA4E,MACA/F,EAAA0L,MAEA,WAAAjT,KAAAmF,QAAAxC,0BAAA,CACA,GAAAkO,GAAA7Q,KAAAmF,QAAAxC,0BACAwQ,EAAAnT,KAAA6L,gBAAAgF,GACAuC,EAAApT,KAAAmF,QAAAd,YACArE,KAAA+G,UAAA8J,EACA7Q,KAAA+G,SAAA8J,CACAuC,IACAL,EAAA/S,KAAA0I,KAAA4E,KAAA6F,EACA5L,EAAA4L,EAAAnT,KAAA4H,gBAEAmL,EAAAI,EAAAnT,KAAA0I,KAAA4E,KACA/F,EAAAvH,KAAA0I,KAAA4E,KAAAtN,KAAA4H,mBAEaoL,IACbD,EACAnD,KAAAsD,IAAAlT,KAAA6H,OAAA7H,KAAA0I,KAAA4E,MAAAtN,KAAA4H,cACAL,EAAAvH,KAAA0I,KAAA4E,KAAAtN,KAAA4H,gBAEAmL,EAAA/S,KAAA0I,KAAA4E,KAAAtN,KAAA4H,cACAL,EAAA,EAwBA,IArBAvH,KAAAqT,aAAArT,KAAAyI,OAAAsK,GACA/S,KAAA8Q,YAAA9Q,KAAAyI,OAAAlB,GACAvH,KAAAiH,OAAAjH,KAAAmF,QAAAvC,yBACA5C,KAAAmF,QAAAd,aACArE,KAAAqT,aAAArT,KAAAqN,eAAA9F,GACAvH,KAAA8Q,YAAA9Q,KAAAqN,eAAA,GACArN,KAAAqT,aACArT,KAAAoN,cACApN,KAAAyO,aAAAzO,KAAAwI,UAAAjB,EAAAwL,IAEA/S,KAAA8Q,YAAA9Q,KAAAoN,cAAA7F,EAAAwL,KAEA/S,KAAAqT,aAAArT,KAAAoN,cAAA7F,GACAvH,KAAA8Q,YAAA9Q,KAAAoN,cAAA,GACApN,KAAAqT,aACArT,KAAAqN,eACArN,KAAAyO,aAAAzO,KAAAwI,UAAAjB,EAAAwL,IAEA/S,KAAA8Q,YAAA9Q,KAAAqN,eAAA9F,EAAAwL,KAGA/S,KAAAmF,QAAA1B,qBAAA,CACA,GAAA6P,GAAAtT,KAAAyD,sBACAzD,MAAA6G,MAAA0M,UACA7B,gBAAA4B,OAEW,IAAAtT,KAAAmF,QAAAN,qBAAA,CACX,GAAA2O,GACA,OAAAxT,KAAAmF,QAAAxC,0BACA3C,KAAA6L,gBAAA7L,KAAAmF,QAAAxC,2BACA,EACA8Q,EAAAD,EAAAjM,EAAA,EAAAyL,EACAU,EAAA1T,KAAAmF,QAAA3B,SACAiQ,EAAA,eACAA,EAAA,cACAzT,MAAA6G,MAAA0M,UACAI,gBACA,sBACAD,EACA,KACA1T,KAAAmF,QAAAN,qBAAA+O,KACA,OACA5T,KAAAmF,QAAAN,qBAAAgP,GACA,UAEA7T,KAAAmF,QAAA3B,UACAxD,KAAA6G,MAAA0M,SAAAO,mBACA,WACAN,EACAT,EACAxL,GACAkM,GAAAzT,KAAA4H,cAAA,IACA,KACA5H,KAAA6G,MAAA0M,SAAAQ,eACA,SAAA/T,KAAAsP,aAAAtP,KAAA4H,eAAA,OAEA5H,KAAA6G,MAAA0M,SAAAO,mBACAN,EACAjM,GACAkM,EAAAzT,KAAA4H,cAAA,GACA,YACA5H,KAAA6G,MAAA0M,SAAAQ,eACA/T,KAAAsP,aAAAtP,KAAA4H,cAAA,aASAnE,qBAAA,WACA,MAAAzD,MAAAiH,MACAjH,KAAAmF,QAAA1B,qBACAzD,KAAA6G,MAAAK,cACAlH,KAAA6G,MAAAM,cAEAnH,KAAAmF,QAAA1B,qBAAAzD,KAAA6G,MAAAK,gBAOAvD,gBAAA,SAAAqQ,GACA,cAAAA,EACAhU,KAAAmF,QAAAxB,gBACA3D,KAAA6G,MAAAM,aACA6M,GAGAhU,KAAAmF,QAAAxB,gBACA3D,KAAA6G,MAAAK,cACA8M,IAQAtQ,aAAA,SAAA0B,GACA,MAAApF,MAAAmF,QAAAzB,aAAA0B,IAQA6G,eAAA,WAUA,GARAjM,KAAAmF,QAAAd,YAEArE,KAAA8I,OAAAwE,KAAAtN,KAAA8I,OAAA8F,KAAA,IAAA5O,KAAA+I,OAAAuE,KAGAtN,KAAA8I,OAAAwE,KAAAtN,KAAA8I,OAAA8F,KAAA,IAAA5O,KAAA+I,OAAAuE,KAGA,CACA,GAAA2G,GAAAjU,KAAAyQ,gBAAAzQ,KAAA+G,SAAA,SACAmN,EAAAlU,KAAAyQ,gBAAAzQ,KAAAgH,UAAA,QACAmN,EAAA,EAEAA,GADAnU,KAAAmF,QAAAX,wBAAAyP,IAAAC,EACAD,EAEAjU,KAAAmF,QAAAd,YACA6P,EAAA,MAAAD,EACAA,EAAA,MAAAC,EAGAlU,KAAAoO,YAAA+F,EAAAnU,KAAAgJ,OAAA,SACA,IAAAyJ,GAAAzS,KAAAmF,QAAAZ,mBACAqL,KAAA0B,IACA1B,KAAA2B,IACAvR,KAAAyI,OAAA6E,KACAtN,KAAAyI,OAAAmG,KAAA,EACA5O,KAAAgJ,OAAA4F,KAAA,EACA,GAEA5O,KAAAsP,aAAAtP,KAAAgJ,OAAA4F,MAEA5O,KAAAyI,OAAA6E,KAAAtN,KAAAyI,OAAAmG,KAAA,EAAA5O,KAAAgJ,OAAA4F,KAAA,CAEA5O,MAAA8Q,YAAA9Q,KAAAgJ,OAAAyJ,GACAzS,KAAAsI,eAAA,EACAtI,KAAA+N,OAAA/N,KAAA8I,QACA9I,KAAA+N,OAAA/N,KAAA+I,QACA/I,KAAAgO,OAAAhO,KAAAgJ,YAEAhJ,MAAAsI,eAAA,EACAtI,KAAAkM,iBAAAlM,KAAA6L,gBAAA7L,KAAAgH,YACAhH,KAAA4L,gBAAA5L,KAAA6L,gBAAA7L,KAAA+G,WACA/G,KAAAgO,OAAAhO,KAAA+I,QACA/I,KAAAgO,OAAAhO,KAAA8I,QACA9I,KAAA+N,OAAA/N,KAAAgJ,OAEAhJ,MAAAmF,QAAApC,qBACA/C,KAAA2R,eAUAlB,gBAAA,SAAArL,EAAAkJ,GAIA,MAHAtO,MAAAmF,QAAA9C,aAAArC,KAAAmF,QAAA7C,yBACA8C,EAAApF,KAAAwL,aAAApG,IAEApF,KAAAuM,WAAAnH,EAAApF,KAAAmF,QAAAjD,GAAAoM,IAUAS,UAAA,SAAA3J,EAAAgP,GACA,GAAAzS,GAAAyS,GAAApU,KAAA2B,KACA0S,EAAAC,YACAlP,EAAApF,KAAA+H,UAAApG,GACA4S,YAAA,GAKA,OAJAF,GAAAzE,KAAAC,OAAAwE,GAAA1S,IACA3B,KAAA+H,SAAAsM,GAAAG,QACAxU,KAAA4B,YAWAmM,OAAA,SAAA1D,GACA,MAAAA,GAAAkD,KACAkH,WAAA,YAUAzG,OAAA,SAAA3D,GACA,MAAAA,GAAAyD,aACAzD,EAGAA,EAAAkD,KACAkH,WAAA,aAWA3D,YAAA,SAAA5D,EAAAuF,GACAvF,EAAAI,KAAAmF,CACA,IAAAlF,KAGA,OAFAA,GAAAvN,KAAA0H,kBAAAkI,KAAAC,MAAA4C,GAAA,KACAvF,EAAAK,OACAkF,GASAhE,aAAA,SAAAvB,GACA,GAAAwH,GAAAxH,EAAA,GAAAqC,uBAIA,OAHAvP,MAAAmF,QAAA3B,SACA0J,EAAA0B,MAAA8F,EAAAC,OAAAD,EAAAE,KAAA5U,KAAAmF,QAAAtB,MACAqJ,EAAA0B,MAAA8F,EAAAG,MAAAH,EAAAI,MAAA9U,KAAAmF,QAAAtB,MACAqJ,EAAA0B,MAUAyE,aAAA,SAAAnG,EAAAwF,GACAxF,EAAA0B,KAAA8D,CACA,IAAAnF,KAGA,OAFAA,GAAAvN,KAAA2H,mBAAAiI,KAAAC,MAAA6C,GAAA,KACAxF,EAAAK,OACAmF,GASA1D,cAAA,SAAA0F,GACA,MAAA9E,MAAA0B,IAAA1B,KAAA2B,IAAAmD,EAAA1U,KAAA+H,UAAA/H,KAAAgI,WASA6D,gBAAA,SAAA6I,GACA,GAAAK,GAAA/U,KAAAgV,qBACAhV,MAAAmF,QAAAR,sBACAoQ,EAAA/U,KAAAmF,QAAAR,sBACA3E,KAAAmF,QAAAT,WAAAqQ,EAAA/U,KAAAiV,oBAEAP,EAAA1U,KAAAgP,cAAA0F,EACA,IAAAQ,GAAAH,EAAAL,EAAA1U,KAAA+H,SAAA/H,KAAAgI,WAAA,CAEA,OADAhI,MAAAmF,QAAAd,cAAA6Q,EAAA,EAAAA,GACAA,EAAAlV,KAAA6H,QAGAmN,sBAAA,SAAAN,EAAAS,EAAAC,GAEA,OAAAV,EAAAS,IADAC,EAAAD,IAIAF,mBAAA,SAAAP,EAAAS,EAAAC,GAKA,MAJAV,GAAA9E,KAAAyF,IAAAX,GACAS,EAAAvF,KAAAyF,IAAAF,GACAC,EAAAxF,KAAAyF,IAAAD,IAEAV,EAAAS,IADAC,EAAAD,IAUAG,gBAAA,SAAA/N,GACA,GAAA2N,GAAA3N,EAAAvH,KAAA6H,MACA7H,MAAAmF,QAAAd,cAAA6Q,EAAA,EAAAA,EACA,IAAAH,GAAA/U,KAAAuV,qBAIA,OAHAvV,MAAAmF,QAAAP,sBACAmQ,EAAA/U,KAAAmF,QAAAP,sBACA5E,KAAAmF,QAAAT,WAAAqQ,EAAA/U,KAAAwV,oBACAT,EAAAG,EAAAlV,KAAA+H,SAAA/H,KAAAgI,WAAA,GAGAuN,sBAAA,SAAAL,EAAAC,EAAAC,GACA,MAAAF,IAAAE,EAAAD,MAGAK,mBAAA,SAAAN,EAAAC,EAAAC,GACAD,EAAAvF,KAAAyF,IAAAF,GACAC,EAAAxF,KAAAyF,IAAAD,EACA,IAAAhQ,GAAA8P,GAAAE,EAAAD,IACA,OAAAvF,MAAA6F,IAAArQ,IAGAsQ,aAAA,SAAAC,EAAAzH,GACA,WAAA5M,KAAAqU,EAAAC,cACAD,EAAAzH,GACAyH,EAAAC,cAAA1H,IAWA2H,WAAA,SAAAF,EAAAG,GAGA,GAAAC,GAAA/V,KAAAmF,QAAA3B,SAAA,mBACA,QAAAlC,KAAAqU,EAAAI,GACA,MAAAJ,GAAAI,EAGA,IAAAC,GAAAhW,KAAA0V,aAAAC,EAAA,UAEA,QAAArU,KAAAwU,EACA,OAAA1K,GAAA,EAA2BA,EAAA4K,EAAA3K,OAAoBD,IAC/C,GAAA4K,EAAA5K,GAAA6K,aAAAH,EACA,MAAAE,GAAA5K,GAAA2K,EAOA,OAAAC,GAAA,GAAAD,IASAG,iBAAA,SAAAP,EAAAG,GACA,GAAAK,GAAAnW,KAAA8G,WAAAwG,IAKA,QAHAtN,KAAAmF,QAAA3B,UACAxD,KAAA6V,WAAAF,EAAAG,GAAAK,EACAnW,KAAA6V,WAAAF,EAAAG,GAAAK,GACAnW,KAAAmF,QAAAtB,MAAA7D,KAAA4H,eAUAwO,cAAA,SAAAT,GACA,GAAAU,IACAC,UAAA,GACAC,SAAA,GAWA,OARAvW,MAAA0V,aAAAC,EAAA,YACAU,EAAAC,UAAA,YACAD,EAAAE,SAAA,aAEAF,EAAAC,UAAA,YACAD,EAAAE,SAAA,WAGAF,GASAG,iBAAA,SAAAb,GACA,IAAA3V,KAAAiH,MACA,MAAAjH,MAAA0I,IAEA,IAAAnB,GAAAvH,KAAAkW,iBAAAP,GACAc,EAAA7G,KAAAsD,IAAA3L,EAAAvH,KAAA0I,KAAA4E,MACAoJ,EAAA9G,KAAAsD,IAAA3L,EAAAvH,KAAA2I,KAAA2E,KACA,OAAAmJ,GAAAC,EAAA1W,KAAA0I,KACA+N,EAAAC,EAAA1W,KAAA2I,KACA3I,KAAAmF,QAAAd,YAKAkD,EAAAvH,KAAA0I,KAAA4E,KAAAtN,KAAA0I,KAAA1I,KAAA2I,KAHApB,EAAAvH,KAAA0I,KAAA4E,KAAAtN,KAAA0I,KAAA1I,KAAA2I,MAWAoE,aAAA,SAAAa,GAEAA,EADA,GACA+I,SAQA1I,WAAA,WACA,GAAA2I,GAAAC,EAAAC,CAEA9W,MAAAmF,QAAA5C,gBACAqU,EAAA,eACAC,EAAA7W,KAAA+W,YACAD,EAAA9W,KAAAgX,aAEAJ,EAAA,WACAC,EAAA7W,KAAAkE,QACA4S,EAAA9W,KAAAiX,QAGAjX,KAAAmF,QAAAlB,kBACAjE,KAAAyI,OAAA6B,GACA,YACAzJ,EAAAqW,KAAAlX,KAAA6W,EAAA,KAAAD,IAEA5W,KAAAyI,OAAA6B,GACA,YACAzJ,EAAAqW,KAAAlX,KAAA8W,EAAA9W,KAAAyI,UAIAzI,KAAAmF,QAAA3C,oBACAxC,KAAA0I,KAAA4B,GACA,YACAzJ,EAAAqW,KAAAlX,KAAA6W,EAAA,KAAAD,IAEA5W,KAAA2I,KAAA2B,GACA,YACAzJ,EAAAqW,KAAAlX,KAAA6W,EAAA,KAAAD,MAGA5W,KAAA0I,KAAA4B,GACA,YACAzJ,EAAAqW,KAAAlX,UAAAkE,QAAAlE,KAAA0I,KAAA,aAEA1I,KAAAiH,OACAjH,KAAA2I,KAAA2B,GACA,YACAzJ,EAAAqW,KAAAlX,UAAAkE,QAAAlE,KAAA2I,KAAA,cAGA3I,KAAAmF,QAAAlB,kBACAjE,KAAAwI,QAAA8B,GACA,YACAzJ,EAAAqW,KAAAlX,UAAAkE,QAAA,YAEAlE,KAAAwI,QAAA8B,GACA,YACAzJ,EAAAqW,KAAAlX,UAAAiX,OAAAjX,KAAAwI,UAEAxI,KAAAiJ,MAAAqB,GACA,YACAzJ,EAAAqW,KAAAlX,UAAAkE,QAAA,YAEAlE,KAAAiJ,MAAAqB,GACA,YACAzJ,EAAAqW,KAAAlX,UAAAmX,YAAAnX,KAAAiJ,UAKAjJ,KAAAmF,QAAAlB,kBACAjE,KAAAyI,OAAA6B,GACA,aACAzJ,EAAAqW,KAAAlX,KAAA6W,EAAA,KAAAD,IAEA5W,KAAAyI,OAAA6B,GACA,aACAzJ,EAAAqW,KAAAlX,KAAA8W,EAAA9W,KAAAyI,UAGAzI,KAAAmF,QAAA3C,oBACAxC,KAAA0I,KAAA4B,GACA,aACAzJ,EAAAqW,KAAAlX,KAAA6W,EAAA,KAAAD,IAEA5W,KAAA2I,KAAA2B,GACA,aACAzJ,EAAAqW,KAAAlX,KAAA6W,EAAA,KAAAD,MAGA5W,KAAA0I,KAAA4B,GACA,aACAzJ,EAAAqW,KAAAlX,UAAAkE,QAAAlE,KAAA0I,KAAA,aAEA1I,KAAAiH,OACAjH,KAAA2I,KAAA2B,GACA,aACAzJ,EAAAqW,KAAAlX,UAAAkE,QAAAlE,KAAA2I,KAAA,cAGA3I,KAAAmF,QAAAlB,kBACAjE,KAAAwI,QAAA8B,GACA,aACAzJ,EAAAqW,KAAAlX,UAAAkE,QAAA,YAEAlE,KAAAwI,QAAA8B,GACA,aACAzJ,EAAAqW,KAAAlX,UAAAiX,OAAAjX,KAAAwI,UAEAxI,KAAAiJ,MAAAqB,GACA,aACAzJ,EAAAqW,KAAAlX,UAAAkE,QAAA,YAEAlE,KAAAiJ,MAAAqB,GACA,aACAzJ,EAAAqW,KAAAlX,UAAAmX,YAAAnX,KAAAiJ,UAKAjJ,KAAAmF,QAAAvB,kBACA5D,KAAA0I,KAAA4B,GACA,QACAzJ,EAAAqW,KAAAlX,UAAA4M,eAAA5M,KAAA0I,KAAA,aAEA1I,KAAAiH,OACAjH,KAAA2I,KAAA2B,GACA,QACAzJ,EAAAqW,KAAAlX,UAAA4M,eAAA5M,KAAA2I,KAAA,gBAWAoC,aAAA,WACA/K,KAAA0I,KAAAsC,MACAhL,KAAA2I,KAAAqC,MACAhL,KAAAwI,QAAAwC,MACAhL,KAAAyI,OAAAuC,MACAhL,KAAAiJ,MAAA+B,OAWA9G,QAAA,SAAA2I,EAAAC,EAAA6I,GACA,GAAAyB,GACAC,EACAhB,EAAArW,KAAAoW,cAAAT,EAEAA,GAAA2B,kBACA3B,EAAA4B,iBAIAvX,KAAAuJ,qBAEAsD,EACA7M,KAAA8H,SAAAgF,GAEAD,EAAA7M,KAAAwW,iBAAAb,GACA3V,KAAA8H,SAAA+E,IAAA7M,KAAA0I,KAAA,wBAGAmE,EAAAa,SAAA,aAEA1N,KAAAmF,QAAAvB,iBAAA5D,KAAA+M,aAAAF,GAEAuK,EAAAvW,EAAAqW,KACAlX,KACAA,KAAAoH,SAAAC,OAAArH,KAAAgX,WAAAhX,KAAAiX,OACApK,GAEAwK,EAAAxW,EAAAqW,KAAAlX,UAAAoE,MAAAgT,GAEA7Q,EAAA+D,GAAA+L,EAAAC,UAAAc,GACA7Q,EAAA+D,GAAA+L,EAAAE,SAAAc,GACArX,KAAAwX,2BAAAH,EAEArX,KAAAyX,aAEA,IAAAC,GAAA1X,KAAA0V,aAAAC,EAAA,iBACA+B,KAEA1X,KAAA2X,UACA3X,KAAA4X,YAAA,EACA5X,KAAA2X,QAAAD,EAAA,GAAAzB,cAaAgB,OAAA,SAAApK,EAAA8I,EAAAkC,GACA,GACAC,GADAJ,EAAA1X,KAAA0V,aAAAC,EAAA,iBAEA,IAAA+B,EACA,OAAAtM,GAAA,EAA2BA,EAAAsM,EAAArM,OAA2BD,IACtD,GAAAsM,EAAAtM,GAAA6K,aAAAjW,KAAA2X,QAAA,CACAG,EAAAJ,EAAAtM,EACA,OAKA,IAAAsM,GAAAI,EAAA,CAIA,GAIAlN,GAJAoG,EAAAhR,KAAAkW,iBACAP,EACAmC,IAAA7B,eAAA3U,IAGAyW,EAAA/X,KAAAmF,QAAAd,YACArE,KAAA+H,SACA/H,KAAAgI,SACAgQ,EAAAhY,KAAAmF,QAAAd,YAAArE,KAAAgI,SAAAhI,KAAA+H,QAEAiJ,IAAA,EACApG,EAAAoN,EACWhH,GAAAhR,KAAA6H,OACX+C,EAAAmN,GAEAnN,EAAA5K,KAAAsV,gBAAAtE,GAEApG,EADAiN,GAAAhX,EAAAwL,SAAArM,KAAAmF,QAAAhC,WACAnD,KAAA+O,UAAAnE,EAAA5K,KAAAmF,QAAAhC,WACAnD,KAAA+O,UAAAnE,IAEA5K,KAAAiY,uBAAArN,KAUAxG,MAAA,SAAAgT,EAAAzB,GACA,GAAA+B,GAAA1X,KAAA0V,aAAAC,EAAA,iBACA,KAAA+B,KAAA,GAAAzB,aAAAjW,KAAA2X,QAAA,CAGA3X,KAAA4X,YAAA,EACA5X,KAAA2X,QAAA,KAEA3X,KAAAmF,QAAAvB,kBACA5D,KAAA0I,KAAAiF,YAAA,aACA3N,KAAA2I,KAAAgF,YAAA,aACA3N,KAAA8H,SAAA,IAEA9H,KAAAoH,SAAAC,QAAA,CAEA,IAAA6Q,GAAAlY,KAAAoW,cAAAT,EACApP,GAAAyE,IAAAkN,EAAA5B,UAAAc,GACA7Q,EAAAyE,IAAAkN,EAAA3B,SAAAvW,KAAAwX,4BACAxX,KAAAwX,2BAAA,KACAxX,KAAAmY,cAGAhB,YAAA,SAAAtK,EAAA8I,GACA3V,KAAAiX,OAAApK,EAAA8I,GAAA,IAGA/I,eAAA,SAAAC,EAAAC,GACA9M,KAAA8H,SAAAgF,EACAD,EAAAuL,IAAA,OAAAvX,EAAAqW,KAAAlX,UAAAqY,cAAAxL,IACAA,EAAAvC,GAAA,UAAAzJ,EAAAqW,KAAAlX,UAAAsY,kBACAzL,EAAAvC,GAAA,QAAAzJ,EAAAqW,KAAAlX,UAAAuY,UACAvY,KAAAoI,cAAA,EACAyE,EAAAa,SAAA,aAEA1N,KAAAuI,qBACAsE,UACAC,QAIAyL,QAAA,WACAvY,KAAAoI,cAAA,EACApI,KAAAmY,aAGAE,cAAA,SAAAxL,GACAA,EAAA7B,IAAA,WACA6B,EAAA7B,IAAA,SACA6B,EAAAc,YAAA,aACA3N,KAAA4X,aACA5X,KAAA8H,SAAA,GACA9H,KAAAuI,oBAAA,OAWAiQ,cAAA,SAAAC,GACA,GAAAC,GAAAD,EAAAzY,KAAA2B,KACAgX,EAAAF,EAAAzY,KAAA2B,KACAiX,EAAAH,EAAAzY,KAAAiI,WAAA,GACA4Q,EAAAJ,EAAAzY,KAAAiI,WAAA,EAEAjI,MAAAmF,QAAAb,mBACAoU,EAAAD,EAAAzY,KAAA2B,KACAgX,EAAAF,EAAAzY,KAAA2B,KACAiX,EAAAH,EAAAzY,KAAAiI,WAAA,GACA4Q,EAAAJ,EAAAzY,KAAAiI,WAAA,GAIA,IAAA6Q,IACAC,GAAAL,EACAM,KAAAL,EACAM,KAAAN,EACAO,MAAAR,EACAS,OAAAP,EACAQ,SAAAP,EACAQ,KAAArZ,KAAAmF,QAAAb,iBAAAtE,KAAAgI,SAAAhI,KAAA+H,SACAuR,IAAAtZ,KAAAmF,QAAAb,iBAAAtE,KAAA+H,SAAA/H,KAAAgI,SAYA,OATAhI,MAAAmF,QAAAd,cACAyU,EAAAG,KAAAP,EACAI,EAAAI,MAAAP,EAEA3Y,KAAAmF,QAAA3B,WACAsV,EAAAC,GAAAJ,EACAG,EAAAE,KAAAN,IAGAI,GAGAR,gBAAA,SAAA3C,GACA,GAAA8C,GAAAzY,UAAA8H,UACAyR,EAAA5D,EAAA4D,SAAA5D,EAAArH,MACAkL,GACAC,GAAA,KACAC,GAAA,OACAC,GAAA,OACAC,GAAA,QACAC,GAAA,SACAC,GAAA,WACAC,GAAA,OACAC,GAAA,OAEAlB,EAAA9Y,KAAAwY,cAAAC,GACAwB,EAAAT,EAAAD,GACAW,EAAApB,EAAAmB,EACA,UAAAC,GAAA,KAAAla,KAAA8H,SAAA,CACA6N,EAAA4B,iBAEAvX,KAAAoI,eACApI,KAAAoI,cAAA,EACApI,KAAAyX,cAGA,IAAApO,GAAArJ,IACAuF,GAAA,WACA,GAAAqF,GAAAvB,EAAA0F,UAAA1F,EAAA2F,cAAAkL,GACA,IAAA7Q,EAAAlE,QAAA3C,mBAEa,CACb,GACA2X,GACAC,EAFA9S,EAAA+B,EAAArC,UAAAqC,EAAAtC,QAGA,cAAAsC,EAAAvB,UACAqS,EAAAvP,GACAwP,EAAAxP,EAAAtD,GACA+B,EAAArB,WACAoS,EAAA/Q,EAAArB,SACAmS,EAAAC,EAAA9S,KAGA8S,EAAAxP,GACAuP,EAAAvP,EAAAtD,GACA+B,EAAAtB,WACAoS,EAAA9Q,EAAAtB,SACAqS,EAAAD,EAAA7S,IAGA+B,EAAAgR,oBAAAF,EAAAC,OApBA/Q,GAAA4O,uBAAArN,OAmCAmM,YAAA,SAAAlK,EAAAC,EAAA6I,GACA,GAAApO,GAAAvH,KAAAkW,iBAAAP,EACA3V,MAAAoH,UACAC,QAAA,EACAjC,MAAApF,KAAAsV,gBAAA/N,GACAD,WAAAtH,KAAAgH,UAAAhH,KAAA+G,SACAS,SAAAxH,KAAAmF,QAAAd,YACArE,KAAA0I,KAAA4E,KAAA/F,EACAA,EAAAvH,KAAA0I,KAAA4E,KACA7F,UAAAzH,KAAAmF,QAAAd,YACAkD,EAAAvH,KAAA2I,KAAA2E,KACAtN,KAAA2I,KAAA2E,KAAA/F,GAGAvH,KAAAkE,QAAA2I,EAAAC,EAAA6I,IAeA2E,SAAA,SAAAC,EAAAvJ,EAAAwJ,EAAAC,GACA,GAAAjI,GAAAxS,KAAAmF,QAAAd,YACAe,EAAA,IAyCA,OApCAA,GAHA,QAAAmV,EACAC,EACAC,EACAjI,EACAxS,KAAA+H,SACA/H,KAAAgI,SAAAhI,KAAAoH,SAAAE,WAEAkL,EACAxS,KAAAgI,SAAAhI,KAAAoH,SAAAE,WACAtH,KAAA+H,SAGAyK,EACAxS,KAAAsV,gBAAAtE,EAAAhR,KAAAoH,SAAAI,UACAxH,KAAAsV,gBAAAtE,EAAAhR,KAAAoH,SAAAI,UAGAgT,EACAC,EACAjI,EACAxS,KAAA+H,SAAA/H,KAAAoH,SAAAE,WACAtH,KAAAgI,SAEAwK,EACAxS,KAAAgI,SACAhI,KAAA+H,SAAA/H,KAAAoH,SAAAE,WAGAkL,EAEAxS,KAAAsV,gBAAAtE,EAAAhR,KAAAoH,SAAAI,UACAxH,KAAAoH,SAAAE,WAGAtH,KAAAsV,gBAAAtE,EAAAhR,KAAAoH,SAAAI,UACAxH,KAAAoH,SAAAE,WAIAtH,KAAA+O,UAAA3J,IAYA4R,WAAA,SAAAnK,EAAA8I,GACA,GACAwE,GACAC,EACAM,EACAC,EACAC,EACAC,EACAC,EACAC,EARA/J,EAAAhR,KAAAkW,iBAAAP,EAwBA,IAdA3V,KAAAmF,QAAAd,aACAqW,EAAA1a,KAAAoH,SAAAI,SACAmT,EAAA3a,KAAAoH,SAAAK,UACAqT,EAAA9a,KAAA2I,KACAoS,EAAA/a,KAAA0I,OAEAgS,EAAA1a,KAAAoH,SAAAK,UACAkT,EAAA3a,KAAAoH,SAAAI,SACAsT,EAAA9a,KAAA0I,KACAqS,EAAA/a,KAAA2I,MAEAiS,EAAA5J,GAAA2J,EACAE,EAAA7J,GAAAhR,KAAA6H,OAAA6S,EAEAE,EAAA,CACA,OAAAE,EAAAxN,KAAA,MACA6M,GAAAna,KAAAsa,SAAA,MAAAtJ,GAAA,MACAoJ,EAAApa,KAAAsa,SAAA,MAAAtJ,GAAA,UACW,IAAA6J,EAAA,CACX,GAAAE,EAAAzN,OAAAtN,KAAA6H,OAAA,MACAuS,GAAApa,KAAAsa,SAAA,MAAAtJ,GAAA,MACAmJ,EAAAna,KAAAsa,SAAA,MAAAtJ,GAAA,UAEAmJ,GAAAna,KAAAsa,SAAA,MAAAtJ,GAAA,GACAoJ,EAAApa,KAAAsa,SAAA,MAAAtJ,GAAA,EAEAhR,MAAAqa,oBAAAF,EAAAC,IASAC,oBAAA,SAAAF,EAAAC,GAEA,MAAApa,KAAAmF,QAAAnD,UACAmY,EAAAna,KAAAmF,QAAAnD,WAEAmY,EAAAna,KAAAmF,QAAAnD,SACAoY,EAAAD,EAAAna,KAAAoH,SAAAE,YAGA,MAAAtH,KAAAmF,QAAAlD,UACAmY,EAAApa,KAAAmF,QAAAlD,WAEAmY,EAAApa,KAAAmF,QAAAlD,SACAkY,EAAAC,EAAApa,KAAAoH,SAAAE,YAGAtH,KAAA+G,SAAAoT,EACAna,KAAAgH,UAAAoT,EACApa,KAAA0L,gBACA1L,KAAAiH,OAAAjH,KAAA2L,iBACA3L,KAAAgb,YAAA,GACAhb,KAAA+Q,cAAA,WAAA/Q,KAAA6L,gBAAAsO,IACAna,KAAA+Q,cAAA,YAAA/Q,KAAA6L,gBAAAuO,KAQAnC,uBAAA,SAAArN,GACA,GAAAqQ,IAAA,CACArQ,GAAA5K,KAAAkb,iBAAAtQ,GACA5K,KAAAiH,QACAjH,KAAAmF,QAAApD,WACA6I,EAAA5K,KAAAmb,eAAAvQ,GACAqQ,GAAA,IAEAjb,KAAAmF,QAAAnB,cACA,aAAAhE,KAAA8H,UAAA8C,EAAA5K,KAAAgH,UACA4D,EAAA5K,KAAAob,iBAAApb,KAAAgH,WAEA,cAAAhH,KAAA8H,UACA8C,EAAA5K,KAAA+G,WAEA6D,EAAA5K,KAAAob,iBAAApb,KAAA+G,YAEA6D,EAAA5K,KAAAob,iBAAAxQ,GAEA,aAAA5K,KAAA8H,UAAA8C,EAAA5K,KAAAgH,WACAhH,KAAA+G,SAAA/G,KAAAgH,UACAhH,KAAA0L,gBACA1L,KAAAgb,aACAhb,KAAA+Q,cAAA/Q,KAAA8H,SAAA9H,KAAA2I,KAAA2E,MACAtN,KAAAgM,uBACAhM,KAAA8H,SAAA,YACA9H,KAAA0I,KAAAiF,YAAA,aACA3N,KAAA2I,KAAA+E,SAAA,aACA1N,KAAAmF,QAAAvB,iBAAA5D,KAAA+M,aAAA/M,KAAA2I,MACAsS,GAAA,GAEA,cAAAjb,KAAA8H,UACA8C,EAAA5K,KAAA+G,WAEA/G,KAAAgH,UAAAhH,KAAA+G,SACA/G,KAAA2L,iBACA3L,KAAAgb,aACAhb,KAAA+Q,cAAA/Q,KAAA8H,SAAA9H,KAAA0I,KAAA4E,MACAtN,KAAAgM,uBACAhM,KAAA8H,SAAA,WACA9H,KAAA2I,KAAAgF,YAAA,aACA3N,KAAA0I,KAAAgF,SAAA,aACA1N,KAAAmF,QAAAvB,iBAAA5D,KAAA+M,aAAA/M,KAAA0I,MACAuS,GAAA,KAKAjb,UAAA8H,YAAA8C,IACA5K,UAAA8H,UAAA8C,EACA,aAAA5K,KAAA8H,SAAA9H,KAAA0L,gBACA1L,KAAA2L,iBACA3L,KAAAgb,aACAhb,KAAA+Q,cAAA/Q,KAAA8H,SAAA9H,KAAA6L,gBAAAjB,IACA5K,KAAAgM,uBACAiP,GAAA,GAGAA,GAAAjb,KAAAgb,YAAA,IAGAE,iBAAA,SAAAtQ,GACA,aAAA5K,KAAAmF,QAAAnD,UAAA4I,EAAA5K,KAAAmF,QAAAnD,SACAhC,KAAAmF,QAAAnD,SACA,MAAAhC,KAAAmF,QAAAlD,UAAA2I,EAAA5K,KAAAmF,QAAAlD,SACAjC,KAAAmF,QAAAlD,SACA2I,GAGAwQ,iBAAA,SAAAxQ,GACA,GAAAyQ,GACA,aAAArb,KAAA8H,SAAA9H,KAAAgH,UAAAhH,KAAA+G,SACAO,EAAAsI,KAAAsD,IAAAtI,EAAAyQ,EACA,cAAArb,KAAAmF,QAAAtD,UACAyF,EAAAtH,KAAAmF,QAAAtD,SACA,aAAA7B,KAAA8H,SACA9H,KAAAgH,UAAAhH,KAAAmF,QAAAtD,SACA7B,KAAA+G,SAAA/G,KAAAmF,QAAAtD,SAGA,MAAA7B,KAAAmF,QAAArD,UACAwF,EAAAtH,KAAAmF,QAAArD,SACA,aAAA9B,KAAA8H,SACA9H,KAAAgH,UAAAhH,KAAAmF,QAAArD,SACA9B,KAAA+G,SAAA/G,KAAAmF,QAAArD,SAGA8I,GAGAuQ,eAAA,SAAAvQ,GACA,GAAAtD,GACA,aAAAtH,KAAA8H,SACA9H,KAAAgH,UAAA4D,EACAA,EAAA5K,KAAA+G,SACAlF,EACA,OAAA7B,KAAAmF,QAAAtD,SACA7B,KAAAmF,QAAAtD,SACA7B,KAAAmF,QAAAxD,KACAG,EAAA9B,KAAAmF,QAAArD,QAwCA,OAtCAwF,GAAAzF,GACA,aAAA7B,KAAA8H,UACA9H,KAAAgH,UAAA4I,KAAA0B,IAAA1G,EAAA/I,EAAA7B,KAAAgI,UACA4C,EAAA5K,KAAAgH,UAAAnF,EACA7B,KAAA2L,iBACA3L,KAAA+Q,cACA,YACA/Q,KAAA6L,gBAAA7L,KAAAgH,cAGAhH,KAAA+G,SAAA6I,KAAA2B,IAAA3G,EAAA/I,EAAA7B,KAAA+H,UACA6C,EAAA5K,KAAA+G,SAAAlF,EACA7B,KAAA0L,gBACA1L,KAAA+Q,cACA,WACA/Q,KAAA6L,gBAAA7L,KAAA+G,YAGA/G,KAAAgM,wBACW,OAAAlK,GAAAwF,EAAAxF,IAEX,aAAA9B,KAAA8H,UACA9H,KAAAgH,UAAA4D,EAAA9I,EACA9B,KAAA2L,iBACA3L,KAAA+Q,cACA,YACA/Q,KAAA6L,gBAAA7L,KAAAgH,cAGAhH,KAAA+G,SAAA6D,EAAA9I,EACA9B,KAAA0L,gBACA1L,KAAA+Q,cACA,WACA/Q,KAAA6L,gBAAA7L,KAAA+G,YAGA/G,KAAAgM,wBAEApB,GAOAoQ,WAAA,SAAAM,GACAtb,KAAAqI,gBAAA,EACArI,KAAA6G,MAAA0U,SACAD,GAAAtb,KAAAsb,eACAtb,KAAAqI,gBAAA,GASAoP,YAAA,WACA,GAAAzX,KAAAmF,QAAAjB,QAAA,CACA,GAAAmF,GAAArJ,KACAgU,EAAA,aAAAhU,KAAA8H,SAAA,WACA9H,MAAA6G,MAAA2U,WAAA,WACAnS,EAAAlE,QAAAjB,QACAmF,EAAAlE,QAAAjD,GACAmH,EAAAxC,MAAAK,cACAmC,EAAAxC,MAAAM,aACA6M,OAYAsH,aAAA,WACA,GAAAtb,KAAAmF,QAAAhB,SAAA,CACA,GAAAkF,GAAArJ,KACAgU,EAAA,aAAAhU,KAAA8H,SAAA,WACA9H,MAAA6G,MAAA2U,WAAA,WACAnS,EAAAlE,QAAAhB,SACAkF,EAAAlE,QAAAjD,GACAmH,EAAAxC,MAAAK,cACAmC,EAAAxC,MAAAM,aACA6M,OAYAmE,UAAA,WACA,GAAAnY,KAAAmF,QAAAf,MAAA,CACA,GAAAiF,GAAArJ,KACAgU,EAAA,aAAAhU,KAAA8H,SAAA,WACA9H,MAAA6G,MAAA2U,WAAA,WACAnS,EAAAlE,QAAAf,MACAiF,EAAAlE,QAAAjD,GACAmH,EAAAxC,MAAAK,cACAmC,EAAAxC,MAAAM,aACA6M,KAIAhU,KAAA6G,MAAA4U,MAAA,gBAIA7U,KAEA8U,UAAA,gCAAAC,GAGA,OACAC,SAAA,KACAC,SAAA,EACAhV,OACAK,cAAA,KACAC,aAAA,KACAiF,gBAAA,KACA0P,eAAA,KAUAC,YAAA,SAAA7O,EAAA8O,GAEA,MAAAA,GAAAF,gBAAA,oBAGAG,KAAA,SAAApV,EAAAqG,GACArG,EAAAqV,OAAA,GAAAP,GAAA9U,EAAAqG,OA+CA,OATA7N,GAAA8c,KAAA,0BAAAC,GAGAA,EAAAC,IAAA,mBACA,mwCAKAhd,EAAAid,QHsEMvC,GACA,SAAU1a,EAAQiB,EAASf,GI3qFjCA,EAAA,IACAF,EAAAiB,QAAA,eJkrFMqZ,GACA,SAAUta,EAAQiB;;;;;CK7qFxB,SAAAic,GACA,YAEAA,GAAAld,OAAA,mBAECwB,SAGD,SAAA0b,GACA,YAEA,SAAAC,KACA,SAAA1N,OAAA,iKAGAyN,EAAAld,OAAA,eAKAod,SAAA,gCACA,GAAAA,GAAAzc,KACA0c,IACAD,GAAAE,mBAAA,uBAQAF,EAAAG,YAAA,SAAAC,GACAN,EAAAO,KAAAD,EAAAH,IASAD,EAAAM,WAAA,SAAAC,GACAN,EAAAzC,IAAA+C,GASAP,EAAAQ,SAAA,SAAAC,GACAR,EAAAQ,SASAT,EAAAU,UAAA,SAAAC,GACAV,EAAAU,UASAX,EAAAY,QAAA,SAAAC,GACAZ,EAAAY,QASAb,EAAAc,QAAA,SAAAhD,GACAmC,EAAAnC,QAQAkC,EAAAe,QAAA,SAAAC,GACAf,EAAAe,QAQAhB,EAAAiB,SAAA,SAAAC,GACAjB,EAAAiB,SASAlB,EAAAmB,sBAAA,SAAAjB,GACAF,EAAAE,sBAGAF,EAAAoB,MAAA,6DAAAC,EAAAtX,EAAAuX,EAAAxX,EAAAyX,GAoBA,QAAAC,KACA,MAAAC,GACAH,EAAAI,KAAAD,GAGAE,EAGA,QAAAC,KACA,IAAAH,EACA,SAAApP,OAAA,sCAIA,QAAAwP,KACA,MAAA/B,GAAAgC,YAAA/X,EAAAgY,gBAA8DC,QAlC9D,GAAiFP,GAAjFQ,EAAAX,EAAAY,QAAAP,EAAAM,EAAAN,QAAAQ,IAEApY,GAAAqY,6BAAArY,EAAAqY,gCAEA,IAAAC,GAAA,WACAZ,EAAA1X,EAAAgY,WAEAE,EAAAK,QAAAb,GAgCA,IA7BA1X,EAAAqY,6BAAAjO,KAAAkO,GAEAtY,EAAAiW,EAAAE,oBAAA,WACAnW,EAAAqY,6BAAA7R,QAAA,SAAA8R,GACAA,OAyBAR,IACAQ,QACa,IAAAtY,EAAAwY,SAAAC,cAAA,0DAEb,GAAAC,GAAAlB,EAAA,WACAM,MACAN,EAAA3X,OAAA6Y,GACAJ,MAEiB,QACJ,CAEb,GAAAK,GAAA3Y,EAAAwY,SAAAI,cAAA,SACAD,GAAAE,OAAA,EACAF,EAAAR,OAAA,EACAQ,EAAAG,IAAA,kDAAA7C,EAAAE,mBAAA,mBACApW,EAAAgZ,KAAA,WAAAC,YAAAL,GAGA,OASAM,OAAA,SAAAC,EAAAC,GAaA,MAXAA,GAAAC,QAAAD,EAAA1F,KAAAyC,EAAAzC,IACA0F,EAAAzC,MAAAyC,EAAAzC,OAAAR,EAAAQ,MACAyC,EAAAvC,OAAAuC,EAAAvC,QAAAV,EAAAU,OACAuC,EAAArC,KAAAqC,EAAArC,MAAAZ,EAAAY,KACAqC,EAAApF,KAAAoF,EAAApF,MAAAmC,EAAAnC,KACAoF,EAAAE,GAAAF,EAAAlC,MAAAf,EAAAe,KACAkC,EAAAhC,MAAAgC,EAAAhC,OAAAjB,EAAAiB,MAEAgC,EAAAC,SACApD,IAEAyB,IAAA6B,KAAA,SAAA5B,GACA,GAAA6B,GAAA7B,EAAAO,OAAAiB,EAAAC,EAEA,OADAf,GAAAmB,GAAAL,EACAK,KAOAC,OAAA,SAAAD,GACA1B,IAEAH,EAAA+B,MAAAF,GAGAjC,EAAAoC,WAAA,iBAAAH,IAMAI,QAAA,SAAAJ,GACA1B,IAEAH,EAAAiC,QAAAJ,IAMAK,QAAA,SAAAL,EAAAtC,GACA,GAAAhe,GAAAmf,EAAAmB,EAEA,KAAAtgB,EAuBA,SAAAqP,OAAA,iCAAAiR,EAtBA,IAAAM,GAAA5gB,EAAAwf,cAAA,SACA,KAAAxB,EAcA,MAAA4C,MAAAf,KAAA,aAAAgB,KAAAD,EAAAf,KACAe,EAAAf,IAAAzD,QAAA,iCAEA,IAfA,IAAAwE,KAAAf,IAAA,CACA,GAAAiB,GAAAF,EAAAf,GACA,WAAAgB,KAAAC,GACAA,IAAA1E,QAAA,oBAAA4B,GAEA8C,KAAA,IAAAA,EAAAC,QAAA,oBAAA/C,EAGA4C,EAAAf,IAAAiB,IAsBAE,YAAA,SAAAV,GAGA,MAFA1B,KAEAH,EAAAuC,YAAAV,IAMAW,YAAA,SAAAX,GACA,MAAAnB,GAAAmB,IAMAY,QAAA,SAAAZ,SACAnB,GAAAmB,UAOClf,SAGD,SAAA0b,GACA,YAEAA,GAAAld,OAAA,eAEAqc,UAAA,oEAAAnV,EAAAhB,EAAAqb,GAEA,OACAhF,SAAA,IACAiF,QAAA,UACAha,OACAia,SAAA,YACA7G,IAAA,KACAmD,OAAA,KACAF,MAAA,KACAI,KAAA,KACA/C,KAAA,KACAkD,KAAA,KACAE,MAAA,KACAoD,SAAA,KACAC,SAAA,KACAC,SAAA,IACAC,UAAA,IACAC,SAAA,KAEAlF,KAAA,SAAApV,EAAA6Y,EAAA1D,EAAAoF,GAqDA,QAAAT,KACAS,GAEAA,EAAAC,aAAA,kBAGAC,IAGA,QAAAC,KAEAhc,EAAA,WACAsB,EAAAia,SAAA,GACAU,IAGA3a,EAAAsa,UAAwCpB,SAAAlZ,EAAAkZ,aAIxC,QAAAyB,KACAJ,GACAA,EAAAC,aAAA,iBAAAxa,EAAAma,SAAA,KAAAS,QAAA5a,EAAAia,WAIA,QAAAQ,KACAV,EAAAD,QAAA9Z,EAAAkZ,UAGAxD,EAAAlS,QAAA9D,EAAA,GAAAmb,iBAAA,mBAAAC,SAAAC,SAlFA/a,EAAAkZ,SAAA,KAEAqB,GAAA7E,EAAAsF,UAAA7F,EAAAgF,WACAna,EAAAiE,OAAA,WAAA0W,EAGA,IAAAM,GAAAjb,EAAAiE,OAAA,eAAAmP,GACA,GAAA6E,GAAA,SAAAiD,GAEAxc,EAAA,WACAsB,EAAAia,SAAAiB,EACAP,IAGA3a,EAAAqa,WAA6CJ,SAAAiB,EAAAhC,SAAAlZ,EAAAkZ,aAI7Ca,GAAAnB,OAAAC,EAAA,IAEAZ,WACA7E,MACAmD,OAAAvW,EAAAuW,QAAApB,EAAAoB,QAAA,KACAF,MAAArW,EAAAqW,OAAAlB,EAAAkB,OAAA,KACA3C,KAAA1T,EAAA0T,MAAAyB,EAAAzB,MAAA,KACAkD,KAAA5W,EAAA4W,MAAAzB,EAAAyB,MAAA,KACAsD,SAAAla,EAAAka,UAAA/E,EAAA+E,UAAA,KACAzD,KAAAzW,EAAAyW,MAAAtB,EAAAsB,MAAA,KACAK,MAAA9W,EAAA8W,OAAA3B,EAAA2B,OAAA,KACAqE,mBAAAT,IAEqBzB,KAAA,SAAAC,GAErByB,IACA3a,EAAAkZ,WACAlZ,EAAAoa,UAAwClB,aAExClZ,EAAAuD,IAAA,WAAAuW,GAEA9Z,EAAAuD,IAAA,0BAAAuL,EAAAsM,IACA1F,EAAA2F,YAAAD,IAAAlC,IAAAkC,KACApb,EAAAia,SAAA,GACAU,SAOAM,YAuCCjhB,UL2rFKshB,IACA,SAAU9iB,EAAQC,EAAqBC,GAE7C,YACA6iB,QAAOC,eAAe/iB,EAAqB,cAAgB8F,OAAO,GAC7C,IAAIkd,GAA4D/iB,EAAoB,IACZA,GAAoBgjB,EAAED,GACzB/iB,EAAoB,MAMxGijB,IACA,SAAUnjB,EAAQC,EAAqBC,GAE7C,YAOA,SAASC,GAAgBC,EAAUC,GAAe,KAAMD,YAAoBC,IAAgB,KAAM,IAAIC,WAAU,qCAEhH,QAAS8iB,GAA2BpZ,EAAMqZ,GAAQ,IAAKrZ,EAAQ,KAAM,IAAIsZ,gBAAe,4DAAgE,QAAOD,GAAyB,gBAATA,IAAqC,kBAATA,GAA8BrZ,EAAPqZ,EAElO,QAASE,GAAUC,EAAUC,GAAc,GAA0B,kBAAfA,IAA4C,OAAfA,EAAuB,KAAM,IAAInjB,WAAU,iEAAoEmjB,GAAeD,GAAS5iB,UAAYmiB,OAAO3C,OAAOqD,GAAcA,EAAW7iB,WAAa8iB,aAAe3d,MAAOyd,EAAUG,YAAY,EAAOC,UAAU,EAAMC,cAAc,KAAeJ,IAAYV,OAAOe,eAAiBf,OAAOe,eAAeN,EAAUC,GAAcD,EAASO,UAAYN,GAV5c,GAAIO,GAAqD9jB,EAAoB,KACzE+jB,EAA6D/jB,EAAoBgjB,EAAEc,GACnFE,EAA0FhkB,EAAoB,IAC9GikB,EAAwDjkB,EAAoB,IAC5EkkB,EAAgDlkB,EAAoB,IAC9DA,GAAoBK,EAAEN,EAAqB,IAAK,WAAa,MAAOokB,IMvmGnG,IAAMC,GAAc,GAEdC,EAAyB,EAEzBC,EAAgB,GACTH,GACXI,SAAUR,MACVS,YACEC,mBAAoB,sBAEtBC,UACE9jB,MAAO,IACP+jB,QAAS,IACTC,UAAW,IACXC,YAAa,IACbC,YAAa,KAEfC,uBACE,QAAAC,GAAYC,EAAQjf,EAAUkf,GAC5B,UADsCjlB,GAAAQ,KAAAukB,EAAA,IAAAG,GAAAjC,EAAAziB,KAEtC2kB,EAAAjC,KAAA1iB,MAFsC,OAGtC0kB,GAAKnf,SAAWA,EAChBmf,EAAKD,SAAWA,EAAS,GACzBD,EAAO1Z,OAAO,0BAA2B,SAAC4J,GACxCgQ,EAAKE,mBAAqBlQ,IAE5B8P,EAAO1Z,OAAO,kBAAmB,SAAC4J,GAChCgQ,EAAKG,SAAWnQ,EAChBgQ,EAAKP,WAAaO,EAAKtkB,aAAeskB,EAAKI,qBAE7CN,EAAO1Z,OAAO,kBAAmB,SAAC4J,GAC5BA,GACFgQ,EAAKI,qBAITN,EAAO1Z,OAAO,iBAAkB,SAAC4J,GAC3BA,EACFgQ,EAAKK,MAAMC,IAAMN,EAAKG,UAEtBH,EAAKK,MAAMC,IAAMrB,EACjBe,EAAKG,SAAWlB,KAGpBa,EAAO1Z,OAAO,oBAAqB,SAAC4J,GAClCgQ,EAAKO,WAAavQ,IAEpB8P,EAAO1Z,OAAO,mBAAoB,SAAC4J,GAC7BA,EACFgQ,EAAKK,MAAMG,MAAQR,EAAKO,YAExBP,EAAKO,WAAapB,EAClBa,EAAKK,MAAMG,MAAQrB,KAGvBW,EAAO1Z,OAAO,2BAA4B,SAAC4J,GACrCA,EACFgQ,EAAKS,kBAAoBT,EAAKE,oBAE9BF,EAAKS,kBAAoBvB,EACzBc,EAAKE,mBAAqBhB,KAG9BY,EAAO1Z,OAAO,6BAA8B,SAAC4J,GAC3CgQ,EAAKU,oBAAsB1Q,IAE7B8P,EAAO1Z,OAAO,6BAA8B,SAAC4J,GAC3CgQ,EAAKW,oBAAsB3Q,IAE7B8P,EAAO1Z,OAAO,kBAAmB,SAAC4J,GAChCgQ,EAAKY,eAAeC,gBACpBb,EAAKY,eAAeE,eAEpBd,EAAKL,cACM,GAAP3P,GAAmB,GAAPA,GACdgQ,EAAKK,MAAMU,aAAc,EACzBC,WAAW,WACKC,MAAM/R,KAAK8Q,EAAKD,SAAS/C,iBAAiB,WAChD1U,QAAQ,SAAC4Y,GACfF,WAAW,WACT,GAAInC,GAAA,GAAmBlZ,QAASub,KAC/B,MAEJ,IAEHlB,EAAKK,MAAMU,aAAc,IAnESf,EAD1C,MAAAH,GAAAsB,SAAA,gCAAAjD,EAAA2B,EAAAI,GAAAJ,EAAAtkB,UAwEE6lB,QAxEF,WAwEY,GAAAC,GAAA/lB,IACRA,MAAK+kB,OACHC,IAAKrB,GAEP3jB,KAAKgmB,UAAY,IACbhmB,KAAKE,mBACPF,KAAK+kB,MAAMkB,eA9Fa,IA+FxBjmB,KAAKolB,oBAAsBplB,KAAK+kB,MAAMkB,gBAEpCjmB,KAAKI,cACPJ,KAAK+kB,MAAMmB,eAhGa,IAiGxBlmB,KAAK+kB,MAAMG,MAAQrB,EACnB7jB,KAAKilB,WAAajlB,KAAK+kB,MAAMG,MAC7BllB,KAAKqlB,oBAAsBrlB,KAAK+kB,MAAMmB,gBAExClmB,KAAKmlB,kBAAoBvB,EACzB5jB,KAAK4kB,mBAAqB5kB,KAAKmlB,kBAC/BnlB,KAAK6kB,SAAW7kB,KAAK+kB,MAAMC,IAC3BhlB,KAAKmmB,YACH1kB,MAAO,GACPC,KAAM,GACNM,SAAU,GACVC,SAAU,GACV8B,cAAc,EACdtB,kBAAkB,EAClBM,qBAAqB,GAEvB/C,KAAKomB,cACH3kB,MAAO,EACPC,KAAM,GACNM,SAAU,EACVC,SAAU,GACV8B,cAAc,EACdtB,kBAAkB,EAClBM,qBAAqB,GAEvB/C,KAAKqmB,uBACH5kB,MAAO,IACPC,KAAM,IACNM,SAAU,IACVC,SAAU,IACVN,KAAM,IACNoC,cAAc,EACdtB,kBAAkB,EAClBM,qBAAqB,GAEvB/C,KAAKsmB,uBACH7kB,MAAO,IACPC,KAAM,IACNM,SAAU,IACVC,SAAU,IACVN,KAAM,IACNoC,cAAc,EACdtB,kBAAkB,EAClBM,qBAAqB,GAEvB/C,KAAKumB,sBACH9kB,MAAO,EACPC,KAAM,GACNM,SAAU,EACVC,SAAU,GACV8B,cAAc,EACdtB,kBAAkB,EAClBM,qBAAqB,GAEvB2iB,WAAW,WACMC,MAAM/R,KAAKmS,EAAKtB,SAAS/C,iBAAiB,aAChD1U,QAAQ,SAAC4Y,GAChBF,WAAW,WACT,GAAIlC,GAAA,GACH,MAEJ,IAhJPe,EAAAtkB,UAkJE6kB,iBAlJF,WAkJqB,GAAA0B,GAAAxmB,IAEjB,IAAIA,KAAKI,YAAa,CACpB,GAAIqmB,GAAUzmB,KAAKmkB,UAAU5E,KAAK,SAACqG,EAAMza,EAAOub,GAC9C,MACGA,GAAMvb,EAAQ,IAAMub,EAAMvb,EAAQ,GAAG6Z,IAAMwB,EAAKzB,MAAMC,SAC5B,KAApB0B,EAAMvb,EAAQ,IAGzBnL,MAAKomB,aAAa3kB,MAAQzB,KAAKomB,aAAapkB,SAC1CykB,EAAQE,oBACV3mB,KAAKsmB,sBAAsB7kB,MAAQzB,KAAKsmB,sBAAsBtkB,SAC5DykB,EAAQG,qBACV5mB,KAAKumB,qBAAqB7kB,KAAO1B,KAAKumB,qBAAqBtkB,SACzDwkB,EAAQI,aACV7mB,KAAKqmB,sBAAsB5kB,MAAQzB,KAAKqmB,sBAAsBrkB,SAC5DykB,EAAQK,iBAlKhBvC,EAAAtkB,UAqKE8mB,qBArKF,SAqKuBrS,GAAK,GAAAsS,GAAAhnB,IAEtBA,MAAK+kB,MAAMkB,eADTvR,GAtLsB,IA2L1B1U,KAAKuF,SAAS,WACZyhB,EAAK5B,oBAAsB4B,EAAKjC,MAAMkB,kBA5K5C1B,EAAAtkB,UAgLEgnB,qBAhLF,SAgLuBvS,GAAK,GAAAwS,GAAAlnB,IAEtBA,MAAK+kB,MAAMmB,eADTxR,GA/LsB,IAoM1B1U,KAAKuF,SAAS,WACZ2hB,EAAK7B,oBAAsB6B,EAAKnC,MAAMmB,kBAvL5C3B,EAAAtkB,UA2LEknB,8BA3LF,WA4LI,MAAOnnB,MAAK+kB,MAAMmB,gBAAkBlmB,KAAKsmB,sBAAsB7kB,OA5LnE8iB,EAAAtkB,UA8LEmnB,6BA9LF,WA+LI,MAAOpnB,MAAK+kB,MAAMmB,gBAAkBlmB,KAAKsmB,sBAAsB5kB,MA/LnE6iB,EAAAtkB,UAiMEonB,uBAjMF,WAkMIrnB,KAAK+kB,MAAMmB,gBAAkBlmB,KAAKsmB,sBAAsB3kB,MAlM5D4iB,EAAAtkB,UAoMEqnB,uBApMF,WAqMItnB,KAAK+kB,MAAMmB,gBAAkBlmB,KAAKsmB,sBAAsB3kB,MArM5D4iB,EAAAtkB,UAwMEsnB,mBAxMF,WAyMI,MAAOvnB,MAAK+kB,MAAMC,KAAOhlB,KAAKmmB,WAAW1kB,OAzM7C8iB,EAAAtkB,UA2MEunB,kBA3MF,WA4MI,MAAOxnB,MAAK+kB,MAAMC,KAAOhlB,KAAKmmB,WAAWzkB,MA5M7C6iB,EAAAtkB,UA8MEwnB,YA9MF,WA+MIznB,KAAK+kB,MAAMC,OA/MfT,EAAAtkB,UAiNEynB,YAjNF,WAkNI1nB,KAAK+kB,MAAMC,OAlNfT,EAAAtkB,UAqNE0nB,qBArNF,WAsNI,MAAO3nB,MAAK+kB,MAAMG,OAASllB,KAAKomB,aAAa3kB,OAtNjD8iB,EAAAtkB,UAwNE2nB,oBAxNF,WAyNI,MAAO5nB,MAAK+kB,MAAMG,OAASllB,KAAKomB,aAAa1kB,MAzNjD6iB,EAAAtkB,UA2NE4nB,cA3NF,WA4NI7nB,KAAK+kB,MAAMG,SA5NfX,EAAAtkB,UA8NE6nB,cA9NF,WA+NI9nB,KAAK+kB,MAAMG,SA/NfX,EAAAtkB,UAkOE8nB,6BAlOF,WAmOI,MAAO/nB,MAAKmlB,mBAAqBnlB,KAAKumB,qBAAqB9kB,OAnO/D8iB,EAAAtkB,UAqOE+nB,4BArOF,WAsOI,MAAOhoB,MAAKmlB,mBAAqBnlB,KAAKumB,qBAAqB7kB,MAtO/D6iB,EAAAtkB,UAwOEgoB,sBAxOF,WAyOIjoB,KAAKmlB,qBAzOTZ,EAAAtkB,UA2OEioB,sBA3OF,WA4OIloB,KAAKmlB,qBA5OTZ,EAAAtkB,UA+OEkoB,8BA/OF,WAgPI,MAAOnoB,MAAK+kB,MAAMkB,gBAAkBjmB,KAAKqmB,sBAAsB5kB,OAhPnE8iB,EAAAtkB,UAkPEmoB,6BAlPF,WAmPI,MAAOpoB,MAAK+kB,MAAMkB,gBAAkBjmB,KAAKqmB,sBAAsB3kB,MAnPnE6iB,EAAAtkB,UAqPEooB,uBArPF,WAsPIroB,KAAK+kB,MAAMkB,gBAAkBjmB,KAAKqmB,sBAAsB1kB,MAtP5D4iB,EAAAtkB,UAwPEqoB,uBAxPF,WAyPItoB,KAAK+kB,MAAMkB,gBAAkBjmB,KAAKqmB,sBAAsB1kB,MAzP5D4iB,EAAAtkB,UA4PEsoB,UA5PF,WA6PI,GAAIvoB,KAAKslB,eAAekD,OAAQ,CAC9B,GAAIC,UACAC,QACJ,QAAQ1oB,KAAKgmB,WACX,IAAK,IACH0C,EAAgB1oB,KAAKmlB,iBACrB,MACF,KAAK,IACHuD,EAAgB1oB,KAAK2oB,iBACrB,MACF,KAAK,IACHD,EAAgB1oB,KAAK4oB,kBAGzBH,EAAOrG,OAAOyG,UAAW7oB,KAAK+kB,OAAS2D,kBACvC1oB,KAAKokB,aAAcqE,WA5QzBlE,GAAmDd,EAAA,KNo6G/CqF,IACA,SAAUzpB,EAAQC,EAAqBC,GAE7C,YACqB,IAAIwpB,GAA2DxpB,EAAoB,KAC/EypB,EAA2EzpB,EAAoB,KAC/F0pB,EAAiD1pB,EAAoB,KACrE2pB,EAAyD3pB,EAAoBgjB,EAAE0G,EACzE1pB,GAAoBK,EAAEN,EAAqB,IAAK,WAAa,MAAO6pB,IO97G5F,IAAMA,GAAuBtoB,QAClCxB,OAAO,kBAAmB2pB,EAAA,EAAmBE,EAAAE,IAC7CtoB,UAAU,iBAAkBioB,EAAA,GAC5BzM,MPm8GI+M,IACA,SAAUhqB,EAAQC,EAAqBC,GAE7C,YAMA,SAASC,GAAgBC,EAAUC,GAAe,KAAMD,YAAoBC,IAAgB,KAAM,IAAIC,WAAU,qCAEhH,QAAS8iB,GAA2BpZ,EAAMqZ,GAAQ,IAAKrZ,EAAQ,KAAM,IAAIsZ,gBAAe,4DAAgE,QAAOD,GAAyB,gBAATA,IAAqC,kBAATA,GAA8BrZ,EAAPqZ,EAElO,QAASE,GAAUC,EAAUC,GAAc,GAA0B,kBAAfA,IAA4C,OAAfA,EAAuB,KAAM,IAAInjB,WAAU,iEAAoEmjB,GAAeD,GAAS5iB,UAAYmiB,OAAO3C,OAAOqD,GAAcA,EAAW7iB,WAAa8iB,aAAe3d,MAAOyd,EAAUG,YAAY,EAAOC,UAAU,EAAMC,cAAc,KAAeJ,IAAYV,OAAOe,eAAiBf,OAAOe,eAAeN,EAAUC,GAAcD,EAASO,UAAYN,GAT5c,GAAIwG,GAAuD/pB,EAAoB,KAC3EgqB,EAA+DhqB,EAAoBgjB,EAAE+G,GACrFE,EAAwDjqB,EAAoB,IAC5EkqB,EAAgDlqB,EAAoB,IAC9DA,GAAoBK,EAAEN,EAAqB,IAAK,WAAa,MAAOoqB,IQ98G5F,IAAMA,IACZ5F,SAAUyF,MACVxF,YACC4F,qBAAsB,wBAEvB1F,UACC2F,SAAU,IACVzpB,MAAO,KAERmkB,uBACC,QAAAuF,GAAYpF,GACX,UADqBjlB,GAAAQ,KAAA6pB,EAAA,IAAAnF,GAAAjC,EAAAziB,KAErB2kB,EAAAjC,KAAA1iB,MAFqB,OAGrB0kB,GAAKD,SAAWA,EAAS,GAHJC,EADvB,MAAAmF,GAAAhE,SAAA,YAAAjD,EAAAiH,EAAAlF,GAAAkF,EAAA5pB,UAMC6lB,QAND,WAMW,GAAAC,GAAA/lB,IACT0lB,YAAW,WACKC,MAAM/R,KAAKmS,EAAKtB,SAAS/C,iBAAiB,aAChD1U,QAAQ,SAAA4Y,GAChBF,WAAW,WACV,GAAI8D,GAAA,GACF,MAEF,IAdLK,EAAA5pB,UAgBC6pB,UAhBD,WAiBE,GAAIC,GAAU/pB,KAAKE,iBAAmB,eAAiB,UACnD8pB,EAAM,EAIV,OAHIhqB,MAAK4pB,WACRI,qBAAyBD,EAAzB,QAAwC/pB,KAAK4pB,SAAS1nB,IAEhD8nB,GAtBTH,GAAqDJ,EAAA,KRogHhDQ,IACA,SAAU5qB,EAAQC,EAAqBC,GAE7C,YACqB,IAAI2qB,GAA6D3qB,EAAoB,IAC3EA,GAAoBK,EAAEN,EAAqB,IAAK,WAAa,MAAO6qB,ISphH5F,IAAMA,GAAyBtpB,QACpCxB,OAAO,uBACPyB,UAAU,mBAAoBopB,EAAA,GAC9B5N,MTuhHI8N,IACA,SAAU/qB,EAAQC,EAAqBC,GAE7C,YAMA,SAASC,GAAgBC,EAAUC,GAAe,KAAMD,YAAoBC,IAAgB,KAAM,IAAIC,WAAU,qCAL3F,GAAI0qB,GAAoD9qB,EAAoB,KACxE+qB,EAA4D/qB,EAAoBgjB,EAAE8H,GAClFE,EAAyDhrB,EAAoB,IAC7EirB,EAA0FjrB,EAAoB,GACxGA,GAAoBK,EAAEN,EAAqB,IAAK,WAAa,MAAOmrB,IUhiH5F,IAAMA,IACZ3G,SAAUwG,MACVrG,UACC/hB,GAAI,IACJwoB,gBAAiB,IACjBC,QAAS,IACTC,WAAY,KAEbtG,sBACC,QAAAuG,GAAYpG,EAAUqG,GACrB,UADyCtrB,GAAAQ,KAAA6qB,GAEzC7qB,KAAKykB,SAAWA,EAAS,GACzBzkB,KAAK8qB,mBAAqBA,EAJ5B,MAAAD,GAAAhF,SAAA,iCAAAgF,EAAA5qB,UAMC6lB,QAND,WAMW,GAAApB,GAAA1kB,IACTA,MAAK+kB,SACL/kB,KAAK+qB,UACJC,MAAOT,EAAA,EACPU,MAAOV,EAAA,EACPW,WAAYX,EAAA,EACZY,OAAQZ,EAAA,EACRa,WAAYb,EAAA,GAEb7E,WAAW,WACIC,MAAM/R,KAAK8Q,EAAKD,SAAS/C,iBAAiB,WAChD1U,QAAQ,SAAA4Y,GACfF,WAAW,WACV,GAAI8E,GAAA,GAAmBngB,QAASub,KAC9B,MAEF,IAtBLiF,EAAA5qB,UAyBCorB,gBAzBD,WA0BMrrB,KAAKsrB,qBAAqB9C,QAC7BxoB,KAAK4qB,YACJnC,KAAMzoB,KAAK+kB,SA5Bf8F,OVqlHKU,IACA,SAAUlsB,EAAQC,EAAqBC,GAE7C,YACqB,IAAIisB,GAA0DjsB,EAAoB,KAC9EksB,EAAkDlsB,EAAoB,IACtEmsB,EAA0DnsB,EAAoBgjB,EAAEkJ,EAC1ElsB,GAAoBK,EAAEN,EAAqB,IAAK,WAAa,MAAOqsB,IWrmH5F,IAAMA,GAAsB9qB,QACjCxB,OAAO,iBAAkBqsB,EAAAtC,IACzBtoB,UAAU,gBAAiB0qB,EAAA,GAC3BlP,MXymHIsP,IACA,SAAUvsB,EAAQC,EAAqBC,GAE7C,YAOA,SAASC,GAAgBC,EAAUC,GAAe,KAAMD,YAAoBC,IAAgB,KAAM,IAAIC,WAAU,qCAN3F,GAAIksB,GAAgDtsB,EAAoB,KACpEusB,EAAwDvsB,EAAoBgjB,EAAEsJ,GAC9EE,EAAgDxsB,EAAoB,IAC9DA,GAAoBK,EAAEN,EAAqB,IAAK,WAAa,MAAO0sB,IACnG,IAAIC,GYpnHEC,UACJH,EAAA,GAAsB,yBADlBE,EAEJF,EAAA,GAAgB,oBAFZE,GAIOD,GACZlI,SAAUgI,MACV/H,YACCC,mBAAoB,qBACpB2F,qBAAsB,wBAEvB1F,UACC9jB,MAAO,KAERmkB,sBACC,QAAA6H,GAAYC,EAAmB7mB,EAAUuY,GACxC,UADoDte,GAAAQ,KAAAmsB,GAEpDnsB,KAAKqsB,kBAAoBD,EACzBpsB,KAAKuF,SAAWA,EAChBvF,KAAK8d,WAAaA,EALpB,MAAAqO,GAAAtG,SAAA,6CAAAsG,EAAAlsB,UAOC6lB,QAPD,WAQE9lB,KAAKkJ,QARPijB,EAAAlsB,UAUCiJ,KAVD,WAUQ,GAAAwb,GAAA1kB,IACNA,MAAKqsB,kBAAkBnjB,OAAO4W,KAAK,SAACgB,GACnC4D,EAAKR,QAAUpD,EAASoD,QACxBQ,EAAKgG,gBAAkB5J,EAAS4J,gBAChChG,EAAKP,UAAYrD,EAASqD,YACxBmI,MAAM,SAACC,GACT7H,EAAK5G,WAAWoC,WAAW,kBAhB9BiM,EAAAlsB,UAmBCusB,aAnBD,WAoBExsB,KAAK4pB,SAAW,MApBlBuC,EAAAlsB,UAsBCsoB,UAtBD,SAsBWE,GAAM,GAAA1C,GAAA/lB,KACXysB,EAAoBP,EAAqBlsB,KAAKG,MAClDH,MAAKqsB,kBAAkBI,GAAmBhE,GAAM3I,KAAK,SAACgB,GACrDiF,EAAK6D,SAAW9I,EAChBiF,EAAKxgB,SAAS,WACbyZ,SAAS0N,eAAe,qBAAqBC,qBAE5CL,MAAM,SAACC,GACTxG,EAAKjI,WAAWoC,WAAW,kBA9B9BiM,EAAAlsB,UAiCC2sB,QAjCD,SAiCSnE,GAAM,GAAAjC,GAAAxmB,KACT6sB,EAAazK,OAAOyG,UAAWJ,GAAQqE,cAAe9sB,KAAK4pB,SAAS1nB,IACxElC,MAAKqsB,kBAAkBO,QAAQC,GAAY/M,KAAK,SAACgB,GAChD0F,EAAKuG,YAAa,IAChBT,MAAM,SAACC,GACT/F,EAAK1I,WAAWoC,WAAW,kBAtC9BiM,OZurHKa,IACA,SAAU3tB,EAAQC,EAAqBC,GAE7C,YAEA,SAASC,GAAgBC,EAAUC,GAAe,KAAMD,YAAoBC,IAAgB,KAAM,IAAIC,WAAU,qCADjFJ,EAAoBK,EAAEN,EAAqB,IAAK,WAAa,MAAO8sB,Ia1sHnG,IAAaA,GAAb,WACC,QAAAA,GAAYa,GACX,UADkBztB,GAAAQ,KAAAosB,GAElBpsB,KAAKitB,MAAQA,EAHf,MAAAb,GAAAvG,SAAA,SAAAuG,EAAAnsB,UAKCiJ,KALD,WAME,MAAOlJ,MAAKitB,MAAMC,IAAI,wBAAwBpN,KAAK,SAAAgB,GAAA,MAAYA,GAAS2H,QAN1E2D,EAAAnsB,UAQCktB,uBARD,SAQwB1E,GACtB,MAAOzoB,MAAKitB,MAAMG,KAAK,+BAAgC3E,GAAM3I,KAAK,SAAAgB,GAAA,MAAYA,GAAS2H,QATzF2D,EAAAnsB,UAWCotB,kBAXD,SAWmB5E,GACjB,MAAOzoB,MAAKitB,MAAMG,KAAK,0BAA2B3E,GAAM3I,KAAK,SAAAgB,GAAA,MAAYA,GAAS2H,QAZpF2D,EAAAnsB,UAcC2sB,QAdD,SAcSnE,GACP,GAAI6E,GAAe7E,EAAK6E,YAExB,cADO7E,GAAK6E,aACLttB,KAAKitB,MAAMG,KAAK,8BAA+B3E,GACrD8E,SACCC,QAAWF,KAEVxN,KAAK,SAAAgB,GAAA,MAAYA,GAAS2H,QArB/B2D,Mb2vHMqB,IACA,SAAUpuB,EAAQC,EAAqBC,GAE7C,Yc7vHAD,GAAA,EAAeuB,QAAQxB,OADH,kBAElBqc,UAAU,eADG,UACY,SAAUgS,GACnC,UACA,QACC9R,SAAU,IACViF,QAAS,UACT5E,KAAM,SAAUpV,EAAOwD,EAAS2R,EAAO2R,GACtC,GAAIC,GAAW5R,EAAM6R,WACjBF,KACHA,EAAQG,YAAYC,QAAQ,WAC3B,MAAOL,GAAQ,UAAUC,EAAQK,eAElCL,EAAQM,SAASF,QAAQ,SAAUG,GAClC,GAAIC,UACAC,QACJA,GAAaR,EAAWM,EAAUrS,QAAQ,YAAa,IAAMqS,EAAUrS,QAAQ,UAAW,IAC1FsS,EAAoBD,EACyB,IAAxCE,EAAWC,MAAM,WAAahjB,SAClC+iB,EAAaA,EAAWE,MAAM,GAAI,GAClCH,EAAoBA,EAAkBG,MAAM,GAAI,IAErB,KAAxBF,EAAWE,OAAO,KACrBH,EAAoBD,EAAY,KAEjCC,EAAoBP,EAAWO,EAAkBtS,QAAQ,YAAa,IAAIA,QAAQ,KAAM,KAAKA,QAAQ,MAAO,IAAMsS,EAAkBtS,QAAQ,UAAW,IAAIA,QAAQ,MAAO,GAC1K,IAAIuN,GAAIsE,EAAQ,UAAUS,GACtBI,EAA6B,KAAxBH,EAAWE,OAAO,GAAa,IAAM,EAG9C,OAFAX,GAAQa,cAAc,GAAGpF,EAAGmF,GAC5BZ,EAAQc,UACDN,UA7Bb,MduyHMO,IACA,SAAUrvB,EAAQiB,EAASf,GevyHjC,QAAAukB,GAAA6K,GAA2B,GAAAC,GAAA,EAA4ugB,OAA7rgBA,IAAA,gkYAF1ErvB,EAAA,EAGAF,GAAAiB,QAAAwjB,Gf+yHM+K,IACA,SAAUxvB,EAAQiB,EAASf,GgBjzHjC,QAAAukB,GAAA6K,GAA2B,GAAAC,GAAA,EAAkmK,OAAnjKA,IAAA,k7GAF1ErvB,EAAA,EAGAF,GAAAiB,QAAAwjB,GhByzHMgL,IACA,SAAUzvB,EAAQiB,EAASf,GiB3zHjC,QAAAukB,GAAA6K,GAA2B,GAAAC,GAAA,EAAknM,OAAnkMA,IAAA,msJAF1ErvB,EAAA,EAGAF,GAAAiB,QAAAwjB,GjBm0HMiL,IACA,SAAU1vB,EAAQiB,EAASf,GkBr0HjC,QAAAukB,GAAA6K,GAA2B,GAAAC,GAAA,EAA22C,OAA5zCA,IAAA,8hCAF1ErvB,EAAA,EAGAF,GAAAiB,QAAAwjB,KlB60HG","file":"application/kalkulator.bundle.js","sourcesContent":["webpackJsonp([0],{\n\n/***/ 105:\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return MEGTAKARITAS_TIPUS; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"b\", function() { return JARADEK_TIPUS; });\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar MEGTAKARITAS_TIPUS = 'megtakaritas';\nvar JARADEK_TIPUS = 'jaradek';\n\nvar TipusBase = function () {\n\tfunction TipusBase() {\n\t\t_classCallCheck(this, TipusBase);\n\t}\n\n\tTipusBase.prototype.isMegtakaritas = function isMegtakaritas() {\n\t\treturn this.tipus == MEGTAKARITAS_TIPUS;\n\t};\n\n\tTipusBase.prototype.isJaradek = function isJaradek() {\n\t\treturn this.tipus == JARADEK_TIPUS;\n\t};\n\n\treturn TipusBase;\n}();\n\n/* harmony default export */ __webpack_exports__[\"c\"] = (TipusBase);\n\n/***/ }),\n\n/***/ 287:\n/***/ (function(module, exports) {\n\n// removed by extract-text-webpack-plugin\n\n/***/ }),\n\n/***/ 300:\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__kalkulator_component__ = __webpack_require__(548);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__kalkulator_form_kalkulator_form_module__ = __webpack_require__(543);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__kalkulator_result_kalkulator_result_module__ = __webpack_require__(545);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__kalkulator_vhk_kalkulator_vhk_module__ = __webpack_require__(547);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__kalkulator_service__ = __webpack_require__(549);\n\n\n\n\n\nangular.module('kalkulator', [__WEBPACK_IMPORTED_MODULE_1__kalkulator_form_kalkulator_form_module__[\"a\" /* KalkulatorFormModule */], __WEBPACK_IMPORTED_MODULE_2__kalkulator_result_kalkulator_result_module__[\"a\" /* KalkulatorResultModule */], __WEBPACK_IMPORTED_MODULE_3__kalkulator_vhk_kalkulator_vhk_module__[\"a\" /* KalkulatorVhkModule */]]).component('kalkulator', __WEBPACK_IMPORTED_MODULE_0__kalkulator_component__[\"a\" /* KalkulatorComponent */]).service('KalkulatorService', __WEBPACK_IMPORTED_MODULE_4__kalkulator_service__[\"a\" /* KalkulatorService */]);\n\n/***/ }),\n\n/***/ 328:\n/***/ (function(module, exports, __webpack_require__) {\n\nvar __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/*! angularjs-slider - v6.4.2 - \n (c) Rafal Zajac , Valentin Hervieu , Jussi Saarivirta , Angelin Sirbu - \n https://github.com/angular-slider/angularjs-slider - \n 2017-12-01 */\n/*jslint unparam: true */\n/*global angular: false, console: false, define, module */\n;(function(root, factory) {\n 'use strict'\n /* istanbul ignore next */\n if (true) {\n // AMD. Register as an anonymous module.\n !(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(29)], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?\n\t\t\t\t(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__))\n } else if (typeof module === 'object' && module.exports) {\n // Node. Does not work with strict CommonJS, but\n // only CommonJS-like environments that support module.exports,\n // like Node.\n // to support bundler like browserify\n var angularObj = angular || require('angular')\n if ((!angularObj || !angularObj.module) && typeof angular != 'undefined') {\n angularObj = angular\n }\n module.exports = factory(angularObj)\n } else {\n // Browser globals (root is window)\n factory(root.angular)\n }\n})(this, function(angular) {\n 'use strict'\n var module = angular\n .module('rzModule', [])\n .factory('RzSliderOptions', function() {\n var defaultOptions = {\n floor: 0,\n ceil: null, //defaults to rz-slider-model\n step: 1,\n precision: 0,\n minRange: null,\n maxRange: null,\n pushRange: false,\n minLimit: null,\n maxLimit: null,\n id: null,\n translate: null,\n getLegend: null,\n stepsArray: null,\n bindIndexForStepsArray: false,\n draggableRange: false,\n draggableRangeOnly: false,\n showSelectionBar: false,\n showSelectionBarEnd: false,\n showSelectionBarFromValue: null,\n showOuterSelectionBars: false,\n hidePointerLabels: false,\n hideLimitLabels: false,\n autoHideLimitLabels: true,\n readOnly: false,\n disabled: false,\n interval: 350,\n showTicks: false,\n showTicksValues: false,\n ticksArray: null,\n ticksTooltip: null,\n ticksValuesTooltip: null,\n vertical: false,\n getSelectionBarColor: null,\n getTickColor: null,\n getPointerColor: null,\n keyboardSupport: true,\n scale: 1,\n enforceStep: true,\n enforceRange: false,\n noSwitching: false,\n onlyBindHandles: false,\n onStart: null,\n onChange: null,\n onEnd: null,\n rightToLeft: false,\n reversedControls: false,\n boundPointerLabels: true,\n mergeRangeLabelsIfSame: false,\n customTemplateScope: null,\n logScale: false,\n customValueToPosition: null,\n customPositionToValue: null,\n selectionBarGradient: null,\n ariaLabel: null,\n ariaLabelledBy: null,\n ariaLabelHigh: null,\n ariaLabelledByHigh: null\n }\n var globalOptions = {}\n\n var factory = {}\n /**\n * `options({})` allows global configuration of all sliders in the\n * application.\n *\n * var app = angular.module( 'App', ['rzModule'], function( RzSliderOptions ) {\n * // show ticks for all sliders\n * RzSliderOptions.options( { showTicks: true } );\n * });\n */\n factory.options = function(value) {\n angular.extend(globalOptions, value)\n }\n\n factory.getOptions = function(options) {\n return angular.extend({}, defaultOptions, globalOptions, options)\n }\n\n return factory\n })\n .factory('rzThrottle', ['$timeout', function($timeout) {\n /**\n * rzThrottle\n *\n * Taken from underscore project\n *\n * @param {Function} func\n * @param {number} wait\n * @param {ThrottleOptions} options\n * @returns {Function}\n */\n return function(func, wait, options) {\n 'use strict'\n /* istanbul ignore next */\n var getTime =\n Date.now ||\n function() {\n return new Date().getTime()\n }\n var context, args, result\n var timeout = null\n var previous = 0\n options = options || {}\n var later = function() {\n previous = getTime()\n timeout = null\n result = func.apply(context, args)\n context = args = null\n }\n return function() {\n var now = getTime()\n var remaining = wait - (now - previous)\n context = this\n args = arguments\n if (remaining <= 0) {\n $timeout.cancel(timeout)\n timeout = null\n previous = now\n result = func.apply(context, args)\n context = args = null\n } else if (!timeout && options.trailing !== false) {\n timeout = $timeout(later, remaining)\n }\n return result\n }\n }\n }])\n .factory('RzSlider', ['$timeout', '$document', '$window', '$compile', 'RzSliderOptions', 'rzThrottle', function(\n $timeout,\n $document,\n $window,\n $compile,\n RzSliderOptions,\n rzThrottle\n ) {\n 'use strict'\n\n /**\n * Slider\n *\n * @param {ngScope} scope The AngularJS scope\n * @param {Element} sliderElem The slider directive element wrapped in jqLite\n * @constructor\n */\n var Slider = function(scope, sliderElem) {\n /**\n * The slider's scope\n *\n * @type {ngScope}\n */\n this.scope = scope\n\n /**\n * The slider inner low value (linked to rzSliderModel)\n * @type {number}\n */\n this.lowValue = 0\n\n /**\n * The slider inner high value (linked to rzSliderHigh)\n * @type {number}\n */\n this.highValue = 0\n\n /**\n * Slider element wrapped in jqLite\n *\n * @type {jqLite}\n */\n this.sliderElem = sliderElem\n\n /**\n * Slider type\n *\n * @type {boolean} Set to true for range slider\n */\n this.range =\n this.scope.rzSliderModel !== undefined &&\n this.scope.rzSliderHigh !== undefined\n\n /**\n * Values recorded when first dragging the bar\n *\n * @type {Object}\n */\n this.dragging = {\n active: false,\n value: 0,\n difference: 0,\n position: 0,\n lowLimit: 0,\n highLimit: 0\n }\n\n /**\n * property that handle position (defaults to left for horizontal)\n * @type {string}\n */\n this.positionProperty = 'left'\n\n /**\n * property that handle dimension (defaults to width for horizontal)\n * @type {string}\n */\n this.dimensionProperty = 'width'\n\n /**\n * Half of the width or height of the slider handles\n *\n * @type {number}\n */\n this.handleHalfDim = 0\n\n /**\n * Maximum position the slider handle can have\n *\n * @type {number}\n */\n this.maxPos = 0\n\n /**\n * Precision\n *\n * @type {number}\n */\n this.precision = 0\n\n /**\n * Step\n *\n * @type {number}\n */\n this.step = 1\n\n /**\n * The name of the handle we are currently tracking\n *\n * @type {string}\n */\n this.tracking = ''\n\n /**\n * Minimum value (floor) of the model\n *\n * @type {number}\n */\n this.minValue = 0\n\n /**\n * Maximum value (ceiling) of the model\n *\n * @type {number}\n */\n this.maxValue = 0\n\n /**\n * The delta between min and max value\n *\n * @type {number}\n */\n this.valueRange = 0\n\n /**\n * If showTicks/showTicksValues options are number.\n * In this case, ticks values should be displayed below the slider.\n * @type {boolean}\n */\n this.intermediateTicks = false\n\n /**\n * Set to true if init method already executed\n *\n * @type {boolean}\n */\n this.initHasRun = false\n\n /**\n * Used to call onStart on the first keydown event\n *\n * @type {boolean}\n */\n this.firstKeyDown = false\n\n /**\n * Internal flag to prevent watchers to be called when the sliders value are modified internally.\n * @type {boolean}\n */\n this.internalChange = false\n\n /**\n * Internal flag to keep track of the visibility of combo label\n * @type {boolean}\n */\n this.cmbLabelShown = false\n\n /**\n * Internal variable to keep track of the focus element\n */\n this.currentFocusElement = null\n\n // Slider DOM elements wrapped in jqLite\n this.fullBar = null // The whole slider bar\n this.selBar = null // Highlight between two handles\n this.minH = null // Left slider handle\n this.maxH = null // Right slider handle\n this.flrLab = null // Floor label\n this.ceilLab = null // Ceiling label\n this.minLab = null // Label above the low value\n this.maxLab = null // Label above the high value\n this.cmbLab = null // Combined label\n this.ticks = null // The ticks\n\n // Initialize slider\n this.init()\n }\n\n // Add instance methods\n Slider.prototype = {\n /**\n * Initialize slider\n *\n * @returns {undefined}\n */\n init: function() {\n var thrLow,\n thrHigh,\n self = this\n\n var calcDimFn = function() {\n self.calcViewDimensions()\n }\n\n this.applyOptions()\n this.syncLowValue()\n if (this.range) this.syncHighValue()\n this.initElemHandles()\n this.manageElementsStyle()\n this.setDisabledState()\n this.calcViewDimensions()\n this.setMinAndMax()\n this.addAccessibility()\n this.updateCeilLab()\n this.updateFloorLab()\n this.initHandles()\n this.manageEventsBindings()\n\n // Recalculate slider view dimensions\n this.scope.$on('reCalcViewDimensions', calcDimFn)\n\n // Recalculate stuff if view port dimensions have changed\n angular.element($window).on('resize', calcDimFn)\n\n this.initHasRun = true\n\n // Watch for changes to the model\n thrLow = rzThrottle(function() {\n self.onLowHandleChange()\n }, self.options.interval)\n\n thrHigh = rzThrottle(function() {\n self.onHighHandleChange()\n }, self.options.interval)\n\n this.scope.$on('rzSliderForceRender', function() {\n self.resetLabelsValue()\n thrLow()\n if (self.range) {\n thrHigh()\n }\n self.resetSlider()\n })\n\n // Watchers (order is important because in case of simultaneous change,\n // watchers will be called in the same order)\n this.scope.$watchCollection('rzSliderOptions()', function(\n newValue,\n oldValue\n ) {\n if (newValue === oldValue) return\n self.applyOptions() // need to be called before synchronizing the values\n self.syncLowValue()\n if (self.range) self.syncHighValue()\n self.resetSlider()\n })\n\n this.scope.$watch('rzSliderModel', function(newValue, oldValue) {\n if (self.internalChange) return\n if (newValue === oldValue) return\n thrLow()\n })\n\n this.scope.$watch('rzSliderHigh', function(newValue, oldValue) {\n if (self.internalChange) return\n if (newValue === oldValue) return\n if (newValue != null) thrHigh()\n if (\n (self.range && newValue == null) ||\n (!self.range && newValue != null)\n ) {\n self.applyOptions()\n self.resetSlider()\n }\n })\n\n this.scope.$on('$destroy', function() {\n self.unbindEvents()\n angular.element($window).off('resize', calcDimFn)\n self.currentFocusElement = null\n })\n },\n\n findStepIndex: function(modelValue) {\n var index = 0\n for (var i = 0; i < this.options.stepsArray.length; i++) {\n var step = this.options.stepsArray[i]\n if (step === modelValue) {\n index = i\n break\n } else if (angular.isDate(step)) {\n if (step.getTime() === modelValue.getTime()) {\n index = i\n break\n }\n } else if (angular.isObject(step)) {\n if (\n (angular.isDate(step.value) &&\n step.value.getTime() === modelValue.getTime()) ||\n step.value === modelValue\n ) {\n index = i\n break\n }\n }\n }\n return index\n },\n\n syncLowValue: function() {\n if (this.options.stepsArray) {\n if (!this.options.bindIndexForStepsArray)\n this.lowValue = this.findStepIndex(this.scope.rzSliderModel)\n else this.lowValue = this.scope.rzSliderModel\n } else this.lowValue = this.scope.rzSliderModel\n },\n\n syncHighValue: function() {\n if (this.options.stepsArray) {\n if (!this.options.bindIndexForStepsArray)\n this.highValue = this.findStepIndex(this.scope.rzSliderHigh)\n else this.highValue = this.scope.rzSliderHigh\n } else this.highValue = this.scope.rzSliderHigh\n },\n\n getStepValue: function(sliderValue) {\n var step = this.options.stepsArray[sliderValue]\n if (angular.isDate(step)) return step\n if (angular.isObject(step)) return step.value\n return step\n },\n\n applyLowValue: function() {\n if (this.options.stepsArray) {\n if (!this.options.bindIndexForStepsArray)\n this.scope.rzSliderModel = this.getStepValue(this.lowValue)\n else this.scope.rzSliderModel = this.lowValue\n } else this.scope.rzSliderModel = this.lowValue\n },\n\n applyHighValue: function() {\n if (this.options.stepsArray) {\n if (!this.options.bindIndexForStepsArray)\n this.scope.rzSliderHigh = this.getStepValue(this.highValue)\n else this.scope.rzSliderHigh = this.highValue\n } else this.scope.rzSliderHigh = this.highValue\n },\n\n /*\n * Reflow the slider when the low handle changes (called with throttle)\n */\n onLowHandleChange: function() {\n this.syncLowValue()\n if (this.range) this.syncHighValue()\n this.setMinAndMax()\n this.updateLowHandle(this.valueToPosition(this.lowValue))\n this.updateSelectionBar()\n this.updateTicksScale()\n this.updateAriaAttributes()\n if (this.range) {\n this.updateCmbLabel()\n }\n },\n\n /*\n * Reflow the slider when the high handle changes (called with throttle)\n */\n onHighHandleChange: function() {\n this.syncLowValue()\n this.syncHighValue()\n this.setMinAndMax()\n this.updateHighHandle(this.valueToPosition(this.highValue))\n this.updateSelectionBar()\n this.updateTicksScale()\n this.updateCmbLabel()\n this.updateAriaAttributes()\n },\n\n /**\n * Read the user options and apply them to the slider model\n */\n applyOptions: function() {\n var sliderOptions\n if (this.scope.rzSliderOptions)\n sliderOptions = this.scope.rzSliderOptions()\n else sliderOptions = {}\n\n this.options = RzSliderOptions.getOptions(sliderOptions)\n\n if (this.options.step <= 0) this.options.step = 1\n\n this.range =\n this.scope.rzSliderModel !== undefined &&\n this.scope.rzSliderHigh !== undefined\n this.options.draggableRange =\n this.range && this.options.draggableRange\n this.options.draggableRangeOnly =\n this.range && this.options.draggableRangeOnly\n if (this.options.draggableRangeOnly) {\n this.options.draggableRange = true\n }\n\n this.options.showTicks =\n this.options.showTicks ||\n this.options.showTicksValues ||\n !!this.options.ticksArray\n this.scope.showTicks = this.options.showTicks //scope is used in the template\n if (\n angular.isNumber(this.options.showTicks) ||\n this.options.ticksArray\n )\n this.intermediateTicks = true\n\n this.options.showSelectionBar =\n this.options.showSelectionBar ||\n this.options.showSelectionBarEnd ||\n this.options.showSelectionBarFromValue !== null\n\n if (this.options.stepsArray) {\n this.parseStepsArray()\n } else {\n if (this.options.translate) this.customTrFn = this.options.translate\n else\n this.customTrFn = function(value) {\n return String(value)\n }\n\n this.getLegend = this.options.getLegend\n }\n\n if (this.options.vertical) {\n this.positionProperty = 'bottom'\n this.dimensionProperty = 'height'\n }\n\n if (this.options.customTemplateScope)\n this.scope.custom = this.options.customTemplateScope\n },\n\n parseStepsArray: function() {\n this.options.floor = 0\n this.options.ceil = this.options.stepsArray.length - 1\n this.options.step = 1\n\n if (this.options.translate) {\n this.customTrFn = this.options.translate\n } else {\n this.customTrFn = function(modelValue) {\n if (this.options.bindIndexForStepsArray)\n return this.getStepValue(modelValue)\n return modelValue\n }\n }\n\n this.getLegend = function(index) {\n var step = this.options.stepsArray[index]\n if (angular.isObject(step)) return step.legend\n return null\n }\n },\n\n /**\n * Resets slider\n *\n * @returns {undefined}\n */\n resetSlider: function() {\n this.manageElementsStyle()\n this.addAccessibility()\n this.setMinAndMax()\n this.updateCeilLab()\n this.updateFloorLab()\n this.unbindEvents()\n this.manageEventsBindings()\n this.setDisabledState()\n this.calcViewDimensions()\n this.refocusPointerIfNeeded()\n },\n\n refocusPointerIfNeeded: function() {\n if (this.currentFocusElement) {\n this.onPointerFocus(\n this.currentFocusElement.pointer,\n this.currentFocusElement.ref\n )\n this.focusElement(this.currentFocusElement.pointer)\n }\n },\n\n /**\n * Set the slider children to variables for easy access\n *\n * Run only once during initialization\n *\n * @returns {undefined}\n */\n initElemHandles: function() {\n // Assign all slider elements to object properties for easy access\n angular.forEach(\n this.sliderElem.children(),\n function(elem, index) {\n var jElem = angular.element(elem)\n\n switch (index) {\n case 0:\n this.leftOutSelBar = jElem\n break\n case 1:\n this.rightOutSelBar = jElem\n break\n case 2:\n this.fullBar = jElem\n break\n case 3:\n this.selBar = jElem\n break\n case 4:\n this.minH = jElem\n break\n case 5:\n this.maxH = jElem\n break\n case 6:\n this.flrLab = jElem\n break\n case 7:\n this.ceilLab = jElem\n break\n case 8:\n this.minLab = jElem\n break\n case 9:\n this.maxLab = jElem\n break\n case 10:\n this.cmbLab = jElem\n break\n case 11:\n this.ticks = jElem\n break\n }\n },\n this\n )\n\n // Initialize position cache properties\n this.selBar.rzsp = 0\n this.minH.rzsp = 0\n this.maxH.rzsp = 0\n this.flrLab.rzsp = 0\n this.ceilLab.rzsp = 0\n this.minLab.rzsp = 0\n this.maxLab.rzsp = 0\n this.cmbLab.rzsp = 0\n },\n\n /**\n * Update each elements style based on options\n */\n manageElementsStyle: function() {\n if (!this.range) this.maxH.css('display', 'none')\n else this.maxH.css('display', '')\n\n this.alwaysHide(\n this.flrLab,\n this.options.showTicksValues || this.options.hideLimitLabels\n )\n this.alwaysHide(\n this.ceilLab,\n this.options.showTicksValues || this.options.hideLimitLabels\n )\n\n var hideLabelsForTicks =\n this.options.showTicksValues && !this.intermediateTicks\n this.alwaysHide(\n this.minLab,\n hideLabelsForTicks || this.options.hidePointerLabels\n )\n this.alwaysHide(\n this.maxLab,\n hideLabelsForTicks || !this.range || this.options.hidePointerLabels\n )\n this.alwaysHide(\n this.cmbLab,\n hideLabelsForTicks || !this.range || this.options.hidePointerLabels\n )\n this.alwaysHide(\n this.selBar,\n !this.range && !this.options.showSelectionBar\n )\n this.alwaysHide(\n this.leftOutSelBar,\n !this.range || !this.options.showOuterSelectionBars\n )\n this.alwaysHide(\n this.rightOutSelBar,\n !this.range || !this.options.showOuterSelectionBars\n )\n\n if (this.range && this.options.showOuterSelectionBars) {\n this.fullBar.addClass('rz-transparent')\n }\n\n if (this.options.vertical) this.sliderElem.addClass('rz-vertical')\n\n if (this.options.draggableRange) this.selBar.addClass('rz-draggable')\n else this.selBar.removeClass('rz-draggable')\n\n if (this.intermediateTicks && this.options.showTicksValues)\n this.ticks.addClass('rz-ticks-values-under')\n },\n\n alwaysHide: function(el, hide) {\n el.rzAlwaysHide = hide\n if (hide) this.hideEl(el)\n else this.showEl(el)\n },\n\n /**\n * Manage the events bindings based on readOnly and disabled options\n *\n * @returns {undefined}\n */\n manageEventsBindings: function() {\n if (this.options.disabled || this.options.readOnly)\n this.unbindEvents()\n else this.bindEvents()\n },\n\n /**\n * Set the disabled state based on rzSliderDisabled\n *\n * @returns {undefined}\n */\n setDisabledState: function() {\n if (this.options.disabled) {\n this.sliderElem.attr('disabled', 'disabled')\n } else {\n this.sliderElem.attr('disabled', null)\n }\n },\n\n /**\n * Reset label values\n *\n * @return {undefined}\n */\n resetLabelsValue: function() {\n this.minLab.rzsv = undefined\n this.maxLab.rzsv = undefined\n },\n\n /**\n * Initialize slider handles positions and labels\n *\n * Run only once during initialization and every time view port changes size\n *\n * @returns {undefined}\n */\n initHandles: function() {\n this.updateLowHandle(this.valueToPosition(this.lowValue))\n\n /*\n the order here is important since the selection bar should be\n updated after the high handle but before the combined label\n */\n if (this.range)\n this.updateHighHandle(this.valueToPosition(this.highValue))\n this.updateSelectionBar()\n if (this.range) this.updateCmbLabel()\n\n this.updateTicksScale()\n },\n\n /**\n * Translate value to human readable format\n *\n * @param {number|string} value\n * @param {jqLite} label\n * @param {String} which\n * @param {boolean} [useCustomTr]\n * @returns {undefined}\n */\n translateFn: function(value, label, which, useCustomTr) {\n useCustomTr = useCustomTr === undefined ? true : useCustomTr\n\n var valStr = '',\n getDimension = false,\n noLabelInjection = label.hasClass('no-label-injection')\n\n if (useCustomTr) {\n if (this.options.stepsArray && !this.options.bindIndexForStepsArray)\n value = this.getStepValue(value)\n valStr = String(this.customTrFn(value, this.options.id, which))\n } else {\n valStr = String(value)\n }\n\n if (\n label.rzsv === undefined ||\n label.rzsv.length !== valStr.length ||\n (label.rzsv.length > 0 && label.rzsd === 0)\n ) {\n getDimension = true\n label.rzsv = valStr\n }\n\n if (!noLabelInjection) {\n label.html(valStr)\n }\n this.scope[which + 'Label'] = valStr\n\n // Update width only when length of the label have changed\n if (getDimension) {\n this.getDimension(label)\n }\n },\n\n /**\n * Set maximum and minimum values for the slider and ensure the model and high\n * value match these limits\n * @returns {undefined}\n */\n setMinAndMax: function() {\n this.step = +this.options.step\n this.precision = +this.options.precision\n\n this.minValue = this.options.floor\n if (this.options.logScale && this.minValue === 0)\n throw Error(\"Can't use floor=0 with logarithmic scale\")\n\n if (this.options.enforceStep) {\n this.lowValue = this.roundStep(this.lowValue)\n if (this.range) this.highValue = this.roundStep(this.highValue)\n }\n\n if (this.options.ceil != null) this.maxValue = this.options.ceil\n else\n this.maxValue = this.options.ceil = this.range\n ? this.highValue\n : this.lowValue\n\n if (this.options.enforceRange) {\n this.lowValue = this.sanitizeValue(this.lowValue)\n if (this.range) this.highValue = this.sanitizeValue(this.highValue)\n }\n\n this.applyLowValue()\n if (this.range) this.applyHighValue()\n\n this.valueRange = this.maxValue - this.minValue\n },\n\n /**\n * Adds accessibility attributes\n *\n * Run only once during initialization\n *\n * @returns {undefined}\n */\n addAccessibility: function() {\n this.minH.attr('role', 'slider')\n this.updateAriaAttributes()\n if (\n this.options.keyboardSupport &&\n !(this.options.readOnly || this.options.disabled)\n )\n this.minH.attr('tabindex', '0')\n else this.minH.attr('tabindex', '')\n if (this.options.vertical)\n this.minH.attr('aria-orientation', 'vertical')\n if (this.options.ariaLabel)\n this.minH.attr('aria-label', this.options.ariaLabel)\n else if (this.options.ariaLabelledBy)\n this.minH.attr('aria-labelledby', this.options.ariaLabelledBy)\n\n if (this.range) {\n this.maxH.attr('role', 'slider')\n if (\n this.options.keyboardSupport &&\n !(this.options.readOnly || this.options.disabled)\n )\n this.maxH.attr('tabindex', '0')\n else this.maxH.attr('tabindex', '')\n if (this.options.vertical)\n this.maxH.attr('aria-orientation', 'vertical')\n if (this.options.ariaLabelHigh)\n this.maxH.attr('aria-label', this.options.ariaLabelHigh)\n else if (this.options.ariaLabelledByHigh)\n this.maxH.attr('aria-labelledby', this.options.ariaLabelledByHigh)\n }\n },\n\n /**\n * Updates aria attributes according to current values\n */\n updateAriaAttributes: function() {\n this.minH.attr({\n 'aria-valuenow': this.scope.rzSliderModel,\n 'aria-valuetext': this.customTrFn(\n this.scope.rzSliderModel,\n this.options.id,\n 'model'\n ),\n 'aria-valuemin': this.minValue,\n 'aria-valuemax': this.maxValue\n })\n if (this.range) {\n this.maxH.attr({\n 'aria-valuenow': this.scope.rzSliderHigh,\n 'aria-valuetext': this.customTrFn(\n this.scope.rzSliderHigh,\n this.options.id,\n 'high'\n ),\n 'aria-valuemin': this.minValue,\n 'aria-valuemax': this.maxValue\n })\n }\n },\n\n /**\n * Calculate dimensions that are dependent on view port size\n *\n * Run once during initialization and every time view port changes size.\n *\n * @returns {undefined}\n */\n calcViewDimensions: function() {\n var handleWidth = this.getDimension(this.minH)\n\n this.handleHalfDim = handleWidth / 2\n this.barDimension = this.getDimension(this.fullBar)\n\n this.maxPos = this.barDimension - handleWidth\n\n this.getDimension(this.sliderElem)\n this.sliderElem.rzsp = this.sliderElem[0].getBoundingClientRect()[\n this.positionProperty\n ]\n\n if (this.initHasRun) {\n this.updateFloorLab()\n this.updateCeilLab()\n this.initHandles()\n var self = this\n $timeout(function() {\n self.updateTicksScale()\n })\n }\n },\n\n /**\n * Update the ticks position\n *\n * @returns {undefined}\n */\n updateTicksScale: function() {\n if (!this.options.showTicks) return\n\n var ticksArray = this.options.ticksArray || this.getTicksArray(),\n translate = this.options.vertical ? 'translateY' : 'translateX',\n self = this\n\n if (this.options.rightToLeft) ticksArray.reverse()\n\n this.scope.ticks = ticksArray.map(function(value) {\n var position = self.valueToPosition(value)\n\n if (self.options.vertical) position = self.maxPos - position\n\n var translation = translate + '(' + Math.round(position) + 'px)'\n var tick = {\n selected: self.isTickSelected(value),\n style: {\n '-webkit-transform': translation,\n '-moz-transform': translation,\n '-o-transform': translation,\n '-ms-transform': translation,\n transform: translation\n }\n }\n if (tick.selected && self.options.getSelectionBarColor) {\n tick.style['background-color'] = self.getSelectionBarColor()\n }\n if (!tick.selected && self.options.getTickColor) {\n tick.style['background-color'] = self.getTickColor(value)\n }\n if (self.options.ticksTooltip) {\n tick.tooltip = self.options.ticksTooltip(value)\n tick.tooltipPlacement = self.options.vertical ? 'right' : 'top'\n }\n if (\n self.options.showTicksValues === true ||\n value % self.options.showTicksValues === 0\n ) {\n tick.value = self.getDisplayValue(value, 'tick-value')\n if (self.options.ticksValuesTooltip) {\n tick.valueTooltip = self.options.ticksValuesTooltip(value)\n tick.valueTooltipPlacement = self.options.vertical\n ? 'right'\n : 'top'\n }\n }\n if (self.getLegend) {\n var legend = self.getLegend(value, self.options.id)\n if (legend) tick.legend = legend\n }\n return tick\n })\n },\n\n getTicksArray: function() {\n var step = this.step,\n ticksArray = []\n if (this.intermediateTicks) step = this.options.showTicks\n for (\n var value = this.minValue;\n value <= this.maxValue;\n value += step\n ) {\n ticksArray.push(value)\n }\n return ticksArray\n },\n\n isTickSelected: function(value) {\n if (!this.range) {\n if (this.options.showSelectionBarFromValue !== null) {\n var center = this.options.showSelectionBarFromValue\n if (\n this.lowValue > center &&\n value >= center &&\n value <= this.lowValue\n )\n return true\n else if (\n this.lowValue < center &&\n value <= center &&\n value >= this.lowValue\n )\n return true\n } else if (this.options.showSelectionBarEnd) {\n if (value >= this.lowValue) return true\n } else if (this.options.showSelectionBar && value <= this.lowValue)\n return true\n }\n if (this.range && value >= this.lowValue && value <= this.highValue)\n return true\n return false\n },\n\n /**\n * Update position of the floor label\n *\n * @returns {undefined}\n */\n updateFloorLab: function() {\n this.translateFn(this.minValue, this.flrLab, 'floor')\n this.getDimension(this.flrLab)\n var position = this.options.rightToLeft\n ? this.barDimension - this.flrLab.rzsd\n : 0\n this.setPosition(this.flrLab, position)\n },\n\n /**\n * Update position of the ceiling label\n *\n * @returns {undefined}\n */\n updateCeilLab: function() {\n this.translateFn(this.maxValue, this.ceilLab, 'ceil')\n this.getDimension(this.ceilLab)\n var position = this.options.rightToLeft\n ? 0\n : this.barDimension - this.ceilLab.rzsd\n this.setPosition(this.ceilLab, position)\n },\n\n /**\n * Update slider handles and label positions\n *\n * @param {string} which\n * @param {number} newPos\n */\n updateHandles: function(which, newPos) {\n if (which === 'lowValue') this.updateLowHandle(newPos)\n else this.updateHighHandle(newPos)\n\n this.updateSelectionBar()\n this.updateTicksScale()\n if (this.range) this.updateCmbLabel()\n },\n\n /**\n * Helper function to work out the position for handle labels depending on RTL or not\n *\n * @param {string} labelName maxLab or minLab\n * @param newPos\n *\n * @returns {number}\n */\n getHandleLabelPos: function(labelName, newPos) {\n var labelRzsd = this[labelName].rzsd,\n nearHandlePos = newPos - labelRzsd / 2 + this.handleHalfDim,\n endOfBarPos = this.barDimension - labelRzsd\n\n if (!this.options.boundPointerLabels) return nearHandlePos\n\n if (\n (this.options.rightToLeft && labelName === 'minLab') ||\n (!this.options.rightToLeft && labelName === 'maxLab')\n ) {\n return Math.min(nearHandlePos, endOfBarPos)\n } else {\n return Math.min(Math.max(nearHandlePos, 0), endOfBarPos)\n }\n },\n\n /**\n * Update low slider handle position and label\n *\n * @param {number} newPos\n * @returns {undefined}\n */\n updateLowHandle: function(newPos) {\n this.setPosition(this.minH, newPos)\n this.translateFn(this.lowValue, this.minLab, 'model')\n this.setPosition(\n this.minLab,\n this.getHandleLabelPos('minLab', newPos)\n )\n\n if (this.options.getPointerColor) {\n var pointercolor = this.getPointerColor('min')\n this.scope.minPointerStyle = {\n backgroundColor: pointercolor\n }\n }\n\n if (this.options.autoHideLimitLabels) {\n this.shFloorCeil()\n }\n },\n\n /**\n * Update high slider handle position and label\n *\n * @param {number} newPos\n * @returns {undefined}\n */\n updateHighHandle: function(newPos) {\n this.setPosition(this.maxH, newPos)\n this.translateFn(this.highValue, this.maxLab, 'high')\n this.setPosition(\n this.maxLab,\n this.getHandleLabelPos('maxLab', newPos)\n )\n\n if (this.options.getPointerColor) {\n var pointercolor = this.getPointerColor('max')\n this.scope.maxPointerStyle = {\n backgroundColor: pointercolor\n }\n }\n if (this.options.autoHideLimitLabels) {\n this.shFloorCeil()\n }\n },\n\n /**\n * Show/hide floor/ceiling label\n *\n * @returns {undefined}\n */\n shFloorCeil: function() {\n // Show based only on hideLimitLabels if pointer labels are hidden\n if (this.options.hidePointerLabels) {\n return\n }\n var flHidden = false,\n clHidden = false,\n isMinLabAtFloor = this.isLabelBelowFloorLab(this.minLab),\n isMinLabAtCeil = this.isLabelAboveCeilLab(this.minLab),\n isMaxLabAtCeil = this.isLabelAboveCeilLab(this.maxLab),\n isCmbLabAtFloor = this.isLabelBelowFloorLab(this.cmbLab),\n isCmbLabAtCeil = this.isLabelAboveCeilLab(this.cmbLab)\n\n if (isMinLabAtFloor) {\n flHidden = true\n this.hideEl(this.flrLab)\n } else {\n flHidden = false\n this.showEl(this.flrLab)\n }\n\n if (isMinLabAtCeil) {\n clHidden = true\n this.hideEl(this.ceilLab)\n } else {\n clHidden = false\n this.showEl(this.ceilLab)\n }\n\n if (this.range) {\n var hideCeil = this.cmbLabelShown ? isCmbLabAtCeil : isMaxLabAtCeil\n var hideFloor = this.cmbLabelShown\n ? isCmbLabAtFloor\n : isMinLabAtFloor\n\n if (hideCeil) {\n this.hideEl(this.ceilLab)\n } else if (!clHidden) {\n this.showEl(this.ceilLab)\n }\n\n // Hide or show floor label\n if (hideFloor) {\n this.hideEl(this.flrLab)\n } else if (!flHidden) {\n this.showEl(this.flrLab)\n }\n }\n },\n\n isLabelBelowFloorLab: function(label) {\n var isRTL = this.options.rightToLeft,\n pos = label.rzsp,\n dim = label.rzsd,\n floorPos = this.flrLab.rzsp,\n floorDim = this.flrLab.rzsd\n return isRTL\n ? pos + dim >= floorPos - 2\n : pos <= floorPos + floorDim + 2\n },\n\n isLabelAboveCeilLab: function(label) {\n var isRTL = this.options.rightToLeft,\n pos = label.rzsp,\n dim = label.rzsd,\n ceilPos = this.ceilLab.rzsp,\n ceilDim = this.ceilLab.rzsd\n return isRTL ? pos <= ceilPos + ceilDim + 2 : pos + dim >= ceilPos - 2\n },\n\n /**\n * Update slider selection bar, combined label and range label\n *\n * @returns {undefined}\n */\n updateSelectionBar: function() {\n var position = 0,\n dimension = 0,\n isSelectionBarFromRight = this.options.rightToLeft\n ? !this.options.showSelectionBarEnd\n : this.options.showSelectionBarEnd,\n positionForRange = this.options.rightToLeft\n ? this.maxH.rzsp + this.handleHalfDim\n : this.minH.rzsp + this.handleHalfDim\n\n if (this.range) {\n dimension = Math.abs(this.maxH.rzsp - this.minH.rzsp)\n position = positionForRange\n } else {\n if (this.options.showSelectionBarFromValue !== null) {\n var center = this.options.showSelectionBarFromValue,\n centerPosition = this.valueToPosition(center),\n isModelGreaterThanCenter = this.options.rightToLeft\n ? this.lowValue <= center\n : this.lowValue > center\n if (isModelGreaterThanCenter) {\n dimension = this.minH.rzsp - centerPosition\n position = centerPosition + this.handleHalfDim\n } else {\n dimension = centerPosition - this.minH.rzsp\n position = this.minH.rzsp + this.handleHalfDim\n }\n } else if (isSelectionBarFromRight) {\n dimension =\n Math.abs(this.maxPos - this.minH.rzsp) + this.handleHalfDim\n position = this.minH.rzsp + this.handleHalfDim\n } else {\n dimension = this.minH.rzsp + this.handleHalfDim\n position = 0\n }\n }\n this.setDimension(this.selBar, dimension)\n this.setPosition(this.selBar, position)\n if (this.range && this.options.showOuterSelectionBars) {\n if (this.options.rightToLeft) {\n this.setDimension(this.rightOutSelBar, position)\n this.setPosition(this.rightOutSelBar, 0)\n this.setDimension(\n this.leftOutSelBar,\n this.getDimension(this.fullBar) - (position + dimension)\n )\n this.setPosition(this.leftOutSelBar, position + dimension)\n } else {\n this.setDimension(this.leftOutSelBar, position)\n this.setPosition(this.leftOutSelBar, 0)\n this.setDimension(\n this.rightOutSelBar,\n this.getDimension(this.fullBar) - (position + dimension)\n )\n this.setPosition(this.rightOutSelBar, position + dimension)\n }\n }\n if (this.options.getSelectionBarColor) {\n var color = this.getSelectionBarColor()\n this.scope.barStyle = {\n backgroundColor: color\n }\n } else if (this.options.selectionBarGradient) {\n var offset =\n this.options.showSelectionBarFromValue !== null\n ? this.valueToPosition(this.options.showSelectionBarFromValue)\n : 0,\n reversed = (offset - position > 0) ^ isSelectionBarFromRight,\n direction = this.options.vertical\n ? reversed ? 'bottom' : 'top'\n : reversed ? 'left' : 'right'\n this.scope.barStyle = {\n backgroundImage:\n 'linear-gradient(to ' +\n direction +\n ', ' +\n this.options.selectionBarGradient.from +\n ' 0%,' +\n this.options.selectionBarGradient.to +\n ' 100%)'\n }\n if (this.options.vertical) {\n this.scope.barStyle.backgroundPosition =\n 'center ' +\n (offset +\n dimension +\n position +\n (reversed ? -this.handleHalfDim : 0)) +\n 'px'\n this.scope.barStyle.backgroundSize =\n '100% ' + (this.barDimension - this.handleHalfDim) + 'px'\n } else {\n this.scope.barStyle.backgroundPosition =\n offset -\n position +\n (reversed ? this.handleHalfDim : 0) +\n 'px center'\n this.scope.barStyle.backgroundSize =\n this.barDimension - this.handleHalfDim + 'px 100%'\n }\n }\n },\n\n /**\n * Wrapper around the getSelectionBarColor of the user to pass to\n * correct parameters\n */\n getSelectionBarColor: function() {\n if (this.range)\n return this.options.getSelectionBarColor(\n this.scope.rzSliderModel,\n this.scope.rzSliderHigh\n )\n return this.options.getSelectionBarColor(this.scope.rzSliderModel)\n },\n\n /**\n * Wrapper around the getPointerColor of the user to pass to\n * correct parameters\n */\n getPointerColor: function(pointerType) {\n if (pointerType === 'max') {\n return this.options.getPointerColor(\n this.scope.rzSliderHigh,\n pointerType\n )\n }\n return this.options.getPointerColor(\n this.scope.rzSliderModel,\n pointerType\n )\n },\n\n /**\n * Wrapper around the getTickColor of the user to pass to\n * correct parameters\n */\n getTickColor: function(value) {\n return this.options.getTickColor(value)\n },\n\n /**\n * Update combined label position and value\n *\n * @returns {undefined}\n */\n updateCmbLabel: function() {\n var isLabelOverlap = null\n if (this.options.rightToLeft) {\n isLabelOverlap =\n this.minLab.rzsp - this.minLab.rzsd - 10 <= this.maxLab.rzsp\n } else {\n isLabelOverlap =\n this.minLab.rzsp + this.minLab.rzsd + 10 >= this.maxLab.rzsp\n }\n\n if (isLabelOverlap) {\n var lowTr = this.getDisplayValue(this.lowValue, 'model'),\n highTr = this.getDisplayValue(this.highValue, 'high'),\n labelVal = ''\n if (this.options.mergeRangeLabelsIfSame && lowTr === highTr) {\n labelVal = lowTr\n } else {\n labelVal = this.options.rightToLeft\n ? highTr + ' - ' + lowTr\n : lowTr + ' - ' + highTr\n }\n\n this.translateFn(labelVal, this.cmbLab, 'cmb', false)\n var pos = this.options.boundPointerLabels\n ? Math.min(\n Math.max(\n this.selBar.rzsp +\n this.selBar.rzsd / 2 -\n this.cmbLab.rzsd / 2,\n 0\n ),\n this.barDimension - this.cmbLab.rzsd\n )\n : this.selBar.rzsp + this.selBar.rzsd / 2 - this.cmbLab.rzsd / 2\n\n this.setPosition(this.cmbLab, pos)\n this.cmbLabelShown = true\n this.hideEl(this.minLab)\n this.hideEl(this.maxLab)\n this.showEl(this.cmbLab)\n } else {\n this.cmbLabelShown = false\n this.updateHighHandle(this.valueToPosition(this.highValue))\n this.updateLowHandle(this.valueToPosition(this.lowValue))\n this.showEl(this.maxLab)\n this.showEl(this.minLab)\n this.hideEl(this.cmbLab)\n }\n if (this.options.autoHideLimitLabels) {\n this.shFloorCeil()\n }\n },\n\n /**\n * Return the translated value if a translate function is provided else the original value\n * @param value\n * @param which if it's min or max handle\n * @returns {*}\n */\n getDisplayValue: function(value, which) {\n if (this.options.stepsArray && !this.options.bindIndexForStepsArray) {\n value = this.getStepValue(value)\n }\n return this.customTrFn(value, this.options.id, which)\n },\n\n /**\n * Round value to step and precision based on minValue\n *\n * @param {number} value\n * @param {number} customStep a custom step to override the defined step\n * @returns {number}\n */\n roundStep: function(value, customStep) {\n var step = customStep ? customStep : this.step,\n steppedDifference = parseFloat(\n (value - this.minValue) / step\n ).toPrecision(12)\n steppedDifference = Math.round(+steppedDifference) * step\n var newValue = (this.minValue + steppedDifference).toFixed(\n this.precision\n )\n return +newValue\n },\n\n /**\n * Hide element\n *\n * @param element\n * @returns {jqLite} The jqLite wrapped DOM element\n */\n hideEl: function(element) {\n return element.css({\n visibility: 'hidden'\n })\n },\n\n /**\n * Show element\n *\n * @param element The jqLite wrapped DOM element\n * @returns {jqLite} The jqLite\n */\n showEl: function(element) {\n if (!!element.rzAlwaysHide) {\n return element\n }\n\n return element.css({\n visibility: 'visible'\n })\n },\n\n /**\n * Set element left/top position depending on whether slider is horizontal or vertical\n *\n * @param {jqLite} elem The jqLite wrapped DOM element\n * @param {number} pos\n * @returns {number}\n */\n setPosition: function(elem, pos) {\n elem.rzsp = pos\n var css = {}\n css[this.positionProperty] = Math.round(pos) + 'px'\n elem.css(css)\n return pos\n },\n\n /**\n * Get element width/height depending on whether slider is horizontal or vertical\n *\n * @param {jqLite} elem The jqLite wrapped DOM element\n * @returns {number}\n */\n getDimension: function(elem) {\n var val = elem[0].getBoundingClientRect()\n if (this.options.vertical)\n elem.rzsd = (val.bottom - val.top) * this.options.scale\n else elem.rzsd = (val.right - val.left) * this.options.scale\n return elem.rzsd\n },\n\n /**\n * Set element width/height depending on whether slider is horizontal or vertical\n *\n * @param {jqLite} elem The jqLite wrapped DOM element\n * @param {number} dim\n * @returns {number}\n */\n setDimension: function(elem, dim) {\n elem.rzsd = dim\n var css = {}\n css[this.dimensionProperty] = Math.round(dim) + 'px'\n elem.css(css)\n return dim\n },\n\n /**\n * Returns a value that is within slider range\n *\n * @param {number} val\n * @returns {number}\n */\n sanitizeValue: function(val) {\n return Math.min(Math.max(val, this.minValue), this.maxValue)\n },\n\n /**\n * Translate value to pixel position\n *\n * @param {number} val\n * @returns {number}\n */\n valueToPosition: function(val) {\n var fn = this.linearValueToPosition\n if (this.options.customValueToPosition)\n fn = this.options.customValueToPosition\n else if (this.options.logScale) fn = this.logValueToPosition\n\n val = this.sanitizeValue(val)\n var percent = fn(val, this.minValue, this.maxValue) || 0\n if (this.options.rightToLeft) percent = 1 - percent\n return percent * this.maxPos\n },\n\n linearValueToPosition: function(val, minVal, maxVal) {\n var range = maxVal - minVal\n return (val - minVal) / range\n },\n\n logValueToPosition: function(val, minVal, maxVal) {\n val = Math.log(val)\n minVal = Math.log(minVal)\n maxVal = Math.log(maxVal)\n var range = maxVal - minVal\n return (val - minVal) / range\n },\n\n /**\n * Translate position to model value\n *\n * @param {number} position\n * @returns {number}\n */\n positionToValue: function(position) {\n var percent = position / this.maxPos\n if (this.options.rightToLeft) percent = 1 - percent\n var fn = this.linearPositionToValue\n if (this.options.customPositionToValue)\n fn = this.options.customPositionToValue\n else if (this.options.logScale) fn = this.logPositionToValue\n return fn(percent, this.minValue, this.maxValue) || 0\n },\n\n linearPositionToValue: function(percent, minVal, maxVal) {\n return percent * (maxVal - minVal) + minVal\n },\n\n logPositionToValue: function(percent, minVal, maxVal) {\n minVal = Math.log(minVal)\n maxVal = Math.log(maxVal)\n var value = percent * (maxVal - minVal) + minVal\n return Math.exp(value)\n },\n\n getEventAttr: function(event, attr) {\n return event.originalEvent === undefined\n ? event[attr]\n : event.originalEvent[attr]\n },\n\n // Events\n /**\n * Get the X-coordinate or Y-coordinate of an event\n *\n * @param {Object} event The event\n * @param targetTouchId The identifier of the touch with the X/Y coordinates\n * @returns {number}\n */\n getEventXY: function(event, targetTouchId) {\n /* http://stackoverflow.com/a/12336075/282882 */\n //noinspection JSLint\n var clientXY = this.options.vertical ? 'clientY' : 'clientX'\n if (event[clientXY] !== undefined) {\n return event[clientXY]\n }\n\n var touches = this.getEventAttr(event, 'touches')\n\n if (targetTouchId !== undefined) {\n for (var i = 0; i < touches.length; i++) {\n if (touches[i].identifier === targetTouchId) {\n return touches[i][clientXY]\n }\n }\n }\n\n // If no target touch or the target touch was not found in the event\n // returns the coordinates of the first touch\n return touches[0][clientXY]\n },\n\n /**\n * Compute the event position depending on whether the slider is horizontal or vertical\n * @param event\n * @param targetTouchId If targetTouchId is provided it will be considered the position of that\n * @returns {number}\n */\n getEventPosition: function(event, targetTouchId) {\n var sliderPos = this.sliderElem.rzsp,\n eventPos = 0\n if (this.options.vertical)\n eventPos = -this.getEventXY(event, targetTouchId) + sliderPos\n else eventPos = this.getEventXY(event, targetTouchId) - sliderPos\n return eventPos * this.options.scale - this.handleHalfDim // #346 handleHalfDim is already scaled\n },\n\n /**\n * Get event names for move and event end\n *\n * @param {Event} event The event\n *\n * @return {{moveEvent: string, endEvent: string}}\n */\n getEventNames: function(event) {\n var eventNames = {\n moveEvent: '',\n endEvent: ''\n }\n\n if (this.getEventAttr(event, 'touches')) {\n eventNames.moveEvent = 'touchmove'\n eventNames.endEvent = 'touchend'\n } else {\n eventNames.moveEvent = 'mousemove'\n eventNames.endEvent = 'mouseup'\n }\n\n return eventNames\n },\n\n /**\n * Get the handle closest to an event.\n *\n * @param event {Event} The event\n * @returns {jqLite} The handle closest to the event.\n */\n getNearestHandle: function(event) {\n if (!this.range) {\n return this.minH\n }\n var position = this.getEventPosition(event),\n distanceMin = Math.abs(position - this.minH.rzsp),\n distanceMax = Math.abs(position - this.maxH.rzsp)\n if (distanceMin < distanceMax) return this.minH\n else if (distanceMin > distanceMax) return this.maxH\n else if (!this.options.rightToLeft)\n //if event is at the same distance from min/max then if it's at left of minH, we return minH else maxH\n return position < this.minH.rzsp ? this.minH : this.maxH\n else\n //reverse in rtl\n return position > this.minH.rzsp ? this.minH : this.maxH\n },\n\n /**\n * Wrapper function to focus an angular element\n *\n * @param el {AngularElement} the element to focus\n */\n focusElement: function(el) {\n var DOM_ELEMENT = 0\n el[DOM_ELEMENT].focus()\n },\n\n /**\n * Bind mouse and touch events to slider handles\n *\n * @returns {undefined}\n */\n bindEvents: function() {\n var barTracking, barStart, barMove\n\n if (this.options.draggableRange) {\n barTracking = 'rzSliderDrag'\n barStart = this.onDragStart\n barMove = this.onDragMove\n } else {\n barTracking = 'lowValue'\n barStart = this.onStart\n barMove = this.onMove\n }\n\n if (!this.options.onlyBindHandles) {\n this.selBar.on(\n 'mousedown',\n angular.bind(this, barStart, null, barTracking)\n )\n this.selBar.on(\n 'mousedown',\n angular.bind(this, barMove, this.selBar)\n )\n }\n\n if (this.options.draggableRangeOnly) {\n this.minH.on(\n 'mousedown',\n angular.bind(this, barStart, null, barTracking)\n )\n this.maxH.on(\n 'mousedown',\n angular.bind(this, barStart, null, barTracking)\n )\n } else {\n this.minH.on(\n 'mousedown',\n angular.bind(this, this.onStart, this.minH, 'lowValue')\n )\n if (this.range) {\n this.maxH.on(\n 'mousedown',\n angular.bind(this, this.onStart, this.maxH, 'highValue')\n )\n }\n if (!this.options.onlyBindHandles) {\n this.fullBar.on(\n 'mousedown',\n angular.bind(this, this.onStart, null, null)\n )\n this.fullBar.on(\n 'mousedown',\n angular.bind(this, this.onMove, this.fullBar)\n )\n this.ticks.on(\n 'mousedown',\n angular.bind(this, this.onStart, null, null)\n )\n this.ticks.on(\n 'mousedown',\n angular.bind(this, this.onTickClick, this.ticks)\n )\n }\n }\n\n if (!this.options.onlyBindHandles) {\n this.selBar.on(\n 'touchstart',\n angular.bind(this, barStart, null, barTracking)\n )\n this.selBar.on(\n 'touchstart',\n angular.bind(this, barMove, this.selBar)\n )\n }\n if (this.options.draggableRangeOnly) {\n this.minH.on(\n 'touchstart',\n angular.bind(this, barStart, null, barTracking)\n )\n this.maxH.on(\n 'touchstart',\n angular.bind(this, barStart, null, barTracking)\n )\n } else {\n this.minH.on(\n 'touchstart',\n angular.bind(this, this.onStart, this.minH, 'lowValue')\n )\n if (this.range) {\n this.maxH.on(\n 'touchstart',\n angular.bind(this, this.onStart, this.maxH, 'highValue')\n )\n }\n if (!this.options.onlyBindHandles) {\n this.fullBar.on(\n 'touchstart',\n angular.bind(this, this.onStart, null, null)\n )\n this.fullBar.on(\n 'touchstart',\n angular.bind(this, this.onMove, this.fullBar)\n )\n this.ticks.on(\n 'touchstart',\n angular.bind(this, this.onStart, null, null)\n )\n this.ticks.on(\n 'touchstart',\n angular.bind(this, this.onTickClick, this.ticks)\n )\n }\n }\n\n if (this.options.keyboardSupport) {\n this.minH.on(\n 'focus',\n angular.bind(this, this.onPointerFocus, this.minH, 'lowValue')\n )\n if (this.range) {\n this.maxH.on(\n 'focus',\n angular.bind(this, this.onPointerFocus, this.maxH, 'highValue')\n )\n }\n }\n },\n\n /**\n * Unbind mouse and touch events to slider handles\n *\n * @returns {undefined}\n */\n unbindEvents: function() {\n this.minH.off()\n this.maxH.off()\n this.fullBar.off()\n this.selBar.off()\n this.ticks.off()\n },\n\n /**\n * onStart event handler\n *\n * @param {?Object} pointer The jqLite wrapped DOM element; if null, the closest handle is used\n * @param {?string} ref The name of the handle being changed; if null, the closest handle's value is modified\n * @param {Event} event The event\n * @returns {undefined}\n */\n onStart: function(pointer, ref, event) {\n var ehMove,\n ehEnd,\n eventNames = this.getEventNames(event)\n\n event.stopPropagation()\n event.preventDefault()\n\n // We have to do this in case the HTML where the sliders are on\n // have been animated into view.\n this.calcViewDimensions()\n\n if (pointer) {\n this.tracking = ref\n } else {\n pointer = this.getNearestHandle(event)\n this.tracking = pointer === this.minH ? 'lowValue' : 'highValue'\n }\n\n pointer.addClass('rz-active')\n\n if (this.options.keyboardSupport) this.focusElement(pointer)\n\n ehMove = angular.bind(\n this,\n this.dragging.active ? this.onDragMove : this.onMove,\n pointer\n )\n ehEnd = angular.bind(this, this.onEnd, ehMove)\n\n $document.on(eventNames.moveEvent, ehMove)\n $document.on(eventNames.endEvent, ehEnd)\n this.endHandlerToBeRemovedOnEnd = ehEnd\n\n this.callOnStart()\n\n var changedTouches = this.getEventAttr(event, 'changedTouches')\n if (changedTouches) {\n // Store the touch identifier\n if (!this.touchId) {\n this.isDragging = true\n this.touchId = changedTouches[0].identifier\n }\n }\n },\n\n /**\n * onMove event handler\n *\n * @param {jqLite} pointer\n * @param {Event} event The event\n * @param {boolean} fromTick if the event occured on a tick or not\n * @returns {undefined}\n */\n onMove: function(pointer, event, fromTick) {\n var changedTouches = this.getEventAttr(event, 'changedTouches')\n var touchForThisSlider\n if (changedTouches) {\n for (var i = 0; i < changedTouches.length; i++) {\n if (changedTouches[i].identifier === this.touchId) {\n touchForThisSlider = changedTouches[i]\n break\n }\n }\n }\n\n if (changedTouches && !touchForThisSlider) {\n return\n }\n\n var newPos = this.getEventPosition(\n event,\n touchForThisSlider ? touchForThisSlider.identifier : undefined\n ),\n newValue,\n ceilValue = this.options.rightToLeft\n ? this.minValue\n : this.maxValue,\n flrValue = this.options.rightToLeft ? this.maxValue : this.minValue\n\n if (newPos <= 0) {\n newValue = flrValue\n } else if (newPos >= this.maxPos) {\n newValue = ceilValue\n } else {\n newValue = this.positionToValue(newPos)\n if (fromTick && angular.isNumber(this.options.showTicks))\n newValue = this.roundStep(newValue, this.options.showTicks)\n else newValue = this.roundStep(newValue)\n }\n this.positionTrackingHandle(newValue)\n },\n\n /**\n * onEnd event handler\n *\n * @param {Event} event The event\n * @param {Function} ehMove The bound move event handler\n * @returns {undefined}\n */\n onEnd: function(ehMove, event) {\n var changedTouches = this.getEventAttr(event, 'changedTouches')\n if (changedTouches && changedTouches[0].identifier !== this.touchId) {\n return\n }\n this.isDragging = false\n this.touchId = null\n\n if (!this.options.keyboardSupport) {\n this.minH.removeClass('rz-active')\n this.maxH.removeClass('rz-active')\n this.tracking = ''\n }\n this.dragging.active = false\n\n var eventName = this.getEventNames(event)\n $document.off(eventName.moveEvent, ehMove)\n $document.off(eventName.endEvent, this.endHandlerToBeRemovedOnEnd)\n this.endHandlerToBeRemovedOnEnd = null\n this.callOnEnd()\n },\n\n onTickClick: function(pointer, event) {\n this.onMove(pointer, event, true)\n },\n\n onPointerFocus: function(pointer, ref) {\n this.tracking = ref\n pointer.one('blur', angular.bind(this, this.onPointerBlur, pointer))\n pointer.on('keydown', angular.bind(this, this.onKeyboardEvent))\n pointer.on('keyup', angular.bind(this, this.onKeyUp))\n this.firstKeyDown = true\n pointer.addClass('rz-active')\n\n this.currentFocusElement = {\n pointer: pointer,\n ref: ref\n }\n },\n\n onKeyUp: function() {\n this.firstKeyDown = true\n this.callOnEnd()\n },\n\n onPointerBlur: function(pointer) {\n pointer.off('keydown')\n pointer.off('keyup')\n pointer.removeClass('rz-active')\n if (!this.isDragging) {\n this.tracking = ''\n this.currentFocusElement = null\n }\n },\n\n /**\n * Key actions helper function\n *\n * @param {number} currentValue value of the slider\n *\n * @returns {?Object} action value mappings\n */\n getKeyActions: function(currentValue) {\n var increaseStep = currentValue + this.step,\n decreaseStep = currentValue - this.step,\n increasePage = currentValue + this.valueRange / 10,\n decreasePage = currentValue - this.valueRange / 10\n\n if (this.options.reversedControls) {\n increaseStep = currentValue - this.step\n decreaseStep = currentValue + this.step\n increasePage = currentValue - this.valueRange / 10\n decreasePage = currentValue + this.valueRange / 10\n }\n\n //Left to right default actions\n var actions = {\n UP: increaseStep,\n DOWN: decreaseStep,\n LEFT: decreaseStep,\n RIGHT: increaseStep,\n PAGEUP: increasePage,\n PAGEDOWN: decreasePage,\n HOME: this.options.reversedControls ? this.maxValue : this.minValue,\n END: this.options.reversedControls ? this.minValue : this.maxValue\n }\n //right to left means swapping right and left arrows\n if (this.options.rightToLeft) {\n actions.LEFT = increaseStep\n actions.RIGHT = decreaseStep\n // right to left and vertical means we also swap up and down\n if (this.options.vertical) {\n actions.UP = decreaseStep\n actions.DOWN = increaseStep\n }\n }\n return actions\n },\n\n onKeyboardEvent: function(event) {\n var currentValue = this[this.tracking],\n keyCode = event.keyCode || event.which,\n keys = {\n 38: 'UP',\n 40: 'DOWN',\n 37: 'LEFT',\n 39: 'RIGHT',\n 33: 'PAGEUP',\n 34: 'PAGEDOWN',\n 36: 'HOME',\n 35: 'END'\n },\n actions = this.getKeyActions(currentValue),\n key = keys[keyCode],\n action = actions[key]\n if (action == null || this.tracking === '') return\n event.preventDefault()\n\n if (this.firstKeyDown) {\n this.firstKeyDown = false\n this.callOnStart()\n }\n\n var self = this\n $timeout(function() {\n var newValue = self.roundStep(self.sanitizeValue(action))\n if (!self.options.draggableRangeOnly) {\n self.positionTrackingHandle(newValue)\n } else {\n var difference = self.highValue - self.lowValue,\n newMinValue,\n newMaxValue\n if (self.tracking === 'lowValue') {\n newMinValue = newValue\n newMaxValue = newValue + difference\n if (newMaxValue > self.maxValue) {\n newMaxValue = self.maxValue\n newMinValue = newMaxValue - difference\n }\n } else {\n newMaxValue = newValue\n newMinValue = newValue - difference\n if (newMinValue < self.minValue) {\n newMinValue = self.minValue\n newMaxValue = newMinValue + difference\n }\n }\n self.positionTrackingBar(newMinValue, newMaxValue)\n }\n })\n },\n\n /**\n * onDragStart event handler\n *\n * Handles dragging of the middle bar.\n *\n * @param {Object} pointer The jqLite wrapped DOM element\n * @param {string} ref One of the refLow, refHigh values\n * @param {Event} event The event\n * @returns {undefined}\n */\n onDragStart: function(pointer, ref, event) {\n var position = this.getEventPosition(event)\n this.dragging = {\n active: true,\n value: this.positionToValue(position),\n difference: this.highValue - this.lowValue,\n lowLimit: this.options.rightToLeft\n ? this.minH.rzsp - position\n : position - this.minH.rzsp,\n highLimit: this.options.rightToLeft\n ? position - this.maxH.rzsp\n : this.maxH.rzsp - position\n }\n\n this.onStart(pointer, ref, event)\n },\n\n /**\n * getValue helper function\n *\n * gets max or min value depending on whether the newPos is outOfBounds above or below the bar and rightToLeft\n *\n * @param {string} type 'max' || 'min' The value we are calculating\n * @param {number} newPos The new position\n * @param {boolean} outOfBounds Is the new position above or below the max/min?\n * @param {boolean} isAbove Is the new position above the bar if out of bounds?\n *\n * @returns {number}\n */\n getValue: function(type, newPos, outOfBounds, isAbove) {\n var isRTL = this.options.rightToLeft,\n value = null\n\n if (type === 'min') {\n if (outOfBounds) {\n if (isAbove) {\n value = isRTL\n ? this.minValue\n : this.maxValue - this.dragging.difference\n } else {\n value = isRTL\n ? this.maxValue - this.dragging.difference\n : this.minValue\n }\n } else {\n value = isRTL\n ? this.positionToValue(newPos + this.dragging.lowLimit)\n : this.positionToValue(newPos - this.dragging.lowLimit)\n }\n } else {\n if (outOfBounds) {\n if (isAbove) {\n value = isRTL\n ? this.minValue + this.dragging.difference\n : this.maxValue\n } else {\n value = isRTL\n ? this.maxValue\n : this.minValue + this.dragging.difference\n }\n } else {\n if (isRTL) {\n value =\n this.positionToValue(newPos + this.dragging.lowLimit) +\n this.dragging.difference\n } else {\n value =\n this.positionToValue(newPos - this.dragging.lowLimit) +\n this.dragging.difference\n }\n }\n }\n return this.roundStep(value)\n },\n\n /**\n * onDragMove event handler\n *\n * Handles dragging of the middle bar.\n *\n * @param {jqLite} pointer\n * @param {Event} event The event\n * @returns {undefined}\n */\n onDragMove: function(pointer, event) {\n var newPos = this.getEventPosition(event),\n newMinValue,\n newMaxValue,\n ceilLimit,\n flrLimit,\n isUnderFlrLimit,\n isOverCeilLimit,\n flrH,\n ceilH\n\n if (this.options.rightToLeft) {\n ceilLimit = this.dragging.lowLimit\n flrLimit = this.dragging.highLimit\n flrH = this.maxH\n ceilH = this.minH\n } else {\n ceilLimit = this.dragging.highLimit\n flrLimit = this.dragging.lowLimit\n flrH = this.minH\n ceilH = this.maxH\n }\n isUnderFlrLimit = newPos <= flrLimit\n isOverCeilLimit = newPos >= this.maxPos - ceilLimit\n\n if (isUnderFlrLimit) {\n if (flrH.rzsp === 0) return\n newMinValue = this.getValue('min', newPos, true, false)\n newMaxValue = this.getValue('max', newPos, true, false)\n } else if (isOverCeilLimit) {\n if (ceilH.rzsp === this.maxPos) return\n newMaxValue = this.getValue('max', newPos, true, true)\n newMinValue = this.getValue('min', newPos, true, true)\n } else {\n newMinValue = this.getValue('min', newPos, false)\n newMaxValue = this.getValue('max', newPos, false)\n }\n this.positionTrackingBar(newMinValue, newMaxValue)\n },\n\n /**\n * Set the new value and position for the entire bar\n *\n * @param {number} newMinValue the new minimum value\n * @param {number} newMaxValue the new maximum value\n */\n positionTrackingBar: function(newMinValue, newMaxValue) {\n if (\n this.options.minLimit != null &&\n newMinValue < this.options.minLimit\n ) {\n newMinValue = this.options.minLimit\n newMaxValue = newMinValue + this.dragging.difference\n }\n if (\n this.options.maxLimit != null &&\n newMaxValue > this.options.maxLimit\n ) {\n newMaxValue = this.options.maxLimit\n newMinValue = newMaxValue - this.dragging.difference\n }\n\n this.lowValue = newMinValue\n this.highValue = newMaxValue\n this.applyLowValue()\n if (this.range) this.applyHighValue()\n this.applyModel(true)\n this.updateHandles('lowValue', this.valueToPosition(newMinValue))\n this.updateHandles('highValue', this.valueToPosition(newMaxValue))\n },\n\n /**\n * Set the new value and position to the current tracking handle\n *\n * @param {number} newValue new model value\n */\n positionTrackingHandle: function(newValue) {\n var valueChanged = false\n newValue = this.applyMinMaxLimit(newValue)\n if (this.range) {\n if (this.options.pushRange) {\n newValue = this.applyPushRange(newValue)\n valueChanged = true\n } else {\n if (this.options.noSwitching) {\n if (this.tracking === 'lowValue' && newValue > this.highValue)\n newValue = this.applyMinMaxRange(this.highValue)\n else if (\n this.tracking === 'highValue' &&\n newValue < this.lowValue\n )\n newValue = this.applyMinMaxRange(this.lowValue)\n }\n newValue = this.applyMinMaxRange(newValue)\n /* This is to check if we need to switch the min and max handles */\n if (this.tracking === 'lowValue' && newValue > this.highValue) {\n this.lowValue = this.highValue\n this.applyLowValue()\n this.applyModel()\n this.updateHandles(this.tracking, this.maxH.rzsp)\n this.updateAriaAttributes()\n this.tracking = 'highValue'\n this.minH.removeClass('rz-active')\n this.maxH.addClass('rz-active')\n if (this.options.keyboardSupport) this.focusElement(this.maxH)\n valueChanged = true\n } else if (\n this.tracking === 'highValue' &&\n newValue < this.lowValue\n ) {\n this.highValue = this.lowValue\n this.applyHighValue()\n this.applyModel()\n this.updateHandles(this.tracking, this.minH.rzsp)\n this.updateAriaAttributes()\n this.tracking = 'lowValue'\n this.maxH.removeClass('rz-active')\n this.minH.addClass('rz-active')\n if (this.options.keyboardSupport) this.focusElement(this.minH)\n valueChanged = true\n }\n }\n }\n\n if (this[this.tracking] !== newValue) {\n this[this.tracking] = newValue\n if (this.tracking === 'lowValue') this.applyLowValue()\n else this.applyHighValue()\n this.applyModel()\n this.updateHandles(this.tracking, this.valueToPosition(newValue))\n this.updateAriaAttributes()\n valueChanged = true\n }\n\n if (valueChanged) this.applyModel(true)\n },\n\n applyMinMaxLimit: function(newValue) {\n if (this.options.minLimit != null && newValue < this.options.minLimit)\n return this.options.minLimit\n if (this.options.maxLimit != null && newValue > this.options.maxLimit)\n return this.options.maxLimit\n return newValue\n },\n\n applyMinMaxRange: function(newValue) {\n var oppositeValue =\n this.tracking === 'lowValue' ? this.highValue : this.lowValue,\n difference = Math.abs(newValue - oppositeValue)\n if (this.options.minRange != null) {\n if (difference < this.options.minRange) {\n if (this.tracking === 'lowValue')\n return this.highValue - this.options.minRange\n else return this.lowValue + this.options.minRange\n }\n }\n if (this.options.maxRange != null) {\n if (difference > this.options.maxRange) {\n if (this.tracking === 'lowValue')\n return this.highValue - this.options.maxRange\n else return this.lowValue + this.options.maxRange\n }\n }\n return newValue\n },\n\n applyPushRange: function(newValue) {\n var difference =\n this.tracking === 'lowValue'\n ? this.highValue - newValue\n : newValue - this.lowValue,\n minRange =\n this.options.minRange !== null\n ? this.options.minRange\n : this.options.step,\n maxRange = this.options.maxRange\n // if smaller than minRange\n if (difference < minRange) {\n if (this.tracking === 'lowValue') {\n this.highValue = Math.min(newValue + minRange, this.maxValue)\n newValue = this.highValue - minRange\n this.applyHighValue()\n this.updateHandles(\n 'highValue',\n this.valueToPosition(this.highValue)\n )\n } else {\n this.lowValue = Math.max(newValue - minRange, this.minValue)\n newValue = this.lowValue + minRange\n this.applyLowValue()\n this.updateHandles(\n 'lowValue',\n this.valueToPosition(this.lowValue)\n )\n }\n this.updateAriaAttributes()\n } else if (maxRange !== null && difference > maxRange) {\n // if greater than maxRange\n if (this.tracking === 'lowValue') {\n this.highValue = newValue + maxRange\n this.applyHighValue()\n this.updateHandles(\n 'highValue',\n this.valueToPosition(this.highValue)\n )\n } else {\n this.lowValue = newValue - maxRange\n this.applyLowValue()\n this.updateHandles(\n 'lowValue',\n this.valueToPosition(this.lowValue)\n )\n }\n this.updateAriaAttributes()\n }\n return newValue\n },\n\n /**\n * Apply the model values using scope.$apply.\n * We wrap it with the internalChange flag to avoid the watchers to be called\n */\n applyModel: function(callOnChange) {\n this.internalChange = true\n this.scope.$apply()\n callOnChange && this.callOnChange()\n this.internalChange = false\n },\n\n /**\n * Call the onStart callback if defined\n * The callback call is wrapped in a $evalAsync to ensure that its result will be applied to the scope.\n *\n * @returns {undefined}\n */\n callOnStart: function() {\n if (this.options.onStart) {\n var self = this,\n pointerType = this.tracking === 'lowValue' ? 'min' : 'max'\n this.scope.$evalAsync(function() {\n self.options.onStart(\n self.options.id,\n self.scope.rzSliderModel,\n self.scope.rzSliderHigh,\n pointerType\n )\n })\n }\n },\n\n /**\n * Call the onChange callback if defined\n * The callback call is wrapped in a $evalAsync to ensure that its result will be applied to the scope.\n *\n * @returns {undefined}\n */\n callOnChange: function() {\n if (this.options.onChange) {\n var self = this,\n pointerType = this.tracking === 'lowValue' ? 'min' : 'max'\n this.scope.$evalAsync(function() {\n self.options.onChange(\n self.options.id,\n self.scope.rzSliderModel,\n self.scope.rzSliderHigh,\n pointerType\n )\n })\n }\n },\n\n /**\n * Call the onEnd callback if defined\n * The callback call is wrapped in a $evalAsync to ensure that its result will be applied to the scope.\n *\n * @returns {undefined}\n */\n callOnEnd: function() {\n if (this.options.onEnd) {\n var self = this,\n pointerType = this.tracking === 'lowValue' ? 'min' : 'max'\n this.scope.$evalAsync(function() {\n self.options.onEnd(\n self.options.id,\n self.scope.rzSliderModel,\n self.scope.rzSliderHigh,\n pointerType\n )\n })\n }\n this.scope.$emit('slideEnded')\n }\n }\n\n return Slider\n }])\n .directive('rzslider', ['RzSlider', function(RzSlider) {\n 'use strict'\n\n return {\n restrict: 'AE',\n replace: true,\n scope: {\n rzSliderModel: '=?',\n rzSliderHigh: '=?',\n rzSliderOptions: '&?',\n rzSliderTplUrl: '@'\n },\n\n /**\n * Return template URL\n *\n * @param {jqLite} elem\n * @param {Object} attrs\n * @return {string}\n */\n templateUrl: function(elem, attrs) {\n //noinspection JSUnresolvedVariable\n return attrs.rzSliderTplUrl || 'rzSliderTpl.html'\n },\n\n link: function(scope, elem) {\n scope.slider = new RzSlider(scope, elem) //attach on scope so we can test it\n }\n }\n }])\n\n // IDE assist\n\n /**\n * @name ngScope\n *\n * @property {number} rzSliderModel\n * @property {number} rzSliderHigh\n * @property {Object} rzSliderOptions\n */\n\n /**\n * @name jqLite\n *\n * @property {number|undefined} rzsp rzslider label position position\n * @property {number|undefined} rzsd rzslider element dimension\n * @property {string|undefined} rzsv rzslider label value/text\n * @property {Function} css\n * @property {Function} text\n */\n\n /**\n * @name Event\n * @property {Array} touches\n * @property {Event} originalEvent\n */\n\n /**\n * @name ThrottleOptions\n *\n * @property {boolean} leading\n * @property {boolean} trailing\n */\n\n module.run(['$templateCache', function($templateCache) {\n 'use strict';\n\n $templateCache.put('rzSliderTpl.html',\n \"
  • {{ t.value }} {{ t.legend }}
\"\n );\n\n}]);\n\n return module.name\n})\n;\n\n/***/ }),\n\n/***/ 36:\n/***/ (function(module, exports, __webpack_require__) {\n\n__webpack_require__(37);\nmodule.exports = 'vcRecaptcha';\n\n\n/***/ }),\n\n/***/ 37:\n/***/ (function(module, exports) {\n\n/**\n * @license angular-recaptcha build:2018-05-09\n * https://github.com/vividcortex/angular-recaptcha\n * Copyright (c) 2018 VividCortex\n**/\n\n/*global angular, Recaptcha */\n(function (ng) {\n 'use strict';\n\n ng.module('vcRecaptcha', []);\n\n}(angular));\n\n/*global angular */\n(function (ng) {\n 'use strict';\n\n function throwNoKeyException() {\n throw new Error('You need to set the \"key\" attribute to your public reCaptcha key. If you don\\'t have a key, please get one from https://www.google.com/recaptcha/admin/create');\n }\n\n var app = ng.module('vcRecaptcha');\n\n /**\n * An angular service to wrap the reCaptcha API\n */\n app.provider('vcRecaptchaService', function(){\n var provider = this;\n var config = {};\n provider.onLoadFunctionName = 'vcRecaptchaApiLoaded';\n\n /**\n * Sets the reCaptcha configuration values which will be used by default is not specified in a specific directive instance.\n *\n * @since 2.5.0\n * @param defaults object which overrides the current defaults object.\n */\n provider.setDefaults = function(defaults){\n ng.copy(defaults, config);\n };\n\n /**\n * Sets the reCaptcha key which will be used by default is not specified in a specific directive instance.\n *\n * @since 2.5.0\n * @param siteKey the reCaptcha public key (refer to the README file if you don't know what this is).\n */\n provider.setSiteKey = function(siteKey){\n config.key = siteKey;\n };\n\n /**\n * Sets the reCaptcha theme which will be used by default is not specified in a specific directive instance.\n *\n * @since 2.5.0\n * @param theme The reCaptcha theme.\n */\n provider.setTheme = function(theme){\n config.theme = theme;\n };\n\n /**\n * Sets the reCaptcha stoken which will be used by default is not specified in a specific directive instance.\n *\n * @since 2.5.0\n * @param stoken The reCaptcha stoken.\n */\n provider.setStoken = function(stoken){\n config.stoken = stoken;\n };\n\n /**\n * Sets the reCaptcha size which will be used by default is not specified in a specific directive instance.\n *\n * @since 2.5.0\n * @param size The reCaptcha size.\n */\n provider.setSize = function(size){\n config.size = size;\n };\n\n /**\n * Sets the reCaptcha type which will be used by default is not specified in a specific directive instance.\n *\n * @since 2.5.0\n * @param type The reCaptcha type.\n */\n provider.setType = function(type){\n config.type = type;\n };\n\n /**\n * Sets the reCaptcha language which will be used by default is not specified in a specific directive instance.\n *\n * @param lang The reCaptcha language.\n */\n provider.setLang = function(lang){\n config.lang = lang;\n };\n\n /**\n * Sets the reCaptcha badge position which will be used by default if not specified in a specific directive instance.\n *\n * @param badge The reCaptcha badge position.\n */\n provider.setBadge = function(badge){\n config.badge = badge;\n };\n\n /**\n * Sets the reCaptcha configuration values which will be used by default is not specified in a specific directive instance.\n *\n * @since 2.5.0\n * @param onLoadFunctionName string name which overrides the name of the onload function. Should match what is in the recaptcha script querystring onload value.\n */\n provider.setOnLoadFunctionName = function(onLoadFunctionName){\n provider.onLoadFunctionName = onLoadFunctionName;\n };\n\n provider.$get = ['$rootScope','$window', '$q', '$document', '$interval', function ($rootScope, $window, $q, $document, $interval) {\n var deferred = $q.defer(), promise = deferred.promise, instances = {}, recaptcha;\n\n $window.vcRecaptchaApiLoadedCallback = $window.vcRecaptchaApiLoadedCallback || [];\n\n var callback = function () {\n recaptcha = $window.grecaptcha;\n\n deferred.resolve(recaptcha);\n };\n\n $window.vcRecaptchaApiLoadedCallback.push(callback);\n\n $window[provider.onLoadFunctionName] = function () {\n $window.vcRecaptchaApiLoadedCallback.forEach(function(callback) {\n callback();\n });\n };\n\n\n function getRecaptcha() {\n if (!!recaptcha) {\n return $q.when(recaptcha);\n }\n\n return promise;\n }\n\n function validateRecaptchaInstance() {\n if (!recaptcha) {\n throw new Error('reCaptcha has not been loaded yet.');\n }\n }\n\n function isRenderFunctionAvailable() {\n return ng.isFunction(($window.grecaptcha || {}).render);\n }\n\n\n // Check if grecaptcha.render is not defined already.\n if (isRenderFunctionAvailable()) {\n callback();\n } else if ($window.document.querySelector('script[src^=\"https://www.google.com/recaptcha/api.js\"]')) {\n // wait for script to be loaded.\n var intervalWait = $interval(function() {\n if (isRenderFunctionAvailable()) {\n $interval.cancel(intervalWait);\n callback();\n }\n }, 25);\n } else {\n // Generate link on demand\n var script = $window.document.createElement('script');\n script.async = true;\n script.defer = true;\n script.src = 'https://www.google.com/recaptcha/api.js?onload='+provider.onLoadFunctionName+'&render=explicit';\n $document.find('body')[0].appendChild(script);\n }\n\n return {\n\n /**\n * Creates a new reCaptcha object\n *\n * @param elm the DOM element where to put the captcha\n * @param conf the captcha object configuration\n * @throws NoKeyException if no key is provided in the provider config or the directive instance (via attribute)\n */\n create: function (elm, conf) {\n\n conf.sitekey = conf.key || config.key;\n conf.theme = conf.theme || config.theme;\n conf.stoken = conf.stoken || config.stoken;\n conf.size = conf.size || config.size;\n conf.type = conf.type || config.type;\n conf.hl = conf.lang || config.lang;\n conf.badge = conf.badge || config.badge;\n\n if (!conf.sitekey) {\n throwNoKeyException();\n }\n return getRecaptcha().then(function (recaptcha) {\n var widgetId = recaptcha.render(elm, conf);\n instances[widgetId] = elm;\n return widgetId;\n });\n },\n\n /**\n * Reloads the reCaptcha\n */\n reload: function (widgetId) {\n validateRecaptchaInstance();\n\n recaptcha.reset(widgetId);\n\n // Let everyone know this widget has been reset.\n $rootScope.$broadcast('reCaptchaReset', widgetId);\n },\n\n /**\n * Executes the reCaptcha\n */\n execute: function (widgetId) {\n validateRecaptchaInstance();\n\n recaptcha.execute(widgetId);\n },\n\n /**\n * Get/Set reCaptcha language\n */\n useLang: function (widgetId, lang) {\n var instance = instances[widgetId];\n\n if (instance) {\n var iframe = instance.querySelector('iframe');\n if (lang) {\n // Setter\n if (iframe && iframe.src) {\n var s = iframe.src;\n if (/[?&]hl=/.test(s)) {\n s = s.replace(/([?&]hl=)\\w+/, '$1' + lang);\n } else {\n s += ((s.indexOf('?') === -1) ? '?' : '&') + 'hl=' + lang;\n }\n\n iframe.src = s;\n }\n } else {\n // Getter\n if (iframe && iframe.src && /[?&]hl=\\w+/.test(iframe.src)) {\n return iframe.src.replace(/.+[?&]hl=(\\w+)([^\\w].+)?/, '$1');\n } else {\n return null;\n }\n }\n } else {\n throw new Error('reCaptcha Widget ID not exists', widgetId);\n }\n },\n\n /**\n * Gets the response from the reCaptcha widget.\n *\n * @see https://developers.google.com/recaptcha/docs/display#js_api\n *\n * @returns {String}\n */\n getResponse: function (widgetId) {\n validateRecaptchaInstance();\n\n return recaptcha.getResponse(widgetId);\n },\n\n /**\n * Gets reCaptcha instance and configuration\n */\n getInstance: function (widgetId) {\n return instances[widgetId];\n },\n\n /**\n * Destroy reCaptcha instance.\n */\n destroy: function (widgetId) {\n delete instances[widgetId];\n }\n };\n\n }];\n });\n\n}(angular));\n\n/*global angular, Recaptcha */\n(function (ng) {\n 'use strict';\n\n var app = ng.module('vcRecaptcha');\n\n app.directive('vcRecaptcha', ['$document', '$timeout', 'vcRecaptchaService', function ($document, $timeout, vcRecaptcha) {\n\n return {\n restrict: 'A',\n require: \"?^^form\",\n scope: {\n response: '=?ngModel',\n key: '=?',\n stoken: '=?',\n theme: '=?',\n size: '=?',\n type: '=?',\n lang: '=?',\n badge: '=?',\n tabindex: '=?',\n required: '=?',\n onCreate: '&',\n onSuccess: '&',\n onExpire: '&'\n },\n link: function (scope, elm, attrs, ctrl) {\n scope.widgetId = null;\n\n if(ctrl && ng.isDefined(attrs.required)){\n scope.$watch('required', validate);\n }\n\n var removeCreationListener = scope.$watch('key', function (key) {\n var callback = function (gRecaptchaResponse) {\n // Safe $apply\n $timeout(function () {\n scope.response = gRecaptchaResponse;\n validate();\n\n // Notify about the response availability\n scope.onSuccess({response: gRecaptchaResponse, widgetId: scope.widgetId});\n });\n };\n\n vcRecaptcha.create(elm[0], {\n\n callback: callback,\n key: key,\n stoken: scope.stoken || attrs.stoken || null,\n theme: scope.theme || attrs.theme || null,\n type: scope.type || attrs.type || null,\n lang: scope.lang || attrs.lang || null,\n tabindex: scope.tabindex || attrs.tabindex || null,\n size: scope.size || attrs.size || null,\n badge: scope.badge || attrs.badge || null,\n 'expired-callback': expired\n\n }).then(function (widgetId) {\n // The widget has been created\n validate();\n scope.widgetId = widgetId;\n scope.onCreate({widgetId: widgetId});\n\n scope.$on('$destroy', destroy);\n\n scope.$on('reCaptchaReset', function(event, resetWidgetId){\n if(ng.isUndefined(resetWidgetId) || widgetId === resetWidgetId){\n scope.response = \"\";\n validate();\n }\n })\n\n });\n\n // Remove this listener to avoid creating the widget more than once.\n removeCreationListener();\n });\n\n function destroy() {\n if (ctrl) {\n // reset the validity of the form if we were removed\n ctrl.$setValidity('recaptcha', null);\n }\n\n cleanup();\n }\n\n function expired(){\n // Safe $apply\n $timeout(function () {\n scope.response = \"\";\n validate();\n\n // Notify about the response availability\n scope.onExpire({ widgetId: scope.widgetId });\n });\n }\n\n function validate(){\n if(ctrl){\n ctrl.$setValidity('recaptcha', scope.required === false ? null : Boolean(scope.response));\n }\n }\n\n function cleanup(){\n vcRecaptcha.destroy(scope.widgetId);\n\n // removes elements reCaptcha added.\n ng.element($document[0].querySelectorAll('.pls-container')).parent().remove();\n }\n }\n };\n }]);\n\n}(angular));\n\n\n/***/ }),\n\n/***/ 541:\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\nObject.defineProperty(__webpack_exports__, \"__esModule\", { value: true });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__kalkulator_kalkulator_pcss__ = __webpack_require__(287);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__kalkulator_kalkulator_pcss___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0__kalkulator_kalkulator_pcss__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__kalkulator_kalkulator_module_js__ = __webpack_require__(300);\n\n\n\n/***/ }),\n\n/***/ 542:\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__kalkulator_form_pug__ = __webpack_require__(601);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__kalkulator_form_pug___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0__kalkulator_form_pug__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__common_native_accessible_select_native_accessible_select__ = __webpack_require__(53);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__common_tooltip_tooltip__ = __webpack_require__(78);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__lib_tipus_base__ = __webpack_require__(105);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return KalkulatorFormComponent; });\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\n\n\n\n\nvar DEFAULT_AGE = 25;\nvar DEFAULT_MONTHLY_PAYMENT = 10000;\nvar DEFAULT_EXPECTED_YIELD = 4;\nvar DEFAULT_MONTHLY_ANNUITY = 10000;\nvar DEFAULT_YEARS = 10;\nvar KalkulatorFormComponent = {\n template: __WEBPACK_IMPORTED_MODULE_0__kalkulator_form_pug___default()(),\n transclude: {\n tooltipFormContent: \"tooltipFormContent\"\n },\n bindings: {\n tipus: \"<\",\n hozamok: \"<\",\n vegpontok: \"<\",\n onCalculate: \"&\",\n onTabChange: \"&\"\n },\n controller: function (_TipusBase) {\n KalkulatorFormController.$inject = [\"$scope\", \"$timeout\", \"$element\"];\n\n _inherits(KalkulatorFormController, _TipusBase);\n\n function KalkulatorFormController($scope, $timeout, $element) {\n \"ngInject\";\n\n _classCallCheck(this, KalkulatorFormController);\n\n var _this = _possibleConstructorReturn(this, _TipusBase.call(this));\n\n _this.$timeout = $timeout;\n _this.$element = $element[0];\n $scope.$watch(\"$ctrl.expectedYieldTab1\", function (val) {\n _this.expectedYieldInput = val;\n });\n $scope.$watch(\"$ctrl.model.age\", function (val) {\n _this.ageInput = val;\n _this.vegpontok && _this.isJaradek() && _this._setSliderLimits();\n });\n $scope.$watch(\"$ctrl.vegpontok\", function (val) {\n if (val) {\n _this._setSliderLimits();\n }\n });\n\n $scope.$watch(\"$ctrl.ageInput\", function (val) {\n if (val) {\n _this.model.age = _this.ageInput;\n } else {\n _this.model.age = DEFAULT_AGE;\n _this.ageInput = DEFAULT_AGE;\n }\n });\n $scope.$watch(\"$ctrl.model.years\", function (val) {\n _this.yearsInput = val;\n });\n $scope.$watch(\"$ctrl.yearsInput\", function (val) {\n if (val) {\n _this.model.years = _this.yearsInput;\n } else {\n _this.yearsInput = DEFAULT_YEARS;\n _this.model.years = DEFAULT_YEARS;\n }\n });\n $scope.$watch(\"$ctrl.expectedYieldInput\", function (val) {\n if (val) {\n _this.expectedYieldTab1 = _this.expectedYieldInput;\n } else {\n _this.expectedYieldTab1 = DEFAULT_EXPECTED_YIELD;\n _this.expectedYieldInput = DEFAULT_EXPECTED_YIELD;\n }\n });\n $scope.$watch(\"$ctrl.model.monthlyPayment\", function (val) {\n _this.monthlyPaymentInput = val;\n });\n $scope.$watch(\"$ctrl.model.monthlyAnnuity\", function (val) {\n _this.monthlyAnnuityInput = val;\n });\n $scope.$watch(\"$ctrl.activeTab\", function (val) {\n _this.kalkulatorForm.$setUntouched();\n _this.kalkulatorForm.$setPristine();\n\n _this.onTabChange();\n if (val == 1 || val == 2) {\n _this.model.customYield = false;\n setTimeout(function () {\n var selects = Array.from(_this.$element.querySelectorAll(\"select\"));\n selects.forEach(function (item) {\n setTimeout(function () {\n new __WEBPACK_IMPORTED_MODULE_1__common_native_accessible_select_native_accessible_select__[\"a\" /* default */]({ element: item });\n }, 0);\n });\n }, 0);\n } else {\n _this.model.customYield = true;\n }\n });\n return _this;\n }\n\n KalkulatorFormController.prototype.$onInit = function $onInit() {\n var _this2 = this;\n\n this.model = {\n age: DEFAULT_AGE\n };\n this.activeTab = \"0\";\n if (this.isMegtakaritas()) {\n this.model.monthlyPayment = DEFAULT_MONTHLY_PAYMENT;\n this.monthlyPaymentInput = this.model.monthlyPayment;\n }\n if (this.isJaradek()) {\n this.model.monthlyAnnuity = DEFAULT_MONTHLY_ANNUITY;\n this.model.years = DEFAULT_YEARS;\n this.yearsInput = this.model.years;\n this.monthlyAnnuityInput = this.model.monthlyAnnuity;\n }\n this.expectedYieldTab1 = DEFAULT_EXPECTED_YIELD;\n this.expectedYieldInput = this.expectedYieldTab1;\n this.ageInput = this.model.age;\n this.ageOptions = {\n floor: 16,\n ceil: 60,\n minLimit: 16,\n maxLimit: 60,\n enforceRange: true,\n showSelectionBar: true,\n autoHideLimitLabels: false\n };\n this.yearsOptions = {\n floor: 5,\n ceil: 45,\n minLimit: 5,\n maxLimit: 45,\n enforceRange: true,\n showSelectionBar: true,\n autoHideLimitLabels: false\n };\n this.monthlyPaymentOptions = {\n floor: 10000,\n ceil: 100000,\n minLimit: 10000,\n maxLimit: 100000,\n step: 1000,\n enforceRange: true,\n showSelectionBar: true,\n autoHideLimitLabels: false\n };\n this.monthlyAnnuityOptions = {\n floor: 5000,\n ceil: 400000,\n minLimit: 5000,\n maxLimit: 400000,\n step: 5000,\n enforceRange: true,\n showSelectionBar: true,\n autoHideLimitLabels: false\n };\n this.expectedYieldOptions = {\n floor: 1,\n ceil: 14,\n minLimit: 1,\n maxLimit: 14,\n enforceRange: true,\n showSelectionBar: true,\n autoHideLimitLabels: false\n };\n setTimeout(function () {\n var tooltips = Array.from(_this2.$element.querySelectorAll(\".tooltip\"));\n tooltips.forEach(function (item) {\n setTimeout(function () {\n new __WEBPACK_IMPORTED_MODULE_2__common_tooltip_tooltip__[\"a\" /* tooltipHack */]();\n }, 0);\n });\n }, 0);\n };\n\n KalkulatorFormController.prototype._setSliderLimits = function _setSliderLimits() {\n var _this3 = this;\n\n // megkeresi azt a vegpontot ahol a beallitott eletkor kisebb mint a kovetkezo sor\n if (this.isJaradek()) {\n var vegpont = this.vegpontok.find(function (item, index, array) {\n return array[index + 1] && array[index + 1].age > _this3.model.age || typeof array[index + 1] == \"undefined\";\n });\n this.yearsOptions.floor = this.yearsOptions.minLimit = vegpont.minimumAnnuityYears;\n this.monthlyAnnuityOptions.floor = this.monthlyAnnuityOptions.minLimit = vegpont.minimumAnnuityAmount;\n this.expectedYieldOptions.ceil = this.expectedYieldOptions.maxLimit = vegpont.maximumYield;\n this.monthlyPaymentOptions.floor = this.monthlyPaymentOptions.minLimit = vegpont.minimumPayment;\n }\n };\n\n KalkulatorFormController.prototype.onMonthlyPaymentBlur = function onMonthlyPaymentBlur(val) {\n var _this4 = this;\n\n if (val) {\n this.model.monthlyPayment = val;\n } else {\n this.model.monthlyPayment = DEFAULT_MONTHLY_PAYMENT;\n }\n this.$timeout(function () {\n _this4.monthlyPaymentInput = _this4.model.monthlyPayment;\n });\n };\n\n KalkulatorFormController.prototype.onMonthlyAnnuityBlur = function onMonthlyAnnuityBlur(val) {\n var _this5 = this;\n\n if (val) {\n this.model.monthlyAnnuity = val;\n } else {\n this.model.monthlyAnnuity = DEFAULT_MONTHLY_ANNUITY;\n }\n this.$timeout(function () {\n _this5.monthlyAnnuityInput = _this5.model.monthlyAnnuity;\n });\n };\n\n KalkulatorFormController.prototype.isMonthlyAnnuityMinusDisabled = function isMonthlyAnnuityMinusDisabled() {\n return this.model.monthlyAnnuity == this.monthlyAnnuityOptions.floor;\n };\n\n KalkulatorFormController.prototype.isMonthlyAnnuityPlusDisabled = function isMonthlyAnnuityPlusDisabled() {\n return this.model.monthlyAnnuity == this.monthlyAnnuityOptions.ceil;\n };\n\n KalkulatorFormController.prototype.decreaseMonthlyAnnuity = function decreaseMonthlyAnnuity() {\n this.model.monthlyAnnuity -= this.monthlyAnnuityOptions.step;\n };\n\n KalkulatorFormController.prototype.increaseMonthlyAnnuity = function increaseMonthlyAnnuity() {\n this.model.monthlyAnnuity += this.monthlyAnnuityOptions.step;\n };\n\n KalkulatorFormController.prototype.isAgeMinusDisabled = function isAgeMinusDisabled() {\n return this.model.age == this.ageOptions.floor;\n };\n\n KalkulatorFormController.prototype.isAgePlusDisabled = function isAgePlusDisabled() {\n return this.model.age == this.ageOptions.ceil;\n };\n\n KalkulatorFormController.prototype.decreaseAge = function decreaseAge() {\n this.model.age--;\n };\n\n KalkulatorFormController.prototype.increaseAge = function increaseAge() {\n this.model.age++;\n };\n\n KalkulatorFormController.prototype.isYearsMinusDisabled = function isYearsMinusDisabled() {\n return this.model.years == this.yearsOptions.floor;\n };\n\n KalkulatorFormController.prototype.isYearsPlusDisabled = function isYearsPlusDisabled() {\n return this.model.years == this.yearsOptions.ceil;\n };\n\n KalkulatorFormController.prototype.decreaseYears = function decreaseYears() {\n this.model.years--;\n };\n\n KalkulatorFormController.prototype.increaseYears = function increaseYears() {\n this.model.years++;\n };\n\n KalkulatorFormController.prototype.isExpectedYieldMinusDisabled = function isExpectedYieldMinusDisabled() {\n return this.expectedYieldTab1 == this.expectedYieldOptions.floor;\n };\n\n KalkulatorFormController.prototype.isExpectedYieldPlusDisabled = function isExpectedYieldPlusDisabled() {\n return this.expectedYieldTab1 == this.expectedYieldOptions.ceil;\n };\n\n KalkulatorFormController.prototype.decreaseExpectedYield = function decreaseExpectedYield() {\n this.expectedYieldTab1--;\n };\n\n KalkulatorFormController.prototype.increaseExpectedYield = function increaseExpectedYield() {\n this.expectedYieldTab1++;\n };\n\n KalkulatorFormController.prototype.isMonthlyPaymentMinusDisabled = function isMonthlyPaymentMinusDisabled() {\n return this.model.monthlyPayment == this.monthlyPaymentOptions.floor;\n };\n\n KalkulatorFormController.prototype.isMonthlyPaymentPlusDisabled = function isMonthlyPaymentPlusDisabled() {\n return this.model.monthlyPayment == this.monthlyPaymentOptions.ceil;\n };\n\n KalkulatorFormController.prototype.decreaseMonthlyPayment = function decreaseMonthlyPayment() {\n this.model.monthlyPayment -= this.monthlyPaymentOptions.step;\n };\n\n KalkulatorFormController.prototype.increaseMonthlyPayment = function increaseMonthlyPayment() {\n this.model.monthlyPayment += this.monthlyPaymentOptions.step;\n };\n\n KalkulatorFormController.prototype.calculate = function calculate() {\n if (this.kalkulatorForm.$valid) {\n var data = void 0;\n var expectedYield = void 0;\n switch (this.activeTab) {\n case \"0\":\n expectedYield = this.expectedYieldTab1;\n break;\n case \"1\":\n expectedYield = this.expectedYieldTab2;\n break;\n case \"2\":\n expectedYield = this.expectedYieldTab3;\n break;\n }\n data = Object.assign({}, this.model, { expectedYield: expectedYield });\n this.onCalculate({ data: data });\n }\n };\n\n return KalkulatorFormController;\n }(__WEBPACK_IMPORTED_MODULE_3__lib_tipus_base__[\"c\" /* default */])\n};\n\n/***/ }),\n\n/***/ 543:\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__kalkulator_form_component__ = __webpack_require__(542);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__common_directives_ezresbontas_ezresbontas__ = __webpack_require__(566);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_angularjs_slider__ = __webpack_require__(328);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_angularjs_slider___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2_angularjs_slider__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return KalkulatorFormModule; });\n\n\n\nvar KalkulatorFormModule = angular.module('kalkulatorForm', [__WEBPACK_IMPORTED_MODULE_1__common_directives_ezresbontas_ezresbontas__[\"a\" /* default */], __WEBPACK_IMPORTED_MODULE_2_angularjs_slider___default.a]).component('kalkulatorForm', __WEBPACK_IMPORTED_MODULE_0__kalkulator_form_component__[\"a\" /* KalkulatorFormComponent */]).name;\n\n/***/ }),\n\n/***/ 544:\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__kalkulator_result_pug__ = __webpack_require__(602);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__kalkulator_result_pug___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0__kalkulator_result_pug__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__common_tooltip_tooltip__ = __webpack_require__(78);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__lib_tipus_base__ = __webpack_require__(105);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return KalkulatorResultComponent; });\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\n\n\n\nvar KalkulatorResultComponent = {\n\ttemplate: __WEBPACK_IMPORTED_MODULE_0__kalkulator_result_pug___default()(),\n\ttransclude: {\n\t\ttooltipResultContent: 'tooltipResultContent'\n\t},\n\tbindings: {\n\t\teredmeny: '<',\n\t\ttipus: '<'\n\t},\n\tcontroller: function (_TipusBase) {\n\t\tKalkulatorResultController.$inject = ['$element'];\n\n\t\t_inherits(KalkulatorResultController, _TipusBase);\n\n\t\tfunction KalkulatorResultController($element) {\n\t\t\t'ngInject';\n\n\t\t\t_classCallCheck(this, KalkulatorResultController);\n\n\t\t\tvar _this = _possibleConstructorReturn(this, _TipusBase.call(this));\n\n\t\t\t_this.$element = $element[0];\n\t\t\treturn _this;\n\t\t}\n\n\t\tKalkulatorResultController.prototype.$onInit = function $onInit() {\n\t\t\tvar _this2 = this;\n\n\t\t\tsetTimeout(function () {\n\t\t\t\tvar tooltips = Array.from(_this2.$element.querySelectorAll('.tooltip'));\n\t\t\t\ttooltips.forEach(function (item) {\n\t\t\t\t\tsetTimeout(function () {\n\t\t\t\t\t\tnew __WEBPACK_IMPORTED_MODULE_1__common_tooltip_tooltip__[\"a\" /* tooltipHack */]();\n\t\t\t\t\t}, 0);\n\t\t\t\t});\n\t\t\t}, 0);\n\t\t};\n\n\t\tKalkulatorResultController.prototype.getPdfUrl = function getPdfUrl() {\n\t\t\tvar apiType = this.isMegtakaritas() ? 'megtakaritas' : 'jaradek';\n\t\t\tvar url = '';\n\t\t\tif (this.eredmeny) {\n\t\t\t\turl = '/api/kalkulator/' + apiType + '/pdf/' + this.eredmeny.id;\n\t\t\t}\n\t\t\treturn url;\n\t\t};\n\n\t\treturn KalkulatorResultController;\n\t}(__WEBPACK_IMPORTED_MODULE_2__lib_tipus_base__[\"c\" /* default */])\n};\n\n/***/ }),\n\n/***/ 545:\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__kalkulator_result_component__ = __webpack_require__(544);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return KalkulatorResultModule; });\n\nvar KalkulatorResultModule = angular.module('kalkulatorResult', []).component('kalkulatorResult', __WEBPACK_IMPORTED_MODULE_0__kalkulator_result_component__[\"a\" /* KalkulatorResultComponent */]).name;\n\n/***/ }),\n\n/***/ 546:\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__kalkulator_vhk_pug__ = __webpack_require__(603);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__kalkulator_vhk_pug___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0__kalkulator_vhk_pug__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__common_constants_consts__ = __webpack_require__(32);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__common_native_accessible_select_native_accessible_select__ = __webpack_require__(53);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return KalkulatorVhkComponent; });\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n\n\n\nvar KalkulatorVhkComponent = {\n\ttemplate: __WEBPACK_IMPORTED_MODULE_0__kalkulator_vhk_pug___default()(),\n\tbindings: {\n\t\tid: '@',\n\t\tvisszahivasIdok: '<',\n\t\tsuccess: '<',\n\t\tonPostForm: '&'\n\t},\n\tcontroller: function () {\n\t\tKalkulatorVhkController.$inject = ['$element', 'vcRecaptchaService'];\n\n\t\tfunction KalkulatorVhkController($element, vcRecaptchaService) {\n\t\t\t'ngInject';\n\n\t\t\t_classCallCheck(this, KalkulatorVhkController);\n\n\t\t\tthis.$element = $element[0];\n\t\t\tthis.vcRecaptchaService = vcRecaptchaService;\n\t\t}\n\n\t\tKalkulatorVhkController.prototype.$onInit = function $onInit() {\n\t\t\tvar _this = this;\n\n\t\t\tthis.model = {};\n\t\t\tthis.patterns = {\n\t\t\t\temail: __WEBPACK_IMPORTED_MODULE_1__common_constants_consts__[\"a\" /* EMAIL_PATTERN */],\n\t\t\t\tphone: __WEBPACK_IMPORTED_MODULE_1__common_constants_consts__[\"b\" /* PHONE_PATTERN */],\n\t\t\t\tsimpleText: __WEBPACK_IMPORTED_MODULE_1__common_constants_consts__[\"c\" /* SIMPLE_TEXT_PATTERN */],\n\t\t\t\tnumber: __WEBPACK_IMPORTED_MODULE_1__common_constants_consts__[\"d\" /* NUMBER_PATTERN */],\n\t\t\t\tmembership: __WEBPACK_IMPORTED_MODULE_1__common_constants_consts__[\"f\" /* MEMBERSHIP_PATTERN */]\n\t\t\t};\n\t\t\tsetTimeout(function () {\n\t\t\t\tvar selects = Array.from(_this.$element.querySelectorAll('select'));\n\t\t\t\tselects.forEach(function (item) {\n\t\t\t\t\tsetTimeout(function () {\n\t\t\t\t\t\tnew __WEBPACK_IMPORTED_MODULE_2__common_native_accessible_select_native_accessible_select__[\"a\" /* default */]({ element: item });\n\t\t\t\t\t}, 0);\n\t\t\t\t});\n\t\t\t}, 0);\n\t\t};\n\n\t\tKalkulatorVhkController.prototype.postContactForm = function postContactForm() {\n\t\t\tif (this.visszahivasKeresForm.$valid) {\n\t\t\t\tthis.onPostForm({\n\t\t\t\t\tdata: this.model\n\t\t\t\t});\n\t\t\t}\n\t\t};\n\n\t\treturn KalkulatorVhkController;\n\t}()\n};\n\n/***/ }),\n\n/***/ 547:\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__kalkulator_vhk_component__ = __webpack_require__(546);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_angular_recaptcha__ = __webpack_require__(36);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_angular_recaptcha___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_angular_recaptcha__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return KalkulatorVhkModule; });\n\n\nvar KalkulatorVhkModule = angular.module('kalkulatorVhk', [__WEBPACK_IMPORTED_MODULE_1_angular_recaptcha___default.a]).component('kalkulatorVhk', __WEBPACK_IMPORTED_MODULE_0__kalkulator_vhk_component__[\"a\" /* KalkulatorVhkComponent */]).name;\n\n/***/ }),\n\n/***/ 548:\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__kalkulator_pug__ = __webpack_require__(604);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__kalkulator_pug___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0__kalkulator_pug__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__lib_tipus_base__ = __webpack_require__(105);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return KalkulatorComponent; });\nvar _KALKULACIO_METODUSOK;\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n\n\nvar KALKULACIO_METODUSOK = (_KALKULACIO_METODUSOK = {}, _KALKULACIO_METODUSOK[__WEBPACK_IMPORTED_MODULE_1__lib_tipus_base__[\"a\" /* MEGTAKARITAS_TIPUS */]] = 'megtakaritasKalkulacio', _KALKULACIO_METODUSOK[__WEBPACK_IMPORTED_MODULE_1__lib_tipus_base__[\"b\" /* JARADEK_TIPUS */]] = 'jaradekKalkulacio', _KALKULACIO_METODUSOK);\nvar KalkulatorComponent = {\n\ttemplate: __WEBPACK_IMPORTED_MODULE_0__kalkulator_pug___default()(),\n\ttransclude: {\n\t\ttooltipFormContent: 'tooltipFormContent',\n\t\ttooltipResultContent: 'tooltipResultContent'\n\t},\n\tbindings: {\n\t\ttipus: '@'\n\t},\n\tcontroller: function () {\n\t\tKalkulatorController.$inject = ['KalkulatorService', '$timeout', '$rootScope'];\n\n\t\tfunction KalkulatorController(KalkulatorService, $timeout, $rootScope) {\n\t\t\t'ngInject';\n\n\t\t\t_classCallCheck(this, KalkulatorController);\n\n\t\t\tthis.kalkulatorService = KalkulatorService;\n\t\t\tthis.$timeout = $timeout;\n\t\t\tthis.$rootScope = $rootScope;\n\t\t}\n\n\t\tKalkulatorController.prototype.$onInit = function $onInit() {\n\t\t\tthis.init();\n\t\t};\n\n\t\tKalkulatorController.prototype.init = function init() {\n\t\t\tvar _this = this;\n\n\t\t\tthis.kalkulatorService.init().then(function (response) {\n\t\t\t\t_this.hozamok = response.hozamok;\n\t\t\t\t_this.visszahivasIdok = response.visszahivasIdok;\n\t\t\t\t_this.vegpontok = response.vegpontok;\n\t\t\t}).catch(function (err) {\n\t\t\t\t_this.$rootScope.$broadcast('serverError');\n\t\t\t});\n\t\t};\n\n\t\tKalkulatorController.prototype.resetResults = function resetResults() {\n\t\t\tthis.eredmeny = null;\n\t\t};\n\n\t\tKalkulatorController.prototype.calculate = function calculate(data) {\n\t\t\tvar _this2 = this;\n\n\t\t\tvar kalkulacioMetodus = KALKULACIO_METODUSOK[this.tipus];\n\t\t\tthis.kalkulatorService[kalkulacioMetodus](data).then(function (response) {\n\t\t\t\t_this2.eredmeny = response;\n\t\t\t\t_this2.$timeout(function () {\n\t\t\t\t\tdocument.getElementById('kalkulator-result').scrollIntoView();\n\t\t\t\t});\n\t\t\t}).catch(function (err) {\n\t\t\t\t_this2.$rootScope.$broadcast('serverError');\n\t\t\t});\n\t\t};\n\n\t\tKalkulatorController.prototype.sendVhk = function sendVhk(data) {\n\t\t\tvar _this3 = this;\n\n\t\t\tvar dataToSend = Object.assign({}, data, { calculationId: this.eredmeny.id });\n\t\t\tthis.kalkulatorService.sendVhk(dataToSend).then(function (response) {\n\t\t\t\t_this3.vhkSuccess = true;\n\t\t\t}).catch(function (err) {\n\t\t\t\t_this3.$rootScope.$broadcast('serverError');\n\t\t\t});\n\t\t};\n\n\t\treturn KalkulatorController;\n\t}()\n};\n\n/***/ }),\n\n/***/ 549:\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return KalkulatorService; });\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar KalkulatorService = function () {\n\tKalkulatorService.$inject = ['$http'];\n\n\tfunction KalkulatorService($http) {\n\t\t'ngInject';\n\n\t\t_classCallCheck(this, KalkulatorService);\n\n\t\tthis.$http = $http;\n\t}\n\n\tKalkulatorService.prototype.init = function init() {\n\t\treturn this.$http.get('/api/kalkulator/init').then(function (response) {\n\t\t\treturn response.data;\n\t\t});\n\t};\n\n\tKalkulatorService.prototype.megtakaritasKalkulacio = function megtakaritasKalkulacio(data) {\n\t\treturn this.$http.post('/api/kalkulator/megtakaritas', data).then(function (response) {\n\t\t\treturn response.data;\n\t\t});\n\t};\n\n\tKalkulatorService.prototype.jaradekKalkulacio = function jaradekKalkulacio(data) {\n\t\treturn this.$http.post('/api/kalkulator/jaradek', data).then(function (response) {\n\t\t\treturn response.data;\n\t\t});\n\t};\n\n\tKalkulatorService.prototype.sendVhk = function sendVhk(data) {\n\t\tvar captchaValue = data.captchaValue;\n\t\tdelete data.captchaValue;\n\t\treturn this.$http.post('/api/visszahivas/kalkulator', data, {\n\t\t\theaders: {\n\t\t\t\t'captcha': captchaValue\n\t\t\t}\n\t\t}).then(function (response) {\n\t\t\treturn response.data;\n\t\t});\n\t};\n\n\treturn KalkulatorService;\n}();\n\n/***/ }),\n\n/***/ 566:\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\nvar MODULE_NAME = 'ezresBontas';\n/* harmony default export */ __webpack_exports__[\"a\"] = (angular.module(MODULE_NAME, []).directive('ezresBontas', ['$filter', function ($filter) {\n\t'ngInject';\n\n\treturn {\n\t\trestrict: 'A',\n\t\trequire: 'ngModel',\n\t\tlink: function link(scope, element, attrs, ngModel) {\n\t\t\tvar tortSzam = attrs.ezresBontas;\n\t\t\tif (ngModel) {\n\t\t\t\tngModel.$formatters.unshift(function () {\n\t\t\t\t\t//convert data from model format to view format\n\t\t\t\t\treturn $filter('number')(ngModel.$modelValue);\n\t\t\t\t});\n\t\t\t\tngModel.$parsers.unshift(function (viewValue) {\n\t\t\t\t\t//convert data from view format to model format\n\t\t\t\t\tvar convertableNumber = void 0;\n\t\t\t\t\tvar viewNumber = void 0;\n\t\t\t\t\tviewNumber = tortSzam ? viewValue.replace(/[^0-9|,]/g, '') : viewValue.replace(/[^0-9]/g, '');\n\t\t\t\t\tconvertableNumber = viewValue;\n\t\t\t\t\tif ((viewNumber.match(/,/g) || []).length == 2) {\n\t\t\t\t\t\tviewNumber = viewNumber.slice(0, -1);\n\t\t\t\t\t\tconvertableNumber = convertableNumber.slice(0, -1);\n\t\t\t\t\t}\n\t\t\t\t\tif (viewNumber.slice(-1) == ',') {\n\t\t\t\t\t\tconvertableNumber = viewValue + '0';\n\t\t\t\t\t}\n\t\t\t\t\tconvertableNumber = tortSzam ? convertableNumber.replace(/[^0-9|,]/g, '').replace(/,/g, '.').replace(/\\s/g, '') : convertableNumber.replace(/[^0-9]/g, '').replace(/\\s/g, '');\n\t\t\t\t\tvar a = $filter('number')(convertableNumber);\n\t\t\t\t\tvar b = viewNumber.slice(-1) == ',' ? ',' : '';\n\t\t\t\t\tngModel.$setViewValue('' + a + b);\n\t\t\t\t\tngModel.$render();\n\t\t\t\t\treturn convertableNumber;\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t};\n}]).name);\n\n/***/ }),\n\n/***/ 601:\n/***/ (function(module, exports, __webpack_require__) {\n\nvar pug = __webpack_require__(2);\n\nfunction template(locals) {var pug_html = \"\", pug_mixins = {}, pug_interp;pug_html = pug_html + \"\\u003Cform class=\\\"kalkulator-form\\\" name=\\\"$ctrl.kalkulatorForm\\\" novalidate\\u003E\\u003Cdiv class=\\\"row form__row slider-row\\\"\\u003E\\u003Cdiv class=\\\"col-sm-5 form-input__group form-input__group--right\\\"\\u003E\\u003Clabel class=\\\"label\\\" for=\\\"kalkulator-form__age\\\"\\u003EÉletkor:\\u003C\\u002Flabel\\u003E\\u003Cinput class=\\\"form-input form-input--input-xsmall\\\" id=\\\"kalkulator-form__age\\\" type=\\\"number\\\" ng-model=\\\"$ctrl.ageInput\\\" ng-model-options=\\\"{ updateOn: 'blur'}\\\"\\u003E\\u003Cspan\\u003E\\u003Cstrong\\u003EÉv\\u003C\\u002Fstrong\\u003E\\u003C\\u002Fspan\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"col-sm-5 form-input__group\\\"\\u003E\\u003Clabel class=\\\"sr-only\\\" for=\\\"kalkulator-form__age-range\\\"\\u003EÉletkor csúszka:\\u003C\\u002Flabel\\u003E\\u003Cbutton class=\\\"button__slider-steps negative\\\" type=\\\"button\\\" ng-click=\\\"$ctrl.decreaseAge()\\\" ng-disabled=\\\"$ctrl.isAgeMinusDisabled()\\\"\\u003E\\u003Cspan class=\\\"sr-only\\\"\\u003EÉrték csökkentése\\u003C\\u002Fspan\\u003E\\u003C\\u002Fbutton\\u003E\\u003Crzslider id=\\\"kalkulator-form__age-range\\\" rz-slider-model=\\\"$ctrl.model.age\\\" rz-slider-options=\\\"$ctrl.ageOptions\\\"\\u003E\\u003C\\u002Frzslider\\u003E\\u003Cbutton class=\\\"button__slider-steps positive\\\" type=\\\"button\\\" ng-click=\\\"$ctrl.increaseAge()\\\" ng-disabled=\\\"$ctrl.isAgePlusDisabled()\\\"\\u003E\\u003Cspan class=\\\"sr-only\\\"\\u003EÉrték növelése\\u003C\\u002Fspan\\u003E\\u003C\\u002Fbutton\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"row form__row slider-row\\\" ng-if=\\\"$ctrl.isJaradek()\\\"\\u003E\\u003Cdiv class=\\\"col-sm-5 form-input__group form-input__group--right\\\"\\u003E\\u003Clabel class=\\\"label\\\" for=\\\"kalkulator-form__allowance-amount\\\" aria-describedby=\\\"tooltip__allowance-amount\\\"\\u003EHavi járadék összege:\\u003C\\u002Flabel\\u003E\\u003Cdiv class=\\\"tooltip\\\" id=\\\"tooltip__allowance-amount\\\" role=\\\"tooltip\\\" tabindex=\\\"0\\\" tooltip=\\\"\\\"\\u003E\\u003Cimg class=\\\"tooltip-icon\\\" src=\\\"\\u002Fstatic\\u002Fassets\\u002Fimg\\u002Finfo.svg\\\" alt=\\\"\\\"\\u003E\\u003Cdiv class=\\\"tooltip-content\\\"\\u003E\\u003Cp\\u003EAdja meg, az igényelt havi nyugdíj-kiegészítés, járadék összegét!\\u003C\\u002Fp\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cinput class=\\\"form-input form-input--input-xsmall\\\" id=\\\"kalkulator-form__allowance-amount\\\" type=\\\"tel\\\" maxlength=\\\"7\\\" min=\\\"5000\\\" max=\\\"100000\\\" value=\\\"10000\\\" ng-model=\\\"$ctrl.monthlyAnnuityInput\\\" ng-blur=\\\"$ctrl.onMonthlyAnnuityBlur($ctrl.monthlyAnnuityInput)\\\" ezres-bontas=\\\"\\\"\\u003E\\u003Cspan\\u003E\\u003Cstrong\\u003EFt\\u003C\\u002Fstrong\\u003E\\u003C\\u002Fspan\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"col-sm-5 form-input__group\\\"\\u003E\\u003Clabel class=\\\"sr-only\\\" for=\\\"kalkulator-form__allowance-amount-range\\\"\\u003EHavi járadék összege csúszka:\\u003C\\u002Flabel\\u003E\\u003Cbutton class=\\\"button__slider-steps negative\\\" type=\\\"button\\\" ng-click=\\\"$ctrl.decreaseMonthlyAnnuity()\\\" ng-disabled=\\\"$ctrl.isMonthlyAnnuityMinusDisabled()\\\"\\u003E\\u003Cspan class=\\\"sr-only\\\"\\u003EÉrték csökkentése\\u003C\\u002Fspan\\u003E\\u003C\\u002Fbutton\\u003E\\u003Crzslider id=\\\"kalkulator-form__allowance-amount-range\\\" rz-slider-model=\\\"$ctrl.model.monthlyAnnuity\\\" rz-slider-options=\\\"$ctrl.monthlyAnnuityOptions\\\"\\u003E\\u003C\\u002Frzslider\\u003E\\u003Cbutton class=\\\"button__slider-steps positive\\\" type=\\\"button\\\" ng-click=\\\"$ctrl.increaseMonthlyAnnuity()\\\" ng-disabled=\\\"$ctrl.isMonthlyAnnuityPlusDisabled()\\\"\\u003E\\u003Cspan class=\\\"sr-only\\\"\\u003EÉrték növelése\\u003C\\u002Fspan\\u003E\\u003C\\u002Fbutton\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"row form__row slider-row\\\" ng-if=\\\"$ctrl.isJaradek()\\\"\\u003E\\u003Cdiv class=\\\"col-sm-5 form-input__group form-input__group--right\\\"\\u003E\\u003Clabel class=\\\"label\\\" for=\\\"kalkulator-form__annuity\\\" aria-describedby=\\\"tooltip__annuity\\\"\\u003EJáradék év:\\u003C\\u002Flabel\\u003E\\u003Cdiv class=\\\"tooltip\\\" id=\\\"tooltip__annuity\\\" role=\\\"tooltip\\\" tabindex=\\\"0\\\" tooltip=\\\"\\\"\\u003E\\u003Cimg class=\\\"tooltip-icon\\\" src=\\\"\\u002Fstatic\\u002Fassets\\u002Fimg\\u002Finfo.svg\\\" alt=\\\"\\\"\\u003E\\u003Cdiv class=\\\"tooltip-content\\\"\\u003E\\u003Cp\\u003EAdja meg, hány évig szeretne nyugdíj-kiegészítést kapni!\\u003C\\u002Fp\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cinput class=\\\"form-input form-input--input-xsmall\\\" id=\\\"kalkulator-form__annuity\\\" type=\\\"number\\\" ng-model=\\\"$ctrl.yearsInput\\\" ng-model-options=\\\"{ updateOn: 'blur'}\\\"\\u003E\\u003Cspan\\u003E\\u003Cstrong\\u003EÉv\\u003C\\u002Fstrong\\u003E\\u003C\\u002Fspan\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"col-sm-5 form-input__group\\\"\\u003E\\u003Clabel class=\\\"sr-only\\\" for=\\\"kalkulator-form__annuity-range\\\"\\u003EJáradék év csúszka:\\u003C\\u002Flabel\\u003E\\u003Cbutton class=\\\"button__slider-steps negative\\\" type=\\\"button\\\" ng-click=\\\"$ctrl.decreaseYears()\\\" ng-disabled=\\\"$ctrl.isYearsMinusDisabled()\\\"\\u003E\\u003Cspan class=\\\"sr-only\\\"\\u003EÉrték csökkentése\\u003C\\u002Fspan\\u003E\\u003C\\u002Fbutton\\u003E\\u003Crzslider id=\\\"kalkulator-form__annuity-range\\\" rz-slider-model=\\\"$ctrl.model.years\\\" rz-slider-options=\\\"$ctrl.yearsOptions\\\"\\u003E\\u003C\\u002Frzslider\\u003E\\u003Cbutton class=\\\"button__slider-steps positive\\\" type=\\\"button\\\" ng-click=\\\"$ctrl.increaseYears()\\\" ng-disabled=\\\"$ctrl.isYearsPlusDisabled()\\\"\\u003E\\u003Cspan class=\\\"sr-only\\\"\\u003EÉrték növelése\\u003C\\u002Fspan\\u003E\\u003C\\u002Fbutton\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"row form__row slider-row\\\" ng-if=\\\"$ctrl.isMegtakaritas()\\\"\\u003E\\u003Cdiv class=\\\"col-sm-5 form-input__group form-input__group--right\\\"\\u003E\\u003Clabel class=\\\"label\\\" for=\\\"kalkulator-form__deposit\\\" aria-describedby=\\\"tooltip__deposit\\\"\\u003EHavi befizetés:\\u003C\\u002Flabel\\u003E\\u003Cdiv class=\\\"tooltip\\\" id=\\\"tooltip__deposit\\\" role=\\\"tooltip\\\" tabindex=\\\"0\\\" tooltip=\\\"\\\"\\u003E\\u003Cimg class=\\\"tooltip-icon\\\" src=\\\"\\u002Fstatic\\u002Fassets\\u002Fimg\\u002Finfo.svg\\\" alt=\\\"\\\"\\u003E\\u003Cdiv class=\\\"tooltip-content\\\"\\u003E\\u003Cp\\u003EEgységes, minimális havi tagdíj 10.000 Ft\\u003C\\u002Fp\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cinput class=\\\"form-input form-input--input-xsmall\\\" id=\\\"kalkulator-form__deposit\\\" type=\\\"tel\\\" maxlength=\\\"7\\\" min=\\\"5000\\\" max=\\\"100000\\\" value=\\\"10000\\\" ng-model=\\\"$ctrl.monthlyPaymentInput\\\" ng-blur=\\\"$ctrl.onMonthlyPaymentBlur($ctrl.monthlyPaymentInput)\\\" ezres-bontas=\\\"\\\"\\u003E\\u003Cspan\\u003E\\u003Cstrong\\u003EFt\\u003C\\u002Fstrong\\u003E\\u003C\\u002Fspan\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"col-sm-5 form-input__group\\\"\\u003E\\u003Clabel class=\\\"sr-only\\\" for=\\\"kalkulator-form__deposit-range\\\"\\u003EHavi befizetés csúszka:\\u003C\\u002Flabel\\u003E\\u003Cbutton class=\\\"button__slider-steps negative\\\" type=\\\"button\\\" ng-click=\\\"$ctrl.decreaseMonthlyPayment()\\\" ng-disabled=\\\"$ctrl.isMonthlyPaymentMinusDisabled()\\\"\\u003E\\u003Cspan class=\\\"sr-only\\\"\\u003EÉrték csökkentése\\u003C\\u002Fspan\\u003E\\u003C\\u002Fbutton\\u003E\\u003Crzslider id=\\\"kalkulator-form__deposit-range\\\" rz-slider-model=\\\"$ctrl.model.monthlyPayment\\\" rz-slider-options=\\\"$ctrl.monthlyPaymentOptions\\\"\\u003E\\u003C\\u002Frzslider\\u003E\\u003Cbutton class=\\\"button__slider-steps positive\\\" type=\\\"button\\\" ng-click=\\\"$ctrl.increaseMonthlyPayment()\\\" ng-disabled=\\\"$ctrl.isMonthlyPaymentPlusDisabled()\\\"\\u003E\\u003Cspan class=\\\"sr-only\\\"\\u003EÉrték növelése\\u003C\\u002Fspan\\u003E\\u003C\\u002Fbutton\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cfieldset class=\\\"kalkulator-form__choose-box\\\"\\u003E\\u003Clegend class=\\\"kalkulator-form__choose-title\\\" aria-describedby=\\\"tooltip__choose-title\\\"\\u003EHozamelvárás\\u003Cspan class=\\\"tooltip\\\" id=\\\"tooltip__choose-title\\\" role=\\\"tooltip\\\" tabindex=\\\"0\\\" tooltip=\\\"\\\"\\u003E\\u003Cimg class=\\\"tooltip-icon\\\" src=\\\"\\u002Fstatic\\u002Fassets\\u002Fimg\\u002Finfo.svg\\\" alt=\\\"\\\"\\u003E\\u003Cspan class=\\\"tooltip-content\\\"\\u003EAdja meg, a kalkulátor hány százalék nettó hozammal számoljon!\\u003C\\u002Fspan\\u003E\\u003C\\u002Fspan\\u003E\\u003C\\u002Flegend\\u003E\\u003Cdiv class=\\\"kalkulator-form__choose-container\\\"\\u003E\\u003Cdiv class=\\\"kalkulator-form__choose-radio\\\" ng-class=\\\"{'active': $ctrl.activeTab=='0'}\\\"\\u003E\\u003Cinput id=\\\"kalkulator-form__radio1\\\" type=\\\"radio\\\" name=\\\"kalkulator-tab\\\" ng-model=\\\"$ctrl.activeTab\\\" value=\\\"0\\\"\\u003E\\u003Clabel class=\\\"radio\\\" for=\\\"kalkulator-form__radio1\\\"\\u003EEgyénileg határozom meg\\u003C\\u002Flabel\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"kalkulator-form__choose-radio\\\" ng-class=\\\"{'active': $ctrl.activeTab=='1'}\\\"\\u003E\\u003Cinput id=\\\"kalkulator-form__radio2\\\" type=\\\"radio\\\" name=\\\"kalkulator-tab\\\" ng-model=\\\"$ctrl.activeTab\\\" value=\\\"1\\\"\\u003E\\u003Clabel class=\\\"radio\\\" for=\\\"kalkulator-form__radio2\\\"\\u003EKockázatvállalásom és a múltbeli hozamok alapján\\u003Cbr\\u003E határozom meg\\u003C\\u002Flabel\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"kalkulator-form__choose-radio last-tab\\\" ng-class=\\\"{'active': $ctrl.activeTab=='2'}\\\"\\u003E\\u003Cinput id=\\\"kalkulator-form__radio3\\\" type=\\\"radio\\\" name=\\\"kalkulator-tab\\\" ng-model=\\\"$ctrl.activeTab\\\" value=\\\"2\\\"\\u003E\\u003Clabel class=\\\"radio\\\" for=\\\"kalkulator-form__radio3\\\"\\u003EKockázatvállalásom és a hozamprognózis alapján\\u003Cbr\\u003E határozom meg\\u003C\\u002Flabel\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"kalkulator-form__choose-panel\\\" ng-if=\\\"$ctrl.activeTab==0\\\"\\u003E\\u003Ch3\\u003EHatározza meg az éves nettó hozamot!\\u003C\\u002Fh3\\u003E\\u003Cdiv class=\\\"row form__row slider-row\\\"\\u003E\\u003Cdiv class=\\\"col-sm-5 form-input__group form-input__group--right\\\"\\u003E\\u003Clabel class=\\\"sr-only\\\" for=\\\"kalkulator-form__annual-net-yield\\\"\\u003EÉves nettó hozam\\u003C\\u002Flabel\\u003E\\u003Cinput class=\\\"form-input form-input--input-xsmall\\\" id=\\\"kalkulator-form__annual-net-yield\\\" type=\\\"number\\\" ng-model=\\\"$ctrl.expectedYieldInput\\\" ng-model-options=\\\"{ updateOn: 'blur'}\\\"\\u003E\\u003Cspan\\u003E%\\u003C\\u002Fspan\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"col-sm-5 form-input__group\\\"\\u003E\\u003Cbutton class=\\\"button__slider-steps negative\\\" type=\\\"button\\\" ng-click=\\\"$ctrl.decreaseExpectedYield()\\\" ng-disabled=\\\"$ctrl.isExpectedYieldMinusDisabled()\\\"\\u003E\\u003Cspan class=\\\"sr-only\\\"\\u003EÉrték csökkentése\\u003C\\u002Fspan\\u003E\\u003C\\u002Fbutton\\u003E\\u003Clabel class=\\\"sr-only\\\" for=\\\"kalkulator-form__deposit-range\\\"\\u003EHavi befizetés csúszka:\\u003C\\u002Flabel\\u003E\\u003Crzslider id=\\\"kalkulator-form__deposit-range\\\" rz-slider-model=\\\"$ctrl.expectedYieldTab1\\\" rz-slider-options=\\\"$ctrl.expectedYieldOptions\\\"\\u003E\\u003C\\u002Frzslider\\u003E\\u003Cbutton class=\\\"button__slider-steps positive\\\" type=\\\"button\\\" ng-click=\\\"$ctrl.increaseExpectedYield()\\\" ng-disabled=\\\"$ctrl.isExpectedYieldPlusDisabled()\\\"\\u003E\\u003Cspan class=\\\"sr-only\\\"\\u003EÉrték növelése\\u003C\\u002Fspan\\u003E\\u003C\\u002Fbutton\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"kalkulator-form__choose-panel\\\" ng-if=\\\"$ctrl.activeTab==1\\\"\\u003E\\u003Ch3\\u003EVálasszon egyet portfólióink közül!\\u003C\\u002Fh3\\u003E\\u003Cdiv class=\\\"row form__row\\\"\\u003E\\u003Cdiv class=\\\"col-sm-5 form-input__group form-input__group--right\\\"\\u003E\\u003Clabel class=\\\"label\\\" for=\\\"kalkulator-form__portfolio-select\\\" aria-describedby=\\\"tolltip__portfolio-select\\\"\\u003EVálasztható portfólióink:\\u003C\\u002Flabel\\u003E\\u003Cdiv class=\\\"tooltip\\\" id=\\\"tolltip__portfolio-select\\\" role=\\\"tooltip\\\" tabindex=\\\"0\\\" tooltip=\\\"\\\"\\u003E\\u003Cimg class=\\\"tooltip-icon\\\" src=\\\"\\u002Fstatic\\u002Fassets\\u002Fimg\\u002Finfo.svg\\\" alt=\\\"\\\"\\u003E\\u003Cdiv class=\\\"tooltip-content\\\"\\u003E\\u003Cp\\u003EPortfóliók közül kockázatvállalási hajlandósága és élethelyzete figyelembe vételével választhat.\\u003C\\u002Fp\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"col-sm-3 form-input__group\\\"\\u003E\\u003Cselect class=\\\"select app-kapcsolat__select\\\" id=\\\"kalkulator-form__portfolio-select\\\" name=\\\"hozam\\\" ng-options=\\\"obj.averageYield as obj.portfolio for obj in $ctrl.hozamok\\\" ng-model=\\\"$ctrl.expectedYieldTab2\\\" required aria-describedby=\\\"kapcsolatSubjectError\\\"\\u003E\\u003Coption value=\\\"\\\" role=\\\"option\\\"\\u003EKérjük válasszon!\\u003C\\u002Foption\\u003E\\u003C\\u002Fselect\\u003E\\u003Cinput-error id=\\\"portfolioError\\\" form=\\\"$ctrl.kalkulatorForm\\\" input-name=\\\"hozam\\\" message-required=\\\"Válasszon portfóliót!\\\"\\u003E\\u003C\\u002Finput-error\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"col-sm-4 form-input__group\\\"\\u003E\\u003Ca class=\\\"button\\\" href=\\\"https:\\u002F\\u002Fwww.otpnyugdij.hu\\u002Fhu\\u002Fkerdoiv-kockazatvallalas-felmeresere\\\" target=\\\"_blank\\\"\\u003EKitöltöm a kérdőívet\\u003C\\u002Fa\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"row form__row\\\" ng-if=\\\"$ctrl.expectedYieldTab2\\\"\\u003E\\u003Cdiv class=\\\"col-sm-5 form-input__group form-input__group--right\\\"\\u003E\\u003Clabel class=\\\"label\\\" for=\\\"kalkulator-form__portfolio-average\\\" aria-describedby=\\\"tooltip__portfolio-average\\\"\\u003EVárható hozamok:\\u003C\\u002Flabel\\u003E\\u003Cdiv class=\\\"tooltip\\\" id=\\\"tooltip__portfolio-average\\\" role=\\\"tooltip\\\" tabindex=\\\"0\\\" tooltip=\\\"\\\"\\u003E\\u003Cimg class=\\\"tooltip-icon\\\" src=\\\"\\u002Fstatic\\u002Fassets\\u002Fimg\\u002Finfo.svg\\\" alt=\\\"\\\"\\u003E\\u003Cdiv class=\\\"tooltip-content tooltip-form-content\\\" ng-transclude=\\\"tooltipFormContent\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"col-sm-7 form-input__group form-input__group--left\\\"\\u003E\\u003Cspan id=\\\"kalkulator-form__portfolio-average\\\"\\u003E\\u003Cstrong\\u003E{{$ctrl.expectedYieldTab2 | number}}%\\u003C\\u002Fstrong\\u003E\\u003C\\u002Fspan\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"kalkulator-form__choose-panel\\\" ng-if=\\\"$ctrl.activeTab==2\\\"\\u003E\\u003Ch3\\u003EVálasszon egyet portfólióink közül!\\u003C\\u002Fh3\\u003E\\u003Cdiv class=\\\"row form__row\\\"\\u003E\\u003Cdiv class=\\\"col-sm-5 form-input__group form-input__group--right\\\"\\u003E\\u003Clabel class=\\\"label\\\" for=\\\"kalkulator-form__portfolio-select\\\" aria-describedby=\\\"tolltip__portfolio-select\\\"\\u003EVálasztható portfólióink:\\u003C\\u002Flabel\\u003E\\u003Cdiv class=\\\"tooltip\\\" id=\\\"tolltip__portfolio-select\\\" role=\\\"tooltip\\\" tabindex=\\\"0\\\" tooltip=\\\"\\\"\\u003E\\u003Cimg class=\\\"tooltip-icon\\\" src=\\\"\\u002Fstatic\\u002Fassets\\u002Fimg\\u002Finfo.svg\\\" alt=\\\"\\\"\\u003E\\u003Cdiv class=\\\"tooltip-content\\\"\\u003E\\u003Cp\\u003EPortfóliók közül kockázatvállalási hajlandósága és élethelyzete figyelembe vételével választhat.\\u003C\\u002Fp\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"col-sm-3 form-input__group\\\"\\u003E\\u003Cselect class=\\\"select app-kapcsolat__select\\\" id=\\\"kalkulator-form__futureportfolio-select\\\" name=\\\"hozam-jovo\\\" ng-options=\\\"obj.expectedYield as obj.portfolio for obj in $ctrl.hozamok\\\" ng-model=\\\"$ctrl.expectedYieldTab3\\\" required aria-describedby=\\\"kapcsolatSubjectError\\\"\\u003E\\u003Coption value=\\\"\\\" role=\\\"option\\\"\\u003EKérjük válasszon!\\u003C\\u002Foption\\u003E\\u003C\\u002Fselect\\u003E\\u003Cinput-error id=\\\"portfolioError\\\" form=\\\"$ctrl.kalkulatorForm\\\" input-name=\\\"hozam-jovo\\\" message-required=\\\"Válasszon portfóliót!\\\"\\u003E\\u003C\\u002Finput-error\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"col-sm-4 form-input__group\\\"\\u003E\\u003Ca class=\\\"button\\\" href=\\\"https:\\u002F\\u002Fwww.otpnyugdij.hu\\u002Fhu\\u002Fkerdoiv-kockazatvallalas-felmeresere\\\" target=\\\"_blank\\\"\\u003EKitöltöm a kérdőívet\\u003C\\u002Fa\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"row form__row\\\" ng-if=\\\"$ctrl.expectedYieldTab3\\\"\\u003E\\u003Cdiv class=\\\"col-sm-5 form-input__group form-input__group--right\\\"\\u003E\\u003Clabel class=\\\"label\\\" for=\\\"kalkulator-form__portfolio-average\\\" aria-describedby=\\\"tooltip__portfolio-average\\\"\\u003EVárható hozamok:\\u003C\\u002Flabel\\u003E\\u003Cdiv class=\\\"tooltip\\\" id=\\\"tooltip__portfolio-average\\\" role=\\\"tooltip\\\" tabindex=\\\"0\\\" tooltip=\\\"\\\"\\u003E\\u003Cimg class=\\\"tooltip-icon\\\" src=\\\"\\u002Fstatic\\u002Fassets\\u002Fimg\\u002Finfo.svg\\\" alt=\\\"\\\"\\u003E\\u003Cdiv class=\\\"tooltip-content tooltip-form-content\\\" ng-transclude=\\\"tooltipFormContent\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"col-sm-7 form-input__group form-input__group--left\\\"\\u003E\\u003Cspan id=\\\"kalkulator-form__portfolio-average\\\"\\u003E\\u003Cstrong\\u003E{{$ctrl.expectedYieldTab3 | number}}%\\u003C\\u002Fstrong\\u003E\\u003C\\u002Fspan\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Ffieldset\\u003E\\u003Cdiv class=\\\"kalkulator-form__button-row\\\"\\u003E\\u003Cbutton class=\\\"button\\\" type=\\\"submit\\\" ng-click=\\\"$ctrl.calculate()\\\"\\u003EKiszámolom\\u003C\\u002Fbutton\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fform\\u003E\";;return pug_html;};\nmodule.exports = template;\n\n/***/ }),\n\n/***/ 602:\n/***/ (function(module, exports, __webpack_require__) {\n\nvar pug = __webpack_require__(2);\n\nfunction template(locals) {var pug_html = \"\", pug_mixins = {}, pug_interp;pug_html = pug_html + \"\\u003Cdiv class=\\\"kalkulator-result\\\" id=\\\"kalkulator-result\\\"\\u003E\\u003Cdiv class=\\\"row\\\"\\u003E\\u003Cdiv class=\\\"col-sm-10 col-sm-offset-1\\\"\\u003E\\u003Cdiv class=\\\"kalkulator-result__text text-center\\\"\\u003E\\u003Cp aria-describedby=\\\"tooltip__text\\\"\\u003EÖnnek még legalább \\u003Cstrong\\u003E{{$ctrl.eredmeny.yearsLeftToRetire}} éve\\u003C\\u002Fstrong\\u003E van az öregségi nyugdíjkorhatár betöltéséig.\\u003Cspan class=\\\"tooltip\\\" id=\\\"tooltip__text\\\" role=\\\"tooltip\\\" tabindex=\\\"0\\\" tooltip=\\\"\\\"\\u003E\\u003Cimg class=\\\"tooltip-icon\\\" src=\\\"\\u002Fstatic\\u002Fassets\\u002Fimg\\u002Finfo.svg\\\" alt=\\\"\\\"\\u003E\\u003Cspan class=\\\"tooltip-content\\\"\\u003EJelenleg 65 év az öregségi nyugdíjkorhatár\\u003C\\u002Fspan\\u003E\\u003C\\u002Fspan\\u003E\\u003C\\u002Fp\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"table-container\\\"\\u003E\\u003Ctable class=\\\"kalkulator-result__table\\\" ng-if=\\\"$ctrl.isMegtakaritas()\\\"\\u003E\\u003Ccaption class=\\\"sr-only\\\"\\u003EVárható összegek...\\u003C\\u002Fcaption\\u003E\\u003Ctbody\\u003E\\u003Ctr\\u003E\\u003Cth scope=\\\"row\\\"\\u003EVárható megtakarítás tőkerésze\\u003C\\u002Fth\\u003E\\u003Ctd\\u003E\\u003Cstrong\\u003E{{$ctrl.eredmeny.expectedCapitalOfSavings | currency:'':0}} Ft\\u003C\\u002Fstrong\\u003E\\u003C\\u002Ftd\\u003E\\u003C\\u002Ftr\\u003E\\u003Ctr\\u003E\\u003Cth scope=\\\"row\\\"\\u003EVárható hozam\\u003C\\u002Fth\\u003E\\u003Ctd\\u003E\\u003Cstrong\\u003E{{$ctrl.eredmeny.expectedYield | currency:'':0}} Ft\\u003C\\u002Fstrong\\u003E\\u003C\\u002Ftd\\u003E\\u003C\\u002Ftr\\u003E\\u003Ctr\\u003E\\u003Cth scope=\\\"row\\\"\\u003EVárható vagyon\\u003C\\u002Fth\\u003E\\u003Ctd\\u003E\\u003Cstrong\\u003E{{$ctrl.eredmeny.expectedAssets | currency:'':0}} Ft\\u003C\\u002Fstrong\\u003E\\u003C\\u002Ftd\\u003E\\u003C\\u002Ftr\\u003E\\u003Ctr\\u003E\\u003Cth scope=\\\"row\\\" style=\\\"padding-left: 65px;\\\"\\u003Emelyből az \\u003Cspan aria-describedby=\\\"tooltip__table-text\\\"\\u003Eadó-visszatérítésből származó \\u003Cbr\\u003Evagyonrész\\u003C\\u002Fspan\\u003E\\u003Cdiv class=\\\"tooltip\\\" id=\\\"tooltip__table-text\\\" role=\\\"tooltip\\\" tabindex=\\\"0\\\"\\u003E\\u003Cimg class=\\\"tooltip-icon\\\" src=\\\"\\u002Fstatic\\u002Fassets\\u002Fimg\\u002Finfo.svg\\\" alt=\\\"\\\"\\u003E\\u003Cdiv class=\\\"tooltip-content tooltip-result-content\\\" ng-transclude=\\\"tooltipResultContent\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003Eösszege\\u003C\\u002Fth\\u003E\\u003Ctd\\u003E\\u003Cstrong\\u003E{{$ctrl.eredmeny.taxRefund | currency:'':0}} Ft\\u003C\\u002Fstrong\\u003E\\u003C\\u002Ftd\\u003E\\u003C\\u002Ftr\\u003E\\u003Ctr\\u003E\\u003Cth scope=\\\"row\\\"\\u003EVárható havi nyugdíjjáradék összege (10 évre)\\u003C\\u002Fth\\u003E\\u003Ctd\\u003E\\u003Cstrong\\u003E{{$ctrl.eredmeny.expectedMonthlyRetirementAnnuity10Years | currency:'':0}} Ft\\u003C\\u002Fstrong\\u003E\\u003C\\u002Ftd\\u003E\\u003C\\u002Ftr\\u003E\\u003Ctr\\u003E\\u003Cth scope=\\\"row\\\"\\u003EVárható havi nyugdíjjáradék összege (20 évre)\\u003C\\u002Fth\\u003E\\u003Ctd\\u003E\\u003Cstrong\\u003E{{$ctrl.eredmeny.expectedMonthlyRetirementAnnuity20Years | currency:'':0}} Ft\\u003C\\u002Fstrong\\u003E\\u003C\\u002Ftd\\u003E\\u003C\\u002Ftr\\u003E\\u003C\\u002Ftbody\\u003E\\u003C\\u002Ftable\\u003E\\u003Ctable class=\\\"kalkulator-result__table\\\" ng-if=\\\"$ctrl.isJaradek()\\\"\\u003E\\u003Ccaption class=\\\"sr-only\\\"\\u003EVárható összegek...\\u003C\\u002Fcaption\\u003E\\u003Ctbody\\u003E\\u003Ctr\\u003E\\u003Cth scope=\\\"row\\\"\\u003EHavi befizetés összege adó-visszatérítés igénybevétele esetén\\u003C\\u002Fth\\u003E\\u003Ctd\\u003E\\u003Cstrong\\u003E{{$ctrl.eredmeny.monthlyPaymentWithTaxRefund | currency:'':0}} Ft\\u003C\\u002Fstrong\\u003E\\u003C\\u002Ftd\\u003E\\u003C\\u002Ftr\\u003E\\u003Ctr\\u003E\\u003Cth scope=\\\"row\\\"\\u003EHavi befizetés összege adó-visszatérítés igénybevétele nélkül\\u003C\\u002Fth\\u003E\\u003Ctd\\u003E\\u003Cstrong\\u003E{{$ctrl.eredmeny.monthlyPaymentWithoutTaxRefund | currency:'':0}} Ft\\u003C\\u002Fstrong\\u003E\\u003C\\u002Ftd\\u003E\\u003C\\u002Ftr\\u003E\\u003C\\u002Ftbody\\u003E\\u003C\\u002Ftable\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"kalkulator-result__buttons\\\"\\u003E\\u003Ca class=\\\"button\\\" href=\\\"https:\\u002F\\u002Fmagan.onyp.otpportalok.hu\\u002Fbelepesi-nyilatkozat-regisztracio?kod=A2418\\\" target=\\\"_blank\\\"\\u003EBelépek az OTP Nyugdíjpénztárba\\u003C\\u002Fa\\u003E\\u003Ca class=\\\"button\\\" ng-href=\\\"{{$ctrl.getPdfUrl()}}\\\" target=\\\"_blank\\\"\\u003EKalkuláció letöltése\\u003C\\u002Fa\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"kalkulator-result__text\\\"\\u003E\\u003Cp\\u003EA kalkulátort az OTP Nyugdíjpénztár készítette a pénztártagok és érdeklődők tájékoztatása érdekében.\\u003C\\u002Fp\\u003E\\u003Cp\\u003EA kalkulátor a befizetések után jelenleg igénybe vehető 20%-os adó-visszatérítéssel és azok várható hozamával jövedelemtől függetlenül mindvégig számol. Az adó-visszatérítés felső határa maximum évi 150 000 Ft.\\u003C\\u002Fp\\u003E\\u003Cp\\u003EA számításnál az OTP Nyugdíjpénztár hatályos Alapszabályában rögzített sávos költséglevonását vettük figyelembe.\\u003C\\u002Fp\\u003E\\u003Cp\\u003E\\u003Cstrong\\u003EFelhívjuk figyelmét, hogy a számítás eredménye kizárólag tájékoztató jellegű, a kiszámolt összegek becslések; azok nem minősülnek ajánlattételnek és elérése a jövőben nem garantálható.\\u003C\\u002Fstrong\\u003E\\u003C\\u002Fp\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\";;return pug_html;};\nmodule.exports = template;\n\n/***/ }),\n\n/***/ 603:\n/***/ (function(module, exports, __webpack_require__) {\n\nvar pug = __webpack_require__(2);\n\nfunction template(locals) {var pug_html = \"\", pug_mixins = {}, pug_interp;pug_html = pug_html + \"\\u003Cdiv class=\\\"kalkulator-vhk\\\"\\u003E\\u003Ch3 class=\\\"kalkulator-vhk__title\\\"\\u003EKérdése van? Várjuk megkeresését!\\u003C\\u002Fh3\\u003E\\u003Cform class=\\\"app-visszahivas-keres__form\\\" name=\\\"$ctrl.visszahivasKeresForm\\\" novalidate ng-submit=\\\"$ctrl.postContactForm()\\\" ng-show=\\\"!$ctrl.success\\\"\\u003E\\u003Cdiv class=\\\"row form__row\\\"\\u003E\\u003Cdiv class=\\\"col-sm-4\\\"\\u003E\\u003Clabel class=\\\"label label--right\\\" for=\\\"{{$ctrl.id}}_kalkulator_nev\\\"\\u003ENév\\u003Cspan aria-hidden=\\\"true\\\"\\u003E*:\\u003C\\u002Fspan\\u003E\\u003C\\u002Flabel\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"col-sm-8\\\"\\u003E\\u003Cinput class=\\\"form-input onfocus\\\" id=\\\"{{$ctrl.id}}_kalkulator_nev\\\" type=\\\"text\\\" name=\\\"nev\\\" ng-model=\\\"$ctrl.model.name\\\" maxlength=\\\"40\\\" ng-pattern=\\\"$ctrl.patterns.simpleText\\\" required aria-describedby=\\\"{{$ctrl.id}}_vhkNameErrorSavingsCalculator\\\"\\u003E\\u003Cinput-error id=\\\"{{$ctrl.id}}_vhkNameErrorSavingsCalculator\\\" form=\\\"$ctrl.visszahivasKeresForm\\\" input-name=\\\"nev\\\" message-required=\\\"Kérjük adja meg a nevét!\\\" message-pattern=\\\"Kérjük helyesen adja meg a nevét!\\\"\\u003E\\u003C\\u002Finput-error\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"row form__row\\\"\\u003E\\u003Cdiv class=\\\"col-sm-4\\\"\\u003E\\u003Clabel class=\\\"label label--right\\\" for=\\\"{{$ctrl.id}}_kalkulator_telefon\\\"\\u003ETelefonszám\\u003Cspan aria-hidden=\\\"true\\\"\\u003E*:\\u003C\\u002Fspan\\u003E\\u003C\\u002Flabel\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"col-sm-8\\\"\\u003E\\u003Cinput class=\\\"form-input\\\" id=\\\"{{$ctrl.id}}_kalkulator_telefon\\\" type=\\\"tel\\\" name=\\\"telefon\\\" ng-model=\\\"$ctrl.model.phone\\\" maxlength=\\\"25\\\" ng-pattern=\\\"$ctrl.patterns.phone\\\" required aria-describedby=\\\"{{$ctrl.id}}_vhkPhoneErrorSavingsCalculator\\\"\\u003E\\u003Cinput-error id=\\\"{{$ctrl.id}}_vhkPhoneErrorSavingsCalculator\\\" form=\\\"$ctrl.visszahivasKeresForm\\\" input-name=\\\"telefon\\\" message-pattern=\\\"Kérjük helyesen adja meg a telefonszámot!\\\" message-required=\\\"Kérjük adja meg a telefonszámát!\\\"\\u003E\\u003C\\u002Finput-error\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"row form__row\\\"\\u003E\\u003Cdiv class=\\\"col-sm-4\\\"\\u003E\\u003Clabel class=\\\"label label--right\\\" for=\\\"{{$ctrl.id}}_kalkulator_email\\\"\\u003EE-mail cím:\\u003C\\u002Flabel\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"col-sm-8\\\"\\u003E\\u003Cinput class=\\\"form-input\\\" id=\\\"{{$ctrl.id}}_kalkulator_email\\\" type=\\\"email\\\" name=\\\"email\\\" ng-model=\\\"$ctrl.model.email\\\" maxlength=\\\"40\\\" ng-pattern=\\\"$ctrl.patterns.email\\\" ng-model-options=\\\"{updateOn: 'blur'}\\\" aria-describedby=\\\"{{$ctrl.id}}_vhkEmailErrorSavingsCalculator\\\"\\u003E\\u003Cinput-error id=\\\"{{$ctrl.id}}_vhkEmailErrorSavingsCalculator\\\" form=\\\"$ctrl.visszahivasKeresForm\\\" input-name=\\\"email\\\" message-pattern=\\\"Hibásan adta meg az e-mail címet, kérjük pontosítsa az adatokat!\\\"\\u003E\\u003C\\u002Finput-error\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"row form__row\\\"\\u003E\\u003Cdiv class=\\\"col-sm-4\\\"\\u003E\\u003Clabel class=\\\"label label--right\\\" for=\\\"{{$ctrl.id}}_kalkulator_idopont\\\"\\u003EVisszahívás időpontja\\u003Cspan aria-hidden=\\\"true\\\"\\u003E*:\\u003C\\u002Fspan\\u003E\\u003C\\u002Flabel\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"col-sm-8\\\"\\u003E\\u003Cselect class=\\\"select\\\" id=\\\"{{$ctrl.id}}_kalkulator_idopont\\\" name=\\\"idopont\\\" ng-model=\\\"$ctrl.model.time\\\" required inputerrorId=\\\"{{$ctrl.id}}_vhkCallbackErrorSavingsCalculator\\\"\\u003E\\u003Coption value=\\\"\\\" disabled selected role=\\\"option\\\"\\u003EKérjük válasszon!\\u003C\\u002Foption\\u003E\\u003Coption value=\\\"{{ idopont }}\\\" ng-repeat=\\\"idopont in $ctrl.visszahivasIdok track by $index\\\" role=\\\"option\\\"\\u003E{{ idopont }}\\u003C\\u002Foption\\u003E\\u003C\\u002Fselect\\u003E\\u003Cinput-error id=\\\"{{$ctrl.id}}_vhkCallbackErrorSavingsCalculator\\\" form=\\\"$ctrl.visszahivasKeresForm\\\" input-name=\\\"idopont\\\" message-required=\\\"Kérjük válasszon időpontot!\\\"\\u003E\\u003C\\u002Finput-error\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"row form__row captcha__row\\\"\\u003E\\u003Cdiv class=\\\"col-sm-4\\\"\\u003E\\u003Clabel class=\\\"label label--right\\\" for=\\\"kalkulator_captcha\\\"\\u003EEllenőrzés\\u003Cspan aria-hidden=\\\"true\\\"\\u003E*:\\u003C\\u002Fspan\\u003E\\u003C\\u002Flabel\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"col-sm-8\\\"\\u003E\\u003Cdiv class=\\\"captcha\\\"\\u003E\\u003Cdiv vc-recaptcha key=\\\"'6LdfJB8TAAAAAPGueZFYId4-pMm-6RvQ2Tz6ZmyO'\\\" ng-model=\\\"$ctrl.model.captchaValue\\\" name=\\\"captcha\\\" required on-expire=\\\"this.resetCaptcha()\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cinput-error id=\\\"{{$ctrl.id}}_vhkCaptchaErrorSavingsCalculator\\\" form=\\\"$ctrl.visszahivasKeresForm\\\" input-name=\\\"captcha\\\" message-required=\\\"Hibásan adta meg a képen szereplő szöveget, kérjük pontosítsa az adatokat!\\\" message-pattern=\\\"Kérjük helyesen adja meg a képen szereplő szöveget!\\\" message-server-error=\\\"Hibásan adta meg a képen szereplő szöveget, kérjük pontosítsa az adatokat!\\\"\\u003E\\u003C\\u002Finput-error\\u003E\\u003Cdiv class=\\\"checkbox__item\\\"\\u003E\\u003Cinput id=\\\"visszahivas-keres-form__adatvedelmi\\\" type=\\\"checkbox\\\" name=\\\"adatvedelmi\\\" ng-model=\\\"$ctrl.adatvedelmiIsChecked\\\"\\u003E\\u003Clabel class=\\\"checkbox\\\" for=\\\"visszahivas-keres-form__adatvedelmi\\\"\\u003EKijelentem, hogy az \\u003Ca href=\\\"https:\\u002F\\u002Fwww.otpnyugdij.hu\\u002Fstatic\\u002Fotpnyugdij\\u002Fdownload\\u002Fonyp_adatkezelesi_tajekoztato.pdf\\\" target=\\\"_blank\\\" rel=\\\"noopener noreferrer\\\"\\u003EAdatkezelési tájékoztató\\u003C\\u002Fa\\u003E tartalmát megismertem és tudomásul vettem a tájékoztató III. fejezet 5. pontjában leírt adatkezelést.\\u003C\\u002Flabel\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cbutton class=\\\"button\\\" type=\\\"submit\\\" ng-disabled=\\\"$ctrl.visszahivasKeresForm.$invalid || !$ctrl.adatvedelmiIsChecked\\\" ng-click=\\\"$ctrl.postVisszahivasKeresForm()\\\"\\u003EVisszahívást kérek\\u003C\\u002Fbutton\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fform\\u003E\\u003Cdiv class=\\\"app-visszahivas-keres__success\\\" ng-show=\\\"$ctrl.success\\\"\\u003E\\u003Cp class=\\\"app-visszahivas-keres__success-text\\\" tabindex=\\\"-1\\\"\\u003EKöszönjük érdeklődését!\\u003Cbr\\u003EMunkatársunk hamarosan felveszi Önnel a kapcsolatot.\\u003C\\u002Fp\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\";;return pug_html;};\nmodule.exports = template;\n\n/***/ }),\n\n/***/ 604:\n/***/ (function(module, exports, __webpack_require__) {\n\nvar pug = __webpack_require__(2);\n\nfunction template(locals) {var pug_html = \"\", pug_mixins = {}, pug_interp;pug_html = pug_html + \"\\u003Cdiv class=\\\"app-kalkulator\\\"\\u003E\\u003Cdiv ng-if=\\\"$ctrl.technicalError\\\"\\u003ETechnikai hiba történt\\u003C\\u002Fdiv\\u003E\\u003Ch2 class=\\\"app-kalkulator__title\\\" ng-if=\\\"$ctrl.tipus=='megtakaritas'\\\"\\u003ESzámolja ki, milyen megtakarításra számíthat havi befizetései alapján!\\u003C\\u002Fh2\\u003E\\u003Ch2 class=\\\"app-kalkulator__title\\\" ng-if=\\\"$ctrl.tipus=='jaradek'\\\"\\u003ESzámolja ki, hogy a vágyott havi nyugdíj-kiegészítéshez, milyen összegű rendszeres megtakarítás szükséges!\\u003C\\u002Fh2\\u003E\\u003Ckalkulator-form hozamok=\\\"$ctrl.hozamok\\\" tipus=\\\"$ctrl.tipus\\\" vegpontok=\\\"$ctrl.vegpontok\\\" on-tab-change=\\\"$ctrl.resetResults()\\\" on-calculate=\\\"$ctrl.calculate(data)\\\"\\u003E\\u003Ctooltip-form-content ng-transclude=\\\"tooltipFormContent\\\"\\u003E\\u003C\\u002Ftooltip-form-content\\u003E\\u003C\\u002Fkalkulator-form\\u003E\\u003Ckalkulator-result ng-if=\\\"$ctrl.eredmeny\\\" tipus=\\\"$ctrl.tipus\\\" eredmeny=\\\"$ctrl.eredmeny\\\"\\u003E\\u003Ctooltip-result-content ng-transclude=\\\"tooltipResultContent\\\"\\u003E\\u003C\\u002Ftooltip-result-content\\u003E\\u003C\\u002Fkalkulator-result\\u003E\\u003Ckalkulator-vhk id=\\\"calculator\\\" ng-if=\\\"$ctrl.eredmeny\\\" visszahivas-idok=\\\"$ctrl.visszahivasIdok\\\" success=\\\"$ctrl.vhkSuccess\\\" on-post-form=\\\"$ctrl.sendVhk(data)\\\"\\u003E\\u003C\\u002Fkalkulator-vhk\\u003E\\u003C\\u002Fdiv\\u003E\";;return pug_html;};\nmodule.exports = template;\n\n/***/ })\n\n},[541]);\n\n\n// WEBPACK FOOTER //\n// application/kalkulator.bundle.js","export const MEGTAKARITAS_TIPUS = 'megtakaritas';\r\nexport const JARADEK_TIPUS = 'jaradek';\r\n\r\nexport default class TipusBase {\r\n\tisMegtakaritas() {\r\n\t\treturn this.tipus == MEGTAKARITAS_TIPUS;\r\n\t}\r\n\tisJaradek() {\r\n\t\treturn this.tipus == JARADEK_TIPUS;\r\n\t}\r\n}\r\n\n\n\n// WEBPACK FOOTER //\n// ../source/application/kalkulator/lib/tipus-base.js","import { KalkulatorComponent } from './kalkulator.component';\nimport { KalkulatorFormModule } from './kalkulator-form/kalkulator-form.module';\nimport { KalkulatorResultModule } from './kalkulator-result/kalkulator-result.module';\nimport { KalkulatorVhkModule } from './kalkulator-vhk/kalkulator-vhk.module';\nimport { KalkulatorService } from './kalkulator.service';\nangular\n\t.module('kalkulator', [KalkulatorFormModule, KalkulatorResultModule, KalkulatorVhkModule])\n\t.component('kalkulator', KalkulatorComponent)\n\t.service('KalkulatorService', KalkulatorService);\n\n\n\n\n// WEBPACK FOOTER //\n// ../source/application/kalkulator/kalkulator.module.js","/*! angularjs-slider - v6.4.2 - \n (c) Rafal Zajac , Valentin Hervieu , Jussi Saarivirta , Angelin Sirbu - \n https://github.com/angular-slider/angularjs-slider - \n 2017-12-01 */\n/*jslint unparam: true */\n/*global angular: false, console: false, define, module */\n;(function(root, factory) {\n 'use strict'\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n // AMD. Register as an anonymous module.\n define(['angular'], factory)\n } else if (typeof module === 'object' && module.exports) {\n // Node. Does not work with strict CommonJS, but\n // only CommonJS-like environments that support module.exports,\n // like Node.\n // to support bundler like browserify\n var angularObj = angular || require('angular')\n if ((!angularObj || !angularObj.module) && typeof angular != 'undefined') {\n angularObj = angular\n }\n module.exports = factory(angularObj)\n } else {\n // Browser globals (root is window)\n factory(root.angular)\n }\n})(this, function(angular) {\n 'use strict'\n var module = angular\n .module('rzModule', [])\n .factory('RzSliderOptions', function() {\n var defaultOptions = {\n floor: 0,\n ceil: null, //defaults to rz-slider-model\n step: 1,\n precision: 0,\n minRange: null,\n maxRange: null,\n pushRange: false,\n minLimit: null,\n maxLimit: null,\n id: null,\n translate: null,\n getLegend: null,\n stepsArray: null,\n bindIndexForStepsArray: false,\n draggableRange: false,\n draggableRangeOnly: false,\n showSelectionBar: false,\n showSelectionBarEnd: false,\n showSelectionBarFromValue: null,\n showOuterSelectionBars: false,\n hidePointerLabels: false,\n hideLimitLabels: false,\n autoHideLimitLabels: true,\n readOnly: false,\n disabled: false,\n interval: 350,\n showTicks: false,\n showTicksValues: false,\n ticksArray: null,\n ticksTooltip: null,\n ticksValuesTooltip: null,\n vertical: false,\n getSelectionBarColor: null,\n getTickColor: null,\n getPointerColor: null,\n keyboardSupport: true,\n scale: 1,\n enforceStep: true,\n enforceRange: false,\n noSwitching: false,\n onlyBindHandles: false,\n onStart: null,\n onChange: null,\n onEnd: null,\n rightToLeft: false,\n reversedControls: false,\n boundPointerLabels: true,\n mergeRangeLabelsIfSame: false,\n customTemplateScope: null,\n logScale: false,\n customValueToPosition: null,\n customPositionToValue: null,\n selectionBarGradient: null,\n ariaLabel: null,\n ariaLabelledBy: null,\n ariaLabelHigh: null,\n ariaLabelledByHigh: null\n }\n var globalOptions = {}\n\n var factory = {}\n /**\n * `options({})` allows global configuration of all sliders in the\n * application.\n *\n * var app = angular.module( 'App', ['rzModule'], function( RzSliderOptions ) {\n * // show ticks for all sliders\n * RzSliderOptions.options( { showTicks: true } );\n * });\n */\n factory.options = function(value) {\n angular.extend(globalOptions, value)\n }\n\n factory.getOptions = function(options) {\n return angular.extend({}, defaultOptions, globalOptions, options)\n }\n\n return factory\n })\n .factory('rzThrottle', ['$timeout', function($timeout) {\n /**\n * rzThrottle\n *\n * Taken from underscore project\n *\n * @param {Function} func\n * @param {number} wait\n * @param {ThrottleOptions} options\n * @returns {Function}\n */\n return function(func, wait, options) {\n 'use strict'\n /* istanbul ignore next */\n var getTime =\n Date.now ||\n function() {\n return new Date().getTime()\n }\n var context, args, result\n var timeout = null\n var previous = 0\n options = options || {}\n var later = function() {\n previous = getTime()\n timeout = null\n result = func.apply(context, args)\n context = args = null\n }\n return function() {\n var now = getTime()\n var remaining = wait - (now - previous)\n context = this\n args = arguments\n if (remaining <= 0) {\n $timeout.cancel(timeout)\n timeout = null\n previous = now\n result = func.apply(context, args)\n context = args = null\n } else if (!timeout && options.trailing !== false) {\n timeout = $timeout(later, remaining)\n }\n return result\n }\n }\n }])\n .factory('RzSlider', ['$timeout', '$document', '$window', '$compile', 'RzSliderOptions', 'rzThrottle', function(\n $timeout,\n $document,\n $window,\n $compile,\n RzSliderOptions,\n rzThrottle\n ) {\n 'use strict'\n\n /**\n * Slider\n *\n * @param {ngScope} scope The AngularJS scope\n * @param {Element} sliderElem The slider directive element wrapped in jqLite\n * @constructor\n */\n var Slider = function(scope, sliderElem) {\n /**\n * The slider's scope\n *\n * @type {ngScope}\n */\n this.scope = scope\n\n /**\n * The slider inner low value (linked to rzSliderModel)\n * @type {number}\n */\n this.lowValue = 0\n\n /**\n * The slider inner high value (linked to rzSliderHigh)\n * @type {number}\n */\n this.highValue = 0\n\n /**\n * Slider element wrapped in jqLite\n *\n * @type {jqLite}\n */\n this.sliderElem = sliderElem\n\n /**\n * Slider type\n *\n * @type {boolean} Set to true for range slider\n */\n this.range =\n this.scope.rzSliderModel !== undefined &&\n this.scope.rzSliderHigh !== undefined\n\n /**\n * Values recorded when first dragging the bar\n *\n * @type {Object}\n */\n this.dragging = {\n active: false,\n value: 0,\n difference: 0,\n position: 0,\n lowLimit: 0,\n highLimit: 0\n }\n\n /**\n * property that handle position (defaults to left for horizontal)\n * @type {string}\n */\n this.positionProperty = 'left'\n\n /**\n * property that handle dimension (defaults to width for horizontal)\n * @type {string}\n */\n this.dimensionProperty = 'width'\n\n /**\n * Half of the width or height of the slider handles\n *\n * @type {number}\n */\n this.handleHalfDim = 0\n\n /**\n * Maximum position the slider handle can have\n *\n * @type {number}\n */\n this.maxPos = 0\n\n /**\n * Precision\n *\n * @type {number}\n */\n this.precision = 0\n\n /**\n * Step\n *\n * @type {number}\n */\n this.step = 1\n\n /**\n * The name of the handle we are currently tracking\n *\n * @type {string}\n */\n this.tracking = ''\n\n /**\n * Minimum value (floor) of the model\n *\n * @type {number}\n */\n this.minValue = 0\n\n /**\n * Maximum value (ceiling) of the model\n *\n * @type {number}\n */\n this.maxValue = 0\n\n /**\n * The delta between min and max value\n *\n * @type {number}\n */\n this.valueRange = 0\n\n /**\n * If showTicks/showTicksValues options are number.\n * In this case, ticks values should be displayed below the slider.\n * @type {boolean}\n */\n this.intermediateTicks = false\n\n /**\n * Set to true if init method already executed\n *\n * @type {boolean}\n */\n this.initHasRun = false\n\n /**\n * Used to call onStart on the first keydown event\n *\n * @type {boolean}\n */\n this.firstKeyDown = false\n\n /**\n * Internal flag to prevent watchers to be called when the sliders value are modified internally.\n * @type {boolean}\n */\n this.internalChange = false\n\n /**\n * Internal flag to keep track of the visibility of combo label\n * @type {boolean}\n */\n this.cmbLabelShown = false\n\n /**\n * Internal variable to keep track of the focus element\n */\n this.currentFocusElement = null\n\n // Slider DOM elements wrapped in jqLite\n this.fullBar = null // The whole slider bar\n this.selBar = null // Highlight between two handles\n this.minH = null // Left slider handle\n this.maxH = null // Right slider handle\n this.flrLab = null // Floor label\n this.ceilLab = null // Ceiling label\n this.minLab = null // Label above the low value\n this.maxLab = null // Label above the high value\n this.cmbLab = null // Combined label\n this.ticks = null // The ticks\n\n // Initialize slider\n this.init()\n }\n\n // Add instance methods\n Slider.prototype = {\n /**\n * Initialize slider\n *\n * @returns {undefined}\n */\n init: function() {\n var thrLow,\n thrHigh,\n self = this\n\n var calcDimFn = function() {\n self.calcViewDimensions()\n }\n\n this.applyOptions()\n this.syncLowValue()\n if (this.range) this.syncHighValue()\n this.initElemHandles()\n this.manageElementsStyle()\n this.setDisabledState()\n this.calcViewDimensions()\n this.setMinAndMax()\n this.addAccessibility()\n this.updateCeilLab()\n this.updateFloorLab()\n this.initHandles()\n this.manageEventsBindings()\n\n // Recalculate slider view dimensions\n this.scope.$on('reCalcViewDimensions', calcDimFn)\n\n // Recalculate stuff if view port dimensions have changed\n angular.element($window).on('resize', calcDimFn)\n\n this.initHasRun = true\n\n // Watch for changes to the model\n thrLow = rzThrottle(function() {\n self.onLowHandleChange()\n }, self.options.interval)\n\n thrHigh = rzThrottle(function() {\n self.onHighHandleChange()\n }, self.options.interval)\n\n this.scope.$on('rzSliderForceRender', function() {\n self.resetLabelsValue()\n thrLow()\n if (self.range) {\n thrHigh()\n }\n self.resetSlider()\n })\n\n // Watchers (order is important because in case of simultaneous change,\n // watchers will be called in the same order)\n this.scope.$watchCollection('rzSliderOptions()', function(\n newValue,\n oldValue\n ) {\n if (newValue === oldValue) return\n self.applyOptions() // need to be called before synchronizing the values\n self.syncLowValue()\n if (self.range) self.syncHighValue()\n self.resetSlider()\n })\n\n this.scope.$watch('rzSliderModel', function(newValue, oldValue) {\n if (self.internalChange) return\n if (newValue === oldValue) return\n thrLow()\n })\n\n this.scope.$watch('rzSliderHigh', function(newValue, oldValue) {\n if (self.internalChange) return\n if (newValue === oldValue) return\n if (newValue != null) thrHigh()\n if (\n (self.range && newValue == null) ||\n (!self.range && newValue != null)\n ) {\n self.applyOptions()\n self.resetSlider()\n }\n })\n\n this.scope.$on('$destroy', function() {\n self.unbindEvents()\n angular.element($window).off('resize', calcDimFn)\n self.currentFocusElement = null\n })\n },\n\n findStepIndex: function(modelValue) {\n var index = 0\n for (var i = 0; i < this.options.stepsArray.length; i++) {\n var step = this.options.stepsArray[i]\n if (step === modelValue) {\n index = i\n break\n } else if (angular.isDate(step)) {\n if (step.getTime() === modelValue.getTime()) {\n index = i\n break\n }\n } else if (angular.isObject(step)) {\n if (\n (angular.isDate(step.value) &&\n step.value.getTime() === modelValue.getTime()) ||\n step.value === modelValue\n ) {\n index = i\n break\n }\n }\n }\n return index\n },\n\n syncLowValue: function() {\n if (this.options.stepsArray) {\n if (!this.options.bindIndexForStepsArray)\n this.lowValue = this.findStepIndex(this.scope.rzSliderModel)\n else this.lowValue = this.scope.rzSliderModel\n } else this.lowValue = this.scope.rzSliderModel\n },\n\n syncHighValue: function() {\n if (this.options.stepsArray) {\n if (!this.options.bindIndexForStepsArray)\n this.highValue = this.findStepIndex(this.scope.rzSliderHigh)\n else this.highValue = this.scope.rzSliderHigh\n } else this.highValue = this.scope.rzSliderHigh\n },\n\n getStepValue: function(sliderValue) {\n var step = this.options.stepsArray[sliderValue]\n if (angular.isDate(step)) return step\n if (angular.isObject(step)) return step.value\n return step\n },\n\n applyLowValue: function() {\n if (this.options.stepsArray) {\n if (!this.options.bindIndexForStepsArray)\n this.scope.rzSliderModel = this.getStepValue(this.lowValue)\n else this.scope.rzSliderModel = this.lowValue\n } else this.scope.rzSliderModel = this.lowValue\n },\n\n applyHighValue: function() {\n if (this.options.stepsArray) {\n if (!this.options.bindIndexForStepsArray)\n this.scope.rzSliderHigh = this.getStepValue(this.highValue)\n else this.scope.rzSliderHigh = this.highValue\n } else this.scope.rzSliderHigh = this.highValue\n },\n\n /*\n * Reflow the slider when the low handle changes (called with throttle)\n */\n onLowHandleChange: function() {\n this.syncLowValue()\n if (this.range) this.syncHighValue()\n this.setMinAndMax()\n this.updateLowHandle(this.valueToPosition(this.lowValue))\n this.updateSelectionBar()\n this.updateTicksScale()\n this.updateAriaAttributes()\n if (this.range) {\n this.updateCmbLabel()\n }\n },\n\n /*\n * Reflow the slider when the high handle changes (called with throttle)\n */\n onHighHandleChange: function() {\n this.syncLowValue()\n this.syncHighValue()\n this.setMinAndMax()\n this.updateHighHandle(this.valueToPosition(this.highValue))\n this.updateSelectionBar()\n this.updateTicksScale()\n this.updateCmbLabel()\n this.updateAriaAttributes()\n },\n\n /**\n * Read the user options and apply them to the slider model\n */\n applyOptions: function() {\n var sliderOptions\n if (this.scope.rzSliderOptions)\n sliderOptions = this.scope.rzSliderOptions()\n else sliderOptions = {}\n\n this.options = RzSliderOptions.getOptions(sliderOptions)\n\n if (this.options.step <= 0) this.options.step = 1\n\n this.range =\n this.scope.rzSliderModel !== undefined &&\n this.scope.rzSliderHigh !== undefined\n this.options.draggableRange =\n this.range && this.options.draggableRange\n this.options.draggableRangeOnly =\n this.range && this.options.draggableRangeOnly\n if (this.options.draggableRangeOnly) {\n this.options.draggableRange = true\n }\n\n this.options.showTicks =\n this.options.showTicks ||\n this.options.showTicksValues ||\n !!this.options.ticksArray\n this.scope.showTicks = this.options.showTicks //scope is used in the template\n if (\n angular.isNumber(this.options.showTicks) ||\n this.options.ticksArray\n )\n this.intermediateTicks = true\n\n this.options.showSelectionBar =\n this.options.showSelectionBar ||\n this.options.showSelectionBarEnd ||\n this.options.showSelectionBarFromValue !== null\n\n if (this.options.stepsArray) {\n this.parseStepsArray()\n } else {\n if (this.options.translate) this.customTrFn = this.options.translate\n else\n this.customTrFn = function(value) {\n return String(value)\n }\n\n this.getLegend = this.options.getLegend\n }\n\n if (this.options.vertical) {\n this.positionProperty = 'bottom'\n this.dimensionProperty = 'height'\n }\n\n if (this.options.customTemplateScope)\n this.scope.custom = this.options.customTemplateScope\n },\n\n parseStepsArray: function() {\n this.options.floor = 0\n this.options.ceil = this.options.stepsArray.length - 1\n this.options.step = 1\n\n if (this.options.translate) {\n this.customTrFn = this.options.translate\n } else {\n this.customTrFn = function(modelValue) {\n if (this.options.bindIndexForStepsArray)\n return this.getStepValue(modelValue)\n return modelValue\n }\n }\n\n this.getLegend = function(index) {\n var step = this.options.stepsArray[index]\n if (angular.isObject(step)) return step.legend\n return null\n }\n },\n\n /**\n * Resets slider\n *\n * @returns {undefined}\n */\n resetSlider: function() {\n this.manageElementsStyle()\n this.addAccessibility()\n this.setMinAndMax()\n this.updateCeilLab()\n this.updateFloorLab()\n this.unbindEvents()\n this.manageEventsBindings()\n this.setDisabledState()\n this.calcViewDimensions()\n this.refocusPointerIfNeeded()\n },\n\n refocusPointerIfNeeded: function() {\n if (this.currentFocusElement) {\n this.onPointerFocus(\n this.currentFocusElement.pointer,\n this.currentFocusElement.ref\n )\n this.focusElement(this.currentFocusElement.pointer)\n }\n },\n\n /**\n * Set the slider children to variables for easy access\n *\n * Run only once during initialization\n *\n * @returns {undefined}\n */\n initElemHandles: function() {\n // Assign all slider elements to object properties for easy access\n angular.forEach(\n this.sliderElem.children(),\n function(elem, index) {\n var jElem = angular.element(elem)\n\n switch (index) {\n case 0:\n this.leftOutSelBar = jElem\n break\n case 1:\n this.rightOutSelBar = jElem\n break\n case 2:\n this.fullBar = jElem\n break\n case 3:\n this.selBar = jElem\n break\n case 4:\n this.minH = jElem\n break\n case 5:\n this.maxH = jElem\n break\n case 6:\n this.flrLab = jElem\n break\n case 7:\n this.ceilLab = jElem\n break\n case 8:\n this.minLab = jElem\n break\n case 9:\n this.maxLab = jElem\n break\n case 10:\n this.cmbLab = jElem\n break\n case 11:\n this.ticks = jElem\n break\n }\n },\n this\n )\n\n // Initialize position cache properties\n this.selBar.rzsp = 0\n this.minH.rzsp = 0\n this.maxH.rzsp = 0\n this.flrLab.rzsp = 0\n this.ceilLab.rzsp = 0\n this.minLab.rzsp = 0\n this.maxLab.rzsp = 0\n this.cmbLab.rzsp = 0\n },\n\n /**\n * Update each elements style based on options\n */\n manageElementsStyle: function() {\n if (!this.range) this.maxH.css('display', 'none')\n else this.maxH.css('display', '')\n\n this.alwaysHide(\n this.flrLab,\n this.options.showTicksValues || this.options.hideLimitLabels\n )\n this.alwaysHide(\n this.ceilLab,\n this.options.showTicksValues || this.options.hideLimitLabels\n )\n\n var hideLabelsForTicks =\n this.options.showTicksValues && !this.intermediateTicks\n this.alwaysHide(\n this.minLab,\n hideLabelsForTicks || this.options.hidePointerLabels\n )\n this.alwaysHide(\n this.maxLab,\n hideLabelsForTicks || !this.range || this.options.hidePointerLabels\n )\n this.alwaysHide(\n this.cmbLab,\n hideLabelsForTicks || !this.range || this.options.hidePointerLabels\n )\n this.alwaysHide(\n this.selBar,\n !this.range && !this.options.showSelectionBar\n )\n this.alwaysHide(\n this.leftOutSelBar,\n !this.range || !this.options.showOuterSelectionBars\n )\n this.alwaysHide(\n this.rightOutSelBar,\n !this.range || !this.options.showOuterSelectionBars\n )\n\n if (this.range && this.options.showOuterSelectionBars) {\n this.fullBar.addClass('rz-transparent')\n }\n\n if (this.options.vertical) this.sliderElem.addClass('rz-vertical')\n\n if (this.options.draggableRange) this.selBar.addClass('rz-draggable')\n else this.selBar.removeClass('rz-draggable')\n\n if (this.intermediateTicks && this.options.showTicksValues)\n this.ticks.addClass('rz-ticks-values-under')\n },\n\n alwaysHide: function(el, hide) {\n el.rzAlwaysHide = hide\n if (hide) this.hideEl(el)\n else this.showEl(el)\n },\n\n /**\n * Manage the events bindings based on readOnly and disabled options\n *\n * @returns {undefined}\n */\n manageEventsBindings: function() {\n if (this.options.disabled || this.options.readOnly)\n this.unbindEvents()\n else this.bindEvents()\n },\n\n /**\n * Set the disabled state based on rzSliderDisabled\n *\n * @returns {undefined}\n */\n setDisabledState: function() {\n if (this.options.disabled) {\n this.sliderElem.attr('disabled', 'disabled')\n } else {\n this.sliderElem.attr('disabled', null)\n }\n },\n\n /**\n * Reset label values\n *\n * @return {undefined}\n */\n resetLabelsValue: function() {\n this.minLab.rzsv = undefined\n this.maxLab.rzsv = undefined\n },\n\n /**\n * Initialize slider handles positions and labels\n *\n * Run only once during initialization and every time view port changes size\n *\n * @returns {undefined}\n */\n initHandles: function() {\n this.updateLowHandle(this.valueToPosition(this.lowValue))\n\n /*\n the order here is important since the selection bar should be\n updated after the high handle but before the combined label\n */\n if (this.range)\n this.updateHighHandle(this.valueToPosition(this.highValue))\n this.updateSelectionBar()\n if (this.range) this.updateCmbLabel()\n\n this.updateTicksScale()\n },\n\n /**\n * Translate value to human readable format\n *\n * @param {number|string} value\n * @param {jqLite} label\n * @param {String} which\n * @param {boolean} [useCustomTr]\n * @returns {undefined}\n */\n translateFn: function(value, label, which, useCustomTr) {\n useCustomTr = useCustomTr === undefined ? true : useCustomTr\n\n var valStr = '',\n getDimension = false,\n noLabelInjection = label.hasClass('no-label-injection')\n\n if (useCustomTr) {\n if (this.options.stepsArray && !this.options.bindIndexForStepsArray)\n value = this.getStepValue(value)\n valStr = String(this.customTrFn(value, this.options.id, which))\n } else {\n valStr = String(value)\n }\n\n if (\n label.rzsv === undefined ||\n label.rzsv.length !== valStr.length ||\n (label.rzsv.length > 0 && label.rzsd === 0)\n ) {\n getDimension = true\n label.rzsv = valStr\n }\n\n if (!noLabelInjection) {\n label.html(valStr)\n }\n this.scope[which + 'Label'] = valStr\n\n // Update width only when length of the label have changed\n if (getDimension) {\n this.getDimension(label)\n }\n },\n\n /**\n * Set maximum and minimum values for the slider and ensure the model and high\n * value match these limits\n * @returns {undefined}\n */\n setMinAndMax: function() {\n this.step = +this.options.step\n this.precision = +this.options.precision\n\n this.minValue = this.options.floor\n if (this.options.logScale && this.minValue === 0)\n throw Error(\"Can't use floor=0 with logarithmic scale\")\n\n if (this.options.enforceStep) {\n this.lowValue = this.roundStep(this.lowValue)\n if (this.range) this.highValue = this.roundStep(this.highValue)\n }\n\n if (this.options.ceil != null) this.maxValue = this.options.ceil\n else\n this.maxValue = this.options.ceil = this.range\n ? this.highValue\n : this.lowValue\n\n if (this.options.enforceRange) {\n this.lowValue = this.sanitizeValue(this.lowValue)\n if (this.range) this.highValue = this.sanitizeValue(this.highValue)\n }\n\n this.applyLowValue()\n if (this.range) this.applyHighValue()\n\n this.valueRange = this.maxValue - this.minValue\n },\n\n /**\n * Adds accessibility attributes\n *\n * Run only once during initialization\n *\n * @returns {undefined}\n */\n addAccessibility: function() {\n this.minH.attr('role', 'slider')\n this.updateAriaAttributes()\n if (\n this.options.keyboardSupport &&\n !(this.options.readOnly || this.options.disabled)\n )\n this.minH.attr('tabindex', '0')\n else this.minH.attr('tabindex', '')\n if (this.options.vertical)\n this.minH.attr('aria-orientation', 'vertical')\n if (this.options.ariaLabel)\n this.minH.attr('aria-label', this.options.ariaLabel)\n else if (this.options.ariaLabelledBy)\n this.minH.attr('aria-labelledby', this.options.ariaLabelledBy)\n\n if (this.range) {\n this.maxH.attr('role', 'slider')\n if (\n this.options.keyboardSupport &&\n !(this.options.readOnly || this.options.disabled)\n )\n this.maxH.attr('tabindex', '0')\n else this.maxH.attr('tabindex', '')\n if (this.options.vertical)\n this.maxH.attr('aria-orientation', 'vertical')\n if (this.options.ariaLabelHigh)\n this.maxH.attr('aria-label', this.options.ariaLabelHigh)\n else if (this.options.ariaLabelledByHigh)\n this.maxH.attr('aria-labelledby', this.options.ariaLabelledByHigh)\n }\n },\n\n /**\n * Updates aria attributes according to current values\n */\n updateAriaAttributes: function() {\n this.minH.attr({\n 'aria-valuenow': this.scope.rzSliderModel,\n 'aria-valuetext': this.customTrFn(\n this.scope.rzSliderModel,\n this.options.id,\n 'model'\n ),\n 'aria-valuemin': this.minValue,\n 'aria-valuemax': this.maxValue\n })\n if (this.range) {\n this.maxH.attr({\n 'aria-valuenow': this.scope.rzSliderHigh,\n 'aria-valuetext': this.customTrFn(\n this.scope.rzSliderHigh,\n this.options.id,\n 'high'\n ),\n 'aria-valuemin': this.minValue,\n 'aria-valuemax': this.maxValue\n })\n }\n },\n\n /**\n * Calculate dimensions that are dependent on view port size\n *\n * Run once during initialization and every time view port changes size.\n *\n * @returns {undefined}\n */\n calcViewDimensions: function() {\n var handleWidth = this.getDimension(this.minH)\n\n this.handleHalfDim = handleWidth / 2\n this.barDimension = this.getDimension(this.fullBar)\n\n this.maxPos = this.barDimension - handleWidth\n\n this.getDimension(this.sliderElem)\n this.sliderElem.rzsp = this.sliderElem[0].getBoundingClientRect()[\n this.positionProperty\n ]\n\n if (this.initHasRun) {\n this.updateFloorLab()\n this.updateCeilLab()\n this.initHandles()\n var self = this\n $timeout(function() {\n self.updateTicksScale()\n })\n }\n },\n\n /**\n * Update the ticks position\n *\n * @returns {undefined}\n */\n updateTicksScale: function() {\n if (!this.options.showTicks) return\n\n var ticksArray = this.options.ticksArray || this.getTicksArray(),\n translate = this.options.vertical ? 'translateY' : 'translateX',\n self = this\n\n if (this.options.rightToLeft) ticksArray.reverse()\n\n this.scope.ticks = ticksArray.map(function(value) {\n var position = self.valueToPosition(value)\n\n if (self.options.vertical) position = self.maxPos - position\n\n var translation = translate + '(' + Math.round(position) + 'px)'\n var tick = {\n selected: self.isTickSelected(value),\n style: {\n '-webkit-transform': translation,\n '-moz-transform': translation,\n '-o-transform': translation,\n '-ms-transform': translation,\n transform: translation\n }\n }\n if (tick.selected && self.options.getSelectionBarColor) {\n tick.style['background-color'] = self.getSelectionBarColor()\n }\n if (!tick.selected && self.options.getTickColor) {\n tick.style['background-color'] = self.getTickColor(value)\n }\n if (self.options.ticksTooltip) {\n tick.tooltip = self.options.ticksTooltip(value)\n tick.tooltipPlacement = self.options.vertical ? 'right' : 'top'\n }\n if (\n self.options.showTicksValues === true ||\n value % self.options.showTicksValues === 0\n ) {\n tick.value = self.getDisplayValue(value, 'tick-value')\n if (self.options.ticksValuesTooltip) {\n tick.valueTooltip = self.options.ticksValuesTooltip(value)\n tick.valueTooltipPlacement = self.options.vertical\n ? 'right'\n : 'top'\n }\n }\n if (self.getLegend) {\n var legend = self.getLegend(value, self.options.id)\n if (legend) tick.legend = legend\n }\n return tick\n })\n },\n\n getTicksArray: function() {\n var step = this.step,\n ticksArray = []\n if (this.intermediateTicks) step = this.options.showTicks\n for (\n var value = this.minValue;\n value <= this.maxValue;\n value += step\n ) {\n ticksArray.push(value)\n }\n return ticksArray\n },\n\n isTickSelected: function(value) {\n if (!this.range) {\n if (this.options.showSelectionBarFromValue !== null) {\n var center = this.options.showSelectionBarFromValue\n if (\n this.lowValue > center &&\n value >= center &&\n value <= this.lowValue\n )\n return true\n else if (\n this.lowValue < center &&\n value <= center &&\n value >= this.lowValue\n )\n return true\n } else if (this.options.showSelectionBarEnd) {\n if (value >= this.lowValue) return true\n } else if (this.options.showSelectionBar && value <= this.lowValue)\n return true\n }\n if (this.range && value >= this.lowValue && value <= this.highValue)\n return true\n return false\n },\n\n /**\n * Update position of the floor label\n *\n * @returns {undefined}\n */\n updateFloorLab: function() {\n this.translateFn(this.minValue, this.flrLab, 'floor')\n this.getDimension(this.flrLab)\n var position = this.options.rightToLeft\n ? this.barDimension - this.flrLab.rzsd\n : 0\n this.setPosition(this.flrLab, position)\n },\n\n /**\n * Update position of the ceiling label\n *\n * @returns {undefined}\n */\n updateCeilLab: function() {\n this.translateFn(this.maxValue, this.ceilLab, 'ceil')\n this.getDimension(this.ceilLab)\n var position = this.options.rightToLeft\n ? 0\n : this.barDimension - this.ceilLab.rzsd\n this.setPosition(this.ceilLab, position)\n },\n\n /**\n * Update slider handles and label positions\n *\n * @param {string} which\n * @param {number} newPos\n */\n updateHandles: function(which, newPos) {\n if (which === 'lowValue') this.updateLowHandle(newPos)\n else this.updateHighHandle(newPos)\n\n this.updateSelectionBar()\n this.updateTicksScale()\n if (this.range) this.updateCmbLabel()\n },\n\n /**\n * Helper function to work out the position for handle labels depending on RTL or not\n *\n * @param {string} labelName maxLab or minLab\n * @param newPos\n *\n * @returns {number}\n */\n getHandleLabelPos: function(labelName, newPos) {\n var labelRzsd = this[labelName].rzsd,\n nearHandlePos = newPos - labelRzsd / 2 + this.handleHalfDim,\n endOfBarPos = this.barDimension - labelRzsd\n\n if (!this.options.boundPointerLabels) return nearHandlePos\n\n if (\n (this.options.rightToLeft && labelName === 'minLab') ||\n (!this.options.rightToLeft && labelName === 'maxLab')\n ) {\n return Math.min(nearHandlePos, endOfBarPos)\n } else {\n return Math.min(Math.max(nearHandlePos, 0), endOfBarPos)\n }\n },\n\n /**\n * Update low slider handle position and label\n *\n * @param {number} newPos\n * @returns {undefined}\n */\n updateLowHandle: function(newPos) {\n this.setPosition(this.minH, newPos)\n this.translateFn(this.lowValue, this.minLab, 'model')\n this.setPosition(\n this.minLab,\n this.getHandleLabelPos('minLab', newPos)\n )\n\n if (this.options.getPointerColor) {\n var pointercolor = this.getPointerColor('min')\n this.scope.minPointerStyle = {\n backgroundColor: pointercolor\n }\n }\n\n if (this.options.autoHideLimitLabels) {\n this.shFloorCeil()\n }\n },\n\n /**\n * Update high slider handle position and label\n *\n * @param {number} newPos\n * @returns {undefined}\n */\n updateHighHandle: function(newPos) {\n this.setPosition(this.maxH, newPos)\n this.translateFn(this.highValue, this.maxLab, 'high')\n this.setPosition(\n this.maxLab,\n this.getHandleLabelPos('maxLab', newPos)\n )\n\n if (this.options.getPointerColor) {\n var pointercolor = this.getPointerColor('max')\n this.scope.maxPointerStyle = {\n backgroundColor: pointercolor\n }\n }\n if (this.options.autoHideLimitLabels) {\n this.shFloorCeil()\n }\n },\n\n /**\n * Show/hide floor/ceiling label\n *\n * @returns {undefined}\n */\n shFloorCeil: function() {\n // Show based only on hideLimitLabels if pointer labels are hidden\n if (this.options.hidePointerLabels) {\n return\n }\n var flHidden = false,\n clHidden = false,\n isMinLabAtFloor = this.isLabelBelowFloorLab(this.minLab),\n isMinLabAtCeil = this.isLabelAboveCeilLab(this.minLab),\n isMaxLabAtCeil = this.isLabelAboveCeilLab(this.maxLab),\n isCmbLabAtFloor = this.isLabelBelowFloorLab(this.cmbLab),\n isCmbLabAtCeil = this.isLabelAboveCeilLab(this.cmbLab)\n\n if (isMinLabAtFloor) {\n flHidden = true\n this.hideEl(this.flrLab)\n } else {\n flHidden = false\n this.showEl(this.flrLab)\n }\n\n if (isMinLabAtCeil) {\n clHidden = true\n this.hideEl(this.ceilLab)\n } else {\n clHidden = false\n this.showEl(this.ceilLab)\n }\n\n if (this.range) {\n var hideCeil = this.cmbLabelShown ? isCmbLabAtCeil : isMaxLabAtCeil\n var hideFloor = this.cmbLabelShown\n ? isCmbLabAtFloor\n : isMinLabAtFloor\n\n if (hideCeil) {\n this.hideEl(this.ceilLab)\n } else if (!clHidden) {\n this.showEl(this.ceilLab)\n }\n\n // Hide or show floor label\n if (hideFloor) {\n this.hideEl(this.flrLab)\n } else if (!flHidden) {\n this.showEl(this.flrLab)\n }\n }\n },\n\n isLabelBelowFloorLab: function(label) {\n var isRTL = this.options.rightToLeft,\n pos = label.rzsp,\n dim = label.rzsd,\n floorPos = this.flrLab.rzsp,\n floorDim = this.flrLab.rzsd\n return isRTL\n ? pos + dim >= floorPos - 2\n : pos <= floorPos + floorDim + 2\n },\n\n isLabelAboveCeilLab: function(label) {\n var isRTL = this.options.rightToLeft,\n pos = label.rzsp,\n dim = label.rzsd,\n ceilPos = this.ceilLab.rzsp,\n ceilDim = this.ceilLab.rzsd\n return isRTL ? pos <= ceilPos + ceilDim + 2 : pos + dim >= ceilPos - 2\n },\n\n /**\n * Update slider selection bar, combined label and range label\n *\n * @returns {undefined}\n */\n updateSelectionBar: function() {\n var position = 0,\n dimension = 0,\n isSelectionBarFromRight = this.options.rightToLeft\n ? !this.options.showSelectionBarEnd\n : this.options.showSelectionBarEnd,\n positionForRange = this.options.rightToLeft\n ? this.maxH.rzsp + this.handleHalfDim\n : this.minH.rzsp + this.handleHalfDim\n\n if (this.range) {\n dimension = Math.abs(this.maxH.rzsp - this.minH.rzsp)\n position = positionForRange\n } else {\n if (this.options.showSelectionBarFromValue !== null) {\n var center = this.options.showSelectionBarFromValue,\n centerPosition = this.valueToPosition(center),\n isModelGreaterThanCenter = this.options.rightToLeft\n ? this.lowValue <= center\n : this.lowValue > center\n if (isModelGreaterThanCenter) {\n dimension = this.minH.rzsp - centerPosition\n position = centerPosition + this.handleHalfDim\n } else {\n dimension = centerPosition - this.minH.rzsp\n position = this.minH.rzsp + this.handleHalfDim\n }\n } else if (isSelectionBarFromRight) {\n dimension =\n Math.abs(this.maxPos - this.minH.rzsp) + this.handleHalfDim\n position = this.minH.rzsp + this.handleHalfDim\n } else {\n dimension = this.minH.rzsp + this.handleHalfDim\n position = 0\n }\n }\n this.setDimension(this.selBar, dimension)\n this.setPosition(this.selBar, position)\n if (this.range && this.options.showOuterSelectionBars) {\n if (this.options.rightToLeft) {\n this.setDimension(this.rightOutSelBar, position)\n this.setPosition(this.rightOutSelBar, 0)\n this.setDimension(\n this.leftOutSelBar,\n this.getDimension(this.fullBar) - (position + dimension)\n )\n this.setPosition(this.leftOutSelBar, position + dimension)\n } else {\n this.setDimension(this.leftOutSelBar, position)\n this.setPosition(this.leftOutSelBar, 0)\n this.setDimension(\n this.rightOutSelBar,\n this.getDimension(this.fullBar) - (position + dimension)\n )\n this.setPosition(this.rightOutSelBar, position + dimension)\n }\n }\n if (this.options.getSelectionBarColor) {\n var color = this.getSelectionBarColor()\n this.scope.barStyle = {\n backgroundColor: color\n }\n } else if (this.options.selectionBarGradient) {\n var offset =\n this.options.showSelectionBarFromValue !== null\n ? this.valueToPosition(this.options.showSelectionBarFromValue)\n : 0,\n reversed = (offset - position > 0) ^ isSelectionBarFromRight,\n direction = this.options.vertical\n ? reversed ? 'bottom' : 'top'\n : reversed ? 'left' : 'right'\n this.scope.barStyle = {\n backgroundImage:\n 'linear-gradient(to ' +\n direction +\n ', ' +\n this.options.selectionBarGradient.from +\n ' 0%,' +\n this.options.selectionBarGradient.to +\n ' 100%)'\n }\n if (this.options.vertical) {\n this.scope.barStyle.backgroundPosition =\n 'center ' +\n (offset +\n dimension +\n position +\n (reversed ? -this.handleHalfDim : 0)) +\n 'px'\n this.scope.barStyle.backgroundSize =\n '100% ' + (this.barDimension - this.handleHalfDim) + 'px'\n } else {\n this.scope.barStyle.backgroundPosition =\n offset -\n position +\n (reversed ? this.handleHalfDim : 0) +\n 'px center'\n this.scope.barStyle.backgroundSize =\n this.barDimension - this.handleHalfDim + 'px 100%'\n }\n }\n },\n\n /**\n * Wrapper around the getSelectionBarColor of the user to pass to\n * correct parameters\n */\n getSelectionBarColor: function() {\n if (this.range)\n return this.options.getSelectionBarColor(\n this.scope.rzSliderModel,\n this.scope.rzSliderHigh\n )\n return this.options.getSelectionBarColor(this.scope.rzSliderModel)\n },\n\n /**\n * Wrapper around the getPointerColor of the user to pass to\n * correct parameters\n */\n getPointerColor: function(pointerType) {\n if (pointerType === 'max') {\n return this.options.getPointerColor(\n this.scope.rzSliderHigh,\n pointerType\n )\n }\n return this.options.getPointerColor(\n this.scope.rzSliderModel,\n pointerType\n )\n },\n\n /**\n * Wrapper around the getTickColor of the user to pass to\n * correct parameters\n */\n getTickColor: function(value) {\n return this.options.getTickColor(value)\n },\n\n /**\n * Update combined label position and value\n *\n * @returns {undefined}\n */\n updateCmbLabel: function() {\n var isLabelOverlap = null\n if (this.options.rightToLeft) {\n isLabelOverlap =\n this.minLab.rzsp - this.minLab.rzsd - 10 <= this.maxLab.rzsp\n } else {\n isLabelOverlap =\n this.minLab.rzsp + this.minLab.rzsd + 10 >= this.maxLab.rzsp\n }\n\n if (isLabelOverlap) {\n var lowTr = this.getDisplayValue(this.lowValue, 'model'),\n highTr = this.getDisplayValue(this.highValue, 'high'),\n labelVal = ''\n if (this.options.mergeRangeLabelsIfSame && lowTr === highTr) {\n labelVal = lowTr\n } else {\n labelVal = this.options.rightToLeft\n ? highTr + ' - ' + lowTr\n : lowTr + ' - ' + highTr\n }\n\n this.translateFn(labelVal, this.cmbLab, 'cmb', false)\n var pos = this.options.boundPointerLabels\n ? Math.min(\n Math.max(\n this.selBar.rzsp +\n this.selBar.rzsd / 2 -\n this.cmbLab.rzsd / 2,\n 0\n ),\n this.barDimension - this.cmbLab.rzsd\n )\n : this.selBar.rzsp + this.selBar.rzsd / 2 - this.cmbLab.rzsd / 2\n\n this.setPosition(this.cmbLab, pos)\n this.cmbLabelShown = true\n this.hideEl(this.minLab)\n this.hideEl(this.maxLab)\n this.showEl(this.cmbLab)\n } else {\n this.cmbLabelShown = false\n this.updateHighHandle(this.valueToPosition(this.highValue))\n this.updateLowHandle(this.valueToPosition(this.lowValue))\n this.showEl(this.maxLab)\n this.showEl(this.minLab)\n this.hideEl(this.cmbLab)\n }\n if (this.options.autoHideLimitLabels) {\n this.shFloorCeil()\n }\n },\n\n /**\n * Return the translated value if a translate function is provided else the original value\n * @param value\n * @param which if it's min or max handle\n * @returns {*}\n */\n getDisplayValue: function(value, which) {\n if (this.options.stepsArray && !this.options.bindIndexForStepsArray) {\n value = this.getStepValue(value)\n }\n return this.customTrFn(value, this.options.id, which)\n },\n\n /**\n * Round value to step and precision based on minValue\n *\n * @param {number} value\n * @param {number} customStep a custom step to override the defined step\n * @returns {number}\n */\n roundStep: function(value, customStep) {\n var step = customStep ? customStep : this.step,\n steppedDifference = parseFloat(\n (value - this.minValue) / step\n ).toPrecision(12)\n steppedDifference = Math.round(+steppedDifference) * step\n var newValue = (this.minValue + steppedDifference).toFixed(\n this.precision\n )\n return +newValue\n },\n\n /**\n * Hide element\n *\n * @param element\n * @returns {jqLite} The jqLite wrapped DOM element\n */\n hideEl: function(element) {\n return element.css({\n visibility: 'hidden'\n })\n },\n\n /**\n * Show element\n *\n * @param element The jqLite wrapped DOM element\n * @returns {jqLite} The jqLite\n */\n showEl: function(element) {\n if (!!element.rzAlwaysHide) {\n return element\n }\n\n return element.css({\n visibility: 'visible'\n })\n },\n\n /**\n * Set element left/top position depending on whether slider is horizontal or vertical\n *\n * @param {jqLite} elem The jqLite wrapped DOM element\n * @param {number} pos\n * @returns {number}\n */\n setPosition: function(elem, pos) {\n elem.rzsp = pos\n var css = {}\n css[this.positionProperty] = Math.round(pos) + 'px'\n elem.css(css)\n return pos\n },\n\n /**\n * Get element width/height depending on whether slider is horizontal or vertical\n *\n * @param {jqLite} elem The jqLite wrapped DOM element\n * @returns {number}\n */\n getDimension: function(elem) {\n var val = elem[0].getBoundingClientRect()\n if (this.options.vertical)\n elem.rzsd = (val.bottom - val.top) * this.options.scale\n else elem.rzsd = (val.right - val.left) * this.options.scale\n return elem.rzsd\n },\n\n /**\n * Set element width/height depending on whether slider is horizontal or vertical\n *\n * @param {jqLite} elem The jqLite wrapped DOM element\n * @param {number} dim\n * @returns {number}\n */\n setDimension: function(elem, dim) {\n elem.rzsd = dim\n var css = {}\n css[this.dimensionProperty] = Math.round(dim) + 'px'\n elem.css(css)\n return dim\n },\n\n /**\n * Returns a value that is within slider range\n *\n * @param {number} val\n * @returns {number}\n */\n sanitizeValue: function(val) {\n return Math.min(Math.max(val, this.minValue), this.maxValue)\n },\n\n /**\n * Translate value to pixel position\n *\n * @param {number} val\n * @returns {number}\n */\n valueToPosition: function(val) {\n var fn = this.linearValueToPosition\n if (this.options.customValueToPosition)\n fn = this.options.customValueToPosition\n else if (this.options.logScale) fn = this.logValueToPosition\n\n val = this.sanitizeValue(val)\n var percent = fn(val, this.minValue, this.maxValue) || 0\n if (this.options.rightToLeft) percent = 1 - percent\n return percent * this.maxPos\n },\n\n linearValueToPosition: function(val, minVal, maxVal) {\n var range = maxVal - minVal\n return (val - minVal) / range\n },\n\n logValueToPosition: function(val, minVal, maxVal) {\n val = Math.log(val)\n minVal = Math.log(minVal)\n maxVal = Math.log(maxVal)\n var range = maxVal - minVal\n return (val - minVal) / range\n },\n\n /**\n * Translate position to model value\n *\n * @param {number} position\n * @returns {number}\n */\n positionToValue: function(position) {\n var percent = position / this.maxPos\n if (this.options.rightToLeft) percent = 1 - percent\n var fn = this.linearPositionToValue\n if (this.options.customPositionToValue)\n fn = this.options.customPositionToValue\n else if (this.options.logScale) fn = this.logPositionToValue\n return fn(percent, this.minValue, this.maxValue) || 0\n },\n\n linearPositionToValue: function(percent, minVal, maxVal) {\n return percent * (maxVal - minVal) + minVal\n },\n\n logPositionToValue: function(percent, minVal, maxVal) {\n minVal = Math.log(minVal)\n maxVal = Math.log(maxVal)\n var value = percent * (maxVal - minVal) + minVal\n return Math.exp(value)\n },\n\n getEventAttr: function(event, attr) {\n return event.originalEvent === undefined\n ? event[attr]\n : event.originalEvent[attr]\n },\n\n // Events\n /**\n * Get the X-coordinate or Y-coordinate of an event\n *\n * @param {Object} event The event\n * @param targetTouchId The identifier of the touch with the X/Y coordinates\n * @returns {number}\n */\n getEventXY: function(event, targetTouchId) {\n /* http://stackoverflow.com/a/12336075/282882 */\n //noinspection JSLint\n var clientXY = this.options.vertical ? 'clientY' : 'clientX'\n if (event[clientXY] !== undefined) {\n return event[clientXY]\n }\n\n var touches = this.getEventAttr(event, 'touches')\n\n if (targetTouchId !== undefined) {\n for (var i = 0; i < touches.length; i++) {\n if (touches[i].identifier === targetTouchId) {\n return touches[i][clientXY]\n }\n }\n }\n\n // If no target touch or the target touch was not found in the event\n // returns the coordinates of the first touch\n return touches[0][clientXY]\n },\n\n /**\n * Compute the event position depending on whether the slider is horizontal or vertical\n * @param event\n * @param targetTouchId If targetTouchId is provided it will be considered the position of that\n * @returns {number}\n */\n getEventPosition: function(event, targetTouchId) {\n var sliderPos = this.sliderElem.rzsp,\n eventPos = 0\n if (this.options.vertical)\n eventPos = -this.getEventXY(event, targetTouchId) + sliderPos\n else eventPos = this.getEventXY(event, targetTouchId) - sliderPos\n return eventPos * this.options.scale - this.handleHalfDim // #346 handleHalfDim is already scaled\n },\n\n /**\n * Get event names for move and event end\n *\n * @param {Event} event The event\n *\n * @return {{moveEvent: string, endEvent: string}}\n */\n getEventNames: function(event) {\n var eventNames = {\n moveEvent: '',\n endEvent: ''\n }\n\n if (this.getEventAttr(event, 'touches')) {\n eventNames.moveEvent = 'touchmove'\n eventNames.endEvent = 'touchend'\n } else {\n eventNames.moveEvent = 'mousemove'\n eventNames.endEvent = 'mouseup'\n }\n\n return eventNames\n },\n\n /**\n * Get the handle closest to an event.\n *\n * @param event {Event} The event\n * @returns {jqLite} The handle closest to the event.\n */\n getNearestHandle: function(event) {\n if (!this.range) {\n return this.minH\n }\n var position = this.getEventPosition(event),\n distanceMin = Math.abs(position - this.minH.rzsp),\n distanceMax = Math.abs(position - this.maxH.rzsp)\n if (distanceMin < distanceMax) return this.minH\n else if (distanceMin > distanceMax) return this.maxH\n else if (!this.options.rightToLeft)\n //if event is at the same distance from min/max then if it's at left of minH, we return minH else maxH\n return position < this.minH.rzsp ? this.minH : this.maxH\n else\n //reverse in rtl\n return position > this.minH.rzsp ? this.minH : this.maxH\n },\n\n /**\n * Wrapper function to focus an angular element\n *\n * @param el {AngularElement} the element to focus\n */\n focusElement: function(el) {\n var DOM_ELEMENT = 0\n el[DOM_ELEMENT].focus()\n },\n\n /**\n * Bind mouse and touch events to slider handles\n *\n * @returns {undefined}\n */\n bindEvents: function() {\n var barTracking, barStart, barMove\n\n if (this.options.draggableRange) {\n barTracking = 'rzSliderDrag'\n barStart = this.onDragStart\n barMove = this.onDragMove\n } else {\n barTracking = 'lowValue'\n barStart = this.onStart\n barMove = this.onMove\n }\n\n if (!this.options.onlyBindHandles) {\n this.selBar.on(\n 'mousedown',\n angular.bind(this, barStart, null, barTracking)\n )\n this.selBar.on(\n 'mousedown',\n angular.bind(this, barMove, this.selBar)\n )\n }\n\n if (this.options.draggableRangeOnly) {\n this.minH.on(\n 'mousedown',\n angular.bind(this, barStart, null, barTracking)\n )\n this.maxH.on(\n 'mousedown',\n angular.bind(this, barStart, null, barTracking)\n )\n } else {\n this.minH.on(\n 'mousedown',\n angular.bind(this, this.onStart, this.minH, 'lowValue')\n )\n if (this.range) {\n this.maxH.on(\n 'mousedown',\n angular.bind(this, this.onStart, this.maxH, 'highValue')\n )\n }\n if (!this.options.onlyBindHandles) {\n this.fullBar.on(\n 'mousedown',\n angular.bind(this, this.onStart, null, null)\n )\n this.fullBar.on(\n 'mousedown',\n angular.bind(this, this.onMove, this.fullBar)\n )\n this.ticks.on(\n 'mousedown',\n angular.bind(this, this.onStart, null, null)\n )\n this.ticks.on(\n 'mousedown',\n angular.bind(this, this.onTickClick, this.ticks)\n )\n }\n }\n\n if (!this.options.onlyBindHandles) {\n this.selBar.on(\n 'touchstart',\n angular.bind(this, barStart, null, barTracking)\n )\n this.selBar.on(\n 'touchstart',\n angular.bind(this, barMove, this.selBar)\n )\n }\n if (this.options.draggableRangeOnly) {\n this.minH.on(\n 'touchstart',\n angular.bind(this, barStart, null, barTracking)\n )\n this.maxH.on(\n 'touchstart',\n angular.bind(this, barStart, null, barTracking)\n )\n } else {\n this.minH.on(\n 'touchstart',\n angular.bind(this, this.onStart, this.minH, 'lowValue')\n )\n if (this.range) {\n this.maxH.on(\n 'touchstart',\n angular.bind(this, this.onStart, this.maxH, 'highValue')\n )\n }\n if (!this.options.onlyBindHandles) {\n this.fullBar.on(\n 'touchstart',\n angular.bind(this, this.onStart, null, null)\n )\n this.fullBar.on(\n 'touchstart',\n angular.bind(this, this.onMove, this.fullBar)\n )\n this.ticks.on(\n 'touchstart',\n angular.bind(this, this.onStart, null, null)\n )\n this.ticks.on(\n 'touchstart',\n angular.bind(this, this.onTickClick, this.ticks)\n )\n }\n }\n\n if (this.options.keyboardSupport) {\n this.minH.on(\n 'focus',\n angular.bind(this, this.onPointerFocus, this.minH, 'lowValue')\n )\n if (this.range) {\n this.maxH.on(\n 'focus',\n angular.bind(this, this.onPointerFocus, this.maxH, 'highValue')\n )\n }\n }\n },\n\n /**\n * Unbind mouse and touch events to slider handles\n *\n * @returns {undefined}\n */\n unbindEvents: function() {\n this.minH.off()\n this.maxH.off()\n this.fullBar.off()\n this.selBar.off()\n this.ticks.off()\n },\n\n /**\n * onStart event handler\n *\n * @param {?Object} pointer The jqLite wrapped DOM element; if null, the closest handle is used\n * @param {?string} ref The name of the handle being changed; if null, the closest handle's value is modified\n * @param {Event} event The event\n * @returns {undefined}\n */\n onStart: function(pointer, ref, event) {\n var ehMove,\n ehEnd,\n eventNames = this.getEventNames(event)\n\n event.stopPropagation()\n event.preventDefault()\n\n // We have to do this in case the HTML where the sliders are on\n // have been animated into view.\n this.calcViewDimensions()\n\n if (pointer) {\n this.tracking = ref\n } else {\n pointer = this.getNearestHandle(event)\n this.tracking = pointer === this.minH ? 'lowValue' : 'highValue'\n }\n\n pointer.addClass('rz-active')\n\n if (this.options.keyboardSupport) this.focusElement(pointer)\n\n ehMove = angular.bind(\n this,\n this.dragging.active ? this.onDragMove : this.onMove,\n pointer\n )\n ehEnd = angular.bind(this, this.onEnd, ehMove)\n\n $document.on(eventNames.moveEvent, ehMove)\n $document.on(eventNames.endEvent, ehEnd)\n this.endHandlerToBeRemovedOnEnd = ehEnd\n\n this.callOnStart()\n\n var changedTouches = this.getEventAttr(event, 'changedTouches')\n if (changedTouches) {\n // Store the touch identifier\n if (!this.touchId) {\n this.isDragging = true\n this.touchId = changedTouches[0].identifier\n }\n }\n },\n\n /**\n * onMove event handler\n *\n * @param {jqLite} pointer\n * @param {Event} event The event\n * @param {boolean} fromTick if the event occured on a tick or not\n * @returns {undefined}\n */\n onMove: function(pointer, event, fromTick) {\n var changedTouches = this.getEventAttr(event, 'changedTouches')\n var touchForThisSlider\n if (changedTouches) {\n for (var i = 0; i < changedTouches.length; i++) {\n if (changedTouches[i].identifier === this.touchId) {\n touchForThisSlider = changedTouches[i]\n break\n }\n }\n }\n\n if (changedTouches && !touchForThisSlider) {\n return\n }\n\n var newPos = this.getEventPosition(\n event,\n touchForThisSlider ? touchForThisSlider.identifier : undefined\n ),\n newValue,\n ceilValue = this.options.rightToLeft\n ? this.minValue\n : this.maxValue,\n flrValue = this.options.rightToLeft ? this.maxValue : this.minValue\n\n if (newPos <= 0) {\n newValue = flrValue\n } else if (newPos >= this.maxPos) {\n newValue = ceilValue\n } else {\n newValue = this.positionToValue(newPos)\n if (fromTick && angular.isNumber(this.options.showTicks))\n newValue = this.roundStep(newValue, this.options.showTicks)\n else newValue = this.roundStep(newValue)\n }\n this.positionTrackingHandle(newValue)\n },\n\n /**\n * onEnd event handler\n *\n * @param {Event} event The event\n * @param {Function} ehMove The bound move event handler\n * @returns {undefined}\n */\n onEnd: function(ehMove, event) {\n var changedTouches = this.getEventAttr(event, 'changedTouches')\n if (changedTouches && changedTouches[0].identifier !== this.touchId) {\n return\n }\n this.isDragging = false\n this.touchId = null\n\n if (!this.options.keyboardSupport) {\n this.minH.removeClass('rz-active')\n this.maxH.removeClass('rz-active')\n this.tracking = ''\n }\n this.dragging.active = false\n\n var eventName = this.getEventNames(event)\n $document.off(eventName.moveEvent, ehMove)\n $document.off(eventName.endEvent, this.endHandlerToBeRemovedOnEnd)\n this.endHandlerToBeRemovedOnEnd = null\n this.callOnEnd()\n },\n\n onTickClick: function(pointer, event) {\n this.onMove(pointer, event, true)\n },\n\n onPointerFocus: function(pointer, ref) {\n this.tracking = ref\n pointer.one('blur', angular.bind(this, this.onPointerBlur, pointer))\n pointer.on('keydown', angular.bind(this, this.onKeyboardEvent))\n pointer.on('keyup', angular.bind(this, this.onKeyUp))\n this.firstKeyDown = true\n pointer.addClass('rz-active')\n\n this.currentFocusElement = {\n pointer: pointer,\n ref: ref\n }\n },\n\n onKeyUp: function() {\n this.firstKeyDown = true\n this.callOnEnd()\n },\n\n onPointerBlur: function(pointer) {\n pointer.off('keydown')\n pointer.off('keyup')\n pointer.removeClass('rz-active')\n if (!this.isDragging) {\n this.tracking = ''\n this.currentFocusElement = null\n }\n },\n\n /**\n * Key actions helper function\n *\n * @param {number} currentValue value of the slider\n *\n * @returns {?Object} action value mappings\n */\n getKeyActions: function(currentValue) {\n var increaseStep = currentValue + this.step,\n decreaseStep = currentValue - this.step,\n increasePage = currentValue + this.valueRange / 10,\n decreasePage = currentValue - this.valueRange / 10\n\n if (this.options.reversedControls) {\n increaseStep = currentValue - this.step\n decreaseStep = currentValue + this.step\n increasePage = currentValue - this.valueRange / 10\n decreasePage = currentValue + this.valueRange / 10\n }\n\n //Left to right default actions\n var actions = {\n UP: increaseStep,\n DOWN: decreaseStep,\n LEFT: decreaseStep,\n RIGHT: increaseStep,\n PAGEUP: increasePage,\n PAGEDOWN: decreasePage,\n HOME: this.options.reversedControls ? this.maxValue : this.minValue,\n END: this.options.reversedControls ? this.minValue : this.maxValue\n }\n //right to left means swapping right and left arrows\n if (this.options.rightToLeft) {\n actions.LEFT = increaseStep\n actions.RIGHT = decreaseStep\n // right to left and vertical means we also swap up and down\n if (this.options.vertical) {\n actions.UP = decreaseStep\n actions.DOWN = increaseStep\n }\n }\n return actions\n },\n\n onKeyboardEvent: function(event) {\n var currentValue = this[this.tracking],\n keyCode = event.keyCode || event.which,\n keys = {\n 38: 'UP',\n 40: 'DOWN',\n 37: 'LEFT',\n 39: 'RIGHT',\n 33: 'PAGEUP',\n 34: 'PAGEDOWN',\n 36: 'HOME',\n 35: 'END'\n },\n actions = this.getKeyActions(currentValue),\n key = keys[keyCode],\n action = actions[key]\n if (action == null || this.tracking === '') return\n event.preventDefault()\n\n if (this.firstKeyDown) {\n this.firstKeyDown = false\n this.callOnStart()\n }\n\n var self = this\n $timeout(function() {\n var newValue = self.roundStep(self.sanitizeValue(action))\n if (!self.options.draggableRangeOnly) {\n self.positionTrackingHandle(newValue)\n } else {\n var difference = self.highValue - self.lowValue,\n newMinValue,\n newMaxValue\n if (self.tracking === 'lowValue') {\n newMinValue = newValue\n newMaxValue = newValue + difference\n if (newMaxValue > self.maxValue) {\n newMaxValue = self.maxValue\n newMinValue = newMaxValue - difference\n }\n } else {\n newMaxValue = newValue\n newMinValue = newValue - difference\n if (newMinValue < self.minValue) {\n newMinValue = self.minValue\n newMaxValue = newMinValue + difference\n }\n }\n self.positionTrackingBar(newMinValue, newMaxValue)\n }\n })\n },\n\n /**\n * onDragStart event handler\n *\n * Handles dragging of the middle bar.\n *\n * @param {Object} pointer The jqLite wrapped DOM element\n * @param {string} ref One of the refLow, refHigh values\n * @param {Event} event The event\n * @returns {undefined}\n */\n onDragStart: function(pointer, ref, event) {\n var position = this.getEventPosition(event)\n this.dragging = {\n active: true,\n value: this.positionToValue(position),\n difference: this.highValue - this.lowValue,\n lowLimit: this.options.rightToLeft\n ? this.minH.rzsp - position\n : position - this.minH.rzsp,\n highLimit: this.options.rightToLeft\n ? position - this.maxH.rzsp\n : this.maxH.rzsp - position\n }\n\n this.onStart(pointer, ref, event)\n },\n\n /**\n * getValue helper function\n *\n * gets max or min value depending on whether the newPos is outOfBounds above or below the bar and rightToLeft\n *\n * @param {string} type 'max' || 'min' The value we are calculating\n * @param {number} newPos The new position\n * @param {boolean} outOfBounds Is the new position above or below the max/min?\n * @param {boolean} isAbove Is the new position above the bar if out of bounds?\n *\n * @returns {number}\n */\n getValue: function(type, newPos, outOfBounds, isAbove) {\n var isRTL = this.options.rightToLeft,\n value = null\n\n if (type === 'min') {\n if (outOfBounds) {\n if (isAbove) {\n value = isRTL\n ? this.minValue\n : this.maxValue - this.dragging.difference\n } else {\n value = isRTL\n ? this.maxValue - this.dragging.difference\n : this.minValue\n }\n } else {\n value = isRTL\n ? this.positionToValue(newPos + this.dragging.lowLimit)\n : this.positionToValue(newPos - this.dragging.lowLimit)\n }\n } else {\n if (outOfBounds) {\n if (isAbove) {\n value = isRTL\n ? this.minValue + this.dragging.difference\n : this.maxValue\n } else {\n value = isRTL\n ? this.maxValue\n : this.minValue + this.dragging.difference\n }\n } else {\n if (isRTL) {\n value =\n this.positionToValue(newPos + this.dragging.lowLimit) +\n this.dragging.difference\n } else {\n value =\n this.positionToValue(newPos - this.dragging.lowLimit) +\n this.dragging.difference\n }\n }\n }\n return this.roundStep(value)\n },\n\n /**\n * onDragMove event handler\n *\n * Handles dragging of the middle bar.\n *\n * @param {jqLite} pointer\n * @param {Event} event The event\n * @returns {undefined}\n */\n onDragMove: function(pointer, event) {\n var newPos = this.getEventPosition(event),\n newMinValue,\n newMaxValue,\n ceilLimit,\n flrLimit,\n isUnderFlrLimit,\n isOverCeilLimit,\n flrH,\n ceilH\n\n if (this.options.rightToLeft) {\n ceilLimit = this.dragging.lowLimit\n flrLimit = this.dragging.highLimit\n flrH = this.maxH\n ceilH = this.minH\n } else {\n ceilLimit = this.dragging.highLimit\n flrLimit = this.dragging.lowLimit\n flrH = this.minH\n ceilH = this.maxH\n }\n isUnderFlrLimit = newPos <= flrLimit\n isOverCeilLimit = newPos >= this.maxPos - ceilLimit\n\n if (isUnderFlrLimit) {\n if (flrH.rzsp === 0) return\n newMinValue = this.getValue('min', newPos, true, false)\n newMaxValue = this.getValue('max', newPos, true, false)\n } else if (isOverCeilLimit) {\n if (ceilH.rzsp === this.maxPos) return\n newMaxValue = this.getValue('max', newPos, true, true)\n newMinValue = this.getValue('min', newPos, true, true)\n } else {\n newMinValue = this.getValue('min', newPos, false)\n newMaxValue = this.getValue('max', newPos, false)\n }\n this.positionTrackingBar(newMinValue, newMaxValue)\n },\n\n /**\n * Set the new value and position for the entire bar\n *\n * @param {number} newMinValue the new minimum value\n * @param {number} newMaxValue the new maximum value\n */\n positionTrackingBar: function(newMinValue, newMaxValue) {\n if (\n this.options.minLimit != null &&\n newMinValue < this.options.minLimit\n ) {\n newMinValue = this.options.minLimit\n newMaxValue = newMinValue + this.dragging.difference\n }\n if (\n this.options.maxLimit != null &&\n newMaxValue > this.options.maxLimit\n ) {\n newMaxValue = this.options.maxLimit\n newMinValue = newMaxValue - this.dragging.difference\n }\n\n this.lowValue = newMinValue\n this.highValue = newMaxValue\n this.applyLowValue()\n if (this.range) this.applyHighValue()\n this.applyModel(true)\n this.updateHandles('lowValue', this.valueToPosition(newMinValue))\n this.updateHandles('highValue', this.valueToPosition(newMaxValue))\n },\n\n /**\n * Set the new value and position to the current tracking handle\n *\n * @param {number} newValue new model value\n */\n positionTrackingHandle: function(newValue) {\n var valueChanged = false\n newValue = this.applyMinMaxLimit(newValue)\n if (this.range) {\n if (this.options.pushRange) {\n newValue = this.applyPushRange(newValue)\n valueChanged = true\n } else {\n if (this.options.noSwitching) {\n if (this.tracking === 'lowValue' && newValue > this.highValue)\n newValue = this.applyMinMaxRange(this.highValue)\n else if (\n this.tracking === 'highValue' &&\n newValue < this.lowValue\n )\n newValue = this.applyMinMaxRange(this.lowValue)\n }\n newValue = this.applyMinMaxRange(newValue)\n /* This is to check if we need to switch the min and max handles */\n if (this.tracking === 'lowValue' && newValue > this.highValue) {\n this.lowValue = this.highValue\n this.applyLowValue()\n this.applyModel()\n this.updateHandles(this.tracking, this.maxH.rzsp)\n this.updateAriaAttributes()\n this.tracking = 'highValue'\n this.minH.removeClass('rz-active')\n this.maxH.addClass('rz-active')\n if (this.options.keyboardSupport) this.focusElement(this.maxH)\n valueChanged = true\n } else if (\n this.tracking === 'highValue' &&\n newValue < this.lowValue\n ) {\n this.highValue = this.lowValue\n this.applyHighValue()\n this.applyModel()\n this.updateHandles(this.tracking, this.minH.rzsp)\n this.updateAriaAttributes()\n this.tracking = 'lowValue'\n this.maxH.removeClass('rz-active')\n this.minH.addClass('rz-active')\n if (this.options.keyboardSupport) this.focusElement(this.minH)\n valueChanged = true\n }\n }\n }\n\n if (this[this.tracking] !== newValue) {\n this[this.tracking] = newValue\n if (this.tracking === 'lowValue') this.applyLowValue()\n else this.applyHighValue()\n this.applyModel()\n this.updateHandles(this.tracking, this.valueToPosition(newValue))\n this.updateAriaAttributes()\n valueChanged = true\n }\n\n if (valueChanged) this.applyModel(true)\n },\n\n applyMinMaxLimit: function(newValue) {\n if (this.options.minLimit != null && newValue < this.options.minLimit)\n return this.options.minLimit\n if (this.options.maxLimit != null && newValue > this.options.maxLimit)\n return this.options.maxLimit\n return newValue\n },\n\n applyMinMaxRange: function(newValue) {\n var oppositeValue =\n this.tracking === 'lowValue' ? this.highValue : this.lowValue,\n difference = Math.abs(newValue - oppositeValue)\n if (this.options.minRange != null) {\n if (difference < this.options.minRange) {\n if (this.tracking === 'lowValue')\n return this.highValue - this.options.minRange\n else return this.lowValue + this.options.minRange\n }\n }\n if (this.options.maxRange != null) {\n if (difference > this.options.maxRange) {\n if (this.tracking === 'lowValue')\n return this.highValue - this.options.maxRange\n else return this.lowValue + this.options.maxRange\n }\n }\n return newValue\n },\n\n applyPushRange: function(newValue) {\n var difference =\n this.tracking === 'lowValue'\n ? this.highValue - newValue\n : newValue - this.lowValue,\n minRange =\n this.options.minRange !== null\n ? this.options.minRange\n : this.options.step,\n maxRange = this.options.maxRange\n // if smaller than minRange\n if (difference < minRange) {\n if (this.tracking === 'lowValue') {\n this.highValue = Math.min(newValue + minRange, this.maxValue)\n newValue = this.highValue - minRange\n this.applyHighValue()\n this.updateHandles(\n 'highValue',\n this.valueToPosition(this.highValue)\n )\n } else {\n this.lowValue = Math.max(newValue - minRange, this.minValue)\n newValue = this.lowValue + minRange\n this.applyLowValue()\n this.updateHandles(\n 'lowValue',\n this.valueToPosition(this.lowValue)\n )\n }\n this.updateAriaAttributes()\n } else if (maxRange !== null && difference > maxRange) {\n // if greater than maxRange\n if (this.tracking === 'lowValue') {\n this.highValue = newValue + maxRange\n this.applyHighValue()\n this.updateHandles(\n 'highValue',\n this.valueToPosition(this.highValue)\n )\n } else {\n this.lowValue = newValue - maxRange\n this.applyLowValue()\n this.updateHandles(\n 'lowValue',\n this.valueToPosition(this.lowValue)\n )\n }\n this.updateAriaAttributes()\n }\n return newValue\n },\n\n /**\n * Apply the model values using scope.$apply.\n * We wrap it with the internalChange flag to avoid the watchers to be called\n */\n applyModel: function(callOnChange) {\n this.internalChange = true\n this.scope.$apply()\n callOnChange && this.callOnChange()\n this.internalChange = false\n },\n\n /**\n * Call the onStart callback if defined\n * The callback call is wrapped in a $evalAsync to ensure that its result will be applied to the scope.\n *\n * @returns {undefined}\n */\n callOnStart: function() {\n if (this.options.onStart) {\n var self = this,\n pointerType = this.tracking === 'lowValue' ? 'min' : 'max'\n this.scope.$evalAsync(function() {\n self.options.onStart(\n self.options.id,\n self.scope.rzSliderModel,\n self.scope.rzSliderHigh,\n pointerType\n )\n })\n }\n },\n\n /**\n * Call the onChange callback if defined\n * The callback call is wrapped in a $evalAsync to ensure that its result will be applied to the scope.\n *\n * @returns {undefined}\n */\n callOnChange: function() {\n if (this.options.onChange) {\n var self = this,\n pointerType = this.tracking === 'lowValue' ? 'min' : 'max'\n this.scope.$evalAsync(function() {\n self.options.onChange(\n self.options.id,\n self.scope.rzSliderModel,\n self.scope.rzSliderHigh,\n pointerType\n )\n })\n }\n },\n\n /**\n * Call the onEnd callback if defined\n * The callback call is wrapped in a $evalAsync to ensure that its result will be applied to the scope.\n *\n * @returns {undefined}\n */\n callOnEnd: function() {\n if (this.options.onEnd) {\n var self = this,\n pointerType = this.tracking === 'lowValue' ? 'min' : 'max'\n this.scope.$evalAsync(function() {\n self.options.onEnd(\n self.options.id,\n self.scope.rzSliderModel,\n self.scope.rzSliderHigh,\n pointerType\n )\n })\n }\n this.scope.$emit('slideEnded')\n }\n }\n\n return Slider\n }])\n .directive('rzslider', ['RzSlider', function(RzSlider) {\n 'use strict'\n\n return {\n restrict: 'AE',\n replace: true,\n scope: {\n rzSliderModel: '=?',\n rzSliderHigh: '=?',\n rzSliderOptions: '&?',\n rzSliderTplUrl: '@'\n },\n\n /**\n * Return template URL\n *\n * @param {jqLite} elem\n * @param {Object} attrs\n * @return {string}\n */\n templateUrl: function(elem, attrs) {\n //noinspection JSUnresolvedVariable\n return attrs.rzSliderTplUrl || 'rzSliderTpl.html'\n },\n\n link: function(scope, elem) {\n scope.slider = new RzSlider(scope, elem) //attach on scope so we can test it\n }\n }\n }])\n\n // IDE assist\n\n /**\n * @name ngScope\n *\n * @property {number} rzSliderModel\n * @property {number} rzSliderHigh\n * @property {Object} rzSliderOptions\n */\n\n /**\n * @name jqLite\n *\n * @property {number|undefined} rzsp rzslider label position position\n * @property {number|undefined} rzsd rzslider element dimension\n * @property {string|undefined} rzsv rzslider label value/text\n * @property {Function} css\n * @property {Function} text\n */\n\n /**\n * @name Event\n * @property {Array} touches\n * @property {Event} originalEvent\n */\n\n /**\n * @name ThrottleOptions\n *\n * @property {boolean} leading\n * @property {boolean} trailing\n */\n\n module.run(['$templateCache', function($templateCache) {\n 'use strict';\n\n $templateCache.put('rzSliderTpl.html',\n \"
  • {{ t.value }} {{ t.legend }}
\"\n );\n\n}]);\n\n return module.name\n})\n;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/angularjs-slider/dist/rzslider.js\n// module id = 328\n// module chunks = 0","require('./release/angular-recaptcha.js');\nmodule.exports = 'vcRecaptcha';\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/angular-recaptcha/index.js\n// module id = 36\n// module chunks = 0 1 2 3","/**\n * @license angular-recaptcha build:2018-05-09\n * https://github.com/vividcortex/angular-recaptcha\n * Copyright (c) 2018 VividCortex\n**/\n\n/*global angular, Recaptcha */\n(function (ng) {\n 'use strict';\n\n ng.module('vcRecaptcha', []);\n\n}(angular));\n\n/*global angular */\n(function (ng) {\n 'use strict';\n\n function throwNoKeyException() {\n throw new Error('You need to set the \"key\" attribute to your public reCaptcha key. If you don\\'t have a key, please get one from https://www.google.com/recaptcha/admin/create');\n }\n\n var app = ng.module('vcRecaptcha');\n\n /**\n * An angular service to wrap the reCaptcha API\n */\n app.provider('vcRecaptchaService', function(){\n var provider = this;\n var config = {};\n provider.onLoadFunctionName = 'vcRecaptchaApiLoaded';\n\n /**\n * Sets the reCaptcha configuration values which will be used by default is not specified in a specific directive instance.\n *\n * @since 2.5.0\n * @param defaults object which overrides the current defaults object.\n */\n provider.setDefaults = function(defaults){\n ng.copy(defaults, config);\n };\n\n /**\n * Sets the reCaptcha key which will be used by default is not specified in a specific directive instance.\n *\n * @since 2.5.0\n * @param siteKey the reCaptcha public key (refer to the README file if you don't know what this is).\n */\n provider.setSiteKey = function(siteKey){\n config.key = siteKey;\n };\n\n /**\n * Sets the reCaptcha theme which will be used by default is not specified in a specific directive instance.\n *\n * @since 2.5.0\n * @param theme The reCaptcha theme.\n */\n provider.setTheme = function(theme){\n config.theme = theme;\n };\n\n /**\n * Sets the reCaptcha stoken which will be used by default is not specified in a specific directive instance.\n *\n * @since 2.5.0\n * @param stoken The reCaptcha stoken.\n */\n provider.setStoken = function(stoken){\n config.stoken = stoken;\n };\n\n /**\n * Sets the reCaptcha size which will be used by default is not specified in a specific directive instance.\n *\n * @since 2.5.0\n * @param size The reCaptcha size.\n */\n provider.setSize = function(size){\n config.size = size;\n };\n\n /**\n * Sets the reCaptcha type which will be used by default is not specified in a specific directive instance.\n *\n * @since 2.5.0\n * @param type The reCaptcha type.\n */\n provider.setType = function(type){\n config.type = type;\n };\n\n /**\n * Sets the reCaptcha language which will be used by default is not specified in a specific directive instance.\n *\n * @param lang The reCaptcha language.\n */\n provider.setLang = function(lang){\n config.lang = lang;\n };\n\n /**\n * Sets the reCaptcha badge position which will be used by default if not specified in a specific directive instance.\n *\n * @param badge The reCaptcha badge position.\n */\n provider.setBadge = function(badge){\n config.badge = badge;\n };\n\n /**\n * Sets the reCaptcha configuration values which will be used by default is not specified in a specific directive instance.\n *\n * @since 2.5.0\n * @param onLoadFunctionName string name which overrides the name of the onload function. Should match what is in the recaptcha script querystring onload value.\n */\n provider.setOnLoadFunctionName = function(onLoadFunctionName){\n provider.onLoadFunctionName = onLoadFunctionName;\n };\n\n provider.$get = ['$rootScope','$window', '$q', '$document', '$interval', function ($rootScope, $window, $q, $document, $interval) {\n var deferred = $q.defer(), promise = deferred.promise, instances = {}, recaptcha;\n\n $window.vcRecaptchaApiLoadedCallback = $window.vcRecaptchaApiLoadedCallback || [];\n\n var callback = function () {\n recaptcha = $window.grecaptcha;\n\n deferred.resolve(recaptcha);\n };\n\n $window.vcRecaptchaApiLoadedCallback.push(callback);\n\n $window[provider.onLoadFunctionName] = function () {\n $window.vcRecaptchaApiLoadedCallback.forEach(function(callback) {\n callback();\n });\n };\n\n\n function getRecaptcha() {\n if (!!recaptcha) {\n return $q.when(recaptcha);\n }\n\n return promise;\n }\n\n function validateRecaptchaInstance() {\n if (!recaptcha) {\n throw new Error('reCaptcha has not been loaded yet.');\n }\n }\n\n function isRenderFunctionAvailable() {\n return ng.isFunction(($window.grecaptcha || {}).render);\n }\n\n\n // Check if grecaptcha.render is not defined already.\n if (isRenderFunctionAvailable()) {\n callback();\n } else if ($window.document.querySelector('script[src^=\"https://www.google.com/recaptcha/api.js\"]')) {\n // wait for script to be loaded.\n var intervalWait = $interval(function() {\n if (isRenderFunctionAvailable()) {\n $interval.cancel(intervalWait);\n callback();\n }\n }, 25);\n } else {\n // Generate link on demand\n var script = $window.document.createElement('script');\n script.async = true;\n script.defer = true;\n script.src = 'https://www.google.com/recaptcha/api.js?onload='+provider.onLoadFunctionName+'&render=explicit';\n $document.find('body')[0].appendChild(script);\n }\n\n return {\n\n /**\n * Creates a new reCaptcha object\n *\n * @param elm the DOM element where to put the captcha\n * @param conf the captcha object configuration\n * @throws NoKeyException if no key is provided in the provider config or the directive instance (via attribute)\n */\n create: function (elm, conf) {\n\n conf.sitekey = conf.key || config.key;\n conf.theme = conf.theme || config.theme;\n conf.stoken = conf.stoken || config.stoken;\n conf.size = conf.size || config.size;\n conf.type = conf.type || config.type;\n conf.hl = conf.lang || config.lang;\n conf.badge = conf.badge || config.badge;\n\n if (!conf.sitekey) {\n throwNoKeyException();\n }\n return getRecaptcha().then(function (recaptcha) {\n var widgetId = recaptcha.render(elm, conf);\n instances[widgetId] = elm;\n return widgetId;\n });\n },\n\n /**\n * Reloads the reCaptcha\n */\n reload: function (widgetId) {\n validateRecaptchaInstance();\n\n recaptcha.reset(widgetId);\n\n // Let everyone know this widget has been reset.\n $rootScope.$broadcast('reCaptchaReset', widgetId);\n },\n\n /**\n * Executes the reCaptcha\n */\n execute: function (widgetId) {\n validateRecaptchaInstance();\n\n recaptcha.execute(widgetId);\n },\n\n /**\n * Get/Set reCaptcha language\n */\n useLang: function (widgetId, lang) {\n var instance = instances[widgetId];\n\n if (instance) {\n var iframe = instance.querySelector('iframe');\n if (lang) {\n // Setter\n if (iframe && iframe.src) {\n var s = iframe.src;\n if (/[?&]hl=/.test(s)) {\n s = s.replace(/([?&]hl=)\\w+/, '$1' + lang);\n } else {\n s += ((s.indexOf('?') === -1) ? '?' : '&') + 'hl=' + lang;\n }\n\n iframe.src = s;\n }\n } else {\n // Getter\n if (iframe && iframe.src && /[?&]hl=\\w+/.test(iframe.src)) {\n return iframe.src.replace(/.+[?&]hl=(\\w+)([^\\w].+)?/, '$1');\n } else {\n return null;\n }\n }\n } else {\n throw new Error('reCaptcha Widget ID not exists', widgetId);\n }\n },\n\n /**\n * Gets the response from the reCaptcha widget.\n *\n * @see https://developers.google.com/recaptcha/docs/display#js_api\n *\n * @returns {String}\n */\n getResponse: function (widgetId) {\n validateRecaptchaInstance();\n\n return recaptcha.getResponse(widgetId);\n },\n\n /**\n * Gets reCaptcha instance and configuration\n */\n getInstance: function (widgetId) {\n return instances[widgetId];\n },\n\n /**\n * Destroy reCaptcha instance.\n */\n destroy: function (widgetId) {\n delete instances[widgetId];\n }\n };\n\n }];\n });\n\n}(angular));\n\n/*global angular, Recaptcha */\n(function (ng) {\n 'use strict';\n\n var app = ng.module('vcRecaptcha');\n\n app.directive('vcRecaptcha', ['$document', '$timeout', 'vcRecaptchaService', function ($document, $timeout, vcRecaptcha) {\n\n return {\n restrict: 'A',\n require: \"?^^form\",\n scope: {\n response: '=?ngModel',\n key: '=?',\n stoken: '=?',\n theme: '=?',\n size: '=?',\n type: '=?',\n lang: '=?',\n badge: '=?',\n tabindex: '=?',\n required: '=?',\n onCreate: '&',\n onSuccess: '&',\n onExpire: '&'\n },\n link: function (scope, elm, attrs, ctrl) {\n scope.widgetId = null;\n\n if(ctrl && ng.isDefined(attrs.required)){\n scope.$watch('required', validate);\n }\n\n var removeCreationListener = scope.$watch('key', function (key) {\n var callback = function (gRecaptchaResponse) {\n // Safe $apply\n $timeout(function () {\n scope.response = gRecaptchaResponse;\n validate();\n\n // Notify about the response availability\n scope.onSuccess({response: gRecaptchaResponse, widgetId: scope.widgetId});\n });\n };\n\n vcRecaptcha.create(elm[0], {\n\n callback: callback,\n key: key,\n stoken: scope.stoken || attrs.stoken || null,\n theme: scope.theme || attrs.theme || null,\n type: scope.type || attrs.type || null,\n lang: scope.lang || attrs.lang || null,\n tabindex: scope.tabindex || attrs.tabindex || null,\n size: scope.size || attrs.size || null,\n badge: scope.badge || attrs.badge || null,\n 'expired-callback': expired\n\n }).then(function (widgetId) {\n // The widget has been created\n validate();\n scope.widgetId = widgetId;\n scope.onCreate({widgetId: widgetId});\n\n scope.$on('$destroy', destroy);\n\n scope.$on('reCaptchaReset', function(event, resetWidgetId){\n if(ng.isUndefined(resetWidgetId) || widgetId === resetWidgetId){\n scope.response = \"\";\n validate();\n }\n })\n\n });\n\n // Remove this listener to avoid creating the widget more than once.\n removeCreationListener();\n });\n\n function destroy() {\n if (ctrl) {\n // reset the validity of the form if we were removed\n ctrl.$setValidity('recaptcha', null);\n }\n\n cleanup();\n }\n\n function expired(){\n // Safe $apply\n $timeout(function () {\n scope.response = \"\";\n validate();\n\n // Notify about the response availability\n scope.onExpire({ widgetId: scope.widgetId });\n });\n }\n\n function validate(){\n if(ctrl){\n ctrl.$setValidity('recaptcha', scope.required === false ? null : Boolean(scope.response));\n }\n }\n\n function cleanup(){\n vcRecaptcha.destroy(scope.widgetId);\n\n // removes elements reCaptcha added.\n ng.element($document[0].querySelectorAll('.pls-container')).parent().remove();\n }\n }\n };\n }]);\n\n}(angular));\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/angular-recaptcha/release/angular-recaptcha.js\n// module id = 37\n// module chunks = 0 1 2 3","import kalkulatorFormTemplate from \"./kalkulator-form.pug\";\r\nimport accessibleSelect from \"../../../common/native-accessible-select/native-accessible-select\";\r\nimport { tooltipHack } from \"../../../common/tooltip/tooltip\";\r\nimport TipusBase from \"../lib/tipus-base\";\r\nconst DEFAULT_AGE = 25;\r\nconst DEFAULT_MONTHLY_PAYMENT = 10000;\r\nconst DEFAULT_EXPECTED_YIELD = 4;\r\nconst DEFAULT_MONTHLY_ANNUITY = 10000;\r\nconst DEFAULT_YEARS = 10;\r\nexport const KalkulatorFormComponent = {\r\n template: kalkulatorFormTemplate(),\r\n transclude: {\r\n tooltipFormContent: \"tooltipFormContent\",\r\n },\r\n bindings: {\r\n tipus: \"<\",\r\n hozamok: \"<\",\r\n vegpontok: \"<\",\r\n onCalculate: \"&\",\r\n onTabChange: \"&\",\r\n },\r\n controller: class KalkulatorFormController extends TipusBase {\r\n constructor($scope, $timeout, $element) {\r\n \"ngInject\";\r\n super();\r\n this.$timeout = $timeout;\r\n this.$element = $element[0];\r\n $scope.$watch(\"$ctrl.expectedYieldTab1\", (val) => {\r\n this.expectedYieldInput = val;\r\n });\r\n $scope.$watch(\"$ctrl.model.age\", (val) => {\r\n this.ageInput = val;\r\n this.vegpontok && this.isJaradek() && this._setSliderLimits();\r\n });\r\n $scope.$watch(\"$ctrl.vegpontok\", (val) => {\r\n if (val) {\r\n this._setSliderLimits();\r\n }\r\n });\r\n\r\n $scope.$watch(\"$ctrl.ageInput\", (val) => {\r\n if (val) {\r\n this.model.age = this.ageInput;\r\n } else {\r\n this.model.age = DEFAULT_AGE;\r\n this.ageInput = DEFAULT_AGE;\r\n }\r\n });\r\n $scope.$watch(\"$ctrl.model.years\", (val) => {\r\n this.yearsInput = val;\r\n });\r\n $scope.$watch(\"$ctrl.yearsInput\", (val) => {\r\n if (val) {\r\n this.model.years = this.yearsInput;\r\n } else {\r\n this.yearsInput = DEFAULT_YEARS;\r\n this.model.years = DEFAULT_YEARS;\r\n }\r\n });\r\n $scope.$watch(\"$ctrl.expectedYieldInput\", (val) => {\r\n if (val) {\r\n this.expectedYieldTab1 = this.expectedYieldInput;\r\n } else {\r\n this.expectedYieldTab1 = DEFAULT_EXPECTED_YIELD;\r\n this.expectedYieldInput = DEFAULT_EXPECTED_YIELD;\r\n }\r\n });\r\n $scope.$watch(\"$ctrl.model.monthlyPayment\", (val) => {\r\n this.monthlyPaymentInput = val;\r\n });\r\n $scope.$watch(\"$ctrl.model.monthlyAnnuity\", (val) => {\r\n this.monthlyAnnuityInput = val;\r\n });\r\n $scope.$watch(\"$ctrl.activeTab\", (val) => {\r\n this.kalkulatorForm.$setUntouched();\r\n this.kalkulatorForm.$setPristine();\r\n\r\n this.onTabChange();\r\n if (val == 1 || val == 2) {\r\n this.model.customYield = false;\r\n setTimeout(() => {\r\n let selects = Array.from(this.$element.querySelectorAll(\"select\"));\r\n selects.forEach((item) => {\r\n setTimeout(() => {\r\n new accessibleSelect({ element: item });\r\n }, 0);\r\n });\r\n }, 0);\r\n } else {\r\n this.model.customYield = true;\r\n }\r\n });\r\n }\r\n $onInit() {\r\n this.model = {\r\n age: DEFAULT_AGE,\r\n };\r\n this.activeTab = \"0\";\r\n if (this.isMegtakaritas()) {\r\n this.model.monthlyPayment = DEFAULT_MONTHLY_PAYMENT;\r\n this.monthlyPaymentInput = this.model.monthlyPayment;\r\n }\r\n if (this.isJaradek()) {\r\n this.model.monthlyAnnuity = DEFAULT_MONTHLY_ANNUITY;\r\n this.model.years = DEFAULT_YEARS;\r\n this.yearsInput = this.model.years;\r\n this.monthlyAnnuityInput = this.model.monthlyAnnuity;\r\n }\r\n this.expectedYieldTab1 = DEFAULT_EXPECTED_YIELD;\r\n this.expectedYieldInput = this.expectedYieldTab1;\r\n this.ageInput = this.model.age;\r\n this.ageOptions = {\r\n floor: 16,\r\n ceil: 60,\r\n minLimit: 16,\r\n maxLimit: 60,\r\n enforceRange: true,\r\n showSelectionBar: true,\r\n autoHideLimitLabels: false,\r\n };\r\n this.yearsOptions = {\r\n floor: 5,\r\n ceil: 45,\r\n minLimit: 5,\r\n maxLimit: 45,\r\n enforceRange: true,\r\n showSelectionBar: true,\r\n autoHideLimitLabels: false,\r\n };\r\n this.monthlyPaymentOptions = {\r\n floor: 10000,\r\n ceil: 100000,\r\n minLimit: 10000,\r\n maxLimit: 100000,\r\n step: 1000,\r\n enforceRange: true,\r\n showSelectionBar: true,\r\n autoHideLimitLabels: false,\r\n };\r\n this.monthlyAnnuityOptions = {\r\n floor: 5000,\r\n ceil: 400000,\r\n minLimit: 5000,\r\n maxLimit: 400000,\r\n step: 5000,\r\n enforceRange: true,\r\n showSelectionBar: true,\r\n autoHideLimitLabels: false,\r\n };\r\n this.expectedYieldOptions = {\r\n floor: 1,\r\n ceil: 14,\r\n minLimit: 1,\r\n maxLimit: 14,\r\n enforceRange: true,\r\n showSelectionBar: true,\r\n autoHideLimitLabels: false,\r\n };\r\n setTimeout(() => {\r\n let tooltips = Array.from(this.$element.querySelectorAll(\".tooltip\"));\r\n tooltips.forEach((item) => {\r\n setTimeout(() => {\r\n new tooltipHack();\r\n }, 0);\r\n });\r\n }, 0);\r\n }\r\n _setSliderLimits() {\r\n // megkeresi azt a vegpontot ahol a beallitott eletkor kisebb mint a kovetkezo sor\r\n if (this.isJaradek()) {\r\n let vegpont = this.vegpontok.find((item, index, array) => {\r\n return (\r\n (array[index + 1] && array[index + 1].age > this.model.age) ||\r\n typeof array[index + 1] == \"undefined\"\r\n );\r\n });\r\n this.yearsOptions.floor = this.yearsOptions.minLimit =\r\n vegpont.minimumAnnuityYears;\r\n this.monthlyAnnuityOptions.floor = this.monthlyAnnuityOptions.minLimit =\r\n vegpont.minimumAnnuityAmount;\r\n this.expectedYieldOptions.ceil = this.expectedYieldOptions.maxLimit =\r\n vegpont.maximumYield;\r\n this.monthlyPaymentOptions.floor = this.monthlyPaymentOptions.minLimit =\r\n vegpont.minimumPayment;\r\n }\r\n }\r\n onMonthlyPaymentBlur(val) {\r\n if (val) {\r\n this.model.monthlyPayment = val;\r\n } else {\r\n this.model.monthlyPayment = DEFAULT_MONTHLY_PAYMENT;\r\n }\r\n this.$timeout(() => {\r\n this.monthlyPaymentInput = this.model.monthlyPayment;\r\n });\r\n }\r\n\r\n onMonthlyAnnuityBlur(val) {\r\n if (val) {\r\n this.model.monthlyAnnuity = val;\r\n } else {\r\n this.model.monthlyAnnuity = DEFAULT_MONTHLY_ANNUITY;\r\n }\r\n this.$timeout(() => {\r\n this.monthlyAnnuityInput = this.model.monthlyAnnuity;\r\n });\r\n }\r\n\r\n isMonthlyAnnuityMinusDisabled() {\r\n return this.model.monthlyAnnuity == this.monthlyAnnuityOptions.floor;\r\n }\r\n isMonthlyAnnuityPlusDisabled() {\r\n return this.model.monthlyAnnuity == this.monthlyAnnuityOptions.ceil;\r\n }\r\n decreaseMonthlyAnnuity() {\r\n this.model.monthlyAnnuity -= this.monthlyAnnuityOptions.step;\r\n }\r\n increaseMonthlyAnnuity() {\r\n this.model.monthlyAnnuity += this.monthlyAnnuityOptions.step;\r\n }\r\n\r\n isAgeMinusDisabled() {\r\n return this.model.age == this.ageOptions.floor;\r\n }\r\n isAgePlusDisabled() {\r\n return this.model.age == this.ageOptions.ceil;\r\n }\r\n decreaseAge() {\r\n this.model.age--;\r\n }\r\n increaseAge() {\r\n this.model.age++;\r\n }\r\n\r\n isYearsMinusDisabled() {\r\n return this.model.years == this.yearsOptions.floor;\r\n }\r\n isYearsPlusDisabled() {\r\n return this.model.years == this.yearsOptions.ceil;\r\n }\r\n decreaseYears() {\r\n this.model.years--;\r\n }\r\n increaseYears() {\r\n this.model.years++;\r\n }\r\n\r\n isExpectedYieldMinusDisabled() {\r\n return this.expectedYieldTab1 == this.expectedYieldOptions.floor;\r\n }\r\n isExpectedYieldPlusDisabled() {\r\n return this.expectedYieldTab1 == this.expectedYieldOptions.ceil;\r\n }\r\n decreaseExpectedYield() {\r\n this.expectedYieldTab1--;\r\n }\r\n increaseExpectedYield() {\r\n this.expectedYieldTab1++;\r\n }\r\n\r\n isMonthlyPaymentMinusDisabled() {\r\n return this.model.monthlyPayment == this.monthlyPaymentOptions.floor;\r\n }\r\n isMonthlyPaymentPlusDisabled() {\r\n return this.model.monthlyPayment == this.monthlyPaymentOptions.ceil;\r\n }\r\n decreaseMonthlyPayment() {\r\n this.model.monthlyPayment -= this.monthlyPaymentOptions.step;\r\n }\r\n increaseMonthlyPayment() {\r\n this.model.monthlyPayment += this.monthlyPaymentOptions.step;\r\n }\r\n\r\n calculate() {\r\n if (this.kalkulatorForm.$valid) {\r\n let data;\r\n let expectedYield;\r\n switch (this.activeTab) {\r\n case \"0\":\r\n expectedYield = this.expectedYieldTab1;\r\n break;\r\n case \"1\":\r\n expectedYield = this.expectedYieldTab2;\r\n break;\r\n case \"2\":\r\n expectedYield = this.expectedYieldTab3;\r\n break;\r\n }\r\n data = Object.assign({}, this.model, { expectedYield });\r\n this.onCalculate({ data });\r\n }\r\n }\r\n },\r\n};\r\n\n\n\n// WEBPACK FOOTER //\n// ../source/application/kalkulator/kalkulator-form/kalkulator-form.component.js","import { KalkulatorFormComponent } from './kalkulator-form.component';\r\nimport EzresBontasModule from '../../../common/directives/ezresbontas/ezresbontas';\r\nimport AngularSliderModule from 'angularjs-slider'\r\nexport const KalkulatorFormModule = angular\r\n\t.module('kalkulatorForm', [EzresBontasModule, AngularSliderModule])\r\n\t.component('kalkulatorForm', KalkulatorFormComponent)\r\n\t.name;\r\n\r\n\n\n\n// WEBPACK FOOTER //\n// ../source/application/kalkulator/kalkulator-form/kalkulator-form.module.js","import kalkulatorResultTemplate from './kalkulator-result.pug';\r\nimport { tooltipHack } from '../../../common/tooltip/tooltip';\r\nimport TipusBase from '../lib/tipus-base'\r\nexport const KalkulatorResultComponent = {\r\n\ttemplate: kalkulatorResultTemplate(),\r\n\ttransclude: {\r\n\t\ttooltipResultContent: 'tooltipResultContent'\r\n\t},\r\n\tbindings: {\r\n\t\teredmeny: '<',\r\n\t\ttipus: '<'\r\n\t},\r\n\tcontroller: class KalkulatorResultController extends TipusBase {\r\n\t\tconstructor($element) {\r\n\t\t\t'ngInject';\r\n\t\t\tsuper();\r\n\t\t\tthis.$element = $element[0];\r\n\t\t}\r\n\t\t$onInit() {\r\n\t\t\tsetTimeout(() => {\r\n\t\t\t\tlet tooltips = Array.from(this.$element.querySelectorAll('.tooltip'));\r\n\t\t\t\ttooltips.forEach(item => {\r\n\t\t\t\t\tsetTimeout(() => {\r\n\t\t\t\t\t\tnew tooltipHack();\r\n\t\t\t\t\t}, 0);\r\n\t\t\t\t});\r\n\t\t\t}, 0);\r\n\t\t}\r\n\t\tgetPdfUrl() {\r\n\t\t\tlet apiType = this.isMegtakaritas() ? 'megtakaritas' : 'jaradek';\r\n\t\t\tlet url = '';\r\n\t\t\tif (this.eredmeny) {\r\n\t\t\t\turl = `/api/kalkulator/${apiType}/pdf/${this.eredmeny.id}`\r\n\t\t\t}\r\n\t\t\treturn url;\r\n\t\t}\r\n\t}\r\n}\r\n\n\n\n// WEBPACK FOOTER //\n// ../source/application/kalkulator/kalkulator-result/kalkulator-result.component.js","import { KalkulatorResultComponent } from './kalkulator-result.component';\r\nexport const KalkulatorResultModule = angular\r\n\t.module('kalkulatorResult', [])\r\n\t.component('kalkulatorResult', KalkulatorResultComponent)\r\n\t.name;\r\n\r\n\n\n\n// WEBPACK FOOTER //\n// ../source/application/kalkulator/kalkulator-result/kalkulator-result.module.js","import kalkulatorVhkTemplate from './kalkulator-vhk.pug';\r\nimport {EMAIL_PATTERN, PHONE_PATTERN, SIMPLE_TEXT_PATTERN, NUMBER_PATTERN, MEMBERSHIP_PATTERN} from '../../../common/constants/consts';\r\nimport accessibleSelect from '../../../common/native-accessible-select/native-accessible-select';\r\nexport const KalkulatorVhkComponent = {\r\n\ttemplate: kalkulatorVhkTemplate(),\r\n\tbindings: {\r\n\t\tid: '@',\r\n\t\tvisszahivasIdok: '<',\r\n\t\tsuccess: '<',\r\n\t\tonPostForm: '&'\r\n\t},\r\n\tcontroller: class KalkulatorVhkController {\r\n\t\tconstructor($element, vcRecaptchaService) {\r\n\t\t\t'ngInject';\r\n\t\t\tthis.$element = $element[0];\r\n\t\t\tthis.vcRecaptchaService = vcRecaptchaService;\r\n\t\t}\r\n\t\t$onInit() {\r\n\t\t\tthis.model = {};\r\n\t\t\tthis.patterns = {\r\n\t\t\t\temail: EMAIL_PATTERN,\r\n\t\t\t\tphone: PHONE_PATTERN,\r\n\t\t\t\tsimpleText: SIMPLE_TEXT_PATTERN,\r\n\t\t\t\tnumber: NUMBER_PATTERN,\r\n\t\t\t\tmembership: MEMBERSHIP_PATTERN\r\n\t\t\t};\r\n\t\t\tsetTimeout(() => {\r\n\t\t\t\tlet selects = Array.from(this.$element.querySelectorAll('select'));\r\n\t\t\t\tselects.forEach(item => {\r\n\t\t\t\t\tsetTimeout(() => {\r\n\t\t\t\t\t\tnew accessibleSelect({ element: item });\r\n\t\t\t\t\t}, 0);\r\n\t\t\t\t});\r\n\t\t\t}, 0);\r\n\r\n\t\t}\r\n\t\tpostContactForm() {\r\n\t\t\tif (this.visszahivasKeresForm.$valid) {\r\n\t\t\t\tthis.onPostForm({\r\n\t\t\t\t\tdata: this.model\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n}\r\n\n\n\n// WEBPACK FOOTER //\n// ../source/application/kalkulator/kalkulator-vhk/kalkulator-vhk.component.js","import { KalkulatorVhkComponent } from './kalkulator-vhk.component';\r\nimport vcRecaptcha from 'angular-recaptcha';\r\nexport const KalkulatorVhkModule = angular\r\n\t.module('kalkulatorVhk', [vcRecaptcha])\r\n\t.component('kalkulatorVhk', KalkulatorVhkComponent)\r\n\t.name;\r\n\r\n\n\n\n// WEBPACK FOOTER //\n// ../source/application/kalkulator/kalkulator-vhk/kalkulator-vhk.module.js","import kalkulatorTemplate from './kalkulator.pug';\nimport { MEGTAKARITAS_TIPUS, JARADEK_TIPUS } from './lib/tipus-base';\nconst KALKULACIO_METODUSOK = {\n\t[MEGTAKARITAS_TIPUS] : 'megtakaritasKalkulacio',\n\t[JARADEK_TIPUS]: 'jaradekKalkulacio'\n}\nexport const KalkulatorComponent = {\n\ttemplate: kalkulatorTemplate(),\n\ttransclude: {\n\t\ttooltipFormContent: 'tooltipFormContent',\n\t\ttooltipResultContent: 'tooltipResultContent'\n\t},\n\tbindings: {\n\t\ttipus: '@'\n\t},\n\tcontroller: class KalkulatorController {\n\t\tconstructor(KalkulatorService, $timeout, $rootScope) {\n\t\t\t'ngInject';\n\t\t\tthis.kalkulatorService = KalkulatorService;\n\t\t\tthis.$timeout = $timeout;\n\t\t\tthis.$rootScope = $rootScope;\n\t\t}\n\t\t$onInit() {\n\t\t\tthis.init();\n\t\t}\n\t\tinit() {\n\t\t\tthis.kalkulatorService.init().then((response) => {\n\t\t\t\tthis.hozamok = response.hozamok;\n\t\t\t\tthis.visszahivasIdok = response.visszahivasIdok;\n\t\t\t\tthis.vegpontok = response.vegpontok;\n\t\t\t}).catch((err) => {\n\t\t\t\tthis.$rootScope.$broadcast('serverError');\n\t\t\t});\n\t\t}\n\t\tresetResults() {\n\t\t\tthis.eredmeny = null;\n\t\t}\n\t\tcalculate(data) {\n\t\t\tlet kalkulacioMetodus = KALKULACIO_METODUSOK[this.tipus];\n\t\t\tthis.kalkulatorService[kalkulacioMetodus](data).then((response) => {\n\t\t\t\tthis.eredmeny = response;\n\t\t\t\tthis.$timeout(()=>{\n\t\t\t\t\tdocument.getElementById('kalkulator-result').scrollIntoView();\n\t\t\t\t});\n\t\t\t}).catch((err) => {\n\t\t\t\tthis.$rootScope.$broadcast('serverError');\n\t\t\t});\n\t\t}\n\t\tsendVhk(data) {\n\t\t\tlet dataToSend = Object.assign({}, data, { calculationId: this.eredmeny.id });\n\t\t\tthis.kalkulatorService.sendVhk(dataToSend).then((response) => {\n\t\t\t\tthis.vhkSuccess = true;\n\t\t\t}).catch((err) => {\n\t\t\t\tthis.$rootScope.$broadcast('serverError');\n\t\t\t});\n\t\t}\n\t}\n}\n\n\n\n// WEBPACK FOOTER //\n// ../source/application/kalkulator/kalkulator.component.js","export class KalkulatorService {\n\tconstructor($http) {\n\t\t'ngInject';\n\t\tthis.$http = $http;\n\t}\n\tinit() {\n\t\treturn this.$http.get('/api/kalkulator/init').then(response => response.data);\n\t}\n\tmegtakaritasKalkulacio(data) {\n\t\treturn this.$http.post('/api/kalkulator/megtakaritas', data).then(response => response.data);\n\t}\n\tjaradekKalkulacio(data) {\n\t\treturn this.$http.post('/api/kalkulator/jaradek', data).then(response => response.data);\n\t}\n\tsendVhk(data) {\n\t\tlet captchaValue = data.captchaValue;\n\t\tdelete data.captchaValue;\n\t\treturn this.$http.post('/api/visszahivas/kalkulator', data, {\n\t\t\theaders: {\n\t\t\t\t'captcha': captchaValue\n\t\t\t}\n\t\t}).then(response => response.data);\n\t}\n}\n\n\n\n// WEBPACK FOOTER //\n// ../source/application/kalkulator/kalkulator.service.js","const MODULE_NAME = 'ezresBontas';\nexport default angular.module(MODULE_NAME, [])\n\t.directive('ezresBontas', function ($filter) {\n\t\t'ngInject';\n\t\treturn {\n\t\t\trestrict: 'A',\n\t\t\trequire: 'ngModel',\n\t\t\tlink: function (scope, element, attrs, ngModel) {\n\t\t\t\tlet tortSzam = attrs.ezresBontas;\n\t\t\t\tif (ngModel) {\n\t\t\t\t\tngModel.$formatters.unshift(function () {\t\t\t//convert data from model format to view format\n\t\t\t\t\t\treturn $filter('number')(ngModel.$modelValue);\n\t\t\t\t\t});\n\t\t\t\t\tngModel.$parsers.unshift(function (viewValue) {\t//convert data from view format to model format\n\t\t\t\t\t\tlet convertableNumber;\n\t\t\t\t\t\tlet viewNumber;\n\t\t\t\t\t\tviewNumber = tortSzam ? viewValue.replace(/[^0-9|,]/g, '') : viewValue.replace(/[^0-9]/g, '');\n\t\t\t\t\t\tconvertableNumber = viewValue;\n\t\t\t\t\t\tif ((viewNumber.match(/,/g) || []).length == 2) {\n\t\t\t\t\t\t\tviewNumber = viewNumber.slice(0, -1);\n\t\t\t\t\t\t\tconvertableNumber = convertableNumber.slice(0, -1);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (viewNumber.slice(-1) == ',') {\n\t\t\t\t\t\t\tconvertableNumber = viewValue + '0';\n\t\t\t\t\t\t}\n\t\t\t\t\t\tconvertableNumber = tortSzam ? convertableNumber.replace(/[^0-9|,]/g, '').replace(/,/g, '.').replace(/\\s/g, '') : convertableNumber.replace(/[^0-9]/g, '').replace(/\\s/g, '');\n\t\t\t\t\t\tvar a = $filter('number')(convertableNumber);\n\t\t\t\t\t\tvar b = (viewNumber.slice(-1) == ',') ? ',' : '';\n\t\t\t\t\t\tngModel.$setViewValue(''+a +b) ;\n\t\t\t\t\t\tngModel.$render();\n\t\t\t\t\t\treturn convertableNumber;\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}).name;\n\n\n\n// WEBPACK FOOTER //\n// ../source/common/directives/ezresbontas/ezresbontas.js","var pug = require(\"!../../../../devtools/node_modules/pug-runtime/index.js\");\n\nfunction template(locals) {var pug_html = \"\", pug_mixins = {}, pug_interp;pug_html = pug_html + \"\\u003Cform class=\\\"kalkulator-form\\\" name=\\\"$ctrl.kalkulatorForm\\\" novalidate\\u003E\\u003Cdiv class=\\\"row form__row slider-row\\\"\\u003E\\u003Cdiv class=\\\"col-sm-5 form-input__group form-input__group--right\\\"\\u003E\\u003Clabel class=\\\"label\\\" for=\\\"kalkulator-form__age\\\"\\u003EÉletkor:\\u003C\\u002Flabel\\u003E\\u003Cinput class=\\\"form-input form-input--input-xsmall\\\" id=\\\"kalkulator-form__age\\\" type=\\\"number\\\" ng-model=\\\"$ctrl.ageInput\\\" ng-model-options=\\\"{ updateOn: 'blur'}\\\"\\u003E\\u003Cspan\\u003E\\u003Cstrong\\u003EÉv\\u003C\\u002Fstrong\\u003E\\u003C\\u002Fspan\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"col-sm-5 form-input__group\\\"\\u003E\\u003Clabel class=\\\"sr-only\\\" for=\\\"kalkulator-form__age-range\\\"\\u003EÉletkor csúszka:\\u003C\\u002Flabel\\u003E\\u003Cbutton class=\\\"button__slider-steps negative\\\" type=\\\"button\\\" ng-click=\\\"$ctrl.decreaseAge()\\\" ng-disabled=\\\"$ctrl.isAgeMinusDisabled()\\\"\\u003E\\u003Cspan class=\\\"sr-only\\\"\\u003EÉrték csökkentése\\u003C\\u002Fspan\\u003E\\u003C\\u002Fbutton\\u003E\\u003Crzslider id=\\\"kalkulator-form__age-range\\\" rz-slider-model=\\\"$ctrl.model.age\\\" rz-slider-options=\\\"$ctrl.ageOptions\\\"\\u003E\\u003C\\u002Frzslider\\u003E\\u003Cbutton class=\\\"button__slider-steps positive\\\" type=\\\"button\\\" ng-click=\\\"$ctrl.increaseAge()\\\" ng-disabled=\\\"$ctrl.isAgePlusDisabled()\\\"\\u003E\\u003Cspan class=\\\"sr-only\\\"\\u003EÉrték növelése\\u003C\\u002Fspan\\u003E\\u003C\\u002Fbutton\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"row form__row slider-row\\\" ng-if=\\\"$ctrl.isJaradek()\\\"\\u003E\\u003Cdiv class=\\\"col-sm-5 form-input__group form-input__group--right\\\"\\u003E\\u003Clabel class=\\\"label\\\" for=\\\"kalkulator-form__allowance-amount\\\" aria-describedby=\\\"tooltip__allowance-amount\\\"\\u003EHavi járadék összege:\\u003C\\u002Flabel\\u003E\\u003Cdiv class=\\\"tooltip\\\" id=\\\"tooltip__allowance-amount\\\" role=\\\"tooltip\\\" tabindex=\\\"0\\\" tooltip=\\\"\\\"\\u003E\\u003Cimg class=\\\"tooltip-icon\\\" src=\\\"\\u002Fstatic\\u002Fassets\\u002Fimg\\u002Finfo.svg\\\" alt=\\\"\\\"\\u003E\\u003Cdiv class=\\\"tooltip-content\\\"\\u003E\\u003Cp\\u003EAdja meg, az igényelt havi nyugdíj-kiegészítés, járadék összegét!\\u003C\\u002Fp\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cinput class=\\\"form-input form-input--input-xsmall\\\" id=\\\"kalkulator-form__allowance-amount\\\" type=\\\"tel\\\" maxlength=\\\"7\\\" min=\\\"5000\\\" max=\\\"100000\\\" value=\\\"10000\\\" ng-model=\\\"$ctrl.monthlyAnnuityInput\\\" ng-blur=\\\"$ctrl.onMonthlyAnnuityBlur($ctrl.monthlyAnnuityInput)\\\" ezres-bontas=\\\"\\\"\\u003E\\u003Cspan\\u003E\\u003Cstrong\\u003EFt\\u003C\\u002Fstrong\\u003E\\u003C\\u002Fspan\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"col-sm-5 form-input__group\\\"\\u003E\\u003Clabel class=\\\"sr-only\\\" for=\\\"kalkulator-form__allowance-amount-range\\\"\\u003EHavi járadék összege csúszka:\\u003C\\u002Flabel\\u003E\\u003Cbutton class=\\\"button__slider-steps negative\\\" type=\\\"button\\\" ng-click=\\\"$ctrl.decreaseMonthlyAnnuity()\\\" ng-disabled=\\\"$ctrl.isMonthlyAnnuityMinusDisabled()\\\"\\u003E\\u003Cspan class=\\\"sr-only\\\"\\u003EÉrték csökkentése\\u003C\\u002Fspan\\u003E\\u003C\\u002Fbutton\\u003E\\u003Crzslider id=\\\"kalkulator-form__allowance-amount-range\\\" rz-slider-model=\\\"$ctrl.model.monthlyAnnuity\\\" rz-slider-options=\\\"$ctrl.monthlyAnnuityOptions\\\"\\u003E\\u003C\\u002Frzslider\\u003E\\u003Cbutton class=\\\"button__slider-steps positive\\\" type=\\\"button\\\" ng-click=\\\"$ctrl.increaseMonthlyAnnuity()\\\" ng-disabled=\\\"$ctrl.isMonthlyAnnuityPlusDisabled()\\\"\\u003E\\u003Cspan class=\\\"sr-only\\\"\\u003EÉrték növelése\\u003C\\u002Fspan\\u003E\\u003C\\u002Fbutton\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"row form__row slider-row\\\" ng-if=\\\"$ctrl.isJaradek()\\\"\\u003E\\u003Cdiv class=\\\"col-sm-5 form-input__group form-input__group--right\\\"\\u003E\\u003Clabel class=\\\"label\\\" for=\\\"kalkulator-form__annuity\\\" aria-describedby=\\\"tooltip__annuity\\\"\\u003EJáradék év:\\u003C\\u002Flabel\\u003E\\u003Cdiv class=\\\"tooltip\\\" id=\\\"tooltip__annuity\\\" role=\\\"tooltip\\\" tabindex=\\\"0\\\" tooltip=\\\"\\\"\\u003E\\u003Cimg class=\\\"tooltip-icon\\\" src=\\\"\\u002Fstatic\\u002Fassets\\u002Fimg\\u002Finfo.svg\\\" alt=\\\"\\\"\\u003E\\u003Cdiv class=\\\"tooltip-content\\\"\\u003E\\u003Cp\\u003EAdja meg, hány évig szeretne nyugdíj-kiegészítést kapni!\\u003C\\u002Fp\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cinput class=\\\"form-input form-input--input-xsmall\\\" id=\\\"kalkulator-form__annuity\\\" type=\\\"number\\\" ng-model=\\\"$ctrl.yearsInput\\\" ng-model-options=\\\"{ updateOn: 'blur'}\\\"\\u003E\\u003Cspan\\u003E\\u003Cstrong\\u003EÉv\\u003C\\u002Fstrong\\u003E\\u003C\\u002Fspan\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"col-sm-5 form-input__group\\\"\\u003E\\u003Clabel class=\\\"sr-only\\\" for=\\\"kalkulator-form__annuity-range\\\"\\u003EJáradék év csúszka:\\u003C\\u002Flabel\\u003E\\u003Cbutton class=\\\"button__slider-steps negative\\\" type=\\\"button\\\" ng-click=\\\"$ctrl.decreaseYears()\\\" ng-disabled=\\\"$ctrl.isYearsMinusDisabled()\\\"\\u003E\\u003Cspan class=\\\"sr-only\\\"\\u003EÉrték csökkentése\\u003C\\u002Fspan\\u003E\\u003C\\u002Fbutton\\u003E\\u003Crzslider id=\\\"kalkulator-form__annuity-range\\\" rz-slider-model=\\\"$ctrl.model.years\\\" rz-slider-options=\\\"$ctrl.yearsOptions\\\"\\u003E\\u003C\\u002Frzslider\\u003E\\u003Cbutton class=\\\"button__slider-steps positive\\\" type=\\\"button\\\" ng-click=\\\"$ctrl.increaseYears()\\\" ng-disabled=\\\"$ctrl.isYearsPlusDisabled()\\\"\\u003E\\u003Cspan class=\\\"sr-only\\\"\\u003EÉrték növelése\\u003C\\u002Fspan\\u003E\\u003C\\u002Fbutton\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"row form__row slider-row\\\" ng-if=\\\"$ctrl.isMegtakaritas()\\\"\\u003E\\u003Cdiv class=\\\"col-sm-5 form-input__group form-input__group--right\\\"\\u003E\\u003Clabel class=\\\"label\\\" for=\\\"kalkulator-form__deposit\\\" aria-describedby=\\\"tooltip__deposit\\\"\\u003EHavi befizetés:\\u003C\\u002Flabel\\u003E\\u003Cdiv class=\\\"tooltip\\\" id=\\\"tooltip__deposit\\\" role=\\\"tooltip\\\" tabindex=\\\"0\\\" tooltip=\\\"\\\"\\u003E\\u003Cimg class=\\\"tooltip-icon\\\" src=\\\"\\u002Fstatic\\u002Fassets\\u002Fimg\\u002Finfo.svg\\\" alt=\\\"\\\"\\u003E\\u003Cdiv class=\\\"tooltip-content\\\"\\u003E\\u003Cp\\u003EEgységes, minimális havi tagdíj 10.000 Ft\\u003C\\u002Fp\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cinput class=\\\"form-input form-input--input-xsmall\\\" id=\\\"kalkulator-form__deposit\\\" type=\\\"tel\\\" maxlength=\\\"7\\\" min=\\\"5000\\\" max=\\\"100000\\\" value=\\\"10000\\\" ng-model=\\\"$ctrl.monthlyPaymentInput\\\" ng-blur=\\\"$ctrl.onMonthlyPaymentBlur($ctrl.monthlyPaymentInput)\\\" ezres-bontas=\\\"\\\"\\u003E\\u003Cspan\\u003E\\u003Cstrong\\u003EFt\\u003C\\u002Fstrong\\u003E\\u003C\\u002Fspan\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"col-sm-5 form-input__group\\\"\\u003E\\u003Clabel class=\\\"sr-only\\\" for=\\\"kalkulator-form__deposit-range\\\"\\u003EHavi befizetés csúszka:\\u003C\\u002Flabel\\u003E\\u003Cbutton class=\\\"button__slider-steps negative\\\" type=\\\"button\\\" ng-click=\\\"$ctrl.decreaseMonthlyPayment()\\\" ng-disabled=\\\"$ctrl.isMonthlyPaymentMinusDisabled()\\\"\\u003E\\u003Cspan class=\\\"sr-only\\\"\\u003EÉrték csökkentése\\u003C\\u002Fspan\\u003E\\u003C\\u002Fbutton\\u003E\\u003Crzslider id=\\\"kalkulator-form__deposit-range\\\" rz-slider-model=\\\"$ctrl.model.monthlyPayment\\\" rz-slider-options=\\\"$ctrl.monthlyPaymentOptions\\\"\\u003E\\u003C\\u002Frzslider\\u003E\\u003Cbutton class=\\\"button__slider-steps positive\\\" type=\\\"button\\\" ng-click=\\\"$ctrl.increaseMonthlyPayment()\\\" ng-disabled=\\\"$ctrl.isMonthlyPaymentPlusDisabled()\\\"\\u003E\\u003Cspan class=\\\"sr-only\\\"\\u003EÉrték növelése\\u003C\\u002Fspan\\u003E\\u003C\\u002Fbutton\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cfieldset class=\\\"kalkulator-form__choose-box\\\"\\u003E\\u003Clegend class=\\\"kalkulator-form__choose-title\\\" aria-describedby=\\\"tooltip__choose-title\\\"\\u003EHozamelvárás\\u003Cspan class=\\\"tooltip\\\" id=\\\"tooltip__choose-title\\\" role=\\\"tooltip\\\" tabindex=\\\"0\\\" tooltip=\\\"\\\"\\u003E\\u003Cimg class=\\\"tooltip-icon\\\" src=\\\"\\u002Fstatic\\u002Fassets\\u002Fimg\\u002Finfo.svg\\\" alt=\\\"\\\"\\u003E\\u003Cspan class=\\\"tooltip-content\\\"\\u003EAdja meg, a kalkulátor hány százalék nettó hozammal számoljon!\\u003C\\u002Fspan\\u003E\\u003C\\u002Fspan\\u003E\\u003C\\u002Flegend\\u003E\\u003Cdiv class=\\\"kalkulator-form__choose-container\\\"\\u003E\\u003Cdiv class=\\\"kalkulator-form__choose-radio\\\" ng-class=\\\"{'active': $ctrl.activeTab=='0'}\\\"\\u003E\\u003Cinput id=\\\"kalkulator-form__radio1\\\" type=\\\"radio\\\" name=\\\"kalkulator-tab\\\" ng-model=\\\"$ctrl.activeTab\\\" value=\\\"0\\\"\\u003E\\u003Clabel class=\\\"radio\\\" for=\\\"kalkulator-form__radio1\\\"\\u003EEgyénileg határozom meg\\u003C\\u002Flabel\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"kalkulator-form__choose-radio\\\" ng-class=\\\"{'active': $ctrl.activeTab=='1'}\\\"\\u003E\\u003Cinput id=\\\"kalkulator-form__radio2\\\" type=\\\"radio\\\" name=\\\"kalkulator-tab\\\" ng-model=\\\"$ctrl.activeTab\\\" value=\\\"1\\\"\\u003E\\u003Clabel class=\\\"radio\\\" for=\\\"kalkulator-form__radio2\\\"\\u003EKockázatvállalásom és a múltbeli hozamok alapján\\u003Cbr\\u003E határozom meg\\u003C\\u002Flabel\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"kalkulator-form__choose-radio last-tab\\\" ng-class=\\\"{'active': $ctrl.activeTab=='2'}\\\"\\u003E\\u003Cinput id=\\\"kalkulator-form__radio3\\\" type=\\\"radio\\\" name=\\\"kalkulator-tab\\\" ng-model=\\\"$ctrl.activeTab\\\" value=\\\"2\\\"\\u003E\\u003Clabel class=\\\"radio\\\" for=\\\"kalkulator-form__radio3\\\"\\u003EKockázatvállalásom és a hozamprognózis alapján\\u003Cbr\\u003E határozom meg\\u003C\\u002Flabel\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"kalkulator-form__choose-panel\\\" ng-if=\\\"$ctrl.activeTab==0\\\"\\u003E\\u003Ch3\\u003EHatározza meg az éves nettó hozamot!\\u003C\\u002Fh3\\u003E\\u003Cdiv class=\\\"row form__row slider-row\\\"\\u003E\\u003Cdiv class=\\\"col-sm-5 form-input__group form-input__group--right\\\"\\u003E\\u003Clabel class=\\\"sr-only\\\" for=\\\"kalkulator-form__annual-net-yield\\\"\\u003EÉves nettó hozam\\u003C\\u002Flabel\\u003E\\u003Cinput class=\\\"form-input form-input--input-xsmall\\\" id=\\\"kalkulator-form__annual-net-yield\\\" type=\\\"number\\\" ng-model=\\\"$ctrl.expectedYieldInput\\\" ng-model-options=\\\"{ updateOn: 'blur'}\\\"\\u003E\\u003Cspan\\u003E%\\u003C\\u002Fspan\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"col-sm-5 form-input__group\\\"\\u003E\\u003Cbutton class=\\\"button__slider-steps negative\\\" type=\\\"button\\\" ng-click=\\\"$ctrl.decreaseExpectedYield()\\\" ng-disabled=\\\"$ctrl.isExpectedYieldMinusDisabled()\\\"\\u003E\\u003Cspan class=\\\"sr-only\\\"\\u003EÉrték csökkentése\\u003C\\u002Fspan\\u003E\\u003C\\u002Fbutton\\u003E\\u003Clabel class=\\\"sr-only\\\" for=\\\"kalkulator-form__deposit-range\\\"\\u003EHavi befizetés csúszka:\\u003C\\u002Flabel\\u003E\\u003Crzslider id=\\\"kalkulator-form__deposit-range\\\" rz-slider-model=\\\"$ctrl.expectedYieldTab1\\\" rz-slider-options=\\\"$ctrl.expectedYieldOptions\\\"\\u003E\\u003C\\u002Frzslider\\u003E\\u003Cbutton class=\\\"button__slider-steps positive\\\" type=\\\"button\\\" ng-click=\\\"$ctrl.increaseExpectedYield()\\\" ng-disabled=\\\"$ctrl.isExpectedYieldPlusDisabled()\\\"\\u003E\\u003Cspan class=\\\"sr-only\\\"\\u003EÉrték növelése\\u003C\\u002Fspan\\u003E\\u003C\\u002Fbutton\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"kalkulator-form__choose-panel\\\" ng-if=\\\"$ctrl.activeTab==1\\\"\\u003E\\u003Ch3\\u003EVálasszon egyet portfólióink közül!\\u003C\\u002Fh3\\u003E\\u003Cdiv class=\\\"row form__row\\\"\\u003E\\u003Cdiv class=\\\"col-sm-5 form-input__group form-input__group--right\\\"\\u003E\\u003Clabel class=\\\"label\\\" for=\\\"kalkulator-form__portfolio-select\\\" aria-describedby=\\\"tolltip__portfolio-select\\\"\\u003EVálasztható portfólióink:\\u003C\\u002Flabel\\u003E\\u003Cdiv class=\\\"tooltip\\\" id=\\\"tolltip__portfolio-select\\\" role=\\\"tooltip\\\" tabindex=\\\"0\\\" tooltip=\\\"\\\"\\u003E\\u003Cimg class=\\\"tooltip-icon\\\" src=\\\"\\u002Fstatic\\u002Fassets\\u002Fimg\\u002Finfo.svg\\\" alt=\\\"\\\"\\u003E\\u003Cdiv class=\\\"tooltip-content\\\"\\u003E\\u003Cp\\u003EPortfóliók közül kockázatvállalási hajlandósága és élethelyzete figyelembe vételével választhat.\\u003C\\u002Fp\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"col-sm-3 form-input__group\\\"\\u003E\\u003Cselect class=\\\"select app-kapcsolat__select\\\" id=\\\"kalkulator-form__portfolio-select\\\" name=\\\"hozam\\\" ng-options=\\\"obj.averageYield as obj.portfolio for obj in $ctrl.hozamok\\\" ng-model=\\\"$ctrl.expectedYieldTab2\\\" required aria-describedby=\\\"kapcsolatSubjectError\\\"\\u003E\\u003Coption value=\\\"\\\" role=\\\"option\\\"\\u003EKérjük válasszon!\\u003C\\u002Foption\\u003E\\u003C\\u002Fselect\\u003E\\u003Cinput-error id=\\\"portfolioError\\\" form=\\\"$ctrl.kalkulatorForm\\\" input-name=\\\"hozam\\\" message-required=\\\"Válasszon portfóliót!\\\"\\u003E\\u003C\\u002Finput-error\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"col-sm-4 form-input__group\\\"\\u003E\\u003Ca class=\\\"button\\\" href=\\\"https:\\u002F\\u002Fwww.otpnyugdij.hu\\u002Fhu\\u002Fkerdoiv-kockazatvallalas-felmeresere\\\" target=\\\"_blank\\\"\\u003EKitöltöm a kérdőívet\\u003C\\u002Fa\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"row form__row\\\" ng-if=\\\"$ctrl.expectedYieldTab2\\\"\\u003E\\u003Cdiv class=\\\"col-sm-5 form-input__group form-input__group--right\\\"\\u003E\\u003Clabel class=\\\"label\\\" for=\\\"kalkulator-form__portfolio-average\\\" aria-describedby=\\\"tooltip__portfolio-average\\\"\\u003EVárható hozamok:\\u003C\\u002Flabel\\u003E\\u003Cdiv class=\\\"tooltip\\\" id=\\\"tooltip__portfolio-average\\\" role=\\\"tooltip\\\" tabindex=\\\"0\\\" tooltip=\\\"\\\"\\u003E\\u003Cimg class=\\\"tooltip-icon\\\" src=\\\"\\u002Fstatic\\u002Fassets\\u002Fimg\\u002Finfo.svg\\\" alt=\\\"\\\"\\u003E\\u003Cdiv class=\\\"tooltip-content tooltip-form-content\\\" ng-transclude=\\\"tooltipFormContent\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"col-sm-7 form-input__group form-input__group--left\\\"\\u003E\\u003Cspan id=\\\"kalkulator-form__portfolio-average\\\"\\u003E\\u003Cstrong\\u003E{{$ctrl.expectedYieldTab2 | number}}%\\u003C\\u002Fstrong\\u003E\\u003C\\u002Fspan\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"kalkulator-form__choose-panel\\\" ng-if=\\\"$ctrl.activeTab==2\\\"\\u003E\\u003Ch3\\u003EVálasszon egyet portfólióink közül!\\u003C\\u002Fh3\\u003E\\u003Cdiv class=\\\"row form__row\\\"\\u003E\\u003Cdiv class=\\\"col-sm-5 form-input__group form-input__group--right\\\"\\u003E\\u003Clabel class=\\\"label\\\" for=\\\"kalkulator-form__portfolio-select\\\" aria-describedby=\\\"tolltip__portfolio-select\\\"\\u003EVálasztható portfólióink:\\u003C\\u002Flabel\\u003E\\u003Cdiv class=\\\"tooltip\\\" id=\\\"tolltip__portfolio-select\\\" role=\\\"tooltip\\\" tabindex=\\\"0\\\" tooltip=\\\"\\\"\\u003E\\u003Cimg class=\\\"tooltip-icon\\\" src=\\\"\\u002Fstatic\\u002Fassets\\u002Fimg\\u002Finfo.svg\\\" alt=\\\"\\\"\\u003E\\u003Cdiv class=\\\"tooltip-content\\\"\\u003E\\u003Cp\\u003EPortfóliók közül kockázatvállalási hajlandósága és élethelyzete figyelembe vételével választhat.\\u003C\\u002Fp\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"col-sm-3 form-input__group\\\"\\u003E\\u003Cselect class=\\\"select app-kapcsolat__select\\\" id=\\\"kalkulator-form__futureportfolio-select\\\" name=\\\"hozam-jovo\\\" ng-options=\\\"obj.expectedYield as obj.portfolio for obj in $ctrl.hozamok\\\" ng-model=\\\"$ctrl.expectedYieldTab3\\\" required aria-describedby=\\\"kapcsolatSubjectError\\\"\\u003E\\u003Coption value=\\\"\\\" role=\\\"option\\\"\\u003EKérjük válasszon!\\u003C\\u002Foption\\u003E\\u003C\\u002Fselect\\u003E\\u003Cinput-error id=\\\"portfolioError\\\" form=\\\"$ctrl.kalkulatorForm\\\" input-name=\\\"hozam-jovo\\\" message-required=\\\"Válasszon portfóliót!\\\"\\u003E\\u003C\\u002Finput-error\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"col-sm-4 form-input__group\\\"\\u003E\\u003Ca class=\\\"button\\\" href=\\\"https:\\u002F\\u002Fwww.otpnyugdij.hu\\u002Fhu\\u002Fkerdoiv-kockazatvallalas-felmeresere\\\" target=\\\"_blank\\\"\\u003EKitöltöm a kérdőívet\\u003C\\u002Fa\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"row form__row\\\" ng-if=\\\"$ctrl.expectedYieldTab3\\\"\\u003E\\u003Cdiv class=\\\"col-sm-5 form-input__group form-input__group--right\\\"\\u003E\\u003Clabel class=\\\"label\\\" for=\\\"kalkulator-form__portfolio-average\\\" aria-describedby=\\\"tooltip__portfolio-average\\\"\\u003EVárható hozamok:\\u003C\\u002Flabel\\u003E\\u003Cdiv class=\\\"tooltip\\\" id=\\\"tooltip__portfolio-average\\\" role=\\\"tooltip\\\" tabindex=\\\"0\\\" tooltip=\\\"\\\"\\u003E\\u003Cimg class=\\\"tooltip-icon\\\" src=\\\"\\u002Fstatic\\u002Fassets\\u002Fimg\\u002Finfo.svg\\\" alt=\\\"\\\"\\u003E\\u003Cdiv class=\\\"tooltip-content tooltip-form-content\\\" ng-transclude=\\\"tooltipFormContent\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"col-sm-7 form-input__group form-input__group--left\\\"\\u003E\\u003Cspan id=\\\"kalkulator-form__portfolio-average\\\"\\u003E\\u003Cstrong\\u003E{{$ctrl.expectedYieldTab3 | number}}%\\u003C\\u002Fstrong\\u003E\\u003C\\u002Fspan\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Ffieldset\\u003E\\u003Cdiv class=\\\"kalkulator-form__button-row\\\"\\u003E\\u003Cbutton class=\\\"button\\\" type=\\\"submit\\\" ng-click=\\\"$ctrl.calculate()\\\"\\u003EKiszámolom\\u003C\\u002Fbutton\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fform\\u003E\";;return pug_html;};\nmodule.exports = template;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../source/application/kalkulator/kalkulator-form/kalkulator-form.pug\n// module id = 601\n// module chunks = 0","var pug = require(\"!../../../../devtools/node_modules/pug-runtime/index.js\");\n\nfunction template(locals) {var pug_html = \"\", pug_mixins = {}, pug_interp;pug_html = pug_html + \"\\u003Cdiv class=\\\"kalkulator-result\\\" id=\\\"kalkulator-result\\\"\\u003E\\u003Cdiv class=\\\"row\\\"\\u003E\\u003Cdiv class=\\\"col-sm-10 col-sm-offset-1\\\"\\u003E\\u003Cdiv class=\\\"kalkulator-result__text text-center\\\"\\u003E\\u003Cp aria-describedby=\\\"tooltip__text\\\"\\u003EÖnnek még legalább \\u003Cstrong\\u003E{{$ctrl.eredmeny.yearsLeftToRetire}} éve\\u003C\\u002Fstrong\\u003E van az öregségi nyugdíjkorhatár betöltéséig.\\u003Cspan class=\\\"tooltip\\\" id=\\\"tooltip__text\\\" role=\\\"tooltip\\\" tabindex=\\\"0\\\" tooltip=\\\"\\\"\\u003E\\u003Cimg class=\\\"tooltip-icon\\\" src=\\\"\\u002Fstatic\\u002Fassets\\u002Fimg\\u002Finfo.svg\\\" alt=\\\"\\\"\\u003E\\u003Cspan class=\\\"tooltip-content\\\"\\u003EJelenleg 65 év az öregségi nyugdíjkorhatár\\u003C\\u002Fspan\\u003E\\u003C\\u002Fspan\\u003E\\u003C\\u002Fp\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"table-container\\\"\\u003E\\u003Ctable class=\\\"kalkulator-result__table\\\" ng-if=\\\"$ctrl.isMegtakaritas()\\\"\\u003E\\u003Ccaption class=\\\"sr-only\\\"\\u003EVárható összegek...\\u003C\\u002Fcaption\\u003E\\u003Ctbody\\u003E\\u003Ctr\\u003E\\u003Cth scope=\\\"row\\\"\\u003EVárható megtakarítás tőkerésze\\u003C\\u002Fth\\u003E\\u003Ctd\\u003E\\u003Cstrong\\u003E{{$ctrl.eredmeny.expectedCapitalOfSavings | currency:'':0}} Ft\\u003C\\u002Fstrong\\u003E\\u003C\\u002Ftd\\u003E\\u003C\\u002Ftr\\u003E\\u003Ctr\\u003E\\u003Cth scope=\\\"row\\\"\\u003EVárható hozam\\u003C\\u002Fth\\u003E\\u003Ctd\\u003E\\u003Cstrong\\u003E{{$ctrl.eredmeny.expectedYield | currency:'':0}} Ft\\u003C\\u002Fstrong\\u003E\\u003C\\u002Ftd\\u003E\\u003C\\u002Ftr\\u003E\\u003Ctr\\u003E\\u003Cth scope=\\\"row\\\"\\u003EVárható vagyon\\u003C\\u002Fth\\u003E\\u003Ctd\\u003E\\u003Cstrong\\u003E{{$ctrl.eredmeny.expectedAssets | currency:'':0}} Ft\\u003C\\u002Fstrong\\u003E\\u003C\\u002Ftd\\u003E\\u003C\\u002Ftr\\u003E\\u003Ctr\\u003E\\u003Cth scope=\\\"row\\\" style=\\\"padding-left: 65px;\\\"\\u003Emelyből az \\u003Cspan aria-describedby=\\\"tooltip__table-text\\\"\\u003Eadó-visszatérítésből származó \\u003Cbr\\u003Evagyonrész\\u003C\\u002Fspan\\u003E\\u003Cdiv class=\\\"tooltip\\\" id=\\\"tooltip__table-text\\\" role=\\\"tooltip\\\" tabindex=\\\"0\\\"\\u003E\\u003Cimg class=\\\"tooltip-icon\\\" src=\\\"\\u002Fstatic\\u002Fassets\\u002Fimg\\u002Finfo.svg\\\" alt=\\\"\\\"\\u003E\\u003Cdiv class=\\\"tooltip-content tooltip-result-content\\\" ng-transclude=\\\"tooltipResultContent\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003Eösszege\\u003C\\u002Fth\\u003E\\u003Ctd\\u003E\\u003Cstrong\\u003E{{$ctrl.eredmeny.taxRefund | currency:'':0}} Ft\\u003C\\u002Fstrong\\u003E\\u003C\\u002Ftd\\u003E\\u003C\\u002Ftr\\u003E\\u003Ctr\\u003E\\u003Cth scope=\\\"row\\\"\\u003EVárható havi nyugdíjjáradék összege (10 évre)\\u003C\\u002Fth\\u003E\\u003Ctd\\u003E\\u003Cstrong\\u003E{{$ctrl.eredmeny.expectedMonthlyRetirementAnnuity10Years | currency:'':0}} Ft\\u003C\\u002Fstrong\\u003E\\u003C\\u002Ftd\\u003E\\u003C\\u002Ftr\\u003E\\u003Ctr\\u003E\\u003Cth scope=\\\"row\\\"\\u003EVárható havi nyugdíjjáradék összege (20 évre)\\u003C\\u002Fth\\u003E\\u003Ctd\\u003E\\u003Cstrong\\u003E{{$ctrl.eredmeny.expectedMonthlyRetirementAnnuity20Years | currency:'':0}} Ft\\u003C\\u002Fstrong\\u003E\\u003C\\u002Ftd\\u003E\\u003C\\u002Ftr\\u003E\\u003C\\u002Ftbody\\u003E\\u003C\\u002Ftable\\u003E\\u003Ctable class=\\\"kalkulator-result__table\\\" ng-if=\\\"$ctrl.isJaradek()\\\"\\u003E\\u003Ccaption class=\\\"sr-only\\\"\\u003EVárható összegek...\\u003C\\u002Fcaption\\u003E\\u003Ctbody\\u003E\\u003Ctr\\u003E\\u003Cth scope=\\\"row\\\"\\u003EHavi befizetés összege adó-visszatérítés igénybevétele esetén\\u003C\\u002Fth\\u003E\\u003Ctd\\u003E\\u003Cstrong\\u003E{{$ctrl.eredmeny.monthlyPaymentWithTaxRefund | currency:'':0}} Ft\\u003C\\u002Fstrong\\u003E\\u003C\\u002Ftd\\u003E\\u003C\\u002Ftr\\u003E\\u003Ctr\\u003E\\u003Cth scope=\\\"row\\\"\\u003EHavi befizetés összege adó-visszatérítés igénybevétele nélkül\\u003C\\u002Fth\\u003E\\u003Ctd\\u003E\\u003Cstrong\\u003E{{$ctrl.eredmeny.monthlyPaymentWithoutTaxRefund | currency:'':0}} Ft\\u003C\\u002Fstrong\\u003E\\u003C\\u002Ftd\\u003E\\u003C\\u002Ftr\\u003E\\u003C\\u002Ftbody\\u003E\\u003C\\u002Ftable\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"kalkulator-result__buttons\\\"\\u003E\\u003Ca class=\\\"button\\\" href=\\\"https:\\u002F\\u002Fmagan.onyp.otpportalok.hu\\u002Fbelepesi-nyilatkozat-regisztracio?kod=A2418\\\" target=\\\"_blank\\\"\\u003EBelépek az OTP Nyugdíjpénztárba\\u003C\\u002Fa\\u003E\\u003Ca class=\\\"button\\\" ng-href=\\\"{{$ctrl.getPdfUrl()}}\\\" target=\\\"_blank\\\"\\u003EKalkuláció letöltése\\u003C\\u002Fa\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"kalkulator-result__text\\\"\\u003E\\u003Cp\\u003EA kalkulátort az OTP Nyugdíjpénztár készítette a pénztártagok és érdeklődők tájékoztatása érdekében.\\u003C\\u002Fp\\u003E\\u003Cp\\u003EA kalkulátor a befizetések után jelenleg igénybe vehető 20%-os adó-visszatérítéssel és azok várható hozamával jövedelemtől függetlenül mindvégig számol. Az adó-visszatérítés felső határa maximum évi 150 000 Ft.\\u003C\\u002Fp\\u003E\\u003Cp\\u003EA számításnál az OTP Nyugdíjpénztár hatályos Alapszabályában rögzített sávos költséglevonását vettük figyelembe.\\u003C\\u002Fp\\u003E\\u003Cp\\u003E\\u003Cstrong\\u003EFelhívjuk figyelmét, hogy a számítás eredménye kizárólag tájékoztató jellegű, a kiszámolt összegek becslések; azok nem minősülnek ajánlattételnek és elérése a jövőben nem garantálható.\\u003C\\u002Fstrong\\u003E\\u003C\\u002Fp\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\";;return pug_html;};\nmodule.exports = template;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../source/application/kalkulator/kalkulator-result/kalkulator-result.pug\n// module id = 602\n// module chunks = 0","var pug = require(\"!../../../../devtools/node_modules/pug-runtime/index.js\");\n\nfunction template(locals) {var pug_html = \"\", pug_mixins = {}, pug_interp;pug_html = pug_html + \"\\u003Cdiv class=\\\"kalkulator-vhk\\\"\\u003E\\u003Ch3 class=\\\"kalkulator-vhk__title\\\"\\u003EKérdése van? Várjuk megkeresését!\\u003C\\u002Fh3\\u003E\\u003Cform class=\\\"app-visszahivas-keres__form\\\" name=\\\"$ctrl.visszahivasKeresForm\\\" novalidate ng-submit=\\\"$ctrl.postContactForm()\\\" ng-show=\\\"!$ctrl.success\\\"\\u003E\\u003Cdiv class=\\\"row form__row\\\"\\u003E\\u003Cdiv class=\\\"col-sm-4\\\"\\u003E\\u003Clabel class=\\\"label label--right\\\" for=\\\"{{$ctrl.id}}_kalkulator_nev\\\"\\u003ENév\\u003Cspan aria-hidden=\\\"true\\\"\\u003E*:\\u003C\\u002Fspan\\u003E\\u003C\\u002Flabel\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"col-sm-8\\\"\\u003E\\u003Cinput class=\\\"form-input onfocus\\\" id=\\\"{{$ctrl.id}}_kalkulator_nev\\\" type=\\\"text\\\" name=\\\"nev\\\" ng-model=\\\"$ctrl.model.name\\\" maxlength=\\\"40\\\" ng-pattern=\\\"$ctrl.patterns.simpleText\\\" required aria-describedby=\\\"{{$ctrl.id}}_vhkNameErrorSavingsCalculator\\\"\\u003E\\u003Cinput-error id=\\\"{{$ctrl.id}}_vhkNameErrorSavingsCalculator\\\" form=\\\"$ctrl.visszahivasKeresForm\\\" input-name=\\\"nev\\\" message-required=\\\"Kérjük adja meg a nevét!\\\" message-pattern=\\\"Kérjük helyesen adja meg a nevét!\\\"\\u003E\\u003C\\u002Finput-error\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"row form__row\\\"\\u003E\\u003Cdiv class=\\\"col-sm-4\\\"\\u003E\\u003Clabel class=\\\"label label--right\\\" for=\\\"{{$ctrl.id}}_kalkulator_telefon\\\"\\u003ETelefonszám\\u003Cspan aria-hidden=\\\"true\\\"\\u003E*:\\u003C\\u002Fspan\\u003E\\u003C\\u002Flabel\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"col-sm-8\\\"\\u003E\\u003Cinput class=\\\"form-input\\\" id=\\\"{{$ctrl.id}}_kalkulator_telefon\\\" type=\\\"tel\\\" name=\\\"telefon\\\" ng-model=\\\"$ctrl.model.phone\\\" maxlength=\\\"25\\\" ng-pattern=\\\"$ctrl.patterns.phone\\\" required aria-describedby=\\\"{{$ctrl.id}}_vhkPhoneErrorSavingsCalculator\\\"\\u003E\\u003Cinput-error id=\\\"{{$ctrl.id}}_vhkPhoneErrorSavingsCalculator\\\" form=\\\"$ctrl.visszahivasKeresForm\\\" input-name=\\\"telefon\\\" message-pattern=\\\"Kérjük helyesen adja meg a telefonszámot!\\\" message-required=\\\"Kérjük adja meg a telefonszámát!\\\"\\u003E\\u003C\\u002Finput-error\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"row form__row\\\"\\u003E\\u003Cdiv class=\\\"col-sm-4\\\"\\u003E\\u003Clabel class=\\\"label label--right\\\" for=\\\"{{$ctrl.id}}_kalkulator_email\\\"\\u003EE-mail cím:\\u003C\\u002Flabel\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"col-sm-8\\\"\\u003E\\u003Cinput class=\\\"form-input\\\" id=\\\"{{$ctrl.id}}_kalkulator_email\\\" type=\\\"email\\\" name=\\\"email\\\" ng-model=\\\"$ctrl.model.email\\\" maxlength=\\\"40\\\" ng-pattern=\\\"$ctrl.patterns.email\\\" ng-model-options=\\\"{updateOn: 'blur'}\\\" aria-describedby=\\\"{{$ctrl.id}}_vhkEmailErrorSavingsCalculator\\\"\\u003E\\u003Cinput-error id=\\\"{{$ctrl.id}}_vhkEmailErrorSavingsCalculator\\\" form=\\\"$ctrl.visszahivasKeresForm\\\" input-name=\\\"email\\\" message-pattern=\\\"Hibásan adta meg az e-mail címet, kérjük pontosítsa az adatokat!\\\"\\u003E\\u003C\\u002Finput-error\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"row form__row\\\"\\u003E\\u003Cdiv class=\\\"col-sm-4\\\"\\u003E\\u003Clabel class=\\\"label label--right\\\" for=\\\"{{$ctrl.id}}_kalkulator_idopont\\\"\\u003EVisszahívás időpontja\\u003Cspan aria-hidden=\\\"true\\\"\\u003E*:\\u003C\\u002Fspan\\u003E\\u003C\\u002Flabel\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"col-sm-8\\\"\\u003E\\u003Cselect class=\\\"select\\\" id=\\\"{{$ctrl.id}}_kalkulator_idopont\\\" name=\\\"idopont\\\" ng-model=\\\"$ctrl.model.time\\\" required inputerrorId=\\\"{{$ctrl.id}}_vhkCallbackErrorSavingsCalculator\\\"\\u003E\\u003Coption value=\\\"\\\" disabled selected role=\\\"option\\\"\\u003EKérjük válasszon!\\u003C\\u002Foption\\u003E\\u003Coption value=\\\"{{ idopont }}\\\" ng-repeat=\\\"idopont in $ctrl.visszahivasIdok track by $index\\\" role=\\\"option\\\"\\u003E{{ idopont }}\\u003C\\u002Foption\\u003E\\u003C\\u002Fselect\\u003E\\u003Cinput-error id=\\\"{{$ctrl.id}}_vhkCallbackErrorSavingsCalculator\\\" form=\\\"$ctrl.visszahivasKeresForm\\\" input-name=\\\"idopont\\\" message-required=\\\"Kérjük válasszon időpontot!\\\"\\u003E\\u003C\\u002Finput-error\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"row form__row captcha__row\\\"\\u003E\\u003Cdiv class=\\\"col-sm-4\\\"\\u003E\\u003Clabel class=\\\"label label--right\\\" for=\\\"kalkulator_captcha\\\"\\u003EEllenőrzés\\u003Cspan aria-hidden=\\\"true\\\"\\u003E*:\\u003C\\u002Fspan\\u003E\\u003C\\u002Flabel\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"col-sm-8\\\"\\u003E\\u003Cdiv class=\\\"captcha\\\"\\u003E\\u003Cdiv vc-recaptcha key=\\\"'6LdfJB8TAAAAAPGueZFYId4-pMm-6RvQ2Tz6ZmyO'\\\" ng-model=\\\"$ctrl.model.captchaValue\\\" name=\\\"captcha\\\" required on-expire=\\\"this.resetCaptcha()\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cinput-error id=\\\"{{$ctrl.id}}_vhkCaptchaErrorSavingsCalculator\\\" form=\\\"$ctrl.visszahivasKeresForm\\\" input-name=\\\"captcha\\\" message-required=\\\"Hibásan adta meg a képen szereplő szöveget, kérjük pontosítsa az adatokat!\\\" message-pattern=\\\"Kérjük helyesen adja meg a képen szereplő szöveget!\\\" message-server-error=\\\"Hibásan adta meg a képen szereplő szöveget, kérjük pontosítsa az adatokat!\\\"\\u003E\\u003C\\u002Finput-error\\u003E\\u003Cdiv class=\\\"checkbox__item\\\"\\u003E\\u003Cinput id=\\\"visszahivas-keres-form__adatvedelmi\\\" type=\\\"checkbox\\\" name=\\\"adatvedelmi\\\" ng-model=\\\"$ctrl.adatvedelmiIsChecked\\\"\\u003E\\u003Clabel class=\\\"checkbox\\\" for=\\\"visszahivas-keres-form__adatvedelmi\\\"\\u003EKijelentem, hogy az \\u003Ca href=\\\"https:\\u002F\\u002Fwww.otpnyugdij.hu\\u002Fstatic\\u002Fotpnyugdij\\u002Fdownload\\u002Fonyp_adatkezelesi_tajekoztato.pdf\\\" target=\\\"_blank\\\" rel=\\\"noopener noreferrer\\\"\\u003EAdatkezelési tájékoztató\\u003C\\u002Fa\\u003E tartalmát megismertem és tudomásul vettem a tájékoztató III. fejezet 5. pontjában leírt adatkezelést.\\u003C\\u002Flabel\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cbutton class=\\\"button\\\" type=\\\"submit\\\" ng-disabled=\\\"$ctrl.visszahivasKeresForm.$invalid || !$ctrl.adatvedelmiIsChecked\\\" ng-click=\\\"$ctrl.postVisszahivasKeresForm()\\\"\\u003EVisszahívást kérek\\u003C\\u002Fbutton\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fform\\u003E\\u003Cdiv class=\\\"app-visszahivas-keres__success\\\" ng-show=\\\"$ctrl.success\\\"\\u003E\\u003Cp class=\\\"app-visszahivas-keres__success-text\\\" tabindex=\\\"-1\\\"\\u003EKöszönjük érdeklődését!\\u003Cbr\\u003EMunkatársunk hamarosan felveszi Önnel a kapcsolatot.\\u003C\\u002Fp\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\";;return pug_html;};\nmodule.exports = template;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../source/application/kalkulator/kalkulator-vhk/kalkulator-vhk.pug\n// module id = 603\n// module chunks = 0","var pug = require(\"!../../../devtools/node_modules/pug-runtime/index.js\");\n\nfunction template(locals) {var pug_html = \"\", pug_mixins = {}, pug_interp;pug_html = pug_html + \"\\u003Cdiv class=\\\"app-kalkulator\\\"\\u003E\\u003Cdiv ng-if=\\\"$ctrl.technicalError\\\"\\u003ETechnikai hiba történt\\u003C\\u002Fdiv\\u003E\\u003Ch2 class=\\\"app-kalkulator__title\\\" ng-if=\\\"$ctrl.tipus=='megtakaritas'\\\"\\u003ESzámolja ki, milyen megtakarításra számíthat havi befizetései alapján!\\u003C\\u002Fh2\\u003E\\u003Ch2 class=\\\"app-kalkulator__title\\\" ng-if=\\\"$ctrl.tipus=='jaradek'\\\"\\u003ESzámolja ki, hogy a vágyott havi nyugdíj-kiegészítéshez, milyen összegű rendszeres megtakarítás szükséges!\\u003C\\u002Fh2\\u003E\\u003Ckalkulator-form hozamok=\\\"$ctrl.hozamok\\\" tipus=\\\"$ctrl.tipus\\\" vegpontok=\\\"$ctrl.vegpontok\\\" on-tab-change=\\\"$ctrl.resetResults()\\\" on-calculate=\\\"$ctrl.calculate(data)\\\"\\u003E\\u003Ctooltip-form-content ng-transclude=\\\"tooltipFormContent\\\"\\u003E\\u003C\\u002Ftooltip-form-content\\u003E\\u003C\\u002Fkalkulator-form\\u003E\\u003Ckalkulator-result ng-if=\\\"$ctrl.eredmeny\\\" tipus=\\\"$ctrl.tipus\\\" eredmeny=\\\"$ctrl.eredmeny\\\"\\u003E\\u003Ctooltip-result-content ng-transclude=\\\"tooltipResultContent\\\"\\u003E\\u003C\\u002Ftooltip-result-content\\u003E\\u003C\\u002Fkalkulator-result\\u003E\\u003Ckalkulator-vhk id=\\\"calculator\\\" ng-if=\\\"$ctrl.eredmeny\\\" visszahivas-idok=\\\"$ctrl.visszahivasIdok\\\" success=\\\"$ctrl.vhkSuccess\\\" on-post-form=\\\"$ctrl.sendVhk(data)\\\"\\u003E\\u003C\\u002Fkalkulator-vhk\\u003E\\u003C\\u002Fdiv\\u003E\";;return pug_html;};\nmodule.exports = template;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../source/application/kalkulator/kalkulator.pug\n// module id = 604\n// module chunks = 0"],"sourceRoot":""}