Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

AoPS crawler is not working. #30

Closed
w32zhong opened this issue Oct 10, 2020 · 13 comments
Closed

AoPS crawler is not working. #30

w32zhong opened this issue Oct 10, 2020 · 13 comments

Comments

@w32zhong
Copy link
Member

w32zhong commented Oct 10, 2020

I have not used AoPS crawler for several months. However, (since I am playing with Docker swarm) today I run into AoPS crawler issue:

./crawler-artofproblemsolving.com.py  -n 0 -o 3650 -c 3
WARNING: Couldn't write lextab module <module 'slimit.lextab' from '/usr/local/lib/python3.7/dist-packages/slimit/lextab.py'>. Won't overwrite existing lextab module
WARNING: yacc table file version is out of date
WARNING: Token 'BLOCK_COMMENT' defined, but not used
WARNING: Token 'CLASS' defined, but not used
WARNING: Token 'CONST' defined, but not used
WARNING: Token 'ENUM' defined, but not used
WARNING: Token 'EXPORT' defined, but not used
WARNING: Token 'EXTENDS' defined, but not used
WARNING: Token 'IMPORT' defined, but not used
WARNING: Token 'LINE_COMMENT' defined, but not used
WARNING: Token 'LINE_TERMINATOR' defined, but not used
WARNING: Token 'SUPER' defined, but not used
WARNING: There are 10 unused tokens
WARNING: Couldn't create <module 'slimit.yacctab' from '/usr/local/lib/python3.7/dist-packages/slimit/yacctab.py'>. Won't overwrite existing tabmodule
[curl] /community/
Traceback (most recent call last):
  File "./crawler-artofproblemsolving.com.py", line 483, in <module>
    main(sys.argv)
  File "./crawler-artofproblemsolving.com.py", line 466, in main
    extra_opt)
  File "./crawler-artofproblemsolving.com.py", line 350, in crawl_category_topics
    for category, topic, e in list_category_topics(category, newest, oldest, c):
  File "./crawler-artofproblemsolving.com.py", line 264, in list_category_topics
    session = parsed['AoPS.session']
TypeError: 'NoneType' object is not subscriptable

It looks like AoPS has changed its API, It also could be my network is blocking AoPS, I have not tested yet.

@TheSil IF you get time, please help me and see if you can reproduce this issue, thanks!

@TheSil
Copy link
Contributor

TheSil commented Oct 10, 2020

It seems the AoPS server started to reject (403 error code) certain clients, my pycurl sends "User-Agent: PycURL/7.43.0.2 libcurl/7.60.0 OpenSSL/1.1.0h zlib/1.2.11 c-ares/1.14.0 WinIDN libssh2/1.8.0 nghttp2/1.32.0" which gets rejected... But if I add my own User-Agent into def curl(sub_url, c, post = None):

c.setopt(c.HTTPHEADER, ['User-agent: FriendlyClient'])

then it seems to work. You can try this change on your side see if it helps.

To find this issue I have uncommented the c.setopt(c.VERBOSE, True) which showed details of curl response. I guess it would be also a good idea to add response status code check to catch anything other than 200...

EDIT: It seems it specifically rejects it if it contains PycURL :)

@w32zhong
Copy link
Member Author

@TheSil Thank you, it is fixed in the private repo.

@w32zhong
Copy link
Member Author

w32zhong commented Oct 13, 2020

Unfortunately, I need to reopen this issue, although I get the script working yesterday, I just find it is not working again. Still

[error] 'NoneType' object is not subscriptable

And here is what I get from get_aops_data():

