diff --git a/CHANGELOG.md b/CHANGELOG.md index 01d94fd44..da51fadc2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,169 +1,176 @@ # Mercury Parser Changelog +### 1.0.13 (Oct 11, 2018) + +##### Commits + +- [[`0c15e9aad3`](https://github.com/Postlight/mercury-parser/commit/0c15e9aad3)] - **chore**: update circle config.yml to 2.0 (#182) (Adam Pash) +- [[`5663660f76`](https://github.com/Postlight/mercury-parser/commit/5663660f76)] - **fix**: nytimes custom parser title selector (#181) (Adam Pash) +- [[`7fcd9b62eb`](https://github.com/Postlight/mercury-parser/commit/7fcd9b62eb)] - **release**: 1.0.12 (#173) (Adam Pash) + ### 1.0.12 (Apr 10, 2017) ##### Commits -* [[`5fcea1c5c3`](https://github.com/postlight/mercury-parser/commit/5fcea1c5c3)] - **fix**: PARSING_NODE undefined (#172) (Jeremy Mack) -* [[`a51cc81c27`](https://github.com/postlight/mercury-parser/commit/a51cc81c27)] - **release**: 1.0.11 (#171) (Adam Pash) +- [[`5fcea1c5c3`](https://github.com/postlight/mercury-parser/commit/5fcea1c5c3)] - **fix**: PARSING_NODE undefined (#172) (Jeremy Mack) +- [[`a51cc81c27`](https://github.com/postlight/mercury-parser/commit/a51cc81c27)] - **release**: 1.0.11 (#171) (Adam Pash) ### 1.0.11 (Apr 10, 2017) ##### Commits -* [[`e92e798880`](https://github.com/postlight/mercury-parser/commit/e92e798880)] - **fix**: viewport tags leaking to parent page (#170) (Jeremy Mack) -* [[`86d6bd1dc1`](https://github.com/postlight/mercury-parser/commit/86d6bd1dc1)] - **release**: 1.0.10 (#169) (Adam Pash) +- [[`e92e798880`](https://github.com/postlight/mercury-parser/commit/e92e798880)] - **fix**: viewport tags leaking to parent page (#170) (Jeremy Mack) +- [[`86d6bd1dc1`](https://github.com/postlight/mercury-parser/commit/86d6bd1dc1)] - **release**: 1.0.10 (#169) (Adam Pash) ### 1.0.10 (Mar 24, 2017) ##### Commits -* [[`b8aa87c777`](https://github.com/postlight/mercury-parser/commit/b8aa87c777)] - **feat**: improve wh parser (#168) (Adam Pash) -* [[`e56e8e24cd`](https://github.com/postlight/mercury-parser/commit/e56e8e24cd)] - **release**: 1.0.9 (#167) (Adam Pash) +- [[`b8aa87c777`](https://github.com/postlight/mercury-parser/commit/b8aa87c777)] - **feat**: improve wh parser (#168) (Adam Pash) +- [[`e56e8e24cd`](https://github.com/postlight/mercury-parser/commit/e56e8e24cd)] - **release**: 1.0.9 (#167) (Adam Pash) ### 1.0.9 (Mar 23, 2017) ##### Commits -* [[`61f0f4e1af`](https://github.com/postlight/mercury-parser/commit/61f0f4e1af)] - **fix**: kept elements being removed (#166) (Adam Pash) -* [[`5741910fdc`](https://github.com/postlight/mercury-parser/commit/5741910fdc)] - **docs**: update changelog (#165) (Adam Pash) -* [[`321c087be6`](https://github.com/postlight/mercury-parser/commit/321c087be6)] - **release**: 1.0.8 (#164) (Adam Pash) - +- [[`61f0f4e1af`](https://github.com/postlight/mercury-parser/commit/61f0f4e1af)] - **fix**: kept elements being removed (#166) (Adam Pash) +- [[`5741910fdc`](https://github.com/postlight/mercury-parser/commit/5741910fdc)] - **docs**: update changelog (#165) (Adam Pash) +- [[`321c087be6`](https://github.com/postlight/mercury-parser/commit/321c087be6)] - **release**: 1.0.8 (#164) (Adam Pash) ### 1.0.8 (Mar 22, 2017) ##### Commits -* [[`453419de72`](https://github.com/postlight/mercury-parser/commit/453419de72)] - **feat**: improve wh.gov parser (#163) (Adam Pash) -* [[`e267d57d78`](https://github.com/postlight/mercury-parser/commit/e267d57d78)] - **release**: 1.0.7 (#160) (Adam Pash) +- [[`453419de72`](https://github.com/postlight/mercury-parser/commit/453419de72)] - **feat**: improve wh.gov parser (#163) (Adam Pash) +- [[`e267d57d78`](https://github.com/postlight/mercury-parser/commit/e267d57d78)] - **release**: 1.0.7 (#160) (Adam Pash) ### 1.0.7 (Mar 15, 2017) ##### Commits -* [[`f13bb721f6`](https://github.com/postlight/mercury-parser/commit/f13bb721f6)] - **feat**: prospect magazine parser (#147) (Janet) -* [[`1b28713cf5`](https://github.com/postlight/mercury-parser/commit/1b28713cf5)] - **feat**: fool.com parser (#158) (Kevin Ngao) -* [[`c18959779d`](https://github.com/postlight/mercury-parser/commit/c18959779d)] - **feat**: forward.com parser (#144) (Janet) -* [[`50e548bac2`](https://github.com/postlight/mercury-parser/commit/50e548bac2)] - **feat**: qdaily parser (#146) (Janet) -* [[`51a4d1d12f`](https://github.com/postlight/mercury-parser/commit/51a4d1d12f)] - **feat**: newrepublic parser shows image on page (#159) (Silas Burton) -* [[`11382ce651`](https://github.com/postlight/mercury-parser/commit/11382ce651)] - **feat**: Slate extractor (#153) (Silas Burton) -* [[`5acaa6ab56`](https://github.com/postlight/mercury-parser/commit/5acaa6ab56)] - **feat**: ici.radio-canada.ca extractor (#156) (Silas Burton) -* [[`4509b341e6`](https://github.com/postlight/mercury-parser/commit/4509b341e6)] - **feat**: better cleanup of atlantic articles (#157) (Silas Burton) -* [[`f2e3f055c2`](https://github.com/postlight/mercury-parser/commit/f2e3f055c2)] - **fix**: an issue with encoding (#154) (Kevin Ngao) -* [[`9b371e51ac`](https://github.com/postlight/mercury-parser/commit/9b371e51ac)] - **feat**: gothamist extractor (#151) (Silas Burton) -* [[`afbef9bc39`](https://github.com/postlight/mercury-parser/commit/afbef9bc39)] - **fix**: Encoding on Body (#143) (Kevin Ngao) -* [[`9d4c883d51`](https://github.com/postlight/mercury-parser/commit/9d4c883d51)] - **release**: 1.0.6 (#142) (Adam Pash) +- [[`f13bb721f6`](https://github.com/postlight/mercury-parser/commit/f13bb721f6)] - **feat**: prospect magazine parser (#147) (Janet) +- [[`1b28713cf5`](https://github.com/postlight/mercury-parser/commit/1b28713cf5)] - **feat**: fool.com parser (#158) (Kevin Ngao) +- [[`c18959779d`](https://github.com/postlight/mercury-parser/commit/c18959779d)] - **feat**: forward.com parser (#144) (Janet) +- [[`50e548bac2`](https://github.com/postlight/mercury-parser/commit/50e548bac2)] - **feat**: qdaily parser (#146) (Janet) +- [[`51a4d1d12f`](https://github.com/postlight/mercury-parser/commit/51a4d1d12f)] - **feat**: newrepublic parser shows image on page (#159) (Silas Burton) +- [[`11382ce651`](https://github.com/postlight/mercury-parser/commit/11382ce651)] - **feat**: Slate extractor (#153) (Silas Burton) +- [[`5acaa6ab56`](https://github.com/postlight/mercury-parser/commit/5acaa6ab56)] - **feat**: ici.radio-canada.ca extractor (#156) (Silas Burton) +- [[`4509b341e6`](https://github.com/postlight/mercury-parser/commit/4509b341e6)] - **feat**: better cleanup of atlantic articles (#157) (Silas Burton) +- [[`f2e3f055c2`](https://github.com/postlight/mercury-parser/commit/f2e3f055c2)] - **fix**: an issue with encoding (#154) (Kevin Ngao) +- [[`9b371e51ac`](https://github.com/postlight/mercury-parser/commit/9b371e51ac)] - **feat**: gothamist extractor (#151) (Silas Burton) +- [[`afbef9bc39`](https://github.com/postlight/mercury-parser/commit/afbef9bc39)] - **fix**: Encoding on Body (#143) (Kevin Ngao) +- [[`9d4c883d51`](https://github.com/postlight/mercury-parser/commit/9d4c883d51)] - **release**: 1.0.6 (#142) (Adam Pash) ### 1.0.6 (Feb 9, 2017) ##### Commits -* [[`93d2baf5cf`](https://github.com/postlight/mercury-parser/commit/93d2baf5cf)] - **feat**: news.natgeo parser (#88) (Janet) -* [[`2279c2d486`](https://github.com/postlight/mercury-parser/commit/2279c2d486)] - **feat**: natgeo parser (#89) (Janet) -* [[`08b5bb7ff1`](https://github.com/postlight/mercury-parser/commit/08b5bb7ff1)] - **feat**: allow parser to define custom date formats (#141) (Adam Pash) -* [[`11f466ccb3`](https://github.com/postlight/mercury-parser/commit/11f466ccb3)] - **feat**: latimes parser (#92) (Janet) -* [[`26a8e4f75a`](https://github.com/postlight/mercury-parser/commit/26a8e4f75a)] - **feat**: macrumors parser (#120) (Kevin Ngao) -* [[`b4fec6af98`](https://github.com/postlight/mercury-parser/commit/b4fec6af98)] - **feat**: androidcentral parser (#119) (Kevin Ngao) -* [[`beb0b89a4f`](https://github.com/postlight/mercury-parser/commit/beb0b89a4f)] - **feat**: pagesix parser (#97) (Janet) -* [[`f2160eb5b6`](https://github.com/postlight/mercury-parser/commit/f2160eb5b6)] - **feat**: si parser (#118) (Janet) -* [[`2af0f6179a`](https://github.com/postlight/mercury-parser/commit/2af0f6179a)] - **feat**: rawstory parser (#109) (Janet) -* [[`765032452d`](https://github.com/postlight/mercury-parser/commit/765032452d)] - **feat**: thefederalistpapers parser (#101) (Janet) -* [[`fb5eb2e104`](https://github.com/postlight/mercury-parser/commit/fb5eb2e104)] - **feat**: cnet parser (#104) (Janet) -* [[`3c5fa28f10`](https://github.com/postlight/mercury-parser/commit/3c5fa28f10)] - **feat**: cbs sports parser (#98) (Janet) -* [[`3cf2d0d3ef`](https://github.com/postlight/mercury-parser/commit/3cf2d0d3ef)] - **feat**: msnbc parser (#100) (Janet) -* [[`f9ab9eb885`](https://github.com/postlight/mercury-parser/commit/f9ab9eb885)] - **feat**: howtogeek extractor (#108) (Janet) -* [[`258acdfd02`](https://github.com/postlight/mercury-parser/commit/258acdfd02)] - **feat**: opposing views parser (#103) (Janet) -* [[`b63dd33579`](https://github.com/postlight/mercury-parser/commit/b63dd33579)] - **feat**: today parser (#106) (Janet) -* [[`c94eee7f92`](https://github.com/postlight/mercury-parser/commit/c94eee7f92)] - **feat**: cinema blend parser (#105) (Janet) -* [[`64e3c205e8`](https://github.com/postlight/mercury-parser/commit/64e3c205e8)] - **feat**: the political insider parser (#99) (Janet) -* [[`7b52d3d1fc`](https://github.com/postlight/mercury-parser/commit/7b52d3d1fc)] - **feat**: al.com parser (#110) (Janet) -* [[`15df58496f`](https://github.com/postlight/mercury-parser/commit/15df58496f)] - **feat**: westernjournalism parser (#113) (Janet) -* [[`ae12a1d701`](https://github.com/postlight/mercury-parser/commit/ae12a1d701)] - **feat**: mental floss parser (#94) (Janet) -* [[`bf29291395`](https://github.com/postlight/mercury-parser/commit/bf29291395)] - **feat**: thepennyhoarder parser (#112) (Janet) -* [[`fadd198d04`](https://github.com/postlight/mercury-parser/commit/fadd198d04)] - **feat**: abcnewsgo parser (#90) (Janet) -* [[`25d9642ff9`](https://github.com/postlight/mercury-parser/commit/25d9642ff9)] - **feat**: support cleaning and transforms for all fields (#138) (Adam Pash) -* [[`1054d854dd`](https://github.com/postlight/mercury-parser/commit/1054d854dd)] - **feat**: america now parser (#114) (Janet) -* [[`4c48acba59`](https://github.com/postlight/mercury-parser/commit/4c48acba59)] - **feat**: fusion parser (Janet) -* [[`d292d8ef3a`](https://github.com/postlight/mercury-parser/commit/d292d8ef3a)] - **feat**: ny daily news parser (#87) (Janet) -* [[`a53587acef`](https://github.com/postlight/mercury-parser/commit/a53587acef)] - **feat**: adds www.polygon.com to list of www.theverge.com supportedDomains (dviramontes) -* [[`385b9d76a3`](https://github.com/postlight/mercury-parser/commit/385b9d76a3)] - **feat**: sciencefly extractor (#116) (Janet) -* [[`601b0fac16`](https://github.com/postlight/mercury-parser/commit/601b0fac16)] - **release**: 1.0.5 (#136) (Adam Pash) +- [[`93d2baf5cf`](https://github.com/postlight/mercury-parser/commit/93d2baf5cf)] - **feat**: news.natgeo parser (#88) (Janet) +- [[`2279c2d486`](https://github.com/postlight/mercury-parser/commit/2279c2d486)] - **feat**: natgeo parser (#89) (Janet) +- [[`08b5bb7ff1`](https://github.com/postlight/mercury-parser/commit/08b5bb7ff1)] - **feat**: allow parser to define custom date formats (#141) (Adam Pash) +- [[`11f466ccb3`](https://github.com/postlight/mercury-parser/commit/11f466ccb3)] - **feat**: latimes parser (#92) (Janet) +- [[`26a8e4f75a`](https://github.com/postlight/mercury-parser/commit/26a8e4f75a)] - **feat**: macrumors parser (#120) (Kevin Ngao) +- [[`b4fec6af98`](https://github.com/postlight/mercury-parser/commit/b4fec6af98)] - **feat**: androidcentral parser (#119) (Kevin Ngao) +- [[`beb0b89a4f`](https://github.com/postlight/mercury-parser/commit/beb0b89a4f)] - **feat**: pagesix parser (#97) (Janet) +- [[`f2160eb5b6`](https://github.com/postlight/mercury-parser/commit/f2160eb5b6)] - **feat**: si parser (#118) (Janet) +- [[`2af0f6179a`](https://github.com/postlight/mercury-parser/commit/2af0f6179a)] - **feat**: rawstory parser (#109) (Janet) +- [[`765032452d`](https://github.com/postlight/mercury-parser/commit/765032452d)] - **feat**: thefederalistpapers parser (#101) (Janet) +- [[`fb5eb2e104`](https://github.com/postlight/mercury-parser/commit/fb5eb2e104)] - **feat**: cnet parser (#104) (Janet) +- [[`3c5fa28f10`](https://github.com/postlight/mercury-parser/commit/3c5fa28f10)] - **feat**: cbs sports parser (#98) (Janet) +- [[`3cf2d0d3ef`](https://github.com/postlight/mercury-parser/commit/3cf2d0d3ef)] - **feat**: msnbc parser (#100) (Janet) +- [[`f9ab9eb885`](https://github.com/postlight/mercury-parser/commit/f9ab9eb885)] - **feat**: howtogeek extractor (#108) (Janet) +- [[`258acdfd02`](https://github.com/postlight/mercury-parser/commit/258acdfd02)] - **feat**: opposing views parser (#103) (Janet) +- [[`b63dd33579`](https://github.com/postlight/mercury-parser/commit/b63dd33579)] - **feat**: today parser (#106) (Janet) +- [[`c94eee7f92`](https://github.com/postlight/mercury-parser/commit/c94eee7f92)] - **feat**: cinema blend parser (#105) (Janet) +- [[`64e3c205e8`](https://github.com/postlight/mercury-parser/commit/64e3c205e8)] - **feat**: the political insider parser (#99) (Janet) +- [[`7b52d3d1fc`](https://github.com/postlight/mercury-parser/commit/7b52d3d1fc)] - **feat**: al.com parser (#110) (Janet) +- [[`15df58496f`](https://github.com/postlight/mercury-parser/commit/15df58496f)] - **feat**: westernjournalism parser (#113) (Janet) +- [[`ae12a1d701`](https://github.com/postlight/mercury-parser/commit/ae12a1d701)] - **feat**: mental floss parser (#94) (Janet) +- [[`bf29291395`](https://github.com/postlight/mercury-parser/commit/bf29291395)] - **feat**: thepennyhoarder parser (#112) (Janet) +- [[`fadd198d04`](https://github.com/postlight/mercury-parser/commit/fadd198d04)] - **feat**: abcnewsgo parser (#90) (Janet) +- [[`25d9642ff9`](https://github.com/postlight/mercury-parser/commit/25d9642ff9)] - **feat**: support cleaning and transforms for all fields (#138) (Adam Pash) +- [[`1054d854dd`](https://github.com/postlight/mercury-parser/commit/1054d854dd)] - **feat**: america now parser (#114) (Janet) +- [[`4c48acba59`](https://github.com/postlight/mercury-parser/commit/4c48acba59)] - **feat**: fusion parser (Janet) +- [[`d292d8ef3a`](https://github.com/postlight/mercury-parser/commit/d292d8ef3a)] - **feat**: ny daily news parser (#87) (Janet) +- [[`a53587acef`](https://github.com/postlight/mercury-parser/commit/a53587acef)] - **feat**: adds www.polygon.com to list of www.theverge.com supportedDomains (dviramontes) +- [[`385b9d76a3`](https://github.com/postlight/mercury-parser/commit/385b9d76a3)] - **feat**: sciencefly extractor (#116) (Janet) +- [[`601b0fac16`](https://github.com/postlight/mercury-parser/commit/601b0fac16)] - **release**: 1.0.5 (#136) (Adam Pash) ### 1.0.5 (Feb 1, 2017) ##### Commits -* [[`6bd6278a07`](https://github.com/postlight/mercury-parser/commit/6bd6278a07)] - **feat**: custom parser for wh blog (#130) (Adam Pash) -* [[`aa682d71e8`](https://github.com/postlight/mercury-parser/commit/aa682d71e8)] - **fix**: medium bug (#129) (Adam Pash) -* [[`4e049de61a`](https://github.com/postlight/mercury-parser/commit/4e049de61a)] - **fix**: i put a bad comment in .gitattributes (#125) (Adam Pash) -* [[`8aa215c4c2`](https://github.com/postlight/mercury-parser/commit/8aa215c4c2)] - **chore**: marking html fixtures as "vendored" (#124) (Adam Pash) -* [[`31eb4f9222`](https://github.com/postlight/mercury-parser/commit/31eb4f9222)] - **feat**: LinkedIn parser (#123) (Adam Pash) -* [[`dbc706410b`](https://github.com/postlight/mercury-parser/commit/dbc706410b)] - **release**: 1.0.4 (#122) (Adam Pash) +- [[`6bd6278a07`](https://github.com/postlight/mercury-parser/commit/6bd6278a07)] - **feat**: custom parser for wh blog (#130) (Adam Pash) +- [[`aa682d71e8`](https://github.com/postlight/mercury-parser/commit/aa682d71e8)] - **fix**: medium bug (#129) (Adam Pash) +- [[`4e049de61a`](https://github.com/postlight/mercury-parser/commit/4e049de61a)] - **fix**: i put a bad comment in .gitattributes (#125) (Adam Pash) +- [[`8aa215c4c2`](https://github.com/postlight/mercury-parser/commit/8aa215c4c2)] - **chore**: marking html fixtures as "vendored" (#124) (Adam Pash) +- [[`31eb4f9222`](https://github.com/postlight/mercury-parser/commit/31eb4f9222)] - **feat**: LinkedIn parser (#123) (Adam Pash) +- [[`dbc706410b`](https://github.com/postlight/mercury-parser/commit/dbc706410b)] - **release**: 1.0.4 (#122) (Adam Pash) ### 1.0.4 (Jan 26, 2017) ##### Commits -* [[`8662474d8a`](https://github.com/postlight/mercury-parser/commit/8662474d8a)] - **feat**: changed user agent to latest chrome (#121) (Adam Pash) -* [[`7709d69379`](https://github.com/postlight/mercury-parser/commit/7709d69379)] - **feat**: npr parser (#86) (Janet) -* [[`8a82f2c0ab`](https://github.com/postlight/mercury-parser/commit/8a82f2c0ab)] - **feat**: recode parser (#85) (Janet) -* [[`ad29acd7b7`](https://github.com/postlight/mercury-parser/commit/ad29acd7b7)] - **feat**: fortune parser (#84) (Janet) -* [[`c133ddf614`](https://github.com/postlight/mercury-parser/commit/c133ddf614)] - **feat**: qz parser (#81) (Janet) -* [[`84312b6ef1`](https://github.com/postlight/mercury-parser/commit/84312b6ef1)] - **feat**: dmagazine parser (#80) (Janet) -* [[`e035f36361`](https://github.com/postlight/mercury-parser/commit/e035f36361)] - **feat**: reuters parser (#78) (Janet) -* [[`dec49ab073`](https://github.com/postlight/mercury-parser/commit/dec49ab073)] - **feat**: mashable parser (#76) (Janet) -* [[`cddc1afb69`](https://github.com/postlight/mercury-parser/commit/cddc1afb69)] - **feat**: chicago tribune parser (#75) (Janet) -* [[`aff651c2d8`](https://github.com/postlight/mercury-parser/commit/aff651c2d8)] - **feat**: hellogiggles parser (#107) (Janet) -* [[`11ad7b9a92`](https://github.com/postlight/mercury-parser/commit/11ad7b9a92)] - **feat**: thought catalog parser (#102) (Janet) -* [[`aa43a6091c`](https://github.com/postlight/mercury-parser/commit/aa43a6091c)] - **feat**: cnbc parser (#96) (Janet) -* [[`cd245f7980`](https://github.com/postlight/mercury-parser/commit/cd245f7980)] - **feat**: popsugar parser (#93) (Janet) -* [[`a8ab7135e1`](https://github.com/postlight/mercury-parser/commit/a8ab7135e1)] - **feat**: observer parser (#91) (Janet) -* [[`3bee7224cb`](https://github.com/postlight/mercury-parser/commit/3bee7224cb)] - **feat**: nbc news parser (#74) (Janet) -* [[`88242dd233`](https://github.com/postlight/mercury-parser/commit/88242dd233)] - **feat**: nj.com parser (#73) (Janet) -* [[`1ac5670a54`](https://github.com/postlight/mercury-parser/commit/1ac5670a54)] - **feat**: inquisitor parser (#72) (Janet) -* [[`9e5b91ed8b`](https://github.com/postlight/mercury-parser/commit/9e5b91ed8b)] - **feat**: refinery29 parser (#71) (Janet) -* [[`b78c58c43a`](https://github.com/postlight/mercury-parser/commit/b78c58c43a)] - **feat**: miami herald parser (#69) (Janet) -* [[`aedf83edc6`](https://github.com/postlight/mercury-parser/commit/aedf83edc6)] - **feat**: eonline parser (#68) (Janet) -* [[`a20da5eb31`](https://github.com/postlight/mercury-parser/commit/a20da5eb31)] - **feat**: uproxx extractor (#66) (Janet) -* [[`87c42b6358`](https://github.com/postlight/mercury-parser/commit/87c42b6358)] - **feat**: 247sports.com extractor (#64) (Janet) -* [[`22e6c884fb`](https://github.com/postlight/mercury-parser/commit/22e6c884fb)] - **feat**: rolling stone extractor (#65) (Janet) -* [[`6337231697`](https://github.com/postlight/mercury-parser/commit/6337231697)] - **feat**: usmagazine extractor (#63) (Janet) -* [[`c06b19efe7`](https://github.com/postlight/mercury-parser/commit/c06b19efe7)] - **feat**: people extractor (#70) (Janet) -* [[`3cf2bb78c4`](https://github.com/postlight/mercury-parser/commit/3cf2bb78c4)] - **feat**: vox custom parser (#67) (Janet) -* [[`a710efd2d5`](https://github.com/postlight/mercury-parser/commit/a710efd2d5)] - **release**: 1.0.3 (#62) (Adam Pash) +- [[`8662474d8a`](https://github.com/postlight/mercury-parser/commit/8662474d8a)] - **feat**: changed user agent to latest chrome (#121) (Adam Pash) +- [[`7709d69379`](https://github.com/postlight/mercury-parser/commit/7709d69379)] - **feat**: npr parser (#86) (Janet) +- [[`8a82f2c0ab`](https://github.com/postlight/mercury-parser/commit/8a82f2c0ab)] - **feat**: recode parser (#85) (Janet) +- [[`ad29acd7b7`](https://github.com/postlight/mercury-parser/commit/ad29acd7b7)] - **feat**: fortune parser (#84) (Janet) +- [[`c133ddf614`](https://github.com/postlight/mercury-parser/commit/c133ddf614)] - **feat**: qz parser (#81) (Janet) +- [[`84312b6ef1`](https://github.com/postlight/mercury-parser/commit/84312b6ef1)] - **feat**: dmagazine parser (#80) (Janet) +- [[`e035f36361`](https://github.com/postlight/mercury-parser/commit/e035f36361)] - **feat**: reuters parser (#78) (Janet) +- [[`dec49ab073`](https://github.com/postlight/mercury-parser/commit/dec49ab073)] - **feat**: mashable parser (#76) (Janet) +- [[`cddc1afb69`](https://github.com/postlight/mercury-parser/commit/cddc1afb69)] - **feat**: chicago tribune parser (#75) (Janet) +- [[`aff651c2d8`](https://github.com/postlight/mercury-parser/commit/aff651c2d8)] - **feat**: hellogiggles parser (#107) (Janet) +- [[`11ad7b9a92`](https://github.com/postlight/mercury-parser/commit/11ad7b9a92)] - **feat**: thought catalog parser (#102) (Janet) +- [[`aa43a6091c`](https://github.com/postlight/mercury-parser/commit/aa43a6091c)] - **feat**: cnbc parser (#96) (Janet) +- [[`cd245f7980`](https://github.com/postlight/mercury-parser/commit/cd245f7980)] - **feat**: popsugar parser (#93) (Janet) +- [[`a8ab7135e1`](https://github.com/postlight/mercury-parser/commit/a8ab7135e1)] - **feat**: observer parser (#91) (Janet) +- [[`3bee7224cb`](https://github.com/postlight/mercury-parser/commit/3bee7224cb)] - **feat**: nbc news parser (#74) (Janet) +- [[`88242dd233`](https://github.com/postlight/mercury-parser/commit/88242dd233)] - **feat**: nj.com parser (#73) (Janet) +- [[`1ac5670a54`](https://github.com/postlight/mercury-parser/commit/1ac5670a54)] - **feat**: inquisitor parser (#72) (Janet) +- [[`9e5b91ed8b`](https://github.com/postlight/mercury-parser/commit/9e5b91ed8b)] - **feat**: refinery29 parser (#71) (Janet) +- [[`b78c58c43a`](https://github.com/postlight/mercury-parser/commit/b78c58c43a)] - **feat**: miami herald parser (#69) (Janet) +- [[`aedf83edc6`](https://github.com/postlight/mercury-parser/commit/aedf83edc6)] - **feat**: eonline parser (#68) (Janet) +- [[`a20da5eb31`](https://github.com/postlight/mercury-parser/commit/a20da5eb31)] - **feat**: uproxx extractor (#66) (Janet) +- [[`87c42b6358`](https://github.com/postlight/mercury-parser/commit/87c42b6358)] - **feat**: 247sports.com extractor (#64) (Janet) +- [[`22e6c884fb`](https://github.com/postlight/mercury-parser/commit/22e6c884fb)] - **feat**: rolling stone extractor (#65) (Janet) +- [[`6337231697`](https://github.com/postlight/mercury-parser/commit/6337231697)] - **feat**: usmagazine extractor (#63) (Janet) +- [[`c06b19efe7`](https://github.com/postlight/mercury-parser/commit/c06b19efe7)] - **feat**: people extractor (#70) (Janet) +- [[`3cf2bb78c4`](https://github.com/postlight/mercury-parser/commit/3cf2bb78c4)] - **feat**: vox custom parser (#67) (Janet) +- [[`a710efd2d5`](https://github.com/postlight/mercury-parser/commit/a710efd2d5)] - **release**: 1.0.3 (#62) (Adam Pash) ### 1.0.3 (Dec 9, 2016) ##### Commits -* [[`861c5f0dcb`](https://github.com/postlight/mercury-parser/commit/861c5f0dcb)] - **feat**: bustle extractor (#60) (Janet) -* [[`06397a4360`](https://github.com/postlight/mercury-parser/commit/06397a4360)] - **feat**: browser-friendly selector for medium (#61) (Adam Pash) -* [[`3297ab079d`](https://github.com/postlight/mercury-parser/commit/3297ab079d)] - **feat**: bloomberg extractor (#59) (Adam Pash) -* [[`e55e9da534`](https://github.com/postlight/mercury-parser/commit/e55e9da534)] - **feat**: sbnation extractor (#55) (Janet) -* [[`8070e4790b`](https://github.com/postlight/mercury-parser/commit/8070e4790b)] - **test**: streamlined guardian tests w/new single-extraction (#58) (Adam Pash) -* [[`bdb751fb53`](https://github.com/postlight/mercury-parser/commit/bdb751fb53)] - **feat**: more cleaning for wired (#56) (Adam Pash) -* [[`e7e41bd242`](https://github.com/postlight/mercury-parser/commit/e7e41bd242)] - **feat**: the guardian custom extractor (#41) (Janet) -* [[`332f85928f`](https://github.com/postlight/mercury-parser/commit/332f85928f)] - **release**: 1.0.2 (#54) (Adam Pash) +- [[`861c5f0dcb`](https://github.com/postlight/mercury-parser/commit/861c5f0dcb)] - **feat**: bustle extractor (#60) (Janet) +- [[`06397a4360`](https://github.com/postlight/mercury-parser/commit/06397a4360)] - **feat**: browser-friendly selector for medium (#61) (Adam Pash) +- [[`3297ab079d`](https://github.com/postlight/mercury-parser/commit/3297ab079d)] - **feat**: bloomberg extractor (#59) (Adam Pash) +- [[`e55e9da534`](https://github.com/postlight/mercury-parser/commit/e55e9da534)] - **feat**: sbnation extractor (#55) (Janet) +- [[`8070e4790b`](https://github.com/postlight/mercury-parser/commit/8070e4790b)] - **test**: streamlined guardian tests w/new single-extraction (#58) (Adam Pash) +- [[`bdb751fb53`](https://github.com/postlight/mercury-parser/commit/bdb751fb53)] - **feat**: more cleaning for wired (#56) (Adam Pash) +- [[`e7e41bd242`](https://github.com/postlight/mercury-parser/commit/e7e41bd242)] - **feat**: the guardian custom extractor (#41) (Janet) +- [[`332f85928f`](https://github.com/postlight/mercury-parser/commit/332f85928f)] - **release**: 1.0.2 (#54) (Adam Pash) ### 1.0.2 (Dec 6, 2016) ##### Commits -* [[`81aa89f2c1`](https://github.com/postlight/mercury-parser/commit/81aa89f2c1)] - **feat**: youtube custom extractor (#53) (Adam Pash) -* [[`2fb47640f2`](https://github.com/postlight/mercury-parser/commit/2fb47640f2)] - **feat**: detect platforms (#52) (Adam Pash) -* [[`64c0fad2fd`](https://github.com/postlight/mercury-parser/commit/64c0fad2fd)] - **fix**: preserve whitespace (#51) (Adam Pash) -* [[`15656cb3e1`](https://github.com/postlight/mercury-parser/commit/15656cb3e1)] - **Refactor**: running tests more efficiently (#49) (Adam Pash) -* [[`edcb7295d1`](https://github.com/postlight/mercury-parser/commit/edcb7295d1)] - **release**: 1.0.1 (#48) (Adam Pash) +- [[`81aa89f2c1`](https://github.com/postlight/mercury-parser/commit/81aa89f2c1)] - **feat**: youtube custom extractor (#53) (Adam Pash) +- [[`2fb47640f2`](https://github.com/postlight/mercury-parser/commit/2fb47640f2)] - **feat**: detect platforms (#52) (Adam Pash) +- [[`64c0fad2fd`](https://github.com/postlight/mercury-parser/commit/64c0fad2fd)] - **fix**: preserve whitespace (#51) (Adam Pash) +- [[`15656cb3e1`](https://github.com/postlight/mercury-parser/commit/15656cb3e1)] - **Refactor**: running tests more efficiently (#49) (Adam Pash) +- [[`edcb7295d1`](https://github.com/postlight/mercury-parser/commit/edcb7295d1)] - **release**: 1.0.1 (#48) (Adam Pash) ### 1.0.1 (Dec 2, 2016) ##### Commits -* [[`19ed035382`](https://github.com/postlight/mercury-parser/commit/19ed035382)] - **release**: 1.0.1 (Adam Pash) -* [[`f9902cfa05`](https://github.com/postlight/mercury-parser/commit/f9902cfa05)] - **Fix**: extension bugs (#47) (Adam Pash) -* [[`16860f1d85`](https://github.com/postlight/mercury-parser/commit/16860f1d85)] - **feat**: improved nyt parser (#46) (Adam Pash) -* [[`d0453efbf8`](https://github.com/postlight/mercury-parser/commit/d0453efbf8)] - **feat**: improvements for nyer magazine articles (#45) (Adam Pash) -* [[`00f8965c1f`](https://github.com/postlight/mercury-parser/commit/00f8965c1f)] - **fix**: cleaning up deks (#44) (Adam Pash) -* [[`b415d1d37c`](https://github.com/postlight/mercury-parser/commit/b415d1d37c)] - **feat**: aol custom extractor (#42) (Janet) -* [[`4cc3b68b5e`](https://github.com/postlight/mercury-parser/commit/4cc3b68b5e)] - **feat**: remove footer links (#40) (Matt) -* [[`e9a36d6ebd`](https://github.com/postlight/mercury-parser/commit/e9a36d6ebd)] - **release**: 1.0.0 so we can start doing proper releaes (#39) (Adam Pash) +- [[`19ed035382`](https://github.com/postlight/mercury-parser/commit/19ed035382)] - **release**: 1.0.1 (Adam Pash) +- [[`f9902cfa05`](https://github.com/postlight/mercury-parser/commit/f9902cfa05)] - **Fix**: extension bugs (#47) (Adam Pash) +- [[`16860f1d85`](https://github.com/postlight/mercury-parser/commit/16860f1d85)] - **feat**: improved nyt parser (#46) (Adam Pash) +- [[`d0453efbf8`](https://github.com/postlight/mercury-parser/commit/d0453efbf8)] - **feat**: improvements for nyer magazine articles (#45) (Adam Pash) +- [[`00f8965c1f`](https://github.com/postlight/mercury-parser/commit/00f8965c1f)] - **fix**: cleaning up deks (#44) (Adam Pash) +- [[`b415d1d37c`](https://github.com/postlight/mercury-parser/commit/b415d1d37c)] - **feat**: aol custom extractor (#42) (Janet) +- [[`4cc3b68b5e`](https://github.com/postlight/mercury-parser/commit/4cc3b68b5e)] - **feat**: remove footer links (#40) (Matt) +- [[`e9a36d6ebd`](https://github.com/postlight/mercury-parser/commit/e9a36d6ebd)] - **release**: 1.0.0 so we can start doing proper releaes (#39) (Adam Pash) diff --git a/dist/mercury.js b/dist/mercury.js index ce3295996..58aeedaa4 100644 --- a/dist/mercury.js +++ b/dist/mercury.js @@ -2054,7 +2054,7 @@ var NYTimesExtractor = { domain: 'www.nytimes.com', title: { - selectors: ['.g-headline', 'h1.headline'] + selectors: ['h1.g-headline', 'h1[itemprop="headline"]', 'h1.headline'] }, author: { diff --git a/dist/mercury.js.map b/dist/mercury.js.map index 1dd65905c..2d067a31d 100644 --- a/dist/mercury.js.map +++ b/dist/mercury.js.map @@ -1 +1 @@ -{"version":3,"file":null,"sources":["../src/utils/text/normalize-spaces.js","../src/utils/text/extract-from-url.js","../src/utils/text/constants.js","../src/utils/text/page-num-from-url.js","../src/utils/text/remove-anchor.js","../src/utils/text/article-base-url.js","../src/utils/text/has-sentence-end.js","../src/utils/text/excerpt-content.js","../src/utils/text/get-encoding.js","../src/utils/range.js","../src/utils/validate-url.js","../src/utils/errors.js","../src/resource/utils/constants.js","../src/resource/utils/fetch-resource.js","../src/resource/utils/dom/normalize-meta-tags.js","../src/utils/dom/constants.js","../src/utils/dom/strip-unlikely-candidates.js","../src/utils/dom/brs-to-ps.js","../src/utils/dom/paragraphize.js","../src/utils/dom/convert-to-paragraphs.js","../src/utils/dom/convert-node-to.js","../src/utils/dom/clean-images.js","../src/utils/dom/mark-to-keep.js","../src/utils/dom/strip-junk-tags.js","../src/utils/dom/clean-h-ones.js","../src/utils/dom/clean-attributes.js","../src/utils/dom/remove-empty.js","../src/extractors/generic/content/scoring/constants.js","../src/extractors/generic/content/scoring/get-weight.js","../src/extractors/generic/content/scoring/get-score.js","../src/extractors/generic/content/scoring/score-commas.js","../src/extractors/generic/content/scoring/score-length.js","../src/extractors/generic/content/scoring/score-paragraph.js","../src/extractors/generic/content/scoring/set-score.js","../src/extractors/generic/content/scoring/add-score.js","../src/extractors/generic/content/scoring/add-to-parent.js","../src/extractors/generic/content/scoring/get-or-init-score.js","../src/extractors/generic/content/scoring/score-node.js","../src/extractors/generic/content/scoring/score-content.js","../src/extractors/generic/content/scoring/merge-siblings.js","../src/extractors/generic/content/scoring/find-top-candidate.js","../src/extractors/generic/content/scoring/index.js","../src/utils/dom/clean-tags.js","../src/utils/dom/clean-headers.js","../src/utils/dom/rewrite-top-level.js","../src/utils/dom/make-links-absolute.js","../src/utils/dom/link-density.js","../src/utils/dom/extract-from-meta.js","../src/utils/dom/extract-from-selectors.js","../src/utils/dom/strip-tags.js","../src/utils/dom/within-comment.js","../src/utils/dom/node-is-sufficient.js","../src/utils/dom/is-wordpress.js","../src/utils/dom/get-attrs.js","../src/utils/dom/set-attr.js","../src/utils/dom/set-attrs.js","../src/utils/dom/index.js","../src/resource/utils/dom/constants.js","../src/resource/utils/dom/convert-lazy-loaded-images.js","../src/resource/utils/dom/clean.js","../src/resource/index.js","../src/utils/merge-supported-domains.js","../src/extractors/custom/blogspot.com/index.js","../src/extractors/custom/nymag.com/index.js","../src/extractors/custom/wikipedia.org/index.js","../src/extractors/custom/twitter.com/index.js","../src/extractors/custom/www.nytimes.com/index.js","../src/extractors/custom/www.theatlantic.com/index.js","../src/extractors/custom/www.newyorker.com/index.js","../src/extractors/custom/www.wired.com/index.js","../src/extractors/custom/www.msn.com/index.js","../src/extractors/custom/www.yahoo.com/index.js","../src/extractors/custom/www.buzzfeed.com/index.js","../src/extractors/custom/fandom.wikia.com/index.js","../src/extractors/custom/www.littlethings.com/index.js","../src/extractors/custom/www.politico.com/index.js","../src/extractors/custom/deadspin.com/index.js","../src/extractors/custom/www.broadwayworld.com/index.js","../src/extractors/custom/www.apartmenttherapy.com/index.js","../src/extractors/custom/medium.com/index.js","../src/extractors/custom/www.tmz.com/index.js","../src/extractors/custom/www.washingtonpost.com/index.js","../src/extractors/custom/www.huffingtonpost.com/index.js","../src/extractors/custom/newrepublic.com/index.js","../src/extractors/custom/money.cnn.com/index.js","../src/extractors/custom/www.theverge.com/index.js","../src/extractors/custom/www.cnn.com/index.js","../src/extractors/custom/www.aol.com/index.js","../src/extractors/custom/www.youtube.com/index.js","../src/extractors/custom/www.theguardian.com/index.js","../src/extractors/custom/www.sbnation.com/index.js","../src/extractors/custom/www.bloomberg.com/index.js","../src/extractors/custom/www.bustle.com/index.js","../src/extractors/custom/www.npr.org/index.js","../src/extractors/custom/www.recode.net/index.js","../src/extractors/custom/qz.com/index.js","../src/extractors/custom/www.dmagazine.com/index.js","../src/extractors/custom/www.reuters.com/index.js","../src/extractors/custom/mashable.com/index.js","../src/extractors/custom/www.chicagotribune.com/index.js","../src/extractors/custom/www.vox.com/index.js","../src/extractors/custom/news.nationalgeographic.com/index.js","../src/extractors/custom/www.nationalgeographic.com/index.js","../src/extractors/custom/www.latimes.com/index.js","../src/extractors/custom/pagesix.com/index.js","../src/extractors/custom/thefederalistpapers.org/index.js","../src/extractors/custom/www.cbssports.com/index.js","../src/extractors/custom/www.msnbc.com/index.js","../src/extractors/custom/www.thepoliticalinsider.com/index.js","../src/extractors/custom/www.mentalfloss.com/index.js","../src/extractors/custom/abcnews.go.com/index.js","../src/extractors/custom/www.nydailynews.com/index.js","../src/extractors/custom/www.cnbc.com/index.js","../src/extractors/custom/www.popsugar.com/index.js","../src/extractors/custom/observer.com/index.js","../src/extractors/custom/people.com/index.js","../src/extractors/custom/www.usmagazine.com/index.js","../src/extractors/custom/www.rollingstone.com/index.js","../src/extractors/custom/247sports.com/index.js","../src/extractors/custom/uproxx.com/index.js","../src/extractors/custom/www.eonline.com/index.js","../src/extractors/custom/www.miamiherald.com/index.js","../src/extractors/custom/www.refinery29.com/index.js","../src/extractors/custom/www.macrumors.com/index.js","../src/extractors/custom/www.androidcentral.com/index.js","../src/extractors/custom/www.si.com/index.js","../src/extractors/custom/www.rawstory.com/index.js","../src/extractors/custom/www.cnet.com/index.js","../src/extractors/custom/www.cinemablend.com/index.js","../src/extractors/custom/www.today.com/index.js","../src/extractors/custom/www.howtogeek.com/index.js","../src/extractors/custom/www.al.com/index.js","../src/extractors/custom/www.thepennyhoarder.com/index.js","../src/extractors/custom/www.westernjournalism.com/index.js","../src/extractors/custom/fusion.net/index.js","../src/extractors/custom/www.americanow.com/index.js","../src/extractors/custom/sciencefly.com/index.js","../src/extractors/custom/hellogiggles.com/index.js","../src/extractors/custom/thoughtcatalog.com/index.js","../src/extractors/custom/www.nj.com/index.js","../src/extractors/custom/www.inquisitr.com/index.js","../src/extractors/custom/www.nbcnews.com/index.js","../src/extractors/custom/fortune.com/index.js","../src/extractors/custom/www.linkedin.com/index.js","../src/extractors/custom/obamawhitehouse.archives.gov/index.js","../src/extractors/custom/www.opposingviews.com/index.js","../src/extractors/custom/www.prospectmagazine.co.uk/index.js","../src/extractors/custom/forward.com/index.js","../src/extractors/custom/www.qdaily.com/index.js","../src/extractors/custom/gothamist.com/index.js","../src/extractors/custom/www.fool.com/index.js","../src/extractors/custom/www.slate.com/index.js","../src/extractors/custom/ici.radio-canada.ca/index.js","../src/extractors/all.js","../src/cleaners/constants.js","../src/cleaners/author.js","../src/cleaners/lead-image-url.js","../src/cleaners/dek.js","../src/cleaners/date-published.js","../src/cleaners/content.js","../src/cleaners/title.js","../src/cleaners/resolve-split-title.js","../src/cleaners/index.js","../src/extractors/generic/content/extract-best-node.js","../src/extractors/generic/content/extractor.js","../src/extractors/generic/title/constants.js","../src/extractors/generic/title/extractor.js","../src/extractors/generic/author/constants.js","../src/extractors/generic/author/extractor.js","../src/extractors/generic/date-published/constants.js","../src/extractors/generic/date-published/extractor.js","../src/extractors/generic/dek/extractor.js","../src/extractors/generic/lead-image-url/constants.js","../src/extractors/generic/lead-image-url/score-image.js","../src/extractors/generic/lead-image-url/extractor.js","../src/extractors/generic/next-page-url/scoring/utils/score-similarity.js","../src/extractors/generic/next-page-url/scoring/utils/score-link-text.js","../src/extractors/generic/next-page-url/scoring/utils/score-page-in-link.js","../src/extractors/generic/next-page-url/scoring/constants.js","../src/extractors/generic/next-page-url/scoring/utils/score-extraneous-links.js","../src/extractors/generic/next-page-url/scoring/utils/score-by-parents.js","../src/extractors/generic/next-page-url/scoring/utils/score-prev-link.js","../src/extractors/generic/next-page-url/scoring/utils/should-score.js","../src/extractors/generic/next-page-url/scoring/utils/score-base-url.js","../src/extractors/generic/next-page-url/scoring/utils/score-next-link-text.js","../src/extractors/generic/next-page-url/scoring/utils/score-cap-links.js","../src/extractors/generic/next-page-url/scoring/score-links.js","../src/extractors/generic/next-page-url/extractor.js","../src/extractors/generic/url/constants.js","../src/extractors/generic/url/extractor.js","../src/extractors/generic/excerpt/constants.js","../src/extractors/generic/excerpt/extractor.js","../src/extractors/generic/word-count/extractor.js","../src/extractors/generic/index.js","../src/extractors/detect-by-html.js","../src/extractors/get-extractor.js","../src/extractors/root-extractor.js","../src/extractors/collect-all-pages.js","../src/mercury.js"],"sourcesContent":["const NORMALIZE_RE = /\\s{2,}/g;\n\nexport default function normalizeSpaces(text) {\n return text.replace(NORMALIZE_RE, ' ').trim();\n}\n","// Given a node type to search for, and a list of regular expressions,\n// look to see if this extraction can be found in the URL. Expects\n// that each expression in r_list will return group(1) as the proper\n// string to be cleaned.\n// Only used for date_published currently.\nexport default function extractFromUrl(url, regexList) {\n const matchRe = regexList.find(re => re.test(url));\n if (matchRe) {\n return matchRe.exec(url)[1];\n }\n\n return null;\n}\n","// An expression that looks to try to find the page digit within a URL, if\n// it exists.\n// Matches:\n// page=1\n// pg=1\n// p=1\n// paging=12\n// pag=7\n// pagination/1\n// paging/88\n// pa/83\n// p/11\n//\n// Does not match:\n// pg=102\n// page:2\nexport const PAGE_IN_HREF_RE = new RegExp('(page|paging|(p(a|g|ag)?(e|enum|ewanted|ing|ination)))?(=|/)([0-9]{1,3})', 'i');\n\nexport const HAS_ALPHA_RE = /[a-z]/i;\n\nexport const IS_ALPHA_RE = /^[a-z]+$/i;\nexport const IS_DIGIT_RE = /^[0-9]+$/i;\n\nexport const ENCODING_RE = /charset=([\\w-]+)\\b/;\nexport const DEFAULT_ENCODING = 'utf-8';\n","import { PAGE_IN_HREF_RE } from './constants';\n\nexport default function pageNumFromUrl(url) {\n const matches = url.match(PAGE_IN_HREF_RE);\n if (!matches) return null;\n\n const pageNum = parseInt(matches[6], 10);\n\n // Return pageNum < 100, otherwise\n // return null\n return pageNum < 100 ? pageNum : null;\n}\n","export default function removeAnchor(url) {\n return url.split('#')[0].replace(/\\/$/, '');\n}\n","import URL from 'url';\n\nimport {\n HAS_ALPHA_RE,\n IS_ALPHA_RE,\n IS_DIGIT_RE,\n PAGE_IN_HREF_RE,\n} from './constants';\n\nfunction isGoodSegment(segment, index, firstSegmentHasLetters) {\n let goodSegment = true;\n\n // If this is purely a number, and it's the first or second\n // url_segment, it's probably a page number. Remove it.\n if (index < 2 && IS_DIGIT_RE.test(segment) && segment.length < 3) {\n goodSegment = true;\n }\n\n // If this is the first url_segment and it's just \"index\",\n // remove it\n if (index === 0 && segment.toLowerCase() === 'index') {\n goodSegment = false;\n }\n\n // If our first or second url_segment is smaller than 3 characters,\n // and the first url_segment had no alphas, remove it.\n if (index < 2 && segment.length < 3 && !firstSegmentHasLetters) {\n goodSegment = false;\n }\n\n return goodSegment;\n}\n\n// Take a URL, and return the article base of said URL. That is, no\n// pagination data exists in it. Useful for comparing to other links\n// that might have pagination data within them.\nexport default function articleBaseUrl(url, parsed) {\n const parsedUrl = parsed || URL.parse(url);\n const { protocol, host, path } = parsedUrl;\n\n let firstSegmentHasLetters = false;\n const cleanedSegments = path.split('/')\n .reverse()\n .reduce((acc, rawSegment, index) => {\n let segment = rawSegment;\n\n // Split off and save anything that looks like a file type.\n if (segment.includes('.')) {\n const [possibleSegment, fileExt] = segment.split('.');\n if (IS_ALPHA_RE.test(fileExt)) {\n segment = possibleSegment;\n }\n }\n\n // If our first or second segment has anything looking like a page\n // number, remove it.\n if (PAGE_IN_HREF_RE.test(segment) && index < 2) {\n segment = segment.replace(PAGE_IN_HREF_RE, '');\n }\n\n // If we're on the first segment, check to see if we have any\n // characters in it. The first segment is actually the last bit of\n // the URL, and this will be helpful to determine if we're on a URL\n // segment that looks like \"/2/\" for example.\n if (index === 0) {\n firstSegmentHasLetters = HAS_ALPHA_RE.test(segment);\n }\n\n // If it's not marked for deletion, push it to cleaned_segments.\n if (isGoodSegment(segment, index, firstSegmentHasLetters)) {\n acc.push(segment);\n }\n\n return acc;\n }, []);\n\n return `${protocol}//${host}${cleanedSegments.reverse().join('/')}`;\n}\n","// Given a string, return True if it appears to have an ending sentence\n// within it, false otherwise.\nconst SENTENCE_END_RE = new RegExp('.( |$)');\nexport default function hasSentenceEnd(text) {\n return SENTENCE_END_RE.test(text);\n}\n","export default function excerptContent(content, words = 10) {\n return content.trim()\n .split(/\\s+/)\n .slice(0, words)\n .join(' ');\n}\n","import iconv from 'iconv-lite';\nimport { DEFAULT_ENCODING, ENCODING_RE } from './constants';\n\n// check a string for encoding; this is\n// used in our fetchResource function to\n// ensure correctly encoded responses\nexport default function getEncoding(str) {\n let encoding = DEFAULT_ENCODING;\n if (ENCODING_RE.test(str)) {\n const testEncode = ENCODING_RE.exec(str)[1];\n if (iconv.encodingExists(testEncode)) {\n encoding = testEncode;\n }\n }\n return encoding;\n}\n","export default function* range(start = 1, end = 1) {\n while (start <= end) {\n yield start += 1;\n }\n}\n","// extremely simple url validation as a first step\nexport default function validateUrl({ hostname }) {\n // If this isn't a valid url, return an error message\n return !!hostname;\n}\n","const Errors = {\n badUrl: {\n error: true,\n messages: 'The url parameter passed does not look like a valid URL. Please check your data and try again.',\n },\n};\n\nexport default Errors;\n","import cheerio from 'cheerio';\n\n// Browser does not like us setting user agent\nexport const REQUEST_HEADERS = cheerio.browser ? {} : {\n 'User-Agent': 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36',\n};\n\n// The number of milliseconds to attempt to fetch a resource before timing out.\nexport const FETCH_TIMEOUT = 10000;\n\n// Content types that we do not extract content from\nconst BAD_CONTENT_TYPES = [\n 'audio/mpeg',\n 'image/gif',\n 'image/jpeg',\n 'image/jpg',\n];\n\nexport const BAD_CONTENT_TYPES_RE = new RegExp(`^(${BAD_CONTENT_TYPES.join('|')})$`, 'i');\n\n// Use this setting as the maximum size an article can be\n// for us to attempt parsing. Defaults to 5 MB.\nexport const MAX_CONTENT_LENGTH = 5242880;\n\n// Turn the global proxy on or off\n// Proxying is not currently enabled in Python source\n// so not implementing logic in port.\nexport const PROXY_DOMAINS = false;\nexport const REQUESTS_PROXIES = {\n http: 'http://38.98.105.139:33333',\n https: 'http://38.98.105.139:33333',\n};\n\nexport const DOMAINS_TO_PROXY = [\n 'nih.gov',\n 'gutenberg.org',\n];\n","import URL from 'url';\nimport request from 'request';\nimport { Errors } from 'utils';\n\nimport {\n REQUEST_HEADERS,\n FETCH_TIMEOUT,\n BAD_CONTENT_TYPES_RE,\n MAX_CONTENT_LENGTH,\n} from './constants';\n\nfunction get(options) {\n return new Promise((resolve, reject) => {\n request(options, (err, response, body) => {\n if (err) {\n reject(err);\n } else {\n resolve({ body, response });\n }\n });\n });\n}\n\n// Evaluate a response to ensure it's something we should be keeping.\n// This does not validate in the sense of a response being 200 level or\n// not. Validation here means that we haven't found reason to bail from\n// further processing of this url.\n\nexport function validateResponse(response, parseNon2xx = false) {\n // Check if we got a valid status code\n // This isn't great, but I'm requiring a statusMessage to be set\n // before short circuiting b/c nock doesn't set it in tests\n // statusMessage only not set in nock response, in which case\n // I check statusCode, which is currently only 200 for OK responses\n // in tests\n if (\n (response.statusMessage && response.statusMessage !== 'OK') ||\n response.statusCode !== 200\n ) {\n if (!response.statusCode) {\n throw new Error(\n `Unable to fetch content. Original exception was ${response.error}`\n );\n } else if (!parseNon2xx) {\n throw new Error(\n `Resource returned a response status code of ${response.statusCode} and resource was instructed to reject non-2xx level status codes.`\n );\n }\n }\n\n const {\n 'content-type': contentType,\n 'content-length': contentLength,\n } = response.headers;\n\n // Check that the content is not in BAD_CONTENT_TYPES\n if (BAD_CONTENT_TYPES_RE.test(contentType)) {\n throw new Error(\n `Content-type for this resource was ${contentType} and is not allowed.`\n );\n }\n\n // Check that the content length is below maximum\n if (contentLength > MAX_CONTENT_LENGTH) {\n throw new Error(\n `Content for this resource was too large. Maximum content length is ${MAX_CONTENT_LENGTH}.`\n );\n }\n\n return true;\n}\n\n// Grabs the last two pieces of the URL and joins them back together\n// This is to get the 'livejournal.com' from 'erotictrains.livejournal.com'\nexport function baseDomain({ host }) {\n return host.split('.').slice(-2).join('.');\n}\n\n// Set our response attribute to the result of fetching our URL.\n// TODO: This should gracefully handle timeouts and raise the\n// proper exceptions on the many failure cases of HTTP.\n// TODO: Ensure we are not fetching something enormous. Always return\n// unicode content for HTML, with charset conversion.\n\nexport default async function fetchResource(url, parsedUrl) {\n parsedUrl = parsedUrl || URL.parse(encodeURI(url));\n\n const options = {\n url: parsedUrl.href,\n headers: { ...REQUEST_HEADERS },\n timeout: FETCH_TIMEOUT,\n // Accept cookies\n jar: true,\n // Set to null so the response returns as binary and body as buffer\n // https://github.com/request/request#requestoptions-callback\n encoding: null,\n // Accept and decode gzip\n gzip: true,\n // Follow any redirect\n followAllRedirects: true,\n };\n\n const { response, body } = await get(options);\n\n try {\n validateResponse(response);\n return {\n body,\n response,\n };\n } catch (e) {\n return Errors.badUrl;\n }\n}\n","function convertMetaProp($, from, to) {\n $(`meta[${from}]`).each((_, node) => {\n const $node = $(node);\n\n const value = $node.attr(from);\n $node.attr(to, value);\n $node.removeAttr(from);\n });\n\n return $;\n}\n\n// For ease of use in extracting from meta tags,\n// replace the \"content\" attribute on meta tags with the\n// \"value\" attribute.\n//\n// In addition, normalize 'property' attributes to 'name' for ease of\n// querying later. See, e.g., og or twitter meta tags.\n\nexport default function normalizeMetaTags($) {\n $ = convertMetaProp($, 'content', 'value');\n $ = convertMetaProp($, 'property', 'name');\n return $;\n}\n","// Spacer images to be removed\nexport const SPACER_RE = new RegExp('transparent|spacer|blank', 'i');\n\n// The class we will use to mark elements we want to keep\n// but would normally remove\nexport const KEEP_CLASS = 'mercury-parser-keep';\n\nexport const KEEP_SELECTORS = [\n 'iframe[src^=\"https://www.youtube.com\"]',\n 'iframe[src^=\"https://www.youtube-nocookie.com\"]',\n 'iframe[src^=\"http://www.youtube.com\"]',\n 'iframe[src^=\"https://player.vimeo\"]',\n 'iframe[src^=\"http://player.vimeo\"]',\n];\n\n// A list of tags to strip from the output if we encounter them.\nexport const STRIP_OUTPUT_TAGS = [\n 'title',\n 'script',\n 'noscript',\n 'link',\n 'style',\n 'hr',\n 'embed',\n 'iframe',\n 'object',\n];\n\n// cleanAttributes\nexport const REMOVE_ATTRS = ['style', 'align'];\nexport const REMOVE_ATTR_SELECTORS = REMOVE_ATTRS.map(selector => `[${selector}]`);\nexport const REMOVE_ATTR_LIST = REMOVE_ATTRS.join(',');\nexport const WHITELIST_ATTRS = [\n 'src',\n 'srcset',\n 'href',\n 'class',\n 'id',\n 'alt',\n 'xlink:href',\n 'width',\n 'height',\n];\n\nexport const WHITELIST_ATTRS_RE = new RegExp(`^(${WHITELIST_ATTRS.join('|')})$`, 'i');\n\n// removeEmpty\nexport const REMOVE_EMPTY_TAGS = ['p'];\nexport const REMOVE_EMPTY_SELECTORS = REMOVE_EMPTY_TAGS.map(tag => `${tag}:empty`).join(',');\n\n// cleanTags\nexport const CLEAN_CONDITIONALLY_TAGS = ['ul', 'ol', 'table', 'div', 'button', 'form'].join(',');\n\n// cleanHeaders\nconst HEADER_TAGS = ['h2', 'h3', 'h4', 'h5', 'h6'];\nexport const HEADER_TAG_LIST = HEADER_TAGS.join(',');\n\n// // CONTENT FETCHING CONSTANTS ////\n\n// A list of strings that can be considered unlikely candidates when\n// extracting content from a resource. These strings are joined together\n// and then tested for existence using re:test, so may contain simple,\n// non-pipe style regular expression queries if necessary.\nexport const UNLIKELY_CANDIDATES_BLACKLIST = [\n 'ad-break',\n 'adbox',\n 'advert',\n 'addthis',\n 'agegate',\n 'aux',\n 'blogger-labels',\n 'combx',\n 'comment',\n 'conversation',\n 'disqus',\n 'entry-unrelated',\n 'extra',\n 'foot',\n // 'form', // This is too generic, has too many false positives\n 'header',\n 'hidden',\n 'loader',\n 'login', // Note: This can hit 'blogindex'.\n 'menu',\n 'meta',\n 'nav',\n 'outbrain',\n 'pager',\n 'pagination',\n 'predicta', // readwriteweb inline ad box\n 'presence_control_external', // lifehacker.com container full of false positives\n 'popup',\n 'printfriendly',\n 'related',\n 'remove',\n 'remark',\n 'rss',\n 'share',\n 'shoutbox',\n 'sidebar',\n 'sociable',\n 'sponsor',\n 'taboola',\n 'tools',\n];\n\n// A list of strings that can be considered LIKELY candidates when\n// extracting content from a resource. Essentially, the inverse of the\n// blacklist above - if something matches both blacklist and whitelist,\n// it is kept. This is useful, for example, if something has a className\n// of \"rss-content entry-content\". It matched 'rss', so it would normally\n// be removed, however, it's also the entry content, so it should be left\n// alone.\n//\n// These strings are joined together and then tested for existence using\n// re:test, so may contain simple, non-pipe style regular expression queries\n// if necessary.\nexport const UNLIKELY_CANDIDATES_WHITELIST = [\n 'and',\n 'article',\n 'body',\n 'blogindex',\n 'column',\n 'content',\n 'entry-content-asset',\n 'format', // misuse of form\n 'hfeed',\n 'hentry',\n 'hatom',\n 'main',\n 'page',\n 'posts',\n 'shadow',\n];\n\n// A list of tags which, if found inside, should cause a
to NOT\n// be turned into a paragraph tag. Shallow div tags without these elements\n// should be turned into

tags.\nexport const DIV_TO_P_BLOCK_TAGS = [\n 'a',\n 'blockquote',\n 'dl',\n 'div',\n 'img',\n 'p',\n 'pre',\n 'table',\n].join(',');\n\n// A list of tags that should be ignored when trying to find the top candidate\n// for a document.\nexport const NON_TOP_CANDIDATE_TAGS = [\n 'br',\n 'b',\n 'i',\n 'label',\n 'hr',\n 'area',\n 'base',\n 'basefont',\n 'input',\n 'img',\n 'link',\n 'meta',\n];\n\nexport const NON_TOP_CANDIDATE_TAGS_RE =\n new RegExp(`^(${NON_TOP_CANDIDATE_TAGS.join('|')})$`, 'i');\n\n// A list of selectors that specify, very clearly, either hNews or other\n// very content-specific style content, like Blogger templates.\n// More examples here: http://microformats.org/wiki/blog-post-formats\nexport const HNEWS_CONTENT_SELECTORS = [\n ['.hentry', '.entry-content'],\n ['entry', '.entry-content'],\n ['.entry', '.entry_content'],\n ['.post', '.postbody'],\n ['.post', '.post_body'],\n ['.post', '.post-body'],\n];\n\nexport const PHOTO_HINTS = [\n 'figure',\n 'photo',\n 'image',\n 'caption',\n];\nexport const PHOTO_HINTS_RE = new RegExp(PHOTO_HINTS.join('|'), 'i');\n\n// A list of strings that denote a positive scoring for this content as being\n// an article container. Checked against className and id.\n//\n// TODO: Perhaps have these scale based on their odds of being quality?\nexport const POSITIVE_SCORE_HINTS = [\n 'article',\n 'articlecontent',\n 'instapaper_body',\n 'blog',\n 'body',\n 'content',\n 'entry-content-asset',\n 'entry',\n 'hentry',\n 'main',\n 'Normal',\n 'page',\n 'pagination',\n 'permalink',\n 'post',\n 'story',\n 'text',\n '[-_]copy', // usatoday\n '\\\\Bcopy',\n];\n\n// The above list, joined into a matching regular expression\nexport const POSITIVE_SCORE_RE = new RegExp(POSITIVE_SCORE_HINTS.join('|'), 'i');\n\n// Readability publisher-specific guidelines\nexport const READABILITY_ASSET = new RegExp('entry-content-asset', 'i');\n\n// A list of strings that denote a negative scoring for this content as being\n// an article container. Checked against className and id.\n//\n// TODO: Perhaps have these scale based on their odds of being quality?\nexport const NEGATIVE_SCORE_HINTS = [\n 'adbox',\n 'advert',\n 'author',\n 'bio',\n 'bookmark',\n 'bottom',\n 'byline',\n 'clear',\n 'com-',\n 'combx',\n 'comment',\n 'comment\\\\B',\n 'contact',\n 'copy',\n 'credit',\n 'crumb',\n 'date',\n 'deck',\n 'excerpt',\n 'featured', // tnr.com has a featured_content which throws us off\n 'foot',\n 'footer',\n 'footnote',\n 'graf',\n 'head',\n 'info',\n 'infotext', // newscientist.com copyright\n 'instapaper_ignore',\n 'jump',\n 'linebreak',\n 'link',\n 'masthead',\n 'media',\n 'meta',\n 'modal',\n 'outbrain', // slate.com junk\n 'promo',\n 'pr_', // autoblog - press release\n 'related',\n 'respond',\n 'roundcontent', // lifehacker restricted content warning\n 'scroll',\n 'secondary',\n 'share',\n 'shopping',\n 'shoutbox',\n 'side',\n 'sidebar',\n 'sponsor',\n 'stamp',\n 'sub',\n 'summary',\n 'tags',\n 'tools',\n 'widget',\n];\n// The above list, joined into a matching regular expression\nexport const NEGATIVE_SCORE_RE = new RegExp(NEGATIVE_SCORE_HINTS.join('|'), 'i');\n\n// XPath to try to determine if a page is wordpress. Not always successful.\nexport const IS_WP_SELECTOR = 'meta[name=generator][value^=WordPress]';\n\n// Match a digit. Pretty clear.\nexport const DIGIT_RE = new RegExp('[0-9]');\n\n// A list of words that, if found in link text or URLs, likely mean that\n// this link is not a next page link.\nexport const EXTRANEOUS_LINK_HINTS = [\n 'print',\n 'archive',\n 'comment',\n 'discuss',\n 'e-mail',\n 'email',\n 'share',\n 'reply',\n 'all',\n 'login',\n 'sign',\n 'single',\n 'adx',\n 'entry-unrelated',\n];\nexport const EXTRANEOUS_LINK_HINTS_RE = new RegExp(EXTRANEOUS_LINK_HINTS.join('|'), 'i');\n\n// Match any phrase that looks like it could be page, or paging, or pagination\nexport const PAGE_RE = new RegExp('pag(e|ing|inat)', 'i');\n\n// Match any link text/classname/id that looks like it could mean the next\n// page. Things like: next, continue, >, >>, » but not >|, »| as those can\n// mean last page.\n// export const NEXT_LINK_TEXT_RE = new RegExp('(next|weiter|continue|>([^\\|]|$)|»([^\\|]|$))', 'i');\nexport const NEXT_LINK_TEXT_RE = /(next|weiter|continue|>([^|]|$)|»([^|]|$))/i;\n\n// Match any link text/classname/id that looks like it is an end link: things\n// like \"first\", \"last\", \"end\", etc.\nexport const CAP_LINK_TEXT_RE = new RegExp('(first|last|end)', 'i');\n\n// Match any link text/classname/id that looks like it means the previous\n// page.\nexport const PREV_LINK_TEXT_RE = new RegExp('(prev|earl|old|new|<|«)', 'i');\n\n// Match 2 or more consecutive
tags\nexport const BR_TAGS_RE = new RegExp('(]*>[ \\n\\r\\t]*){2,}', 'i');\n\n// Match 1 BR tag.\nexport const BR_TAG_RE = new RegExp(']*>', 'i');\n\n// A list of all of the block level tags known in HTML5 and below. Taken from\n// http://bit.ly/qneNIT\nexport const BLOCK_LEVEL_TAGS = [\n 'article',\n 'aside',\n 'blockquote',\n 'body',\n 'br',\n 'button',\n 'canvas',\n 'caption',\n 'col',\n 'colgroup',\n 'dd',\n 'div',\n 'dl',\n 'dt',\n 'embed',\n 'fieldset',\n 'figcaption',\n 'figure',\n 'footer',\n 'form',\n 'h1',\n 'h2',\n 'h3',\n 'h4',\n 'h5',\n 'h6',\n 'header',\n 'hgroup',\n 'hr',\n 'li',\n 'map',\n 'object',\n 'ol',\n 'output',\n 'p',\n 'pre',\n 'progress',\n 'section',\n 'table',\n 'tbody',\n 'textarea',\n 'tfoot',\n 'th',\n 'thead',\n 'tr',\n 'ul',\n 'video',\n];\nexport const BLOCK_LEVEL_TAGS_RE = new RegExp(`^(${BLOCK_LEVEL_TAGS.join('|')})$`, 'i');\n\n// The removal is implemented as a blacklist and whitelist, this test finds\n// blacklisted elements that aren't whitelisted. We do this all in one\n// expression-both because it's only one pass, and because this skips the\n// serialization for whitelisted nodes.\nconst candidatesBlacklist = UNLIKELY_CANDIDATES_BLACKLIST.join('|');\nexport const CANDIDATES_BLACKLIST = new RegExp(candidatesBlacklist, 'i');\n\nconst candidatesWhitelist = UNLIKELY_CANDIDATES_WHITELIST.join('|');\nexport const CANDIDATES_WHITELIST = new RegExp(candidatesWhitelist, 'i');\n\nexport const UNLIKELY_RE = new RegExp(`!(${candidatesWhitelist})|(${candidatesBlacklist})`, 'i');\n\nexport const PARAGRAPH_SCORE_TAGS = new RegExp('^(p|li|span|pre)$', 'i');\nexport const CHILD_CONTENT_TAGS = new RegExp('^(td|blockquote|ol|ul|dl)$', 'i');\nexport const BAD_TAGS = new RegExp('^(address|form)$', 'i');\n\nexport const HTML_OR_BODY_RE = new RegExp('^(html|body)$', 'i');\n","import {\n CANDIDATES_WHITELIST,\n CANDIDATES_BLACKLIST,\n} from './constants';\n\nexport default function stripUnlikelyCandidates($) {\n // Loop through the provided document and remove any non-link nodes\n // that are unlikely candidates for article content.\n //\n // Links are ignored because there are very often links to content\n // that are identified as non-body-content, but may be inside\n // article-like content.\n //\n // :param $: a cheerio object to strip nodes from\n // :return $: the cleaned cheerio object\n $('*').not('a').each((index, node) => {\n const $node = $(node);\n const classes = $node.attr('class');\n const id = $node.attr('id');\n if (!id && !classes) return;\n\n const classAndId = `${classes || ''} ${id || ''}`;\n if (CANDIDATES_WHITELIST.test(classAndId)) {\n return;\n } else if (CANDIDATES_BLACKLIST.test(classAndId)) {\n $node.remove();\n }\n });\n\n return $;\n}\n","import { paragraphize } from './index';\n\n// ## NOTES:\n// Another good candidate for refactoring/optimizing.\n// Very imperative code, I don't love it. - AP\n\n// Given cheerio object, convert consecutive
tags into\n//

tags instead.\n//\n// :param $: A cheerio object\n\nexport default function brsToPs($) {\n let collapsing = false;\n $('br').each((index, element) => {\n const $element = $(element);\n const nextElement = $element.next().get(0);\n\n if (nextElement && nextElement.tagName.toLowerCase() === 'br') {\n collapsing = true;\n $element.remove();\n } else if (collapsing) {\n collapsing = false;\n // $(element).replaceWith('

')\n paragraphize(element, $, true);\n }\n });\n\n return $;\n}\n","import { BLOCK_LEVEL_TAGS_RE } from './constants';\n\n// Given a node, turn it into a P if it is not already a P, and\n// make sure it conforms to the constraints of a P tag (I.E. does\n// not contain any other block tags.)\n//\n// If the node is a
, it treats the following inline siblings\n// as if they were its children.\n//\n// :param node: The node to paragraphize; this is a raw node\n// :param $: The cheerio object to handle dom manipulation\n// :param br: Whether or not the passed node is a br\n\nexport default function paragraphize(node, $, br = false) {\n const $node = $(node);\n\n if (br) {\n let sibling = node.nextSibling;\n const p = $('

');\n\n // while the next node is text or not a block level element\n // append it to a new p node\n while (sibling && !(sibling.tagName && BLOCK_LEVEL_TAGS_RE.test(sibling.tagName))) {\n const nextSibling = sibling.nextSibling;\n $(sibling).appendTo(p);\n sibling = nextSibling;\n }\n\n $node.replaceWith(p);\n $node.remove();\n return $;\n }\n\n return $;\n}\n","import { brsToPs, convertNodeTo } from 'utils/dom';\n\nimport { DIV_TO_P_BLOCK_TAGS } from './constants';\n\nfunction convertDivs($) {\n $('div').each((index, div) => {\n const $div = $(div);\n const convertable = $div.children(DIV_TO_P_BLOCK_TAGS).length === 0;\n\n if (convertable) {\n convertNodeTo($div, $, 'p');\n }\n });\n\n return $;\n}\n\nfunction convertSpans($) {\n $('span').each((index, span) => {\n const $span = $(span);\n const convertable = $span.parents('p, div').length === 0;\n if (convertable) {\n convertNodeTo($span, $, 'p');\n }\n });\n\n return $;\n}\n\n// Loop through the provided doc, and convert any p-like elements to\n// actual paragraph tags.\n//\n// Things fitting this criteria:\n// * Multiple consecutive
tags.\n// *
tags without block level elements inside of them\n// * tags who are not children of

or

tags.\n//\n// :param $: A cheerio object to search\n// :return cheerio object with new p elements\n// (By-reference mutation, though. Returned just for convenience.)\n\nexport default function convertToParagraphs($) {\n $ = brsToPs($);\n $ = convertDivs($);\n $ = convertSpans($);\n\n return $;\n}\n","import { getAttrs } from 'utils/dom';\n\nexport default function convertNodeTo($node, $, tag = 'p') {\n const node = $node.get(0);\n if (!node) {\n return $;\n }\n const attrs = getAttrs(node) || {};\n // console.log(attrs)\n\n const attribString = Reflect.ownKeys(attrs)\n .map(key => `${key}=${attrs[key]}`)\n .join(' ');\n let html;\n\n if ($.browser) {\n // In the browser, the contents of noscript tags aren't rendered, therefore\n // transforms on the noscript tag (commonly used for lazy-loading) don't work\n // as expected. This test case handles that\n html = node.tagName.toLowerCase() === 'noscript' ? $node.text() : $node.html();\n } else {\n html = $node.contents();\n }\n $node.replaceWith(\n `<${tag} ${attribString}>${html}`\n );\n return $;\n}\n","import { SPACER_RE } from './constants';\n\nfunction cleanForHeight($img, $) {\n const height = parseInt($img.attr('height'), 10);\n const width = parseInt($img.attr('width'), 10) || 20;\n\n // Remove images that explicitly have very small heights or\n // widths, because they are most likely shims or icons,\n // which aren't very useful for reading.\n if ((height || 20) < 10 || width < 10) {\n $img.remove();\n } else if (height) {\n // Don't ever specify a height on images, so that we can\n // scale with respect to width without screwing up the\n // aspect ratio.\n $img.removeAttr('height');\n }\n\n return $;\n}\n\n// Cleans out images where the source string matches transparent/spacer/etc\n// TODO This seems very aggressive - AP\nfunction removeSpacers($img, $) {\n if (SPACER_RE.test($img.attr('src'))) {\n $img.remove();\n }\n\n return $;\n}\n\nexport default function cleanImages($article, $) {\n $article.find('img').each((index, img) => {\n const $img = $(img);\n\n cleanForHeight($img, $);\n removeSpacers($img, $);\n });\n\n return $;\n}\n","import URL from 'url';\n\nimport {\n KEEP_SELECTORS,\n KEEP_CLASS,\n} from './constants';\n\nexport default function markToKeep(article, $, url, tags = []) {\n if (tags.length === 0) {\n tags = KEEP_SELECTORS;\n }\n\n if (url) {\n const { protocol, hostname } = URL.parse(url);\n tags = [...tags, `iframe[src^=\"${protocol}//${hostname}\"]`];\n }\n\n $(tags.join(','), article).addClass(KEEP_CLASS);\n\n return $;\n}\n","import {\n STRIP_OUTPUT_TAGS,\n KEEP_CLASS,\n} from './constants';\n\nexport default function stripJunkTags(article, $, tags = []) {\n if (tags.length === 0) {\n tags = STRIP_OUTPUT_TAGS;\n }\n\n // Remove matching elements, but ignore\n // any element with a class of mercury-parser-keep\n $(tags.join(','), article).not(`.${KEEP_CLASS}`).remove();\n\n return $;\n}\n","import { convertNodeTo } from 'utils/dom';\n\n// H1 tags are typically the article title, which should be extracted\n// by the title extractor instead. If there's less than 3 of them (<3),\n// strip them. Otherwise, turn 'em into H2s.\nexport default function cleanHOnes(article, $) {\n const $hOnes = $('h1', article);\n\n if ($hOnes.length < 3) {\n $hOnes.each((index, node) => $(node).remove());\n } else {\n $hOnes.each((index, node) => {\n convertNodeTo($(node), $, 'h2');\n });\n }\n\n return $;\n}\n","import {\n getAttrs,\n setAttrs,\n} from 'utils/dom';\n\nimport {\n WHITELIST_ATTRS_RE,\n KEEP_CLASS,\n} from './constants';\n\nfunction removeAllButWhitelist($article, $) {\n $article.find('*').each((index, node) => {\n const attrs = getAttrs(node);\n\n setAttrs(node, Reflect.ownKeys(attrs).reduce((acc, attr) => {\n if (WHITELIST_ATTRS_RE.test(attr)) {\n return { ...acc, [attr]: attrs[attr] };\n }\n\n return acc;\n }, {}));\n });\n\n // Remove the mercury-parser-keep class from result\n $(`.${KEEP_CLASS}`, $article).removeClass(KEEP_CLASS);\n\n return $article;\n}\n\n// function removeAttrs(article, $) {\n// REMOVE_ATTRS.forEach((attr) => {\n// $(`[${attr}]`, article).removeAttr(attr);\n// });\n// }\n\n// Remove attributes like style or align\nexport default function cleanAttributes($article, $) {\n // Grabbing the parent because at this point\n // $article will be wrapped in a div which will\n // have a score set on it.\n return removeAllButWhitelist(\n $article.parent().length ? $article.parent() : $article,\n $,\n );\n}\n","export default function removeEmpty($article, $) {\n $article.find('p').each((index, p) => {\n const $p = $(p);\n if ($p.find('iframe, img').length === 0 && $p.text().trim() === '') $p.remove();\n });\n\n return $;\n}\n","// // CONTENT FETCHING CONSTANTS ////\n\n// A list of strings that can be considered unlikely candidates when\n// extracting content from a resource. These strings are joined together\n// and then tested for existence using re:test, so may contain simple,\n// non-pipe style regular expression queries if necessary.\nexport const UNLIKELY_CANDIDATES_BLACKLIST = [\n 'ad-break',\n 'adbox',\n 'advert',\n 'addthis',\n 'agegate',\n 'aux',\n 'blogger-labels',\n 'combx',\n 'comment',\n 'conversation',\n 'disqus',\n 'entry-unrelated',\n 'extra',\n 'foot',\n 'form',\n 'header',\n 'hidden',\n 'loader',\n 'login', // Note: This can hit 'blogindex'.\n 'menu',\n 'meta',\n 'nav',\n 'pager',\n 'pagination',\n 'predicta', // readwriteweb inline ad box\n 'presence_control_external', // lifehacker.com container full of false positives\n 'popup',\n 'printfriendly',\n 'related',\n 'remove',\n 'remark',\n 'rss',\n 'share',\n 'shoutbox',\n 'sidebar',\n 'sociable',\n 'sponsor',\n 'tools',\n];\n\n// A list of strings that can be considered LIKELY candidates when\n// extracting content from a resource. Essentially, the inverse of the\n// blacklist above - if something matches both blacklist and whitelist,\n// it is kept. This is useful, for example, if something has a className\n// of \"rss-content entry-content\". It matched 'rss', so it would normally\n// be removed, however, it's also the entry content, so it should be left\n// alone.\n//\n// These strings are joined together and then tested for existence using\n// re:test, so may contain simple, non-pipe style regular expression queries\n// if necessary.\nexport const UNLIKELY_CANDIDATES_WHITELIST = [\n 'and',\n 'article',\n 'body',\n 'blogindex',\n 'column',\n 'content',\n 'entry-content-asset',\n 'format', // misuse of form\n 'hfeed',\n 'hentry',\n 'hatom',\n 'main',\n 'page',\n 'posts',\n 'shadow',\n];\n\n// A list of tags which, if found inside, should cause a
to NOT\n// be turned into a paragraph tag. Shallow div tags without these elements\n// should be turned into

tags.\nexport const DIV_TO_P_BLOCK_TAGS = [\n 'a',\n 'blockquote',\n 'dl',\n 'div',\n 'img',\n 'p',\n 'pre',\n 'table',\n].join(',');\n\n// A list of tags that should be ignored when trying to find the top candidate\n// for a document.\nexport const NON_TOP_CANDIDATE_TAGS = [\n 'br',\n 'b',\n 'i',\n 'label',\n 'hr',\n 'area',\n 'base',\n 'basefont',\n 'input',\n 'img',\n 'link',\n 'meta',\n];\n\nexport const NON_TOP_CANDIDATE_TAGS_RE =\n new RegExp(`^(${NON_TOP_CANDIDATE_TAGS.join('|')})$`, 'i');\n\n// A list of selectors that specify, very clearly, either hNews or other\n// very content-specific style content, like Blogger templates.\n// More examples here: http://microformats.org/wiki/blog-post-formats\nexport const HNEWS_CONTENT_SELECTORS = [\n ['.hentry', '.entry-content'],\n ['entry', '.entry-content'],\n ['.entry', '.entry_content'],\n ['.post', '.postbody'],\n ['.post', '.post_body'],\n ['.post', '.post-body'],\n];\n\nexport const PHOTO_HINTS = [\n 'figure',\n 'photo',\n 'image',\n 'caption',\n];\nexport const PHOTO_HINTS_RE = new RegExp(PHOTO_HINTS.join('|'), 'i');\n\n// A list of strings that denote a positive scoring for this content as being\n// an article container. Checked against className and id.\n//\n// TODO: Perhaps have these scale based on their odds of being quality?\nexport const POSITIVE_SCORE_HINTS = [\n 'article',\n 'articlecontent',\n 'instapaper_body',\n 'blog',\n 'body',\n 'content',\n 'entry-content-asset',\n 'entry',\n 'hentry',\n 'main',\n 'Normal',\n 'page',\n 'pagination',\n 'permalink',\n 'post',\n 'story',\n 'text',\n '[-_]copy', // usatoday\n '\\\\Bcopy',\n];\n\n// The above list, joined into a matching regular expression\nexport const POSITIVE_SCORE_RE = new RegExp(POSITIVE_SCORE_HINTS.join('|'), 'i');\n\n// Readability publisher-specific guidelines\nexport const READABILITY_ASSET = new RegExp('entry-content-asset', 'i');\n\n// A list of strings that denote a negative scoring for this content as being\n// an article container. Checked against className and id.\n//\n// TODO: Perhaps have these scale based on their odds of being quality?\nexport const NEGATIVE_SCORE_HINTS = [\n 'adbox',\n 'advert',\n 'author',\n 'bio',\n 'bookmark',\n 'bottom',\n 'byline',\n 'clear',\n 'com-',\n 'combx',\n 'comment',\n 'comment\\\\B',\n 'contact',\n 'copy',\n 'credit',\n 'crumb',\n 'date',\n 'deck',\n 'excerpt',\n 'featured', // tnr.com has a featured_content which throws us off\n 'foot',\n 'footer',\n 'footnote',\n 'graf',\n 'head',\n 'info',\n 'infotext', // newscientist.com copyright\n 'instapaper_ignore',\n 'jump',\n 'linebreak',\n 'link',\n 'masthead',\n 'media',\n 'meta',\n 'modal',\n 'outbrain', // slate.com junk\n 'promo',\n 'pr_', // autoblog - press release\n 'related',\n 'respond',\n 'roundcontent', // lifehacker restricted content warning\n 'scroll',\n 'secondary',\n 'share',\n 'shopping',\n 'shoutbox',\n 'side',\n 'sidebar',\n 'sponsor',\n 'stamp',\n 'sub',\n 'summary',\n 'tags',\n 'tools',\n 'widget',\n];\n// The above list, joined into a matching regular expression\nexport const NEGATIVE_SCORE_RE = new RegExp(NEGATIVE_SCORE_HINTS.join('|'), 'i');\n\n// Match a digit. Pretty clear.\nexport const DIGIT_RE = new RegExp('[0-9]');\n\n// Match 2 or more consecutive
tags\nexport const BR_TAGS_RE = new RegExp('(]*>[ \\n\\r\\t]*){2,}', 'i');\n\n// Match 1 BR tag.\nexport const BR_TAG_RE = new RegExp(']*>', 'i');\n\n// A list of all of the block level tags known in HTML5 and below. Taken from\n// http://bit.ly/qneNIT\nexport const BLOCK_LEVEL_TAGS = [\n 'article',\n 'aside',\n 'blockquote',\n 'body',\n 'br',\n 'button',\n 'canvas',\n 'caption',\n 'col',\n 'colgroup',\n 'dd',\n 'div',\n 'dl',\n 'dt',\n 'embed',\n 'fieldset',\n 'figcaption',\n 'figure',\n 'footer',\n 'form',\n 'h1',\n 'h2',\n 'h3',\n 'h4',\n 'h5',\n 'h6',\n 'header',\n 'hgroup',\n 'hr',\n 'li',\n 'map',\n 'object',\n 'ol',\n 'output',\n 'p',\n 'pre',\n 'progress',\n 'section',\n 'table',\n 'tbody',\n 'textarea',\n 'tfoot',\n 'th',\n 'thead',\n 'tr',\n 'ul',\n 'video',\n];\nexport const BLOCK_LEVEL_TAGS_RE = new RegExp(`^(${BLOCK_LEVEL_TAGS.join('|')})$`, 'i');\n\n// The removal is implemented as a blacklist and whitelist, this test finds\n// blacklisted elements that aren't whitelisted. We do this all in one\n// expression-both because it's only one pass, and because this skips the\n// serialization for whitelisted nodes.\nconst candidatesBlacklist = UNLIKELY_CANDIDATES_BLACKLIST.join('|');\nexport const CANDIDATES_BLACKLIST = new RegExp(candidatesBlacklist, 'i');\n\nconst candidatesWhitelist = UNLIKELY_CANDIDATES_WHITELIST.join('|');\nexport const CANDIDATES_WHITELIST = new RegExp(candidatesWhitelist, 'i');\n\nexport const UNLIKELY_RE = new RegExp(`!(${candidatesWhitelist})|(${candidatesBlacklist})`, 'i');\n\nexport const PARAGRAPH_SCORE_TAGS = new RegExp('^(p|li|span|pre)$', 'i');\nexport const CHILD_CONTENT_TAGS = new RegExp('^(td|blockquote|ol|ul|dl)$', 'i');\nexport const BAD_TAGS = new RegExp('^(address|form)$', 'i');\n\nexport const HTML_OR_BODY_RE = new RegExp('^(html|body)$', 'i');\n","import {\n NEGATIVE_SCORE_RE,\n POSITIVE_SCORE_RE,\n PHOTO_HINTS_RE,\n READABILITY_ASSET,\n} from './constants';\n\n// Get the score of a node based on its className and id.\nexport default function getWeight(node) {\n const classes = node.attr('class');\n const id = node.attr('id');\n let score = 0;\n\n if (id) {\n // if id exists, try to score on both positive and negative\n if (POSITIVE_SCORE_RE.test(id)) {\n score += 25;\n }\n if (NEGATIVE_SCORE_RE.test(id)) {\n score -= 25;\n }\n }\n\n if (classes) {\n if (score === 0) {\n // if classes exist and id did not contribute to score\n // try to score on both positive and negative\n if (POSITIVE_SCORE_RE.test(classes)) {\n score += 25;\n }\n if (NEGATIVE_SCORE_RE.test(classes)) {\n score -= 25;\n }\n }\n\n // even if score has been set by id, add score for\n // possible photo matches\n // \"try to keep photos if we can\"\n if (PHOTO_HINTS_RE.test(classes)) {\n score += 10;\n }\n\n // add 25 if class matches entry-content-asset,\n // a class apparently instructed for use in the\n // Readability publisher guidelines\n // https://www.readability.com/developers/guidelines\n if (READABILITY_ASSET.test(classes)) {\n score += 25;\n }\n }\n\n return score;\n}\n","// returns the score of a node based on\n// the node's score attribute\n// returns null if no score set\nexport default function getScore($node) {\n return parseFloat($node.attr('score')) || null;\n}\n","// return 1 for every comma in text\nexport default function scoreCommas(text) {\n return (text.match(/,/g) || []).length;\n}\n","const idkRe = new RegExp('^(p|pre)$', 'i');\n\nexport default function scoreLength(textLength, tagName = 'p') {\n const chunks = textLength / 50;\n\n if (chunks > 0) {\n let lengthBonus;\n\n // No idea why p or pre are being tamped down here\n // but just following the source for now\n // Not even sure why tagName is included here,\n // since this is only being called from the context\n // of scoreParagraph\n if (idkRe.test(tagName)) {\n lengthBonus = chunks - 2;\n } else {\n lengthBonus = chunks - 1.25;\n }\n\n return Math.min(Math.max(lengthBonus, 0), 3);\n }\n\n return 0;\n}\n","import {\n scoreCommas,\n scoreLength,\n} from './index';\n\n// Score a paragraph using various methods. Things like number of\n// commas, etc. Higher is better.\nexport default function scoreParagraph(node) {\n let score = 1;\n const text = node.text().trim();\n const textLength = text.length;\n\n // If this paragraph is less than 25 characters, don't count it.\n if (textLength < 25) {\n return 0;\n }\n\n // Add points for any commas within this paragraph\n score += scoreCommas(text);\n\n // For every 50 characters in this paragraph, add another point. Up\n // to 3 points.\n score += scoreLength(textLength);\n\n // Articles can end with short paragraphs when people are being clever\n // but they can also end with short paragraphs setting up lists of junk\n // that we strip. This negative tweaks junk setup paragraphs just below\n // the cutoff threshold.\n if (text.slice(-1) === ':') {\n score -= 1;\n }\n\n return score;\n}\n","export default function setScore($node, $, score) {\n $node.attr('score', score);\n return $node;\n}\n","import {\n getOrInitScore,\n setScore,\n} from './index';\n\nexport default function addScore($node, $, amount) {\n try {\n const score = getOrInitScore($node, $) + amount;\n setScore($node, $, score);\n } catch (e) {\n // Ignoring; error occurs in scoreNode\n }\n\n return $node;\n}\n","import { addScore } from './index';\n\n// Adds 1/4 of a child's score to its parent\nexport default function addToParent(node, $, score) {\n const parent = node.parent();\n if (parent) {\n addScore(parent, $, score * 0.25);\n }\n\n return node;\n}\n","import {\n getScore,\n scoreNode,\n getWeight,\n addToParent,\n} from './index';\n\n// gets and returns the score if it exists\n// if not, initializes a score based on\n// the node's tag type\nexport default function getOrInitScore($node, $, weightNodes = true) {\n let score = getScore($node);\n\n if (score) {\n return score;\n }\n\n score = scoreNode($node);\n\n if (weightNodes) {\n score += getWeight($node);\n }\n\n addToParent($node, $, score);\n\n return score;\n}\n","import { scoreParagraph } from './index';\nimport {\n PARAGRAPH_SCORE_TAGS,\n CHILD_CONTENT_TAGS,\n BAD_TAGS,\n} from './constants';\n\n// Score an individual node. Has some smarts for paragraphs, otherwise\n// just scores based on tag.\nexport default function scoreNode($node) {\n const { tagName } = $node.get(0);\n\n // TODO: Consider ordering by most likely.\n // E.g., if divs are a more common tag on a page,\n // Could save doing that regex test on every node – AP\n if (PARAGRAPH_SCORE_TAGS.test(tagName)) {\n return scoreParagraph($node);\n } else if (tagName.toLowerCase() === 'div') {\n return 5;\n } else if (CHILD_CONTENT_TAGS.test(tagName)) {\n return 3;\n } else if (BAD_TAGS.test(tagName)) {\n return -3;\n } else if (tagName.toLowerCase() === 'th') {\n return -5;\n }\n\n return 0;\n}\n","import { convertNodeTo } from 'utils/dom';\n\nimport { HNEWS_CONTENT_SELECTORS } from './constants';\nimport {\n scoreNode,\n setScore,\n getOrInitScore,\n addScore,\n} from './index';\n\nfunction convertSpans($node, $) {\n if ($node.get(0)) {\n const { tagName } = $node.get(0);\n\n if (tagName === 'span') {\n // convert spans to divs\n convertNodeTo($node, $, 'div');\n }\n }\n}\n\nfunction addScoreTo($node, $, score) {\n if ($node) {\n convertSpans($node, $);\n addScore($node, $, score);\n }\n}\n\nfunction scorePs($, weightNodes) {\n $('p, pre').not('[score]').each((index, node) => {\n // The raw score for this paragraph, before we add any parent/child\n // scores.\n let $node = $(node);\n $node = setScore($node, $, getOrInitScore($node, $, weightNodes));\n\n const $parent = $node.parent();\n const rawScore = scoreNode($node);\n\n addScoreTo($parent, $, rawScore, weightNodes);\n if ($parent) {\n // Add half of the individual content score to the\n // grandparent\n addScoreTo($parent.parent(), $, rawScore / 2, weightNodes);\n }\n });\n\n return $;\n}\n\n// score content. Parents get the full value of their children's\n// content score, grandparents half\nexport default function scoreContent($, weightNodes = true) {\n // First, look for special hNews based selectors and give them a big\n // boost, if they exist\n HNEWS_CONTENT_SELECTORS.forEach(([parentSelector, childSelector]) => {\n $(`${parentSelector} ${childSelector}`).each((index, node) => {\n addScore($(node).parent(parentSelector), $, 80);\n });\n });\n\n // Doubling this again\n // Previous solution caused a bug\n // in which parents weren't retaining\n // scores. This is not ideal, and\n // should be fixed.\n scorePs($, weightNodes);\n scorePs($, weightNodes);\n\n return $;\n}\n","import {\n textLength,\n linkDensity,\n} from 'utils/dom';\nimport { hasSentenceEnd } from 'utils/text';\n\nimport { NON_TOP_CANDIDATE_TAGS_RE } from './constants';\nimport { getScore } from './index';\n\n// Now that we have a top_candidate, look through the siblings of\n// it to see if any of them are decently scored. If they are, they\n// may be split parts of the content (Like two divs, a preamble and\n// a body.) Example:\n// http://articles.latimes.com/2009/oct/14/business/fi-bigtvs14\nexport default function mergeSiblings($candidate, topScore, $) {\n if (!$candidate.parent().length) {\n return $candidate;\n }\n\n const siblingScoreThreshold = Math.max(10, topScore * 0.25);\n const wrappingDiv = $('

');\n\n $candidate.parent().children().each((index, sibling) => {\n const $sibling = $(sibling);\n // Ignore tags like BR, HR, etc\n if (NON_TOP_CANDIDATE_TAGS_RE.test(sibling.tagName)) {\n return null;\n }\n\n const siblingScore = getScore($sibling);\n if (siblingScore) {\n if ($sibling.get(0) === $candidate.get(0)) {\n wrappingDiv.append($sibling);\n } else {\n let contentBonus = 0;\n const density = linkDensity($sibling);\n\n // If sibling has a very low link density,\n // give it a small bonus\n if (density < 0.05) {\n contentBonus += 20;\n }\n\n // If sibling has a high link density,\n // give it a penalty\n if (density >= 0.5) {\n contentBonus -= 20;\n }\n\n // If sibling node has the same class as\n // candidate, give it a bonus\n if ($sibling.attr('class') === $candidate.attr('class')) {\n contentBonus += topScore * 0.2;\n }\n\n const newScore = siblingScore + contentBonus;\n\n if (newScore >= siblingScoreThreshold) {\n return wrappingDiv.append($sibling);\n } else if (sibling.tagName === 'p') {\n const siblingContent = $sibling.text();\n const siblingContentLength = textLength(siblingContent);\n\n if (siblingContentLength > 80 && density < 0.25) {\n return wrappingDiv.append($sibling);\n } else if (siblingContentLength <= 80 && density === 0 &&\n hasSentenceEnd(siblingContent)) {\n return wrappingDiv.append($sibling);\n }\n }\n }\n }\n\n return null;\n });\n\n if (wrappingDiv.children().length === 1 &&\n wrappingDiv.children().first().get(0) === $candidate.get(0)) {\n return $candidate;\n }\n\n return wrappingDiv;\n}\n","import { NON_TOP_CANDIDATE_TAGS_RE } from './constants';\nimport { getScore } from './index';\nimport mergeSiblings from './merge-siblings';\n\n// After we've calculated scores, loop through all of the possible\n// candidate nodes we found and find the one with the highest score.\nexport default function findTopCandidate($) {\n let $candidate;\n let topScore = 0;\n\n $('[score]').each((index, node) => {\n // Ignore tags like BR, HR, etc\n if (NON_TOP_CANDIDATE_TAGS_RE.test(node.tagName)) {\n return;\n }\n\n const $node = $(node);\n const score = getScore($node);\n\n if (score > topScore) {\n topScore = score;\n $candidate = $node;\n }\n });\n\n // If we don't have a candidate, return the body\n // or whatever the first element is\n if (!$candidate) {\n return $('body') || $('*').first();\n }\n\n $candidate = mergeSiblings($candidate, topScore, $);\n\n return $candidate;\n}\n","// Scoring\nexport { default as getWeight } from './get-weight';\nexport { default as getScore } from './get-score';\nexport { default as scoreCommas } from './score-commas';\nexport { default as scoreLength } from './score-length';\nexport { default as scoreParagraph } from './score-paragraph';\nexport { default as setScore } from './set-score';\nexport { default as addScore } from './add-score';\nexport { default as addToParent } from './add-to-parent';\nexport { default as getOrInitScore } from './get-or-init-score';\nexport { default as scoreNode } from './score-node';\nexport { default as scoreContent } from './score-content';\nexport { default as findTopCandidate } from './find-top-candidate';\n","import {\n getScore,\n setScore,\n getOrInitScore,\n scoreCommas,\n} from 'extractors/generic/content/scoring';\n\nimport {\n CLEAN_CONDITIONALLY_TAGS,\n KEEP_CLASS,\n} from './constants';\nimport { normalizeSpaces } from '../text';\nimport { linkDensity } from './index';\n\nfunction removeUnlessContent($node, $, weight) {\n // Explicitly save entry-content-asset tags, which are\n // noted as valuable in the Publisher guidelines. For now\n // this works everywhere. We may want to consider making\n // this less of a sure-thing later.\n if ($node.hasClass('entry-content-asset')) {\n return;\n }\n\n const content = normalizeSpaces($node.text());\n\n if (scoreCommas(content) < 10) {\n const pCount = $('p', $node).length;\n const inputCount = $('input', $node).length;\n\n // Looks like a form, too many inputs.\n if (inputCount > (pCount / 3)) {\n $node.remove();\n return;\n }\n\n const contentLength = content.length;\n const imgCount = $('img', $node).length;\n\n // Content is too short, and there are no images, so\n // this is probably junk content.\n if (contentLength < 25 && imgCount === 0) {\n $node.remove();\n return;\n }\n\n const density = linkDensity($node);\n\n // Too high of link density, is probably a menu or\n // something similar.\n // console.log(weight, density, contentLength)\n if (weight < 25 && density > 0.2 && contentLength > 75) {\n $node.remove();\n return;\n }\n\n // Too high of a link density, despite the score being\n // high.\n if (weight >= 25 && density > 0.5) {\n // Don't remove the node if it's a list and the\n // previous sibling starts with a colon though. That\n // means it's probably content.\n const tagName = $node.get(0).tagName.toLowerCase();\n const nodeIsList = tagName === 'ol' || tagName === 'ul';\n if (nodeIsList) {\n const previousNode = $node.prev();\n if (previousNode && normalizeSpaces(previousNode.text()).slice(-1) === ':') {\n return;\n }\n }\n\n $node.remove();\n return;\n }\n\n const scriptCount = $('script', $node).length;\n\n // Too many script tags, not enough content.\n if (scriptCount > 0 && contentLength < 150) {\n $node.remove();\n return;\n }\n }\n}\n\n// Given an article, clean it of some superfluous content specified by\n// tags. Things like forms, ads, etc.\n//\n// Tags is an array of tag name's to search through. (like div, form,\n// etc)\n//\n// Return this same doc.\nexport default function cleanTags($article, $) {\n $(CLEAN_CONDITIONALLY_TAGS, $article).each((index, node) => {\n const $node = $(node);\n // If marked to keep, skip it\n if ($node.hasClass(KEEP_CLASS) || $node.find(`.${KEEP_CLASS}`).length > 0) return;\n\n let weight = getScore($node);\n if (!weight) {\n weight = getOrInitScore($node, $);\n setScore($node, $, weight);\n }\n\n // drop node if its weight is < 0\n if (weight < 0) {\n $node.remove();\n } else {\n // deteremine if node seems like content\n removeUnlessContent($node, $, weight);\n }\n });\n\n return $;\n}\n","import { getWeight } from 'extractors/generic/content/scoring';\n\nimport { HEADER_TAG_LIST } from './constants';\nimport { normalizeSpaces } from '../text';\n\nexport default function cleanHeaders($article, $, title = '') {\n $(HEADER_TAG_LIST, $article).each((index, header) => {\n const $header = $(header);\n // Remove any headers that appear before all other p tags in the\n // document. This probably means that it was part of the title, a\n // subtitle or something else extraneous like a datestamp or byline,\n // all of which should be handled by other metadata handling.\n if ($($header, $article).prevAll('p').length === 0) {\n return $header.remove();\n }\n\n // Remove any headers that match the title exactly.\n if (normalizeSpaces($(header).text()) === title) {\n return $header.remove();\n }\n\n // If this header has a negative weight, it's probably junk.\n // Get rid of it.\n if (getWeight($(header)) < 0) {\n return $header.remove();\n }\n\n return $header;\n });\n\n return $;\n}\n","import { convertNodeTo } from 'utils/dom';\n\n// Rewrite the tag name to div if it's a top level node like body or\n// html to avoid later complications with multiple body tags.\nexport default function rewriteTopLevel(article, $) {\n // I'm not using context here because\n // it's problematic when converting the\n // top-level/root node - AP\n $ = convertNodeTo($('html'), $, 'div');\n $ = convertNodeTo($('body'), $, 'div');\n\n return $;\n}\n","import URL from 'url';\n\nimport {\n getAttrs,\n setAttr,\n} from 'utils/dom';\n\nfunction absolutize($, rootUrl, attr, $content) {\n $(`[${attr}]`, $content).each((_, node) => {\n const attrs = getAttrs(node);\n const url = attrs[attr];\n\n if (url) {\n const absoluteUrl = URL.resolve(rootUrl, url);\n setAttr(node, attr, absoluteUrl);\n }\n });\n}\n\nexport default function makeLinksAbsolute($content, $, url) {\n ['href', 'src'].forEach(attr => absolutize($, url, attr, $content));\n\n return $content;\n}\n","export function textLength(text) {\n return text.trim()\n .replace(/\\s+/g, ' ')\n .length;\n}\n\n// Determines what percentage of the text\n// in a node is link text\n// Takes a node, returns a float\nexport function linkDensity($node) {\n const totalTextLength = textLength($node.text());\n\n const linkText = $node.find('a').text();\n const linkLength = textLength(linkText);\n\n if (totalTextLength > 0) {\n return linkLength / totalTextLength;\n } else if (totalTextLength === 0 && linkLength > 0) {\n return 1;\n }\n\n return 0;\n}\n","import { stripTags } from 'utils/dom';\n\n// Given a node type to search for, and a list of meta tag names to\n// search for, find a meta tag associated.\nexport default function extractFromMeta(\n $,\n metaNames,\n cachedNames,\n cleanTags = true\n) {\n const foundNames = metaNames.filter(name => cachedNames.indexOf(name) !== -1);\n\n for (const name of foundNames) {\n const type = 'name';\n const value = 'value';\n\n const nodes = $(`meta[${type}=\"${name}\"]`);\n\n // Get the unique value of every matching node, in case there\n // are two meta tags with the same name and value.\n // Remove empty values.\n const values =\n nodes.map((index, node) => $(node).attr(value))\n .toArray()\n .filter(text => text !== '');\n\n // If we have more than one value for the same name, we have a\n // conflict and can't trust any of them. Skip this name. If we have\n // zero, that means our meta tags had no values. Skip this name\n // also.\n if (values.length === 1) {\n let metaValue;\n // Meta values that contain HTML should be stripped, as they\n // weren't subject to cleaning previously.\n if (cleanTags) {\n metaValue = stripTags(values[0], $);\n } else {\n metaValue = values[0];\n }\n\n return metaValue;\n }\n }\n\n // If nothing is found, return null\n return null;\n}\n","import { withinComment } from 'utils/dom';\n\nfunction isGoodNode($node, maxChildren) {\n // If it has a number of children, it's more likely a container\n // element. Skip it.\n if ($node.children().length > maxChildren) {\n return false;\n }\n // If it looks to be within a comment, skip it.\n if (withinComment($node)) {\n return false;\n }\n\n return true;\n}\n\n// Given a a list of selectors find content that may\n// be extractable from the document. This is for flat\n// meta-information, like author, title, date published, etc.\nexport default function extractFromSelectors(\n $,\n selectors,\n maxChildren = 1,\n textOnly = true\n) {\n for (const selector of selectors) {\n const nodes = $(selector);\n\n // If we didn't get exactly one of this selector, this may be\n // a list of articles or comments. Skip it.\n if (nodes.length === 1) {\n const $node = $(nodes[0]);\n\n if (isGoodNode($node, maxChildren)) {\n let content;\n if (textOnly) {\n content = $node.text();\n } else {\n content = $node.html();\n }\n\n if (content) {\n return content;\n }\n }\n }\n }\n\n return null;\n}\n","// strips all tags from a string of text\nexport default function stripTags(text, $) {\n // Wrapping text in html element prevents errors when text\n // has no html\n const cleanText = $(`${text}`).text();\n return cleanText === '' ? text : cleanText;\n}\n","import { getAttrs } from 'utils/dom';\n\nexport default function withinComment($node) {\n const parents = $node.parents().toArray();\n const commentParent = parents.find((parent) => {\n const attrs = getAttrs(parent);\n const { class: nodeClass, id } = attrs;\n const classAndId = `${nodeClass} ${id}`;\n return classAndId.includes('comment');\n });\n\n return commentParent !== undefined;\n}\n","// Given a node, determine if it's article-like enough to return\n// param: node (a cheerio node)\n// return: boolean\n\nexport default function nodeIsSufficient($node) {\n return $node.text().trim().length >= 100;\n}\n","import { IS_WP_SELECTOR } from './constants';\n\nexport default function isWordpress($) {\n return $(IS_WP_SELECTOR).length > 0;\n}\n","export default function getAttrs(node) {\n const { attribs, attributes } = node;\n\n if (!attribs && attributes) {\n const attrs = Reflect.ownKeys(attributes).reduce((acc, index) => {\n const attr = attributes[index];\n\n if (!attr.name || !attr.value) return acc;\n\n acc[attr.name] = attr.value;\n return acc;\n }, {});\n return attrs;\n }\n\n return attribs;\n}\n","export default function setAttr(node, attr, val) {\n if (node.attribs) {\n node.attribs[attr] = val;\n } else if (node.attributes) {\n node.setAttribute(attr, val);\n }\n\n return node;\n}\n","export default function setAttrs(node, attrs) {\n if (node.attribs) {\n node.attribs = attrs;\n } else if (node.attributes) {\n while (node.attributes.length > 0) {\n node.removeAttribute(node.attributes[0].name);\n }\n\n Reflect.ownKeys(attrs).forEach((key) => {\n node.setAttribute(key, attrs[key]);\n });\n }\n\n return node;\n}\n","// DOM manipulation\nexport { default as stripUnlikelyCandidates } from './strip-unlikely-candidates';\nexport { default as brsToPs } from './brs-to-ps';\nexport { default as paragraphize } from './paragraphize';\nexport { default as convertToParagraphs } from './convert-to-paragraphs';\nexport { default as convertNodeTo } from './convert-node-to';\nexport { default as cleanImages } from './clean-images';\nexport { default as markToKeep } from './mark-to-keep';\nexport { default as stripJunkTags } from './strip-junk-tags';\nexport { default as cleanHOnes } from './clean-h-ones';\nexport { default as cleanAttributes } from './clean-attributes';\nexport { default as removeEmpty } from './remove-empty';\nexport { default as cleanTags } from './clean-tags';\nexport { default as cleanHeaders } from './clean-headers';\nexport { default as rewriteTopLevel } from './rewrite-top-level';\nexport { default as makeLinksAbsolute } from './make-links-absolute';\nexport { textLength, linkDensity } from './link-density';\nexport { default as extractFromMeta } from './extract-from-meta';\nexport { default as extractFromSelectors } from './extract-from-selectors';\nexport { default as stripTags } from './strip-tags';\nexport { default as withinComment } from './within-comment';\nexport { default as nodeIsSufficient } from './node-is-sufficient';\nexport { default as isWordpress } from './is-wordpress';\nexport { default as getAttrs } from './get-attrs';\nexport { default as setAttr } from './set-attr';\nexport { default as setAttrs } from './set-attrs';\n","export const IS_LINK = new RegExp('https?://', 'i');\nexport const IS_IMAGE = new RegExp('.(png|gif|jpe?g)', 'i');\n\nexport const TAGS_TO_REMOVE = [\n 'script',\n 'style',\n 'form',\n].join(',');\n","import { getAttrs } from 'utils/dom';\n\nimport {\n IS_LINK,\n IS_IMAGE,\n} from './constants';\n\n// Convert all instances of images with potentially\n// lazy loaded images into normal images.\n// Many sites will have img tags with no source, or an image tag with a src\n// attribute that a is a placeholer. We need to be able to properly fill in\n// the src attribute so the images are no longer lazy loaded.\nexport default function convertLazyLoadedImages($) {\n $('img').each((_, img) => {\n const attrs = getAttrs(img);\n\n Reflect.ownKeys(attrs).forEach((attr) => {\n const value = attrs[attr];\n\n if (attr !== 'src' && IS_LINK.test(value) &&\n IS_IMAGE.test(value)) {\n $(img).attr('src', value);\n }\n });\n });\n\n return $;\n}\n","import { TAGS_TO_REMOVE } from './constants';\n\nfunction isComment(index, node) {\n return node.type === 'comment';\n}\n\nfunction cleanComments($) {\n $.root().find('*')\n .contents()\n .filter(isComment)\n .remove();\n\n return $;\n}\n\nexport default function clean($) {\n $(TAGS_TO_REMOVE).remove();\n\n $ = cleanComments($);\n return $;\n}\n","import cheerio from 'cheerio';\nimport iconv from 'iconv-lite';\n\nimport { getEncoding } from 'utils/text';\nimport { fetchResource } from './utils';\nimport {\n normalizeMetaTags,\n convertLazyLoadedImages,\n clean,\n} from './utils/dom';\n\nconst Resource = {\n\n // Create a Resource.\n //\n // :param url: The URL for the document we should retrieve.\n // :param response: If set, use as the response rather than\n // attempting to fetch it ourselves. Expects a\n // string.\n async create(url, preparedResponse, parsedUrl) {\n let result;\n\n if (preparedResponse) {\n const validResponse = {\n statusMessage: 'OK',\n statusCode: 200,\n headers: {\n 'content-type': 'text/html',\n 'content-length': 500,\n },\n };\n\n result = { body: preparedResponse, response: validResponse };\n } else {\n result = await fetchResource(url, parsedUrl);\n }\n\n if (result.error) {\n result.failed = true;\n return result;\n }\n\n return this.generateDoc(result);\n },\n\n generateDoc({ body: content, response }) {\n const { 'content-type': contentType } = response.headers;\n\n // TODO: Implement is_text function from\n // https://github.com/ReadabilityHoldings/readability/blob/8dc89613241d04741ebd42fa9fa7df1b1d746303/readability/utils/text.py#L57\n if (!contentType.includes('html') &&\n !contentType.includes('text')) {\n throw new Error('Content does not appear to be text.');\n }\n\n let $ = this.encodeDoc({ content, contentType });\n\n if ($.root().children().length === 0) {\n throw new Error('No children, likely a bad parse.');\n }\n\n $ = normalizeMetaTags($);\n $ = convertLazyLoadedImages($);\n $ = clean($);\n\n return $;\n },\n\n encodeDoc({ content, contentType }) {\n const encoding = getEncoding(contentType);\n let decodedContent = iconv.decode(content, encoding);\n let $ = cheerio.load(decodedContent);\n\n // after first cheerio.load, check to see if encoding matches\n const metaContentType = $('meta[http-equiv=content-type]').attr('content');\n const properEncoding = getEncoding(metaContentType);\n\n // if encodings in the header/body dont match, use the one in the body\n if (properEncoding !== encoding) {\n decodedContent = iconv.decode(content, properEncoding);\n $ = cheerio.load(decodedContent);\n }\n\n return $;\n },\n};\n\nexport default Resource;\n","const merge = (extractor, domains) => (\n domains.reduce((acc, domain) => {\n acc[domain] = extractor;\n return acc;\n }, {})\n);\n\nexport default function mergeSupportedDomains(extractor) {\n return extractor.supportedDomains ?\n merge(extractor, [extractor.domain, ...extractor.supportedDomains])\n :\n merge(extractor, [extractor.domain]);\n}\n","export const BloggerExtractor = {\n domain: 'blogspot.com',\n content: {\n // Blogger is insane and does not load its content\n // initially in the page, but it's all there\n // in noscript\n selectors: [\n '.post-content noscript',\n ],\n\n // Selectors to remove from the extracted content\n clean: [\n ],\n\n // Convert the noscript tag to a div\n transforms: {\n noscript: 'div',\n },\n },\n\n author: {\n selectors: [\n '.post-author-name',\n ],\n },\n\n title: {\n selectors: [\n '.post h2.title',\n ],\n },\n\n date_published: {\n selectors: [\n 'span.publishdate',\n ],\n },\n};\n","export const NYMagExtractor = {\n domain: 'nymag.com',\n content: {\n // Order by most likely. Extractor will stop on first occurrence\n selectors: [\n 'div.article-content',\n 'section.body',\n 'article.article',\n ],\n\n // Selectors to remove from the extracted content\n clean: [\n '.ad',\n '.single-related-story',\n ],\n\n // Object of tranformations to make on matched elements\n // Each key is the selector, each value is the tag to\n // transform to.\n // If a function is given, it should return a string\n // to convert to or nothing (in which case it will not perform\n // the transformation.\n transforms: {\n // Convert h1s to h2s\n h1: 'h2',\n\n // Convert lazy-loaded noscript images to figures\n noscript: ($node, $) => {\n const $children = $.browser ? $($node.text()) : $node.children();\n if ($children.length === 1 && $children.get(0) !== undefined &&\n $children.get(0).tagName.toLowerCase() === 'img') {\n return 'figure';\n }\n\n return null;\n },\n },\n },\n\n title: {\n selectors: [\n 'h1.lede-feature-title',\n 'h1.headline-primary',\n 'h1',\n ],\n },\n\n author: {\n selectors: [\n '.by-authors',\n '.lede-feature-author',\n ],\n },\n\n dek: {\n selectors: [\n '.lede-feature-teaser',\n ],\n },\n\n date_published: {\n selectors: [\n ['time.article-timestamp[datetime]', 'datetime'],\n 'time.article-timestamp',\n ],\n },\n};\n","export const WikipediaExtractor = {\n domain: 'wikipedia.org',\n content: {\n selectors: [\n '#mw-content-text',\n ],\n\n defaultCleaner: false,\n\n // transform top infobox to an image with caption\n transforms: {\n '.infobox img': ($node) => {\n const $parent = $node.parents('.infobox');\n // Only prepend the first image in .infobox\n if ($parent.children('img').length === 0) {\n $parent.prepend($node);\n }\n },\n '.infobox caption': 'figcaption',\n '.infobox': 'figure',\n },\n\n // Selectors to remove from the extracted content\n clean: [\n '.mw-editsection',\n 'figure tr, figure td, figure tbody',\n '#toc',\n '.navbox',\n ],\n\n },\n\n author: 'Wikipedia Contributors',\n\n title: {\n selectors: [\n 'h2.title',\n ],\n },\n\n date_published: {\n selectors: [\n '#footer-info-lastmod',\n ],\n },\n\n};\n","export const TwitterExtractor = {\n domain: 'twitter.com',\n\n content: {\n transforms: {\n // We're transforming essentially the whole page here.\n // Twitter doesn't have nice selectors, so our initial\n // selector grabs the whole page, then we're re-writing\n // it to fit our needs before we clean it up.\n '.permalink[role=main]': ($node, $) => {\n const tweets = $node.find('.tweet');\n const $tweetContainer = $('
');\n $tweetContainer.append(tweets);\n $node.replaceWith($tweetContainer);\n },\n\n // Twitter wraps @ with s, which\n // renders as a strikethrough\n s: 'span',\n },\n\n selectors: [\n '.permalink[role=main]',\n ],\n\n defaultCleaner: false,\n\n clean: [\n '.stream-item-footer',\n 'button',\n '.tweet-details-fixer',\n ],\n },\n\n author: {\n selectors: [\n '.tweet.permalink-tweet .username',\n ],\n },\n\n date_published: {\n selectors: [\n ['.permalink-tweet ._timestamp[data-time-ms]', 'data-time-ms'],\n // '.tweet.permalink-tweet .metadata',\n ],\n },\n\n};\n","export const NYTimesExtractor = {\n domain: 'www.nytimes.com',\n\n title: {\n selectors: [\n '.g-headline',\n 'h1.headline',\n ],\n },\n\n author: {\n selectors: [\n ['meta[name=\"author\"]', 'value'],\n '.g-byline',\n '.byline',\n ],\n },\n\n content: {\n selectors: [\n 'div.g-blocks',\n 'article#story',\n ],\n\n transforms: {\n 'img.g-lazy': ($node) => {\n let src = $node.attr('src');\n // const widths = $node.attr('data-widths')\n // .slice(1)\n // .slice(0, -1)\n // .split(',');\n // if (widths.length) {\n // width = widths.slice(-1);\n // } else {\n // width = '900';\n // }\n const width = 640;\n\n src = src.replace('{{size}}', width);\n $node.attr('src', src);\n },\n },\n\n clean: [\n '.ad',\n 'header#story-header',\n '.story-body-1 .lede.video',\n '.visually-hidden',\n '#newsletter-promo',\n '.promo',\n '.comments-button',\n '.hidden',\n '.comments',\n '.supplemental',\n '.nocontent',\n '.story-footer-links',\n ],\n },\n\n date_published: {\n selectors: [\n ['meta[name=\"article:published\"]', 'value'],\n ],\n },\n\n lead_image_url: {\n selectors: [\n ['meta[name=\"og:image\"]', 'value'],\n ],\n },\n\n dek: null,\n\n next_page_url: null,\n\n excerpt: null,\n};\n","// Rename CustomExtractor\n// to fit your publication\nexport const TheAtlanticExtractor = {\n domain: 'www.theatlantic.com',\n title: {\n selectors: [\n 'h1.hed',\n ],\n },\n\n author: {\n selectors: [\n 'article#article .article-cover-extra .metadata .byline a',\n ],\n },\n\n content: {\n selectors: [\n ['.article-cover figure.lead-img', '.article-body'],\n '.article-body',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: [\n ],\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n '.partner-box',\n '.callout',\n ],\n },\n\n date_published: {\n selectors: [\n ['time[itemProp=\"datePublished\"]', 'datetime'],\n ],\n },\n\n lead_image_url: null,\n\n next_page_url: null,\n\n excerpt: null,\n};\n","// Rename CustomExtractor\n// to fit your publication\n// (e.g., NYTimesExtractor)\nexport const NewYorkerExtractor = {\n domain: 'www.newyorker.com',\n title: {\n selectors: [\n 'h1.title',\n ],\n },\n\n author: {\n selectors: [\n '.contributors',\n ],\n },\n\n content: {\n selectors: [\n 'div#articleBody',\n 'div.articleBody',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: [\n ],\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n\n ],\n },\n\n date_published: {\n selectors: [\n ['meta[name=\"article:published_time\"]', 'value'],\n ['time[itemProp=\"datePublished\"]', 'content'],\n ],\n\n timezone: 'America/New_York',\n },\n\n lead_image_url: {\n selectors: [\n ['meta[name=\"og:image\"]', 'value'],\n ],\n },\n\n dek: {\n selectors: [\n '.dek',\n 'h2.dek',\n ],\n },\n\n next_page_url: null,\n\n excerpt: null,\n};\n","// Rename CustomExtractor\n// to fit your publication\n// (e.g., NYTimesExtractor)\nexport const WiredExtractor = {\n domain: 'www.wired.com',\n title: {\n selectors: [\n 'h1.post-title',\n // enter title selectors\n ],\n },\n\n author: {\n selectors: [\n 'a[rel=\"author\"]',\n // enter author selectors\n ],\n },\n\n content: {\n selectors: [\n 'article.content',\n // enter content selectors\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: [\n ],\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n '.visually-hidden',\n 'figcaption img.photo',\n\n ],\n },\n\n date_published: {\n selectors: [\n ['meta[itemprop=\"datePublished\"]', 'value'],\n ],\n },\n\n lead_image_url: {\n selectors: [\n ['meta[name=\"og:image\"]', 'value'],\n ],\n },\n\n dek: {\n selectors: [\n ],\n },\n\n next_page_url: null,\n\n excerpt: null,\n};\n","// Rename CustomExtractor\n// to fit your publication\n// (e.g., NYTimesExtractor)\nexport const MSNExtractor = {\n domain: 'www.msn.com',\n title: {\n selectors: [\n 'h1',\n // enter title selectors\n ],\n },\n\n author: {\n selectors: [\n 'span.authorname-txt',\n // enter author selectors\n ],\n },\n\n content: {\n selectors: [\n 'div.richtext',\n // enter content selectors\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: [\n ],\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n 'span.caption',\n\n ],\n },\n\n date_published: {\n selectors: [\n 'span.time',\n ],\n },\n\n lead_image_url: {\n selectors: [\n\n ],\n },\n\n dek: {\n selectors: [\n ],\n },\n\n next_page_url: null,\n\n excerpt: null,\n};\n","// Rename CustomExtractor\n// to fit your publication\n// (e.g., NYTimesExtractor)\nexport const YahooExtractor = {\n domain: 'www.yahoo.com',\n title: {\n selectors: [\n 'header.canvas-header',\n // enter title selectors\n ],\n },\n\n author: {\n selectors: [\n 'span.provider-name',\n // enter author selectors\n ],\n },\n\n content: {\n selectors: [\n // enter content selectors\n '.content-canvas',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: [\n ],\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n '.figure-caption',\n\n ],\n },\n\n date_published: {\n selectors: [\n ['time.date[datetime]', 'datetime'],\n ],\n },\n\n lead_image_url: {\n selectors: [\n ['meta[name=\"og:image\"]', 'value'],\n ],\n },\n\n dek: {\n selectors: [\n // enter dek selectors\n ],\n },\n\n next_page_url: null,\n\n excerpt: null,\n};\n","// Rename CustomExtractor\n// to fit your publication\n// (e.g., NYTimesExtractor)\nexport const BuzzfeedExtractor = {\n domain: 'www.buzzfeed.com',\n title: {\n selectors: [\n 'h1[id=\"post-title\"]',\n // enter title selectors\n ],\n },\n\n author: {\n selectors: [\n 'a[data-action=\"user/username\"]', 'byline__author',\n // enter author selectors\n ],\n },\n\n content: {\n selectors: [\n ['.longform_custom_header_media', '#buzz_sub_buzz'],\n '#buzz_sub_buzz',\n ],\n\n defaultCleaner: false,\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n h2: 'b',\n\n 'div.longform_custom_header_media': ($node) => {\n if ($node.has('img') && $node.has('.longform_header_image_source')) {\n return 'figure';\n }\n\n return null;\n },\n\n 'figure.longform_custom_header_media .longform_header_image_source':\n 'figcaption',\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n '.instapaper_ignore',\n '.suplist_list_hide .buzz_superlist_item .buzz_superlist_number_inline',\n '.share-box',\n '.print',\n ],\n },\n\n date_published: {\n selectors: [\n '.buzz-datetime',\n ],\n },\n\n lead_image_url: {\n selectors: [\n ['meta[name=\"og:image\"]', 'value'],\n ],\n },\n\n dek: {\n selectors: [\n ],\n },\n\n next_page_url: null,\n\n excerpt: null,\n};\n","// Rename CustomExtractor\n// to fit your publication\n// (e.g., NYTimesExtractor)\nexport const WikiaExtractor = {\n domain: 'fandom.wikia.com',\n title: {\n selectors: [\n 'h1.entry-title',\n // enter title selectors\n ],\n },\n\n author: {\n selectors: [\n '.author vcard', '.fn',\n // enter author selectors\n ],\n },\n\n content: {\n selectors: [\n '.grid-content',\n '.entry-content',\n // enter content selectors\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: [\n ],\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n\n ],\n },\n\n date_published: {\n selectors: [\n ['meta[name=\"article:published_time\"]', 'value'],\n ],\n },\n\n lead_image_url: {\n selectors: [\n ['meta[name=\"og:image\"]', 'value'],\n ],\n },\n\n dek: {\n selectors: [\n ],\n },\n\n next_page_url: null,\n\n excerpt: null,\n};\n","// Rename CustomExtractor\n// to fit your publication\n// (e.g., NYTimesExtractor)\nexport const LittleThingsExtractor = {\n domain: 'www.littlethings.com',\n title: {\n selectors: [\n 'h1.post-title',\n // enter title selectors\n ],\n },\n\n author: {\n selectors: [\n ['meta[name=\"author\"]', 'value'],\n // enter author selectors\n ],\n },\n\n content: {\n selectors: [\n // enter content selectors\n '.mainContentIntro',\n '.content-wrapper',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: [\n ],\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n\n ],\n },\n\n lead_image_url: {\n selectors: [\n ['meta[name=\"og:image\"]', 'value'],\n ],\n },\n\n next_page_url: null,\n\n excerpt: null,\n};\n","// Rename CustomExtractor\n// to fit your publication\n// (e.g., NYTimesExtractor)\nexport const PoliticoExtractor = {\n domain: 'www.politico.com',\n title: {\n selectors: [\n // enter title selectors\n ['meta[name=\"og:title\"]', 'value'],\n ],\n },\n\n author: {\n selectors: [\n '.story-main-content .byline .vcard',\n ],\n },\n\n content: {\n selectors: [\n // enter content selectors\n '.story-main-content',\n '.content-group', '.story-core',\n '.story-text',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: [\n ],\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n 'figcaption',\n ],\n },\n\n date_published: {\n selectors: [\n ['.story-main-content .timestamp time[datetime]', 'datetime'],\n\n ],\n },\n\n lead_image_url: {\n selectors: [\n // enter lead_image_url selectors\n ['meta[name=\"og:image\"]', 'value'],\n\n ],\n },\n\n dek: {\n selectors: [\n ],\n },\n\n next_page_url: null,\n\n excerpt: null,\n};\n","export const DeadspinExtractor = {\n domain: 'deadspin.com',\n\n supportedDomains: [\n 'jezebel.com',\n 'lifehacker.com',\n 'kotaku.com',\n 'gizmodo.com',\n 'jalopnik.com',\n 'kinja.com',\n ],\n\n title: {\n selectors: [\n 'h1.headline',\n ],\n },\n\n author: {\n selectors: [\n '.author',\n ],\n },\n\n content: {\n selectors: [\n '.post-content',\n '.entry-content',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n 'iframe.lazyload[data-recommend-id^=\"youtube://\"]': ($node) => {\n const youtubeId = $node.attr('id').split('youtube-')[1];\n $node.attr('src', `https://www.youtube.com/embed/${youtubeId}`);\n },\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n '.magnifier',\n '.lightbox',\n ],\n },\n\n date_published: {\n selectors: [\n ['time.updated[datetime]', 'datetime'],\n ],\n },\n\n lead_image_url: {\n selectors: [\n ['meta[name=\"og:image\"]', 'value'],\n ],\n },\n\n dek: {\n selectors: [\n // enter selectors\n ],\n },\n\n next_page_url: {\n selectors: [\n // enter selectors\n ],\n },\n\n excerpt: {\n selectors: [\n // enter selectors\n ],\n },\n};\n","// Rename CustomExtractor\n// to fit your publication\n// (e.g., NYTimesExtractor)\nexport const BroadwayWorldExtractor = {\n domain: 'www.broadwayworld.com',\n title: {\n selectors: [\n 'h1.article-title',\n ],\n },\n\n author: {\n selectors: [\n 'span[itemprop=author]',\n ],\n },\n\n content: {\n selectors: [\n 'div[itemprop=articlebody]',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n\n ],\n },\n\n date_published: {\n selectors: [\n ['meta[itemprop=datePublished]', 'value'],\n ],\n },\n\n lead_image_url: {\n selectors: [\n ['meta[name=\"og:image\"]', 'value'],\n ],\n },\n\n dek: {\n selectors: [\n ],\n },\n\n next_page_url: {\n selectors: [\n // enter selectors\n ],\n },\n\n excerpt: {\n selectors: [\n // enter selectors\n ],\n },\n};\n","// Rename CustomExtractor\n// to fit your publication\n// (e.g., NYTimesExtractor)\nexport const ApartmentTherapyExtractor = {\n domain: 'www.apartmenttherapy.com',\n title: {\n selectors: [\n 'h1.headline',\n ],\n },\n\n author: {\n selectors: [\n '.PostByline__name',\n ],\n },\n\n content: {\n selectors: [\n 'div.post__content',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n 'div[data-render-react-id=\"images/LazyPicture\"]': ($node, $) => {\n const data = JSON.parse($node.attr('data-props'));\n const { src } = data.sources[0];\n const $img = $('').attr('src', src);\n $node.replaceWith($img);\n },\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n\n ],\n },\n\n date_published: {\n selectors: [\n ['.PostByline__timestamp[datetime]', 'datetime'],\n ],\n },\n\n lead_image_url: {\n selectors: [\n ['meta[name=\"og:image\"]', 'value'],\n ],\n },\n\n dek: {\n selectors: [\n ],\n },\n\n next_page_url: {\n selectors: [\n // enter selectors\n ],\n },\n\n excerpt: {\n selectors: [\n // enter selectors\n ],\n },\n};\n","export const MediumExtractor = {\n domain: 'medium.com',\n\n supportedDomains: [\n 'trackchanges.postlight.com',\n ],\n\n title: {\n selectors: [\n 'h1',\n ],\n },\n\n author: {\n selectors: [\n ['meta[name=\"author\"]', 'value'],\n ],\n },\n\n content: {\n selectors: [\n ['.section-content'],\n '.section-content',\n 'article > div > section',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n // Re-write lazy-loaded youtube videos\n iframe: ($node) => {\n const ytRe =\n /https:\\/\\/i.embed.ly\\/.+url=https:\\/\\/i\\.ytimg\\.com\\/vi\\/(\\w+)\\//;\n const thumb = decodeURIComponent($node.attr('data-thumbnail'));\n\n if (ytRe.test(thumb)) {\n const [_, youtubeId] = thumb.match(ytRe) // eslint-disable-line\n $node.attr('src', `https://www.youtube.com/embed/${youtubeId}`);\n const $parent = $node.parents('figure');\n const $caption = $parent.find('figcaption');\n $parent.empty().append([$node, $caption]);\n }\n },\n\n // rewrite figures to pull out image and caption, remove rest\n figure: ($node) => {\n // ignore if figure has an iframe\n if ($node.find('iframe').length > 0) return;\n\n const $img = $node.find('img').slice(-1)[0];\n const $caption = $node.find('figcaption');\n $node.empty().append([$img, $caption]);\n },\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n\n ],\n },\n\n date_published: {\n selectors: [\n ['time[datetime]', 'datetime'],\n ],\n },\n\n lead_image_url: {\n selectors: [\n ['meta[name=\"og:image\"]', 'value'],\n ],\n },\n\n dek: {\n selectors: [\n // enter selectors\n ],\n },\n\n next_page_url: {\n selectors: [\n // enter selectors\n ],\n },\n\n excerpt: {\n selectors: [\n // enter selectors\n ],\n },\n};\n","export const WwwTmzComExtractor = {\n domain: 'www.tmz.com',\n\n title: {\n selectors: [\n '.post-title-breadcrumb',\n 'h1',\n '.headline',\n ],\n },\n\n author: 'TMZ STAFF',\n\n date_published: {\n selectors: [\n '.article-posted-date',\n ],\n\n timezone: 'America/Los_Angeles',\n },\n\n dek: {\n selectors: [\n // enter selectors\n ],\n },\n\n lead_image_url: {\n selectors: [\n ['meta[name=\"og:image\"]', 'value'],\n ],\n },\n\n content: {\n selectors: [\n '.article-content',\n '.all-post-body',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n '.lightbox-link',\n ],\n },\n};\n","export const WwwWashingtonpostComExtractor = {\n domain: 'www.washingtonpost.com',\n\n title: {\n selectors: [\n 'h1',\n '#topper-headline-wrapper',\n ],\n },\n\n author: {\n selectors: [\n '.pb-byline',\n ],\n },\n\n date_published: {\n selectors: [\n ['.pb-timestamp[itemprop=\"datePublished\"]', 'content'],\n ],\n },\n\n dek: {\n selectors: [\n ],\n },\n\n lead_image_url: {\n selectors: [\n ['meta[name=\"og:image\"]', 'value'],\n ],\n },\n\n content: {\n selectors: [\n '.article-body',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n 'div.inline-content': ($node) => {\n if ($node.has('img,iframe,video').length > 0) {\n return 'figure';\n }\n\n $node.remove();\n return null;\n },\n '.pb-caption': 'figcaption',\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n '.interstitial-link',\n '.newsletter-inline-unit',\n ],\n },\n};\n","export const WwwHuffingtonpostComExtractor = {\n domain: 'www.huffingtonpost.com',\n\n title: {\n selectors: [\n 'h1.headline__title',\n ],\n },\n\n author: {\n selectors: [\n 'span.author-card__details__name',\n ],\n },\n\n date_published: {\n selectors: [\n ['meta[name=\"article:modified_time\"]', 'value'],\n ['meta[name=\"article:published_time\"]', 'value'],\n ],\n },\n\n dek: {\n selectors: [\n 'h2.headline__subtitle',\n ],\n },\n\n lead_image_url: {\n selectors: [\n ['meta[name=\"og:image\"]', 'value'],\n ],\n },\n\n content: {\n selectors: [\n 'div.entry__body',\n ],\n\n defaultCleaner: false,\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n // 'div.top-media': ($node) => {\n // const $figure = $node.children('figure');\n // $node.replaceWith($figure);\n // },\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n '.pull-quote',\n '.tag-cloud',\n '.embed-asset',\n '.below-entry',\n '.entry-corrections',\n '#suggested-story',\n ],\n },\n};\n","export const NewrepublicComExtractor = {\n domain: 'newrepublic.com',\n\n title: {\n selectors: [\n 'h1.article-headline',\n '.minutes-primary h1.minute-title',\n ],\n },\n\n author: {\n selectors: [\n 'div.author-list',\n '.minutes-primary h3.minute-byline',\n ],\n },\n\n date_published: {\n selectors: [\n ['meta[name=\"article:published_time\"]', 'value'],\n ],\n\n timezone: 'America/New_York',\n },\n\n dek: {\n selectors: [\n 'h2.article-subhead',\n ],\n },\n\n lead_image_url: {\n selectors: [\n ['meta[name=\"og:image\"]', 'value'],\n ],\n },\n\n content: {\n selectors: [\n ['.article-cover', 'div.content-body'],\n ['.minute-image', '.minutes-primary div.content-body'],\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n 'aside',\n ],\n },\n};\n","export const MoneyCnnComExtractor = {\n domain: 'money.cnn.com',\n\n title: {\n selectors: [\n '.article-title',\n ],\n },\n\n author: {\n selectors: [\n '.byline a',\n ],\n },\n\n date_published: {\n selectors: [\n ['meta[name=\"date\"]', 'value'],\n ],\n\n timezone: 'GMT',\n },\n\n dek: {\n selectors: [\n '#storytext h2',\n ],\n },\n\n lead_image_url: {\n selectors: [\n ['meta[name=\"og:image\"]', 'value'],\n ],\n },\n\n content: {\n selectors: [\n '#storytext',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n '.inStoryHeading',\n ],\n },\n};\n","export const WwwThevergeComExtractor = {\n domain: 'www.theverge.com',\n\n supportedDomains: ['www.polygon.com'],\n\n title: {\n selectors: [\n 'h1',\n ],\n },\n\n author: {\n selectors: [\n ['meta[name=\"author\"]', 'value'],\n ],\n },\n\n date_published: {\n selectors: [\n ['meta[name=\"article:published_time\"]', 'value'],\n ],\n },\n\n dek: {\n selectors: [\n 'h2.p-dek',\n ],\n },\n\n lead_image_url: {\n selectors: [\n ['meta[name=\"og:image\"]', 'value'],\n ],\n },\n\n content: {\n selectors: [\n // feature template multi-match\n ['.c-entry-hero .e-image', '.c-entry-intro', '.c-entry-content'],\n // regular post multi-match\n ['.e-image--hero', '.c-entry-content'],\n // feature template fallback\n '.l-wrapper .l-feature',\n // regular post fallback\n 'div.c-entry-content',\n ],\n\n // Transform lazy-loaded images\n transforms: {\n noscript: ($node) => {\n const $children = $node.children();\n if ($children.length === 1 && $children.get(0).tagName === 'img') {\n return 'span';\n }\n\n return null;\n },\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n '.aside',\n 'img.c-dynamic-image', // images come from noscript transform\n ],\n },\n};\n","export const WwwCnnComExtractor = {\n domain: 'www.cnn.com',\n\n title: {\n selectors: [\n 'h1.pg-headline',\n 'h1',\n ],\n },\n\n author: {\n selectors: [\n '.metadata__byline__author',\n ],\n },\n\n date_published: {\n selectors: [\n ['meta[name=\"pubdate\"]', 'value'],\n ],\n },\n\n lead_image_url: {\n selectors: [\n ['meta[name=\"og:image\"]', 'value'],\n ],\n },\n\n content: {\n selectors: [\n // a more specific selector to grab the lead image and the body\n ['.media__video--thumbnail', '.zn-body-text'],\n // a fallback for the above\n '.zn-body-text',\n 'div[itemprop=\"articleBody\"]',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n '.zn-body__paragraph, .el__leafmedia--sourced-paragraph': ($node) => {\n const $text = $node.html();\n if ($text) {\n return 'p';\n }\n\n return null;\n },\n\n // this transform cleans the short, all-link sections linking\n // to related content but not marked as such in any way.\n '.zn-body__paragraph': ($node) => {\n if ($node.has('a')) {\n if ($node.text().trim() === $node.find('a').text().trim()) {\n $node.remove();\n }\n }\n },\n\n '.media__video--thumbnail': 'figure',\n\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n ],\n },\n};\n","export const WwwAolComExtractor = {\n domain: 'www.aol.com',\n\n title: {\n selectors: [\n 'h1.p-article__title',\n ],\n },\n\n author: {\n selectors: [\n ['meta[name=\"author\"]', 'value'],\n ],\n },\n\n date_published: {\n selectors: [\n '.p-article__byline__date',\n ],\n\n timezone: 'America/New_York',\n },\n\n dek: {\n selectors: [\n // enter selectors\n ],\n },\n\n lead_image_url: {\n selectors: [\n ['meta[name=\"og:image\"]', 'value'],\n ],\n },\n\n content: {\n selectors: [\n '.article-content',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n\n ],\n },\n};\n","export const WwwYoutubeComExtractor = {\n domain: 'www.youtube.com',\n\n title: {\n selectors: [\n '.watch-title',\n 'h1.watch-title-container',\n ],\n },\n\n author: {\n selectors: [\n '.yt-user-info',\n ],\n },\n\n date_published: {\n selectors: [\n ['meta[itemProp=\"datePublished\"]', 'value'],\n ],\n\n timezone: 'GMT',\n },\n\n dek: {\n selectors: [\n // enter selectors\n ],\n },\n\n lead_image_url: {\n selectors: [\n ['meta[name=\"og:image\"]', 'value'],\n ],\n },\n\n content: {\n defaultCleaner: false,\n\n selectors: [\n ['#player-api', '#eow-description'],\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n '#player-api': ($node, $) => {\n const videoId = $('meta[itemProp=\"videoId\"]').attr('value');\n $node.html(`\n `\n );\n },\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n\n ],\n },\n};\n","export const WwwTheguardianComExtractor = {\n domain: 'www.theguardian.com',\n\n title: {\n selectors: [\n '.content__headline',\n ],\n },\n\n author: {\n selectors: [\n 'p.byline',\n ],\n },\n\n date_published: {\n selectors: [\n ['meta[name=\"article:published_time\"]', 'value'],\n ],\n },\n\n dek: {\n selectors: [\n '.content__standfirst',\n ],\n },\n\n lead_image_url: {\n selectors: [\n ['meta[name=\"og:image\"]', 'value'],\n ],\n },\n\n content: {\n selectors: [\n '.content__article-body',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n '.hide-on-mobile',\n '.inline-icon',\n ],\n },\n};\n","export const WwwSbnationComExtractor = {\n domain: 'www.sbnation.com',\n\n title: {\n selectors: [\n 'h1.c-page-title',\n ],\n },\n\n author: {\n selectors: [\n ['meta[name=\"author\"]', 'value'],\n ],\n },\n\n date_published: {\n selectors: [\n ['meta[name=\"article:published_time\"]', 'value'],\n ],\n },\n\n dek: {\n selectors: [\n 'h2.c-entry-summary.p-dek',\n ],\n },\n\n lead_image_url: {\n selectors: [\n ['meta[name=\"og:image\"]', 'value'],\n ],\n },\n\n content: {\n selectors: [\n 'div.c-entry-content',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n\n ],\n },\n};\n","export const WwwBloombergComExtractor = {\n domain: 'www.bloomberg.com',\n\n title: {\n selectors: [\n // normal articles\n '.lede-headline',\n\n // /graphics/ template\n 'h1.article-title',\n\n // /news/ template\n 'h1.lede-text-only__hed',\n ],\n },\n\n author: {\n selectors: [\n ['meta[name=\"parsely-author\"]', 'value'],\n '.byline-details__link',\n\n // /graphics/ template\n '.bydek',\n\n // /news/ template\n '.author',\n ],\n },\n\n date_published: {\n selectors: [\n ['time.published-at', 'datetime'],\n ['time[datetime]', 'datetime'],\n ['meta[name=\"date\"]', 'value'],\n ['meta[name=\"parsely-pub-date\"]', 'value'],\n ],\n },\n\n dek: {\n selectors: [\n ],\n },\n\n lead_image_url: {\n selectors: [\n ['meta[name=\"og:image\"]', 'value'],\n ],\n },\n\n content: {\n selectors: [\n '.article-body__content',\n\n // /graphics/ template\n ['section.copy-block'],\n\n // /news/ template\n '.body-copy',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n '.inline-newsletter',\n '.page-ad',\n ],\n },\n};\n","export const WwwBustleComExtractor = {\n domain: 'www.bustle.com',\n\n title: {\n selectors: [\n 'h1.post-page__title',\n ],\n },\n\n author: {\n selectors: [\n 'div.content-meta__author',\n ],\n },\n\n date_published: {\n selectors: [\n ['time.content-meta__published-date[datetime]', 'datetime'],\n ],\n },\n\n lead_image_url: {\n selectors: [\n ['meta[name=\"og:image\"]', 'value'],\n ],\n },\n\n content: {\n selectors: [\n '.post-page__body',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n\n ],\n },\n};\n","export const WwwNprOrgExtractor = {\n domain: 'www.npr.org',\n\n title: {\n selectors: [\n 'h1',\n '.storytitle',\n ],\n },\n\n author: {\n selectors: [\n 'p.byline__name.byline__name--block',\n ],\n },\n\n date_published: {\n selectors: [\n ['.dateblock time[datetime]', 'datetime'],\n ['meta[name=\"date\"]', 'value'],\n ],\n },\n\n lead_image_url: {\n selectors: [\n ['meta[name=\"og:image\"]', 'value'],\n ['meta[name=\"twitter:image:src\"]', 'value'],\n ],\n },\n\n content: {\n selectors: [\n '.storytext',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n '.bucketwrap.image': 'figure',\n '.bucketwrap.image .credit-caption': 'figcaption',\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n 'div.enlarge_measure',\n ],\n },\n};\n","export const WwwRecodeNetExtractor = {\n domain: 'www.recode.net',\n\n title: {\n selectors: [\n 'h1.c-page-title',\n ],\n },\n\n author: {\n selectors: [\n ['meta[name=\"author\"]', 'value'],\n ],\n },\n\n date_published: {\n selectors: [\n ['meta[name=\"article:published_time\"]', 'value'],\n ],\n },\n\n dek: {\n selectors: [\n 'h2.c-entry-summary.p-dek',\n ],\n },\n\n lead_image_url: {\n selectors: [\n ['meta[name=\"og:image\"]', 'value'],\n ],\n },\n\n content: {\n selectors: [\n ['figure.e-image--hero', '.c-entry-content'],\n '.c-entry-content',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n\n ],\n },\n};\n","export const QzComExtractor = {\n domain: 'qz.com',\n\n title: {\n selectors: [\n 'header.item-header.content-width-responsive',\n ],\n },\n\n author: {\n selectors: [\n ['meta[name=\"author\"]', 'value'],\n ],\n },\n\n date_published: {\n selectors: [\n '.timestamp',\n ],\n },\n\n lead_image_url: {\n selectors: [\n ['meta[name=\"og:image\"]', 'value'],\n ],\n },\n\n content: {\n selectors: [\n ['figure.featured-image', '.item-body'],\n '.item-body',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n '.article-aside',\n '.progressive-image-thumbnail',\n ],\n },\n};\n","export const WwwDmagazineComExtractor = {\n domain: 'www.dmagazine.com',\n\n title: {\n selectors: [\n 'h1.story__title',\n ],\n },\n\n author: {\n selectors: [\n '.story__info .story__info__item:first-child',\n ],\n },\n\n date_published: {\n selectors: [\n // enter selectors\n '.story__info',\n ],\n\n timezone: 'America/Chicago',\n },\n\n dek: {\n selectors: [\n '.story__subhead',\n ],\n },\n\n lead_image_url: {\n selectors: [\n ['article figure a:first-child', 'href'],\n ],\n },\n\n content: {\n selectors: [\n '.story__content',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n\n ],\n },\n};\n","export const WwwReutersComExtractor = {\n domain: 'www.reuters.com',\n\n title: {\n selectors: [\n 'h1.article-headline',\n ],\n },\n\n author: {\n selectors: [\n '.author',\n ],\n },\n\n date_published: {\n selectors: [\n ['meta[name=\"og:article:published_time\"]', 'value'],\n ],\n },\n\n lead_image_url: {\n selectors: [\n ['meta[name=\"og:image\"]', 'value'],\n ],\n },\n\n content: {\n selectors: [\n '#article-text',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n '.article-subtitle': 'h4',\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n '#article-byline .author',\n // 'span.location',\n // 'span.articleLocation',\n ],\n },\n};\n","export const MashableComExtractor = {\n domain: 'mashable.com',\n\n title: {\n selectors: [\n 'h1.title',\n ],\n },\n\n author: {\n selectors: [\n 'span.author_name a',\n ],\n },\n\n date_published: {\n selectors: [\n ['meta[name=\"og:article:published_time\"]', 'value'],\n ],\n },\n\n lead_image_url: {\n selectors: [\n ['meta[name=\"og:image\"]', 'value'],\n ],\n },\n\n content: {\n selectors: [\n 'section.article-content.blueprint',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n '.image-credit': 'figcaption',\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n\n ],\n },\n};\n","export const WwwChicagotribuneComExtractor = {\n domain: 'www.chicagotribune.com',\n\n title: {\n selectors: [\n 'h1.trb_ar_hl_t',\n ],\n },\n\n author: {\n selectors: [\n 'span.trb_ar_by_nm_au',\n ],\n },\n\n date_published: {\n selectors: [\n ['meta[itemprop=\"datePublished\"]', 'value'],\n ],\n },\n\n lead_image_url: {\n selectors: [\n ['meta[name=\"og:image\"]', 'value'],\n ],\n },\n\n content: {\n selectors: [\n 'div.trb_ar_page',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n\n ],\n },\n};\n","export const WwwVoxComExtractor = {\n domain: 'www.vox.com',\n\n title: {\n selectors: [\n 'h1.c-page-title',\n ],\n },\n\n author: {\n selectors: [\n ['meta[name=\"author\"]', 'value'],\n ],\n },\n\n date_published: {\n selectors: [\n ['meta[name=\"article:published_time\"]', 'value'],\n ],\n },\n\n dek: {\n selectors: [\n '.p-dek',\n ],\n },\n\n lead_image_url: {\n selectors: [\n ['meta[name=\"og:image\"]', 'value'],\n ],\n },\n\n content: {\n selectors: [\n ['figure.e-image--hero', '.c-entry-content'],\n '.c-entry-content',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n 'figure .e-image__image noscript': ($node) => {\n const imgHtml = $node.html();\n $node.parents('.e-image__image').find('.c-dynamic-image').replaceWith(imgHtml);\n },\n\n 'figure .e-image__meta': 'figcaption',\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n\n ],\n },\n};\n","export const NewsNationalgeographicComExtractor = {\n domain: 'news.nationalgeographic.com',\n\n title: {\n selectors: [\n 'h1',\n 'h1.main-title',\n ],\n },\n\n author: {\n selectors: [\n '.byline-component__contributors b span',\n ],\n },\n\n date_published: {\n selectors: [\n ['meta[name=\"article:published_time\"]', 'value'],\n ],\n format: 'ddd MMM DD HH:mm:ss zz YYYY',\n timezone: 'EST',\n },\n\n dek: {\n selectors: [\n '.article__deck',\n ],\n },\n\n lead_image_url: {\n selectors: [\n ['meta[name=\"og:image\"]', 'value'],\n ],\n },\n\n content: {\n selectors: [\n ['.parsys.content', '.__image-lead__'],\n '.content',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n '.parsys.content': ($node, $) => {\n const $imgSrc = $node.find('.image.parbase.section')\n .find('.picturefill')\n .first()\n .data('platform-src');\n if ($imgSrc) {\n $node.prepend($(``));\n }\n },\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n '.pull-quote.pull-quote--large',\n ],\n },\n};\n","export const WwwNationalgeographicComExtractor = {\n domain: 'www.nationalgeographic.com',\n\n title: {\n selectors: [\n 'h1',\n 'h1.main-title',\n ],\n },\n\n author: {\n selectors: [\n '.byline-component__contributors b span',\n ],\n },\n\n date_published: {\n selectors: [\n ['meta[name=\"article:published_time\"]', 'value'],\n ],\n },\n\n dek: {\n selectors: [\n '.article__deck',\n ],\n },\n\n lead_image_url: {\n selectors: [\n ['meta[name=\"og:image\"]', 'value'],\n ],\n },\n\n content: {\n selectors: [\n ['.parsys.content', '.__image-lead__'],\n '.content',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n '.parsys.content': ($node, $) => {\n const $imageParent = $node.children().first();\n if ($imageParent.hasClass('imageGroup')) {\n const $dataAttrContainer = $imageParent.find('.media--medium__container').children().first();\n const imgPath1 = $dataAttrContainer.data('platform-image1-path');\n const imgPath2 = $dataAttrContainer.data('platform-image2-path');\n if (imgPath2 && imgPath1) {\n $node.prepend($(`
\n \n \n
`));\n }\n } else {\n const $imgSrc = $node.find('.image.parbase.section')\n .find('.picturefill')\n .first()\n .data('platform-src');\n if ($imgSrc) {\n $node.prepend($(``));\n }\n }\n },\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n '.pull-quote.pull-quote--small',\n ],\n },\n};\n","export const WwwLatimesComExtractor = {\n domain: 'www.latimes.com',\n\n title: {\n selectors: [\n '.trb_ar_hl',\n ],\n },\n\n author: {\n selectors: [\n ['meta[name=\"author\"]', 'value'],\n ],\n },\n\n date_published: {\n selectors: [\n ['meta[itemprop=\"datePublished\"]', 'value'],\n ],\n },\n\n lead_image_url: {\n selectors: [\n ['meta[name=\"og:image\"]', 'value'],\n ],\n },\n\n content: {\n selectors: [\n '.trb_ar_main',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n '.trb_ar_la': ($node) => {\n const $figure = $node.find('figure');\n $node.replaceWith($figure);\n },\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n '.trb_ar_by',\n '.trb_ar_cr',\n ],\n },\n};\n","export const PagesixComExtractor = {\n domain: 'pagesix.com',\n\n supportedDomains: [\n 'nypost.com',\n ],\n\n title: {\n selectors: [\n 'h1 a',\n ],\n },\n\n author: {\n selectors: [\n '.byline',\n ],\n },\n\n date_published: {\n selectors: [\n ['meta[name=\"article:published_time\"]', 'value'],\n ],\n },\n\n dek: {\n selectors: [\n ['meta[name=\"description\"]', 'value'],\n ],\n },\n\n lead_image_url: {\n selectors: [\n ['meta[name=\"og:image\"]', 'value'],\n ],\n },\n\n content: {\n selectors: [\n ['#featured-image-wrapper', '.entry-content'],\n '.entry-content',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n '#featured-image-wrapper': 'figure',\n '.wp-caption-text': 'figcaption',\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n '.modal-trigger',\n ],\n },\n};\n","export const ThefederalistpapersOrgExtractor = {\n domain: 'thefederalistpapers.org',\n\n title: {\n selectors: [\n 'h1.entry-title',\n ],\n },\n\n author: {\n selectors: [\n 'main span.entry-author-name',\n ],\n },\n\n date_published: {\n selectors: [\n ['meta[name=\"article:published_time\"]', 'value'],\n ],\n },\n\n lead_image_url: {\n selectors: [\n ['meta[name=\"og:image\"]', 'value'],\n ],\n },\n\n content: {\n selectors: [\n '.entry-content',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n ['p[style]'],\n ],\n },\n};\n","export const WwwCbssportsComExtractor = {\n domain: 'www.cbssports.com',\n\n title: {\n selectors: [\n '.article-headline',\n ],\n },\n\n author: {\n selectors: [\n '.author-name',\n ],\n },\n\n date_published: {\n selectors: [\n ['.date-original-reading-time time', 'datetime'],\n ],\n timezone: 'UTC',\n },\n\n dek: {\n selectors: [\n '.article-subline',\n ],\n },\n\n lead_image_url: {\n selectors: [\n ['meta[name=\"og:image\"]', 'value'],\n ],\n },\n\n content: {\n selectors: [\n '.article',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n\n ],\n },\n};\n","export const WwwMsnbcComExtractor = {\n domain: 'www.msnbc.com',\n\n title: {\n selectors: [\n 'h1',\n 'h1.is-title-pane',\n ],\n },\n\n author: {\n selectors: [\n '.author',\n ],\n },\n\n date_published: {\n selectors: [\n ['meta[name=\"DC.date.issued\"]', 'value'],\n ],\n },\n\n dek: {\n selectors: [\n ['meta[name=\"description\"]', 'value'],\n ],\n },\n\n lead_image_url: {\n selectors: [\n ['meta[name=\"og:image\"]', 'value'],\n ],\n },\n\n content: {\n selectors: [\n '.pane-node-body',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n '.pane-node-body': ($node, $) => {\n const [selector, attr] = WwwMsnbcComExtractor.lead_image_url.selectors[0];\n const src = $(selector).attr(attr);\n if (src) {\n $node.prepend(``);\n }\n },\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n\n ],\n },\n};\n","export const WwwThepoliticalinsiderComExtractor = {\n domain: 'www.thepoliticalinsider.com',\n\n title: {\n selectors: [\n ['meta[name=\"sailthru.title\"]', 'value'],\n ],\n },\n\n author: {\n selectors: [\n ['meta[name=\"sailthru.author\"]', 'value'],\n ],\n },\n\n date_published: {\n selectors: [\n ['meta[name=\"sailthru.date\"]', 'value'],\n ],\n timezone: 'America/New_York',\n },\n\n dek: {\n selectors: [\n // enter selectors\n ],\n },\n\n lead_image_url: {\n selectors: [\n ['meta[name=\"og:image\"]', 'value'], // enter selectors\n ],\n },\n\n content: {\n selectors: [\n 'div#article-body',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n\n ],\n },\n};\n","export const WwwMentalflossComExtractor = {\n domain: 'www.mentalfloss.com',\n\n title: {\n selectors: [\n 'h1.title',\n '.title-group',\n '.inner',\n ],\n },\n\n author: {\n selectors: [\n '.field-name-field-enhanced-authors',\n ],\n },\n\n date_published: {\n selectors: [\n '.date-display-single',\n ],\n timezone: 'America/New_York',\n },\n\n lead_image_url: {\n selectors: [\n ['meta[name=\"og:image\"]', 'value'],\n ],\n },\n\n content: {\n selectors: [\n 'div.field.field-name-body',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n\n ],\n },\n};\n","export const AbcnewsGoComExtractor = {\n domain: 'abcnews.go.com',\n\n title: {\n selectors: [\n '.article-header h1',\n ],\n },\n\n author: {\n selectors: [\n '.authors',\n ],\n clean: [\n '.author-overlay',\n '.by-text',\n ],\n },\n\n date_published: {\n selectors: [\n '.timestamp',\n ],\n timezone: 'America/New_York',\n\n },\n\n lead_image_url: {\n selectors: [\n ['meta[name=\"og:image\"]', 'value'],\n ],\n },\n\n content: {\n selectors: [\n '.article-copy',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n\n ],\n },\n};\n","export const WwwNydailynewsComExtractor = {\n domain: 'www.nydailynews.com',\n\n title: {\n selectors: [\n 'h1#ra-headline',\n ],\n },\n\n author: {\n selectors: [\n ['meta[name=\"parsely-author\"]', 'value'],\n ],\n },\n\n date_published: {\n selectors: [\n ['meta[name=\"sailthru.date\"]', 'value'],\n ],\n },\n\n lead_image_url: {\n selectors: [\n ['meta[name=\"og:image\"]', 'value'],\n ],\n },\n\n content: {\n selectors: [\n 'article#ra-body',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n 'dl#ra-tags',\n '.ra-related',\n 'a.ra-editor',\n 'dl#ra-share-bottom',\n ],\n },\n};\n","export const WwwCnbcComExtractor = {\n domain: 'www.cnbc.com',\n\n title: {\n selectors: [\n 'h1.title',\n ],\n },\n\n author: {\n selectors: [\n ['meta[name=\"author\"]', 'value'],\n ],\n },\n\n date_published: {\n selectors: [\n ['meta[name=\"article:published_time\"]', 'value'],\n ],\n },\n\n lead_image_url: {\n selectors: [\n ['meta[name=\"og:image\"]', 'value'],\n ],\n },\n\n content: {\n selectors: [\n 'div#article_body.content',\n 'div.story',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n\n ],\n },\n};\n","export const WwwPopsugarComExtractor = {\n domain: 'www.popsugar.com',\n\n title: {\n selectors: [\n 'h2.post-title',\n 'title-text',\n ],\n },\n\n author: {\n selectors: [\n ['meta[name=\"article:author\"]', 'value'],\n ],\n },\n\n date_published: {\n selectors: [\n ['meta[name=\"article:published_time\"]', 'value'],\n ],\n },\n\n lead_image_url: {\n selectors: [\n ['meta[name=\"og:image\"]', 'value'],\n ],\n },\n\n content: {\n selectors: [\n '#content',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n '.share-copy-title',\n '.post-tags',\n '.reactions',\n ],\n },\n};\n","export const ObserverComExtractor = {\n domain: 'observer.com',\n\n title: {\n selectors: [\n 'h1.entry-title',\n ],\n },\n\n author: {\n selectors: [\n '.author',\n '.vcard',\n ],\n },\n\n date_published: {\n selectors: [\n ['meta[name=\"article:published_time\"]', 'value'],\n ],\n },\n\n dek: {\n selectors: [\n 'h2.dek',\n ],\n },\n\n lead_image_url: {\n selectors: [\n ['meta[name=\"og:image\"]', 'value'],\n ],\n },\n\n content: {\n selectors: [\n 'div.entry-content',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n\n ],\n },\n};\n","export const PeopleComExtractor = {\n domain: 'people.com',\n\n title: {\n selectors: [\n ['meta[name=\"og:title\"]', 'value'],\n ],\n },\n\n author: {\n selectors: [\n 'a.author.url.fn',\n ],\n },\n\n date_published: {\n selectors: [\n ['meta[name=\"article:published_time\"]', 'value'],\n ],\n },\n\n lead_image_url: {\n selectors: [\n ['meta[name=\"og:image\"]', 'value'],\n ],\n },\n\n content: {\n selectors: [\n 'div.article-body__inner',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n\n ],\n },\n};\n","export const WwwUsmagazineComExtractor = {\n domain: 'www.usmagazine.com',\n\n title: {\n selectors: [\n 'header h1',\n ],\n },\n\n author: {\n selectors: [\n 'a.article-byline.tracked-offpage',\n ],\n },\n\n date_published: {\n timezone: 'America/New_York',\n\n selectors: [\n 'time.article-published-date',\n ],\n },\n\n lead_image_url: {\n selectors: [\n ['meta[name=\"og:image\"]', 'value'],\n ],\n },\n\n content: {\n selectors: [\n 'div.article-body-inner',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n '.module-related',\n ],\n },\n};\n","export const WwwRollingstoneComExtractor = {\n domain: 'www.rollingstone.com',\n\n title: {\n selectors: [\n 'h1.content-title',\n ],\n },\n\n author: {\n selectors: [\n 'a.content-author.tracked-offpage',\n ],\n },\n\n date_published: {\n selectors: [\n 'time.content-published-date',\n ],\n\n timezone: 'America/New_York',\n },\n\n dek: {\n selectors: [\n '.content-description',\n ],\n },\n\n lead_image_url: {\n selectors: [\n ['meta[name=\"og:image\"]', 'value'],\n ],\n },\n\n content: {\n selectors: [\n ['.lead-container', '.article-content'],\n '.article-content',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n '.module-related',\n ],\n },\n};\n","export const twofortysevensportsComExtractor = {\n domain: '247sports.com',\n\n title: {\n selectors: [\n 'title',\n 'article header h1',\n ],\n },\n\n author: {\n selectors: [\n '.author',\n ],\n },\n\n date_published: {\n selectors: [\n ['time[data-published]', 'data-published'],\n ],\n },\n\n lead_image_url: {\n selectors: [\n ['meta[name=\"og:image\"]', 'value'],\n ],\n },\n\n content: {\n selectors: [\n 'section.body.article',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n\n ],\n },\n};\n","export const UproxxComExtractor = {\n domain: 'uproxx.com',\n\n title: {\n selectors: [\n 'div.post-top h1',\n ],\n },\n\n author: {\n selectors: [\n '.post-top .authorname',\n ],\n },\n\n date_published: {\n selectors: [\n ['meta[name=\"article:published_time\"]', 'value'],\n ],\n },\n\n lead_image_url: {\n selectors: [\n ['meta[name=\"og:image\"]', 'value'],\n ],\n },\n\n content: {\n selectors: [\n '.post-body',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n 'div.image': 'figure',\n 'div.image .wp-media-credit': 'figcaption',\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n\n ],\n },\n};\n","export const WwwEonlineComExtractor = {\n domain: 'www.eonline.com',\n\n title: {\n selectors: [\n 'h1.article__title',\n ],\n },\n\n author: {\n selectors: [\n '.entry-meta__author a',\n ],\n },\n\n date_published: {\n selectors: [\n ['meta[itemprop=\"datePublished\"]', 'value'],\n ],\n },\n\n lead_image_url: {\n selectors: [\n ['meta[name=\"og:image\"]', 'value'],\n ],\n },\n\n content: {\n selectors: [\n ['.post-content section, .post-content div.post-content__image'],\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n 'div.post-content__image': 'figure',\n 'div.post-content__image .image__credits': 'figcaption',\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n\n ],\n },\n};\n","export const WwwMiamiheraldComExtractor = {\n domain: 'www.miamiherald.com',\n\n title: {\n selectors: [\n 'h1.title',\n ],\n },\n\n date_published: {\n selectors: [\n 'p.published-date',\n ],\n\n timezone: 'America/New_York',\n },\n\n lead_image_url: {\n selectors: [\n ['meta[name=\"og:image\"]', 'value'],\n ],\n },\n\n content: {\n selectors: [\n 'div.dateline-storybody',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n\n ],\n },\n};\n","export const WwwRefinery29ComExtractor = {\n domain: 'www.refinery29.com',\n\n title: {\n selectors: [\n 'h1.title',\n ],\n },\n\n author: {\n selectors: [\n '.contributor',\n ],\n },\n\n date_published: {\n selectors: [\n ['meta[name=\"sailthru.date\"]', 'value'],\n ],\n\n timezone: 'America/New_York',\n },\n\n lead_image_url: {\n selectors: [\n ['meta[name=\"og:image\"]', 'value'],\n ],\n },\n\n content: {\n selectors: [\n ['.full-width-opener', '.article-content'],\n '.article-content',\n '.body',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n 'div.loading noscript': ($node) => {\n const imgHtml = $node.html();\n $node.parents('.loading').replaceWith(imgHtml);\n },\n\n '.section-image': 'figure',\n\n '.section-image .content-caption': 'figcaption',\n\n '.section-text': 'p',\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n '.story-share',\n ],\n },\n};\n","export const WwwMacrumorsComExtractor = {\n domain: 'www.macrumors.com',\n\n title: {\n selectors: [\n 'h1',\n 'h1.title',\n ],\n },\n\n author: {\n selectors: [\n '.author-url',\n ],\n },\n\n date_published: {\n selectors: [\n '.article .byline',\n ],\n\n // Wednesday January 18, 2017 11:44 am PST\n format: 'dddd MMMM D, YYYY h:mm A zz',\n\n timezone: 'America/Los_Angeles',\n },\n\n dek: {\n selectors: [\n ['meta[name=\"description\"]', 'value'],\n ],\n },\n\n lead_image_url: {\n selectors: [\n ['meta[name=\"og:image\"]', 'value'],\n ],\n },\n\n content: {\n selectors: [\n '.article',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n\n ],\n },\n};\n","export const WwwAndroidcentralComExtractor = {\n domain: 'www.androidcentral.com',\n\n title: {\n selectors: [\n 'h1',\n 'h1.main-title',\n ],\n },\n\n author: {\n selectors: [\n '.meta-by',\n ],\n },\n\n date_published: {\n selectors: [\n ['meta[name=\"article:published_time\"]', 'value'],\n ],\n },\n\n dek: {\n selectors: [\n ['meta[name=\"og:description\"]', 'value'],\n ],\n },\n\n lead_image_url: {\n selectors: [\n ['.image-large', 'src'],\n ],\n },\n\n content: {\n selectors: [\n '.article-body',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n '.intro',\n 'blockquote',\n ],\n },\n};\n","export const WwwSiComExtractor = {\n domain: 'www.si.com',\n\n title: {\n selectors: [\n 'h1',\n 'h1.headline',\n ],\n },\n\n author: {\n selectors: [\n ['meta[name=\"author\"]', 'value'],\n ],\n },\n\n date_published: {\n selectors: [\n '.timestamp',\n ],\n\n timezone: 'America/New_York',\n },\n\n dek: {\n selectors: [\n '.quick-hit ul',\n ],\n },\n\n lead_image_url: {\n selectors: [\n ['meta[name=\"og:image\"]', 'value'],\n ],\n },\n\n content: {\n selectors: [\n ['p', '.marquee_large_2x', '.component.image'],\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n\n noscript: ($node) => {\n const $children = $node.children();\n if ($children.length === 1 && $children.get(0).tagName === 'img') {\n return 'figure';\n }\n\n return null;\n },\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n [\n '.inline-thumb',\n '.primary-message',\n '.description',\n '.instructions',\n ],\n ],\n },\n};\n","export const WwwRawstoryComExtractor = {\n domain: 'www.rawstory.com',\n\n title: {\n selectors: [\n '.blog-title',\n ],\n },\n\n author: {\n selectors: [\n '.blog-author a:first-of-type',\n ],\n },\n\n date_published: {\n selectors: [\n '.blog-author a:last-of-type',\n ],\n\n timezone: 'EST',\n },\n\n lead_image_url: {\n selectors: [\n ['meta[name=\"og:image\"]', 'value'],\n ],\n },\n\n content: {\n selectors: [\n '.blog-content',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n\n ],\n },\n};\n","export const WwwCnetComExtractor = {\n domain: 'www.cnet.com',\n\n title: {\n selectors: [\n ['meta[name=\"og:title\"]', 'value'],\n ],\n },\n\n author: {\n selectors: [\n 'a.author',\n ],\n },\n\n date_published: {\n selectors: [\n 'time',\n ],\n\n timezone: 'America/Los_Angeles',\n },\n\n dek: {\n selectors: [\n '.article-dek',\n ],\n },\n\n lead_image_url: {\n selectors: [\n ['meta[name=\"og:image\"]', 'value'],\n ],\n },\n\n content: {\n selectors: [\n ['img.__image-lead__', '.article-main-body'],\n '.article-main-body',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n 'figure.image': ($node) => {\n const $img = $node.find('img');\n $img.attr('width', '100%');\n $img.attr('height', '100%');\n $img.addClass('__image-lead__');\n $node.remove('.imgContainer').prepend($img);\n },\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n\n ],\n },\n};\n","export const WwwCinemablendComExtractor = {\n domain: 'www.cinemablend.com',\n\n title: {\n selectors: [\n '.story_title',\n ],\n },\n\n author: {\n selectors: [\n '.author',\n ],\n },\n\n date_published: {\n selectors: [\n ['meta[name=\"article:published_time\"]', 'value'],\n ],\n\n timezone: 'EST',\n },\n\n lead_image_url: {\n selectors: [\n ['meta[name=\"og:image\"]', 'value'],\n ],\n },\n\n content: {\n selectors: [\n 'div#wrap_left_content',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n\n ],\n },\n};\n","export const WwwTodayComExtractor = {\n domain: 'www.today.com',\n\n title: {\n selectors: [\n 'h1.entry-headline',\n ],\n },\n\n author: {\n selectors: [\n ['meta[name=\"author\"]', 'value'],\n ],\n },\n\n date_published: {\n selectors: [\n ['meta[name=\"DC.date.issued\"]', 'value'],\n ],\n },\n\n lead_image_url: {\n selectors: [\n ['meta[name=\"og:image\"]', 'value'],\n ],\n },\n\n content: {\n selectors: [\n '.entry-container',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n '.label-comment',\n ],\n },\n};\n","export const WwwHowtogeekComExtractor = {\n domain: 'www.howtogeek.com',\n\n title: {\n selectors: [\n 'title',\n ],\n },\n\n author: {\n selectors: [\n '#authorinfobox a',\n ],\n },\n\n date_published: {\n selectors: [\n '#authorinfobox + div li',\n ],\n timezone: 'GMT',\n },\n\n lead_image_url: {\n selectors: [\n ['meta[name=\"og:image\"]', 'value'],\n ],\n },\n\n content: {\n selectors: [\n '.thecontent',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n\n ],\n },\n};\n","export const WwwAlComExtractor = {\n domain: 'www.al.com',\n\n title: {\n selectors: [\n ['meta[name=\"title\"]', 'value'],\n ],\n },\n\n author: {\n selectors: [\n ['meta[name=\"article_author\"]', 'value'],\n ],\n },\n\n date_published: {\n selectors: [\n ['meta[name=\"article_date_original\"]', 'value'],\n ],\n timezone: 'EST',\n },\n\n lead_image_url: {\n selectors: [\n ['meta[name=\"og:image\"]', 'value'],\n ],\n },\n\n content: {\n selectors: [\n '.entry-content',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n\n ],\n },\n};\n","export const WwwThepennyhoarderComExtractor = {\n domain: 'www.thepennyhoarder.com',\n\n title: {\n selectors: [\n ['meta[name=\"dcterms.title\"]', 'value'],\n ],\n },\n\n author: {\n selectors: [\n ['link[rel=\"author\"]', 'title'],\n ],\n },\n\n date_published: {\n selectors: [\n ['meta[name=\"article:published_time\"]', 'value'],\n ],\n },\n\n lead_image_url: {\n selectors: [\n ['meta[name=\"og:image\"]', 'value'],\n ],\n },\n\n content: {\n selectors: [\n ['.post-img', '.post-text'],\n '.post-text',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n\n ],\n },\n};\n","export const WwwWesternjournalismComExtractor = {\n domain: 'www.westernjournalism.com',\n\n title: {\n selectors: [\n 'title',\n 'h1.entry-title',\n ],\n },\n\n author: {\n selectors: [\n ['meta[name=\"author\"]', 'value'],\n ],\n },\n\n date_published: {\n selectors: [\n ['meta[name=\"DC.date.issued\"]', 'value'],\n ],\n },\n\n dek: {\n selectors: [\n '.subtitle',\n ],\n },\n\n lead_image_url: {\n selectors: [\n ['meta[name=\"og:image\"]', 'value'],\n ],\n },\n\n content: {\n selectors: [\n 'div.article-sharing.top + div',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n '.ad-notice-small',\n ],\n },\n};\n","export const FusionNetExtractor = {\n domain: 'fusion.net',\n\n title: {\n selectors: [\n '.post-title',\n '.single-title',\n '.headline',\n ],\n },\n\n author: {\n selectors: [\n '.show-for-medium .byline',\n ],\n },\n\n date_published: {\n selectors: [\n ['time.local-time', 'datetime'],\n ],\n },\n\n dek: {\n selectors: [\n // enter selectors\n ],\n },\n\n lead_image_url: {\n selectors: [\n ['meta[name=\"og:image\"]', 'value'],\n ],\n },\n\n content: {\n selectors: [\n ['.post-featured-media', '.article-content'],\n '.article-content',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n '.fusion-youtube-oembed': 'figure',\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n\n ],\n },\n};\n","export const WwwAmericanowComExtractor = {\n domain: 'www.americanow.com',\n\n title: {\n selectors: [\n '.title',\n ['meta[name=\"title\"]', 'value'],\n ],\n },\n\n author: {\n selectors: [\n '.byline',\n ],\n },\n\n date_published: {\n selectors: [\n ['meta[name=\"publish_date\"]', 'value'],\n ],\n },\n\n dek: {\n selectors: [\n // enter selectors\n ],\n },\n\n lead_image_url: {\n selectors: [\n ['meta[name=\"og:image\"]', 'value'],\n ],\n },\n\n content: {\n selectors: [\n ['.article-content', '.image', '.body'],\n '.body',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n '.article-video-wrapper',\n '.show-for-small-only',\n ],\n },\n};\n","export const ScienceflyComExtractor = {\n domain: 'sciencefly.com',\n\n title: {\n selectors: [\n '.entry-title',\n '.cb-entry-title',\n '.cb-single-title',\n ],\n },\n\n author: {\n selectors: [\n 'div.cb-author',\n 'div.cb-author-title',\n ],\n },\n\n date_published: {\n selectors: [\n ['meta[name=\"article:published_time\"]', 'value'],\n ],\n },\n\n dek: {\n selectors: [\n // enter selectors\n ],\n },\n\n lead_image_url: {\n selectors: [\n ['div.theiaPostSlider_slides img', 'src'],\n ],\n },\n\n content: {\n selectors: [\n 'div.theiaPostSlider_slides',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n\n ],\n },\n};\n","export const HellogigglesComExtractor = {\n domain: 'hellogiggles.com',\n\n title: {\n selectors: [\n '.title',\n ],\n },\n\n author: {\n selectors: [\n '.author-link',\n ],\n },\n\n date_published: {\n selectors: [\n ['meta[name=\"article:published_time\"]', 'value'],\n ],\n },\n\n lead_image_url: {\n selectors: [\n ['meta[name=\"og:image\"]', 'value'],\n ],\n },\n\n content: {\n selectors: [\n '.entry-content',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n\n ],\n },\n};\n","export const ThoughtcatalogComExtractor = {\n domain: 'thoughtcatalog.com',\n\n title: {\n selectors: [\n 'h1.title',\n ['meta[name=\"og:title\"]', 'value'],\n ],\n },\n\n author: {\n selectors: [\n 'div.col-xs-12.article_header div.writer-container.writer-container-inline.writer-no-avatar h4.writer-name',\n 'h1.writer-name',\n ],\n },\n\n date_published: {\n selectors: [\n ['meta[name=\"article:published_time\"]', 'value'],\n ],\n },\n\n lead_image_url: {\n selectors: [\n ['meta[name=\"og:image\"]', 'value'],\n ],\n },\n\n content: {\n selectors: [\n '.entry.post',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n '.tc_mark',\n ],\n },\n};\n","export const WwwNjComExtractor = {\n domain: 'www.nj.com',\n\n title: {\n selectors: [\n ['meta[name=\"title\"]', 'value'],\n ],\n },\n\n author: {\n selectors: [\n ['meta[name=\"article_author\"]', 'value'],\n ],\n },\n\n date_published: {\n selectors: [\n ['meta[name=\"article_date_original\"]', 'value'],\n ],\n\n timezone: 'America/New_York',\n },\n\n lead_image_url: {\n selectors: [\n ['meta[name=\"og:image\"]', 'value'],\n ],\n },\n\n content: {\n selectors: [\n '.entry-content',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n\n ],\n },\n};\n","export const WwwInquisitrComExtractor = {\n domain: 'www.inquisitr.com',\n\n title: {\n selectors: [\n 'h1.entry-title.story--header--title',\n ],\n },\n\n author: {\n selectors: [\n 'div.story--header--author',\n ],\n },\n\n date_published: {\n selectors: [\n ['meta[name=\"datePublished\"]', 'value'],\n ],\n },\n\n lead_image_url: {\n selectors: [\n ['meta[name=\"og:image\"]', 'value'],\n ],\n },\n\n content: {\n selectors: [\n 'article.story',\n '.entry-content.',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n '.post-category',\n '.story--header--socials',\n '.story--header--content',\n ],\n },\n};\n","export const WwwNbcnewsComExtractor = {\n domain: 'www.nbcnews.com',\n\n title: {\n selectors: [\n 'div.article-hed h1',\n ],\n },\n\n author: {\n selectors: [\n 'span.byline_author',\n ],\n },\n\n date_published: {\n selectors: [\n ['.flag_article-wrapper time.timestamp_article[datetime]', 'datetime'],\n '.flag_article-wrapper time',\n ],\n\n timezone: 'America/New_York',\n },\n\n lead_image_url: {\n selectors: [\n ['meta[name=\"og:image\"]', 'value'],\n ],\n },\n\n content: {\n selectors: [\n 'div.article-body',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n\n ],\n },\n};\n","export const FortuneComExtractor = {\n domain: 'fortune.com',\n\n title: {\n selectors: [\n 'h1',\n ],\n },\n\n author: {\n selectors: [\n ['meta[name=\"author\"]', 'value'],\n ],\n },\n\n date_published: {\n selectors: [\n '.MblGHNMJ',\n ],\n\n timezone: 'UTC',\n },\n\n lead_image_url: {\n selectors: [\n ['meta[name=\"og:image\"]', 'value'],\n ],\n },\n\n content: {\n selectors: [\n ['picture', 'article.row'],\n 'article.row',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n\n ],\n },\n};\n","export const WwwLinkedinComExtractor = {\n domain: 'www.linkedin.com',\n\n title: {\n selectors: [\n '.article-title',\n 'h1',\n ],\n },\n\n author: {\n selectors: [\n ['meta[name=\"article:author\"]', 'value'],\n '.entity-name a[rel=author]',\n ],\n },\n\n date_published: {\n selectors: [\n ['time[itemprop=\"datePublished\"]', 'datetime'],\n ],\n\n timezone: 'America/Los_Angeles',\n },\n\n dek: {\n selectors: [\n // enter selectors\n ],\n },\n\n lead_image_url: {\n selectors: [\n ['meta[name=\"og:image\"]', 'value'],\n ],\n },\n\n content: {\n selectors: [\n ['header figure', '.prose'],\n '.prose',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n '.entity-image',\n ],\n },\n};\n","export const ObamawhitehouseArchivesGovExtractor = {\n domain: 'obamawhitehouse.archives.gov',\n\n supportedDomains: [\n 'whitehouse.gov',\n ],\n\n title: {\n selectors: [\n 'h1',\n '.pane-node-title',\n ],\n },\n\n author: {\n selectors: [\n '.blog-author-link',\n '.node-person-name-link',\n ],\n },\n\n date_published: {\n selectors: [\n ['meta[name=\"article:published_time\"]', 'value'],\n ],\n },\n\n dek: {\n selectors: [\n '.field-name-field-forall-summary',\n ],\n },\n\n lead_image_url: {\n selectors: [\n ['meta[name=\"og:image\"]', 'value'],\n ],\n },\n\n content: {\n defaultCleaner: false,\n\n selectors: [\n 'div#content-start',\n '.pane-node-field-forall-body',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n '.pane-node-title',\n '.pane-custom.pane-1',\n ],\n },\n};\n","export const WwwOpposingviewsComExtractor = {\n domain: 'www.opposingviews.com',\n\n title: {\n selectors: [\n 'h1.title',\n ],\n },\n\n author: {\n selectors: [\n 'div.date span span a',\n ],\n },\n\n date_published: {\n selectors: [\n ['meta[name=\"publish_date\"]', 'value'],\n ],\n },\n\n dek: {\n selectors: [\n // enter selectors\n ],\n },\n\n lead_image_url: {\n selectors: [\n ['meta[name=\"og:image\"]', 'value'],\n ],\n },\n\n content: {\n selectors: [\n '.article-content',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n '.show-for-small-only',\n ],\n },\n};\n","export const WwwProspectmagazineCoUkExtractor = {\n domain: 'www.prospectmagazine.co.uk',\n\n title: {\n selectors: [\n '.page-title',\n ],\n },\n\n author: {\n selectors: [\n '.aside_author .title',\n ],\n },\n\n date_published: {\n selectors: [\n '.post-info',\n ],\n\n timezone: 'Europe/London',\n },\n\n dek: {\n selectors: [\n '.page-subtitle',\n ],\n },\n\n lead_image_url: {\n selectors: [\n ['meta[name=\"og:image\"]', 'value'],\n ],\n },\n\n content: {\n selectors: [\n // ['article.type-post div.post_content p'],\n 'article .post_content',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n\n ],\n },\n};\n","export const ForwardComExtractor = {\n domain: 'forward.com',\n\n title: {\n selectors: [\n ['meta[name=\"og:title\"]', 'value'],\n ],\n },\n\n author: {\n selectors: [\n '.author-name',\n ['meta[name=\"sailthru.author\"]', 'value'],\n ],\n },\n\n date_published: {\n selectors: [\n ['meta[name=\"date\"]', 'value'],\n ],\n },\n\n dek: {\n selectors: [\n // enter selectors\n ],\n },\n\n lead_image_url: {\n selectors: [\n ['meta[name=\"og:image\"]', 'value'],\n ],\n },\n\n content: {\n selectors: [\n ['.post-item-media-wrap', '.post-item p'],\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n '.donate-box',\n '.message',\n '.subtitle',\n ],\n },\n};\n","export const WwwQdailyComExtractor = {\n domain: 'www.qdaily.com',\n\n title: {\n selectors: [\n 'h2',\n 'h2.title',\n ],\n },\n\n author: {\n selectors: [\n '.name',\n ],\n },\n\n date_published: {\n selectors: [\n ['.date.smart-date', 'data-origindate'],\n ],\n },\n\n dek: {\n selectors: [\n '.excerpt',\n ],\n },\n\n lead_image_url: {\n selectors: [\n ['.article-detail-hd img', 'src'],\n ],\n },\n\n content: {\n selectors: [\n '.detail',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n '.lazyload',\n '.lazylad',\n '.lazylood',\n ],\n },\n};\n","export const GothamistComExtractor = {\n domain: 'gothamist.com',\n\n supportedDomains: [\n 'chicagoist.com',\n 'laist.com',\n 'sfist.com',\n 'shanghaiist.com',\n 'dcist.com',\n ],\n\n title: {\n selectors: [\n 'h1',\n '.entry-header h1',\n ],\n },\n\n author: {\n selectors: [\n '.author',\n ],\n },\n\n date_published: {\n selectors: [\n 'abbr',\n 'abbr.published',\n ],\n\n timezone: 'America/New_York',\n },\n\n dek: {\n selectors: [\n null,\n ],\n },\n\n lead_image_url: {\n selectors: [\n ['meta[name=\"og:image\"]', 'value'],\n ],\n },\n\n content: {\n selectors: [\n '.entry-body',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n 'div.image-none': 'figure',\n '.image-none i': 'figcaption',\n 'div.image-left': 'figure',\n '.image-left i': 'figcaption',\n 'div.image-right': 'figure',\n '.image-right i': 'figcaption',\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n '.image-none br',\n '.image-left br',\n '.image-right br',\n '.galleryEase',\n ],\n },\n};\n","export const WwwFoolComExtractor = {\n domain: 'www.fool.com',\n\n title: {\n selectors: [\n 'h1',\n ],\n },\n\n author: {\n selectors: [\n '.author-inline .author-name',\n ],\n },\n\n date_published: {\n selectors: [\n ['meta[name=\"date\"]', 'value'],\n ],\n },\n\n dek: {\n selectors: [\n 'header h2',\n ],\n },\n\n lead_image_url: {\n selectors: [\n ['meta[name=\"og:image\"]', 'value'],\n ],\n },\n\n content: {\n selectors: [\n '.article-content',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n '.caption img': ($node) => {\n const src = $node.attr('src');\n $node.parent().replaceWith(`
`);\n },\n '.caption': 'figcaption',\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n '#pitch',\n ],\n },\n};\n","export const WwwSlateComExtractor = {\n domain: 'www.slate.com',\n\n title: {\n selectors: [\n '.hed',\n 'h1',\n ],\n },\n\n author: {\n selectors: [\n 'a[rel=author]',\n ],\n },\n\n date_published: {\n selectors: [\n '.pub-date',\n ],\n\n timezone: 'America/New_York',\n },\n\n dek: {\n selectors: [\n '.dek',\n ],\n },\n\n lead_image_url: {\n selectors: [\n ['meta[name=\"og:image\"]', 'value'],\n ],\n },\n\n content: {\n selectors: [\n '.body',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n '.about-the-author',\n '.pullquote',\n '.newsletter-signup-component',\n '.top-comment',\n ],\n },\n};\n","export const IciRadioCanadaCaExtractor = {\n domain: 'ici.radio-canada.ca',\n\n title: {\n selectors: [\n 'h1',\n ],\n },\n\n author: {\n selectors: [\n ['meta[name=\"dc.creator\"]', 'value'],\n ],\n },\n\n date_published: {\n selectors: [\n ['meta[name=\"dc.date.created\"]', 'value'],\n ],\n\n timezone: 'America/New_York',\n },\n\n dek: {\n selectors: [\n '.bunker-component.lead',\n ],\n },\n\n lead_image_url: {\n selectors: [\n ['meta[name=\"og:image\"]', 'value'],\n ],\n },\n\n content: {\n selectors: [\n ['.main-multimedia-item', '.news-story-content'],\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n\n ],\n },\n};\n","import mergeSupportedDomains from 'utils/merge-supported-domains';\nimport * as CustomExtractors from './custom/index';\n\nexport default Object.keys(CustomExtractors).reduce((acc, key) => {\n const extractor = CustomExtractors[key];\n return {\n ...acc,\n ...mergeSupportedDomains(extractor),\n };\n}, {});\n","// CLEAN AUTHOR CONSTANTS\nexport const CLEAN_AUTHOR_RE = /^\\s*(posted |written )?by\\s*:?\\s*(.*)/i;\n // author = re.sub(r'^\\s*(posted |written )?by\\s*:?\\s*(.*)(?i)',\n\n// CLEAN DEK CONSTANTS\nexport const TEXT_LINK_RE = new RegExp('http(s)?://', 'i');\n// An ordered list of meta tag names that denote likely article deks.\n// From most distinct to least distinct.\n//\n// NOTE: There are currently no meta tags that seem to provide the right\n// content consistenty enough. Two options were:\n// - og:description\n// - dc.description\n// However, these tags often have SEO-specific junk in them that's not\n// header-worthy like a dek is. Excerpt material at best.\nexport const DEK_META_TAGS = [\n];\n\n// An ordered list of Selectors to find likely article deks. From\n// most explicit to least explicit.\n//\n// Should be more restrictive than not, as a failed dek can be pretty\n// detrimental to the aesthetics of an article.\nexport const DEK_SELECTORS = [\n '.entry-summary',\n];\n\n// CLEAN DATE PUBLISHED CONSTANTS\nexport const MS_DATE_STRING = /^\\d{13}$/i;\nexport const SEC_DATE_STRING = /^\\d{10}$/i;\nexport const CLEAN_DATE_STRING_RE = /^\\s*published\\s*:?\\s*(.*)/i;\nexport const TIME_MERIDIAN_SPACE_RE = /(.*\\d)(am|pm)(.*)/i;\nexport const TIME_MERIDIAN_DOTS_RE = /\\.m\\./i;\nconst months = [\n 'jan',\n 'feb',\n 'mar',\n 'apr',\n 'may',\n 'jun',\n 'jul',\n 'aug',\n 'sep',\n 'oct',\n 'nov',\n 'dec',\n];\nconst allMonths = months.join('|');\nconst timestamp1 = '[0-9]{1,2}:[0-9]{2,2}( ?[ap].?m.?)?';\nconst timestamp2 = '[0-9]{1,2}[/-][0-9]{1,2}[/-][0-9]{2,4}';\nconst timestamp3 = '-[0-9]{3,4}$';\nexport const SPLIT_DATE_STRING =\n new RegExp(`(${timestamp1})|(${timestamp2})|(${timestamp3})|([0-9]{1,4})|(${allMonths})`, 'ig');\n\n// 2016-11-22T08:57-500\n// Check if datetime string has an offset at the end\nexport const TIME_WITH_OFFSET_RE = /-\\d{3,4}$/;\n\n// CLEAN TITLE CONSTANTS\n// A regular expression that will match separating characters on a\n// title, that usually denote breadcrumbs or something similar.\nexport const TITLE_SPLITTERS_RE = /(: | - | \\| )/g;\n\nexport const DOMAIN_ENDINGS_RE =\n new RegExp('.com$|.net$|.org$|.co.uk$', 'g');\n","import { normalizeSpaces } from 'utils/text';\nimport { CLEAN_AUTHOR_RE } from './constants';\n\n// Take an author string (like 'By David Smith ') and clean it to\n// just the name(s): 'David Smith'.\nexport default function cleanAuthor(author) {\n return normalizeSpaces(\n author.replace(CLEAN_AUTHOR_RE, '$2').trim()\n );\n}\n","import validUrl from 'valid-url';\n\nexport default function clean(leadImageUrl) {\n leadImageUrl = leadImageUrl.trim();\n if (validUrl.isWebUri(leadImageUrl)) {\n return leadImageUrl;\n }\n\n return null;\n}\n","import { stripTags } from 'utils/dom';\nimport {\n excerptContent,\n normalizeSpaces,\n} from 'utils/text';\n\nimport { TEXT_LINK_RE } from './constants';\n\n// Take a dek HTML fragment, and return the cleaned version of it.\n// Return None if the dek wasn't good enough.\nexport default function cleanDek(dek, { $, excerpt }) {\n // Sanity check that we didn't get too short or long of a dek.\n if (dek.length > 1000 || dek.length < 5) return null;\n\n // Check that dek isn't the same as excerpt\n if (excerpt && excerptContent(excerpt, 10) === excerptContent(dek, 10)) return null;\n\n const dekText = stripTags(dek, $);\n\n // Plain text links shouldn't exist in the dek. If we have some, it's\n // not a good dek - bail.\n if (TEXT_LINK_RE.test(dekText)) return null;\n\n return normalizeSpaces(dekText.trim());\n}\n","import moment from 'moment-timezone';\nimport parseFormat from 'moment-parseformat';\n// Is there a compelling reason to use moment here?\n// Mostly only being used for the isValid() method,\n// but could just check for 'Invalid Date' string.\n\nimport {\n MS_DATE_STRING,\n SEC_DATE_STRING,\n CLEAN_DATE_STRING_RE,\n SPLIT_DATE_STRING,\n TIME_MERIDIAN_SPACE_RE,\n TIME_MERIDIAN_DOTS_RE,\n TIME_WITH_OFFSET_RE,\n} from './constants';\n\nexport function cleanDateString(dateString) {\n return (dateString.match(SPLIT_DATE_STRING) || [])\n .join(' ')\n .replace(TIME_MERIDIAN_DOTS_RE, 'm')\n .replace(TIME_MERIDIAN_SPACE_RE, '$1 $2 $3')\n .replace(CLEAN_DATE_STRING_RE, '$1')\n .trim();\n}\n\nexport function createDate(dateString, timezone, format) {\n if (TIME_WITH_OFFSET_RE.test(dateString)) {\n return moment(new Date(dateString));\n }\n\n return timezone ?\n moment.tz(dateString, format || parseFormat(dateString), timezone) :\n moment(dateString, format || parseFormat(dateString));\n}\n\n// Take a date published string, and hopefully return a date out of\n// it. Return none if we fail.\nexport default function cleanDatePublished(dateString, { timezone, format } = {}) {\n // If string is in milliseconds or seconds, convert to int and return\n if (MS_DATE_STRING.test(dateString) || SEC_DATE_STRING.test(dateString)) {\n return new Date(parseInt(dateString, 10)).toISOString();\n }\n\n let date = createDate(dateString, timezone, format);\n\n if (!date.isValid()) {\n dateString = cleanDateString(dateString);\n date = createDate(dateString, timezone, format);\n }\n\n return date.isValid() ? date.toISOString() : null;\n}\n","import {\n cleanAttributes,\n cleanHeaders,\n cleanHOnes,\n cleanImages,\n cleanTags,\n removeEmpty,\n rewriteTopLevel,\n markToKeep,\n stripJunkTags,\n makeLinksAbsolute,\n} from 'utils/dom';\n\n// Clean our article content, returning a new, cleaned node.\nexport default function extractCleanNode(\n article,\n {\n $,\n cleanConditionally = true,\n title = '',\n url = '',\n defaultCleaner = true,\n }\n) {\n // Rewrite the tag name to div if it's a top level node like body or\n // html to avoid later complications with multiple body tags.\n rewriteTopLevel(article, $);\n\n // Drop small images and spacer images\n // Only do this is defaultCleaner is set to true;\n // this can sometimes be too aggressive.\n if (defaultCleaner) cleanImages(article, $);\n\n // Make links absolute\n makeLinksAbsolute(article, $, url);\n\n // Mark elements to keep that would normally be removed.\n // E.g., stripJunkTags will remove iframes, so we're going to mark\n // YouTube/Vimeo videos as elements we want to keep.\n markToKeep(article, $, url);\n\n // Drop certain tags like , etc\n // This is -mostly- for cleanliness, not security.\n stripJunkTags(article, $);\n\n // H1 tags are typically the article title, which should be extracted\n // by the title extractor instead. If there's less than 3 of them (<3),\n // strip them. Otherwise, turn 'em into H2s.\n cleanHOnes(article, $);\n\n // Clean headers\n cleanHeaders(article, $, title);\n\n // We used to clean UL's and OL's here, but it was leading to\n // too many in-article lists being removed. Consider a better\n // way to detect menus particularly and remove them.\n // Also optionally running, since it can be overly aggressive.\n if (defaultCleaner) cleanTags(article, $, cleanConditionally);\n\n // Remove empty paragraph nodes\n removeEmpty(article, $);\n\n // Remove unnecessary attributes\n cleanAttributes(article, $);\n\n return article;\n}\n","import { stripTags } from 'utils/dom';\nimport { normalizeSpaces } from 'utils/text';\n\nimport { TITLE_SPLITTERS_RE } from './constants';\nimport { resolveSplitTitle } from './index';\n\nexport default function cleanTitle(title, { url, $ }) {\n // If title has |, :, or - in it, see if\n // we can clean it up.\n if (TITLE_SPLITTERS_RE.test(title)) {\n title = resolveSplitTitle(title, url);\n }\n\n // Final sanity check that we didn't get a crazy title.\n // if (title.length > 150 || title.length < 15) {\n if (title.length > 150) {\n // If we did, return h1 from the document if it exists\n const h1 = $('h1');\n if (h1.length === 1) {\n title = h1.text();\n }\n }\n\n // strip any html tags in the title text\n return normalizeSpaces(stripTags(title, $).trim());\n}\n","import URL from 'url';\nimport wuzzy from 'wuzzy';\n\nimport {\n TITLE_SPLITTERS_RE,\n DOMAIN_ENDINGS_RE,\n} from './constants';\n\nfunction extractBreadcrumbTitle(splitTitle, text) {\n // This must be a very breadcrumbed title, like:\n // The Best Gadgets on Earth : Bits : Blogs : NYTimes.com\n // NYTimes - Blogs - Bits - The Best Gadgets on Earth\n if (splitTitle.length >= 6) {\n // Look to see if we can find a breadcrumb splitter that happens\n // more than once. If we can, we'll be able to better pull out\n // the title.\n const termCounts = splitTitle.reduce((acc, titleText) => {\n acc[titleText] = acc[titleText] ? acc[titleText] + 1 : 1;\n return acc;\n }, {});\n\n const [maxTerm, termCount] =\n Reflect.ownKeys(termCounts)\n .reduce((acc, key) => {\n if (acc[1] < termCounts[key]) {\n return [key, termCounts[key]];\n }\n\n return acc;\n }, [0, 0]);\n\n // We found a splitter that was used more than once, so it\n // is probably the breadcrumber. Split our title on that instead.\n // Note: max_term should be <= 4 characters, so that \" >> \"\n // will match, but nothing longer than that.\n if (termCount >= 2 && maxTerm.length <= 4) {\n splitTitle = text.split(maxTerm);\n }\n\n const splitEnds = [splitTitle[0], splitTitle.slice(-1)];\n const longestEnd = splitEnds.reduce((acc, end) => acc.length > end.length ? acc : end, '');\n\n if (longestEnd.length > 10) {\n return longestEnd;\n }\n\n return text;\n }\n\n return null;\n}\n\nfunction cleanDomainFromTitle(splitTitle, url) {\n // Search the ends of the title, looking for bits that fuzzy match\n // the URL too closely. If one is found, discard it and return the\n // rest.\n //\n // Strip out the big TLDs - it just makes the matching a bit more\n // accurate. Not the end of the world if it doesn't strip right.\n const { host } = URL.parse(url);\n const nakedDomain = host.replace(DOMAIN_ENDINGS_RE, '');\n\n const startSlug = splitTitle[0].toLowerCase().replace(' ', '');\n const startSlugRatio = wuzzy.levenshtein(startSlug, nakedDomain);\n\n if (startSlugRatio > 0.4 && startSlug.length > 5) {\n return splitTitle.slice(2).join('');\n }\n\n const endSlug = splitTitle.slice(-1)[0].toLowerCase().replace(' ', '');\n const endSlugRatio = wuzzy.levenshtein(endSlug, nakedDomain);\n\n if (endSlugRatio > 0.4 && endSlug.length >= 5) {\n return splitTitle.slice(0, -2).join('');\n }\n\n return null;\n}\n\n// Given a title with separators in it (colons, dashes, etc),\n// resolve whether any of the segments should be removed.\nexport default function resolveSplitTitle(title, url = '') {\n // Splits while preserving splitters, like:\n // ['The New New York', ' - ', 'The Washington Post']\n const splitTitle = title.split(TITLE_SPLITTERS_RE);\n if (splitTitle.length === 1) {\n return title;\n }\n\n let newTitle = extractBreadcrumbTitle(splitTitle, title);\n if (newTitle) return newTitle;\n\n newTitle = cleanDomainFromTitle(splitTitle, url);\n if (newTitle) return newTitle;\n\n // Fuzzy ratio didn't find anything, so this title is probably legit.\n // Just return it all.\n return title;\n}\n","import cleanAuthor from './author';\nimport cleanImage from './lead-image-url';\nimport cleanDek from './dek';\nimport cleanDatePublished from './date-published';\nimport cleanContent from './content';\nimport cleanTitle from './title';\n\nconst Cleaners = {\n author: cleanAuthor,\n lead_image_url: cleanImage,\n dek: cleanDek,\n date_published: cleanDatePublished,\n content: cleanContent,\n title: cleanTitle,\n};\n\nexport default Cleaners;\n\nexport { cleanAuthor };\nexport { cleanImage };\nexport { cleanDek };\nexport { cleanDatePublished };\nexport { cleanContent };\nexport { cleanTitle };\nexport { default as resolveSplitTitle } from './resolve-split-title';\n","import {\n stripUnlikelyCandidates,\n convertToParagraphs,\n} from 'utils/dom';\n\nimport {\n scoreContent,\n findTopCandidate,\n} from './scoring';\n\n// Using a variety of scoring techniques, extract the content most\n// likely to be article text.\n//\n// If strip_unlikely_candidates is True, remove any elements that\n// match certain criteria first. (Like, does this element have a\n// classname of \"comment\")\n//\n// If weight_nodes is True, use classNames and IDs to determine the\n// worthiness of nodes.\n//\n// Returns a cheerio object $\nexport default function extractBestNode($, opts) {\n // clone the node so we can get back to our\n // initial parsed state if needed\n // TODO Do I need this? – AP\n // let $root = $.root().clone()\n\n if (opts.stripUnlikelyCandidates) {\n $ = stripUnlikelyCandidates($);\n }\n\n $ = convertToParagraphs($);\n $ = scoreContent($, opts.weightNodes);\n const $topCandidate = findTopCandidate($);\n\n return $topCandidate;\n}\n","import cheerio from 'cheerio';\n\nimport { nodeIsSufficient } from 'utils/dom';\nimport { cleanContent } from 'cleaners';\nimport { normalizeSpaces } from 'utils/text';\n\nimport extractBestNode from './extract-best-node';\n\nconst GenericContentExtractor = {\n defaultOpts: {\n stripUnlikelyCandidates: true,\n weightNodes: true,\n cleanConditionally: true,\n },\n\n // Extract the content for this resource - initially, pass in our\n // most restrictive opts which will return the highest quality\n // content. On each failure, retry with slightly more lax opts.\n //\n // :param return_type: string. If \"node\", should return the content\n // as a cheerio node rather than as an HTML string.\n //\n // Opts:\n // stripUnlikelyCandidates: Remove any elements that match\n // non-article-like criteria first.(Like, does this element\n // have a classname of \"comment\")\n //\n // weightNodes: Modify an elements score based on whether it has\n // certain classNames or IDs. Examples: Subtract if a node has\n // a className of 'comment', Add if a node has an ID of\n // 'entry-content'.\n //\n // cleanConditionally: Clean the node to return of some\n // superfluous content. Things like forms, ads, etc.\n extract({ $, html, title, url }, opts) {\n opts = { ...this.defaultOpts, ...opts };\n\n $ = $ || cheerio.load(html);\n\n // Cascade through our extraction-specific opts in an ordered fashion,\n // turning them off as we try to extract content.\n let node = this.getContentNode($, title, url, opts);\n\n if (nodeIsSufficient(node)) {\n return this.cleanAndReturnNode(node, $);\n }\n\n // We didn't succeed on first pass, one by one disable our\n // extraction opts and try again.\n for (const key of Reflect.ownKeys(opts).filter(k => opts[k] === true)) {\n opts[key] = false;\n $ = cheerio.load(html);\n\n node = this.getContentNode($, title, url, opts);\n\n if (nodeIsSufficient(node)) {\n break;\n }\n }\n\n return this.cleanAndReturnNode(node, $);\n },\n\n // Get node given current options\n getContentNode($, title, url, opts) {\n return cleanContent(\n extractBestNode($, opts),\n {\n $,\n cleanConditionally: opts.cleanConditionally,\n title,\n url,\n });\n },\n\n // Once we got here, either we're at our last-resort node, or\n // we broke early. Make sure we at least have -something- before we\n // move forward.\n cleanAndReturnNode(node, $) {\n if (!node) {\n return null;\n }\n\n return normalizeSpaces($.html(node));\n\n // if return_type == \"html\":\n // return normalize_spaces(node_to_html(node))\n // else:\n // return node\n },\n\n};\n\nexport default GenericContentExtractor;\n","// TODO: It would be great if we could merge the meta and selector lists into\n// a list of objects, because we could then rank them better. For example,\n// .hentry .entry-title is far better suited than <meta title>.\n\n// An ordered list of meta tag names that denote likely article titles. All\n// attributes should be lowercase for faster case-insensitive matching. From\n// most distinct to least distinct.\nexport const STRONG_TITLE_META_TAGS = [\n 'tweetmeme-title',\n 'dc.title',\n 'rbtitle',\n 'headline',\n 'title',\n];\n\n// og:title is weak because it typically contains context that we don't like,\n// for example the source site's name. Gotta get that brand into facebook!\nexport const WEAK_TITLE_META_TAGS = [\n 'og:title',\n];\n\n// An ordered list of XPath Selectors to find likely article titles. From\n// most explicit to least explicit.\n//\n// Note - this does not use classes like CSS. This checks to see if the string\n// exists in the className, which is not as accurate as .className (which\n// splits on spaces/endlines), but for our purposes it's close enough. The\n// speed tradeoff is worth the accuracy hit.\nexport const STRONG_TITLE_SELECTORS = [\n '.hentry .entry-title',\n 'h1#articleHeader',\n 'h1.articleHeader',\n 'h1.article',\n '.instapaper_title',\n '#meebo-title',\n];\n\nexport const WEAK_TITLE_SELECTORS = [\n 'article h1',\n '#entry-title',\n '.entry-title',\n '#entryTitle',\n '#entrytitle',\n '.entryTitle',\n '.entrytitle',\n '#articleTitle',\n '.articleTitle',\n 'post post-title',\n 'h1.title',\n 'h2.article',\n 'h1',\n 'html head title',\n 'title',\n];\n","import { cleanTitle } from 'cleaners';\nimport {\n extractFromMeta,\n extractFromSelectors,\n} from 'utils/dom';\n\nimport {\n STRONG_TITLE_META_TAGS,\n WEAK_TITLE_META_TAGS,\n STRONG_TITLE_SELECTORS,\n WEAK_TITLE_SELECTORS,\n} from './constants';\n\nconst GenericTitleExtractor = {\n extract({ $, url, metaCache }) {\n // First, check to see if we have a matching meta tag that we can make\n // use of that is strongly associated with the headline.\n let title;\n\n title = extractFromMeta($, STRONG_TITLE_META_TAGS, metaCache);\n if (title) return cleanTitle(title, { url, $ });\n\n // Second, look through our content selectors for the most likely\n // article title that is strongly associated with the headline.\n title = extractFromSelectors($, STRONG_TITLE_SELECTORS);\n if (title) return cleanTitle(title, { url, $ });\n\n // Third, check for weaker meta tags that may match.\n title = extractFromMeta($, WEAK_TITLE_META_TAGS, metaCache);\n if (title) return cleanTitle(title, { url, $ });\n\n // Last, look for weaker selector tags that may match.\n title = extractFromSelectors($, WEAK_TITLE_SELECTORS);\n if (title) return cleanTitle(title, { url, $ });\n\n // If no matches, return an empty string\n return '';\n },\n};\n\nexport default GenericTitleExtractor;\n","// An ordered list of meta tag names that denote likely article authors. All\n// attributes should be lowercase for faster case-insensitive matching. From\n// most distinct to least distinct.\n//\n// Note: \"author\" is too often the -developer- of the page, so it is not\n// added here.\nexport const AUTHOR_META_TAGS = [\n 'byl',\n 'clmst',\n 'dc.author',\n 'dcsext.author',\n 'dc.creator',\n 'rbauthors',\n 'authors',\n];\n\nexport const AUTHOR_MAX_LENGTH = 300;\n\n// An ordered list of XPath Selectors to find likely article authors. From\n// most explicit to least explicit.\n//\n// Note - this does not use classes like CSS. This checks to see if the string\n// exists in the className, which is not as accurate as .className (which\n// splits on spaces/endlines), but for our purposes it's close enough. The\n// speed tradeoff is worth the accuracy hit.\nexport const AUTHOR_SELECTORS = [\n '.entry .entry-author',\n '.author.vcard .fn',\n '.author .vcard .fn',\n '.byline.vcard .fn',\n '.byline .vcard .fn',\n '.byline .by .author',\n '.byline .by',\n '.byline .author',\n '.post-author.vcard',\n '.post-author .vcard',\n 'a[rel=author]',\n '#by_author',\n '.by_author',\n '#entryAuthor',\n '.entryAuthor',\n '.byline a[href*=author]',\n '#author .authorname',\n '.author .authorname',\n '#author',\n '.author',\n '.articleauthor',\n '.ArticleAuthor',\n '.byline',\n];\n\n// An ordered list of Selectors to find likely article authors, with\n// regular expression for content.\nconst bylineRe = /^[\\n\\s]*By/i;\nexport const BYLINE_SELECTORS_RE = [\n ['#byline', bylineRe],\n ['.byline', bylineRe],\n];\n","import { cleanAuthor } from 'cleaners';\nimport {\n extractFromMeta,\n extractFromSelectors,\n} from 'utils/dom';\n\nimport {\n AUTHOR_META_TAGS,\n AUTHOR_MAX_LENGTH,\n AUTHOR_SELECTORS,\n BYLINE_SELECTORS_RE,\n} from './constants';\n\nconst GenericAuthorExtractor = {\n extract({ $, metaCache }) {\n let author;\n\n // First, check to see if we have a matching\n // meta tag that we can make use of.\n author = extractFromMeta($, AUTHOR_META_TAGS, metaCache);\n if (author && author.length < AUTHOR_MAX_LENGTH) {\n return cleanAuthor(author);\n }\n\n // Second, look through our selectors looking for potential authors.\n author = extractFromSelectors($, AUTHOR_SELECTORS, 2);\n if (author && author.length < AUTHOR_MAX_LENGTH) {\n return cleanAuthor(author);\n }\n\n // Last, use our looser regular-expression based selectors for\n // potential authors.\n for (const [selector, regex] of BYLINE_SELECTORS_RE) {\n const node = $(selector);\n if (node.length === 1) {\n const text = node.text();\n if (regex.test(text)) {\n return cleanAuthor(text);\n }\n }\n }\n\n return null;\n },\n};\n\nexport default GenericAuthorExtractor;\n","// An ordered list of meta tag names that denote\n// likely date published dates. All attributes\n// should be lowercase for faster case-insensitive matching.\n// From most distinct to least distinct.\nexport const DATE_PUBLISHED_META_TAGS = [\n 'article:published_time',\n 'displaydate',\n 'dc.date',\n 'dc.date.issued',\n 'rbpubdate',\n 'publish_date',\n 'pub_date',\n 'pagedate',\n 'pubdate',\n 'revision_date',\n 'doc_date',\n 'date_created',\n 'content_create_date',\n 'lastmodified',\n 'created',\n 'date',\n];\n\n// An ordered list of XPath Selectors to find\n// likely date published dates. From most explicit\n// to least explicit.\nexport const DATE_PUBLISHED_SELECTORS = [\n '.hentry .dtstamp.published',\n '.hentry .published',\n '.hentry .dtstamp.updated',\n '.hentry .updated',\n '.single .published',\n '.meta .published',\n '.meta .postDate',\n '.entry-date',\n '.byline .date',\n '.postmetadata .date',\n '.article_datetime',\n '.date-header',\n '.story-date',\n '.dateStamp',\n '#story .datetime',\n '.dateline',\n '.pubdate',\n];\n\n// An ordered list of compiled regular expressions to find likely date\n// published dates from the URL. These should always have the first\n// reference be a date string that is parseable by dateutil.parser.parse\nconst abbrevMonthsStr = '(jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec)';\nexport const DATE_PUBLISHED_URL_RES = [\n // /2012/01/27/ but not /2012/01/293\n new RegExp('/(20\\\\d{2}/\\\\d{2}/\\\\d{2})/', 'i'),\n // 20120127 or 20120127T but not 2012012733 or 8201201733\n // /[^0-9](20\\d{2}[01]\\d[0-3]\\d)([^0-9]|$)/i,\n // 2012-01-27\n new RegExp('(20\\\\d{2}-[01]\\\\d-[0-3]\\\\d)', 'i'),\n // /2012/jan/27/\n new RegExp(`/(20\\\\d{2}/${abbrevMonthsStr}/[0-3]\\\\d)/`, 'i'),\n];\n","import { cleanDatePublished } from 'cleaners';\nimport {\n extractFromMeta,\n extractFromSelectors,\n} from 'utils/dom';\nimport { extractFromUrl } from 'utils/text';\n\nimport {\n DATE_PUBLISHED_META_TAGS,\n DATE_PUBLISHED_SELECTORS,\n DATE_PUBLISHED_URL_RES,\n} from './constants';\n\nconst GenericDatePublishedExtractor = {\n extract({ $, url, metaCache }) {\n let datePublished;\n // First, check to see if we have a matching meta tag\n // that we can make use of.\n // Don't try cleaning tags from this string\n datePublished = extractFromMeta($, DATE_PUBLISHED_META_TAGS, metaCache, false);\n if (datePublished) return cleanDatePublished(datePublished);\n\n // Second, look through our selectors looking for potential\n // date_published's.\n datePublished = extractFromSelectors($, DATE_PUBLISHED_SELECTORS);\n if (datePublished) return cleanDatePublished(datePublished);\n\n // Lastly, look to see if a dately string exists in the URL\n datePublished = extractFromUrl(url, DATE_PUBLISHED_URL_RES);\n if (datePublished) return cleanDatePublished(datePublished);\n\n return null;\n },\n};\n\nexport default GenericDatePublishedExtractor;\n","// import {\n// DEK_META_TAGS,\n// DEK_SELECTORS,\n// DEK_URL_RES,\n// } from './constants';\n\n// import { cleanDek } from 'cleaners';\n\n// import {\n// extractFromMeta,\n// extractFromSelectors,\n// } from 'utils/dom';\n\n// Currently there is only one selector for\n// deks. We should simply return null here\n// until we have a more robust generic option.\n// Below is the original source for this, for reference.\nconst GenericDekExtractor = {\n // extract({ $, content, metaCache }) {\n extract() {\n return null;\n },\n};\n\nexport default GenericDekExtractor;\n\n// def extract_dek(self):\n// # First, check to see if we have a matching meta tag that we can make\n// # use of.\n// dek = self.extract_from_meta('dek', constants.DEK_META_TAGS)\n// if not dek:\n// # Second, look through our CSS/XPath selectors. This may return\n// # an HTML fragment.\n// dek = self.extract_from_selectors('dek',\n// constants.DEK_SELECTORS,\n// text_only=False)\n//\n// if dek:\n// # Make sure our dek isn't in the first few thousand characters\n// # of the content, otherwise it's just the start of the article\n// # and not a true dek.\n// content = self.extract_content()\n// content_chunk = normalize_spaces(strip_tags(content[:2000]))\n// dek_chunk = normalize_spaces(dek[:100]) # Already has no tags.\n//\n// # 80% or greater similarity means the dek was very similar to some\n// # of the starting content, so we skip it.\n// if fuzz.partial_ratio(content_chunk, dek_chunk) < 80:\n// return dek\n//\n// return None\n","// An ordered list of meta tag names that denote likely article leading images.\n// All attributes should be lowercase for faster case-insensitive matching.\n// From most distinct to least distinct.\nexport const LEAD_IMAGE_URL_META_TAGS = [\n 'og:image',\n 'twitter:image',\n 'image_src',\n];\n\nexport const LEAD_IMAGE_URL_SELECTORS = [\n 'link[rel=image_src]',\n];\n\nexport const POSITIVE_LEAD_IMAGE_URL_HINTS = [\n 'upload',\n 'wp-content',\n 'large',\n 'photo',\n 'wp-image',\n];\nexport const POSITIVE_LEAD_IMAGE_URL_HINTS_RE = new RegExp(POSITIVE_LEAD_IMAGE_URL_HINTS.join('|'), 'i');\n\nexport const NEGATIVE_LEAD_IMAGE_URL_HINTS = [\n 'spacer',\n 'sprite',\n 'blank',\n 'throbber',\n 'gradient',\n 'tile',\n 'bg',\n 'background',\n 'icon',\n 'social',\n 'header',\n 'hdr',\n 'advert',\n 'spinner',\n 'loader',\n 'loading',\n 'default',\n 'rating',\n 'share',\n 'facebook',\n 'twitter',\n 'theme',\n 'promo',\n 'ads',\n 'wp-includes',\n];\nexport const NEGATIVE_LEAD_IMAGE_URL_HINTS_RE = new RegExp(NEGATIVE_LEAD_IMAGE_URL_HINTS.join('|'), 'i');\n\nexport const GIF_RE = /\\.gif(\\?.*)?$/i;\nexport const JPG_RE = /\\.jpe?g(\\?.*)?$/i;\n","import {\n POSITIVE_LEAD_IMAGE_URL_HINTS_RE,\n NEGATIVE_LEAD_IMAGE_URL_HINTS_RE,\n GIF_RE,\n JPG_RE,\n} from './constants';\n\nimport { PHOTO_HINTS_RE } from '../content/scoring/constants';\n\nfunction getSig($node) {\n return `${$node.attr('class') || ''} ${$node.attr('id') || ''}`;\n}\n\n// Scores image urls based on a variety of heuristics.\nexport function scoreImageUrl(url) {\n url = url.trim();\n let score = 0;\n\n if (POSITIVE_LEAD_IMAGE_URL_HINTS_RE.test(url)) {\n score += 20;\n }\n\n if (NEGATIVE_LEAD_IMAGE_URL_HINTS_RE.test(url)) {\n score -= 20;\n }\n\n // TODO: We might want to consider removing this as\n // gifs are much more common/popular than they once were\n if (GIF_RE.test(url)) {\n score -= 10;\n }\n\n if (JPG_RE.test(url)) {\n score += 10;\n }\n\n // PNGs are neutral.\n\n return score;\n}\n\n// Alt attribute usually means non-presentational image.\nexport function scoreAttr($img) {\n if ($img.attr('alt')) {\n return 5;\n }\n\n return 0;\n}\n\n// Look through our parent and grandparent for figure-like\n// container elements, give a bonus if we find them\nexport function scoreByParents($img) {\n let score = 0;\n const $figParent = $img.parents('figure').first();\n\n if ($figParent.length === 1) {\n score += 25;\n }\n\n const $parent = $img.parent();\n let $gParent;\n if ($parent.length === 1) {\n $gParent = $parent.parent();\n }\n\n [$parent, $gParent].forEach(($node) => {\n if (PHOTO_HINTS_RE.test(getSig($node))) {\n score += 15;\n }\n });\n\n return score;\n}\n\n// Look at our immediate sibling and see if it looks like it's a\n// caption. Bonus if so.\nexport function scoreBySibling($img) {\n let score = 0;\n const $sibling = $img.next();\n const sibling = $sibling.get(0);\n\n if (sibling && sibling.tagName.toLowerCase() === 'figcaption') {\n score += 25;\n }\n\n if (PHOTO_HINTS_RE.test(getSig($sibling))) {\n score += 15;\n }\n\n return score;\n}\n\nexport function scoreByDimensions($img) {\n let score = 0;\n\n const width = parseFloat($img.attr('width'));\n const height = parseFloat($img.attr('height'));\n const src = $img.attr('src');\n\n // Penalty for skinny images\n if (width && width <= 50) {\n score -= 50;\n }\n\n // Penalty for short images\n if (height && height <= 50) {\n score -= 50;\n }\n\n if (width && height && !src.includes('sprite')) {\n const area = width * height;\n if (area < 5000) { // Smaller than 50 x 100\n score -= 100;\n } else {\n score += Math.round(area / 1000);\n }\n }\n\n return score;\n}\n\nexport function scoreByPosition($imgs, index) {\n return ($imgs.length / 2) - index;\n}\n","import { extractFromMeta } from 'utils/dom';\nimport { cleanImage } from 'cleaners';\n\nimport {\n LEAD_IMAGE_URL_META_TAGS,\n LEAD_IMAGE_URL_SELECTORS,\n} from './constants';\n\nimport {\n scoreImageUrl,\n scoreAttr,\n scoreByParents,\n scoreBySibling,\n scoreByDimensions,\n scoreByPosition,\n} from './score-image';\n\n// Given a resource, try to find the lead image URL from within\n// it. Like content and next page extraction, uses a scoring system\n// to determine what the most likely image may be. Short circuits\n// on really probable things like og:image meta tags.\n//\n// Potential signals to still take advantage of:\n// * domain\n// * weird aspect ratio\nconst GenericLeadImageUrlExtractor = {\n extract({ $, content, metaCache, html }) {\n let cleanUrl;\n if (!$.browser && $('head').length === 0) {\n $('*').first().prepend(html);\n }\n\n // Check to see if we have a matching meta tag that we can make use of.\n // Moving this higher because common practice is now to use large\n // images on things like Open Graph or Twitter cards.\n // images usually have for things like Open Graph.\n const imageUrl =\n extractFromMeta(\n $,\n LEAD_IMAGE_URL_META_TAGS,\n metaCache,\n false\n );\n\n if (imageUrl) {\n cleanUrl = cleanImage(imageUrl);\n\n if (cleanUrl) return cleanUrl;\n }\n\n // Next, try to find the \"best\" image via the content.\n // We'd rather not have to fetch each image and check dimensions,\n // so try to do some analysis and determine them instead.\n const $content = $(content);\n const imgs = $('img', $content).toArray();\n const imgScores = {};\n\n imgs.forEach((img, index) => {\n const $img = $(img);\n const src = $img.attr('src');\n\n if (!src) return;\n\n let score = scoreImageUrl(src);\n score += scoreAttr($img);\n score += scoreByParents($img);\n score += scoreBySibling($img);\n score += scoreByDimensions($img);\n score += scoreByPosition(imgs, index);\n\n imgScores[src] = score;\n });\n\n const [topUrl, topScore] =\n Reflect.ownKeys(imgScores).reduce((acc, key) =>\n imgScores[key] > acc[1] ? [key, imgScores[key]] : acc\n , [null, 0]);\n\n if (topScore > 0) {\n cleanUrl = cleanImage(topUrl);\n\n if (cleanUrl) return cleanUrl;\n }\n\n // If nothing else worked, check to see if there are any really\n // probable nodes in the doc, like <link rel=\"image_src\" />.\n for (const selector of LEAD_IMAGE_URL_SELECTORS) {\n const $node = $(selector).first();\n const src = $node.attr('src');\n if (src) {\n cleanUrl = cleanImage(src);\n if (cleanUrl) return cleanUrl;\n }\n\n const href = $node.attr('href');\n if (href) {\n cleanUrl = cleanImage(href);\n if (cleanUrl) return cleanUrl;\n }\n\n const value = $node.attr('value');\n if (value) {\n cleanUrl = cleanImage(value);\n if (cleanUrl) return cleanUrl;\n }\n }\n\n return null;\n },\n};\n\nexport default GenericLeadImageUrlExtractor;\n\n// def extract(self):\n// \"\"\"\n// # First, try to find the \"best\" image via the content.\n// # We'd rather not have to fetch each image and check dimensions,\n// # so try to do some analysis and determine them instead.\n// content = self.extractor.extract_content(return_type=\"node\")\n// imgs = content.xpath('.//img')\n// img_scores = defaultdict(int)\n// logger.debug('Scoring %d images from content', len(imgs))\n// for (i, img) in enumerate(imgs):\n// img_score = 0\n//\n// if not 'src' in img.attrib:\n// logger.debug('No src attribute found')\n// continue\n//\n// try:\n// parsed_img = urlparse(img.attrib['src'])\n// img_path = parsed_img.path.lower()\n// except ValueError:\n// logger.debug('ValueError getting img path.')\n// continue\n// logger.debug('Image path is %s', img_path)\n//\n// if constants.POSITIVE_LEAD_IMAGE_URL_HINTS_RE.match(img_path):\n// logger.debug('Positive URL hints match. Adding 20.')\n// img_score += 20\n//\n// if constants.NEGATIVE_LEAD_IMAGE_URL_HINTS_RE.match(img_path):\n// logger.debug('Negative URL hints match. Subtracting 20.')\n// img_score -= 20\n//\n// # Gifs are more often structure than photos\n// if img_path.endswith('gif'):\n// logger.debug('gif found. Subtracting 10.')\n// img_score -= 10\n//\n// # JPGs are more often photographs\n// if img_path.endswith('jpg'):\n// logger.debug('jpg found. Adding 10.')\n// img_score += 10\n//\n// # PNGs are neutral.\n//\n// # Alt attribute usually means non-presentational image.\n// if 'alt' in img.attrib and len(img.attrib['alt']) > 5:\n// logger.debug('alt attribute found. Adding 5.')\n// img_score += 5\n//\n// # Look through our parent and grandparent for figure-like\n// # container elements, give a bonus if we find them\n// parents = [img.getparent()]\n// if parents[0] is not None and parents[0].getparent() is not None:\n// parents.append(parents[0].getparent())\n// for p in parents:\n// if p.tag == 'figure':\n// logger.debug('Parent with <figure> tag found. Adding 25.')\n// img_score += 25\n//\n// p_sig = ' '.join([p.get('id', ''), p.get('class', '')])\n// if constants.PHOTO_HINTS_RE.search(p_sig):\n// logger.debug('Photo hints regex match. Adding 15.')\n// img_score += 15\n//\n// # Look at our immediate sibling and see if it looks like it's a\n// # caption. Bonus if so.\n// sibling = img.getnext()\n// if sibling is not None:\n// if sibling.tag == 'figcaption':\n// img_score += 25\n//\n// sib_sig = ' '.join([sibling.get('id', ''),\n// sibling.get('class', '')]).lower()\n// if 'caption' in sib_sig:\n// img_score += 15\n//\n// # Pull out width/height if they were set.\n// img_width = None\n// img_height = None\n// if 'width' in img.attrib:\n// try:\n// img_width = float(img.get('width'))\n// except ValueError:\n// pass\n// if 'height' in img.attrib:\n// try:\n// img_height = float(img.get('height'))\n// except ValueError:\n// pass\n//\n// # Penalty for skinny images\n// if img_width and img_width <= 50:\n// logger.debug('Skinny image found. Subtracting 50.')\n// img_score -= 50\n//\n// # Penalty for short images\n// if img_height and img_height <= 50:\n// # Wide, short images are more common than narrow, tall ones\n// logger.debug('Short image found. Subtracting 25.')\n// img_score -= 25\n//\n// if img_width and img_height and not 'sprite' in img_path:\n// area = img_width * img_height\n//\n// if area < 5000: # Smaller than 50x100\n// logger.debug('Image with small area found. Subtracting 100.')\n// img_score -= 100\n// else:\n// img_score += round(area/1000.0)\n//\n// # If the image is higher on the page than other images,\n// # it gets a bonus. Penalty if lower.\n// logger.debug('Adding page placement bonus of %d.', len(imgs)/2 - i)\n// img_score += len(imgs)/2 - i\n//\n// # Use the raw src here because we munged img_path for case\n// # insensitivity\n// logger.debug('Final score is %d.', img_score)\n// img_scores[img.attrib['src']] += img_score\n//\n// top_score = 0\n// top_url = None\n// for (url, score) in img_scores.items():\n// if score > top_score:\n// top_url = url\n// top_score = score\n//\n// if top_score > 0:\n// logger.debug('Using top score image from content. Score was %d', top_score)\n// return top_url\n//\n//\n// # If nothing else worked, check to see if there are any really\n// # probable nodes in the doc, like <link rel=\"image_src\" />.\n// logger.debug('Trying to find lead image in probable nodes')\n// for selector in constants.LEAD_IMAGE_URL_SELECTORS:\n// nodes = self.resource.extract_by_selector(selector)\n// for node in nodes:\n// clean_value = None\n// if node.attrib.get('src'):\n// clean_value = self.clean(node.attrib['src'])\n//\n// if not clean_value and node.attrib.get('href'):\n// clean_value = self.clean(node.attrib['href'])\n//\n// if not clean_value and node.attrib.get('value'):\n// clean_value = self.clean(node.attrib['value'])\n//\n// if clean_value:\n// logger.debug('Found lead image in probable nodes.')\n// logger.debug('Node was: %s', node)\n// return clean_value\n//\n// return None\n","import difflib from 'difflib';\n\nexport default function scoreSimilarity(score, articleUrl, href) {\n // Do this last and only if we have a real candidate, because it's\n // potentially expensive computationally. Compare the link to this\n // URL using difflib to get the % similarity of these URLs. On a\n // sliding scale, subtract points from this link based on\n // similarity.\n if (score > 0) {\n const similarity = new difflib.SequenceMatcher(null, articleUrl, href).ratio();\n // Subtract .1 from diff_percent when calculating modifier,\n // which means that if it's less than 10% different, we give a\n // bonus instead. Ex:\n // 3% different = +17.5 points\n // 10% different = 0 points\n // 20% different = -25 points\n const diffPercent = 1.0 - similarity;\n const diffModifier = -(250 * (diffPercent - 0.2));\n return score + diffModifier;\n }\n\n return 0;\n}\n","import { IS_DIGIT_RE } from 'utils/text/constants';\n\nexport default function scoreLinkText(linkText, pageNum) {\n // If the link text can be parsed as a number, give it a minor\n // bonus, with a slight bias towards lower numbered pages. This is\n // so that pages that might not have 'next' in their text can still\n // get scored, and sorted properly by score.\n let score = 0;\n\n if (IS_DIGIT_RE.test(linkText.trim())) {\n const linkTextAsNum = parseInt(linkText, 10);\n // If it's the first page, we already got it on the first call.\n // Give it a negative score. Otherwise, up to page 10, give a\n // small bonus.\n if (linkTextAsNum < 2) {\n score = -30;\n } else {\n score = Math.max(0, 10 - linkTextAsNum);\n }\n\n // If it appears that the current page number is greater than\n // this links page number, it's a very bad sign. Give it a big\n // penalty.\n if (pageNum && pageNum >= linkTextAsNum) {\n score -= 50;\n }\n }\n\n return score;\n}\n","export default function scorePageInLink(pageNum, isWp) {\n // page in the link = bonus. Intentionally ignore wordpress because\n // their ?p=123 link style gets caught by this even though it means\n // separate documents entirely.\n if (pageNum && !isWp) {\n return 50;\n }\n\n return 0;\n}\n","export const DIGIT_RE = /\\d/;\n\n// A list of words that, if found in link text or URLs, likely mean that\n// this link is not a next page link.\nexport const EXTRANEOUS_LINK_HINTS = [\n 'print',\n 'archive',\n 'comment',\n 'discuss',\n 'e-mail',\n 'email',\n 'share',\n 'reply',\n 'all',\n 'login',\n 'sign',\n 'single',\n 'adx',\n 'entry-unrelated',\n];\nexport const EXTRANEOUS_LINK_HINTS_RE = new RegExp(EXTRANEOUS_LINK_HINTS.join('|'), 'i');\n\n// Match any link text/classname/id that looks like it could mean the next\n// page. Things like: next, continue, >, >>, » but not >|, »| as those can\n// mean last page.\nexport const NEXT_LINK_TEXT_RE = new RegExp('(next|weiter|continue|>([^|]|$)|»([^|]|$))', 'i');\n\n// Match any link text/classname/id that looks like it is an end link: things\n// like \"first\", \"last\", \"end\", etc.\nexport const CAP_LINK_TEXT_RE = new RegExp('(first|last|end)', 'i');\n\n// Match any link text/classname/id that looks like it means the previous\n// page.\nexport const PREV_LINK_TEXT_RE = new RegExp('(prev|earl|old|new|<|«)', 'i');\n\n// Match any phrase that looks like it could be page, or paging, or pagination\nexport const PAGE_RE = new RegExp('pag(e|ing|inat)', 'i');\n","import { EXTRANEOUS_LINK_HINTS_RE } from '../constants';\n\nexport default function scoreExtraneousLinks(href) {\n // If the URL itself contains extraneous values, give a penalty.\n if (EXTRANEOUS_LINK_HINTS_RE.test(href)) {\n return -25;\n }\n\n return 0;\n}\n","import { range } from 'utils';\nimport {\n NEGATIVE_SCORE_RE,\n POSITIVE_SCORE_RE,\n PAGE_RE,\n} from 'utils/dom/constants';\nimport { EXTRANEOUS_LINK_HINTS_RE } from '../constants';\n\nfunction makeSig($link) {\n return `${$link.attr('class') || ''} ${$link.attr('id') || ''}`;\n}\n\nexport default function scoreByParents($link) {\n // If a parent node contains paging-like classname or id, give a\n // bonus. Additionally, if a parent_node contains bad content\n // (like 'sponsor'), give a penalty.\n let $parent = $link.parent();\n let positiveMatch = false;\n let negativeMatch = false;\n let score = 0;\n\n Array.from(range(0, 4)).forEach(() => {\n if ($parent.length === 0) {\n return;\n }\n\n const parentData = makeSig($parent, ' ');\n\n // If we have 'page' or 'paging' in our data, that's a good\n // sign. Add a bonus.\n if (!positiveMatch && PAGE_RE.test(parentData)) {\n positiveMatch = true;\n score += 25;\n }\n\n // If we have 'comment' or something in our data, and\n // we don't have something like 'content' as well, that's\n // a bad sign. Give a penalty.\n if (!negativeMatch && NEGATIVE_SCORE_RE.test(parentData)\n && EXTRANEOUS_LINK_HINTS_RE.test(parentData)) {\n if (!POSITIVE_SCORE_RE.test(parentData)) {\n negativeMatch = true;\n score -= 25;\n }\n }\n\n $parent = $parent.parent();\n });\n\n return score;\n}\n","import { PREV_LINK_TEXT_RE } from '../constants';\n\nexport default function scorePrevLink(linkData) {\n // If the link has something like \"previous\", its definitely\n // an old link, skip it.\n if (PREV_LINK_TEXT_RE.test(linkData)) {\n return -200;\n }\n\n return 0;\n}\n","import URL from 'url';\n\nimport {\n DIGIT_RE,\n EXTRANEOUS_LINK_HINTS_RE,\n} from '../constants';\n\nexport default function shouldScore(\n href,\n articleUrl,\n baseUrl,\n parsedUrl,\n linkText,\n previousUrls\n) {\n // skip if we've already fetched this url\n if (previousUrls.find(url => href === url) !== undefined) {\n return false;\n }\n\n // If we've already parsed this URL, or the URL matches the base\n // URL, or is empty, skip it.\n if (!href || href === articleUrl || href === baseUrl) {\n return false;\n }\n\n const { hostname } = parsedUrl;\n const { hostname: linkHost } = URL.parse(href);\n\n // Domain mismatch.\n if (linkHost !== hostname) {\n return false;\n }\n\n // If href doesn't contain a digit after removing the base URL,\n // it's certainly not the next page.\n const fragment = href.replace(baseUrl, '');\n if (!DIGIT_RE.test(fragment)) {\n return false;\n }\n\n // This link has extraneous content (like \"comment\") in its link\n // text, so we skip it.\n if (EXTRANEOUS_LINK_HINTS_RE.test(linkText)) {\n return false;\n }\n\n // Next page link text is never long, skip if it is too long.\n if (linkText.length > 25) {\n return false;\n }\n\n return true;\n}\n","export default function scoreBaseUrl(href, baseRegex) {\n // If the baseUrl isn't part of this URL, penalize this\n // link. It could still be the link, but the odds are lower.\n // Example:\n // http://www.actionscript.org/resources/articles/745/1/JavaScript-and-VBScript-Injection-in-ActionScript-3/Page1.html\n if (!baseRegex.test(href)) {\n return -25;\n }\n\n return 0;\n}\n","import { NEXT_LINK_TEXT_RE } from '../constants';\n\nexport default function scoreNextLinkText(linkData) {\n // Things like \"next\", \">>\", etc.\n if (NEXT_LINK_TEXT_RE.test(linkData)) {\n return 50;\n }\n\n return 0;\n}\n","import {\n NEXT_LINK_TEXT_RE,\n CAP_LINK_TEXT_RE,\n} from '../constants';\n\nexport default function scoreCapLinks(linkData) {\n // Cap links are links like \"last\", etc.\n if (CAP_LINK_TEXT_RE.test(linkData)) {\n // If we found a link like \"last\", but we've already seen that\n // this link is also \"next\", it's fine. If it's not been\n // previously marked as \"next\", then it's probably bad.\n // Penalize.\n if (NEXT_LINK_TEXT_RE.test(linkData)) {\n return -65;\n }\n }\n\n return 0;\n}\n","import URL from 'url';\n\nimport {\n getAttrs,\n isWordpress,\n} from 'utils/dom';\nimport {\n removeAnchor,\n pageNumFromUrl,\n} from 'utils/text';\n\nimport {\n scoreSimilarity,\n scoreLinkText,\n scorePageInLink,\n scoreExtraneousLinks,\n scoreByParents,\n scorePrevLink,\n shouldScore,\n scoreBaseUrl,\n scoreCapLinks,\n scoreNextLinkText,\n} from './utils';\n\nexport function makeBaseRegex(baseUrl) {\n return new RegExp(`^${baseUrl}`, 'i');\n}\n\nfunction makeSig($link, linkText) {\n return `${linkText || $link.text()} ${$link.attr('class') || ''} ${$link.attr('id') || ''}`;\n}\n\nexport default function scoreLinks({\n links,\n articleUrl,\n baseUrl,\n parsedUrl,\n $,\n previousUrls = [],\n}) {\n parsedUrl = parsedUrl || URL.parse(articleUrl);\n const baseRegex = makeBaseRegex(baseUrl);\n const isWp = isWordpress($);\n\n // Loop through all links, looking for hints that they may be next-page\n // links. Things like having \"page\" in their textContent, className or\n // id, or being a child of a node with a page-y className or id.\n //\n // After we do that, assign each page a score, and pick the one that\n // looks most like the next page link, as long as its score is strong\n // enough to have decent confidence.\n const scoredPages = links.reduce((possiblePages, link) => {\n // Remove any anchor data since we don't do a good job\n // standardizing URLs (it's hard), we're going to do\n // some checking with and without a trailing slash\n const attrs = getAttrs(link);\n\n // if href is undefined, return\n if (!attrs.href) return possiblePages;\n\n const href = removeAnchor(attrs.href);\n const $link = $(link);\n const linkText = $link.text();\n\n if (!shouldScore(href, articleUrl, baseUrl, parsedUrl, linkText, previousUrls)) {\n return possiblePages;\n }\n\n // ## PASSED THE FIRST-PASS TESTS. Start scoring. ##\n if (!possiblePages[href]) {\n possiblePages[href] = {\n score: 0,\n linkText,\n href,\n };\n } else {\n possiblePages[href].linkText = `${possiblePages[href].linkText}|${linkText}`;\n }\n\n const possiblePage = possiblePages[href];\n const linkData = makeSig($link, linkText);\n const pageNum = pageNumFromUrl(href);\n\n let score = scoreBaseUrl(href, baseRegex);\n score += scoreNextLinkText(linkData);\n score += scoreCapLinks(linkData);\n score += scorePrevLink(linkData);\n score += scoreByParents($link);\n score += scoreExtraneousLinks(href);\n score += scorePageInLink(pageNum, isWp);\n score += scoreLinkText(linkText, pageNum);\n score += scoreSimilarity(score, articleUrl, href);\n\n possiblePage.score = score;\n\n return possiblePages;\n }, {});\n\n return Reflect.ownKeys(scoredPages).length === 0 ? null : scoredPages;\n}\n","import URL from 'url';\n\nimport {\n articleBaseUrl,\n removeAnchor,\n} from 'utils/text';\nimport scoreLinks from './scoring/score-links';\n\n// Looks for and returns next page url\n// for multi-page articles\nconst GenericNextPageUrlExtractor = {\n extract({ $, url, parsedUrl, previousUrls = [] }) {\n parsedUrl = parsedUrl || URL.parse(url);\n\n const articleUrl = removeAnchor(url);\n const baseUrl = articleBaseUrl(url, parsedUrl);\n\n const links = $('a[href]').toArray();\n\n const scoredLinks = scoreLinks({\n links,\n articleUrl,\n baseUrl,\n parsedUrl,\n $,\n previousUrls,\n });\n\n // If no links were scored, return null\n if (!scoredLinks) return null;\n\n // now that we've scored all possible pages,\n // find the biggest one.\n const topPage = Reflect.ownKeys(scoredLinks).reduce((acc, link) => {\n const scoredLink = scoredLinks[link];\n return scoredLink.score > acc.score ? scoredLink : acc;\n }, { score: -100 });\n\n // If the score is less than 50, we're not confident enough to use it,\n // so we fail.\n if (topPage.score >= 50) {\n return topPage.href;\n }\n\n return null;\n },\n};\n\nexport default GenericNextPageUrlExtractor;\n","export const CANONICAL_META_SELECTORS = [\n 'og:url',\n];\n","import URL from 'url';\nimport { extractFromMeta } from 'utils/dom';\n\nimport { CANONICAL_META_SELECTORS } from './constants';\n\nfunction parseDomain(url) {\n const parsedUrl = URL.parse(url);\n const { hostname } = parsedUrl;\n return hostname;\n}\n\nfunction result(url) {\n return {\n url,\n domain: parseDomain(url),\n };\n}\n\nconst GenericUrlExtractor = {\n extract({ $, url, metaCache }) {\n const $canonical = $('link[rel=canonical]');\n if ($canonical.length !== 0) {\n const href = $canonical.attr('href');\n if (href) {\n return result(href);\n }\n }\n\n const metaUrl = extractFromMeta($, CANONICAL_META_SELECTORS, metaCache);\n if (metaUrl) {\n return result(metaUrl);\n }\n\n return result(url);\n },\n\n};\n\nexport default GenericUrlExtractor;\n","export const EXCERPT_META_SELECTORS = [\n 'og:description',\n 'twitter:description',\n];\n","import ellipsize from 'ellipsize';\n\nimport {\n extractFromMeta,\n stripTags,\n} from 'utils/dom';\n\nimport { EXCERPT_META_SELECTORS } from './constants';\n\nexport function clean(content, $, maxLength = 200) {\n content = content.replace(/[\\s\\n]+/g, ' ').trim();\n return ellipsize(content, maxLength, { ellipse: '…' });\n}\n\nconst GenericExcerptExtractor = {\n extract({ $, content, metaCache }) {\n const excerpt = extractFromMeta($, EXCERPT_META_SELECTORS, metaCache);\n if (excerpt) {\n return clean(stripTags(excerpt, $));\n }\n // Fall back to excerpting from the extracted content\n const maxLength = 200;\n const shortContent = content.slice(0, maxLength * 5);\n return clean($(shortContent).text(), $, maxLength);\n },\n};\n\nexport default GenericExcerptExtractor;\n","import cheerio from 'cheerio';\n\nimport { normalizeSpaces } from 'utils/text';\n\nconst GenericWordCountExtractor = {\n extract({ content }) {\n const $ = cheerio.load(content);\n const $content = $('div').first();\n\n const text = normalizeSpaces($content.text());\n return text.split(/\\s/).length;\n },\n};\n\nexport default GenericWordCountExtractor;\n","import cheerio from 'cheerio';\nimport stringDirection from 'string-direction';\n\nimport GenericContentExtractor from './content/extractor';\nimport GenericTitleExtractor from './title/extractor';\nimport GenericAuthorExtractor from './author/extractor';\nimport GenericDatePublishedExtractor from './date-published/extractor';\nimport GenericDekExtractor from './dek/extractor';\nimport GenericLeadImageUrlExtractor from './lead-image-url/extractor';\nimport GenericNextPageUrlExtractor from './next-page-url/extractor';\nimport GenericUrlExtractor from './url/extractor';\nimport GenericExcerptExtractor from './excerpt/extractor';\nimport GenericWordCountExtractor from './word-count/extractor';\n\nconst GenericExtractor = {\n // This extractor is the default for all domains\n domain: '*',\n title: GenericTitleExtractor.extract,\n date_published: GenericDatePublishedExtractor.extract,\n author: GenericAuthorExtractor.extract,\n content: GenericContentExtractor.extract.bind(GenericContentExtractor),\n lead_image_url: GenericLeadImageUrlExtractor.extract,\n dek: GenericDekExtractor.extract,\n next_page_url: GenericNextPageUrlExtractor.extract,\n url_and_domain: GenericUrlExtractor.extract,\n excerpt: GenericExcerptExtractor.extract,\n word_count: GenericWordCountExtractor.extract,\n direction: ({ title }) => stringDirection.getDirection(title),\n\n extract(options) {\n const { html, $ } = options;\n\n if (html && !$) {\n const loaded = cheerio.load(html);\n options.$ = loaded;\n }\n\n const title = this.title(options);\n const date_published = this.date_published(options);\n const author = this.author(options);\n const content = this.content({ ...options, title });\n const lead_image_url = this.lead_image_url({ ...options, content });\n const dek = this.dek({ ...options, content });\n const next_page_url = this.next_page_url(options);\n const excerpt = this.excerpt({ ...options, content });\n const word_count = this.word_count({ ...options, content });\n const direction = this.direction({ title });\n const { url, domain } = this.url_and_domain(options);\n\n return {\n title,\n author,\n date_published: date_published || null,\n dek,\n lead_image_url,\n content,\n next_page_url,\n url,\n domain,\n excerpt,\n word_count,\n direction,\n };\n },\n};\n\nexport default GenericExtractor;\n","import {\n MediumExtractor,\n BloggerExtractor,\n} from './custom/';\n\nconst Detectors = {\n 'meta[name=\"al:ios:app_name\"][value=\"Medium\"]': MediumExtractor,\n 'meta[name=\"generator\"][value=\"blogger\"]': BloggerExtractor,\n};\n\nexport default function detectByHtml($) {\n const selector = Reflect.ownKeys(Detectors).find(s => $(s).length > 0);\n\n return Detectors[selector];\n}\n","import URL from 'url';\n\nimport Extractors from './all';\nimport GenericExtractor from './generic';\nimport detectByHtml from './detect-by-html';\n\nexport default function getExtractor(url, parsedUrl, $) {\n parsedUrl = parsedUrl || URL.parse(url);\n const { hostname } = parsedUrl;\n const baseDomain = hostname.split('.').slice(-2).join('.');\n\n return Extractors[hostname] || Extractors[baseDomain] ||\n detectByHtml($) || GenericExtractor;\n}\n","import Cleaners from 'cleaners';\nimport { convertNodeTo } from 'utils/dom';\nimport GenericExtractor from './generic';\n\n// Remove elements by an array of selectors\nexport function cleanBySelectors($content, $, { clean }) {\n if (!clean) return $content;\n\n $(clean.join(','), $content).remove();\n\n return $content;\n}\n\n// Transform matching elements\nexport function transformElements($content, $, { transforms }) {\n if (!transforms) return $content;\n\n Reflect.ownKeys(transforms).forEach((key) => {\n const $matches = $(key, $content);\n const value = transforms[key];\n\n // If value is a string, convert directly\n if (typeof value === 'string') {\n $matches.each((index, node) => {\n convertNodeTo($(node), $, transforms[key]);\n });\n } else if (typeof value === 'function') {\n // If value is function, apply function to node\n $matches.each((index, node) => {\n const result = value($(node), $);\n // If function returns a string, convert node to that value\n if (typeof result === 'string') {\n convertNodeTo($(node), $, result);\n }\n });\n }\n });\n\n return $content;\n}\n\nfunction findMatchingSelector($, selectors, extractHtml) {\n return selectors.find((selector) => {\n if (Array.isArray(selector)) {\n if (extractHtml) {\n return selector.reduce((acc, s) => acc && $(s).length > 0, true);\n }\n\n const [s, attr] = selector;\n return $(s).length === 1 && $(s).attr(attr) && $(s).attr(attr).trim() !== '';\n }\n\n return $(selector).length === 1 && $(selector).text().trim() !== '';\n });\n}\n\nexport function select(opts) {\n const { $, type, extractionOpts, extractHtml = false } = opts;\n // Skip if there's not extraction for this type\n if (!extractionOpts) return null;\n\n // If a string is hardcoded for a type (e.g., Wikipedia\n // contributors), return the string\n if (typeof extractionOpts === 'string') return extractionOpts;\n\n const { selectors, defaultCleaner = true } = extractionOpts;\n\n const matchingSelector = findMatchingSelector($, selectors, extractHtml);\n\n if (!matchingSelector) return null;\n\n // Declaring result; will contain either\n // text or html, which will be cleaned\n // by the appropriate cleaner type\n\n // If the selector type requests html as its return type\n // transform and clean the element with provided selectors\n let $content;\n if (extractHtml) {\n // If matching selector is an array, we're considering this a\n // multi-match selection, which allows the parser to choose several\n // selectors to include in the result. Note that all selectors in the\n // array must match in order for this selector to trigger\n if (Array.isArray(matchingSelector)) {\n $content = $(matchingSelector.join(','));\n const $wrapper = $('<div></div>');\n $content.each((index, element) => {\n $wrapper.append(element);\n });\n\n $content = $wrapper;\n } else {\n $content = $(matchingSelector);\n }\n\n // Wrap in div so transformation can take place on root element\n $content.wrap($('<div></div>'));\n $content = $content.parent();\n\n $content = transformElements($content, $, extractionOpts);\n $content = cleanBySelectors($content, $, extractionOpts);\n\n $content = Cleaners[type]($content, { ...opts, defaultCleaner });\n\n return $.html($content);\n }\n\n let result;\n\n // if selector is an array (e.g., ['img', 'src']),\n // extract the attr\n if (Array.isArray(matchingSelector)) {\n const [selector, attr] = matchingSelector;\n result = $(selector).attr(attr).trim();\n } else {\n let $node = $(matchingSelector);\n\n $node = cleanBySelectors($node, $, extractionOpts);\n $node = transformElements($node, $, extractionOpts);\n\n result = $node.text().trim();\n }\n\n // Allow custom extractor to skip default cleaner\n // for this type; defaults to true\n if (defaultCleaner) {\n return Cleaners[type](result, { ...opts, ...extractionOpts });\n }\n\n return result;\n}\n\nfunction extractResult(opts) {\n const { type, extractor, fallback = true } = opts;\n\n const result = select({ ...opts, extractionOpts: extractor[type] });\n\n // If custom parser succeeds, return the result\n if (result) {\n return result;\n }\n\n // If nothing matches the selector, and fallback is enabled,\n // run the Generic extraction\n if (fallback) return GenericExtractor[type](opts);\n\n return null;\n}\n\nconst RootExtractor = {\n extract(extractor = GenericExtractor, opts) {\n const { contentOnly, extractedTitle } = opts;\n // This is the generic extractor. Run its extract method\n if (extractor.domain === '*') return extractor.extract(opts);\n\n opts = {\n ...opts,\n extractor,\n };\n\n if (contentOnly) {\n const content = extractResult({\n ...opts, type: 'content', extractHtml: true, title: extractedTitle,\n });\n return {\n content,\n };\n }\n const title = extractResult({ ...opts, type: 'title' });\n const date_published = extractResult({ ...opts, type: 'date_published' });\n const author = extractResult({ ...opts, type: 'author' });\n const next_page_url = extractResult({ ...opts, type: 'next_page_url' });\n const content = extractResult({\n ...opts, type: 'content', extractHtml: true, title,\n });\n const lead_image_url = extractResult({ ...opts, type: 'lead_image_url', content });\n const excerpt = extractResult({ ...opts, type: 'excerpt', content });\n const dek = extractResult({ ...opts, type: 'dek', content, excerpt });\n const word_count = extractResult({ ...opts, type: 'word_count', content });\n const direction = extractResult({ ...opts, type: 'direction', title });\n const { url, domain } =\n extractResult({ ...opts, type: 'url_and_domain' }) || { url: null, domain: null };\n\n return {\n title,\n content,\n author,\n date_published,\n lead_image_url,\n dek,\n next_page_url,\n url,\n domain,\n excerpt,\n word_count,\n direction,\n };\n },\n};\n\nexport default RootExtractor;\n","import { removeAnchor } from 'utils/text';\nimport RootExtractor from 'extractors/root-extractor';\nimport GenericExtractor from 'extractors/generic';\nimport Resource from 'resource';\n\nexport default async function collectAllPages(\n {\n next_page_url,\n html,\n $,\n metaCache,\n result,\n Extractor,\n title,\n url,\n }\n) {\n // At this point, we've fetched just the first page\n let pages = 1;\n const previousUrls = [removeAnchor(url)];\n\n // If we've gone over 26 pages, something has\n // likely gone wrong.\n while (next_page_url && pages < 26) {\n pages += 1;\n $ = await Resource.create(next_page_url);\n html = $.html();\n\n const extractorOpts = {\n url: next_page_url,\n html,\n $,\n metaCache,\n contentOnly: true,\n extractedTitle: title,\n previousUrls,\n };\n\n const nextPageResult = RootExtractor.extract(Extractor, extractorOpts);\n\n previousUrls.push(next_page_url);\n result = {\n ...result,\n content: `${result.content}<hr><h4>Page ${pages}</h4>${nextPageResult.content}`,\n };\n\n next_page_url = nextPageResult.next_page_url;\n }\n\n const word_count = GenericExtractor.word_count({ content: `<div>${result.content}</div>` });\n return {\n ...result,\n total_pages: pages,\n pages_rendered: pages,\n word_count,\n };\n}\n","import URL from 'url';\nimport cheerio from 'cheerio';\n\nimport Resource from 'resource';\nimport {\n validateUrl,\n Errors,\n} from 'utils';\nimport getExtractor from 'extractors/get-extractor';\nimport RootExtractor from 'extractors/root-extractor';\nimport collectAllPages from 'extractors/collect-all-pages';\n\nconst Mercury = {\n async parse(url, html, opts = {}) {\n const {\n fetchAllPages = true,\n fallback = true,\n } = opts;\n\n // if no url was passed and this is the browser version,\n // set url to window.location.href and load the html\n // from the current page\n if (!url && cheerio.browser) {\n url = window.location.href; // eslint-disable-line no-undef\n html = html || cheerio.html();\n }\n\n const parsedUrl = URL.parse(url);\n\n if (!validateUrl(parsedUrl)) {\n return Errors.badUrl;\n }\n\n const $ = await Resource.create(url, html, parsedUrl);\n\n const Extractor = getExtractor(url, parsedUrl, $);\n // console.log(`Using extractor for ${Extractor.domain}`);\n\n // If we found an error creating the resource, return that error\n if ($.failed) {\n return $;\n }\n\n // if html still has not been set (i.e., url passed to Mercury.parse),\n // set html from the response of Resource.create\n if (!html) {\n html = $.html();\n }\n\n // Cached value of every meta name in our document.\n // Used when extracting title/author/date_published/dek\n const metaCache = $('meta').map((_, node) => $(node).attr('name')).toArray();\n\n let result = RootExtractor.extract(\n Extractor,\n {\n url,\n html,\n $,\n metaCache,\n parsedUrl,\n fallback,\n });\n\n const { title, next_page_url } = result;\n\n // Fetch more pages if next_page_url found\n if (fetchAllPages && next_page_url) {\n result = await collectAllPages(\n {\n Extractor,\n next_page_url,\n html,\n $,\n metaCache,\n result,\n title,\n url,\n }\n );\n } else {\n result = {\n ...result,\n total_pages: 1,\n rendered_pages: 1,\n };\n }\n\n return result;\n },\n\n browser: !!cheerio.browser,\n\n // A convenience method for getting a resource\n // to work with, e.g., for custom extractor generator\n async fetchResource(url) {\n return await Resource.create(url);\n },\n\n};\n\nexport default Mercury;\n"],"names":["NORMALIZE_RE","normalizeSpaces","text","replace","trim","extractFromUrl","url","regexList","matchRe","find","re","test","exec","PAGE_IN_HREF_RE","RegExp","HAS_ALPHA_RE","IS_ALPHA_RE","IS_DIGIT_RE","ENCODING_RE","DEFAULT_ENCODING","pageNumFromUrl","matches","match","pageNum","parseInt","removeAnchor","split","isGoodSegment","segment","index","firstSegmentHasLetters","goodSegment","length","toLowerCase","articleBaseUrl","parsed","parsedUrl","URL","parse","protocol","host","path","cleanedSegments","reverse","reduce","acc","rawSegment","includes","possibleSegment","fileExt","push","join","SENTENCE_END_RE","hasSentenceEnd","excerptContent","content","words","slice","getEncoding","str","encoding","testEncode","iconv","encodingExists","range","start","end","validateUrl","hostname","Errors","REQUEST_HEADERS","cheerio","browser","FETCH_TIMEOUT","BAD_CONTENT_TYPES","BAD_CONTENT_TYPES_RE","MAX_CONTENT_LENGTH","get","options","resolve","reject","err","response","body","validateResponse","parseNon2xx","statusMessage","statusCode","Error","error","headers","contentType","contentLength","encodeURI","href","badUrl","fetchResource","convertMetaProp","$","from","to","each","_","node","$node","value","attr","removeAttr","normalizeMetaTags","SPACER_RE","KEEP_CLASS","KEEP_SELECTORS","STRIP_OUTPUT_TAGS","REMOVE_ATTRS","REMOVE_ATTR_SELECTORS","map","selector","REMOVE_ATTR_LIST","WHITELIST_ATTRS","WHITELIST_ATTRS_RE","REMOVE_EMPTY_TAGS","REMOVE_EMPTY_SELECTORS","tag","CLEAN_CONDITIONALLY_TAGS","HEADER_TAGS","HEADER_TAG_LIST","UNLIKELY_CANDIDATES_BLACKLIST","UNLIKELY_CANDIDATES_WHITELIST","DIV_TO_P_BLOCK_TAGS","POSITIVE_SCORE_HINTS","POSITIVE_SCORE_RE","NEGATIVE_SCORE_HINTS","NEGATIVE_SCORE_RE","IS_WP_SELECTOR","PAGE_RE","BLOCK_LEVEL_TAGS","BLOCK_LEVEL_TAGS_RE","candidatesBlacklist","CANDIDATES_BLACKLIST","candidatesWhitelist","CANDIDATES_WHITELIST","stripUnlikelyCandidates","not","classes","id","classAndId","remove","brsToPs","collapsing","element","$element","nextElement","next","tagName","paragraphize","br","sibling","nextSibling","p","appendTo","replaceWith","convertDivs","div","$div","convertable","children","convertSpans","span","$span","parents","convertToParagraphs","convertNodeTo","attrs","getAttrs","attribString","key","html","contents","cleanForHeight","$img","height","width","removeSpacers","cleanImages","$article","img","markToKeep","article","tags","addClass","stripJunkTags","cleanHOnes","$hOnes","removeAllButWhitelist","removeClass","cleanAttributes","parent","removeEmpty","$p","NON_TOP_CANDIDATE_TAGS","NON_TOP_CANDIDATE_TAGS_RE","HNEWS_CONTENT_SELECTORS","PHOTO_HINTS","PHOTO_HINTS_RE","READABILITY_ASSET","DIGIT_RE","BR_TAGS_RE","BR_TAG_RE","UNLIKELY_RE","PARAGRAPH_SCORE_TAGS","CHILD_CONTENT_TAGS","BAD_TAGS","HTML_OR_BODY_RE","getWeight","score","getScore","parseFloat","scoreCommas","idkRe","scoreLength","textLength","chunks","lengthBonus","Math","min","max","scoreParagraph","setScore","addScore","amount","getOrInitScore","e","addToParent","weightNodes","scoreNode","addScoreTo","scorePs","$parent","rawScore","scoreContent","forEach","parentSelector","childSelector","mergeSiblings","$candidate","topScore","siblingScoreThreshold","wrappingDiv","$sibling","siblingScore","append","contentBonus","density","linkDensity","newScore","siblingContent","siblingContentLength","first","findTopCandidate","removeUnlessContent","weight","hasClass","pCount","inputCount","imgCount","nodeIsList","previousNode","prev","scriptCount","cleanTags","cleanHeaders","title","header","$header","prevAll","rewriteTopLevel","absolutize","rootUrl","$content","absoluteUrl","makeLinksAbsolute","totalTextLength","linkText","linkLength","extractFromMeta","metaNames","cachedNames","foundNames","filter","indexOf","name","type","nodes","values","toArray","metaValue","stripTags","isGoodNode","maxChildren","withinComment","extractFromSelectors","selectors","textOnly","cleanText","commentParent","nodeClass","class","undefined","nodeIsSufficient","isWordpress","attribs","attributes","setAttr","val","setAttribute","setAttrs","removeAttribute","IS_LINK","IS_IMAGE","TAGS_TO_REMOVE","convertLazyLoadedImages","isComment","cleanComments","root","clean","Resource","preparedResponse","validResponse","result","failed","generateDoc","encodeDoc","decodedContent","decode","load","metaContentType","properEncoding","merge","extractor","domains","domain","mergeSupportedDomains","supportedDomains","BloggerExtractor","NYMagExtractor","$children","WikipediaExtractor","prepend","TwitterExtractor","tweets","$tweetContainer","NYTimesExtractor","src","TheAtlanticExtractor","NewYorkerExtractor","WiredExtractor","MSNExtractor","YahooExtractor","BuzzfeedExtractor","has","WikiaExtractor","LittleThingsExtractor","PoliticoExtractor","DeadspinExtractor","youtubeId","BroadwayWorldExtractor","ApartmentTherapyExtractor","data","JSON","sources","MediumExtractor","ytRe","thumb","decodeURIComponent","$caption","empty","WwwTmzComExtractor","WwwWashingtonpostComExtractor","WwwHuffingtonpostComExtractor","NewrepublicComExtractor","MoneyCnnComExtractor","WwwThevergeComExtractor","WwwCnnComExtractor","$text","WwwAolComExtractor","WwwYoutubeComExtractor","videoId","WwwTheguardianComExtractor","WwwSbnationComExtractor","WwwBloombergComExtractor","WwwBustleComExtractor","WwwNprOrgExtractor","WwwRecodeNetExtractor","QzComExtractor","WwwDmagazineComExtractor","WwwReutersComExtractor","MashableComExtractor","WwwChicagotribuneComExtractor","WwwVoxComExtractor","imgHtml","NewsNationalgeographicComExtractor","$imgSrc","WwwNationalgeographicComExtractor","$imageParent","$dataAttrContainer","imgPath1","imgPath2","WwwLatimesComExtractor","$figure","PagesixComExtractor","ThefederalistpapersOrgExtractor","WwwCbssportsComExtractor","WwwMsnbcComExtractor","lead_image_url","WwwThepoliticalinsiderComExtractor","WwwMentalflossComExtractor","AbcnewsGoComExtractor","WwwNydailynewsComExtractor","WwwCnbcComExtractor","WwwPopsugarComExtractor","ObserverComExtractor","PeopleComExtractor","WwwUsmagazineComExtractor","WwwRollingstoneComExtractor","twofortysevensportsComExtractor","UproxxComExtractor","WwwEonlineComExtractor","WwwMiamiheraldComExtractor","WwwRefinery29ComExtractor","WwwMacrumorsComExtractor","WwwAndroidcentralComExtractor","WwwSiComExtractor","WwwRawstoryComExtractor","WwwCnetComExtractor","WwwCinemablendComExtractor","WwwTodayComExtractor","WwwHowtogeekComExtractor","WwwAlComExtractor","WwwThepennyhoarderComExtractor","WwwWesternjournalismComExtractor","FusionNetExtractor","WwwAmericanowComExtractor","ScienceflyComExtractor","HellogigglesComExtractor","ThoughtcatalogComExtractor","WwwNjComExtractor","WwwInquisitrComExtractor","WwwNbcnewsComExtractor","FortuneComExtractor","WwwLinkedinComExtractor","ObamawhitehouseArchivesGovExtractor","WwwOpposingviewsComExtractor","WwwProspectmagazineCoUkExtractor","ForwardComExtractor","WwwQdailyComExtractor","GothamistComExtractor","WwwFoolComExtractor","WwwSlateComExtractor","IciRadioCanadaCaExtractor","CustomExtractors","CLEAN_AUTHOR_RE","TEXT_LINK_RE","MS_DATE_STRING","SEC_DATE_STRING","CLEAN_DATE_STRING_RE","TIME_MERIDIAN_SPACE_RE","TIME_MERIDIAN_DOTS_RE","months","allMonths","timestamp1","timestamp2","timestamp3","SPLIT_DATE_STRING","TIME_WITH_OFFSET_RE","TITLE_SPLITTERS_RE","DOMAIN_ENDINGS_RE","cleanAuthor","author","leadImageUrl","validUrl","isWebUri","cleanDek","dek","excerpt","dekText","cleanDateString","dateString","createDate","timezone","format","moment","Date","tz","parseFormat","cleanDatePublished","toISOString","date","isValid","extractCleanNode","cleanConditionally","defaultCleaner","cleanTitle","resolveSplitTitle","h1","extractBreadcrumbTitle","splitTitle","termCounts","titleText","maxTerm","termCount","splitEnds","longestEnd","cleanDomainFromTitle","nakedDomain","startSlug","startSlugRatio","wuzzy","levenshtein","endSlug","endSlugRatio","newTitle","Cleaners","cleanImage","cleanContent","extractBestNode","opts","$topCandidate","GenericContentExtractor","defaultOpts","getContentNode","cleanAndReturnNode","k","STRONG_TITLE_META_TAGS","WEAK_TITLE_META_TAGS","STRONG_TITLE_SELECTORS","WEAK_TITLE_SELECTORS","GenericTitleExtractor","metaCache","AUTHOR_META_TAGS","AUTHOR_MAX_LENGTH","AUTHOR_SELECTORS","bylineRe","BYLINE_SELECTORS_RE","GenericAuthorExtractor","regex","DATE_PUBLISHED_META_TAGS","DATE_PUBLISHED_SELECTORS","abbrevMonthsStr","DATE_PUBLISHED_URL_RES","GenericDatePublishedExtractor","datePublished","GenericDekExtractor","LEAD_IMAGE_URL_META_TAGS","LEAD_IMAGE_URL_SELECTORS","POSITIVE_LEAD_IMAGE_URL_HINTS","POSITIVE_LEAD_IMAGE_URL_HINTS_RE","NEGATIVE_LEAD_IMAGE_URL_HINTS","NEGATIVE_LEAD_IMAGE_URL_HINTS_RE","GIF_RE","JPG_RE","getSig","scoreImageUrl","scoreAttr","scoreByParents","$figParent","$gParent","scoreBySibling","scoreByDimensions","area","round","scoreByPosition","$imgs","GenericLeadImageUrlExtractor","cleanUrl","imageUrl","imgs","imgScores","topUrl","scoreSimilarity","articleUrl","similarity","difflib","SequenceMatcher","ratio","diffPercent","diffModifier","scoreLinkText","linkTextAsNum","scorePageInLink","isWp","EXTRANEOUS_LINK_HINTS","EXTRANEOUS_LINK_HINTS_RE","NEXT_LINK_TEXT_RE","CAP_LINK_TEXT_RE","PREV_LINK_TEXT_RE","scoreExtraneousLinks","makeSig","$link","positiveMatch","negativeMatch","parentData","scorePrevLink","linkData","shouldScore","baseUrl","previousUrls","linkHost","fragment","scoreBaseUrl","baseRegex","scoreNextLinkText","scoreCapLinks","makeBaseRegex","scoreLinks","links","scoredPages","possiblePages","link","possiblePage","GenericNextPageUrlExtractor","scoredLinks","topPage","scoredLink","CANONICAL_META_SELECTORS","parseDomain","GenericUrlExtractor","$canonical","metaUrl","EXCERPT_META_SELECTORS","maxLength","ellipsize","ellipse","GenericExcerptExtractor","shortContent","GenericWordCountExtractor","GenericExtractor","extract","bind","stringDirection","getDirection","loaded","date_published","next_page_url","word_count","direction","url_and_domain","Detectors","detectByHtml","s","getExtractor","baseDomain","Extractors","cleanBySelectors","transformElements","transforms","$matches","findMatchingSelector","extractHtml","Array","isArray","select","extractionOpts","matchingSelector","$wrapper","wrap","extractResult","fallback","RootExtractor","contentOnly","extractedTitle","Extractor","pages","create","extractorOpts","nextPageResult","collectAllPages","Mercury","fetchAllPages","window","location"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":null,"sources":["../src/utils/text/normalize-spaces.js","../src/utils/text/extract-from-url.js","../src/utils/text/constants.js","../src/utils/text/page-num-from-url.js","../src/utils/text/remove-anchor.js","../src/utils/text/article-base-url.js","../src/utils/text/has-sentence-end.js","../src/utils/text/excerpt-content.js","../src/utils/text/get-encoding.js","../src/utils/range.js","../src/utils/validate-url.js","../src/utils/errors.js","../src/resource/utils/constants.js","../src/resource/utils/fetch-resource.js","../src/resource/utils/dom/normalize-meta-tags.js","../src/utils/dom/constants.js","../src/utils/dom/strip-unlikely-candidates.js","../src/utils/dom/brs-to-ps.js","../src/utils/dom/paragraphize.js","../src/utils/dom/convert-to-paragraphs.js","../src/utils/dom/convert-node-to.js","../src/utils/dom/clean-images.js","../src/utils/dom/mark-to-keep.js","../src/utils/dom/strip-junk-tags.js","../src/utils/dom/clean-h-ones.js","../src/utils/dom/clean-attributes.js","../src/utils/dom/remove-empty.js","../src/extractors/generic/content/scoring/constants.js","../src/extractors/generic/content/scoring/get-weight.js","../src/extractors/generic/content/scoring/get-score.js","../src/extractors/generic/content/scoring/score-commas.js","../src/extractors/generic/content/scoring/score-length.js","../src/extractors/generic/content/scoring/score-paragraph.js","../src/extractors/generic/content/scoring/set-score.js","../src/extractors/generic/content/scoring/add-score.js","../src/extractors/generic/content/scoring/add-to-parent.js","../src/extractors/generic/content/scoring/get-or-init-score.js","../src/extractors/generic/content/scoring/score-node.js","../src/extractors/generic/content/scoring/score-content.js","../src/extractors/generic/content/scoring/merge-siblings.js","../src/extractors/generic/content/scoring/find-top-candidate.js","../src/extractors/generic/content/scoring/index.js","../src/utils/dom/clean-tags.js","../src/utils/dom/clean-headers.js","../src/utils/dom/rewrite-top-level.js","../src/utils/dom/make-links-absolute.js","../src/utils/dom/link-density.js","../src/utils/dom/extract-from-meta.js","../src/utils/dom/extract-from-selectors.js","../src/utils/dom/strip-tags.js","../src/utils/dom/within-comment.js","../src/utils/dom/node-is-sufficient.js","../src/utils/dom/is-wordpress.js","../src/utils/dom/get-attrs.js","../src/utils/dom/set-attr.js","../src/utils/dom/set-attrs.js","../src/utils/dom/index.js","../src/resource/utils/dom/constants.js","../src/resource/utils/dom/convert-lazy-loaded-images.js","../src/resource/utils/dom/clean.js","../src/resource/index.js","../src/utils/merge-supported-domains.js","../src/extractors/custom/blogspot.com/index.js","../src/extractors/custom/nymag.com/index.js","../src/extractors/custom/wikipedia.org/index.js","../src/extractors/custom/twitter.com/index.js","../src/extractors/custom/www.nytimes.com/index.js","../src/extractors/custom/www.theatlantic.com/index.js","../src/extractors/custom/www.newyorker.com/index.js","../src/extractors/custom/www.wired.com/index.js","../src/extractors/custom/www.msn.com/index.js","../src/extractors/custom/www.yahoo.com/index.js","../src/extractors/custom/www.buzzfeed.com/index.js","../src/extractors/custom/fandom.wikia.com/index.js","../src/extractors/custom/www.littlethings.com/index.js","../src/extractors/custom/www.politico.com/index.js","../src/extractors/custom/deadspin.com/index.js","../src/extractors/custom/www.broadwayworld.com/index.js","../src/extractors/custom/www.apartmenttherapy.com/index.js","../src/extractors/custom/medium.com/index.js","../src/extractors/custom/www.tmz.com/index.js","../src/extractors/custom/www.washingtonpost.com/index.js","../src/extractors/custom/www.huffingtonpost.com/index.js","../src/extractors/custom/newrepublic.com/index.js","../src/extractors/custom/money.cnn.com/index.js","../src/extractors/custom/www.theverge.com/index.js","../src/extractors/custom/www.cnn.com/index.js","../src/extractors/custom/www.aol.com/index.js","../src/extractors/custom/www.youtube.com/index.js","../src/extractors/custom/www.theguardian.com/index.js","../src/extractors/custom/www.sbnation.com/index.js","../src/extractors/custom/www.bloomberg.com/index.js","../src/extractors/custom/www.bustle.com/index.js","../src/extractors/custom/www.npr.org/index.js","../src/extractors/custom/www.recode.net/index.js","../src/extractors/custom/qz.com/index.js","../src/extractors/custom/www.dmagazine.com/index.js","../src/extractors/custom/www.reuters.com/index.js","../src/extractors/custom/mashable.com/index.js","../src/extractors/custom/www.chicagotribune.com/index.js","../src/extractors/custom/www.vox.com/index.js","../src/extractors/custom/news.nationalgeographic.com/index.js","../src/extractors/custom/www.nationalgeographic.com/index.js","../src/extractors/custom/www.latimes.com/index.js","../src/extractors/custom/pagesix.com/index.js","../src/extractors/custom/thefederalistpapers.org/index.js","../src/extractors/custom/www.cbssports.com/index.js","../src/extractors/custom/www.msnbc.com/index.js","../src/extractors/custom/www.thepoliticalinsider.com/index.js","../src/extractors/custom/www.mentalfloss.com/index.js","../src/extractors/custom/abcnews.go.com/index.js","../src/extractors/custom/www.nydailynews.com/index.js","../src/extractors/custom/www.cnbc.com/index.js","../src/extractors/custom/www.popsugar.com/index.js","../src/extractors/custom/observer.com/index.js","../src/extractors/custom/people.com/index.js","../src/extractors/custom/www.usmagazine.com/index.js","../src/extractors/custom/www.rollingstone.com/index.js","../src/extractors/custom/247sports.com/index.js","../src/extractors/custom/uproxx.com/index.js","../src/extractors/custom/www.eonline.com/index.js","../src/extractors/custom/www.miamiherald.com/index.js","../src/extractors/custom/www.refinery29.com/index.js","../src/extractors/custom/www.macrumors.com/index.js","../src/extractors/custom/www.androidcentral.com/index.js","../src/extractors/custom/www.si.com/index.js","../src/extractors/custom/www.rawstory.com/index.js","../src/extractors/custom/www.cnet.com/index.js","../src/extractors/custom/www.cinemablend.com/index.js","../src/extractors/custom/www.today.com/index.js","../src/extractors/custom/www.howtogeek.com/index.js","../src/extractors/custom/www.al.com/index.js","../src/extractors/custom/www.thepennyhoarder.com/index.js","../src/extractors/custom/www.westernjournalism.com/index.js","../src/extractors/custom/fusion.net/index.js","../src/extractors/custom/www.americanow.com/index.js","../src/extractors/custom/sciencefly.com/index.js","../src/extractors/custom/hellogiggles.com/index.js","../src/extractors/custom/thoughtcatalog.com/index.js","../src/extractors/custom/www.nj.com/index.js","../src/extractors/custom/www.inquisitr.com/index.js","../src/extractors/custom/www.nbcnews.com/index.js","../src/extractors/custom/fortune.com/index.js","../src/extractors/custom/www.linkedin.com/index.js","../src/extractors/custom/obamawhitehouse.archives.gov/index.js","../src/extractors/custom/www.opposingviews.com/index.js","../src/extractors/custom/www.prospectmagazine.co.uk/index.js","../src/extractors/custom/forward.com/index.js","../src/extractors/custom/www.qdaily.com/index.js","../src/extractors/custom/gothamist.com/index.js","../src/extractors/custom/www.fool.com/index.js","../src/extractors/custom/www.slate.com/index.js","../src/extractors/custom/ici.radio-canada.ca/index.js","../src/extractors/all.js","../src/cleaners/constants.js","../src/cleaners/author.js","../src/cleaners/lead-image-url.js","../src/cleaners/dek.js","../src/cleaners/date-published.js","../src/cleaners/content.js","../src/cleaners/title.js","../src/cleaners/resolve-split-title.js","../src/cleaners/index.js","../src/extractors/generic/content/extract-best-node.js","../src/extractors/generic/content/extractor.js","../src/extractors/generic/title/constants.js","../src/extractors/generic/title/extractor.js","../src/extractors/generic/author/constants.js","../src/extractors/generic/author/extractor.js","../src/extractors/generic/date-published/constants.js","../src/extractors/generic/date-published/extractor.js","../src/extractors/generic/dek/extractor.js","../src/extractors/generic/lead-image-url/constants.js","../src/extractors/generic/lead-image-url/score-image.js","../src/extractors/generic/lead-image-url/extractor.js","../src/extractors/generic/next-page-url/scoring/utils/score-similarity.js","../src/extractors/generic/next-page-url/scoring/utils/score-link-text.js","../src/extractors/generic/next-page-url/scoring/utils/score-page-in-link.js","../src/extractors/generic/next-page-url/scoring/constants.js","../src/extractors/generic/next-page-url/scoring/utils/score-extraneous-links.js","../src/extractors/generic/next-page-url/scoring/utils/score-by-parents.js","../src/extractors/generic/next-page-url/scoring/utils/score-prev-link.js","../src/extractors/generic/next-page-url/scoring/utils/should-score.js","../src/extractors/generic/next-page-url/scoring/utils/score-base-url.js","../src/extractors/generic/next-page-url/scoring/utils/score-next-link-text.js","../src/extractors/generic/next-page-url/scoring/utils/score-cap-links.js","../src/extractors/generic/next-page-url/scoring/score-links.js","../src/extractors/generic/next-page-url/extractor.js","../src/extractors/generic/url/constants.js","../src/extractors/generic/url/extractor.js","../src/extractors/generic/excerpt/constants.js","../src/extractors/generic/excerpt/extractor.js","../src/extractors/generic/word-count/extractor.js","../src/extractors/generic/index.js","../src/extractors/detect-by-html.js","../src/extractors/get-extractor.js","../src/extractors/root-extractor.js","../src/extractors/collect-all-pages.js","../src/mercury.js"],"sourcesContent":["const NORMALIZE_RE = /\\s{2,}/g;\n\nexport default function normalizeSpaces(text) {\n return text.replace(NORMALIZE_RE, ' ').trim();\n}\n","// Given a node type to search for, and a list of regular expressions,\n// look to see if this extraction can be found in the URL. Expects\n// that each expression in r_list will return group(1) as the proper\n// string to be cleaned.\n// Only used for date_published currently.\nexport default function extractFromUrl(url, regexList) {\n const matchRe = regexList.find(re => re.test(url));\n if (matchRe) {\n return matchRe.exec(url)[1];\n }\n\n return null;\n}\n","// An expression that looks to try to find the page digit within a URL, if\n// it exists.\n// Matches:\n// page=1\n// pg=1\n// p=1\n// paging=12\n// pag=7\n// pagination/1\n// paging/88\n// pa/83\n// p/11\n//\n// Does not match:\n// pg=102\n// page:2\nexport const PAGE_IN_HREF_RE = new RegExp('(page|paging|(p(a|g|ag)?(e|enum|ewanted|ing|ination)))?(=|/)([0-9]{1,3})', 'i');\n\nexport const HAS_ALPHA_RE = /[a-z]/i;\n\nexport const IS_ALPHA_RE = /^[a-z]+$/i;\nexport const IS_DIGIT_RE = /^[0-9]+$/i;\n\nexport const ENCODING_RE = /charset=([\\w-]+)\\b/;\nexport const DEFAULT_ENCODING = 'utf-8';\n","import { PAGE_IN_HREF_RE } from './constants';\n\nexport default function pageNumFromUrl(url) {\n const matches = url.match(PAGE_IN_HREF_RE);\n if (!matches) return null;\n\n const pageNum = parseInt(matches[6], 10);\n\n // Return pageNum < 100, otherwise\n // return null\n return pageNum < 100 ? pageNum : null;\n}\n","export default function removeAnchor(url) {\n return url.split('#')[0].replace(/\\/$/, '');\n}\n","import URL from 'url';\n\nimport {\n HAS_ALPHA_RE,\n IS_ALPHA_RE,\n IS_DIGIT_RE,\n PAGE_IN_HREF_RE,\n} from './constants';\n\nfunction isGoodSegment(segment, index, firstSegmentHasLetters) {\n let goodSegment = true;\n\n // If this is purely a number, and it's the first or second\n // url_segment, it's probably a page number. Remove it.\n if (index < 2 && IS_DIGIT_RE.test(segment) && segment.length < 3) {\n goodSegment = true;\n }\n\n // If this is the first url_segment and it's just \"index\",\n // remove it\n if (index === 0 && segment.toLowerCase() === 'index') {\n goodSegment = false;\n }\n\n // If our first or second url_segment is smaller than 3 characters,\n // and the first url_segment had no alphas, remove it.\n if (index < 2 && segment.length < 3 && !firstSegmentHasLetters) {\n goodSegment = false;\n }\n\n return goodSegment;\n}\n\n// Take a URL, and return the article base of said URL. That is, no\n// pagination data exists in it. Useful for comparing to other links\n// that might have pagination data within them.\nexport default function articleBaseUrl(url, parsed) {\n const parsedUrl = parsed || URL.parse(url);\n const { protocol, host, path } = parsedUrl;\n\n let firstSegmentHasLetters = false;\n const cleanedSegments = path.split('/')\n .reverse()\n .reduce((acc, rawSegment, index) => {\n let segment = rawSegment;\n\n // Split off and save anything that looks like a file type.\n if (segment.includes('.')) {\n const [possibleSegment, fileExt] = segment.split('.');\n if (IS_ALPHA_RE.test(fileExt)) {\n segment = possibleSegment;\n }\n }\n\n // If our first or second segment has anything looking like a page\n // number, remove it.\n if (PAGE_IN_HREF_RE.test(segment) && index < 2) {\n segment = segment.replace(PAGE_IN_HREF_RE, '');\n }\n\n // If we're on the first segment, check to see if we have any\n // characters in it. The first segment is actually the last bit of\n // the URL, and this will be helpful to determine if we're on a URL\n // segment that looks like \"/2/\" for example.\n if (index === 0) {\n firstSegmentHasLetters = HAS_ALPHA_RE.test(segment);\n }\n\n // If it's not marked for deletion, push it to cleaned_segments.\n if (isGoodSegment(segment, index, firstSegmentHasLetters)) {\n acc.push(segment);\n }\n\n return acc;\n }, []);\n\n return `${protocol}//${host}${cleanedSegments.reverse().join('/')}`;\n}\n","// Given a string, return True if it appears to have an ending sentence\n// within it, false otherwise.\nconst SENTENCE_END_RE = new RegExp('.( |$)');\nexport default function hasSentenceEnd(text) {\n return SENTENCE_END_RE.test(text);\n}\n","export default function excerptContent(content, words = 10) {\n return content.trim()\n .split(/\\s+/)\n .slice(0, words)\n .join(' ');\n}\n","import iconv from 'iconv-lite';\nimport { DEFAULT_ENCODING, ENCODING_RE } from './constants';\n\n// check a string for encoding; this is\n// used in our fetchResource function to\n// ensure correctly encoded responses\nexport default function getEncoding(str) {\n let encoding = DEFAULT_ENCODING;\n if (ENCODING_RE.test(str)) {\n const testEncode = ENCODING_RE.exec(str)[1];\n if (iconv.encodingExists(testEncode)) {\n encoding = testEncode;\n }\n }\n return encoding;\n}\n","export default function* range(start = 1, end = 1) {\n while (start <= end) {\n yield start += 1;\n }\n}\n","// extremely simple url validation as a first step\nexport default function validateUrl({ hostname }) {\n // If this isn't a valid url, return an error message\n return !!hostname;\n}\n","const Errors = {\n badUrl: {\n error: true,\n messages: 'The url parameter passed does not look like a valid URL. Please check your data and try again.',\n },\n};\n\nexport default Errors;\n","import cheerio from 'cheerio';\n\n// Browser does not like us setting user agent\nexport const REQUEST_HEADERS = cheerio.browser ? {} : {\n 'User-Agent': 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36',\n};\n\n// The number of milliseconds to attempt to fetch a resource before timing out.\nexport const FETCH_TIMEOUT = 10000;\n\n// Content types that we do not extract content from\nconst BAD_CONTENT_TYPES = [\n 'audio/mpeg',\n 'image/gif',\n 'image/jpeg',\n 'image/jpg',\n];\n\nexport const BAD_CONTENT_TYPES_RE = new RegExp(`^(${BAD_CONTENT_TYPES.join('|')})$`, 'i');\n\n// Use this setting as the maximum size an article can be\n// for us to attempt parsing. Defaults to 5 MB.\nexport const MAX_CONTENT_LENGTH = 5242880;\n\n// Turn the global proxy on or off\n// Proxying is not currently enabled in Python source\n// so not implementing logic in port.\nexport const PROXY_DOMAINS = false;\nexport const REQUESTS_PROXIES = {\n http: 'http://38.98.105.139:33333',\n https: 'http://38.98.105.139:33333',\n};\n\nexport const DOMAINS_TO_PROXY = [\n 'nih.gov',\n 'gutenberg.org',\n];\n","import URL from 'url';\nimport request from 'request';\nimport { Errors } from 'utils';\n\nimport {\n REQUEST_HEADERS,\n FETCH_TIMEOUT,\n BAD_CONTENT_TYPES_RE,\n MAX_CONTENT_LENGTH,\n} from './constants';\n\nfunction get(options) {\n return new Promise((resolve, reject) => {\n request(options, (err, response, body) => {\n if (err) {\n reject(err);\n } else {\n resolve({ body, response });\n }\n });\n });\n}\n\n// Evaluate a response to ensure it's something we should be keeping.\n// This does not validate in the sense of a response being 200 level or\n// not. Validation here means that we haven't found reason to bail from\n// further processing of this url.\n\nexport function validateResponse(response, parseNon2xx = false) {\n // Check if we got a valid status code\n // This isn't great, but I'm requiring a statusMessage to be set\n // before short circuiting b/c nock doesn't set it in tests\n // statusMessage only not set in nock response, in which case\n // I check statusCode, which is currently only 200 for OK responses\n // in tests\n if (\n (response.statusMessage && response.statusMessage !== 'OK') ||\n response.statusCode !== 200\n ) {\n if (!response.statusCode) {\n throw new Error(\n `Unable to fetch content. Original exception was ${response.error}`\n );\n } else if (!parseNon2xx) {\n throw new Error(\n `Resource returned a response status code of ${response.statusCode} and resource was instructed to reject non-2xx level status codes.`\n );\n }\n }\n\n const {\n 'content-type': contentType,\n 'content-length': contentLength,\n } = response.headers;\n\n // Check that the content is not in BAD_CONTENT_TYPES\n if (BAD_CONTENT_TYPES_RE.test(contentType)) {\n throw new Error(\n `Content-type for this resource was ${contentType} and is not allowed.`\n );\n }\n\n // Check that the content length is below maximum\n if (contentLength > MAX_CONTENT_LENGTH) {\n throw new Error(\n `Content for this resource was too large. Maximum content length is ${MAX_CONTENT_LENGTH}.`\n );\n }\n\n return true;\n}\n\n// Grabs the last two pieces of the URL and joins them back together\n// This is to get the 'livejournal.com' from 'erotictrains.livejournal.com'\nexport function baseDomain({ host }) {\n return host.split('.').slice(-2).join('.');\n}\n\n// Set our response attribute to the result of fetching our URL.\n// TODO: This should gracefully handle timeouts and raise the\n// proper exceptions on the many failure cases of HTTP.\n// TODO: Ensure we are not fetching something enormous. Always return\n// unicode content for HTML, with charset conversion.\n\nexport default async function fetchResource(url, parsedUrl) {\n parsedUrl = parsedUrl || URL.parse(encodeURI(url));\n\n const options = {\n url: parsedUrl.href,\n headers: { ...REQUEST_HEADERS },\n timeout: FETCH_TIMEOUT,\n // Accept cookies\n jar: true,\n // Set to null so the response returns as binary and body as buffer\n // https://github.com/request/request#requestoptions-callback\n encoding: null,\n // Accept and decode gzip\n gzip: true,\n // Follow any redirect\n followAllRedirects: true,\n };\n\n const { response, body } = await get(options);\n\n try {\n validateResponse(response);\n return {\n body,\n response,\n };\n } catch (e) {\n return Errors.badUrl;\n }\n}\n","function convertMetaProp($, from, to) {\n $(`meta[${from}]`).each((_, node) => {\n const $node = $(node);\n\n const value = $node.attr(from);\n $node.attr(to, value);\n $node.removeAttr(from);\n });\n\n return $;\n}\n\n// For ease of use in extracting from meta tags,\n// replace the \"content\" attribute on meta tags with the\n// \"value\" attribute.\n//\n// In addition, normalize 'property' attributes to 'name' for ease of\n// querying later. See, e.g., og or twitter meta tags.\n\nexport default function normalizeMetaTags($) {\n $ = convertMetaProp($, 'content', 'value');\n $ = convertMetaProp($, 'property', 'name');\n return $;\n}\n","// Spacer images to be removed\nexport const SPACER_RE = new RegExp('transparent|spacer|blank', 'i');\n\n// The class we will use to mark elements we want to keep\n// but would normally remove\nexport const KEEP_CLASS = 'mercury-parser-keep';\n\nexport const KEEP_SELECTORS = [\n 'iframe[src^=\"https://www.youtube.com\"]',\n 'iframe[src^=\"https://www.youtube-nocookie.com\"]',\n 'iframe[src^=\"http://www.youtube.com\"]',\n 'iframe[src^=\"https://player.vimeo\"]',\n 'iframe[src^=\"http://player.vimeo\"]',\n];\n\n// A list of tags to strip from the output if we encounter them.\nexport const STRIP_OUTPUT_TAGS = [\n 'title',\n 'script',\n 'noscript',\n 'link',\n 'style',\n 'hr',\n 'embed',\n 'iframe',\n 'object',\n];\n\n// cleanAttributes\nexport const REMOVE_ATTRS = ['style', 'align'];\nexport const REMOVE_ATTR_SELECTORS = REMOVE_ATTRS.map(selector => `[${selector}]`);\nexport const REMOVE_ATTR_LIST = REMOVE_ATTRS.join(',');\nexport const WHITELIST_ATTRS = [\n 'src',\n 'srcset',\n 'href',\n 'class',\n 'id',\n 'alt',\n 'xlink:href',\n 'width',\n 'height',\n];\n\nexport const WHITELIST_ATTRS_RE = new RegExp(`^(${WHITELIST_ATTRS.join('|')})$`, 'i');\n\n// removeEmpty\nexport const REMOVE_EMPTY_TAGS = ['p'];\nexport const REMOVE_EMPTY_SELECTORS = REMOVE_EMPTY_TAGS.map(tag => `${tag}:empty`).join(',');\n\n// cleanTags\nexport const CLEAN_CONDITIONALLY_TAGS = ['ul', 'ol', 'table', 'div', 'button', 'form'].join(',');\n\n// cleanHeaders\nconst HEADER_TAGS = ['h2', 'h3', 'h4', 'h5', 'h6'];\nexport const HEADER_TAG_LIST = HEADER_TAGS.join(',');\n\n// // CONTENT FETCHING CONSTANTS ////\n\n// A list of strings that can be considered unlikely candidates when\n// extracting content from a resource. These strings are joined together\n// and then tested for existence using re:test, so may contain simple,\n// non-pipe style regular expression queries if necessary.\nexport const UNLIKELY_CANDIDATES_BLACKLIST = [\n 'ad-break',\n 'adbox',\n 'advert',\n 'addthis',\n 'agegate',\n 'aux',\n 'blogger-labels',\n 'combx',\n 'comment',\n 'conversation',\n 'disqus',\n 'entry-unrelated',\n 'extra',\n 'foot',\n // 'form', // This is too generic, has too many false positives\n 'header',\n 'hidden',\n 'loader',\n 'login', // Note: This can hit 'blogindex'.\n 'menu',\n 'meta',\n 'nav',\n 'outbrain',\n 'pager',\n 'pagination',\n 'predicta', // readwriteweb inline ad box\n 'presence_control_external', // lifehacker.com container full of false positives\n 'popup',\n 'printfriendly',\n 'related',\n 'remove',\n 'remark',\n 'rss',\n 'share',\n 'shoutbox',\n 'sidebar',\n 'sociable',\n 'sponsor',\n 'taboola',\n 'tools',\n];\n\n// A list of strings that can be considered LIKELY candidates when\n// extracting content from a resource. Essentially, the inverse of the\n// blacklist above - if something matches both blacklist and whitelist,\n// it is kept. This is useful, for example, if something has a className\n// of \"rss-content entry-content\". It matched 'rss', so it would normally\n// be removed, however, it's also the entry content, so it should be left\n// alone.\n//\n// These strings are joined together and then tested for existence using\n// re:test, so may contain simple, non-pipe style regular expression queries\n// if necessary.\nexport const UNLIKELY_CANDIDATES_WHITELIST = [\n 'and',\n 'article',\n 'body',\n 'blogindex',\n 'column',\n 'content',\n 'entry-content-asset',\n 'format', // misuse of form\n 'hfeed',\n 'hentry',\n 'hatom',\n 'main',\n 'page',\n 'posts',\n 'shadow',\n];\n\n// A list of tags which, if found inside, should cause a <div /> to NOT\n// be turned into a paragraph tag. Shallow div tags without these elements\n// should be turned into <p /> tags.\nexport const DIV_TO_P_BLOCK_TAGS = [\n 'a',\n 'blockquote',\n 'dl',\n 'div',\n 'img',\n 'p',\n 'pre',\n 'table',\n].join(',');\n\n// A list of tags that should be ignored when trying to find the top candidate\n// for a document.\nexport const NON_TOP_CANDIDATE_TAGS = [\n 'br',\n 'b',\n 'i',\n 'label',\n 'hr',\n 'area',\n 'base',\n 'basefont',\n 'input',\n 'img',\n 'link',\n 'meta',\n];\n\nexport const NON_TOP_CANDIDATE_TAGS_RE =\n new RegExp(`^(${NON_TOP_CANDIDATE_TAGS.join('|')})$`, 'i');\n\n// A list of selectors that specify, very clearly, either hNews or other\n// very content-specific style content, like Blogger templates.\n// More examples here: http://microformats.org/wiki/blog-post-formats\nexport const HNEWS_CONTENT_SELECTORS = [\n ['.hentry', '.entry-content'],\n ['entry', '.entry-content'],\n ['.entry', '.entry_content'],\n ['.post', '.postbody'],\n ['.post', '.post_body'],\n ['.post', '.post-body'],\n];\n\nexport const PHOTO_HINTS = [\n 'figure',\n 'photo',\n 'image',\n 'caption',\n];\nexport const PHOTO_HINTS_RE = new RegExp(PHOTO_HINTS.join('|'), 'i');\n\n// A list of strings that denote a positive scoring for this content as being\n// an article container. Checked against className and id.\n//\n// TODO: Perhaps have these scale based on their odds of being quality?\nexport const POSITIVE_SCORE_HINTS = [\n 'article',\n 'articlecontent',\n 'instapaper_body',\n 'blog',\n 'body',\n 'content',\n 'entry-content-asset',\n 'entry',\n 'hentry',\n 'main',\n 'Normal',\n 'page',\n 'pagination',\n 'permalink',\n 'post',\n 'story',\n 'text',\n '[-_]copy', // usatoday\n '\\\\Bcopy',\n];\n\n// The above list, joined into a matching regular expression\nexport const POSITIVE_SCORE_RE = new RegExp(POSITIVE_SCORE_HINTS.join('|'), 'i');\n\n// Readability publisher-specific guidelines\nexport const READABILITY_ASSET = new RegExp('entry-content-asset', 'i');\n\n// A list of strings that denote a negative scoring for this content as being\n// an article container. Checked against className and id.\n//\n// TODO: Perhaps have these scale based on their odds of being quality?\nexport const NEGATIVE_SCORE_HINTS = [\n 'adbox',\n 'advert',\n 'author',\n 'bio',\n 'bookmark',\n 'bottom',\n 'byline',\n 'clear',\n 'com-',\n 'combx',\n 'comment',\n 'comment\\\\B',\n 'contact',\n 'copy',\n 'credit',\n 'crumb',\n 'date',\n 'deck',\n 'excerpt',\n 'featured', // tnr.com has a featured_content which throws us off\n 'foot',\n 'footer',\n 'footnote',\n 'graf',\n 'head',\n 'info',\n 'infotext', // newscientist.com copyright\n 'instapaper_ignore',\n 'jump',\n 'linebreak',\n 'link',\n 'masthead',\n 'media',\n 'meta',\n 'modal',\n 'outbrain', // slate.com junk\n 'promo',\n 'pr_', // autoblog - press release\n 'related',\n 'respond',\n 'roundcontent', // lifehacker restricted content warning\n 'scroll',\n 'secondary',\n 'share',\n 'shopping',\n 'shoutbox',\n 'side',\n 'sidebar',\n 'sponsor',\n 'stamp',\n 'sub',\n 'summary',\n 'tags',\n 'tools',\n 'widget',\n];\n// The above list, joined into a matching regular expression\nexport const NEGATIVE_SCORE_RE = new RegExp(NEGATIVE_SCORE_HINTS.join('|'), 'i');\n\n// XPath to try to determine if a page is wordpress. Not always successful.\nexport const IS_WP_SELECTOR = 'meta[name=generator][value^=WordPress]';\n\n// Match a digit. Pretty clear.\nexport const DIGIT_RE = new RegExp('[0-9]');\n\n// A list of words that, if found in link text or URLs, likely mean that\n// this link is not a next page link.\nexport const EXTRANEOUS_LINK_HINTS = [\n 'print',\n 'archive',\n 'comment',\n 'discuss',\n 'e-mail',\n 'email',\n 'share',\n 'reply',\n 'all',\n 'login',\n 'sign',\n 'single',\n 'adx',\n 'entry-unrelated',\n];\nexport const EXTRANEOUS_LINK_HINTS_RE = new RegExp(EXTRANEOUS_LINK_HINTS.join('|'), 'i');\n\n// Match any phrase that looks like it could be page, or paging, or pagination\nexport const PAGE_RE = new RegExp('pag(e|ing|inat)', 'i');\n\n// Match any link text/classname/id that looks like it could mean the next\n// page. Things like: next, continue, >, >>, » but not >|, »| as those can\n// mean last page.\n// export const NEXT_LINK_TEXT_RE = new RegExp('(next|weiter|continue|>([^\\|]|$)|»([^\\|]|$))', 'i');\nexport const NEXT_LINK_TEXT_RE = /(next|weiter|continue|>([^|]|$)|»([^|]|$))/i;\n\n// Match any link text/classname/id that looks like it is an end link: things\n// like \"first\", \"last\", \"end\", etc.\nexport const CAP_LINK_TEXT_RE = new RegExp('(first|last|end)', 'i');\n\n// Match any link text/classname/id that looks like it means the previous\n// page.\nexport const PREV_LINK_TEXT_RE = new RegExp('(prev|earl|old|new|<|«)', 'i');\n\n// Match 2 or more consecutive <br> tags\nexport const BR_TAGS_RE = new RegExp('(<br[^>]*>[ \\n\\r\\t]*){2,}', 'i');\n\n// Match 1 BR tag.\nexport const BR_TAG_RE = new RegExp('<br[^>]*>', 'i');\n\n// A list of all of the block level tags known in HTML5 and below. Taken from\n// http://bit.ly/qneNIT\nexport const BLOCK_LEVEL_TAGS = [\n 'article',\n 'aside',\n 'blockquote',\n 'body',\n 'br',\n 'button',\n 'canvas',\n 'caption',\n 'col',\n 'colgroup',\n 'dd',\n 'div',\n 'dl',\n 'dt',\n 'embed',\n 'fieldset',\n 'figcaption',\n 'figure',\n 'footer',\n 'form',\n 'h1',\n 'h2',\n 'h3',\n 'h4',\n 'h5',\n 'h6',\n 'header',\n 'hgroup',\n 'hr',\n 'li',\n 'map',\n 'object',\n 'ol',\n 'output',\n 'p',\n 'pre',\n 'progress',\n 'section',\n 'table',\n 'tbody',\n 'textarea',\n 'tfoot',\n 'th',\n 'thead',\n 'tr',\n 'ul',\n 'video',\n];\nexport const BLOCK_LEVEL_TAGS_RE = new RegExp(`^(${BLOCK_LEVEL_TAGS.join('|')})$`, 'i');\n\n// The removal is implemented as a blacklist and whitelist, this test finds\n// blacklisted elements that aren't whitelisted. We do this all in one\n// expression-both because it's only one pass, and because this skips the\n// serialization for whitelisted nodes.\nconst candidatesBlacklist = UNLIKELY_CANDIDATES_BLACKLIST.join('|');\nexport const CANDIDATES_BLACKLIST = new RegExp(candidatesBlacklist, 'i');\n\nconst candidatesWhitelist = UNLIKELY_CANDIDATES_WHITELIST.join('|');\nexport const CANDIDATES_WHITELIST = new RegExp(candidatesWhitelist, 'i');\n\nexport const UNLIKELY_RE = new RegExp(`!(${candidatesWhitelist})|(${candidatesBlacklist})`, 'i');\n\nexport const PARAGRAPH_SCORE_TAGS = new RegExp('^(p|li|span|pre)$', 'i');\nexport const CHILD_CONTENT_TAGS = new RegExp('^(td|blockquote|ol|ul|dl)$', 'i');\nexport const BAD_TAGS = new RegExp('^(address|form)$', 'i');\n\nexport const HTML_OR_BODY_RE = new RegExp('^(html|body)$', 'i');\n","import {\n CANDIDATES_WHITELIST,\n CANDIDATES_BLACKLIST,\n} from './constants';\n\nexport default function stripUnlikelyCandidates($) {\n // Loop through the provided document and remove any non-link nodes\n // that are unlikely candidates for article content.\n //\n // Links are ignored because there are very often links to content\n // that are identified as non-body-content, but may be inside\n // article-like content.\n //\n // :param $: a cheerio object to strip nodes from\n // :return $: the cleaned cheerio object\n $('*').not('a').each((index, node) => {\n const $node = $(node);\n const classes = $node.attr('class');\n const id = $node.attr('id');\n if (!id && !classes) return;\n\n const classAndId = `${classes || ''} ${id || ''}`;\n if (CANDIDATES_WHITELIST.test(classAndId)) {\n return;\n } else if (CANDIDATES_BLACKLIST.test(classAndId)) {\n $node.remove();\n }\n });\n\n return $;\n}\n","import { paragraphize } from './index';\n\n// ## NOTES:\n// Another good candidate for refactoring/optimizing.\n// Very imperative code, I don't love it. - AP\n\n// Given cheerio object, convert consecutive <br /> tags into\n// <p /> tags instead.\n//\n// :param $: A cheerio object\n\nexport default function brsToPs($) {\n let collapsing = false;\n $('br').each((index, element) => {\n const $element = $(element);\n const nextElement = $element.next().get(0);\n\n if (nextElement && nextElement.tagName.toLowerCase() === 'br') {\n collapsing = true;\n $element.remove();\n } else if (collapsing) {\n collapsing = false;\n // $(element).replaceWith('<p />')\n paragraphize(element, $, true);\n }\n });\n\n return $;\n}\n","import { BLOCK_LEVEL_TAGS_RE } from './constants';\n\n// Given a node, turn it into a P if it is not already a P, and\n// make sure it conforms to the constraints of a P tag (I.E. does\n// not contain any other block tags.)\n//\n// If the node is a <br />, it treats the following inline siblings\n// as if they were its children.\n//\n// :param node: The node to paragraphize; this is a raw node\n// :param $: The cheerio object to handle dom manipulation\n// :param br: Whether or not the passed node is a br\n\nexport default function paragraphize(node, $, br = false) {\n const $node = $(node);\n\n if (br) {\n let sibling = node.nextSibling;\n const p = $('<p></p>');\n\n // while the next node is text or not a block level element\n // append it to a new p node\n while (sibling && !(sibling.tagName && BLOCK_LEVEL_TAGS_RE.test(sibling.tagName))) {\n const nextSibling = sibling.nextSibling;\n $(sibling).appendTo(p);\n sibling = nextSibling;\n }\n\n $node.replaceWith(p);\n $node.remove();\n return $;\n }\n\n return $;\n}\n","import { brsToPs, convertNodeTo } from 'utils/dom';\n\nimport { DIV_TO_P_BLOCK_TAGS } from './constants';\n\nfunction convertDivs($) {\n $('div').each((index, div) => {\n const $div = $(div);\n const convertable = $div.children(DIV_TO_P_BLOCK_TAGS).length === 0;\n\n if (convertable) {\n convertNodeTo($div, $, 'p');\n }\n });\n\n return $;\n}\n\nfunction convertSpans($) {\n $('span').each((index, span) => {\n const $span = $(span);\n const convertable = $span.parents('p, div').length === 0;\n if (convertable) {\n convertNodeTo($span, $, 'p');\n }\n });\n\n return $;\n}\n\n// Loop through the provided doc, and convert any p-like elements to\n// actual paragraph tags.\n//\n// Things fitting this criteria:\n// * Multiple consecutive <br /> tags.\n// * <div /> tags without block level elements inside of them\n// * <span /> tags who are not children of <p /> or <div /> tags.\n//\n// :param $: A cheerio object to search\n// :return cheerio object with new p elements\n// (By-reference mutation, though. Returned just for convenience.)\n\nexport default function convertToParagraphs($) {\n $ = brsToPs($);\n $ = convertDivs($);\n $ = convertSpans($);\n\n return $;\n}\n","import { getAttrs } from 'utils/dom';\n\nexport default function convertNodeTo($node, $, tag = 'p') {\n const node = $node.get(0);\n if (!node) {\n return $;\n }\n const attrs = getAttrs(node) || {};\n // console.log(attrs)\n\n const attribString = Reflect.ownKeys(attrs)\n .map(key => `${key}=${attrs[key]}`)\n .join(' ');\n let html;\n\n if ($.browser) {\n // In the browser, the contents of noscript tags aren't rendered, therefore\n // transforms on the noscript tag (commonly used for lazy-loading) don't work\n // as expected. This test case handles that\n html = node.tagName.toLowerCase() === 'noscript' ? $node.text() : $node.html();\n } else {\n html = $node.contents();\n }\n $node.replaceWith(\n `<${tag} ${attribString}>${html}</${tag}>`\n );\n return $;\n}\n","import { SPACER_RE } from './constants';\n\nfunction cleanForHeight($img, $) {\n const height = parseInt($img.attr('height'), 10);\n const width = parseInt($img.attr('width'), 10) || 20;\n\n // Remove images that explicitly have very small heights or\n // widths, because they are most likely shims or icons,\n // which aren't very useful for reading.\n if ((height || 20) < 10 || width < 10) {\n $img.remove();\n } else if (height) {\n // Don't ever specify a height on images, so that we can\n // scale with respect to width without screwing up the\n // aspect ratio.\n $img.removeAttr('height');\n }\n\n return $;\n}\n\n// Cleans out images where the source string matches transparent/spacer/etc\n// TODO This seems very aggressive - AP\nfunction removeSpacers($img, $) {\n if (SPACER_RE.test($img.attr('src'))) {\n $img.remove();\n }\n\n return $;\n}\n\nexport default function cleanImages($article, $) {\n $article.find('img').each((index, img) => {\n const $img = $(img);\n\n cleanForHeight($img, $);\n removeSpacers($img, $);\n });\n\n return $;\n}\n","import URL from 'url';\n\nimport {\n KEEP_SELECTORS,\n KEEP_CLASS,\n} from './constants';\n\nexport default function markToKeep(article, $, url, tags = []) {\n if (tags.length === 0) {\n tags = KEEP_SELECTORS;\n }\n\n if (url) {\n const { protocol, hostname } = URL.parse(url);\n tags = [...tags, `iframe[src^=\"${protocol}//${hostname}\"]`];\n }\n\n $(tags.join(','), article).addClass(KEEP_CLASS);\n\n return $;\n}\n","import {\n STRIP_OUTPUT_TAGS,\n KEEP_CLASS,\n} from './constants';\n\nexport default function stripJunkTags(article, $, tags = []) {\n if (tags.length === 0) {\n tags = STRIP_OUTPUT_TAGS;\n }\n\n // Remove matching elements, but ignore\n // any element with a class of mercury-parser-keep\n $(tags.join(','), article).not(`.${KEEP_CLASS}`).remove();\n\n return $;\n}\n","import { convertNodeTo } from 'utils/dom';\n\n// H1 tags are typically the article title, which should be extracted\n// by the title extractor instead. If there's less than 3 of them (<3),\n// strip them. Otherwise, turn 'em into H2s.\nexport default function cleanHOnes(article, $) {\n const $hOnes = $('h1', article);\n\n if ($hOnes.length < 3) {\n $hOnes.each((index, node) => $(node).remove());\n } else {\n $hOnes.each((index, node) => {\n convertNodeTo($(node), $, 'h2');\n });\n }\n\n return $;\n}\n","import {\n getAttrs,\n setAttrs,\n} from 'utils/dom';\n\nimport {\n WHITELIST_ATTRS_RE,\n KEEP_CLASS,\n} from './constants';\n\nfunction removeAllButWhitelist($article, $) {\n $article.find('*').each((index, node) => {\n const attrs = getAttrs(node);\n\n setAttrs(node, Reflect.ownKeys(attrs).reduce((acc, attr) => {\n if (WHITELIST_ATTRS_RE.test(attr)) {\n return { ...acc, [attr]: attrs[attr] };\n }\n\n return acc;\n }, {}));\n });\n\n // Remove the mercury-parser-keep class from result\n $(`.${KEEP_CLASS}`, $article).removeClass(KEEP_CLASS);\n\n return $article;\n}\n\n// function removeAttrs(article, $) {\n// REMOVE_ATTRS.forEach((attr) => {\n// $(`[${attr}]`, article).removeAttr(attr);\n// });\n// }\n\n// Remove attributes like style or align\nexport default function cleanAttributes($article, $) {\n // Grabbing the parent because at this point\n // $article will be wrapped in a div which will\n // have a score set on it.\n return removeAllButWhitelist(\n $article.parent().length ? $article.parent() : $article,\n $,\n );\n}\n","export default function removeEmpty($article, $) {\n $article.find('p').each((index, p) => {\n const $p = $(p);\n if ($p.find('iframe, img').length === 0 && $p.text().trim() === '') $p.remove();\n });\n\n return $;\n}\n","// // CONTENT FETCHING CONSTANTS ////\n\n// A list of strings that can be considered unlikely candidates when\n// extracting content from a resource. These strings are joined together\n// and then tested for existence using re:test, so may contain simple,\n// non-pipe style regular expression queries if necessary.\nexport const UNLIKELY_CANDIDATES_BLACKLIST = [\n 'ad-break',\n 'adbox',\n 'advert',\n 'addthis',\n 'agegate',\n 'aux',\n 'blogger-labels',\n 'combx',\n 'comment',\n 'conversation',\n 'disqus',\n 'entry-unrelated',\n 'extra',\n 'foot',\n 'form',\n 'header',\n 'hidden',\n 'loader',\n 'login', // Note: This can hit 'blogindex'.\n 'menu',\n 'meta',\n 'nav',\n 'pager',\n 'pagination',\n 'predicta', // readwriteweb inline ad box\n 'presence_control_external', // lifehacker.com container full of false positives\n 'popup',\n 'printfriendly',\n 'related',\n 'remove',\n 'remark',\n 'rss',\n 'share',\n 'shoutbox',\n 'sidebar',\n 'sociable',\n 'sponsor',\n 'tools',\n];\n\n// A list of strings that can be considered LIKELY candidates when\n// extracting content from a resource. Essentially, the inverse of the\n// blacklist above - if something matches both blacklist and whitelist,\n// it is kept. This is useful, for example, if something has a className\n// of \"rss-content entry-content\". It matched 'rss', so it would normally\n// be removed, however, it's also the entry content, so it should be left\n// alone.\n//\n// These strings are joined together and then tested for existence using\n// re:test, so may contain simple, non-pipe style regular expression queries\n// if necessary.\nexport const UNLIKELY_CANDIDATES_WHITELIST = [\n 'and',\n 'article',\n 'body',\n 'blogindex',\n 'column',\n 'content',\n 'entry-content-asset',\n 'format', // misuse of form\n 'hfeed',\n 'hentry',\n 'hatom',\n 'main',\n 'page',\n 'posts',\n 'shadow',\n];\n\n// A list of tags which, if found inside, should cause a <div /> to NOT\n// be turned into a paragraph tag. Shallow div tags without these elements\n// should be turned into <p /> tags.\nexport const DIV_TO_P_BLOCK_TAGS = [\n 'a',\n 'blockquote',\n 'dl',\n 'div',\n 'img',\n 'p',\n 'pre',\n 'table',\n].join(',');\n\n// A list of tags that should be ignored when trying to find the top candidate\n// for a document.\nexport const NON_TOP_CANDIDATE_TAGS = [\n 'br',\n 'b',\n 'i',\n 'label',\n 'hr',\n 'area',\n 'base',\n 'basefont',\n 'input',\n 'img',\n 'link',\n 'meta',\n];\n\nexport const NON_TOP_CANDIDATE_TAGS_RE =\n new RegExp(`^(${NON_TOP_CANDIDATE_TAGS.join('|')})$`, 'i');\n\n// A list of selectors that specify, very clearly, either hNews or other\n// very content-specific style content, like Blogger templates.\n// More examples here: http://microformats.org/wiki/blog-post-formats\nexport const HNEWS_CONTENT_SELECTORS = [\n ['.hentry', '.entry-content'],\n ['entry', '.entry-content'],\n ['.entry', '.entry_content'],\n ['.post', '.postbody'],\n ['.post', '.post_body'],\n ['.post', '.post-body'],\n];\n\nexport const PHOTO_HINTS = [\n 'figure',\n 'photo',\n 'image',\n 'caption',\n];\nexport const PHOTO_HINTS_RE = new RegExp(PHOTO_HINTS.join('|'), 'i');\n\n// A list of strings that denote a positive scoring for this content as being\n// an article container. Checked against className and id.\n//\n// TODO: Perhaps have these scale based on their odds of being quality?\nexport const POSITIVE_SCORE_HINTS = [\n 'article',\n 'articlecontent',\n 'instapaper_body',\n 'blog',\n 'body',\n 'content',\n 'entry-content-asset',\n 'entry',\n 'hentry',\n 'main',\n 'Normal',\n 'page',\n 'pagination',\n 'permalink',\n 'post',\n 'story',\n 'text',\n '[-_]copy', // usatoday\n '\\\\Bcopy',\n];\n\n// The above list, joined into a matching regular expression\nexport const POSITIVE_SCORE_RE = new RegExp(POSITIVE_SCORE_HINTS.join('|'), 'i');\n\n// Readability publisher-specific guidelines\nexport const READABILITY_ASSET = new RegExp('entry-content-asset', 'i');\n\n// A list of strings that denote a negative scoring for this content as being\n// an article container. Checked against className and id.\n//\n// TODO: Perhaps have these scale based on their odds of being quality?\nexport const NEGATIVE_SCORE_HINTS = [\n 'adbox',\n 'advert',\n 'author',\n 'bio',\n 'bookmark',\n 'bottom',\n 'byline',\n 'clear',\n 'com-',\n 'combx',\n 'comment',\n 'comment\\\\B',\n 'contact',\n 'copy',\n 'credit',\n 'crumb',\n 'date',\n 'deck',\n 'excerpt',\n 'featured', // tnr.com has a featured_content which throws us off\n 'foot',\n 'footer',\n 'footnote',\n 'graf',\n 'head',\n 'info',\n 'infotext', // newscientist.com copyright\n 'instapaper_ignore',\n 'jump',\n 'linebreak',\n 'link',\n 'masthead',\n 'media',\n 'meta',\n 'modal',\n 'outbrain', // slate.com junk\n 'promo',\n 'pr_', // autoblog - press release\n 'related',\n 'respond',\n 'roundcontent', // lifehacker restricted content warning\n 'scroll',\n 'secondary',\n 'share',\n 'shopping',\n 'shoutbox',\n 'side',\n 'sidebar',\n 'sponsor',\n 'stamp',\n 'sub',\n 'summary',\n 'tags',\n 'tools',\n 'widget',\n];\n// The above list, joined into a matching regular expression\nexport const NEGATIVE_SCORE_RE = new RegExp(NEGATIVE_SCORE_HINTS.join('|'), 'i');\n\n// Match a digit. Pretty clear.\nexport const DIGIT_RE = new RegExp('[0-9]');\n\n// Match 2 or more consecutive <br> tags\nexport const BR_TAGS_RE = new RegExp('(<br[^>]*>[ \\n\\r\\t]*){2,}', 'i');\n\n// Match 1 BR tag.\nexport const BR_TAG_RE = new RegExp('<br[^>]*>', 'i');\n\n// A list of all of the block level tags known in HTML5 and below. Taken from\n// http://bit.ly/qneNIT\nexport const BLOCK_LEVEL_TAGS = [\n 'article',\n 'aside',\n 'blockquote',\n 'body',\n 'br',\n 'button',\n 'canvas',\n 'caption',\n 'col',\n 'colgroup',\n 'dd',\n 'div',\n 'dl',\n 'dt',\n 'embed',\n 'fieldset',\n 'figcaption',\n 'figure',\n 'footer',\n 'form',\n 'h1',\n 'h2',\n 'h3',\n 'h4',\n 'h5',\n 'h6',\n 'header',\n 'hgroup',\n 'hr',\n 'li',\n 'map',\n 'object',\n 'ol',\n 'output',\n 'p',\n 'pre',\n 'progress',\n 'section',\n 'table',\n 'tbody',\n 'textarea',\n 'tfoot',\n 'th',\n 'thead',\n 'tr',\n 'ul',\n 'video',\n];\nexport const BLOCK_LEVEL_TAGS_RE = new RegExp(`^(${BLOCK_LEVEL_TAGS.join('|')})$`, 'i');\n\n// The removal is implemented as a blacklist and whitelist, this test finds\n// blacklisted elements that aren't whitelisted. We do this all in one\n// expression-both because it's only one pass, and because this skips the\n// serialization for whitelisted nodes.\nconst candidatesBlacklist = UNLIKELY_CANDIDATES_BLACKLIST.join('|');\nexport const CANDIDATES_BLACKLIST = new RegExp(candidatesBlacklist, 'i');\n\nconst candidatesWhitelist = UNLIKELY_CANDIDATES_WHITELIST.join('|');\nexport const CANDIDATES_WHITELIST = new RegExp(candidatesWhitelist, 'i');\n\nexport const UNLIKELY_RE = new RegExp(`!(${candidatesWhitelist})|(${candidatesBlacklist})`, 'i');\n\nexport const PARAGRAPH_SCORE_TAGS = new RegExp('^(p|li|span|pre)$', 'i');\nexport const CHILD_CONTENT_TAGS = new RegExp('^(td|blockquote|ol|ul|dl)$', 'i');\nexport const BAD_TAGS = new RegExp('^(address|form)$', 'i');\n\nexport const HTML_OR_BODY_RE = new RegExp('^(html|body)$', 'i');\n","import {\n NEGATIVE_SCORE_RE,\n POSITIVE_SCORE_RE,\n PHOTO_HINTS_RE,\n READABILITY_ASSET,\n} from './constants';\n\n// Get the score of a node based on its className and id.\nexport default function getWeight(node) {\n const classes = node.attr('class');\n const id = node.attr('id');\n let score = 0;\n\n if (id) {\n // if id exists, try to score on both positive and negative\n if (POSITIVE_SCORE_RE.test(id)) {\n score += 25;\n }\n if (NEGATIVE_SCORE_RE.test(id)) {\n score -= 25;\n }\n }\n\n if (classes) {\n if (score === 0) {\n // if classes exist and id did not contribute to score\n // try to score on both positive and negative\n if (POSITIVE_SCORE_RE.test(classes)) {\n score += 25;\n }\n if (NEGATIVE_SCORE_RE.test(classes)) {\n score -= 25;\n }\n }\n\n // even if score has been set by id, add score for\n // possible photo matches\n // \"try to keep photos if we can\"\n if (PHOTO_HINTS_RE.test(classes)) {\n score += 10;\n }\n\n // add 25 if class matches entry-content-asset,\n // a class apparently instructed for use in the\n // Readability publisher guidelines\n // https://www.readability.com/developers/guidelines\n if (READABILITY_ASSET.test(classes)) {\n score += 25;\n }\n }\n\n return score;\n}\n","// returns the score of a node based on\n// the node's score attribute\n// returns null if no score set\nexport default function getScore($node) {\n return parseFloat($node.attr('score')) || null;\n}\n","// return 1 for every comma in text\nexport default function scoreCommas(text) {\n return (text.match(/,/g) || []).length;\n}\n","const idkRe = new RegExp('^(p|pre)$', 'i');\n\nexport default function scoreLength(textLength, tagName = 'p') {\n const chunks = textLength / 50;\n\n if (chunks > 0) {\n let lengthBonus;\n\n // No idea why p or pre are being tamped down here\n // but just following the source for now\n // Not even sure why tagName is included here,\n // since this is only being called from the context\n // of scoreParagraph\n if (idkRe.test(tagName)) {\n lengthBonus = chunks - 2;\n } else {\n lengthBonus = chunks - 1.25;\n }\n\n return Math.min(Math.max(lengthBonus, 0), 3);\n }\n\n return 0;\n}\n","import {\n scoreCommas,\n scoreLength,\n} from './index';\n\n// Score a paragraph using various methods. Things like number of\n// commas, etc. Higher is better.\nexport default function scoreParagraph(node) {\n let score = 1;\n const text = node.text().trim();\n const textLength = text.length;\n\n // If this paragraph is less than 25 characters, don't count it.\n if (textLength < 25) {\n return 0;\n }\n\n // Add points for any commas within this paragraph\n score += scoreCommas(text);\n\n // For every 50 characters in this paragraph, add another point. Up\n // to 3 points.\n score += scoreLength(textLength);\n\n // Articles can end with short paragraphs when people are being clever\n // but they can also end with short paragraphs setting up lists of junk\n // that we strip. This negative tweaks junk setup paragraphs just below\n // the cutoff threshold.\n if (text.slice(-1) === ':') {\n score -= 1;\n }\n\n return score;\n}\n","export default function setScore($node, $, score) {\n $node.attr('score', score);\n return $node;\n}\n","import {\n getOrInitScore,\n setScore,\n} from './index';\n\nexport default function addScore($node, $, amount) {\n try {\n const score = getOrInitScore($node, $) + amount;\n setScore($node, $, score);\n } catch (e) {\n // Ignoring; error occurs in scoreNode\n }\n\n return $node;\n}\n","import { addScore } from './index';\n\n// Adds 1/4 of a child's score to its parent\nexport default function addToParent(node, $, score) {\n const parent = node.parent();\n if (parent) {\n addScore(parent, $, score * 0.25);\n }\n\n return node;\n}\n","import {\n getScore,\n scoreNode,\n getWeight,\n addToParent,\n} from './index';\n\n// gets and returns the score if it exists\n// if not, initializes a score based on\n// the node's tag type\nexport default function getOrInitScore($node, $, weightNodes = true) {\n let score = getScore($node);\n\n if (score) {\n return score;\n }\n\n score = scoreNode($node);\n\n if (weightNodes) {\n score += getWeight($node);\n }\n\n addToParent($node, $, score);\n\n return score;\n}\n","import { scoreParagraph } from './index';\nimport {\n PARAGRAPH_SCORE_TAGS,\n CHILD_CONTENT_TAGS,\n BAD_TAGS,\n} from './constants';\n\n// Score an individual node. Has some smarts for paragraphs, otherwise\n// just scores based on tag.\nexport default function scoreNode($node) {\n const { tagName } = $node.get(0);\n\n // TODO: Consider ordering by most likely.\n // E.g., if divs are a more common tag on a page,\n // Could save doing that regex test on every node – AP\n if (PARAGRAPH_SCORE_TAGS.test(tagName)) {\n return scoreParagraph($node);\n } else if (tagName.toLowerCase() === 'div') {\n return 5;\n } else if (CHILD_CONTENT_TAGS.test(tagName)) {\n return 3;\n } else if (BAD_TAGS.test(tagName)) {\n return -3;\n } else if (tagName.toLowerCase() === 'th') {\n return -5;\n }\n\n return 0;\n}\n","import { convertNodeTo } from 'utils/dom';\n\nimport { HNEWS_CONTENT_SELECTORS } from './constants';\nimport {\n scoreNode,\n setScore,\n getOrInitScore,\n addScore,\n} from './index';\n\nfunction convertSpans($node, $) {\n if ($node.get(0)) {\n const { tagName } = $node.get(0);\n\n if (tagName === 'span') {\n // convert spans to divs\n convertNodeTo($node, $, 'div');\n }\n }\n}\n\nfunction addScoreTo($node, $, score) {\n if ($node) {\n convertSpans($node, $);\n addScore($node, $, score);\n }\n}\n\nfunction scorePs($, weightNodes) {\n $('p, pre').not('[score]').each((index, node) => {\n // The raw score for this paragraph, before we add any parent/child\n // scores.\n let $node = $(node);\n $node = setScore($node, $, getOrInitScore($node, $, weightNodes));\n\n const $parent = $node.parent();\n const rawScore = scoreNode($node);\n\n addScoreTo($parent, $, rawScore, weightNodes);\n if ($parent) {\n // Add half of the individual content score to the\n // grandparent\n addScoreTo($parent.parent(), $, rawScore / 2, weightNodes);\n }\n });\n\n return $;\n}\n\n// score content. Parents get the full value of their children's\n// content score, grandparents half\nexport default function scoreContent($, weightNodes = true) {\n // First, look for special hNews based selectors and give them a big\n // boost, if they exist\n HNEWS_CONTENT_SELECTORS.forEach(([parentSelector, childSelector]) => {\n $(`${parentSelector} ${childSelector}`).each((index, node) => {\n addScore($(node).parent(parentSelector), $, 80);\n });\n });\n\n // Doubling this again\n // Previous solution caused a bug\n // in which parents weren't retaining\n // scores. This is not ideal, and\n // should be fixed.\n scorePs($, weightNodes);\n scorePs($, weightNodes);\n\n return $;\n}\n","import {\n textLength,\n linkDensity,\n} from 'utils/dom';\nimport { hasSentenceEnd } from 'utils/text';\n\nimport { NON_TOP_CANDIDATE_TAGS_RE } from './constants';\nimport { getScore } from './index';\n\n// Now that we have a top_candidate, look through the siblings of\n// it to see if any of them are decently scored. If they are, they\n// may be split parts of the content (Like two divs, a preamble and\n// a body.) Example:\n// http://articles.latimes.com/2009/oct/14/business/fi-bigtvs14\nexport default function mergeSiblings($candidate, topScore, $) {\n if (!$candidate.parent().length) {\n return $candidate;\n }\n\n const siblingScoreThreshold = Math.max(10, topScore * 0.25);\n const wrappingDiv = $('<div></div>');\n\n $candidate.parent().children().each((index, sibling) => {\n const $sibling = $(sibling);\n // Ignore tags like BR, HR, etc\n if (NON_TOP_CANDIDATE_TAGS_RE.test(sibling.tagName)) {\n return null;\n }\n\n const siblingScore = getScore($sibling);\n if (siblingScore) {\n if ($sibling.get(0) === $candidate.get(0)) {\n wrappingDiv.append($sibling);\n } else {\n let contentBonus = 0;\n const density = linkDensity($sibling);\n\n // If sibling has a very low link density,\n // give it a small bonus\n if (density < 0.05) {\n contentBonus += 20;\n }\n\n // If sibling has a high link density,\n // give it a penalty\n if (density >= 0.5) {\n contentBonus -= 20;\n }\n\n // If sibling node has the same class as\n // candidate, give it a bonus\n if ($sibling.attr('class') === $candidate.attr('class')) {\n contentBonus += topScore * 0.2;\n }\n\n const newScore = siblingScore + contentBonus;\n\n if (newScore >= siblingScoreThreshold) {\n return wrappingDiv.append($sibling);\n } else if (sibling.tagName === 'p') {\n const siblingContent = $sibling.text();\n const siblingContentLength = textLength(siblingContent);\n\n if (siblingContentLength > 80 && density < 0.25) {\n return wrappingDiv.append($sibling);\n } else if (siblingContentLength <= 80 && density === 0 &&\n hasSentenceEnd(siblingContent)) {\n return wrappingDiv.append($sibling);\n }\n }\n }\n }\n\n return null;\n });\n\n if (wrappingDiv.children().length === 1 &&\n wrappingDiv.children().first().get(0) === $candidate.get(0)) {\n return $candidate;\n }\n\n return wrappingDiv;\n}\n","import { NON_TOP_CANDIDATE_TAGS_RE } from './constants';\nimport { getScore } from './index';\nimport mergeSiblings from './merge-siblings';\n\n// After we've calculated scores, loop through all of the possible\n// candidate nodes we found and find the one with the highest score.\nexport default function findTopCandidate($) {\n let $candidate;\n let topScore = 0;\n\n $('[score]').each((index, node) => {\n // Ignore tags like BR, HR, etc\n if (NON_TOP_CANDIDATE_TAGS_RE.test(node.tagName)) {\n return;\n }\n\n const $node = $(node);\n const score = getScore($node);\n\n if (score > topScore) {\n topScore = score;\n $candidate = $node;\n }\n });\n\n // If we don't have a candidate, return the body\n // or whatever the first element is\n if (!$candidate) {\n return $('body') || $('*').first();\n }\n\n $candidate = mergeSiblings($candidate, topScore, $);\n\n return $candidate;\n}\n","// Scoring\nexport { default as getWeight } from './get-weight';\nexport { default as getScore } from './get-score';\nexport { default as scoreCommas } from './score-commas';\nexport { default as scoreLength } from './score-length';\nexport { default as scoreParagraph } from './score-paragraph';\nexport { default as setScore } from './set-score';\nexport { default as addScore } from './add-score';\nexport { default as addToParent } from './add-to-parent';\nexport { default as getOrInitScore } from './get-or-init-score';\nexport { default as scoreNode } from './score-node';\nexport { default as scoreContent } from './score-content';\nexport { default as findTopCandidate } from './find-top-candidate';\n","import {\n getScore,\n setScore,\n getOrInitScore,\n scoreCommas,\n} from 'extractors/generic/content/scoring';\n\nimport {\n CLEAN_CONDITIONALLY_TAGS,\n KEEP_CLASS,\n} from './constants';\nimport { normalizeSpaces } from '../text';\nimport { linkDensity } from './index';\n\nfunction removeUnlessContent($node, $, weight) {\n // Explicitly save entry-content-asset tags, which are\n // noted as valuable in the Publisher guidelines. For now\n // this works everywhere. We may want to consider making\n // this less of a sure-thing later.\n if ($node.hasClass('entry-content-asset')) {\n return;\n }\n\n const content = normalizeSpaces($node.text());\n\n if (scoreCommas(content) < 10) {\n const pCount = $('p', $node).length;\n const inputCount = $('input', $node).length;\n\n // Looks like a form, too many inputs.\n if (inputCount > (pCount / 3)) {\n $node.remove();\n return;\n }\n\n const contentLength = content.length;\n const imgCount = $('img', $node).length;\n\n // Content is too short, and there are no images, so\n // this is probably junk content.\n if (contentLength < 25 && imgCount === 0) {\n $node.remove();\n return;\n }\n\n const density = linkDensity($node);\n\n // Too high of link density, is probably a menu or\n // something similar.\n // console.log(weight, density, contentLength)\n if (weight < 25 && density > 0.2 && contentLength > 75) {\n $node.remove();\n return;\n }\n\n // Too high of a link density, despite the score being\n // high.\n if (weight >= 25 && density > 0.5) {\n // Don't remove the node if it's a list and the\n // previous sibling starts with a colon though. That\n // means it's probably content.\n const tagName = $node.get(0).tagName.toLowerCase();\n const nodeIsList = tagName === 'ol' || tagName === 'ul';\n if (nodeIsList) {\n const previousNode = $node.prev();\n if (previousNode && normalizeSpaces(previousNode.text()).slice(-1) === ':') {\n return;\n }\n }\n\n $node.remove();\n return;\n }\n\n const scriptCount = $('script', $node).length;\n\n // Too many script tags, not enough content.\n if (scriptCount > 0 && contentLength < 150) {\n $node.remove();\n return;\n }\n }\n}\n\n// Given an article, clean it of some superfluous content specified by\n// tags. Things like forms, ads, etc.\n//\n// Tags is an array of tag name's to search through. (like div, form,\n// etc)\n//\n// Return this same doc.\nexport default function cleanTags($article, $) {\n $(CLEAN_CONDITIONALLY_TAGS, $article).each((index, node) => {\n const $node = $(node);\n // If marked to keep, skip it\n if ($node.hasClass(KEEP_CLASS) || $node.find(`.${KEEP_CLASS}`).length > 0) return;\n\n let weight = getScore($node);\n if (!weight) {\n weight = getOrInitScore($node, $);\n setScore($node, $, weight);\n }\n\n // drop node if its weight is < 0\n if (weight < 0) {\n $node.remove();\n } else {\n // deteremine if node seems like content\n removeUnlessContent($node, $, weight);\n }\n });\n\n return $;\n}\n","import { getWeight } from 'extractors/generic/content/scoring';\n\nimport { HEADER_TAG_LIST } from './constants';\nimport { normalizeSpaces } from '../text';\n\nexport default function cleanHeaders($article, $, title = '') {\n $(HEADER_TAG_LIST, $article).each((index, header) => {\n const $header = $(header);\n // Remove any headers that appear before all other p tags in the\n // document. This probably means that it was part of the title, a\n // subtitle or something else extraneous like a datestamp or byline,\n // all of which should be handled by other metadata handling.\n if ($($header, $article).prevAll('p').length === 0) {\n return $header.remove();\n }\n\n // Remove any headers that match the title exactly.\n if (normalizeSpaces($(header).text()) === title) {\n return $header.remove();\n }\n\n // If this header has a negative weight, it's probably junk.\n // Get rid of it.\n if (getWeight($(header)) < 0) {\n return $header.remove();\n }\n\n return $header;\n });\n\n return $;\n}\n","import { convertNodeTo } from 'utils/dom';\n\n// Rewrite the tag name to div if it's a top level node like body or\n// html to avoid later complications with multiple body tags.\nexport default function rewriteTopLevel(article, $) {\n // I'm not using context here because\n // it's problematic when converting the\n // top-level/root node - AP\n $ = convertNodeTo($('html'), $, 'div');\n $ = convertNodeTo($('body'), $, 'div');\n\n return $;\n}\n","import URL from 'url';\n\nimport {\n getAttrs,\n setAttr,\n} from 'utils/dom';\n\nfunction absolutize($, rootUrl, attr, $content) {\n $(`[${attr}]`, $content).each((_, node) => {\n const attrs = getAttrs(node);\n const url = attrs[attr];\n\n if (url) {\n const absoluteUrl = URL.resolve(rootUrl, url);\n setAttr(node, attr, absoluteUrl);\n }\n });\n}\n\nexport default function makeLinksAbsolute($content, $, url) {\n ['href', 'src'].forEach(attr => absolutize($, url, attr, $content));\n\n return $content;\n}\n","export function textLength(text) {\n return text.trim()\n .replace(/\\s+/g, ' ')\n .length;\n}\n\n// Determines what percentage of the text\n// in a node is link text\n// Takes a node, returns a float\nexport function linkDensity($node) {\n const totalTextLength = textLength($node.text());\n\n const linkText = $node.find('a').text();\n const linkLength = textLength(linkText);\n\n if (totalTextLength > 0) {\n return linkLength / totalTextLength;\n } else if (totalTextLength === 0 && linkLength > 0) {\n return 1;\n }\n\n return 0;\n}\n","import { stripTags } from 'utils/dom';\n\n// Given a node type to search for, and a list of meta tag names to\n// search for, find a meta tag associated.\nexport default function extractFromMeta(\n $,\n metaNames,\n cachedNames,\n cleanTags = true\n) {\n const foundNames = metaNames.filter(name => cachedNames.indexOf(name) !== -1);\n\n for (const name of foundNames) {\n const type = 'name';\n const value = 'value';\n\n const nodes = $(`meta[${type}=\"${name}\"]`);\n\n // Get the unique value of every matching node, in case there\n // are two meta tags with the same name and value.\n // Remove empty values.\n const values =\n nodes.map((index, node) => $(node).attr(value))\n .toArray()\n .filter(text => text !== '');\n\n // If we have more than one value for the same name, we have a\n // conflict and can't trust any of them. Skip this name. If we have\n // zero, that means our meta tags had no values. Skip this name\n // also.\n if (values.length === 1) {\n let metaValue;\n // Meta values that contain HTML should be stripped, as they\n // weren't subject to cleaning previously.\n if (cleanTags) {\n metaValue = stripTags(values[0], $);\n } else {\n metaValue = values[0];\n }\n\n return metaValue;\n }\n }\n\n // If nothing is found, return null\n return null;\n}\n","import { withinComment } from 'utils/dom';\n\nfunction isGoodNode($node, maxChildren) {\n // If it has a number of children, it's more likely a container\n // element. Skip it.\n if ($node.children().length > maxChildren) {\n return false;\n }\n // If it looks to be within a comment, skip it.\n if (withinComment($node)) {\n return false;\n }\n\n return true;\n}\n\n// Given a a list of selectors find content that may\n// be extractable from the document. This is for flat\n// meta-information, like author, title, date published, etc.\nexport default function extractFromSelectors(\n $,\n selectors,\n maxChildren = 1,\n textOnly = true\n) {\n for (const selector of selectors) {\n const nodes = $(selector);\n\n // If we didn't get exactly one of this selector, this may be\n // a list of articles or comments. Skip it.\n if (nodes.length === 1) {\n const $node = $(nodes[0]);\n\n if (isGoodNode($node, maxChildren)) {\n let content;\n if (textOnly) {\n content = $node.text();\n } else {\n content = $node.html();\n }\n\n if (content) {\n return content;\n }\n }\n }\n }\n\n return null;\n}\n","// strips all tags from a string of text\nexport default function stripTags(text, $) {\n // Wrapping text in html element prevents errors when text\n // has no html\n const cleanText = $(`<span>${text}</span>`).text();\n return cleanText === '' ? text : cleanText;\n}\n","import { getAttrs } from 'utils/dom';\n\nexport default function withinComment($node) {\n const parents = $node.parents().toArray();\n const commentParent = parents.find((parent) => {\n const attrs = getAttrs(parent);\n const { class: nodeClass, id } = attrs;\n const classAndId = `${nodeClass} ${id}`;\n return classAndId.includes('comment');\n });\n\n return commentParent !== undefined;\n}\n","// Given a node, determine if it's article-like enough to return\n// param: node (a cheerio node)\n// return: boolean\n\nexport default function nodeIsSufficient($node) {\n return $node.text().trim().length >= 100;\n}\n","import { IS_WP_SELECTOR } from './constants';\n\nexport default function isWordpress($) {\n return $(IS_WP_SELECTOR).length > 0;\n}\n","export default function getAttrs(node) {\n const { attribs, attributes } = node;\n\n if (!attribs && attributes) {\n const attrs = Reflect.ownKeys(attributes).reduce((acc, index) => {\n const attr = attributes[index];\n\n if (!attr.name || !attr.value) return acc;\n\n acc[attr.name] = attr.value;\n return acc;\n }, {});\n return attrs;\n }\n\n return attribs;\n}\n","export default function setAttr(node, attr, val) {\n if (node.attribs) {\n node.attribs[attr] = val;\n } else if (node.attributes) {\n node.setAttribute(attr, val);\n }\n\n return node;\n}\n","export default function setAttrs(node, attrs) {\n if (node.attribs) {\n node.attribs = attrs;\n } else if (node.attributes) {\n while (node.attributes.length > 0) {\n node.removeAttribute(node.attributes[0].name);\n }\n\n Reflect.ownKeys(attrs).forEach((key) => {\n node.setAttribute(key, attrs[key]);\n });\n }\n\n return node;\n}\n","// DOM manipulation\nexport { default as stripUnlikelyCandidates } from './strip-unlikely-candidates';\nexport { default as brsToPs } from './brs-to-ps';\nexport { default as paragraphize } from './paragraphize';\nexport { default as convertToParagraphs } from './convert-to-paragraphs';\nexport { default as convertNodeTo } from './convert-node-to';\nexport { default as cleanImages } from './clean-images';\nexport { default as markToKeep } from './mark-to-keep';\nexport { default as stripJunkTags } from './strip-junk-tags';\nexport { default as cleanHOnes } from './clean-h-ones';\nexport { default as cleanAttributes } from './clean-attributes';\nexport { default as removeEmpty } from './remove-empty';\nexport { default as cleanTags } from './clean-tags';\nexport { default as cleanHeaders } from './clean-headers';\nexport { default as rewriteTopLevel } from './rewrite-top-level';\nexport { default as makeLinksAbsolute } from './make-links-absolute';\nexport { textLength, linkDensity } from './link-density';\nexport { default as extractFromMeta } from './extract-from-meta';\nexport { default as extractFromSelectors } from './extract-from-selectors';\nexport { default as stripTags } from './strip-tags';\nexport { default as withinComment } from './within-comment';\nexport { default as nodeIsSufficient } from './node-is-sufficient';\nexport { default as isWordpress } from './is-wordpress';\nexport { default as getAttrs } from './get-attrs';\nexport { default as setAttr } from './set-attr';\nexport { default as setAttrs } from './set-attrs';\n","export const IS_LINK = new RegExp('https?://', 'i');\nexport const IS_IMAGE = new RegExp('.(png|gif|jpe?g)', 'i');\n\nexport const TAGS_TO_REMOVE = [\n 'script',\n 'style',\n 'form',\n].join(',');\n","import { getAttrs } from 'utils/dom';\n\nimport {\n IS_LINK,\n IS_IMAGE,\n} from './constants';\n\n// Convert all instances of images with potentially\n// lazy loaded images into normal images.\n// Many sites will have img tags with no source, or an image tag with a src\n// attribute that a is a placeholer. We need to be able to properly fill in\n// the src attribute so the images are no longer lazy loaded.\nexport default function convertLazyLoadedImages($) {\n $('img').each((_, img) => {\n const attrs = getAttrs(img);\n\n Reflect.ownKeys(attrs).forEach((attr) => {\n const value = attrs[attr];\n\n if (attr !== 'src' && IS_LINK.test(value) &&\n IS_IMAGE.test(value)) {\n $(img).attr('src', value);\n }\n });\n });\n\n return $;\n}\n","import { TAGS_TO_REMOVE } from './constants';\n\nfunction isComment(index, node) {\n return node.type === 'comment';\n}\n\nfunction cleanComments($) {\n $.root().find('*')\n .contents()\n .filter(isComment)\n .remove();\n\n return $;\n}\n\nexport default function clean($) {\n $(TAGS_TO_REMOVE).remove();\n\n $ = cleanComments($);\n return $;\n}\n","import cheerio from 'cheerio';\nimport iconv from 'iconv-lite';\n\nimport { getEncoding } from 'utils/text';\nimport { fetchResource } from './utils';\nimport {\n normalizeMetaTags,\n convertLazyLoadedImages,\n clean,\n} from './utils/dom';\n\nconst Resource = {\n\n // Create a Resource.\n //\n // :param url: The URL for the document we should retrieve.\n // :param response: If set, use as the response rather than\n // attempting to fetch it ourselves. Expects a\n // string.\n async create(url, preparedResponse, parsedUrl) {\n let result;\n\n if (preparedResponse) {\n const validResponse = {\n statusMessage: 'OK',\n statusCode: 200,\n headers: {\n 'content-type': 'text/html',\n 'content-length': 500,\n },\n };\n\n result = { body: preparedResponse, response: validResponse };\n } else {\n result = await fetchResource(url, parsedUrl);\n }\n\n if (result.error) {\n result.failed = true;\n return result;\n }\n\n return this.generateDoc(result);\n },\n\n generateDoc({ body: content, response }) {\n const { 'content-type': contentType } = response.headers;\n\n // TODO: Implement is_text function from\n // https://github.com/ReadabilityHoldings/readability/blob/8dc89613241d04741ebd42fa9fa7df1b1d746303/readability/utils/text.py#L57\n if (!contentType.includes('html') &&\n !contentType.includes('text')) {\n throw new Error('Content does not appear to be text.');\n }\n\n let $ = this.encodeDoc({ content, contentType });\n\n if ($.root().children().length === 0) {\n throw new Error('No children, likely a bad parse.');\n }\n\n $ = normalizeMetaTags($);\n $ = convertLazyLoadedImages($);\n $ = clean($);\n\n return $;\n },\n\n encodeDoc({ content, contentType }) {\n const encoding = getEncoding(contentType);\n let decodedContent = iconv.decode(content, encoding);\n let $ = cheerio.load(decodedContent);\n\n // after first cheerio.load, check to see if encoding matches\n const metaContentType = $('meta[http-equiv=content-type]').attr('content');\n const properEncoding = getEncoding(metaContentType);\n\n // if encodings in the header/body dont match, use the one in the body\n if (properEncoding !== encoding) {\n decodedContent = iconv.decode(content, properEncoding);\n $ = cheerio.load(decodedContent);\n }\n\n return $;\n },\n};\n\nexport default Resource;\n","const merge = (extractor, domains) => (\n domains.reduce((acc, domain) => {\n acc[domain] = extractor;\n return acc;\n }, {})\n);\n\nexport default function mergeSupportedDomains(extractor) {\n return extractor.supportedDomains ?\n merge(extractor, [extractor.domain, ...extractor.supportedDomains])\n :\n merge(extractor, [extractor.domain]);\n}\n","export const BloggerExtractor = {\n domain: 'blogspot.com',\n content: {\n // Blogger is insane and does not load its content\n // initially in the page, but it's all there\n // in noscript\n selectors: [\n '.post-content noscript',\n ],\n\n // Selectors to remove from the extracted content\n clean: [\n ],\n\n // Convert the noscript tag to a div\n transforms: {\n noscript: 'div',\n },\n },\n\n author: {\n selectors: [\n '.post-author-name',\n ],\n },\n\n title: {\n selectors: [\n '.post h2.title',\n ],\n },\n\n date_published: {\n selectors: [\n 'span.publishdate',\n ],\n },\n};\n","export const NYMagExtractor = {\n domain: 'nymag.com',\n content: {\n // Order by most likely. Extractor will stop on first occurrence\n selectors: [\n 'div.article-content',\n 'section.body',\n 'article.article',\n ],\n\n // Selectors to remove from the extracted content\n clean: [\n '.ad',\n '.single-related-story',\n ],\n\n // Object of tranformations to make on matched elements\n // Each key is the selector, each value is the tag to\n // transform to.\n // If a function is given, it should return a string\n // to convert to or nothing (in which case it will not perform\n // the transformation.\n transforms: {\n // Convert h1s to h2s\n h1: 'h2',\n\n // Convert lazy-loaded noscript images to figures\n noscript: ($node, $) => {\n const $children = $.browser ? $($node.text()) : $node.children();\n if ($children.length === 1 && $children.get(0) !== undefined &&\n $children.get(0).tagName.toLowerCase() === 'img') {\n return 'figure';\n }\n\n return null;\n },\n },\n },\n\n title: {\n selectors: [\n 'h1.lede-feature-title',\n 'h1.headline-primary',\n 'h1',\n ],\n },\n\n author: {\n selectors: [\n '.by-authors',\n '.lede-feature-author',\n ],\n },\n\n dek: {\n selectors: [\n '.lede-feature-teaser',\n ],\n },\n\n date_published: {\n selectors: [\n ['time.article-timestamp[datetime]', 'datetime'],\n 'time.article-timestamp',\n ],\n },\n};\n","export const WikipediaExtractor = {\n domain: 'wikipedia.org',\n content: {\n selectors: [\n '#mw-content-text',\n ],\n\n defaultCleaner: false,\n\n // transform top infobox to an image with caption\n transforms: {\n '.infobox img': ($node) => {\n const $parent = $node.parents('.infobox');\n // Only prepend the first image in .infobox\n if ($parent.children('img').length === 0) {\n $parent.prepend($node);\n }\n },\n '.infobox caption': 'figcaption',\n '.infobox': 'figure',\n },\n\n // Selectors to remove from the extracted content\n clean: [\n '.mw-editsection',\n 'figure tr, figure td, figure tbody',\n '#toc',\n '.navbox',\n ],\n\n },\n\n author: 'Wikipedia Contributors',\n\n title: {\n selectors: [\n 'h2.title',\n ],\n },\n\n date_published: {\n selectors: [\n '#footer-info-lastmod',\n ],\n },\n\n};\n","export const TwitterExtractor = {\n domain: 'twitter.com',\n\n content: {\n transforms: {\n // We're transforming essentially the whole page here.\n // Twitter doesn't have nice selectors, so our initial\n // selector grabs the whole page, then we're re-writing\n // it to fit our needs before we clean it up.\n '.permalink[role=main]': ($node, $) => {\n const tweets = $node.find('.tweet');\n const $tweetContainer = $('<div id=\"TWEETS_GO_HERE\"></div>');\n $tweetContainer.append(tweets);\n $node.replaceWith($tweetContainer);\n },\n\n // Twitter wraps @ with s, which\n // renders as a strikethrough\n s: 'span',\n },\n\n selectors: [\n '.permalink[role=main]',\n ],\n\n defaultCleaner: false,\n\n clean: [\n '.stream-item-footer',\n 'button',\n '.tweet-details-fixer',\n ],\n },\n\n author: {\n selectors: [\n '.tweet.permalink-tweet .username',\n ],\n },\n\n date_published: {\n selectors: [\n ['.permalink-tweet ._timestamp[data-time-ms]', 'data-time-ms'],\n // '.tweet.permalink-tweet .metadata',\n ],\n },\n\n};\n","export const NYTimesExtractor = {\n domain: 'www.nytimes.com',\n\n title: {\n selectors: [\n 'h1.g-headline',\n 'h1[itemprop=\"headline\"]',\n 'h1.headline',\n ],\n },\n\n author: {\n selectors: [\n ['meta[name=\"author\"]', 'value'],\n '.g-byline',\n '.byline',\n ],\n },\n\n content: {\n selectors: [\n 'div.g-blocks',\n 'article#story',\n ],\n\n transforms: {\n 'img.g-lazy': ($node) => {\n let src = $node.attr('src');\n // const widths = $node.attr('data-widths')\n // .slice(1)\n // .slice(0, -1)\n // .split(',');\n // if (widths.length) {\n // width = widths.slice(-1);\n // } else {\n // width = '900';\n // }\n const width = 640;\n\n src = src.replace('{{size}}', width);\n $node.attr('src', src);\n },\n },\n\n clean: [\n '.ad',\n 'header#story-header',\n '.story-body-1 .lede.video',\n '.visually-hidden',\n '#newsletter-promo',\n '.promo',\n '.comments-button',\n '.hidden',\n '.comments',\n '.supplemental',\n '.nocontent',\n '.story-footer-links',\n ],\n },\n\n date_published: {\n selectors: [\n ['meta[name=\"article:published\"]', 'value'],\n ],\n },\n\n lead_image_url: {\n selectors: [\n ['meta[name=\"og:image\"]', 'value'],\n ],\n },\n\n dek: null,\n\n next_page_url: null,\n\n excerpt: null,\n};\n","// Rename CustomExtractor\n// to fit your publication\nexport const TheAtlanticExtractor = {\n domain: 'www.theatlantic.com',\n title: {\n selectors: [\n 'h1.hed',\n ],\n },\n\n author: {\n selectors: [\n 'article#article .article-cover-extra .metadata .byline a',\n ],\n },\n\n content: {\n selectors: [\n ['.article-cover figure.lead-img', '.article-body'],\n '.article-body',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: [\n ],\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n '.partner-box',\n '.callout',\n ],\n },\n\n date_published: {\n selectors: [\n ['time[itemProp=\"datePublished\"]', 'datetime'],\n ],\n },\n\n lead_image_url: null,\n\n next_page_url: null,\n\n excerpt: null,\n};\n","// Rename CustomExtractor\n// to fit your publication\n// (e.g., NYTimesExtractor)\nexport const NewYorkerExtractor = {\n domain: 'www.newyorker.com',\n title: {\n selectors: [\n 'h1.title',\n ],\n },\n\n author: {\n selectors: [\n '.contributors',\n ],\n },\n\n content: {\n selectors: [\n 'div#articleBody',\n 'div.articleBody',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: [\n ],\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n\n ],\n },\n\n date_published: {\n selectors: [\n ['meta[name=\"article:published_time\"]', 'value'],\n ['time[itemProp=\"datePublished\"]', 'content'],\n ],\n\n timezone: 'America/New_York',\n },\n\n lead_image_url: {\n selectors: [\n ['meta[name=\"og:image\"]', 'value'],\n ],\n },\n\n dek: {\n selectors: [\n '.dek',\n 'h2.dek',\n ],\n },\n\n next_page_url: null,\n\n excerpt: null,\n};\n","// Rename CustomExtractor\n// to fit your publication\n// (e.g., NYTimesExtractor)\nexport const WiredExtractor = {\n domain: 'www.wired.com',\n title: {\n selectors: [\n 'h1.post-title',\n // enter title selectors\n ],\n },\n\n author: {\n selectors: [\n 'a[rel=\"author\"]',\n // enter author selectors\n ],\n },\n\n content: {\n selectors: [\n 'article.content',\n // enter content selectors\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: [\n ],\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n '.visually-hidden',\n 'figcaption img.photo',\n\n ],\n },\n\n date_published: {\n selectors: [\n ['meta[itemprop=\"datePublished\"]', 'value'],\n ],\n },\n\n lead_image_url: {\n selectors: [\n ['meta[name=\"og:image\"]', 'value'],\n ],\n },\n\n dek: {\n selectors: [\n ],\n },\n\n next_page_url: null,\n\n excerpt: null,\n};\n","// Rename CustomExtractor\n// to fit your publication\n// (e.g., NYTimesExtractor)\nexport const MSNExtractor = {\n domain: 'www.msn.com',\n title: {\n selectors: [\n 'h1',\n // enter title selectors\n ],\n },\n\n author: {\n selectors: [\n 'span.authorname-txt',\n // enter author selectors\n ],\n },\n\n content: {\n selectors: [\n 'div.richtext',\n // enter content selectors\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: [\n ],\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n 'span.caption',\n\n ],\n },\n\n date_published: {\n selectors: [\n 'span.time',\n ],\n },\n\n lead_image_url: {\n selectors: [\n\n ],\n },\n\n dek: {\n selectors: [\n ],\n },\n\n next_page_url: null,\n\n excerpt: null,\n};\n","// Rename CustomExtractor\n// to fit your publication\n// (e.g., NYTimesExtractor)\nexport const YahooExtractor = {\n domain: 'www.yahoo.com',\n title: {\n selectors: [\n 'header.canvas-header',\n // enter title selectors\n ],\n },\n\n author: {\n selectors: [\n 'span.provider-name',\n // enter author selectors\n ],\n },\n\n content: {\n selectors: [\n // enter content selectors\n '.content-canvas',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: [\n ],\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n '.figure-caption',\n\n ],\n },\n\n date_published: {\n selectors: [\n ['time.date[datetime]', 'datetime'],\n ],\n },\n\n lead_image_url: {\n selectors: [\n ['meta[name=\"og:image\"]', 'value'],\n ],\n },\n\n dek: {\n selectors: [\n // enter dek selectors\n ],\n },\n\n next_page_url: null,\n\n excerpt: null,\n};\n","// Rename CustomExtractor\n// to fit your publication\n// (e.g., NYTimesExtractor)\nexport const BuzzfeedExtractor = {\n domain: 'www.buzzfeed.com',\n title: {\n selectors: [\n 'h1[id=\"post-title\"]',\n // enter title selectors\n ],\n },\n\n author: {\n selectors: [\n 'a[data-action=\"user/username\"]', 'byline__author',\n // enter author selectors\n ],\n },\n\n content: {\n selectors: [\n ['.longform_custom_header_media', '#buzz_sub_buzz'],\n '#buzz_sub_buzz',\n ],\n\n defaultCleaner: false,\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n h2: 'b',\n\n 'div.longform_custom_header_media': ($node) => {\n if ($node.has('img') && $node.has('.longform_header_image_source')) {\n return 'figure';\n }\n\n return null;\n },\n\n 'figure.longform_custom_header_media .longform_header_image_source':\n 'figcaption',\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n '.instapaper_ignore',\n '.suplist_list_hide .buzz_superlist_item .buzz_superlist_number_inline',\n '.share-box',\n '.print',\n ],\n },\n\n date_published: {\n selectors: [\n '.buzz-datetime',\n ],\n },\n\n lead_image_url: {\n selectors: [\n ['meta[name=\"og:image\"]', 'value'],\n ],\n },\n\n dek: {\n selectors: [\n ],\n },\n\n next_page_url: null,\n\n excerpt: null,\n};\n","// Rename CustomExtractor\n// to fit your publication\n// (e.g., NYTimesExtractor)\nexport const WikiaExtractor = {\n domain: 'fandom.wikia.com',\n title: {\n selectors: [\n 'h1.entry-title',\n // enter title selectors\n ],\n },\n\n author: {\n selectors: [\n '.author vcard', '.fn',\n // enter author selectors\n ],\n },\n\n content: {\n selectors: [\n '.grid-content',\n '.entry-content',\n // enter content selectors\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: [\n ],\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n\n ],\n },\n\n date_published: {\n selectors: [\n ['meta[name=\"article:published_time\"]', 'value'],\n ],\n },\n\n lead_image_url: {\n selectors: [\n ['meta[name=\"og:image\"]', 'value'],\n ],\n },\n\n dek: {\n selectors: [\n ],\n },\n\n next_page_url: null,\n\n excerpt: null,\n};\n","// Rename CustomExtractor\n// to fit your publication\n// (e.g., NYTimesExtractor)\nexport const LittleThingsExtractor = {\n domain: 'www.littlethings.com',\n title: {\n selectors: [\n 'h1.post-title',\n // enter title selectors\n ],\n },\n\n author: {\n selectors: [\n ['meta[name=\"author\"]', 'value'],\n // enter author selectors\n ],\n },\n\n content: {\n selectors: [\n // enter content selectors\n '.mainContentIntro',\n '.content-wrapper',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: [\n ],\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n\n ],\n },\n\n lead_image_url: {\n selectors: [\n ['meta[name=\"og:image\"]', 'value'],\n ],\n },\n\n next_page_url: null,\n\n excerpt: null,\n};\n","// Rename CustomExtractor\n// to fit your publication\n// (e.g., NYTimesExtractor)\nexport const PoliticoExtractor = {\n domain: 'www.politico.com',\n title: {\n selectors: [\n // enter title selectors\n ['meta[name=\"og:title\"]', 'value'],\n ],\n },\n\n author: {\n selectors: [\n '.story-main-content .byline .vcard',\n ],\n },\n\n content: {\n selectors: [\n // enter content selectors\n '.story-main-content',\n '.content-group', '.story-core',\n '.story-text',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: [\n ],\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n 'figcaption',\n ],\n },\n\n date_published: {\n selectors: [\n ['.story-main-content .timestamp time[datetime]', 'datetime'],\n\n ],\n },\n\n lead_image_url: {\n selectors: [\n // enter lead_image_url selectors\n ['meta[name=\"og:image\"]', 'value'],\n\n ],\n },\n\n dek: {\n selectors: [\n ],\n },\n\n next_page_url: null,\n\n excerpt: null,\n};\n","export const DeadspinExtractor = {\n domain: 'deadspin.com',\n\n supportedDomains: [\n 'jezebel.com',\n 'lifehacker.com',\n 'kotaku.com',\n 'gizmodo.com',\n 'jalopnik.com',\n 'kinja.com',\n ],\n\n title: {\n selectors: [\n 'h1.headline',\n ],\n },\n\n author: {\n selectors: [\n '.author',\n ],\n },\n\n content: {\n selectors: [\n '.post-content',\n '.entry-content',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n 'iframe.lazyload[data-recommend-id^=\"youtube://\"]': ($node) => {\n const youtubeId = $node.attr('id').split('youtube-')[1];\n $node.attr('src', `https://www.youtube.com/embed/${youtubeId}`);\n },\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n '.magnifier',\n '.lightbox',\n ],\n },\n\n date_published: {\n selectors: [\n ['time.updated[datetime]', 'datetime'],\n ],\n },\n\n lead_image_url: {\n selectors: [\n ['meta[name=\"og:image\"]', 'value'],\n ],\n },\n\n dek: {\n selectors: [\n // enter selectors\n ],\n },\n\n next_page_url: {\n selectors: [\n // enter selectors\n ],\n },\n\n excerpt: {\n selectors: [\n // enter selectors\n ],\n },\n};\n","// Rename CustomExtractor\n// to fit your publication\n// (e.g., NYTimesExtractor)\nexport const BroadwayWorldExtractor = {\n domain: 'www.broadwayworld.com',\n title: {\n selectors: [\n 'h1.article-title',\n ],\n },\n\n author: {\n selectors: [\n 'span[itemprop=author]',\n ],\n },\n\n content: {\n selectors: [\n 'div[itemprop=articlebody]',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n\n ],\n },\n\n date_published: {\n selectors: [\n ['meta[itemprop=datePublished]', 'value'],\n ],\n },\n\n lead_image_url: {\n selectors: [\n ['meta[name=\"og:image\"]', 'value'],\n ],\n },\n\n dek: {\n selectors: [\n ],\n },\n\n next_page_url: {\n selectors: [\n // enter selectors\n ],\n },\n\n excerpt: {\n selectors: [\n // enter selectors\n ],\n },\n};\n","// Rename CustomExtractor\n// to fit your publication\n// (e.g., NYTimesExtractor)\nexport const ApartmentTherapyExtractor = {\n domain: 'www.apartmenttherapy.com',\n title: {\n selectors: [\n 'h1.headline',\n ],\n },\n\n author: {\n selectors: [\n '.PostByline__name',\n ],\n },\n\n content: {\n selectors: [\n 'div.post__content',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n 'div[data-render-react-id=\"images/LazyPicture\"]': ($node, $) => {\n const data = JSON.parse($node.attr('data-props'));\n const { src } = data.sources[0];\n const $img = $('<img />').attr('src', src);\n $node.replaceWith($img);\n },\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n\n ],\n },\n\n date_published: {\n selectors: [\n ['.PostByline__timestamp[datetime]', 'datetime'],\n ],\n },\n\n lead_image_url: {\n selectors: [\n ['meta[name=\"og:image\"]', 'value'],\n ],\n },\n\n dek: {\n selectors: [\n ],\n },\n\n next_page_url: {\n selectors: [\n // enter selectors\n ],\n },\n\n excerpt: {\n selectors: [\n // enter selectors\n ],\n },\n};\n","export const MediumExtractor = {\n domain: 'medium.com',\n\n supportedDomains: [\n 'trackchanges.postlight.com',\n ],\n\n title: {\n selectors: [\n 'h1',\n ],\n },\n\n author: {\n selectors: [\n ['meta[name=\"author\"]', 'value'],\n ],\n },\n\n content: {\n selectors: [\n ['.section-content'],\n '.section-content',\n 'article > div > section',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n // Re-write lazy-loaded youtube videos\n iframe: ($node) => {\n const ytRe =\n /https:\\/\\/i.embed.ly\\/.+url=https:\\/\\/i\\.ytimg\\.com\\/vi\\/(\\w+)\\//;\n const thumb = decodeURIComponent($node.attr('data-thumbnail'));\n\n if (ytRe.test(thumb)) {\n const [_, youtubeId] = thumb.match(ytRe) // eslint-disable-line\n $node.attr('src', `https://www.youtube.com/embed/${youtubeId}`);\n const $parent = $node.parents('figure');\n const $caption = $parent.find('figcaption');\n $parent.empty().append([$node, $caption]);\n }\n },\n\n // rewrite figures to pull out image and caption, remove rest\n figure: ($node) => {\n // ignore if figure has an iframe\n if ($node.find('iframe').length > 0) return;\n\n const $img = $node.find('img').slice(-1)[0];\n const $caption = $node.find('figcaption');\n $node.empty().append([$img, $caption]);\n },\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n\n ],\n },\n\n date_published: {\n selectors: [\n ['time[datetime]', 'datetime'],\n ],\n },\n\n lead_image_url: {\n selectors: [\n ['meta[name=\"og:image\"]', 'value'],\n ],\n },\n\n dek: {\n selectors: [\n // enter selectors\n ],\n },\n\n next_page_url: {\n selectors: [\n // enter selectors\n ],\n },\n\n excerpt: {\n selectors: [\n // enter selectors\n ],\n },\n};\n","export const WwwTmzComExtractor = {\n domain: 'www.tmz.com',\n\n title: {\n selectors: [\n '.post-title-breadcrumb',\n 'h1',\n '.headline',\n ],\n },\n\n author: 'TMZ STAFF',\n\n date_published: {\n selectors: [\n '.article-posted-date',\n ],\n\n timezone: 'America/Los_Angeles',\n },\n\n dek: {\n selectors: [\n // enter selectors\n ],\n },\n\n lead_image_url: {\n selectors: [\n ['meta[name=\"og:image\"]', 'value'],\n ],\n },\n\n content: {\n selectors: [\n '.article-content',\n '.all-post-body',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n '.lightbox-link',\n ],\n },\n};\n","export const WwwWashingtonpostComExtractor = {\n domain: 'www.washingtonpost.com',\n\n title: {\n selectors: [\n 'h1',\n '#topper-headline-wrapper',\n ],\n },\n\n author: {\n selectors: [\n '.pb-byline',\n ],\n },\n\n date_published: {\n selectors: [\n ['.pb-timestamp[itemprop=\"datePublished\"]', 'content'],\n ],\n },\n\n dek: {\n selectors: [\n ],\n },\n\n lead_image_url: {\n selectors: [\n ['meta[name=\"og:image\"]', 'value'],\n ],\n },\n\n content: {\n selectors: [\n '.article-body',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n 'div.inline-content': ($node) => {\n if ($node.has('img,iframe,video').length > 0) {\n return 'figure';\n }\n\n $node.remove();\n return null;\n },\n '.pb-caption': 'figcaption',\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n '.interstitial-link',\n '.newsletter-inline-unit',\n ],\n },\n};\n","export const WwwHuffingtonpostComExtractor = {\n domain: 'www.huffingtonpost.com',\n\n title: {\n selectors: [\n 'h1.headline__title',\n ],\n },\n\n author: {\n selectors: [\n 'span.author-card__details__name',\n ],\n },\n\n date_published: {\n selectors: [\n ['meta[name=\"article:modified_time\"]', 'value'],\n ['meta[name=\"article:published_time\"]', 'value'],\n ],\n },\n\n dek: {\n selectors: [\n 'h2.headline__subtitle',\n ],\n },\n\n lead_image_url: {\n selectors: [\n ['meta[name=\"og:image\"]', 'value'],\n ],\n },\n\n content: {\n selectors: [\n 'div.entry__body',\n ],\n\n defaultCleaner: false,\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n // 'div.top-media': ($node) => {\n // const $figure = $node.children('figure');\n // $node.replaceWith($figure);\n // },\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n '.pull-quote',\n '.tag-cloud',\n '.embed-asset',\n '.below-entry',\n '.entry-corrections',\n '#suggested-story',\n ],\n },\n};\n","export const NewrepublicComExtractor = {\n domain: 'newrepublic.com',\n\n title: {\n selectors: [\n 'h1.article-headline',\n '.minutes-primary h1.minute-title',\n ],\n },\n\n author: {\n selectors: [\n 'div.author-list',\n '.minutes-primary h3.minute-byline',\n ],\n },\n\n date_published: {\n selectors: [\n ['meta[name=\"article:published_time\"]', 'value'],\n ],\n\n timezone: 'America/New_York',\n },\n\n dek: {\n selectors: [\n 'h2.article-subhead',\n ],\n },\n\n lead_image_url: {\n selectors: [\n ['meta[name=\"og:image\"]', 'value'],\n ],\n },\n\n content: {\n selectors: [\n ['.article-cover', 'div.content-body'],\n ['.minute-image', '.minutes-primary div.content-body'],\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n 'aside',\n ],\n },\n};\n","export const MoneyCnnComExtractor = {\n domain: 'money.cnn.com',\n\n title: {\n selectors: [\n '.article-title',\n ],\n },\n\n author: {\n selectors: [\n '.byline a',\n ],\n },\n\n date_published: {\n selectors: [\n ['meta[name=\"date\"]', 'value'],\n ],\n\n timezone: 'GMT',\n },\n\n dek: {\n selectors: [\n '#storytext h2',\n ],\n },\n\n lead_image_url: {\n selectors: [\n ['meta[name=\"og:image\"]', 'value'],\n ],\n },\n\n content: {\n selectors: [\n '#storytext',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n '.inStoryHeading',\n ],\n },\n};\n","export const WwwThevergeComExtractor = {\n domain: 'www.theverge.com',\n\n supportedDomains: ['www.polygon.com'],\n\n title: {\n selectors: [\n 'h1',\n ],\n },\n\n author: {\n selectors: [\n ['meta[name=\"author\"]', 'value'],\n ],\n },\n\n date_published: {\n selectors: [\n ['meta[name=\"article:published_time\"]', 'value'],\n ],\n },\n\n dek: {\n selectors: [\n 'h2.p-dek',\n ],\n },\n\n lead_image_url: {\n selectors: [\n ['meta[name=\"og:image\"]', 'value'],\n ],\n },\n\n content: {\n selectors: [\n // feature template multi-match\n ['.c-entry-hero .e-image', '.c-entry-intro', '.c-entry-content'],\n // regular post multi-match\n ['.e-image--hero', '.c-entry-content'],\n // feature template fallback\n '.l-wrapper .l-feature',\n // regular post fallback\n 'div.c-entry-content',\n ],\n\n // Transform lazy-loaded images\n transforms: {\n noscript: ($node) => {\n const $children = $node.children();\n if ($children.length === 1 && $children.get(0).tagName === 'img') {\n return 'span';\n }\n\n return null;\n },\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n '.aside',\n 'img.c-dynamic-image', // images come from noscript transform\n ],\n },\n};\n","export const WwwCnnComExtractor = {\n domain: 'www.cnn.com',\n\n title: {\n selectors: [\n 'h1.pg-headline',\n 'h1',\n ],\n },\n\n author: {\n selectors: [\n '.metadata__byline__author',\n ],\n },\n\n date_published: {\n selectors: [\n ['meta[name=\"pubdate\"]', 'value'],\n ],\n },\n\n lead_image_url: {\n selectors: [\n ['meta[name=\"og:image\"]', 'value'],\n ],\n },\n\n content: {\n selectors: [\n // a more specific selector to grab the lead image and the body\n ['.media__video--thumbnail', '.zn-body-text'],\n // a fallback for the above\n '.zn-body-text',\n 'div[itemprop=\"articleBody\"]',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n '.zn-body__paragraph, .el__leafmedia--sourced-paragraph': ($node) => {\n const $text = $node.html();\n if ($text) {\n return 'p';\n }\n\n return null;\n },\n\n // this transform cleans the short, all-link sections linking\n // to related content but not marked as such in any way.\n '.zn-body__paragraph': ($node) => {\n if ($node.has('a')) {\n if ($node.text().trim() === $node.find('a').text().trim()) {\n $node.remove();\n }\n }\n },\n\n '.media__video--thumbnail': 'figure',\n\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n ],\n },\n};\n","export const WwwAolComExtractor = {\n domain: 'www.aol.com',\n\n title: {\n selectors: [\n 'h1.p-article__title',\n ],\n },\n\n author: {\n selectors: [\n ['meta[name=\"author\"]', 'value'],\n ],\n },\n\n date_published: {\n selectors: [\n '.p-article__byline__date',\n ],\n\n timezone: 'America/New_York',\n },\n\n dek: {\n selectors: [\n // enter selectors\n ],\n },\n\n lead_image_url: {\n selectors: [\n ['meta[name=\"og:image\"]', 'value'],\n ],\n },\n\n content: {\n selectors: [\n '.article-content',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n\n ],\n },\n};\n","export const WwwYoutubeComExtractor = {\n domain: 'www.youtube.com',\n\n title: {\n selectors: [\n '.watch-title',\n 'h1.watch-title-container',\n ],\n },\n\n author: {\n selectors: [\n '.yt-user-info',\n ],\n },\n\n date_published: {\n selectors: [\n ['meta[itemProp=\"datePublished\"]', 'value'],\n ],\n\n timezone: 'GMT',\n },\n\n dek: {\n selectors: [\n // enter selectors\n ],\n },\n\n lead_image_url: {\n selectors: [\n ['meta[name=\"og:image\"]', 'value'],\n ],\n },\n\n content: {\n defaultCleaner: false,\n\n selectors: [\n ['#player-api', '#eow-description'],\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n '#player-api': ($node, $) => {\n const videoId = $('meta[itemProp=\"videoId\"]').attr('value');\n $node.html(`\n <iframe src=\"https://www.youtube.com/embed/${videoId}\" frameborder=\"0\" allowfullscreen></iframe>`\n );\n },\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n\n ],\n },\n};\n","export const WwwTheguardianComExtractor = {\n domain: 'www.theguardian.com',\n\n title: {\n selectors: [\n '.content__headline',\n ],\n },\n\n author: {\n selectors: [\n 'p.byline',\n ],\n },\n\n date_published: {\n selectors: [\n ['meta[name=\"article:published_time\"]', 'value'],\n ],\n },\n\n dek: {\n selectors: [\n '.content__standfirst',\n ],\n },\n\n lead_image_url: {\n selectors: [\n ['meta[name=\"og:image\"]', 'value'],\n ],\n },\n\n content: {\n selectors: [\n '.content__article-body',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n '.hide-on-mobile',\n '.inline-icon',\n ],\n },\n};\n","export const WwwSbnationComExtractor = {\n domain: 'www.sbnation.com',\n\n title: {\n selectors: [\n 'h1.c-page-title',\n ],\n },\n\n author: {\n selectors: [\n ['meta[name=\"author\"]', 'value'],\n ],\n },\n\n date_published: {\n selectors: [\n ['meta[name=\"article:published_time\"]', 'value'],\n ],\n },\n\n dek: {\n selectors: [\n 'h2.c-entry-summary.p-dek',\n ],\n },\n\n lead_image_url: {\n selectors: [\n ['meta[name=\"og:image\"]', 'value'],\n ],\n },\n\n content: {\n selectors: [\n 'div.c-entry-content',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n\n ],\n },\n};\n","export const WwwBloombergComExtractor = {\n domain: 'www.bloomberg.com',\n\n title: {\n selectors: [\n // normal articles\n '.lede-headline',\n\n // /graphics/ template\n 'h1.article-title',\n\n // /news/ template\n 'h1.lede-text-only__hed',\n ],\n },\n\n author: {\n selectors: [\n ['meta[name=\"parsely-author\"]', 'value'],\n '.byline-details__link',\n\n // /graphics/ template\n '.bydek',\n\n // /news/ template\n '.author',\n ],\n },\n\n date_published: {\n selectors: [\n ['time.published-at', 'datetime'],\n ['time[datetime]', 'datetime'],\n ['meta[name=\"date\"]', 'value'],\n ['meta[name=\"parsely-pub-date\"]', 'value'],\n ],\n },\n\n dek: {\n selectors: [\n ],\n },\n\n lead_image_url: {\n selectors: [\n ['meta[name=\"og:image\"]', 'value'],\n ],\n },\n\n content: {\n selectors: [\n '.article-body__content',\n\n // /graphics/ template\n ['section.copy-block'],\n\n // /news/ template\n '.body-copy',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n '.inline-newsletter',\n '.page-ad',\n ],\n },\n};\n","export const WwwBustleComExtractor = {\n domain: 'www.bustle.com',\n\n title: {\n selectors: [\n 'h1.post-page__title',\n ],\n },\n\n author: {\n selectors: [\n 'div.content-meta__author',\n ],\n },\n\n date_published: {\n selectors: [\n ['time.content-meta__published-date[datetime]', 'datetime'],\n ],\n },\n\n lead_image_url: {\n selectors: [\n ['meta[name=\"og:image\"]', 'value'],\n ],\n },\n\n content: {\n selectors: [\n '.post-page__body',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n\n ],\n },\n};\n","export const WwwNprOrgExtractor = {\n domain: 'www.npr.org',\n\n title: {\n selectors: [\n 'h1',\n '.storytitle',\n ],\n },\n\n author: {\n selectors: [\n 'p.byline__name.byline__name--block',\n ],\n },\n\n date_published: {\n selectors: [\n ['.dateblock time[datetime]', 'datetime'],\n ['meta[name=\"date\"]', 'value'],\n ],\n },\n\n lead_image_url: {\n selectors: [\n ['meta[name=\"og:image\"]', 'value'],\n ['meta[name=\"twitter:image:src\"]', 'value'],\n ],\n },\n\n content: {\n selectors: [\n '.storytext',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n '.bucketwrap.image': 'figure',\n '.bucketwrap.image .credit-caption': 'figcaption',\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n 'div.enlarge_measure',\n ],\n },\n};\n","export const WwwRecodeNetExtractor = {\n domain: 'www.recode.net',\n\n title: {\n selectors: [\n 'h1.c-page-title',\n ],\n },\n\n author: {\n selectors: [\n ['meta[name=\"author\"]', 'value'],\n ],\n },\n\n date_published: {\n selectors: [\n ['meta[name=\"article:published_time\"]', 'value'],\n ],\n },\n\n dek: {\n selectors: [\n 'h2.c-entry-summary.p-dek',\n ],\n },\n\n lead_image_url: {\n selectors: [\n ['meta[name=\"og:image\"]', 'value'],\n ],\n },\n\n content: {\n selectors: [\n ['figure.e-image--hero', '.c-entry-content'],\n '.c-entry-content',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n\n ],\n },\n};\n","export const QzComExtractor = {\n domain: 'qz.com',\n\n title: {\n selectors: [\n 'header.item-header.content-width-responsive',\n ],\n },\n\n author: {\n selectors: [\n ['meta[name=\"author\"]', 'value'],\n ],\n },\n\n date_published: {\n selectors: [\n '.timestamp',\n ],\n },\n\n lead_image_url: {\n selectors: [\n ['meta[name=\"og:image\"]', 'value'],\n ],\n },\n\n content: {\n selectors: [\n ['figure.featured-image', '.item-body'],\n '.item-body',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n '.article-aside',\n '.progressive-image-thumbnail',\n ],\n },\n};\n","export const WwwDmagazineComExtractor = {\n domain: 'www.dmagazine.com',\n\n title: {\n selectors: [\n 'h1.story__title',\n ],\n },\n\n author: {\n selectors: [\n '.story__info .story__info__item:first-child',\n ],\n },\n\n date_published: {\n selectors: [\n // enter selectors\n '.story__info',\n ],\n\n timezone: 'America/Chicago',\n },\n\n dek: {\n selectors: [\n '.story__subhead',\n ],\n },\n\n lead_image_url: {\n selectors: [\n ['article figure a:first-child', 'href'],\n ],\n },\n\n content: {\n selectors: [\n '.story__content',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n\n ],\n },\n};\n","export const WwwReutersComExtractor = {\n domain: 'www.reuters.com',\n\n title: {\n selectors: [\n 'h1.article-headline',\n ],\n },\n\n author: {\n selectors: [\n '.author',\n ],\n },\n\n date_published: {\n selectors: [\n ['meta[name=\"og:article:published_time\"]', 'value'],\n ],\n },\n\n lead_image_url: {\n selectors: [\n ['meta[name=\"og:image\"]', 'value'],\n ],\n },\n\n content: {\n selectors: [\n '#article-text',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n '.article-subtitle': 'h4',\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n '#article-byline .author',\n // 'span.location',\n // 'span.articleLocation',\n ],\n },\n};\n","export const MashableComExtractor = {\n domain: 'mashable.com',\n\n title: {\n selectors: [\n 'h1.title',\n ],\n },\n\n author: {\n selectors: [\n 'span.author_name a',\n ],\n },\n\n date_published: {\n selectors: [\n ['meta[name=\"og:article:published_time\"]', 'value'],\n ],\n },\n\n lead_image_url: {\n selectors: [\n ['meta[name=\"og:image\"]', 'value'],\n ],\n },\n\n content: {\n selectors: [\n 'section.article-content.blueprint',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n '.image-credit': 'figcaption',\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n\n ],\n },\n};\n","export const WwwChicagotribuneComExtractor = {\n domain: 'www.chicagotribune.com',\n\n title: {\n selectors: [\n 'h1.trb_ar_hl_t',\n ],\n },\n\n author: {\n selectors: [\n 'span.trb_ar_by_nm_au',\n ],\n },\n\n date_published: {\n selectors: [\n ['meta[itemprop=\"datePublished\"]', 'value'],\n ],\n },\n\n lead_image_url: {\n selectors: [\n ['meta[name=\"og:image\"]', 'value'],\n ],\n },\n\n content: {\n selectors: [\n 'div.trb_ar_page',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n\n ],\n },\n};\n","export const WwwVoxComExtractor = {\n domain: 'www.vox.com',\n\n title: {\n selectors: [\n 'h1.c-page-title',\n ],\n },\n\n author: {\n selectors: [\n ['meta[name=\"author\"]', 'value'],\n ],\n },\n\n date_published: {\n selectors: [\n ['meta[name=\"article:published_time\"]', 'value'],\n ],\n },\n\n dek: {\n selectors: [\n '.p-dek',\n ],\n },\n\n lead_image_url: {\n selectors: [\n ['meta[name=\"og:image\"]', 'value'],\n ],\n },\n\n content: {\n selectors: [\n ['figure.e-image--hero', '.c-entry-content'],\n '.c-entry-content',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n 'figure .e-image__image noscript': ($node) => {\n const imgHtml = $node.html();\n $node.parents('.e-image__image').find('.c-dynamic-image').replaceWith(imgHtml);\n },\n\n 'figure .e-image__meta': 'figcaption',\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n\n ],\n },\n};\n","export const NewsNationalgeographicComExtractor = {\n domain: 'news.nationalgeographic.com',\n\n title: {\n selectors: [\n 'h1',\n 'h1.main-title',\n ],\n },\n\n author: {\n selectors: [\n '.byline-component__contributors b span',\n ],\n },\n\n date_published: {\n selectors: [\n ['meta[name=\"article:published_time\"]', 'value'],\n ],\n format: 'ddd MMM DD HH:mm:ss zz YYYY',\n timezone: 'EST',\n },\n\n dek: {\n selectors: [\n '.article__deck',\n ],\n },\n\n lead_image_url: {\n selectors: [\n ['meta[name=\"og:image\"]', 'value'],\n ],\n },\n\n content: {\n selectors: [\n ['.parsys.content', '.__image-lead__'],\n '.content',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n '.parsys.content': ($node, $) => {\n const $imgSrc = $node.find('.image.parbase.section')\n .find('.picturefill')\n .first()\n .data('platform-src');\n if ($imgSrc) {\n $node.prepend($(`<img class=\"__image-lead__\" src=\"${$imgSrc}\"/>`));\n }\n },\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n '.pull-quote.pull-quote--large',\n ],\n },\n};\n","export const WwwNationalgeographicComExtractor = {\n domain: 'www.nationalgeographic.com',\n\n title: {\n selectors: [\n 'h1',\n 'h1.main-title',\n ],\n },\n\n author: {\n selectors: [\n '.byline-component__contributors b span',\n ],\n },\n\n date_published: {\n selectors: [\n ['meta[name=\"article:published_time\"]', 'value'],\n ],\n },\n\n dek: {\n selectors: [\n '.article__deck',\n ],\n },\n\n lead_image_url: {\n selectors: [\n ['meta[name=\"og:image\"]', 'value'],\n ],\n },\n\n content: {\n selectors: [\n ['.parsys.content', '.__image-lead__'],\n '.content',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n '.parsys.content': ($node, $) => {\n const $imageParent = $node.children().first();\n if ($imageParent.hasClass('imageGroup')) {\n const $dataAttrContainer = $imageParent.find('.media--medium__container').children().first();\n const imgPath1 = $dataAttrContainer.data('platform-image1-path');\n const imgPath2 = $dataAttrContainer.data('platform-image2-path');\n if (imgPath2 && imgPath1) {\n $node.prepend($(`<div class=\"__image-lead__\">\n <img src=\"${imgPath1}\"/>\n <img src=\"${imgPath2}\"/>\n </div>`));\n }\n } else {\n const $imgSrc = $node.find('.image.parbase.section')\n .find('.picturefill')\n .first()\n .data('platform-src');\n if ($imgSrc) {\n $node.prepend($(`<img class=\"__image-lead__\" src=\"${$imgSrc}\"/>`));\n }\n }\n },\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n '.pull-quote.pull-quote--small',\n ],\n },\n};\n","export const WwwLatimesComExtractor = {\n domain: 'www.latimes.com',\n\n title: {\n selectors: [\n '.trb_ar_hl',\n ],\n },\n\n author: {\n selectors: [\n ['meta[name=\"author\"]', 'value'],\n ],\n },\n\n date_published: {\n selectors: [\n ['meta[itemprop=\"datePublished\"]', 'value'],\n ],\n },\n\n lead_image_url: {\n selectors: [\n ['meta[name=\"og:image\"]', 'value'],\n ],\n },\n\n content: {\n selectors: [\n '.trb_ar_main',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n '.trb_ar_la': ($node) => {\n const $figure = $node.find('figure');\n $node.replaceWith($figure);\n },\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n '.trb_ar_by',\n '.trb_ar_cr',\n ],\n },\n};\n","export const PagesixComExtractor = {\n domain: 'pagesix.com',\n\n supportedDomains: [\n 'nypost.com',\n ],\n\n title: {\n selectors: [\n 'h1 a',\n ],\n },\n\n author: {\n selectors: [\n '.byline',\n ],\n },\n\n date_published: {\n selectors: [\n ['meta[name=\"article:published_time\"]', 'value'],\n ],\n },\n\n dek: {\n selectors: [\n ['meta[name=\"description\"]', 'value'],\n ],\n },\n\n lead_image_url: {\n selectors: [\n ['meta[name=\"og:image\"]', 'value'],\n ],\n },\n\n content: {\n selectors: [\n ['#featured-image-wrapper', '.entry-content'],\n '.entry-content',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n '#featured-image-wrapper': 'figure',\n '.wp-caption-text': 'figcaption',\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n '.modal-trigger',\n ],\n },\n};\n","export const ThefederalistpapersOrgExtractor = {\n domain: 'thefederalistpapers.org',\n\n title: {\n selectors: [\n 'h1.entry-title',\n ],\n },\n\n author: {\n selectors: [\n 'main span.entry-author-name',\n ],\n },\n\n date_published: {\n selectors: [\n ['meta[name=\"article:published_time\"]', 'value'],\n ],\n },\n\n lead_image_url: {\n selectors: [\n ['meta[name=\"og:image\"]', 'value'],\n ],\n },\n\n content: {\n selectors: [\n '.entry-content',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n ['p[style]'],\n ],\n },\n};\n","export const WwwCbssportsComExtractor = {\n domain: 'www.cbssports.com',\n\n title: {\n selectors: [\n '.article-headline',\n ],\n },\n\n author: {\n selectors: [\n '.author-name',\n ],\n },\n\n date_published: {\n selectors: [\n ['.date-original-reading-time time', 'datetime'],\n ],\n timezone: 'UTC',\n },\n\n dek: {\n selectors: [\n '.article-subline',\n ],\n },\n\n lead_image_url: {\n selectors: [\n ['meta[name=\"og:image\"]', 'value'],\n ],\n },\n\n content: {\n selectors: [\n '.article',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n\n ],\n },\n};\n","export const WwwMsnbcComExtractor = {\n domain: 'www.msnbc.com',\n\n title: {\n selectors: [\n 'h1',\n 'h1.is-title-pane',\n ],\n },\n\n author: {\n selectors: [\n '.author',\n ],\n },\n\n date_published: {\n selectors: [\n ['meta[name=\"DC.date.issued\"]', 'value'],\n ],\n },\n\n dek: {\n selectors: [\n ['meta[name=\"description\"]', 'value'],\n ],\n },\n\n lead_image_url: {\n selectors: [\n ['meta[name=\"og:image\"]', 'value'],\n ],\n },\n\n content: {\n selectors: [\n '.pane-node-body',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n '.pane-node-body': ($node, $) => {\n const [selector, attr] = WwwMsnbcComExtractor.lead_image_url.selectors[0];\n const src = $(selector).attr(attr);\n if (src) {\n $node.prepend(`<img src=\"${src}\" />`);\n }\n },\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n\n ],\n },\n};\n","export const WwwThepoliticalinsiderComExtractor = {\n domain: 'www.thepoliticalinsider.com',\n\n title: {\n selectors: [\n ['meta[name=\"sailthru.title\"]', 'value'],\n ],\n },\n\n author: {\n selectors: [\n ['meta[name=\"sailthru.author\"]', 'value'],\n ],\n },\n\n date_published: {\n selectors: [\n ['meta[name=\"sailthru.date\"]', 'value'],\n ],\n timezone: 'America/New_York',\n },\n\n dek: {\n selectors: [\n // enter selectors\n ],\n },\n\n lead_image_url: {\n selectors: [\n ['meta[name=\"og:image\"]', 'value'], // enter selectors\n ],\n },\n\n content: {\n selectors: [\n 'div#article-body',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n\n ],\n },\n};\n","export const WwwMentalflossComExtractor = {\n domain: 'www.mentalfloss.com',\n\n title: {\n selectors: [\n 'h1.title',\n '.title-group',\n '.inner',\n ],\n },\n\n author: {\n selectors: [\n '.field-name-field-enhanced-authors',\n ],\n },\n\n date_published: {\n selectors: [\n '.date-display-single',\n ],\n timezone: 'America/New_York',\n },\n\n lead_image_url: {\n selectors: [\n ['meta[name=\"og:image\"]', 'value'],\n ],\n },\n\n content: {\n selectors: [\n 'div.field.field-name-body',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n\n ],\n },\n};\n","export const AbcnewsGoComExtractor = {\n domain: 'abcnews.go.com',\n\n title: {\n selectors: [\n '.article-header h1',\n ],\n },\n\n author: {\n selectors: [\n '.authors',\n ],\n clean: [\n '.author-overlay',\n '.by-text',\n ],\n },\n\n date_published: {\n selectors: [\n '.timestamp',\n ],\n timezone: 'America/New_York',\n\n },\n\n lead_image_url: {\n selectors: [\n ['meta[name=\"og:image\"]', 'value'],\n ],\n },\n\n content: {\n selectors: [\n '.article-copy',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n\n ],\n },\n};\n","export const WwwNydailynewsComExtractor = {\n domain: 'www.nydailynews.com',\n\n title: {\n selectors: [\n 'h1#ra-headline',\n ],\n },\n\n author: {\n selectors: [\n ['meta[name=\"parsely-author\"]', 'value'],\n ],\n },\n\n date_published: {\n selectors: [\n ['meta[name=\"sailthru.date\"]', 'value'],\n ],\n },\n\n lead_image_url: {\n selectors: [\n ['meta[name=\"og:image\"]', 'value'],\n ],\n },\n\n content: {\n selectors: [\n 'article#ra-body',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n 'dl#ra-tags',\n '.ra-related',\n 'a.ra-editor',\n 'dl#ra-share-bottom',\n ],\n },\n};\n","export const WwwCnbcComExtractor = {\n domain: 'www.cnbc.com',\n\n title: {\n selectors: [\n 'h1.title',\n ],\n },\n\n author: {\n selectors: [\n ['meta[name=\"author\"]', 'value'],\n ],\n },\n\n date_published: {\n selectors: [\n ['meta[name=\"article:published_time\"]', 'value'],\n ],\n },\n\n lead_image_url: {\n selectors: [\n ['meta[name=\"og:image\"]', 'value'],\n ],\n },\n\n content: {\n selectors: [\n 'div#article_body.content',\n 'div.story',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n\n ],\n },\n};\n","export const WwwPopsugarComExtractor = {\n domain: 'www.popsugar.com',\n\n title: {\n selectors: [\n 'h2.post-title',\n 'title-text',\n ],\n },\n\n author: {\n selectors: [\n ['meta[name=\"article:author\"]', 'value'],\n ],\n },\n\n date_published: {\n selectors: [\n ['meta[name=\"article:published_time\"]', 'value'],\n ],\n },\n\n lead_image_url: {\n selectors: [\n ['meta[name=\"og:image\"]', 'value'],\n ],\n },\n\n content: {\n selectors: [\n '#content',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n '.share-copy-title',\n '.post-tags',\n '.reactions',\n ],\n },\n};\n","export const ObserverComExtractor = {\n domain: 'observer.com',\n\n title: {\n selectors: [\n 'h1.entry-title',\n ],\n },\n\n author: {\n selectors: [\n '.author',\n '.vcard',\n ],\n },\n\n date_published: {\n selectors: [\n ['meta[name=\"article:published_time\"]', 'value'],\n ],\n },\n\n dek: {\n selectors: [\n 'h2.dek',\n ],\n },\n\n lead_image_url: {\n selectors: [\n ['meta[name=\"og:image\"]', 'value'],\n ],\n },\n\n content: {\n selectors: [\n 'div.entry-content',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n\n ],\n },\n};\n","export const PeopleComExtractor = {\n domain: 'people.com',\n\n title: {\n selectors: [\n ['meta[name=\"og:title\"]', 'value'],\n ],\n },\n\n author: {\n selectors: [\n 'a.author.url.fn',\n ],\n },\n\n date_published: {\n selectors: [\n ['meta[name=\"article:published_time\"]', 'value'],\n ],\n },\n\n lead_image_url: {\n selectors: [\n ['meta[name=\"og:image\"]', 'value'],\n ],\n },\n\n content: {\n selectors: [\n 'div.article-body__inner',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n\n ],\n },\n};\n","export const WwwUsmagazineComExtractor = {\n domain: 'www.usmagazine.com',\n\n title: {\n selectors: [\n 'header h1',\n ],\n },\n\n author: {\n selectors: [\n 'a.article-byline.tracked-offpage',\n ],\n },\n\n date_published: {\n timezone: 'America/New_York',\n\n selectors: [\n 'time.article-published-date',\n ],\n },\n\n lead_image_url: {\n selectors: [\n ['meta[name=\"og:image\"]', 'value'],\n ],\n },\n\n content: {\n selectors: [\n 'div.article-body-inner',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n '.module-related',\n ],\n },\n};\n","export const WwwRollingstoneComExtractor = {\n domain: 'www.rollingstone.com',\n\n title: {\n selectors: [\n 'h1.content-title',\n ],\n },\n\n author: {\n selectors: [\n 'a.content-author.tracked-offpage',\n ],\n },\n\n date_published: {\n selectors: [\n 'time.content-published-date',\n ],\n\n timezone: 'America/New_York',\n },\n\n dek: {\n selectors: [\n '.content-description',\n ],\n },\n\n lead_image_url: {\n selectors: [\n ['meta[name=\"og:image\"]', 'value'],\n ],\n },\n\n content: {\n selectors: [\n ['.lead-container', '.article-content'],\n '.article-content',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n '.module-related',\n ],\n },\n};\n","export const twofortysevensportsComExtractor = {\n domain: '247sports.com',\n\n title: {\n selectors: [\n 'title',\n 'article header h1',\n ],\n },\n\n author: {\n selectors: [\n '.author',\n ],\n },\n\n date_published: {\n selectors: [\n ['time[data-published]', 'data-published'],\n ],\n },\n\n lead_image_url: {\n selectors: [\n ['meta[name=\"og:image\"]', 'value'],\n ],\n },\n\n content: {\n selectors: [\n 'section.body.article',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n\n ],\n },\n};\n","export const UproxxComExtractor = {\n domain: 'uproxx.com',\n\n title: {\n selectors: [\n 'div.post-top h1',\n ],\n },\n\n author: {\n selectors: [\n '.post-top .authorname',\n ],\n },\n\n date_published: {\n selectors: [\n ['meta[name=\"article:published_time\"]', 'value'],\n ],\n },\n\n lead_image_url: {\n selectors: [\n ['meta[name=\"og:image\"]', 'value'],\n ],\n },\n\n content: {\n selectors: [\n '.post-body',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n 'div.image': 'figure',\n 'div.image .wp-media-credit': 'figcaption',\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n\n ],\n },\n};\n","export const WwwEonlineComExtractor = {\n domain: 'www.eonline.com',\n\n title: {\n selectors: [\n 'h1.article__title',\n ],\n },\n\n author: {\n selectors: [\n '.entry-meta__author a',\n ],\n },\n\n date_published: {\n selectors: [\n ['meta[itemprop=\"datePublished\"]', 'value'],\n ],\n },\n\n lead_image_url: {\n selectors: [\n ['meta[name=\"og:image\"]', 'value'],\n ],\n },\n\n content: {\n selectors: [\n ['.post-content section, .post-content div.post-content__image'],\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n 'div.post-content__image': 'figure',\n 'div.post-content__image .image__credits': 'figcaption',\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n\n ],\n },\n};\n","export const WwwMiamiheraldComExtractor = {\n domain: 'www.miamiherald.com',\n\n title: {\n selectors: [\n 'h1.title',\n ],\n },\n\n date_published: {\n selectors: [\n 'p.published-date',\n ],\n\n timezone: 'America/New_York',\n },\n\n lead_image_url: {\n selectors: [\n ['meta[name=\"og:image\"]', 'value'],\n ],\n },\n\n content: {\n selectors: [\n 'div.dateline-storybody',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n\n ],\n },\n};\n","export const WwwRefinery29ComExtractor = {\n domain: 'www.refinery29.com',\n\n title: {\n selectors: [\n 'h1.title',\n ],\n },\n\n author: {\n selectors: [\n '.contributor',\n ],\n },\n\n date_published: {\n selectors: [\n ['meta[name=\"sailthru.date\"]', 'value'],\n ],\n\n timezone: 'America/New_York',\n },\n\n lead_image_url: {\n selectors: [\n ['meta[name=\"og:image\"]', 'value'],\n ],\n },\n\n content: {\n selectors: [\n ['.full-width-opener', '.article-content'],\n '.article-content',\n '.body',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n 'div.loading noscript': ($node) => {\n const imgHtml = $node.html();\n $node.parents('.loading').replaceWith(imgHtml);\n },\n\n '.section-image': 'figure',\n\n '.section-image .content-caption': 'figcaption',\n\n '.section-text': 'p',\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n '.story-share',\n ],\n },\n};\n","export const WwwMacrumorsComExtractor = {\n domain: 'www.macrumors.com',\n\n title: {\n selectors: [\n 'h1',\n 'h1.title',\n ],\n },\n\n author: {\n selectors: [\n '.author-url',\n ],\n },\n\n date_published: {\n selectors: [\n '.article .byline',\n ],\n\n // Wednesday January 18, 2017 11:44 am PST\n format: 'dddd MMMM D, YYYY h:mm A zz',\n\n timezone: 'America/Los_Angeles',\n },\n\n dek: {\n selectors: [\n ['meta[name=\"description\"]', 'value'],\n ],\n },\n\n lead_image_url: {\n selectors: [\n ['meta[name=\"og:image\"]', 'value'],\n ],\n },\n\n content: {\n selectors: [\n '.article',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n\n ],\n },\n};\n","export const WwwAndroidcentralComExtractor = {\n domain: 'www.androidcentral.com',\n\n title: {\n selectors: [\n 'h1',\n 'h1.main-title',\n ],\n },\n\n author: {\n selectors: [\n '.meta-by',\n ],\n },\n\n date_published: {\n selectors: [\n ['meta[name=\"article:published_time\"]', 'value'],\n ],\n },\n\n dek: {\n selectors: [\n ['meta[name=\"og:description\"]', 'value'],\n ],\n },\n\n lead_image_url: {\n selectors: [\n ['.image-large', 'src'],\n ],\n },\n\n content: {\n selectors: [\n '.article-body',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n '.intro',\n 'blockquote',\n ],\n },\n};\n","export const WwwSiComExtractor = {\n domain: 'www.si.com',\n\n title: {\n selectors: [\n 'h1',\n 'h1.headline',\n ],\n },\n\n author: {\n selectors: [\n ['meta[name=\"author\"]', 'value'],\n ],\n },\n\n date_published: {\n selectors: [\n '.timestamp',\n ],\n\n timezone: 'America/New_York',\n },\n\n dek: {\n selectors: [\n '.quick-hit ul',\n ],\n },\n\n lead_image_url: {\n selectors: [\n ['meta[name=\"og:image\"]', 'value'],\n ],\n },\n\n content: {\n selectors: [\n ['p', '.marquee_large_2x', '.component.image'],\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n\n noscript: ($node) => {\n const $children = $node.children();\n if ($children.length === 1 && $children.get(0).tagName === 'img') {\n return 'figure';\n }\n\n return null;\n },\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n [\n '.inline-thumb',\n '.primary-message',\n '.description',\n '.instructions',\n ],\n ],\n },\n};\n","export const WwwRawstoryComExtractor = {\n domain: 'www.rawstory.com',\n\n title: {\n selectors: [\n '.blog-title',\n ],\n },\n\n author: {\n selectors: [\n '.blog-author a:first-of-type',\n ],\n },\n\n date_published: {\n selectors: [\n '.blog-author a:last-of-type',\n ],\n\n timezone: 'EST',\n },\n\n lead_image_url: {\n selectors: [\n ['meta[name=\"og:image\"]', 'value'],\n ],\n },\n\n content: {\n selectors: [\n '.blog-content',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n\n ],\n },\n};\n","export const WwwCnetComExtractor = {\n domain: 'www.cnet.com',\n\n title: {\n selectors: [\n ['meta[name=\"og:title\"]', 'value'],\n ],\n },\n\n author: {\n selectors: [\n 'a.author',\n ],\n },\n\n date_published: {\n selectors: [\n 'time',\n ],\n\n timezone: 'America/Los_Angeles',\n },\n\n dek: {\n selectors: [\n '.article-dek',\n ],\n },\n\n lead_image_url: {\n selectors: [\n ['meta[name=\"og:image\"]', 'value'],\n ],\n },\n\n content: {\n selectors: [\n ['img.__image-lead__', '.article-main-body'],\n '.article-main-body',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n 'figure.image': ($node) => {\n const $img = $node.find('img');\n $img.attr('width', '100%');\n $img.attr('height', '100%');\n $img.addClass('__image-lead__');\n $node.remove('.imgContainer').prepend($img);\n },\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n\n ],\n },\n};\n","export const WwwCinemablendComExtractor = {\n domain: 'www.cinemablend.com',\n\n title: {\n selectors: [\n '.story_title',\n ],\n },\n\n author: {\n selectors: [\n '.author',\n ],\n },\n\n date_published: {\n selectors: [\n ['meta[name=\"article:published_time\"]', 'value'],\n ],\n\n timezone: 'EST',\n },\n\n lead_image_url: {\n selectors: [\n ['meta[name=\"og:image\"]', 'value'],\n ],\n },\n\n content: {\n selectors: [\n 'div#wrap_left_content',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n\n ],\n },\n};\n","export const WwwTodayComExtractor = {\n domain: 'www.today.com',\n\n title: {\n selectors: [\n 'h1.entry-headline',\n ],\n },\n\n author: {\n selectors: [\n ['meta[name=\"author\"]', 'value'],\n ],\n },\n\n date_published: {\n selectors: [\n ['meta[name=\"DC.date.issued\"]', 'value'],\n ],\n },\n\n lead_image_url: {\n selectors: [\n ['meta[name=\"og:image\"]', 'value'],\n ],\n },\n\n content: {\n selectors: [\n '.entry-container',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n '.label-comment',\n ],\n },\n};\n","export const WwwHowtogeekComExtractor = {\n domain: 'www.howtogeek.com',\n\n title: {\n selectors: [\n 'title',\n ],\n },\n\n author: {\n selectors: [\n '#authorinfobox a',\n ],\n },\n\n date_published: {\n selectors: [\n '#authorinfobox + div li',\n ],\n timezone: 'GMT',\n },\n\n lead_image_url: {\n selectors: [\n ['meta[name=\"og:image\"]', 'value'],\n ],\n },\n\n content: {\n selectors: [\n '.thecontent',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n\n ],\n },\n};\n","export const WwwAlComExtractor = {\n domain: 'www.al.com',\n\n title: {\n selectors: [\n ['meta[name=\"title\"]', 'value'],\n ],\n },\n\n author: {\n selectors: [\n ['meta[name=\"article_author\"]', 'value'],\n ],\n },\n\n date_published: {\n selectors: [\n ['meta[name=\"article_date_original\"]', 'value'],\n ],\n timezone: 'EST',\n },\n\n lead_image_url: {\n selectors: [\n ['meta[name=\"og:image\"]', 'value'],\n ],\n },\n\n content: {\n selectors: [\n '.entry-content',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n\n ],\n },\n};\n","export const WwwThepennyhoarderComExtractor = {\n domain: 'www.thepennyhoarder.com',\n\n title: {\n selectors: [\n ['meta[name=\"dcterms.title\"]', 'value'],\n ],\n },\n\n author: {\n selectors: [\n ['link[rel=\"author\"]', 'title'],\n ],\n },\n\n date_published: {\n selectors: [\n ['meta[name=\"article:published_time\"]', 'value'],\n ],\n },\n\n lead_image_url: {\n selectors: [\n ['meta[name=\"og:image\"]', 'value'],\n ],\n },\n\n content: {\n selectors: [\n ['.post-img', '.post-text'],\n '.post-text',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n\n ],\n },\n};\n","export const WwwWesternjournalismComExtractor = {\n domain: 'www.westernjournalism.com',\n\n title: {\n selectors: [\n 'title',\n 'h1.entry-title',\n ],\n },\n\n author: {\n selectors: [\n ['meta[name=\"author\"]', 'value'],\n ],\n },\n\n date_published: {\n selectors: [\n ['meta[name=\"DC.date.issued\"]', 'value'],\n ],\n },\n\n dek: {\n selectors: [\n '.subtitle',\n ],\n },\n\n lead_image_url: {\n selectors: [\n ['meta[name=\"og:image\"]', 'value'],\n ],\n },\n\n content: {\n selectors: [\n 'div.article-sharing.top + div',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n '.ad-notice-small',\n ],\n },\n};\n","export const FusionNetExtractor = {\n domain: 'fusion.net',\n\n title: {\n selectors: [\n '.post-title',\n '.single-title',\n '.headline',\n ],\n },\n\n author: {\n selectors: [\n '.show-for-medium .byline',\n ],\n },\n\n date_published: {\n selectors: [\n ['time.local-time', 'datetime'],\n ],\n },\n\n dek: {\n selectors: [\n // enter selectors\n ],\n },\n\n lead_image_url: {\n selectors: [\n ['meta[name=\"og:image\"]', 'value'],\n ],\n },\n\n content: {\n selectors: [\n ['.post-featured-media', '.article-content'],\n '.article-content',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n '.fusion-youtube-oembed': 'figure',\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n\n ],\n },\n};\n","export const WwwAmericanowComExtractor = {\n domain: 'www.americanow.com',\n\n title: {\n selectors: [\n '.title',\n ['meta[name=\"title\"]', 'value'],\n ],\n },\n\n author: {\n selectors: [\n '.byline',\n ],\n },\n\n date_published: {\n selectors: [\n ['meta[name=\"publish_date\"]', 'value'],\n ],\n },\n\n dek: {\n selectors: [\n // enter selectors\n ],\n },\n\n lead_image_url: {\n selectors: [\n ['meta[name=\"og:image\"]', 'value'],\n ],\n },\n\n content: {\n selectors: [\n ['.article-content', '.image', '.body'],\n '.body',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n '.article-video-wrapper',\n '.show-for-small-only',\n ],\n },\n};\n","export const ScienceflyComExtractor = {\n domain: 'sciencefly.com',\n\n title: {\n selectors: [\n '.entry-title',\n '.cb-entry-title',\n '.cb-single-title',\n ],\n },\n\n author: {\n selectors: [\n 'div.cb-author',\n 'div.cb-author-title',\n ],\n },\n\n date_published: {\n selectors: [\n ['meta[name=\"article:published_time\"]', 'value'],\n ],\n },\n\n dek: {\n selectors: [\n // enter selectors\n ],\n },\n\n lead_image_url: {\n selectors: [\n ['div.theiaPostSlider_slides img', 'src'],\n ],\n },\n\n content: {\n selectors: [\n 'div.theiaPostSlider_slides',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n\n ],\n },\n};\n","export const HellogigglesComExtractor = {\n domain: 'hellogiggles.com',\n\n title: {\n selectors: [\n '.title',\n ],\n },\n\n author: {\n selectors: [\n '.author-link',\n ],\n },\n\n date_published: {\n selectors: [\n ['meta[name=\"article:published_time\"]', 'value'],\n ],\n },\n\n lead_image_url: {\n selectors: [\n ['meta[name=\"og:image\"]', 'value'],\n ],\n },\n\n content: {\n selectors: [\n '.entry-content',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n\n ],\n },\n};\n","export const ThoughtcatalogComExtractor = {\n domain: 'thoughtcatalog.com',\n\n title: {\n selectors: [\n 'h1.title',\n ['meta[name=\"og:title\"]', 'value'],\n ],\n },\n\n author: {\n selectors: [\n 'div.col-xs-12.article_header div.writer-container.writer-container-inline.writer-no-avatar h4.writer-name',\n 'h1.writer-name',\n ],\n },\n\n date_published: {\n selectors: [\n ['meta[name=\"article:published_time\"]', 'value'],\n ],\n },\n\n lead_image_url: {\n selectors: [\n ['meta[name=\"og:image\"]', 'value'],\n ],\n },\n\n content: {\n selectors: [\n '.entry.post',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n '.tc_mark',\n ],\n },\n};\n","export const WwwNjComExtractor = {\n domain: 'www.nj.com',\n\n title: {\n selectors: [\n ['meta[name=\"title\"]', 'value'],\n ],\n },\n\n author: {\n selectors: [\n ['meta[name=\"article_author\"]', 'value'],\n ],\n },\n\n date_published: {\n selectors: [\n ['meta[name=\"article_date_original\"]', 'value'],\n ],\n\n timezone: 'America/New_York',\n },\n\n lead_image_url: {\n selectors: [\n ['meta[name=\"og:image\"]', 'value'],\n ],\n },\n\n content: {\n selectors: [\n '.entry-content',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n\n ],\n },\n};\n","export const WwwInquisitrComExtractor = {\n domain: 'www.inquisitr.com',\n\n title: {\n selectors: [\n 'h1.entry-title.story--header--title',\n ],\n },\n\n author: {\n selectors: [\n 'div.story--header--author',\n ],\n },\n\n date_published: {\n selectors: [\n ['meta[name=\"datePublished\"]', 'value'],\n ],\n },\n\n lead_image_url: {\n selectors: [\n ['meta[name=\"og:image\"]', 'value'],\n ],\n },\n\n content: {\n selectors: [\n 'article.story',\n '.entry-content.',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n '.post-category',\n '.story--header--socials',\n '.story--header--content',\n ],\n },\n};\n","export const WwwNbcnewsComExtractor = {\n domain: 'www.nbcnews.com',\n\n title: {\n selectors: [\n 'div.article-hed h1',\n ],\n },\n\n author: {\n selectors: [\n 'span.byline_author',\n ],\n },\n\n date_published: {\n selectors: [\n ['.flag_article-wrapper time.timestamp_article[datetime]', 'datetime'],\n '.flag_article-wrapper time',\n ],\n\n timezone: 'America/New_York',\n },\n\n lead_image_url: {\n selectors: [\n ['meta[name=\"og:image\"]', 'value'],\n ],\n },\n\n content: {\n selectors: [\n 'div.article-body',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n\n ],\n },\n};\n","export const FortuneComExtractor = {\n domain: 'fortune.com',\n\n title: {\n selectors: [\n 'h1',\n ],\n },\n\n author: {\n selectors: [\n ['meta[name=\"author\"]', 'value'],\n ],\n },\n\n date_published: {\n selectors: [\n '.MblGHNMJ',\n ],\n\n timezone: 'UTC',\n },\n\n lead_image_url: {\n selectors: [\n ['meta[name=\"og:image\"]', 'value'],\n ],\n },\n\n content: {\n selectors: [\n ['picture', 'article.row'],\n 'article.row',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n\n ],\n },\n};\n","export const WwwLinkedinComExtractor = {\n domain: 'www.linkedin.com',\n\n title: {\n selectors: [\n '.article-title',\n 'h1',\n ],\n },\n\n author: {\n selectors: [\n ['meta[name=\"article:author\"]', 'value'],\n '.entity-name a[rel=author]',\n ],\n },\n\n date_published: {\n selectors: [\n ['time[itemprop=\"datePublished\"]', 'datetime'],\n ],\n\n timezone: 'America/Los_Angeles',\n },\n\n dek: {\n selectors: [\n // enter selectors\n ],\n },\n\n lead_image_url: {\n selectors: [\n ['meta[name=\"og:image\"]', 'value'],\n ],\n },\n\n content: {\n selectors: [\n ['header figure', '.prose'],\n '.prose',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n '.entity-image',\n ],\n },\n};\n","export const ObamawhitehouseArchivesGovExtractor = {\n domain: 'obamawhitehouse.archives.gov',\n\n supportedDomains: [\n 'whitehouse.gov',\n ],\n\n title: {\n selectors: [\n 'h1',\n '.pane-node-title',\n ],\n },\n\n author: {\n selectors: [\n '.blog-author-link',\n '.node-person-name-link',\n ],\n },\n\n date_published: {\n selectors: [\n ['meta[name=\"article:published_time\"]', 'value'],\n ],\n },\n\n dek: {\n selectors: [\n '.field-name-field-forall-summary',\n ],\n },\n\n lead_image_url: {\n selectors: [\n ['meta[name=\"og:image\"]', 'value'],\n ],\n },\n\n content: {\n defaultCleaner: false,\n\n selectors: [\n 'div#content-start',\n '.pane-node-field-forall-body',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n '.pane-node-title',\n '.pane-custom.pane-1',\n ],\n },\n};\n","export const WwwOpposingviewsComExtractor = {\n domain: 'www.opposingviews.com',\n\n title: {\n selectors: [\n 'h1.title',\n ],\n },\n\n author: {\n selectors: [\n 'div.date span span a',\n ],\n },\n\n date_published: {\n selectors: [\n ['meta[name=\"publish_date\"]', 'value'],\n ],\n },\n\n dek: {\n selectors: [\n // enter selectors\n ],\n },\n\n lead_image_url: {\n selectors: [\n ['meta[name=\"og:image\"]', 'value'],\n ],\n },\n\n content: {\n selectors: [\n '.article-content',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n '.show-for-small-only',\n ],\n },\n};\n","export const WwwProspectmagazineCoUkExtractor = {\n domain: 'www.prospectmagazine.co.uk',\n\n title: {\n selectors: [\n '.page-title',\n ],\n },\n\n author: {\n selectors: [\n '.aside_author .title',\n ],\n },\n\n date_published: {\n selectors: [\n '.post-info',\n ],\n\n timezone: 'Europe/London',\n },\n\n dek: {\n selectors: [\n '.page-subtitle',\n ],\n },\n\n lead_image_url: {\n selectors: [\n ['meta[name=\"og:image\"]', 'value'],\n ],\n },\n\n content: {\n selectors: [\n // ['article.type-post div.post_content p'],\n 'article .post_content',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n\n ],\n },\n};\n","export const ForwardComExtractor = {\n domain: 'forward.com',\n\n title: {\n selectors: [\n ['meta[name=\"og:title\"]', 'value'],\n ],\n },\n\n author: {\n selectors: [\n '.author-name',\n ['meta[name=\"sailthru.author\"]', 'value'],\n ],\n },\n\n date_published: {\n selectors: [\n ['meta[name=\"date\"]', 'value'],\n ],\n },\n\n dek: {\n selectors: [\n // enter selectors\n ],\n },\n\n lead_image_url: {\n selectors: [\n ['meta[name=\"og:image\"]', 'value'],\n ],\n },\n\n content: {\n selectors: [\n ['.post-item-media-wrap', '.post-item p'],\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n '.donate-box',\n '.message',\n '.subtitle',\n ],\n },\n};\n","export const WwwQdailyComExtractor = {\n domain: 'www.qdaily.com',\n\n title: {\n selectors: [\n 'h2',\n 'h2.title',\n ],\n },\n\n author: {\n selectors: [\n '.name',\n ],\n },\n\n date_published: {\n selectors: [\n ['.date.smart-date', 'data-origindate'],\n ],\n },\n\n dek: {\n selectors: [\n '.excerpt',\n ],\n },\n\n lead_image_url: {\n selectors: [\n ['.article-detail-hd img', 'src'],\n ],\n },\n\n content: {\n selectors: [\n '.detail',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n '.lazyload',\n '.lazylad',\n '.lazylood',\n ],\n },\n};\n","export const GothamistComExtractor = {\n domain: 'gothamist.com',\n\n supportedDomains: [\n 'chicagoist.com',\n 'laist.com',\n 'sfist.com',\n 'shanghaiist.com',\n 'dcist.com',\n ],\n\n title: {\n selectors: [\n 'h1',\n '.entry-header h1',\n ],\n },\n\n author: {\n selectors: [\n '.author',\n ],\n },\n\n date_published: {\n selectors: [\n 'abbr',\n 'abbr.published',\n ],\n\n timezone: 'America/New_York',\n },\n\n dek: {\n selectors: [\n null,\n ],\n },\n\n lead_image_url: {\n selectors: [\n ['meta[name=\"og:image\"]', 'value'],\n ],\n },\n\n content: {\n selectors: [\n '.entry-body',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n 'div.image-none': 'figure',\n '.image-none i': 'figcaption',\n 'div.image-left': 'figure',\n '.image-left i': 'figcaption',\n 'div.image-right': 'figure',\n '.image-right i': 'figcaption',\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n '.image-none br',\n '.image-left br',\n '.image-right br',\n '.galleryEase',\n ],\n },\n};\n","export const WwwFoolComExtractor = {\n domain: 'www.fool.com',\n\n title: {\n selectors: [\n 'h1',\n ],\n },\n\n author: {\n selectors: [\n '.author-inline .author-name',\n ],\n },\n\n date_published: {\n selectors: [\n ['meta[name=\"date\"]', 'value'],\n ],\n },\n\n dek: {\n selectors: [\n 'header h2',\n ],\n },\n\n lead_image_url: {\n selectors: [\n ['meta[name=\"og:image\"]', 'value'],\n ],\n },\n\n content: {\n selectors: [\n '.article-content',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n '.caption img': ($node) => {\n const src = $node.attr('src');\n $node.parent().replaceWith(`<figure><img src=\"${src}\"/></figure>`);\n },\n '.caption': 'figcaption',\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n '#pitch',\n ],\n },\n};\n","export const WwwSlateComExtractor = {\n domain: 'www.slate.com',\n\n title: {\n selectors: [\n '.hed',\n 'h1',\n ],\n },\n\n author: {\n selectors: [\n 'a[rel=author]',\n ],\n },\n\n date_published: {\n selectors: [\n '.pub-date',\n ],\n\n timezone: 'America/New_York',\n },\n\n dek: {\n selectors: [\n '.dek',\n ],\n },\n\n lead_image_url: {\n selectors: [\n ['meta[name=\"og:image\"]', 'value'],\n ],\n },\n\n content: {\n selectors: [\n '.body',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n '.about-the-author',\n '.pullquote',\n '.newsletter-signup-component',\n '.top-comment',\n ],\n },\n};\n","export const IciRadioCanadaCaExtractor = {\n domain: 'ici.radio-canada.ca',\n\n title: {\n selectors: [\n 'h1',\n ],\n },\n\n author: {\n selectors: [\n ['meta[name=\"dc.creator\"]', 'value'],\n ],\n },\n\n date_published: {\n selectors: [\n ['meta[name=\"dc.date.created\"]', 'value'],\n ],\n\n timezone: 'America/New_York',\n },\n\n dek: {\n selectors: [\n '.bunker-component.lead',\n ],\n },\n\n lead_image_url: {\n selectors: [\n ['meta[name=\"og:image\"]', 'value'],\n ],\n },\n\n content: {\n selectors: [\n ['.main-multimedia-item', '.news-story-content'],\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n\n ],\n },\n};\n","import mergeSupportedDomains from 'utils/merge-supported-domains';\nimport * as CustomExtractors from './custom/index';\n\nexport default Object.keys(CustomExtractors).reduce((acc, key) => {\n const extractor = CustomExtractors[key];\n return {\n ...acc,\n ...mergeSupportedDomains(extractor),\n };\n}, {});\n","// CLEAN AUTHOR CONSTANTS\nexport const CLEAN_AUTHOR_RE = /^\\s*(posted |written )?by\\s*:?\\s*(.*)/i;\n // author = re.sub(r'^\\s*(posted |written )?by\\s*:?\\s*(.*)(?i)',\n\n// CLEAN DEK CONSTANTS\nexport const TEXT_LINK_RE = new RegExp('http(s)?://', 'i');\n// An ordered list of meta tag names that denote likely article deks.\n// From most distinct to least distinct.\n//\n// NOTE: There are currently no meta tags that seem to provide the right\n// content consistenty enough. Two options were:\n// - og:description\n// - dc.description\n// However, these tags often have SEO-specific junk in them that's not\n// header-worthy like a dek is. Excerpt material at best.\nexport const DEK_META_TAGS = [\n];\n\n// An ordered list of Selectors to find likely article deks. From\n// most explicit to least explicit.\n//\n// Should be more restrictive than not, as a failed dek can be pretty\n// detrimental to the aesthetics of an article.\nexport const DEK_SELECTORS = [\n '.entry-summary',\n];\n\n// CLEAN DATE PUBLISHED CONSTANTS\nexport const MS_DATE_STRING = /^\\d{13}$/i;\nexport const SEC_DATE_STRING = /^\\d{10}$/i;\nexport const CLEAN_DATE_STRING_RE = /^\\s*published\\s*:?\\s*(.*)/i;\nexport const TIME_MERIDIAN_SPACE_RE = /(.*\\d)(am|pm)(.*)/i;\nexport const TIME_MERIDIAN_DOTS_RE = /\\.m\\./i;\nconst months = [\n 'jan',\n 'feb',\n 'mar',\n 'apr',\n 'may',\n 'jun',\n 'jul',\n 'aug',\n 'sep',\n 'oct',\n 'nov',\n 'dec',\n];\nconst allMonths = months.join('|');\nconst timestamp1 = '[0-9]{1,2}:[0-9]{2,2}( ?[ap].?m.?)?';\nconst timestamp2 = '[0-9]{1,2}[/-][0-9]{1,2}[/-][0-9]{2,4}';\nconst timestamp3 = '-[0-9]{3,4}$';\nexport const SPLIT_DATE_STRING =\n new RegExp(`(${timestamp1})|(${timestamp2})|(${timestamp3})|([0-9]{1,4})|(${allMonths})`, 'ig');\n\n// 2016-11-22T08:57-500\n// Check if datetime string has an offset at the end\nexport const TIME_WITH_OFFSET_RE = /-\\d{3,4}$/;\n\n// CLEAN TITLE CONSTANTS\n// A regular expression that will match separating characters on a\n// title, that usually denote breadcrumbs or something similar.\nexport const TITLE_SPLITTERS_RE = /(: | - | \\| )/g;\n\nexport const DOMAIN_ENDINGS_RE =\n new RegExp('.com$|.net$|.org$|.co.uk$', 'g');\n","import { normalizeSpaces } from 'utils/text';\nimport { CLEAN_AUTHOR_RE } from './constants';\n\n// Take an author string (like 'By David Smith ') and clean it to\n// just the name(s): 'David Smith'.\nexport default function cleanAuthor(author) {\n return normalizeSpaces(\n author.replace(CLEAN_AUTHOR_RE, '$2').trim()\n );\n}\n","import validUrl from 'valid-url';\n\nexport default function clean(leadImageUrl) {\n leadImageUrl = leadImageUrl.trim();\n if (validUrl.isWebUri(leadImageUrl)) {\n return leadImageUrl;\n }\n\n return null;\n}\n","import { stripTags } from 'utils/dom';\nimport {\n excerptContent,\n normalizeSpaces,\n} from 'utils/text';\n\nimport { TEXT_LINK_RE } from './constants';\n\n// Take a dek HTML fragment, and return the cleaned version of it.\n// Return None if the dek wasn't good enough.\nexport default function cleanDek(dek, { $, excerpt }) {\n // Sanity check that we didn't get too short or long of a dek.\n if (dek.length > 1000 || dek.length < 5) return null;\n\n // Check that dek isn't the same as excerpt\n if (excerpt && excerptContent(excerpt, 10) === excerptContent(dek, 10)) return null;\n\n const dekText = stripTags(dek, $);\n\n // Plain text links shouldn't exist in the dek. If we have some, it's\n // not a good dek - bail.\n if (TEXT_LINK_RE.test(dekText)) return null;\n\n return normalizeSpaces(dekText.trim());\n}\n","import moment from 'moment-timezone';\nimport parseFormat from 'moment-parseformat';\n// Is there a compelling reason to use moment here?\n// Mostly only being used for the isValid() method,\n// but could just check for 'Invalid Date' string.\n\nimport {\n MS_DATE_STRING,\n SEC_DATE_STRING,\n CLEAN_DATE_STRING_RE,\n SPLIT_DATE_STRING,\n TIME_MERIDIAN_SPACE_RE,\n TIME_MERIDIAN_DOTS_RE,\n TIME_WITH_OFFSET_RE,\n} from './constants';\n\nexport function cleanDateString(dateString) {\n return (dateString.match(SPLIT_DATE_STRING) || [])\n .join(' ')\n .replace(TIME_MERIDIAN_DOTS_RE, 'm')\n .replace(TIME_MERIDIAN_SPACE_RE, '$1 $2 $3')\n .replace(CLEAN_DATE_STRING_RE, '$1')\n .trim();\n}\n\nexport function createDate(dateString, timezone, format) {\n if (TIME_WITH_OFFSET_RE.test(dateString)) {\n return moment(new Date(dateString));\n }\n\n return timezone ?\n moment.tz(dateString, format || parseFormat(dateString), timezone) :\n moment(dateString, format || parseFormat(dateString));\n}\n\n// Take a date published string, and hopefully return a date out of\n// it. Return none if we fail.\nexport default function cleanDatePublished(dateString, { timezone, format } = {}) {\n // If string is in milliseconds or seconds, convert to int and return\n if (MS_DATE_STRING.test(dateString) || SEC_DATE_STRING.test(dateString)) {\n return new Date(parseInt(dateString, 10)).toISOString();\n }\n\n let date = createDate(dateString, timezone, format);\n\n if (!date.isValid()) {\n dateString = cleanDateString(dateString);\n date = createDate(dateString, timezone, format);\n }\n\n return date.isValid() ? date.toISOString() : null;\n}\n","import {\n cleanAttributes,\n cleanHeaders,\n cleanHOnes,\n cleanImages,\n cleanTags,\n removeEmpty,\n rewriteTopLevel,\n markToKeep,\n stripJunkTags,\n makeLinksAbsolute,\n} from 'utils/dom';\n\n// Clean our article content, returning a new, cleaned node.\nexport default function extractCleanNode(\n article,\n {\n $,\n cleanConditionally = true,\n title = '',\n url = '',\n defaultCleaner = true,\n }\n) {\n // Rewrite the tag name to div if it's a top level node like body or\n // html to avoid later complications with multiple body tags.\n rewriteTopLevel(article, $);\n\n // Drop small images and spacer images\n // Only do this is defaultCleaner is set to true;\n // this can sometimes be too aggressive.\n if (defaultCleaner) cleanImages(article, $);\n\n // Make links absolute\n makeLinksAbsolute(article, $, url);\n\n // Mark elements to keep that would normally be removed.\n // E.g., stripJunkTags will remove iframes, so we're going to mark\n // YouTube/Vimeo videos as elements we want to keep.\n markToKeep(article, $, url);\n\n // Drop certain tags like <title>, etc\n // This is -mostly- for cleanliness, not security.\n stripJunkTags(article, $);\n\n // H1 tags are typically the article title, which should be extracted\n // by the title extractor instead. If there's less than 3 of them (<3),\n // strip them. Otherwise, turn 'em into H2s.\n cleanHOnes(article, $);\n\n // Clean headers\n cleanHeaders(article, $, title);\n\n // We used to clean UL's and OL's here, but it was leading to\n // too many in-article lists being removed. Consider a better\n // way to detect menus particularly and remove them.\n // Also optionally running, since it can be overly aggressive.\n if (defaultCleaner) cleanTags(article, $, cleanConditionally);\n\n // Remove empty paragraph nodes\n removeEmpty(article, $);\n\n // Remove unnecessary attributes\n cleanAttributes(article, $);\n\n return article;\n}\n","import { stripTags } from 'utils/dom';\nimport { normalizeSpaces } from 'utils/text';\n\nimport { TITLE_SPLITTERS_RE } from './constants';\nimport { resolveSplitTitle } from './index';\n\nexport default function cleanTitle(title, { url, $ }) {\n // If title has |, :, or - in it, see if\n // we can clean it up.\n if (TITLE_SPLITTERS_RE.test(title)) {\n title = resolveSplitTitle(title, url);\n }\n\n // Final sanity check that we didn't get a crazy title.\n // if (title.length > 150 || title.length < 15) {\n if (title.length > 150) {\n // If we did, return h1 from the document if it exists\n const h1 = $('h1');\n if (h1.length === 1) {\n title = h1.text();\n }\n }\n\n // strip any html tags in the title text\n return normalizeSpaces(stripTags(title, $).trim());\n}\n","import URL from 'url';\nimport wuzzy from 'wuzzy';\n\nimport {\n TITLE_SPLITTERS_RE,\n DOMAIN_ENDINGS_RE,\n} from './constants';\n\nfunction extractBreadcrumbTitle(splitTitle, text) {\n // This must be a very breadcrumbed title, like:\n // The Best Gadgets on Earth : Bits : Blogs : NYTimes.com\n // NYTimes - Blogs - Bits - The Best Gadgets on Earth\n if (splitTitle.length >= 6) {\n // Look to see if we can find a breadcrumb splitter that happens\n // more than once. If we can, we'll be able to better pull out\n // the title.\n const termCounts = splitTitle.reduce((acc, titleText) => {\n acc[titleText] = acc[titleText] ? acc[titleText] + 1 : 1;\n return acc;\n }, {});\n\n const [maxTerm, termCount] =\n Reflect.ownKeys(termCounts)\n .reduce((acc, key) => {\n if (acc[1] < termCounts[key]) {\n return [key, termCounts[key]];\n }\n\n return acc;\n }, [0, 0]);\n\n // We found a splitter that was used more than once, so it\n // is probably the breadcrumber. Split our title on that instead.\n // Note: max_term should be <= 4 characters, so that \" >> \"\n // will match, but nothing longer than that.\n if (termCount >= 2 && maxTerm.length <= 4) {\n splitTitle = text.split(maxTerm);\n }\n\n const splitEnds = [splitTitle[0], splitTitle.slice(-1)];\n const longestEnd = splitEnds.reduce((acc, end) => acc.length > end.length ? acc : end, '');\n\n if (longestEnd.length > 10) {\n return longestEnd;\n }\n\n return text;\n }\n\n return null;\n}\n\nfunction cleanDomainFromTitle(splitTitle, url) {\n // Search the ends of the title, looking for bits that fuzzy match\n // the URL too closely. If one is found, discard it and return the\n // rest.\n //\n // Strip out the big TLDs - it just makes the matching a bit more\n // accurate. Not the end of the world if it doesn't strip right.\n const { host } = URL.parse(url);\n const nakedDomain = host.replace(DOMAIN_ENDINGS_RE, '');\n\n const startSlug = splitTitle[0].toLowerCase().replace(' ', '');\n const startSlugRatio = wuzzy.levenshtein(startSlug, nakedDomain);\n\n if (startSlugRatio > 0.4 && startSlug.length > 5) {\n return splitTitle.slice(2).join('');\n }\n\n const endSlug = splitTitle.slice(-1)[0].toLowerCase().replace(' ', '');\n const endSlugRatio = wuzzy.levenshtein(endSlug, nakedDomain);\n\n if (endSlugRatio > 0.4 && endSlug.length >= 5) {\n return splitTitle.slice(0, -2).join('');\n }\n\n return null;\n}\n\n// Given a title with separators in it (colons, dashes, etc),\n// resolve whether any of the segments should be removed.\nexport default function resolveSplitTitle(title, url = '') {\n // Splits while preserving splitters, like:\n // ['The New New York', ' - ', 'The Washington Post']\n const splitTitle = title.split(TITLE_SPLITTERS_RE);\n if (splitTitle.length === 1) {\n return title;\n }\n\n let newTitle = extractBreadcrumbTitle(splitTitle, title);\n if (newTitle) return newTitle;\n\n newTitle = cleanDomainFromTitle(splitTitle, url);\n if (newTitle) return newTitle;\n\n // Fuzzy ratio didn't find anything, so this title is probably legit.\n // Just return it all.\n return title;\n}\n","import cleanAuthor from './author';\nimport cleanImage from './lead-image-url';\nimport cleanDek from './dek';\nimport cleanDatePublished from './date-published';\nimport cleanContent from './content';\nimport cleanTitle from './title';\n\nconst Cleaners = {\n author: cleanAuthor,\n lead_image_url: cleanImage,\n dek: cleanDek,\n date_published: cleanDatePublished,\n content: cleanContent,\n title: cleanTitle,\n};\n\nexport default Cleaners;\n\nexport { cleanAuthor };\nexport { cleanImage };\nexport { cleanDek };\nexport { cleanDatePublished };\nexport { cleanContent };\nexport { cleanTitle };\nexport { default as resolveSplitTitle } from './resolve-split-title';\n","import {\n stripUnlikelyCandidates,\n convertToParagraphs,\n} from 'utils/dom';\n\nimport {\n scoreContent,\n findTopCandidate,\n} from './scoring';\n\n// Using a variety of scoring techniques, extract the content most\n// likely to be article text.\n//\n// If strip_unlikely_candidates is True, remove any elements that\n// match certain criteria first. (Like, does this element have a\n// classname of \"comment\")\n//\n// If weight_nodes is True, use classNames and IDs to determine the\n// worthiness of nodes.\n//\n// Returns a cheerio object $\nexport default function extractBestNode($, opts) {\n // clone the node so we can get back to our\n // initial parsed state if needed\n // TODO Do I need this? – AP\n // let $root = $.root().clone()\n\n if (opts.stripUnlikelyCandidates) {\n $ = stripUnlikelyCandidates($);\n }\n\n $ = convertToParagraphs($);\n $ = scoreContent($, opts.weightNodes);\n const $topCandidate = findTopCandidate($);\n\n return $topCandidate;\n}\n","import cheerio from 'cheerio';\n\nimport { nodeIsSufficient } from 'utils/dom';\nimport { cleanContent } from 'cleaners';\nimport { normalizeSpaces } from 'utils/text';\n\nimport extractBestNode from './extract-best-node';\n\nconst GenericContentExtractor = {\n defaultOpts: {\n stripUnlikelyCandidates: true,\n weightNodes: true,\n cleanConditionally: true,\n },\n\n // Extract the content for this resource - initially, pass in our\n // most restrictive opts which will return the highest quality\n // content. On each failure, retry with slightly more lax opts.\n //\n // :param return_type: string. If \"node\", should return the content\n // as a cheerio node rather than as an HTML string.\n //\n // Opts:\n // stripUnlikelyCandidates: Remove any elements that match\n // non-article-like criteria first.(Like, does this element\n // have a classname of \"comment\")\n //\n // weightNodes: Modify an elements score based on whether it has\n // certain classNames or IDs. Examples: Subtract if a node has\n // a className of 'comment', Add if a node has an ID of\n // 'entry-content'.\n //\n // cleanConditionally: Clean the node to return of some\n // superfluous content. Things like forms, ads, etc.\n extract({ $, html, title, url }, opts) {\n opts = { ...this.defaultOpts, ...opts };\n\n $ = $ || cheerio.load(html);\n\n // Cascade through our extraction-specific opts in an ordered fashion,\n // turning them off as we try to extract content.\n let node = this.getContentNode($, title, url, opts);\n\n if (nodeIsSufficient(node)) {\n return this.cleanAndReturnNode(node, $);\n }\n\n // We didn't succeed on first pass, one by one disable our\n // extraction opts and try again.\n for (const key of Reflect.ownKeys(opts).filter(k => opts[k] === true)) {\n opts[key] = false;\n $ = cheerio.load(html);\n\n node = this.getContentNode($, title, url, opts);\n\n if (nodeIsSufficient(node)) {\n break;\n }\n }\n\n return this.cleanAndReturnNode(node, $);\n },\n\n // Get node given current options\n getContentNode($, title, url, opts) {\n return cleanContent(\n extractBestNode($, opts),\n {\n $,\n cleanConditionally: opts.cleanConditionally,\n title,\n url,\n });\n },\n\n // Once we got here, either we're at our last-resort node, or\n // we broke early. Make sure we at least have -something- before we\n // move forward.\n cleanAndReturnNode(node, $) {\n if (!node) {\n return null;\n }\n\n return normalizeSpaces($.html(node));\n\n // if return_type == \"html\":\n // return normalize_spaces(node_to_html(node))\n // else:\n // return node\n },\n\n};\n\nexport default GenericContentExtractor;\n","// TODO: It would be great if we could merge the meta and selector lists into\n// a list of objects, because we could then rank them better. For example,\n// .hentry .entry-title is far better suited than <meta title>.\n\n// An ordered list of meta tag names that denote likely article titles. All\n// attributes should be lowercase for faster case-insensitive matching. From\n// most distinct to least distinct.\nexport const STRONG_TITLE_META_TAGS = [\n 'tweetmeme-title',\n 'dc.title',\n 'rbtitle',\n 'headline',\n 'title',\n];\n\n// og:title is weak because it typically contains context that we don't like,\n// for example the source site's name. Gotta get that brand into facebook!\nexport const WEAK_TITLE_META_TAGS = [\n 'og:title',\n];\n\n// An ordered list of XPath Selectors to find likely article titles. From\n// most explicit to least explicit.\n//\n// Note - this does not use classes like CSS. This checks to see if the string\n// exists in the className, which is not as accurate as .className (which\n// splits on spaces/endlines), but for our purposes it's close enough. The\n// speed tradeoff is worth the accuracy hit.\nexport const STRONG_TITLE_SELECTORS = [\n '.hentry .entry-title',\n 'h1#articleHeader',\n 'h1.articleHeader',\n 'h1.article',\n '.instapaper_title',\n '#meebo-title',\n];\n\nexport const WEAK_TITLE_SELECTORS = [\n 'article h1',\n '#entry-title',\n '.entry-title',\n '#entryTitle',\n '#entrytitle',\n '.entryTitle',\n '.entrytitle',\n '#articleTitle',\n '.articleTitle',\n 'post post-title',\n 'h1.title',\n 'h2.article',\n 'h1',\n 'html head title',\n 'title',\n];\n","import { cleanTitle } from 'cleaners';\nimport {\n extractFromMeta,\n extractFromSelectors,\n} from 'utils/dom';\n\nimport {\n STRONG_TITLE_META_TAGS,\n WEAK_TITLE_META_TAGS,\n STRONG_TITLE_SELECTORS,\n WEAK_TITLE_SELECTORS,\n} from './constants';\n\nconst GenericTitleExtractor = {\n extract({ $, url, metaCache }) {\n // First, check to see if we have a matching meta tag that we can make\n // use of that is strongly associated with the headline.\n let title;\n\n title = extractFromMeta($, STRONG_TITLE_META_TAGS, metaCache);\n if (title) return cleanTitle(title, { url, $ });\n\n // Second, look through our content selectors for the most likely\n // article title that is strongly associated with the headline.\n title = extractFromSelectors($, STRONG_TITLE_SELECTORS);\n if (title) return cleanTitle(title, { url, $ });\n\n // Third, check for weaker meta tags that may match.\n title = extractFromMeta($, WEAK_TITLE_META_TAGS, metaCache);\n if (title) return cleanTitle(title, { url, $ });\n\n // Last, look for weaker selector tags that may match.\n title = extractFromSelectors($, WEAK_TITLE_SELECTORS);\n if (title) return cleanTitle(title, { url, $ });\n\n // If no matches, return an empty string\n return '';\n },\n};\n\nexport default GenericTitleExtractor;\n","// An ordered list of meta tag names that denote likely article authors. All\n// attributes should be lowercase for faster case-insensitive matching. From\n// most distinct to least distinct.\n//\n// Note: \"author\" is too often the -developer- of the page, so it is not\n// added here.\nexport const AUTHOR_META_TAGS = [\n 'byl',\n 'clmst',\n 'dc.author',\n 'dcsext.author',\n 'dc.creator',\n 'rbauthors',\n 'authors',\n];\n\nexport const AUTHOR_MAX_LENGTH = 300;\n\n// An ordered list of XPath Selectors to find likely article authors. From\n// most explicit to least explicit.\n//\n// Note - this does not use classes like CSS. This checks to see if the string\n// exists in the className, which is not as accurate as .className (which\n// splits on spaces/endlines), but for our purposes it's close enough. The\n// speed tradeoff is worth the accuracy hit.\nexport const AUTHOR_SELECTORS = [\n '.entry .entry-author',\n '.author.vcard .fn',\n '.author .vcard .fn',\n '.byline.vcard .fn',\n '.byline .vcard .fn',\n '.byline .by .author',\n '.byline .by',\n '.byline .author',\n '.post-author.vcard',\n '.post-author .vcard',\n 'a[rel=author]',\n '#by_author',\n '.by_author',\n '#entryAuthor',\n '.entryAuthor',\n '.byline a[href*=author]',\n '#author .authorname',\n '.author .authorname',\n '#author',\n '.author',\n '.articleauthor',\n '.ArticleAuthor',\n '.byline',\n];\n\n// An ordered list of Selectors to find likely article authors, with\n// regular expression for content.\nconst bylineRe = /^[\\n\\s]*By/i;\nexport const BYLINE_SELECTORS_RE = [\n ['#byline', bylineRe],\n ['.byline', bylineRe],\n];\n","import { cleanAuthor } from 'cleaners';\nimport {\n extractFromMeta,\n extractFromSelectors,\n} from 'utils/dom';\n\nimport {\n AUTHOR_META_TAGS,\n AUTHOR_MAX_LENGTH,\n AUTHOR_SELECTORS,\n BYLINE_SELECTORS_RE,\n} from './constants';\n\nconst GenericAuthorExtractor = {\n extract({ $, metaCache }) {\n let author;\n\n // First, check to see if we have a matching\n // meta tag that we can make use of.\n author = extractFromMeta($, AUTHOR_META_TAGS, metaCache);\n if (author && author.length < AUTHOR_MAX_LENGTH) {\n return cleanAuthor(author);\n }\n\n // Second, look through our selectors looking for potential authors.\n author = extractFromSelectors($, AUTHOR_SELECTORS, 2);\n if (author && author.length < AUTHOR_MAX_LENGTH) {\n return cleanAuthor(author);\n }\n\n // Last, use our looser regular-expression based selectors for\n // potential authors.\n for (const [selector, regex] of BYLINE_SELECTORS_RE) {\n const node = $(selector);\n if (node.length === 1) {\n const text = node.text();\n if (regex.test(text)) {\n return cleanAuthor(text);\n }\n }\n }\n\n return null;\n },\n};\n\nexport default GenericAuthorExtractor;\n","// An ordered list of meta tag names that denote\n// likely date published dates. All attributes\n// should be lowercase for faster case-insensitive matching.\n// From most distinct to least distinct.\nexport const DATE_PUBLISHED_META_TAGS = [\n 'article:published_time',\n 'displaydate',\n 'dc.date',\n 'dc.date.issued',\n 'rbpubdate',\n 'publish_date',\n 'pub_date',\n 'pagedate',\n 'pubdate',\n 'revision_date',\n 'doc_date',\n 'date_created',\n 'content_create_date',\n 'lastmodified',\n 'created',\n 'date',\n];\n\n// An ordered list of XPath Selectors to find\n// likely date published dates. From most explicit\n// to least explicit.\nexport const DATE_PUBLISHED_SELECTORS = [\n '.hentry .dtstamp.published',\n '.hentry .published',\n '.hentry .dtstamp.updated',\n '.hentry .updated',\n '.single .published',\n '.meta .published',\n '.meta .postDate',\n '.entry-date',\n '.byline .date',\n '.postmetadata .date',\n '.article_datetime',\n '.date-header',\n '.story-date',\n '.dateStamp',\n '#story .datetime',\n '.dateline',\n '.pubdate',\n];\n\n// An ordered list of compiled regular expressions to find likely date\n// published dates from the URL. These should always have the first\n// reference be a date string that is parseable by dateutil.parser.parse\nconst abbrevMonthsStr = '(jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec)';\nexport const DATE_PUBLISHED_URL_RES = [\n // /2012/01/27/ but not /2012/01/293\n new RegExp('/(20\\\\d{2}/\\\\d{2}/\\\\d{2})/', 'i'),\n // 20120127 or 20120127T but not 2012012733 or 8201201733\n // /[^0-9](20\\d{2}[01]\\d[0-3]\\d)([^0-9]|$)/i,\n // 2012-01-27\n new RegExp('(20\\\\d{2}-[01]\\\\d-[0-3]\\\\d)', 'i'),\n // /2012/jan/27/\n new RegExp(`/(20\\\\d{2}/${abbrevMonthsStr}/[0-3]\\\\d)/`, 'i'),\n];\n","import { cleanDatePublished } from 'cleaners';\nimport {\n extractFromMeta,\n extractFromSelectors,\n} from 'utils/dom';\nimport { extractFromUrl } from 'utils/text';\n\nimport {\n DATE_PUBLISHED_META_TAGS,\n DATE_PUBLISHED_SELECTORS,\n DATE_PUBLISHED_URL_RES,\n} from './constants';\n\nconst GenericDatePublishedExtractor = {\n extract({ $, url, metaCache }) {\n let datePublished;\n // First, check to see if we have a matching meta tag\n // that we can make use of.\n // Don't try cleaning tags from this string\n datePublished = extractFromMeta($, DATE_PUBLISHED_META_TAGS, metaCache, false);\n if (datePublished) return cleanDatePublished(datePublished);\n\n // Second, look through our selectors looking for potential\n // date_published's.\n datePublished = extractFromSelectors($, DATE_PUBLISHED_SELECTORS);\n if (datePublished) return cleanDatePublished(datePublished);\n\n // Lastly, look to see if a dately string exists in the URL\n datePublished = extractFromUrl(url, DATE_PUBLISHED_URL_RES);\n if (datePublished) return cleanDatePublished(datePublished);\n\n return null;\n },\n};\n\nexport default GenericDatePublishedExtractor;\n","// import {\n// DEK_META_TAGS,\n// DEK_SELECTORS,\n// DEK_URL_RES,\n// } from './constants';\n\n// import { cleanDek } from 'cleaners';\n\n// import {\n// extractFromMeta,\n// extractFromSelectors,\n// } from 'utils/dom';\n\n// Currently there is only one selector for\n// deks. We should simply return null here\n// until we have a more robust generic option.\n// Below is the original source for this, for reference.\nconst GenericDekExtractor = {\n // extract({ $, content, metaCache }) {\n extract() {\n return null;\n },\n};\n\nexport default GenericDekExtractor;\n\n// def extract_dek(self):\n// # First, check to see if we have a matching meta tag that we can make\n// # use of.\n// dek = self.extract_from_meta('dek', constants.DEK_META_TAGS)\n// if not dek:\n// # Second, look through our CSS/XPath selectors. This may return\n// # an HTML fragment.\n// dek = self.extract_from_selectors('dek',\n// constants.DEK_SELECTORS,\n// text_only=False)\n//\n// if dek:\n// # Make sure our dek isn't in the first few thousand characters\n// # of the content, otherwise it's just the start of the article\n// # and not a true dek.\n// content = self.extract_content()\n// content_chunk = normalize_spaces(strip_tags(content[:2000]))\n// dek_chunk = normalize_spaces(dek[:100]) # Already has no tags.\n//\n// # 80% or greater similarity means the dek was very similar to some\n// # of the starting content, so we skip it.\n// if fuzz.partial_ratio(content_chunk, dek_chunk) < 80:\n// return dek\n//\n// return None\n","// An ordered list of meta tag names that denote likely article leading images.\n// All attributes should be lowercase for faster case-insensitive matching.\n// From most distinct to least distinct.\nexport const LEAD_IMAGE_URL_META_TAGS = [\n 'og:image',\n 'twitter:image',\n 'image_src',\n];\n\nexport const LEAD_IMAGE_URL_SELECTORS = [\n 'link[rel=image_src]',\n];\n\nexport const POSITIVE_LEAD_IMAGE_URL_HINTS = [\n 'upload',\n 'wp-content',\n 'large',\n 'photo',\n 'wp-image',\n];\nexport const POSITIVE_LEAD_IMAGE_URL_HINTS_RE = new RegExp(POSITIVE_LEAD_IMAGE_URL_HINTS.join('|'), 'i');\n\nexport const NEGATIVE_LEAD_IMAGE_URL_HINTS = [\n 'spacer',\n 'sprite',\n 'blank',\n 'throbber',\n 'gradient',\n 'tile',\n 'bg',\n 'background',\n 'icon',\n 'social',\n 'header',\n 'hdr',\n 'advert',\n 'spinner',\n 'loader',\n 'loading',\n 'default',\n 'rating',\n 'share',\n 'facebook',\n 'twitter',\n 'theme',\n 'promo',\n 'ads',\n 'wp-includes',\n];\nexport const NEGATIVE_LEAD_IMAGE_URL_HINTS_RE = new RegExp(NEGATIVE_LEAD_IMAGE_URL_HINTS.join('|'), 'i');\n\nexport const GIF_RE = /\\.gif(\\?.*)?$/i;\nexport const JPG_RE = /\\.jpe?g(\\?.*)?$/i;\n","import {\n POSITIVE_LEAD_IMAGE_URL_HINTS_RE,\n NEGATIVE_LEAD_IMAGE_URL_HINTS_RE,\n GIF_RE,\n JPG_RE,\n} from './constants';\n\nimport { PHOTO_HINTS_RE } from '../content/scoring/constants';\n\nfunction getSig($node) {\n return `${$node.attr('class') || ''} ${$node.attr('id') || ''}`;\n}\n\n// Scores image urls based on a variety of heuristics.\nexport function scoreImageUrl(url) {\n url = url.trim();\n let score = 0;\n\n if (POSITIVE_LEAD_IMAGE_URL_HINTS_RE.test(url)) {\n score += 20;\n }\n\n if (NEGATIVE_LEAD_IMAGE_URL_HINTS_RE.test(url)) {\n score -= 20;\n }\n\n // TODO: We might want to consider removing this as\n // gifs are much more common/popular than they once were\n if (GIF_RE.test(url)) {\n score -= 10;\n }\n\n if (JPG_RE.test(url)) {\n score += 10;\n }\n\n // PNGs are neutral.\n\n return score;\n}\n\n// Alt attribute usually means non-presentational image.\nexport function scoreAttr($img) {\n if ($img.attr('alt')) {\n return 5;\n }\n\n return 0;\n}\n\n// Look through our parent and grandparent for figure-like\n// container elements, give a bonus if we find them\nexport function scoreByParents($img) {\n let score = 0;\n const $figParent = $img.parents('figure').first();\n\n if ($figParent.length === 1) {\n score += 25;\n }\n\n const $parent = $img.parent();\n let $gParent;\n if ($parent.length === 1) {\n $gParent = $parent.parent();\n }\n\n [$parent, $gParent].forEach(($node) => {\n if (PHOTO_HINTS_RE.test(getSig($node))) {\n score += 15;\n }\n });\n\n return score;\n}\n\n// Look at our immediate sibling and see if it looks like it's a\n// caption. Bonus if so.\nexport function scoreBySibling($img) {\n let score = 0;\n const $sibling = $img.next();\n const sibling = $sibling.get(0);\n\n if (sibling && sibling.tagName.toLowerCase() === 'figcaption') {\n score += 25;\n }\n\n if (PHOTO_HINTS_RE.test(getSig($sibling))) {\n score += 15;\n }\n\n return score;\n}\n\nexport function scoreByDimensions($img) {\n let score = 0;\n\n const width = parseFloat($img.attr('width'));\n const height = parseFloat($img.attr('height'));\n const src = $img.attr('src');\n\n // Penalty for skinny images\n if (width && width <= 50) {\n score -= 50;\n }\n\n // Penalty for short images\n if (height && height <= 50) {\n score -= 50;\n }\n\n if (width && height && !src.includes('sprite')) {\n const area = width * height;\n if (area < 5000) { // Smaller than 50 x 100\n score -= 100;\n } else {\n score += Math.round(area / 1000);\n }\n }\n\n return score;\n}\n\nexport function scoreByPosition($imgs, index) {\n return ($imgs.length / 2) - index;\n}\n","import { extractFromMeta } from 'utils/dom';\nimport { cleanImage } from 'cleaners';\n\nimport {\n LEAD_IMAGE_URL_META_TAGS,\n LEAD_IMAGE_URL_SELECTORS,\n} from './constants';\n\nimport {\n scoreImageUrl,\n scoreAttr,\n scoreByParents,\n scoreBySibling,\n scoreByDimensions,\n scoreByPosition,\n} from './score-image';\n\n// Given a resource, try to find the lead image URL from within\n// it. Like content and next page extraction, uses a scoring system\n// to determine what the most likely image may be. Short circuits\n// on really probable things like og:image meta tags.\n//\n// Potential signals to still take advantage of:\n// * domain\n// * weird aspect ratio\nconst GenericLeadImageUrlExtractor = {\n extract({ $, content, metaCache, html }) {\n let cleanUrl;\n if (!$.browser && $('head').length === 0) {\n $('*').first().prepend(html);\n }\n\n // Check to see if we have a matching meta tag that we can make use of.\n // Moving this higher because common practice is now to use large\n // images on things like Open Graph or Twitter cards.\n // images usually have for things like Open Graph.\n const imageUrl =\n extractFromMeta(\n $,\n LEAD_IMAGE_URL_META_TAGS,\n metaCache,\n false\n );\n\n if (imageUrl) {\n cleanUrl = cleanImage(imageUrl);\n\n if (cleanUrl) return cleanUrl;\n }\n\n // Next, try to find the \"best\" image via the content.\n // We'd rather not have to fetch each image and check dimensions,\n // so try to do some analysis and determine them instead.\n const $content = $(content);\n const imgs = $('img', $content).toArray();\n const imgScores = {};\n\n imgs.forEach((img, index) => {\n const $img = $(img);\n const src = $img.attr('src');\n\n if (!src) return;\n\n let score = scoreImageUrl(src);\n score += scoreAttr($img);\n score += scoreByParents($img);\n score += scoreBySibling($img);\n score += scoreByDimensions($img);\n score += scoreByPosition(imgs, index);\n\n imgScores[src] = score;\n });\n\n const [topUrl, topScore] =\n Reflect.ownKeys(imgScores).reduce((acc, key) =>\n imgScores[key] > acc[1] ? [key, imgScores[key]] : acc\n , [null, 0]);\n\n if (topScore > 0) {\n cleanUrl = cleanImage(topUrl);\n\n if (cleanUrl) return cleanUrl;\n }\n\n // If nothing else worked, check to see if there are any really\n // probable nodes in the doc, like <link rel=\"image_src\" />.\n for (const selector of LEAD_IMAGE_URL_SELECTORS) {\n const $node = $(selector).first();\n const src = $node.attr('src');\n if (src) {\n cleanUrl = cleanImage(src);\n if (cleanUrl) return cleanUrl;\n }\n\n const href = $node.attr('href');\n if (href) {\n cleanUrl = cleanImage(href);\n if (cleanUrl) return cleanUrl;\n }\n\n const value = $node.attr('value');\n if (value) {\n cleanUrl = cleanImage(value);\n if (cleanUrl) return cleanUrl;\n }\n }\n\n return null;\n },\n};\n\nexport default GenericLeadImageUrlExtractor;\n\n// def extract(self):\n// \"\"\"\n// # First, try to find the \"best\" image via the content.\n// # We'd rather not have to fetch each image and check dimensions,\n// # so try to do some analysis and determine them instead.\n// content = self.extractor.extract_content(return_type=\"node\")\n// imgs = content.xpath('.//img')\n// img_scores = defaultdict(int)\n// logger.debug('Scoring %d images from content', len(imgs))\n// for (i, img) in enumerate(imgs):\n// img_score = 0\n//\n// if not 'src' in img.attrib:\n// logger.debug('No src attribute found')\n// continue\n//\n// try:\n// parsed_img = urlparse(img.attrib['src'])\n// img_path = parsed_img.path.lower()\n// except ValueError:\n// logger.debug('ValueError getting img path.')\n// continue\n// logger.debug('Image path is %s', img_path)\n//\n// if constants.POSITIVE_LEAD_IMAGE_URL_HINTS_RE.match(img_path):\n// logger.debug('Positive URL hints match. Adding 20.')\n// img_score += 20\n//\n// if constants.NEGATIVE_LEAD_IMAGE_URL_HINTS_RE.match(img_path):\n// logger.debug('Negative URL hints match. Subtracting 20.')\n// img_score -= 20\n//\n// # Gifs are more often structure than photos\n// if img_path.endswith('gif'):\n// logger.debug('gif found. Subtracting 10.')\n// img_score -= 10\n//\n// # JPGs are more often photographs\n// if img_path.endswith('jpg'):\n// logger.debug('jpg found. Adding 10.')\n// img_score += 10\n//\n// # PNGs are neutral.\n//\n// # Alt attribute usually means non-presentational image.\n// if 'alt' in img.attrib and len(img.attrib['alt']) > 5:\n// logger.debug('alt attribute found. Adding 5.')\n// img_score += 5\n//\n// # Look through our parent and grandparent for figure-like\n// # container elements, give a bonus if we find them\n// parents = [img.getparent()]\n// if parents[0] is not None and parents[0].getparent() is not None:\n// parents.append(parents[0].getparent())\n// for p in parents:\n// if p.tag == 'figure':\n// logger.debug('Parent with <figure> tag found. Adding 25.')\n// img_score += 25\n//\n// p_sig = ' '.join([p.get('id', ''), p.get('class', '')])\n// if constants.PHOTO_HINTS_RE.search(p_sig):\n// logger.debug('Photo hints regex match. Adding 15.')\n// img_score += 15\n//\n// # Look at our immediate sibling and see if it looks like it's a\n// # caption. Bonus if so.\n// sibling = img.getnext()\n// if sibling is not None:\n// if sibling.tag == 'figcaption':\n// img_score += 25\n//\n// sib_sig = ' '.join([sibling.get('id', ''),\n// sibling.get('class', '')]).lower()\n// if 'caption' in sib_sig:\n// img_score += 15\n//\n// # Pull out width/height if they were set.\n// img_width = None\n// img_height = None\n// if 'width' in img.attrib:\n// try:\n// img_width = float(img.get('width'))\n// except ValueError:\n// pass\n// if 'height' in img.attrib:\n// try:\n// img_height = float(img.get('height'))\n// except ValueError:\n// pass\n//\n// # Penalty for skinny images\n// if img_width and img_width <= 50:\n// logger.debug('Skinny image found. Subtracting 50.')\n// img_score -= 50\n//\n// # Penalty for short images\n// if img_height and img_height <= 50:\n// # Wide, short images are more common than narrow, tall ones\n// logger.debug('Short image found. Subtracting 25.')\n// img_score -= 25\n//\n// if img_width and img_height and not 'sprite' in img_path:\n// area = img_width * img_height\n//\n// if area < 5000: # Smaller than 50x100\n// logger.debug('Image with small area found. Subtracting 100.')\n// img_score -= 100\n// else:\n// img_score += round(area/1000.0)\n//\n// # If the image is higher on the page than other images,\n// # it gets a bonus. Penalty if lower.\n// logger.debug('Adding page placement bonus of %d.', len(imgs)/2 - i)\n// img_score += len(imgs)/2 - i\n//\n// # Use the raw src here because we munged img_path for case\n// # insensitivity\n// logger.debug('Final score is %d.', img_score)\n// img_scores[img.attrib['src']] += img_score\n//\n// top_score = 0\n// top_url = None\n// for (url, score) in img_scores.items():\n// if score > top_score:\n// top_url = url\n// top_score = score\n//\n// if top_score > 0:\n// logger.debug('Using top score image from content. Score was %d', top_score)\n// return top_url\n//\n//\n// # If nothing else worked, check to see if there are any really\n// # probable nodes in the doc, like <link rel=\"image_src\" />.\n// logger.debug('Trying to find lead image in probable nodes')\n// for selector in constants.LEAD_IMAGE_URL_SELECTORS:\n// nodes = self.resource.extract_by_selector(selector)\n// for node in nodes:\n// clean_value = None\n// if node.attrib.get('src'):\n// clean_value = self.clean(node.attrib['src'])\n//\n// if not clean_value and node.attrib.get('href'):\n// clean_value = self.clean(node.attrib['href'])\n//\n// if not clean_value and node.attrib.get('value'):\n// clean_value = self.clean(node.attrib['value'])\n//\n// if clean_value:\n// logger.debug('Found lead image in probable nodes.')\n// logger.debug('Node was: %s', node)\n// return clean_value\n//\n// return None\n","import difflib from 'difflib';\n\nexport default function scoreSimilarity(score, articleUrl, href) {\n // Do this last and only if we have a real candidate, because it's\n // potentially expensive computationally. Compare the link to this\n // URL using difflib to get the % similarity of these URLs. On a\n // sliding scale, subtract points from this link based on\n // similarity.\n if (score > 0) {\n const similarity = new difflib.SequenceMatcher(null, articleUrl, href).ratio();\n // Subtract .1 from diff_percent when calculating modifier,\n // which means that if it's less than 10% different, we give a\n // bonus instead. Ex:\n // 3% different = +17.5 points\n // 10% different = 0 points\n // 20% different = -25 points\n const diffPercent = 1.0 - similarity;\n const diffModifier = -(250 * (diffPercent - 0.2));\n return score + diffModifier;\n }\n\n return 0;\n}\n","import { IS_DIGIT_RE } from 'utils/text/constants';\n\nexport default function scoreLinkText(linkText, pageNum) {\n // If the link text can be parsed as a number, give it a minor\n // bonus, with a slight bias towards lower numbered pages. This is\n // so that pages that might not have 'next' in their text can still\n // get scored, and sorted properly by score.\n let score = 0;\n\n if (IS_DIGIT_RE.test(linkText.trim())) {\n const linkTextAsNum = parseInt(linkText, 10);\n // If it's the first page, we already got it on the first call.\n // Give it a negative score. Otherwise, up to page 10, give a\n // small bonus.\n if (linkTextAsNum < 2) {\n score = -30;\n } else {\n score = Math.max(0, 10 - linkTextAsNum);\n }\n\n // If it appears that the current page number is greater than\n // this links page number, it's a very bad sign. Give it a big\n // penalty.\n if (pageNum && pageNum >= linkTextAsNum) {\n score -= 50;\n }\n }\n\n return score;\n}\n","export default function scorePageInLink(pageNum, isWp) {\n // page in the link = bonus. Intentionally ignore wordpress because\n // their ?p=123 link style gets caught by this even though it means\n // separate documents entirely.\n if (pageNum && !isWp) {\n return 50;\n }\n\n return 0;\n}\n","export const DIGIT_RE = /\\d/;\n\n// A list of words that, if found in link text or URLs, likely mean that\n// this link is not a next page link.\nexport const EXTRANEOUS_LINK_HINTS = [\n 'print',\n 'archive',\n 'comment',\n 'discuss',\n 'e-mail',\n 'email',\n 'share',\n 'reply',\n 'all',\n 'login',\n 'sign',\n 'single',\n 'adx',\n 'entry-unrelated',\n];\nexport const EXTRANEOUS_LINK_HINTS_RE = new RegExp(EXTRANEOUS_LINK_HINTS.join('|'), 'i');\n\n// Match any link text/classname/id that looks like it could mean the next\n// page. Things like: next, continue, >, >>, » but not >|, »| as those can\n// mean last page.\nexport const NEXT_LINK_TEXT_RE = new RegExp('(next|weiter|continue|>([^|]|$)|»([^|]|$))', 'i');\n\n// Match any link text/classname/id that looks like it is an end link: things\n// like \"first\", \"last\", \"end\", etc.\nexport const CAP_LINK_TEXT_RE = new RegExp('(first|last|end)', 'i');\n\n// Match any link text/classname/id that looks like it means the previous\n// page.\nexport const PREV_LINK_TEXT_RE = new RegExp('(prev|earl|old|new|<|«)', 'i');\n\n// Match any phrase that looks like it could be page, or paging, or pagination\nexport const PAGE_RE = new RegExp('pag(e|ing|inat)', 'i');\n","import { EXTRANEOUS_LINK_HINTS_RE } from '../constants';\n\nexport default function scoreExtraneousLinks(href) {\n // If the URL itself contains extraneous values, give a penalty.\n if (EXTRANEOUS_LINK_HINTS_RE.test(href)) {\n return -25;\n }\n\n return 0;\n}\n","import { range } from 'utils';\nimport {\n NEGATIVE_SCORE_RE,\n POSITIVE_SCORE_RE,\n PAGE_RE,\n} from 'utils/dom/constants';\nimport { EXTRANEOUS_LINK_HINTS_RE } from '../constants';\n\nfunction makeSig($link) {\n return `${$link.attr('class') || ''} ${$link.attr('id') || ''}`;\n}\n\nexport default function scoreByParents($link) {\n // If a parent node contains paging-like classname or id, give a\n // bonus. Additionally, if a parent_node contains bad content\n // (like 'sponsor'), give a penalty.\n let $parent = $link.parent();\n let positiveMatch = false;\n let negativeMatch = false;\n let score = 0;\n\n Array.from(range(0, 4)).forEach(() => {\n if ($parent.length === 0) {\n return;\n }\n\n const parentData = makeSig($parent, ' ');\n\n // If we have 'page' or 'paging' in our data, that's a good\n // sign. Add a bonus.\n if (!positiveMatch && PAGE_RE.test(parentData)) {\n positiveMatch = true;\n score += 25;\n }\n\n // If we have 'comment' or something in our data, and\n // we don't have something like 'content' as well, that's\n // a bad sign. Give a penalty.\n if (!negativeMatch && NEGATIVE_SCORE_RE.test(parentData)\n && EXTRANEOUS_LINK_HINTS_RE.test(parentData)) {\n if (!POSITIVE_SCORE_RE.test(parentData)) {\n negativeMatch = true;\n score -= 25;\n }\n }\n\n $parent = $parent.parent();\n });\n\n return score;\n}\n","import { PREV_LINK_TEXT_RE } from '../constants';\n\nexport default function scorePrevLink(linkData) {\n // If the link has something like \"previous\", its definitely\n // an old link, skip it.\n if (PREV_LINK_TEXT_RE.test(linkData)) {\n return -200;\n }\n\n return 0;\n}\n","import URL from 'url';\n\nimport {\n DIGIT_RE,\n EXTRANEOUS_LINK_HINTS_RE,\n} from '../constants';\n\nexport default function shouldScore(\n href,\n articleUrl,\n baseUrl,\n parsedUrl,\n linkText,\n previousUrls\n) {\n // skip if we've already fetched this url\n if (previousUrls.find(url => href === url) !== undefined) {\n return false;\n }\n\n // If we've already parsed this URL, or the URL matches the base\n // URL, or is empty, skip it.\n if (!href || href === articleUrl || href === baseUrl) {\n return false;\n }\n\n const { hostname } = parsedUrl;\n const { hostname: linkHost } = URL.parse(href);\n\n // Domain mismatch.\n if (linkHost !== hostname) {\n return false;\n }\n\n // If href doesn't contain a digit after removing the base URL,\n // it's certainly not the next page.\n const fragment = href.replace(baseUrl, '');\n if (!DIGIT_RE.test(fragment)) {\n return false;\n }\n\n // This link has extraneous content (like \"comment\") in its link\n // text, so we skip it.\n if (EXTRANEOUS_LINK_HINTS_RE.test(linkText)) {\n return false;\n }\n\n // Next page link text is never long, skip if it is too long.\n if (linkText.length > 25) {\n return false;\n }\n\n return true;\n}\n","export default function scoreBaseUrl(href, baseRegex) {\n // If the baseUrl isn't part of this URL, penalize this\n // link. It could still be the link, but the odds are lower.\n // Example:\n // http://www.actionscript.org/resources/articles/745/1/JavaScript-and-VBScript-Injection-in-ActionScript-3/Page1.html\n if (!baseRegex.test(href)) {\n return -25;\n }\n\n return 0;\n}\n","import { NEXT_LINK_TEXT_RE } from '../constants';\n\nexport default function scoreNextLinkText(linkData) {\n // Things like \"next\", \">>\", etc.\n if (NEXT_LINK_TEXT_RE.test(linkData)) {\n return 50;\n }\n\n return 0;\n}\n","import {\n NEXT_LINK_TEXT_RE,\n CAP_LINK_TEXT_RE,\n} from '../constants';\n\nexport default function scoreCapLinks(linkData) {\n // Cap links are links like \"last\", etc.\n if (CAP_LINK_TEXT_RE.test(linkData)) {\n // If we found a link like \"last\", but we've already seen that\n // this link is also \"next\", it's fine. If it's not been\n // previously marked as \"next\", then it's probably bad.\n // Penalize.\n if (NEXT_LINK_TEXT_RE.test(linkData)) {\n return -65;\n }\n }\n\n return 0;\n}\n","import URL from 'url';\n\nimport {\n getAttrs,\n isWordpress,\n} from 'utils/dom';\nimport {\n removeAnchor,\n pageNumFromUrl,\n} from 'utils/text';\n\nimport {\n scoreSimilarity,\n scoreLinkText,\n scorePageInLink,\n scoreExtraneousLinks,\n scoreByParents,\n scorePrevLink,\n shouldScore,\n scoreBaseUrl,\n scoreCapLinks,\n scoreNextLinkText,\n} from './utils';\n\nexport function makeBaseRegex(baseUrl) {\n return new RegExp(`^${baseUrl}`, 'i');\n}\n\nfunction makeSig($link, linkText) {\n return `${linkText || $link.text()} ${$link.attr('class') || ''} ${$link.attr('id') || ''}`;\n}\n\nexport default function scoreLinks({\n links,\n articleUrl,\n baseUrl,\n parsedUrl,\n $,\n previousUrls = [],\n}) {\n parsedUrl = parsedUrl || URL.parse(articleUrl);\n const baseRegex = makeBaseRegex(baseUrl);\n const isWp = isWordpress($);\n\n // Loop through all links, looking for hints that they may be next-page\n // links. Things like having \"page\" in their textContent, className or\n // id, or being a child of a node with a page-y className or id.\n //\n // After we do that, assign each page a score, and pick the one that\n // looks most like the next page link, as long as its score is strong\n // enough to have decent confidence.\n const scoredPages = links.reduce((possiblePages, link) => {\n // Remove any anchor data since we don't do a good job\n // standardizing URLs (it's hard), we're going to do\n // some checking with and without a trailing slash\n const attrs = getAttrs(link);\n\n // if href is undefined, return\n if (!attrs.href) return possiblePages;\n\n const href = removeAnchor(attrs.href);\n const $link = $(link);\n const linkText = $link.text();\n\n if (!shouldScore(href, articleUrl, baseUrl, parsedUrl, linkText, previousUrls)) {\n return possiblePages;\n }\n\n // ## PASSED THE FIRST-PASS TESTS. Start scoring. ##\n if (!possiblePages[href]) {\n possiblePages[href] = {\n score: 0,\n linkText,\n href,\n };\n } else {\n possiblePages[href].linkText = `${possiblePages[href].linkText}|${linkText}`;\n }\n\n const possiblePage = possiblePages[href];\n const linkData = makeSig($link, linkText);\n const pageNum = pageNumFromUrl(href);\n\n let score = scoreBaseUrl(href, baseRegex);\n score += scoreNextLinkText(linkData);\n score += scoreCapLinks(linkData);\n score += scorePrevLink(linkData);\n score += scoreByParents($link);\n score += scoreExtraneousLinks(href);\n score += scorePageInLink(pageNum, isWp);\n score += scoreLinkText(linkText, pageNum);\n score += scoreSimilarity(score, articleUrl, href);\n\n possiblePage.score = score;\n\n return possiblePages;\n }, {});\n\n return Reflect.ownKeys(scoredPages).length === 0 ? null : scoredPages;\n}\n","import URL from 'url';\n\nimport {\n articleBaseUrl,\n removeAnchor,\n} from 'utils/text';\nimport scoreLinks from './scoring/score-links';\n\n// Looks for and returns next page url\n// for multi-page articles\nconst GenericNextPageUrlExtractor = {\n extract({ $, url, parsedUrl, previousUrls = [] }) {\n parsedUrl = parsedUrl || URL.parse(url);\n\n const articleUrl = removeAnchor(url);\n const baseUrl = articleBaseUrl(url, parsedUrl);\n\n const links = $('a[href]').toArray();\n\n const scoredLinks = scoreLinks({\n links,\n articleUrl,\n baseUrl,\n parsedUrl,\n $,\n previousUrls,\n });\n\n // If no links were scored, return null\n if (!scoredLinks) return null;\n\n // now that we've scored all possible pages,\n // find the biggest one.\n const topPage = Reflect.ownKeys(scoredLinks).reduce((acc, link) => {\n const scoredLink = scoredLinks[link];\n return scoredLink.score > acc.score ? scoredLink : acc;\n }, { score: -100 });\n\n // If the score is less than 50, we're not confident enough to use it,\n // so we fail.\n if (topPage.score >= 50) {\n return topPage.href;\n }\n\n return null;\n },\n};\n\nexport default GenericNextPageUrlExtractor;\n","export const CANONICAL_META_SELECTORS = [\n 'og:url',\n];\n","import URL from 'url';\nimport { extractFromMeta } from 'utils/dom';\n\nimport { CANONICAL_META_SELECTORS } from './constants';\n\nfunction parseDomain(url) {\n const parsedUrl = URL.parse(url);\n const { hostname } = parsedUrl;\n return hostname;\n}\n\nfunction result(url) {\n return {\n url,\n domain: parseDomain(url),\n };\n}\n\nconst GenericUrlExtractor = {\n extract({ $, url, metaCache }) {\n const $canonical = $('link[rel=canonical]');\n if ($canonical.length !== 0) {\n const href = $canonical.attr('href');\n if (href) {\n return result(href);\n }\n }\n\n const metaUrl = extractFromMeta($, CANONICAL_META_SELECTORS, metaCache);\n if (metaUrl) {\n return result(metaUrl);\n }\n\n return result(url);\n },\n\n};\n\nexport default GenericUrlExtractor;\n","export const EXCERPT_META_SELECTORS = [\n 'og:description',\n 'twitter:description',\n];\n","import ellipsize from 'ellipsize';\n\nimport {\n extractFromMeta,\n stripTags,\n} from 'utils/dom';\n\nimport { EXCERPT_META_SELECTORS } from './constants';\n\nexport function clean(content, $, maxLength = 200) {\n content = content.replace(/[\\s\\n]+/g, ' ').trim();\n return ellipsize(content, maxLength, { ellipse: '…' });\n}\n\nconst GenericExcerptExtractor = {\n extract({ $, content, metaCache }) {\n const excerpt = extractFromMeta($, EXCERPT_META_SELECTORS, metaCache);\n if (excerpt) {\n return clean(stripTags(excerpt, $));\n }\n // Fall back to excerpting from the extracted content\n const maxLength = 200;\n const shortContent = content.slice(0, maxLength * 5);\n return clean($(shortContent).text(), $, maxLength);\n },\n};\n\nexport default GenericExcerptExtractor;\n","import cheerio from 'cheerio';\n\nimport { normalizeSpaces } from 'utils/text';\n\nconst GenericWordCountExtractor = {\n extract({ content }) {\n const $ = cheerio.load(content);\n const $content = $('div').first();\n\n const text = normalizeSpaces($content.text());\n return text.split(/\\s/).length;\n },\n};\n\nexport default GenericWordCountExtractor;\n","import cheerio from 'cheerio';\nimport stringDirection from 'string-direction';\n\nimport GenericContentExtractor from './content/extractor';\nimport GenericTitleExtractor from './title/extractor';\nimport GenericAuthorExtractor from './author/extractor';\nimport GenericDatePublishedExtractor from './date-published/extractor';\nimport GenericDekExtractor from './dek/extractor';\nimport GenericLeadImageUrlExtractor from './lead-image-url/extractor';\nimport GenericNextPageUrlExtractor from './next-page-url/extractor';\nimport GenericUrlExtractor from './url/extractor';\nimport GenericExcerptExtractor from './excerpt/extractor';\nimport GenericWordCountExtractor from './word-count/extractor';\n\nconst GenericExtractor = {\n // This extractor is the default for all domains\n domain: '*',\n title: GenericTitleExtractor.extract,\n date_published: GenericDatePublishedExtractor.extract,\n author: GenericAuthorExtractor.extract,\n content: GenericContentExtractor.extract.bind(GenericContentExtractor),\n lead_image_url: GenericLeadImageUrlExtractor.extract,\n dek: GenericDekExtractor.extract,\n next_page_url: GenericNextPageUrlExtractor.extract,\n url_and_domain: GenericUrlExtractor.extract,\n excerpt: GenericExcerptExtractor.extract,\n word_count: GenericWordCountExtractor.extract,\n direction: ({ title }) => stringDirection.getDirection(title),\n\n extract(options) {\n const { html, $ } = options;\n\n if (html && !$) {\n const loaded = cheerio.load(html);\n options.$ = loaded;\n }\n\n const title = this.title(options);\n const date_published = this.date_published(options);\n const author = this.author(options);\n const content = this.content({ ...options, title });\n const lead_image_url = this.lead_image_url({ ...options, content });\n const dek = this.dek({ ...options, content });\n const next_page_url = this.next_page_url(options);\n const excerpt = this.excerpt({ ...options, content });\n const word_count = this.word_count({ ...options, content });\n const direction = this.direction({ title });\n const { url, domain } = this.url_and_domain(options);\n\n return {\n title,\n author,\n date_published: date_published || null,\n dek,\n lead_image_url,\n content,\n next_page_url,\n url,\n domain,\n excerpt,\n word_count,\n direction,\n };\n },\n};\n\nexport default GenericExtractor;\n","import {\n MediumExtractor,\n BloggerExtractor,\n} from './custom/';\n\nconst Detectors = {\n 'meta[name=\"al:ios:app_name\"][value=\"Medium\"]': MediumExtractor,\n 'meta[name=\"generator\"][value=\"blogger\"]': BloggerExtractor,\n};\n\nexport default function detectByHtml($) {\n const selector = Reflect.ownKeys(Detectors).find(s => $(s).length > 0);\n\n return Detectors[selector];\n}\n","import URL from 'url';\n\nimport Extractors from './all';\nimport GenericExtractor from './generic';\nimport detectByHtml from './detect-by-html';\n\nexport default function getExtractor(url, parsedUrl, $) {\n parsedUrl = parsedUrl || URL.parse(url);\n const { hostname } = parsedUrl;\n const baseDomain = hostname.split('.').slice(-2).join('.');\n\n return Extractors[hostname] || Extractors[baseDomain] ||\n detectByHtml($) || GenericExtractor;\n}\n","import Cleaners from 'cleaners';\nimport { convertNodeTo } from 'utils/dom';\nimport GenericExtractor from './generic';\n\n// Remove elements by an array of selectors\nexport function cleanBySelectors($content, $, { clean }) {\n if (!clean) return $content;\n\n $(clean.join(','), $content).remove();\n\n return $content;\n}\n\n// Transform matching elements\nexport function transformElements($content, $, { transforms }) {\n if (!transforms) return $content;\n\n Reflect.ownKeys(transforms).forEach((key) => {\n const $matches = $(key, $content);\n const value = transforms[key];\n\n // If value is a string, convert directly\n if (typeof value === 'string') {\n $matches.each((index, node) => {\n convertNodeTo($(node), $, transforms[key]);\n });\n } else if (typeof value === 'function') {\n // If value is function, apply function to node\n $matches.each((index, node) => {\n const result = value($(node), $);\n // If function returns a string, convert node to that value\n if (typeof result === 'string') {\n convertNodeTo($(node), $, result);\n }\n });\n }\n });\n\n return $content;\n}\n\nfunction findMatchingSelector($, selectors, extractHtml) {\n return selectors.find((selector) => {\n if (Array.isArray(selector)) {\n if (extractHtml) {\n return selector.reduce((acc, s) => acc && $(s).length > 0, true);\n }\n\n const [s, attr] = selector;\n return $(s).length === 1 && $(s).attr(attr) && $(s).attr(attr).trim() !== '';\n }\n\n return $(selector).length === 1 && $(selector).text().trim() !== '';\n });\n}\n\nexport function select(opts) {\n const { $, type, extractionOpts, extractHtml = false } = opts;\n // Skip if there's not extraction for this type\n if (!extractionOpts) return null;\n\n // If a string is hardcoded for a type (e.g., Wikipedia\n // contributors), return the string\n if (typeof extractionOpts === 'string') return extractionOpts;\n\n const { selectors, defaultCleaner = true } = extractionOpts;\n\n const matchingSelector = findMatchingSelector($, selectors, extractHtml);\n\n if (!matchingSelector) return null;\n\n // Declaring result; will contain either\n // text or html, which will be cleaned\n // by the appropriate cleaner type\n\n // If the selector type requests html as its return type\n // transform and clean the element with provided selectors\n let $content;\n if (extractHtml) {\n // If matching selector is an array, we're considering this a\n // multi-match selection, which allows the parser to choose several\n // selectors to include in the result. Note that all selectors in the\n // array must match in order for this selector to trigger\n if (Array.isArray(matchingSelector)) {\n $content = $(matchingSelector.join(','));\n const $wrapper = $('<div></div>');\n $content.each((index, element) => {\n $wrapper.append(element);\n });\n\n $content = $wrapper;\n } else {\n $content = $(matchingSelector);\n }\n\n // Wrap in div so transformation can take place on root element\n $content.wrap($('<div></div>'));\n $content = $content.parent();\n\n $content = transformElements($content, $, extractionOpts);\n $content = cleanBySelectors($content, $, extractionOpts);\n\n $content = Cleaners[type]($content, { ...opts, defaultCleaner });\n\n return $.html($content);\n }\n\n let result;\n\n // if selector is an array (e.g., ['img', 'src']),\n // extract the attr\n if (Array.isArray(matchingSelector)) {\n const [selector, attr] = matchingSelector;\n result = $(selector).attr(attr).trim();\n } else {\n let $node = $(matchingSelector);\n\n $node = cleanBySelectors($node, $, extractionOpts);\n $node = transformElements($node, $, extractionOpts);\n\n result = $node.text().trim();\n }\n\n // Allow custom extractor to skip default cleaner\n // for this type; defaults to true\n if (defaultCleaner) {\n return Cleaners[type](result, { ...opts, ...extractionOpts });\n }\n\n return result;\n}\n\nfunction extractResult(opts) {\n const { type, extractor, fallback = true } = opts;\n\n const result = select({ ...opts, extractionOpts: extractor[type] });\n\n // If custom parser succeeds, return the result\n if (result) {\n return result;\n }\n\n // If nothing matches the selector, and fallback is enabled,\n // run the Generic extraction\n if (fallback) return GenericExtractor[type](opts);\n\n return null;\n}\n\nconst RootExtractor = {\n extract(extractor = GenericExtractor, opts) {\n const { contentOnly, extractedTitle } = opts;\n // This is the generic extractor. Run its extract method\n if (extractor.domain === '*') return extractor.extract(opts);\n\n opts = {\n ...opts,\n extractor,\n };\n\n if (contentOnly) {\n const content = extractResult({\n ...opts, type: 'content', extractHtml: true, title: extractedTitle,\n });\n return {\n content,\n };\n }\n const title = extractResult({ ...opts, type: 'title' });\n const date_published = extractResult({ ...opts, type: 'date_published' });\n const author = extractResult({ ...opts, type: 'author' });\n const next_page_url = extractResult({ ...opts, type: 'next_page_url' });\n const content = extractResult({\n ...opts, type: 'content', extractHtml: true, title,\n });\n const lead_image_url = extractResult({ ...opts, type: 'lead_image_url', content });\n const excerpt = extractResult({ ...opts, type: 'excerpt', content });\n const dek = extractResult({ ...opts, type: 'dek', content, excerpt });\n const word_count = extractResult({ ...opts, type: 'word_count', content });\n const direction = extractResult({ ...opts, type: 'direction', title });\n const { url, domain } =\n extractResult({ ...opts, type: 'url_and_domain' }) || { url: null, domain: null };\n\n return {\n title,\n content,\n author,\n date_published,\n lead_image_url,\n dek,\n next_page_url,\n url,\n domain,\n excerpt,\n word_count,\n direction,\n };\n },\n};\n\nexport default RootExtractor;\n","import { removeAnchor } from 'utils/text';\nimport RootExtractor from 'extractors/root-extractor';\nimport GenericExtractor from 'extractors/generic';\nimport Resource from 'resource';\n\nexport default async function collectAllPages(\n {\n next_page_url,\n html,\n $,\n metaCache,\n result,\n Extractor,\n title,\n url,\n }\n) {\n // At this point, we've fetched just the first page\n let pages = 1;\n const previousUrls = [removeAnchor(url)];\n\n // If we've gone over 26 pages, something has\n // likely gone wrong.\n while (next_page_url && pages < 26) {\n pages += 1;\n $ = await Resource.create(next_page_url);\n html = $.html();\n\n const extractorOpts = {\n url: next_page_url,\n html,\n $,\n metaCache,\n contentOnly: true,\n extractedTitle: title,\n previousUrls,\n };\n\n const nextPageResult = RootExtractor.extract(Extractor, extractorOpts);\n\n previousUrls.push(next_page_url);\n result = {\n ...result,\n content: `${result.content}<hr><h4>Page ${pages}</h4>${nextPageResult.content}`,\n };\n\n next_page_url = nextPageResult.next_page_url;\n }\n\n const word_count = GenericExtractor.word_count({ content: `<div>${result.content}</div>` });\n return {\n ...result,\n total_pages: pages,\n pages_rendered: pages,\n word_count,\n };\n}\n","import URL from 'url';\nimport cheerio from 'cheerio';\n\nimport Resource from 'resource';\nimport {\n validateUrl,\n Errors,\n} from 'utils';\nimport getExtractor from 'extractors/get-extractor';\nimport RootExtractor from 'extractors/root-extractor';\nimport collectAllPages from 'extractors/collect-all-pages';\n\nconst Mercury = {\n async parse(url, html, opts = {}) {\n const {\n fetchAllPages = true,\n fallback = true,\n } = opts;\n\n // if no url was passed and this is the browser version,\n // set url to window.location.href and load the html\n // from the current page\n if (!url && cheerio.browser) {\n url = window.location.href; // eslint-disable-line no-undef\n html = html || cheerio.html();\n }\n\n const parsedUrl = URL.parse(url);\n\n if (!validateUrl(parsedUrl)) {\n return Errors.badUrl;\n }\n\n const $ = await Resource.create(url, html, parsedUrl);\n\n const Extractor = getExtractor(url, parsedUrl, $);\n // console.log(`Using extractor for ${Extractor.domain}`);\n\n // If we found an error creating the resource, return that error\n if ($.failed) {\n return $;\n }\n\n // if html still has not been set (i.e., url passed to Mercury.parse),\n // set html from the response of Resource.create\n if (!html) {\n html = $.html();\n }\n\n // Cached value of every meta name in our document.\n // Used when extracting title/author/date_published/dek\n const metaCache = $('meta').map((_, node) => $(node).attr('name')).toArray();\n\n let result = RootExtractor.extract(\n Extractor,\n {\n url,\n html,\n $,\n metaCache,\n parsedUrl,\n fallback,\n });\n\n const { title, next_page_url } = result;\n\n // Fetch more pages if next_page_url found\n if (fetchAllPages && next_page_url) {\n result = await collectAllPages(\n {\n Extractor,\n next_page_url,\n html,\n $,\n metaCache,\n result,\n title,\n url,\n }\n );\n } else {\n result = {\n ...result,\n total_pages: 1,\n rendered_pages: 1,\n };\n }\n\n return result;\n },\n\n browser: !!cheerio.browser,\n\n // A convenience method for getting a resource\n // to work with, e.g., for custom extractor generator\n async fetchResource(url) {\n return await Resource.create(url);\n },\n\n};\n\nexport default Mercury;\n"],"names":["NORMALIZE_RE","normalizeSpaces","text","replace","trim","extractFromUrl","url","regexList","matchRe","find","re","test","exec","PAGE_IN_HREF_RE","RegExp","HAS_ALPHA_RE","IS_ALPHA_RE","IS_DIGIT_RE","ENCODING_RE","DEFAULT_ENCODING","pageNumFromUrl","matches","match","pageNum","parseInt","removeAnchor","split","isGoodSegment","segment","index","firstSegmentHasLetters","goodSegment","length","toLowerCase","articleBaseUrl","parsed","parsedUrl","URL","parse","protocol","host","path","cleanedSegments","reverse","reduce","acc","rawSegment","includes","possibleSegment","fileExt","push","join","SENTENCE_END_RE","hasSentenceEnd","excerptContent","content","words","slice","getEncoding","str","encoding","testEncode","iconv","encodingExists","range","start","end","validateUrl","hostname","Errors","REQUEST_HEADERS","cheerio","browser","FETCH_TIMEOUT","BAD_CONTENT_TYPES","BAD_CONTENT_TYPES_RE","MAX_CONTENT_LENGTH","get","options","resolve","reject","err","response","body","validateResponse","parseNon2xx","statusMessage","statusCode","Error","error","headers","contentType","contentLength","encodeURI","href","badUrl","fetchResource","convertMetaProp","$","from","to","each","_","node","$node","value","attr","removeAttr","normalizeMetaTags","SPACER_RE","KEEP_CLASS","KEEP_SELECTORS","STRIP_OUTPUT_TAGS","REMOVE_ATTRS","REMOVE_ATTR_SELECTORS","map","selector","REMOVE_ATTR_LIST","WHITELIST_ATTRS","WHITELIST_ATTRS_RE","REMOVE_EMPTY_TAGS","REMOVE_EMPTY_SELECTORS","tag","CLEAN_CONDITIONALLY_TAGS","HEADER_TAGS","HEADER_TAG_LIST","UNLIKELY_CANDIDATES_BLACKLIST","UNLIKELY_CANDIDATES_WHITELIST","DIV_TO_P_BLOCK_TAGS","POSITIVE_SCORE_HINTS","POSITIVE_SCORE_RE","NEGATIVE_SCORE_HINTS","NEGATIVE_SCORE_RE","IS_WP_SELECTOR","PAGE_RE","BLOCK_LEVEL_TAGS","BLOCK_LEVEL_TAGS_RE","candidatesBlacklist","CANDIDATES_BLACKLIST","candidatesWhitelist","CANDIDATES_WHITELIST","stripUnlikelyCandidates","not","classes","id","classAndId","remove","brsToPs","collapsing","element","$element","nextElement","next","tagName","paragraphize","br","sibling","nextSibling","p","appendTo","replaceWith","convertDivs","div","$div","convertable","children","convertSpans","span","$span","parents","convertToParagraphs","convertNodeTo","attrs","getAttrs","attribString","key","html","contents","cleanForHeight","$img","height","width","removeSpacers","cleanImages","$article","img","markToKeep","article","tags","addClass","stripJunkTags","cleanHOnes","$hOnes","removeAllButWhitelist","removeClass","cleanAttributes","parent","removeEmpty","$p","NON_TOP_CANDIDATE_TAGS","NON_TOP_CANDIDATE_TAGS_RE","HNEWS_CONTENT_SELECTORS","PHOTO_HINTS","PHOTO_HINTS_RE","READABILITY_ASSET","DIGIT_RE","BR_TAGS_RE","BR_TAG_RE","UNLIKELY_RE","PARAGRAPH_SCORE_TAGS","CHILD_CONTENT_TAGS","BAD_TAGS","HTML_OR_BODY_RE","getWeight","score","getScore","parseFloat","scoreCommas","idkRe","scoreLength","textLength","chunks","lengthBonus","Math","min","max","scoreParagraph","setScore","addScore","amount","getOrInitScore","e","addToParent","weightNodes","scoreNode","addScoreTo","scorePs","$parent","rawScore","scoreContent","forEach","parentSelector","childSelector","mergeSiblings","$candidate","topScore","siblingScoreThreshold","wrappingDiv","$sibling","siblingScore","append","contentBonus","density","linkDensity","newScore","siblingContent","siblingContentLength","first","findTopCandidate","removeUnlessContent","weight","hasClass","pCount","inputCount","imgCount","nodeIsList","previousNode","prev","scriptCount","cleanTags","cleanHeaders","title","header","$header","prevAll","rewriteTopLevel","absolutize","rootUrl","$content","absoluteUrl","makeLinksAbsolute","totalTextLength","linkText","linkLength","extractFromMeta","metaNames","cachedNames","foundNames","filter","indexOf","name","type","nodes","values","toArray","metaValue","stripTags","isGoodNode","maxChildren","withinComment","extractFromSelectors","selectors","textOnly","cleanText","commentParent","nodeClass","class","undefined","nodeIsSufficient","isWordpress","attribs","attributes","setAttr","val","setAttribute","setAttrs","removeAttribute","IS_LINK","IS_IMAGE","TAGS_TO_REMOVE","convertLazyLoadedImages","isComment","cleanComments","root","clean","Resource","preparedResponse","validResponse","result","failed","generateDoc","encodeDoc","decodedContent","decode","load","metaContentType","properEncoding","merge","extractor","domains","domain","mergeSupportedDomains","supportedDomains","BloggerExtractor","NYMagExtractor","$children","WikipediaExtractor","prepend","TwitterExtractor","tweets","$tweetContainer","NYTimesExtractor","src","TheAtlanticExtractor","NewYorkerExtractor","WiredExtractor","MSNExtractor","YahooExtractor","BuzzfeedExtractor","has","WikiaExtractor","LittleThingsExtractor","PoliticoExtractor","DeadspinExtractor","youtubeId","BroadwayWorldExtractor","ApartmentTherapyExtractor","data","JSON","sources","MediumExtractor","ytRe","thumb","decodeURIComponent","$caption","empty","WwwTmzComExtractor","WwwWashingtonpostComExtractor","WwwHuffingtonpostComExtractor","NewrepublicComExtractor","MoneyCnnComExtractor","WwwThevergeComExtractor","WwwCnnComExtractor","$text","WwwAolComExtractor","WwwYoutubeComExtractor","videoId","WwwTheguardianComExtractor","WwwSbnationComExtractor","WwwBloombergComExtractor","WwwBustleComExtractor","WwwNprOrgExtractor","WwwRecodeNetExtractor","QzComExtractor","WwwDmagazineComExtractor","WwwReutersComExtractor","MashableComExtractor","WwwChicagotribuneComExtractor","WwwVoxComExtractor","imgHtml","NewsNationalgeographicComExtractor","$imgSrc","WwwNationalgeographicComExtractor","$imageParent","$dataAttrContainer","imgPath1","imgPath2","WwwLatimesComExtractor","$figure","PagesixComExtractor","ThefederalistpapersOrgExtractor","WwwCbssportsComExtractor","WwwMsnbcComExtractor","lead_image_url","WwwThepoliticalinsiderComExtractor","WwwMentalflossComExtractor","AbcnewsGoComExtractor","WwwNydailynewsComExtractor","WwwCnbcComExtractor","WwwPopsugarComExtractor","ObserverComExtractor","PeopleComExtractor","WwwUsmagazineComExtractor","WwwRollingstoneComExtractor","twofortysevensportsComExtractor","UproxxComExtractor","WwwEonlineComExtractor","WwwMiamiheraldComExtractor","WwwRefinery29ComExtractor","WwwMacrumorsComExtractor","WwwAndroidcentralComExtractor","WwwSiComExtractor","WwwRawstoryComExtractor","WwwCnetComExtractor","WwwCinemablendComExtractor","WwwTodayComExtractor","WwwHowtogeekComExtractor","WwwAlComExtractor","WwwThepennyhoarderComExtractor","WwwWesternjournalismComExtractor","FusionNetExtractor","WwwAmericanowComExtractor","ScienceflyComExtractor","HellogigglesComExtractor","ThoughtcatalogComExtractor","WwwNjComExtractor","WwwInquisitrComExtractor","WwwNbcnewsComExtractor","FortuneComExtractor","WwwLinkedinComExtractor","ObamawhitehouseArchivesGovExtractor","WwwOpposingviewsComExtractor","WwwProspectmagazineCoUkExtractor","ForwardComExtractor","WwwQdailyComExtractor","GothamistComExtractor","WwwFoolComExtractor","WwwSlateComExtractor","IciRadioCanadaCaExtractor","CustomExtractors","CLEAN_AUTHOR_RE","TEXT_LINK_RE","MS_DATE_STRING","SEC_DATE_STRING","CLEAN_DATE_STRING_RE","TIME_MERIDIAN_SPACE_RE","TIME_MERIDIAN_DOTS_RE","months","allMonths","timestamp1","timestamp2","timestamp3","SPLIT_DATE_STRING","TIME_WITH_OFFSET_RE","TITLE_SPLITTERS_RE","DOMAIN_ENDINGS_RE","cleanAuthor","author","leadImageUrl","validUrl","isWebUri","cleanDek","dek","excerpt","dekText","cleanDateString","dateString","createDate","timezone","format","moment","Date","tz","parseFormat","cleanDatePublished","toISOString","date","isValid","extractCleanNode","cleanConditionally","defaultCleaner","cleanTitle","resolveSplitTitle","h1","extractBreadcrumbTitle","splitTitle","termCounts","titleText","maxTerm","termCount","splitEnds","longestEnd","cleanDomainFromTitle","nakedDomain","startSlug","startSlugRatio","wuzzy","levenshtein","endSlug","endSlugRatio","newTitle","Cleaners","cleanImage","cleanContent","extractBestNode","opts","$topCandidate","GenericContentExtractor","defaultOpts","getContentNode","cleanAndReturnNode","k","STRONG_TITLE_META_TAGS","WEAK_TITLE_META_TAGS","STRONG_TITLE_SELECTORS","WEAK_TITLE_SELECTORS","GenericTitleExtractor","metaCache","AUTHOR_META_TAGS","AUTHOR_MAX_LENGTH","AUTHOR_SELECTORS","bylineRe","BYLINE_SELECTORS_RE","GenericAuthorExtractor","regex","DATE_PUBLISHED_META_TAGS","DATE_PUBLISHED_SELECTORS","abbrevMonthsStr","DATE_PUBLISHED_URL_RES","GenericDatePublishedExtractor","datePublished","GenericDekExtractor","LEAD_IMAGE_URL_META_TAGS","LEAD_IMAGE_URL_SELECTORS","POSITIVE_LEAD_IMAGE_URL_HINTS","POSITIVE_LEAD_IMAGE_URL_HINTS_RE","NEGATIVE_LEAD_IMAGE_URL_HINTS","NEGATIVE_LEAD_IMAGE_URL_HINTS_RE","GIF_RE","JPG_RE","getSig","scoreImageUrl","scoreAttr","scoreByParents","$figParent","$gParent","scoreBySibling","scoreByDimensions","area","round","scoreByPosition","$imgs","GenericLeadImageUrlExtractor","cleanUrl","imageUrl","imgs","imgScores","topUrl","scoreSimilarity","articleUrl","similarity","difflib","SequenceMatcher","ratio","diffPercent","diffModifier","scoreLinkText","linkTextAsNum","scorePageInLink","isWp","EXTRANEOUS_LINK_HINTS","EXTRANEOUS_LINK_HINTS_RE","NEXT_LINK_TEXT_RE","CAP_LINK_TEXT_RE","PREV_LINK_TEXT_RE","scoreExtraneousLinks","makeSig","$link","positiveMatch","negativeMatch","parentData","scorePrevLink","linkData","shouldScore","baseUrl","previousUrls","linkHost","fragment","scoreBaseUrl","baseRegex","scoreNextLinkText","scoreCapLinks","makeBaseRegex","scoreLinks","links","scoredPages","possiblePages","link","possiblePage","GenericNextPageUrlExtractor","scoredLinks","topPage","scoredLink","CANONICAL_META_SELECTORS","parseDomain","GenericUrlExtractor","$canonical","metaUrl","EXCERPT_META_SELECTORS","maxLength","ellipsize","ellipse","GenericExcerptExtractor","shortContent","GenericWordCountExtractor","GenericExtractor","extract","bind","stringDirection","getDirection","loaded","date_published","next_page_url","word_count","direction","url_and_domain","Detectors","detectByHtml","s","getExtractor","baseDomain","Extractors","cleanBySelectors","transformElements","transforms","$matches","findMatchingSelector","extractHtml","Array","isArray","select","extractionOpts","matchingSelector","$wrapper","wrap","extractResult","fallback","RootExtractor","contentOnly","extractedTitle","Extractor","pages","create","extractorOpts","nextPageResult","collectAllPages","Mercury","fetchAllPages","window","location"],"mappings":"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"} \ No newline at end of file diff --git a/dist/mercury.web.js b/dist/mercury.web.js index c12b8b350..0bc14b2e3 100644 --- a/dist/mercury.web.js +++ b/dist/mercury.web.js @@ -3,9 +3,9 @@ this.next=0,this.sent=this._sent=g,this.done=!1,this.delegate=null,this.tryEntri r.parentNode&&(n&&pe.contains(r.ownerDocument,r)&&y(v(r,"script")),r.parentNode.removeChild(r));return e}function D(e,t,n){var r,a,i,o,s=e.style;return n=n||st(e),n&&(o=n.getPropertyValue(t)||n[t],""!==o||pe.contains(e.ownerDocument,e)||(o=pe.style(e,t)),!de.pixelMarginRight()&&ot.test(o)&&it.test(t)&&(r=s.width,a=s.minWidth,i=s.maxWidth,s.minWidth=s.maxWidth=s.width=o,o=n.width,s.width=r,s.minWidth=a,s.maxWidth=i)),void 0!==o?o+"":o}function j(e,t){return{get:function(){return e()?void delete this.get:(this.get=t).apply(this,arguments)}}}function P(e){if(e in dt)return e;for(var t=e[0].toUpperCase()+e.slice(1),n=ft.length;n--;)if(e=ft[n]+t,e in dt)return e}function z(e,t,n){var r=Ye.exec(t);return r?Math.max(0,r[2]-(n||0))+(r[3]||"px"):t}function N(e,t,n,r,a){var i,o=0;for(i=n===(r?"border":"content")?4:"width"===t?1:0;i<4;i+=2)"margin"===n&&(o+=pe.css(e,n+Be[i],!0,a)),r?("content"===n&&(o-=pe.css(e,"padding"+Be[i],!0,a)),"margin"!==n&&(o-=pe.css(e,"border"+Be[i]+"Width",!0,a))):(o+=pe.css(e,"padding"+Be[i],!0,a),"padding"!==n&&(o+=pe.css(e,"border"+Be[i]+"Width",!0,a)));return o}function W(e,t,n){var r,a=!0,i=st(e),o="border-box"===pe.css(e,"boxSizing",!1,i);if(e.getClientRects().length&&(r=e.getBoundingClientRect()[t]),r<=0||null==r){if(r=D(e,t,i),(r<0||null==r)&&(r=e.style[t]),ot.test(r))return r;a=o&&(de.boxSizingReliable()||r===e.style[t]),r=parseFloat(r)||0}return r+N(e,t,n||(o?"border":"content"),a,i)+"px"}function L(e,t,n,r,a){return new L.prototype.init(e,t,n,r,a)}function R(){pt&&(e.requestAnimationFrame(R),pe.fx.tick())}function q(){return e.setTimeout(function(){ht=void 0}),ht=pe.now()}function Y(e,t){var n,r=0,a={height:e};for(t=t?1:0;r<4;r+=2-t)n=Be[r],a["margin"+n]=a["padding"+n]=e;return t&&(a.opacity=a.width=e),a}function B(e,t,n){for(var r,a=(I.tweeners[t]||[]).concat(I.tweeners["*"]),i=0,o=a.length;i<o;i++)if(r=a[i].call(n,t,e))return r}function H(e,t,n){var r,a,i,o,s,u,c,l,f="width"in t||"height"in t,d=this,h={},p=e.style,m=e.nodeType&&He(e),v=Ne.get(e,"fxshow");n.queue||(o=pe._queueHooks(e,"fx"),null==o.unqueued&&(o.unqueued=0,s=o.empty.fire,o.empty.fire=function(){o.unqueued||s()}),o.unqueued++,d.always(function(){d.always(function(){o.unqueued--,pe.queue(e,"fx").length||o.empty.fire()})}));for(r in t)if(a=t[r],mt.test(a)){if(delete t[r],i=i||"toggle"===a,a===(m?"hide":"show")){if("show"!==a||!v||void 0===v[r])continue;m=!0}h[r]=v&&v[r]||pe.style(e,r)}if(u=!pe.isEmptyObject(t),u||!pe.isEmptyObject(h)){f&&1===e.nodeType&&(n.overflow=[p.overflow,p.overflowX,p.overflowY],c=v&&v.display,null==c&&(c=Ne.get(e,"display")),l=pe.css(e,"display"),"none"===l&&(c?l=c:(g([e],!0),c=e.style.display||c,l=pe.css(e,"display"),g([e]))),("inline"===l||"inline-block"===l&&null!=c)&&"none"===pe.css(e,"float")&&(u||(d.done(function(){p.display=c}),null==c&&(l=p.display,c="none"===l?"":l)),p.display="inline-block")),n.overflow&&(p.overflow="hidden",d.always(function(){p.overflow=n.overflow[0],p.overflowX=n.overflow[1],p.overflowY=n.overflow[2]})),u=!1;for(r in h)u||(v?"hidden"in v&&(m=v.hidden):v=Ne.access(e,"fxshow",{display:c}),i&&(v.hidden=!m),m&&g([e],!0),d.done(function(){m||g([e]),Ne.remove(e,"fxshow");for(r in h)pe.style(e,r,h[r])})),u=B(m?v[r]:0,r,d),r in v||(v[r]=u.start,m&&(u.end=u.start,u.start=0))}}function F(e,t){var n,r,a,i,o;for(n in e)if(r=pe.camelCase(n),a=t[r],i=e[n],pe.isArray(i)&&(a=i[1],i=e[n]=i[0]),n!==r&&(e[r]=i,delete e[n]),o=pe.cssHooks[r],o&&"expand"in o){i=o.expand(i),delete e[r];for(n in i)n in e||(e[n]=i[n],t[n]=a)}else t[r]=a}function I(e,t,n){var r,a,i=0,o=I.prefilters.length,s=pe.Deferred().always(function(){delete u.elem}),u=function(){if(a)return!1;for(var t=ht||q(),n=Math.max(0,c.startTime+c.duration-t),r=n/c.duration||0,i=1-r,o=0,u=c.tweens.length;o<u;o++)c.tweens[o].run(i);return s.notifyWith(e,[c,i,n]),i<1&&u?n:(s.resolveWith(e,[c]),!1)},c=s.promise({elem:e,props:pe.extend({},t),opts:pe.extend(!0,{specialEasing:{},easing:pe.easing._default},n),originalProperties:t,originalOptions:n,startTime:ht||q(),duration:n.duration,tweens:[],createTween:function(t,n){var r=pe.Tween(e,c.opts,t,n,c.opts.specialEasing[t]||c.opts.easing);return c.tweens.push(r),r},stop:function(t){var n=0,r=t?c.tweens.length:0;if(a)return this;for(a=!0;n<r;n++)c.tweens[n].run(1);return t?(s.notifyWith(e,[c,1,0]),s.resolveWith(e,[c,t])):s.rejectWith(e,[c,t]),this}}),l=c.props;for(F(l,c.opts.specialEasing);i<o;i++)if(r=I.prefilters[i].call(c,e,l,c.opts))return pe.isFunction(r.stop)&&(pe._queueHooks(c.elem,c.opts.queue).stop=pe.proxy(r.stop,r)),r;return pe.map(l,B,c),pe.isFunction(c.opts.start)&&c.opts.start.call(e,c),pe.fx.timer(pe.extend(u,{elem:e,anim:c,queue:c.opts.queue})),c.progress(c.opts.progress).done(c.opts.done,c.opts.complete).fail(c.opts.fail).always(c.opts.always)}function U(e){var t=e.match(Oe)||[];return t.join(" ")}function G(e){return e.getAttribute&&e.getAttribute("class")||""}function $(e,t,n,r){var a;if(pe.isArray(t))pe.each(t,function(t,a){n||Tt.test(e)?r(e,a):$(e+"["+("object"==typeof a&&null!=a?t:"")+"]",a,n,r)});else if(n||"object"!==pe.type(t))r(e,t);else for(a in t)$(e+"["+a+"]",t[a],n,r)}function V(e){return function(t,n){"string"!=typeof t&&(n=t,t="*");var r,a=0,i=t.toLowerCase().match(Oe)||[];if(pe.isFunction(n))for(;r=i[a++];)"+"===r[0]?(r=r.slice(1)||"*",(e[r]=e[r]||[]).unshift(n)):(e[r]=e[r]||[]).push(n)}}function K(e,t,n,r){function a(s){var u;return i[s]=!0,pe.each(e[s]||[],function(e,s){var c=s(t,n,r);return"string"!=typeof c||o||i[c]?o?!(u=c):void 0:(t.dataTypes.unshift(c),a(c),!1)}),u}var i={},o=e===Rt;return a(t.dataTypes[0])||!i["*"]&&a("*")}function X(e,t){var n,r,a=pe.ajaxSettings.flatOptions||{};for(n in t)void 0!==t[n]&&((a[n]?e:r||(r={}))[n]=t[n]);return r&&pe.extend(!0,e,r),e}function J(e,t,n){for(var r,a,i,o,s=e.contents,u=e.dataTypes;"*"===u[0];)u.shift(),void 0===r&&(r=e.mimeType||t.getResponseHeader("Content-Type"));if(r)for(a in s)if(s[a]&&s[a].test(r)){u.unshift(a);break}if(u[0]in n)i=u[0];else{for(a in n){if(!u[0]||e.converters[a+" "+u[0]]){i=a;break}o||(o=a)}i=i||o}if(i)return i!==u[0]&&u.unshift(i),n[i]}function Z(e,t,n,r){var a,i,o,s,u,c={},l=e.dataTypes.slice();if(l[1])for(o in e.converters)c[o.toLowerCase()]=e.converters[o];for(i=l.shift();i;)if(e.responseFields[i]&&(n[e.responseFields[i]]=t),!u&&r&&e.dataFilter&&(t=e.dataFilter(t,e.dataType)),u=i,i=l.shift())if("*"===i)i=u;else if("*"!==u&&u!==i){if(o=c[u+" "+i]||c["* "+i],!o)for(a in c)if(s=a.split(" "),s[1]===i&&(o=c[u+" "+s[0]]||c["* "+s[0]])){o===!0?o=c[a]:c[a]!==!0&&(i=s[0],l.unshift(s[1]));break}if(o!==!0)if(o&&e.throws)t=o(t);else try{t=o(t)}catch(e){return{state:"parsererror",error:o?e:"No conversion from "+u+" to "+i}}}return{state:"success",data:t}}function Q(e){return pe.isWindow(e)?e:9===e.nodeType&&e.defaultView}var ee=[],te=e.document,ne=Object.getPrototypeOf,re=ee.slice,ae=ee.concat,ie=ee.push,oe=ee.indexOf,se={},ue=se.toString,ce=se.hasOwnProperty,le=ce.toString,fe=le.call(Object),de={},he="3.1.1",pe=function(e,t){return new pe.fn.init(e,t)},me=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,ge=/^-ms-/,ve=/-([a-z])/g,ye=function(e,t){return t.toUpperCase()};pe.fn=pe.prototype={jquery:he,constructor:pe,length:0,toArray:function(){return re.call(this)},get:function(e){return null==e?re.call(this):e<0?this[e+this.length]:this[e]},pushStack:function(e){var t=pe.merge(this.constructor(),e);return t.prevObject=this,t},each:function(e){return pe.each(this,e)},map:function(e){return this.pushStack(pe.map(this,function(t,n){return e.call(t,n,t)}))},slice:function(){return this.pushStack(re.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(e){var t=this.length,n=+e+(e<0?t:0);return this.pushStack(n>=0&&n<t?[this[n]]:[])},end:function(){return this.prevObject||this.constructor()},push:ie,sort:ee.sort,splice:ee.splice},pe.extend=pe.fn.extend=function(){var e,t,n,r,a,i,o=arguments[0]||{},s=1,u=arguments.length,c=!1;for("boolean"==typeof o&&(c=o,o=arguments[s]||{},s++),"object"==typeof o||pe.isFunction(o)||(o={}),s===u&&(o=this,s--);s<u;s++)if(null!=(e=arguments[s]))for(t in e)n=o[t],r=e[t],o!==r&&(c&&r&&(pe.isPlainObject(r)||(a=pe.isArray(r)))?(a?(a=!1,i=n&&pe.isArray(n)?n:[]):i=n&&pe.isPlainObject(n)?n:{},o[t]=pe.extend(c,i,r)):void 0!==r&&(o[t]=r));return o},pe.extend({expando:"jQuery"+(he+Math.random()).replace(/\D/g,""),isReady:!0,error:function(e){throw new Error(e)},noop:function(){},isFunction:function(e){return"function"===pe.type(e)},isArray:Array.isArray,isWindow:function(e){return null!=e&&e===e.window},isNumeric:function(e){var t=pe.type(e);return("number"===t||"string"===t)&&!isNaN(e-parseFloat(e))},isPlainObject:function(e){var t,n;return!(!e||"[object Object]"!==ue.call(e))&&(!(t=ne(e))||(n=ce.call(t,"constructor")&&t.constructor,"function"==typeof n&&le.call(n)===fe))},isEmptyObject:function(e){var t;for(t in e)return!1;return!0},type:function(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?se[ue.call(e)]||"object":typeof e},globalEval:function(e){n(e)},camelCase:function(e){return e.replace(ge,"ms-").replace(ve,ye)},nodeName:function(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()},each:function(e,t){var n,a=0;if(r(e))for(n=e.length;a<n&&t.call(e[a],a,e[a])!==!1;a++);else for(a in e)if(t.call(e[a],a,e[a])===!1)break;return e},trim:function(e){return null==e?"":(e+"").replace(me,"")},makeArray:function(e,t){var n=t||[];return null!=e&&(r(Object(e))?pe.merge(n,"string"==typeof e?[e]:e):ie.call(n,e)),n},inArray:function(e,t,n){return null==t?-1:oe.call(t,e,n)},merge:function(e,t){for(var n=+t.length,r=0,a=e.length;r<n;r++)e[a++]=t[r];return e.length=a,e},grep:function(e,t,n){for(var r,a=[],i=0,o=e.length,s=!n;i<o;i++)r=!t(e[i],i),r!==s&&a.push(e[i]);return a},map:function(e,t,n){var a,i,o=0,s=[];if(r(e))for(a=e.length;o<a;o++)i=t(e[o],o,n),null!=i&&s.push(i);else for(o in e)i=t(e[o],o,n),null!=i&&s.push(i);return ae.apply([],s)},guid:1,proxy:function(e,t){var n,r,a;if("string"==typeof t&&(n=e[t],t=e,e=n),pe.isFunction(e))return r=re.call(arguments,2),a=function(){return e.apply(t||this,r.concat(re.call(arguments)))},a.guid=e.guid=e.guid||pe.guid++,a},now:Date.now,support:de}),"function"==typeof Symbol&&(pe.fn[Symbol.iterator]=ee[Symbol.iterator]),pe.each("Boolean Number String Function Array Date RegExp Object Error Symbol".split(" "),function(e,t){se["[object "+t+"]"]=t.toLowerCase()});var be=function(e){function t(e,t,n,r){var a,i,o,s,u,c,l,d=t&&t.ownerDocument,p=t?t.nodeType:9;if(n=n||[],"string"!=typeof e||!e||1!==p&&9!==p&&11!==p)return n;if(!r&&((t?t.ownerDocument||t:B)!==P&&j(t),t=t||P,N)){if(11!==p&&(u=ve.exec(e)))if(a=u[1]){if(9===p){if(!(o=t.getElementById(a)))return n;if(o.id===a)return n.push(o),n}else if(d&&(o=d.getElementById(a))&&q(t,o)&&o.id===a)return n.push(o),n}else{if(u[2])return Z.apply(n,t.getElementsByTagName(e)),n;if((a=u[3])&&A.getElementsByClassName&&t.getElementsByClassName)return Z.apply(n,t.getElementsByClassName(a)),n}if(A.qsa&&!G[e+" "]&&(!W||!W.test(e))){if(1!==p)d=t,l=e;else if("object"!==t.nodeName.toLowerCase()){for((s=t.getAttribute("id"))?s=s.replace(we,Ae):t.setAttribute("id",s=Y),c=T(e),i=c.length;i--;)c[i]="#"+s+" "+h(c[i]);l=c.join(","),d=ye.test(e)&&f(t.parentNode)||t}if(l)try{return Z.apply(n,d.querySelectorAll(l)),n}catch(e){}finally{s===Y&&t.removeAttribute("id")}}}return E(e.replace(se,"$1"),t,n,r)}function n(){function e(n,r){return t.push(n+" ")>x.cacheLength&&delete e[t.shift()],e[n+" "]=r}var t=[];return e}function r(e){return e[Y]=!0,e}function a(e){var t=P.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function i(e,t){for(var n=e.split("|"),r=n.length;r--;)x.attrHandle[n[r]]=t}function o(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)for(;n=n.nextSibling;)if(n===t)return-1;return e?1:-1}function s(e){return function(t){var n=t.nodeName.toLowerCase();return"input"===n&&t.type===e}}function u(e){return function(t){var n=t.nodeName.toLowerCase();return("input"===n||"button"===n)&&t.type===e}}function c(e){return function(t){return"form"in t?t.parentNode&&t.disabled===!1?"label"in t?"label"in t.parentNode?t.parentNode.disabled===e:t.disabled===e:t.isDisabled===e||t.isDisabled!==!e&&Me(t)===e:t.disabled===e:"label"in t&&t.disabled===e}}function l(e){return r(function(t){return t=+t,r(function(n,r){for(var a,i=e([],n.length,t),o=i.length;o--;)n[a=i[o]]&&(n[a]=!(r[a]=n[a]))})})}function f(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}function d(){}function h(e){for(var t=0,n=e.length,r="";t<n;t++)r+=e[t].value;return r}function p(e,t,n){var r=t.dir,a=t.next,i=a||r,o=n&&"parentNode"===i,s=F++;return t.first?function(t,n,a){for(;t=t[r];)if(1===t.nodeType||o)return e(t,n,a);return!1}:function(t,n,u){var c,l,f,d=[H,s];if(u){for(;t=t[r];)if((1===t.nodeType||o)&&e(t,n,u))return!0}else for(;t=t[r];)if(1===t.nodeType||o)if(f=t[Y]||(t[Y]={}),l=f[t.uniqueID]||(f[t.uniqueID]={}),a&&a===t.nodeName.toLowerCase())t=t[r]||t;else{if((c=l[i])&&c[0]===H&&c[1]===s)return d[2]=c[2];if(l[i]=d,d[2]=e(t,n,u))return!0}return!1}}function m(e){return e.length>1?function(t,n,r){for(var a=e.length;a--;)if(!e[a](t,n,r))return!1;return!0}:e[0]}function g(e,n,r){for(var a=0,i=n.length;a<i;a++)t(e,n[a],r);return r}function v(e,t,n,r,a){for(var i,o=[],s=0,u=e.length,c=null!=t;s<u;s++)(i=e[s])&&(n&&!n(i,r,a)||(o.push(i),c&&t.push(s)));return o}function y(e,t,n,a,i,o){return a&&!a[Y]&&(a=y(a)),i&&!i[Y]&&(i=y(i,o)),r(function(r,o,s,u){var c,l,f,d=[],h=[],p=o.length,m=r||g(t||"*",s.nodeType?[s]:s,[]),y=!e||!r&&t?m:v(m,d,e,s,u),b=n?i||(r?e:p||a)?[]:o:y;if(n&&n(y,b,s,u),a)for(c=v(b,h),a(c,[],s,u),l=c.length;l--;)(f=c[l])&&(b[h[l]]=!(y[h[l]]=f));if(r){if(i||e){if(i){for(c=[],l=b.length;l--;)(f=b[l])&&c.push(y[l]=f);i(null,b=[],c,u)}for(l=b.length;l--;)(f=b[l])&&(c=i?ee(r,f):d[l])>-1&&(r[c]=!(o[c]=f))}}else b=v(b===o?b.splice(p,b.length):b),i?i(null,o,b,u):Z.apply(o,b)})}function b(e){for(var t,n,r,a=e.length,i=x.relative[e[0].type],o=i||x.relative[" "],s=i?1:0,u=p(function(e){return e===t},o,!0),c=p(function(e){return ee(t,e)>-1},o,!0),l=[function(e,n,r){var a=!i&&(r||n!==C)||((t=n).nodeType?u(e,n,r):c(e,n,r));return t=null,a}];s<a;s++)if(n=x.relative[e[s].type])l=[p(m(l),n)];else{if(n=x.filter[e[s].type].apply(null,e[s].matches),n[Y]){for(r=++s;r<a&&!x.relative[e[r].type];r++);return y(s>1&&m(l),s>1&&h(e.slice(0,s-1).concat({value:" "===e[s-2].type?"*":""})).replace(se,"$1"),n,s<r&&b(e.slice(s,r)),r<a&&b(e=e.slice(r)),r<a&&h(e))}l.push(n)}return m(l)}function _(e,n){var a=n.length>0,i=e.length>0,o=function(r,o,s,u,c){var l,f,d,h=0,p="0",m=r&&[],g=[],y=C,b=r||i&&x.find.TAG("*",c),_=H+=null==y?1:Math.random()||.1,w=b.length;for(c&&(C=o===P||o||c);p!==w&&null!=(l=b[p]);p++){if(i&&l){for(f=0,o||l.ownerDocument===P||(j(l),s=!N);d=e[f++];)if(d(l,o||P,s)){u.push(l);break}c&&(H=_)}a&&((l=!d&&l)&&h--,r&&m.push(l))}if(h+=p,a&&p!==h){for(f=0;d=n[f++];)d(m,g,o,s);if(r){if(h>0)for(;p--;)m[p]||g[p]||(g[p]=X.call(u));g=v(g)}Z.apply(u,g),c&&!r&&g.length>0&&h+n.length>1&&t.uniqueSort(u)}return c&&(H=_,C=y),m};return a?r(o):o}var w,A,x,M,k,T,S,E,C,O,D,j,P,z,N,W,L,R,q,Y="sizzle"+1*new Date,B=e.document,H=0,F=0,I=n(),U=n(),G=n(),$=function(e,t){return e===t&&(D=!0),0},V={}.hasOwnProperty,K=[],X=K.pop,J=K.push,Z=K.push,Q=K.slice,ee=function(e,t){for(var n=0,r=e.length;n<r;n++)if(e[n]===t)return n;return-1},te="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",ne="[\\x20\\t\\r\\n\\f]",re="(?:\\\\.|[\\w-]|[^\0-\\xa0])+",ae="\\["+ne+"*("+re+")(?:"+ne+"*([*^$|!~]?=)"+ne+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+re+"))|)"+ne+"*\\]",ie=":("+re+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+ae+")*)|.*)\\)|)",oe=new RegExp(ne+"+","g"),se=new RegExp("^"+ne+"+|((?:^|[^\\\\])(?:\\\\.)*)"+ne+"+$","g"),ue=new RegExp("^"+ne+"*,"+ne+"*"),ce=new RegExp("^"+ne+"*([>+~]|"+ne+")"+ne+"*"),le=new RegExp("="+ne+"*([^\\]'\"]*?)"+ne+"*\\]","g"),fe=new RegExp(ie),de=new RegExp("^"+re+"$"),he={ID:new RegExp("^#("+re+")"),CLASS:new RegExp("^\\.("+re+")"),TAG:new RegExp("^("+re+"|[*])"),ATTR:new RegExp("^"+ae),PSEUDO:new RegExp("^"+ie),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+ne+"*(even|odd|(([+-]|)(\\d*)n|)"+ne+"*(?:([+-]|)"+ne+"*(\\d+)|))"+ne+"*\\)|)","i"),bool:new RegExp("^(?:"+te+")$","i"),needsContext:new RegExp("^"+ne+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+ne+"*((?:-\\d)?\\d*)"+ne+"*\\)|)(?=[^-]|$)","i")},pe=/^(?:input|select|textarea|button)$/i,me=/^h\d$/i,ge=/^[^{]+\{\s*\[native \w/,ve=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ye=/[+~]/,be=new RegExp("\\\\([\\da-f]{1,6}"+ne+"?|("+ne+")|.)","ig"),_e=function(e,t,n){var r="0x"+t-65536;return r!==r||n?t:r<0?String.fromCharCode(r+65536):String.fromCharCode(r>>10|55296,1023&r|56320)},we=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,Ae=function(e,t){return t?"\0"===e?"�":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},xe=function(){j()},Me=p(function(e){return e.disabled===!0&&("form"in e||"label"in e)},{dir:"parentNode",next:"legend"});try{Z.apply(K=Q.call(B.childNodes),B.childNodes),K[B.childNodes.length].nodeType}catch(e){Z={apply:K.length?function(e,t){J.apply(e,Q.call(t))}:function(e,t){for(var n=e.length,r=0;e[n++]=t[r++];);e.length=n-1}}}A=t.support={},k=t.isXML=function(e){var t=e&&(e.ownerDocument||e).documentElement;return!!t&&"HTML"!==t.nodeName},j=t.setDocument=function(e){var t,n,r=e?e.ownerDocument||e:B;return r!==P&&9===r.nodeType&&r.documentElement?(P=r,z=P.documentElement,N=!k(P),B!==P&&(n=P.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener("unload",xe,!1):n.attachEvent&&n.attachEvent("onunload",xe)),A.attributes=a(function(e){return e.className="i",!e.getAttribute("className")}),A.getElementsByTagName=a(function(e){return e.appendChild(P.createComment("")),!e.getElementsByTagName("*").length}),A.getElementsByClassName=ge.test(P.getElementsByClassName),A.getById=a(function(e){return z.appendChild(e).id=Y,!P.getElementsByName||!P.getElementsByName(Y).length}),A.getById?(x.filter.ID=function(e){var t=e.replace(be,_e);return function(e){return e.getAttribute("id")===t}},x.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&N){var n=t.getElementById(e);return n?[n]:[]}}):(x.filter.ID=function(e){var t=e.replace(be,_e);return function(e){var n="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return n&&n.value===t}},x.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&N){var n,r,a,i=t.getElementById(e);if(i){if(n=i.getAttributeNode("id"),n&&n.value===e)return[i];for(a=t.getElementsByName(e),r=0;i=a[r++];)if(n=i.getAttributeNode("id"),n&&n.value===e)return[i]}return[]}}),x.find.TAG=A.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):A.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],a=0,i=t.getElementsByTagName(e);if("*"===e){for(;n=i[a++];)1===n.nodeType&&r.push(n);return r}return i},x.find.CLASS=A.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&N)return t.getElementsByClassName(e)},L=[],W=[],(A.qsa=ge.test(P.querySelectorAll))&&(a(function(e){z.appendChild(e).innerHTML="<a id='"+Y+"'></a><select id='"+Y+"-\r\\' msallowcapture=''><option selected=''></option></select>",e.querySelectorAll("[msallowcapture^='']").length&&W.push("[*^$]="+ne+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||W.push("\\["+ne+"*(?:value|"+te+")"),e.querySelectorAll("[id~="+Y+"-]").length||W.push("~="),e.querySelectorAll(":checked").length||W.push(":checked"),e.querySelectorAll("a#"+Y+"+*").length||W.push(".#.+[+~]")}),a(function(e){e.innerHTML="<a href='' disabled='disabled'></a><select disabled='disabled'><option/></select>";var t=P.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&W.push("name"+ne+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&W.push(":enabled",":disabled"),z.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&W.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),W.push(",.*:")})),(A.matchesSelector=ge.test(R=z.matches||z.webkitMatchesSelector||z.mozMatchesSelector||z.oMatchesSelector||z.msMatchesSelector))&&a(function(e){A.disconnectedMatch=R.call(e,"*"),R.call(e,"[s!='']:x"),L.push("!=",ie)}),W=W.length&&new RegExp(W.join("|")),L=L.length&&new RegExp(L.join("|")),t=ge.test(z.compareDocumentPosition),q=t||ge.test(z.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)for(;t=t.parentNode;)if(t===e)return!0;return!1},$=t?function(e,t){if(e===t)return D=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n?n:(n=(e.ownerDocument||e)===(t.ownerDocument||t)?e.compareDocumentPosition(t):1,1&n||!A.sortDetached&&t.compareDocumentPosition(e)===n?e===P||e.ownerDocument===B&&q(B,e)?-1:t===P||t.ownerDocument===B&&q(B,t)?1:O?ee(O,e)-ee(O,t):0:4&n?-1:1)}:function(e,t){if(e===t)return D=!0,0;var n,r=0,a=e.parentNode,i=t.parentNode,s=[e],u=[t];if(!a||!i)return e===P?-1:t===P?1:a?-1:i?1:O?ee(O,e)-ee(O,t):0;if(a===i)return o(e,t);for(n=e;n=n.parentNode;)s.unshift(n);for(n=t;n=n.parentNode;)u.unshift(n);for(;s[r]===u[r];)r++;return r?o(s[r],u[r]):s[r]===B?-1:u[r]===B?1:0},P):P},t.matches=function(e,n){return t(e,null,null,n)},t.matchesSelector=function(e,n){if((e.ownerDocument||e)!==P&&j(e),n=n.replace(le,"='$1']"),A.matchesSelector&&N&&!G[n+" "]&&(!L||!L.test(n))&&(!W||!W.test(n)))try{var r=R.call(e,n);if(r||A.disconnectedMatch||e.document&&11!==e.document.nodeType)return r}catch(e){}return t(n,P,null,[e]).length>0},t.contains=function(e,t){return(e.ownerDocument||e)!==P&&j(e),q(e,t)},t.attr=function(e,t){(e.ownerDocument||e)!==P&&j(e);var n=x.attrHandle[t.toLowerCase()],r=n&&V.call(x.attrHandle,t.toLowerCase())?n(e,t,!N):void 0;return void 0!==r?r:A.attributes||!N?e.getAttribute(t):(r=e.getAttributeNode(t))&&r.specified?r.value:null},t.escape=function(e){return(e+"").replace(we,Ae)},t.error=function(e){throw new Error("Syntax error, unrecognized expression: "+e)},t.uniqueSort=function(e){var t,n=[],r=0,a=0;if(D=!A.detectDuplicates,O=!A.sortStable&&e.slice(0),e.sort($),D){for(;t=e[a++];)t===e[a]&&(r=n.push(a));for(;r--;)e.splice(n[r],1)}return O=null,e},M=t.getText=function(e){var t,n="",r=0,a=e.nodeType;if(a){if(1===a||9===a||11===a){if("string"==typeof e.textContent)return e.textContent;for(e=e.firstChild;e;e=e.nextSibling)n+=M(e)}else if(3===a||4===a)return e.nodeValue}else for(;t=e[r++];)n+=M(t);return n},x=t.selectors={cacheLength:50,createPseudo:r,match:he,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(be,_e),e[3]=(e[3]||e[4]||e[5]||"").replace(be,_e),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||t.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&t.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return he.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&fe.test(n)&&(t=T(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(be,_e).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=I[e+" "];return t||(t=new RegExp("(^|"+ne+")"+e+"("+ne+"|$)"))&&I(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(e,n,r){return function(a){var i=t.attr(a,e);return null==i?"!="===n:!n||(i+="","="===n?i===r:"!="===n?i!==r:"^="===n?r&&0===i.indexOf(r):"*="===n?r&&i.indexOf(r)>-1:"$="===n?r&&i.slice(-r.length)===r:"~="===n?(" "+i.replace(oe," ")+" ").indexOf(r)>-1:"|="===n&&(i===r||i.slice(0,r.length+1)===r+"-"))}},CHILD:function(e,t,n,r,a){var i="nth"!==e.slice(0,3),o="last"!==e.slice(-4),s="of-type"===t;return 1===r&&0===a?function(e){return!!e.parentNode}:function(t,n,u){var c,l,f,d,h,p,m=i!==o?"nextSibling":"previousSibling",g=t.parentNode,v=s&&t.nodeName.toLowerCase(),y=!u&&!s,b=!1;if(g){if(i){for(;m;){for(d=t;d=d[m];)if(s?d.nodeName.toLowerCase()===v:1===d.nodeType)return!1;p=m="only"===e&&!p&&"nextSibling"}return!0}if(p=[o?g.firstChild:g.lastChild],o&&y){for(d=g,f=d[Y]||(d[Y]={}),l=f[d.uniqueID]||(f[d.uniqueID]={}),c=l[e]||[],h=c[0]===H&&c[1],b=h&&c[2],d=h&&g.childNodes[h];d=++h&&d&&d[m]||(b=h=0)||p.pop();)if(1===d.nodeType&&++b&&d===t){l[e]=[H,h,b];break}}else if(y&&(d=t,f=d[Y]||(d[Y]={}),l=f[d.uniqueID]||(f[d.uniqueID]={}),c=l[e]||[],h=c[0]===H&&c[1],b=h),b===!1)for(;(d=++h&&d&&d[m]||(b=h=0)||p.pop())&&((s?d.nodeName.toLowerCase()!==v:1!==d.nodeType)||!++b||(y&&(f=d[Y]||(d[Y]={}),l=f[d.uniqueID]||(f[d.uniqueID]={}),l[e]=[H,b]),d!==t)););return b-=a,b===r||b%r===0&&b/r>=0}}},PSEUDO:function(e,n){var a,i=x.pseudos[e]||x.setFilters[e.toLowerCase()]||t.error("unsupported pseudo: "+e);return i[Y]?i(n):i.length>1?(a=[e,e,"",n],x.setFilters.hasOwnProperty(e.toLowerCase())?r(function(e,t){for(var r,a=i(e,n),o=a.length;o--;)r=ee(e,a[o]),e[r]=!(t[r]=a[o])}):function(e){return i(e,0,a)}):i}},pseudos:{not:r(function(e){var t=[],n=[],a=S(e.replace(se,"$1"));return a[Y]?r(function(e,t,n,r){for(var i,o=a(e,null,r,[]),s=e.length;s--;)(i=o[s])&&(e[s]=!(t[s]=i))}):function(e,r,i){return t[0]=e,a(t,null,i,n),t[0]=null,!n.pop()}}),has:r(function(e){return function(n){return t(e,n).length>0}}),contains:r(function(e){return e=e.replace(be,_e),function(t){return(t.textContent||t.innerText||M(t)).indexOf(e)>-1}}),lang:r(function(e){return de.test(e||"")||t.error("unsupported lang: "+e),e=e.replace(be,_e).toLowerCase(),function(t){var n;do if(n=N?t.lang:t.getAttribute("xml:lang")||t.getAttribute("lang"))return n=n.toLowerCase(),n===e||0===n.indexOf(e+"-");while((t=t.parentNode)&&1===t.nodeType);return!1}}),target:function(t){var n=e.location&&e.location.hash;return n&&n.slice(1)===t.id},root:function(e){return e===z},focus:function(e){return e===P.activeElement&&(!P.hasFocus||P.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},enabled:c(!1),disabled:c(!0),checked:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&!!e.checked||"option"===t&&!!e.selected},selected:function(e){return e.parentNode&&e.parentNode.selectedIndex,e.selected===!0},empty:function(e){for(e=e.firstChild;e;e=e.nextSibling)if(e.nodeType<6)return!1;return!0},parent:function(e){return!x.pseudos.empty(e)},header:function(e){return me.test(e.nodeName)},input:function(e){return pe.test(e.nodeName)},button:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&"button"===e.type||"button"===t},text:function(e){var t;return"input"===e.nodeName.toLowerCase()&&"text"===e.type&&(null==(t=e.getAttribute("type"))||"text"===t.toLowerCase())},first:l(function(){return[0]}),last:l(function(e,t){return[t-1]}),eq:l(function(e,t,n){return[n<0?n+t:n]}),even:l(function(e,t){for(var n=0;n<t;n+=2)e.push(n);return e}),odd:l(function(e,t){for(var n=1;n<t;n+=2)e.push(n);return e}),lt:l(function(e,t,n){for(var r=n<0?n+t:n;--r>=0;)e.push(r);return e}),gt:l(function(e,t,n){for(var r=n<0?n+t:n;++r<t;)e.push(r);return e})}},x.pseudos.nth=x.pseudos.eq;for(w in{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})x.pseudos[w]=s(w);for(w in{submit:!0,reset:!0})x.pseudos[w]=u(w);return d.prototype=x.filters=x.pseudos,x.setFilters=new d,T=t.tokenize=function(e,n){var r,a,i,o,s,u,c,l=U[e+" "];if(l)return n?0:l.slice(0);for(s=e,u=[],c=x.preFilter;s;){r&&!(a=ue.exec(s))||(a&&(s=s.slice(a[0].length)||s),u.push(i=[])),r=!1,(a=ce.exec(s))&&(r=a.shift(),i.push({value:r,type:a[0].replace(se," ")}),s=s.slice(r.length));for(o in x.filter)!(a=he[o].exec(s))||c[o]&&!(a=c[o](a))||(r=a.shift(),i.push({value:r,type:o,matches:a}),s=s.slice(r.length));if(!r)break}return n?s.length:s?t.error(e):U(e,u).slice(0)},S=t.compile=function(e,t){var n,r=[],a=[],i=G[e+" "];if(!i){for(t||(t=T(e)),n=t.length;n--;)i=b(t[n]),i[Y]?r.push(i):a.push(i);i=G(e,_(a,r)),i.selector=e}return i},E=t.select=function(e,t,n,r){var a,i,o,s,u,c="function"==typeof e&&e,l=!r&&T(e=c.selector||e);if(n=n||[],1===l.length){if(i=l[0]=l[0].slice(0),i.length>2&&"ID"===(o=i[0]).type&&9===t.nodeType&&N&&x.relative[i[1].type]){if(t=(x.find.ID(o.matches[0].replace(be,_e),t)||[])[0],!t)return n;c&&(t=t.parentNode),e=e.slice(i.shift().value.length)}for(a=he.needsContext.test(e)?0:i.length;a--&&(o=i[a],!x.relative[s=o.type]);)if((u=x.find[s])&&(r=u(o.matches[0].replace(be,_e),ye.test(i[0].type)&&f(t.parentNode)||t))){if(i.splice(a,1),e=r.length&&h(i),!e)return Z.apply(n,r),n;break}}return(c||S(e,l))(r,t,!N,n,!t||ye.test(e)&&f(t.parentNode)||t),n},A.sortStable=Y.split("").sort($).join("")===Y,A.detectDuplicates=!!D,j(),A.sortDetached=a(function(e){return 1&e.compareDocumentPosition(P.createElement("fieldset"))}),a(function(e){return e.innerHTML="<a href='#'></a>","#"===e.firstChild.getAttribute("href")})||i("type|href|height|width",function(e,t,n){if(!n)return e.getAttribute(t,"type"===t.toLowerCase()?1:2)}),A.attributes&&a(function(e){return e.innerHTML="<input/>",e.firstChild.setAttribute("value",""),""===e.firstChild.getAttribute("value")})||i("value",function(e,t,n){if(!n&&"input"===e.nodeName.toLowerCase())return e.defaultValue}),a(function(e){return null==e.getAttribute("disabled")})||i(te,function(e,t,n){var r;if(!n)return e[t]===!0?t.toLowerCase():(r=e.getAttributeNode(t))&&r.specified?r.value:null}),t}(e);pe.find=be,pe.expr=be.selectors,pe.expr[":"]=pe.expr.pseudos,pe.uniqueSort=pe.unique=be.uniqueSort,pe.text=be.getText,pe.isXMLDoc=be.isXML,pe.contains=be.contains,pe.escapeSelector=be.escape;var _e=function(e,t,n){for(var r=[],a=void 0!==n;(e=e[t])&&9!==e.nodeType;)if(1===e.nodeType){if(a&&pe(e).is(n))break;r.push(e)}return r},we=function(e,t){for(var n=[];e;e=e.nextSibling)1===e.nodeType&&e!==t&&n.push(e);return n},Ae=pe.expr.match.needsContext,xe=/^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i,Me=/^.[^:#\[\.,]*$/;pe.filter=function(e,t,n){var r=t[0];return n&&(e=":not("+e+")"),1===t.length&&1===r.nodeType?pe.find.matchesSelector(r,e)?[r]:[]:pe.find.matches(e,pe.grep(t,function(e){return 1===e.nodeType}))},pe.fn.extend({find:function(e){var t,n,r=this.length,a=this;if("string"!=typeof e)return this.pushStack(pe(e).filter(function(){for(t=0;t<r;t++)if(pe.contains(a[t],this))return!0}));for(n=this.pushStack([]),t=0;t<r;t++)pe.find(e,a[t],n);return r>1?pe.uniqueSort(n):n},filter:function(e){return this.pushStack(a(this,e||[],!1))},not:function(e){return this.pushStack(a(this,e||[],!0))},is:function(e){return!!a(this,"string"==typeof e&&Ae.test(e)?pe(e):e||[],!1).length}});var ke,Te=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/,Se=pe.fn.init=function(e,t,n){var r,a;if(!e)return this;if(n=n||ke,"string"==typeof e){if(r="<"===e[0]&&">"===e[e.length-1]&&e.length>=3?[null,e,null]:Te.exec(e),!r||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof pe?t[0]:t,pe.merge(this,pe.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:te,!0)),xe.test(r[1])&&pe.isPlainObject(t))for(r in t)pe.isFunction(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return a=te.getElementById(r[2]),a&&(this[0]=a,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):pe.isFunction(e)?void 0!==n.ready?n.ready(e):e(pe):pe.makeArray(e,this)};Se.prototype=pe.fn,ke=pe(te);var Ee=/^(?:parents|prev(?:Until|All))/,Ce={children:!0,contents:!0,next:!0,prev:!0};pe.fn.extend({has:function(e){var t=pe(e,this),n=t.length; return this.filter(function(){for(var e=0;e<n;e++)if(pe.contains(this,t[e]))return!0})},closest:function(e,t){var n,r=0,a=this.length,i=[],o="string"!=typeof e&&pe(e);if(!Ae.test(e))for(;r<a;r++)for(n=this[r];n&&n!==t;n=n.parentNode)if(n.nodeType<11&&(o?o.index(n)>-1:1===n.nodeType&&pe.find.matchesSelector(n,e))){i.push(n);break}return this.pushStack(i.length>1?pe.uniqueSort(i):i)},index:function(e){return e?"string"==typeof e?oe.call(pe(e),this[0]):oe.call(this,e.jquery?e[0]:e):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(e,t){return this.pushStack(pe.uniqueSort(pe.merge(this.get(),pe(e,t))))},addBack:function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}}),pe.each({parent:function(e){var t=e.parentNode;return t&&11!==t.nodeType?t:null},parents:function(e){return _e(e,"parentNode")},parentsUntil:function(e,t,n){return _e(e,"parentNode",n)},next:function(e){return i(e,"nextSibling")},prev:function(e){return i(e,"previousSibling")},nextAll:function(e){return _e(e,"nextSibling")},prevAll:function(e){return _e(e,"previousSibling")},nextUntil:function(e,t,n){return _e(e,"nextSibling",n)},prevUntil:function(e,t,n){return _e(e,"previousSibling",n)},siblings:function(e){return we((e.parentNode||{}).firstChild,e)},children:function(e){return we(e.firstChild)},contents:function(e){return e.contentDocument||pe.merge([],e.childNodes)}},function(e,t){pe.fn[e]=function(n,r){var a=pe.map(this,t,n);return"Until"!==e.slice(-5)&&(r=n),r&&"string"==typeof r&&(a=pe.filter(r,a)),this.length>1&&(Ce[e]||pe.uniqueSort(a),Ee.test(e)&&a.reverse()),this.pushStack(a)}});var Oe=/[^\x20\t\r\n\f]+/g;pe.Callbacks=function(e){e="string"==typeof e?o(e):pe.extend({},e);var t,n,r,a,i=[],s=[],u=-1,c=function(){for(a=e.once,r=t=!0;s.length;u=-1)for(n=s.shift();++u<i.length;)i[u].apply(n[0],n[1])===!1&&e.stopOnFalse&&(u=i.length,n=!1);e.memory||(n=!1),t=!1,a&&(i=n?[]:"")},l={add:function(){return i&&(n&&!t&&(u=i.length-1,s.push(n)),function t(n){pe.each(n,function(n,r){pe.isFunction(r)?e.unique&&l.has(r)||i.push(r):r&&r.length&&"string"!==pe.type(r)&&t(r)})}(arguments),n&&!t&&c()),this},remove:function(){return pe.each(arguments,function(e,t){for(var n;(n=pe.inArray(t,i,n))>-1;)i.splice(n,1),n<=u&&u--}),this},has:function(e){return e?pe.inArray(e,i)>-1:i.length>0},empty:function(){return i&&(i=[]),this},disable:function(){return a=s=[],i=n="",this},disabled:function(){return!i},lock:function(){return a=s=[],n||t||(i=n=""),this},locked:function(){return!!a},fireWith:function(e,n){return a||(n=n||[],n=[e,n.slice?n.slice():n],s.push(n),t||c()),this},fire:function(){return l.fireWith(this,arguments),this},fired:function(){return!!r}};return l},pe.extend({Deferred:function(t){var n=[["notify","progress",pe.Callbacks("memory"),pe.Callbacks("memory"),2],["resolve","done",pe.Callbacks("once memory"),pe.Callbacks("once memory"),0,"resolved"],["reject","fail",pe.Callbacks("once memory"),pe.Callbacks("once memory"),1,"rejected"]],r="pending",a={state:function(){return r},always:function(){return i.done(arguments).fail(arguments),this},catch:function(e){return a.then(null,e)},pipe:function(){var e=arguments;return pe.Deferred(function(t){pe.each(n,function(n,r){var a=pe.isFunction(e[r[4]])&&e[r[4]];i[r[1]](function(){var e=a&&a.apply(this,arguments);e&&pe.isFunction(e.promise)?e.promise().progress(t.notify).done(t.resolve).fail(t.reject):t[r[0]+"With"](this,a?[e]:arguments)})}),e=null}).promise()},then:function(t,r,a){function i(t,n,r,a){return function(){var c=this,l=arguments,f=function(){var e,f;if(!(t<o)){if(e=r.apply(c,l),e===n.promise())throw new TypeError("Thenable self-resolution");f=e&&("object"==typeof e||"function"==typeof e)&&e.then,pe.isFunction(f)?a?f.call(e,i(o,n,s,a),i(o,n,u,a)):(o++,f.call(e,i(o,n,s,a),i(o,n,u,a),i(o,n,s,n.notifyWith))):(r!==s&&(c=void 0,l=[e]),(a||n.resolveWith)(c,l))}},d=a?f:function(){try{f()}catch(e){pe.Deferred.exceptionHook&&pe.Deferred.exceptionHook(e,d.stackTrace),t+1>=o&&(r!==u&&(c=void 0,l=[e]),n.rejectWith(c,l))}};t?d():(pe.Deferred.getStackHook&&(d.stackTrace=pe.Deferred.getStackHook()),e.setTimeout(d))}}var o=0;return pe.Deferred(function(e){n[0][3].add(i(0,e,pe.isFunction(a)?a:s,e.notifyWith)),n[1][3].add(i(0,e,pe.isFunction(t)?t:s)),n[2][3].add(i(0,e,pe.isFunction(r)?r:u))}).promise()},promise:function(e){return null!=e?pe.extend(e,a):a}},i={};return pe.each(n,function(e,t){var o=t[2],s=t[5];a[t[1]]=o.add,s&&o.add(function(){r=s},n[3-e][2].disable,n[0][2].lock),o.add(t[3].fire),i[t[0]]=function(){return i[t[0]+"With"](this===i?void 0:this,arguments),this},i[t[0]+"With"]=o.fireWith}),a.promise(i),t&&t.call(i,i),i},when:function(e){var t=arguments.length,n=t,r=Array(n),a=re.call(arguments),i=pe.Deferred(),o=function(e){return function(n){r[e]=this,a[e]=arguments.length>1?re.call(arguments):n,--t||i.resolveWith(r,a)}};if(t<=1&&(c(e,i.done(o(n)).resolve,i.reject),"pending"===i.state()||pe.isFunction(a[n]&&a[n].then)))return i.then();for(;n--;)c(a[n],o(n),i.reject);return i.promise()}});var De=/^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;pe.Deferred.exceptionHook=function(t,n){e.console&&e.console.warn&&t&&De.test(t.name)&&e.console.warn("jQuery.Deferred exception: "+t.message,t.stack,n)},pe.readyException=function(t){e.setTimeout(function(){throw t})};var je=pe.Deferred();pe.fn.ready=function(e){return je.then(e).catch(function(e){pe.readyException(e)}),this},pe.extend({isReady:!1,readyWait:1,holdReady:function(e){e?pe.readyWait++:pe.ready(!0)},ready:function(e){(e===!0?--pe.readyWait:pe.isReady)||(pe.isReady=!0,e!==!0&&--pe.readyWait>0||je.resolveWith(te,[pe]))}}),pe.ready.then=je.then,"complete"===te.readyState||"loading"!==te.readyState&&!te.documentElement.doScroll?e.setTimeout(pe.ready):(te.addEventListener("DOMContentLoaded",l),e.addEventListener("load",l));var Pe=function(e,t,n,r,a,i,o){var s=0,u=e.length,c=null==n;if("object"===pe.type(n)){a=!0;for(s in n)Pe(e,t,s,n[s],!0,i,o)}else if(void 0!==r&&(a=!0,pe.isFunction(r)||(o=!0),c&&(o?(t.call(e,r),t=null):(c=t,t=function(e,t,n){return c.call(pe(e),n)})),t))for(;s<u;s++)t(e[s],n,o?r:r.call(e[s],s,t(e[s],n)));return a?e:c?t.call(e):u?t(e[0],n):i},ze=function(e){return 1===e.nodeType||9===e.nodeType||!+e.nodeType};f.uid=1,f.prototype={cache:function(e){var t=e[this.expando];return t||(t={},ze(e)&&(e.nodeType?e[this.expando]=t:Object.defineProperty(e,this.expando,{value:t,configurable:!0}))),t},set:function(e,t,n){var r,a=this.cache(e);if("string"==typeof t)a[pe.camelCase(t)]=n;else for(r in t)a[pe.camelCase(r)]=t[r];return a},get:function(e,t){return void 0===t?this.cache(e):e[this.expando]&&e[this.expando][pe.camelCase(t)]},access:function(e,t,n){return void 0===t||t&&"string"==typeof t&&void 0===n?this.get(e,t):(this.set(e,t,n),void 0!==n?n:t)},remove:function(e,t){var n,r=e[this.expando];if(void 0!==r){if(void 0!==t){pe.isArray(t)?t=t.map(pe.camelCase):(t=pe.camelCase(t),t=t in r?[t]:t.match(Oe)||[]),n=t.length;for(;n--;)delete r[t[n]]}(void 0===t||pe.isEmptyObject(r))&&(e.nodeType?e[this.expando]=void 0:delete e[this.expando])}},hasData:function(e){var t=e[this.expando];return void 0!==t&&!pe.isEmptyObject(t)}};var Ne=new f,We=new f,Le=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,Re=/[A-Z]/g;pe.extend({hasData:function(e){return We.hasData(e)||Ne.hasData(e)},data:function(e,t,n){return We.access(e,t,n)},removeData:function(e,t){We.remove(e,t)},_data:function(e,t,n){return Ne.access(e,t,n)},_removeData:function(e,t){Ne.remove(e,t)}}),pe.fn.extend({data:function(e,t){var n,r,a,i=this[0],o=i&&i.attributes;if(void 0===e){if(this.length&&(a=We.get(i),1===i.nodeType&&!Ne.get(i,"hasDataAttrs"))){for(n=o.length;n--;)o[n]&&(r=o[n].name,0===r.indexOf("data-")&&(r=pe.camelCase(r.slice(5)),h(i,r,a[r])));Ne.set(i,"hasDataAttrs",!0)}return a}return"object"==typeof e?this.each(function(){We.set(this,e)}):Pe(this,function(t){var n;if(i&&void 0===t){if(n=We.get(i,e),void 0!==n)return n;if(n=h(i,e),void 0!==n)return n}else this.each(function(){We.set(this,e,t)})},null,t,arguments.length>1,null,!0)},removeData:function(e){return this.each(function(){We.remove(this,e)})}}),pe.extend({queue:function(e,t,n){var r;if(e)return t=(t||"fx")+"queue",r=Ne.get(e,t),n&&(!r||pe.isArray(n)?r=Ne.access(e,t,pe.makeArray(n)):r.push(n)),r||[]},dequeue:function(e,t){t=t||"fx";var n=pe.queue(e,t),r=n.length,a=n.shift(),i=pe._queueHooks(e,t),o=function(){pe.dequeue(e,t)};"inprogress"===a&&(a=n.shift(),r--),a&&("fx"===t&&n.unshift("inprogress"),delete i.stop,a.call(e,o,i)),!r&&i&&i.empty.fire()},_queueHooks:function(e,t){var n=t+"queueHooks";return Ne.get(e,n)||Ne.access(e,n,{empty:pe.Callbacks("once memory").add(function(){Ne.remove(e,[t+"queue",n])})})}}),pe.fn.extend({queue:function(e,t){var n=2;return"string"!=typeof e&&(t=e,e="fx",n--),arguments.length<n?pe.queue(this[0],e):void 0===t?this:this.each(function(){var n=pe.queue(this,e,t);pe._queueHooks(this,e),"fx"===e&&"inprogress"!==n[0]&&pe.dequeue(this,e)})},dequeue:function(e){return this.each(function(){pe.dequeue(this,e)})},clearQueue:function(e){return this.queue(e||"fx",[])},promise:function(e,t){var n,r=1,a=pe.Deferred(),i=this,o=this.length,s=function(){--r||a.resolveWith(i,[i])};for("string"!=typeof e&&(t=e,e=void 0),e=e||"fx";o--;)n=Ne.get(i[o],e+"queueHooks"),n&&n.empty&&(r++,n.empty.add(s));return s(),a.promise(t)}});var qe=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,Ye=new RegExp("^(?:([+-])=|)("+qe+")([a-z%]*)$","i"),Be=["Top","Right","Bottom","Left"],He=function(e,t){return e=t||e,"none"===e.style.display||""===e.style.display&&pe.contains(e.ownerDocument,e)&&"none"===pe.css(e,"display")},Fe=function(e,t,n,r){var a,i,o={};for(i in t)o[i]=e.style[i],e.style[i]=t[i];a=n.apply(e,r||[]);for(i in t)e.style[i]=o[i];return a},Ie={};pe.fn.extend({show:function(){return g(this,!0)},hide:function(){return g(this)},toggle:function(e){return"boolean"==typeof e?e?this.show():this.hide():this.each(function(){He(this)?pe(this).show():pe(this).hide()})}});var Ue=/^(?:checkbox|radio)$/i,Ge=/<([a-z][^\/\0>\x20\t\r\n\f]+)/i,$e=/^$|\/(?:java|ecma)script/i,Ve={option:[1,"<select multiple='multiple'>","</select>"],thead:[1,"<table>","</table>"],col:[2,"<table><colgroup>","</colgroup></table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:[0,"",""]};Ve.optgroup=Ve.option,Ve.tbody=Ve.tfoot=Ve.colgroup=Ve.caption=Ve.thead,Ve.th=Ve.td;var Ke=/<|&#?\w+;/;!function(){var e=te.createDocumentFragment(),t=e.appendChild(te.createElement("div")),n=te.createElement("input");n.setAttribute("type","radio"),n.setAttribute("checked","checked"),n.setAttribute("name","t"),t.appendChild(n),de.checkClone=t.cloneNode(!0).cloneNode(!0).lastChild.checked,t.innerHTML="<textarea>x</textarea>",de.noCloneChecked=!!t.cloneNode(!0).lastChild.defaultValue}();var Xe=te.documentElement,Je=/^key/,Ze=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,Qe=/^([^.]*)(?:\.(.+)|)/;pe.event={global:{},add:function(e,t,n,r,a){var i,o,s,u,c,l,f,d,h,p,m,g=Ne.get(e);if(g)for(n.handler&&(i=n,n=i.handler,a=i.selector),a&&pe.find.matchesSelector(Xe,a),n.guid||(n.guid=pe.guid++),(u=g.events)||(u=g.events={}),(o=g.handle)||(o=g.handle=function(t){return"undefined"!=typeof pe&&pe.event.triggered!==t.type?pe.event.dispatch.apply(e,arguments):void 0}),t=(t||"").match(Oe)||[""],c=t.length;c--;)s=Qe.exec(t[c])||[],h=m=s[1],p=(s[2]||"").split(".").sort(),h&&(f=pe.event.special[h]||{},h=(a?f.delegateType:f.bindType)||h,f=pe.event.special[h]||{},l=pe.extend({type:h,origType:m,data:r,handler:n,guid:n.guid,selector:a,needsContext:a&&pe.expr.match.needsContext.test(a),namespace:p.join(".")},i),(d=u[h])||(d=u[h]=[],d.delegateCount=0,f.setup&&f.setup.call(e,r,p,o)!==!1||e.addEventListener&&e.addEventListener(h,o)),f.add&&(f.add.call(e,l),l.handler.guid||(l.handler.guid=n.guid)),a?d.splice(d.delegateCount++,0,l):d.push(l),pe.event.global[h]=!0)},remove:function(e,t,n,r,a){var i,o,s,u,c,l,f,d,h,p,m,g=Ne.hasData(e)&&Ne.get(e);if(g&&(u=g.events)){for(t=(t||"").match(Oe)||[""],c=t.length;c--;)if(s=Qe.exec(t[c])||[],h=m=s[1],p=(s[2]||"").split(".").sort(),h){for(f=pe.event.special[h]||{},h=(r?f.delegateType:f.bindType)||h,d=u[h]||[],s=s[2]&&new RegExp("(^|\\.)"+p.join("\\.(?:.*\\.|)")+"(\\.|$)"),o=i=d.length;i--;)l=d[i],!a&&m!==l.origType||n&&n.guid!==l.guid||s&&!s.test(l.namespace)||r&&r!==l.selector&&("**"!==r||!l.selector)||(d.splice(i,1),l.selector&&d.delegateCount--,f.remove&&f.remove.call(e,l));o&&!d.length&&(f.teardown&&f.teardown.call(e,p,g.handle)!==!1||pe.removeEvent(e,h,g.handle),delete u[h])}else for(h in u)pe.event.remove(e,h+t[c],n,r,!0);pe.isEmptyObject(u)&&Ne.remove(e,"handle events")}},dispatch:function(e){var t,n,r,a,i,o,s=pe.event.fix(e),u=new Array(arguments.length),c=(Ne.get(this,"events")||{})[s.type]||[],l=pe.event.special[s.type]||{};for(u[0]=s,t=1;t<arguments.length;t++)u[t]=arguments[t];if(s.delegateTarget=this,!l.preDispatch||l.preDispatch.call(this,s)!==!1){for(o=pe.event.handlers.call(this,s,c),t=0;(a=o[t++])&&!s.isPropagationStopped();)for(s.currentTarget=a.elem,n=0;(i=a.handlers[n++])&&!s.isImmediatePropagationStopped();)s.rnamespace&&!s.rnamespace.test(i.namespace)||(s.handleObj=i,s.data=i.data,r=((pe.event.special[i.origType]||{}).handle||i.handler).apply(a.elem,u),void 0!==r&&(s.result=r)===!1&&(s.preventDefault(),s.stopPropagation()));return l.postDispatch&&l.postDispatch.call(this,s),s.result}},handlers:function(e,t){var n,r,a,i,o,s=[],u=t.delegateCount,c=e.target;if(u&&c.nodeType&&!("click"===e.type&&e.button>=1))for(;c!==this;c=c.parentNode||this)if(1===c.nodeType&&("click"!==e.type||c.disabled!==!0)){for(i=[],o={},n=0;n<u;n++)r=t[n],a=r.selector+" ",void 0===o[a]&&(o[a]=r.needsContext?pe(a,this).index(c)>-1:pe.find(a,this,null,[c]).length),o[a]&&i.push(r);i.length&&s.push({elem:c,handlers:i})}return c=this,u<t.length&&s.push({elem:c,handlers:t.slice(u)}),s},addProp:function(e,t){Object.defineProperty(pe.Event.prototype,e,{enumerable:!0,configurable:!0,get:pe.isFunction(t)?function(){if(this.originalEvent)return t(this.originalEvent)}:function(){if(this.originalEvent)return this.originalEvent[e]},set:function(t){Object.defineProperty(this,e,{enumerable:!0,configurable:!0,writable:!0,value:t})}})},fix:function(e){return e[pe.expando]?e:new pe.Event(e)},special:{load:{noBubble:!0},focus:{trigger:function(){if(this!==A()&&this.focus)return this.focus(),!1},delegateType:"focusin"},blur:{trigger:function(){if(this===A()&&this.blur)return this.blur(),!1},delegateType:"focusout"},click:{trigger:function(){if("checkbox"===this.type&&this.click&&pe.nodeName(this,"input"))return this.click(),!1},_default:function(e){return pe.nodeName(e.target,"a")}},beforeunload:{postDispatch:function(e){void 0!==e.result&&e.originalEvent&&(e.originalEvent.returnValue=e.result)}}}},pe.removeEvent=function(e,t,n){e.removeEventListener&&e.removeEventListener(t,n)},pe.Event=function(e,t){return this instanceof pe.Event?(e&&e.type?(this.originalEvent=e,this.type=e.type,this.isDefaultPrevented=e.defaultPrevented||void 0===e.defaultPrevented&&e.returnValue===!1?_:w,this.target=e.target&&3===e.target.nodeType?e.target.parentNode:e.target,this.currentTarget=e.currentTarget,this.relatedTarget=e.relatedTarget):this.type=e,t&&pe.extend(this,t),this.timeStamp=e&&e.timeStamp||pe.now(),void(this[pe.expando]=!0)):new pe.Event(e,t)},pe.Event.prototype={constructor:pe.Event,isDefaultPrevented:w,isPropagationStopped:w,isImmediatePropagationStopped:w,isSimulated:!1,preventDefault:function(){var e=this.originalEvent;this.isDefaultPrevented=_,e&&!this.isSimulated&&e.preventDefault()},stopPropagation:function(){var e=this.originalEvent;this.isPropagationStopped=_,e&&!this.isSimulated&&e.stopPropagation()},stopImmediatePropagation:function(){var e=this.originalEvent;this.isImmediatePropagationStopped=_,e&&!this.isSimulated&&e.stopImmediatePropagation(),this.stopPropagation()}},pe.each({altKey:!0,bubbles:!0,cancelable:!0,changedTouches:!0,ctrlKey:!0,detail:!0,eventPhase:!0,metaKey:!0,pageX:!0,pageY:!0,shiftKey:!0,view:!0,char:!0,charCode:!0,key:!0,keyCode:!0,button:!0,buttons:!0,clientX:!0,clientY:!0,offsetX:!0,offsetY:!0,pointerId:!0,pointerType:!0,screenX:!0,screenY:!0,targetTouches:!0,toElement:!0,touches:!0,which:function(e){var t=e.button;return null==e.which&&Je.test(e.type)?null!=e.charCode?e.charCode:e.keyCode:!e.which&&void 0!==t&&Ze.test(e.type)?1&t?1:2&t?3:4&t?2:0:e.which}},pe.event.addProp),pe.each({mouseenter:"mouseover",mouseleave:"mouseout",pointerenter:"pointerover",pointerleave:"pointerout"},function(e,t){pe.event.special[e]={delegateType:t,bindType:t,handle:function(e){var n,r=this,a=e.relatedTarget,i=e.handleObj;return a&&(a===r||pe.contains(r,a))||(e.type=i.origType,n=i.handler.apply(this,arguments),e.type=t),n}}}),pe.fn.extend({on:function(e,t,n,r){return x(this,e,t,n,r)},one:function(e,t,n,r){return x(this,e,t,n,r,1)},off:function(e,t,n){var r,a;if(e&&e.preventDefault&&e.handleObj)return r=e.handleObj,pe(e.delegateTarget).off(r.namespace?r.origType+"."+r.namespace:r.origType,r.selector,r.handler),this;if("object"==typeof e){for(a in e)this.off(a,t,e[a]);return this}return t!==!1&&"function"!=typeof t||(n=t,t=void 0),n===!1&&(n=w),this.each(function(){pe.event.remove(this,e,n,t)})}});var et=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([a-z][^\/\0>\x20\t\r\n\f]*)[^>]*)\/>/gi,tt=/<script|<style|<link/i,nt=/checked\s*(?:[^=]|=\s*.checked.)/i,rt=/^true\/(.*)/,at=/^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g;pe.extend({htmlPrefilter:function(e){return e.replace(et,"<$1></$2>")},clone:function(e,t,n){var r,a,i,o,s=e.cloneNode(!0),u=pe.contains(e.ownerDocument,e);if(!(de.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||pe.isXMLDoc(e)))for(o=v(s),i=v(e),r=0,a=i.length;r<a;r++)E(i[r],o[r]);if(t)if(n)for(i=i||v(e),o=o||v(s),r=0,a=i.length;r<a;r++)S(i[r],o[r]);else S(e,s);return o=v(s,"script"),o.length>0&&y(o,!u&&v(e,"script")),s},cleanData:function(e){for(var t,n,r,a=pe.event.special,i=0;void 0!==(n=e[i]);i++)if(ze(n)){if(t=n[Ne.expando]){if(t.events)for(r in t.events)a[r]?pe.event.remove(n,r):pe.removeEvent(n,r,t.handle);n[Ne.expando]=void 0}n[We.expando]&&(n[We.expando]=void 0)}}}),pe.fn.extend({detach:function(e){return O(this,e,!0)},remove:function(e){return O(this,e)},text:function(e){return Pe(this,function(e){return void 0===e?pe.text(this):this.empty().each(function(){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||(this.textContent=e)})},null,e,arguments.length)},append:function(){return C(this,arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=M(this,e);t.appendChild(e)}})},prepend:function(){return C(this,arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=M(this,e);t.insertBefore(e,t.firstChild)}})},before:function(){return C(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this)})},after:function(){return C(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this.nextSibling)})},empty:function(){for(var e,t=0;null!=(e=this[t]);t++)1===e.nodeType&&(pe.cleanData(v(e,!1)),e.textContent="");return this},clone:function(e,t){return e=null!=e&&e,t=null==t?e:t,this.map(function(){return pe.clone(this,e,t)})},html:function(e){return Pe(this,function(e){var t=this[0]||{},n=0,r=this.length;if(void 0===e&&1===t.nodeType)return t.innerHTML;if("string"==typeof e&&!tt.test(e)&&!Ve[(Ge.exec(e)||["",""])[1].toLowerCase()]){e=pe.htmlPrefilter(e);try{for(;n<r;n++)t=this[n]||{},1===t.nodeType&&(pe.cleanData(v(t,!1)),t.innerHTML=e);t=0}catch(e){}}t&&this.empty().append(e)},null,e,arguments.length)},replaceWith:function(){var e=[];return C(this,arguments,function(t){var n=this.parentNode;pe.inArray(this,e)<0&&(pe.cleanData(v(this)),n&&n.replaceChild(t,this))},e)}}),pe.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(e,t){pe.fn[e]=function(e){for(var n,r=[],a=pe(e),i=a.length-1,o=0;o<=i;o++)n=o===i?this:this.clone(!0),pe(a[o])[t](n),ie.apply(r,n.get());return this.pushStack(r)}});var it=/^margin/,ot=new RegExp("^("+qe+")(?!px)[a-z%]+$","i"),st=function(t){var n=t.ownerDocument.defaultView;return n&&n.opener||(n=e),n.getComputedStyle(t)};!function(){function t(){if(s){s.style.cssText="box-sizing:border-box;position:relative;display:block;margin:auto;border:1px;padding:1px;top:1%;width:50%",s.innerHTML="",Xe.appendChild(o);var t=e.getComputedStyle(s);n="1%"!==t.top,i="2px"===t.marginLeft,r="4px"===t.width,s.style.marginRight="50%",a="4px"===t.marginRight,Xe.removeChild(o),s=null}}var n,r,a,i,o=te.createElement("div"),s=te.createElement("div");s.style&&(s.style.backgroundClip="content-box",s.cloneNode(!0).style.backgroundClip="",de.clearCloneStyle="content-box"===s.style.backgroundClip,o.style.cssText="border:0;width:8px;height:0;top:0;left:-9999px;padding:0;margin-top:1px;position:absolute",o.appendChild(s),pe.extend(de,{pixelPosition:function(){return t(),n},boxSizingReliable:function(){return t(),r},pixelMarginRight:function(){return t(),a},reliableMarginLeft:function(){return t(),i}}))}();var ut=/^(none|table(?!-c[ea]).+)/,ct={position:"absolute",visibility:"hidden",display:"block"},lt={letterSpacing:"0",fontWeight:"400"},ft=["Webkit","Moz","ms"],dt=te.createElement("div").style;pe.extend({cssHooks:{opacity:{get:function(e,t){if(t){var n=D(e,"opacity");return""===n?"1":n}}}},cssNumber:{animationIterationCount:!0,columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{float:"cssFloat"},style:function(e,t,n,r){if(e&&3!==e.nodeType&&8!==e.nodeType&&e.style){var a,i,o,s=pe.camelCase(t),u=e.style;return t=pe.cssProps[s]||(pe.cssProps[s]=P(s)||s),o=pe.cssHooks[t]||pe.cssHooks[s],void 0===n?o&&"get"in o&&void 0!==(a=o.get(e,!1,r))?a:u[t]:(i=typeof n,"string"===i&&(a=Ye.exec(n))&&a[1]&&(n=p(e,t,a),i="number"),null!=n&&n===n&&("number"===i&&(n+=a&&a[3]||(pe.cssNumber[s]?"":"px")),de.clearCloneStyle||""!==n||0!==t.indexOf("background")||(u[t]="inherit"),o&&"set"in o&&void 0===(n=o.set(e,n,r))||(u[t]=n)),void 0)}},css:function(e,t,n,r){var a,i,o,s=pe.camelCase(t);return t=pe.cssProps[s]||(pe.cssProps[s]=P(s)||s),o=pe.cssHooks[t]||pe.cssHooks[s],o&&"get"in o&&(a=o.get(e,!0,n)),void 0===a&&(a=D(e,t,r)),"normal"===a&&t in lt&&(a=lt[t]),""===n||n?(i=parseFloat(a),n===!0||isFinite(i)?i||0:a):a}}),pe.each(["height","width"],function(e,t){pe.cssHooks[t]={get:function(e,n,r){if(n)return!ut.test(pe.css(e,"display"))||e.getClientRects().length&&e.getBoundingClientRect().width?W(e,t,r):Fe(e,ct,function(){return W(e,t,r)})},set:function(e,n,r){var a,i=r&&st(e),o=r&&N(e,t,r,"border-box"===pe.css(e,"boxSizing",!1,i),i);return o&&(a=Ye.exec(n))&&"px"!==(a[3]||"px")&&(e.style[t]=n,n=pe.css(e,t)),z(e,n,o)}}}),pe.cssHooks.marginLeft=j(de.reliableMarginLeft,function(e,t){if(t)return(parseFloat(D(e,"marginLeft"))||e.getBoundingClientRect().left-Fe(e,{marginLeft:0},function(){return e.getBoundingClientRect().left}))+"px"}),pe.each({margin:"",padding:"",border:"Width"},function(e,t){pe.cssHooks[e+t]={expand:function(n){for(var r=0,a={},i="string"==typeof n?n.split(" "):[n];r<4;r++)a[e+Be[r]+t]=i[r]||i[r-2]||i[0];return a}},it.test(e)||(pe.cssHooks[e+t].set=z)}),pe.fn.extend({css:function(e,t){return Pe(this,function(e,t,n){var r,a,i={},o=0;if(pe.isArray(t)){for(r=st(e),a=t.length;o<a;o++)i[t[o]]=pe.css(e,t[o],!1,r);return i}return void 0!==n?pe.style(e,t,n):pe.css(e,t)},e,t,arguments.length>1)}}),pe.Tween=L,L.prototype={constructor:L,init:function(e,t,n,r,a,i){this.elem=e,this.prop=n,this.easing=a||pe.easing._default,this.options=t,this.start=this.now=this.cur(),this.end=r,this.unit=i||(pe.cssNumber[n]?"":"px")},cur:function(){var e=L.propHooks[this.prop];return e&&e.get?e.get(this):L.propHooks._default.get(this)},run:function(e){var t,n=L.propHooks[this.prop];return this.options.duration?this.pos=t=pe.easing[this.easing](e,this.options.duration*e,0,1,this.options.duration):this.pos=t=e,this.now=(this.end-this.start)*t+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),n&&n.set?n.set(this):L.propHooks._default.set(this),this}},L.prototype.init.prototype=L.prototype,L.propHooks={_default:{get:function(e){var t;return 1!==e.elem.nodeType||null!=e.elem[e.prop]&&null==e.elem.style[e.prop]?e.elem[e.prop]:(t=pe.css(e.elem,e.prop,""),t&&"auto"!==t?t:0)},set:function(e){pe.fx.step[e.prop]?pe.fx.step[e.prop](e):1!==e.elem.nodeType||null==e.elem.style[pe.cssProps[e.prop]]&&!pe.cssHooks[e.prop]?e.elem[e.prop]=e.now:pe.style(e.elem,e.prop,e.now+e.unit)}}},L.propHooks.scrollTop=L.propHooks.scrollLeft={set:function(e){e.elem.nodeType&&e.elem.parentNode&&(e.elem[e.prop]=e.now)}},pe.easing={linear:function(e){return e},swing:function(e){return.5-Math.cos(e*Math.PI)/2},_default:"swing"},pe.fx=L.prototype.init,pe.fx.step={};var ht,pt,mt=/^(?:toggle|show|hide)$/,gt=/queueHooks$/;pe.Animation=pe.extend(I,{tweeners:{"*":[function(e,t){var n=this.createTween(e,t);return p(n.elem,e,Ye.exec(t),n),n}]},tweener:function(e,t){pe.isFunction(e)?(t=e,e=["*"]):e=e.match(Oe);for(var n,r=0,a=e.length;r<a;r++)n=e[r],I.tweeners[n]=I.tweeners[n]||[],I.tweeners[n].unshift(t)},prefilters:[H],prefilter:function(e,t){t?I.prefilters.unshift(e):I.prefilters.push(e)}}),pe.speed=function(e,t,n){var r=e&&"object"==typeof e?pe.extend({},e):{complete:n||!n&&t||pe.isFunction(e)&&e,duration:e,easing:n&&t||t&&!pe.isFunction(t)&&t};return pe.fx.off||te.hidden?r.duration=0:"number"!=typeof r.duration&&(r.duration in pe.fx.speeds?r.duration=pe.fx.speeds[r.duration]:r.duration=pe.fx.speeds._default),null!=r.queue&&r.queue!==!0||(r.queue="fx"),r.old=r.complete,r.complete=function(){pe.isFunction(r.old)&&r.old.call(this),r.queue&&pe.dequeue(this,r.queue)},r},pe.fn.extend({fadeTo:function(e,t,n,r){return this.filter(He).css("opacity",0).show().end().animate({opacity:t},e,n,r)},animate:function(e,t,n,r){var a=pe.isEmptyObject(e),i=pe.speed(t,n,r),o=function(){var t=I(this,pe.extend({},e),i);(a||Ne.get(this,"finish"))&&t.stop(!0)};return o.finish=o,a||i.queue===!1?this.each(o):this.queue(i.queue,o)},stop:function(e,t,n){var r=function(e){var t=e.stop;delete e.stop,t(n)};return"string"!=typeof e&&(n=t,t=e,e=void 0),t&&e!==!1&&this.queue(e||"fx",[]),this.each(function(){var t=!0,a=null!=e&&e+"queueHooks",i=pe.timers,o=Ne.get(this);if(a)o[a]&&o[a].stop&&r(o[a]);else for(a in o)o[a]&&o[a].stop&>.test(a)&&r(o[a]);for(a=i.length;a--;)i[a].elem!==this||null!=e&&i[a].queue!==e||(i[a].anim.stop(n),t=!1,i.splice(a,1));!t&&n||pe.dequeue(this,e)})},finish:function(e){return e!==!1&&(e=e||"fx"),this.each(function(){var t,n=Ne.get(this),r=n[e+"queue"],a=n[e+"queueHooks"],i=pe.timers,o=r?r.length:0;for(n.finish=!0,pe.queue(this,e,[]),a&&a.stop&&a.stop.call(this,!0),t=i.length;t--;)i[t].elem===this&&i[t].queue===e&&(i[t].anim.stop(!0),i.splice(t,1));for(t=0;t<o;t++)r[t]&&r[t].finish&&r[t].finish.call(this);delete n.finish})}}),pe.each(["toggle","show","hide"],function(e,t){var n=pe.fn[t];pe.fn[t]=function(e,r,a){return null==e||"boolean"==typeof e?n.apply(this,arguments):this.animate(Y(t,!0),e,r,a)}}),pe.each({slideDown:Y("show"),slideUp:Y("hide"),slideToggle:Y("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(e,t){pe.fn[e]=function(e,n,r){return this.animate(t,e,n,r)}}),pe.timers=[],pe.fx.tick=function(){var e,t=0,n=pe.timers;for(ht=pe.now();t<n.length;t++)e=n[t],e()||n[t]!==e||n.splice(t--,1);n.length||pe.fx.stop(),ht=void 0},pe.fx.timer=function(e){pe.timers.push(e),e()?pe.fx.start():pe.timers.pop()},pe.fx.interval=13,pe.fx.start=function(){pt||(pt=e.requestAnimationFrame?e.requestAnimationFrame(R):e.setInterval(pe.fx.tick,pe.fx.interval))},pe.fx.stop=function(){e.cancelAnimationFrame?e.cancelAnimationFrame(pt):e.clearInterval(pt),pt=null},pe.fx.speeds={slow:600,fast:200,_default:400},pe.fn.delay=function(t,n){return t=pe.fx?pe.fx.speeds[t]||t:t,n=n||"fx",this.queue(n,function(n,r){var a=e.setTimeout(n,t);r.stop=function(){e.clearTimeout(a)}})},function(){var e=te.createElement("input"),t=te.createElement("select"),n=t.appendChild(te.createElement("option"));e.type="checkbox",de.checkOn=""!==e.value,de.optSelected=n.selected,e=te.createElement("input"),e.value="t",e.type="radio",de.radioValue="t"===e.value}();var vt,yt=pe.expr.attrHandle;pe.fn.extend({attr:function(e,t){return Pe(this,pe.attr,e,t,arguments.length>1)},removeAttr:function(e){return this.each(function(){pe.removeAttr(this,e)})}}),pe.extend({attr:function(e,t,n){var r,a,i=e.nodeType;if(3!==i&&8!==i&&2!==i)return"undefined"==typeof e.getAttribute?pe.prop(e,t,n):(1===i&&pe.isXMLDoc(e)||(a=pe.attrHooks[t.toLowerCase()]||(pe.expr.match.bool.test(t)?vt:void 0)),void 0!==n?null===n?void pe.removeAttr(e,t):a&&"set"in a&&void 0!==(r=a.set(e,n,t))?r:(e.setAttribute(t,n+""),n):a&&"get"in a&&null!==(r=a.get(e,t))?r:(r=pe.find.attr(e,t),null==r?void 0:r))},attrHooks:{type:{set:function(e,t){if(!de.radioValue&&"radio"===t&&pe.nodeName(e,"input")){var n=e.value;return e.setAttribute("type",t),n&&(e.value=n),t}}}},removeAttr:function(e,t){var n,r=0,a=t&&t.match(Oe);if(a&&1===e.nodeType)for(;n=a[r++];)e.removeAttribute(n)}}),vt={set:function(e,t,n){return t===!1?pe.removeAttr(e,n):e.setAttribute(n,n),n}},pe.each(pe.expr.match.bool.source.match(/\w+/g),function(e,t){var n=yt[t]||pe.find.attr;yt[t]=function(e,t,r){var a,i,o=t.toLowerCase();return r||(i=yt[o],yt[o]=a,a=null!=n(e,t,r)?o:null,yt[o]=i),a}});var bt=/^(?:input|select|textarea|button)$/i,_t=/^(?:a|area)$/i;pe.fn.extend({prop:function(e,t){return Pe(this,pe.prop,e,t,arguments.length>1)},removeProp:function(e){return this.each(function(){delete this[pe.propFix[e]||e]})}}),pe.extend({prop:function(e,t,n){var r,a,i=e.nodeType;if(3!==i&&8!==i&&2!==i)return 1===i&&pe.isXMLDoc(e)||(t=pe.propFix[t]||t,a=pe.propHooks[t]),void 0!==n?a&&"set"in a&&void 0!==(r=a.set(e,n,t))?r:e[t]=n:a&&"get"in a&&null!==(r=a.get(e,t))?r:e[t]},propHooks:{tabIndex:{get:function(e){var t=pe.find.attr(e,"tabindex");return t?parseInt(t,10):bt.test(e.nodeName)||_t.test(e.nodeName)&&e.href?0:-1}}},propFix:{for:"htmlFor",class:"className"}}),de.optSelected||(pe.propHooks.selected={get:function(e){var t=e.parentNode;return t&&t.parentNode&&t.parentNode.selectedIndex,null},set:function(e){var t=e.parentNode;t&&(t.selectedIndex,t.parentNode&&t.parentNode.selectedIndex)}}),pe.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){pe.propFix[this.toLowerCase()]=this}),pe.fn.extend({addClass:function(e){var t,n,r,a,i,o,s,u=0;if(pe.isFunction(e))return this.each(function(t){pe(this).addClass(e.call(this,t,G(this)))});if("string"==typeof e&&e)for(t=e.match(Oe)||[];n=this[u++];)if(a=G(n),r=1===n.nodeType&&" "+U(a)+" "){for(o=0;i=t[o++];)r.indexOf(" "+i+" ")<0&&(r+=i+" ");s=U(r),a!==s&&n.setAttribute("class",s)}return this},removeClass:function(e){var t,n,r,a,i,o,s,u=0;if(pe.isFunction(e))return this.each(function(t){pe(this).removeClass(e.call(this,t,G(this)))});if(!arguments.length)return this.attr("class","");if("string"==typeof e&&e)for(t=e.match(Oe)||[];n=this[u++];)if(a=G(n),r=1===n.nodeType&&" "+U(a)+" "){for(o=0;i=t[o++];)for(;r.indexOf(" "+i+" ")>-1;)r=r.replace(" "+i+" "," ");s=U(r),a!==s&&n.setAttribute("class",s)}return this},toggleClass:function(e,t){var n=typeof e;return"boolean"==typeof t&&"string"===n?t?this.addClass(e):this.removeClass(e):pe.isFunction(e)?this.each(function(n){pe(this).toggleClass(e.call(this,n,G(this),t),t)}):this.each(function(){var t,r,a,i;if("string"===n)for(r=0,a=pe(this),i=e.match(Oe)||[];t=i[r++];)a.hasClass(t)?a.removeClass(t):a.addClass(t);else void 0!==e&&"boolean"!==n||(t=G(this),t&&Ne.set(this,"__className__",t),this.setAttribute&&this.setAttribute("class",t||e===!1?"":Ne.get(this,"__className__")||""))})},hasClass:function(e){var t,n,r=0;for(t=" "+e+" ";n=this[r++];)if(1===n.nodeType&&(" "+U(G(n))+" ").indexOf(t)>-1)return!0; return!1}});var wt=/\r/g;pe.fn.extend({val:function(e){var t,n,r,a=this[0];{if(arguments.length)return r=pe.isFunction(e),this.each(function(n){var a;1===this.nodeType&&(a=r?e.call(this,n,pe(this).val()):e,null==a?a="":"number"==typeof a?a+="":pe.isArray(a)&&(a=pe.map(a,function(e){return null==e?"":e+""})),t=pe.valHooks[this.type]||pe.valHooks[this.nodeName.toLowerCase()],t&&"set"in t&&void 0!==t.set(this,a,"value")||(this.value=a))});if(a)return t=pe.valHooks[a.type]||pe.valHooks[a.nodeName.toLowerCase()],t&&"get"in t&&void 0!==(n=t.get(a,"value"))?n:(n=a.value,"string"==typeof n?n.replace(wt,""):null==n?"":n)}}}),pe.extend({valHooks:{option:{get:function(e){var t=pe.find.attr(e,"value");return null!=t?t:U(pe.text(e))}},select:{get:function(e){var t,n,r,a=e.options,i=e.selectedIndex,o="select-one"===e.type,s=o?null:[],u=o?i+1:a.length;for(r=i<0?u:o?i:0;r<u;r++)if(n=a[r],(n.selected||r===i)&&!n.disabled&&(!n.parentNode.disabled||!pe.nodeName(n.parentNode,"optgroup"))){if(t=pe(n).val(),o)return t;s.push(t)}return s},set:function(e,t){for(var n,r,a=e.options,i=pe.makeArray(t),o=a.length;o--;)r=a[o],(r.selected=pe.inArray(pe.valHooks.option.get(r),i)>-1)&&(n=!0);return n||(e.selectedIndex=-1),i}}}}),pe.each(["radio","checkbox"],function(){pe.valHooks[this]={set:function(e,t){if(pe.isArray(t))return e.checked=pe.inArray(pe(e).val(),t)>-1}},de.checkOn||(pe.valHooks[this].get=function(e){return null===e.getAttribute("value")?"on":e.value})});var At=/^(?:focusinfocus|focusoutblur)$/;pe.extend(pe.event,{trigger:function(t,n,r,a){var i,o,s,u,c,l,f,d=[r||te],h=ce.call(t,"type")?t.type:t,p=ce.call(t,"namespace")?t.namespace.split("."):[];if(o=s=r=r||te,3!==r.nodeType&&8!==r.nodeType&&!At.test(h+pe.event.triggered)&&(h.indexOf(".")>-1&&(p=h.split("."),h=p.shift(),p.sort()),c=h.indexOf(":")<0&&"on"+h,t=t[pe.expando]?t:new pe.Event(h,"object"==typeof t&&t),t.isTrigger=a?2:3,t.namespace=p.join("."),t.rnamespace=t.namespace?new RegExp("(^|\\.)"+p.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,t.result=void 0,t.target||(t.target=r),n=null==n?[t]:pe.makeArray(n,[t]),f=pe.event.special[h]||{},a||!f.trigger||f.trigger.apply(r,n)!==!1)){if(!a&&!f.noBubble&&!pe.isWindow(r)){for(u=f.delegateType||h,At.test(u+h)||(o=o.parentNode);o;o=o.parentNode)d.push(o),s=o;s===(r.ownerDocument||te)&&d.push(s.defaultView||s.parentWindow||e)}for(i=0;(o=d[i++])&&!t.isPropagationStopped();)t.type=i>1?u:f.bindType||h,l=(Ne.get(o,"events")||{})[t.type]&&Ne.get(o,"handle"),l&&l.apply(o,n),l=c&&o[c],l&&l.apply&&ze(o)&&(t.result=l.apply(o,n),t.result===!1&&t.preventDefault());return t.type=h,a||t.isDefaultPrevented()||f._default&&f._default.apply(d.pop(),n)!==!1||!ze(r)||c&&pe.isFunction(r[h])&&!pe.isWindow(r)&&(s=r[c],s&&(r[c]=null),pe.event.triggered=h,r[h](),pe.event.triggered=void 0,s&&(r[c]=s)),t.result}},simulate:function(e,t,n){var r=pe.extend(new pe.Event,n,{type:e,isSimulated:!0});pe.event.trigger(r,null,t)}}),pe.fn.extend({trigger:function(e,t){return this.each(function(){pe.event.trigger(e,t,this)})},triggerHandler:function(e,t){var n=this[0];if(n)return pe.event.trigger(e,t,n,!0)}}),pe.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,t){pe.fn[t]=function(e,n){return arguments.length>0?this.on(t,null,e,n):this.trigger(t)}}),pe.fn.extend({hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}}),de.focusin="onfocusin"in e,de.focusin||pe.each({focus:"focusin",blur:"focusout"},function(e,t){var n=function(e){pe.event.simulate(t,e.target,pe.event.fix(e))};pe.event.special[t]={setup:function(){var r=this.ownerDocument||this,a=Ne.access(r,t);a||r.addEventListener(e,n,!0),Ne.access(r,t,(a||0)+1)},teardown:function(){var r=this.ownerDocument||this,a=Ne.access(r,t)-1;a?Ne.access(r,t,a):(r.removeEventListener(e,n,!0),Ne.remove(r,t))}}});var xt=e.location,Mt=pe.now(),kt=/\?/;pe.parseXML=function(t){var n;if(!t||"string"!=typeof t)return null;try{n=(new e.DOMParser).parseFromString(t,"text/xml")}catch(e){n=void 0}return n&&!n.getElementsByTagName("parsererror").length||pe.error("Invalid XML: "+t),n};var Tt=/\[\]$/,St=/\r?\n/g,Et=/^(?:submit|button|image|reset|file)$/i,Ct=/^(?:input|select|textarea|keygen)/i;pe.param=function(e,t){var n,r=[],a=function(e,t){var n=pe.isFunction(t)?t():t;r[r.length]=encodeURIComponent(e)+"="+encodeURIComponent(null==n?"":n)};if(pe.isArray(e)||e.jquery&&!pe.isPlainObject(e))pe.each(e,function(){a(this.name,this.value)});else for(n in e)$(n,e[n],t,a);return r.join("&")},pe.fn.extend({serialize:function(){return pe.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var e=pe.prop(this,"elements");return e?pe.makeArray(e):this}).filter(function(){var e=this.type;return this.name&&!pe(this).is(":disabled")&&Ct.test(this.nodeName)&&!Et.test(e)&&(this.checked||!Ue.test(e))}).map(function(e,t){var n=pe(this).val();return null==n?null:pe.isArray(n)?pe.map(n,function(e){return{name:t.name,value:e.replace(St,"\r\n")}}):{name:t.name,value:n.replace(St,"\r\n")}}).get()}});var Ot=/%20/g,Dt=/#.*$/,jt=/([?&])_=[^&]*/,Pt=/^(.*?):[ \t]*([^\r\n]*)$/gm,zt=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,Nt=/^(?:GET|HEAD)$/,Wt=/^\/\//,Lt={},Rt={},qt="*/".concat("*"),Yt=te.createElement("a");Yt.href=xt.href,pe.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:xt.href,type:"GET",isLocal:zt.test(xt.protocol),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":qt,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/\bxml\b/,html:/\bhtml/,json:/\bjson\b/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":JSON.parse,"text xml":pe.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(e,t){return t?X(X(e,pe.ajaxSettings),t):X(pe.ajaxSettings,e)},ajaxPrefilter:V(Lt),ajaxTransport:V(Rt),ajax:function(t,n){function r(t,n,r,s){var c,d,h,_,w,A=n;l||(l=!0,u&&e.clearTimeout(u),a=void 0,o=s||"",x.readyState=t>0?4:0,c=t>=200&&t<300||304===t,r&&(_=J(p,x,r)),_=Z(p,_,x,c),c?(p.ifModified&&(w=x.getResponseHeader("Last-Modified"),w&&(pe.lastModified[i]=w),w=x.getResponseHeader("etag"),w&&(pe.etag[i]=w)),204===t||"HEAD"===p.type?A="nocontent":304===t?A="notmodified":(A=_.state,d=_.data,h=_.error,c=!h)):(h=A,!t&&A||(A="error",t<0&&(t=0))),x.status=t,x.statusText=(n||A)+"",c?v.resolveWith(m,[d,A,x]):v.rejectWith(m,[x,A,h]),x.statusCode(b),b=void 0,f&&g.trigger(c?"ajaxSuccess":"ajaxError",[x,p,c?d:h]),y.fireWith(m,[x,A]),f&&(g.trigger("ajaxComplete",[x,p]),--pe.active||pe.event.trigger("ajaxStop")))}"object"==typeof t&&(n=t,t=void 0),n=n||{};var a,i,o,s,u,c,l,f,d,h,p=pe.ajaxSetup({},n),m=p.context||p,g=p.context&&(m.nodeType||m.jquery)?pe(m):pe.event,v=pe.Deferred(),y=pe.Callbacks("once memory"),b=p.statusCode||{},_={},w={},A="canceled",x={readyState:0,getResponseHeader:function(e){var t;if(l){if(!s)for(s={};t=Pt.exec(o);)s[t[1].toLowerCase()]=t[2];t=s[e.toLowerCase()]}return null==t?null:t},getAllResponseHeaders:function(){return l?o:null},setRequestHeader:function(e,t){return null==l&&(e=w[e.toLowerCase()]=w[e.toLowerCase()]||e,_[e]=t),this},overrideMimeType:function(e){return null==l&&(p.mimeType=e),this},statusCode:function(e){var t;if(e)if(l)x.always(e[x.status]);else for(t in e)b[t]=[b[t],e[t]];return this},abort:function(e){var t=e||A;return a&&a.abort(t),r(0,t),this}};if(v.promise(x),p.url=((t||p.url||xt.href)+"").replace(Wt,xt.protocol+"//"),p.type=n.method||n.type||p.method||p.type,p.dataTypes=(p.dataType||"*").toLowerCase().match(Oe)||[""],null==p.crossDomain){c=te.createElement("a");try{c.href=p.url,c.href=c.href,p.crossDomain=Yt.protocol+"//"+Yt.host!=c.protocol+"//"+c.host}catch(e){p.crossDomain=!0}}if(p.data&&p.processData&&"string"!=typeof p.data&&(p.data=pe.param(p.data,p.traditional)),K(Lt,p,n,x),l)return x;f=pe.event&&p.global,f&&0===pe.active++&&pe.event.trigger("ajaxStart"),p.type=p.type.toUpperCase(),p.hasContent=!Nt.test(p.type),i=p.url.replace(Dt,""),p.hasContent?p.data&&p.processData&&0===(p.contentType||"").indexOf("application/x-www-form-urlencoded")&&(p.data=p.data.replace(Ot,"+")):(h=p.url.slice(i.length),p.data&&(i+=(kt.test(i)?"&":"?")+p.data,delete p.data),p.cache===!1&&(i=i.replace(jt,"$1"),h=(kt.test(i)?"&":"?")+"_="+Mt++ +h),p.url=i+h),p.ifModified&&(pe.lastModified[i]&&x.setRequestHeader("If-Modified-Since",pe.lastModified[i]),pe.etag[i]&&x.setRequestHeader("If-None-Match",pe.etag[i])),(p.data&&p.hasContent&&p.contentType!==!1||n.contentType)&&x.setRequestHeader("Content-Type",p.contentType),x.setRequestHeader("Accept",p.dataTypes[0]&&p.accepts[p.dataTypes[0]]?p.accepts[p.dataTypes[0]]+("*"!==p.dataTypes[0]?", "+qt+"; q=0.01":""):p.accepts["*"]);for(d in p.headers)x.setRequestHeader(d,p.headers[d]);if(p.beforeSend&&(p.beforeSend.call(m,x,p)===!1||l))return x.abort();if(A="abort",y.add(p.complete),x.done(p.success),x.fail(p.error),a=K(Rt,p,n,x)){if(x.readyState=1,f&&g.trigger("ajaxSend",[x,p]),l)return x;p.async&&p.timeout>0&&(u=e.setTimeout(function(){x.abort("timeout")},p.timeout));try{l=!1,a.send(_,r)}catch(e){if(l)throw e;r(-1,e)}}else r(-1,"No Transport");return x},getJSON:function(e,t,n){return pe.get(e,t,n,"json")},getScript:function(e,t){return pe.get(e,void 0,t,"script")}}),pe.each(["get","post"],function(e,t){pe[t]=function(e,n,r,a){return pe.isFunction(n)&&(a=a||r,r=n,n=void 0),pe.ajax(pe.extend({url:e,type:t,dataType:a,data:n,success:r},pe.isPlainObject(e)&&e))}}),pe._evalUrl=function(e){return pe.ajax({url:e,type:"GET",dataType:"script",cache:!0,async:!1,global:!1,throws:!0})},pe.fn.extend({wrapAll:function(e){var t;return this[0]&&(pe.isFunction(e)&&(e=e.call(this[0])),t=pe(e,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&t.insertBefore(this[0]),t.map(function(){for(var e=this;e.firstElementChild;)e=e.firstElementChild;return e}).append(this)),this},wrapInner:function(e){return pe.isFunction(e)?this.each(function(t){pe(this).wrapInner(e.call(this,t))}):this.each(function(){var t=pe(this),n=t.contents();n.length?n.wrapAll(e):t.append(e)})},wrap:function(e){var t=pe.isFunction(e);return this.each(function(n){pe(this).wrapAll(t?e.call(this,n):e)})},unwrap:function(e){return this.parent(e).not("body").each(function(){pe(this).replaceWith(this.childNodes)}),this}}),pe.expr.pseudos.hidden=function(e){return!pe.expr.pseudos.visible(e)},pe.expr.pseudos.visible=function(e){return!!(e.offsetWidth||e.offsetHeight||e.getClientRects().length)},pe.ajaxSettings.xhr=function(){try{return new e.XMLHttpRequest}catch(e){}};var Bt={0:200,1223:204},Ht=pe.ajaxSettings.xhr();de.cors=!!Ht&&"withCredentials"in Ht,de.ajax=Ht=!!Ht,pe.ajaxTransport(function(t){var n,r;if(de.cors||Ht&&!t.crossDomain)return{send:function(a,i){var o,s=t.xhr();if(s.open(t.type,t.url,t.async,t.username,t.password),t.xhrFields)for(o in t.xhrFields)s[o]=t.xhrFields[o];t.mimeType&&s.overrideMimeType&&s.overrideMimeType(t.mimeType),t.crossDomain||a["X-Requested-With"]||(a["X-Requested-With"]="XMLHttpRequest");for(o in a)s.setRequestHeader(o,a[o]);n=function(e){return function(){n&&(n=r=s.onload=s.onerror=s.onabort=s.onreadystatechange=null,"abort"===e?s.abort():"error"===e?"number"!=typeof s.status?i(0,"error"):i(s.status,s.statusText):i(Bt[s.status]||s.status,s.statusText,"text"!==(s.responseType||"text")||"string"!=typeof s.responseText?{binary:s.response}:{text:s.responseText},s.getAllResponseHeaders()))}},s.onload=n(),r=s.onerror=n("error"),void 0!==s.onabort?s.onabort=r:s.onreadystatechange=function(){4===s.readyState&&e.setTimeout(function(){n&&r()})},n=n("abort");try{s.send(t.hasContent&&t.data||null)}catch(e){if(n)throw e}},abort:function(){n&&n()}}}),pe.ajaxPrefilter(function(e){e.crossDomain&&(e.contents.script=!1)}),pe.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/\b(?:java|ecma)script\b/},converters:{"text script":function(e){return pe.globalEval(e),e}}}),pe.ajaxPrefilter("script",function(e){void 0===e.cache&&(e.cache=!1),e.crossDomain&&(e.type="GET")}),pe.ajaxTransport("script",function(e){if(e.crossDomain){var t,n;return{send:function(r,a){t=pe("<script>").prop({charset:e.scriptCharset,src:e.url}).on("load error",n=function(e){t.remove(),n=null,e&&a("error"===e.type?404:200,e.type)}),te.head.appendChild(t[0])},abort:function(){n&&n()}}}});var Ft=[],It=/(=)\?(?=&|$)|\?\?/;pe.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=Ft.pop()||pe.expando+"_"+Mt++;return this[e]=!0,e}}),pe.ajaxPrefilter("json jsonp",function(t,n,r){var a,i,o,s=t.jsonp!==!1&&(It.test(t.url)?"url":"string"==typeof t.data&&0===(t.contentType||"").indexOf("application/x-www-form-urlencoded")&&It.test(t.data)&&"data");if(s||"jsonp"===t.dataTypes[0])return a=t.jsonpCallback=pe.isFunction(t.jsonpCallback)?t.jsonpCallback():t.jsonpCallback,s?t[s]=t[s].replace(It,"$1"+a):t.jsonp!==!1&&(t.url+=(kt.test(t.url)?"&":"?")+t.jsonp+"="+a),t.converters["script json"]=function(){return o||pe.error(a+" was not called"),o[0]},t.dataTypes[0]="json",i=e[a],e[a]=function(){o=arguments},r.always(function(){void 0===i?pe(e).removeProp(a):e[a]=i,t[a]&&(t.jsonpCallback=n.jsonpCallback,Ft.push(a)),o&&pe.isFunction(i)&&i(o[0]),o=i=void 0}),"script"}),de.createHTMLDocument=function(){var e=te.implementation.createHTMLDocument("").body;return e.innerHTML="<form></form><form></form>",2===e.childNodes.length}(),pe.parseHTML=function(e,t,n){if("string"!=typeof e)return[];"boolean"==typeof t&&(n=t,t=!1);var r,a,i;return t||(de.createHTMLDocument?(t=te.implementation.createHTMLDocument(""),r=t.createElement("base"),r.href=te.location.href,t.head.appendChild(r)):t=te),a=xe.exec(e),i=!n&&[],a?[t.createElement(a[1])]:(a=b([e],t,i),i&&i.length&&pe(i).remove(),pe.merge([],a.childNodes))},pe.fn.load=function(e,t,n){var r,a,i,o=this,s=e.indexOf(" ");return s>-1&&(r=U(e.slice(s)),e=e.slice(0,s)),pe.isFunction(t)?(n=t,t=void 0):t&&"object"==typeof t&&(a="POST"),o.length>0&&pe.ajax({url:e,type:a||"GET",dataType:"html",data:t}).done(function(e){i=arguments,o.html(r?pe("<div>").append(pe.parseHTML(e)).find(r):e)}).always(n&&function(e,t){o.each(function(){n.apply(this,i||[e.responseText,t,e])})}),this},pe.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){pe.fn[t]=function(e){return this.on(t,e)}}),pe.expr.pseudos.animated=function(e){return pe.grep(pe.timers,function(t){return e===t.elem}).length},pe.offset={setOffset:function(e,t,n){var r,a,i,o,s,u,c,l=pe.css(e,"position"),f=pe(e),d={};"static"===l&&(e.style.position="relative"),s=f.offset(),i=pe.css(e,"top"),u=pe.css(e,"left"),c=("absolute"===l||"fixed"===l)&&(i+u).indexOf("auto")>-1,c?(r=f.position(),o=r.top,a=r.left):(o=parseFloat(i)||0,a=parseFloat(u)||0),pe.isFunction(t)&&(t=t.call(e,n,pe.extend({},s))),null!=t.top&&(d.top=t.top-s.top+o),null!=t.left&&(d.left=t.left-s.left+a),"using"in t?t.using.call(e,d):f.css(d)}},pe.fn.extend({offset:function(e){if(arguments.length)return void 0===e?this:this.each(function(t){pe.offset.setOffset(this,e,t)});var t,n,r,a,i=this[0];if(i)return i.getClientRects().length?(r=i.getBoundingClientRect(),r.width||r.height?(a=i.ownerDocument,n=Q(a),t=a.documentElement,{top:r.top+n.pageYOffset-t.clientTop,left:r.left+n.pageXOffset-t.clientLeft}):r):{top:0,left:0}},position:function(){if(this[0]){var e,t,n=this[0],r={top:0,left:0};return"fixed"===pe.css(n,"position")?t=n.getBoundingClientRect():(e=this.offsetParent(),t=this.offset(),pe.nodeName(e[0],"html")||(r=e.offset()),r={top:r.top+pe.css(e[0],"borderTopWidth",!0),left:r.left+pe.css(e[0],"borderLeftWidth",!0)}),{top:t.top-r.top-pe.css(n,"marginTop",!0),left:t.left-r.left-pe.css(n,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){for(var e=this.offsetParent;e&&"static"===pe.css(e,"position");)e=e.offsetParent;return e||Xe})}}),pe.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(e,t){var n="pageYOffset"===t;pe.fn[e]=function(r){return Pe(this,function(e,r,a){var i=Q(e);return void 0===a?i?i[t]:e[r]:void(i?i.scrollTo(n?i.pageXOffset:a,n?a:i.pageYOffset):e[r]=a)},e,r,arguments.length)}}),pe.each(["top","left"],function(e,t){pe.cssHooks[t]=j(de.pixelPosition,function(e,n){if(n)return n=D(e,t),ot.test(n)?pe(e).position()[t]+"px":n})}),pe.each({Height:"height",Width:"width"},function(e,t){pe.each({padding:"inner"+e,content:t,"":"outer"+e},function(n,r){pe.fn[r]=function(a,i){var o=arguments.length&&(n||"boolean"!=typeof a),s=n||(a===!0||i===!0?"margin":"border");return Pe(this,function(t,n,a){var i;return pe.isWindow(t)?0===r.indexOf("outer")?t["inner"+e]:t.document.documentElement["client"+e]:9===t.nodeType?(i=t.documentElement,Math.max(t.body["scroll"+e],i["scroll"+e],t.body["offset"+e],i["offset"+e],i["client"+e])):void 0===a?pe.css(t,n,s):pe.style(t,n,a,s)},t,o?a:void 0,o)}})}),pe.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)}}),pe.parseJSON=JSON.parse,"function"==typeof define&&define.amd&&define("jquery",[],function(){return pe});var Ut=e.jQuery,Gt=e.$;return pe.noConflict=function(t){return e.$===pe&&(e.$=Gt),t&&e.jQuery===pe&&(e.jQuery=Ut),pe},t||(e.jQuery=e.$=pe),pe})}),Fs="mercury-parsing-container",Is=void 0;Hs.noConflict();var Us=function(e,t,n){var r=!(arguments.length>3&&void 0!==arguments[3])||arguments[3];return r&&(t&&"string"==typeof t?t=Is.find(t):t||(t=Is)),new Hs.fn.init(e,t,n)};Us.fn=Us.prototype=Hs.fn,Hs.extend(Us,Hs);var Gs=function(e){return e.find('script, style, link[rel="stylesheet"]').remove(),e};Us.cloneHtml=function(){var e=Gs(Us("html",null,null,!1).clone());return e.children().wrap("<div />").wrap("<div />")},Us.root=function(){return Us("*").first()},Us.browser=!0;var $s=function(e){var t=e.get(0);return!(!t||!t.tagName)&&"container"===t.tagName.toLowerCase()};Us.html=function(e){if(e)return $s(e)||$s(e.children("container"))?e.children("container").html()||e.html():Us("<div>").append(e.eq(0).clone()).html();var t=Gs(Us("body",null,null,!1).clone()),n=Gs(Us("head",null,null,!1).clone());if(Is&&Is.length>0)return Is.children().html();var r=Us("<container />").append(Us("<container>"+n.html()+"</container>")).append(Us("<container>"+t.html()+"</container>")).wrap("<container />").parent().html();return r},Us.load=function(e){var t=(arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},arguments.length>2&&void 0!==arguments[2]&&arguments[2]);return e=e?Us("<container />").html(e):Us.cloneHtml(),Is=Is||Us('<div class="'+Fs+'" style="display:none;" />'),e=Gs(e),e.find("*").contents().each(function(){this.nodeType===Node.COMMENT_NODE&&Us(this).remove()}),Is.html(e),t?{$:Us,html:e.html()}:Us};var Vs={encodingExists:function(){return!1},decode:function(e){return e}},Ks=/\s{2,}/g,Xs=new RegExp("(page|paging|(p(a|g|ag)?(e|enum|ewanted|ing|ination)))?(=|/)([0-9]{1,3})","i"),Js=/[a-z]/i,Zs=/^[a-z]+$/i,Qs=/^[0-9]+$/i,eu=/charset=([\w-]+)\b/,tu="utf-8",nu=ji,ru=ja("iterator"),au=ya,iu=Sn.isIterable=function(e){var t=Object(e);return void 0!==t[ru]||"@@iterator"in t||au.hasOwnProperty(nu(t))},ou=iu,su=n(function(e){e.exports={default:ou,__esModule:!0}}),uu=Pn,cu=Fi,lu=Sn.getIterator=function(e){var t=cu(e);if("function"!=typeof t)throw TypeError(e+" is not iterable!");return uu(t.call(e))},fu=lu,du=n(function(e){e.exports={default:fu,__esModule:!0}}),hu=t(du),pu=n(function(e,t){function n(e){return e&&e.__esModule?e:{default:e}}t.__esModule=!0;var r=su,a=n(r),i=du,o=n(i);t.default=function(){function e(e,t){var n=[],r=!0,a=!1,i=void 0;try{for(var s,u=(0,o.default)(e);!(r=(s=u.next()).done)&&(n.push(s.value),!t||n.length!==t);r=!0);}catch(e){a=!0,i=e}finally{try{!r&&u.return&&u.return()}finally{if(a)throw i}}return n}return function(t,n){if(Array.isArray(t))return t;if((0,a.default)(Object(t)))return e(t,n);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}()}),mu=t(pu),gu=new RegExp(".( |$)"),vu=function(e){function t(){var t=e.indexOf("\r\n",r),a=e.indexOf("\n",r),i=e.indexOf("\r",r),o=[t,a,i],s=o.sort(function(e,t){return e>t?1:e<t?-1:0}).filter(function(e){return e!==-1})[0];if(void 0!==s)return n(s,s===t?2:1);var u=e.length;return u===r?null:n(u,0)}function n(t,n){var a=e.substr(r,t-r);return r=t+n,a}var r=0;return e=e.toString(),t},yu=vu,bu=/^[A-Z_]+(\/\d\.\d)? /,_u=/^([A-Z_]+) (.+) [A-Z]+\/(\d)\.(\d)$/,wu=/^[A-Z]+\/(\d)\.(\d) (\d{3}) (.*)$/,Au=function(e,t){return P(N(e),t)},xu=Au,Mu=XMLHttpRequest;if(!Mu)throw new Error("missing XMLHttpRequest");R.log={trace:Y,debug:Y,info:Y,warn:Y,error:Y};var ku=18e4,Tu=0;R.withCredentials=!1,R.DEFAULT_TIMEOUT=ku,R.defaults=function(e,t){var n=function(t){var n=function(n,r){n="string"==typeof n?{uri:n}:JSON.parse(JSON.stringify(n));for(var a in e)void 0===n[a]&&(n[a]=e[a]);return t(n,r)};return n},r=n(R);return r.get=n(R.get),r.post=n(R.post),r.put=n(R.put),r.head=n(R.head),r};var Su=["get","put","post","head"];Su.forEach(function(e){var t=e.toUpperCase(),n=e.toLowerCase();R[n]=function(e){"string"==typeof e?e={method:t,uri:e}:(e=JSON.parse(JSON.stringify(e)),e.method=t);var n=[e].concat(Array.prototype.slice.apply(arguments,[1]));return R.apply(this,n)}}),R.couch=function(e,t){function n(e,n,r){if(e)return t(e,n,r);if((n.statusCode<200||n.statusCode>299)&&r.error){e=new Error("CouchDB error: "+(r.error.reason||r.error.error));for(var a in r)e[a]=r[a];return t(e,n,r)}return t(e,n,r)}"string"==typeof e&&(e={uri:e}),e.json=!0,e.body&&(e.json=e.body),delete e.body,t=t||Y;var r=R(e,n);return r};var Eu=R,Cu=[U].map(kn.mark),Ou={badUrl:{error:!0,messages:"The url parameter passed does not look like a valid URL. Please check your data and try again."}},Du=Us.browser?{}:{"User-Agent":"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36"},ju=1e4,Pu=["audio/mpeg","image/gif","image/jpeg","image/jpg"],zu=new RegExp("^("+Pu.join("|")+")$","i"),Nu=5242880,Wu=function(){function e(e,n){return t.apply(this,arguments)}var t=ps(kn.mark(function e(t,n){var r,a,i,o;return kn.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return n=n||Bs.parse(encodeURI(t)),r={url:n.href,headers:da({},Du),timeout:ju,jar:!0,encoding:null,gzip:!0,followAllRedirects:!0},e.next=4,$(r);case 4:return a=e.sent,i=a.response,o=a.body,e.prev=7,V(i),e.abrupt("return",{body:o,response:i});case 12:return e.prev=12,e.t0=e.catch(7),e.abrupt("return",Ou.badUrl);case 15:case"end":return e.stop()}},e,this,[[7,12]])}));return e}(),Lu=Ir,Ru=Ur.concat("length","prototype"),qu=Object.getOwnPropertyNames||function(e){return Lu(e,Ru)},Yu={f:qu},Bu=Yu,Hu=Xr,Fu=Pn,Iu=Tn.Reflect,Uu=Iu&&Iu.ownKeys||function(e){var t=Bu.f(Fu(e)),n=Hu.f;return n?t.concat(n(e)):t},Gu=ir;Gu(Gu.S,"Reflect",{ownKeys:Uu});var $u=Sn.Reflect.ownKeys,Vu=n(function(e){e.exports={default:$u,__esModule:!0}}),Ku=t(Vu),Xu=new RegExp("transparent|spacer|blank","i"),Ju="mercury-parser-keep",Zu=['iframe[src^="https://www.youtube.com"]','iframe[src^="https://www.youtube-nocookie.com"]','iframe[src^="http://www.youtube.com"]','iframe[src^="https://player.vimeo"]','iframe[src^="http://player.vimeo"]'],Qu=["title","script","noscript","link","style","hr","embed","iframe","object"],ec=["style","align"],tc=(ec.map(function(e){return"["+e+"]"}),ec.join(","),["src","srcset","href","class","id","alt","xlink:href","width","height"]),nc=new RegExp("^("+tc.join("|")+")$","i"),rc=["p"],ac=(rc.map(function(e){return e+":empty"}).join(","),["ul","ol","table","div","button","form"].join(",")),ic=["h2","h3","h4","h5","h6"],oc=ic.join(","),sc=["ad-break","adbox","advert","addthis","agegate","aux","blogger-labels","combx","comment","conversation","disqus","entry-unrelated","extra","foot","header","hidden","loader","login","menu","meta","nav","outbrain","pager","pagination","predicta","presence_control_external","popup","printfriendly","related","remove","remark","rss","share","shoutbox","sidebar","sociable","sponsor","taboola","tools"],uc=["and","article","body","blogindex","column","content","entry-content-asset","format","hfeed","hentry","hatom","main","page","posts","shadow"],cc=["a","blockquote","dl","div","img","p","pre","table"].join(","),lc=["article","articlecontent","instapaper_body","blog","body","content","entry-content-asset","entry","hentry","main","Normal","page","pagination","permalink","post","story","text","[-_]copy","\\Bcopy"],fc=new RegExp(lc.join("|"),"i"),dc=["adbox","advert","author","bio","bookmark","bottom","byline","clear","com-","combx","comment","comment\\B","contact","copy","credit","crumb","date","deck","excerpt","featured","foot","footer","footnote","graf","head","info","infotext","instapaper_ignore","jump","linebreak","link","masthead","media","meta","modal","outbrain","promo","pr_","related","respond","roundcontent","scroll","secondary","share","shopping","shoutbox","side","sidebar","sponsor","stamp","sub","summary","tags","tools","widget"],hc=new RegExp(dc.join("|"),"i"),pc="meta[name=generator][value^=WordPress]",mc=new RegExp("pag(e|ing|inat)","i"),gc=["article","aside","blockquote","body","br","button","canvas","caption","col","colgroup","dd","div","dl","dt","embed","fieldset","figcaption","figure","footer","form","h1","h2","h3","h4","h5","h6","header","hgroup","hr","li","map","object","ol","output","p","pre","progress","section","table","tbody","textarea","tfoot","th","thead","tr","ul","video"],vc=new RegExp("^("+gc.join("|")+")$","i"),yc=sc.join("|"),bc=new RegExp(yc,"i"),_c=uc.join("|"),wc=new RegExp(_c,"i"),Ac=Vn,xc=Kn,Mc=function(e,t,n){t in e?Ac.f(e,t,xc(0,n)):e[t]=n},kc=On,Tc=ir,Sc=ea,Ec=Ni,Cc=qi,Oc=wr,Dc=Mc,jc=Fi;Tc(Tc.S+Tc.F*!Po(function(e){Array.from(e)}),"Array",{from:function(e){var t,n,r,a,i=Sc(e),o="function"==typeof this?this:Array,s=arguments.length,u=s>1?arguments[1]:void 0,c=void 0!==u,l=0,f=jc(i);if(c&&(u=kc(u,s>2?arguments[2]:void 0,2)),void 0==f||o==Array&&Cc(f))for(t=Oc(i.length),n=new o(t);t>l;l++)Dc(n,l,c?u(i[l],l):i[l]);else for(a=f.call(i),n=new o;!(r=a.next()).done;l++)Dc(n,l,c?Ec(a,u,[r.value,l],!0):r.value);return n.length=l,n}});var Pc=Sn.Array.from,zc=n(function(e){e.exports={default:Pc,__esModule:!0}}),Nc=t(zc),Wc=n(function(e,t){function n(e){return e&&e.__esModule?e:{default:e}}t.__esModule=!0;var r=zc,a=n(r);t.default=function(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t<e.length;t++)n[t]=e[t];return n}return(0,a.default)(e)}}),Lc=t(Wc),Rc=ir;Rc(Rc.S+Rc.F*!Nn,"Object",{defineProperty:Vn.f});var qc=Sn.Object,Yc=function(e,t,n){return qc.defineProperty(e,t,n)},Bc=n(function(e){e.exports={default:Yc,__esModule:!0}}),Hc=n(function(e,t){function n(e){return e&&e.__esModule?e:{default:e}}t.__esModule=!0;var r=Bc,a=n(r);t.default=function(e,t,n){return t in e?(0,a.default)(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}}),Fc=t(Hc),Ic=["ad-break","adbox","advert","addthis","agegate","aux","blogger-labels","combx","comment","conversation","disqus","entry-unrelated","extra","foot","form","header","hidden","loader","login","menu","meta","nav","pager","pagination","predicta","presence_control_external","popup","printfriendly","related","remove","remark","rss","share","shoutbox","sidebar","sociable","sponsor","tools"],Uc=["and","article","body","blogindex","column","content","entry-content-asset","format","hfeed","hentry","hatom","main","page","posts","shadow"],Gc=(["a","blockquote","dl","div","img","p","pre","table"].join(","),["br","b","i","label","hr","area","base","basefont","input","img","link","meta"]),$c=new RegExp("^("+Gc.join("|")+")$","i"),Vc=[[".hentry",".entry-content"],["entry",".entry-content"],[".entry",".entry_content"],[".post",".postbody"],[".post",".post_body"],[".post",".post-body"]],Kc=["figure","photo","image","caption"],Xc=new RegExp(Kc.join("|"),"i"),Jc=["article","articlecontent","instapaper_body","blog","body","content","entry-content-asset","entry","hentry","main","Normal","page","pagination","permalink","post","story","text","[-_]copy","\\Bcopy"],Zc=new RegExp(Jc.join("|"),"i"),Qc=new RegExp("entry-content-asset","i"),el=["adbox","advert","author","bio","bookmark","bottom","byline","clear","com-","combx","comment","comment\\B","contact","copy","credit","crumb","date","deck","excerpt","featured","foot","footer","footnote","graf","head","info","infotext","instapaper_ignore","jump","linebreak","link","masthead","media","meta","modal","outbrain","promo","pr_","related","respond","roundcontent","scroll","secondary","share","shopping","shoutbox","side","sidebar","sponsor","stamp","sub","summary","tags","tools","widget"],tl=new RegExp(el.join("|"),"i"),nl=(Ic.join("|"),Uc.join("|"),new RegExp("^(p|li|span|pre)$","i")),rl=new RegExp("^(td|blockquote|ol|ul|dl)$","i"),al=new RegExp("^(address|form)$","i"),il=new RegExp("^(p|pre)$","i"),ol=ja,sl={f:ol},ul=sl.f("iterator"),cl=n(function(e){e.exports={default:ul,__esModule:!0}}),ll=n(function(e){var t=Wr("meta"),n=Dn,r=sr,a=Vn.f,i=0,o=Object.isExtensible||function(){return!0},s=!zn(function(){return o(Object.preventExtensions({}))}),u=function(e){a(e,t,{value:{i:"O"+ ++i,w:{}}})},c=function(e,a){if(!n(e))return"symbol"==typeof e?e:("string"==typeof e?"S":"P")+e;if(!r(e,t)){if(!o(e))return"F";if(!a)return"E";u(e)}return e[t].i},l=function(e,n){if(!r(e,t)){if(!o(e))return!0;if(!n)return!1;u(e)}return e[t].w},f=function(e){return s&&d.NEED&&o(e)&&!r(e,t)&&u(e),e},d=e.exports={KEY:t,NEED:!1,fastKey:c,getWeak:l,onFreeze:f}}),fl=Tn,dl=Sn,hl=ga,pl=sl,ml=Vn.f,gl=function(e){var t=dl.Symbol||(dl.Symbol=hl?{}:fl.Symbol||{});"_"==e.charAt(0)||e in t||ml(t,e,{value:pl.f(e)})},vl=Vr,yl=mr,bl=function(e,t){for(var n,r=yl(e),a=vl(r),i=a.length,o=0;i>o;)if(r[n=a[o++]]===t)return n},_l=Vr,wl=Xr,Al=Zr,xl=function(e){var t=_l(e),n=wl.f;if(n)for(var r,a=n(e),i=Al.f,o=0;a.length>o;)i.call(e,r=a[o++])&&t.push(r);return t},Ml=cr,kl=Array.isArray||function(e){return"Array"==Ml(e)},Tl=mr,Sl=Yu.f,El={}.toString,Cl="object"==typeof window&&window&&Object.getOwnPropertyNames?Object.getOwnPropertyNames(window):[],Ol=function(e){try{return Sl(e)}catch(e){return Cl.slice()}},Dl=function(e){return Cl&&"[object Window]"==El.call(e)?Ol(e):Sl(Tl(e))},jl={f:Dl},Pl=Zr,zl=Kn,Nl=mr,Wl=Hn,Ll=sr,Rl=Yn,ql=Object.getOwnPropertyDescriptor,Yl=Nn?ql:function(e,t){if(e=Nl(e),t=Wl(t,!0),Rl)try{return ql(e,t)}catch(e){}if(Ll(e,t))return zl(!Pl.f.call(e,t),e[t])},Bl={f:Yl},Hl=Tn,Fl=sr,Il=Nn,Ul=ir,Gl=va,$l=ll.KEY,Vl=zn,Kl=Pr,Xl=Wa,Jl=Wr,Zl=ja,Ql=sl,ef=gl,tf=bl,nf=xl,rf=kl,af=Pn,of=mr,sf=Hn,uf=Kn,cf=Da,lf=jl,ff=Bl,df=Vn,hf=Vr,pf=ff.f,mf=df.f,gf=lf.f,vf=Hl.Symbol,yf=Hl.JSON,bf=yf&&yf.stringify,_f="prototype",wf=Zl("_hidden"),Af=Zl("toPrimitive"),xf={}.propertyIsEnumerable,Mf=Kl("symbol-registry"),kf=Kl("symbols"),Tf=Kl("op-symbols"),Sf=Object[_f],Ef="function"==typeof vf,Cf=Hl.QObject,Of=!Cf||!Cf[_f]||!Cf[_f].findChild,Df=Il&&Vl(function(){return 7!=cf(mf({},"a",{get:function(){return mf(this,"a",{value:7}).a}})).a})?function(e,t,n){var r=pf(Sf,t);r&&delete Sf[t],mf(e,t,n),r&&e!==Sf&&mf(Sf,t,r)}:mf,jf=function(e){var t=kf[e]=cf(vf[_f]);return t._k=e,t},Pf=Ef&&"symbol"==typeof vf.iterator?function(e){return"symbol"==typeof e}:function(e){return e instanceof vf},zf=function(e,t,n){return e===Sf&&zf(Tf,t,n),af(e),t=sf(t,!0),af(n),Fl(kf,t)?(n.enumerable?(Fl(e,wf)&&e[wf][t]&&(e[wf][t]=!1),n=cf(n,{enumerable:uf(0,!1)})):(Fl(e,wf)||mf(e,wf,uf(1,{})),e[wf][t]=!0),Df(e,t,n)):mf(e,t,n)},Nf=function(e,t){af(e);for(var n,r=nf(t=of(t)),a=0,i=r.length;i>a;)zf(e,n=r[a++],t[n]);return e},Wf=function(e,t){return void 0===t?cf(e):Nf(cf(e),t)},Lf=function(e){var t=xf.call(this,e=sf(e,!0));return!(this===Sf&&Fl(kf,e)&&!Fl(Tf,e))&&(!(t||!Fl(this,e)||!Fl(kf,e)||Fl(this,wf)&&this[wf][e])||t)},Rf=function(e,t){if(e=of(e),t=sf(t,!0),e!==Sf||!Fl(kf,t)||Fl(Tf,t)){ -var n=pf(e,t);return!n||!Fl(kf,t)||Fl(e,wf)&&e[wf][t]||(n.enumerable=!0),n}},qf=function(e){for(var t,n=gf(of(e)),r=[],a=0;n.length>a;)Fl(kf,t=n[a++])||t==wf||t==$l||r.push(t);return r},Yf=function(e){for(var t,n=e===Sf,r=gf(n?Tf:of(e)),a=[],i=0;r.length>i;)!Fl(kf,t=r[i++])||n&&!Fl(Sf,t)||a.push(kf[t]);return a};Ef||(vf=function(){if(this instanceof vf)throw TypeError("Symbol is not a constructor!");var e=Jl(arguments.length>0?arguments[0]:void 0),t=function(n){this===Sf&&t.call(Tf,n),Fl(this,wf)&&Fl(this[wf],e)&&(this[wf][e]=!1),Df(this,e,uf(1,n))};return Il&&Of&&Df(Sf,e,{configurable:!0,set:t}),jf(e)},Gl(vf[_f],"toString",function(){return this._k}),ff.f=Rf,df.f=zf,Yu.f=lf.f=qf,Zr.f=Lf,Xr.f=Yf,Il&&!ga&&Gl(Sf,"propertyIsEnumerable",Lf,!0),Ql.f=function(e){return jf(Zl(e))}),Ul(Ul.G+Ul.W+Ul.F*!Ef,{Symbol:vf});for(var Bf="hasInstance,isConcatSpreadable,iterator,match,replace,search,species,split,toPrimitive,toStringTag,unscopables".split(","),Hf=0;Bf.length>Hf;)Zl(Bf[Hf++]);for(var Bf=hf(Zl.store),Hf=0;Bf.length>Hf;)ef(Bf[Hf++]);Ul(Ul.S+Ul.F*!Ef,"Symbol",{for:function(e){return Fl(Mf,e+="")?Mf[e]:Mf[e]=vf(e)},keyFor:function(e){if(Pf(e))return tf(Mf,e);throw TypeError(e+" is not a symbol!")},useSetter:function(){Of=!0},useSimple:function(){Of=!1}}),Ul(Ul.S+Ul.F*!Ef,"Object",{create:Wf,defineProperty:zf,defineProperties:Nf,getOwnPropertyDescriptor:Rf,getOwnPropertyNames:qf,getOwnPropertySymbols:Yf}),yf&&Ul(Ul.S+Ul.F*(!Ef||Vl(function(){var e=vf();return"[null]"!=bf([e])||"{}"!=bf({a:e})||"{}"!=bf(Object(e))})),"JSON",{stringify:function(e){if(void 0!==e&&!Pf(e)){for(var t,n,r=[e],a=1;arguments.length>a;)r.push(arguments[a++]);return t=r[1],"function"==typeof t&&(n=t),!n&&rf(t)||(t=function(e,t){if(n&&(t=n.call(this,e,t)),!Pf(t))return t}),r[1]=t,bf.apply(yf,r)}}}),vf[_f][Af]||Zn(vf[_f],Af,vf[_f].valueOf),Xl(vf,"Symbol"),Xl(Math,"Math",!0),Xl(Hl.JSON,"JSON",!0),gl("asyncIterator"),gl("observable");var Ff=Sn.Symbol,If=n(function(e){e.exports={default:Ff,__esModule:!0}}),Uf=n(function(e,t){function n(e){return e&&e.__esModule?e:{default:e}}t.__esModule=!0;var r=cl,a=n(r),i=If,o=n(i),s="function"==typeof o.default&&"symbol"==typeof a.default?function(e){return typeof e}:function(e){return e&&"function"==typeof o.default&&e.constructor===o.default&&e!==o.default.prototype?"symbol":typeof e};t.default="function"==typeof o.default&&"symbol"===s(a.default)?function(e){return"undefined"==typeof e?"undefined":s(e)}:function(e){return e&&"function"==typeof o.default&&e.constructor===o.default&&e!==o.default.prototype?"symbol":"undefined"==typeof e?"undefined":s(e)}}),Gf=t(Uf),$f=new RegExp("https?://","i"),Vf=new RegExp(".(png|gif|jpe?g)","i"),Kf=["script","style","form"].join(","),Xf={create:function(e,t,n){var r=this;return ps(kn.mark(function a(){var i,o;return kn.wrap(function(a){for(;;)switch(a.prev=a.next){case 0:if(i=void 0,!t){a.next=6;break}o={statusMessage:"OK",statusCode:200,headers:{"content-type":"text/html","content-length":500}},i={body:t,response:o},a.next=9;break;case 6:return a.next=8,Wu(e,n);case 8:i=a.sent;case 9:if(!i.error){a.next=12;break}return i.failed=!0,a.abrupt("return",i);case 12:return a.abrupt("return",r.generateDoc(i));case 13:case"end":return a.stop()}},a,r)}))()},generateDoc:function(e){var t=e.body,n=e.response,r=n.headers["content-type"];if(!r.includes("html")&&!r.includes("text"))throw new Error("Content does not appear to be text.");var a=this.encodeDoc({content:t,contentType:r});if(0===a.root().children().length)throw new Error("No children, likely a bad parse.");return a=X(a),a=$e(a),a=Xe(a)},encodeDoc:function(e){var t=e.content,n=e.contentType,r=j(n),a=Vs.decode(t,r),i=Us.load(a),o=i("meta[http-equiv=content-type]").attr("content"),s=j(o);return s!==r&&(a=Vs.decode(t,s),i=Us.load(a)),i}},Jf=ir,Zf=Sn,Qf=zn,ed=function(e,t){var n=(Zf.Object||{})[e]||Object[e],r={};r[e]=t(n),Jf(Jf.S+Jf.F*Qf(function(){n(1)}),"Object",r)},td=ea,nd=Vr;ed("keys",function(){return function(e){return nd(td(e))}});var rd=Sn.Object.keys,ad=n(function(e){e.exports={default:rd,__esModule:!0}}),id=t(ad),od=function(e,t){return t.reduce(function(t,n){return t[n]=e,t},{})},sd={domain:"blogspot.com",content:{selectors:[".post-content noscript"],clean:[],transforms:{noscript:"div"}},author:{selectors:[".post-author-name"]},title:{selectors:[".post h2.title"]},date_published:{selectors:["span.publishdate"]}},ud={domain:"nymag.com",content:{selectors:["div.article-content","section.body","article.article"],clean:[".ad",".single-related-story"],transforms:{h1:"h2",noscript:function(e,t){var n=t.browser?t(e.text()):e.children();return 1===n.length&&void 0!==n.get(0)&&"img"===n.get(0).tagName.toLowerCase()?"figure":null}}},title:{selectors:["h1.lede-feature-title","h1.headline-primary","h1"]},author:{selectors:[".by-authors",".lede-feature-author"]},dek:{selectors:[".lede-feature-teaser"]},date_published:{selectors:[["time.article-timestamp[datetime]","datetime"],"time.article-timestamp"]}},cd={domain:"wikipedia.org",content:{selectors:["#mw-content-text"],defaultCleaner:!1,transforms:{".infobox img":function(e){var t=e.parents(".infobox");0===t.children("img").length&&t.prepend(e)},".infobox caption":"figcaption",".infobox":"figure"},clean:[".mw-editsection","figure tr, figure td, figure tbody","#toc",".navbox"]},author:"Wikipedia Contributors",title:{selectors:["h2.title"]},date_published:{selectors:["#footer-info-lastmod"]}},ld={domain:"twitter.com",content:{transforms:{".permalink[role=main]":function(e,t){var n=e.find(".tweet"),r=t('<div id="TWEETS_GO_HERE"></div>');r.append(n),e.replaceWith(r)},s:"span"},selectors:[".permalink[role=main]"],defaultCleaner:!1,clean:[".stream-item-footer","button",".tweet-details-fixer"]},author:{selectors:[".tweet.permalink-tweet .username"]},date_published:{selectors:[[".permalink-tweet ._timestamp[data-time-ms]","data-time-ms"]]}},fd={domain:"www.nytimes.com",title:{selectors:[".g-headline","h1.headline"]},author:{selectors:[['meta[name="author"]',"value"],".g-byline",".byline"]},content:{selectors:["div.g-blocks","article#story"],transforms:{"img.g-lazy":function(e){var t=e.attr("src"),n=640;t=t.replace("{{size}}",n),e.attr("src",t)}},clean:[".ad","header#story-header",".story-body-1 .lede.video",".visually-hidden","#newsletter-promo",".promo",".comments-button",".hidden",".comments",".supplemental",".nocontent",".story-footer-links"]},date_published:{selectors:[['meta[name="article:published"]',"value"]]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},dek:null,next_page_url:null,excerpt:null},dd={domain:"www.theatlantic.com",title:{selectors:["h1.hed"]},author:{selectors:["article#article .article-cover-extra .metadata .byline a"]},content:{selectors:[[".article-cover figure.lead-img",".article-body"],".article-body"],transforms:[],clean:[".partner-box",".callout"]},date_published:{selectors:[['time[itemProp="datePublished"]',"datetime"]]},lead_image_url:null,next_page_url:null,excerpt:null},hd={domain:"www.newyorker.com",title:{selectors:["h1.title"]},author:{selectors:[".contributors"]},content:{selectors:["div#articleBody","div.articleBody"],transforms:[],clean:[]},date_published:{selectors:[['meta[name="article:published_time"]',"value"],['time[itemProp="datePublished"]',"content"]],timezone:"America/New_York"},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},dek:{selectors:[".dek","h2.dek"]},next_page_url:null,excerpt:null},pd={domain:"www.wired.com",title:{selectors:["h1.post-title"]},author:{selectors:['a[rel="author"]']},content:{selectors:["article.content"],transforms:[],clean:[".visually-hidden","figcaption img.photo"]},date_published:{selectors:[['meta[itemprop="datePublished"]',"value"]]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},dek:{selectors:[]},next_page_url:null,excerpt:null},md={domain:"www.msn.com",title:{selectors:["h1"]},author:{selectors:["span.authorname-txt"]},content:{selectors:["div.richtext"],transforms:[],clean:["span.caption"]},date_published:{selectors:["span.time"]},lead_image_url:{selectors:[]},dek:{selectors:[]},next_page_url:null,excerpt:null},gd={domain:"www.yahoo.com",title:{selectors:["header.canvas-header"]},author:{selectors:["span.provider-name"]},content:{selectors:[".content-canvas"],transforms:[],clean:[".figure-caption"]},date_published:{selectors:[["time.date[datetime]","datetime"]]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},dek:{selectors:[]},next_page_url:null,excerpt:null},vd={domain:"www.buzzfeed.com",title:{selectors:['h1[id="post-title"]']},author:{selectors:['a[data-action="user/username"]',"byline__author"]},content:{selectors:[[".longform_custom_header_media","#buzz_sub_buzz"],"#buzz_sub_buzz"],defaultCleaner:!1,transforms:{h2:"b","div.longform_custom_header_media":function(e){return e.has("img")&&e.has(".longform_header_image_source")?"figure":null},"figure.longform_custom_header_media .longform_header_image_source":"figcaption"},clean:[".instapaper_ignore",".suplist_list_hide .buzz_superlist_item .buzz_superlist_number_inline",".share-box",".print"]},date_published:{selectors:[".buzz-datetime"]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},dek:{selectors:[]},next_page_url:null,excerpt:null},yd={domain:"fandom.wikia.com",title:{selectors:["h1.entry-title"]},author:{selectors:[".author vcard",".fn"]},content:{selectors:[".grid-content",".entry-content"],transforms:[],clean:[]},date_published:{selectors:[['meta[name="article:published_time"]',"value"]]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},dek:{selectors:[]},next_page_url:null,excerpt:null},bd={domain:"www.littlethings.com",title:{selectors:["h1.post-title"]},author:{selectors:[['meta[name="author"]',"value"]]},content:{selectors:[".mainContentIntro",".content-wrapper"],transforms:[],clean:[]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},next_page_url:null,excerpt:null},_d={domain:"www.politico.com",title:{selectors:[['meta[name="og:title"]',"value"]]},author:{selectors:[".story-main-content .byline .vcard"]},content:{selectors:[".story-main-content",".content-group",".story-core",".story-text"],transforms:[],clean:["figcaption"]},date_published:{selectors:[[".story-main-content .timestamp time[datetime]","datetime"]]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},dek:{selectors:[]},next_page_url:null,excerpt:null},wd={domain:"deadspin.com",supportedDomains:["jezebel.com","lifehacker.com","kotaku.com","gizmodo.com","jalopnik.com","kinja.com"],title:{selectors:["h1.headline"]},author:{selectors:[".author"]},content:{selectors:[".post-content",".entry-content"],transforms:{'iframe.lazyload[data-recommend-id^="youtube://"]':function(e){var t=e.attr("id").split("youtube-")[1];e.attr("src","https://www.youtube.com/embed/"+t)}},clean:[".magnifier",".lightbox"]},date_published:{selectors:[["time.updated[datetime]","datetime"]]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},dek:{selectors:[]},next_page_url:{selectors:[]},excerpt:{selectors:[]}},Ad={domain:"www.broadwayworld.com",title:{selectors:["h1.article-title"]},author:{selectors:["span[itemprop=author]"]},content:{selectors:["div[itemprop=articlebody]"],transforms:{},clean:[]},date_published:{selectors:[["meta[itemprop=datePublished]","value"]]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},dek:{selectors:[]},next_page_url:{selectors:[]},excerpt:{selectors:[]}},xd={domain:"www.apartmenttherapy.com",title:{selectors:["h1.headline"]},author:{selectors:[".PostByline__name"]},content:{selectors:["div.post__content"],transforms:{'div[data-render-react-id="images/LazyPicture"]':function(e,t){var n=JSON.parse(e.attr("data-props")),r=n.sources[0].src,a=t("<img />").attr("src",r);e.replaceWith(a)}},clean:[]},date_published:{selectors:[[".PostByline__timestamp[datetime]","datetime"]]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},dek:{selectors:[]},next_page_url:{selectors:[]},excerpt:{selectors:[]}},Md={domain:"medium.com",supportedDomains:["trackchanges.postlight.com"],title:{selectors:["h1"]},author:{selectors:[['meta[name="author"]',"value"]]},content:{selectors:[[".section-content"],".section-content","article > div > section"],transforms:{iframe:function(e){var t=/https:\/\/i.embed.ly\/.+url=https:\/\/i\.ytimg\.com\/vi\/(\w+)\//,n=decodeURIComponent(e.attr("data-thumbnail"));if(t.test(n)){var r=n.match(t),a=mu(r,2),i=(a[0],a[1]);e.attr("src","https://www.youtube.com/embed/"+i);var o=e.parents("figure"),s=o.find("figcaption");o.empty().append([e,s])}},figure:function(e){if(!(e.find("iframe").length>0)){var t=e.find("img").slice(-1)[0],n=e.find("figcaption");e.empty().append([t,n])}}},clean:[]},date_published:{selectors:[["time[datetime]","datetime"]]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},dek:{selectors:[]},next_page_url:{selectors:[]},excerpt:{selectors:[]}},kd={domain:"www.tmz.com",title:{selectors:[".post-title-breadcrumb","h1",".headline"]},author:"TMZ STAFF",date_published:{selectors:[".article-posted-date"],timezone:"America/Los_Angeles"},dek:{selectors:[]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[".article-content",".all-post-body"],transforms:{},clean:[".lightbox-link"]}},Td={domain:"www.washingtonpost.com",title:{selectors:["h1","#topper-headline-wrapper"]},author:{selectors:[".pb-byline"]},date_published:{selectors:[['.pb-timestamp[itemprop="datePublished"]',"content"]]},dek:{selectors:[]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[".article-body"],transforms:{"div.inline-content":function(e){return e.has("img,iframe,video").length>0?"figure":(e.remove(),null)},".pb-caption":"figcaption"},clean:[".interstitial-link",".newsletter-inline-unit"]}},Sd={domain:"www.huffingtonpost.com",title:{selectors:["h1.headline__title"]},author:{selectors:["span.author-card__details__name"]},date_published:{selectors:[['meta[name="article:modified_time"]',"value"],['meta[name="article:published_time"]',"value"]]},dek:{selectors:["h2.headline__subtitle"]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:["div.entry__body"],defaultCleaner:!1,transforms:{},clean:[".pull-quote",".tag-cloud",".embed-asset",".below-entry",".entry-corrections","#suggested-story"]}},Ed={domain:"newrepublic.com",title:{selectors:["h1.article-headline",".minutes-primary h1.minute-title"]},author:{selectors:["div.author-list",".minutes-primary h3.minute-byline"]},date_published:{selectors:[['meta[name="article:published_time"]',"value"]],timezone:"America/New_York"},dek:{selectors:["h2.article-subhead"]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[[".article-cover","div.content-body"],[".minute-image",".minutes-primary div.content-body"]],transforms:{},clean:["aside"]}},Cd={domain:"money.cnn.com",title:{selectors:[".article-title"]},author:{selectors:[".byline a"]},date_published:{selectors:[['meta[name="date"]',"value"]],timezone:"GMT"},dek:{selectors:["#storytext h2"]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:["#storytext"],transforms:{},clean:[".inStoryHeading"]}},Od={domain:"www.theverge.com",supportedDomains:["www.polygon.com"],title:{selectors:["h1"]},author:{selectors:[['meta[name="author"]',"value"]]},date_published:{selectors:[['meta[name="article:published_time"]',"value"]]},dek:{selectors:["h2.p-dek"]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[[".c-entry-hero .e-image",".c-entry-intro",".c-entry-content"],[".e-image--hero",".c-entry-content"],".l-wrapper .l-feature","div.c-entry-content"],transforms:{noscript:function(e){var t=e.children();return 1===t.length&&"img"===t.get(0).tagName?"span":null}},clean:[".aside","img.c-dynamic-image"]}},Dd={domain:"www.cnn.com",title:{selectors:["h1.pg-headline","h1"]},author:{selectors:[".metadata__byline__author"]},date_published:{selectors:[['meta[name="pubdate"]',"value"]]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[[".media__video--thumbnail",".zn-body-text"],".zn-body-text",'div[itemprop="articleBody"]'],transforms:{".zn-body__paragraph, .el__leafmedia--sourced-paragraph":function(e){var t=e.html();return t?"p":null},".zn-body__paragraph":function(e){e.has("a")&&e.text().trim()===e.find("a").text().trim()&&e.remove()},".media__video--thumbnail":"figure"},clean:[]}},jd={domain:"www.aol.com",title:{selectors:["h1.p-article__title"]},author:{selectors:[['meta[name="author"]',"value"]]},date_published:{selectors:[".p-article__byline__date"],timezone:"America/New_York"},dek:{selectors:[]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[".article-content"],transforms:{},clean:[]}},Pd={domain:"www.youtube.com",title:{selectors:[".watch-title","h1.watch-title-container"]},author:{selectors:[".yt-user-info"]},date_published:{selectors:[['meta[itemProp="datePublished"]',"value"]],timezone:"GMT"},dek:{selectors:[]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{defaultCleaner:!1,selectors:[["#player-api","#eow-description"]],transforms:{"#player-api":function(e,t){var n=t('meta[itemProp="videoId"]').attr("value");e.html('\n <iframe src="https://www.youtube.com/embed/'+n+'" frameborder="0" allowfullscreen></iframe>')}},clean:[]}},zd={domain:"www.theguardian.com",title:{selectors:[".content__headline"]},author:{selectors:["p.byline"]},date_published:{selectors:[['meta[name="article:published_time"]',"value"]]},dek:{selectors:[".content__standfirst"]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[".content__article-body"],transforms:{},clean:[".hide-on-mobile",".inline-icon"]}},Nd={domain:"www.sbnation.com",title:{selectors:["h1.c-page-title"]},author:{selectors:[['meta[name="author"]',"value"]]},date_published:{selectors:[['meta[name="article:published_time"]',"value"]]},dek:{selectors:["h2.c-entry-summary.p-dek"]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:["div.c-entry-content"],transforms:{},clean:[]}},Wd={domain:"www.bloomberg.com",title:{selectors:[".lede-headline","h1.article-title","h1.lede-text-only__hed"]},author:{selectors:[['meta[name="parsely-author"]',"value"],".byline-details__link",".bydek",".author"]},date_published:{selectors:[["time.published-at","datetime"],["time[datetime]","datetime"],['meta[name="date"]',"value"],['meta[name="parsely-pub-date"]',"value"]]},dek:{selectors:[]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[".article-body__content",["section.copy-block"],".body-copy"],transforms:{},clean:[".inline-newsletter",".page-ad"]}},Ld={domain:"www.bustle.com",title:{selectors:["h1.post-page__title"]},author:{selectors:["div.content-meta__author"]},date_published:{selectors:[["time.content-meta__published-date[datetime]","datetime"]]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[".post-page__body"],transforms:{},clean:[]}},Rd={domain:"www.npr.org",title:{selectors:["h1",".storytitle"]},author:{selectors:["p.byline__name.byline__name--block"]},date_published:{selectors:[[".dateblock time[datetime]","datetime"],['meta[name="date"]',"value"]]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"],['meta[name="twitter:image:src"]',"value"]]},content:{selectors:[".storytext"],transforms:{".bucketwrap.image":"figure",".bucketwrap.image .credit-caption":"figcaption"},clean:["div.enlarge_measure"]}},qd={domain:"www.recode.net",title:{selectors:["h1.c-page-title"]},author:{selectors:[['meta[name="author"]',"value"]]},date_published:{selectors:[['meta[name="article:published_time"]',"value"]]},dek:{selectors:["h2.c-entry-summary.p-dek"]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[["figure.e-image--hero",".c-entry-content"],".c-entry-content"],transforms:{},clean:[]}},Yd={domain:"qz.com",title:{selectors:["header.item-header.content-width-responsive"]},author:{selectors:[['meta[name="author"]',"value"]]},date_published:{selectors:[".timestamp"]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[["figure.featured-image",".item-body"],".item-body"],transforms:{},clean:[".article-aside",".progressive-image-thumbnail"]}},Bd={domain:"www.dmagazine.com",title:{selectors:["h1.story__title"]},author:{selectors:[".story__info .story__info__item:first-child"]},date_published:{selectors:[".story__info"],timezone:"America/Chicago"},dek:{selectors:[".story__subhead"]},lead_image_url:{selectors:[["article figure a:first-child","href"]]},content:{selectors:[".story__content"],transforms:{},clean:[]}},Hd={domain:"www.reuters.com",title:{selectors:["h1.article-headline"]},author:{selectors:[".author"]},date_published:{selectors:[['meta[name="og:article:published_time"]',"value"]]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:["#article-text"],transforms:{".article-subtitle":"h4"},clean:["#article-byline .author"]}},Fd={domain:"mashable.com",title:{selectors:["h1.title"]},author:{selectors:["span.author_name a"]},date_published:{selectors:[['meta[name="og:article:published_time"]',"value"]]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:["section.article-content.blueprint"],transforms:{".image-credit":"figcaption"},clean:[]}},Id={domain:"www.chicagotribune.com",title:{selectors:["h1.trb_ar_hl_t"]},author:{selectors:["span.trb_ar_by_nm_au"]},date_published:{selectors:[['meta[itemprop="datePublished"]',"value"]]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:["div.trb_ar_page"],transforms:{},clean:[]}},Ud={domain:"www.vox.com",title:{selectors:["h1.c-page-title"]},author:{selectors:[['meta[name="author"]',"value"]]},date_published:{selectors:[['meta[name="article:published_time"]',"value"]]},dek:{selectors:[".p-dek"]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[["figure.e-image--hero",".c-entry-content"],".c-entry-content"],transforms:{"figure .e-image__image noscript":function(e){var t=e.html();e.parents(".e-image__image").find(".c-dynamic-image").replaceWith(t)},"figure .e-image__meta":"figcaption"},clean:[]}},Gd={domain:"news.nationalgeographic.com",title:{selectors:["h1","h1.main-title"]},author:{selectors:[".byline-component__contributors b span"]},date_published:{selectors:[['meta[name="article:published_time"]',"value"]],format:"ddd MMM DD HH:mm:ss zz YYYY",timezone:"EST"},dek:{selectors:[".article__deck"]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[[".parsys.content",".__image-lead__"],".content"],transforms:{".parsys.content":function(e,t){var n=e.find(".image.parbase.section").find(".picturefill").first().data("platform-src");n&&e.prepend(t('<img class="__image-lead__" src="'+n+'"/>'))}},clean:[".pull-quote.pull-quote--large"]}},$d={domain:"www.nationalgeographic.com",title:{selectors:["h1","h1.main-title"]},author:{selectors:[".byline-component__contributors b span"]},date_published:{selectors:[['meta[name="article:published_time"]',"value"]]},dek:{selectors:[".article__deck"]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[[".parsys.content",".__image-lead__"],".content"],transforms:{".parsys.content":function(e,t){var n=e.children().first();if(n.hasClass("imageGroup")){var r=n.find(".media--medium__container").children().first(),a=r.data("platform-image1-path"),i=r.data("platform-image2-path");i&&a&&e.prepend(t('<div class="__image-lead__">\n <img src="'+a+'"/>\n <img src="'+i+'"/>\n </div>'))}else{var o=e.find(".image.parbase.section").find(".picturefill").first().data("platform-src");o&&e.prepend(t('<img class="__image-lead__" src="'+o+'"/>'))}}},clean:[".pull-quote.pull-quote--small"]}},Vd={domain:"www.latimes.com",title:{selectors:[".trb_ar_hl"]},author:{selectors:[['meta[name="author"]',"value"]]},date_published:{selectors:[['meta[itemprop="datePublished"]',"value"]]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[".trb_ar_main"],transforms:{".trb_ar_la":function(e){var t=e.find("figure");e.replaceWith(t)}},clean:[".trb_ar_by",".trb_ar_cr"]}},Kd={domain:"pagesix.com",supportedDomains:["nypost.com"],title:{selectors:["h1 a"]},author:{selectors:[".byline"]},date_published:{selectors:[['meta[name="article:published_time"]',"value"]]},dek:{selectors:[['meta[name="description"]',"value"]]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[["#featured-image-wrapper",".entry-content"],".entry-content"],transforms:{"#featured-image-wrapper":"figure",".wp-caption-text":"figcaption"},clean:[".modal-trigger"]}},Xd={domain:"thefederalistpapers.org",title:{selectors:["h1.entry-title"]},author:{selectors:["main span.entry-author-name"]},date_published:{selectors:[['meta[name="article:published_time"]',"value"]]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[".entry-content"],transforms:{},clean:[["p[style]"]]}},Jd={domain:"www.cbssports.com",title:{selectors:[".article-headline"]},author:{selectors:[".author-name"]},date_published:{selectors:[[".date-original-reading-time time","datetime"]],timezone:"UTC"},dek:{selectors:[".article-subline"]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[".article"],transforms:{},clean:[]}},Zd={domain:"www.msnbc.com",title:{selectors:["h1","h1.is-title-pane"]},author:{selectors:[".author"]},date_published:{selectors:[['meta[name="DC.date.issued"]',"value"]]},dek:{selectors:[['meta[name="description"]',"value"]]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[".pane-node-body"],transforms:{".pane-node-body":function(e,t){var n=mu(Zd.lead_image_url.selectors[0],2),r=n[0],a=n[1],i=t(r).attr(a);i&&e.prepend('<img src="'+i+'" />')}},clean:[]}},Qd={domain:"www.thepoliticalinsider.com",title:{selectors:[['meta[name="sailthru.title"]',"value"]]},author:{selectors:[['meta[name="sailthru.author"]',"value"]]},date_published:{selectors:[['meta[name="sailthru.date"]',"value"]],timezone:"America/New_York"},dek:{selectors:[]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:["div#article-body"],transforms:{},clean:[]}},eh={domain:"www.mentalfloss.com",title:{selectors:["h1.title",".title-group",".inner"]},author:{selectors:[".field-name-field-enhanced-authors"]},date_published:{selectors:[".date-display-single"],timezone:"America/New_York"},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:["div.field.field-name-body"],transforms:{},clean:[]}},th={domain:"abcnews.go.com",title:{selectors:[".article-header h1"]},author:{selectors:[".authors"],clean:[".author-overlay",".by-text"]},date_published:{selectors:[".timestamp"],timezone:"America/New_York"},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[".article-copy"],transforms:{},clean:[]}},nh={domain:"www.nydailynews.com",title:{selectors:["h1#ra-headline"]},author:{selectors:[['meta[name="parsely-author"]',"value"]]},date_published:{selectors:[['meta[name="sailthru.date"]',"value"]]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:["article#ra-body"],transforms:{},clean:["dl#ra-tags",".ra-related","a.ra-editor","dl#ra-share-bottom"]}},rh={domain:"www.cnbc.com",title:{selectors:["h1.title"]},author:{selectors:[['meta[name="author"]',"value"]]},date_published:{selectors:[['meta[name="article:published_time"]',"value"]]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:["div#article_body.content","div.story"],transforms:{},clean:[]}},ah={domain:"www.popsugar.com",title:{selectors:["h2.post-title","title-text"]},author:{selectors:[['meta[name="article:author"]',"value"]]},date_published:{selectors:[['meta[name="article:published_time"]',"value"]]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:["#content"],transforms:{},clean:[".share-copy-title",".post-tags",".reactions"]}},ih={domain:"observer.com",title:{selectors:["h1.entry-title"]},author:{selectors:[".author",".vcard"]},date_published:{selectors:[['meta[name="article:published_time"]',"value"]]},dek:{selectors:["h2.dek"]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:["div.entry-content"],transforms:{},clean:[]}},oh={domain:"people.com",title:{selectors:[['meta[name="og:title"]',"value"]]},author:{selectors:["a.author.url.fn"]},date_published:{selectors:[['meta[name="article:published_time"]',"value"]]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:["div.article-body__inner"],transforms:{},clean:[]}},sh={domain:"www.usmagazine.com",title:{selectors:["header h1"]},author:{selectors:["a.article-byline.tracked-offpage"]},date_published:{timezone:"America/New_York",selectors:["time.article-published-date"]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:["div.article-body-inner"],transforms:{},clean:[".module-related"]}},uh={domain:"www.rollingstone.com",title:{selectors:["h1.content-title"]},author:{selectors:["a.content-author.tracked-offpage"]},date_published:{selectors:["time.content-published-date"],timezone:"America/New_York"},dek:{selectors:[".content-description"]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[[".lead-container",".article-content"],".article-content"],transforms:{},clean:[".module-related"]}},ch={domain:"247sports.com",title:{selectors:["title","article header h1"]},author:{selectors:[".author"]},date_published:{selectors:[["time[data-published]","data-published"]]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:["section.body.article"],transforms:{},clean:[]}},lh={domain:"uproxx.com",title:{selectors:["div.post-top h1"]},author:{selectors:[".post-top .authorname"]},date_published:{selectors:[['meta[name="article:published_time"]',"value"]]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[".post-body"],transforms:{"div.image":"figure","div.image .wp-media-credit":"figcaption"},clean:[]}},fh={domain:"www.eonline.com",title:{selectors:["h1.article__title"]},author:{selectors:[".entry-meta__author a"]},date_published:{selectors:[['meta[itemprop="datePublished"]',"value"]]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[[".post-content section, .post-content div.post-content__image"]],transforms:{"div.post-content__image":"figure","div.post-content__image .image__credits":"figcaption"},clean:[]}},dh={domain:"www.miamiherald.com",title:{selectors:["h1.title"]},date_published:{selectors:["p.published-date"],timezone:"America/New_York"},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:["div.dateline-storybody"],transforms:{},clean:[]}},hh={domain:"www.refinery29.com",title:{selectors:["h1.title"]},author:{selectors:[".contributor"]},date_published:{selectors:[['meta[name="sailthru.date"]',"value"]],timezone:"America/New_York"},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[[".full-width-opener",".article-content"],".article-content",".body"],transforms:{"div.loading noscript":function(e){var t=e.html();e.parents(".loading").replaceWith(t)},".section-image":"figure",".section-image .content-caption":"figcaption",".section-text":"p"},clean:[".story-share"]}},ph={domain:"www.macrumors.com",title:{selectors:["h1","h1.title"]},author:{selectors:[".author-url"]},date_published:{selectors:[".article .byline"],format:"dddd MMMM D, YYYY h:mm A zz",timezone:"America/Los_Angeles"},dek:{selectors:[['meta[name="description"]',"value"]]},lead_image_url:{ -selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[".article"],transforms:{},clean:[]}},mh={domain:"www.androidcentral.com",title:{selectors:["h1","h1.main-title"]},author:{selectors:[".meta-by"]},date_published:{selectors:[['meta[name="article:published_time"]',"value"]]},dek:{selectors:[['meta[name="og:description"]',"value"]]},lead_image_url:{selectors:[[".image-large","src"]]},content:{selectors:[".article-body"],transforms:{},clean:[".intro","blockquote"]}},gh={domain:"www.si.com",title:{selectors:["h1","h1.headline"]},author:{selectors:[['meta[name="author"]',"value"]]},date_published:{selectors:[".timestamp"],timezone:"America/New_York"},dek:{selectors:[".quick-hit ul"]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[["p",".marquee_large_2x",".component.image"]],transforms:{noscript:function(e){var t=e.children();return 1===t.length&&"img"===t.get(0).tagName?"figure":null}},clean:[[".inline-thumb",".primary-message",".description",".instructions"]]}},vh={domain:"www.rawstory.com",title:{selectors:[".blog-title"]},author:{selectors:[".blog-author a:first-of-type"]},date_published:{selectors:[".blog-author a:last-of-type"],timezone:"EST"},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[".blog-content"],transforms:{},clean:[]}},yh={domain:"www.cnet.com",title:{selectors:[['meta[name="og:title"]',"value"]]},author:{selectors:["a.author"]},date_published:{selectors:["time"],timezone:"America/Los_Angeles"},dek:{selectors:[".article-dek"]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[["img.__image-lead__",".article-main-body"],".article-main-body"],transforms:{"figure.image":function(e){var t=e.find("img");t.attr("width","100%"),t.attr("height","100%"),t.addClass("__image-lead__"),e.remove(".imgContainer").prepend(t)}},clean:[]}},bh={domain:"www.cinemablend.com",title:{selectors:[".story_title"]},author:{selectors:[".author"]},date_published:{selectors:[['meta[name="article:published_time"]',"value"]],timezone:"EST"},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:["div#wrap_left_content"],transforms:{},clean:[]}},_h={domain:"www.today.com",title:{selectors:["h1.entry-headline"]},author:{selectors:[['meta[name="author"]',"value"]]},date_published:{selectors:[['meta[name="DC.date.issued"]',"value"]]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[".entry-container"],transforms:{},clean:[".label-comment"]}},wh={domain:"www.howtogeek.com",title:{selectors:["title"]},author:{selectors:["#authorinfobox a"]},date_published:{selectors:["#authorinfobox + div li"],timezone:"GMT"},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[".thecontent"],transforms:{},clean:[]}},Ah={domain:"www.al.com",title:{selectors:[['meta[name="title"]',"value"]]},author:{selectors:[['meta[name="article_author"]',"value"]]},date_published:{selectors:[['meta[name="article_date_original"]',"value"]],timezone:"EST"},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[".entry-content"],transforms:{},clean:[]}},xh={domain:"www.thepennyhoarder.com",title:{selectors:[['meta[name="dcterms.title"]',"value"]]},author:{selectors:[['link[rel="author"]',"title"]]},date_published:{selectors:[['meta[name="article:published_time"]',"value"]]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[[".post-img",".post-text"],".post-text"],transforms:{},clean:[]}},Mh={domain:"www.westernjournalism.com",title:{selectors:["title","h1.entry-title"]},author:{selectors:[['meta[name="author"]',"value"]]},date_published:{selectors:[['meta[name="DC.date.issued"]',"value"]]},dek:{selectors:[".subtitle"]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:["div.article-sharing.top + div"],transforms:{},clean:[".ad-notice-small"]}},kh={domain:"fusion.net",title:{selectors:[".post-title",".single-title",".headline"]},author:{selectors:[".show-for-medium .byline"]},date_published:{selectors:[["time.local-time","datetime"]]},dek:{selectors:[]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[[".post-featured-media",".article-content"],".article-content"],transforms:{".fusion-youtube-oembed":"figure"},clean:[]}},Th={domain:"www.americanow.com",title:{selectors:[".title",['meta[name="title"]',"value"]]},author:{selectors:[".byline"]},date_published:{selectors:[['meta[name="publish_date"]',"value"]]},dek:{selectors:[]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[[".article-content",".image",".body"],".body"],transforms:{},clean:[".article-video-wrapper",".show-for-small-only"]}},Sh={domain:"sciencefly.com",title:{selectors:[".entry-title",".cb-entry-title",".cb-single-title"]},author:{selectors:["div.cb-author","div.cb-author-title"]},date_published:{selectors:[['meta[name="article:published_time"]',"value"]]},dek:{selectors:[]},lead_image_url:{selectors:[["div.theiaPostSlider_slides img","src"]]},content:{selectors:["div.theiaPostSlider_slides"],transforms:{},clean:[]}},Eh={domain:"hellogiggles.com",title:{selectors:[".title"]},author:{selectors:[".author-link"]},date_published:{selectors:[['meta[name="article:published_time"]',"value"]]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[".entry-content"],transforms:{},clean:[]}},Ch={domain:"thoughtcatalog.com",title:{selectors:["h1.title",['meta[name="og:title"]',"value"]]},author:{selectors:["div.col-xs-12.article_header div.writer-container.writer-container-inline.writer-no-avatar h4.writer-name","h1.writer-name"]},date_published:{selectors:[['meta[name="article:published_time"]',"value"]]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[".entry.post"],transforms:{},clean:[".tc_mark"]}},Oh={domain:"www.nj.com",title:{selectors:[['meta[name="title"]',"value"]]},author:{selectors:[['meta[name="article_author"]',"value"]]},date_published:{selectors:[['meta[name="article_date_original"]',"value"]],timezone:"America/New_York"},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[".entry-content"],transforms:{},clean:[]}},Dh={domain:"www.inquisitr.com",title:{selectors:["h1.entry-title.story--header--title"]},author:{selectors:["div.story--header--author"]},date_published:{selectors:[['meta[name="datePublished"]',"value"]]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:["article.story",".entry-content."],transforms:{},clean:[".post-category",".story--header--socials",".story--header--content"]}},jh={domain:"www.nbcnews.com",title:{selectors:["div.article-hed h1"]},author:{selectors:["span.byline_author"]},date_published:{selectors:[[".flag_article-wrapper time.timestamp_article[datetime]","datetime"],".flag_article-wrapper time"],timezone:"America/New_York"},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:["div.article-body"],transforms:{},clean:[]}},Ph={domain:"fortune.com",title:{selectors:["h1"]},author:{selectors:[['meta[name="author"]',"value"]]},date_published:{selectors:[".MblGHNMJ"],timezone:"UTC"},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[["picture","article.row"],"article.row"],transforms:{},clean:[]}},zh={domain:"www.linkedin.com",title:{selectors:[".article-title","h1"]},author:{selectors:[['meta[name="article:author"]',"value"],".entity-name a[rel=author]"]},date_published:{selectors:[['time[itemprop="datePublished"]',"datetime"]],timezone:"America/Los_Angeles"},dek:{selectors:[]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[["header figure",".prose"],".prose"],transforms:{},clean:[".entity-image"]}},Nh={domain:"obamawhitehouse.archives.gov",supportedDomains:["whitehouse.gov"],title:{selectors:["h1",".pane-node-title"]},author:{selectors:[".blog-author-link",".node-person-name-link"]},date_published:{selectors:[['meta[name="article:published_time"]',"value"]]},dek:{selectors:[".field-name-field-forall-summary"]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{defaultCleaner:!1,selectors:["div#content-start",".pane-node-field-forall-body"],transforms:{},clean:[".pane-node-title",".pane-custom.pane-1"]}},Wh={domain:"www.opposingviews.com",title:{selectors:["h1.title"]},author:{selectors:["div.date span span a"]},date_published:{selectors:[['meta[name="publish_date"]',"value"]]},dek:{selectors:[]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[".article-content"],transforms:{},clean:[".show-for-small-only"]}},Lh={domain:"www.prospectmagazine.co.uk",title:{selectors:[".page-title"]},author:{selectors:[".aside_author .title"]},date_published:{selectors:[".post-info"],timezone:"Europe/London"},dek:{selectors:[".page-subtitle"]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:["article .post_content"],transforms:{},clean:[]}},Rh={domain:"forward.com",title:{selectors:[['meta[name="og:title"]',"value"]]},author:{selectors:[".author-name",['meta[name="sailthru.author"]',"value"]]},date_published:{selectors:[['meta[name="date"]',"value"]]},dek:{selectors:[]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[[".post-item-media-wrap",".post-item p"]],transforms:{},clean:[".donate-box",".message",".subtitle"]}},qh={domain:"www.qdaily.com",title:{selectors:["h2","h2.title"]},author:{selectors:[".name"]},date_published:{selectors:[[".date.smart-date","data-origindate"]]},dek:{selectors:[".excerpt"]},lead_image_url:{selectors:[[".article-detail-hd img","src"]]},content:{selectors:[".detail"],transforms:{},clean:[".lazyload",".lazylad",".lazylood"]}},Yh={domain:"gothamist.com",supportedDomains:["chicagoist.com","laist.com","sfist.com","shanghaiist.com","dcist.com"],title:{selectors:["h1",".entry-header h1"]},author:{selectors:[".author"]},date_published:{selectors:["abbr","abbr.published"],timezone:"America/New_York"},dek:{selectors:[null]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[".entry-body"],transforms:{"div.image-none":"figure",".image-none i":"figcaption","div.image-left":"figure",".image-left i":"figcaption","div.image-right":"figure",".image-right i":"figcaption"},clean:[".image-none br",".image-left br",".image-right br",".galleryEase"]}},Bh={domain:"www.fool.com",title:{selectors:["h1"]},author:{selectors:[".author-inline .author-name"]},date_published:{selectors:[['meta[name="date"]',"value"]]},dek:{selectors:["header h2"]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[".article-content"],transforms:{".caption img":function(e){var t=e.attr("src");e.parent().replaceWith('<figure><img src="'+t+'"/></figure>')},".caption":"figcaption"},clean:["#pitch"]}},Hh={domain:"www.slate.com",title:{selectors:[".hed","h1"]},author:{selectors:["a[rel=author]"]},date_published:{selectors:[".pub-date"],timezone:"America/New_York"},dek:{selectors:[".dek"]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[".body"],transforms:{},clean:[".about-the-author",".pullquote",".newsletter-signup-component",".top-comment"]}},Fh={domain:"ici.radio-canada.ca",title:{selectors:["h1"]},author:{selectors:[['meta[name="dc.creator"]',"value"]]},date_published:{selectors:[['meta[name="dc.date.created"]',"value"]],timezone:"America/New_York"},dek:{selectors:[".bunker-component.lead"]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[[".main-multimedia-item",".news-story-content"]],transforms:{},clean:[]}},Ih=Object.freeze({BloggerExtractor:sd,NYMagExtractor:ud,WikipediaExtractor:cd,TwitterExtractor:ld,NYTimesExtractor:fd,TheAtlanticExtractor:dd,NewYorkerExtractor:hd,WiredExtractor:pd,MSNExtractor:md,YahooExtractor:gd,BuzzfeedExtractor:vd,WikiaExtractor:yd,LittleThingsExtractor:bd,PoliticoExtractor:_d,DeadspinExtractor:wd,BroadwayWorldExtractor:Ad,ApartmentTherapyExtractor:xd,MediumExtractor:Md,WwwTmzComExtractor:kd,WwwWashingtonpostComExtractor:Td,WwwHuffingtonpostComExtractor:Sd,NewrepublicComExtractor:Ed,MoneyCnnComExtractor:Cd,WwwThevergeComExtractor:Od,WwwCnnComExtractor:Dd,WwwAolComExtractor:jd,WwwYoutubeComExtractor:Pd,WwwTheguardianComExtractor:zd,WwwSbnationComExtractor:Nd,WwwBloombergComExtractor:Wd,WwwBustleComExtractor:Ld,WwwNprOrgExtractor:Rd,WwwRecodeNetExtractor:qd,QzComExtractor:Yd,WwwDmagazineComExtractor:Bd,WwwReutersComExtractor:Hd,MashableComExtractor:Fd,WwwChicagotribuneComExtractor:Id,WwwVoxComExtractor:Ud,NewsNationalgeographicComExtractor:Gd,WwwNationalgeographicComExtractor:$d,WwwLatimesComExtractor:Vd,PagesixComExtractor:Kd,ThefederalistpapersOrgExtractor:Xd,WwwCbssportsComExtractor:Jd,WwwMsnbcComExtractor:Zd,WwwThepoliticalinsiderComExtractor:Qd,WwwMentalflossComExtractor:eh,AbcnewsGoComExtractor:th,WwwNydailynewsComExtractor:nh,WwwCnbcComExtractor:rh,WwwPopsugarComExtractor:ah,ObserverComExtractor:ih,PeopleComExtractor:oh,WwwUsmagazineComExtractor:sh,WwwRollingstoneComExtractor:uh,twofortysevensportsComExtractor:ch,UproxxComExtractor:lh,WwwEonlineComExtractor:fh,WwwMiamiheraldComExtractor:dh,WwwRefinery29ComExtractor:hh,WwwMacrumorsComExtractor:ph,WwwAndroidcentralComExtractor:mh,WwwSiComExtractor:gh,WwwRawstoryComExtractor:vh,WwwCnetComExtractor:yh,WwwCinemablendComExtractor:bh,WwwTodayComExtractor:_h,WwwHowtogeekComExtractor:wh,WwwAlComExtractor:Ah,WwwThepennyhoarderComExtractor:xh,WwwWesternjournalismComExtractor:Mh,FusionNetExtractor:kh,WwwAmericanowComExtractor:Th,ScienceflyComExtractor:Sh,HellogigglesComExtractor:Eh,ThoughtcatalogComExtractor:Ch,WwwNjComExtractor:Oh,WwwInquisitrComExtractor:Dh,WwwNbcnewsComExtractor:jh,FortuneComExtractor:Ph,WwwLinkedinComExtractor:zh,ObamawhitehouseArchivesGovExtractor:Nh,WwwOpposingviewsComExtractor:Wh,WwwProspectmagazineCoUkExtractor:Lh,ForwardComExtractor:Rh,WwwQdailyComExtractor:qh,GothamistComExtractor:Yh,WwwFoolComExtractor:Bh,WwwSlateComExtractor:Hh,IciRadioCanadaCaExtractor:Fh}),Uh=id(Ih).reduce(function(e,t){var n=Ih[t];return da({},e,Je(n))},{}),Gh=n(function(e,t){(function(){function e(e){if("undefined"==typeof e)throw new Error("TypeError missing argument");if("string"!=typeof e)throw new Error("TypeError getDirection expects strings");if(""===e)return l;if(e.indexOf(i)>-1&&e.indexOf(o)>-1)return c;if(e.indexOf(i)>-1)return s;if(e.indexOf(o)>-1)return u;var t=n(e,u),r=n(e,s);return t&&r?c:r?s:t?u:l}function n(e,t){var n,a,i,o,c=!1,l=!1,d=!1;for(d=e.search(/[0-9]/)>-1,e=e.replace(/[\s\n\0\f\t\v\'\"\-0-9\+\?\!]+/gm,""),n=0;n<e.length;n++){a=e.charAt(n),o=!1;for(i in f)f.hasOwnProperty(i)&&r(a,f[i][0],f[i][1])&&(c=!0,o=!0);o===!1&&(l=!0)}return t===u?c:t===s?l||!c&&d:void 0}function r(e,t,n){var r=e.charCodeAt(0),a=parseInt(t,16),i=parseInt(n,16);return r>a&&r<i}function a(){String.prototype.getDirection=function(){return e(this.valueOf())}}var i="‎",o="‏",s="ltr",u="rtl",c="bidi",l="",f={Hebrew:["0590","05FF"],Arabic:["0600","06FF"],NKo:["07C0","07FF"],Syriac:["0700","074F"],Thaana:["0780","07BF"],Tifinagh:["2D30","2D7F"]};"undefined"!=typeof t?(t.getDirection=e,t.patch=a):this.stringDirection={getDirection:e,patch:a}}).call(this)}),$h=/^\s*(posted |written )?by\s*:?\s*(.*)/i,Vh=new RegExp("http(s)?://","i"),Kh=/^\d{13}$/i,Xh=/^\d{10}$/i,Jh=/^\s*published\s*:?\s*(.*)/i,Zh=/(.*\d)(am|pm)(.*)/i,Qh=/\.m\./i,ep=["jan","feb","mar","apr","may","jun","jul","aug","sep","oct","nov","dec"],tp=ep.join("|"),np="[0-9]{1,2}:[0-9]{2,2}( ?[ap].?m.?)?",rp="[0-9]{1,2}[/-][0-9]{1,2}[/-][0-9]{2,4}",ap="-[0-9]{3,4}$",ip=new RegExp("("+np+")|("+rp+")|("+ap+")|([0-9]{1,4})|("+tp+")","ig"),op=/-\d{3,4}$/,sp=/(: | - | \| )/g,up=new RegExp(".com$|.net$|.org$|.co.uk$","g"),cp=n(function(e){!function(e){function t(e){if(e&&!/[^a-z0-9\:\/\?\#\[\]\@\!\$\&\'\(\)\*\+\,\;\=\.\-\_\~\%]/i.test(e)&&!/%[^0-9a-f]/i.test(e)&&!/%[0-9a-f](:?[^0-9a-f]|$)/i.test(e)){var t=[],n="",r="",a="",o="",s="",u="";if(t=i(e),n=t[1],r=t[2],a=t[3],o=t[4],s=t[5],n&&n.length&&a.length>=0){if(r&&r.length){if(0!==a.length&&!/^\//.test(a))return}else if(/^\/\//.test(a))return;if(/^[a-z][a-z0-9\+\-\.]*$/.test(n.toLowerCase()))return u+=n+":",r&&r.length&&(u+="//"+r),u+=a,o&&o.length&&(u+="?"+o),s&&s.length&&(u+="#"+s),u}}}function n(e,n){if(t(e)){var r=[],a="",o="",s="",u="",c="",l="",f="";if(r=i(e),a=r[1],o=r[2],s=r[3],c=r[4],l=r[5],a){if(n){if("https"!=a.toLowerCase())return}else if("http"!=a.toLowerCase())return;if(o)return/:(\d+)$/.test(o)&&(u=o.match(/:(\d+)$/)[0],o=o.replace(/:\d+$/,"")),f+=a+":",f+="//"+o,u&&(f+=u),f+=s,c&&c.length&&(f+="?"+c),l&&l.length&&(f+="#"+l),f}}}function r(e){return n(e,!0)}function a(e){return n(e)||r(e)}e.exports.is_uri=t,e.exports.is_http_uri=n,e.exports.is_https_uri=r,e.exports.is_web_uri=a,e.exports.isUri=t,e.exports.isHttpUri=n,e.exports.isHttpsUri=r,e.exports.isWebUri=a;var i=function(e){var t=e.match(/(?:([^:\/?#]+):)?(?:\/\/([^\/?#]*))?([^?#]*)(?:\?([^#]*))?(?:#(.*))?/);return t}}(e)}),lp=n(function(t,n){!function(e,r){"object"==typeof n&&"undefined"!=typeof t?t.exports=r():"function"==typeof define&&define.amd?define(r):e.moment=r()}(this,function(){function n(){return vr.apply(null,arguments)}function r(e){vr=e}function a(e){return e instanceof Array||"[object Array]"===Object.prototype.toString.call(e)}function i(e){return null!=e&&"[object Object]"===Object.prototype.toString.call(e)}function o(e){var t;for(t in e)return!1;return!0}function s(e){return"number"==typeof value||"[object Number]"===Object.prototype.toString.call(e)}function u(e){return e instanceof Date||"[object Date]"===Object.prototype.toString.call(e)}function c(e,t){var n,r=[];for(n=0;n<e.length;++n)r.push(t(e[n],n));return r}function l(e,t){return Object.prototype.hasOwnProperty.call(e,t)}function f(e,t){for(var n in t)l(t,n)&&(e[n]=t[n]);return l(t,"toString")&&(e.toString=t.toString),l(t,"valueOf")&&(e.valueOf=t.valueOf),e}function d(e,t,n,r){return bt(e,t,n,r,!0).utc()}function h(){return{empty:!1,unusedTokens:[],unusedInput:[],overflow:-2,charsLeftOver:0,nullInput:!1,invalidMonth:null,invalidFormat:!1,userInvalidated:!1,iso:!1,parsedDateParts:[],meridiem:null}}function p(e){return null==e._pf&&(e._pf=h()),e._pf}function m(e){if(null==e._isValid){var t=p(e),n=br.call(t.parsedDateParts,function(e){return null!=e}),r=!isNaN(e._d.getTime())&&t.overflow<0&&!t.empty&&!t.invalidMonth&&!t.invalidWeekday&&!t.nullInput&&!t.invalidFormat&&!t.userInvalidated&&(!t.meridiem||t.meridiem&&n);if(e._strict&&(r=r&&0===t.charsLeftOver&&0===t.unusedTokens.length&&void 0===t.bigHour),null!=Object.isFrozen&&Object.isFrozen(e))return r;e._isValid=r}return e._isValid}function g(e){var t=d(NaN);return null!=e?f(p(t),e):p(t).userInvalidated=!0,t}function v(e){return void 0===e}function y(e,t){var n,r,a;if(v(t._isAMomentObject)||(e._isAMomentObject=t._isAMomentObject),v(t._i)||(e._i=t._i),v(t._f)||(e._f=t._f),v(t._l)||(e._l=t._l),v(t._strict)||(e._strict=t._strict),v(t._tzm)||(e._tzm=t._tzm),v(t._isUTC)||(e._isUTC=t._isUTC),v(t._offset)||(e._offset=t._offset),v(t._pf)||(e._pf=p(t)),v(t._locale)||(e._locale=t._locale),_r.length>0)for(n in _r)r=_r[n],a=t[r],v(a)||(e[r]=a);return e}function b(e){y(this,e),this._d=new Date(null!=e._d?e._d.getTime():NaN),wr===!1&&(wr=!0,n.updateOffset(this),wr=!1)}function _(e){return e instanceof b||null!=e&&null!=e._isAMomentObject}function w(e){return e<0?Math.ceil(e)||0:Math.floor(e)}function A(e){var t=+e,n=0;return 0!==t&&isFinite(t)&&(n=w(t)),n}function x(e,t,n){var r,a=Math.min(e.length,t.length),i=Math.abs(e.length-t.length),o=0;for(r=0;r<a;r++)(n&&e[r]!==t[r]||!n&&A(e[r])!==A(t[r]))&&o++;return o+i}function M(e){n.suppressDeprecationWarnings===!1&&"undefined"!=typeof console&&console.warn&&console.warn("Deprecation warning: "+e)}function k(e,t){var r=!0;return f(function(){if(null!=n.deprecationHandler&&n.deprecationHandler(null,e),r){for(var a,i=[],o=0;o<arguments.length;o++){if(a="","object"==typeof arguments[o]){a+="\n["+o+"] ";for(var s in arguments[0])a+=s+": "+arguments[0][s]+", ";a=a.slice(0,-2)}else a=arguments[o];i.push(a)}M(e+"\nArguments: "+Array.prototype.slice.call(i).join("")+"\n"+(new Error).stack),r=!1}return t.apply(this,arguments)},t)}function T(e,t){null!=n.deprecationHandler&&n.deprecationHandler(e,t),Ar[e]||(M(t),Ar[e]=!0)}function S(e){return e instanceof Function||"[object Function]"===Object.prototype.toString.call(e)}function E(e){var t,n;for(n in e)t=e[n],S(t)?this[n]=t:this["_"+n]=t;this._config=e,this._ordinalParseLenient=new RegExp(this._ordinalParse.source+"|"+/\d{1,2}/.source)}function C(e,t){var n,r=f({},e);for(n in t)l(t,n)&&(i(e[n])&&i(t[n])?(r[n]={},f(r[n],e[n]),f(r[n],t[n])):null!=t[n]?r[n]=t[n]:delete r[n]);for(n in e)l(e,n)&&!l(t,n)&&i(e[n])&&(r[n]=f({},r[n]));return r}function O(e){null!=e&&this.set(e)}function D(e,t,n){var r=this._calendar[e]||this._calendar.sameElse;return S(r)?r.call(t,n):r}function j(e){var t=this._longDateFormat[e],n=this._longDateFormat[e.toUpperCase()];return t||!n?t:(this._longDateFormat[e]=n.replace(/MMMM|MM|DD|dddd/g,function(e){return e.slice(1)}),this._longDateFormat[e])}function P(){return this._invalidDate}function z(e){return this._ordinal.replace("%d",e)}function N(e,t,n,r){var a=this._relativeTime[n];return S(a)?a(e,t,n,r):a.replace(/%d/i,e)}function W(e,t){var n=this._relativeTime[e>0?"future":"past"];return S(n)?n(t):n.replace(/%s/i,t)}function L(e,t){var n=e.toLowerCase();jr[n]=jr[n+"s"]=jr[t]=e}function R(e){return"string"==typeof e?jr[e]||jr[e.toLowerCase()]:void 0}function q(e){var t,n,r={};for(n in e)l(e,n)&&(t=R(n),t&&(r[t]=e[n]));return r}function Y(e,t){Pr[e]=t}function B(e){var t=[];for(var n in e)t.push({unit:n,priority:Pr[n]});return t.sort(function(e,t){return e.priority-t.priority}),t}function H(e,t){return function(r){return null!=r?(I(this,e,r),n.updateOffset(this,t),this):F(this,e)}}function F(e,t){return e.isValid()?e._d["get"+(e._isUTC?"UTC":"")+t]():NaN}function I(e,t,n){e.isValid()&&e._d["set"+(e._isUTC?"UTC":"")+t](n)}function U(e){return e=R(e),S(this[e])?this[e]():this}function G(e,t){if("object"==typeof e){e=q(e);for(var n=B(e),r=0;r<n.length;r++)this[n[r].unit](e[n[r].unit])}else if(e=R(e),S(this[e]))return this[e](t);return this}function $(e,t,n){var r=""+Math.abs(e),a=t-r.length,i=e>=0;return(i?n?"+":"":"-")+Math.pow(10,Math.max(0,a)).toString().substr(1)+r}function V(e,t,n,r){var a=r;"string"==typeof r&&(a=function(){return this[r]()}),e&&(Lr[e]=a),t&&(Lr[t[0]]=function(){return $(a.apply(this,arguments),t[1],t[2])}),n&&(Lr[n]=function(){return this.localeData().ordinal(a.apply(this,arguments),e)})}function K(e){return e.match(/\[[\s\S]/)?e.replace(/^\[|\]$/g,""):e.replace(/\\/g,"")}function X(e){var t,n,r=e.match(zr);for(t=0,n=r.length;t<n;t++)Lr[r[t]]?r[t]=Lr[r[t]]:r[t]=K(r[t]);return function(t){var a,i="";for(a=0;a<n;a++)i+=r[a]instanceof Function?r[a].call(t,e):r[a];return i}}function J(e,t){return e.isValid()?(t=Z(t,e.localeData()),Wr[t]=Wr[t]||X(t),Wr[t](e)):e.localeData().invalidDate()}function Z(e,t){function n(e){return t.longDateFormat(e)||e}var r=5;for(Nr.lastIndex=0;r>=0&&Nr.test(e);)e=e.replace(Nr,n),Nr.lastIndex=0,r-=1;return e}function Q(e,t,n){ta[e]=S(t)?t:function(e,r){return e&&n?n:t}}function ee(e,t){return l(ta,e)?ta[e](t._strict,t._locale):new RegExp(te(e))}function te(e){return ne(e.replace("\\","").replace(/\\(\[)|\\(\])|\[([^\]\[]*)\]|\\(.)/g,function(e,t,n,r,a){return t||n||r||a}))}function ne(e){return e.replace(/[-\/\\^$*+?.()|[\]{}]/g,"\\$&")}function re(e,t){var n,r=t;for("string"==typeof e&&(e=[e]),s(t)&&(r=function(e,n){n[t]=A(e)}),n=0;n<e.length;n++)na[e[n]]=r}function ae(e,t){re(e,function(e,n,r,a){r._w=r._w||{},t(e,r._w,r,a)})}function ie(e,t,n){null!=t&&l(na,e)&&na[e](t,n._a,n,e)}function oe(e,t){return new Date(Date.UTC(e,t+1,0)).getUTCDate()}function se(e,t){return e?a(this._months)?this._months[e.month()]:this._months[(this._months.isFormat||ha).test(t)?"format":"standalone"][e.month()]:this._months}function ue(e,t){return e?a(this._monthsShort)?this._monthsShort[e.month()]:this._monthsShort[ha.test(t)?"format":"standalone"][e.month()]:this._monthsShort}function ce(e,t,n){var r,a,i,o=e.toLocaleLowerCase();if(!this._monthsParse)for(this._monthsParse=[],this._longMonthsParse=[],this._shortMonthsParse=[],r=0;r<12;++r)i=d([2e3,r]),this._shortMonthsParse[r]=this.monthsShort(i,"").toLocaleLowerCase(),this._longMonthsParse[r]=this.months(i,"").toLocaleLowerCase();return n?"MMM"===t?(a=da.call(this._shortMonthsParse,o),a!==-1?a:null):(a=da.call(this._longMonthsParse,o),a!==-1?a:null):"MMM"===t?(a=da.call(this._shortMonthsParse,o),a!==-1?a:(a=da.call(this._longMonthsParse,o),a!==-1?a:null)):(a=da.call(this._longMonthsParse,o),a!==-1?a:(a=da.call(this._shortMonthsParse,o),a!==-1?a:null))}function le(e,t,n){var r,a,i;if(this._monthsParseExact)return ce.call(this,e,t,n);for(this._monthsParse||(this._monthsParse=[],this._longMonthsParse=[],this._shortMonthsParse=[]),r=0;r<12;r++){if(a=d([2e3,r]),n&&!this._longMonthsParse[r]&&(this._longMonthsParse[r]=new RegExp("^"+this.months(a,"").replace(".","")+"$","i"),this._shortMonthsParse[r]=new RegExp("^"+this.monthsShort(a,"").replace(".","")+"$","i")),n||this._monthsParse[r]||(i="^"+this.months(a,"")+"|^"+this.monthsShort(a,""),this._monthsParse[r]=new RegExp(i.replace(".",""),"i")),n&&"MMMM"===t&&this._longMonthsParse[r].test(e))return r;if(n&&"MMM"===t&&this._shortMonthsParse[r].test(e))return r;if(!n&&this._monthsParse[r].test(e))return r}}function fe(e,t){var n;if(!e.isValid())return e;if("string"==typeof t)if(/^\d+$/.test(t))t=A(t);else if(t=e.localeData().monthsParse(t),!s(t))return e;return n=Math.min(e.date(),oe(e.year(),t)),e._d["set"+(e._isUTC?"UTC":"")+"Month"](t,n),e}function de(e){return null!=e?(fe(this,e),n.updateOffset(this,!0),this):F(this,"Month")}function he(){return oe(this.year(),this.month())}function pe(e){return this._monthsParseExact?(l(this,"_monthsRegex")||ge.call(this),e?this._monthsShortStrictRegex:this._monthsShortRegex):(l(this,"_monthsShortRegex")||(this._monthsShortRegex=ga),this._monthsShortStrictRegex&&e?this._monthsShortStrictRegex:this._monthsShortRegex)}function me(e){return this._monthsParseExact?(l(this,"_monthsRegex")||ge.call(this),e?this._monthsStrictRegex:this._monthsRegex):(l(this,"_monthsRegex")||(this._monthsRegex=va),this._monthsStrictRegex&&e?this._monthsStrictRegex:this._monthsRegex)}function ge(){function e(e,t){return t.length-e.length}var t,n,r=[],a=[],i=[];for(t=0;t<12;t++)n=d([2e3,t]),r.push(this.monthsShort(n,"")),a.push(this.months(n,"")),i.push(this.months(n,"")),i.push(this.monthsShort(n,""));for(r.sort(e),a.sort(e),i.sort(e),t=0;t<12;t++)r[t]=ne(r[t]),a[t]=ne(a[t]);for(t=0;t<24;t++)i[t]=ne(i[t]);this._monthsRegex=new RegExp("^("+i.join("|")+")","i"),this._monthsShortRegex=this._monthsRegex,this._monthsStrictRegex=new RegExp("^("+a.join("|")+")","i"),this._monthsShortStrictRegex=new RegExp("^("+r.join("|")+")","i")}function ve(e){return ye(e)?366:365}function ye(e){return e%4===0&&e%100!==0||e%400===0}function be(){return ye(this.year())}function _e(e,t,n,r,a,i,o){var s=new Date(e,t,n,r,a,i,o);return e<100&&e>=0&&isFinite(s.getFullYear())&&s.setFullYear(e),s}function we(e){var t=new Date(Date.UTC.apply(null,arguments));return e<100&&e>=0&&isFinite(t.getUTCFullYear())&&t.setUTCFullYear(e),t}function Ae(e,t,n){var r=7+t-n,a=(7+we(e,0,r).getUTCDay()-t)%7;return-a+r-1}function xe(e,t,n,r,a){var i,o,s=(7+n-r)%7,u=Ae(e,r,a),c=1+7*(t-1)+s+u;return c<=0?(i=e-1,o=ve(i)+c):c>ve(e)?(i=e+1,o=c-ve(e)):(i=e,o=c),{year:i,dayOfYear:o}}function Me(e,t,n){var r,a,i=Ae(e.year(),t,n),o=Math.floor((e.dayOfYear()-i-1)/7)+1;return o<1?(a=e.year()-1,r=o+ke(a,t,n)):o>ke(e.year(),t,n)?(r=o-ke(e.year(),t,n),a=e.year()+1):(a=e.year(),r=o),{week:r,year:a}}function ke(e,t,n){var r=Ae(e,t,n),a=Ae(e+1,t,n);return(ve(e)-r+a)/7}function Te(e){return Me(e,this._week.dow,this._week.doy).week}function Se(){return this._week.dow}function Ee(){return this._week.doy}function Ce(e){var t=this.localeData().week(this);return null==e?t:this.add(7*(e-t),"d")}function Oe(e){var t=Me(this,1,4).week;return null==e?t:this.add(7*(e-t),"d")}function De(e,t){return"string"!=typeof e?e:isNaN(e)?(e=t.weekdaysParse(e),"number"==typeof e?e:null):parseInt(e,10)}function je(e,t){return"string"==typeof e?t.weekdaysParse(e)%7||7:isNaN(e)?null:e}function Pe(e,t){return e?a(this._weekdays)?this._weekdays[e.day()]:this._weekdays[this._weekdays.isFormat.test(t)?"format":"standalone"][e.day()]:this._weekdays}function ze(e){return e?this._weekdaysShort[e.day()]:this._weekdaysShort}function Ne(e){return e?this._weekdaysMin[e.day()]:this._weekdaysMin}function We(e,t,n){var r,a,i,o=e.toLocaleLowerCase();if(!this._weekdaysParse)for(this._weekdaysParse=[],this._shortWeekdaysParse=[],this._minWeekdaysParse=[],r=0;r<7;++r)i=d([2e3,1]).day(r),this._minWeekdaysParse[r]=this.weekdaysMin(i,"").toLocaleLowerCase(),this._shortWeekdaysParse[r]=this.weekdaysShort(i,"").toLocaleLowerCase(),this._weekdaysParse[r]=this.weekdays(i,"").toLocaleLowerCase();return n?"dddd"===t?(a=da.call(this._weekdaysParse,o),a!==-1?a:null):"ddd"===t?(a=da.call(this._shortWeekdaysParse,o),a!==-1?a:null):(a=da.call(this._minWeekdaysParse,o),a!==-1?a:null):"dddd"===t?(a=da.call(this._weekdaysParse,o),a!==-1?a:(a=da.call(this._shortWeekdaysParse,o),a!==-1?a:(a=da.call(this._minWeekdaysParse,o),a!==-1?a:null))):"ddd"===t?(a=da.call(this._shortWeekdaysParse,o),a!==-1?a:(a=da.call(this._weekdaysParse,o),a!==-1?a:(a=da.call(this._minWeekdaysParse,o),a!==-1?a:null))):(a=da.call(this._minWeekdaysParse,o),a!==-1?a:(a=da.call(this._weekdaysParse,o),a!==-1?a:(a=da.call(this._shortWeekdaysParse,o),a!==-1?a:null)))}function Le(e,t,n){var r,a,i;if(this._weekdaysParseExact)return We.call(this,e,t,n);for(this._weekdaysParse||(this._weekdaysParse=[],this._minWeekdaysParse=[],this._shortWeekdaysParse=[],this._fullWeekdaysParse=[]),r=0;r<7;r++){if(a=d([2e3,1]).day(r),n&&!this._fullWeekdaysParse[r]&&(this._fullWeekdaysParse[r]=new RegExp("^"+this.weekdays(a,"").replace(".",".?")+"$","i"),this._shortWeekdaysParse[r]=new RegExp("^"+this.weekdaysShort(a,"").replace(".",".?")+"$","i"),this._minWeekdaysParse[r]=new RegExp("^"+this.weekdaysMin(a,"").replace(".",".?")+"$","i")),this._weekdaysParse[r]||(i="^"+this.weekdays(a,"")+"|^"+this.weekdaysShort(a,"")+"|^"+this.weekdaysMin(a,""),this._weekdaysParse[r]=new RegExp(i.replace(".",""),"i")),n&&"dddd"===t&&this._fullWeekdaysParse[r].test(e))return r;if(n&&"ddd"===t&&this._shortWeekdaysParse[r].test(e))return r;if(n&&"dd"===t&&this._minWeekdaysParse[r].test(e))return r;if(!n&&this._weekdaysParse[r].test(e))return r}}function Re(e){if(!this.isValid())return null!=e?this:NaN;var t=this._isUTC?this._d.getUTCDay():this._d.getDay();return null!=e?(e=De(e,this.localeData()),this.add(e-t,"d")):t}function qe(e){if(!this.isValid())return null!=e?this:NaN;var t=(this.day()+7-this.localeData()._week.dow)%7;return null==e?t:this.add(e-t,"d")}function Ye(e){if(!this.isValid())return null!=e?this:NaN;if(null!=e){var t=je(e,this.localeData());return this.day(this.day()%7?t:t-7)}return this.day()||7}function Be(e){return this._weekdaysParseExact?(l(this,"_weekdaysRegex")||Ie.call(this),e?this._weekdaysStrictRegex:this._weekdaysRegex):(l(this,"_weekdaysRegex")||(this._weekdaysRegex=xa),this._weekdaysStrictRegex&&e?this._weekdaysStrictRegex:this._weekdaysRegex)}function He(e){return this._weekdaysParseExact?(l(this,"_weekdaysRegex")||Ie.call(this),e?this._weekdaysShortStrictRegex:this._weekdaysShortRegex):(l(this,"_weekdaysShortRegex")||(this._weekdaysShortRegex=Ma),this._weekdaysShortStrictRegex&&e?this._weekdaysShortStrictRegex:this._weekdaysShortRegex)}function Fe(e){return this._weekdaysParseExact?(l(this,"_weekdaysRegex")||Ie.call(this),e?this._weekdaysMinStrictRegex:this._weekdaysMinRegex):(l(this,"_weekdaysMinRegex")||(this._weekdaysMinRegex=ka),this._weekdaysMinStrictRegex&&e?this._weekdaysMinStrictRegex:this._weekdaysMinRegex); -}function Ie(){function e(e,t){return t.length-e.length}var t,n,r,a,i,o=[],s=[],u=[],c=[];for(t=0;t<7;t++)n=d([2e3,1]).day(t),r=this.weekdaysMin(n,""),a=this.weekdaysShort(n,""),i=this.weekdays(n,""),o.push(r),s.push(a),u.push(i),c.push(r),c.push(a),c.push(i);for(o.sort(e),s.sort(e),u.sort(e),c.sort(e),t=0;t<7;t++)s[t]=ne(s[t]),u[t]=ne(u[t]),c[t]=ne(c[t]);this._weekdaysRegex=new RegExp("^("+c.join("|")+")","i"),this._weekdaysShortRegex=this._weekdaysRegex,this._weekdaysMinRegex=this._weekdaysRegex,this._weekdaysStrictRegex=new RegExp("^("+u.join("|")+")","i"),this._weekdaysShortStrictRegex=new RegExp("^("+s.join("|")+")","i"),this._weekdaysMinStrictRegex=new RegExp("^("+o.join("|")+")","i")}function Ue(){return this.hours()%12||12}function Ge(){return this.hours()||24}function $e(e,t){V(e,0,0,function(){return this.localeData().meridiem(this.hours(),this.minutes(),t)})}function Ve(e,t){return t._meridiemParse}function Ke(e){return"p"===(e+"").toLowerCase().charAt(0)}function Xe(e,t,n){return e>11?n?"pm":"PM":n?"am":"AM"}function Je(e){return e?e.toLowerCase().replace("_","-"):e}function Ze(e){for(var t,n,r,a,i=0;i<e.length;){for(a=Je(e[i]).split("-"),t=a.length,n=Je(e[i+1]),n=n?n.split("-"):null;t>0;){if(r=Qe(a.slice(0,t).join("-")))return r;if(n&&n.length>=t&&x(a,n,!0)>=t-1)break;t--}i++}return null}function Qe(n){var r=null;if(!Oa[n]&&"undefined"!=typeof t&&t&&t.exports)try{r=Ta._abbr,e("./locale/"+n),et(r)}catch(e){}return Oa[n]}function et(e,t){var n;return e&&(n=v(t)?rt(e):tt(e,t),n&&(Ta=n)),Ta._abbr}function tt(e,t){if(null!==t){var n=Ca;if(t.abbr=e,null!=Oa[e])T("defineLocaleOverride","use moment.updateLocale(localeName, config) to change an existing locale. moment.defineLocale(localeName, config) should only be used for creating a new locale See http://momentjs.com/guides/#/warnings/define-locale/ for more info."),n=Oa[e]._config;else if(null!=t.parentLocale){if(null==Oa[t.parentLocale])return Da[t.parentLocale]||(Da[t.parentLocale]=[]),Da[t.parentLocale].push({name:e,config:t}),null;n=Oa[t.parentLocale]._config}return Oa[e]=new O(C(n,t)),Da[e]&&Da[e].forEach(function(e){tt(e.name,e.config)}),et(e),Oa[e]}return delete Oa[e],null}function nt(e,t){if(null!=t){var n,r=Ca;null!=Oa[e]&&(r=Oa[e]._config),t=C(r,t),n=new O(t),n.parentLocale=Oa[e],Oa[e]=n,et(e)}else null!=Oa[e]&&(null!=Oa[e].parentLocale?Oa[e]=Oa[e].parentLocale:null!=Oa[e]&&delete Oa[e]);return Oa[e]}function rt(e){var t;if(e&&e._locale&&e._locale._abbr&&(e=e._locale._abbr),!e)return Ta;if(!a(e)){if(t=Qe(e))return t;e=[e]}return Ze(e)}function at(){return kr(Oa)}function it(e){var t,n=e._a;return n&&p(e).overflow===-2&&(t=n[aa]<0||n[aa]>11?aa:n[ia]<1||n[ia]>oe(n[ra],n[aa])?ia:n[oa]<0||n[oa]>24||24===n[oa]&&(0!==n[sa]||0!==n[ua]||0!==n[ca])?oa:n[sa]<0||n[sa]>59?sa:n[ua]<0||n[ua]>59?ua:n[ca]<0||n[ca]>999?ca:-1,p(e)._overflowDayOfYear&&(t<ra||t>ia)&&(t=ia),p(e)._overflowWeeks&&t===-1&&(t=la),p(e)._overflowWeekday&&t===-1&&(t=fa),p(e).overflow=t),e}function ot(e){var t,n,r,a,i,o,s=e._i,u=ja.exec(s)||Pa.exec(s);if(u){for(p(e).iso=!0,t=0,n=Na.length;t<n;t++)if(Na[t][1].exec(u[1])){a=Na[t][0],r=Na[t][2]!==!1;break}if(null==a)return void(e._isValid=!1);if(u[3]){for(t=0,n=Wa.length;t<n;t++)if(Wa[t][1].exec(u[3])){i=(u[2]||" ")+Wa[t][0];break}if(null==i)return void(e._isValid=!1)}if(!r&&null!=i)return void(e._isValid=!1);if(u[4]){if(!za.exec(u[4]))return void(e._isValid=!1);o="Z"}e._f=a+(i||"")+(o||""),dt(e)}else e._isValid=!1}function st(e){var t=La.exec(e._i);return null!==t?void(e._d=new Date(+t[1])):(ot(e),void(e._isValid===!1&&(delete e._isValid,n.createFromInputFallback(e))))}function ut(e,t,n){return null!=e?e:null!=t?t:n}function ct(e){var t=new Date(n.now());return e._useUTC?[t.getUTCFullYear(),t.getUTCMonth(),t.getUTCDate()]:[t.getFullYear(),t.getMonth(),t.getDate()]}function lt(e){var t,n,r,a,i=[];if(!e._d){for(r=ct(e),e._w&&null==e._a[ia]&&null==e._a[aa]&&ft(e),e._dayOfYear&&(a=ut(e._a[ra],r[ra]),e._dayOfYear>ve(a)&&(p(e)._overflowDayOfYear=!0),n=we(a,0,e._dayOfYear),e._a[aa]=n.getUTCMonth(),e._a[ia]=n.getUTCDate()),t=0;t<3&&null==e._a[t];++t)e._a[t]=i[t]=r[t];for(;t<7;t++)e._a[t]=i[t]=null==e._a[t]?2===t?1:0:e._a[t];24===e._a[oa]&&0===e._a[sa]&&0===e._a[ua]&&0===e._a[ca]&&(e._nextDay=!0,e._a[oa]=0),e._d=(e._useUTC?we:_e).apply(null,i),null!=e._tzm&&e._d.setUTCMinutes(e._d.getUTCMinutes()-e._tzm),e._nextDay&&(e._a[oa]=24)}}function ft(e){var t,n,r,a,i,o,s,u;if(t=e._w,null!=t.GG||null!=t.W||null!=t.E)i=1,o=4,n=ut(t.GG,e._a[ra],Me(_t(),1,4).year),r=ut(t.W,1),a=ut(t.E,1),(a<1||a>7)&&(u=!0);else{i=e._locale._week.dow,o=e._locale._week.doy;var c=Me(_t(),i,o);n=ut(t.gg,e._a[ra],c.year),r=ut(t.w,c.week),null!=t.d?(a=t.d,(a<0||a>6)&&(u=!0)):null!=t.e?(a=t.e+i,(t.e<0||t.e>6)&&(u=!0)):a=i}r<1||r>ke(n,i,o)?p(e)._overflowWeeks=!0:null!=u?p(e)._overflowWeekday=!0:(s=xe(n,r,a,i,o),e._a[ra]=s.year,e._dayOfYear=s.dayOfYear)}function dt(e){if(e._f===n.ISO_8601)return void ot(e);e._a=[],p(e).empty=!0;var t,r,a,i,o,s=""+e._i,u=s.length,c=0;for(a=Z(e._f,e._locale).match(zr)||[],t=0;t<a.length;t++)i=a[t],r=(s.match(ee(i,e))||[])[0],r&&(o=s.substr(0,s.indexOf(r)),o.length>0&&p(e).unusedInput.push(o),s=s.slice(s.indexOf(r)+r.length),c+=r.length),Lr[i]?(r?p(e).empty=!1:p(e).unusedTokens.push(i),ie(i,r,e)):e._strict&&!r&&p(e).unusedTokens.push(i);p(e).charsLeftOver=u-c,s.length>0&&p(e).unusedInput.push(s),e._a[oa]<=12&&p(e).bigHour===!0&&e._a[oa]>0&&(p(e).bigHour=void 0),p(e).parsedDateParts=e._a.slice(0),p(e).meridiem=e._meridiem,e._a[oa]=ht(e._locale,e._a[oa],e._meridiem),lt(e),it(e)}function ht(e,t,n){var r;return null==n?t:null!=e.meridiemHour?e.meridiemHour(t,n):null!=e.isPM?(r=e.isPM(n),r&&t<12&&(t+=12),r||12!==t||(t=0),t):t}function pt(e){var t,n,r,a,i;if(0===e._f.length)return p(e).invalidFormat=!0,void(e._d=new Date(NaN));for(a=0;a<e._f.length;a++)i=0,t=y({},e),null!=e._useUTC&&(t._useUTC=e._useUTC),t._f=e._f[a],dt(t),m(t)&&(i+=p(t).charsLeftOver,i+=10*p(t).unusedTokens.length,p(t).score=i,(null==r||i<r)&&(r=i,n=t));f(e,n||t)}function mt(e){if(!e._d){var t=q(e._i);e._a=c([t.year,t.month,t.day||t.date,t.hour,t.minute,t.second,t.millisecond],function(e){return e&&parseInt(e,10)}),lt(e)}}function gt(e){var t=new b(it(vt(e)));return t._nextDay&&(t.add(1,"d"),t._nextDay=void 0),t}function vt(e){var t=e._i,n=e._f;return e._locale=e._locale||rt(e._l),null===t||void 0===n&&""===t?g({nullInput:!0}):("string"==typeof t&&(e._i=t=e._locale.preparse(t)),_(t)?new b(it(t)):(u(t)?e._d=t:a(n)?pt(e):n?dt(e):yt(e),m(e)||(e._d=null),e))}function yt(e){var t=e._i;void 0===t?e._d=new Date(n.now()):u(t)?e._d=new Date(t.valueOf()):"string"==typeof t?st(e):a(t)?(e._a=c(t.slice(0),function(e){return parseInt(e,10)}),lt(e)):"object"==typeof t?mt(e):s(t)?e._d=new Date(t):n.createFromInputFallback(e)}function bt(e,t,n,r,s){var u={};return n!==!0&&n!==!1||(r=n,n=void 0),(i(e)&&o(e)||a(e)&&0===e.length)&&(e=void 0),u._isAMomentObject=!0,u._useUTC=u._isUTC=s,u._l=n,u._i=e,u._f=t,u._strict=r,gt(u)}function _t(e,t,n,r){return bt(e,t,n,r,!1)}function wt(e,t){var n,r;if(1===t.length&&a(t[0])&&(t=t[0]),!t.length)return _t();for(n=t[0],r=1;r<t.length;++r)t[r].isValid()&&!t[r][e](n)||(n=t[r]);return n}function At(){var e=[].slice.call(arguments,0);return wt("isBefore",e)}function xt(){var e=[].slice.call(arguments,0);return wt("isAfter",e)}function Mt(e){var t=q(e),n=t.year||0,r=t.quarter||0,a=t.month||0,i=t.week||0,o=t.day||0,s=t.hour||0,u=t.minute||0,c=t.second||0,l=t.millisecond||0;this._milliseconds=+l+1e3*c+6e4*u+1e3*s*60*60,this._days=+o+7*i,this._months=+a+3*r+12*n,this._data={},this._locale=rt(),this._bubble()}function kt(e){return e instanceof Mt}function Tt(e){return e<0?Math.round(-1*e)*-1:Math.round(e)}function St(e,t){V(e,0,0,function(){var e=this.utcOffset(),n="+";return e<0&&(e=-e,n="-"),n+$(~~(e/60),2)+t+$(~~e%60,2)})}function Et(e,t){var n=(t||"").match(e);if(null===n)return null;var r=n[n.length-1]||[],a=(r+"").match(Ba)||["-",0,0],i=+(60*a[1])+A(a[2]);return 0===i?0:"+"===a[0]?i:-i}function Ct(e,t){var r,a;return t._isUTC?(r=t.clone(),a=(_(e)||u(e)?e.valueOf():_t(e).valueOf())-r.valueOf(),r._d.setTime(r._d.valueOf()+a),n.updateOffset(r,!1),r):_t(e).local()}function Ot(e){return 15*-Math.round(e._d.getTimezoneOffset()/15)}function Dt(e,t){var r,a=this._offset||0;if(!this.isValid())return null!=e?this:NaN;if(null!=e){if("string"==typeof e){if(e=Et(Zr,e),null===e)return this}else Math.abs(e)<16&&(e*=60);return!this._isUTC&&t&&(r=Ot(this)),this._offset=e,this._isUTC=!0,null!=r&&this.add(r,"m"),a!==e&&(!t||this._changeInProgress?$t(this,Ht(e-a,"m"),1,!1):this._changeInProgress||(this._changeInProgress=!0,n.updateOffset(this,!0),this._changeInProgress=null)),this}return this._isUTC?a:Ot(this)}function jt(e,t){return null!=e?("string"!=typeof e&&(e=-e),this.utcOffset(e,t),this):-this.utcOffset()}function Pt(e){return this.utcOffset(0,e)}function zt(e){return this._isUTC&&(this.utcOffset(0,e),this._isUTC=!1,e&&this.subtract(Ot(this),"m")),this}function Nt(){if(null!=this._tzm)this.utcOffset(this._tzm);else if("string"==typeof this._i){var e=Et(Jr,this._i);null!=e?this.utcOffset(e):this.utcOffset(0,!0)}return this}function Wt(e){return!!this.isValid()&&(e=e?_t(e).utcOffset():0,(this.utcOffset()-e)%60===0)}function Lt(){return this.utcOffset()>this.clone().month(0).utcOffset()||this.utcOffset()>this.clone().month(5).utcOffset()}function Rt(){if(!v(this._isDSTShifted))return this._isDSTShifted;var e={};if(y(e,this),e=vt(e),e._a){var t=e._isUTC?d(e._a):_t(e._a);this._isDSTShifted=this.isValid()&&x(e._a,t.toArray())>0}else this._isDSTShifted=!1;return this._isDSTShifted}function qt(){return!!this.isValid()&&!this._isUTC}function Yt(){return!!this.isValid()&&this._isUTC}function Bt(){return!!this.isValid()&&(this._isUTC&&0===this._offset)}function Ht(e,t){var n,r,a,i=e,o=null;return kt(e)?i={ms:e._milliseconds,d:e._days,M:e._months}:s(e)?(i={},t?i[t]=e:i.milliseconds=e):(o=Ha.exec(e))?(n="-"===o[1]?-1:1,i={y:0,d:A(o[ia])*n,h:A(o[oa])*n,m:A(o[sa])*n,s:A(o[ua])*n,ms:A(Tt(1e3*o[ca]))*n}):(o=Fa.exec(e))?(n="-"===o[1]?-1:1,i={y:Ft(o[2],n),M:Ft(o[3],n),w:Ft(o[4],n),d:Ft(o[5],n),h:Ft(o[6],n),m:Ft(o[7],n),s:Ft(o[8],n)}):null==i?i={}:"object"==typeof i&&("from"in i||"to"in i)&&(a=Ut(_t(i.from),_t(i.to)),i={},i.ms=a.milliseconds,i.M=a.months),r=new Mt(i),kt(e)&&l(e,"_locale")&&(r._locale=e._locale),r}function Ft(e,t){var n=e&&parseFloat(e.replace(",","."));return(isNaN(n)?0:n)*t}function It(e,t){var n={milliseconds:0,months:0};return n.months=t.month()-e.month()+12*(t.year()-e.year()),e.clone().add(n.months,"M").isAfter(t)&&--n.months,n.milliseconds=+t-+e.clone().add(n.months,"M"),n}function Ut(e,t){var n;return e.isValid()&&t.isValid()?(t=Ct(t,e),e.isBefore(t)?n=It(e,t):(n=It(t,e),n.milliseconds=-n.milliseconds,n.months=-n.months),n):{milliseconds:0,months:0}}function Gt(e,t){return function(n,r){var a,i;return null===r||isNaN(+r)||(T(t,"moment()."+t+"(period, number) is deprecated. Please use moment()."+t+"(number, period). See http://momentjs.com/guides/#/warnings/add-inverted-param/ for more info."),i=n,n=r,r=i),n="string"==typeof n?+n:n,a=Ht(n,r),$t(this,a,e),this}}function $t(e,t,r,a){var i=t._milliseconds,o=Tt(t._days),s=Tt(t._months);e.isValid()&&(a=null==a||a,i&&e._d.setTime(e._d.valueOf()+i*r),o&&I(e,"Date",F(e,"Date")+o*r),s&&fe(e,F(e,"Month")+s*r),a&&n.updateOffset(e,o||s))}function Vt(e,t){var n=e.diff(t,"days",!0);return n<-6?"sameElse":n<-1?"lastWeek":n<0?"lastDay":n<1?"sameDay":n<2?"nextDay":n<7?"nextWeek":"sameElse"}function Kt(e,t){var r=e||_t(),a=Ct(r,this).startOf("day"),i=n.calendarFormat(this,a)||"sameElse",o=t&&(S(t[i])?t[i].call(this,r):t[i]);return this.format(o||this.localeData().calendar(i,this,_t(r)))}function Xt(){return new b(this)}function Jt(e,t){var n=_(e)?e:_t(e);return!(!this.isValid()||!n.isValid())&&(t=R(v(t)?"millisecond":t),"millisecond"===t?this.valueOf()>n.valueOf():n.valueOf()<this.clone().startOf(t).valueOf())}function Zt(e,t){var n=_(e)?e:_t(e);return!(!this.isValid()||!n.isValid())&&(t=R(v(t)?"millisecond":t),"millisecond"===t?this.valueOf()<n.valueOf():this.clone().endOf(t).valueOf()<n.valueOf())}function Qt(e,t,n,r){return r=r||"()",("("===r[0]?this.isAfter(e,n):!this.isBefore(e,n))&&(")"===r[1]?this.isBefore(t,n):!this.isAfter(t,n))}function en(e,t){var n,r=_(e)?e:_t(e);return!(!this.isValid()||!r.isValid())&&(t=R(t||"millisecond"),"millisecond"===t?this.valueOf()===r.valueOf():(n=r.valueOf(),this.clone().startOf(t).valueOf()<=n&&n<=this.clone().endOf(t).valueOf()))}function tn(e,t){return this.isSame(e,t)||this.isAfter(e,t)}function nn(e,t){return this.isSame(e,t)||this.isBefore(e,t)}function rn(e,t,n){var r,a,i,o;return this.isValid()?(r=Ct(e,this),r.isValid()?(a=6e4*(r.utcOffset()-this.utcOffset()),t=R(t),"year"===t||"month"===t||"quarter"===t?(o=an(this,r),"quarter"===t?o/=3:"year"===t&&(o/=12)):(i=this-r,o="second"===t?i/1e3:"minute"===t?i/6e4:"hour"===t?i/36e5:"day"===t?(i-a)/864e5:"week"===t?(i-a)/6048e5:i),n?o:w(o)):NaN):NaN}function an(e,t){var n,r,a=12*(t.year()-e.year())+(t.month()-e.month()),i=e.clone().add(a,"months");return t-i<0?(n=e.clone().add(a-1,"months"),r=(t-i)/(i-n)):(n=e.clone().add(a+1,"months"),r=(t-i)/(n-i)),-(a+r)||0}function on(){return this.clone().locale("en").format("ddd MMM DD YYYY HH:mm:ss [GMT]ZZ")}function sn(){var e=this.clone().utc();return 0<e.year()&&e.year()<=9999?S(Date.prototype.toISOString)?this.toDate().toISOString():J(e,"YYYY-MM-DD[T]HH:mm:ss.SSS[Z]"):J(e,"YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]")}function un(){if(!this.isValid())return"moment.invalid(/* "+this._i+" */)";var e="moment",t="";this.isLocal()||(e=0===this.utcOffset()?"moment.utc":"moment.parseZone",t="Z");var n="["+e+'("]',r=0<this.year()&&this.year()<=9999?"YYYY":"YYYYYY",a="-MM-DD[T]HH:mm:ss.SSS",i=t+'[")]';return this.format(n+r+a+i)}function cn(e){e||(e=this.isUtc()?n.defaultFormatUtc:n.defaultFormat);var t=J(this,e);return this.localeData().postformat(t)}function ln(e,t){return this.isValid()&&(_(e)&&e.isValid()||_t(e).isValid())?Ht({to:this,from:e}).locale(this.locale()).humanize(!t):this.localeData().invalidDate()}function fn(e){return this.from(_t(),e)}function dn(e,t){return this.isValid()&&(_(e)&&e.isValid()||_t(e).isValid())?Ht({from:this,to:e}).locale(this.locale()).humanize(!t):this.localeData().invalidDate()}function hn(e){return this.to(_t(),e)}function pn(e){var t;return void 0===e?this._locale._abbr:(t=rt(e),null!=t&&(this._locale=t),this)}function mn(){return this._locale}function gn(e){switch(e=R(e)){case"year":this.month(0);case"quarter":case"month":this.date(1);case"week":case"isoWeek":case"day":case"date":this.hours(0);case"hour":this.minutes(0);case"minute":this.seconds(0);case"second":this.milliseconds(0)}return"week"===e&&this.weekday(0),"isoWeek"===e&&this.isoWeekday(1),"quarter"===e&&this.month(3*Math.floor(this.month()/3)),this}function vn(e){return e=R(e),void 0===e||"millisecond"===e?this:("date"===e&&(e="day"),this.startOf(e).add(1,"isoWeek"===e?"week":e).subtract(1,"ms"))}function yn(){return this._d.valueOf()-6e4*(this._offset||0)}function bn(){return Math.floor(this.valueOf()/1e3)}function _n(){return new Date(this.valueOf())}function wn(){var e=this;return[e.year(),e.month(),e.date(),e.hour(),e.minute(),e.second(),e.millisecond()]}function An(){var e=this;return{years:e.year(),months:e.month(),date:e.date(),hours:e.hours(),minutes:e.minutes(),seconds:e.seconds(),milliseconds:e.milliseconds()}}function xn(){return this.isValid()?this.toISOString():null}function Mn(){return m(this)}function kn(){return f({},p(this))}function Tn(){return p(this).overflow}function Sn(){return{input:this._i,format:this._f,locale:this._locale,isUTC:this._isUTC,strict:this._strict}}function En(e,t){V(0,[e,e.length],0,t)}function Cn(e){return Pn.call(this,e,this.week(),this.weekday(),this.localeData()._week.dow,this.localeData()._week.doy)}function On(e){return Pn.call(this,e,this.isoWeek(),this.isoWeekday(),1,4)}function Dn(){return ke(this.year(),1,4)}function jn(){var e=this.localeData()._week;return ke(this.year(),e.dow,e.doy)}function Pn(e,t,n,r,a){var i;return null==e?Me(this,r,a).year:(i=ke(e,r,a),t>i&&(t=i),zn.call(this,e,t,n,r,a))}function zn(e,t,n,r,a){var i=xe(e,t,n,r,a),o=we(i.year,0,i.dayOfYear);return this.year(o.getUTCFullYear()),this.month(o.getUTCMonth()),this.date(o.getUTCDate()),this}function Nn(e){return null==e?Math.ceil((this.month()+1)/3):this.month(3*(e-1)+this.month()%3)}function Wn(e){var t=Math.round((this.clone().startOf("day")-this.clone().startOf("year"))/864e5)+1;return null==e?t:this.add(e-t,"d")}function Ln(e,t){t[ca]=A(1e3*("0."+e))}function Rn(){return this._isUTC?"UTC":""}function qn(){return this._isUTC?"Coordinated Universal Time":""}function Yn(e){return _t(1e3*e)}function Bn(){return _t.apply(null,arguments).parseZone()}function Hn(e){return e}function Fn(e,t,n,r){var a=rt(),i=d().set(r,t);return a[n](i,e)}function In(e,t,n){if(s(e)&&(t=e,e=void 0),e=e||"",null!=t)return Fn(e,t,n,"month");var r,a=[];for(r=0;r<12;r++)a[r]=Fn(e,r,n,"month");return a}function Un(e,t,n,r){"boolean"==typeof e?(s(t)&&(n=t,t=void 0),t=t||""):(t=e,n=t,e=!1,s(t)&&(n=t,t=void 0),t=t||"");var a=rt(),i=e?a._week.dow:0;if(null!=n)return Fn(t,(n+i)%7,r,"day");var o,u=[];for(o=0;o<7;o++)u[o]=Fn(t,(o+i)%7,r,"day");return u}function Gn(e,t){return In(e,t,"months")}function $n(e,t){return In(e,t,"monthsShort")}function Vn(e,t,n){return Un(e,t,n,"weekdays")}function Kn(e,t,n){return Un(e,t,n,"weekdaysShort")}function Xn(e,t,n){return Un(e,t,n,"weekdaysMin")}function Jn(){var e=this._data;return this._milliseconds=ei(this._milliseconds),this._days=ei(this._days),this._months=ei(this._months),e.milliseconds=ei(e.milliseconds),e.seconds=ei(e.seconds),e.minutes=ei(e.minutes),e.hours=ei(e.hours),e.months=ei(e.months),e.years=ei(e.years),this}function Zn(e,t,n,r){var a=Ht(t,n);return e._milliseconds+=r*a._milliseconds,e._days+=r*a._days,e._months+=r*a._months,e._bubble()}function Qn(e,t){return Zn(this,e,t,1)}function er(e,t){return Zn(this,e,t,-1)}function tr(e){return e<0?Math.floor(e):Math.ceil(e)}function nr(){var e,t,n,r,a,i=this._milliseconds,o=this._days,s=this._months,u=this._data;return i>=0&&o>=0&&s>=0||i<=0&&o<=0&&s<=0||(i+=864e5*tr(ar(s)+o),o=0,s=0),u.milliseconds=i%1e3,e=w(i/1e3),u.seconds=e%60,t=w(e/60),u.minutes=t%60,n=w(t/60),u.hours=n%24,o+=w(n/24),a=w(rr(o)),s+=a,o-=tr(ar(a)),r=w(s/12),s%=12,u.days=o,u.months=s,u.years=r,this}function rr(e){return 4800*e/146097}function ar(e){return 146097*e/4800}function ir(e){var t,n,r=this._milliseconds;if(e=R(e),"month"===e||"year"===e)return t=this._days+r/864e5,n=this._months+rr(t),"month"===e?n:n/12;switch(t=this._days+Math.round(ar(this._months)),e){case"week":return t/7+r/6048e5;case"day":return t+r/864e5;case"hour":return 24*t+r/36e5;case"minute":return 1440*t+r/6e4;case"second":return 86400*t+r/1e3;case"millisecond":return Math.floor(864e5*t)+r;default:throw new Error("Unknown unit "+e)}}function or(){return this._milliseconds+864e5*this._days+this._months%12*2592e6+31536e6*A(this._months/12)}function sr(e){return function(){return this.as(e)}}function ur(e){return e=R(e),this[e+"s"]()}function cr(e){return function(){return this._data[e]}}function lr(){return w(this.days()/7)}function fr(e,t,n,r,a){return a.relativeTime(t||1,!!n,e,r)}function dr(e,t,n){var r=Ht(e).abs(),a=gi(r.as("s")),i=gi(r.as("m")),o=gi(r.as("h")),s=gi(r.as("d")),u=gi(r.as("M")),c=gi(r.as("y")),l=a<vi.s&&["s",a]||i<=1&&["m"]||i<vi.m&&["mm",i]||o<=1&&["h"]||o<vi.h&&["hh",o]||s<=1&&["d"]||s<vi.d&&["dd",s]||u<=1&&["M"]||u<vi.M&&["MM",u]||c<=1&&["y"]||["yy",c];return l[2]=t,l[3]=+e>0,l[4]=n,fr.apply(null,l)}function hr(e){return void 0===e?gi:"function"==typeof e&&(gi=e,!0)}function pr(e,t){return void 0!==vi[e]&&(void 0===t?vi[e]:(vi[e]=t,!0))}function mr(e){var t=this.localeData(),n=dr(this,!e,t);return e&&(n=t.pastFuture(+this,n)),t.postformat(n)}function gr(){var e,t,n,r=yi(this._milliseconds)/1e3,a=yi(this._days),i=yi(this._months);e=w(r/60),t=w(e/60),r%=60,e%=60,n=w(i/12),i%=12;var o=n,s=i,u=a,c=t,l=e,f=r,d=this.asSeconds();return d?(d<0?"-":"")+"P"+(o?o+"Y":"")+(s?s+"M":"")+(u?u+"D":"")+(c||l||f?"T":"")+(c?c+"H":"")+(l?l+"M":"")+(f?f+"S":""):"P0D"}var vr,yr;yr=Array.prototype.some?Array.prototype.some:function(e){for(var t=Object(this),n=t.length>>>0,r=0;r<n;r++)if(r in t&&e.call(this,t[r],r,t))return!0;return!1};var br=yr,_r=n.momentProperties=[],wr=!1,Ar={};n.suppressDeprecationWarnings=!1,n.deprecationHandler=null;var xr;xr=Object.keys?Object.keys:function(e){var t,n=[];for(t in e)l(e,t)&&n.push(t);return n};var Mr,kr=xr,Tr={sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},Sr={LTS:"h:mm:ss A",LT:"h:mm A",L:"MM/DD/YYYY",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY h:mm A",LLLL:"dddd, MMMM D, YYYY h:mm A"},Er="Invalid date",Cr="%d",Or=/\d{1,2}/,Dr={future:"in %s",past:"%s ago",s:"a few seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},jr={},Pr={},zr=/(\[[^\[]*\])|(\\)?([Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|YYYYYY|YYYYY|YYYY|YY|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|kk?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g,Nr=/(\[[^\[]*\])|(\\)?(LTS|LT|LL?L?L?|l{1,4})/g,Wr={},Lr={},Rr=/\d/,qr=/\d\d/,Yr=/\d{3}/,Br=/\d{4}/,Hr=/[+-]?\d{6}/,Fr=/\d\d?/,Ir=/\d\d\d\d?/,Ur=/\d\d\d\d\d\d?/,Gr=/\d{1,3}/,$r=/\d{1,4}/,Vr=/[+-]?\d{1,6}/,Kr=/\d+/,Xr=/[+-]?\d+/,Jr=/Z|[+-]\d\d:?\d\d/gi,Zr=/Z|[+-]\d\d(?::?\d\d)?/gi,Qr=/[+-]?\d+(\.\d{1,3})?/,ea=/[0-9]*['a-z\u00A0-\u05FF\u0700-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]+|[\u0600-\u06FF\/]+(\s*?[\u0600-\u06FF]+){1,2}/i,ta={},na={},ra=0,aa=1,ia=2,oa=3,sa=4,ua=5,ca=6,la=7,fa=8;Mr=Array.prototype.indexOf?Array.prototype.indexOf:function(e){var t;for(t=0;t<this.length;++t)if(this[t]===e)return t;return-1};var da=Mr;V("M",["MM",2],"Mo",function(){return this.month()+1}),V("MMM",0,0,function(e){return this.localeData().monthsShort(this,e)}),V("MMMM",0,0,function(e){return this.localeData().months(this,e)}),L("month","M"),Y("month",8),Q("M",Fr),Q("MM",Fr,qr),Q("MMM",function(e,t){return t.monthsShortRegex(e)}),Q("MMMM",function(e,t){return t.monthsRegex(e)}),re(["M","MM"],function(e,t){t[aa]=A(e)-1}),re(["MMM","MMMM"],function(e,t,n,r){var a=n._locale.monthsParse(e,r,n._strict);null!=a?t[aa]=a:p(n).invalidMonth=e});var ha=/D[oD]?(\[[^\[\]]*\]|\s)+MMMM?/,pa="January_February_March_April_May_June_July_August_September_October_November_December".split("_"),ma="Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),ga=ea,va=ea;V("Y",0,0,function(){var e=this.year();return e<=9999?""+e:"+"+e}),V(0,["YY",2],0,function(){return this.year()%100}),V(0,["YYYY",4],0,"year"),V(0,["YYYYY",5],0,"year"),V(0,["YYYYYY",6,!0],0,"year"),L("year","y"),Y("year",1),Q("Y",Xr),Q("YY",Fr,qr),Q("YYYY",$r,Br),Q("YYYYY",Vr,Hr),Q("YYYYYY",Vr,Hr),re(["YYYYY","YYYYYY"],ra),re("YYYY",function(e,t){t[ra]=2===e.length?n.parseTwoDigitYear(e):A(e)}),re("YY",function(e,t){t[ra]=n.parseTwoDigitYear(e)}),re("Y",function(e,t){t[ra]=parseInt(e,10)}),n.parseTwoDigitYear=function(e){return A(e)+(A(e)>68?1900:2e3)};var ya=H("FullYear",!0);V("w",["ww",2],"wo","week"),V("W",["WW",2],"Wo","isoWeek"),L("week","w"),L("isoWeek","W"),Y("week",5),Y("isoWeek",5),Q("w",Fr),Q("ww",Fr,qr),Q("W",Fr),Q("WW",Fr,qr),ae(["w","ww","W","WW"],function(e,t,n,r){t[r.substr(0,1)]=A(e)});var ba={dow:0,doy:6};V("d",0,"do","day"),V("dd",0,0,function(e){return this.localeData().weekdaysMin(this,e)}),V("ddd",0,0,function(e){return this.localeData().weekdaysShort(this,e)}),V("dddd",0,0,function(e){return this.localeData().weekdays(this,e)}),V("e",0,0,"weekday"),V("E",0,0,"isoWeekday"),L("day","d"),L("weekday","e"),L("isoWeekday","E"),Y("day",11),Y("weekday",11),Y("isoWeekday",11),Q("d",Fr),Q("e",Fr),Q("E",Fr),Q("dd",function(e,t){return t.weekdaysMinRegex(e)}),Q("ddd",function(e,t){return t.weekdaysShortRegex(e)}),Q("dddd",function(e,t){return t.weekdaysRegex(e)}),ae(["dd","ddd","dddd"],function(e,t,n,r){var a=n._locale.weekdaysParse(e,r,n._strict);null!=a?t.d=a:p(n).invalidWeekday=e}),ae(["d","e","E"],function(e,t,n,r){t[r]=A(e)});var _a="Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),wa="Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),Aa="Su_Mo_Tu_We_Th_Fr_Sa".split("_"),xa=ea,Ma=ea,ka=ea;V("H",["HH",2],0,"hour"),V("h",["hh",2],0,Ue),V("k",["kk",2],0,Ge),V("hmm",0,0,function(){return""+Ue.apply(this)+$(this.minutes(),2)}),V("hmmss",0,0,function(){return""+Ue.apply(this)+$(this.minutes(),2)+$(this.seconds(),2)}),V("Hmm",0,0,function(){return""+this.hours()+$(this.minutes(),2)}),V("Hmmss",0,0,function(){return""+this.hours()+$(this.minutes(),2)+$(this.seconds(),2)}),$e("a",!0),$e("A",!1),L("hour","h"),Y("hour",13),Q("a",Ve),Q("A",Ve),Q("H",Fr),Q("h",Fr),Q("HH",Fr,qr),Q("hh",Fr,qr),Q("hmm",Ir),Q("hmmss",Ur),Q("Hmm",Ir),Q("Hmmss",Ur),re(["H","HH"],oa),re(["a","A"],function(e,t,n){n._isPm=n._locale.isPM(e),n._meridiem=e}),re(["h","hh"],function(e,t,n){t[oa]=A(e),p(n).bigHour=!0}),re("hmm",function(e,t,n){var r=e.length-2;t[oa]=A(e.substr(0,r)),t[sa]=A(e.substr(r)),p(n).bigHour=!0}),re("hmmss",function(e,t,n){var r=e.length-4,a=e.length-2;t[oa]=A(e.substr(0,r)),t[sa]=A(e.substr(r,2)),t[ua]=A(e.substr(a)),p(n).bigHour=!0}),re("Hmm",function(e,t,n){var r=e.length-2;t[oa]=A(e.substr(0,r)),t[sa]=A(e.substr(r))}),re("Hmmss",function(e,t,n){var r=e.length-4,a=e.length-2;t[oa]=A(e.substr(0,r)),t[sa]=A(e.substr(r,2)),t[ua]=A(e.substr(a))});var Ta,Sa=/[ap]\.?m?\.?/i,Ea=H("Hours",!0),Ca={calendar:Tr,longDateFormat:Sr,invalidDate:Er,ordinal:Cr,ordinalParse:Or,relativeTime:Dr,months:pa,monthsShort:ma,week:ba,weekdays:_a,weekdaysMin:Aa,weekdaysShort:wa,meridiemParse:Sa},Oa={},Da={},ja=/^\s*((?:[+-]\d{6}|\d{4})-(?:\d\d-\d\d|W\d\d-\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?::\d\d(?::\d\d(?:[.,]\d+)?)?)?)([\+\-]\d\d(?::?\d\d)?|\s*Z)?)?$/,Pa=/^\s*((?:[+-]\d{6}|\d{4})(?:\d\d\d\d|W\d\d\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?:\d\d(?:\d\d(?:[.,]\d+)?)?)?)([\+\-]\d\d(?::?\d\d)?|\s*Z)?)?$/,za=/Z|[+-]\d\d(?::?\d\d)?/,Na=[["YYYYYY-MM-DD",/[+-]\d{6}-\d\d-\d\d/],["YYYY-MM-DD",/\d{4}-\d\d-\d\d/],["GGGG-[W]WW-E",/\d{4}-W\d\d-\d/],["GGGG-[W]WW",/\d{4}-W\d\d/,!1],["YYYY-DDD",/\d{4}-\d{3}/],["YYYY-MM",/\d{4}-\d\d/,!1],["YYYYYYMMDD",/[+-]\d{10}/],["YYYYMMDD",/\d{8}/],["GGGG[W]WWE",/\d{4}W\d{3}/],["GGGG[W]WW",/\d{4}W\d{2}/,!1],["YYYYDDD",/\d{7}/]],Wa=[["HH:mm:ss.SSSS",/\d\d:\d\d:\d\d\.\d+/],["HH:mm:ss,SSSS",/\d\d:\d\d:\d\d,\d+/],["HH:mm:ss",/\d\d:\d\d:\d\d/],["HH:mm",/\d\d:\d\d/],["HHmmss.SSSS",/\d\d\d\d\d\d\.\d+/],["HHmmss,SSSS",/\d\d\d\d\d\d,\d+/],["HHmmss",/\d\d\d\d\d\d/],["HHmm",/\d\d\d\d/],["HH",/\d\d/]],La=/^\/?Date\((\-?\d+)/i;n.createFromInputFallback=k("value provided is not in a recognized ISO format. moment construction falls back to js Date(), which is not reliable across all browsers and versions. Non ISO date formats are discouraged and will be removed in an upcoming major release. Please refer to http://momentjs.com/guides/#/warnings/js-date/ for more info.",function(e){e._d=new Date(e._i+(e._useUTC?" UTC":""))}),n.ISO_8601=function(){};var Ra=k("moment().min is deprecated, use moment.max instead. http://momentjs.com/guides/#/warnings/min-max/",function(){var e=_t.apply(null,arguments);return this.isValid()&&e.isValid()?e<this?this:e:g()}),qa=k("moment().max is deprecated, use moment.min instead. http://momentjs.com/guides/#/warnings/min-max/",function(){var e=_t.apply(null,arguments);return this.isValid()&&e.isValid()?e>this?this:e:g()}),Ya=function(){return Date.now?Date.now():+new Date};St("Z",":"),St("ZZ",""),Q("Z",Zr),Q("ZZ",Zr),re(["Z","ZZ"],function(e,t,n){n._useUTC=!0,n._tzm=Et(Zr,e)});var Ba=/([\+\-]|\d\d)/gi;n.updateOffset=function(){};var Ha=/^(\-)?(?:(\d*)[. ])?(\d+)\:(\d+)(?:\:(\d+)(\.\d*)?)?$/,Fa=/^(-)?P(?:(-?[0-9,.]*)Y)?(?:(-?[0-9,.]*)M)?(?:(-?[0-9,.]*)W)?(?:(-?[0-9,.]*)D)?(?:T(?:(-?[0-9,.]*)H)?(?:(-?[0-9,.]*)M)?(?:(-?[0-9,.]*)S)?)?$/;Ht.fn=Mt.prototype;var Ia=Gt(1,"add"),Ua=Gt(-1,"subtract");n.defaultFormat="YYYY-MM-DDTHH:mm:ssZ",n.defaultFormatUtc="YYYY-MM-DDTHH:mm:ss[Z]";var Ga=k("moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.",function(e){return void 0===e?this.localeData():this.locale(e)});V(0,["gg",2],0,function(){return this.weekYear()%100}),V(0,["GG",2],0,function(){return this.isoWeekYear()%100}),En("gggg","weekYear"),En("ggggg","weekYear"),En("GGGG","isoWeekYear"),En("GGGGG","isoWeekYear"),L("weekYear","gg"),L("isoWeekYear","GG"),Y("weekYear",1),Y("isoWeekYear",1),Q("G",Xr),Q("g",Xr),Q("GG",Fr,qr),Q("gg",Fr,qr),Q("GGGG",$r,Br),Q("gggg",$r,Br),Q("GGGGG",Vr,Hr),Q("ggggg",Vr,Hr),ae(["gggg","ggggg","GGGG","GGGGG"],function(e,t,n,r){t[r.substr(0,2)]=A(e)}),ae(["gg","GG"],function(e,t,r,a){t[a]=n.parseTwoDigitYear(e)}),V("Q",0,"Qo","quarter"),L("quarter","Q"),Y("quarter",7),Q("Q",Rr),re("Q",function(e,t){t[aa]=3*(A(e)-1)}),V("D",["DD",2],"Do","date"),L("date","D"),Y("date",9),Q("D",Fr),Q("DD",Fr,qr),Q("Do",function(e,t){return e?t._ordinalParse:t._ordinalParseLenient}),re(["D","DD"],ia),re("Do",function(e,t){t[ia]=A(e.match(Fr)[0],10)});var $a=H("Date",!0);V("DDD",["DDDD",3],"DDDo","dayOfYear"),L("dayOfYear","DDD"),Y("dayOfYear",4),Q("DDD",Gr),Q("DDDD",Yr),re(["DDD","DDDD"],function(e,t,n){n._dayOfYear=A(e)}),V("m",["mm",2],0,"minute"),L("minute","m"),Y("minute",14),Q("m",Fr),Q("mm",Fr,qr),re(["m","mm"],sa);var Va=H("Minutes",!1);V("s",["ss",2],0,"second"),L("second","s"),Y("second",15),Q("s",Fr),Q("ss",Fr,qr),re(["s","ss"],ua);var Ka=H("Seconds",!1);V("S",0,0,function(){return~~(this.millisecond()/100)}),V(0,["SS",2],0,function(){return~~(this.millisecond()/10)}),V(0,["SSS",3],0,"millisecond"),V(0,["SSSS",4],0,function(){return 10*this.millisecond()}),V(0,["SSSSS",5],0,function(){return 100*this.millisecond()}),V(0,["SSSSSS",6],0,function(){return 1e3*this.millisecond()}),V(0,["SSSSSSS",7],0,function(){return 1e4*this.millisecond()}),V(0,["SSSSSSSS",8],0,function(){return 1e5*this.millisecond()}),V(0,["SSSSSSSSS",9],0,function(){return 1e6*this.millisecond()}),L("millisecond","ms"),Y("millisecond",16),Q("S",Gr,Rr),Q("SS",Gr,qr),Q("SSS",Gr,Yr);var Xa;for(Xa="SSSS";Xa.length<=9;Xa+="S")Q(Xa,Kr);for(Xa="S";Xa.length<=9;Xa+="S")re(Xa,Ln);var Ja=H("Milliseconds",!1);V("z",0,0,"zoneAbbr"),V("zz",0,0,"zoneName");var Za=b.prototype;Za.add=Ia,Za.calendar=Kt,Za.clone=Xt,Za.diff=rn,Za.endOf=vn,Za.format=cn,Za.from=ln,Za.fromNow=fn,Za.to=dn,Za.toNow=hn,Za.get=U,Za.invalidAt=Tn,Za.isAfter=Jt,Za.isBefore=Zt,Za.isBetween=Qt,Za.isSame=en,Za.isSameOrAfter=tn,Za.isSameOrBefore=nn,Za.isValid=Mn,Za.lang=Ga,Za.locale=pn,Za.localeData=mn,Za.max=qa,Za.min=Ra,Za.parsingFlags=kn,Za.set=G,Za.startOf=gn,Za.subtract=Ua,Za.toArray=wn,Za.toObject=An,Za.toDate=_n,Za.toISOString=sn,Za.inspect=un,Za.toJSON=xn,Za.toString=on,Za.unix=bn,Za.valueOf=yn,Za.creationData=Sn,Za.year=ya,Za.isLeapYear=be,Za.weekYear=Cn,Za.isoWeekYear=On,Za.quarter=Za.quarters=Nn,Za.month=de,Za.daysInMonth=he,Za.week=Za.weeks=Ce,Za.isoWeek=Za.isoWeeks=Oe,Za.weeksInYear=jn,Za.isoWeeksInYear=Dn,Za.date=$a,Za.day=Za.days=Re,Za.weekday=qe,Za.isoWeekday=Ye,Za.dayOfYear=Wn,Za.hour=Za.hours=Ea,Za.minute=Za.minutes=Va,Za.second=Za.seconds=Ka,Za.millisecond=Za.milliseconds=Ja,Za.utcOffset=Dt,Za.utc=Pt,Za.local=zt,Za.parseZone=Nt,Za.hasAlignedHourOffset=Wt,Za.isDST=Lt,Za.isLocal=qt,Za.isUtcOffset=Yt,Za.isUtc=Bt,Za.isUTC=Bt,Za.zoneAbbr=Rn,Za.zoneName=qn,Za.dates=k("dates accessor is deprecated. Use date instead.",$a),Za.months=k("months accessor is deprecated. Use month instead",de),Za.years=k("years accessor is deprecated. Use year instead",ya),Za.zone=k("moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/",jt),Za.isDSTShifted=k("isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information",Rt);var Qa=O.prototype;Qa.calendar=D,Qa.longDateFormat=j,Qa.invalidDate=P,Qa.ordinal=z,Qa.preparse=Hn,Qa.postformat=Hn,Qa.relativeTime=N,Qa.pastFuture=W, -Qa.set=E,Qa.months=se,Qa.monthsShort=ue,Qa.monthsParse=le,Qa.monthsRegex=me,Qa.monthsShortRegex=pe,Qa.week=Te,Qa.firstDayOfYear=Ee,Qa.firstDayOfWeek=Se,Qa.weekdays=Pe,Qa.weekdaysMin=Ne,Qa.weekdaysShort=ze,Qa.weekdaysParse=Le,Qa.weekdaysRegex=Be,Qa.weekdaysShortRegex=He,Qa.weekdaysMinRegex=Fe,Qa.isPM=Ke,Qa.meridiem=Xe,et("en",{ordinalParse:/\d{1,2}(th|st|nd|rd)/,ordinal:function(e){var t=e%10,n=1===A(e%100/10)?"th":1===t?"st":2===t?"nd":3===t?"rd":"th";return e+n}}),n.lang=k("moment.lang is deprecated. Use moment.locale instead.",et),n.langData=k("moment.langData is deprecated. Use moment.localeData instead.",rt);var ei=Math.abs,ti=sr("ms"),ni=sr("s"),ri=sr("m"),ai=sr("h"),ii=sr("d"),oi=sr("w"),si=sr("M"),ui=sr("y"),ci=cr("milliseconds"),li=cr("seconds"),fi=cr("minutes"),di=cr("hours"),hi=cr("days"),pi=cr("months"),mi=cr("years"),gi=Math.round,vi={s:45,m:45,h:22,d:26,M:11},yi=Math.abs,bi=Mt.prototype;return bi.abs=Jn,bi.add=Qn,bi.subtract=er,bi.as=ir,bi.asMilliseconds=ti,bi.asSeconds=ni,bi.asMinutes=ri,bi.asHours=ai,bi.asDays=ii,bi.asWeeks=oi,bi.asMonths=si,bi.asYears=ui,bi.valueOf=or,bi._bubble=nr,bi.get=ur,bi.milliseconds=ci,bi.seconds=li,bi.minutes=fi,bi.hours=di,bi.days=hi,bi.weeks=lr,bi.months=pi,bi.years=mi,bi.humanize=mr,bi.toISOString=gr,bi.toString=gr,bi.toJSON=gr,bi.locale=pn,bi.localeData=mn,bi.toIsoString=k("toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)",gr),bi.lang=Ga,V("X",0,0,"unix"),V("x",0,0,"valueOf"),Q("x",Xr),Q("X",Qr),re("X",function(e,t,n){n._d=new Date(1e3*parseFloat(e,10))}),re("x",function(e,t,n){n._d=new Date(A(e))}),n.version="2.16.0",r(_t),n.fn=Za,n.min=At,n.max=xt,n.now=Ya,n.utc=d,n.unix=Yn,n.months=Gn,n.isDate=u,n.locale=et,n.invalid=g,n.duration=Ht,n.isMoment=_,n.weekdays=Vn,n.parseZone=Bn,n.localeData=rt,n.isDuration=kt,n.monthsShort=$n,n.weekdaysMin=Xn,n.defineLocale=tt,n.updateLocale=nt,n.locales=at,n.weekdaysShort=Kn,n.normalizeUnits=R,n.relativeTimeRounding=hr,n.relativeTimeThreshold=pr,n.calendarFormat=Vt,n.prototype=Za,n})}),fp=n(function(e){!function(t,n){"function"==typeof define&&define.amd?define(["moment"],n):"object"==typeof e&&e.exports?e.exports=n(lp):n(t.moment)}(this,function(e){function t(e){return e>96?e-87:e>64?e-29:e-48}function n(e){var n,r=0,a=e.split("."),i=a[0],o=a[1]||"",s=1,u=0,c=1;for(45===e.charCodeAt(0)&&(r=1,c=-1),r;r<i.length;r++)n=t(i.charCodeAt(r)),u=60*u+n;for(r=0;r<o.length;r++)s/=60,n=t(o.charCodeAt(r)),u+=n*s;return u*c}function r(e){for(var t=0;t<e.length;t++)e[t]=n(e[t])}function a(e,t){for(var n=0;n<t;n++)e[n]=Math.round((e[n-1]||0)+6e4*e[n]);e[t-1]=1/0}function i(e,t){var n,r=[];for(n=0;n<t.length;n++)r[n]=e[t[n]];return r}function o(e){var t=e.split("|"),n=t[2].split(" "),o=t[3].split(""),s=t[4].split(" ");return r(n),r(o),r(s),a(s,o.length),{name:t[0],abbrs:i(t[1].split(" "),o),offsets:i(n,o),untils:s,population:0|t[5]}}function s(e){e&&this._set(o(e))}function u(e){var t=e.toTimeString(),n=t.match(/\([a-z ]+\)/i);n&&n[0]?(n=n[0].match(/[A-Z]/g),n=n?n.join(""):void 0):(n=t.match(/[A-Z]{3,5}/g),n=n?n[0]:void 0),"GMT"===n&&(n=void 0),this.at=+e,this.abbr=n,this.offset=e.getTimezoneOffset()}function c(e){this.zone=e,this.offsetScore=0,this.abbrScore=0}function l(e,t){for(var n,r;r=6e4*((t.at-e.at)/12e4|0);)n=new u(new Date(e.at+r)),n.offset===e.offset?e=n:t=n;return e}function f(){var e,t,n,r=(new Date).getFullYear()-2,a=new u(new Date(r,0,1)),i=[a];for(n=1;n<48;n++)t=new u(new Date(r,n,1)),t.offset!==a.offset&&(e=l(a,t),i.push(e),i.push(new u(new Date(e.at+6e4)))),a=t;for(n=0;n<4;n++)i.push(new u(new Date(r+n,0,1))),i.push(new u(new Date(r+n,6,1)));return i}function d(e,t){return e.offsetScore!==t.offsetScore?e.offsetScore-t.offsetScore:e.abbrScore!==t.abbrScore?e.abbrScore-t.abbrScore:t.zone.population-e.zone.population}function h(e,t){var n,a;for(r(t),n=0;n<t.length;n++)a=t[n],z[a]=z[a]||{},z[a][e]=!0}function p(e){var t,n,r,a=e.length,i={},o=[];for(t=0;t<a;t++){r=z[e[t].offset]||{};for(n in r)r.hasOwnProperty(n)&&(i[n]=!0)}for(t in i)i.hasOwnProperty(t)&&o.push(P[t]);return o}function m(){try{var e=Intl.DateTimeFormat().resolvedOptions().timeZone;if(e){var t=P[v(e)];if(t)return t;k("Moment Timezone found "+e+" from the Intl api, but did not have that data loaded.")}}catch(e){}var n,r,a,i=f(),o=i.length,s=p(i),u=[];for(r=0;r<s.length;r++){for(n=new c(b(s[r]),o),a=0;a<o;a++)n.scoreOffsetAt(i[a]);u.push(n)}return u.sort(d),u.length>0?u[0].zone.name:void 0}function g(e){return C&&!e||(C=m()),C}function v(e){return(e||"").toLowerCase().replace(/\//g,"_")}function y(e){var t,n,r,a;for("string"==typeof e&&(e=[e]),t=0;t<e.length;t++)r=e[t].split("|"),n=r[0],a=v(n),D[a]=e[t],P[a]=n,r[5]&&h(a,r[2].split(" "))}function b(e,t){e=v(e);var n,r=D[e];return r instanceof s?r:"string"==typeof r?(r=new s(r),D[e]=r,r):j[e]&&t!==b&&(n=b(j[e],b))?(r=D[e]=new s,r._set(n),r.name=P[e],r):null}function _(){var e,t=[];for(e in P)P.hasOwnProperty(e)&&(D[e]||D[j[e]])&&P[e]&&t.push(P[e]);return t.sort()}function w(e){var t,n,r,a;for("string"==typeof e&&(e=[e]),t=0;t<e.length;t++)n=e[t].split("|"),r=v(n[0]),a=v(n[1]),j[r]=a,P[r]=n[0],j[a]=r,P[a]=n[1]}function A(e){y(e.zones),w(e.links),T.dataVersion=e.version}function x(e){return x.didShowError||(x.didShowError=!0,k("moment.tz.zoneExists('"+e+"') has been deprecated in favor of !moment.tz.zone('"+e+"')")),!!b(e)}function M(e){return!(!e._a||void 0!==e._tzm)}function k(e){"undefined"!=typeof console&&"function"==typeof console.error&&console.error(e)}function T(t){var n=Array.prototype.slice.call(arguments,0,-1),r=arguments[arguments.length-1],a=b(r),i=e.utc.apply(null,n);return a&&!e.isMoment(t)&&M(i)&&i.add(a.parse(i),"minutes"),i.tz(r),i}function S(e){return function(){return this._z?this._z.abbr(this):e.call(this)}}function E(e){return function(){return this._z=null,e.apply(this,arguments)}}if(void 0!==e.tz)return k("Moment Timezone "+e.tz.version+" was already loaded "+(e.tz.dataVersion?"with data from ":"without any data")+e.tz.dataVersion),e;var C,O="0.5.10",D={},j={},P={},z={},N=e.version.split("."),W=+N[0],L=+N[1];(W<2||2===W&&L<6)&&k("Moment Timezone requires Moment.js >= 2.6.0. You are using Moment.js "+e.version+". See momentjs.com"),s.prototype={_set:function(e){this.name=e.name,this.abbrs=e.abbrs,this.untils=e.untils,this.offsets=e.offsets,this.population=e.population},_index:function(e){var t,n=+e,r=this.untils;for(t=0;t<r.length;t++)if(n<r[t])return t},parse:function(e){var t,n,r,a,i=+e,o=this.offsets,s=this.untils,u=s.length-1;for(a=0;a<u;a++)if(t=o[a],n=o[a+1],r=o[a?a-1:a],t<n&&T.moveAmbiguousForward?t=n:t>r&&T.moveInvalidForward&&(t=r),i<s[a]-6e4*t)return o[a];return o[u]},abbr:function(e){return this.abbrs[this._index(e)]},offset:function(e){return this.offsets[this._index(e)]}},c.prototype.scoreOffsetAt=function(e){this.offsetScore+=Math.abs(this.zone.offset(e.at)-e.offset),this.zone.abbr(e.at).replace(/[^A-Z]/g,"")!==e.abbr&&this.abbrScore++},T.version=O,T.dataVersion="",T._zones=D,T._links=j,T._names=P,T.add=y,T.link=w,T.load=A,T.zone=b,T.zoneExists=x,T.guess=g,T.names=_,T.Zone=s,T.unpack=o,T.unpackBase60=n,T.needsOffset=M,T.moveInvalidForward=!0,T.moveAmbiguousForward=!1;var R=e.fn;e.tz=T,e.defaultZone=null,e.updateOffset=function(t,n){var r,a=e.defaultZone;void 0===t._z&&(a&&M(t)&&!t._isUTC&&(t._d=e.utc(t._a)._d,t.utc().add(a.parse(t),"minutes")),t._z=a),t._z&&(r=t._z.offset(t),Math.abs(r)<16&&(r/=60),void 0!==t.utcOffset?t.utcOffset(-r,n):t.zone(r,n))},R.tz=function(t){return t?(this._z=b(t),this._z?e.updateOffset(this):k("Moment Timezone has no data for "+t+". See http://momentjs.com/timezone/docs/#/data-loading/."),this):this._z?this._z.name:void 0},R.zoneName=S(R.zoneName),R.zoneAbbr=S(R.zoneAbbr),R.utc=E(R.utc),e.tz.setDefault=function(t){return(W<2||2===W&&L<9)&&k("Moment Timezone setDefault() requires Moment.js >= 2.9.0. You are using Moment.js "+e.version+"."),e.defaultZone=t?b(t):null,e};var q=e.momentProperties;return"[object Array]"===Object.prototype.toString.call(q)?(q.push("_z"),q.push("_a")):q&&(q._z=null),A({version:"2016j",zones:["Africa/Abidjan|GMT|0|0||48e5","Africa/Khartoum|EAT|-30|0||51e5","Africa/Algiers|CET|-10|0||26e5","Africa/Lagos|WAT|-10|0||17e6","Africa/Maputo|CAT|-20|0||26e5","Africa/Cairo|EET EEST|-20 -30|010101010|1Cby0 Fb0 c10 8n0 8Nd0 gL0 e10 mn0|15e6","Africa/Casablanca|WET WEST|0 -10|01010101010101010101010101010101010101010|1Cco0 Db0 1zd0 Lz0 1Nf0 wM0 co0 go0 1o00 s00 dA0 vc0 11A0 A00 e00 y00 11A0 uM0 e00 Dc0 11A0 s00 e00 IM0 WM0 mo0 gM0 LA0 WM0 jA0 e00 Rc0 11A0 e00 e00 U00 11A0 8o0 e00 11A0|32e5","Europe/Paris|CET CEST|-10 -20|01010101010101010101010|1BWp0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|11e6","Africa/Johannesburg|SAST|-20|0||84e5","Africa/Tripoli|EET CET CEST|-20 -10 -20|0120|1IlA0 TA0 1o00|11e5","Africa/Windhoek|WAST WAT|-20 -10|01010101010101010101010|1C1c0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0|32e4","America/Adak|HST HDT|a0 90|01010101010101010101010|1BR00 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|326","America/Anchorage|AKST AKDT|90 80|01010101010101010101010|1BQX0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|30e4","America/Santo_Domingo|AST|40|0||29e5","America/Araguaina|BRT BRST|30 20|010|1IdD0 Lz0|14e4","America/Argentina/Buenos_Aires|ART|30|0|","America/Asuncion|PYST PYT|30 40|01010101010101010101010|1C430 1a10 1fz0 1a10 1fz0 1cN0 17b0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0|28e5","America/Panama|EST|50|0||15e5","America/Bahia|BRT BRST|30 20|010|1FJf0 Rb0|27e5","America/Bahia_Banderas|MST CDT CST|70 50 60|01212121212121212121212|1C1l0 1nW0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0|84e3","America/Fortaleza|BRT|30|0||34e5","America/Managua|CST|60|0||22e5","America/Manaus|AMT|40|0||19e5","America/Bogota|COT|50|0||90e5","America/Denver|MST MDT|70 60|01010101010101010101010|1BQV0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|26e5","America/Campo_Grande|AMST AMT|30 40|01010101010101010101010|1BIr0 1zd0 On0 1zd0 Rb0 1zd0 Lz0 1C10 Lz0 1C10 On0 1zd0 On0 1zd0 On0 1zd0 On0 1C10 Lz0 1C10 Lz0 1C10|77e4","America/Cancun|CST CDT EST|60 50 50|010101010102|1C1k0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 Dd0|63e4","America/Caracas|VET VET|4u 40|01|1QMT0|29e5","America/Cayenne|GFT|30|0||58e3","America/Chicago|CST CDT|60 50|01010101010101010101010|1BQU0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|92e5","America/Chihuahua|MST MDT|70 60|01010101010101010101010|1C1l0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0|81e4","America/Phoenix|MST|70|0||42e5","America/Los_Angeles|PST PDT|80 70|01010101010101010101010|1BQW0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|15e6","America/New_York|EST EDT|50 40|01010101010101010101010|1BQT0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|21e6","America/Rio_Branco|AMT ACT|40 50|01|1KLE0|31e4","America/Fort_Nelson|PST PDT MST|80 70 70|010101010102|1BQW0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0|39e2","America/Halifax|AST ADT|40 30|01010101010101010101010|1BQS0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|39e4","America/Godthab|WGT WGST|30 20|01010101010101010101010|1BWp0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|17e3","America/Goose_Bay|AST ADT|40 30|01010101010101010101010|1BQQ1 1zb0 Op0 1zcX Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|76e2","America/Grand_Turk|EST EDT AST|50 40 40|0101010101012|1BQT0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|37e2","America/Guayaquil|ECT|50|0||27e5","America/Guyana|GYT|40|0||80e4","America/Havana|CST CDT|50 40|01010101010101010101010|1BQR0 1wo0 U00 1zc0 U00 1qM0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0|21e5","America/La_Paz|BOT|40|0||19e5","America/Lima|PET|50|0||11e6","America/Mexico_City|CST CDT|60 50|01010101010101010101010|1C1k0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0|20e6","America/Metlakatla|PST AKST AKDT|80 90 80|012121212121|1PAa0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|14e2","America/Miquelon|PMST PMDT|30 20|01010101010101010101010|1BQR0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|61e2","America/Montevideo|UYST UYT|20 30|010101010101|1BQQ0 1ld0 14n0 1ld0 14n0 1o10 11z0 1o10 11z0 1o10 11z0|17e5","America/Noronha|FNT|20|0||30e2","America/North_Dakota/Beulah|MST MDT CST CDT|70 60 60 50|01232323232323232323232|1BQV0 1zb0 Oo0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0","America/Paramaribo|SRT|30|0||24e4","America/Port-au-Prince|EST EDT|50 40|010101010|1GI70 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|23e5","America/Santiago|CLST CLT|30 40|010101010101010101010|1C1f0 1fB0 1nX0 G10 1EL0 Op0 1zb0 Rd0 1wn0 Rd0 46n0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Ap0|62e5","America/Sao_Paulo|BRST BRT|20 30|01010101010101010101010|1BIq0 1zd0 On0 1zd0 Rb0 1zd0 Lz0 1C10 Lz0 1C10 On0 1zd0 On0 1zd0 On0 1zd0 On0 1C10 Lz0 1C10 Lz0 1C10|20e6","America/Scoresbysund|EGT EGST|10 0|01010101010101010101010|1BWp0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|452","America/St_Johns|NST NDT|3u 2u|01010101010101010101010|1BQPv 1zb0 Op0 1zcX Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|11e4","Antarctica/Casey|+11 +08|-b0 -80|01010|1BN30 40P0 KL0 blz0|10","Antarctica/Davis|+05 +07|-50 -70|0101|1BPw0 3Wn0 KN0|70","Antarctica/DumontDUrville|+10|-a0|0||80","Antarctica/Macquarie|AEDT MIST|-b0 -b0|01|1C140|1","Asia/Tashkent|+05|-50|0||23e5","Pacific/Auckland|NZDT NZST|-d0 -c0|01010101010101010101010|1C120 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00|14e5","Antarctica/Rothera|-03|30|0||130","Antarctica/Syowa|+03|-30|0||20","Antarctica/Troll|+00 +02|0 -20|01010101010101010101010|1BWp0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|40","Asia/Almaty|+06|-60|0||15e5","Asia/Baghdad|AST|-30|0||66e5","Asia/Amman|EET EEST|-20 -30|010101010101010101010|1BVy0 1qM0 11A0 1o00 11A0 4bX0 Dd0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0|25e5","Asia/Kamchatka|+12 +11|-c0 -b0|010|1Dp30 WM0|18e4","Asia/Baku|+04 +05|-40 -50|0101010101010|1BWo0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|27e5","Asia/Bangkok|ICT|-70|0||15e6","Asia/Barnaul|+06 +07|-60 -70|010101|1BWk0 1qM0 WM0 8Hz0 3rd0","Asia/Beirut|EET EEST|-20 -30|01010101010101010101010|1BWm0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0|22e5","Asia/Brunei|BNT|-80|0||42e4","Asia/Kolkata|IST|-5u|0||15e6","Asia/Chita|+09 +10 +08|-90 -a0 -80|010120|1BWh0 1qM0 WM0 8Hz0 3re0|33e4","Asia/Choibalsan|CHOT CHOST|-80 -90|0101010101010|1O8G0 1cJ0 1cP0 1cJ0 1cP0 1fx0 1cP0 1cJ0 1cP0 1cJ0 1cP0 1cJ0|38e3","Asia/Shanghai|CST|-80|0||23e6","Asia/Colombo|+0530|-5u|0||22e5","Asia/Dhaka|BDT|-60|0||16e6","Asia/Damascus|EET EEST|-20 -30|01010101010101010101010|1C0m0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0|26e5","Asia/Dili|TLT|-90|0||19e4","Asia/Dubai|GST|-40|0||39e5","Asia/Famagusta|EET EEST +03|-20 -30 -30|010101010101012|1BWp0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 15U0","Asia/Gaza|EET EEST|-20 -30|01010101010101010101010|1BVW1 SKX 1xd1 MKX 1AN0 1a00 1fA0 1cL0 1cN0 1nX0 1210 1nz0 1220 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0|18e5","Asia/Hebron|EET EEST|-20 -30|0101010101010101010101010|1BVy0 Tb0 1xd1 MKX bB0 cn0 1cN0 1a00 1fA0 1cL0 1cN0 1nX0 1210 1nz0 1220 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0|25e4","Asia/Hong_Kong|HKT|-80|0||73e5","Asia/Hovd|HOVT HOVST|-70 -80|0101010101010|1O8H0 1cJ0 1cP0 1cJ0 1cP0 1fx0 1cP0 1cJ0 1cP0 1cJ0 1cP0 1cJ0|81e3","Asia/Irkutsk|+08 +09|-80 -90|01010|1BWi0 1qM0 WM0 8Hz0|60e4","Europe/Istanbul|EET EEST +03|-20 -30 -30|010101010101012|1BWp0 1qM0 Xc0 1qo0 WM0 1qM0 11A0 1o00 1200 1nA0 11A0 1tA0 U00 15w0|13e6","Asia/Jakarta|WIB|-70|0||31e6","Asia/Jayapura|WIT|-90|0||26e4","Asia/Jerusalem|IST IDT|-20 -30|01010101010101010101010|1BVA0 17X0 1kp0 1dz0 1c10 1aL0 1eN0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0|81e4","Asia/Kabul|AFT|-4u|0||46e5","Asia/Karachi|PKT|-50|0||24e6","Asia/Urumqi|XJT|-60|0||32e5","Asia/Kathmandu|NPT|-5J|0||12e5","Asia/Khandyga|+10 +11 +09|-a0 -b0 -90|010102|1BWg0 1qM0 WM0 17V0 7zD0|66e2","Asia/Krasnoyarsk|+07 +08|-70 -80|01010|1BWj0 1qM0 WM0 8Hz0|10e5","Asia/Kuala_Lumpur|MYT|-80|0||71e5","Asia/Magadan|+11 +12 +10|-b0 -c0 -a0|010120|1BWf0 1qM0 WM0 8Hz0 3Cq0|95e3","Asia/Makassar|WITA|-80|0||15e5","Asia/Manila|PHT|-80|0||24e6","Europe/Athens|EET EEST|-20 -30|01010101010101010101010|1BWp0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|35e5","Asia/Novokuznetsk|+07 +06|-70 -60|010|1Dp80 WM0|55e4","Asia/Novosibirsk|+06 +07|-60 -70|010101|1BWk0 1qM0 WM0 8Hz0 4eN0|15e5","Asia/Omsk|+06 +07|-60 -70|01010|1BWk0 1qM0 WM0 8Hz0|12e5","Asia/Pyongyang|KST KST|-90 -8u|01|1P4D0|29e5","Asia/Rangoon|MMT|-6u|0||48e5","Asia/Sakhalin|+10 +11|-a0 -b0|010101|1BWg0 1qM0 WM0 8Hz0 3rd0|58e4","Asia/Seoul|KST|-90|0||23e6","Asia/Singapore|SGT|-80|0||56e5","Asia/Srednekolymsk|+11 +12|-b0 -c0|01010|1BWf0 1qM0 WM0 8Hz0|35e2","Asia/Tbilisi|+04|-40|0||11e5","Asia/Tehran|IRST IRDT|-3u -4u|01010101010101010101010|1BTUu 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0|14e6","Asia/Thimphu|BTT|-60|0||79e3","Asia/Tokyo|JST|-90|0||38e6","Asia/Tomsk|+06 +07|-60 -70|010101|1BWk0 1qM0 WM0 8Hz0 3Qp0|10e5","Asia/Ulaanbaatar|ULAT ULAST|-80 -90|0101010101010|1O8G0 1cJ0 1cP0 1cJ0 1cP0 1fx0 1cP0 1cJ0 1cP0 1cJ0 1cP0 1cJ0|12e5","Asia/Ust-Nera|+11 +12 +10|-b0 -c0 -a0|010102|1BWf0 1qM0 WM0 17V0 7zD0|65e2","Asia/Vladivostok|+10 +11|-a0 -b0|01010|1BWg0 1qM0 WM0 8Hz0|60e4","Asia/Yakutsk|+09 +10|-90 -a0|01010|1BWh0 1qM0 WM0 8Hz0|28e4","Asia/Yekaterinburg|+05 +06|-50 -60|01010|1BWl0 1qM0 WM0 8Hz0|14e5","Asia/Yerevan|+04 +05|-40 -50|01010|1BWm0 1qM0 WM0 1qM0|13e5","Atlantic/Azores|AZOT AZOST|10 0|01010101010101010101010|1BWp0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|25e4","Europe/Lisbon|WET WEST|0 -10|01010101010101010101010|1BWp0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|27e5","Atlantic/Cape_Verde|CVT|10|0||50e4","Atlantic/South_Georgia|GST|20|0||30","Atlantic/Stanley|FKST FKT|30 40|010|1C6R0 U10|21e2","Australia/Sydney|AEDT AEST|-b0 -a0|01010101010101010101010|1C140 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0|40e5","Australia/Adelaide|ACDT ACST|-au -9u|01010101010101010101010|1C14u 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0|11e5","Australia/Brisbane|AEST|-a0|0||20e5","Australia/Darwin|ACST|-9u|0||12e4","Australia/Eucla|ACWST|-8J|0||368","Australia/Lord_Howe|LHDT LHST|-b0 -au|01010101010101010101010|1C130 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu|347","Australia/Perth|AWST|-80|0||18e5","Pacific/Easter|EASST EAST|50 60|010101010101010101010|1C1f0 1fB0 1nX0 G10 1EL0 Op0 1zb0 Rd0 1wn0 Rd0 46n0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Ap0|30e2","Europe/Dublin|GMT IST|0 -10|01010101010101010101010|1BWp0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|12e5","Etc/GMT+1|-01|10|0|","Etc/GMT+10|-10|a0|0|","Etc/GMT+11|-11|b0|0|","Etc/GMT+12|-12|c0|0|","Etc/GMT+2|-02|20|0|","Etc/GMT+4|-04|40|0|","Etc/GMT+5|-05|50|0|","Etc/GMT+6|-06|60|0|","Etc/GMT+7|-07|70|0|","Etc/GMT+8|-08|80|0|","Etc/GMT+9|-09|90|0|","Etc/GMT-1|+01|-10|0|","Etc/GMT-11|+11|-b0|0|","Etc/GMT-12|+12|-c0|0|","Etc/GMT-13|+13|-d0|0|","Etc/GMT-14|+14|-e0|0|","Etc/GMT-2|+02|-20|0|","Etc/GMT-7|+07|-70|0|","Etc/GMT-8|+08|-80|0|","Etc/GMT-9|+09|-90|0|","Etc/UCT|UCT|0|0|","Etc/UTC|UTC|0|0|","Europe/Astrakhan|+03 +04|-30 -40|010101|1BWn0 1qM0 WM0 8Hz0 3rd0","Europe/London|GMT BST|0 -10|01010101010101010101010|1BWp0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|10e6","Europe/Chisinau|EET EEST|-20 -30|01010101010101010101010|1BWo0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|67e4","Europe/Kaliningrad|EET EEST +03|-20 -30 -30|01020|1BWo0 1qM0 WM0 8Hz0|44e4","Europe/Volgograd|+03 +04|-30 -40|01010|1BWn0 1qM0 WM0 8Hz0|10e5","Europe/Minsk|EET EEST +03|-20 -30 -30|0102|1BWo0 1qM0 WM0|19e5","Europe/Moscow|MSK MSD MSK|-30 -40 -40|01020|1BWn0 1qM0 WM0 8Hz0|16e6","Europe/Samara|+04 +03|-40 -30|010|1Dpb0 WM0|12e5","Europe/Saratov|+03 +04|-30 -40|010101|1BWn0 1qM0 WM0 8Hz0 5810","Europe/Simferopol|EET EEST MSK MSK|-20 -30 -40 -30|01010101023|1BWp0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11z0 1nW0|33e4","Pacific/Honolulu|HST|a0|0||37e4","Indian/Chagos|IOT|-60|0||30e2","Indian/Christmas|CXT|-70|0||21e2","Indian/Cocos|CCT|-6u|0||596","Indian/Mahe|SCT|-40|0||79e3","Indian/Maldives|MVT|-50|0||35e4","Indian/Mauritius|MUT|-40|0||15e4","Indian/Reunion|RET|-40|0||84e4","Pacific/Majuro|MHT|-c0|0||28e3","MET|MET MEST|-10 -20|01010101010101010101010|1BWp0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00","Pacific/Chatham|CHADT CHAST|-dJ -cJ|01010101010101010101010|1C120 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00|600","Pacific/Apia|SST SDT WSDT WSST|b0 a0 -e0 -d0|01012323232323232323232|1Dbn0 1ff0 1a00 CI0 AQ0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00|37e3","Pacific/Bougainville|PGT BST|-a0 -b0|01|1NwE0|18e4","Pacific/Chuuk|CHUT|-a0|0||49e3","Pacific/Efate|VUT|-b0|0||66e3","Pacific/Enderbury|PHOT|-d0|0||1","Pacific/Fakaofo|TKT TKT|b0 -d0|01|1Gfn0|483","Pacific/Fiji|FJST FJT|-d0 -c0|01010101010101010101010|1BWe0 1o00 Rc0 1wo0 Ao0 1Nc0 Ao0 1Q00 xz0 1SN0 uM0 1SM0 uM0 1VA0 s00 1VA0 uM0 1SM0 uM0 1SM0 uM0 1SM0|88e4","Pacific/Funafuti|TVT|-c0|0||45e2","Pacific/Galapagos|GALT|60|0||25e3","Pacific/Gambier|GAMT|90|0||125","Pacific/Guadalcanal|SBT|-b0|0||11e4","Pacific/Guam|ChST|-a0|0||17e4","Pacific/Kiritimati|LINT|-e0|0||51e2","Pacific/Kosrae|KOST|-b0|0||66e2","Pacific/Marquesas|MART|9u|0||86e2","Pacific/Pago_Pago|SST|b0|0||37e2","Pacific/Nauru|NRT|-c0|0||10e3","Pacific/Niue|NUT|b0|0||12e2","Pacific/Norfolk|NFT NFT|-bu -b0|01|1PoCu|25e4","Pacific/Noumea|NCT|-b0|0||98e3","Pacific/Palau|PWT|-90|0||21e3","Pacific/Pitcairn|PST|80|0||56","Pacific/Pohnpei|PONT|-b0|0||34e3","Pacific/Port_Moresby|PGT|-a0|0||25e4","Pacific/Rarotonga|CKT|a0|0||13e3","Pacific/Tahiti|TAHT|a0|0||18e4","Pacific/Tarawa|GILT|-c0|0||29e3","Pacific/Tongatapu|+13 +14|-d0 -e0|0101010101|1S4d0 s00 1VA0 uM0 1SM0 uM0 1SM0 uM0 1SM0|75e3","Pacific/Wake|WAKT|-c0|0||16e3","Pacific/Wallis|WFT|-c0|0||94"],links:["Africa/Abidjan|Africa/Accra","Africa/Abidjan|Africa/Bamako","Africa/Abidjan|Africa/Banjul","Africa/Abidjan|Africa/Bissau","Africa/Abidjan|Africa/Conakry","Africa/Abidjan|Africa/Dakar","Africa/Abidjan|Africa/Freetown","Africa/Abidjan|Africa/Lome","Africa/Abidjan|Africa/Monrovia","Africa/Abidjan|Africa/Nouakchott","Africa/Abidjan|Africa/Ouagadougou","Africa/Abidjan|Africa/Sao_Tome","Africa/Abidjan|Africa/Timbuktu","Africa/Abidjan|America/Danmarkshavn","Africa/Abidjan|Atlantic/Reykjavik","Africa/Abidjan|Atlantic/St_Helena","Africa/Abidjan|Etc/GMT","Africa/Abidjan|Etc/GMT+0","Africa/Abidjan|Etc/GMT-0","Africa/Abidjan|Etc/GMT0","Africa/Abidjan|Etc/Greenwich","Africa/Abidjan|GMT","Africa/Abidjan|GMT+0","Africa/Abidjan|GMT-0","Africa/Abidjan|GMT0","Africa/Abidjan|Greenwich","Africa/Abidjan|Iceland","Africa/Algiers|Africa/Tunis","Africa/Cairo|Egypt","Africa/Casablanca|Africa/El_Aaiun","Africa/Johannesburg|Africa/Maseru","Africa/Johannesburg|Africa/Mbabane","Africa/Khartoum|Africa/Addis_Ababa","Africa/Khartoum|Africa/Asmara","Africa/Khartoum|Africa/Asmera","Africa/Khartoum|Africa/Dar_es_Salaam","Africa/Khartoum|Africa/Djibouti","Africa/Khartoum|Africa/Juba","Africa/Khartoum|Africa/Kampala","Africa/Khartoum|Africa/Mogadishu","Africa/Khartoum|Africa/Nairobi","Africa/Khartoum|Indian/Antananarivo","Africa/Khartoum|Indian/Comoro","Africa/Khartoum|Indian/Mayotte","Africa/Lagos|Africa/Bangui","Africa/Lagos|Africa/Brazzaville","Africa/Lagos|Africa/Douala","Africa/Lagos|Africa/Kinshasa","Africa/Lagos|Africa/Libreville","Africa/Lagos|Africa/Luanda","Africa/Lagos|Africa/Malabo","Africa/Lagos|Africa/Ndjamena","Africa/Lagos|Africa/Niamey","Africa/Lagos|Africa/Porto-Novo","Africa/Maputo|Africa/Blantyre","Africa/Maputo|Africa/Bujumbura","Africa/Maputo|Africa/Gaborone","Africa/Maputo|Africa/Harare","Africa/Maputo|Africa/Kigali","Africa/Maputo|Africa/Lubumbashi","Africa/Maputo|Africa/Lusaka","Africa/Tripoli|Libya","America/Adak|America/Atka","America/Adak|US/Aleutian","America/Anchorage|America/Juneau","America/Anchorage|America/Nome","America/Anchorage|America/Sitka","America/Anchorage|America/Yakutat","America/Anchorage|US/Alaska","America/Argentina/Buenos_Aires|America/Argentina/Catamarca","America/Argentina/Buenos_Aires|America/Argentina/ComodRivadavia","America/Argentina/Buenos_Aires|America/Argentina/Cordoba","America/Argentina/Buenos_Aires|America/Argentina/Jujuy","America/Argentina/Buenos_Aires|America/Argentina/La_Rioja","America/Argentina/Buenos_Aires|America/Argentina/Mendoza","America/Argentina/Buenos_Aires|America/Argentina/Rio_Gallegos","America/Argentina/Buenos_Aires|America/Argentina/Salta","America/Argentina/Buenos_Aires|America/Argentina/San_Juan","America/Argentina/Buenos_Aires|America/Argentina/San_Luis","America/Argentina/Buenos_Aires|America/Argentina/Tucuman","America/Argentina/Buenos_Aires|America/Argentina/Ushuaia","America/Argentina/Buenos_Aires|America/Buenos_Aires","America/Argentina/Buenos_Aires|America/Catamarca","America/Argentina/Buenos_Aires|America/Cordoba","America/Argentina/Buenos_Aires|America/Jujuy","America/Argentina/Buenos_Aires|America/Mendoza","America/Argentina/Buenos_Aires|America/Rosario","America/Campo_Grande|America/Cuiaba","America/Chicago|America/Indiana/Knox","America/Chicago|America/Indiana/Tell_City","America/Chicago|America/Knox_IN","America/Chicago|America/Matamoros","America/Chicago|America/Menominee","America/Chicago|America/North_Dakota/Center","America/Chicago|America/North_Dakota/New_Salem","America/Chicago|America/Rainy_River","America/Chicago|America/Rankin_Inlet","America/Chicago|America/Resolute","America/Chicago|America/Winnipeg","America/Chicago|CST6CDT","America/Chicago|Canada/Central","America/Chicago|US/Central","America/Chicago|US/Indiana-Starke","America/Chihuahua|America/Mazatlan","America/Chihuahua|Mexico/BajaSur","America/Denver|America/Boise","America/Denver|America/Cambridge_Bay","America/Denver|America/Edmonton","America/Denver|America/Inuvik","America/Denver|America/Ojinaga","America/Denver|America/Shiprock","America/Denver|America/Yellowknife","America/Denver|Canada/Mountain","America/Denver|MST7MDT","America/Denver|Navajo","America/Denver|US/Mountain","America/Fortaleza|America/Belem","America/Fortaleza|America/Maceio","America/Fortaleza|America/Recife","America/Fortaleza|America/Santarem","America/Halifax|America/Glace_Bay","America/Halifax|America/Moncton","America/Halifax|America/Thule","America/Halifax|Atlantic/Bermuda","America/Halifax|Canada/Atlantic","America/Havana|Cuba","America/Los_Angeles|America/Dawson","America/Los_Angeles|America/Ensenada","America/Los_Angeles|America/Santa_Isabel","America/Los_Angeles|America/Tijuana","America/Los_Angeles|America/Vancouver","America/Los_Angeles|America/Whitehorse","America/Los_Angeles|Canada/Pacific","America/Los_Angeles|Canada/Yukon","America/Los_Angeles|Mexico/BajaNorte","America/Los_Angeles|PST8PDT","America/Los_Angeles|US/Pacific","America/Los_Angeles|US/Pacific-New","America/Managua|America/Belize","America/Managua|America/Costa_Rica","America/Managua|America/El_Salvador","America/Managua|America/Guatemala","America/Managua|America/Regina","America/Managua|America/Swift_Current","America/Managua|America/Tegucigalpa","America/Managua|Canada/East-Saskatchewan","America/Managua|Canada/Saskatchewan","America/Manaus|America/Boa_Vista","America/Manaus|America/Porto_Velho","America/Manaus|Brazil/West","America/Mexico_City|America/Merida","America/Mexico_City|America/Monterrey","America/Mexico_City|Mexico/General","America/New_York|America/Detroit","America/New_York|America/Fort_Wayne","America/New_York|America/Indiana/Indianapolis","America/New_York|America/Indiana/Marengo","America/New_York|America/Indiana/Petersburg","America/New_York|America/Indiana/Vevay","America/New_York|America/Indiana/Vincennes","America/New_York|America/Indiana/Winamac","America/New_York|America/Indianapolis","America/New_York|America/Iqaluit","America/New_York|America/Kentucky/Louisville","America/New_York|America/Kentucky/Monticello","America/New_York|America/Louisville","America/New_York|America/Montreal","America/New_York|America/Nassau","America/New_York|America/Nipigon","America/New_York|America/Pangnirtung","America/New_York|America/Thunder_Bay","America/New_York|America/Toronto","America/New_York|Canada/Eastern","America/New_York|EST5EDT","America/New_York|US/East-Indiana","America/New_York|US/Eastern","America/New_York|US/Michigan","America/Noronha|Brazil/DeNoronha","America/Panama|America/Atikokan","America/Panama|America/Cayman","America/Panama|America/Coral_Harbour","America/Panama|America/Jamaica","America/Panama|EST","America/Panama|Jamaica","America/Phoenix|America/Creston","America/Phoenix|America/Dawson_Creek","America/Phoenix|America/Hermosillo","America/Phoenix|MST","America/Phoenix|US/Arizona","America/Rio_Branco|America/Eirunepe","America/Rio_Branco|America/Porto_Acre","America/Rio_Branco|Brazil/Acre","America/Santiago|Antarctica/Palmer","America/Santiago|Chile/Continental","America/Santo_Domingo|America/Anguilla","America/Santo_Domingo|America/Antigua","America/Santo_Domingo|America/Aruba","America/Santo_Domingo|America/Barbados","America/Santo_Domingo|America/Blanc-Sablon","America/Santo_Domingo|America/Curacao","America/Santo_Domingo|America/Dominica","America/Santo_Domingo|America/Grenada","America/Santo_Domingo|America/Guadeloupe","America/Santo_Domingo|America/Kralendijk","America/Santo_Domingo|America/Lower_Princes","America/Santo_Domingo|America/Marigot","America/Santo_Domingo|America/Martinique","America/Santo_Domingo|America/Montserrat","America/Santo_Domingo|America/Port_of_Spain","America/Santo_Domingo|America/Puerto_Rico","America/Santo_Domingo|America/St_Barthelemy","America/Santo_Domingo|America/St_Kitts","America/Santo_Domingo|America/St_Lucia","America/Santo_Domingo|America/St_Thomas","America/Santo_Domingo|America/St_Vincent","America/Santo_Domingo|America/Tortola","America/Santo_Domingo|America/Virgin","America/Sao_Paulo|Brazil/East","America/St_Johns|Canada/Newfoundland","Antarctica/DumontDUrville|Etc/GMT-10","Antarctica/Rothera|Etc/GMT+3","Antarctica/Syowa|Etc/GMT-3","Asia/Almaty|Antarctica/Vostok","Asia/Almaty|Asia/Bishkek","Asia/Almaty|Asia/Qyzylorda","Asia/Almaty|Etc/GMT-6","Asia/Baghdad|Asia/Aden","Asia/Baghdad|Asia/Bahrain","Asia/Baghdad|Asia/Kuwait","Asia/Baghdad|Asia/Qatar","Asia/Baghdad|Asia/Riyadh","Asia/Bangkok|Asia/Ho_Chi_Minh","Asia/Bangkok|Asia/Phnom_Penh","Asia/Bangkok|Asia/Saigon","Asia/Bangkok|Asia/Vientiane","Asia/Dhaka|Asia/Dacca","Asia/Dubai|Asia/Muscat","Asia/Hong_Kong|Hongkong","Asia/Jakarta|Asia/Pontianak","Asia/Jerusalem|Asia/Tel_Aviv","Asia/Jerusalem|Israel","Asia/Kamchatka|Asia/Anadyr","Asia/Kathmandu|Asia/Katmandu","Asia/Kolkata|Asia/Calcutta","Asia/Kuala_Lumpur|Asia/Kuching","Asia/Makassar|Asia/Ujung_Pandang","Asia/Rangoon|Asia/Yangon","Asia/Seoul|ROK","Asia/Shanghai|Asia/Chongqing","Asia/Shanghai|Asia/Chungking","Asia/Shanghai|Asia/Harbin","Asia/Shanghai|Asia/Macao","Asia/Shanghai|Asia/Macau","Asia/Shanghai|Asia/Taipei","Asia/Shanghai|PRC","Asia/Shanghai|ROC","Asia/Singapore|Singapore","Asia/Tashkent|Antarctica/Mawson","Asia/Tashkent|Asia/Aqtau","Asia/Tashkent|Asia/Aqtobe","Asia/Tashkent|Asia/Ashgabat","Asia/Tashkent|Asia/Ashkhabad","Asia/Tashkent|Asia/Atyrau","Asia/Tashkent|Asia/Dushanbe","Asia/Tashkent|Asia/Oral","Asia/Tashkent|Asia/Samarkand","Asia/Tashkent|Etc/GMT-5","Asia/Tashkent|Indian/Kerguelen","Asia/Tbilisi|Etc/GMT-4","Asia/Tehran|Iran","Asia/Thimphu|Asia/Thimbu","Asia/Tokyo|Japan","Asia/Ulaanbaatar|Asia/Ulan_Bator","Asia/Urumqi|Asia/Kashgar","Australia/Adelaide|Australia/Broken_Hill","Australia/Adelaide|Australia/South","Australia/Adelaide|Australia/Yancowinna","Australia/Brisbane|Australia/Lindeman","Australia/Brisbane|Australia/Queensland","Australia/Darwin|Australia/North","Australia/Lord_Howe|Australia/LHI","Australia/Perth|Australia/West","Australia/Sydney|Australia/ACT","Australia/Sydney|Australia/Canberra","Australia/Sydney|Australia/Currie","Australia/Sydney|Australia/Hobart","Australia/Sydney|Australia/Melbourne","Australia/Sydney|Australia/NSW","Australia/Sydney|Australia/Tasmania","Australia/Sydney|Australia/Victoria","Etc/UCT|UCT","Etc/UTC|Etc/Universal","Etc/UTC|Etc/Zulu","Etc/UTC|UTC","Etc/UTC|Universal","Etc/UTC|Zulu","Europe/Astrakhan|Europe/Ulyanovsk","Europe/Athens|Asia/Nicosia","Europe/Athens|EET","Europe/Athens|Europe/Bucharest","Europe/Athens|Europe/Helsinki","Europe/Athens|Europe/Kiev","Europe/Athens|Europe/Mariehamn","Europe/Athens|Europe/Nicosia","Europe/Athens|Europe/Riga","Europe/Athens|Europe/Sofia","Europe/Athens|Europe/Tallinn","Europe/Athens|Europe/Uzhgorod","Europe/Athens|Europe/Vilnius","Europe/Athens|Europe/Zaporozhye","Europe/Chisinau|Europe/Tiraspol","Europe/Dublin|Eire","Europe/Istanbul|Asia/Istanbul","Europe/Istanbul|Turkey","Europe/Lisbon|Atlantic/Canary","Europe/Lisbon|Atlantic/Faeroe","Europe/Lisbon|Atlantic/Faroe","Europe/Lisbon|Atlantic/Madeira","Europe/Lisbon|Portugal","Europe/Lisbon|WET","Europe/London|Europe/Belfast","Europe/London|Europe/Guernsey","Europe/London|Europe/Isle_of_Man","Europe/London|Europe/Jersey","Europe/London|GB","Europe/London|GB-Eire","Europe/Moscow|W-SU","Europe/Paris|Africa/Ceuta","Europe/Paris|Arctic/Longyearbyen","Europe/Paris|Atlantic/Jan_Mayen","Europe/Paris|CET","Europe/Paris|Europe/Amsterdam","Europe/Paris|Europe/Andorra","Europe/Paris|Europe/Belgrade","Europe/Paris|Europe/Berlin","Europe/Paris|Europe/Bratislava","Europe/Paris|Europe/Brussels","Europe/Paris|Europe/Budapest","Europe/Paris|Europe/Busingen","Europe/Paris|Europe/Copenhagen","Europe/Paris|Europe/Gibraltar","Europe/Paris|Europe/Ljubljana","Europe/Paris|Europe/Luxembourg","Europe/Paris|Europe/Madrid","Europe/Paris|Europe/Malta","Europe/Paris|Europe/Monaco","Europe/Paris|Europe/Oslo","Europe/Paris|Europe/Podgorica","Europe/Paris|Europe/Prague","Europe/Paris|Europe/Rome","Europe/Paris|Europe/San_Marino","Europe/Paris|Europe/Sarajevo","Europe/Paris|Europe/Skopje","Europe/Paris|Europe/Stockholm","Europe/Paris|Europe/Tirane","Europe/Paris|Europe/Vaduz","Europe/Paris|Europe/Vatican","Europe/Paris|Europe/Vienna","Europe/Paris|Europe/Warsaw","Europe/Paris|Europe/Zagreb","Europe/Paris|Europe/Zurich","Europe/Paris|Poland","Europe/Volgograd|Europe/Kirov","Pacific/Auckland|Antarctica/McMurdo","Pacific/Auckland|Antarctica/South_Pole","Pacific/Auckland|NZ","Pacific/Chatham|NZ-CHAT","Pacific/Chuuk|Pacific/Truk","Pacific/Chuuk|Pacific/Yap","Pacific/Easter|Chile/EasterIsland","Pacific/Guam|Pacific/Saipan","Pacific/Honolulu|HST","Pacific/Honolulu|Pacific/Johnston","Pacific/Honolulu|US/Hawaii","Pacific/Majuro|Kwajalein","Pacific/Majuro|Pacific/Kwajalein","Pacific/Pago_Pago|Pacific/Midway","Pacific/Pago_Pago|Pacific/Samoa","Pacific/Pago_Pago|US/Samoa","Pacific/Pohnpei|Pacific/Ponape"] +var n=pf(e,t);return!n||!Fl(kf,t)||Fl(e,wf)&&e[wf][t]||(n.enumerable=!0),n}},qf=function(e){for(var t,n=gf(of(e)),r=[],a=0;n.length>a;)Fl(kf,t=n[a++])||t==wf||t==$l||r.push(t);return r},Yf=function(e){for(var t,n=e===Sf,r=gf(n?Tf:of(e)),a=[],i=0;r.length>i;)!Fl(kf,t=r[i++])||n&&!Fl(Sf,t)||a.push(kf[t]);return a};Ef||(vf=function(){if(this instanceof vf)throw TypeError("Symbol is not a constructor!");var e=Jl(arguments.length>0?arguments[0]:void 0),t=function(n){this===Sf&&t.call(Tf,n),Fl(this,wf)&&Fl(this[wf],e)&&(this[wf][e]=!1),Df(this,e,uf(1,n))};return Il&&Of&&Df(Sf,e,{configurable:!0,set:t}),jf(e)},Gl(vf[_f],"toString",function(){return this._k}),ff.f=Rf,df.f=zf,Yu.f=lf.f=qf,Zr.f=Lf,Xr.f=Yf,Il&&!ga&&Gl(Sf,"propertyIsEnumerable",Lf,!0),Ql.f=function(e){return jf(Zl(e))}),Ul(Ul.G+Ul.W+Ul.F*!Ef,{Symbol:vf});for(var Bf="hasInstance,isConcatSpreadable,iterator,match,replace,search,species,split,toPrimitive,toStringTag,unscopables".split(","),Hf=0;Bf.length>Hf;)Zl(Bf[Hf++]);for(var Bf=hf(Zl.store),Hf=0;Bf.length>Hf;)ef(Bf[Hf++]);Ul(Ul.S+Ul.F*!Ef,"Symbol",{for:function(e){return Fl(Mf,e+="")?Mf[e]:Mf[e]=vf(e)},keyFor:function(e){if(Pf(e))return tf(Mf,e);throw TypeError(e+" is not a symbol!")},useSetter:function(){Of=!0},useSimple:function(){Of=!1}}),Ul(Ul.S+Ul.F*!Ef,"Object",{create:Wf,defineProperty:zf,defineProperties:Nf,getOwnPropertyDescriptor:Rf,getOwnPropertyNames:qf,getOwnPropertySymbols:Yf}),yf&&Ul(Ul.S+Ul.F*(!Ef||Vl(function(){var e=vf();return"[null]"!=bf([e])||"{}"!=bf({a:e})||"{}"!=bf(Object(e))})),"JSON",{stringify:function(e){if(void 0!==e&&!Pf(e)){for(var t,n,r=[e],a=1;arguments.length>a;)r.push(arguments[a++]);return t=r[1],"function"==typeof t&&(n=t),!n&&rf(t)||(t=function(e,t){if(n&&(t=n.call(this,e,t)),!Pf(t))return t}),r[1]=t,bf.apply(yf,r)}}}),vf[_f][Af]||Zn(vf[_f],Af,vf[_f].valueOf),Xl(vf,"Symbol"),Xl(Math,"Math",!0),Xl(Hl.JSON,"JSON",!0),gl("asyncIterator"),gl("observable");var Ff=Sn.Symbol,If=n(function(e){e.exports={default:Ff,__esModule:!0}}),Uf=n(function(e,t){function n(e){return e&&e.__esModule?e:{default:e}}t.__esModule=!0;var r=cl,a=n(r),i=If,o=n(i),s="function"==typeof o.default&&"symbol"==typeof a.default?function(e){return typeof e}:function(e){return e&&"function"==typeof o.default&&e.constructor===o.default&&e!==o.default.prototype?"symbol":typeof e};t.default="function"==typeof o.default&&"symbol"===s(a.default)?function(e){return"undefined"==typeof e?"undefined":s(e)}:function(e){return e&&"function"==typeof o.default&&e.constructor===o.default&&e!==o.default.prototype?"symbol":"undefined"==typeof e?"undefined":s(e)}}),Gf=t(Uf),$f=new RegExp("https?://","i"),Vf=new RegExp(".(png|gif|jpe?g)","i"),Kf=["script","style","form"].join(","),Xf={create:function(e,t,n){var r=this;return ps(kn.mark(function a(){var i,o;return kn.wrap(function(a){for(;;)switch(a.prev=a.next){case 0:if(i=void 0,!t){a.next=6;break}o={statusMessage:"OK",statusCode:200,headers:{"content-type":"text/html","content-length":500}},i={body:t,response:o},a.next=9;break;case 6:return a.next=8,Wu(e,n);case 8:i=a.sent;case 9:if(!i.error){a.next=12;break}return i.failed=!0,a.abrupt("return",i);case 12:return a.abrupt("return",r.generateDoc(i));case 13:case"end":return a.stop()}},a,r)}))()},generateDoc:function(e){var t=e.body,n=e.response,r=n.headers["content-type"];if(!r.includes("html")&&!r.includes("text"))throw new Error("Content does not appear to be text.");var a=this.encodeDoc({content:t,contentType:r});if(0===a.root().children().length)throw new Error("No children, likely a bad parse.");return a=X(a),a=$e(a),a=Xe(a)},encodeDoc:function(e){var t=e.content,n=e.contentType,r=j(n),a=Vs.decode(t,r),i=Us.load(a),o=i("meta[http-equiv=content-type]").attr("content"),s=j(o);return s!==r&&(a=Vs.decode(t,s),i=Us.load(a)),i}},Jf=ir,Zf=Sn,Qf=zn,ed=function(e,t){var n=(Zf.Object||{})[e]||Object[e],r={};r[e]=t(n),Jf(Jf.S+Jf.F*Qf(function(){n(1)}),"Object",r)},td=ea,nd=Vr;ed("keys",function(){return function(e){return nd(td(e))}});var rd=Sn.Object.keys,ad=n(function(e){e.exports={default:rd,__esModule:!0}}),id=t(ad),od=function(e,t){return t.reduce(function(t,n){return t[n]=e,t},{})},sd={domain:"blogspot.com",content:{selectors:[".post-content noscript"],clean:[],transforms:{noscript:"div"}},author:{selectors:[".post-author-name"]},title:{selectors:[".post h2.title"]},date_published:{selectors:["span.publishdate"]}},ud={domain:"nymag.com",content:{selectors:["div.article-content","section.body","article.article"],clean:[".ad",".single-related-story"],transforms:{h1:"h2",noscript:function(e,t){var n=t.browser?t(e.text()):e.children();return 1===n.length&&void 0!==n.get(0)&&"img"===n.get(0).tagName.toLowerCase()?"figure":null}}},title:{selectors:["h1.lede-feature-title","h1.headline-primary","h1"]},author:{selectors:[".by-authors",".lede-feature-author"]},dek:{selectors:[".lede-feature-teaser"]},date_published:{selectors:[["time.article-timestamp[datetime]","datetime"],"time.article-timestamp"]}},cd={domain:"wikipedia.org",content:{selectors:["#mw-content-text"],defaultCleaner:!1,transforms:{".infobox img":function(e){var t=e.parents(".infobox");0===t.children("img").length&&t.prepend(e)},".infobox caption":"figcaption",".infobox":"figure"},clean:[".mw-editsection","figure tr, figure td, figure tbody","#toc",".navbox"]},author:"Wikipedia Contributors",title:{selectors:["h2.title"]},date_published:{selectors:["#footer-info-lastmod"]}},ld={domain:"twitter.com",content:{transforms:{".permalink[role=main]":function(e,t){var n=e.find(".tweet"),r=t('<div id="TWEETS_GO_HERE"></div>');r.append(n),e.replaceWith(r)},s:"span"},selectors:[".permalink[role=main]"],defaultCleaner:!1,clean:[".stream-item-footer","button",".tweet-details-fixer"]},author:{selectors:[".tweet.permalink-tweet .username"]},date_published:{selectors:[[".permalink-tweet ._timestamp[data-time-ms]","data-time-ms"]]}},fd={domain:"www.nytimes.com",title:{selectors:["h1.g-headline",'h1[itemprop="headline"]',"h1.headline"]},author:{selectors:[['meta[name="author"]',"value"],".g-byline",".byline"]},content:{selectors:["div.g-blocks","article#story"],transforms:{"img.g-lazy":function(e){var t=e.attr("src"),n=640;t=t.replace("{{size}}",n),e.attr("src",t)}},clean:[".ad","header#story-header",".story-body-1 .lede.video",".visually-hidden","#newsletter-promo",".promo",".comments-button",".hidden",".comments",".supplemental",".nocontent",".story-footer-links"]},date_published:{selectors:[['meta[name="article:published"]',"value"]]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},dek:null,next_page_url:null,excerpt:null},dd={domain:"www.theatlantic.com",title:{selectors:["h1.hed"]},author:{selectors:["article#article .article-cover-extra .metadata .byline a"]},content:{selectors:[[".article-cover figure.lead-img",".article-body"],".article-body"],transforms:[],clean:[".partner-box",".callout"]},date_published:{selectors:[['time[itemProp="datePublished"]',"datetime"]]},lead_image_url:null,next_page_url:null,excerpt:null},hd={domain:"www.newyorker.com",title:{selectors:["h1.title"]},author:{selectors:[".contributors"]},content:{selectors:["div#articleBody","div.articleBody"],transforms:[],clean:[]},date_published:{selectors:[['meta[name="article:published_time"]',"value"],['time[itemProp="datePublished"]',"content"]],timezone:"America/New_York"},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},dek:{selectors:[".dek","h2.dek"]},next_page_url:null,excerpt:null},pd={domain:"www.wired.com",title:{selectors:["h1.post-title"]},author:{selectors:['a[rel="author"]']},content:{selectors:["article.content"],transforms:[],clean:[".visually-hidden","figcaption img.photo"]},date_published:{selectors:[['meta[itemprop="datePublished"]',"value"]]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},dek:{selectors:[]},next_page_url:null,excerpt:null},md={domain:"www.msn.com",title:{selectors:["h1"]},author:{selectors:["span.authorname-txt"]},content:{selectors:["div.richtext"],transforms:[],clean:["span.caption"]},date_published:{selectors:["span.time"]},lead_image_url:{selectors:[]},dek:{selectors:[]},next_page_url:null,excerpt:null},gd={domain:"www.yahoo.com",title:{selectors:["header.canvas-header"]},author:{selectors:["span.provider-name"]},content:{selectors:[".content-canvas"],transforms:[],clean:[".figure-caption"]},date_published:{selectors:[["time.date[datetime]","datetime"]]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},dek:{selectors:[]},next_page_url:null,excerpt:null},vd={domain:"www.buzzfeed.com",title:{selectors:['h1[id="post-title"]']},author:{selectors:['a[data-action="user/username"]',"byline__author"]},content:{selectors:[[".longform_custom_header_media","#buzz_sub_buzz"],"#buzz_sub_buzz"],defaultCleaner:!1,transforms:{h2:"b","div.longform_custom_header_media":function(e){return e.has("img")&&e.has(".longform_header_image_source")?"figure":null},"figure.longform_custom_header_media .longform_header_image_source":"figcaption"},clean:[".instapaper_ignore",".suplist_list_hide .buzz_superlist_item .buzz_superlist_number_inline",".share-box",".print"]},date_published:{selectors:[".buzz-datetime"]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},dek:{selectors:[]},next_page_url:null,excerpt:null},yd={domain:"fandom.wikia.com",title:{selectors:["h1.entry-title"]},author:{selectors:[".author vcard",".fn"]},content:{selectors:[".grid-content",".entry-content"],transforms:[],clean:[]},date_published:{selectors:[['meta[name="article:published_time"]',"value"]]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},dek:{selectors:[]},next_page_url:null,excerpt:null},bd={domain:"www.littlethings.com",title:{selectors:["h1.post-title"]},author:{selectors:[['meta[name="author"]',"value"]]},content:{selectors:[".mainContentIntro",".content-wrapper"],transforms:[],clean:[]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},next_page_url:null,excerpt:null},_d={domain:"www.politico.com",title:{selectors:[['meta[name="og:title"]',"value"]]},author:{selectors:[".story-main-content .byline .vcard"]},content:{selectors:[".story-main-content",".content-group",".story-core",".story-text"],transforms:[],clean:["figcaption"]},date_published:{selectors:[[".story-main-content .timestamp time[datetime]","datetime"]]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},dek:{selectors:[]},next_page_url:null,excerpt:null},wd={domain:"deadspin.com",supportedDomains:["jezebel.com","lifehacker.com","kotaku.com","gizmodo.com","jalopnik.com","kinja.com"],title:{selectors:["h1.headline"]},author:{selectors:[".author"]},content:{selectors:[".post-content",".entry-content"],transforms:{'iframe.lazyload[data-recommend-id^="youtube://"]':function(e){var t=e.attr("id").split("youtube-")[1];e.attr("src","https://www.youtube.com/embed/"+t)}},clean:[".magnifier",".lightbox"]},date_published:{selectors:[["time.updated[datetime]","datetime"]]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},dek:{selectors:[]},next_page_url:{selectors:[]},excerpt:{selectors:[]}},Ad={domain:"www.broadwayworld.com",title:{selectors:["h1.article-title"]},author:{selectors:["span[itemprop=author]"]},content:{selectors:["div[itemprop=articlebody]"],transforms:{},clean:[]},date_published:{selectors:[["meta[itemprop=datePublished]","value"]]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},dek:{selectors:[]},next_page_url:{selectors:[]},excerpt:{selectors:[]}},xd={domain:"www.apartmenttherapy.com",title:{selectors:["h1.headline"]},author:{selectors:[".PostByline__name"]},content:{selectors:["div.post__content"],transforms:{'div[data-render-react-id="images/LazyPicture"]':function(e,t){var n=JSON.parse(e.attr("data-props")),r=n.sources[0].src,a=t("<img />").attr("src",r);e.replaceWith(a)}},clean:[]},date_published:{selectors:[[".PostByline__timestamp[datetime]","datetime"]]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},dek:{selectors:[]},next_page_url:{selectors:[]},excerpt:{selectors:[]}},Md={domain:"medium.com",supportedDomains:["trackchanges.postlight.com"],title:{selectors:["h1"]},author:{selectors:[['meta[name="author"]',"value"]]},content:{selectors:[[".section-content"],".section-content","article > div > section"],transforms:{iframe:function(e){var t=/https:\/\/i.embed.ly\/.+url=https:\/\/i\.ytimg\.com\/vi\/(\w+)\//,n=decodeURIComponent(e.attr("data-thumbnail"));if(t.test(n)){var r=n.match(t),a=mu(r,2),i=(a[0],a[1]);e.attr("src","https://www.youtube.com/embed/"+i);var o=e.parents("figure"),s=o.find("figcaption");o.empty().append([e,s])}},figure:function(e){if(!(e.find("iframe").length>0)){var t=e.find("img").slice(-1)[0],n=e.find("figcaption");e.empty().append([t,n])}}},clean:[]},date_published:{selectors:[["time[datetime]","datetime"]]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},dek:{selectors:[]},next_page_url:{selectors:[]},excerpt:{selectors:[]}},kd={domain:"www.tmz.com",title:{selectors:[".post-title-breadcrumb","h1",".headline"]},author:"TMZ STAFF",date_published:{selectors:[".article-posted-date"],timezone:"America/Los_Angeles"},dek:{selectors:[]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[".article-content",".all-post-body"],transforms:{},clean:[".lightbox-link"]}},Td={domain:"www.washingtonpost.com",title:{selectors:["h1","#topper-headline-wrapper"]},author:{selectors:[".pb-byline"]},date_published:{selectors:[['.pb-timestamp[itemprop="datePublished"]',"content"]]},dek:{selectors:[]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[".article-body"],transforms:{"div.inline-content":function(e){return e.has("img,iframe,video").length>0?"figure":(e.remove(),null)},".pb-caption":"figcaption"},clean:[".interstitial-link",".newsletter-inline-unit"]}},Sd={domain:"www.huffingtonpost.com",title:{selectors:["h1.headline__title"]},author:{selectors:["span.author-card__details__name"]},date_published:{selectors:[['meta[name="article:modified_time"]',"value"],['meta[name="article:published_time"]',"value"]]},dek:{selectors:["h2.headline__subtitle"]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:["div.entry__body"],defaultCleaner:!1,transforms:{},clean:[".pull-quote",".tag-cloud",".embed-asset",".below-entry",".entry-corrections","#suggested-story"]}},Ed={domain:"newrepublic.com",title:{selectors:["h1.article-headline",".minutes-primary h1.minute-title"]},author:{selectors:["div.author-list",".minutes-primary h3.minute-byline"]},date_published:{selectors:[['meta[name="article:published_time"]',"value"]],timezone:"America/New_York"},dek:{selectors:["h2.article-subhead"]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[[".article-cover","div.content-body"],[".minute-image",".minutes-primary div.content-body"]],transforms:{},clean:["aside"]}},Cd={domain:"money.cnn.com",title:{selectors:[".article-title"]},author:{selectors:[".byline a"]},date_published:{selectors:[['meta[name="date"]',"value"]],timezone:"GMT"},dek:{selectors:["#storytext h2"]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:["#storytext"],transforms:{},clean:[".inStoryHeading"]}},Od={domain:"www.theverge.com",supportedDomains:["www.polygon.com"],title:{selectors:["h1"]},author:{selectors:[['meta[name="author"]',"value"]]},date_published:{selectors:[['meta[name="article:published_time"]',"value"]]},dek:{selectors:["h2.p-dek"]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[[".c-entry-hero .e-image",".c-entry-intro",".c-entry-content"],[".e-image--hero",".c-entry-content"],".l-wrapper .l-feature","div.c-entry-content"],transforms:{noscript:function(e){var t=e.children();return 1===t.length&&"img"===t.get(0).tagName?"span":null}},clean:[".aside","img.c-dynamic-image"]}},Dd={domain:"www.cnn.com",title:{selectors:["h1.pg-headline","h1"]},author:{selectors:[".metadata__byline__author"]},date_published:{selectors:[['meta[name="pubdate"]',"value"]]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[[".media__video--thumbnail",".zn-body-text"],".zn-body-text",'div[itemprop="articleBody"]'],transforms:{".zn-body__paragraph, .el__leafmedia--sourced-paragraph":function(e){var t=e.html();return t?"p":null},".zn-body__paragraph":function(e){e.has("a")&&e.text().trim()===e.find("a").text().trim()&&e.remove()},".media__video--thumbnail":"figure"},clean:[]}},jd={domain:"www.aol.com",title:{selectors:["h1.p-article__title"]},author:{selectors:[['meta[name="author"]',"value"]]},date_published:{selectors:[".p-article__byline__date"],timezone:"America/New_York"},dek:{selectors:[]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[".article-content"],transforms:{},clean:[]}},Pd={domain:"www.youtube.com",title:{selectors:[".watch-title","h1.watch-title-container"]},author:{selectors:[".yt-user-info"]},date_published:{selectors:[['meta[itemProp="datePublished"]',"value"]],timezone:"GMT"},dek:{selectors:[]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{defaultCleaner:!1,selectors:[["#player-api","#eow-description"]],transforms:{"#player-api":function(e,t){var n=t('meta[itemProp="videoId"]').attr("value");e.html('\n <iframe src="https://www.youtube.com/embed/'+n+'" frameborder="0" allowfullscreen></iframe>')}},clean:[]}},zd={domain:"www.theguardian.com",title:{selectors:[".content__headline"]},author:{selectors:["p.byline"]},date_published:{selectors:[['meta[name="article:published_time"]',"value"]]},dek:{selectors:[".content__standfirst"]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[".content__article-body"],transforms:{},clean:[".hide-on-mobile",".inline-icon"]}},Nd={domain:"www.sbnation.com",title:{selectors:["h1.c-page-title"]},author:{selectors:[['meta[name="author"]',"value"]]},date_published:{selectors:[['meta[name="article:published_time"]',"value"]]},dek:{selectors:["h2.c-entry-summary.p-dek"]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:["div.c-entry-content"],transforms:{},clean:[]}},Wd={domain:"www.bloomberg.com",title:{selectors:[".lede-headline","h1.article-title","h1.lede-text-only__hed"]},author:{selectors:[['meta[name="parsely-author"]',"value"],".byline-details__link",".bydek",".author"]},date_published:{selectors:[["time.published-at","datetime"],["time[datetime]","datetime"],['meta[name="date"]',"value"],['meta[name="parsely-pub-date"]',"value"]]},dek:{selectors:[]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[".article-body__content",["section.copy-block"],".body-copy"],transforms:{},clean:[".inline-newsletter",".page-ad"]}},Ld={domain:"www.bustle.com",title:{selectors:["h1.post-page__title"]},author:{selectors:["div.content-meta__author"]},date_published:{selectors:[["time.content-meta__published-date[datetime]","datetime"]]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[".post-page__body"],transforms:{},clean:[]}},Rd={domain:"www.npr.org",title:{selectors:["h1",".storytitle"]},author:{selectors:["p.byline__name.byline__name--block"]},date_published:{selectors:[[".dateblock time[datetime]","datetime"],['meta[name="date"]',"value"]]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"],['meta[name="twitter:image:src"]',"value"]]},content:{selectors:[".storytext"],transforms:{".bucketwrap.image":"figure",".bucketwrap.image .credit-caption":"figcaption"},clean:["div.enlarge_measure"]}},qd={domain:"www.recode.net",title:{selectors:["h1.c-page-title"]},author:{selectors:[['meta[name="author"]',"value"]]},date_published:{selectors:[['meta[name="article:published_time"]',"value"]]},dek:{selectors:["h2.c-entry-summary.p-dek"]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[["figure.e-image--hero",".c-entry-content"],".c-entry-content"],transforms:{},clean:[]}},Yd={domain:"qz.com",title:{selectors:["header.item-header.content-width-responsive"]},author:{selectors:[['meta[name="author"]',"value"]]},date_published:{selectors:[".timestamp"]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[["figure.featured-image",".item-body"],".item-body"],transforms:{},clean:[".article-aside",".progressive-image-thumbnail"]}},Bd={domain:"www.dmagazine.com",title:{selectors:["h1.story__title"]},author:{selectors:[".story__info .story__info__item:first-child"]},date_published:{selectors:[".story__info"],timezone:"America/Chicago"},dek:{selectors:[".story__subhead"]},lead_image_url:{selectors:[["article figure a:first-child","href"]]},content:{selectors:[".story__content"],transforms:{},clean:[]}},Hd={domain:"www.reuters.com",title:{selectors:["h1.article-headline"]},author:{selectors:[".author"]},date_published:{selectors:[['meta[name="og:article:published_time"]',"value"]]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:["#article-text"],transforms:{".article-subtitle":"h4"},clean:["#article-byline .author"]}},Fd={domain:"mashable.com",title:{selectors:["h1.title"]},author:{selectors:["span.author_name a"]},date_published:{selectors:[['meta[name="og:article:published_time"]',"value"]]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:["section.article-content.blueprint"],transforms:{".image-credit":"figcaption"},clean:[]}},Id={domain:"www.chicagotribune.com",title:{selectors:["h1.trb_ar_hl_t"]},author:{selectors:["span.trb_ar_by_nm_au"]},date_published:{selectors:[['meta[itemprop="datePublished"]',"value"]]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:["div.trb_ar_page"],transforms:{},clean:[]}},Ud={domain:"www.vox.com",title:{selectors:["h1.c-page-title"]},author:{selectors:[['meta[name="author"]',"value"]]},date_published:{selectors:[['meta[name="article:published_time"]',"value"]]},dek:{selectors:[".p-dek"]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[["figure.e-image--hero",".c-entry-content"],".c-entry-content"],transforms:{"figure .e-image__image noscript":function(e){var t=e.html();e.parents(".e-image__image").find(".c-dynamic-image").replaceWith(t)},"figure .e-image__meta":"figcaption"},clean:[]}},Gd={domain:"news.nationalgeographic.com",title:{selectors:["h1","h1.main-title"]},author:{selectors:[".byline-component__contributors b span"]},date_published:{selectors:[['meta[name="article:published_time"]',"value"]],format:"ddd MMM DD HH:mm:ss zz YYYY",timezone:"EST"},dek:{selectors:[".article__deck"]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[[".parsys.content",".__image-lead__"],".content"],transforms:{".parsys.content":function(e,t){var n=e.find(".image.parbase.section").find(".picturefill").first().data("platform-src");n&&e.prepend(t('<img class="__image-lead__" src="'+n+'"/>'))}},clean:[".pull-quote.pull-quote--large"]}},$d={domain:"www.nationalgeographic.com",title:{selectors:["h1","h1.main-title"]},author:{selectors:[".byline-component__contributors b span"]},date_published:{selectors:[['meta[name="article:published_time"]',"value"]]},dek:{selectors:[".article__deck"]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[[".parsys.content",".__image-lead__"],".content"],transforms:{".parsys.content":function(e,t){var n=e.children().first();if(n.hasClass("imageGroup")){var r=n.find(".media--medium__container").children().first(),a=r.data("platform-image1-path"),i=r.data("platform-image2-path");i&&a&&e.prepend(t('<div class="__image-lead__">\n <img src="'+a+'"/>\n <img src="'+i+'"/>\n </div>'))}else{var o=e.find(".image.parbase.section").find(".picturefill").first().data("platform-src");o&&e.prepend(t('<img class="__image-lead__" src="'+o+'"/>'))}}},clean:[".pull-quote.pull-quote--small"]}},Vd={domain:"www.latimes.com",title:{selectors:[".trb_ar_hl"]},author:{selectors:[['meta[name="author"]',"value"]]},date_published:{selectors:[['meta[itemprop="datePublished"]',"value"]]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[".trb_ar_main"],transforms:{".trb_ar_la":function(e){var t=e.find("figure");e.replaceWith(t)}},clean:[".trb_ar_by",".trb_ar_cr"]}},Kd={domain:"pagesix.com",supportedDomains:["nypost.com"],title:{selectors:["h1 a"]},author:{selectors:[".byline"]},date_published:{selectors:[['meta[name="article:published_time"]',"value"]]},dek:{selectors:[['meta[name="description"]',"value"]]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[["#featured-image-wrapper",".entry-content"],".entry-content"],transforms:{"#featured-image-wrapper":"figure",".wp-caption-text":"figcaption"},clean:[".modal-trigger"]}},Xd={domain:"thefederalistpapers.org",title:{selectors:["h1.entry-title"]},author:{selectors:["main span.entry-author-name"]},date_published:{selectors:[['meta[name="article:published_time"]',"value"]]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[".entry-content"],transforms:{},clean:[["p[style]"]]}},Jd={domain:"www.cbssports.com",title:{selectors:[".article-headline"]},author:{selectors:[".author-name"]},date_published:{selectors:[[".date-original-reading-time time","datetime"]],timezone:"UTC"},dek:{selectors:[".article-subline"]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[".article"],transforms:{},clean:[]}},Zd={domain:"www.msnbc.com",title:{selectors:["h1","h1.is-title-pane"]},author:{selectors:[".author"]},date_published:{selectors:[['meta[name="DC.date.issued"]',"value"]]},dek:{selectors:[['meta[name="description"]',"value"]]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[".pane-node-body"],transforms:{".pane-node-body":function(e,t){var n=mu(Zd.lead_image_url.selectors[0],2),r=n[0],a=n[1],i=t(r).attr(a);i&&e.prepend('<img src="'+i+'" />')}},clean:[]}},Qd={domain:"www.thepoliticalinsider.com",title:{selectors:[['meta[name="sailthru.title"]',"value"]]},author:{selectors:[['meta[name="sailthru.author"]',"value"]]},date_published:{selectors:[['meta[name="sailthru.date"]',"value"]],timezone:"America/New_York"},dek:{selectors:[]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:["div#article-body"],transforms:{},clean:[]}},eh={domain:"www.mentalfloss.com",title:{selectors:["h1.title",".title-group",".inner"]},author:{selectors:[".field-name-field-enhanced-authors"]},date_published:{selectors:[".date-display-single"],timezone:"America/New_York"},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:["div.field.field-name-body"],transforms:{},clean:[]}},th={domain:"abcnews.go.com",title:{selectors:[".article-header h1"]},author:{selectors:[".authors"],clean:[".author-overlay",".by-text"]},date_published:{selectors:[".timestamp"],timezone:"America/New_York"},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[".article-copy"],transforms:{},clean:[]}},nh={domain:"www.nydailynews.com",title:{selectors:["h1#ra-headline"]},author:{selectors:[['meta[name="parsely-author"]',"value"]]},date_published:{selectors:[['meta[name="sailthru.date"]',"value"]]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:["article#ra-body"],transforms:{},clean:["dl#ra-tags",".ra-related","a.ra-editor","dl#ra-share-bottom"]}},rh={domain:"www.cnbc.com",title:{selectors:["h1.title"]},author:{selectors:[['meta[name="author"]',"value"]]},date_published:{selectors:[['meta[name="article:published_time"]',"value"]]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:["div#article_body.content","div.story"],transforms:{},clean:[]}},ah={domain:"www.popsugar.com",title:{selectors:["h2.post-title","title-text"]},author:{selectors:[['meta[name="article:author"]',"value"]]},date_published:{selectors:[['meta[name="article:published_time"]',"value"]]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:["#content"],transforms:{},clean:[".share-copy-title",".post-tags",".reactions"]}},ih={domain:"observer.com",title:{selectors:["h1.entry-title"]},author:{selectors:[".author",".vcard"]},date_published:{selectors:[['meta[name="article:published_time"]',"value"]]},dek:{selectors:["h2.dek"]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:["div.entry-content"],transforms:{},clean:[]}},oh={domain:"people.com",title:{selectors:[['meta[name="og:title"]',"value"]]},author:{selectors:["a.author.url.fn"]},date_published:{selectors:[['meta[name="article:published_time"]',"value"]]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:["div.article-body__inner"],transforms:{},clean:[]}},sh={domain:"www.usmagazine.com",title:{selectors:["header h1"]},author:{selectors:["a.article-byline.tracked-offpage"]},date_published:{timezone:"America/New_York",selectors:["time.article-published-date"]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:["div.article-body-inner"],transforms:{},clean:[".module-related"]}},uh={domain:"www.rollingstone.com",title:{selectors:["h1.content-title"]},author:{selectors:["a.content-author.tracked-offpage"]},date_published:{selectors:["time.content-published-date"],timezone:"America/New_York"},dek:{selectors:[".content-description"]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[[".lead-container",".article-content"],".article-content"],transforms:{},clean:[".module-related"]}},ch={domain:"247sports.com",title:{selectors:["title","article header h1"]},author:{selectors:[".author"]},date_published:{selectors:[["time[data-published]","data-published"]]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:["section.body.article"],transforms:{},clean:[]}},lh={domain:"uproxx.com",title:{selectors:["div.post-top h1"]},author:{selectors:[".post-top .authorname"]},date_published:{selectors:[['meta[name="article:published_time"]',"value"]]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[".post-body"],transforms:{"div.image":"figure","div.image .wp-media-credit":"figcaption"},clean:[]}},fh={domain:"www.eonline.com",title:{selectors:["h1.article__title"]},author:{selectors:[".entry-meta__author a"]},date_published:{selectors:[['meta[itemprop="datePublished"]',"value"]]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[[".post-content section, .post-content div.post-content__image"]],transforms:{"div.post-content__image":"figure","div.post-content__image .image__credits":"figcaption"},clean:[]}},dh={domain:"www.miamiherald.com",title:{selectors:["h1.title"]},date_published:{selectors:["p.published-date"],timezone:"America/New_York"},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:["div.dateline-storybody"],transforms:{},clean:[]}},hh={domain:"www.refinery29.com",title:{selectors:["h1.title"]},author:{selectors:[".contributor"]},date_published:{selectors:[['meta[name="sailthru.date"]',"value"]],timezone:"America/New_York"},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[[".full-width-opener",".article-content"],".article-content",".body"],transforms:{"div.loading noscript":function(e){var t=e.html();e.parents(".loading").replaceWith(t)},".section-image":"figure",".section-image .content-caption":"figcaption",".section-text":"p"},clean:[".story-share"]}},ph={domain:"www.macrumors.com",title:{selectors:["h1","h1.title"]},author:{selectors:[".author-url"]},date_published:{selectors:[".article .byline"],format:"dddd MMMM D, YYYY h:mm A zz",timezone:"America/Los_Angeles"},dek:{selectors:[['meta[name="description"]',"value"]] +},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[".article"],transforms:{},clean:[]}},mh={domain:"www.androidcentral.com",title:{selectors:["h1","h1.main-title"]},author:{selectors:[".meta-by"]},date_published:{selectors:[['meta[name="article:published_time"]',"value"]]},dek:{selectors:[['meta[name="og:description"]',"value"]]},lead_image_url:{selectors:[[".image-large","src"]]},content:{selectors:[".article-body"],transforms:{},clean:[".intro","blockquote"]}},gh={domain:"www.si.com",title:{selectors:["h1","h1.headline"]},author:{selectors:[['meta[name="author"]',"value"]]},date_published:{selectors:[".timestamp"],timezone:"America/New_York"},dek:{selectors:[".quick-hit ul"]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[["p",".marquee_large_2x",".component.image"]],transforms:{noscript:function(e){var t=e.children();return 1===t.length&&"img"===t.get(0).tagName?"figure":null}},clean:[[".inline-thumb",".primary-message",".description",".instructions"]]}},vh={domain:"www.rawstory.com",title:{selectors:[".blog-title"]},author:{selectors:[".blog-author a:first-of-type"]},date_published:{selectors:[".blog-author a:last-of-type"],timezone:"EST"},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[".blog-content"],transforms:{},clean:[]}},yh={domain:"www.cnet.com",title:{selectors:[['meta[name="og:title"]',"value"]]},author:{selectors:["a.author"]},date_published:{selectors:["time"],timezone:"America/Los_Angeles"},dek:{selectors:[".article-dek"]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[["img.__image-lead__",".article-main-body"],".article-main-body"],transforms:{"figure.image":function(e){var t=e.find("img");t.attr("width","100%"),t.attr("height","100%"),t.addClass("__image-lead__"),e.remove(".imgContainer").prepend(t)}},clean:[]}},bh={domain:"www.cinemablend.com",title:{selectors:[".story_title"]},author:{selectors:[".author"]},date_published:{selectors:[['meta[name="article:published_time"]',"value"]],timezone:"EST"},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:["div#wrap_left_content"],transforms:{},clean:[]}},_h={domain:"www.today.com",title:{selectors:["h1.entry-headline"]},author:{selectors:[['meta[name="author"]',"value"]]},date_published:{selectors:[['meta[name="DC.date.issued"]',"value"]]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[".entry-container"],transforms:{},clean:[".label-comment"]}},wh={domain:"www.howtogeek.com",title:{selectors:["title"]},author:{selectors:["#authorinfobox a"]},date_published:{selectors:["#authorinfobox + div li"],timezone:"GMT"},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[".thecontent"],transforms:{},clean:[]}},Ah={domain:"www.al.com",title:{selectors:[['meta[name="title"]',"value"]]},author:{selectors:[['meta[name="article_author"]',"value"]]},date_published:{selectors:[['meta[name="article_date_original"]',"value"]],timezone:"EST"},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[".entry-content"],transforms:{},clean:[]}},xh={domain:"www.thepennyhoarder.com",title:{selectors:[['meta[name="dcterms.title"]',"value"]]},author:{selectors:[['link[rel="author"]',"title"]]},date_published:{selectors:[['meta[name="article:published_time"]',"value"]]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[[".post-img",".post-text"],".post-text"],transforms:{},clean:[]}},Mh={domain:"www.westernjournalism.com",title:{selectors:["title","h1.entry-title"]},author:{selectors:[['meta[name="author"]',"value"]]},date_published:{selectors:[['meta[name="DC.date.issued"]',"value"]]},dek:{selectors:[".subtitle"]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:["div.article-sharing.top + div"],transforms:{},clean:[".ad-notice-small"]}},kh={domain:"fusion.net",title:{selectors:[".post-title",".single-title",".headline"]},author:{selectors:[".show-for-medium .byline"]},date_published:{selectors:[["time.local-time","datetime"]]},dek:{selectors:[]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[[".post-featured-media",".article-content"],".article-content"],transforms:{".fusion-youtube-oembed":"figure"},clean:[]}},Th={domain:"www.americanow.com",title:{selectors:[".title",['meta[name="title"]',"value"]]},author:{selectors:[".byline"]},date_published:{selectors:[['meta[name="publish_date"]',"value"]]},dek:{selectors:[]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[[".article-content",".image",".body"],".body"],transforms:{},clean:[".article-video-wrapper",".show-for-small-only"]}},Sh={domain:"sciencefly.com",title:{selectors:[".entry-title",".cb-entry-title",".cb-single-title"]},author:{selectors:["div.cb-author","div.cb-author-title"]},date_published:{selectors:[['meta[name="article:published_time"]',"value"]]},dek:{selectors:[]},lead_image_url:{selectors:[["div.theiaPostSlider_slides img","src"]]},content:{selectors:["div.theiaPostSlider_slides"],transforms:{},clean:[]}},Eh={domain:"hellogiggles.com",title:{selectors:[".title"]},author:{selectors:[".author-link"]},date_published:{selectors:[['meta[name="article:published_time"]',"value"]]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[".entry-content"],transforms:{},clean:[]}},Ch={domain:"thoughtcatalog.com",title:{selectors:["h1.title",['meta[name="og:title"]',"value"]]},author:{selectors:["div.col-xs-12.article_header div.writer-container.writer-container-inline.writer-no-avatar h4.writer-name","h1.writer-name"]},date_published:{selectors:[['meta[name="article:published_time"]',"value"]]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[".entry.post"],transforms:{},clean:[".tc_mark"]}},Oh={domain:"www.nj.com",title:{selectors:[['meta[name="title"]',"value"]]},author:{selectors:[['meta[name="article_author"]',"value"]]},date_published:{selectors:[['meta[name="article_date_original"]',"value"]],timezone:"America/New_York"},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[".entry-content"],transforms:{},clean:[]}},Dh={domain:"www.inquisitr.com",title:{selectors:["h1.entry-title.story--header--title"]},author:{selectors:["div.story--header--author"]},date_published:{selectors:[['meta[name="datePublished"]',"value"]]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:["article.story",".entry-content."],transforms:{},clean:[".post-category",".story--header--socials",".story--header--content"]}},jh={domain:"www.nbcnews.com",title:{selectors:["div.article-hed h1"]},author:{selectors:["span.byline_author"]},date_published:{selectors:[[".flag_article-wrapper time.timestamp_article[datetime]","datetime"],".flag_article-wrapper time"],timezone:"America/New_York"},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:["div.article-body"],transforms:{},clean:[]}},Ph={domain:"fortune.com",title:{selectors:["h1"]},author:{selectors:[['meta[name="author"]',"value"]]},date_published:{selectors:[".MblGHNMJ"],timezone:"UTC"},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[["picture","article.row"],"article.row"],transforms:{},clean:[]}},zh={domain:"www.linkedin.com",title:{selectors:[".article-title","h1"]},author:{selectors:[['meta[name="article:author"]',"value"],".entity-name a[rel=author]"]},date_published:{selectors:[['time[itemprop="datePublished"]',"datetime"]],timezone:"America/Los_Angeles"},dek:{selectors:[]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[["header figure",".prose"],".prose"],transforms:{},clean:[".entity-image"]}},Nh={domain:"obamawhitehouse.archives.gov",supportedDomains:["whitehouse.gov"],title:{selectors:["h1",".pane-node-title"]},author:{selectors:[".blog-author-link",".node-person-name-link"]},date_published:{selectors:[['meta[name="article:published_time"]',"value"]]},dek:{selectors:[".field-name-field-forall-summary"]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{defaultCleaner:!1,selectors:["div#content-start",".pane-node-field-forall-body"],transforms:{},clean:[".pane-node-title",".pane-custom.pane-1"]}},Wh={domain:"www.opposingviews.com",title:{selectors:["h1.title"]},author:{selectors:["div.date span span a"]},date_published:{selectors:[['meta[name="publish_date"]',"value"]]},dek:{selectors:[]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[".article-content"],transforms:{},clean:[".show-for-small-only"]}},Lh={domain:"www.prospectmagazine.co.uk",title:{selectors:[".page-title"]},author:{selectors:[".aside_author .title"]},date_published:{selectors:[".post-info"],timezone:"Europe/London"},dek:{selectors:[".page-subtitle"]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:["article .post_content"],transforms:{},clean:[]}},Rh={domain:"forward.com",title:{selectors:[['meta[name="og:title"]',"value"]]},author:{selectors:[".author-name",['meta[name="sailthru.author"]',"value"]]},date_published:{selectors:[['meta[name="date"]',"value"]]},dek:{selectors:[]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[[".post-item-media-wrap",".post-item p"]],transforms:{},clean:[".donate-box",".message",".subtitle"]}},qh={domain:"www.qdaily.com",title:{selectors:["h2","h2.title"]},author:{selectors:[".name"]},date_published:{selectors:[[".date.smart-date","data-origindate"]]},dek:{selectors:[".excerpt"]},lead_image_url:{selectors:[[".article-detail-hd img","src"]]},content:{selectors:[".detail"],transforms:{},clean:[".lazyload",".lazylad",".lazylood"]}},Yh={domain:"gothamist.com",supportedDomains:["chicagoist.com","laist.com","sfist.com","shanghaiist.com","dcist.com"],title:{selectors:["h1",".entry-header h1"]},author:{selectors:[".author"]},date_published:{selectors:["abbr","abbr.published"],timezone:"America/New_York"},dek:{selectors:[null]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[".entry-body"],transforms:{"div.image-none":"figure",".image-none i":"figcaption","div.image-left":"figure",".image-left i":"figcaption","div.image-right":"figure",".image-right i":"figcaption"},clean:[".image-none br",".image-left br",".image-right br",".galleryEase"]}},Bh={domain:"www.fool.com",title:{selectors:["h1"]},author:{selectors:[".author-inline .author-name"]},date_published:{selectors:[['meta[name="date"]',"value"]]},dek:{selectors:["header h2"]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[".article-content"],transforms:{".caption img":function(e){var t=e.attr("src");e.parent().replaceWith('<figure><img src="'+t+'"/></figure>')},".caption":"figcaption"},clean:["#pitch"]}},Hh={domain:"www.slate.com",title:{selectors:[".hed","h1"]},author:{selectors:["a[rel=author]"]},date_published:{selectors:[".pub-date"],timezone:"America/New_York"},dek:{selectors:[".dek"]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[".body"],transforms:{},clean:[".about-the-author",".pullquote",".newsletter-signup-component",".top-comment"]}},Fh={domain:"ici.radio-canada.ca",title:{selectors:["h1"]},author:{selectors:[['meta[name="dc.creator"]',"value"]]},date_published:{selectors:[['meta[name="dc.date.created"]',"value"]],timezone:"America/New_York"},dek:{selectors:[".bunker-component.lead"]},lead_image_url:{selectors:[['meta[name="og:image"]',"value"]]},content:{selectors:[[".main-multimedia-item",".news-story-content"]],transforms:{},clean:[]}},Ih=Object.freeze({BloggerExtractor:sd,NYMagExtractor:ud,WikipediaExtractor:cd,TwitterExtractor:ld,NYTimesExtractor:fd,TheAtlanticExtractor:dd,NewYorkerExtractor:hd,WiredExtractor:pd,MSNExtractor:md,YahooExtractor:gd,BuzzfeedExtractor:vd,WikiaExtractor:yd,LittleThingsExtractor:bd,PoliticoExtractor:_d,DeadspinExtractor:wd,BroadwayWorldExtractor:Ad,ApartmentTherapyExtractor:xd,MediumExtractor:Md,WwwTmzComExtractor:kd,WwwWashingtonpostComExtractor:Td,WwwHuffingtonpostComExtractor:Sd,NewrepublicComExtractor:Ed,MoneyCnnComExtractor:Cd,WwwThevergeComExtractor:Od,WwwCnnComExtractor:Dd,WwwAolComExtractor:jd,WwwYoutubeComExtractor:Pd,WwwTheguardianComExtractor:zd,WwwSbnationComExtractor:Nd,WwwBloombergComExtractor:Wd,WwwBustleComExtractor:Ld,WwwNprOrgExtractor:Rd,WwwRecodeNetExtractor:qd,QzComExtractor:Yd,WwwDmagazineComExtractor:Bd,WwwReutersComExtractor:Hd,MashableComExtractor:Fd,WwwChicagotribuneComExtractor:Id,WwwVoxComExtractor:Ud,NewsNationalgeographicComExtractor:Gd,WwwNationalgeographicComExtractor:$d,WwwLatimesComExtractor:Vd,PagesixComExtractor:Kd,ThefederalistpapersOrgExtractor:Xd,WwwCbssportsComExtractor:Jd,WwwMsnbcComExtractor:Zd,WwwThepoliticalinsiderComExtractor:Qd,WwwMentalflossComExtractor:eh,AbcnewsGoComExtractor:th,WwwNydailynewsComExtractor:nh,WwwCnbcComExtractor:rh,WwwPopsugarComExtractor:ah,ObserverComExtractor:ih,PeopleComExtractor:oh,WwwUsmagazineComExtractor:sh,WwwRollingstoneComExtractor:uh,twofortysevensportsComExtractor:ch,UproxxComExtractor:lh,WwwEonlineComExtractor:fh,WwwMiamiheraldComExtractor:dh,WwwRefinery29ComExtractor:hh,WwwMacrumorsComExtractor:ph,WwwAndroidcentralComExtractor:mh,WwwSiComExtractor:gh,WwwRawstoryComExtractor:vh,WwwCnetComExtractor:yh,WwwCinemablendComExtractor:bh,WwwTodayComExtractor:_h,WwwHowtogeekComExtractor:wh,WwwAlComExtractor:Ah,WwwThepennyhoarderComExtractor:xh,WwwWesternjournalismComExtractor:Mh,FusionNetExtractor:kh,WwwAmericanowComExtractor:Th,ScienceflyComExtractor:Sh,HellogigglesComExtractor:Eh,ThoughtcatalogComExtractor:Ch,WwwNjComExtractor:Oh,WwwInquisitrComExtractor:Dh,WwwNbcnewsComExtractor:jh,FortuneComExtractor:Ph,WwwLinkedinComExtractor:zh,ObamawhitehouseArchivesGovExtractor:Nh,WwwOpposingviewsComExtractor:Wh,WwwProspectmagazineCoUkExtractor:Lh,ForwardComExtractor:Rh,WwwQdailyComExtractor:qh,GothamistComExtractor:Yh,WwwFoolComExtractor:Bh,WwwSlateComExtractor:Hh,IciRadioCanadaCaExtractor:Fh}),Uh=id(Ih).reduce(function(e,t){var n=Ih[t];return da({},e,Je(n))},{}),Gh=n(function(e,t){(function(){function e(e){if("undefined"==typeof e)throw new Error("TypeError missing argument");if("string"!=typeof e)throw new Error("TypeError getDirection expects strings");if(""===e)return l;if(e.indexOf(i)>-1&&e.indexOf(o)>-1)return c;if(e.indexOf(i)>-1)return s;if(e.indexOf(o)>-1)return u;var t=n(e,u),r=n(e,s);return t&&r?c:r?s:t?u:l}function n(e,t){var n,a,i,o,c=!1,l=!1,d=!1;for(d=e.search(/[0-9]/)>-1,e=e.replace(/[\s\n\0\f\t\v\'\"\-0-9\+\?\!]+/gm,""),n=0;n<e.length;n++){a=e.charAt(n),o=!1;for(i in f)f.hasOwnProperty(i)&&r(a,f[i][0],f[i][1])&&(c=!0,o=!0);o===!1&&(l=!0)}return t===u?c:t===s?l||!c&&d:void 0}function r(e,t,n){var r=e.charCodeAt(0),a=parseInt(t,16),i=parseInt(n,16);return r>a&&r<i}function a(){String.prototype.getDirection=function(){return e(this.valueOf())}}var i="‎",o="‏",s="ltr",u="rtl",c="bidi",l="",f={Hebrew:["0590","05FF"],Arabic:["0600","06FF"],NKo:["07C0","07FF"],Syriac:["0700","074F"],Thaana:["0780","07BF"],Tifinagh:["2D30","2D7F"]};"undefined"!=typeof t?(t.getDirection=e,t.patch=a):this.stringDirection={getDirection:e,patch:a}}).call(this)}),$h=/^\s*(posted |written )?by\s*:?\s*(.*)/i,Vh=new RegExp("http(s)?://","i"),Kh=/^\d{13}$/i,Xh=/^\d{10}$/i,Jh=/^\s*published\s*:?\s*(.*)/i,Zh=/(.*\d)(am|pm)(.*)/i,Qh=/\.m\./i,ep=["jan","feb","mar","apr","may","jun","jul","aug","sep","oct","nov","dec"],tp=ep.join("|"),np="[0-9]{1,2}:[0-9]{2,2}( ?[ap].?m.?)?",rp="[0-9]{1,2}[/-][0-9]{1,2}[/-][0-9]{2,4}",ap="-[0-9]{3,4}$",ip=new RegExp("("+np+")|("+rp+")|("+ap+")|([0-9]{1,4})|("+tp+")","ig"),op=/-\d{3,4}$/,sp=/(: | - | \| )/g,up=new RegExp(".com$|.net$|.org$|.co.uk$","g"),cp=n(function(e){!function(e){function t(e){if(e&&!/[^a-z0-9\:\/\?\#\[\]\@\!\$\&\'\(\)\*\+\,\;\=\.\-\_\~\%]/i.test(e)&&!/%[^0-9a-f]/i.test(e)&&!/%[0-9a-f](:?[^0-9a-f]|$)/i.test(e)){var t=[],n="",r="",a="",o="",s="",u="";if(t=i(e),n=t[1],r=t[2],a=t[3],o=t[4],s=t[5],n&&n.length&&a.length>=0){if(r&&r.length){if(0!==a.length&&!/^\//.test(a))return}else if(/^\/\//.test(a))return;if(/^[a-z][a-z0-9\+\-\.]*$/.test(n.toLowerCase()))return u+=n+":",r&&r.length&&(u+="//"+r),u+=a,o&&o.length&&(u+="?"+o),s&&s.length&&(u+="#"+s),u}}}function n(e,n){if(t(e)){var r=[],a="",o="",s="",u="",c="",l="",f="";if(r=i(e),a=r[1],o=r[2],s=r[3],c=r[4],l=r[5],a){if(n){if("https"!=a.toLowerCase())return}else if("http"!=a.toLowerCase())return;if(o)return/:(\d+)$/.test(o)&&(u=o.match(/:(\d+)$/)[0],o=o.replace(/:\d+$/,"")),f+=a+":",f+="//"+o,u&&(f+=u),f+=s,c&&c.length&&(f+="?"+c),l&&l.length&&(f+="#"+l),f}}}function r(e){return n(e,!0)}function a(e){return n(e)||r(e)}e.exports.is_uri=t,e.exports.is_http_uri=n,e.exports.is_https_uri=r,e.exports.is_web_uri=a,e.exports.isUri=t,e.exports.isHttpUri=n,e.exports.isHttpsUri=r,e.exports.isWebUri=a;var i=function(e){var t=e.match(/(?:([^:\/?#]+):)?(?:\/\/([^\/?#]*))?([^?#]*)(?:\?([^#]*))?(?:#(.*))?/);return t}}(e)}),lp=n(function(t,n){!function(e,r){"object"==typeof n&&"undefined"!=typeof t?t.exports=r():"function"==typeof define&&define.amd?define(r):e.moment=r()}(this,function(){function n(){return vr.apply(null,arguments)}function r(e){vr=e}function a(e){return e instanceof Array||"[object Array]"===Object.prototype.toString.call(e)}function i(e){return null!=e&&"[object Object]"===Object.prototype.toString.call(e)}function o(e){var t;for(t in e)return!1;return!0}function s(e){return"number"==typeof value||"[object Number]"===Object.prototype.toString.call(e)}function u(e){return e instanceof Date||"[object Date]"===Object.prototype.toString.call(e)}function c(e,t){var n,r=[];for(n=0;n<e.length;++n)r.push(t(e[n],n));return r}function l(e,t){return Object.prototype.hasOwnProperty.call(e,t)}function f(e,t){for(var n in t)l(t,n)&&(e[n]=t[n]);return l(t,"toString")&&(e.toString=t.toString),l(t,"valueOf")&&(e.valueOf=t.valueOf),e}function d(e,t,n,r){return bt(e,t,n,r,!0).utc()}function h(){return{empty:!1,unusedTokens:[],unusedInput:[],overflow:-2,charsLeftOver:0,nullInput:!1,invalidMonth:null,invalidFormat:!1,userInvalidated:!1,iso:!1,parsedDateParts:[],meridiem:null}}function p(e){return null==e._pf&&(e._pf=h()),e._pf}function m(e){if(null==e._isValid){var t=p(e),n=br.call(t.parsedDateParts,function(e){return null!=e}),r=!isNaN(e._d.getTime())&&t.overflow<0&&!t.empty&&!t.invalidMonth&&!t.invalidWeekday&&!t.nullInput&&!t.invalidFormat&&!t.userInvalidated&&(!t.meridiem||t.meridiem&&n);if(e._strict&&(r=r&&0===t.charsLeftOver&&0===t.unusedTokens.length&&void 0===t.bigHour),null!=Object.isFrozen&&Object.isFrozen(e))return r;e._isValid=r}return e._isValid}function g(e){var t=d(NaN);return null!=e?f(p(t),e):p(t).userInvalidated=!0,t}function v(e){return void 0===e}function y(e,t){var n,r,a;if(v(t._isAMomentObject)||(e._isAMomentObject=t._isAMomentObject),v(t._i)||(e._i=t._i),v(t._f)||(e._f=t._f),v(t._l)||(e._l=t._l),v(t._strict)||(e._strict=t._strict),v(t._tzm)||(e._tzm=t._tzm),v(t._isUTC)||(e._isUTC=t._isUTC),v(t._offset)||(e._offset=t._offset),v(t._pf)||(e._pf=p(t)),v(t._locale)||(e._locale=t._locale),_r.length>0)for(n in _r)r=_r[n],a=t[r],v(a)||(e[r]=a);return e}function b(e){y(this,e),this._d=new Date(null!=e._d?e._d.getTime():NaN),wr===!1&&(wr=!0,n.updateOffset(this),wr=!1)}function _(e){return e instanceof b||null!=e&&null!=e._isAMomentObject}function w(e){return e<0?Math.ceil(e)||0:Math.floor(e)}function A(e){var t=+e,n=0;return 0!==t&&isFinite(t)&&(n=w(t)),n}function x(e,t,n){var r,a=Math.min(e.length,t.length),i=Math.abs(e.length-t.length),o=0;for(r=0;r<a;r++)(n&&e[r]!==t[r]||!n&&A(e[r])!==A(t[r]))&&o++;return o+i}function M(e){n.suppressDeprecationWarnings===!1&&"undefined"!=typeof console&&console.warn&&console.warn("Deprecation warning: "+e)}function k(e,t){var r=!0;return f(function(){if(null!=n.deprecationHandler&&n.deprecationHandler(null,e),r){for(var a,i=[],o=0;o<arguments.length;o++){if(a="","object"==typeof arguments[o]){a+="\n["+o+"] ";for(var s in arguments[0])a+=s+": "+arguments[0][s]+", ";a=a.slice(0,-2)}else a=arguments[o];i.push(a)}M(e+"\nArguments: "+Array.prototype.slice.call(i).join("")+"\n"+(new Error).stack),r=!1}return t.apply(this,arguments)},t)}function T(e,t){null!=n.deprecationHandler&&n.deprecationHandler(e,t),Ar[e]||(M(t),Ar[e]=!0)}function S(e){return e instanceof Function||"[object Function]"===Object.prototype.toString.call(e)}function E(e){var t,n;for(n in e)t=e[n],S(t)?this[n]=t:this["_"+n]=t;this._config=e,this._ordinalParseLenient=new RegExp(this._ordinalParse.source+"|"+/\d{1,2}/.source)}function C(e,t){var n,r=f({},e);for(n in t)l(t,n)&&(i(e[n])&&i(t[n])?(r[n]={},f(r[n],e[n]),f(r[n],t[n])):null!=t[n]?r[n]=t[n]:delete r[n]);for(n in e)l(e,n)&&!l(t,n)&&i(e[n])&&(r[n]=f({},r[n]));return r}function O(e){null!=e&&this.set(e)}function D(e,t,n){var r=this._calendar[e]||this._calendar.sameElse;return S(r)?r.call(t,n):r}function j(e){var t=this._longDateFormat[e],n=this._longDateFormat[e.toUpperCase()];return t||!n?t:(this._longDateFormat[e]=n.replace(/MMMM|MM|DD|dddd/g,function(e){return e.slice(1)}),this._longDateFormat[e])}function P(){return this._invalidDate}function z(e){return this._ordinal.replace("%d",e)}function N(e,t,n,r){var a=this._relativeTime[n];return S(a)?a(e,t,n,r):a.replace(/%d/i,e)}function W(e,t){var n=this._relativeTime[e>0?"future":"past"];return S(n)?n(t):n.replace(/%s/i,t)}function L(e,t){var n=e.toLowerCase();jr[n]=jr[n+"s"]=jr[t]=e}function R(e){return"string"==typeof e?jr[e]||jr[e.toLowerCase()]:void 0}function q(e){var t,n,r={};for(n in e)l(e,n)&&(t=R(n),t&&(r[t]=e[n]));return r}function Y(e,t){Pr[e]=t}function B(e){var t=[];for(var n in e)t.push({unit:n,priority:Pr[n]});return t.sort(function(e,t){return e.priority-t.priority}),t}function H(e,t){return function(r){return null!=r?(I(this,e,r),n.updateOffset(this,t),this):F(this,e)}}function F(e,t){return e.isValid()?e._d["get"+(e._isUTC?"UTC":"")+t]():NaN}function I(e,t,n){e.isValid()&&e._d["set"+(e._isUTC?"UTC":"")+t](n)}function U(e){return e=R(e),S(this[e])?this[e]():this}function G(e,t){if("object"==typeof e){e=q(e);for(var n=B(e),r=0;r<n.length;r++)this[n[r].unit](e[n[r].unit])}else if(e=R(e),S(this[e]))return this[e](t);return this}function $(e,t,n){var r=""+Math.abs(e),a=t-r.length,i=e>=0;return(i?n?"+":"":"-")+Math.pow(10,Math.max(0,a)).toString().substr(1)+r}function V(e,t,n,r){var a=r;"string"==typeof r&&(a=function(){return this[r]()}),e&&(Lr[e]=a),t&&(Lr[t[0]]=function(){return $(a.apply(this,arguments),t[1],t[2])}),n&&(Lr[n]=function(){return this.localeData().ordinal(a.apply(this,arguments),e)})}function K(e){return e.match(/\[[\s\S]/)?e.replace(/^\[|\]$/g,""):e.replace(/\\/g,"")}function X(e){var t,n,r=e.match(zr);for(t=0,n=r.length;t<n;t++)Lr[r[t]]?r[t]=Lr[r[t]]:r[t]=K(r[t]);return function(t){var a,i="";for(a=0;a<n;a++)i+=r[a]instanceof Function?r[a].call(t,e):r[a];return i}}function J(e,t){return e.isValid()?(t=Z(t,e.localeData()),Wr[t]=Wr[t]||X(t),Wr[t](e)):e.localeData().invalidDate()}function Z(e,t){function n(e){return t.longDateFormat(e)||e}var r=5;for(Nr.lastIndex=0;r>=0&&Nr.test(e);)e=e.replace(Nr,n),Nr.lastIndex=0,r-=1;return e}function Q(e,t,n){ta[e]=S(t)?t:function(e,r){return e&&n?n:t}}function ee(e,t){return l(ta,e)?ta[e](t._strict,t._locale):new RegExp(te(e))}function te(e){return ne(e.replace("\\","").replace(/\\(\[)|\\(\])|\[([^\]\[]*)\]|\\(.)/g,function(e,t,n,r,a){return t||n||r||a}))}function ne(e){return e.replace(/[-\/\\^$*+?.()|[\]{}]/g,"\\$&")}function re(e,t){var n,r=t;for("string"==typeof e&&(e=[e]),s(t)&&(r=function(e,n){n[t]=A(e)}),n=0;n<e.length;n++)na[e[n]]=r}function ae(e,t){re(e,function(e,n,r,a){r._w=r._w||{},t(e,r._w,r,a)})}function ie(e,t,n){null!=t&&l(na,e)&&na[e](t,n._a,n,e)}function oe(e,t){return new Date(Date.UTC(e,t+1,0)).getUTCDate()}function se(e,t){return e?a(this._months)?this._months[e.month()]:this._months[(this._months.isFormat||ha).test(t)?"format":"standalone"][e.month()]:this._months}function ue(e,t){return e?a(this._monthsShort)?this._monthsShort[e.month()]:this._monthsShort[ha.test(t)?"format":"standalone"][e.month()]:this._monthsShort}function ce(e,t,n){var r,a,i,o=e.toLocaleLowerCase();if(!this._monthsParse)for(this._monthsParse=[],this._longMonthsParse=[],this._shortMonthsParse=[],r=0;r<12;++r)i=d([2e3,r]),this._shortMonthsParse[r]=this.monthsShort(i,"").toLocaleLowerCase(),this._longMonthsParse[r]=this.months(i,"").toLocaleLowerCase();return n?"MMM"===t?(a=da.call(this._shortMonthsParse,o),a!==-1?a:null):(a=da.call(this._longMonthsParse,o),a!==-1?a:null):"MMM"===t?(a=da.call(this._shortMonthsParse,o),a!==-1?a:(a=da.call(this._longMonthsParse,o),a!==-1?a:null)):(a=da.call(this._longMonthsParse,o),a!==-1?a:(a=da.call(this._shortMonthsParse,o),a!==-1?a:null))}function le(e,t,n){var r,a,i;if(this._monthsParseExact)return ce.call(this,e,t,n);for(this._monthsParse||(this._monthsParse=[],this._longMonthsParse=[],this._shortMonthsParse=[]),r=0;r<12;r++){if(a=d([2e3,r]),n&&!this._longMonthsParse[r]&&(this._longMonthsParse[r]=new RegExp("^"+this.months(a,"").replace(".","")+"$","i"),this._shortMonthsParse[r]=new RegExp("^"+this.monthsShort(a,"").replace(".","")+"$","i")),n||this._monthsParse[r]||(i="^"+this.months(a,"")+"|^"+this.monthsShort(a,""),this._monthsParse[r]=new RegExp(i.replace(".",""),"i")),n&&"MMMM"===t&&this._longMonthsParse[r].test(e))return r;if(n&&"MMM"===t&&this._shortMonthsParse[r].test(e))return r;if(!n&&this._monthsParse[r].test(e))return r}}function fe(e,t){var n;if(!e.isValid())return e;if("string"==typeof t)if(/^\d+$/.test(t))t=A(t);else if(t=e.localeData().monthsParse(t),!s(t))return e;return n=Math.min(e.date(),oe(e.year(),t)),e._d["set"+(e._isUTC?"UTC":"")+"Month"](t,n),e}function de(e){return null!=e?(fe(this,e),n.updateOffset(this,!0),this):F(this,"Month")}function he(){return oe(this.year(),this.month())}function pe(e){return this._monthsParseExact?(l(this,"_monthsRegex")||ge.call(this),e?this._monthsShortStrictRegex:this._monthsShortRegex):(l(this,"_monthsShortRegex")||(this._monthsShortRegex=ga),this._monthsShortStrictRegex&&e?this._monthsShortStrictRegex:this._monthsShortRegex)}function me(e){return this._monthsParseExact?(l(this,"_monthsRegex")||ge.call(this),e?this._monthsStrictRegex:this._monthsRegex):(l(this,"_monthsRegex")||(this._monthsRegex=va),this._monthsStrictRegex&&e?this._monthsStrictRegex:this._monthsRegex)}function ge(){function e(e,t){return t.length-e.length}var t,n,r=[],a=[],i=[];for(t=0;t<12;t++)n=d([2e3,t]),r.push(this.monthsShort(n,"")),a.push(this.months(n,"")),i.push(this.months(n,"")),i.push(this.monthsShort(n,""));for(r.sort(e),a.sort(e),i.sort(e),t=0;t<12;t++)r[t]=ne(r[t]),a[t]=ne(a[t]);for(t=0;t<24;t++)i[t]=ne(i[t]);this._monthsRegex=new RegExp("^("+i.join("|")+")","i"),this._monthsShortRegex=this._monthsRegex,this._monthsStrictRegex=new RegExp("^("+a.join("|")+")","i"),this._monthsShortStrictRegex=new RegExp("^("+r.join("|")+")","i")}function ve(e){return ye(e)?366:365}function ye(e){return e%4===0&&e%100!==0||e%400===0}function be(){return ye(this.year())}function _e(e,t,n,r,a,i,o){var s=new Date(e,t,n,r,a,i,o);return e<100&&e>=0&&isFinite(s.getFullYear())&&s.setFullYear(e),s}function we(e){var t=new Date(Date.UTC.apply(null,arguments));return e<100&&e>=0&&isFinite(t.getUTCFullYear())&&t.setUTCFullYear(e),t}function Ae(e,t,n){var r=7+t-n,a=(7+we(e,0,r).getUTCDay()-t)%7;return-a+r-1}function xe(e,t,n,r,a){var i,o,s=(7+n-r)%7,u=Ae(e,r,a),c=1+7*(t-1)+s+u;return c<=0?(i=e-1,o=ve(i)+c):c>ve(e)?(i=e+1,o=c-ve(e)):(i=e,o=c),{year:i,dayOfYear:o}}function Me(e,t,n){var r,a,i=Ae(e.year(),t,n),o=Math.floor((e.dayOfYear()-i-1)/7)+1;return o<1?(a=e.year()-1,r=o+ke(a,t,n)):o>ke(e.year(),t,n)?(r=o-ke(e.year(),t,n),a=e.year()+1):(a=e.year(),r=o),{week:r,year:a}}function ke(e,t,n){var r=Ae(e,t,n),a=Ae(e+1,t,n);return(ve(e)-r+a)/7}function Te(e){return Me(e,this._week.dow,this._week.doy).week}function Se(){return this._week.dow}function Ee(){return this._week.doy}function Ce(e){var t=this.localeData().week(this);return null==e?t:this.add(7*(e-t),"d")}function Oe(e){var t=Me(this,1,4).week;return null==e?t:this.add(7*(e-t),"d")}function De(e,t){return"string"!=typeof e?e:isNaN(e)?(e=t.weekdaysParse(e),"number"==typeof e?e:null):parseInt(e,10)}function je(e,t){return"string"==typeof e?t.weekdaysParse(e)%7||7:isNaN(e)?null:e}function Pe(e,t){return e?a(this._weekdays)?this._weekdays[e.day()]:this._weekdays[this._weekdays.isFormat.test(t)?"format":"standalone"][e.day()]:this._weekdays}function ze(e){return e?this._weekdaysShort[e.day()]:this._weekdaysShort}function Ne(e){return e?this._weekdaysMin[e.day()]:this._weekdaysMin}function We(e,t,n){var r,a,i,o=e.toLocaleLowerCase();if(!this._weekdaysParse)for(this._weekdaysParse=[],this._shortWeekdaysParse=[],this._minWeekdaysParse=[],r=0;r<7;++r)i=d([2e3,1]).day(r),this._minWeekdaysParse[r]=this.weekdaysMin(i,"").toLocaleLowerCase(),this._shortWeekdaysParse[r]=this.weekdaysShort(i,"").toLocaleLowerCase(),this._weekdaysParse[r]=this.weekdays(i,"").toLocaleLowerCase();return n?"dddd"===t?(a=da.call(this._weekdaysParse,o),a!==-1?a:null):"ddd"===t?(a=da.call(this._shortWeekdaysParse,o),a!==-1?a:null):(a=da.call(this._minWeekdaysParse,o),a!==-1?a:null):"dddd"===t?(a=da.call(this._weekdaysParse,o),a!==-1?a:(a=da.call(this._shortWeekdaysParse,o),a!==-1?a:(a=da.call(this._minWeekdaysParse,o),a!==-1?a:null))):"ddd"===t?(a=da.call(this._shortWeekdaysParse,o),a!==-1?a:(a=da.call(this._weekdaysParse,o),a!==-1?a:(a=da.call(this._minWeekdaysParse,o),a!==-1?a:null))):(a=da.call(this._minWeekdaysParse,o),a!==-1?a:(a=da.call(this._weekdaysParse,o),a!==-1?a:(a=da.call(this._shortWeekdaysParse,o),a!==-1?a:null)))}function Le(e,t,n){var r,a,i;if(this._weekdaysParseExact)return We.call(this,e,t,n);for(this._weekdaysParse||(this._weekdaysParse=[],this._minWeekdaysParse=[],this._shortWeekdaysParse=[],this._fullWeekdaysParse=[]),r=0;r<7;r++){if(a=d([2e3,1]).day(r),n&&!this._fullWeekdaysParse[r]&&(this._fullWeekdaysParse[r]=new RegExp("^"+this.weekdays(a,"").replace(".",".?")+"$","i"),this._shortWeekdaysParse[r]=new RegExp("^"+this.weekdaysShort(a,"").replace(".",".?")+"$","i"),this._minWeekdaysParse[r]=new RegExp("^"+this.weekdaysMin(a,"").replace(".",".?")+"$","i")),this._weekdaysParse[r]||(i="^"+this.weekdays(a,"")+"|^"+this.weekdaysShort(a,"")+"|^"+this.weekdaysMin(a,""),this._weekdaysParse[r]=new RegExp(i.replace(".",""),"i")),n&&"dddd"===t&&this._fullWeekdaysParse[r].test(e))return r;if(n&&"ddd"===t&&this._shortWeekdaysParse[r].test(e))return r;if(n&&"dd"===t&&this._minWeekdaysParse[r].test(e))return r;if(!n&&this._weekdaysParse[r].test(e))return r}}function Re(e){if(!this.isValid())return null!=e?this:NaN;var t=this._isUTC?this._d.getUTCDay():this._d.getDay();return null!=e?(e=De(e,this.localeData()),this.add(e-t,"d")):t}function qe(e){if(!this.isValid())return null!=e?this:NaN;var t=(this.day()+7-this.localeData()._week.dow)%7;return null==e?t:this.add(e-t,"d")}function Ye(e){if(!this.isValid())return null!=e?this:NaN;if(null!=e){var t=je(e,this.localeData());return this.day(this.day()%7?t:t-7)}return this.day()||7}function Be(e){return this._weekdaysParseExact?(l(this,"_weekdaysRegex")||Ie.call(this),e?this._weekdaysStrictRegex:this._weekdaysRegex):(l(this,"_weekdaysRegex")||(this._weekdaysRegex=xa),this._weekdaysStrictRegex&&e?this._weekdaysStrictRegex:this._weekdaysRegex)}function He(e){return this._weekdaysParseExact?(l(this,"_weekdaysRegex")||Ie.call(this),e?this._weekdaysShortStrictRegex:this._weekdaysShortRegex):(l(this,"_weekdaysShortRegex")||(this._weekdaysShortRegex=Ma),this._weekdaysShortStrictRegex&&e?this._weekdaysShortStrictRegex:this._weekdaysShortRegex)}function Fe(e){return this._weekdaysParseExact?(l(this,"_weekdaysRegex")||Ie.call(this),e?this._weekdaysMinStrictRegex:this._weekdaysMinRegex):(l(this,"_weekdaysMinRegex")||(this._weekdaysMinRegex=ka), +this._weekdaysMinStrictRegex&&e?this._weekdaysMinStrictRegex:this._weekdaysMinRegex)}function Ie(){function e(e,t){return t.length-e.length}var t,n,r,a,i,o=[],s=[],u=[],c=[];for(t=0;t<7;t++)n=d([2e3,1]).day(t),r=this.weekdaysMin(n,""),a=this.weekdaysShort(n,""),i=this.weekdays(n,""),o.push(r),s.push(a),u.push(i),c.push(r),c.push(a),c.push(i);for(o.sort(e),s.sort(e),u.sort(e),c.sort(e),t=0;t<7;t++)s[t]=ne(s[t]),u[t]=ne(u[t]),c[t]=ne(c[t]);this._weekdaysRegex=new RegExp("^("+c.join("|")+")","i"),this._weekdaysShortRegex=this._weekdaysRegex,this._weekdaysMinRegex=this._weekdaysRegex,this._weekdaysStrictRegex=new RegExp("^("+u.join("|")+")","i"),this._weekdaysShortStrictRegex=new RegExp("^("+s.join("|")+")","i"),this._weekdaysMinStrictRegex=new RegExp("^("+o.join("|")+")","i")}function Ue(){return this.hours()%12||12}function Ge(){return this.hours()||24}function $e(e,t){V(e,0,0,function(){return this.localeData().meridiem(this.hours(),this.minutes(),t)})}function Ve(e,t){return t._meridiemParse}function Ke(e){return"p"===(e+"").toLowerCase().charAt(0)}function Xe(e,t,n){return e>11?n?"pm":"PM":n?"am":"AM"}function Je(e){return e?e.toLowerCase().replace("_","-"):e}function Ze(e){for(var t,n,r,a,i=0;i<e.length;){for(a=Je(e[i]).split("-"),t=a.length,n=Je(e[i+1]),n=n?n.split("-"):null;t>0;){if(r=Qe(a.slice(0,t).join("-")))return r;if(n&&n.length>=t&&x(a,n,!0)>=t-1)break;t--}i++}return null}function Qe(n){var r=null;if(!Oa[n]&&"undefined"!=typeof t&&t&&t.exports)try{r=Ta._abbr,e("./locale/"+n),et(r)}catch(e){}return Oa[n]}function et(e,t){var n;return e&&(n=v(t)?rt(e):tt(e,t),n&&(Ta=n)),Ta._abbr}function tt(e,t){if(null!==t){var n=Ca;if(t.abbr=e,null!=Oa[e])T("defineLocaleOverride","use moment.updateLocale(localeName, config) to change an existing locale. moment.defineLocale(localeName, config) should only be used for creating a new locale See http://momentjs.com/guides/#/warnings/define-locale/ for more info."),n=Oa[e]._config;else if(null!=t.parentLocale){if(null==Oa[t.parentLocale])return Da[t.parentLocale]||(Da[t.parentLocale]=[]),Da[t.parentLocale].push({name:e,config:t}),null;n=Oa[t.parentLocale]._config}return Oa[e]=new O(C(n,t)),Da[e]&&Da[e].forEach(function(e){tt(e.name,e.config)}),et(e),Oa[e]}return delete Oa[e],null}function nt(e,t){if(null!=t){var n,r=Ca;null!=Oa[e]&&(r=Oa[e]._config),t=C(r,t),n=new O(t),n.parentLocale=Oa[e],Oa[e]=n,et(e)}else null!=Oa[e]&&(null!=Oa[e].parentLocale?Oa[e]=Oa[e].parentLocale:null!=Oa[e]&&delete Oa[e]);return Oa[e]}function rt(e){var t;if(e&&e._locale&&e._locale._abbr&&(e=e._locale._abbr),!e)return Ta;if(!a(e)){if(t=Qe(e))return t;e=[e]}return Ze(e)}function at(){return kr(Oa)}function it(e){var t,n=e._a;return n&&p(e).overflow===-2&&(t=n[aa]<0||n[aa]>11?aa:n[ia]<1||n[ia]>oe(n[ra],n[aa])?ia:n[oa]<0||n[oa]>24||24===n[oa]&&(0!==n[sa]||0!==n[ua]||0!==n[ca])?oa:n[sa]<0||n[sa]>59?sa:n[ua]<0||n[ua]>59?ua:n[ca]<0||n[ca]>999?ca:-1,p(e)._overflowDayOfYear&&(t<ra||t>ia)&&(t=ia),p(e)._overflowWeeks&&t===-1&&(t=la),p(e)._overflowWeekday&&t===-1&&(t=fa),p(e).overflow=t),e}function ot(e){var t,n,r,a,i,o,s=e._i,u=ja.exec(s)||Pa.exec(s);if(u){for(p(e).iso=!0,t=0,n=Na.length;t<n;t++)if(Na[t][1].exec(u[1])){a=Na[t][0],r=Na[t][2]!==!1;break}if(null==a)return void(e._isValid=!1);if(u[3]){for(t=0,n=Wa.length;t<n;t++)if(Wa[t][1].exec(u[3])){i=(u[2]||" ")+Wa[t][0];break}if(null==i)return void(e._isValid=!1)}if(!r&&null!=i)return void(e._isValid=!1);if(u[4]){if(!za.exec(u[4]))return void(e._isValid=!1);o="Z"}e._f=a+(i||"")+(o||""),dt(e)}else e._isValid=!1}function st(e){var t=La.exec(e._i);return null!==t?void(e._d=new Date(+t[1])):(ot(e),void(e._isValid===!1&&(delete e._isValid,n.createFromInputFallback(e))))}function ut(e,t,n){return null!=e?e:null!=t?t:n}function ct(e){var t=new Date(n.now());return e._useUTC?[t.getUTCFullYear(),t.getUTCMonth(),t.getUTCDate()]:[t.getFullYear(),t.getMonth(),t.getDate()]}function lt(e){var t,n,r,a,i=[];if(!e._d){for(r=ct(e),e._w&&null==e._a[ia]&&null==e._a[aa]&&ft(e),e._dayOfYear&&(a=ut(e._a[ra],r[ra]),e._dayOfYear>ve(a)&&(p(e)._overflowDayOfYear=!0),n=we(a,0,e._dayOfYear),e._a[aa]=n.getUTCMonth(),e._a[ia]=n.getUTCDate()),t=0;t<3&&null==e._a[t];++t)e._a[t]=i[t]=r[t];for(;t<7;t++)e._a[t]=i[t]=null==e._a[t]?2===t?1:0:e._a[t];24===e._a[oa]&&0===e._a[sa]&&0===e._a[ua]&&0===e._a[ca]&&(e._nextDay=!0,e._a[oa]=0),e._d=(e._useUTC?we:_e).apply(null,i),null!=e._tzm&&e._d.setUTCMinutes(e._d.getUTCMinutes()-e._tzm),e._nextDay&&(e._a[oa]=24)}}function ft(e){var t,n,r,a,i,o,s,u;if(t=e._w,null!=t.GG||null!=t.W||null!=t.E)i=1,o=4,n=ut(t.GG,e._a[ra],Me(_t(),1,4).year),r=ut(t.W,1),a=ut(t.E,1),(a<1||a>7)&&(u=!0);else{i=e._locale._week.dow,o=e._locale._week.doy;var c=Me(_t(),i,o);n=ut(t.gg,e._a[ra],c.year),r=ut(t.w,c.week),null!=t.d?(a=t.d,(a<0||a>6)&&(u=!0)):null!=t.e?(a=t.e+i,(t.e<0||t.e>6)&&(u=!0)):a=i}r<1||r>ke(n,i,o)?p(e)._overflowWeeks=!0:null!=u?p(e)._overflowWeekday=!0:(s=xe(n,r,a,i,o),e._a[ra]=s.year,e._dayOfYear=s.dayOfYear)}function dt(e){if(e._f===n.ISO_8601)return void ot(e);e._a=[],p(e).empty=!0;var t,r,a,i,o,s=""+e._i,u=s.length,c=0;for(a=Z(e._f,e._locale).match(zr)||[],t=0;t<a.length;t++)i=a[t],r=(s.match(ee(i,e))||[])[0],r&&(o=s.substr(0,s.indexOf(r)),o.length>0&&p(e).unusedInput.push(o),s=s.slice(s.indexOf(r)+r.length),c+=r.length),Lr[i]?(r?p(e).empty=!1:p(e).unusedTokens.push(i),ie(i,r,e)):e._strict&&!r&&p(e).unusedTokens.push(i);p(e).charsLeftOver=u-c,s.length>0&&p(e).unusedInput.push(s),e._a[oa]<=12&&p(e).bigHour===!0&&e._a[oa]>0&&(p(e).bigHour=void 0),p(e).parsedDateParts=e._a.slice(0),p(e).meridiem=e._meridiem,e._a[oa]=ht(e._locale,e._a[oa],e._meridiem),lt(e),it(e)}function ht(e,t,n){var r;return null==n?t:null!=e.meridiemHour?e.meridiemHour(t,n):null!=e.isPM?(r=e.isPM(n),r&&t<12&&(t+=12),r||12!==t||(t=0),t):t}function pt(e){var t,n,r,a,i;if(0===e._f.length)return p(e).invalidFormat=!0,void(e._d=new Date(NaN));for(a=0;a<e._f.length;a++)i=0,t=y({},e),null!=e._useUTC&&(t._useUTC=e._useUTC),t._f=e._f[a],dt(t),m(t)&&(i+=p(t).charsLeftOver,i+=10*p(t).unusedTokens.length,p(t).score=i,(null==r||i<r)&&(r=i,n=t));f(e,n||t)}function mt(e){if(!e._d){var t=q(e._i);e._a=c([t.year,t.month,t.day||t.date,t.hour,t.minute,t.second,t.millisecond],function(e){return e&&parseInt(e,10)}),lt(e)}}function gt(e){var t=new b(it(vt(e)));return t._nextDay&&(t.add(1,"d"),t._nextDay=void 0),t}function vt(e){var t=e._i,n=e._f;return e._locale=e._locale||rt(e._l),null===t||void 0===n&&""===t?g({nullInput:!0}):("string"==typeof t&&(e._i=t=e._locale.preparse(t)),_(t)?new b(it(t)):(u(t)?e._d=t:a(n)?pt(e):n?dt(e):yt(e),m(e)||(e._d=null),e))}function yt(e){var t=e._i;void 0===t?e._d=new Date(n.now()):u(t)?e._d=new Date(t.valueOf()):"string"==typeof t?st(e):a(t)?(e._a=c(t.slice(0),function(e){return parseInt(e,10)}),lt(e)):"object"==typeof t?mt(e):s(t)?e._d=new Date(t):n.createFromInputFallback(e)}function bt(e,t,n,r,s){var u={};return n!==!0&&n!==!1||(r=n,n=void 0),(i(e)&&o(e)||a(e)&&0===e.length)&&(e=void 0),u._isAMomentObject=!0,u._useUTC=u._isUTC=s,u._l=n,u._i=e,u._f=t,u._strict=r,gt(u)}function _t(e,t,n,r){return bt(e,t,n,r,!1)}function wt(e,t){var n,r;if(1===t.length&&a(t[0])&&(t=t[0]),!t.length)return _t();for(n=t[0],r=1;r<t.length;++r)t[r].isValid()&&!t[r][e](n)||(n=t[r]);return n}function At(){var e=[].slice.call(arguments,0);return wt("isBefore",e)}function xt(){var e=[].slice.call(arguments,0);return wt("isAfter",e)}function Mt(e){var t=q(e),n=t.year||0,r=t.quarter||0,a=t.month||0,i=t.week||0,o=t.day||0,s=t.hour||0,u=t.minute||0,c=t.second||0,l=t.millisecond||0;this._milliseconds=+l+1e3*c+6e4*u+1e3*s*60*60,this._days=+o+7*i,this._months=+a+3*r+12*n,this._data={},this._locale=rt(),this._bubble()}function kt(e){return e instanceof Mt}function Tt(e){return e<0?Math.round(-1*e)*-1:Math.round(e)}function St(e,t){V(e,0,0,function(){var e=this.utcOffset(),n="+";return e<0&&(e=-e,n="-"),n+$(~~(e/60),2)+t+$(~~e%60,2)})}function Et(e,t){var n=(t||"").match(e);if(null===n)return null;var r=n[n.length-1]||[],a=(r+"").match(Ba)||["-",0,0],i=+(60*a[1])+A(a[2]);return 0===i?0:"+"===a[0]?i:-i}function Ct(e,t){var r,a;return t._isUTC?(r=t.clone(),a=(_(e)||u(e)?e.valueOf():_t(e).valueOf())-r.valueOf(),r._d.setTime(r._d.valueOf()+a),n.updateOffset(r,!1),r):_t(e).local()}function Ot(e){return 15*-Math.round(e._d.getTimezoneOffset()/15)}function Dt(e,t){var r,a=this._offset||0;if(!this.isValid())return null!=e?this:NaN;if(null!=e){if("string"==typeof e){if(e=Et(Zr,e),null===e)return this}else Math.abs(e)<16&&(e*=60);return!this._isUTC&&t&&(r=Ot(this)),this._offset=e,this._isUTC=!0,null!=r&&this.add(r,"m"),a!==e&&(!t||this._changeInProgress?$t(this,Ht(e-a,"m"),1,!1):this._changeInProgress||(this._changeInProgress=!0,n.updateOffset(this,!0),this._changeInProgress=null)),this}return this._isUTC?a:Ot(this)}function jt(e,t){return null!=e?("string"!=typeof e&&(e=-e),this.utcOffset(e,t),this):-this.utcOffset()}function Pt(e){return this.utcOffset(0,e)}function zt(e){return this._isUTC&&(this.utcOffset(0,e),this._isUTC=!1,e&&this.subtract(Ot(this),"m")),this}function Nt(){if(null!=this._tzm)this.utcOffset(this._tzm);else if("string"==typeof this._i){var e=Et(Jr,this._i);null!=e?this.utcOffset(e):this.utcOffset(0,!0)}return this}function Wt(e){return!!this.isValid()&&(e=e?_t(e).utcOffset():0,(this.utcOffset()-e)%60===0)}function Lt(){return this.utcOffset()>this.clone().month(0).utcOffset()||this.utcOffset()>this.clone().month(5).utcOffset()}function Rt(){if(!v(this._isDSTShifted))return this._isDSTShifted;var e={};if(y(e,this),e=vt(e),e._a){var t=e._isUTC?d(e._a):_t(e._a);this._isDSTShifted=this.isValid()&&x(e._a,t.toArray())>0}else this._isDSTShifted=!1;return this._isDSTShifted}function qt(){return!!this.isValid()&&!this._isUTC}function Yt(){return!!this.isValid()&&this._isUTC}function Bt(){return!!this.isValid()&&(this._isUTC&&0===this._offset)}function Ht(e,t){var n,r,a,i=e,o=null;return kt(e)?i={ms:e._milliseconds,d:e._days,M:e._months}:s(e)?(i={},t?i[t]=e:i.milliseconds=e):(o=Ha.exec(e))?(n="-"===o[1]?-1:1,i={y:0,d:A(o[ia])*n,h:A(o[oa])*n,m:A(o[sa])*n,s:A(o[ua])*n,ms:A(Tt(1e3*o[ca]))*n}):(o=Fa.exec(e))?(n="-"===o[1]?-1:1,i={y:Ft(o[2],n),M:Ft(o[3],n),w:Ft(o[4],n),d:Ft(o[5],n),h:Ft(o[6],n),m:Ft(o[7],n),s:Ft(o[8],n)}):null==i?i={}:"object"==typeof i&&("from"in i||"to"in i)&&(a=Ut(_t(i.from),_t(i.to)),i={},i.ms=a.milliseconds,i.M=a.months),r=new Mt(i),kt(e)&&l(e,"_locale")&&(r._locale=e._locale),r}function Ft(e,t){var n=e&&parseFloat(e.replace(",","."));return(isNaN(n)?0:n)*t}function It(e,t){var n={milliseconds:0,months:0};return n.months=t.month()-e.month()+12*(t.year()-e.year()),e.clone().add(n.months,"M").isAfter(t)&&--n.months,n.milliseconds=+t-+e.clone().add(n.months,"M"),n}function Ut(e,t){var n;return e.isValid()&&t.isValid()?(t=Ct(t,e),e.isBefore(t)?n=It(e,t):(n=It(t,e),n.milliseconds=-n.milliseconds,n.months=-n.months),n):{milliseconds:0,months:0}}function Gt(e,t){return function(n,r){var a,i;return null===r||isNaN(+r)||(T(t,"moment()."+t+"(period, number) is deprecated. Please use moment()."+t+"(number, period). See http://momentjs.com/guides/#/warnings/add-inverted-param/ for more info."),i=n,n=r,r=i),n="string"==typeof n?+n:n,a=Ht(n,r),$t(this,a,e),this}}function $t(e,t,r,a){var i=t._milliseconds,o=Tt(t._days),s=Tt(t._months);e.isValid()&&(a=null==a||a,i&&e._d.setTime(e._d.valueOf()+i*r),o&&I(e,"Date",F(e,"Date")+o*r),s&&fe(e,F(e,"Month")+s*r),a&&n.updateOffset(e,o||s))}function Vt(e,t){var n=e.diff(t,"days",!0);return n<-6?"sameElse":n<-1?"lastWeek":n<0?"lastDay":n<1?"sameDay":n<2?"nextDay":n<7?"nextWeek":"sameElse"}function Kt(e,t){var r=e||_t(),a=Ct(r,this).startOf("day"),i=n.calendarFormat(this,a)||"sameElse",o=t&&(S(t[i])?t[i].call(this,r):t[i]);return this.format(o||this.localeData().calendar(i,this,_t(r)))}function Xt(){return new b(this)}function Jt(e,t){var n=_(e)?e:_t(e);return!(!this.isValid()||!n.isValid())&&(t=R(v(t)?"millisecond":t),"millisecond"===t?this.valueOf()>n.valueOf():n.valueOf()<this.clone().startOf(t).valueOf())}function Zt(e,t){var n=_(e)?e:_t(e);return!(!this.isValid()||!n.isValid())&&(t=R(v(t)?"millisecond":t),"millisecond"===t?this.valueOf()<n.valueOf():this.clone().endOf(t).valueOf()<n.valueOf())}function Qt(e,t,n,r){return r=r||"()",("("===r[0]?this.isAfter(e,n):!this.isBefore(e,n))&&(")"===r[1]?this.isBefore(t,n):!this.isAfter(t,n))}function en(e,t){var n,r=_(e)?e:_t(e);return!(!this.isValid()||!r.isValid())&&(t=R(t||"millisecond"),"millisecond"===t?this.valueOf()===r.valueOf():(n=r.valueOf(),this.clone().startOf(t).valueOf()<=n&&n<=this.clone().endOf(t).valueOf()))}function tn(e,t){return this.isSame(e,t)||this.isAfter(e,t)}function nn(e,t){return this.isSame(e,t)||this.isBefore(e,t)}function rn(e,t,n){var r,a,i,o;return this.isValid()?(r=Ct(e,this),r.isValid()?(a=6e4*(r.utcOffset()-this.utcOffset()),t=R(t),"year"===t||"month"===t||"quarter"===t?(o=an(this,r),"quarter"===t?o/=3:"year"===t&&(o/=12)):(i=this-r,o="second"===t?i/1e3:"minute"===t?i/6e4:"hour"===t?i/36e5:"day"===t?(i-a)/864e5:"week"===t?(i-a)/6048e5:i),n?o:w(o)):NaN):NaN}function an(e,t){var n,r,a=12*(t.year()-e.year())+(t.month()-e.month()),i=e.clone().add(a,"months");return t-i<0?(n=e.clone().add(a-1,"months"),r=(t-i)/(i-n)):(n=e.clone().add(a+1,"months"),r=(t-i)/(n-i)),-(a+r)||0}function on(){return this.clone().locale("en").format("ddd MMM DD YYYY HH:mm:ss [GMT]ZZ")}function sn(){var e=this.clone().utc();return 0<e.year()&&e.year()<=9999?S(Date.prototype.toISOString)?this.toDate().toISOString():J(e,"YYYY-MM-DD[T]HH:mm:ss.SSS[Z]"):J(e,"YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]")}function un(){if(!this.isValid())return"moment.invalid(/* "+this._i+" */)";var e="moment",t="";this.isLocal()||(e=0===this.utcOffset()?"moment.utc":"moment.parseZone",t="Z");var n="["+e+'("]',r=0<this.year()&&this.year()<=9999?"YYYY":"YYYYYY",a="-MM-DD[T]HH:mm:ss.SSS",i=t+'[")]';return this.format(n+r+a+i)}function cn(e){e||(e=this.isUtc()?n.defaultFormatUtc:n.defaultFormat);var t=J(this,e);return this.localeData().postformat(t)}function ln(e,t){return this.isValid()&&(_(e)&&e.isValid()||_t(e).isValid())?Ht({to:this,from:e}).locale(this.locale()).humanize(!t):this.localeData().invalidDate()}function fn(e){return this.from(_t(),e)}function dn(e,t){return this.isValid()&&(_(e)&&e.isValid()||_t(e).isValid())?Ht({from:this,to:e}).locale(this.locale()).humanize(!t):this.localeData().invalidDate()}function hn(e){return this.to(_t(),e)}function pn(e){var t;return void 0===e?this._locale._abbr:(t=rt(e),null!=t&&(this._locale=t),this)}function mn(){return this._locale}function gn(e){switch(e=R(e)){case"year":this.month(0);case"quarter":case"month":this.date(1);case"week":case"isoWeek":case"day":case"date":this.hours(0);case"hour":this.minutes(0);case"minute":this.seconds(0);case"second":this.milliseconds(0)}return"week"===e&&this.weekday(0),"isoWeek"===e&&this.isoWeekday(1),"quarter"===e&&this.month(3*Math.floor(this.month()/3)),this}function vn(e){return e=R(e),void 0===e||"millisecond"===e?this:("date"===e&&(e="day"),this.startOf(e).add(1,"isoWeek"===e?"week":e).subtract(1,"ms"))}function yn(){return this._d.valueOf()-6e4*(this._offset||0)}function bn(){return Math.floor(this.valueOf()/1e3)}function _n(){return new Date(this.valueOf())}function wn(){var e=this;return[e.year(),e.month(),e.date(),e.hour(),e.minute(),e.second(),e.millisecond()]}function An(){var e=this;return{years:e.year(),months:e.month(),date:e.date(),hours:e.hours(),minutes:e.minutes(),seconds:e.seconds(),milliseconds:e.milliseconds()}}function xn(){return this.isValid()?this.toISOString():null}function Mn(){return m(this)}function kn(){return f({},p(this))}function Tn(){return p(this).overflow}function Sn(){return{input:this._i,format:this._f,locale:this._locale,isUTC:this._isUTC,strict:this._strict}}function En(e,t){V(0,[e,e.length],0,t)}function Cn(e){return Pn.call(this,e,this.week(),this.weekday(),this.localeData()._week.dow,this.localeData()._week.doy)}function On(e){return Pn.call(this,e,this.isoWeek(),this.isoWeekday(),1,4)}function Dn(){return ke(this.year(),1,4)}function jn(){var e=this.localeData()._week;return ke(this.year(),e.dow,e.doy)}function Pn(e,t,n,r,a){var i;return null==e?Me(this,r,a).year:(i=ke(e,r,a),t>i&&(t=i),zn.call(this,e,t,n,r,a))}function zn(e,t,n,r,a){var i=xe(e,t,n,r,a),o=we(i.year,0,i.dayOfYear);return this.year(o.getUTCFullYear()),this.month(o.getUTCMonth()),this.date(o.getUTCDate()),this}function Nn(e){return null==e?Math.ceil((this.month()+1)/3):this.month(3*(e-1)+this.month()%3)}function Wn(e){var t=Math.round((this.clone().startOf("day")-this.clone().startOf("year"))/864e5)+1;return null==e?t:this.add(e-t,"d")}function Ln(e,t){t[ca]=A(1e3*("0."+e))}function Rn(){return this._isUTC?"UTC":""}function qn(){return this._isUTC?"Coordinated Universal Time":""}function Yn(e){return _t(1e3*e)}function Bn(){return _t.apply(null,arguments).parseZone()}function Hn(e){return e}function Fn(e,t,n,r){var a=rt(),i=d().set(r,t);return a[n](i,e)}function In(e,t,n){if(s(e)&&(t=e,e=void 0),e=e||"",null!=t)return Fn(e,t,n,"month");var r,a=[];for(r=0;r<12;r++)a[r]=Fn(e,r,n,"month");return a}function Un(e,t,n,r){"boolean"==typeof e?(s(t)&&(n=t,t=void 0),t=t||""):(t=e,n=t,e=!1,s(t)&&(n=t,t=void 0),t=t||"");var a=rt(),i=e?a._week.dow:0;if(null!=n)return Fn(t,(n+i)%7,r,"day");var o,u=[];for(o=0;o<7;o++)u[o]=Fn(t,(o+i)%7,r,"day");return u}function Gn(e,t){return In(e,t,"months")}function $n(e,t){return In(e,t,"monthsShort")}function Vn(e,t,n){return Un(e,t,n,"weekdays")}function Kn(e,t,n){return Un(e,t,n,"weekdaysShort")}function Xn(e,t,n){return Un(e,t,n,"weekdaysMin")}function Jn(){var e=this._data;return this._milliseconds=ei(this._milliseconds),this._days=ei(this._days),this._months=ei(this._months),e.milliseconds=ei(e.milliseconds),e.seconds=ei(e.seconds),e.minutes=ei(e.minutes),e.hours=ei(e.hours),e.months=ei(e.months),e.years=ei(e.years),this}function Zn(e,t,n,r){var a=Ht(t,n);return e._milliseconds+=r*a._milliseconds,e._days+=r*a._days,e._months+=r*a._months,e._bubble()}function Qn(e,t){return Zn(this,e,t,1)}function er(e,t){return Zn(this,e,t,-1)}function tr(e){return e<0?Math.floor(e):Math.ceil(e)}function nr(){var e,t,n,r,a,i=this._milliseconds,o=this._days,s=this._months,u=this._data;return i>=0&&o>=0&&s>=0||i<=0&&o<=0&&s<=0||(i+=864e5*tr(ar(s)+o),o=0,s=0),u.milliseconds=i%1e3,e=w(i/1e3),u.seconds=e%60,t=w(e/60),u.minutes=t%60,n=w(t/60),u.hours=n%24,o+=w(n/24),a=w(rr(o)),s+=a,o-=tr(ar(a)),r=w(s/12),s%=12,u.days=o,u.months=s,u.years=r,this}function rr(e){return 4800*e/146097}function ar(e){return 146097*e/4800}function ir(e){var t,n,r=this._milliseconds;if(e=R(e),"month"===e||"year"===e)return t=this._days+r/864e5,n=this._months+rr(t),"month"===e?n:n/12;switch(t=this._days+Math.round(ar(this._months)),e){case"week":return t/7+r/6048e5;case"day":return t+r/864e5;case"hour":return 24*t+r/36e5;case"minute":return 1440*t+r/6e4;case"second":return 86400*t+r/1e3;case"millisecond":return Math.floor(864e5*t)+r;default:throw new Error("Unknown unit "+e)}}function or(){return this._milliseconds+864e5*this._days+this._months%12*2592e6+31536e6*A(this._months/12)}function sr(e){return function(){return this.as(e)}}function ur(e){return e=R(e),this[e+"s"]()}function cr(e){return function(){return this._data[e]}}function lr(){return w(this.days()/7)}function fr(e,t,n,r,a){return a.relativeTime(t||1,!!n,e,r)}function dr(e,t,n){var r=Ht(e).abs(),a=gi(r.as("s")),i=gi(r.as("m")),o=gi(r.as("h")),s=gi(r.as("d")),u=gi(r.as("M")),c=gi(r.as("y")),l=a<vi.s&&["s",a]||i<=1&&["m"]||i<vi.m&&["mm",i]||o<=1&&["h"]||o<vi.h&&["hh",o]||s<=1&&["d"]||s<vi.d&&["dd",s]||u<=1&&["M"]||u<vi.M&&["MM",u]||c<=1&&["y"]||["yy",c];return l[2]=t,l[3]=+e>0,l[4]=n,fr.apply(null,l)}function hr(e){return void 0===e?gi:"function"==typeof e&&(gi=e,!0)}function pr(e,t){return void 0!==vi[e]&&(void 0===t?vi[e]:(vi[e]=t,!0))}function mr(e){var t=this.localeData(),n=dr(this,!e,t);return e&&(n=t.pastFuture(+this,n)),t.postformat(n)}function gr(){var e,t,n,r=yi(this._milliseconds)/1e3,a=yi(this._days),i=yi(this._months);e=w(r/60),t=w(e/60),r%=60,e%=60,n=w(i/12),i%=12;var o=n,s=i,u=a,c=t,l=e,f=r,d=this.asSeconds();return d?(d<0?"-":"")+"P"+(o?o+"Y":"")+(s?s+"M":"")+(u?u+"D":"")+(c||l||f?"T":"")+(c?c+"H":"")+(l?l+"M":"")+(f?f+"S":""):"P0D"}var vr,yr;yr=Array.prototype.some?Array.prototype.some:function(e){for(var t=Object(this),n=t.length>>>0,r=0;r<n;r++)if(r in t&&e.call(this,t[r],r,t))return!0;return!1};var br=yr,_r=n.momentProperties=[],wr=!1,Ar={};n.suppressDeprecationWarnings=!1,n.deprecationHandler=null;var xr;xr=Object.keys?Object.keys:function(e){var t,n=[];for(t in e)l(e,t)&&n.push(t);return n};var Mr,kr=xr,Tr={sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},Sr={LTS:"h:mm:ss A",LT:"h:mm A",L:"MM/DD/YYYY",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY h:mm A",LLLL:"dddd, MMMM D, YYYY h:mm A"},Er="Invalid date",Cr="%d",Or=/\d{1,2}/,Dr={future:"in %s",past:"%s ago",s:"a few seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},jr={},Pr={},zr=/(\[[^\[]*\])|(\\)?([Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|YYYYYY|YYYYY|YYYY|YY|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|kk?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g,Nr=/(\[[^\[]*\])|(\\)?(LTS|LT|LL?L?L?|l{1,4})/g,Wr={},Lr={},Rr=/\d/,qr=/\d\d/,Yr=/\d{3}/,Br=/\d{4}/,Hr=/[+-]?\d{6}/,Fr=/\d\d?/,Ir=/\d\d\d\d?/,Ur=/\d\d\d\d\d\d?/,Gr=/\d{1,3}/,$r=/\d{1,4}/,Vr=/[+-]?\d{1,6}/,Kr=/\d+/,Xr=/[+-]?\d+/,Jr=/Z|[+-]\d\d:?\d\d/gi,Zr=/Z|[+-]\d\d(?::?\d\d)?/gi,Qr=/[+-]?\d+(\.\d{1,3})?/,ea=/[0-9]*['a-z\u00A0-\u05FF\u0700-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]+|[\u0600-\u06FF\/]+(\s*?[\u0600-\u06FF]+){1,2}/i,ta={},na={},ra=0,aa=1,ia=2,oa=3,sa=4,ua=5,ca=6,la=7,fa=8;Mr=Array.prototype.indexOf?Array.prototype.indexOf:function(e){var t;for(t=0;t<this.length;++t)if(this[t]===e)return t;return-1};var da=Mr;V("M",["MM",2],"Mo",function(){return this.month()+1}),V("MMM",0,0,function(e){return this.localeData().monthsShort(this,e)}),V("MMMM",0,0,function(e){return this.localeData().months(this,e)}),L("month","M"),Y("month",8),Q("M",Fr),Q("MM",Fr,qr),Q("MMM",function(e,t){return t.monthsShortRegex(e)}),Q("MMMM",function(e,t){return t.monthsRegex(e)}),re(["M","MM"],function(e,t){t[aa]=A(e)-1}),re(["MMM","MMMM"],function(e,t,n,r){var a=n._locale.monthsParse(e,r,n._strict);null!=a?t[aa]=a:p(n).invalidMonth=e});var ha=/D[oD]?(\[[^\[\]]*\]|\s)+MMMM?/,pa="January_February_March_April_May_June_July_August_September_October_November_December".split("_"),ma="Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),ga=ea,va=ea;V("Y",0,0,function(){var e=this.year();return e<=9999?""+e:"+"+e}),V(0,["YY",2],0,function(){return this.year()%100}),V(0,["YYYY",4],0,"year"),V(0,["YYYYY",5],0,"year"),V(0,["YYYYYY",6,!0],0,"year"),L("year","y"),Y("year",1),Q("Y",Xr),Q("YY",Fr,qr),Q("YYYY",$r,Br),Q("YYYYY",Vr,Hr),Q("YYYYYY",Vr,Hr),re(["YYYYY","YYYYYY"],ra),re("YYYY",function(e,t){t[ra]=2===e.length?n.parseTwoDigitYear(e):A(e)}),re("YY",function(e,t){t[ra]=n.parseTwoDigitYear(e)}),re("Y",function(e,t){t[ra]=parseInt(e,10)}),n.parseTwoDigitYear=function(e){return A(e)+(A(e)>68?1900:2e3)};var ya=H("FullYear",!0);V("w",["ww",2],"wo","week"),V("W",["WW",2],"Wo","isoWeek"),L("week","w"),L("isoWeek","W"),Y("week",5),Y("isoWeek",5),Q("w",Fr),Q("ww",Fr,qr),Q("W",Fr),Q("WW",Fr,qr),ae(["w","ww","W","WW"],function(e,t,n,r){t[r.substr(0,1)]=A(e)});var ba={dow:0,doy:6};V("d",0,"do","day"),V("dd",0,0,function(e){return this.localeData().weekdaysMin(this,e)}),V("ddd",0,0,function(e){return this.localeData().weekdaysShort(this,e)}),V("dddd",0,0,function(e){return this.localeData().weekdays(this,e)}),V("e",0,0,"weekday"),V("E",0,0,"isoWeekday"),L("day","d"),L("weekday","e"),L("isoWeekday","E"),Y("day",11),Y("weekday",11),Y("isoWeekday",11),Q("d",Fr),Q("e",Fr),Q("E",Fr),Q("dd",function(e,t){return t.weekdaysMinRegex(e)}),Q("ddd",function(e,t){return t.weekdaysShortRegex(e)}),Q("dddd",function(e,t){return t.weekdaysRegex(e)}),ae(["dd","ddd","dddd"],function(e,t,n,r){var a=n._locale.weekdaysParse(e,r,n._strict);null!=a?t.d=a:p(n).invalidWeekday=e}),ae(["d","e","E"],function(e,t,n,r){t[r]=A(e)});var _a="Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),wa="Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),Aa="Su_Mo_Tu_We_Th_Fr_Sa".split("_"),xa=ea,Ma=ea,ka=ea;V("H",["HH",2],0,"hour"),V("h",["hh",2],0,Ue),V("k",["kk",2],0,Ge),V("hmm",0,0,function(){return""+Ue.apply(this)+$(this.minutes(),2)}),V("hmmss",0,0,function(){return""+Ue.apply(this)+$(this.minutes(),2)+$(this.seconds(),2)}),V("Hmm",0,0,function(){return""+this.hours()+$(this.minutes(),2)}),V("Hmmss",0,0,function(){return""+this.hours()+$(this.minutes(),2)+$(this.seconds(),2)}),$e("a",!0),$e("A",!1),L("hour","h"),Y("hour",13),Q("a",Ve),Q("A",Ve),Q("H",Fr),Q("h",Fr),Q("HH",Fr,qr),Q("hh",Fr,qr),Q("hmm",Ir),Q("hmmss",Ur),Q("Hmm",Ir),Q("Hmmss",Ur),re(["H","HH"],oa),re(["a","A"],function(e,t,n){n._isPm=n._locale.isPM(e),n._meridiem=e}),re(["h","hh"],function(e,t,n){t[oa]=A(e),p(n).bigHour=!0}),re("hmm",function(e,t,n){var r=e.length-2;t[oa]=A(e.substr(0,r)),t[sa]=A(e.substr(r)),p(n).bigHour=!0}),re("hmmss",function(e,t,n){var r=e.length-4,a=e.length-2;t[oa]=A(e.substr(0,r)),t[sa]=A(e.substr(r,2)),t[ua]=A(e.substr(a)),p(n).bigHour=!0}),re("Hmm",function(e,t,n){var r=e.length-2;t[oa]=A(e.substr(0,r)),t[sa]=A(e.substr(r))}),re("Hmmss",function(e,t,n){var r=e.length-4,a=e.length-2;t[oa]=A(e.substr(0,r)),t[sa]=A(e.substr(r,2)),t[ua]=A(e.substr(a))});var Ta,Sa=/[ap]\.?m?\.?/i,Ea=H("Hours",!0),Ca={calendar:Tr,longDateFormat:Sr,invalidDate:Er,ordinal:Cr,ordinalParse:Or,relativeTime:Dr,months:pa,monthsShort:ma,week:ba,weekdays:_a,weekdaysMin:Aa,weekdaysShort:wa,meridiemParse:Sa},Oa={},Da={},ja=/^\s*((?:[+-]\d{6}|\d{4})-(?:\d\d-\d\d|W\d\d-\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?::\d\d(?::\d\d(?:[.,]\d+)?)?)?)([\+\-]\d\d(?::?\d\d)?|\s*Z)?)?$/,Pa=/^\s*((?:[+-]\d{6}|\d{4})(?:\d\d\d\d|W\d\d\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?:\d\d(?:\d\d(?:[.,]\d+)?)?)?)([\+\-]\d\d(?::?\d\d)?|\s*Z)?)?$/,za=/Z|[+-]\d\d(?::?\d\d)?/,Na=[["YYYYYY-MM-DD",/[+-]\d{6}-\d\d-\d\d/],["YYYY-MM-DD",/\d{4}-\d\d-\d\d/],["GGGG-[W]WW-E",/\d{4}-W\d\d-\d/],["GGGG-[W]WW",/\d{4}-W\d\d/,!1],["YYYY-DDD",/\d{4}-\d{3}/],["YYYY-MM",/\d{4}-\d\d/,!1],["YYYYYYMMDD",/[+-]\d{10}/],["YYYYMMDD",/\d{8}/],["GGGG[W]WWE",/\d{4}W\d{3}/],["GGGG[W]WW",/\d{4}W\d{2}/,!1],["YYYYDDD",/\d{7}/]],Wa=[["HH:mm:ss.SSSS",/\d\d:\d\d:\d\d\.\d+/],["HH:mm:ss,SSSS",/\d\d:\d\d:\d\d,\d+/],["HH:mm:ss",/\d\d:\d\d:\d\d/],["HH:mm",/\d\d:\d\d/],["HHmmss.SSSS",/\d\d\d\d\d\d\.\d+/],["HHmmss,SSSS",/\d\d\d\d\d\d,\d+/],["HHmmss",/\d\d\d\d\d\d/],["HHmm",/\d\d\d\d/],["HH",/\d\d/]],La=/^\/?Date\((\-?\d+)/i;n.createFromInputFallback=k("value provided is not in a recognized ISO format. moment construction falls back to js Date(), which is not reliable across all browsers and versions. Non ISO date formats are discouraged and will be removed in an upcoming major release. Please refer to http://momentjs.com/guides/#/warnings/js-date/ for more info.",function(e){e._d=new Date(e._i+(e._useUTC?" UTC":""))}),n.ISO_8601=function(){};var Ra=k("moment().min is deprecated, use moment.max instead. http://momentjs.com/guides/#/warnings/min-max/",function(){var e=_t.apply(null,arguments);return this.isValid()&&e.isValid()?e<this?this:e:g()}),qa=k("moment().max is deprecated, use moment.min instead. http://momentjs.com/guides/#/warnings/min-max/",function(){var e=_t.apply(null,arguments);return this.isValid()&&e.isValid()?e>this?this:e:g()}),Ya=function(){return Date.now?Date.now():+new Date};St("Z",":"),St("ZZ",""),Q("Z",Zr),Q("ZZ",Zr),re(["Z","ZZ"],function(e,t,n){n._useUTC=!0,n._tzm=Et(Zr,e)});var Ba=/([\+\-]|\d\d)/gi;n.updateOffset=function(){};var Ha=/^(\-)?(?:(\d*)[. ])?(\d+)\:(\d+)(?:\:(\d+)(\.\d*)?)?$/,Fa=/^(-)?P(?:(-?[0-9,.]*)Y)?(?:(-?[0-9,.]*)M)?(?:(-?[0-9,.]*)W)?(?:(-?[0-9,.]*)D)?(?:T(?:(-?[0-9,.]*)H)?(?:(-?[0-9,.]*)M)?(?:(-?[0-9,.]*)S)?)?$/;Ht.fn=Mt.prototype;var Ia=Gt(1,"add"),Ua=Gt(-1,"subtract");n.defaultFormat="YYYY-MM-DDTHH:mm:ssZ",n.defaultFormatUtc="YYYY-MM-DDTHH:mm:ss[Z]";var Ga=k("moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.",function(e){return void 0===e?this.localeData():this.locale(e)});V(0,["gg",2],0,function(){return this.weekYear()%100}),V(0,["GG",2],0,function(){return this.isoWeekYear()%100}),En("gggg","weekYear"),En("ggggg","weekYear"),En("GGGG","isoWeekYear"),En("GGGGG","isoWeekYear"),L("weekYear","gg"),L("isoWeekYear","GG"),Y("weekYear",1),Y("isoWeekYear",1),Q("G",Xr),Q("g",Xr),Q("GG",Fr,qr),Q("gg",Fr,qr),Q("GGGG",$r,Br),Q("gggg",$r,Br),Q("GGGGG",Vr,Hr),Q("ggggg",Vr,Hr),ae(["gggg","ggggg","GGGG","GGGGG"],function(e,t,n,r){t[r.substr(0,2)]=A(e)}),ae(["gg","GG"],function(e,t,r,a){t[a]=n.parseTwoDigitYear(e)}),V("Q",0,"Qo","quarter"),L("quarter","Q"),Y("quarter",7),Q("Q",Rr),re("Q",function(e,t){t[aa]=3*(A(e)-1)}),V("D",["DD",2],"Do","date"),L("date","D"),Y("date",9),Q("D",Fr),Q("DD",Fr,qr),Q("Do",function(e,t){return e?t._ordinalParse:t._ordinalParseLenient}),re(["D","DD"],ia),re("Do",function(e,t){t[ia]=A(e.match(Fr)[0],10)});var $a=H("Date",!0);V("DDD",["DDDD",3],"DDDo","dayOfYear"),L("dayOfYear","DDD"),Y("dayOfYear",4),Q("DDD",Gr),Q("DDDD",Yr),re(["DDD","DDDD"],function(e,t,n){n._dayOfYear=A(e)}),V("m",["mm",2],0,"minute"),L("minute","m"),Y("minute",14),Q("m",Fr),Q("mm",Fr,qr),re(["m","mm"],sa);var Va=H("Minutes",!1);V("s",["ss",2],0,"second"),L("second","s"),Y("second",15),Q("s",Fr),Q("ss",Fr,qr),re(["s","ss"],ua);var Ka=H("Seconds",!1);V("S",0,0,function(){return~~(this.millisecond()/100)}),V(0,["SS",2],0,function(){return~~(this.millisecond()/10)}),V(0,["SSS",3],0,"millisecond"),V(0,["SSSS",4],0,function(){return 10*this.millisecond()}),V(0,["SSSSS",5],0,function(){return 100*this.millisecond()}),V(0,["SSSSSS",6],0,function(){return 1e3*this.millisecond()}),V(0,["SSSSSSS",7],0,function(){return 1e4*this.millisecond()}),V(0,["SSSSSSSS",8],0,function(){return 1e5*this.millisecond()}),V(0,["SSSSSSSSS",9],0,function(){return 1e6*this.millisecond()}),L("millisecond","ms"),Y("millisecond",16),Q("S",Gr,Rr),Q("SS",Gr,qr),Q("SSS",Gr,Yr);var Xa;for(Xa="SSSS";Xa.length<=9;Xa+="S")Q(Xa,Kr);for(Xa="S";Xa.length<=9;Xa+="S")re(Xa,Ln);var Ja=H("Milliseconds",!1);V("z",0,0,"zoneAbbr"),V("zz",0,0,"zoneName");var Za=b.prototype;Za.add=Ia,Za.calendar=Kt,Za.clone=Xt,Za.diff=rn,Za.endOf=vn,Za.format=cn,Za.from=ln,Za.fromNow=fn,Za.to=dn,Za.toNow=hn,Za.get=U,Za.invalidAt=Tn,Za.isAfter=Jt,Za.isBefore=Zt,Za.isBetween=Qt,Za.isSame=en,Za.isSameOrAfter=tn,Za.isSameOrBefore=nn,Za.isValid=Mn,Za.lang=Ga,Za.locale=pn,Za.localeData=mn,Za.max=qa,Za.min=Ra,Za.parsingFlags=kn,Za.set=G,Za.startOf=gn,Za.subtract=Ua,Za.toArray=wn,Za.toObject=An,Za.toDate=_n,Za.toISOString=sn,Za.inspect=un,Za.toJSON=xn,Za.toString=on,Za.unix=bn,Za.valueOf=yn,Za.creationData=Sn,Za.year=ya,Za.isLeapYear=be,Za.weekYear=Cn,Za.isoWeekYear=On,Za.quarter=Za.quarters=Nn,Za.month=de,Za.daysInMonth=he,Za.week=Za.weeks=Ce,Za.isoWeek=Za.isoWeeks=Oe,Za.weeksInYear=jn,Za.isoWeeksInYear=Dn,Za.date=$a,Za.day=Za.days=Re,Za.weekday=qe,Za.isoWeekday=Ye,Za.dayOfYear=Wn,Za.hour=Za.hours=Ea,Za.minute=Za.minutes=Va,Za.second=Za.seconds=Ka,Za.millisecond=Za.milliseconds=Ja,Za.utcOffset=Dt,Za.utc=Pt,Za.local=zt,Za.parseZone=Nt,Za.hasAlignedHourOffset=Wt,Za.isDST=Lt,Za.isLocal=qt,Za.isUtcOffset=Yt,Za.isUtc=Bt,Za.isUTC=Bt,Za.zoneAbbr=Rn,Za.zoneName=qn,Za.dates=k("dates accessor is deprecated. Use date instead.",$a),Za.months=k("months accessor is deprecated. Use month instead",de),Za.years=k("years accessor is deprecated. Use year instead",ya),Za.zone=k("moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/",jt),Za.isDSTShifted=k("isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information",Rt);var Qa=O.prototype;Qa.calendar=D,Qa.longDateFormat=j, +Qa.invalidDate=P,Qa.ordinal=z,Qa.preparse=Hn,Qa.postformat=Hn,Qa.relativeTime=N,Qa.pastFuture=W,Qa.set=E,Qa.months=se,Qa.monthsShort=ue,Qa.monthsParse=le,Qa.monthsRegex=me,Qa.monthsShortRegex=pe,Qa.week=Te,Qa.firstDayOfYear=Ee,Qa.firstDayOfWeek=Se,Qa.weekdays=Pe,Qa.weekdaysMin=Ne,Qa.weekdaysShort=ze,Qa.weekdaysParse=Le,Qa.weekdaysRegex=Be,Qa.weekdaysShortRegex=He,Qa.weekdaysMinRegex=Fe,Qa.isPM=Ke,Qa.meridiem=Xe,et("en",{ordinalParse:/\d{1,2}(th|st|nd|rd)/,ordinal:function(e){var t=e%10,n=1===A(e%100/10)?"th":1===t?"st":2===t?"nd":3===t?"rd":"th";return e+n}}),n.lang=k("moment.lang is deprecated. Use moment.locale instead.",et),n.langData=k("moment.langData is deprecated. Use moment.localeData instead.",rt);var ei=Math.abs,ti=sr("ms"),ni=sr("s"),ri=sr("m"),ai=sr("h"),ii=sr("d"),oi=sr("w"),si=sr("M"),ui=sr("y"),ci=cr("milliseconds"),li=cr("seconds"),fi=cr("minutes"),di=cr("hours"),hi=cr("days"),pi=cr("months"),mi=cr("years"),gi=Math.round,vi={s:45,m:45,h:22,d:26,M:11},yi=Math.abs,bi=Mt.prototype;return bi.abs=Jn,bi.add=Qn,bi.subtract=er,bi.as=ir,bi.asMilliseconds=ti,bi.asSeconds=ni,bi.asMinutes=ri,bi.asHours=ai,bi.asDays=ii,bi.asWeeks=oi,bi.asMonths=si,bi.asYears=ui,bi.valueOf=or,bi._bubble=nr,bi.get=ur,bi.milliseconds=ci,bi.seconds=li,bi.minutes=fi,bi.hours=di,bi.days=hi,bi.weeks=lr,bi.months=pi,bi.years=mi,bi.humanize=mr,bi.toISOString=gr,bi.toString=gr,bi.toJSON=gr,bi.locale=pn,bi.localeData=mn,bi.toIsoString=k("toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)",gr),bi.lang=Ga,V("X",0,0,"unix"),V("x",0,0,"valueOf"),Q("x",Xr),Q("X",Qr),re("X",function(e,t,n){n._d=new Date(1e3*parseFloat(e,10))}),re("x",function(e,t,n){n._d=new Date(A(e))}),n.version="2.16.0",r(_t),n.fn=Za,n.min=At,n.max=xt,n.now=Ya,n.utc=d,n.unix=Yn,n.months=Gn,n.isDate=u,n.locale=et,n.invalid=g,n.duration=Ht,n.isMoment=_,n.weekdays=Vn,n.parseZone=Bn,n.localeData=rt,n.isDuration=kt,n.monthsShort=$n,n.weekdaysMin=Xn,n.defineLocale=tt,n.updateLocale=nt,n.locales=at,n.weekdaysShort=Kn,n.normalizeUnits=R,n.relativeTimeRounding=hr,n.relativeTimeThreshold=pr,n.calendarFormat=Vt,n.prototype=Za,n})}),fp=n(function(e){!function(t,n){"function"==typeof define&&define.amd?define(["moment"],n):"object"==typeof e&&e.exports?e.exports=n(lp):n(t.moment)}(this,function(e){function t(e){return e>96?e-87:e>64?e-29:e-48}function n(e){var n,r=0,a=e.split("."),i=a[0],o=a[1]||"",s=1,u=0,c=1;for(45===e.charCodeAt(0)&&(r=1,c=-1),r;r<i.length;r++)n=t(i.charCodeAt(r)),u=60*u+n;for(r=0;r<o.length;r++)s/=60,n=t(o.charCodeAt(r)),u+=n*s;return u*c}function r(e){for(var t=0;t<e.length;t++)e[t]=n(e[t])}function a(e,t){for(var n=0;n<t;n++)e[n]=Math.round((e[n-1]||0)+6e4*e[n]);e[t-1]=1/0}function i(e,t){var n,r=[];for(n=0;n<t.length;n++)r[n]=e[t[n]];return r}function o(e){var t=e.split("|"),n=t[2].split(" "),o=t[3].split(""),s=t[4].split(" ");return r(n),r(o),r(s),a(s,o.length),{name:t[0],abbrs:i(t[1].split(" "),o),offsets:i(n,o),untils:s,population:0|t[5]}}function s(e){e&&this._set(o(e))}function u(e){var t=e.toTimeString(),n=t.match(/\([a-z ]+\)/i);n&&n[0]?(n=n[0].match(/[A-Z]/g),n=n?n.join(""):void 0):(n=t.match(/[A-Z]{3,5}/g),n=n?n[0]:void 0),"GMT"===n&&(n=void 0),this.at=+e,this.abbr=n,this.offset=e.getTimezoneOffset()}function c(e){this.zone=e,this.offsetScore=0,this.abbrScore=0}function l(e,t){for(var n,r;r=6e4*((t.at-e.at)/12e4|0);)n=new u(new Date(e.at+r)),n.offset===e.offset?e=n:t=n;return e}function f(){var e,t,n,r=(new Date).getFullYear()-2,a=new u(new Date(r,0,1)),i=[a];for(n=1;n<48;n++)t=new u(new Date(r,n,1)),t.offset!==a.offset&&(e=l(a,t),i.push(e),i.push(new u(new Date(e.at+6e4)))),a=t;for(n=0;n<4;n++)i.push(new u(new Date(r+n,0,1))),i.push(new u(new Date(r+n,6,1)));return i}function d(e,t){return e.offsetScore!==t.offsetScore?e.offsetScore-t.offsetScore:e.abbrScore!==t.abbrScore?e.abbrScore-t.abbrScore:t.zone.population-e.zone.population}function h(e,t){var n,a;for(r(t),n=0;n<t.length;n++)a=t[n],z[a]=z[a]||{},z[a][e]=!0}function p(e){var t,n,r,a=e.length,i={},o=[];for(t=0;t<a;t++){r=z[e[t].offset]||{};for(n in r)r.hasOwnProperty(n)&&(i[n]=!0)}for(t in i)i.hasOwnProperty(t)&&o.push(P[t]);return o}function m(){try{var e=Intl.DateTimeFormat().resolvedOptions().timeZone;if(e){var t=P[v(e)];if(t)return t;k("Moment Timezone found "+e+" from the Intl api, but did not have that data loaded.")}}catch(e){}var n,r,a,i=f(),o=i.length,s=p(i),u=[];for(r=0;r<s.length;r++){for(n=new c(b(s[r]),o),a=0;a<o;a++)n.scoreOffsetAt(i[a]);u.push(n)}return u.sort(d),u.length>0?u[0].zone.name:void 0}function g(e){return C&&!e||(C=m()),C}function v(e){return(e||"").toLowerCase().replace(/\//g,"_")}function y(e){var t,n,r,a;for("string"==typeof e&&(e=[e]),t=0;t<e.length;t++)r=e[t].split("|"),n=r[0],a=v(n),D[a]=e[t],P[a]=n,r[5]&&h(a,r[2].split(" "))}function b(e,t){e=v(e);var n,r=D[e];return r instanceof s?r:"string"==typeof r?(r=new s(r),D[e]=r,r):j[e]&&t!==b&&(n=b(j[e],b))?(r=D[e]=new s,r._set(n),r.name=P[e],r):null}function _(){var e,t=[];for(e in P)P.hasOwnProperty(e)&&(D[e]||D[j[e]])&&P[e]&&t.push(P[e]);return t.sort()}function w(e){var t,n,r,a;for("string"==typeof e&&(e=[e]),t=0;t<e.length;t++)n=e[t].split("|"),r=v(n[0]),a=v(n[1]),j[r]=a,P[r]=n[0],j[a]=r,P[a]=n[1]}function A(e){y(e.zones),w(e.links),T.dataVersion=e.version}function x(e){return x.didShowError||(x.didShowError=!0,k("moment.tz.zoneExists('"+e+"') has been deprecated in favor of !moment.tz.zone('"+e+"')")),!!b(e)}function M(e){return!(!e._a||void 0!==e._tzm)}function k(e){"undefined"!=typeof console&&"function"==typeof console.error&&console.error(e)}function T(t){var n=Array.prototype.slice.call(arguments,0,-1),r=arguments[arguments.length-1],a=b(r),i=e.utc.apply(null,n);return a&&!e.isMoment(t)&&M(i)&&i.add(a.parse(i),"minutes"),i.tz(r),i}function S(e){return function(){return this._z?this._z.abbr(this):e.call(this)}}function E(e){return function(){return this._z=null,e.apply(this,arguments)}}if(void 0!==e.tz)return k("Moment Timezone "+e.tz.version+" was already loaded "+(e.tz.dataVersion?"with data from ":"without any data")+e.tz.dataVersion),e;var C,O="0.5.10",D={},j={},P={},z={},N=e.version.split("."),W=+N[0],L=+N[1];(W<2||2===W&&L<6)&&k("Moment Timezone requires Moment.js >= 2.6.0. You are using Moment.js "+e.version+". See momentjs.com"),s.prototype={_set:function(e){this.name=e.name,this.abbrs=e.abbrs,this.untils=e.untils,this.offsets=e.offsets,this.population=e.population},_index:function(e){var t,n=+e,r=this.untils;for(t=0;t<r.length;t++)if(n<r[t])return t},parse:function(e){var t,n,r,a,i=+e,o=this.offsets,s=this.untils,u=s.length-1;for(a=0;a<u;a++)if(t=o[a],n=o[a+1],r=o[a?a-1:a],t<n&&T.moveAmbiguousForward?t=n:t>r&&T.moveInvalidForward&&(t=r),i<s[a]-6e4*t)return o[a];return o[u]},abbr:function(e){return this.abbrs[this._index(e)]},offset:function(e){return this.offsets[this._index(e)]}},c.prototype.scoreOffsetAt=function(e){this.offsetScore+=Math.abs(this.zone.offset(e.at)-e.offset),this.zone.abbr(e.at).replace(/[^A-Z]/g,"")!==e.abbr&&this.abbrScore++},T.version=O,T.dataVersion="",T._zones=D,T._links=j,T._names=P,T.add=y,T.link=w,T.load=A,T.zone=b,T.zoneExists=x,T.guess=g,T.names=_,T.Zone=s,T.unpack=o,T.unpackBase60=n,T.needsOffset=M,T.moveInvalidForward=!0,T.moveAmbiguousForward=!1;var R=e.fn;e.tz=T,e.defaultZone=null,e.updateOffset=function(t,n){var r,a=e.defaultZone;void 0===t._z&&(a&&M(t)&&!t._isUTC&&(t._d=e.utc(t._a)._d,t.utc().add(a.parse(t),"minutes")),t._z=a),t._z&&(r=t._z.offset(t),Math.abs(r)<16&&(r/=60),void 0!==t.utcOffset?t.utcOffset(-r,n):t.zone(r,n))},R.tz=function(t){return t?(this._z=b(t),this._z?e.updateOffset(this):k("Moment Timezone has no data for "+t+". See http://momentjs.com/timezone/docs/#/data-loading/."),this):this._z?this._z.name:void 0},R.zoneName=S(R.zoneName),R.zoneAbbr=S(R.zoneAbbr),R.utc=E(R.utc),e.tz.setDefault=function(t){return(W<2||2===W&&L<9)&&k("Moment Timezone setDefault() requires Moment.js >= 2.9.0. You are using Moment.js "+e.version+"."),e.defaultZone=t?b(t):null,e};var q=e.momentProperties;return"[object Array]"===Object.prototype.toString.call(q)?(q.push("_z"),q.push("_a")):q&&(q._z=null),A({version:"2016j",zones:["Africa/Abidjan|GMT|0|0||48e5","Africa/Khartoum|EAT|-30|0||51e5","Africa/Algiers|CET|-10|0||26e5","Africa/Lagos|WAT|-10|0||17e6","Africa/Maputo|CAT|-20|0||26e5","Africa/Cairo|EET EEST|-20 -30|010101010|1Cby0 Fb0 c10 8n0 8Nd0 gL0 e10 mn0|15e6","Africa/Casablanca|WET WEST|0 -10|01010101010101010101010101010101010101010|1Cco0 Db0 1zd0 Lz0 1Nf0 wM0 co0 go0 1o00 s00 dA0 vc0 11A0 A00 e00 y00 11A0 uM0 e00 Dc0 11A0 s00 e00 IM0 WM0 mo0 gM0 LA0 WM0 jA0 e00 Rc0 11A0 e00 e00 U00 11A0 8o0 e00 11A0|32e5","Europe/Paris|CET CEST|-10 -20|01010101010101010101010|1BWp0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|11e6","Africa/Johannesburg|SAST|-20|0||84e5","Africa/Tripoli|EET CET CEST|-20 -10 -20|0120|1IlA0 TA0 1o00|11e5","Africa/Windhoek|WAST WAT|-20 -10|01010101010101010101010|1C1c0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0|32e4","America/Adak|HST HDT|a0 90|01010101010101010101010|1BR00 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|326","America/Anchorage|AKST AKDT|90 80|01010101010101010101010|1BQX0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|30e4","America/Santo_Domingo|AST|40|0||29e5","America/Araguaina|BRT BRST|30 20|010|1IdD0 Lz0|14e4","America/Argentina/Buenos_Aires|ART|30|0|","America/Asuncion|PYST PYT|30 40|01010101010101010101010|1C430 1a10 1fz0 1a10 1fz0 1cN0 17b0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0|28e5","America/Panama|EST|50|0||15e5","America/Bahia|BRT BRST|30 20|010|1FJf0 Rb0|27e5","America/Bahia_Banderas|MST CDT CST|70 50 60|01212121212121212121212|1C1l0 1nW0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0|84e3","America/Fortaleza|BRT|30|0||34e5","America/Managua|CST|60|0||22e5","America/Manaus|AMT|40|0||19e5","America/Bogota|COT|50|0||90e5","America/Denver|MST MDT|70 60|01010101010101010101010|1BQV0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|26e5","America/Campo_Grande|AMST AMT|30 40|01010101010101010101010|1BIr0 1zd0 On0 1zd0 Rb0 1zd0 Lz0 1C10 Lz0 1C10 On0 1zd0 On0 1zd0 On0 1zd0 On0 1C10 Lz0 1C10 Lz0 1C10|77e4","America/Cancun|CST CDT EST|60 50 50|010101010102|1C1k0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 Dd0|63e4","America/Caracas|VET VET|4u 40|01|1QMT0|29e5","America/Cayenne|GFT|30|0||58e3","America/Chicago|CST CDT|60 50|01010101010101010101010|1BQU0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|92e5","America/Chihuahua|MST MDT|70 60|01010101010101010101010|1C1l0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0|81e4","America/Phoenix|MST|70|0||42e5","America/Los_Angeles|PST PDT|80 70|01010101010101010101010|1BQW0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|15e6","America/New_York|EST EDT|50 40|01010101010101010101010|1BQT0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|21e6","America/Rio_Branco|AMT ACT|40 50|01|1KLE0|31e4","America/Fort_Nelson|PST PDT MST|80 70 70|010101010102|1BQW0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0|39e2","America/Halifax|AST ADT|40 30|01010101010101010101010|1BQS0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|39e4","America/Godthab|WGT WGST|30 20|01010101010101010101010|1BWp0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|17e3","America/Goose_Bay|AST ADT|40 30|01010101010101010101010|1BQQ1 1zb0 Op0 1zcX Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|76e2","America/Grand_Turk|EST EDT AST|50 40 40|0101010101012|1BQT0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|37e2","America/Guayaquil|ECT|50|0||27e5","America/Guyana|GYT|40|0||80e4","America/Havana|CST CDT|50 40|01010101010101010101010|1BQR0 1wo0 U00 1zc0 U00 1qM0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0|21e5","America/La_Paz|BOT|40|0||19e5","America/Lima|PET|50|0||11e6","America/Mexico_City|CST CDT|60 50|01010101010101010101010|1C1k0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0|20e6","America/Metlakatla|PST AKST AKDT|80 90 80|012121212121|1PAa0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|14e2","America/Miquelon|PMST PMDT|30 20|01010101010101010101010|1BQR0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|61e2","America/Montevideo|UYST UYT|20 30|010101010101|1BQQ0 1ld0 14n0 1ld0 14n0 1o10 11z0 1o10 11z0 1o10 11z0|17e5","America/Noronha|FNT|20|0||30e2","America/North_Dakota/Beulah|MST MDT CST CDT|70 60 60 50|01232323232323232323232|1BQV0 1zb0 Oo0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0","America/Paramaribo|SRT|30|0||24e4","America/Port-au-Prince|EST EDT|50 40|010101010|1GI70 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|23e5","America/Santiago|CLST CLT|30 40|010101010101010101010|1C1f0 1fB0 1nX0 G10 1EL0 Op0 1zb0 Rd0 1wn0 Rd0 46n0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Ap0|62e5","America/Sao_Paulo|BRST BRT|20 30|01010101010101010101010|1BIq0 1zd0 On0 1zd0 Rb0 1zd0 Lz0 1C10 Lz0 1C10 On0 1zd0 On0 1zd0 On0 1zd0 On0 1C10 Lz0 1C10 Lz0 1C10|20e6","America/Scoresbysund|EGT EGST|10 0|01010101010101010101010|1BWp0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|452","America/St_Johns|NST NDT|3u 2u|01010101010101010101010|1BQPv 1zb0 Op0 1zcX Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|11e4","Antarctica/Casey|+11 +08|-b0 -80|01010|1BN30 40P0 KL0 blz0|10","Antarctica/Davis|+05 +07|-50 -70|0101|1BPw0 3Wn0 KN0|70","Antarctica/DumontDUrville|+10|-a0|0||80","Antarctica/Macquarie|AEDT MIST|-b0 -b0|01|1C140|1","Asia/Tashkent|+05|-50|0||23e5","Pacific/Auckland|NZDT NZST|-d0 -c0|01010101010101010101010|1C120 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00|14e5","Antarctica/Rothera|-03|30|0||130","Antarctica/Syowa|+03|-30|0||20","Antarctica/Troll|+00 +02|0 -20|01010101010101010101010|1BWp0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|40","Asia/Almaty|+06|-60|0||15e5","Asia/Baghdad|AST|-30|0||66e5","Asia/Amman|EET EEST|-20 -30|010101010101010101010|1BVy0 1qM0 11A0 1o00 11A0 4bX0 Dd0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0|25e5","Asia/Kamchatka|+12 +11|-c0 -b0|010|1Dp30 WM0|18e4","Asia/Baku|+04 +05|-40 -50|0101010101010|1BWo0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|27e5","Asia/Bangkok|ICT|-70|0||15e6","Asia/Barnaul|+06 +07|-60 -70|010101|1BWk0 1qM0 WM0 8Hz0 3rd0","Asia/Beirut|EET EEST|-20 -30|01010101010101010101010|1BWm0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0|22e5","Asia/Brunei|BNT|-80|0||42e4","Asia/Kolkata|IST|-5u|0||15e6","Asia/Chita|+09 +10 +08|-90 -a0 -80|010120|1BWh0 1qM0 WM0 8Hz0 3re0|33e4","Asia/Choibalsan|CHOT CHOST|-80 -90|0101010101010|1O8G0 1cJ0 1cP0 1cJ0 1cP0 1fx0 1cP0 1cJ0 1cP0 1cJ0 1cP0 1cJ0|38e3","Asia/Shanghai|CST|-80|0||23e6","Asia/Colombo|+0530|-5u|0||22e5","Asia/Dhaka|BDT|-60|0||16e6","Asia/Damascus|EET EEST|-20 -30|01010101010101010101010|1C0m0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0|26e5","Asia/Dili|TLT|-90|0||19e4","Asia/Dubai|GST|-40|0||39e5","Asia/Famagusta|EET EEST +03|-20 -30 -30|010101010101012|1BWp0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 15U0","Asia/Gaza|EET EEST|-20 -30|01010101010101010101010|1BVW1 SKX 1xd1 MKX 1AN0 1a00 1fA0 1cL0 1cN0 1nX0 1210 1nz0 1220 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0|18e5","Asia/Hebron|EET EEST|-20 -30|0101010101010101010101010|1BVy0 Tb0 1xd1 MKX bB0 cn0 1cN0 1a00 1fA0 1cL0 1cN0 1nX0 1210 1nz0 1220 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0|25e4","Asia/Hong_Kong|HKT|-80|0||73e5","Asia/Hovd|HOVT HOVST|-70 -80|0101010101010|1O8H0 1cJ0 1cP0 1cJ0 1cP0 1fx0 1cP0 1cJ0 1cP0 1cJ0 1cP0 1cJ0|81e3","Asia/Irkutsk|+08 +09|-80 -90|01010|1BWi0 1qM0 WM0 8Hz0|60e4","Europe/Istanbul|EET EEST +03|-20 -30 -30|010101010101012|1BWp0 1qM0 Xc0 1qo0 WM0 1qM0 11A0 1o00 1200 1nA0 11A0 1tA0 U00 15w0|13e6","Asia/Jakarta|WIB|-70|0||31e6","Asia/Jayapura|WIT|-90|0||26e4","Asia/Jerusalem|IST IDT|-20 -30|01010101010101010101010|1BVA0 17X0 1kp0 1dz0 1c10 1aL0 1eN0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0|81e4","Asia/Kabul|AFT|-4u|0||46e5","Asia/Karachi|PKT|-50|0||24e6","Asia/Urumqi|XJT|-60|0||32e5","Asia/Kathmandu|NPT|-5J|0||12e5","Asia/Khandyga|+10 +11 +09|-a0 -b0 -90|010102|1BWg0 1qM0 WM0 17V0 7zD0|66e2","Asia/Krasnoyarsk|+07 +08|-70 -80|01010|1BWj0 1qM0 WM0 8Hz0|10e5","Asia/Kuala_Lumpur|MYT|-80|0||71e5","Asia/Magadan|+11 +12 +10|-b0 -c0 -a0|010120|1BWf0 1qM0 WM0 8Hz0 3Cq0|95e3","Asia/Makassar|WITA|-80|0||15e5","Asia/Manila|PHT|-80|0||24e6","Europe/Athens|EET EEST|-20 -30|01010101010101010101010|1BWp0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|35e5","Asia/Novokuznetsk|+07 +06|-70 -60|010|1Dp80 WM0|55e4","Asia/Novosibirsk|+06 +07|-60 -70|010101|1BWk0 1qM0 WM0 8Hz0 4eN0|15e5","Asia/Omsk|+06 +07|-60 -70|01010|1BWk0 1qM0 WM0 8Hz0|12e5","Asia/Pyongyang|KST KST|-90 -8u|01|1P4D0|29e5","Asia/Rangoon|MMT|-6u|0||48e5","Asia/Sakhalin|+10 +11|-a0 -b0|010101|1BWg0 1qM0 WM0 8Hz0 3rd0|58e4","Asia/Seoul|KST|-90|0||23e6","Asia/Singapore|SGT|-80|0||56e5","Asia/Srednekolymsk|+11 +12|-b0 -c0|01010|1BWf0 1qM0 WM0 8Hz0|35e2","Asia/Tbilisi|+04|-40|0||11e5","Asia/Tehran|IRST IRDT|-3u -4u|01010101010101010101010|1BTUu 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0|14e6","Asia/Thimphu|BTT|-60|0||79e3","Asia/Tokyo|JST|-90|0||38e6","Asia/Tomsk|+06 +07|-60 -70|010101|1BWk0 1qM0 WM0 8Hz0 3Qp0|10e5","Asia/Ulaanbaatar|ULAT ULAST|-80 -90|0101010101010|1O8G0 1cJ0 1cP0 1cJ0 1cP0 1fx0 1cP0 1cJ0 1cP0 1cJ0 1cP0 1cJ0|12e5","Asia/Ust-Nera|+11 +12 +10|-b0 -c0 -a0|010102|1BWf0 1qM0 WM0 17V0 7zD0|65e2","Asia/Vladivostok|+10 +11|-a0 -b0|01010|1BWg0 1qM0 WM0 8Hz0|60e4","Asia/Yakutsk|+09 +10|-90 -a0|01010|1BWh0 1qM0 WM0 8Hz0|28e4","Asia/Yekaterinburg|+05 +06|-50 -60|01010|1BWl0 1qM0 WM0 8Hz0|14e5","Asia/Yerevan|+04 +05|-40 -50|01010|1BWm0 1qM0 WM0 1qM0|13e5","Atlantic/Azores|AZOT AZOST|10 0|01010101010101010101010|1BWp0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|25e4","Europe/Lisbon|WET WEST|0 -10|01010101010101010101010|1BWp0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|27e5","Atlantic/Cape_Verde|CVT|10|0||50e4","Atlantic/South_Georgia|GST|20|0||30","Atlantic/Stanley|FKST FKT|30 40|010|1C6R0 U10|21e2","Australia/Sydney|AEDT AEST|-b0 -a0|01010101010101010101010|1C140 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0|40e5","Australia/Adelaide|ACDT ACST|-au -9u|01010101010101010101010|1C14u 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0|11e5","Australia/Brisbane|AEST|-a0|0||20e5","Australia/Darwin|ACST|-9u|0||12e4","Australia/Eucla|ACWST|-8J|0||368","Australia/Lord_Howe|LHDT LHST|-b0 -au|01010101010101010101010|1C130 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu|347","Australia/Perth|AWST|-80|0||18e5","Pacific/Easter|EASST EAST|50 60|010101010101010101010|1C1f0 1fB0 1nX0 G10 1EL0 Op0 1zb0 Rd0 1wn0 Rd0 46n0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Ap0|30e2","Europe/Dublin|GMT IST|0 -10|01010101010101010101010|1BWp0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|12e5","Etc/GMT+1|-01|10|0|","Etc/GMT+10|-10|a0|0|","Etc/GMT+11|-11|b0|0|","Etc/GMT+12|-12|c0|0|","Etc/GMT+2|-02|20|0|","Etc/GMT+4|-04|40|0|","Etc/GMT+5|-05|50|0|","Etc/GMT+6|-06|60|0|","Etc/GMT+7|-07|70|0|","Etc/GMT+8|-08|80|0|","Etc/GMT+9|-09|90|0|","Etc/GMT-1|+01|-10|0|","Etc/GMT-11|+11|-b0|0|","Etc/GMT-12|+12|-c0|0|","Etc/GMT-13|+13|-d0|0|","Etc/GMT-14|+14|-e0|0|","Etc/GMT-2|+02|-20|0|","Etc/GMT-7|+07|-70|0|","Etc/GMT-8|+08|-80|0|","Etc/GMT-9|+09|-90|0|","Etc/UCT|UCT|0|0|","Etc/UTC|UTC|0|0|","Europe/Astrakhan|+03 +04|-30 -40|010101|1BWn0 1qM0 WM0 8Hz0 3rd0","Europe/London|GMT BST|0 -10|01010101010101010101010|1BWp0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|10e6","Europe/Chisinau|EET EEST|-20 -30|01010101010101010101010|1BWo0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|67e4","Europe/Kaliningrad|EET EEST +03|-20 -30 -30|01020|1BWo0 1qM0 WM0 8Hz0|44e4","Europe/Volgograd|+03 +04|-30 -40|01010|1BWn0 1qM0 WM0 8Hz0|10e5","Europe/Minsk|EET EEST +03|-20 -30 -30|0102|1BWo0 1qM0 WM0|19e5","Europe/Moscow|MSK MSD MSK|-30 -40 -40|01020|1BWn0 1qM0 WM0 8Hz0|16e6","Europe/Samara|+04 +03|-40 -30|010|1Dpb0 WM0|12e5","Europe/Saratov|+03 +04|-30 -40|010101|1BWn0 1qM0 WM0 8Hz0 5810","Europe/Simferopol|EET EEST MSK MSK|-20 -30 -40 -30|01010101023|1BWp0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11z0 1nW0|33e4","Pacific/Honolulu|HST|a0|0||37e4","Indian/Chagos|IOT|-60|0||30e2","Indian/Christmas|CXT|-70|0||21e2","Indian/Cocos|CCT|-6u|0||596","Indian/Mahe|SCT|-40|0||79e3","Indian/Maldives|MVT|-50|0||35e4","Indian/Mauritius|MUT|-40|0||15e4","Indian/Reunion|RET|-40|0||84e4","Pacific/Majuro|MHT|-c0|0||28e3","MET|MET MEST|-10 -20|01010101010101010101010|1BWp0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00","Pacific/Chatham|CHADT CHAST|-dJ -cJ|01010101010101010101010|1C120 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00|600","Pacific/Apia|SST SDT WSDT WSST|b0 a0 -e0 -d0|01012323232323232323232|1Dbn0 1ff0 1a00 CI0 AQ0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00|37e3","Pacific/Bougainville|PGT BST|-a0 -b0|01|1NwE0|18e4","Pacific/Chuuk|CHUT|-a0|0||49e3","Pacific/Efate|VUT|-b0|0||66e3","Pacific/Enderbury|PHOT|-d0|0||1","Pacific/Fakaofo|TKT TKT|b0 -d0|01|1Gfn0|483","Pacific/Fiji|FJST FJT|-d0 -c0|01010101010101010101010|1BWe0 1o00 Rc0 1wo0 Ao0 1Nc0 Ao0 1Q00 xz0 1SN0 uM0 1SM0 uM0 1VA0 s00 1VA0 uM0 1SM0 uM0 1SM0 uM0 1SM0|88e4","Pacific/Funafuti|TVT|-c0|0||45e2","Pacific/Galapagos|GALT|60|0||25e3","Pacific/Gambier|GAMT|90|0||125","Pacific/Guadalcanal|SBT|-b0|0||11e4","Pacific/Guam|ChST|-a0|0||17e4","Pacific/Kiritimati|LINT|-e0|0||51e2","Pacific/Kosrae|KOST|-b0|0||66e2","Pacific/Marquesas|MART|9u|0||86e2","Pacific/Pago_Pago|SST|b0|0||37e2","Pacific/Nauru|NRT|-c0|0||10e3","Pacific/Niue|NUT|b0|0||12e2","Pacific/Norfolk|NFT NFT|-bu -b0|01|1PoCu|25e4","Pacific/Noumea|NCT|-b0|0||98e3","Pacific/Palau|PWT|-90|0||21e3","Pacific/Pitcairn|PST|80|0||56","Pacific/Pohnpei|PONT|-b0|0||34e3","Pacific/Port_Moresby|PGT|-a0|0||25e4","Pacific/Rarotonga|CKT|a0|0||13e3","Pacific/Tahiti|TAHT|a0|0||18e4","Pacific/Tarawa|GILT|-c0|0||29e3","Pacific/Tongatapu|+13 +14|-d0 -e0|0101010101|1S4d0 s00 1VA0 uM0 1SM0 uM0 1SM0 uM0 1SM0|75e3","Pacific/Wake|WAKT|-c0|0||16e3","Pacific/Wallis|WFT|-c0|0||94"],links:["Africa/Abidjan|Africa/Accra","Africa/Abidjan|Africa/Bamako","Africa/Abidjan|Africa/Banjul","Africa/Abidjan|Africa/Bissau","Africa/Abidjan|Africa/Conakry","Africa/Abidjan|Africa/Dakar","Africa/Abidjan|Africa/Freetown","Africa/Abidjan|Africa/Lome","Africa/Abidjan|Africa/Monrovia","Africa/Abidjan|Africa/Nouakchott","Africa/Abidjan|Africa/Ouagadougou","Africa/Abidjan|Africa/Sao_Tome","Africa/Abidjan|Africa/Timbuktu","Africa/Abidjan|America/Danmarkshavn","Africa/Abidjan|Atlantic/Reykjavik","Africa/Abidjan|Atlantic/St_Helena","Africa/Abidjan|Etc/GMT","Africa/Abidjan|Etc/GMT+0","Africa/Abidjan|Etc/GMT-0","Africa/Abidjan|Etc/GMT0","Africa/Abidjan|Etc/Greenwich","Africa/Abidjan|GMT","Africa/Abidjan|GMT+0","Africa/Abidjan|GMT-0","Africa/Abidjan|GMT0","Africa/Abidjan|Greenwich","Africa/Abidjan|Iceland","Africa/Algiers|Africa/Tunis","Africa/Cairo|Egypt","Africa/Casablanca|Africa/El_Aaiun","Africa/Johannesburg|Africa/Maseru","Africa/Johannesburg|Africa/Mbabane","Africa/Khartoum|Africa/Addis_Ababa","Africa/Khartoum|Africa/Asmara","Africa/Khartoum|Africa/Asmera","Africa/Khartoum|Africa/Dar_es_Salaam","Africa/Khartoum|Africa/Djibouti","Africa/Khartoum|Africa/Juba","Africa/Khartoum|Africa/Kampala","Africa/Khartoum|Africa/Mogadishu","Africa/Khartoum|Africa/Nairobi","Africa/Khartoum|Indian/Antananarivo","Africa/Khartoum|Indian/Comoro","Africa/Khartoum|Indian/Mayotte","Africa/Lagos|Africa/Bangui","Africa/Lagos|Africa/Brazzaville","Africa/Lagos|Africa/Douala","Africa/Lagos|Africa/Kinshasa","Africa/Lagos|Africa/Libreville","Africa/Lagos|Africa/Luanda","Africa/Lagos|Africa/Malabo","Africa/Lagos|Africa/Ndjamena","Africa/Lagos|Africa/Niamey","Africa/Lagos|Africa/Porto-Novo","Africa/Maputo|Africa/Blantyre","Africa/Maputo|Africa/Bujumbura","Africa/Maputo|Africa/Gaborone","Africa/Maputo|Africa/Harare","Africa/Maputo|Africa/Kigali","Africa/Maputo|Africa/Lubumbashi","Africa/Maputo|Africa/Lusaka","Africa/Tripoli|Libya","America/Adak|America/Atka","America/Adak|US/Aleutian","America/Anchorage|America/Juneau","America/Anchorage|America/Nome","America/Anchorage|America/Sitka","America/Anchorage|America/Yakutat","America/Anchorage|US/Alaska","America/Argentina/Buenos_Aires|America/Argentina/Catamarca","America/Argentina/Buenos_Aires|America/Argentina/ComodRivadavia","America/Argentina/Buenos_Aires|America/Argentina/Cordoba","America/Argentina/Buenos_Aires|America/Argentina/Jujuy","America/Argentina/Buenos_Aires|America/Argentina/La_Rioja","America/Argentina/Buenos_Aires|America/Argentina/Mendoza","America/Argentina/Buenos_Aires|America/Argentina/Rio_Gallegos","America/Argentina/Buenos_Aires|America/Argentina/Salta","America/Argentina/Buenos_Aires|America/Argentina/San_Juan","America/Argentina/Buenos_Aires|America/Argentina/San_Luis","America/Argentina/Buenos_Aires|America/Argentina/Tucuman","America/Argentina/Buenos_Aires|America/Argentina/Ushuaia","America/Argentina/Buenos_Aires|America/Buenos_Aires","America/Argentina/Buenos_Aires|America/Catamarca","America/Argentina/Buenos_Aires|America/Cordoba","America/Argentina/Buenos_Aires|America/Jujuy","America/Argentina/Buenos_Aires|America/Mendoza","America/Argentina/Buenos_Aires|America/Rosario","America/Campo_Grande|America/Cuiaba","America/Chicago|America/Indiana/Knox","America/Chicago|America/Indiana/Tell_City","America/Chicago|America/Knox_IN","America/Chicago|America/Matamoros","America/Chicago|America/Menominee","America/Chicago|America/North_Dakota/Center","America/Chicago|America/North_Dakota/New_Salem","America/Chicago|America/Rainy_River","America/Chicago|America/Rankin_Inlet","America/Chicago|America/Resolute","America/Chicago|America/Winnipeg","America/Chicago|CST6CDT","America/Chicago|Canada/Central","America/Chicago|US/Central","America/Chicago|US/Indiana-Starke","America/Chihuahua|America/Mazatlan","America/Chihuahua|Mexico/BajaSur","America/Denver|America/Boise","America/Denver|America/Cambridge_Bay","America/Denver|America/Edmonton","America/Denver|America/Inuvik","America/Denver|America/Ojinaga","America/Denver|America/Shiprock","America/Denver|America/Yellowknife","America/Denver|Canada/Mountain","America/Denver|MST7MDT","America/Denver|Navajo","America/Denver|US/Mountain","America/Fortaleza|America/Belem","America/Fortaleza|America/Maceio","America/Fortaleza|America/Recife","America/Fortaleza|America/Santarem","America/Halifax|America/Glace_Bay","America/Halifax|America/Moncton","America/Halifax|America/Thule","America/Halifax|Atlantic/Bermuda","America/Halifax|Canada/Atlantic","America/Havana|Cuba","America/Los_Angeles|America/Dawson","America/Los_Angeles|America/Ensenada","America/Los_Angeles|America/Santa_Isabel","America/Los_Angeles|America/Tijuana","America/Los_Angeles|America/Vancouver","America/Los_Angeles|America/Whitehorse","America/Los_Angeles|Canada/Pacific","America/Los_Angeles|Canada/Yukon","America/Los_Angeles|Mexico/BajaNorte","America/Los_Angeles|PST8PDT","America/Los_Angeles|US/Pacific","America/Los_Angeles|US/Pacific-New","America/Managua|America/Belize","America/Managua|America/Costa_Rica","America/Managua|America/El_Salvador","America/Managua|America/Guatemala","America/Managua|America/Regina","America/Managua|America/Swift_Current","America/Managua|America/Tegucigalpa","America/Managua|Canada/East-Saskatchewan","America/Managua|Canada/Saskatchewan","America/Manaus|America/Boa_Vista","America/Manaus|America/Porto_Velho","America/Manaus|Brazil/West","America/Mexico_City|America/Merida","America/Mexico_City|America/Monterrey","America/Mexico_City|Mexico/General","America/New_York|America/Detroit","America/New_York|America/Fort_Wayne","America/New_York|America/Indiana/Indianapolis","America/New_York|America/Indiana/Marengo","America/New_York|America/Indiana/Petersburg","America/New_York|America/Indiana/Vevay","America/New_York|America/Indiana/Vincennes","America/New_York|America/Indiana/Winamac","America/New_York|America/Indianapolis","America/New_York|America/Iqaluit","America/New_York|America/Kentucky/Louisville","America/New_York|America/Kentucky/Monticello","America/New_York|America/Louisville","America/New_York|America/Montreal","America/New_York|America/Nassau","America/New_York|America/Nipigon","America/New_York|America/Pangnirtung","America/New_York|America/Thunder_Bay","America/New_York|America/Toronto","America/New_York|Canada/Eastern","America/New_York|EST5EDT","America/New_York|US/East-Indiana","America/New_York|US/Eastern","America/New_York|US/Michigan","America/Noronha|Brazil/DeNoronha","America/Panama|America/Atikokan","America/Panama|America/Cayman","America/Panama|America/Coral_Harbour","America/Panama|America/Jamaica","America/Panama|EST","America/Panama|Jamaica","America/Phoenix|America/Creston","America/Phoenix|America/Dawson_Creek","America/Phoenix|America/Hermosillo","America/Phoenix|MST","America/Phoenix|US/Arizona","America/Rio_Branco|America/Eirunepe","America/Rio_Branco|America/Porto_Acre","America/Rio_Branco|Brazil/Acre","America/Santiago|Antarctica/Palmer","America/Santiago|Chile/Continental","America/Santo_Domingo|America/Anguilla","America/Santo_Domingo|America/Antigua","America/Santo_Domingo|America/Aruba","America/Santo_Domingo|America/Barbados","America/Santo_Domingo|America/Blanc-Sablon","America/Santo_Domingo|America/Curacao","America/Santo_Domingo|America/Dominica","America/Santo_Domingo|America/Grenada","America/Santo_Domingo|America/Guadeloupe","America/Santo_Domingo|America/Kralendijk","America/Santo_Domingo|America/Lower_Princes","America/Santo_Domingo|America/Marigot","America/Santo_Domingo|America/Martinique","America/Santo_Domingo|America/Montserrat","America/Santo_Domingo|America/Port_of_Spain","America/Santo_Domingo|America/Puerto_Rico","America/Santo_Domingo|America/St_Barthelemy","America/Santo_Domingo|America/St_Kitts","America/Santo_Domingo|America/St_Lucia","America/Santo_Domingo|America/St_Thomas","America/Santo_Domingo|America/St_Vincent","America/Santo_Domingo|America/Tortola","America/Santo_Domingo|America/Virgin","America/Sao_Paulo|Brazil/East","America/St_Johns|Canada/Newfoundland","Antarctica/DumontDUrville|Etc/GMT-10","Antarctica/Rothera|Etc/GMT+3","Antarctica/Syowa|Etc/GMT-3","Asia/Almaty|Antarctica/Vostok","Asia/Almaty|Asia/Bishkek","Asia/Almaty|Asia/Qyzylorda","Asia/Almaty|Etc/GMT-6","Asia/Baghdad|Asia/Aden","Asia/Baghdad|Asia/Bahrain","Asia/Baghdad|Asia/Kuwait","Asia/Baghdad|Asia/Qatar","Asia/Baghdad|Asia/Riyadh","Asia/Bangkok|Asia/Ho_Chi_Minh","Asia/Bangkok|Asia/Phnom_Penh","Asia/Bangkok|Asia/Saigon","Asia/Bangkok|Asia/Vientiane","Asia/Dhaka|Asia/Dacca","Asia/Dubai|Asia/Muscat","Asia/Hong_Kong|Hongkong","Asia/Jakarta|Asia/Pontianak","Asia/Jerusalem|Asia/Tel_Aviv","Asia/Jerusalem|Israel","Asia/Kamchatka|Asia/Anadyr","Asia/Kathmandu|Asia/Katmandu","Asia/Kolkata|Asia/Calcutta","Asia/Kuala_Lumpur|Asia/Kuching","Asia/Makassar|Asia/Ujung_Pandang","Asia/Rangoon|Asia/Yangon","Asia/Seoul|ROK","Asia/Shanghai|Asia/Chongqing","Asia/Shanghai|Asia/Chungking","Asia/Shanghai|Asia/Harbin","Asia/Shanghai|Asia/Macao","Asia/Shanghai|Asia/Macau","Asia/Shanghai|Asia/Taipei","Asia/Shanghai|PRC","Asia/Shanghai|ROC","Asia/Singapore|Singapore","Asia/Tashkent|Antarctica/Mawson","Asia/Tashkent|Asia/Aqtau","Asia/Tashkent|Asia/Aqtobe","Asia/Tashkent|Asia/Ashgabat","Asia/Tashkent|Asia/Ashkhabad","Asia/Tashkent|Asia/Atyrau","Asia/Tashkent|Asia/Dushanbe","Asia/Tashkent|Asia/Oral","Asia/Tashkent|Asia/Samarkand","Asia/Tashkent|Etc/GMT-5","Asia/Tashkent|Indian/Kerguelen","Asia/Tbilisi|Etc/GMT-4","Asia/Tehran|Iran","Asia/Thimphu|Asia/Thimbu","Asia/Tokyo|Japan","Asia/Ulaanbaatar|Asia/Ulan_Bator","Asia/Urumqi|Asia/Kashgar","Australia/Adelaide|Australia/Broken_Hill","Australia/Adelaide|Australia/South","Australia/Adelaide|Australia/Yancowinna","Australia/Brisbane|Australia/Lindeman","Australia/Brisbane|Australia/Queensland","Australia/Darwin|Australia/North","Australia/Lord_Howe|Australia/LHI","Australia/Perth|Australia/West","Australia/Sydney|Australia/ACT","Australia/Sydney|Australia/Canberra","Australia/Sydney|Australia/Currie","Australia/Sydney|Australia/Hobart","Australia/Sydney|Australia/Melbourne","Australia/Sydney|Australia/NSW","Australia/Sydney|Australia/Tasmania","Australia/Sydney|Australia/Victoria","Etc/UCT|UCT","Etc/UTC|Etc/Universal","Etc/UTC|Etc/Zulu","Etc/UTC|UTC","Etc/UTC|Universal","Etc/UTC|Zulu","Europe/Astrakhan|Europe/Ulyanovsk","Europe/Athens|Asia/Nicosia","Europe/Athens|EET","Europe/Athens|Europe/Bucharest","Europe/Athens|Europe/Helsinki","Europe/Athens|Europe/Kiev","Europe/Athens|Europe/Mariehamn","Europe/Athens|Europe/Nicosia","Europe/Athens|Europe/Riga","Europe/Athens|Europe/Sofia","Europe/Athens|Europe/Tallinn","Europe/Athens|Europe/Uzhgorod","Europe/Athens|Europe/Vilnius","Europe/Athens|Europe/Zaporozhye","Europe/Chisinau|Europe/Tiraspol","Europe/Dublin|Eire","Europe/Istanbul|Asia/Istanbul","Europe/Istanbul|Turkey","Europe/Lisbon|Atlantic/Canary","Europe/Lisbon|Atlantic/Faeroe","Europe/Lisbon|Atlantic/Faroe","Europe/Lisbon|Atlantic/Madeira","Europe/Lisbon|Portugal","Europe/Lisbon|WET","Europe/London|Europe/Belfast","Europe/London|Europe/Guernsey","Europe/London|Europe/Isle_of_Man","Europe/London|Europe/Jersey","Europe/London|GB","Europe/London|GB-Eire","Europe/Moscow|W-SU","Europe/Paris|Africa/Ceuta","Europe/Paris|Arctic/Longyearbyen","Europe/Paris|Atlantic/Jan_Mayen","Europe/Paris|CET","Europe/Paris|Europe/Amsterdam","Europe/Paris|Europe/Andorra","Europe/Paris|Europe/Belgrade","Europe/Paris|Europe/Berlin","Europe/Paris|Europe/Bratislava","Europe/Paris|Europe/Brussels","Europe/Paris|Europe/Budapest","Europe/Paris|Europe/Busingen","Europe/Paris|Europe/Copenhagen","Europe/Paris|Europe/Gibraltar","Europe/Paris|Europe/Ljubljana","Europe/Paris|Europe/Luxembourg","Europe/Paris|Europe/Madrid","Europe/Paris|Europe/Malta","Europe/Paris|Europe/Monaco","Europe/Paris|Europe/Oslo","Europe/Paris|Europe/Podgorica","Europe/Paris|Europe/Prague","Europe/Paris|Europe/Rome","Europe/Paris|Europe/San_Marino","Europe/Paris|Europe/Sarajevo","Europe/Paris|Europe/Skopje","Europe/Paris|Europe/Stockholm","Europe/Paris|Europe/Tirane","Europe/Paris|Europe/Vaduz","Europe/Paris|Europe/Vatican","Europe/Paris|Europe/Vienna","Europe/Paris|Europe/Warsaw","Europe/Paris|Europe/Zagreb","Europe/Paris|Europe/Zurich","Europe/Paris|Poland","Europe/Volgograd|Europe/Kirov","Pacific/Auckland|Antarctica/McMurdo","Pacific/Auckland|Antarctica/South_Pole","Pacific/Auckland|NZ","Pacific/Chatham|NZ-CHAT","Pacific/Chuuk|Pacific/Truk","Pacific/Chuuk|Pacific/Yap","Pacific/Easter|Chile/EasterIsland","Pacific/Guam|Pacific/Saipan","Pacific/Honolulu|HST","Pacific/Honolulu|Pacific/Johnston","Pacific/Honolulu|US/Hawaii","Pacific/Majuro|Kwajalein","Pacific/Majuro|Pacific/Kwajalein","Pacific/Pago_Pago|Pacific/Midway","Pacific/Pago_Pago|Pacific/Samoa","Pacific/Pago_Pago|US/Samoa","Pacific/Pohnpei|Pacific/Ponape"] }),e})}),dp=tt,hp=["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],pp=["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],mp=["Su","Mo","Tu","We","Th","Fr","Sa"],gp=["January","February","March","April","May","June","July","August","September","October","November","December"],vp=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],yp="AM",bp="PM",_p="am",wp="pm",Ap=new RegExp(hp.join("|"),"i"),xp=new RegExp(pp.join("|"),"i"),Mp=new RegExp("\\b("+mp.join("|")+")\\b","i"),kp=new RegExp(gp.join("|"),"i"),Tp=new RegExp(vp.join("|"),"i"),Sp=/(\d+)(st|nd|rd|th)\b/i,Ep=/(\d{1,4})([\/\.\-])(\d{1,2})[\/\.\-](\d{1,4})/,Cp=/((\+|\-)\d\d:?\d\d)$/,Op="("+[yp,bp].join("|")+")",Dp="("+[_p,wp].join("|")+")",jp=new RegExp(Dp),Pp=new RegExp(Op),zp=new RegExp("0\\d\\:\\d{1,2}\\:\\d{1,2}(\\s*)"+Op,"i"),Np=new RegExp("0\\d\\:\\d{1,2}(\\s*)"+Op,"i"),Wp=new RegExp("0\\d(\\s*)"+Op,"i"),Lp=new RegExp("\\d{1,2}\\:\\d{1,2}\\:\\d{1,2}(\\s*)"+Op,"i"),Rp=new RegExp("\\d{1,2}\\:\\d{1,2}(\\s*)"+Op,"i"),qp=new RegExp("\\d{1,2}(\\s*)"+Op,"i"),Yp=/\d{2}:\d{2}:\d{2}\.\d{3}/,Bp=/\d{2}:\d{2}:\d{2}\.\d{2}/,Hp=/\d{2}:\d{2}:\d{2}\.\d{1}/,Fp=/0\d:\d{2}:\d{2}/,Ip=/0\d:\d{2}/,Up=/\d{1,2}:\d{2}:\d{2}/,Gp=/\d{1,2}:\d{2}:\d{2}\.\d{3}/,$p=/\d{1,2}:\d{2}:\d{2}\.\d{2}/,Vp=/\d{1,2}:\d{2}:\d{2}\.\d{1}/,Kp=/\d{1,2}:\d{2}/,Xp=/\d{4}/,Jp=/0\d/,Zp=/\d{1,2}/,Qp=/\d{2}/,em=/^([1-9])\/([1-9]|0[1-9])$/,tm=/^([1-9])\/(1[012])$/,nm=/^(0[1-9]|[12][0-9]|3[01])\/([1-9])$/,rm=/^(0[1-9]|[12][0-9]|3[01])\/(1[012]|0[1-9])$/,am=/^([1-9])\/([1-9][0-9])$/,im=/^(0[1-9]|1[012])\/([1-9][0-9])$/,om=/([\/][M]|[M][\/]|[MM]|[MMMM])/,sm=/\b(at)\b/i,um=/\d{13}/,cm=/\d{10}/,lm={"/":"MDY",".":"DMY","-":"YMD"},fm=dp,dm=fm;"undefined"!=typeof window&&window.moment&&(window.moment.parseFormat=fm);var hm=n(function(e,t){(function(){function n(e,t,n){for(var r=(n||0)-1,a=e?e.length:0;++r<a;)if(e[r]===t)return r;return-1}function r(e,t){var r=typeof t;if(e=e.cache,"boolean"==r||null==t)return e[t]?0:-1;"number"!=r&&"string"!=r&&(r="object");var a="number"==r?t:b+t;return e=(e=e[r])&&e[a],"object"==r?e&&n(e,t)>-1?0:-1:e?0:-1}function a(e){var t=this.cache,n=typeof e;if("boolean"==n||null==e)t[e]=!0;else{"number"!=n&&"string"!=n&&(n="object");var r="number"==n?e:b+e,a=t[n]||(t[n]={});"object"==n?(a[r]||(a[r]=[])).push(e):a[r]=!0}}function i(e){return e.charCodeAt(0)}function o(e,t){for(var n=e.criteria,r=t.criteria,a=-1,i=n.length;++a<i;){var o=n[a],s=r[a];if(o!==s){if(o>s||"undefined"==typeof o)return 1;if(o<s||"undefined"==typeof s)return-1}}return e.index-t.index}function s(e){var t=-1,n=e.length,r=e[0],i=e[n/2|0],o=e[n-1];if(r&&"object"==typeof r&&i&&"object"==typeof i&&o&&"object"==typeof o)return!1;var s=l();s.false=s.null=s.true=s.undefined=!1;var u=l();for(u.array=e,u.cache=s,u.push=a;++t<n;)u.push(e[t]);return u}function u(e){return"\\"+K[e]}function c(){return g.pop()||[]}function l(){return v.pop()||{array:null,cache:null,criteria:null,false:!1,index:0,null:!1,number:null,object:null,push:null,string:null,true:!1,undefined:!1,value:null}}function f(e){e.length=0,g.length<w&&g.push(e)}function d(e){var t=e.cache;t&&d(t),e.array=e.cache=e.criteria=e.object=e.number=e.string=e.value=null,v.length<w&&v.push(e)}function h(e,t,n){t||(t=0),"undefined"==typeof n&&(n=e?e.length:0);for(var r=-1,a=n-t||0,i=Array(a<0?0:a);++r<a;)i[r]=e[t+r];return i}function p(e){function t(e){return e&&"object"==typeof e&&!Zn(e)&&zn.call(e,"__wrapped__")?e:new a(e)}function a(e,t){this.__chain__=!!t,this.__wrapped__=e}function g(e){function t(){if(r){var e=h(r);Nn.apply(e,arguments)}if(this instanceof t){var i=w(n.prototype),o=n.apply(i,e||arguments);return Oe(o)?o:i}return n.apply(a,e||arguments)}var n=e[0],r=e[2],a=e[4];return Jn(t,e),t}function v(e,t,n,r,a){if(n){var i=n(e);if("undefined"!=typeof i)return i}var o=Oe(e);if(!o)return e;var s=Sn.call(e);if(!U[s])return e;var u=Kn[s];switch(s){case R:case q:return new u(+e);case B:case I:return new u(e);case F:return i=u(e.source,S.exec(e)),i.lastIndex=e.lastIndex,i}var l=Zn(e);if(t){var d=!r;r||(r=c()),a||(a=c());for(var p=r.length;p--;)if(r[p]==e)return a[p];i=l?u(e.length):{}}else i=l?h(e):ir({},e);return l&&(zn.call(e,"index")&&(i.index=e.index),zn.call(e,"input")&&(i.input=e.input)),t?(r.push(e),a.push(i),(l?Xe:ur)(e,function(e,o){i[o]=v(e,t,n,r,a)}),d&&(f(r),f(a)),i):i}function w(e,t){return Oe(e)?Yn(e):{}}function K(e,t,n){if("function"!=typeof e)return Jt;if("undefined"==typeof t||!("prototype"in e))return e;var r=e.__bindData__;if("undefined"==typeof r&&(Xn.funcNames&&(r=!e.name),r=r||!Xn.funcDecomp,!r)){var a=jn.call(e);Xn.funcNames||(r=!E.test(a)),r||(r=j.test(a),Jn(e,r))}if(r===!1||r!==!0&&1&r[1])return e;switch(n){case 1:return function(n){return e.call(t,n)};case 2:return function(n,r){return e.call(t,n,r)};case 3:return function(n,r,a){return e.call(t,n,r,a)};case 4:return function(n,r,a,i){return e.call(t,n,r,a,i)}}return zt(e,t)}function J(e){function t(){var e=u?o:this;if(a){var p=h(a);Nn.apply(p,arguments)}if((i||l)&&(p||(p=h(arguments)),i&&Nn.apply(p,i),l&&p.length<s))return r|=16,J([n,f?r:r&-4,p,null,o,s]);if(p||(p=arguments),c&&(n=e[d]),this instanceof t){e=w(n.prototype);var m=n.apply(e,p);return Oe(m)?m:e}return n.apply(e,p)}var n=e[0],r=e[1],a=e[2],i=e[3],o=e[4],s=e[5],u=1&r,c=2&r,l=4&r,f=8&r,d=n;return Jn(t,e),t}function Z(e,t){var a=-1,i=ue(),o=e?e.length:0,u=o>=_&&i===n,c=[];if(u){var l=s(t);l?(i=r,t=l):u=!1}for(;++a<o;){var f=e[a];i(t,f)<0&&c.push(f)}return u&&d(t),c}function Q(e,t,n,r){for(var a=(r||0)-1,i=e?e.length:0,o=[];++a<i;){var s=e[a];if(s&&"object"==typeof s&&"number"==typeof s.length&&(Zn(s)||de(s))){t||(s=Q(s,t,n));var u=-1,c=s.length,l=o.length;for(o.length+=c;++u<c;)o[l++]=s[u]}else n||o.push(s)}return o}function ee(e,t,n,r,a,i){if(n){var o=n(e,t);if("undefined"!=typeof o)return!!o}if(e===t)return 0!==e||1/e==1/t;var s=typeof e,u=typeof t;if(!(e!==e||e&&V[s]||t&&V[u]))return!1;if(null==e||null==t)return e===t;var l=Sn.call(e),d=Sn.call(t);if(l==W&&(l=H),d==W&&(d=H),l!=d)return!1;switch(l){case R:case q:return+e==+t;case B:return e!=+e?t!=+t:0==e?1/e==1/t:e==+t;case F:case I:return e==An(t)}var h=l==L;if(!h){var p=zn.call(e,"__wrapped__"),m=zn.call(t,"__wrapped__");if(p||m)return ee(p?e.__wrapped__:e,m?t.__wrapped__:t,n,r,a,i);if(l!=H)return!1;var g=e.constructor,v=t.constructor;if(g!=v&&!(Ce(g)&&g instanceof g&&Ce(v)&&v instanceof v)&&"constructor"in e&&"constructor"in t)return!1}var y=!a;a||(a=c()),i||(i=c());for(var b=a.length;b--;)if(a[b]==e)return i[b]==t;var _=0;if(o=!0,a.push(e),i.push(t),h){if(b=e.length,_=t.length,o=_==b,o||r)for(;_--;){var w=b,A=t[_];if(r)for(;w--&&!(o=ee(e[w],A,n,r,a,i)););else if(!(o=ee(e[_],A,n,r,a,i)))break}}else sr(t,function(t,s,u){if(zn.call(u,s))return _++,o=zn.call(e,s)&&ee(e[s],t,n,r,a,i)}),o&&!r&&sr(e,function(e,t,n){if(zn.call(n,t))return o=--_>-1});return a.pop(),i.pop(),y&&(f(a),f(i)),o}function ne(e,t,n,r,a){(Zn(t)?Xe:ur)(t,function(t,i){var o,s,u=t,c=e[i];if(t&&((s=Zn(t))||cr(t))){for(var l=r.length;l--;)if(o=r[l]==t){c=a[l];break}if(!o){var f;n&&(u=n(c,t),(f="undefined"!=typeof u)&&(c=u)),f||(c=s?Zn(c)?c:[]:cr(c)?c:{}),r.push(t),a.push(c),f||ne(c,t,n,r,a)}}else n&&(u=n(c,t),"undefined"==typeof u&&(u=t)),"undefined"!=typeof u&&(c=u);e[i]=c})}function re(e,t){return e+Dn(Vn()*(t-e+1))}function ae(e,t,a){var i=-1,o=ue(),u=e?e.length:0,l=[],h=!t&&u>=_&&o===n,p=a||h?c():l;if(h){var m=s(p);o=r,p=m}for(;++i<u;){var g=e[i],v=a?a(g,i,e):g;(t?!i||p[p.length-1]!==v:o(p,v)<0)&&((a||h)&&p.push(v),l.push(g))}return h?(f(p.array),d(p)):a&&f(p),l}function ie(e){return function(n,r,a){var i={};r=t.createCallback(r,a,3);var o=-1,s=n?n.length:0;if("number"==typeof s)for(;++o<s;){var u=n[o];e(i,u,r(u,o,n),n)}else ur(n,function(t,n,a){e(i,t,r(t,n,a),a)});return i}}function oe(e,t,n,r,a,i){var o=1&t,s=2&t,u=4&t,c=16&t,l=32&t;if(!s&&!Ce(e))throw new xn;c&&!n.length&&(t&=-17,c=n=!1),l&&!r.length&&(t&=-33,l=r=!1);var f=e&&e.__bindData__;if(f&&f!==!0)return f=h(f),f[2]&&(f[2]=h(f[2])),f[3]&&(f[3]=h(f[3])),!o||1&f[1]||(f[4]=a),!o&&1&f[1]&&(t|=8),!u||4&f[1]||(f[5]=i),c&&Nn.apply(f[2]||(f[2]=[]),n),l&&Rn.apply(f[3]||(f[3]=[]),r),f[1]|=t,oe.apply(null,f);var d=1==t||17===t?g:J;return d([e,t,n,r,a,i])}function se(e){return tr[e]}function ue(){var e=(e=t.indexOf)===vt?n:e;return e}function ce(e){return"function"==typeof e&&En.test(e)}function le(e){var t,n;return!!(e&&Sn.call(e)==H&&(t=e.constructor,!Ce(t)||t instanceof t))&&(sr(e,function(e,t){n=t}),"undefined"==typeof n||zn.call(e,n))}function fe(e){return nr[e]}function de(e){return e&&"object"==typeof e&&"number"==typeof e.length&&Sn.call(e)==W||!1}function he(e,t,n,r){return"boolean"!=typeof t&&null!=t&&(r=n,n=t,t=!1),v(e,t,"function"==typeof n&&K(n,r,1))}function pe(e,t,n){return v(e,!0,"function"==typeof t&&K(t,n,1))}function me(e,t){var n=w(e);return t?ir(n,t):n}function ge(e,n,r){var a;return n=t.createCallback(n,r,3),ur(e,function(e,t,r){if(n(e,t,r))return a=t,!1}),a}function ve(e,n,r){var a;return n=t.createCallback(n,r,3),be(e,function(e,t,r){if(n(e,t,r))return a=t,!1}),a}function ye(e,t,n){var r=[];sr(e,function(e,t){r.push(t,e)});var a=r.length;for(t=K(t,n,3);a--&&t(r[a--],r[a],e)!==!1;);return e}function be(e,t,n){var r=er(e),a=r.length;for(t=K(t,n,3);a--;){var i=r[a];if(t(e[i],i,e)===!1)break}return e}function _e(e){var t=[];return sr(e,function(e,n){Ce(e)&&t.push(n)}),t.sort()}function we(e,t){return!!e&&zn.call(e,t)}function Ae(e){for(var t=-1,n=er(e),r=n.length,a={};++t<r;){var i=n[t];a[e[i]]=i}return a}function xe(e){return e===!0||e===!1||e&&"object"==typeof e&&Sn.call(e)==R||!1}function Me(e){return e&&"object"==typeof e&&Sn.call(e)==q||!1}function ke(e){return e&&1===e.nodeType||!1}function Te(e){var t=!0;if(!e)return t;var n=Sn.call(e),r=e.length;return n==L||n==I||n==W||n==H&&"number"==typeof r&&Ce(e.splice)?!r:(ur(e,function(){return t=!1}),t)}function Se(e,t,n,r){return ee(e,t,"function"==typeof n&&K(n,r,2))}function Ee(e){return Hn(e)&&!Fn(parseFloat(e))}function Ce(e){return"function"==typeof e}function Oe(e){return!(!e||!V[typeof e])}function De(e){return Pe(e)&&e!=+e}function je(e){return null===e}function Pe(e){return"number"==typeof e||e&&"object"==typeof e&&Sn.call(e)==B||!1}function ze(e){return e&&"object"==typeof e&&Sn.call(e)==F||!1}function Ne(e){return"string"==typeof e||e&&"object"==typeof e&&Sn.call(e)==I||!1}function We(e){return"undefined"==typeof e}function Le(e,n,r){var a={};return n=t.createCallback(n,r,3),ur(e,function(e,t,r){a[t]=n(e,t,r)}),a}function Re(e){var t=arguments,n=2;if(!Oe(e))return e;if("number"!=typeof t[2]&&(n=t.length),n>3&&"function"==typeof t[n-2])var r=K(t[--n-1],t[n--],2);else n>2&&"function"==typeof t[n-1]&&(r=t[--n]);for(var a=h(arguments,1,n),i=-1,o=c(),s=c();++i<n;)ne(e,a[i],r,o,s);return f(o),f(s),e}function qe(e,n,r){var a={};if("function"!=typeof n){var i=[];sr(e,function(e,t){i.push(t)}),i=Z(i,Q(arguments,!0,!1,1));for(var o=-1,s=i.length;++o<s;){var u=i[o];a[u]=e[u]}}else n=t.createCallback(n,r,3),sr(e,function(e,t,r){n(e,t,r)||(a[t]=e)});return a}function Ye(e){for(var t=-1,n=er(e),r=n.length,a=pn(r);++t<r;){var i=n[t];a[t]=[i,e[i]]}return a}function Be(e,n,r){var a={};if("function"!=typeof n)for(var i=-1,o=Q(arguments,!0,!1,1),s=Oe(e)?o.length:0;++i<s;){var u=o[i];u in e&&(a[u]=e[u])}else n=t.createCallback(n,r,3),sr(e,function(e,t,r){n(e,t,r)&&(a[t]=e)});return a}function He(e,n,r,a){var i=Zn(e);if(null==r)if(i)r=[];else{var o=e&&e.constructor,s=o&&o.prototype;r=w(s)}return n&&(n=t.createCallback(n,a,4),(i?Xe:ur)(e,function(e,t,a){return n(r,e,t,a)})),r}function Fe(e){for(var t=-1,n=er(e),r=n.length,a=pn(r);++t<r;)a[t]=e[n[t]];return a}function Ie(e){for(var t=arguments,n=-1,r=Q(t,!0,!1,1),a=t[2]&&t[2][t[1]]===e?1:r.length,i=pn(a);++n<a;)i[n]=e[r[n]];return i}function Ue(e,t,n){var r=-1,a=ue(),i=e?e.length:0,o=!1;return n=(n<0?Un(0,i+n):n)||0,Zn(e)?o=a(e,t,n)>-1:"number"==typeof i?o=(Ne(e)?e.indexOf(t,n):a(e,t,n))>-1:ur(e,function(e){if(++r>=n)return!(o=e===t)}),o}function Ge(e,n,r){var a=!0;n=t.createCallback(n,r,3);var i=-1,o=e?e.length:0;if("number"==typeof o)for(;++i<o&&(a=!!n(e[i],i,e)););else ur(e,function(e,t,r){return a=!!n(e,t,r)});return a}function $e(e,n,r){var a=[];n=t.createCallback(n,r,3);var i=-1,o=e?e.length:0;if("number"==typeof o)for(;++i<o;){var s=e[i];n(s,i,e)&&a.push(s)}else ur(e,function(e,t,r){n(e,t,r)&&a.push(e)});return a}function Ve(e,n,r){n=t.createCallback(n,r,3);var a=-1,i=e?e.length:0;if("number"!=typeof i){var o;return ur(e,function(e,t,r){if(n(e,t,r))return o=e,!1}),o}for(;++a<i;){var s=e[a];if(n(s,a,e))return s}}function Ke(e,n,r){var a;return n=t.createCallback(n,r,3),Je(e,function(e,t,r){if(n(e,t,r))return a=e,!1}),a}function Xe(e,t,n){var r=-1,a=e?e.length:0;if(t=t&&"undefined"==typeof n?t:K(t,n,3),"number"==typeof a)for(;++r<a&&t(e[r],r,e)!==!1;);else ur(e,t);return e}function Je(e,t,n){var r=e?e.length:0;if(t=t&&"undefined"==typeof n?t:K(t,n,3),"number"==typeof r)for(;r--&&t(e[r],r,e)!==!1;);else{var a=er(e);r=a.length,ur(e,function(e,n,i){return n=a?a[--r]:--r,t(i[n],n,i)})}return e}function Ze(e,t){var n=h(arguments,2),r=-1,a="function"==typeof t,i=e?e.length:0,o=pn("number"==typeof i?i:0);return Xe(e,function(e){o[++r]=(a?t:e[t]).apply(e,n)}),o}function Qe(e,n,r){var a=-1,i=e?e.length:0;if(n=t.createCallback(n,r,3),"number"==typeof i)for(var o=pn(i);++a<i;)o[a]=n(e[a],a,e);else o=[],ur(e,function(e,t,r){o[++a]=n(e,t,r)});return o}function et(e,n,r){var a=-(1/0),o=a;if("function"!=typeof n&&r&&r[n]===e&&(n=null),null==n&&Zn(e))for(var s=-1,u=e.length;++s<u;){var c=e[s];c>o&&(o=c)}else n=null==n&&Ne(e)?i:t.createCallback(n,r,3),Xe(e,function(e,t,r){var i=n(e,t,r);i>a&&(a=i,o=e)});return o}function tt(e,n,r){var a=1/0,o=a;if("function"!=typeof n&&r&&r[n]===e&&(n=null),null==n&&Zn(e))for(var s=-1,u=e.length;++s<u;){var c=e[s];c<o&&(o=c)}else n=null==n&&Ne(e)?i:t.createCallback(n,r,3),Xe(e,function(e,t,r){var i=n(e,t,r);i<a&&(a=i,o=e)});return o}function nt(e,n,r,a){if(!e)return r;var i=arguments.length<3;n=t.createCallback(n,a,4);var o=-1,s=e.length;if("number"==typeof s)for(i&&(r=e[++o]);++o<s;)r=n(r,e[o],o,e);else ur(e,function(e,t,a){r=i?(i=!1,e):n(r,e,t,a)});return r}function rt(e,n,r,a){var i=arguments.length<3;return n=t.createCallback(n,a,4),Je(e,function(e,t,a){r=i?(i=!1,e):n(r,e,t,a)}),r}function at(e,n,r){return n=t.createCallback(n,r,3),$e(e,function(e,t,r){return!n(e,t,r)})}function it(e,t,n){if(e&&"number"!=typeof e.length&&(e=Fe(e)),null==t||n)return e?e[re(0,e.length-1)]:m;var r=ot(e);return r.length=Gn(Un(0,t),r.length),r}function ot(e){var t=-1,n=e?e.length:0,r=pn("number"==typeof n?n:0);return Xe(e,function(e){var n=re(0,++t);r[t]=r[n],r[n]=e}),r}function st(e){var t=e?e.length:0;return"number"==typeof t?t:er(e).length}function ut(e,n,r){var a;n=t.createCallback(n,r,3);var i=-1,o=e?e.length:0;if("number"==typeof o)for(;++i<o&&!(a=n(e[i],i,e)););else ur(e,function(e,t,r){return!(a=n(e,t,r))});return!!a}function ct(e,n,r){var a=-1,i=Zn(n),s=e?e.length:0,u=pn("number"==typeof s?s:0);for(i||(n=t.createCallback(n,r,3)),Xe(e,function(e,t,r){var o=u[++a]=l();i?o.criteria=Qe(n,function(t){return e[t]}):(o.criteria=c())[0]=n(e,t,r),o.index=a,o.value=e}),s=u.length,u.sort(o);s--;){var h=u[s];u[s]=h.value,i||f(h.criteria),d(h)}return u}function lt(e){return e&&"number"==typeof e.length?h(e):Fe(e)}function ft(e){for(var t=-1,n=e?e.length:0,r=[];++t<n;){var a=e[t];a&&r.push(a)}return r}function dt(e){return Z(e,Q(arguments,!0,!0,1))}function ht(e,n,r){var a=-1,i=e?e.length:0;for(n=t.createCallback(n,r,3);++a<i;)if(n(e[a],a,e))return a;return-1}function pt(e,n,r){var a=e?e.length:0;for(n=t.createCallback(n,r,3);a--;)if(n(e[a],a,e))return a;return-1}function mt(e,n,r){var a=0,i=e?e.length:0;if("number"!=typeof n&&null!=n){var o=-1;for(n=t.createCallback(n,r,3);++o<i&&n(e[o],o,e);)a++}else if(a=n,null==a||r)return e?e[0]:m;return h(e,0,Gn(Un(0,a),i))}function gt(e,t,n,r){return"boolean"!=typeof t&&null!=t&&(r=n,n="function"!=typeof t&&r&&r[t]===e?null:t,t=!1),null!=n&&(e=Qe(e,n,r)),Q(e,t)}function vt(e,t,r){if("number"==typeof r){var a=e?e.length:0;r=r<0?Un(0,a+r):r||0}else if(r){var i=Tt(e,t);return e[i]===t?i:-1}return n(e,t,r)}function yt(e,n,r){var a=0,i=e?e.length:0;if("number"!=typeof n&&null!=n){var o=i;for(n=t.createCallback(n,r,3);o--&&n(e[o],o,e);)a++}else a=null==n||r?1:n||a;return h(e,0,Gn(Un(0,i-a),i))}function bt(){for(var e=[],t=-1,a=arguments.length,i=c(),o=ue(),u=o===n,l=c();++t<a;){var h=arguments[t];(Zn(h)||de(h))&&(e.push(h),i.push(u&&h.length>=_&&s(t?e[t]:l)))}var p=e[0],m=-1,g=p?p.length:0,v=[];e:for(;++m<g;){var y=i[0];if(h=p[m],(y?r(y,h):o(l,h))<0){for(t=a,(y||l).push(h);--t;)if(y=i[t],(y?r(y,h):o(e[t],h))<0)continue e;v.push(h)}}for(;a--;)y=i[a],y&&d(y);return f(i),f(l),v}function _t(e,n,r){var a=0,i=e?e.length:0;if("number"!=typeof n&&null!=n){var o=i;for(n=t.createCallback(n,r,3);o--&&n(e[o],o,e);)a++}else if(a=n,null==a||r)return e?e[i-1]:m;return h(e,Un(0,i-a))}function wt(e,t,n){var r=e?e.length:0;for("number"==typeof n&&(r=(n<0?Un(0,r+n):Gn(n,r-1))+1);r--;)if(e[r]===t)return r;return-1}function At(e){for(var t=arguments,n=0,r=t.length,a=e?e.length:0;++n<r;)for(var i=-1,o=t[n];++i<a;)e[i]===o&&(Ln.call(e,i--,1),a--);return e}function xt(e,t,n){e=+e||0,n="number"==typeof n?n:+n||1,null==t&&(t=e,e=0);for(var r=-1,a=Un(0,Cn((t-e)/(n||1))),i=pn(a);++r<a;)i[r]=e,e+=n;return i}function Mt(e,n,r){var a=-1,i=e?e.length:0,o=[];for(n=t.createCallback(n,r,3);++a<i;){var s=e[a];n(s,a,e)&&(o.push(s),Ln.call(e,a--,1),i--)}return o}function kt(e,n,r){if("number"!=typeof n&&null!=n){var a=0,i=-1,o=e?e.length:0;for(n=t.createCallback(n,r,3);++i<o&&n(e[i],i,e);)a++}else a=null==n||r?1:Un(0,n);return h(e,a)}function Tt(e,n,r,a){var i=0,o=e?e.length:i;for(r=r?t.createCallback(r,a,1):Jt,n=r(n);i<o;){var s=i+o>>>1;r(e[s])<n?i=s+1:o=s}return i}function St(){return ae(Q(arguments,!0,!0))}function Et(e,n,r,a){return"boolean"!=typeof n&&null!=n&&(a=r,r="function"!=typeof n&&a&&a[n]===e?null:n,n=!1),null!=r&&(r=t.createCallback(r,a,3)),ae(e,n,r)}function Ct(e){return Z(e,h(arguments,1))}function Ot(){for(var e=-1,t=arguments.length;++e<t;){var n=arguments[e];if(Zn(n)||de(n))var r=r?ae(Z(r,n).concat(Z(n,r))):n}return r||[]}function Dt(){for(var e=arguments.length>1?arguments:arguments[0],t=-1,n=e?et(hr(e,"length")):0,r=pn(n<0?0:n);++t<n;)r[t]=hr(e,t);return r}function jt(e,t){var n=-1,r=e?e.length:0,a={};for(t||!r||Zn(e[0])||(t=[]);++n<r;){var i=e[n];t?a[i]=t[n]:i&&(a[i[0]]=i[1])}return a}function Pt(e,t){if(!Ce(t))throw new xn;return function(){if(--e<1)return t.apply(this,arguments)}}function zt(e,t){return arguments.length>2?oe(e,17,h(arguments,2),null,t):oe(e,1,null,null,t)}function Nt(e){for(var t=arguments.length>1?Q(arguments,!0,!1,1):_e(e),n=-1,r=t.length;++n<r;){var a=t[n];e[a]=oe(e[a],1,null,null,e)}return e}function Wt(e,t){return arguments.length>2?oe(t,19,h(arguments,2),null,e):oe(t,3,null,null,e)}function Lt(){for(var e=arguments,t=e.length;t--;)if(!Ce(e[t]))throw new xn;return function(){for(var t=arguments,n=e.length;n--;)t=[e[n].apply(this,t)];return t[0]}}function Rt(e,t){return t="number"==typeof t?t:+t||e.length,oe(e,4,null,null,null,t)}function qt(e,t,n){var r,a,i,o,s,u,c,l=0,f=!1,d=!0;if(!Ce(e))throw new xn;if(t=Un(0,t)||0,n===!0){var h=!0;d=!1}else Oe(n)&&(h=n.leading,f="maxWait"in n&&(Un(t,n.maxWait)||0),d="trailing"in n?n.trailing:d);var p=function(){var n=t-(mr()-o);if(n<=0){a&&On(a);var f=c;a=u=c=m,f&&(l=mr(),i=e.apply(s,r),u||a||(r=s=null))}else u=Wn(p,n)},g=function(){u&&On(u),a=u=c=m,(d||f!==t)&&(l=mr(),i=e.apply(s,r),u||a||(r=s=null))};return function(){if(r=arguments,o=mr(),s=this,c=d&&(u||!h),f===!1)var n=h&&!u;else{a||h||(l=o);var m=f-(o-l),v=m<=0;v?(a&&(a=On(a)),l=o,i=e.apply(s,r)):a||(a=Wn(g,m))}return v&&u?u=On(u):u||t===f||(u=Wn(p,t)),n&&(v=!0,i=e.apply(s,r)),!v||u||a||(r=s=null),i}}function Yt(e){if(!Ce(e))throw new xn;var t=h(arguments,1);return Wn(function(){e.apply(m,t)},1)}function Bt(e,t){if(!Ce(e))throw new xn;var n=h(arguments,2);return Wn(function(){e.apply(m,n)},t)}function Ht(e,t){if(!Ce(e))throw new xn;var n=function(){var r=n.cache,a=t?t.apply(this,arguments):b+arguments[0];return zn.call(r,a)?r[a]:r[a]=e.apply(this,arguments)};return n.cache={},n}function Ft(e){var t,n;if(!Ce(e))throw new xn;return function(){return t?n:(t=!0,n=e.apply(this,arguments),e=null,n)}}function It(e){return oe(e,16,h(arguments,1))}function Ut(e){return oe(e,32,null,h(arguments,1))}function Gt(e,t,n){var r=!0,a=!0;if(!Ce(e))throw new xn;return n===!1?r=!1:Oe(n)&&(r="leading"in n?n.leading:r,a="trailing"in n?n.trailing:a),G.leading=r,G.maxWait=t,G.trailing=a,qt(e,t,G)}function $t(e,t){return oe(t,16,[e])}function Vt(e){return function(){return e}}function Kt(e,t,n){var r=typeof e;if(null==e||"function"==r)return K(e,t,n);if("object"!=r)return tn(e);var a=er(e),i=a[0],o=e[i];return 1!=a.length||o!==o||Oe(o)?function(t){for(var n=a.length,r=!1;n--&&(r=ee(t[a[n]],e[a[n]],null,!0)););return r}:function(e){var t=e[i];return o===t&&(0!==o||1/o==1/t)}}function Xt(e){return null==e?"":An(e).replace(ar,se)}function Jt(e){return e}function Zt(e,n,r){var i=!0,o=n&&_e(n);n&&(r||o.length)||(null==r&&(r=n),s=a,n=e,e=t,o=_e(n)),r===!1?i=!1:Oe(r)&&"chain"in r&&(i=r.chain);var s=e,u=Ce(s);Xe(o,function(t){var r=e[t]=n[t];u&&(s.prototype[t]=function(){var t=this.__chain__,n=this.__wrapped__,a=[n];Nn.apply(a,arguments);var o=r.apply(e,a);if(i||t){if(n===o&&Oe(o))return this;o=new s(o),o.__chain__=t}return o})})}function Qt(){return e._=Tn,this}function en(){}function tn(e){return function(t){return t[e]}}function nn(e,t,n){var r=null==e,a=null==t;if(null==n&&("boolean"==typeof e&&a?(n=e,e=1):a||"boolean"!=typeof t||(n=t,a=!0)),r&&a&&(t=1),e=+e||0,a?(t=e,e=0):t=+t||0,n||e%1||t%1){var i=Vn();return Gn(e+i*(t-e+parseFloat("1e-"+((i+"").length-1))),t)}return re(e,t)}function rn(e,t){if(e){var n=e[t];return Ce(n)?e[t]():n}}function an(e,n,r){var a=t.templateSettings;e=An(e||""),r=or({},r,a);var i,o=or({},r.imports,a.imports),s=er(o),c=Fe(o),l=0,f=r.interpolate||D,d="__p += '",h=wn((r.escape||D).source+"|"+f.source+"|"+(f===C?T:D).source+"|"+(r.evaluate||D).source+"|$","g");e.replace(h,function(t,n,r,a,o,s){return r||(r=a),d+=e.slice(l,s).replace(P,u),n&&(d+="' +\n__e("+n+") +\n'"),o&&(i=!0,d+="';\n"+o+";\n__p += '"),r&&(d+="' +\n((__t = ("+r+")) == null ? '' : __t) +\n'"),l=s+t.length,t}),d+="';\n";var p=r.variable,g=p;g||(p="obj",d="with ("+p+") {\n"+d+"\n}\n"),d=(i?d.replace(x,""):d).replace(M,"$1").replace(k,"$1;"),d="function("+p+") {\n"+(g?"":p+" || ("+p+" = {});\n")+"var __t, __p = '', __e = _.escape"+(i?", __j = Array.prototype.join;\nfunction print() { __p += __j.call(arguments, '') }\n":";\n")+d+"return __p\n}";var v="\n/*\n//# sourceURL="+(r.sourceURL||"/lodash/template/source["+N++ +"]")+"\n*/";try{var y=vn(s,"return "+d+v).apply(m,c)}catch(e){throw e.source=d,e}return n?y(n):(y.source=d,y)}function on(e,t,n){e=(e=+e)>-1?e:0;var r=-1,a=pn(e);for(t=K(t,n,1);++r<e;)a[r]=t(r);return a}function sn(e){return null==e?"":An(e).replace(rr,fe)}function un(e){var t=++y;return An(null==e?"":e)+t}function cn(e){return e=new a(e),e.__chain__=!0,e}function ln(e,t){return t(e),e}function fn(){return this.__chain__=!0,this}function dn(){return An(this.__wrapped__)}function hn(){return this.__wrapped__}e=e?te.defaults(X.Object(),e,te.pick(X,z)):X;var pn=e.Array,mn=e.Boolean,gn=e.Date,vn=e.Function,yn=e.Math,bn=e.Number,_n=e.Object,wn=e.RegExp,An=e.String,xn=e.TypeError,Mn=[],kn=_n.prototype,Tn=e._,Sn=kn.toString,En=wn("^"+An(Sn).replace(/[.*+?^${}()|[\]\\]/g,"\\$&").replace(/toString| for [^\]]+/g,".*?")+"$"),Cn=yn.ceil,On=e.clearTimeout,Dn=yn.floor,jn=vn.prototype.toString,Pn=ce(Pn=_n.getPrototypeOf)&&Pn,zn=kn.hasOwnProperty,Nn=Mn.push,Wn=e.setTimeout,Ln=Mn.splice,Rn=Mn.unshift,qn=function(){try{var e={},t=ce(t=_n.defineProperty)&&t,n=t(e,e,e)&&t}catch(e){}return n}(),Yn=ce(Yn=_n.create)&&Yn,Bn=ce(Bn=pn.isArray)&&Bn,Hn=e.isFinite,Fn=e.isNaN,In=ce(In=_n.keys)&&In,Un=yn.max,Gn=yn.min,$n=e.parseInt,Vn=yn.random,Kn={};Kn[L]=pn,Kn[R]=mn,Kn[q]=gn,Kn[Y]=vn,Kn[H]=_n,Kn[B]=bn,Kn[F]=wn,Kn[I]=An,a.prototype=t.prototype;var Xn=t.support={};Xn.funcDecomp=!ce(e.WinRTError)&&j.test(p),Xn.funcNames="string"==typeof vn.name,t.templateSettings={escape:/<%-([\s\S]+?)%>/g,evaluate:/<%([\s\S]+?)%>/g,interpolate:C,variable:"",imports:{_:t}},Yn||(w=function(){function t(){}return function(n){if(Oe(n)){t.prototype=n;var r=new t;t.prototype=null}return r||e.Object()}}());var Jn=qn?function(e,t){$.value=t,qn(e,"__bindData__",$),$.value=null}:en,Zn=Bn||function(e){return e&&"object"==typeof e&&"number"==typeof e.length&&Sn.call(e)==L||!1},Qn=function(e){var t,n=e,r=[];if(!n)return r;if(!V[typeof e])return r;for(t in n)zn.call(n,t)&&r.push(t);return r},er=In?function(e){return Oe(e)?In(e):[]}:Qn,tr={"&":"&","<":"<",">":">",'"':""","'":"'"},nr=Ae(tr),rr=wn("("+er(nr).join("|")+")","g"),ar=wn("["+er(tr).join("")+"]","g"),ir=function(e,t,n){var r,a=e,i=a;if(!a)return i;var o=arguments,s=0,u="number"==typeof n?2:o.length;if(u>3&&"function"==typeof o[u-2])var c=K(o[--u-1],o[u--],2);else u>2&&"function"==typeof o[u-1]&&(c=o[--u]);for(;++s<u;)if(a=o[s],a&&V[typeof a])for(var l=-1,f=V[typeof a]&&er(a),d=f?f.length:0;++l<d;)r=f[l],i[r]=c?c(i[r],a[r]):a[r];return i},or=function(e,t,n){var r,a=e,i=a;if(!a)return i;for(var o=arguments,s=0,u="number"==typeof n?2:o.length;++s<u;)if(a=o[s],a&&V[typeof a])for(var c=-1,l=V[typeof a]&&er(a),f=l?l.length:0;++c<f;)r=l[c],"undefined"==typeof i[r]&&(i[r]=a[r]);return i},sr=function(e,t,n){var r,a=e,i=a;if(!a)return i;if(!V[typeof a])return i;t=t&&"undefined"==typeof n?t:K(t,n,3);for(r in a)if(t(a[r],r,e)===!1)return i;return i},ur=function(e,t,n){var r,a=e,i=a;if(!a)return i;if(!V[typeof a])return i;t=t&&"undefined"==typeof n?t:K(t,n,3);for(var o=-1,s=V[typeof a]&&er(a),u=s?s.length:0;++o<u;)if(r=s[o],t(a[r],r,e)===!1)return i;return i},cr=Pn?function(e){if(!e||Sn.call(e)!=H)return!1;var t=e.valueOf,n=ce(t)&&(n=Pn(t))&&Pn(n);return n?e==n||Pn(e)==n:le(e)}:le,lr=ie(function(e,t,n){zn.call(e,n)?e[n]++:e[n]=1}),fr=ie(function(e,t,n){(zn.call(e,n)?e[n]:e[n]=[]).push(t)}),dr=ie(function(e,t,n){e[n]=t}),hr=Qe,pr=$e,mr=ce(mr=gn.now)&&mr||function(){return(new gn).getTime()},gr=8==$n(A+"08")?$n:function(e,t){return $n(Ne(e)?e.replace(O,""):e,t||0)};return t.after=Pt,t.assign=ir,t.at=Ie,t.bind=zt,t.bindAll=Nt,t.bindKey=Wt,t.chain=cn,t.compact=ft,t.compose=Lt,t.constant=Vt,t.countBy=lr,t.create=me,t.createCallback=Kt,t.curry=Rt,t.debounce=qt,t.defaults=or,t.defer=Yt,t.delay=Bt,t.difference=dt,t.filter=$e,t.flatten=gt,t.forEach=Xe,t.forEachRight=Je,t.forIn=sr,t.forInRight=ye,t.forOwn=ur,t.forOwnRight=be,t.functions=_e,t.groupBy=fr,t.indexBy=dr,t.initial=yt,t.intersection=bt,t.invert=Ae,t.invoke=Ze,t.keys=er,t.map=Qe,t.mapValues=Le,t.max=et,t.memoize=Ht,t.merge=Re,t.min=tt,t.omit=qe,t.once=Ft,t.pairs=Ye,t.partial=It,t.partialRight=Ut,t.pick=Be,t.pluck=hr,t.property=tn,t.pull=At,t.range=xt,t.reject=at,t.remove=Mt,t.rest=kt,t.shuffle=ot,t.sortBy=ct,t.tap=ln,t.throttle=Gt,t.times=on,t.toArray=lt,t.transform=He,t.union=St,t.uniq=Et,t.values=Fe,t.where=pr,t.without=Ct,t.wrap=$t,t.xor=Ot,t.zip=Dt,t.zipObject=jt,t.collect=Qe,t.drop=kt,t.each=Xe,t.eachRight=Je,t.extend=ir,t.methods=_e,t.object=jt,t.select=$e,t.tail=kt,t.unique=Et,t.unzip=Dt,Zt(t),t.clone=he,t.cloneDeep=pe,t.contains=Ue,t.escape=Xt,t.every=Ge,t.find=Ve,t.findIndex=ht,t.findKey=ge,t.findLast=Ke,t.findLastIndex=pt,t.findLastKey=ve,t.has=we,t.identity=Jt,t.indexOf=vt,t.isArguments=de,t.isArray=Zn,t.isBoolean=xe,t.isDate=Me,t.isElement=ke,t.isEmpty=Te,t.isEqual=Se,t.isFinite=Ee,t.isFunction=Ce,t.isNaN=De,t.isNull=je,t.isNumber=Pe,t.isObject=Oe,t.isPlainObject=cr,t.isRegExp=ze,t.isString=Ne,t.isUndefined=We,t.lastIndexOf=wt,t.mixin=Zt,t.noConflict=Qt,t.noop=en,t.now=mr,t.parseInt=gr,t.random=nn,t.reduce=nt,t.reduceRight=rt,t.result=rn,t.runInContext=p,t.size=st,t.some=ut,t.sortedIndex=Tt,t.template=an,t.unescape=sn,t.uniqueId=un,t.all=Ge,t.any=ut,t.detect=Ve,t.findWhere=Ve,t.foldl=nt,t.foldr=rt,t.include=Ue,t.inject=nt,Zt(function(){var e={};return ur(t,function(n,r){t.prototype[r]||(e[r]=n)}),e}(),!1),t.first=mt,t.last=_t,t.sample=it,t.take=mt,t.head=mt,ur(t,function(e,n){var r="sample"!==n;t.prototype[n]||(t.prototype[n]=function(t,n){var i=this.__chain__,o=e(this.__wrapped__,t,n);return i||null!=t&&(!n||r&&"function"==typeof t)?new a(o,i):o})}),t.VERSION="2.4.2",t.prototype.chain=fn,t.prototype.toString=dn,t.prototype.value=hn,t.prototype.valueOf=hn,Xe(["join","pop","shift"],function(e){var n=Mn[e];t.prototype[e]=function(){var e=this.__chain__,t=n.apply(this.__wrapped__,arguments);return e?new a(t,e):t}}),Xe(["push","reverse","sort","unshift"],function(e){var n=Mn[e];t.prototype[e]=function(){return n.apply(this.__wrapped__,arguments),this}}),Xe(["concat","slice","splice"],function(e){var n=Mn[e];t.prototype[e]=function(){return new a(n.apply(this.__wrapped__,arguments),this.__chain__)}}),t}var m,g=[],v=[],y=0,b=+new Date+"",_=75,w=40,A=" \t\v\f \ufeff\n\r\u2028\u2029 ᠎              ",x=/\b__p \+= '';/g,M=/\b(__p \+=) '' \+/g,k=/(__e\(.*?\)|\b__t\)) \+\n'';/g,T=/\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g,S=/\w*$/,E=/^\s*function[ \n\r\t]+\w/,C=/<%=([\s\S]+?)%>/g,O=RegExp("^["+A+"]*0+(?=.$)"),D=/($^)/,j=/\bthis\b/,P=/['\n\r\t\u2028\u2029\\]/g,z=["Array","Boolean","Date","Function","Math","Number","Object","RegExp","String","_","attachEvent","clearTimeout","isFinite","isNaN","parseInt","setTimeout"],N=0,W="[object Arguments]",L="[object Array]",R="[object Boolean]",q="[object Date]",Y="[object Function]",B="[object Number]",H="[object Object]",F="[object RegExp]",I="[object String]",U={};U[Y]=!1,U[W]=U[L]=U[R]=U[q]=U[B]=U[H]=U[F]=U[I]=!0;var G={leading:!1,maxWait:0,trailing:!1},$={configurable:!1,enumerable:!1,value:null,writable:!1},V={boolean:!1,function:!0,object:!0,number:!1,string:!1,undefined:!1},K={"\\":"\\","'":"'","\n":"n","\r":"r","\t":"t","\u2028":"u2028","\u2029":"u2029"},X=V[typeof window]&&window||this,J=V[typeof t]&&t&&!t.nodeType&&t,Z=V[typeof e]&&e&&!e.nodeType&&e,Q=Z&&Z.exports===J&&J,ee=V[typeof Gt]&≫!ee||ee.global!==ee&&ee.window!==ee||(X=ee);var te=p();"function"==typeof define&&"object"==typeof define.amd&&define.amd?(X._=te,define(function(){return te})):J&&Z?Q?(Z.exports=te)._=te:J._=te:X._=te}).call(this)}),pm=hm,mm=function(e,t,n){e=ct(e),t=ct(t);var r,a;e.length>t.length?(r=e,a=t):(r=t,a=e);var i,o,s,u,c=n?n:.7,l=.1,f=Math.floor(Math.max(r.length/2-1,0)),d=[],h=[],p=0;for(i=0;i<a.length;i++)for(u=a[i],o=Math.max(i-f,0),s=Math.min(i+f+1,r.length);o<s;o++)if(!h[o]&&u===r[o]){d[i]=o,h[o]=!0,p++;break}var m,g,v=[],y=[],b=0,_=0;for(m=0,g=0;m<a.length;m++)d[m]>-1&&(v[g]=a[m],g++);for(m=0,g=0;m<r.length;m++)h[m]&&(y[g]=r[m],g++);for(i=0;i<v.length;i++)v[i]!==y[i]&&b++;for(i=0;i<a.length&&e[i]===t[i];i++)_++;var w=p,n=b/2;if(w){var A=(w/e.length+w/t.length+(w-n)/w)/3,x=A<c?A:A+Math.min(l,1/r.length)*_*(1-A);return x}return 0},gm=function(e,t,n){if(e=ct(e),t=ct(t),0===e.length)return t.length;if(0===t.length)return e.length;var r,a,i,o,s=n?n:{d:1,i:1,s:1},u=[],c=[],l=t.length+1;for(r=0;r<l;r++)u[r]=r;for(r=0;r<e.length;r++){for(c[0]=r+1,a=0;a<t.length;a++)i=e[r]===t[a]?0:s.s,c[a+1]=Math.min(c[a]+s.d,u[a+1]+s.i,u[a]+i);for(a=0;a<l;a++)u[a]=c[a]}return o=Math.max(e.length,t.length),(o-c[t.length])/o},vm=function(e,t,n){e=ct(e),t=ct(t);var r,a,i,o,s,u,c,l=e.length,f=t.length,d=n?n:2,h=[],p=[],m=[],g=[],v=[];if(0===l||0===f)return l===f?1:0;if(r=0,l<d||f<d){for(a=0,o=Math.min(l,f);a<o;a++)e[a]===t[a]&&r++;return r/Math.max(l,f)}for(a=0;a<l+d-1;a++)a<d-1?h[a]=0:h[a]=e[a-d+1];for(a=0;a<=l;a++)p[a]=a;for(i=1;i<=f;i++){if(i<d){for(s=0;s<d-i;s++)v[s]=0;for(s=d-i;s<d;s++)v[s]=t[s-(d-i)]}else v=t.slice(i-d,i);for(m[0]=i,a=1;a<=l;a++){for(r=0,u=d,o=0;o<d;o++)h[a-1+o]!==v[o]?r++:0===h[a-1+o]&&u--;c=r/u,m[a]=Math.min(Math.min(m[a-1]+1,p[a]+1),p[a-1]+c)}g=p,p=m,m=g}return 1-p[l]/Math.max(l,f)},ym=function(e,t){var n=[];Object.keys(e).forEach(function(e){t[e]&&n.push(e)});var r=n.length;if(0===r)return 0;var a=ut(n.map(function(t){ return e[t]})),i=ut(n.map(function(e){return t[e]})),o=ut(n.map(function(t){return Math.pow(e[t],2)})),s=ut(n.map(function(e){return Math.pow(t[e],2)})),u=ut(n.map(function(n){return e[n]*t[n]})),c=u-a*i/r,l=Math.sqrt((o-Math.pow(a,2)/r)*(s-Math.pow(i,2)/r));return 0===l?0:c/l},bm=function(e,t){return e=ct(e),t=ct(t),pm.intersection(e,t).length/pm.union(e,t).length},_m=function(e,t){e=ct(e),t=ct(t);var n=pm.intersection(e,t).length;return n/(e.length+t.length-n)},wm={jarowinkler:mm,levenshtein:gm,ngram:vm,pearson:ym,jaccard:bm,tanimoto:_m},Am={author:Ze,lead_image_url:Qe,dek:et,date_published:it,content:ot,title:st},xm={defaultOpts:{stripUnlikelyCandidates:!0,weightNodes:!0,cleanConditionally:!0},extract:function(e,t){var n=e.$,r=e.html,a=e.title,i=e.url;t=da({},this.defaultOpts,t),n=n||Us.load(r);var o=this.getContentNode(n,a,i,t);if(He(o))return this.cleanAndReturnNode(o,n);var s=!0,u=!1,c=void 0;try{for(var l,f=hu(Ku(t).filter(function(e){return t[e]===!0}));!(s=(l=f.next()).done);s=!0){var d=l.value;if(t[d]=!1,n=Us.load(r),o=this.getContentNode(n,a,i,t),He(o))break}}catch(e){u=!0,c=e}finally{try{!s&&f.return&&f.return()}finally{if(u)throw c}}return this.cleanAndReturnNode(o,n)},getContentNode:function(e,t,n,r){return ot(ht(e,r),{$:e,cleanConditionally:r.cleanConditionally,title:t,url:n})},cleanAndReturnNode:function(e,t){return e?M(t.html(e)):null}},Mm=["tweetmeme-title","dc.title","rbtitle","headline","title"],km=["og:title"],Tm=[".hentry .entry-title","h1#articleHeader","h1.articleHeader","h1.article",".instapaper_title","#meebo-title"],Sm=["article h1","#entry-title",".entry-title","#entryTitle","#entrytitle",".entryTitle",".entrytitle","#articleTitle",".articleTitle","post post-title","h1.title","h2.article","h1","html head title","title"],Em={extract:function(e){var t=e.$,n=e.url,r=e.metaCache,a=void 0;return(a=Le(t,Mm,r))?st(a,{url:n,$:t}):(a=qe(t,Tm))?st(a,{url:n,$:t}):(a=Le(t,km,r))?st(a,{url:n,$:t}):(a=qe(t,Sm),a?st(a,{url:n,$:t}):"")}},Cm=["byl","clmst","dc.author","dcsext.author","dc.creator","rbauthors","authors"],Om=300,Dm=[".entry .entry-author",".author.vcard .fn",".author .vcard .fn",".byline.vcard .fn",".byline .vcard .fn",".byline .by .author",".byline .by",".byline .author",".post-author.vcard",".post-author .vcard","a[rel=author]","#by_author",".by_author","#entryAuthor",".entryAuthor",".byline a[href*=author]","#author .authorname",".author .authorname","#author",".author",".articleauthor",".ArticleAuthor",".byline"],jm=/^[\n\s]*By/i,Pm=[["#byline",jm],[".byline",jm]],zm={extract:function(e){var t=e.$,n=e.metaCache,r=void 0;if(r=Le(t,Cm,n),r&&r.length<Om)return Ze(r);if(r=qe(t,Dm,2),r&&r.length<Om)return Ze(r);var a=!0,i=!1,o=void 0;try{for(var s,u=hu(Pm);!(a=(s=u.next()).done);a=!0){var c=s.value,l=mu(c,2),f=l[0],d=l[1],h=t(f);if(1===h.length){var p=h.text();if(d.test(p))return Ze(p)}}}catch(e){i=!0,o=e}finally{try{!a&&u.return&&u.return()}finally{if(i)throw o}}return null}},Nm=["article:published_time","displaydate","dc.date","dc.date.issued","rbpubdate","publish_date","pub_date","pagedate","pubdate","revision_date","doc_date","date_created","content_create_date","lastmodified","created","date"],Wm=[".hentry .dtstamp.published",".hentry .published",".hentry .dtstamp.updated",".hentry .updated",".single .published",".meta .published",".meta .postDate",".entry-date",".byline .date",".postmetadata .date",".article_datetime",".date-header",".story-date",".dateStamp","#story .datetime",".dateline",".pubdate"],Lm="(jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec)",Rm=[new RegExp("/(20\\d{2}/\\d{2}/\\d{2})/","i"),new RegExp("(20\\d{2}-[01]\\d-[0-3]\\d)","i"),new RegExp("/(20\\d{2}/"+Lm+"/[0-3]\\d)/","i")],qm={extract:function(e){var t=e.$,n=e.url,r=e.metaCache,a=void 0;return(a=Le(t,Nm,r,!1))?it(a):(a=qe(t,Wm))?it(a):(a=k(n,Rm),a?it(a):null)}},Ym={extract:function(){return null}},Bm=["og:image","twitter:image","image_src"],Hm=["link[rel=image_src]"],Fm=["upload","wp-content","large","photo","wp-image"],Im=new RegExp(Fm.join("|"),"i"),Um=["spacer","sprite","blank","throbber","gradient","tile","bg","background","icon","social","header","hdr","advert","spinner","loader","loading","default","rating","share","facebook","twitter","theme","promo","ads","wp-includes"],Gm=new RegExp(Um.join("|"),"i"),$m=/\.gif(\?.*)?$/i,Vm=/\.jpe?g(\?.*)?$/i,Km={extract:function(e){var t=e.$,n=e.content,r=e.metaCache,a=e.html,i=void 0;t.browser||0!==t("head").length||t("*").first().prepend(a);var o=Le(t,Bm,r,!1);if(o&&(i=Qe(o)))return i;var s=t(n),u=t("img",s).toArray(),c={};u.forEach(function(e,n){var r=t(e),a=r.attr("src");if(a){var i=mt(a);i+=gt(r),i+=vt(r),i+=yt(r),i+=bt(r),i+=_t(u,n),c[a]=i}});var l=Ku(c).reduce(function(e,t){return c[t]>e[1]?[t,c[t]]:e},[null,0]),f=mu(l,2),d=f[0],h=f[1];if(h>0&&(i=Qe(d)))return i;var p=!0,m=!1,g=void 0;try{for(var v,y=hu(Hm);!(p=(v=y.next()).done);p=!0){var b=v.value,_=t(b).first(),w=_.attr("src");if(w&&(i=Qe(w)))return i;var A=_.attr("href");if(A&&(i=Qe(A)))return i;var x=_.attr("value");if(x&&(i=Qe(x)))return i}}catch(e){m=!0,g=e}finally{try{!p&&y.return&&y.return()}finally{if(m)throw g}}return null}},Xm=n(function(e,t){(function(){var n,r,a,i,o,s,u,c,l,f,d,h,p,m,g;a=Math.floor,f=Math.min,r=function(e,t){return e<t?-1:e>t?1:0},l=function(e,t,n,i,o){var s;if(null==n&&(n=0),null==o&&(o=r),n<0)throw new Error("lo must be non-negative");for(null==i&&(i=e.length);n<i;)s=a((n+i)/2),o(t,e[s])<0?i=s:n=s+1;return[].splice.apply(e,[n,n-n].concat(t)),t},s=function(e,t,n){return null==n&&(n=r),e.push(t),m(e,0,e.length-1,n)},o=function(e,t){var n,a;return null==t&&(t=r),n=e.pop(),e.length?(a=e[0],e[0]=n,g(e,0,t)):a=n,a},c=function(e,t,n){var a;return null==n&&(n=r),a=e[0],e[0]=t,g(e,0,n),a},u=function(e,t,n){var a;return null==n&&(n=r),e.length&&n(e[0],t)<0&&(a=[e[0],t],t=a[0],e[0]=a[1],g(e,0,n)),t},i=function(e,t){var n,i,o,s,u,c;for(null==t&&(t=r),s=function(){c=[];for(var t=0,n=a(e.length/2);0<=n?t<n:t>n;0<=n?t++:t--)c.push(t);return c}.apply(this).reverse(),u=[],i=0,o=s.length;i<o;i++)n=s[i],u.push(g(e,n,t));return u},p=function(e,t,n){var a;if(null==n&&(n=r),a=e.indexOf(t),a!==-1)return m(e,0,a,n),g(e,a,n)},d=function(e,t,n){var a,o,s,c,l;if(null==n&&(n=r),o=e.slice(0,t),!o.length)return o;for(i(o,n),l=e.slice(t),s=0,c=l.length;s<c;s++)a=l[s],u(o,a,n);return o.sort(n).reverse()},h=function(e,t,n){var a,s,u,c,d,h,p,m,g,v;if(null==n&&(n=r),10*t<=e.length){if(c=e.slice(0,t).sort(n),!c.length)return c;for(u=c[c.length-1],m=e.slice(t),d=0,p=m.length;d<p;d++)a=m[d],n(a,u)<0&&(l(c,a,0,null,n),c.pop(),u=c[c.length-1]);return c}for(i(e,n),v=[],s=h=0,g=f(t,e.length);0<=g?h<g:h>g;s=0<=g?++h:--h)v.push(o(e,n));return v},m=function(e,t,n,a){var i,o,s;for(null==a&&(a=r),i=e[n];n>t&&(s=n-1>>1,o=e[s],a(i,o)<0);)e[n]=o,n=s;return e[n]=i},g=function(e,t,n){var a,i,o,s,u;for(null==n&&(n=r),i=e.length,u=t,o=e[t],a=2*t+1;a<i;)s=a+1,s<i&&!(n(e[a],e[s])<0)&&(a=s),e[t]=e[a],t=a,a=2*t+1;return e[t]=o,m(e,u,t,n)},n=function(){function e(e){this.cmp=null!=e?e:r,this.nodes=[]}return e.push=s,e.pop=o,e.replace=c,e.pushpop=u,e.heapify=i,e.updateItem=p,e.nlargest=d,e.nsmallest=h,e.prototype.push=function(e){return s(this.nodes,e,this.cmp)},e.prototype.pop=function(){return o(this.nodes,this.cmp)},e.prototype.peek=function(){return this.nodes[0]},e.prototype.contains=function(e){return this.nodes.indexOf(e)!==-1},e.prototype.replace=function(e){return c(this.nodes,e,this.cmp)},e.prototype.pushpop=function(e){return u(this.nodes,e,this.cmp)},e.prototype.heapify=function(){return i(this.nodes,this.cmp)},e.prototype.updateItem=function(e){return p(this.nodes,e,this.cmp)},e.prototype.clear=function(){return this.nodes=[]},e.prototype.empty=function(){return 0===this.nodes.length},e.prototype.size=function(){return this.nodes.length},e.prototype.clone=function(){var t;return t=new e,t.nodes=this.nodes.slice(0),t},e.prototype.toArray=function(){return this.nodes.slice(0)},e.prototype.insert=e.prototype.push,e.prototype.top=e.prototype.peek,e.prototype.front=e.prototype.peek,e.prototype.has=e.prototype.contains,e.prototype.copy=e.prototype.clone,e}(),function(n,r){return"function"==typeof define&&define.amd?define([],r):"object"==typeof t?e.exports=r():n.Heap=r()}(this,function(){return n})}).call(this)}),Jm=Xm,Zm=n(function(e,t){(function(){var e,n,r,a,i,o,s,u,c,l,f,d,h,p,m,g,v,y,b,_,w=[].indexOf||function(e){for(var t=0,n=this.length;t<n;t++)if(t in this&&this[t]===e)return t;return-1};s=Math.floor,c=Math.max,l=Math.min,n=Jm,g=function(e,t){return t?2*e/t:1},m=function(e,t){var n,r,a,i,o,s;for(o=[e.length,t.length],r=o[0],a=o[1],n=i=0,s=l(r,a);0<=s?i<s:i>s;n=0<=s?++i:--i){if(e[n]<t[n])return-1;if(e[n]>t[n])return 1}return r-a},_=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},p=function(e){var t,n,r;for(n=0,r=e.length;n<r;n++)if(t=e[n])return!0;return!1},i=function(){function e(e,t,n,r){this.isjunk=e,null==t&&(t=""),null==n&&(n=""),this.autojunk=null==r||r,this.a=this.b=null,this.setSeqs(t,n)}return e.prototype.setSeqs=function(e,t){return this.setSeq1(e),this.setSeq2(t)},e.prototype.setSeq1=function(e){if(e!==this.a)return this.a=e,this.matchingBlocks=this.opcodes=null},e.prototype.setSeq2=function(e){if(e!==this.b)return this.b=e,this.matchingBlocks=this.opcodes=null,this.fullbcount=null,this._chainB()},e.prototype._chainB=function(){var e,t,n,r,a,i,o,u,c,l,f,d,h,p,m,g;for(e=this.b,this.b2j=t={},r=d=0,p=e.length;d<p;r=++d)n=e[r],i=_(t,n)?t[n]:t[n]=[],i.push(r);if(u={},o=this.isjunk)for(g=Object.keys(t),h=0,m=g.length;h<m;h++)n=g[h],o(n)&&(u[n]=!0,delete t[n]);if(f={},c=e.length,this.autojunk&&c>=200){l=s(c/100)+1;for(n in t)a=t[n],a.length>l&&(f[n]=!0,delete t[n])}return this.isbjunk=function(e){return _(u,e)},this.isbpopular=function(e){return _(f,e)}},e.prototype.findLongestMatch=function(e,t,n,r){var a,i,o,s,u,c,l,f,d,h,p,m,g,v,y,b,w,A,x,M,k;for(b=[this.a,this.b,this.b2j,this.isbjunk],a=b[0],i=b[1],o=b[2],f=b[3],w=[e,n,0],s=w[0],u=w[1],c=w[2],h={},l=g=e;e<=t?g<t:g>t;l=e<=t?++g:--g){for(m={},A=_(o,a[l])?o[a[l]]:[],v=0,y=A.length;v<y;v++)if(d=A[v],!(d<n)){if(d>=r)break;p=m[d]=(h[d-1]||0)+1,p>c&&(x=[l-p+1,d-p+1,p],s=x[0],u=x[1],c=x[2])}h=m}for(;s>e&&u>n&&!f(i[u-1])&&a[s-1]===i[u-1];)M=[s-1,u-1,c+1],s=M[0],u=M[1],c=M[2];for(;s+c<t&&u+c<r&&!f(i[u+c])&&a[s+c]===i[u+c];)c++;for(;s>e&&u>n&&f(i[u-1])&&a[s-1]===i[u-1];)k=[s-1,u-1,c+1],s=k[0],u=k[1],c=k[2];for(;s+c<t&&u+c<r&&f(i[u+c])&&a[s+c]===i[u+c];)c++;return[s,u,c]},e.prototype.getMatchingBlocks=function(){var e,t,n,r,a,i,o,s,u,c,l,f,d,h,p,g,v,y,b,_,w,A,x,M,k,T;if(this.matchingBlocks)return this.matchingBlocks;for(A=[this.a.length,this.b.length],h=A[0],p=A[1],y=[[0,h,0,p]],g=[];y.length;)x=y.pop(),t=x[0],e=x[1],r=x[2],n=x[3],M=b=this.findLongestMatch(t,e,r,n),a=M[0],s=M[1],l=M[2],l&&(g.push(b),t<a&&r<s&&y.push([t,a,r,s]),a+l<e&&s+l<n&&y.push([a+l,e,s+l,n]));for(g.sort(m),i=u=f=0,v=[],_=0,w=g.length;_<w;_++)k=g[_],o=k[0],c=k[1],d=k[2],i+f===o&&u+f===c?f+=d:(f&&v.push([i,u,f]),T=[o,c,d],i=T[0],u=T[1],f=T[2]);return f&&v.push([i,u,f]),v.push([h,p,0]),this.matchingBlocks=v},e.prototype.getOpcodes=function(){var e,t,n,r,a,i,o,s,u,c,l,f;if(this.opcodes)return this.opcodes;for(r=a=0,this.opcodes=t=[],c=this.getMatchingBlocks(),s=0,u=c.length;s<u;s++)l=c[s],e=l[0],n=l[1],i=l[2],o="",r<e&&a<n?o="replace":r<e?o="delete":a<n&&(o="insert"),o&&t.push([o,r,e,a,n]),f=[e+i,n+i],r=f[0],a=f[1],i&&t.push(["equal",e,r,n,a]);return t},e.prototype.getGroupedOpcodes=function(e){var t,n,r,a,i,o,s,u,f,d,h,p,m,g,v;for(null==e&&(e=3),t=this.getOpcodes(),t.length||(t=[["equal",0,1,0,1]]),"equal"===t[0][0]&&(p=t[0],f=p[0],a=p[1],i=p[2],o=p[3],s=p[4],t[0]=[f,c(a,i-e),i,c(o,s-e),s]),"equal"===t[t.length-1][0]&&(m=t[t.length-1],f=m[0],a=m[1],i=m[2],o=m[3],s=m[4],t[t.length-1]=[f,a,l(i,a+e),o,l(s,o+e)]),u=e+e,r=[],n=[],d=0,h=t.length;d<h;d++)g=t[d],f=g[0],a=g[1],i=g[2],o=g[3],s=g[4],"equal"===f&&i-a>u&&(n.push([f,a,l(i,a+e),o,l(s,o+e)]),r.push(n),n=[],v=[c(a,i-e),c(o,s-e)],a=v[0],o=v[1]),n.push([f,a,i,o,s]);return!n.length||1===n.length&&"equal"===n[0][0]||r.push(n),r},e.prototype.ratio=function(){var e,t,n,r,a;for(t=0,a=this.getMatchingBlocks(),n=0,r=a.length;n<r;n++)e=a[n],t+=e[2];return g(t,this.a.length+this.b.length)},e.prototype.quickRatio=function(){var e,t,n,r,a,i,o,s,u,c,l;if(!this.fullbcount)for(this.fullbcount=n={},c=this.b,i=0,s=c.length;i<s;i++)t=c[i],n[t]=(n[t]||0)+1;for(n=this.fullbcount,e={},r=0,l=this.a,o=0,u=l.length;o<u;o++)t=l[o],a=_(e,t)?e[t]:n[t]||0,e[t]=a-1,a>0&&r++;return g(r,this.a.length+this.b.length)},e.prototype.realQuickRatio=function(){var e,t,n;return n=[this.a.length,this.b.length],e=n[0],t=n[1],g(l(e,t),e+t)},e}(),u=function(e,t,r,a){var o,s,u,c,l,f,d,h,p,g;if(null==r&&(r=3),null==a&&(a=.6),!(r>0))throw new Error("n must be > 0: ("+r+")");if(!(0<=a&&a<=1))throw new Error("cutoff must be in [0.0, 1.0]: ("+a+")");for(o=[],s=new i,s.setSeq2(e),l=0,d=t.length;l<d;l++)c=t[l],s.setSeq1(c),s.realQuickRatio()>=a&&s.quickRatio()>=a&&s.ratio()>=a&&o.push([s.ratio(),c]);for(o=n.nlargest(o,r,m),g=[],f=0,h=o.length;f<h;f++)p=o[f],u=p[0],c=p[1],g.push(c);return g},v=function(e,t){var n,r,a;for(a=[0,e.length],n=a[0],r=a[1];n<r&&e[n]===t;)n++;return n},e=function(){function e(e,t){this.linejunk=e,this.charjunk=t}return e.prototype.compare=function(e,t){var n,r,a,o,s,u,c,l,f,d,h,p,m,g,v;for(s=new i(this.linejunk,e,t),l=[],g=s.getOpcodes(),d=0,p=g.length;d<p;d++){switch(v=g[d],f=v[0],r=v[1],n=v[2],o=v[3],a=v[4],f){case"replace":u=this._fancyReplace(e,r,n,t,o,a);break;case"delete":u=this._dump("-",e,r,n);break;case"insert":u=this._dump("+",t,o,a);break;case"equal":u=this._dump(" ",e,r,n);break;default:throw new Error("unknow tag ("+f+")")}for(h=0,m=u.length;h<m;h++)c=u[h],l.push(c)}return l},e.prototype._dump=function(e,t,n,r){var a,i,o;for(o=[],a=i=n;n<=r?i<r:i>r;a=n<=r?++i:--i)o.push(""+e+" "+t[a]);return o},e.prototype._plainReplace=function(e,t,n,r,a,i){var o,s,u,c,l,f,d,h,p,m;for(i-a<n-t?(o=this._dump("+",r,a,i),l=this._dump("-",e,t,n)):(o=this._dump("-",e,t,n),l=this._dump("+",r,a,i)),c=[],m=[o,l],f=0,h=m.length;f<h;f++)for(s=m[f],d=0,p=s.length;d<p;d++)u=s[d],c.push(u);return c},e.prototype._fancyReplace=function(e,t,n,r,a,o){var s,u,c,l,f,d,h,p,m,g,v,y,b,_,w,A,x,M,k,T,S,E,C,O,D,j,P,z,N,W,L,R,q,Y,B,H,F,I,U,G,$,V,K,X,J,Z,Q,ee,te;for(F=[.74,.75],h=F[0],w=F[1],_=new i(this.charjunk),I=[null,null],A=I[0],x=I[1],C=[],k=D=a;a<=o?D<o:D>o;k=a<=o?++D:--D)for(g=r[k],_.setSeq2(g),M=j=t;t<=n?j<n:j>n;M=t<=n?++j:--j)u=e[M],u!==g?(_.setSeq1(u),_.realQuickRatio()>h&&_.quickRatio()>h&&_.ratio()>h&&(K=[_.ratio(),M,k],h=K[0],p=K[1],m=K[2])):null===A&&(V=[M,k],A=V[0],x=V[1]);if(h<w){if(null===A){for(X=this._plainReplace(e,t,n,r,a,o),P=0,N=X.length;P<N;P++)E=X[P],C.push(E);return C}J=[A,x,1],p=J[0],m=J[1],h=J[2]}else A=null;for(Z=this._fancyHelper(e,t,p,r,a,m),z=0,W=Z.length;z<W;z++)E=Z[z],C.push(E);if(Q=[e[p],r[m]],s=Q[0],d=Q[1],null===A){for(f=b="",_.setSeqs(s,d),ee=_.getOpcodes(),Y=0,L=ee.length;Y<L;Y++)switch(te=ee[Y],O=te[0],c=te[1],l=te[2],v=te[3],y=te[4],U=[l-c,y-v],T=U[0],S=U[1],O){case"replace":f+=Array(T+1).join("^"),b+=Array(S+1).join("^");break;case"delete":f+=Array(T+1).join("-");break;case"insert":b+=Array(S+1).join("+");break;case"equal":f+=Array(T+1).join(" "),b+=Array(S+1).join(" ");break;default:throw new Error("unknow tag ("+O+")")}for(G=this._qformat(s,d,f,b),B=0,R=G.length;B<R;B++)E=G[B],C.push(E)}else C.push(" "+s);for($=this._fancyHelper(e,p+1,n,r,m+1,o),H=0,q=$.length;H<q;H++)E=$[H],C.push(E);return C},e.prototype._fancyHelper=function(e,t,n,r,a,i){var o;return o=[],t<n?o=a<i?this._fancyReplace(e,t,n,r,a,i):this._dump("-",e,t,n):a<i&&(o=this._dump("+",r,a,i)),o},e.prototype._qformat=function(e,t,n,r){var a,i;return i=[],a=l(v(e,"\t"),v(t,"\t")),a=l(a,v(n.slice(0,a)," ")),a=l(a,v(r.slice(0,a)," ")),n=n.slice(a).replace(/\s+$/,""),r=r.slice(a).replace(/\s+$/,""),i.push("- "+e),n.length&&i.push("? "+Array(a+1).join("\t")+n+"\n"),i.push("+ "+t),r.length&&i.push("? "+Array(a+1).join("\t")+r+"\n"),i},e}(),a=function(e,t){return null==t&&(t=/^\s*#?\s*$/),t.test(e)},r=function(e,t){return null==t&&(t=" \t"),w.call(t,e)>=0},b=function(e,t){var n,r;return n=e+1,r=t-e,1===r?""+n:(r||n--,""+n+","+r)},h=function(e,t,n){var r,a,o,s,u,c,l,f,d,h,p,m,g,v,y,_,w,A,x,M,k,T,S,E,C,O,D,j,P,z,N,W,L,R,q,Y,B,H;for(W=null!=n?n:{},u=W.fromfile,M=W.tofile,c=W.fromfiledate,k=W.tofiledate,_=W.n,y=W.lineterm,null==u&&(u=""),null==M&&(M=""),null==c&&(c=""),null==k&&(k=""),null==_&&(_=3),null==y&&(y="\n"),v=[],w=!1,L=new i(null,e,t).getGroupedOpcodes(),T=0,O=L.length;T<O;T++)for(l=L[T],w||(w=!0,s=c?"\t"+c:"",x=k?"\t"+k:"",v.push("--- "+u+s+y),v.push("+++ "+M+x+y)),R=[l[0],l[l.length-1]],o=R[0],m=R[1],r=b(o[1],m[2]),a=b(o[3],m[4]),v.push("@@ -"+r+" +"+a+" @@"+y),S=0,D=l.length;S<D;S++)if(q=l[S],A=q[0],f=q[1],d=q[2],h=q[3],p=q[4],"equal"!==A){if("replace"===A||"delete"===A)for(B=e.slice(f,d),C=0,P=B.length;C<P;C++)g=B[C],v.push("-"+g);if("replace"===A||"insert"===A)for(H=t.slice(h,p),N=0,z=H.length;N<z;N++)g=H[N],v.push("+"+g)}else for(Y=e.slice(f,d),E=0,j=Y.length;E<j;E++)g=Y[E],v.push(" "+g);return v},y=function(e,t){var n,r;return n=e+1,r=t-e,r||n--,r<=1?""+n:""+n+","+(n+r-1)},o=function(e,t,n){var r,a,o,s,u,c,l,f,d,h,m,g,v,b,_,w,A,x,M,k,T,S,E,C,O,D,j,P,z,N,W,L,R,q,Y,B,H,F,I,U;for(q=null!=n?n:{},u=q.fromfile,T=q.tofile,c=q.fromfiledate,S=q.tofiledate,w=q.n,_=q.lineterm,null==u&&(u=""),null==T&&(T=""),null==c&&(c=""),null==S&&(S=""),null==w&&(w=3),null==_&&(_="\n"),A={insert:"+ ",delete:"- ",replace:"! ",equal:" "},x=!1,b=[],Y=new i(null,e,t).getGroupedOpcodes(),C=0,P=Y.length;C<P;C++)if(l=Y[C],!x){if(x=!0,s=c?"\t"+c:"",k=S?"\t"+S:"",b.push("*** "+u+s+_),b.push("--- "+T+k+_),B=[l[0],l[l.length-1]],o=B[0],g=B[1],b.push("***************"+_),r=y(o[1],g[2]),b.push("*** "+r+" ****"+_),p(function(){var e,t,n,r;for(r=[],e=0,t=l.length;e<t;e++)n=l[e],M=n[0],E=n[1],E=n[2],E=n[3],E=n[4],r.push("replace"===M||"delete"===M);return r}()))for(O=0,z=l.length;O<z;O++)if(H=l[O],M=H[0],f=H[1],d=H[2],E=H[3],E=H[4],"insert"!==M)for(F=e.slice(f,d),D=0,N=F.length;D<N;D++)v=F[D],b.push(A[M]+v);if(a=y(o[3],g[4]),b.push("--- "+a+" ----"+_),p(function(){var e,t,n,r;for(r=[],e=0,t=l.length;e<t;e++)n=l[e],M=n[0],E=n[1],E=n[2],E=n[3],E=n[4],r.push("replace"===M||"insert"===M);return r}()))for(j=0,W=l.length;j<W;j++)if(I=l[j],M=I[0],E=I[1],E=I[2],h=I[3],m=I[4],"delete"!==M)for(U=t.slice(h,m),R=0,L=U.length;R<L;R++)v=U[R],b.push(A[M]+v)}return b},f=function(t,n,a,i){return null==i&&(i=r),new e(a,i).compare(t,n)},d=function(e,t){var n,r,a,i,o,s,u;if(i={1:"- ",2:"+ "}[t],!i)throw new Error("unknow delta choice (must be 1 or 2): "+t);for(a=[" ",i],r=[],o=0,s=e.length;o<s;o++)n=e[o],u=n.slice(0,2),w.call(a,u)>=0&&r.push(n.slice(2));return r},t._arrayCmp=m,t.SequenceMatcher=i,t.getCloseMatches=u,t._countLeading=v,t.Differ=e,t.IS_LINE_JUNK=a,t.IS_CHARACTER_JUNK=r,t._formatRangeUnified=b,t.unifiedDiff=h,t._formatRangeContext=y,t.contextDiff=o,t.ndiff=f,t.restore=d}).call(this)}),Qm=Zm,eg=/\d/,tg=["print","archive","comment","discuss","e-mail","email","share","reply","all","login","sign","single","adx","entry-unrelated"],ng=new RegExp(tg.join("|"),"i"),rg=new RegExp("(next|weiter|continue|>([^|]|$)|»([^|]|$))","i"),ag=new RegExp("(first|last|end)","i"),ig=new RegExp("(prev|earl|old|new|<|«)","i"),og={extract:function(e){var t=e.$,n=e.url,r=e.parsedUrl,a=e.previousUrls,i=void 0===a?[]:a;r=r||Bs.parse(n);var o=S(n),s=C(n,r),u=t("a[href]").toArray(),c=zt({links:u,articleUrl:o,baseUrl:s,parsedUrl:r,$:t,previousUrls:i});if(!c)return null;var l=Ku(c).reduce(function(e,t){var n=c[t];return n.score>e.score?n:e},{score:-100});return l.score>=50?l.href:null}},sg=["og:url"],ug={extract:function(e){var t=e.$,n=e.url,r=e.metaCache,a=t("link[rel=canonical]");if(0!==a.length){var i=a.attr("href");if(i)return Wt(i)}var o=Le(t,sg,r);return Wt(o?o:n)}},cg={ellipse:"…",chars:[" ","-"],max:140,truncate:!0},lg=function(e,t,n){if("string"!=typeof e||0===e.length)return"";if(0===t)return"";n=n||{};for(var r in cg)null!==n[r]&&"undefined"!=typeof n[r]||(n[r]=cg[r]);return n.max=t||n.max,Lt(e,n.max,n.ellipse,n.chars,n.truncate)},fg=["og:description","twitter:description"],dg={extract:function(e){var t=e.$,n=e.content,r=e.metaCache,a=Le(t,fg,r);if(a)return Rt(Ye(a,t));var i=200,o=n.slice(0,5*i);return Rt(t(o).text(),t,i)}},hg={extract:function(e){var t=e.content,n=Us.load(t),r=n("div").first(),a=M(r.text());return a.split(/\s/).length}},pg={domain:"*",title:Em.extract,date_published:qm.extract,author:zm.extract,content:xm.extract.bind(xm),lead_image_url:Km.extract,dek:Ym.extract,next_page_url:og.extract,url_and_domain:ug.extract,excerpt:dg.extract,word_count:hg.extract,direction:function(e){var t=e.title;return Gh.getDirection(t)},extract:function(e){var t=e.html,n=e.$;if(t&&!n){var r=Us.load(t);e.$=r}var a=this.title(e),i=this.date_published(e),o=this.author(e),s=this.content(da({},e,{title:a})),u=this.lead_image_url(da({},e,{content:s})),c=this.dek(da({},e,{content:s})),l=this.next_page_url(e),f=this.excerpt(da({},e,{content:s})),d=this.word_count(da({},e,{content:s})),h=this.direction({title:a}),p=this.url_and_domain(e),m=p.url,g=p.domain;return{title:a,author:o,date_published:i||null,dek:c,lead_image_url:u,content:s,next_page_url:l,url:m,domain:g,excerpt:f,word_count:d,direction:h}}},mg={'meta[name="al:ios:app_name"][value="Medium"]':Md,'meta[name="generator"][value="blogger"]':sd},gg={extract:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:pg,t=arguments[1],n=t,r=n.contentOnly,a=n.extractedTitle;if("*"===e.domain)return e.extract(t);if(t=da({},t,{extractor:e}),r){var i=Ut(da({},t,{type:"content",extractHtml:!0,title:a}));return{content:i}}var o=Ut(da({},t,{type:"title"})),s=Ut(da({},t,{type:"date_published"})),u=Ut(da({},t,{type:"author"})),c=Ut(da({},t,{type:"next_page_url"})),l=Ut(da({},t,{type:"content",extractHtml:!0,title:o})),f=Ut(da({},t,{type:"lead_image_url",content:l})),d=Ut(da({},t,{type:"excerpt",content:l})),h=Ut(da({},t,{type:"dek",content:l,excerpt:d})),p=Ut(da({},t,{type:"word_count",content:l})),m=Ut(da({},t,{type:"direction",title:o})),g=Ut(da({},t,{type:"url_and_domain"}))||{url:null,domain:null},v=g.url,y=g.domain;return{title:o,content:l,author:u,date_published:s,lead_image_url:f,dek:h,next_page_url:c,url:v,domain:y,excerpt:d,word_count:p,direction:m}}},vg=function(){function e(e){return t.apply(this,arguments)}var t=ps(kn.mark(function e(t){var n,r,a,i,o,s=t.next_page_url,u=t.html,c=t.$,l=t.metaCache,f=t.result,d=t.Extractor,h=t.title,p=t.url;return kn.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:n=1,r=[S(p)];case 2:if(!(s&&n<26)){e.next=15;break}return n+=1,e.next=6,Xf.create(s);case 6:c=e.sent,u=c.html(),a={url:s,html:u,$:c,metaCache:l,contentOnly:!0,extractedTitle:h,previousUrls:r},i=gg.extract(d,a),r.push(s),f=da({},f,{content:f.content+"<hr><h4>Page "+n+"</h4>"+i.content}),s=i.next_page_url,e.next=2;break;case 15:return o=pg.word_count({content:"<div>"+f.content+"</div>"}),e.abrupt("return",da({},f,{total_pages:n,pages_rendered:n,word_count:o}));case 17:case"end":return e.stop()}},e,this)}));return e}(),yg={parse:function(e,t){var n=this,r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return ps(kn.mark(function a(){var i,o,s,u,c,l,f,d,h,p,m,g;return kn.wrap(function(n){for(;;)switch(n.prev=n.next){case 0:if(i=r.fetchAllPages,o=void 0===i||i,s=r.fallback,u=void 0===s||s,!e&&Us.browser&&(e=window.location.href,t=t||Us.html()),c=Bs.parse(e),G(c)){n.next=5;break}return n.abrupt("return",Ou.badUrl);case 5:return n.next=7,Xf.create(e,t,c);case 7:if(l=n.sent,f=Yt(e,c,l),!l.failed){n.next=11;break}return n.abrupt("return",l);case 11:if(t||(t=l.html()),d=l("meta").map(function(e,t){return l(t).attr("name")}).toArray(),h=gg.extract(f,{url:e,html:t,$:l,metaCache:d,parsedUrl:c,fallback:u}),p=h,m=p.title,g=p.next_page_url,!o||!g){n.next=21;break}return n.next=18,vg({Extractor:f,next_page_url:g,html:t,$:l,metaCache:d,result:h,title:m,url:e});case 18:h=n.sent,n.next=22;break;case 21:h=da({},h,{total_pages:1,rendered_pages:1});case 22:return n.abrupt("return",h);case 23:case"end":return n.stop()}},a,n)}))()},browser:!!Us.browser,fetchResource:function(e){var t=this;return ps(kn.mark(function n(){return kn.wrap(function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,Xf.create(e);case 2:return t.abrupt("return",t.sent);case 3:case"end":return t.stop()}},n,t)}))()}};return yg}(); diff --git a/package.json b/package.json index 5e52d44de..bb472583d 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "mercury-parser", - "version": "1.0.12", + "version": "1.0.13", "description": "", "repository": "github:postlight/mercury-parser", "main": "./dist/mercury.js", diff --git a/scripts/check-build.test.js b/scripts/check-build.test.js index 81df81014..6355b92a1 100644 --- a/scripts/check-build.test.js +++ b/scripts/check-build.test.js @@ -8,8 +8,8 @@ let urls = [ title: 'Iraqi troops storm town south of Mosul', }, { - url: 'https://www.washingtonpost.com/news/post-nation/wp/2016/11/05/a-vile-and-disgusting-act-officer-accused-of-giving-fecal-sandwich-to-homeless-man-is-fired/', - title: '‘A vile and disgusting act’: Officer accused of giving fecal sandwich to homeless man is fired', + url: 'https://www.cnn.com/2018/10/12/us/before-after-aerial-images-mexico-beach-devastation-trnd/index.html', + title: 'Before and after images show there\'s nothing left in some parts of Mexico Beach', }, ];