Built motion from commit (unavailable).|2.0.75
[motion2.git] / server / api / jscriptyQuestionReport / jscriptyQuestionReport.controller.js
index 74e7595..736b90d 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x983d=['includeAll','include','findAll','rows','catch','show','find','create','body','params','describe','request-promise','moment','mustache','util','path','ejs','lodash','squel','crypto','jsforce','desk.js','to-csv','querystring','../../components/parsers/qs','../../config/environment','end','json','count','offset','limit','set','reject','save','update','then','destroy','status','sendStatus','error','name','send','index','JscriptyQuestionReport','rawAttributes','model','keys','dateStart','query','dateEnd','filters','intersection','attributes','fields','length','hasOwnProperty','order','sort','where','pick','add','day','merge','filter','map','options'];(function(_0xcf0913,_0x4f03bf){var _0x57e864=function(_0x1730ee){while(--_0x1730ee){_0xcf0913['push'](_0xcf0913['shift']());}};_0x57e864(++_0x4f03bf);}(_0x983d,0x1d9));var _0xd983=function(_0x27e3fa,_0x370e4a){_0x27e3fa=_0x27e3fa-0x0;var _0x3ba61b=_0x983d[_0x27e3fa];return _0x3ba61b;};'use strict';var jsonpatch=require('fast-json-patch');var rp=require(_0xd983('0x0'));var moment=require(_0xd983('0x1'));var BPromise=require('bluebird');var Mustache=require(_0xd983('0x2'));var util=require(_0xd983('0x3'));var path=require(_0xd983('0x4'));var sox=require('sox');var csv=require('to-csv');var ejs=require(_0xd983('0x5'));var fs=require('fs');var _=require(_0xd983('0x6'));var squel=require(_0xd983('0x7'));var crypto=require(_0xd983('0x8'));var jsforce=require(_0xd983('0x9'));var deskjs=require(_0xd983('0xa'));var toCsv=require(_0xd983('0xb'));var querystring=require(_0xd983('0xc'));var Papa=require('papaparse');var qs=require(_0xd983('0xd'));var logger=require('../../config/logger')('api');var utils=require('../../config/utils');var config=require(_0xd983('0xe'));var db=require('../../mysqldb')['db'];function respondWithStatusCode(_0x59d9b1,_0x5ca311){_0x5ca311=_0x5ca311||0xcc;return function(_0x369197){if(_0x369197){return _0x59d9b1['sendStatus'](_0x5ca311);}return _0x59d9b1['status'](_0x5ca311)[_0xd983('0xf')]();};}function respondWithResult(_0x34e381,_0x1ad450){_0x1ad450=_0x1ad450||0xc8;return function(_0xb7adc0){if(_0xb7adc0){return _0x34e381['status'](_0x1ad450)[_0xd983('0x10')](_0xb7adc0);}};}function respondWithFilteredResult(_0x198ffd,_0x531941){return function(_0x370548){if(_0x370548){var _0x12d1ef=_0x370548[_0xd983('0x11')],_0x4e0856=_0x531941[_0xd983('0x12')],_0x297d0a=_0x531941[_0xd983('0x12')]+_0x531941[_0xd983('0x13')],_0x11035a;if(_0x297d0a>=_0x12d1ef){_0x297d0a=_0x12d1ef;_0x11035a=0xc8;}else{_0x11035a=0xce;}_0x198ffd['status'](_0x11035a);return _0x198ffd[_0xd983('0x14')]('Content-Range',_0x4e0856+'-'+_0x297d0a+'/'+_0x12d1ef)[_0xd983('0x10')](_0x370548);}return null;};}function patchUpdates(_0x3e137c){return function(_0x373ae){try{jsonpatch['apply'](_0x373ae,_0x3e137c,!![]);}catch(_0x3b99df){return BPromise[_0xd983('0x15')](_0x3b99df);}return _0x373ae[_0xd983('0x16')]();};}function saveUpdates(_0x3c614a,_0x342e90){return function(_0x1bc0d6){if(_0x1bc0d6){return _0x1bc0d6[_0xd983('0x17')](_0x3c614a)[_0xd983('0x18')](function(_0x16fad2){return _0x16fad2;});}return null;};}function removeEntity(_0xd40d43,_0x3dbfa5){return function(_0x262bf1){if(_0x262bf1){return _0x262bf1[_0xd983('0x19')]()[_0xd983('0x18')](function(){_0xd40d43[_0xd983('0x1a')](0xcc)[_0xd983('0xf')]();});}};}function handleEntityNotFound(_0x3dec66,_0xd33eba){return function(_0x427b27){if(!_0x427b27){_0x3dec66[_0xd983('0x1b')](0x194);}return _0x427b27;};}function handleError(_0x3069eb,_0x74e2cd){_0x74e2cd=_0x74e2cd||0x1f4;return function(_0x3d0d59){logger[_0xd983('0x1c')](_0x3d0d59['stack']);if(_0x3d0d59[_0xd983('0x1d')]){delete _0x3d0d59[_0xd983('0x1d')];}_0x3069eb[_0xd983('0x1a')](_0x74e2cd)[_0xd983('0x1e')](_0x3d0d59);};}exports[_0xd983('0x1f')]=function(_0x2b7dcc,_0xd5faf4){var _0x126e19={},_0x105188={},_0x4b1044={'count':0x0,'rows':[]};var _0x361c44=db[_0xd983('0x20')][_0xd983('0x21')];_0x105188[_0xd983('0x22')]=_[_0xd983('0x23')](_0x361c44);var _0x56faa6={'dateStart':_0x2b7dcc['query'][_0xd983('0x24')],'dateEnd':_0x2b7dcc[_0xd983('0x25')]['dateEnd']};delete _0x2b7dcc[_0xd983('0x25')]['dateStart'];delete _0x2b7dcc[_0xd983('0x25')][_0xd983('0x26')];_0x105188[_0xd983('0x25')]=_[_0xd983('0x23')](_0x2b7dcc[_0xd983('0x25')]);_0x105188[_0xd983('0x27')]=_[_0xd983('0x28')](_0x105188[_0xd983('0x22')],_0x105188[_0xd983('0x25')]);_0x126e19[_0xd983('0x29')]=_['intersection'](_0x105188[_0xd983('0x22')],qs[_0xd983('0x2a')](_0x2b7dcc[_0xd983('0x25')][_0xd983('0x2a')]));_0x126e19[_0xd983('0x29')]=_0x126e19[_0xd983('0x29')][_0xd983('0x2b')]?_0x126e19[_0xd983('0x29')]:_0x105188[_0xd983('0x22')];if(!_0x2b7dcc['query'][_0xd983('0x2c')]('nolimit')){_0x126e19[_0xd983('0x13')]=qs[_0xd983('0x13')](_0x2b7dcc[_0xd983('0x25')]['limit']);_0x126e19['offset']=qs[_0xd983('0x12')](_0x2b7dcc['query']['offset']);}_0x126e19[_0xd983('0x2d')]=qs[_0xd983('0x2e')](_0x2b7dcc[_0xd983('0x25')]['sort']);_0x126e19[_0xd983('0x2f')]=qs[_0xd983('0x27')](_[_0xd983('0x30')](_0x2b7dcc[_0xd983('0x25')],_0x105188[_0xd983('0x27')]));if(_0x56faa6['dateStart']){if(_0x56faa6[_0xd983('0x26')]){_0x56faa6['dateEnd']=moment(_0x56faa6[_0xd983('0x26')])[_0xd983('0x31')](0x1,'day');}else{_0x56faa6[_0xd983('0x26')]=moment(_0x56faa6['dateStart'])[_0xd983('0x31')](0x1,_0xd983('0x32'));}_[_0xd983('0x33')](_0x126e19[_0xd983('0x2f')],{'createdAt':{'$gte':_0x56faa6[_0xd983('0x24')],'$lte':_0x56faa6[_0xd983('0x26')]}});}if(_0x2b7dcc[_0xd983('0x25')][_0xd983('0x34')]){_0x126e19['where']=_['merge'](_0x126e19['where'],{'$or':_[_0xd983('0x35')](_0x126e19[_0xd983('0x29')],function(_0x235b8f){var _0x31e36e={};_0x31e36e[_0x235b8f]={'$like':'%'+_0x2b7dcc['query'][_0xd983('0x34')]+'%'};return _0x31e36e;})});}_0x126e19=_[_0xd983('0x33')]({},_0x126e19,_0x2b7dcc[_0xd983('0x36')]);var _0x102e86={'where':_0x126e19['where']};return db[_0xd983('0x20')][_0xd983('0x11')](_0x102e86)[_0xd983('0x18')](function(_0x37cc03){_0x4b1044['count']=_0x37cc03;if(_0x2b7dcc['query'][_0xd983('0x37')]){_0x126e19[_0xd983('0x38')]=[{'all':!![]}];}return db[_0xd983('0x20')][_0xd983('0x39')](_0x126e19);})[_0xd983('0x18')](function(_0x2636c4){_0x4b1044[_0xd983('0x3a')]=_0x2636c4;return _0x4b1044;})[_0xd983('0x18')](respondWithFilteredResult(_0xd5faf4,_0x126e19))[_0xd983('0x3b')](handleError(_0xd5faf4,null));};exports[_0xd983('0x3c')]=function(_0x4e7858,_0x51443b){var _0x1e4b1b={'raw':!![],'where':{'id':_0x4e7858['params']['id']}},_0x421953={};_0x421953[_0xd983('0x22')]=_[_0xd983('0x23')](db[_0xd983('0x20')][_0xd983('0x21')]);_0x421953[_0xd983('0x25')]=_[_0xd983('0x23')](_0x4e7858['query']);_0x421953[_0xd983('0x27')]=_['intersection'](_0x421953[_0xd983('0x22')],_0x421953[_0xd983('0x25')]);_0x1e4b1b['attributes']=_['intersection'](_0x421953['model'],qs[_0xd983('0x2a')](_0x4e7858[_0xd983('0x25')][_0xd983('0x2a')]));_0x1e4b1b['attributes']=_0x1e4b1b[_0xd983('0x29')]['length']?_0x1e4b1b[_0xd983('0x29')]:_0x421953[_0xd983('0x22')];if(_0x4e7858[_0xd983('0x25')][_0xd983('0x37')]){_0x1e4b1b[_0xd983('0x38')]=[{'all':!![]}];}_0x1e4b1b=_[_0xd983('0x33')]({},_0x1e4b1b,_0x4e7858['options']);return db[_0xd983('0x20')][_0xd983('0x3d')](_0x1e4b1b)[_0xd983('0x18')](handleEntityNotFound(_0x51443b,null))['then'](respondWithResult(_0x51443b,null))['catch'](handleError(_0x51443b,null));};exports[_0xd983('0x3e')]=function(_0x584632,_0x2677b4){return db[_0xd983('0x20')][_0xd983('0x3e')](_0x584632[_0xd983('0x3f')],{})[_0xd983('0x18')](respondWithResult(_0x2677b4,0xc9))[_0xd983('0x3b')](handleError(_0x2677b4,null));};exports['update']=function(_0x3178a6,_0x3a1c22){if(_0x3178a6[_0xd983('0x3f')]['id']){delete _0x3178a6[_0xd983('0x3f')]['id'];}return db['JscriptyQuestionReport']['find']({'where':{'id':_0x3178a6[_0xd983('0x40')]['id']}})['then'](handleEntityNotFound(_0x3a1c22,null))[_0xd983('0x18')](saveUpdates(_0x3178a6[_0xd983('0x3f')],null))['then'](respondWithResult(_0x3a1c22,null))[_0xd983('0x3b')](handleError(_0x3a1c22,null));};exports[_0xd983('0x19')]=function(_0x5e7b83,_0xee20e){return db[_0xd983('0x20')][_0xd983('0x3d')]({'where':{'id':_0x5e7b83[_0xd983('0x40')]['id']}})[_0xd983('0x18')](handleEntityNotFound(_0xee20e,null))[_0xd983('0x18')](removeEntity(_0xee20e,null))['catch'](handleError(_0xee20e,null));};exports[_0xd983('0x41')]=function(_0x4080a0,_0x4d32ea){return db['JscriptyQuestionReport']['describe']()[_0xd983('0x18')](respondWithResult(_0x4d32ea,null))['catch'](handleError(_0x4d32ea,null));};
\ No newline at end of file
+var _0x3f33=['json','count','offset','limit','set','Content-Range','apply','save','then','destroy','end','error','stack','name','send','index','JscriptyQuestionReport','rawAttributes','model','keys','dateStart','query','dateEnd','filters','intersection','attributes','fields','length','hasOwnProperty','nolimit','sort','where','add','merge','filter','map','options','findAll','rows','catch','show','params','includeAll','find','create','body','describe','fast-json-patch','moment','bluebird','path','sox','to-csv','ejs','squel','desk.js','querystring','papaparse','../../components/parsers/qs','../../config/logger','api','../../mysqldb','sendStatus','status'];(function(_0x40b343,_0x464279){var _0xc875fd=function(_0x1a857f){while(--_0x1a857f){_0x40b343['push'](_0x40b343['shift']());}};_0xc875fd(++_0x464279);}(_0x3f33,0x6f));var _0x33f3=function(_0x230e39,_0x5341){_0x230e39=_0x230e39-0x0;var _0xa804e=_0x3f33[_0x230e39];return _0xa804e;};'use strict';var jsonpatch=require(_0x33f3('0x0'));var rp=require('request-promise');var moment=require(_0x33f3('0x1'));var BPromise=require(_0x33f3('0x2'));var Mustache=require('mustache');var util=require('util');var path=require(_0x33f3('0x3'));var sox=require(_0x33f3('0x4'));var csv=require(_0x33f3('0x5'));var ejs=require(_0x33f3('0x6'));var fs=require('fs');var _=require('lodash');var squel=require(_0x33f3('0x7'));var crypto=require('crypto');var jsforce=require('jsforce');var deskjs=require(_0x33f3('0x8'));var toCsv=require(_0x33f3('0x5'));var querystring=require(_0x33f3('0x9'));var Papa=require(_0x33f3('0xa'));var qs=require(_0x33f3('0xb'));var logger=require(_0x33f3('0xc'))(_0x33f3('0xd'));var utils=require('../../config/utils');var config=require('../../config/environment');var db=require(_0x33f3('0xe'))['db'];function respondWithStatusCode(_0x2139cd,_0x1000ef){_0x1000ef=_0x1000ef||0xcc;return function(_0x55ca5e){if(_0x55ca5e){return _0x2139cd[_0x33f3('0xf')](_0x1000ef);}return _0x2139cd[_0x33f3('0x10')](_0x1000ef)['end']();};}function respondWithResult(_0x1db96a,_0x537f79){_0x537f79=_0x537f79||0xc8;return function(_0xd0cdce){if(_0xd0cdce){return _0x1db96a[_0x33f3('0x10')](_0x537f79)[_0x33f3('0x11')](_0xd0cdce);}};}function respondWithFilteredResult(_0x6755d8,_0x5c0495){return function(_0x16e0ab){if(_0x16e0ab){var _0x2e7a7d=_0x16e0ab[_0x33f3('0x12')],_0x5f779=_0x5c0495[_0x33f3('0x13')],_0x313e2e=_0x5c0495[_0x33f3('0x13')]+_0x5c0495[_0x33f3('0x14')],_0xb785a0;if(_0x313e2e>=_0x2e7a7d){_0x313e2e=_0x2e7a7d;_0xb785a0=0xc8;}else{_0xb785a0=0xce;}_0x6755d8[_0x33f3('0x10')](_0xb785a0);return _0x6755d8[_0x33f3('0x15')](_0x33f3('0x16'),_0x5f779+'-'+_0x313e2e+'/'+_0x2e7a7d)[_0x33f3('0x11')](_0x16e0ab);}return null;};}function patchUpdates(_0x2aee7c){return function(_0x45add2){try{jsonpatch[_0x33f3('0x17')](_0x45add2,_0x2aee7c,!![]);}catch(_0x5aeaa6){return BPromise['reject'](_0x5aeaa6);}return _0x45add2[_0x33f3('0x18')]();};}function saveUpdates(_0x48b1b,_0x1b90d0){return function(_0x19d6cc){if(_0x19d6cc){return _0x19d6cc['update'](_0x48b1b)[_0x33f3('0x19')](function(_0x3a9398){return _0x3a9398;});}return null;};}function removeEntity(_0x402864,_0x536ab1){return function(_0x389ff2){if(_0x389ff2){return _0x389ff2[_0x33f3('0x1a')]()[_0x33f3('0x19')](function(){_0x402864[_0x33f3('0x10')](0xcc)[_0x33f3('0x1b')]();});}};}function handleEntityNotFound(_0x1d6b7f,_0x1a9d94){return function(_0x45bbf3){if(!_0x45bbf3){_0x1d6b7f[_0x33f3('0xf')](0x194);}return _0x45bbf3;};}function handleError(_0x20aa15,_0x2ce8ff){_0x2ce8ff=_0x2ce8ff||0x1f4;return function(_0x55f2ed){logger[_0x33f3('0x1c')](_0x55f2ed[_0x33f3('0x1d')]);if(_0x55f2ed[_0x33f3('0x1e')]){delete _0x55f2ed[_0x33f3('0x1e')];}_0x20aa15['status'](_0x2ce8ff)[_0x33f3('0x1f')](_0x55f2ed);};}exports[_0x33f3('0x20')]=function(_0x2feda1,_0x26342d){var _0x3ace79={},_0x1ced43={},_0x145f8f={'count':0x0,'rows':[]};var _0x258ff6=db[_0x33f3('0x21')][_0x33f3('0x22')];_0x1ced43[_0x33f3('0x23')]=_[_0x33f3('0x24')](_0x258ff6);var _0x29b95f={'dateStart':_0x2feda1['query'][_0x33f3('0x25')],'dateEnd':_0x2feda1[_0x33f3('0x26')][_0x33f3('0x27')]};delete _0x2feda1[_0x33f3('0x26')][_0x33f3('0x25')];delete _0x2feda1[_0x33f3('0x26')][_0x33f3('0x27')];_0x1ced43[_0x33f3('0x26')]=_['keys'](_0x2feda1[_0x33f3('0x26')]);_0x1ced43[_0x33f3('0x28')]=_[_0x33f3('0x29')](_0x1ced43[_0x33f3('0x23')],_0x1ced43['query']);_0x3ace79[_0x33f3('0x2a')]=_[_0x33f3('0x29')](_0x1ced43[_0x33f3('0x23')],qs[_0x33f3('0x2b')](_0x2feda1[_0x33f3('0x26')]['fields']));_0x3ace79[_0x33f3('0x2a')]=_0x3ace79[_0x33f3('0x2a')][_0x33f3('0x2c')]?_0x3ace79[_0x33f3('0x2a')]:_0x1ced43[_0x33f3('0x23')];if(!_0x2feda1[_0x33f3('0x26')][_0x33f3('0x2d')](_0x33f3('0x2e'))){_0x3ace79[_0x33f3('0x14')]=qs[_0x33f3('0x14')](_0x2feda1[_0x33f3('0x26')][_0x33f3('0x14')]);_0x3ace79[_0x33f3('0x13')]=qs['offset'](_0x2feda1['query']['offset']);}_0x3ace79['order']=qs[_0x33f3('0x2f')](_0x2feda1[_0x33f3('0x26')][_0x33f3('0x2f')]);_0x3ace79[_0x33f3('0x30')]=qs[_0x33f3('0x28')](_['pick'](_0x2feda1[_0x33f3('0x26')],_0x1ced43[_0x33f3('0x28')]));if(_0x29b95f['dateStart']){if(_0x29b95f['dateEnd']){_0x29b95f[_0x33f3('0x27')]=moment(_0x29b95f[_0x33f3('0x27')])[_0x33f3('0x31')](0x1,'day');}else{_0x29b95f[_0x33f3('0x27')]=moment(_0x29b95f[_0x33f3('0x25')])[_0x33f3('0x31')](0x1,'day');}_[_0x33f3('0x32')](_0x3ace79[_0x33f3('0x30')],{'createdAt':{'$gte':_0x29b95f['dateStart'],'$lte':_0x29b95f[_0x33f3('0x27')]}});}if(_0x2feda1[_0x33f3('0x26')][_0x33f3('0x33')]){_0x3ace79['where']=_[_0x33f3('0x32')](_0x3ace79[_0x33f3('0x30')],{'$or':_[_0x33f3('0x34')](_0x3ace79[_0x33f3('0x2a')],function(_0x5d9bc4){var _0x5d6d20={};_0x5d6d20[_0x5d9bc4]={'$like':'%'+_0x2feda1['query'][_0x33f3('0x33')]+'%'};return _0x5d6d20;})});}_0x3ace79=_['merge']({},_0x3ace79,_0x2feda1[_0x33f3('0x35')]);var _0x3d69d2={'where':_0x3ace79['where']};return db['JscriptyQuestionReport'][_0x33f3('0x12')](_0x3d69d2)[_0x33f3('0x19')](function(_0x357024){_0x145f8f[_0x33f3('0x12')]=_0x357024;if(_0x2feda1[_0x33f3('0x26')]['includeAll']){_0x3ace79['include']=[{'all':!![]}];}return db[_0x33f3('0x21')][_0x33f3('0x36')](_0x3ace79);})['then'](function(_0x4d5c14){_0x145f8f[_0x33f3('0x37')]=_0x4d5c14;return _0x145f8f;})[_0x33f3('0x19')](respondWithFilteredResult(_0x26342d,_0x3ace79))[_0x33f3('0x38')](handleError(_0x26342d,null));};exports[_0x33f3('0x39')]=function(_0x222fb6,_0x707a9a){var _0x302cec={'raw':!![],'where':{'id':_0x222fb6[_0x33f3('0x3a')]['id']}},_0x99e6f7={};_0x99e6f7[_0x33f3('0x23')]=_[_0x33f3('0x24')](db[_0x33f3('0x21')][_0x33f3('0x22')]);_0x99e6f7['query']=_['keys'](_0x222fb6[_0x33f3('0x26')]);_0x99e6f7['filters']=_['intersection'](_0x99e6f7[_0x33f3('0x23')],_0x99e6f7[_0x33f3('0x26')]);_0x302cec[_0x33f3('0x2a')]=_['intersection'](_0x99e6f7['model'],qs[_0x33f3('0x2b')](_0x222fb6['query'][_0x33f3('0x2b')]));_0x302cec[_0x33f3('0x2a')]=_0x302cec[_0x33f3('0x2a')]['length']?_0x302cec[_0x33f3('0x2a')]:_0x99e6f7[_0x33f3('0x23')];if(_0x222fb6[_0x33f3('0x26')][_0x33f3('0x3b')]){_0x302cec['include']=[{'all':!![]}];}_0x302cec=_[_0x33f3('0x32')]({},_0x302cec,_0x222fb6[_0x33f3('0x35')]);return db[_0x33f3('0x21')][_0x33f3('0x3c')](_0x302cec)['then'](handleEntityNotFound(_0x707a9a,null))[_0x33f3('0x19')](respondWithResult(_0x707a9a,null))['catch'](handleError(_0x707a9a,null));};exports['create']=function(_0x1a1e80,_0x22df9c){return db[_0x33f3('0x21')][_0x33f3('0x3d')](_0x1a1e80[_0x33f3('0x3e')],{})['then'](respondWithResult(_0x22df9c,0xc9))['catch'](handleError(_0x22df9c,null));};exports['update']=function(_0x2d337f,_0x5735ec){if(_0x2d337f[_0x33f3('0x3e')]['id']){delete _0x2d337f[_0x33f3('0x3e')]['id'];}return db[_0x33f3('0x21')][_0x33f3('0x3c')]({'where':{'id':_0x2d337f[_0x33f3('0x3a')]['id']}})[_0x33f3('0x19')](handleEntityNotFound(_0x5735ec,null))[_0x33f3('0x19')](saveUpdates(_0x2d337f['body'],null))[_0x33f3('0x19')](respondWithResult(_0x5735ec,null))['catch'](handleError(_0x5735ec,null));};exports[_0x33f3('0x1a')]=function(_0x36f9c2,_0x1cd684){return db[_0x33f3('0x21')][_0x33f3('0x3c')]({'where':{'id':_0x36f9c2[_0x33f3('0x3a')]['id']}})[_0x33f3('0x19')](handleEntityNotFound(_0x1cd684,null))[_0x33f3('0x19')](removeEntity(_0x1cd684,null))[_0x33f3('0x38')](handleError(_0x1cd684,null));};exports[_0x33f3('0x3f')]=function(_0x4fa0c5,_0x289bd3){return db[_0x33f3('0x21')][_0x33f3('0x3f')]()[_0x33f3('0x19')](respondWithResult(_0x289bd3,null))[_0x33f3('0x38')](handleError(_0x289bd3,null));};
\ No newline at end of file