Built motion from commit ddca4d0d.|2.5.47
[motion2.git] / server / api / faxTransferReport / faxTransferReport.controller.js
index d2b0550..590a455 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x26db=['filter','merge','VIRTUAL','options','count','includeAll','include','findAll','rows','catch','params','find','create','body','describe','html-pdf','eml-format','rimraf','fast-json-patch','request-promise','util','path','sox','to-csv','ejs','lodash','jsforce','desk.js','querystring','papaparse','ioredis','../../components/auth/service','../../config/license/hardware','api','../../config/utils','../../mysqldb','sendStatus','status','end','json','offset','limit','Content-Range','apply','reject','save','update','then','destroy','error','stack','name','map','FaxTransferReport','rawAttributes','type','key','model','query','keys','filters','intersection','attributes','fields','length','hasOwnProperty','nolimit','order','sort','where','pick'];(function(_0x2f13cf,_0x2f5184){var _0x3ecf60=function(_0x522b43){while(--_0x522b43){_0x2f13cf['push'](_0x2f13cf['shift']());}};_0x3ecf60(++_0x2f5184);}(_0x26db,0x172));var _0xb26d=function(_0x3e9b91,_0x2f26c3){_0x3e9b91=_0x3e9b91-0x0;var _0x59da6e=_0x26db[_0x3e9b91];return _0x59da6e;};'use strict';var pdf=require(_0xb26d('0x0'));var emlformat=require(_0xb26d('0x1'));var rimraf=require(_0xb26d('0x2'));var zipdir=require('zip-dir');var jsonpatch=require(_0xb26d('0x3'));var rp=require(_0xb26d('0x4'));var moment=require('moment');var BPromise=require('bluebird');var Mustache=require('mustache');var util=require(_0xb26d('0x5'));var path=require(_0xb26d('0x6'));var sox=require(_0xb26d('0x7'));var csv=require(_0xb26d('0x8'));var ejs=require(_0xb26d('0x9'));var fs=require('fs');var _=require(_0xb26d('0xa'));var squel=require('squel');var crypto=require('crypto');var jsforce=require(_0xb26d('0xb'));var deskjs=require(_0xb26d('0xc'));var toCsv=require(_0xb26d('0x8'));var querystring=require(_0xb26d('0xd'));var Papa=require(_0xb26d('0xe'));var Redis=require(_0xb26d('0xf'));var authService=require(_0xb26d('0x10'));var qs=require('../../components/parsers/qs');var as=require('../../components/parsers/advancedSearch');var hardwareService=require(_0xb26d('0x11'));var logger=require('../../config/logger')(_0xb26d('0x12'));var utils=require(_0xb26d('0x13'));var config=require('../../config/environment');var db=require(_0xb26d('0x14'))['db'];function respondWithStatusCode(_0x41c568,_0x5d5c64){_0x5d5c64=_0x5d5c64||0xcc;return function(_0x1c2b43){if(_0x1c2b43){return _0x41c568[_0xb26d('0x15')](_0x5d5c64);}return _0x41c568[_0xb26d('0x16')](_0x5d5c64)[_0xb26d('0x17')]();};}function respondWithResult(_0xbf01b3,_0x55a510){_0x55a510=_0x55a510||0xc8;return function(_0x29cf37){if(_0x29cf37){return _0xbf01b3['status'](_0x55a510)[_0xb26d('0x18')](_0x29cf37);}};}function respondWithFilteredResult(_0x37b7b0,_0x4094a6){return function(_0x46b156){if(_0x46b156){var _0x19007f=_0x46b156['count'],_0x4b844d=_0x4094a6['offset'],_0x38519e=_0x4094a6[_0xb26d('0x19')]+_0x4094a6[_0xb26d('0x1a')],_0x236483;if(_0x38519e>=_0x19007f){_0x38519e=_0x19007f;_0x236483=0xc8;}else{_0x236483=0xce;}_0x37b7b0[_0xb26d('0x16')](_0x236483);return _0x37b7b0['set'](_0xb26d('0x1b'),_0x4b844d+'-'+_0x38519e+'/'+_0x19007f)[_0xb26d('0x18')](_0x46b156);}return null;};}function patchUpdates(_0x26cb1e){return function(_0x45a272){try{jsonpatch[_0xb26d('0x1c')](_0x45a272,_0x26cb1e,!![]);}catch(_0x332de3){return BPromise[_0xb26d('0x1d')](_0x332de3);}return _0x45a272[_0xb26d('0x1e')]();};}function saveUpdates(_0x4a8ca8,_0x4d8bf6){return function(_0x211c5c){if(_0x211c5c){return _0x211c5c[_0xb26d('0x1f')](_0x4a8ca8)[_0xb26d('0x20')](function(_0x5c000c){return _0x5c000c;});}return null;};}function removeEntity(_0x5710ac,_0x148e03){return function(_0x4d801b){if(_0x4d801b){return _0x4d801b[_0xb26d('0x21')]()[_0xb26d('0x20')](function(){_0x5710ac[_0xb26d('0x16')](0xcc)[_0xb26d('0x17')]();});}};}function handleEntityNotFound(_0x16d0a7,_0x340ee5){return function(_0x444cef){if(!_0x444cef){_0x16d0a7[_0xb26d('0x15')](0x194);}return _0x444cef;};}function handleError(_0x49afd2,_0x3b3945){_0x3b3945=_0x3b3945||0x1f4;return function(_0x4beb78){logger[_0xb26d('0x22')](_0x4beb78[_0xb26d('0x23')]);if(_0x4beb78[_0xb26d('0x24')]){delete _0x4beb78[_0xb26d('0x24')];}_0x49afd2[_0xb26d('0x16')](_0x3b3945)['send'](_0x4beb78);};}exports['index']=function(_0x6d8902,_0x30235d){var _0x1e0483={},_0x36ba60={},_0x11d089={'count':0x0,'rows':[]};var _0x2590bd=_[_0xb26d('0x25')](db[_0xb26d('0x26')][_0xb26d('0x27')],function(_0x4ca4ce){return{'name':_0x4ca4ce['fieldName'],'type':_0x4ca4ce[_0xb26d('0x28')][_0xb26d('0x29')]};});_0x36ba60[_0xb26d('0x2a')]=_['map'](_0x2590bd,_0xb26d('0x24'));_0x36ba60[_0xb26d('0x2b')]=_[_0xb26d('0x2c')](_0x6d8902[_0xb26d('0x2b')]);_0x36ba60[_0xb26d('0x2d')]=_[_0xb26d('0x2e')](_0x36ba60[_0xb26d('0x2a')],_0x36ba60[_0xb26d('0x2b')]);_0x1e0483[_0xb26d('0x2f')]=_['intersection'](_0x36ba60[_0xb26d('0x2a')],qs[_0xb26d('0x30')](_0x6d8902[_0xb26d('0x2b')][_0xb26d('0x30')]));_0x1e0483['attributes']=_0x1e0483['attributes'][_0xb26d('0x31')]?_0x1e0483[_0xb26d('0x2f')]:_0x36ba60['model'];if(!_0x6d8902['query'][_0xb26d('0x32')](_0xb26d('0x33'))){_0x1e0483[_0xb26d('0x1a')]=qs['limit'](_0x6d8902['query'][_0xb26d('0x1a')]);_0x1e0483[_0xb26d('0x19')]=qs[_0xb26d('0x19')](_0x6d8902[_0xb26d('0x2b')][_0xb26d('0x19')]);}_0x1e0483[_0xb26d('0x34')]=qs[_0xb26d('0x35')](_0x6d8902[_0xb26d('0x2b')][_0xb26d('0x35')]);_0x1e0483[_0xb26d('0x36')]=qs['filters'](_[_0xb26d('0x37')](_0x6d8902[_0xb26d('0x2b')],_0x36ba60[_0xb26d('0x2d')]));if(_0x6d8902[_0xb26d('0x2b')][_0xb26d('0x38')]){_0x1e0483[_0xb26d('0x36')]=_[_0xb26d('0x39')](_0x1e0483[_0xb26d('0x36')],{'$or':_[_0xb26d('0x25')](_0x2590bd,function(_0x6fc3f7){if(_0x6fc3f7[_0xb26d('0x28')]!==_0xb26d('0x3a')){var _0x3b549d={};_0x3b549d[_0x6fc3f7[_0xb26d('0x24')]]={'$like':'%'+_0x6d8902[_0xb26d('0x2b')][_0xb26d('0x38')]+'%'};return _0x3b549d;}})});}_0x1e0483=_[_0xb26d('0x39')]({},_0x1e0483,_0x6d8902[_0xb26d('0x3b')]);var _0x3265ff={'where':_0x1e0483[_0xb26d('0x36')]};return db['FaxTransferReport'][_0xb26d('0x3c')](_0x3265ff)['then'](function(_0x1205e2){_0x11d089[_0xb26d('0x3c')]=_0x1205e2;if(_0x6d8902['query'][_0xb26d('0x3d')]){_0x1e0483[_0xb26d('0x3e')]=[{'all':!![]}];}return db[_0xb26d('0x26')][_0xb26d('0x3f')](_0x1e0483);})[_0xb26d('0x20')](function(_0x51a58f){_0x11d089[_0xb26d('0x40')]=_0x51a58f;return _0x11d089;})[_0xb26d('0x20')](respondWithFilteredResult(_0x30235d,_0x1e0483))[_0xb26d('0x41')](handleError(_0x30235d,null));};exports['show']=function(_0x40a02f,_0x4cbbfb){var _0xe4e5a2={'raw':!![],'where':{'id':_0x40a02f[_0xb26d('0x42')]['id']}},_0x43644a={};_0x43644a['model']=_['keys'](db[_0xb26d('0x26')][_0xb26d('0x27')]);_0x43644a[_0xb26d('0x2b')]=_[_0xb26d('0x2c')](_0x40a02f[_0xb26d('0x2b')]);_0x43644a[_0xb26d('0x2d')]=_['intersection'](_0x43644a['model'],_0x43644a['query']);_0xe4e5a2[_0xb26d('0x2f')]=_[_0xb26d('0x2e')](_0x43644a['model'],qs[_0xb26d('0x30')](_0x40a02f[_0xb26d('0x2b')][_0xb26d('0x30')]));_0xe4e5a2[_0xb26d('0x2f')]=_0xe4e5a2['attributes']['length']?_0xe4e5a2['attributes']:_0x43644a[_0xb26d('0x2a')];if(_0x40a02f[_0xb26d('0x2b')][_0xb26d('0x3d')]){_0xe4e5a2['include']=[{'all':!![]}];}_0xe4e5a2=_['merge']({},_0xe4e5a2,_0x40a02f[_0xb26d('0x3b')]);return db[_0xb26d('0x26')][_0xb26d('0x43')](_0xe4e5a2)[_0xb26d('0x20')](handleEntityNotFound(_0x4cbbfb,null))['then'](respondWithResult(_0x4cbbfb,null))[_0xb26d('0x41')](handleError(_0x4cbbfb,null));};exports[_0xb26d('0x44')]=function(_0x337176,_0x436104){return db[_0xb26d('0x26')][_0xb26d('0x44')](_0x337176[_0xb26d('0x45')],{})[_0xb26d('0x20')](respondWithResult(_0x436104,0xc9))[_0xb26d('0x41')](handleError(_0x436104,null));};exports['update']=function(_0x2bb90d,_0x1fccaf){if(_0x2bb90d[_0xb26d('0x45')]['id']){delete _0x2bb90d[_0xb26d('0x45')]['id'];}return db['FaxTransferReport'][_0xb26d('0x43')]({'where':{'id':_0x2bb90d['params']['id']}})[_0xb26d('0x20')](handleEntityNotFound(_0x1fccaf,null))['then'](saveUpdates(_0x2bb90d['body'],null))[_0xb26d('0x20')](respondWithResult(_0x1fccaf,null))[_0xb26d('0x41')](handleError(_0x1fccaf,null));};exports[_0xb26d('0x21')]=function(_0x58840b,_0x18fa0f){return db[_0xb26d('0x26')]['find']({'where':{'id':_0x58840b['params']['id']}})[_0xb26d('0x20')](handleEntityNotFound(_0x18fa0f,null))[_0xb26d('0x20')](removeEntity(_0x18fa0f,null))[_0xb26d('0x41')](handleError(_0x18fa0f,null));};exports[_0xb26d('0x46')]=function(_0x16187e,_0x558120){return db['FaxTransferReport'][_0xb26d('0x46')]()['then'](respondWithResult(_0x558120,null))['catch'](handleError(_0x558120,null));};
\ No newline at end of file
+var _0x8645=['desk.js','querystring','papaparse','ioredis','../../components/auth/service','../../components/parsers/qs','../../components/parsers/advancedSearch','../../config/license/hardware','../../config/logger','../../config/environment','../../mysqldb','sendStatus','status','end','json','undefined','limit','count','offset','Content-Range','apply','save','update','destroy','then','error','stack','name','send','index','FaxTransferReport','fieldName','type','key','map','query','keys','intersection','model','attributes','length','nolimit','order','sort','filters','pick','merge','VIRTUAL','options','where','includeAll','include','findAll','rows','catch','show','params','rawAttributes','fields','create','body','find','describe','rimraf','fast-json-patch','request-promise','moment','bluebird','util','path','sox','to-csv','ejs','fs-extra','lodash','crypto','jsforce'];(function(_0x14b004,_0x297060){var _0x3d501f=function(_0x4a38ac){while(--_0x4a38ac){_0x14b004['push'](_0x14b004['shift']());}};_0x3d501f(++_0x297060);}(_0x8645,0x173));var _0x5864=function(_0x466a0b,_0x2f8d23){_0x466a0b=_0x466a0b-0x0;var _0x397de3=_0x8645[_0x466a0b];return _0x397de3;};'use strict';var emlformat=require('eml-format');var rimraf=require(_0x5864('0x0'));var zipdir=require('zip-dir');var jsonpatch=require(_0x5864('0x1'));var rp=require(_0x5864('0x2'));var moment=require(_0x5864('0x3'));var BPromise=require(_0x5864('0x4'));var Mustache=require('mustache');var util=require(_0x5864('0x5'));var path=require(_0x5864('0x6'));var sox=require(_0x5864('0x7'));var csv=require(_0x5864('0x8'));var ejs=require(_0x5864('0x9'));var fs=require('fs');var fs_extra=require(_0x5864('0xa'));var _=require(_0x5864('0xb'));var squel=require('squel');var crypto=require(_0x5864('0xc'));var jsforce=require(_0x5864('0xd'));var deskjs=require(_0x5864('0xe'));var toCsv=require(_0x5864('0x8'));var querystring=require(_0x5864('0xf'));var Papa=require(_0x5864('0x10'));var Redis=require(_0x5864('0x11'));var authService=require(_0x5864('0x12'));var qs=require(_0x5864('0x13'));var as=require(_0x5864('0x14'));var hardwareService=require(_0x5864('0x15'));var logger=require(_0x5864('0x16'))('api');var utils=require('../../config/utils');var config=require(_0x5864('0x17'));var licenseUtil=require('../../config/license/util');var db=require(_0x5864('0x18'))['db'];function respondWithStatusCode(_0x4eb6ea,_0x21fa7d){_0x21fa7d=_0x21fa7d||0xcc;return function(_0xe1300){if(_0xe1300){return _0x4eb6ea[_0x5864('0x19')](_0x21fa7d);}return _0x4eb6ea[_0x5864('0x1a')](_0x21fa7d)[_0x5864('0x1b')]();};}function respondWithResult(_0x31cfe9,_0x40b87e){_0x40b87e=_0x40b87e||0xc8;return function(_0x53a220){if(_0x53a220){return _0x31cfe9[_0x5864('0x1a')](_0x40b87e)[_0x5864('0x1c')](_0x53a220);}};}function respondWithFilteredResult(_0x4cf1ec,_0x3d542d){return function(_0x2bfb08){if(_0x2bfb08){var _0x292f72=typeof _0x3d542d['offset']===_0x5864('0x1d')&&typeof _0x3d542d[_0x5864('0x1e')]===_0x5864('0x1d');var _0x3d9d6b=_0x2bfb08[_0x5864('0x1f')];var _0x4551d0=_0x292f72?0x0:_0x3d542d[_0x5864('0x20')];var _0x2f78fd=_0x292f72?_0x2bfb08[_0x5864('0x1f')]:_0x3d542d[_0x5864('0x20')]+_0x3d542d['limit'];var _0x2266a9;if(_0x2f78fd>=_0x3d9d6b){_0x2f78fd=_0x3d9d6b;_0x2266a9=0xc8;}else{_0x2266a9=0xce;}_0x4cf1ec[_0x5864('0x1a')](_0x2266a9);return _0x4cf1ec['set'](_0x5864('0x21'),_0x4551d0+'-'+_0x2f78fd+'/'+_0x3d9d6b)['json'](_0x2bfb08);}return null;};}function patchUpdates(_0x527635){return function(_0x7b3671){try{jsonpatch[_0x5864('0x22')](_0x7b3671,_0x527635,!![]);}catch(_0x4610eb){return BPromise['reject'](_0x4610eb);}return _0x7b3671[_0x5864('0x23')]();};}function saveUpdates(_0x45d05b,_0x17254f){return function(_0xdfe508){if(_0xdfe508){return _0xdfe508[_0x5864('0x24')](_0x45d05b)['then'](function(_0x278dec){return _0x278dec;});}return null;};}function removeEntity(_0x49ad8a,_0x7f67b2){return function(_0xe679e7){if(_0xe679e7){return _0xe679e7[_0x5864('0x25')]()[_0x5864('0x26')](function(){_0x49ad8a[_0x5864('0x1a')](0xcc)['end']();});}};}function handleEntityNotFound(_0x3304b3,_0x367a45){return function(_0xf4b786){if(!_0xf4b786){_0x3304b3[_0x5864('0x19')](0x194);}return _0xf4b786;};}function handleError(_0x208871,_0x61266d){_0x61266d=_0x61266d||0x1f4;return function(_0x46ad79){logger[_0x5864('0x27')](_0x46ad79[_0x5864('0x28')]);if(_0x46ad79[_0x5864('0x29')]){delete _0x46ad79[_0x5864('0x29')];}_0x208871[_0x5864('0x1a')](_0x61266d)[_0x5864('0x2a')](_0x46ad79);};}exports[_0x5864('0x2b')]=function(_0x57b508,_0x16ca26){var _0x15201c={},_0x29fea0={},_0x3fd66a={'count':0x0,'rows':[]};var _0x4ac15c=_['map'](db[_0x5864('0x2c')]['rawAttributes'],function(_0x544e41){return{'name':_0x544e41[_0x5864('0x2d')],'type':_0x544e41[_0x5864('0x2e')][_0x5864('0x2f')]};});_0x29fea0['model']=_[_0x5864('0x30')](_0x4ac15c,'name');_0x29fea0[_0x5864('0x31')]=_[_0x5864('0x32')](_0x57b508['query']);_0x29fea0['filters']=_[_0x5864('0x33')](_0x29fea0[_0x5864('0x34')],_0x29fea0[_0x5864('0x31')]);_0x15201c[_0x5864('0x35')]=_[_0x5864('0x33')](_0x29fea0[_0x5864('0x34')],qs['fields'](_0x57b508[_0x5864('0x31')]['fields']));_0x15201c[_0x5864('0x35')]=_0x15201c[_0x5864('0x35')][_0x5864('0x36')]?_0x15201c[_0x5864('0x35')]:_0x29fea0['model'];if(!_0x57b508[_0x5864('0x31')]['hasOwnProperty'](_0x5864('0x37'))){_0x15201c[_0x5864('0x1e')]=qs['limit'](_0x57b508['query'][_0x5864('0x1e')]);_0x15201c[_0x5864('0x20')]=qs[_0x5864('0x20')](_0x57b508[_0x5864('0x31')]['offset']);}_0x15201c[_0x5864('0x38')]=qs[_0x5864('0x39')](_0x57b508[_0x5864('0x31')][_0x5864('0x39')]);_0x15201c['where']=qs[_0x5864('0x3a')](_[_0x5864('0x3b')](_0x57b508[_0x5864('0x31')],_0x29fea0[_0x5864('0x3a')]),_0x4ac15c);if(_0x57b508['query']['filter']){_0x15201c['where']=_[_0x5864('0x3c')](_0x15201c['where'],{'$or':_[_0x5864('0x30')](_0x4ac15c,function(_0x5e4a23){if(_0x5e4a23[_0x5864('0x2e')]!==_0x5864('0x3d')){var _0x36feee={};_0x36feee[_0x5e4a23[_0x5864('0x29')]]={'$like':'%'+_0x57b508['query']['filter']+'%'};return _0x36feee;}})});}_0x15201c=_[_0x5864('0x3c')]({},_0x15201c,_0x57b508[_0x5864('0x3e')]);var _0x43a54b={'where':_0x15201c[_0x5864('0x3f')]};return db[_0x5864('0x2c')][_0x5864('0x1f')](_0x43a54b)[_0x5864('0x26')](function(_0x1713ee){_0x3fd66a[_0x5864('0x1f')]=_0x1713ee;if(_0x57b508['query'][_0x5864('0x40')]){_0x15201c[_0x5864('0x41')]=[{'all':!![]}];}return db[_0x5864('0x2c')][_0x5864('0x42')](_0x15201c);})[_0x5864('0x26')](function(_0x5a1349){_0x3fd66a[_0x5864('0x43')]=_0x5a1349;return _0x3fd66a;})['then'](respondWithFilteredResult(_0x16ca26,_0x15201c))[_0x5864('0x44')](handleError(_0x16ca26,null));};exports[_0x5864('0x45')]=function(_0x58189b,_0x1add27){var _0x5af290={'raw':!![],'where':{'id':_0x58189b[_0x5864('0x46')]['id']}},_0x36bf98={};_0x36bf98[_0x5864('0x34')]=_[_0x5864('0x32')](db[_0x5864('0x2c')][_0x5864('0x47')]);_0x36bf98[_0x5864('0x31')]=_[_0x5864('0x32')](_0x58189b[_0x5864('0x31')]);_0x36bf98[_0x5864('0x3a')]=_['intersection'](_0x36bf98['model'],_0x36bf98[_0x5864('0x31')]);_0x5af290[_0x5864('0x35')]=_['intersection'](_0x36bf98[_0x5864('0x34')],qs[_0x5864('0x48')](_0x58189b[_0x5864('0x31')][_0x5864('0x48')]));_0x5af290['attributes']=_0x5af290[_0x5864('0x35')]['length']?_0x5af290[_0x5864('0x35')]:_0x36bf98['model'];if(_0x58189b[_0x5864('0x31')][_0x5864('0x40')]){_0x5af290[_0x5864('0x41')]=[{'all':!![]}];}_0x5af290=_[_0x5864('0x3c')]({},_0x5af290,_0x58189b[_0x5864('0x3e')]);return db['FaxTransferReport']['find'](_0x5af290)[_0x5864('0x26')](handleEntityNotFound(_0x1add27,null))[_0x5864('0x26')](respondWithResult(_0x1add27,null))[_0x5864('0x44')](handleError(_0x1add27,null));};exports[_0x5864('0x49')]=function(_0x5eb7af,_0x19cf9c){return db[_0x5864('0x2c')][_0x5864('0x49')](_0x5eb7af[_0x5864('0x4a')],{})[_0x5864('0x26')](respondWithResult(_0x19cf9c,0xc9))['catch'](handleError(_0x19cf9c,null));};exports[_0x5864('0x24')]=function(_0x31adcc,_0x2a3a5d){if(_0x31adcc[_0x5864('0x4a')]['id']){delete _0x31adcc['body']['id'];}return db['FaxTransferReport'][_0x5864('0x4b')]({'where':{'id':_0x31adcc[_0x5864('0x46')]['id']}})[_0x5864('0x26')](handleEntityNotFound(_0x2a3a5d,null))[_0x5864('0x26')](saveUpdates(_0x31adcc[_0x5864('0x4a')],null))[_0x5864('0x26')](respondWithResult(_0x2a3a5d,null))[_0x5864('0x44')](handleError(_0x2a3a5d,null));};exports[_0x5864('0x25')]=function(_0x512b7f,_0x5c98b6){return db[_0x5864('0x2c')][_0x5864('0x4b')]({'where':{'id':_0x512b7f['params']['id']}})[_0x5864('0x26')](handleEntityNotFound(_0x5c98b6,null))['then'](removeEntity(_0x5c98b6,null))[_0x5864('0x44')](handleError(_0x5c98b6,null));};exports[_0x5864('0x4c')]=function(_0x4c7a9d,_0x2e5fa4){return db['FaxTransferReport']['describe']()[_0x5864('0x26')](respondWithResult(_0x2e5fa4,null))[_0x5864('0x44')](handleError(_0x2e5fa4,null));};
\ No newline at end of file