Built motion from commit 00bf23f6.|2.6.16
[motion2.git] / server / api / integrationReport / integrationReport.controller.js
index 70499d1..52f1f4c 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xf52f=['offset','limit','count','set','Content-Range','apply','reject','save','update','then','destroy','error','stack','name','send','map','rawAttributes','fieldName','type','key','query','keys','filters','model','intersection','fields','attributes','length','nolimit','order','pick','filter','where','merge','VIRTUAL','options','IntegrationReport','includeAll','include','findAll','catch','show','find','create','body','params','describe','eml-format','rimraf','zip-dir','request-promise','moment','bluebird','util','path','to-csv','ejs','fs-extra','lodash','squel','crypto','jsforce','desk.js','querystring','papaparse','ioredis','../../components/auth/service','../../components/parsers/qs','../../components/parsers/advancedSearch','../../config/license/hardware','../../config/logger','api','../../config/utils','../../mysqldb','sendStatus','status'];(function(_0x3b90ab,_0x174a22){var _0x206e92=function(_0x21fbd3){while(--_0x21fbd3){_0x3b90ab['push'](_0x3b90ab['shift']());}};_0x206e92(++_0x174a22);}(_0xf52f,0x113));var _0xff52=function(_0x5401ae,_0x5e58ac){_0x5401ae=_0x5401ae-0x0;var _0x286068=_0xf52f[_0x5401ae];return _0x286068;};'use strict';var emlformat=require(_0xff52('0x0'));var rimraf=require(_0xff52('0x1'));var zipdir=require(_0xff52('0x2'));var jsonpatch=require('fast-json-patch');var rp=require(_0xff52('0x3'));var moment=require(_0xff52('0x4'));var BPromise=require(_0xff52('0x5'));var Mustache=require('mustache');var util=require(_0xff52('0x6'));var path=require(_0xff52('0x7'));var sox=require('sox');var csv=require(_0xff52('0x8'));var ejs=require(_0xff52('0x9'));var fs=require('fs');var fs_extra=require(_0xff52('0xa'));var _=require(_0xff52('0xb'));var squel=require(_0xff52('0xc'));var crypto=require(_0xff52('0xd'));var jsforce=require(_0xff52('0xe'));var deskjs=require(_0xff52('0xf'));var toCsv=require(_0xff52('0x8'));var querystring=require(_0xff52('0x10'));var Papa=require(_0xff52('0x11'));var Redis=require(_0xff52('0x12'));var authService=require(_0xff52('0x13'));var qs=require(_0xff52('0x14'));var as=require(_0xff52('0x15'));var hardwareService=require(_0xff52('0x16'));var logger=require(_0xff52('0x17'))(_0xff52('0x18'));var utils=require(_0xff52('0x19'));var config=require('../../config/environment');var licenseUtil=require('../../config/license/util');var db=require(_0xff52('0x1a'))['db'];function respondWithStatusCode(_0x53f40b,_0x2cd3ca){_0x2cd3ca=_0x2cd3ca||0xcc;return function(_0x1c0f10){if(_0x1c0f10){return _0x53f40b[_0xff52('0x1b')](_0x2cd3ca);}return _0x53f40b[_0xff52('0x1c')](_0x2cd3ca)['end']();};}function respondWithResult(_0x54eccf,_0x5bc4dd){_0x5bc4dd=_0x5bc4dd||0xc8;return function(_0x32f7e5){if(_0x32f7e5){return _0x54eccf['status'](_0x5bc4dd)['json'](_0x32f7e5);}};}function respondWithFilteredResult(_0x219294,_0x1e1818){return function(_0x3fc985){if(_0x3fc985){var _0x440701=typeof _0x1e1818[_0xff52('0x1d')]==='undefined'&&typeof _0x1e1818[_0xff52('0x1e')]==='undefined';var _0xc8d493=_0x3fc985['count'];var _0x568cad=_0x440701?0x0:_0x1e1818[_0xff52('0x1d')];var _0x28601f=_0x440701?_0x3fc985[_0xff52('0x1f')]:_0x1e1818['offset']+_0x1e1818['limit'];var _0x163326;if(_0x28601f>=_0xc8d493){_0x28601f=_0xc8d493;_0x163326=0xc8;}else{_0x163326=0xce;}_0x219294[_0xff52('0x1c')](_0x163326);return _0x219294[_0xff52('0x20')](_0xff52('0x21'),_0x568cad+'-'+_0x28601f+'/'+_0xc8d493)['json'](_0x3fc985);}return null;};}function patchUpdates(_0x147db2){return function(_0x45fe57){try{jsonpatch[_0xff52('0x22')](_0x45fe57,_0x147db2,!![]);}catch(_0x434a9f){return BPromise[_0xff52('0x23')](_0x434a9f);}return _0x45fe57[_0xff52('0x24')]();};}function saveUpdates(_0x78d437,_0x176c10){return function(_0x5eb3f9){if(_0x5eb3f9){return _0x5eb3f9[_0xff52('0x25')](_0x78d437)[_0xff52('0x26')](function(_0x517eb4){return _0x517eb4;});}return null;};}function removeEntity(_0x313ee0,_0x3cf849){return function(_0x4b8157){if(_0x4b8157){return _0x4b8157[_0xff52('0x27')]()['then'](function(){_0x313ee0['status'](0xcc)['end']();});}};}function handleEntityNotFound(_0x363857,_0x234516){return function(_0x16b121){if(!_0x16b121){_0x363857[_0xff52('0x1b')](0x194);}return _0x16b121;};}function handleError(_0x18a08e,_0x1fe1cc){_0x1fe1cc=_0x1fe1cc||0x1f4;return function(_0x25225b){logger[_0xff52('0x28')](_0x25225b[_0xff52('0x29')]);if(_0x25225b[_0xff52('0x2a')]){delete _0x25225b['name'];}_0x18a08e[_0xff52('0x1c')](_0x1fe1cc)[_0xff52('0x2b')](_0x25225b);};}exports['index']=function(_0x2822c0,_0x32df90){var _0x208753={},_0x1cb50f={},_0x30fd72={'count':0x0,'rows':[]};var _0x51d708=_[_0xff52('0x2c')](db['IntegrationReport'][_0xff52('0x2d')],function(_0x35aaf7){return{'name':_0x35aaf7[_0xff52('0x2e')],'type':_0x35aaf7[_0xff52('0x2f')][_0xff52('0x30')]};});_0x1cb50f['model']=_['map'](_0x51d708,_0xff52('0x2a'));_0x1cb50f[_0xff52('0x31')]=_[_0xff52('0x32')](_0x2822c0['query']);_0x1cb50f[_0xff52('0x33')]=_['intersection'](_0x1cb50f[_0xff52('0x34')],_0x1cb50f[_0xff52('0x31')]);_0x208753['attributes']=_[_0xff52('0x35')](_0x1cb50f[_0xff52('0x34')],qs[_0xff52('0x36')](_0x2822c0[_0xff52('0x31')][_0xff52('0x36')]));_0x208753[_0xff52('0x37')]=_0x208753[_0xff52('0x37')][_0xff52('0x38')]?_0x208753[_0xff52('0x37')]:_0x1cb50f[_0xff52('0x34')];if(!_0x2822c0[_0xff52('0x31')]['hasOwnProperty'](_0xff52('0x39'))){_0x208753[_0xff52('0x1e')]=qs['limit'](_0x2822c0[_0xff52('0x31')][_0xff52('0x1e')]);_0x208753[_0xff52('0x1d')]=qs[_0xff52('0x1d')](_0x2822c0[_0xff52('0x31')][_0xff52('0x1d')]);}_0x208753[_0xff52('0x3a')]=qs['sort'](_0x2822c0[_0xff52('0x31')]['sort']);_0x208753['where']=qs[_0xff52('0x33')](_[_0xff52('0x3b')](_0x2822c0['query'],_0x1cb50f[_0xff52('0x33')]),_0x51d708);if(_0x2822c0[_0xff52('0x31')][_0xff52('0x3c')]){_0x208753[_0xff52('0x3d')]=_[_0xff52('0x3e')](_0x208753[_0xff52('0x3d')],{'$or':_[_0xff52('0x2c')](_0x51d708,function(_0xcb2a24){if(_0xcb2a24[_0xff52('0x2f')]!==_0xff52('0x3f')){var _0x5c48fa={};_0x5c48fa[_0xcb2a24[_0xff52('0x2a')]]={'$like':'%'+_0x2822c0[_0xff52('0x31')][_0xff52('0x3c')]+'%'};return _0x5c48fa;}})});}_0x208753=_[_0xff52('0x3e')]({},_0x208753,_0x2822c0[_0xff52('0x40')]);var _0x388613={'where':_0x208753[_0xff52('0x3d')]};return db[_0xff52('0x41')]['count'](_0x388613)[_0xff52('0x26')](function(_0x5937da){_0x30fd72[_0xff52('0x1f')]=_0x5937da;if(_0x2822c0['query'][_0xff52('0x42')]){_0x208753[_0xff52('0x43')]=[{'all':!![]}];}return db[_0xff52('0x41')][_0xff52('0x44')](_0x208753);})[_0xff52('0x26')](function(_0x1d3fc8){_0x30fd72['rows']=_0x1d3fc8;return _0x30fd72;})[_0xff52('0x26')](respondWithFilteredResult(_0x32df90,_0x208753))[_0xff52('0x45')](handleError(_0x32df90,null));};exports[_0xff52('0x46')]=function(_0x194e32,_0x16c2e4){var _0x56f535={'raw':![],'where':{'id':_0x194e32['params']['id']}},_0x236d4f={};_0x236d4f[_0xff52('0x34')]=_[_0xff52('0x32')](db[_0xff52('0x41')][_0xff52('0x2d')]);_0x236d4f['query']=_[_0xff52('0x32')](_0x194e32[_0xff52('0x31')]);_0x236d4f[_0xff52('0x33')]=_[_0xff52('0x35')](_0x236d4f[_0xff52('0x34')],_0x236d4f[_0xff52('0x31')]);_0x56f535[_0xff52('0x37')]=_[_0xff52('0x35')](_0x236d4f[_0xff52('0x34')],qs[_0xff52('0x36')](_0x194e32[_0xff52('0x31')]['fields']));_0x56f535[_0xff52('0x37')]=_0x56f535[_0xff52('0x37')][_0xff52('0x38')]?_0x56f535['attributes']:_0x236d4f[_0xff52('0x34')];if(_0x194e32[_0xff52('0x31')][_0xff52('0x42')]){_0x56f535[_0xff52('0x43')]=[{'all':!![]}];}_0x56f535=_[_0xff52('0x3e')]({},_0x56f535,_0x194e32['options']);return db['IntegrationReport'][_0xff52('0x47')](_0x56f535)[_0xff52('0x26')](handleEntityNotFound(_0x16c2e4,null))[_0xff52('0x26')](respondWithResult(_0x16c2e4,null))['catch'](handleError(_0x16c2e4,null));};exports[_0xff52('0x48')]=function(_0x3dfb1a,_0x397a60){return db[_0xff52('0x41')][_0xff52('0x48')](_0x3dfb1a[_0xff52('0x49')],{})['then'](respondWithResult(_0x397a60,0xc9))[_0xff52('0x45')](handleError(_0x397a60,null));};exports[_0xff52('0x25')]=function(_0x314ed0,_0x2874f1){if(_0x314ed0['body']['id']){delete _0x314ed0[_0xff52('0x49')]['id'];}return db[_0xff52('0x41')][_0xff52('0x47')]({'where':{'id':_0x314ed0[_0xff52('0x4a')]['id']}})[_0xff52('0x26')](handleEntityNotFound(_0x2874f1,null))[_0xff52('0x26')](saveUpdates(_0x314ed0[_0xff52('0x49')],null))[_0xff52('0x26')](respondWithResult(_0x2874f1,null))[_0xff52('0x45')](handleError(_0x2874f1,null));};exports[_0xff52('0x27')]=function(_0x208b92,_0x12b43d){return db['IntegrationReport'][_0xff52('0x47')]({'where':{'id':_0x208b92[_0xff52('0x4a')]['id']}})['then'](handleEntityNotFound(_0x12b43d,null))[_0xff52('0x26')](removeEntity(_0x12b43d,null))[_0xff52('0x45')](handleError(_0x12b43d,null));};exports[_0xff52('0x4b')]=function(_0x11001a,_0x45c3fb){return db[_0xff52('0x41')][_0xff52('0x4b')]()['then'](respondWithResult(_0x45c3fb,null))[_0xff52('0x45')](handleError(_0x45c3fb,null));};
\ No newline at end of file
+var _0x7326=['sort','where','filters','filter','merge','VIRTUAL','include','findAll','rows','catch','show','params','keys','includeAll','create','body','find','describe','eml-format','rimraf','zip-dir','fast-json-patch','request-promise','moment','bluebird','mustache','util','path','sox','to-csv','ejs','fs-extra','lodash','squel','crypto','desk.js','papaparse','ioredis','../../components/auth/service','../../components/parsers/qs','../../components/parsers/advancedSearch','../../config/license/hardware','api','../../config/utils','../../config/environment','../../config/license/util','sendStatus','status','end','json','limit','count','offset','set','Content-Range','apply','reject','save','update','then','destroy','error','stack','name','index','map','IntegrationReport','rawAttributes','type','key','model','query','intersection','fields','attributes','length','hasOwnProperty'];(function(_0x35534f,_0x32a7c0){var _0x2ff1c8=function(_0x36701c){while(--_0x36701c){_0x35534f['push'](_0x35534f['shift']());}};_0x2ff1c8(++_0x32a7c0);}(_0x7326,0x193));var _0x6732=function(_0x3bf83f,_0x181cac){_0x3bf83f=_0x3bf83f-0x0;var _0x22c4a9=_0x7326[_0x3bf83f];return _0x22c4a9;};'use strict';var emlformat=require(_0x6732('0x0'));var rimraf=require(_0x6732('0x1'));var zipdir=require(_0x6732('0x2'));var jsonpatch=require(_0x6732('0x3'));var rp=require(_0x6732('0x4'));var moment=require(_0x6732('0x5'));var BPromise=require(_0x6732('0x6'));var Mustache=require(_0x6732('0x7'));var util=require(_0x6732('0x8'));var path=require(_0x6732('0x9'));var sox=require(_0x6732('0xa'));var csv=require(_0x6732('0xb'));var ejs=require(_0x6732('0xc'));var fs=require('fs');var fs_extra=require(_0x6732('0xd'));var _=require(_0x6732('0xe'));var squel=require(_0x6732('0xf'));var crypto=require(_0x6732('0x10'));var jsforce=require('jsforce');var deskjs=require(_0x6732('0x11'));var toCsv=require(_0x6732('0xb'));var querystring=require('querystring');var Papa=require(_0x6732('0x12'));var Redis=require(_0x6732('0x13'));var authService=require(_0x6732('0x14'));var qs=require(_0x6732('0x15'));var as=require(_0x6732('0x16'));var hardwareService=require(_0x6732('0x17'));var logger=require('../../config/logger')(_0x6732('0x18'));var utils=require(_0x6732('0x19'));var config=require(_0x6732('0x1a'));var licenseUtil=require(_0x6732('0x1b'));var db=require('../../mysqldb')['db'];function respondWithStatusCode(_0x439381,_0x16cb7e){_0x16cb7e=_0x16cb7e||0xcc;return function(_0x381a99){if(_0x381a99){return _0x439381[_0x6732('0x1c')](_0x16cb7e);}return _0x439381[_0x6732('0x1d')](_0x16cb7e)[_0x6732('0x1e')]();};}function respondWithResult(_0x158b2d,_0x2f3c2e){_0x2f3c2e=_0x2f3c2e||0xc8;return function(_0x11bb24){if(_0x11bb24){return _0x158b2d['status'](_0x2f3c2e)[_0x6732('0x1f')](_0x11bb24);}};}function respondWithFilteredResult(_0x42c1f1,_0x20154b){return function(_0x5d1f15){if(_0x5d1f15){var _0x209256=typeof _0x20154b['offset']==='undefined'&&typeof _0x20154b[_0x6732('0x20')]==='undefined';var _0x9bab47=_0x5d1f15[_0x6732('0x21')];var _0x2fe19b=_0x209256?0x0:_0x20154b['offset'];var _0x233692=_0x209256?_0x5d1f15[_0x6732('0x21')]:_0x20154b[_0x6732('0x22')]+_0x20154b[_0x6732('0x20')];var _0x521381;if(_0x233692>=_0x9bab47){_0x233692=_0x9bab47;_0x521381=0xc8;}else{_0x521381=0xce;}_0x42c1f1[_0x6732('0x1d')](_0x521381);return _0x42c1f1[_0x6732('0x23')](_0x6732('0x24'),_0x2fe19b+'-'+_0x233692+'/'+_0x9bab47)[_0x6732('0x1f')](_0x5d1f15);}return null;};}function patchUpdates(_0x1a8819){return function(_0x21341e){try{jsonpatch[_0x6732('0x25')](_0x21341e,_0x1a8819,!![]);}catch(_0x4adda0){return BPromise[_0x6732('0x26')](_0x4adda0);}return _0x21341e[_0x6732('0x27')]();};}function saveUpdates(_0x19d368,_0x44f01a){return function(_0x1ff202){if(_0x1ff202){return _0x1ff202[_0x6732('0x28')](_0x19d368)[_0x6732('0x29')](function(_0x408784){return _0x408784;});}return null;};}function removeEntity(_0x1c23a4,_0x1d3785){return function(_0x4f7f3e){if(_0x4f7f3e){return _0x4f7f3e[_0x6732('0x2a')]()[_0x6732('0x29')](function(){_0x1c23a4[_0x6732('0x1d')](0xcc)[_0x6732('0x1e')]();});}};}function handleEntityNotFound(_0x331342,_0x152144){return function(_0x730eed){if(!_0x730eed){_0x331342[_0x6732('0x1c')](0x194);}return _0x730eed;};}function handleError(_0x1d4781,_0x51ce51){_0x51ce51=_0x51ce51||0x1f4;return function(_0x1b096d){logger[_0x6732('0x2b')](_0x1b096d[_0x6732('0x2c')]);if(_0x1b096d[_0x6732('0x2d')]){delete _0x1b096d['name'];}_0x1d4781[_0x6732('0x1d')](_0x51ce51)['send'](_0x1b096d);};}exports[_0x6732('0x2e')]=function(_0x45d5c1,_0x16f183){var _0x292971={},_0x29b549={},_0x147420={'count':0x0,'rows':[]};var _0x53ab06=_[_0x6732('0x2f')](db[_0x6732('0x30')][_0x6732('0x31')],function(_0x3fc173){return{'name':_0x3fc173['fieldName'],'type':_0x3fc173[_0x6732('0x32')][_0x6732('0x33')]};});_0x29b549[_0x6732('0x34')]=_['map'](_0x53ab06,_0x6732('0x2d'));_0x29b549[_0x6732('0x35')]=_['keys'](_0x45d5c1[_0x6732('0x35')]);_0x29b549['filters']=_[_0x6732('0x36')](_0x29b549[_0x6732('0x34')],_0x29b549[_0x6732('0x35')]);_0x292971['attributes']=_['intersection'](_0x29b549[_0x6732('0x34')],qs[_0x6732('0x37')](_0x45d5c1[_0x6732('0x35')][_0x6732('0x37')]));_0x292971[_0x6732('0x38')]=_0x292971[_0x6732('0x38')][_0x6732('0x39')]?_0x292971['attributes']:_0x29b549[_0x6732('0x34')];if(!_0x45d5c1[_0x6732('0x35')][_0x6732('0x3a')]('nolimit')){_0x292971[_0x6732('0x20')]=qs['limit'](_0x45d5c1[_0x6732('0x35')][_0x6732('0x20')]);_0x292971[_0x6732('0x22')]=qs[_0x6732('0x22')](_0x45d5c1[_0x6732('0x35')][_0x6732('0x22')]);}_0x292971['order']=qs['sort'](_0x45d5c1[_0x6732('0x35')][_0x6732('0x3b')]);_0x292971[_0x6732('0x3c')]=qs[_0x6732('0x3d')](_['pick'](_0x45d5c1[_0x6732('0x35')],_0x29b549[_0x6732('0x3d')]),_0x53ab06);if(_0x45d5c1[_0x6732('0x35')][_0x6732('0x3e')]){_0x292971[_0x6732('0x3c')]=_[_0x6732('0x3f')](_0x292971[_0x6732('0x3c')],{'$or':_['map'](_0x53ab06,function(_0x468cf4){if(_0x468cf4[_0x6732('0x32')]!==_0x6732('0x40')){var _0x125641={};_0x125641[_0x468cf4[_0x6732('0x2d')]]={'$like':'%'+_0x45d5c1[_0x6732('0x35')][_0x6732('0x3e')]+'%'};return _0x125641;}})});}_0x292971=_[_0x6732('0x3f')]({},_0x292971,_0x45d5c1['options']);var _0x39c871={'where':_0x292971['where']};return db['IntegrationReport'][_0x6732('0x21')](_0x39c871)['then'](function(_0x1aa7e3){_0x147420[_0x6732('0x21')]=_0x1aa7e3;if(_0x45d5c1['query']['includeAll']){_0x292971[_0x6732('0x41')]=[{'all':!![]}];}return db[_0x6732('0x30')][_0x6732('0x42')](_0x292971);})[_0x6732('0x29')](function(_0x3c8817){_0x147420[_0x6732('0x43')]=_0x3c8817;return _0x147420;})[_0x6732('0x29')](respondWithFilteredResult(_0x16f183,_0x292971))[_0x6732('0x44')](handleError(_0x16f183,null));};exports[_0x6732('0x45')]=function(_0xbaa023,_0x5a54e0){var _0x14615a={'raw':![],'where':{'id':_0xbaa023[_0x6732('0x46')]['id']}},_0x453af5={};_0x453af5[_0x6732('0x34')]=_[_0x6732('0x47')](db[_0x6732('0x30')][_0x6732('0x31')]);_0x453af5[_0x6732('0x35')]=_[_0x6732('0x47')](_0xbaa023['query']);_0x453af5[_0x6732('0x3d')]=_['intersection'](_0x453af5[_0x6732('0x34')],_0x453af5[_0x6732('0x35')]);_0x14615a[_0x6732('0x38')]=_[_0x6732('0x36')](_0x453af5[_0x6732('0x34')],qs[_0x6732('0x37')](_0xbaa023[_0x6732('0x35')][_0x6732('0x37')]));_0x14615a[_0x6732('0x38')]=_0x14615a['attributes'][_0x6732('0x39')]?_0x14615a[_0x6732('0x38')]:_0x453af5['model'];if(_0xbaa023[_0x6732('0x35')][_0x6732('0x48')]){_0x14615a[_0x6732('0x41')]=[{'all':!![]}];}_0x14615a=_[_0x6732('0x3f')]({},_0x14615a,_0xbaa023['options']);return db[_0x6732('0x30')]['find'](_0x14615a)[_0x6732('0x29')](handleEntityNotFound(_0x5a54e0,null))['then'](respondWithResult(_0x5a54e0,null))['catch'](handleError(_0x5a54e0,null));};exports[_0x6732('0x49')]=function(_0x3bf65c,_0x2c1e22){return db[_0x6732('0x30')]['create'](_0x3bf65c[_0x6732('0x4a')],{})[_0x6732('0x29')](respondWithResult(_0x2c1e22,0xc9))[_0x6732('0x44')](handleError(_0x2c1e22,null));};exports[_0x6732('0x28')]=function(_0x4214a3,_0x5a1258){if(_0x4214a3[_0x6732('0x4a')]['id']){delete _0x4214a3[_0x6732('0x4a')]['id'];}return db[_0x6732('0x30')][_0x6732('0x4b')]({'where':{'id':_0x4214a3[_0x6732('0x46')]['id']}})[_0x6732('0x29')](handleEntityNotFound(_0x5a1258,null))['then'](saveUpdates(_0x4214a3[_0x6732('0x4a')],null))[_0x6732('0x29')](respondWithResult(_0x5a1258,null))['catch'](handleError(_0x5a1258,null));};exports[_0x6732('0x2a')]=function(_0x4ec544,_0x54352d){return db[_0x6732('0x30')][_0x6732('0x4b')]({'where':{'id':_0x4ec544[_0x6732('0x46')]['id']}})[_0x6732('0x29')](handleEntityNotFound(_0x54352d,null))['then'](removeEntity(_0x54352d,null))[_0x6732('0x44')](handleError(_0x54352d,null));};exports[_0x6732('0x4c')]=function(_0x533ce5,_0x30769d){return db[_0x6732('0x30')][_0x6732('0x4c')]()[_0x6732('0x29')](respondWithResult(_0x30769d,null))[_0x6732('0x44')](handleError(_0x30769d,null));};
\ No newline at end of file