Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
Latest 9 from a total of 9 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Make Loan Paymen... | 16843845 | 538 days ago | IN | 0 ETH | 0.00637337 | ||||
Resolve Breach | 16799958 | 544 days ago | IN | 0 ETH | 0.00160699 | ||||
Make Loan Paymen... | 16799940 | 544 days ago | IN | 0.9140825 ETH | 0.00674263 | ||||
Request Draw | 16501001 | 586 days ago | IN | 0 ETH | 0.00163737 | ||||
Fund Loan | 16500997 | 586 days ago | IN | 25.213 ETH | 0.00333652 | ||||
Accept Terms | 16500989 | 586 days ago | IN | 0.1664058 ETH | 0.00676023 | ||||
Propose Terms | 16500956 | 586 days ago | IN | 0 ETH | 0.00128584 | ||||
Request Loan | 16500944 | 586 days ago | IN | 0 ETH | 0.00309257 | ||||
0x60806040 | 16492474 | 587 days ago | IN | 0 ETH | 0.0728998 |
Latest 8 internal transactions
Advanced mode:
Loading...
Loading
Contract Name:
loan20230123
Compiler Version
v0.8.1+commit.df193b15
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2023-01-27 */ // SPDX-License-Identifier: UNLICENSED pragma solidity ^0.8.1; //deployed on mainet at xxx //import "@openzeppelin/contracts/access/Ownable.sol"; interface InftContract { function ownerOf(uint256 tokenId) external view returns (address owner); } //interface to insurance contracty interface Iinsurance { function proposeIns( uint256 _terms, address _beni, address _fundMngr, address _insured, address _primOracle, uint256 _baseFunding, uint256 _insEnds, uint256 _maxBeniPaym ) external returns (uint256 propPayment); //function payBeni() external; function requestClaim() external; function payPremium() external payable returns (bool); function claimsPayed() external returns (uint256); function repayAccum() external returns (uint256); function maxBeniPaym() external returns (uint256);//maxBeniPaym() function claimPaymentRepay() external payable returns (bool); function getMinPayment(uint256 _fundsPromised, uint256 _terms) external returns (uint256); } contract loan20230123 { uint256 public terms; //enumerated terms of contract: /* 0 = none, 1= 10% apr, 1'month' paymentInterval, $50 processing fee(one time-set in principal), originLoanAmount/1200 Tot Min (Monthly) Payment, overpayment goes to pricipal, $5 officer fees, $5 developer fee, contract breach at 1'month', 1% insurance premium, 2'week' drawInterval, %25 (of origninal loan amount) drawMax, %50 funding for initilizaiton */ uint256 public apr; //Anual Percent Rate. as a divisor of balance. ie: balance/apr uint256 public loanBalance; //remaing balnace of loan. in Wei uint256 public amountFunded; //SUM of amount given to the contract to fund "originLoanAmount". in Wei uint256 public originLoanAmount; //orginating loan amount. in Wei uint256 public paymentDue; //unix time of when the next loan payment is due uint256 public paymentMin; //amount value of the minimum next payment. in Wei. uint256 public paymentInterval; //seconds between payments uint256 public currPaymentAccum; //CURRent PAYMENT intervals ACCUMulator of payments made (if borrower pays partial payments) uint256 public breachStatus; //enumerated value of if loan is in default (breach of contract): uint256 public insuranceFee; //'monthly' fee proposed by the insurance contract /* "breachStatus": 000=0=no faults, 001 to 009 = lender fault: ???? 010 to 090 = borrower fault: 010= min payment not made in time, 020=Forclosure 100 to 900 = oracle fault: 100=unlisted oracle fault, */ uint256 public authDrawAmount; //the amount value that is authorized and available to be withdrawn. in Wei. uint256 public loanRequExpires; //unix time of when the current(if avail) loan Request Expires uint256 public loanRequInterval; //LOAN REQUEST INTERVAL in seconds uint256 public minFunding; //minimum amount of funding for loan to initialize per terms. SET HIGH (999999....) for default. uint256 public paymentsMade; //count of payments made uint256 public paymentsRequired; //count of payments due to date uint256 public drawDivisor; //divisor for loan amount to be "Portioned" into. MUST NOT = 0. uint256 public drawsMade; //count of draws made uint256 public drawInterval; //seconds between draws. set high(999999999999......) for safetey. uint256 public lastDraw; //time stamp of last draw uint256 public loanIniDateTime; //time stamp of loan initialization bool public borrowerAuthed; //true IF borrower has aggreed to the proposed terms of the lender. bool public lenderFunded; //true IF full amount of the originLoanAmount has been provided bool public loanInitialized; //true IF loan services have began and all parties agree bool public termsProposed; //true IF lender has proposed terms //address payable public lender; //address of lender= contract owner address public borrower; //address of borrower address public authAgent; //address of authorizing agent (for draws). officer address payable public underWriter; //address of insuring entity(=owner=lender if none) address payable public helixAddr; //address of helix main account uint256 public processFee; //fee to be paid with each payment made to Helix ////define: nftContrAddress, tokenId in constructor address nftContrAddress; uint256 tokenId; //EVENT LIST HERE: event loanRequest(address _from); event loanProposal(uint256 terms, uint256 originLoanAmount); ////set: nftContrAddress, tokenId in constructor constructor(address _nftContrAddress, uint256 _tokenId){ //set all public var's default settings terms=0; //enumerated terms of contract: 0 = none, 1= 10%apr, 1'month' paymentInterval, $50 processing loanBalance=0; //remaing balnace of loan amountFunded=0; originLoanAmount=0; //orginating loan amount paymentDue=0; //unix time of when the next loan payment is due paymentInterval=0; currPaymentAccum=0; paymentMin=0; //amount value of the minimum next payment breachStatus=0; //enumerated value of if loan is in default (breach of contract): 0=no problem, 1= authDrawAmount=0; //the amount value that is authorized and available to be withdrawn loanRequExpires=0; //unix time of when the current(if avail) loan Request Expires minFunding=99999999999999999999999999999999999999999999999999999999999; paymentsMade=0; paymentsRequired=0; drawDivisor=1; drawsMade=0; drawInterval=9999999999999999999999999999999999999; lastDraw=0; //time stamp of last draw loanIniDateTime=0; apr=1; //set for default. NOTE number is divisor. Must NOT = 0 !!!!!!!!!!!!!!!!!! borrowerAuthed=false; //true IF borrower has aggreed to the proposed terms of the lender. lenderFunded=false; //true IF full amount of the originLoanAmount has been provided. !!!!!!!!!!!!!! needs work loanInitialized=false; termsProposed=false; //lender=payable(msg.sender); //address of lender= contract owner //borrower=0; //address of borrower authAgent=msg.sender; //address of authorizing agent (for draws). officer underWriter=payable(msg.sender); //address of insuring entity=owner=lender if none helixAddr=payable(msg.sender); //!!!!!! change on MAINET DEPLOY !!!!!!!!!!!!!!!! //loanReqestInterval=60*10; //!!!!!!!!!!!! change on MAINNET DEPLOY !!!!!!!!!!!!!!!!!!!!! processFee=8000000000000000; //initialy set at .008=~$11(USD) //set: nftContrAddress, tokenId in constructor nftContrAddress=_nftContrAddress; tokenId=_tokenId; } //add "onlyNftOwner" modifier modifier onlyNftOwner(){ //set: nftContrAddress, tokenId in constructor InftContract nftContr=InftContract(nftContrAddress); address nftOwner=nftContr.ownerOf(tokenId); require(msg.sender==nftOwner); _; } /* function getNftOwner() public view returns (address){ InftContract nftContr=InftContract(nftContrAddress); return nftContr.ownerOf(tokenId); } */ function getNftOwner() public view returns (address){ InftContract nftContr=InftContract(nftContrAddress); address _nftOwner=nftContr.ownerOf(tokenId); return _nftOwner; } //resolve a breach function resolveBreach(uint256 _move) public onlyNftOwner { /* "_move" enumerations: acknowledge=1, forgive payment=2, forgive loan=3, claim insurance=4, reset "breach status"=5, forclose=6, reset loan=7..... */ /* "breachStatus": 000=0=no faults, 001 to 009 = lender fault: ???? 010 to 090 = borrower fault: 010= min payment not made in time, 020=Forclosure, 030=ins' claims requested, 040=ins' claim paid,.. 100 to 900 = oracle fault: 100=unlisted oracle fault, */ //solve breach (if possible per aggrement terms) //determine breach type to solve if(borrowerAuthed==false){ if(_move==7){ resetLoan();} } if (breachStatus==10 || breachStatus==30){ //require lender/owner to resolve breach //require(this.owner==msg.sender); if(_move==2){ paymentsMade++; //reduce balance per interval. !!!!!!!!!!!!!!!!!! breachStatus=0; } if(_move==3){ resetLoan(); } if(_move==4){ Iinsurance insContr=Iinsurance(underWriter); //create interface ie:Iweth9 iWeth9=Iweth9(WETH); insContr.requestClaim(); //NOTE: "payBeni()" (on ins' contr) must be also called once claim is requested breachStatus=30; //!!!!!!!!!!!!!!!!! change to enumeration for "insurance" paid BUT "not is good standing" } if(_move==5){ //reset breach status to 0. Assumes borrower is "caught up" breachStatus=0; } if(_move==6){ //Forclose breachStatus=20; //emit notice to/for all parties } } if (breachStatus==20){ if(_move==3){ //recomend "requestCollection();" first distributeFinalPayments(); resetLoan(); } } if(breachStatus==40){ //claim payments have been recieved and borower was/is is late w/payemnts if(_move==6){ //Forclose breachStatus=20; //emit notice to/for all parties } } } //CALCUlate PAYments REQUIRED = number of payments required (so far) to date. function calcPaymentsRequired() internal { //require(loanInitialized==true); if(loanInitialized){ paymentsRequired=(block.timestamp-loanIniDateTime)/paymentInterval; }else{ paymentsRequired=0; } } function distributeFinalPayments() internal { //pay insurance fee if(address(this).balance>insuranceFee){ if(insuranceFee!=0){ Iinsurance insContr=Iinsurance(payable(underWriter)); bool premPaid=insContr.payPremium{value: insuranceFee}(); if(premPaid){ currPaymentAccum=currPaymentAccum-insuranceFee; }//adjust currPayAccum } } //pay insurance claim repay IF required if(breachStatus==40){ //get claims payed from insurer Iinsurance insContr=Iinsurance(payable(underWriter)); uint256 amountOwedToIns=insContr.maxBeniPaym()*insContr.claimsPayed();//!!!change!! uint256 rePayIns=address(this).balance; if(rePayIns>amountOwedToIns){rePayIns=amountOwedToIns;} bool claimRepaid=insContr.claimPaymentRepay{value: rePayIns}(); if(claimRepaid){ currPaymentAccum=currPaymentAccum-rePayIns; //breachStatus=0; } } //pay processor if(address(this).balance>=processFee){ transfer(payable(helixAddr),processFee); currPaymentAccum=currPaymentAccum-processFee; } //calculate amount owed to owner(typicaly remaining balance) uint256 payNftOwner=paymentMin; //!!!!!!!!!!!!!!!!!Needs calculation !!!!!!!!!!!!!! //pay Nft Owner address _owner=getNftOwner(); if(address(this).balance>payNftOwner){ transfer(payable(_owner),payNftOwner); currPaymentAccum=currPaymentAccum-payNftOwner; //?? Pay overpayment to Borower IF required if(paymentsRequired<=paymentsMade){ if(breachStatus==0){ transfer(payable(borrower),address(this).balance);} } }else{ //pay ALL remaining balance to NftOwner if(address(this).balance!=0){ transfer(payable(_owner),address(this).balance); } } //reset breachStatus breachStatus=0; } function distributeFees(uint256 currentIntrest) internal { // pay/distribute fees: intrest->owner, insurance->insurer, manageFee->manager FROM currPayemntAccum //transfer(payable(underWriter), insuranceFee); //call payPremium() //(bool success, ) = underWriter.call{value: insuranceFee}(""); // !!!!!!!!!!!!! revise this with new terms format !!!!!!!!!!!!!!! if((terms!=0) && (currPaymentAccum>insuranceFee)){ Iinsurance insContr=Iinsurance(payable(underWriter)); //create interface ie:Iweth9 iWeth9=Iweth9(WETH); //IF balance>insuranceFee if(address(this).balance>insuranceFee){ if(insuranceFee!=0){ bool premPaid=insContr.payPremium{value: insuranceFee}(); if(premPaid){ currPaymentAccum=currPaymentAccum-insuranceFee; }//adjust currPayAccum } } address _owner=getNftOwner(); //owner(); //IF balance>currentIntrest if(address(this).balance>currentIntrest){ transfer(payable(_owner),currentIntrest); currPaymentAccum=currPaymentAccum-currentIntrest; } //IF balce>processfee if(address(this).balance>=processFee){ transfer(payable(helixAddr),processFee); currPaymentAccum=currPaymentAccum-processFee; } } } //this function called WHEN "if(currPaymentAccum>=paymentMin)" function calcNewBalance() internal{ require(loanInitialized==true); //require(currPaymentAccum>=paymentMin); //calculate new balance with currPaymenAccum. //apply overpayment to Balance IF Terms approve uint256 applyToBalance = 0; uint256 currentIntrest=calcCurrentIntrest(); //(loanBalance*apr)/100; //NOTE: (currentIntrest + insuranceFee + processFee) MUST NOT BE > paymentMin applyToBalance=applyToBalance + (paymentMin-currentIntrest-insuranceFee-processFee); //!!!!!!!!! fees need defined !!!!!!!!!!! if(applyToBalance>loanBalance){ applyToBalance=loanBalance;} loanBalance=loanBalance-applyToBalance; //distribute fees: intrest->owner, insurance->insurer, manageFee->manager distributeFees(currentIntrest+applyToBalance); paymentDue=paymentDue + paymentInterval; paymentsMade=paymentsMade + 1; } function calcCurrentIntrest() internal returns(uint256){ uint256 aprDivisor=12; //divisor of apr pay intevals. default set to "12" for monthly //adjust divisor per paymentInterval: if(paymentInterval==60*5){aprDivisor=6;} //speed test every 5 min.(with assumes of 2 months if(paymentInterval==60*60*24){aprDivisor=365;} //daily if(paymentInterval==60*60*24*7){aprDivisor=52;} //weekly if(paymentInterval==60*60*24*7*2){aprDivisor=26;} //every 2 weeks if(paymentInterval==2628000){aprDivisor=12;} //monthly if(paymentInterval==7889238){aprDivisor=4;} //quarterly if(paymentInterval==31556952){aprDivisor=1;} //annually uint256 currentIntrest=(loanBalance*apr)/100; //!!!!!!!!!!!!!!! needs revision for dynamic test payment intervals.pays per annum currentIntrest=currentIntrest/aprDivisor; //"12" for monthly payment terms only !!!!!!!!!!! return currentIntrest; } function calcBreachStatus() public { require(loanInitialized==true); //check current interval time status calcPaymentsRequired(); //CALCUlate PAYments REQUIRED //breachStatus "40"= claim(s) have been paid. if(breachStatus==40){ //claim(s) has been paid //check if borrower is caught up if(paymentsMade>paymentsRequired){ //refund underwriter/insurer. call"function claimPaymentRepay() external payable;" Iinsurance insContr=Iinsurance(payable(underWriter)); //create interface ie:Iweth9 iWeth9=Iweth9(WETH); //!!!!!!!!!!!!!!!!!!! //add "repay amount"=maxBeniPaym (of Ins' contract) //maxBeniPay //NOTE: !!!!!!! maxBeniPaym(of Ins' contract) MUST equal "original" paymentMin(of Loan contract) uint256 rePayIns=currPaymentAccum; uint256 amountOwedToIns=insContr.maxBeniPaym()-insContr.repayAccum();//!!!change!! if(rePayIns>amountOwedToIns){rePayIns=amountOwedToIns;} bool claimRepaid=insContr.claimPaymentRepay{value: rePayIns}(); //IF 'claim repay' returns TRUE THEN decrement paymentsMade if(claimRepaid){ paymentsMade=paymentsMade+1; currPaymentAccum=currPaymentAccum-rePayIns; breachStatus=0; } } } if(currPaymentAccum>=paymentMin){ calcNewBalance(); //calculate new balance //IF loan is over THEN "terms=0" IGNORE Following lines uint256 makeUpPaymentsNeeded=0; //!!!!!!!!!!!!!change to be set if(paymentsRequired>paymentsMade){ makeUpPaymentsNeeded=paymentsRequired-paymentsMade;} uint256 makeUpPaymentsAvailable=currPaymentAccum/paymentMin; if(makeUpPaymentsAvailable>makeUpPaymentsNeeded){ makeUpPaymentsAvailable=makeUpPaymentsNeeded;} if(makeUpPaymentsAvailable>0){ for(uint i=0; i>makeUpPaymentsAvailable; i++){ if(currPaymentAccum>=paymentMin){calcNewBalance(); }//calculate new balance //IF loan is over THEN "terms=0" IGNORE Following lines if(terms==0){ i=makeUpPaymentsAvailable+1;} } } } //IF "Loan Balance" is less than payment min...."Final Payment" set. if(loanBalance<paymentMin){ uint256 aprDivisor=12; //divisor of apr pay intevals. default set to "12" for monthly //adjust divisor per paymentInterval: if(paymentInterval==60*5){aprDivisor=6;} //speed test every 5 min.(with assumes of 2 months if(paymentInterval==60*60*24){aprDivisor=365;} //daily if(paymentInterval==60*60*24*7){aprDivisor=52;} //weekly if(paymentInterval==60*60*24*7*2){aprDivisor=26;} //every 2 weeks if(paymentInterval==2628000){aprDivisor=12;} //monthly if(paymentInterval==7889238){aprDivisor=4;} //quarterly if(paymentInterval==31556952){aprDivisor=1;} //annually uint256 currentIntrest=(loanBalance*apr)/100; //!!!!!!!!!!!!!!! needs revision for dynamic test payment intervals.pays per annum currentIntrest=currentIntrest/aprDivisor; //"12" for monthly payment terms only !!!!!!!!!!! paymentMin=loanBalance + currentIntrest + insuranceFee + processFee; } if(breachStatus!=20){ if(breachStatus!=40){ if(paymentsRequired>paymentsMade){ breachStatus=10; } //breachStaqtus "010" = NON MISSED PAYMENT(s) } } } function resetLoan() internal { //reset all var's back to constructor. NOT A PUBLIC VAR. //set/reset defaultStatus var per terms of agreement terms=0; //enumerated terms of contract: 0 = none, 1= 10%apr, 1'month' paymentInterval, $50 processing loanBalance=0; //remaing balnace of loan amountFunded=0; originLoanAmount=0; //orginating loan amount paymentDue=0; //unix time of when the next loan payment is due paymentInterval=0; currPaymentAccum=0; paymentMin=0; //amount value of the minimum next payment breachStatus=0; //enumerated value of if loan is in default (breach of contract): 0=no problem, 1= authDrawAmount=0; //the amount value that is authorized and available to be withdrawn loanRequExpires=0; //unix time of when the current(if avail) loan Request Expires minFunding=99999999999999999999999999999999999999999999999999999999999; paymentsMade=0; paymentsRequired=0; drawDivisor=1; drawsMade=0; drawInterval=9999999999999999999999999999999999999; lastDraw=0; apr=1; borrowerAuthed=false; //true IF borrower has aggreed to the proposed terms of the lender. lenderFunded=false; //true IF full amount of the originLoanAmount has been provided loanInitialized=false; termsProposed=false; //lender=0; //address of lender= contract owner //borrower=0; //address of borrower authAgent=getNftOwner();//lender; //"Officer"/"Oricale". address of authorizing agent (for draws). officer underWriter=payable(getNftOwner());//lender; //address of insuring entity=owner=lender if none } function requestLoan(uint256 _terms, uint256 _originLoanAmount) public { //check inputs to be in "bounds" require(loanInitialized==false); if (loanRequExpires==0 || loanRequExpires<block.timestamp){ //!!!!check for currPaymentAcumm>0 (borrower may have began Auth' process)!!!!! require(currPaymentAccum>=address(this).balance); //refund borrower currPaymentAccum. !!!!!!!!!!!!!!!!!!!!!!! if(currPaymentAccum!=0){transfer(payable(borrower),currPaymentAccum);} currPaymentAccum=0; resetLoan(); //set public var's: terms, loanBalance, borrower addr...... terms=_terms; //enumerated terms of contract: 0 = none, 1= 10%apr, 1'month' paymentInterval, $50 processing originLoanAmount=_originLoanAmount; //orginating loan amount loanRequExpires=block.timestamp + loanRequInterval; //unix time of when the current(if avail) loan Request Expires borrower=msg.sender; //address of borrower //call insurance contract for proposed insuranc request //emit "loan requ'" event emit loanRequest(borrower); } } //call this function to Propose Terms OR to reset to Default (if Loan Request has Expired) function proposeTerms(uint256 _terms, uint256 _amount, address _insurer) external onlyNftOwner { require(loanInitialized==false); if (loanRequExpires!=0 || loanRequExpires>block.timestamp){ //set public var's: terms, loanBalance, borrower addr...... terms=_terms; //enumerated terms of contract: 0 = none, 1= 10%apr, 1'month' paymentInterval, $50 processing originLoanAmount=_amount; //orginating loan amount loanRequExpires=block.timestamp + loanRequInterval; //unix time of when the current(if avail) loan Request Expires termsProposed=true; underWriter=payable(_insurer); emit loanProposal(terms, originLoanAmount);//emit "proposal event" }else{ //!!!!check for currPaymentAcumm>0 (borrower may have began Auth' process)!!!!! require(currPaymentAccum>=address(this).balance); //refund borrower currPaymentAccum. !!!!!!!!!!!!!!!!!!!!!!! if(currPaymentAccum!=0){transfer(payable(borrower),currPaymentAccum);} currPaymentAccum=0; resetLoan(); } } //borrower can accept terms IF termsProposed==true function acceptTerms() payable public { //get addr of caller //verify addr=borrower require (termsProposed==true); require(loanInitialized==false); require(borrower==msg.sender); //bool accept=false; //uint256 amountPaid=msg.value; currPaymentAccum=currPaymentAccum + msg.value; uint256 iniFee=(66*originLoanAmount)/10000; if(currPaymentAccum>=iniFee){ borrowerAuthed=true; bool setError=setTerms(); if(setError==true){ loanInitialized=false;} } if(msg.value==0){ //borrower is declining require(currPaymentAccum>=address(this).balance); //refund borrower currPaymentAccum. !!!!!!!!!!!!!!!!!!!!!!! if(currPaymentAccum!=0){transfer(payable(borrower),currPaymentAccum);} currPaymentAccum=0; resetLoan(); } } function setTerms() internal returns (bool){ //AB ie 12. B is 1 for overpayment to principle OR 0 if overpayemnt goes to next month payment bool setError=false; //!!!!!!!!!!!!!! needs to be set in each "if" block !!!!!!!!!!!!!!!!!!!! //new terms format:1,aaaa,bbbb,cccc,dddd,eeeeee /* aaaa=total designed payments bbbb=payment frequency cccc=apr dddd=insurance divisor eeeeee=Initial Base Payment="eth"/10000. see "iniPaymentCalc"- sheets/excell sheet to calc' Example:"speed test" =10006000100020202001686, with 1 ETH loan Example2:"unInsured speed test" =10006000100020200001686, with 1 ETH loan 0006=total designed payments 0001=payment frequency=enumeration of "speed test"=every 5 min 0002=apr=2 percent=.02 xx02=insurance divisor, xx=insurance terms(see ins' contract) 016="eth"/100=.16 (eth) */ require(terms>100000000000000000000); //ie 12222333344445555666666 originLoanAmount=originLoanAmount+ 0;//"50USD"; //!!!!!!!!!need to set standard for adding USD to WEI !!!!!!!!!!!! minFunding=originLoanAmount / 2; //??????????????????????????? uint256 _terms=terms; uint256 iniPayment=_terms % 1000000; _terms=_terms - iniPayment; _terms=_terms/1000000; iniPayment=iniPayment * 10**14; /* uint256 iniPayment=_terms % 10000; _terms=_terms - iniPayment; _terms=_terms/10000; iniPayment=iniPayment * 10**16; */ uint256 insDivisor= _terms % 10000; _terms=_terms - insDivisor; _terms=_terms/10000; apr= _terms % 10000; _terms=_terms - apr; _terms=_terms/10000; uint256 payFrequ= _terms % 10000; _terms=_terms - payFrequ; _terms=_terms/10000; //paymentInterval=60*5; paymentInterval=0; if(payFrequ==1){ paymentInterval=60*5;} //speed test every 5 min if(payFrequ==2){ paymentInterval=60*60*24;} //daily if(payFrequ==3){ paymentInterval=60*60*24*7;} //weekly if(payFrequ==4){ paymentInterval=60*60*24*7*2;} //every 2 weeks if(payFrequ==5){ paymentInterval=2628000;} //monthly if(payFrequ==6){ paymentInterval=7889238;} //quarterly if(payFrequ==7){ paymentInterval=31556952;} //annually require(paymentInterval!=0); uint256 totPayments= _terms % 10000; //_terms=_terms - totPays; //_terms=_terms/10000; breachStatus=0; //enumerated value of if loan is in default (breach of contract): 0=no problem, 1= authDrawAmount=0; //the amount value that is authorized and available to be withdrawn authAgent=payable(getNftOwner()); //this.owner.address); drawDivisor=1; //set to divide the total loan amount into "1" protions.= max amount of draws drawInterval=0; //all can be drawn upfront lastDraw=0; //timestamp of previouw draw authAgent=getNftOwner();//lender; //lender is authAgent //underWriter=lender; //lender is insurer....is set with "proposal" processFee=(2*iniPayment)/100; //processFee: set as a function of "iniPayment". = .02 of iniPayent if(insDivisor!=0){ /* uint256 insDivisor= _terms % 10000; _terms=_terms - insDivisor; _terms=_terms/10000; */ //parse terms, divisor _terms=insDivisor; insDivisor=_terms % 100; _terms=_terms - insDivisor; _terms=_terms/100; uint256 insTerms=_terms % 100; //!!!!!!call insurance contract's "propose" function (IF underWriter!=lender) Iinsurance insContr=Iinsurance(underWriter); //create interface ie:Iweth9 iWeth9=Iweth9(WETH); /* ( uint256 _terms, address _beni, address _fundMngr, address _insured, address _primOracle, uint256 _baseFunding, uint256 _insEnds, uint256 _maxBeniPaym ) */ //!!!!!!!!!!!! NOTE: address(this)=this.owner.address //uint256 insFeeEstimate=(originLoanAmount/insDivisor); //insFeeEstimate=(insFeeEstimate*5)/10000; //!!!!!!!!!!!!revise with data from ins' contract //call "function getMinPayment(uint256 _fundsPromised, uint256 _terms)" FROM ins' uint256 insFeeEstimate=insContr.getMinPayment((originLoanAmount/insDivisor), insTerms); uint256 insEnds=block.timestamp + (paymentInterval*totPayments); uint256 maxBeniPay=iniPayment + processFee + insFeeEstimate; address _owner=getNftOwner(); // insuranceFee=insContr.proposeIns(insTerms, address(this), _owner, address(this), address(this),(originLoanAmount/insDivisor), insEnds, maxBeniPay); if(insuranceFee==99999999999999999999999999){ setError=true; } // THEN error if(insuranceFee==0){ setError=true; } require(setError==false, "Ins Fee NOT Set"); }else{ insuranceFee=0; } //processFee=(2*iniPayment)/100; //processFee: set as a function of "iniPayment". = .02 of iniPayent paymentMin=iniPayment + processFee + insuranceFee; return setError; } // Function to deposit Ether into this contract. // Call this function along with some Ether. // The balance of this contract will be automatically updated. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! function fundLoan() public payable { //get address of lender //get address of caller //check var's to be in bounds: originLoanAmount amountFunded=amountFunded + msg.value; if (amountFunded>=minFunding && loanInitialized==false){ //Disperse iniFee=currPaymentAccum. !!!!!!!!!!!!!!!!!!!!! transfer(payable(helixAddr),currPaymentAccum); currPaymentAccum=0; initializeLoan(); } //set public var's: loanBalance, authorized draw amount... } function initializeLoan() internal { //initialize starting dates and draw schedules... per terms require(loanInitialized==false); loanInitialized=true; paymentsMade=0; paymentsRequired=0; drawsMade=0; loanBalance=originLoanAmount; //remaing balnace of loan loanIniDateTime=block.timestamp; //set loan start timeStamp paymentDue=loanIniDateTime + paymentInterval; //unix time of when the next loan payment is due authDrawAmount=originLoanAmount / drawDivisor; //the amount value that is authorized and available to be withdrawn } function requestDraw() public { require(loanInitialized==true); require(borrower==msg.sender); require(breachStatus==0); require(drawsMade<drawDivisor); require(block.timestamp>(lastDraw + drawInterval)); //require: "contract balance" > authDrawAmount //check contract status: authorized draw amount, lastDraw, default status, ... //if OK: send _amount to borrower: authDrawAmount address payable _to = payable(borrower); (bool success, ) = _to.call{value: authDrawAmount}(""); require(success, "Failed to send Ether"); //update: drawsMade, authDrawAmount, lastDraw drawsMade++; lastDraw=block.timestamp; authDrawAmount=0; //needs to be reset by Officer/Oricle } //must be called after each draw function authorizeDraw() public { require(authAgent==msg.sender); //get address of caller require(drawsMade<drawDivisor); //verify authAgent = caller authDrawAmount=originLoanAmount / drawDivisor; //set authDrawAmount var } function makeLoanPayment() public payable { uint256 amountPaid=msg.value; currPaymentAccum=currPaymentAccum + amountPaid; //payment is for "claim". set breach status for "claim payed". if(msg.sender==underWriter){ breachStatus=40;} if(loanBalance==0){ //distributeFees(address(this).balance); distributeFinalPayments(); if(breachStatus==0){ resetLoan();} }else{ calcBreachStatus(); } } //lender request to contract for dispersement of recieved funds function requestCollection() external onlyNftOwner{ //IF loan is not "initialized" (forclosed?) if(loanInitialized==false){ //loan has been reset (?after forclosure) //check paymAccum for any value-if "true" THEN "fast pay" all parties(insurance, processor(Helix),...) //!!!! Caluclate (per terms) insurance portion !!!!!!!! uint256 payIns=insuranceFee*(paymentsRequired-paymentsMade); //pay insurance //create interface ie:Iweth9 iWeth9=Iweth9(WETH); if(terms!=40 && payIns!=0){ Iinsurance insContr=Iinsurance(underWriter); //create interface ie:Iweth9 iWeth9=Iweth9(WETH); bool premPaid=insContr.payPremium{value: payIns}(); if(premPaid){ insuranceFee=0; }//set vars for no more ins' pay's //check for claims paid //uint256 claimsPaid=insContr.claimsPayed(); } //!!!! Calculate (per terms Helix portion) !!!!!!!!!!!! //pay Helix //"process fee"="helix fee"= function of "originLoanAmount" /* (=originLoanAmount * "intrest percent rate Interval")/("# of payments per Interval" * 1000) */ //uint256 processFee=(originLoanAmount*5)/1000; //processFee=processFee/12;//aka: (originLoanAmount*5)/12000 uint256 payHelix=processFee*(paymentsRequired-paymentsMade); transfer(payable(helixAddr),payHelix); //pay remaining balnace to lender(owner) address payable p=payable(msg.sender); (bool success, ) = p.call{value: address(this).balance}(""); require(success, "Failed to send Ether"); resetLoan();//reset all loan var's } } // Function to transfer Ether from this contract to address from input. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! function transfer(address payable _to, uint _amount) internal { // Note that "to" is declared as payable (bool success, ) = _to.call{value: _amount}(""); require(success, "Failed to send Ether"); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_nftContrAddress","type":"address"},{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"terms","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"originLoanAmount","type":"uint256"}],"name":"loanProposal","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_from","type":"address"}],"name":"loanRequest","type":"event"},{"inputs":[],"name":"acceptTerms","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"amountFunded","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"apr","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"authAgent","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"authDrawAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"authorizeDraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"borrower","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"borrowerAuthed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"breachStatus","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"calcBreachStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"currPaymentAccum","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"drawDivisor","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"drawInterval","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"drawsMade","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"fundLoan","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"getNftOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"helixAddr","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"insuranceFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastDraw","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lenderFunded","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"loanBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"loanIniDateTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"loanInitialized","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"loanRequExpires","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"loanRequInterval","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"makeLoanPayment","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"minFunding","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"originLoanAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"paymentDue","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"paymentInterval","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"paymentMin","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"paymentsMade","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"paymentsRequired","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"processFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_terms","type":"uint256"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"address","name":"_insurer","type":"address"}],"name":"proposeTerms","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"requestCollection","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"requestDraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_terms","type":"uint256"},{"internalType":"uint256","name":"_originLoanAmount","type":"uint256"}],"name":"requestLoan","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_move","type":"uint256"}],"name":"resolveBreach","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"terms","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"termsProposed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"underWriter","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
60806040523480156200001157600080fd5b50604051620036ce380380620036ce8339818101604052810190620000379190620002b7565b60008081905550600060028190555060006003819055506000600481905550600060058190555060006007819055506000600881905550600060068190555060006009819055506000600b819055506000600c81905550780fee50b7025c36a0802f236d04753d5b48e7ffffffffffffff600e819055506000600f819055506000601081905550600160118190555060006012819055506f0785ee10d5da46d900f4369fffffffff60138190555060006014819055506000601581905550600180819055506000601660006101000a81548160ff0219169083151502179055506000601660016101000a81548160ff0219169083151502179055506000601660026101000a81548160ff0219169083151502179055506000601660036101000a81548160ff02191690831515021790555033601760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555033601860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555033601960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550661c6bf526340000601a8190555081601b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601c8190555050506200036a565b6000815190506200029a8162000336565b92915050565b600081519050620002b18162000350565b92915050565b60008060408385031215620002cb57600080fd5b6000620002db8582860162000289565b9250506020620002ee85828601620002a0565b9150509250929050565b600062000305826200030c565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6200034181620002f8565b81146200034d57600080fd5b50565b6200035b816200032c565b81146200036757600080fd5b50565b613354806200037a6000396000f3fe6080604052600436106102515760003560e01c806387f478de11610139578063aa452fa6116100b6578063d50256251161007a578063d5025625146107a9578063e24078e8146107d4578063e792847b146107ff578063ec9fba451461082a578063f1e02f3e14610855578063f9c36fde1461088057610251565b8063aa452fa6146106d4578063ad4d6cb7146106fd578063ae20a8e114610728578063b6768cd114610753578063bc06c4cc1461077e57610251565b80639598c02f116100fd5780639598c02f1461061157806397c4fac71461063c5780639a4df66f14610667578063a57848b614610692578063a8e981ed146106a957610251565b806387f478de1461055d5780638afbfa45146105885780638c8a9a8b146105b15780638db57994146105dc57806391440260146105e657610251565b806351c6411e116101d257806372aea1d51161019657806372aea1d51461047e57806374f91591146104a95780637674cee3146104d25780637df1f1b9146104fd578063815af9081461052857806383b2fb301461053257610251565b806351c6411e146103cf57806357ded9c9146103e65780635dd577ec1461041157806361aa8d931461043c5780636df7f5ed1461046757610251565b80631bf05579116102195780631bf055791461030c5780631cc1cf46146103375780632b8fdd89146103625780632dae710b1461038d5780634ff59cf8146103a457610251565b80630aad8a86146102565780630f554b171461028157806314ee728b146102ac57806315978dbf146102d7578063193a4249146102e1575b600080fd5b34801561026257600080fd5b5061026b6108ab565b6040516102789190612f5f565b60405180910390f35b34801561028d57600080fd5b506102966108b1565b6040516102a39190612f5f565b60405180910390f35b3480156102b857600080fd5b506102c16108b7565b6040516102ce9190612ee9565b60405180910390f35b6102df6108dd565b005b3480156102ed57600080fd5b506102f661098d565b6040516103039190612f5f565b60405180910390f35b34801561031857600080fd5b50610321610993565b60405161032e9190612f5f565b60405180910390f35b34801561034357600080fd5b5061034c610999565b6040516103599190612f5f565b60405180910390f35b34801561036e57600080fd5b5061037761099f565b6040516103849190612ece565b60405180910390f35b34801561039957600080fd5b506103a2610a5e565b005b3480156103b057600080fd5b506103b9610e73565b6040516103c69190612f5f565b60405180910390f35b3480156103db57600080fd5b506103e4610e79565b005b3480156103f257600080fd5b506103fb61118a565b6040516104089190612f5f565b60405180910390f35b34801561041d57600080fd5b50610426611190565b6040516104339190612f5f565b60405180910390f35b34801561044857600080fd5b50610451611196565b60405161045e9190612f5f565b60405180910390f35b34801561047357600080fd5b5061047c61119c565b005b34801561048a57600080fd5b5061049361121e565b6040516104a09190612f04565b60405180910390f35b3480156104b557600080fd5b506104d060048036038101906104cb9190612d37565b611231565b005b3480156104de57600080fd5b506104e76114aa565b6040516104f49190612f5f565b60405180910390f35b34801561050957600080fd5b506105126114b0565b60405161051f9190612ece565b60405180910390f35b6105306114d6565b005b34801561053e57600080fd5b50610547611664565b6040516105549190612f5f565b60405180910390f35b34801561056957600080fd5b5061057261166a565b60405161057f9190612f5f565b60405180910390f35b34801561059457600080fd5b506105af60048036038101906105aa9190612dc5565b611670565b005b3480156105bd57600080fd5b506105c66118b6565b6040516105d39190612f5f565b60405180910390f35b6105e46118bc565b005b3480156105f257600080fd5b506105fb61193d565b6040516106089190612f5f565b60405180910390f35b34801561061d57600080fd5b50610626611943565b6040516106339190612f5f565b60405180910390f35b34801561064857600080fd5b50610651611949565b60405161065e9190612f5f565b60405180910390f35b34801561067357600080fd5b5061067c61194f565b6040516106899190612f5f565b60405180910390f35b34801561069e57600080fd5b506106a7611955565b005b3480156106b557600080fd5b506106be611b09565b6040516106cb9190612f5f565b60405180910390f35b3480156106e057600080fd5b506106fb60048036038101906106f69190612d89565b611b0f565b005b34801561070957600080fd5b50610712611c5f565b60405161071f9190612f5f565b60405180910390f35b34801561073457600080fd5b5061073d611c65565b60405161074a9190612ee9565b60405180910390f35b34801561075f57600080fd5b50610768611c8b565b6040516107759190612f5f565b60405180910390f35b34801561078a57600080fd5b50610793611c91565b6040516107a09190612f5f565b60405180910390f35b3480156107b557600080fd5b506107be611c97565b6040516107cb9190612f5f565b60405180910390f35b3480156107e057600080fd5b506107e9611c9d565b6040516107f69190612f04565b60405180910390f35b34801561080b57600080fd5b50610814611cb0565b6040516108219190612ece565b60405180910390f35b34801561083657600080fd5b5061083f611cd6565b60405161084c9190612f04565b60405180910390f35b34801561086157600080fd5b5061086a611ce9565b6040516108779190612f04565b60405180910390f35b34801561088c57600080fd5b50610895611cfc565b6040516108a29190612f5f565b60405180910390f35b60085481565b60125481565b601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000349050806008546108f0919061303d565b600881905550601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614156109555760286009819055505b6000600254141561098157610968611d02565b6000600954141561097c5761097b6120cb565b5b61098a565b610989610a5e565b5b50565b600e5481565b60025481565b60075481565b600080601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905060008173ffffffffffffffffffffffffffffffffffffffff16636352211e601c546040518263ffffffff1660e01b8152600401610a049190612f5f565b60206040518083038186803b158015610a1c57600080fd5b505afa158015610a30573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a549190612ce5565b9050809250505090565b60011515601660029054906101000a900460ff16151514610a7e57600080fd5b610a86612286565b60286009541415610ca857601054600f541115610ca7576000601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690506000600854905060008273ffffffffffffffffffffffffffffffffffffffff1663de3ce0a26040518163ffffffff1660e01b8152600401602060405180830381600087803b158015610b1557600080fd5b505af1158015610b29573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b4d9190612d60565b8373ffffffffffffffffffffffffffffffffffffffff1663cff6c3bb6040518163ffffffff1660e01b8152600401602060405180830381600087803b158015610b9557600080fd5b505af1158015610ba9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bcd9190612d60565b610bd7919061311e565b905080821115610be5578091505b60008373ffffffffffffffffffffffffffffffffffffffff1663d78c06e4846040518263ffffffff1660e01b81526004016020604051808303818588803b158015610c2f57600080fd5b505af1158015610c43573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610c689190612d0e565b90508015610ca2576001600f54610c7f919061303d565b600f8190555082600854610c93919061311e565b60088190555060006009819055505b505050505b5b60065460085410610d5657610cbb6122cc565b6000600f546010541115610cdc57600f54601054610cd9919061311e565b90505b6000600654600854610cee9190613093565b905081811115610cfc578190505b6000811115610d535760005b81811115610d515760065460085410610d2457610d236122cc565b5b600080541415610d3e57600182610d3b919061303d565b90505b8080610d49906131ac565b915050610d08565b505b50505b6006546002541015610e46576000600c905061012c6007541415610d7957600690505b620151806007541415610d8c5761016d90505b62093a806007541415610d9e57603490505b621275006007541415610db057601a90505b622819a06007541415610dc257600c90505b627861566007541415610dd457600490505b6301e185586007541415610de757600190505b60006064600154600254610dfb91906130c4565b610e059190613093565b90508181610e139190613093565b9050601a54600a5482600254610e29919061303d565b610e33919061303d565b610e3d919061303d565b60068190555050505b601460095414610e7157602860095414610e7057600f546010541115610e6f57600a6009819055505b5b5b565b600f5481565b6000601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905060008173ffffffffffffffffffffffffffffffffffffffff16636352211e601c546040518263ffffffff1660e01b8152600401610edd9190612f5f565b60206040518083038186803b158015610ef557600080fd5b505afa158015610f09573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f2d9190612ce5565b90508073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610f6757600080fd5b60001515601660029054906101000a900460ff1615151415611186576000600f54601054610f95919061311e565b600a54610fa291906130c4565b9050602860005414158015610fb8575060008114155b1561107b576000601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905060008173ffffffffffffffffffffffffffffffffffffffff166329c08ba2846040518263ffffffff1660e01b81526004016020604051808303818588803b15801561102e57600080fd5b505af1158015611042573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906110679190612d0e565b90508015611078576000600a819055505b50505b6000600f5460105461108d919061311e565b601a5461109a91906130c4565b90506110c8601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682612395565b600033905060008173ffffffffffffffffffffffffffffffffffffffff16476040516110f390612eb9565b60006040518083038185875af1925050503d8060008114611130576040519150601f19603f3d011682016040523d82523d6000602084013e611135565b606091505b5050905080611179576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161117090612f3f565b60405180910390fd5b6111816120cb565b505050505b5050565b60015481565b60145481565b601a5481565b3373ffffffffffffffffffffffffffffffffffffffff16601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146111f657600080fd5b6011546012541061120657600080fd5b6011546004546112169190613093565b600b81905550565b601660009054906101000a900460ff1681565b6000601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905060008173ffffffffffffffffffffffffffffffffffffffff16636352211e601c546040518263ffffffff1660e01b81526004016112959190612f5f565b60206040518083038186803b1580156112ad57600080fd5b505afa1580156112c1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112e59190612ce5565b90508073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461131f57600080fd5b60001515601660009054906101000a900460ff161515141561134e57600783141561134d5761134c6120cb565b5b5b600a60095414806113615750601e600954145b1561146157600283141561139057600f6000815480929190611382906131ac565b919050555060006009819055505b60038314156113a2576113a16120cb565b5b600483141561143c576000601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff1663ceddc0216040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561141a57600080fd5b505af115801561142e573d6000803e3d6000fd5b50505050601e600981905550505b600583141561144e5760006009819055505b60068314156114605760146009819055505b5b601460095414156114875760038314156114865761147d611d02565b6114856120cb565b5b5b602860095414156114a55760068314156114a45760146009819055505b5b505050565b60065481565b601660049054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60011515601660039054906101000a900460ff161515146114f657600080fd5b60001515601660029054906101000a900460ff1615151461151657600080fd5b3373ffffffffffffffffffffffffffffffffffffffff16601660049054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461157057600080fd5b3460085461157e919061303d565b6008819055506000612710600454604261159891906130c4565b6115a29190613093565b905080600854106115ff576001601660006101000a81548160ff02191690831515021790555060006115d2612446565b90506001151581151514156115fd576000601660026101000a81548160ff0219169083151502179055505b505b60003414156116615747600854101561161757600080fd5b6000600854146116505761164f601660049054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600854612395565b5b60006008819055506116606120cb565b5b50565b600c5481565b60155481565b6000601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905060008173ffffffffffffffffffffffffffffffffffffffff16636352211e601c546040518263ffffffff1660e01b81526004016116d49190612f5f565b60206040518083038186803b1580156116ec57600080fd5b505afa158015611700573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117249190612ce5565b90508073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461175e57600080fd5b60001515601660029054906101000a900460ff1615151461177e57600080fd5b6000600c54141580611791575042600c54115b15611856578460008190555083600481905550600d54426117b2919061303d565b600c819055506001601660036101000a81548160ff02191690831515021790555082601860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f66e7c6e6e9e553f9cb93553cfc3a1ba6b3cb9661e2692f0de116f95243220a6e600054600454604051611849929190612ff8565b60405180910390a16118af565b47600854101561186557600080fd5b60006008541461189e5761189d601660049054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600854612395565b5b60006008819055506118ae6120cb565b5b5050505050565b60045481565b346003546118ca919061303d565b600381905550600e54600354101580156118f7575060001515601660029054906101000a900460ff161515145b1561193b5761192a601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600854612395565b600060088190555061193a6129ac565b5b565b60095481565b60115481565b600a5481565b600b5481565b60011515601660029054906101000a900460ff1615151461197557600080fd5b3373ffffffffffffffffffffffffffffffffffffffff16601660049054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146119cf57600080fd5b6000600954146119de57600080fd5b601154601254106119ee57600080fd5b6013546014546119fe919061303d565b4211611a0957600080fd5b6000601660049054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905060008173ffffffffffffffffffffffffffffffffffffffff16600b54604051611a5890612eb9565b60006040518083038185875af1925050503d8060008114611a95576040519150601f19603f3d011682016040523d82523d6000602084013e611a9a565b606091505b5050905080611ade576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ad590612f3f565b60405180910390fd5b60126000815480929190611af1906131ac565b9190505550426014819055506000600b819055505050565b60105481565b60001515601660029054906101000a900460ff16151514611b2f57600080fd5b6000600c541480611b41575042600c54105b15611c5b57476008541015611b5557600080fd5b600060085414611b8e57611b8d601660049054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600854612395565b5b6000600881905550611b9e6120cb565b8160008190555080600481905550600d5442611bba919061303d565b600c8190555033601660046101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f67ca08caf70795730bd13ffa9b5077c10f5b4ff44422517830ebe06c053685ae601660049054906101000a900473ffffffffffffffffffffffffffffffffffffffff16604051611c529190612ece565b60405180910390a15b5050565b600d5481565b601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60055481565b60135481565b60005481565b601660039054906101000a900460ff1681565b601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601660019054906101000a900460ff1681565b601660029054906101000a900460ff1681565b60035481565b600a54471115611de5576000600a5414611de4576000601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905060008173ffffffffffffffffffffffffffffffffffffffff166329c08ba2600a546040518263ffffffff1660e01b81526004016020604051808303818588803b158015611d8957600080fd5b505af1158015611d9d573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611dc29190612d0e565b90508015611de157600a54600854611dda919061311e565b6008819055505b50505b5b60286009541415611fdb576000601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905060008173ffffffffffffffffffffffffffffffffffffffff1663f953c2f36040518163ffffffff1660e01b8152600401602060405180830381600087803b158015611e6157600080fd5b505af1158015611e75573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e999190612d60565b8273ffffffffffffffffffffffffffffffffffffffff1663cff6c3bb6040518163ffffffff1660e01b8152600401602060405180830381600087803b158015611ee157600080fd5b505af1158015611ef5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f199190612d60565b611f2391906130c4565b9050600047905081811115611f36578190505b60008373ffffffffffffffffffffffffffffffffffffffff1663d78c06e4836040518263ffffffff1660e01b81526004016020604051808303818588803b158015611f8057600080fd5b505af1158015611f94573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611fb99190612d0e565b90508015611fd65781600854611fcf919061311e565b6008819055505b505050505b601a54471061202957612012601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16601a54612395565b601a54600854612022919061311e565b6008819055505b60006006549050600061203a61099f565b9050814711156120ab5761204e8183612395565b8160085461205c919061311e565b600881905550600f54601054116120a657600060095414156120a5576120a4601660049054906101000a900473ffffffffffffffffffffffffffffffffffffffff1647612395565b5b5b6120bf565b600047146120be576120bd8147612395565b5b5b60006009819055505050565b60008081905550600060028190555060006003819055506000600481905550600060058190555060006007819055506000600881905550600060068190555060006009819055506000600b819055506000600c81905550780fee50b7025c36a0802f236d04753d5b48e7ffffffffffffff600e819055506000600f819055506000601081905550600160118190555060006012819055506f0785ee10d5da46d900f4369fffffffff6013819055506000601481905550600180819055506000601660006101000a81548160ff0219169083151502179055506000601660016101000a81548160ff0219169083151502179055506000601660026101000a81548160ff0219169083151502179055506000601660036101000a81548160ff0219169083151502179055506121fc61099f565b601760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061224461099f565b601860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b601660029054906101000a900460ff16156122c157600754601554426122ac919061311e565b6122b69190613093565b6010819055506122ca565b60006010819055505b565b60011515601660029054906101000a900460ff161515146122ec57600080fd5b6000806122f7612a3d565b9050601a54600a548260065461230d919061311e565b612317919061311e565b612321919061311e565b8261232c919061303d565b915060025482111561233e5760025491505b8160025461234c919061311e565b6002819055506123668282612361919061303d565b612af9565b600754600554612376919061303d565b6005819055506001600f5461238b919061303d565b600f819055505050565b60008273ffffffffffffffffffffffffffffffffffffffff16826040516123bb90612eb9565b60006040518083038185875af1925050503d80600081146123f8576040519150601f19603f3d011682016040523d82523d6000602084013e6123fd565b606091505b5050905080612441576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161243890612f3f565b60405180910390fd5b505050565b6000806000905068056bc75e2d631000006000541161246457600080fd5b6000600454612473919061303d565b60048190555060026004546124889190613093565b600e819055506000805490506000620f4240826124a591906131f5565b905080826124b3919061311e565b9150620f4240826124c49190613093565b9150655af3107a4000816124d891906130c4565b90506000612710836124ea91906131f5565b905080836124f8919061311e565b9250612710836125089190613093565b92506127108361251891906131f5565b6001819055506001548361252c919061311e565b92506127108361253c9190613093565b925060006127108461254e91906131f5565b9050808461255c919061311e565b93506127108461256c9190613093565b9350600060078190555060018114156125895761012c6007819055505b600281141561259d57620151806007819055505b60038114156125b15762093a806007819055505b60048114156125c557621275006007819055505b60058114156125d957622819a06007819055505b60068114156125ed57627861566007819055505b6007811415612602576301e185586007819055505b6000600754141561261257600080fd5b60006127108561262291906131f5565b905060006009819055506000600b8190555061263c61099f565b601760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060016011819055506000601381905550600060148190555061269c61099f565b601760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060648460026126eb91906130c4565b6126f59190613093565b601a81905550600083146129765782945060648561271391906131f5565b92508285612721919061311e565b94506064856127309190613093565b9450600060648661274191906131f5565b90506000601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905060008173ffffffffffffffffffffffffffffffffffffffff1663b08d2829876004546127969190613093565b856040518363ffffffff1660e01b81526004016127b4929190612ff8565b602060405180830381600087803b1580156127ce57600080fd5b505af11580156127e2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128069190612d60565b905060008460075461281891906130c4565b42612823919061303d565b9050600082601a548a612836919061303d565b612840919061303d565b9050600061284c61099f565b90508473ffffffffffffffffffffffffffffffffffffffff1663efd1a84c87308430308f60045461287d9190613093565b8a8a6040518963ffffffff1660e01b81526004016128a2989796959493929190612f7a565b602060405180830381600087803b1580156128bc57600080fd5b505af11580156128d0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128f49190612d60565b600a819055506a52b7d2dcc80cd2e3ffffff600a5414156129145760019b505b6000600a5414156129245760019b505b600015158c15151461296b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161296290612f1f565b60405180910390fd5b50505050505061297f565b6000600a819055505b600a54601a5485612990919061303d565b61299a919061303d565b60068190555085965050505050505090565b60001515601660029054906101000a900460ff161515146129cc57600080fd5b6001601660026101000a81548160ff0219169083151502179055506000600f819055506000601081905550600060128190555060045460028190555042601581905550600754601554612a1f919061303d565b600581905550601154600454612a359190613093565b600b81905550565b600080600c905061012c6007541415612a5557600690505b620151806007541415612a685761016d90505b62093a806007541415612a7a57603490505b621275006007541415612a8c57601a90505b622819a06007541415612a9e57600c90505b627861566007541415612ab057600490505b6301e185586007541415612ac357600190505b60006064600154600254612ad791906130c4565b612ae19190613093565b90508181612aef9190613093565b9050809250505090565b6000805414158015612b0e5750600a54600854115b15612c79576000601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600a54471115612bf5576000600a5414612bf45760008173ffffffffffffffffffffffffffffffffffffffff166329c08ba2600a546040518263ffffffff1660e01b81526004016020604051808303818588803b158015612b9a57600080fd5b505af1158015612bae573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612bd39190612d0e565b90508015612bf257600a54600854612beb919061311e565b6008819055505b505b5b6000612bff61099f565b905082471115612c2857612c138184612395565b82600854612c21919061311e565b6008819055505b601a544710612c7657612c5f601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16601a54612395565b601a54600854612c6f919061311e565b6008819055505b50505b50565b600081359050612c8b816132d9565b92915050565b600081519050612ca0816132d9565b92915050565b600081519050612cb5816132f0565b92915050565b600081359050612cca81613307565b92915050565b600081519050612cdf81613307565b92915050565b600060208284031215612cf757600080fd5b6000612d0584828501612c91565b91505092915050565b600060208284031215612d2057600080fd5b6000612d2e84828501612ca6565b91505092915050565b600060208284031215612d4957600080fd5b6000612d5784828501612cbb565b91505092915050565b600060208284031215612d7257600080fd5b6000612d8084828501612cd0565b91505092915050565b60008060408385031215612d9c57600080fd5b6000612daa85828601612cbb565b9250506020612dbb85828601612cbb565b9150509250929050565b600080600060608486031215612dda57600080fd5b6000612de886828701612cbb565b9350506020612df986828701612cbb565b9250506040612e0a86828701612c7c565b9150509250925092565b612e1d81613164565b82525050565b612e2c81613152565b82525050565b612e3b81613176565b82525050565b6000612e4e600f8361302c565b9150612e5982613284565b602082019050919050565b6000612e7160148361302c565b9150612e7c826132ad565b602082019050919050565b6000612e94600083613021565b9150612e9f826132d6565b600082019050919050565b612eb3816131a2565b82525050565b6000612ec482612e87565b9150819050919050565b6000602082019050612ee36000830184612e23565b92915050565b6000602082019050612efe6000830184612e14565b92915050565b6000602082019050612f196000830184612e32565b92915050565b60006020820190508181036000830152612f3881612e41565b9050919050565b60006020820190508181036000830152612f5881612e64565b9050919050565b6000602082019050612f746000830184612eaa565b92915050565b600061010082019050612f90600083018b612eaa565b612f9d602083018a612e23565b612faa6040830189612e23565b612fb76060830188612e23565b612fc46080830187612e23565b612fd160a0830186612eaa565b612fde60c0830185612eaa565b612feb60e0830184612eaa565b9998505050505050505050565b600060408201905061300d6000830185612eaa565b61301a6020830184612eaa565b9392505050565b600081905092915050565b600082825260208201905092915050565b6000613048826131a2565b9150613053836131a2565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561308857613087613226565b5b828201905092915050565b600061309e826131a2565b91506130a9836131a2565b9250826130b9576130b8613255565b5b828204905092915050565b60006130cf826131a2565b91506130da836131a2565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561311357613112613226565b5b828202905092915050565b6000613129826131a2565b9150613134836131a2565b92508282101561314757613146613226565b5b828203905092915050565b600061315d82613182565b9050919050565b600061316f82613182565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60006131b7826131a2565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156131ea576131e9613226565b5b600182019050919050565b6000613200826131a2565b915061320b836131a2565b92508261321b5761321a613255565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f496e7320466565204e4f54205365740000000000000000000000000000000000600082015250565b7f4661696c656420746f2073656e64204574686572000000000000000000000000600082015250565b50565b6132e281613152565b81146132ed57600080fd5b50565b6132f981613176565b811461330457600080fd5b50565b613310816131a2565b811461331b57600080fd5b5056fea26469706673582212202c3df9072463e2e10906999dfc988e4b685042b28a1bce7b475aa7202c360c3764736f6c63430008010033000000000000000000000000d340a138109f0c37ed4c8a35bac6951b3a96a24d000000000000000000000000000000000000000000000000000000000000013b
Deployed Bytecode
0x6080604052600436106102515760003560e01c806387f478de11610139578063aa452fa6116100b6578063d50256251161007a578063d5025625146107a9578063e24078e8146107d4578063e792847b146107ff578063ec9fba451461082a578063f1e02f3e14610855578063f9c36fde1461088057610251565b8063aa452fa6146106d4578063ad4d6cb7146106fd578063ae20a8e114610728578063b6768cd114610753578063bc06c4cc1461077e57610251565b80639598c02f116100fd5780639598c02f1461061157806397c4fac71461063c5780639a4df66f14610667578063a57848b614610692578063a8e981ed146106a957610251565b806387f478de1461055d5780638afbfa45146105885780638c8a9a8b146105b15780638db57994146105dc57806391440260146105e657610251565b806351c6411e116101d257806372aea1d51161019657806372aea1d51461047e57806374f91591146104a95780637674cee3146104d25780637df1f1b9146104fd578063815af9081461052857806383b2fb301461053257610251565b806351c6411e146103cf57806357ded9c9146103e65780635dd577ec1461041157806361aa8d931461043c5780636df7f5ed1461046757610251565b80631bf05579116102195780631bf055791461030c5780631cc1cf46146103375780632b8fdd89146103625780632dae710b1461038d5780634ff59cf8146103a457610251565b80630aad8a86146102565780630f554b171461028157806314ee728b146102ac57806315978dbf146102d7578063193a4249146102e1575b600080fd5b34801561026257600080fd5b5061026b6108ab565b6040516102789190612f5f565b60405180910390f35b34801561028d57600080fd5b506102966108b1565b6040516102a39190612f5f565b60405180910390f35b3480156102b857600080fd5b506102c16108b7565b6040516102ce9190612ee9565b60405180910390f35b6102df6108dd565b005b3480156102ed57600080fd5b506102f661098d565b6040516103039190612f5f565b60405180910390f35b34801561031857600080fd5b50610321610993565b60405161032e9190612f5f565b60405180910390f35b34801561034357600080fd5b5061034c610999565b6040516103599190612f5f565b60405180910390f35b34801561036e57600080fd5b5061037761099f565b6040516103849190612ece565b60405180910390f35b34801561039957600080fd5b506103a2610a5e565b005b3480156103b057600080fd5b506103b9610e73565b6040516103c69190612f5f565b60405180910390f35b3480156103db57600080fd5b506103e4610e79565b005b3480156103f257600080fd5b506103fb61118a565b6040516104089190612f5f565b60405180910390f35b34801561041d57600080fd5b50610426611190565b6040516104339190612f5f565b60405180910390f35b34801561044857600080fd5b50610451611196565b60405161045e9190612f5f565b60405180910390f35b34801561047357600080fd5b5061047c61119c565b005b34801561048a57600080fd5b5061049361121e565b6040516104a09190612f04565b60405180910390f35b3480156104b557600080fd5b506104d060048036038101906104cb9190612d37565b611231565b005b3480156104de57600080fd5b506104e76114aa565b6040516104f49190612f5f565b60405180910390f35b34801561050957600080fd5b506105126114b0565b60405161051f9190612ece565b60405180910390f35b6105306114d6565b005b34801561053e57600080fd5b50610547611664565b6040516105549190612f5f565b60405180910390f35b34801561056957600080fd5b5061057261166a565b60405161057f9190612f5f565b60405180910390f35b34801561059457600080fd5b506105af60048036038101906105aa9190612dc5565b611670565b005b3480156105bd57600080fd5b506105c66118b6565b6040516105d39190612f5f565b60405180910390f35b6105e46118bc565b005b3480156105f257600080fd5b506105fb61193d565b6040516106089190612f5f565b60405180910390f35b34801561061d57600080fd5b50610626611943565b6040516106339190612f5f565b60405180910390f35b34801561064857600080fd5b50610651611949565b60405161065e9190612f5f565b60405180910390f35b34801561067357600080fd5b5061067c61194f565b6040516106899190612f5f565b60405180910390f35b34801561069e57600080fd5b506106a7611955565b005b3480156106b557600080fd5b506106be611b09565b6040516106cb9190612f5f565b60405180910390f35b3480156106e057600080fd5b506106fb60048036038101906106f69190612d89565b611b0f565b005b34801561070957600080fd5b50610712611c5f565b60405161071f9190612f5f565b60405180910390f35b34801561073457600080fd5b5061073d611c65565b60405161074a9190612ee9565b60405180910390f35b34801561075f57600080fd5b50610768611c8b565b6040516107759190612f5f565b60405180910390f35b34801561078a57600080fd5b50610793611c91565b6040516107a09190612f5f565b60405180910390f35b3480156107b557600080fd5b506107be611c97565b6040516107cb9190612f5f565b60405180910390f35b3480156107e057600080fd5b506107e9611c9d565b6040516107f69190612f04565b60405180910390f35b34801561080b57600080fd5b50610814611cb0565b6040516108219190612ece565b60405180910390f35b34801561083657600080fd5b5061083f611cd6565b60405161084c9190612f04565b60405180910390f35b34801561086157600080fd5b5061086a611ce9565b6040516108779190612f04565b60405180910390f35b34801561088c57600080fd5b50610895611cfc565b6040516108a29190612f5f565b60405180910390f35b60085481565b60125481565b601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000349050806008546108f0919061303d565b600881905550601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614156109555760286009819055505b6000600254141561098157610968611d02565b6000600954141561097c5761097b6120cb565b5b61098a565b610989610a5e565b5b50565b600e5481565b60025481565b60075481565b600080601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905060008173ffffffffffffffffffffffffffffffffffffffff16636352211e601c546040518263ffffffff1660e01b8152600401610a049190612f5f565b60206040518083038186803b158015610a1c57600080fd5b505afa158015610a30573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a549190612ce5565b9050809250505090565b60011515601660029054906101000a900460ff16151514610a7e57600080fd5b610a86612286565b60286009541415610ca857601054600f541115610ca7576000601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690506000600854905060008273ffffffffffffffffffffffffffffffffffffffff1663de3ce0a26040518163ffffffff1660e01b8152600401602060405180830381600087803b158015610b1557600080fd5b505af1158015610b29573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b4d9190612d60565b8373ffffffffffffffffffffffffffffffffffffffff1663cff6c3bb6040518163ffffffff1660e01b8152600401602060405180830381600087803b158015610b9557600080fd5b505af1158015610ba9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bcd9190612d60565b610bd7919061311e565b905080821115610be5578091505b60008373ffffffffffffffffffffffffffffffffffffffff1663d78c06e4846040518263ffffffff1660e01b81526004016020604051808303818588803b158015610c2f57600080fd5b505af1158015610c43573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610c689190612d0e565b90508015610ca2576001600f54610c7f919061303d565b600f8190555082600854610c93919061311e565b60088190555060006009819055505b505050505b5b60065460085410610d5657610cbb6122cc565b6000600f546010541115610cdc57600f54601054610cd9919061311e565b90505b6000600654600854610cee9190613093565b905081811115610cfc578190505b6000811115610d535760005b81811115610d515760065460085410610d2457610d236122cc565b5b600080541415610d3e57600182610d3b919061303d565b90505b8080610d49906131ac565b915050610d08565b505b50505b6006546002541015610e46576000600c905061012c6007541415610d7957600690505b620151806007541415610d8c5761016d90505b62093a806007541415610d9e57603490505b621275006007541415610db057601a90505b622819a06007541415610dc257600c90505b627861566007541415610dd457600490505b6301e185586007541415610de757600190505b60006064600154600254610dfb91906130c4565b610e059190613093565b90508181610e139190613093565b9050601a54600a5482600254610e29919061303d565b610e33919061303d565b610e3d919061303d565b60068190555050505b601460095414610e7157602860095414610e7057600f546010541115610e6f57600a6009819055505b5b5b565b600f5481565b6000601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905060008173ffffffffffffffffffffffffffffffffffffffff16636352211e601c546040518263ffffffff1660e01b8152600401610edd9190612f5f565b60206040518083038186803b158015610ef557600080fd5b505afa158015610f09573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f2d9190612ce5565b90508073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610f6757600080fd5b60001515601660029054906101000a900460ff1615151415611186576000600f54601054610f95919061311e565b600a54610fa291906130c4565b9050602860005414158015610fb8575060008114155b1561107b576000601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905060008173ffffffffffffffffffffffffffffffffffffffff166329c08ba2846040518263ffffffff1660e01b81526004016020604051808303818588803b15801561102e57600080fd5b505af1158015611042573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906110679190612d0e565b90508015611078576000600a819055505b50505b6000600f5460105461108d919061311e565b601a5461109a91906130c4565b90506110c8601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682612395565b600033905060008173ffffffffffffffffffffffffffffffffffffffff16476040516110f390612eb9565b60006040518083038185875af1925050503d8060008114611130576040519150601f19603f3d011682016040523d82523d6000602084013e611135565b606091505b5050905080611179576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161117090612f3f565b60405180910390fd5b6111816120cb565b505050505b5050565b60015481565b60145481565b601a5481565b3373ffffffffffffffffffffffffffffffffffffffff16601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146111f657600080fd5b6011546012541061120657600080fd5b6011546004546112169190613093565b600b81905550565b601660009054906101000a900460ff1681565b6000601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905060008173ffffffffffffffffffffffffffffffffffffffff16636352211e601c546040518263ffffffff1660e01b81526004016112959190612f5f565b60206040518083038186803b1580156112ad57600080fd5b505afa1580156112c1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112e59190612ce5565b90508073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461131f57600080fd5b60001515601660009054906101000a900460ff161515141561134e57600783141561134d5761134c6120cb565b5b5b600a60095414806113615750601e600954145b1561146157600283141561139057600f6000815480929190611382906131ac565b919050555060006009819055505b60038314156113a2576113a16120cb565b5b600483141561143c576000601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff1663ceddc0216040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561141a57600080fd5b505af115801561142e573d6000803e3d6000fd5b50505050601e600981905550505b600583141561144e5760006009819055505b60068314156114605760146009819055505b5b601460095414156114875760038314156114865761147d611d02565b6114856120cb565b5b5b602860095414156114a55760068314156114a45760146009819055505b5b505050565b60065481565b601660049054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60011515601660039054906101000a900460ff161515146114f657600080fd5b60001515601660029054906101000a900460ff1615151461151657600080fd5b3373ffffffffffffffffffffffffffffffffffffffff16601660049054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461157057600080fd5b3460085461157e919061303d565b6008819055506000612710600454604261159891906130c4565b6115a29190613093565b905080600854106115ff576001601660006101000a81548160ff02191690831515021790555060006115d2612446565b90506001151581151514156115fd576000601660026101000a81548160ff0219169083151502179055505b505b60003414156116615747600854101561161757600080fd5b6000600854146116505761164f601660049054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600854612395565b5b60006008819055506116606120cb565b5b50565b600c5481565b60155481565b6000601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905060008173ffffffffffffffffffffffffffffffffffffffff16636352211e601c546040518263ffffffff1660e01b81526004016116d49190612f5f565b60206040518083038186803b1580156116ec57600080fd5b505afa158015611700573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117249190612ce5565b90508073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461175e57600080fd5b60001515601660029054906101000a900460ff1615151461177e57600080fd5b6000600c54141580611791575042600c54115b15611856578460008190555083600481905550600d54426117b2919061303d565b600c819055506001601660036101000a81548160ff02191690831515021790555082601860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f66e7c6e6e9e553f9cb93553cfc3a1ba6b3cb9661e2692f0de116f95243220a6e600054600454604051611849929190612ff8565b60405180910390a16118af565b47600854101561186557600080fd5b60006008541461189e5761189d601660049054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600854612395565b5b60006008819055506118ae6120cb565b5b5050505050565b60045481565b346003546118ca919061303d565b600381905550600e54600354101580156118f7575060001515601660029054906101000a900460ff161515145b1561193b5761192a601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600854612395565b600060088190555061193a6129ac565b5b565b60095481565b60115481565b600a5481565b600b5481565b60011515601660029054906101000a900460ff1615151461197557600080fd5b3373ffffffffffffffffffffffffffffffffffffffff16601660049054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146119cf57600080fd5b6000600954146119de57600080fd5b601154601254106119ee57600080fd5b6013546014546119fe919061303d565b4211611a0957600080fd5b6000601660049054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905060008173ffffffffffffffffffffffffffffffffffffffff16600b54604051611a5890612eb9565b60006040518083038185875af1925050503d8060008114611a95576040519150601f19603f3d011682016040523d82523d6000602084013e611a9a565b606091505b5050905080611ade576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ad590612f3f565b60405180910390fd5b60126000815480929190611af1906131ac565b9190505550426014819055506000600b819055505050565b60105481565b60001515601660029054906101000a900460ff16151514611b2f57600080fd5b6000600c541480611b41575042600c54105b15611c5b57476008541015611b5557600080fd5b600060085414611b8e57611b8d601660049054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600854612395565b5b6000600881905550611b9e6120cb565b8160008190555080600481905550600d5442611bba919061303d565b600c8190555033601660046101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f67ca08caf70795730bd13ffa9b5077c10f5b4ff44422517830ebe06c053685ae601660049054906101000a900473ffffffffffffffffffffffffffffffffffffffff16604051611c529190612ece565b60405180910390a15b5050565b600d5481565b601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60055481565b60135481565b60005481565b601660039054906101000a900460ff1681565b601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601660019054906101000a900460ff1681565b601660029054906101000a900460ff1681565b60035481565b600a54471115611de5576000600a5414611de4576000601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905060008173ffffffffffffffffffffffffffffffffffffffff166329c08ba2600a546040518263ffffffff1660e01b81526004016020604051808303818588803b158015611d8957600080fd5b505af1158015611d9d573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611dc29190612d0e565b90508015611de157600a54600854611dda919061311e565b6008819055505b50505b5b60286009541415611fdb576000601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905060008173ffffffffffffffffffffffffffffffffffffffff1663f953c2f36040518163ffffffff1660e01b8152600401602060405180830381600087803b158015611e6157600080fd5b505af1158015611e75573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e999190612d60565b8273ffffffffffffffffffffffffffffffffffffffff1663cff6c3bb6040518163ffffffff1660e01b8152600401602060405180830381600087803b158015611ee157600080fd5b505af1158015611ef5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f199190612d60565b611f2391906130c4565b9050600047905081811115611f36578190505b60008373ffffffffffffffffffffffffffffffffffffffff1663d78c06e4836040518263ffffffff1660e01b81526004016020604051808303818588803b158015611f8057600080fd5b505af1158015611f94573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611fb99190612d0e565b90508015611fd65781600854611fcf919061311e565b6008819055505b505050505b601a54471061202957612012601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16601a54612395565b601a54600854612022919061311e565b6008819055505b60006006549050600061203a61099f565b9050814711156120ab5761204e8183612395565b8160085461205c919061311e565b600881905550600f54601054116120a657600060095414156120a5576120a4601660049054906101000a900473ffffffffffffffffffffffffffffffffffffffff1647612395565b5b5b6120bf565b600047146120be576120bd8147612395565b5b5b60006009819055505050565b60008081905550600060028190555060006003819055506000600481905550600060058190555060006007819055506000600881905550600060068190555060006009819055506000600b819055506000600c81905550780fee50b7025c36a0802f236d04753d5b48e7ffffffffffffff600e819055506000600f819055506000601081905550600160118190555060006012819055506f0785ee10d5da46d900f4369fffffffff6013819055506000601481905550600180819055506000601660006101000a81548160ff0219169083151502179055506000601660016101000a81548160ff0219169083151502179055506000601660026101000a81548160ff0219169083151502179055506000601660036101000a81548160ff0219169083151502179055506121fc61099f565b601760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061224461099f565b601860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b601660029054906101000a900460ff16156122c157600754601554426122ac919061311e565b6122b69190613093565b6010819055506122ca565b60006010819055505b565b60011515601660029054906101000a900460ff161515146122ec57600080fd5b6000806122f7612a3d565b9050601a54600a548260065461230d919061311e565b612317919061311e565b612321919061311e565b8261232c919061303d565b915060025482111561233e5760025491505b8160025461234c919061311e565b6002819055506123668282612361919061303d565b612af9565b600754600554612376919061303d565b6005819055506001600f5461238b919061303d565b600f819055505050565b60008273ffffffffffffffffffffffffffffffffffffffff16826040516123bb90612eb9565b60006040518083038185875af1925050503d80600081146123f8576040519150601f19603f3d011682016040523d82523d6000602084013e6123fd565b606091505b5050905080612441576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161243890612f3f565b60405180910390fd5b505050565b6000806000905068056bc75e2d631000006000541161246457600080fd5b6000600454612473919061303d565b60048190555060026004546124889190613093565b600e819055506000805490506000620f4240826124a591906131f5565b905080826124b3919061311e565b9150620f4240826124c49190613093565b9150655af3107a4000816124d891906130c4565b90506000612710836124ea91906131f5565b905080836124f8919061311e565b9250612710836125089190613093565b92506127108361251891906131f5565b6001819055506001548361252c919061311e565b92506127108361253c9190613093565b925060006127108461254e91906131f5565b9050808461255c919061311e565b93506127108461256c9190613093565b9350600060078190555060018114156125895761012c6007819055505b600281141561259d57620151806007819055505b60038114156125b15762093a806007819055505b60048114156125c557621275006007819055505b60058114156125d957622819a06007819055505b60068114156125ed57627861566007819055505b6007811415612602576301e185586007819055505b6000600754141561261257600080fd5b60006127108561262291906131f5565b905060006009819055506000600b8190555061263c61099f565b601760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060016011819055506000601381905550600060148190555061269c61099f565b601760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060648460026126eb91906130c4565b6126f59190613093565b601a81905550600083146129765782945060648561271391906131f5565b92508285612721919061311e565b94506064856127309190613093565b9450600060648661274191906131f5565b90506000601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905060008173ffffffffffffffffffffffffffffffffffffffff1663b08d2829876004546127969190613093565b856040518363ffffffff1660e01b81526004016127b4929190612ff8565b602060405180830381600087803b1580156127ce57600080fd5b505af11580156127e2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128069190612d60565b905060008460075461281891906130c4565b42612823919061303d565b9050600082601a548a612836919061303d565b612840919061303d565b9050600061284c61099f565b90508473ffffffffffffffffffffffffffffffffffffffff1663efd1a84c87308430308f60045461287d9190613093565b8a8a6040518963ffffffff1660e01b81526004016128a2989796959493929190612f7a565b602060405180830381600087803b1580156128bc57600080fd5b505af11580156128d0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128f49190612d60565b600a819055506a52b7d2dcc80cd2e3ffffff600a5414156129145760019b505b6000600a5414156129245760019b505b600015158c15151461296b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161296290612f1f565b60405180910390fd5b50505050505061297f565b6000600a819055505b600a54601a5485612990919061303d565b61299a919061303d565b60068190555085965050505050505090565b60001515601660029054906101000a900460ff161515146129cc57600080fd5b6001601660026101000a81548160ff0219169083151502179055506000600f819055506000601081905550600060128190555060045460028190555042601581905550600754601554612a1f919061303d565b600581905550601154600454612a359190613093565b600b81905550565b600080600c905061012c6007541415612a5557600690505b620151806007541415612a685761016d90505b62093a806007541415612a7a57603490505b621275006007541415612a8c57601a90505b622819a06007541415612a9e57600c90505b627861566007541415612ab057600490505b6301e185586007541415612ac357600190505b60006064600154600254612ad791906130c4565b612ae19190613093565b90508181612aef9190613093565b9050809250505090565b6000805414158015612b0e5750600a54600854115b15612c79576000601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600a54471115612bf5576000600a5414612bf45760008173ffffffffffffffffffffffffffffffffffffffff166329c08ba2600a546040518263ffffffff1660e01b81526004016020604051808303818588803b158015612b9a57600080fd5b505af1158015612bae573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612bd39190612d0e565b90508015612bf257600a54600854612beb919061311e565b6008819055505b505b5b6000612bff61099f565b905082471115612c2857612c138184612395565b82600854612c21919061311e565b6008819055505b601a544710612c7657612c5f601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16601a54612395565b601a54600854612c6f919061311e565b6008819055505b50505b50565b600081359050612c8b816132d9565b92915050565b600081519050612ca0816132d9565b92915050565b600081519050612cb5816132f0565b92915050565b600081359050612cca81613307565b92915050565b600081519050612cdf81613307565b92915050565b600060208284031215612cf757600080fd5b6000612d0584828501612c91565b91505092915050565b600060208284031215612d2057600080fd5b6000612d2e84828501612ca6565b91505092915050565b600060208284031215612d4957600080fd5b6000612d5784828501612cbb565b91505092915050565b600060208284031215612d7257600080fd5b6000612d8084828501612cd0565b91505092915050565b60008060408385031215612d9c57600080fd5b6000612daa85828601612cbb565b9250506020612dbb85828601612cbb565b9150509250929050565b600080600060608486031215612dda57600080fd5b6000612de886828701612cbb565b9350506020612df986828701612cbb565b9250506040612e0a86828701612c7c565b9150509250925092565b612e1d81613164565b82525050565b612e2c81613152565b82525050565b612e3b81613176565b82525050565b6000612e4e600f8361302c565b9150612e5982613284565b602082019050919050565b6000612e7160148361302c565b9150612e7c826132ad565b602082019050919050565b6000612e94600083613021565b9150612e9f826132d6565b600082019050919050565b612eb3816131a2565b82525050565b6000612ec482612e87565b9150819050919050565b6000602082019050612ee36000830184612e23565b92915050565b6000602082019050612efe6000830184612e14565b92915050565b6000602082019050612f196000830184612e32565b92915050565b60006020820190508181036000830152612f3881612e41565b9050919050565b60006020820190508181036000830152612f5881612e64565b9050919050565b6000602082019050612f746000830184612eaa565b92915050565b600061010082019050612f90600083018b612eaa565b612f9d602083018a612e23565b612faa6040830189612e23565b612fb76060830188612e23565b612fc46080830187612e23565b612fd160a0830186612eaa565b612fde60c0830185612eaa565b612feb60e0830184612eaa565b9998505050505050505050565b600060408201905061300d6000830185612eaa565b61301a6020830184612eaa565b9392505050565b600081905092915050565b600082825260208201905092915050565b6000613048826131a2565b9150613053836131a2565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561308857613087613226565b5b828201905092915050565b600061309e826131a2565b91506130a9836131a2565b9250826130b9576130b8613255565b5b828204905092915050565b60006130cf826131a2565b91506130da836131a2565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561311357613112613226565b5b828202905092915050565b6000613129826131a2565b9150613134836131a2565b92508282101561314757613146613226565b5b828203905092915050565b600061315d82613182565b9050919050565b600061316f82613182565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60006131b7826131a2565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156131ea576131e9613226565b5b600182019050919050565b6000613200826131a2565b915061320b836131a2565b92508261321b5761321a613255565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f496e7320466565204e4f54205365740000000000000000000000000000000000600082015250565b7f4661696c656420746f2073656e64204574686572000000000000000000000000600082015250565b50565b6132e281613152565b81146132ed57600080fd5b50565b6132f981613176565b811461330457600080fd5b50565b613310816131a2565b811461331b57600080fd5b5056fea26469706673582212202c3df9072463e2e10906999dfc988e4b685042b28a1bce7b475aa7202c360c3764736f6c63430008010033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000d340a138109f0c37ed4c8a35bac6951b3a96a24d000000000000000000000000000000000000000000000000000000000000013b
-----Decoded View---------------
Arg [0] : _nftContrAddress (address): 0xD340a138109f0c37eD4c8a35BAc6951B3A96a24D
Arg [1] : _tokenId (uint256): 315
-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 000000000000000000000000d340a138109f0c37ed4c8a35bac6951b3a96a24d
Arg [1] : 000000000000000000000000000000000000000000000000000000000000013b
Deployed Bytecode Sourcemap
1058:35672:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2119:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3321:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4180:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33881:537;;;:::i;:::-;;2966:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1645:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2055:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7451:203;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16212:3937;;;;;;;;;;;;;:::i;:::-;;3095:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34495:1874;;;;;;;;;;;;;:::i;:::-;;1557:18;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3477:23;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4344:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33601:264;;;;;;;;;;;;;:::i;:::-;;3614:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7686:2412;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1971:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4045:23;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24500:978;;;:::i;:::-;;2793:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3533;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23276:1160;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1819:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31496:582;;;:::i;:::-;;2250:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3224:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2351:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2680:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32747:808;;;;;;;;;;;;;:::i;:::-;;3154:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21930:1242;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2893:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4273:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1890:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3375:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1089:20;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3901:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4097:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3715;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3810:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1712;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2119:31;;;;:::o;3321:24::-;;;;:::o;4180:34::-;;;;;;;;;;;;;:::o;33881:537::-;33934:18;33953:9;33934:28;;34009:10;33990:16;;:29;;;;:::i;:::-;33973:16;:46;;;;34127:11;;;;;;;;;;;34115:23;;:10;:23;;;34112:46;;;34154:2;34141:12;:15;;;;34112:46;34194:1;34181:11;;:14;34178:221;;;34265:25;:23;:25::i;:::-;34322:1;34308:12;;:15;34305:34;;;34326:11;:9;:11::i;:::-;34305:34;34178:221;;;34369:18;:16;:18::i;:::-;34178:221;33881:537;:::o;2966:25::-;;;;:::o;1645:26::-;;;;:::o;2055:30::-;;;;:::o;7451:203::-;7495:7;7514:21;7549:15;;;;;;;;;;;7514:51;;7576:17;7594:8;:16;;;7611:7;;7594:25;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;7576:43;;7637:9;7630:16;;;;7451:203;:::o;16212:3937::-;16283:4;16266:21;;:15;;;;;;;;;;;:21;;;16258:30;;;;;;16345:22;:20;:22::i;:::-;16490:2;16476:12;;:16;16473:1334;;;16608:16;;16595:12;;:29;16592:1204;;;16744:19;16783:11;;;;;;;;;;;16744:52;;17118:16;17135;;17118:33;;17206:23;17253:8;:19;;;:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17230:8;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:44;;;;:::i;:::-;17206:68;;17318:15;17309:8;:24;17306:55;;;17344:15;17335:24;;17306:55;17379:16;17396:8;:26;;;17430:8;17396:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17379:62;;17559:11;17556:189;;;17621:1;17608:12;;:14;;;;:::i;:::-;17595:12;:27;;;;17680:8;17663:16;;:25;;;;:::i;:::-;17646:16;:42;;;;17724:1;17711:12;:14;;;;17556:189;16592:1204;;;;;16473:1334;17850:10;;17832:16;;:28;17829:938;;17877:16;:14;:16::i;:::-;18015:28;18113:12;;18096:16;;:29;18093:87;;;18166:12;;18149:16;;:29;;;;:::i;:::-;18128:50;;18093:87;18194:31;18243:10;;18226:16;;:27;;;;:::i;:::-;18194:59;;18295:20;18271:23;:44;18268:96;;;18342:20;18318:44;;18268:96;18416:1;18392:23;:25;18389:367;;;18441:6;18437:304;18453:23;18451:1;:25;18437:304;;;18526:10;;18508:16;;:28;18505:52;;18538:16;:14;:16::i;:::-;18505:52;18689:1;18682:5;;:8;18679:43;;;18719:1;18695:23;:25;;;;:::i;:::-;18693:27;;18679:43;18478:3;;;;;:::i;:::-;;;;18437:304;;;;18389:367;17829:938;;;18872:10;;18860:11;;:22;18857:1064;;;18898:18;18917:2;18898:21;;19069:4;19052:15;;:21;19049:40;;;19086:1;19075:12;;19049:40;19174:8;19157:15;;:25;19154:46;;;19195:3;19184:14;;19154:46;19242:10;19225:15;;:27;19222:47;;;19265:2;19254:13;;19222:47;19312:12;19295:15;;:29;19292:49;;;19337:2;19326:13;;19292:49;19391:7;19374:15;;:24;19371:44;;;19411:2;19400:13;;19371:44;19459:7;19442:15;;:24;19439:43;;;19479:1;19468:12;;19439:43;19528:8;19511:15;;:25;19508:44;;;19549:1;19538:12;;19508:44;19577:22;19618:3;19613;;19601:11;;:15;;;;:::i;:::-;19600:21;;;;:::i;:::-;19577:44;;19765:10;19750:14;:25;;;;:::i;:::-;19735:40;;19899:10;;19884:12;;19867:14;19853:11;;:28;;;;:::i;:::-;:43;;;;:::i;:::-;:56;;;;:::i;:::-;19842:10;:67;;;;18857:1064;;;19950:2;19936:12;;:16;19933:199;;19985:2;19971:12;;:16;19968:153;;20027:12;;20010:16;;:29;20007:53;;;20055:2;20042:12;:15;;;;20007:53;19968:153;19933:199;16212:3937::o;3095:27::-;;;;:::o;34495:1874::-;7092:21;7127:15;;;;;;;;;;;7092:51;;7154:16;7171:8;:16;;;7188:7;;7171:25;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;7154:42;;7227:8;7215:20;;:10;:20;;;7207:29;;;;;;34639:5:::1;34622:22;;:15;;;;;;;;;;;:22;;;34619:1743;;;34900:14;34946:12;;34929:16;;:29;;;;:::i;:::-;34915:12;;:44;;;;:::i;:::-;34900:59;;35091:2;35084:5;;:9;;:22;;;;;35105:1;35097:6;:9;;35084:22;35081:409;;;35126:19;35157:11;;;;;;;;;;;35126:43;;35239:13;35253:8;:19;;;35280:6;35253:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;35239:50;;35311:8;35308:31;;;35335:1;35322:12;:14;;;;35308:31;35081:409;;;35948:16;35994:12;;35977:16;;:29;;;;:::i;:::-;35965:10;;:42;;;;:::i;:::-;35948:59;;36022:37;36039:9;;;;;;;;;;;36050:8;36022;:37::i;:::-;36130:17;36156:10;36130:37;;36183:12;36201:1;:6;;36215:21;36201:40;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36182:59;;;36264:7;36256:40;;;;;;;;;;;;:::i;:::-;;;;;;;;;36313:11;:9;:11::i;:::-;34619:1743;;;;;34495:1874:::0;;:::o;1557:18::-;;;;:::o;3477:23::-;;;;:::o;4344:25::-;;;;:::o;33601:264::-;33663:10;33652:21;;:9;;;;;;;;;;;:21;;;33644:30;;;;;;33727:11;;33717:9;;:21;33709:30;;;;;;33821:11;;33802:16;;:30;;;;:::i;:::-;33787:14;:45;;;;33601:264::o;3614:26::-;;;;;;;;;;;;;:::o;7686:2412::-;7092:21;7127:15;;;;;;;;;;;7092:51;;7154:16;7171:8;:16;;;7188:7;;7171:25;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;7154:42;;7227:8;7215:20;;:10;:20;;;7207:29;;;;;;8399:5:::1;8383:21;;:14;;;;;;;;;;;:21;;;8380:78;;;8430:1;8423:5;:8;8420:27;;;8434:11;:9;:11::i;:::-;8420:27;8380:78;8496:2;8482:12;;:16;:36;;;;8516:2;8502:12;;:16;8482:36;8478:1114;;;8646:1;8639:5;:8;8636:163;;;8668:12;;:14;;;;;;;;;:::i;:::-;;;;;;8782:1;8769:12;:14;;;;8636:163;8823:1;8816:5;:8;8813:58;;;8844:11;:9;:11::i;:::-;8813:58;8895:1;8888:5;:8;8885:390;;;8916:19;8947:11;;;;;;;;;;;8916:43;;9029:8;:21;;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;9167:2;9154:12;:15;;;;8885:390;;9299:1;9292:5;:8;9289:138;;;9410:1;9397:12;:14;;;;9289:138;9451:1;9444:5;:8;9441:140;;;9513:2;9500:12;:15;;;;9441:140;8478:1114;9620:2;9606:12;;:16;9602:206;;;9648:1;9641:5;:8;9638:159;;;9726:25;:23;:25::i;:::-;9770:11;:9;:11::i;:::-;9638:159;9602:206;9835:2;9821:12;;:16;9818:273;;;9950:1;9943:5;:8;9940:140;;;10012:2;9999:12;:15;;;;9940:140;9818:273;7686:2412:::0;;;:::o;1971:25::-;;;;:::o;4045:23::-;;;;;;;;;;;;;:::o;24500:978::-;24635:4;24620:19;;:13;;;;;;;;;;;:19;;;24611:29;;;;;;24676:5;24659:22;;:15;;;;;;;;;;;:22;;;24651:31;;;;;;24711:10;24701:20;;:8;;;;;;;;;;;:20;;;24693:29;;;;;;24843:9;24824:16;;:28;;;;:::i;:::-;24807:16;:45;;;;24863:14;24900:5;24882:16;;24879:2;:19;;;;:::i;:::-;24878:27;;;;:::i;:::-;24863:42;;24937:6;24919:16;;:24;24916:170;;24974:4;24959:14;;:19;;;;;;;;;;;;;;;;;;24993:13;25007:10;:8;:10::i;:::-;24993:24;;25045:4;25035:14;;:8;:14;;;25032:43;;;25068:5;25052:15;;:21;;;;;;;;;;;;;;;;;;25032:43;24916:170;;25120:1;25109:9;:12;25106:345;;;25201:21;25183:16;;:39;;25175:48;;;;;;25332:1;25314:16;;:19;25311:70;;25335:44;25352:8;;;;;;;;;;;25362:16;;25335:8;:44::i;:::-;25311:70;25412:1;25395:16;:18;;;;25428:11;:9;:11::i;:::-;25106:345;24500:978;:::o;2793:30::-;;;;:::o;3533:::-;;;;:::o;23276:1160::-;7092:21;7127:15;;;;;;;;;;;7092:51;;7154:16;7171:8;:16;;;7188:7;;7171:25;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;7154:42;;7227:8;7215:20;;:10;:20;;;7207:29;;;;;;23407:5:::1;23390:22;;:15;;;;;;;;;;;:22;;;23382:31;;;::::0;::::1;;23445:1;23428:15;;:18;;:53;;;;23466:15;23450;;:31;23428:53;23424:1005;;;23576:6;23570:5;:12;;;;23710:7;23693:16;:24;;;;23791:16;;23773:15;:34;;;;:::i;:::-;23757:15;:50;;;;23899:4;23885:13;;:18;;;;;;;;;;;;;;;;;;23940:8;23920:11;;:29;;;;;;;;;;;;;;;;;;23969:37;23982:5;;23989:16;;23969:37;;;;;;;:::i;:::-;;;;;;;;23424:1005;;;24179:21;24161:16;;:39;;24153:48;;;::::0;::::1;;24310:1;24292:16;;:19;24289:70;;24313:44;24330:8;;;;;;;;;;;24340:16;;24313:8;:44::i;:::-;24289:70;24390:1;24373:16;:18;;;;24406:11;:9;:11::i;:::-;23424:1005;23276:1160:::0;;;;;:::o;1819:31::-;;;;:::o;31496:582::-;31693:9;31678:12;;:24;;;;:::i;:::-;31665:12;:37;;;;31731:10;;31717:12;;:24;;:50;;;;;31762:5;31745:22;;:15;;;;;;;;;;;:22;;;31717:50;31713:290;;;31854:45;31871:9;;;;;;;;;;;31882:16;;31854:8;:45::i;:::-;31931:1;31914:16;:18;;;;31975:16;:14;:16::i;:::-;31713:290;31496:582::o;2250:27::-;;;;:::o;3224:26::-;;;;:::o;2351:27::-;;;;:::o;2680:29::-;;;;:::o;32747:808::-;32813:4;32796:21;;:15;;;;;;;;;;;:21;;;32788:30;;;;;;32847:10;32837:20;;:8;;;;;;;;;;;:20;;;32829:29;;;;;;32892:1;32878:12;;:15;32870:24;;;;;;32924:11;;32914:9;;:21;32906:30;;;;;;32983:12;;32972:8;;:23;;;;:::i;:::-;32955:15;:41;32947:50;;;;;;33211:19;33241:8;;;;;;;;;;;33211:39;;33262:12;33280:3;:8;;33296:14;;33280:35;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33261:54;;;33334:7;33326:40;;;;;;;;;;;;:::i;:::-;;;;;;;;;33434:9;;:11;;;;;;;;;:::i;:::-;;;;;;33465:15;33456:8;:24;;;;33506:1;33491:14;:16;;;;32747:808;;:::o;3154:31::-;;;;:::o;21930:1242::-;22079:5;22062:22;;:15;;;;;;;;;;;:22;;;22054:31;;;;;;22117:1;22100:15;;:18;:53;;;;22138:15;22122;;:31;22100:53;22096:1059;;;22288:21;22270:16;;:39;;22262:48;;;;;;22419:1;22401:16;;:19;22398:70;;22422:44;22439:8;;;;;;;;;;;22449:16;;22422:8;:44::i;:::-;22398:70;22499:1;22482:16;:18;;;;22515:11;:9;:11::i;:::-;22620:6;22614:5;:12;;;;22754:17;22737:16;:34;;;;22845:16;;22827:15;:34;;;;:::i;:::-;22811:15;:50;;;;22948:10;22939:8;;:19;;;;;;;;;;;;;;;;;;23122:21;23134:8;;;;;;;;;;;23122:21;;;;;;:::i;:::-;;;;;;;;22096:1059;21930:1242;;:::o;2893:31::-;;;;:::o;4273:32::-;;;;;;;;;;;;;:::o;1890:25::-;;;;:::o;3375:27::-;;;;:::o;1089:20::-;;;;:::o;3901:25::-;;;;;;;;;;;;;:::o;4097:24::-;;;;;;;;;;;;;:::o;3715:::-;;;;;;;;;;;;;:::o;3810:27::-;;;;;;;;;;;;;:::o;1712:::-;;;;:::o;10461:2180::-;10570:12;;10548:21;:34;10545:367;;;10619:1;10605:12;;:15;10602:299;;10644:19;10683:11;;;;;;;;;;;10644:52;;10719:13;10733:8;:19;;;10760:12;;10733:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;10719:56;;10801:8;10798:63;;;10846:12;;10829:16;;:29;;;;:::i;:::-;10812:16;:46;;;;10798:63;10602:299;;;10545:367;10988:2;10974:12;;:16;10971:583;;;11051:19;11090:11;;;;;;;;;;;11051:52;;11118:23;11165:8;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11142:8;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:45;;;;:::i;:::-;11118:69;;11215:16;11232:21;11215:38;;11280:15;11271:8;:24;11268:55;;;11306:15;11297:24;;11268:55;11337:16;11354:8;:26;;;11388:8;11354:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11337:62;;11418:11;11415:128;;;11484:8;11467:16;;:25;;;;:::i;:::-;11450:16;:42;;;;11415:128;10971:583;;;;;11615:10;;11592:21;:33;11589:162;;11641:39;11658:9;;;;;;;;;;;11669:10;;11641:8;:39::i;:::-;11729:10;;11712:16;;:27;;;;:::i;:::-;11695:16;:44;;;;11589:162;11841:19;11861:10;;11841:30;;11960:14;11975:13;:11;:13::i;:::-;11960:28;;12025:11;12003:21;:33;12000:567;;;12052:37;12069:6;12077:11;12052:8;:37::i;:::-;12138:11;12121:16;;:28;;;;:::i;:::-;12104:16;:45;;;;12242:12;;12224:16;;:30;12221:140;;12291:1;12277:12;;:15;12274:72;;;12295:49;12312:8;;;;;;;;;;;12322:21;12295:8;:49::i;:::-;12274:72;12221:140;12000:567;;;12472:1;12449:21;:24;12446:110;;12493:47;12510:6;12518:21;12493:8;:47::i;:::-;12446:110;12000:567;12632:1;12619:12;:14;;;;10461:2180;;:::o;20165:1757::-;20340:1;20334:5;:7;;;;20460:1;20448:11;:13;;;;20511:1;20498:12;:14;;;;20540:1;20523:16;:18;;;;20588:1;20577:10;:12;;;;20665:1;20649:15;:17;;;;20694:1;20677:16;:18;;;;20717:1;20706:10;:12;;;;20785:1;20772:12;:14;;;;20895:1;20880:14;:16;;;;20991:1;20975:15;:17;;;;21077:59;21066:10;:70;;;;21160:1;21147:12;:14;;;;21189:1;21172:16;:18;;;;21213:1;21201:11;:13;;;;21235:1;21225:9;:11;;;;21260:37;21247:12;:50;;;;21317:1;21308:8;:10;;;;21333:1;21329:3;:5;;;;21362;21347:14;;:20;;;;;;;;;;;;;;;;;;21459:5;21446:12;;:18;;;;;;;;;;;;;;;;;;21555:5;21539:15;;:21;;;;;;;;;;;;;;;;;;21585:5;21571:13;;:19;;;;;;;;;;;;;;;;;;21715:13;:11;:13::i;:::-;21705:9;;:23;;;;;;;;;;;;;;;;;;21841:13;:11;:13::i;:::-;21821:11;;:34;;;;;;;;;;;;;;;;;;20165:1757::o;10190:263::-;10288:15;;;;;;;;;;;10285:161;;;10370:15;;10353;;10337;:31;;;;:::i;:::-;10336:49;;;;:::i;:::-;10319:16;:66;;;;10285:161;;;10433:1;10416:16;:18;;;;10285:161;10190:263::o;14197:1012::-;14267:4;14250:21;;:15;;;;;;;;;;;:21;;;14242:30;;;;;;14446:22;14504;14527:20;:18;:20::i;:::-;14504:43;;14758:10;;14745:12;;14730:14;14719:10;;:25;;;;:::i;:::-;:38;;;;:::i;:::-;:49;;;;:::i;:::-;14701:14;:68;;;;:::i;:::-;14686:83;;14840:11;;14825:14;:26;14822:60;;;14869:11;;14854:26;;14822:60;14916:14;14904:11;;:26;;;;:::i;:::-;14892:11;:38;;;;15034:45;15064:14;15049;:29;;;;:::i;:::-;15034:14;:45::i;:::-;15114:15;;15101:10;;:28;;;;:::i;:::-;15090:10;:39;;;;15168:1;15153:12;;:16;;;;:::i;:::-;15140:12;:29;;;;14197:1012;;:::o;36492:229::-;36616:12;36634:3;:8;;36650:7;36634:28;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36615:47;;;36681:7;36673:40;;;;;;;;;;;;:::i;:::-;;;;;;;;;36492:229;;;:::o;25486:5786::-;25524:4;25644:13;25658:5;25644:19;;26495:21;26489:5;;:27;26481:36;;;;;;26602:1;26584:16;;:19;;;;:::i;:::-;26567:16;:36;;;;26721:1;26702:16;;:20;;;;:::i;:::-;26691:10;:31;;;;26773:14;26788:5;;26773:20;;26824:18;26852:7;26843:6;:16;;;;:::i;:::-;26824:35;;26886:10;26877:6;:19;;;;:::i;:::-;26870:26;;26921:7;26914:6;:14;;;;:::i;:::-;26907:21;;26963:6;26950:10;:19;;;;:::i;:::-;26939:30;;27156:18;27185:5;27176:6;:14;;;;:::i;:::-;27156:34;;27217:10;27208:6;:19;;;;:::i;:::-;27201:26;;27252:5;27245:6;:12;;;;:::i;:::-;27238:19;;27292:5;27283:6;:14;;;;:::i;:::-;27278:3;:19;;;;27324:3;;27315:6;:12;;;;:::i;:::-;27308:19;;27352:5;27345:6;:12;;;;:::i;:::-;27338:19;;27388:16;27415:5;27406:6;:14;;;;:::i;:::-;27388:32;;27447:8;27438:6;:17;;;;:::i;:::-;27431:24;;27480:5;27473:6;:12;;;;:::i;:::-;27466:19;;27545:1;27529:15;:17;;;;27570:1;27560:8;:11;27557:39;;;27590:4;27574:15;:20;;;;27557:39;27644:1;27634:8;:11;27631:43;;;27664:8;27648:15;:24;;;;27631:43;27705:1;27695:8;:11;27692:45;;;27725:10;27709:15;:26;;;;27692:45;27769:1;27759:8;:11;27756:47;;;27789:12;27773:15;:28;;;;27756:47;27842:1;27832:8;:11;27829:42;;;27862:7;27846:15;:23;;;;27829:42;27904:1;27894:8;:11;27891:42;;;27924:7;27908:15;:23;;;;27891:42;27968:1;27958:8;:11;27955:43;;;27988:8;27972:15;:24;;;;27955:43;28044:1;28027:15;;:18;;28019:27;;;;;;28067:19;28097:5;28088:6;:14;;;;:::i;:::-;28067:35;;28220:1;28207:12;:14;;;;28334:1;28319:14;:16;;;;28436:13;:11;:13::i;:::-;28418:9;;:32;;;;;;;;;;;;;;;;;;28502:1;28490:11;:13;;;;28609:1;28596:12;:14;;;;28661:1;28652:8;:10;;;;28716:13;:11;:13::i;:::-;28706:9;;:23;;;;;;;;;;;;;;;;;;28882:3;28870:10;28868:1;:12;;;;:::i;:::-;28867:18;;;;:::i;:::-;28856:10;:29;;;;28997:1;28985:10;:13;28982:2087;;29241:10;29234:17;;29290:3;29281:6;:12;;;;:::i;:::-;29270:23;;29328:10;29319:6;:19;;;;:::i;:::-;29312:26;;29371:3;29364:6;:10;;;;:::i;:::-;29357:17;;29393:16;29419:3;29410:6;:12;;;;:::i;:::-;29393:29;;29556:19;29587:11;;;;;;;;;;;29556:43;;30309:22;30332:8;:22;;;30373:10;30356:16;;:27;;;;:::i;:::-;30386:8;30332:63;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30309:86;;30414:15;30465:11;30449:15;;:27;;;;:::i;:::-;30430:15;:47;;;;:::i;:::-;30414:63;;30496:18;30541:14;30528:10;;30515;:23;;;;:::i;:::-;:40;;;;:::i;:::-;30496:59;;30574:14;30589:13;:11;:13::i;:::-;30574:28;;30639:8;:19;;;30659:8;30677:4;30684:6;30700:4;30733;30757:10;30740:16;;:27;;;;:::i;:::-;30770:7;30779:10;30639:151;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30626:12;:164;;;;30826:26;30812:12;;:40;30809:62;;;30864:4;30855:13;;30809:62;30921:1;30907:12;;:15;30904:37;;;30934:4;30925:13;;30904:37;30977:5;30967:15;;:8;:15;;;30959:43;;;;;;;;;;;;:::i;:::-;;;;;;;;;28982:2087;;;;;;;;;31054:1;31041:12;:14;;;;28982:2087;31226:12;;31213:10;;31200;:23;;;;:::i;:::-;:38;;;;:::i;:::-;31189:10;:49;;;;31256:8;31249:15;;;;;;;;25486:5786;:::o;32086:653::-;32226:5;32209:22;;:15;;;;;;;;;;;:22;;;32201:31;;;;;;32259:4;32243:15;;:20;;;;;;;;;;;;;;;;;;32287:1;32274:12;:14;;;;32316:1;32299:16;:18;;;;32338:1;32328:9;:11;;;;32362:16;;32350:11;:28;;;;32431:15;32415;:31;;;;32513:15;;32495;;:33;;;;:::i;:::-;32484:10;:44;;;;32622:11;;32603:16;;:30;;;;:::i;:::-;32588:14;:45;;;;32086:653::o;15215:989::-;15262:7;15281:18;15300:2;15281:21;;15444:4;15427:15;;:21;15424:40;;;15461:1;15450:12;;15424:40;15545:8;15528:15;;:25;15525:46;;;15566:3;15555:14;;15525:46;15609:10;15592:15;;:27;15589:47;;;15632:2;15621:13;;15589:47;15675:12;15658:15;;:29;15655:49;;;15700:2;15689:13;;15655:49;15750:7;15733:15;;:24;15730:44;;;15770:2;15759:13;;15730:44;15814:7;15797:15;;:24;15794:43;;;15834:1;15823:12;;15794:43;15879:8;15862:15;;:25;15859:44;;;15900:1;15889:12;;15859:44;15924:22;15965:3;15960;;15948:11;;:15;;;;:::i;:::-;15947:21;;;;:::i;:::-;15924:44;;16104:10;16089:14;:25;;;;:::i;:::-;16074:40;;16182:14;16175:21;;;;15215:989;:::o;12653:1468::-;13079:1;13072:5;;:8;;13071:45;;;;;13103:12;;13086:16;;:29;13071:45;13068:1046;;;13132:19;13171:11;;;;;;;;;;;13132:52;;13314:12;;13292:21;:34;13289:296;;;13363:1;13349:12;;:15;13346:224;;13388:13;13402:8;:19;;;13429:12;;13402:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13388:56;;13470:8;13467:63;;;13515:12;;13498:16;;:29;;;;:::i;:::-;13481:16;:46;;;;13467:63;13346:224;;13289:296;13631:14;13646:13;:11;:13::i;:::-;13631:28;;13745:14;13723:21;:36;13720:170;;;13775:40;13792:6;13800:14;13775:8;:40::i;:::-;13864:14;13847:16;;:31;;;;:::i;:::-;13830:16;:48;;;;13720:170;13967:10;;13944:21;:33;13941:162;;13993:39;14010:9;;;;;;;;;;;14021:10;;13993:8;:39::i;:::-;14081:10;;14064:16;;:27;;;;:::i;:::-;14047:16;:44;;;;13941:162;13068:1046;;;12653:1468;:::o;7:139:1:-;;91:6;78:20;69:29;;107:33;134:5;107:33;:::i;:::-;59:87;;;;:::o;152:143::-;;240:6;234:13;225:22;;256:33;283:5;256:33;:::i;:::-;215:80;;;;:::o;301:137::-;;386:6;380:13;371:22;;402:30;426:5;402:30;:::i;:::-;361:77;;;;:::o;444:139::-;;528:6;515:20;506:29;;544:33;571:5;544:33;:::i;:::-;496:87;;;;:::o;589:143::-;;677:6;671:13;662:22;;693:33;720:5;693:33;:::i;:::-;652:80;;;;:::o;738:284::-;;857:2;845:9;836:7;832:23;828:32;825:2;;;873:1;870;863:12;825:2;916:1;941:64;997:7;988:6;977:9;973:22;941:64;:::i;:::-;931:74;;887:128;815:207;;;;:::o;1028:278::-;;1144:2;1132:9;1123:7;1119:23;1115:32;1112:2;;;1160:1;1157;1150:12;1112:2;1203:1;1228:61;1281:7;1272:6;1261:9;1257:22;1228:61;:::i;:::-;1218:71;;1174:125;1102:204;;;;:::o;1312:262::-;;1420:2;1408:9;1399:7;1395:23;1391:32;1388:2;;;1436:1;1433;1426:12;1388:2;1479:1;1504:53;1549:7;1540:6;1529:9;1525:22;1504:53;:::i;:::-;1494:63;;1450:117;1378:196;;;;:::o;1580:284::-;;1699:2;1687:9;1678:7;1674:23;1670:32;1667:2;;;1715:1;1712;1705:12;1667:2;1758:1;1783:64;1839:7;1830:6;1819:9;1815:22;1783:64;:::i;:::-;1773:74;;1729:128;1657:207;;;;:::o;1870:407::-;;;1995:2;1983:9;1974:7;1970:23;1966:32;1963:2;;;2011:1;2008;2001:12;1963:2;2054:1;2079:53;2124:7;2115:6;2104:9;2100:22;2079:53;:::i;:::-;2069:63;;2025:117;2181:2;2207:53;2252:7;2243:6;2232:9;2228:22;2207:53;:::i;:::-;2197:63;;2152:118;1953:324;;;;;:::o;2283:552::-;;;;2425:2;2413:9;2404:7;2400:23;2396:32;2393:2;;;2441:1;2438;2431:12;2393:2;2484:1;2509:53;2554:7;2545:6;2534:9;2530:22;2509:53;:::i;:::-;2499:63;;2455:117;2611:2;2637:53;2682:7;2673:6;2662:9;2658:22;2637:53;:::i;:::-;2627:63;;2582:118;2739:2;2765:53;2810:7;2801:6;2790:9;2786:22;2765:53;:::i;:::-;2755:63;;2710:118;2383:452;;;;;:::o;2841:142::-;2944:32;2970:5;2944:32;:::i;:::-;2939:3;2932:45;2922:61;;:::o;2989:118::-;3076:24;3094:5;3076:24;:::i;:::-;3071:3;3064:37;3054:53;;:::o;3113:109::-;3194:21;3209:5;3194:21;:::i;:::-;3189:3;3182:34;3172:50;;:::o;3228:366::-;;3391:67;3455:2;3450:3;3391:67;:::i;:::-;3384:74;;3467:93;3556:3;3467:93;:::i;:::-;3585:2;3580:3;3576:12;3569:19;;3374:220;;;:::o;3600:366::-;;3763:67;3827:2;3822:3;3763:67;:::i;:::-;3756:74;;3839:93;3928:3;3839:93;:::i;:::-;3957:2;3952:3;3948:12;3941:19;;3746:220;;;:::o;3972:398::-;;4152:83;4233:1;4228:3;4152:83;:::i;:::-;4145:90;;4244:93;4333:3;4244:93;:::i;:::-;4362:1;4357:3;4353:11;4346:18;;4135:235;;;:::o;4376:118::-;4463:24;4481:5;4463:24;:::i;:::-;4458:3;4451:37;4441:53;;:::o;4500:379::-;;4706:147;4849:3;4706:147;:::i;:::-;4699:154;;4870:3;4863:10;;4688:191;;;:::o;4885:222::-;;5016:2;5005:9;5001:18;4993:26;;5029:71;5097:1;5086:9;5082:17;5073:6;5029:71;:::i;:::-;4983:124;;;;:::o;5113:254::-;;5260:2;5249:9;5245:18;5237:26;;5273:87;5357:1;5346:9;5342:17;5333:6;5273:87;:::i;:::-;5227:140;;;;:::o;5373:210::-;;5498:2;5487:9;5483:18;5475:26;;5511:65;5573:1;5562:9;5558:17;5549:6;5511:65;:::i;:::-;5465:118;;;;:::o;5589:419::-;;5793:2;5782:9;5778:18;5770:26;;5842:9;5836:4;5832:20;5828:1;5817:9;5813:17;5806:47;5870:131;5996:4;5870:131;:::i;:::-;5862:139;;5760:248;;;:::o;6014:419::-;;6218:2;6207:9;6203:18;6195:26;;6267:9;6261:4;6257:20;6253:1;6242:9;6238:17;6231:47;6295:131;6421:4;6295:131;:::i;:::-;6287:139;;6185:248;;;:::o;6439:222::-;;6570:2;6559:9;6555:18;6547:26;;6583:71;6651:1;6640:9;6636:17;6627:6;6583:71;:::i;:::-;6537:124;;;;:::o;6667:997::-;;6994:3;6983:9;6979:19;6971:27;;7008:71;7076:1;7065:9;7061:17;7052:6;7008:71;:::i;:::-;7089:72;7157:2;7146:9;7142:18;7133:6;7089:72;:::i;:::-;7171;7239:2;7228:9;7224:18;7215:6;7171:72;:::i;:::-;7253;7321:2;7310:9;7306:18;7297:6;7253:72;:::i;:::-;7335:73;7403:3;7392:9;7388:19;7379:6;7335:73;:::i;:::-;7418;7486:3;7475:9;7471:19;7462:6;7418:73;:::i;:::-;7501;7569:3;7558:9;7554:19;7545:6;7501:73;:::i;:::-;7584;7652:3;7641:9;7637:19;7628:6;7584:73;:::i;:::-;6961:703;;;;;;;;;;;:::o;7670:332::-;;7829:2;7818:9;7814:18;7806:26;;7842:71;7910:1;7899:9;7895:17;7886:6;7842:71;:::i;:::-;7923:72;7991:2;7980:9;7976:18;7967:6;7923:72;:::i;:::-;7796:206;;;;;:::o;8008:147::-;;8146:3;8131:18;;8121:34;;;;:::o;8161:169::-;;8279:6;8274:3;8267:19;8319:4;8314:3;8310:14;8295:29;;8257:73;;;;:::o;8336:305::-;;8395:20;8413:1;8395:20;:::i;:::-;8390:25;;8429:20;8447:1;8429:20;:::i;:::-;8424:25;;8583:1;8515:66;8511:74;8508:1;8505:81;8502:2;;;8589:18;;:::i;:::-;8502:2;8633:1;8630;8626:9;8619:16;;8380:261;;;;:::o;8647:185::-;;8704:20;8722:1;8704:20;:::i;:::-;8699:25;;8738:20;8756:1;8738:20;:::i;:::-;8733:25;;8777:1;8767:2;;8782:18;;:::i;:::-;8767:2;8824:1;8821;8817:9;8812:14;;8689:143;;;;:::o;8838:348::-;;8901:20;8919:1;8901:20;:::i;:::-;8896:25;;8935:20;8953:1;8935:20;:::i;:::-;8930:25;;9123:1;9055:66;9051:74;9048:1;9045:81;9040:1;9033:9;9026:17;9022:105;9019:2;;;9130:18;;:::i;:::-;9019:2;9178:1;9175;9171:9;9160:20;;8886:300;;;;:::o;9192:191::-;;9252:20;9270:1;9252:20;:::i;:::-;9247:25;;9286:20;9304:1;9286:20;:::i;:::-;9281:25;;9325:1;9322;9319:8;9316:2;;;9330:18;;:::i;:::-;9316:2;9375:1;9372;9368:9;9360:17;;9237:146;;;;:::o;9389:96::-;;9455:24;9473:5;9455:24;:::i;:::-;9444:35;;9434:51;;;:::o;9491:104::-;;9565:24;9583:5;9565:24;:::i;:::-;9554:35;;9544:51;;;:::o;9601:90::-;;9678:5;9671:13;9664:21;9653:32;;9643:48;;;:::o;9697:126::-;;9774:42;9767:5;9763:54;9752:65;;9742:81;;;:::o;9829:77::-;;9895:5;9884:16;;9874:32;;;:::o;9912:233::-;;9974:24;9992:5;9974:24;:::i;:::-;9965:33;;10020:66;10013:5;10010:77;10007:2;;;10090:18;;:::i;:::-;10007:2;10137:1;10130:5;10126:13;10119:20;;9955:190;;;:::o;10151:176::-;;10200:20;10218:1;10200:20;:::i;:::-;10195:25;;10234:20;10252:1;10234:20;:::i;:::-;10229:25;;10273:1;10263:2;;10278:18;;:::i;:::-;10263:2;10319:1;10316;10312:9;10307:14;;10185:142;;;;:::o;10333:180::-;10381:77;10378:1;10371:88;10478:4;10475:1;10468:15;10502:4;10499:1;10492:15;10519:180;10567:77;10564:1;10557:88;10664:4;10661:1;10654:15;10688:4;10685:1;10678:15;10705:165;10845:17;10841:1;10833:6;10829:14;10822:41;10811:59;:::o;10876:170::-;11016:22;11012:1;11004:6;11000:14;10993:46;10982:64;:::o;11052:114::-;11158:8;:::o;11172:122::-;11245:24;11263:5;11245:24;:::i;:::-;11238:5;11235:35;11225:2;;11284:1;11281;11274:12;11225:2;11215:79;:::o;11300:116::-;11370:21;11385:5;11370:21;:::i;:::-;11363:5;11360:32;11350:2;;11406:1;11403;11396:12;11350:2;11340:76;:::o;11422:122::-;11495:24;11513:5;11495:24;:::i;:::-;11488:5;11485:35;11475:2;;11534:1;11531;11524:12;11475:2;11465:79;:::o
Swarm Source
ipfs://2c3df9072463e2e10906999dfc988e4b685042b28a1bce7b475aa7202c360c37
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 26 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.