<!DOCTYPE html>\n<html>\n\t<head>\n\t\t\t\t\t\n\t\t\t\t\t\t<style>.async-hide { opacity: 0 !important} </style>\n\t\t\t<!-- Initialize the Data Layer First -->\n\t\t\t<script>\n\t\t\twindow.dataLayer = window.dataLayer || [];\n\t\t\t\t\t\t</script>\n\t\t\t<!-- End Data Layer Initialization -->\n\t\t\t<!-- Page hiding snippet for Optimize -->\n\t\t\t<script>\n\t\t\t(function(a,s,y,n,c,h,i,d,e){s.className+=\' \'+y;\n\t\t\th.end=i=function(){s.className=s.className.replace(RegExp(\' ?\'+y),\'\')};\n\t\t\t(a[n]=a[n]||[]).hide=h;setTimeout(function(){i();h.end=null},c);\n\t\t\t})(window,document.documentElement,\'async-hide\',\'dataLayer\',4000,{\'GTM-PJ447K5\':true}); // add optimize container ID here\n\t\t\t</script>\n\t\t\t<!-- End Page hiding snippet for Optimize -->\n\t\t\t<!-- GA w/Optimize plugin and Enhanced Ecommerce -->\n\t\t\t<script>\n\t\t\t(function(i,s,o,g,r,a,m){i[\'GoogleAnalyticsObject\']=r;i[r]=i[r]||function(){\n\t\t\t(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),\n\t\t\tm=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)\n\t\t\t})(window,document,\'script\',\'https://www.google-analytics.com/analytics.js\',\'ga\');\n\n\t\t\tga(\'create\', \'UA-1905305-1\', \'auto\', {allowLinker: true}); // GA Property ID\n\t\t\tga(\'require\', \'GTM-PJ447K5\', {allowLinker: true}); // Optimize Container ID\n\t\t\tga(\'require\', \'ec\'); // enhanced ecommerce plugin\n\t\t\tga(\'set\', \'dimension1\', false); // boolean - is user logged in?\n\t\t\tga(\'set\', \'dimension2\', \'Not Logged In\'); // string - user type - set in Aops::initTemplate() method\n\t\t\tga(\'send\', \'pageview\');\n\t\t\t</script>\n\t\t\t<!-- End GA w/Optimize plugin and Enhanced Ecommerce -->\n\n\t\t\t<!-- Google Tag Manager -->\n\t\t\t<script>(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({\'gtm.start\':\n\t\t\tnew Date().getTime(),event:\'gtm.js\'});var f=d.getElementsByTagName(s)[0],\n\t\t\tj=d.createElement(s),dl=l!=\'dataLayer\'?\'&l=\'+l:\'\';j.async=true;j.src=\n\t\t\t\'https://www.googletagmanager.com/gtm.js?id=\'+i+dl;f.parentNode.insertBefore(j,f);\n\t\t\t})(window,document,\'script\',\'dataLayer\',\'GTM-59JWRGZ\');</script>\n\t\t\t<!-- End Google Tag Manager -->\n\t\t\t\t\t\t\n<script>AoPS = {\n  start_time : new Date().getTime()\n};</script>\n\n<script>\n  AoPS.bootstrap_data = {"preload_cmty_data":{"user_id":0,"category_id":0,"rewrite_url":false},"init_time":1602560607,"server_time":"0.97448400 1602560607","datastore_path":"\\/var\\/data\\/aops3\\/","cmty_is_testing":false,"cmty_status":"slow","is_community_active":true,"community_inactive_message":"Community disabled for routine maintenance.","cmty_attachment_path":"\\/\\/cdn.artofproblemsolving.com\\/attachments\\/","cmty_toplevel_data":{"3":{"num_topics":42355,"num_posts":549320,"num_users":12,"is_locked":false},"4":{"num_topics":90438,"num_posts":495513,"num_users":13,"is_locked":false},"5":{"num_topics":23868,"num_posts":367980,"num_users":12,"is_locked":false},"6":{"num_topics":253106,"num_posts":1096393,"num_users":39,"is_locked":false},"7":{"num_topics":93478,"num_posts":370139,"num_users":18,"is_locked":false},"10":{"num_topics":14006,"num_posts":106476,"num_users":6,"is_locked":false}},"toplevel_category_permissions":{"2":{"c_can_access_all_tags":false,"c_can_add_item":true,"c_can_add_target":false,"c_can_announce":false,"c_can_change_is_public":false,"c_can_change_sort_type":false,"c_can_delete":false,"c_can_delete_category":false,"c_can_edit":false,"c_can_edit_admin_items":false,"c_can_edit_core_data":false,"c_can_edit_deny":false,"c_can_edit_mod":false,"c_can_edit_own_posts":false,"c_can_edit_owner":false,"c_can_edit_registered_user":false,"c_can_edit_tags":false,"c_can_global_announce":false,"c_can_hard_delete":false,"c_can_hard_delete_cat":false,"c_can_lock_category":false,"c_can_lock_topic":false,"c_can_monitor":false,"c_can_move_topic_out":false,"c_can_nothank":false,"c_can_read":true,"c_can_read_deleted":false,"c_can_remove_item":true,"c_can_remove_target":false,"c_can_reply":false,"c_can_report":false,"c_can_see_real_poster":false,"c_can_settle_report":false,"c_can_shout":false,"c_can_start_topic":false,"c_can_tag_new":false,"c_can_thank":false,"c_can_undelete":false,"c_undo_global_ban":false,"c_can_override_lock":false,"c_can_set_role_inherit":false},"3":{"c_can_access_all_tags":false,"c_can_add_item":true,"c_can_add_target":false,"c_can_announce":false,"c_can_change_is_public":false,"c_can_change_sort_type":false,"c_can_delete":false,"c_can_delete_category":false,"c_can_edit":false,"c_can_edit_admin_items":false,"c_can_edit_contributor":false,"c_can_edit_core_data":false,"c_can_edit_deny":false,"c_can_edit_mod":false,"c_can_edit_own_posts":true,"c_can_edit_owner":false,"c_can_edit_registered_user":false,"c_can_edit_tags":true,"c_can_global_announce":false,"c_can_hard_delete":false,"c_can_hard_delete_cat":false,"c_can_lock_category":false,"c_can_lock_topic":false,"c_can_monitor":false,"c_can_move_topic_out":false,"c_can_nothank":true,"c_can_override_lock":false,"c_can_read":true,"c_can_read_deleted":false,"c_can_remove_item":true,"c_can_remove_target":false,"c_can_reply":true,"c_can_report":true,"c_can_see_real_poster":false,"c_can_set_role_inherit":false,"c_can_settle_report":false,"c_can_shout":false,"c_can_start_topic":true,"c_can_tag_new":true,"c_can_thank":true,"c_can_undelete":false,"c_undo_global_ban":false},"4":{"c_can_access_all_tags":false,"c_can_add_item":true,"c_can_add_target":false,"c_can_announce":false,"c_can_change_is_public":false,"c_can_change_sort_type":false,"c_can_delete":false,"c_can_delete_category":false,"c_can_edit":false,"c_can_edit_admin_items":false,"c_can_edit_contributor":false,"c_can_edit_core_data":false,"c_can_edit_deny":false,"c_can_edit_mod":false,"c_can_edit_own_posts":true,"c_can_edit_owner":false,"c_can_edit_registered_user":false,"c_can_edit_tags":true,"c_can_global_announce":false,"c_can_hard_delete":false,"c_can_hard_delete_cat":false,"c_can_lock_category":false,"c_can_lock_topic":false,"c_can_monitor":false,"c_can_move_topic_out":false,"c_can_nothank":true,"c_can_override_lock":false,"c_can_read":true,"c_can_read_deleted":false,"c_can_remove_item":true,"c_can_remove_target":false,"c_can_reply":true,"c_can_report":true,"c_can_see_real_poster":false,"c_can_set_role_inherit":false,"c_can_settle_report":false,"c_can_shout":false,"c_can_start_topic":true,"c_can_tag_new":true,"c_can_thank":true,"c_can_undelete":false,"c_undo_global_ban":false},"5":{"c_can_access_all_tags":false,"c_can_add_item":true,"c_can_add_target":false,"c_can_announce":false,"c_can_change_is_public":false,"c_can_change_sort_type":false,"c_can_delete":false,"c_can_delete_category":false,"c_can_edit":false,"c_can_edit_admin_items":false,"c_can_edit_contributor":false,"c_can_edit_core_data":false,"c_can_edit_deny":false,"c_can_edit_mod":false,"c_can_edit_own_posts":true,"c_can_edit_owner":false,"c_can_edit_registered_user":false,"c_can_edit_tags":true,"c_can_global_announce":false,"c_can_hard_delete":false,"c_can_hard_delete_cat":false,"c_can_lock_category":false,"c_can_lock_topic":false,"c_can_monitor":false,"c_can_move_topic_out":false,"c_can_nothank":true,"c_can_override_lock":false,"c_can_read":true,"c_can_read_deleted":false,"c_can_remove_item":true,"c_can_remove_target":false,"c_can_reply":true,"c_can_report":true,"c_can_see_real_poster":false,"c_can_set_role_inherit":false,"c_can_settle_report":false,"c_can_shout":false,"c_can_start_topic":true,"c_can_tag_new":true,"c_can_thank":true,"c_can_undelete":false,"c_undo_global_ban":false},"6":{"c_can_access_all_tags":false,"c_can_add_item":true,"c_can_add_target":false,"c_can_announce":false,"c_can_change_is_public":false,"c_can_change_sort_type":false,"c_can_delete":false,"c_can_delete_category":false,"c_can_edit":false,"c_can_edit_admin_items":false,"c_can_edit_contributor":false,"c_can_edit_core_data":false,"c_can_edit_deny":false,"c_can_edit_mod":false,"c_can_edit_own_posts":true,"c_can_edit_owner":false,"c_can_edit_registered_user":false,"c_can_edit_tags":true,"c_can_global_announce":false,"c_can_hard_delete":false,"c_can_hard_delete_cat":false,"c_can_lock_category":false,"c_can_lock_topic":false,"c_can_monitor":false,"c_can_move_topic_out":false,"c_can_nothank":true,"c_can_override_lock":false,"c_can_read":true,"c_can_read_deleted":false,"c_can_remove_item":true,"c_can_remove_target":false,"c_can_reply":true,"c_can_report":true,"c_can_see_real_poster":false,"c_can_set_role_inherit":false,"c_can_settle_report":false,"c_can_shout":false,"c_can_start_topic":true,"c_can_tag_new":true,"c_can_thank":true,"c_can_undelete":false,"c_undo_global_ban":false},"7":{"c_can_access_all_tags":false,"c_can_add_item":true,"c_can_add_target":false,"c_can_announce":false,"c_can_change_is_public":false,"c_can_change_sort_type":false,"c_can_delete":false,"c_can_delete_category":false,"c_can_edit":false,"c_can_edit_admin_items":false,"c_can_edit_contributor":false,"c_can_edit_core_data":false,"c_can_edit_deny":false,"c_can_edit_mod":false,"c_can_edit_own_posts":true,"c_can_edit_owner":false,"c_can_edit_registered_user":false,"c_can_edit_tags":true,"c_can_global_announce":false,"c_can_hard_delete":false,"c_can_hard_delete_cat":false,"c_can_lock_category":false,"c_can_lock_topic":false,"c_can_monitor":false,"c_can_move_topic_out":false,"c_can_nothank":true,"c_can_override_lock":false,"c_can_read":true,"c_can_read_deleted":false,"c_can_remove_item":true,"c_can_remove_target":false,"c_can_reply":true,"c_can_report":true,"c_can_see_real_poster":false,"c_can_set_role_inherit":false,"c_can_settle_report":false,"c_can_shout":false,"c_can_start_topic":true,"c_can_tag_new":true,"c_can_thank":true,"c_can_undelete":false,"c_undo_global_ban":false},"8":{"c_can_access_all_tags":false,"c_can_add_item":true,"c_can_add_target":false,"c_can_announce":false,"c_can_change_is_public":false,"c_can_change_sort_type":false,"c_can_delete":false,"c_can_delete_category":false,"c_can_edit":false,"c_can_edit_admin_items":false,"c_can_edit_contributor":false,"c_can_edit_core_data":false,"c_can_edit_deny":false,"c_can_edit_mod":false,"c_can_edit_own_posts":true,"c_can_edit_owner":false,"c_can_edit_registered_user":false,"c_can_edit_tags":true,"c_can_global_announce":false,"c_can_hard_delete":false,"c_can_hard_delete_cat":false,"c_can_lock_category":false,"c_can_lock_topic":false,"c_can_monitor":false,"c_can_move_topic_out":false,"c_can_nothank":true,"c_can_override_lock":false,"c_can_read":true,"c_can_read_deleted":false,"c_can_remove_item":true,"c_can_remove_target":false,"c_can_reply":true,"c_can_report":true,"c_can_see_real_poster":false,"c_can_set_role_inherit":false,"c_can_settle_report":false,"c_can_shout":false,"c_can_start_topic":true,"c_can_tag_new":true,"c_can_thank":true,"c_can_undelete":false,"c_undo_global_ban":false},"9":{"c_can_access_all_tags":false,"c_can_add_item":true,"c_can_add_target":false,"c_can_announce":false,"c_can_change_is_public":false,"c_can_change_sort_type":false,"c_can_delete":false,"c_can_delete_category":false,"c_can_edit":false,"c_can_edit_admin_items":false,"c_can_edit_core_data":false,"c_can_edit_deny":false,"c_can_edit_mod":false,"c_can_edit_own_posts":false,"c_can_edit_owner":false,"c_can_edit_registered_user":false,"c_can_edit_tags":false,"c_can_global_announce":false,"c_can_hard_delete":false,"c_can_hard_delete_cat":false,"c_can_lock_category":false,"c_can_lock_topic":false,"c_can_monitor":false,"c_can_move_topic_out":false,"c_can_nothank":false,"c_can_read":true,"c_can_read_deleted":false,"c_can_remove_item":true,"c_can_remove_target":false,"c_can_reply":false,"c_can_report":false,"c_can_see_real_poster":false,"c_can_settle_report":false,"c_can_shout":false,"c_can_start_topic":false,"c_can_tag_new":false,"c_can_thank":false,"c_can_undelete":false,"c_undo_global_ban":false,"c_can_override_lock":false,"c_can_set_role_inherit":false},"11":{"c_can_access_all_tags":false,"c_can_add_item":true,"c_can_add_target":false,"c_can_announce":false,"c_can_change_is_public":false,"c_can_change_sort_type":false,"c_can_delete":false,"c_can_delete_category":false,"c_can_edit":false,"c_can_edit_admin_items":false,"c_can_edit_core_data":false,"c_can_edit_deny":false,"c_can_edit_mod":false,"c_can_edit_own_posts":false,"c_can_edit_owner":false,"c_can_edit_registered_user":false,"c_can_edit_tags":false,"c_can_global_announce":false,"c_can_hard_delete":false,"c_can_hard_delete_cat":false,"c_can_lock_category":false,"c_can_lock_topic":false,"c_can_monitor":false,"c_can_move_topic_out":false,"c_can_nothank":false,"c_can_read":true,"c_can_read_deleted":false,"c_can_remove_item":true,"c_can_remove_target":false,"c_can_reply":false,"c_can_report":false,"c_can_see_real_poster":false,"c_can_settle_report":false,"c_can_shout":false,"c_can_start_topic":false,"c_can_tag_new":false,"c_can_thank":false,"c_can_undelete":false,"c_undo_global_ban":false,"c_can_override_lock":false,"c_can_set_role_inherit":false},"10":{"c_can_access_all_tags":false,"c_can_add_item":true,"c_can_add_target":false,"c_can_announce":false,"c_can_change_is_public":false,"c_can_change_sort_type":false,"c_can_delete":false,"c_can_delete_category":false,"c_can_edit":false,"c_can_edit_admin_items":false,"c_can_edit_contributor":false,"c_can_edit_core_data":false,"c_can_edit_deny":false,"c_can_edit_mod":false,"c_can_edit_own_posts":true,"c_can_edit_owner":false,"c_can_edit_registered_user":false,"c_can_edit_tags":true,"c_can_global_announce":false,"c_can_hard_delete":false,"c_can_hard_delete_cat":false,"c_can_lock_category":false,"c_can_lock_topic":false,"c_can_monitor":false,"c_can_move_topic_out":false,"c_can_nothank":true,"c_can_override_lock":false,"c_can_read":true,"c_can_read_deleted":false,"c_can_remove_item":true,"c_can_remove_target":false,"c_can_reply":true,"c_can_report":true,"c_can_see_real_poster":false,"c_can_set_role_inherit":false,"c_can_settle_report":false,"c_can_shout":false,"c_can_start_topic":true,"c_can_tag_new":true,"c_can_thank":true,"c_can_undelete":false,"c_undo_global_ban":false},"12":{"c_can_access_all_tags":false,"c_can_add_item":true,"c_can_add_target":false,"c_can_announce":false,"c_can_change_is_public":false,"c_can_change_sort_type":false,"c_can_delete":false,"c_can_delete_category":false,"c_can_edit":false,"c_can_edit_admin_items":false,"c_can_edit_core_data":false,"c_can_edit_deny":false,"c_can_edit_mod":false,"c_can_edit_own_posts":false,"c_can_edit_owner":false,"c_can_edit_registered_user":false,"c_can_edit_tags":false,"c_can_global_announce":false,"c_can_hard_delete":false,"c_can_hard_delete_cat":false,"c_can_lock_category":false,"c_can_lock_topic":false,"c_can_monitor":false,"c_can_move_topic_out":false,"c_can_nothank":false,"c_can_read":true,"c_can_read_deleted":false,"c_can_remove_item":true,"c_can_remove_target":false,"c_can_reply":false,"c_can_report":false,"c_can_see_real_poster":false,"c_can_settle_report":false,"c_can_shout":false,"c_can_start_topic":false,"c_can_tag_new":false,"c_can_thank":false,"c_can_undelete":false,"c_undo_global_ban":false,"c_can_override_lock":false,"c_can_set_role_inherit":false},"13":{"c_can_access_all_tags":false,"c_can_add_item":true,"c_can_add_target":false,"c_can_announce":false,"c_can_change_is_public":false,"c_can_change_sort_type":false,"c_can_delete":false,"c_can_delete_category":false,"c_can_edit":false,"c_can_edit_admin_items":false,"c_can_edit_core_data":false,"c_can_edit_deny":false,"c_can_edit_mod":false,"c_can_edit_own_posts":false,"c_can_edit_owner":false,"c_can_edit_registered_user":false,"c_can_edit_tags":false,"c_can_global_announce":false,"c_can_hard_delete":false,"c_can_hard_delete_cat":false,"c_can_lock_category":false,"c_can_lock_topic":false,"c_can_monitor":false,"c_can_move_topic_out":false,"c_can_nothank":false,"c_can_read":true,"c_can_read_deleted":false,"c_can_remove_item":true,"c_can_remove_target":false,"c_can_reply":false,"c_can_report":false,"c_can_see_real_poster":false,"c_can_settle_report":false,"c_can_shout":false,"c_can_start_topic":false,"c_can_tag_new":false,"c_can_thank":false,"c_can_undelete":false,"c_undo_global_ban":false,"c_can_override_lock":false,"c_can_set_role_inherit":false},"30":{"c_can_access_all_tags":false,"c_can_add_item":true,"c_can_add_target":false,"c_can_announce":false,"c_can_change_is_public":false,"c_can_change_sort_type":false,"c_can_delete":false,"c_can_delete_category":false,"c_can_edit":false,"c_can_edit_admin_items":false,"c_can_edit_core_data":false,"c_can_edit_deny":false,"c_can_edit_mod":false,"c_can_edit_own_posts":false,"c_can_edit_owner":false,"c_can_edit_registered_user":false,"c_can_edit_tags":false,"c_can_global_announce":false,"c_can_hard_delete":false,"c_can_hard_delete_cat":false,"c_can_lock_category":false,"c_can_lock_topic":false,"c_can_monitor":false,"c_can_move_topic_out":false,"c_can_nothank":false,"c_can_read":true,"c_can_read_deleted":false,"c_can_remove_item":true,"c_can_remove_target":false,"c_can_reply":false,"c_can_report":false,"c_can_see_real_poster":false,"c_can_settle_report":false,"c_can_shout":false,"c_can_start_topic":false,"c_can_tag_new":false,"c_can_thank":false,"c_can_undelete":false,"c_undo_global_ban":false,"c_can_override_lock":false,"c_can_set_role_inherit":false},"31":{"c_can_access_all_tags":false,"c_can_add_item":true,"c_can_add_target":false,"c_can_announce":false,"c_can_change_is_public":false,"c_can_change_sort_type":false,"c_can_delete":false,"c_can_delete_category":false,"c_can_edit":false,"c_can_edit_admin_items":false,"c_can_edit_core_data":false,"c_can_edit_deny":false,"c_can_edit_mod":false,"c_can_edit_own_posts":false,"c_can_edit_owner":false,"c_can_edit_registered_user":false,"c_can_edit_tags":false,"c_can_global_announce":false,"c_can_hard_delete":false,"c_can_hard_delete_cat":false,"c_can_lock_category":false,"c_can_lock_topic":false,"c_can_monitor":false,"c_can_move_topic_out":false,"c_can_nothank":false,"c_can_read":true,"c_can_read_deleted":false,"c_can_remove_item":true,"c_can_remove_target":false,"c_can_reply":false,"c_can_report":false,"c_can_see_real_poster":false,"c_can_settle_report":false,"c_can_shout":false,"c_can_start_topic":false,"c_can_tag_new":false,"c_can_thank":false,"c_can_undelete":false,"c_undo_global_ban":false,"c_can_override_lock":false,"c_can_set_role_inherit":false},"934345":{"c_can_access_all_tags":false,"c_can_add_item":true,"c_can_add_target":false,"c_can_announce":false,"c_can_change_is_public":false,"c_can_change_sort_type":false,"c_can_delete":false,"c_can_delete_category":false,"c_can_edit":false,"c_can_edit_admin_items":false,"c_can_edit_core_data":false,"c_can_edit_deny":false,"c_can_edit_mod":false,"c_can_edit_own_posts":false,"c_can_edit_owner":false,"c_can_edit_registered_user":false,"c_can_edit_tags":false,"c_can_global_announce":false,"c_can_hard_delete":false,"c_can_hard_delete_cat":false,"c_can_lock_category":false,"c_can_lock_topic":false,"c_can_monitor":false,"c_can_move_topic_out":false,"c_can_nothank":false,"c_can_read":true,"c_can_read_deleted":false,"c_can_remove_item":true,"c_can_remove_target":false,"c_can_reply":false,"c_can_report":false,"c_can_see_real_poster":false,"c_can_settle_report":false,"c_can_shout":false,"c_can_start_topic":false,"c_can_tag_new":false,"c_can_thank":false,"c_can_undelete":false,"c_undo_global_ban":false,"c_can_override_lock":false,"c_can_set_role_inherit":false},"89":{"c_can_access_all_tags":false,"c_can_add_item":true,"c_can_add_target":false,"c_can_announce":false,"c_can_change_is_public":false,"c_can_change_sort_type":false,"c_can_delete":false,"c_can_delete_category":false,"c_can_edit":false,"c_can_edit_admin_items":false,"c_can_edit_core_data":false,"c_can_edit_deny":false,"c_can_edit_mod":false,"c_can_edit_own_posts":false,"c_can_edit_owner":false,"c_can_edit_registered_user":false,"c_can_edit_tags":false,"c_can_global_announce":false,"c_can_hard_delete":false,"c_can_hard_delete_cat":false,"c_can_lock_category":false,"c_can_lock_topic":false,"c_can_monitor":false,"c_can_move_topic_out":false,"c_can_nothank":false,"c_can_read":true,"c_can_read_deleted":false,"c_can_remove_item":true,"c_can_remove_target":false,"c_can_reply":false,"c_can_report":false,"c_can_see_real_poster":false,"c_can_settle_report":false,"c_can_shout":false,"c_can_start_topic":false,"c_can_tag_new":false,"c_can_thank":false,"c_can_undelete":false,"c_undo_global_ban":false,"c_can_override_lock":false,"c_can_set_role_inherit":false},"90":{"c_can_access_all_tags":false,"c_can_add_item":true,"c_can_add_target":false,"c_can_announce":false,"c_can_change_is_public":false,"c_can_change_sort_type":false,"c_can_delete":false,"c_can_delete_category":false,"c_can_edit":false,"c_can_edit_admin_items":false,"c_can_edit_core_data":false,"c_can_edit_deny":false,"c_can_edit_mod":false,"c_can_edit_own_posts":false,"c_can_edit_owner":false,"c_can_edit_registered_user":false,"c_can_edit_tags":false,"c_can_global_announce":false,"c_can_hard_delete":false,"c_can_hard_delete_cat":false,"c_can_lock_category":false,"c_can_lock_topic":false,"c_can_monitor":false,"c_can_move_topic_out":false,"c_can_nothank":false,"c_can_read":true,"c_can_read_deleted":false,"c_can_remove_item":true,"c_can_remove_target":false,"c_can_reply":false,"c_can_report":false,"c_can_see_real_poster":false,"c_can_settle_report":false,"c_can_shout":false,"c_can_start_topic":false,"c_can_tag_new":false,"c_can_thank":false,"c_can_undelete":false,"c_undo_global_ban":false,"c_can_override_lock":false,"c_can_set_role_inherit":false},"91":{"c_can_access_all_tags":false,"c_can_add_item":true,"c_can_add_target":false,"c_can_announce":false,"c_can_change_is_public":false,"c_can_change_sort_type":false,"c_can_delete":false,"c_can_delete_category":false,"c_can_edit":false,"c_can_edit_admin_items":false,"c_can_edit_core_data":false,"c_can_edit_deny":false,"c_can_edit_mod":false,"c_can_edit_own_posts":false,"c_can_edit_owner":false,"c_can_edit_registered_user":false,"c_can_edit_tags":false,"c_can_global_announce":false,"c_can_hard_delete":false,"c_can_hard_delete_cat":false,"c_can_lock_category":false,"c_can_lock_topic":false,"c_can_monitor":false,"c_can_move_topic_out":false,"c_can_nothank":false,"c_can_read":true,"c_can_read_deleted":false,"c_can_remove_item":true,"c_can_remove_target":false,"c_can_reply":false,"c_can_report":false,"c_can_see_real_poster":false,"c_can_settle_report":false,"c_can_shout":false,"c_can_start_topic":false,"c_can_tag_new":false,"c_can_thank":false,"c_can_undelete":false,"c_undo_global_ban":false,"c_can_override_lock":false,"c_can_set_role_inherit":false}},"user_global_cmty_permissions":{"can_access_log":false,"can_create_blog":true,"can_create_category":true,"can_delete_long_topic":false,"can_edit_profile":true,"can_edit_other_profiles":false,"can_exceed_cat_limit":false,"can_add_avatar":true,"can_attach_files":true,"can_post_as_halp":true,"can_view_others_pm":false,"can_pm_anyone":false,"can_pm_as_sheriff":false,"can_post_fast":false,"can_request_friend":true,"can_revert_actions":false,"can_edit_tag_term_map":false,"can_edit_tagspace":false,"can_add_user_notes":false,"can_view_user_notes":false,"can_post_links":true,"can_post_images":true},"user_staff_perms":{"user-general":false,"perms-cmty":false,"one-click-ban":false,"see-full-memberlist":false,"ip-lookup":false,"can-access-log":false,"can-delete-long-topic":false,"can-post-fast":false},"global_feed_settings":{"global_feed_type":"custom","global_feed_fora":[3,4,5,6,7,10,50,63,64,65,66,68,70,71,163,164,172,101841]},"cmty_whois":{"num_users":536785,"num_posts":12291144,"num_topics":1172231,"user_data":{"num_registered":503,"num_total":"935","num_hidden":74,"shown_users":[{"a":"aarxv","b":575450,"c":0},{"a":"aaryanmagar","b":516357,"c":0},{"a":"Abacus1","b":589440,"c":0},{"a":"Abbylee","b":413698,"c":0},{"a":"AbunPoppy","b":327330,"c":0},{"a":"adityadesai","b":515400,"c":0},{"a":"adityasahas","b":356068,"c":0},{"a":"adjones","b":366776,"c":1},{"a":"agneg05","b":358153,"c":0},{"a":"AHX","b":475953,"c":0},{"a":"Aiden.Caldwell","b":598467,"c":0},{"a":"aileenpham590","b":592925,"c":0},{"a":"ak.santana","b":261321,"c":1},{"a":"AK2006","b":353704,"c":0},{"a":"akashkroth","b":614477,"c":0},{"a":"Akshara19","b":579891,"c":0},{"a":"Aktheduck","b":414614,"c":0},{"a":"al-math","b":396101,"c":0},{"a":"al9999","b":504447,"c":0},{"a":"alanisawesome2018","b":605245,"c":0},{"a":"albert_aops_guo","b":378874,"c":0},{"a":"albusd","b":354531,"c":0},{"a":"alexiaslexia","b":556655,"c":0},{"a":"AlexL26","b":496989,"c":0},{"a":"Ali3085","b":452524,"c":0},{"a":"alicechang18","b":445072,"c":0},{"a":"AlphaNeoAlphaNeoTheta","b":425465,"c":0},{"a":"AlphaSky9","b":576297,"c":0},{"a":"amc07","b":359198,"c":0},{"a":"AMELOCOTON","b":534943,"c":0},{"a":"amyannieaop","b":379172,"c":0},{"a":"ananyasharma","b":553565,"c":0},{"a":"AndA456","b":574206,"c":0},{"a":"andrewma2020","b":592292,"c":0},{"a":"andy09","b":547847,"c":0},{"a":"Angad_Handa","b":596841,"c":0},{"a":"angelayuan0204","b":469325,"c":0},{"a":"angle-bisector","b":480266,"c":0},{"a":"angrybird_r","b":542974,"c":0},{"a":"Angrybird029","b":572575,"c":0},{"a":"animefan2020","b":579331,"c":0},{"a":"anna.chen.ww","b":359801,"c":0},{"a":"AnnBear","b":579166,"c":0},{"a":"aopspractice","b":391019,"c":0},{"a":"Apple3.14159","b":286092,"c":0},{"a":"apple31415pies","b":476932,"c":0},{"a":"apple98","b":463681,"c":0},{"a":"ApplePi3690","b":556761,"c":0},{"a":"Ark35","b":493356,"c":0},{"a":"arora01250","b":613899,"c":0},{"a":"artlover8115","b":534269,"c":0},{"a":"AshleyG","b":548849,"c":0},{"a":"asrib951","b":577034,"c":0},{"a":"AsteroidJuice","b":502430,"c":0},{"a":"atharv.kale","b":603802,"c":0},{"a":"Avatarstorm","b":600094,"c":0},{"a":"awesomejellyfish","b":567897,"c":0},{"a":"Awesomekid05","b":288723,"c":0},{"a":"babyelephant","b":521656,"c":0},{"a":"banton","b":542941,"c":0},{"a":"batmangold","b":568893,"c":0},{"a":"baxxer","b":259457,"c":0},{"a":"bbbplay","b":573480,"c":0},{"a":"BCZ01","b":364299,"c":0},{"a":"beishexi","b":346814,"c":0},{"a":"beny2009","b":516035,"c":0},{"a":"bernaka","b":531927,"c":0},{"a":"bibear","b":365093,"c":0},{"a":"bigfoot09","b":601410,"c":0},{"a":"bigmud","b":310021,"c":0},{"a":"bl4509","b":505373,"c":0},{"a":"BlackNinja","b":424022,"c":0},{"a":"blackzebra","b":529683,"c":0},{"a":"blawho12","b":127970,"c":0},{"a":"BlueDolphinXXX000","b":357645,"c":0},{"a":"blueivymanager","b":608107,"c":0},{"a":"bluesky11","b":349860,"c":0},{"a":"Bnguyen514","b":580343,"c":0},{"a":"BOBBYERTLY","b":329912,"c":0},{"a":"Bobcataryan","b":614474,"c":0},{"a":"bobthebuilderp","b":591393,"c":0},{"a":"Bolt_386","b":534002,"c":0},{"a":"bond777","b":468567,"c":0},{"a":"Bookworm1","b":410437,"c":0},{"a":"Boy Soprano II","b":13517,"c":0},{"a":"BradenXLi","b":469468,"c":0},{"a":"BrawlStar","b":475587,"c":0},{"a":"BrightJaguar","b":494834,"c":0},{"a":"calisttalove","b":576683,"c":0},{"a":"CamiKim","b":578162,"c":0},{"a":"candythecorgi","b":499924,"c":0},{"a":"Cellolover","b":578790,"c":0},{"a":"CenterMid","b":442842,"c":0},{"a":"cflau","b":604892,"c":0},{"a":"chandru1","b":298245,"c":0},{"a":"changh201","b":571204,"c":0},{"a":"Chanmi","b":595772,"c":0},{"a":"Chemisorption","b":323333,"c":0},{"a":"chickenriceandbeans","b":603590,"c":0},{"a":"christasanford22","b":595959,"c":0},{"a":"CJGomez","b":251692,"c":0},{"a":"clarre","b":409204,"c":0},{"a":"CoconutCuttlefish","b":298481,"c":0},{"a":"Colorcrazy","b":592432,"c":0},{"a":"ColtsFan10","b":534023,"c":0},{"a":"cosmaster","b":387191,"c":0},{"a":"crazyplatapus","b":569318,"c":0},{"a":"ctw0611","b":279629,"c":0},{"a":"cuautzina","b":491974,"c":0},{"a":"Cubesat","b":444348,"c":0},{"a":"CuddlyBear_yf","b":577451,"c":0},{"a":"CuteKouala","b":590001,"c":0},{"a":"Cyb0rg732","b":595379,"c":0},{"a":"Cynthiakraft","b":566076,"c":0},{"a":"DapperPeppermint","b":508669,"c":0},{"a":"dc495","b":439696,"c":0},{"a":"Debussy","b":310566,"c":0},{"a":"Deepagp12","b":411935,"c":0},{"a":"defenestration","b":579043,"c":0},{"a":"Desertsnow","b":450017,"c":0},{"a":"dessertsareawesome","b":467231,"c":0},{"a":"dianlingzhao","b":527485,"c":0},{"a":"Divyachem","b":500188,"c":0},{"a":"dolphin7","b":283749,"c":0},{"a":"Dolphing","b":599894,"c":0},{"a":"Dopeycharizard","b":495214,"c":0},{"a":"Dosanko","b":287817,"c":0},{"a":"dottedmusic","b":529890,"c":0},{"a":"DrNykerstein","b":566123,"c":0},{"a":"duck_master","b":227902,"c":0},{"a":"duhzy","b":614483,"c":0},{"a":"dungnguyentien","b":156956,"c":0},{"a":"dwip_neel","b":565954,"c":0},{"a":"dynamite79","b":550205,"c":0},{"a":"eaglebuddy2","b":460881,"c":0},{"a":"Eaglegeorge","b":568949,"c":0},{"a":"ealaine","b":335200,"c":0},{"a":"edmond126","b":540728,"c":0},{"a":"ejyski","b":427059,"c":0},{"a":"El_matematico","b":422291,"c":0},{"a":"EL24","b":611311,"c":0},{"a":"ElinaS","b":612704,"c":0},{"a":"emerald_block","b":516122,"c":0},{"a":"enl27","b":550399,"c":0},{"a":"entili","b":589424,"c":0},{"a":"eric.sun","b":567566,"c":0},{"a":"Error_404--Not_Found","b":543681,"c":0},{"a":"ETS1331","b":335165,"c":0},{"a":"EulerNTM","b":367748,"c":0},{"a":"Evenprime","b":367932,"c":0},{"a":"fancyamazon","b":410317,"c":0},{"a":"fantasyforest123aj","b":464436,"c":0},{"a":"Fatcats2009","b":529085,"c":0},{"a":"fath2012","b":378159,"c":0},{"a":"fenggao75","b":291024,"c":0},{"a":"fionamymy","b":586999,"c":0},{"a":"FlamingoFloyd","b":576729,"c":0},{"a":"FletchR","b":279795,"c":0},{"a":"floof421","b":566892,"c":0},{"a":"flyhigh20","b":482533,"c":0},{"a":"ForestCrow10","b":542542,"c":0},{"a":"FreezingPalmTree","b":548007,"c":0},{"a":"fucongcong","b":512453,"c":0},{"a":"fukano_2","b":525230,"c":0},{"a":"fuzzyma","b":583213,"c":0},{"a":"Galaxykitty","b":499381,"c":0},{"a":"Ganitpundit","b":520285,"c":0},{"a":"Garfield12","b":602530,"c":0},{"a":"gauss202","b":1313,"c":0},{"a":"GeicoAds","b":389352,"c":0},{"a":"Geo2020","b":557343,"c":0},{"a":"gghx","b":485327,"c":0},{"a":"gimme_a_username","b":534575,"c":0},{"a":"GK200891","b":523367,"c":0},{"a":"GKY","b":491991,"c":0},{"a":"glitter_bomb","b":587564,"c":0},{"a":"Goddess101","b":542237,"c":0},{"a":"golden-swan","b":564881,"c":0},{"a":"GoldVictini","b":412615,"c":0},{"a":"goodwintercrop","b":422167,"c":0},{"a":"GoogleNebula","b":541815,"c":0},{"a":"goran","b":108899,"c":0},{"a":"GotToLearnItAll","b":500102,"c":0},{"a":"greenturtle3141","b":227218,"c":0},{"a":"Greg-AoPS","b":440728,"c":0},{"a":"GuardrailDearSon1","b":490558,"c":0},{"a":"Guendabiaani","b":184430,"c":0},{"a":"gunegrl","b":540993,"c":0},{"a":"hannahptl","b":213130,"c":0},{"a":"HaoranWu","b":417663,"c":0},{"a":"Haphsa","b":584498,"c":0},{"a":"heartofjade","b":326245,"c":0},{"a":"hebrian2009","b":614484,"c":0},{"a":"Hellodarkness","b":593144,"c":0},{"a":"hermioneGriffindor014","b":418937,"c":0},{"a":"hgr3","b":583045,"c":0},{"a":"hhussain85","b":346953,"c":0},{"a":"hilsaops","b":510922,"c":0},{"a":"Horselover2020","b":546885,"c":0},{"a":"hsrawat","b":388775,"c":0},{"a":"hyay","b":581421,"c":0},{"a":"hyperninja24","b":550384,"c":0},{"a":"I-am-a-chicken","b":596745,"c":0},{"a":"I-like-math123","b":407809,"c":0},{"a":"I3628800","b":457256,"c":0},{"a":"Iamnobody","b":431596,"c":0},{"a":"IamThat","b":302391,"c":0},{"a":"icedancing","b":343215,"c":0},{"a":"icelzo","b":373490,"c":0},{"a":"IceWolf10","b":401225,"c":0},{"a":"icezoubing","b":518509,"c":0},{"a":"Iemon","b":494153,"c":0},{"a":"iiRishabii","b":508258,"c":0},{"a":"Ilikeapos","b":256617,"c":0},{"a":"innumerateguy","b":313853,"c":0},{"a":"iriskornmath","b":412815,"c":0},{"a":"irlchiakinanami","b":587654,"c":0},{"a":"Ironinja186","b":355964,"c":0},{"a":"Irvin1123","b":471496,"c":0},{"a":"isaac_newton","b":588947,"c":0},{"a":"Jackson200808","b":591811,"c":0},{"a":"jamkes","b":595160,"c":0},{"a":"Jason87zh","b":343794,"c":0},{"a":"Jay0417","b":607575,"c":0},{"a":"jeff10","b":80987,"c":0},{"a":"Jenny19960727","b":593460,"c":0},{"a":"jessiewang28","b":346380,"c":0},{"a":"jeteagle","b":273709,"c":0},{"a":"JiaJia28","b":544945,"c":0},{"a":"jiansu","b":477215,"c":0},{"a":"jimxu","b":606343,"c":0},{"a":"JocyW","b":595699,"c":0},{"a":"john0512","b":522745,"c":0},{"a":"joseph.quan","b":435692,"c":0},{"a":"justice06","b":530020,"c":0},{"a":"Jxue","b":602589,"c":0},{"a":"Kagebaka","b":166446,"c":0},{"a":"Kailani","b":584679,"c":0},{"a":"Kaleveg","b":578848,"c":0},{"a":"karencaotheawesome","b":408703,"c":0},{"a":"kawaiidreamer08","b":598098,"c":0},{"a":"Keetz","b":547226,"c":0},{"a":"KellyZhao","b":413691,"c":0},{"a":"keshavr","b":555934,"c":0},{"a":"Kevin_Ding","b":612686,"c":0},{"a":"kevinlanteach","b":519133,"c":0},{"a":"kgibson","b":486601,"c":0},{"a":"Khushi19","b":425763,"c":0},{"a":"kimberly.a.kanchan","b":594730,"c":0},{"a":"Kittymaymay","b":547196,"c":0},{"a":"kittysnowball43","b":547119,"c":0},{"a":"KKrew","b":572359,"c":0},{"a":"kli0520","b":568311,"c":0},{"a":"Knowledge-is-Power","b":398308,"c":0},{"a":"kred9","b":407095,"c":0},{"a":"Kristines","b":597452,"c":0},{"a":"kungfukid","b":364618,"c":0},{"a":"lavenderbunny","b":590067,"c":0},{"a":"learningneverstops","b":486826,"c":0},{"a":"leierw","b":614403,"c":0},{"a":"lelesf","b":461270,"c":0},{"a":"LenaBlue1436","b":578642,"c":0},{"a":"lethan3","b":350639,"c":0},{"a":"lewishamilton","b":573181,"c":0},{"a":"LightMaster427","b":410048,"c":0},{"a":"LightningStar","b":484902,"c":0},{"a":"lilprofessor13","b":602932,"c":0},{"a":"lilyxwang","b":373079,"c":0},{"a":"littlepinetree","b":571622,"c":0},{"a":"litwave","b":406292,"c":0},{"a":"loiszhu","b":18551,"c":0},{"a":"LondonGirl","b":404458,"c":0},{"a":"love0827math","b":575897,"c":0},{"a":"lrjr24","b":412420,"c":0},{"a":"LT2018","b":395311,"c":0},{"a":"m.tanay","b":588216,"c":0},{"a":"MadMatt","b":472989,"c":0},{"a":"maggie_246","b":527133,"c":0},{"a":"magpiemeowl","b":612480,"c":0},{"a":"malione","b":576999,"c":0},{"a":"Mandakini","b":377377,"c":0},{"a":"Mango1","b":520816,"c":0},{"a":"mango47","b":558965,"c":0},{"a":"MarkBcc168","b":276783,"c":0},{"a":"Math_Owlz_17","b":537292,"c":0},{"a":"Math-R","b":582552,"c":0},{"a":"math101010","b":241313,"c":0},{"a":"Math2016Center","b":294963,"c":0},{"a":"math526","b":589571,"c":0},{"a":"mathaddiction","b":524652,"c":0},{"a":"MathEagles","b":272273,"c":0},{"a":"Mathematicat27","b":520117,"c":0},{"a":"Mathematics4thewin","b":592723,"c":0},{"a":"mathfan08","b":586606,"c":0},{"a":"Mathgirl03","b":264234,"c":0},{"a":"Mathgod13","b":547545,"c":0},{"a":"mathical8","b":587914,"c":0},{"a":"mathkid63","b":464125,"c":0},{"a":"Mathmagicmelon","b":574272,"c":0},{"a":"mathmunchkin","b":600010,"c":0},{"a":"MathPirate101","b":476509,"c":0},{"a":"Mathpluspianoequalslife","b":386966,"c":0},{"a":"mathtiger6","b":236812,"c":0},{"a":"maxamc","b":604526,"c":0},{"a":"MaxLIU0809","b":614475,"c":0},{"a":"maxw1","b":357984,"c":0},{"a":"mchang","b":451405,"c":0},{"a":"mcorbo1","b":543074,"c":0},{"a":"mdc650","b":595028,"c":0},{"a":"Mega-Math","b":286624,"c":0},{"a":"megaman4265","b":457962,"c":0},{"a":"megaplayer29","b":532392,"c":0},{"a":"mehrad2.718","b":530665,"c":0},{"a":"melindakuo","b":568245,"c":0},{"a":"Melody_Shen","b":595454,"c":0},{"a":"MerylChen","b":508913,"c":0},{"a":"messi_sz","b":525232,"c":0},{"a":"MetHodZhang","b":567436,"c":0},{"a":"mgcnlmath","b":354834,"c":0},{"a":"MichaelM2x","b":513985,"c":0},{"a":"michaelwen","b":350716,"c":0},{"a":"michellehan","b":415335,"c":0},{"a":"Mike25","b":599835,"c":0},{"a":"mikeguylol","b":599747,"c":0},{"a":"MinecraftFox","b":568111,"c":0},{"a":"MinecraftPlayer404","b":593804,"c":0},{"a":"mira74","b":222649,"c":0},{"a":"molocyxu","b":390376,"c":0},{"a":"mona0811","b":568576,"c":0},{"a":"monks","b":514685,"c":0},{"a":"Mr.Beast","b":491255,"c":0},{"a":"MrDyno7","b":348049,"c":0},{"a":"MRENTHUSIASM","b":180334,"c":0},{"a":"MrJazzy","b":565769,"c":0},{"a":"muping","b":407697,"c":0},{"a":"Muqiliang","b":496421,"c":0},{"a":"Nana1","b":556076,"c":0},{"a":"naomili","b":593761,"c":0},{"a":"natmath","b":293177,"c":0},{"a":"nbr7","b":302363,"c":0},{"a":"nerd_07","b":609139,"c":0},{"a":"neymar2020","b":548022,"c":0},{"a":"ng_abq","b":533678,"c":0},{"a":"nghia71","b":261108,"c":0},{"a":"nh202330","b":427286,"c":0},{"a":"NHJ10723","b":567992,"c":0},{"a":"nicarmt","b":395634,"c":0},{"a":"Nika23","b":350514,"c":0},{"a":"NInjas25","b":514392,"c":0},{"a":"Nishanth1234","b":483333,"c":0},{"a":"niuniuqiqi","b":237037,"c":0},{"a":"nmforce007","b":570722,"c":0},{"a":"nmrandomness","b":602518,"c":0},{"a":"OGT2020","b":589095,"c":0},{"a":"OliviaSheng","b":614481,"c":0},{"a":"origamibug","b":586162,"c":0},{"a":"osunm","b":557598,"c":0},{"a":"Owjebra","b":420755,"c":0},{"a":"P-KAY9","b":586480,"c":0},{"a":"Panda2006","b":312357,"c":0},{"a":"parmenides51","b":167643,"c":0},{"a":"pastalinguine","b":589325,"c":0},{"a":"pat_saa","b":397929,"c":0},{"a":"Peekachu07","b":462698,"c":0},{"a":"PenguinMoosey","b":570827,"c":0},{"a":"phoenixtan","b":542290,"c":0},{"a":"PhysKid11","b":566884,"c":0},{"a":"PiGuy3141592","b":288371,"c":0},{"a":"Pikachiu12345","b":578155,"c":0},{"a":"pimath","b":293322,"c":0},{"a":"pineapple-pizza-123","b":581535,"c":0},{"a":"pineapple914","b":470019,"c":0},{"a":"Pleaseletmewin","b":513074,"c":0},{"a":"pog","b":492517,"c":0},{"a":"pohoatza","b":18812,"c":0},{"a":"Polarbear267","b":428444,"c":0},{"a":"pp_poduval","b":298592,"c":0},{"a":"puffypundo","b":587435,"c":0},{"a":"Qing1210","b":399443,"c":0},{"a":"Quantum_fluctuations","b":413726,"c":0},{"a":"RaccoonAoPS","b":474876,"c":0},{"a":"rachelchenmath","b":437598,"c":0},{"a":"RainaRose","b":490758,"c":0},{"a":"redcarpet","b":252257,"c":0},{"a":"redfiredragon","b":444941,"c":0},{"a":"redjive_1","b":591231,"c":0},{"a":"RedSoxTD9","b":589817,"c":0},{"a":"renks03","b":203314,"c":0},{"a":"Revquant","b":560957,"c":0},{"a":"richardhh","b":518792,"c":0},{"a":"RiChRaCh","b":356268,"c":0},{"a":"rishikallamadi","b":565737,"c":0},{"a":"rishinanda08","b":508214,"c":0},{"a":"roaster","b":553317,"c":0},{"a":"rockyrockrock","b":347242,"c":0},{"a":"Ronald_Feng","b":376841,"c":0},{"a":"rondoallaturca","b":403883,"c":0},{"a":"Rong301060","b":589322,"c":0},{"a":"RP3.1415","b":547822,"c":0},{"a":"rqhu","b":332843,"c":0},{"a":"ruffnut","b":565863,"c":0},{"a":"ryan1218","b":554569,"c":0},{"a":"Ryan3","b":416512,"c":0},{"a":"s.jahnavi.t","b":597688,"c":0},{"a":"s214425","b":389964,"c":0},{"a":"Samzhang2008","b":584286,"c":0},{"a":"sans_deltarune13","b":599375,"c":0},{"a":"scibeast","b":487708,"c":0},{"a":"sdoboli","b":530351,"c":0},{"a":"SeanSchuster","b":585727,"c":1},{"a":"ShadowShray","b":589222,"c":0},{"a":"shagha_new","b":355406,"c":0},{"a":"sherrylei","b":348746,"c":0},{"a":"shrieval1","b":331484,"c":0},{"a":"shuang123","b":515615,"c":0},{"a":"sihan.li","b":587013,"c":0},{"a":"sillymickey","b":413254,"c":0},{"a":"SilverDragon246","b":534519,"c":0},{"a":"simplemath235","b":472637,"c":0},{"a":"singhadi000","b":596965,"c":0},{"a":"Sisiceo","b":546588,"c":0},{"a":"skyscraper","b":223564,"c":0},{"a":"SkywalkerAUV","b":472804,"c":0},{"a":"sneakerman51","b":472290,"c":0},{"a":"snoopy08","b":602035,"c":0},{"a":"snowdome","b":585941,"c":0},{"a":"snowstorm128","b":514238,"c":0},{"a":"soccerranger","b":505356,"c":0},{"a":"SophieWu09","b":512629,"c":0},{"a":"soumitra2015rta","b":468659,"c":0},{"a":"Spacesam","b":379010,"c":0},{"a":"SpaceX","b":614478,"c":0},{"a":"sragha1","b":614476,"c":0},{"a":"srijankarthik","b":481394,"c":0},{"a":"star168","b":512675,"c":0},{"a":"Staragon","b":557179,"c":0},{"a":"stu98765","b":553380,"c":0},{"a":"sub_math","b":370777,"c":0},{"a":"Subpixel","b":340639,"c":0},{"a":"Summerlin2159","b":591366,"c":0},{"a":"surajvarma","b":545396,"c":0},{"a":"svandevorst","b":499315,"c":0},{"a":"szheng0312","b":540990,"c":0},{"a":"TanHai","b":500206,"c":0},{"a":"TarPlab","b":338815,"c":0},{"a":"TasYaz","b":612762,"c":0},{"a":"tawee","b":480319,"c":0},{"a":"Tejasveer","b":535016,"c":0},{"a":"TenEggs","b":544138,"c":0},{"a":"teomihai","b":292319,"c":0},{"a":"The_Elephant","b":312489,"c":0},{"a":"The_SDY","b":597027,"c":0},{"a":"TheGeometer","b":461772,"c":0},{"a":"Themathcountskitties","b":239212,"c":0},{"a":"Themightyfinn","b":415403,"c":0},{"a":"thetj","b":597713,"c":0},{"a":"ThunderStrike314","b":555449,"c":0},{"a":"tigerbw","b":544324,"c":0},{"a":"tigershark22","b":281224,"c":0},{"a":"tigerwu01","b":499896,"c":0},{"a":"timothywang835","b":568248,"c":0},{"a":"tintin21","b":476903,"c":0},{"a":"TooMuchAC","b":428311,"c":0},{"a":"tpras71","b":401413,"c":0},{"a":"treedoeseverything","b":506442,"c":0},{"a":"triggod","b":518060,"c":0},{"a":"TripleH","b":585028,"c":0},{"a":"Trouble9","b":510749,"c":0},{"a":"TsunamiStorm08","b":528051,"c":0},{"a":"turtles0120","b":354228,"c":0},{"a":"twinbrian","b":393119,"c":0},{"a":"tzee","b":347639,"c":0},{"a":"Uels369","b":530401,"c":0},{"a":"Ultimate_Drinker","b":256000,"c":0},{"a":"Unicorn-van-Beethoven","b":599139,"c":0},{"a":"vapodaca","b":431370,"c":1},{"a":"Velinquish","b":436882,"c":0},{"a":"VipMath","b":583288,"c":0},{"a":"Vivek1295_9","b":415122,"c":0},{"a":"VivianLiao","b":550869,"c":0},{"a":"vkp78","b":402454,"c":0},{"a":"wamofan","b":351989,"c":0},{"a":"westeagle","b":590946,"c":0},{"a":"Williamgolly","b":420311,"c":0},{"a":"williamxiao","b":419386,"c":0},{"a":"Wizard0001","b":581631,"c":0},{"a":"wm2009","b":161658,"c":0},{"a":"xinghua000","b":596643,"c":0},{"a":"yahwism1114","b":609496,"c":0},{"a":"yash_aops","b":529105,"c":0},{"a":"yayitsme","b":543927,"c":0},{"a":"YellowGoose","b":570800,"c":0},{"a":"Yellowsiri","b":566873,"c":0},{"a":"ylight","b":367078,"c":0},{"a":"Yoly","b":477156,"c":0},{"a":"Yongyue","b":358098,"c":0},{"a":"Yoyo7","b":543993,"c":0},{"a":"Yoyoram18","b":595350,"c":0},{"a":"Yuncongevanliu","b":573226,"c":0},{"a":"Yuvraj1","b":546429,"c":0},{"a":"YX0171","b":594555,"c":0},{"a":"yyt","b":565884,"c":0},{"a":"zfran","b":504182,"c":0}]}},"global_announcements":[],"preload_watchers":{"526261":{"num_named_watchers":0,"num_watchers":0,"watchers_usernames":"","watchers_avatars":""},"526262":{"num_named_watchers":2,"num_watchers":3,"watchers_usernames":" blawho12 yayitsme","watchers_avatars":"\\/\\/avatar.artofproblemsolving.com\\/avatar_543927.png \\/\\/avatar.artofproblemsolving.com\\/avatar_127970.jpg?t=1471184976"},"2146067":{"num_named_watchers":1,"num_watchers":1,"watchers_usernames":"Holmes777","watchers_avatars":"\\/\\/avatar.artofproblemsolving.com\\/avatar_422022.png"},"2255141":{"num_named_watchers":0,"num_watchers":0,"watchers_usernames":"","watchers_avatars":""},"2271372":{"num_named_watchers":0,"num_watchers":0,"watchers_usernames":"","watchers_avatars":""},"2280468":{"num_named_watchers":1,"num_watchers":1,"watchers_usernames":"blawho12","watchers_avatars":"\\/\\/avatar.artofproblemsolving.com\\/avatar_127970.jpg?t=1471184976"},"2299656":{"num_named_watchers":1,"num_watchers":1,"watchers_usernames":"kittysnowball43","watchers_avatars":"\\/\\/avatar.artofproblemsolving.com\\/avatar_547119.png"},"2300540":{"num_named_watchers":0,"num_watchers":1,"watchers_usernames":"","watchers_avatars":""},"2300717":{"num_named_watchers":0,"num_watchers":0,"watchers_usernames":"","watchers_avatars":""},"2300773":{"num_named_watchers":0,"num_watchers":0,"watchers_usernames":"","watchers_avatars":""},"2301641":{"num_named_watchers":1,"num_watchers":2,"watchers_usernames":" Revquant","watchers_avatars":"\\/\\/avatar.artofproblemsolving.com\\/avatar_560957.png"},"2301851":{"num_named_watchers":0,"num_watchers":3,"watchers_usernames":"","watchers_avatars":""},"2301916":{"num_named_watchers":0,"num_watchers":0,"watchers_usernames":"","watchers_avatars":""},"2301941":{"num_named_watchers":0,"num_watchers":0,"watchers_usernames":"","watchers_avatars":""},"2302385":{"num_named_watchers":1,"num_watchers":2,"watchers_usernames":" I3628800","watchers_avatars":"\\/\\/avatar.artofproblemsolving.com\\/avatar_457256.png"},"2302552":{"num_named_watchers":0,"num_watchers":1,"watchers_usernames":"","watchers_avatars":""},"2302809":{"num_named_watchers":2,"num_watchers":5,"watchers_usernames":" lethan3 lrjr24","watchers_avatars":"\\/\\/avatar.artofproblemsolving.com\\/avatar_412420.png?t=1593469732 \\/\\/avatar.artofproblemsolving.com\\/avatar_350639.png?t=1596496101"},"2302883":{"num_named_watchers":0,"num_watchers":0,"watchers_usernames":"","watchers_avatars":""},"2302897":{"num_named_watchers":0,"num_watchers":0,"watchers_usernames":"","watchers_avatars":""},"2302908":{"num_named_watchers":0,"num_watchers":0,"watchers_usernames":"","watchers_avatars":""},"2302915":{"num_named_watchers":2,"num_watchers":2,"watchers_usernames":"parmenides51 VipMath","watchers_avatars":"\\/\\/avatar.artofproblemsolving.com\\/avatar_583288.png \\/\\/avatar.artofproblemsolving.com\\/avatar_167643.png?t=1472410314"},"2302946":{"num_named_watchers":0,"num_watchers":0,"watchers_usernames":"","watchers_avatars":""},"2302959":{"num_named_watchers":0,"num_watchers":0,"watchers_usernames":"","watchers_avatars":""},"2302965":{"num_named_watchers":1,"num_watchers":1,"watchers_usernames":"El_matematico","watchers_avatars":"\\/\\/avatar.artofproblemsolving.com\\/avatar_422291.png"}},"logout_url":"\\/community"};\n  AoPS.bd = AoPS.bootstrap_data; // Alias!\n\tAoPS.session = {"id":"ba4019ffd1311b673831d20e2ebda82b","user_id":1,"username":"Anonymous","avatar":"","logged_in":false,"role":"unregistered_user","a":false,"n":false,"show_privacy":null,"cmty_collection":""};\n\tAoPS.bd.assetVersion = 2887;\n  AoPS.bd.environment = \'production\';\n\tAoPS.protected_url = \'https://artofproblemsolving.com/\';\t\n\tAoPS.aops_url = \'https://artofproblemsolving.com/\';\n\tAoPS.academy_url = \'https://aopsacademy.org/\';\n</script>\n\t\t\n<script>\n\tAoPS.sentry = {};\n \tAoPS.sentry.assetVersion = 2887;\n \tAoPS.sentry.aopsEnvironment = \'production\';\n\tAoPS.sentry.acadEnvironment = \'\';\n\tAoPS.repo = \'aops\';\n </script>\n\n  <script src="/assets/dist/v1404/aops_errors.js"></script>\n\n\t\t<link rel="apple-touch-icon" href="/apple-touch-icon.png">\n\n\t\t\t\t\t\t\t\t\t\t\t\t<meta charset="utf-8">\n\t\t<meta http-equiv="X-UA-Compatible" content="IE=edge">\n\t\t<meta name="viewport" content="initial-scale=1">\n\t\t<meta name="referrer" content="origin">\n\n\t\t\n\t\t<link rel="apple-touch-icon" href="//assets.artofproblemsolving.com/images/apple-touch-icon.png">\n\t\t<title>Math Message Boards FAQ & Community Help | AoPS</title>\n\n\t\t\n\t\t<link href="/assets/fonts/font-awesome/css/all.css" rel="stylesheet">\n\n\t\t\t\t\t<link rel="stylesheet" href="/assets/dist/v1404/css/main-head.css">\n\t\t\t<link rel="stylesheet" href="/assets/dist/v1404/css/sharedsite.css">\n\t\t\t<link rel="stylesheet" href="/assets/dist/v1404/css/navheader.css">\n\t\t\t<link rel="stylesheet" href="/assets/dist/v1404/css/footer.css">\n\t\t\n\t\t\t\t\t<link rel="icon" href="/online-favicon.ico?v=2">\n\t\t\n\t\t\t\t\t\t<link rel="stylesheet" href="/assets/pythonbook/_static/codemirrorEdited.css?__v__=2887">\n\t\t\t\t\t\t<link rel="stylesheet" href="/assets/dist/v1404/css/feed.css?v=58">\n\t\t\t\t\t\t<link rel="stylesheet" href="/assets/dist/v1404/css/community_common.css?v=58j">\n\t\t\t\t\t\t<link rel="stylesheet" href="/assets/vendor/dropzone/css/dropzone.css?__v__=2887">\n\t\t\t\t\t\t<link rel="stylesheet" href="/assets/dist/v1404/css/community.css?v=58">\n\t\t\t\t\t\t<link rel="stylesheet" href="/assets/dist/v1404/css/community_header.css?v=58">\n\t\t\n\t\t<script crossorigin="anonymous" src="https://polyfill.io/v3/polyfill.min.js?features=Array.prototype.fill%2CArray.prototype.find%2CArray.prototype.findIndex%2CArray.prototype.includes%2CString.prototype.endsWith%2CString.prototype.includes%2CString.prototype.startsWith%2CString.prototype.repeat%2CURL"></script>\n<script>\n  if (!window.console) console = {log: function() {}, dir: function() {}};\n  $$ = function( selector ) { return document.getElementById( selector ); }\n</script>\n\n\t\t\t\t\t\t<script src="//assets.artofproblemsolving.com/js/jquery.min.js"></script>\n\t\t\t\t\t\t\t</head>\n\t\t<body class="production community small-footer">\n\t\t\t\t\t\t<noscript>\n\t\t\t\t\t<iframe src="https://www.googletagmanager.com/ns.html?id=GTM-59JWRGZ"\n\t\theight="0" width="0" style="display:none;visibility:hidden"></iframe>\n\t\t\t</noscript>\n\t\t\t\t<div id="page-wrapper">\n\n\t\t\t<!-- search:off -->\n\t\t\t\n\t\t\t<div id="header-wrapper" class="no-select">\n\t\t\t\t<div class="header-underlay">\n\t\t\t\t\t<div id="header">\n\n\t\t\t\t\t\t<!-- The gray bar at top -->\n\t\t\t\t\t\t<!-- see shared-site.css -->\n\t\t\t\t\t\t<div id="top-bar" class="sharedsite-wrapper">\n\t\t\t\t\t\t\t<div class="sharedsitebar">\n\t\t\t\t\t\t\t\t<a href="/" class="mobile-title"></a>\n\t\t\t\t\t\t\t\t<div class="sharedsite-links">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<a class="site-link main" href="/company">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tArt of Problem Solving\n\t\t\t\t\t\t\t\t\t</a>\n\t\t\t\t\t\t\t\t\t<div class="site">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<a class="site-link selected" href="/">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img src="/assets/images/logos/icon-online.svg" class="site-icon">\n\t\t\t\t\t\t\t\t\t\t\t<span class="site-name">AoPS Online</span>\n\t\t\t\t\t\t\t\t\t\t</a>\n\t\t\t\t\t\t\t\t\t\t<!-- Rich dropdown -->\n\t\t\t\t\t\t\t\t\t\t<div class="site-dropdown-wrapper">\n\t\t\t\t\t\t\t\t\t\t\t<div class="site-dropdown">\n\t\t\t\t\t\t\t\t\t\t\t\t<div class="site-info">\n\t\t\t\t\t\t\t\t\t\t\t\t\t<div class="site-logo">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img src="/assets/images/logos/aops-online.svg"/>\n\t\t\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<div class="site-snippet">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tMath texts, online classes, and more\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<br/>for students in grades 5-12.\n\t\t\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<a target="_blank" class="site-visit aops-primary" href="/">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tVisit AoPS Online <span class="aops-font">\xe2\x80\x9a</span>\n\t\t\t\t\t\t\t\t\t\t\t\t\t</a>\n\t\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t\t\t<div class="site-quick-nav">\n\t\t\t\t\t\t\t\t\t\t\t\t\t<a target="_blank" href="/store" class="btn btn-primary aops-btn">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tBooks for Grades 5-12\n\t\t\t\t\t\t\t\t\t\t\t\t\t</a>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<a target="_blank" href="/school" class="btn btn-primary aops-btn">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tOnline Courses\n\t\t\t\t\t\t\t\t\t\t\t\t\t</a>\n\t\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t<!-- End rich dropdown -->\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t<div class="site">\n\t\t\t\t\t\t\t\t\t\t<a class="site-link" href="https://beastacademy.com">\n\t\t\t\t\t\t\t\t\t\t\t<img src="/assets/images/logos/icon-ba.svg" class="site-icon">\n\t\t\t\t\t\t\t\t\t\t\t<span class="site-name">Beast Academy</span>\n\t\t\t\t\t\t\t\t\t\t</a>\n\t\t\t\t\t\t\t\t\t\t<div class="site-dropdown-wrapper">\n\t\t\t\t\t\t\t\t\t\t\t<div class="site-dropdown">\n\t\t\t\t\t\t\t\t\t\t\t\t<div class="site-info">\n\t\t\t\t\t\t\t\t\t\t\t\t\t<div class="site-logo">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img src="/assets/images/logos/aops-ba.svg"/>\n\t\t\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<div class="site-snippet">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tEngaging math books and online learning\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<br/>for students ages 8-13.\n\t\t\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<a target="_blank" class="site-visit ba-primary" href="https://beastacademy.com">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tVisit Beast Academy <span class="aops-font">\xe2\x80\x9a</span>\n\t\t\t\t\t\t\t\t\t\t\t\t\t</a>\n\t\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t\t\t<div class="site-quick-nav">\n\t\t\t\t\t\t\t\t\t\t\t\t\t<a target="_blank" href="https://beastacademy.com/books" class="btn btn-primary ba-btn">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tBooks for Ages 8-13\n\t\t\t\t\t\t\t\t\t\t\t\t\t</a>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<a target="_blank" href="https://beastacademy.com/online" class="btn btn-primary ba-btn">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tBeast Academy Online\n\t\t\t\t\t\t\t\t\t\t\t\t\t</a>\n\t\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t<div class="site">\n\t\t\t\t\t\t\t\t\t\t<a class="site-link" href="//aopsacademy.org">\n\t\t\t\t\t\t\t\t\t\t\t<img src="/assets/images/logos/icon-academy.svg" class="site-icon">\n\t\t\t\t\t\t\t\t\t\t\t<span class="site-name">AoPS Academy</span>\n\t\t\t\t\t\t\t\t\t\t</a>\n\t\t\t\t\t\t\t\t\t\t<div class="site-dropdown-wrapper">\n\t\t\t\t\t\t\t\t\t\t\t<div class="site-dropdown">\n\t\t\t\t\t\t\t\t\t\t\t\t<div class="site-info">\n\t\t\t\t\t\t\t\t\t\t\t\t\t<div class="site-logo">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img src="/assets/images/logos/aops-academy.svg"/>\n\t\t\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<div class="site-snippet">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tNationwide learning centers\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<br/>for students in grades 2-12.\n\t\t\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<a target="_blank" class="site-visit academy-primary" href="//aopsacademy.org">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tVisit AoPS Academy <span class="aops-font">\xe2\x80\x9a</span>\n\t\t\t\t\t\t\t\t\t\t\t\t\t</a>\n\t\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t\t\t<div class="site-quick-nav">\n\t\t\t\t\t\t\t\t\t\t\t\t\t<a target="_blank" href="//aopsacademy.org/campuses" class="btn btn-primary academy-btn">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tFind a Campus\n\t\t\t\t\t\t\t\t\t\t\t\t\t</a>\n\t\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\n\t\t\t\t\t\t<!-- The white area where main menu options appear -->\n\n\t\t\t\t\t\t<!-- The menu links -->\n\t\t\t\t\t\t\t\t\t\t\t\t\t<div id="main-menubar">\n\t\t\t\t\t\t\t\t<div class="menubar-content">\n\t\t\t\t\t\t\t\t\t<div class="menubar-logo online">\n\t\t\t\t\t\t\t\t\t\t<img class="menubar-hamburger" src="/assets/images/hamburger.svg"/>\n\t\t\t\t\t\t\t\t\t\t<a class="logo-img-link" href="/online">\n\t\t\t\t\t\t\t\t\t\t\t<img class="logo-img" src="/assets/images/logos/aops-online.svg"/>\n\t\t\t\t\t\t\t\t\t\t\t<img class="logo-img-mobile" src="/assets/images/logos/aops-online-mobile.svg"/>\n\t\t\t\t\t\t\t\t\t\t\t<img class="logo-img-small" src="/assets/images/logos/aops-online-mobile.svg"/>\n\t\t\t\t\t\t\t\t\t\t</a>\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t<div class="menubar-links-outer">\n\t\t\t\t\t\t\t\t\t\t<!-- The login links -->\n\t\t\t\t\t\t\t\t\t\t<div class="menu-login-wrapper online">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<div class="menu-login-item">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<div id="header-login" class="login-button online-login-button no-select not-signed-in">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tSign In/<br class="sign-in-break">Register\n\t\t\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</div>\n\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t<div class="menubar-labels online">\n\t\t\t\t\t\t\t\t\t\t\t                      <div class="menubar-label school">\n                        <div class="menubar-label-link-outer">\n                          <a class="menubar-label-link " href="/school">\n                            online school\n                          </a>\n                        </div>\n                        <div class="menubar-dropdown">\n                          <div class="triangle"></div>\n                          <div class="dropdown-content">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<!-- These have IDs for A/B testing purposes. T27691 -->\n                                                        <a id="online-school-menu-how-school-works" href="/school/how-school-works"> How Classes Work </a>\n                            <a id="online-school-menu-catalog" href="/school/catalog"> Course Catalog </a>\n                            <a id="online-school-menu-schedule" href="/school/schedule"> Class Schedule </a>\n                            <a id="online-school-menu-recommmendations" href="/school/recommendations"> Recommendations </a>\n                            <a id="online-school-menu-woot-courses" href="/school/woot?gtmlist=School_Nav"> WOOT Courses </a>\n                            <a id="online-school-menu-handbook" href="/school/handbook/prospective">\n                              School Handbook </a>\n                            <a id="online-school-menu-mathjams" href="/school/mathjams"> Math Jams </a>\n                                                                                  </div>\n                        </div>\n                      </div>\n                      <div class="menubar-label store">\n                        <div class="menubar-label-link-outer">\n                          <a class="menubar-label-link " href="/store">\n                            books<span class="menubar-link-ext">tore </span>\n                          </a>\n                        </div>\n                        <div class="menubar-dropdown">\n                          <div class="triangle"></div>\n                          <div class="dropdown-content">\n                                                                                                                <a href="/store/list/aops-curriculum">AoPS Curriculum</a>\n                            <a href="/store/list/beast-academy">Beast Academy</a>\n                            <a href="/store/online">Online Books</a>\n                            <a href="/store/recommendations">Recommendations</a>\n                            <a href="/store/list/other-products">Other Books &amp; Gear</a>\n                            <a href="/store/list/all-products">All Products</a>\n                            <a href="/store/gift-certificates?gtmlist=Bookstore_Nav">Gift Certificates</a>\n                                                      </div>\n                        </div>\n                      </div>\n                      <div class="menubar-label community">\n                        <div class="menubar-label-link-outer">\n                          <a class="menubar-label-link selected" href="/community">\n                            community\n                          </a>\n                        </div>\n                        <div class="menubar-dropdown">\n                          <div class="triangle"></div>\n                          <div class="dropdown-content">\n                                                        <a data-cmty href="/community">Forums</a>\n                            <a data-cmty href="/community/c13_contests">Contests</a>\n                            <a data-cmty href="/community/search">Search</a>\n                            <a data-cmty href="/community/faq">Help</a>\n                                                                                                              </div>\n                        </div>\n                      </div>\n                      <div class="menubar-label resources">\n                        <div class="menubar-label-link-outer">\n                          <a class="menubar-label-link " href="/resources">\n                            resources\n                          </a>\n                        </div>\n                        <div class="menubar-dropdown">\n                          <div class="triangle"></div>\n                          <div class="dropdown-content">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<div class="dropdown-columns">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<div class="dropdown-category">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span class="dropdown-category-label">math training & tools</span>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<a href="/alcumus">Alcumus</a>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<a href="/videos">Videos</a>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<a href="/ftw">For the Win!</a>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<a href="/mathcounts_trainer">MATHCOUNTS Trainer</a>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<a href="/wiki/index.php?title=Main_Page">AoPS Wiki</a>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<a href="/texer">LaTeX TeXeR</a>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<a href="/polymath">MIT PRIMES/CrowdMath</a>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<a href="/keeplearning">Keep Learning</a>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<div class="dropdown-column">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<div class="dropdown-category category-in-column">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span class="dropdown-category-label">contests on aops</span>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<a href="/contests/amc">AMC</a>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<a href="/contests/mathcounts">MATHCOUNTS</a>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<a href="/contests">Other Contests</a>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<div class="dropdown-category category-in-column">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span class="dropdown-category-label">emergency homeschool</span>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<a href="/homeschool">Curriculum Recs</a>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<a href="/homeschool/podcast">Podcast</a>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<div class="dropdown-category category-in-column">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span class="dropdown-category-label">just for fun</span>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<a href="/reaper">Reaper</a>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<a href="/greedcontrol">Greed Control</a>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<div class="dropdown-view-more-link-container">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<a href="/resources" class="dropdown-view-more-link">view all <span class="aops-icon">0</span></a>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t</div>\n                          </div>\n                        </div>\n                      </div>\n                                            <div class="menubar-label menu-login-item">\n                                                  <div id="header-login" class="login-button online-login-button no-select">\n                            Sign In/Register\n                          </div>\n                                              </div>\n                                          </div>\n                  </div>\n                </div>\n              </div>\n                      </div>\n        </div>\n\n\t\t\t\t\t\t\t\t<noscript>\n\t\t\t\t\t<div class="infobar">JavaScript is not enabled. JavaScript is required to fully utilize the site.</div>\n\t\t\t\t</noscript>\n\n\n\t\t\t\t\t\t\t\t\t<div id="breadcrumbs-wrapper">\n\t\t\t\t\t\t<div id="submenu-icon"></div>\n\t\t\t\t\t\t<div id="breadcrumbs">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<div class="crumb-wrapper">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span class="crumb crumb-1">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<a href="/community/index.php">Community</a>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t\t\t\t</div>\n\n\t\t\t<!-- search icon script lives in footer.phtml-->\n\n\t\t\t<!-- /search:off -->\n<div id="main-content">\n\t<div id="main-column-standard">\n\t\t\n\t</div>\n</div>\n\n<!-- search:off -->\n\t<div class="clearfix"></div>\n\n\t\n\t<div id="main-footer" class="no-print">\n\t\t<div class="footer-container">\n\t\t\t<div class="footer-topRow">\n\t\t\t\t\t\t\t\t\t\t\t<a href="/online">\n\t\t\t\t\t\t\t<img class="footer-mainLogo"\n\t\t\t\t\t\t\tsrc="/assets/images/logos/aops-online-footer.svg"/>\n\t\t\t\t\t\t</a>\n\t\t\t\t\t\t\t\t\t\t<div class="footer-wasc">\n\t\t\t\t\t\t<span>\n\t\t\t\t\t\t\tArt of Problem Solving is an\n\t\t\t\t\t\t\t<br class="wasc-break"/>\n\t\t\t\t\t\t\t<span class="footer-accredited">ACS WASC Accredited School</span>\n\t\t\t\t\t\t</span>\n\t\t\t\t\t\t<img class="footer-wascLogo"\n\t\t\t\t\t\tsrc="/assets/images/logos/wasc.png"/>\n\t\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t<div class="footer-links">\n\t\t\t\t<div class="footer-col">\n\t\t\t\t\t<div class="footer-colHeader">aops programs</div>\n\t\t\t\t\t<div><a class="link" href="https://artofproblemsolving.com/online">AoPS Online</a></div>\n\t\t\t\t\t<div><a class="link" href="https://beastacademy.com">Beast Academy</a></div>\n\t\t\t\t\t<div><a class="link" href="//aopsacademy.org">AoPS Academy</a></div>\n\t\t\t\t</div>\n\n\t\t\t\t<div class="footer-col">\n\t\t\t\t\t<div class="footer-colHeader">About</div>\n\t\t\t\t\t<div><a class="link" href="/company/about">About AoPS</a></div>\n\t\t\t\t\t<div><a class="link" href="/company/staff">Our Team</a></div>\n\t\t\t\t\t<div><a class="link" href="/company/history">Our History</a></div>\n\t\t\t\t\t<div><a class="link" href="/company/careers">Jobs</a></div>\n\t\t\t\t</div>\n\n\t\t\t\t<div class="footer-col">\n\t\t\t\t\t<div class="footer-colHeader" style="left:-1px;">Site Info</div>\n\t\t\t\t\t<div><a class="link" href="/company/tos">Terms</a></div>\n\t\t\t\t\t<div><a class="link" href="/company/privacy">Privacy</a></div>\n\t\t\t\t\t\t\t\t\t\t\t<div><a class="link" href="/contact">Contact Us</a></div>\n\t\t\t\t\t\t\t\t\t</div>\n\n\t\t\t\t<div class="footer-col social">\n\t\t\t\t\t<div class="footer-colHeader">follow us</div>\n\t\t\t\t\t<div class="footer-social">\n\t\t\t\t\t\t\t\t\t\t\t\t\t<a class="link" target="_blank" href="https://www.facebook.com/artofproblemsolving">\n\t\t\t\t\t\t\t\t<img src="/assets/images/socialmedia/facebook.svg" class="sm-icon"/>\n\t\t\t\t\t\t\t</a>\n\t\t\t\t\t\t\t<a class="link" target="_blank" href="http://twitter.com/AoPSNews">\n\t\t\t\t\t\t\t\t<img src="/assets/images/socialmedia/twitter.svg" class="sm-icon"/>\n\t\t\t\t\t\t\t</a>\n\t\t\t\t\t\t\t<a class="link" target="_blank" href="https://www.pinterest.com/artofproblemsolving/pins/">\n\t\t\t\t\t\t\t\t<img src="/assets/images/socialmedia/pinterest.svg" class="sm-icon"/>\n\t\t\t\t\t\t\t</a>\n\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t<div class="footer-col subscribe">\n\t\t\t\t\t\t<div class="footer-colHeader">\n\t\t\t\t\t\t\tSubscribe for news and updates\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<form method="post" action="/mailinglist">\n\t\t\t\t\t\t\t<input data-hj-suppress="" data-hj-masked="" type="email" class="footer-email" placeholder="Enter e-mail" name="subscribe-email">\n\t\t\t\t\t\t\t<input type="hidden" name="new-books" value="on">\n\t\t\t\t\t\t\t<input type="hidden" name="classes" value="on">\n\t\t\t\t\t\t\t<input type="hidden" name="mathjams" value="on">\n\t\t\t\t\t\t\t<input type="submit" class="footer-submit" value="">\n\t\t\t\t\t\t\t<div class="footer-submit-arrow">\n\t\t\t\t\t\t\t\t<svg x="0px" y="0px" viewBox="0 0 289 289" enable-background="new 0 0 289 289">\n\t\t\t\t\t\t\t\t\t<g>\n\t\t\t\t\t\t\t\t\t\t<path class="arrow-fill" d="M121.5,220.5c-2.6,0-5.1-1-7.1-2.9c-3.9-3.9-3.9-10.2,0-14.1l58.9-58.9l-58.9-58.9c-3.9-3.9-3.9-10.2,0-14.1c3.9-3.9,10.2-3.9,14.1,0l66,66c3.9,3.9,3.9,10.2,0,14.1l-66,66C126.6,219.5,124.1,220.5,121.5,220.5z"/>\n\t\t\t\t\t\t\t\t\t</g>\n\t\t\t\t\t\t\t\t</svg>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</form>\n\t\t\t\t\t</div>\n\t\t\t\t\t\t\t</div>\n\t\t\t<div class="copyright">\n\t\t\t\t<span>&copy; 2020 AoPS Incorporated\n\t\t\t\t</span>\n\t\t\t</div>\n\t\t</div>\n\t</div>\n\n\t<div id="small-footer-wrapper">\n\t\t<div class="footer-container">\n\t\t\t\t\t\t\t<a href="/online">\n\t\t\t\t\t<img class="footer-mainLogo"\n\t\t\t\t\tsrc="/assets/images/logos/aops-online-footer.svg"/>\n\t\t\t\t</a>\n\t\t\t\t\t\t<div class="copyright">\n\t\t\t\t&copy; 2020 Art of Problem Solving\n\t\t\t\t<div class="copyright-links">\n\t\t\t\t\t<a href="/company">About Us</a>\n\t\t\t\t\t&nbsp;\xe2\x80\xa2&nbsp;\n\t\t\t\t\t\t\t\t\t\t\t<a href="/contact">Contact Us</a>\n\t\t\t\t\t\t\t\t\t\t&nbsp;\xe2\x80\xa2&nbsp;\n\t\t\t\t\t<a href="/company/tos">Terms</a>\n\t\t\t\t\t&nbsp;\xe2\x80\xa2&nbsp;\n\t\t\t\t\t<a href="/company/privacy">Privacy</a>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t</div>\n\n\n\t<form id="registration-form" method="post" action="/user/register.php">\n\t<input type="hidden" name="username" value="">\n\t<input type="hidden" name="password" value="">\n\t<input type="hidden" name="from-login" value="true">\n\t</form>\n\t<div id="login-form">\n\n\t\t<div class="error">\n\t\t\tInvalid username\n\t\t</div>\n\n\t\t<div class="info" style="text-align:center">\n\t\t<img width="200" src="https://artofproblemsolving.com/assets/images/logos/aops-online.svg">\n\t\t<span style="position:relative;color:#1A355D;font-size:30px;left:3px;top:7px;display:inline-block">Sign In</span>\n\t\t</div>\n\t\t<form>\n\t\t\t<div class="form-group username">\n\t\t\t\t<div>\n\t\t\t\t\t<label>Username:</label>\n\t\t\t\t</div>\n\t\t\t\t<div>\n\t\t\t\t\t<input data-hj-suppress="" data-hj-masked="" name="username" class="form-control" id="login-username" type="text" placeholder="Enter username or email address" autocapitalize="off">\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t<div class="form-group password">\n\t\t\t\t<div>\n\t\t\t\t\t<label>Password:</label>\n\t\t\t\t</div>\n\t\t\t\t<div>\n\t\t\t\t\t<input data-hj-suppress="" data-hj-masked="" name="password" class="form-control" id="login-password" type="hidden" placeholder="Enter password" autocomplete="off">\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</form>\n\t\t<div class="form-group">\n\t\t\t<div>\n\t\t\t</div>\n\t\t\t<div class="login-buttons">\n\t\t\t\t<button class="btn btn-primary" id="login-button" href="#">Sign In</button>\n\t\t\t\t<button class="btn" id="register-button" href="#">Create Account</button>\n\t\t\t\t<div style="margin-top:5px;box-sizing: border-box;">\n\t\t\t\t\t<label style="display:block;float:left;padding-right:10px;white-space:nowrap;line-height:1em;font-weight:normal">\n\t\t\t\t\t\t<input type="checkbox" name="stay-logged-in" id="login-stay-logged-in" style="vertical-align:middle;margin:0;">\n\t\t\t\t\t\t<span style="vertical-align:middle">Stay signed in</span>\n\t\t\t\t\t</label>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\n\t\t<div id="login-form-links">\n\t\t\t<p>\n\t\t\t\t<a href="/user/resend-activation.php">Lost your activation email?</a>\n\t\t\t</p>\n\t\t\t<p>\n\t\t\t\t<a href="/user/reset-pw.php">Forgot your password or username?</a>\n\t\t\t</p>\n\t\t</div>\n\t</div>\n<div id="print-footer" class="printer">Copyright &copy; 2020 Art of Problem Solving</div>\n\n\n\n<div id="epicfail" class="aops-html-modal-epic-fail" style="display: none">\n\t<div class="aops-html-modal-inner-epic-fail">\n\t\t<div class="aops-html-modal-main-epic-fail">\n\t\t\t<p>Something appears to not have loaded correctly.</p>\n\t\t</div>\n\t\t<div class="aops-html-modal-bottom-epic-fail">\n\t\t\t<p><a onclick="location.reload(true);return false">Click to refresh</a>.</p>\n\t\t</div>\n\t</div>\n</div>\n<link rel="stylesheet" href="/assets/css/epic-fail.css">\n<script src="/assets/vendor/common-combined-2.js"></script>\n\n\t<script src="/assets/dist/v1404/aops_core.js"></script>\n\n\n<script src="/s/sourceRecording/dist/v1404/source_recording.js"></script>\n\n\n\n\t<script src="/assets/vendor/jqueryui/1.10.3/jquery-ui.min.js?__v__=2887"></script>\n\t<script src="/assets/vendor/jquery.editable.js?__v__=2887"></script>\n\t<script src="/assets/pythonbook/_static/codemirror-compressed.js?__v__=2887"></script>\n\t<script src="/assets/pythonbook/_static/skulpt.min.js?__v__=2887"></script>\n\t<script src="/assets/pythonbook/_static/skulpt-stdlib.js?__v__=2887"></script>\n\t<script src="/assets/pythonbook/_static/aopsmods.js?__v__=2887"></script>\n\t<script src="//cache.artofproblemsolving.com/js/community_data.js?v=1602560607&__v__=2887"></script>\n\t<script src="/assets/dist/v1404/cmty_core.js?__v__=2887"></script>\n\t<script src="/m/community/dist/v1404/precomp_community_common.js?__v__=2887"></script>\n\t<script src="/assets/vendor/dropzone/dropzone.js?__v__=2887"></script>\n\t<script src="/m/community/dist/v1404/precomp_in_community.js?__v__=2887"></script>\n\t<script src="//cache.artofproblemsolving.com/js/community_topics.js?r=1602560607&__v__=2887"></script>\n\t<script src="/m/community/js/CommunityBase.js?v=58&__v__=2887"></script>\n\n\n<!-- /search:off -->\n\n\n<!-- copied from contact page index, with edits -->\n<script id="footer-tpl-email-dialog" type="text/x-handlebars-template">\n\t<div id="mail-dialog">\n\t\t<h1>Email Art of Problem Solving</h1>\n\t\t<p>\n\t\t\t<input data-hj-suppress="" data-hj-masked="" type="text" id="email" name="email" placeholder="Your email address">\n\t\t\t<input data-hj-suppress="" data-hj-masked="" type="text" id="subject" name="subject" placeholder="Subject of message">\n\t\t\t<textarea data-hj-suppress="" data-hj-masked="" id="message" name="message" placeholder="Enter your message"></textarea>\n\t\t\t<div style="padding:5px 30px">\n\t\t\t\t<input type="checkbox" id="email-copy" name="email_copy">\n\t\t\t\t<label for="email-copy" id="email-copy-label">Send a copy to my email address.</label>\n\t\t\t</div>\n\t\t\t<div style="padding:5px 30px 20px">\n\t\t\t\t<input id="footer-submit-btn" type="submit" class="btn btn-primary" value="Send">\n\t\t\t\t<input id="footer-cancel-btn" type="submit" class="btn btn-default" value="Cancel">\n\t\t\t</div>\n\t\t</p>\n\t\t<p id="email-error"></p>\n\t</div>\n</script>\n\n\n<script id="footer-tpl-email-confirm" type="text/x-handlebars-template">\n\t<div id="mail-dialog-confirm">\n\t\t<h2>Email Sent</h2>\n\t\t<p>Thank you for your email. We will respond to it soon.</p>\n\t</div>\n</script>\n\n\n<script>\n\t// Try to prevent sending email multiple times\n\tvar last_email = \'\';\n\n\t$( document ).ready( function() {\n\t\t$( ".aops-contact" ).on( "click", displayFooterEmailDialog );\n\n\t\t$( "body" ).on( "click", "#footer-submit-btn", submitFooterEmail );\n\t\t$( "body" ).on( "click", "#footer-cancel-btn",  cancelFooterEmail );\n\t} );\n\n\tfunction displayFooterEmailDialog() {\n\t\tAoPS.Ui.Modal.show( {\n\t\t\tbody : document.getElementById( "footer-tpl-email-dialog" ).innerHTML,\n\t\t\tmax_width : \'600px\',\n\t\t\tmax_height : \'100%\',\n\t\t\tscrollable : true\n\t\t} );\n\t}\n\n\n\t/**\n\t * Submit email\n\t *\n\t * Note: Copy does not work in non-production mode because Mailer::quick() is\n\t * used which does not do force send.\n\t */\n\tfunction submitFooterEmail() {\n\t\tvar obj = {\n\t\t\taction : "email",\n\t\t\temail : $( "#email" ).val(),\n\t\t\tsubject : $( "#subject" ).val(),\n\t\t\tmessage : $( "#message" ).val(),\n\t\t\tcopy : $( "#email-copy" ).is( ":checked" )\n\t\t};\n\n\t\tif ( obj.email === last_email ) {\n\t\t\treturn;\n\t\t}\n\t\tlast_email = obj.email;\n\n\t\t// If this still happens multiple times, we have\n\t\t// something wrong with the internal ajax call.\n\t\tAoPS.Ui.Modal.closeAllModals();\n\t\t$.post( "/m/contact/ajax.php", obj, function( data ) {\n\t\t\tif ( data.error_code ) {\n\t\t\t\t$( "#email-error" ).html( data.error_msg ? data.error_msg : data.error_code ).show();\n\t\t\t} else {\n\t\t\t\tAoPS.Ui.Modal.show( {\n\t\t\t\t\tbody : document.getElementById( "footer-tpl-email-confirm" ).innerHTML,\n\t\t\t\t\tmax_width : \'600px\',\n\t\t\t\t\tmax_height : \'100%\',\n\t\t\t\t\tscrollable : true\n\t\t\t\t} );\n\t\t\t}\n\t\t}, "json" );\n\t}\n\tfunction cancelFooterEmail() {\n\t\tAoPS.Ui.Modal.closeAllModals();\n\t}\n</script>\n\n\n<!-- bing -->\n<script>(function(w,d,t,r,u){var f,n,i;w[u]=w[u]||[],f=function(){var o={ti:"5105596"};o.q=w[u],w[u]=new UET(o),w[u].push("pageLoad")},n=d.createElement(t),n.src=r,n.async=1,n.onload=n.onreadystatechange=function(){var s=this.readyState;s&&s!=="loaded"&&s!=="complete"||(f(),n.onload=n.onreadystatechange=null)},i=d.getElementsByTagName(t)[0],i.parentNode.insertBefore(n,i)})(window,document,"script","//bat.bing.com/bat.js","uetq");</script><noscript><img src="//bat.bing.com/action/0?ti=5105596&Ver=2" height="0" width="0" style="display:none; visibility: hidden;" /></noscript>\n\n</body>\n</html>

Any idea?

@w32zhong w32zhong reopened this Oct 13, 2020
@w32zhong
Copy link
Member Author

In Python script, this if statement does not meet the condition:

if 'AoPS.bootstrap_data' in script.text:

(see this link)

@TheSil
Copy link
Contributor

TheSil commented Oct 13, 2020

That condition does not always have to be met, there are multiple script blocks, only one of them will have AoPS.bootstrap_data in it I suppose. Or does that conditinon fail for all blocks, ending with function returning None? That would be strange, especially in that file you posted, I see there are script blocks which contain AoPS.bootstrap_data ...

Is that repeatable on your side? Also did that stop crawling or is it just an error in the error.log? I've got few those in past in my log too which looked sort of similar ([error] post https://artofproblemsolving.com/community/c6h1189932 ('NoneType' object is not subscriptable)), but I remember I could not repeat them.

@TheSil
Copy link
Contributor

TheSil commented Oct 13, 2020

I fed your example directly into the BeautifulSoup object (after writing it as a binary data, do not recommend to treat it as a textual data :D), and I dont see any issue there, it parsed on my side correctly... (it only fails then because it uses yours session which is now old, but that is expected)

@w32zhong
Copy link
Member Author

@TheSil Thank you for your help. I actually did not double-check whether my file contains AoPS.bootstrap_data, when I found that if-condition was not satisfied, I immediately thought what I get is not expected. Yes, indeed I identify that string (AoPS.bootstrap_data) after issuing a simple grep, so it looks pretty strange at this point. I am going to try it once more now...

@w32zhong
Copy link
Member Author

w32zhong commented Oct 13, 2020

I can reproduce it. Also, the good news is that I just find it only happens in Docker image, I can verify everything works well on my host machine. Yet still strange.

Anyway, here is the output from Docker-run (ga6840/a0 is a private DockerHub image, but it comes from the Dockerfile of the private repo):

$ docker run --network host -it ga6840/a0 ./demo/crawler/crawler-artofproblemsolving.com.py -c 3 -n 0 -o 3650
WARNING: Couldn't write lextab module <module 'slimit.lextab' from '/usr/local/lib/python3.7/dist-packages/slimit/lextab.py'>. Won't overwrite existing lextab module
WARNING: yacc table file version is out of date
WARNING: Token 'BLOCK_COMMENT' defined, but not used
WARNING: Token 'CLASS' defined, but not used
WARNING: Token 'CONST' defined, but not used
WARNING: Token 'ENUM' defined, but not used
WARNING: Token 'EXPORT' defined, but not used
WARNING: Token 'EXTENDS' defined, but not used
WARNING: Token 'IMPORT' defined, but not used
WARNING: Token 'LINE_COMMENT' defined, but not used
WARNING: Token 'LINE_TERMINATOR' defined, but not used
WARNING: Token 'SUPER' defined, but not used
WARNING: There are 10 unused tokens
WARNING: Couldn't create <module 'slimit.yacctab' from '/usr/local/lib/python3.7/dist-packages/slimit/yacctab.py'>. Won't overwrite existing tabmodule
Error occurred during loading data. Trying to use cache server https://fake-useragent.herokuapp.com/browsers/0.1.11
Traceback (most recent call last):
  File "/usr/lib/python3.7/urllib/request.py", line 1324, in do_open
    encode_chunked=req.has_header('Transfer-encoding'))
  File "/usr/lib/python3.7/http/client.py", line 1244, in request
    self._send_request(method, url, body, headers, encode_chunked)
  File "/usr/lib/python3.7/http/client.py", line 1290, in _send_request
    self.endheaders(body, encode_chunked=encode_chunked)
  File "/usr/lib/python3.7/http/client.py", line 1239, in endheaders
    self._send_output(message_body, encode_chunked=encode_chunked)
  File "/usr/lib/python3.7/http/client.py", line 1026, in _send_output
    self.send(msg)
  File "/usr/lib/python3.7/http/client.py", line 966, in send
    self.connect()
  File "/usr/lib/python3.7/http/client.py", line 1399, in connect
    super().connect()
  File "/usr/lib/python3.7/http/client.py", line 938, in connect
    (self.host,self.port), self.timeout, self.source_address)
  File "/usr/lib/python3.7/socket.py", line 727, in create_connection
    raise err
  File "/usr/lib/python3.7/socket.py", line 716, in create_connection
    sock.connect(sa)
