Built motion from commit (unavailable).|2.5.23
[motion2.git] / server / api / voiceAgentReport / voiceAgentReport.controller.js
index d752080..51f3287 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x6578=['to-csv','querystring','papaparse','../../components/auth/service','../../components/parsers/advancedSearch','../../config/logger','api','../../config/utils','../../config/environment','../../mysqldb','sendStatus','end','status','count','offset','limit','set','Content-Range','json','apply','reject','save','update','then','error','stack','name','send','VoiceAgentReport','rawAttributes','type','key','model','map','query','keys','filters','attributes','intersection','fields','hasOwnProperty','nolimit','order','sort','pick','filter','where','merge','VIRTUAL','options','includeAll','include','findAll','rows','catch','show','params','length','create','body','destroy','find','describe','html-pdf','eml-format','rimraf','zip-dir','request-promise','util','path','ejs','lodash','squel','crypto','jsforce'];(function(_0x112d64,_0x39fdd5){var _0x352f35=function(_0x5ad32f){while(--_0x5ad32f){_0x112d64['push'](_0x112d64['shift']());}};_0x352f35(++_0x39fdd5);}(_0x6578,0x16b));var _0x8657=function(_0x6dca2d,_0x5c9cc){_0x6dca2d=_0x6dca2d-0x0;var _0x14e000=_0x6578[_0x6dca2d];return _0x14e000;};'use strict';var pdf=require(_0x8657('0x0'));var emlformat=require(_0x8657('0x1'));var rimraf=require(_0x8657('0x2'));var zipdir=require(_0x8657('0x3'));var jsonpatch=require('fast-json-patch');var rp=require(_0x8657('0x4'));var moment=require('moment');var BPromise=require('bluebird');var Mustache=require('mustache');var util=require(_0x8657('0x5'));var path=require(_0x8657('0x6'));var sox=require('sox');var csv=require('to-csv');var ejs=require(_0x8657('0x7'));var fs=require('fs');var _=require(_0x8657('0x8'));var squel=require(_0x8657('0x9'));var crypto=require(_0x8657('0xa'));var jsforce=require(_0x8657('0xb'));var deskjs=require('desk.js');var toCsv=require(_0x8657('0xc'));var querystring=require(_0x8657('0xd'));var Papa=require(_0x8657('0xe'));var Redis=require('ioredis');var authService=require(_0x8657('0xf'));var qs=require('../../components/parsers/qs');var as=require(_0x8657('0x10'));var hardwareService=require('../../config/license/hardware');var logger=require(_0x8657('0x11'))(_0x8657('0x12'));var utils=require(_0x8657('0x13'));var config=require(_0x8657('0x14'));var licenseUtil=require('../../config/license/util');var db=require(_0x8657('0x15'))['db'];function respondWithStatusCode(_0x41a78a,_0x1353e1){_0x1353e1=_0x1353e1||0xcc;return function(_0x1ed06d){if(_0x1ed06d){return _0x41a78a[_0x8657('0x16')](_0x1353e1);}return _0x41a78a['status'](_0x1353e1)[_0x8657('0x17')]();};}function respondWithResult(_0x1b0be8,_0x22f0b6){_0x22f0b6=_0x22f0b6||0xc8;return function(_0x347ec6){if(_0x347ec6){return _0x1b0be8[_0x8657('0x18')](_0x22f0b6)['json'](_0x347ec6);}};}function respondWithFilteredResult(_0x556b53,_0x4df2de){return function(_0x253dd8){if(_0x253dd8){var _0x3c2a7a=_0x253dd8[_0x8657('0x19')],_0x32980c=_0x4df2de[_0x8657('0x1a')],_0x4ca8f1=_0x4df2de[_0x8657('0x1a')]+_0x4df2de[_0x8657('0x1b')],_0x212f59;if(_0x4ca8f1>=_0x3c2a7a){_0x4ca8f1=_0x3c2a7a;_0x212f59=0xc8;}else{_0x212f59=0xce;}_0x556b53[_0x8657('0x18')](_0x212f59);return _0x556b53[_0x8657('0x1c')](_0x8657('0x1d'),_0x32980c+'-'+_0x4ca8f1+'/'+_0x3c2a7a)[_0x8657('0x1e')](_0x253dd8);}return null;};}function patchUpdates(_0x547997){return function(_0x268019){try{jsonpatch[_0x8657('0x1f')](_0x268019,_0x547997,!![]);}catch(_0x44eb5a){return BPromise[_0x8657('0x20')](_0x44eb5a);}return _0x268019[_0x8657('0x21')]();};}function saveUpdates(_0x1055b7,_0x1267af){return function(_0x236875){if(_0x236875){return _0x236875[_0x8657('0x22')](_0x1055b7)[_0x8657('0x23')](function(_0x503ebc){return _0x503ebc;});}return null;};}function removeEntity(_0x2f0407,_0x1d98fa){return function(_0x254a2e){if(_0x254a2e){return _0x254a2e['destroy']()[_0x8657('0x23')](function(){_0x2f0407['status'](0xcc)['end']();});}};}function handleEntityNotFound(_0x4eef26,_0x27daff){return function(_0x85fb92){if(!_0x85fb92){_0x4eef26[_0x8657('0x16')](0x194);}return _0x85fb92;};}function handleError(_0x50b516,_0x3ee0f2){_0x3ee0f2=_0x3ee0f2||0x1f4;return function(_0x19139){logger[_0x8657('0x24')](_0x19139[_0x8657('0x25')]);if(_0x19139[_0x8657('0x26')]){delete _0x19139[_0x8657('0x26')];}_0x50b516[_0x8657('0x18')](_0x3ee0f2)[_0x8657('0x27')](_0x19139);};}exports['index']=function(_0x59a413,_0x4b00dd){var _0x3b21ff={},_0x7dbb14={},_0x186bb3={'count':0x0,'rows':[]};var _0x4bbfdb=_['map'](db[_0x8657('0x28')][_0x8657('0x29')],function(_0x527ef3){return{'name':_0x527ef3['fieldName'],'type':_0x527ef3[_0x8657('0x2a')][_0x8657('0x2b')]};});_0x7dbb14[_0x8657('0x2c')]=_[_0x8657('0x2d')](_0x4bbfdb,_0x8657('0x26'));_0x7dbb14[_0x8657('0x2e')]=_[_0x8657('0x2f')](_0x59a413['query']);_0x7dbb14[_0x8657('0x30')]=_['intersection'](_0x7dbb14['model'],_0x7dbb14[_0x8657('0x2e')]);_0x3b21ff[_0x8657('0x31')]=_[_0x8657('0x32')](_0x7dbb14[_0x8657('0x2c')],qs[_0x8657('0x33')](_0x59a413[_0x8657('0x2e')][_0x8657('0x33')]));_0x3b21ff[_0x8657('0x31')]=_0x3b21ff[_0x8657('0x31')]['length']?_0x3b21ff[_0x8657('0x31')]:_0x7dbb14[_0x8657('0x2c')];if(!_0x59a413[_0x8657('0x2e')][_0x8657('0x34')](_0x8657('0x35'))){_0x3b21ff[_0x8657('0x1b')]=qs[_0x8657('0x1b')](_0x59a413[_0x8657('0x2e')]['limit']);_0x3b21ff[_0x8657('0x1a')]=qs[_0x8657('0x1a')](_0x59a413[_0x8657('0x2e')][_0x8657('0x1a')]);}_0x3b21ff[_0x8657('0x36')]=qs['sort'](_0x59a413[_0x8657('0x2e')][_0x8657('0x37')]);_0x3b21ff['where']=qs[_0x8657('0x30')](_[_0x8657('0x38')](_0x59a413[_0x8657('0x2e')],_0x7dbb14[_0x8657('0x30')]),_0x4bbfdb);if(_0x59a413[_0x8657('0x2e')][_0x8657('0x39')]){_0x3b21ff[_0x8657('0x3a')]=_[_0x8657('0x3b')](_0x3b21ff[_0x8657('0x3a')],{'$or':_[_0x8657('0x2d')](_0x4bbfdb,function(_0x4a1d70){if(_0x4a1d70[_0x8657('0x2a')]!==_0x8657('0x3c')){var _0xa9d4ea={};_0xa9d4ea[_0x4a1d70[_0x8657('0x26')]]={'$like':'%'+_0x59a413[_0x8657('0x2e')][_0x8657('0x39')]+'%'};return _0xa9d4ea;}})});}_0x3b21ff=_[_0x8657('0x3b')]({},_0x3b21ff,_0x59a413[_0x8657('0x3d')]);var _0x2735ca={'where':_0x3b21ff['where']};return db[_0x8657('0x28')]['count'](_0x2735ca)[_0x8657('0x23')](function(_0x52bf3a){_0x186bb3[_0x8657('0x19')]=_0x52bf3a;if(_0x59a413[_0x8657('0x2e')][_0x8657('0x3e')]){_0x3b21ff[_0x8657('0x3f')]=[{'all':!![]}];}return db[_0x8657('0x28')][_0x8657('0x40')](_0x3b21ff);})[_0x8657('0x23')](function(_0x47a069){_0x186bb3[_0x8657('0x41')]=_0x47a069;return _0x186bb3;})[_0x8657('0x23')](respondWithFilteredResult(_0x4b00dd,_0x3b21ff))[_0x8657('0x42')](handleError(_0x4b00dd,null));};exports[_0x8657('0x43')]=function(_0x2d328f,_0x412497){var _0x4509dc={'raw':![],'where':{'id':_0x2d328f[_0x8657('0x44')]['id']}},_0x2afacf={};_0x2afacf['model']=_[_0x8657('0x2f')](db['VoiceAgentReport']['rawAttributes']);_0x2afacf[_0x8657('0x2e')]=_[_0x8657('0x2f')](_0x2d328f['query']);_0x2afacf[_0x8657('0x30')]=_['intersection'](_0x2afacf[_0x8657('0x2c')],_0x2afacf[_0x8657('0x2e')]);_0x4509dc[_0x8657('0x31')]=_[_0x8657('0x32')](_0x2afacf[_0x8657('0x2c')],qs[_0x8657('0x33')](_0x2d328f[_0x8657('0x2e')]['fields']));_0x4509dc[_0x8657('0x31')]=_0x4509dc[_0x8657('0x31')][_0x8657('0x45')]?_0x4509dc[_0x8657('0x31')]:_0x2afacf[_0x8657('0x2c')];if(_0x2d328f[_0x8657('0x2e')]['includeAll']){_0x4509dc[_0x8657('0x3f')]=[{'all':!![]}];}_0x4509dc=_[_0x8657('0x3b')]({},_0x4509dc,_0x2d328f[_0x8657('0x3d')]);return db[_0x8657('0x28')]['find'](_0x4509dc)[_0x8657('0x23')](handleEntityNotFound(_0x412497,null))['then'](respondWithResult(_0x412497,null))[_0x8657('0x42')](handleError(_0x412497,null));};exports[_0x8657('0x46')]=function(_0x4c366f,_0x3c86c5){return db[_0x8657('0x28')][_0x8657('0x46')](_0x4c366f[_0x8657('0x47')],{})[_0x8657('0x23')](respondWithResult(_0x3c86c5,0xc9))[_0x8657('0x42')](handleError(_0x3c86c5,null));};exports[_0x8657('0x22')]=function(_0x14b7d0,_0x4789cb){if(_0x14b7d0[_0x8657('0x47')]['id']){delete _0x14b7d0['body']['id'];}return db[_0x8657('0x28')]['find']({'where':{'id':_0x14b7d0[_0x8657('0x44')]['id']}})[_0x8657('0x23')](handleEntityNotFound(_0x4789cb,null))[_0x8657('0x23')](saveUpdates(_0x14b7d0[_0x8657('0x47')],null))[_0x8657('0x23')](respondWithResult(_0x4789cb,null))[_0x8657('0x42')](handleError(_0x4789cb,null));};exports[_0x8657('0x48')]=function(_0x1ca842,_0x210fe7){return db['VoiceAgentReport'][_0x8657('0x49')]({'where':{'id':_0x1ca842['params']['id']}})[_0x8657('0x23')](handleEntityNotFound(_0x210fe7,null))['then'](removeEntity(_0x210fe7,null))[_0x8657('0x42')](handleError(_0x210fe7,null));};exports['describe']=function(_0x50ef2f,_0x21885c){return db['VoiceAgentReport'][_0x8657('0x4a')]()[_0x8657('0x23')](respondWithResult(_0x21885c,null))[_0x8657('0x42')](handleError(_0x21885c,null));};
\ No newline at end of file
+var _0x7b10=['hasOwnProperty','limit','order','sort','where','filters','merge','filter','options','includeAll','findAll','rows','catch','show','params','rawAttributes','include','find','create','body','describe','html-pdf','eml-format','rimraf','zip-dir','request-promise','moment','bluebird','util','sox','ejs','lodash','squel','crypto','desk.js','to-csv','querystring','papaparse','ioredis','../../components/auth/service','../../components/parsers/qs','../../components/parsers/advancedSearch','../../config/license/hardware','../../config/logger','api','../../config/utils','../../mysqldb','status','json','count','offset','set','Content-Range','apply','update','destroy','then','end','sendStatus','error','name','send','index','map','VoiceAgentReport','type','key','model','keys','query','intersection','attributes','fields','length'];(function(_0x173220,_0x2da922){var _0x513661=function(_0x58d993){while(--_0x58d993){_0x173220['push'](_0x173220['shift']());}};_0x513661(++_0x2da922);}(_0x7b10,0x1d1));var _0x07b1=function(_0x2d02a8,_0x10319e){_0x2d02a8=_0x2d02a8-0x0;var _0x5f5532=_0x7b10[_0x2d02a8];return _0x5f5532;};'use strict';var pdf=require(_0x07b1('0x0'));var emlformat=require(_0x07b1('0x1'));var rimraf=require(_0x07b1('0x2'));var zipdir=require(_0x07b1('0x3'));var jsonpatch=require('fast-json-patch');var rp=require(_0x07b1('0x4'));var moment=require(_0x07b1('0x5'));var BPromise=require(_0x07b1('0x6'));var Mustache=require('mustache');var util=require(_0x07b1('0x7'));var path=require('path');var sox=require(_0x07b1('0x8'));var csv=require('to-csv');var ejs=require(_0x07b1('0x9'));var fs=require('fs');var _=require(_0x07b1('0xa'));var squel=require(_0x07b1('0xb'));var crypto=require(_0x07b1('0xc'));var jsforce=require('jsforce');var deskjs=require(_0x07b1('0xd'));var toCsv=require(_0x07b1('0xe'));var querystring=require(_0x07b1('0xf'));var Papa=require(_0x07b1('0x10'));var Redis=require(_0x07b1('0x11'));var authService=require(_0x07b1('0x12'));var qs=require(_0x07b1('0x13'));var as=require(_0x07b1('0x14'));var hardwareService=require(_0x07b1('0x15'));var logger=require(_0x07b1('0x16'))(_0x07b1('0x17'));var utils=require(_0x07b1('0x18'));var config=require('../../config/environment');var licenseUtil=require('../../config/license/util');var db=require(_0x07b1('0x19'))['db'];function respondWithStatusCode(_0x150ac3,_0x310f79){_0x310f79=_0x310f79||0xcc;return function(_0x344b95){if(_0x344b95){return _0x150ac3['sendStatus'](_0x310f79);}return _0x150ac3[_0x07b1('0x1a')](_0x310f79)['end']();};}function respondWithResult(_0x4cb08b,_0x48b4af){_0x48b4af=_0x48b4af||0xc8;return function(_0x35f0f1){if(_0x35f0f1){return _0x4cb08b[_0x07b1('0x1a')](_0x48b4af)[_0x07b1('0x1b')](_0x35f0f1);}};}function respondWithFilteredResult(_0x5732b7,_0x13c27e){return function(_0x1ca505){if(_0x1ca505){var _0x68349=_0x1ca505[_0x07b1('0x1c')],_0x517b2d=_0x13c27e[_0x07b1('0x1d')],_0x506d47=_0x13c27e[_0x07b1('0x1d')]+_0x13c27e['limit'],_0x20474f;if(_0x506d47>=_0x68349){_0x506d47=_0x68349;_0x20474f=0xc8;}else{_0x20474f=0xce;}_0x5732b7[_0x07b1('0x1a')](_0x20474f);return _0x5732b7[_0x07b1('0x1e')](_0x07b1('0x1f'),_0x517b2d+'-'+_0x506d47+'/'+_0x68349)[_0x07b1('0x1b')](_0x1ca505);}return null;};}function patchUpdates(_0x1ddaea){return function(_0x129b0a){try{jsonpatch[_0x07b1('0x20')](_0x129b0a,_0x1ddaea,!![]);}catch(_0xb84db0){return BPromise['reject'](_0xb84db0);}return _0x129b0a['save']();};}function saveUpdates(_0x5e2538,_0x4704e8){return function(_0x16a682){if(_0x16a682){return _0x16a682[_0x07b1('0x21')](_0x5e2538)['then'](function(_0x224496){return _0x224496;});}return null;};}function removeEntity(_0x14567a,_0x433bc2){return function(_0x14a377){if(_0x14a377){return _0x14a377[_0x07b1('0x22')]()[_0x07b1('0x23')](function(){_0x14567a['status'](0xcc)[_0x07b1('0x24')]();});}};}function handleEntityNotFound(_0x2b9a23,_0x1d52ca){return function(_0x8dc8c2){if(!_0x8dc8c2){_0x2b9a23[_0x07b1('0x25')](0x194);}return _0x8dc8c2;};}function handleError(_0x4c9450,_0x4fa255){_0x4fa255=_0x4fa255||0x1f4;return function(_0x3ea9ec){logger[_0x07b1('0x26')](_0x3ea9ec['stack']);if(_0x3ea9ec[_0x07b1('0x27')]){delete _0x3ea9ec[_0x07b1('0x27')];}_0x4c9450[_0x07b1('0x1a')](_0x4fa255)[_0x07b1('0x28')](_0x3ea9ec);};}exports[_0x07b1('0x29')]=function(_0x20a0e7,_0x39a3d6){var _0x55c787={},_0x26cb21={},_0x3b8434={'count':0x0,'rows':[]};var _0x1acbb5=_[_0x07b1('0x2a')](db[_0x07b1('0x2b')]['rawAttributes'],function(_0x45fd0e){return{'name':_0x45fd0e['fieldName'],'type':_0x45fd0e[_0x07b1('0x2c')][_0x07b1('0x2d')]};});_0x26cb21[_0x07b1('0x2e')]=_['map'](_0x1acbb5,'name');_0x26cb21['query']=_[_0x07b1('0x2f')](_0x20a0e7[_0x07b1('0x30')]);_0x26cb21['filters']=_[_0x07b1('0x31')](_0x26cb21[_0x07b1('0x2e')],_0x26cb21[_0x07b1('0x30')]);_0x55c787[_0x07b1('0x32')]=_['intersection'](_0x26cb21[_0x07b1('0x2e')],qs[_0x07b1('0x33')](_0x20a0e7[_0x07b1('0x30')]['fields']));_0x55c787[_0x07b1('0x32')]=_0x55c787[_0x07b1('0x32')][_0x07b1('0x34')]?_0x55c787[_0x07b1('0x32')]:_0x26cb21[_0x07b1('0x2e')];if(!_0x20a0e7[_0x07b1('0x30')][_0x07b1('0x35')]('nolimit')){_0x55c787['limit']=qs[_0x07b1('0x36')](_0x20a0e7[_0x07b1('0x30')]['limit']);_0x55c787[_0x07b1('0x1d')]=qs[_0x07b1('0x1d')](_0x20a0e7[_0x07b1('0x30')]['offset']);}_0x55c787[_0x07b1('0x37')]=qs[_0x07b1('0x38')](_0x20a0e7[_0x07b1('0x30')][_0x07b1('0x38')]);_0x55c787[_0x07b1('0x39')]=qs[_0x07b1('0x3a')](_['pick'](_0x20a0e7[_0x07b1('0x30')],_0x26cb21['filters']),_0x1acbb5);if(_0x20a0e7[_0x07b1('0x30')]['filter']){_0x55c787[_0x07b1('0x39')]=_[_0x07b1('0x3b')](_0x55c787[_0x07b1('0x39')],{'$or':_[_0x07b1('0x2a')](_0x1acbb5,function(_0x10f857){if(_0x10f857[_0x07b1('0x2c')]!=='VIRTUAL'){var _0x1bbc8d={};_0x1bbc8d[_0x10f857[_0x07b1('0x27')]]={'$like':'%'+_0x20a0e7[_0x07b1('0x30')][_0x07b1('0x3c')]+'%'};return _0x1bbc8d;}})});}_0x55c787=_[_0x07b1('0x3b')]({},_0x55c787,_0x20a0e7[_0x07b1('0x3d')]);var _0x985823={'where':_0x55c787[_0x07b1('0x39')]};return db[_0x07b1('0x2b')][_0x07b1('0x1c')](_0x985823)[_0x07b1('0x23')](function(_0x214c94){_0x3b8434[_0x07b1('0x1c')]=_0x214c94;if(_0x20a0e7['query'][_0x07b1('0x3e')]){_0x55c787['include']=[{'all':!![]}];}return db[_0x07b1('0x2b')][_0x07b1('0x3f')](_0x55c787);})[_0x07b1('0x23')](function(_0x2cdd67){_0x3b8434[_0x07b1('0x40')]=_0x2cdd67;return _0x3b8434;})['then'](respondWithFilteredResult(_0x39a3d6,_0x55c787))[_0x07b1('0x41')](handleError(_0x39a3d6,null));};exports[_0x07b1('0x42')]=function(_0x2363a5,_0x32eec7){var _0xea5103={'raw':![],'where':{'id':_0x2363a5[_0x07b1('0x43')]['id']}},_0x3ff88d={};_0x3ff88d['model']=_['keys'](db[_0x07b1('0x2b')][_0x07b1('0x44')]);_0x3ff88d['query']=_['keys'](_0x2363a5[_0x07b1('0x30')]);_0x3ff88d[_0x07b1('0x3a')]=_[_0x07b1('0x31')](_0x3ff88d['model'],_0x3ff88d[_0x07b1('0x30')]);_0xea5103[_0x07b1('0x32')]=_['intersection'](_0x3ff88d[_0x07b1('0x2e')],qs[_0x07b1('0x33')](_0x2363a5['query'][_0x07b1('0x33')]));_0xea5103[_0x07b1('0x32')]=_0xea5103[_0x07b1('0x32')][_0x07b1('0x34')]?_0xea5103[_0x07b1('0x32')]:_0x3ff88d['model'];if(_0x2363a5['query'][_0x07b1('0x3e')]){_0xea5103[_0x07b1('0x45')]=[{'all':!![]}];}_0xea5103=_[_0x07b1('0x3b')]({},_0xea5103,_0x2363a5[_0x07b1('0x3d')]);return db['VoiceAgentReport'][_0x07b1('0x46')](_0xea5103)[_0x07b1('0x23')](handleEntityNotFound(_0x32eec7,null))['then'](respondWithResult(_0x32eec7,null))[_0x07b1('0x41')](handleError(_0x32eec7,null));};exports[_0x07b1('0x47')]=function(_0x269950,_0x2f3dc3){return db[_0x07b1('0x2b')][_0x07b1('0x47')](_0x269950[_0x07b1('0x48')],{})[_0x07b1('0x23')](respondWithResult(_0x2f3dc3,0xc9))[_0x07b1('0x41')](handleError(_0x2f3dc3,null));};exports[_0x07b1('0x21')]=function(_0xd9c3cd,_0x423a41){if(_0xd9c3cd[_0x07b1('0x48')]['id']){delete _0xd9c3cd['body']['id'];}return db[_0x07b1('0x2b')]['find']({'where':{'id':_0xd9c3cd[_0x07b1('0x43')]['id']}})[_0x07b1('0x23')](handleEntityNotFound(_0x423a41,null))[_0x07b1('0x23')](saveUpdates(_0xd9c3cd['body'],null))['then'](respondWithResult(_0x423a41,null))[_0x07b1('0x41')](handleError(_0x423a41,null));};exports[_0x07b1('0x22')]=function(_0x953744,_0x5b681c){return db[_0x07b1('0x2b')][_0x07b1('0x46')]({'where':{'id':_0x953744[_0x07b1('0x43')]['id']}})[_0x07b1('0x23')](handleEntityNotFound(_0x5b681c,null))['then'](removeEntity(_0x5b681c,null))['catch'](handleError(_0x5b681c,null));};exports[_0x07b1('0x49')]=function(_0x40b4b0,_0x4f1a27){return db['VoiceAgentReport'][_0x07b1('0x49')]()[_0x07b1('0x23')](respondWithResult(_0x4f1a27,null))['catch'](handleError(_0x4f1a27,null));};
\ No newline at end of file