Built motion from commit (unavailable).|2.5.22
[motion2.git] / server / api / userProfileSection / userProfileSection.controller.js
index a3fbd02..fd121ee 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xce6e=['../../components/parsers/advancedSearch','../../config/license/hardware','api','../../config/utils','../../config/environment','../../mysqldb','status','json','count','offset','limit','set','Content-Range','apply','save','then','destroy','error','stack','name','send','index','map','UserProfileSection','fieldName','type','key','query','filters','intersection','attributes','model','fields','length','hasOwnProperty','nolimit','order','sort','where','pick','filter','merge','VIRTUAL','includeAll','rows','params','keys','rawAttributes','include','options','find','catch','create','body','describe','html-pdf','eml-format','rimraf','zip-dir','fast-json-patch','request-promise','moment','bluebird','mustache','util','path','ejs','lodash','squel','jsforce','to-csv','papaparse','../../components/auth/service','../../components/parsers/qs'];(function(_0x167cc1,_0x56ef5a){var _0x10bc4b=function(_0xd6a255){while(--_0xd6a255){_0x167cc1['push'](_0x167cc1['shift']());}};_0x10bc4b(++_0x56ef5a);}(_0xce6e,0xcb));var _0xece6=function(_0x3dd15e,_0x1f0015){_0x3dd15e=_0x3dd15e-0x0;var _0x231fd0=_0xce6e[_0x3dd15e];return _0x231fd0;};'use strict';var pdf=require(_0xece6('0x0'));var emlformat=require(_0xece6('0x1'));var rimraf=require(_0xece6('0x2'));var zipdir=require(_0xece6('0x3'));var jsonpatch=require(_0xece6('0x4'));var rp=require(_0xece6('0x5'));var moment=require(_0xece6('0x6'));var BPromise=require(_0xece6('0x7'));var Mustache=require(_0xece6('0x8'));var util=require(_0xece6('0x9'));var path=require(_0xece6('0xa'));var sox=require('sox');var csv=require('to-csv');var ejs=require(_0xece6('0xb'));var fs=require('fs');var _=require(_0xece6('0xc'));var squel=require(_0xece6('0xd'));var crypto=require('crypto');var jsforce=require(_0xece6('0xe'));var deskjs=require('desk.js');var toCsv=require(_0xece6('0xf'));var querystring=require('querystring');var Papa=require(_0xece6('0x10'));var Redis=require('ioredis');var authService=require(_0xece6('0x11'));var qs=require(_0xece6('0x12'));var as=require(_0xece6('0x13'));var hardwareService=require(_0xece6('0x14'));var logger=require('../../config/logger')(_0xece6('0x15'));var utils=require(_0xece6('0x16'));var config=require(_0xece6('0x17'));var db=require(_0xece6('0x18'))['db'];function respondWithStatusCode(_0x4da0f0,_0x3cdd22){_0x3cdd22=_0x3cdd22||0xcc;return function(_0x452bf7){if(_0x452bf7){return _0x4da0f0['sendStatus'](_0x3cdd22);}return _0x4da0f0['status'](_0x3cdd22)['end']();};}function respondWithResult(_0x3194df,_0x4052c0){_0x4052c0=_0x4052c0||0xc8;return function(_0x4786c5){if(_0x4786c5){return _0x3194df[_0xece6('0x19')](_0x4052c0)[_0xece6('0x1a')](_0x4786c5);}};}function respondWithFilteredResult(_0x182034,_0x317835){return function(_0x35761d){if(_0x35761d){var _0x389a55=_0x35761d[_0xece6('0x1b')],_0x28f732=_0x317835[_0xece6('0x1c')],_0x5a5c06=_0x317835[_0xece6('0x1c')]+_0x317835[_0xece6('0x1d')],_0x1ff433;if(_0x5a5c06>=_0x389a55){_0x5a5c06=_0x389a55;_0x1ff433=0xc8;}else{_0x1ff433=0xce;}_0x182034[_0xece6('0x19')](_0x1ff433);return _0x182034[_0xece6('0x1e')](_0xece6('0x1f'),_0x28f732+'-'+_0x5a5c06+'/'+_0x389a55)[_0xece6('0x1a')](_0x35761d);}return null;};}function patchUpdates(_0x847b94){return function(_0x2157d6){try{jsonpatch[_0xece6('0x20')](_0x2157d6,_0x847b94,!![]);}catch(_0x399915){return BPromise['reject'](_0x399915);}return _0x2157d6[_0xece6('0x21')]();};}function saveUpdates(_0x180dd7,_0x577072){return function(_0x304b06){if(_0x304b06){return _0x304b06['update'](_0x180dd7)[_0xece6('0x22')](function(_0x447fe0){return _0x447fe0;});}return null;};}function removeEntity(_0x1f007d,_0x377363){return function(_0x144b84){if(_0x144b84){return _0x144b84[_0xece6('0x23')]()[_0xece6('0x22')](function(){_0x1f007d[_0xece6('0x19')](0xcc)['end']();});}};}function handleEntityNotFound(_0x52ca7c,_0x2df8ac){return function(_0x105457){if(!_0x105457){_0x52ca7c['sendStatus'](0x194);}return _0x105457;};}function handleError(_0x6fc82f,_0x10aa4d){_0x10aa4d=_0x10aa4d||0x1f4;return function(_0x3239ef){logger[_0xece6('0x24')](_0x3239ef[_0xece6('0x25')]);if(_0x3239ef[_0xece6('0x26')]){delete _0x3239ef[_0xece6('0x26')];}_0x6fc82f[_0xece6('0x19')](_0x10aa4d)[_0xece6('0x27')](_0x3239ef);};}exports[_0xece6('0x28')]=function(_0x5518d4,_0x47eae6){var _0x442a6c={},_0x1fb8c8={},_0x3ab060={'count':0x0,'rows':[]};var _0x1b6ec9=_[_0xece6('0x29')](db[_0xece6('0x2a')]['rawAttributes'],function(_0x47498e){return{'name':_0x47498e[_0xece6('0x2b')],'type':_0x47498e[_0xece6('0x2c')][_0xece6('0x2d')]};});_0x1fb8c8['model']=_['map'](_0x1b6ec9,_0xece6('0x26'));_0x1fb8c8['query']=_['keys'](_0x5518d4[_0xece6('0x2e')]);_0x1fb8c8[_0xece6('0x2f')]=_[_0xece6('0x30')](_0x1fb8c8['model'],_0x1fb8c8[_0xece6('0x2e')]);_0x442a6c[_0xece6('0x31')]=_[_0xece6('0x30')](_0x1fb8c8[_0xece6('0x32')],qs['fields'](_0x5518d4['query'][_0xece6('0x33')]));_0x442a6c['attributes']=_0x442a6c[_0xece6('0x31')][_0xece6('0x34')]?_0x442a6c[_0xece6('0x31')]:_0x1fb8c8[_0xece6('0x32')];if(!_0x5518d4[_0xece6('0x2e')][_0xece6('0x35')](_0xece6('0x36'))){_0x442a6c[_0xece6('0x1d')]=qs[_0xece6('0x1d')](_0x5518d4[_0xece6('0x2e')][_0xece6('0x1d')]);_0x442a6c[_0xece6('0x1c')]=qs[_0xece6('0x1c')](_0x5518d4[_0xece6('0x2e')][_0xece6('0x1c')]);}_0x442a6c[_0xece6('0x37')]=qs[_0xece6('0x38')](_0x5518d4['query'][_0xece6('0x38')]);_0x442a6c[_0xece6('0x39')]=qs[_0xece6('0x2f')](_[_0xece6('0x3a')](_0x5518d4[_0xece6('0x2e')],_0x1fb8c8['filters']));if(_0x5518d4['query'][_0xece6('0x3b')]){_0x442a6c[_0xece6('0x39')]=_[_0xece6('0x3c')](_0x442a6c[_0xece6('0x39')],{'$or':_[_0xece6('0x29')](_0x1b6ec9,function(_0x522943){if(_0x522943[_0xece6('0x2c')]!==_0xece6('0x3d')){var _0x37ada7={};_0x37ada7[_0x522943[_0xece6('0x26')]]={'$like':'%'+_0x5518d4[_0xece6('0x2e')]['filter']+'%'};return _0x37ada7;}})});}_0x442a6c=_[_0xece6('0x3c')]({},_0x442a6c,_0x5518d4['options']);var _0x3dcbbd={'where':_0x442a6c[_0xece6('0x39')]};return db['UserProfileSection'][_0xece6('0x1b')](_0x3dcbbd)['then'](function(_0x1f2289){_0x3ab060['count']=_0x1f2289;if(_0x5518d4[_0xece6('0x2e')][_0xece6('0x3e')]){_0x442a6c['include']=[{'all':!![]}];}return db[_0xece6('0x2a')]['findAll'](_0x442a6c);})[_0xece6('0x22')](function(_0x3e2085){_0x3ab060[_0xece6('0x3f')]=_0x3e2085;return _0x3ab060;})[_0xece6('0x22')](respondWithFilteredResult(_0x47eae6,_0x442a6c))['catch'](handleError(_0x47eae6,null));};exports['show']=function(_0x5150de,_0x383c20){var _0x3020e1={'raw':![],'where':{'id':_0x5150de[_0xece6('0x40')]['id']}},_0x14bac6={};_0x14bac6[_0xece6('0x32')]=_[_0xece6('0x41')](db[_0xece6('0x2a')][_0xece6('0x42')]);_0x14bac6[_0xece6('0x2e')]=_['keys'](_0x5150de[_0xece6('0x2e')]);_0x14bac6[_0xece6('0x2f')]=_['intersection'](_0x14bac6[_0xece6('0x32')],_0x14bac6[_0xece6('0x2e')]);_0x3020e1[_0xece6('0x31')]=_[_0xece6('0x30')](_0x14bac6['model'],qs[_0xece6('0x33')](_0x5150de[_0xece6('0x2e')][_0xece6('0x33')]));_0x3020e1[_0xece6('0x31')]=_0x3020e1[_0xece6('0x31')][_0xece6('0x34')]?_0x3020e1[_0xece6('0x31')]:_0x14bac6[_0xece6('0x32')];if(_0x5150de['query'][_0xece6('0x3e')]){_0x3020e1[_0xece6('0x43')]=[{'all':!![]}];}_0x3020e1=_[_0xece6('0x3c')]({},_0x3020e1,_0x5150de[_0xece6('0x44')]);return db[_0xece6('0x2a')][_0xece6('0x45')](_0x3020e1)[_0xece6('0x22')](handleEntityNotFound(_0x383c20,null))[_0xece6('0x22')](respondWithResult(_0x383c20,null))[_0xece6('0x46')](handleError(_0x383c20,null));};exports['create']=function(_0x40d097,_0x1fd1c6){return db[_0xece6('0x2a')][_0xece6('0x47')](_0x40d097[_0xece6('0x48')],{})[_0xece6('0x22')](respondWithResult(_0x1fd1c6,0xc9))[_0xece6('0x46')](handleError(_0x1fd1c6,null));};exports['update']=function(_0x506669,_0x16a899){if(_0x506669[_0xece6('0x48')]['id']){delete _0x506669[_0xece6('0x48')]['id'];}return db[_0xece6('0x2a')][_0xece6('0x45')]({'where':{'id':_0x506669[_0xece6('0x40')]['id']}})['then'](handleEntityNotFound(_0x16a899,null))[_0xece6('0x22')](saveUpdates(_0x506669['body'],null))[_0xece6('0x22')](respondWithResult(_0x16a899,null))[_0xece6('0x46')](handleError(_0x16a899,null));};exports[_0xece6('0x23')]=function(_0x420ae7,_0x35e241){return db[_0xece6('0x2a')]['find']({'where':{'id':_0x420ae7['params']['id']}})[_0xece6('0x22')](handleEntityNotFound(_0x35e241,null))['then'](removeEntity(_0x35e241,null))[_0xece6('0x46')](handleError(_0x35e241,null));};exports[_0xece6('0x49')]=function(_0x167f3f,_0x3f4b1b){return db[_0xece6('0x2a')]['describe']()[_0xece6('0x22')](respondWithResult(_0x3f4b1b,null))[_0xece6('0x46')](handleError(_0x3f4b1b,null));};
\ No newline at end of file
+var _0xe752=['options','includeAll','include','findAll','rows','catch','show','params','find','create','body','describe','html-pdf','eml-format','rimraf','zip-dir','fast-json-patch','request-promise','moment','bluebird','mustache','util','sox','to-csv','ejs','lodash','squel','crypto','desk.js','querystring','ioredis','../../components/auth/service','../../components/parsers/advancedSearch','../../config/license/hardware','../../config/logger','api','../../config/utils','../../config/environment','../../config/license/util','../../mysqldb','sendStatus','status','end','json','count','offset','set','apply','reject','save','update','then','destroy','stack','name','map','UserProfileSection','rawAttributes','fieldName','type','key','model','query','keys','intersection','fields','attributes','length','nolimit','limit','order','sort','filters','pick','where','VIRTUAL','filter','merge'];(function(_0xfb820a,_0x5bed2c){var _0x351481=function(_0x3e1bca){while(--_0x3e1bca){_0xfb820a['push'](_0xfb820a['shift']());}};_0x351481(++_0x5bed2c);}(_0xe752,0x1e0));var _0x2e75=function(_0x48855e,_0x11bfe2){_0x48855e=_0x48855e-0x0;var _0x282312=_0xe752[_0x48855e];return _0x282312;};'use strict';var pdf=require(_0x2e75('0x0'));var emlformat=require(_0x2e75('0x1'));var rimraf=require(_0x2e75('0x2'));var zipdir=require(_0x2e75('0x3'));var jsonpatch=require(_0x2e75('0x4'));var rp=require(_0x2e75('0x5'));var moment=require(_0x2e75('0x6'));var BPromise=require(_0x2e75('0x7'));var Mustache=require(_0x2e75('0x8'));var util=require(_0x2e75('0x9'));var path=require('path');var sox=require(_0x2e75('0xa'));var csv=require(_0x2e75('0xb'));var ejs=require(_0x2e75('0xc'));var fs=require('fs');var _=require(_0x2e75('0xd'));var squel=require(_0x2e75('0xe'));var crypto=require(_0x2e75('0xf'));var jsforce=require('jsforce');var deskjs=require(_0x2e75('0x10'));var toCsv=require(_0x2e75('0xb'));var querystring=require(_0x2e75('0x11'));var Papa=require('papaparse');var Redis=require(_0x2e75('0x12'));var authService=require(_0x2e75('0x13'));var qs=require('../../components/parsers/qs');var as=require(_0x2e75('0x14'));var hardwareService=require(_0x2e75('0x15'));var logger=require(_0x2e75('0x16'))(_0x2e75('0x17'));var utils=require(_0x2e75('0x18'));var config=require(_0x2e75('0x19'));var licenseUtil=require(_0x2e75('0x1a'));var db=require(_0x2e75('0x1b'))['db'];function respondWithStatusCode(_0x2437b7,_0x157afa){_0x157afa=_0x157afa||0xcc;return function(_0xaac183){if(_0xaac183){return _0x2437b7[_0x2e75('0x1c')](_0x157afa);}return _0x2437b7[_0x2e75('0x1d')](_0x157afa)[_0x2e75('0x1e')]();};}function respondWithResult(_0x36a44b,_0x4758f0){_0x4758f0=_0x4758f0||0xc8;return function(_0x4c1948){if(_0x4c1948){return _0x36a44b[_0x2e75('0x1d')](_0x4758f0)[_0x2e75('0x1f')](_0x4c1948);}};}function respondWithFilteredResult(_0xd33159,_0x2a793b){return function(_0x34974e){if(_0x34974e){var _0x5df43b=_0x34974e[_0x2e75('0x20')],_0x1e7e6f=_0x2a793b['offset'],_0x533c99=_0x2a793b[_0x2e75('0x21')]+_0x2a793b['limit'],_0x4c6cf0;if(_0x533c99>=_0x5df43b){_0x533c99=_0x5df43b;_0x4c6cf0=0xc8;}else{_0x4c6cf0=0xce;}_0xd33159['status'](_0x4c6cf0);return _0xd33159[_0x2e75('0x22')]('Content-Range',_0x1e7e6f+'-'+_0x533c99+'/'+_0x5df43b)[_0x2e75('0x1f')](_0x34974e);}return null;};}function patchUpdates(_0x400407){return function(_0x2b60aa){try{jsonpatch[_0x2e75('0x23')](_0x2b60aa,_0x400407,!![]);}catch(_0x656490){return BPromise[_0x2e75('0x24')](_0x656490);}return _0x2b60aa[_0x2e75('0x25')]();};}function saveUpdates(_0x1ad3d7,_0xfaef9d){return function(_0x4b5de7){if(_0x4b5de7){return _0x4b5de7[_0x2e75('0x26')](_0x1ad3d7)[_0x2e75('0x27')](function(_0x3200f4){return _0x3200f4;});}return null;};}function removeEntity(_0x50e3c8,_0x5a7726){return function(_0x34b7f5){if(_0x34b7f5){return _0x34b7f5[_0x2e75('0x28')]()[_0x2e75('0x27')](function(){_0x50e3c8[_0x2e75('0x1d')](0xcc)[_0x2e75('0x1e')]();});}};}function handleEntityNotFound(_0x125323,_0xcc676d){return function(_0x3ad81d){if(!_0x3ad81d){_0x125323[_0x2e75('0x1c')](0x194);}return _0x3ad81d;};}function handleError(_0x22550c,_0x52573f){_0x52573f=_0x52573f||0x1f4;return function(_0xc90445){logger['error'](_0xc90445[_0x2e75('0x29')]);if(_0xc90445[_0x2e75('0x2a')]){delete _0xc90445[_0x2e75('0x2a')];}_0x22550c[_0x2e75('0x1d')](_0x52573f)['send'](_0xc90445);};}exports['index']=function(_0x415473,_0xac11f7){var _0x4c1b6b={},_0x48e6c4={},_0x49dee9={'count':0x0,'rows':[]};var _0x4a7bd3=_[_0x2e75('0x2b')](db[_0x2e75('0x2c')][_0x2e75('0x2d')],function(_0x5a99d0){return{'name':_0x5a99d0[_0x2e75('0x2e')],'type':_0x5a99d0[_0x2e75('0x2f')][_0x2e75('0x30')]};});_0x48e6c4[_0x2e75('0x31')]=_[_0x2e75('0x2b')](_0x4a7bd3,_0x2e75('0x2a'));_0x48e6c4[_0x2e75('0x32')]=_[_0x2e75('0x33')](_0x415473['query']);_0x48e6c4['filters']=_[_0x2e75('0x34')](_0x48e6c4[_0x2e75('0x31')],_0x48e6c4[_0x2e75('0x32')]);_0x4c1b6b['attributes']=_['intersection'](_0x48e6c4[_0x2e75('0x31')],qs[_0x2e75('0x35')](_0x415473['query'][_0x2e75('0x35')]));_0x4c1b6b[_0x2e75('0x36')]=_0x4c1b6b[_0x2e75('0x36')][_0x2e75('0x37')]?_0x4c1b6b[_0x2e75('0x36')]:_0x48e6c4[_0x2e75('0x31')];if(!_0x415473[_0x2e75('0x32')]['hasOwnProperty'](_0x2e75('0x38'))){_0x4c1b6b[_0x2e75('0x39')]=qs['limit'](_0x415473['query'][_0x2e75('0x39')]);_0x4c1b6b['offset']=qs[_0x2e75('0x21')](_0x415473[_0x2e75('0x32')]['offset']);}_0x4c1b6b[_0x2e75('0x3a')]=qs[_0x2e75('0x3b')](_0x415473[_0x2e75('0x32')][_0x2e75('0x3b')]);_0x4c1b6b['where']=qs[_0x2e75('0x3c')](_[_0x2e75('0x3d')](_0x415473['query'],_0x48e6c4[_0x2e75('0x3c')]),_0x4a7bd3);if(_0x415473['query']['filter']){_0x4c1b6b[_0x2e75('0x3e')]=_['merge'](_0x4c1b6b[_0x2e75('0x3e')],{'$or':_[_0x2e75('0x2b')](_0x4a7bd3,function(_0x4c657b){if(_0x4c657b[_0x2e75('0x2f')]!==_0x2e75('0x3f')){var _0x5e286e={};_0x5e286e[_0x4c657b[_0x2e75('0x2a')]]={'$like':'%'+_0x415473[_0x2e75('0x32')][_0x2e75('0x40')]+'%'};return _0x5e286e;}})});}_0x4c1b6b=_[_0x2e75('0x41')]({},_0x4c1b6b,_0x415473[_0x2e75('0x42')]);var _0x2f9323={'where':_0x4c1b6b[_0x2e75('0x3e')]};return db[_0x2e75('0x2c')]['count'](_0x2f9323)[_0x2e75('0x27')](function(_0x4bc3a2){_0x49dee9[_0x2e75('0x20')]=_0x4bc3a2;if(_0x415473[_0x2e75('0x32')][_0x2e75('0x43')]){_0x4c1b6b[_0x2e75('0x44')]=[{'all':!![]}];}return db[_0x2e75('0x2c')][_0x2e75('0x45')](_0x4c1b6b);})['then'](function(_0x2548a5){_0x49dee9[_0x2e75('0x46')]=_0x2548a5;return _0x49dee9;})['then'](respondWithFilteredResult(_0xac11f7,_0x4c1b6b))[_0x2e75('0x47')](handleError(_0xac11f7,null));};exports[_0x2e75('0x48')]=function(_0x3d013b,_0x99f12b){var _0x53d8e5={'raw':![],'where':{'id':_0x3d013b[_0x2e75('0x49')]['id']}},_0x5f47cd={};_0x5f47cd[_0x2e75('0x31')]=_[_0x2e75('0x33')](db[_0x2e75('0x2c')][_0x2e75('0x2d')]);_0x5f47cd[_0x2e75('0x32')]=_[_0x2e75('0x33')](_0x3d013b['query']);_0x5f47cd[_0x2e75('0x3c')]=_[_0x2e75('0x34')](_0x5f47cd[_0x2e75('0x31')],_0x5f47cd[_0x2e75('0x32')]);_0x53d8e5['attributes']=_[_0x2e75('0x34')](_0x5f47cd[_0x2e75('0x31')],qs['fields'](_0x3d013b['query'][_0x2e75('0x35')]));_0x53d8e5[_0x2e75('0x36')]=_0x53d8e5[_0x2e75('0x36')]['length']?_0x53d8e5['attributes']:_0x5f47cd[_0x2e75('0x31')];if(_0x3d013b['query'][_0x2e75('0x43')]){_0x53d8e5['include']=[{'all':!![]}];}_0x53d8e5=_['merge']({},_0x53d8e5,_0x3d013b[_0x2e75('0x42')]);return db[_0x2e75('0x2c')][_0x2e75('0x4a')](_0x53d8e5)[_0x2e75('0x27')](handleEntityNotFound(_0x99f12b,null))[_0x2e75('0x27')](respondWithResult(_0x99f12b,null))[_0x2e75('0x47')](handleError(_0x99f12b,null));};exports[_0x2e75('0x4b')]=function(_0x164d05,_0x143f06){return db[_0x2e75('0x2c')][_0x2e75('0x4b')](_0x164d05[_0x2e75('0x4c')],{})[_0x2e75('0x27')](respondWithResult(_0x143f06,0xc9))[_0x2e75('0x47')](handleError(_0x143f06,null));};exports[_0x2e75('0x26')]=function(_0x5b8704,_0x1d278f){if(_0x5b8704[_0x2e75('0x4c')]['id']){delete _0x5b8704['body']['id'];}return db[_0x2e75('0x2c')][_0x2e75('0x4a')]({'where':{'id':_0x5b8704[_0x2e75('0x49')]['id']}})[_0x2e75('0x27')](handleEntityNotFound(_0x1d278f,null))[_0x2e75('0x27')](saveUpdates(_0x5b8704['body'],null))['then'](respondWithResult(_0x1d278f,null))[_0x2e75('0x47')](handleError(_0x1d278f,null));};exports['destroy']=function(_0x152c2a,_0x1e4465){return db['UserProfileSection'][_0x2e75('0x4a')]({'where':{'id':_0x152c2a[_0x2e75('0x49')]['id']}})[_0x2e75('0x27')](handleEntityNotFound(_0x1e4465,null))[_0x2e75('0x27')](removeEntity(_0x1e4465,null))[_0x2e75('0x47')](handleError(_0x1e4465,null));};exports[_0x2e75('0x4d')]=function(_0x1e6af5,_0x48ce95){return db[_0x2e75('0x2c')][_0x2e75('0x4d')]()[_0x2e75('0x27')](respondWithResult(_0x48ce95,null))[_0x2e75('0x47')](handleError(_0x48ce95,null));};
\ No newline at end of file