Commit e3560c64 authored by lixiaofang's avatar lixiaofang

add

parents 237e8e1c 90ff242b
...@@ -90,7 +90,6 @@ def auto_click_user(card_info, after_day=False): ...@@ -90,7 +90,6 @@ def auto_click_user(card_info, after_day=False):
card_info["have_pust_num"] = card_info["have_pust_num"] + 1 card_info["have_pust_num"] = card_info["have_pust_num"] + 1
save_data_to_kafka(card_info) # 存储数据 save_data_to_kafka(card_info) # 存储数据
logging.info("get--------click--------------card_info:%s" % card_info)
except: except:
logging_exception() logging_exception()
......
...@@ -3,54 +3,71 @@ import traceback ...@@ -3,54 +3,71 @@ import traceback
from libs.error import logging_exception from libs.error import logging_exception
import logging import logging
from libs.cache import redis_client from libs.cache import redis_client
import json import json, time
from moment.views.send_email import send_email_tome from moment.views.send_email import send_email_tome
from moment.views.process_time import get_vest_userid
import datetime import datetime
def click(card_info): def click(card_info):
try: try:
key = 'have_reply_answer_click:' + str(card_info['card_id'])
redis_data = redis_client.get(key)
if redis_data:
datas = json.loads(str(redis_data, encoding="utf-8"))
if card_info['current_user_id'] in datas:
return False
else:
datas.append(card_info['current_user_id'])
redis_client.set(key, json.dumps(datas))
else:
conent = [card_info['current_user_id']]
redis_client.set(key, json.dumps(conent))
today = datetime.datetime.now() today = datetime.datetime.now()
str_today = str(today.year) + str(today.month) + str(today.day) str_today = str(today.year) + str(today.month) + str(today.day)
key = "auto_vest_one_user_action_answer:" + str(card_info['card_id']) key = "auto_vest_action_click_answer:" + str(card_info['card_id'])
redis_data = redis_client.hget(key, str_today) redis_data = redis_client.hget(key, str_today)
if redis_data: if redis_data:
redis_data = json.loads(str(redis_data, encoding="utf8")) redis_data = json.loads(str(redis_data, encoding="utf8"))
click_num = int(redis_data.get("click")) + 1 have_pust_num = int(redis_data.get('click_have_pust_num', card_info['have_pust_num']))
redis_data['click'] = click_num need_pust_num = int(redis_data.get('click_need_pust_num', card_info['need_pust_num']))
redis_client.hset(key, str_today, json.dumps(redis_data)) if have_pust_num > need_pust_num:
return True
else: else:
##代表还没有存储或者是已经过去一天了 需要清掉数据 从新的一天开始 redis_data['click_have_pust_num'] = have_pust_num + 1
redis_client.delete(key)
redis_data = {"click": 1, "follow": 0, "comment": 0}
redis_client.hset(key, str_today, json.dumps(redis_data)) redis_client.hset(key, str_today, json.dumps(redis_data))
logging.info("get action:click,card_id:%s,redis_data:%s" % (card_info['card_id'], redis_data))
click_num = redis_data["click"]
if click_num > 12:
logging.info("今天已经消费到最大次数了,不能再消费")
return True, False
else: else:
redis_data = {"click_have_pust_num": card_info['have_pust_num'],
"click_need_pust_num": card_info['need_pust_num']}
redis_client.hset(key, str_today, json.dumps(redis_data))
rpc_invoker = get_rpc_invoker() rpc_invoker = get_rpc_invoker()
try: try:
status = rpc_invoker['qa/irrigation/create_answer_vote'](user_id=card_info['current_user_id'], begin = time.time()
current_user_id = get_vest_userid(need_comment_num=1)[0]
status = rpc_invoker['qa/irrigation/create_answer_vote'](user_id=current_user_id,
answer_id=card_info['card_id']).unwrap() answer_id=card_info['card_id']).unwrap()
logging.info('get_create_answer_vote_status:%s,card_id:%s,create_time:%s,耗时:%s' % (
logging.info("get_card_info:%s,create_answer_vote:%s" % (card_info, status)) status, card_info['card_id'], card_info['create_time'], time.time() - begin))
error = status.get('error', 1) error = status.get('error', 1)
if error == 0: if error == 0:
return True, True return True
else: else:
send_email_tome(str(card_info) + str(status)) send_email_tome(str(card_info) + str(status))
return False, True return False
except: except:
logging_exception() logging_exception()
logging.error("catch exception,err_msg:%s" % traceback.format_exc()) logging.error("catch exception,err_msg:%s" % traceback.format_exc())
return False, True return False
except: except:
logging_exception() logging_exception()
logging.error("catch exception,err_msg:%s" % traceback.format_exc()) logging.error("catch exception,err_msg:%s" % traceback.format_exc())
return False, False return False
...@@ -50,6 +50,7 @@ def auto_comment_user(card_info, after_day=False): ...@@ -50,6 +50,7 @@ def auto_comment_user(card_info, after_day=False):
content_level = card_info["content_level"] content_level = card_info["content_level"]
card_info["action_type"] = "comment" card_info["action_type"] = "comment"
tag_names = card_info['tag_names'] tag_names = card_info['tag_names']
tagv3_names = card_info['tagv3_names']
# 当满足这些条件的时候 代表已经完成了下发的所有的时间或者还没有下发过时间 需要给予新的时间 # 当满足这些条件的时候 代表已经完成了下发的所有的时间或者还没有下发过时间 需要给予新的时间
if ("all_follow_id" in card_info and "all_push_time" in card_info and len( if ("all_follow_id" in card_info and "all_push_time" in card_info and len(
...@@ -71,8 +72,7 @@ def auto_comment_user(card_info, after_day=False): ...@@ -71,8 +72,7 @@ def auto_comment_user(card_info, after_day=False):
if len(get_time) > 0 and time_region != 3: if len(get_time) > 0 and time_region != 3:
###拿到下发时间后根据下发的时间个数去拿对应个数的马甲账号 ###拿到下发时间后根据下发的时间个数去拿对应个数的马甲账号
all_content = get_vest_userid_and_comment(need_comment_num=len(get_time), all_content = get_vest_userid_and_comment(need_comment_num=len(get_time),
tag_names=tag_names, tag_names=tag_names, tagv3_names=tagv3_names)
card_id=card_info['card_id'])
userids = get_vest_userid(need_comment_num=len(get_time)) userids = get_vest_userid(need_comment_num=len(get_time))
for i in range(0, len(userids)): for i in range(0, len(userids)):
...@@ -93,7 +93,6 @@ def auto_comment_user(card_info, after_day=False): ...@@ -93,7 +93,6 @@ def auto_comment_user(card_info, after_day=False):
break break
repeat_time += 1 repeat_time += 1
logging.info("get comment_have_get_after__time:%s" % card_info)
else: # 代表还有push好的时间没有下发完成 需要继续使用这些 else: # 代表还有push好的时间没有下发完成 需要继续使用这些
current_user_id = card_info["current_user_id"] current_user_id = card_info["current_user_id"]
card_info["all_follow_id"].remove(current_user_id) card_info["all_follow_id"].remove(current_user_id)
...@@ -114,7 +113,6 @@ def auto_comment_user(card_info, after_day=False): ...@@ -114,7 +113,6 @@ def auto_comment_user(card_info, after_day=False):
card_info['current_push_time'] = card_info['all_push_time'][0] card_info['current_push_time'] = card_info['all_push_time'][0]
save_data_to_kafka(card_info) # 存储数据 save_data_to_kafka(card_info) # 存储数据
logging.info("get-------comment---------------card_info:%s" % card_info)
except: except:
logging_exception() logging_exception()
......
...@@ -3,10 +3,10 @@ import traceback ...@@ -3,10 +3,10 @@ import traceback
from libs.error import logging_exception from libs.error import logging_exception
import logging import logging
from libs.cache import redis_client from libs.cache import redis_client
import json import json, time
from moment.views.send_email import send_email_tome from moment.views.send_email import send_email_tome
import datetime import datetime
from moment.views.process_time import get_vest_userid_and_comment from moment.views.process_time import get_vest_userid_and_comment, get_vest_userid
def comment(card_info): def comment(card_info):
...@@ -33,7 +33,6 @@ def comment(card_info): ...@@ -33,7 +33,6 @@ def comment(card_info):
redis_data = {"comment": 1} redis_data = {"comment": 1}
redis_client.hset(key, str_today, json.dumps(redis_data)) redis_client.hset(key, str_today, json.dumps(redis_data))
logging.info("get action:comment,card_id:%s,redis_data:%s" % (card_info['card_id'], redis_data))
comment_num = redis_data["comment"] comment_num = redis_data["comment"]
if comment_num > 12: if comment_num > 12:
...@@ -45,7 +44,6 @@ def comment(card_info): ...@@ -45,7 +44,6 @@ def comment(card_info):
answer_id=card_info['card_id'], answer_id=card_info['card_id'],
content=card_info[ content=card_info[
'comment_content']).unwrap() 'comment_content']).unwrap()
logging.info("get_card_info:%s,have_answer_reply:%s" % (card_info, status))
error = status.get('error', 1) error = status.get('error', 1)
if error == 0 and comment_num <= 11: if error == 0 and comment_num <= 11:
return True, True return True, True
...@@ -74,7 +72,6 @@ def comment(card_info): ...@@ -74,7 +72,6 @@ def comment(card_info):
redis_data = {"comment": 1} redis_data = {"comment": 1}
redis_client.hset(key, str_today, json.dumps(redis_data)) redis_client.hset(key, str_today, json.dumps(redis_data))
logging.info("get action:comment,card_id:%s,redis_data:%s" % (card_info['card_id'], redis_data))
comment_num = redis_data["comment"] comment_num = redis_data["comment"]
if comment_num > 12: if comment_num > 12:
...@@ -86,7 +83,6 @@ def comment(card_info): ...@@ -86,7 +83,6 @@ def comment(card_info):
answer_id=card_info['card_id'], answer_id=card_info['card_id'],
content=card_info[ content=card_info[
'comment_content']).unwrap() 'comment_content']).unwrap()
logging.info("get_card_info:%s,have_answer_reply:%s" % (card_info, status))
error = status.get('error', 1) error = status.get('error', 1)
if error == 0: if error == 0:
return True return True
...@@ -98,27 +94,11 @@ def comment(card_info): ...@@ -98,27 +94,11 @@ def comment(card_info):
return False return False
else: else:
today = datetime.datetime.now()
str_today = str(today.year) + str(today.month) + str(today.day)
key = "auto_vest_one_user_action_answer:" + str(card_info['card_id'])
redis_data = redis_client.hget(key, str_today)
if redis_data:
redis_data = json.loads(str(redis_data, encoding="utf8"))
click_num = int(redis_data.get("comment")) + 1
redis_data['comment'] = click_num
redis_client.hset(key, str_today, json.dumps(redis_data))
else:
redis_client.delete(key)
redis_data = {"click": 0, "follow": 0, "comment": 1}
redis_client.hset(key, str_today, json.dumps(redis_data))
logging.info("get action:comment,card_id:%s,redis_data:%s" % (card_info['card_id'], redis_data))
comment_num = redis_data["comment"]
###判断一下如果评论为空就重新拿一个 ###判断一下如果评论为空就重新拿一个
if not card_info['comment_content']: if not card_info['comment_content']:
comment = get_vest_userid_and_comment(need_comment_num=1, tag_names=card_info['tag_names'])[0] comment = get_vest_userid_and_comment(need_comment_num=1, tag_names=card_info['tag_names'],
tagv3_names=card_info['tagv3_names'])[0]
card_info['comment_content'] = comment card_info['comment_content'] = comment
##在这里加一个判断 如果当前的评论的user_id和评论内容已经在这个评论下了就不再下发给同一个回答ID ##在这里加一个判断 如果当前的评论的user_id和评论内容已经在这个评论下了就不再下发给同一个回答ID
...@@ -126,10 +106,9 @@ def comment(card_info): ...@@ -126,10 +106,9 @@ def comment(card_info):
key = 'have_reply_answer_comment:' + str(card_info['card_id']) key = 'have_reply_answer_comment:' + str(card_info['card_id'])
redis_data = redis_client.hget(key, card_info['current_user_id']) redis_data = redis_client.hget(key, card_info['current_user_id'])
if redis_data: if redis_data:
datas = json.loads(redis_data, encoding="utf-8") datas = json.loads(str(redis_data, encoding="utf-8"))
if card_info['comment_content'] in datas: if card_info['comment_content'] in datas:
logging.info("当前评论和当前的用户已经存在了") return False
pass
else: else:
datas.append(card_info['comment_content']) datas.append(card_info['comment_content'])
redis_client.hset(key, card_info['current_user_id'], json.dumps(datas)) redis_client.hset(key, card_info['current_user_id'], json.dumps(datas))
...@@ -137,28 +116,53 @@ def comment(card_info): ...@@ -137,28 +116,53 @@ def comment(card_info):
conent = [card_info['comment_content']] conent = [card_info['comment_content']]
redis_client.hset(key, card_info['current_user_id'], json.dumps(conent)) redis_client.hset(key, card_info['current_user_id'], json.dumps(conent))
if comment_num > 12: ###当天下发的次数存起来,每次下发判断已经下发了多少个 如果当前下发相等不再下发
logging.info("今天已经消费到最大次数了,不能再消费") today = datetime.datetime.now()
return True, False str_today = str(today.year) + str(today.month) + str(today.day)
key = "auto_vest_action_comment_answer:" + str(card_info['card_id'])
redis_data = redis_client.hget(key, str_today)
if redis_data:
redis_data = json.loads(str(redis_data, encoding="utf8"))
have_pust_num = int(redis_data.get('comment_have_pust_num', card_info['have_pust_num']))
need_pust_num = int(redis_data.get('comment_need_pust_num', card_info['need_pust_num']))
if have_pust_num > need_pust_num:
return True
else: else:
redis_data['comment_have_pust_num'] = have_pust_num + 1
redis_client.hset(key, str_today, json.dumps(redis_data))
else:
redis_data = {"comment_have_pust_num": card_info['have_pust_num'],
"comment_need_pust_num": card_info['need_pust_num']}
redis_client.hset(key, str_today, json.dumps(redis_data))
rpc_invoker = get_rpc_invoker() rpc_invoker = get_rpc_invoker()
try: try:
status = rpc_invoker['qa/irrigation/create_answer_reply'](user_id=card_info['current_user_id'], begin = time.time()
current_user_id = get_vest_userid(need_comment_num=1)[0]
status = rpc_invoker['qa/irrigation/create_answer_reply'](user_id=current_user_id,
answer_id=card_info['card_id'], answer_id=card_info['card_id'],
content=card_info[ content=card_info[
'comment_content']).unwrap() 'comment_content']).unwrap()
logging.info("get_card_info:%s,have_answer_reply:%s" % (card_info, status)) logging.info('get_create_answer_reply_status:%s,card_id:%s,create_time:%s,耗时:%s' % (
status, card_info['card_id'], card_info['create_time'], time.time() - begin))
error = status.get('error', 1) error = status.get('error', 1)
if error == 0: if error == 0:
return True, True return True
else: else:
send_email_tome(str(card_info) + str(status)) send_email_tome(str(card_info) + str(status))
return False, True return False
except: except:
logging.error("catch exception,err_msg:%s" % traceback.format_exc()) logging.error("catch exception,err_msg:%s" % traceback.format_exc())
return False, True return False
except: except:
logging_exception() logging_exception()
logging.error("catch exception,err_msg:%s" % traceback.format_exc()) logging.error("catch exception,err_msg:%s" % traceback.format_exc())
return False, False return False
...@@ -93,7 +93,6 @@ def auto_follow_user(card_info, after_day=False): ...@@ -93,7 +93,6 @@ def auto_follow_user(card_info, after_day=False):
card_info['current_push_time'] = card_info['all_push_time'][0] card_info['current_push_time'] = card_info['all_push_time'][0]
save_data_to_kafka(card_info) # 存储数据 save_data_to_kafka(card_info) # 存储数据
logging.info("get-------follow---------------card_info:%s" % card_info)
except: except:
logging_exception() logging_exception()
......
...@@ -3,52 +3,73 @@ import traceback ...@@ -3,52 +3,73 @@ import traceback
from libs.error import logging_exception from libs.error import logging_exception
import logging import logging
from libs.cache import redis_client from libs.cache import redis_client
import json import json, time
from moment.views.send_email import send_email_tome from moment.views.send_email import send_email_tome
from moment.views.process_time import get_vest_userid
import datetime import datetime
def follow(card_info): def follow(card_info):
try: try:
key = 'have_reply_answer_follow:' + str(card_info['card_id'])
redis_data = redis_client.get(key)
if redis_data:
datas = json.loads(str(redis_data, encoding="utf-8"))
if card_info['current_user_id'] in datas:
return False
else:
datas.append(card_info['current_user_id'])
redis_client.set(key, json.dumps(datas))
else:
conent = [card_info['current_user_id']]
redis_client.set(key, json.dumps(conent))
today = datetime.datetime.now() today = datetime.datetime.now()
str_today = str(today.year) + str(today.month) + str(today.day) str_today = str(today.year) + str(today.month) + str(today.day)
key = "auto_vest_one_user_action_answer:" + str(card_info['card_id']) key = "auto_vest_action_follow_answer:" + str(card_info['card_id'])
redis_data = redis_client.hget(key, str_today) redis_data = redis_client.hget(key, str_today)
if redis_data: if redis_data:
redis_data = json.loads(str(redis_data, encoding="utf8")) redis_data = json.loads(str(redis_data, encoding="utf8"))
click_num = int(redis_data.get("follow")) + 1 have_pust_num = int(redis_data.get('follow_have_pust_num', card_info['have_pust_num']))
redis_data['follow'] = click_num need_pust_num = int(redis_data.get('follow_need_pust_num', card_info['need_pust_num']))
redis_client.hset(key, str_today, json.dumps(redis_data))
if have_pust_num > need_pust_num:
return True
else: else:
redis_client.delete(key) redis_data['follow_have_pust_num'] = have_pust_num + 1
redis_data = {"click": 0, "follow": 1, "comment": 0}
redis_client.hset(key, str_today, json.dumps(redis_data)) redis_client.hset(key, str_today, json.dumps(redis_data))
else:
redis_data = {"follow_have_pust_num": card_info['have_pust_num'],
"follow_need_pust_num": card_info['need_pust_num']}
logging.info("get action:follow,card_id:%s,redis_data:%s" % (card_info['card_id'], redis_data)) redis_client.hset(key, str_today, json.dumps(redis_data))
follow_num = redis_data["follow"]
if follow_num > 11:
logging.info("今天已经消费到最大次数了,不能再消费")
return True, False
else:
rpc_invoker = get_rpc_invoker() rpc_invoker = get_rpc_invoker()
try: try:
status = rpc_invoker['api/irrigation/user_add_follow'](follow_user_id=card_info['current_user_id'], begin = time.time()
current_user_id = get_vest_userid(need_comment_num=1)[0]
status = rpc_invoker['api/irrigation/user_add_follow'](follow_user_id=current_user_id,
followed_user_id=card_info[ followed_user_id=card_info[
'card_user_id']).unwrap() 'card_user_id']).unwrap()
logging.info("get_card_info:%s,user_add_follow:%s" % (card_info, status)) logging.info(
'get_user_add_follow_status:%s,card_id:%s,create_time:%s,耗时:%s' % (
status, card_info['card_id'], card_info['create_time'], time.time() - begin))
error = status.get('error', 1) error = status.get('error', 1)
if error == 0: if error == 0:
return True, True return True
else: else:
send_email_tome(str(card_info) + str(status)) send_email_tome(str(card_info) + str(status))
return False, True return False
except: except:
logging.error("catch exception,err_msg:%s" % traceback.format_exc()) logging.error("catch exception,err_msg:%s" % traceback.format_exc())
return False, True return False
except: except:
logging_exception() logging_exception()
logging.error("catch exception,err_msg:%s" % traceback.format_exc()) logging.error("catch exception,err_msg:%s" % traceback.format_exc())
return False, False return False
32333819
32333811
32283128
32283127
32283126
32283125
32283124
32283123
32283122
32283121
32283120
32283119
32283118
32283117
32283116
32283115
32283114
32283113
32283112
32283111
32283110
32283109
32283108
32283107
32283106
32283105
32283104
32283103
32283102
32283101
32283100
32283099
32283098
32283097
32283096
32283095
32283094
32283093
32283092
32283091
32283090
32283089
32283088
32283087
32283086
32283085
32283084
32283083
32283082
32283081
32283080
32283079
32283078
32283077
32283076
32283075
32283074
32283073
32283072
32283071
32283070
32283069
32283068
32283067
32283066
32283065
32283064
32283063
32283062
32283061
32283060
32283059
32283058
32283057
32283056
32283055
32283054
32283053
32283052
32283051
32283050
32283049
32283048
32283047
32283046
32283045
32283044
32283043
32283042
32283041
32283040
32283039
32283038
32283037
32283036
32283035
32283034
32283033
32283032
32283031
32283030
32283029
32283028
32283027
32283026
32283025
32283024
32283023
32283022
32283021
32283020
32283019
32283018
32283017
32283016
32283015
32283014
32283013
32283012
32283011
32283010
32283009
32283008
32283007
32283006
32283005
32283004
32283003
32283002
32283001
32283000
32282999
32282998
32282997
32282996
32282995
32282994
32282993
32282992
32282991
32282990
32282989
32282988
32282987
32282986
32282985
32282984
32282983
32282982
32282981
32282980
32282979
32282978
32282977
32282976
32282975
32282974
32282973
32282972
32282971
32282970
32282969
32282968
32282967
32282966
32282965
32282964
32282963
32282962
32282961
32282960
32282959
32282958
32282957
32282956
32282955
32282954
32282953
32282952
32282951
32282950
32282949
32282948
32282947
32282946
32282945
32282944
32282943
32282942
32282941
32282940
32282939
32282938
32282937
32282936
32282935
32282934
32282933
32282932
32282931
32282930
32282929
32282928
32282927
32282926
32282925
32282924
32282923
32282922
32282921
32282920
32282919
32282918
32282917
32282916
32282915
32282914
32282913
32282912
32282911
32282910
32282909
32282908
32282907
32282906
32282905
32282904
32282903
32282902
32282901
32282900
32282899
32282898
32282897
32282896
32282895
32282894
32282893
32282892
32282891
32282890
32282889
32282888
32282887
32282886
32282885
32282884
32282883
32282882
32282881
32282880
32282879
32282878
32282877
32282876
32282875
32282874
32282873
32282872
32282871
32282870
32282869
32282868
32282867
32282866
32282865
32282864
32282863
32282862
32282861
32282860
32282859
32282858
32282857
32282856
32282855
32282854
32282853
32282852
32282851
32282850
32282849
32282848
32282847
32282846
32282845
32282844
32282843
32282842
32282841
32282840
32282839
32282838
32282837
32282836
32282835
32282834
32282833
32282832
32282831
32282830
32282829
32282828
32282827
32282824
32282823
32282822
32282821
32282820
32282819
32282818
32282817
32282816
32282815
32282814
32282813
32282812
32282811
32282810
32282809
32282808
32282807
32282806
32282805
32282804
32282803
32282802
32282801
32282800
32282799
32282798
32282797
32282796
32282795
32282794
32282793
32282792
32282791
32282790
32282789
32282788
32282787
32282786
32282785
32282783
32282782
32282781
32282780
32282779
32282778
32282777
32282776
32282775
32282774
32282773
32282772
32282771
32282770
32282769
32282768
32282767
32282765
32282764
32282763
32282762
32282761
32282760
32282759
32282758
32282757
32282756
32282755
32282754
32282753
32282752
32282751
32282750
32282749
32282748
32282747
32282746
32282745
32282744
32282743
32282742
32282740
32282739
32282738
32282737
32282736
32282735
32282734
32282733
32282732
32282731
32282730
32282729
32282728
32282727
32282726
32282725
32282724
32282723
32282722
32282721
32282720
32282719
32282718
32282717
32282716
32282715
32282714
32282713
32282712
32282711
32282710
32282709
32282708
32282707
32282706
32282705
32282704
32282703
32282702
32282701
32282700
32282699
32282698
32282697
32282696
32282695
32282694
32282693
32282692
32282691
32282690
32282689
32282688
32282687
32282686
32282685
32282684
32282683
32282682
32282681
32282680
32282679
32282678
32282677
32282676
32282675
32282674
32282673
32282672
32282671
32282670
32282669
32282668
32282667
32282666
32282665
32282664
32282663
32282662
32282661
32282660
32282659
32282658
32282657
32282656
32282655
32282654
32282653
32282652
32282651
32282650
32282649
32282648
32282647
32282646
32282645
32282644
32282643
32282642
32282641
32282640
32282639
32282638
32282637
32282636
32282635
32282634
32282633
32282632
32282631
32282630
32282629
32282628
32282626
32282625
32282624
32282623
32282622
32282621
32282620
32282619
32282618
32282617
32282616
32282615
32282614
32282613
32282612
32282611
32282610
32282609
32282608
32282607
32282606
32282605
32282604
32282603
32282602
32282601
32282600
32282599
32282598
32282597
32282596
32282595
32282594
32282593
32282592
32282591
32282590
32282589
32282588
32282587
32282586
32282585
32282584
32282583
32282582
32282581
32282580
32282579
32282578
32282577
32282576
32282575
32282574
32282573
32282572
32282571
32282570
32282569
32282568
32282567
32282566
32282565
32282564
32282563
32282562
32282561
32282560
32282559
32282558
32282557
32282556
32282555
32282554
32282552
32282551
32282550
32282549
32282547
32282546
32282545
32282544
32282543
32282542
32282541
32282540
32282539
32282538
32282537
32282536
32282535
32282534
32282533
32282532
32282531
32282530
32282529
32282528
32282527
32282526
32282525
32282524
32282523
32282522
32282521
32282520
32282519
32282518
32282517
32282516
32282515
32282514
32282513
32282512
32282511
32282510
32282509
32282508
32282507
32282506
32282505
32282504
32282503
32282502
32282501
32282499
32282498
32282497
32282496
32282495
32282494
32282493
32282492
32282491
32282490
32282489
32282488
32282487
32282485
32282484
32282483
32282482
32282481
32282480
32282479
32282478
32282476
32282475
32282474
32282473
32282472
32282471
32282470
32282469
32282468
32282467
32282466
32282465
32282464
32282463
32282462
32282461
32282460
32282459
32282458
32282457
32282456
32282455
32282454
32282453
32282452
32282451
32282450
32282449
32282448
32282447
32282446
32282445
32282444
32282443
32282442
32282441
32282440
32282439
32282438
32282437
32282436
32282435
32282434
32282433
32282432
32282431
32282430
32282429
32282428
32282427
32282426
32282425
32282424
32282423
32282422
32282421
32282420
32282419
32282418
32282417
32282416
32282415
32282414
32282413
32282412
32282411
32282410
32282409
32282408
32282407
32282406
32282405
32282404
32282403
32282402
32282401
32282400
32282399
32282398
32282397
32282396
32282395
32282394
32282393
32282392
32282391
32282390
32282389
32282388
32282387
32282386
32282385
32282384
32282383
32282382
32282381
32282380
32282379
32282378
32282377
32282376
32282375
32282374
32282373
32282372
32282371
32282370
32282369
32282367
32282366
32282365
32282364
32282363
32282362
32282361
32282360
32282359
32282358
32282357
32282356
32282355
32282354
32282353
32282352
32282351
32282350
32282349
32282348
32282347
32282346
32282345
32282344
32282343
32282342
32282341
32282340
32282339
32282338
32282337
32282336
32282335
32282334
32282333
32282332
32282331
32282330
32282329
32282328
32282327
32282326
32282325
32282324
32282323
32282322
32282321
32282320
32282319
32282318
32282317
32282316
32282315
32282314
32282313
32282312
32282311
32282310
32282309
32282308
32282307
32282306
32282305
32282304
32282303
32282302
32282301
32282300
32282299
32282298
32282297
32282296
32282295
32282294
32282293
32282292
32282291
32282290
32282289
32282288
32282287
32282286
32282285
32282284
32282283
32282282
32282281
32282280
32282279
32282278
32282277
32282276
32282275
32282274
32282273
32282272
32282271
32282270
32282269
32282268
32282267
32282266
32282265
32282264
32282263
32282262
32282261
32282260
32282259
32282258
32282256
32282255
32282254
32282253
32282252
32282251
32282250
32282249
32282248
32282247
32282246
32282245
32282244
32282243
32282242
32282241
32282240
32282239
32282238
32282237
32282236
32282235
32282234
32282233
32282232
32282231
32282230
32282229
32282228
32282227
32282226
32282225
32282224
32282223
32282222
32282221
32282220
32282219
32282218
32282217
32282216
32282215
32282214
32282213
32282212
32282211
32282210
32282209
32282208
32282207
32282206
32282205
32282204
32282203
32282202
32282201
32282200
32282199
32282198
32282197
32282196
32282195
32282194
32282193
32282192
32282191
32282190
32282189
32282188
32282187
32282186
32282185
32282184
32282183
32282182
32282181
32282180
32282179
32282178
32282177
32282176
32282175
32282174
32282173
32282172
32282171
32282170
32282169
32282168
32282167
32282166
32282165
32282164
32282163
32282162
32282161
32282160
32282159
32282158
32282157
32282156
32282155
32282154
32282153
32282152
32282151
32282150
32282149
32282148
32282147
32282146
32282145
32282144
32282143
32282142
32282141
32282140
32282139
32282138
32282137
32282136
32282135
32282134
32282133
32282132
32282131
32282130
32282129
32282128
32282127
32282126
32282125
32282124
32282123
32282122
32282121
32282120
32282119
32282118
32282117
32282116
32282115
32282114
32282113
32282112
32282111
32282110
32282109
32282108
32282107
32282106
32282104
32282103
32282102
32282101
32282100
32282098
32282097
32282096
32282095
32282094
32282093
32282092
32282091
32282090
32282089
32282088
32282087
32282086
32282085
32282084
32282083
32282082
32282081
32282080
32282079
32282078
32282077
32282076
32282075
32282074
32282073
32282071
32282069
32282068
32282067
32282066
32282065
32282064
32282063
32282062
32282061
32282060
32282059
32282058
32282057
32282056
32282055
32282054
32282053
32282052
32282051
32282050
32282049
32282048
32282047
32282046
32282045
32282044
32282043
32282042
32282041
32282040
32282039
32282037
32282036
32282035
32282034
32282033
32282032
32282031
32282030
32282029
32282028
32282027
32282026
32282025
32282024
32282023
32282022
32282021
32282020
32282019
32282018
32282017
32282016
32282015
32282014
32282013
32282012
32282011
32282010
32282009
32282008
32282007
32282006
32282005
32282004
32282003
32282002
32282001
32282000
32281999
32281998
32281997
32281996
32281995
32281994
32281993
32281992
32281991
32281990
32281989
32281988
32281987
32281986
32281985
32281983
32281982
32281981
32281980
32281979
32281978
32281977
32281976
32281975
32281974
32281973
32281972
32281971
32281970
32281969
32281968
32281967
32281966
32281965
32281964
32281963
32281962
32281961
32281960
32281959
32281958
32281957
32281956
32281955
32281954
32281953
32281952
32281951
32281950
32281949
32281948
32281947
32281946
32281945
32281944
32281943
32281942
32281941
32281940
32281939
32281938
32281937
32281936
32281935
32281934
32281933
32281932
32281931
32281930
32281929
32281928
32281927
32281926
32281925
32281924
32281923
32281922
32281921
32281920
32281919
32281918
32281917
32281916
32281915
32281914
32281913
32281912
32281911
32281910
32281909
32281908
32281907
32281906
32281905
32281904
32281903
32281902
32281901
32281900
32281899
32281898
32281897
32281896
32281895
32281894
32281893
32281892
32281891
32281890
32281889
32281888
32281887
32281886
32281885
32281884
32281883
32281882
32281881
32281880
32281879
32281878
32281877
32281876
32281875
32281874
32281873
32281872
32281871
32281870
32281869
32281868
32281867
32281866
32281865
32281864
32281863
32281862
32281861
32281860
32281859
32281858
32281857
32281856
32281855
32281854
32281853
32281852
32281851
32281850
32281849
32281848
32281847
32281846
32281845
32281844
32281843
32281842
32281841
32281840
32281839
32281838
32281837
32281836
32281835
32281834
32281833
32281832
32281831
32281830
32281829
32281828
32281827
32281826
32281825
32281824
32281823
32281822
32281821
32281820
32281819
32281818
32281817
32281816
32281815
32281814
32281813
32281812
32281811
32281810
32281809
32281808
32281807
32281806
32281805
32281804
32281803
32281802
32281801
32281800
32281799
32281798
32281797
32281796
32281795
32281794
32281793
32281792
32281791
32281790
32281789
32281788
32281787
32281786
32281784
32281782
32281781
32281780
32281779
32281778
32281777
32281776
32281775
32281774
32281773
32281772
32281771
32281770
32281769
32281768
32281767
32281766
32281765
32281764
32281763
32281762
32281761
32281760
32281759
32281758
32281757
32281756
32281755
32281754
32281753
32281752
32281751
32281750
32281749
32281748
32281747
32281746
32281745
32281744
32281743
32281742
32281741
32281740
32281739
32281738
32281737
32281736
32281735
32281734
32281733
32281732
32281731
32281730
32281729
32281728
32281727
32281726
32281725
32281724
32281723
32281722
32281721
32281720
32281719
32281718
32281717
32281716
32281715
32281714
32281713
32281712
32281711
32281710
32281709
32281708
32281707
32281706
32281704
32281703
32281702
32281701
32281700
32281699
32281698
32281697
32281696
32281695
32281694
32281693
32281692
32281691
32281690
32281689
32281688
32281687
32281686
32281685
32281684
32281683
32281682
32281681
32281680
32281679
32281678
32281677
32281676
32281675
32281674
32281673
32281672
32281671
32281670
32281669
32281668
32281667
32281666
32281665
32281664
32281663
32281662
32281661
32281660
32281659
32281658
32281657
32281656
32281655
32281654
32281653
32281652
32281651
32281650
32281649
32281648
32281647
32281646
32281645
32281644
32281643
32281642
32281641
32281640
32281639
32281638
32281637
32281636
32281635
32281634
32281633
32281632
32281631
32281630
32281629
32281628
32281627
32281626
32281625
32281624
32281623
32281622
32281621
32281620
32281619
32281618
32281617
32281616
32281615
32281614
32281613
32281612
32281611
32281610
32281609
32281608
32281607
32281606
32281605
32281604
32281603
32281602
32281601
32281600
32281599
32281597
32281596
32281595
32281594
32281593
32281592
32281591
32281590
32281589
32281588
32281587
32281586
32281585
32281584
32281583
32281582
32281581
32281580
32281579
32281578
32281577
32281576
32281575
32281574
32281573
32281572
32281571
32281570
32281569
32281568
32281567
32281566
32281565
32281564
32281563
32281562
32281561
32281560
32281559
32281558
32281557
32281556
32281555
32281554
32281553
32281552
32281551
32281550
32281549
32281548
32281547
32281545
32281544
32281543
32281542
32281541
32281539
32281538
32281537
32281536
32281535
32281534
32281533
32281532
32281531
32281530
32281529
32281528
32281527
32281526
32281525
32281524
32281523
32281522
32281521
32281520
32281519
32281518
32281517
32281516
32281515
32281514
32281513
32281512
32281511
32281510
32281509
32281508
32281507
32281506
32281505
32281504
32281503
32281502
32281501
32281500
32281499
32281498
32281497
32281496
32281495
32281494
32281493
32281492
32281491
32281490
32281489
32281488
32281487
32281486
32281485
32281484
32281483
32281482
32281481
32281480
32281479
32281478
32281477
32281476
32281475
32281474
32281473
32281472
32281471
32281470
32281469
32281468
32281467
32281466
32281465
32281464
32281463
32281462
32281461
32281460
32281459
32281458
32281457
32281456
32281455
32281454
32281453
32281452
32281451
32281450
32281449
32281448
32281447
32281446
32281445
32281444
32281443
32281442
32281441
32281440
32281439
32281438
32281437
32281436
32281435
32281434
32281433
32281432
32281431
32281430
32281429
32281428
32281427
32281426
32281425
32281424
32281423
32281421
32281420
32281419
32281418
32281417
32281416
32281415
32281414
32281413
32281412
32281411
32281410
32281409
32281408
32281407
32281406
32281405
32281404
32281403
32281402
32281401
32281400
32281399
32281398
32281397
32281396
32281395
32281394
32281393
32281392
32281391
32281390
32281389
32281388
32281387
32281386
32281385
32281384
32281383
32281382
32281381
32281380
32281379
32281378
32281377
32281376
32281375
32281374
32281373
32281372
32281371
32281370
32281369
32281368
32281367
32281366
32281365
32281364
32281363
32281362
32281361
32281360
32281359
32281358
32281357
32281356
32281355
32281354
32281353
32281352
32281351
32281350
32281349
32281348
32281347
32281346
32281345
32281344
32281343
32281342
32281341
32281340
32281339
32281338
32281337
32281336
32281335
32281334
32281333
32281332
32281331
32281330
32281329
32281328
32281327
32281326
32281325
32281324
32281323
32281322
32281321
32281320
32281319
32281318
32281317
32281316
32281315
32281314
32281313
32281312
32281311
32281310
32281309
32281308
32281307
32281306
32281305
32281304
32281303
32281302
32281301
32281300
32281299
32281298
32281297
32281296
32281295
32281294
32281293
32281292
32281291
32281290
32281289
32281288
32281287
32281286
32281285
32281284
32281283
32281282
32281281
32281280
32281279
32281278
32281277
32281276
32281275
32281274
32281273
32281272
32281271
32281270
32281269
32281268
32281267
32281266
32281265
32281264
32281263
32281262
32281261
32281260
32281259
32281258
32281257
32281256
32281255
32281254
32281253
32281252
32281251
32281250
32281249
32281248
32281247
32281246
32281245
32281244
32281243
32281242
32281241
32281240
32281239
32281238
32281237
32281236
32281235
32281234
32281233
32281232
32281231
32281230
32281229
32281228
32281227
32281226
32281225
32281224
32281223
32281222
32281221
32281220
32281219
32281218
32281217
32281216
32281215
32281214
32281213
32281212
32281211
32281210
32281209
32281208
32281207
32281206
32281205
32281204
32281203
32281202
32281201
32281200
32281199
32281198
32281197
32281196
32281195
32281194
32281193
32281192
32281191
32281190
32281189
32281188
32281187
32281186
32281185
32281184
32281183
32281182
32281181
32281180
32281178
32281177
32281176
32281175
32281174
32281173
32281172
32281171
32281170
32281169
32281168
32281167
32281166
32281165
32281164
32281163
32281161
32281160
32281159
32281158
32281157
32281156
32281155
32281154
32281153
32281152
32281151
32281150
32281149
32281148
32281147
32281146
32281145
32281144
32281143
32281142
32281141
32281140
32281139
32281138
32281137
32281136
32281135
32281134
32281133
32281132
32281131
32281130
32281129
32281128
32281127
32281126
32281125
32281124
32281123
32281122
32281121
32281120
32281119
32281118
32281117
32281116
32281115
32281114
32281113
32281112
32281111
32281110
32281109
32281108
32281107
32281106
32281105
32281104
32281103
32281102
32281101
32281040
32281039
32281038
32281037
32281036
32281035
32281034
32281033
32281032
32281031
32281030
32281029
32281028
32281027
32281026
32281025
32281024
32281023
32281022
32281021
32281020
32281019
32281018
32281017
32281016
32281015
32281014
32281013
32281012
32281011
32281010
32281009
32281008
32281007
32281006
32281005
32281004
32281003
32281002
32281001
32281000
32280999
32280998
32280997
32280996
32280995
32280994
32280993
32280992
32280991
32280990
32280989
32280988
32280987
32280986
32280985
32280984
32280983
32280982
32280981
32280980
32280979
32280978
32280977
32280976
32280975
32280974
32280973
32280972
32280971
32280970
32280969
32280968
32280967
32280965
32280964
32280963
32280962
32280961
32280960
32280959
32280958
32280957
32280956
32280955
32280954
32280953
32280952
32280951
32280950
32280949
32280948
32280947
32280946
32280945
32280944
32280943
32280942
32280941
32280940
32280939
32280938
32280937
32280936
32280935
32280934
32280933
32280932
32280931
32280930
32280929
32280928
32280927
32280926
32280925
32280924
32280923
32280922
32280921
32280920
32280919
32280918
32280917
32280916
32280915
32280914
32280913
32280912
32280911
32280910
32280909
32280908
32280907
32280906
32280905
32280904
32280903
32280902
32280901
32280900
32280899
32280898
32280897
32280896
32280895
32280894
32280893
32280892
32280891
32280890
32280889
32280888
32280887
32280886
32280885
32280884
32280883
32280882
32280881
32280880
32280879
32280878
32280877
32280876
32280875
32280874
32280873
32280872
32280871
32280870
32280869
32280868
32280867
32280866
32280865
32280864
32280863
32280862
32280861
32280860
32280859
32280858
32280857
32280856
32280855
32280854
32280853
32280852
32280851
32280850
32280849
32280848
32280847
32280846
32280845
32280844
32280843
32280842
32280841
32280840
32280839
32280838
32280837
32280836
32280835
32280833
32280832
32280831
32280830
32280829
32280828
32280827
32280826
32280825
32280824
32280823
32280822
32280821
32280820
32280819
32280818
32280817
32280816
32280815
32280814
32280813
32280812
32280811
32280810
32280809
32280808
32280807
32280806
32280805
32280804
32280803
32280802
32280801
32280800
32280799
32280798
32280797
32280796
32280795
32280794
32280793
32280792
32280791
32280790
32280789
32280788
32280787
32280786
32280785
32280784
32280783
32280782
32280781
32280780
32280779
32280778
32280777
32280775
32280774
32280773
32280772
32280771
32280770
32280769
32280768
32280767
32280766
32280765
32280764
32280763
32280762
32280761
32280760
32280759
32280758
32280757
32280756
32280755
32280754
32280753
32280752
32280751
32280750
32280749
32280748
32280747
32280746
32280745
32280744
32280743
32280742
32280741
32280740
32280739
32280738
32280737
32280736
32280735
32280734
32280733
32280732
32280731
32280730
32280729
32280728
32280727
32280726
32280725
32280724
32280723
32280722
32280721
32280720
32280719
32280718
32280717
32280716
32280715
32280714
32280713
32280712
32280711
32280710
32280709
32280708
32280707
32280706
32280705
32280704
32280703
32280702
32280701
32280700
32280699
32280698
32280697
32280696
32280695
32280694
32280693
32280692
32280691
32280690
32280689
32280688
32280687
32280686
32280685
32280684
32280683
32280682
32280681
32280680
32280679
32280678
32280677
32280676
32280674
32280673
32280671
32280670
32280669
32280667
32280665
32280664
32280663
32280662
32280661
32280660
32280659
32280658
32280657
32280656
32280655
32280654
32280653
32280652
32280651
32280650
32280649
32280648
32280647
32280646
32280645
32280644
32280643
32280642
32280641
32280640
32280639
32280638
32280637
32280636
32280635
32280634
32280633
32280632
32280631
32280630
32280629
32280628
32280627
32280626
32280625
32280624
32280623
32280622
32280621
32280620
32280619
32280618
32280617
32280616
32280615
32280614
32280613
32280612
32280611
32280610
32280609
32280608
32280607
32280606
32280605
32280604
32280603
32280602
32280601
32280600
32280599
32280598
32280597
32280596
32280595
32280594
32280593
32280592
32280591
32280590
32280589
32280588
32280587
32280586
32280585
32280584
32280583
32280582
32280581
32280580
32280579
32280578
32280577
32280576
32280575
32280574
32280573
32280572
32280571
32280570
32280569
32280568
32280567
32280566
32280565
32280564
32280563
32280562
32280561
32280560
32280559
32280558
32280557
32280556
32280555
32280554
32280553
32280552
32280551
32280550
32280549
32280548
32280547
32280546
32280545
32280544
32280543
32280542
32280541
32280540
32280539
32280538
32280537
32280536
32280535
32280534
32280533
32280532
32280531
32280530
32280529
32280528
32280527
32280526
32280525
32280524
32280523
32280522
32280521
32280520
32280519
32280518
32280517
32280516
32280515
32280514
32280513
32280512
32280511
32280510
32280509
32280508
32280507
32280506
32280505
32280504
32280503
32280502
32280501
32280500
32280499
32280498
32280496
32280495
32280494
32280493
32280492
32280491
32280490
32280489
32280488
32280487
32280486
32280485
32280484
32280483
32280482
32280481
32280480
32280479
32280478
32280477
32280476
32280475
32280474
32280473
32280472
32280471
32280470
32280469
32280468
32280467
32280466
32280464
32280463
32280462
32280461
32280460
32280459
32280458
32280457
32280456
32280455
32280454
32280453
32280452
32280451
32280450
32280449
32280448
32280447
32280446
32280445
32280444
32280443
32280442
32280441
32280440
32280439
32280438
32280437
32280436
32280435
32280434
32280433
32280432
32280431
32280430
32280429
32280428
32280427
32280426
32280425
32280424
32280423
32280422
32280420
32280419
32280418
32280417
32280416
32280415
32280414
32280413
32280412
32280411
32280410
32280409
32280408
32280407
32280406
32280405
32280404
32280403
32280402
32280401
32280400
32280399
32280398
32280397
32280396
32280395
32280394
32280393
32280392
32280391
32280390
32280389
32280388
32280387
32280386
32280385
32280384
32280383
32280382
32280381
32280380
32280379
32280378
32280377
32280376
32280375
32280374
32280373
32280372
32280371
32280370
32280369
32280368
32280367
32280366
32280365
32280364
32280363
32280362
32280361
32280360
32280359
32280358
32280357
32280356
32280355
32280354
32280353
32280352
32280351
32280350
32280349
32280348
32280347
32280346
32280345
32280344
32280343
32280342
32280341
32280340
32280339
32280338
32280337
32280336
32280335
32280334
32280333
32280332
32280331
32280330
32280329
32280328
32280327
32280326
32280325
32280324
32280323
32280322
32280321
32280320
32280319
32280318
32280317
32280316
32280315
32280314
32280313
32280312
32280311
32280310
32280309
32280308
32280307
32280306
32280305
32280304
32280303
32280302
32280301
32280300
32280299
32280298
32280297
32280296
32280295
32280294
32280293
32280292
32280291
32280290
32280289
32280288
32280287
32280286
32280285
32280284
32280283
32280282
32280281
32280280
32280279
32280278
32280277
32280276
32280275
32280274
32280273
32280272
32280271
32280270
32280269
32280268
32280267
32280266
32280265
32280264
32280263
32280262
32280261
32280260
32280259
32280258
32280257
32280256
32280255
32280254
32280253
32280252
32280251
32280250
32280249
32280248
32280247
32280246
32280245
32280244
32280243
32280242
32280241
32280240
32280239
32280238
32280237
32280236
32280235
32280234
32280233
32280232
32280231
32280230
32280229
32280228
32280227
32280226
32280225
32280224
32280223
32280222
32280221
32280220
32280219
32280218
32280217
32280216
32280214
32280213
32280212
32280210
32280209
32280208
32280207
32280206
32280205
32280204
32280203
32280202
32280201
32280200
32280199
32280198
32280197
32280196
32280195
32280194
32280193
32280192
32280191
32280190
32280189
32280188
32280187
32280186
32280185
32280184
32280183
32280182
32280181
32280180
32280179
32280178
32280177
32280176
32280175
32280174
32280173
32280172
32280170
32280169
32280168
32280167
32280166
32280165
32280164
32280163
32280162
32280161
32280160
32280159
32280158
32280157
32280156
32280155
32280154
32280153
32280152
32280151
32280150
32280149
32280148
32280147
32280146
32280145
32280144
32280142
32280141
32280140
32280139
32280138
32280137
32280136
32280135
32280134
32280133
32280132
32280131
32280130
32280129
32280128
32280127
32280126
32280125
32280124
32280123
32280122
32280121
32280120
32280119
32280118
32280117
32280116
32280115
32280114
32280113
32280112
32280111
32280110
32280109
32280108
32280107
32280106
32280105
32280104
32280103
32280102
32280101
32280100
32280099
32280098
32280097
32280096
32280094
32280093
32280092
32280091
32280090
32280089
32280088
32280087
32280086
32280085
32280084
32280083
32280082
32280081
32280080
32280079
32280078
32280077
32280076
32280075
32280074
32280073
32280072
32280071
32280070
32280069
32280068
32280067
32280066
32280065
32280064
32280063
32280062
32280061
32280060
32280059
32280058
32280057
32280056
32280055
32280054
32280053
32280052
32280051
32280050
32280049
32280047
32280046
32280045
32280044
32280043
32280042
32280041
32280040
32280039
32280038
32280037
32280036
32280035
32280034
32280033
32280032
32280031
32280030
32280029
32280028
32280027
32280026
32280025
32280024
32280023
32280022
32280021
32280020
32280019
32280018
32280017
32280016
32280015
32280014
32280013
32280012
32280011
32280010
32280009
32280008
32280007
32280006
32280005
32280004
32280003
32280002
32280001
32280000
32279999
32279998
32279997
32279996
32279995
32279994
32279993
32279992
32279991
32279990
32279989
32279988
32279987
32279986
32279985
32279984
32279983
32279982
32279981
32279980
32279979
32279978
32279977
32279976
32279975
32279974
32279972
32279971
32279970
32279969
32279968
32279967
32279966
32279965
32279964
32279963
32279962
32279961
32279960
32279959
32279958
32279957
32279956
32279955
32279954
32279953
32279952
32279951
32279950
32279949
32279948
32279947
32279946
32279945
32279944
32279943
32279942
32279941
32279940
32279939
32279938
32279937
32279936
32279935
32279934
32279933
32279932
32279931
32279930
32279929
32279928
32279927
32279926
32279925
32279924
32279923
32279922
32279921
32279920
32279919
32279918
32279917
32279916
32279915
32279914
32279913
32279912
32279911
32279910
32279909
32279908
32279907
32279906
32279905
32279904
32279903
32279902
32279901
32279900
32279899
32279898
32279897
32279896
32279895
32279894
32279893
32279892
32279891
32279890
32279889
32279888
32279887
32279886
32279885
32279884
32279883
32279882
32279881
32279880
32279879
32279878
32279877
32279876
32279875
32279874
32279873
32279872
32279871
32279870
32279869
32279868
32279867
32279866
32279865
32279864
32279863
32279862
32279861
32279860
32279859
32279858
32279857
32279856
32279855
32279854
32279853
32279852
32279851
32279850
32279849
32279848
32279847
32279846
32279844
32279843
32279842
32279841
32279840
32279839
32279838
32279837
32279836
32279835
32279834
32279833
32279832
32279831
32279830
32279829
32279828
32279827
32279826
32279825
32279824
32279823
32279822
32279821
32279819
32279818
32279817
32279816
32279815
32279814
32279813
32279812
32279811
32279809
32279808
32279807
32279806
32279805
32279804
32279803
32279802
32279801
32279800
32279799
32279798
32279797
32279796
32279795
32279794
32279793
32279792
32279791
32279790
32279789
32279788
32279787
32279786
32279785
32279784
32279782
32279781
32279780
32279779
32279778
32279777
32279776
32279775
32279774
32279773
32279772
32279771
32279770
32279769
32279768
32279767
32279766
32279765
32279764
32279763
32279762
32279761
32279760
32279759
32279758
32279757
32279756
32279755
32279754
32279753
32279752
32279751
32279750
32279749
32279748
32279747
32279746
32279745
32279744
32279743
32279742
32279741
32279740
32279739
32279738
32279737
32279736
32279735
32279734
32279733
32279732
32279731
32279730
32279729
32279728
32279727
32279726
32279725
32279724
32279723
32279722
32279721
32279720
32279719
32279718
32279717
32279716
32279715
32279714
32279713
32279712
32279711
32279710
32279709
32279708
32279707
32279706
32279705
32279704
32279703
32279702
32279701
32279700
32279699
32279698
32279697
32279696
32279695
32279694
32279693
32279692
32279691
32279690
32279689
32279688
32279687
32279686
32279685
32279684
32279683
32279682
32279680
32279679
32279678
32279677
32279676
32279675
32279674
32279673
32279672
32279671
32279670
32279669
32279668
32279667
32279666
32279665
32279664
32279663
32279662
32279661
32279660
32279659
32279658
32279657
32279656
32279655
32279654
32279653
32279652
32279651
32279650
32279649
32279648
32279647
32279646
32279645
32279644
32279643
32279642
32279641
32279640
32279639
32279638
32279637
32279636
32279635
32279634
32279633
32279632
32279631
32279630
32279629
32279628
32279627
32279626
32279625
32279624
32279623
32279622
32279621
32279620
32279619
32279618
32279617
32279616
32279615
32279614
32279613
32279612
32279611
32279610
32279609
32279608
32279607
32279606
32279605
32279604
32279603
32279602
32279601
32279599
32279598
32279597
32279596
32279595
32279594
32279593
32279592
32279591
32279590
32279589
32279588
32279587
32279586
32279585
32279584
32279583
32279582
32279581
32279580
32279579
32279578
32279577
32279576
32279575
32279574
32279573
32279572
32279571
32279570
32279569
32279568
32279567
32279566
32279565
32279563
32279562
32279561
32279560
32279559
32279558
32279557
32279556
32279555
32279554
32279553
32279552
32279551
32279550
32279549
32279548
32279547
32279546
32279545
32279544
32279543
32279542
32279541
32279540
32279539
32279538
32279537
32279536
32279535
32279534
32279533
32279532
32279531
32279530
32279529
32279528
32279527
32279526
32279525
32279524
32279523
32279522
32279521
32279520
32279519
32279518
32279517
32279516
32279515
32279514
32279513
32279512
32279511
32279510
32279509
32279508
32279507
32279506
32279505
32279504
32279503
32279502
32279501
32279500
32279499
32279498
32279497
32279496
32279495
32279494
32279493
32279492
32279491
32279490
32279489
32279488
32279487
32279486
32279485
32279484
32279483
32279482
32279481
32279480
32279479
32279478
32279477
32279476
32279475
32279474
32279473
32279472
32279471
32279470
32279469
32279468
32279467
32279466
32279465
32279464
32279462
32279461
32279460
32279459
32279458
32279457
32279456
32279455
32279454
32279453
32279452
32279451
32279450
32279449
32279448
32279447
32279446
32279445
32279444
32279443
32279442
32279441
32279440
32279439
32279438
32279437
32279436
32279435
32279434
32279433
32279432
32279431
32279430
32279429
32279428
32279427
32279426
32279425
32279424
32279423
32279422
32279421
32279420
32279419
32279418
32279417
32279416
32279415
32279414
32279413
32279412
32279411
32279410
32279409
32279408
32279407
32279406
32279405
32279404
32279403
32279402
32279401
32279400
32279399
32279398
32279397
32279396
32279395
32279394
32279393
32279392
32279391
32279390
32279389
32279388
32279387
32279386
32279385
32279384
32279383
32279382
32279381
32279380
32279379
32279378
32279377
32279376
32279375
32279374
32279373
32279372
32279371
32279370
32279369
32279368
32279367
32279366
32279365
32279364
32279363
32279362
32279361
32279360
32279359
32279358
32279357
32279356
32279355
32279354
32279353
32279352
32279351
32279350
32279349
32279348
32279347
32279346
32279345
32279344
32279343
32279342
32279341
32279340
32279339
32279338
32279337
32279336
32279335
32279334
32279333
32279332
32279331
32279330
32279328
32279327
32279326
32279325
32279324
32279323
32279322
32279321
32279320
32279319
32279318
32279317
32279316
32279315
32279314
32279313
32279312
32279311
32279310
32279309
32279308
32279307
32279306
32279305
32279304
32279303
32279302
32279301
32279300
32279299
32279298
32279296
32279295
32279294
32279293
32279292
32279291
32279290
32279289
32279288
32279287
32279286
32279285
32279284
32279283
32279282
32279281
32279280
32279279
32279278
32279277
32279276
32279275
32279274
32279273
32279272
32279271
32279270
32279269
32279268
32279267
32279266
32279265
32279264
32279263
32279262
32279261
32279260
32279259
32279258
32279257
32279256
32279255
32279254
32279253
32279252
32279251
32279250
32279249
32279248
32279247
32279246
32279245
32279244
32279243
32279242
32279241
32279239
32279238
32279237
32279236
32279235
32279234
32279233
32279232
32279231
32279230
32279229
32279228
32279226
32279225
32279224
32279223
32279222
32279221
32279220
32279219
32279218
32279217
32279216
32279214
32279213
32279212
32279211
32279209
32279208
32279207
32279206
32279205
32279204
32279203
32279202
32279201
32279200
32279199
32279198
32279196
32279195
32279194
32279193
32279192
32279191
32279190
32279189
32279188
32279187
32279186
32279185
32279184
32279183
32279182
32279181
32279180
32279179
32279178
32279177
32279176
32279175
32279174
32279173
32279172
32279171
32279170
32279169
32279168
32279167
32279166
32279165
32279164
32279163
32279162
32279161
32279160
32279159
32279158
32279157
32279156
32279155
32279154
32279153
32279152
32279151
32279150
32279149
32279148
32279147
32279146
32279145
32279144
32279143
32279142
32279140
32279139
32279138
32279137
32279136
32279134
32279133
32279132
32279131
32279130
32279129
32279127
32279126
32279125
32279124
32279123
32279122
32279121
32279120
32279119
32279118
32279117
32279116
32279115
32279114
32279113
32279112
32279111
32279110
32279109
32279108
32279107
32279106
32279105
32279104
32279103
32279102
32279101
32279100
32279099
32279098
32279097
32279096
32279095
32279094
32279093
32279092
32279091
32279090
32279089
32279088
32279087
32279086
32279085
32279084
32279083
32279082
32279081
32279080
32279079
32279078
32279077
32279076
32279075
32279074
32279073
32279072
32279071
32279070
32279069
32279068
32279067
32279066
32279065
32279064
32279063
32279062
32279061
32279060
32279059
32279058
32279057
32279056
32279055
32279054
32279053
32279052
32279051
32279050
32279049
32279048
32279047
32279046
32279045
32279044
32279043
32279042
32279041
32279040
32279039
32279038
32279037
32279036
32279035
32279034
32279033
32279032
32279031
32279030
32279029
32279028
32279027
32279026
32279025
32279024
32279023
32279022
32279020
32279019
32279018
32279017
32279016
32279015
32279014
32279013
32279012
32279011
32279010
32279009
32279008
32279007
32279006
32279005
32279004
32279003
32279002
32279001
32279000
32278999
32278998
32278997
32278996
32278995
32278994
32278993
32278992
32278991
32278990
32278989
32278988
32278987
32278986
32278985
32278984
32278983
32278982
32278981
32278980
32278979
32278977
32278976
32278975
32278974
32278973
32278972
32278971
32278970
32278969
32278968
32278966
32278965
32278964
32278963
32278962
32278961
32278960
32278959
32278958
32278957
32278956
32278955
32278954
32278953
32278952
32278951
32278950
32278949
32278948
32278947
32278946
32278945
32278944
32278943
32278942
32278941
32278940
32278939
32278938
32278937
32278936
32278935
32278934
32278933
32278932
32278931
32278930
32278929
32278928
32278927
32278926
32278925
32278924
32278923
32278922
32278921
32278920
32278919
32278918
32278917
32278916
32278915
32278914
32278913
32278912
32278911
32278910
32278909
32278908
32278907
32278906
32278905
32278904
32278903
32278902
32278901
32278900
32278899
32278898
32278897
32278896
32278895
32278894
32278893
32278892
32278891
32278890
32278889
32278888
32278887
32278886
32278885
32278884
32278883
32278882
32278881
32278880
32278878
32278877
32278876
32278875
32278874
32278873
32278872
32278871
32278870
32278869
32278868
32278867
32278866
32278865
32278864
32278863
32278862
32278861
32278860
32278859
32278858
32278857
32278856
32278855
32278854
32278853
32278852
32278850
32278849
32278848
32278847
32278846
32278845
32278844
32278843
32278842
32278841
32278840
32278839
32278838
32278837
32278836
32278835
32278834
32278833
32278832
32278831
32278830
32278829
32278828
32278827
32278826
32278825
32278824
32278823
32278822
32278821
32278820
32278819
32278818
32278817
32278816
32278815
32278814
32278813
32278812
32278811
32278810
32278809
32278808
32278807
32278806
32278805
32278804
32278803
32278802
32278801
32278800
32278799
32278798
32278797
32278796
32278795
32278794
32278793
32278792
32278791
32278790
32278789
32278788
32278787
32278785
32278783
32278782
32278781
32278780
32278779
32278778
32278777
32278776
32278775
32278774
32278773
32278772
32278771
32278770
32278769
32278768
32278767
32278766
32278765
32278764
32278763
32278762
32278761
32278760
32278759
32278758
32278757
32278756
32278755
32278754
32278753
32278752
32278751
32278750
32278749
32278748
32278747
32278746
32278745
32278744
32278743
32278742
32278741
32278740
32278739
32278738
32278737
32278736
32278735
32278734
32278733
32278732
32278731
32278730
32278729
32278728
32278727
32278726
32278725
32278724
32278723
32278722
32278721
32278720
32278719
32278718
32278717
32278716
32278715
32278714
32278713
32278712
32278711
32278710
32278709
32278708
32278707
32278706
32278705
32278704
32278703
32278702
32278701
32278700
32278699
32278698
32278697
32278696
32278695
32278694
32278693
32278692
32278691
32278690
32278689
32278688
32278687
32278686
32278685
32278684
32278683
32278682
32278681
32278680
32278679
32278678
32278677
32278676
32278675
32278674
32278673
32278672
32278671
32278670
32278669
32278668
32278667
32278666
32278665
32278664
32278663
32278662
32278661
32278659
32278658
32278657
32278656
32278655
32278654
32278653
32278652
32278651
32278650
32278649
32278648
32278647
32278646
32278645
32278644
32278643
32278642
32278641
32278640
32278639
32278638
32278637
32278636
32278635
32278634
32278633
32278632
32278631
32278630
32278629
32278628
32278627
32278626
32278625
32278624
32278623
32278622
32278621
32278620
32278619
32278618
32278617
32278616
32278615
32278614
32278613
32278612
32278611
32278610
32278609
32278608
32278607
32278606
32278605
32278604
32278603
32278602
32278601
32278600
32278599
32278598
32278597
32278596
32278595
32278594
32278593
32278592
32278591
32278590
32278589
32278588
32278587
32278586
32278585
32278584
32278583
32278582
32278581
32278580
32278579
32278578
32278577
32278576
32278575
32278574
32278573
32278572
32278571
32278570
32278569
32278568
32278567
32278566
32278565
32278564
32278563
32278562
32278561
32278560
32278559
32278558
32278557
32278556
32278555
32278554
32278553
32278552
32278551
32278550
32278549
32278548
32278547
32278546
32278545
32278544
32278543
32278542
32278541
32278540
32278539
32278538
32278537
32278536
32278535
32278534
32278533
32278532
32278531
32278530
32278529
32278528
32278527
32278526
32278525
32278524
32278523
32278522
32278521
32278520
32278519
32278518
32278517
32278516
32278515
32278514
32278513
32278512
32278511
32278510
32278509
32278508
32278507
32278506
32278505
32278504
32278503
32278502
32278501
32278500
32278499
32278498
32278497
32278496
32278495
32278494
32278493
32278491
32278490
32278489
32278488
32278487
32278486
32278485
32278484
32278483
32278482
32278481
32278480
32278479
32278478
32278477
32278476
32278475
32278474
32278472
32278471
32278470
32278469
32278468
32278467
32278466
32278465
32278464
32278463
32278462
32278461
32278460
32278459
32278458
32278457
32278456
32278455
32278454
32278453
32278452
32278451
32278450
32278449
32278448
32278447
32278446
32278445
32278444
32278443
32278442
32278441
32278440
32278439
32278438
32278437
32278436
32278435
32278434
32278433
32278432
32278431
32278430
32278429
32278428
32278427
32278426
32278425
32278424
32278423
32278422
32278421
32278420
32278419
32278418
32278417
32278416
32278415
32278414
32278413
32278412
32278411
32278410
32278408
32278407
32278406
32278405
32278404
32278403
32278402
32278401
32278400
32278399
32278398
32278397
32278396
32278395
32278394
32278393
32278392
32278391
32278390
32278389
32278388
32278387
32278386
32278385
32278384
32278382
32278381
32278380
32278379
32278378
32278377
32278376
32278375
32278374
32278373
32278372
32278371
32278370
32278369
32278368
32278367
32278366
32278365
32278364
32278363
32278362
32278361
32278360
32278359
32278358
32278357
32278356
32278355
32278354
32278353
32278352
32278351
32278350
32278349
32278348
32278347
32278346
32278345
32278344
32278343
32278342
32278341
32278340
32278339
32278338
32278337
32278336
32278335
32278334
32278333
32278332
32278331
32278330
32278329
32278328
32278327
32278326
32278325
32278324
32278323
32278322
32278321
32278320
32278319
32278318
32278317
32278316
32278315
32278314
32278313
32278312
32278311
32278310
32278309
32278308
32278307
32278306
32278305
32278304
32278303
32278302
32278301
32278300
32278299
32278298
32278297
32278296
32278295
32278294
32278293
32278292
32278290
32278289
32278288
32278287
32278286
32278285
32278284
32278283
32278282
32278281
32278280
32278279
32278278
32278277
32278276
32278275
32278274
32278273
32278272
32278271
32278270
32278269
32278268
32278267
32278266
32278265
32278264
32278263
32278262
32278261
32278260
32278259
32278258
32278257
32278256
32278255
32278254
32278253
32278251
32278250
32278249
32278248
32278247
32278246
32278245
32278244
32278242
32278241
32278240
32278239
32278238
32278237
32278236
32278235
32278234
32278233
32278232
32278231
32278230
32278229
32278228
32278227
32278226
32278225
32278224
32278223
32278222
32278221
32278220
32278219
32278218
32278217
32278216
32278215
32278214
32278213
32278212
32278211
32278210
32278209
32278208
32278207
32278206
32278205
32278204
32278203
32278202
32278201
32278200
32278199
32278198
32278197
32278196
32278195
32278194
32278193
32278192
32278191
32278190
32278189
32278188
32278187
32278186
32278185
32278184
32278183
32278182
32278181
32278180
32278179
32278178
32278177
32278176
32278175
32278173
32278172
32278171
32278170
32278168
32278167
32278166
32278165
32278164
32278163
32278162
32278161
32278160
32278159
32278158
32278157
32278156
32278155
32278154
32278153
32278152
32278151
32278150
32278149
32278148
32278147
32278146
32278145
32278143
32278142
32278141
32278140
32278139
32278136
32278135
32278134
32278133
32278132
32278131
32278130
32278129
32278128
32278127
32278126
32278125
32278124
32278122
32278121
32278120
32278119
32278118
32278117
32278116
32278114
32278113
32278112
32278111
32278110
32278109
32278108
32278107
32278106
32278105
32278104
32278103
32278102
32278101
32278100
32278099
32278098
32278097
32278096
32278095
32278094
32278093
32278092
32278091
32278090
32278089
32278088
32278087
32278086
32278085
32278084
32278083
32278082
32278081
32278080
32278079
32278078
32278077
32278076
32278075
32278074
32278073
32278072
32278071
32278070
32278069
32278068
32278067
32278066
32278065
32278064
32278063
32278062
32278061
32278060
32278059
32278058
32278057
32278056
32278055
32278054
32278053
32278052
32278051
32278050
32278049
32278048
32278047
32278046
32278045
32278044
32278043
32278042
32278041
32278040
32278039
32278038
32278037
32278036
32278035
32278034
32278033
32278032
32278031
32278030
32278029
32278028
32278027
32278026
32278025
32278024
32278023
32278022
32278020
32278019
32278018
32278017
32278016
32278015
32278014
32278013
32278012
32278011
32278010
32278009
32278007
32278006
32278005
32278004
32278003
32278002
32278001
32278000
32277999
32277998
32277997
32277996
32277995
32277994
32277993
32277991
32277990
32277989
32277988
32277987
32277986
32277985
32277984
32277983
\ No newline at end of file
...@@ -19,23 +19,22 @@ from comment.views.comment_fun import comment ...@@ -19,23 +19,22 @@ from comment.views.comment_fun import comment
from follow.views.follow_fun import follow from follow.views.follow_fun import follow
from libs.cache import redis_client from libs.cache import redis_client
from kafka.structs import TopicPartition from kafka.structs import TopicPartition
from moment.views.process_time import judge_offset_partition_have_consum from moment.views.process_time import judge_offset_partition_have_consum, judge_data_have_in_redis
import msgpack
from kafka import TopicPartition
def kafka_consum(topic_name=None): def kafka_consum(topic_name=None):
topic_name = settings.KAFKA_TOPIC_NAME if not topic_name else topic_name topic_name = settings.KAFKA_TOPIC_NAME
consumser_obj = KafkaConsumer(topic_name, bootstrap_servers=settings.KAFKA_BROKER_LIST, enable_auto_commit=True, consumser_obj = KafkaConsumer(topic_name, bootstrap_servers=settings.KAFKA_BROKER_LIST, enable_auto_commit=False,
auto_commit_interval_ms=1, group_id="vest", auto_offset_reset='earliest') group_id="vest", auto_offset_reset='earliest')
consumser_obj.subscribe([topic_name, ]) consumser_obj.subscribe([topic_name, ])
try: try:
# redis_topic_partition_name = "vest:topic_name:" + str(topic_name)
# topic_partition_info = redis_client.hgetall(redis_topic_partition_name)
# for partition_id in topic_partition_info:
# print (int(partition_id.decode()),topic_name)
# consumser_obj.seek(partition=TopicPartition(topic_name,int(partition_id.decode())),offset=int(topic_partition_info[partition_id]))
while True: while True:
begin = time.time() begin = time.time()
msg_dict = consumser_obj.poll(timeout_ms=100, max_records=50) msg_dict = consumser_obj.poll(timeout_ms=30000, max_records=100)
consumser_obj.commit()
for msg_value in msg_dict.values(): for msg_value in msg_dict.values():
for msg in msg_value: for msg in msg_value:
card_info = json.loads(str(msg.value, encoding="utf8")) card_info = json.loads(str(msg.value, encoding="utf8"))
...@@ -43,9 +42,13 @@ def kafka_consum(topic_name=None): ...@@ -43,9 +42,13 @@ def kafka_consum(topic_name=None):
###在这里去判断一下当前的partition和offset是否已经消费过了 如果已经消费了需要直接去掉数据 ###在这里去判断一下当前的partition和offset是否已经消费过了 如果已经消费了需要直接去掉数据
bol_consum = judge_offset_partition_have_consum(card_info=card_info, offset=msg.offset, bol_consum = judge_offset_partition_have_consum(card_info=card_info, offset=msg.offset,
partition=msg.partition) partition=msg.partition)
##在这里先判断当前的数据是否已经存在,存在的话直接PaaS,不存在的话再做下边的处理
# change_consum = judge_data_have_in_redis(card_info)
# bol_consum = True
if bol_consum: if bol_consum:
logging.info("消费到新数据了[%s,%s,%s,%s],get card_info:%s" % ( logging.info("消费到新数据了[%s,%s,%s,%s],get card_id:%s,create_time:%s,current_push_time:%s" % (
str(msg.topic), str(msg.partition), str(msg.offset), str(msg.key), card_info)) str(msg.topic), str(msg.partition), str(msg.offset), str(msg.key),
card_info["card_id"], card_info['create_time'], card_info['current_push_time']))
# 如果没有代表是之前的老的数据 # 如果没有代表是之前的老的数据
if 'card_status' not in card_info: if 'card_status' not in card_info:
card_info['card_status'] = 'answer' card_info['card_status'] = 'answer'
...@@ -58,18 +61,10 @@ def kafka_consum(topic_name=None): ...@@ -58,18 +61,10 @@ def kafka_consum(topic_name=None):
if current_push_time == create_time: if current_push_time == create_time:
if card_info['action_type'] == "comment": if card_info['action_type'] == "comment":
auto_comment_user(card_info, after_day=True) auto_comment_user(card_info, after_day=True)
logging.info("当前卡片ID:%s,auto_comment_user子函数消费处理耗时:%f" % (
card_info['card_id'], time.time() - begin))
elif card_info['action_type'] == "click": elif card_info['action_type'] == "click":
auto_click_user(card_info, after_day=True) auto_click_user(card_info, after_day=True)
logging.info("当前卡片ID:%s,auto_click_user子函数消费处理耗时:%f" % (
card_info['card_id'], time.time() - begin))
elif card_info['action_type'] == "follow": elif card_info['action_type'] == "follow":
auto_follow_user(card_info, after_day=True) auto_follow_user(card_info, after_day=True)
logging.info("当前卡片ID:%s,auto_follow_user子函数消费处理耗时:%f" % (
card_info['card_id'], time.time() - begin))
else: else:
pass pass
...@@ -78,20 +73,12 @@ def kafka_consum(topic_name=None): ...@@ -78,20 +73,12 @@ def kafka_consum(topic_name=None):
if card_info['have_pust_num'] == card_info['need_pust_num']: if card_info['have_pust_num'] == card_info['need_pust_num']:
if nowtime.day - push_time_date.day == 0: # 今日的已经下发完了,需要去取之后的 if nowtime.day - push_time_date.day == 0: # 今日的已经下发完了,需要去取之后的
action_type = card_info['action_type'] action_type = card_info['action_type']
logging.info("今天已经下发完了[%s,%s,%s,%s]" % (
str(msg.topic), str(msg.partition), str(msg.offset), str(msg.key)))
if action_type == "comment": if action_type == "comment":
auto_comment_user(card_info, after_day=True) auto_comment_user(card_info, after_day=True)
logging.info("当前卡片ID:%s,auto_comment_user子函数消费处理耗时:%f" % (
card_info['card_id'], time.time() - begin))
elif action_type == "click": elif action_type == "click":
auto_click_user(card_info, after_day=True) auto_click_user(card_info, after_day=True)
logging.info("当前卡片ID:%s,auto_comment_user子函数消费处理耗时:%f" % (
card_info['card_id'], time.time() - begin))
elif action_type == "follow": elif action_type == "follow":
auto_follow_user(card_info, after_day=True) auto_follow_user(card_info, after_day=True)
logging.info("当前卡片ID:%s,auto_comment_user子函数消费处理耗时:%f" % (
card_info['card_id'], time.time() - begin))
else: else:
pass pass
...@@ -100,69 +87,53 @@ def kafka_consum(topic_name=None): ...@@ -100,69 +87,53 @@ def kafka_consum(topic_name=None):
if card_info['have_pust_num'] < card_info['need_pust_num'] and \ if card_info['have_pust_num'] < card_info['need_pust_num'] and \
push_time_date < nowtime: push_time_date < nowtime:
is_many = True
if action_type == "comment": # 在这里去调评论的接口 if action_type == "comment": # 在这里去调评论的接口
if 'have_comment_number' in card_info and \ if 'have_comment_number' in card_info and \
card_info['have_comment_number'] < 20: card_info['have_comment_number'] < 20:
card_info["have_comment_number"] += 1 card_info["have_comment_number"] += 1
logging.info("当前卡片ID:%s,comment1子函数消费处理耗时:%f" % ( is_success = comment(card_info)
card_info['card_id'], time.time() - begin)) logging.info("comment [%s,%s,%s,%s],当前ID:%s,状态:%s" % (
is_success, is_many = comment(card_info)
logging.info("comment [%s,%s,%s,%s],当前ID:%s,下发状状态:%s" % (
str(msg.topic), str(msg.partition), str(msg.offset), str(msg.topic), str(msg.partition), str(msg.offset),
str(msg.key), str(msg.key),
card_info["card_id"], is_success)) card_info["card_id"], is_success))
logging.info("当前卡片ID:%s,comment2子函数消费处理耗时:%f" % (
card_info['card_id'], time.time() - begin))
# 调完接口后需要再次去拿新的push_time的时间 # 调完接口后需要再次去拿新的push_time的时间
if is_many: if is_success:
auto_comment_user(card_info) auto_comment_user(card_info)
else:
pass
elif action_type == "click": # 在这里去调点赞的接口 elif action_type == "click": # 在这里去调点赞的接口
is_many = True
if 'have_click_number' in card_info: if 'have_click_number' in card_info:
card_info["have_click_number"] += 1 card_info["have_click_number"] += 1
logging.info("当前卡片ID:%s,click1子函数消费处理耗时:%f" % ( is_success = click(card_info)
card_info["card_id"], time.time() - begin)) logging.info("click [%s,%s,%s,%s],当前ID:%s,状态:%s" % (
is_success, is_many = click(card_info)
logging.info("click [%s,%s,%s,%s],当前ID:%s,下发状状态:%s" % (
str(msg.topic), str(msg.partition), str(msg.offset), str(msg.topic), str(msg.partition), str(msg.offset),
str(msg.key), str(msg.key),
card_info["card_id"], is_success)) card_info["card_id"], is_success))
logging.info("当前卡片ID:%s,click2子函数消费处理耗时:%f" % ( if is_success:
card_info["card_id"], time.time() - begin))
if is_many:
auto_click_user(card_info) auto_click_user(card_info)
else:
pass
elif action_type == "follow": # 在这里去调关注的接口 elif action_type == "follow": # 在这里去调关注的接口
is_many = True
if 'have_follow_number' in card_info: if 'have_follow_number' in card_info:
card_info["have_follow_number"] += 1 card_info["have_follow_number"] += 1
logging.info("当前卡片ID:%s,follow1子函数消费处理耗时:%f" % ( is_success = follow(card_info)
card_info["card_id"], time.time() - begin)) logging.info("follow [%s,%s,%s,%s],当前ID:%s,状态:%s" % (
is_success, is_many = follow(card_info)
logging.info("当前卡片ID:%s,follow2子函数消费处理耗时:%f" % (
card_info["card_id"], time.time() - begin))
logging.info("follow [%s,%s,%s,%s],当前ID:%s,下发状状态:%s" % (
str(msg.topic), str(msg.partition), str(msg.offset), str(msg.topic), str(msg.partition), str(msg.offset),
str(msg.key), str(msg.key),
card_info["card_id"], is_success)) card_info["card_id"], is_success))
if is_success:
if is_many == True:
auto_follow_user(card_info) auto_follow_user(card_info)
else:
pass
else: # push_time时间未到 需要等待 else: # push_time时间未到 需要等待
logging.info("follow [%s,%s,%s,%s],push_time未到,需要等待" % ( logging.info("follow [%s,%s,%s,%s],等待" % (
str(msg.topic), str(msg.partition), str(msg.offset), str(msg.key))) str(msg.topic), str(msg.partition), str(msg.offset), str(msg.key)))
save_data_to_kafka(card_info) save_data_to_kafka(card_info)
pass
else: else:
logging.info("此条数据已经消费过了") logging.info("此条数据已经被paas了:%s" % card_info['card_id'])
pass
logging.info("消费处理耗时:%f" % (time.time() - begin)) logging.info("消费处理耗时:%f" % (time.time() - begin))
except: except:
consumser_obj.close() consumser_obj.close()
......
...@@ -13,7 +13,8 @@ from libs.error import logging_exception ...@@ -13,7 +13,8 @@ from libs.error import logging_exception
@bind('vest/moment/vest_irrigation') @bind('vest/moment/vest_irrigation')
def vest_irrigation(card_id=0, card_type=None, card_user_id=None, create_time="", content_level=0, tag_names=[]): def vest_irrigation(card_id=0, card_type=None, card_user_id=None, create_time="", content_level=0, tag_names=[],
tagv3_names=[]):
""" """
在这里把后端传的数据存进卡夫卡 日记和帖子只需要发评论不需要点赞和关注 在这里把后端传的数据存进卡夫卡 日记和帖子只需要发评论不需要点赞和关注
:param card_id: :param card_id:
...@@ -27,16 +28,15 @@ def vest_irrigation(card_id=0, card_type=None, card_user_id=None, create_time="" ...@@ -27,16 +28,15 @@ def vest_irrigation(card_id=0, card_type=None, card_user_id=None, create_time=""
try: try:
producer = KafkaProducer(bootstrap_servers=settings.KAFKA_BROKER_LIST) producer = KafkaProducer(bootstrap_servers=settings.KAFKA_BROKER_LIST)
logging.info("新数据进来了:%s" % card_id)
topic = settings.KAFKA_TOPIC_NAME topic = settings.KAFKA_TOPIC_NAME
tag_list = ["瘦脸针kyc", "双眼皮kyc", "水光针kyc", "玻尿酸kyc", "吸脂kyc", "祛痘kyc", "鼻综合kyc", "光子嫩肤kyc", "没有想法kyc",
"牙齿kyc", "抗衰紧致kyc", "胸部kyc", "果酸换肤kyc", "祛斑kyc", "美白针kyc", "瘦腿针kyc"]
flag = False
if len(tag_names) > 0:
for i in tag_names:
if i in tag_list:
flag = True flag = True
# tag_list = ["瘦脸针kyc", "双眼皮kyc", "水光针kyc", "玻尿酸kyc", "吸脂kyc", "祛痘kyc", "鼻综合kyc", "光子嫩肤kyc", "没有想法kyc",
# "牙齿kyc", "抗衰紧致kyc", "胸部kyc", "果酸换肤kyc", "祛斑kyc", "美白针kyc", "瘦腿针kyc"]
# flag = False
# if len(tag_names) > 0:
# for i in tag_names:
# if i in tag_list:
# flag = True
if flag == True: if flag == True:
comment_msg_dict = { comment_msg_dict = {
...@@ -48,10 +48,10 @@ def vest_irrigation(card_id=0, card_type=None, card_user_id=None, create_time="" ...@@ -48,10 +48,10 @@ def vest_irrigation(card_id=0, card_type=None, card_user_id=None, create_time=""
"tag_names": tag_names, "tag_names": tag_names,
"type": "get_write_answer_userinfo", "type": "get_write_answer_userinfo",
"current_push_time": create_time, "current_push_time": create_time,
'action_type': 'comment' 'action_type': 'comment',
"tagv3_names": tagv3_names
} }
logging.info("get comment_msg_dict:%s" % comment_msg_dict)
producer.send(topic, json.dumps(comment_msg_dict).encode()) producer.send(topic, json.dumps(comment_msg_dict).encode())
if card_type == 'answer': if card_type == 'answer':
...@@ -65,7 +65,8 @@ def vest_irrigation(card_id=0, card_type=None, card_user_id=None, create_time="" ...@@ -65,7 +65,8 @@ def vest_irrigation(card_id=0, card_type=None, card_user_id=None, create_time=""
"type": "get_write_answer_userinfo", "type": "get_write_answer_userinfo",
"current_push_time": create_time, "current_push_time": create_time,
'action_type': 'follow', 'action_type': 'follow',
'card_user_id': card_user_id 'card_user_id': card_user_id,
"tagv3_names": tagv3_names
} }
producer.send(topic, json.dumps(follow_msg_dict).encode()) producer.send(topic, json.dumps(follow_msg_dict).encode())
...@@ -79,7 +80,8 @@ def vest_irrigation(card_id=0, card_type=None, card_user_id=None, create_time="" ...@@ -79,7 +80,8 @@ def vest_irrigation(card_id=0, card_type=None, card_user_id=None, create_time=""
"tag_names": tag_names, "tag_names": tag_names,
"type": "get_write_answer_userinfo", "type": "get_write_answer_userinfo",
"current_push_time": create_time, "current_push_time": create_time,
'action_type': 'click' 'action_type': 'click',
"tagv3_names": tagv3_names
} }
producer.send(topic, json.dumps(click_msg_dict).encode()) producer.send(topic, json.dumps(click_msg_dict).encode())
......
...@@ -65,40 +65,61 @@ def get_one_six_days_random_time(frmt='%Y-%m-%d %H:%M:%S', num_days=0, action_ty ...@@ -65,40 +65,61 @@ def get_one_six_days_random_time(frmt='%Y-%m-%d %H:%M:%S', num_days=0, action_ty
content_day_need_add_one_day=False): content_day_need_add_one_day=False):
try: try:
action_num = 0 action_num = 0
all_time_list = []
##follow 发布后1天 3:1-2 4:5-10
##
if num_days == 1 and action_type in ("follow", "click") and int(content_level) < 3: if num_days == 1 and action_type in ("follow", "click") and int(content_level) < 3:
action_num = random.randint(1, 3) action_num = random.randint(1, 2)
if num_days == 1 and action_type in ("follow") and int(content_level) >= 3: if num_days == 1 and action_type in ("follow") and int(content_level) >= 3:
action_num = random.randint(5, 10) action_num = random.randint(5, 10)
if num_days == 1 and action_type in ("click") and int(content_level) >= 3:
action_num = random.randint(6, 12)
if num_days <= 15 and num_days > 1 and action_type in ("follow", "click") and int(content_level) < 3: if num_days <= 15 and num_days > 1 and action_type in ("follow", "click") and int(content_level) < 3:
action_num = random.randint(1, 2) action_num = random.randint(1, 2)
if num_days <= 15 and num_days > 1 and action_type in ("follow") and int(content_level) >= 3: if num_days <= 15 and num_days > 1 and action_type in ("follow") and int(content_level) >= 3:
action_num = random.randint(1, 5) action_num = random.randint(1, 5)
if num_days == 1 and action_type in ("click") and int(content_level) >= 3:
action_num = random.randint(6, 12)
if num_days <= 15 and num_days > 1 and action_type in ("click") and int(content_level) >= 3: if num_days <= 15 and num_days > 1 and action_type in ("click") and int(content_level) >= 3:
action_num = random.randint(1, 6) action_num = random.randint(1, 6)
if num_days >= 1 and num_days <= 6 and action_type in ("comment"): if num_days >= 1 and num_days <= 6 and action_type in ("comment"):
if int(content_level) <= 3: if int(content_level) <= 3:
action_num = random.randint(1, 2)
else:
action_num = random.randint(2, 4) action_num = random.randint(2, 4)
else:
action_num = random.randint(3, 4)
now = datetime.datetime.now() now = datetime.datetime.now()
if content_day_need_add_one_day == True: if content_day_need_add_one_day == True:
nows = now nows = now
now = nows + datetime.timedelta(days=1) now = nows + datetime.timedelta(days=1)
zeroday = str(datetime.datetime(now.year, now.month, now.day, 10, 0, 0)) ##第一个时间段
lastday = str(datetime.datetime(now.year, now.month, now.day, 23, 0, 0)) zeroday = str(datetime.datetime(now.year, now.month, now.day, 9, 0, 0))
lastday = str(datetime.datetime(now.year, now.month, now.day, 10, 59, 59))
random_times = [randomDate_six_one(zeroday, lastday, frmt) for _ in range(action_num)] random_times = [randomDate_six_one(zeroday, lastday, frmt) for _ in range(action_num)]
have_sort_times = sorted(random_times, key=lambda date: get_list(date)) have_sort_times1 = sorted(random_times, key=lambda date: get_list(date))
return have_sort_times
##第二个时间段
zeroday = str(datetime.datetime(now.year, now.month, now.day, 12, 0, 0))
lastday = str(datetime.datetime(now.year, now.month, now.day, 14, 59, 59))
random_times = [randomDate_six_one(zeroday, lastday, frmt) for _ in range(action_num)]
have_sort_times2 = sorted(random_times, key=lambda date: get_list(date))
##第三个时间段
zeroday = str(datetime.datetime(now.year, now.month, now.day, 20, 0, 0))
lastday = str(datetime.datetime(now.year, now.month, now.day, 23, 59, 59))
random_times = [randomDate_six_one(zeroday, lastday, frmt) for _ in range(action_num)]
have_sort_times3 = sorted(random_times, key=lambda date: get_list(date))
all_time_list.extend(have_sort_times1)
all_time_list.extend(have_sort_times2)
all_time_list.extend(have_sort_times3)
return all_time_list
except: except:
logger.error("catch exception,err_log:%s" % traceback.format_exc()) logger.error("catch exception,err_log:%s" % traceback.format_exc())
return [] return []
...@@ -107,50 +128,63 @@ def get_one_six_days_random_time(frmt='%Y-%m-%d %H:%M:%S', num_days=0, action_ty ...@@ -107,50 +128,63 @@ def get_one_six_days_random_time(frmt='%Y-%m-%d %H:%M:%S', num_days=0, action_ty
def get_ten_last_days_random_time(num_days=None, frmt='%Y-%m-%d %H:%M:%S', content_level=0, def get_ten_last_days_random_time(num_days=None, frmt='%Y-%m-%d %H:%M:%S', content_level=0,
content_day_need_add_one_day=False, action_type=None, repeat_time=1): content_day_need_add_one_day=False, action_type=None, repeat_time=1):
try: try:
all_time_list = []
if num_days == None: if num_days == None:
return [] return []
##比较当前时间和最后一次创建时间的差 ##比较当前时间和最后一次创建时间的差
now = datetime.datetime.now() now = datetime.datetime.now()
zeroday = datetime.datetime(now.year, now.month, now.day, 10, 0, 0) zeroday = datetime.datetime(now.year, now.month, now.day, 9, 0, 0)
lastday = datetime.datetime(now.year, now.month, now.day, 23, 0, 0)
add_number = 0
if num_days > 15 and action_type in ("follow"):
action_num = random.randint(1, 2)
add_number = 10
elif num_days > 15 and action_type in ("click"):
if content_level < 3:
action_num = random.randint(1, 2)
add_number = 6
else: add_number = 0
if num_days > 15 and action_type in ("follow", "click"):
action_num = random.randint(1, 2) action_num = random.randint(1, 2)
add_number = 5 add_number = 3
elif num_days > 6 and action_type in ("comment"): elif num_days > 6 and action_type in ("comment"):
if content_level <= 3: if content_level <= 3:
action_num = 1 action_num = 1
add_number = 10 add_number = 3
else: else:
action_num = random.randint(1, 2) action_num = random.randint(1, 2)
add_number = 10 add_number = 3
else: else:
pass pass
if content_day_need_add_one_day == True:
start_time = zeroday + datetime.timedelta(days=add_number * repeat_time)
end_time = lastday + datetime.timedelta(days=add_number * repeat_time)
else:
start_time = zeroday + datetime.timedelta(days=add_number) start_time = zeroday + datetime.timedelta(days=add_number)
end_time = lastday + datetime.timedelta(days=add_number) ##第一个时间段
zeroday1 = str(datetime.datetime(start_time.year, start_time.month, start_time.day, 9, 0, 0))
lastday1 = str(datetime.datetime(start_time.year, start_time.month, start_time.day, 10, 59, 59))
random_times = [randomDate_six_one(zeroday1, lastday1, frmt) for _ in range(action_num)]
have_sort_times1 = sorted(random_times, key=lambda date: get_list(date))
##第二个时间段
zeroday2 = str(datetime.datetime(start_time.year, start_time.month, start_time.day, 12, 0, 0))
lastday2 = str(datetime.datetime(start_time.year, start_time.month, start_time.day, 14, 59, 59))
random_times = [randomDate_six_one(zeroday2, lastday2, frmt) for _ in range(action_num)]
have_sort_times2 = sorted(random_times, key=lambda date: get_list(date))
##第三个时间段
zeroday3 = str(datetime.datetime(start_time.year, start_time.month, start_time.day, 20, 0, 0))
lastday3 = str(datetime.datetime(start_time.year, start_time.month, start_time.day, 23, 59, 59))
random_times = [randomDate_six_one(zeroday3, lastday3, frmt) for _ in range(action_num)]
have_sort_times3 = sorted(random_times, key=lambda date: get_list(date))
all_time_list.extend(have_sort_times1)
all_time_list.extend(have_sort_times2)
all_time_list.extend(have_sort_times3)
# if content_day_need_add_one_day == True:
# start_time = zeroday + datetime.timedelta(days=add_number * repeat_time)
# end_time = lastday + datetime.timedelta(days=add_number * repeat_time)
#
# else:
# start_time = zeroday + datetime.timedelta(days=add_number)
# end_time = lastday + datetime.timedelta(days=add_number)
random_times = [randomDate_six_one(str(start_time), str(end_time), frmt) for _ in range(action_num)] # random_times = [randomDate_six_one(str(start_time), str(end_time), frmt) for _ in range(action_num)]
have_sort_times = sorted(random_times, key=lambda date: get_list(date)) # have_sort_times = sorted(random_times, key=lambda date: get_list(date))
return have_sort_times return all_time_list
except: except:
logger.error("catch exception,err_log:%s" % traceback.format_exc()) logger.error("catch exception,err_log:%s" % traceback.format_exc())
return [] return []
...@@ -173,16 +207,9 @@ def get_content_time_by_create_time(create_time="", content_level=0, action_type ...@@ -173,16 +207,9 @@ def get_content_time_by_create_time(create_time="", content_level=0, action_type
num_days += repeat_time num_days += repeat_time
content_day_need_add_one_day = True content_day_need_add_one_day = True
# 创建时间切换成分钟数便于比较 if num_days >= 0 and num_days <= 6:
# mins = divmod(num, min)[0]
##根据转换后的分钟数进行比较
##转化成分数后进行一层一层的比较
if num_days == 0: if num_days == 0:
get_time = randomDate(create_time=createt, action_type=action_type) num_days = 1
time_region = 0
return get_time, time_region
elif num_days >= 1 and num_days <= 6:
get_time = get_one_six_days_random_time(content_level=content_level, num_days=num_days, get_time = get_one_six_days_random_time(content_level=content_level, num_days=num_days,
action_type=action_type, action_type=action_type,
content_day_need_add_one_day=content_day_need_add_one_day) content_day_need_add_one_day=content_day_need_add_one_day)
...@@ -224,12 +251,8 @@ def get_click_follow_time_by_create_time(create_time="", content_level=0, action ...@@ -224,12 +251,8 @@ def get_click_follow_time_by_create_time(create_time="", content_level=0, action
num_days += repeat_time num_days += repeat_time
content_day_need_add_one_day = True content_day_need_add_one_day = True
if num_days == 0: if num_days == 0 or num_days == 1:
get_time = randomDate(create_time=createt, action_type=action_type) num_days = 1
return get_time, 0
elif num_days == 1:
get_time = get_one_six_days_random_time(num_days=num_days, action_type=action_type, get_time = get_one_six_days_random_time(num_days=num_days, action_type=action_type,
content_level=content_level, content_level=content_level,
content_day_need_add_one_day=content_day_need_add_one_day) content_day_need_add_one_day=content_day_need_add_one_day)
...@@ -280,50 +303,77 @@ def get_vest_userid(need_comment_num=0): ...@@ -280,50 +303,77 @@ def get_vest_userid(need_comment_num=0):
return 12345 return 12345
def get_vest_userid_and_comment(need_comment_num=0, tag_names=[], card_id=0): def get_vest_userid_and_comment(need_comment_num=0, tag_names=[], tagv3_names=[]):
try: try:
content = []
if tagv3_names:
content = by_tagv3_get_comment(need_comment_num=need_comment_num, tagv3_names=tagv3_names)
##先根据card_id回去内容提取关键字 else:
# logging.info("get settings.HOST:%s" % settings.HOST)
# db_zhengxing_eagle = pymysql.connect(host=settings.HOST, port=settings.PORT, user=settings.USER,
# password=settings.PASSWORD,
# db=settings.NAME)
#
# logging.info("get db_zhengxing_eagle:%s" % db_zhengxing_eagle)
# zhengxing_cursor = db_zhengxing_eagle.cursor()
# sql = 'select content from api_answer where id = %s ' % (card_id)
# zhengxing_cursor.execute(sql)
# data = list(zhengxing_cursor.fetchall())
# logging.info("get data:%s" % data)
# zhengxing_cursor.close()
# if len(data) > 0:
# soup = BeautifulSoup(data[0][0], 'html.parser')
# contents = soup.text
#
# ck = GetContentKeyWords()
# keywords = ck.get_keywords(contents, len(ck.tag_list))
# if keywords:
# tag_names.append(keywords)
if need_comment_num: if need_comment_num:
all_comment_list = [] all_comment_list = []
content = []
redis_key = "vest_kyc_tag_content_data" redis_key = "vest_kyc_tag_content_data"
all_keys = redis_client.hkeys(redis_key) group_keys = "get_group_comment_by_tag:group_id"
all_keys_name = []
for item in all_keys:
all_keys_name.append(str(item, encoding="utf-8"))
for item in tag_names: for item in tag_names:
if item in all_keys_name: ##如果自带的标签有kyc的话走kyc的标签
service_closure_tags = redis_client.hget(redis_key, item) service_closure_tags = redis_client.hget(redis_key, str(item))
if service_closure_tags:
closure_tags = json.loads(str(service_closure_tags, encoding="utf-8")) closure_tags = json.loads(str(service_closure_tags, encoding="utf-8"))
all_comment_list.extend(closure_tags) all_comment_list.extend(closure_tags)
if all_comment_list: if all_comment_list:
content = random.sample(all_comment_list, need_comment_num) content = random.sample(all_comment_list, need_comment_num)
else: else:
content = [] ##没有kyc的标签看标签所属的小组 拿对应小组的数据
all_group_ids = set()
all_comments = []
for item in tag_names:
sql_get_tagid = "select id from api_tag WHERE name = '%s'" % (item)
zhengxing_cursor.execute(sql_get_tagid)
data = zhengxing_cursor.fetchall()
if len(data):
tag_ids = data[0]
# ids = data[0][0]
sql = 'select tag_category_id from api_tag_category_relation where tag_id = %s' % (tag_ids)
zhengxing_cursor.execute(sql)
group_ids = zhengxing_cursor.fetchall()
for item in group_ids:
all_group_ids.add(item[0])
else: for all_group_id in list(all_group_ids):
get_comment = redis_client.hget(group_keys, int(all_group_id))
if get_comment:
comment = json.loads(str(get_comment, encoding="utf-8"))
all_comment_list.extend(comment)
content = random.sample(all_comment_list, need_comment_num)
zhengxing_cursor.close()
return content
except:
logging.error("catch exception,err_msg:%s" % traceback.format_exc())
return []
def by_tagv3_get_comment(need_comment_num=0, tagv3_names=[]):
try:
content = []
if need_comment_num:
all_comment_list = []
content = [] content = []
redis_key = "vest_kyc_tag_content_data_tagv3"
group_keys = "get_group_comment_by_tag:group_id"
for item in tagv3_names:
##如果自带的标签有kyc的话走kyc的标签
service_closure_tags = redis_client.hget(redis_key, str(item))
if service_closure_tags:
closure_tags = json.loads(str(service_closure_tags, encoding="utf-8"))
all_comment_list.extend(closure_tags)
if all_comment_list:
content = random.sample(all_comment_list, need_comment_num)
return content return content
except: except:
...@@ -343,8 +393,7 @@ def judge_offset_partition_have_consum(card_info=None, offset=0, partition=0): ...@@ -343,8 +393,7 @@ def judge_offset_partition_have_consum(card_info=None, offset=0, partition=0):
create_time = card_info['create_time'] create_time = card_info['create_time']
datetime_create_time = datetime.datetime.strptime(create_time, '%Y-%m-%d %H:%M:%S') datetime_create_time = datetime.datetime.strptime(create_time, '%Y-%m-%d %H:%M:%S')
str_data = str(datetime_create_time.year) + str(datetime_create_time.month) + str(datetime_create_time.day) str_data = str(datetime_create_time.year) + str(datetime_create_time.month) + str(datetime_create_time.day)
if str_data in ['20191229', '20191230']: if str_data in ['20191229', '20191230', '20191228', '20191227']:
logging.info("该日期的数据已经被删除啦")
return False return False
redis_list_data = 0 redis_list_data = 0
...@@ -359,6 +408,82 @@ def judge_offset_partition_have_consum(card_info=None, offset=0, partition=0): ...@@ -359,6 +408,82 @@ def judge_offset_partition_have_consum(card_info=None, offset=0, partition=0):
return False return False
def judge_data_have_in_redis(card_info=None):
try:
today = datetime.datetime.now()
str_today = str(today.year) + str(today.month) + str(today.day)
push_time = card_info['current_push_time']
push_datetime = datetime.datetime.strptime(push_time, '%Y-%m-%d %H:%M:%S')
str_push_datetime = str(push_datetime.year) + str(push_datetime.month) + str(push_datetime.day)
if str_today != str_push_datetime:
return True
if card_info['action_type'] == 'comment':
##在这里加一个判断 如果当前的评论的user_id和评论内容已经在这个评论下了就不再下发给同一个回答ID
key = 'have_reply_answer_comment:' + str(card_info['card_id'])
redis_data = redis_client.hget(key, card_info['current_user_id'])
if redis_data:
datas = json.loads(str(redis_data, encoding="utf-8"))
if card_info['comment_content'] in datas:
return False
else:
datas.append(card_info['comment_content'])
redis_client.hset(key, card_info['current_user_id'], json.dumps(datas))
return True
else:
conent = [card_info['comment_content']]
redis_client.hset(key, card_info['current_user_id'], json.dumps(conent))
return True
elif card_info['action_type'] == 'follow':
key = 'have_reply_answer_follow:' + str(card_info['card_id'])
redis_data = redis_client.get(key)
if redis_data:
datas = json.loads(str(redis_data, encoding="utf-8"))
if card_info['current_user_id'] in datas:
return False
else:
datas.append(card_info['current_user_id'])
redis_client.set(key, json.dumps(datas))
return True
else:
conent = [card_info['current_user_id']]
redis_client.set(key, json.dumps(conent))
return True
elif card_info['action_type'] == 'click':
key = 'have_reply_answer_click:' + str(card_info['card_id'])
redis_data = redis_client.get(key)
if redis_data:
datas = json.loads(str(redis_data, encoding="utf-8"))
if card_info['current_user_id'] in datas:
return False
else:
datas.append(card_info['current_user_id'])
redis_client.set(key, json.dumps(datas))
return True
else:
conent = [card_info['current_user_id']]
redis_client.set(key, json.dumps(conent))
return True
else:
pass
except:
logging.error("catch exception,err_msg:%s" % traceback.format_exc())
return False
def get_current_card_content_level(card_info=[]): def get_current_card_content_level(card_info=[]):
try: try:
# 判断当前卡片的等级 # 判断当前卡片的等级
......
This source diff could not be displayed because it is too large. You can view the blob instead.
32333819 32494267
32333811 32494268
32283128 32494269
32283127 32494270
32283126 32494271
32283125 32494272
32283124 32494273
32283123 32494274
32283122 32494275
32283121 32494276
32283120 32494277
32283119 32494278
32283118 32494279
32283117 32494280
32283116 32494281
32283115 32494282
32283114 32494283
32283113 32494284
32283112 32494285
32283111 32494286
32283110 32494287
32283109 32494288
32283108 32494289
32283107 32494290
32283106 32494291
32283105 32494292
32283104 32494293
32283103 32494294
32283102 32494295
32283101 32494296
32283100 32494297
32283099 32494298
32283098 32494299
32283097 32494300
32283096 32494301
32283095 32494302
32283094 32494303
32283093 32494304
32283092 32494305
32283091 32494306
32283090 32494307
32283089 32494308
32283088 32494309
32283087 32494310
32283086 32494311
32283085 32494312
32283084 32494313
32283083 32494314
32283082 32494315
32283081 32494316
32283080 32494317
32283079 32494318
32283078 32494319
32283077 32494320
32283076 32494321
32283075 32494322
32283074 32494323
32283073 32494324
32283072 32494325
32283071 32494326
32283070 32494327
32283069 32494328
32283068 32494329
32283067 32494330
32283066 32494331
32283065 32494332
32283064 32494333
32283063 32494334
32283062 32494335
32283061 32494336
32283060 32494337
32283059 32494338
32283058 32494339
32283057 32494340
32283056 32494341
32283055 32494342
32283054 32494343
32283053 32494344
32283052 32494345
32283051 32494346
32283050 32494347
32283049 32494348
32283048 32494349
32283047 32494350
32283046 32494351
32283045 32494352
32283044 32494353
32283043 32494354
32283042 32494355
32283041 32494356
32283040 32494357
32283039 32494358
32283038 32494359
32283037 32494360
32283036 32494361
32283035 32494362
32283034 32494363
32283033 32494364
32283032 32494365
32283031 32494366
32283030 32494367
32283029 32494368
32283028 32494369
32283027 32494370
32283026 32494371
32283025 32494372
32283024 32494373
32283023 32494374
32283022 32494375
32283021 32494376
32283020 32494377
32283019 32494378
32283018 32494379
32283017 32494380
32283016 32494381
32283015 32494382
32283014 32494383
32283013 32494384
32283012 32494385
32283011 32494386
32283010 32494387
32283009 32494388
32283008 32494389
32283007 32494390
32283006 32494391
32283005 32494392
32283004 32494393
32283003 32494394
32283002 32494395
32283001 32494396
32283000 32494397
32282999 32494398
32282998 32494399
32282997 32494400
32282996 32494401
32282995 32494402
32282994 32494403
32282993 32494404
32282992 32494405
32282991 32494406
32282990 32494407
32282989 32494408
32282988 32494409
32282987 32494410
32282986 32494411
32282985 32494412
32282984 32494413
32282983 32494414
32282982 32494415
32282981 32494416
32282980 32494417
32282979 32494418
32282978 32494419
32282977 32494420
32282976 32494421
32282975 32494422
32282974 32494423
32282973 32494424
32282972 32494425
32282971 32494426
32282970 32494427
32282969 32494428
32282968 32494429
32282967 32494430
32282966 32494431
32282965 32494432
32282964 32494433
32282963 32494434
32282962 32494435
32282961 32494436
32282960 32494437
32282959 32494438
32282958 32494439
32282957 32494440
32282956 32494441
32282955 32494442
32282954 32494443
32282953 32494444
32282952 32494445
32282951 32494446
32282950 32494447
32282949 32494448
32282948 32494449
32282947 32494450
32282946 32494451
32282945 32494452
32282944 32494453
32282943 32494454
32282942 32494455
32282941 32494456
32282940 32494457
32282939 32494458
32282938 32494459
32282937 32494460
32282936 32494461
32282935 32494462
32282934 32494463
32282933 32494464
32282932 32494465
32282931 32494466
32282930 32494467
32282929 32494468
32282928 32494469
32282927 32494470
32282926 32494471
32282925 32494472
32282924 32494473
32282923 32494474
32282922 32494475
32282921 32494476
32282920 32494477
32282919 32494478
32282918 32494479
32282917 32494480
32282916 32494481
32282915 32494482
32282914 32494483
32282913 32494484
32282912 32494485
32282911 32494486
32282910 32494487
32282909 32494488
32282908 32494489
32282907 32494490
32282906 32494491
32282905 32494492
32282904 32494493
32282903 32494494
32282902 32494495
32282901 32494496
32282900 32494497
32282899 32494498
32282898 32494499
32282897 32494500
32282896 32494501
32282895 32494502
32282894 32494503
32282893 32494504
32282892 32494505
32282891 32494506
32282890 32494507
32282889 32494508
32282888 32494509
32282887 32494510
32282886 32494511
32282885 32494512
32282884 32494513
32282883 32494514
32282882 32494515
32282881 32494516
32282880 32494517
32282879 32494518
32282878 32494519
32282877 32494520
32282876 32494521
32282875 32494522
32282874 32494523
32282873 32494524
32282872 32494525
32282871 32494526
32282870 32494527
32282869 32494528
32282868 32494529
32282867 32494530
32282866 32494531
32282865 32494532
32282864 32494533
32282863 32494534
32282862 32494535
32282861 32494536
32282860 32494537
32282859 32494538
32282858 32494539
32282857 32494540
32282856 32494541
32282855 32494542
32282854 32494543
32282853 32494544
32282852 32494545
32282851 32494546
32282850 32494547
32282849 32494548
32282848 32494549
32282847 32494550
32282846 32494551
32282845 32494552
32282844 32494553
32282843 32494554
32282842 32494555
32282841 32494556
32282840 32494557
32282839 32494558
32282838 32494559
32282837 32494560
32282836 32494561
32282835 32494562
32282834 32494563
32282833 32494564
32282832 32494565
32282831 32494566
32282830 32494567
32282829 32494568
32282828 32494569
32282827 32494570
32282824 32494571
32282823 32494572
32282822 32494573
32282821 32494574
32282820 32494575
32282819 32494576
32282818 32494577
32282817 32494578
32282816 32494579
32282815 32494580
32282814 32494581
32282813 32494582
32282812 32494583
32282811 32494584
32282810 32494585
32282809 32494586
32282808 32494587
32282807 32494588
32282806 32494589
32282805 32494590
32282804 32494591
32282803 32494592
32282802 32494593
32282801 32494594
32282800 32494595
32282799 32494596
32282798 32494597
32282797 32494598
32282796 32494599
32282795 32494600
32282794 32494601
32282793 32494602
32282792 32494603
32282791 32494604
32282790 32494605
32282789 32494606
32282788 32494607
32282787 32494608
32282786 32494609
32282785 32494610
32282783 32494611
32282782 32494612
32282781 32494613
32282780 32494614
32282779 32494615
32282778 32494616
32282777 32494617
32282776 32494618
32282775 32494619
32282774 32494620
32282773 32494621
32282772 32494622
32282771 32494623
32282770 32494624
32282769 32494625
32282768 32494626
32282767 32494627
32282765 32494628
32282764 32494629
32282763 32494630
32282762 32494631
32282761 32494632
32282760 32494633
32282759 32494634
32282758 32494636
32282757 32494637
32282756 32494638
32282755 32494639
32282754 32494640
32282753 32494641
32282752 32494642
32282751 32494643
32282750 32494644
32282749 32494645
32282748 32494646
32282747 32494647
32282746 32494648
32282745 32494649
32282744 32494650
32282743 32494651
32282742 32494652
32282740 32494653
32282739 32494654
32282738 32494655
32282737 32494656
32282736 32494657
32282735 32494658
32282734 32494659
32282733 32494660
32282732 32494661
32282731 32494662
32282730 32494663
32282729 32494664
32282728 32494665
32282727 32494666
32282726 32494667
32282725 32494668
32282724 32494669
32282723 32494670
32282722 32494671
32282721 32494672
32282720 32494673
32282719 32494674
32282718 32494675
32282717 32494676
32282716 32494677
32282715 32494678
32282714 32494679
32282713 32494680
32282712 32494681
32282711 32494682
32282710 32494683
32282709 32494684
32282708 32494685
32282707 32494686
32282706 32494687
32282705 32494688
32282704 32494689
32282703 32494690
32282702 32494691
32282701 32494692
32282700 32494693
32282699 32494694
32282698 32494695
32282697 32494696
32282696 32494697
32282695 32494698
32282694 32494699
32282693 32494700
32282692 32494701
32282691 32494702
32282690 32494703
32282689 32494704
32282688 32494705
32282687 32494706
32282686 32494707
32282685 32494708
32282684 32494709
32282683 32494710
32282682 32494711
32282681 32494712
32282680 32494713
32282679 32494714
32282678 32494715
32282677 32494716
32282676 32494717
32282675 32494718
32282674 32494719
32282673 32494720
32282672 32494721
32282671 32494722
32282670 32494723
32282669 32494724
32282668 32494725
32282667 32494726
32282666 32494727
32282665 32494728
32282664 32494729
32282663 32494730
32282662 32494731
32282661 32494732
32282660 32494733
32282659 32494734
32282658 32494736
32282657 32494737
32282656 32494738
32282655 32494739
32282654 32494740
32282653 32494741
32282652 32494742
32282651 32494743
32282650 32494744
32282649 32494745
32282648 32494746
32282647 32494747
32282646 32494748
32282645 32494749
32282644 32494750
32282643 32494751
32282642 32494752
32282641 32494753
32282640 32494754
32282639 32494755
32282638 32494756
32282637 32494757
32282636 32494758
32282635 32494759
32282634 32494760
32282633 32494761
32282632 32494762
32282631 32494763
32282630 32494764
32282629 32494765
32282628 32494766
32282626 32494767
32282625 32494768
32282624 32494769
32282623 32494770
32282622 32494771
32282621 32494772
32282620 32494773
32282619 32494774
32282618 32494775
32282617 32494776
32282616 32494777
32282615 32494778
32282614 32494779
32282613 32494780
32282612 32494781
32282611 32494782
32282610 32494783
32282609 32494784
32282608 32494785
32282607 32494786
32282606 32494787
32282605 32494788
32282604 32494789
32282603 32494790
32282602 32494791
32282601 32494792
32282600 32494793
32282599 32494794
32282598 32494795
32282597 32494796
32282596 32494797
32282595 32494798
32282594 32494799
32282593 32494800
32282592 32494801
32282591 32494802
32282590 32494803
32282589 32494804
32282588 32494805
32282587 32494806
32282586 32494807
32282585 32494808
32282584 32494809
32282583 32494810
32282582 32494811
32282581 32494812
32282580 32494813
32282579 32494814
32282578 32494815
32282577 32494816
32282576 32494817
32282575 32494818
32282574 32494819
32282573 32494820
32282572 32494821
32282571 32494822
32282570 32494823
32282569 32494824
32282568 32494825
32282567 32494826
32282566 32494827
32282565 32494828
32282564 32494829
32282563 32494830
32282562 32494831
32282561 32494832
32282560 32494833
32282559 32494834
32282558 32494835
32282557 32494836
32282556 32494837
32282555 32494838
32282554 32494839
32282552 32494840
32282551 32494841
32282550 32494842
32282549 32494843
32282547 32494844
32282546 32494845
32282545 32494846
32282544 32494847
32282543 32494848
32282542 32494849
32282541 32494850
32282540 32494851
32282539 32494852
32282538 32494853
32282537 32494854
32282536 32494855
32282535 32494856
32282534 32494857
32282533 32494858
32282532 32494859
32282531 32494860
32282530 32494861
32282529 32494862
32282528 32494863
32282527 32494864
32282526 32494865
32282525 32494866
32282524 32494867
32282523 32494868
32282522 32494869
32282521 32494870
32282520 32494871
32282519 32494872
32282518 32494873
32282517 32494874
32282516 32494875
32282515 32494876
32282514 32494877
32282513 32494878
32282512 32494879
32282511 32494880
32282510 32494881
32282509 32494882
32282508 32494883
32282507 32494884
32282506 32494885
32282505 32494886
32282504 32494887
32282503 32494888
32282502 32494889
32282501 32494890
32282499 32494891
32282498 32494892
32282497 32494893
32282496 32494894
32282495 32494895
32282494 32494896
32282493 32494897
32282492 32494898
32282491 32494899
32282490 32494900
32282489 32494901
32282488 32494902
32282487 32494903
32282485 32494904
32282484 32494905
32282483 32494906
32282482 32494907
32282481 32494908
32282480 32494909
32282479 32494910
32282478 32494911
32282476 32494912
32282475 32494913
32282474 32494914
32282473 32494915
32282472 32494916
32282471 32494917
32282470 32494918
32282469 32494919
32282468 32494920
32282467 32494921
32282466 32494922
32282465 32494923
32282464 32494924
32282463 32494925
32282462 32494926
32282461 32494927
32282460 32494928
32282459 32494929
32282458 32494930
32282457 32494932
32282456 32494933
32282455 32494934
32282454 32494935
32282453 32494936
32282452 32494937
32282451 32494938
32282450 32494939
32282449 32494940
32282448 32494941
32282447 32494942
32282446 32494943
32282445 32494944
32282444 32494945
32282443 32494946
32282442 32494947
32282441 32494948
32282440 32494949
32282439 32494950
32282438 32494951
32282437 32494952
32282436 32494953
32282435 32494954
32282434 32494955
32282433 32494956
32282432 32494957
32282431 32494958
32282430 32494959
32282429 32494960
32282428 32494961
32282427 32494962
32282426 32494963
32282425 32494964
32282424 32494965
32282423 32494966
32282422 32494967
32282421 32494968
32282420 32494969
32282419 32494970
32282418 32494971
32282417 32494972
32282416 32494973
32282415 32494974
32282414 32494975
32282413 32494976
32282412 32494977
32282411 32494978
32282410 32494979
32282409 32494980
32282408 32494981
32282407 32494982
32282406 32494983
32282405 32494984
32282404 32494985
32282403 32494986
32282402 32494987
32282401 32494988
32282400 32494989
32282399 32494990
32282398 32494991
32282397 32494992
32282396 32494993
32282395 32494994
32282394 32494995
32282393 32494996
32282392 32494997
32282391 32494998
32282390 32494999
32282389 32495000
32282388 32495001
32282387 32495002
32282386 32495003
32282385 32495004
32282384 32495005
32282383 32495006
32282382 32495007
32282381 32495008
32282380 32495009
32282379 32495010
32282378 32495011
32282377 32495012
32282376 32495013
32282375 32495014
32282374 32495015
32282373 32495016
32282372 32495017
32282371 32495018
32282370 32495019
32282369 32495020
32282367 32495021
32282366 32495022
32282365 32495023
32282364 32495024
32282363 32495025
32282362 32495026
32282361 32495027
32282360 32495028
32282359 32495029
32282358 32495030
32282357 32495031
32282356 32495032
32282355 32495033
32282354 32495034
32282353 32495035
32282352 32495036
32282351 32495037
32282350 32495038
32282349 32495039
32282348 32495040
32282347 32495041
32282346 32495042
32282345 32495043
32282344 32495044
32282343 32495045
32282342 32495046
32282341 32495047
32282340 32495048
32282339 32495049
32282338 32495050
32282337 32495051
32282336 32495052
32282335 32495053
32282334 32495054
32282333 32495055
32282332 32495056
32282331 32495057
32282330 32495058
32282329 32495059
32282328 32495060
32282327 32495061
32282326 32495062
32282325 32495063
32282324 32495064
32282323 32495065
32282322 32495066
32282321 32495067
32282320 32495068
32282319 32495069
32282318 32495070
32282317 32495071
32282316 32495072
32282315 32495073
32282314 32495074
32282313 32495075
32282312 32495076
32282311 32495077
32282310 32495078
32282309 32495079
32282308 32495080
32282307 32495081
32282306 32495082
32282305 32495083
32282304 32495084
32282303 32495085
32282302 32495086
32282301 32495087
32282300 32495088
32282299 32495089
32282298 32495090
32282297 32495091
32282296 32495092
32282295 32495093
32282294 32495094
32282293 32495095
32282292 32495096
32282291 32495097
32282290 32495098
32282289 32495099
32282288 32495100
32282287 32495101
32282286 32495102
32282285 32495103
32282284 32495104
32282283 32495105
32282282 32495106
32282281 32495107
32282280 32495108
32282279 32495109
32282278 32495110
32282277 32495111
32282276 32495112
32282275 32495113
32282274 32495114
32282273 32495115
32282272 32495116
32282271 32495117
32282270 32495118
32282269 32495119
32282268 32495120
32282267 32495121
32282266 32495122
32282265 32495123
32282264 32495124
32282263 32495125
32282262 32495126
32282261 32495127
32282260 32495128
32282259 32495129
32282258 32495130
32282256 32495131
32282255 32495132
32282254 32495133
32282253 32495134
32282252 32495135
32282251 32495136
32282250 32495137
32282249 32495138
32282248 32495139
32282247 32495140
32282246 32495141
32282245 32495142
32282244 32495143
32282243 32495144
32282242 32495145
32282241 32495146
32282240 32495147
32282239 32495148
32282238 32495149
32282237 32495150
32282236 32495151
32282235 32495152
32282234 32495153
32282233 32495154
32282232 32495155
32282231 32495156
32282230 32495157
32282229 32495158
32282228 32495159
32282227 32495160
32282226 32495161
32282225 32495162
32282224 32495163
32282223 32495164
32282222 32495165
32282221 32495166
32282220 32495167
32282219 32495168
32282218 32495169
32282217 32495170
32282216 32495171
32282215 32495172
32282214 32495173
32282213 32495174
32282212 32495175
32282211 32495176
32282210 32495177
32282209 32495178
32282208 32495179
32282207 32495180
32282206 32495181
32282205 32495182
32282204 32495183
32282203 32495184
32282202 32495185
32282201 32495186
32282200 32495187
32282199 32495188
32282198 32495189
32282197 32495190
32282196 32495191
32282195 32495192
32282194 32495193
32282193 32495194
32282192 32495195
32282191 32495196
32282190 32495197
32282189 32495198
32282188 32495199
32282187 32495200
32282186 32495201
32282185 32495202
32282184 32495203
32282183 32495204
32282182 32495205
32282181 32495206
32282180 32495207
32282179 32495208
32282178 32495209
32282177 32495210
32282176 32495211
32282175 32495212
32282174 32495213
32282173 32495214
32282172 32495215
32282171 32495216
32282170 32495217
32282169 32495218
32282168 32495219
32282167 32495220
32282166 32495221
32282165 32495222
32282164 32495223
32282163 32495224
32282162 32495225
32282161 32495226
32282160 32495228
32282159 32495229
32282158 32495230
32282157 32495231
32282156 32495232
32282155 32495233
32282154 32495234
32282153 32495235
32282152 32495236
32282151 32495237
32282150 32495238
32282149 32495239
32282148 32495240
32282147 32495241
32282146 32495242
32282145 32495243
32282144 32495244
32282143 32495245
32282142 32495246
32282141 32495247
32282140 32495248
32282139 32495249
32282138 32495250
32282137 32495251
32282136 32495252
32282135 32495253
32282134 32495254
32282133 32495255
32282132 32495256
32282131 32495257
32282130 32495258
32282129 32495259
32282128 32495260
32282127 32495261
32282126 32495262
32282125 32495263
32282124 32495264
32282123 32495265
32282122 32495266
32282121 32495267
32282120 32495268
32282119 32495269
32282118 32495270
32282117 32495271
32282116 32495272
32282115 32495273
32282114 32495274
32282113 32495275
32282112 32495276
32282111 32495277
32282110 32495278
32282109 32495279
32282108 32495280
32282107 32495281
32282106 32495282
32282104 32495283
32282103 32495284
32282102 32495285
32282101 32495286
32282100 32495287
32282098 32495288
32282097 32495289
32282096 32495290
32282095 32495291
32282094 32495292
32282093 32495293
32282092 32495294
32282091 32495295
32282090 32495296
32282089 32495297
32282088 32495298
32282087 32495299
32282086 32495300
32282085 32495301
32282084 32495302
32282083 32495303
32282082 32495304
32282081 32495305
32282080 32495306
32282079 32495307
32282078 32495308
32282077 32495309
32282076 32495310
32282075 32495311
32282074 32495312
32282073 32495313
32282071 32495314
32282069 32495315
32282068 32495316
32282067 32495317
32282066 32495318
32282065 32495319
32282064 32495320
32282063 32495321
32282062 32495322
32282061 32495323
32282060 32495324
32282059 32495325
32282058 32495326
32282057 32495327
32282056 32495328
32282055 32495329
32282054 32495330
32282053 32495331
32282052 32495332
32282051 32495333
32282050 32495334
32282049 32495335
32282048 32495336
32282047 32495337
32282046 32495338
32282045 32495339
32282044 32495340
32282043 32495341
32282042 32495342
32282041 32495343
32282040 32495344
32282039 32495345
32282037 32495346
32282036 32495347
32282035 32495348
32282034 32495349
32282033 32495350
32282032 32495351
32282031 32495352
32282030 32495353
32282029 32495354
32282028 32495355
32282027 32495356
32282026 32495357
32282025 32495358
32282024 32495359
32282023 32495360
32282022 32495361
32282021 32495362
32282020 32495363
32282019 32495364
32282018 32495365
32282017 32495366
32282016 32495367
32282015 32495368
32282014 32495369
32282013 32495370
32282012 32495371
32282011 32495372
32282010 32495373
32282009 32495374
32282008 32495375
32282007 32495376
32282006 32495377
32282005 32495378
32282004 32495379
32282003 32495380
32282002 32495381
32282001 32495382
32282000 32495383
32281999 32495384
32281998 32495385
32281997 32495386
32281996 32495387
32281995 32495388
32281994 32495389
32281993 32495390
32281992 32495391
32281991 32495392
32281990 32495393
32281989 32495394
32281988 32495395
32281987 32495396
32281986 32495397
32281985 32495398
32281983 32495399
32281982 32495400
32281981 32495401
32281980 32495402
32281979 32495403
32281978 32495404
32281977 32495405
32281976 32495406
32281975 32495407
32281974 32495408
32281973 32495409
32281972 32495410
32281971 32495411
32281970 32495412
32281969 32495413
32281968 32495414
32281967 32495415
32281966 32495416
32281965 32495417
32281964 32495418
32281963 32495419
32281962 32495420
32281961 32495421
32281960 32495422
32281959 32495423
32281958 32495424
32281957 32495425
32281956 32495426
32281955 32495427
32281954 32495428
32281953 32495429
32281952 32495430
32281951 32495431
32281950 32495432
32281949 32495433
32281948 32495434
32281947 32495435
32281946 32495436
32281945 32495437
32281944 32495438
32281943 32495439
32281942 32495440
32281941 32495441
32281940 32495442
32281939 32495443
32281938 32495444
32281937 32495445
32281936 32495446
32281935 32495447
32281934 32495448
32281933 32495449
32281932 32495450
32281931 32495451
32281930 32495452
32281929 32495453
32281928 32495454
32281927 32495455
32281926 32495457
32281925 32495458
32281924 32495459
32281923 32495460
32281922 32495461
32281921 32495462
32281920 32495463
32281919 32495464
32281918 32495465
32281917 32495466
32281916 32495467
32281915 32495468
32281914 32495469
32281913 32495470
32281912 32495471
32281911 32495472
32281910 32495473
32281909 32495474
32281908 32495475
32281907 32495476
32281906 32495477
32281905 32495478
32281904 32495479
32281903 32495480
32281902 32495481
32281901 32495482
32281900 32495483
32281899 32495484
32281898 32495485
32281897 32495486
32281896 32495487
32281895 32495488
32281894 32495489
32281893 32495490
32281892 32495491
32281891 32495492
32281890 32495493
32281889 32495494
32281888 32495495
32281887 32495496
32281886 32495497
32281885 32495498
32281884 32495499
32281883 32495500
32281882 32495501
32281881 32495502
32281880 32495503
32281879 32495504
32281878 32495505
32281877 32495506
32281876 32495507
32281875 32495508
32281874 32495509
32281873 32495510
32281872 32495511
32281871 32495512
32281870 32495513
32281869 32495514
32281868 32495515
32281867 32495516
32281866 32495517
32281865 32495518
32281864 32495519
32281863 32495520
32281862 32495521
32281861 32495522
32281860 32495523
32281859 32495524
32281858 32495526
32281857 32495527
32281856 32495528
32281855 32495529
32281854 32495530
32281853 32495531
32281852 32495532
32281851 32495533
32281850 32495534
32281849 32495535
32281848 32495536
32281847 32495537
32281846 32495538
32281845 32495539
32281844 32495540
32281843 32495541
32281842 32495542
32281841 32495543
32281840 32495544
32281839 32495545
32281838 32495546
32281837 32495547
32281836 32495548
32281835 32495549
32281834 32495550
32281833 32495551
32281832 32495552
32281831 32495553
32281830 32495554
32281829 32495555
32281828 32495556
32281827 32495557
32281826 32495558
32281825 32495559
32281824 32495560
32281823 32495561
32281822 32495562
32281821 32495563
32281820 32495564
32281819 32495565
32281818 32495566
32281817 32495567
32281816 32495568
32281815 32495569
32281814 32495570
32281813 32495571
32281812 32495572
32281811 32495573
32281810 32495574
32281809 32495575
32281808 32495576
32281807 32495577
32281806 32495578
32281805 32495579
32281804 32495580
32281803 32495581
32281802 32495582
32281801 32495583
32281800 32495584
32281799 32495585
32281798 32495586
32281797 32495587
32281796 32495588
32281795 32495589
32281794 32495590
32281793 32495591
32281792 32495592
32281791 32495593
32281790 32495594
32281789 32495595
32281788 32495596
32281787 32495597
32281786 32495598
32281784 32495599
32281782 32495600
32281781 32495601
32281780 32495602
32281779 32495603
32281778 32495604
32281777 32495605
32281776 32495606
32281775 32495607
32281774 32495608
32281773 32495609
32281772 32495610
32281771 32495611
32281770 32495612
32281769 32495613
32281768 32495614
32281767 32495615
32281766 32495616
32281765 32495617
32281764 32495618
32281763 32495619
32281762 32495620
32281761 32495621
32281760 32495622
32281759 32495623
32281758 32495624
32281757 32495625
32281756 32495626
32281755 32495627
32281754 32495628
32281753 32495629
32281752 32495630
32281751 32495631
32281750 32495632
32281749 32495633
32281748 32495634
32281747 32495635
32281746 32495636
32281745 32495637
32281744 32495638
32281743 32495639
32281742 32495640
32281741 32495641
32281740 32495642
32281739 32495643
32281738 32495644
32281737 32495645
32281736 32495646
32281735 32495647
32281734 32495648
32281733 32495649
32281732 32495650
32281731 32495651
32281730 32495652
32281729 32495653
32281728 32495654
32281727 32495655
32281726 32495656
32281725 32495657
32281724 32495658
32281723 32495659
32281722 32495660
32281721 32495661
32281720 32495662
32281719 32495663
32281718 32495664
32281717 32495665
32281716 32495666
32281715 32495667
32281714 32495668
32281713 32495669
32281712 32495670
32281711 32495671
32281710 32495672
32281709 32495673
32281708 32495674
32281707 32495675
32281706 32495676
32281704 32495677
32281703 32495678
32281702 32495679
32281701 32495680
32281700 32495681
32281699 32495682
32281698 32495683
32281697 32495684
32281696 32495685
32281695 32495686
32281694 32495687
32281693 32495688
32281692 32495689
32281691 32495690
32281690 32495691
32281689 32495692
32281688 32495693
32281687 32495694
32281686 32495695
32281685 32495696
32281684 32495697
32281683 32495698
32281682 32495699
32281681 32495700
32281680 32495701
32281679 32495702
32281678 32495703
32281677 32495704
32281676 32495705
32281675 32495706
32281674 32495707
32281673 32495708
32281672 32495709
32281671 32495710
32281670 32495711
32281669 32495712
32281668 32495713
32281667 32495714
32281666 32495715
32281665 32495716
32281664 32495717
32281663 32495718
32281662 32495719
32281661 32495720
32281660 32495721
32281659 32495722
32281658 32495723
32281657 32495724
32281656 32495725
32281655 32495726
32281654 32495727
32281653 32495728
32281652 32495729
32281651 32495730
32281650 32495731
32281649 32495732
32281648 32495733
32281647 32495734
32281646 32495735
32281645 32495736
32281644 32495737
32281643 32495738
32281642 32495739
32281641 32495740
32281640 32495741
32281639 32495742
32281638 32495743
32281637 32495744
32281636 32495745
32281635 32495746
32281634 32495747
32281633 32495748
32281632 32495749
32281631 32495750
32281630 32495751
32281629 32495752
32281628 32495753
32281627 32495754
32281626 32495755
32281625 32495756
32281624 32495757
32281623 32495758
32281622 32495759
32281621 32495760
32281620 32495761
32281619 32495762
32281618 32495763
32281617 32495764
32281616 32495765
32281615 32495766
32281614 32495767
32281613 32495768
32281612 32495769
32281611 32495770
32281610 32495771
32281609 32495772
32281608 32495773
32281607 32495774
32281606 32495775
32281605 32495776
32281604 32495777
32281603 32495778
32281602 32495779
32281601 32495780
32281600 32495781
32281599 32495782
32281597 32495783
32281596 32495784
32281595 32495785
32281594 32495786
32281593 32495787
32281592 32495788
32281591 32495789
32281590 32495790
32281589 32495791
32281588 32495792
32281587 32495793
32281586 32495794
32281585 32495795
32281584 32495796
32281583 32495797
32281582 32495798
32281581 32495799
32281580 32495800
32281579 32495801
32281578 32495802
32281577 32495803
32281576 32495804
32281575 32495805
32281574 32495806
32281573 32495807
32281572 32495808
32281571 32495809
32281570 32495810
32281569 32495811
32281568 32495812
32281567 32495813
32281566 32495814
32281565 32495815
32281564 32495816
32281563 32495817
32281562 32495818
32281561 32495819
32281560 32495820
32281559 32495821
32281558 32495822
32281557 32495823
32281556 32495824
32281555 32495825
32281554 32495826
32281553 32495827
32281552 32495828
32281551 32495829
32281550 32495830
32281549 32495831
32281548 32495832
32281547 32495833
32281545 32495834
32281544 32495835
32281543 32495836
32281542 32495837
32281541 32495838
32281539 32495839
32281538 32495840
32281537 32495841
32281536 32495842
32281535 32495843
32281534 32495844
32281533 32495845
32281532 32495846
32281531 32495847
32281530 32495848
32281529 32495849
32281528 32495850
32281527 32495851
32281526 32495852
32281525 32495853
32281524 32495854
32281523 32495855
32281522 32495856
32281521 32495857
32281520 32495858
32281519 32495859
32281518 32495860
32281517 32495861
32281516 32495862
32281515 32495863
32281514 32495864
32281513 32495865
32281512 32495866
32281511 32495867
32281510 32495868
32281509 32495869
32281508 32495870
32281507 32495871
32281506 32495872
32281505 32495873
32281504 32495874
32281503 32495875
32281502 32495876
32281501 32495877
32281500 32495878
32281499 32495879
32281498 32495880
32281497 32495881
32281496 32495882
32281495 32495883
32281494 32495884
32281493 32495885
32281492 32495886
32281491 32495887
32281490 32495888
32281489 32495889
32281488 32495890
32281487 32495891
32281486 32495892
32281485 32495893
32281484 32495894
32281483 32495895
32281482 32495896
32281481 32495897
32281480 32495898
32281479 32495899
32281478 32495900
32281477 32495901
32281476 32495902
32281475 32495903
32281474 32495904
32281473 32495905
32281472 32495906
32281471 32495907
32281470 32495908
32281469 32495909
32281468 32495910
32281467 32495911
32281466 32495912
32281465 32495913
32281464 32495914
32281463 32495915
32281462 32495916
32281461 32495917
32281460 32495918
32281459 32495919
32281458 32495920
32281457 32495921
32281456 32495922
32281455 32495923
32281454 32495924
32281453 32495925
32281452 32495926
32281451 32495927
32281450 32495928
32281449 32495929
32281448 32495930
32281447 32495931
32281446 32495932
32281445 32495933
32281444 32495934
32281443 32495935
32281442 32495936
32281441 32495937
32281440 32495938
32281439 32495939
32281438 32495940
32281437 32495941
32281436 32495942
32281435 32495943
32281434 32495944
32281433 32495945
32281432 32495946
32281431 32495947
32281430 32495948
32281429 32495949
32281428 32495950
32281427 32495951
32281426 32495952
32281425 32495953
32281424 32495954
32281423 32495955
32281421 32495956
32281420 32495957
32281419 32495958
32281418 32495959
32281417 32495960
32281416 32495961
32281415 32495962
32281414 32495963
32281413 32495964
32281412 32495965
32281411 32495966
32281410 32495967
32281409 32495968
32281408 32495969
32281407 32495970
32281406 32495971
32281405 32495972
32281404 32495973
32281403 32495974
32281402 32495975
32281401 32495976
32281400 32495977
32281399 32495978
32281398 32495979
32281397 32495980
32281396 32495981
32281395 32495982
32281394 32495983
32281393 32495984
32281392 32495985
32281391 32495986
32281390 32495987
32281389 32495988
32281388 32495989
32281387 32495990
32281386 32495991
32281385 32495992
32281384 32495993
32281383 32495994
32281382 32495995
32281381 32495996
32281380 32495997
32281379 32495998
32281378 32495999
32281377 32496000
32281376 32496001
32281375 32496002
32281374 32496003
32281373 32496004
32281372 32496005
32281371 32496006
32281370 32496007
32281369 32496008
32281368 32496009
32281367 32496010
32281366 32496011
32281365 32496012
32281364 32496013
32281363 32496014
32281362 32496015
32281361 32496016
32281360 32496017
32281359 32496018
32281358 32496019
32281357 32496020
32281356 32496021
32281355 32496022
32281354 32496023
32281353 32496024
32281352 32496025
32281351 32496026
32281350 32496027
32281349 32496028
32281348 32496029
32281347 32496030
32281346 32496031
32281345 32496032
32281344 32496033
32281343 32496034
32281342 32496035
32281341 32496036
32281340 32496037
32281339 32496038
32281338 32496039
32281337 32496040
32281336 32496041
32281335 32496042
32281334 32496043
32281333 32496044
32281332 32496045
32281331 32496046
32281330 32496047
32281329 32496048
32281328 32496049
32281327 32496050
32281326 32496051
32281325 32496052
32281324 32496053
32281323 32496054
32281322 32496055
32281321 32496056
32281320 32496057
32281319 32496058
32281318 32496059
32281317 32496060
32281316 32496061
32281315 32496062
32281314 32496063
32281313 32496064
32281312 32496065
32281311 32496066
32281310 32496067
32281309 32496068
32281308 32496069
32281307 32496070
32281306 32496071
32281305 32496072
32281304 32496073
32281303 32496074
32281302 32496075
32281301 32496076
32281300 32496077
32281299 32496078
32281298 32496079
32281297 32496080
32281296 32496081
32281295 32496082
32281294 32496083
32281293 32496084
32281292 32496085
32281291 32496086
32281290 32496087
32281289 32496088
32281288 32496089
32281287 32496090
32281286 32496091
32281285 32496092
32281284 32496093
32281283 32496094
32281282 32496095
32281281 32496096
32281280 32496097
32281279 32496098
32281278 32496099
32281277 32496100
32281276 32496101
32281275 32496102
32281274 32496103
32281273 32496104
32281272 32496105
32281271 32496106
32281270 32496107
32281269 32496108
32281268 32496109
32281267 32496110
32281266 32496111
32281265 32496112
32281264 32496113
32281263 32496114
32281262 32496115
32281261 32496116
32281260 32496117
32281259 32496118
32281258 32496119
32281257 32496120
32281256 32496121
32281255 32496122
32281254 32496123
32281253 32496124
32281252 32496125
32281251 32496126
32281250 32496127
32281249 32496128
32281248 32496129
32281247 32496130
32281246 32496131
32281245 32496132
32281244 32496133
32281243 32496134
32281242 32496135
32281241 32496136
32281240 32496137
32281239 32496138
32281238 32496139
32281237 32496140
32281236 32496141
32281235 32496142
32281234 32496143
32281233 32496144
32281232 32496145
32281231 32496146
32281230 32496147
32281229 32496148
32281228 32496149
32281227 32496150
32281226 32496151
32281225 32496152
32281224 32496153
32281223 32496154
32281222 32496155
32281221 32496156
32281220 32496157
32281219 32496158
32281218 32496159
32281217 32496160
32281216 32496161
32281215 32496162
32281214 32496163
32281213 32496164
32281212 32496165
32281211 32496166
32281210 32496167
32281209 32496168
32281208 32496169
32281207 32496170
32281206 32496171
32281205 32496172
32281204 32496173
32281203 32496174
32281202 32496175
32281201 32496176
32281200 32496177
32281199 32496178
32281198 32496179
32281197 32496180
32281196 32496181
32281195 32496182
32281194 32496183
32281193 32496184
32281192 32496185
32281191 32496186
32281190 32496187
32281189 32496188
32281188 32496189
32281187 32496190
32281186 32496191
32281185 32496192
32281184 32496193
32281183 32496194
32281182 32496195
32281181 32496196
32281180 32496197
32281178 32496198
32281177 32496199
32281176 32496200
32281175 32496201
32281174 32496202
32281173 32496203
32281172 32496204
32281171 32496205
32281170 32496206
32281169 32496207
32281168 32496208
32281167 32496209
32281166 32496210
32281165 32496211
32281164 32496212
32281163 32496213
32281161 32496214
32281160 32496215
32281159 32496216
32281158 32496217
32281157 32496218
32281156 32496219
32281155 32496220
32281154 32496221
32281153 32496222
32281152 32496223
32281151 32496224
32281150 32496225
32281149 32496226
32281148 32496227
32281147 32496228
32281146 32496229
32281145 32496230
32281144 32496231
32281143 32496232
32281142 32496233
32281141 32496234
32281140 32496235
32281139 32496236
32281138 32496237
32281137 32496238
32281136 32496239
32281135 32496240
32281134 32496241
32281133 32496242
32281132 32496243
32281131 32496244
32281130 32496245
32281129 32496246
32281128 32496247
32281127 32496248
32281126 32496249
32281125 32496250
32281124 32496251
32281123 32496252
32281122 32496253
32281121 32496254
32281120 32496255
32281119 32496256
32281118 32496257
32281117 32496258
32281116 32496259
32281115 32496260
32281114 32496261
32281113 32496262
32281112 32496263
32281111 32496264
32281110 32496265
32281109 32496266
32281108 32496267
32281107 32496268
32281106 32496269
32281105 32496270
32281104 32496271
32281103 32496272
32281102 32496273
32281101 32496274
32281040 32496275
32281039 32496276
32281038 32496277
32281037 32496278
32281036 32496279
32281035 32496280
32281034 32496281
32281033 32496282
32281032 32496283
32281031 32496284
32281030 32496285
32281029 32496286
32281028 32496287
32281027 32496288
32281026 32496289
32281025 32496290
32281024 32496291
32281023 32496292
32281022 32496293
32281021 32496294
32281020 32496295
32281019 32496296
32281018 32496297
32281017 32496298
32281016 32496299
32281015 32496300
32281014 32496301
32281013 32496302
32281012 32496303
32281011 32496304
32281010 32496305
32281009 32496306
32281008 32496307
32281007 32496308
32281006 32496309
32281005 32496310
32281004 32496311
32281003 32496312
32281002 32496313
32281001 32496314
32281000 32496315
32280999 32496316
32280998 32496317
32280997 32496318
32280996 32496319
32280995 32496320
32280994 32496321
32280993 32496322
32280992 32496323
32280991 32496324
32280990 32496325
32280989 32496326
32280988 32496327
32280987 32496328
32280986 32496329
32280985 32496330
32280984 32496331
32280983 32496332
32280982 32496333
32280981 32496334
32280980 32496335
32280979 32496336
32280978 32496337
32280977 32496338
32280976 32496339
32280975 32496340
32280974 32496341
32280973 32496342
32280972 32496343
32280971 32496344
32280970 32496345
32280969 32496346
32280968 32496347
32280967 32496348
32280965 32496349
32280964 32496350
32280963 32496351
32280962 32496352
32280961 32496353
32280960 32496354
32280959 32496355
32280958 32496356
32280957 32496357
32280956 32496358
32280955 32496359
32280954 32496360
32280953 32496361
32280952 32496362
32280951 32496363
32280950 32496364
32280949 32496365
32280948 32496366
32280947 32496367
32280946 32496368
32280945 32496369
32280944 32496370
32280943 32496371
32280942 32496372
32280941 32496373
32280940 32496374
32280939 32496375
32280938 32496376
32280937 32496377
32280936 32496378
32280935 32496379
32280934 32496380
32280933 32496381
32280932 32496382
32280931 32496383
32280930 32496384
32280929 32496385
32280928 32496387
32280927 32496388
32280926 32496389
32280925 32496390
32280924 32496391
32280923 32496392
32280922 32496393
32280921 32496394
32280920 32496395
32280919 32496396
32280918 32496397
32280917 32496398
32280916 32496399
32280915 32496400
32280914 32496401
32280913 32496402
32280912 32496403
32280911 32496404
32280910 32496405
32280909 32496406
32280908 32496407
32280907 32496408
32280906 32496409
32280905 32496410
32280904 32496411
32280903 32496412
32280902 32496413
32280901 32496414
32280900 32496415
32280899 32496416
32280898 32496417
32280897 32496418
32280896 32496419
32280895 32496420
32280894 32496421
32280893 32496422
32280892 32496423
32280891 32496424
32280890 32496425
32280889 32496426
32280888 32496427
32280887 32496428
32280886 32496429
32280885 32496430
32280884 32496431
32280883 32496432
32280882 32496433
32280881 32496434
32280880 32496435
32280879 32496436
32280878 32496437
32280877 32496438
32280876 32496439
32280875 32496440
32280874 32496441
32280873 32496442
32280872 32496443
32280871 32496444
32280870 32496445
32280869 32496446
32280868 32496447
32280867 32496448
32280866 32496449
32280865 32496450
32280864 32496451
32280863 32496452
32280862 32496453
32280861 32496454
32280860 32496455
32280859 32496456
32280858 32496457
32280857 32496458
32280856 32496459
32280855 32496460
32280854 32496462
32280853 32496463
32280852 32496464
32280851 32496465
32280850 32496466
32280849 32496467
32280848 32496468
32280847 32496469
32280846 32496470
32280845 32496471
32280844 32496472
32280843 32496473
32280842 32496474
32280841 32496475
32280840 32496476
32280839 32496477
32280838 32496478
32280837 32496479
32280836 32496480
32280835 32496481
32280833 32496482
32280832 32496483
32280831 32496484
32280830 32496485
32280829 32496486
32280828 32496487
32280827 32496488
32280826 32496489
32280825 32496490
32280824 32496491
32280823 32496492
32280822 32496493
32280821 32496494
32280820 32496495
32280819 32496496
32280818 32496497
32280817 32496498
32280816 32496499
32280815 32496500
32280814 32496501
32280813 32496502
32280812 32496503
32280811 32496504
32280810 32496505
32280809 32496506
32280808 32496507
32280807 32496508
32280806 32496509
32280805 32496510
32280804 32496511
32280803 32496512
32280802 32496513
32280801 32496514
32280800 32496515
32280799 32496516
32280798 32496517
32280797 32496518
32280796 32496519
32280795 32496520
32280794 32496521
32280793 32496522
32280792 32496523
32280791 32496524
32280790 32496525
32280789 32496526
32280788 32496527
32280787 32496528
32280786 32496529
32280785 32496530
32280784 32496531
32280783 32496532
32280782 32496533
32280781 32496534
32280780 32496535
32280779 32496536
32280778 32496537
32280777 32496538
32280775 32496539
32280774 32496540
32280773 32496541
32280772 32496542
32280771 32496543
32280770 32496544
32280769 32496545
32280768 32496546
32280767 32496547
32280766 32496548
32280765 32496549
32280764 32496550
32280763 32496551
32280762 32496552
32280761 32496553
32280760 32496554
32280759 32496555
32280758 32496556
32280757 32496557
32280756 32496558
32280755 32496559
32280754 32496560
32280753 32496561
32280752 32496562
32280751 32496563
32280750 32496564
32280749 32496565
32280748 32496566
32280747 32496567
32280746 32496568
32280745 32496569
32280744 32496570
32280743 32496571
32280742 32496572
32280741 32496573
32280740 32496574
32280739 32496575
32280738 32496576
32280737 32496577
32280736 32496578
32280735 32496579
32280734 32496580
32280733 32496581
32280732 32496582
32280731 32496583
32280730 32496584
32280729 32496585
32280728 32496586
32280727 32496587
32280726 32496588
32280725 32496589
32280724 32496590
32280723 32496591
32280722 32496592
32280721 32496593
32280720 32496594
32280719 32496595
32280718 32496596
32280717 32496597
32280716 32496598
32280715 32496599
32280714 32496600
32280713 32496601
32280712 32496602
32280711 32496603
32280710 32496604
32280709 32496605
32280708 32496606
32280707 32496607
32280706 32496608
32280705 32496609
32280704 32496610
32280703 32496611
32280702 32496612
32280701 32496613
32280700 32496614
32280699 32496615
32280698 32496616
32280697 32496617
32280696 32496618
32280695 32496619
32280694 32496620
32280693 32496621
32280692 32496622
32280691 32496623
32280690 32496624
32280689 32496625
32280688 32496626
32280687 32496627
32280686 32496628
32280685 32496629
32280684 32496630
32280683 32496631
32280682 32496632
32280681 32496633
32280680 32496634
32280679 32496635
32280678 32496636
32280677 32496637
32280676 32496638
32280674 32496639
32280673 32496640
32280671 32496641
32280670 32496642
32280669 32496643
32280667 32496644
32280665 32496645
32280664 32496646
32280663 32496647
32280662 32496648
32280661 32496649
32280660 32496650
32280659 32496651
32280658 32496652
32280657 32496653
32280656 32496654
32280655 32496655
32280654 32496656
32280653 32496657
32280652 32496658
32280651 32496659
32280650 32496660
32280649 32496661
32280648 32496662
32280647 32496663
32280646 32496664
32280645 32496665
32280644 32496666
32280643 32496667
32280642 32496668
32280641 32496669
32280640 32496670
32280639 32496671
32280638 32496672
32280637 32496673
32280636 32496674
32280635 32496675
32280634 32496676
32280633 32496677
32280632 32496678
32280631 32496679
32280630 32496680
32280629 32496681
32280628 32496682
32280627 32496683
32280626 32496684
32280625 32496685
32280624 32496686
32280623 32496687
32280622 32496688
32280621 32496689
32280620 32496690
32280619 32496691
32280618 32496692
32280617 32496693
32280616 32496694
32280615 32496695
32280614 32496696
32280613 32496697
32280612 32496698
32280611 32496699
32280610 32496700
32280609 32496701
32280608 32496702
32280607 32496703
32280606 32496704
32280605 32496705
32280604 32496706
32280603 32496707
32280602 32496708
32280601 32496709
32280600 32496710
32280599 32496711
32280598 32496712
32280597 32496713
32280596 32496714
32280595 32496715
32280594 32496716
32280593 32496717
32280592 32496718
32280591 32496719
32280590 32496720
32280589 32496721
32280588 32496722
32280587 32496723
32280586 32496724
32280585 32496725
32280584 32496726
32280583 32496727
32280582 32496728
32280581 32496729
32280580 32496730
32280579 32496731
32280578 32496732
32280577 32496733
32280576 32496734
32280575 32496735
32280574 32496736
32280573 32496737
32280572 32496738
32280571 32496739
32280570 32496740
32280569 32496741
32280568 32496742
32280567 32496743
32280566 32496744
32280565 32496745
32280564 32496746
32280563 32496747
32280562 32496748
32280561 32496749
32280560 32496750
32280559 32496751
32280558 32496752
32280557 32496753
32280556 32496754
32280555 32496755
32280554 32496756
32280553 32496757
32280552 32496758
32280551 32496759
32280550 32496760
32280549 32496761
32280548 32496762
32280547 32496763
32280546 32496764
32280545 32496765
32280544 32496766
32280543 32496767
32280542 32496768
32280541 32496769
32280540 32496770
32280539 32496771
32280538 32496772
32280537 32496773
32280536 32496774
32280535 32496775
32280534 32496776
32280533 32496777
32280532 32496778
32280531 32496779
32280530 32496780
32280529 32496781
32280528 32496782
32280527 32496783
32280526 32496784
32280525 32496785
32280524 32496786
32280523 32496787
32280522 32496788
32280521 32496789
32280520 32496790
32280519 32496791
32280518 32496792
32280517 32496793
32280516 32496794
32280515 32496795
32280514 32496796
32280513 32496797
32280512 32496798
32280511 32496799
32280510 32496800
32280509 32496801
32280508 32496802
32280507 32496803
32280506 32496804
32280505 32496805
32280504 32496806
32280503 32496807
32280502 32496808
32280501 32496809
32280500 32496810
32280499 32496811
32280498 32496812
32280496 32496813
32280495 32496814
32280494 32496815
32280493 32496816
32280492 32496817
32280491 32496818
32280490 32496819
32280489 32496820
32280488 32496821
32280487 32496822
32280486 32496823
32280485 32496824
32280484 32496825
32280483 32496826
32280482 32496827
32280481 32496828
32280480 32496829
32280479 32496830
32280478 32496831
32280477 32496832
32280476 32496833
32280475 32496834
32280474 32496835
32280473 32496836
32280472 32496837
32280471 32496838
32280470 32496839
32280469 32496840
32280468 32496841
32280467 32496842
32280466 32496843
32280464 32496844
32280463 32496845
32280462 32496846
32280461 32496847
32280460 32496848
32280459 32496849
32280458 32496850
32280457 32496851
32280456 32496852
32280455 32496853
32280454 32496854
32280453 32496855
32280452 32496856
32280451 32496857
32280450 32496858
32280449 32496859
32280448 32496860
32280447 32496861
32280446 32496862
32280445 32496863
32280444 32496864
32280443 32496865
32280442 32496866
32280441 32496867
32280440 32496868
32280439 32496869
32280438 32496870
32280437 32496871
32280436 32496872
32280435 32496873
32280434 32496874
32280433 32496875
32280432 32496876
32280431 32496877
32280430 32496878
32280429 32496879
32280428 32496880
32280427 32496881
32280426 32496882
32280425 32496883
32280424 32496884
32280423 32496885
32280422 32496886
32280420 32496887
32280419 32496888
32280418 32496889
32280417 32496890
32280416 32496891
32280415 32496892
32280414 32496893
32280413 32496894
32280412 32496895
32280411 32496896
32280410 32496897
32280409 32496898
32280408 32496899
32280407 32496900
32280406 32496901
32280405 32496902
32280404 32496903
32280403 32496904
32280402 32496905
32280401 32496906
32280400 32496907
32280399 32496908
32280398 32496909
32280397 32496910
32280396 32496911
32280395 32496912
32280394 32496913
32280393 32496914
32280392 32496915
32280391 32496916
32280390 32496917
32280389 32496918
32280388 32496919
32280387 32496920
32280386 32496921
32280385 32496922
32280384 32496923
32280383 32496924
32280382 32496925
32280381 32496926
32280380 32496927
32280379 32496928
32280378 32496929
32280377 32496930
32280376 32496931
32280375 32496932
32280374 32496933
32280373 32496934
32280372 32496935
32280371 32496936
32280370 32496937
32280369 32496938
32280368 32496939
32280367 32496940
32280366 32496941
32280365 32496942
32280364 32496943
32280363 32496944
32280362 32496945
32280361 32496946
32280360 32496947
32280359 32496948
32280358 32496949
32280357 32496950
32280356 32496951
32280355 32496952
32280354 32496953
32280353 32496955
32280352 32496956
32280351 32496957
32280350 32496958
32280349 32496959
32280348 32496960
32280347 32496961
32280346 32496962
32280345 32496963
32280344 32496964
32280343 32496965
32280342 32496966
32280341 32496967
32280340 32496968
32280339 32496969
32280338 32496970
32280337 32496971
32280336 32496972
32280335 32496973
32280334 32496974
32280333 32496975
32280332 32496976
32280331 32496977
32280330 32496978
32280329 32496979
32280328 32496980
32280327 32496981
32280326 32496982
32280325 32496983
32280324 32496984
32280323 32496985
32280322 32496986
32280321 32496987
32280320 32496988
32280319 32496989
32280318 32496990
32280317 32496991
32280316 32496992
32280315 32496993
32280314 32496994
32280313 32496995
32280312 32496996
32280311 32496997
32280310 32496998
32280309 32496999
32280308 32497000
32280307 32497001
32280306 32497002
32280305 32497003
32280304 32497004
32280303 32497005
32280302 32497006
32280301 32497007
32280300 32497008
32280299 32497009
32280298 32497010
32280297 32497011
32280296 32497012
32280295 32497013
32280294 32497014
32280293 32497015
32280292 32497016
32280291 32497017
32280290 32497018
32280289 32497019
32280288 32497020
32280287 32497021
32280286 32497022
32280285 32497023
32280284 32497024
32280283 32497025
32280282 32497026
32280281 32497027
32280280 32497028
32280279 32497029
32280278 32497030
32280277 32497031
32280276 32497032
32280275 32497033
32280274 32497034
32280273 32497035
32280272 32497036
32280271 32497037
32280270 32497038
32280269 32497039
32280268 32497040
32280267 32497041
32280266 32497042
32280265 32497043
32280264 32497044
32280263 32497045
32280262 32497046
32280261 32497047
32280260 32497048
32280259 32497049
32280258 32497050
32280257 32497051
32280256 32497052
32280255 32497053
32280254 32497054
32280253 32497055
32280252 32497056
32280251 32497057
32280250 32497058
32280249 32497059
32280248 32497060
32280247 32497061
32280246 32497062
32280245 32497063
32280244 32497064
32280243 32497065
32280242 32497066
32280241 32497067
32280240 32497068
32280239 32497069
32280238 32497070
32280237 32497071
32280236 32497072
32280235 32497073
32280234 32497074
32280233 32497075
32280232 32497076
32280231 32497077
32280230 32497078
32280229 32497079
32280228 32497080
32280227 32497081
32280226 32497082
32280225 32497083
32280224 32497084
32280223 32497085
32280222 32497086
32280221 32497087
32280220 32497088
32280219 32497089
32280218 32497090
32280217 32497091
32280216 32497092
32280214 32497093
32280213 32497094
32280212 32497095
32280210 32497096
32280209 32497097
32280208 32497098
32280207 32497099
32280206 32497100
32280205 32497101
32280204 32497102
32280203 32497103
32280202 32497104
32280201 32497105
32280200 32497106
32280199 32497107
32280198 32497108
32280197 32497109
32280196 32497110
32280195 32497111
32280194 32497112
32280193 32497113
32280192 32497114
32280191 32497115
32280190 32497116
32280189 32497117
32280188 32497118
32280187 32497119
32280186 32497120
32280185 32497121
32280184 32497122
32280183 32497123
32280182 32497124
32280181 32497125
32280180 32497126
32280179 32497127
32280178 32497128
32280177 32497129
32280176 32497130
32280175 32497131
32280174 32497132
32280173 32497133
32280172 32497134
32280170 32497135
32280169 32497136
32280168 32497137
32280167 32497138
32280166 32497139
32280165 32497140
32280164 32497141
32280163 32497142
32280162 32497143
32280161 32497144
32280160 32497145
32280159 32497146
32280158 32497147
32280157 32497148
32280156 32497149
32280155 32497150
32280154 32497151
32280153 32497152
32280152 32497153
32280151 32497154
32280150 32497155
32280149 32497156
32280148 32497157
32280147 32497158
32280146 32497159
32280145 32497160
32280144 32497161
32280142 32497162
32280141 32497163
32280140 32497164
32280139 32497165
32280138 32497166
32280137 32497167
32280136 32497168
32280135 32497169
32280134 32497170
32280133 32497171
32280132 32497172
32280131 32497173
32280130 32497174
32280129 32497175
32280128 32497176
32280127 32497177
32280126 32497178
32280125 32497179
32280124 32497180
32280123 32497181
32280122 32497182
32280121 32497183
32280120 32497184
32280119 32497185
32280118 32497186
32280117 32497187
32280116 32497188
32280115 32497189
32280114 32497190
32280113 32497191
32280112 32497192
32280111 32497193
32280110 32497194
32280109 32497195
32280108 32497196
32280107 32497197
32280106 32497198
32280105 32497199
32280104 32497200
32280103 32497201
32280102 32497202
32280101 32497203
32280100 32497204
32280099 32497205
32280098 32497206
32280097 32497207
32280096 32497208
32280094 32497209
32280093 32497210
32280092 32497211
32280091 32497212
32280090 32497213
32280089 32497214
32280088 32497215
32280087 32497216
32280086 32497217
32280085 32497218
32280084 32497219
32280083 32497220
32280082 32497221
32280081 32497222
32280080 32497223
32280079 32497224
32280078 32497225
32280077 32497226
32280076 32497227
32280075 32497228
32280074 32497229
32280073 32497230
32280072 32497231
32280071 32497232
32280070 32497233
32280069 32497234
32280068 32497235
32280067 32497236
32280066 32497237
32280065 32497238
32280064 32497239
32280063 32497240
32280062 32497241
32280061 32497242
32280060 32497243
32280059 32497244
32280058 32497245
32280057 32497246
32280056 32497247
32280055 32497248
32280054 32497249
32280053 32497250
32280052 32497251
32280051 32497252
32280050 32497253
32280049 32497254
32280047 32497255
32280046 32497256
32280045 32497257
32280044 32497258
32280043 32497259
32280042 32497260
32280041 32497261
32280040 32497262
32280039 32497263
32280038 32497264
32280037 32497265
32280036 32497266
32280035 32497267
32280034 32497268
32280033 32497269
32280032 32497270
32280031 32497271
32280030 32497272
32280029 32497273
32280028 32497274
32280027 32497275
32280026 32497276
32280025 32497277
32280024 32497278
32280023 32497279
32280022 32497280
32280021 32497281
32280020 32497282
32280019 32497283
32280018 32497284
32280017 32497285
32280016 32497286
32280015 32497287
32280014 32497288
32280013 32497289
32280012 32497290
32280011 32497291
32280010 32497292
32280009 32497293
32280008 32497294
32280007 32497295
32280006 32497296
32280005 32497297
32280004 32497298
32280003 32497299
32280002 32497300
32280001 32497301
32280000 32497302
32279999 32497303
32279998 32497304
32279997 32497305
32279996 32497306
32279995 32497307
32279994 32497308
32279993 32497309
32279992 32497310
32279991 32497311
32279990 32497312
32279989 32497313
32279988 32497314
32279987 32497315
32279986 32497316
32279985 32497317
32279984 32497318
32279983 32497319
32279982 32497320
32279981 32497321
32279980 32497322
32279979 32497323
32279978 32497324
32279977 32497325
32279976 32497326
32279975 32497327
32279974 32497328
32279972 32497329
32279971 32497330
32279970 32497331
32279969 32497332
32279968 32497333
32279967 32497334
32279966 32497335
32279965 32497336
32279964 32497337
32279963 32497338
32279962 32497339
32279961 32497340
32279960 32497341
32279959 32497342
32279958 32497343
32279957 32497344
32279956 32497345
32279955 32497346
32279954 32497347
32279953 32497348
32279952 32497349
32279951 32497350
32279950 32497351
32279949 32497352
32279948 32497353
32279947 32497354
32279946 32497355
32279945 32497356
32279944 32497357
32279943 32497358
32279942 32497359
32279941 32497360
32279940 32497361
32279939 32497362
32279938 32497363
32279937 32497364
32279936 32497365
32279935 32497366
32279934 32497367
32279933 32497368
32279932 32497369
32279931 32497370
32279930 32497371
32279929 32497372
32279928 32497373
32279927 32497374
32279926 32497375
32279925 32497376
32279924 32497377
32279923 32497378
32279922 32497379
32279921 32497380
32279920 32497381
32279919 32497382
32279918 32497383
32279917 32497384
32279916 32497385
32279915 32497386
32279914 32497387
32279913 32497388
32279912 32497389
32279911 32497390
32279910 32497391
32279909 32497392
32279908 32497393
32279907 32497394
32279906 32497395
32279905 32497396
32279904 32497397
32279903 32497398
32279902 32497399
32279901 32497400
32279900 32497401
32279899 32497402
32279898 32497403
32279897 32497404
32279896 32497405
32279895 32497406
32279894 32497407
32279893 32497408
32279892 32497409
32279891 32497410
32279890 32497411
32279889 32497412
32279888 32497413
32279887 32497414
32279886 32497415
32279885 32497416
32279884 32497417
32279883 32497418
32279882 32497419
32279881 32497420
32279880 32497421
32279879 32497422
32279878 32497423
32279877 32497424
32279876 32497425
32279875 32497426
32279874 32497427
32279873 32497428
32279872 32497429
32279871 32497430
32279870 32497431
32279869 32497432
32279868 32497888
32279867 32497889
32279866 32497890
32279865 32497891
32279864 32497892
32279863 32497893
32279862 32497894
32279861 32497895
32279860 32497896
32279859 32497897
32279858 32497898
32279857 32497899
32279856 32497900
32279855 32497901
32279854 32497902
32279853 32497903
32279852 32497904
32279851 32497905
32279850 32497906
32279849 32497907
32279848 32497908
32279847 32497909
32279846 32497910
32279844 32497911
32279843 32497912
32279842 32497913
32279841 32497914
32279840 32497915
32279839 32497916
32279838 32497917
32279837 32497918
32279836 32497919
32279835 32497921
32279834 32497922
32279833 32497923
32279832 32497924
32279831 32497925
32279830 32497926
32279829 32497927
32279828 32497928
32279827 32497929
32279826 32497930
32279825 32497931
32279824 32497932
32279823 32497933
32279822 32497934
32279821 32497935
32279819 32497936
32279818 32497937
32279817 32497938
32279816 32497939
32279815 32497940
32279814 32497941
32279813 32497942
32279812 32497943
32279811 32497944
32279809 32497945
32279808 32497946
32279807 32497947
32279806 32497948
32279805 32497949
32279804 32497950
32279803 32497951
32279802 32497952
32279801 32497953
32279800 32497954
32279799 32497955
32279798 32497956
32279797 32497957
32279796 32497958
32279795 32497959
32279794 32497960
32279793 32497961
32279792 32497962
32279791 32497963
32279790 32497964
32279789 32497965
32279788 32497966
32279787 32497967
32279786 32497968
32279785 32497969
32279784 32497970
32279782 32497971
32279781 32497972
32279780 32497973
32279779 32497974
32279778 32497975
32279777 32497976
32279776 32497977
32279775 32497978
32279774 32497979
32279773 32497980
32279772 32497981
32279771 32497982
32279770 32497983
32279769 32497984
32279768 32497985
32279767 32497986
32279766 32497987
32279765 32497988
32279764 32497989
32279763 32497990
32279762 32497991
32279761 32497992
32279760 32497993
32279759 32497994
32279758 32497995
32279757 32497996
32279756 32497997
32279755 32497998
32279754 32497999
32279753 32498000
32279752 32498001
32279751 32498002
32279750 32498003
32279749 32498004
32279748 32498005
32279747 32498006
32279746 32498007
32279745 32498008
32279744 32498009
32279743 32498010
32279742 32498011
32279741 32498012
32279740 32498013
32279739 32498014
32279738 32498015
32279737 32498017
32279736 32498018
32279735 32498019
32279734 32498020
32279733 32498021
32279732 32498022
32279731 32498023
32279730 32498024
32279729 32498025
32279728 32498026
32279727 32498027
32279726 32498028
32279725 32498029
32279724 32498030
32279723 32498031
32279722 32498032
32279721 32498033
32279720 32498034
32279719 32498035
32279718 32498036
32279717 32498037
32279716 32498038
32279715 32498039
32279714 32498040
32279713 32498041
32279712 32498042
32279711 32498043
32279710 32498044
32279709 32498045
32279708 32498046
32279707 32498047
32279706 32498048
32279705 32498049
32279704 32498050
32279703 32498051
32279702 32498052
32279701 32498053
32279700 32498054
32279699 32498055
32279698 32498056
32279697 32498057
32279696 32498058
32279695 32498059
32279694 32498060
32279693 32498061
32279692 32498062
32279691 32498063
32279690 32498064
32279689 32498065
32279688 32498066
32279687 32498067
32279686 32498068
32279685 32498069
32279684 32498070
32279683 32498071
32279682 32498072
32279680 32498073
32279679 32498074
32279678 32498075
32279677 32498076
32279676 32498077
32279675 32498078
32279674 32498079
32279673 32498080
32279672 32498081
32279671 32498082
32279670 32498083
32279669 32498084
32279668 32498085
32279667 32498086
32279666 32498087
32279665 32498088
32279664 32498089
32279663 32498090
32279662 32498091
32279661 32498092
32279660 32498093
32279659 32498094
32279658 32498095
32279657 32498096
32279656 32498097
32279655 32498098
32279654 32498099
32279653 32498100
32279652 32498101
32279651 32498102
32279650 32498103
32279649 32498104
32279648 32498105
32279647 32498106
32279646 32498107
32279645 32498108
32279644 32498109
32279643 32498110
32279642 32498111
32279641 32498112
32279640 32498113
32279639 32498114
32279638 32498115
32279637 32498116
32279636 32498117
32279635 32498118
32279634 32498119
32279633 32498120
32279632 32498121
32279631 32498122
32279630 32498123
32279629 32498124
32279628 32498125
32279627 32498126
32279626 32498127
32279625 32498128
32279624 32498129
32279623 32498130
32279622 32498131
32279621 32498132
32279620 32498133
32279619 32498134
32279618 32498135
32279617 32498136
32279616 32498137
32279615 32498138
32279614 32498139
32279613 32498140
32279612 32498141
32279611 32498142
32279610 32498143
32279609 32498144
32279608 32498145
32279607 32498146
32279606 32498147
32279605 32498148
32279604 32498149
32279603 32498150
32279602 32498151
32279601 32498152
32279599 32498153
32279598 32498154
32279597 32498155
32279596 32498156
32279595 32498157
32279594 32498158
32279593 32498159
32279592 32498160
32279591 32498161
32279590 32498162
32279589 32498163
32279588 32498164
32279587 32498165
32279586 32498166
32279585 32498167
32279584 32498168
32279583 32498169
32279582 32498170
32279581 32498171
32279580 32498172
32279579 32498173
32279578 32498174
32279577 32498175
32279576 32498176
32279575 32498177
32279574 32498178
32279573 32498179
32279572 32498180
32279571 32498181
32279570 32498182
32279569 32498183
32279568 32498184
32279567 32498185
32279566 32498186
32279565 32498187
32279563 32498188
32279562 32498189
32279561 32498190
32279560 32498191
32279559 32498192
32279558 32498193
32279557 32498194
32279556 32498195
32279555 32498196
32279554 32498197
32279553 32498198
32279552 32498199
32279551 32498200
32279550 32498201
32279549 32498202
32279548 32498203
32279547 32498204
32279546 32498205
32279545 32498206
32279544 32498207
32279543 32498208
32279542 32498209
32279541 32498210
32279540 32498211
32279539 32498212
32279538 32498213
32279537 32498214
32279536 32498215
32279535 32498216
32279534 32498217
32279533 32498218
32279532 32498219
32279531 32498220
32279530 32498221
32279529 32498222
32279528 32498223
32279527 32498224
32279526 32498225
32279525 32498226
32279524 32498227
32279523 32498228
32279522 32498229
32279521 32498230
32279520 32498231
32279519 32498232
32279518 32498233
32279517 32498234
32279516 32498235
32279515 32498236
32279514 32498237
32279513 32498238
32279512 32498239
32279511 32498240
32279510 32498241
32279509 32498242
32279508 32498243
32279507 32498244
32279506 32498245
32279505 32498246
32279504 32498247
32279503 32498248
32279502 32498249
32279501 32498250
32279500 32498251
32279499 32498252
32279498 32498253
32279497 32498254
32279496 32498255
32279495 32498256
32279494 32498257
32279493 32498258
32279492 32498259
32279491 32498260
32279490 32498261
32279489 32498262
32279488 32498263
32279487 32498264
32279486 32498265
32279485 32498266
32279484 32498267
32279483 32498268
32279482 32498269
32279481 32498270
32279480 32498271
32279479 32498272
32279478 32498273
32279477 32498274
32279476 32498275
32279475 32498276
32279474 32498277
32279473 32498278
32279472 32498279
32279471 32498280
32279470 32498281
32279469 32498282
32279468 32498283
32279467 32498284
32279466 32498285
32279465 32498286
32279464 32498287
32279462 32498288
32279461 32498289
32279460 32498290
32279459 32498291
32279458 32498292
32279457 32498293
32279456 32498294
32279455 32498295
32279454 32498296
32279453 32498297
32279452 32498298
32279451 32498299
32279450 32498300
32279449 32498301
32279448 32498302
32279447 32498303
32279446 32498304
32279445 32498305
32279444 32498306
32279443 32498307
32279442 32498308
32279441 32498309
32279440 32498310
32279439 32498311
32279438 32498312
32279437 32498313
32279436 32498314
32279435 32498315
32279434 32498316
32279433 32498317
32279432 32498318
32279431 32498319
32279430 32498320
32279429 32498321
32279428 32498322
32279427 32498323
32279426 32498324
32279425 32498325
32279424 32498326
32279423 32498327
32279422 32498328
32279421 32498329
32279420 32498330
32279419 32498331
32279418 32498332
32279417 32498333
32279416 32498334
32279415 32498335
32279414 32498336
32279413 32498337
32279412 32498338
32279411 32498339
32279410 32498340
32279409 32498341
32279408 32498342
32279407 32498343
32279406 32498344
32279405 32498345
32279404 32498346
32279403 32498347
32279402 32498348
32279401 32498349
32279400 32498350
32279399 32498351
32279398 32498352
32279397 32498353
32279396 32498354
32279395 32498355
32279394 32498356
32279393 32498357
32279392 32498358
32279391 32498359
32279390 32498360
32279389 32498361
32279388 32498362
32279387 32498363
32279386 32498364
32279385 32498365
32279384 32498366
32279383 32498367
32279382 32498368
32279381 32498369
32279380 32498370
32279379 32498371
32279378 32498372
32279377 32498373
32279376 32498374
32279375 32498375
32279374 32498376
32279373 32498377
32279372 32498378
32279371 32498379
32279370 32498380
32279369 32498381
32279368 32498382
32279367 32498383
32279366 32498384
32279365 32498385
32279364 32498386
32279363 32498387
32279362 32498388
32279361 32498389
32279360 32498390
32279359 32498391
32279358 32498392
32279357 32498393
32279356 32498394
32279355 32498395
32279354 32498396
32279353 32498397
32279352 32498398
32279351 32498399
32279350 32498400
32279349 32498401
32279348 32498402
32279347 32498403
32279346 32498404
32279345 32498405
32279344 32498406
32279343 32498407
32279342 32498408
32279341 32498409
32279340 32498410
32279339 32498411
32279338 32498412
32279337 32498413
32279336 32498414
32279335 32498415
32279334 32498416
32279333 32498417
32279332 32498418
32279331 32498419
32279330 32498420
32279328 32498421
32279327 32498422
32279326 32498423
32279325 32498424
32279324 32498425
32279323 32498426
32279322 32498427
32279321 32498428
32279320 32498429
32279319 32498430
32279318 32498431
32279317 32498432
32279316 32498433
32279315 32498434
32279314 32498435
32279313 32498436
32279312 32498437
32279311 32498438
32279310 32498439
32279309 32498440
32279308 32498441
32279307 32498442
32279306 32498443
32279305 32498444
32279304 32498445
32279303 32498446
32279302 32498447
32279301 32498448
32279300 32498449
32279299 32498450
32279298 32498451
32279296 32498452
32279295 32498453
32279294 32498454
32279293 32498455
32279292 32498456
32279291 32498457
32279290 32498458
32279289 32498459
32279288 32498460
32279287 32498461
32279286 32498462
32279285 32498463
32279284 32498464
32279283 32498465
32279282 32498466
32279281 32498467
32279280 32498468
32279279 32498469
32279278 32498470
32279277 32498471
32279276 32498472
32279275 32498473
32279274 32498474
32279273 32498475
32279272 32498476
32279271 32498477
32279270 32498478
32279269 32498479
32279268 32498480
32279267 32498481
32279266 32498482
32279265 32498483
32279264 32498484
32279263 32498485
32279262 32498486
32279261 32498487
32279260 32498488
32279259 32498489
32279258 32498490
32279257 32498491
32279256 32498492
32279255 32498493
32279254 32498494
32279253 32498495
32279252 32498496
32279251 32498497
32279250 32498498
32279249 32498499
32279248 32498500
32279247 32498501
32279246 32498502
32279245 32498503
32279244 32498504
32279243 32498505
32279242 32498506
32279241 32498507
32279239 32498508
32279238 32498509
32279237 32498510
32279236 32498511
32279235 32498512
32279234 32498513
32279233 32498514
32279232 32498515
32279231 32498516
32279230 32498517
32279229 32498518
32279228 32498519
32279226 32498520
32279225 32498521
32279224 32498522
32279223 32498523
32279222 32498524
32279221 32498525
32279220 32498526
32279219 32498527
32279218 32498528
32279217 32498529
32279216 32498530
32279214 32498531
32279213 32498532
32279212 32498533
32279211 32498534
32279209 32498535
32279208 32498536
32279207 32498537
32279206 32498538
32279205 32498539
32279204 32498540
32279203 32498541
32279202 32498542
32279201 32498543
32279200 32498544
32279199 32498545
32279198 32498546
32279196 32498547
32279195 32498548
32279194 32498549
32279193 32498550
32279192 32498551
32279191 32498552
32279190 32498553
32279189 32498554
32279188 32498555
32279187 32498556
32279186 32498557
32279185 32498558
32279184 32498559
32279183 32498560
32279182 32498561
32279181 32498562
32279180 32498563
32279179 32498564
32279178 32498565
32279177 32498566
32279176 32498567
32279175 32498568
32279174 32498569
32279173 32498570
32279172 32498571
32279171 32498572
32279170 32498573
32279169 32498574
32279168 32498575
32279167 32498576
32279166 32498577
32279165 32498578
32279164 32498579
32279163 32498580
32279162 32498581
32279161 32498582
32279160 32498583
32279159 32498584
32279158 32498585
32279157 32498586
32279156 32498587
32279155 32498588
32279154 32498589
32279153 32498590
32279152 32498591
32279151 32498592
32279150 32498593
32279149 32498594
32279148 32498595
32279147 32498596
32279146 32498597
32279145 32498598
32279144 32498599
32279143 32498600
32279142 32498601
32279140 32498602
32279139 32498603
32279138 32498604
32279137 32498605
32279136 32498606
32279134 32498607
32279133 32498608
32279132 32498609
32279131 32498610
32279130 32498611
32279129 32498612
32279127 32498613
32279126 32498614
32279125 32498615
32279124 32498616
32279123 32498617
32279122 32498618
32279121 32498619
32279120 32498620
32279119 32498621
32279118 32498622
32279117 32498623
32279116 32498624
32279115 32498625
32279114 32498626
32279113 32498627
32279112 32498628
32279111 32498629
32279110 32498630
32279109 32498631
32279108 32498632
32279107 32498633
32279106 32498634
32279105 32498635
32279104 32498636
32279103 32498637
32279102 32498638
32279101 32498639
32279100 32498640
32279099 32498641
32279098 32498642
32279097 32498643
32279096 32498644
32279095 32498645
32279094 32498646
32279093 32498647
32279092 32498648
32279091 32498649
32279090 32498650
32279089 32498651
32279088 32498652
32279087 32498653
32279086 32498654
32279085 32498655
32279084 32498656
32279083 32498657
32279082 32498658
32279081 32498659
32279080 32498660
32279079 32498661
32279078 32498662
32279077 32498663
32279076 32498664
32279075 32498665
32279074 32498666
32279073 32498667
32279072 32498668
32279071 32498669
32279070 32498670
32279069 32498671
32279068 32498672
32279067 32498673
32279066 32498674
32279065 32498675
32279064 32498676
32279063 32498677
32279062 32498678
32279061 32498679
32279060 32498680
32279059 32498681
32279058 32498682
32279057 32498683
32279056 32498684
32279055 32498685
32279054 32498686
32279053 32498687
32279052 32498688
32279051 32498689
32279050 32498690
32279049 32498691
32279048 32498692
32279047 32498693
32279046 32498694
32279045 32498695
32279044 32498696
32279043 32498697
32279042 32498699
32279041 32498700
32279040 32498701
32279039 32498702
32279038 32498703
32279037 32498704
32279036 32498705
32279035 32498706
32279034 32498707
32279033 32498708
32279032 32498709
32279031 32498710
32279030 32498711
32279029 32498712
32279028 32498713
32279027 32498714
32279026 32498715
32279025 32498716
32279024 32498717
32279023 32498718
32279022 32498719
32279020 32498720
32279019 32498721
32279018 32498722
32279017 32498723
32279016 32498724
32279015 32498725
32279014 32498726
32279013 32498727
32279012 32498728
32279011 32498729
32279010 32498730
32279009 32498732
32279008 32498733
32279007 32498734
32279006 32498735
32279005 32498736
32279004 32498737
32279003 32498738
32279002 32498739
32279001 32498740
32279000 32498741
32278999 32498742
32278998 32498743
32278997 32498744
32278996 32498745
32278995 32498746
32278994 32498747
32278993 32498748
32278992 32498749
32278991 32498750
32278990 32498751
32278989 32498752
32278988 32498753
32278987 32498754
32278986 32498755
32278985 32498756
32278984 32498757
32278983 32498758
32278982 32498759
32278981 32498760
32278980 32498761
32278979 32498762
32278977 32498763
32278976 32498764
32278975 32498765
32278974 32498766
32278973 32498767
32278972 32498768
32278971 32498769
32278970 32498770
32278969 32498771
32278968 32498772
32278966 32498773
32278965 32498774
32278964 32498775
32278963 32498776
32278962 32498777
32278961 32498778
32278960 32498779
32278959 32498780
32278958 32498781
32278957 32498782
32278956 32498783
32278955 32498784
32278954 32498785
32278953 32498786
32278952 32498787
32278951 32498788
32278950 32498789
32278949 32498790
32278948 32498791
32278947 32498792
32278946 32498793
32278945 32498794
32278944 32498795
32278943 32498796
32278942 32498797
32278941 32498798
32278940 32498799
32278939 32498800
32278938 32498801
32278937 32498802
32278936 32498803
32278935 32498804
32278934 32498805
32278933 32498806
32278932 32498807
32278931 32498808
32278930 32498809
32278929 32498810
32278928 32498811
32278927 32498812
32278926 32498813
32278925 32498814
32278924 32498815
32278923 32498816
32278922 32498817
32278921 32498818
32278920 32498819
32278919 32498820
32278918 32498821
32278917 32498823
32278916 32498824
32278915 32498825
32278914 32498826
32278913 32498827
32278912 32498828
32278911 32498829
32278910 32498830
32278909 32498831
32278908 32498832
32278907 32498833
32278906 32498834
32278905 32498835
32278904 32498836
32278903 32498837
32278902 32498838
32278901 32498839
32278900 32498840
32278899 32498841
32278898 32498842
32278897 32498843
32278896 32498844
32278895 32498845
32278894 32498846
32278893 32498847
32278892 32498848
32278891 32498849
32278890 32498850
32278889 32498851
32278888 32498852
32278887 32498853
32278886 32498854
32278885 32498855
32278884 32498856
32278883 32498857
32278882 32498858
32278881 32498859
32278880 32498860
32278878 32498861
32278877 32498862
32278876 32498863
32278875 32498864
32278874 32498866
32278873 32498867
32278872 32498868
32278871 32498869
32278870 32498870
32278869 32498871
32278868 32498872
32278867 32498873
32278866 32498874
32278865 32498875
32278864 32498876
32278863 32498877
32278862 32498878
32278861 32498879
32278860 32498880
32278859 32498881
32278858 32498882
32278857 32498883
32278856 32498884
32278855 32498885
32278854 32498886
32278853 32498887
32278852 32498888
32278850 32498889
32278849 32498890
32278848 32498891
32278847 32498892
32278846 32498893
32278845 32498894
32278844 32498895
32278843 32498896
32278842 32498897
32278841 32498898
32278840 32498899
32278839 32498900
32278838 32498901
32278837 32498902
32278836 32498903
32278835 32498904
32278834 32498905
32278833 32498906
32278832 32498907
32278831 32498908
32278830 32498909
32278829 32498910
32278828 32498911
32278827 32498912
32278826 32498913
32278825 32498914
32278824 32498915
32278823 32498916
32278822 32498917
32278821 32498918
32278820 32498919
32278819 32498921
32278818 32498922
32278817 32498923
32278816 32498924
32278815 32498925
32278814 32498926
32278813 32498927
32278812 32498928
32278811 32498929
32278810 32498930
32278809 32498931
32278808 32498932
32278807 32498933
32278806 32498934
32278805 32498935
32278804 32498936
32278803 32498937
32278802 32498938
32278801 32498939
32278800 32498940
32278799 32498941
32278798 32498942
32278797 32498943
32278796 32498944
32278795 32498945
32278794 32498946
32278793 32498947
32278792 32498948
32278791 32498949
32278790 32498950
32278789 32498951
32278788 32498952
32278787 32498953
32278785 32498954
32278783 32498955
32278782 32498956
32278781 32498957
32278780 32498958
32278779 32498959
32278778 32498960
32278777 32498961
32278776 32498962
32278775 32498963
32278774 32498964
32278773 32498965
32278772 32498966
32278771 32498967
32278770 32498968
32278769 32498969
32278768 32498970
32278767 32498971
32278766 32498972
32278765 32498973
32278764 32498974
32278763 32498975
32278762 32498976
32278761 32498977
32278760 32498978
32278759 32498979
32278758 32498980
32278757 32498981
32278756 32498982
32278755 32498983
32278754 32498984
32278753 32498985
32278752 32498986
32278751 32498987
32278750 32498988
32278749 32498989
32278748 32498990
32278747 32498991
32278746 32498992
32278745 32498993
32278744 32498994
32278743 32498995
32278742 32498996
32278741 32498997
32278740 32498998
32278739 32498999
32278738 32499000
32278737 32499001
32278736 32499002
32278735 32499003
32278734 32499004
32278733 32499005
32278732 32499006
32278731 32499007
32278730 32499008
32278729 32499009
32278728 32499010
32278727 32499011
32278726 32499012
32278725 32499013
32278724 32499014
32278723 32499015
32278722 32499016
32278721 32499017
32278720 32499018
32278719 32499019
32278718 32499020
32278717 32499021
32278716 32499022
32278715 32499023
32278714 32499024
32278713 32499025
32278712 32499026
32278711 32499027
32278710 32499028
32278709 32499029
32278708 32499030
32278707 32499031
32278706 32499032
32278705 32499033
32278704 32499034
32278703 32499035
32278702 32499036
32278701 32499037
32278700 32499038
32278699 32499039
32278698 32499040
32278697 32499041
32278696 32499042
32278695 32499043
32278694 32499044
32278693 32499045
32278692 32499046
32278691 32499047
32278690 32499048
32278689 32499049
32278688 32499050
32278687 32499051
32278686 32499052
32278685 32499053
32278684 32499054
32278683 32499055
32278682 32499056
32278681 32499057
32278680 32499058
32278679 32499059
32278678 32499060
32278677 32499061
32278676 32499062
32278675 32499063
32278674 32499064
32278673 32499065
32278672 32499066
32278671 32499067
32278670 32499068
32278669 32499069
32278668 32499070
32278667 32499071
32278666 32499072
32278665 32499073
32278664 32499074
32278663 32499075
32278662 32499076
32278661 32499077
32278659 32499078
32278658 32499079
32278657 32499080
32278656 32499081
32278655 32499082
32278654 32499083
32278653 32499084
32278652 32499085
32278651 32499086
32278650 32499087
32278649 32499088
32278648 32499089
32278647 32499090
32278646 32499091
32278645 32499092
32278644 32499093
32278643 32499094
32278642 32499095
32278641 32499096
32278640 32499097
32278639 32499098
32278638 32499099
32278637 32499100
32278636 32499101
32278635 32499102
32278634 32499103
32278633 32499104
32278632 32499105
32278631 32499106
32278630 32499107
32278629 32499108
32278628 32499109
32278627 32499110
32278626 32499111
32278625 32499112
32278624 32499113
32278623 32499114
32278622 32499115
32278621 32499116
32278620 32499117
32278619 32499118
32278618 32499119
32278617 32499120
32278616 32499121
32278615 32499122
32278614 32499123
32278613 32499124
32278612 32499125
32278611 32499126
32278610 32499127
32278609 32499128
32278608 32499129
32278607 32499130
32278606 32499131
32278605 32499132
32278604 32499133
32278603 32499134
32278602 32499135
32278601 32499136
32278600 32499137
32278599 32499138
32278598 32499139
32278597 32499140
32278596 32499141
32278595 32499142
32278594 32499143
32278593 32499144
32278592 32499145
32278591 32499146
32278590 32499147
32278589 32499148
32278588 32499149
32278587 32499150
32278586 32499151
32278585 32499152
32278584 32499153
32278583 32499154
32278582 32499155
32278581 32499156
32278580 32499157
32278579 32499158
32278578 32499159
32278577 32499160
32278576 32499161
32278575 32499162
32278574 32499163
32278573 32499164
32278572 32499165
32278571 32499166
32278570 32499167
32278569 32499168
32278568 32499169
32278567 32499170
32278566 32499171
32278565 32499172
32278564 32499173
32278563 32499174
32278562 32499175
32278561 32499176
32278560 32499177
32278559 32499178
32278558 32499179
32278557 32499180
32278556 32499181
32278555 32499182
32278554 32499183
32278553 32499184
32278552 32499185
32278551 32499186
32278550 32499187
32278549 32499188
32278548 32499189
32278547 32499190
32278546 32499191
32278545 32499192
32278544 32499193
32278543 32499194
32278542 32499195
32278541 32499196
32278540 32499197
32278539 32499198
32278538 32499199
32278537 32499200
32278536 32499201
32278535 32499202
32278534 32499203
32278533 32499204
32278532 32499205
32278531 32499206
32278530 32499207
32278529 32499208
32278528 32499209
32278527 32499210
32278526 32499211
32278525 32499212
32278524 32499213
32278523 32499214
32278522 32499215
32278521 32499216
32278520 32499217
32278519 32499218
32278518 32499219
32278517 32499220
32278516 32499221
32278515 32499222
32278514 32499223
32278513 32499224
32278512 32499225
32278511 32499226
32278510 32499227
32278509 32499228
32278508 32499229
32278507 32499230
32278506 32499231
32278505 32499232
32278504
32278503
32278502
32278501
32278500
32278499
32278498
32278497
32278496
32278495
32278494
32278493
32278491
32278490
32278489
32278488
32278487
32278486
32278485
32278484
32278483
32278482
32278481
32278480
32278479
32278478
32278477
32278476
32278475
32278474
32278472
32278471
32278470
32278469
32278468
32278467
32278466
32278465
32278464
32278463
32278462
32278461
32278460
32278459
32278458
32278457
32278456
32278455
32278454
32278453
32278452
32278451
32278450
32278449
32278448
32278447
32278446
32278445
32278444
32278443
32278442
32278441
32278440
32278439
32278438
32278437
32278436
32278435
32278434
32278433
32278432
32278431
32278430
32278429
32278428
32278427
32278426
32278425
32278424
32278423
32278422
32278421
32278420
32278419
32278418
32278417
32278416
32278415
32278414
32278413
32278412
32278411
32278410
32278408
32278407
32278406
32278405
32278404
32278403
32278402
32278401
32278400
32278399
32278398
32278397
32278396
32278395
32278394
32278393
32278392
32278391
32278390
32278389
32278388
32278387
32278386
32278385
32278384
32278382
32278381
32278380
32278379
32278378
32278377
32278376
32278375
32278374
32278373
32278372
32278371
32278370
32278369
32278368
32278367
32278366
32278365
32278364
32278363
32278362
32278361
32278360
32278359
32278358
32278357
32278356
32278355
32278354
32278353
32278352
32278351
32278350
32278349
32278348
32278347
32278346
32278345
32278344
32278343
32278342
32278341
32278340
32278339
32278338
32278337
32278336
32278335
32278334
32278333
32278332
32278331
32278330
32278329
32278328
32278327
32278326
32278325
32278324
32278323
32278322
32278321
32278320
32278319
32278318
32278317
32278316
32278315
32278314
32278313
32278312
32278311
32278310
32278309
32278308
32278307
32278306
32278305
32278304
32278303
32278302
32278301
32278300
32278299
32278298
32278297
32278296
32278295
32278294
32278293
32278292
32278290
32278289
32278288
32278287
32278286
32278285
32278284
32278283
32278282
32278281
32278280
32278279
32278278
32278277
32278276
32278275
32278274
32278273
32278272
32278271
32278270
32278269
32278268
32278267
32278266
32278265
32278264
32278263
32278262
32278261
32278260
32278259
32278258
32278257
32278256
32278255
32278254
32278253
32278251
32278250
32278249
32278248
32278247
32278246
32278245
32278244
32278242
32278241
32278240
32278239
32278238
32278237
32278236
32278235
32278234
32278233
32278232
32278231
32278230
32278229
32278228
32278227
32278226
32278225
32278224
32278223
32278222
32278221
32278220
32278219
32278218
32278217
32278216
32278215
32278214
32278213
32278212
32278211
32278210
32278209
32278208
32278207
32278206
32278205
32278204
32278203
32278202
32278201
32278200
32278199
32278198
32278197
32278196
32278195
32278194
32278193
32278192
32278191
32278190
32278189
32278188
32278187
32278186
32278185
32278184
32278183
32278182
32278181
32278180
32278179
32278178
32278177
32278176
32278175
32278173
32278172
32278171
32278170
32278168
32278167
32278166
32278165
32278164
32278163
32278162
32278161
32278160
32278159
32278158
32278157
32278156
32278155
32278154
32278153
32278152
32278151
32278150
32278149
32278148
32278147
32278146
32278145
32278143
32278142
32278141
32278140
32278139
32278136
32278135
32278134
32278133
32278132
32278131
32278130
32278129
32278128
32278127
32278126
32278125
32278124
32278122
32278121
32278120
32278119
32278118
32278117
32278116
32278114
32278113
32278112
32278111
32278110
32278109
32278108
32278107
32278106
32278105
32278104
32278103
32278102
32278101
32278100
32278099
32278098
32278097
32278096
32278095
32278094
32278093
32278092
32278091
32278090
32278089
32278088
32278087
32278086
32278085
32278084
32278083
32278082
32278081
32278080
32278079
32278078
32278077
32278076
32278075
32278074
32278073
32278072
32278071
32278070
32278069
32278068
32278067
32278066
32278065
32278064
32278063
32278062
32278061
32278060
32278059
32278058
32278057
32278056
32278055
32278054
32278053
32278052
32278051
32278050
32278049
32278048
32278047
32278046
32278045
32278044
32278043
32278042
32278041
32278040
32278039
32278038
32278037
32278036
32278035
32278034
32278033
32278032
32278031
32278030
32278029
32278028
32278027
32278026
32278025
32278024
32278023
32278022
32278020
32278019
32278018
32278017
32278016
32278015
32278014
32278013
32278012
32278011
32278010
32278009
32278007
32278006
32278005
32278004
32278003
32278002
32278001
32278000
32277999
32277998
32277997
32277996
32277995
32277994
32277993
32277991
32277990
32277989
32277988
32277987
32277986
32277985
32277984
32277983
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment