Built motion from commit 00bf23f6.|2.6.16
[motion2.git] / server / api / cmHopperHistory / cmHopperHistory.controller.js
index 42dde1e..45848a1 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xabab=['uniqueid','find','html-pdf','eml-format','fast-json-patch','request-promise','mustache','util','path','sox','ejs','lodash','squel','crypto','jsforce','querystring','papaparse','ioredis','../../components/auth/service','../../components/parsers/advancedSearch','../../config/license/hardware','../../config/logger','../../config/license/util','sendStatus','status','end','limit','set','Content-Range','json','apply','reject','save','update','then','destroy','error','name','index','fieldName','type','key','model','map','query','keys','intersection','fields','attributes','length','hasOwnProperty','offset','order','sort','where','filters','pick','filter','merge','VIRTUAL','options','CmHopperHistory','count','includeAll','include','rows','catch','show','params','describe','body'];(function(_0x4c445a,_0x4ee80f){var _0x2f611c=function(_0x4f3699){while(--_0x4f3699){_0x4c445a['push'](_0x4c445a['shift']());}};_0x2f611c(++_0x4ee80f);}(_0xabab,0x11e));var _0xbaba=function(_0x39a2a5,_0x362bf4){_0x39a2a5=_0x39a2a5-0x0;var _0x45786f=_0xabab[_0x39a2a5];return _0x45786f;};'use strict';var pdf=require(_0xbaba('0x0'));var emlformat=require(_0xbaba('0x1'));var rimraf=require('rimraf');var zipdir=require('zip-dir');var jsonpatch=require(_0xbaba('0x2'));var rp=require(_0xbaba('0x3'));var moment=require('moment');var BPromise=require('bluebird');var Mustache=require(_0xbaba('0x4'));var util=require(_0xbaba('0x5'));var path=require(_0xbaba('0x6'));var sox=require(_0xbaba('0x7'));var csv=require('to-csv');var ejs=require(_0xbaba('0x8'));var fs=require('fs');var _=require(_0xbaba('0x9'));var squel=require(_0xbaba('0xa'));var crypto=require(_0xbaba('0xb'));var jsforce=require(_0xbaba('0xc'));var deskjs=require('desk.js');var toCsv=require('to-csv');var querystring=require(_0xbaba('0xd'));var Papa=require(_0xbaba('0xe'));var Redis=require(_0xbaba('0xf'));var authService=require(_0xbaba('0x10'));var qs=require('../../components/parsers/qs');var as=require(_0xbaba('0x11'));var hardwareService=require(_0xbaba('0x12'));var logger=require(_0xbaba('0x13'))('api');var utils=require('../../config/utils');var config=require('../../config/environment');var licenseUtil=require(_0xbaba('0x14'));var db=require('../../mysqldb')['db'];function respondWithStatusCode(_0x30bbf4,_0x591f91){_0x591f91=_0x591f91||0xcc;return function(_0x228c3d){if(_0x228c3d){return _0x30bbf4[_0xbaba('0x15')](_0x591f91);}return _0x30bbf4[_0xbaba('0x16')](_0x591f91)[_0xbaba('0x17')]();};}function respondWithResult(_0x1379e2,_0xc059a6){_0xc059a6=_0xc059a6||0xc8;return function(_0x1c4b9f){if(_0x1c4b9f){return _0x1379e2[_0xbaba('0x16')](_0xc059a6)['json'](_0x1c4b9f);}};}function respondWithFilteredResult(_0x32e5a0,_0x4afd21){return function(_0xe9e0ff){if(_0xe9e0ff){var _0x28e1f8=_0xe9e0ff['count'],_0x3c4ef2=_0x4afd21['offset'],_0x2286c7=_0x4afd21['offset']+_0x4afd21[_0xbaba('0x18')],_0x227dd8;if(_0x2286c7>=_0x28e1f8){_0x2286c7=_0x28e1f8;_0x227dd8=0xc8;}else{_0x227dd8=0xce;}_0x32e5a0['status'](_0x227dd8);return _0x32e5a0[_0xbaba('0x19')](_0xbaba('0x1a'),_0x3c4ef2+'-'+_0x2286c7+'/'+_0x28e1f8)[_0xbaba('0x1b')](_0xe9e0ff);}return null;};}function patchUpdates(_0x4e3c5a){return function(_0x52feac){try{jsonpatch[_0xbaba('0x1c')](_0x52feac,_0x4e3c5a,!![]);}catch(_0x889b50){return BPromise[_0xbaba('0x1d')](_0x889b50);}return _0x52feac[_0xbaba('0x1e')]();};}function saveUpdates(_0x48aecd,_0x7be6ce){return function(_0x40bdd0){if(_0x40bdd0){return _0x40bdd0[_0xbaba('0x1f')](_0x48aecd)[_0xbaba('0x20')](function(_0x2eb81b){return _0x2eb81b;});}return null;};}function removeEntity(_0xaf39f0,_0x5610){return function(_0x1f2fb4){if(_0x1f2fb4){return _0x1f2fb4[_0xbaba('0x21')]()[_0xbaba('0x20')](function(){_0xaf39f0[_0xbaba('0x16')](0xcc)['end']();});}};}function handleEntityNotFound(_0x13dc4e,_0x4560d7){return function(_0x47e60f){if(!_0x47e60f){_0x13dc4e[_0xbaba('0x15')](0x194);}return _0x47e60f;};}function handleError(_0x403e89,_0x13c377){_0x13c377=_0x13c377||0x1f4;return function(_0x12d4e7){logger[_0xbaba('0x22')](_0x12d4e7['stack']);if(_0x12d4e7[_0xbaba('0x23')]){delete _0x12d4e7['name'];}_0x403e89[_0xbaba('0x16')](_0x13c377)['send'](_0x12d4e7);};}exports[_0xbaba('0x24')]=function(_0x54cc8b,_0x9edb9a){var _0x3a6d45={},_0x251e1d={},_0x252e16={'count':0x0,'rows':[]};var _0x3ca5aa=_['map'](db['CmHopperHistory']['rawAttributes'],function(_0xf463dd){return{'name':_0xf463dd[_0xbaba('0x25')],'type':_0xf463dd[_0xbaba('0x26')][_0xbaba('0x27')]};});_0x251e1d[_0xbaba('0x28')]=_[_0xbaba('0x29')](_0x3ca5aa,'name');_0x251e1d[_0xbaba('0x2a')]=_[_0xbaba('0x2b')](_0x54cc8b['query']);_0x251e1d['filters']=_['intersection'](_0x251e1d[_0xbaba('0x28')],_0x251e1d[_0xbaba('0x2a')]);_0x3a6d45['attributes']=_[_0xbaba('0x2c')](_0x251e1d['model'],qs[_0xbaba('0x2d')](_0x54cc8b[_0xbaba('0x2a')][_0xbaba('0x2d')]));_0x3a6d45['attributes']=_0x3a6d45[_0xbaba('0x2e')][_0xbaba('0x2f')]?_0x3a6d45[_0xbaba('0x2e')]:_0x251e1d['model'];if(!_0x54cc8b[_0xbaba('0x2a')][_0xbaba('0x30')]('nolimit')){_0x3a6d45[_0xbaba('0x18')]=qs[_0xbaba('0x18')](_0x54cc8b[_0xbaba('0x2a')][_0xbaba('0x18')]);_0x3a6d45[_0xbaba('0x31')]=qs[_0xbaba('0x31')](_0x54cc8b[_0xbaba('0x2a')][_0xbaba('0x31')]);}_0x3a6d45[_0xbaba('0x32')]=qs[_0xbaba('0x33')](_0x54cc8b['query'][_0xbaba('0x33')]);_0x3a6d45[_0xbaba('0x34')]=qs[_0xbaba('0x35')](_[_0xbaba('0x36')](_0x54cc8b[_0xbaba('0x2a')],_0x251e1d[_0xbaba('0x35')]),_0x3ca5aa);if(_0x54cc8b[_0xbaba('0x2a')][_0xbaba('0x37')]){_0x3a6d45[_0xbaba('0x34')]=_[_0xbaba('0x38')](_0x3a6d45['where'],{'$or':_['map'](_0x3ca5aa,function(_0x4af3fb){if(_0x4af3fb[_0xbaba('0x26')]!==_0xbaba('0x39')){var _0x318152={};_0x318152[_0x4af3fb[_0xbaba('0x23')]]={'$like':'%'+_0x54cc8b['query'][_0xbaba('0x37')]+'%'};return _0x318152;}})});}_0x3a6d45=_['merge']({},_0x3a6d45,_0x54cc8b[_0xbaba('0x3a')]);var _0x4143b0={'where':_0x3a6d45[_0xbaba('0x34')]};return db[_0xbaba('0x3b')][_0xbaba('0x3c')](_0x4143b0)[_0xbaba('0x20')](function(_0x154d1d){_0x252e16[_0xbaba('0x3c')]=_0x154d1d;if(_0x54cc8b['query'][_0xbaba('0x3d')]){_0x3a6d45[_0xbaba('0x3e')]=[{'all':!![]}];}return db[_0xbaba('0x3b')]['findAll'](_0x3a6d45);})['then'](function(_0x57b972){_0x252e16[_0xbaba('0x3f')]=_0x57b972;return _0x252e16;})[_0xbaba('0x20')](respondWithFilteredResult(_0x9edb9a,_0x3a6d45))[_0xbaba('0x40')](handleError(_0x9edb9a,null));};exports[_0xbaba('0x41')]=function(_0x3aaa08,_0x2a8db6){var _0x1c851a={'raw':!![],'where':{'id':_0x3aaa08[_0xbaba('0x42')]['id']}},_0x33aba0={};_0x33aba0[_0xbaba('0x28')]=_[_0xbaba('0x2b')](db[_0xbaba('0x3b')]['rawAttributes']);_0x33aba0['query']=_[_0xbaba('0x2b')](_0x3aaa08[_0xbaba('0x2a')]);_0x33aba0[_0xbaba('0x35')]=_['intersection'](_0x33aba0['model'],_0x33aba0[_0xbaba('0x2a')]);_0x1c851a[_0xbaba('0x2e')]=_[_0xbaba('0x2c')](_0x33aba0[_0xbaba('0x28')],qs[_0xbaba('0x2d')](_0x3aaa08[_0xbaba('0x2a')][_0xbaba('0x2d')]));_0x1c851a[_0xbaba('0x2e')]=_0x1c851a[_0xbaba('0x2e')][_0xbaba('0x2f')]?_0x1c851a[_0xbaba('0x2e')]:_0x33aba0['model'];if(_0x3aaa08[_0xbaba('0x2a')]['includeAll']){_0x1c851a[_0xbaba('0x3e')]=[{'all':!![]}];}_0x1c851a=_[_0xbaba('0x38')]({},_0x1c851a,_0x3aaa08[_0xbaba('0x3a')]);return db[_0xbaba('0x3b')]['find'](_0x1c851a)[_0xbaba('0x20')](handleEntityNotFound(_0x2a8db6,null))[_0xbaba('0x20')](respondWithResult(_0x2a8db6,null))[_0xbaba('0x40')](handleError(_0x2a8db6,null));};exports['create']=function(_0x3f8877,_0x4391c4){return db[_0xbaba('0x3b')]['create'](_0x3f8877['body'],{})[_0xbaba('0x20')](respondWithResult(_0x4391c4,0xc9))[_0xbaba('0x40')](handleError(_0x4391c4,null));};exports[_0xbaba('0x43')]=function(_0x301b08,_0x5ea901){return db['CmHopperHistory'][_0xbaba('0x43')]()['then'](respondWithResult(_0x5ea901,null))[_0xbaba('0x40')](handleError(_0x5ea901,null));};exports[_0xbaba('0x1f')]=function(_0x4e25f2,_0x169496){if(_0x4e25f2[_0xbaba('0x44')][_0xbaba('0x45')]){delete _0x4e25f2[_0xbaba('0x44')][_0xbaba('0x45')];}return db['CmHopperHistory'][_0xbaba('0x46')]({'where':{'uniqueid':_0x4e25f2[_0xbaba('0x42')]['id']}})['then'](handleEntityNotFound(_0x169496,null))['then'](saveUpdates(_0x4e25f2[_0xbaba('0x44')],null))[_0xbaba('0x20')](respondWithResult(_0x169496,null))['catch'](handleError(_0x169496,null));};
\ No newline at end of file
+var _0xcfd5=['crypto','../../components/auth/service','../../components/parsers/advancedSearch','../../config/license/hardware','../../config/logger','api','../../config/license/util','sendStatus','status','end','json','undefined','limit','count','offset','set','Content-Range','apply','save','update','then','error','stack','name','send','index','map','CmHopperHistory','rawAttributes','fieldName','type','key','model','query','keys','filters','fields','attributes','length','hasOwnProperty','sort','where','pick','merge','VIRTUAL','filter','includeAll','include','findAll','rows','params','intersection','options','find','body','catch','describe','uniqueid','rimraf','zip-dir','fast-json-patch','request-promise','moment','bluebird','util','path','sox','to-csv','ejs','fs-extra','lodash','squel'];(function(_0x4f39de,_0x595d15){var _0xe8eeb9=function(_0x4cd423){while(--_0x4cd423){_0x4f39de['push'](_0x4f39de['shift']());}};_0xe8eeb9(++_0x595d15);}(_0xcfd5,0x112));var _0x5cfd=function(_0xde9c14,_0x5947d4){_0xde9c14=_0xde9c14-0x0;var _0x14fedd=_0xcfd5[_0xde9c14];return _0x14fedd;};'use strict';var emlformat=require('eml-format');var rimraf=require(_0x5cfd('0x0'));var zipdir=require(_0x5cfd('0x1'));var jsonpatch=require(_0x5cfd('0x2'));var rp=require(_0x5cfd('0x3'));var moment=require(_0x5cfd('0x4'));var BPromise=require(_0x5cfd('0x5'));var Mustache=require('mustache');var util=require(_0x5cfd('0x6'));var path=require(_0x5cfd('0x7'));var sox=require(_0x5cfd('0x8'));var csv=require(_0x5cfd('0x9'));var ejs=require(_0x5cfd('0xa'));var fs=require('fs');var fs_extra=require(_0x5cfd('0xb'));var _=require(_0x5cfd('0xc'));var squel=require(_0x5cfd('0xd'));var crypto=require(_0x5cfd('0xe'));var jsforce=require('jsforce');var deskjs=require('desk.js');var toCsv=require(_0x5cfd('0x9'));var querystring=require('querystring');var Papa=require('papaparse');var Redis=require('ioredis');var authService=require(_0x5cfd('0xf'));var qs=require('../../components/parsers/qs');var as=require(_0x5cfd('0x10'));var hardwareService=require(_0x5cfd('0x11'));var logger=require(_0x5cfd('0x12'))(_0x5cfd('0x13'));var utils=require('../../config/utils');var config=require('../../config/environment');var licenseUtil=require(_0x5cfd('0x14'));var db=require('../../mysqldb')['db'];function respondWithStatusCode(_0x4c0309,_0x14d3bf){_0x14d3bf=_0x14d3bf||0xcc;return function(_0x54d648){if(_0x54d648){return _0x4c0309[_0x5cfd('0x15')](_0x14d3bf);}return _0x4c0309[_0x5cfd('0x16')](_0x14d3bf)[_0x5cfd('0x17')]();};}function respondWithResult(_0x56b4d4,_0x1f218a){_0x1f218a=_0x1f218a||0xc8;return function(_0x38959b){if(_0x38959b){return _0x56b4d4[_0x5cfd('0x16')](_0x1f218a)[_0x5cfd('0x18')](_0x38959b);}};}function respondWithFilteredResult(_0x46b050,_0x1da81e){return function(_0x10da32){if(_0x10da32){var _0x10d1fe=typeof _0x1da81e['offset']===_0x5cfd('0x19')&&typeof _0x1da81e[_0x5cfd('0x1a')]===_0x5cfd('0x19');var _0x5a78ff=_0x10da32[_0x5cfd('0x1b')];var _0x53754d=_0x10d1fe?0x0:_0x1da81e[_0x5cfd('0x1c')];var _0xb25381=_0x10d1fe?_0x10da32['count']:_0x1da81e['offset']+_0x1da81e[_0x5cfd('0x1a')];var _0x2a2798;if(_0xb25381>=_0x5a78ff){_0xb25381=_0x5a78ff;_0x2a2798=0xc8;}else{_0x2a2798=0xce;}_0x46b050[_0x5cfd('0x16')](_0x2a2798);return _0x46b050[_0x5cfd('0x1d')](_0x5cfd('0x1e'),_0x53754d+'-'+_0xb25381+'/'+_0x5a78ff)[_0x5cfd('0x18')](_0x10da32);}return null;};}function patchUpdates(_0x385a49){return function(_0x34245d){try{jsonpatch[_0x5cfd('0x1f')](_0x34245d,_0x385a49,!![]);}catch(_0x43a142){return BPromise['reject'](_0x43a142);}return _0x34245d[_0x5cfd('0x20')]();};}function saveUpdates(_0x3b0e13,_0x470f29){return function(_0x1eb528){if(_0x1eb528){return _0x1eb528[_0x5cfd('0x21')](_0x3b0e13)[_0x5cfd('0x22')](function(_0x46fe71){return _0x46fe71;});}return null;};}function removeEntity(_0x1c111a,_0x5a914c){return function(_0x2be2d1){if(_0x2be2d1){return _0x2be2d1['destroy']()[_0x5cfd('0x22')](function(){_0x1c111a[_0x5cfd('0x16')](0xcc)[_0x5cfd('0x17')]();});}};}function handleEntityNotFound(_0x5c847f,_0x358f9c){return function(_0x1efd35){if(!_0x1efd35){_0x5c847f[_0x5cfd('0x15')](0x194);}return _0x1efd35;};}function handleError(_0x5cf553,_0x5633db){_0x5633db=_0x5633db||0x1f4;return function(_0x3dbe62){logger[_0x5cfd('0x23')](_0x3dbe62[_0x5cfd('0x24')]);if(_0x3dbe62[_0x5cfd('0x25')]){delete _0x3dbe62[_0x5cfd('0x25')];}_0x5cf553[_0x5cfd('0x16')](_0x5633db)[_0x5cfd('0x26')](_0x3dbe62);};}exports[_0x5cfd('0x27')]=function(_0x410ae7,_0x239a96){var _0x24b586={},_0x12b719={},_0x2f1b50={'count':0x0,'rows':[]};var _0x8b7fa0=_[_0x5cfd('0x28')](db[_0x5cfd('0x29')][_0x5cfd('0x2a')],function(_0x63d80f){return{'name':_0x63d80f[_0x5cfd('0x2b')],'type':_0x63d80f[_0x5cfd('0x2c')][_0x5cfd('0x2d')]};});_0x12b719[_0x5cfd('0x2e')]=_[_0x5cfd('0x28')](_0x8b7fa0,'name');_0x12b719[_0x5cfd('0x2f')]=_[_0x5cfd('0x30')](_0x410ae7[_0x5cfd('0x2f')]);_0x12b719[_0x5cfd('0x31')]=_['intersection'](_0x12b719['model'],_0x12b719[_0x5cfd('0x2f')]);_0x24b586['attributes']=_['intersection'](_0x12b719[_0x5cfd('0x2e')],qs[_0x5cfd('0x32')](_0x410ae7[_0x5cfd('0x2f')]['fields']));_0x24b586[_0x5cfd('0x33')]=_0x24b586[_0x5cfd('0x33')][_0x5cfd('0x34')]?_0x24b586[_0x5cfd('0x33')]:_0x12b719['model'];if(!_0x410ae7[_0x5cfd('0x2f')][_0x5cfd('0x35')]('nolimit')){_0x24b586['limit']=qs[_0x5cfd('0x1a')](_0x410ae7[_0x5cfd('0x2f')][_0x5cfd('0x1a')]);_0x24b586[_0x5cfd('0x1c')]=qs['offset'](_0x410ae7[_0x5cfd('0x2f')][_0x5cfd('0x1c')]);}_0x24b586['order']=qs[_0x5cfd('0x36')](_0x410ae7[_0x5cfd('0x2f')][_0x5cfd('0x36')]);_0x24b586[_0x5cfd('0x37')]=qs[_0x5cfd('0x31')](_[_0x5cfd('0x38')](_0x410ae7[_0x5cfd('0x2f')],_0x12b719[_0x5cfd('0x31')]),_0x8b7fa0);if(_0x410ae7[_0x5cfd('0x2f')]['filter']){_0x24b586['where']=_[_0x5cfd('0x39')](_0x24b586['where'],{'$or':_[_0x5cfd('0x28')](_0x8b7fa0,function(_0x28e9ee){if(_0x28e9ee[_0x5cfd('0x2c')]!==_0x5cfd('0x3a')){var _0x447184={};_0x447184[_0x28e9ee['name']]={'$like':'%'+_0x410ae7[_0x5cfd('0x2f')][_0x5cfd('0x3b')]+'%'};return _0x447184;}})});}_0x24b586=_[_0x5cfd('0x39')]({},_0x24b586,_0x410ae7['options']);var _0x51218d={'where':_0x24b586[_0x5cfd('0x37')]};return db[_0x5cfd('0x29')][_0x5cfd('0x1b')](_0x51218d)[_0x5cfd('0x22')](function(_0x3d6bba){_0x2f1b50['count']=_0x3d6bba;if(_0x410ae7['query'][_0x5cfd('0x3c')]){_0x24b586[_0x5cfd('0x3d')]=[{'all':!![]}];}return db['CmHopperHistory'][_0x5cfd('0x3e')](_0x24b586);})[_0x5cfd('0x22')](function(_0x59eae3){_0x2f1b50[_0x5cfd('0x3f')]=_0x59eae3;return _0x2f1b50;})['then'](respondWithFilteredResult(_0x239a96,_0x24b586))['catch'](handleError(_0x239a96,null));};exports['show']=function(_0x3785,_0x1ab837){var _0x1ee2ad={'raw':!![],'where':{'id':_0x3785[_0x5cfd('0x40')]['id']}},_0x2edf9e={};_0x2edf9e['model']=_[_0x5cfd('0x30')](db['CmHopperHistory']['rawAttributes']);_0x2edf9e[_0x5cfd('0x2f')]=_[_0x5cfd('0x30')](_0x3785[_0x5cfd('0x2f')]);_0x2edf9e[_0x5cfd('0x31')]=_[_0x5cfd('0x41')](_0x2edf9e['model'],_0x2edf9e[_0x5cfd('0x2f')]);_0x1ee2ad[_0x5cfd('0x33')]=_[_0x5cfd('0x41')](_0x2edf9e[_0x5cfd('0x2e')],qs[_0x5cfd('0x32')](_0x3785[_0x5cfd('0x2f')][_0x5cfd('0x32')]));_0x1ee2ad[_0x5cfd('0x33')]=_0x1ee2ad[_0x5cfd('0x33')][_0x5cfd('0x34')]?_0x1ee2ad['attributes']:_0x2edf9e[_0x5cfd('0x2e')];if(_0x3785[_0x5cfd('0x2f')][_0x5cfd('0x3c')]){_0x1ee2ad[_0x5cfd('0x3d')]=[{'all':!![]}];}_0x1ee2ad=_['merge']({},_0x1ee2ad,_0x3785[_0x5cfd('0x42')]);return db['CmHopperHistory'][_0x5cfd('0x43')](_0x1ee2ad)['then'](handleEntityNotFound(_0x1ab837,null))['then'](respondWithResult(_0x1ab837,null))['catch'](handleError(_0x1ab837,null));};exports['create']=function(_0x212ad4,_0x421c57){return db['CmHopperHistory']['create'](_0x212ad4[_0x5cfd('0x44')],{})[_0x5cfd('0x22')](respondWithResult(_0x421c57,0xc9))[_0x5cfd('0x45')](handleError(_0x421c57,null));};exports[_0x5cfd('0x46')]=function(_0x29476c,_0x3b021e){return db[_0x5cfd('0x29')][_0x5cfd('0x46')]()[_0x5cfd('0x22')](respondWithResult(_0x3b021e,null))[_0x5cfd('0x45')](handleError(_0x3b021e,null));};exports[_0x5cfd('0x21')]=function(_0x320078,_0x2d968b){if(_0x320078[_0x5cfd('0x44')][_0x5cfd('0x47')]){delete _0x320078['body']['uniqueid'];}return db['CmHopperHistory']['find']({'where':{'uniqueid':_0x320078[_0x5cfd('0x40')]['id']}})[_0x5cfd('0x22')](handleEntityNotFound(_0x2d968b,null))['then'](saveUpdates(_0x320078[_0x5cfd('0x44')],null))[_0x5cfd('0x22')](respondWithResult(_0x2d968b,null))[_0x5cfd('0x45')](handleError(_0x2d968b,null));};
\ No newline at end of file