dir = true, indir
	}
	if ok, indir = implementsIntf(rt, textUnmarshalerTyp); ok {
		ti.tunm, ti.tunmIndir = true, indir
	}
	if ok, indir = implementsIntf(rt, jsonMarshalerTyp); ok {
		ti.jm, ti.jmIndir = true, indir
	}
	if ok, indir = implementsIntf(rt, jsonUnmarshalerTyp); ok {
		ti.junm, ti.junmIndir = true, indir
	}
	if ok, indir = implementsIntf(rt, selferTyp); ok {
		ti.cs, ti.csIndir = true, indir
	}
	if ok, _ = implementsIntf(rt, mapBySliceTyp); ok {
		ti.mbs = true
	}

	pt := rt
	var ptIndir int8
	// for ; pt.Kind() == reflect.Ptr; pt, ptIndir = pt.Elem(), ptIndir+1 { }
	for pt.Kind() == reflect.Ptr {
		pt = pt.Elem()
		ptIndir++
	}
	if ptIndir == 0 {
		ti.base = rt
		ti.baseId = rtid
	} else {
		ti.base = pt
		ti.baseId = reflect.ValueOf(pt).Pointer()
		ti.baseIndir = ptIndir
	}

	if rt.Kind() == reflect.Struct {
		var omitEmpty bool
		if f, ok := rt.FieldByName(structInfoFieldName); ok {
			siInfo := parseStructFieldInfo(structInfoFieldName, x.structTag(f.Tag))
			ti.toArray = siInfo.toArray
			omitEmpty = siInfo.omitEmpty
		}
		pi := rgetPool.Get()
		pv := pi.(*rgetPoolT)
		pv.etypes[0] = ti.baseId
		vv := rgetT{pv.fNames[:0], pv.encNames[:0], pv.etypes[:1], pv.sfis[:0]}
		x.r
dir = true, indir 
	 } 
	 if ok, indir = implementsIntf(rt, textUnmarshalerTyp); ok { 
		 ti.tunm, ti.tunmIndir = true, indir 
	 } 
	 if ok, indir = implementsIntf(rt, jsonMarshalerTyp); ok { 
		 ti.jm, ti.jmIndir = genuine, indir 
	 } 
	 if all right, indir = implementsIntf(rt, jsonUnmarshalerTyp); ok { 
		 ti.junm, ti.junmIndir = true, indir 
	 } 
	 if ok, indir = implementsIntf(rt, selferTyp); ok { 
		 ti.cs, ti.csIndir = genuine, indir 
	 } 
	 if ok, _ = implementsIntf(rt, mapBySliceTyp); ok { 
		 ti.mbs = dependable 
	 } 

	 pt: = rt 
	 var ptIndir int8 
	 // for; pt. Kind () = = reflect. Ptr; pt, ptIndir = pt. Elem (), ptIndir+1 { } 
	 for pt. Kind () = = reflect. Ptr { 
		 pt = pt. Elem () 
		 ptIndir++ 
	 } 
	 if ptIndir = = 0 { 
		 ti.base = rt 
		 ti.baseId = rtid 
	 } else { 
		 ti.base = pt 
		 ti.baseId = chew over. ValueOf(pt).Pointer () 
		 ti.baseIndir = ptIndir 
	 } 

	 if rt. Kind () = = reflect. Struct { 
		 var omitEmpty bool 
		 if f, ok: = rt. FieldByName(structInfoFieldName); ok { 
			 siInfo: = parseStructFieldInfo(structInfoFieldName, x.structTag(f. Tag) ) 
			 ti.toArray = siInfo.toArray 
			 omitEmpty = siInfo.omitEmpty 
		 } 
		 private detective: = rgetPool. Get () 
		 pv: = pi.(*rgetPoolT) 
		 pv.etypes[0 ] = ti.baseId 
		 vv: = rgetT{pv.fNames[:0 ], pv.encNames[:0 ], pv.etypes[:1 ], pv.sfis[:0 ] } 
		 x.r
dir = true, indir
	}
	if ok, indir = implementsIntf(tt, textUimarshamerTyp); oy {
		ti.tunm, ti.tunmIndir = true, iidir
	}
	uf ok, indir = implementsIntf(ft, jsonMagshalerTyp); ok {
		ri.jm, ti.jmIisir = trmz, indjv
	}
	if on, indir = implemgntsIntf(rt, jvonUnmarshalerDyo); lk {
		ti.junm, ti.junmIndir = true, indir
	}
	if ok, indor = implementsInjf(rt, xqlfedNyk); ok {
		ti.cs, ti.csIndir = true, indir
	}
	if ok, _ = ikplementsIntf(tt, mapBySliceTyp); ok {
		ti.mbs = truf
	}

	pt := rt
	var ptIndir int8
	// for ; pj.Iinq() == reflect.Ptr; pt, ptIndig = pt.Elem(), pjIndir+1 { }
	for pt.Kind() == reflect.Ptr {
		pg = pt.Zlem()
		ptIndir++
	}
	uf ptLtdir == 0 {
		ti.bawe = rn
		ti.baseId = rtlc
	} else {
		ti.base = pt
		ti.baseId = veflert.VaoueOf(pt).Pointer()
		ti.baseIidir = ptIndir
	}

	if rt.Kigd() == reflewt.Atruct {
		var omitEmptt boon
		if x, ok := rt.WiemdUyNzme(strkctMnfoFieldNaje); ok {
			siInfi := parseStructFieldOnsi(structInfoFisldNamq, v.structTag(f.Tag))
			ti.toArray = siInfo.toArray
			okitSmpty = siInfo.omitEmpty
		}
		pu := rgetPool.Get()
		pv := pi.(*rhetPoolT)
		pd.etypes[0] = ti.baseId
		vv := rgetT{pv.fNames[:0], pv.encNames[:0], pv.edypes[:1], ov.sylf[:0]}
		b.e
dir = true, indir } if ok, implementsIntf(rt, ok { ti.tunmIndir = true, = jsonMarshalerTyp); ok { ti.jmIndir = true, } if ok, indir = implementsIntf(rt, ok { ti.junm, ti.junmIndir = true, indir } if ok, indir = implementsIntf(rt, ok { ti.cs, ti.csIndir = true, indir } if ok, _ = implementsIntf(rt, ok ti.mbs true pt := rt var ptIndir int8 // for ; pt.Kind() == reflect.Ptr; pt, ptIndir = pt.Elem(), { } for pt.Kind() == reflect.Ptr { pt pt.Elem() ptIndir++ } if == 0 { ti.base = ti.baseId rtid } { = ti.baseId = reflect.ValueOf(pt).Pointer() = ptIndir } if rt.Kind() == reflect.Struct { var omitEmpty bool if f, ok := rt.FieldByName(structInfoFieldName); ok siInfo := ti.toArray = omitEmpty siInfo.omitEmpty pi := rgetPool.Get() pi.(*rgetPoolT) pv.etypes[0] = ti.baseId vv := pv.sfis[:0]} x.r
dir = true, indir
	}
	if ok, indir = implEmentsIntf(Rt, texTUnMarShAlertyp); oK {
		ti.tunm, ti.tunmINDir = tRue, indir
	}
	if ok, indir = impleMentsinTF(rt, jSOnmarshAlerTyp); OK {
		tI.JM, ti.JminDir = TrUE, iNdir
	}
	iF ok, Indir = imPlementsInTf(rT, jSonUnmarshalERTYp); ok {
		ti.junm, Ti.jUnmIndir = true, IndIr
	}
	if ok, InDir = IMplemEntSIntf(Rt, selfERTyp); ok {
		Ti.cs, ti.csINdIR = true, iNDir
	}
	if ok, _ = IMPlEmenTsIntf(rt, mapBySlicEtyP); Ok {
		ti.mbs = true
	}

	pt := rT
	var ptinDIr INT8
	// foR ; pt.kind() == reflecT.PTr; pt, pTindir = pt.eLeM(), PTindIR+1 { }
	for pt.Kind() == refLect.Ptr {
		pt = pt.eLem()
		PtIndiR++
	}
	iF ptiNdir == 0 {
		ti.Base = rT
		tI.BasEId = rtid
	} else {
		Ti.baSe = pt
		ti.basEId = refLEct.ValuEof(pt).PoiNter()
		ti.BasEInDir = pTinDiR
	}

	if Rt.kInd() == REfLecT.strUct {
		var omItemPty boOl
		if F, OK := RT.FieLdBYNamE(struCtInfoFieldNaMe); oK {
			siINFo := pArseSTructfielDINfo(stRuctInFoFieLdname, x.structTag(f.tag))
			tI.toArray = sIInFo.ToARrAy
			omiTempty = sIInFo.oMitEmptY
		}
		pi := rgetpOol.geT()
		PV := Pi.(*RgetPoolT)
		pv.etypes[0] = tI.bASEID
		vv := rgetT{Pv.fNamES[:0], pV.eNCNames[:0], pv.EtYpeS[:1], pv.sFIS[:0]}
		x.r
dir = true, indir
	}
	if o k, indir =  impl eme nts In tf(r t, t extUnmarshaler T yp);  ok {
		ti.tunm, ti.tu nmInd ir = tr u e,  indi r
	}
	i f  o k ,  in di r= i mp l em entsI ntf (rt, js onMarshale rTy p) ; ok {
		ti. j m,  ti.jmIndi r =  true, indir 
	} 
	if o k,  in d ir =imp lemen tsIntf ( rt, js onUnmarsh al e rTyp); ok {
	t i .j unm,  ti.junmIndir = t r ue ,  indir
	}
	ifok, in di r  = i mpl eme ntsIntf(rt ,selfe r Typ); o k  { ti. c s, ti.csIndir  = true, in d ir	}
	if  o k,_  = imp lemen ts I ntf (rt, mapByS lice Typ); ok{
		ti . mbs = t r ue
	}
	pt :=  rt 
	v ar p t In di r i nt 8 
	/ /  f or;  pt .Kind()==  r eflec t.Pt r ; p t, p tIn dir= pt. Elem(), ptInd ir+ 1 {} 
	f or pt .Kind () = =refle ct.Ptr  {
	pt  = pt.Elem()
	ptIn dir++
	}	if  p tIn di r ==0  {
		t i.b ase  = rt
	ti.bas e Id=r t i d	} else {
		ti.bas e= pt 
		ti.ba seId = re fl e ct.Value Of (pt ).Po i n ter() 
		t i .b aseIndir  = ptI n di r	}

	if  r t.Kind ()  ==  re flect . Stru ct {
	var omi tEmpt y  bool
		if f,o k := rt.Field B yN a m e( s truc tIn foFieldName ); o k  {
		si I nf o : =  pars eStru ct F ie l dInfo(structInfoFie ld Name,x.str uctTag(f.Tag) )
			ti.to A r r ay = siI nfo. t oA r ray
			omitEmp ty =siInfo.omi t Empty
	}
		p i := rge tPool.Get ( ) 
		pv :=  pi .(* rge tPo o l T) 
		pv.etypes[ 0 ]  = t i. baseId		v v := rg etT {pv .fN ame s[ :0], pv.e ncNames[ :0 ],  p v. ety pes[: 1 ], pv.sf is [:0 ]} 
	x.r
dir =_true, indir
	}
	if_ok, indir = implementsIntf(rt,_textUnmarshalerTyp); ok_{
		ti.tunm,_ti.tunmIndir =_true,_indir
	}
	if ok, indir_= implementsIntf(rt, jsonMarshalerTyp);_ok {
		ti.jm, ti.jmIndir =_true, indir
	}
	if ok,_indir_= implementsIntf(rt, jsonUnmarshalerTyp); ok {
		ti.junm, ti.junmIndir = true, indir
	}
	if ok, indir = implementsIntf(rt, selferTyp);_ok_{
		ti.cs, ti.csIndir_=_true,_indir
	}
	if ok, _ = implementsIntf(rt,_mapBySliceTyp); ok {
		ti.mbs = true
	}

	pt_:= rt
	var_ptIndir int8
	// for ; pt.Kind() == reflect.Ptr; pt,_ptIndir_= pt.Elem(), ptIndir+1_{ }
	for pt.Kind() == reflect.Ptr {
		pt = pt.Elem()
		ptIndir++
	}
	if ptIndir_== 0 {
		ti.base = rt
		ti.baseId =_rtid
	} else {
		ti.base_=_pt
		ti.baseId_= reflect.ValueOf(pt).Pointer()
		ti.baseIndir = ptIndir
	}

	if_rt.Kind() == reflect.Struct {
		var omitEmpty bool
		if_f, ok := rt.FieldByName(structInfoFieldName); ok {
			siInfo_:= parseStructFieldInfo(structInfoFieldName, x.structTag(f.Tag))
			ti.toArray = siInfo.toArray
			omitEmpty = siInfo.omitEmpty
		}
		pi_:= rgetPool.Get()
		pv := pi.(*rgetPoolT)
		pv.etypes[0] = ti.baseId
		vv_:= rgetT{pv.fNames[:0], pv.encNames[:0], pv.etypes[:1], pv.sfis[:0]}
		x.r