Built motion from commit (unavailable).|2.5.13
[motion2.git] / server / api / intFreshsalesField / intFreshsalesField.controller.js
index d24a7cc..c8f39e7 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x9e88=['ioredis','../../components/auth/service','../../components/parsers/advancedSearch','../../config/license/hardware','../../config/logger','../../config/utils','../../config/license/util','../../mysqldb','sendStatus','end','json','count','offset','limit','status','set','Content-Range','save','update','destroy','then','error','stack','name','index','FreshsalesField','rawAttributes','fieldName','type','key','model','map','query','keys','filters','intersection','attributes','fields','length','nolimit','order','sort','where','pick','filter','merge','rows','catch','params','includeAll','options','find','create','body','html-pdf','rimraf','zip-dir','request-promise','bluebird','mustache','sox','ejs','squel','crypto','desk.js','to-csv','querystring','papaparse'];(function(_0xcf5f30,_0x3d08c6){var _0x1e174f=function(_0x3a056e){while(--_0x3a056e){_0xcf5f30['push'](_0xcf5f30['shift']());}};_0x1e174f(++_0x3d08c6);}(_0x9e88,0x1ce));var _0x89e8=function(_0x27bbaa,_0x11f6ef){_0x27bbaa=_0x27bbaa-0x0;var _0x1fcf65=_0x9e88[_0x27bbaa];return _0x1fcf65;};'use strict';var pdf=require(_0x89e8('0x0'));var emlformat=require('eml-format');var rimraf=require(_0x89e8('0x1'));var zipdir=require(_0x89e8('0x2'));var jsonpatch=require('fast-json-patch');var rp=require(_0x89e8('0x3'));var moment=require('moment');var BPromise=require(_0x89e8('0x4'));var Mustache=require(_0x89e8('0x5'));var util=require('util');var path=require('path');var sox=require(_0x89e8('0x6'));var csv=require('to-csv');var ejs=require(_0x89e8('0x7'));var fs=require('fs');var _=require('lodash');var squel=require(_0x89e8('0x8'));var crypto=require(_0x89e8('0x9'));var jsforce=require('jsforce');var deskjs=require(_0x89e8('0xa'));var toCsv=require(_0x89e8('0xb'));var querystring=require(_0x89e8('0xc'));var Papa=require(_0x89e8('0xd'));var Redis=require(_0x89e8('0xe'));var authService=require(_0x89e8('0xf'));var qs=require('../../components/parsers/qs');var as=require(_0x89e8('0x10'));var hardwareService=require(_0x89e8('0x11'));var logger=require(_0x89e8('0x12'))('api');var utils=require(_0x89e8('0x13'));var config=require('../../config/environment');var licenseUtil=require(_0x89e8('0x14'));var db=require(_0x89e8('0x15'))['db'];function respondWithStatusCode(_0xdcd558,_0x19af40){_0x19af40=_0x19af40||0xcc;return function(_0x41ae99){if(_0x41ae99){return _0xdcd558[_0x89e8('0x16')](_0x19af40);}return _0xdcd558['status'](_0x19af40)[_0x89e8('0x17')]();};}function respondWithResult(_0x4d8ffb,_0x22c7ca){_0x22c7ca=_0x22c7ca||0xc8;return function(_0x1d0983){if(_0x1d0983){return _0x4d8ffb['status'](_0x22c7ca)[_0x89e8('0x18')](_0x1d0983);}};}function respondWithFilteredResult(_0x48294b,_0x16f2d4){return function(_0x42adac){if(_0x42adac){var _0xc69884=_0x42adac[_0x89e8('0x19')],_0xe8598b=_0x16f2d4[_0x89e8('0x1a')],_0x66d4fc=_0x16f2d4[_0x89e8('0x1a')]+_0x16f2d4[_0x89e8('0x1b')],_0x252279;if(_0x66d4fc>=_0xc69884){_0x66d4fc=_0xc69884;_0x252279=0xc8;}else{_0x252279=0xce;}_0x48294b[_0x89e8('0x1c')](_0x252279);return _0x48294b[_0x89e8('0x1d')](_0x89e8('0x1e'),_0xe8598b+'-'+_0x66d4fc+'/'+_0xc69884)[_0x89e8('0x18')](_0x42adac);}return null;};}function patchUpdates(_0x2f6491){return function(_0x4ba417){try{jsonpatch['apply'](_0x4ba417,_0x2f6491,!![]);}catch(_0x5dbe1f){return BPromise['reject'](_0x5dbe1f);}return _0x4ba417[_0x89e8('0x1f')]();};}function saveUpdates(_0x4120c8,_0x3f16ba){return function(_0x19c0b1){if(_0x19c0b1){return _0x19c0b1[_0x89e8('0x20')](_0x4120c8)['then'](function(_0x33f1d5){return _0x33f1d5;});}return null;};}function removeEntity(_0x3f0d9e,_0x2caefc){return function(_0x243db3){if(_0x243db3){return _0x243db3[_0x89e8('0x21')]()[_0x89e8('0x22')](function(){_0x3f0d9e[_0x89e8('0x1c')](0xcc)['end']();});}};}function handleEntityNotFound(_0x20c1c1,_0x5c18a8){return function(_0x4eae32){if(!_0x4eae32){_0x20c1c1['sendStatus'](0x194);}return _0x4eae32;};}function handleError(_0x11d2c9,_0x5a8505){_0x5a8505=_0x5a8505||0x1f4;return function(_0x3e5f0b){logger[_0x89e8('0x23')](_0x3e5f0b[_0x89e8('0x24')]);if(_0x3e5f0b[_0x89e8('0x25')]){delete _0x3e5f0b[_0x89e8('0x25')];}_0x11d2c9['status'](_0x5a8505)['send'](_0x3e5f0b);};}exports[_0x89e8('0x26')]=function(_0x2501e1,_0x5c7ccc){var _0x343ba7={},_0x59ce73={},_0x362445={'count':0x0,'rows':[]};var _0xa4b595=_['map'](db[_0x89e8('0x27')][_0x89e8('0x28')],function(_0x7c1d64){return{'name':_0x7c1d64[_0x89e8('0x29')],'type':_0x7c1d64[_0x89e8('0x2a')][_0x89e8('0x2b')]};});_0x59ce73[_0x89e8('0x2c')]=_[_0x89e8('0x2d')](_0xa4b595,_0x89e8('0x25'));_0x59ce73[_0x89e8('0x2e')]=_[_0x89e8('0x2f')](_0x2501e1['query']);_0x59ce73[_0x89e8('0x30')]=_[_0x89e8('0x31')](_0x59ce73['model'],_0x59ce73[_0x89e8('0x2e')]);_0x343ba7[_0x89e8('0x32')]=_[_0x89e8('0x31')](_0x59ce73[_0x89e8('0x2c')],qs['fields'](_0x2501e1[_0x89e8('0x2e')][_0x89e8('0x33')]));_0x343ba7[_0x89e8('0x32')]=_0x343ba7['attributes'][_0x89e8('0x34')]?_0x343ba7[_0x89e8('0x32')]:_0x59ce73[_0x89e8('0x2c')];if(!_0x2501e1[_0x89e8('0x2e')]['hasOwnProperty'](_0x89e8('0x35'))){_0x343ba7[_0x89e8('0x1b')]=qs[_0x89e8('0x1b')](_0x2501e1[_0x89e8('0x2e')][_0x89e8('0x1b')]);_0x343ba7['offset']=qs[_0x89e8('0x1a')](_0x2501e1['query'][_0x89e8('0x1a')]);}_0x343ba7[_0x89e8('0x36')]=qs[_0x89e8('0x37')](_0x2501e1['query'][_0x89e8('0x37')]);_0x343ba7[_0x89e8('0x38')]=qs['filters'](_[_0x89e8('0x39')](_0x2501e1[_0x89e8('0x2e')],_0x59ce73[_0x89e8('0x30')]),_0xa4b595);if(_0x2501e1[_0x89e8('0x2e')][_0x89e8('0x3a')]){_0x343ba7[_0x89e8('0x38')]=_[_0x89e8('0x3b')](_0x343ba7[_0x89e8('0x38')],{'$or':_[_0x89e8('0x2d')](_0xa4b595,function(_0x13a384){if(_0x13a384['type']!=='VIRTUAL'){var _0xf61acc={};_0xf61acc[_0x13a384[_0x89e8('0x25')]]={'$like':'%'+_0x2501e1[_0x89e8('0x2e')][_0x89e8('0x3a')]+'%'};return _0xf61acc;}})});}_0x343ba7=_[_0x89e8('0x3b')]({},_0x343ba7,_0x2501e1['options']);var _0x62d71d={'where':_0x343ba7[_0x89e8('0x38')]};return db[_0x89e8('0x27')][_0x89e8('0x19')](_0x62d71d)[_0x89e8('0x22')](function(_0x313c8d){_0x362445[_0x89e8('0x19')]=_0x313c8d;if(_0x2501e1[_0x89e8('0x2e')]['includeAll']){_0x343ba7['include']=[{'all':!![]}];}return db[_0x89e8('0x27')]['findAll'](_0x343ba7);})['then'](function(_0x457801){_0x362445[_0x89e8('0x3c')]=_0x457801;return _0x362445;})['then'](respondWithFilteredResult(_0x5c7ccc,_0x343ba7))[_0x89e8('0x3d')](handleError(_0x5c7ccc,null));};exports['show']=function(_0x12b54a,_0x4be4f6){var _0x403ae5={'raw':!![],'where':{'id':_0x12b54a[_0x89e8('0x3e')]['id']}},_0x221f47={};_0x221f47[_0x89e8('0x2c')]=_[_0x89e8('0x2f')](db[_0x89e8('0x27')][_0x89e8('0x28')]);_0x221f47[_0x89e8('0x2e')]=_[_0x89e8('0x2f')](_0x12b54a[_0x89e8('0x2e')]);_0x221f47[_0x89e8('0x30')]=_['intersection'](_0x221f47[_0x89e8('0x2c')],_0x221f47[_0x89e8('0x2e')]);_0x403ae5[_0x89e8('0x32')]=_[_0x89e8('0x31')](_0x221f47[_0x89e8('0x2c')],qs['fields'](_0x12b54a[_0x89e8('0x2e')]['fields']));_0x403ae5[_0x89e8('0x32')]=_0x403ae5[_0x89e8('0x32')]['length']?_0x403ae5[_0x89e8('0x32')]:_0x221f47[_0x89e8('0x2c')];if(_0x12b54a['query'][_0x89e8('0x3f')]){_0x403ae5['include']=[{'all':!![]}];}_0x403ae5=_[_0x89e8('0x3b')]({},_0x403ae5,_0x12b54a[_0x89e8('0x40')]);return db[_0x89e8('0x27')][_0x89e8('0x41')](_0x403ae5)[_0x89e8('0x22')](handleEntityNotFound(_0x4be4f6,null))[_0x89e8('0x22')](respondWithResult(_0x4be4f6,null))['catch'](handleError(_0x4be4f6,null));};exports['create']=function(_0x1ef511,_0x5a203a){return db[_0x89e8('0x27')][_0x89e8('0x42')](_0x1ef511[_0x89e8('0x43')],{})[_0x89e8('0x22')](respondWithResult(_0x5a203a,0xc9))[_0x89e8('0x3d')](handleError(_0x5a203a,null));};exports[_0x89e8('0x20')]=function(_0xa39944,_0x3967b3){if(_0xa39944[_0x89e8('0x43')]['id']){delete _0xa39944[_0x89e8('0x43')]['id'];}return db[_0x89e8('0x27')][_0x89e8('0x41')]({'where':{'id':_0xa39944['params']['id']}})[_0x89e8('0x22')](handleEntityNotFound(_0x3967b3,null))[_0x89e8('0x22')](saveUpdates(_0xa39944[_0x89e8('0x43')],null))[_0x89e8('0x22')](respondWithResult(_0x3967b3,null))[_0x89e8('0x3d')](handleError(_0x3967b3,null));};exports['destroy']=function(_0x454758,_0x1b64e1){return db[_0x89e8('0x27')][_0x89e8('0x41')]({'where':{'id':_0x454758[_0x89e8('0x3e')]['id']}})[_0x89e8('0x22')](handleEntityNotFound(_0x1b64e1,null))[_0x89e8('0x22')](removeEntity(_0x1b64e1,null))[_0x89e8('0x3d')](handleError(_0x1b64e1,null));};
\ No newline at end of file
+var _0xac14=['moment','bluebird','mustache','util','path','sox','to-csv','ejs','lodash','squel','crypto','jsforce','desk.js','querystring','papaparse','ioredis','../../components/auth/service','../../components/parsers/qs','../../components/parsers/advancedSearch','../../config/license/hardware','../../config/logger','api','../../config/utils','../../config/environment','../../config/license/util','../../mysqldb','sendStatus','status','json','count','offset','limit','set','Content-Range','apply','reject','update','then','destroy','stack','name','send','index','map','FreshsalesField','rawAttributes','fieldName','type','key','query','keys','intersection','model','attributes','fields','length','hasOwnProperty','nolimit','order','sort','pick','filters','filter','where','merge','options','includeAll','include','findAll','rows','catch','show','params','find','create','body','eml-format','rimraf','zip-dir','fast-json-patch'];(function(_0x1b8c96,_0x19a92d){var _0x224691=function(_0x7535b5){while(--_0x7535b5){_0x1b8c96['push'](_0x1b8c96['shift']());}};_0x224691(++_0x19a92d);}(_0xac14,0x13c));var _0x4ac1=function(_0x12c035,_0x2b35a9){_0x12c035=_0x12c035-0x0;var _0x2a0113=_0xac14[_0x12c035];return _0x2a0113;};'use strict';var pdf=require('html-pdf');var emlformat=require(_0x4ac1('0x0'));var rimraf=require(_0x4ac1('0x1'));var zipdir=require(_0x4ac1('0x2'));var jsonpatch=require(_0x4ac1('0x3'));var rp=require('request-promise');var moment=require(_0x4ac1('0x4'));var BPromise=require(_0x4ac1('0x5'));var Mustache=require(_0x4ac1('0x6'));var util=require(_0x4ac1('0x7'));var path=require(_0x4ac1('0x8'));var sox=require(_0x4ac1('0x9'));var csv=require(_0x4ac1('0xa'));var ejs=require(_0x4ac1('0xb'));var fs=require('fs');var _=require(_0x4ac1('0xc'));var squel=require(_0x4ac1('0xd'));var crypto=require(_0x4ac1('0xe'));var jsforce=require(_0x4ac1('0xf'));var deskjs=require(_0x4ac1('0x10'));var toCsv=require(_0x4ac1('0xa'));var querystring=require(_0x4ac1('0x11'));var Papa=require(_0x4ac1('0x12'));var Redis=require(_0x4ac1('0x13'));var authService=require(_0x4ac1('0x14'));var qs=require(_0x4ac1('0x15'));var as=require(_0x4ac1('0x16'));var hardwareService=require(_0x4ac1('0x17'));var logger=require(_0x4ac1('0x18'))(_0x4ac1('0x19'));var utils=require(_0x4ac1('0x1a'));var config=require(_0x4ac1('0x1b'));var licenseUtil=require(_0x4ac1('0x1c'));var db=require(_0x4ac1('0x1d'))['db'];function respondWithStatusCode(_0x50a319,_0x1597a6){_0x1597a6=_0x1597a6||0xcc;return function(_0x477ec1){if(_0x477ec1){return _0x50a319[_0x4ac1('0x1e')](_0x1597a6);}return _0x50a319[_0x4ac1('0x1f')](_0x1597a6)['end']();};}function respondWithResult(_0x1f0a82,_0x18ee31){_0x18ee31=_0x18ee31||0xc8;return function(_0x5bab17){if(_0x5bab17){return _0x1f0a82[_0x4ac1('0x1f')](_0x18ee31)[_0x4ac1('0x20')](_0x5bab17);}};}function respondWithFilteredResult(_0x29798a,_0xd93a){return function(_0x256811){if(_0x256811){var _0x356da4=_0x256811[_0x4ac1('0x21')],_0x1f0be1=_0xd93a[_0x4ac1('0x22')],_0x5e7330=_0xd93a[_0x4ac1('0x22')]+_0xd93a[_0x4ac1('0x23')],_0x1b51d1;if(_0x5e7330>=_0x356da4){_0x5e7330=_0x356da4;_0x1b51d1=0xc8;}else{_0x1b51d1=0xce;}_0x29798a[_0x4ac1('0x1f')](_0x1b51d1);return _0x29798a[_0x4ac1('0x24')](_0x4ac1('0x25'),_0x1f0be1+'-'+_0x5e7330+'/'+_0x356da4)[_0x4ac1('0x20')](_0x256811);}return null;};}function patchUpdates(_0x295674){return function(_0x390f25){try{jsonpatch[_0x4ac1('0x26')](_0x390f25,_0x295674,!![]);}catch(_0x58f7a7){return BPromise[_0x4ac1('0x27')](_0x58f7a7);}return _0x390f25['save']();};}function saveUpdates(_0x4a14a0,_0x358bdf){return function(_0x3361be){if(_0x3361be){return _0x3361be[_0x4ac1('0x28')](_0x4a14a0)[_0x4ac1('0x29')](function(_0x495a50){return _0x495a50;});}return null;};}function removeEntity(_0xed678f,_0x3bc86b){return function(_0x34c75a){if(_0x34c75a){return _0x34c75a[_0x4ac1('0x2a')]()[_0x4ac1('0x29')](function(){_0xed678f[_0x4ac1('0x1f')](0xcc)['end']();});}};}function handleEntityNotFound(_0x1997a7,_0x5d727b){return function(_0x1cf454){if(!_0x1cf454){_0x1997a7[_0x4ac1('0x1e')](0x194);}return _0x1cf454;};}function handleError(_0x1aca99,_0x38afcd){_0x38afcd=_0x38afcd||0x1f4;return function(_0x3da118){logger['error'](_0x3da118[_0x4ac1('0x2b')]);if(_0x3da118[_0x4ac1('0x2c')]){delete _0x3da118['name'];}_0x1aca99['status'](_0x38afcd)[_0x4ac1('0x2d')](_0x3da118);};}exports[_0x4ac1('0x2e')]=function(_0x4d6a86,_0x1efbae){var _0x38dac6={},_0x38b19d={},_0x530e6f={'count':0x0,'rows':[]};var _0x3502c0=_[_0x4ac1('0x2f')](db[_0x4ac1('0x30')][_0x4ac1('0x31')],function(_0x32c311){return{'name':_0x32c311[_0x4ac1('0x32')],'type':_0x32c311[_0x4ac1('0x33')][_0x4ac1('0x34')]};});_0x38b19d['model']=_[_0x4ac1('0x2f')](_0x3502c0,_0x4ac1('0x2c'));_0x38b19d[_0x4ac1('0x35')]=_[_0x4ac1('0x36')](_0x4d6a86['query']);_0x38b19d['filters']=_[_0x4ac1('0x37')](_0x38b19d[_0x4ac1('0x38')],_0x38b19d['query']);_0x38dac6[_0x4ac1('0x39')]=_[_0x4ac1('0x37')](_0x38b19d[_0x4ac1('0x38')],qs[_0x4ac1('0x3a')](_0x4d6a86[_0x4ac1('0x35')][_0x4ac1('0x3a')]));_0x38dac6['attributes']=_0x38dac6[_0x4ac1('0x39')][_0x4ac1('0x3b')]?_0x38dac6[_0x4ac1('0x39')]:_0x38b19d[_0x4ac1('0x38')];if(!_0x4d6a86['query'][_0x4ac1('0x3c')](_0x4ac1('0x3d'))){_0x38dac6['limit']=qs['limit'](_0x4d6a86[_0x4ac1('0x35')]['limit']);_0x38dac6[_0x4ac1('0x22')]=qs[_0x4ac1('0x22')](_0x4d6a86['query']['offset']);}_0x38dac6[_0x4ac1('0x3e')]=qs['sort'](_0x4d6a86[_0x4ac1('0x35')][_0x4ac1('0x3f')]);_0x38dac6['where']=qs['filters'](_[_0x4ac1('0x40')](_0x4d6a86[_0x4ac1('0x35')],_0x38b19d[_0x4ac1('0x41')]),_0x3502c0);if(_0x4d6a86[_0x4ac1('0x35')][_0x4ac1('0x42')]){_0x38dac6[_0x4ac1('0x43')]=_['merge'](_0x38dac6['where'],{'$or':_['map'](_0x3502c0,function(_0x56b973){if(_0x56b973[_0x4ac1('0x33')]!=='VIRTUAL'){var _0x566ac0={};_0x566ac0[_0x56b973[_0x4ac1('0x2c')]]={'$like':'%'+_0x4d6a86['query'][_0x4ac1('0x42')]+'%'};return _0x566ac0;}})});}_0x38dac6=_[_0x4ac1('0x44')]({},_0x38dac6,_0x4d6a86[_0x4ac1('0x45')]);var _0x418f1b={'where':_0x38dac6['where']};return db[_0x4ac1('0x30')]['count'](_0x418f1b)[_0x4ac1('0x29')](function(_0x12d78a){_0x530e6f['count']=_0x12d78a;if(_0x4d6a86[_0x4ac1('0x35')][_0x4ac1('0x46')]){_0x38dac6[_0x4ac1('0x47')]=[{'all':!![]}];}return db['FreshsalesField'][_0x4ac1('0x48')](_0x38dac6);})[_0x4ac1('0x29')](function(_0x45e400){_0x530e6f[_0x4ac1('0x49')]=_0x45e400;return _0x530e6f;})[_0x4ac1('0x29')](respondWithFilteredResult(_0x1efbae,_0x38dac6))[_0x4ac1('0x4a')](handleError(_0x1efbae,null));};exports[_0x4ac1('0x4b')]=function(_0xc020b5,_0x25a116){var _0x46c93d={'raw':!![],'where':{'id':_0xc020b5[_0x4ac1('0x4c')]['id']}},_0x4cc19a={};_0x4cc19a[_0x4ac1('0x38')]=_['keys'](db['FreshsalesField'][_0x4ac1('0x31')]);_0x4cc19a[_0x4ac1('0x35')]=_[_0x4ac1('0x36')](_0xc020b5[_0x4ac1('0x35')]);_0x4cc19a['filters']=_[_0x4ac1('0x37')](_0x4cc19a['model'],_0x4cc19a[_0x4ac1('0x35')]);_0x46c93d[_0x4ac1('0x39')]=_[_0x4ac1('0x37')](_0x4cc19a[_0x4ac1('0x38')],qs[_0x4ac1('0x3a')](_0xc020b5['query'][_0x4ac1('0x3a')]));_0x46c93d['attributes']=_0x46c93d['attributes'][_0x4ac1('0x3b')]?_0x46c93d[_0x4ac1('0x39')]:_0x4cc19a[_0x4ac1('0x38')];if(_0xc020b5[_0x4ac1('0x35')][_0x4ac1('0x46')]){_0x46c93d[_0x4ac1('0x47')]=[{'all':!![]}];}_0x46c93d=_[_0x4ac1('0x44')]({},_0x46c93d,_0xc020b5[_0x4ac1('0x45')]);return db['FreshsalesField'][_0x4ac1('0x4d')](_0x46c93d)[_0x4ac1('0x29')](handleEntityNotFound(_0x25a116,null))['then'](respondWithResult(_0x25a116,null))['catch'](handleError(_0x25a116,null));};exports[_0x4ac1('0x4e')]=function(_0x415689,_0x28336a){return db[_0x4ac1('0x30')][_0x4ac1('0x4e')](_0x415689[_0x4ac1('0x4f')],{})['then'](respondWithResult(_0x28336a,0xc9))[_0x4ac1('0x4a')](handleError(_0x28336a,null));};exports['update']=function(_0x5c5d59,_0x4aeb1e){if(_0x5c5d59['body']['id']){delete _0x5c5d59[_0x4ac1('0x4f')]['id'];}return db[_0x4ac1('0x30')][_0x4ac1('0x4d')]({'where':{'id':_0x5c5d59[_0x4ac1('0x4c')]['id']}})['then'](handleEntityNotFound(_0x4aeb1e,null))[_0x4ac1('0x29')](saveUpdates(_0x5c5d59[_0x4ac1('0x4f')],null))[_0x4ac1('0x29')](respondWithResult(_0x4aeb1e,null))['catch'](handleError(_0x4aeb1e,null));};exports[_0x4ac1('0x2a')]=function(_0x515810,_0x2b9046){return db['FreshsalesField']['find']({'where':{'id':_0x515810['params']['id']}})[_0x4ac1('0x29')](handleEntityNotFound(_0x2b9046,null))[_0x4ac1('0x29')](removeEntity(_0x2b9046,null))[_0x4ac1('0x4a')](handleError(_0x2b9046,null));};
\ No newline at end of file