Built motion from commit 1038d87.|0.0.141
[motion.git] / server / config / automations / fax.js
index 24406b4..bc899e6 100644 (file)
@@ -1 +1 @@
-var _0x289e=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6C\x6F\x64\x61\x73\x68","\x2E\x2E\x2F\x65\x6E\x76\x69\x72\x6F\x6E\x6D\x65\x6E\x74","\x6D\x6F\x6D\x65\x6E\x74","\x73\x65\x71\x75\x65\x6C\x69\x7A\x65","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x41\x75\x74\x6F\x6D\x61\x74\x69\x6F\x6E","\x46\x61\x78\x52\x6F\x6F\x6D","\x53\x65\x74\x74\x69\x6E\x67\x73","\x45\x78\x65\x63\x75\x74\x69\x6E\x67\x20\x4D\x61\x69\x6C\x20\x41\x75\x74\x6F\x6D\x61\x74\x69\x6F\x6E\x20","\x6C\x6F\x67","\x46\x61\x78\x20\x41\x75\x74\x6F\x6D\x61\x74\x69\x6F\x6E\x20\x65\x78\x65\x63\x20\x65\x72\x72\x6F\x72","\x63\x61\x74\x63\x68","\x69\x64","\x64\x61\x74\x61\x31","\x73\x74\x61\x74\x75\x73","\x61\x63\x74\x69\x6F\x6E","\x66\x6F\x72\x45\x61\x63\x68","\x41\x63\x74\x69\x6F\x6E\x73","\x74\x68\x65\x6E","\x64\x61\x74\x61\x56\x61\x6C\x75\x65\x73","\x70\x75\x73\x68","\x24\x61\x6E\x64","\x77\x68\x65\x72\x65","\x41\x6C\x6C","\x24\x6F\x72","\x41\x6E\x79","\x66\x69\x6E\x64\x41\x6C\x6C","\x66\x69\x6E\x64\x42\x79\x49\x64","\x61\x6C\x6C","\x73\x63\x6F\x70\x65","\x41\x75\x74\x6F\x6D\x61\x74\x69\x63\x20\x6D\x61\x69\x6C\x20\x73\x74\x61\x74\x75\x73\x20\x65\x72\x72\x6F\x72","\x75\x70\x64\x61\x74\x65","\x66\x69\x65\x6C\x64","\x76\x61\x6C\x75\x65","\x65\x71\x75\x61\x6C\x73","\x6E\x6F\x74\x5F\x65\x71\x75\x61\x6C\x73","\x6F\x70\x65\x72\x61\x74\x6F\x72","\x59\x59\x59\x59\x2D\x4D\x4D\x2D\x44\x44\x20\x48\x48\x3A\x6D\x6D\x3A\x73\x73","\x66\x6F\x72\x6D\x61\x74","\x68\x6F\x75\x72\x73","\x73\x75\x62\x74\x72\x61\x63\x74","\x67\x72\x65\x61\x74\x65\x72","\x67\x72\x65\x61\x74\x65\x72\x5F\x6F\x72\x5F\x65\x71\x75\x61\x6C","\x6C\x65\x73\x73","\x6C\x65\x73\x73\x5F\x6F\x72\x5F\x65\x71\x75\x61\x6C","\x63\x72\x65\x61\x74\x65\x64\x41\x74","\x46\x61\x78\x20\x41\x75\x74\x6F\x6D\x61\x74\x69\x6F\x6E\x20","\x20\x73\x65\x74\x20\x77\x69\x74\x68\x20\x74\x69\x6D\x65\x6F\x75\x74\x20","\x74\x69\x6D\x65\x6F\x75\x74","\x69\x6E\x74\x65\x72\x76\x61\x6C","\x65\x78\x70\x6F\x72\x74\x73","\x20\x63\x72\x65\x61\x74\x65\x64\x2C\x20\x74\x68\x65\x20\x73\x74\x61\x74\x75\x73\x20\x69\x73\x20","\x63\x68\x61\x6E\x6E\x65\x6C","\x66\x61\x78","\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65","\x20\x75\x70\x64\x61\x74\x65\x64\x2C\x20\x74\x68\x65\x20\x73\x74\x61\x74\x75\x73\x20\x69\x73\x20","\x46\x61\x78\x20\x61\x75\x74\x6F\x6D\x61\x74\x69\x6F\x6E\x20\x75\x6E\x73\x65\x74\x20","\x61\x66\x74\x65\x72\x55\x70\x64\x61\x74\x65","\x20\x64\x65\x6C\x65\x74\x65\x64","\x61\x66\x74\x65\x72\x44\x65\x6C\x65\x74\x65","\x46\x61\x78\x20\x41\x75\x74\x6F\x6D\x61\x74\x69\x6F\x6E\x20\x69\x6E\x69\x74\x20\x65\x72\x72\x6F\x72"];_0x289e[0];var _=require(_0x289e[1]);var config=require(_0x289e[2]);var moment=require(_0x289e[3]);var sequelize=require(_0x289e[5])[_0x289e[4]];var Automation=require(_0x289e[5])[_0x289e[6]];var FaxRoom=require(_0x289e[5])[_0x289e[7]];var Settings=require(_0x289e[5])[_0x289e[8]];var automationTimeout;var activeFaxAutomations={};function executeAutomation(_0x77a1xb){console[_0x289e[10]](_0x289e[9],_0x77a1xb);var _0x77a1xc;return Automation[_0x289e[30]](_0x289e[29])[_0x289e[28]](_0x77a1xb)[_0x289e[19]](function(_0x77a1x11){_0x77a1xc=_0x77a1x11;var _0x77a1x12={where:{$and:[],$or:[]}};_0x77a1x11[_0x289e[24]][_0x289e[17]](function(_0x77a1x13){_0x77a1x12[_0x289e[23]][_0x289e[22]][_0x289e[21]](getCondition(_0x77a1x13[_0x289e[20]]))});_0x77a1x11[_0x289e[26]][_0x289e[17]](function(_0x77a1x13){_0x77a1x12[_0x289e[23]][_0x289e[25]][_0x289e[21]](getCondition(_0x77a1x13[_0x289e[20]]))});return FaxRoom[_0x289e[27]](_0x77a1x12)})[_0x289e[19]](function(_0x77a1xe){_0x77a1xe[_0x289e[17]](function(_0x77a1xf){_0x77a1xc[_0x289e[18]][_0x289e[17]](function(_0x77a1x10){switch(_0x77a1x10[_0x289e[16]]){case _0x289e[15]:setStatus(_0x77a1xf[_0x289e[13]],_0x77a1x10[_0x289e[14]]);break;default:}})})})[_0x289e[12]](function(_0x77a1xd){console[_0x289e[10]](_0x289e[11],_0x77a1xd)})}function setStatus(_0x77a1x15,_0x77a1x16){return FaxRoom[_0x289e[32]]({status:_0x77a1x16},{where:{id:_0x77a1x15}})[_0x289e[12]](function(_0x77a1xd){console[_0x289e[10]](_0x289e[31],_0x77a1xd)})}function getCondition(_0x77a1x13){var _0x77a1x18={};switch(_0x77a1x13[_0x289e[33]]){case _0x289e[15]:switch(_0x77a1x13[_0x289e[37]]){case _0x289e[35]:_0x77a1x18[_0x77a1x13[_0x289e[33]]]=_0x77a1x13[_0x289e[34]];break;case _0x289e[36]:_0x77a1x18[_0x77a1x13[_0x289e[33]]]={$ne:_0x77a1x13[_0x289e[34]]};break;default:};break;case _0x289e[46]:var _0x77a1x19=moment()[_0x289e[41]](parseInt(_0x77a1x13[_0x289e[34]],10),_0x289e[40])[_0x289e[39]](_0x289e[38]);switch(_0x77a1x13[_0x289e[37]]){case _0x289e[42]:_0x77a1x18[_0x77a1x13[_0x289e[33]]]={lt:_0x77a1x19};break;case _0x289e[43]:_0x77a1x18[_0x77a1x13[_0x289e[33]]]={$lte:_0x77a1x19};break;case _0x289e[44]:_0x77a1x18[_0x77a1x13[_0x289e[33]]]={$gt:_0x77a1x19};break;case _0x289e[45]:_0x77a1x18[_0x77a1x13[_0x289e[33]]]={$gte:_0x77a1x19};break;default:};break;default:};return _0x77a1x18}function createInterval(_0x77a1x11){console[_0x289e[10]](_0x289e[47],_0x77a1x11[_0x289e[13]],_0x289e[48],_0x77a1x11[_0x289e[49]]*60*1000);activeFaxAutomations[_0x289e[50]+_0x77a1x11[_0x289e[13]]]=setInterval(function(){executeAutomation(_0x77a1x11[_0x289e[13]])},_0x77a1x11[_0x289e[49]]*60*1000)}module[_0x289e[51]]=function(){Automation[_0x289e[55]](function(_0x77a1x1b,_0x77a1x1c){console[_0x289e[10]](_0x289e[47],_0x77a1x1b[_0x289e[13]],_0x289e[52],_0x77a1x1b[_0x289e[15]]);if(_0x77a1x1b[_0x289e[15]]&&_0x77a1x1b[_0x289e[53]]===_0x289e[54]){createInterval(_0x77a1x1b)}});Automation[_0x289e[58]](function(_0x77a1x1b,_0x77a1x1c){console[_0x289e[10]](_0x289e[47],_0x77a1x1b[_0x289e[13]],_0x289e[56],_0x77a1x1b[_0x289e[15]]);if(activeFaxAutomations[_0x289e[50]+_0x77a1x1b[_0x289e[13]]]){console[_0x289e[10]](_0x289e[57],_0x77a1x1b[_0x289e[13]]);clearInterval(activeFaxAutomations[_0x289e[50]+_0x77a1x1b[_0x289e[13]]]);delete activeFaxAutomations[_0x289e[50]+_0x77a1x1b[_0x289e[13]]]};if(_0x77a1x1b[_0x289e[15]]&&_0x77a1x1b[_0x289e[53]]===_0x289e[54]){createInterval(_0x77a1x1b)}});Automation[_0x289e[60]](function(_0x77a1x1b,_0x77a1x1c){console[_0x289e[10]](_0x289e[47],_0x77a1x1b[_0x289e[13]],_0x289e[59]);if(activeFaxAutomations[_0x289e[50]+_0x77a1x1b[_0x289e[13]]]){console[_0x289e[10]](_0x289e[57],_0x77a1x1b[_0x289e[13]]);clearInterval(activeFaxAutomations[_0x289e[50]+_0x77a1x1b[_0x289e[13]]]);delete activeFaxAutomations[_0x289e[50]+_0x77a1x1b[_0x289e[13]]]}});return Automation[_0x289e[30]](_0x289e[29])[_0x289e[27]]({where:{status:true,channel:_0x289e[54]},attributes:[_0x289e[13],_0x289e[49]]})[_0x289e[19]](function(_0x77a1x1d){_0x77a1x1d[_0x289e[17]](function(_0x77a1x11){createInterval(_0x77a1x11)})})[_0x289e[12]](function(_0x77a1xd){console[_0x289e[10]](_0x289e[61],_0x77a1xd)})}
\ No newline at end of file
+var _0xc3f1=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6C\x6F\x64\x61\x73\x68","\x6D\x6F\x6D\x65\x6E\x74","\x41\x75\x74\x6F\x6D\x61\x74\x69\x6F\x6E","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x46\x61\x78\x52\x6F\x6F\x6D","\x5B\x41\x75\x74\x6F\x6D\x61\x74\x69\x6F\x6E\x5D\x20\x45\x78\x65\x63\x75\x74\x69\x6E\x67\x20\x46\x61\x78","\x6C\x6F\x67","\x5B\x41\x75\x74\x6F\x6D\x61\x74\x69\x6F\x6E\x5D\x20\x45\x72\x72\x6F\x72\x20\x69\x6E\x20\x46\x61\x78\x20\x65\x78\x65\x63","\x65\x72\x72\x6F\x72","\x5B\x41\x75\x74\x6F\x6D\x61\x74\x69\x6F\x6E\x5D\x20\x4D\x65\x73\x73\x61\x67\x65\x3A","\x6D\x65\x73\x73\x61\x67\x65","\x5B\x41\x75\x74\x6F\x6D\x61\x74\x69\x6F\x6E\x5D\x20\x53\x74\x61\x63\x6B\x3A","\x73\x74\x61\x63\x6B","\x63\x61\x74\x63\x68","\x69\x64","\x64\x61\x74\x61\x31","\x73\x74\x61\x74\x75\x73","\x61\x63\x74\x69\x6F\x6E","\x66\x6F\x72\x45\x61\x63\x68","\x41\x63\x74\x69\x6F\x6E\x73","\x74\x68\x65\x6E","\x64\x61\x74\x61\x56\x61\x6C\x75\x65\x73","\x70\x75\x73\x68","\x41\x6C\x6C","\x41\x6E\x79","\x6C\x65\x6E\x67\x74\x68","\x24\x61\x6E\x64","\x77\x68\x65\x72\x65","\x24\x6F\x72","\x66\x69\x6E\x64\x41\x6C\x6C","\x66\x69\x6E\x64\x42\x79\x49\x64","\x61\x6C\x6C","\x73\x63\x6F\x70\x65","\x5B\x41\x75\x74\x6F\x6D\x61\x74\x69\x6F\x6E\x5D\x20\x45\x72\x72\x6F\x72\x20\x69\x6E\x20\x46\x61\x78\x20\x73\x65\x74\x53\x74\x61\x74\x75\x73","\x75\x70\x64\x61\x74\x65","\x66\x69\x65\x6C\x64","\x76\x61\x6C\x75\x65","\x65\x71\x75\x61\x6C\x73","\x6E\x6F\x74\x5F\x65\x71\x75\x61\x6C\x73","\x6F\x70\x65\x72\x61\x74\x6F\x72","\x59\x59\x59\x59\x2D\x4D\x4D\x2D\x44\x44\x20\x48\x48\x3A\x6D\x6D\x3A\x73\x73","\x66\x6F\x72\x6D\x61\x74","\x68\x6F\x75\x72\x73","\x73\x75\x62\x74\x72\x61\x63\x74","\x67\x72\x65\x61\x74\x65\x72","\x67\x72\x65\x61\x74\x65\x72\x5F\x6F\x72\x5F\x65\x71\x75\x61\x6C","\x6C\x65\x73\x73","\x6C\x65\x73\x73\x5F\x6F\x72\x5F\x65\x71\x75\x61\x6C","\x63\x72\x65\x61\x74\x65\x64\x41\x74","\x5B\x41\x75\x74\x6F\x6D\x61\x74\x69\x6F\x6E\x5D\x20\x4D\x61\x69\x6C","\x73\x65\x74\x20\x77\x69\x74\x68\x20\x74\x69\x6D\x65\x6F\x75\x74","\x74\x69\x6D\x65\x6F\x75\x74","\x69\x6E\x74\x65\x72\x76\x61\x6C","\x65\x78\x70\x6F\x72\x74\x73","\x5B\x41\x75\x74\x6F\x6D\x61\x74\x69\x6F\x6E\x5D\x20\x46\x61\x78\x20\x73\x65\x72\x76\x69\x63\x65\x20\x73\x74\x61\x72\x74\x65\x64","\x63\x68\x61\x6E\x6E\x65\x6C","\x66\x61\x78","\x5B\x41\x75\x74\x6F\x6D\x61\x74\x69\x6F\x6E\x5D\x20\x46\x61\x78","\x63\x72\x65\x61\x74\x65\x64\x2C\x20\x74\x68\x65\x20\x73\x74\x61\x74\x75\x73\x20\x69\x73","\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65","\x75\x70\x64\x61\x74\x65\x64\x2C\x20\x74\x68\x65\x20\x73\x74\x61\x74\x75\x73\x20\x69\x73","\x5B\x41\x75\x74\x6F\x6D\x61\x74\x69\x6F\x6E\x5D\x20\x46\x61\x78\x20\x75\x6E\x73\x65\x74\x20","\x61\x66\x74\x65\x72\x55\x70\x64\x61\x74\x65","\x20\x64\x65\x6C\x65\x74\x65\x64","\x61\x66\x74\x65\x72\x44\x65\x6C\x65\x74\x65","\x5B\x41\x75\x74\x6F\x6D\x61\x74\x69\x6F\x6E\x5D\x20\x45\x72\x72\x6F\x72\x20\x69\x6E\x20\x4D\x61\x69\x6C\x20\x69\x6E\x69\x74","\x5B\x41\x75\x74\x6F\x6D\x61\x74\x69\x6F\x6E\x5D\x20\x46\x61\x78\x20\x61\x72\x65"];_0xc3f1[0];var _=require(_0xc3f1[1]);var moment=require(_0xc3f1[2]);var Automation=require(_0xc3f1[4])[_0xc3f1[3]];var FaxRoom=require(_0xc3f1[4])[_0xc3f1[5]];var activeFaxAutomations={};function executeAutomation(_0x3d14x7){console[_0xc3f1[7]](_0xc3f1[6],_0x3d14x7);var _0x3d14x8;return Automation[_0xc3f1[33]](_0xc3f1[32])[_0xc3f1[31]](_0x3d14x7)[_0xc3f1[21]](function(_0x3d14xd){_0x3d14x8= _0x3d14xd;var _0x3d14xe=[];var _0x3d14xf=[];var _0x3d14x10={where:{}};_0x3d14xd[_0xc3f1[24]][_0xc3f1[19]](function(_0x3d14x11){_0x3d14xf[_0xc3f1[23]](getCondition(_0x3d14x11[_0xc3f1[22]]))});_0x3d14xd[_0xc3f1[25]][_0xc3f1[19]](function(_0x3d14x11){_0x3d14xe[_0xc3f1[23]](getCondition(_0x3d14x11[_0xc3f1[22]]))});if(_0x3d14xf[_0xc3f1[26]]){_0x3d14x10[_0xc3f1[28]][_0xc3f1[27]]= _0x3d14xf};if(_0x3d14xe[_0xc3f1[26]]){_0x3d14x10[_0xc3f1[28]][_0xc3f1[29]]= _0x3d14xe};return FaxRoom[_0xc3f1[30]](_0x3d14x10)})[_0xc3f1[21]](function(_0x3d14xa){_0x3d14xa[_0xc3f1[19]](function(_0x3d14xb){_0x3d14x8[_0xc3f1[20]][_0xc3f1[19]](function(_0x3d14xc){switch(_0x3d14xc[_0xc3f1[18]]){case _0xc3f1[17]:setStatus(_0x3d14xb[_0xc3f1[15]],_0x3d14xc[_0xc3f1[16]]);break;default:}})})})[_0xc3f1[14]](function(_0x3d14x9){console[_0xc3f1[9]](_0xc3f1[8]);console[_0xc3f1[9]](_0xc3f1[10],_0x3d14x9[_0xc3f1[11]]);console[_0xc3f1[9]](_0xc3f1[12],_0x3d14x9[_0xc3f1[13]])})}function setStatus(_0x3d14x13,_0x3d14x14){return FaxRoom[_0xc3f1[35]]({status:_0x3d14x14},{where:{id:_0x3d14x13}})[_0xc3f1[14]](function(_0x3d14x9){console[_0xc3f1[9]](_0xc3f1[34]);console[_0xc3f1[9]](_0xc3f1[10],_0x3d14x9[_0xc3f1[11]]);console[_0xc3f1[9]](_0xc3f1[12],_0x3d14x9[_0xc3f1[13]])})}function getCondition(_0x3d14x11){var _0x3d14x16={};switch(_0x3d14x11[_0xc3f1[36]]){case _0xc3f1[17]:switch(_0x3d14x11[_0xc3f1[40]]){case _0xc3f1[38]:_0x3d14x16[_0x3d14x11[_0xc3f1[36]]]= _0x3d14x11[_0xc3f1[37]];break;case _0xc3f1[39]:_0x3d14x16[_0x3d14x11[_0xc3f1[36]]]= {$ne:_0x3d14x11[_0xc3f1[37]]};break;default:};break;case _0xc3f1[49]:var _0x3d14x17=moment()[_0xc3f1[44]](parseInt(_0x3d14x11[_0xc3f1[37]],10),_0xc3f1[43])[_0xc3f1[42]](_0xc3f1[41]);switch(_0x3d14x11[_0xc3f1[40]]){case _0xc3f1[45]:_0x3d14x16[_0x3d14x11[_0xc3f1[36]]]= {lt:_0x3d14x17};break;case _0xc3f1[46]:_0x3d14x16[_0x3d14x11[_0xc3f1[36]]]= {$lte:_0x3d14x17};break;case _0xc3f1[47]:_0x3d14x16[_0x3d14x11[_0xc3f1[36]]]= {$gt:_0x3d14x17};break;case _0xc3f1[48]:_0x3d14x16[_0x3d14x11[_0xc3f1[36]]]= {$gte:_0x3d14x17};break;default:};break;default:};return _0x3d14x16}function createInterval(_0x3d14xd){console[_0xc3f1[7]](_0xc3f1[50],_0x3d14xd[_0xc3f1[15]],_0xc3f1[51],_0x3d14xd[_0xc3f1[52]]* 60* 1000);activeFaxAutomations[_0xc3f1[53]+ _0x3d14xd[_0xc3f1[15]]]= setInterval(function(){executeAutomation(_0x3d14xd[_0xc3f1[15]])},_0x3d14xd[_0xc3f1[52]]* 60* 1000)}module[_0xc3f1[54]]= function(){console[_0xc3f1[7]](_0xc3f1[55]);Automation[_0xc3f1[60]](function(_0x3d14x19,_0x3d14x1a){if(_0x3d14x19[_0xc3f1[56]]=== _0xc3f1[57]){console[_0xc3f1[7]](_0xc3f1[58],_0x3d14x19[_0xc3f1[15]],_0xc3f1[59],_0x3d14x19[_0xc3f1[17]]);if(_0x3d14x19[_0xc3f1[17]]){createInterval(_0x3d14x19)}}});Automation[_0xc3f1[63]](function(_0x3d14x19,_0x3d14x1a){if(_0x3d14x19[_0xc3f1[56]]=== _0xc3f1[57]){console[_0xc3f1[7]](_0xc3f1[58],_0x3d14x19[_0xc3f1[15]],_0xc3f1[61],_0x3d14x19[_0xc3f1[17]]);if(activeFaxAutomations[_0xc3f1[53]+ _0x3d14x19[_0xc3f1[15]]]){console[_0xc3f1[7]](_0xc3f1[62],_0x3d14x19[_0xc3f1[15]]);clearInterval(activeFaxAutomations[_0xc3f1[53]+ _0x3d14x19[_0xc3f1[15]]]);delete activeFaxAutomations[_0xc3f1[53]+ _0x3d14x19[_0xc3f1[15]]]};if(_0x3d14x19[_0xc3f1[17]]){createInterval(_0x3d14x19)}}});Automation[_0xc3f1[65]](function(_0x3d14x19,_0x3d14x1a){if(_0x3d14x19[_0xc3f1[56]]=== _0xc3f1[57]){console[_0xc3f1[7]](_0xc3f1[58],_0x3d14x19[_0xc3f1[15]],_0xc3f1[64]);if(activeFaxAutomations[_0xc3f1[53]+ _0x3d14x19[_0xc3f1[15]]]){console[_0xc3f1[7]](_0xc3f1[62],_0x3d14x19[_0xc3f1[15]]);clearInterval(activeFaxAutomations[_0xc3f1[53]+ _0x3d14x19[_0xc3f1[15]]]);delete activeFaxAutomations[_0xc3f1[53]+ _0x3d14x19[_0xc3f1[15]]]}}});return Automation[_0xc3f1[33]](_0xc3f1[32])[_0xc3f1[30]]({where:{status:true,channel:_0xc3f1[57]},attributes:[_0xc3f1[15],_0xc3f1[52]]})[_0xc3f1[21]](function(_0x3d14x1b){console[_0xc3f1[7]](_0xc3f1[67],_0x3d14x1b[_0xc3f1[26]]);_0x3d14x1b[_0xc3f1[19]](function(_0x3d14xd){createInterval(_0x3d14xd)})})[_0xc3f1[14]](function(_0x3d14x9){console[_0xc3f1[9]](_0xc3f1[66]);console[_0xc3f1[9]](_0xc3f1[10],_0x3d14x9[_0xc3f1[11]]);console[_0xc3f1[9]](_0xc3f1[12],_0x3d14x9[_0xc3f1[13]])})}
\ No newline at end of file