public without sharing class LoanerLendDeliverController {
         // 基础Url
    public String baseUrl { get; private set; }
    // 样机借出申请ID
    public String laId { get; private set; }
    public loaner_application__c lac {get;private set;}
    public loaner_application__c la { get; private set; }

    public Set<String> laSet {get; private set;}
    /* 画面步骤
     * 下架:StockDown
     *
     */
    public String step { get; private set; }
    // 明细Bean
    public List<DataLineBean> dataLines { get; set; }
    public List<loaner_application_detail__c> lad1s {get; private set;}
    // 明细行数
    public Integer getDatalineSize() {
        return dataLines == null ? 0 : dataLines.size();
    }

    public LoanerLendDeliverController() {
        laId = System.currentPageReference().getParameters().get('id');
        step = System.currentPageReference().getParameters().get('step');
    }

    public PageReference init() {
        // 基础Url
        baseUrl = URL.getSalesforceBaseUrl().toExternalForm();
        String path = URL.getCurrentRequestUrl().getPath();
        if (path.indexOf('/apex') > 0) {
            baseUrl += path.substring(0,path.indexOf('/apex'));
        } else if (path.indexOf('production/') > 0) {
            baseUrl += '/production';
        }
        // 明细Bean
        dataLines = new List<DataLineBean>();

        if (String.isBlank(laId) == true) {
            return null;
        }
        if (String.isBlank(step) == true) {
            return null;
        }

        // 样机借出申请取得
        List<loaner_application__c> laList = [select Id,Return_Trake_Staff__c,Return_Track_Company__c,Return_Track_Number__c,Status__c,Equipment_Type__c from loaner_application__c where Id = :laId];
        if (laList.size() == 0) {
            return null;
        }
        la = laList[0];
        lac = new loaner_application__c();
        User temp = [select id,Name from User where id = :UserInfo.getUserId()];
        lac.Return_Trake_Staff__c = temp.Name;

        List<String> benId = new List<String>();
        

        // 样机借出申请明细取得
        String sql_select = 'select Id,loaner_application__c, SerialNumber__c, Receipt_Status__c,Internal_Asset_number__c, OTCODE__c, ECCode__c,LOANER__c,LOANER__r.RecordType.Id,loaner_application__r.Loaner_AgreementPDF__c,LOANER__r.Name,LOANER__r.Remarks2__c';
        String sql_where = ' where loaner_application__c = :laId ';
        if (step == 'LoanerLend') {
            sql_where += ' and RAESD_Status__c in (\'申请者已收货\',\'申请者已装机确认\')';
        } else {
            return null;
        }
        String sql_full = sql_select + ' from loaner_application_detail__c ' + sql_where;
        List<loaner_application_detail__c> lads = Database.query(sql_full);
        System.debug('========1========'+lads);
        if (lads.size() == 0) {
            return null;
        }else{
            for(loaner_application_detail__c loan : lads){
                benId.add(loan.id);
            }
        }
        //获取记录该信息的明细
        lad1s = [select Id,loaner_Agent__c,loaner_application__r.loaner_request_number__c ,loaner_application__r.Owner.Name,LendPrimary_Name__c,SerialNumber__c, Internal_Asset_number__c, OTCODE__c, ECCode__c,LOANER__c,loaner_application__c,LOANER__r.RecordType.Id,loaner_application__r.Loaner_AgreementPDF__c,loaner_application__r.pickup_time__c,loaner_application__r.Agent__c,loaner_application__r.Rental_Start_Date__c,loaner_application__r.Rental_end_Date__c from loaner_application_detail__c where LendPrimary_Name__c = :benId  and RAESD_Status__c = '已批准'];
        List<loaner_application_detail__c> lad2s = new List<loaner_application_detail__c>();
        System.debug('==========2======='+lad1s);
        if(lad1s.size() == 0){
            
            return null;
        }
        Integer cnt = 0;
        for(loaner_application_detail__c i : lad1s){
            for(loaner_application_detail__c j : lads){
                if(j.id == i.LendPrimary_Name__c){
                    System.debug('==============3========='+i.LendPrimary_Name__c);
                    lad2s.add(j);
                    cnt += 1;
                    System.debug('转借代理商：'+i.loaner_Agent__c);
                    //DataLineBean dataLine = new DataLineBean(cnt, j,i.loaner_application__r.Loaner_AgreementPDF__c == true ? '已上传' : '未上传');
                    DataLineBean dataLine = new DataLineBean(cnt, j,i.loaner_application__r.Loaner_AgreementPDF__c,i.loaner_Agent__c,i.loaner_application__r.loaner_request_number__c); 
                    dataLines.add(dataLine);
                }
            }
        }
        // 明细Bean作成
       /* Integer cnt = 0;
        for (loaner_application_detail__c lad : lad2s) {
            cnt += 1;
            DataLineBean dataLine = new DataLineBean(cnt, lad);
            dataLines.add(dataLine);
        } */
       // ApexPages.addmessage(new ApexPages.message(ApexPages.severity.Error, String.valueOf(lad1s)));     
        return null;
    }

     public PageReference saveBtn() {
        laSet = new Set<String>();
        List<loaner_application_detail__c> updList = new List<loaner_application_detail__c>();
        List<Asset> assList = new List<Asset>();
        Integer count = 0;
        boolean pickupFalg = false;
        if(dataLines.size() >0){
            Loaner_Express__c le = this.createExpress('发货');
            Loaner_Express__c rle = this.createExpress('回寄');
            for (DataLineBean dataLine : dataLines) {   
                if (dataLine.checkFlag == true) {
                    if(dataLine.PDFflag == false){
                        ApexPages.addMessage(new ApexPages.Message(ApexPages.Severity.ERROR, '借用方未上传借用协议，不能进行转借发货。'));
                        if(le != null ){
                            delete le;
                            le = null;
                        }
                        if(rle != null){
                            delete rle;
                            rle = null;
                        }
                        return null;
                    }                    
                    loaner_application_detail__c lad = dataLine.lad;
                    
                    if(lad.Receipt_Status__c != 'OK' && lad.Receipt_Status__c == null){
                        lad.Receipt_Status__c = 'OK';
                        lad.Receipt_Date__c = Date.today();
                    }
                    //发货方明细
                    //日期
                    lad.Asset_Return_Date__c = Date.today();
                    lad.Received_loaner_Date__c = Date.today();
                    lad.After_Inspection_Date__c = Date.today();
                    lad.Arrival_wh_Date__c = Date.today();
                    lad.inTime__c = Datetime.now();
                    lad.RAESD_Status__c = '已回库';
                    //上架检查
                    lad.StockUp__c = true;
                    lad.Check_lost_Item__c = 'OK';
                    lad.Inspection_result_after__c = 'OK';
                    
                    
                    for(loaner_application_detail__c temp : lad1s){
                        if(temp.LendPrimary_Name__c == lad.id){
                            //收货方明细
                            temp.StockDown__c = true;
                            temp.outTime__c = Datetime.now();
                            temp.StockDown_Date__c = Date.today();
                            temp.Shipment_Request_Date__c = Date.today();
                            temp.Pre_inspection_Date__c = Date.today();
                            
                            
                            temp.Inspection_result__c ='OK';
                            
                            if(temp.loaner_application__r.pickup_time__c == null){
                                 if(lac.Return_Track_Company__c == null || lac.Return_Track_Company__c == ''){
                                    ApexPages.addMessage(new ApexPages.Message(ApexPages.Severity.ERROR, '请填写物流公司'));
                                     if(le != null ){
                                        delete le;
                                        le = null;
                                    }
                                    if(rle != null){
                                        delete rle;
                                        rle = null;
                                    }
                                    return null;
                                }
                                if(lac.Return_Trake_Staff__c == null || lac.Return_Trake_Staff__c == '' ){
                                    ApexPages.addMessage(new ApexPages.Message(ApexPages.Severity.ERROR, '请填写发货人'));
                                    if(le != null ){
                                        delete le;
                                        le = null;
                                    }
                                    if(rle != null){
                                        delete rle;
                                        rle = null;
                                    }
                                    return null;
                                }

                                temp.Loaner_Express__c = le.id;
                                temp.delivery_company__c = lac.Return_Track_Company__c;
                                temp.Tracking_Number__c = lac.Return_Track_Number__c;
                                temp.RAESD_Status__c = '已出库';
                                //发货方明细回寄物流信息
                                lad.Return_Trake_Staff__c = lac.Return_Trake_Staff__c;
                                lad.Return_Track_Number__c = lac.Return_Track_Number__c;
                                lad.Return_Track_Company__c = lac.Return_Track_Company__c;
                                lad.Return_Express__c = rle.id;
                                if(temp.LOANER__r.RecordType.Id == System.label.Asset_Record_Type1){
                                    if(la.Equipment_Type__c== 'NDT' || la.Equipment_Type__c == 'ANI' || la.Equipment_Type__c == 'BS'){
                                        Asset loa = new Asset(id = lad.LOANER__c);
                                        loa.Loaner__c = temp.loaner_application__r.Owner.Name;
                                        loa.Rental_Customer__c = temp.loaner_application__r.Agent__c;
                                        loa.Rental_Start_Date__c = temp.loaner_application__r.Rental_Start_Date__c;
                                        loa.Rental_end_Date__c = temp.loaner_application__r.Rental_end_Date__c;
                                        assList.add(loa);
                                    }
                                } 
                                 if(laSet.size()>1){
                                    ApexPages.addMessage(new ApexPages.Message(ApexPages.Severity.ERROR, '您选择的样机不只属于一个转借单'));
                                     if(le != null ){
                                        delete le;
                                        le = null;
                                    }
                                    if(rle != null){
                                        delete rle;
                                        rle = null;
                                    }
                                    return null;
                                }       
                                updList.add(temp);
                                updList.add(lad);
                                laSet.add(temp.loaner_application__c);
                                count++;
                            }else{
                                
                                lad.Return_Trake_Staff__c = lac.Return_Trake_Staff__c;
                                temp.Receipt_Status__c = 'OK';
                                temp.Receipt_Date__c =  Date.today();
                                temp.RAESD_Status__c = '申请者已收货';
                                
                                if(temp.LOANER__r.RecordType.Id == System.label.Asset_Record_Type1){
                                    if(la.Equipment_Type__c== 'NDT' || la.Equipment_Type__c == 'ANI' || la.Equipment_Type__c == 'BS'){
                                        Asset loa = new Asset(id = lad.LOANER__c);
                                        loa.Rental_Customer__c = temp.loaner_application__r.Agent__c;
                                        loa.Rental_Start_Date__c = temp.loaner_application__r.Rental_Start_Date__c;
                                        loa.Rental_end_Date__c = temp.loaner_application__r.Rental_end_Date__c;
                                        assList.add(loa);
                                    }
                                } 
                                if(laSet.size()>1){
                                    ApexPages.addMessage(new ApexPages.Message(ApexPages.Severity.ERROR, '您选择的样机不只属于一个转借单'));
                                    if(le != null ){
                                        delete le;
                                        le = null;
                                    }
                                    if(rle != null){
                                        delete rle;
                                        rle = null;
                                    }
                                    return null;
                                }     
                                pickupFalg = true;
                                updList.add(temp);
                                updList.add(lad);
                                laSet.add(temp.loaner_application__c);
                                if(le != null ){
                                    delete le;
                                    le = null;
                                }
                                if(rle != null){
                                    delete rle;
                                    rle = null;
                                }
                            }
                           
                        }
                    }
                   
                }
            }
            
            if(!pickupFalg){
                User temp = [select id,Name from User where id = :UserInfo.getUserId()];
                rle.Return_Sender__c = lac.Return_Trake_Staff__c;
                rle.Asset_Return_Date__c = Date.today();
                rle.Return_LogisticsCompany__c = lac.Return_Track_Company__c;
                rle.Return_LogisticsNumber__c =  lac.Return_Track_Number__c;
                rle.LendOrder__c = le.id;
                rle.IsLendOrder__c = true;
                rle.loaner_application__c = dataLines[0].lad.loaner_application__c;

                le.Consignor_LogisticsNumber__c = lac.Return_Track_Number__c;
                le.Consignor_LogisticsCompany__c =lac.Return_Track_Company__c;
                le.consignor__c = temp.id;
                le.Shipment_Request_Date__c = Date.today();       
                le.NotReceivingNum__c = count;
                le.IsLendOrder__c = true;
                le.loaner_application__c = lad1s[0].loaner_application__c;
            }
            Savepoint sp = Database.setSavepoint();
            try {
                if (updList.size() > 0) {
                    update updList;
                    if(la.Status__c != '完毕'){
                        la.Status__c =  LoanerOrderState.getOrderStater(la.Id);
                        if(la.Status__c == '全部回寄')  la.Asset_Return_Date_All__c = Date.today();
                        if(la.Status__c == '全部回收'){   
                            la.Asset_Return_Date_All__c = Date.today();
                            la.LoanerClosedDateAll__c = Date.today();

                            if (la.Equipment_Type__c == 'NDT' || la.Equipment_Type__c == 'ANI') {
                                PrototypeToThaw.UserUnfreeze(la.Id);
                            }

                        }
                        la.Asset_Return_Date_All__c = Date.today();
                        update la;
                    }
                    
                    List<loaner_application__c> templa = new List<loaner_application__c>();

                    for(String loanerId : laSet){
                        loaner_application__c newla =  new loaner_application__c();
                        newla.id = loanerId;
                        newla.Status__c = LoanerOrderState.getOrderStater(loanerId);
                        if(newla.Status__c == '部分发货') newla.Shipping_Finished_Date__c = Date.today();
                        if(newla.Status__c == ' 全部发货' || newla.Status__c == '申请者已收货'){
                            newla.Shipping_Finished_Date__c = Date.today();
                            newla.Shipping_Finished_Date_All__c = Date.today();
                        }
                        templa.add(newla);
                    }
                    update templa;
                    if(!pickupFalg){
                        update le;
                        update rle;
                    }
                    if(assList.size()>0){
                        update assList;
                    }

                }else{
                    if(le != null ){
                        delete le;
                        le = null;
                    }
                    if(rle != null){
                        delete rle;
                        rle = null;
                    }
                    ApexPages.addMessage(new ApexPages.Message(ApexPages.Severity.ERROR, '请选择出库的样机'));
                    return null;
                }
            } catch (Exception ex) {
                Database.rollback(sp);
                if(le != null ){
                    delete le;
                    le = null;
                }
                if(rle != null){
                    delete rle;
                    rle = null;
                }
                ApexPages.addmessage(new ApexPages.message(ApexPages.severity.Error, ex.getMessage() + ' | Line:' + ex.getLineNumber()));
                return null;
            }
        }
       //return null;
        // 返回样机借出申请画面

        String url = baseUrl;
        url += '\\' + laId;
        return new Pagereference(url);
    }

    public Loaner_Express__c createExpress(String str){
        Date temp = Date.today();
        Loaner_Express__c le = new Loaner_Express__c();
        le.loaner_application__c = laId;
        le.Name = temp.day()+ '日'+str+'物流单';
        if(str.equals('回寄')) le.IsDeliveryLogistics__c = false;
        try{
            insert le;
        }catch(Exception ex){
             ApexPages.addmessage(new ApexPages.message(ApexPages.severity.Error, ex.getMessage() + ' | Line:' + ex.getLineNumber()));
        }

        return le;
    }

    public PageReference cancelBtn() {
        // 返回样机借出申请画面
        String url = baseUrl;
        url += '\\' + laId;
        return new Pagereference(url);
    }

    public class DataLineBean {
        //转借单号
        public String num{get;set;}
        //转借代理商
        public String ltc{get;set;}
        // public String PDFflag {get; set;}
        public boolean PDFflag{get; set;}
        // 是否选择
        public boolean checkFlag { get; set; }
        // 行号
        public Integer lineNo { get; private set; }
        // 样机借出申请明细
        public loaner_application_detail__c lad { get; set; }

        //public DataLineBean(Integer in_no, loaner_application_detail__c in_lad,String in_PDFflag) {
        public DataLineBean(Integer in_no, loaner_application_detail__c in_lad,boolean in_PDFflag,String in_ltc,String in_num) {
            PDFflag = in_PDFflag;
            checkFlag = false;
            lineNo = in_no;
            lad = in_lad;
            ltc = in_ltc;
            num = in_num;
        }
    }


























































































































































































































































































































public PageReference sos() {
    Integer i=1;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    i++;
    return null;
    }
}