Built motion from commit eeb7beacd.|1.0.21
[motion.git] / server / api / widget / widget.controller.js
index 3ac6d63..da7de69 100644 (file)
@@ -1 +1 @@
-var _0x4f80=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6C\x6F\x64\x61\x73\x68","\x75\x74\x69\x6C","\x73\x65\x71\x75\x65\x6C\x69\x7A\x65","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x2E\x2E\x2F\x2E\x2E\x2F\x75\x74\x69\x6C\x73\x2F\x72\x65\x70\x6F\x72\x74\x5F\x62\x75\x69\x6C\x64","\x62\x6C\x75\x65\x62\x69\x72\x64","\x63\x6F\x75\x6E\x74\x65\x72","\x6C\x6F\x67","\x63\x61\x74\x63\x68","\x73\x65\x6E\x64","\x73\x74\x61\x74\x75\x73","\x74\x68\x65\x6E","\x53\x45\x4C\x45\x43\x54\x20\x25\x73\x20\x46\x52\x4F\x4D\x20\x25\x73","\x73\x65\x6C\x65\x63\x74","\x71\x75\x65\x72\x79","\x74\x61\x62\x6C\x65","\x66\x6F\x72\x6D\x61\x74","\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E","\x20\x57\x48\x45\x52\x45\x20\x25\x73","\x65\x6D\x70\x74\x79","\x20\x41\x4E\x44\x20","\x20\x57\x48\x45\x52\x45\x20","\x20\x3D\x3D\x3D\x3D\x20\x52\x45\x53\x55\x4C\x54\x49\x4E\x47\x20\x51\x55\x45\x52\x59\x20\x3D\x3D\x3D\x3D","\x20\x3D\x3D\x3D\x3D\x3D\x3D\x3D\x3D\x3D\x3D\x3D\x3D\x3D\x3D\x3D\x3D\x3D\x3D\x3D\x3D\x3D\x3D\x3D\x3D\x3D","\x53\x45\x4C\x45\x43\x54","\x51\x75\x65\x72\x79\x54\x79\x70\x65\x73","\x4E\x4F\x20\x53\x55\x46\x46\x49\x43\x49\x45\x4E\x54\x20\x50\x45\x52\x4D\x49\x53\x53\x49\x4F\x4E\x53","\x75\x73\x65\x72","\x62\x75\x69\x6C\x64\x46\x69\x6C\x74\x65\x72","\x61\x6C\x6C","\x66\x69\x65\x6C\x64\x73","\x69\x73\x41\x72\x72\x61\x79","\x70\x61\x72\x73\x65","\x63\x6F\x6C\x75\x6D\x6E","\x61\x6C\x69\x61\x73","\x20\x41\x53\x20\x22","\x22","\x70\x75\x73\x68","\x66\x6F\x72\x45\x61\x63\x68","\x69\x73\x53\x74\x72\x69\x6E\x67","\x6C\x65\x6E\x67\x74\x68","\x2C","\x6A\x6F\x69\x6E","\x2A","\x53\x45\x4C\x45\x43\x54\x20\x25\x73\x20\x46\x52\x4F\x4D\x20\x25\x73\x20\x57\x48\x45\x52\x45\x20\x25\x73","\x72\x65\x70\x6F\x72\x74","\x70\x69\x65\x63\x68\x61\x72\x74","","\x75\x6E\x64\x65\x66\x69\x6E\x65\x64","\x53\x45\x4C\x45\x43\x54\x20\x25\x73\x20\x46\x52\x4F\x4D\x20\x25\x73\x25\x73"];_0x4f80[0];var _=require(_0x4f80[1]);var util=require(_0x4f80[2]);var sequelize=require(_0x4f80[4])[_0x4f80[3]];var reportBuildUtils=require(_0x4f80[5]);var Promise=require(_0x4f80[6]);exports[_0x4f80[7]]= function(_0xa72ex6,_0xa72ex7){return Promise[_0x4f80[30]]([])[_0x4f80[12]](function(){return _0xa72ex6[_0x4f80[15]][_0x4f80[16]]})[_0x4f80[12]](reportBuildUtils[_0x4f80[29]](_0xa72ex6[_0x4f80[28]]))[_0x4f80[12]](function(_0xa72exa){var _0xa72exb=util[_0x4f80[17]](_0x4f80[13],_0xa72ex6[_0x4f80[15]][_0x4f80[14]],_0xa72ex6[_0x4f80[15]][_0x4f80[16]]);if(_0xa72ex6[_0x4f80[15]][_0x4f80[18]]){_0xa72exb+= util[_0x4f80[17]](_0x4f80[19],decodeURIComponent(_0xa72ex6[_0x4f80[15]][_0x4f80[18]]))};if(!_0xa72exa|| _0xa72exa!== _0x4f80[20]){if(_0xa72exa){_0xa72exb+= _0xa72ex6[_0x4f80[15]][_0x4f80[18]]?_0x4f80[21]+ _0xa72exa:_0x4f80[22]+ _0xa72exa};console[_0x4f80[8]](_0x4f80[23]);console[_0x4f80[8]](_0xa72exb);console[_0x4f80[8]](_0x4f80[24]);return sequelize[_0x4f80[15]](_0xa72exb,{type:sequelize[_0x4f80[26]][_0x4f80[25]]})}else {console[_0x4f80[8]](_0x4f80[23]);console[_0x4f80[8]](_0x4f80[27]);console[_0x4f80[8]](_0x4f80[24]);return []}})[_0x4f80[12]](function(_0xa72ex9){return _0xa72ex7[_0x4f80[11]](200)[_0x4f80[10]]({result:_0xa72ex9})})[_0x4f80[9]](function(_0xa72ex8){console[_0x4f80[8]](_0xa72ex8);return handleError(_0xa72ex7,_0xa72ex8)})};exports[_0x4f80[16]]= function(_0xa72ex6,_0xa72ex7){var _0xa72exc=[];var _0xa72exd;if(_0xa72ex6[_0x4f80[15]][_0x4f80[31]]){if(_[_0x4f80[32]](_0xa72ex6[_0x4f80[15]][_0x4f80[31]])){_0xa72ex6[_0x4f80[15]][_0x4f80[31]][_0x4f80[39]](function(_0xa72exe){_0xa72exd= JSON[_0x4f80[33]](_0xa72exe);if(_0xa72exd[_0x4f80[34]]&& _0xa72exd[_0x4f80[35]]){_0xa72exc[_0x4f80[38]](_0xa72exd[_0x4f80[34]]+ _0x4f80[36]+ _0xa72exd[_0x4f80[35]]+ _0x4f80[37])}})}else {if(_[_0x4f80[40]](_0xa72ex6[_0x4f80[15]][_0x4f80[31]])){_0xa72exd= JSON[_0x4f80[33]](_0xa72ex6[_0x4f80[15]][_0x4f80[31]]);if(_0xa72exd[_0x4f80[34]]&& _0xa72exd[_0x4f80[35]]){_0xa72exc[_0x4f80[38]](_0xa72exd[_0x4f80[34]]+ _0x4f80[36]+ _0xa72exd[_0x4f80[35]]+ _0x4f80[37])}}}};var _0xa72exf=_0xa72exc[_0x4f80[41]]?_0xa72exc[_0x4f80[43]](_0x4f80[42]):_0x4f80[44];sequelize[_0x4f80[15]](util[_0x4f80[17]](_0x4f80[45],_0xa72exf,_0x4f80[46]+ _0xa72ex6[_0x4f80[15]][_0x4f80[16]],decodeURIComponent(_0xa72ex6[_0x4f80[15]][_0x4f80[18]])),{type:sequelize[_0x4f80[26]][_0x4f80[25]]})[_0x4f80[12]](function(_0xa72ex9){return _0xa72ex7[_0x4f80[11]](200)[_0x4f80[10]](_0xa72ex9)})[_0x4f80[9]](function(_0xa72ex8){return handleError(_0xa72ex7,_0xa72ex8)})};exports[_0x4f80[47]]= function(_0xa72ex6,_0xa72ex7){return Promise[_0x4f80[30]]([])[_0x4f80[12]](function(){return _0xa72ex6[_0x4f80[15]][_0x4f80[16]]})[_0x4f80[12]](reportBuildUtils[_0x4f80[29]](_0xa72ex6[_0x4f80[28]]))[_0x4f80[12]](function(_0xa72exa){var _0xa72exc=[];var _0xa72exd;if(_0xa72ex6[_0x4f80[15]][_0x4f80[31]]){if(_[_0x4f80[32]](_0xa72ex6[_0x4f80[15]][_0x4f80[31]])){_0xa72ex6[_0x4f80[15]][_0x4f80[31]][_0x4f80[39]](function(_0xa72exe){_0xa72exd= JSON[_0x4f80[33]](_0xa72exe);if(_0xa72exd[_0x4f80[34]]&& _0xa72exd[_0x4f80[35]]){_0xa72exc[_0x4f80[38]](_0xa72exd[_0x4f80[34]]+ _0x4f80[36]+ _0xa72exd[_0x4f80[35]]+ _0x4f80[37])}})}else {if(_[_0x4f80[40]](_0xa72ex6[_0x4f80[15]][_0x4f80[31]])){_0xa72exd= JSON[_0x4f80[33]](_0xa72ex6[_0x4f80[15]][_0x4f80[31]]);if(_0xa72exd[_0x4f80[34]]&& _0xa72exd[_0x4f80[35]]){_0xa72exc[_0x4f80[38]](_0xa72exd[_0x4f80[34]]+ _0x4f80[36]+ _0xa72exd[_0x4f80[35]]+ _0x4f80[37])}}}};var _0xa72exf=_0xa72exc[_0x4f80[41]]?_0xa72exc[_0x4f80[43]](_0x4f80[42]):_0x4f80[44];var _0xa72ex10=_0x4f80[48];if(_0xa72ex6[_0x4f80[15]][_0x4f80[18]]!== _0x4f80[49]){_0xa72ex10= util[_0x4f80[17]](_0x4f80[19],decodeURIComponent(_0xa72ex6[_0x4f80[15]][_0x4f80[18]]))};if(!_0xa72exa|| _0xa72exa!== _0x4f80[20]){if(_0xa72exa){_0xa72ex10+= _0x4f80[21]+ _0xa72exa};var _0xa72exb=util[_0x4f80[17]](_0x4f80[50],_0xa72exf,_0xa72ex6[_0x4f80[15]][_0x4f80[16]],_0xa72ex10);console[_0x4f80[8]](_0x4f80[23]);console[_0x4f80[8]](_0xa72exb);console[_0x4f80[8]](_0x4f80[24]);return sequelize[_0x4f80[15]](_0xa72exb,{type:sequelize[_0x4f80[26]][_0x4f80[25]]})}else {console[_0x4f80[8]](_0x4f80[23]);console[_0x4f80[8]](_0x4f80[27]);console[_0x4f80[8]](_0x4f80[24]);return []}})[_0x4f80[12]](function(_0xa72ex9){return _0xa72ex7[_0x4f80[11]](200)[_0x4f80[10]]({result:_0xa72ex9})})[_0x4f80[9]](function(_0xa72ex8){return handleError(_0xa72ex7,_0xa72ex8)})};function handleError(_0xa72ex7,_0xa72ex8){return _0xa72ex7[_0x4f80[11]](500)[_0x4f80[10]](_0xa72ex8)}
\ No newline at end of file
+var _0x46c2=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6C\x6F\x64\x61\x73\x68","\x75\x74\x69\x6C","\x6D\x6F\x6D\x65\x6E\x74","\x61\x70\x69","\x2E\x2E\x2F\x2E\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x6C\x6F\x67\x67\x65\x72\x2E\x6A\x73","\x73\x65\x71\x75\x65\x6C\x69\x7A\x65\x5F\x72\x65\x61\x64\x4F\x6E\x6C\x79","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x2E\x2E\x2F\x2E\x2E\x2F\x75\x74\x69\x6C\x73\x2F\x72\x65\x70\x6F\x72\x74\x5F\x62\x75\x69\x6C\x64","\x62\x6C\x75\x65\x62\x69\x72\x64","\x75\x73\x65\x72\x73","\x63\x6D\x5F\x63\x6F\x6E\x74\x61\x63\x74\x73","\x76\x6F\x69\x63\x65\x5F\x72\x65\x63\x6F\x72\x64\x69\x6E\x67\x73","\x75\x73\x65\x72\x5F\x68\x61\x73\x5F\x76\x6F\x69\x63\x65\x5F\x71\x75\x65\x75\x65\x73","\x63\x68\x61\x74\x5F\x72\x6F\x6F\x6D\x73","\x63\x68\x61\x74\x5F\x6D\x65\x73\x73\x61\x67\x65\x73","\x6D\x61\x69\x6C\x5F\x72\x6F\x6F\x6D\x73","\x6D\x61\x69\x6C\x5F\x6D\x65\x73\x73\x61\x67\x65\x73","\x66\x61\x78\x5F\x72\x6F\x6F\x6D\x73","\x66\x61\x78\x5F\x6D\x65\x73\x73\x61\x67\x65\x73","\x73\x6D\x73\x5F\x72\x6F\x6F\x6D\x73","\x73\x6D\x73\x5F\x6D\x65\x73\x73\x61\x67\x65\x73","\x6F\x70\x65\x6E\x63\x68\x61\x6E\x6E\x65\x6C\x5F\x72\x6F\x6F\x6D\x73","\x6F\x70\x65\x6E\x63\x68\x61\x6E\x6E\x65\x6C\x5F\x6D\x65\x73\x73\x61\x67\x65\x73","\x63\x6F\x75\x6E\x74\x65\x72","\x63\x61\x74\x63\x68","\x73\x65\x6E\x64","\x73\x74\x61\x74\x75\x73","\x74\x68\x65\x6E","\x53\x45\x4C\x45\x43\x54\x20\x25\x73\x20\x46\x52\x4F\x4D\x20\x25\x73","\x73\x65\x6C\x65\x63\x74","\x71\x75\x65\x72\x79","\x74\x61\x62\x6C\x65","\x66\x6F\x72\x6D\x61\x74","\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E","\x6E\x75\x6C\x6C","\x20\x57\x48\x45\x52\x45\x20\x25\x73","\x20\x41\x4E\x44\x20\x63\x72\x65\x61\x74\x65\x64\x41\x74\x20\x3E\x3D\x20\x27\x25\x73\x27","\x20\x57\x48\x45\x52\x45\x20\x63\x72\x65\x61\x74\x65\x64\x41\x74\x20\x3E\x3D\x20\x27\x25\x73\x27","\x59\x59\x59\x59\x2D\x4D\x4D\x2D\x44\x44\x20\x48\x48\x3A\x6D\x6D\x3A\x73\x73","\x64\x61\x79","\x73\x74\x61\x72\x74\x4F\x66","\x65\x6D\x70\x74\x79","\x20\x41\x4E\x44\x20","\x20\x57\x48\x45\x52\x45\x20","\x20\x3D\x3D\x3D\x3D\x20\x52\x45\x53\x55\x4C\x54\x49\x4E\x47\x20\x51\x55\x45\x52\x59\x20\x3D\x3D\x3D\x3D","\x64\x65\x62\x75\x67","\x20\x3D\x3D\x3D\x3D\x3D\x3D\x3D\x3D\x3D\x3D\x3D\x3D\x3D\x3D\x3D\x3D\x3D\x3D\x3D\x3D\x3D\x3D\x3D\x3D\x3D","\x53\x45\x4C\x45\x43\x54","\x51\x75\x65\x72\x79\x54\x79\x70\x65\x73","\x65\x72\x72\x6F\x72","\x4E\x4F\x20\x53\x55\x46\x46\x49\x43\x49\x45\x4E\x54\x20\x50\x45\x52\x4D\x49\x53\x53\x49\x4F\x4E\x53","\x75\x73\x65\x72","\x62\x75\x69\x6C\x64\x46\x69\x6C\x74\x65\x72","\x72\x65\x73\x6F\x6C\x76\x65","\x70\x69\x65\x63\x68\x61\x72\x74","\x66\x69\x65\x6C\x64\x73","\x69\x73\x41\x72\x72\x61\x79","\x70\x61\x72\x73\x65","\x63\x6F\x6C\x75\x6D\x6E","\x61\x6C\x69\x61\x73","\x20\x41\x53\x20\x22","\x22","\x70\x75\x73\x68","\x66\x6F\x72\x45\x61\x63\x68","\x69\x73\x53\x74\x72\x69\x6E\x67","\x6C\x65\x6E\x67\x74\x68","\x2C","\x6A\x6F\x69\x6E","\x2A","","\x75\x6E\x64\x65\x66\x69\x6E\x65\x64","\x53\x45\x4C\x45\x43\x54\x20\x25\x73\x20\x46\x52\x4F\x4D\x20\x25\x73\x25\x73","\x61\x6C\x6C","\x73\x74\x61\x63\x6B"];_0x46c2[0];var _=require(_0x46c2[1]);var util=require(_0x46c2[2]);var moment=require(_0x46c2[3]);var logger=require(_0x46c2[5])(_0x46c2[4]);var sequelize_readOnly=require(_0x46c2[7])[_0x46c2[6]];var reportBuildUtils=require(_0x46c2[8]);var Promise=require(_0x46c2[9]);function toAddDate(_0xec0ax9){switch(_0xec0ax9){case _0x46c2[10]:;case _0x46c2[11]:;case _0x46c2[12]:;case _0x46c2[13]:;case _0x46c2[14]:;case _0x46c2[15]:;case _0x46c2[16]:;case _0x46c2[17]:;case _0x46c2[18]:;case _0x46c2[19]:;case _0x46c2[20]:;case _0x46c2[21]:;case _0x46c2[22]:;case _0x46c2[23]:return false;default:return true}}exports[_0x46c2[24]]= function(_0xec0axa,_0xec0axb){return Promise[_0x46c2[54]]()[_0x46c2[28]](function(){return _0xec0axa[_0x46c2[31]][_0x46c2[32]]})[_0x46c2[28]](reportBuildUtils[_0x46c2[53]](_0xec0axa[_0x46c2[52]]))[_0x46c2[28]](function(_0xec0axe){var _0xec0axf=util[_0x46c2[33]](_0x46c2[29],_0xec0axa[_0x46c2[31]][_0x46c2[30]],_0xec0axa[_0x46c2[31]][_0x46c2[32]]);if(_0xec0axa[_0x46c2[31]][_0x46c2[34]]&& _0xec0axa[_0x46c2[31]][_0x46c2[34]]!== _0x46c2[35]){_0xec0axf+= util[_0x46c2[33]](_0x46c2[36],decodeURIComponent(_0xec0axa[_0x46c2[31]][_0x46c2[34]]))};if(toAddDate(_0xec0axa[_0x46c2[31]][_0x46c2[32]])){_0xec0axf+= util[_0x46c2[33]]((_0xec0axa[_0x46c2[31]][_0x46c2[34]]&& _0xec0axa[_0x46c2[31]][_0x46c2[34]]!== _0x46c2[35])?_0x46c2[37]:_0x46c2[38],moment()[_0x46c2[41]](_0x46c2[40])[_0x46c2[33]](_0x46c2[39]))};if(!_0xec0axe|| _0xec0axe!== _0x46c2[42]){if(_0xec0axe){_0xec0axf+= _0xec0axa[_0x46c2[31]][_0x46c2[34]]?_0x46c2[43]+ _0xec0axe:_0x46c2[44]+ _0xec0axe};logger[_0x46c2[46]](_0x46c2[45]);logger[_0x46c2[46]](_0xec0axf);logger[_0x46c2[46]](_0x46c2[47]);return sequelize_readOnly[_0x46c2[31]](_0xec0axf,{type:sequelize_readOnly[_0x46c2[49]][_0x46c2[48]]})}else {logger[_0x46c2[50]](_0x46c2[45]);logger[_0x46c2[50]](_0x46c2[51]);logger[_0x46c2[50]](_0x46c2[47]);return []}})[_0x46c2[28]](function(_0xec0axd){return _0xec0axb[_0x46c2[27]](200)[_0x46c2[26]]({result:_0xec0axd})})[_0x46c2[25]](function(_0xec0axc){return handleError(_0xec0axb,_0xec0axc)})};exports[_0x46c2[55]]= function(_0xec0axa,_0xec0axb){return Promise[_0x46c2[73]]([])[_0x46c2[28]](function(){return _0xec0axa[_0x46c2[31]][_0x46c2[32]]})[_0x46c2[28]](reportBuildUtils[_0x46c2[53]](_0xec0axa[_0x46c2[52]]))[_0x46c2[28]](function(_0xec0axe){var _0xec0ax10=[];var _0xec0ax11;if(_0xec0axa[_0x46c2[31]][_0x46c2[56]]){if(_[_0x46c2[57]](_0xec0axa[_0x46c2[31]][_0x46c2[56]])){_0xec0axa[_0x46c2[31]][_0x46c2[56]][_0x46c2[64]](function(_0xec0ax12){_0xec0ax11= JSON[_0x46c2[58]](_0xec0ax12);if(_0xec0ax11[_0x46c2[59]]&& _0xec0ax11[_0x46c2[60]]){_0xec0ax10[_0x46c2[63]](_0xec0ax11[_0x46c2[59]]+ _0x46c2[61]+ _0xec0ax11[_0x46c2[60]]+ _0x46c2[62])}})}else {if(_[_0x46c2[65]](_0xec0axa[_0x46c2[31]][_0x46c2[56]])){_0xec0ax11= JSON[_0x46c2[58]](_0xec0axa[_0x46c2[31]][_0x46c2[56]]);if(_0xec0ax11[_0x46c2[59]]&& _0xec0ax11[_0x46c2[60]]){_0xec0ax10[_0x46c2[63]](_0xec0ax11[_0x46c2[59]]+ _0x46c2[61]+ _0xec0ax11[_0x46c2[60]]+ _0x46c2[62])}}}};var _0xec0ax13=_0xec0ax10[_0x46c2[66]]?_0xec0ax10[_0x46c2[68]](_0x46c2[67]):_0x46c2[69];var _0xec0ax14=_0x46c2[70];if(_0xec0axa[_0x46c2[31]][_0x46c2[34]]&& _0xec0axa[_0x46c2[31]][_0x46c2[34]]!== _0x46c2[71]&& _0xec0axa[_0x46c2[31]][_0x46c2[34]]!== _0x46c2[35]){_0xec0ax14= util[_0x46c2[33]](_0x46c2[36],decodeURIComponent(_0xec0axa[_0x46c2[31]][_0x46c2[34]]))};if(toAddDate(_0xec0axa[_0x46c2[31]][_0x46c2[32]])){_0xec0ax14+= util[_0x46c2[33]]((_0xec0axa[_0x46c2[31]][_0x46c2[34]]&& _0xec0axa[_0x46c2[31]][_0x46c2[34]]!== _0x46c2[35])?_0x46c2[37]:_0x46c2[38],moment()[_0x46c2[41]](_0x46c2[40])[_0x46c2[33]](_0x46c2[39]))};if(!_0xec0axe|| _0xec0axe!== _0x46c2[42]){if(_0xec0axe){_0xec0ax14+= _0xec0ax14?_0x46c2[43]+ _0xec0axe:_0x46c2[44]+ _0xec0axe};var _0xec0axf=util[_0x46c2[33]](_0x46c2[72],_0xec0ax13,_0xec0axa[_0x46c2[31]][_0x46c2[32]],_0xec0ax14);logger[_0x46c2[46]](_0x46c2[45]);logger[_0x46c2[46]](_0xec0axf);logger[_0x46c2[46]](_0x46c2[47]);return sequelize_readOnly[_0x46c2[31]](_0xec0axf,{type:sequelize_readOnly[_0x46c2[49]][_0x46c2[48]]})}else {logger[_0x46c2[50]](_0x46c2[45]);logger[_0x46c2[50]](_0x46c2[51]);logger[_0x46c2[50]](_0x46c2[47]);return []}})[_0x46c2[28]](function(_0xec0axd){return _0xec0axb[_0x46c2[27]](200)[_0x46c2[26]]({result:_0xec0axd})})[_0x46c2[25]](function(_0xec0axc){return handleError(_0xec0axb,_0xec0axc)})};function handleError(_0xec0axb,_0xec0axc){logger[_0x46c2[50]](_0xec0axc[_0x46c2[74]]);return _0xec0axb[_0x46c2[27]](500)[_0x46c2[26]](_0xec0axc)}
\ No newline at end of file