OSError: [Errno 99] Cannot assign requested address

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/usr/local/lib/python3.7/dist-packages/fake_useragent/utils.py", line 67, in get
    context=context,
  File "/usr/lib/python3.7/urllib/request.py", line 222, in urlopen
    return opener.open(url, data, timeout)
  File "/usr/lib/python3.7/urllib/request.py", line 525, in open
    response = self._open(req, data)
  File "/usr/lib/python3.7/urllib/request.py", line 543, in _open
    '_open', req)
  File "/usr/lib/python3.7/urllib/request.py", line 503, in _call_chain
    result = func(*args)
  File "/usr/lib/python3.7/urllib/request.py", line 1367, in https_open
    context=self._context, check_hostname=self._check_hostname)
  File "/usr/lib/python3.7/urllib/request.py", line 1326, in do_open
    raise URLError(err)
urllib.error.URLError: <urlopen error [Errno 99] Cannot assign requested address>

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/usr/local/lib/python3.7/dist-packages/fake_useragent/utils.py", line 154, in load
    for item in get_browsers(verify_ssl=verify_ssl):
  File "/usr/local/lib/python3.7/dist-packages/fake_useragent/utils.py", line 97, in get_browsers
    html = get(settings.BROWSERS_STATS_PAGE, verify_ssl=verify_ssl)
  File "/usr/local/lib/python3.7/dist-packages/fake_useragent/utils.py", line 84, in get
    raise FakeUserAgentError('Maximum amount of retries reached')
