Built motion from commit 092f8824.|2.5.49
[motion2.git] / server / api / intFreshsalesField / intFreshsalesField.controller.js
index 273028f..8df392c 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x1a21=['undefined','limit','count','set','Content-Range','save','update','destroy','then','error','stack','name','send','index','rawAttributes','fieldName','key','model','query','filters','intersection','fields','attributes','length','hasOwnProperty','nolimit','order','sort','where','pick','filter','merge','map','type','options','FreshsalesField','includeAll','findAll','rows','catch','show','params','keys','include','find','create','body','rimraf','zip-dir','request-promise','moment','bluebird','mustache','util','path','to-csv','fs-extra','lodash','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','end','status','json','offset'];(function(_0x34a923,_0x3ce38d){var _0x46442b=function(_0x110960){while(--_0x110960){_0x34a923['push'](_0x34a923['shift']());}};_0x46442b(++_0x3ce38d);}(_0x1a21,0xcd));var _0x11a2=function(_0xdd827a,_0x482ad2){_0xdd827a=_0xdd827a-0x0;var _0x2f46f1=_0x1a21[_0xdd827a];return _0x2f46f1;};'use strict';var emlformat=require('eml-format');var rimraf=require(_0x11a2('0x0'));var zipdir=require(_0x11a2('0x1'));var jsonpatch=require('fast-json-patch');var rp=require(_0x11a2('0x2'));var moment=require(_0x11a2('0x3'));var BPromise=require(_0x11a2('0x4'));var Mustache=require(_0x11a2('0x5'));var util=require(_0x11a2('0x6'));var path=require(_0x11a2('0x7'));var sox=require('sox');var csv=require(_0x11a2('0x8'));var ejs=require('ejs');var fs=require('fs');var fs_extra=require(_0x11a2('0x9'));var _=require(_0x11a2('0xa'));var squel=require('squel');var crypto=require(_0x11a2('0xb'));var jsforce=require(_0x11a2('0xc'));var deskjs=require(_0x11a2('0xd'));var toCsv=require(_0x11a2('0x8'));var querystring=require(_0x11a2('0xe'));var Papa=require(_0x11a2('0xf'));var Redis=require(_0x11a2('0x10'));var authService=require(_0x11a2('0x11'));var qs=require(_0x11a2('0x12'));var as=require(_0x11a2('0x13'));var hardwareService=require(_0x11a2('0x14'));var logger=require(_0x11a2('0x15'))(_0x11a2('0x16'));var utils=require(_0x11a2('0x17'));var config=require(_0x11a2('0x18'));var licenseUtil=require(_0x11a2('0x19'));var db=require(_0x11a2('0x1a'))['db'];function respondWithStatusCode(_0x2603fd,_0x3af3c2){_0x3af3c2=_0x3af3c2||0xcc;return function(_0x2b8081){if(_0x2b8081){return _0x2603fd[_0x11a2('0x1b')](_0x3af3c2);}return _0x2603fd['status'](_0x3af3c2)[_0x11a2('0x1c')]();};}function respondWithResult(_0x5eacd2,_0x2c142e){_0x2c142e=_0x2c142e||0xc8;return function(_0x1f25fb){if(_0x1f25fb){return _0x5eacd2[_0x11a2('0x1d')](_0x2c142e)[_0x11a2('0x1e')](_0x1f25fb);}};}function respondWithFilteredResult(_0x4c5d69,_0xe22747){return function(_0x2b1e98){if(_0x2b1e98){var _0x39a58d=typeof _0xe22747[_0x11a2('0x1f')]===_0x11a2('0x20')&&typeof _0xe22747[_0x11a2('0x21')]===_0x11a2('0x20');var _0x3d244b=_0x2b1e98[_0x11a2('0x22')];var _0xfa418=_0x39a58d?0x0:_0xe22747[_0x11a2('0x1f')];var _0x5bfbd9=_0x39a58d?_0x2b1e98[_0x11a2('0x22')]:_0xe22747[_0x11a2('0x1f')]+_0xe22747['limit'];var _0x238c37;if(_0x5bfbd9>=_0x3d244b){_0x5bfbd9=_0x3d244b;_0x238c37=0xc8;}else{_0x238c37=0xce;}_0x4c5d69[_0x11a2('0x1d')](_0x238c37);return _0x4c5d69[_0x11a2('0x23')](_0x11a2('0x24'),_0xfa418+'-'+_0x5bfbd9+'/'+_0x3d244b)[_0x11a2('0x1e')](_0x2b1e98);}return null;};}function patchUpdates(_0x33bf62){return function(_0xd2a770){try{jsonpatch['apply'](_0xd2a770,_0x33bf62,!![]);}catch(_0x2466d7){return BPromise['reject'](_0x2466d7);}return _0xd2a770[_0x11a2('0x25')]();};}function saveUpdates(_0x30559b,_0x59ad19){return function(_0x2048dc){if(_0x2048dc){return _0x2048dc[_0x11a2('0x26')](_0x30559b)['then'](function(_0x3dd615){return _0x3dd615;});}return null;};}function removeEntity(_0x95aabd,_0x14ca9b){return function(_0x552587){if(_0x552587){return _0x552587[_0x11a2('0x27')]()[_0x11a2('0x28')](function(){_0x95aabd[_0x11a2('0x1d')](0xcc)[_0x11a2('0x1c')]();});}};}function handleEntityNotFound(_0x5ea9fb,_0x56129d){return function(_0x510b75){if(!_0x510b75){_0x5ea9fb[_0x11a2('0x1b')](0x194);}return _0x510b75;};}function handleError(_0x3c2447,_0xca5a55){_0xca5a55=_0xca5a55||0x1f4;return function(_0x46ceda){logger[_0x11a2('0x29')](_0x46ceda[_0x11a2('0x2a')]);if(_0x46ceda[_0x11a2('0x2b')]){delete _0x46ceda['name'];}_0x3c2447[_0x11a2('0x1d')](_0xca5a55)[_0x11a2('0x2c')](_0x46ceda);};}exports[_0x11a2('0x2d')]=function(_0x389733,_0x41d2e3){var _0x547051={},_0x2b05d0={},_0x3ab636={'count':0x0,'rows':[]};var _0x929ddc=_['map'](db['FreshsalesField'][_0x11a2('0x2e')],function(_0x3ace75){return{'name':_0x3ace75[_0x11a2('0x2f')],'type':_0x3ace75['type'][_0x11a2('0x30')]};});_0x2b05d0[_0x11a2('0x31')]=_['map'](_0x929ddc,_0x11a2('0x2b'));_0x2b05d0[_0x11a2('0x32')]=_['keys'](_0x389733[_0x11a2('0x32')]);_0x2b05d0[_0x11a2('0x33')]=_[_0x11a2('0x34')](_0x2b05d0['model'],_0x2b05d0[_0x11a2('0x32')]);_0x547051['attributes']=_[_0x11a2('0x34')](_0x2b05d0[_0x11a2('0x31')],qs['fields'](_0x389733[_0x11a2('0x32')][_0x11a2('0x35')]));_0x547051[_0x11a2('0x36')]=_0x547051[_0x11a2('0x36')][_0x11a2('0x37')]?_0x547051[_0x11a2('0x36')]:_0x2b05d0[_0x11a2('0x31')];if(!_0x389733[_0x11a2('0x32')][_0x11a2('0x38')](_0x11a2('0x39'))){_0x547051['limit']=qs['limit'](_0x389733[_0x11a2('0x32')][_0x11a2('0x21')]);_0x547051['offset']=qs[_0x11a2('0x1f')](_0x389733[_0x11a2('0x32')][_0x11a2('0x1f')]);}_0x547051[_0x11a2('0x3a')]=qs[_0x11a2('0x3b')](_0x389733[_0x11a2('0x32')][_0x11a2('0x3b')]);_0x547051[_0x11a2('0x3c')]=qs['filters'](_[_0x11a2('0x3d')](_0x389733[_0x11a2('0x32')],_0x2b05d0[_0x11a2('0x33')]),_0x929ddc);if(_0x389733[_0x11a2('0x32')][_0x11a2('0x3e')]){_0x547051[_0x11a2('0x3c')]=_[_0x11a2('0x3f')](_0x547051[_0x11a2('0x3c')],{'$or':_[_0x11a2('0x40')](_0x929ddc,function(_0x1a7973){if(_0x1a7973[_0x11a2('0x41')]!=='VIRTUAL'){var _0x5b82fb={};_0x5b82fb[_0x1a7973[_0x11a2('0x2b')]]={'$like':'%'+_0x389733[_0x11a2('0x32')][_0x11a2('0x3e')]+'%'};return _0x5b82fb;}})});}_0x547051=_[_0x11a2('0x3f')]({},_0x547051,_0x389733[_0x11a2('0x42')]);var _0x129acb={'where':_0x547051[_0x11a2('0x3c')]};return db[_0x11a2('0x43')][_0x11a2('0x22')](_0x129acb)['then'](function(_0x464cc8){_0x3ab636[_0x11a2('0x22')]=_0x464cc8;if(_0x389733[_0x11a2('0x32')][_0x11a2('0x44')]){_0x547051['include']=[{'all':!![]}];}return db['FreshsalesField'][_0x11a2('0x45')](_0x547051);})[_0x11a2('0x28')](function(_0xda4d13){_0x3ab636[_0x11a2('0x46')]=_0xda4d13;return _0x3ab636;})[_0x11a2('0x28')](respondWithFilteredResult(_0x41d2e3,_0x547051))[_0x11a2('0x47')](handleError(_0x41d2e3,null));};exports[_0x11a2('0x48')]=function(_0x1b5192,_0x4d03c7){var _0x595da8={'raw':!![],'where':{'id':_0x1b5192[_0x11a2('0x49')]['id']}},_0xd902e0={};_0xd902e0[_0x11a2('0x31')]=_[_0x11a2('0x4a')](db['FreshsalesField']['rawAttributes']);_0xd902e0[_0x11a2('0x32')]=_[_0x11a2('0x4a')](_0x1b5192[_0x11a2('0x32')]);_0xd902e0[_0x11a2('0x33')]=_[_0x11a2('0x34')](_0xd902e0[_0x11a2('0x31')],_0xd902e0['query']);_0x595da8[_0x11a2('0x36')]=_['intersection'](_0xd902e0[_0x11a2('0x31')],qs['fields'](_0x1b5192[_0x11a2('0x32')][_0x11a2('0x35')]));_0x595da8[_0x11a2('0x36')]=_0x595da8[_0x11a2('0x36')][_0x11a2('0x37')]?_0x595da8['attributes']:_0xd902e0[_0x11a2('0x31')];if(_0x1b5192[_0x11a2('0x32')][_0x11a2('0x44')]){_0x595da8[_0x11a2('0x4b')]=[{'all':!![]}];}_0x595da8=_[_0x11a2('0x3f')]({},_0x595da8,_0x1b5192[_0x11a2('0x42')]);return db[_0x11a2('0x43')][_0x11a2('0x4c')](_0x595da8)[_0x11a2('0x28')](handleEntityNotFound(_0x4d03c7,null))[_0x11a2('0x28')](respondWithResult(_0x4d03c7,null))[_0x11a2('0x47')](handleError(_0x4d03c7,null));};exports[_0x11a2('0x4d')]=function(_0x2a993d,_0x4c254f){return db[_0x11a2('0x43')][_0x11a2('0x4d')](_0x2a993d[_0x11a2('0x4e')],{})['then'](respondWithResult(_0x4c254f,0xc9))[_0x11a2('0x47')](handleError(_0x4c254f,null));};exports[_0x11a2('0x26')]=function(_0x543296,_0x3ec781){if(_0x543296[_0x11a2('0x4e')]['id']){delete _0x543296[_0x11a2('0x4e')]['id'];}return db[_0x11a2('0x43')][_0x11a2('0x4c')]({'where':{'id':_0x543296['params']['id']}})[_0x11a2('0x28')](handleEntityNotFound(_0x3ec781,null))[_0x11a2('0x28')](saveUpdates(_0x543296['body'],null))['then'](respondWithResult(_0x3ec781,null))['catch'](handleError(_0x3ec781,null));};exports['destroy']=function(_0x1b84ba,_0x26495e){return db[_0x11a2('0x43')]['find']({'where':{'id':_0x1b84ba[_0x11a2('0x49')]['id']}})[_0x11a2('0x28')](handleEntityNotFound(_0x26495e,null))[_0x11a2('0x28')](removeEntity(_0x26495e,null))[_0x11a2('0x47')](handleError(_0x26495e,null));};
\ No newline at end of file
+var _0x975d=['offset','undefined','limit','count','Content-Range','apply','reject','save','update','destroy','then','end','error','stack','name','index','FreshsalesField','fieldName','type','query','keys','filters','model','attributes','intersection','fields','hasOwnProperty','nolimit','order','sort','where','pick','merge','map','VIRTUAL','options','includeAll','include','rows','catch','show','rawAttributes','find','create','body','params','eml-format','rimraf','zip-dir','fast-json-patch','moment','bluebird','mustache','util','path','sox','to-csv','fs-extra','lodash','squel','jsforce','querystring','papaparse','../../components/auth/service','../../components/parsers/qs','../../components/parsers/advancedSearch','../../config/logger','api','../../config/utils','../../config/environment','../../config/license/util','sendStatus','status','json'];(function(_0x405085,_0x49d439){var _0x46a55d=function(_0x245edc){while(--_0x245edc){_0x405085['push'](_0x405085['shift']());}};_0x46a55d(++_0x49d439);}(_0x975d,0x1a0));var _0xd975=function(_0x2e6f06,_0x2401ee){_0x2e6f06=_0x2e6f06-0x0;var _0x3cf218=_0x975d[_0x2e6f06];return _0x3cf218;};'use strict';var emlformat=require(_0xd975('0x0'));var rimraf=require(_0xd975('0x1'));var zipdir=require(_0xd975('0x2'));var jsonpatch=require(_0xd975('0x3'));var rp=require('request-promise');var moment=require(_0xd975('0x4'));var BPromise=require(_0xd975('0x5'));var Mustache=require(_0xd975('0x6'));var util=require(_0xd975('0x7'));var path=require(_0xd975('0x8'));var sox=require(_0xd975('0x9'));var csv=require(_0xd975('0xa'));var ejs=require('ejs');var fs=require('fs');var fs_extra=require(_0xd975('0xb'));var _=require(_0xd975('0xc'));var squel=require(_0xd975('0xd'));var crypto=require('crypto');var jsforce=require(_0xd975('0xe'));var deskjs=require('desk.js');var toCsv=require(_0xd975('0xa'));var querystring=require(_0xd975('0xf'));var Papa=require(_0xd975('0x10'));var Redis=require('ioredis');var authService=require(_0xd975('0x11'));var qs=require(_0xd975('0x12'));var as=require(_0xd975('0x13'));var hardwareService=require('../../config/license/hardware');var logger=require(_0xd975('0x14'))(_0xd975('0x15'));var utils=require(_0xd975('0x16'));var config=require(_0xd975('0x17'));var licenseUtil=require(_0xd975('0x18'));var db=require('../../mysqldb')['db'];function respondWithStatusCode(_0x3232c5,_0xcb5b4e){_0xcb5b4e=_0xcb5b4e||0xcc;return function(_0x28cfe8){if(_0x28cfe8){return _0x3232c5[_0xd975('0x19')](_0xcb5b4e);}return _0x3232c5[_0xd975('0x1a')](_0xcb5b4e)['end']();};}function respondWithResult(_0x1400f9,_0x511d6b){_0x511d6b=_0x511d6b||0xc8;return function(_0x3f30c9){if(_0x3f30c9){return _0x1400f9[_0xd975('0x1a')](_0x511d6b)[_0xd975('0x1b')](_0x3f30c9);}};}function respondWithFilteredResult(_0x1ffc30,_0x2efe61){return function(_0x41859a){if(_0x41859a){var _0x2032bc=typeof _0x2efe61[_0xd975('0x1c')]===_0xd975('0x1d')&&typeof _0x2efe61[_0xd975('0x1e')]===_0xd975('0x1d');var _0x336171=_0x41859a[_0xd975('0x1f')];var _0x4d8052=_0x2032bc?0x0:_0x2efe61[_0xd975('0x1c')];var _0x33f3ab=_0x2032bc?_0x41859a['count']:_0x2efe61[_0xd975('0x1c')]+_0x2efe61[_0xd975('0x1e')];var _0x21a440;if(_0x33f3ab>=_0x336171){_0x33f3ab=_0x336171;_0x21a440=0xc8;}else{_0x21a440=0xce;}_0x1ffc30[_0xd975('0x1a')](_0x21a440);return _0x1ffc30['set'](_0xd975('0x20'),_0x4d8052+'-'+_0x33f3ab+'/'+_0x336171)['json'](_0x41859a);}return null;};}function patchUpdates(_0x1548e4){return function(_0x5edf07){try{jsonpatch[_0xd975('0x21')](_0x5edf07,_0x1548e4,!![]);}catch(_0x2793a4){return BPromise[_0xd975('0x22')](_0x2793a4);}return _0x5edf07[_0xd975('0x23')]();};}function saveUpdates(_0x40bb98,_0x186d17){return function(_0xad95e2){if(_0xad95e2){return _0xad95e2[_0xd975('0x24')](_0x40bb98)['then'](function(_0x43fdbf){return _0x43fdbf;});}return null;};}function removeEntity(_0x31538c,_0x558f8b){return function(_0x245e98){if(_0x245e98){return _0x245e98[_0xd975('0x25')]()[_0xd975('0x26')](function(){_0x31538c['status'](0xcc)[_0xd975('0x27')]();});}};}function handleEntityNotFound(_0x274b31,_0xb7d803){return function(_0x21694b){if(!_0x21694b){_0x274b31[_0xd975('0x19')](0x194);}return _0x21694b;};}function handleError(_0x39864b,_0x4b28f6){_0x4b28f6=_0x4b28f6||0x1f4;return function(_0x1c4c98){logger[_0xd975('0x28')](_0x1c4c98[_0xd975('0x29')]);if(_0x1c4c98['name']){delete _0x1c4c98[_0xd975('0x2a')];}_0x39864b['status'](_0x4b28f6)['send'](_0x1c4c98);};}exports[_0xd975('0x2b')]=function(_0x3b2e9e,_0xc12996){var _0x33fd37={},_0x223474={},_0x36004c={'count':0x0,'rows':[]};var _0x469061=_['map'](db[_0xd975('0x2c')]['rawAttributes'],function(_0x5907db){return{'name':_0x5907db[_0xd975('0x2d')],'type':_0x5907db[_0xd975('0x2e')]['key']};});_0x223474['model']=_['map'](_0x469061,_0xd975('0x2a'));_0x223474[_0xd975('0x2f')]=_[_0xd975('0x30')](_0x3b2e9e['query']);_0x223474[_0xd975('0x31')]=_['intersection'](_0x223474[_0xd975('0x32')],_0x223474[_0xd975('0x2f')]);_0x33fd37[_0xd975('0x33')]=_[_0xd975('0x34')](_0x223474['model'],qs[_0xd975('0x35')](_0x3b2e9e[_0xd975('0x2f')][_0xd975('0x35')]));_0x33fd37[_0xd975('0x33')]=_0x33fd37['attributes']['length']?_0x33fd37[_0xd975('0x33')]:_0x223474[_0xd975('0x32')];if(!_0x3b2e9e['query'][_0xd975('0x36')](_0xd975('0x37'))){_0x33fd37[_0xd975('0x1e')]=qs[_0xd975('0x1e')](_0x3b2e9e[_0xd975('0x2f')]['limit']);_0x33fd37[_0xd975('0x1c')]=qs[_0xd975('0x1c')](_0x3b2e9e['query']['offset']);}_0x33fd37[_0xd975('0x38')]=qs['sort'](_0x3b2e9e[_0xd975('0x2f')][_0xd975('0x39')]);_0x33fd37[_0xd975('0x3a')]=qs[_0xd975('0x31')](_[_0xd975('0x3b')](_0x3b2e9e[_0xd975('0x2f')],_0x223474[_0xd975('0x31')]),_0x469061);if(_0x3b2e9e['query']['filter']){_0x33fd37[_0xd975('0x3a')]=_[_0xd975('0x3c')](_0x33fd37[_0xd975('0x3a')],{'$or':_[_0xd975('0x3d')](_0x469061,function(_0x3def6e){if(_0x3def6e['type']!==_0xd975('0x3e')){var _0x383fff={};_0x383fff[_0x3def6e[_0xd975('0x2a')]]={'$like':'%'+_0x3b2e9e[_0xd975('0x2f')]['filter']+'%'};return _0x383fff;}})});}_0x33fd37=_[_0xd975('0x3c')]({},_0x33fd37,_0x3b2e9e[_0xd975('0x3f')]);var _0x51ed2d={'where':_0x33fd37[_0xd975('0x3a')]};return db['FreshsalesField']['count'](_0x51ed2d)[_0xd975('0x26')](function(_0x1a2adf){_0x36004c[_0xd975('0x1f')]=_0x1a2adf;if(_0x3b2e9e[_0xd975('0x2f')][_0xd975('0x40')]){_0x33fd37[_0xd975('0x41')]=[{'all':!![]}];}return db[_0xd975('0x2c')]['findAll'](_0x33fd37);})['then'](function(_0x473603){_0x36004c[_0xd975('0x42')]=_0x473603;return _0x36004c;})[_0xd975('0x26')](respondWithFilteredResult(_0xc12996,_0x33fd37))[_0xd975('0x43')](handleError(_0xc12996,null));};exports[_0xd975('0x44')]=function(_0x118b00,_0x5a7946){var _0x4b6c72={'raw':!![],'where':{'id':_0x118b00['params']['id']}},_0x414b78={};_0x414b78[_0xd975('0x32')]=_[_0xd975('0x30')](db[_0xd975('0x2c')][_0xd975('0x45')]);_0x414b78[_0xd975('0x2f')]=_[_0xd975('0x30')](_0x118b00['query']);_0x414b78[_0xd975('0x31')]=_[_0xd975('0x34')](_0x414b78[_0xd975('0x32')],_0x414b78[_0xd975('0x2f')]);_0x4b6c72[_0xd975('0x33')]=_[_0xd975('0x34')](_0x414b78[_0xd975('0x32')],qs[_0xd975('0x35')](_0x118b00[_0xd975('0x2f')][_0xd975('0x35')]));_0x4b6c72[_0xd975('0x33')]=_0x4b6c72[_0xd975('0x33')]['length']?_0x4b6c72['attributes']:_0x414b78[_0xd975('0x32')];if(_0x118b00[_0xd975('0x2f')][_0xd975('0x40')]){_0x4b6c72[_0xd975('0x41')]=[{'all':!![]}];}_0x4b6c72=_[_0xd975('0x3c')]({},_0x4b6c72,_0x118b00[_0xd975('0x3f')]);return db['FreshsalesField'][_0xd975('0x46')](_0x4b6c72)[_0xd975('0x26')](handleEntityNotFound(_0x5a7946,null))[_0xd975('0x26')](respondWithResult(_0x5a7946,null))[_0xd975('0x43')](handleError(_0x5a7946,null));};exports[_0xd975('0x47')]=function(_0x3f6aa0,_0x1a99e0){return db[_0xd975('0x2c')][_0xd975('0x47')](_0x3f6aa0[_0xd975('0x48')],{})[_0xd975('0x26')](respondWithResult(_0x1a99e0,0xc9))[_0xd975('0x43')](handleError(_0x1a99e0,null));};exports['update']=function(_0x28fa1e,_0x5b454d){if(_0x28fa1e['body']['id']){delete _0x28fa1e['body']['id'];}return db[_0xd975('0x2c')][_0xd975('0x46')]({'where':{'id':_0x28fa1e[_0xd975('0x49')]['id']}})[_0xd975('0x26')](handleEntityNotFound(_0x5b454d,null))['then'](saveUpdates(_0x28fa1e[_0xd975('0x48')],null))[_0xd975('0x26')](respondWithResult(_0x5b454d,null))[_0xd975('0x43')](handleError(_0x5b454d,null));};exports[_0xd975('0x25')]=function(_0x5a786d,_0x5cb6c6){return db['FreshsalesField'][_0xd975('0x46')]({'where':{'id':_0x5a786d[_0xd975('0x49')]['id']}})[_0xd975('0x26')](handleEntityNotFound(_0x5cb6c6,null))[_0xd975('0x26')](removeEntity(_0x5cb6c6,null))['catch'](handleError(_0x5cb6c6,null));};
\ No newline at end of file