Built motion from commit 00bf23f6.|2.6.16
[motion2.git] / server / api / faxApplication / faxApplication.controller.js
index 823a51b..3b6adb6 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xaf86=['params','find','catch','create','body','destroy','zip-dir','fast-json-patch','request-promise','moment','bluebird','mustache','path','to-csv','ejs','fs-extra','lodash','squel','crypto','jsforce','desk.js','querystring','../../components/parsers/qs','../../components/parsers/advancedSearch','../../config/license/hardware','../../config/logger','api','../../config/utils','../../config/environment','../../config/license/util','../../mysqldb','sendStatus','status','end','json','offset','undefined','limit','count','apply','reject','save','update','then','error','stack','name','send','index','map','FaxApplication','rawAttributes','fieldName','type','key','query','keys','filters','model','attributes','intersection','fields','length','hasOwnProperty','nolimit','order','sort','where','pick','filter','merge','VIRTUAL','options','includeAll','include','rows','show'];(function(_0x5c72ee,_0x5a8bf8){var _0x231876=function(_0x955276){while(--_0x955276){_0x5c72ee['push'](_0x5c72ee['shift']());}};_0x231876(++_0x5a8bf8);}(_0xaf86,0xa0));var _0x6af8=function(_0x246115,_0x398123){_0x246115=_0x246115-0x0;var _0x385878=_0xaf86[_0x246115];return _0x385878;};'use strict';var emlformat=require('eml-format');var rimraf=require('rimraf');var zipdir=require(_0x6af8('0x0'));var jsonpatch=require(_0x6af8('0x1'));var rp=require(_0x6af8('0x2'));var moment=require(_0x6af8('0x3'));var BPromise=require(_0x6af8('0x4'));var Mustache=require(_0x6af8('0x5'));var util=require('util');var path=require(_0x6af8('0x6'));var sox=require('sox');var csv=require(_0x6af8('0x7'));var ejs=require(_0x6af8('0x8'));var fs=require('fs');var fs_extra=require(_0x6af8('0x9'));var _=require(_0x6af8('0xa'));var squel=require(_0x6af8('0xb'));var crypto=require(_0x6af8('0xc'));var jsforce=require(_0x6af8('0xd'));var deskjs=require(_0x6af8('0xe'));var toCsv=require('to-csv');var querystring=require(_0x6af8('0xf'));var Papa=require('papaparse');var Redis=require('ioredis');var authService=require('../../components/auth/service');var qs=require(_0x6af8('0x10'));var as=require(_0x6af8('0x11'));var hardwareService=require(_0x6af8('0x12'));var logger=require(_0x6af8('0x13'))(_0x6af8('0x14'));var utils=require(_0x6af8('0x15'));var config=require(_0x6af8('0x16'));var licenseUtil=require(_0x6af8('0x17'));var db=require(_0x6af8('0x18'))['db'];function respondWithStatusCode(_0x1ad2ed,_0x5dc90c){_0x5dc90c=_0x5dc90c||0xcc;return function(_0x442d23){if(_0x442d23){return _0x1ad2ed[_0x6af8('0x19')](_0x5dc90c);}return _0x1ad2ed[_0x6af8('0x1a')](_0x5dc90c)[_0x6af8('0x1b')]();};}function respondWithResult(_0x5249d3,_0x54abc6){_0x54abc6=_0x54abc6||0xc8;return function(_0x3f12e4){if(_0x3f12e4){return _0x5249d3[_0x6af8('0x1a')](_0x54abc6)[_0x6af8('0x1c')](_0x3f12e4);}};}function respondWithFilteredResult(_0x4764f2,_0x1b1753){return function(_0x3a95be){if(_0x3a95be){var _0x5c21d5=typeof _0x1b1753[_0x6af8('0x1d')]===_0x6af8('0x1e')&&typeof _0x1b1753[_0x6af8('0x1f')]===_0x6af8('0x1e');var _0xcb7442=_0x3a95be[_0x6af8('0x20')];var _0x4152da=_0x5c21d5?0x0:_0x1b1753['offset'];var _0x15527f=_0x5c21d5?_0x3a95be[_0x6af8('0x20')]:_0x1b1753['offset']+_0x1b1753[_0x6af8('0x1f')];var _0x20fd48;if(_0x15527f>=_0xcb7442){_0x15527f=_0xcb7442;_0x20fd48=0xc8;}else{_0x20fd48=0xce;}_0x4764f2[_0x6af8('0x1a')](_0x20fd48);return _0x4764f2['set']('Content-Range',_0x4152da+'-'+_0x15527f+'/'+_0xcb7442)['json'](_0x3a95be);}return null;};}function patchUpdates(_0x1c183a){return function(_0x158888){try{jsonpatch[_0x6af8('0x21')](_0x158888,_0x1c183a,!![]);}catch(_0x45041b){return BPromise[_0x6af8('0x22')](_0x45041b);}return _0x158888[_0x6af8('0x23')]();};}function saveUpdates(_0x4cd0d6,_0x17f86f){return function(_0x2559e1){if(_0x2559e1){return _0x2559e1[_0x6af8('0x24')](_0x4cd0d6)[_0x6af8('0x25')](function(_0x42b2df){return _0x42b2df;});}return null;};}function removeEntity(_0x3b633e,_0x28fc04){return function(_0x13cd2f){if(_0x13cd2f){return _0x13cd2f['destroy']()[_0x6af8('0x25')](function(){_0x3b633e[_0x6af8('0x1a')](0xcc)[_0x6af8('0x1b')]();});}};}function handleEntityNotFound(_0x32b82d,_0x4fef17){return function(_0x3c8d8f){if(!_0x3c8d8f){_0x32b82d[_0x6af8('0x19')](0x194);}return _0x3c8d8f;};}function handleError(_0x15259f,_0x5546d5){_0x5546d5=_0x5546d5||0x1f4;return function(_0x2157fe){logger[_0x6af8('0x26')](_0x2157fe[_0x6af8('0x27')]);if(_0x2157fe[_0x6af8('0x28')]){delete _0x2157fe[_0x6af8('0x28')];}_0x15259f['status'](_0x5546d5)[_0x6af8('0x29')](_0x2157fe);};}exports[_0x6af8('0x2a')]=function(_0x2dfc0c,_0x1f56b5){var _0x1245fd={},_0x2cdae9={},_0x2c798a={'count':0x0,'rows':[]};var _0x358ed2=_[_0x6af8('0x2b')](db[_0x6af8('0x2c')][_0x6af8('0x2d')],function(_0x501d22){return{'name':_0x501d22[_0x6af8('0x2e')],'type':_0x501d22[_0x6af8('0x2f')][_0x6af8('0x30')]};});_0x2cdae9['model']=_['map'](_0x358ed2,_0x6af8('0x28'));_0x2cdae9[_0x6af8('0x31')]=_[_0x6af8('0x32')](_0x2dfc0c[_0x6af8('0x31')]);_0x2cdae9[_0x6af8('0x33')]=_['intersection'](_0x2cdae9[_0x6af8('0x34')],_0x2cdae9[_0x6af8('0x31')]);_0x1245fd[_0x6af8('0x35')]=_[_0x6af8('0x36')](_0x2cdae9[_0x6af8('0x34')],qs[_0x6af8('0x37')](_0x2dfc0c[_0x6af8('0x31')][_0x6af8('0x37')]));_0x1245fd['attributes']=_0x1245fd[_0x6af8('0x35')][_0x6af8('0x38')]?_0x1245fd[_0x6af8('0x35')]:_0x2cdae9[_0x6af8('0x34')];if(!_0x2dfc0c[_0x6af8('0x31')][_0x6af8('0x39')](_0x6af8('0x3a'))){_0x1245fd[_0x6af8('0x1f')]=qs[_0x6af8('0x1f')](_0x2dfc0c[_0x6af8('0x31')][_0x6af8('0x1f')]);_0x1245fd['offset']=qs['offset'](_0x2dfc0c[_0x6af8('0x31')]['offset']);}_0x1245fd[_0x6af8('0x3b')]=qs[_0x6af8('0x3c')](_0x2dfc0c['query'][_0x6af8('0x3c')]);_0x1245fd[_0x6af8('0x3d')]=qs[_0x6af8('0x33')](_[_0x6af8('0x3e')](_0x2dfc0c['query'],_0x2cdae9[_0x6af8('0x33')]),_0x358ed2);if(_0x2dfc0c[_0x6af8('0x31')][_0x6af8('0x3f')]){_0x1245fd[_0x6af8('0x3d')]=_[_0x6af8('0x40')](_0x1245fd[_0x6af8('0x3d')],{'$or':_[_0x6af8('0x2b')](_0x358ed2,function(_0x36412f){if(_0x36412f['type']!==_0x6af8('0x41')){var _0x196533={};_0x196533[_0x36412f[_0x6af8('0x28')]]={'$like':'%'+_0x2dfc0c[_0x6af8('0x31')][_0x6af8('0x3f')]+'%'};return _0x196533;}})});}_0x1245fd=_[_0x6af8('0x40')]({},_0x1245fd,_0x2dfc0c[_0x6af8('0x42')]);var _0x322a57={'where':_0x1245fd['where']};return db['FaxApplication'][_0x6af8('0x20')](_0x322a57)[_0x6af8('0x25')](function(_0xa7be73){_0x2c798a[_0x6af8('0x20')]=_0xa7be73;if(_0x2dfc0c[_0x6af8('0x31')][_0x6af8('0x43')]){_0x1245fd[_0x6af8('0x44')]=[{'all':!![]}];}return db[_0x6af8('0x2c')]['findAll'](_0x1245fd);})[_0x6af8('0x25')](function(_0x557f1f){_0x2c798a[_0x6af8('0x45')]=_0x557f1f;return _0x2c798a;})[_0x6af8('0x25')](respondWithFilteredResult(_0x1f56b5,_0x1245fd))['catch'](handleError(_0x1f56b5,null));};exports[_0x6af8('0x46')]=function(_0xd6245f,_0x1af73f){var _0x3f1a4a={'raw':!![],'where':{'id':_0xd6245f[_0x6af8('0x47')]['id']}},_0x99838={};_0x99838[_0x6af8('0x34')]=_[_0x6af8('0x32')](db[_0x6af8('0x2c')]['rawAttributes']);_0x99838[_0x6af8('0x31')]=_[_0x6af8('0x32')](_0xd6245f[_0x6af8('0x31')]);_0x99838[_0x6af8('0x33')]=_[_0x6af8('0x36')](_0x99838[_0x6af8('0x34')],_0x99838[_0x6af8('0x31')]);_0x3f1a4a['attributes']=_[_0x6af8('0x36')](_0x99838[_0x6af8('0x34')],qs[_0x6af8('0x37')](_0xd6245f[_0x6af8('0x31')][_0x6af8('0x37')]));_0x3f1a4a['attributes']=_0x3f1a4a[_0x6af8('0x35')]['length']?_0x3f1a4a[_0x6af8('0x35')]:_0x99838[_0x6af8('0x34')];if(_0xd6245f[_0x6af8('0x31')][_0x6af8('0x43')]){_0x3f1a4a['include']=[{'all':!![]}];}_0x3f1a4a=_[_0x6af8('0x40')]({},_0x3f1a4a,_0xd6245f[_0x6af8('0x42')]);return db[_0x6af8('0x2c')][_0x6af8('0x48')](_0x3f1a4a)[_0x6af8('0x25')](handleEntityNotFound(_0x1af73f,null))[_0x6af8('0x25')](respondWithResult(_0x1af73f,null))[_0x6af8('0x49')](handleError(_0x1af73f,null));};exports[_0x6af8('0x4a')]=function(_0x51dbc1,_0x402750){return db[_0x6af8('0x2c')][_0x6af8('0x4a')](_0x51dbc1[_0x6af8('0x4b')],{})[_0x6af8('0x25')](respondWithResult(_0x402750,0xc9))[_0x6af8('0x49')](handleError(_0x402750,null));};exports['update']=function(_0x498e52,_0x317b29){if(_0x498e52[_0x6af8('0x4b')]['id']){delete _0x498e52[_0x6af8('0x4b')]['id'];}return db['FaxApplication'][_0x6af8('0x48')]({'where':{'id':_0x498e52[_0x6af8('0x47')]['id']}})['then'](handleEntityNotFound(_0x317b29,null))[_0x6af8('0x25')](saveUpdates(_0x498e52[_0x6af8('0x4b')],null))[_0x6af8('0x25')](respondWithResult(_0x317b29,null))[_0x6af8('0x49')](handleError(_0x317b29,null));};exports[_0x6af8('0x4c')]=function(_0x10a8ec,_0x438d7){return db[_0x6af8('0x2c')][_0x6af8('0x48')]({'where':{'id':_0x10a8ec[_0x6af8('0x47')]['id']}})[_0x6af8('0x25')](handleEntityNotFound(_0x438d7,null))[_0x6af8('0x25')](removeEntity(_0x438d7,null))[_0x6af8('0x49')](handleError(_0x438d7,null));};
\ No newline at end of file
+var _0x341c=['undefined','limit','count','set','Content-Range','apply','save','end','stack','name','send','FaxApplication','fieldName','type','key','keys','query','filters','intersection','model','attributes','fields','length','hasOwnProperty','nolimit','order','sort','where','pick','filter','VIRTUAL','merge','options','then','includeAll','findAll','rows','catch','params','include','find','body','destroy','eml-format','rimraf','fast-json-patch','request-promise','moment','bluebird','util','path','sox','ejs','fs-extra','lodash','squel','crypto','jsforce','querystring','papaparse','../../components/parsers/qs','../../components/parsers/advancedSearch','../../config/logger','api','../../config/utils','../../mysqldb','sendStatus','status','json','offset'];(function(_0x582e59,_0x5380ce){var _0x5e4c8f=function(_0x1fe890){while(--_0x1fe890){_0x582e59['push'](_0x582e59['shift']());}};_0x5e4c8f(++_0x5380ce);}(_0x341c,0xb7));var _0xc341=function(_0x33b986,_0x40da5f){_0x33b986=_0x33b986-0x0;var _0x4ddaca=_0x341c[_0x33b986];return _0x4ddaca;};'use strict';var emlformat=require(_0xc341('0x0'));var rimraf=require(_0xc341('0x1'));var zipdir=require('zip-dir');var jsonpatch=require(_0xc341('0x2'));var rp=require(_0xc341('0x3'));var moment=require(_0xc341('0x4'));var BPromise=require(_0xc341('0x5'));var Mustache=require('mustache');var util=require(_0xc341('0x6'));var path=require(_0xc341('0x7'));var sox=require(_0xc341('0x8'));var csv=require('to-csv');var ejs=require(_0xc341('0x9'));var fs=require('fs');var fs_extra=require(_0xc341('0xa'));var _=require(_0xc341('0xb'));var squel=require(_0xc341('0xc'));var crypto=require(_0xc341('0xd'));var jsforce=require(_0xc341('0xe'));var deskjs=require('desk.js');var toCsv=require('to-csv');var querystring=require(_0xc341('0xf'));var Papa=require(_0xc341('0x10'));var Redis=require('ioredis');var authService=require('../../components/auth/service');var qs=require(_0xc341('0x11'));var as=require(_0xc341('0x12'));var hardwareService=require('../../config/license/hardware');var logger=require(_0xc341('0x13'))(_0xc341('0x14'));var utils=require(_0xc341('0x15'));var config=require('../../config/environment');var licenseUtil=require('../../config/license/util');var db=require(_0xc341('0x16'))['db'];function respondWithStatusCode(_0x1a87ef,_0x412cb9){_0x412cb9=_0x412cb9||0xcc;return function(_0x3adee9){if(_0x3adee9){return _0x1a87ef[_0xc341('0x17')](_0x412cb9);}return _0x1a87ef['status'](_0x412cb9)['end']();};}function respondWithResult(_0x2c49c2,_0x19aecf){_0x19aecf=_0x19aecf||0xc8;return function(_0xeb68f0){if(_0xeb68f0){return _0x2c49c2[_0xc341('0x18')](_0x19aecf)[_0xc341('0x19')](_0xeb68f0);}};}function respondWithFilteredResult(_0x558688,_0x1e9e8f){return function(_0x4083d1){if(_0x4083d1){var _0x459a6b=typeof _0x1e9e8f[_0xc341('0x1a')]===_0xc341('0x1b')&&typeof _0x1e9e8f[_0xc341('0x1c')]===_0xc341('0x1b');var _0x3581d3=_0x4083d1['count'];var _0x35b0b0=_0x459a6b?0x0:_0x1e9e8f['offset'];var _0x3df42e=_0x459a6b?_0x4083d1[_0xc341('0x1d')]:_0x1e9e8f['offset']+_0x1e9e8f[_0xc341('0x1c')];var _0x2c1c90;if(_0x3df42e>=_0x3581d3){_0x3df42e=_0x3581d3;_0x2c1c90=0xc8;}else{_0x2c1c90=0xce;}_0x558688['status'](_0x2c1c90);return _0x558688[_0xc341('0x1e')](_0xc341('0x1f'),_0x35b0b0+'-'+_0x3df42e+'/'+_0x3581d3)[_0xc341('0x19')](_0x4083d1);}return null;};}function patchUpdates(_0x14735b){return function(_0x1f6fa9){try{jsonpatch[_0xc341('0x20')](_0x1f6fa9,_0x14735b,!![]);}catch(_0x208ea6){return BPromise['reject'](_0x208ea6);}return _0x1f6fa9[_0xc341('0x21')]();};}function saveUpdates(_0x10c9fe,_0x3f1e21){return function(_0x2f027e){if(_0x2f027e){return _0x2f027e['update'](_0x10c9fe)['then'](function(_0x3e603b){return _0x3e603b;});}return null;};}function removeEntity(_0x4fcf33,_0x186afd){return function(_0x1e11f7){if(_0x1e11f7){return _0x1e11f7['destroy']()['then'](function(){_0x4fcf33['status'](0xcc)[_0xc341('0x22')]();});}};}function handleEntityNotFound(_0x39af48,_0x15d28a){return function(_0x137a22){if(!_0x137a22){_0x39af48[_0xc341('0x17')](0x194);}return _0x137a22;};}function handleError(_0x28c494,_0x561bd9){_0x561bd9=_0x561bd9||0x1f4;return function(_0x1f6bc0){logger['error'](_0x1f6bc0[_0xc341('0x23')]);if(_0x1f6bc0['name']){delete _0x1f6bc0[_0xc341('0x24')];}_0x28c494[_0xc341('0x18')](_0x561bd9)[_0xc341('0x25')](_0x1f6bc0);};}exports['index']=function(_0xe5823d,_0x48e68f){var _0x56c26e={},_0x27b40e={},_0x1ae420={'count':0x0,'rows':[]};var _0x4b27ab=_['map'](db[_0xc341('0x26')]['rawAttributes'],function(_0x41b163){return{'name':_0x41b163[_0xc341('0x27')],'type':_0x41b163[_0xc341('0x28')][_0xc341('0x29')]};});_0x27b40e['model']=_['map'](_0x4b27ab,_0xc341('0x24'));_0x27b40e['query']=_[_0xc341('0x2a')](_0xe5823d[_0xc341('0x2b')]);_0x27b40e[_0xc341('0x2c')]=_[_0xc341('0x2d')](_0x27b40e[_0xc341('0x2e')],_0x27b40e[_0xc341('0x2b')]);_0x56c26e[_0xc341('0x2f')]=_[_0xc341('0x2d')](_0x27b40e['model'],qs[_0xc341('0x30')](_0xe5823d[_0xc341('0x2b')][_0xc341('0x30')]));_0x56c26e[_0xc341('0x2f')]=_0x56c26e['attributes'][_0xc341('0x31')]?_0x56c26e['attributes']:_0x27b40e[_0xc341('0x2e')];if(!_0xe5823d['query'][_0xc341('0x32')](_0xc341('0x33'))){_0x56c26e[_0xc341('0x1c')]=qs[_0xc341('0x1c')](_0xe5823d[_0xc341('0x2b')][_0xc341('0x1c')]);_0x56c26e[_0xc341('0x1a')]=qs['offset'](_0xe5823d[_0xc341('0x2b')][_0xc341('0x1a')]);}_0x56c26e[_0xc341('0x34')]=qs['sort'](_0xe5823d[_0xc341('0x2b')][_0xc341('0x35')]);_0x56c26e[_0xc341('0x36')]=qs['filters'](_[_0xc341('0x37')](_0xe5823d[_0xc341('0x2b')],_0x27b40e[_0xc341('0x2c')]),_0x4b27ab);if(_0xe5823d[_0xc341('0x2b')][_0xc341('0x38')]){_0x56c26e['where']=_['merge'](_0x56c26e[_0xc341('0x36')],{'$or':_['map'](_0x4b27ab,function(_0x338bfa){if(_0x338bfa[_0xc341('0x28')]!==_0xc341('0x39')){var _0x1e9312={};_0x1e9312[_0x338bfa[_0xc341('0x24')]]={'$like':'%'+_0xe5823d['query'][_0xc341('0x38')]+'%'};return _0x1e9312;}})});}_0x56c26e=_[_0xc341('0x3a')]({},_0x56c26e,_0xe5823d[_0xc341('0x3b')]);var _0x17786a={'where':_0x56c26e[_0xc341('0x36')]};return db['FaxApplication'][_0xc341('0x1d')](_0x17786a)[_0xc341('0x3c')](function(_0x25f97c){_0x1ae420['count']=_0x25f97c;if(_0xe5823d[_0xc341('0x2b')][_0xc341('0x3d')]){_0x56c26e['include']=[{'all':!![]}];}return db['FaxApplication'][_0xc341('0x3e')](_0x56c26e);})[_0xc341('0x3c')](function(_0x4e34cc){_0x1ae420[_0xc341('0x3f')]=_0x4e34cc;return _0x1ae420;})[_0xc341('0x3c')](respondWithFilteredResult(_0x48e68f,_0x56c26e))[_0xc341('0x40')](handleError(_0x48e68f,null));};exports['show']=function(_0x4d2788,_0x1734a4){var _0x565b94={'raw':!![],'where':{'id':_0x4d2788[_0xc341('0x41')]['id']}},_0x500036={};_0x500036[_0xc341('0x2e')]=_[_0xc341('0x2a')](db[_0xc341('0x26')]['rawAttributes']);_0x500036['query']=_[_0xc341('0x2a')](_0x4d2788[_0xc341('0x2b')]);_0x500036[_0xc341('0x2c')]=_[_0xc341('0x2d')](_0x500036[_0xc341('0x2e')],_0x500036[_0xc341('0x2b')]);_0x565b94[_0xc341('0x2f')]=_[_0xc341('0x2d')](_0x500036[_0xc341('0x2e')],qs[_0xc341('0x30')](_0x4d2788[_0xc341('0x2b')][_0xc341('0x30')]));_0x565b94[_0xc341('0x2f')]=_0x565b94['attributes'][_0xc341('0x31')]?_0x565b94[_0xc341('0x2f')]:_0x500036['model'];if(_0x4d2788[_0xc341('0x2b')]['includeAll']){_0x565b94[_0xc341('0x42')]=[{'all':!![]}];}_0x565b94=_[_0xc341('0x3a')]({},_0x565b94,_0x4d2788[_0xc341('0x3b')]);return db[_0xc341('0x26')][_0xc341('0x43')](_0x565b94)[_0xc341('0x3c')](handleEntityNotFound(_0x1734a4,null))[_0xc341('0x3c')](respondWithResult(_0x1734a4,null))['catch'](handleError(_0x1734a4,null));};exports['create']=function(_0x1a85c1,_0x222285){return db[_0xc341('0x26')]['create'](_0x1a85c1[_0xc341('0x44')],{})[_0xc341('0x3c')](respondWithResult(_0x222285,0xc9))[_0xc341('0x40')](handleError(_0x222285,null));};exports['update']=function(_0x26dd39,_0x180616){if(_0x26dd39[_0xc341('0x44')]['id']){delete _0x26dd39[_0xc341('0x44')]['id'];}return db['FaxApplication']['find']({'where':{'id':_0x26dd39[_0xc341('0x41')]['id']}})['then'](handleEntityNotFound(_0x180616,null))[_0xc341('0x3c')](saveUpdates(_0x26dd39[_0xc341('0x44')],null))['then'](respondWithResult(_0x180616,null))[_0xc341('0x40')](handleError(_0x180616,null));};exports[_0xc341('0x45')]=function(_0x5eaa3c,_0x2dc3cf){return db[_0xc341('0x26')][_0xc341('0x43')]({'where':{'id':_0x5eaa3c['params']['id']}})['then'](handleEntityNotFound(_0x2dc3cf,null))[_0xc341('0x3c')](removeEntity(_0x2dc3cf,null))[_0xc341('0x40')](handleError(_0x2dc3cf,null));};
\ No newline at end of file