Built motion from commit 97153652.|2.6.26
[motion2.git] / server / api / openchannelApplication / openchannelApplication.controller.js
index f5935f3..ddb8e59 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x62e3=['filter','options','count','findAll','rows','show','params','includeAll','include','catch','create','body','find','html-pdf','rimraf','zip-dir','request-promise','moment','bluebird','mustache','util','path','ejs','lodash','squel','crypto','desk.js','to-csv','querystring','papaparse','../../components/auth/service','../../components/parsers/qs','../../config/license/hardware','../../config/logger','../../config/utils','../../config/environment','../../config/license/util','../../mysqldb','sendStatus','status','end','json','offset','limit','set','Content-Range','apply','reject','update','then','destroy','error','stack','name','send','index','map','OpenchannelApplication','rawAttributes','fieldName','type','key','query','keys','filters','intersection','model','attributes','fields','length','hasOwnProperty','nolimit','order','sort','where','pick','merge','VIRTUAL'];(function(_0x3a21c0,_0x348451){var _0x411e84=function(_0xdd7b02){while(--_0xdd7b02){_0x3a21c0['push'](_0x3a21c0['shift']());}};_0x411e84(++_0x348451);}(_0x62e3,0x1e1));var _0x362e=function(_0x3dd15e,_0x1f0015){_0x3dd15e=_0x3dd15e-0x0;var _0x231fd0=_0x62e3[_0x3dd15e];return _0x231fd0;};'use strict';var pdf=require(_0x362e('0x0'));var emlformat=require('eml-format');var rimraf=require(_0x362e('0x1'));var zipdir=require(_0x362e('0x2'));var jsonpatch=require('fast-json-patch');var rp=require(_0x362e('0x3'));var moment=require(_0x362e('0x4'));var BPromise=require(_0x362e('0x5'));var Mustache=require(_0x362e('0x6'));var util=require(_0x362e('0x7'));var path=require(_0x362e('0x8'));var sox=require('sox');var csv=require('to-csv');var ejs=require(_0x362e('0x9'));var fs=require('fs');var _=require(_0x362e('0xa'));var squel=require(_0x362e('0xb'));var crypto=require(_0x362e('0xc'));var jsforce=require('jsforce');var deskjs=require(_0x362e('0xd'));var toCsv=require(_0x362e('0xe'));var querystring=require(_0x362e('0xf'));var Papa=require(_0x362e('0x10'));var Redis=require('ioredis');var authService=require(_0x362e('0x11'));var qs=require(_0x362e('0x12'));var as=require('../../components/parsers/advancedSearch');var hardwareService=require(_0x362e('0x13'));var logger=require(_0x362e('0x14'))('api');var utils=require(_0x362e('0x15'));var config=require(_0x362e('0x16'));var licenseUtil=require(_0x362e('0x17'));var db=require(_0x362e('0x18'))['db'];function respondWithStatusCode(_0x1ba79a,_0x54ba9c){_0x54ba9c=_0x54ba9c||0xcc;return function(_0x3a7102){if(_0x3a7102){return _0x1ba79a[_0x362e('0x19')](_0x54ba9c);}return _0x1ba79a[_0x362e('0x1a')](_0x54ba9c)[_0x362e('0x1b')]();};}function respondWithResult(_0x3d5aba,_0x1faf8b){_0x1faf8b=_0x1faf8b||0xc8;return function(_0xb31b53){if(_0xb31b53){return _0x3d5aba[_0x362e('0x1a')](_0x1faf8b)[_0x362e('0x1c')](_0xb31b53);}};}function respondWithFilteredResult(_0x12aa06,_0x44bcd8){return function(_0x15623e){if(_0x15623e){var _0x134c70=_0x15623e['count'],_0x4d344d=_0x44bcd8[_0x362e('0x1d')],_0x13b598=_0x44bcd8[_0x362e('0x1d')]+_0x44bcd8[_0x362e('0x1e')],_0x3068c8;if(_0x13b598>=_0x134c70){_0x13b598=_0x134c70;_0x3068c8=0xc8;}else{_0x3068c8=0xce;}_0x12aa06[_0x362e('0x1a')](_0x3068c8);return _0x12aa06[_0x362e('0x1f')](_0x362e('0x20'),_0x4d344d+'-'+_0x13b598+'/'+_0x134c70)[_0x362e('0x1c')](_0x15623e);}return null;};}function patchUpdates(_0x21b42f){return function(_0x5bcdc9){try{jsonpatch[_0x362e('0x21')](_0x5bcdc9,_0x21b42f,!![]);}catch(_0xef9bfd){return BPromise[_0x362e('0x22')](_0xef9bfd);}return _0x5bcdc9['save']();};}function saveUpdates(_0x35ba5b,_0x15b427){return function(_0xce8ef8){if(_0xce8ef8){return _0xce8ef8[_0x362e('0x23')](_0x35ba5b)[_0x362e('0x24')](function(_0x43f93a){return _0x43f93a;});}return null;};}function removeEntity(_0x3d5435,_0x46322c){return function(_0xa5e523){if(_0xa5e523){return _0xa5e523[_0x362e('0x25')]()[_0x362e('0x24')](function(){_0x3d5435[_0x362e('0x1a')](0xcc)[_0x362e('0x1b')]();});}};}function handleEntityNotFound(_0x5acec1,_0x4cefcd){return function(_0xfc9f30){if(!_0xfc9f30){_0x5acec1[_0x362e('0x19')](0x194);}return _0xfc9f30;};}function handleError(_0x343e85,_0x37a70d){_0x37a70d=_0x37a70d||0x1f4;return function(_0x113410){logger[_0x362e('0x26')](_0x113410[_0x362e('0x27')]);if(_0x113410[_0x362e('0x28')]){delete _0x113410['name'];}_0x343e85[_0x362e('0x1a')](_0x37a70d)[_0x362e('0x29')](_0x113410);};}exports[_0x362e('0x2a')]=function(_0x3688f5,_0x1be483){var _0x5ecb45={},_0x14531e={},_0x9cf248={'count':0x0,'rows':[]};var _0x3e4904=_[_0x362e('0x2b')](db[_0x362e('0x2c')][_0x362e('0x2d')],function(_0x5c4745){return{'name':_0x5c4745[_0x362e('0x2e')],'type':_0x5c4745[_0x362e('0x2f')][_0x362e('0x30')]};});_0x14531e['model']=_[_0x362e('0x2b')](_0x3e4904,_0x362e('0x28'));_0x14531e[_0x362e('0x31')]=_[_0x362e('0x32')](_0x3688f5[_0x362e('0x31')]);_0x14531e[_0x362e('0x33')]=_[_0x362e('0x34')](_0x14531e[_0x362e('0x35')],_0x14531e['query']);_0x5ecb45[_0x362e('0x36')]=_[_0x362e('0x34')](_0x14531e['model'],qs['fields'](_0x3688f5[_0x362e('0x31')][_0x362e('0x37')]));_0x5ecb45['attributes']=_0x5ecb45[_0x362e('0x36')][_0x362e('0x38')]?_0x5ecb45[_0x362e('0x36')]:_0x14531e[_0x362e('0x35')];if(!_0x3688f5[_0x362e('0x31')][_0x362e('0x39')](_0x362e('0x3a'))){_0x5ecb45['limit']=qs['limit'](_0x3688f5[_0x362e('0x31')][_0x362e('0x1e')]);_0x5ecb45['offset']=qs[_0x362e('0x1d')](_0x3688f5[_0x362e('0x31')][_0x362e('0x1d')]);}_0x5ecb45[_0x362e('0x3b')]=qs[_0x362e('0x3c')](_0x3688f5[_0x362e('0x31')][_0x362e('0x3c')]);_0x5ecb45[_0x362e('0x3d')]=qs['filters'](_[_0x362e('0x3e')](_0x3688f5[_0x362e('0x31')],_0x14531e['filters']),_0x3e4904);if(_0x3688f5[_0x362e('0x31')]['filter']){_0x5ecb45['where']=_[_0x362e('0x3f')](_0x5ecb45[_0x362e('0x3d')],{'$or':_[_0x362e('0x2b')](_0x3e4904,function(_0x1d434c){if(_0x1d434c[_0x362e('0x2f')]!==_0x362e('0x40')){var _0x5c5f9e={};_0x5c5f9e[_0x1d434c[_0x362e('0x28')]]={'$like':'%'+_0x3688f5[_0x362e('0x31')][_0x362e('0x41')]+'%'};return _0x5c5f9e;}})});}_0x5ecb45=_[_0x362e('0x3f')]({},_0x5ecb45,_0x3688f5[_0x362e('0x42')]);var _0x45bde6={'where':_0x5ecb45['where']};return db[_0x362e('0x2c')][_0x362e('0x43')](_0x45bde6)[_0x362e('0x24')](function(_0x549423){_0x9cf248[_0x362e('0x43')]=_0x549423;if(_0x3688f5[_0x362e('0x31')]['includeAll']){_0x5ecb45['include']=[{'all':!![]}];}return db[_0x362e('0x2c')][_0x362e('0x44')](_0x5ecb45);})['then'](function(_0x1185c3){_0x9cf248[_0x362e('0x45')]=_0x1185c3;return _0x9cf248;})[_0x362e('0x24')](respondWithFilteredResult(_0x1be483,_0x5ecb45))['catch'](handleError(_0x1be483,null));};exports[_0x362e('0x46')]=function(_0x1d7db4,_0x53edc5){var _0x2e7e58={'raw':!![],'where':{'id':_0x1d7db4[_0x362e('0x47')]['id']}},_0x4f17d5={};_0x4f17d5[_0x362e('0x35')]=_[_0x362e('0x32')](db['OpenchannelApplication']['rawAttributes']);_0x4f17d5[_0x362e('0x31')]=_[_0x362e('0x32')](_0x1d7db4[_0x362e('0x31')]);_0x4f17d5[_0x362e('0x33')]=_['intersection'](_0x4f17d5[_0x362e('0x35')],_0x4f17d5['query']);_0x2e7e58[_0x362e('0x36')]=_[_0x362e('0x34')](_0x4f17d5[_0x362e('0x35')],qs[_0x362e('0x37')](_0x1d7db4['query'][_0x362e('0x37')]));_0x2e7e58[_0x362e('0x36')]=_0x2e7e58[_0x362e('0x36')]['length']?_0x2e7e58['attributes']:_0x4f17d5[_0x362e('0x35')];if(_0x1d7db4[_0x362e('0x31')][_0x362e('0x48')]){_0x2e7e58[_0x362e('0x49')]=[{'all':!![]}];}_0x2e7e58=_[_0x362e('0x3f')]({},_0x2e7e58,_0x1d7db4[_0x362e('0x42')]);return db[_0x362e('0x2c')]['find'](_0x2e7e58)['then'](handleEntityNotFound(_0x53edc5,null))['then'](respondWithResult(_0x53edc5,null))[_0x362e('0x4a')](handleError(_0x53edc5,null));};exports[_0x362e('0x4b')]=function(_0x4dfa86,_0x36837e){return db[_0x362e('0x2c')][_0x362e('0x4b')](_0x4dfa86[_0x362e('0x4c')],{})[_0x362e('0x24')](respondWithResult(_0x36837e,0xc9))[_0x362e('0x4a')](handleError(_0x36837e,null));};exports['update']=function(_0x4054c8,_0xc8ae84){if(_0x4054c8[_0x362e('0x4c')]['id']){delete _0x4054c8[_0x362e('0x4c')]['id'];}return db[_0x362e('0x2c')][_0x362e('0x4d')]({'where':{'id':_0x4054c8[_0x362e('0x47')]['id']}})[_0x362e('0x24')](handleEntityNotFound(_0xc8ae84,null))[_0x362e('0x24')](saveUpdates(_0x4054c8[_0x362e('0x4c')],null))[_0x362e('0x24')](respondWithResult(_0xc8ae84,null))[_0x362e('0x4a')](handleError(_0xc8ae84,null));};exports[_0x362e('0x25')]=function(_0xab5b0,_0x3ffc1b){return db[_0x362e('0x2c')][_0x362e('0x4d')]({'where':{'id':_0xab5b0['params']['id']}})['then'](handleEntityNotFound(_0x3ffc1b,null))['then'](removeEntity(_0x3ffc1b,null))[_0x362e('0x4a')](handleError(_0x3ffc1b,null));};
\ No newline at end of file
+var _0xfe16=['rimraf','zip-dir','fast-json-patch','request-promise','bluebird','mustache','path','to-csv','ejs','squel','crypto','jsforce','querystring','papaparse','ioredis','../../components/parsers/qs','../../config/logger','api','../../config/utils','../../config/environment','../../config/license/util','../../mysqldb','end','status','json','offset','limit','undefined','count','set','Content-Range','apply','reject','save','update','destroy','then','sendStatus','name','fieldName','type','model','query','keys','filters','intersection','attributes','fields','length','nolimit','sort','where','pick','filter','merge','map','options','OpenchannelApplication','includeAll','include','findAll','show','params','catch','create','body','find'];(function(_0x3f43ef,_0x4c2ba9){var _0x20af43=function(_0x17fb2b){while(--_0x17fb2b){_0x3f43ef['push'](_0x3f43ef['shift']());}};_0x20af43(++_0x4c2ba9);}(_0xfe16,0x10c));var _0x6fe1=function(_0x2c33cc,_0x93ad40){_0x2c33cc=_0x2c33cc-0x0;var _0x592c93=_0xfe16[_0x2c33cc];return _0x592c93;};'use strict';var emlformat=require('eml-format');var rimraf=require(_0x6fe1('0x0'));var zipdir=require(_0x6fe1('0x1'));var jsonpatch=require(_0x6fe1('0x2'));var rp=require(_0x6fe1('0x3'));var moment=require('moment');var BPromise=require(_0x6fe1('0x4'));var Mustache=require(_0x6fe1('0x5'));var util=require('util');var path=require(_0x6fe1('0x6'));var sox=require('sox');var csv=require(_0x6fe1('0x7'));var ejs=require(_0x6fe1('0x8'));var fs=require('fs');var fs_extra=require('fs-extra');var _=require('lodash');var squel=require(_0x6fe1('0x9'));var crypto=require(_0x6fe1('0xa'));var jsforce=require(_0x6fe1('0xb'));var deskjs=require('desk.js');var toCsv=require(_0x6fe1('0x7'));var querystring=require(_0x6fe1('0xc'));var Papa=require(_0x6fe1('0xd'));var Redis=require(_0x6fe1('0xe'));var authService=require('../../components/auth/service');var qs=require(_0x6fe1('0xf'));var as=require('../../components/parsers/advancedSearch');var hardwareService=require('../../config/license/hardware');var logger=require(_0x6fe1('0x10'))(_0x6fe1('0x11'));var utils=require(_0x6fe1('0x12'));var config=require(_0x6fe1('0x13'));var licenseUtil=require(_0x6fe1('0x14'));var db=require(_0x6fe1('0x15'))['db'];function respondWithStatusCode(_0x176260,_0x47ef37){_0x47ef37=_0x47ef37||0xcc;return function(_0x16509e){if(_0x16509e){return _0x176260['sendStatus'](_0x47ef37);}return _0x176260['status'](_0x47ef37)[_0x6fe1('0x16')]();};}function respondWithResult(_0x80996c,_0x218967){_0x218967=_0x218967||0xc8;return function(_0x446b07){if(_0x446b07){return _0x80996c[_0x6fe1('0x17')](_0x218967)[_0x6fe1('0x18')](_0x446b07);}};}function respondWithFilteredResult(_0x41fd67,_0x493243){return function(_0x2478c1){if(_0x2478c1){var _0x3b7619=typeof _0x493243[_0x6fe1('0x19')]==='undefined'&&typeof _0x493243[_0x6fe1('0x1a')]===_0x6fe1('0x1b');var _0x5230af=_0x2478c1[_0x6fe1('0x1c')];var _0x3ace2f=_0x3b7619?0x0:_0x493243[_0x6fe1('0x19')];var _0x4f3c33=_0x3b7619?_0x2478c1[_0x6fe1('0x1c')]:_0x493243[_0x6fe1('0x19')]+_0x493243['limit'];var _0x3b75da;if(_0x4f3c33>=_0x5230af){_0x4f3c33=_0x5230af;_0x3b75da=0xc8;}else{_0x3b75da=0xce;}_0x41fd67[_0x6fe1('0x17')](_0x3b75da);return _0x41fd67[_0x6fe1('0x1d')](_0x6fe1('0x1e'),_0x3ace2f+'-'+_0x4f3c33+'/'+_0x5230af)[_0x6fe1('0x18')](_0x2478c1);}return null;};}function patchUpdates(_0x3bb0df){return function(_0x1309a7){try{jsonpatch[_0x6fe1('0x1f')](_0x1309a7,_0x3bb0df,!![]);}catch(_0x402d70){return BPromise[_0x6fe1('0x20')](_0x402d70);}return _0x1309a7[_0x6fe1('0x21')]();};}function saveUpdates(_0x2b12c9,_0x3a9c3a){return function(_0x4d0d4b){if(_0x4d0d4b){return _0x4d0d4b[_0x6fe1('0x22')](_0x2b12c9)['then'](function(_0x538c78){return _0x538c78;});}return null;};}function removeEntity(_0x4c3773,_0x34cb93){return function(_0x183c8f){if(_0x183c8f){return _0x183c8f[_0x6fe1('0x23')]()[_0x6fe1('0x24')](function(){_0x4c3773['status'](0xcc)[_0x6fe1('0x16')]();});}};}function handleEntityNotFound(_0x1f375f,_0x5ddbe2){return function(_0x344a0c){if(!_0x344a0c){_0x1f375f[_0x6fe1('0x25')](0x194);}return _0x344a0c;};}function handleError(_0x48ee2f,_0x4081d9){_0x4081d9=_0x4081d9||0x1f4;return function(_0x36c2f9){logger['error'](_0x36c2f9['stack']);if(_0x36c2f9[_0x6fe1('0x26')]){delete _0x36c2f9['name'];}_0x48ee2f[_0x6fe1('0x17')](_0x4081d9)['send'](_0x36c2f9);};}exports['index']=function(_0x2a8d5c,_0x2e1705){var _0x528092={},_0x2781fb={},_0x558aa2={'count':0x0,'rows':[]};var _0x13132f=_['map'](db['OpenchannelApplication']['rawAttributes'],function(_0x4c30c4){return{'name':_0x4c30c4[_0x6fe1('0x27')],'type':_0x4c30c4[_0x6fe1('0x28')]['key']};});_0x2781fb[_0x6fe1('0x29')]=_['map'](_0x13132f,'name');_0x2781fb[_0x6fe1('0x2a')]=_[_0x6fe1('0x2b')](_0x2a8d5c[_0x6fe1('0x2a')]);_0x2781fb[_0x6fe1('0x2c')]=_[_0x6fe1('0x2d')](_0x2781fb[_0x6fe1('0x29')],_0x2781fb[_0x6fe1('0x2a')]);_0x528092[_0x6fe1('0x2e')]=_[_0x6fe1('0x2d')](_0x2781fb[_0x6fe1('0x29')],qs['fields'](_0x2a8d5c[_0x6fe1('0x2a')][_0x6fe1('0x2f')]));_0x528092['attributes']=_0x528092['attributes'][_0x6fe1('0x30')]?_0x528092['attributes']:_0x2781fb[_0x6fe1('0x29')];if(!_0x2a8d5c['query']['hasOwnProperty'](_0x6fe1('0x31'))){_0x528092[_0x6fe1('0x1a')]=qs[_0x6fe1('0x1a')](_0x2a8d5c[_0x6fe1('0x2a')][_0x6fe1('0x1a')]);_0x528092[_0x6fe1('0x19')]=qs['offset'](_0x2a8d5c[_0x6fe1('0x2a')][_0x6fe1('0x19')]);}_0x528092['order']=qs['sort'](_0x2a8d5c[_0x6fe1('0x2a')][_0x6fe1('0x32')]);_0x528092[_0x6fe1('0x33')]=qs[_0x6fe1('0x2c')](_[_0x6fe1('0x34')](_0x2a8d5c['query'],_0x2781fb[_0x6fe1('0x2c')]),_0x13132f);if(_0x2a8d5c['query'][_0x6fe1('0x35')]){_0x528092[_0x6fe1('0x33')]=_[_0x6fe1('0x36')](_0x528092['where'],{'$or':_[_0x6fe1('0x37')](_0x13132f,function(_0x23765a){if(_0x23765a['type']!=='VIRTUAL'){var _0x5d2ea0={};_0x5d2ea0[_0x23765a[_0x6fe1('0x26')]]={'$like':'%'+_0x2a8d5c[_0x6fe1('0x2a')][_0x6fe1('0x35')]+'%'};return _0x5d2ea0;}})});}_0x528092=_[_0x6fe1('0x36')]({},_0x528092,_0x2a8d5c[_0x6fe1('0x38')]);var _0x2b683d={'where':_0x528092[_0x6fe1('0x33')]};return db[_0x6fe1('0x39')][_0x6fe1('0x1c')](_0x2b683d)[_0x6fe1('0x24')](function(_0x525b99){_0x558aa2[_0x6fe1('0x1c')]=_0x525b99;if(_0x2a8d5c[_0x6fe1('0x2a')][_0x6fe1('0x3a')]){_0x528092[_0x6fe1('0x3b')]=[{'all':!![]}];}return db[_0x6fe1('0x39')][_0x6fe1('0x3c')](_0x528092);})['then'](function(_0x23432e){_0x558aa2['rows']=_0x23432e;return _0x558aa2;})['then'](respondWithFilteredResult(_0x2e1705,_0x528092))['catch'](handleError(_0x2e1705,null));};exports[_0x6fe1('0x3d')]=function(_0x4aedef,_0x23573a){var _0x18a80e={'raw':!![],'where':{'id':_0x4aedef[_0x6fe1('0x3e')]['id']}},_0x4ee7c7={};_0x4ee7c7[_0x6fe1('0x29')]=_[_0x6fe1('0x2b')](db[_0x6fe1('0x39')]['rawAttributes']);_0x4ee7c7[_0x6fe1('0x2a')]=_[_0x6fe1('0x2b')](_0x4aedef['query']);_0x4ee7c7[_0x6fe1('0x2c')]=_[_0x6fe1('0x2d')](_0x4ee7c7[_0x6fe1('0x29')],_0x4ee7c7['query']);_0x18a80e[_0x6fe1('0x2e')]=_[_0x6fe1('0x2d')](_0x4ee7c7[_0x6fe1('0x29')],qs['fields'](_0x4aedef['query'][_0x6fe1('0x2f')]));_0x18a80e[_0x6fe1('0x2e')]=_0x18a80e[_0x6fe1('0x2e')][_0x6fe1('0x30')]?_0x18a80e[_0x6fe1('0x2e')]:_0x4ee7c7['model'];if(_0x4aedef[_0x6fe1('0x2a')][_0x6fe1('0x3a')]){_0x18a80e[_0x6fe1('0x3b')]=[{'all':!![]}];}_0x18a80e=_[_0x6fe1('0x36')]({},_0x18a80e,_0x4aedef[_0x6fe1('0x38')]);return db['OpenchannelApplication']['find'](_0x18a80e)['then'](handleEntityNotFound(_0x23573a,null))[_0x6fe1('0x24')](respondWithResult(_0x23573a,null))[_0x6fe1('0x3f')](handleError(_0x23573a,null));};exports['create']=function(_0x564bc7,_0x366ee0){return db[_0x6fe1('0x39')][_0x6fe1('0x40')](_0x564bc7[_0x6fe1('0x41')],{})[_0x6fe1('0x24')](respondWithResult(_0x366ee0,0xc9))[_0x6fe1('0x3f')](handleError(_0x366ee0,null));};exports[_0x6fe1('0x22')]=function(_0x1570be,_0x475ce7){if(_0x1570be[_0x6fe1('0x41')]['id']){delete _0x1570be[_0x6fe1('0x41')]['id'];}return db['OpenchannelApplication']['find']({'where':{'id':_0x1570be[_0x6fe1('0x3e')]['id']}})[_0x6fe1('0x24')](handleEntityNotFound(_0x475ce7,null))['then'](saveUpdates(_0x1570be[_0x6fe1('0x41')],null))[_0x6fe1('0x24')](respondWithResult(_0x475ce7,null))[_0x6fe1('0x3f')](handleError(_0x475ce7,null));};exports[_0x6fe1('0x23')]=function(_0x34054d,_0x4c872c){return db['OpenchannelApplication'][_0x6fe1('0x42')]({'where':{'id':_0x34054d['params']['id']}})[_0x6fe1('0x24')](handleEntityNotFound(_0x4c872c,null))['then'](removeEntity(_0x4c872c,null))[_0x6fe1('0x3f')](handleError(_0x4c872c,null));};
\ No newline at end of file