Built motion from commit (unavailable).|2.5.20
[motion2.git] / server / api / intVtigerField / intVtigerField.controller.js
index a90612a..17a3300 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x67ab=['pick','merge','VIRTUAL','options','count','includeAll','findAll','rows','catch','show','rawAttributes','include','find','create','body','params','html-pdf','eml-format','rimraf','zip-dir','fast-json-patch','request-promise','bluebird','mustache','util','path','to-csv','ejs','lodash','jsforce','desk.js','querystring','papaparse','../../components/auth/service','../../components/parsers/qs','../../components/parsers/advancedSearch','../../config/license/hardware','../../config/logger','api','../../config/environment','status','end','offset','limit','set','Content-Range','json','apply','reject','update','then','destroy','sendStatus','error','stack','name','send','index','map','VtigerField','fieldName','type','key','query','keys','filters','intersection','model','attributes','fields','length','hasOwnProperty','nolimit','order','sort','where'];(function(_0x243b59,_0x3f9495){var _0x3e1676=function(_0x354052){while(--_0x354052){_0x243b59['push'](_0x243b59['shift']());}};_0x3e1676(++_0x3f9495);}(_0x67ab,0x1d8));var _0xb67a=function(_0x167cc1,_0x56ef5a){_0x167cc1=_0x167cc1-0x0;var _0x10bc4b=_0x67ab[_0x167cc1];return _0x10bc4b;};'use strict';var pdf=require(_0xb67a('0x0'));var emlformat=require(_0xb67a('0x1'));var rimraf=require(_0xb67a('0x2'));var zipdir=require(_0xb67a('0x3'));var jsonpatch=require(_0xb67a('0x4'));var rp=require(_0xb67a('0x5'));var moment=require('moment');var BPromise=require(_0xb67a('0x6'));var Mustache=require(_0xb67a('0x7'));var util=require(_0xb67a('0x8'));var path=require(_0xb67a('0x9'));var sox=require('sox');var csv=require(_0xb67a('0xa'));var ejs=require(_0xb67a('0xb'));var fs=require('fs');var _=require(_0xb67a('0xc'));var squel=require('squel');var crypto=require('crypto');var jsforce=require(_0xb67a('0xd'));var deskjs=require(_0xb67a('0xe'));var toCsv=require(_0xb67a('0xa'));var querystring=require(_0xb67a('0xf'));var Papa=require(_0xb67a('0x10'));var Redis=require('ioredis');var authService=require(_0xb67a('0x11'));var qs=require(_0xb67a('0x12'));var as=require(_0xb67a('0x13'));var hardwareService=require(_0xb67a('0x14'));var logger=require(_0xb67a('0x15'))(_0xb67a('0x16'));var utils=require('../../config/utils');var config=require(_0xb67a('0x17'));var db=require('../../mysqldb')['db'];function respondWithStatusCode(_0x10ddbf,_0x11148a){_0x11148a=_0x11148a||0xcc;return function(_0x52b4f9){if(_0x52b4f9){return _0x10ddbf['sendStatus'](_0x11148a);}return _0x10ddbf[_0xb67a('0x18')](_0x11148a)[_0xb67a('0x19')]();};}function respondWithResult(_0x7fa153,_0x38d13d){_0x38d13d=_0x38d13d||0xc8;return function(_0x37b096){if(_0x37b096){return _0x7fa153[_0xb67a('0x18')](_0x38d13d)['json'](_0x37b096);}};}function respondWithFilteredResult(_0x18c915,_0x327da6){return function(_0x3292ca){if(_0x3292ca){var _0xfcd945=_0x3292ca['count'],_0x519ac2=_0x327da6[_0xb67a('0x1a')],_0x195db1=_0x327da6[_0xb67a('0x1a')]+_0x327da6[_0xb67a('0x1b')],_0x540283;if(_0x195db1>=_0xfcd945){_0x195db1=_0xfcd945;_0x540283=0xc8;}else{_0x540283=0xce;}_0x18c915[_0xb67a('0x18')](_0x540283);return _0x18c915[_0xb67a('0x1c')](_0xb67a('0x1d'),_0x519ac2+'-'+_0x195db1+'/'+_0xfcd945)[_0xb67a('0x1e')](_0x3292ca);}return null;};}function patchUpdates(_0x57b0fc){return function(_0x3f92ff){try{jsonpatch[_0xb67a('0x1f')](_0x3f92ff,_0x57b0fc,!![]);}catch(_0x498106){return BPromise[_0xb67a('0x20')](_0x498106);}return _0x3f92ff['save']();};}function saveUpdates(_0x2871b8,_0x586a88){return function(_0x64a887){if(_0x64a887){return _0x64a887[_0xb67a('0x21')](_0x2871b8)[_0xb67a('0x22')](function(_0x57606b){return _0x57606b;});}return null;};}function removeEntity(_0x137996,_0x4e3e13){return function(_0x3ac9b2){if(_0x3ac9b2){return _0x3ac9b2[_0xb67a('0x23')]()[_0xb67a('0x22')](function(){_0x137996[_0xb67a('0x18')](0xcc)[_0xb67a('0x19')]();});}};}function handleEntityNotFound(_0x352931,_0x1019a1){return function(_0x19dfa6){if(!_0x19dfa6){_0x352931[_0xb67a('0x24')](0x194);}return _0x19dfa6;};}function handleError(_0x28f703,_0x42583e){_0x42583e=_0x42583e||0x1f4;return function(_0x23af0e){logger[_0xb67a('0x25')](_0x23af0e[_0xb67a('0x26')]);if(_0x23af0e['name']){delete _0x23af0e[_0xb67a('0x27')];}_0x28f703[_0xb67a('0x18')](_0x42583e)[_0xb67a('0x28')](_0x23af0e);};}exports[_0xb67a('0x29')]=function(_0x7a1070,_0x3b4936){var _0x43619e={},_0x2f17a9={},_0x2d3bf6={'count':0x0,'rows':[]};var _0x321388=_[_0xb67a('0x2a')](db[_0xb67a('0x2b')]['rawAttributes'],function(_0x4b539b){return{'name':_0x4b539b[_0xb67a('0x2c')],'type':_0x4b539b[_0xb67a('0x2d')][_0xb67a('0x2e')]};});_0x2f17a9['model']=_[_0xb67a('0x2a')](_0x321388,_0xb67a('0x27'));_0x2f17a9[_0xb67a('0x2f')]=_[_0xb67a('0x30')](_0x7a1070[_0xb67a('0x2f')]);_0x2f17a9[_0xb67a('0x31')]=_[_0xb67a('0x32')](_0x2f17a9[_0xb67a('0x33')],_0x2f17a9['query']);_0x43619e[_0xb67a('0x34')]=_['intersection'](_0x2f17a9[_0xb67a('0x33')],qs[_0xb67a('0x35')](_0x7a1070[_0xb67a('0x2f')][_0xb67a('0x35')]));_0x43619e[_0xb67a('0x34')]=_0x43619e[_0xb67a('0x34')][_0xb67a('0x36')]?_0x43619e['attributes']:_0x2f17a9[_0xb67a('0x33')];if(!_0x7a1070['query'][_0xb67a('0x37')](_0xb67a('0x38'))){_0x43619e[_0xb67a('0x1b')]=qs['limit'](_0x7a1070[_0xb67a('0x2f')][_0xb67a('0x1b')]);_0x43619e[_0xb67a('0x1a')]=qs['offset'](_0x7a1070[_0xb67a('0x2f')]['offset']);}_0x43619e[_0xb67a('0x39')]=qs['sort'](_0x7a1070[_0xb67a('0x2f')][_0xb67a('0x3a')]);_0x43619e[_0xb67a('0x3b')]=qs['filters'](_[_0xb67a('0x3c')](_0x7a1070['query'],_0x2f17a9[_0xb67a('0x31')]));if(_0x7a1070[_0xb67a('0x2f')]['filter']){_0x43619e[_0xb67a('0x3b')]=_[_0xb67a('0x3d')](_0x43619e[_0xb67a('0x3b')],{'$or':_[_0xb67a('0x2a')](_0x321388,function(_0x42f3ef){if(_0x42f3ef[_0xb67a('0x2d')]!==_0xb67a('0x3e')){var _0x695fd2={};_0x695fd2[_0x42f3ef['name']]={'$like':'%'+_0x7a1070[_0xb67a('0x2f')]['filter']+'%'};return _0x695fd2;}})});}_0x43619e=_[_0xb67a('0x3d')]({},_0x43619e,_0x7a1070[_0xb67a('0x3f')]);var _0xe4e2bf={'where':_0x43619e['where']};return db[_0xb67a('0x2b')][_0xb67a('0x40')](_0xe4e2bf)[_0xb67a('0x22')](function(_0xffcdf9){_0x2d3bf6[_0xb67a('0x40')]=_0xffcdf9;if(_0x7a1070[_0xb67a('0x2f')][_0xb67a('0x41')]){_0x43619e['include']=[{'all':!![]}];}return db['VtigerField'][_0xb67a('0x42')](_0x43619e);})['then'](function(_0x227d92){_0x2d3bf6[_0xb67a('0x43')]=_0x227d92;return _0x2d3bf6;})[_0xb67a('0x22')](respondWithFilteredResult(_0x3b4936,_0x43619e))[_0xb67a('0x44')](handleError(_0x3b4936,null));};exports[_0xb67a('0x45')]=function(_0x1a7975,_0x22b311){var _0x2a2e70={'raw':!![],'where':{'id':_0x1a7975['params']['id']}},_0x402bca={};_0x402bca[_0xb67a('0x33')]=_[_0xb67a('0x30')](db['VtigerField'][_0xb67a('0x46')]);_0x402bca[_0xb67a('0x2f')]=_['keys'](_0x1a7975[_0xb67a('0x2f')]);_0x402bca[_0xb67a('0x31')]=_[_0xb67a('0x32')](_0x402bca[_0xb67a('0x33')],_0x402bca['query']);_0x2a2e70[_0xb67a('0x34')]=_[_0xb67a('0x32')](_0x402bca[_0xb67a('0x33')],qs['fields'](_0x1a7975[_0xb67a('0x2f')][_0xb67a('0x35')]));_0x2a2e70[_0xb67a('0x34')]=_0x2a2e70[_0xb67a('0x34')][_0xb67a('0x36')]?_0x2a2e70[_0xb67a('0x34')]:_0x402bca['model'];if(_0x1a7975['query'][_0xb67a('0x41')]){_0x2a2e70[_0xb67a('0x47')]=[{'all':!![]}];}_0x2a2e70=_[_0xb67a('0x3d')]({},_0x2a2e70,_0x1a7975[_0xb67a('0x3f')]);return db[_0xb67a('0x2b')][_0xb67a('0x48')](_0x2a2e70)['then'](handleEntityNotFound(_0x22b311,null))[_0xb67a('0x22')](respondWithResult(_0x22b311,null))[_0xb67a('0x44')](handleError(_0x22b311,null));};exports[_0xb67a('0x49')]=function(_0xb5390e,_0x369ad3){return db[_0xb67a('0x2b')][_0xb67a('0x49')](_0xb5390e[_0xb67a('0x4a')],{})[_0xb67a('0x22')](respondWithResult(_0x369ad3,0xc9))['catch'](handleError(_0x369ad3,null));};exports['update']=function(_0xb32ddd,_0x43354c){if(_0xb32ddd[_0xb67a('0x4a')]['id']){delete _0xb32ddd['body']['id'];}return db[_0xb67a('0x2b')]['find']({'where':{'id':_0xb32ddd[_0xb67a('0x4b')]['id']}})[_0xb67a('0x22')](handleEntityNotFound(_0x43354c,null))['then'](saveUpdates(_0xb32ddd['body'],null))[_0xb67a('0x22')](respondWithResult(_0x43354c,null))[_0xb67a('0x44')](handleError(_0x43354c,null));};exports[_0xb67a('0x23')]=function(_0x2c1ed8,_0x508c60){return db[_0xb67a('0x2b')]['find']({'where':{'id':_0x2c1ed8[_0xb67a('0x4b')]['id']}})[_0xb67a('0x22')](handleEntityNotFound(_0x508c60,null))[_0xb67a('0x22')](removeEntity(_0x508c60,null))['catch'](handleError(_0x508c60,null));};
\ No newline at end of file
+var _0xc6ac=['../../config/logger','../../config/utils','../../config/environment','../../config/license/util','sendStatus','status','json','count','offset','limit','set','Content-Range','reject','save','update','then','end','stack','name','send','index','map','VtigerField','rawAttributes','fieldName','model','query','keys','intersection','attributes','fields','length','hasOwnProperty','order','sort','where','filters','filter','merge','type','VIRTUAL','options','includeAll','include','show','create','body','find','catch','destroy','params','html-pdf','eml-format','rimraf','zip-dir','fast-json-patch','request-promise','moment','bluebird','mustache','util','path','sox','to-csv','ejs','squel','crypto','jsforce','querystring','papaparse','ioredis','../../components/auth/service','../../components/parsers/advancedSearch','../../config/license/hardware'];(function(_0x227bcd,_0x549472){var _0x585327=function(_0x5d7578){while(--_0x5d7578){_0x227bcd['push'](_0x227bcd['shift']());}};_0x585327(++_0x549472);}(_0xc6ac,0x15b));var _0xcc6a=function(_0x1312a9,_0x5d3c70){_0x1312a9=_0x1312a9-0x0;var _0x5a0548=_0xc6ac[_0x1312a9];return _0x5a0548;};'use strict';var pdf=require(_0xcc6a('0x0'));var emlformat=require(_0xcc6a('0x1'));var rimraf=require(_0xcc6a('0x2'));var zipdir=require(_0xcc6a('0x3'));var jsonpatch=require(_0xcc6a('0x4'));var rp=require(_0xcc6a('0x5'));var moment=require(_0xcc6a('0x6'));var BPromise=require(_0xcc6a('0x7'));var Mustache=require(_0xcc6a('0x8'));var util=require(_0xcc6a('0x9'));var path=require(_0xcc6a('0xa'));var sox=require(_0xcc6a('0xb'));var csv=require(_0xcc6a('0xc'));var ejs=require(_0xcc6a('0xd'));var fs=require('fs');var _=require('lodash');var squel=require(_0xcc6a('0xe'));var crypto=require(_0xcc6a('0xf'));var jsforce=require(_0xcc6a('0x10'));var deskjs=require('desk.js');var toCsv=require(_0xcc6a('0xc'));var querystring=require(_0xcc6a('0x11'));var Papa=require(_0xcc6a('0x12'));var Redis=require(_0xcc6a('0x13'));var authService=require(_0xcc6a('0x14'));var qs=require('../../components/parsers/qs');var as=require(_0xcc6a('0x15'));var hardwareService=require(_0xcc6a('0x16'));var logger=require(_0xcc6a('0x17'))('api');var utils=require(_0xcc6a('0x18'));var config=require(_0xcc6a('0x19'));var licenseUtil=require(_0xcc6a('0x1a'));var db=require('../../mysqldb')['db'];function respondWithStatusCode(_0x59ce6d,_0xf0f6d5){_0xf0f6d5=_0xf0f6d5||0xcc;return function(_0x211444){if(_0x211444){return _0x59ce6d[_0xcc6a('0x1b')](_0xf0f6d5);}return _0x59ce6d['status'](_0xf0f6d5)['end']();};}function respondWithResult(_0x369dc1,_0xcb9e2e){_0xcb9e2e=_0xcb9e2e||0xc8;return function(_0x43710d){if(_0x43710d){return _0x369dc1[_0xcc6a('0x1c')](_0xcb9e2e)[_0xcc6a('0x1d')](_0x43710d);}};}function respondWithFilteredResult(_0x337ec5,_0x4133fa){return function(_0x403b18){if(_0x403b18){var _0x56ffb0=_0x403b18[_0xcc6a('0x1e')],_0x4e628f=_0x4133fa[_0xcc6a('0x1f')],_0x4d021a=_0x4133fa[_0xcc6a('0x1f')]+_0x4133fa[_0xcc6a('0x20')],_0x395a55;if(_0x4d021a>=_0x56ffb0){_0x4d021a=_0x56ffb0;_0x395a55=0xc8;}else{_0x395a55=0xce;}_0x337ec5[_0xcc6a('0x1c')](_0x395a55);return _0x337ec5[_0xcc6a('0x21')](_0xcc6a('0x22'),_0x4e628f+'-'+_0x4d021a+'/'+_0x56ffb0)[_0xcc6a('0x1d')](_0x403b18);}return null;};}function patchUpdates(_0x2a3994){return function(_0x1d20a3){try{jsonpatch['apply'](_0x1d20a3,_0x2a3994,!![]);}catch(_0xfec60f){return BPromise[_0xcc6a('0x23')](_0xfec60f);}return _0x1d20a3[_0xcc6a('0x24')]();};}function saveUpdates(_0x368a6e,_0x1495d8){return function(_0x30b8ed){if(_0x30b8ed){return _0x30b8ed[_0xcc6a('0x25')](_0x368a6e)[_0xcc6a('0x26')](function(_0x2254a8){return _0x2254a8;});}return null;};}function removeEntity(_0x19d32c,_0x329d17){return function(_0x845088){if(_0x845088){return _0x845088['destroy']()[_0xcc6a('0x26')](function(){_0x19d32c[_0xcc6a('0x1c')](0xcc)[_0xcc6a('0x27')]();});}};}function handleEntityNotFound(_0x581aae,_0x10016a){return function(_0x294486){if(!_0x294486){_0x581aae[_0xcc6a('0x1b')](0x194);}return _0x294486;};}function handleError(_0x3ed7ce,_0x432c23){_0x432c23=_0x432c23||0x1f4;return function(_0x5fc697){logger['error'](_0x5fc697[_0xcc6a('0x28')]);if(_0x5fc697[_0xcc6a('0x29')]){delete _0x5fc697[_0xcc6a('0x29')];}_0x3ed7ce['status'](_0x432c23)[_0xcc6a('0x2a')](_0x5fc697);};}exports[_0xcc6a('0x2b')]=function(_0x4da301,_0xb377de){var _0x8b1b2b={},_0x3233d1={},_0x473f88={'count':0x0,'rows':[]};var _0x5d7399=_[_0xcc6a('0x2c')](db[_0xcc6a('0x2d')][_0xcc6a('0x2e')],function(_0x4f176b){return{'name':_0x4f176b[_0xcc6a('0x2f')],'type':_0x4f176b['type']['key']};});_0x3233d1[_0xcc6a('0x30')]=_[_0xcc6a('0x2c')](_0x5d7399,_0xcc6a('0x29'));_0x3233d1[_0xcc6a('0x31')]=_[_0xcc6a('0x32')](_0x4da301[_0xcc6a('0x31')]);_0x3233d1['filters']=_[_0xcc6a('0x33')](_0x3233d1[_0xcc6a('0x30')],_0x3233d1[_0xcc6a('0x31')]);_0x8b1b2b[_0xcc6a('0x34')]=_[_0xcc6a('0x33')](_0x3233d1[_0xcc6a('0x30')],qs[_0xcc6a('0x35')](_0x4da301[_0xcc6a('0x31')]['fields']));_0x8b1b2b[_0xcc6a('0x34')]=_0x8b1b2b[_0xcc6a('0x34')][_0xcc6a('0x36')]?_0x8b1b2b[_0xcc6a('0x34')]:_0x3233d1[_0xcc6a('0x30')];if(!_0x4da301[_0xcc6a('0x31')][_0xcc6a('0x37')]('nolimit')){_0x8b1b2b[_0xcc6a('0x20')]=qs['limit'](_0x4da301['query']['limit']);_0x8b1b2b[_0xcc6a('0x1f')]=qs[_0xcc6a('0x1f')](_0x4da301[_0xcc6a('0x31')][_0xcc6a('0x1f')]);}_0x8b1b2b[_0xcc6a('0x38')]=qs['sort'](_0x4da301['query'][_0xcc6a('0x39')]);_0x8b1b2b[_0xcc6a('0x3a')]=qs[_0xcc6a('0x3b')](_['pick'](_0x4da301[_0xcc6a('0x31')],_0x3233d1[_0xcc6a('0x3b')]),_0x5d7399);if(_0x4da301[_0xcc6a('0x31')][_0xcc6a('0x3c')]){_0x8b1b2b[_0xcc6a('0x3a')]=_[_0xcc6a('0x3d')](_0x8b1b2b[_0xcc6a('0x3a')],{'$or':_[_0xcc6a('0x2c')](_0x5d7399,function(_0x2a1cd2){if(_0x2a1cd2[_0xcc6a('0x3e')]!==_0xcc6a('0x3f')){var _0x2c14ba={};_0x2c14ba[_0x2a1cd2[_0xcc6a('0x29')]]={'$like':'%'+_0x4da301[_0xcc6a('0x31')][_0xcc6a('0x3c')]+'%'};return _0x2c14ba;}})});}_0x8b1b2b=_[_0xcc6a('0x3d')]({},_0x8b1b2b,_0x4da301[_0xcc6a('0x40')]);var _0x386cbc={'where':_0x8b1b2b['where']};return db['VtigerField'][_0xcc6a('0x1e')](_0x386cbc)[_0xcc6a('0x26')](function(_0x16dde7){_0x473f88[_0xcc6a('0x1e')]=_0x16dde7;if(_0x4da301[_0xcc6a('0x31')][_0xcc6a('0x41')]){_0x8b1b2b[_0xcc6a('0x42')]=[{'all':!![]}];}return db[_0xcc6a('0x2d')]['findAll'](_0x8b1b2b);})['then'](function(_0x470e3b){_0x473f88['rows']=_0x470e3b;return _0x473f88;})['then'](respondWithFilteredResult(_0xb377de,_0x8b1b2b))['catch'](handleError(_0xb377de,null));};exports[_0xcc6a('0x43')]=function(_0x3eebca,_0xb42897){var _0x46e273={'raw':!![],'where':{'id':_0x3eebca['params']['id']}},_0xe8056f={};_0xe8056f[_0xcc6a('0x30')]=_[_0xcc6a('0x32')](db[_0xcc6a('0x2d')][_0xcc6a('0x2e')]);_0xe8056f[_0xcc6a('0x31')]=_[_0xcc6a('0x32')](_0x3eebca['query']);_0xe8056f[_0xcc6a('0x3b')]=_[_0xcc6a('0x33')](_0xe8056f[_0xcc6a('0x30')],_0xe8056f[_0xcc6a('0x31')]);_0x46e273['attributes']=_[_0xcc6a('0x33')](_0xe8056f['model'],qs[_0xcc6a('0x35')](_0x3eebca[_0xcc6a('0x31')][_0xcc6a('0x35')]));_0x46e273['attributes']=_0x46e273[_0xcc6a('0x34')][_0xcc6a('0x36')]?_0x46e273[_0xcc6a('0x34')]:_0xe8056f['model'];if(_0x3eebca['query'][_0xcc6a('0x41')]){_0x46e273[_0xcc6a('0x42')]=[{'all':!![]}];}_0x46e273=_[_0xcc6a('0x3d')]({},_0x46e273,_0x3eebca[_0xcc6a('0x40')]);return db[_0xcc6a('0x2d')]['find'](_0x46e273)[_0xcc6a('0x26')](handleEntityNotFound(_0xb42897,null))[_0xcc6a('0x26')](respondWithResult(_0xb42897,null))['catch'](handleError(_0xb42897,null));};exports[_0xcc6a('0x44')]=function(_0xa45d06,_0x42ffcc){return db[_0xcc6a('0x2d')][_0xcc6a('0x44')](_0xa45d06[_0xcc6a('0x45')],{})['then'](respondWithResult(_0x42ffcc,0xc9))['catch'](handleError(_0x42ffcc,null));};exports['update']=function(_0x254e83,_0x267e43){if(_0x254e83[_0xcc6a('0x45')]['id']){delete _0x254e83[_0xcc6a('0x45')]['id'];}return db['VtigerField'][_0xcc6a('0x46')]({'where':{'id':_0x254e83['params']['id']}})[_0xcc6a('0x26')](handleEntityNotFound(_0x267e43,null))[_0xcc6a('0x26')](saveUpdates(_0x254e83[_0xcc6a('0x45')],null))[_0xcc6a('0x26')](respondWithResult(_0x267e43,null))[_0xcc6a('0x47')](handleError(_0x267e43,null));};exports[_0xcc6a('0x48')]=function(_0x47b175,_0x1a3b82){return db[_0xcc6a('0x2d')][_0xcc6a('0x46')]({'where':{'id':_0x47b175[_0xcc6a('0x49')]['id']}})[_0xcc6a('0x26')](handleEntityNotFound(_0x1a3b82,null))[_0xcc6a('0x26')](removeEntity(_0x1a3b82,null))[_0xcc6a('0x47')](handleError(_0x1a3b82,null));};
\ No newline at end of file