Built motion from commit 0900f080.|2.5.45
[motion2.git] / server / api / faxApplication / faxApplication.controller.js
index b087902..77d55f4 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x2124=['body','params','html-pdf','zip-dir','fast-json-patch','moment','bluebird','mustache','util','path','to-csv','crypto','desk.js','querystring','ioredis','../../components/auth/service','../../components/parsers/qs','../../config/license/hardware','../../config/logger','api','../../config/utils','../../config/environment','../../config/license/util','../../mysqldb','sendStatus','end','json','count','offset','limit','status','set','Content-Range','apply','save','then','destroy','stack','name','send','index','map','FaxApplication','rawAttributes','type','model','query','keys','attributes','intersection','fields','hasOwnProperty','nolimit','order','where','filters','pick','merge','VIRTUAL','options','includeAll','include','findAll','catch','length','find','create'];(function(_0x4be82f,_0x9c2d70){var _0x4b7403=function(_0x40409a){while(--_0x40409a){_0x4be82f['push'](_0x4be82f['shift']());}};_0x4b7403(++_0x9c2d70);}(_0x2124,0x151));var _0x4212=function(_0x4e86a3,_0xda2301){_0x4e86a3=_0x4e86a3-0x0;var _0x420a8f=_0x2124[_0x4e86a3];return _0x420a8f;};'use strict';var pdf=require(_0x4212('0x0'));var emlformat=require('eml-format');var rimraf=require('rimraf');var zipdir=require(_0x4212('0x1'));var jsonpatch=require(_0x4212('0x2'));var rp=require('request-promise');var moment=require(_0x4212('0x3'));var BPromise=require(_0x4212('0x4'));var Mustache=require(_0x4212('0x5'));var util=require(_0x4212('0x6'));var path=require(_0x4212('0x7'));var sox=require('sox');var csv=require(_0x4212('0x8'));var ejs=require('ejs');var fs=require('fs');var _=require('lodash');var squel=require('squel');var crypto=require(_0x4212('0x9'));var jsforce=require('jsforce');var deskjs=require(_0x4212('0xa'));var toCsv=require(_0x4212('0x8'));var querystring=require(_0x4212('0xb'));var Papa=require('papaparse');var Redis=require(_0x4212('0xc'));var authService=require(_0x4212('0xd'));var qs=require(_0x4212('0xe'));var as=require('../../components/parsers/advancedSearch');var hardwareService=require(_0x4212('0xf'));var logger=require(_0x4212('0x10'))(_0x4212('0x11'));var utils=require(_0x4212('0x12'));var config=require(_0x4212('0x13'));var licenseUtil=require(_0x4212('0x14'));var db=require(_0x4212('0x15'))['db'];function respondWithStatusCode(_0x163360,_0x105a6a){_0x105a6a=_0x105a6a||0xcc;return function(_0x237eca){if(_0x237eca){return _0x163360[_0x4212('0x16')](_0x105a6a);}return _0x163360['status'](_0x105a6a)[_0x4212('0x17')]();};}function respondWithResult(_0x4db445,_0x291310){_0x291310=_0x291310||0xc8;return function(_0xab4ff4){if(_0xab4ff4){return _0x4db445['status'](_0x291310)[_0x4212('0x18')](_0xab4ff4);}};}function respondWithFilteredResult(_0x451168,_0x3bf438){return function(_0xc6a6e6){if(_0xc6a6e6){var _0x3fd74c=_0xc6a6e6[_0x4212('0x19')],_0x16e98f=_0x3bf438[_0x4212('0x1a')],_0x35666a=_0x3bf438[_0x4212('0x1a')]+_0x3bf438[_0x4212('0x1b')],_0x1cee59;if(_0x35666a>=_0x3fd74c){_0x35666a=_0x3fd74c;_0x1cee59=0xc8;}else{_0x1cee59=0xce;}_0x451168[_0x4212('0x1c')](_0x1cee59);return _0x451168[_0x4212('0x1d')](_0x4212('0x1e'),_0x16e98f+'-'+_0x35666a+'/'+_0x3fd74c)[_0x4212('0x18')](_0xc6a6e6);}return null;};}function patchUpdates(_0x258eed){return function(_0x377612){try{jsonpatch[_0x4212('0x1f')](_0x377612,_0x258eed,!![]);}catch(_0x4876cb){return BPromise['reject'](_0x4876cb);}return _0x377612[_0x4212('0x20')]();};}function saveUpdates(_0x569f13,_0x4fdaa5){return function(_0x4d7149){if(_0x4d7149){return _0x4d7149['update'](_0x569f13)[_0x4212('0x21')](function(_0x5b05f7){return _0x5b05f7;});}return null;};}function removeEntity(_0x4fbade,_0x28615a){return function(_0x30dbd0){if(_0x30dbd0){return _0x30dbd0[_0x4212('0x22')]()['then'](function(){_0x4fbade['status'](0xcc)[_0x4212('0x17')]();});}};}function handleEntityNotFound(_0x43da76,_0x246783){return function(_0xbae557){if(!_0xbae557){_0x43da76[_0x4212('0x16')](0x194);}return _0xbae557;};}function handleError(_0x20a9ce,_0x124e35){_0x124e35=_0x124e35||0x1f4;return function(_0x1b1e23){logger['error'](_0x1b1e23[_0x4212('0x23')]);if(_0x1b1e23[_0x4212('0x24')]){delete _0x1b1e23['name'];}_0x20a9ce[_0x4212('0x1c')](_0x124e35)[_0x4212('0x25')](_0x1b1e23);};}exports[_0x4212('0x26')]=function(_0xb8ed88,_0x39e26f){var _0x4d3686={},_0x180940={},_0x10e84c={'count':0x0,'rows':[]};var _0xbdbbae=_[_0x4212('0x27')](db[_0x4212('0x28')][_0x4212('0x29')],function(_0x3c32fc){return{'name':_0x3c32fc['fieldName'],'type':_0x3c32fc[_0x4212('0x2a')]['key']};});_0x180940[_0x4212('0x2b')]=_[_0x4212('0x27')](_0xbdbbae,_0x4212('0x24'));_0x180940[_0x4212('0x2c')]=_[_0x4212('0x2d')](_0xb8ed88[_0x4212('0x2c')]);_0x180940['filters']=_['intersection'](_0x180940[_0x4212('0x2b')],_0x180940[_0x4212('0x2c')]);_0x4d3686[_0x4212('0x2e')]=_[_0x4212('0x2f')](_0x180940[_0x4212('0x2b')],qs[_0x4212('0x30')](_0xb8ed88[_0x4212('0x2c')][_0x4212('0x30')]));_0x4d3686['attributes']=_0x4d3686[_0x4212('0x2e')]['length']?_0x4d3686['attributes']:_0x180940[_0x4212('0x2b')];if(!_0xb8ed88[_0x4212('0x2c')][_0x4212('0x31')](_0x4212('0x32'))){_0x4d3686[_0x4212('0x1b')]=qs[_0x4212('0x1b')](_0xb8ed88[_0x4212('0x2c')][_0x4212('0x1b')]);_0x4d3686['offset']=qs['offset'](_0xb8ed88[_0x4212('0x2c')][_0x4212('0x1a')]);}_0x4d3686[_0x4212('0x33')]=qs['sort'](_0xb8ed88[_0x4212('0x2c')]['sort']);_0x4d3686[_0x4212('0x34')]=qs[_0x4212('0x35')](_[_0x4212('0x36')](_0xb8ed88[_0x4212('0x2c')],_0x180940['filters']),_0xbdbbae);if(_0xb8ed88[_0x4212('0x2c')]['filter']){_0x4d3686[_0x4212('0x34')]=_[_0x4212('0x37')](_0x4d3686[_0x4212('0x34')],{'$or':_[_0x4212('0x27')](_0xbdbbae,function(_0x6e4db3){if(_0x6e4db3['type']!==_0x4212('0x38')){var _0x52fe13={};_0x52fe13[_0x6e4db3[_0x4212('0x24')]]={'$like':'%'+_0xb8ed88[_0x4212('0x2c')]['filter']+'%'};return _0x52fe13;}})});}_0x4d3686=_[_0x4212('0x37')]({},_0x4d3686,_0xb8ed88[_0x4212('0x39')]);var _0x7d36c3={'where':_0x4d3686[_0x4212('0x34')]};return db['FaxApplication'][_0x4212('0x19')](_0x7d36c3)[_0x4212('0x21')](function(_0xed5068){_0x10e84c[_0x4212('0x19')]=_0xed5068;if(_0xb8ed88[_0x4212('0x2c')][_0x4212('0x3a')]){_0x4d3686[_0x4212('0x3b')]=[{'all':!![]}];}return db[_0x4212('0x28')][_0x4212('0x3c')](_0x4d3686);})['then'](function(_0x449eda){_0x10e84c['rows']=_0x449eda;return _0x10e84c;})['then'](respondWithFilteredResult(_0x39e26f,_0x4d3686))[_0x4212('0x3d')](handleError(_0x39e26f,null));};exports['show']=function(_0x444b23,_0xc26ac3){var _0x36f0c2={'raw':!![],'where':{'id':_0x444b23['params']['id']}},_0x5324e6={};_0x5324e6[_0x4212('0x2b')]=_[_0x4212('0x2d')](db[_0x4212('0x28')][_0x4212('0x29')]);_0x5324e6[_0x4212('0x2c')]=_['keys'](_0x444b23[_0x4212('0x2c')]);_0x5324e6['filters']=_[_0x4212('0x2f')](_0x5324e6['model'],_0x5324e6[_0x4212('0x2c')]);_0x36f0c2[_0x4212('0x2e')]=_[_0x4212('0x2f')](_0x5324e6[_0x4212('0x2b')],qs['fields'](_0x444b23[_0x4212('0x2c')][_0x4212('0x30')]));_0x36f0c2['attributes']=_0x36f0c2[_0x4212('0x2e')][_0x4212('0x3e')]?_0x36f0c2[_0x4212('0x2e')]:_0x5324e6[_0x4212('0x2b')];if(_0x444b23['query']['includeAll']){_0x36f0c2[_0x4212('0x3b')]=[{'all':!![]}];}_0x36f0c2=_[_0x4212('0x37')]({},_0x36f0c2,_0x444b23[_0x4212('0x39')]);return db['FaxApplication'][_0x4212('0x3f')](_0x36f0c2)['then'](handleEntityNotFound(_0xc26ac3,null))['then'](respondWithResult(_0xc26ac3,null))['catch'](handleError(_0xc26ac3,null));};exports['create']=function(_0x27bf6b,_0x443b7b){return db['FaxApplication'][_0x4212('0x40')](_0x27bf6b['body'],{})[_0x4212('0x21')](respondWithResult(_0x443b7b,0xc9))[_0x4212('0x3d')](handleError(_0x443b7b,null));};exports['update']=function(_0x25fe55,_0x490cff){if(_0x25fe55[_0x4212('0x41')]['id']){delete _0x25fe55['body']['id'];}return db[_0x4212('0x28')]['find']({'where':{'id':_0x25fe55[_0x4212('0x42')]['id']}})[_0x4212('0x21')](handleEntityNotFound(_0x490cff,null))['then'](saveUpdates(_0x25fe55[_0x4212('0x41')],null))[_0x4212('0x21')](respondWithResult(_0x490cff,null))['catch'](handleError(_0x490cff,null));};exports[_0x4212('0x22')]=function(_0x480e7d,_0x2aca72){return db[_0x4212('0x28')][_0x4212('0x3f')]({'where':{'id':_0x480e7d[_0x4212('0x42')]['id']}})['then'](handleEntityNotFound(_0x2aca72,null))[_0x4212('0x21')](removeEntity(_0x2aca72,null))[_0x4212('0x3d')](handleError(_0x2aca72,null));};
\ No newline at end of file
+var _0xf7f3=['../../mysqldb','status','end','json','offset','undefined','limit','count','set','Content-Range','apply','update','then','error','stack','name','index','map','FaxApplication','fieldName','type','model','keys','query','attributes','intersection','fields','length','hasOwnProperty','nolimit','order','sort','where','filters','pick','filter','merge','VIRTUAL','options','includeAll','include','findAll','rows','catch','show','rawAttributes','find','create','body','eml-format','rimraf','zip-dir','fast-json-patch','moment','mustache','util','sox','to-csv','fs-extra','lodash','squel','crypto','jsforce','desk.js','querystring','../../components/auth/service','../../components/parsers/qs','../../components/parsers/advancedSearch','../../config/license/hardware','../../config/logger','../../config/utils','../../config/environment','../../config/license/util'];(function(_0x26bba7,_0x5a59d9){var _0x4a50d9=function(_0x3c3a08){while(--_0x3c3a08){_0x26bba7['push'](_0x26bba7['shift']());}};_0x4a50d9(++_0x5a59d9);}(_0xf7f3,0x19e));var _0x3f7f=function(_0x30a722,_0x19e000){_0x30a722=_0x30a722-0x0;var _0x109700=_0xf7f3[_0x30a722];return _0x109700;};'use strict';var emlformat=require(_0x3f7f('0x0'));var rimraf=require(_0x3f7f('0x1'));var zipdir=require(_0x3f7f('0x2'));var jsonpatch=require(_0x3f7f('0x3'));var rp=require('request-promise');var moment=require(_0x3f7f('0x4'));var BPromise=require('bluebird');var Mustache=require(_0x3f7f('0x5'));var util=require(_0x3f7f('0x6'));var path=require('path');var sox=require(_0x3f7f('0x7'));var csv=require(_0x3f7f('0x8'));var ejs=require('ejs');var fs=require('fs');var fs_extra=require(_0x3f7f('0x9'));var _=require(_0x3f7f('0xa'));var squel=require(_0x3f7f('0xb'));var crypto=require(_0x3f7f('0xc'));var jsforce=require(_0x3f7f('0xd'));var deskjs=require(_0x3f7f('0xe'));var toCsv=require(_0x3f7f('0x8'));var querystring=require(_0x3f7f('0xf'));var Papa=require('papaparse');var Redis=require('ioredis');var authService=require(_0x3f7f('0x10'));var qs=require(_0x3f7f('0x11'));var as=require(_0x3f7f('0x12'));var hardwareService=require(_0x3f7f('0x13'));var logger=require(_0x3f7f('0x14'))('api');var utils=require(_0x3f7f('0x15'));var config=require(_0x3f7f('0x16'));var licenseUtil=require(_0x3f7f('0x17'));var db=require(_0x3f7f('0x18'))['db'];function respondWithStatusCode(_0x306483,_0x552271){_0x552271=_0x552271||0xcc;return function(_0x41251a){if(_0x41251a){return _0x306483['sendStatus'](_0x552271);}return _0x306483[_0x3f7f('0x19')](_0x552271)[_0x3f7f('0x1a')]();};}function respondWithResult(_0x5ccf6a,_0x4d9796){_0x4d9796=_0x4d9796||0xc8;return function(_0x515893){if(_0x515893){return _0x5ccf6a[_0x3f7f('0x19')](_0x4d9796)[_0x3f7f('0x1b')](_0x515893);}};}function respondWithFilteredResult(_0x291746,_0x58f3b2){return function(_0x2e3a5a){if(_0x2e3a5a){var _0x508de7=typeof _0x58f3b2[_0x3f7f('0x1c')]===_0x3f7f('0x1d')&&typeof _0x58f3b2[_0x3f7f('0x1e')]===_0x3f7f('0x1d');var _0x57b7e3=_0x2e3a5a[_0x3f7f('0x1f')];var _0x1163b5=_0x508de7?0x0:_0x58f3b2[_0x3f7f('0x1c')];var _0xd9fd4a=_0x508de7?_0x2e3a5a[_0x3f7f('0x1f')]:_0x58f3b2[_0x3f7f('0x1c')]+_0x58f3b2[_0x3f7f('0x1e')];var _0x4bb124;if(_0xd9fd4a>=_0x57b7e3){_0xd9fd4a=_0x57b7e3;_0x4bb124=0xc8;}else{_0x4bb124=0xce;}_0x291746[_0x3f7f('0x19')](_0x4bb124);return _0x291746[_0x3f7f('0x20')](_0x3f7f('0x21'),_0x1163b5+'-'+_0xd9fd4a+'/'+_0x57b7e3)[_0x3f7f('0x1b')](_0x2e3a5a);}return null;};}function patchUpdates(_0x53fa85){return function(_0x3ccf61){try{jsonpatch[_0x3f7f('0x22')](_0x3ccf61,_0x53fa85,!![]);}catch(_0x23b610){return BPromise['reject'](_0x23b610);}return _0x3ccf61['save']();};}function saveUpdates(_0x55a18c,_0x3a58b2){return function(_0x2ebc38){if(_0x2ebc38){return _0x2ebc38[_0x3f7f('0x23')](_0x55a18c)[_0x3f7f('0x24')](function(_0xa66f39){return _0xa66f39;});}return null;};}function removeEntity(_0x5b2f0d,_0x8da2d){return function(_0x302636){if(_0x302636){return _0x302636['destroy']()[_0x3f7f('0x24')](function(){_0x5b2f0d[_0x3f7f('0x19')](0xcc)[_0x3f7f('0x1a')]();});}};}function handleEntityNotFound(_0x12ad27,_0x3cf7f2){return function(_0x1b1697){if(!_0x1b1697){_0x12ad27['sendStatus'](0x194);}return _0x1b1697;};}function handleError(_0x413c5b,_0x4ed5ab){_0x4ed5ab=_0x4ed5ab||0x1f4;return function(_0x182f71){logger[_0x3f7f('0x25')](_0x182f71[_0x3f7f('0x26')]);if(_0x182f71[_0x3f7f('0x27')]){delete _0x182f71[_0x3f7f('0x27')];}_0x413c5b['status'](_0x4ed5ab)['send'](_0x182f71);};}exports[_0x3f7f('0x28')]=function(_0x43b786,_0x18ab07){var _0xefecb7={},_0x3ad8f2={},_0x10acb7={'count':0x0,'rows':[]};var _0xb23c9b=_[_0x3f7f('0x29')](db[_0x3f7f('0x2a')]['rawAttributes'],function(_0x406ad3){return{'name':_0x406ad3[_0x3f7f('0x2b')],'type':_0x406ad3[_0x3f7f('0x2c')]['key']};});_0x3ad8f2[_0x3f7f('0x2d')]=_['map'](_0xb23c9b,_0x3f7f('0x27'));_0x3ad8f2['query']=_[_0x3f7f('0x2e')](_0x43b786[_0x3f7f('0x2f')]);_0x3ad8f2['filters']=_['intersection'](_0x3ad8f2[_0x3f7f('0x2d')],_0x3ad8f2[_0x3f7f('0x2f')]);_0xefecb7[_0x3f7f('0x30')]=_[_0x3f7f('0x31')](_0x3ad8f2[_0x3f7f('0x2d')],qs[_0x3f7f('0x32')](_0x43b786[_0x3f7f('0x2f')][_0x3f7f('0x32')]));_0xefecb7[_0x3f7f('0x30')]=_0xefecb7[_0x3f7f('0x30')][_0x3f7f('0x33')]?_0xefecb7[_0x3f7f('0x30')]:_0x3ad8f2[_0x3f7f('0x2d')];if(!_0x43b786[_0x3f7f('0x2f')][_0x3f7f('0x34')](_0x3f7f('0x35'))){_0xefecb7[_0x3f7f('0x1e')]=qs[_0x3f7f('0x1e')](_0x43b786[_0x3f7f('0x2f')]['limit']);_0xefecb7[_0x3f7f('0x1c')]=qs[_0x3f7f('0x1c')](_0x43b786[_0x3f7f('0x2f')][_0x3f7f('0x1c')]);}_0xefecb7[_0x3f7f('0x36')]=qs[_0x3f7f('0x37')](_0x43b786['query'][_0x3f7f('0x37')]);_0xefecb7[_0x3f7f('0x38')]=qs[_0x3f7f('0x39')](_[_0x3f7f('0x3a')](_0x43b786[_0x3f7f('0x2f')],_0x3ad8f2['filters']),_0xb23c9b);if(_0x43b786[_0x3f7f('0x2f')][_0x3f7f('0x3b')]){_0xefecb7[_0x3f7f('0x38')]=_[_0x3f7f('0x3c')](_0xefecb7['where'],{'$or':_[_0x3f7f('0x29')](_0xb23c9b,function(_0x41bb07){if(_0x41bb07[_0x3f7f('0x2c')]!==_0x3f7f('0x3d')){var _0x45fa7a={};_0x45fa7a[_0x41bb07[_0x3f7f('0x27')]]={'$like':'%'+_0x43b786[_0x3f7f('0x2f')][_0x3f7f('0x3b')]+'%'};return _0x45fa7a;}})});}_0xefecb7=_[_0x3f7f('0x3c')]({},_0xefecb7,_0x43b786[_0x3f7f('0x3e')]);var _0x3b53e6={'where':_0xefecb7[_0x3f7f('0x38')]};return db[_0x3f7f('0x2a')][_0x3f7f('0x1f')](_0x3b53e6)[_0x3f7f('0x24')](function(_0x3973c2){_0x10acb7['count']=_0x3973c2;if(_0x43b786[_0x3f7f('0x2f')][_0x3f7f('0x3f')]){_0xefecb7[_0x3f7f('0x40')]=[{'all':!![]}];}return db[_0x3f7f('0x2a')][_0x3f7f('0x41')](_0xefecb7);})['then'](function(_0x57b8ee){_0x10acb7[_0x3f7f('0x42')]=_0x57b8ee;return _0x10acb7;})[_0x3f7f('0x24')](respondWithFilteredResult(_0x18ab07,_0xefecb7))[_0x3f7f('0x43')](handleError(_0x18ab07,null));};exports[_0x3f7f('0x44')]=function(_0x5e1ad5,_0x1fc377){var _0x304804={'raw':!![],'where':{'id':_0x5e1ad5['params']['id']}},_0xcffa5a={};_0xcffa5a['model']=_[_0x3f7f('0x2e')](db[_0x3f7f('0x2a')][_0x3f7f('0x45')]);_0xcffa5a[_0x3f7f('0x2f')]=_[_0x3f7f('0x2e')](_0x5e1ad5[_0x3f7f('0x2f')]);_0xcffa5a[_0x3f7f('0x39')]=_[_0x3f7f('0x31')](_0xcffa5a[_0x3f7f('0x2d')],_0xcffa5a[_0x3f7f('0x2f')]);_0x304804[_0x3f7f('0x30')]=_['intersection'](_0xcffa5a[_0x3f7f('0x2d')],qs[_0x3f7f('0x32')](_0x5e1ad5['query'][_0x3f7f('0x32')]));_0x304804[_0x3f7f('0x30')]=_0x304804[_0x3f7f('0x30')][_0x3f7f('0x33')]?_0x304804[_0x3f7f('0x30')]:_0xcffa5a['model'];if(_0x5e1ad5[_0x3f7f('0x2f')]['includeAll']){_0x304804[_0x3f7f('0x40')]=[{'all':!![]}];}_0x304804=_[_0x3f7f('0x3c')]({},_0x304804,_0x5e1ad5[_0x3f7f('0x3e')]);return db['FaxApplication'][_0x3f7f('0x46')](_0x304804)[_0x3f7f('0x24')](handleEntityNotFound(_0x1fc377,null))['then'](respondWithResult(_0x1fc377,null))[_0x3f7f('0x43')](handleError(_0x1fc377,null));};exports['create']=function(_0x369aa7,_0x4f9df9){return db[_0x3f7f('0x2a')][_0x3f7f('0x47')](_0x369aa7[_0x3f7f('0x48')],{})[_0x3f7f('0x24')](respondWithResult(_0x4f9df9,0xc9))[_0x3f7f('0x43')](handleError(_0x4f9df9,null));};exports[_0x3f7f('0x23')]=function(_0x574956,_0x580356){if(_0x574956[_0x3f7f('0x48')]['id']){delete _0x574956[_0x3f7f('0x48')]['id'];}return db[_0x3f7f('0x2a')][_0x3f7f('0x46')]({'where':{'id':_0x574956['params']['id']}})[_0x3f7f('0x24')](handleEntityNotFound(_0x580356,null))[_0x3f7f('0x24')](saveUpdates(_0x574956[_0x3f7f('0x48')],null))[_0x3f7f('0x24')](respondWithResult(_0x580356,null))[_0x3f7f('0x43')](handleError(_0x580356,null));};exports['destroy']=function(_0x14fadd,_0x1e7378){return db[_0x3f7f('0x2a')][_0x3f7f('0x46')]({'where':{'id':_0x14fadd['params']['id']}})[_0x3f7f('0x24')](handleEntityNotFound(_0x1e7378,null))['then'](removeEntity(_0x1e7378,null))[_0x3f7f('0x43')](handleError(_0x1e7378,null));};
\ No newline at end of file