Built motion from commit efa66e19.|2.6.22
[motion2.git] / server / api / whatsappQueueReport / whatsappQueueReport.controller.js
index f76a524..b5d5914 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x0570=['filter','merge','options','WhatsappQueueReport','includeAll','include','rows','catch','show','params','fields','find','create','body','describe','eml-format','rimraf','zip-dir','request-promise','bluebird','util','path','sox','to-csv','ejs','squel','jsforce','desk.js','querystring','papaparse','../../components/auth/service','../../components/parsers/qs','../../components/parsers/advancedSearch','../../config/logger','api','../../mysqldb','sendStatus','status','end','count','offset','set','json','apply','reject','save','update','then','destroy','name','send','index','map','rawAttributes','fieldName','type','query','keys','filters','intersection','model','attributes','length','hasOwnProperty','nolimit','limit','order','sort','pick','where','VIRTUAL'];(function(_0x43d16c,_0x2b5447){var _0x208cce=function(_0x371720){while(--_0x371720){_0x43d16c['push'](_0x43d16c['shift']());}};_0x208cce(++_0x2b5447);}(_0x0570,0x172));var _0x0057=function(_0x54e71f,_0x485047){_0x54e71f=_0x54e71f-0x0;var _0x2c823b=_0x0570[_0x54e71f];return _0x2c823b;};'use strict';var pdf=require('html-pdf');var emlformat=require(_0x0057('0x0'));var rimraf=require(_0x0057('0x1'));var zipdir=require(_0x0057('0x2'));var jsonpatch=require('fast-json-patch');var rp=require(_0x0057('0x3'));var moment=require('moment');var BPromise=require(_0x0057('0x4'));var Mustache=require('mustache');var util=require(_0x0057('0x5'));var path=require(_0x0057('0x6'));var sox=require(_0x0057('0x7'));var csv=require(_0x0057('0x8'));var ejs=require(_0x0057('0x9'));var fs=require('fs');var _=require('lodash');var squel=require(_0x0057('0xa'));var crypto=require('crypto');var jsforce=require(_0x0057('0xb'));var deskjs=require(_0x0057('0xc'));var toCsv=require(_0x0057('0x8'));var querystring=require(_0x0057('0xd'));var Papa=require(_0x0057('0xe'));var Redis=require('ioredis');var authService=require(_0x0057('0xf'));var qs=require(_0x0057('0x10'));var as=require(_0x0057('0x11'));var hardwareService=require('../../config/license/hardware');var logger=require(_0x0057('0x12'))(_0x0057('0x13'));var utils=require('../../config/utils');var config=require('../../config/environment');var db=require(_0x0057('0x14'))['db'];function respondWithStatusCode(_0x471f7c,_0x33ed2c){_0x33ed2c=_0x33ed2c||0xcc;return function(_0x4d9117){if(_0x4d9117){return _0x471f7c[_0x0057('0x15')](_0x33ed2c);}return _0x471f7c[_0x0057('0x16')](_0x33ed2c)[_0x0057('0x17')]();};}function respondWithResult(_0x344d8e,_0x567515){_0x567515=_0x567515||0xc8;return function(_0x1feb22){if(_0x1feb22){return _0x344d8e[_0x0057('0x16')](_0x567515)['json'](_0x1feb22);}};}function respondWithFilteredResult(_0x20e69e,_0x25628f){return function(_0x581e76){if(_0x581e76){var _0x17549f=_0x581e76[_0x0057('0x18')],_0x59a3e7=_0x25628f[_0x0057('0x19')],_0x399018=_0x25628f['offset']+_0x25628f['limit'],_0x51524e;if(_0x399018>=_0x17549f){_0x399018=_0x17549f;_0x51524e=0xc8;}else{_0x51524e=0xce;}_0x20e69e[_0x0057('0x16')](_0x51524e);return _0x20e69e[_0x0057('0x1a')]('Content-Range',_0x59a3e7+'-'+_0x399018+'/'+_0x17549f)[_0x0057('0x1b')](_0x581e76);}return null;};}function patchUpdates(_0x5b5a4b){return function(_0x96bd7f){try{jsonpatch[_0x0057('0x1c')](_0x96bd7f,_0x5b5a4b,!![]);}catch(_0xa6b45e){return BPromise[_0x0057('0x1d')](_0xa6b45e);}return _0x96bd7f[_0x0057('0x1e')]();};}function saveUpdates(_0x26a524,_0xdea279){return function(_0x320c62){if(_0x320c62){return _0x320c62[_0x0057('0x1f')](_0x26a524)[_0x0057('0x20')](function(_0x5e6499){return _0x5e6499;});}return null;};}function removeEntity(_0xc1ba0,_0x74a47c){return function(_0x43454a){if(_0x43454a){return _0x43454a[_0x0057('0x21')]()['then'](function(){_0xc1ba0[_0x0057('0x16')](0xcc)[_0x0057('0x17')]();});}};}function handleEntityNotFound(_0x5b7c01,_0x620fcc){return function(_0xa8d716){if(!_0xa8d716){_0x5b7c01['sendStatus'](0x194);}return _0xa8d716;};}function handleError(_0x464d79,_0x2472de){_0x2472de=_0x2472de||0x1f4;return function(_0x426304){logger['error'](_0x426304['stack']);if(_0x426304[_0x0057('0x22')]){delete _0x426304[_0x0057('0x22')];}_0x464d79[_0x0057('0x16')](_0x2472de)[_0x0057('0x23')](_0x426304);};}exports[_0x0057('0x24')]=function(_0x22ba65,_0x491ef3){var _0x5f3818={},_0x5cc3e0={},_0x32e92b={'count':0x0,'rows':[]};var _0x45ff9e=_[_0x0057('0x25')](db['WhatsappQueueReport'][_0x0057('0x26')],function(_0xa4fb6a){return{'name':_0xa4fb6a[_0x0057('0x27')],'type':_0xa4fb6a[_0x0057('0x28')]['key']};});_0x5cc3e0['model']=_[_0x0057('0x25')](_0x45ff9e,'name');_0x5cc3e0[_0x0057('0x29')]=_[_0x0057('0x2a')](_0x22ba65[_0x0057('0x29')]);_0x5cc3e0[_0x0057('0x2b')]=_[_0x0057('0x2c')](_0x5cc3e0[_0x0057('0x2d')],_0x5cc3e0[_0x0057('0x29')]);_0x5f3818[_0x0057('0x2e')]=_['intersection'](_0x5cc3e0[_0x0057('0x2d')],qs['fields'](_0x22ba65[_0x0057('0x29')]['fields']));_0x5f3818['attributes']=_0x5f3818[_0x0057('0x2e')][_0x0057('0x2f')]?_0x5f3818[_0x0057('0x2e')]:_0x5cc3e0[_0x0057('0x2d')];if(!_0x22ba65['query'][_0x0057('0x30')](_0x0057('0x31'))){_0x5f3818[_0x0057('0x32')]=qs[_0x0057('0x32')](_0x22ba65[_0x0057('0x29')][_0x0057('0x32')]);_0x5f3818['offset']=qs[_0x0057('0x19')](_0x22ba65['query'][_0x0057('0x19')]);}_0x5f3818[_0x0057('0x33')]=qs[_0x0057('0x34')](_0x22ba65['query'][_0x0057('0x34')]);_0x5f3818['where']=qs['filters'](_[_0x0057('0x35')](_0x22ba65['query'],_0x5cc3e0[_0x0057('0x2b')]),_0x45ff9e);if(_0x22ba65[_0x0057('0x29')]['filter']){_0x5f3818[_0x0057('0x36')]=_['merge'](_0x5f3818[_0x0057('0x36')],{'$or':_[_0x0057('0x25')](_0x45ff9e,function(_0x34e7b1){if(_0x34e7b1[_0x0057('0x28')]!==_0x0057('0x37')){var _0x5976f4={};_0x5976f4[_0x34e7b1[_0x0057('0x22')]]={'$like':'%'+_0x22ba65[_0x0057('0x29')][_0x0057('0x38')]+'%'};return _0x5976f4;}})});}_0x5f3818=_[_0x0057('0x39')]({},_0x5f3818,_0x22ba65[_0x0057('0x3a')]);var _0x48b875={'where':_0x5f3818[_0x0057('0x36')]};return db[_0x0057('0x3b')]['count'](_0x48b875)['then'](function(_0x556fc4){_0x32e92b[_0x0057('0x18')]=_0x556fc4;if(_0x22ba65[_0x0057('0x29')][_0x0057('0x3c')]){_0x5f3818[_0x0057('0x3d')]=[{'all':!![]}];}return db[_0x0057('0x3b')]['findAll'](_0x5f3818);})[_0x0057('0x20')](function(_0x583066){_0x32e92b[_0x0057('0x3e')]=_0x583066;return _0x32e92b;})['then'](respondWithFilteredResult(_0x491ef3,_0x5f3818))[_0x0057('0x3f')](handleError(_0x491ef3,null));};exports[_0x0057('0x40')]=function(_0x1b5743,_0x577d65){var _0x54e9a2={'raw':!![],'where':{'id':_0x1b5743[_0x0057('0x41')]['id']}},_0x419f26={};_0x419f26[_0x0057('0x2d')]=_[_0x0057('0x2a')](db[_0x0057('0x3b')][_0x0057('0x26')]);_0x419f26[_0x0057('0x29')]=_[_0x0057('0x2a')](_0x1b5743[_0x0057('0x29')]);_0x419f26['filters']=_['intersection'](_0x419f26[_0x0057('0x2d')],_0x419f26[_0x0057('0x29')]);_0x54e9a2['attributes']=_[_0x0057('0x2c')](_0x419f26[_0x0057('0x2d')],qs[_0x0057('0x42')](_0x1b5743['query'][_0x0057('0x42')]));_0x54e9a2[_0x0057('0x2e')]=_0x54e9a2['attributes'][_0x0057('0x2f')]?_0x54e9a2[_0x0057('0x2e')]:_0x419f26['model'];if(_0x1b5743[_0x0057('0x29')][_0x0057('0x3c')]){_0x54e9a2[_0x0057('0x3d')]=[{'all':!![]}];}_0x54e9a2=_['merge']({},_0x54e9a2,_0x1b5743[_0x0057('0x3a')]);return db['WhatsappQueueReport'][_0x0057('0x43')](_0x54e9a2)[_0x0057('0x20')](handleEntityNotFound(_0x577d65,null))['then'](respondWithResult(_0x577d65,null))[_0x0057('0x3f')](handleError(_0x577d65,null));};exports[_0x0057('0x44')]=function(_0x34797e,_0x5e8149){return db[_0x0057('0x3b')]['create'](_0x34797e[_0x0057('0x45')],{})[_0x0057('0x20')](respondWithResult(_0x5e8149,0xc9))[_0x0057('0x3f')](handleError(_0x5e8149,null));};exports[_0x0057('0x1f')]=function(_0x2733d9,_0x47886a){if(_0x2733d9[_0x0057('0x45')]['id']){delete _0x2733d9[_0x0057('0x45')]['id'];}return db[_0x0057('0x3b')]['find']({'where':{'id':_0x2733d9[_0x0057('0x41')]['id']}})[_0x0057('0x20')](handleEntityNotFound(_0x47886a,null))['then'](saveUpdates(_0x2733d9[_0x0057('0x45')],null))[_0x0057('0x20')](respondWithResult(_0x47886a,null))[_0x0057('0x3f')](handleError(_0x47886a,null));};exports['destroy']=function(_0x25ee88,_0x98e77e){return db['WhatsappQueueReport'][_0x0057('0x43')]({'where':{'id':_0x25ee88['params']['id']}})[_0x0057('0x20')](handleEntityNotFound(_0x98e77e,null))['then'](removeEntity(_0x98e77e,null))[_0x0057('0x3f')](handleError(_0x98e77e,null));};exports[_0x0057('0x46')]=function(_0x6978a2,_0x5d7c7a){return db[_0x0057('0x3b')][_0x0057('0x46')]()[_0x0057('0x20')](respondWithResult(_0x5d7c7a,null))[_0x0057('0x3f')](handleError(_0x5d7c7a,null));};
\ No newline at end of file
+var _0x2e54=['catch','show','params','find','create','body','update','destroy','describe','eml-format','fast-json-patch','request-promise','moment','bluebird','mustache','util','path','to-csv','ejs','fs-extra','squel','jsforce','querystring','papaparse','ioredis','../../components/auth/service','../../components/parsers/qs','../../components/parsers/advancedSearch','../../config/license/hardware','../../config/logger','../../config/utils','../../config/environment','../../mysqldb','sendStatus','status','end','json','offset','undefined','limit','count','set','apply','reject','save','then','error','name','send','index','map','WhatsappQueueReport','rawAttributes','fieldName','type','key','model','query','keys','filters','intersection','fields','attributes','length','hasOwnProperty','nolimit','order','sort','pick','filter','where','merge','VIRTUAL','options','includeAll','include','findAll','rows'];(function(_0x461794,_0x5f3c10){var _0xec2833=function(_0x48ac23){while(--_0x48ac23){_0x461794['push'](_0x461794['shift']());}};_0xec2833(++_0x5f3c10);}(_0x2e54,0x1dd));var _0x42e5=function(_0x264dfb,_0x1fc437){_0x264dfb=_0x264dfb-0x0;var _0x5dd7cf=_0x2e54[_0x264dfb];return _0x5dd7cf;};'use strict';var emlformat=require(_0x42e5('0x0'));var rimraf=require('rimraf');var zipdir=require('zip-dir');var jsonpatch=require(_0x42e5('0x1'));var rp=require(_0x42e5('0x2'));var moment=require(_0x42e5('0x3'));var BPromise=require(_0x42e5('0x4'));var Mustache=require(_0x42e5('0x5'));var util=require(_0x42e5('0x6'));var path=require(_0x42e5('0x7'));var sox=require('sox');var csv=require(_0x42e5('0x8'));var ejs=require(_0x42e5('0x9'));var fs=require('fs');var fs_extra=require(_0x42e5('0xa'));var _=require('lodash');var squel=require(_0x42e5('0xb'));var crypto=require('crypto');var jsforce=require(_0x42e5('0xc'));var deskjs=require('desk.js');var toCsv=require(_0x42e5('0x8'));var querystring=require(_0x42e5('0xd'));var Papa=require(_0x42e5('0xe'));var Redis=require(_0x42e5('0xf'));var authService=require(_0x42e5('0x10'));var qs=require(_0x42e5('0x11'));var as=require(_0x42e5('0x12'));var hardwareService=require(_0x42e5('0x13'));var logger=require(_0x42e5('0x14'))('api');var utils=require(_0x42e5('0x15'));var config=require(_0x42e5('0x16'));var licenseUtil=require('../../config/license/util');var db=require(_0x42e5('0x17'))['db'];function respondWithStatusCode(_0x12385d,_0x4530ba){_0x4530ba=_0x4530ba||0xcc;return function(_0x41598d){if(_0x41598d){return _0x12385d[_0x42e5('0x18')](_0x4530ba);}return _0x12385d[_0x42e5('0x19')](_0x4530ba)[_0x42e5('0x1a')]();};}function respondWithResult(_0x96fae2,_0x447648){_0x447648=_0x447648||0xc8;return function(_0x23957f){if(_0x23957f){return _0x96fae2['status'](_0x447648)[_0x42e5('0x1b')](_0x23957f);}};}function respondWithFilteredResult(_0x1d8e52,_0x4034bd){return function(_0x388300){if(_0x388300){var _0x2f4999=typeof _0x4034bd[_0x42e5('0x1c')]===_0x42e5('0x1d')&&typeof _0x4034bd[_0x42e5('0x1e')]===_0x42e5('0x1d');var _0x3c7b79=_0x388300[_0x42e5('0x1f')];var _0x38282d=_0x2f4999?0x0:_0x4034bd[_0x42e5('0x1c')];var _0x23fe09=_0x2f4999?_0x388300['count']:_0x4034bd[_0x42e5('0x1c')]+_0x4034bd['limit'];var _0x5f4428;if(_0x23fe09>=_0x3c7b79){_0x23fe09=_0x3c7b79;_0x5f4428=0xc8;}else{_0x5f4428=0xce;}_0x1d8e52[_0x42e5('0x19')](_0x5f4428);return _0x1d8e52[_0x42e5('0x20')]('Content-Range',_0x38282d+'-'+_0x23fe09+'/'+_0x3c7b79)[_0x42e5('0x1b')](_0x388300);}return null;};}function patchUpdates(_0x39a3e2){return function(_0x1c2169){try{jsonpatch[_0x42e5('0x21')](_0x1c2169,_0x39a3e2,!![]);}catch(_0x1150f4){return BPromise[_0x42e5('0x22')](_0x1150f4);}return _0x1c2169[_0x42e5('0x23')]();};}function saveUpdates(_0x58eee5,_0x4da508){return function(_0x283d44){if(_0x283d44){return _0x283d44['update'](_0x58eee5)[_0x42e5('0x24')](function(_0x2e9574){return _0x2e9574;});}return null;};}function removeEntity(_0x37d10e,_0x49490f){return function(_0x32380f){if(_0x32380f){return _0x32380f['destroy']()[_0x42e5('0x24')](function(){_0x37d10e[_0x42e5('0x19')](0xcc)[_0x42e5('0x1a')]();});}};}function handleEntityNotFound(_0x275c80,_0x4638bc){return function(_0x4f52b2){if(!_0x4f52b2){_0x275c80['sendStatus'](0x194);}return _0x4f52b2;};}function handleError(_0x3115e4,_0x534a26){_0x534a26=_0x534a26||0x1f4;return function(_0x56f812){logger[_0x42e5('0x25')](_0x56f812['stack']);if(_0x56f812[_0x42e5('0x26')]){delete _0x56f812[_0x42e5('0x26')];}_0x3115e4[_0x42e5('0x19')](_0x534a26)[_0x42e5('0x27')](_0x56f812);};}exports[_0x42e5('0x28')]=function(_0x2f1edc,_0x59a46b){var _0x3e2ea5={},_0x201d9e={},_0x39f763={'count':0x0,'rows':[]};var _0x2c53d4=_[_0x42e5('0x29')](db[_0x42e5('0x2a')][_0x42e5('0x2b')],function(_0x282cbf){return{'name':_0x282cbf[_0x42e5('0x2c')],'type':_0x282cbf[_0x42e5('0x2d')][_0x42e5('0x2e')]};});_0x201d9e[_0x42e5('0x2f')]=_[_0x42e5('0x29')](_0x2c53d4,'name');_0x201d9e[_0x42e5('0x30')]=_[_0x42e5('0x31')](_0x2f1edc[_0x42e5('0x30')]);_0x201d9e[_0x42e5('0x32')]=_['intersection'](_0x201d9e['model'],_0x201d9e[_0x42e5('0x30')]);_0x3e2ea5['attributes']=_[_0x42e5('0x33')](_0x201d9e['model'],qs[_0x42e5('0x34')](_0x2f1edc[_0x42e5('0x30')][_0x42e5('0x34')]));_0x3e2ea5['attributes']=_0x3e2ea5[_0x42e5('0x35')][_0x42e5('0x36')]?_0x3e2ea5['attributes']:_0x201d9e[_0x42e5('0x2f')];if(!_0x2f1edc['query'][_0x42e5('0x37')](_0x42e5('0x38'))){_0x3e2ea5[_0x42e5('0x1e')]=qs[_0x42e5('0x1e')](_0x2f1edc[_0x42e5('0x30')][_0x42e5('0x1e')]);_0x3e2ea5[_0x42e5('0x1c')]=qs['offset'](_0x2f1edc['query'][_0x42e5('0x1c')]);}_0x3e2ea5[_0x42e5('0x39')]=qs[_0x42e5('0x3a')](_0x2f1edc['query']['sort']);_0x3e2ea5['where']=qs['filters'](_[_0x42e5('0x3b')](_0x2f1edc[_0x42e5('0x30')],_0x201d9e[_0x42e5('0x32')]),_0x2c53d4);if(_0x2f1edc[_0x42e5('0x30')][_0x42e5('0x3c')]){_0x3e2ea5[_0x42e5('0x3d')]=_[_0x42e5('0x3e')](_0x3e2ea5[_0x42e5('0x3d')],{'$or':_['map'](_0x2c53d4,function(_0x260413){if(_0x260413['type']!==_0x42e5('0x3f')){var _0x343363={};_0x343363[_0x260413[_0x42e5('0x26')]]={'$like':'%'+_0x2f1edc[_0x42e5('0x30')][_0x42e5('0x3c')]+'%'};return _0x343363;}})});}_0x3e2ea5=_[_0x42e5('0x3e')]({},_0x3e2ea5,_0x2f1edc[_0x42e5('0x40')]);var _0x5ab9b8={'where':_0x3e2ea5[_0x42e5('0x3d')]};return db[_0x42e5('0x2a')]['count'](_0x5ab9b8)[_0x42e5('0x24')](function(_0x5e8f96){_0x39f763['count']=_0x5e8f96;if(_0x2f1edc['query'][_0x42e5('0x41')]){_0x3e2ea5[_0x42e5('0x42')]=[{'all':!![]}];}return db[_0x42e5('0x2a')][_0x42e5('0x43')](_0x3e2ea5);})[_0x42e5('0x24')](function(_0x77aa22){_0x39f763[_0x42e5('0x44')]=_0x77aa22;return _0x39f763;})['then'](respondWithFilteredResult(_0x59a46b,_0x3e2ea5))[_0x42e5('0x45')](handleError(_0x59a46b,null));};exports[_0x42e5('0x46')]=function(_0x5bec97,_0x398b73){var _0x1c697a={'raw':!![],'where':{'id':_0x5bec97[_0x42e5('0x47')]['id']}},_0x5db771={};_0x5db771[_0x42e5('0x2f')]=_[_0x42e5('0x31')](db[_0x42e5('0x2a')][_0x42e5('0x2b')]);_0x5db771['query']=_[_0x42e5('0x31')](_0x5bec97[_0x42e5('0x30')]);_0x5db771[_0x42e5('0x32')]=_[_0x42e5('0x33')](_0x5db771['model'],_0x5db771[_0x42e5('0x30')]);_0x1c697a[_0x42e5('0x35')]=_[_0x42e5('0x33')](_0x5db771[_0x42e5('0x2f')],qs[_0x42e5('0x34')](_0x5bec97[_0x42e5('0x30')][_0x42e5('0x34')]));_0x1c697a[_0x42e5('0x35')]=_0x1c697a['attributes'][_0x42e5('0x36')]?_0x1c697a['attributes']:_0x5db771['model'];if(_0x5bec97[_0x42e5('0x30')][_0x42e5('0x41')]){_0x1c697a[_0x42e5('0x42')]=[{'all':!![]}];}_0x1c697a=_[_0x42e5('0x3e')]({},_0x1c697a,_0x5bec97[_0x42e5('0x40')]);return db[_0x42e5('0x2a')][_0x42e5('0x48')](_0x1c697a)['then'](handleEntityNotFound(_0x398b73,null))[_0x42e5('0x24')](respondWithResult(_0x398b73,null))[_0x42e5('0x45')](handleError(_0x398b73,null));};exports[_0x42e5('0x49')]=function(_0x21a047,_0x1086b2){return db[_0x42e5('0x2a')][_0x42e5('0x49')](_0x21a047[_0x42e5('0x4a')],{})['then'](respondWithResult(_0x1086b2,0xc9))[_0x42e5('0x45')](handleError(_0x1086b2,null));};exports[_0x42e5('0x4b')]=function(_0x3616f4,_0x48757e){if(_0x3616f4[_0x42e5('0x4a')]['id']){delete _0x3616f4[_0x42e5('0x4a')]['id'];}return db[_0x42e5('0x2a')][_0x42e5('0x48')]({'where':{'id':_0x3616f4[_0x42e5('0x47')]['id']}})['then'](handleEntityNotFound(_0x48757e,null))[_0x42e5('0x24')](saveUpdates(_0x3616f4['body'],null))[_0x42e5('0x24')](respondWithResult(_0x48757e,null))[_0x42e5('0x45')](handleError(_0x48757e,null));};exports[_0x42e5('0x4c')]=function(_0x48b63b,_0x50f59c){return db['WhatsappQueueReport'][_0x42e5('0x48')]({'where':{'id':_0x48b63b[_0x42e5('0x47')]['id']}})[_0x42e5('0x24')](handleEntityNotFound(_0x50f59c,null))[_0x42e5('0x24')](removeEntity(_0x50f59c,null))['catch'](handleError(_0x50f59c,null));};exports[_0x42e5('0x4d')]=function(_0x26782e,_0x18cedc){return db['WhatsappQueueReport'][_0x42e5('0x4d')]()['then'](respondWithResult(_0x18cedc,null))[_0x42e5('0x45')](handleError(_0x18cedc,null));};
\ No newline at end of file