Built motion from commit (unavailable).|2.5.14
[motion2.git] / server / api / intSugarcrmField / intSugarcrmField.controller.js
index 0770d7c..1c8f0de 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x4887=['reject','save','update','then','error','name','index','map','rawAttributes','fieldName','type','key','query','intersection','model','attributes','fields','length','hasOwnProperty','nolimit','limit','order','sort','pick','filters','filter','merge','SugarcrmField','includeAll','include','findAll','params','keys','options','find','body','catch','html-pdf','eml-format','fast-json-patch','moment','bluebird','mustache','util','sox','to-csv','ejs','crypto','desk.js','querystring','ioredis','../../components/auth/service','../../components/parsers/qs','../../components/parsers/advancedSearch','../../config/license/hardware','../../config/logger','../../config/utils','../../mysqldb','sendStatus','status','end','json','count','offset','set','Content-Range','apply'];(function(_0x3ac827,_0x2f013a){var _0x46b499=function(_0x12f1b2){while(--_0x12f1b2){_0x3ac827['push'](_0x3ac827['shift']());}};_0x46b499(++_0x2f013a);}(_0x4887,0x131));var _0x7488=function(_0x2cda25,_0x81ae5f){_0x2cda25=_0x2cda25-0x0;var _0x291282=_0x4887[_0x2cda25];return _0x291282;};'use strict';var pdf=require(_0x7488('0x0'));var emlformat=require(_0x7488('0x1'));var rimraf=require('rimraf');var zipdir=require('zip-dir');var jsonpatch=require(_0x7488('0x2'));var rp=require('request-promise');var moment=require(_0x7488('0x3'));var BPromise=require(_0x7488('0x4'));var Mustache=require(_0x7488('0x5'));var util=require(_0x7488('0x6'));var path=require('path');var sox=require(_0x7488('0x7'));var csv=require(_0x7488('0x8'));var ejs=require(_0x7488('0x9'));var fs=require('fs');var _=require('lodash');var squel=require('squel');var crypto=require(_0x7488('0xa'));var jsforce=require('jsforce');var deskjs=require(_0x7488('0xb'));var toCsv=require(_0x7488('0x8'));var querystring=require(_0x7488('0xc'));var Papa=require('papaparse');var Redis=require(_0x7488('0xd'));var authService=require(_0x7488('0xe'));var qs=require(_0x7488('0xf'));var as=require(_0x7488('0x10'));var hardwareService=require(_0x7488('0x11'));var logger=require(_0x7488('0x12'))('api');var utils=require(_0x7488('0x13'));var config=require('../../config/environment');var db=require(_0x7488('0x14'))['db'];function respondWithStatusCode(_0x274384,_0x2c5950){_0x2c5950=_0x2c5950||0xcc;return function(_0x37dd8c){if(_0x37dd8c){return _0x274384[_0x7488('0x15')](_0x2c5950);}return _0x274384[_0x7488('0x16')](_0x2c5950)[_0x7488('0x17')]();};}function respondWithResult(_0x365f8f,_0x4771ec){_0x4771ec=_0x4771ec||0xc8;return function(_0xf03c2c){if(_0xf03c2c){return _0x365f8f['status'](_0x4771ec)[_0x7488('0x18')](_0xf03c2c);}};}function respondWithFilteredResult(_0x3483db,_0x447e87){return function(_0x476280){if(_0x476280){var _0x4d8f1a=_0x476280[_0x7488('0x19')],_0x219373=_0x447e87[_0x7488('0x1a')],_0x21f963=_0x447e87['offset']+_0x447e87['limit'],_0x348ccd;if(_0x21f963>=_0x4d8f1a){_0x21f963=_0x4d8f1a;_0x348ccd=0xc8;}else{_0x348ccd=0xce;}_0x3483db[_0x7488('0x16')](_0x348ccd);return _0x3483db[_0x7488('0x1b')](_0x7488('0x1c'),_0x219373+'-'+_0x21f963+'/'+_0x4d8f1a)[_0x7488('0x18')](_0x476280);}return null;};}function patchUpdates(_0x490a95){return function(_0x20a12f){try{jsonpatch[_0x7488('0x1d')](_0x20a12f,_0x490a95,!![]);}catch(_0x1850d3){return BPromise[_0x7488('0x1e')](_0x1850d3);}return _0x20a12f[_0x7488('0x1f')]();};}function saveUpdates(_0x26638d,_0x3c3b08){return function(_0xb1f838){if(_0xb1f838){return _0xb1f838[_0x7488('0x20')](_0x26638d)[_0x7488('0x21')](function(_0x4396e5){return _0x4396e5;});}return null;};}function removeEntity(_0x5ef3b1,_0xf3aeb4){return function(_0x2f73e9){if(_0x2f73e9){return _0x2f73e9['destroy']()[_0x7488('0x21')](function(){_0x5ef3b1[_0x7488('0x16')](0xcc)[_0x7488('0x17')]();});}};}function handleEntityNotFound(_0x3c7f5f,_0x1b001e){return function(_0x21ea57){if(!_0x21ea57){_0x3c7f5f[_0x7488('0x15')](0x194);}return _0x21ea57;};}function handleError(_0x43160e,_0x32193){_0x32193=_0x32193||0x1f4;return function(_0xc30d24){logger[_0x7488('0x22')](_0xc30d24['stack']);if(_0xc30d24[_0x7488('0x23')]){delete _0xc30d24['name'];}_0x43160e[_0x7488('0x16')](_0x32193)['send'](_0xc30d24);};}exports[_0x7488('0x24')]=function(_0x485532,_0x41cf9e){var _0x5511c5={},_0x52e052={},_0x2b9a24={'count':0x0,'rows':[]};var _0x2f9caa=_[_0x7488('0x25')](db['SugarcrmField'][_0x7488('0x26')],function(_0x41bb61){return{'name':_0x41bb61[_0x7488('0x27')],'type':_0x41bb61[_0x7488('0x28')][_0x7488('0x29')]};});_0x52e052['model']=_['map'](_0x2f9caa,'name');_0x52e052[_0x7488('0x2a')]=_['keys'](_0x485532[_0x7488('0x2a')]);_0x52e052['filters']=_[_0x7488('0x2b')](_0x52e052[_0x7488('0x2c')],_0x52e052[_0x7488('0x2a')]);_0x5511c5[_0x7488('0x2d')]=_['intersection'](_0x52e052[_0x7488('0x2c')],qs[_0x7488('0x2e')](_0x485532[_0x7488('0x2a')][_0x7488('0x2e')]));_0x5511c5[_0x7488('0x2d')]=_0x5511c5[_0x7488('0x2d')][_0x7488('0x2f')]?_0x5511c5[_0x7488('0x2d')]:_0x52e052['model'];if(!_0x485532['query'][_0x7488('0x30')](_0x7488('0x31'))){_0x5511c5[_0x7488('0x32')]=qs[_0x7488('0x32')](_0x485532[_0x7488('0x2a')][_0x7488('0x32')]);_0x5511c5[_0x7488('0x1a')]=qs[_0x7488('0x1a')](_0x485532[_0x7488('0x2a')][_0x7488('0x1a')]);}_0x5511c5[_0x7488('0x33')]=qs[_0x7488('0x34')](_0x485532[_0x7488('0x2a')]['sort']);_0x5511c5['where']=qs['filters'](_[_0x7488('0x35')](_0x485532[_0x7488('0x2a')],_0x52e052[_0x7488('0x36')]),_0x2f9caa);if(_0x485532[_0x7488('0x2a')][_0x7488('0x37')]){_0x5511c5['where']=_[_0x7488('0x38')](_0x5511c5['where'],{'$or':_[_0x7488('0x25')](_0x2f9caa,function(_0x1d69e7){if(_0x1d69e7[_0x7488('0x28')]!=='VIRTUAL'){var _0x4f1490={};_0x4f1490[_0x1d69e7[_0x7488('0x23')]]={'$like':'%'+_0x485532[_0x7488('0x2a')][_0x7488('0x37')]+'%'};return _0x4f1490;}})});}_0x5511c5=_[_0x7488('0x38')]({},_0x5511c5,_0x485532['options']);var _0x361baf={'where':_0x5511c5['where']};return db[_0x7488('0x39')][_0x7488('0x19')](_0x361baf)[_0x7488('0x21')](function(_0x1bc2a2){_0x2b9a24[_0x7488('0x19')]=_0x1bc2a2;if(_0x485532[_0x7488('0x2a')][_0x7488('0x3a')]){_0x5511c5[_0x7488('0x3b')]=[{'all':!![]}];}return db[_0x7488('0x39')][_0x7488('0x3c')](_0x5511c5);})[_0x7488('0x21')](function(_0x3dbc0d){_0x2b9a24['rows']=_0x3dbc0d;return _0x2b9a24;})[_0x7488('0x21')](respondWithFilteredResult(_0x41cf9e,_0x5511c5))['catch'](handleError(_0x41cf9e,null));};exports['show']=function(_0x2618ea,_0xd5293d){var _0x5b34f1={'raw':!![],'where':{'id':_0x2618ea[_0x7488('0x3d')]['id']}},_0x373acc={};_0x373acc['model']=_[_0x7488('0x3e')](db['SugarcrmField']['rawAttributes']);_0x373acc[_0x7488('0x2a')]=_['keys'](_0x2618ea[_0x7488('0x2a')]);_0x373acc['filters']=_[_0x7488('0x2b')](_0x373acc['model'],_0x373acc[_0x7488('0x2a')]);_0x5b34f1[_0x7488('0x2d')]=_[_0x7488('0x2b')](_0x373acc[_0x7488('0x2c')],qs[_0x7488('0x2e')](_0x2618ea[_0x7488('0x2a')]['fields']));_0x5b34f1[_0x7488('0x2d')]=_0x5b34f1[_0x7488('0x2d')]['length']?_0x5b34f1[_0x7488('0x2d')]:_0x373acc[_0x7488('0x2c')];if(_0x2618ea[_0x7488('0x2a')]['includeAll']){_0x5b34f1[_0x7488('0x3b')]=[{'all':!![]}];}_0x5b34f1=_['merge']({},_0x5b34f1,_0x2618ea[_0x7488('0x3f')]);return db[_0x7488('0x39')][_0x7488('0x40')](_0x5b34f1)[_0x7488('0x21')](handleEntityNotFound(_0xd5293d,null))[_0x7488('0x21')](respondWithResult(_0xd5293d,null))['catch'](handleError(_0xd5293d,null));};exports['create']=function(_0x15f07f,_0x22ec42){return db['SugarcrmField']['create'](_0x15f07f[_0x7488('0x41')],{})[_0x7488('0x21')](respondWithResult(_0x22ec42,0xc9))[_0x7488('0x42')](handleError(_0x22ec42,null));};exports[_0x7488('0x20')]=function(_0x37ea86,_0x18e0a2){if(_0x37ea86[_0x7488('0x41')]['id']){delete _0x37ea86[_0x7488('0x41')]['id'];}return db[_0x7488('0x39')]['find']({'where':{'id':_0x37ea86[_0x7488('0x3d')]['id']}})[_0x7488('0x21')](handleEntityNotFound(_0x18e0a2,null))[_0x7488('0x21')](saveUpdates(_0x37ea86[_0x7488('0x41')],null))[_0x7488('0x21')](respondWithResult(_0x18e0a2,null))['catch'](handleError(_0x18e0a2,null));};exports['destroy']=function(_0x469fb6,_0x56611b){return db[_0x7488('0x39')][_0x7488('0x40')]({'where':{'id':_0x469fb6[_0x7488('0x3d')]['id']}})[_0x7488('0x21')](handleEntityNotFound(_0x56611b,null))[_0x7488('0x21')](removeEntity(_0x56611b,null))['catch'](handleError(_0x56611b,null));};
\ No newline at end of file
+var _0xcd59=['where','pick','filter','options','includeAll','include','findAll','rows','catch','show','params','merge','find','create','body','html-pdf','eml-format','rimraf','zip-dir','fast-json-patch','request-promise','bluebird','mustache','util','path','sox','to-csv','ejs','lodash','squel','crypto','desk.js','querystring','papaparse','ioredis','../../components/auth/service','../../components/parsers/qs','../../components/parsers/advancedSearch','../../config/logger','api','../../config/utils','../../config/environment','sendStatus','status','end','count','offset','limit','set','Content-Range','json','apply','reject','save','update','then','destroy','error','stack','name','send','index','map','SugarcrmField','fieldName','type','key','model','query','keys','filters','intersection','fields','attributes','length','hasOwnProperty','nolimit','order','sort'];(function(_0x3f2a90,_0x50baf1){var _0xb46279=function(_0x5e47b5){while(--_0x5e47b5){_0x3f2a90['push'](_0x3f2a90['shift']());}};_0xb46279(++_0x50baf1);}(_0xcd59,0x14b));var _0x9cd5=function(_0x44faf5,_0x1f0f92){_0x44faf5=_0x44faf5-0x0;var _0x4c0a90=_0xcd59[_0x44faf5];return _0x4c0a90;};'use strict';var pdf=require(_0x9cd5('0x0'));var emlformat=require(_0x9cd5('0x1'));var rimraf=require(_0x9cd5('0x2'));var zipdir=require(_0x9cd5('0x3'));var jsonpatch=require(_0x9cd5('0x4'));var rp=require(_0x9cd5('0x5'));var moment=require('moment');var BPromise=require(_0x9cd5('0x6'));var Mustache=require(_0x9cd5('0x7'));var util=require(_0x9cd5('0x8'));var path=require(_0x9cd5('0x9'));var sox=require(_0x9cd5('0xa'));var csv=require(_0x9cd5('0xb'));var ejs=require(_0x9cd5('0xc'));var fs=require('fs');var _=require(_0x9cd5('0xd'));var squel=require(_0x9cd5('0xe'));var crypto=require(_0x9cd5('0xf'));var jsforce=require('jsforce');var deskjs=require(_0x9cd5('0x10'));var toCsv=require(_0x9cd5('0xb'));var querystring=require(_0x9cd5('0x11'));var Papa=require(_0x9cd5('0x12'));var Redis=require(_0x9cd5('0x13'));var authService=require(_0x9cd5('0x14'));var qs=require(_0x9cd5('0x15'));var as=require(_0x9cd5('0x16'));var hardwareService=require('../../config/license/hardware');var logger=require(_0x9cd5('0x17'))(_0x9cd5('0x18'));var utils=require(_0x9cd5('0x19'));var config=require(_0x9cd5('0x1a'));var licenseUtil=require('../../config/license/util');var db=require('../../mysqldb')['db'];function respondWithStatusCode(_0x2c9cf1,_0x172e29){_0x172e29=_0x172e29||0xcc;return function(_0x44518d){if(_0x44518d){return _0x2c9cf1[_0x9cd5('0x1b')](_0x172e29);}return _0x2c9cf1[_0x9cd5('0x1c')](_0x172e29)[_0x9cd5('0x1d')]();};}function respondWithResult(_0x52698b,_0x15b639){_0x15b639=_0x15b639||0xc8;return function(_0x1445c0){if(_0x1445c0){return _0x52698b[_0x9cd5('0x1c')](_0x15b639)['json'](_0x1445c0);}};}function respondWithFilteredResult(_0x541cb8,_0x5c4f3d){return function(_0x258305){if(_0x258305){var _0x1ea3f7=_0x258305[_0x9cd5('0x1e')],_0x565db7=_0x5c4f3d['offset'],_0x24c233=_0x5c4f3d[_0x9cd5('0x1f')]+_0x5c4f3d[_0x9cd5('0x20')],_0x11a7d2;if(_0x24c233>=_0x1ea3f7){_0x24c233=_0x1ea3f7;_0x11a7d2=0xc8;}else{_0x11a7d2=0xce;}_0x541cb8[_0x9cd5('0x1c')](_0x11a7d2);return _0x541cb8[_0x9cd5('0x21')](_0x9cd5('0x22'),_0x565db7+'-'+_0x24c233+'/'+_0x1ea3f7)[_0x9cd5('0x23')](_0x258305);}return null;};}function patchUpdates(_0x5c1622){return function(_0x37ea13){try{jsonpatch[_0x9cd5('0x24')](_0x37ea13,_0x5c1622,!![]);}catch(_0x3661b0){return BPromise[_0x9cd5('0x25')](_0x3661b0);}return _0x37ea13[_0x9cd5('0x26')]();};}function saveUpdates(_0x4ed8b9,_0x16c4e9){return function(_0x271444){if(_0x271444){return _0x271444[_0x9cd5('0x27')](_0x4ed8b9)[_0x9cd5('0x28')](function(_0x2ce1ae){return _0x2ce1ae;});}return null;};}function removeEntity(_0x1185d7,_0x1cf603){return function(_0x2238ec){if(_0x2238ec){return _0x2238ec[_0x9cd5('0x29')]()['then'](function(){_0x1185d7[_0x9cd5('0x1c')](0xcc)[_0x9cd5('0x1d')]();});}};}function handleEntityNotFound(_0x1a88e3,_0x43f47d){return function(_0x56c05d){if(!_0x56c05d){_0x1a88e3[_0x9cd5('0x1b')](0x194);}return _0x56c05d;};}function handleError(_0x990c25,_0x211576){_0x211576=_0x211576||0x1f4;return function(_0xe36f86){logger[_0x9cd5('0x2a')](_0xe36f86[_0x9cd5('0x2b')]);if(_0xe36f86[_0x9cd5('0x2c')]){delete _0xe36f86['name'];}_0x990c25[_0x9cd5('0x1c')](_0x211576)[_0x9cd5('0x2d')](_0xe36f86);};}exports[_0x9cd5('0x2e')]=function(_0x4af6c8,_0x5c33e9){var _0x2e45a3={},_0x502257={},_0x52ef5d={'count':0x0,'rows':[]};var _0x1ab8d6=_[_0x9cd5('0x2f')](db[_0x9cd5('0x30')]['rawAttributes'],function(_0x40461a){return{'name':_0x40461a[_0x9cd5('0x31')],'type':_0x40461a[_0x9cd5('0x32')][_0x9cd5('0x33')]};});_0x502257[_0x9cd5('0x34')]=_[_0x9cd5('0x2f')](_0x1ab8d6,_0x9cd5('0x2c'));_0x502257[_0x9cd5('0x35')]=_[_0x9cd5('0x36')](_0x4af6c8[_0x9cd5('0x35')]);_0x502257[_0x9cd5('0x37')]=_[_0x9cd5('0x38')](_0x502257[_0x9cd5('0x34')],_0x502257[_0x9cd5('0x35')]);_0x2e45a3['attributes']=_[_0x9cd5('0x38')](_0x502257[_0x9cd5('0x34')],qs['fields'](_0x4af6c8['query'][_0x9cd5('0x39')]));_0x2e45a3[_0x9cd5('0x3a')]=_0x2e45a3['attributes'][_0x9cd5('0x3b')]?_0x2e45a3['attributes']:_0x502257['model'];if(!_0x4af6c8[_0x9cd5('0x35')][_0x9cd5('0x3c')](_0x9cd5('0x3d'))){_0x2e45a3[_0x9cd5('0x20')]=qs['limit'](_0x4af6c8[_0x9cd5('0x35')][_0x9cd5('0x20')]);_0x2e45a3[_0x9cd5('0x1f')]=qs['offset'](_0x4af6c8[_0x9cd5('0x35')][_0x9cd5('0x1f')]);}_0x2e45a3[_0x9cd5('0x3e')]=qs[_0x9cd5('0x3f')](_0x4af6c8[_0x9cd5('0x35')][_0x9cd5('0x3f')]);_0x2e45a3[_0x9cd5('0x40')]=qs[_0x9cd5('0x37')](_[_0x9cd5('0x41')](_0x4af6c8[_0x9cd5('0x35')],_0x502257[_0x9cd5('0x37')]),_0x1ab8d6);if(_0x4af6c8['query'][_0x9cd5('0x42')]){_0x2e45a3['where']=_['merge'](_0x2e45a3[_0x9cd5('0x40')],{'$or':_[_0x9cd5('0x2f')](_0x1ab8d6,function(_0x46b974){if(_0x46b974[_0x9cd5('0x32')]!=='VIRTUAL'){var _0x3972ec={};_0x3972ec[_0x46b974[_0x9cd5('0x2c')]]={'$like':'%'+_0x4af6c8[_0x9cd5('0x35')][_0x9cd5('0x42')]+'%'};return _0x3972ec;}})});}_0x2e45a3=_['merge']({},_0x2e45a3,_0x4af6c8[_0x9cd5('0x43')]);var _0x3f50de={'where':_0x2e45a3[_0x9cd5('0x40')]};return db[_0x9cd5('0x30')][_0x9cd5('0x1e')](_0x3f50de)[_0x9cd5('0x28')](function(_0x4a446c){_0x52ef5d[_0x9cd5('0x1e')]=_0x4a446c;if(_0x4af6c8[_0x9cd5('0x35')][_0x9cd5('0x44')]){_0x2e45a3[_0x9cd5('0x45')]=[{'all':!![]}];}return db[_0x9cd5('0x30')][_0x9cd5('0x46')](_0x2e45a3);})[_0x9cd5('0x28')](function(_0x1ee8a4){_0x52ef5d[_0x9cd5('0x47')]=_0x1ee8a4;return _0x52ef5d;})[_0x9cd5('0x28')](respondWithFilteredResult(_0x5c33e9,_0x2e45a3))[_0x9cd5('0x48')](handleError(_0x5c33e9,null));};exports[_0x9cd5('0x49')]=function(_0x7ad8ec,_0xa12319){var _0x3b316b={'raw':!![],'where':{'id':_0x7ad8ec[_0x9cd5('0x4a')]['id']}},_0x1c84a4={};_0x1c84a4[_0x9cd5('0x34')]=_['keys'](db[_0x9cd5('0x30')]['rawAttributes']);_0x1c84a4[_0x9cd5('0x35')]=_[_0x9cd5('0x36')](_0x7ad8ec[_0x9cd5('0x35')]);_0x1c84a4[_0x9cd5('0x37')]=_[_0x9cd5('0x38')](_0x1c84a4['model'],_0x1c84a4[_0x9cd5('0x35')]);_0x3b316b[_0x9cd5('0x3a')]=_[_0x9cd5('0x38')](_0x1c84a4['model'],qs[_0x9cd5('0x39')](_0x7ad8ec[_0x9cd5('0x35')][_0x9cd5('0x39')]));_0x3b316b[_0x9cd5('0x3a')]=_0x3b316b['attributes'][_0x9cd5('0x3b')]?_0x3b316b[_0x9cd5('0x3a')]:_0x1c84a4[_0x9cd5('0x34')];if(_0x7ad8ec[_0x9cd5('0x35')][_0x9cd5('0x44')]){_0x3b316b[_0x9cd5('0x45')]=[{'all':!![]}];}_0x3b316b=_[_0x9cd5('0x4b')]({},_0x3b316b,_0x7ad8ec[_0x9cd5('0x43')]);return db[_0x9cd5('0x30')][_0x9cd5('0x4c')](_0x3b316b)[_0x9cd5('0x28')](handleEntityNotFound(_0xa12319,null))[_0x9cd5('0x28')](respondWithResult(_0xa12319,null))[_0x9cd5('0x48')](handleError(_0xa12319,null));};exports[_0x9cd5('0x4d')]=function(_0x245f9e,_0xc1631b){return db[_0x9cd5('0x30')][_0x9cd5('0x4d')](_0x245f9e['body'],{})[_0x9cd5('0x28')](respondWithResult(_0xc1631b,0xc9))[_0x9cd5('0x48')](handleError(_0xc1631b,null));};exports[_0x9cd5('0x27')]=function(_0x2058a6,_0x5ae3a4){if(_0x2058a6[_0x9cd5('0x4e')]['id']){delete _0x2058a6[_0x9cd5('0x4e')]['id'];}return db['SugarcrmField'][_0x9cd5('0x4c')]({'where':{'id':_0x2058a6[_0x9cd5('0x4a')]['id']}})[_0x9cd5('0x28')](handleEntityNotFound(_0x5ae3a4,null))[_0x9cd5('0x28')](saveUpdates(_0x2058a6[_0x9cd5('0x4e')],null))[_0x9cd5('0x28')](respondWithResult(_0x5ae3a4,null))[_0x9cd5('0x48')](handleError(_0x5ae3a4,null));};exports[_0x9cd5('0x29')]=function(_0x5b6c7d,_0x48be3a){return db[_0x9cd5('0x30')][_0x9cd5('0x4c')]({'where':{'id':_0x5b6c7d[_0x9cd5('0x4a')]['id']}})[_0x9cd5('0x28')](handleEntityNotFound(_0x48be3a,null))['then'](removeEntity(_0x48be3a,null))[_0x9cd5('0x48')](handleError(_0x48be3a,null));};
\ No newline at end of file