Built motion from commit efa66e19.|2.6.22
[motion2.git] / server / api / faxApplication / faxApplication.controller.js
index c8dfd2b..20aaf0b 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x900b=['destroy','stack','name','send','index','map','FaxApplication','rawAttributes','type','key','query','keys','intersection','model','fields','attributes','length','hasOwnProperty','order','sort','where','pick','filters','merge','VIRTUAL','filter','includeAll','include','findAll','catch','show','params','options','find','create','body','eml-format','rimraf','zip-dir','fast-json-patch','mustache','util','path','sox','to-csv','ejs','squel','jsforce','querystring','papaparse','ioredis','../../components/auth/service','../../components/parsers/qs','../../components/parsers/advancedSearch','../../config/license/hardware','../../config/logger','api','../../config/utils','../../mysqldb','sendStatus','status','end','json','offset','undefined','limit','count','apply','reject','save','update','then'];(function(_0x38f64f,_0x2ab0ad){var _0x4bcc4e=function(_0x16da82){while(--_0x16da82){_0x38f64f['push'](_0x38f64f['shift']());}};_0x4bcc4e(++_0x2ab0ad);}(_0x900b,0x144));var _0xb900=function(_0x305792,_0xe08055){_0x305792=_0x305792-0x0;var _0x449279=_0x900b[_0x305792];return _0x449279;};'use strict';var emlformat=require(_0xb900('0x0'));var rimraf=require(_0xb900('0x1'));var zipdir=require(_0xb900('0x2'));var jsonpatch=require(_0xb900('0x3'));var rp=require('request-promise');var moment=require('moment');var BPromise=require('bluebird');var Mustache=require(_0xb900('0x4'));var util=require(_0xb900('0x5'));var path=require(_0xb900('0x6'));var sox=require(_0xb900('0x7'));var csv=require(_0xb900('0x8'));var ejs=require(_0xb900('0x9'));var fs=require('fs');var fs_extra=require('fs-extra');var _=require('lodash');var squel=require(_0xb900('0xa'));var crypto=require('crypto');var jsforce=require(_0xb900('0xb'));var deskjs=require('desk.js');var toCsv=require(_0xb900('0x8'));var querystring=require(_0xb900('0xc'));var Papa=require(_0xb900('0xd'));var Redis=require(_0xb900('0xe'));var authService=require(_0xb900('0xf'));var qs=require(_0xb900('0x10'));var as=require(_0xb900('0x11'));var hardwareService=require(_0xb900('0x12'));var logger=require(_0xb900('0x13'))(_0xb900('0x14'));var utils=require(_0xb900('0x15'));var config=require('../../config/environment');var licenseUtil=require('../../config/license/util');var db=require(_0xb900('0x16'))['db'];function respondWithStatusCode(_0x263b87,_0x43550b){_0x43550b=_0x43550b||0xcc;return function(_0x148253){if(_0x148253){return _0x263b87[_0xb900('0x17')](_0x43550b);}return _0x263b87[_0xb900('0x18')](_0x43550b)[_0xb900('0x19')]();};}function respondWithResult(_0x39ae32,_0x1e32a6){_0x1e32a6=_0x1e32a6||0xc8;return function(_0x5c2715){if(_0x5c2715){return _0x39ae32[_0xb900('0x18')](_0x1e32a6)[_0xb900('0x1a')](_0x5c2715);}};}function respondWithFilteredResult(_0x5f12a8,_0x173ef5){return function(_0x3ccfa2){if(_0x3ccfa2){var _0x4e83ee=typeof _0x173ef5[_0xb900('0x1b')]===_0xb900('0x1c')&&typeof _0x173ef5[_0xb900('0x1d')]===_0xb900('0x1c');var _0x58ce14=_0x3ccfa2[_0xb900('0x1e')];var _0x3260d0=_0x4e83ee?0x0:_0x173ef5[_0xb900('0x1b')];var _0x504aa6=_0x4e83ee?_0x3ccfa2[_0xb900('0x1e')]:_0x173ef5[_0xb900('0x1b')]+_0x173ef5[_0xb900('0x1d')];var _0x5bf1b9;if(_0x504aa6>=_0x58ce14){_0x504aa6=_0x58ce14;_0x5bf1b9=0xc8;}else{_0x5bf1b9=0xce;}_0x5f12a8[_0xb900('0x18')](_0x5bf1b9);return _0x5f12a8['set']('Content-Range',_0x3260d0+'-'+_0x504aa6+'/'+_0x58ce14)[_0xb900('0x1a')](_0x3ccfa2);}return null;};}function patchUpdates(_0x354972){return function(_0xed4246){try{jsonpatch[_0xb900('0x1f')](_0xed4246,_0x354972,!![]);}catch(_0x13fda0){return BPromise[_0xb900('0x20')](_0x13fda0);}return _0xed4246[_0xb900('0x21')]();};}function saveUpdates(_0x5a4d4f,_0xafbcaf){return function(_0x5d752e){if(_0x5d752e){return _0x5d752e[_0xb900('0x22')](_0x5a4d4f)[_0xb900('0x23')](function(_0x4fd2a8){return _0x4fd2a8;});}return null;};}function removeEntity(_0x425911,_0x50c230){return function(_0x42dee6){if(_0x42dee6){return _0x42dee6[_0xb900('0x24')]()['then'](function(){_0x425911[_0xb900('0x18')](0xcc)[_0xb900('0x19')]();});}};}function handleEntityNotFound(_0x47fe54,_0x2c5518){return function(_0x8368a){if(!_0x8368a){_0x47fe54[_0xb900('0x17')](0x194);}return _0x8368a;};}function handleError(_0x361665,_0xf08f25){_0xf08f25=_0xf08f25||0x1f4;return function(_0x53e603){logger['error'](_0x53e603[_0xb900('0x25')]);if(_0x53e603[_0xb900('0x26')]){delete _0x53e603[_0xb900('0x26')];}_0x361665[_0xb900('0x18')](_0xf08f25)[_0xb900('0x27')](_0x53e603);};}exports[_0xb900('0x28')]=function(_0x331b49,_0x131912){var _0x5b58da={},_0x18286d={},_0x15e6cf={'count':0x0,'rows':[]};var _0x4f3b53=_[_0xb900('0x29')](db[_0xb900('0x2a')][_0xb900('0x2b')],function(_0x1bc48a){return{'name':_0x1bc48a['fieldName'],'type':_0x1bc48a[_0xb900('0x2c')][_0xb900('0x2d')]};});_0x18286d['model']=_[_0xb900('0x29')](_0x4f3b53,_0xb900('0x26'));_0x18286d[_0xb900('0x2e')]=_[_0xb900('0x2f')](_0x331b49['query']);_0x18286d['filters']=_[_0xb900('0x30')](_0x18286d[_0xb900('0x31')],_0x18286d[_0xb900('0x2e')]);_0x5b58da['attributes']=_[_0xb900('0x30')](_0x18286d['model'],qs[_0xb900('0x32')](_0x331b49[_0xb900('0x2e')][_0xb900('0x32')]));_0x5b58da[_0xb900('0x33')]=_0x5b58da[_0xb900('0x33')][_0xb900('0x34')]?_0x5b58da[_0xb900('0x33')]:_0x18286d[_0xb900('0x31')];if(!_0x331b49[_0xb900('0x2e')][_0xb900('0x35')]('nolimit')){_0x5b58da['limit']=qs[_0xb900('0x1d')](_0x331b49[_0xb900('0x2e')]['limit']);_0x5b58da['offset']=qs[_0xb900('0x1b')](_0x331b49[_0xb900('0x2e')][_0xb900('0x1b')]);}_0x5b58da[_0xb900('0x36')]=qs[_0xb900('0x37')](_0x331b49[_0xb900('0x2e')]['sort']);_0x5b58da[_0xb900('0x38')]=qs['filters'](_[_0xb900('0x39')](_0x331b49[_0xb900('0x2e')],_0x18286d[_0xb900('0x3a')]),_0x4f3b53);if(_0x331b49[_0xb900('0x2e')]['filter']){_0x5b58da[_0xb900('0x38')]=_[_0xb900('0x3b')](_0x5b58da[_0xb900('0x38')],{'$or':_[_0xb900('0x29')](_0x4f3b53,function(_0x32b8bd){if(_0x32b8bd[_0xb900('0x2c')]!==_0xb900('0x3c')){var _0x557da1={};_0x557da1[_0x32b8bd[_0xb900('0x26')]]={'$like':'%'+_0x331b49['query'][_0xb900('0x3d')]+'%'};return _0x557da1;}})});}_0x5b58da=_[_0xb900('0x3b')]({},_0x5b58da,_0x331b49['options']);var _0xa9ad73={'where':_0x5b58da['where']};return db[_0xb900('0x2a')]['count'](_0xa9ad73)['then'](function(_0x5e28d7){_0x15e6cf[_0xb900('0x1e')]=_0x5e28d7;if(_0x331b49[_0xb900('0x2e')][_0xb900('0x3e')]){_0x5b58da[_0xb900('0x3f')]=[{'all':!![]}];}return db[_0xb900('0x2a')][_0xb900('0x40')](_0x5b58da);})[_0xb900('0x23')](function(_0x447c98){_0x15e6cf['rows']=_0x447c98;return _0x15e6cf;})[_0xb900('0x23')](respondWithFilteredResult(_0x131912,_0x5b58da))[_0xb900('0x41')](handleError(_0x131912,null));};exports[_0xb900('0x42')]=function(_0x3d240b,_0x347574){var _0x5b6a4e={'raw':!![],'where':{'id':_0x3d240b[_0xb900('0x43')]['id']}},_0x4f11a0={};_0x4f11a0[_0xb900('0x31')]=_[_0xb900('0x2f')](db[_0xb900('0x2a')]['rawAttributes']);_0x4f11a0[_0xb900('0x2e')]=_[_0xb900('0x2f')](_0x3d240b['query']);_0x4f11a0['filters']=_[_0xb900('0x30')](_0x4f11a0[_0xb900('0x31')],_0x4f11a0['query']);_0x5b6a4e[_0xb900('0x33')]=_[_0xb900('0x30')](_0x4f11a0[_0xb900('0x31')],qs[_0xb900('0x32')](_0x3d240b[_0xb900('0x2e')][_0xb900('0x32')]));_0x5b6a4e[_0xb900('0x33')]=_0x5b6a4e['attributes']['length']?_0x5b6a4e[_0xb900('0x33')]:_0x4f11a0[_0xb900('0x31')];if(_0x3d240b[_0xb900('0x2e')]['includeAll']){_0x5b6a4e[_0xb900('0x3f')]=[{'all':!![]}];}_0x5b6a4e=_[_0xb900('0x3b')]({},_0x5b6a4e,_0x3d240b[_0xb900('0x44')]);return db['FaxApplication'][_0xb900('0x45')](_0x5b6a4e)[_0xb900('0x23')](handleEntityNotFound(_0x347574,null))[_0xb900('0x23')](respondWithResult(_0x347574,null))[_0xb900('0x41')](handleError(_0x347574,null));};exports[_0xb900('0x46')]=function(_0x3e0211,_0x376afd){return db['FaxApplication'][_0xb900('0x46')](_0x3e0211[_0xb900('0x47')],{})[_0xb900('0x23')](respondWithResult(_0x376afd,0xc9))[_0xb900('0x41')](handleError(_0x376afd,null));};exports[_0xb900('0x22')]=function(_0x144295,_0x539fa2){if(_0x144295[_0xb900('0x47')]['id']){delete _0x144295[_0xb900('0x47')]['id'];}return db[_0xb900('0x2a')][_0xb900('0x45')]({'where':{'id':_0x144295[_0xb900('0x43')]['id']}})[_0xb900('0x23')](handleEntityNotFound(_0x539fa2,null))['then'](saveUpdates(_0x144295['body'],null))['then'](respondWithResult(_0x539fa2,null))[_0xb900('0x41')](handleError(_0x539fa2,null));};exports[_0xb900('0x24')]=function(_0x44f9dc,_0x95fb56){return db['FaxApplication']['find']({'where':{'id':_0x44f9dc[_0xb900('0x43')]['id']}})[_0xb900('0x23')](handleEntityNotFound(_0x95fb56,null))['then'](removeEntity(_0x95fb56,null))['catch'](handleError(_0x95fb56,null));};
\ No newline at end of file
+var _0xb76f=['json','undefined','limit','count','set','apply','save','update','then','error','stack','name','send','index','map','FaxApplication','rawAttributes','model','query','keys','filters','attributes','fields','length','hasOwnProperty','offset','order','sort','where','merge','VIRTUAL','filter','options','includeAll','include','findAll','rows','intersection','find','catch','create','body','destroy','eml-format','rimraf','fast-json-patch','request-promise','moment','bluebird','mustache','util','path','sox','to-csv','ejs','fs-extra','lodash','squel','crypto','jsforce','desk.js','querystring','papaparse','ioredis','../../components/parsers/qs','../../components/parsers/advancedSearch','../../config/license/hardware','../../config/logger','api','../../config/utils','../../config/environment','../../config/license/util','sendStatus','status','end'];(function(_0x2c9272,_0x4def68){var _0x4a3b40=function(_0x4bbd85){while(--_0x4bbd85){_0x2c9272['push'](_0x2c9272['shift']());}};_0x4a3b40(++_0x4def68);}(_0xb76f,0xc1));var _0xfb76=function(_0x43e4d5,_0x1d9430){_0x43e4d5=_0x43e4d5-0x0;var _0x5b7fee=_0xb76f[_0x43e4d5];return _0x5b7fee;};'use strict';var emlformat=require(_0xfb76('0x0'));var rimraf=require(_0xfb76('0x1'));var zipdir=require('zip-dir');var jsonpatch=require(_0xfb76('0x2'));var rp=require(_0xfb76('0x3'));var moment=require(_0xfb76('0x4'));var BPromise=require(_0xfb76('0x5'));var Mustache=require(_0xfb76('0x6'));var util=require(_0xfb76('0x7'));var path=require(_0xfb76('0x8'));var sox=require(_0xfb76('0x9'));var csv=require(_0xfb76('0xa'));var ejs=require(_0xfb76('0xb'));var fs=require('fs');var fs_extra=require(_0xfb76('0xc'));var _=require(_0xfb76('0xd'));var squel=require(_0xfb76('0xe'));var crypto=require(_0xfb76('0xf'));var jsforce=require(_0xfb76('0x10'));var deskjs=require(_0xfb76('0x11'));var toCsv=require('to-csv');var querystring=require(_0xfb76('0x12'));var Papa=require(_0xfb76('0x13'));var Redis=require(_0xfb76('0x14'));var authService=require('../../components/auth/service');var qs=require(_0xfb76('0x15'));var as=require(_0xfb76('0x16'));var hardwareService=require(_0xfb76('0x17'));var logger=require(_0xfb76('0x18'))(_0xfb76('0x19'));var utils=require(_0xfb76('0x1a'));var config=require(_0xfb76('0x1b'));var licenseUtil=require(_0xfb76('0x1c'));var db=require('../../mysqldb')['db'];function respondWithStatusCode(_0x2f624b,_0x2e5a06){_0x2e5a06=_0x2e5a06||0xcc;return function(_0x37b134){if(_0x37b134){return _0x2f624b[_0xfb76('0x1d')](_0x2e5a06);}return _0x2f624b[_0xfb76('0x1e')](_0x2e5a06)[_0xfb76('0x1f')]();};}function respondWithResult(_0x395780,_0x45b3ac){_0x45b3ac=_0x45b3ac||0xc8;return function(_0x507352){if(_0x507352){return _0x395780[_0xfb76('0x1e')](_0x45b3ac)[_0xfb76('0x20')](_0x507352);}};}function respondWithFilteredResult(_0x4db1a2,_0x2cc41c){return function(_0x3f0fb4){if(_0x3f0fb4){var _0x37e356=typeof _0x2cc41c['offset']===_0xfb76('0x21')&&typeof _0x2cc41c[_0xfb76('0x22')]==='undefined';var _0x7b3d78=_0x3f0fb4[_0xfb76('0x23')];var _0x2e793=_0x37e356?0x0:_0x2cc41c['offset'];var _0x38a45d=_0x37e356?_0x3f0fb4[_0xfb76('0x23')]:_0x2cc41c['offset']+_0x2cc41c[_0xfb76('0x22')];var _0x100eaa;if(_0x38a45d>=_0x7b3d78){_0x38a45d=_0x7b3d78;_0x100eaa=0xc8;}else{_0x100eaa=0xce;}_0x4db1a2[_0xfb76('0x1e')](_0x100eaa);return _0x4db1a2[_0xfb76('0x24')]('Content-Range',_0x2e793+'-'+_0x38a45d+'/'+_0x7b3d78)[_0xfb76('0x20')](_0x3f0fb4);}return null;};}function patchUpdates(_0x36c922){return function(_0x212cb6){try{jsonpatch[_0xfb76('0x25')](_0x212cb6,_0x36c922,!![]);}catch(_0x461b94){return BPromise['reject'](_0x461b94);}return _0x212cb6[_0xfb76('0x26')]();};}function saveUpdates(_0x442f81,_0x43afb6){return function(_0x3ca207){if(_0x3ca207){return _0x3ca207[_0xfb76('0x27')](_0x442f81)[_0xfb76('0x28')](function(_0x147a85){return _0x147a85;});}return null;};}function removeEntity(_0x5d565c,_0x2d9be4){return function(_0x239e47){if(_0x239e47){return _0x239e47['destroy']()[_0xfb76('0x28')](function(){_0x5d565c[_0xfb76('0x1e')](0xcc)[_0xfb76('0x1f')]();});}};}function handleEntityNotFound(_0x442592,_0x3fca44){return function(_0x579c2f){if(!_0x579c2f){_0x442592['sendStatus'](0x194);}return _0x579c2f;};}function handleError(_0x4b860c,_0x2cdf8f){_0x2cdf8f=_0x2cdf8f||0x1f4;return function(_0x54168e){logger[_0xfb76('0x29')](_0x54168e[_0xfb76('0x2a')]);if(_0x54168e[_0xfb76('0x2b')]){delete _0x54168e['name'];}_0x4b860c['status'](_0x2cdf8f)[_0xfb76('0x2c')](_0x54168e);};}exports[_0xfb76('0x2d')]=function(_0x804501,_0x4b0818){var _0x59ceb9={},_0xe6e21d={},_0x27409a={'count':0x0,'rows':[]};var _0xf60e7a=_[_0xfb76('0x2e')](db[_0xfb76('0x2f')][_0xfb76('0x30')],function(_0x34e9e4){return{'name':_0x34e9e4['fieldName'],'type':_0x34e9e4['type']['key']};});_0xe6e21d[_0xfb76('0x31')]=_[_0xfb76('0x2e')](_0xf60e7a,_0xfb76('0x2b'));_0xe6e21d[_0xfb76('0x32')]=_[_0xfb76('0x33')](_0x804501[_0xfb76('0x32')]);_0xe6e21d[_0xfb76('0x34')]=_['intersection'](_0xe6e21d[_0xfb76('0x31')],_0xe6e21d['query']);_0x59ceb9[_0xfb76('0x35')]=_['intersection'](_0xe6e21d[_0xfb76('0x31')],qs['fields'](_0x804501['query'][_0xfb76('0x36')]));_0x59ceb9[_0xfb76('0x35')]=_0x59ceb9[_0xfb76('0x35')][_0xfb76('0x37')]?_0x59ceb9[_0xfb76('0x35')]:_0xe6e21d[_0xfb76('0x31')];if(!_0x804501[_0xfb76('0x32')][_0xfb76('0x38')]('nolimit')){_0x59ceb9['limit']=qs[_0xfb76('0x22')](_0x804501[_0xfb76('0x32')][_0xfb76('0x22')]);_0x59ceb9[_0xfb76('0x39')]=qs[_0xfb76('0x39')](_0x804501[_0xfb76('0x32')]['offset']);}_0x59ceb9[_0xfb76('0x3a')]=qs[_0xfb76('0x3b')](_0x804501[_0xfb76('0x32')]['sort']);_0x59ceb9[_0xfb76('0x3c')]=qs[_0xfb76('0x34')](_['pick'](_0x804501[_0xfb76('0x32')],_0xe6e21d['filters']),_0xf60e7a);if(_0x804501['query']['filter']){_0x59ceb9[_0xfb76('0x3c')]=_[_0xfb76('0x3d')](_0x59ceb9[_0xfb76('0x3c')],{'$or':_[_0xfb76('0x2e')](_0xf60e7a,function(_0x4e2f71){if(_0x4e2f71['type']!==_0xfb76('0x3e')){var _0x4dd09a={};_0x4dd09a[_0x4e2f71[_0xfb76('0x2b')]]={'$like':'%'+_0x804501[_0xfb76('0x32')][_0xfb76('0x3f')]+'%'};return _0x4dd09a;}})});}_0x59ceb9=_[_0xfb76('0x3d')]({},_0x59ceb9,_0x804501[_0xfb76('0x40')]);var _0x3ab3a4={'where':_0x59ceb9['where']};return db[_0xfb76('0x2f')][_0xfb76('0x23')](_0x3ab3a4)[_0xfb76('0x28')](function(_0x5c6ddb){_0x27409a[_0xfb76('0x23')]=_0x5c6ddb;if(_0x804501[_0xfb76('0x32')][_0xfb76('0x41')]){_0x59ceb9[_0xfb76('0x42')]=[{'all':!![]}];}return db[_0xfb76('0x2f')][_0xfb76('0x43')](_0x59ceb9);})[_0xfb76('0x28')](function(_0x7ef6c5){_0x27409a[_0xfb76('0x44')]=_0x7ef6c5;return _0x27409a;})[_0xfb76('0x28')](respondWithFilteredResult(_0x4b0818,_0x59ceb9))['catch'](handleError(_0x4b0818,null));};exports['show']=function(_0x7f6fe7,_0x11b5e7){var _0x192979={'raw':!![],'where':{'id':_0x7f6fe7['params']['id']}},_0xb33f98={};_0xb33f98[_0xfb76('0x31')]=_[_0xfb76('0x33')](db['FaxApplication'][_0xfb76('0x30')]);_0xb33f98['query']=_[_0xfb76('0x33')](_0x7f6fe7[_0xfb76('0x32')]);_0xb33f98[_0xfb76('0x34')]=_[_0xfb76('0x45')](_0xb33f98[_0xfb76('0x31')],_0xb33f98['query']);_0x192979[_0xfb76('0x35')]=_[_0xfb76('0x45')](_0xb33f98[_0xfb76('0x31')],qs[_0xfb76('0x36')](_0x7f6fe7['query'][_0xfb76('0x36')]));_0x192979['attributes']=_0x192979['attributes'][_0xfb76('0x37')]?_0x192979['attributes']:_0xb33f98[_0xfb76('0x31')];if(_0x7f6fe7[_0xfb76('0x32')][_0xfb76('0x41')]){_0x192979[_0xfb76('0x42')]=[{'all':!![]}];}_0x192979=_[_0xfb76('0x3d')]({},_0x192979,_0x7f6fe7[_0xfb76('0x40')]);return db[_0xfb76('0x2f')][_0xfb76('0x46')](_0x192979)['then'](handleEntityNotFound(_0x11b5e7,null))['then'](respondWithResult(_0x11b5e7,null))[_0xfb76('0x47')](handleError(_0x11b5e7,null));};exports[_0xfb76('0x48')]=function(_0x3e0778,_0x4f3d4b){return db[_0xfb76('0x2f')][_0xfb76('0x48')](_0x3e0778[_0xfb76('0x49')],{})[_0xfb76('0x28')](respondWithResult(_0x4f3d4b,0xc9))[_0xfb76('0x47')](handleError(_0x4f3d4b,null));};exports['update']=function(_0x3ccdb1,_0x2f65ce){if(_0x3ccdb1[_0xfb76('0x49')]['id']){delete _0x3ccdb1[_0xfb76('0x49')]['id'];}return db[_0xfb76('0x2f')][_0xfb76('0x46')]({'where':{'id':_0x3ccdb1['params']['id']}})[_0xfb76('0x28')](handleEntityNotFound(_0x2f65ce,null))[_0xfb76('0x28')](saveUpdates(_0x3ccdb1['body'],null))[_0xfb76('0x28')](respondWithResult(_0x2f65ce,null))[_0xfb76('0x47')](handleError(_0x2f65ce,null));};exports[_0xfb76('0x4a')]=function(_0x52f39e,_0x3f4f54){return db[_0xfb76('0x2f')][_0xfb76('0x46')]({'where':{'id':_0x52f39e['params']['id']}})[_0xfb76('0x28')](handleEntityNotFound(_0x3f4f54,null))[_0xfb76('0x28')](removeEntity(_0x3f4f54,null))['catch'](handleError(_0x3f4f54,null));};
\ No newline at end of file