fake_useragent.errors.FakeUserAgentError: Maximum amount of retries reached
[curl] /community/

[error] 'NoneType' object is not subscriptable

Another finding: If I run a shell on that Docker image so that I can run AoPS crawler script for multiple times, I find the second time all the FakeUserAgent errors are gone, and what left is the same error I produced 11 hours ago:

root@tknode:/code/a0/demo/crawler# ls
__pycache__  aops-cookie.tmp  crawler-artofproblemsolving.com.py  crawler-math.stackexchange.com.py  error.log  push-to-server.sh  replace_post_tex.py  requirements.txt  template.html
root@tknode:/code/a0/demo/crawler# ./crawler-artofproblemsolving.com.py -c 3  -n 0 -o 3650
WARNING: Couldn't write lextab module <module 'slimit.lextab' from '/usr/local/lib/python3.7/dist-packages/slimit/lextab.py'>. Won't overwrite existing lextab module
WARNING: yacc table file version is out of date
WARNING: Token 'BLOCK_COMMENT' defined, but not used
WARNING: Token 'CLASS' defined, but not used
WARNING: Token 'CONST' defined, but not used
WARNING: Token 'ENUM' defined, but not used
WARNING: Token 'EXPORT' defined, but not used
WARNING: Token 'EXTENDS' defined, but not used
WARNING: Token 'IMPORT' defined, but not used
WARNING: Token 'LINE_COMMENT' defined, but not used
WARNING: Token 'LINE_TERMINATOR' defined, but not used
WARNING: Token 'SUPER' defined, but not used
WARNING: There are 10 unused tokens
WARNING: Couldn't create <module 'slimit.yacctab' from '/usr/local/lib/python3.7/dist-packages/slimit/yacctab.py'>. Won't overwrite existing tabmodule
[curl] /community/

