Built motion from commit (unavailable).|2.5.23
[motion2.git] / server / api / faxQueueReport / faxQueueReport.controller.js
index 96837e0..9cac953 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x1d34=['lodash','squel','crypto','querystring','ioredis','../../components/auth/service','../../components/parsers/advancedSearch','../../config/license/hardware','../../config/logger','api','../../config/utils','../../config/environment','sendStatus','end','offset','set','Content-Range','json','reject','then','destroy','status','stack','name','FaxQueueReport','rawAttributes','type','key','model','keys','query','filters','intersection','attributes','fields','length','hasOwnProperty','limit','order','sort','where','pick','filter','merge','map','VIRTUAL','options','count','includeAll','findAll','rows','catch','params','include','find','create','body','describe','eml-format','rimraf','zip-dir','request-promise','moment','bluebird','mustache','util','path','sox','to-csv','ejs'];(function(_0x995fd8,_0x25cc4d){var _0x1ed791=function(_0x3f8bc8){while(--_0x3f8bc8){_0x995fd8['push'](_0x995fd8['shift']());}};_0x1ed791(++_0x25cc4d);}(_0x1d34,0x10c));var _0x41d3=function(_0x5d314f,_0xa8d2a8){_0x5d314f=_0x5d314f-0x0;var _0x5d29ff=_0x1d34[_0x5d314f];return _0x5d29ff;};'use strict';var pdf=require('html-pdf');var emlformat=require(_0x41d3('0x0'));var rimraf=require(_0x41d3('0x1'));var zipdir=require(_0x41d3('0x2'));var jsonpatch=require('fast-json-patch');var rp=require(_0x41d3('0x3'));var moment=require(_0x41d3('0x4'));var BPromise=require(_0x41d3('0x5'));var Mustache=require(_0x41d3('0x6'));var util=require(_0x41d3('0x7'));var path=require(_0x41d3('0x8'));var sox=require(_0x41d3('0x9'));var csv=require(_0x41d3('0xa'));var ejs=require(_0x41d3('0xb'));var fs=require('fs');var _=require(_0x41d3('0xc'));var squel=require(_0x41d3('0xd'));var crypto=require(_0x41d3('0xe'));var jsforce=require('jsforce');var deskjs=require('desk.js');var toCsv=require('to-csv');var querystring=require(_0x41d3('0xf'));var Papa=require('papaparse');var Redis=require(_0x41d3('0x10'));var authService=require(_0x41d3('0x11'));var qs=require('../../components/parsers/qs');var as=require(_0x41d3('0x12'));var hardwareService=require(_0x41d3('0x13'));var logger=require(_0x41d3('0x14'))(_0x41d3('0x15'));var utils=require(_0x41d3('0x16'));var config=require(_0x41d3('0x17'));var db=require('../../mysqldb')['db'];function respondWithStatusCode(_0x4d2497,_0x49adb6){_0x49adb6=_0x49adb6||0xcc;return function(_0x472a13){if(_0x472a13){return _0x4d2497[_0x41d3('0x18')](_0x49adb6);}return _0x4d2497['status'](_0x49adb6)[_0x41d3('0x19')]();};}function respondWithResult(_0x178e16,_0x2cfb2c){_0x2cfb2c=_0x2cfb2c||0xc8;return function(_0x19ea09){if(_0x19ea09){return _0x178e16['status'](_0x2cfb2c)['json'](_0x19ea09);}};}function respondWithFilteredResult(_0x2783e5,_0x4d2d72){return function(_0x2acc0a){if(_0x2acc0a){var _0x200a85=_0x2acc0a['count'],_0x2b5128=_0x4d2d72[_0x41d3('0x1a')],_0x9772f3=_0x4d2d72['offset']+_0x4d2d72['limit'],_0x57aa59;if(_0x9772f3>=_0x200a85){_0x9772f3=_0x200a85;_0x57aa59=0xc8;}else{_0x57aa59=0xce;}_0x2783e5['status'](_0x57aa59);return _0x2783e5[_0x41d3('0x1b')](_0x41d3('0x1c'),_0x2b5128+'-'+_0x9772f3+'/'+_0x200a85)[_0x41d3('0x1d')](_0x2acc0a);}return null;};}function patchUpdates(_0x1c1afc){return function(_0x32d8a4){try{jsonpatch['apply'](_0x32d8a4,_0x1c1afc,!![]);}catch(_0x2bc085){return BPromise[_0x41d3('0x1e')](_0x2bc085);}return _0x32d8a4['save']();};}function saveUpdates(_0x72119b,_0x1308bc){return function(_0x180b50){if(_0x180b50){return _0x180b50['update'](_0x72119b)[_0x41d3('0x1f')](function(_0x6880dd){return _0x6880dd;});}return null;};}function removeEntity(_0x46fd2a,_0x4babeb){return function(_0x45b6fa){if(_0x45b6fa){return _0x45b6fa[_0x41d3('0x20')]()[_0x41d3('0x1f')](function(){_0x46fd2a[_0x41d3('0x21')](0xcc)[_0x41d3('0x19')]();});}};}function handleEntityNotFound(_0x2faf45,_0x2ea7ed){return function(_0x31fec2){if(!_0x31fec2){_0x2faf45[_0x41d3('0x18')](0x194);}return _0x31fec2;};}function handleError(_0x2670e9,_0x3d0703){_0x3d0703=_0x3d0703||0x1f4;return function(_0x5063ed){logger['error'](_0x5063ed[_0x41d3('0x22')]);if(_0x5063ed[_0x41d3('0x23')]){delete _0x5063ed[_0x41d3('0x23')];}_0x2670e9[_0x41d3('0x21')](_0x3d0703)['send'](_0x5063ed);};}exports['index']=function(_0x5195b2,_0x3f7e09){var _0x49b60c={},_0x33ecb9={},_0x473ebe={'count':0x0,'rows':[]};var _0x55ffa5=_['map'](db[_0x41d3('0x24')][_0x41d3('0x25')],function(_0x5f24b5){return{'name':_0x5f24b5['fieldName'],'type':_0x5f24b5[_0x41d3('0x26')][_0x41d3('0x27')]};});_0x33ecb9[_0x41d3('0x28')]=_['map'](_0x55ffa5,'name');_0x33ecb9['query']=_[_0x41d3('0x29')](_0x5195b2[_0x41d3('0x2a')]);_0x33ecb9[_0x41d3('0x2b')]=_[_0x41d3('0x2c')](_0x33ecb9[_0x41d3('0x28')],_0x33ecb9['query']);_0x49b60c[_0x41d3('0x2d')]=_[_0x41d3('0x2c')](_0x33ecb9['model'],qs[_0x41d3('0x2e')](_0x5195b2[_0x41d3('0x2a')]['fields']));_0x49b60c['attributes']=_0x49b60c[_0x41d3('0x2d')][_0x41d3('0x2f')]?_0x49b60c[_0x41d3('0x2d')]:_0x33ecb9['model'];if(!_0x5195b2[_0x41d3('0x2a')][_0x41d3('0x30')]('nolimit')){_0x49b60c[_0x41d3('0x31')]=qs[_0x41d3('0x31')](_0x5195b2[_0x41d3('0x2a')]['limit']);_0x49b60c[_0x41d3('0x1a')]=qs[_0x41d3('0x1a')](_0x5195b2[_0x41d3('0x2a')][_0x41d3('0x1a')]);}_0x49b60c[_0x41d3('0x32')]=qs['sort'](_0x5195b2['query'][_0x41d3('0x33')]);_0x49b60c[_0x41d3('0x34')]=qs['filters'](_[_0x41d3('0x35')](_0x5195b2[_0x41d3('0x2a')],_0x33ecb9[_0x41d3('0x2b')]));if(_0x5195b2[_0x41d3('0x2a')][_0x41d3('0x36')]){_0x49b60c[_0x41d3('0x34')]=_[_0x41d3('0x37')](_0x49b60c['where'],{'$or':_[_0x41d3('0x38')](_0x55ffa5,function(_0x1710eb){if(_0x1710eb[_0x41d3('0x26')]!==_0x41d3('0x39')){var _0x2ff751={};_0x2ff751[_0x1710eb[_0x41d3('0x23')]]={'$like':'%'+_0x5195b2[_0x41d3('0x2a')]['filter']+'%'};return _0x2ff751;}})});}_0x49b60c=_[_0x41d3('0x37')]({},_0x49b60c,_0x5195b2[_0x41d3('0x3a')]);var _0x3cd960={'where':_0x49b60c[_0x41d3('0x34')]};return db[_0x41d3('0x24')][_0x41d3('0x3b')](_0x3cd960)[_0x41d3('0x1f')](function(_0xe8e888){_0x473ebe[_0x41d3('0x3b')]=_0xe8e888;if(_0x5195b2[_0x41d3('0x2a')][_0x41d3('0x3c')]){_0x49b60c['include']=[{'all':!![]}];}return db[_0x41d3('0x24')][_0x41d3('0x3d')](_0x49b60c);})[_0x41d3('0x1f')](function(_0x4da3b6){_0x473ebe[_0x41d3('0x3e')]=_0x4da3b6;return _0x473ebe;})[_0x41d3('0x1f')](respondWithFilteredResult(_0x3f7e09,_0x49b60c))[_0x41d3('0x3f')](handleError(_0x3f7e09,null));};exports['show']=function(_0x5f51aa,_0xd955e2){var _0x464a96={'raw':!![],'where':{'id':_0x5f51aa[_0x41d3('0x40')]['id']}},_0x14fcc4={};_0x14fcc4[_0x41d3('0x28')]=_['keys'](db['FaxQueueReport']['rawAttributes']);_0x14fcc4[_0x41d3('0x2a')]=_[_0x41d3('0x29')](_0x5f51aa[_0x41d3('0x2a')]);_0x14fcc4[_0x41d3('0x2b')]=_[_0x41d3('0x2c')](_0x14fcc4[_0x41d3('0x28')],_0x14fcc4[_0x41d3('0x2a')]);_0x464a96[_0x41d3('0x2d')]=_[_0x41d3('0x2c')](_0x14fcc4[_0x41d3('0x28')],qs['fields'](_0x5f51aa[_0x41d3('0x2a')]['fields']));_0x464a96[_0x41d3('0x2d')]=_0x464a96[_0x41d3('0x2d')][_0x41d3('0x2f')]?_0x464a96['attributes']:_0x14fcc4['model'];if(_0x5f51aa['query']['includeAll']){_0x464a96[_0x41d3('0x41')]=[{'all':!![]}];}_0x464a96=_['merge']({},_0x464a96,_0x5f51aa[_0x41d3('0x3a')]);return db[_0x41d3('0x24')][_0x41d3('0x42')](_0x464a96)[_0x41d3('0x1f')](handleEntityNotFound(_0xd955e2,null))['then'](respondWithResult(_0xd955e2,null))[_0x41d3('0x3f')](handleError(_0xd955e2,null));};exports['create']=function(_0x369c79,_0x451c32){return db[_0x41d3('0x24')][_0x41d3('0x43')](_0x369c79[_0x41d3('0x44')],{})[_0x41d3('0x1f')](respondWithResult(_0x451c32,0xc9))[_0x41d3('0x3f')](handleError(_0x451c32,null));};exports['update']=function(_0x234d5f,_0x84b32){if(_0x234d5f[_0x41d3('0x44')]['id']){delete _0x234d5f['body']['id'];}return db[_0x41d3('0x24')][_0x41d3('0x42')]({'where':{'id':_0x234d5f['params']['id']}})['then'](handleEntityNotFound(_0x84b32,null))[_0x41d3('0x1f')](saveUpdates(_0x234d5f[_0x41d3('0x44')],null))['then'](respondWithResult(_0x84b32,null))[_0x41d3('0x3f')](handleError(_0x84b32,null));};exports[_0x41d3('0x20')]=function(_0x1fe1a5,_0x201cf4){return db[_0x41d3('0x24')][_0x41d3('0x42')]({'where':{'id':_0x1fe1a5[_0x41d3('0x40')]['id']}})[_0x41d3('0x1f')](handleEntityNotFound(_0x201cf4,null))['then'](removeEntity(_0x201cf4,null))['catch'](handleError(_0x201cf4,null));};exports[_0x41d3('0x45')]=function(_0x350bbc,_0x45b69f){return db[_0x41d3('0x24')][_0x41d3('0x45')]()[_0x41d3('0x1f')](respondWithResult(_0x45b69f,null))[_0x41d3('0x3f')](handleError(_0x45b69f,null));};
\ No newline at end of file
+var _0x0b99=['../../config/environment','../../config/license/util','../../mysqldb','sendStatus','end','json','count','offset','limit','status','set','Content-Range','apply','reject','save','update','then','destroy','error','stack','name','send','index','map','FaxQueueReport','rawAttributes','fieldName','type','model','query','keys','filters','intersection','fields','attributes','length','hasOwnProperty','nolimit','order','where','pick','filter','VIRTUAL','merge','include','rows','show','includeAll','options','find','create','catch','body','params','describe','html-pdf','eml-format','rimraf','fast-json-patch','request-promise','moment','mustache','path','sox','to-csv','ejs','lodash','crypto','jsforce','querystring','papaparse','ioredis','../../components/parsers/qs','../../components/parsers/advancedSearch','../../config/logger','api','../../config/utils'];(function(_0x3ed0bf,_0x5bb8a9){var _0x1e618e=function(_0x4230b6){while(--_0x4230b6){_0x3ed0bf['push'](_0x3ed0bf['shift']());}};_0x1e618e(++_0x5bb8a9);}(_0x0b99,0xd1));var _0x90b9=function(_0x14add3,_0x13ce8d){_0x14add3=_0x14add3-0x0;var _0x4a174f=_0x0b99[_0x14add3];return _0x4a174f;};'use strict';var pdf=require(_0x90b9('0x0'));var emlformat=require(_0x90b9('0x1'));var rimraf=require(_0x90b9('0x2'));var zipdir=require('zip-dir');var jsonpatch=require(_0x90b9('0x3'));var rp=require(_0x90b9('0x4'));var moment=require(_0x90b9('0x5'));var BPromise=require('bluebird');var Mustache=require(_0x90b9('0x6'));var util=require('util');var path=require(_0x90b9('0x7'));var sox=require(_0x90b9('0x8'));var csv=require(_0x90b9('0x9'));var ejs=require(_0x90b9('0xa'));var fs=require('fs');var _=require(_0x90b9('0xb'));var squel=require('squel');var crypto=require(_0x90b9('0xc'));var jsforce=require(_0x90b9('0xd'));var deskjs=require('desk.js');var toCsv=require(_0x90b9('0x9'));var querystring=require(_0x90b9('0xe'));var Papa=require(_0x90b9('0xf'));var Redis=require(_0x90b9('0x10'));var authService=require('../../components/auth/service');var qs=require(_0x90b9('0x11'));var as=require(_0x90b9('0x12'));var hardwareService=require('../../config/license/hardware');var logger=require(_0x90b9('0x13'))(_0x90b9('0x14'));var utils=require(_0x90b9('0x15'));var config=require(_0x90b9('0x16'));var licenseUtil=require(_0x90b9('0x17'));var db=require(_0x90b9('0x18'))['db'];function respondWithStatusCode(_0x412e4f,_0x18a19b){_0x18a19b=_0x18a19b||0xcc;return function(_0x171f2f){if(_0x171f2f){return _0x412e4f[_0x90b9('0x19')](_0x18a19b);}return _0x412e4f['status'](_0x18a19b)[_0x90b9('0x1a')]();};}function respondWithResult(_0x484640,_0x54912d){_0x54912d=_0x54912d||0xc8;return function(_0x133fb8){if(_0x133fb8){return _0x484640['status'](_0x54912d)[_0x90b9('0x1b')](_0x133fb8);}};}function respondWithFilteredResult(_0x2a1ab1,_0x7fd6fe){return function(_0x1dcc29){if(_0x1dcc29){var _0x4f19bf=_0x1dcc29[_0x90b9('0x1c')],_0x427821=_0x7fd6fe[_0x90b9('0x1d')],_0x7d284a=_0x7fd6fe[_0x90b9('0x1d')]+_0x7fd6fe[_0x90b9('0x1e')],_0x118fcb;if(_0x7d284a>=_0x4f19bf){_0x7d284a=_0x4f19bf;_0x118fcb=0xc8;}else{_0x118fcb=0xce;}_0x2a1ab1[_0x90b9('0x1f')](_0x118fcb);return _0x2a1ab1[_0x90b9('0x20')](_0x90b9('0x21'),_0x427821+'-'+_0x7d284a+'/'+_0x4f19bf)[_0x90b9('0x1b')](_0x1dcc29);}return null;};}function patchUpdates(_0x1770c0){return function(_0x19e7d3){try{jsonpatch[_0x90b9('0x22')](_0x19e7d3,_0x1770c0,!![]);}catch(_0xcf25dd){return BPromise[_0x90b9('0x23')](_0xcf25dd);}return _0x19e7d3[_0x90b9('0x24')]();};}function saveUpdates(_0x3b3114,_0x2db5bb){return function(_0x1bec7c){if(_0x1bec7c){return _0x1bec7c[_0x90b9('0x25')](_0x3b3114)[_0x90b9('0x26')](function(_0x32ae3e){return _0x32ae3e;});}return null;};}function removeEntity(_0x4fd727,_0x5c1280){return function(_0x4820f0){if(_0x4820f0){return _0x4820f0[_0x90b9('0x27')]()['then'](function(){_0x4fd727['status'](0xcc)[_0x90b9('0x1a')]();});}};}function handleEntityNotFound(_0x4734a7,_0x429403){return function(_0x5597af){if(!_0x5597af){_0x4734a7[_0x90b9('0x19')](0x194);}return _0x5597af;};}function handleError(_0x33164d,_0x19fc31){_0x19fc31=_0x19fc31||0x1f4;return function(_0x17d0dc){logger[_0x90b9('0x28')](_0x17d0dc[_0x90b9('0x29')]);if(_0x17d0dc[_0x90b9('0x2a')]){delete _0x17d0dc[_0x90b9('0x2a')];}_0x33164d[_0x90b9('0x1f')](_0x19fc31)[_0x90b9('0x2b')](_0x17d0dc);};}exports[_0x90b9('0x2c')]=function(_0x4a9668,_0x8ce2dc){var _0x30bebb={},_0x56532a={},_0x2f8fb7={'count':0x0,'rows':[]};var _0x15c739=_[_0x90b9('0x2d')](db[_0x90b9('0x2e')][_0x90b9('0x2f')],function(_0x47f86b){return{'name':_0x47f86b[_0x90b9('0x30')],'type':_0x47f86b[_0x90b9('0x31')]['key']};});_0x56532a[_0x90b9('0x32')]=_['map'](_0x15c739,'name');_0x56532a[_0x90b9('0x33')]=_[_0x90b9('0x34')](_0x4a9668[_0x90b9('0x33')]);_0x56532a[_0x90b9('0x35')]=_[_0x90b9('0x36')](_0x56532a[_0x90b9('0x32')],_0x56532a[_0x90b9('0x33')]);_0x30bebb['attributes']=_[_0x90b9('0x36')](_0x56532a['model'],qs[_0x90b9('0x37')](_0x4a9668[_0x90b9('0x33')][_0x90b9('0x37')]));_0x30bebb[_0x90b9('0x38')]=_0x30bebb[_0x90b9('0x38')][_0x90b9('0x39')]?_0x30bebb[_0x90b9('0x38')]:_0x56532a['model'];if(!_0x4a9668[_0x90b9('0x33')][_0x90b9('0x3a')](_0x90b9('0x3b'))){_0x30bebb[_0x90b9('0x1e')]=qs[_0x90b9('0x1e')](_0x4a9668[_0x90b9('0x33')]['limit']);_0x30bebb['offset']=qs[_0x90b9('0x1d')](_0x4a9668['query']['offset']);}_0x30bebb[_0x90b9('0x3c')]=qs['sort'](_0x4a9668[_0x90b9('0x33')]['sort']);_0x30bebb[_0x90b9('0x3d')]=qs[_0x90b9('0x35')](_[_0x90b9('0x3e')](_0x4a9668['query'],_0x56532a[_0x90b9('0x35')]),_0x15c739);if(_0x4a9668[_0x90b9('0x33')][_0x90b9('0x3f')]){_0x30bebb[_0x90b9('0x3d')]=_['merge'](_0x30bebb['where'],{'$or':_[_0x90b9('0x2d')](_0x15c739,function(_0x3d3f38){if(_0x3d3f38[_0x90b9('0x31')]!==_0x90b9('0x40')){var _0x519f76={};_0x519f76[_0x3d3f38['name']]={'$like':'%'+_0x4a9668[_0x90b9('0x33')][_0x90b9('0x3f')]+'%'};return _0x519f76;}})});}_0x30bebb=_[_0x90b9('0x41')]({},_0x30bebb,_0x4a9668['options']);var _0x9b398c={'where':_0x30bebb[_0x90b9('0x3d')]};return db[_0x90b9('0x2e')][_0x90b9('0x1c')](_0x9b398c)[_0x90b9('0x26')](function(_0x41ac1d){_0x2f8fb7[_0x90b9('0x1c')]=_0x41ac1d;if(_0x4a9668['query']['includeAll']){_0x30bebb[_0x90b9('0x42')]=[{'all':!![]}];}return db[_0x90b9('0x2e')]['findAll'](_0x30bebb);})['then'](function(_0x4638ee){_0x2f8fb7[_0x90b9('0x43')]=_0x4638ee;return _0x2f8fb7;})['then'](respondWithFilteredResult(_0x8ce2dc,_0x30bebb))['catch'](handleError(_0x8ce2dc,null));};exports[_0x90b9('0x44')]=function(_0x3d6e69,_0x3a0ded){var _0x1d4477={'raw':!![],'where':{'id':_0x3d6e69['params']['id']}},_0x314264={};_0x314264[_0x90b9('0x32')]=_[_0x90b9('0x34')](db[_0x90b9('0x2e')][_0x90b9('0x2f')]);_0x314264['query']=_['keys'](_0x3d6e69[_0x90b9('0x33')]);_0x314264[_0x90b9('0x35')]=_[_0x90b9('0x36')](_0x314264[_0x90b9('0x32')],_0x314264['query']);_0x1d4477['attributes']=_[_0x90b9('0x36')](_0x314264[_0x90b9('0x32')],qs['fields'](_0x3d6e69['query'][_0x90b9('0x37')]));_0x1d4477['attributes']=_0x1d4477['attributes'][_0x90b9('0x39')]?_0x1d4477[_0x90b9('0x38')]:_0x314264[_0x90b9('0x32')];if(_0x3d6e69[_0x90b9('0x33')][_0x90b9('0x45')]){_0x1d4477['include']=[{'all':!![]}];}_0x1d4477=_[_0x90b9('0x41')]({},_0x1d4477,_0x3d6e69[_0x90b9('0x46')]);return db[_0x90b9('0x2e')][_0x90b9('0x47')](_0x1d4477)[_0x90b9('0x26')](handleEntityNotFound(_0x3a0ded,null))[_0x90b9('0x26')](respondWithResult(_0x3a0ded,null))['catch'](handleError(_0x3a0ded,null));};exports[_0x90b9('0x48')]=function(_0x2527fa,_0x52008b){return db['FaxQueueReport'][_0x90b9('0x48')](_0x2527fa['body'],{})[_0x90b9('0x26')](respondWithResult(_0x52008b,0xc9))[_0x90b9('0x49')](handleError(_0x52008b,null));};exports[_0x90b9('0x25')]=function(_0x22f919,_0x25eb07){if(_0x22f919['body']['id']){delete _0x22f919[_0x90b9('0x4a')]['id'];}return db['FaxQueueReport'][_0x90b9('0x47')]({'where':{'id':_0x22f919[_0x90b9('0x4b')]['id']}})[_0x90b9('0x26')](handleEntityNotFound(_0x25eb07,null))[_0x90b9('0x26')](saveUpdates(_0x22f919['body'],null))[_0x90b9('0x26')](respondWithResult(_0x25eb07,null))[_0x90b9('0x49')](handleError(_0x25eb07,null));};exports['destroy']=function(_0x2ffc36,_0x6810ad){return db[_0x90b9('0x2e')]['find']({'where':{'id':_0x2ffc36[_0x90b9('0x4b')]['id']}})[_0x90b9('0x26')](handleEntityNotFound(_0x6810ad,null))[_0x90b9('0x26')](removeEntity(_0x6810ad,null))[_0x90b9('0x49')](handleError(_0x6810ad,null));};exports[_0x90b9('0x4c')]=function(_0x3d564d,_0x187886){return db['FaxQueueReport'][_0x90b9('0x4c')]()[_0x90b9('0x26')](respondWithResult(_0x187886,null))['catch'](handleError(_0x187886,null));};
\ No newline at end of file