00b6cc7ca014702c1ef74c237e73c8be4d93f813
[motion2.git] / server / components / import / cm / csv.js
1 // *************************************************************************
2 // *                                                                       *
3 // * xCALLY Motion -  The Omnichannel Contact Center                       *
4 // * Copyright (c) Xenialab s.r.l. All Rights Reserved                     *
5 // *                                                                       *
6 // *************************************************************************
7 // *                                                                       *
8 // * Email: info@xcally.com                                                *
9 // * Website: https://www.xcally.com                                       *
10 // *                                                                       *
11 // *************************************************************************
12 // *                                                                       *
13 // * The SOFTWARE PRODUCT is protected by copyright laws and international *
14 // * copyright treaties, as well as other intellectual property laws and   *
15 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                         *
16 // *                                                                       *
17 // *************************************************************************
18 var _0x6593=['query','VoiceQueueId','onlyIfOpen','catch','all','Campaign','findAll','always','CampaignId','BlackLists','cmContact,\x20%s,\x20%s','Error\x20processing\x20rows\x20block:','finally','contact:csv_','resume','unlinkSync','Unable\x20to\x20delete\x20temp\x20file:','info','resolve','createReadStream','parse','duplicate','pause','CSV\x20parsed\x20correctly!','Error\x20executing\x20contact\x20csv\x20import:','bluebird','util','lodash','squel','ioredis','api','redis','defaults','localhost','../../../api/cmContact/cmContact.socket','register','argv','undefined','null','Missing\x20filepath\x20parameter!','Missing\x20binding\x20parameters!','zipObject','split','Missing\x20ListId\x20parameter!','Missing\x20socket_timestamp\x20parameter!','error','index','The\x20row\x20is\x20empty\x20or\x20the\x20number\x20of\x20parameters\x20does\x20not\x20match\x20the\x20columns!','errors','length','map','message','join','data','firstName','firstName\x20not\x20specified!','phone','birthDate','YYYY-MM-DD','isValid','birthDate\x20format\x20is\x20invalid,\x20YYYY-MM-DD\x20format\x20is\x20supported!','email','email\x20format\x20is\x20not\x20valid!','ListId','CompanyId','find','CmContact','create','keys','push','pick','stringify','cmContact','inspect','insert','into','cm_hopper','scheduledAt','createdAt','updatedAt','field','ContactId','toString','NOW()','from','cm_contacts','where','ListId\x20=\x20?','phone\x20IS\x20NOT\x20NULL','phone\x20NOT\x20IN\x20(?)','select','fromQuery','id\x20IN\x20?','str','cm_hopper_final','\x20=\x20?','deletedAt\x20IS\x20NULL','cm_hopper_black','VoiceQueue','outbound','dialCheckDuplicateType','CmList','Lists','then','get','sequelize'];(function(_0x3dd15e,_0x1f0015){var _0x231fd0=function(_0x4f680a){while(--_0x4f680a){_0x3dd15e['push'](_0x3dd15e['shift']());}};_0x231fd0(++_0x1f0015);}(_0x6593,0x1c1));var _0x3659=function(_0x1bfe2b,_0x34856e){_0x1bfe2b=_0x1bfe2b-0x0;var _0x1477d4=_0x6593[_0x1bfe2b];return _0x1477d4;};'use strict';var BPromise=require(_0x3659('0x0'));var util=require(_0x3659('0x1'));var _=require(_0x3659('0x2'));var fs=require('fs');var squel=require(_0x3659('0x3'));var Papa=require('papaparse');var Redis=require(_0x3659('0x4'));var db=require('../../../mysqldb')['db'];var config=require('../../../config/environment');var logger=require('../../../config/logger')(_0x3659('0x5'));config[_0x3659('0x6')]=_[_0x3659('0x7')](config[_0x3659('0x6')],{'host':_0x3659('0x8'),'port':0x18eb});var socket=require('socket.io-emitter')(new Redis(config[_0x3659('0x6')]));require(_0x3659('0x9'))[_0x3659('0xa')](socket);try{if(!process[_0x3659('0xb')][0x2]||process[_0x3659('0xb')][0x2]===_0x3659('0xc')||process[_0x3659('0xb')][0x2]===_0x3659('0xd')){throw new Error(_0x3659('0xe'));}var FILEPATH=process[_0x3659('0xb')][0x2];if(!process['argv'][0x3]||process[_0x3659('0xb')][0x3]===_0x3659('0xc')||process[_0x3659('0xb')][0x3]===_0x3659('0xd')||!process[_0x3659('0xb')][0x4]||process[_0x3659('0xb')][0x4]===_0x3659('0xc')||process[_0x3659('0xb')][0x4]===_0x3659('0xd')){throw new Error(_0x3659('0xf'));}var FIELDS=_[_0x3659('0x10')](process[_0x3659('0xb')][0x3]['split'](','),process[_0x3659('0xb')][0x4][_0x3659('0x11')](','));if(!process['argv'][0x5]||process['argv'][0x5]==='undefined'||process[_0x3659('0xb')][0x5]===_0x3659('0xd')){throw new Error(_0x3659('0x12'));}var LISTID=process[_0x3659('0xb')][0x5];var COMPANYID=process['argv'][0x6]&&process[_0x3659('0xb')][0x6]!==_0x3659('0xc')&&process['argv'][0x6]!==_0x3659('0xd')?process[_0x3659('0xb')][0x6]:null;var DUPLICATES=process[_0x3659('0xb')][0x7]&&process['argv'][0x7]!==_0x3659('0xc')&&process[_0x3659('0xb')][0x7]!==_0x3659('0xd')?process[_0x3659('0xb')][0x7]:null;if(!process[_0x3659('0xb')][0x8]||process[_0x3659('0xb')][0x8]==='undefined'||process[_0x3659('0xb')][0x8]===_0x3659('0xd')){throw new Error(_0x3659('0x13'));}var SOCKET_TIMESTAMP=process['argv'][0x8];}catch(_0x3e2c44){logger[_0x3659('0x14')](_0x3e2c44);endCsv();}var total=0x0;var pTotal=0x0;var success=0x0;var errors=0x0;var duplicates=0x0;var rows=[];var hopperContacts='';var promises=[];var index=0x0;var alreadyInvalid=![];function handleCheckRowError(_0x4b19fb,_0x3cb1cc,_0x154d79,_0x337ef0){var _0x295b94={'message':_0x3cb1cc};_0x295b94[_0x4b19fb]=!![];if(_0x154d79){_0x295b94['contact']=_0x154d79;}if(_0x337ef0){_0x295b94[_0x3659('0x15')]=_0x337ef0;}return _0x295b94;}function isEmail(_0x30a036){return/^([^\x00-\x20\x22\x28\x29\x2c\x2e\x3a-\x3c\x3e\x40\x5b-\x5d\x7f-\xff]+|\x22([^\x0d\x22\x5c\x80-\xff]|\x5c[\x00-\x7f])*\x22)(\x2e([^\x00-\x20\x22\x28\x29\x2c\x2e\x3a-\x3c\x3e\x40\x5b-\x5d\x7f-\xff]+|\x22([^\x0d\x22\x5c\x80-\xff]|\x5c[\x00-\x7f])*\x22))*\x40([^\x00-\x20\x22\x28\x29\x2c\x2e\x3a-\x3c\x3e\x40\x5b-\x5d\x7f-\xff]+|\x5b([^\x0d\x5b-\x5d\x80-\xff]|\x5c[\x00-\x7f])*\x5d)(\x2e([^\x00-\x20\x22\x28\x29\x2c\x2e\x3a-\x3c\x3e\x40\x5b-\x5d\x7f-\xff]+|\x5b([^\x0d\x5b-\x5d\x80-\xff]|\x5c[\x00-\x7f])*\x5d))*$/['test'](_0x30a036);}function checkRow(_0x162ea1,_0xbec9e5,_0x56d14f){return new BPromise(function(_0x280695,_0x30f379){if(_['isNil'](_0x162ea1)){return _0x30f379(handleCheckRowError(_0x3659('0x14'),_0x3659('0x16'),null,_0x56d14f));}if(_0x162ea1[_0x3659('0x17')]&&_0x162ea1[_0x3659('0x17')][_0x3659('0x18')]){var _0x5afd79=_[_0x3659('0x19')](_0x162ea1[_0x3659('0x17')],_0x3659('0x1a'))[_0x3659('0x1b')](';');return _0x30f379(handleCheckRowError(_0x3659('0x14'),_0x5afd79,null,_0x56d14f));}var _0x27a1f2={};for(var _0x3d2d94 in FIELDS){if(FIELDS['hasOwnProperty'](_0x3d2d94)&&FIELDS[_0x3d2d94]){_0x27a1f2[_0x3d2d94]=_0x162ea1[_0x3659('0x1c')][0x0][FIELDS[_0x3d2d94]]||_0x162ea1['data'][0x0]['\ufeff'+FIELDS[_0x3d2d94]];}}if(!_0x27a1f2[_0x3659('0x1d')]){return _0x30f379(handleCheckRowError('error',_0x3659('0x1e'),null,_0x56d14f));}if(!_0x27a1f2[_0x3659('0x1f')]){return _0x30f379(handleCheckRowError(_0x3659('0x14'),'phone\x20not\x20specified!',null,_0x56d14f));}if(_0x27a1f2['birthDate']){var _0x569c74=moment(_0x27a1f2[_0x3659('0x20')],_0x3659('0x21'));if(!_0x569c74[_0x3659('0x22')]()){return _0x30f379(handleCheckRowError('error',_0x3659('0x23'),null,_0x56d14f));}}if(_0x27a1f2[_0x3659('0x24')]){if(!isEmail(_0x27a1f2[_0x3659('0x24')])){return _0x30f379(handleCheckRowError(_0x3659('0x14'),_0x3659('0x25'),null,_0x56d14f));}}_0x27a1f2[_0x3659('0x26')]=LISTID;_0x27a1f2[_0x3659('0x27')]=COMPANYID||undefined;if(DUPLICATES&&DUPLICATES[_0x3659('0x18')]&&_0xbec9e5){var _0x4dc0b2={};for(var _0x252604=0x0,_0x7d34a9=DUPLICATES[_0x3659('0x18')];_0x252604<_0x7d34a9;_0x252604+=0x1){_0x4dc0b2[DUPLICATES[_0x252604]]=_0x27a1f2[DUPLICATES[_0x252604]];}var _0x3849c0=_[_0x3659('0x28')](_0xbec9e5,_0x4dc0b2);if(_0x3849c0){return _0x30f379(handleCheckRowError('duplicate','Duplicate\x20Contact',_0x3849c0,_0x56d14f));}}return db[_0x3659('0x29')][_0x3659('0x2a')](_0x27a1f2,{'raw':!![],'hooks':![],'fields':_[_0x3659('0x2b')](_0x27a1f2)})['then'](function(_0x45a288){if(DUPLICATES&&DUPLICATES[_0x3659('0x18')]&&_0xbec9e5){_0xbec9e5[_0x3659('0x2c')](_[_0x3659('0x2d')](_0x27a1f2,DUPLICATES));}hopperContacts+=(hopperContacts?',':'')+_0x45a288['id'];return _0x280695();})['catch'](function(_0x57cdcf){return _0x30f379(handleCheckRowError(_0x3659('0x14'),'Error\x20while\x20creating\x20contact:\x20'+(_0x57cdcf[_0x3659('0x1a')]||JSON[_0x3659('0x2e')](_0x57cdcf)),null,_0x56d14f));});});}function checkHopper(){function _0x29c93d(){return function(_0x45ab54){logger[_0x3659('0x14')](_0x3659('0x2f'),'checkHopper',util[_0x3659('0x30')](_0x45ab54,{'showHidden':![],'depth':null}));};}var _0x4b0d21=function(_0x189208,_0x38e2e6){var _0x32d998=squel[_0x3659('0x31')]()[_0x3659('0x32')](_0x3659('0x33'))['fromQuery']([_0x3659('0x1f'),_0x3659('0x34'),'ContactId','ListId',_0x38e2e6,_0x3659('0x35'),_0x3659('0x36')],squel['select']()[_0x3659('0x37')]('phone','phone')['field']('NOW()',_0x3659('0x34'))[_0x3659('0x37')]('id',_0x3659('0x38'))[_0x3659('0x37')](LISTID[_0x3659('0x39')](),_0x3659('0x26'))[_0x3659('0x37')](_0x189208['id'][_0x3659('0x39')](),_0x38e2e6)[_0x3659('0x37')](_0x3659('0x3a'),_0x3659('0x35'))[_0x3659('0x37')]('NOW()',_0x3659('0x36'))[_0x3659('0x3b')](_0x3659('0x3c'))[_0x3659('0x3d')]('deletedAt\x20IS\x20NULL')[_0x3659('0x3d')](_0x3659('0x3e'),LISTID[_0x3659('0x39')]())[_0x3659('0x3d')](_0x3659('0x3f'))[_0x3659('0x3d')](_0x3659('0x40'),squel[_0x3659('0x41')]()[_0x3659('0x37')](_0x3659('0x1f'))[_0x3659('0x3b')](_0x3659('0x33'))[_0x3659('0x3d')](_0x38e2e6+'\x20=\x20?',_0x189208['id']['toString']())))[_0x3659('0x39')]();return _0x32d998;};var _0x589dc9=function(_0x531f8c,_0x12df78){var _0x49abeb=squel[_0x3659('0x31')]()[_0x3659('0x32')](_0x3659('0x33'))[_0x3659('0x42')]([_0x3659('0x1f'),_0x3659('0x34'),'ContactId',_0x3659('0x26'),_0x12df78,_0x3659('0x35'),'updatedAt'],squel[_0x3659('0x41')]()[_0x3659('0x37')](_0x3659('0x1f'),'phone')['field']('NOW()','scheduledAt')[_0x3659('0x37')]('id',_0x3659('0x38'))[_0x3659('0x37')](LISTID[_0x3659('0x39')](),_0x3659('0x26'))[_0x3659('0x37')](_0x531f8c['id'][_0x3659('0x39')](),_0x12df78)['field']('NOW()',_0x3659('0x35'))[_0x3659('0x37')](_0x3659('0x3a'),_0x3659('0x36'))[_0x3659('0x3b')]('cm_contacts')[_0x3659('0x3d')]('deletedAt\x20IS\x20NULL')[_0x3659('0x3d')](_0x3659('0x3e'),LISTID[_0x3659('0x39')]())[_0x3659('0x3d')](_0x3659('0x43'),squel[_0x3659('0x44')](hopperContacts))[_0x3659('0x3d')](_0x3659('0x3f'))[_0x3659('0x3d')]('phone\x20NOT\x20IN\x20(?)',squel[_0x3659('0x41')]()[_0x3659('0x37')]('calleridnum')[_0x3659('0x3b')](_0x3659('0x45'))[_0x3659('0x3d')](_0x12df78+_0x3659('0x46'),_0x531f8c['id'][_0x3659('0x39')]()))[_0x3659('0x3d')](_0x3659('0x40'),squel[_0x3659('0x41')]()['field'](_0x3659('0x1f'))[_0x3659('0x3b')]('cm_hopper')[_0x3659('0x3d')](_0x12df78+_0x3659('0x46'),_0x531f8c['id'][_0x3659('0x39')]())))['toString']();return _0x49abeb;};function _0x1d61fe(_0x1da0ff,_0x3857c6){var _0x30ed75=squel[_0x3659('0x31')]()[_0x3659('0x32')]('cm_hopper')[_0x3659('0x42')](['phone','scheduledAt',_0x3659('0x38'),_0x3659('0x26'),_0x3857c6,_0x3659('0x35'),_0x3659('0x36')],squel[_0x3659('0x41')]()['field'](_0x3659('0x1f'),'phone')['field'](_0x3659('0x3a'),'scheduledAt')[_0x3659('0x37')]('id',_0x3659('0x38'))[_0x3659('0x37')](LISTID[_0x3659('0x39')](),_0x3659('0x26'))[_0x3659('0x37')](_0x1da0ff['id']['toString'](),_0x3857c6)[_0x3659('0x37')]('NOW()','createdAt')[_0x3659('0x37')]('NOW()',_0x3659('0x36'))[_0x3659('0x3b')](_0x3659('0x3c'))[_0x3659('0x3d')](_0x3659('0x47'))[_0x3659('0x3d')](_0x3659('0x3e'),LISTID[_0x3659('0x39')]())['where']('id\x20IN\x20?',squel[_0x3659('0x44')](hopperContacts))[_0x3659('0x3d')](_0x3659('0x3f')))['toString']();return _0x30ed75;}function _0x230d02(_0x3cbd38,_0x43e269){var _0x3ca941=squel[_0x3659('0x31')]()[_0x3659('0x32')](_0x3659('0x48'))['fromQuery']([_0x3659('0x1f'),'ContactId','ListId',_0x43e269,'createdAt','updatedAt'],squel[_0x3659('0x41')]()[_0x3659('0x37')](_0x3659('0x1f'),_0x3659('0x1f'))[_0x3659('0x37')]('id','ContactId')['field'](LISTID[_0x3659('0x39')](),'ListId')['field'](_0x3cbd38['id']['toString'](),_0x43e269)[_0x3659('0x37')](_0x3659('0x3a'),_0x3659('0x35'))[_0x3659('0x37')](_0x3659('0x3a'),_0x3659('0x36'))[_0x3659('0x3b')](_0x3659('0x3c'))[_0x3659('0x3d')](_0x3659('0x47'))[_0x3659('0x3d')](_0x3659('0x3e'),LISTID[_0x3659('0x39')]())['where']('id\x20IN\x20?',squel[_0x3659('0x44')](hopperContacts))[_0x3659('0x3d')](_0x3659('0x3f')))[_0x3659('0x39')]();return _0x3ca941;}return db[_0x3659('0x49')]['findAll']({'where':{'type':_0x3659('0x4a')},'attributes':['id',_0x3659('0x4b')],'include':[{'model':db[_0x3659('0x4c')],'as':_0x3659('0x4d'),'where':{'id':LISTID}}]})[_0x3659('0x4e')](function(_0x2f2faf){var _0x46302f=[];if(_0x2f2faf){var _0x5abc39;for(var _0x303954=0x0,_0x196236;_0x303954<_0x2f2faf[_0x3659('0x18')];_0x303954+=0x1){_0x196236=_0x2f2faf[_0x303954][_0x3659('0x4f')]({'plain':!![]});switch(_0x196236[_0x3659('0x4b')]){case'always':_0x46302f[_0x3659('0x2c')](db[_0x3659('0x50')][_0x3659('0x51')](_0x589dc9(_0x196236,_0x3659('0x52')))[_0x3659('0x4e')](function(){})['catch'](_0x29c93d()));break;case _0x3659('0x53'):_0x46302f[_0x3659('0x2c')](db[_0x3659('0x50')][_0x3659('0x51')](_0x4b0d21(_0x196236,_0x3659('0x52')))[_0x3659('0x4e')](function(){})[_0x3659('0x54')](_0x29c93d()));break;default:_0x46302f[_0x3659('0x2c')](db['sequelize']['query'](_0x1d61fe(_0x196236,'VoiceQueueId'))[_0x3659('0x4e')](function(){})[_0x3659('0x54')](_0x29c93d()));}}}return _0x46302f;})[_0x3659('0x55')]()[_0x3659('0x4e')](function(){return db[_0x3659('0x49')]['findAll']({'where':{'type':'outbound'},'attributes':['id'],'include':[{'model':db[_0x3659('0x4c')],'as':'BlackLists','where':{'id':LISTID}}]})[_0x3659('0x4e')](function(_0x543873){var _0xd75f5a=[];if(_0x543873){var _0x498325;for(var _0x297d0f=0x0,_0x5c7ca6;_0x297d0f<_0x543873['length'];_0x297d0f+=0x1){_0x5c7ca6=_0x543873[_0x297d0f][_0x3659('0x4f')]({'plain':!![]});_0xd75f5a['push'](db[_0x3659('0x50')][_0x3659('0x51')](_0x230d02(_0x5c7ca6,_0x3659('0x52')))[_0x3659('0x4e')](function(){})[_0x3659('0x54')](_0x29c93d()));}}return _0xd75f5a;})[_0x3659('0x55')]();})[_0x3659('0x4e')](function(){return db[_0x3659('0x56')][_0x3659('0x57')]({'attributes':['id',_0x3659('0x4b')],'include':[{'model':db[_0x3659('0x4c')],'as':_0x3659('0x4d'),'where':{'id':LISTID}}]})[_0x3659('0x4e')](function(_0x44b0e5){var _0x164009=[];if(_0x44b0e5){for(var _0x3d53e9=0x0,_0x481db7;_0x3d53e9<_0x44b0e5[_0x3659('0x18')];_0x3d53e9+=0x1){_0x481db7=_0x44b0e5[_0x3d53e9]['get']({'plain':!![]});switch(_0x481db7[_0x3659('0x4b')]){case _0x3659('0x58'):_0x164009[_0x3659('0x2c')](db[_0x3659('0x50')][_0x3659('0x51')](_0x589dc9(_0x481db7,'CampaignId'))[_0x3659('0x4e')](function(){})[_0x3659('0x54')](_0x29c93d()));break;case _0x3659('0x53'):_0x164009[_0x3659('0x2c')](db[_0x3659('0x50')]['query'](_0x4b0d21(_0x481db7,_0x3659('0x59')))[_0x3659('0x4e')](function(){})['catch'](_0x29c93d()));break;default:_0x164009[_0x3659('0x2c')](db['sequelize'][_0x3659('0x51')](_0x1d61fe(_0x481db7,_0x3659('0x59')))['then'](function(){})[_0x3659('0x54')](_0x29c93d()));}}}return _0x164009;})[_0x3659('0x55')]();})[_0x3659('0x4e')](function(){return db[_0x3659('0x56')][_0x3659('0x57')]({'attributes':['id'],'include':[{'model':db['CmList'],'as':_0x3659('0x5a'),'where':{'id':LISTID}}]})[_0x3659('0x4e')](function(_0x3ee57c){var _0x136841=[];if(_0x3ee57c){for(var _0x38db8a=0x0,_0x158969;_0x38db8a<_0x3ee57c[_0x3659('0x18')];_0x38db8a+=0x1){_0x158969=_0x3ee57c[_0x38db8a][_0x3659('0x4f')]({'plain':!![]});_0x136841['push'](db[_0x3659('0x50')]['query'](_0x230d02(_0x158969,_0x3659('0x59')))[_0x3659('0x4e')](function(){})[_0x3659('0x54')](_0x29c93d()));}}return _0x136841;})[_0x3659('0x55')]();})[_0x3659('0x54')](function(_0x18e95d){logger[_0x3659('0x14')](_0x3659('0x5b'),'generalCheckHopper',_0x18e95d[_0x3659('0x1a')]);});}var processPromises=function(_0x413e32){return BPromise['all'](promises)['then'](function(_0x28d09e){})[_0x3659('0x54')](function(_0xaf4791){logger[_0x3659('0x14')](_0x3659('0x5c'),JSON[_0x3659('0x2e')](_0xaf4791));})[_0x3659('0x5d')](function(){socket['emit'](_0x3659('0x5e')+SOCKET_TIMESTAMP,{'success':success,'errors':errors,'duplicates':duplicates,'rows':rows});promises=[];success=0x0;errors=0x0;duplicates=0x0;rows=[];if(_0x413e32){return _0x413e32[_0x3659('0x5f')]();}});};var endCsv=function(){return BPromise['resolve']()[_0x3659('0x4e')](function(){if(hopperContacts){return checkHopper();}})[_0x3659('0x4e')](function(){socket['emit']('contact:csv_'+SOCKET_TIMESTAMP,{'finished':!![],'success':success,'errors':errors,'duplicates':duplicates,'rows':rows});try{fs[_0x3659('0x60')](FILEPATH);}catch(_0x43dd94){logger[_0x3659('0x14')](_0x3659('0x61'),JSON['stringify'](_0x43dd94));}finally{process['exit'](0x0);}});};process['on']('SIGINT',function(){logger[_0x3659('0x62')]('CSV\x20import\x20process\x20stopped!');endCsv();});function main(){return BPromise[_0x3659('0x63')]()['then'](function(){if(DUPLICATES){DUPLICATES=DUPLICATES['split'](',');return db[_0x3659('0x29')][_0x3659('0x57')]({'where':{'ListId':LISTID},'attributes':DUPLICATES,'raw':!![]});}})[_0x3659('0x4e')](function(_0x5b4503){var _0x23f7b9=fs[_0x3659('0x64')](FILEPATH,{'highWaterMark':0xf*0x400*0x400});Papa[_0x3659('0x65')](_0x23f7b9,{'header':!![],'skipEmptyLines':!![],'step':function(_0x156f16,_0x46ab1e){total+=0x1;var _0x3f1bfc=total;promises['push'](checkRow(_0x156f16,_0x5b4503,_0x3f1bfc)['then'](function(){success+=0x1;})[_0x3659('0x54')](function(_0x191e4e){if(_0x191e4e[_0x3659('0x14')]){errors+=0x1;delete _0x191e4e['error'];}else if(_0x191e4e['duplicate']){duplicates+=0x1;delete _0x191e4e[_0x3659('0x66')];}rows[_0x3659('0x2c')](_0x191e4e);}));if(total%0xc8===0x0){_0x46ab1e[_0x3659('0x67')]();return processPromises(_0x46ab1e);}},'complete':function(){return processPromises()['then'](function(){logger[_0x3659('0x62')](_0x3659('0x68'));endCsv();});},'error':function(_0x26dcb7,_0x39c4e3){logger[_0x3659('0x62')]('CSV\x20parse\x20error',JSON[_0x3659('0x2e')](_0x26dcb7));endCsv();}});})[_0x3659('0x54')](function(_0x3205f4){logger[_0x3659('0x14')](_0x3659('0x69'),JSON[_0x3659('0x2e')](_0x3205f4));});}main();