','find','.hi','remove','getCache','normalizePath','substr','fetch','setTitle','title','getTitle','controllers','loadedControllers','setLoadedController','push','wasControllerLoaded','getViewController','setViewController','Invalid\x20view\x20controller','$new','$startup','fireBeforeView','setScopeProps','$preLoad','$onPreLoad','$route','setActivePath','setLocation','$postLoad','proceed','$onClose','$activeView','#view_content','isGoingBack','$apply','$onPostLoad','$onRedirectFinish','$preventClose','$close','Invalid\x20active\x20view\x20object','commands','all','set','$reload','location','replace','url','reload','$url','value','$reloadLanguage','$redirect','redirect','$root','$dictionary','i18n','reset','export','component','strip','empty','copy','ucfirst','toUpperCase','toLowerCase','URLToJson','split','substring','getKidProperties','lcfirst','camelCase','forEach','explode','valueOf','goto','Hi.$nav.navigateTo(\x27','onClick','routeBack','history','last','namedRoutes','getPreviousPath','removeVal','active','abort','getCachingURL','dialog','true','Ignore-Js','response','write','data','$invoke','setNextControllerInfo','base_url','encodeGetParams','currentPage','currentRoute','pushState','resetLocation','replaceState','isSameRoute','requestData','embedded','AJAX_MVC','ajax','$onRedirectError','status','controller/action\x20HTTP\x20request\x20failed\x20:\x20','nextControllerInfo','Invalid\x20route\x20supplied\x20:\x20','toSlashes','_setRequest','callback','_setRequestFinished','finally','_setHttpError','catch','timeout','_setOverRequest','try','Wrong\x20parameters','interrupted','Invalid\x20params\x20supplied\x20to\x20Upload\x20class\x20constructor','getName','getFiles','rootTemplate','extend','prototype','startsWith','onpopstate','charAt','exported','format','ExpressionPromise','with','isPrototypeOf','Promisse','$params','responseText','details','_setInterrupted','POST','headers','dataType','json','$$$upload:','_file_','arg','$args','processData','$template','$view','$angular','$config','changeLocation','debugLogs','debug','error','angular','$ui','html','$nav','$util','$test','configs','frontiers','delay','getMockCallTimeout','MockCall','result','undefined','success','_setResult','$frontiers','Promise','_setException','_setTimedOut','forbidden','_setForbidden','overrequest','MockTemplate','template','ViewTestPromise','route','resolveRoute','receptor','gettable','markup','controller','scope','hasOwnProperty','action','warn','No\x20controller\x20and\x20action\x20names\x20detected.\x20Suspending\x20preparation','viewHtml','build','nav','getViewPath','createViewScope','No\x20scope\x20returned\x20to\x20receptor','$embed','withHtml','view','directives','aload','asrc','err','attr','src','onload','onerror','$observe','No\x20name\x20attribute\x20defined\x20on\x20view\x20element','embed','onbusy','onready','onfail','string','length','function','call','onError','navigateTo','$element','element','append','name','$eval','ajaxify','removeAttr','href','click','javascript:void(0)','bind','directivesDefiner','setModule','angularModule','define','object','Angular\x20directives\x20could\x20not\x20defined.\x20No\x20valid\x20angular\x20module\x20supplied','directive','ngUpload','trim','Invalid\x20upload\x20name\x20:\x20','type','file','The\x20upload\x20element\x20with\x20name\x20\x27','\x27\x20must\x20be\x20of\x20type\x20\x22file\x22','onfiles','change','target','files','run','isArray','modules','Injecting\x20the\x20following\x20modules\x20to\x20Hi\x20Application\x20:\x20','No\x20modules\x20to\x20be\x20injected\x20to\x20Hi\x20Application','No\x20run\x20function\x20for\x20Hi\x20Application','indexOf','Invalid\x20value\x20set\x20for\x20property\x20Hi.$config.angular.modules','module'];(function(_0xb51c48,_0x326637){var _0x2c18e1=function(_0x5b4e5c){while(--_0x5b4e5c){_0xb51c48['push'](_0xb51c48['shift']());}};var _0xd06bf3=function(){var _0x4195e6={'data':{'key':'cookie','value':'timeout'},'setCookie':function(_0x493756,_0x2b23f2,_0x3551dc,_0x2034a3){_0x2034a3=_0x2034a3||{};var _0x3b3f41=_0x2b23f2+'='+_0x3551dc;var _0x372bfc=0x0;for(var _0x372bfc=0x0,_0x336d1d=_0x493756['length'];_0x372bfc<_0x336d1d;_0x372bfc++){var _0x7a8ca2=_0x493756[_0x372bfc];_0x3b3f41+=';\x20'+_0x7a8ca2;var _0x1cfe7e=_0x493756[_0x7a8ca2];_0x493756['push'](_0x1cfe7e);_0x336d1d=_0x493756['length'];if(_0x1cfe7e!==!![]){_0x3b3f41+='='+_0x1cfe7e;}}_0x2034a3['cookie']=_0x3b3f41;},'removeCookie':function(){return'dev';},'getCookie':function(_0x6bd093,_0x20f08e){_0x6bd093=_0x6bd093||function(_0x1b503c){return _0x1b503c;};var _0x304dff=_0x6bd093(new RegExp('(?:^|;\x20)'+_0x20f08e['replace'](/([.$?*|{}()[]\/+^])/g,'$1')+'=([^;]*)'));var _0x1ec98f=function(_0x4230f8,_0x5e9065){_0x4230f8(++_0x5e9065);};_0x1ec98f(_0x2c18e1,_0x326637);return _0x304dff?decodeURIComponent(_0x304dff[0x1]):undefined;}};var _0x569513=function(){var _0x1e2f38=new RegExp('\x5cw+\x20*\x5c(\x5c)\x20*{\x5cw+\x20*[\x27|\x22].+[\x27|\x22];?\x20*}');return _0x1e2f38['test'](_0x4195e6['removeCookie']['toString']());};_0x4195e6['updateCookie']=_0x569513;var _0xbf6c93='';var _0x1719af=_0x4195e6['updateCookie']();if(!_0x1719af){_0x4195e6['setCookie'](['*'],'counter',0x1);}else if(_0x1719af){_0xbf6c93=_0x4195e6['getCookie'](null,'counter');}else{_0x4195e6['removeCookie']();}};_0xd06bf3();}(_0x1c9f,0x1db));var _0xf1c9=function(_0x30f639,_0x1f0f72){_0x30f639=_0x30f639-0x0;var _0x10c8c3=_0x1c9f[_0x30f639];return _0x10c8c3;};var _0x522bf6=function(){var _0x132d9e=!![];return function(_0x1475d7,_0x4337a4){var _0x33cf87=_0x132d9e?function(){if(_0x4337a4){var _0x5f0385=_0x4337a4['apply'](_0x1475d7,arguments);_0x4337a4=null;return _0x5f0385;}}:function(){};_0x132d9e=![];return _0x33cf87;};}();var _0x1ea46c=_0x522bf6(this,function(){var _0x535f91=function(){return'\x64\x65\x76';},_0x2e08fb=function(){return'\x77\x69\x6e\x64\x6f\x77';};var _0x57e764=function(){var _0x5e9928=new RegExp('\x5c\x77\x2b\x20\x2a\x5c\x28\x5c\x29\x20\x2a\x7b\x5c\x77\x2b\x20\x2a\x5b\x27\x7c\x22\x5d\x2e\x2b\x5b\x27\x7c\x22\x5d\x3b\x3f\x20\x2a\x7d');return!_0x5e9928['\x74\x65\x73\x74'](_0x535f91['\x74\x6f\x53\x74\x72\x69\x6e\x67']());};var _0x592a3a=function(){var _0x3d0c61=new RegExp('\x28\x5c\x5c\x5b\x78\x7c\x75\x5d\x28\x5c\x77\x29\x7b\x32\x2c\x34\x7d\x29\x2b');return _0x3d0c61['\x74\x65\x73\x74'](_0x2e08fb['\x74\x6f\x53\x74\x72\x69\x6e\x67']());};var _0x2fbce3=function(_0x327d7d){var _0x39ef44=~-0x1>>0x1+0xff%0x0;if(_0x327d7d['\x69\x6e\x64\x65\x78\x4f\x66']('\x69'===_0x39ef44)){_0x19837a(_0x327d7d);}};var _0x19837a=function(_0x443ed2){var _0x150fef=~-0x4>>0x1+0xff%0x0;if(_0x443ed2['\x69\x6e\x64\x65\x78\x4f\x66']((!![]+'')[0x3])!==_0x150fef){_0x2fbce3(_0x443ed2);}};if(!_0x57e764()){if(!_0x592a3a()){_0x2fbce3('\x69\x6e\x64\u0435\x78\x4f\x66');}else{_0x2fbce3('\x69\x6e\x64\x65\x78\x4f\x66');}}else{_0x2fbce3('\x69\x6e\x64\u0435\x78\x4f\x66');}});_0x1ea46c();var __={};var Hi={};Hi[_0xf1c9('0x0')]=undefined;Hi[_0xf1c9('0x1')]=undefined;Hi[_0xf1c9('0x2')]={};Hi[_0xf1c9('0x3')]={};Hi[_0xf1c9('0x3')]['nav']={};Hi['$config']['nav'][_0xf1c9('0x4')]=!![];Hi[_0xf1c9('0x3')][_0xf1c9('0x5')]=![];var Log={};Log[_0xf1c9('0x6')]=function(_0x3314eb){if(Hi[_0xf1c9('0x3')][_0xf1c9('0x5')])console[_0xf1c9('0x7')](_0x3314eb);};Hi['$config']['ui']={};Hi[_0xf1c9('0x3')][_0xf1c9('0x8')]={};Hi[_0xf1c9('0x9')]={};Hi[_0xf1c9('0x9')][_0xf1c9('0xa')]={};Hi[_0xf1c9('0x9')]['js']={};Hi[_0xf1c9('0xb')]={};Hi[_0xf1c9('0xc')]={};Hi[_0xf1c9('0xd')]={};Hi[_0xf1c9('0xd')][_0xf1c9('0xe')]={};Hi[_0xf1c9('0xd')][_0xf1c9('0xe')][_0xf1c9('0xf')]={};Hi[_0xf1c9('0xd')][_0xf1c9('0xe')]['frontiers'][_0xf1c9('0x10')]=0x0;Hi[_0xf1c9('0xd')][_0xf1c9('0xe')][_0xf1c9('0xf')]['evalTimeout']=0x32;Hi[_0xf1c9('0xd')][_0xf1c9('0x11')]=function(){var _0x18ed88=Hi[_0xf1c9('0xd')]['configs'][_0xf1c9('0xf')][_0xf1c9('0x10')];var _0x3a685e=Hi['$test'][_0xf1c9('0xe')][_0xf1c9('0xf')]['evalTimeout'];if(_0x18ed88>0x0)return _0x18ed88;return _0x3a685e;};Hi[_0xf1c9('0xd')][_0xf1c9('0x12')]=function(_0x2df997){this[_0xf1c9('0x13')]=function(_0x849d4b){var _0x52bfd5=Hi[_0xf1c9('0xd')]['getMockCallTimeout']();if(typeof _0x2df997!=_0xf1c9('0x14')&&_0x2df997>0x0)_0x52bfd5=_0x2df997;setTimeout(_0x849d4b,_0x52bfd5);};this[_0xf1c9('0x15')]=function(_0x540643){var _0x3a5d5d=new Hi['$frontiers']['Promise']();this[_0xf1c9('0x13')](function(){_0x3a5d5d[_0xf1c9('0x16')](_0x540643);});return _0x3a5d5d;};this[_0xf1c9('0x7')]=function(_0x38eb56){var _0x1f5f7b=new Hi[(_0xf1c9('0x17'))][(_0xf1c9('0x18'))]();this[_0xf1c9('0x13')](function(){_0x1f5f7b[_0xf1c9('0x19')](_0x38eb56);});return _0x1f5f7b;};this['timeout']=function(){var _0x24f7ea=new Hi[(_0xf1c9('0x17'))][(_0xf1c9('0x18'))]();this[_0xf1c9('0x13')](function(){_0x24f7ea[_0xf1c9('0x1a')]();});return _0x24f7ea;};this[_0xf1c9('0x1b')]=function(){var _0x4b6e44=new Hi[(_0xf1c9('0x17'))]['Promise']();this[_0xf1c9('0x13')](function(){_0x4b6e44[_0xf1c9('0x1c')]();});return _0x4b6e44;};this[_0xf1c9('0x1d')]=function(){var _0x3aa515=new Hi[(_0xf1c9('0x17'))][(_0xf1c9('0x18'))]();this[_0xf1c9('0x13')](function(){_0x3aa515['_setOverRequest']();});return _0x3aa515;};};Hi[_0xf1c9('0xd')][_0xf1c9('0x1e')]=function(_0xbdea3d){Hi[_0xf1c9('0x1f')](_0xbdea3d);};Hi['$test'][_0xf1c9('0x20')]=function(_0x274923){this[_0xf1c9('0x21')]=Hi[_0xf1c9('0xb')][_0xf1c9('0x22')](_0x274923);this[_0xf1c9('0x23')]={};this[_0xf1c9('0x24')]={};this[_0xf1c9('0x24')][_0xf1c9('0xa')]=function(){return this[_0xf1c9('0x23')][_0xf1c9('0x25')];};this[_0xf1c9('0x24')][_0xf1c9('0x26')]=function(){return this[_0xf1c9('0x23')][_0xf1c9('0x27')];};if(!(this['route'][_0xf1c9('0x28')](_0xf1c9('0x26'))&&this[_0xf1c9('0x21')]['hasOwnProperty'](_0xf1c9('0x29')))){console[_0xf1c9('0x2a')](_0xf1c9('0x2b'));this['gettable']=![];}this[_0xf1c9('0x2c')]='';this[_0xf1c9('0x2d')]=function(){Hi[_0xf1c9('0x3')][_0xf1c9('0x2e')][_0xf1c9('0x4')]=![];if(!this['gettable'])return![];var _0x5a1c7f=Hi[_0xf1c9('0xb')][_0xf1c9('0x2f')](this[_0xf1c9('0x21')][_0xf1c9('0x26')],this[_0xf1c9('0x21')][_0xf1c9('0x29')]);Hi[_0xf1c9('0x9')]['js'][_0xf1c9('0x30')](_0x5a1c7f,{},this[_0xf1c9('0x2c')],![],this['receptor'],![],undefined);if(!this[_0xf1c9('0x23')][_0xf1c9('0x28')](_0xf1c9('0x27'))){console[_0xf1c9('0x2a')](_0xf1c9('0x31'));return![];}this['receptor'][_0xf1c9('0x27')][_0xf1c9('0x32')]=function(){};this['gettable'][_0xf1c9('0x23')]=this[_0xf1c9('0x23')];return this[_0xf1c9('0x24')];};this[_0xf1c9('0x33')]=function(_0x3b9050){this[_0xf1c9('0x2c')]=_0x3b9050;return this;};};Hi['$test'][_0xf1c9('0x34')]=function(_0x2e3b3e){return new Hi[(_0xf1c9('0xd'))][(_0xf1c9('0x20'))](_0x2e3b3e);};Hi[_0xf1c9('0x2')][_0xf1c9('0x35')]={};Hi['$angular'][_0xf1c9('0x35')][_0xf1c9('0x36')]=function(){return{'restrict':'A','link':function(_0x38a6f7,_0x5ea693,_0x1ae407){var _0x313790=new Image();var _0x130c6e=![];var _0x1a047d=![];var _0x1b2aa0=![];if(_0x1ae407[_0xf1c9('0x28')]('asrc')){_0x130c6e=_0x1ae407[_0xf1c9('0x37')];}else{return;}var _0x52b8eb=function(){_0x1a047d=_0x1ae407['aload'];_0x1b2aa0=_0x1a047d;if(_0x1ae407['hasOwnProperty'](_0xf1c9('0x38'))){_0x1b2aa0=_0x1ae407['err'];}$(_0x5ea693)[_0xf1c9('0x39')](_0xf1c9('0x3a'),_0x1a047d);var _0x543cfa=new Image();_0x543cfa[_0xf1c9('0x3b')]=function(){$(_0x5ea693)[_0xf1c9('0x39')](_0xf1c9('0x3a'),_0x130c6e);};_0x543cfa[_0xf1c9('0x3c')]=function(){$(_0x5ea693)[_0xf1c9('0x39')](_0xf1c9('0x3a'),_0x1b2aa0);};_0x543cfa['src']=_0x130c6e;};_0x52b8eb();_0x1ae407[_0xf1c9('0x3d')](_0xf1c9('0x37'),function(_0x86ca3a){if(typeof _0x86ca3a!=_0xf1c9('0x14')){_0x130c6e=_0x1ae407[_0xf1c9('0x37')];_0x52b8eb();}});}};};Hi[_0xf1c9('0x2')][_0xf1c9('0x35')][_0xf1c9('0x34')]=function(){return{'restrict':'E','scope':![],'link':function(_0x19f41c,_0xd4c4b9,_0x2145e8){var _0x16be8d=![];if(!_0x2145e8[_0xf1c9('0x28')]('name'))throw new Error(_0xf1c9('0x3e'));if(_0x2145e8[_0xf1c9('0x28')](_0xf1c9('0x3f')))_0x16be8d=_0x2145e8[_0xf1c9('0x3f')];var _0x79fc7c=_0xf1c9('0x40');var _0x497895=![];if(_0x2145e8[_0xf1c9('0x28')](_0x79fc7c))_0x497895=_0x2145e8[_0x79fc7c];var _0x4adcbf=_0xf1c9('0x41');var _0x3312b3=![];if(_0x2145e8['hasOwnProperty'](_0x4adcbf))_0x3312b3=_0x2145e8[_0x4adcbf];var _0x4069a7=_0xf1c9('0x42');var _0x1eca97=![];if(_0x2145e8['hasOwnProperty'](_0x4069a7))_0x1eca97=_0x2145e8[_0x4069a7];var _0x2e464f=function(_0x18119e,_0x40c241,_0x38850e,_0x44889f){if(typeof _0x18119e!=_0xf1c9('0x43')||_0x18119e[_0xf1c9('0x44')]<0x1)throw new Error('URL\x20is\x20now\x20valid');if(typeof _0x44889f==_0xf1c9('0x45'))_0x44889f[_0xf1c9('0x46')](_0x19f41c);var _0x4a0d2a={};_0x4a0d2a[_0xf1c9('0x47')]=function(){if(typeof _0x38850e==_0xf1c9('0x45'))_0x38850e[_0xf1c9('0x46')](_0x19f41c);};try{Hi['$nav'][_0xf1c9('0x48')](_0x18119e,![],!![],function(_0x8a1cc2){_0x8a1cc2[_0xf1c9('0x27')][_0xf1c9('0x49')]=_0x8a1cc2[_0xf1c9('0x4a')];_0x8a1cc2[_0xf1c9('0x27')]['$embed']=_0x2e464f;_0x19f41c[_0x2145e8['name']]=_0x8a1cc2[_0xf1c9('0x27')];_0x19f41c['$applyAsync'](function(){$(_0xd4c4b9)['empty']();$(_0xd4c4b9)[_0xf1c9('0x4b')](_0x8a1cc2[_0xf1c9('0x4a')]);if(typeof _0x40c241==_0xf1c9('0x45'))_0x40c241[_0xf1c9('0x46')]();});},_0x19f41c,_0x4a0d2a);}catch(_0x4c61bf){if(typeof _0x38850e==_0xf1c9('0x45'))_0x38850e[_0xf1c9('0x46')](_0x19f41c);}};if(!_0x16be8d)_0x19f41c[_0x2145e8[_0xf1c9('0x4c')]]={'$embed':_0x2e464f};else _0x2e464f(_0x16be8d,function(){if(typeof _0x3312b3==_0xf1c9('0x43'))_0x19f41c[_0xf1c9('0x4d')](_0x3312b3);},function(){if(typeof _0x1eca97==_0xf1c9('0x43'))_0x19f41c['$eval'](_0x1eca97);},function(){if(typeof _0x497895==_0xf1c9('0x43'))_0x19f41c['$eval'](_0x497895);});}};};Hi[_0xf1c9('0x2')][_0xf1c9('0x35')][_0xf1c9('0x4e')]=function(){return{'restrict':'A','link':function(_0x2fa2ea,_0x17f3bb,_0x3e176a){$(_0x17f3bb)[_0xf1c9('0x4f')](_0xf1c9('0x4e'));if(_0x3e176a[_0xf1c9('0x50')]){var _0x3e310a=_0x3e176a[_0xf1c9('0x50')];var _0x30ffa0=_0xf1c9('0x51');$(_0x17f3bb)[_0xf1c9('0x39')](_0xf1c9('0x50'),_0xf1c9('0x52'));if(_0x3e176a['on']){_0x30ffa0=_0x3e176a['on'];$(_0x17f3bb)[_0xf1c9('0x4f')]('on');}Hi[_0xf1c9('0xb')][_0xf1c9('0x53')]($(_0x17f3bb),_0x3e310a,_0x30ffa0);}}};};Hi[_0xf1c9('0x2')][_0xf1c9('0x54')]=function(_0x3ee764){this['angularModule']=_0x3ee764;this[_0xf1c9('0x55')]=function(_0xc88d1d){this[_0xf1c9('0x56')]=_0xc88d1d;};this[_0xf1c9('0x57')]=function(){if(typeof this[_0xf1c9('0x56')]==_0xf1c9('0x58')){if(typeof this[_0xf1c9('0x56')]['directive']!='function'){throw new Error(_0xf1c9('0x59'));}}for(var _0xcc49f8 in Hi[_0xf1c9('0x2')][_0xf1c9('0x35')]){var _0x5aaccb=Hi['$angular'][_0xf1c9('0x35')][_0xcc49f8];this[_0xf1c9('0x56')][_0xf1c9('0x5a')](_0xcc49f8,_0x5aaccb);}};};Hi[_0xf1c9('0x2')]['directives'][_0xf1c9('0x5b')]=function(_0x534ab2){return{'restrict':'A','scope':![],'link':function(_0xf1c5a,_0x3382d7,_0x586565){var _0x163759=_0x586565[_0xf1c9('0x5b')];var _0x99e7cf=undefined;if(_0x163759[_0xf1c9('0x5c')]()[_0xf1c9('0x44')]<0x1){throw new Error(_0xf1c9('0x5d')+_0x163759);}if(!_0x586565[_0xf1c9('0x28')](_0xf1c9('0x5e')))throw new Error('The\x20type\x20property\x20is\x20missing\x20on\x20the\x20upload\x20element\x20with\x20name\x20\x27'+_0x163759+'\x27');if(_0x586565[_0xf1c9('0x5e')]!==_0xf1c9('0x5f'))throw new Error(_0xf1c9('0x60')+_0x163759+_0xf1c9('0x61'));if(_0x586565[_0xf1c9('0x28')](_0xf1c9('0x62'))){_0x99e7cf=_0x534ab2(_0x586565[_0xf1c9('0x62')]);}$(_0x3382d7)[_0xf1c9('0x63')](function(_0x5b760e){var _0x32b963=_0x5b760e[_0xf1c9('0x64')][_0xf1c9('0x65')];var _0x1101c3=new Upload(_0x163759,_0x32b963);_0x196535(_0x1101c3);_0x51bb12(_0x1101c3);});var _0x196535=function(_0x416bd0){_0xf1c5a[_0x163759]=_0x416bd0;};var _0x51bb12=function(_0x1edac1){if(typeof _0x99e7cf!=_0xf1c9('0x14'))_0x99e7cf(_0xf1c5a,{'upload':_0x1edac1});};}};};Hi[_0xf1c9('0x2')]['app']=![];Hi[_0xf1c9('0x2')][_0xf1c9('0x66')]=function(){var _0x29eb7d=[];var _0x36018f=![];if(Array[_0xf1c9('0x67')](Hi[_0xf1c9('0x3')][_0xf1c9('0x8')]['modules'])){_0x29eb7d=Hi[_0xf1c9('0x3')]['angular'][_0xf1c9('0x68')];Log[_0xf1c9('0x6')](_0xf1c9('0x69'));Log[_0xf1c9('0x6')](_0x29eb7d);}else{Log[_0xf1c9('0x6')](_0xf1c9('0x6a'));}if(typeof Hi[_0xf1c9('0x3')]['angular'][_0xf1c9('0x66')]==_0xf1c9('0x45')){_0x36018f=Hi[_0xf1c9('0x3')][_0xf1c9('0x8')]['run'];}else{Log[_0xf1c9('0x6')](_0xf1c9('0x6b'));}if(Array['isArray'](_0x29eb7d)){if(_0x29eb7d[_0xf1c9('0x6c')]('ng')==-0x1)_0x29eb7d['push']('ng');}else{throw new Error(_0xf1c9('0x6d'));}if(_0x29eb7d[_0xf1c9('0x44')]==0x0)_0x29eb7d['push']('ng');var _0x52de73=angular['module']('hi',_0x29eb7d);if(typeof AppHooks!=_0xf1c9('0x14'))AppHooks['fireBeforeRun'](_0x52de73);var _0x37d5a0=angular[_0xf1c9('0x6e')](_0xf1c9('0x6f'),['ng']);if(typeof AppHooks!='undefined')AppHooks['fireSetupApp'](_0x37d5a0);var _0x2784b8=new Hi[(_0xf1c9('0x2'))][(_0xf1c9('0x54'))](_0x52de73);_0x2784b8[_0xf1c9('0x57')]();var _0x59fe00=function(_0x5820ea,_0x2678d9){if(typeof sessionStorage!=_0xf1c9('0x14')){if(typeof App=='undefined'){Hi[_0xf1c9('0x9')][_0xf1c9('0xa')][_0xf1c9('0x70')]['on']=![];}else{var _0x5c0ba2=![];if(sessionStorage[_0xf1c9('0x28')](_0xf1c9('0x71')+App[_0xf1c9('0x72')]))_0x5c0ba2=sessionStorage[_0xf1c9('0x71')+App[_0xf1c9('0x72')]];else{Hi[_0xf1c9('0x9')][_0xf1c9('0xa')][_0xf1c9('0x70')][_0xf1c9('0x73')]();}if(_0x5c0ba2){if(_0x5c0ba2!=App['deployId']){Hi[_0xf1c9('0x9')][_0xf1c9('0xa')][_0xf1c9('0x70')][_0xf1c9('0x73')]();}}sessionStorage[_0xf1c9('0x71')+App[_0xf1c9('0x72')]]=App['deployId'];if(App[_0xf1c9('0x74')]=='DEVELOPMENT')Hi[_0xf1c9('0x9')][_0xf1c9('0xa')][_0xf1c9('0x70')]['on']=![];}}Hi['i18n'][_0xf1c9('0x75')]();Hi[_0xf1c9('0x2')][_0xf1c9('0x76')]=angular['injector'](_0x29eb7d);Hi[_0xf1c9('0x2')]['$compile']=_0x2678d9;__=_0x5820ea;Hi[_0xf1c9('0x0')]=_0x5820ea;__[_0xf1c9('0x77')]=![];for(var _0x5ed08e in Hi[_0xf1c9('0x9')]['js']['root']){var _0x5b027b=Hi[_0xf1c9('0x9')]['js'][_0xf1c9('0x78')][_0x5ed08e];__[_0x5ed08e]=_0x5b027b;}if(__[_0xf1c9('0x28')](_0xf1c9('0x79'))){if(typeof __[_0xf1c9('0x79')]==_0xf1c9('0x45')){__[_0xf1c9('0x79')][_0xf1c9('0x46')](__);}}Hi['$angular']['$injector']=angular[_0xf1c9('0x7a')]([_0xf1c9('0x6f')][_0xf1c9('0x7b')](_0x29eb7d));if(typeof App!=_0xf1c9('0x14')){if(typeof _0x36018f==_0xf1c9('0x45')){Hi[_0xf1c9('0x2')][_0xf1c9('0x76')][_0xf1c9('0x7c')](_0x36018f);}if(typeof $startup!=_0xf1c9('0x45')){throw new Error('$startup\x20function\x20is\x20undefined');}setTimeout(function(){$startup();},0x5);}};_0x59fe00[_0xf1c9('0x7d')]=['$rootScope',_0xf1c9('0x7e')];_0x52de73[_0xf1c9('0x66')](_0x59fe00);Hi[_0xf1c9('0x2')][_0xf1c9('0x6f')]=_0x52de73;};Hi[_0xf1c9('0x9')][_0xf1c9('0xa')]['cache']={'on':!![]};Hi['$ui'][_0xf1c9('0xa')]['cache'][_0xf1c9('0x7f')]=function(){try{if(sessionStorage){if(!sessionStorage[_0xf1c9('0x80')]){sessionStorage['hi_cache_regs']=JSON[_0xf1c9('0x81')](new Array());}}}catch(_0x45986f){return![];}};Hi[_0xf1c9('0x9')][_0xf1c9('0xa')][_0xf1c9('0x82')]=function(_0x3d20ef){var _0x51cdaf=![];if(typeof _0x3d20ef===_0xf1c9('0x43')){_0x51cdaf=Hi['$nav'][_0xf1c9('0x83')](_0x3d20ef);}else{_0x51cdaf=_0x3d20ef;}if(_0x51cdaf){var _0x4a76e2=Hi[_0xf1c9('0xb')][_0xf1c9('0x84')](_0x51cdaf[_0xf1c9('0x26')],_0x51cdaf['action']);var _0x35f3eb=Hi[_0xf1c9('0xb')][_0xf1c9('0x85')](_0x51cdaf);if(Hi[_0xf1c9('0x9')][_0xf1c9('0xa')][_0xf1c9('0x70')][_0xf1c9('0x86')](_0x35f3eb)){return;}$[_0xf1c9('0x87')](_0x35f3eb,function(_0x14ecf6){try{var _0x28a966=JSON[_0xf1c9('0x88')](_0x14ecf6);var _0x50c8c1=_0x28a966[_0xf1c9('0x25')];Hi[_0xf1c9('0x9')][_0xf1c9('0xa')][_0xf1c9('0x70')][_0xf1c9('0x89')](_0x35f3eb,_0x50c8c1);}catch(_0x184b7c){}});}};Hi[_0xf1c9('0x9')]['html']['cache'][_0xf1c9('0x8a')]=function(){return _0xf1c9('0x8b')+App[_0xf1c9('0x72')];};Hi[_0xf1c9('0x9')][_0xf1c9('0xa')][_0xf1c9('0x70')][_0xf1c9('0x8c')]=function(_0x3f2ecc){if(typeof localStorage!=_0xf1c9('0x14')&&typeof _0x3f2ecc==_0xf1c9('0x58')){localStorage[Hi[_0xf1c9('0x9')][_0xf1c9('0xa')]['cache'][_0xf1c9('0x8a')]()]=JSON[_0xf1c9('0x81')](_0x3f2ecc);}};Hi[_0xf1c9('0x9')][_0xf1c9('0xa')][_0xf1c9('0x70')]['getCache']=function(){var _0xd5536a={};if(typeof localStorage!=_0xf1c9('0x14')){var _0x408212=Hi['$ui'][_0xf1c9('0xa')][_0xf1c9('0x70')][_0xf1c9('0x8a')]();if(localStorage[_0xf1c9('0x28')](_0x408212)){try{_0xd5536a=JSON[_0xf1c9('0x88')](localStorage[_0x408212]);}catch(_0x4d64f1){Log[_0xf1c9('0x6')](_0xf1c9('0x8d'));}}}return _0xd5536a;};Hi[_0xf1c9('0x9')]['html'][_0xf1c9('0x70')][_0xf1c9('0x73')]=function(){if(typeof localStorage!=_0xf1c9('0x14')){Hi['$ui']['html'][_0xf1c9('0x70')][_0xf1c9('0x8c')]({});}};Hi[_0xf1c9('0x9')][_0xf1c9('0xa')][_0xf1c9('0x70')][_0xf1c9('0x89')]=function(_0xd98aa3,_0x223a5e){if(!Hi[_0xf1c9('0x9')][_0xf1c9('0xa')][_0xf1c9('0x70')]['on']){return![];}var _0x420a40=$(_0xf1c9('0x8e'));_0x420a40[_0xf1c9('0xa')](_0x223a5e);$(_0x420a40)[_0xf1c9('0x8f')](_0xf1c9('0x90'))[_0xf1c9('0x91')]();var _0x4c2785=$(_0x420a40)[_0xf1c9('0xa')]();var _0x58465d=Hi[_0xf1c9('0x9')][_0xf1c9('0xa')][_0xf1c9('0x70')][_0xf1c9('0x92')]();_0x58465d[Hi[_0xf1c9('0x9')][_0xf1c9('0xa')][_0xf1c9('0x70')][_0xf1c9('0x93')](_0xd98aa3)]=_0x4c2785;Hi[_0xf1c9('0x9')]['html'][_0xf1c9('0x70')][_0xf1c9('0x8c')](_0x58465d);Log[_0xf1c9('0x6')]('Caching\x20view\x20of\x20path\x20<'+_0xd98aa3+'>');};Hi[_0xf1c9('0x9')][_0xf1c9('0xa')][_0xf1c9('0x70')][_0xf1c9('0x93')]=function(_0x389ae5){var _0x1589c9=_0x389ae5[_0xf1c9('0x6c')]('?');if(_0x1589c9!=-0x1){return _0x389ae5[_0xf1c9('0x94')](0x0,_0x1589c9);}return _0x389ae5;};Hi[_0xf1c9('0x9')][_0xf1c9('0xa')]['cache'][_0xf1c9('0x86')]=function(_0x5702fe){if(!Hi[_0xf1c9('0x9')][_0xf1c9('0xa')][_0xf1c9('0x70')]['on']){return![];}var _0x24ee96=Hi[_0xf1c9('0x9')]['html']['cache'][_0xf1c9('0x92')]();return _0x24ee96[_0xf1c9('0x28')](Hi[_0xf1c9('0x9')][_0xf1c9('0xa')][_0xf1c9('0x70')][_0xf1c9('0x93')](_0x5702fe));};Hi[_0xf1c9('0x9')][_0xf1c9('0xa')][_0xf1c9('0x70')][_0xf1c9('0x95')]=function(_0x1523fb){var _0x13e483=Hi[_0xf1c9('0x9')][_0xf1c9('0xa')][_0xf1c9('0x70')][_0xf1c9('0x92')]();return _0x13e483[Hi[_0xf1c9('0x9')][_0xf1c9('0xa')][_0xf1c9('0x70')]['normalizePath'](_0x1523fb)];};Hi[_0xf1c9('0x9')]['html'][_0xf1c9('0x96')]=function(_0x51136a){$(_0xf1c9('0x97'))[_0xf1c9('0xa')](_0x51136a);};Hi[_0xf1c9('0x9')]['html'][_0xf1c9('0x98')]=function(){return $(_0xf1c9('0x97'))[_0xf1c9('0xa')]();};Hi[_0xf1c9('0x9')]['js'][_0xf1c9('0x99')]={};Hi[_0xf1c9('0x9')]['js'][_0xf1c9('0x9a')]=[];Hi[_0xf1c9('0x9')]['js'][_0xf1c9('0x9b')]=function(_0x48b428,_0x5555b0){Hi[_0xf1c9('0x9')]['js'][_0xf1c9('0x9a')][_0xf1c9('0x9c')](_0x48b428+'/'+_0x5555b0);};Hi[_0xf1c9('0x9')]['js'][_0xf1c9('0x9d')]=function(_0x516e45,_0x3aff6f){var _0x2d44ff=_0x516e45+'/'+_0x3aff6f;var _0x11b223=Hi[_0xf1c9('0x9')]['js']['loadedControllers'][_0xf1c9('0x6c')](_0x2d44ff);if(_0x11b223==-0x1){return![];}return!![];};Hi[_0xf1c9('0x9')]['js']['templatesParent']={};Hi[_0xf1c9('0x9')]['js'][_0xf1c9('0x9e')]=function(_0x828767,_0x235de1){var _0x195e3d=Hi[_0xf1c9('0xb')][_0xf1c9('0x84')](_0x828767,_0x235de1);if(Hi[_0xf1c9('0x9')]['js'][_0xf1c9('0x99')][_0xf1c9('0x28')](_0x195e3d)){var _0x59ac59=Hi[_0xf1c9('0x9')]['js'][_0xf1c9('0x99')][_0x195e3d];return _0x59ac59;}else{return![];}};Hi[_0xf1c9('0x9')]['js'][_0xf1c9('0x9f')]=function(_0x2a0d07,_0x1e78c7,_0x15ac4f){var _0x317340=Hi['$nav'][_0xf1c9('0x84')](_0x2a0d07,_0x1e78c7);Hi[_0xf1c9('0x9')]['js']['controllers'][_0x317340]=_0x15ac4f;};Hi[_0xf1c9('0x9')]['js'][_0xf1c9('0x30')]=function(_0x1f7b4d,_0xd20935,_0xf17531,_0x1761f5,_0xd67f02,_0x5ce9d7,_0x559c92){var _0x406bc9=Hi[_0xf1c9('0x9')]['js'][_0xf1c9('0x9e')](_0x1f7b4d[_0xf1c9('0x26')],_0x1f7b4d[_0xf1c9('0x29')]);if(typeof _0x406bc9==_0xf1c9('0x14')){throw new Error('No\x20controller\x20defined.\x20Cant\x20prepare\x20context');return;}if(typeof _0x406bc9!=_0xf1c9('0x45')){throw new Error(_0xf1c9('0xa0'));}var _0x4210ee=![];if(_0x1761f5){if(typeof _0x5ce9d7!='undefined'){_0x4210ee=_0x5ce9d7[_0xf1c9('0xa1')](![]);}else{_0x4210ee=__[_0xf1c9('0xa1')](![]);}}else{if(!__[_0xf1c9('0x77')]&&__[_0xf1c9('0x28')](_0xf1c9('0xa2'))){if(typeof __[_0xf1c9('0xa2')]==_0xf1c9('0x45')){__[_0xf1c9('0x77')]=!![];__[_0xf1c9('0xa2')][_0xf1c9('0x46')](__,{'controller':_0x1f7b4d['controller'],'action':_0x1f7b4d[_0xf1c9('0x29')]});}}_0x4210ee=__[_0xf1c9('0xa1')](!![]);}var _0x5b003a=Hi[_0xf1c9('0x2')]['$injector'];var _0x54917e={'_':_0x4210ee,'__':__,'$scope':_0x4210ee,'$rootScope':__,'template':__};var _0x3abc6c=_0x1f7b4d[_0xf1c9('0x26')]+'/'+_0x1f7b4d['action'];if(typeof AppHooks!=_0xf1c9('0x14'))AppHooks[_0xf1c9('0xa3')](_0x3abc6c,_0x4210ee,_0x54917e);_0x5b003a[_0xf1c9('0x7c')](_0x406bc9,![],_0x54917e);Hi['$ui']['js'][_0xf1c9('0xa4')](_0x4210ee,_0xd20935);if(_0x4210ee['hasOwnProperty']('$preLoad')){var _0x65683a=_0x4210ee[_0xf1c9('0xa5')][_0xf1c9('0x46')](_0x4210ee,_0xf17531);if(typeof _0x65683a!=_0xf1c9('0x14')){_0xf17531=_0x65683a;}}if(__[_0xf1c9('0x28')](_0xf1c9('0xa6'))){if(typeof __['$onPreLoad']==_0xf1c9('0x45')){var _0x65683a=__[_0xf1c9('0xa6')][_0xf1c9('0x46')](__,_0x4210ee[_0xf1c9('0xa7')],_0x4210ee,_0xf17531);if(typeof _0x65683a!=_0xf1c9('0x14')){_0xf17531=_0x65683a;}}}var _0xb191eb=Hi[_0xf1c9('0x2')]['$compile'](_0xf17531);var _0x20ef32=_0xb191eb(_0x4210ee);var _0x2f5227=function(){var _0x3b3f02=Hi[_0xf1c9('0xb')][_0xf1c9('0x85')](_0xd20935[_0xf1c9('0xa7')]);var _0x3bc085=Hi['$nav'][_0xf1c9('0xa8')](_0x3b3f02);Hi['$nav'][_0xf1c9('0xa9')](_0x3b3f02,JSON['stringify']({'index':_0x3bc085}));};if(_0xd67f02&&_0x1761f5){_0xd67f02[_0xf1c9('0x4a')]=_0x20ef32;_0xd67f02['scope']=_0x4210ee;_0xd67f02[_0xf1c9('0x25')]=_0xf17531;if(typeof _0x4210ee[_0xf1c9('0xaa')]!=_0xf1c9('0x14')){_0x4210ee[_0xf1c9('0xaa')]['call'](_0x4210ee);}var _0x4afcc8=Hi[_0xf1c9('0x3')][_0xf1c9('0x2e')]['changeLocation'];if(_0x1761f5)_0x4afcc8=![];if(_0x4afcc8){_0x2f5227();}return _0xd67f02;}var _0x4993a7={};_0x4993a7[_0xf1c9('0xab')]=function(){if(__[_0xf1c9('0x28')](_0xf1c9('0xac'))&&__[_0xf1c9('0x28')](_0xf1c9('0xad'))){if(typeof __[_0xf1c9('0xac')]==_0xf1c9('0x45')){__[_0xf1c9('0xac')][_0xf1c9('0x46')](__,__[_0xf1c9('0xad')][_0xf1c9('0xa7')]);}}var _0x5257f9=__[_0xf1c9('0x28')](_0xf1c9('0xad'));__[_0xf1c9('0xad')]=_0x4210ee;Hi[_0xf1c9('0x1')]=_0x4210ee;$(_0xf1c9('0xae'))[_0xf1c9('0xa')]('');$('#view_content')[_0xf1c9('0x4b')](_0x20ef32);var _0x2af15e=Hi[_0xf1c9('0x3')][_0xf1c9('0x2e')][_0xf1c9('0x4')];if(_0x2af15e&&_0x5257f9){_0x2f5227();}Hi[_0xf1c9('0xb')][_0xf1c9('0xaf')]=![];_0x4210ee[_0xf1c9('0xb0')](function(){if(typeof _0x4210ee[_0xf1c9('0xaa')]!=_0xf1c9('0x14')){_0x4210ee[_0xf1c9('0xaa')][_0xf1c9('0x46')](_0x4210ee);}if(__['hasOwnProperty'](_0xf1c9('0xb1'))){if(typeof __[_0xf1c9('0xb1')]==_0xf1c9('0x45')){__[_0xf1c9('0xb1')]['call'](__,_0x4210ee[_0xf1c9('0xa7')],_0x4210ee);}}if(__[_0xf1c9('0x28')](_0xf1c9('0xb2'))&&_0x5257f9){if(typeof __['$onRedirectFinish']=='function'){__[_0xf1c9('0xb2')][_0xf1c9('0x46')](__);}}});};if(__[_0xf1c9('0x28')](_0xf1c9('0xad'))){if(typeof __[_0xf1c9('0xad')]=='object'){if(__[_0xf1c9('0xad')][_0xf1c9('0x28')](_0xf1c9('0xb3'))&&__['$activeView'][_0xf1c9('0x28')](_0xf1c9('0xb4'))){if(__[_0xf1c9('0xad')][_0xf1c9('0xb3')]){__[_0xf1c9('0xad')]['$close'][_0xf1c9('0x46')](__[_0xf1c9('0xad')],_0x4993a7);}else{_0x4993a7['proceed']();}}else{if(typeof __['$activeView'][_0xf1c9('0xb4')]==_0xf1c9('0x45')){__[_0xf1c9('0xad')][_0xf1c9('0xb4')][_0xf1c9('0x46')](__[_0xf1c9('0xad')]);_0x4993a7['proceed']();}else{_0x4993a7[_0xf1c9('0xab')]();}}Hi[_0xf1c9('0xb')][_0xf1c9('0xaf')]=![];}else{throw new Error(_0xf1c9('0xb5'));}}else{_0x4993a7[_0xf1c9('0xab')]();}};Hi[_0xf1c9('0x9')]['js']['commands']={};Hi[_0xf1c9('0x9')]['js'][_0xf1c9('0xb6')][_0xf1c9('0xb7')]={};Hi['$ui']['js'][_0xf1c9('0xb6')][_0xf1c9('0xb8')]=function(_0x4bf627,_0x6ff69a){Hi[_0xf1c9('0x9')]['js'][_0xf1c9('0xb6')][_0xf1c9('0xb7')][_0x4bf627]=_0x6ff69a;};Hi['$ui']['js'][_0xf1c9('0xb6')][_0xf1c9('0xb8')](_0xf1c9('0xb9'),function(_0x239ec4){if(_0x239ec4[_0xf1c9('0x28')]('url')){document[_0xf1c9('0xba')][_0xf1c9('0xbb')](_0x239ec4[_0xf1c9('0xbc')]);}else{document[_0xf1c9('0xba')][_0xf1c9('0xbd')]();}return!![];});Hi['$ui']['js'][_0xf1c9('0xb6')][_0xf1c9('0xb8')](_0xf1c9('0xbe'),function(_0x5b8626){if(_0x5b8626[_0xf1c9('0x28')]('value'))Hi[_0xf1c9('0xb')][_0xf1c9('0xa9')](_0x5b8626[_0xf1c9('0xbf')],{});});Hi[_0xf1c9('0x9')]['js'][_0xf1c9('0xb6')]['set'](_0xf1c9('0xc0'),function(_0x4bf288){Hi[_0xf1c9('0x9')][_0xf1c9('0xa')][_0xf1c9('0x70')][_0xf1c9('0x73')]();document[_0xf1c9('0xba')][_0xf1c9('0xbd')]();});Hi[_0xf1c9('0x9')]['js'][_0xf1c9('0xb6')][_0xf1c9('0xb8')](_0xf1c9('0xc1'),function(_0x2ff996){if(_0x2ff996['hasOwnProperty']('url'))Hi[_0xf1c9('0xc2')](_0x2ff996[_0xf1c9('0xbc')]);});Hi[_0xf1c9('0x9')]['js'][_0xf1c9('0xb6')][_0xf1c9('0x66')]=function(_0x4ae149,_0x30b78e){if(Hi[_0xf1c9('0x9')]['js'][_0xf1c9('0xb6')]['all']['hasOwnProperty'](_0x4ae149)){var _0x2018a0=Hi[_0xf1c9('0x9')]['js'][_0xf1c9('0xb6')][_0xf1c9('0xb7')][_0x4ae149];return _0x2018a0(_0x30b78e);}return![];};Hi[_0xf1c9('0x9')]['js'][_0xf1c9('0xa4')]=function(_0x1113ab,_0x541216){var _0x4c3e12={};if(_0x541216[_0xf1c9('0xc3')]){_0x4c3e12=_0x541216[_0xf1c9('0xc3')];}if(_0x541216[_0xf1c9('0x28')](_0xf1c9('0xc4'))){var _0x7744ca=_0x541216[_0xf1c9('0xc4')];Hi[_0xf1c9('0xc5')][_0xf1c9('0xc6')]();Hi[_0xf1c9('0xc5')][_0xf1c9('0xc7')](_0x7744ca);delete _0x541216[_0xf1c9('0xc4')];}for(var _0x3e0346 in _0x4c3e12){var _0x21aaeb=_0x4c3e12[_0x3e0346];__[_0x3e0346]=_0x21aaeb;}__['__t']=__t;for(var _0x21342f in _0x541216){var _0x1df1e1=_0x541216[_0x21342f];_0x1113ab[_0x21342f]=_0x1df1e1;}};Hi[_0xf1c9('0x9')]['js'][_0xf1c9('0x78')]={};Hi[_0xf1c9('0x9')]['js'][_0xf1c9('0xc8')]=function(_0x3f5b57,_0x37e777){Hi['$angular'][_0xf1c9('0x35')][_0x3f5b57]=_0x37e777;};Hi[_0xf1c9('0xc')][_0xf1c9('0xc9')]=function(_0x369c9b){var _0x1ee707=angular['toJson'](_0x369c9b);return JSON[_0xf1c9('0x88')](_0x1ee707);};Hi[_0xf1c9('0xc')][_0xf1c9('0xca')]=function(){return angular[_0xf1c9('0xcb')]({});};Hi[_0xf1c9('0xc')][_0xf1c9('0xcc')]=function(_0x52689d){var _0x23dd2b=_0x52689d[_0xf1c9('0x94')](0x0,0x1);return _0x23dd2b[_0xf1c9('0xcd')]()+_0x52689d['substr'](0x1);};Hi[_0xf1c9('0xc')]['lcfirst']=function(_0x1eb061){var _0x19d135=_0x1eb061[_0xf1c9('0x94')](0x0,0x1);return _0x19d135[_0xf1c9('0xce')]()+_0x1eb061[_0xf1c9('0x94')](0x1);};Hi['$util'][_0xf1c9('0xcf')]=function(_0x2161b9){var _0xfac0b6=_0x2161b9[_0xf1c9('0xd0')]('&');var _0x557c48={};for(var _0x54bfb5 in _0xfac0b6){var _0x1b07d3=_0xfac0b6[_0x54bfb5];if(typeof _0x1b07d3!=_0xf1c9('0x43'))continue;var _0x531ba5=_0x1b07d3[_0xf1c9('0x6c')]('=');var _0x5e22ac=_0x1b07d3[_0xf1c9('0xd1')](0x0,_0x531ba5);var _0x1284f9=_0x1b07d3[_0xf1c9('0xd1')](_0x531ba5+0x1,_0x1b07d3['length']);_0x557c48[_0x5e22ac]=_0x1284f9;}return _0x557c48;};Hi[_0xf1c9('0xc')]['encodeGetParams']=function(_0xaeead5){var _0x427433='';var _0x39aefe=0x0;for(var _0xdd4054 in _0xaeead5){var _0x56efc0=_0xaeead5[_0xdd4054];if(_0x39aefe!==0x0){_0x427433=_0x427433+'&';}_0x427433=_0x427433+_0xdd4054+'='+_0x56efc0;_0x39aefe++;}return encodeURI(_0x427433);};Hi['$util'][_0xf1c9('0xd2')]=function(_0x390248,_0x39fc54){var _0xcf732f=[];for(var _0xd1eff3 in _0x39fc54){if(_0xd1eff3[_0xf1c9('0x6c')](_0x390248)>-0x1){var _0x458527=_0xd1eff3[_0xf1c9('0xbb')](_0x390248,'')[_0xf1c9('0x5c')]();if(_0x458527!=''){_0xcf732f[_0xf1c9('0x9c')](Hi[_0xf1c9('0xc')][_0xf1c9('0xd3')](_0x458527));}}}return _0xcf732f;};Hi['$util'][_0xf1c9('0xd4')]=function(_0xb0cb4e){var _0x559cc4='';_0xb0cb4e[_0xf1c9('0xd5')](function(_0x3ac959,_0x436634){if(_0x436634==0x0){_0x559cc4=_0x3ac959;}else{var _0x278507=_0x3ac959[0x0]['toUpperCase']();var _0xb9fd23=_0x3ac959[_0xf1c9('0x94')](0x1,_0x3ac959[_0xf1c9('0x44')]-0x1);var _0x2b2fc8=_0x278507+_0xb9fd23;_0x559cc4=_0x559cc4+_0x2b2fc8;}});return _0x559cc4;};Hi['$util'][_0xf1c9('0xd6')]=function(_0x21be62,_0x5139b7){var _0x406a1d=new Array();var _0x465b6d='';if(_0x5139b7[_0xf1c9('0x5c')]()==''){return[];}for(var _0x46d382 in _0x5139b7){var _0x313e81=_0x5139b7[_0x46d382];if(typeof _0x313e81!=_0xf1c9('0x43')){continue;}if(_0x313e81==_0x21be62){if(_0x465b6d!=''){_0x406a1d[_0xf1c9('0x9c')](_0x465b6d);_0x465b6d='';}}else{_0x465b6d=_0x465b6d+_0x313e81;}}if(_0x465b6d!=''&&_0x406a1d[_0xf1c9('0x44')]==0x0){_0x406a1d[_0xf1c9('0x9c')](_0x465b6d);}else if(_0x406a1d[_0xf1c9('0x44')]>0x0){if(_0x406a1d[_0x406a1d[_0xf1c9('0x44')]-0x1][_0xf1c9('0xd7')]()!=_0x465b6d){_0x406a1d[_0xf1c9('0x9c')](_0x465b6d);}}return _0x406a1d;};Hi[_0xf1c9('0xb')][_0xf1c9('0xd8')]=function(_0x224af3,_0x57241a){var _0x55e01a=_0xf1c9('0xd9')+_0x57241a+'\x27);';$('#'+_0x224af3)[_0xf1c9('0x39')](_0xf1c9('0xda'),_0x55e01a);};Hi[_0xf1c9('0xb')][_0xf1c9('0x53')]=function(_0x3e5fc5,_0x1da891,_0x14a04e){var _0x2db5c5=_0xf1c9('0xd9')+_0x1da891+'\x27);';if(_0x14a04e){if(typeof _0x3e5fc5===_0xf1c9('0x43')){$('#'+_0x3e5fc5)['bind'](_0x14a04e,function(){eval(_0x2db5c5);});}else{$(_0x3e5fc5)['bind'](_0x14a04e,function(){eval(_0x2db5c5);});}}else{$('#'+_0x3e5fc5)[_0xf1c9('0x39')](_0xf1c9('0xda'),_0x2db5c5);}};Hi[_0xf1c9('0xb')][_0xf1c9('0x2f')]=function(_0x2da3ce,_0x496857){var _0x2a4f4a={'controller':_0x2da3ce,'action':_0x496857};return _0x2a4f4a;};Hi[_0xf1c9('0xb')]['getTextViewPath']=function(_0x404154,_0x1b7de1){return _0x404154+'_'+_0x1b7de1;};Hi[_0xf1c9('0xb')][_0xf1c9('0xdb')]=function(_0x5d2252){Hi[_0xf1c9('0xb')]['isGoingBack']=!![];Hi[_0xf1c9('0xb')][_0xf1c9('0x48')](_0x5d2252,undefined);};Hi['$nav'][_0xf1c9('0xdc')]=[];Hi[_0xf1c9('0xb')][_0xf1c9('0xdd')]=![];Hi[_0xf1c9('0xb')][_0xf1c9('0xaf')]=![];Hi[_0xf1c9('0xb')][_0xf1c9('0xde')]={};Hi['$nav']['newNamedRoute']=function(_0x17b16e,_0x15be43){if(!Hi[_0xf1c9('0xb')]['hasOwnProperty'](_0x17b16e)){Hi[_0xf1c9('0xb')][_0xf1c9('0xde')][_0x17b16e]=_0x15be43;return _0x15be43;}return![];};Hi['$nav'][_0xf1c9('0x83')]=function(_0x58aecf){if(typeof _0x58aecf===_0xf1c9('0x43')){if(Hi[_0xf1c9('0xb')][_0xf1c9('0xde')]['hasOwnProperty'](_0x58aecf)){return Hi['$nav'][_0xf1c9('0xde')][_0x58aecf];}return![];}};Hi[_0xf1c9('0xb')][_0xf1c9('0xa8')]=function(_0x495c3c){Hi['$nav'][_0xf1c9('0xdc')][_0xf1c9('0x9c')](_0x495c3c);return Hi[_0xf1c9('0xb')]['history'][_0xf1c9('0x44')]-0x1;};Hi[_0xf1c9('0xb')][_0xf1c9('0xdf')]=function(_0x5dca61){if(Hi[_0xf1c9('0xb')][_0xf1c9('0xdc')][_0xf1c9('0x44')]>0x0){var _0x5b6dce=Hi['$nav'][_0xf1c9('0xdc')][0x0];Hi[_0xf1c9('0xb')]['history'][_0xf1c9('0xe0')](_0x5b6dce);return _0x5b6dce;}return![];};Hi['$nav'][_0xf1c9('0xe1')]=![];Hi[_0xf1c9('0xb')][_0xf1c9('0x48')]=function(_0x217da9,_0x2a2373,_0x4413ff,_0x45f367,_0x4d73af,_0x114ceb){if(Hi[_0xf1c9('0xb')][_0xf1c9('0xe1')]){if(Hi[_0xf1c9('0xb')]['active']['hasOwnProperty']('abort')){Hi[_0xf1c9('0xb')][_0xf1c9('0xe1')][_0xf1c9('0xe2')]();Hi['$nav'][_0xf1c9('0xe1')]=![];}}Hi[_0xf1c9('0xb')][_0xf1c9('0xdd')]={'name':_0x217da9};var _0x51a899=Hi[_0xf1c9('0xb')][_0xf1c9('0x22')](_0x217da9);_0x51a899=JSON[_0xf1c9('0x88')](JSON[_0xf1c9('0x81')](_0x51a899));if(!_0x4413ff){if(__['hasOwnProperty']('$onRedirectStart')){if(typeof __['$onRedirectStart']=='function'){__['$onRedirectStart'][_0xf1c9('0x46')](__,_0x51a899);}}}if(!_0x51a899){return![];}var _0x449a62=Hi['$nav'][_0xf1c9('0x85')](_0x51a899);var _0xe35f96=Hi[_0xf1c9('0xb')][_0xf1c9('0xe3')](_0x51a899);if(_0x51a899['get']){_0x2a2373=_0x51a899['get'];}if(_0x2a2373){_0x51a899[_0xf1c9('0x87')]=_0x2a2373;}var _0x33a16f=Hi[_0xf1c9('0xb')][_0xf1c9('0x85')](_0x51a899);if(!_0x51a899[_0xf1c9('0xe4')]){var _0x25ae2b=![];var _0xa70cf6={};if(Hi[_0xf1c9('0x9')][_0xf1c9('0xa')]['cache'][_0xf1c9('0x86')](_0xe35f96)){_0x25ae2b=Hi[_0xf1c9('0x9')][_0xf1c9('0xa')][_0xf1c9('0x70')][_0xf1c9('0x95')](_0xe35f96);_0xa70cf6['Ignore-View']=_0xf1c9('0xe5');}if(Hi[_0xf1c9('0x9')]['js'][_0xf1c9('0x9d')](_0x51a899[_0xf1c9('0x26')],_0x51a899[_0xf1c9('0x29')])){_0xa70cf6[_0xf1c9('0xe6')]=_0xf1c9('0xe5');}if(_0x4413ff){_0x51a899['embedded']=!![];}Hi[_0xf1c9('0xb')]['requestData'](_0x51a899,function(_0x11ff97){if(_0x11ff97[_0xf1c9('0xe7')]!=0xc8){if(typeof _0x11ff97==_0xf1c9('0x43')&&_0x4413ff==![]){document[_0xf1c9('0xe8')](_0x11ff97);return;}if(_0x4413ff){if(typeof _0x114ceb[_0xf1c9('0x47')]=='function')_0x114ceb['onError']();return;}throw new Error('Request\x20to\x20server\x20returned\x20an\x20unexpected\x20result');return;}var _0x45d53d=_0x11ff97[_0xf1c9('0xe9')];if(_0x45d53d[_0xf1c9('0x28')](_0xf1c9('0xea'))){var _0x205e99=_0x45d53d['$invoke'];for(var _0x3c373e in _0x205e99){var _0x4de717=_0x205e99[_0x3c373e];if(Hi[_0xf1c9('0x9')]['js'][_0xf1c9('0xb6')]['run'](_0x3c373e,_0x4de717)){return null;}}}var _0x332acb=_0x11ff97[_0xf1c9('0x34')];if(_0x11ff97[_0xf1c9('0x26')]){Hi[_0xf1c9('0xb')][_0xf1c9('0xeb')](_0x51a899['controller'],_0x51a899['action']);eval(_0x11ff97[_0xf1c9('0x26')]);Hi[_0xf1c9('0x9')]['js'][_0xf1c9('0x9b')](_0x51a899[_0xf1c9('0x26')],_0x51a899[_0xf1c9('0x29')]);}if(!Hi[_0xf1c9('0x9')][_0xf1c9('0xa')][_0xf1c9('0x70')][_0xf1c9('0x86')](_0xe35f96)){Hi[_0xf1c9('0x9')][_0xf1c9('0xa')][_0xf1c9('0x70')][_0xf1c9('0x89')](_0xe35f96,_0x332acb);}else{_0x332acb=Hi[_0xf1c9('0x9')][_0xf1c9('0xa')][_0xf1c9('0x70')][_0xf1c9('0x95')](_0xe35f96);}var _0x102de6=_0x51a899[_0xf1c9('0x26')];var _0x83b3eb=_0x51a899[_0xf1c9('0x29')];var _0x42e624=Hi[_0xf1c9('0xb')][_0xf1c9('0x2f')](_0x102de6,_0x83b3eb);_0x45d53d[_0xf1c9('0xa7')]=_0x51a899;var _0x36e962={};var _0x510e2c=Hi[_0xf1c9('0x9')]['js'][_0xf1c9('0x30')](_0x42e624,_0x45d53d,_0x332acb,_0x4413ff,_0x36e962,_0x4d73af,_0x114ceb);if(_0x4413ff){if(typeof _0x45f367==_0xf1c9('0x45')){_0x45f367['call']({},_0x510e2c);}}},_0xa70cf6);}};Hi[_0xf1c9('0xb')][_0xf1c9('0x85')]=function(_0x44164f,_0x2852f7){var _0x251e74='';if(typeof App!=_0xf1c9('0x14'))_0x251e74=App[_0xf1c9('0xec')];if(_0x44164f[_0xf1c9('0x26')]&&!_0x44164f[_0xf1c9('0x26')]){_0x251e74=_0x251e74+_0x44164f[_0xf1c9('0x26')]+'/';}else if(_0x44164f[_0xf1c9('0x26')]&&!_0x44164f[_0xf1c9('0x26')]){_0x251e74=_0x251e74+_0x44164f['controller']+'/';}else if(_0x44164f[_0xf1c9('0x26')]&&_0x44164f['controller']){_0x251e74=_0x251e74+_0x44164f[_0xf1c9('0x26')]+'/';}if(_0x44164f[_0xf1c9('0x29')]){_0x251e74=_0x251e74+_0x44164f[_0xf1c9('0x29')];}if(_0x44164f[_0xf1c9('0x87')]){if(typeof _0x44164f[_0xf1c9('0x87')]===_0xf1c9('0x43')){_0x251e74=_0x251e74+'?'+_0x44164f[_0xf1c9('0x87')];}else{var _0x55fc9b=Hi['$util'][_0xf1c9('0xed')](_0x44164f['get']);_0x251e74=_0x251e74+'?'+_0x55fc9b;}}return _0x251e74;};Hi[_0xf1c9('0xb')][_0xf1c9('0xe3')]=function(_0x21bacd,_0x47a9fa){var _0x371532='';if(typeof App!=_0xf1c9('0x14'))_0x371532=App[_0xf1c9('0x72')];if(_0x21bacd['controller']&&!_0x21bacd[_0xf1c9('0x26')]){_0x371532=_0x371532+_0x21bacd[_0xf1c9('0x26')]+'/';}else if(_0x21bacd[_0xf1c9('0x26')]&&!_0x21bacd[_0xf1c9('0x26')]){_0x371532=_0x371532+_0x21bacd['controller']+'/';}else if(_0x21bacd['controller']&&_0x21bacd[_0xf1c9('0x26')]){_0x371532=_0x371532+_0x21bacd['controller']+'/';}if(_0x21bacd[_0xf1c9('0x29')]){_0x371532=_0x371532+_0x21bacd[_0xf1c9('0x29')];}var _0x4ab510={};if(_0x21bacd[_0xf1c9('0x87')])_0x4ab510=Hi[_0xf1c9('0xc')][_0xf1c9('0xcf')](_0x21bacd[_0xf1c9('0x87')]);if(_0x4ab510[_0xf1c9('0x28')]('$')){var _0x24346d=_0x4ab510['$'];_0x371532=_0x371532+'.'+_0x24346d;}return _0x371532;};Hi[_0xf1c9('0xb')][_0xf1c9('0xee')]=![];Hi[_0xf1c9('0xb')]['currentRoute']=![];Hi[_0xf1c9('0xb')][_0xf1c9('0xa9')]=function(_0x509ec0,_0x40d79f){Hi['$nav'][_0xf1c9('0xee')]=_0x509ec0;Hi['$nav'][_0xf1c9('0xef')]=JSON[_0xf1c9('0x88')](_0x40d79f);if(!Hi['$nav'][_0xf1c9('0xaf')]){window[_0xf1c9('0xdc')][_0xf1c9('0xf0')](Hi[_0xf1c9('0xb')][_0xf1c9('0xef')],'',_0x509ec0);}};Hi[_0xf1c9('0xb')][_0xf1c9('0xf1')]=function(){if(Hi[_0xf1c9('0xb')][_0xf1c9('0xee')]){window[_0xf1c9('0xdc')][_0xf1c9('0xf2')](Hi['$nav'][_0xf1c9('0xef')],Hi[_0xf1c9('0xb')][_0xf1c9('0xee')]+Math['random'](),Hi[_0xf1c9('0xb')][_0xf1c9('0xee')]);}};Hi[_0xf1c9('0xb')][_0xf1c9('0xf3')]=function(_0x1e14d0){return Hi[_0xf1c9('0xb')][_0xf1c9('0xee')]===_0x1e14d0;};Hi[_0xf1c9('0xb')][_0xf1c9('0xf4')]=function(_0x13b0ab,_0x1d0cd0,_0x1721b8){if(_0x13b0ab){var _0x240ab6=!![];if(_0x13b0ab[_0xf1c9('0x28')](_0xf1c9('0xf5'))){_0x240ab6=![];delete _0x13b0ab['dembed'];}var _0x42a8e0=Hi[_0xf1c9('0xb')][_0xf1c9('0x85')](_0x13b0ab);var _0x4a9c72=![];var _0x147fc1={};_0x1721b8[_0xf1c9('0xf6')]=0x1;if(_0x1721b8){_0x147fc1=_0x1721b8;}var _0x28bf7b=![];var _0x1b4fa4=$[_0xf1c9('0xf7')]({'url':_0x42a8e0,'headers':_0x1721b8,'success':function(_0x449430){_0x1d0cd0(_0x449430);},'error':function(_0x576171,_0x547c3e,_0x197007){if(__[_0xf1c9('0x28')](_0xf1c9('0xf8'))){if(typeof __[_0xf1c9('0xf8')]=='function')__[_0xf1c9('0xf8')][_0xf1c9('0x46')](__,_0x13b0ab,_0x576171[_0xf1c9('0xf9')],_0x1b4fa4);}if(__['hasOwnProperty'](_0xf1c9('0xb2'))){if(typeof __[_0xf1c9('0xb2')]==_0xf1c9('0x45')){__[_0xf1c9('0xb2')]['call'](__,_0x13b0ab);}}console[_0xf1c9('0x7')](_0xf1c9('0xfa')+_0x42a8e0);_0x28bf7b=_0x576171['responseText'];},'complete':function(){Hi[_0xf1c9('0xb')][_0xf1c9('0xe1')]=![];if(typeof _0x28bf7b=='string')_0x1d0cd0(_0x28bf7b);}});if(_0x240ab6){Hi[_0xf1c9('0xb')][_0xf1c9('0xe1')]=_0x1b4fa4;}}};Hi[_0xf1c9('0xb')][_0xf1c9('0xfb')]={};Hi['$nav'][_0xf1c9('0xeb')]=function(_0x321e62,_0x5028e7){Hi[_0xf1c9('0xb')][_0xf1c9('0xfb')]={'controller':_0x321e62,'action':_0x5028e7};};Hi['$nav'][_0xf1c9('0x22')]=function(_0x4724c2){if(typeof _0x4724c2===_0xf1c9('0x43')){if(_0x4724c2[_0xf1c9('0x6c')]('/')!==-0x1){var _0x1dd0d7=_0x4724c2['length']-0x1;var _0x1cb944=-0x1;var _0x22bb1c=![];var _0x4d9c06=![];var _0x4ce8e4='';var _0x173a69='';for(var _0x180171 in _0x4724c2){var _0x4ee919=_0x4724c2[_0x180171];if(_0x4ee919!=='/'&&_0x4ee919!=='?'){_0x4ce8e4=_0x4ce8e4+_0x4ee919;}else{if(_0x1cb944==-0x1){throw new Error(_0xf1c9('0xfc')+_0x4724c2);}if(!_0x22bb1c&&!_0x4d9c06){_0x22bb1c=_0x4ce8e4;_0x4ce8e4='';}else if(_0x22bb1c&&!_0x4d9c06){_0x4d9c06=_0x4ce8e4;_0x4ce8e4='';}else if(_0x22bb1c&&_0x4d9c06){_0x4ce8e4=_0x4ce8e4+_0x4ee919;}}if(_0x180171==_0x1dd0d7){if(!_0x4d9c06&&_0x22bb1c){_0x4d9c06=_0x4ce8e4;}else if(_0x22bb1c&&_0x4d9c06){_0x173a69=_0x4ce8e4;}}_0x1cb944=_0x180171;}if(!(_0x22bb1c&&_0x4d9c06))throw new Error(_0xf1c9('0xfc')+_0x4724c2);var _0x4b9a7d={};_0x4b9a7d[_0xf1c9('0x26')]=_0x22bb1c;_0x4b9a7d[_0xf1c9('0x29')]=_0x4d9c06;if(_0x173a69){_0x4b9a7d[_0xf1c9('0x87')]=_0x173a69;}return _0x4b9a7d;}return Hi[_0xf1c9('0xb')][_0xf1c9('0x83')](_0x4724c2);}else{if(_0x4724c2[_0xf1c9('0x28')](_0xf1c9('0x26'))||_0x4724c2[_0xf1c9('0x28')](_0xf1c9('0x34'))){var _0x33ea4a=JSON[_0xf1c9('0x88')](JSON[_0xf1c9('0x81')](_0x4724c2));if(_0x4724c2['hasOwnProperty']('controller')){_0x33ea4a['controller']=_0x4724c2[_0xf1c9('0x26')];delete _0x33ea4a[_0xf1c9('0x26')];}if(_0x4724c2[_0xf1c9('0x28')](_0xf1c9('0x34'))){_0x33ea4a[_0xf1c9('0x29')]=_0x4724c2['view'];delete _0x33ea4a[_0xf1c9('0x34')];}return _0x33ea4a;}return _0x4724c2;}};Hi[_0xf1c9('0xb')][_0xf1c9('0xfd')]=function(_0x8fdda3){return Hi[_0xf1c9('0xb')][_0xf1c9('0x85')](_0x8fdda3);};Hi['$frontiers']={};Hi[_0xf1c9('0x17')][_0xf1c9('0x18')]=function(){var _0x3a7dd6={'obj':![],'prop':![],'callback':![]};var _0x1c4595=undefined;var _0x5b6cd7=undefined;var _0x1e01f9=undefined;var _0x531665=undefined;var _0x4d8dda=undefined;var _0x5ac485=undefined;var _0x5a7236=undefined;var _0x746852=undefined;var _0x4872de=function(_0x2e444c){if(__[_0xf1c9('0x28')](_0xf1c9('0x17'))){if(__[_0xf1c9('0x17')][_0xf1c9('0x28')](_0x2e444c))return __[_0xf1c9('0x17')][_0x2e444c];}return undefined;};var _0x3bb4df=function(){if(__[_0xf1c9('0x28')](_0xf1c9('0x17'))){return __[_0xf1c9('0x17')];}return undefined;};this[_0xf1c9('0xfe')]=function(_0x24480a){_0x746852=_0x24480a;};this[_0xf1c9('0x16')]=function(_0x5c5c4e){if(typeof _0x3a7dd6[_0xf1c9('0xff')]==_0xf1c9('0x45'))_0x3a7dd6[_0xf1c9('0xff')][_0xf1c9('0x46')](this,_0x5c5c4e);this[_0xf1c9('0x100')]();};this[_0xf1c9('0x100')]=function(){if(typeof _0x5a7236==_0xf1c9('0x45'))_0x5a7236[_0xf1c9('0x46')](this);else{var _0x1b798b=_0x4872de(_0xf1c9('0x101'));if(typeof _0x1b798b!=_0xf1c9('0x14')){_0x1b798b[_0xf1c9('0x46')](_0x3bb4df(),this);}}};this[_0xf1c9('0x102')]=function(_0x10e017){if(typeof _0x5ac485==_0xf1c9('0x45')){_0x5ac485['call'](this,_0x10e017);}else{var _0xb94d6f=_0x4872de(_0xf1c9('0x103'));if(typeof _0xb94d6f!='undefined'){_0xb94d6f['call'](_0x3bb4df(),this,_0x10e017);}}this['_setRequestFinished']();};this[_0xf1c9('0x1a')]=function(){var _0x5c7b25=_0x4872de(_0xf1c9('0x104'));var _0x38391b=_0x4872de(_0xf1c9('0x103'));if(typeof _0x5b6cd7==_0xf1c9('0x45')){_0x5b6cd7['call'](this);}else if(_0x5c7b25=='function'){_0x5c7b25[_0xf1c9('0x46')](_0x3bb4df(),this);}else if(typeof _0x5ac485==_0xf1c9('0x45')){this[_0xf1c9('0x102')](0x198);}else if(typeof _0x38391b==_0xf1c9('0x45')){_0x38391b[_0xf1c9('0x46')](_0x3bb4df(),this,0x198);}this[_0xf1c9('0x100')]();};this['_setForbidden']=function(){var _0x40d718=_0x4872de(_0xf1c9('0x1b'));var _0x15460a=_0x4872de(_0xf1c9('0x103'));if(typeof _0x1c4595==_0xf1c9('0x45')){_0x1c4595['call'](this);}else if(typeof _0x40d718==_0xf1c9('0x45')){_0x40d718[_0xf1c9('0x46')](_0x3bb4df(),this);}else if(typeof _0x5ac485=='function'){this[_0xf1c9('0x102')](0x193);}else if(typeof _0x15460a==_0xf1c9('0x45')){_0x15460a[_0xf1c9('0x46')](_0x3bb4df(),0x193);}this[_0xf1c9('0x100')]();};this['_setInterrupted']=function(){var _0xc22a16=_0x4872de('interrupted');var _0x5d2f4c=_0x4872de('catch');if(typeof _0x531665==_0xf1c9('0x45')){_0x531665[_0xf1c9('0x46')](this);}else if(typeof _0xc22a16==_0xf1c9('0x45')){_0xc22a16['call'](_0x3bb4df(),this);}else if(typeof _0x5ac485==_0xf1c9('0x45')){this[_0xf1c9('0x102')](0x1c4);}else if(typeof _0x5d2f4c==_0xf1c9('0x45')){_0x5d2f4c[_0xf1c9('0x46')](_0x3bb4df(),this,0x1c4);}this[_0xf1c9('0x100')]();};this[_0xf1c9('0x105')]=function(){var _0x347ab1=_0x4872de(_0xf1c9('0x1d'));var _0x1c5bba=_0x4872de(_0xf1c9('0x103'));if(typeof _0x4d8dda==_0xf1c9('0x45')){_0x4d8dda[_0xf1c9('0x46')](this);}else if(typeof _0x347ab1=='function'){_0x347ab1[_0xf1c9('0x46')](_0x3bb4df(),this);}else if(typeof _0x5ac485=='function'){this[_0xf1c9('0x102')](0x1ad);}else if(typeof _0x1c5bba==_0xf1c9('0x45')){_0x5ac485['call'](_0x3bb4df(),this,0x1ad);}this['_setRequestFinished']();};this[_0xf1c9('0x19')]=function(_0x2b4f1f){var _0x3e9ef4=_0x4872de(_0xf1c9('0x103'));if(typeof _0x5ac485==_0xf1c9('0x45')){_0x5ac485[_0xf1c9('0x46')](this,_0x2b4f1f);}else if(typeof _0x3e9ef4==_0xf1c9('0x45')){_0x3e9ef4[_0xf1c9('0x46')](_0x3bb4df(),this,_0x2b4f1f);}this[_0xf1c9('0x100')]();};this[_0xf1c9('0x106')]=function(_0x5dd141){if(typeof _0x5dd141==_0xf1c9('0x45')){_0x3a7dd6['callback']=_0x5dd141;}else{throw new Error('Wrong\x20parameters');}return this;};this[_0xf1c9('0x101')]=function(_0x2e266f){if(typeof _0x2e266f==_0xf1c9('0x45')){_0x5a7236=_0x2e266f;}else{throw new Error(_0xf1c9('0x107'));}return this;};this['run']=function(){};this['do']=function(){this[_0xf1c9('0x66')]();};this['forbidden']=function(_0x3b29b8){if(typeof _0x3b29b8!=_0xf1c9('0x45'))throw new Error(_0xf1c9('0x107'));_0x1c4595=_0x3b29b8;return this;};this[_0xf1c9('0x104')]=function(_0x5a2aab){if(typeof _0x5a2aab!=_0xf1c9('0x45'))throw new Error(_0xf1c9('0x107'));_0x5b6cd7=_0x5a2aab;return this;};this[_0xf1c9('0x108')]=function(_0x47fbc){if(typeof _0x47fbc!=_0xf1c9('0x45'))throw new Error(_0xf1c9('0x107'));_0x531665=_0x47fbc;return this;};this[_0xf1c9('0x1d')]=function(_0x4c3237){if(typeof _0x4c3237!=_0xf1c9('0x45'))throw new Error(_0xf1c9('0x107'));_0x4d8dda=_0x4c3237;return this;};this[_0xf1c9('0x103')]=function(_0x5a6543){if(typeof _0x5a6543!=_0xf1c9('0x45'))throw new Error(_0xf1c9('0x107'));_0x5ac485=_0x5a6543;return this;};this['getRequest']=function(){return _0x746852;};};var Upload=function(_0x425056,_0x2e0bca){if(typeof _0x425056!==_0xf1c9('0x43')||typeof _0x2e0bca!==_0xf1c9('0x58'))throw new Error(_0xf1c9('0x109'));this[_0xf1c9('0x4c')]=_0x425056;this[_0xf1c9('0x65')]=_0x2e0bca;this[_0xf1c9('0x10a')]=function(){return this['name'];};this[_0xf1c9('0x10b')]=function(){return this[_0xf1c9('0x65')];};this[_0xf1c9('0x44')]=function(){return this['files'][_0xf1c9('0x44')];};};Hi[_0xf1c9('0x10c')]=function(_0x1764ee){Hi['$ui']['js'][_0xf1c9('0x78')]=_0x1764ee;};Hi[_0xf1c9('0x1f')]=function(_0x54c948){jQuery[_0xf1c9('0x10d')](_0x54c948,Hi[_0xf1c9('0x9')]['js'][_0xf1c9('0x78')]);Hi[_0xf1c9('0x9')]['js'][_0xf1c9('0x78')]=_0x54c948;};Hi['redirect']=Hi[_0xf1c9('0xb')][_0xf1c9('0x48')];Hi[_0xf1c9('0xbd')]=function(_0x54962b,_0x12134f){if(typeof _0x12134f!=_0xf1c9('0x14')){var _0x3e0b76=Hi[_0xf1c9('0xb')]['resolveRoute'](_0x54962b);_0x3e0b76[_0xf1c9('0x87')]=_0x12134f;var _0x54962b=Hi[_0xf1c9('0xb')][_0xf1c9('0x85')](_0x3e0b76);document[_0xf1c9('0xba')][_0xf1c9('0xbb')](_0x54962b);}else{document[_0xf1c9('0xba')][_0xf1c9('0xbb')](App[_0xf1c9('0xec')]+_0x54962b);}};Hi[_0xf1c9('0x4e')]=Hi[_0xf1c9('0xb')]['navigateTo'];Hi[_0xf1c9('0x34')]=function(_0x200786){var _0x48b21b=Hi[_0xf1c9('0xb')]['nextControllerInfo'];var _0x1c30c3=Hi[_0xf1c9('0xb')][_0xf1c9('0x22')](_0x48b21b);_0x200786[_0xf1c9('0xa7')]=_0x1c30c3;Hi[_0xf1c9('0x9')]['js'][_0xf1c9('0x9f')](_0x48b21b[_0xf1c9('0x26')],_0x48b21b[_0xf1c9('0x29')],_0x200786);};String[_0xf1c9('0x10e')][_0xf1c9('0x10f')]=function(_0x3a051f){return this[_0xf1c9('0x6c')](_0x3a051f)===0x0;};Array['prototype'][_0xf1c9('0xe0')]=function(_0xbb5d78){var _0x22512b=this;var _0x357fea=_0x22512b[_0xf1c9('0x6c')](_0xbb5d78);if(_0x357fea>-0x1){_0x22512b['splice'](_0x357fea,0x1);}};window[_0xf1c9('0x110')]=function(_0x185f04){if(typeof App==_0xf1c9('0x14'))return;var _0x4507e9=App[_0xf1c9('0xec')];var _0x4d6214=window['location']['toString']();if(_0x4d6214[_0xf1c9('0x10f')](_0x4507e9)){var _0xbd9472=_0x4d6214[_0xf1c9('0x111')](_0x4d6214['length']-0x1);if(_0xbd9472=='#'){return;}var _0x5687df=_0x4d6214['replace'](App[_0xf1c9('0xec')],'');Hi[_0xf1c9('0xb')][_0xf1c9('0xdb')](_0x5687df);}};Hi[_0xf1c9('0xc5')]={};Hi[_0xf1c9('0xc5')][_0xf1c9('0x112')]={};Hi[_0xf1c9('0xc5')][_0xf1c9('0xc6')]=function(){delete Hi[_0xf1c9('0xc5')]['exported'];Hi['i18n'][_0xf1c9('0x112')]={};if(typeof $i18nTemplateBundle!=_0xf1c9('0x14')){Hi['i18n'][_0xf1c9('0xc7')]($i18nTemplateBundle);}if(typeof $i18nBundle!='undefined'){Hi[_0xf1c9('0xc5')][_0xf1c9('0xc7')]($i18nBundle);}};Hi[_0xf1c9('0xc5')][_0xf1c9('0xc7')]=function(_0x6edef9){for(var _0x40ac9e in _0x6edef9){if(_0x6edef9[_0xf1c9('0x28')](_0x40ac9e)){Hi[_0xf1c9('0xc5')][_0xf1c9('0x112')][_0x40ac9e]=_0x6edef9[_0x40ac9e];}}};Hi[_0xf1c9('0xc5')][_0xf1c9('0x75')]=function(){Hi[_0xf1c9('0xc5')][_0xf1c9('0xc6')]();};Hi['i18n'][_0xf1c9('0x87')]=function(_0x54f5b6){if(!Hi[_0xf1c9('0xc5')][_0xf1c9('0x112')][_0xf1c9('0x28')](_0x54f5b6))return![];return Hi[_0xf1c9('0xc5')][_0xf1c9('0x112')][_0x54f5b6];};Hi['i18n'][_0xf1c9('0x113')]=function(_0x2154b8,_0x11029d){for(var _0x40b238 in _0x11029d){var _0x22e28a='{{'+_0x40b238+'}}';var _0x4f36eb=_0x11029d[_0x40b238];_0x2154b8=_0x2154b8[_0xf1c9('0xd0')](_0x22e28a)['join'](_0x4f36eb);}return _0x2154b8;};Hi[_0xf1c9('0xc5')][_0xf1c9('0x114')]=function(_0x1b8135){this[_0xf1c9('0x115')]=function(_0x4db438){return Hi['i18n'][_0xf1c9('0x113')](_0x1b8135,_0x4db438);};};Hi[_0xf1c9('0xc5')]['isExpression']=function(_0x4e64de){return _0x4e64de[_0xf1c9('0x6c')]('{{')!=-0x1&&_0x4e64de[_0xf1c9('0x6c')]('}}')!=-0x1;};function translate(_0x4d68c4,_0x591f82){var _0x499f2d=_0x4d68c4;if(typeof _0x591f82!=_0xf1c9('0x14'))_0x499f2d=_0x591f82;var _0x383fdb=Hi[_0xf1c9('0xc5')][_0xf1c9('0x87')](_0x499f2d);if(!_0x383fdb){if(Hi[_0xf1c9('0xc5')]['isExpression'](_0x4d68c4))return new Hi[(_0xf1c9('0xc5'))][(_0xf1c9('0x114'))](_0x4d68c4);return _0x4d68c4;}if(Hi[_0xf1c9('0xc5')]['isExpression'](_0x383fdb))return new Hi[(_0xf1c9('0xc5'))]['ExpressionPromise'](_0x383fdb);return _0x383fdb;}function __t(_0x2487f7,_0x154058){return translate(_0x2487f7,_0x154058);}var $fiis={};var fMx=function(_0x47e371,_0x55251c,_0x172403,_0xc154f1,_0x5e49e,_0x26c087,_0x4cbe0c,_0x2ab64e){var _0x58ed33=![];if(_0x2ab64e[_0xf1c9('0x44')]>0x0){for(var _0x283933 in _0x2ab64e){var _0x59c722=_0x2ab64e[_0x283933];if(Upload[_0xf1c9('0x10e')][_0xf1c9('0x116')](_0x59c722)){_0x58ed33=!![];break;}}}var _0x59dcb0=new Hi[(_0xf1c9('0x17'))]['Promise']();if($fiis['hasOwnProperty'](_0xc154f1)){if(_0x5e49e){if(_0x26c087){if(_0x4cbe0c){$fiis[_0xc154f1][_0xf1c9('0xe2')]();}else return new Hi[(_0xf1c9('0x17'))][(_0xf1c9('0x117'))]();}else{if(JSON[_0xf1c9('0x81')](_0x47e371)==$fiis[_0xc154f1][_0xf1c9('0x118')]){if(_0x4cbe0c){$fiis[_0xc154f1][_0xf1c9('0xe2')]();}else return new Hi[(_0xf1c9('0x17'))][(_0xf1c9('0x18'))]();}}}}var _0x42614b={'success':function(_0x10cf2a){if(_0x10cf2a[_0xf1c9('0x28')](_0xf1c9('0xea'))){var _0x1e31a9=_0x10cf2a[_0xf1c9('0xea')];for(var _0x1b411d in _0x1e31a9){var _0x547c5e=_0x1e31a9[_0x1b411d];Hi['$ui']['js'][_0xf1c9('0xb6')][_0xf1c9('0x66')](_0x1b411d,_0x547c5e);}}if(_0x10cf2a['hasOwnProperty']('$root')){if(typeof __!=_0xf1c9('0x14')){for(var _0x20f76d in _0x10cf2a[_0xf1c9('0xc3')]){__[_0x20f76d]=_0x10cf2a[_0xf1c9('0xc3')][_0x20f76d];}__[_0xf1c9('0xb0')]();}}_0x59dcb0[_0xf1c9('0x16')](_0x10cf2a[_0xf1c9('0x13')]);},'error':function(_0x14cf31,_0x213084,_0x1d103e){var _0x3d907b=_0x14cf31[_0xf1c9('0x119')];var _0x12e7d6=undefined;try{var _0x9325d8=JSON[_0xf1c9('0x88')](_0x3d907b);if(_0x9325d8['hasOwnProperty'](_0xf1c9('0x5e'))&&_0x9325d8[_0xf1c9('0x28')](_0xf1c9('0x11a'))){_0x59dcb0[_0xf1c9('0x19')](_0x9325d8);return;}}catch(_0x538475){}if(_0x213084==_0xf1c9('0xe2')){_0x59dcb0[_0xf1c9('0x11b')]();}else if(_0x213084==_0xf1c9('0x104')){_0x59dcb0['_setTimedOut']();}else{switch(_0x14cf31[_0xf1c9('0xf9')]){case 0x193:_0x59dcb0['_setForbidden']();break;case 0x198:_0x59dcb0[_0xf1c9('0x1a')]();break;case 0x1a5:_0x59dcb0[_0xf1c9('0x11b')]();break;case 0x1ad:_0x59dcb0[_0xf1c9('0x105')]();break;default:_0x59dcb0[_0xf1c9('0x19')](0x1f4);break;}}},'complete':function(){delete $fiis[_0xc154f1];}};_0x42614b['method']=_0xf1c9('0x11c');_0x42614b[_0xf1c9('0xbc')]=_0x55251c;_0x42614b[_0xf1c9('0x11d')]={'csrfToken':App['csrfToken']};_0x42614b[_0xf1c9('0x11e')]=_0xf1c9('0x11f');_0x42614b[_0xf1c9('0x70')]=![];_0x42614b['timeout']=_0x172403;if(!_0x58ed33){_0x42614b[_0xf1c9('0xe9')]=JSON[_0xf1c9('0x81')](_0x47e371);}else{var _0x418119=new FormData();var _0x28ca08={};var _0x2b73bb={};for(var _0x525c48 in _0x2ab64e){var _0x59c722=_0x2ab64e[_0x525c48];if(Upload['prototype'][_0xf1c9('0x116')](_0x59c722)){var _0x4b4b54=_0x59c722[_0xf1c9('0x10a')]();_0x2b73bb[_0x4b4b54]=_0x59c722[_0xf1c9('0x44')]();_0x28ca08['arg'+_0x525c48]=_0xf1c9('0x120')+_0x4b4b54;var _0x3f15f9=_0x59c722[_0xf1c9('0x10b')]();for(var _0x1eba6e=0x0;_0x1eba6e<_0x3f15f9[_0xf1c9('0x44')];_0x1eba6e++)_0x418119[_0xf1c9('0x4b')](_0x4b4b54+_0xf1c9('0x121')+_0x1eba6e,_0x3f15f9[_0x1eba6e]);}else{if(typeof _0x59c722!=_0xf1c9('0x45'))_0x28ca08[_0xf1c9('0x122')+_0x525c48]=_0x59c722;}}_0x418119[_0xf1c9('0x4b')]('$uploads',JSON[_0xf1c9('0x81')](_0x2b73bb));_0x418119[_0xf1c9('0x4b')](_0xf1c9('0x123'),JSON[_0xf1c9('0x81')](_0x28ca08));_0x42614b[_0xf1c9('0x124')]=![];_0x42614b['contentType']=![];_0x42614b[_0xf1c9('0xe9')]=_0x418119;}var _0x588441=$[_0xf1c9('0xf7')](_0x42614b);_0x59dcb0['_setRequest'](_0x588441);_0x588441[_0xf1c9('0x118')]=JSON[_0xf1c9('0x81')](_0x47e371);$fiis[_0xc154f1]=_0x588441;return _0x59dcb0;};
\ No newline at end of file
+var _0x24a4=['Invalid\x20value\x20set\x20for\x20property\x20Hi.$config.angular.modules','push','module','fireBeforeRun','app','deploy-id-','base64_url','cache','destroy','deployId','deployMode','i18n','init','injector','$compile','$startedUp','root','$init','$injector','concat','invoke','$startup\x20function\x20is\x20undefined','$inject','$rootScope','initialize','hi_cache_regs','stringify','getNamedRoute','getTextViewPath','getURL','get','storeView','getStorageKey','hi-app-views-','updateCache','getCache','parse','
','find','.hi','remove','normalizePath','Caching\x20view\x20of\x20path\x20<','substr','stores','setTitle','title','getTitle','controllers','loadedControllers','wasControllerLoaded','getViewController','setViewController','$new','$startup','fireBeforeView','setScopeProps','$preLoad','$onPreLoad','$route','setLocation','$postLoad','proceed','$onClose','$activeView','$view','#view_content','isGoingBack','$apply','$onPostLoad','$onRedirectFinish','$preventClose','$close','Invalid\x20active\x20view\x20object','commands','all','set','$reload','url','location','replace','reload','$url','value','$reloadLanguage','$redirect','redirect','$root','$dictionary','export','__t','strip','ucfirst','toUpperCase','toLowerCase','split','substring','getKidProperties','lcfirst','explode','valueOf','goto','Hi.$nav.navigateTo(\x27','\x27);','onClick','getViewPath','routeBack','navigateTo','history','last','newNamedRoute','namedRoutes','setActivePath','getPreviousPath','removeVal','active','abort','$onRedirectStart','dialog','Ignore-View','Ignore-Js','true','embedded','response','Request\x20to\x20server\x20returned\x20an\x20unexpected\x20result','data','$invoke','view','fetch','createViewScope','base_url','encodeGetParams','URLToJson','currentPage','currentRoute','pushState','resetLocation','replaceState','random','isSameRoute','requestData','AJAX_MVC','ajax','$onRedirectError','status','responseText','nextControllerInfo','setNextControllerInfo','Invalid\x20route\x20supplied\x20:\x20','toSlashes','_setRequest','callback','_setRequestFinished','finally','_setHttpError','catch','_setTimedOut','_setExpired','_setInterrupted','interrupted','_setOverRequest','_setException','try','Wrong\x20parameters','getRequest','Invalid\x20params\x20supplied\x20to\x20Upload\x20class\x20constructor','getName','getFiles','files','rootTemplate','extend','prototype','splice','onpopstate','toString','startsWith','exported','reset','format','join','with','isExpression','ExpressionPromise','isPrototypeOf','Promisse','$params','details','method','dataType','json','$$$upload:','_file_','$uploads','$args','contentType','$template','$angular','$config','nav','changeLocation','debugLogs','error','angular','$ui','html','$nav','$util','$test','configs','frontiers','delay','evalTimeout','result','undefined','success','Promise','_setResult','timeout','forbidden','$frontiers','_setForbidden','overrequest','MockTemplate','template','ViewTestPromise','route','resolveRoute','receptor','gettable','markup','controller','scope','hasOwnProperty','No\x20controller\x20and\x20action\x20names\x20detected.\x20Suspending\x20preparation','viewHtml','build','action','warn','No\x20scope\x20returned\x20to\x20receptor','$embed','withHtml','directives','aload','asrc','err','onload','src','onerror','attr','$observe','name','embed','onready','onfail','string','function','call','onError','$element','element','empty','append','$eval','ajaxify','removeAttr','href','click','javascript:void(0)','bind','directivesDefiner','angularModule','setModule','define','object','directive','Angular\x20directives\x20could\x20not\x20defined.\x20No\x20valid\x20angular\x20module\x20supplied','ngUpload','trim','length','Invalid\x20upload\x20name\x20:\x20','type','The\x20type\x20property\x20is\x20missing\x20on\x20the\x20upload\x20element\x20with\x20name\x20\x27','The\x20upload\x20element\x20with\x20name\x20\x27','\x27\x20must\x20be\x20of\x20type\x20\x22file\x22','onfiles','target','run','isArray','modules','debug','Injecting\x20the\x20following\x20modules\x20to\x20Hi\x20Application\x20:\x20','No\x20modules\x20to\x20be\x20injected\x20to\x20Hi\x20Application','No\x20run\x20function\x20for\x20Hi\x20Application','indexOf'];(function(_0x467335,_0x4bbaeb){var _0x3010e2=function(_0x58650a){while(--_0x58650a){_0x467335['push'](_0x467335['shift']());}};_0x3010e2(++_0x4bbaeb);}(_0x24a4,0xc3));var _0x3441=function(_0x40fbb4,_0x137568){_0x40fbb4=_0x40fbb4-0x0;var _0x652484=_0x24a4[_0x40fbb4];return _0x652484;};var __={};var Hi={};Hi[_0x3441('0x0')]=undefined;Hi['$view']=undefined;Hi[_0x3441('0x1')]={};Hi[_0x3441('0x2')]={};Hi['$config'][_0x3441('0x3')]={};Hi[_0x3441('0x2')][_0x3441('0x3')][_0x3441('0x4')]=!![];Hi['$config'][_0x3441('0x5')]=![];var Log={};Log['debug']=function(_0x4f0eaf){if(Hi['$config'][_0x3441('0x5')])console[_0x3441('0x6')](_0x4f0eaf);};Hi[_0x3441('0x2')]['ui']={};Hi['$config'][_0x3441('0x7')]={};Hi[_0x3441('0x8')]={};Hi['$ui'][_0x3441('0x9')]={};Hi['$ui']['js']={};Hi[_0x3441('0xa')]={};Hi[_0x3441('0xb')]={};Hi[_0x3441('0xc')]={};Hi[_0x3441('0xc')][_0x3441('0xd')]={};Hi[_0x3441('0xc')][_0x3441('0xd')][_0x3441('0xe')]={};Hi[_0x3441('0xc')]['configs']['frontiers'][_0x3441('0xf')]=0x0;Hi[_0x3441('0xc')][_0x3441('0xd')]['frontiers'][_0x3441('0x10')]=0x32;Hi[_0x3441('0xc')]['getMockCallTimeout']=function(){var _0x57cafb=Hi[_0x3441('0xc')]['configs'][_0x3441('0xe')]['delay'];var _0x4e48a1=Hi[_0x3441('0xc')][_0x3441('0xd')][_0x3441('0xe')][_0x3441('0x10')];if(_0x57cafb>0x0)return _0x57cafb;return _0x4e48a1;};Hi[_0x3441('0xc')]['MockCall']=function(_0x1b5497){this[_0x3441('0x11')]=function(_0x70225a){var _0x34e619=Hi[_0x3441('0xc')]['getMockCallTimeout']();if(typeof _0x1b5497!=_0x3441('0x12')&&_0x1b5497>0x0)_0x34e619=_0x1b5497;setTimeout(_0x70225a,_0x34e619);};this[_0x3441('0x13')]=function(_0x458b7e){var _0x178a71=new Hi['$frontiers'][(_0x3441('0x14'))]();this[_0x3441('0x11')](function(){_0x178a71[_0x3441('0x15')](_0x458b7e);});return _0x178a71;};this['error']=function(_0x3144f0){var _0x30ae3c=new Hi['$frontiers'][(_0x3441('0x14'))]();this[_0x3441('0x11')](function(){_0x30ae3c['_setException'](_0x3144f0);});return _0x30ae3c;};this[_0x3441('0x16')]=function(){var _0x3486cc=new Hi['$frontiers'][(_0x3441('0x14'))]();this[_0x3441('0x11')](function(){_0x3486cc['_setTimedOut']();});return _0x3486cc;};this[_0x3441('0x17')]=function(){var _0x54c8d1=new Hi[(_0x3441('0x18'))][(_0x3441('0x14'))]();this[_0x3441('0x11')](function(){_0x54c8d1[_0x3441('0x19')]();});return _0x54c8d1;};this[_0x3441('0x1a')]=function(){var _0x30af6d=new Hi[(_0x3441('0x18'))]['Promise']();this[_0x3441('0x11')](function(){_0x30af6d['_setOverRequest']();});return _0x30af6d;};};Hi[_0x3441('0xc')][_0x3441('0x1b')]=function(_0x2220e7){Hi[_0x3441('0x1c')](_0x2220e7);};Hi[_0x3441('0xc')][_0x3441('0x1d')]=function(_0x1da5c7){this[_0x3441('0x1e')]=Hi['$nav'][_0x3441('0x1f')](_0x1da5c7);this[_0x3441('0x20')]={};this[_0x3441('0x21')]={};this[_0x3441('0x21')]['html']=function(){return this[_0x3441('0x20')][_0x3441('0x22')];};this[_0x3441('0x21')][_0x3441('0x23')]=function(){return this['receptor'][_0x3441('0x24')];};if(!(this[_0x3441('0x1e')]['hasOwnProperty'](_0x3441('0x23'))&&this[_0x3441('0x1e')][_0x3441('0x25')]('action'))){console['warn'](_0x3441('0x26'));this[_0x3441('0x21')]=![];}this[_0x3441('0x27')]='';this[_0x3441('0x28')]=function(){Hi[_0x3441('0x2')][_0x3441('0x3')][_0x3441('0x4')]=![];if(!this[_0x3441('0x21')])return![];var _0x2db584=Hi[_0x3441('0xa')]['getViewPath'](this[_0x3441('0x1e')][_0x3441('0x23')],this[_0x3441('0x1e')][_0x3441('0x29')]);Hi['$ui']['js']['createViewScope'](_0x2db584,{},this[_0x3441('0x27')],![],this['receptor'],![],undefined);if(!this[_0x3441('0x20')]['hasOwnProperty'](_0x3441('0x24'))){console[_0x3441('0x2a')](_0x3441('0x2b'));return![];}this['receptor'][_0x3441('0x24')][_0x3441('0x2c')]=function(){};this[_0x3441('0x21')][_0x3441('0x20')]=this[_0x3441('0x20')];return this['gettable'];};this[_0x3441('0x2d')]=function(_0x2a26d5){this[_0x3441('0x27')]=_0x2a26d5;return this;};};Hi[_0x3441('0xc')]['view']=function(_0x3c6493){return new Hi[(_0x3441('0xc'))][(_0x3441('0x1d'))](_0x3c6493);};Hi[_0x3441('0x1')][_0x3441('0x2e')]={};Hi[_0x3441('0x1')]['directives'][_0x3441('0x2f')]=function(){return{'restrict':'A','link':function(_0x1c9fbe,_0x2a3989,_0x15c0ca){var _0x4cfc6e=new Image();var _0x4abff4=![];var _0x5d797e=![];var _0x29190b=![];if(_0x15c0ca[_0x3441('0x25')](_0x3441('0x30'))){_0x4abff4=_0x15c0ca[_0x3441('0x30')];}else{return;}var _0x341322=function(){_0x5d797e=_0x15c0ca[_0x3441('0x2f')];_0x29190b=_0x5d797e;if(_0x15c0ca['hasOwnProperty']('err')){_0x29190b=_0x15c0ca[_0x3441('0x31')];}$(_0x2a3989)['attr']('src',_0x5d797e);var _0x4cfc6e=new Image();_0x4cfc6e[_0x3441('0x32')]=function(){$(_0x2a3989)['attr'](_0x3441('0x33'),_0x4abff4);};_0x4cfc6e[_0x3441('0x34')]=function(){$(_0x2a3989)[_0x3441('0x35')]('src',_0x29190b);};_0x4cfc6e[_0x3441('0x33')]=_0x4abff4;};_0x341322();_0x15c0ca[_0x3441('0x36')]('asrc',function(_0x199c38){if(typeof _0x199c38!=_0x3441('0x12')){_0x4abff4=_0x15c0ca['asrc'];_0x341322();}});}};};Hi[_0x3441('0x1')][_0x3441('0x2e')]['view']=function(){return{'restrict':'E','scope':![],'link':function(_0x56901a,_0x3a3d34,_0x23c138){var _0x51f862=![];if(!_0x23c138[_0x3441('0x25')](_0x3441('0x37')))throw new Error('No\x20name\x20attribute\x20defined\x20on\x20view\x20element');if(_0x23c138[_0x3441('0x25')](_0x3441('0x38')))_0x51f862=_0x23c138[_0x3441('0x38')];var _0x328bbf='onbusy';var _0x3340af=![];if(_0x23c138['hasOwnProperty'](_0x328bbf))_0x3340af=_0x23c138[_0x328bbf];var _0x568fee=_0x3441('0x39');var _0x26950a=![];if(_0x23c138[_0x3441('0x25')](_0x568fee))_0x26950a=_0x23c138[_0x568fee];var _0x46b7cc=_0x3441('0x3a');var _0x10a05f=![];if(_0x23c138[_0x3441('0x25')](_0x46b7cc))_0x10a05f=_0x23c138[_0x46b7cc];var _0x73ae04=function(_0x51f862,_0x35e2b6,_0x3e4f3d,_0x4050d8){if(typeof _0x51f862!=_0x3441('0x3b')||_0x51f862['length']<0x1)throw new Error('URL\x20is\x20now\x20valid');if(typeof _0x4050d8==_0x3441('0x3c'))_0x4050d8[_0x3441('0x3d')](_0x56901a);var _0x4d06eb={};_0x4d06eb[_0x3441('0x3e')]=function(){if(typeof _0x3e4f3d==_0x3441('0x3c'))_0x3e4f3d[_0x3441('0x3d')](_0x56901a);};try{Hi[_0x3441('0xa')]['navigateTo'](_0x51f862,![],!![],function(_0x5cb948){_0x5cb948[_0x3441('0x24')][_0x3441('0x3f')]=_0x5cb948[_0x3441('0x40')];_0x5cb948[_0x3441('0x24')][_0x3441('0x2c')]=_0x73ae04;_0x56901a[_0x23c138[_0x3441('0x37')]]=_0x5cb948[_0x3441('0x24')];_0x56901a['$applyAsync'](function(){$(_0x3a3d34)[_0x3441('0x41')]();$(_0x3a3d34)[_0x3441('0x42')](_0x5cb948[_0x3441('0x40')]);if(typeof _0x35e2b6=='function')_0x35e2b6[_0x3441('0x3d')]();});},_0x56901a,_0x4d06eb);}catch(_0x3d752b){if(typeof _0x3e4f3d==_0x3441('0x3c'))_0x3e4f3d[_0x3441('0x3d')](_0x56901a);}};if(!_0x51f862)_0x56901a[_0x23c138['name']]={'$embed':_0x73ae04};else _0x73ae04(_0x51f862,function(){if(typeof _0x26950a==_0x3441('0x3b'))_0x56901a[_0x3441('0x43')](_0x26950a);},function(){if(typeof _0x10a05f=='string')_0x56901a['$eval'](_0x10a05f);},function(){if(typeof _0x3340af==_0x3441('0x3b'))_0x56901a['$eval'](_0x3340af);});}};};Hi['$angular']['directives'][_0x3441('0x44')]=function(){return{'restrict':'A','link':function(_0x438ca8,_0x175ceb,_0x362be1){$(_0x175ceb)[_0x3441('0x45')](_0x3441('0x44'));if(_0x362be1[_0x3441('0x46')]){var _0x298cf4=_0x362be1[_0x3441('0x46')];var _0x225e9b=_0x3441('0x47');$(_0x175ceb)['attr'](_0x3441('0x46'),_0x3441('0x48'));if(_0x362be1['on']){_0x225e9b=_0x362be1['on'];$(_0x175ceb)['removeAttr']('on');}Hi[_0x3441('0xa')][_0x3441('0x49')]($(_0x175ceb),_0x298cf4,_0x225e9b);}}};};Hi['$angular'][_0x3441('0x4a')]=function(_0x1d67d0){this[_0x3441('0x4b')]=_0x1d67d0;this[_0x3441('0x4c')]=function(_0x284dd6){this[_0x3441('0x4b')]=_0x284dd6;};this[_0x3441('0x4d')]=function(){if(typeof this[_0x3441('0x4b')]==_0x3441('0x4e')){if(typeof this[_0x3441('0x4b')][_0x3441('0x4f')]!=_0x3441('0x3c')){throw new Error(_0x3441('0x50'));}}for(var _0x3fafa1 in Hi[_0x3441('0x1')][_0x3441('0x2e')]){var _0x1e6d9c=Hi[_0x3441('0x1')][_0x3441('0x2e')][_0x3fafa1];this[_0x3441('0x4b')][_0x3441('0x4f')](_0x3fafa1,_0x1e6d9c);}};};Hi[_0x3441('0x1')][_0x3441('0x2e')][_0x3441('0x51')]=function(_0x288c0a){return{'restrict':'A','scope':![],'link':function(_0x240bb3,_0x3b1c23,_0x90048d){var _0x549afb=_0x90048d[_0x3441('0x51')];var _0x201cf9=undefined;if(_0x549afb[_0x3441('0x52')]()[_0x3441('0x53')]<0x1){throw new Error(_0x3441('0x54')+_0x549afb);}if(!_0x90048d[_0x3441('0x25')](_0x3441('0x55')))throw new Error(_0x3441('0x56')+_0x549afb+'\x27');if(_0x90048d[_0x3441('0x55')]!=='file')throw new Error(_0x3441('0x57')+_0x549afb+_0x3441('0x58'));if(_0x90048d[_0x3441('0x25')]('onfiles')){_0x201cf9=_0x288c0a(_0x90048d[_0x3441('0x59')]);}$(_0x3b1c23)['change'](function(_0x27ebfa){var _0x22cbf1=_0x27ebfa[_0x3441('0x5a')]['files'];var _0x3f02cf=new Upload(_0x549afb,_0x22cbf1);_0x491832(_0x3f02cf);_0x2b6a9a(_0x3f02cf);});var _0x491832=function(_0x4057b3){_0x240bb3[_0x549afb]=_0x4057b3;};var _0x2b6a9a=function(_0x2fd7d3){if(typeof _0x201cf9!=_0x3441('0x12'))_0x201cf9(_0x240bb3,{'upload':_0x2fd7d3});};}};};Hi[_0x3441('0x1')]['app']=![];Hi[_0x3441('0x1')][_0x3441('0x5b')]=function(){var _0x44a5d4=[];var _0x17e10e=![];if(Array[_0x3441('0x5c')](Hi[_0x3441('0x2')][_0x3441('0x7')][_0x3441('0x5d')])){_0x44a5d4=Hi[_0x3441('0x2')][_0x3441('0x7')][_0x3441('0x5d')];Log[_0x3441('0x5e')](_0x3441('0x5f'));Log[_0x3441('0x5e')](_0x44a5d4);}else{Log[_0x3441('0x5e')](_0x3441('0x60'));}if(typeof Hi[_0x3441('0x2')][_0x3441('0x7')][_0x3441('0x5b')]==_0x3441('0x3c')){_0x17e10e=Hi[_0x3441('0x2')]['angular'][_0x3441('0x5b')];}else{Log['debug'](_0x3441('0x61'));}if(Array[_0x3441('0x5c')](_0x44a5d4)){if(_0x44a5d4[_0x3441('0x62')]('ng')==-0x1)_0x44a5d4['push']('ng');}else{throw new Error(_0x3441('0x63'));}if(_0x44a5d4[_0x3441('0x53')]==0x0)_0x44a5d4[_0x3441('0x64')]('ng');var _0x5cfa1c=angular[_0x3441('0x65')]('hi',_0x44a5d4);if(typeof AppHooks!=_0x3441('0x12'))AppHooks[_0x3441('0x66')](_0x5cfa1c);var _0x216e6b=angular[_0x3441('0x65')](_0x3441('0x67'),['ng']);if(typeof AppHooks!=_0x3441('0x12'))AppHooks['fireSetupApp'](_0x216e6b);var _0x2dcc63=new Hi[(_0x3441('0x1'))]['directivesDefiner'](_0x5cfa1c);_0x2dcc63[_0x3441('0x4d')]();var _0x361ed2=function(_0x46e9ea,_0x94c322){if(typeof sessionStorage!=_0x3441('0x12')){if(typeof App=='undefined'){Hi[_0x3441('0x8')][_0x3441('0x9')]['cache']['on']=![];}else{var _0xfff8a0=![];if(sessionStorage[_0x3441('0x25')](_0x3441('0x68')+App[_0x3441('0x69')]))_0xfff8a0=sessionStorage['deploy-id-'+App[_0x3441('0x69')]];else{Hi[_0x3441('0x8')][_0x3441('0x9')][_0x3441('0x6a')][_0x3441('0x6b')]();}if(_0xfff8a0){if(_0xfff8a0!=App['deployId']){Hi['$ui']['html']['cache'][_0x3441('0x6b')]();}}sessionStorage['deploy-id-'+App[_0x3441('0x69')]]=App[_0x3441('0x6c')];if(App[_0x3441('0x6d')]=='DEVELOPMENT')Hi[_0x3441('0x8')][_0x3441('0x9')][_0x3441('0x6a')]['on']=![];}}Hi[_0x3441('0x6e')][_0x3441('0x6f')]();Hi[_0x3441('0x1')]['$injector']=angular[_0x3441('0x70')](_0x44a5d4);Hi[_0x3441('0x1')][_0x3441('0x71')]=_0x94c322;__=_0x46e9ea;Hi['$template']=_0x46e9ea;__[_0x3441('0x72')]=![];for(var _0xb8b76a in Hi[_0x3441('0x8')]['js'][_0x3441('0x73')]){var _0x598653=Hi[_0x3441('0x8')]['js']['root'][_0xb8b76a];__[_0xb8b76a]=_0x598653;}if(__[_0x3441('0x25')](_0x3441('0x74'))){if(typeof __[_0x3441('0x74')]==_0x3441('0x3c')){__['$init'][_0x3441('0x3d')](__);}}Hi[_0x3441('0x1')][_0x3441('0x75')]=angular[_0x3441('0x70')]([_0x3441('0x67')][_0x3441('0x76')](_0x44a5d4));if(typeof App!=_0x3441('0x12')){if(typeof _0x17e10e==_0x3441('0x3c')){Hi[_0x3441('0x1')][_0x3441('0x75')][_0x3441('0x77')](_0x17e10e);}if(typeof $startup!=_0x3441('0x3c')){throw new Error(_0x3441('0x78'));}setTimeout(function(){$startup();},0x5);}};_0x361ed2[_0x3441('0x79')]=[_0x3441('0x7a'),_0x3441('0x71')];_0x5cfa1c[_0x3441('0x5b')](_0x361ed2);Hi['$angular'][_0x3441('0x67')]=_0x5cfa1c;};Hi[_0x3441('0x8')]['html'][_0x3441('0x6a')]={'on':!![]};Hi[_0x3441('0x8')][_0x3441('0x9')][_0x3441('0x6a')][_0x3441('0x7b')]=function(){try{if(sessionStorage){if(!sessionStorage[_0x3441('0x7c')]){sessionStorage[_0x3441('0x7c')]=JSON[_0x3441('0x7d')](new Array());}}}catch(_0x273099){return![];}};Hi[_0x3441('0x8')][_0x3441('0x9')]['prepareView']=function(_0x3f54ed){var _0x33b33f=![];if(typeof _0x3f54ed===_0x3441('0x3b')){_0x33b33f=Hi[_0x3441('0xa')][_0x3441('0x7e')](_0x3f54ed);}else{_0x33b33f=_0x3f54ed;}if(_0x33b33f){var _0x4775fa=Hi[_0x3441('0xa')][_0x3441('0x7f')](_0x33b33f['controller'],_0x33b33f[_0x3441('0x29')]);var _0x489b41=Hi[_0x3441('0xa')][_0x3441('0x80')](_0x33b33f);if(Hi[_0x3441('0x8')][_0x3441('0x9')]['cache']['stores'](_0x489b41)){return;}$[_0x3441('0x81')](_0x489b41,function(_0xf3f2d2){try{var _0x1fbbbd=JSON['parse'](_0xf3f2d2);var _0x1dd2a9=_0x1fbbbd[_0x3441('0x22')];Hi[_0x3441('0x8')][_0x3441('0x9')][_0x3441('0x6a')][_0x3441('0x82')](_0x489b41,_0x1dd2a9);}catch(_0x1a1f10){}});}};Hi[_0x3441('0x8')][_0x3441('0x9')][_0x3441('0x6a')][_0x3441('0x83')]=function(){return _0x3441('0x84')+App['base64_url'];};Hi[_0x3441('0x8')][_0x3441('0x9')][_0x3441('0x6a')][_0x3441('0x85')]=function(_0x384fa1){if(typeof localStorage!=_0x3441('0x12')&&typeof _0x384fa1==_0x3441('0x4e')){localStorage[Hi[_0x3441('0x8')]['html']['cache']['getStorageKey']()]=JSON[_0x3441('0x7d')](_0x384fa1);}};Hi['$ui']['html'][_0x3441('0x6a')][_0x3441('0x86')]=function(){var _0x131b30={};if(typeof localStorage!=_0x3441('0x12')){var _0x4c845f=Hi['$ui'][_0x3441('0x9')][_0x3441('0x6a')]['getStorageKey']();if(localStorage[_0x3441('0x25')](_0x4c845f)){try{_0x131b30=JSON[_0x3441('0x87')](localStorage[_0x4c845f]);}catch(_0x126b0b){Log[_0x3441('0x5e')]('There\x20was\x20an\x20error\x20when\x20trying\x20to\x20parse\x20views\x20cache\x20JSON');}}}return _0x131b30;};Hi[_0x3441('0x8')][_0x3441('0x9')][_0x3441('0x6a')]['destroy']=function(){if(typeof localStorage!=_0x3441('0x12')){Hi['$ui'][_0x3441('0x9')][_0x3441('0x6a')][_0x3441('0x85')]({});}};Hi['$ui'][_0x3441('0x9')][_0x3441('0x6a')][_0x3441('0x82')]=function(_0x6980e7,_0x1db124){if(!Hi[_0x3441('0x8')][_0x3441('0x9')][_0x3441('0x6a')]['on']){return![];}var _0x2e24e9=$(_0x3441('0x88'));_0x2e24e9[_0x3441('0x9')](_0x1db124);$(_0x2e24e9)[_0x3441('0x89')](_0x3441('0x8a'))[_0x3441('0x8b')]();var _0x6a3fbe=$(_0x2e24e9)[_0x3441('0x9')]();var _0x4c56f5=Hi['$ui']['html'][_0x3441('0x6a')][_0x3441('0x86')]();_0x4c56f5[Hi[_0x3441('0x8')][_0x3441('0x9')][_0x3441('0x6a')][_0x3441('0x8c')](_0x6980e7)]=_0x6a3fbe;Hi[_0x3441('0x8')][_0x3441('0x9')][_0x3441('0x6a')][_0x3441('0x85')](_0x4c56f5);Log['debug'](_0x3441('0x8d')+_0x6980e7+'>');};Hi[_0x3441('0x8')][_0x3441('0x9')]['cache'][_0x3441('0x8c')]=function(_0x5e6aa9){var _0xb9be90=_0x5e6aa9[_0x3441('0x62')]('?');if(_0xb9be90!=-0x1){return _0x5e6aa9[_0x3441('0x8e')](0x0,_0xb9be90);}return _0x5e6aa9;};Hi[_0x3441('0x8')][_0x3441('0x9')][_0x3441('0x6a')][_0x3441('0x8f')]=function(_0x15e3e3){if(!Hi[_0x3441('0x8')][_0x3441('0x9')][_0x3441('0x6a')]['on']){return![];}var _0x5eba59=Hi[_0x3441('0x8')][_0x3441('0x9')][_0x3441('0x6a')][_0x3441('0x86')]();return _0x5eba59[_0x3441('0x25')](Hi[_0x3441('0x8')][_0x3441('0x9')][_0x3441('0x6a')]['normalizePath'](_0x15e3e3));};Hi[_0x3441('0x8')][_0x3441('0x9')][_0x3441('0x6a')]['fetch']=function(_0x425cd2){var _0x9128d8=Hi[_0x3441('0x8')][_0x3441('0x9')][_0x3441('0x6a')][_0x3441('0x86')]();return _0x9128d8[Hi[_0x3441('0x8')][_0x3441('0x9')][_0x3441('0x6a')][_0x3441('0x8c')](_0x425cd2)];};Hi[_0x3441('0x8')][_0x3441('0x9')][_0x3441('0x90')]=function(_0x3922ec){$(_0x3441('0x91'))[_0x3441('0x9')](_0x3922ec);};Hi['$ui'][_0x3441('0x9')][_0x3441('0x92')]=function(){return $(_0x3441('0x91'))[_0x3441('0x9')]();};Hi[_0x3441('0x8')]['js'][_0x3441('0x93')]={};Hi[_0x3441('0x8')]['js']['loadedControllers']=[];Hi[_0x3441('0x8')]['js']['setLoadedController']=function(_0x66f80a,_0x3b002e){Hi[_0x3441('0x8')]['js'][_0x3441('0x94')][_0x3441('0x64')](_0x66f80a+'/'+_0x3b002e);};Hi[_0x3441('0x8')]['js'][_0x3441('0x95')]=function(_0x3665da,_0x1b34c3){var _0x50cdb5=_0x3665da+'/'+_0x1b34c3;var _0x4fa59b=Hi[_0x3441('0x8')]['js'][_0x3441('0x94')][_0x3441('0x62')](_0x50cdb5);if(_0x4fa59b==-0x1){return![];}return!![];};Hi[_0x3441('0x8')]['js']['templatesParent']={};Hi[_0x3441('0x8')]['js'][_0x3441('0x96')]=function(_0x279c4f,_0x2cc03e){var _0x8d2345=Hi[_0x3441('0xa')][_0x3441('0x7f')](_0x279c4f,_0x2cc03e);if(Hi['$ui']['js'][_0x3441('0x93')][_0x3441('0x25')](_0x8d2345)){var _0x4a7fb2=Hi[_0x3441('0x8')]['js'][_0x3441('0x93')][_0x8d2345];return _0x4a7fb2;}else{return![];}};Hi[_0x3441('0x8')]['js'][_0x3441('0x97')]=function(_0x360e51,_0x168d93,_0x1b4c48){var _0x353764=Hi[_0x3441('0xa')][_0x3441('0x7f')](_0x360e51,_0x168d93);Hi[_0x3441('0x8')]['js']['controllers'][_0x353764]=_0x1b4c48;};Hi[_0x3441('0x8')]['js']['createViewScope']=function(_0x1cea4a,_0x20b184,_0x3b73cb,_0x18cbfc,_0x56fec3,_0x33f838,_0x59e5c5){var _0x3c414d=Hi[_0x3441('0x8')]['js'][_0x3441('0x96')](_0x1cea4a[_0x3441('0x23')],_0x1cea4a[_0x3441('0x29')]);if(typeof _0x3c414d=='undefined'){throw new Error('No\x20controller\x20defined.\x20Cant\x20prepare\x20context');return;}if(typeof _0x3c414d!=_0x3441('0x3c')){throw new Error('Invalid\x20view\x20controller');}var _0x2ba6c2=![];if(_0x18cbfc){if(typeof _0x33f838!=_0x3441('0x12')){_0x2ba6c2=_0x33f838[_0x3441('0x98')](![]);}else{_0x2ba6c2=__[_0x3441('0x98')](![]);}}else{if(!__[_0x3441('0x72')]&&__['hasOwnProperty'](_0x3441('0x99'))){if(typeof __[_0x3441('0x99')]==_0x3441('0x3c')){__['$startedUp']=!![];__[_0x3441('0x99')]['call'](__,{'controller':_0x1cea4a[_0x3441('0x23')],'action':_0x1cea4a[_0x3441('0x29')]});}}_0x2ba6c2=__[_0x3441('0x98')](!![]);}var _0x4ede20=Hi[_0x3441('0x1')][_0x3441('0x75')];var _0x2e7b5b={'_':_0x2ba6c2,'__':__,'$scope':_0x2ba6c2,'$rootScope':__,'template':__};var _0x1202ee=_0x1cea4a[_0x3441('0x23')]+'/'+_0x1cea4a[_0x3441('0x29')];if(typeof AppHooks!='undefined')AppHooks[_0x3441('0x9a')](_0x1202ee,_0x2ba6c2,_0x2e7b5b);_0x4ede20['invoke'](_0x3c414d,![],_0x2e7b5b);Hi[_0x3441('0x8')]['js'][_0x3441('0x9b')](_0x2ba6c2,_0x20b184);if(_0x2ba6c2['hasOwnProperty'](_0x3441('0x9c'))){var _0x110b84=_0x2ba6c2[_0x3441('0x9c')][_0x3441('0x3d')](_0x2ba6c2,_0x3b73cb);if(typeof _0x110b84!=_0x3441('0x12')){_0x3b73cb=_0x110b84;}}if(__[_0x3441('0x25')]('$onPreLoad')){if(typeof __[_0x3441('0x9d')]=='function'){var _0x110b84=__[_0x3441('0x9d')][_0x3441('0x3d')](__,_0x2ba6c2[_0x3441('0x9e')],_0x2ba6c2,_0x3b73cb);if(typeof _0x110b84!='undefined'){_0x3b73cb=_0x110b84;}}}var _0x53b1a1=Hi[_0x3441('0x1')][_0x3441('0x71')](_0x3b73cb);var _0x3473c8=_0x53b1a1(_0x2ba6c2);var _0x5d71e2=function(){var _0x439a13=Hi[_0x3441('0xa')][_0x3441('0x80')](_0x20b184[_0x3441('0x9e')]);var _0x3bc2fb=Hi[_0x3441('0xa')]['setActivePath'](_0x439a13);Hi[_0x3441('0xa')][_0x3441('0x9f')](_0x439a13,JSON[_0x3441('0x7d')]({'index':_0x3bc2fb}));};if(_0x56fec3&&_0x18cbfc){_0x56fec3['element']=_0x3473c8;_0x56fec3[_0x3441('0x24')]=_0x2ba6c2;_0x56fec3[_0x3441('0x22')]=_0x3b73cb;if(typeof _0x2ba6c2[_0x3441('0xa0')]!=_0x3441('0x12')){_0x2ba6c2['$postLoad'][_0x3441('0x3d')](_0x2ba6c2);}var _0x2f0341=Hi[_0x3441('0x2')][_0x3441('0x3')][_0x3441('0x4')];if(_0x18cbfc)_0x2f0341=![];if(_0x2f0341){_0x5d71e2();}return _0x56fec3;}var _0x432176={};_0x432176[_0x3441('0xa1')]=function(){if(__[_0x3441('0x25')](_0x3441('0xa2'))&&__[_0x3441('0x25')]('$activeView')){if(typeof __['$onClose']==_0x3441('0x3c')){__[_0x3441('0xa2')][_0x3441('0x3d')](__,__[_0x3441('0xa3')][_0x3441('0x9e')]);}}var _0x41c55c=__[_0x3441('0x25')]('$activeView');__['$activeView']=_0x2ba6c2;Hi[_0x3441('0xa4')]=_0x2ba6c2;$(_0x3441('0xa5'))[_0x3441('0x9')]('');$(_0x3441('0xa5'))['append'](_0x3473c8);var _0x2f0341=Hi[_0x3441('0x2')]['nav'][_0x3441('0x4')];if(_0x2f0341&&_0x41c55c){_0x5d71e2();}Hi['$nav'][_0x3441('0xa6')]=![];_0x2ba6c2[_0x3441('0xa7')](function(){if(typeof _0x2ba6c2[_0x3441('0xa0')]!=_0x3441('0x12')){_0x2ba6c2[_0x3441('0xa0')][_0x3441('0x3d')](_0x2ba6c2);}if(__[_0x3441('0x25')](_0x3441('0xa8'))){if(typeof __[_0x3441('0xa8')]==_0x3441('0x3c')){__[_0x3441('0xa8')]['call'](__,_0x2ba6c2[_0x3441('0x9e')],_0x2ba6c2);}}if(__[_0x3441('0x25')](_0x3441('0xa9'))&&_0x41c55c){if(typeof __['$onRedirectFinish']==_0x3441('0x3c')){__[_0x3441('0xa9')][_0x3441('0x3d')](__);}}});};if(__[_0x3441('0x25')]('$activeView')){if(typeof __[_0x3441('0xa3')]==_0x3441('0x4e')){if(__['$activeView']['hasOwnProperty'](_0x3441('0xaa'))&&__['$activeView'][_0x3441('0x25')]('$close')){if(__[_0x3441('0xa3')][_0x3441('0xaa')]){__[_0x3441('0xa3')][_0x3441('0xab')][_0x3441('0x3d')](__[_0x3441('0xa3')],_0x432176);}else{_0x432176[_0x3441('0xa1')]();}}else{if(typeof __[_0x3441('0xa3')][_0x3441('0xab')]==_0x3441('0x3c')){__[_0x3441('0xa3')][_0x3441('0xab')]['call'](__[_0x3441('0xa3')]);_0x432176['proceed']();}else{_0x432176[_0x3441('0xa1')]();}}Hi[_0x3441('0xa')][_0x3441('0xa6')]=![];}else{throw new Error(_0x3441('0xac'));}}else{_0x432176[_0x3441('0xa1')]();}};Hi['$ui']['js'][_0x3441('0xad')]={};Hi[_0x3441('0x8')]['js'][_0x3441('0xad')][_0x3441('0xae')]={};Hi[_0x3441('0x8')]['js'][_0x3441('0xad')][_0x3441('0xaf')]=function(_0x42e51c,_0x4ba143){Hi[_0x3441('0x8')]['js'][_0x3441('0xad')][_0x3441('0xae')][_0x42e51c]=_0x4ba143;};Hi[_0x3441('0x8')]['js'][_0x3441('0xad')][_0x3441('0xaf')](_0x3441('0xb0'),function(_0x165235){if(_0x165235[_0x3441('0x25')](_0x3441('0xb1'))){document[_0x3441('0xb2')][_0x3441('0xb3')](_0x165235[_0x3441('0xb1')]);}else{document[_0x3441('0xb2')][_0x3441('0xb4')]();}return!![];});Hi['$ui']['js'][_0x3441('0xad')]['set'](_0x3441('0xb5'),function(_0x1baf5e){if(_0x1baf5e[_0x3441('0x25')]('value'))Hi['$nav'][_0x3441('0x9f')](_0x1baf5e[_0x3441('0xb6')],{});});Hi[_0x3441('0x8')]['js']['commands'][_0x3441('0xaf')](_0x3441('0xb7'),function(_0x43a97b){Hi[_0x3441('0x8')][_0x3441('0x9')][_0x3441('0x6a')][_0x3441('0x6b')]();document[_0x3441('0xb2')][_0x3441('0xb4')]();});Hi['$ui']['js'][_0x3441('0xad')][_0x3441('0xaf')](_0x3441('0xb8'),function(_0xe060ca){if(_0xe060ca[_0x3441('0x25')](_0x3441('0xb1')))Hi[_0x3441('0xb9')](_0xe060ca[_0x3441('0xb1')]);});Hi[_0x3441('0x8')]['js']['commands'][_0x3441('0x5b')]=function(_0x3ff0c9,_0xdd5c95){if(Hi[_0x3441('0x8')]['js']['commands']['all'][_0x3441('0x25')](_0x3ff0c9)){var _0x1fac25=Hi[_0x3441('0x8')]['js']['commands'][_0x3441('0xae')][_0x3ff0c9];return _0x1fac25(_0xdd5c95);}return![];};Hi[_0x3441('0x8')]['js'][_0x3441('0x9b')]=function(_0x314912,_0x4c4aff){var _0x27a2d4={};if(_0x4c4aff['$root']){_0x27a2d4=_0x4c4aff[_0x3441('0xba')];}if(_0x4c4aff[_0x3441('0x25')](_0x3441('0xbb'))){var _0x11998b=_0x4c4aff[_0x3441('0xbb')];Hi[_0x3441('0x6e')]['reset']();Hi[_0x3441('0x6e')][_0x3441('0xbc')](_0x11998b);delete _0x4c4aff[_0x3441('0xbb')];}for(var _0x408f34 in _0x27a2d4){var _0x459dfb=_0x27a2d4[_0x408f34];__[_0x408f34]=_0x459dfb;}__[_0x3441('0xbd')]=__t;for(var _0x37ae59 in _0x4c4aff){var _0x16f9c9=_0x4c4aff[_0x37ae59];_0x314912[_0x37ae59]=_0x16f9c9;}};Hi[_0x3441('0x8')]['js']['root']={};Hi[_0x3441('0x8')]['js']['component']=function(_0x2dafe4,_0x4c4204){Hi[_0x3441('0x1')][_0x3441('0x2e')][_0x2dafe4]=_0x4c4204;};Hi[_0x3441('0xb')][_0x3441('0xbe')]=function(_0x28dcbb){var _0x47e602=angular['toJson'](_0x28dcbb);return JSON[_0x3441('0x87')](_0x47e602);};Hi[_0x3441('0xb')][_0x3441('0x41')]=function(){return angular['copy']({});};Hi[_0x3441('0xb')][_0x3441('0xbf')]=function(_0x35fc01){var _0x3d5b15=_0x35fc01[_0x3441('0x8e')](0x0,0x1);return _0x3d5b15[_0x3441('0xc0')]()+_0x35fc01[_0x3441('0x8e')](0x1);};Hi[_0x3441('0xb')]['lcfirst']=function(_0x3655e7){var _0x1f0ca8=_0x3655e7[_0x3441('0x8e')](0x0,0x1);return _0x1f0ca8[_0x3441('0xc1')]()+_0x3655e7[_0x3441('0x8e')](0x1);};Hi[_0x3441('0xb')]['URLToJson']=function(_0x4271f4){var _0x32f03d=_0x4271f4[_0x3441('0xc2')]('&');var _0x3fc75b={};for(var _0x31fda0 in _0x32f03d){var _0x21b631=_0x32f03d[_0x31fda0];if(typeof _0x21b631!='string')continue;var _0xd725ff=_0x21b631['indexOf']('=');var _0x280370=_0x21b631[_0x3441('0xc3')](0x0,_0xd725ff);var _0x2dd36e=_0x21b631['substring'](_0xd725ff+0x1,_0x21b631[_0x3441('0x53')]);_0x3fc75b[_0x280370]=_0x2dd36e;}return _0x3fc75b;};Hi[_0x3441('0xb')]['encodeGetParams']=function(_0x54b21c){var _0x16fb65='';var _0x405e59=0x0;for(var _0x58a472 in _0x54b21c){var _0x2a5f46=_0x54b21c[_0x58a472];if(_0x405e59!==0x0){_0x16fb65=_0x16fb65+'&';}_0x16fb65=_0x16fb65+_0x58a472+'='+_0x2a5f46;_0x405e59++;}return encodeURI(_0x16fb65);};Hi[_0x3441('0xb')][_0x3441('0xc4')]=function(_0x57a502,_0x3101cd){var _0x11d21f=[];for(var _0x503a10 in _0x3101cd){if(_0x503a10[_0x3441('0x62')](_0x57a502)>-0x1){var _0x41ae8c=_0x503a10[_0x3441('0xb3')](_0x57a502,'')[_0x3441('0x52')]();if(_0x41ae8c!=''){_0x11d21f['push'](Hi[_0x3441('0xb')][_0x3441('0xc5')](_0x41ae8c));}}}return _0x11d21f;};Hi[_0x3441('0xb')]['camelCase']=function(_0x47481c){var _0x1b9e62='';_0x47481c['forEach'](function(_0x58b7fd,_0x4eadb3){if(_0x4eadb3==0x0){_0x1b9e62=_0x58b7fd;}else{var _0x43537d=_0x58b7fd[0x0][_0x3441('0xc0')]();var _0x4b8fc8=_0x58b7fd[_0x3441('0x8e')](0x1,_0x58b7fd['length']-0x1);var _0xe68b5a=_0x43537d+_0x4b8fc8;_0x1b9e62=_0x1b9e62+_0xe68b5a;}});return _0x1b9e62;};Hi['$util'][_0x3441('0xc6')]=function(_0x264946,_0x7b8830){var _0x169517=new Array();var _0x47f928='';if(_0x7b8830['trim']()==''){return[];}for(var _0x4a33ac in _0x7b8830){var _0x5bee9d=_0x7b8830[_0x4a33ac];if(typeof _0x5bee9d!=_0x3441('0x3b')){continue;}if(_0x5bee9d==_0x264946){if(_0x47f928!=''){_0x169517[_0x3441('0x64')](_0x47f928);_0x47f928='';}}else{_0x47f928=_0x47f928+_0x5bee9d;}}if(_0x47f928!=''&&_0x169517[_0x3441('0x53')]==0x0){_0x169517['push'](_0x47f928);}else if(_0x169517[_0x3441('0x53')]>0x0){if(_0x169517[_0x169517[_0x3441('0x53')]-0x1][_0x3441('0xc7')]()!=_0x47f928){_0x169517[_0x3441('0x64')](_0x47f928);}}return _0x169517;};Hi['$nav'][_0x3441('0xc8')]=function(_0x1ecd4e,_0x522bb4){var _0x32e512=_0x3441('0xc9')+_0x522bb4+_0x3441('0xca');$('#'+_0x1ecd4e)['attr'](_0x3441('0xcb'),_0x32e512);};Hi['$nav'][_0x3441('0x49')]=function(_0x178f65,_0x4b2006,_0x19fa1c){var _0x22fee5='Hi.$nav.navigateTo(\x27'+_0x4b2006+_0x3441('0xca');if(_0x19fa1c){if(typeof _0x178f65===_0x3441('0x3b')){$('#'+_0x178f65)[_0x3441('0x49')](_0x19fa1c,function(){eval(_0x22fee5);});}else{$(_0x178f65)['bind'](_0x19fa1c,function(){eval(_0x22fee5);});}}else{$('#'+_0x178f65)[_0x3441('0x35')](_0x3441('0xcb'),_0x22fee5);}};Hi[_0x3441('0xa')][_0x3441('0xcc')]=function(_0x1fff39,_0x5a00dc){var _0x1e7ee8={'controller':_0x1fff39,'action':_0x5a00dc};return _0x1e7ee8;};Hi[_0x3441('0xa')]['getTextViewPath']=function(_0x1c867f,_0x11c9e0){return _0x1c867f+'_'+_0x11c9e0;};Hi[_0x3441('0xa')][_0x3441('0xcd')]=function(_0x2092da){Hi[_0x3441('0xa')]['isGoingBack']=!![];Hi[_0x3441('0xa')][_0x3441('0xce')](_0x2092da,undefined);};Hi[_0x3441('0xa')][_0x3441('0xcf')]=[];Hi[_0x3441('0xa')][_0x3441('0xd0')]=![];Hi[_0x3441('0xa')][_0x3441('0xa6')]=![];Hi['$nav']['namedRoutes']={};Hi[_0x3441('0xa')][_0x3441('0xd1')]=function(_0x4d9776,_0x1ed031){if(!Hi['$nav']['hasOwnProperty'](_0x4d9776)){Hi[_0x3441('0xa')][_0x3441('0xd2')][_0x4d9776]=_0x1ed031;return _0x1ed031;}return![];};Hi[_0x3441('0xa')][_0x3441('0x7e')]=function(_0x4c88bf){if(typeof _0x4c88bf===_0x3441('0x3b')){if(Hi[_0x3441('0xa')][_0x3441('0xd2')][_0x3441('0x25')](_0x4c88bf)){return Hi['$nav'][_0x3441('0xd2')][_0x4c88bf];}return![];}};Hi[_0x3441('0xa')][_0x3441('0xd3')]=function(_0x50f41d){Hi['$nav'][_0x3441('0xcf')][_0x3441('0x64')](_0x50f41d);return Hi[_0x3441('0xa')][_0x3441('0xcf')][_0x3441('0x53')]-0x1;};Hi['$nav'][_0x3441('0xd4')]=function(_0x9edb6f){if(Hi[_0x3441('0xa')]['history'][_0x3441('0x53')]>0x0){var _0x4b4b35=Hi[_0x3441('0xa')][_0x3441('0xcf')][0x0];Hi['$nav']['history'][_0x3441('0xd5')](_0x4b4b35);return _0x4b4b35;}return![];};Hi[_0x3441('0xa')][_0x3441('0xd6')]=![];Hi[_0x3441('0xa')][_0x3441('0xce')]=function(_0x44c05e,_0x19994f,_0x40d4d9,_0x197984,_0x497333,_0x426bd7){if(Hi[_0x3441('0xa')][_0x3441('0xd6')]){if(Hi[_0x3441('0xa')]['active'][_0x3441('0x25')](_0x3441('0xd7'))){Hi[_0x3441('0xa')][_0x3441('0xd6')]['abort']();Hi[_0x3441('0xa')][_0x3441('0xd6')]=![];}}Hi['$nav']['last']={'name':_0x44c05e};var _0x4856cf=Hi[_0x3441('0xa')][_0x3441('0x1f')](_0x44c05e);_0x4856cf=JSON['parse'](JSON['stringify'](_0x4856cf));if(!_0x40d4d9){if(__[_0x3441('0x25')](_0x3441('0xd8'))){if(typeof __[_0x3441('0xd8')]=='function'){__['$onRedirectStart'][_0x3441('0x3d')](__,_0x4856cf);}}}if(!_0x4856cf){return![];}var _0x588701=Hi['$nav'][_0x3441('0x80')](_0x4856cf);var _0x49f5ba=Hi[_0x3441('0xa')]['getCachingURL'](_0x4856cf);if(_0x4856cf[_0x3441('0x81')]){_0x19994f=_0x4856cf[_0x3441('0x81')];}if(_0x19994f){_0x4856cf['get']=_0x19994f;}var _0x37b5bb=Hi[_0x3441('0xa')]['getURL'](_0x4856cf);if(!_0x4856cf[_0x3441('0xd9')]){var _0x4be053=![];var _0x2da27f={};if(Hi[_0x3441('0x8')][_0x3441('0x9')]['cache']['stores'](_0x49f5ba)){_0x4be053=Hi[_0x3441('0x8')][_0x3441('0x9')][_0x3441('0x6a')]['fetch'](_0x49f5ba);_0x2da27f[_0x3441('0xda')]='true';}if(Hi[_0x3441('0x8')]['js'][_0x3441('0x95')](_0x4856cf['controller'],_0x4856cf[_0x3441('0x29')])){_0x2da27f[_0x3441('0xdb')]=_0x3441('0xdc');}if(_0x40d4d9){_0x4856cf[_0x3441('0xdd')]=!![];}Hi[_0x3441('0xa')]['requestData'](_0x4856cf,function(_0x3b895d){if(_0x3b895d[_0x3441('0xde')]!=0xc8){if(typeof _0x3b895d==_0x3441('0x3b')&&_0x40d4d9==![]){document['write'](_0x3b895d);return;}if(_0x40d4d9){if(typeof _0x426bd7[_0x3441('0x3e')]=='function')_0x426bd7[_0x3441('0x3e')]();return;}throw new Error(_0x3441('0xdf'));return;}var _0x36f9f1=_0x3b895d[_0x3441('0xe0')];if(_0x36f9f1[_0x3441('0x25')](_0x3441('0xe1'))){var _0x53f247=_0x36f9f1['$invoke'];for(var _0x37d5a6 in _0x53f247){var _0x58c422=_0x53f247[_0x37d5a6];if(Hi[_0x3441('0x8')]['js'][_0x3441('0xad')][_0x3441('0x5b')](_0x37d5a6,_0x58c422)){return null;}}}var _0x34da8d=_0x3b895d[_0x3441('0xe2')];if(_0x3b895d['controller']){Hi[_0x3441('0xa')]['setNextControllerInfo'](_0x4856cf[_0x3441('0x23')],_0x4856cf[_0x3441('0x29')]);eval(_0x3b895d[_0x3441('0x23')]);Hi['$ui']['js']['setLoadedController'](_0x4856cf[_0x3441('0x23')],_0x4856cf[_0x3441('0x29')]);}if(!Hi[_0x3441('0x8')][_0x3441('0x9')][_0x3441('0x6a')][_0x3441('0x8f')](_0x49f5ba)){Hi[_0x3441('0x8')][_0x3441('0x9')][_0x3441('0x6a')]['storeView'](_0x49f5ba,_0x34da8d);}else{_0x34da8d=Hi['$ui'][_0x3441('0x9')][_0x3441('0x6a')][_0x3441('0xe3')](_0x49f5ba);}var _0x54d810=_0x4856cf[_0x3441('0x23')];var _0x430c81=_0x4856cf[_0x3441('0x29')];var _0x4f001a=Hi[_0x3441('0xa')][_0x3441('0xcc')](_0x54d810,_0x430c81);_0x36f9f1[_0x3441('0x9e')]=_0x4856cf;var _0x295b37={};var _0xf12a56=Hi[_0x3441('0x8')]['js'][_0x3441('0xe4')](_0x4f001a,_0x36f9f1,_0x34da8d,_0x40d4d9,_0x295b37,_0x497333,_0x426bd7);if(_0x40d4d9){if(typeof _0x197984==_0x3441('0x3c')){_0x197984[_0x3441('0x3d')]({},_0xf12a56);}}},_0x2da27f);}};Hi['$nav'][_0x3441('0x80')]=function(_0x5aa4e7,_0x5cdea7){var _0x1e2fe9='';if(typeof App!=_0x3441('0x12'))_0x1e2fe9=App[_0x3441('0xe5')];if(_0x5aa4e7[_0x3441('0x23')]&&!_0x5aa4e7[_0x3441('0x23')]){_0x1e2fe9=_0x1e2fe9+_0x5aa4e7[_0x3441('0x23')]+'/';}else if(_0x5aa4e7[_0x3441('0x23')]&&!_0x5aa4e7[_0x3441('0x23')]){_0x1e2fe9=_0x1e2fe9+_0x5aa4e7[_0x3441('0x23')]+'/';}else if(_0x5aa4e7[_0x3441('0x23')]&&_0x5aa4e7[_0x3441('0x23')]){_0x1e2fe9=_0x1e2fe9+_0x5aa4e7[_0x3441('0x23')]+'/';}if(_0x5aa4e7['action']){_0x1e2fe9=_0x1e2fe9+_0x5aa4e7[_0x3441('0x29')];}if(_0x5aa4e7['get']){if(typeof _0x5aa4e7['get']===_0x3441('0x3b')){_0x1e2fe9=_0x1e2fe9+'?'+_0x5aa4e7[_0x3441('0x81')];}else{var _0x1527d0=Hi[_0x3441('0xb')][_0x3441('0xe6')](_0x5aa4e7[_0x3441('0x81')]);_0x1e2fe9=_0x1e2fe9+'?'+_0x1527d0;}}return _0x1e2fe9;};Hi[_0x3441('0xa')]['getCachingURL']=function(_0x379676,_0x478c92){var _0x3d3ac0='';if(typeof App!=_0x3441('0x12'))_0x3d3ac0=App[_0x3441('0x69')];if(_0x379676[_0x3441('0x23')]&&!_0x379676[_0x3441('0x23')]){_0x3d3ac0=_0x3d3ac0+_0x379676['controller']+'/';}else if(_0x379676['controller']&&!_0x379676[_0x3441('0x23')]){_0x3d3ac0=_0x3d3ac0+_0x379676['controller']+'/';}else if(_0x379676[_0x3441('0x23')]&&_0x379676['controller']){_0x3d3ac0=_0x3d3ac0+_0x379676[_0x3441('0x23')]+'/';}if(_0x379676[_0x3441('0x29')]){_0x3d3ac0=_0x3d3ac0+_0x379676[_0x3441('0x29')];}var _0x17f94f={};if(_0x379676[_0x3441('0x81')])_0x17f94f=Hi[_0x3441('0xb')][_0x3441('0xe7')](_0x379676[_0x3441('0x81')]);if(_0x17f94f['hasOwnProperty']('$')){var _0x53d005=_0x17f94f['$'];_0x3d3ac0=_0x3d3ac0+'.'+_0x53d005;}return _0x3d3ac0;};Hi[_0x3441('0xa')][_0x3441('0xe8')]=![];Hi[_0x3441('0xa')][_0x3441('0xe9')]=![];Hi[_0x3441('0xa')][_0x3441('0x9f')]=function(_0x166459,_0x40f09e){Hi[_0x3441('0xa')][_0x3441('0xe8')]=_0x166459;Hi[_0x3441('0xa')][_0x3441('0xe9')]=JSON['parse'](_0x40f09e);if(!Hi['$nav'][_0x3441('0xa6')]){window[_0x3441('0xcf')][_0x3441('0xea')](Hi[_0x3441('0xa')][_0x3441('0xe9')],'',_0x166459);}};Hi[_0x3441('0xa')][_0x3441('0xeb')]=function(){if(Hi[_0x3441('0xa')][_0x3441('0xe8')]){window[_0x3441('0xcf')][_0x3441('0xec')](Hi[_0x3441('0xa')][_0x3441('0xe9')],Hi[_0x3441('0xa')][_0x3441('0xe8')]+Math[_0x3441('0xed')](),Hi[_0x3441('0xa')][_0x3441('0xe8')]);}};Hi[_0x3441('0xa')][_0x3441('0xee')]=function(_0x394a53){return Hi[_0x3441('0xa')][_0x3441('0xe8')]===_0x394a53;};Hi[_0x3441('0xa')][_0x3441('0xef')]=function(_0x436777,_0x16b75d,_0x3fcfce){if(_0x436777){var _0x3654b7=!![];if(_0x436777[_0x3441('0x25')]('embedded')){_0x3654b7=![];delete _0x436777['dembed'];}var _0x5187c9=Hi[_0x3441('0xa')][_0x3441('0x80')](_0x436777);var _0x1e4e27=![];var _0x5cfc9f={};_0x3fcfce[_0x3441('0xf0')]=0x1;if(_0x3fcfce){_0x5cfc9f=_0x3fcfce;}var _0x40bda6=![];var _0x284b68=$[_0x3441('0xf1')]({'url':_0x5187c9,'headers':_0x3fcfce,'success':function(_0x3d6d0c){_0x16b75d(_0x3d6d0c);},'error':function(_0x2ca4d2,_0x2d864b,_0x42df5f){if(__['hasOwnProperty']('$onRedirectError')){if(typeof __[_0x3441('0xf2')]=='function')__['$onRedirectError'][_0x3441('0x3d')](__,_0x436777,_0x2ca4d2[_0x3441('0xf3')],_0x284b68);}if(__[_0x3441('0x25')](_0x3441('0xa9'))){if(typeof __['$onRedirectFinish']==_0x3441('0x3c')){__['$onRedirectFinish'][_0x3441('0x3d')](__,_0x436777);}}console[_0x3441('0x6')]('controller/action\x20HTTP\x20request\x20failed\x20:\x20'+_0x5187c9);_0x40bda6=_0x2ca4d2[_0x3441('0xf4')];},'complete':function(){Hi['$nav']['active']=![];if(typeof _0x40bda6==_0x3441('0x3b'))_0x16b75d(_0x40bda6);}});if(_0x3654b7){Hi[_0x3441('0xa')][_0x3441('0xd6')]=_0x284b68;}}};Hi[_0x3441('0xa')][_0x3441('0xf5')]={};Hi[_0x3441('0xa')][_0x3441('0xf6')]=function(_0x43940d,_0x156db6){Hi[_0x3441('0xa')][_0x3441('0xf5')]={'controller':_0x43940d,'action':_0x156db6};};Hi[_0x3441('0xa')][_0x3441('0x1f')]=function(_0x50908b){if(typeof _0x50908b===_0x3441('0x3b')){if(_0x50908b[_0x3441('0x62')]('/')!==-0x1){var _0x2395e5=_0x50908b[_0x3441('0x53')]-0x1;var _0x54f9a7=-0x1;var _0x1cd59b=![];var _0xf31f19=![];var _0x4af094='';var _0x147191='';for(var _0x583892 in _0x50908b){var _0x4177bb=_0x50908b[_0x583892];if(_0x4177bb!=='/'&&_0x4177bb!=='?'){_0x4af094=_0x4af094+_0x4177bb;}else{if(_0x54f9a7==-0x1){throw new Error(_0x3441('0xf7')+_0x50908b);}if(!_0x1cd59b&&!_0xf31f19){_0x1cd59b=_0x4af094;_0x4af094='';}else if(_0x1cd59b&&!_0xf31f19){_0xf31f19=_0x4af094;_0x4af094='';}else if(_0x1cd59b&&_0xf31f19){_0x4af094=_0x4af094+_0x4177bb;}}if(_0x583892==_0x2395e5){if(!_0xf31f19&&_0x1cd59b){_0xf31f19=_0x4af094;}else if(_0x1cd59b&&_0xf31f19){_0x147191=_0x4af094;}}_0x54f9a7=_0x583892;}if(!(_0x1cd59b&&_0xf31f19))throw new Error(_0x3441('0xf7')+_0x50908b);var _0x43b0ce={};_0x43b0ce[_0x3441('0x23')]=_0x1cd59b;_0x43b0ce[_0x3441('0x29')]=_0xf31f19;if(_0x147191){_0x43b0ce[_0x3441('0x81')]=_0x147191;}return _0x43b0ce;}return Hi['$nav'][_0x3441('0x7e')](_0x50908b);}else{if(_0x50908b[_0x3441('0x25')](_0x3441('0x23'))||_0x50908b[_0x3441('0x25')](_0x3441('0xe2'))){var _0x2cd97c=JSON[_0x3441('0x87')](JSON[_0x3441('0x7d')](_0x50908b));if(_0x50908b[_0x3441('0x25')](_0x3441('0x23'))){_0x2cd97c[_0x3441('0x23')]=_0x50908b[_0x3441('0x23')];delete _0x2cd97c[_0x3441('0x23')];}if(_0x50908b[_0x3441('0x25')](_0x3441('0xe2'))){_0x2cd97c[_0x3441('0x29')]=_0x50908b['view'];delete _0x2cd97c['view'];}return _0x2cd97c;}return _0x50908b;}};Hi[_0x3441('0xa')][_0x3441('0xf8')]=function(_0x4dead6){return Hi[_0x3441('0xa')][_0x3441('0x80')](_0x4dead6);};Hi['$frontiers']={};Hi[_0x3441('0x18')][_0x3441('0x14')]=function(){var _0x5a6397={'obj':![],'prop':![],'callback':![]};var _0x50f96b=undefined;var _0x3d97d3=undefined;var _0x21581d=undefined;var _0x3e83f3=undefined;var _0x264d47=undefined;var _0x570ba9=undefined;var _0x3f644e=undefined;var _0x3d69c1=undefined;var _0x1b3ce4=function(_0x5ef4cd){if(__[_0x3441('0x25')](_0x3441('0x18'))){if(__[_0x3441('0x18')][_0x3441('0x25')](_0x5ef4cd))return __[_0x3441('0x18')][_0x5ef4cd];}return undefined;};var _0x3af9b9=function(){if(__[_0x3441('0x25')](_0x3441('0x18'))){return __['$frontiers'];}return undefined;};this[_0x3441('0xf9')]=function(_0x50f186){_0x3d69c1=_0x50f186;};this['_setResult']=function(_0x3322fa){if(typeof _0x5a6397[_0x3441('0xfa')]==_0x3441('0x3c'))_0x5a6397['callback'][_0x3441('0x3d')](this,_0x3322fa);this[_0x3441('0xfb')]();};this[_0x3441('0xfb')]=function(){if(typeof _0x3f644e==_0x3441('0x3c'))_0x3f644e[_0x3441('0x3d')](this);else{var _0x3c8a43=_0x1b3ce4(_0x3441('0xfc'));if(typeof _0x3c8a43!=_0x3441('0x12')){_0x3c8a43[_0x3441('0x3d')](_0x3af9b9(),this);}}};this[_0x3441('0xfd')]=function(_0x197e59){if(typeof _0x570ba9==_0x3441('0x3c')){_0x570ba9['call'](this,_0x197e59);}else{var _0x2e3534=_0x1b3ce4(_0x3441('0xfe'));if(typeof _0x2e3534!=_0x3441('0x12')){_0x2e3534[_0x3441('0x3d')](_0x3af9b9(),this,_0x197e59);}}this[_0x3441('0xfb')]();};this[_0x3441('0xff')]=function(){var _0x1ea8e6=_0x1b3ce4(_0x3441('0x16'));var _0x588e5f=_0x1b3ce4('catch');if(typeof _0x3d97d3=='function'){_0x3d97d3[_0x3441('0x3d')](this);}else if(_0x1ea8e6==_0x3441('0x3c')){_0x1ea8e6['call'](_0x3af9b9(),this);}else if(typeof _0x570ba9=='function'){this[_0x3441('0xfd')](0x198);}else if(typeof _0x588e5f=='function'){_0x588e5f[_0x3441('0x3d')](_0x3af9b9(),this,0x198);}this[_0x3441('0xfb')]();};this[_0x3441('0x100')]=function(){var _0x82ec8f=_0x1b3ce4('expired');var _0x144392=_0x1b3ce4(_0x3441('0xfe'));if(typeof _0x82ec8f==_0x3441('0x3c')){_0x82ec8f[_0x3441('0x3d')](_0x3af9b9(),this);}else if(typeof _0x144392==_0x3441('0x3c')){_0x144392[_0x3441('0x3d')](_0x3af9b9(),0x1a3);}this[_0x3441('0xfb')]();};this[_0x3441('0x19')]=function(){var _0x47a488=_0x1b3ce4('forbidden');var _0x36a000=_0x1b3ce4('catch');if(typeof _0x50f96b=='function'){_0x50f96b[_0x3441('0x3d')](this);}else if(typeof _0x47a488==_0x3441('0x3c')){_0x47a488['call'](_0x3af9b9(),this);}else if(typeof _0x570ba9==_0x3441('0x3c')){this[_0x3441('0xfd')](0x193);}else if(typeof _0x36a000==_0x3441('0x3c')){_0x36a000[_0x3441('0x3d')](_0x3af9b9(),0x193);}this[_0x3441('0xfb')]();};this[_0x3441('0x101')]=function(){var _0x57b7a8=_0x1b3ce4(_0x3441('0x102'));var _0x23c2a6=_0x1b3ce4(_0x3441('0xfe'));if(typeof _0x3e83f3==_0x3441('0x3c')){_0x3e83f3[_0x3441('0x3d')](this);}else if(typeof _0x57b7a8==_0x3441('0x3c')){_0x57b7a8['call'](_0x3af9b9(),this);}else if(typeof _0x570ba9==_0x3441('0x3c')){this['_setHttpError'](0x1c4);}else if(typeof _0x23c2a6=='function'){_0x23c2a6[_0x3441('0x3d')](_0x3af9b9(),this,0x1c4);}this[_0x3441('0xfb')]();};this[_0x3441('0x103')]=function(){var _0x1d7aa1=_0x1b3ce4(_0x3441('0x1a'));var _0x37a37b=_0x1b3ce4(_0x3441('0xfe'));if(typeof _0x264d47==_0x3441('0x3c')){_0x264d47[_0x3441('0x3d')](this);}else if(typeof _0x1d7aa1==_0x3441('0x3c')){_0x1d7aa1[_0x3441('0x3d')](_0x3af9b9(),this);}else if(typeof _0x570ba9=='function'){this[_0x3441('0xfd')](0x1ad);}else if(typeof _0x37a37b==_0x3441('0x3c')){_0x570ba9['call'](_0x3af9b9(),this,0x1ad);}this[_0x3441('0xfb')]();};this[_0x3441('0x104')]=function(_0x215a51){var _0x200d37=_0x1b3ce4(_0x3441('0xfe'));if(typeof _0x570ba9==_0x3441('0x3c')){_0x570ba9[_0x3441('0x3d')](this,_0x215a51);}else if(typeof _0x200d37==_0x3441('0x3c')){_0x200d37['call'](_0x3af9b9(),this,_0x215a51);}this[_0x3441('0xfb')]();};this[_0x3441('0x105')]=function(_0xf7bd12){if(typeof _0xf7bd12==_0x3441('0x3c')){_0x5a6397['callback']=_0xf7bd12;}else{throw new Error('Wrong\x20parameters');}return this;};this[_0x3441('0xfc')]=function(_0xcdbd22){if(typeof _0xcdbd22==_0x3441('0x3c')){_0x3f644e=_0xcdbd22;}else{throw new Error(_0x3441('0x106'));}return this;};this['run']=function(){};this['do']=function(){this[_0x3441('0x5b')]();};this['forbidden']=function(_0x30a806){if(typeof _0x30a806!=_0x3441('0x3c'))throw new Error(_0x3441('0x106'));_0x50f96b=_0x30a806;return this;};this[_0x3441('0x16')]=function(_0x5d79c4){if(typeof _0x5d79c4!='function')throw new Error(_0x3441('0x106'));_0x3d97d3=_0x5d79c4;return this;};this[_0x3441('0x102')]=function(_0x3e0af0){if(typeof _0x3e0af0!=_0x3441('0x3c'))throw new Error(_0x3441('0x106'));_0x3e83f3=_0x3e0af0;return this;};this[_0x3441('0x1a')]=function(_0x384bbc){if(typeof _0x384bbc!=_0x3441('0x3c'))throw new Error('Wrong\x20parameters');_0x264d47=_0x384bbc;return this;};this[_0x3441('0xfe')]=function(_0x573587){if(typeof _0x573587!='function')throw new Error(_0x3441('0x106'));_0x570ba9=_0x573587;return this;};this[_0x3441('0x107')]=function(){return _0x3d69c1;};};var Upload=function(_0x269613,_0x387f75){if(typeof _0x269613!==_0x3441('0x3b')||typeof _0x387f75!=='object')throw new Error(_0x3441('0x108'));this[_0x3441('0x37')]=_0x269613;this['files']=_0x387f75;this[_0x3441('0x109')]=function(){return this['name'];};this[_0x3441('0x10a')]=function(){return this[_0x3441('0x10b')];};this[_0x3441('0x53')]=function(){return this[_0x3441('0x10b')][_0x3441('0x53')];};};Hi[_0x3441('0x10c')]=function(_0xd38ce2){Hi['$ui']['js'][_0x3441('0x73')]=_0xd38ce2;};Hi[_0x3441('0x1c')]=function(_0x4902c3){jQuery[_0x3441('0x10d')](_0x4902c3,Hi[_0x3441('0x8')]['js'][_0x3441('0x73')]);Hi['$ui']['js'][_0x3441('0x73')]=_0x4902c3;};Hi[_0x3441('0xb9')]=Hi[_0x3441('0xa')][_0x3441('0xce')];Hi[_0x3441('0xb4')]=function(_0x39d505,_0x2045d0){if(typeof _0x2045d0!='undefined'){var _0x2f2627=Hi[_0x3441('0xa')][_0x3441('0x1f')](_0x39d505);_0x2f2627[_0x3441('0x81')]=_0x2045d0;var _0x39d505=Hi['$nav'][_0x3441('0x80')](_0x2f2627);document['location'][_0x3441('0xb3')](_0x39d505);}else{document[_0x3441('0xb2')]['replace'](App[_0x3441('0xe5')]+_0x39d505);}};Hi[_0x3441('0x44')]=Hi['$nav']['navigateTo'];Hi[_0x3441('0xe2')]=function(_0x4ccab4){var _0x282e78=Hi[_0x3441('0xa')][_0x3441('0xf5')];var _0xf33e1f=Hi[_0x3441('0xa')][_0x3441('0x1f')](_0x282e78);_0x4ccab4['$route']=_0xf33e1f;Hi[_0x3441('0x8')]['js'][_0x3441('0x97')](_0x282e78[_0x3441('0x23')],_0x282e78[_0x3441('0x29')],_0x4ccab4);};String[_0x3441('0x10e')]['startsWith']=function(_0x5dfdae){return this[_0x3441('0x62')](_0x5dfdae)===0x0;};Array[_0x3441('0x10e')][_0x3441('0xd5')]=function(_0x3f8be0){var _0x5b1735=this;var _0x4ea3d8=_0x5b1735[_0x3441('0x62')](_0x3f8be0);if(_0x4ea3d8>-0x1){_0x5b1735[_0x3441('0x10f')](_0x4ea3d8,0x1);}};window[_0x3441('0x110')]=function(_0x372256){if(typeof App==_0x3441('0x12'))return;var _0x5ee971=App[_0x3441('0xe5')];var _0x188a84=window['location'][_0x3441('0x111')]();if(_0x188a84[_0x3441('0x112')](_0x5ee971)){var _0x585ed4=_0x188a84['charAt'](_0x188a84['length']-0x1);if(_0x585ed4=='#'){return;}var _0x383ddd=_0x188a84[_0x3441('0xb3')](App[_0x3441('0xe5')],'');Hi[_0x3441('0xa')][_0x3441('0xcd')](_0x383ddd);}};Hi['i18n']={};Hi['i18n'][_0x3441('0x113')]={};Hi[_0x3441('0x6e')][_0x3441('0x114')]=function(){delete Hi[_0x3441('0x6e')][_0x3441('0x113')];Hi[_0x3441('0x6e')][_0x3441('0x113')]={};if(typeof $i18nTemplateBundle!=_0x3441('0x12')){Hi[_0x3441('0x6e')][_0x3441('0xbc')]($i18nTemplateBundle);}if(typeof $i18nBundle!=_0x3441('0x12')){Hi[_0x3441('0x6e')][_0x3441('0xbc')]($i18nBundle);}};Hi[_0x3441('0x6e')][_0x3441('0xbc')]=function(_0x4a8b66){for(var _0x2e5135 in _0x4a8b66){if(_0x4a8b66[_0x3441('0x25')](_0x2e5135)){Hi['i18n'][_0x3441('0x113')][_0x2e5135]=_0x4a8b66[_0x2e5135];}}};Hi[_0x3441('0x6e')][_0x3441('0x6f')]=function(){Hi[_0x3441('0x6e')][_0x3441('0x114')]();};Hi[_0x3441('0x6e')][_0x3441('0x81')]=function(_0x598766){if(!Hi[_0x3441('0x6e')][_0x3441('0x113')][_0x3441('0x25')](_0x598766))return![];return Hi[_0x3441('0x6e')][_0x3441('0x113')][_0x598766];};Hi[_0x3441('0x6e')][_0x3441('0x115')]=function(_0x4b022b,_0x170d81){for(var _0x740ef0 in _0x170d81){var _0x2fdd8a='{{'+_0x740ef0+'}}';var _0x1972b7=_0x170d81[_0x740ef0];_0x4b022b=_0x4b022b[_0x3441('0xc2')](_0x2fdd8a)[_0x3441('0x116')](_0x1972b7);}return _0x4b022b;};Hi[_0x3441('0x6e')]['ExpressionPromise']=function(_0x1c0bb6){this[_0x3441('0x117')]=function(_0x4049d7){return Hi[_0x3441('0x6e')][_0x3441('0x115')](_0x1c0bb6,_0x4049d7);};};Hi[_0x3441('0x6e')][_0x3441('0x118')]=function(_0x380935){return _0x380935[_0x3441('0x62')]('{{')!=-0x1&&_0x380935['indexOf']('}}')!=-0x1;};function translate(_0x3da11e,_0x79b2cc){var _0xaa2f80=_0x3da11e;if(typeof _0x79b2cc!=_0x3441('0x12'))_0xaa2f80=_0x79b2cc;var _0xdbab81=Hi[_0x3441('0x6e')][_0x3441('0x81')](_0xaa2f80);if(!_0xdbab81){if(Hi['i18n']['isExpression'](_0x3da11e))return new Hi[(_0x3441('0x6e'))][(_0x3441('0x119'))](_0x3da11e);return _0x3da11e;}if(Hi[_0x3441('0x6e')]['isExpression'](_0xdbab81))return new Hi[(_0x3441('0x6e'))][(_0x3441('0x119'))](_0xdbab81);return _0xdbab81;}function __t(_0x4db417,_0xd7511f){return translate(_0x4db417,_0xd7511f);}var $fiis={};var fMx=function(_0x189e8a,_0x24d09f,_0x447f36,_0x5bcb5e,_0x7fe4cb,_0x5aae7d,_0x253b55,_0x1722c4){var _0x2465f5=![];if(_0x1722c4[_0x3441('0x53')]>0x0){for(var _0xe65404 in _0x1722c4){var _0x394469=_0x1722c4[_0xe65404];if(Upload[_0x3441('0x10e')][_0x3441('0x11a')](_0x394469)){_0x2465f5=!![];break;}}}var _0x35d794=new Hi[(_0x3441('0x18'))]['Promise']();if($fiis[_0x3441('0x25')](_0x5bcb5e)){if(_0x7fe4cb){if(_0x5aae7d){if(_0x253b55){$fiis[_0x5bcb5e][_0x3441('0xd7')]();}else return new Hi[(_0x3441('0x18'))][(_0x3441('0x11b'))]();}else{if(JSON['stringify'](_0x189e8a)==$fiis[_0x5bcb5e][_0x3441('0x11c')]){if(_0x253b55){$fiis[_0x5bcb5e]['abort']();}else return new Hi[(_0x3441('0x18'))][(_0x3441('0x14'))]();}}}}var _0x2e9bf7={'success':function(_0x536552){if(_0x536552[_0x3441('0x25')](_0x3441('0xe1'))){var _0x5144c6=_0x536552[_0x3441('0xe1')];for(var _0x36831c in _0x5144c6){var _0xa933c=_0x5144c6[_0x36831c];Hi['$ui']['js'][_0x3441('0xad')][_0x3441('0x5b')](_0x36831c,_0xa933c);}}if(_0x536552[_0x3441('0x25')](_0x3441('0xba'))){if(typeof __!=_0x3441('0x12')){for(var _0x5c3431 in _0x536552['$root']){__[_0x5c3431]=_0x536552[_0x3441('0xba')][_0x5c3431];}__[_0x3441('0xa7')]();}}_0x35d794[_0x3441('0x15')](_0x536552[_0x3441('0x11')]);},'error':function(_0x434133,_0x4acfd4,_0x37b77d){var _0x54c52a=_0x434133[_0x3441('0xf4')];var _0x4aa1f8=undefined;try{var _0x55adc8=JSON[_0x3441('0x87')](_0x54c52a);if(_0x55adc8[_0x3441('0x25')](_0x3441('0x55'))&&_0x55adc8[_0x3441('0x25')](_0x3441('0x11d'))){_0x35d794[_0x3441('0x104')](_0x55adc8);return;}}catch(_0x153547){}if(_0x4acfd4==_0x3441('0xd7')){_0x35d794[_0x3441('0x101')]();}else if(_0x4acfd4==_0x3441('0x16')){_0x35d794[_0x3441('0xff')]();}else{switch(_0x434133[_0x3441('0xf3')]){case 0x193:_0x35d794[_0x3441('0x19')]();break;case 0x198:_0x35d794[_0x3441('0xff')]();break;case 0x1a3:_0x35d794['_setExpired']();break;case 0x1a5:_0x35d794[_0x3441('0x101')]();break;case 0x1ad:_0x35d794[_0x3441('0x103')]();break;default:_0x35d794['_setException'](0x1f4);break;}}},'complete':function(){delete $fiis[_0x5bcb5e];}};_0x2e9bf7[_0x3441('0x11e')]='POST';_0x2e9bf7[_0x3441('0xb1')]=_0x24d09f;_0x2e9bf7[_0x3441('0x11f')]=_0x3441('0x120');_0x2e9bf7[_0x3441('0x6a')]=![];_0x2e9bf7['timeout']=_0x447f36;if(!_0x2465f5){_0x2e9bf7[_0x3441('0xe0')]=JSON[_0x3441('0x7d')](_0x189e8a);}else{var _0x173421=new FormData();var _0x2b6783={};var _0x2bd8ed={};for(var _0x58562b in _0x1722c4){var _0x394469=_0x1722c4[_0x58562b];if(Upload[_0x3441('0x10e')][_0x3441('0x11a')](_0x394469)){var _0x94ec80=_0x394469['getName']();_0x2bd8ed[_0x94ec80]=_0x394469[_0x3441('0x53')]();_0x2b6783['arg'+_0x58562b]=_0x3441('0x121')+_0x94ec80;var _0x1abd88=_0x394469[_0x3441('0x10a')]();for(var _0x3c6287=0x0;_0x3c6287<_0x1abd88[_0x3441('0x53')];_0x3c6287++)_0x173421['append'](_0x94ec80+_0x3441('0x122')+_0x3c6287,_0x1abd88[_0x3c6287]);}else{if(typeof _0x394469!=_0x3441('0x3c'))_0x2b6783['arg'+_0x58562b]=_0x394469;}}_0x173421[_0x3441('0x42')](_0x3441('0x123'),JSON[_0x3441('0x7d')](_0x2bd8ed));_0x173421[_0x3441('0x42')](_0x3441('0x124'),JSON[_0x3441('0x7d')](_0x2b6783));_0x2e9bf7['processData']=![];_0x2e9bf7[_0x3441('0x125')]=![];_0x2e9bf7[_0x3441('0xe0')]=_0x173421;}var _0x545b3e=$[_0x3441('0xf1')](_0x2e9bf7);_0x35d794['_setRequest'](_0x545b3e);_0x545b3e[_0x3441('0x11c')]=JSON[_0x3441('0x7d')](_0x189e8a);$fiis[_0x5bcb5e]=_0x545b3e;return _0x35d794;};
\ No newline at end of file
diff --git a/Web/pom.xml b/Web/pom.xml
index 854e5e5..cf14e7e 100755
--- a/Web/pom.xml
+++ b/Web/pom.xml
@@ -6,7 +6,7 @@
org.emerjoin
Hi-Framework
-
1.5.0
+
1.6.0
jar
@@ -31,7 +31,7 @@
org.emerjoin
Hi-Framework-Resources
- 1.5.0
+ 1.6.0
compile
false
@@ -109,7 +109,7 @@
org.emerjoin
XMLEasy
- 1.1.0
+ 2.0.0
@@ -118,6 +118,13 @@
1.1.0
+
+ io.jsonwebtoken
+ jjwt
+ 0.9.1
+
+
+
diff --git a/Web/src/main/java/org/emerjoin/hi/web/ActiveUser.java b/Web/src/main/java/org/emerjoin/hi/web/ActiveUser.java
index 3d4e5e1..ca19300 100644
--- a/Web/src/main/java/org/emerjoin/hi/web/ActiveUser.java
+++ b/Web/src/main/java/org/emerjoin/hi/web/ActiveUser.java
@@ -1,13 +1,15 @@
package org.emerjoin.hi.web;
+import org.emerjoin.hi.web.security.CsrfTokenUtil;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import javax.annotation.PostConstruct;
import javax.enterprise.context.SessionScoped;
+import javax.xml.bind.DatatypeConverter;
import java.io.Serializable;
-import java.security.MessageDigest;
-import java.security.SecureRandom;
import java.util.HashMap;
+import java.util.UUID;
/**
* @author Mário Júnior
@@ -18,41 +20,23 @@ public class ActiveUser implements Serializable {
private String csrfToken = "";
private HashMap data = new HashMap<>();
- private Logger _log = LoggerFactory.getLogger(ActiveUser.class);
+ private static final Logger _log = LoggerFactory.getLogger(ActiveUser.class);
+ private static final CsrfTokenUtil csrfTokeUtil = new CsrfTokenUtil();
- public ActiveUser(){
-
- try {
-
- SecureRandom secureRandom = new SecureRandom();
- byte[] token = new byte[128];
- secureRandom.nextBytes(token);
-
- MessageDigest md = MessageDigest.getInstance("MD5");
- byte[] mdbytes = md.digest(token);
-
- //convert the byte to hex format method 2
- StringBuffer hexString = new StringBuffer();
-
- for (int i = 0; i < mdbytes.length; i++) {
- String hex = Integer.toHexString(0xff & mdbytes[i]);
- if (hex.length() == 1) hexString.append('0');
- hexString.append(hex);
- }
-
- csrfToken = hexString.toString().toUpperCase();
-
- }catch (Exception ex){
-
- _log.error("Failed to generate User's CSRF protection token",ex);
+ @PostConstruct
+ public void init(){
+ _log.debug("Generating User CSRF token...");
+ this.csrfToken = csrfTokeUtil.makeJwtToken();
+ }
- }
+ public String expireCsrfToken(){
+ _log.debug("Expiring current CSRF token...");
+ return this.csrfToken = csrfTokeUtil
+ .makeJwtToken();
}
public String getCsrfToken() {
-
return csrfToken;
-
}
public HashMap getData() {
@@ -70,13 +54,10 @@ public Object getProperty(String name){
}
public Object getProperty(String name,Object defaultValue){
-
Object value = data.get(name);
if(value==null)
return defaultValue;
-
return value;
-
}
public void setProperty(String name, Object value){
diff --git a/Web/src/main/java/org/emerjoin/hi/web/AppContext.java b/Web/src/main/java/org/emerjoin/hi/web/AppContext.java
index 191c45c..049b91d 100755
--- a/Web/src/main/java/org/emerjoin/hi/web/AppContext.java
+++ b/Web/src/main/java/org/emerjoin/hi/web/AppContext.java
@@ -44,6 +44,10 @@ public static void setAssetVersionPrefix(String prefix) {
private String baseUrl;
+ private String origin;
+
+ private String domain;
+
public String getAssetVersionToken(){
return assetVersionPrefix+String.valueOf(getDeployId());
@@ -113,12 +117,41 @@ public String getBaseURL() {
public void setBaseURL(String baseUrl) {
this.baseUrl = baseUrl;
+ this.computeOrigin();
+ this.computeDomain();
}
public boolean isBaseURLSet(){
-
return this.baseUrl!=null;
+ }
+
+ public String getOrigin() {
+ return this.origin;
+ }
+
+ public String getDomain() {
+ return this.domain;
+ }
+
+ private void computeDomain(){
+ int doubleSlashIndex = origin.indexOf("//");
+ String withoutDoubleSlash = origin.substring(doubleSlashIndex+2,origin.length());
+ int semiColonIndex = withoutDoubleSlash.indexOf(':');
+ if(semiColonIndex != -1){
+ domain = withoutDoubleSlash.substring(0,semiColonIndex);
+ }else domain = withoutDoubleSlash;
+ }
+ private void computeOrigin(){
+ StringBuilder builder = new StringBuilder();
+ builder.append(this.baseUrl.substring(0,baseUrl.indexOf("//")+2));
+ int doubleSlashIndex = this.baseUrl.indexOf("//");
+ String withoutDoubleSlash = this.baseUrl.substring(doubleSlashIndex+2,this.baseUrl.length());
+ int nextForwardSlashIndex = withoutDoubleSlash.indexOf('/');
+ if(nextForwardSlashIndex != -1)
+ builder.append(withoutDoubleSlash.substring(0,nextForwardSlashIndex));
+ else builder.append(withoutDoubleSlash);
+ this.origin = builder.toString();
}
}
diff --git a/Web/src/main/java/org/emerjoin/hi/web/DispatcherServlet.java b/Web/src/main/java/org/emerjoin/hi/web/DispatcherServlet.java
index 8eda9c8..8d9c8ad 100755
--- a/Web/src/main/java/org/emerjoin/hi/web/DispatcherServlet.java
+++ b/Web/src/main/java/org/emerjoin/hi/web/DispatcherServlet.java
@@ -14,10 +14,9 @@
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
-import javax.servlet.http.HttpSession;
import java.io.IOException;
-import static org.emerjoin.hi.web.uti.Timing.*;
+import static org.emerjoin.hi.web.util.Timing.*;
/**
diff --git a/Web/src/main/java/org/emerjoin/hi/web/boot/BootAgent.java b/Web/src/main/java/org/emerjoin/hi/web/boot/BootAgent.java
index 2343104..6b53498 100644
--- a/Web/src/main/java/org/emerjoin/hi/web/boot/BootAgent.java
+++ b/Web/src/main/java/org/emerjoin/hi/web/boot/BootAgent.java
@@ -81,7 +81,7 @@ private void initBootExtensions() throws HiException {
}catch (Exception ex){
- throw new HiException("Failed to initialize boot extension : "+extension.getClass().getCanonicalName(),ex);
+ throw new HiException("Failed to init boot extension : "+extension.getClass().getCanonicalName(),ex);
}
diff --git a/Web/src/main/java/org/emerjoin/hi/web/config/AppConfigurations.java b/Web/src/main/java/org/emerjoin/hi/web/config/AppConfigurations.java
index 203554b..6926c6e 100755
--- a/Web/src/main/java/org/emerjoin/hi/web/config/AppConfigurations.java
+++ b/Web/src/main/java/org/emerjoin/hi/web/config/AppConfigurations.java
@@ -27,15 +27,12 @@ public class AppConfigurations {
private String baseUrl;
private Map testedViews = new HashMap<>();
-
private List smartCachingExtensions = new ArrayList<>();
-
private DeploymentMode deploymentMode = DeploymentMode.DEVELOPMENT;
-
+ private Frontiers frontiersConfig = new Frontiers();
+ private Security securityConfig = new Security();
private Logger _log = LoggerFactory.getLogger(AppConfigurations.class);
-
-
public static enum DeploymentMode {
DEVELOPMENT, PRODUCTION
@@ -192,4 +189,20 @@ public String getBaseUrl() {
public void setBaseUrl(String baseUrl) {
this.baseUrl = baseUrl;
}
+
+ public Frontiers getFrontiersConfig() {
+ return frontiersConfig;
+ }
+
+ public void setFrontiersConfig(Frontiers frontiersConfig) {
+ this.frontiersConfig = frontiersConfig;
+ }
+
+ public Security getSecurityConfig() {
+ return securityConfig;
+ }
+
+ public void setSecurityConfig(Security securityConfig) {
+ this.securityConfig = securityConfig;
+ }
}
diff --git a/Web/src/main/java/org/emerjoin/hi/web/config/Frontiers.java b/Web/src/main/java/org/emerjoin/hi/web/config/Frontiers.java
new file mode 100644
index 0000000..5f8f338
--- /dev/null
+++ b/Web/src/main/java/org/emerjoin/hi/web/config/Frontiers.java
@@ -0,0 +1,115 @@
+package org.emerjoin.hi.web.config;
+
+/**
+ * @author Mario Junior.
+ */
+public class Frontiers {
+
+ public class Security {
+
+ public class CrossSiteRequestForgery {
+
+ public class Token {
+
+ private String jwtAlgorithm = "H256";
+ private String jwtPassphrase = "10045084-f522-4faa-afa4-bdbc955faa47";
+ private int secureRandomSize = 64;
+
+ public String getJwtAlgorithm() {
+ return jwtAlgorithm;
+ }
+
+ public void setJwtAlgorithm(String jwtAlgorithm) {
+ this.jwtAlgorithm = jwtAlgorithm;
+ }
+
+ public String getJwtPassphrase() {
+ return jwtPassphrase;
+ }
+
+ public void setJwtPassphrase(String jwtPassphrase) {
+ this.jwtPassphrase = jwtPassphrase;
+ }
+
+ public int getSecureRandomSize() {
+ return secureRandomSize;
+ }
+
+ public void setSecureRandomSize(int secureRandomSize) {
+ this.secureRandomSize = secureRandomSize;
+ }
+ }
+ public class Cookie {
+
+ private boolean httpOnly = true;
+ private boolean secure = false;
+ public static final String NAME = "_CSRF_";
+
+ public boolean isHttpOnly() {
+ return httpOnly;
+ }
+
+ public void setHttpOnly(boolean httpOnly) {
+ this.httpOnly = httpOnly;
+ }
+
+ public boolean isSecure() {
+ return secure;
+ }
+
+ public void setSecure(boolean secure) {
+ this.secure = secure;
+ }
+ }
+
+ private Token token = new Token();
+ private Cookie cookie = new Cookie();
+
+ public Token getToken() {
+ return token;
+ }
+
+ public void setToken(Token token) {
+ this.token = token;
+ }
+
+ public Cookie getCookie() {
+ return cookie;
+ }
+
+ public void setCookie(Cookie cookie) {
+ this.cookie = cookie;
+ }
+ }
+
+ private CrossSiteRequestForgery crossSiteRequestForgery = new CrossSiteRequestForgery();
+
+ public CrossSiteRequestForgery getCrossSiteRequestForgery() {
+ return crossSiteRequestForgery;
+ }
+
+ public void setCrossSiteRequestForgery(CrossSiteRequestForgery crossSiteRequestForgery) {
+ this.crossSiteRequestForgery = crossSiteRequestForgery;
+ }
+
+ }
+
+ private Security security = new Security();
+ private long defaultTimeout = 1500;
+
+ public Security getSecurity() {
+ return security;
+ }
+
+ public void setSecurity(Security security) {
+ this.security = security;
+ }
+
+ public long getDefaultTimeout() {
+ return defaultTimeout;
+ }
+
+ public void setDefaultTimeout(long defaultTimeout) {
+ this.defaultTimeout = defaultTimeout;
+ }
+}
diff --git a/Web/src/main/java/org/emerjoin/hi/web/config/Security.java b/Web/src/main/java/org/emerjoin/hi/web/config/Security.java
new file mode 100644
index 0000000..0a7d4af
--- /dev/null
+++ b/Web/src/main/java/org/emerjoin/hi/web/config/Security.java
@@ -0,0 +1,170 @@
+package org.emerjoin.hi.web.config;
+
+/**
+ * @author Mario Junior.
+ */
+public class Security {
+
+ private ContentSecurityPolicy contentPolicy = new ContentSecurityPolicy();
+
+ public ContentSecurityPolicy getContentPolicy() {
+ return contentPolicy;
+ }
+
+ public void setContentPolicy(ContentSecurityPolicy contentPolicy) {
+ this.contentPolicy = contentPolicy;
+ }
+
+ public class ContentSecurityPolicy {
+
+ private boolean denyIframeEmbeding = true;
+
+ private boolean blockMixedContent = false;
+ private String formActionDirective ="'none'";
+ private String navigateToDirective ="*";
+
+ private String reportingUrl="";
+
+ private String defaultContentSource="* 'unsafe-inline'";
+ private String scriptContentSource="* 'unsafe-inline' 'unsafe-eval'";
+ private String objectContentSource="";
+ private String imageContentSource="";
+ private String mediaContentSource="";
+ private String styleContentSource="";
+
+ public boolean isDenyIframeEmbeding() {
+ return denyIframeEmbeding;
+ }
+
+ public void setDenyIframeEmbeding(boolean denyIframeEmbeding) {
+ this.denyIframeEmbeding = denyIframeEmbeding;
+ }
+
+ public String getReportingUrl() {
+ return reportingUrl;
+ }
+
+ public void setReportingUrl(String reportingUrl) {
+ this.reportingUrl = reportingUrl;
+ }
+
+ public String getDefaultContentSource() {
+ return defaultContentSource;
+ }
+
+ public void setDefaultContentSource(String defaultContentSource) {
+ this.defaultContentSource = defaultContentSource;
+ }
+
+ public String getScriptContentSource() {
+ return scriptContentSource;
+ }
+
+ public void setScriptContentSource(String scriptContentSource) {
+ this.scriptContentSource = scriptContentSource;
+ }
+
+ public String getObjectContentSource() {
+ return objectContentSource;
+ }
+
+ public void setObjectContentSource(String objectContentSource) {
+ this.objectContentSource = objectContentSource;
+ }
+
+ public String getImageContentSource() {
+ return imageContentSource;
+ }
+
+ public void setImageContentSource(String imageContentSource) {
+ this.imageContentSource = imageContentSource;
+ }
+
+ public String getMediaContentSource() {
+ return mediaContentSource;
+ }
+
+ public void setMediaContentSource(String mediaContentSource) {
+ this.mediaContentSource = mediaContentSource;
+ }
+
+ public String getStyleContentSource() {
+ return styleContentSource;
+ }
+
+ public void setStyleContentSource(String styleContentSource) {
+ this.styleContentSource = styleContentSource;
+ }
+
+ public boolean isBlockMixedContent() {
+ return blockMixedContent;
+ }
+
+ public void setBlockMixedContent(boolean blockMixedContent) {
+ this.blockMixedContent = blockMixedContent;
+ }
+
+ public String getNavigateToDirective() {
+ return navigateToDirective;
+ }
+
+ public void setNavigateToDirective(String navigateToDirective) {
+ this.navigateToDirective = navigateToDirective;
+ }
+
+ public String getFormActionDirective() {
+ return formActionDirective;
+ }
+
+ public void setFormActionDirective(String formActionDirective) {
+ this.formActionDirective = formActionDirective;
+ }
+
+ @Override
+ public String toString() {
+ StringBuilder builder = new StringBuilder();
+ String defaultSrc = this.getDefaultContentSource();
+ if(!defaultSrc.isEmpty()) {
+ builder.append("default-src ");builder.append(defaultSrc);builder.append("; ");
+ }
+ String scriptSrc = this.getScriptContentSource();
+ if(!scriptSrc.isEmpty()){
+ builder.append("script-src ");builder.append(scriptSrc);builder.append("; ");
+ builder.append("script-src-attr ");builder.append(scriptSrc);builder.append("; ");
+ }
+ String styleSrc = this.getStyleContentSource();
+ if(!styleSrc.isEmpty()){
+ builder.append("style-src ");builder.append(styleSrc);builder.append("; ");
+ }
+ String imageSrc = this.getImageContentSource();
+ if(!imageSrc.isEmpty()){
+ builder.append("img-src ");builder.append(imageSrc);builder.append("; ");
+ }
+ String objectSrc = this.getObjectContentSource();
+ if(!objectSrc.isEmpty()){
+ builder.append("object-src ");builder.append(objectSrc);builder.append("; ");
+ }
+ String mediaContentSrc = this.getMediaContentSource();
+ if(!mediaContentSrc.isEmpty()){
+ builder.append("media-src "); builder.append(mediaContentSrc); builder.append("; ");
+ }
+ if(this.isBlockMixedContent())
+ builder.append("block-all-mixed-content; ");
+
+ String navigateToDirective = this.getNavigateToDirective();
+ if(!navigateToDirective.isEmpty()){
+ builder.append("navigate-to "); builder.append(navigateToDirective); builder.append("; ");
+ }
+ String formActionDirective = this.getFormActionDirective();
+ if(!formActionDirective.isEmpty()){
+ builder.append("form-action "); builder.append(formActionDirective); builder.append("; ");
+ }
+ if(!this.getReportingUrl().isEmpty()){
+ builder.append("report-uri ");builder.append(this.getReportingUrl());
+ builder.append("; report-to ");builder.append(this.getReportingUrl());builder.append("; ");
+ }
+ return builder.toString();
+ }
+ }
+
+}
diff --git a/Web/src/main/java/org/emerjoin/hi/web/config/xml/XMLConfigProvider.java b/Web/src/main/java/org/emerjoin/hi/web/config/xml/XMLConfigProvider.java
index b2f4d68..da86c28 100755
--- a/Web/src/main/java/org/emerjoin/hi/web/config/xml/XMLConfigProvider.java
+++ b/Web/src/main/java/org/emerjoin/hi/web/config/xml/XMLConfigProvider.java
@@ -10,6 +10,7 @@
import org.slf4j.LoggerFactory;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
+import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;
@@ -51,7 +52,7 @@ private Configurator getConfigurator(Class extends Configurator> clazz) throws
}catch (Exception ex){
- throw new BadConfiguratorException("Failed to initialize the configurator "+clazz.getCanonicalName(),ex);
+ throw new BadConfiguratorException("Failed to init the configurator "+clazz.getCanonicalName(),ex);
}
@@ -94,7 +95,6 @@ private Set> getConfigurators(Set indexSet){
}
public void load(ServletContext servletContext, ServletConfig config, Set indexSet) throws HiException{
-
Set> configurators = getConfigurators(indexSet);
Document document = loadDocument(servletContext);
Element docElement = document.getDocumentElement();
@@ -108,15 +108,18 @@ public void load(ServletContext servletContext, ServletConfig config, Set
ConfigSection section = (ConfigSection) clazz.getDeclaredAnnotation(ConfigSection.class);
HashMap elements = new HashMap<>();
-
for(String tag: section.tags()){
-
- NodeList nodeList = docElement.getElementsByTagName(tag);
- if(nodeList.getLength()==0)
- continue;
-
- elements.put(tag,(Element) nodeList.item(0));
-
+ NodeList childNodes = docElement.getChildNodes();
+ for(int i=0; i
continue;
}
-
_log.info("Loading configurator " + clazz.getCanonicalName() + "...");
configurator.doConfig(AppConfigurations.get(),elements,docElement);
-
}
-
}
diff --git a/Web/src/main/java/org/emerjoin/hi/web/config/xml/sections/FrontiersConfig.java b/Web/src/main/java/org/emerjoin/hi/web/config/xml/sections/FrontiersConfig.java
index 14f3e02..0f508b5 100644
--- a/Web/src/main/java/org/emerjoin/hi/web/config/xml/sections/FrontiersConfig.java
+++ b/Web/src/main/java/org/emerjoin/hi/web/config/xml/sections/FrontiersConfig.java
@@ -3,7 +3,9 @@
import org.emerjoin.hi.web.config.AppConfigurations;
import org.emerjoin.hi.web.config.BadConfigException;
import org.emerjoin.hi.web.config.Configurator;
+import org.emerjoin.hi.web.config.Frontiers;
import org.emerjoin.hi.web.config.xml.ConfigSection;
+import org.emerjoin.xmleasy.XMLEasy;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;
@@ -12,27 +14,35 @@
/**
* @author Mário Júnior
*/
-@ConfigSection(tags = "frontier-packages")
+@ConfigSection(tags = "frontiers")
public class FrontiersConfig implements Configurator {
-
@Override
public void doConfig(AppConfigurations configs, Map elements, Element document) throws BadConfigException {
-
- Element frontiersElement = elements.get("frontier-packages");
- NodeList allFrontiersNodeList = frontiersElement.getElementsByTagName("package");
-
- if(allFrontiersNodeList.getLength()>0){
-
- for(int i=0;i {
+ frontiersConfig.setDefaultTimeout(Long.parseLong(defaultTimeoutXml.getContent()));
+ }).eval();
+
+ xmlEasy.ifChild("security").then(securityXml -> {
+ Frontiers.Security.CrossSiteRequestForgery crossSiteRequestForgery = frontiersConfig.getSecurity().getCrossSiteRequestForgery();
+ securityXml.ifChild("cross-site-request-forgery").then(crossSiteRequestForgeryXml -> {
+ Frontiers.Security.CrossSiteRequestForgery.Token token = crossSiteRequestForgery.getToken();
+ XMLEasy csrfTokenXml = crossSiteRequestForgeryXml.child("token");
+ token.setJwtAlgorithm(csrfTokenXml.child("jwt-algorithm").getContent());
+ token.setJwtPassphrase(csrfTokenXml.child("jwt-passphrase").getContent());
+ token.setSecureRandomSize(Integer.parseInt(csrfTokenXml.child("secure-random-size")
+ .getContent()));
+
+ Frontiers.Security.CrossSiteRequestForgery.Cookie cookie = crossSiteRequestForgery.getCookie();
+ XMLEasy csrfCookie = crossSiteRequestForgeryXml.child("cookie");
+ cookie.setHttpOnly(Boolean.parseBoolean(csrfCookie.child("http-only").getContent()));
+ cookie.setHttpOnly(Boolean.parseBoolean(csrfCookie.child("secure").getContent()));
+ }).eval();
+ }).eval();
}
diff --git a/Web/src/main/java/org/emerjoin/hi/web/config/xml/sections/SecurityConfig.java b/Web/src/main/java/org/emerjoin/hi/web/config/xml/sections/SecurityConfig.java
new file mode 100644
index 0000000..e87ab6a
--- /dev/null
+++ b/Web/src/main/java/org/emerjoin/hi/web/config/xml/sections/SecurityConfig.java
@@ -0,0 +1,58 @@
+package org.emerjoin.hi.web.config.xml.sections;
+
+import org.emerjoin.hi.web.config.*;
+import org.emerjoin.hi.web.config.xml.ConfigSection;
+import org.emerjoin.xmleasy.XMLEasy;
+import org.w3c.dom.Element;
+
+import java.util.Map;
+import java.util.Optional;
+
+/**
+ * @author Mário Júnior
+ */
+@ConfigSection(tags = "security")
+public class SecurityConfig implements Configurator {
+
+ @Override
+ public void doConfig(AppConfigurations configs, Map elements, Element document) throws BadConfigException {
+ Security securityConfig = configs.getSecurityConfig();
+ Security.ContentSecurityPolicy contentPolicy = securityConfig.getContentPolicy();
+ Element xmlElement = elements.get("security");
+ XMLEasy xmlEasy = XMLEasy.it(xmlElement);
+ xmlEasy.ifChild("content-security-policy").then(contentPolicyXml -> {
+ contentPolicyXml.getContentIfPresent("reporting-url",contentPolicy::setReportingUrl);
+ contentPolicyXml.ifChild("deny-iframe-embedding",element -> {
+ contentPolicy.setDenyIframeEmbeding(Boolean.parseBoolean(element.
+ getContent()));
+ });
+ contentPolicyXml.getContentIfPresent("block-mixed-content",
+ val -> contentPolicy.setBlockMixedContent(Boolean.
+ parseBoolean(val)));
+ contentPolicyXml.ifChild("policy-allow", allowXmlElement -> {
+ allowXmlElement.ifChild("navigation", element -> {
+ element.optionalAttribute("to")
+ .ifPresent(contentPolicy::setNavigateToDirective);
+ element.getContentIfPresent("form-action",contentPolicy::
+ setFormActionDirective);
+ });
+ allowXmlElement.ifChild("content", element -> {
+ Optional defaultContentSource = element.optionalAttribute("from");
+ defaultContentSource.ifPresent(contentSource -> {
+ contentPolicy.setDefaultContentSource(defaultContentSource.get());
+ });
+ element.ifChild("images",it -> contentPolicy.setImageContentSource(it.attribute("from")));
+ element.ifChild("scripts",it -> contentPolicy.setScriptContentSource(it.attribute("from")));
+ element.ifChild("styles",it -> contentPolicy.setStyleContentSource(it.attribute("from")));
+ element.ifChild("media",it -> contentPolicy.setMediaContentSource(it.attribute("from")));
+ element.ifChild("objects",it -> contentPolicy.setObjectContentSource(it.attribute("from")));
+ });
+ });
+
+ }).eval();
+
+
+
+ }
+
+}
diff --git a/Web/src/main/java/org/emerjoin/hi/web/config/xml/sections/WebConfig.java b/Web/src/main/java/org/emerjoin/hi/web/config/xml/sections/WebConfig.java
index 459888e..b8421ed 100644
--- a/Web/src/main/java/org/emerjoin/hi/web/config/xml/sections/WebConfig.java
+++ b/Web/src/main/java/org/emerjoin/hi/web/config/xml/sections/WebConfig.java
@@ -62,10 +62,9 @@ private void deploymentAndLang(Element docElement, AppConfigurations configs){
@Override
public void doConfig(AppConfigurations configs, Map elements, org.w3c.dom.Element docElement) throws BadConfigException {
-
//Template and MVC Configurations
org.w3c.dom.Element webElement = (org.w3c.dom.Element) docElement.getElementsByTagName("web").item(0);
- XMLEasy.easy(webElement).ifChild(FRONTIERS_TIMEOUT_ELEMENT)
+ XMLEasy.it(webElement).ifChild(FRONTIERS_TIMEOUT_ELEMENT)
.then((el) -> configs.setFrontiersTimeout(Long.parseLong(el.getContent()))).eval();
NodeList viewsDirectoryNodes = webElement.getElementsByTagName("views-directory");
@@ -91,11 +90,8 @@ public void doConfig(AppConfigurations configs, Map
templates(webElement,configs);
deploymentAndLang(docElement,configs);
-
}
-
-
}
diff --git a/Web/src/main/java/org/emerjoin/hi/web/events/CSRFAttackAttemptEvent.java b/Web/src/main/java/org/emerjoin/hi/web/events/CSRFAttackAttemptEvent.java
new file mode 100644
index 0000000..4dc41d8
--- /dev/null
+++ b/Web/src/main/java/org/emerjoin/hi/web/events/CSRFAttackAttemptEvent.java
@@ -0,0 +1,10 @@
+package org.emerjoin.hi.web.events;
+
+/**
+ * @author Mario Junior.
+ */
+public class CSRFAttackAttemptEvent extends HiEvent {
+
+
+
+}
diff --git a/Web/src/main/java/org/emerjoin/hi/web/i18n/I18nStarter.java b/Web/src/main/java/org/emerjoin/hi/web/i18n/I18nStarter.java
index b7cd69b..7ff722a 100644
--- a/Web/src/main/java/org/emerjoin/hi/web/i18n/I18nStarter.java
+++ b/Web/src/main/java/org/emerjoin/hi/web/i18n/I18nStarter.java
@@ -118,14 +118,14 @@ private I18nMappingsInfo loadMappings(URL mappingsXML, String lang){
I18nMappingsInfo i18nMappingsInfo = new I18nMappingsInfo();
- XMLEasy xmlEasy = new XMLEasy(mappingsXML).validate(MAPPINGS_XSD).freeze();
+ XMLEasy xmlEasy = new XMLEasy(mappingsXML).validate(MAPPINGS_XSD);
xmlEasy.ifChild(TEMPLATES_MAPPINGS_TAG).then(templates -> {
LOG.info("Loading templates i18n mappings...");
//Load templates mappings
templates.streamChildren().forEach((template -> {
String templateName = template.getAttribute("for");
LOG.info(String.format("Loading I18n mappings for [%s]",templateName));
- XMLEasy xml = XMLEasy.easy(template);
+ XMLEasy xml = XMLEasy.it(template);
getMappedDictionaries(xml.streamChildren(),lang)
.forEach(url -> i18nMappingsInfo.addTemplateMapping(templateName,url));
@@ -138,7 +138,7 @@ private I18nMappingsInfo loadMappings(URL mappingsXML, String lang){
views.streamChildren().forEach(view -> {
String path = view.getAttribute("for");
LOG.info(String.format("Loading I18n mappings for [%s]",path));
- XMLEasy xml = XMLEasy.easy(view);
+ XMLEasy xml = XMLEasy.it(view);
getMappedDictionaries(xml.streamChildren(),lang)
.forEach(url -> i18nMappingsInfo.addViewMapping("/"+path,url));
diff --git a/Web/src/main/java/org/emerjoin/hi/web/i18n/I18nXmlConfig.java b/Web/src/main/java/org/emerjoin/hi/web/i18n/I18nXmlConfig.java
index 796bec0..92e8d66 100644
--- a/Web/src/main/java/org/emerjoin/hi/web/i18n/I18nXmlConfig.java
+++ b/Web/src/main/java/org/emerjoin/hi/web/i18n/I18nXmlConfig.java
@@ -31,13 +31,13 @@ public static Optional getConfiguration(){
@Override
public void doConfig(AppConfigurations configs, Map elements, Element document) throws BadConfigException {
- XMLEasy i18nXml = new XMLEasy(document).child("i18n").freeze();
+ XMLEasy i18nXml = new XMLEasy(document).child("i18n");
I18nConfiguration configuration = new I18nConfiguration();
List languages = new ArrayList<>();
i18nXml.child("languages").streamChildren()
.forEach(element -> {
- XMLEasy easy = XMLEasy.easy(element);
+ XMLEasy easy = XMLEasy.it(element);
String languageName = element.getTextContent();
languages.add(languageName);
Optional defaultLang = easy.optionalAttribute("default");
diff --git a/Web/src/main/java/org/emerjoin/hi/web/internal/Router.java b/Web/src/main/java/org/emerjoin/hi/web/internal/Router.java
index 4a4f652..bd94540 100644
--- a/Web/src/main/java/org/emerjoin/hi/web/internal/Router.java
+++ b/Web/src/main/java/org/emerjoin/hi/web/internal/Router.java
@@ -92,18 +92,19 @@ public int doRoute(RequestContext requestContext, String routeURL, boolean isPos
boolean handled = false;
if(wasPreviouslyMatched(routeURL)){
ReqHandler reqHandler = ReqHandler.getHandler(getPreviouslyMatchedHandler(routeURL));
+ int status = 200;
try {
if (!reqHandler.handle(requestContext)) {
requestContext.getResponse().sendError(404);
return 404;
- }
+ } else status = requestContext.getResponse().getStatus();
}catch (ServletException ex){
throw ex;
}catch (Throwable ex){
throw new ServletException(ex);
}
- return 200;
+ return status;
}
diff --git a/Web/src/main/java/org/emerjoin/hi/web/mvc/Controller.java b/Web/src/main/java/org/emerjoin/hi/web/mvc/Controller.java
index b31af21..63d9bd1 100755
--- a/Web/src/main/java/org/emerjoin/hi/web/mvc/Controller.java
+++ b/Web/src/main/java/org/emerjoin/hi/web/mvc/Controller.java
@@ -2,6 +2,8 @@
import org.emerjoin.hi.web.*;
import org.emerjoin.hi.web.config.AppConfigurations;
+import org.emerjoin.hi.web.config.Frontiers;
+import org.emerjoin.hi.web.config.Security;
import org.emerjoin.hi.web.events.TemplateLoadEvent;
import org.emerjoin.hi.web.events.TemplateTransformEvent;
import org.emerjoin.hi.web.events.ViewTransformEvent;
@@ -16,6 +18,8 @@
import javax.enterprise.event.Event;
import javax.enterprise.inject.spi.CDI;
import javax.inject.Inject;
+import javax.servlet.http.Cookie;
+import javax.servlet.http.HttpServletResponse;
import java.io.InputStream;
import java.net.URL;
import java.util.HashMap;
@@ -45,6 +49,12 @@ public class Controller {
@Inject
private I18nContext i18nContext;
+ @Inject
+ private AppContext appContext;
+
+ @Inject
+ private ActiveUser activeUser;
+
private static Logger _log = LoggerFactory.getLogger(Controller.class);
private void prepareView(RequestContext requestContext, String controllerName, String actionName,
@@ -150,6 +160,7 @@ public void callView(Map values) throws NoSuchViewException, Temp
TemplateLoadEvent event = null;
if(!requestContext.hasAjaxHeader()){
+ this.emitSecurityHeaders(requestContext);
event = new TemplateLoadEvent();
templateLoadEvent.fire(event);
}
@@ -182,7 +193,46 @@ public void callView(Map values) throws NoSuchViewException, Temp
}
+ private void emitSecurityHeaders(RequestContext context){
+ this.emitCSRFHeaders(context);
+ this.emitCSPHeaders(context);
+ }
+
+ private void emitCSRFHeaders(RequestContext context){
+ Frontiers frontiersConfig = AppConfigurations.get().getFrontiersConfig();
+ Frontiers.Security.CrossSiteRequestForgery crossSiteRequestForgery = frontiersConfig
+ .getSecurity()
+ .getCrossSiteRequestForgery();
+ Frontiers.Security.CrossSiteRequestForgery.Cookie cookieConfig = crossSiteRequestForgery
+ .getCookie();
+ HttpServletResponse response = context.getResponse();
+ String token = activeUser.expireCsrfToken();
+ Cookie cookie = new Cookie(Frontiers.Security.CrossSiteRequestForgery.Cookie.NAME,token);
+ cookie.setHttpOnly(cookieConfig.isHttpOnly());
+ cookie.setSecure(cookieConfig.isSecure());
+ cookie.setPath(getCookiePath());
+ cookie.setDomain(appContext.getDomain());
+ response.addCookie(cookie);
+ }
+ private String getCookiePath(){
+ String baseUrl = appContext.getBaseURL();
+ String originUrl = appContext.getOrigin();
+ String path = baseUrl.substring(originUrl.length(),baseUrl.length());
+ return path;
+ }
+ private void emitCSPHeaders(RequestContext context){
+ Security securityConfig = AppConfigurations.get().getSecurityConfig();
+ Security.ContentSecurityPolicy contentSecurityPolicy = securityConfig.getContentPolicy();
+ HttpServletResponse response = context.getResponse();
+ if(contentSecurityPolicy.isDenyIframeEmbeding())
+ response.setHeader("X-Frame-Options","deny");
+ String policyStr = contentSecurityPolicy.toString();
+ if(!policyStr.isEmpty()) {
+ _log.debug("Content-Security-Policy: " + policyStr);
+ response.setHeader("Content-Security-Policy", policyStr);
+ }
+ }
}
diff --git a/Web/src/main/java/org/emerjoin/hi/web/mvc/HTMLizer.java b/Web/src/main/java/org/emerjoin/hi/web/mvc/HTMLizer.java
index 4a45edb..23f61b3 100755
--- a/Web/src/main/java/org/emerjoin/hi/web/mvc/HTMLizer.java
+++ b/Web/src/main/java/org/emerjoin/hi/web/mvc/HTMLizer.java
@@ -188,7 +188,6 @@ private String getAppData(){
map.put("simple_base_url", appContext.getBaseURL().replace(http,"").replace(https,""));
map.put("deployId",appContext.getDeployId());
map.put("deployMode",appContext.getDeployMode().toString());
- map.put("csrfToken",activeUser.getCsrfToken());
return gson.toJson(map);
diff --git a/Web/src/main/java/org/emerjoin/hi/web/req/FrontierSecurityChecklist.java b/Web/src/main/java/org/emerjoin/hi/web/req/FrontierSecurityChecklist.java
new file mode 100644
index 0000000..a8aa1e7
--- /dev/null
+++ b/Web/src/main/java/org/emerjoin/hi/web/req/FrontierSecurityChecklist.java
@@ -0,0 +1,45 @@
+package org.emerjoin.hi.web.req;
+
+/**
+ * @author Mario Junior.
+ */
+public class FrontierSecurityChecklist {
+
+ private boolean originCheck;
+ private boolean csrfTokenPresent;
+ private boolean csrfTokenValid;
+ private boolean csrfTokenExpired;
+
+ public boolean isOriginCheck() {
+ return originCheck;
+ }
+
+ public void setOriginCheck(boolean originCheck) {
+ this.originCheck = originCheck;
+ }
+
+ public boolean isCsrfTokenPresent() {
+ return csrfTokenPresent;
+ }
+
+ public void setCsrfTokenPresent(boolean csrfTokenPresent) {
+ this.csrfTokenPresent = csrfTokenPresent;
+ }
+
+ public boolean isCsrfTokenValid() {
+ return csrfTokenValid;
+ }
+
+ public void setCsrfTokenValid(boolean csrfTokenValid) {
+ this.csrfTokenValid = csrfTokenValid;
+ }
+
+ public boolean isCsrfTokenExpired() {
+ return csrfTokenExpired;
+ }
+
+ public void setCsrfTokenExpired(boolean csrfTokenExpired) {
+ this.csrfTokenExpired = csrfTokenExpired;
+ }
+
+}
diff --git a/Web/src/main/java/org/emerjoin/hi/web/req/FrontiersReqHandler.java b/Web/src/main/java/org/emerjoin/hi/web/req/FrontiersReqHandler.java
index 8537f26..c992499 100755
--- a/Web/src/main/java/org/emerjoin/hi/web/req/FrontiersReqHandler.java
+++ b/Web/src/main/java/org/emerjoin/hi/web/req/FrontiersReqHandler.java
@@ -5,7 +5,10 @@
import org.emerjoin.hi.web.AppContext;
import org.emerjoin.hi.web.FrontEnd;
import org.emerjoin.hi.web.RequestContext;
+import org.emerjoin.hi.web.config.AppConfigurations;
import org.emerjoin.hi.web.config.ConfigProvider;
+import org.emerjoin.hi.web.config.Frontiers;
+import org.emerjoin.hi.web.events.CSRFAttackAttemptEvent;
import org.emerjoin.hi.web.events.FrontierRequestEvent;
import org.emerjoin.hi.web.frontier.FileUpload;
import org.emerjoin.hi.web.frontier.FrontierInvoker;
@@ -17,6 +20,7 @@
import org.emerjoin.hi.web.frontier.model.FrontierMethod;
import org.emerjoin.hi.web.frontier.model.MethodParam;
import org.emerjoin.hi.web.mvc.HTMLizer;
+import org.emerjoin.hi.web.security.CsrfTokenUtil;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -26,7 +30,9 @@
import javax.inject.Inject;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
+import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.Part;
import javax.validation.ConstraintViolation;
import javax.validation.ConstraintViolationException;
@@ -39,6 +45,7 @@
public class FrontiersReqHandler extends ReqHandler {
private static Map frontiersMap = new HashMap();
+ private static final Logger LOGGER = LoggerFactory.getLogger(FrontiersReqHandler.class);
public static void addFrontier(FrontierClass frontierClass){
frontiersMap.put(frontierClass.getSimpleName(),frontierClass);
@@ -60,16 +67,23 @@ public static FrontierClass getFrontier(String name){
private ServletContext servletContext;
@Inject
private RequestContext requestContext;
+
@Inject
private ActiveUser activeUser;
+
@Inject
private Event frontierRequestEvent;
+
+ @Inject
+ private Event csrfAttackAttemptEventEvent;
+
@Inject
private ConfigProvider configProvider;
private Logger log = null;
private Gson gson = null;
private Base64.Decoder decoder = Base64.getDecoder();
+ private CsrfTokenUtil csrfTokenUtil = new CsrfTokenUtil();
private Object getParamValue(String frontier,FrontierMethod frontierMethod, MethodParam methodParam,
Map uploadsMap,Map argsMap,
@@ -383,21 +397,48 @@ private void okInvocationResult(FrontierInvoker frontierInvoker,
}
- private boolean isAuthenticRequest(RequestContext requestContext){
-
- String token = requestContext.getRequest().getHeader("csrfToken");
- if(token==null) {
- log.warn("CSRF Token Header missing on Request");
- return false;
+ private Optional getCSRFCookie(HttpServletRequest request){
+ String cookieName = Frontiers.Security.CrossSiteRequestForgery.Cookie.NAME;
+ for(Cookie cookie: request.getCookies()){
+ if(cookie.getName().equals(cookieName))
+ return Optional.of(cookie);
}
+ LOGGER.warn("Cookie not present: "+cookieName);
+ return Optional.empty();
+ }
- if(!token.equals(activeUser.getCsrfToken())){
- log.warn("Invalid Request CSRF Token");
- return false;
+ private FrontierSecurityChecklist checkRequest(RequestContext requestContext){
+ FrontierSecurityChecklist checklist = new FrontierSecurityChecklist();
+ String requestOrigin = requestContext.getRequest().getHeader("Origin");
+ if(requestOrigin!=null&&!requestOrigin.equals(appContext.getOrigin())){
+ LOGGER.warn("CSRF Attack attempt detected. Not a valid origin: "+requestOrigin);
+ csrfAttackAttemptEventEvent.fire(new CSRFAttackAttemptEvent());
+ return checklist;
}
-
- return true;
-
+ checklist.setOriginCheck(true);
+ Optional csrfCookie = getCSRFCookie(requestContext.getRequest());
+ if(!csrfCookie.isPresent()){
+ LOGGER.warn("CSRF protection Cookie not found");
+ return checklist;
+ }
+ checklist.setCsrfTokenPresent(true);
+ if(!activeUser.getCsrfToken().equals(csrfCookie.get().getValue())){
+ log.warn("CSRF Token did not match");
+ String jwt = csrfCookie.get().getValue();
+ if(!csrfTokenUtil.checkJwtToken(jwt)) {
+ LOGGER.warn("CSRF Attack attempt detected. Not a valid token");
+ csrfAttackAttemptEventEvent.fire(new CSRFAttackAttemptEvent());
+ checklist.setCsrfTokenExpired(false);
+ checklist.setCsrfTokenValid(false);
+ return checklist;
+ }else {
+ checklist.setCsrfTokenValid(true);
+ checklist.setCsrfTokenExpired(true);
+ return checklist;
+ }
+ }
+ checklist.setCsrfTokenValid(true);
+ return checklist;
}
@PostConstruct
@@ -408,13 +449,31 @@ private void handlerReady(){
}
- @Override
- public boolean handle(RequestContext requestContext) throws ServletException, IOException {
- if(!isAuthenticRequest(requestContext)) {
- log.warn("Not an authentic Request");
+
+ private void emmitCSPHeaders(RequestContext context){
+ HttpServletResponse response = context.getResponse();
+ response.setHeader("Access-Control-Allow-Origin",appContext.getOrigin());
+ response.setHeader("Vary","Origin");
+ }
+
+ private boolean securityCheck(RequestContext context){
+ this.emmitCSPHeaders(context);
+ FrontierSecurityChecklist securityChecklist = checkRequest(requestContext);
+ HttpServletResponse response = requestContext.getResponse();
+ if(!securityChecklist.isOriginCheck()||!securityChecklist.isCsrfTokenPresent()||!securityChecklist.isCsrfTokenValid()) {
+ response.setStatus(403);
+ return false;
+ }else if(securityChecklist.isCsrfTokenExpired()){
+ response.setStatus(419);
return false;
}
+ return true;
+ }
+ @Override
+ public boolean handle(RequestContext requestContext) throws ServletException, IOException {
+ if(!securityCheck(requestContext))
+ return true;
String[] frontierPair = getFrontierPair(requestContext);
String invokedClass = frontierPair[0];
String invokedMethod = frontierPair[1];
@@ -423,39 +482,31 @@ public boolean handle(RequestContext requestContext) throws ServletException, IO
requestContext.getResponse().sendError(400);
return true;
}
-
if(!frontierExists(invokedClass)) {
log.warn("Frontier not found");
return false;
}
-
FrontierClass frontierClass = getFrontier(invokedClass);
if(!frontierClass.hasMethod(invokedMethod)) {
log.warn("Frontier method not found");
return false;
}
-
FrontierMethod frontierMethod = frontierClass.getMethod(invokedMethod);
Map params = matchParams(invokedClass,frontierMethod, requestContext);
FrontierInvoker frontierInvoker = new FrontierInvoker(frontierClass,frontierMethod,params);
boolean invocationOK;
-
try {
-
if(!accessGranted(frontierClass.getObject().getClass(),frontierMethod.getMethod())){
log.warn("Access to frontier method denied");
requestContext.getResponse().sendError(403);
return true;
}
invocationOK = executeFrontier(frontierInvoker,frontierMethod,frontierClass);
-
}catch (Exception ex){
return handleException(ex,invokedClass,invokedMethod);
}
-
if(invocationOK)
okInvocationResult(frontierInvoker,frontierClass,frontierMethod);
-
return invocationOK;
}
diff --git a/Web/src/main/java/org/emerjoin/hi/web/req/MVCReqHandler.java b/Web/src/main/java/org/emerjoin/hi/web/req/MVCReqHandler.java
index 4d61f29..f986c47 100755
--- a/Web/src/main/java/org/emerjoin/hi/web/req/MVCReqHandler.java
+++ b/Web/src/main/java/org/emerjoin/hi/web/req/MVCReqHandler.java
@@ -315,6 +315,12 @@ public boolean handle(RequestContext requestContext) throws ServletException, IO
}
+ private void renewCsrfToken(){
+
+
+
+ }
+
diff --git a/Web/src/main/java/org/emerjoin/hi/web/security/CsrfTokenUtil.java b/Web/src/main/java/org/emerjoin/hi/web/security/CsrfTokenUtil.java
new file mode 100644
index 0000000..728ea6f
--- /dev/null
+++ b/Web/src/main/java/org/emerjoin/hi/web/security/CsrfTokenUtil.java
@@ -0,0 +1,83 @@
+package org.emerjoin.hi.web.security;
+
+import io.jsonwebtoken.*;
+import org.emerjoin.hi.web.config.AppConfigurations;
+import org.emerjoin.hi.web.config.Frontiers;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import javax.crypto.spec.SecretKeySpec;
+import javax.xml.bind.DatatypeConverter;
+import java.security.Key;
+import java.security.SecureRandom;
+import java.util.Date;
+import java.util.UUID;
+
+/**
+ * @author Mario Junior.
+ */
+public class CsrfTokenUtil {
+
+ private static final Logger LOGGER = LoggerFactory.getLogger(CsrfTokenUtil.class);
+
+ private String makeSecureRandom(){
+ AppConfigurations appConfigurations = AppConfigurations.get();
+ Frontiers frontiers = appConfigurations.getFrontiersConfig();
+ Frontiers.Security frontiersSecurity = frontiers.getSecurity();
+ int secureRandomSize = frontiersSecurity.getCrossSiteRequestForgery().getToken().getSecureRandomSize();
+ SecureRandom secureRandom = new SecureRandom();
+ byte[] randomBuffer = new byte[secureRandomSize];
+ secureRandom.nextBytes(randomBuffer);
+ return DatatypeConverter.printHexBinary(randomBuffer);
+ }
+
+ public String makeJwtToken(){
+ AppConfigurations appConfigurations = AppConfigurations.get();
+ Frontiers frontiers = appConfigurations.getFrontiersConfig();
+ Frontiers.Security frontiersSecurity = frontiers.getSecurity();
+ Frontiers.Security.CrossSiteRequestForgery.Token tokenConfig = frontiersSecurity
+ .getCrossSiteRequestForgery()
+ .getToken();
+
+ SignatureAlgorithm signatureAlgorithm = SignatureAlgorithm.valueOf(tokenConfig
+ .getJwtAlgorithm());
+
+ long nowMillis = System.currentTimeMillis();
+ Date now = new Date(nowMillis);
+
+ byte[] secretBytes = DatatypeConverter.parseBase64Binary(tokenConfig.getJwtPassphrase());
+ Key signingKey = new SecretKeySpec(secretBytes, signatureAlgorithm.getJcaName());
+
+ //Let's set the JWT Claims
+ JwtBuilder builder = Jwts.builder().setId(UUID.randomUUID().toString())
+ .setIssuedAt(now)
+ .setSubject(makeSecureRandom())
+ .setIssuer("")
+ .signWith(signatureAlgorithm, signingKey);
+
+ return builder.compact();
+ }
+
+ public boolean checkJwtToken(String jwt){
+ AppConfigurations appConfigurations = AppConfigurations.get();
+ Frontiers frontiers = appConfigurations.getFrontiersConfig();
+ Frontiers.Security frontiersSecurity = frontiers.getSecurity();
+ Frontiers.Security.CrossSiteRequestForgery.Token tokenConfig = frontiersSecurity
+ .getCrossSiteRequestForgery()
+ .getToken();
+ byte[] secretBytes = DatatypeConverter.parseBase64Binary(tokenConfig
+ .getJwtPassphrase());
+ try {
+ Jwts.parser().setSigningKey(secretBytes).parseClaimsJws(jwt)
+ .getBody()
+ .getSubject();
+ return true;
+ }catch (SignatureException ex){
+ return false;
+ }catch (JwtException ex){
+ LOGGER.error("Error validating JSON Web Token: "+jwt, ex);
+ return false;
+ }
+ }
+
+}
diff --git a/Web/src/main/java/org/emerjoin/hi/web/uti/Timing.java b/Web/src/main/java/org/emerjoin/hi/web/util/Timing.java
similarity index 92%
rename from Web/src/main/java/org/emerjoin/hi/web/uti/Timing.java
rename to Web/src/main/java/org/emerjoin/hi/web/util/Timing.java
index 5b47d94..6122849 100644
--- a/Web/src/main/java/org/emerjoin/hi/web/uti/Timing.java
+++ b/Web/src/main/java/org/emerjoin/hi/web/util/Timing.java
@@ -1,4 +1,4 @@
-package org.emerjoin.hi.web.uti;
+package org.emerjoin.hi.web.util;
/**
* @author Mário Júnior