[error] 'NoneType' object is not subscriptable

@w32zhong
Copy link
Member Author

Update: I installed vim on that Docker session, added a few lines for debugging, community_page variable looked fine, again I can verify it contains bootstrap in a HTML script tag, but parsed is None, here is the snippet I modified:

    print(community_page)
    parsed = get_aops_data(community_page)
    print(parsed)
    session = parsed['AoPS.session']
    quit()

Since that Docker image was based on Debian:buster, I looked into software versions. BeautifulSoup versions are the same in Docker and my host (v0.0.1), but Docker has python3.7 while my host OS has python3.8. That may cause some issues?

@TheSil
Copy link
Contributor

TheSil commented Oct 13, 2020

The actual parsing of javascript is not done through BeautifulSoup but through slimit, maybe that package is of different version? As for Python 3.7, I actually use that on my host (although Im on Windows).

@w32zhong
Copy link
Member Author

For whatever reason, in Python 3.7 (in Docker), script.text should be replaced by script.string. Problem solved. (sigh...)

BTW. My slimit version also match between host and Docker, both 0.8.1.

@TheSil
Copy link
Contributor

TheSil commented Oct 13, 2020

That is indeed strange... But good you got it working :)

@w32zhong
Copy link
Member Author

@TheSil Thank you for your kind help anyway. I am going to close this issue now. Well, also thankful for your Github sponsorship by the way... I will buy myself a couple of drinks, thanks!

w32zhong added a commit that referenced this issue Mar 8, 2021
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Development

No branches or pull requests

2 participants