|  | @@ -13,6 +13,7 @@ import lombok.extern.slf4j.Slf4j;
 | 
											
												
													
														|  |  import org.apache.commons.collections4.MapUtils;
 |  |  import org.apache.commons.collections4.MapUtils;
 | 
											
												
													
														|  |  import org.apache.commons.lang3.StringUtils;
 |  |  import org.apache.commons.lang3.StringUtils;
 | 
											
												
													
														|  |  import org.springframework.beans.factory.annotation.Autowired;
 |  |  import org.springframework.beans.factory.annotation.Autowired;
 | 
											
												
													
														|  | 
 |  | +import org.springframework.beans.factory.annotation.Value;
 | 
											
												
													
														|  |  import org.springframework.stereotype.Service;
 |  |  import org.springframework.stereotype.Service;
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  |  import java.io.BufferedReader;
 |  |  import java.io.BufferedReader;
 | 
											
										
											
												
													
														|  | @@ -26,6 +27,9 @@ import java.util.stream.Collectors;
 | 
											
												
													
														|  |  @Service
 |  |  @Service
 | 
											
												
													
														|  |  public class RankService680 {
 |  |  public class RankService680 {
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  | 
 |  | +    @Value("${id.feature.default.value:0.01}")
 | 
											
												
													
														|  | 
 |  | +    private String idDefaultValue;
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  |      @Autowired
 |  |      @Autowired
 | 
											
												
													
														|  |      private FeatureService featureService;
 |  |      private FeatureService featureService;
 | 
											
												
													
														|  |  
 |  |  
 | 
											
										
											
												
													
														|  | @@ -116,19 +120,47 @@ public class RankService680 {
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  |          for (AdRankItem item : result) {
 |  |          for (AdRankItem item : result) {
 | 
											
												
													
														|  |              item.setScore(item.getLrScore() * item.getCpa());
 |  |              item.setScore(item.getLrScore() * item.getCpa());
 | 
											
												
													
														|  | 
 |  | +            item.getScoreMap().put("cpa", item.getCpa());
 | 
											
												
													
														|  |              item.getFeatureMap().putAll(userFeatureMap);
 |  |              item.getFeatureMap().putAll(userFeatureMap);
 | 
											
												
													
														|  | -            if (MapUtils.isNotEmpty(videoFeature)) {
 |  | 
 | 
											
												
													
														|  | -                item.getMetaFeatureMap().putAll(videoFeature);
 |  | 
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +            for (Map.Entry<String, Map<String, String>> entry : videoFeature.entrySet()) {
 | 
											
												
													
														|  | 
 |  | +                if (MapUtils.isNotEmpty(entry.getValue())) {
 | 
											
												
													
														|  | 
 |  | +                    item.getMetaFeatureMap().put(entry.getKey(), entry.getValue());
 | 
											
												
													
														|  | 
 |  | +                }
 | 
											
												
													
														|  |              }
 |  |              }
 | 
											
												
													
														|  | -            if (MapUtils.isNotEmpty(userFeature)) {
 |  | 
 | 
											
												
													
														|  | -                item.getMetaFeatureMap().putAll(userFeature);
 |  | 
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +            for (Map.Entry<String, Map<String, String>> entry : userFeature.entrySet()) {
 | 
											
												
													
														|  | 
 |  | +                if (MapUtils.isNotEmpty(entry.getValue())) {
 | 
											
												
													
														|  | 
 |  | +                    item.getMetaFeatureMap().put(entry.getKey(), entry.getValue());
 | 
											
												
													
														|  | 
 |  | +                }
 | 
											
												
													
														|  |              }
 |  |              }
 | 
											
												
													
														|  | -            if (allAdVerFeature.containsKey(item.getAdVerId())) {
 |  | 
 | 
											
												
													
														|  | -                item.getMetaFeatureMap().putAll(allAdVerFeature.get(item.getAdVerId()));
 |  | 
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +            Map<String, Map<String, String>> adVerFeature = allAdVerFeature.getOrDefault(item.getAdVerId(), new HashMap<>());
 | 
											
												
													
														|  | 
 |  | +            for (Map.Entry<String, Map<String, String>> entry : adVerFeature.entrySet()) {
 | 
											
												
													
														|  | 
 |  | +                if (MapUtils.isNotEmpty(entry.getValue())) {
 | 
											
												
													
														|  | 
 |  | +                    item.getMetaFeatureMap().put(entry.getKey(), entry.getValue());
 | 
											
												
													
														|  | 
 |  | +                }
 | 
											
												
													
														|  |              }
 |  |              }
 | 
											
												
													
														|  | -            if (allCidFeature.containsKey(String.valueOf(item.getAdId()))) {
 |  | 
 | 
											
												
													
														|  | -                item.getMetaFeatureMap().putAll(allCidFeature.get(String.valueOf(item.getAdId())));
 |  | 
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +            Map<String, Map<String, String>> cidFeature = allCidFeature.getOrDefault(String.valueOf(item.getAdId()), new HashMap<>());
 | 
											
												
													
														|  | 
 |  | +            for (Map.Entry<String, Map<String, String>> entry : cidFeature.entrySet()) {
 | 
											
												
													
														|  | 
 |  | +                if (MapUtils.isNotEmpty(entry.getValue())) {
 | 
											
												
													
														|  | 
 |  | +                    item.getMetaFeatureMap().put(entry.getKey(), entry.getValue());
 | 
											
												
													
														|  | 
 |  | +                }
 | 
											
												
													
														|  |              }
 |  |              }
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +            // if (MapUtils.isNotEmpty(videoFeature)) {
 | 
											
												
													
														|  | 
 |  | +            //     item.getMetaFeatureMap().putAll(videoFeature);
 | 
											
												
													
														|  | 
 |  | +            // }
 | 
											
												
													
														|  | 
 |  | +            // if (MapUtils.isNotEmpty(userFeature)) {
 | 
											
												
													
														|  | 
 |  | +            //     item.getMetaFeatureMap().putAll(userFeature);
 | 
											
												
													
														|  | 
 |  | +            // }
 | 
											
												
													
														|  | 
 |  | +            // if (allAdVerFeature.containsKey(item.getAdVerId())) {
 | 
											
												
													
														|  | 
 |  | +            //     item.getMetaFeatureMap().putAll(allAdVerFeature.get(item.getAdVerId()));
 | 
											
												
													
														|  | 
 |  | +            // }
 | 
											
												
													
														|  | 
 |  | +            // if (allCidFeature.containsKey(String.valueOf(item.getAdId()))) {
 | 
											
												
													
														|  | 
 |  | +            //     item.getMetaFeatureMap().putAll(allCidFeature.get(String.valueOf(item.getAdId())));
 | 
											
												
													
														|  | 
 |  | +            // }
 | 
											
												
													
														|  |          }
 |  |          }
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  |          Collections.sort(result);
 |  |          Collections.sort(result);
 | 
											
										
											
												
													
														|  | @@ -145,25 +177,26 @@ public class RankService680 {
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  |          List<String> adVerIdList = adIdList.stream()
 |  |          List<String> adVerIdList = adIdList.stream()
 | 
											
												
													
														|  |                  .map(AdPlatformCreativeDTO::getAdVerId)
 |  |                  .map(AdPlatformCreativeDTO::getAdVerId)
 | 
											
												
													
														|  | 
 |  | +                .filter(StringUtils::isNotBlank)
 | 
											
												
													
														|  |                  .distinct()
 |  |                  .distinct()
 | 
											
												
													
														|  |                  .collect(Collectors.toList());
 |  |                  .collect(Collectors.toList());
 | 
											
												
													
														|  |          return featureService.getFeature(cidList, adVerIdList, param);
 |  |          return featureService.getFeature(cidList, adVerIdList, param);
 | 
											
												
													
														|  |      }
 |  |      }
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  |      private void handleB1Feature(Map<String, String> b1Feature, Map<String, String> cidFeatureMap, String cid) {
 |  |      private void handleB1Feature(Map<String, String> b1Feature, Map<String, String> cidFeatureMap, String cid) {
 | 
											
												
													
														|  | -        cidFeatureMap.put("cid_" + cid, "1");
 |  | 
 | 
											
												
													
														|  | -        if (StringUtils.isNotBlank(b1Feature.get("adid"))) {
 |  | 
 | 
											
												
													
														|  | -            String adId = b1Feature.get("adid");
 |  | 
 | 
											
												
													
														|  | -            cidFeatureMap.put("adid_" + adId, "1");
 |  | 
 | 
											
												
													
														|  | -        }
 |  | 
 | 
											
												
													
														|  | 
 |  | +        cidFeatureMap.put("cid_" + cid, "0.01");
 | 
											
												
													
														|  | 
 |  | +        // if (StringUtils.isNotBlank(b1Feature.get("adid"))) {
 | 
											
												
													
														|  | 
 |  | +        //     String adId = b1Feature.get("adid");
 | 
											
												
													
														|  | 
 |  | +        //     cidFeatureMap.put("adid_" + adId, idDefaultValue);
 | 
											
												
													
														|  | 
 |  | +        // }
 | 
											
												
													
														|  |          if (StringUtils.isNotBlank(b1Feature.get("adverid"))) {
 |  |          if (StringUtils.isNotBlank(b1Feature.get("adverid"))) {
 | 
											
												
													
														|  |              String adVerId = b1Feature.get("adverid");
 |  |              String adVerId = b1Feature.get("adverid");
 | 
											
												
													
														|  | -            cidFeatureMap.put("adverid_" + adVerId, "1");
 |  | 
 | 
											
												
													
														|  | -        }
 |  | 
 | 
											
												
													
														|  | -        if (StringUtils.isNotBlank(b1Feature.get("targeting_conversion"))) {
 |  | 
 | 
											
												
													
														|  | -            String targetingConversion = b1Feature.get("targeting_conversion");
 |  | 
 | 
											
												
													
														|  | -            cidFeatureMap.put("targeting_conversion_" + targetingConversion, "1");
 |  | 
 | 
											
												
													
														|  | 
 |  | +            cidFeatureMap.put("adverid_" + adVerId, "0.01");
 | 
											
												
													
														|  |          }
 |  |          }
 | 
											
												
													
														|  | 
 |  | +        // if (StringUtils.isNotBlank(b1Feature.get("targeting_conversion"))) {
 | 
											
												
													
														|  | 
 |  | +        //     String targetingConversion = b1Feature.get("targeting_conversion");
 | 
											
												
													
														|  | 
 |  | +        //     cidFeatureMap.put("targeting_conversion_" + targetingConversion, idDefaultValue);
 | 
											
												
													
														|  | 
 |  | +        // }
 | 
											
												
													
														|  |          if (StringUtils.isNotBlank(b1Feature.get("cpa"))) {
 |  |          if (StringUtils.isNotBlank(b1Feature.get("cpa"))) {
 | 
											
												
													
														|  |              String cpa = b1Feature.get("cpa");
 |  |              String cpa = b1Feature.get("cpa");
 | 
											
												
													
														|  |              cidFeatureMap.put("cpa", cpa);
 |  |              cidFeatureMap.put("cpa", cpa);
 | 
											
										
											
												
													
														|  | @@ -193,11 +226,16 @@ public class RankService680 {
 | 
											
												
													
														|  |                  double click = Double.parseDouble(feature.getOrDefault("ad_click_" + time, "0"));
 |  |                  double click = Double.parseDouble(feature.getOrDefault("ad_click_" + time, "0"));
 | 
											
												
													
														|  |                  double conver = Double.parseDouble(feature.getOrDefault("ad_conversion_" + time, "0"));
 |  |                  double conver = Double.parseDouble(feature.getOrDefault("ad_conversion_" + time, "0"));
 | 
											
												
													
														|  |                  double income = Double.parseDouble(feature.getOrDefault("ad_income_" + time, "0"));
 |  |                  double income = Double.parseDouble(feature.getOrDefault("ad_income_" + time, "0"));
 | 
											
												
													
														|  | 
 |  | +                double f2 = NumUtil.div(conver, view);
 | 
											
												
													
														|  |                  cidFeatureMap.put(prefix + "_" + time + "_ctr", String.valueOf(NumUtil.div(click, view)));
 |  |                  cidFeatureMap.put(prefix + "_" + time + "_ctr", String.valueOf(NumUtil.div(click, view)));
 | 
											
												
													
														|  | -                cidFeatureMap.put(prefix + "_" + time + "_ctcvr", String.valueOf(NumUtil.div(conver, view)));
 |  | 
 | 
											
												
													
														|  | 
 |  | +                cidFeatureMap.put(prefix + "_" + time + "_ctcvr", String.valueOf(f2));
 | 
											
												
													
														|  |                  cidFeatureMap.put(prefix + "_" + time + "_cvr", String.valueOf(NumUtil.div(conver, click)));
 |  |                  cidFeatureMap.put(prefix + "_" + time + "_cvr", String.valueOf(NumUtil.div(conver, click)));
 | 
											
												
													
														|  |                  cidFeatureMap.put(prefix + "_" + time + "_conver", String.valueOf(conver));
 |  |                  cidFeatureMap.put(prefix + "_" + time + "_conver", String.valueOf(conver));
 | 
											
												
													
														|  |                  cidFeatureMap.put(prefix + "_" + time + "_ecpm", String.valueOf(NumUtil.div(income * 1000, view)));
 |  |                  cidFeatureMap.put(prefix + "_" + time + "_ecpm", String.valueOf(NumUtil.div(income * 1000, view)));
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +                cidFeatureMap.put(prefix + "_" + time + "_click", String.valueOf(click));
 | 
											
												
													
														|  | 
 |  | +                cidFeatureMap.put(prefix + "_" + time + "_conver*log(view)", String.valueOf(conver * NumUtil.log(view)));
 | 
											
												
													
														|  | 
 |  | +                cidFeatureMap.put(prefix + "_" + time + "_conver*ctcvr", String.valueOf(conver * f2));
 | 
											
												
													
														|  |              }
 |  |              }
 | 
											
												
													
														|  |          }
 |  |          }
 | 
											
												
													
														|  |  
 |  |  
 | 
											
										
											
												
													
														|  | @@ -220,11 +258,16 @@ public class RankService680 {
 | 
											
												
													
														|  |                  double click = Double.parseDouble(feature.getOrDefault("ad_click_" + time, "0"));
 |  |                  double click = Double.parseDouble(feature.getOrDefault("ad_click_" + time, "0"));
 | 
											
												
													
														|  |                  double conver = Double.parseDouble(feature.getOrDefault("ad_conversion_" + time, "0"));
 |  |                  double conver = Double.parseDouble(feature.getOrDefault("ad_conversion_" + time, "0"));
 | 
											
												
													
														|  |                  double income = Double.parseDouble(feature.getOrDefault("ad_income_" + time, "0"));
 |  |                  double income = Double.parseDouble(feature.getOrDefault("ad_income_" + time, "0"));
 | 
											
												
													
														|  | 
 |  | +                double f2 = NumUtil.div(conver, view);
 | 
											
												
													
														|  |                  cidFeatureMap.put(prefix + "_" + time + "_ctr", String.valueOf(NumUtil.div(click, view)));
 |  |                  cidFeatureMap.put(prefix + "_" + time + "_ctr", String.valueOf(NumUtil.div(click, view)));
 | 
											
												
													
														|  | -                cidFeatureMap.put(prefix + "_" + time + "_ctcvr", String.valueOf(NumUtil.div(conver, view)));
 |  | 
 | 
											
												
													
														|  | 
 |  | +                cidFeatureMap.put(prefix + "_" + time + "_ctcvr", String.valueOf(f2));
 | 
											
												
													
														|  |                  cidFeatureMap.put(prefix + "_" + time + "_cvr", String.valueOf(NumUtil.div(conver, click)));
 |  |                  cidFeatureMap.put(prefix + "_" + time + "_cvr", String.valueOf(NumUtil.div(conver, click)));
 | 
											
												
													
														|  |                  cidFeatureMap.put(prefix + "_" + time + "_conver", String.valueOf(conver));
 |  |                  cidFeatureMap.put(prefix + "_" + time + "_conver", String.valueOf(conver));
 | 
											
												
													
														|  |                  cidFeatureMap.put(prefix + "_" + time + "_ecpm", String.valueOf(NumUtil.div(income * 1000, view)));
 |  |                  cidFeatureMap.put(prefix + "_" + time + "_ecpm", String.valueOf(NumUtil.div(income * 1000, view)));
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +                cidFeatureMap.put(prefix + "_" + time + "_click", String.valueOf(click));
 | 
											
												
													
														|  | 
 |  | +                cidFeatureMap.put(prefix + "_" + time + "_conver*log(view)", String.valueOf(conver * NumUtil.log(view)));
 | 
											
												
													
														|  | 
 |  | +                cidFeatureMap.put(prefix + "_" + time + "_conver*ctcvr", String.valueOf(conver * f2));
 | 
											
												
													
														|  |              }
 |  |              }
 | 
											
												
													
														|  |          }
 |  |          }
 | 
											
												
													
														|  |  
 |  |  
 | 
											
										
											
												
													
														|  | @@ -292,9 +335,9 @@ public class RankService680 {
 | 
											
												
													
														|  |              );
 |  |              );
 | 
											
												
													
														|  |              featureMap.put("actionstatic_ctr", String.valueOf(ctr));
 |  |              featureMap.put("actionstatic_ctr", String.valueOf(ctr));
 | 
											
												
													
														|  |          }
 |  |          }
 | 
											
												
													
														|  | -        if (midActionStatic.containsKey("actionstatic_view_" + cid) && midActionStatic.containsKey("timediff_conver_" + cid)) {
 |  | 
 | 
											
												
													
														|  | 
 |  | +        if (midActionStatic.containsKey("actionstatic_view_" + cid) && midActionStatic.containsKey("actionstatic_conver_" + cid)) {
 | 
											
												
													
														|  |              double ctcvr = NumUtil.div(
 |  |              double ctcvr = NumUtil.div(
 | 
											
												
													
														|  | -                    midActionStatic.getOrDefault("timediff_conver_" + cid, 0.0),
 |  | 
 | 
											
												
													
														|  | 
 |  | +                    midActionStatic.getOrDefault("actionstatic_conver_" + cid, 0.0),
 | 
											
												
													
														|  |                      midActionStatic.getOrDefault("actionstatic_view_" + cid, 0.0)
 |  |                      midActionStatic.getOrDefault("actionstatic_view_" + cid, 0.0)
 | 
											
												
													
														|  |              );
 |  |              );
 | 
											
												
													
														|  |              featureMap.put("actionstatic_ctcvr", String.valueOf(ctcvr));
 |  |              featureMap.put("actionstatic_ctcvr", String.valueOf(ctcvr));
 | 
											
										
											
												
													
														|  | @@ -302,7 +345,7 @@ public class RankService680 {
 | 
											
												
													
														|  |          if (midActionStatic.containsKey("actionstatic_conver_" + cid) && midActionStatic.containsKey("actionstatic_click_" + cid)) {
 |  |          if (midActionStatic.containsKey("actionstatic_conver_" + cid) && midActionStatic.containsKey("actionstatic_click_" + cid)) {
 | 
											
												
													
														|  |              double cvr = NumUtil.div(
 |  |              double cvr = NumUtil.div(
 | 
											
												
													
														|  |                      midActionStatic.getOrDefault("actionstatic_click_" + cid, 0.0),
 |  |                      midActionStatic.getOrDefault("actionstatic_click_" + cid, 0.0),
 | 
											
												
													
														|  | -                    midActionStatic.getOrDefault("timediff_conver_" + cid, 0.0)
 |  | 
 | 
											
												
													
														|  | 
 |  | +                    midActionStatic.getOrDefault("actionstatic_conver_" + cid, 0.0)
 | 
											
												
													
														|  |              );
 |  |              );
 | 
											
												
													
														|  |              featureMap.put("actionstatic_cvr", String.valueOf(cvr));
 |  |              featureMap.put("actionstatic_cvr", String.valueOf(cvr));
 | 
											
												
													
														|  |          }
 |  |          }
 | 
											
										
											
												
													
														|  | @@ -436,7 +479,7 @@ public class RankService680 {
 | 
											
												
													
														|  |              return;
 |  |              return;
 | 
											
												
													
														|  |          }
 |  |          }
 | 
											
												
													
														|  |          synchronized (this) {
 |  |          synchronized (this) {
 | 
											
												
													
														|  | -            InputStream resourceStream = RankService680.class.getClassLoader().getResourceAsStream("20240622_ad_bucket_249.txt");
 |  | 
 | 
											
												
													
														|  | 
 |  | +            InputStream resourceStream = RankService680.class.getClassLoader().getResourceAsStream("20240704_ad_bucket_351.txt");
 | 
											
												
													
														|  |              if (resourceStream != null) {
 |  |              if (resourceStream != null) {
 | 
											
												
													
														|  |                  try (BufferedReader reader = new BufferedReader(new InputStreamReader(resourceStream))) {
 |  |                  try (BufferedReader reader = new BufferedReader(new InputStreamReader(resourceStream))) {
 | 
											
												
													
														|  |                      Map<String, double[]> bucketsMap = new HashMap<>();
 |  |                      Map<String, double[]> bucketsMap = new HashMap<>();
 | 
											
										
											
												
													
														|  | @@ -461,7 +504,7 @@ public class RankService680 {
 | 
											
												
													
														|  |                      this.bucketsMap = bucketsMap;
 |  |                      this.bucketsMap = bucketsMap;
 | 
											
												
													
														|  |                      this.bucketsLen = bucketsLen;
 |  |                      this.bucketsLen = bucketsLen;
 | 
											
												
													
														|  |                  } catch (IOException e) {
 |  |                  } catch (IOException e) {
 | 
											
												
													
														|  | -                    log.error("something is wrong in parse bucket file:" + e);
 |  | 
 | 
											
												
													
														|  | 
 |  | +                    log.error("something is wrong in parse bucket file:", e);
 | 
											
												
													
														|  |                  }
 |  |                  }
 | 
											
												
													
														|  |              } else {
 |  |              } else {
 | 
											
												
													
														|  |                  log.error("no bucket file");
 |  |                  log.error("no bucket file");
 | 
											
										
											
												
													
														|  | @@ -476,9 +519,9 @@ public class RankService680 {
 | 
											
												
													
														|  |              double score = Double.parseDouble(entry.getValue());
 |  |              double score = Double.parseDouble(entry.getValue());
 | 
											
												
													
														|  |              // 注意:0值、不在分桶文件中的特征,会被过滤掉。
 |  |              // 注意:0值、不在分桶文件中的特征,会被过滤掉。
 | 
											
												
													
														|  |              if (score > 1E-8) {
 |  |              if (score > 1E-8) {
 | 
											
												
													
														|  | -                if (this.bucketsMap.containsKey(name)) {
 |  | 
 | 
											
												
													
														|  | 
 |  | +                if (this.bucketsMap.containsKey(name) && this.bucketsLen.containsKey(name)) {
 | 
											
												
													
														|  |                      double[] buckets = this.bucketsMap.get(name);
 |  |                      double[] buckets = this.bucketsMap.get(name);
 | 
											
												
													
														|  | -                    int bucketNum = buckets.length + 1;
 |  | 
 | 
											
												
													
														|  | 
 |  | +                    double bucketNum = this.bucketsLen.get(name);
 | 
											
												
													
														|  |                      Double scoreNew = 1.0 / bucketNum * (ExtractorUtils.findInsertPosition(buckets, score) + 1.0);
 |  |                      Double scoreNew = 1.0 / bucketNum * (ExtractorUtils.findInsertPosition(buckets, score) + 1.0);
 | 
											
												
													
														|  |                      newFeatureMap.put(name, String.valueOf(scoreNew));
 |  |                      newFeatureMap.put(name, String.valueOf(scoreNew));
 | 
											
												
													
														|  |                  } else {
 |  |                  } else {
 |