diff options
author | adeshkp <adeshkp@users.noreply.github.com> | 2019-05-25 11:19:38 -0400 |
---|---|---|
committer | adeshkp <adeshkp@users.noreply.github.com> | 2019-05-25 11:19:38 -0400 |
commit | 08412ddaa6f43fc3abd438f215ca0756be4c2ffa (patch) | |
tree | 83b3e4aedf07b77f3617087913abfc2a42f946c5 | |
parent | 6010c9e92c627bb67d4253916b5b21fefc21d2d9 (diff) | |
download | basilisk-08412ddaa6f43fc3abd438f215ca0756be4c2ffa.tar.gz |
Issue MoonchildProductions/UXP#246 - Revert "Revert "Remove unwanted newtab page code""
Page thumbnails hiccups seem to have resolved, so it can be landed again.
This reverts commit 51792b31a36b9539fdd1b4b85abe486c1652b6c4.
Conflicts:
application/basilisk/modules/DirectoryLinksProvider.jsm
-rw-r--r-- | basilisk/base/content/newtab/alternativeDefaultSites.json | 50 | ||||
-rw-r--r-- | basilisk/base/content/newtab/grid.js | 8 | ||||
-rw-r--r-- | basilisk/base/content/newtab/newTab.css | 112 | ||||
-rw-r--r-- | basilisk/base/content/newtab/newTab.inadjacent.json | 3209 | ||||
-rw-r--r-- | basilisk/base/content/newtab/newTab.js | 1 | ||||
-rw-r--r-- | basilisk/base/content/newtab/newTab.xhtml | 1 | ||||
-rw-r--r-- | basilisk/base/content/newtab/page.js | 24 | ||||
-rw-r--r-- | basilisk/base/content/newtab/sites.js | 73 | ||||
-rw-r--r-- | basilisk/base/jar.mn | 2 | ||||
-rw-r--r-- | basilisk/components/nsBrowserGlue.js | 3 | ||||
-rw-r--r-- | basilisk/modules/DirectoryLinksProvider.jsm | 1251 | ||||
-rw-r--r-- | basilisk/modules/moz.build | 1 |
12 files changed, 7 insertions, 4728 deletions
diff --git a/basilisk/base/content/newtab/alternativeDefaultSites.json b/basilisk/base/content/newtab/alternativeDefaultSites.json deleted file mode 100644 index 018d3ed..0000000 --- a/basilisk/base/content/newtab/alternativeDefaultSites.json +++ /dev/null @@ -1,50 +0,0 @@ -{ - "directory": [ - { - "bgColor": "#ffffff", - "directoryId": 10000000, - "imageURI": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAIX0lEQVR4nO1afXDbZh1+sxbWsbGvsrLbuBt36766sR3sOEgiuU4kx2vTpFGKm0SKsyyOlI8laUZTulLojQEHx4CyAaNnt72yrivklo1YSpxcW7YVbKXHgCvduCvroDt6o6OtLSWN1MRWX/5I4imyJMu2bPNHnrvfSZbf6P09z+/jfV+3ACxhCUsoAEouNWGlMRLri5GuZwUSe1Ug8bcFEjsjUPgHAoX/UyCxkyKJjQoU/iOhCd8WJSvW/8vpXFFsx7PGeaJsVaytul+g8KMiic+IFA7NTNB/rggk/jeRcu26RGFris3JEqIUtkFsdo2KFK6kI52pCSR2UmirZgY9YFmxeaYg1uyqFSj8lMXI5mofRb3rOwEAJcXmDS72ex8QvO43skjv3MeT2DtRX2150cgLzVUDIonF8xBh64KQ2FWRwncPejyFK4tYq/Nmoa1mPE/pnZ1ILe4TFxpdd+SdvOhxrhabXaeLTVjfsHfzSj5K4V8QKfyjnGs3P2UiCt/v/1LeyAsNlXebkbeRSOZ/Q+JCrBH/Yt7IX+qlbhS96dM+Y+dJLC6S+BWRwmazFizf5AEAQPRtHLEhukqMwo8KTfg2oamy8t+e0uvUczwDwDWxhopHBBLvElrc+wUSm/r/IN9a3ZtrbYqUe9eHTc7PZDLvoAcsi/lq2wQSO1M88k93r7ayjzdI76sxEv/5hdryT+foRknM696q9qMg5AEAQHx83WhWtU5i56PtG1E7fYkO+B4SKNd7AoWLBSEv9G3Asol8zOs+ddFTeWc+fDrXgq2MNmEP5+PdKZB/XR4RvRnWe8tjJ8+1ECsL4mA+EQ+vcCg8gHHuPjjZvc5S6guU6/3/POG5rdi+24IEv+KwEgFQ4QFU/rAKTu90pal5fCY60PlQsf22BefHwfUKD2YVfl6ACIAKfx2UX0QNBYj6arqL7bdtSIQBnYy+2iIAzg49Cid9bm3qv11sn21FggeHUwSILGQCgIljd8Kpreq+4Koqts+2QuGBmBL9FLsFSj+sgAKFnyq2v7ZCDoO7dKOvvc7fS3vcW4rts61I8OBxXdI6/UCJADgVvmGVHfMSAelgfUA6VBeQDqmv2nuzZ3rf6Y2r3SM7DB1RwmCnOsLaiGuenbWD/JwAcqI+IEPCL8H6gAwX7omADIn5z/Wqe0Iz1sgI3edSv6EjcR78OEk4jQiJCNhnlwD1ATlBmDqdCUHzcYRf3mXoSCIMXjdK95SeEAbfslUAk4iaEc1EsLnx0vNmAhw3q3mNAFvtFCBd2i8i4bdWAgYCDBkLwIMJw8antTDos12ARSTNM8JK5Amd8URAPmosQAS8Zdr41N/lIQOS0Z2/pkZe0iWoS35+rIY8rPfLvzcWgAdDljMgAr5tlwCEWgArjUxnnJXSmX8eMnQkPrH8OasCJMJgfyEE0KZxMrJ+i2WgyZq6gHTQ0BGFv+abujs//ab4gV0CqEvAar1n0gQXizj9PUNHEmHgTSFt1At4O3eCH+8D0tW2YUmoMkKvfyQzwC/vMHREegN8Tpe4zjIY55fD14+X9tgiwC8mV2ZrHS/LGOGXRd3y8aeKVee/3GrqjBIGMcMsmL/GJu6AW4+1QZRl/mKHADmipD4gz1jJHCIgw9oXJ+8zfVsi/ImXU7bDquvfI2ugZ7wHoiwDUY6BTrbTWRie+ti0d7rGrHTU5UD45StpX5iILPMZrQTD4Q0QG+2GKMckzcF28AXgaYiv7ZNesdokCb90PO0LP2TBpxQezKpFkPmb4Q/ebFlEHOWYZBY8FtriKwDXFDAHhLvr/bJi9TzQtPeycQNUI3HihkML5M9NfB4+caRTl/jHRsvtb333gTzzTUHDPonNZFkkfjVl7Zfr+MRtiMID+McICqtDvfrE2cWfHRxz2j321K155pxE84HLLWb7BK0odX75TEYTBI43hB1ch0HE554h7GJhKrkn/4wPMjfliXMSO4alcsIvx/UanZE17pcGMppkU2iL2zDt9QSZtwqu66/Okdbb88Qd7PydVFYfkGVthLWHHk1JyOteuHRjxpNh3JNjRtE3EgDlGIiwzLlqrq/MbvKtLwkewi/PalPc8PyQPDdIP8lqQvdw92qEZWbNyBqJgnD0VTTI7H74Je/1uRL/8mDr7VWjfYeJkecgdfC/6c8JavPL0+6fitn3JtdIzxbdqLPqiNMmwtAxR7BzZ+mgL2MnHGzHPQhL/wzlmCsLc64PbYPU4Xd1zwN6WdCwT/p61uQXsH6sL5TS/dOUgY4QCZRlxsuD9EDZsM/x4KDnk5ppSsqGfHehw3QjytHfQVj6HaP+U8F1wZbhMf1Dkerzpr3Sn4Ad/5/Yc2T7TQ6OOW2YBWZimAsVRzlaRoL0DMLRV/WW19SVh05+v5nbAxsPCPpZ4Jclwj95b87kF+BgO+5Bg8yFFHKZZkO68XqimoyvGd0FqUNnU/pA1yvTdbaRXwDCtj2CsszFjFLfSjZoRbEiqEqoqtE+6H2VT5LfvPfydtvJJ0V4jb537QhzxjLRdMSsimIhq5q538DNgSnbfqs0FoHrusUd6j2ScdTNyGZTNovfHa8Z6/fmnbwaTq5r+1wj0ziZrjlmvIKYP3ew9Hvk+NOPFpT8AjxHd6ypGOl607Z+YDUL5s4iChpkdq8b7b22KOTVQIPtGxet3bmQtVA6eKhnyBP6hvnPW8UAwvpq1nIdoeS6bpWY0fK3aMfJTCMc/csqtuf+YvNMi68Mt38WDTJPoSx9DGHpmaxLI8hcqBzpCiDB9ibnM87lxeaVLUrKg+1fRVimby3LPItw9G9Rlj6Bssw/EI4+i3DM+0iQPomy9JiD69hdztI7SoPtTWWvddry7w5LWIIx/gdCuvcjoZqlLQAAAABJRU5ErkJggg==", - "type": "affiliate", - "title": "Google", - "url": "https://www.google.com/" - }, - { - "bgColor": "#E62117", - "directoryId": 10000001, - "imageURI": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAACd0lEQVR4nO3av0tVYRzH8WOIBEVDUUIGCa32FwQ5OrS42NKeRUOTdGmoqUGiLVBqa5UG+7WUREGiEqhTDkVJEA2iYZBkxKvhHumo96o3uM9z0ucNZ7zn834+XO59znm+WZZIJBKJRCKRSGwCx3AWfbiIaxjEPYzgOd7gLWbwIb8WsFjjWrU9q3U+u1C4/0yeOZ47jOROg6jkrn25e3uji27NbzC9A9n/hWnVNbVut/hOTMZ1bSqT6Ky3+A58jOsXhE/o2Lj4FryILBaSF2gpFtAT2ygCPcUCHse2icDTtcW3YSW2TQRW0JahK7ZJRLoy9Ma2iEhvhoHYFhEZyDAU2yIiwxkeBgj6FSDjXxjN8CpA0A1cxucAWY0wkeFdgKBK/pe7H1fxNUDmTpjLMB8gqLJh631A9dF6IUD2Vsxn+BYgaF0BhSIO4WYgh1osZVgOEFSzgEIRh3EL3wO4FFnOAgVtWUChiKO4gx+BvJSqgEIRx3EXP5stVsoCCkWcxH1N3EeUuoBCEafwshlipS8AJzTxW1DaAnAEtzX5B7F0BeAgrmMphFhpClB9M3UFXwI5oQQFYB8u4H0gl3VE3QninOoxVyyWozwL4AxeB8jdjqWgT4M4jUcB8nbKfKj3AUN4gN8BshphLtQbobIyEeqdYFkZzTAc2yIiw+lcQDoZSmeDe/t0ON+gPIltE4Fnxa3pnp8QacFYbKOAjCnOCOUldKhOUO12Nk+JFUroxFRkwWYypd6cYKGEVvTbfZOil2w3KVqjjHZ047xqKRWbZ4XHVed2Z/2d5a0167vYgHC9z6/df9bWs8L9uXO3RmeFE4lEIpFIJPYKfwAcall+TY3q/wAAAABJRU5ErkJggg==", - "type": "affiliate", - "title": "YouTube", - "url": "https://www.youtube.com/" - }, - { - "directoryId": 10000002, - "imageURI": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAACT0lEQVR4nO3bzWsTQRgG8PlPHMVLqRVMoQiFehJyUBAFtRCFHspExaaSoFg8CMGPSg+R3kQhh3osIbOlMVrbGKtrsbYESTbB0gqNVGu1WCkWutnXg+ihQjqxi7Oz8w481533+V32iyGEEEIZ76Rho0SZ4ewOG+D3UMatXSx9nPwqb5ySPZC0dPMzhDJelD6IrDCjQijjtvRBJIWGeY3IHkJ2EED2ALKDALIHkB2lAJoujkIwnoNQwoQL96aha3AKQgkTTtyZhKM383D4+gQEoll/AQRiWbg1XILZ+VWwaw6IrE3bgZbejNoAe8+PwEC6DOsbm0Klt679lxQGCESzMD335Z+KKw+wrzcDpcVvOyqvNMCwubjj8soCnBx44Up5ZQGeFZf1BWi7/BhqjthtzpcAseRsQwVrjgNzS9/hZWUFJq3Pf6U5MqoWQHJ8Qbh8aqoKB688cWVfzwBMvP0kVN6srMCec+7t6xmAmfmvQgCRBzOu7usZgHJ1TQjgyI283gCHrj3VG6C9bwwBEAABEEAtgAPRR9A3VKibpdUfQgD9KWvba529+8pbAMF4TqicW+th/r3eAP0pS2+Anvtv9AY4dvu53gCtMfGfI74DWN+wG5rNdwDl6preAGOFj3oDJMcXvAfQHMlAKGHWTeWD2KPw1aFC3et0NPi9wDPvAq/fif0LDMZzru6LALKLIwACIAACIAACIAACIAACIAACIAACIAACIMD/BvDKwUkZAJRx2zNHZyUBFAntTp+WXV4iQCf5c3yecUsXAMq49bv8Txsl6ZCTabOAAAAAAElFTkSuQmCC", - "title": "Facebook", - "type": "affiliate", - "url": "https://www.facebook.com/" - }, - { - "bgColor": "#ffffff", - "directoryId": 10000003, - "imageURI": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAAA/CAYAAABQHc7KAAAEyUlEQVRoge2abYhVRRjHf7veVqSFhIQwa7E3ojXNpSiNgl0S+tAHKUjohbQohUgqKKwMSXpbsATdqOgFU4zKpAzMioploxI/WFBZmhRlL/S2lbpsudvd24dzjve5c58558ycey9B84MB95x5/vM/d+bMzDNHCAQCgUAgEAgE/rf0AOd6lJmKVrdDfI8SfxawIKNcEscfa8TOzBFrlj6Aimd5XnmAbx01TD5xiL3IiH3Y8zm4DXgaGALGMip/DDwHDACXKQ9wA/AiMJyi8T3wAnCvEr841t9tiR2JY/uB443YC4BHgA3ApyntTxD90FuAlaaBU4EfLIHvKIZtnAT8ZtE5O6fGCiNuFJiTM7YNWKe0PQScmRV8ncX4+zkbT1hq0bkyZ/wyI+5ux/bPM+I/ACbnCSyhv8tloMvBQAnYr+h8mDP+PRHzGXCMQ9sA14j4ceAMl+A70HtvjaMJ22jqy4i70Kh/sWO7AO+K+Jdcg6cCh6k3/gfQ6aBTAr5UdN7OiHtL1H3NxXhMN9Fkl2jM89BgPXrv3eKoc71Fx2ZqvqhTJv+kKRkQGjs94gE4PTZgGt9DNMvmpQR8pehst9R/Q9TZ5OG7EzgkNK720DjKNvTeu9RRZ4miMUH9bnCeuH8EOMXD881C40egw0PjKL3oP8Cbjjq2FWGrUW+HuDfg6XmP0NA2W060GYKy97odtbQVoQzMiu+fL66PACd4+O0VGqPANA+NOm5CHwVPOeqUgH2Kzub4/uvi2gOeXrcU8GdlCtG7ZBr/C5juqHWtojMOXCX+HgaO8/B5YqyV6GjZpjf3oI+C+x11JgF7FZ1/xL/v9PS4WmgMempYsW2MfsdtYwTRsqT9mBXgANGIc6WD2lG60EMjk0fRTS931GkHPrdo3ejpbZHQ2B+30XC6iNZm0/Q3RBOcC7Yc4WRPb0NC43ZPjVxsRDe+yFHHHLJJWevhabaIP0z0ujaNWdQmGUn5yEPrPkVnBPe1+0kRv97DhzPb0UdBr6OObZv9kIOGnJzLRPlL0+lFN+6yPe5BH0kV4E/yD+PlIm6bQ/uF2Um98Qlgbs74V5V4WVbl0GgDvsB/BBbiCnTj2lG5yVyqvX+QaOSYOsNk7y8WiPo+c1Ah2tFPesbJTmFfEfX7qU2BZVmRoSPnkMU+D1EUW5L0WErMHKq9P0o149NeqZ+w7wq7qO77f02p11Qmo6/laWnoVlFvnbh+uaJTAW616Dwo6rjmIw3lLnTjminZ+38DM8Q92yv1HfUnOh3AL/H9I7hnpA1lKrXnb0nRkqSXxf0nFC3bK7XMqCdT6o2NeIiirEE3Lvfks6kesI6hf1m2nTt8TW2uIeeLhub8vsxAT5IOUB2+8qTm2RStlYqOnOV7xLXBRj5EUWxJ0hKic/2k98dJ367azh32Es0Tz4hrTcn5fZE9I8s+ajc6m20CgrUWrdVEK0yFJub8RRhEN56UMjk+TVO7xtuK6yFMS1hIuuk82+SETSk6h3A/hmsJ7egfPypEh555ej/hHOzZYktyfl9keiqLzzc+LUlqWc7vSyfRJ3Rpegw4zUOrj/ofoKU5vy/91Jp+vIDWLkPL/J9h/0mmAT9TXa58vvIkzKe6ydpQ3FogEAgEAoFAIBCI+Rf5q90lTPZHIwAAAABJRU5ErkJggg==", - "title": "Wikipedia", - "type": "affiliate", - "url": "https://www.wikipedia.org/" - }, - { - "bgColor": "#400090", - "directoryId": 10000004, - "imageURI": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAD3ElEQVR4nO3bS4xecxjH8WmLBVVEx63JBIkEISkhJqURpAsZQioWqpeNSxraYlKpSwiDIRY0aSakqgS9qHRBIhKxYdFFFxWXIGkilYZEUCKj4zLzsfi/LN55zpiZc/lr+/6Ss3nfc57ze77n9r88/y7swxaswgLM7jpMhTlYiNWtnPd1Ga9RfIVtuB+L0J3b/FSFeejDQ9iBvRhrTzYCUKTv8RFewlrcgAtxQsYk5+Ii3IQHsBm78ONkk5oKgIn0Mz7BO3gBA7gHS3EtLsXZre1UnITj2pI5vvV7D85BL67DCvRjEJvwHj7HcBXGqwJwyKoDILeB3OoAyG0gt8oAGMYj0qdnJ17DY3i2vK1CPYmn8Cq2YwgP4rfpBix7BwwE3+aZ2F0ybqQPMSM439NlgpYFMILzAlO9glZXCf2F+cF5LsafZQJX8Q4oujKbK4j9j4aC+EdhT9nAVb0Ebw8MduNABbF/wMlB/LUVxK4MwE84JTC5uoLYK4O48/BrBbEr/Qy+XnCbfloi5h7MCuJurcSxagGMYWFg9qr/SbxQVTeEiq7Ym9OI9UYQ52ipJ1iZ6mgJ3h0Y7zG17usvOC2I01+12ToAHBCMIGHdFGKsCo4/QwJTqerqC2wMEjgGX0zi2KLH6JU6jNYFYBSXBElc/R/HjaE3OO4y1bYs/1WdvcFd4hbilgmOie6cGa1Ytaju7vDSIKHTxc9yUYtvWZ0G6wawH8cGSa0J9r0t2G92K0ZtamJA5PEgsfaOTNHjMlC3uSYADKMnSG6B9GIr6uqehYN1m2tqSGxre4KtJDdhfcF/O5ow1hSAMVweJNmNOcHvlbb3J1KTg6K7MTO62m3Jz1LBQMdk1fSo8IpJALizSUNNA/jWBNPvOFGahG1MOeYFnpgAwHNNm8kB4CDODJI/F380bSbXzNAzAYD1OYzkAjAYABjKYaQDIMdJxQDqnFMsVC4A6wIAgzmMdADkOKkYwKM5jOQCcFcAYCqjxpUpF4Bovu+IB3BfDiO5AIzrFWJlDiO5ACzpABgP4I4cRnIBWBwAWJLDSC4AfR0A4wHcksNILgCLAgB9OYzkAnDFkQ5gDZbj3ta2XCp5bVydYuncBnKrAyC3gdzqAMhtILfqBDCCb6SZ3velatGXsUFa5NC+vdjatrf2/QAfSyUyv9dlsgyAEXyGt/G8VBl+PS7A3PaGTllJCy7n40Zp8GQD3sWXSgCaDIBRqcBxGx7GYmll57hixlySaojPx83SuqW3pLXC0wKwX7oF+3GloILjUJE03X6NtAh8J76LAOzFRtwqKGY63CStX14mLen5+m9Vgqdbrd+9cgAAAABJRU5ErkJggg==", - "title": "Yahoo!", - "type": "affiliate", - "url": "https://www.yahoo.com/" - }, - { - "directoryId": 10000005, - "imageURI": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAJdklEQVR4nO1ba1QTZwL9iCY8hCDxDUpYOIUDBOVZAlJ5NQXRFlEQ8YGiRaqESlhxeRQ3FAWURRC6FYglqBHTEaI8Eg+CRMRatfKwLNL6oqer1h57XEWYbwJK9sdKixiSmRCCbrnn3D8w351770wy3zd8ADCJSUxiPMHhcPS3bdv2/tq1a9MWL16MODs7t5iamt4zMjLq0dfX76VSqU8sLCzueHt7S+3t7QtjYmLWJyYmzp1o32NGSUmJd0BAQLmRkVEPAEBOhCQS6bm3t7c0MjIyHACgMyEB1AGCILTY2NgUOzu7fwGCoUfj/Pnz/x0XF/fXgoICXW3nIYTs7Owlpqam94CGgo+ktbX1j4mJiY7azIQbMTExu3V0dF6AcQo/RF1dXYggSIj2kuFAfHx8Lhjn4ODVElCxWOygpXjKkZWVxQZaDD9EOp3eXV9fb6yVkKOho6Njgb6+fp8ig9pgfHx8gjZyjgYdX1/fhtHMqSKJRHpOJpNl6o4HAMidnJxatJJUEWpraz3xmBxOExOT30JDQ/+elpZmD14+26uqqubExcVFzJs3T53H5uCJEydMtZN4BKKiovKJmA0KChLu3bt3zmh6Bw4c0F+3bl0BEU0AgLygoCByXAKqgq2tbSdek0FBQTV4dZlM5kW8ugAAOZPJ/IeGIuHH9evXp+no6DzHa7K+vt4Lr3ZiYuIOvLoAALmnp6dQQ7HwIzc31xqvQRsbmy5AYC6fnJzsjlcbACD38/M7p5lUBBEeHp5lbm7+E4lEUnonREdHpxPRLSwsNFWmN5Kurq5XNZNITfj4+EwtLCw0dXFxcebz+UFhYWFbmExm6qZNm/IjIiKyampqDIjonTp1ajp4mwrQNP70BfD5/D9PAcXFxQZcLteOwWCw9u/f/3FwcHC6paVlOfg/K4CUlpbmEB0dvSEkJCTLxsamwtnZuXXmzJmPAACDgEBYRXxjC8jJyfFYtmzZYWNj48dgjCGV8Y0qICsryyQiIiKVTqf/BMYxNHgTC8jPz/+ISqU+AVoKDt6kAnbs2MGeMmXKANByePAmFBAbG5utyJi2OKEFJCcnx+MxqYizZs361d/fvyw9PX0bg8FgZWRk2FZVVc1pampaQERnwgoQi8VLVK0DRpJMJstWrlx5hMPhvMflckmKdN+amSDRdbuenl5fRkaGnyrdt6KAsrKyD4iYpFKpTy9cuPAuHu23ogAmk9lIxGRCQsLneLVLS0tnEdHWegFisXgu0b8ANTc3W+LVT0pKsiSirfUCDh06tJyIQSsrq5tE9PPy8jyI6Gu9gMDAQA5Bg9VE9Hfu3BlFRJ/BYHSMPRUBsNnsfUQMksnkciL6q1ev5hHRNzQ07AHa3D9A9N19QEAA7lfiAAAdOp3eTUQfACBHEMR87MlwgmgBZmZm9wHOK1RUVLSFiPYQd+/eHaOheKrB4XCyiBrk8XguqnTb29vNDAwMeolqAwDkCxcuvKbBiMoREhLyKVGDy5cvr1Cm2d3dPd3Ly+sCUd3h3LNnT7xGg46GoqKiQHUMbt68uZjL5VJG6qWkpPjS6fS76miO4Ivm5maVd9qYUV5ePlPdtb+FhUV3cHBwkbm5efrGjRvz7O3tr2og+O90dHRslUqlUxX5lkq5U7HmJEtUsnTxwG0kEJ7b4Cer32ArlXIVHq8ULBarVpPGNcng4GDP4V6xloxArNq3oq+M9hTlUeSvsfwvPxMuoKGhwWO8N0RRKBSM6Bg6nf4jgiC0zk6Egl3czsYQhxsKQ48g4QIAAMDf3//0eIWn0WiPjh075jx79uyHeMfY2dl1IAgyFwAAZA1rjqE8ihw9rPscrXRp7xO5lckaN6X0t+dt7m/LiYanPI+iPPLgmApoa2t75+W7fY2GX7RoUcvx48fpAAAgEom88NwJLBbr65ycnGlD3gZuli15VhfC6JZy9Ubzj1W6to6pAAAAEAgEDsbGxv/RVHh3d/ezEomEOvwcqamp6crGsNns/NHeLg0HPPOhV98Pf2ynQRHG+ZcFDKpdAAAAFBcX+6qzF3gkly5dqjCIVCrVs7e3v6RozKpVqw6q8idrybCFonfrUB5FDqsWfzv0c1jh2IHyKHIotL0J+lsyY7CqJXmyO4hamw/Ly8vnhIeH51Op1KdEQtNotN9WrFjxpVAodFOmv337dkMmk1k9NI5CoWCZmZk7EQSZouj4bilfT/ZtUjhW4yNCDxv0ozyKHJaZ9Mq+S1sDAACdnQgF8o1RlEeRy5picsDA3dPv9QnMHqI88iAUudYNdJV4q1NEXFyc7q5duzZ4eXmdtLKyukUikV6ZL1Cp1CeOjo6tHh4eRVwudwWfzx/1MzoSXC53alRUVCaLxapjs9kBio55fC3bGPvm0wRUQL/3yjc9n9Yz0HX090zolTSP//2OPIjdEVkDAAB42nmYJjsbWjo0CEMcfoCNkXvR5lh3BAlT2LQqhIWFTZFIJFSJRELdunUrWR0NVXhc/zdj9MxHa6B4qRAemfHasx6rYUnQjn8uGD5G9k3CHpRHkcvqQk+8Joh1lX2AHl9wf+RkAWtYvx9eSvaWSn2Iz5w0jId1O6fJLn8Wila6iVCe/oCiZ3sff8YT7CLnE6BgJQoRhxtoqcmz3l8vK9629+xW6Sx4dnUmLJv55DXxo3MeQ8ThDKxlfS77Pm8F1pxkqegkmsItSZxu75nAhf1NMZFY47ov4MlFzejLz69ClhrB/vObc3uuZM5QpIf9fM4K5VHk/W25sSpP3tdaaArPrBSgJbovlM6m+LQeWO13HqtwO4i1Zn0CRZ5+2Hf7bB5cK8a9P6hbytfDOgqsMJErC7vyWRw87VUERR5X0VJDiGc2h/IocljL+rr3Klfpv9pg9xttsLOrVIcfDtltEQOtcP0CFZg/wGvmjysyvQ8VmP8ChTa3McThBiZya8NEbm3YSUYXFNrcRgXmv8Ay2jOUp0tMd9gdidWHFsiuH2QQCqUOuFwuSXY5ZT1a6dyullkNEiKMLky6NaYTeX2JrRXILqcslIkDk2GFYyP6lSE27oGPzHiKVTiJZdV+qf2dh50mJPRo6Jby9bBLycvRSpcCeNLpe7SEovw7Aw+/MpDBUx5XsNqAbHgp2buzc4KutDp4dHGXEVq3xh02fbwFq2Htg5WuQljlcwFWLOqAJ97p7hOYPewTmD2EQuu76Emn67DauxmtdEawap8ceH5TNFofznxQs5XQBstJTGISk1AX/wUPVWOeSpK50AAAAABJRU5ErkJggg==", - "title": "Amazon", - "type": "affiliate", - "url": "https://www.amazon.com/" - } - ] -} diff --git a/basilisk/base/content/newtab/grid.js b/basilisk/base/content/newtab/grid.js index b6f98fa..415a259 100644 --- a/basilisk/base/content/newtab/grid.js +++ b/basilisk/base/content/newtab/grid.js @@ -9,7 +9,6 @@ */ const GRID_BOTTOM_EXTRA = 7; // title's line-height extends 7px past the margin const GRID_WIDTH_EXTRA = 1; // provide 1px buffer to allow for rounding error -const SPONSORED_TAG_BUFFER = 2; // 2px buffer to clip off top of sponsored tag /** * This singleton represents the grid that contains all sites. @@ -182,18 +181,15 @@ var gGrid = { // Create the site's inner HTML code. site.innerHTML = - '<span class="newtab-sponsored">' + newTabString("sponsored.button") + '</span>' + '<a class="newtab-link">' + ' <span class="newtab-thumbnail placeholder"/>' + ' <span class="newtab-thumbnail thumbnail"/>' + - ' <span class="newtab-thumbnail enhanced-content"/>' + ' <span class="newtab-title"/>' + '</a>' + '<input type="button" title="' + newTabString("pin") + '"' + ' class="newtab-control newtab-control-pin"/>' + '<input type="button" title="' + newTabString("block") + '"' + - ' class="newtab-control newtab-control-block"/>' + - '<span class="newtab-suggested"/>'; + ' class="newtab-control newtab-control-block"/>'; this._siteFragment = document.createDocumentFragment(); this._siteFragment.appendChild(site); @@ -274,6 +270,6 @@ var gGrid = { this._node.style.maxWidth = gGridPrefs.gridColumns * this._cellWidth + GRID_WIDTH_EXTRA + "px"; this._node.style.height = this._computeHeight() + "px"; - this._node.style.maxHeight = this._computeHeight(gridRows) - SPONSORED_TAG_BUFFER + "px"; + this._node.style.maxHeight = this._computeHeight(gridRows) + "px"; } }; diff --git a/basilisk/base/content/newtab/newTab.css b/basilisk/base/content/newtab/newTab.css index 658ad2e..64b3ed7 100644 --- a/basilisk/base/content/newtab/newTab.css +++ b/basilisk/base/content/newtab/newTab.css @@ -122,10 +122,6 @@ input[type=button] { pointer-events: none; } -body:not(.compact) #topsites-heading { - display: none; -} - /* * If you change the sizes here, make sure you * change the preferences: @@ -140,12 +136,6 @@ body:not(.compact) #topsites-heading { width: 290px; } -body.compact .newtab-cell { - width: 110px; - height: 110px; - margin: 12px; -} - /* SITES */ .newtab-site { position: relative; @@ -175,16 +165,13 @@ body.compact .newtab-cell { } /* TITLES */ -.newtab-sponsored, -.newtab-title, -.newtab-suggested { +.newtab-title { overflow: hidden; position: absolute; right: 0; text-align: center; } -.newtab-sponsored, .newtab-title { bottom: 0; white-space: nowrap; @@ -192,103 +179,11 @@ body.compact .newtab-cell { vertical-align: middle; } -.newtab-suggested { - border: 1px solid transparent; - border-radius: 2px; - font-size: 12px; - height: 17px; - line-height: 17px; - margin-bottom: -1px; - padding: 2px 8px; - display: none; - margin-left: auto; - margin-right: auto; - left: 0; - top: 215px; - -moz-user-select: none; -} - -.newtab-suggested-bounds { - max-height: 34px; /* 34 / 17 = 2 lines maximum */ -} - .newtab-title { left: 0; padding: 0 4px; } -.newtab-sponsored { - background-color: #FFFFFF; - border: 1px solid #E2E2E2; - border-radius: 3px; - color: #4A4A4A; - cursor: pointer; - display: none; - font-family: Arial; - font-size: 9px; - height: 17px; - left: 0; - line-height: 6px; - padding: 4px; - right: auto; - top: -15px; -} - -.newtab-site[suggested=true] > .newtab-sponsored { - background-color: #E2E2E2; - border: none; -} - -.newtab-site > .newtab-sponsored:-moz-any(:hover, [active]) { - background-color: #4A90E2; - border: 0; - color: white; -} - -.newtab-site > .newtab-sponsored[active] { - background-color: #000000; -} - -.newtab-sponsored:dir(rtl) { - right: 0; - left: auto; -} - -.newtab-site:-moz-any([type=enhanced], [type=sponsored], [suggested]) .newtab-sponsored { - display: block; -} - -.newtab-site[suggested] .newtab-suggested { - display: table; -} - -.sponsored-explain, -.sponsored-explain a, -.suggested-explain, -.suggested-explain a { - color: white; -} - -.sponsored-explain, -.suggested-explain { - background-color: rgba(51, 51, 51, 0.95); - bottom: 30px; - line-height: 20px; - padding: 15px 10px; - position: absolute; - text-align: start; -} - -.sponsored-explain input, -.suggested-explain input { - background-size: 18px; - height: 18px; - opacity: 1; - pointer-events: none; - position: static; - width: 18px; -} - /* CONTROLS */ .newtab-control { position: absolute; @@ -333,11 +228,6 @@ body.compact .newtab-cell { margin: 40px 0 15px; } -body.compact #newtab-search-container { - margin-top: 0; - margin-bottom: 80px; -} - #newtab-search-container[page-disabled] { opacity: 0; pointer-events: none; diff --git a/basilisk/base/content/newtab/newTab.inadjacent.json b/basilisk/base/content/newtab/newTab.inadjacent.json deleted file mode 100644 index 53fb542..0000000 --- a/basilisk/base/content/newtab/newTab.inadjacent.json +++ /dev/null @@ -1,3209 +0,0 @@ -{ - "domains": [ - "rp5slFCxq/e7hYhXJCd0vQ==", - "2rEimAJDNX5g8HPZehOrGg==", - "nvLEpj6ZZF3LWH3wUB6lKg==", - "9Cqd4Lm3VvXuJxz79Bbqyg==", - "vNRy4LR+7TOKTixqsr5ybw==", - "N4zSgsZCo6Z4XRwZ4fu8WQ==", - "jsDtRfVbMsFg3KkEl2UiZQ==", - "TckkKpiq0a6J6NTw7uOZqw==", - "9Or7IAYuuIgZA370w9rNIg==", - "ul8WvOjCkxTz9LjT4RqTHg==", - "ZGJrbwb5878Nsqm0z+A7nQ==", - "5iT64HTeeG5SIFXG7A9o3w==", - "YSeSEghPe1kV6g8ghFcNAA==", - "0jIUl1NDmJZQkDY12VDeIQ==", - "aos6UyDyIw0R1nTK5wTawA==", - "G1xxubsq65ugK06UT2DO5A==", - "lbhavoDrDPP/8m0onwo63w==", - "ObcLsjW0SkdvY0nkZmiTGQ==", - "FHZ5084LC0nTAzZlnSKN3Q==", - "cdEr+0Fv5iaVZzalZToseg==", - "Co8WbNYbCPTFPcHpeK3hRQ==", - "qXSzhCEhByLQq9N84tqV+Q==", - "h3ufhRk5IEFaNH11rIACtQ==", - "fQ1PJ/JwazIaYoy/zy49QQ==", - "zAJqfbn54Nsm2ddGtkb59A==", - "ixPM9T8ik/gWGZ7BRIcaig==", - "/E9pwA3E3hVAZoYq3FmCyw==", - "U6ygonI8CxpruhpGB2+Q6A==", - "Igi4voB8oVMVw6WUeDSjZg==", - "jtuHIJhwoTGzavFpM7ilNw==", - "eBvTV27n6Gs+ZsBkpVynvw==", - "sFbzw0AUOGG0NEzkaSxVDg==", - "yAkIS+Ezj6woEff9YvdO7Q==", - "IP1+BwG6q60QzDADi8j7oA==", - "Q/teQEBFepHtwZ7UHa2TEA==", - "B1vDep5a1Gok5Gnth39+LA==", - "cyEIyQ2MZaPGf+K1x9Bbkg==", - "aaM+oEJnF4/nwMWyXJU8rA==", - "qpDNIpxah8FUiqXm5IRaUg==", - "ZTeJ35gMPqIv2WWbeNyIEg==", - "nzoAGQAnC/Xgg5PmOgXqkA==", - "J5pJDuNi3cqQiyaRJAJk4g==", - "2vqN53BXhXzPrKYsh6QH1A==", - "QlrzHNYxCwCBMVENvbXjQA==", - "Ou2HGn43nmsL3RWSNvMdXw==", - "3qk9lsvGTMqVMAZW+xihfw==", - "RncMe42RB2bhmUbYtGVnKQ==", - "hzNXR6dqPq1+vf4Qh5ByWA==", - "sRq3S2ZRs3H39cEQHv4Vig==", - "B4ThUBTVJOUPyOsHxikHXA==", - "A2lU9GkAdSibLO1JJfFnIA==", - "ef3HNkSvuWQrAzkuty2iqg==", - "yKDiRM6bf2xc0QXIwHYuaA==", - "AdCk4ccJuhA0bIT/61J+RQ==", - "UXvAZ7ULCVz2f505K0Wkvg==", - "ueKWblrOwVJNgiOvkXKLBQ==", - "s8u/jPuBAxu1d18HfV5Z0g==", - "hUT0Uc5YMUdNZQEGLz4hJw==", - "6jo/phmMTrEXKrNRsionGQ==", - "s/Ea/3fkyJ9honzPJkgEQQ==", - "hgu2/Jf+WrQAHfO+asW2zw==", - "kiVuTNwZ1r2lqYEZxIHyiQ==", - "24T5KVrVE2mYwJ5Goj3xJw==", - "fiWBVlfj97GGjEvf/Q9Spg==", - "5VWdlvJe7eoXMGkTtHzCUg==", - "+cFQxKa5RWVtc1z00Jujew==", - "nVa+rLH5p+yXBksLwQsjRQ==", - "5tyI6bMdb3tMIi4ewvr/SQ==", - "S6Roj31yS5bZbSFcd3f4Hg==", - "uW1Zl8iuEF8ZT/gwCBEqwA==", - "YwL+FJgxlZ8JVig+9iP5Cw==", - "ThIYK/mQsp9cMf8+rws/4Q==", - "w0oSxOhRG6kE9B868aoYVQ==", - "DJUDGQ0J32dF1kfItyxALg==", - "34/ab69lPkuAKt6WBxJPpA==", - "25jH4C9apgqWZGZP15lM6Q==", - "GxvwleSaSwILD1pG9k9buA==", - "YRAMt2ArEINo83ms6AqJ0A==", - "15HyTJNoMYzi3XCkeU5Z7A==", - "/SqjXGD+TKC90uz1vsjqUw==", - "karhKOknkhtg/LSFo9BGRA==", - "+tD1d0t3vfJvc1hUAvTT4Q==", - "rkaKbtlnyVr53D0rexLqdQ==", - "fAugw4rtnXzzRXfC1wRgOQ==", - "RgxoepF/XOwIsGat5r5HpQ==", - "Y49/EnzVz3ugXCYxFjFN7g==", - "tHMyzBm/2wNDw7TeNeujbg==", - "LlqzYV4uZpiJy4ORWPSekA==", - "M3Huar7/ded9OGgDwJhZgw==", - "QkNNATSx/PJ1XjgZyTtkUQ==", - "skVw0v6Wx00sfHAScPK1Bw==", - "v1gsIvg+C68T9wixMzL2sQ==", - "hDL75EXhl7BaYnAxkoGwbw==", - "tReG97snx2ESpXbfllCL7Q==", - "EiZBXR15dT1TMrkgkzmkvw==", - "5hRHirfD90/sdp0ILJQU8A==", - "rabElvtYtG0jW6dxAOHofg==", - "JpxoTRKWN+SEeBQ453R1YQ==", - "Faz4Lm0cpjvF0IjVkHiZMg==", - "jGErFAIoXx+50KFpVIGZiA==", - "5GzBkduKpUX7u1uwtYIFug==", - "cRBe0J9/KWRX19N2vPkCiw==", - "t/7g8t4Kr3/+SCnOn3XFWQ==", - "sd08c6jUXs5/hxND0fBkPA==", - "nTxKpqIdnHNdpDk7Dx3TEg==", - "5l+RALcce+lTDnmXI+Wqqg==", - "pzJ4QmEBGRNiiX6z0xHh8g==", - "Vfl3YbqR6JRR7SIdsUA/vA==", - "cgfhOdB376a4GAcuACADvA==", - "inAefsQM6tiIhQCMtcPcyA==", - "FTSULGL8CMhmcc7Cyf/X8A==", - "9XSWpaZyHEy7V/tuw5uZEw==", - "+VtM1opKlgb/jrCwc4YjFA==", - "oF46xheuI/NUxUOnOttzvA==", - "Qy+lvhDbJCumr6kiPLd1oA==", - "swps7UEKpIbVBJ9SnPK3zQ==", - "b7wyIiJvJs+29QePxsdWtQ==", - "x3iDZxYyuHtG/9rNW5HMYg==", - "r1dx1g5UOksywvOaQTamfA==", - "KvVF3Si/fr4JQtr7jCJiog==", - "spvZ7hhtG5QY7JXs96lBUg==", - "ECL8mA5B6CswyDH6yJ4hVw==", - "7Uu+YsdS69dMSDYUr6vTag==", - "Rnm9pSvQRRbkHpOijraLZw==", - "aQJqpnXdzqNSFhMn3EJA2Q==", - "TctnXpd7Wd5ZXKMnOFHAQA==", - "+lPqG8l6mf2FWVGWflyF/g==", - "mPmnmL2oRRJmKYjQ6TfN3g==", - "fyXFcT5ZCawDBg74n1WSpg==", - "uq5Zrxq10pO1HoPxReT5og==", - "3eoCsOKXY8RDrHSdlXqmrA==", - "9nQv2BFG56xsHViN5UpHYw==", - "RtP/nJgy/ItyuDrpBbAotg==", - "5E/drRptfHmBhJ7qplujGg==", - "cUxyZvoqXbQ0a/0I9s6Zbg==", - "womzqSigwEF30V422YmxKw==", - "FPvZqDfN8dTFHLVOuYEbUA==", - "YZMXx+scKXp/v9GaJjb1bA==", - "bjURu5MRsNIZavG5HV0eZw==", - "iY0C9uSMEOn8ikT+J7+/Eg==", - "aXkD6BzsdkMEv7A+eYqQQQ==", - "dOcOfEDGHYG2kgmrglDkPw==", - "c7GjtY05Mh+cp6SNuWY3Ig==", - "lM1uY1oVncHXNzKs/cCEtQ==", - "7jXnQJkutLsi+r9aYmrMxw==", - "NgrugWWduj2qdWnEQf9dLA==", - "faYjmy/yn5iXdS28QCIdWw==", - "68XbaOvIZpCGb4G1gaKErA==", - "Yi67HkOLtGYXeL7WD4GPrA==", - "Puo8gXuUkwcoQViaXwkdSQ==", - "L202Et5aZh60Vl20LTKNFg==", - "4agAzQ5+dnTmLZEjsZs26g==", - "LegGM1ft8Y7Ka3CUxpObvg==", - "KRdILc1QDOpow5im/qY+Kw==", - "peMW+rpwmXrSwplVuB/gTA==", - "Pic1ncr+Zn6wv75zjAdzQA==", - "ilSPlWYbiPzIC13vQUBlOw==", - "GUlDufLoTalBqrG/h3mZ6w==", - "5twANNlT57T9BG4r2D9+Hw==", - "ENrnM8HlMi+5y8Hsu4Pn4A==", - "K/DzpLEbz1MpRjA6qyYn4Q==", - "yN1cHJRHDXoFxFZacL6wsw==", - "Rc6r+KqIePH+dnj1aNYCsQ==", - "8u/z5htgqXVU5Dqwd9whJQ==", - "jV575O42EYoqDNxCm9643Q==", - "xCxGo0h3lS8N6X+ivKfpjA==", - "us+2nfpj2gjI7s14Hw0gmA==", - "bp90A/rbESwVU7eh9xRTfQ==", - "5QtMXzbTafvKDQOWZP7M8w==", - "1gFCxPLjQlQGKmSGmHwmJQ==", - "m+/dnOIe6SaIFhfvg+ybDg==", - "9Dcg87+RPq9U+swRg4dH3Q==", - "mnjbL7WFmrWp0RUqS8AMGA==", - "/0e0E+NFmq8GeE5+y2Gekw==", - "y11mbpHHtka9Ep8cr2nEvQ==", - "GdmjRyliw+W21Q+dHO4CWA==", - "X65wWQTpkg756V/Nfn92kQ==", - "xj06KvacQOxRSofbhzBNgA==", - "nVDxVhaa2o38gd1XJgE3aw==", - "4IV+JOGXrltpkQamBRXMgA==", - "jIfp8LqaYXT88r/K3a8gNw==", - "vhT4dDtbMFVyevS6yCGy0g==", - "zMs7/x8hDt8xj2FFc5+6vA==", - "1J7u2N62JGb2VrnCRlJIrw==", - "3hJs9P/RRxB0CO4q0Icb+g==", - "ZpuVY1ZyoKD3hqosdsfT6Q==", - "6KIM7C7eWgxZtqZboiJvZQ==", - "vtb6fdqirkuUkqITAmXTlw==", - "C/rEVr22mw2u/1dwUx9VTg==", - "NrY4Q5C67haCWLK8HXHq9g==", - "X9qvEftCEFWX3gBU5hXy+Q==", - "0zgw7xNB3xVGaH48TyxaNQ==", - "g7J9Jy/PJrAGRgVdvA+bEg==", - "9zb+anAyZVBzuU9rW4cJtg==", - "6Zc5FzT/m0YIjxEPYA6zDQ==", - "R2YPNlvCbVK0EodTR7czIw==", - "gsI6EGgXMtDu+1u364A8mw==", - "Bg2wBFb1/xaxeEiHfBHX+A==", - "64aapfVI6dV3LpTK56KZlg==", - "HdgcJU0W3yVnH69VYStmug==", - "qTDCcv+LK3JPFB/++t66IQ==", - "P0HEIXMnAmbvq+QYREwFzw==", - "aaU7CAmtyE35jNKTkyXOkg==", - "r9G97WKDiQ48qJHP9LBRNg==", - "8mPgQhYVDn8KshDDvvf5SA==", - "GCQiiOLDguXLiYwuLcFPsA==", - "R2Use39If2C0FVBP7KDerA==", - "23C4eh3yBb5n/RNZeTyJkA==", - "2QQtKtBAm2AjJ5c0WQ6BQA==", - "Qc+XYy2qyWJ5VVwd2PExbw==", - "zJ7ScHNxr2leCDNNcuDApA==", - "vFtC0B2oe1gck28JOM1dyg==", - "bLEntCrCHFy9pg3T3gbBzg==", - "G3PmmPGHaWHpPW30xQgm3Q==", - "me61ST+JrXM5k3/a11gRAA==", - "+LJYVZl1iPrdMU3L5+nxZw==", - "CLPzjXKGGpJ0VrkSJp7wPQ==", - "Pc+u0MAzp4lndTz4m6oQ5w==", - "cwBNvZc0u4bGABo88YUsVQ==", - "q7m/EtZySBjZNBjQ5m1hKw==", - "8ZBiwr842ZMKphlqmNngHw==", - "LMCZqd3UoF/kHHwzTdj7Tw==", - "0ODJyWKJSfObo+FNdRQkkA==", - "ViweSJuNWbx5Lc49ETEs/A==", - "x+8rwkqKCv0juoT5m1A4eg==", - "pxuSWn1u+bHtRjyh2Z8veA==", - "GKzs8mlnQQc58CyOBTlfIg==", - "Owg8qCpjZa+PmbhZew6/sw==", - "YLz+HA6qIneP+4naavq44Q==", - "9ajIS45NTicqRANzRhDWFA==", - "DjeSrUoWW2QAZOAybeLGJg==", - "qxALQrqHoDq9d91nU0DckA==", - "yPIeWcW8+3HjDagegrN8bw==", - "ocpLRASvTgqfkY20YlVFHQ==", - "RuLeQHP1wHsxhdmYMcgtrQ==", - "3WwITQML938W9+MUM56a3A==", - "ZbLVNTQSVZQWTNgC4ZGfQg==", - "X6Ln4si8G5aKar52ZH/FEQ==", - "+gbitI/gpxebN/rK7qj8Fw==", - "7cnUHeaPO8txZGGWHL9tKg==", - "epY+dsm5EMoXnZCnO4WSHw==", - "nf8x+F03kOpMhsCSUWEhVg==", - "VE4sLM5bKlLdk85sslxiLQ==", - "Hs3vUOOs2TWQdQZHs+FaQQ==", - "hkOBNoHbno2iNR7t3/d4vg==", - "Ar9N1VYgE7riwmcrM3bA2Q==", - "SbMjjI8/P8B9a9H2G0wHEQ==", - "tU31r8zla146sqczdKXufg==", - "tFmWYH82I3zb+ymk5dhepA==", - "XHjrTLXkm/bBY/BewmJcCQ==", - "FV/D5uSco+Iz8L+5t7E8SA==", - "yKLLiqzxfrCsr6+Rm6kx1Q==", - "B6reUwMkQFaCHb9BYZExpw==", - "5jyuDp82Fux+B0+zlx8EXw==", - "WGKFTWJac8uehn3N59yHJw==", - "JQf9UmutPh3tAnu7FDk3nA==", - "hv5GrLEIjPb4bGOi8RSO0w==", - "p3V7NfveB6cNxFW7+XQNeQ==", - "DinJuuBX9OKsK5fUtcaTcQ==", - "UEMwF4kwgIGxGT4jrBhMPQ==", - "Y78dviyBS3Jq9zoRD5sZtQ==", - "zbjXhZaeyMfdTb2zxvmRMg==", - "kydoXVaNcx1peR5g6i588g==", - "M2suCoFHJ5fh9oKEpUG3xA==", - "/VnKh/NDv7y/bfO6CWsLaQ==", - "S+b37XhKRm8cDwRb1gSsKQ==", - "jz7QlwxCIzysP39Cgro8jg==", - "IjmLaf3stWDAwvjzNbJpQA==", - "cHSj5dpQ04h/WyefjABfmQ==", - "+gO0bg8LY+py2dLM1sM7Ag==", - "fSANOaHD0Koaqg7AoieY9A==", - "vqYHQ3MnHrAIAr1QHwfIag==", - "Uh1mvZNGehK1AaI4a1auKQ==", - "HCbHUfsTDl6+bxPjT57lrA==", - "S7Vjy/gOWp0HozPP1RUOZw==", - "KPh6TwYpspne4KZA6NyMbw==", - "cfh5VZFmIqJH/bKboDvtlA==", - "H1zH9I8RwfEy5DGz3z+dHw==", - "2ksediOVrh4asSBxKcudTg==", - "+jVN/3ASc2O44sX6ab8/cg==", - "uvKYnKE01D5r7kR9UQyo5A==", - "BB9PTlwKAWkExt3kKC/Wog==", - "yqQPU4jT9XvRABZgNQXjgg==", - "6v3eTZtPYBfKFSjfOo2UaA==", - "49z/15Nx9Og7dN9ebVqIzg==", - "VjclDY8HN4fSpB263jsEiQ==", - "vSKsa0JhLCe9QFZKkcj58Q==", - "PolhKCedOsplEcaX4hQ0YQ==", - "D0Qt9sRlMaPnOv1xaq+XUg==", - "gBgJF0PiGEfcUnXF0RO7/w==", - "sC11Rf/mau3FG5SnON4+vQ==", - "rKb3TBM4EPx/RErFOFVCnQ==", - "+n0K7OB2ItzhySZ4rhUrMg==", - "Epm0d/DvXkOFeM4hoPCBrg==", - "K8PVQhEJCEH1ghwOdztjRw==", - "xjA21QjNdThLW3VV7SCnrg==", - "nE72uQToQFVLOzcu/nMjww==", - "2Hc5oyl0AYRy2VzcDKy+VA==", - "Y7XpxIwsGK3Lm/7jX/rRmg==", - "MK7AqlJIGqK2+K5mCvMXRQ==", - "mXycPfF5zOvcj1p4hnikWw==", - "V1fvtnJ0L3sluj9nI5KzRw==", - "TahqPgS7kEg+y6Df0HBASw==", - "EKU3OVlT4b/8j3MTBqpMNg==", - "EdvIAKdRAXj7e42mMlFOGQ==", - "uPm+cF4Jq08S5pQhYFjU8A==", - "CnIwpRVC2URVfoiymnsdYQ==", - "wyx5mnUMgP5wjykjAfTO7w==", - "OwIGvTh8FPFqa4ijNkguAw==", - "4ID0PHTzIMZz2rQqDGBVfA==", - "rlXt6zKE7DswUl0oWGOQUQ==", - "4NP8EFFJyPcuQKnBSxzKgQ==", - "bJgsuw29cO2WozqsGZxl7w==", - "b3q8kjHJPj9DWrz3yNgwjQ==", - "QGYFMpkv37CS2wmyp42ppg==", - "Kzs+/IZJO8v4uIv9mlyJ2Q==", - "ZJY+hujfd58mTKTdsmHoQQ==", - "R8FxgXWKBpEVbnl41+tWEw==", - "+CvLiih/gf2ugXAF+LgWqw==", - "BDbfe/xa9Mz1lVD82ZYRGA==", - "Dz90OhYEjpaJ/pxwg1Qxhg==", - "MLHt6Ak288G0RGhCVaOeqA==", - "r0QffVKB9OD9yGsOtqzlhA==", - "hK8KhTFcR06onlIJjTji/Q==", - "wMum67lfk5E1ohUObJgrOg==", - "JKmZqz9cUnj6eTsWnFaB0A==", - "rtJdfki8fG6CB36CADp0QA==", - "cUyqCa7Oue934riyC17F8g==", - "y4Y4mSSTw/WrIdRpktc5Hw==", - "r36kVMpF+9J+sfI3GeGqow==", - "ydVj2odhergi+2zGUwK4/A==", - "J2NFyb8cXEpZyxWDthYQiA==", - "qYuo5vY8V3tZx41Kh9/4Dw==", - "jrfRznO0nAz6tZM1mHOKIA==", - "JSr/lqDej81xqUvd/O2s7w==", - "vHGjRRSlZHJIliCwIkCAmQ==", - "sQAxqWXeiu/Su0pnnXgI9A==", - "xPe76nHyHmald6kmMQsKdg==", - "50jASqzGm4VyHJbFv8qVRA==", - "uuiJ+yB7JLDh2ulthM0mjg==", - "TI90EuS/bHq/CAlX32UFXg==", - "JgxNrUlL8wutG04ogKFPvw==", - "aMa1yVA71/w6Uf1Szc9rMA==", - "k/Aou2Jmyh8Bu3k8/+ndsQ==", - "iANKiuMqWzrHSk9nbPe3bQ==", - "7GgNLBppgAKcgJCDSsRqOQ==", - "bzVeU2qM9zHuzf7cVIsSZw==", - "rkeLYwMZ1/pW2EmIibALfA==", - "91+Yms6Oy/rP0rVjha5z9w==", - "JgXSPXDqaS1G9NqmJXZG0A==", - "ZzduJxTnXLD9EPKMn1LI4Q==", - "6W79FmpUN1ByNtv5IEXY4w==", - "Y1Nm3omeWX2MXaCjDDYnWQ==", - "ejfikwrSPMqEHjZAk3DMkA==", - "WNfDNaWUOqABQ6c6kR+eyw==", - "4BkqgraeXY7yaI1FE07Evw==", - "AjHz9GkRTFPjrqBokCDzFw==", - "T/6gSz2HwWJDFIVrmcm8Ug==", - "VWy9lB5t4fNCp4O/4n8S4w==", - "/FdZzSprPnNDPwbhV1C0Cg==", - "LUWxfy4lfgB5wUrqCOUisw==", - "r1VGXWeqGeGbfKjigaAS+Q==", - "ztULoqHvCOE6qV7ocqa4/w==", - "QCpzCTReHxGm5lcLsgwPCA==", - "Hst3yfyTB7yBUinvVzYROQ==", - "gf1Ypna/Tt+TZ08Y+GcvGg==", - "3rbml1D0gfXnwOs5jRZ3gA==", - "2vm7g3rk1ACJOTCXkLB3zA==", - "11FE2kknwYi2Qu0JUKMn3A==", - "1b2uf+CdVjufqiVpUShvHw==", - "0a4SafpDIe8V4FlFWYkMHw==", - "7btpMFgeGkUsiTtsmNxGQA==", - "dUx1REyXKiDFAABooqrKEA==", - "knYKU74onR6NkGVjQLezZg==", - "Scto+9TWxj1eZgvNKo+a9A==", - "cvZT1pvNbIL8TWg+SoTZdA==", - "1nXByug2eKq0kR3H3VjnWQ==", - "tG+rpfJBXlyGXxTmkceiKA==", - "7W9aF7dxnL+E8lbS/F7brg==", - "8vr+ERVrM99dp+IGnCWDGQ==", - "oFNMOKbQXcydxnp8fUNOHw==", - "uJZGw3IY2nCcdVeWW1geNQ==", - "q6LG0VzO1oxiogAAU63hyg==", - "f0H/AFSx2KLZi9kVx5BAZg==", - "1RQZ2pWSxT+RKyhBigtSFg==", - "scCQPl0em2Zmv/RQYar60g==", - "A2ODff+ImIkreJtDPUVrlg==", - "vRgkZZGVN7YZrlml0vxrKA==", - "68jPYo3znYoU4uWI7FH3/g==", - "iJ2nT8w8LuK11IXYqBK+YA==", - "54XELlPm8gBvx8D5bN3aUg==", - "PTAm/jGkie7OlgVOvPKpaA==", - "v7BrkRmK0FfWSHunTRHQFQ==", - "dVh/XMTUIx1nYN4q1iH1bA==", - "TSGL3iQYUgVg/O9SBKP9EA==", - "wTO49YX/ePHMWtcoxUAHpw==", - "bMb1ia0rElr2ZpZVhva0Jw==", - "sNmW2b2Ud7dZi3qOF8O8EQ==", - "3djRJvkZk9O2bZeUTe+7xQ==", - "I9KNZC1tijiG1T72C4cVqQ==", - "sQzCwNDlRsSH7iB9cTbBcg==", - "mk1CKDah7EzDJEdhL22B7w==", - "lON3WM0uMJ30F8poBMvAjQ==", - "88PNi9+yn3Bp4/upgxtWGA==", - "C+Ssp+v1r+00+qiTy2d7kA==", - "11U5XEwfMI7avx014LfC8g==", - "xsf0m31Am0W9eLhopAkfnA==", - "d13Rj3NJdcat0K/kxlHLFw==", - "UP7NXAE0uxHRXUAWPhto0w==", - "ZKXxq9yr7NGBOHidht34uQ==", - "Fd2fYFs8vtjws2kx1gf6Rw==", - "ojf6uL85EuEYgLvHoGhUrw==", - "KjnL3x+56r3M2pDj1pPihA==", - "WdCWezJU4JK43EOZ9YHVdg==", - "/jH6imhTPZ/tHI4gYz2+HA==", - "+OLntmlsMBBYPREPnS6iVw==", - "5lfLJAk1L3QzGMML3fOuSw==", - "AZs3v4KJYxdi8T1gjVjI2Q==", - "7pkUY2UzSbGnwLvyRrbxfA==", - "BjfOelfc1IBgmUxMJFjlbQ==", - "TcGhAJHRr7eMwGeFgpFBhg==", - "Y7iDCWYrO1coopM3RZWIPg==", - "mnalaO6xJucSiZ0+99r3Cg==", - "plXHHzA8X9QGwWzlJxhLRw==", - "Zqd6+81TwYuiIgLrToFOTQ==", - "1Pmnur6TbZ9cmemvu0+dSA==", - "OaNpzwshdHUZMphQXa6i8w==", - "WKehT4nGF2T7aKuzABDMlA==", - "4LvQSicqsgxQFWauqlcEjw==", - "BMZB1FwvAuEqyrd0rZrEzw==", - "YfbfE3WyYOW7083Y8sGfwQ==", - "46FCwqh+eMkf+czjhjworw==", - "734u4Y1R3u7UNUnD+wWUoA==", - "yf06Slv9l3IZEjVqvxP2aA==", - "bIk7Fa6SW7X18hfDjTKowg==", - "DnF6TYSJxlc+cwdfevLYng==", - "ionqS0piAOY2LeSReAz4zg==", - "hlMumZ7RJFpILuKs09ABtw==", - "NjeDgQ1nzH1XGRnLNqCmSg==", - "o7y4zQXQAryST2cak4gVbw==", - "29EybnMEO95Ng4l/qK4NWQ==", - "udU65VtsvJspYmamiOsgXw==", - "v1AWe5qb5y3vSKFb7ADeEw==", - "wK6Srd83eLigZ11Q20XGrg==", - "GmC+0rNDMIR+YbUudoNUXw==", - "W4utAK3ws0zjiba/3i91YA==", - "MlKWxeEh8404vXenBLq4bw==", - "Gdf4VEDLBrKJNQ8qzDsIyw==", - "Z9bDWIgcq6XwMoU2ECDR5Q==", - "VIkS30v268x+M1GCcq/A8A==", - "iPwX3SbbG9ez9HoHsrHbKw==", - "yKrsKX4/1B1C0TyvciNz5w==", - "BophnnMszW5o+ywgb+3Qbw==", - "eJLrGwPRa6NgWiOrw1pA7w==", - "eV+RwWPiGEB+76bqvw+hbA==", - "oad5SwflzN0vfNcyEyF4EA==", - "Uw6Iw+TP9ZdZGm2b/DAmkg==", - "9qWLbRLXWIBJUXYjYhY2pg==", - "dxWv00FN/2Cgmgq9U3NVDQ==", - "AX1HxQKXD12Yv5HWi39aPQ==", - "J0NauydfKsACUUEpMhQg8A==", - "mxug34EekabLz0JynutfBg==", - "bNq/hj0Cjt4lkLQeVxDVdQ==", - "nW3zZshjZEoM8KVJoVfnuQ==", - "ghp8sWGKWw20S/z1tbTxFg==", - "S4rFuiKLFKZ+cL7ldiTwpg==", - "8ZqmPJDnQSOFXvNMRQYG2Q==", - "6XYqR2WvDzx4fWO7BIOTjA==", - "Uo+FIhw1mfjF6/M8cE1c/Q==", - "bsHIShcLS134C+dTxFQHyA==", - "19yQHaBemtlgo2QkU5M6jQ==", - "sWLcS+m4aWk31BiBF+vfJQ==", - "BlCgDd7EYDIqnoAiKOXX6Q==", - "MrxR3cJaDHp0t3jQNThEyg==", - "cMo6l1EQESx1rIo+R4Vogg==", - "VOvrzqiZ1EHw+ZzzTWtpsw==", - "1/ZheMsbojazxt31j/l3iA==", - "0QxPAqRF8inBuFEEzNmLjA==", - "UXUNYEOffgW3AdBs7zTMFA==", - "lOPJhHqCtMRFZfWMX/vFZQ==", - "rXSbbRABEf4Ymtda45w8Fw==", - "jfegbZSZWkDoPulFomVntA==", - "hfcH5Az2M7rp+EjtVpPwsg==", - "VsXEBIaMkVftkxt1kIh7TA==", - "M20iX2sUfw5SXaZLZYlTaA==", - "VUDsc9RMS1fSM43c+Jo9dQ==", - "itPtn+JaO4i7wz2wOPOmDQ==", - "rCxoo4TP/+fupXMuIM0sDA==", - "cSHSg9xJz/3F6kc+hKXkwg==", - "b4BoZmzVErvuynxirLxn0w==", - "e4B3HmWjW+6hQzcOLru6Xg==", - "lTE6u9G/RzvmbuAzq2J2/Q==", - "897ptlztTjr7yk+pk8MT0Q==", - "jd6IpPJwOJW1otHKtKZ5Gw==", - "b4aFwwcWMXsSdgS1AdFOXA==", - "FltEN+7NKvzt+XAktHpfHA==", - "ZyDh3vCQWzS5DI1zSasXWA==", - "kcJ1acgBv6FtUhV8KuWoow==", - "zgEyxj/sCs63O98sZS94Yw==", - "/kGxvyEokQsVz0xlKzCn2A==", - "cxqHS4UbPolcYUwMMzgoOA==", - "62RHCbpGU8Hb+Ubn+SCTBg==", - "ePlsM/iOMme2jEUYwi15ng==", - "0fN+eHlbRS6mVZBbH/B9FQ==", - "k0XIjxp2vFG7sTrKcfAihA==", - "0rfG4gRugAwVP0i3AGVxxg==", - "M98hjSxCwvZ27aBaJTGozQ==", - "kzGNkWh3fz27cZer4BspUQ==", - "3CJbrUdW68E3Drhe4ahUnQ==", - "NGApiVkDSwzO45GT57GDQw==", - "lMjip5hbCjkD9JQjuhewDg==", - "GrSbnecYAC3j5gtoKntL0A==", - "9dbn0Kzwr9adCEfBJh78uQ==", - "64QzHOYX0A9++FqRzZRHlQ==", - "YZt6HwCvdI5DRQqndA/hBQ==", - "6GXHGF62/+jZ7PfIBlMxZw==", - "PBULPuFXb6V3Di713n3Gug==", - "8Cm19vJW8ivhFPy0oQXVNA==", - "zDSQ3NJuUGkVOlvVCATRwA==", - "6QAtjOK9enNLRhcVa2iaTg==", - "v/PshI6JjkL9nojLlMNfhg==", - "yTgN5xFIdz1MzFS6xMl5uQ==", - "SCO9nQncEcyVXGCtx30Jdg==", - "7b0oo4+qphu6HRvJq6qkHQ==", - "ol9xhVTG9e1wNo50JdZbOA==", - "hIABph+vhtSF5kkZQtOCTA==", - "k+IBS52XdOe5/hLp28ufnA==", - "6HnWgYNKohqhoa1tnjjU3A==", - "HDxGhvdQwGh0aLRYEGFqnw==", - "LDuBcL5r3PUuzKKZ9x6Kfw==", - "HPvYV94ufwiNHEImu4OYvQ==", - "h2cnQQF2/R3Mq2hWdDdrTg==", - "nqpKfidczdgrNaAyPi7BOQ==", - "2ywo4t5PPSVUCWDwUlOVwQ==", - "jZMDIu95ITTjaUX0pk4V5g==", - "bA2kaTpeXflTElTnQRp6GQ==", - "lwYQm2ynA3ik2gE1m11IEg==", - "5ugVOraop5P5z5XLlYPJyQ==", - "l2NppPcweAtmA1V2CNdk2Q==", - "DbWQI3H2tcJsVJThszfHGA==", - "H6HPFAcdHFbQUNrYnB74dA==", - "H1NJEI+fvOQbI51kaNQQjQ==", - "53UccFNzMi9mKmdeD82vAw==", - "lffapwUUgaQOIqLz2QPbAg==", - "rSvhrHyIlnIBlfNJqemEbw==", - "BLJk9wA88z6e0IQNrWJIVw==", - "5m1ijXEW+4RTNGZsDA/rxQ==", - "GG8a3BlwGrYIwZH9j3cnPA==", - "HhBHt5lQauNl7EZXpsDHJA==", - "/XjB6c5fxFGcKVAQ4o+OMw==", - "+tuUmnRDRWVLA+1k0dcUvg==", - "SM7E98MyViSSS9G0Pwzwyw==", - "c5q/8n7Oeffv3B1snHM/lA==", - "kwlAQhR2jPMmfLTAwcmoxw==", - "0b/xj6fd0x+aB8EB0LC4SA==", - "S8jlvuYuankCnvIvMVMzmg==", - "kZkmDatUOdIqs7GzH3nI1A==", - "obW3kzv2KBvuckU7F+tfjA==", - "pa8nkpAAzDKUldWjIvYMYg==", - "m+eh+ZqS74w2q0vejBkjaw==", - "LcoJBEPTlSsQwfuoKQUxEw==", - "KO2XVYyNZadcQv8aCNn5JA==", - "uvzmRcvgepW6mZbMfYgcNw==", - "KhUT2buOXavGCpcDOcbOYg==", - "fo3JL+2kPgDWfP+CCrFlFw==", - "wIfvvLKC61gOpsddUFjVog==", - "SPHU6ES1WVm0Mu2LB+YjrA==", - "LWWfRqgtph1XrpxF4N64TA==", - "LCvz/h9hbouXCmdWDPGWqg==", - "PXC6ZpdMH0ATis/jGW12iA==", - "z920R8eahJPiTsifrPYdxA==", - "GIHKW6plyLra0BmMOurFgA==", - "k6OmSlaSZ5CB0i7SD9LczQ==", - "YZ39RIXpeLAhyMgmW2vfkQ==", - "bs2QG8yYWxPzhtyMqO6u3A==", - "pKaTI+TfcV3p/sxbd2e7YQ==", - "xWYecfzAtXT9WyQ8NYY/hw==", - "Fz8EI+ZpYlbcttSHs5PfpA==", - "wfwuxn+Vja1DNwiDwL2pcQ==", - "wux5Y8AipBnc5tJapTzgEQ==", - "U+oTpcjhc0E+6UjP11OE/Q==", - "yTVJKBn72RjakMBXDoBKHg==", - "0TxcYwG72dT7Tg+eG8pP1w==", - "imZ+mwiT22sW2M9alcUFfg==", - "CkDIoAFLlIRXra78bxT/ZA==", - "4qMSNAxichi3ori/pR+o0w==", - "zNLlWGW/aKBhUwQZ4DZWoQ==", - "D31ZticrjGWAO45l5hFh7A==", - "HdXg64DBy5WcL5fRRiUVOg==", - "yhI5jHlfFJxu4eV5VJO2zQ==", - "e9GqAEnk8XI5ix6kJuieNQ==", - "EC0+iUdSZvmIEzipXgj7Gg==", - "chwv4+xbEAa93PHg8q9zgQ==", - "B1VVUbl8pU0Phyl1RYrmBg==", - "A+DLpIlYyCb9DaarpLN76g==", - "wHA+D5cObfV3kGORCdEknw==", - "+Mp+JIyO0XC5urvMyi3wvQ==", - "vUE8Iw3NyWXURpXyoNJdaw==", - "ParhxI6RtLETBSwB0vwChQ==", - "NxSdT2+MUkQN49pyNO2bJw==", - "JSyhTcHLTfzHsPrxJyiVrA==", - "PAlx9+U+yQCAc5Fi0BOG0w==", - "W/0s1x3Qm+wN8DhROk6FrQ==", - "L3Jt5dHQpWQk74IAuDOL8g==", - "VWb8U4jF/Ic0+wpoXi/y/g==", - "1wBuHqS1ciup31WTfm3NPg==", - "BDNM1u/9mefjuW1YM2DuBg==", - "SDi5+FoP9bMyKYp+vVv1XA==", - "23d9B9Gz5kUOi1I//EYsSQ==", - "/a9O7kWeXa0le45ab3+nVw==", - "PcoVtZrS1x1Q+6nfm4f80w==", - "A6TLWhipfymkjPYq8kaoDQ==", - "lzUQ1o7JAbdJYpmEqi6KnQ==", - "/2jGyMekNu7U136K+2N3Jg==", - "ZItMIn1vhGqAlpDHclg0Ig==", - "Ee4A3lTMLQ7iDQ7b8QP8Qg==", - "bO55S58bqDiRWXSAIUGJKw==", - "zeHF6fdeqcOId3fRUGscRw==", - "BxsDnI8jXr4lBwDbyHaYXw==", - "ylA6sU7Kaf9fMNIx1+sIlw==", - "ZWXfE3uGU91WpPMGyknmqw==", - "f1+fHgR5rDPsCZOzqrHM7Q==", - "8VqeoQELbCs232+Mu+HblA==", - "beSrliUu0BOadCWmx+yZyA==", - "NQVQfN3nIg9ipHiFh4BvfQ==", - "4wnUAbPT3AHRJrPwTTEjyw==", - "/cdR1i5TuQvO+u3Ov3b0KQ==", - "wtyAZIfhomcHe9dLbYoSvA==", - "ulpDxLeQnIRPnq6oaah2AA==", - "pdPwUHauXOowaq9hpL2yFw==", - "1+A9FCGP3bZhk6gU3LQtNg==", - "raYifKqev8pASjjuV+UTKQ==", - "+OERSmo7OQUUjudkccSMOA==", - "FeRovookFQIsXmHXUJhGOw==", - "USCvrMEm/Wqeu9oX6FrgcQ==", - "kly/2kE4/7ffbO34WTgoGg==", - "IindlAnepkazs5DssBCPhA==", - "Bq82MoMcDjIo/exqd/6UoA==", - "ocvA1/NbyxM0hanwwY6EiA==", - "rtd6mqFgGe98mqO0pFGbSw==", - "nvLEpj6ZZF3LWH3wUB6lKg==", - "AGd0rcLnQ0n+meYyJur1Pw==", - "wI7JrSPQwYHpv2lRsQu9nQ==", - "OnmvXbyT2BYsSDJYZhLScA==", - "CmBf5qchS1V3C2mS6Rl4bw==", - "TafM7nTE5d+tBpRCsb8TjQ==", - "wxkb8evGEaGf/rg/1XUWiA==", - "y1J+o6DC2sETFsySgpDZyA==", - "SVLHWPCCH7GPVCF7QApPbw==", - "HMWOlMmzocOIiJ7yG1YaDQ==", - "DJmrmNRKARzsTCKSMLmcNA==", - "/XC/FmMIOdhMTPqmy4DfUA==", - "63OTPaKM0xCfJOy9EDto+Q==", - "PxReytUUn/BbxYTFMu1r2Q==", - "WjDqf1LyFyhdd8qkwWk+MA==", - "/DiUApY7cVp5W9o24rkgRA==", - "alJtvTAD7dH/zss/Ek1DMQ==", - "xLm/bJBonpTs0PwsF0DvRg==", - "eAOEgF5N80A/oDVnlZYRAw==", - "LqgzKxbI6WTMz0AMIDJR5w==", - "MJ1FuK8PXcmnBAG9meU84A==", - "JLq/DrW2f26NaRwfpDXIEA==", - "fsrX00onlGvfsuiCc35pGg==", - "tXVb5f90k9l3e1oK2NGXog==", - "1JRgSHnfAQFQtSkFTttkqQ==", - "B0TaUQ6dKhPfSc5V/MjLEQ==", - "nkbLVLvh3ClKED97+nH+7Q==", - "avFTp3rS6z5zxQUZQuaBHQ==", - "lNF8PvUIN02NattcGi5u4g==", - "bBEndaOStXBpAK79FrgHaw==", - "dM9up4vKQV5LeX82j//1jQ==", - "4WO6eT0Rh6sokb29zSJQnQ==", - "RHKCMAqrPjvUYt13BVcmvw==", - "Ju4YwtPw+MKzpbC0wJsZow==", - "tzV7ixFH37ze4zuLILTlfA==", - "oPlhC4ebXdkIDazeMSn1fQ==", - "5pje7qyz8BRsa8U4a4rmoA==", - "7E6V6/zSjbtqraG7Umj+Jw==", - "8QK7emHS6rAcAF5QQemW/A==", - "LhqRc9oewY4XaaXTcnXIHQ==", - "p/7qM5+Lwzw1/lIPY91YxQ==", - "fy54Milpa7KZH/zgrDmMXQ==", - "LyPXOoOPMieqINtX8C9Zag==", - "aD4QvtMlr8Lk/zZgZ6zIMg==", - "dsueq9eygFXILDC7ZpamuA==", - "+mJLK+6qq8xFv7O/mbILTw==", - "nHUpYmfV59fe3RWaXhPs3Q==", - "VbCoGr8apEcN7xfdaVwVXw==", - "/2Chaw2M9DzsadFFkCu6WQ==", - "rKAQxu80Q8g1EEhW5Wh8tg==", - "RJJqFMeiCZHdsqs72J17MQ==", - "GF2yvI9UWf1WY7V7HXmKPA==", - "JyIDGL1m/w+pQDOyyeYupA==", - "wR2Gxb07nkaPcZHlEjr8iA==", - "PbDVq2Iw1eeM8c2o/XYdTA==", - "BL3buzSCV78rCXNEhUhuKQ==", - "i42XumprV/aDT5R0HcmfIQ==", - "DuEKxykezAvyaFO2/5ZmKQ==", - "6ACvJNfryPSjGOK39ov8Qg==", - "YaUKOTyByjUvp1XaoLiW5Q==", - "jNcMS2zX1iSZN9uYnb2EIg==", - "VRnx+kd6VdxChwsfbo1oeQ==", - "4Qinl7cWmVeLJgah8bcNkw==", - "Fiy3hkcGZQjNKSQP9vRqyA==", - "HaSc7MZphCMysTy2JbTJkw==", - "VhYGC8KYe5Up+UJ2OTLKUw==", - "K2gk9zWGd0lJFRMQ1AjQ/Q==", - "NfxVYc3RNWZwzh2RmfXpiA==", - "JGeqHRQpf4No74aCs+YTfA==", - "7VHlLw20dWck+I8tCEZilA==", - "V5HKdaTHjA8IzvHNd9C51g==", - "9TalxEyFgy6hFCM73hgb7Q==", - "R/y6+JJP8rzz1KITJ4qWBw==", - "7bM/pn4G7g7Zl6Xf1r62Lg==", - "CHsFJfsvZkPWDXkA6ZMsDQ==", - "uXuPA/2KJbb7ZX+NymN3dw==", - "o+nYS4TqJc6XOiuUzEpC3A==", - "8N3mhHt29FZDHn1P2WH1wQ==", - "uZ2gUA74/7Q33tI2TcGQlg==", - "8B12CamjOGzJDnQ+RkUf4w==", - "9FdpxlIFu11qIPdO7WC5nw==", - "G+sGF13VXPH4Ih6XgFEXxg==", - "y+1I05LDAYJ09tKMs3zW6g==", - "gnkadeCgjdmLdlu/AjBZJg==", - "1I+UVx3krrD4NhzO7dgfHQ==", - "8LNNoHe6rEQyJ0ebl151Mw==", - "yOE90OHQdyOfrAgwDvn2gA==", - "ayBGGPEy++biljvGcwIjXA==", - "o/Y4U6rWfsUCXJ72p5CUGw==", - "5kvyy902llnYGQdn2Py04w==", - "6k2cuk0McTThSMW/QRHfjA==", - "2XrR2hjDEvx8MQpHk9dnjw==", - "fv/PW8oexJYWf5De30fdLQ==", - "861mBNvjIkVgkBiocCUj/Q==", - "NKGY0ANVZ0gnUtzVx1pKSw==", - "4DIPP/yWRgRuFqVeqIyxMQ==", - "cgSEbLqqvDsNUyeA3ryJ6Q==", - "xbBxUP9JyY0wDgHDipBHeg==", - "c3WVxyC5ZFtzGeQlH5Gw+w==", - "ZKeTDCboOgCptrjSfgu0xw==", - "DjHszpS8Dgocv3oQkW/VZQ==", - "Iqszlv4R49UevjGxIPMhIA==", - "uChFnF0oCwARhAOz/d47eA==", - "0egBaMnAf0CQEXf1pCIKnA==", - "FnVNxl5AFH1AieYru2ZG+A==", - "2Ct+pLXrK6Ku1f4qehjurQ==", - "x2nSgcTjA3oGgI8mMgiqjw==", - "AUGmvZkpkKBry5bHZn4DJA==", - "x8kRVzohTdhkryvYeMvkMw==", - "rXfWkabSPN+23Ei1bdxfmQ==", - "ElTNyMR4Rg8ApKrPw88WPg==", - "9jxA/t3TQx8dQ+FBsn/YCg==", - "I07W2eDQwe6DVsm1zHKM8A==", - "0p1jMr06OyBoXQuSLYN4aQ==", - "odGhKtO4bDW5R8SYiI5yCg==", - "5Q/Y2V0iSVTK8HE8JerEig==", - "Ily2MKoFI1zr5LxBy93EmQ==", - "8dUcSkd2qnX5lD9B+fUe+Q==", - "80UE+Ivby3nwplO/HA7cPw==", - "sS6QcitMPdvUBLiMXkWQkw==", - "5VY++KiWgo7jXSdFJsPN3A==", - "aY6B28XdPnuYnbOy9uSP8A==", - "ZfRlID+pC1Rr4IY14jolMw==", - "/YuQw7oAF08KDptxJEBS9g==", - "16d+fhFlgayu3ttKVV/pbg==", - "8dBIsHMEAk7aoArLZKDZtg==", - "wRqaDZVHHurp5whOQ1kDbQ==", - "lFUq6PGk9dBRtUuiEW7Cug==", - "FoJZ61VrU8i084pAuoWhDQ==", - "4mig4AMLUw+T/ect9p4CfA==", - "Po0lhBfiMaXhl+vYh1D8gA==", - "z9cd+Qj+ueX34Zf3997MNQ==", - "1dsKN1nG6upj7kKTKuJWsQ==", - "UtLYUlQJ02oKcjNR3l+ktg==", - "O538ibsrI4gkE5tfwjxjmg==", - "G736AX070whraDxChqUrqw==", - "THs1r8ZEPChSGrrhrNTlsA==", - "pVG1hL96/+hQ+58rJJy6/A==", - "1BjsijOzgHt/0i36ZGffoQ==", - "6rIWazDEWU5WPZHLkqznuQ==", - "cdWUm6uLNzR/knuj2x75eA==", - "nsnX3tKkN1elr18E31tXDw==", - "0fnruVOCxEczscBuv4yL9A==", - "SVuEYfQ9FGyVMo1672n0Yg==", - "ZRWyfXyXqAaOEjkzWl949Q==", - "S2MAIYeDQeJ1pl9vhtYtUg==", - "vsRNZx4thFFFPneubKq1Fw==", - "kuWGANwzNRpG4XmY7KjjNg==", - "i6r+mZfyhZyqlYv56o0H+w==", - "wqWqe0KRjZlUIrGgEOG9Mg==", - "t5wh9JGSkQO78QoQoEqvXA==", - "AGoVLd0QPcXnTedT5T95JQ==", - "aRrcmH+Ud3mF1vEXcpEm4w==", - "C65PZm8rZxJ6tTEb6d08Eg==", - "oAHVGBSJ2cf4dVnb/KEYmw==", - "BuDVDLl0OGdomEcr+73XhQ==", - "bLsStF0DDebpO+xulqGNtg==", - "xukOAM0QVsA72qEy0yku9A==", - "LpoayYsTO8WLFLCSh2kf2w==", - "LEVYAE54618FrlXkDN01Kw==", - "Jm862vBTCYbv/V4T1t46+Q==", - "X4kdXUuhcUqMSduqhfLpxA==", - "cLR0Ry4/N5swqga1R6QDMw==", - "0klouNfZRHFFpdHi4ZR2hA==", - "JGx8sTyvr4bLREIhSqpFkw==", - "ZiJ/kJ9GneF3TIEm08lfvQ==", - "hP7dSa8lLn9KTE/Z0s4GVQ==", - "600bwlyhcy754W1E6tuyYg==", - "U49SfOBeqQV9wzsNkboi8Q==", - "5DDb7fFJQEb3XTc3YyOTjg==", - "6uT7LZiWjLnnqnnSEW4e/Q==", - "tq5xUJt8GtjDIh1b48SthQ==", - "eJFIQh/TR7JriMzYiTw4Sg==", - "jdRzkUJrWxrqoyNH9paHfQ==", - "RKVDdE1AkILTFndYWi9wFg==", - "AEpTVUQhIEJGlXJB6rS26A==", - "PD+yHtJxZJ2XEvjIPIJHsQ==", - "dOS+mVCy3rFX9FvpkTxGXA==", - "lz+SeifYXxamOLs1FsFmSQ==", - "QTz21WkhpPjfK8YoBrpo+w==", - "9wUIeSgNN36SFxy8v2unVg==", - "ash1r2J6B0PUxJe8P0otVQ==", - "y7yS9x3yshVhMpDbQtfYOQ==", - "f07bdNVAe9x+cAMdF1bByQ==", - "N2KovXW14hN/6+iWa1Yv3g==", - "2DNbXVgesUa7PgYQ4zX5Lw==", - "WQznrwqvMhUlM3CzmbhAOQ==", - "FpWDTLTDmkUhH/Sgo+g1Gg==", - "OVHqwV8oQMC5KSMzd5VemA==", - "Bv4mNIC72KppYw/nHQxfpQ==", - "MI+HSMRh8KTW+Afiaxd/Fw==", - "10OltdxPXOvfatJuwPVKbQ==", - "y4/HohCJxtt+cT7nLJB08w==", - "RhcqXY4OsZlVVF7ZlkTeRw==", - "/mrqas0eDX+sFUNJvCQY8g==", - "ZIZx4MehWTVXPN9cVQBmyA==", - "z20AAnvj7WsfJeOu3vemlA==", - "dL6n/JsK+Iq6UTbQuo/GOw==", - "rMm9bHK69h0fcMkMdGgeeA==", - "ftsf2qztw3NC78ep/CZXWQ==", - "/n1RLTTVpygre1dl36PDwQ==", - "/FsJYFNe+7UvsSkiotNJEQ==", - "Yy2pPhITTmkEwoudXizHqQ==", - "lizovLQxu6L9sbafNQuShQ==", - "XV5MYe0Q7YMtoBD6/iMdSw==", - "5jHgQF4SfO/zy9xy9t+9dw==", - "16iT/jCcPDrJEfi2bE5F+Q==", - "syeBfQBUmkXNWCZ1GV8xSA==", - "sr3UXbMg5zzkRduFx/as7g==", - "xUXEE7OBBCudsQnuj5ycOA==", - "ojZY7Gi2QJXE/fp6Wy31iA==", - "RlNPyhgYOIn28R4vKCVtYA==", - "KOm8PTa+ICgDrgK9QxCJZw==", - "DJoy1NSZZw87oxWGlNHhfg==", - "jEdanvXKyZdZJG6mj/3FWw==", - "Omr+zPWVucPCSfkgOzLmSQ==", - "71w3aSvuh2mBLtdqJCN3wA==", - "xjTMO2mvtpvwQrounD4e8g==", - "Zz/5VMbw1TqwazReplvsEg==", - "hIjgi20+km+Ks23NJ4VQ6Q==", - "00TVKawojyqrJkC7YqT41Q==", - "YgVpC5d5V6K/BpOD663yQA==", - "wX70jKLKJApHnhyK0r6t3A==", - "lacCCRiWdquNm4YRO7FoKA==", - "cWdlhVZD7NWHUGte24tMjg==", - "t5U+VMsTtlWAAWSW+00SfQ==", - "AMfL0rH+g8c0VqOUSgNzQw==", - "0G93AxGPVwmr66ZOleM90A==", - "9tiibT8V9VwnPOErWGNT3w==", - "+dBv88reDrjEz6a2xX3Hzw==", - "xX6atcCApI08oVLjjLteLg==", - "+YrqTEJlJCv0A2RHQ8tr1A==", - "aqcOby9QyEbizPsgO3g0yw==", - "s/BZAhh1cTV3JCDUQsV8mA==", - "x9VwDdFPp/rJ+SF16ooWYg==", - "k/OVIllJvW6BefaLEPq7DA==", - "rIMXaCaozDvrdpvpWvyZOQ==", - "qQQwJ/aF87BbnLu3okXxaw==", - "TIWSM78m0RprwgPGK/e0JA==", - "r/b5px/UImGNjT/X5sYjuA==", - "7K8l6KoP0BH82/WMLntfrg==", - "gEHGeR2F82OgBeAlnYhRSw==", - "1/SGIab+NnizimUmNDC4wA==", - "WADmxH7R6B4LR+W6HqQQ6A==", - "pcoBh5ic7baSD4TZWb3BSw==", - "es/L9iW8wsyLeC5S4Q8t+g==", - "D175i+2bZ7aWa4quSSkQpA==", - "WQMffxULFKJ+bun6NrCURA==", - "82hTTe1Nr4N2g7zwgGjxkw==", - "oyYtf08AkWLR52bXm5+sKw==", - "8uP4HUnSodw88yoiWXOIcw==", - "x2NpqNnqRihktNzpxmepkQ==", - "x5zMDuW66467ofgL3spLUQ==", - "OMO4pqzfcbQ11YO4nkTXfg==", - "N4/mQFyhDpPzmihjFJJn6w==", - "NN/ymVQNa17JOTGr6ki3eQ==", - "htDbVu1xGhCRd8qoMlBoMg==", - "S47hklz3Ow+n5aY6+qsCoA==", - "ji+1YHlRvzevs3q5Uw1gfA==", - "3Y4w0nETru3SiSVUMcWXqw==", - "XfBOCJwi2dezYzLe316ivw==", - "kMUdiwM7WR8KGOucLK4Brw==", - "V/xG5QFyx1pihimKmAo8ZA==", - "sQskMBELEq86o1SJGQqfzg==", - "6+jhreeBLfw64tJ+Nhyipw==", - "8iYdEleTXGM+Wc85/7vU9w==", - "D7piVoB2NJlBxK5owyo4+g==", - "hDGa2yLwNvgBd/v6mxmQaQ==", - "WLsh3UF4WXdHwgnbKEwRlQ==", - "D5jaV+HtXkSpSxJPmaBDXg==", - "jCgdKXsBCgf7giUKnr6paQ==", - "XqW7UBTobbV4lt1yfh0LZw==", - "EbGG4X18upaiVQmPfwKytg==", - "dXDPnL1ggEoBqR13aaW9HA==", - "Vik8tGNxO0xfdV0pFmmFDw==", - "Swjn3YkWgj0uxbZ1Idtk+A==", - "JPxEncA4IkfBDvpjHsQzig==", - "F5FcNti7lUa9DyF2iEpBug==", - "HJYgUxFZ66fRT8Ka73RaUg==", - "Jbxl8Nw1vlHO9rtu0q/Fpg==", - "fmC+85h5WBuk8fDEUWPjtQ==", - "dZgMquvZmfLqP4EcFaWCiA==", - "XF/yncdoT4ruPeXCxEhl9Q==", - "QJEbr3+42P9yiAfrekKdRQ==", - "Sr9c0ReRpkDYGAiqSy683g==", - "Nr4zGo5VUrjXbI8Lr4YVWQ==", - "NDZWIhhixq7NT8baJUR4VQ==", - "GFRJoPcXlkKSvJRuBOAYHQ==", - "WHutPin+uUEqtrA7L8878A==", - "2rhjiY0O0Lo36wTHjmlNyw==", - "XsF7R12agx/KkRWl0TyXRA==", - "R6cO8GzYfOGTIi773jtkXw==", - "zrZWcqQsUE3ocWE0fG+SOA==", - "uNzpptKjihEfKRo5A1nWmw==", - "gICaI06E9scnisonpvqCsA==", - "TA9WjiLAFgJubLN4StPwLw==", - "sBpytpE38xz0zYeT+0qc2A==", - "Ej7W3+67kCIng3yulXGpRQ==", - "nR3ACzeVF5YcLX6Gj6AGyQ==", - "b0vZfEyuTja2JYMa20Rtbg==", - "f1h+Vp+xmdZsZIziHrB2+g==", - "WzjvUJ4jZAEK7sBqw+m07A==", - "OzMR5D2LriC5yrVd5hchnA==", - "cw1gBLtxH/m4H7dSM7yvFg==", - "CZbd+UoTz0Qu1kkCS3k8Xg==", - "WtT0QAERZSiIt2SFDiAizg==", - "QsquNcCZL9wv7oZFqm64vQ==", - "FXzaxi3nAXBc8WZfFElQeA==", - "Ml3mi1lGS1IspHp3dYYClg==", - "XGAXhUFjORwKmAq9gGEcRg==", - "wOhbpTzmFla8R0kI9OiHaA==", - "qoK2keBg3hdbn7Q24kkVXg==", - "ZAQHWU6RMg4IadOxuaukyw==", - "RiahBXX2JbPzt8baPiP/8g==", - "Qx6rVv9Xj8CBjqikWI9KFA==", - "ZRnR6i+5WKMRfs3BDRBCJg==", - "91LQuW6bMSxl10J/UDX23A==", - "0dIeIM5Zvm5nSVWLy94LWg==", - "Ja3ECL7ClwDrWMTdcSQ6Ug==", - "f6iLrMpxKhFxIlfRsFAuew==", - "iSeH0JFSGK73F470Rhtesw==", - "DwOTyyCoUfaSShHZx9u6xg==", - "rdeftHE7gwAT67wwhCmkYQ==", - "kUhyc3G8Zvx8+q5q5nVEhw==", - "W8bATujVUT80v2XGJTKXDg==", - "dMRx4Mf6LrN64tiJuyWmDw==", - "9cvHJmim9e0pOaoUEtiM6A==", - "RHToSGASrwEmvzjX6VPvNQ==", - "V7eji28JSg3vTi30BCS7gw==", - "4+htiqjEz9oq0YcI/ErBVg==", - "jKJn4czwUl/6wtZklcMsSg==", - "bvyB6OEwhwCIfJ6KRhjnRw==", - "59ipbMH7cKBsF9bNf4PLeQ==", - "M/cQja3uIk1im9++brbBOA==", - "AChOz8avRYsvxlbWcorQ3w==", - "FcKjlHKfQAGoovtpf+DxWQ==", - "y+cl1/Knb9MZPz8nBB0M+w==", - "b8BZV1NfBdLi70ir4vYvZg==", - "aFJuE/s+Kbge4ppn+wulkA==", - "CWBGcRFYwZ0va6115vV/oQ==", - "glnqaRfwm6NxivtB2nySzw==", - "mPk1IsU5DmDFA/Ym5+1ojw==", - "LGwcvetzQ3QqKjNh5vA8vw==", - "yctId8ltkl3+xqi9bj+RqA==", - "spJI3xFUlpCDqzg0XCxopA==", - "V8m51xgUgywRoV6BGKUrgg==", - "rgcXxjx3pDLotH7TTfAoZw==", - "/TSsi/AwKHtP6kQaeReI3w==", - "8dbyfox/isKLsnVjQNsEXg==", - "MOrAbuJTyGKPC6MgYJlx5Q==", - "uNWFZlP7DA96sf+LWiAhtQ==", - "hNHqznsrIVRSQdII6crkww==", - "GT6WUDXiheKAM7tPg3he9A==", - "JC8Q+8yOJ52NvtVeyHo68w==", - "HMQarkPWOUDIg5+5ja2dBQ==", - "nknBKPgb7US42v8A0fTl/w==", - "fDOUzPTU2ndpbH0vgkgrJQ==", - "GTNttXfMniNhrbhn92Aykg==", - "D2JcY4zWwqaCKebLM8lPiQ==", - "/c34NtdUZAHWIwGl3JM8Tw==", - "/G26n5Xoviqldr5sg/Jl3w==", - "GF0lY77rx1NQzAsZpFtXIQ==", - "BMOi5JmFUg5sCkbTTffXHw==", - "R+beucURp/H5jLs4kW6wmg==", - "xfYZ6qhWNBqqJ0PdWRjOwA==", - "Ahpi9+nl13kPTdzL+jgqMw==", - "oIU19xAvLJwQSZzIH577aA==", - "50xwiYvGQytEDyVgeeOnMg==", - "M0ESOGwJ4WZ4Ons1ljP0bQ==", - "fS471/rN4K2m10mUwGFuLg==", - "RrE3B3X/SJi3CqCUlTYwaw==", - "oDca3JEdRb4vONT9GUUsaQ==", - "pHo1O5zrCHCiLvopP2xaWw==", - "7sCJ4RxbxRqVnF4MBoKfuQ==", - "7R5rFaXCxM3moIUtoCfM2g==", - "4rrSL6N0wyucuxeRELfAmw==", - "9Gkw+hvsR/tFY1cO89topg==", - "aw4CzX8pYbPVMuNrGCEcWg==", - "KyLQxi5UP+qOiyZl0PoHNQ==", - "T1pMWdoNDpIsHF8nKuOn2A==", - "Qv6wWP4PpycDGxe7EZNSCw==", - "ZJc7GV0Yb6MrXkpDVIuc8g==", - "aXrbsro7KLV8s4I4NMi4Eg==", - "7k5rBuh8FbTTI4TP87wBPQ==", - "NRyFx6jqO/oo9ojvbYzsAg==", - "P7eMlOz9YUcJO+pJy0Kpkw==", - "jpjpNjL1IKzJdGqWujhxCw==", - "9k1u/5TgPmXrsx3/NsYUhg==", - "c1wbFbN7AdUERO/xVPJlgw==", - "Yw4ztKv6yqxK9U1L0noFXg==", - "GnJKlRzmgKN9vWyGfMq3aA==", - "91VcAVv7YDzkC1XtluPigw==", - "h1NNwMy0RjQmLloSw1hvdg==", - "pzC8Y0Vj9MPBy3YXR32z6w==", - "UTmTgvl+vGiCDQpLXyVgOg==", - "CzWhuxwYbNB/Ffj/uSCtbw==", - "VOB+9Bcfu8aHKGdNO0iMRw==", - "X2Tawm2Cra6H7WtXi1Z4Qw==", - "6cTETZ9iebhWl+4W5CB+YQ==", - "X4hrgqMIcApsjA9qOWBoCw==", - "1buQEv2YlH/ljTgH0uJEtw==", - "FH5Z60RXXUiDk+dSZBxD3g==", - "FI2WhaSMb3guFLe3e9il8Q==", - "O/EizzJSuFY8MpusBRn7Tg==", - "b6rrRA0W247O+FfvDHbVCQ==", - "ng1Q0A7ljho3TUWWYl46sw==", - "1Ym0lyBJ9aFjhJb/GdUPvQ==", - "+OXdvbTxHtSoLg7bZMho4w==", - "cuQslgfqD2VOMhAdnApHrA==", - "pCQmlnn3BxhsV2GwqjRhXg==", - "6PzjncEw2wHZg7SP7SQk9w==", - "nqtQI1bSM7DCO9P1jGV97Q==", - "O1ckWUwuhD44MswpaD6/rw==", - "RUmhye56tQu9xXs4SRJpOQ==", - "llujnWE17U8MIHmx4SbrSA==", - "UwqBVd4Wfias4ElOjk2BzQ==", - "kBAB2PSjXwqoQOXNrv80AA==", - "w1zN28mSrI/gqHsgs4ME3A==", - "301utVPZ93AnPLYbsiJggw==", - "qIFpKKwUmztsBpJgMaVvSg==", - "QmcURiMzmVeUNaYPSOtTTg==", - "x/MpsQvziUpW40nNUHDS5Q==", - "t1O9jSNjg4DTIv/Za4NbtA==", - "1B5gxGQSGzVKoNd5Ol4N7g==", - "81iQLU+YwxNwq4of6e9z7A==", - "x0eIHCvQLd2jdDaXwSWTYQ==", - "96ORaz1JRHY1Gk8H74+C2g==", - "bNDKcFu8T5Y6OoLSV+o/Sw==", - "WrJMOuXSLKKzgmIDALkyNw==", - "+gpHnUj2GWocP74t5XWz4w==", - "z5DveTu377UW8IHnsiUGZg==", - "irnD9K8bsT+up/JUrxPw6A==", - "ginkFyNVMwkZLE49AbfqfA==", - "2hEzujfG3mR5uQJXbvOPTQ==", - "E9yeifEZtpqlD0N3pomnGw==", - "OpC/sL320wl5anx6AVEL+A==", - "D7wN7b5u5PKkMaLJBP9Ksw==", - "83WGpQGWyt6mCV+emaomog==", - "X6ulLp4noBgefQTsbuIbYQ==", - "BH+rkZWQjTp7au6vtll/CQ==", - "Ex3x5HeDPhgO2S9jjCFy4g==", - "YNqIHCmBp/EbCgaPKJ7phw==", - "312g8iTB9oJgk/OqcgR7Cw==", - "LcF0OqPWrcpHby8RwXz1Yg==", - "gaEtlJtD6ZjF5Ftx0IFt0A==", - "bvbMJZMHScwjJALxEyGIyg==", - "StoXC7TBzyRViPzytAlzyQ==", - "XqFSbgvgZn0CpaZoZiRauQ==", - "AqHVaj3JcR44hnMzUPvVYg==", - "jTg9Y6EfpON4CRFOq0QovA==", - "q/siBRjx6wNu+OTvpFKDwA==", - "goSgZ8N5UbT5NMnW3PjIlQ==", - "9onh6QKp70glZk9cX3s34A==", - "o5XVEpdP4OXH0NEO4Yfc/A==", - "a5gZ5uuRrXEAjgaoh7PXAg==", - "PaROi5U16Tk35p0EKX5JpA==", - "dtnE401dC0zRWU0S/QOTAg==", - "7J3FoFGuTIW36q0PZkgBiw==", - "hiYg+aVzdBUDCG0CXz9kCw==", - "vhdFtKVH4bVatb4n8KzeXw==", - "DWKsPfKDAtfuwgmc2dKUNg==", - "M2JMnViESVHTZaru6LDM6w==", - "G/PA+kt0N+jXDVKjR/054A==", - "6rqK8sjLPJUIp7ohkEwfZg==", - "wajwXfWz2J+O+NVaj6j2UQ==", - "C4QEzQKGxyRi2rjwioHttA==", - "N/HgDydvaXuJvTCBhG/KtA==", - "6erpZS36qZRXeZ9RN9L+kw==", - "bbBsi6tXMVWyq3SDVTIXUg==", - "aySnrShOW4/xRSzl/dtSKQ==", - "rxfACPLtKXbYua18l3WlUw==", - "L4+C6I7ausPl6JbIbmozAg==", - "R3ijnutzvK6IKV3AKHQZSA==", - "leDlMcM+B1mDE8k5SWtUeg==", - "KGI/cXVz6v6CfL8H6akcUQ==", - "NtwqUO3SKZE/9MXLbTJo/g==", - "dJHKDkfMFJeoULg7U4wwDQ==", - "IEz72W2/W8xBx5aCobUFOQ==", - "wUYhs4j3W9nIywu1HIv2JA==", - "GzbeM7snhe+M+J7X+gAsQw==", - "3/1puZTGSrD9qNKPGaUZww==", - "eKQCVzLuzoCLcB4im8147A==", - "CCK+6Dr72G3WlNCzV7nmqw==", - "CJoZn5wdTXbhrWO5LkiW0g==", - "bJ1cZW7KsXmoLw0BcoppJg==", - "OlpA9HsF8MBh7b45WZSSlg==", - "JZRjdJLgZ+S0ieWVDj8IJg==", - "uhT12XY79CtbwhcSfAmAXQ==", - "isep9d+Q7DEUf0W7CJJYzw==", - "K9A87aMlJC8XB9LuFM913g==", - "uqe3rFveJ2JIkcZQ3ZMXHQ==", - "0e8hM3E5tnABRyy29A8yFw==", - "4iiCq+HhC+hPMldNQMt0NA==", - "X4o0OkTz0ec70mzgwRfltA==", - "1E3pMgAHOnHx3ALdNoHr8Q==", - "xNilc7UOu1kyP0+nK5MrLw==", - "DQlZWBgdTCoYB1tJrNS5YQ==", - "iruDC5MeywV4yA8o1tw/KQ==", - "z+1oDVy8GJ5u/UDF+bIQdA==", - "uExgqZkkJnZj252l5dKAGg==", - "ZgdpqFrVGiaHkh9o3rDszg==", - "5N2oi2pB69NxeNt08yPLhw==", - "G37U8XTFyshfCs7qzFxATg==", - "0ZEC3hy411LkOhKblvTcqg==", - "ITZ3P47ALS0JguFms6/cDA==", - "WWN44lbUnEdHmxSfMCZc6w==", - "r2f2MyT+ww1g9uEBzdYI1w==", - "ZvvxwDd0I6MsYd7aobjLUA==", - "uQs79rbD/wEakMUxqMI48A==", - "022B0oiRMx8Xb4Af98mTvQ==", - "afMd/Hr3rYz/l7a3CfdDjg==", - "xmsYnsJq78/f9xuKuQ2pBQ==", - "dFetwmFw+D6bPMAZodUMZQ==", - "TBQpcKq2huNC5OmI2wzRQw==", - "skrQRB9xbOsiSA19YgAdIQ==", - "anyANMnNkUqr3JuPJz5Qzw==", - "6QUGE2S8oFYx4T4nW56cCw==", - "rwtF86ZAbWyKI6kLn4+KBw==", - "6txm8z4/LGCH0cpaet/Hsg==", - "wdRyYjaM11VmqkkxV/5bsA==", - "+k5lDb+QdNc9iZ01hL5yBg==", - "k/pBSWE2BvUsvJhA9Zl5uw==", - "jQjyjWCEo9nWFjP4O8lehw==", - "R6Me6sSGP5xpNI8R0xGOWw==", - "9+hjTVMQUsvVKs7Tmp52tg==", - "VQIpquUqmeyt/q6OgxzduQ==", - "KXvdjZ3rRKn60djPTCENGA==", - "5HovoyHtul8lXh+z8ywq9A==", - "1+XWdu4qCqLLVjqkKz3nmA==", - "LCj4hI520tA685Sscq6uLw==", - "b53qqLnrTBthRXmmnuXWvw==", - "WTr3q/gDkmB4Zyj7Ly20+w==", - "FbxScyuRacAQkdQ034ShTA==", - "qaTdVEeZ6S8NMOxfm+wOMA==", - "ZNrjP1fLdQpGykFXoLBNPw==", - "/Bwpt5fllzDHq2Ul6v86fA==", - "/mFp3GFkGNLhx2CiDvJv4A==", - "RppDe/WGt1Ed6Vqg1+cCkQ==", - "6M6QapJ5xtMXfiD3bMaiLA==", - "Ghuj9hAyfehmYgebBktfgA==", - "GncGQgmWpI/fZyb/6zaFCg==", - "R1TCCfgltnXBvt5AiUnCtQ==", - "5NEP7Xt7ynj6xCzWzt21hQ==", - "4yEkKp2FYZ09mAhw2IcrrA==", - "y2Tn2gmhKs5WKc01ce74rg==", - "wnfYUctNK+UPwefX5y4/Rw==", - "BV1moliPL15M14xkL+H1zw==", - "80C9TB9/XT1gGFfQDJxRoA==", - "yL1DwlIIREPuyuCFULi0uw==", - "D09afzGpwCEH0EgZUSmIZA==", - "eCy/T+a8kXggn1L8SQwgvA==", - "+dIEf5FBrHpkjmwUmGS6eg==", - "kzXsrxWRnWhkA82LsLRYog==", - "Nf9fbRHm844KZ2sqUjNgkA==", - "XAq/C+XyR6m3uzzLlMWO5Q==", - "jiV+b/1EFMnHG6J0hHpzBg==", - "HK0yf7F97bkf1VYCrEFoWA==", - "Cz1G77hsDtAjpe0WzEgQog==", - "xdCCdP8SNBOK3IsX6PiPQA==", - "8snljTGo/uICl9q0Hxy7/A==", - "sLdxIKap0ZfC3GpUk3gjog==", - "IA1jmtfpYkz/E2wD0+27WA==", - "PPa7BDMpRdxJdBxkuWCxKA==", - "CuGIxWhRLN7AalafBZLCKQ==", - "MWcV03ULc0vSt/pFPYPvFA==", - "QVwuN66yPajcjiRnVk/V8g==", - "aLY2pCT0WfFO5EJyinLpPg==", - "dGrf9SWJ13+eWS6BtmKCNw==", - "YtZ8CYfnIpMd2FFA5fJ+1Q==", - "Umd+5fTcxa3mzRFDL9Z8Ww==", - "Al8+d/dlOA5BXsUc5GL8Tg==", - "/KYZdUWrkfxSsIrp46xxow==", - "kr8tw1+3NxoPExnAtTmfxg==", - "PwvPBc+4L73xK22S9kTrdA==", - "VWNDBOtjiiI4uVNntOlu/A==", - "lJFPmPWcDzDp5B2S8Ad8AA==", - "Mofqu40zMRrlcGRLS42eBw==", - "BuENxPg7JNrWXcCxBltOPg==", - "nmD7fEU4u7/4+W/pkC4/0Q==", - "axEl7xXt/bwlvxKhI7hx4g==", - "W04GeDh+Tk/I1S85KlozRA==", - "tVw8U1AsslIFmQs4H1xshg==", - "TSPFvkgw6uLsJh66Ou0H9w==", - "IYIbEaErHoFBn8sTT9ICIQ==", - "WBu0gJmmjVdVbjDmQOkU6w==", - "ZgjifTVKmxOieco81gnccQ==", - "ZrCnZB/U/vcqEtI1cSvnww==", - "2D6yhuABiaFFoXz0Lh0C+w==", - "SfwnYZCKP1iUJyU1yq4eKg==", - "tsiqwelcBAMU/HpLGBtMGw==", - "S9L29U2P5K8wNW+sWbiH7w==", - "sGLPmr568+SalaQr8SE/PA==", - "Hm6MG6BXbAGURVJKWRM6ZA==", - "euxzbIq4vfGYoY3s1QmLcw==", - "/FchS2nPezycB8Bcqc2dbg==", - "ZKvox7BaQg4/p5jIX69Umw==", - "HkbdaMuDTPBDnt3wAn5RpQ==", - "eddhS+FkXxiUnbPoCd5JJw==", - "Muf2Eafcf9G3U2ZvQ9OgtQ==", - "a7Pv1SOWYnkhIUC22dhdDA==", - "O839JUrR+JS30/nOp428QA==", - "2qK2ZEY9LgdKSTaLf6VnLA==", - "BTiGLT6XdZIpFBc91IJY6g==", - "EqYq2aVOrdX5r7hBqUJP7g==", - "SIuKH/Qediq0TyvqUF93HQ==", - "c5ymZKqx/td1MiS2ERiz9A==", - "rqucO37p86LpzehR/asCSQ==", - "1tpM0qgdo7JDFwvT0TD78g==", - "Ar1Eb/f/LtuIjXnnVPYQlA==", - "V8q+xz4ljszLZMrOMOngug==", - "P5WPQc5NOaK7WQiRtFabkw==", - "Xo8ZjXOIoXlBjFCGdlPuZw==", - "jTmPbq+wh30+yJ/dRXk1cA==", - "KSumhnbKxMXQDkZIpDSWmQ==", - "Kh/J1NpDBGoyDU+Mrnnxkg==", - "3BjLFon1Il0SsjxHE2A1LQ==", - "dml2gqLPsKpbIZ93zTXwCQ==", - "ZyoaR1cMiKAsElmYZqKjLA==", - "vnOJ3e9Zd4wPx8PX7QgZzQ==", - "2melaInV0wnhBpiI3da6/A==", - "mUek9NkXm8HiVhQ6YXiyzA==", - "RZTpYKxOAH9JgF1QFGN+hw==", - "a/Y6IAVFv0ykRs9WD+ming==", - "yhRi5M9Etuu9HSu4d24i3w==", - "+1gcqAqaRZwCj5BGiZp3CA==", - "o1zeXHJEKevURAAbUE/Vog==", - "cvOg7N4DmTM+ok1NBLyBiQ==", - "uPdjKJIGzN7pbGZDZdCGaA==", - "REnDNe9mGfqVGZt+GdsmjQ==", - "XqTK/2QuGWj50tGmiDxysA==", - "bL2FuwsPT7a7oserJQnPcw==", - "uO+uK1DntCxVRr1KttfUIw==", - "Xconi1dtldH90Wou9swggw==", - "HRF3WL/ue3/QlYyu7NUTrA==", - "5LuFDNKzMd2BzpWEIYO2Ww==", - "dNTU+/2DdZyGGTdc+3KMhQ==", - "H+NHjk/GJDh/GaNzMQSzjg==", - "/Ph/6l/lFNVqxAje1+PgFA==", - "4WRdAjiUmOQg2MahsunjAg==", - "j+lDhAnWAyso+1N8cm85hQ==", - "nFBXCPeiwxK9mLXPScXzTA==", - "vGKknndb4j6VTV8DxeT4fQ==", - "fdqt93OrpG13KAJ5cASvkg==", - "1MIn73MLroxXirrb+vyg2Q==", - "Q7teXmTHAC5qBy+t7ugf0w==", - "bWwtTFlhO3xEh/pdw0uWaQ==", - "Omi2ZB9kdR1HrVP2nueQkA==", - "+ZozWaPWw8ws1cE5DJACeg==", - "3FH4D31nKV13sC9RpRZFIg==", - "4kXlJNuT79XXf1HuuFOlHw==", - "36XDmX6j542q+Oei1/x0gw==", - "MqqDg9Iyt4k3vYVW5F+LDw==", - "cvrGmub2LoJ+FaM5HTPt9A==", - "uC2lzm7HaMAoczJO6Z/IhQ==", - "MnStiFQAr3QlaRZ02SYGaQ==", - "ZuayB6IpbeITokKGVi9R5w==", - "FtxpWdhEmC6MT61qQv4DGA==", - "KujFdhhgB9q4oJfjYMSsLg==", - "ZV8mEgJweIYk0/l0BFKetA==", - "gDLjxT7vm07arF4SRX5/Vg==", - "/MEOgAhwb7F0nBnV4tIRZA==", - "k2KP9oPMnHmFlZO6u6tgyw==", - "fbTm027Ms0/tEzbGnKZMDA==", - "HOi+vsGAae4vhr+lJ5ATnQ==", - "9Bet5waJF5/ZvsYaHUVEjQ==", - "Wd0dOs7eIMqW5wnILTQBtg==", - "z/e5M2lE9qh3bzB97jZCKA==", - "b16O4LF7sVqB7aLU2f3F1A==", - "lsBTMnse2BgPS6wvPbe7JA==", - "0nOg18ZJ/NicqVUz5Jr0Hg==", - "MFeXfNZy6Q9wBfZmPQy3xg==", - "ksOFI9C7IrDNk4OP6SpPgw==", - "NquRbPn8fFQhBrUCQeRRoQ==", - "ccmy4GVuX967KaQyycmO0w==", - "DY0IolKTYlW+jbKLPAlYjQ==", - "aJFbBhYtMbTyMFBFIz/dTA==", - "9pdeedz1UZUlv8jPfPeZ1g==", - "qZ2q5j2gH3O56xqxkNhlIA==", - "N7fHwb397tuQHtBz1P80ZQ==", - "uOkMpYy/7DYYoethJdixfQ==", - "E9ajQQMe02gyUiW3YLjO/A==", - "dFSavcNwGd8OaLUdWq3sng==", - "TAD0Lk95CD86vbwrcRogaQ==", - "jLI3XpVfjJ6IzrwOc4g9Pw==", - "CzP13PM/mNpJcJg8JD3s6w==", - "GSWncBq4nwomZCBoxCULww==", - "9k17UqdR1HzlF7OBAjpREA==", - "TrWS+reCJ0vbrDNT5HDR9w==", - "CXMKIdGvm60bgfsNc+Imvg==", - "6NP81geiL14BeQW6TpLnUA==", - "hW9DJA1YCxHmVUAF7rhSmQ==", - "8M0kSvjn5KN8bjsMdUqKZQ==", - "eS/vTdSlMUnpmnl1PbHjyw==", - "h2B0ty0GobQhDnFqmKOpKQ==", - "n7KL1Kv027TSxBVwzt9qeA==", - "yYmnM/WOgi+48Rw7foGyXA==", - "FhthAO5IkMyW4dFwpFS7RA==", - "81ZH3SO0NrOO+xoR/Ngw1g==", - "t7HaNlXL16fVwjgSXmeOAQ==", - "N+K1ibXAOyMWdfYctNDSZQ==", - "yQCLV9IoPyXEOaj3IdFMWw==", - "3+zsjCi7TnJhti//YXK35w==", - "600mjiWke4u0CDaSQKLOOg==", - "K4VS+DDkTdBblG93l2eNkA==", - "5KOgetfZR+O2wHQSKt41BQ==", - "kj5WqpRCjWAfjM7ULMcuPQ==", - "AxEjImKz4tMFieSo7m60Sg==", - "jp5Em/0Ml4Txr1ptTUQjpg==", - "jQVlDU+HjZ2OHSDBidxX5A==", - "4NHQwbb3zWq2klqbT/pG6g==", - "PeJS+mXnAA6jQ0WxybRQ8w==", - "l6Ssc04/CnsqUua9ELu2iQ==", - "nFPDZGZowr3XXLmDVpo7hg==", - "yYBIS9PZbKo7Gram7IXWPA==", - "/HU2+fBqfWTEuqINc0UZSA==", - "adT+OjEB2kqpeYi4kQ6FPg==", - "GW1Uaq622QamiiF24QUA0g==", - "rTwJggSxTbwIYdp07ly0LA==", - "4yrFNgqWq17zVCyffULocA==", - "vvh9vAIrXjIwLVkuJb5oDQ==", - "C7UaoIEXsVRxjeA0u99Qmw==", - "x1A74vg/hwwjAx6GrkU8zw==", - "7XRiYvytcwscemlxd9iXIQ==", - "64AA4jLHXc1Dp15aMaGVcA==", - "u/QxrP1NOM/bOJlJlsi/jQ==", - "5M3dFrAOemzQ0MAbA8bI5w==", - "wyqmQGB6vgRVrYtmB2vB7w==", - "8vLA9MOdmLTo3Qg+/2GzLA==", - "/u5W2Gab4GgCMIc4KTp2mg==", - "lhAOM81Ej6YZYBu45pQYgg==", - "MArbGuIAGnw4+fw6mZIxaw==", - "ZZImGypBWwYOAW43xDRWCQ==", - "L2IeUnATZHqOPcrnW2APbA==", - "bQKkL+/KUCsAXlwwIH0N3w==", - "f09F7+1LRolRL5nZTcfKGA==", - "hPnPQOhz4QKhZi02KD6C+A==", - "78b8sDBp28zUlYPV5UTnYw==", - "iVDd2Zk7vwmEh97LkOONpQ==", - "LHQETSI5zsejvDaPpsO29g==", - "Yjm5tSq1ejZn3aWqqysNvA==", - "gkrg0NR0iCaL7edq0vtewA==", - "Lo1xTCEWSxVuIGEbBEkVxA==", - "8GyPup4QAiolFJ9v80/Nkw==", - "3L3KEBHhgDwH615w4OvgZA==", - "hJSP7CostefBkJrwVEjKHA==", - "9oQ/SVNJ4Ye9lq8AaguGAQ==", - "n7Bns42aTungqxKkRfQ5OQ==", - "K5lhaAIZkGeP5rH2ebSJFw==", - "ZaPsR9X77SNt7dLjMJUh8A==", - "18ndtDM9UaNfBR1cr3SHdA==", - "0QbH4oI8IjZ9BRcqRyvvDQ==", - "J/eAtAPswMELIj8K2ai+Xg==", - "qenHZKKlTUiEFv6goKM/Mw==", - "vjrSYGUpeKOtJ2cNgLFg2g==", - "DA+3fjr7mgpwf6BZcExj0w==", - "rh7bzsTQ1UZjG7amysr0Gg==", - "tFMJRXfWE9g78O1uBUxeqQ==", - "e/nWuo5YalCAFKsoJmFyFA==", - "gqehq46BhFX2YLknuMv02w==", - "Uudn69Kcv2CGz2FbfJSSEA==", - "Otz/PgYOEZ1CQDW54FWJIQ==", - "IwfeA6d0cT4nDTCCRhK+pA==", - "jgNijyoj2JrQNSlUv4gk4A==", - "KzWdWPP2gH0DoMYV4ndJRg==", - "pv/m2mA/RJiEQu2Qyfv9RA==", - "ATmMzriwGLl+M3ppkfcZNA==", - "tVvWdA+JqH0HR2OlNVRoag==", - "n6QVaozMGniCO0PCwGQZ6w==", - "gU3gu8Y5CYVPqHrZmLYHbQ==", - "cBBOQn7ZjxDku0CUrxq2ng==", - "w+jzM0I5DRzoUiLS/9QIMQ==", - "MLlVniZ08FHAS5xe+ZKRaA==", - "wMyJLQJdmrC2TSeFkIuSvQ==", - "dG98w8MynOoX7aWmkvt+jg==", - "zm+z+OOyHhljV2TjA3U9zw==", - "Tk5MAqd1gyHpkYi8ErlbWg==", - "g6zSo8BvLuKqdmBFM1ejLA==", - "d0VAZLbLcDUgLgIfT1GmVQ==", - "SNPYH4r/J9vpciGN2ybP5Q==", - "XA2hUgq3GVPpxtRYiqnclg==", - "fVCRaPsTCKEVLkoF4y3zEw==", - "FpgdsQ2OG+bVEy3AeuLXFQ==", - "JquDByOmaQEpFb47ZJ4+JA==", - "e369ZIQjxMZJtopA//G55Q==", - "Nsd+DfRX6L54xs+iWeMjCQ==", - "+/UCpAhZhz368iGioEO8aQ==", - "e5l9ZiNWXglpw6nVCtO8JQ==", - "Cl1u5nGyXaoGyDmNdt38Bw==", - "6sNP0rzCCm3w976I2q2s/w==", - "qcpeZWUlPllQYZU6mHVwUw==", - "kzYddqiMsY3EYrpxve2/CQ==", - "3iC21ByW/YVL+pSyppanWw==", - "3HPOzIZxoaQAmWRy9OkoSg==", - "xsCZVhCk2qJmOqvUjK3Y8Q==", - "i2sSvrTh/RdLJX0uKhbrew==", - "7Y87wVJok20UfuwkGbXxLg==", - "ibsb1ncaLZXAYgGkMO7tjQ==", - "+VfRcTBQ80KSeJRdg0cDfw==", - "kgKWQJJQKLUuD2VYKIKvxA==", - "ARKIvf4+zRF8eCvUITWPng==", - "1fztTtQWNMIMSAc5Hr6jMQ==", - "md6zNd7ZBn3qArYqQz7/fw==", - "kvAaIJb+aRAfKK104dxFAA==", - "UIXytIHyVODxlrg+eQoARA==", - "Dk0L/lQizPEb3Qud6VHb1Q==", - "64YsV2qeDxk2Q6WK/h7OqA==", - "90dtIMq0ozJXezT2r79vMQ==", - "wy/Z8505o4sVovk4UuBp1A==", - "ytDXLDBqWiU1w3sTurYmaw==", - "9pk75mBzhmcdT+koHvgDlw==", - "DQeib845UqBMEl96sqsaSg==", - "UPYR575ASaBSZIR3aX1IgQ==", - "swsVVsPi/5aPFBGP+jmPIw==", - "1cj1Fpd3+UiBAOahEhsluA==", - "ifuJCv9ZA84Vz1FYAPsyEA==", - "uu+ncs63SdQIvG6z4r7Q3Q==", - "UvC1WADanMrhT+gPp/yVqA==", - "llOvGOUDVfX68jKnAlvVRA==", - "SusSOsWNoAerAIMBVWHtfA==", - "VznvTPAAwAev+yhl9oZT0w==", - "luR/kvHLwA6tSdLeTM4TzA==", - "PcdBtV8pfKU0YbDpsjPgwg==", - "5l6kDfjtZjkTZPJvNNOVFw==", - "4FBBtWPvqJ3dv4w25tRHiQ==", - "JJbzQ/trOeqQomsKXKwUpQ==", - "0bj069wXgEJbw7dpiPr8Tg==", - "tejpAZp7y32SO2+o4OGvwQ==", - "kq26VyDyJTH/eM6QvS2cMw==", - "+zBkeHF4P8vLzk1iO1Zn3Q==", - "BzkNYH03gF/mQY71RwO3VA==", - "RnxOYPSQdHS6fw4KkDJtrA==", - "65KhGKUBFQubRRIEdh9SwQ==", - "k1DPiH6NkOFXP/r3N12GyA==", - "DqzWt1gfyu/e7RQl5zWnuQ==", - "gnez1VrH+UHT8C/SB9qGdA==", - "vZtL0yWpSIA+9v8i23bZSg==", - "FNvQqYoe0s/SogpAB7Hr1Q==", - "6nwR+e9Qw0qp8qIwH9S/Mg==", - "BPT4PQxeQcsZsUQl33VGmg==", - "rOYeIcB+Rg5V6JG2k4zS2w==", - "Je1UESovkBa9T6wS0hevLw==", - "HFHMGgfOeO0UPrray1G+Zw==", - "NBmB/cQfS+ipERd7j9+oVg==", - "iIm8c9uDotr87Aij+4vnMw==", - "S3VQa6DH+BdlSrxT/g6B5g==", - "BwRA+tMtwEvth28IwpZx+w==", - "vg3jozLXEmAnmJwdfcEN0g==", - "gW0oKhtQQ7BxozxUWw5XvQ==", - "Q6vGRQiNwoyz7bDETGvi5g==", - "Ak3rlzEOds6ykivfg39xmw==", - "G4qzBI1sFP2faN+tlRL/Bw==", - "ND9l4JWcncRaSLATsq0LVw==", - "yQmNZnp/JZywbBiZs3gecA==", - "ZoNSxARrRiKZF5Wvpg7bew==", - "GhpJfRSWZigLg/azTssyVA==", - "QyyiJ5I/OZC50o89fa5EmQ==", - "4kj0S8XlmhHXoUP7dQItUw==", - "Dt8Q5ORzTmpPR2Wdk0k+Aw==", - "/hFhjFGJx2wRfz6hyrIpvA==", - "eFimq+LuHi42byKnBeqnZQ==", - "JrKGKAKdjfAaYeQH8Y2ZRQ==", - "JFFeXsFsMA59iNtZey7LAA==", - "91SdBFJEZ65M+ixGaprY/A==", - "+S+WXgVDSU1oGmCzGwuT3g==", - "1X14kHeKwGmLeYqpe60XEA==", - "4xojeUxTFmMLGm6jiMYh/Q==", - "+1e7jvUo8f2/2l0TFrQqfA==", - "8WU1vLKV1GhrL7oS9PpABg==", - "DYWCPUq/hpjr6puBE7KBHg==", - "birqO8GOwGEI97zYaHyAuw==", - "6e8boFcyc8iF0/tHVje4eQ==", - "FLvED9nB9FEl9LqPn7OOrA==", - "ji306HRiq965zb8EZD2uig==", - "AklOdt9/2//3ylUhWebHRw==", - "VGRCSrgGTkBNb8sve0fYnQ==", - "oqlkgrYe9aCOwHXddxuyag==", - "KXuFON8tMBizNkCC48ICLA==", - "9aKH1u5+4lgYhhLztQ4KWA==", - "3hVslsq98QCDIiO40JNOuA==", - "OOS6wQCJsXH8CsWEidB35A==", - "YXHQ3JI9+oca8pc/jMH6mA==", - "V9vkAanK+Pkc4FGAokJsTA==", - "OFLn4wun6lq484I7f6yEwg==", - "3WVBP9fyAiBPZAq3DpMwOQ==", - "5gGoDPTc/sOIDLngmlEq4A==", - "E2lvMXqHdTw0x+KCKVnblg==", - "f1Gs++Iilgq9GHukcnBG3w==", - "uIkVijg7RPi/1j7c18G1qA==", - "9T7gB0ZkdWB0VpbKIXiujQ==", - "KCJJfgLe00+tjSfP6EBcUg==", - "WbAdlac/PhYUq7J2+n5f+w==", - "GLnS9wDCje7TOMvBX9jJVA==", - "VAg/aU5nl72O+cdNuPRO4g==", - "kzTl7WH/JXsX1fqgnuTOgw==", - "1HDgfU7xU7LWO/BXsODZAQ==", - "D0W5F7gKMljoG5rlue1jrg==", - "9reBKZ1Rp6xcdH1pFQacjw==", - "SSKhl2L3Mvy93DcZulADtA==", - "hlu7os0KtAkpBTBV6D2jyQ==", - "sfte/o9vVNyida/yLvqADA==", - "gYGQBLo5TdMyXks0LsZhsQ==", - "dNq2InSVDGnYXjkxPNPRxA==", - "fiv0DJivQeqUkrzDNlluRw==", - "msstzxq++XO0AqNTmA7Bmg==", - "DCjgaGV5hgSVtFY5tcwkuA==", - "aMmrAzoRWLOMPHhBuxczKg==", - "qNOSm15bdkIDSc/iUr+UTQ==", - "2nSTEYzLK77h5Rgyti+ULQ==", - "BhKO1s1O693Fjy1LItR/Jw==", - "kRnBEH6ILR5GNSmjHYOclw==", - "R97chlspND/sE9/HMScXjQ==", - "1Oykse0jQVbuR3MvW5ot4A==", - "Dmyb+a7/QFsU4d2cVQsxDw==", - "W5now3RWSzzMDAxsHSl++Q==", - "IrDuBrVu1HWm0BthAHyOLQ==", - "V6zyoX6MERIybGhhULnZiw==", - "ZQSDYgpsimK+lYGdXBWE/w==", - "lV70RNlE++04G1KFB3BMXA==", - "QmSBVvdk0tqH9RAicXq2zA==", - "qNyy6Fc0b8oOMWqqaliZ/w==", - "xvipmmwKdYt4eoKvvRnjEg==", - "Q7Df6zGwvb4rC+EtIKfaSw==", - "n1M2dgFPpmaICP+JwxHUug==", - "1k8tL2xmGFVYMgKUcmDcEw==", - "fFvXa1dbMoOOoWZdHxPGjw==", - "UP9mmAKzeQqGhod7NCqzhg==", - "PMCWKgog/G+GFZcIruSONw==", - "dnvatwSEcl73ROwcZ4bbIQ==", - "hY82j+sUQQRpCi6CCGea5A==", - "QoUC9nyK1BAzoUVnBLV2zw==", - "+aF4ilbjQbLpAuFXQEYMWQ==", - "XTCcsVfEvqxnjc0K5PLcyw==", - "ML7ipnY/g8mA1PUIju1j8Q==", - "tOkYq1BZY152/7IJ6ZYKUg==", - "2bsIpvnGcFhTCSrK9EW1FQ==", - "Af9j1naGtnZf0u1LyYmK1w==", - "ZmblZauRqO5tGysY3/0kDw==", - "PF0lpolQQXlpc3qTLMBk8w==", - "emVLJVzha7ui5OFHPJzeRQ==", - "gR0sgItXIH8hE4FVs9Q07w==", - "PTW+fhZq/ErxHqpM0DZwHQ==", - "g0kHTNRI7x/lAsr92EEppw==", - "24H9q+E8pgCEdFS7JO5kzQ==", - "HtDXgMuF8PJ1haWk88S0Ew==", - "pulldyBt2sw6QDvTrCh6zw==", - "ehwc2vvwNUAI7MxU4MWQZw==", - "enj9VEzLbmeOyYugTmdGfQ==", - "auvG6kWMnhCMi7c7e9eHrw==", - "R36O31Pj8jn0AWSuqI7X2Q==", - "3AVYtcIv7A5mVbVnQMaCeA==", - "T9WoUJNwp8h4Yydixbx6nA==", - "t0WN8TwMLgi8UVEImoFXKg==", - "mS99D+CXhwyfVt8xJ+dJZA==", - "AFdelaqvxRj6T3YdLgCFyg==", - "Lu02ic/E94s42A14m7NGCA==", - "7w3b73nN/fIBvuLuGZDCYQ==", - "O209ftgvu0vSr0UZywRFXA==", - "MQvAr+OOfnYnr/Il/2Ubkg==", - "e5txnNRcGs2a9+mBFcF1Qg==", - "YA0kMTJ82PYuLA4pkn4rfw==", - "QIKjir/ppRyS63BwUcHWmw==", - "P3y5MoXrkRTSLhCdLlnc4A==", - "WY7mCUGvpXrC8gkBB46euw==", - "g0GbRp2hFVIdc7ct7Ky7ag==", - "Cv079ZF55RnbsDT27MOQIA==", - "cvMJ714elj/HUh89a9lzOQ==", - "9inw7xzbqAnZDKOl/MfCqA==", - "F58ktE4O0f7C9HdsXYm+lw==", - "CsPkyTZADMnKcgSuNu1qxg==", - "mAzsVkijuqihhmhNTTz65g==", - "FxnbKnuDct4OWcnFMT/a5w==", - "P5wS+xB8srW4a5KDp/JVkA==", - "ctJYJegZhG42i+vnPFWAWw==", - "OrqJKjRndcZ8OjE3cSQv7g==", - "aXqiibI6BpW3qilV6izHaQ==", - "BA18GEAOOyVXO2yZt2U35w==", - "saEpnDGBSZWqeXSJm34eOA==", - "CUEueo8QXRxkfVdfNIk/gg==", - "H0UMAUfHFQH92A2AXRCBKA==", - "CT9g8mKsIN/VeHLSTFJcNQ==", - "E4NtzxQruLcetC23zKVIng==", - "203EqmJI9Q4tWxTJaBdSzA==", - "Do3aqbRKtmlQI2fXtSZfxQ==", - "JaYQXntiyznQzrTlEeZMIw==", - "VK95g27ws2C6J2h/7rC2qA==", - "CQ0PPwgdG3N6Ohfwx1C8xA==", - "/MeHciFhvFzQsCIw39xIZA==", - "u5cUPxM6/spLIV8VidPrAA==", - "OwArFF1hpdBupCkanpwT+Q==", - "PdBgXFq5mBqNxgCiqaRnkw==", - "lC5EumoIcctvxYqwELqIqw==", - "xoPSM86Se+1hHX0y3hhdkw==", - "F5bs0GGWBx9eBwcJJpXbqg==", - "1mw6LfTiirFyfjejf8QNGA==", - "daBhAvmE9shDgmciDAC5eg==", - "AvdeYb9XNOUFWiiz+XGfng==", - "JJJkp1TpuDx5wrua2Wml7g==", - "3y5Xk65ShGvWFbQxcZaQAQ==", - "l6QHU5JsJExNoOnqxBPVbw==", - "X2YfnPXgF2VHVX95ZcBaxQ==", - "g6udffWh7qUnSIo1Ldn3eA==", - "V2P75JFB4Se9h7TCUMfeNA==", - "IUZ5aGpkJ9rLgSg6oAmMlw==", - "pyrUqiZ98gVXxlXQNXv5fA==", - "83ERX2XJV3ST4XwvN7YWCg==", - "eJDUejE/Ez/7kV+S74PDYg==", - "M9oqlPb63e0kZE0zWOm+JQ==", - "0rTYcuVYdilO7zEfKrxY3A==", - "rfPTskbnoh3hRJH6ZAzQRg==", - "QtD35QhE8sAccPrDnhtQmQ==", - "jpNUgFnanr9Sxvj2xbBXZw==", - "nykEOLL/o7h0cs0yvdeT2g==", - "wX2URK6eDDHeEOF3cgPgHA==", - "jqPQ0aOuvOJte/ghI1RVng==", - "nHTsDl0xeQPC5zNRnoa0Rw==", - "mNv2Q67zePjk/jbQuvkAFA==", - "HjlPM2FQWdILUXHalIhQ5w==", - "cHkOsVd80Rgwepeweq4S1g==", - "kTCHqcb3Cos51o8cL+MXcg==", - "nvmBgp0YlUrdZ05INsEE8Q==", - "kFrRjz7Cf2KvLtz9X6oD+w==", - "Tmx0suRHzlUK4FdBivwOwA==", - "bG+P+p34t/IJ1ubRiWg6IA==", - "uESeJe/nYrHCq4RQbrNpGA==", - "ehfPlu6YctzzpQmFiQDxGA==", - "ZH5Es/4lJ+D5KEkF1BVSGg==", - "HHxn4iIQ7m0tF1rSd+BZBg==", - "DQJRsUwO1fOuGlkgJavcwQ==", - "HITIVoFoWNg04NExe13dNA==", - "MeKXnEfxeuQu9t3r/qWvcw==", - "Y7OofF9eUvp7qlpgdrzvkg==", - "XSb71ae0v+yDxNF5HJXGbQ==", - "p8W1LgFuW6JSOKjHkx3+aA==", - "y2JOIoIiT9cV1VxplZPraQ==", - "MN94B0r5CNAF9sl3Kccdbw==", - "Q1pdQadt12anX1QRmU2Y/A==", - "JIC8R48jGVqro6wmG2KXIw==", - "eWgLAqJOU+fdn8raHb9HCw==", - "5CMadLqS2KWwwMCpzlDmLw==", - "H1y2iXVaQYwP0SakN6sa+Q==", - "CUCjG2UaEBmiYWQc6+AS1Q==", - "yV3IbbTWAbHMhMGVvgb/ZQ==", - "80PCwYh4llIKAplcDvMj4g==", - "fgdUFvQPb5h+Rqz8pzLsmw==", - "2SI4F7Vvde2yjzMLAwxOog==", - "kJdY3XEdJS/hyHdR+IN0GA==", - "IKgNa2oPaFVGYnOsL+GC5Q==", - "eXFOya6x5inTdGwJx/xtUQ==", - "uTA0XbiH3fTeVV7u5z0b3w==", - "onFcHOO1c3pDdfCb5N4WkQ==", - "Slu3z535ijcs5kzDnR7kfA==", - "SElc2+YVi3afE1eG1MI7dQ==", - "ND2hYtAIQGMxBF7o7+u7nQ==", - "Pv9FWQEDLKnG/9K9EIz4Gw==", - "6CjtF1S2Y6RCbhl7hMsD+g==", - "rs2QrN4qzAHCHhkcrAvIfA==", - "eTMPXa60OTGjSPmvR4IgGw==", - "pvXHwJ3dwf9GDzfDD9JI3g==", - "CRmAj3JcasAb4iZ9ZbNIbw==", - "rcY4Ot40678ByCfqvGOGdg==", - "l4ddTxbTCW5UmZW+KRmx6A==", - "NKRzJndo2uXNiNppVnqy1g==", - "0NrvBuyjcJ2q6yaHpz/FOA==", - "3YXp1PmMldUjBz3hC6ItbA==", - "CmVD6nh8b/04/6JV9SovlA==", - "HjyxyL0db2hGDq2ZjwOOhg==", - "4PBaoeEwUj79njftnYYqLg==", - "vFFzkWgGyw6OPADONtEojQ==", - "czBWiYsQtNFrksWwoQxlOw==", - "9iB7+VwXRbi6HLkWyh9/kg==", - "zwY6tCjjya/bgrYaCncaag==", - "mW6TCje9Zg2Ep7nzmDjSYQ==", - "5LJqHFRyIwQKA4HbtqAYQQ==", - "INNBBin5ePwTyhPIyndHHg==", - "dChBe9QR29ObPFu/9PusLg==", - "1dhq3ozNCx0o4dV1syLVDA==", - "nyaekSYTKzfSeSfPrB114Q==", - "TfNHjSTV8w6Pg6+FaGlxvA==", - "m/Lp4U75AQyk9c8cX14HJg==", - "uU1TX5DoDg6EcFKgFcn0GA==", - "B+TsxQZf0IiQrU8X9S4dsQ==", - "6b7ue29cBDsvmj1VSa5njw==", - "RvXWAFwM+mUAPW1MjPBaHA==", - "pdaY6kZ8+QqkMOInvvACNA==", - "7nr3zyWL+HHtJhRrCPhYZA==", - "BXGlq54wIH6R3OdYfSSDRw==", - "b06KGv5zDYsTxyTbQ9/eyA==", - "8ylI1AS3QJpAi3I/NLMYdg==", - "0fpe9E6m3eLp/5j5rLrz2Q==", - "Qrh7OEHjp80IW+YzQwzlJg==", - "lqhgbgEqROAdfzEnJ17eXA==", - "Dulw855DfgIwiK7hr3X8vg==", - "wsp+vmW8sEqXYVURd/gjHA==", - "VoPth5hDHhkQcrQTxHXbuw==", - "TgWe70YalDPyyUz6n88ujg==", - "9lLhHcrPWI4EsA4fHIIXuw==", - "UymZUnEEQWVnLDdRemv+Tw==", - "qnkFUlJ8QT322JuCI3LQgg==", - "/p/aCTIhi1bU0/liuO/a2Q==", - "hWoxz5HhE50oYBNRoPp1JQ==", - "88tB/HgUIUnqWXEX++b5Aw==", - "Z8T1b9RsUWf59D06MUrXCQ==", - "BZTzHJGhzhs3mCXHDqMjnQ==", - "XfY+QUriCAA1+3QAsswdgg==", - "TZ3ATPOFjNqFGSKY3vP2Hw==", - "cl4t9FXabQg7tbh1g7a0OA==", - "9SgfpAY0UhNC6sYGus9GgQ==", - "d/Wd3Ma1xYyoMByPQnA9Cw==", - "DDitrRSvovaiXe2nfAtp4g==", - "s+eHg5K9zZ2Jozu5Oya9ZQ==", - "z3L2BNjQOMOfTVBUxcpnRA==", - "v4xIYrfPGILEbD/LwVDDzA==", - "HoaBBw2aPCyhh0f5GxF+/Q==", - "i9IRqAqKjBTppsxtPB7rdw==", - "cWUg7AfqhiiEmBIu+ryImA==", - "E+02smwQGBIxv42LIF2Y4Q==", - "W4CfeVp9mXgk04flryL7iA==", - "9SUOfKtfKmkGICJnvbIDMg==", - "xweGAZf+Yb3TtwR/sGmGIA==", - "EJgedRYsZPc4cT9rlwaZhg==", - "wv4NC9CIpwuGf/nOQYe/oA==", - "ZXeMG5eqQpZO/SGKC4WQkA==", - "bzXXzQGZs8ustv0K4leklA==", - "RkQK9S1ezo+dFYHQP57qrw==", - "mrinv7KooPQPrLCNTRWCFg==", - "qIUJPanWmGzTD1XxvHp+6w==", - "Js7g8Dr6XsnGURA4UNF0Ug==", - "dpSTNOCPFHN5yGoMpl1EUA==", - "ugY8rTtJkN4CXWMVcRZiZw==", - "rqHKB91H3qVuQAm+Ym5cUA==", - "UjmDFO7uzjl4RZDPeMeNyg==", - "cu4ZluwohhfIYLkWp72pqA==", - "ZydKlOpn2ySBW0G3uAqwuw==", - "LWd0+N3M94n81qd346LfJQ==", - "VbHoWmtiiPdABvkbt+3XKQ==", - "J4MC9He6oqjOWsYQh9nl3Q==", - "ahAbmGJZvUOXrcK6OydNGQ==", - "Byhi4ymFqqH8uIeoMRvPug==", - "LSN9GmT6LUHlCAMFqpuPIA==", - "IAMInfSYb76GxDlAr1dsTg==", - "qYHdgFAXhF/XcW4lxqfvWQ==", - "26+yXbqI+fmIZsYl4UhUzw==", - "AwPTZpC28NJQhf5fNiJuLA==", - "SESKbGF35rjO64gktmLTWA==", - "YVlRQHQglkbj3J2nHiP/Hw==", - "DdaT4JLC7U0EkF50LzIj9w==", - "G0LChrb0OE5YFqsfTpIL1Q==", - "5Yrj6uevT8wHRyqqgnSfeg==", - "NmWmDxwK5FpKlZbo0Rt8RA==", - "iUsUCB0mfRsE9KPEQctIzw==", - "Tm4zk2Lmg8w4ITMI31NfTA==", - "Vu0E+IJXBnc25x4n41kQig==", - "6wkfN8hyKmKU6tG3YetCmw==", - "trjM81KANPZrg9iSThWx6Q==", - "iGuY4VxcotHvMFXuXum7KA==", - "ICPdBCdONUqPwD5BXU5lrw==", - "alqHQBz8V446EdzuVfeY5Q==", - "74FW/QYTzr/P1k6QwVHMcw==", - "avZp5K7zJvRvJvpLSldNAw==", - "TIKadc6FAaRWSQUg5OATgg==", - "PfkWkSbAxIt1Iso0znW0+Q==", - "Z+bsbVP91KrJvxrujBLrrQ==", - "mrxlFD3FBqpSZr1kuuwxGg==", - "nUgYO7/oVNSX8fJqP2dbdg==", - "tVhXk9Ff3wAg56FbdNtcFg==", - "DdiNGiOSoIZxrMrGNvqkXw==", - "CDsanJz7e3r/eQe+ZYFeVQ==", - "wVfSZYjMjbTsD2gaSbwuqQ==", - "6c0iuya20Ys8BsvoI4iQaQ==", - "qCPfJTR8ecTw6u6b1yHibA==", - "fZrj3wGQSt8RXv0ykJROcQ==", - "gR3B8usSEb0NLos51BmJQg==", - "vTAmgfq3GxL4+ubXpzwk5w==", - "jLkmUZ6fV56GfhC0nkh4GA==", - "3v09RHCPTLUztqapThYaHg==", - "nULSbtw2dXbfVjZh33pDiA==", - "IHhyR6+5sZXTH+/NrghIPg==", - "tnUtJ/DQX9WaVJyTgemsUA==", - "7xTKFcog69nTmMfr5qFUTA==", - "IshzWega6zr3979khNVFQQ==", - "Ng5v/B9Z10TTfsDFQ/XrXQ==", - "hnCUnoxofUiqQvrxl73M8w==", - "VPa7DG6v7KnzMvtJPb88LQ==", - "4LtQrahKXVtsbXrEzYU1zQ==", - "Ev/xjTi7akYBI7IeZJ4Igw==", - "41WEjhYUlG6jp2UPGj11eQ==", - "JvXTdChcE3AqMbFYTT3/wg==", - "2rOkEVl90EPqfHOF5q2FYw==", - "mjFBVRJ7TgnJx+Q74xllPg==", - "Uy4QI8D2y1bq/HDNItCtAw==", - "wMOE/pEKVIklE75xjt6b6w==", - "ZcuIvc8fDI+2uF0I0uLiVA==", - "CX/N/lHckmAtHKysYtGdZA==", - "j8to4gtSIRYpCogv2TESuQ==", - "iS9wumBV5ktCTefFzKYfkA==", - "ewPT4dM12nDWEDoRfiZZnA==", - "vWn9OPnrJgfPavg4D6T/HQ==", - "J/PNYu4y6ZMWFFXsAhaoow==", - "catI+QUNk3uJ+mUBY3bY8Q==", - "F8tEIT5EhcvLNRU5f0zlXQ==", - "zyA9f5J7mw5InjhcfeumAQ==", - "MlOOZOwcRGIkifaktEq0aQ==", - "Pt3i49uweYVgWze3OjkjJA==", - "sfIClgTMtZo9CM9MHaoqhQ==", - "HeQbUuBM9sqfXFXRBDISSw==", - "SFn78uklZfMtKoz2N0xDaQ==", - "H6j2nPbBaxHecXruxiWYkA==", - "fU32wmMeD44UsFSqFY0wBA==", - "hDILjSpTLqJpiSSSGu445A==", - "ieEAgvK9LsWh2t6DsQOpWA==", - "xfjBQk3CrNjhufdPIhr91A==", - "j+8/VARfbQSYhHzj0KPurQ==", - "/zFLRvi75UL8qvg+a6zqGg==", - "U0KmEI6e5zJkaI4YJyA5Ew==", - "uXvr6vi5kazZ9BCg2PWPJA==", - "jEqP0dyHKHiUjZ9dNNGTlQ==", - "1xWx5V3G9murZP7srljFmA==", - "OIwtfdq37eQ0qoXuB2j7Hw==", - "fUAy3f9bAglLvZWvkO2Lug==", - "duRFqmvqF93uf/vWn8aOmg==", - "ysRQ+7Aq7eVLOp88KnFVMA==", - "CkZUmKBAGu0FLpgPDrybpw==", - "TrLmfgwaNATh24eSrOT+pw==", - "83wtvSoSP9FVBsdWaiWfpA==", - "pUfWmRXo70yGkUD/x5oIvA==", - "PybPZhJErbRTuAafrrkb3g==", - "8hsfXqi4uiuL+bV1VrHqCw==", - "TVlHoi8J7sOZ2Ti7Dm92cQ==", - "za4rzveYVMFe3Gw531DQJQ==", - "JKphO0UYjFqcbPr6EeBuqg==", - "hqeSvwu8eqA072iidlJBAw==", - "bUF0JIfS4uKd3JZj2xotLQ==", - "hKOsXOBoFTl/K4xE+RNHDA==", - "JHBjKpCgSgrNNACZW1W+1w==", - "Rrq0ak9YexLqqbSD4SSXlw==", - "+NmjwjsPhGJh9bM10SFkLw==", - "xMIHeno2qj3V8q9H1xezeg==", - "TcFinyBrUoAEcLzWdFymow==", - "Rvchz/xjcY9uKiDAkRBMmA==", - "TYlnrwgyeZoRgOpBYneRAg==", - "PbnxuVerGwHyshkumqAARg==", - "iFtadcw8v6betKka9yaJfg==", - "7wgT9WIiMVcrj48PVAMIgw==", - "2HHqeGRMfzf3RXwVybx+ZQ==", - "tdgI9v7cqJsgCAeW1Fii1A==", - "4ZFYKa7ZgvHyZLS6WpM8gA==", - "gB8wkuIzvuDAIhDtNT1gyA==", - "g1ELwsk6hQ+RAY1BH640Pg==", - "UZoibx+y1YJy/uRSa9Oa2w==", - "yS/yMnJDHW0iaOsbj4oPTg==", - "JzW+yhrjXW1ivKu3mUXPXg==", - "/wIZAye9h1TUiZmDW0ZmYA==", - "YK+q7uJObkQZvOwQ9hplMg==", - "Rs8deApkoosIJSfX7NXtAA==", - "MsCloSmTFoBpm7XWYb+ueQ==", - "3ltw31yJuAl4VT6MieEXXw==", - "1+qmrbC8c7MJ6pxmDMcKuA==", - "AYxGETZs477n2sa1Ulu/RQ==", - "Q0TJZxpn3jk67L7N+YDaNA==", - "OGpsXRHlaN8BvZftxh1e7A==", - "UbABE6ECnjB+9YvblE9CYw==", - "kZ0D191c/uv4YMG15yVLDw==", - "QWURrsEgxbJ8MWcaRmOWqw==", - "xiFlcSfa/gnPiO+LwbixcQ==", - "Szko0IPE7RX2+mfsWczrMg==", - "Ugt8HVC/aUzyWpiHd0gCOQ==", - "8j9GVPiFdfIRm/+ho7hpoA==", - "KR401XBdgCrtVDSaXqPEiA==", - "d0NBFiwGlQNclKObRtGVMQ==", - "XEwOJG24eaEtAuBWtMxhwg==", - "0Y6iiZjCwPDwD/CwJzfioQ==", - "MvMbvZNKbXFe2XdN+HtnpQ==", - "fsoXIbq0T0nmSpW8b+bj+g==", - "Uje3Ild84sN41JEg3PEHDg==", - "i6ZYpFwsyWyMJNgqUMSV1A==", - "+P5q4YD1Rr5SX26Xr+tzlw==", - "z4oKy2wKH+sbNSgGjbdHGw==", - "XwKWd03sAz8MmvJEuN08xA==", - "Xv0mNYedaBc57RrcbHr9OA==", - "9oUawSwUGOmb0sDn3XS6og==", - "9RGIQ2qyevNbSSEF36xk/A==", - "q8YF9G2jqydAxSqwyyys5Q==", - "m5JIUETVXcRza4VL4xlJbg==", - "aRpdnrOyu5mWB1P5YMbvOA==", - "rM/BOovNgnvebKMxZQdk7g==", - "fQS0jnQMnHBn7+JZWkiE/g==", - "gAoV4BZYdW1Wm712YXOhWQ==", - "hCzsi1yDv9ja5/o7t94j9Q==", - "CoLvjQDQGldGDqRxfQo+WQ==", - "pfGcaa49SM3S6yJIPk/EJQ==", - "yYp4iuI5f/y/l1AEJxYolQ==", - "Jj4IrSVpqQnhFrzNvylSzA==", - "4jeOFKuKpCmMXUVJSh9y0g==", - "+NMUaQ7XPsAi0rk7tTT9wQ==", - "Jt4Eg6MJn8O4Ph/K2LeSUA==", - "CiiUeJ0LeWfm7+gmEmYXtg==", - "c5Tc7rTFXNJqYyc0ppW+Iw==", - "4KJZPCE9NKTfzFxl76GWjg==", - "aXs9qTEXLTkN956ch3pnOA==", - "f5Xo7F1uaiM760Qbt978iw==", - "wpZqFkKafFpLcykN2IISqg==", - "vIORTYSHFIXk5E2NyIvWcQ==", - "prOsOG0adI4o+oz50moipw==", - "blygTgAHZJ3NzyAT33Bfww==", - "rBt6L/KLT7eybxKt5wtFdg==", - "vMuaLvAntJB5o7lmt/kVXA==", - "iujlt9fXcUXEYc+T2s5UjA==", - "LyYPOZKm8bBegMr5NTSBfg==", - "ZtWvgitOSRDWq7LAKYYd4Q==", - "kh51WUI5TRnKhur6ZEpRTQ==", - "VzQ1NwNv9btxUzxwVqvHQg==", - "8fJLQeIHaTnJ8wGqUiKU6g==", - "vvEH5A39TTe1AOC11rRCLA==", - "dihDsG7+6aocG6M9BWrCzQ==", - "3jqsY8/xTWELmu/az3Daug==", - "mpOtwBvle+nyY6lUBwTemw==", - "E1CvxFbuu9AYW604mnpGTw==", - "1LPC0BzhJbepHTSAiZ3QTw==", - "XpGXh76RDgXC4qnTCsnNHA==", - "3Gg9N7vjAfQEYOtQKuF/Eg==", - "+WpF8+poKmHPUBB4UYh/ig==", - "UNt7CNMtltJWq8giDciGyA==", - "RIZYDgXqsIdTf9o2Tp/S7g==", - "0QCQORCYfLuSbq94Sbt0bQ==", - "hvsZ5JmVevK1zclFYmxHaw==", - "3+9nURtBK3FKn0J9DQDa3g==", - "jdVMQqApseHH3fd91NFhxg==", - "VX+cVXV8p9i5EBTMoiQOQQ==", - "I5qDndyelK4Njv4YrX7S6w==", - "rWliqgfZ3/uCRBOZ9sMmdA==", - "vwno3vugCvt6ooT3CD4qIQ==", - "cffrYrBX3UQhfX1TbAF+GQ==", - "nOiwBFnXxCBfPCHYITgqNg==", - "LQttmX92SI94+hDNVd8Gtw==", - "iCF+GWw9/YGQXsOOPAnPHQ==", - "nwtCsN1xEYaHvEOPzBv+qQ==", - "CQpJFrpOvcQhsTXIlJli+Q==", - "tYeIZjIm0tVEsYxH1iIiUQ==", - "iCnm5fPmSmxsIzuRK6osrA==", - "tX8X8KoxUQ8atFSCxgwE1Q==", - "hZlX6qOfwxW5SPfqtRqaMw==", - "2aIx9UdMxxZWvrfeJ+DcTw==", - "TlJizlASbPtShZhkPww4UA==", - "p+bx+/WQWALXEBCTnIMr4w==", - "4VR5LiXLew6Nyn91zH9L4w==", - "bfUD03N2PRDT+MZ+WFVtow==", - "cTvDd8okNUx0RCMer6O8sw==", - "49jZr/mEW6fvnyzskyN40w==", - "vHmQUl4WHXs1E/Shh+TeyA==", - "fgXfRuqFfAu8qxbTi4bmhA==", - "Wn+Vj4eiWx0WPUHr3nFbyA==", - "2SwIiUwT4vRZPrg7+vZqDA==", - "nkedTagkmf6YE4tEY+0fKw==", - "8nOTDhFyZ8YUA4b6M5p84w==", - "qnzWszsyJhYtx8wkMN6b1g==", - "ka7pMp8eSiv92WgAsz2vdA==", - "pGQEWJ38hb/ZYy2P1+FIuw==", - "cVhdRFuZaW/09CYPmtNv5g==", - "prCOYlboBnzmLEBG/OeVrQ==", - "oIWwTbkVS5DDL47mY9/1KQ==", - "PKtXc4x4DEjM45dnmPWzyg==", - "f9ywiGXsz+PuEsLTV3zIbQ==", - "6G2bD3Y7qbGmfPqH9TqLFA==", - "DMHmyn2U2n+UXxkqdvKpnA==", - "XOG1PYgqoG8gVLIbVLTQgg==", - "1FSrgkUXgZot2CsmbAtkPw==", - "BxFP+4o6PSlGN78eSVT1pA==", - "EZVQGsXTZvht1qedRLF8bQ==", - "eYAQWuWZX2346VMCD6s7/A==", - "jkUpkLoIXuu7aSH8ZghIAQ==", - "mXPtbPaoNAAlGmUMmJEWBQ==", - "HLesnV3DL+FhWF3h6RXe8g==", - "nDAsSla+9XfAlQSPsXtzPA==", - "RAECgYZmcF4WxcFcZ4A0Ww==", - "W+M4BcYNmjj7xAximDGWsA==", - "ueODvMv/f9ZD8O0aIHn4sg==", - "cszpMdGbsbe6BygqMlnC9Q==", - "siHwJx6EgeB1gBT9z/vTyw==", - "FN7oLGBQGHXXn5dLnr/ElA==", - "Tud+AMyuFkWYYZ73yoJGpQ==", - "TuaG3wRdM9BWKAxh2UmAsg==", - "8CjmgWQSAAGcXX9kz3kssw==", - "ays5/F7JANIgPHN0vp2dqQ==", - "PCOGl7GIqbizAKj/sZmlwQ==", - "rZKD8oJnIj5fSNGiccfcvA==", - "gFEnTI8os2BfRGqx9p5x8w==", - "5r1ZsGkrzNQEpgt/gENibw==", - "1YO9G8qAhLIu2rShvekedw==", - "6ZKmm7IW7IdWuVytLr68CQ==", - "mMfn8OaKBxtetweulho+xQ==", - "GQJxu1SoMBH14KPV/G/KrQ==", - "IYIP2UBRyWetVfYLRsi1SQ==", - "Jit0X0srSNFnn8Ymi1EY+g==", - "ARCWkHAnVgBOIkCDQ19ZuA==", - "qA0sTaeNPNIiQbjIe1bOgQ==", - "iGI9uqMoBBAjPszpxjZBWQ==", - "+L1FDsr5VQtuYc2Is5QGjw==", - "4XNUmgwxsqDYsNmPkgNQYQ==", - "Yig+Wh18VIqdsmwtwfoUQw==", - "uqp92lAqjec8UQYfyjaEZw==", - "QiozlNcQCbqXtwItWExqJQ==", - "JFHutgSe1/SlcYKIbNNYwQ==", - "Y26jxXvl79RcffH8O8b9Ew==", - "bQ7J5mebp38rfP/fuqQOsg==", - "HI4ZIE5s8ez8Rb+Mv39FxA==", - "OzH7jTcyeM7RPVFtBdakpQ==", - "HLxROy6fx/mLXFTDSX4eLA==", - "s5RUHVRNAoKMuPR/Jkfc2Q==", - "X9QAaNjgiOeAWSphrGtyVw==", - "ALJWKUImVE40MbEooqsrng==", - "9MDG0WeBPpjGJLEmUJgBWg==", - "9RXymE9kCkDvBzWGyMgIWA==", - "vFox1d3llOeBeCUZGvTy0A==", - "r3lQAYOYhwlLnDWQIunKqg==", - "2os5s7j7Tl46ZmoZJH8FjA==", - "O5N2yd+QQggPBinQ+zIhtQ==", - "ZygAjaN62XhW5smlLkks+Q==", - "AgDJsaW0LkpGE65Kxk5+IA==", - "omAjyj1l6gyQAlBGfdxJTw==", - "fY9VATklOvceDfHZDDk57A==", - "StpQm/cQF8cT0LFzKUhC5w==", - "CYJB3qy5GalPLAv1KGFEZA==", - "coGEgMVs2b314qrXMjNumQ==", - "DQQB/l55iPN9XcySieNX3A==", - "6dshA8knH5qqD+KmR/kdSQ==", - "qyRmvxh8p4j4f+61c10ZFQ==", - "apWEPWUvMC24Y+2vTSLXoA==", - "RzX2OfSFEd//LhZwRwzBVw==", - "NdULoUDGhIolzw1PyYKV0A==", - "5w/c9WkI/FA+4lOtdPxoww==", - "bV9r7j2kNJpDCEM5E2339Q==", - "vbyiKeDCQ4q9dDRI1Q0Ong==", - "9xIgKpZGqq0/OU6wM5ZSHw==", - "RYkDwwng6eeffPHxt8iD9A==", - "w5N/aHbtOIKzcvG3GlMjGA==", - "3P2aJxV8Trll2GH9ptElYA==", - "yteeQr3ub2lDXgLziZV+DQ==", - "yqtj8GfLaUHYv/BsdjxIVw==", - "NyF+4VRog7etp90B9FuEjA==", - "uwA6N5LptSXqIBkTO0Jd7Q==", - "6lVSzYUQ/r0ep4W2eCzFpg==", - "1d7RPHdZ9qzAbG3Vi9BdFA==", - "7br49X11xc2GxQLSpZWjKQ==", - "peMW+rpwmXrSwplVuB/gTA==", - "RqYpA5AY7mKPaSxoQfI1CA==", - "dqVw2q2nhCvTcW82MT7z0g==", - "5S5/asYfWjOwnzYpbK6JDw==", - "NvkR0inSzAdetpI4SOXGhw==", - "tIqwBotg052wGBL65DZ+yA==", - "S4RvORcJ3m6WhnAgV4YfYA==", - "UAqf4owQ+EmrE45hBcUMEw==", - "4aPU6053cfMLHgLwAZJRNg==", - "3Y6/HqS1trYc9Dh778sefg==", - "ck86G8HsbXflyrK7MBntLg==", - "GLmWLXURlUOJ+PMjpWEXVA==", - "jNJQ6otieHBYIXA9LjXprg==", - "AsAHrIkMgc3RRWnklY9lJw==", - "FCLQocqxxhJeleARZ6kSPg==", - "3Leu2Sc+YOntJFlrvhaXeg==", - "hSkY45CeB6Ilvh0Io4W6cg==", - "DwrNdmU5VFFf3TwCCcptPA==", - "u2WQlcMxOACy6VbJXK4FwA==", - "E9IlDyULLdeaVUzN6eky8g==", - "EXveRXjzsjh8zbbQY2pM9g==", - "5VO1inwXMvLDBQSOahT6rg==", - "HaHTsLzx7V3G1SFknXpGxA==", - "MMaegl2Md9s/wOx5o9564w==", - "mpWNaUH9kn4WY26DWNAh3Q==", - "w3G+qXXqqKi8F5s+qvkBUg==", - "wM8tnXO4PDlLVHspZFcjYw==", - "LFcpCtnSnsCPD2gT/RA+Zg==", - "bhVbgJ4Do4v56D9mBuR/EA==", - "yU3N0HMSP5etuHPNrVkZtg==", - "FzqIpOcTsckSNHExrl+9jg==", - "BYz52gYI/Z6AbYbjWefcEA==", - "h3vYYI9yhpSZV2MQMJtwFQ==", - "adJAjAFyR2ne1puEgRiH+g==", - "eDcyiPaB954q5cPXcuxAQw==", - "40gCrW4YWi+2lkqMSPKBPg==", - "ulLuTZqhEDkX0EJ3xwRP9A==", - "y4iBxAMn/KzMmaWShdYiIw==", - "ilBBNK/IV69xKTShvI94fQ==", - "0HN6MIGtkdzNPsrGs611xA==", - "twPn6wTGqI0aR//0wP3xtA==", - "3UNJ37f+gnNyYk9yLFeoYA==", - "4SdHWowXgCpCDL28jEFpAw==", - "Mr5mCtC53+wwmwujOU/fWw==", - "81pAhreEPxcKse+++h1qBg==", - "KmcGEE0pacQ/HDUgjlt7Pg==", - "Gt4/MMrLBErhbFjGbiNqQQ==", - "lf1fwA0YoWUZaEybE+LyMQ==", - "RIVYGO2smx9rmRoDVYMPXw==", - "rJ9qVn8/2nOxexWzqIHlcQ==", - "lfOLLyZNbsWQgHRhicr4ag==", - "wgH1GlUxWi6/yLLFzE76uQ==", - "Qg1ubGl+orphvT990e5ZPA==", - "Z5B+uOmPZbpbFWHpI9WhPw==", - "snGTzo540cCqgBjxrfNpKw==", - "ZqkmoGB0p5uT5J6XBGh7Tw==", - "uPi8TsGY3vQsMVo/nsbgVQ==", - "Y5XR8Igvau/h+c1pRgKayg==", - "ZmVpw1TUVuT13Zw/MNI5hQ==", - "60suecbWRfexSh7C67RENA==", - "kZ/mZZg9YSDmk2rCGChYAg==", - "OpL+vHwPasW30s2E1TYgpA==", - "ZVnErH1Si4u51QoT0OT7pA==", - "3pi3aNVq1QNJmu1j0iyL0g==", - "tb5+2dmYALJibez1W4zXgA==", - "jOPdd330tB6+7C29a9wn0Q==", - "5oD/aGqoakxaezq43x0Tvw==", - "HdB7Se47cWjPgpJN0pZuiA==", - "6WhHPWlqEUqXC52rHGRHjA==", - "WLwpjgr9KzevuogoHZaVUw==", - "E8yMPK7W0SIGTK6gIqhxiQ==", - "1/Hxu8M9N/oNwk8bCj4FNQ==", - "Uo1ebgsOxc3eDRds1ah3ag==", - "5pqqzC/YmRIMA9tMFPi7rg==", - "ri4AOITPdB1YHyXV+5S51g==", - "HfvsiCQN/3mT0FabCU5ygQ==", - "UQTQk5rrs6lEb1a+nkLwfg==", - "VH70dN82yPCRctmAHMfCig==", - "yD3Dd4ToRrl53k/2NSCJiw==", - "fO0+6TsjL+45p9mSsMRiIg==", - "fM5uYpkvJFArnYiQ3MrQnA==", - "V+QzdKh5gxTPp2yPC9ZNEg==", - "XHHEg/8KZioW/4/wgSEkbQ==", - "2abfl3N46tznOpr+94VONQ==", - "gxwbqZDHLbQVqXjaq42BCg==", - "WnHK5ZQDR6Da5cGODXeo0A==", - "SChDh/Np1HyTPWfICfE1uA==", - "yhexr/OFKfZl0o3lS70e4w==", - "N65PqIWiQeS082D6qpfrAg==", - "RM5CpIiB94Sqxi462G7caA==", - "CBAGa5l95f3hVzNi6MPWeQ==", - "OHJBT2SEv5b5NxBpiAf7oQ==", - "p48i7AfSSAyTdJSyHvOONw==", - "/SP6pOdYFzcAl2OL05z4uQ==", - "N8dXCawxSBX40fgRRSDqlQ==", - "bMWFvjM8eVezU1ZXKmdgqw==", - "Um1ftRBycvb+363a90Osog==", - "QAz7FA+jpz9GgLvwdoNTEQ==", - "qO4HlyHMK5ygX+6HbwQe8w==", - "UgvtdE2eBZBUCAJG/6c0og==", - "q5g3c8tnQTW2EjNfb2sukw==", - "gsC/mWD8KFblxB0JxNuqJw==", - "SVFbcjXbV7HRg+7jUrzpwg==", - "bz294kSG4egZnH2dJ8HwEg==", - "ybpTgPr3SjJ12Rj5lC/IMA==", - "yDrAd1ot38soBk7zKdnT8A==", - "BB/R8oQOcoE4j63Hrh8ifg==", - "GNrMvNXQkW7PydlyJa+f1w==", - "w0PKdssv+Zc5J/BbphoxpA==", - "D5ibbo8UJMfFZ48RffuhgQ==", - "MdvhC1cuXqni/0mtQlSOCw==", - "wQKL8Ga6JQkpZ7yymDkC3w==", - "o1uhaQg5/zfne84BFAINUQ==", - "Ft2wXUokFdUf6d2Y/lwriw==", - "sLJrshdEANp0qk2xOUtTnQ==", - "jx7rpxbm1NaUMcE2ktg5sA==", - "ZQ0ZnTsZKWxbRj7Tilh24Q==", - "KhrIIHfqXl9zGE9aGrkRVg==", - "jS0JuioLGAVaHdo/96JFoQ==", - "tr+U/vt+MIGXPRQYYWJfRg==", - "TXab/hqNGWaSK+fXAoB2bg==", - "0K4NBxqEa3RYpnrkrD/XjQ==", - "3oMTbWf7Bv83KRlfjNWQZA==", - "yLAhLNezvqVHmN1SfMRrPw==", - "ZYW30FfgwHmW6nAbUGmwzA==", - "CZNoTy26VUQirvYxSPc/5A==", - "CF1sAlhjDQY/KWOBnSSveA==", - "+CLf5witKkuOvPCulTlkqw==", - "1m1yD4L9A7Q1Ot+wCsrxJQ==", - "2E41e0MgM3WhFx2oasIQeA==", - "mDXHuOmI4ayjy2kLSHku1Q==", - "sCLMrLjEUQ6P1L8tz90Kxg==", - "zDUZCzQesFjO1JI3PwDjfg==", - "x/BIDm6TKMhqu/gtb3kGyw==", - "DEaZD/8aWV6+zkiLSVN/gA==", - "7dz+W494zwU5sg63v5flCg==", - "Y5iDQySR2c3MK7RPMCgSrw==", - "GglPoW5fvr4JSM3Zv99oiA==", - "myzvc+2MfxGD9uuvZYdnqQ==", - "V9G1we3DOIQGKXjjPqIppQ==", - "gYvdNJCDDQmNhtJ6NKSuTA==", - "rXtGpN17Onx8LnccJnXwJQ==", - "/a+bLXOq02sa/s8h7PhUTg==", - "htNVAogFakQkTX6GHoCVXg==", - "eshD40tvOA6bXb0Fs/cH3A==", - "K1CGbMfhlhIuS0YHLG30PQ==", - "aOeJZUIZM9YWjIEokFPnzQ==", - "r0hAwlS0mPZVfCSB+2G6uQ==", - "0q+erphtrB+6HBnnYg7O6w==", - "bkRdUHAksJZGzE1gugizYQ==", - "J8v2f6hWFu8oLuwhOeoQjA==", - "qkvEep4vvXhc2ZJ6R449Mg==", - "6HGeEPyTAu9oiKhNVLjQnA==", - "JoATsk/aJH0UcDchFMksWA==", - "QozQL0DTtr+PXNKifv6l6g==", - "HiAgt86AyznvbI2pnLalVQ==", - "lY+tivtsfvU0LJzBQ6itYQ==", - "EfXDc6h69aBPE6qsB+6+Ig==", - "gnAIpoCyl3mQytLFgBEgGA==", - "p2JPOX8yDQ0agG+tUyyT/g==", - "zeELfk015D5krExLKRUYtg==", - "wDiGoFEfIVEDyyc4VpwhWQ==", - "7Ephy+mklG2Y3MFdqmXqlA==", - "8ZFPMJJYVJHsfRpU4DigSg==", - "ocRh5LR1ZIN9Johnht8fhQ==", - "l5f3I6osM9oxLRAwnUnc5A==", - "yxCyBXqGWA735JEyljDP7Q==", - "qE/h/Z+6buZWf+cmPdhxog==", - "HCu4ZMrcLMZbPXbTlWuvvQ==", - "TDrq23VUdzEU/8L5i8jRJQ==", - "L+N/6geuokiLPPSDXM9Qkg==", - "v6jZicMNM3ysm3U5xu0HoQ==", - "b85nxzs8xiHxaqezuDVWvg==", - "ca+kx+kf7JuZ3pfYKDwFlg==", - "KlY5TGg0pR/57TVX+ik1KQ==", - "3jmCreW5ytSuGfmeLv7NfQ==", - "ucLMWnNDSqE4NOCGWvcGWw==", - "NSrzwNlB0bde3ph8k6ZQcQ==", - "nL4iEd3b5v4Y9fHWDs+Lrw==", - "W2x0SBzSIsTRgyWUCOZ/lg==", - "ifZM0gBm9g9L09YlL+vXBg==", - "4WcFEswYU/HHQPw77DYnyA==", - "TLJbasOoVO435E5NE5JDcA==", - "WyCFB4+6lVtlzu3ExHAGbQ==", - "BW0A06zoQw7S+YMGaegT7g==", - "qP1cCE4zsKGTPhjbcpczMw==", - "UVEZPoH9cysC+17MKHFraw==", - "eQ45Mvf5in9xKrP6/qjYbg==", - "fOARCnIg/foF/6tm7m9+3w==", - "lK2xe+OuPutp4os0ZAZx5w==", - "Tug3eh+28ttyf+U7jfpg5w==", - "ENFfP93LA257G6pXQkmIdg==", - "FuWspiqu5g8Eeli5Az+BkA==", - "kIGxCUxSlNgsKZ45Al1lWw==", - "RzeH+G3gvuK1z+nJGYqARQ==", - "0ofMbUCA3/v5L8lHnX4S5w==", - "VI8pgqBZeGWNaxkuqQVe7g==", - "x6lNRGgJcRxgKTlzhc1WPg==", - "La0gzdbDyXUq6YAXeKPuJA==", - "dAq8/1JSQf1f4QPLUitp0g==", - "WN7lFJfw4lSnTCcbmt5nsg==", - "2aDK0tGNgMLyxT+BQPDE8Q==", - "9W57pTzc572EvSURqwrRhw==", - "37Nkh06O979nt7xzspOFyQ==", - "4TQkMnRsXBobbtnBmfPKnA==", - "f/BjtP5fmFw2dRHgocbFlg==", - "9vEgJVJLEfed6wJ7hBUGgQ==", - "HRWYX2XOdsOqYzCcqkwIyw==", - "StDtLMlCI75g4XC59mESEQ==", - "99+SBN45LwKCPfrjUKRPmw==", - "HbT6W1Ssd3W7ApKzrmsbcg==", - "l8/KMItWaW3n4g1Yot/rcQ==", - "s7iW1M6gkAMp+D/3jHY58w==", - "GWwJ32SZqD5wldrXUdNTLA==", - "YhLEPsi/TNyeUJw69SPYzQ==", - "g0aTR8aJ0uVy3YvGYu5xrw==", - "m6get5wjq5j1i5abnpXuZQ==", - "ymtA8EMPMgmMcimWZZ0A1Q==", - "HEcOaEd9zCoOVbEmroSvJg==", - "F8l+Qd9TZgzV+r8G584lKA==", - "3yDD+xT8iRfUVdxcc7RxKw==", - "1eRUCdIJe3YGD5jOMbkkOg==", - "DO1/jfP/xBI9N0RJNqB2Rw==", - "SiSlasZ+6U2IZYogqr2UPg==", - "tBQDfy48FnIOZI04rxfdcA==", - "HEghmKg3GN60K7otpeNhaA==", - "mTLBkP+yGHsdk5g7zLjVUw==", - "RgtwfY5pTolKrUGT+6Pp6g==", - "EyIsYQxgFa4huyo/Lomv7g==", - "HwLSUie8bzH+pOJT3XQFyg==", - "7Tauesu7bgs5lJmQROVFiQ==", - "ojugpLIfzflgU2lonfdGxA==", - "ZqjnqxZE/BjOUY0CMdVl0g==", - "oQjugfjraFziga1BcwRLRA==", - "JXCYeWjFqcdSf6QwB54G+A==", - "TeBGJCqSqbzvljIh9viAqA==", - "1Gpj4TPXhdPEI4zfQFsOCg==", - "asouSfUjJa8yfMG7BBe+fA==", - "ccy3Ke2k4+evIw0agHlh3w==", - "CzSumIcYrZlxOUwUnLR2Zw==", - "9QFYrCXsGsInUb4SClS3cQ==", - "3RTtSaMp1TZegJo5gFtwwA==", - "aTWiWjyeSDVY/q8y9xc2zg==", - "UK+R+hAoVeZ4xvsoZjdWpw==", - "rHagXw+CkF3uEWPWDKXvog==", - "MfkyURTBfkNZwB+wZKjP4g==", - "Qf7JFJJuuacSzl6djUT2EQ==", - "K1RL+tLjICBvMupe7QppIQ==", - "R2OOV18CV/YpWL1xzr/VQg==", - "o+areESiXgSO0Lby56cBeg==", - "VPqyIomYm7HbK5biVDvlpw==", - "pw1jplCdTC+b0ThX0FXOjw==", - "gTnsH3IzALFscTZ1JkA9pw==", - "JYJvOZ4CHktLrYJyAbdOnA==", - "P8lUiLFoL100c9YSQWYqDA==", - "LATQEY7f47i77M6p11wjWA==", - "U9kE50Wq5/EHO03c5hE4Ug==", - "pFKzcRHSUBqSMtkEJvrR1Q==", - "vHVXsAMQqc0qp7HA5Q+YkA==", - "3XyoREdvhmSbyvAbgw2y/A==", - "qOEIUWtGm5vx/+fg4tuazg==", - "a6IszND1m+6w+W+CvseC7g==", - "KuNY8qAJBce+yUIluW8AYw==", - "5Wcq+6hgnWsQZ/bojERpUw==", - "l2ZB9TvT68rn8AAN4MdxWw==", - "h5HsEsObPuPFqREfynVblw==", - "fvm0IQfnbfZFETg9v3z/Fg==", - "QV0OG5bpjrjku4AzDvp9yw==", - "nMuMtK/Zkb3Xr34oFuX/Lg==", - "jMZKSMP2THqwpWqJNJRWdw==", - "fX4G68hFL7DmEmjbWlCBJQ==", - "ZlBNHAiYsfaEEiPQ1z+rCA==", - "ckugAisBNX18eQz+EnEjjw==", - "Dt6hvhPJu94CJpiyJ5uUkg==", - "eYE9No9sN5kUZ5ePEyS3+Q==", - "Tp52d1NndiC9w3crFqFm9g==", - "MBjMU/17AXBK0tqyARZP5w==", - "1EI9aa955ejNo1dJepcZJw==", - "FqWLkhWl0iiD/u2cp+XK9A==", - "j8nMH8mK/0Aae7ZkqyPgdg==", - "ZtmnX24AwYAXHb2ZDC6MeQ==", - "who8uUamlHWHXnBf7dwy4A==", - "CmkmWcMK4eqPBcRbdnQvhw==", - "61V74uIjaSfZM8au1dxr1A==", - "778O1hdVKHLG2q9dycUS0Q==", - "IdadoCPmSgHDHzn1zyf8Jw==", - "Z2rwGmVEMCY6nCfHO3qOzw==", - "Q3TpCE+wnmH/1h/EPWsBtQ==", - "HnVfyqgJ+1xSsN4deTXcIA==", - "XgPHx2+ULpm14IOZU2lrDg==", - "IbN736G1Px5bsYqE5gW1JQ==", - "nY/H7vThZ+dDxoPRyql+Cg==", - "wlWxtQDJ+siGhN2fJn3qtw==", - "MrbEUlTagbesBNg0OemHpw==", - "LJtRcR70ug6UHiuqbT6NGw==", - "hSNZWNKUtDtMo6otkXA/DA==", - "LawT9ZygiVtBk0XJ+KkQgQ==", - "DLzHkTjjuH6LpWHo2ITD0Q==", - "i8XXN7jcrmhnrOVDV8a2Hw==", - "ogcuGHUZJkmv+vCz567a2g==", - "rUp5Mfc57+A8Q29SPcvH/Q==", - "6706ncrH1OANFnaK6DUMqQ==", - "gK7dhke5ChQzlYc/bcIkcg==", - "t3Txxjq43e/CtQmfQTKwWg==", - "6ZMs9vCzK9lsbS6eyzZlIA==", - "uTHBqApdKOAgdwX3cjrCYQ==", - "zirOtGUXeRL22ezfotZfQg==", - "iK0dWKHjVVexuXvMWJV9pg==", - "uzEgwx1iAXAvWPKSVwYSeQ==", - "FHvI0IVNvih8tC7JgzvCOw==", - "jjNMPXbmpFNsCpWY0cv3eg==", - "/cJ0Nn5YbXeUpOHMfWXNHQ==", - "WkSJpxBa45XJRWWZFee7hw==", - "edlXkskLx287vOBZ9+gVYg==", - "+Pl0bSMBAdXpRIA+zE02JA==", - "3xw8+0/WU51Yz4TWIMK8mw==", - "GdTanUprpE3X/YjJDPpkhQ==", - "qnsBdl050y9cUaWxbCczRw==", - "pnJnBzAJlO4j3IRqcfmhkQ==", - "USq1iF90eUv41QBebs3bhw==", - "QH3lAwOYBAJ0Fd5pULAZqw==", - "gvvyX5ATi4q9NhnwxRxC8w==", - "7xDIG/80SnhgxAYPL9YJtg==", - "WVhfn2yJZ43qCTu0TVWJwA==", - "twjiDKJM7528oIu/el4Zbg==", - "6sBemZt4qY/TBwqk3YcLOQ==", - "m3XYojKO+I6PXlVRUQBC3w==", - "gUNP5w7ANJm257qjFxSJrA==", - "mMLhjdWNnZ8zts9q+a2v3g==", - "kjWYVC7Eok2w2YT4rrI+IA==", - "ZzT5b0dYQXkQHTXySpWEaA==", - "YzTV0esAxBFVls3e0qRsnA==", - "9xmtuClkFlpz/X5E9JBWBA==", - "nhAnHuCGXcYlqzOxrrEe1g==", - "cbBXgB1WQ/i8Xul0bYY2fg==", - "AkAes5oErTaJiGD2I4A1Pw==", - "Wx9jh/teM0LJHrvTScssyQ==", - "fU5ZZ1bIVsV+eXxOpGWo/Q==", - "k8eZxqwxiN/ievXdLSEL/w==", - "E2LR1aZ3DcdCBuVT7BhReA==", - "1eCHcz4swFH+uRhiilOinQ==", - "JipruVZx4ban3Zo5nNM37g==", - "IPLD9nT5EEYG9ioaSIYuuA==", - "pHozgRyMiEmyzThtJnY4MQ==", - "p0eNK7zJd7D/HEGaVOrtrQ==", - "dGjcKAOGBd4gIjJq7fL+qQ==", - "uMq8cDVWFD+tpn8aeP8Pqg==", - "gC7gUwGumN7GNlWwfIOjJQ==", - "It+K/RCYMOfNrDZxo7lbcA==", - "4CfEP8TeMKX33ktwgifGgA==", - "nxDGRpePV3H4NChn4eLwag==", - "300hoYyMR/mk1mfWJxS8/w==", - "DmxgZsQg+Qy1GP0fPkW3VA==", - "1vqRt79ukuvdJNyIlIag8Q==", - "RWI0HfpP7643OSEZR8kxzw==", - "zZtYkKU50PPEj6qSbO5/Sw==", - "UNRlg6+CYVOt68NwgufGNA==", - "kkbX+a00dfiTgbMI+aJpMg==", - "VIC7inSiqzM6v9VqtXDyCw==", - "l+x2QhxG8wb5AQbcRxXlmA==", - "GUiinC3vgBjbQC2ybMrMNQ==", - "6uMF5i0b/xsk55DlPumT7A==", - "aK9nybtiIBUvxgs1iQFgsw==", - "BLbTFLSb4mkxMaq4/B2khg==", - "mTAqtg6oi0iytHQCaSVUsA==", - "eBapvE+hdyFTsZ0y5yrahg==", - "lHN2dn2cUKJ8ocVL3vEhUQ==", - "Mj87ajJ/yR41XwAbFzJbcA==", - "FA+nK6mpFWdD0kLFcEdhxA==", - "FrTgaF5YZCNkyfR1kVzTLQ==", - "5eHStFN7wEmIE+uuRwIlPQ==", - "AyWlT+EGzIXc395zTlEU5Q==", - "I+wVQA+jpPTJ6xEsAlYucg==", - "Y1flEyZZAYxauMo4cmtJ1w==", - "1AeReq55UQotRQVKJ66pmg==", - "xzGzN5Hhbh0m/KezjNvXbQ==", - "meHzY9dIF7llDpFQo1gyMg==", - "RnOXOygwJFqrD+DlM3R5Ew==", - "JKg64m6mU7C/CkTwVn4ASg==", - "gGLz3Ss+amU7y6JF09jq7A==", - "Pu9pEf+Tek3J+3jmQNqrKw==", - "EATnlYm0p3h04cLAL95JgA==", - "o64LDtKq/Fulf1PkVfFcyg==", - "hUWqqG1QwYgGC5uXJpCvJw==", - "RfSwpO/ywQx4lfgeYlBr2w==", - "VaJc9vtYlqJbRPGb5Tf0ow==", - "9JKIJrlQjhNSC46H3Cstcw==", - "6Z9myGCF5ylWljgIYAmhqw==", - "9bAWYElyRN1oJ6eJwPtCtQ==", - "ohK6EftXOqBzIMI+5XnESw==", - "AVjwqrTBQH1VREuBlOyUOg==", - "G2UponGde3/Z+9b2m9abpQ==", - "DoiItHSms0B9gYmunVbRkQ==", - "vUC0HlTTHj6qNHwfviDtAw==", - "hq35Fjgvrcx6I9e6egWS4w==", - "sw+bmpzqsM4gEQtnqocQLQ==", - "ApiuEPWr8UjuRyJjsYZQBw==", - "VXu4ARjq7DS2IR/gT24Pfw==", - "3TbRZtFtsh9ez8hqZuTDeA==", - "CazLJMJjQMeHhYLwXW7YNg==", - "ROSt+NlEoiPFtpRqKtDUrQ==", - "IUwVHH6+8/0c+nOrjclOWA==", - "lkzFdvtBx5bV6xZO0cxK7g==", - "4ekt4m38G9m599xJCmhlug==", - "fzkmVWKhJsxyCwiqB/ULnQ==", - "LZAKplVoNjeQgfaHqkyEJA==", - "91vfsZ7Lx9x5gqWTOdM4sg==", - "MVoxyIA+emaulH8Oks8Weg==", - "oGH7SMLI2/qjd9Vnhi3s0A==", - "vmqfGJE6r4yDahtU/HLrxw==", - "Y5KKN7t/v9JSxG/m1GMPSA==", - "gXlb7bbRqHXusTE5deolGA==", - "/2c4oNniwhL3z5IOngfggg==", - "HgIFX42oUdRPu7sKAXhNWg==", - "A3dX2ShyL9+WOi6MNJBoYQ==", - "hN9bmMHfmnVBVr+7Ibd2Ng==", - "DB706G73NpBSRS8TKQOVZw==", - "JSyq2MIuObPnEgEUDyALjQ==", - "kSUectNPXpXNg+tIveTFRw==", - "XVVy3e6dTnO3HpgD6BtwQw==", - "td7nDgTDmKPSODRusMcupw==", - "Lt/pVD4TFRoiikmgAxEWEw==", - "mmRob7iyTkTLDu8ObmTPow==", - "Fd0c8f2eykUp9GYhqOcKoA==", - "18RKixTv12q3xoBLz6eKiA==", - "RClzwwKh51rbB4ekl99EZA==", - "oONlXCW4aAqGczQ/bUllBw==", - "foPAmiABJ3IXBoed2EgQXA==", - "wEJDulZafLuXCvcqBYioFQ==", - "K1RgR6HR5uDEQgZ32TAFgA==", - "SEIZhyguLoyH7So0p1KY0A==", - "ggIfX1J4dX3xQoHnHUI7VA==", - "HBRzLacCVYfwUVGzrefZYg==", - "aWZRql2IUPVe9hS3dxgVfQ==", - "Err1mbWJud80JNsDEmXcYg==", - "Z2MkqmpQXdlctCTCUDPyzw==", - "JnE6BK0vpWIhNkaeaYNUzw==", - "5dUry23poD+0wxZ3hH6WmA==", - "DwP0MQf71VsqvAbAMtC3QQ==", - "kHcBZXoxnFJ+GMwBZ/xhfQ==", - "SUAwMWLMml8uGqagz5oqhQ==", - "79uTykH43voFC3XhHHUzKg==", - "P5fucOJhtcRIoElFJS4ffg==", - "s8NpalwgPdHPla7Zi9FJ3w==", - "8cXqZub6rjgJXmh1CYJBOg==", - "tY916jrSySzrL+YTcVmYKQ==", - "DRiFNojs7wM8sfkWcmLnhQ==", - "wqUJ1Gq1Yz2cXFkbcCmzHQ==", - "0u+0WHr7WI6IlVBBgiRi6w==", - "GCYI9Dn1h3gOuueKc7pdKA==", - "nVDxVhaa2o38gd1XJgE3aw==", - "5I/heFSQG/UpWGx0uhAqGQ==", - "1PvTn90xwZJPoVfyT5/uIQ==", - "jHOoSl3ldFYr9YErEBnD3w==", - "swJhrPwllq5JORWiP5EkDA==", - "tj2rWvF2Fl+XIccctj8Mhw==", - "QvYZxsLdu+3nV/WhY1DsYg==", - "fKalNdhsyxTt1w08bv9fJA==", - "CHLHizLruvCrVi9chj9sXA==", - "sa2DECaqYH1z1/AFhpHi+g==", - "LbPp1oL0t3K2BAlIN+l8DA==", - "5SbwLDNT6sBOy6nONtUcTg==", - "AfVPdxD3FyfwwNrQnVNQ7A==", - "jt9Ocr9D8EwGRgrXVz//aQ==", - "KkwQL0DeUM3nPFfHb2ej+A==", - "WwraoO97OTalvavjUsqhxQ==", - "fAKFfwlCOyhtdBK6yNnsNg==", - "EqMlrz1to7HG4GIFTPaehQ==", - "YmjZJyNfHN5FaTL/HAm8ww==", - "L2D7G0btrwxl9V4dP3XM5Q==", - "oUqO4HrBvkpSL781qAC9+w==", - "c6Yhwy/q3j7skXq52l36Ww==", - "FWphIPZMumqnXr1glnbK4w==", - "AcKwfS8FRVqb72uSkDNY/Q==", - "uSIiF1r9F18avZczmlEuMQ==", - "XrFDomoH2qFjQ2jJ2yp9lA==", - "N2X7KWekNN+fMmwyXgKD5w==", - "IdmcpJXyVDajzeiGZixhSA==", - "Wf2olJCYZRGTTZxZoBePuQ==", - "oVlG+0rjrg2tdFImxIeVBA==", - "7w4PDRJxptG8HMe/ijL6cQ==", - "rueNryrchijjmWaA3kljYg==", - "ZybIEGf1Rn/26vlHmuMxhw==", - "yYVW07lOZHdgtX42xJONIA==", - "4ifNsmjYf1iOn2YpMfzihg==", - "KTjwL+qswa+Bid8xLdjMTg==", - "THfzE2G2NVKKfO+A2TjeFw==", - "QoqHzpHDHTwQD5UF30NruQ==", - "dTMoNd6DDr1Tu8tuZWLudw==", - "wOc4TbwQGUwOC1B3BEZ4OQ==", - "gfhkPuMvjoC3CGcnOvki3Q==", - "vljJciS+uuIvL7XXm5688g==", - "EGLOaMe6Nvzs/cmb7pNpbg==", - "oLWWIn/2AbKRHnddr2og9g==", - "7l0RMKbONGS/goW/M+gnMQ==", - "eFkXKRd2dwu/KWI5ZFpEzw==", - "jWsC7kdp2YmIZpfXGUimiA==", - "Jcxjli2tcIAjCe+5LyvqdQ==", - "MUkRa/PjeWMhbCTq43g6Aw==", - "g2nh2xENCFOpHZfdEXnoQA==", - "x6M66krXSi0EhppwmDmsxA==", - "26Wmdp6SkKN74W0/XPcnmA==", - "ycjv4XkS5O7zcF3sqq9MwQ==", - "gfnbviaVhKvv1UvlRGznww==", - "aIPde9CtyZrhbHLK740bfw==", - "0p8YbEMxeb73HbAfvPLQRw==", - "Is3uxoSNqoIo5I15z6Z2UQ==", - "NZtcY8fIpSKPso/KA6ZfzA==", - "iQ304I1hmLZktA1d1cuOJA==", - "0QB0OUW5x2JLHfrtmpZQ+w==", - "kgyUtd8MFe0tuuxDEUZA9w==", - "AcbG0e6xN8pZfYAv7QJe1Q==", - "bb/U8UynPHwczew/hxLQxw==", - "NuBYjwlxadAH+vLWYRZ3bg==", - "Ao1Zc0h5AdSHtYt1caWZnQ==", - "FL/j3GJBuXdAo54JYiWklQ==", - "E2v8Kk60qVpQ232YzjS2ow==", - "zVupSPz7cD0v/mD/eUIIjg==", - "sEeblUmISi1HK4omrWuPTA==", - "xQpYjaAmrQudWgsdu24J0A==", - "vCekQ2nOQKiN/q8Be/qwZg==", - "8g08gjG/QtvAYer32xgNAg==", - "miiOqnhtef1ODjFzMHnxjA==", - "sXlFMSTBFnq0STHj6cS/8w==", - "+SclwwY8R2RPrnX54Z+A6w==", - "g8TcogVxHpw7uhgNFt5VCQ==", - "9viAzLFGYYudBYFu7kFamg==", - "BAJ+/jbk2HyobezZyB9LiQ==", - "/DJgKE9ouibewuZ2QEnk6w==", - "fxg/vQq9WPpmQsqQ4RFYaA==", - "lM/EhwTsbivA7MDecaVTPw==", - "pVgjGg4TeTNhKimyOu3AAw==", - "gYnznEt9r97haD/j2Cko7g==", - "/ngbFuKIAVpdSwsA3VxvNw==", - "VCL3xfPVCL5RjihQM59fgg==", - "eDWsx4isnr2xPveBOGc7Hw==", - "FIOCTEbzb2+KMCnEdJ7jZw==", - "40HzgVKYnqIb6NJhpSIF0A==", - "ccK42Lm8Tsv73YMVZRwL6A==", - "MpAwWMt7bcs4eL7hCSLudQ==", - "zxsSqovedB3HT99jVblCnQ==", - "4erEA42TqGA9K4iFKkxMMA==", - "BaRwTrc5ulyKbW4+QqD0dw==", - "CT3ldhWpS1SEEmPtjejR/Q==", - "lkl6XkrTMUpXi46dPxTPxg==", - "3EhLkC9NqD3A6ApV6idmgg==", - "fsW2DaKYTCC7gswCT+ByQQ==", - "pW4gDKtVLj48gNz6V17QdA==", - "KjfL7YyVqmCJGBGDFdJ0gw==", - "bGGUhiG9SqJMHQWitXTcYQ==", - "8RtLlzkGEiisy1v9Xo0sbw==", - "R81DX/5a7DYKkS4CU+TL+w==", - "Tu6w6DtX2RJJ3Ym3o3QAWw==", - "nx/U4Tode5ILux4DSR+QMg==", - "mjQS8CpyGnsZIDOIEdYUxg==", - "wJpepvmtQQ3sz3tVFDnFqw==", - "a4rPqbDWiMivVzaRxvAj7g==", - "6o5g9JfKLKQ2vBPqKs6kjg==", - "UzPPFSXgeV7KW4CN5GIQXA==", - "NdVyHoTbBhX6Umz/9vbi0g==", - "Fzuq+Wg7clo6DTujNrxsSA==", - "XXFr0WUuGsH5nXPas7hR3Q==", - "JVSLiwurnCelNBiG2nflpQ==", - "NiawWuMBDo0Q3P2xK/vnLQ==", - "nNaGqigseHw30DaAhjBU3g==", - "+edqJYGvcy1AH2mEjJtSIg==", - "1WIi4I62GqkjDXOYqHWJfQ==", - "rwplpbNJz0ADUHTmzAj15Q==", - "iWNlSnwrtCmVF89B+DZqOQ==", - "tHDbi43e6k6uBgO0hA+Uiw==", - "fHNpW230mNib08aB7IM3XQ==", - "OChiB4BzcRE8Qxilu6TgJg==", - "d+ctfXU0j07rpRRzb5/HDA==", - "GDMqfhPQN0PxfJPnK1Bb9A==", - "bLd38ZNkVeuhf0joEAxnBQ==", - "nvUKoKfC6j8fz3gEDQrc/w==", - "fhcbn9xE/6zobqQ2niSBgA==", - "HGxe+5/kkh6R9GXzEOOFHA==", - "mPwCyD0yrIDonVi+fhXyEQ==", - "5PfGtbH9fmVuNnq83xIIgQ==", - "XePy/hhnQwHXFeXUQQ55Vg==", - "yfAaL0MMtSXPQ37pBdmHxQ==", - "NiQ/m4DZXUbpca9aZdzWAw==", - "uT6WRh5UpVdeABssoP2VTg==", - "oxoZP897lgMg/KLcZAtkAg==", - "oKt57TPe4PogmsGssc3Cbg==", - "RxmdoO8ak8y/HzMSIm+yBQ==", - "6leyDVmC5jglAa98NQ3+Hg==", - "+QosBAnSM2h4lsKuBlqEZw==", - "hy303iin+Wm7JA6MeelwiQ==", - "m9iuy4UtsjmyPzy6FTTZvw==", - "f6Ye5F0Lkn34uLVDCzogFQ==", - "iGykaF+h4p46HhrWqL8Ffg==", - "LPYFDbTEp5nGtG6uO8epSw==", - "t2vWMIh2BvfDSQaz5T1TZw==", - "OONAvFS/kmH7+vPhAGTNSg==", - "g/z9yk94XaeBRFj4hqPzdw==", - "2wesXiib76wM9sqRZ7JYwQ==", - "n7h9v2N1gOcvMuBEf8uThw==", - "ITYL3tDwddEdWSD6J6ULaA==", - "inrUwXyKikpOW0y2Kl1wGw==", - "iwKBOGDTFzV4aXgDGfyUkw==", - "+fcjH2kZKNj8quOytUk4nQ==", - "Srl4HivgHMxMOUHyM3jvNw==", - "qngzBJbiTB4fivrdnE5gOg==", - "G0MlFNCbRjXk4ekcPO/chQ==", - "t+bYn9UqrzKiuxAYGF7RLA==", - "RVD3Ij6sRwwxTUDAxwELtA==", - "RNdyt6ZRGvwYG5Ws3QTuEA==", - "9DRHdyX8ECKHUoEsGuqR4Q==", - "oMJLQTH1wW7LvOV0KRx/dw==", - "bjLZ7ot/X/vWSVx4EYwMCg==", - "+p8pofUlwn8vV6Rp6+sz9g==", - "cchuqe+CWCJpoakjHLvUfA==", - "NvurnIHin4O+wNP7MnrZ1w==", - "RBMv0IxXEO3o7MnV47Bzow==", - "xTizUioizbMQxD0T6fy/EQ==", - "ZCdad3AwhVArttapWFwT/Q==", - "Hy1nqC40l5ItxumkIC2LAA==", - "W/5ThNLu43uT1O+fg0Fzwg==", - "b3BQG9/9qDNC/bNSTBY/sQ==", - "neQoa8pvETr07blVMN3pgA==", - "oR8rvIZoeoaZ/ufpo0htfQ==", - "zEzWZ6l7EKoVUxvk/l78Mw==", - "IHyIeMad23fSDisblwyfpA==", - "m6srF+pMehggHB1tdoxlPg==", - "kggaIvN2tlbZdZRI8S5Apw==", - "2RFaMPlSbVuoEqKXgkIa5A==", - "//eHwmDOQRSrv+k9C/k3ZQ==", - "X/Gha4Ajjm/GStp/tv+Jvw==", - "+H0Rglt/HnhZwdty2hsDHg==", - "a1aL8zQ+ie3YPogE3hyFFg==", - "HxEU37uBMeiR5y8q/pM42g==", - "68nqDtXOuxF7DSw6muEZvg==", - "s5+78jS4hQYrFtxqTW3g1Q==", - "drfODfDI6GyMW7hzkmzQvA==", - "pT1raq2fChffFSIBX3fRiA==", - "sfowXUMdN2mCoBVrUzulZg==", - "AV/YJfdoDUdRcrXVwinhQg==", - "3AKEYQqpkfW7CZMFQZoxOw==", - "PHwJ5ZAqqftZ4ypr8H1qiQ==", - "AoN/pnK4KEUaGw4V9SFjpg==", - "soBA65OmZdfBGJkBmY/4Iw==", - "mSstwJq7IkJ0JBJ5T8xDKg==", - "h13Xuonj+0dD1xH86IhSyQ==", - "HK9xG03FjgCy8vSR+hx8+Q==", - "oFanDWdePmmZN0xqwpUukA==", - "zCRZgVsHbQZcVMHd9pGD3A==", - "EvSB+rCggob2RBeXyDQRvQ==", - "tXuu7YpZOuMLTv87NjKerA==", - "DJ+a37tCaGF5OgUhG+T0NA==", - "KkXlgPJPen6HLxbNn5llBw==", - "2W6lz1Z7PhkvObEAg2XKJw==", - "n+xYzfKmMoB3lWkdZ+D3rg==", - "CPDs+We/1wvsGdaiqxzeCQ==", - "2Wvk/kouEEOY0evUkQLhOQ==", - "ezsm4aFd6+DO9FUxz0A8Pg==", - "9sYLg75/hudZaBA3FrzKHw==", - "Pp1ZMxJ8yajdbfKM4HAQxA==", - "xiyRfVG0EfBA+rCk+tgWRQ==", - "/IarsLzJB8bf0AupJJ+/Eg==", - "LJeLdqmriyAQp+QjZGFkdQ==", - "IhHyHbHGyQS+VawxteLP0w==", - "nGzPc0kI/EduVjiK7bzM6Q==", - "m06wctjNc3o7iyBHDMZs2w==", - "mSJF9dJnxZ15lTC6ilbJ2A==", - "xdmY+qyoxxuRZa9kuNpDEg==", - "oNOI17POQCAkDwj6lJsYOA==", - "p73gSu4d+4T/ZNNkIv9Nlw==", - "vOJ55zFdgPPauPyFYBf01w==", - "4A+RHIw+aDzw0rSRYfbc7g==", - "/gi3UZmunVOIXhZSktZ8zQ==", - "a6vem8n6WmRZAalDrHNP0g==", - "kGeXrHEN6o7h5qJYcThCPw==", - "wrewZ0hoHODf7qmoGcOd7g==", - "Z0sjccxzKylgEiPCFBqPSA==", - "LKyOFgUKKGUU/PxpFYMILw==", - "L2RofFWDO0fVgSz4D2mtdw==", - "KI7tQFYW38zYHOzkKp9/lQ==", - "ewe/P3pJLYu/kMb5tpvVog==", - "IADk81pIu8NIL/+9Fi94pA==", - "0L0FVcH5Dlj3oL8+e9Na7g==", - "tdiTXKrkqxstDasT0D5BPA==", - "R906Kxp2VFVR3VD+o6Vxcw==", - "wc+8ohFWgOF4VlSYiZIGwQ==", - "wJKFMqh6MGctWfasjHrPEg==", - "UHpge5Bldt9oPGo2oxnYvQ==", - "vX7RIhatQeXAMr1+OjzhZw==", - "s2AKVTwrY65/SWqQxDGJQg==", - "Q4bfQslDSqU64MOQbBQEUw==", - "mVT74Eht+gAowINoMKV7IQ==", - "EuGWtIbyKToOe6DN3NkVpQ==", - "ALlGgVDO8So71ccX0D6u2g==", - "Rww3qkF3kWSd+AaMT0kfdw==", - "hlvtFGW8r0PkbUAYXEM+Hw==", - "Oc3BqTF3ZBW3xE0QsnFn/A==", - "3j0kFUZ6g+yeeEljx+WXGg==", - "8BLkvEkfnOizJq0OTCYGzw==", - "Lqel4GdU0ZkfoJVXI5WC/Q==", - "rvE64KQGkVkbl07y7JwBqw==", - "HbXv8InyZqFT7i3VrllBgg==", - "zwQ/3MzTJ9rfBmrANIh14w==", - "gglLMohmJDPRGMY1XKndjQ==", - "lyfqic/AbEJbCiw+wA01FA==", - "XqUO7ULEYhDOuT/I2J8BOA==", - "wPhJcp7U7IVX83szbIOOxQ==", - "1gA65t5FiBTEgMELTQFUPQ==", - "ll2M0QQzBsj5OFi02fv3Yg==", - "wt+qDLU38kzNU75ZYi3Hbw==", - "a4EYNljinYTx9vb1VvUA6A==", - "T6LA+daQqRI38iDKZTdg1A==", - "gwyVIrTk5o0YMKQq4lpJ+Q==", - "bPRX2zl+K1S0iWAWUn1DZw==", - "KQw25X4LnQ9is+qdqfxo0w==", - "6tfM6dx3R5TiVKaqYQjnCg==", - "OlwHO6Sg2zIwsCOCRu0HiQ==", - "mr1qjhliRfl87wPOrJbFQg==", - "8c+lvG5sZNimvx9NKNH3ug==", - "5Nk2Z94DhlIdfG5HNgvBbQ==", - "F50iXjRo1aSTr37GQQXuJA==", - "tfgO55QqUyayjDfQh+Zo1Q==", - "h7Fc+eT/GuC8iWI+YTD0UQ==", - "3TjntNWtpG7VqBt3729L6Q==", - "+DWs0vvFGt6d3mzdcsdsyA==", - "VJt2kPVBLEBpGpgvuv1oUw==", - "XLq/nWX8lQqjxsK9jlCqUg==", - "9s3ar9q32Y5A3tla5GW/2Q==", - "51yLpfEdvqXmtB6+q27/AQ==", - "AiMtfedwGcddA+XYNc+21g==", - "p/48hurJ1kh2FFPpyChzJg==", - "CRiL6zpjfznhGXhCIbz8pQ==", - "/jDVt9dRIn+o4IQ1DPwbsg==", - "UNdKik7Vy23LjjPzEdzNsg==", - "Koiog/hpN7ew5kgJbty34A==", - "4itEKfbRCJvqlgKnyEdIOQ==", - "zi04Yc01ZheuFAQc59E45A==", - "etRjRvfL/IwceY/IJ1tgzQ==", - "3sNJJIx1NnjYcgJhjOLJOg==", - "4yVqq66iHYQjiTSxGgX2oA==", - "Q8RVI/kRbKuXa8HAQD7zUA==", - "OERGn45uzfDfglzFFn6JAg==", - "JGEy6VP3sz3LHiyT2UwNHQ==", - "1zDfWw5LdG20ClNP1HYxgw==", - "TGB+FIzzKnouLh5bAiVOQg==", - "n5GA+pA9mO/f4RN9NL9lNg==", - "bUxQBaqKyvlSHcuRL9whjg==", - "tOdlnsE3L3XCBDJRmb/OqA==", - "XdkxmYYooeDKzy7PXVigBQ==", - "PMvG4NqJP76kMRAup6TSZA==", - "qpFJZqzkklby+u1UT3c1iA==", - "fW3QZyq5UixIA1mP6eWgqQ==", - "9nMltdrrBmM5ESBY2FRjGA==", - "1Vtrv6QUAfiYQjlLTpNovg==", - "ur9JDCVNwzSH4q4ngDlHNQ==", - "4u3eyKc+y3uRnkASrgBVUw==", - "XddlSluOH6VkR7spFIFmdQ==", - "NOmu8oZc6CcKLu+Wfz2YOQ==", - "3Ejtsqw3Iep/UQd0tXnSlg==", - "y/e3HSdg7T19FanRpJ7+7Q==", - "YodhkayN5wsgPZEYN7/KNA==", - "pZfn6IiG+V28fN8E2hawDQ==", - "jGHMJqbj6X1NdTDyWmXYAQ==", - "olTSlmirL9MFhKORiOKYkQ==", - "CrJDgdfzOea2M2hVedTrIg==", - "fpXijBOM3Ai1RkmHven5Ww==", - "eLYKLr4labZeLiRrDJ9mnA==", - "9vmJUS7WIVOlhMqwipAknQ==", - "G7J/za99BFbAZH+Q+/B8WA==", - "Hb+pdSavvJ9lUXkSVZW8Og==", - "gTB2zM3RPm27mUQRXc/YRg==", - "e5KCqQ/1GAyVMRNgQpYf6g==", - "1ApqwW7pE+XUB2Cs2M6y7g==", - "/wiA2ltAuWyBhIvQAYBTQw==", - "HFCQEiZf7/SNc+oNSkkwlA==", - "JFi6N1PlrpKaYECOnI7GFg==", - "E4ojRDwGsIiyuxBuXHsKBA==", - "+25t/2lo0FUEtWYK8LdQZQ==", - "up2MVDi9ve+s83/nwNtZ7Q==", - "cXpfd6Io6Glj2/QzrDMCvA==", - "DCvI9byhw0wOFwF1uP6xIQ==", - "PibGJQNw7VHPTgqeCzGUGA==", - "0ZRGz+oj2infCAkuKKuHiQ==", - "2QS/6OBA1T01NlIbfkTYJg==", - "P14k+fyz0TG9yIPdojp52w==", - "g5EzTJ0KA4sO3+Opss3LMg==", - "R5oOM58zdbVxFSDQnNWqeA==", - "Vg2E5qEDfC+QxZTZDCu9yQ==", - "YPgMthbpcBN2CMkugV60hQ==", - "gZWTFt5CuLqMz6OhWL+hqQ==", - "YrEP9z2WPQ8l7TY1qWncDA==", - "7p4NpnoNSQR7ISg+w+4yFg==", - "9L6yLO93sRN70+3qq3ObfA==", - "QH36wzyIhh6I56Vnx79hRA==", - "9DtM1vls4rFTdrSnQ7uWXw==", - "ZlOAnCLV1PkR0kb3E+Nfuw==", - "9UhKmKtr4vMzXTEn74BEhg==", - "Ndx5LDiVyyTz/Fh3oBTgvA==", - "mXZ4JeBwT2WJQL4a/Tm4jQ==", - "N9nD7BGEM7LDwWIMDB+rEQ==", - "dmAfbd9F0OJHRAhNMEkRsA==", - "jV/D2B11NLXZRH77sG9lBw==", - "1C50kisi9nvyVJNfq2hOEQ==", - "NMbAjbnuK7EkVeY3CQI5VA==", - "J1nYqJ7tIQK1+a/3sMXI/Q==", - "m416yrrAlv+YPClGvGh+qQ==", - "rLZII1R6EGus+tYCiUtm6g==", - "xktOghh1S9nIX6fXWnT+Ug==", - "FcFcn4qmPse5mJCX5yNlsA==", - "xAAipGfHTGTjp9Qk1MR8RQ==", - "RQOlmzHwQKFpafKPJj0D8w==", - "WRjYdKdtnd1G9e/vFXCt0g==", - "z0BU//aSjYHAkGGk3ZSGNg==", - "M55eersiJuN9v61r8DoAjQ==", - "l2mAbuFF3QBIUILDODiUHQ==", - "IhpXs1TK7itQ3uTzZPRP5Q==", - "t2EkpUsLOEOsrnep0nZSmA==", - "lMaO8Yf+6YNowGyhDkPhQA==", - "UbSFw5jtyLk5MealqJw++A==", - "5u2PdDcIY3RQgtchSGDCGg==", - "MQYM3BT77i35LG9HcqxY2Q==", - "8AfCSZC0uasVON9Y/0P2Pw==", - "evaWFoxZNQcRszIRnxqB+A==", - "+8PiQt6O7pJI/nIvQpDaAg==", - "eRwaYiog2DdlGQyaltCMJg==", - "JyUJEnU6hJu8x2NCnGrYFw==", - "l0E0U/CJsyCVSTsXW4Fp+w==", - "XV13yK0QypJXmgI+dj4KYw==", - "jrRH0aTUYCOpPLZwzwPRfQ==", - "N3YDSkBUqSmrmNvZZx4a1Q==", - "0yJ7TQYzcp3DXVSvwavr+w==", - "rhgtLQh0F9bRA6IllM7AGw==", - "IWZnTJ3Hb9qw9HAK/M9gTw==", - "izeyFvXOumNgVyLrbKW45g==", - "xYD8jrCDmuQna+p1ebnKDQ==", - "SOdpdrk2ayeyv0xWdNuy9g==", - "HYylUirJRqLm+dkp39fSOQ==", - "q4z6A4l3nhX3smTmXr+Sig==", - "Zyo0fzewcqXiKe2mAwKx5g==", - "LMEtzh0+J27+4zORfcjITw==", - "LoUv/f2lcWpjftzpdivMww==", - "mXBfDUt/sBW5OUZs2sihvw==", - "PggVPQL5YKqSU/1asihcrg==", - "mI0eT4Rlr7QerMIngcu/ng==", - "NmQrsmb8PVP05qnSulPe5Q==", - "TcyyXrSsQsnz0gJ36w4Dxw==", - "y4mfEDerrhaqApDdhP5vjA==", - "ynaj4XjU27b7XbqPyxI8Ig==", - "Ua6aO6HwM+rY4sPR19CNFA==", - "3go7bJ9WqH/PPUTjNP3q/Q==", - "n1ixvP7SfwYT3L2iWpJg6A==", - "W8y32OLHihfeV0XFw7LmOg==", - "uzkNhmo2d08tv5AmnyqkoQ==", - "hJ8leLNuJ6DK5V8scnDaZQ==", - "KodYHHN62zESrXUye7M01g==", - "H+yPRiooEh5J7lAJB4RZ7Q==", - "dZg5w8rFETMp9SgW7m0gfg==", - "LsmsPokAwWNCuC74MaqFCQ==", - "1QGhj9NONF2rC44UdO+Izw==", - "uwGivY3/C9WK+dirRPJZ4A==", - "rXGWY/Gq+ZEsmvBHUfFMmQ==", - "j4FBMnNfdBwx0VsDeTvhFg==", - "81nkjWtpBhqhvOp6K8dcWg==", - "dCDaYYrgASXPMGFRV0RCGg==", - "Kj1QI+s9261S3lTtPKd9eg==", - "LblwOqNiciHmt2NXjd89tg==", - "46piyANQVvvLqcoMq5G8tQ==", - "XJihma9zSRrXLC+T+VcFDA==", - "K3NBEG8jJTJbSrYSOC3FKw==", - "cT3PwwS6ALZA/na9NjtdzA==", - "wJ4uCrl4DPg70ltw1dZO3w==", - "JATLdpQm//SQnkyCfI5x7Q==", - "X1PaCfEDScclLtOTiF5JUw==", - "444F9T6Y7J67Y9sULG81qg==", - "8JVHFRwAd/SCLU0CRJYofg==", - "aLh1XEUrfR9W82gzusKcOg==", - "U+bB5NjFIuQr/Y5UpXHwxA==", - "Egs14xVbRWjfBBX7X5Z60g==", - "KSorNz/PLR/YYkxaj1fuqw==", - "RDgGGxTtcPvRg/5KRRlz4w==", - "5T39s5CtSrK5awMPUcEWJg==", - "+PUVXkoTqHxJHO18z4KMfw==", - "Bvk8NX4l6WktLcRDRKsK/A==", - "kNGIV3+jQmJlZDTXy1pnyA==", - "E3jMjAgXwvwR8PA53g4+PQ==", - "MbI04HlTGCoc/6WDejwtaQ==", - "aEnHUfn7UE/Euh6jsMuZ7g==", - "z4Bft++f72QeDh4PWGr/sw==", - "1lCcQWGDePPYco4vYrA5vw==", - "iu5csar0IQQBOTgw5OvJwQ==", - "raKMXnnX6PFFsbloDqyVzQ==", - "uPnL9tboMZo0Kl2fe24CmA==", - "8OFxXwnPmrogpNoueZlC4Q==", - "V6CRKrKezPwsRdbm0DJ2Yg==", - "xmGgK3W5y+oCd0K2u8XjZQ==", - "Ry3zgZ6KHrpNyb7+Tt2Pkw==", - "IwLbkL33z+LdTjaFYh93kg==", - "caepyBOAFu0MxbcXrGf6TA==", - "iIWxFdolLcnXqIjPMg+5kQ==", - "P430CeF2MDkuq11YdjvV8A==", - "yCu+DVU/ceMTOZ5h/7wQTg==", - "4mQVNv7FHj+/O6XFqWFt/Q==", - "OEJ40VmMDYzc2ESEMontRA==", - "D66Suu3tWBD+eurBpPXfjA==", - "RNK9G1hfuz3ETY/RmA9+aA==", - "BYpHADmEnzBsegdYTv8B5Q==", - "DBKrdpCE0awppxST4o/zzg==", - "KOmdvm+wJuZ/nT/o1+xOuw==", - "gDxqUdxxeXDYhJk9zcrNyA==", - "UPzS4LR3p/h0u69+7YemrQ==", - "hf9HFxWRNX2ucH8FLS7ytA==", - "ozVqYsmUueKifb4lDyVyrg==", - "TfHvdbl2M4deg65QKBTPng==", - "SzCGM8ypE58FLaR1+1ccxQ==", - "3nthUmLZ30HxQrzr2d7xFA==", - "1jBaRO8Bg5l6TH7qJ8EPiw==", - "eJlcN+gJnqAnctbWSIO9uA==", - "G8LFBop8u6IIng+gQuVg3w==", - "3JhnM6G4L06NHt31lR0zXA==", - "342VOUOxoLHUqtHANt83Hw==", - "hRxbdeniAVFgKUgB9Q3Y+g==", - "cFFE2R4GztNoftYkqalqUQ==", - "YmaksRzoU+OwlpiEaBDYaQ==", - "jon1y9yMEGfiIBjsDeeJdA==", - "oSnrpW4UmmVXtUGWqLq+tQ==", - "zaqyy3GaJ7cp8qDoLJWcTw==", - "luO1R8dUM9gy1E2lojRQoA==", - "YHM6NNHjmodv+G0mRLK7kw==", - "ZSmN8mmI9lDEHkJqBBg0Nw==", - "520wTzrysiRi2Td92Zq0HQ==", - "RAAw14BA1ws5Wu/rU7oegw==", - "vb6Agwzk4JG0Nn7qRPPFMQ==", - "joDXdLpXvRjOqkRiYaD/Sw==", - "dK2DU3t1ns+DWDwfBvH3SQ==", - "gZNJ1Qq6OcnwXqc+jXzMLQ==", - "R8ULpSNu9FcCwXZM0QedSg==", - "mc45FSMtzdw2PTcEBwHWPw==", - "d0qvm3bl38rRCpYdWqolCQ==", - "o9tdzmIu+3J/EYU4YWyTkA==", - "5eXpiczlRdmqMYSaodOUiQ==", - "KYuUNrkTvjUWQovw9dNakA==", - "02im2RooJQ/9UfUrh5LO+A==", - "kWPUUi7x9kKKa6nJ+FDR5Q==", - "6z8CRivao3IMyV4p4gMh7g==", - "SmRWEzqddY9ucGAP5jXjAg==", - "DJscTYNFPyPmTb57g/1w+Q==", - "uOHrw37yF9oLLVd16nUpeg==", - "HaIRV9SNPRTPDOSX9sK/bg==", - "K4yZNVoqHjXNhrZzz2gTew==", - "bTNRjJm+FfSQVfd56nNNqQ==", - "x5lyMArsv1MuJmEFlWCnNw==", - "cxpZ4bloGv734LBf4NpVhA==", - "kUudvRfA33uJDzHIShQd3Q==", - "3Wfj05vCLFAB9vII5AU9tw==", - "FUQySDFodnRhr+NUsWt0KA==", - "eC/RcoCVQBlXdE9WtcgXIw==", - "NoX8lkY+kd2GPuGjp+s0tQ==", - "EzjbinBHx3Wr08eXpH3HXA==", - "0VsaJHR0Ms8zegsCpAKoyg==", - "e2xLFVavnZIUUtxJx+qa1g==", - "Kt6BTG1zdeBZ3nlVk+BZKQ==", - "EUXQZwLgnDG+C8qxVoBNdw==", - "0SkC/4PtnX1bMYgD6r6CLA==", - "rzj6mjHCcMEouL66083BAg==", - "V5HEaY3v9agOhsbYOAZgJA==", - "tJt6VDdAPEemBUvnoc4viA==", - "g0lWrzEYMntVIahC7i0O2g==", - "zCpibjrZOA3FQ4lYt0WoVA==", - "4Xh/B3C16rrjbES+FM1W8g==", - "GHEdXgGWOeOa6RuPMF0xXg==", - "3kREs/qaMX0AwFXN0LO5ow==", - "GLDNTSwygNBmuFwCIm7HtA==", - "JBkbaBiorCtFq9M9lSUdMg==", - "rJCuanCy51ydVD4nInf9IQ==", - "OzFRv+PzPqTNmOnvZGoo5g==", - "7mxU5fJl/c6dXss9H3vGcQ==", - "9J53kk+InE3CKa7cPyCXMw==", - "x9TIZ9Ua++3BX+MpjgTuWA==", - "h0MH5NGFfChgmRJ3E/R3HQ==", - "25w3ZRUzCvJwAVHYCIO5uw==", - "1Wc8jQlDSB4Dp32wkL2odw==", - "ipPPjxpXHS1tcykXmrHPMQ==", - "r95wJtP5rsTExKMS7QhHcw==", - "TZT86wXfzFffjt0f95UF5w==", - "VpmBstwR7qPVqPgKYQTA3g==", - "3++dZXzZ6AFEz7hK+i5hww==", - "mAiD16zf+rCc7Qzxjd5buA==", - "1JI9bT92UzxI8txjhst9LQ==", - "TNyvLixb03aP2f8cDozzfA==", - "spHVvA/pc7nF9Q4ON020+w==", - "GA8k6GQ20DGduVoC+gieRA==", - "T7waQc3PvTFr0yWGKmFQdQ==", - "P0Pc8owrqt6spdf7FgBFSw==", - "DKApp/alXiaPSRNm3MfSuA==", - "UreSZCIdDgloih8KLeX7gg==", - "xJi0T+psHOXMivSOVpMWeQ==", - "cNsC9bH30eM1EZS6IdEdtQ==", - "XjjrIpsmATV/lyln4tPb+g==", - "qt5CsMts2aD4lw/4Q6bHYQ==", - "h+KRDKIvyVUBmRjv1LcCyg==", - "2j83jrPwPfYlpJJ2clEBYQ==", - "ZrCezGLz38xKmzAom6yCTQ==", - "SEGu+cSbeeeZg4xWwsSErQ==", - "Duz/8Ebbd0w6oHwOs0Wnwg==", - "Ci7sS7Yi1+IwAM3VMAB4ew==", - "DG2Qe2DqPs5MkZPOqX363Q==", - "v0Bvws1WYVoEgDt8xmVKew==", - "CtDj/h2Q/lRey20G8dzSgA==", - "WRoJMO0BCJyn5V6qnpUi4Q==", - "RQywrOLZEKw9+kG6qTzr3g==", - "mU4CqbAwpwqegxJaOz9ofQ==", - "aN5x46Gw1VihRalwCt1CGg==", - "U6VQghxOXsydh3Naa5Nz4A==", - "YA+zdEC+yEgFWRIgS1Eiqw==", - "oPcxgoismve6+jXyIKK6AQ==", - "PqLCd/pwc+q5GkL6MB0jTg==", - "fHL+fHtDxhALZFb9W/uHuw==", - "dhTevyxTYAuKbdLWhG47Kw==", - "VllbOAjeW3Dpbj5lp2OSmA==", - "3itfXtlLPRmPCSYaSvc39Q==", - "GNak/LFeoHWlTdLW1iU4eg==", - "HuDuxs2KiGqmeyY1s1PjpQ==", - "xs8J3cesq7lDhP/dNltqOw==", - "foXSDEUwMhfHWJSmSejsQg==", - "6fWom3YoKvW6NIg6y9o9CQ==", - "NhZbSq0CjDNOAIvBHBM9zA==", - "5w4FbRhWACP7k2WnNitiHg==", - "0UeRwDID2RBIikInqFI7uw==", - "/y/jHHEpUu5TR+R2o96kXA==", - "voO3krg4sdy4Iu+MZEr8+g==", - "hdzol5dk//Q6tCm4+OndIA==", - "Nc5kiwXCAyjpzt43G5RF1A==", - "3UBYBMejKInSbCHRoJJ7dg==", - "dRFCIbVu0Y8XbjG5i+UFCQ==", - "t8pjhdyNJirkvYgWIO/eKg==", - "FAXzjjIr8l1nsQFPpgxM/g==", - "SPGpjEJrpflv1hF0qsFlPw==", - "9Y1ZmfiHJd9vCiZ6KfO1xQ==", - "7Eqzyb+Kep+dIahYJWNNxQ==", - "9rL8nC/VbSqrvnUtH9WsxQ==", - "H4FZ5Wcnb40hQM1DMGGe8A==", - "AjoXWGb/l9xH/hscgEc6kQ==", - "6nzFl41uutgDdC30oOeCqg==", - "3jo1jRy3MybXtoLR+JIbJw==", - "mXdE08dv+OlIhlcqMBH2Gg==", - "Ifd7DI6o8N5gnyAKqZTlRw==", - "JNUvg/kxL3rdcZnD4IqUxw==", - "ry8B+sAHNeFIZHCCDynFyw==", - "TXaEd5lIKhzjcncfNcBgSg==", - "Mr3ehuDMUimOSn+FlkchdA==", - "cwiGhjmX9v8I7E/ekQ0h+g==", - "I/r5+1jnqumCPprKC/2BqA==", - "S4V3MfGYk8I4fd3WH09yYw==", - "A+crVyUeynAkEMYKbnFjZw==", - "vtyHcNQPcUTRuZcQvRUX4Q==", - "UNKx1ZVv3HNp21zrUSm6ew==", - "rsAlvGLv2D0swd6ol3WlvA==", - "2qwqb8ENAR2fpQnw55sPDw==", - "xBJJuYYnsTJOeFggZSKC4Q==", - "omvtZZKruPiEt6fV0YXTdg==", - "JZEgKUhUN+USJsvtF4HZOg==", - "euG/kpJ5elSDOGNbWWDfNQ==", - "DiiVmM6/WNcp0MUjSaFq6w==", - "QCNS8gAml1M2pJ+MxZsueg==", - "M6+pggFsHfM3alFxcMOFNQ==", - "YLoWpDTwXnszEQm8FA164Q==", - "N08oUZtlXbQvO9t3vXnGog==", - "jkjuJowWuOa4CLY+RZiErQ==", - "mPf+S+6oAoVIYEVveaiNFA==", - "R0iVyo5qreP/68uZlZphDA==", - "GYlqhQgp03B0mXpUhQ+ZCA==", - "lQNbmWD7PhwNGye+zbc3GQ==", - "cNeaOJEOzUSDdRmenPQyuw==", - "Gp66/Txv6ebv5bn85TuQtA==", - "xAda6DVkcvvqhI8vWZeGyA==", - "Ggk1Qa0lEdAgCXG6SmCkBA==", - "MYuO7ZURXtyaf56q7hH4Zw==", - "RUIdZRTgJBudWUZQFgiFaQ==", - "bgFJxLirUom2zT0h7LdOpw==", - "A2gaOpIlrS7TKVQgy9XMSw==", - "zevXp0lqqnXv9X6Bgmjtqg==", - "a5iuFqWAdFFsRgp7SFYwNg==", - "TxTy0TaDsWTcRH3wdBEQLQ==", - "jephVdKDeJIhXPrdMOJ4qA==", - "C4KdamfqUPuJ3RGFdpIEdw==", - "zl6l2Ioz1qovRUIWrSyxVA==", - "+gGaDxUe0UnNrf3PPg1qQQ==", - "1HgbrlaLMHS6Qj/0kkaJxg==", - "eGxTly6Pnu7eV/MKYMmuYw==", - "RAMKfnlrzNjpyh2BWt6JHg==", - "4pZQm9ogCZ/EAR9pjJm1eA==", - "l1zv3erwXIegQFd02NlCag==", - "uHGyRZchuA4ulmuD5LqquQ==", - "/vFu89tsV+lbcoiqM/XWog==", - "63SUgqfQimrmjvy/bEDQ0w==", - "JLHuf+FlChFDa9LYfTQ4Eg==", - "I+ZnPePTFX8ZODe14bxgyA==", - "CtoK1k3U82BkvzuPfQ4pjQ==", - "6nqQm4C7y+wZ+qX0kVjwmA==", - "+C3kBxRXIjqBk0EJxe3Xfg==", - "qVu748pIxEZtiywg4/4qhw==", - "07o+sKjjRCYkwy/ACyoYhg==", - "CiLF4dkbLURekBcQbwPUVA==", - "W/N5/nkp4iQIPYfAagVV7A==", - "3PJOphhEjw0E4arTfVVwdg==", - "YdMbARHwB+bSOd0PlTlXiA==", - "41hbx5Yr7UWxsV6+bWUYUA==", - "SqJHXD0MorNwHtHL9TbWLg==", - "pWKGUzm/muwOiBtzkRMnRg==", - "az9zZ7HTa4FJGRQMcamvEw==", - "zavAAN8C9Wo8oBLyztp63Q==", - "yBAnPmwrMJ8kpPP292S/Lw==", - "E6szQhjuUAz2e0h9ffQfEQ==", - "Fs3cQxQyS9kM4T8j5R7rWw==", - "GB5fRLZxnjRUfEe0SwcePQ==", - "+9OY8xkT9dM/rb2T6ACtOQ==", - "If2xFBD1p91iDD7ZrsfgjA==", - "QCFfoMhy8EleZAOpfRY88w==", - "NobWPk1Z6bHt5s9NHXt/pg==", - "nK6T4vV4384OIcqO5tQMhA==", - "Zov1EzK+VomiuwT1+ulQ8g==", - "pF98OKDvLUlnTzo7wmlpOw==", - "Wrq9YDsieAMC3Y2DSY5Rcg==" - ] -} diff --git a/basilisk/base/content/newtab/newTab.js b/basilisk/base/content/newtab/newTab.js index bbd2ef3..1731eda 100644 --- a/basilisk/base/content/newtab/newTab.js +++ b/basilisk/base/content/newtab/newTab.js @@ -11,7 +11,6 @@ Cu.import("resource://gre/modules/XPCOMUtils.jsm"); Cu.import("resource://gre/modules/Services.jsm"); Cu.import("resource://gre/modules/PageThumbs.jsm"); Cu.import("resource://gre/modules/BackgroundPageThumbs.jsm"); -Cu.import("resource:///modules/DirectoryLinksProvider.jsm"); Cu.import("resource://gre/modules/NewTabUtils.jsm"); XPCOMUtils.defineLazyModuleGetter(this, "Rect", diff --git a/basilisk/base/content/newtab/newTab.xhtml b/basilisk/base/content/newtab/newTab.xhtml index eef51b4..7de1ff3 100644 --- a/basilisk/base/content/newtab/newTab.xhtml +++ b/basilisk/base/content/newtab/newTab.xhtml @@ -73,7 +73,6 @@ <div id="newtab-horizontal-margin"> <div class="newtab-side-margin"/> <div id="newtab-grid"> - <h1 id="topsites-heading"/> </div> <div class="newtab-side-margin"/> </div> diff --git a/basilisk/base/content/newtab/page.js b/basilisk/base/content/newtab/page.js index f7626ce..b92d3d5 100644 --- a/basilisk/base/content/newtab/page.js +++ b/basilisk/base/content/newtab/page.js @@ -48,11 +48,6 @@ var gPage = { let enabled = gAllPages.enabled; this._updateAttributes(enabled); - // Update thumbnails to the new enhanced setting - if (aData == "browser.newtabpage.enhanced") { - this.update(); - } - // Initialize the whole page if we haven't done that, yet. if (enabled) { this._init(); @@ -79,10 +74,7 @@ var gPage = { update(reason = "") { // Update immediately if we're visible. if (!document.hidden) { - // Ignore updates where reason=links-changed as those signal that the - // provider's set of links changed. We don't want to update visible pages - // in that case, it is ok to wait until the user opens the next tab. - if (reason != "links-changed" && gGrid.ready) { + if (gGrid.ready) { gGrid.refresh(); } @@ -119,10 +111,6 @@ var gPage = { document.getElementById("newtab-search-submit").value = document.body.getAttribute("dir") == "ltr" ? "\u25B6" : "\u25C0"; - if (Services.prefs.getBoolPref("browser.newtabpage.compact")) { - document.body.classList.add("compact"); - } - // Initialize search. gSearch.init(); @@ -260,8 +248,6 @@ var gPage = { onPageVisibleAndLoaded() { // Send the index of the last visible tile. this.reportLastVisibleTileIndex(); - // Maybe tell the user they can undo an initial automigration - this.maybeShowAutoMigrationUndoNotification(); }, reportLastVisibleTileIndex() { @@ -287,11 +273,5 @@ var gPage = { } } } - - DirectoryLinksProvider.reportSitesAction(sites, "view", lastIndex); - }, - - maybeShowAutoMigrationUndoNotification() { - sendAsyncMessage("NewTab:MaybeShowAutoMigrationUndoNotification"); - }, + } }; diff --git a/basilisk/base/content/newtab/sites.js b/basilisk/base/content/newtab/sites.js index 9d103ce..b952dec 100644 --- a/basilisk/base/content/newtab/sites.js +++ b/basilisk/base/content/newtab/sites.js @@ -171,11 +171,8 @@ Site.prototype = { // first check for end time, as it may modify the link this._checkLinkEndTime(); // setup display variables - let enhanced = gAllPages.enhanced && DirectoryLinksProvider.getEnhancedLink(this.link); let url = this.url; - let title = enhanced && enhanced.title ? enhanced.title : - this.link.type == "history" ? this.link.baseDomain : - this.title; + let title = this.link.type == "history" ? this.link.baseDomain : this.title; let tooltip = (this.title == url ? this.title : this.title + "\n" + url); let link = this._querySelector(".newtab-link"); @@ -244,8 +241,7 @@ Site.prototype = { */ refreshThumbnail: function Site_refreshThumbnail() { // Only enhance tiles if that feature is turned on - let link = gAllPages.enhanced && DirectoryLinksProvider.getEnhancedLink(this.link) || - this.link; + let link = this.link; let thumbnail = this._querySelector(".newtab-thumbnail.thumbnail"); if (link.bgColor) { @@ -267,16 +263,6 @@ Site.prototype = { placeholder.style.backgroundColor = "hsl(" + hue + ",80%,40%)"; placeholder.textContent = link.baseDomain.substr(0,1).toUpperCase(); } - - if (link.enhancedImageURI) { - let enhanced = this._querySelector(".enhanced-content"); - enhanced.style.backgroundImage = 'url("' + link.enhancedImageURI + '")'; - - if (this.link.type != link.type) { - this.node.setAttribute("type", "enhanced"); - this.enhancedId = link.directoryId; - } - } }, _ignoreHoverEvents: function(element) { @@ -296,13 +282,6 @@ Site.prototype = { this._node.addEventListener("dragstart", this, false); this._node.addEventListener("dragend", this, false); this._node.addEventListener("mouseover", this, false); - - // Specially treat the sponsored icon & suggested explanation - // text to prevent regular hover effects - let sponsored = this._querySelector(".newtab-sponsored"); - let suggested = this._querySelector(".newtab-suggested"); - this._ignoreHoverEvents(sponsored); - this._ignoreHoverEvents(suggested); }, /** @@ -333,31 +312,6 @@ Site.prototype = { .add(aIndex); }, - _toggleLegalText: function(buttonClass, explanationTextClass) { - let button = this._querySelector(buttonClass); - if (button.hasAttribute("active")) { - let explain = this._querySelector(explanationTextClass); - explain.parentNode.removeChild(explain); - - button.removeAttribute("active"); - } - else { - let explain = document.createElementNS(HTML_NAMESPACE, "div"); - explain.className = explanationTextClass.slice(1); // Slice off the first character, '.' - this.node.appendChild(explain); - - let link = '<a href="' + TILES_EXPLAIN_LINK + '">' + - newTabString("learn.link") + "</a>"; - let type = (this.node.getAttribute("suggested") && this.node.getAttribute("type") == "affiliate") ? - "suggested" : this.node.getAttribute("type"); - let icon = '<input type="button" class="newtab-control newtab-' + - (type == "enhanced" ? "customize" : "control-block") + '"/>'; - explain.innerHTML = newTabString(type + (type == "sponsored" ? ".explain2" : ".explain"), [icon, link]); - - button.setAttribute("active", "true"); - } - }, - /** * Handles site click events. */ @@ -376,31 +330,13 @@ Site.prototype = { action = "click"; } } - // Handle sponsored explanation link click - else if (target.parentElement.classList.contains("sponsored-explain")) { - action = "sponsored_link"; - } - else if (target.parentElement.classList.contains("suggested-explain")) { - action = "suggested_link"; - } // Only handle primary clicks for the remaining targets else if (button == 0) { aEvent.preventDefault(); if (target.classList.contains("newtab-control-block")) { - // Notify DirectoryLinksProvider of suggested tile block, this may - // affect if and how suggested tiles are recommended and needs to - // be reported before pages are updated inside block() call - if (this.link.targetedSite) { - DirectoryLinksProvider.handleSuggestedTileBlock(); - } this.block(); action = "block"; } - else if (target.classList.contains("sponsored-explain") || - target.classList.contains("newtab-sponsored")) { - this._toggleLegalText(".newtab-sponsored", ".sponsored-explain"); - action = "sponsored"; - } else if (pinned && target.classList.contains("newtab-control-pin")) { this.unpin(); action = "unpin"; @@ -413,11 +349,6 @@ Site.prototype = { action = "pin"; } } - - // Report all link click actions - if (action) { - DirectoryLinksProvider.reportSitesAction(gGrid.sites, action, tileIndex); - } }, /** diff --git a/basilisk/base/jar.mn b/basilisk/base/jar.mn index 72061a6..7672773 100644 --- a/basilisk/base/jar.mn +++ b/basilisk/base/jar.mn @@ -114,8 +114,6 @@ browser.jar: content/browser/newtab/newTab.xhtml (content/newtab/newTab.xhtml) * content/browser/newtab/newTab.js (content/newtab/newTab.js) content/browser/newtab/newTab.css (content/newtab/newTab.css) - content/browser/newtab/newTab.inadjacent.json (content/newtab/newTab.inadjacent.json) - content/browser/newtab/alternativeDefaultSites.json (content/newtab/alternativeDefaultSites.json) * content/browser/pageinfo/pageInfo.xul (content/pageinfo/pageInfo.xul) content/browser/pageinfo/pageInfo.js (content/pageinfo/pageInfo.js) content/browser/pageinfo/pageInfo.css (content/pageinfo/pageInfo.css) diff --git a/basilisk/components/nsBrowserGlue.js b/basilisk/components/nsBrowserGlue.js index b425652..d29009b 100644 --- a/basilisk/components/nsBrowserGlue.js +++ b/basilisk/components/nsBrowserGlue.js @@ -32,7 +32,6 @@ XPCOMUtils.defineLazyServiceGetter(this, "AlertsService", "@mozilla.org/alerts-s ["ContentPrefServiceParent", "resource://gre/modules/ContentPrefServiceParent.jsm"], ["ContentSearch", "resource:///modules/ContentSearch.jsm"], ["DateTimePickerHelper", "resource://gre/modules/DateTimePickerHelper.jsm"], - ["DirectoryLinksProvider", "resource:///modules/DirectoryLinksProvider.jsm"], ["Feeds", "resource:///modules/Feeds.jsm"], ["FileUtils", "resource://gre/modules/FileUtils.jsm"], ["FormValidationHandler", "resource:///modules/FormValidationHandler.jsm"], @@ -655,9 +654,7 @@ BrowserGlue.prototype = { webrtcUI.init(); AboutHome.init(); - DirectoryLinksProvider.init(); NewTabUtils.init(); - NewTabUtils.links.addProvider(DirectoryLinksProvider); AboutNewTab.init(); NewTabMessages.init(); diff --git a/basilisk/modules/DirectoryLinksProvider.jsm b/basilisk/modules/DirectoryLinksProvider.jsm deleted file mode 100644 index 85d8b29..0000000 --- a/basilisk/modules/DirectoryLinksProvider.jsm +++ /dev/null @@ -1,1251 +0,0 @@ -/* This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this file, - * You can obtain one at http://mozilla.org/MPL/2.0/. */ - -"use strict"; - -this.EXPORTED_SYMBOLS = ["DirectoryLinksProvider"]; - -const Ci = Components.interfaces; -const Cc = Components.classes; -const Cu = Components.utils; -const ParserUtils = Cc["@mozilla.org/parserutils;1"].getService(Ci.nsIParserUtils); - -Cu.importGlobalProperties(["XMLHttpRequest"]); - -Cu.import("resource://gre/modules/XPCOMUtils.jsm"); -Cu.import("resource://gre/modules/Services.jsm"); -Cu.import("resource://gre/modules/Task.jsm"); -Cu.import("resource://gre/modules/Timer.jsm"); - -XPCOMUtils.defineLazyModuleGetter(this, "NetUtil", - "resource://gre/modules/NetUtil.jsm"); -XPCOMUtils.defineLazyModuleGetter(this, "NewTabUtils", - "resource://gre/modules/NewTabUtils.jsm"); -XPCOMUtils.defineLazyModuleGetter(this, "OS", - "resource://gre/modules/osfile.jsm") -XPCOMUtils.defineLazyModuleGetter(this, "Promise", - "resource://gre/modules/Promise.jsm"); -XPCOMUtils.defineLazyModuleGetter(this, "UpdateUtils", - "resource://gre/modules/UpdateUtils.jsm"); -XPCOMUtils.defineLazyServiceGetter(this, "eTLD", - "@mozilla.org/network/effective-tld-service;1", - "nsIEffectiveTLDService"); -XPCOMUtils.defineLazyGetter(this, "gTextDecoder", () => { - return new TextDecoder(); -}); -XPCOMUtils.defineLazyGetter(this, "gCryptoHash", function () { - return Cc["@mozilla.org/security/hash;1"].createInstance(Ci.nsICryptoHash); -}); -XPCOMUtils.defineLazyGetter(this, "gUnicodeConverter", function () { - let converter = Cc["@mozilla.org/intl/scriptableunicodeconverter"] - .createInstance(Ci.nsIScriptableUnicodeConverter); - converter.charset = 'utf8'; - return converter; -}); - - -// The filename where directory links are stored locally -const DIRECTORY_LINKS_FILE = "directoryLinks.json"; -const DIRECTORY_LINKS_TYPE = "application/json"; - -// The preference that tells whether to match the OS locale -const PREF_MATCH_OS_LOCALE = "intl.locale.matchOS"; - -// The preference that tells what locale the user selected -const PREF_SELECTED_LOCALE = "general.useragent.locale"; - -// The preference that tells where to obtain directory links -const PREF_DIRECTORY_SOURCE = "browser.newtabpage.directory.source"; - -// The preference that tells where to send click/view pings -const PREF_DIRECTORY_PING = "browser.newtabpage.directory.ping"; - -// The preference that tells if newtab is enhanced -const PREF_NEWTAB_ENHANCED = "browser.newtabpage.enhanced"; - -// Only allow link urls that are http(s) -const ALLOWED_LINK_SCHEMES = new Set(["http", "https"]); - -// Only allow link image urls that are https or data -const ALLOWED_IMAGE_SCHEMES = new Set(["https", "data"]); - -// Only allow urls to Mozilla's CDN or empty (for data URIs) -const ALLOWED_URL_BASE = new Set(["mozilla.net", ""]); - -// The frecency of a directory link -const DIRECTORY_FRECENCY = 1000; - -// The frecency of a suggested link -const SUGGESTED_FRECENCY = Infinity; - -// The filename where frequency cap data stored locally -const FREQUENCY_CAP_FILE = "frequencyCap.json"; - -// Default settings for daily and total frequency caps -const DEFAULT_DAILY_FREQUENCY_CAP = 3; -const DEFAULT_TOTAL_FREQUENCY_CAP = 10; - -// Default timeDelta to prune unused frequency cap objects -// currently set to 10 days in milliseconds -const DEFAULT_PRUNE_TIME_DELTA = 10*24*60*60*1000; - -// The min number of visible (not blocked) history tiles to have before showing suggested tiles -const MIN_VISIBLE_HISTORY_TILES = 8; - -// The max number of visible (not blocked) history tiles to test for inadjacency -const MAX_VISIBLE_HISTORY_TILES = 15; - -// Allowed ping actions remotely stored as columns: case-insensitive [a-z0-9_] -const PING_ACTIONS = ["block", "click", "pin", "sponsored", "sponsored_link", "unpin", "view"]; - -// Location of inadjacent sites json -const INADJACENCY_SOURCE = "chrome://browser/content/newtab/newTab.inadjacent.json"; - -// Fake URL to keep track of last block of a suggested tile in the frequency cap object -const FAKE_SUGGESTED_BLOCK_URL = "ignore://suggested_block"; - -// Time before suggested tile is allowed to play again after block - default to 1 day -const AFTER_SUGGESTED_BLOCK_DECAY_TIME = 24*60*60*1000; - -/** - * Singleton that serves as the provider of directory links. - * Directory links are a hard-coded set of links shown if a user's link - * inventory is empty. - */ -var DirectoryLinksProvider = { - - __linksURL: null, - - _observers: new Set(), - - // links download deferred, resolved upon download completion - _downloadDeferred: null, - - // download default interval is 24 hours in milliseconds - _downloadIntervalMS: 86400000, - - /** - * A mapping from eTLD+1 to an enhanced link objects - */ - _enhancedLinks: new Map(), - - /** - * A mapping from site to a list of suggested link objects - */ - _suggestedLinks: new Map(), - - /** - * Frequency Cap object - maintains daily and total tile counts, and frequency cap settings - */ - _frequencyCaps: {}, - - /** - * A set of top sites that we can provide suggested links for - */ - _topSitesWithSuggestedLinks: new Set(), - - /** - * lookup Set of inadjacent domains - */ - _inadjacentSites: new Set(), - - /** - * This flag is set if there is a suggested tile configured to avoid - * inadjacent sites in new tab - */ - _avoidInadjacentSites: false, - - /** - * This flag is set if _avoidInadjacentSites is true and there is - * an inadjacent site in the new tab - */ - _newTabHasInadjacentSite: false, - - get _observedPrefs() { - return Object.freeze({ - enhanced: PREF_NEWTAB_ENHANCED, - linksURL: PREF_DIRECTORY_SOURCE, - matchOSLocale: PREF_MATCH_OS_LOCALE, - prefSelectedLocale: PREF_SELECTED_LOCALE, - }); - }, - - get _linksURL() { - if (!this.__linksURL) { - try { - this.__linksURL = Services.prefs.getCharPref(this._observedPrefs["linksURL"]); - this.__linksURLModified = Services.prefs.prefHasUserValue(this._observedPrefs["linksURL"]); - } - catch (e) { - Cu.reportError("Error fetching directory links url from prefs: " + e); - } - } - return this.__linksURL; - }, - - /** - * Gets the currently selected locale for display. - * @return the selected locale or "en-US" if none is selected - */ - get locale() { - let matchOS = Services.prefs.getBoolPref(PREF_MATCH_OS_LOCALE, false); - - if (matchOS) { - return Services.locale.getLocaleComponentForUserAgent(); - } - - try { - let locale = Services.prefs.getComplexValue(PREF_SELECTED_LOCALE, - Ci.nsIPrefLocalizedString); - if (locale) { - return locale.data; - } - } - catch (e) {} - - try { - return Services.prefs.getCharPref(PREF_SELECTED_LOCALE); - } - catch (e) {} - - return "en-US"; - }, - - /** - * Set appropriate default ping behavior controlled by enhanced pref - */ - _setDefaultEnhanced: function DirectoryLinksProvider_setDefaultEnhanced() { - if (!Services.prefs.prefHasUserValue(PREF_NEWTAB_ENHANCED)) { - let enhanced = Services.prefs.getBoolPref(PREF_NEWTAB_ENHANCED); - try { - // Default to not enhanced if DNT is set to tell websites to not track - if (Services.prefs.getBoolPref("privacy.donottrackheader.enabled")) { - enhanced = false; - } - } - catch (ex) {} - Services.prefs.setBoolPref(PREF_NEWTAB_ENHANCED, enhanced); - } - }, - - observe: function DirectoryLinksProvider_observe(aSubject, aTopic, aData) { - if (aTopic == "nsPref:changed") { - switch (aData) { - // Re-set the default in case the user clears the pref - case this._observedPrefs.enhanced: - this._setDefaultEnhanced(); - break; - - case this._observedPrefs.linksURL: - delete this.__linksURL; - // fallthrough - - // Force directory download on changes to fetch related prefs - case this._observedPrefs.matchOSLocale: - case this._observedPrefs.prefSelectedLocale: - this._fetchAndCacheLinksIfNecessary(true); - break; - } - } - }, - - _addPrefsObserver: function DirectoryLinksProvider_addObserver() { - for (let pref in this._observedPrefs) { - let prefName = this._observedPrefs[pref]; - Services.prefs.addObserver(prefName, this, false); - } - }, - - _removePrefsObserver: function DirectoryLinksProvider_removeObserver() { - for (let pref in this._observedPrefs) { - let prefName = this._observedPrefs[pref]; - Services.prefs.removeObserver(prefName, this); - } - }, - - _cacheSuggestedLinks: function(link) { - // Don't cache links that don't have the expected 'frecent_sites' - if (!link.frecent_sites) { - return; - } - - for (let suggestedSite of link.frecent_sites) { - let suggestedMap = this._suggestedLinks.get(suggestedSite) || new Map(); - suggestedMap.set(link.url, link); - this._setupStartEndTime(link); - this._suggestedLinks.set(suggestedSite, suggestedMap); - } - }, - - _fetchAndCacheLinks: function DirectoryLinksProvider_fetchAndCacheLinks(uri) { - // Replace with the same display locale used for selecting links data - uri = uri.replace("%LOCALE%", this.locale); - uri = uri.replace("%CHANNEL%", UpdateUtils.UpdateChannel); - - return this._downloadJsonData(uri).then(json => { - return OS.File.writeAtomic(this._directoryFilePath, json, {tmpPath: this._directoryFilePath + ".tmp"}); - }); - }, - - /** - * Downloads a links with json content - * @param download uri - * @return promise resolved to json string, "{}" returned if status != 200 - */ - _downloadJsonData: function DirectoryLinksProvider__downloadJsonData(uri) { - let deferred = Promise.defer(); - let xmlHttp = this._newXHR(); - - xmlHttp.onload = function(aResponse) { - let json = this.responseText; - if (this.status && this.status != 200) { - json = "{}"; - } - deferred.resolve(json); - }; - - xmlHttp.onerror = function(e) { - deferred.reject("Fetching " + uri + " results in error code: " + e.target.status); - }; - - try { - xmlHttp.open("GET", uri); - // Override the type so XHR doesn't complain about not well-formed XML - xmlHttp.overrideMimeType(DIRECTORY_LINKS_TYPE); - // Set the appropriate request type for servers that require correct types - xmlHttp.setRequestHeader("Content-Type", DIRECTORY_LINKS_TYPE); - xmlHttp.send(); - } catch (e) { - deferred.reject("Error fetching " + uri); - Cu.reportError(e); - } - return deferred.promise; - }, - - /** - * Downloads directory links if needed - * @return promise resolved immediately if no download needed, or upon completion - */ - _fetchAndCacheLinksIfNecessary: function DirectoryLinksProvider_fetchAndCacheLinksIfNecessary(forceDownload=false) { - if (this._downloadDeferred) { - // fetching links already - just return the promise - return this._downloadDeferred.promise; - } - - if (forceDownload || this._needsDownload) { - this._downloadDeferred = Promise.defer(); - this._fetchAndCacheLinks(this._linksURL).then(() => { - // the new file was successfully downloaded and cached, so update a timestamp - this._lastDownloadMS = Date.now(); - this._downloadDeferred.resolve(); - this._downloadDeferred = null; - this._callObservers("onManyLinksChanged") - }, - error => { - this._downloadDeferred.resolve(); - this._downloadDeferred = null; - this._callObservers("onDownloadFail"); - }); - return this._downloadDeferred.promise; - } - - // download is not needed - return Promise.resolve(); - }, - - /** - * @return true if download is needed, false otherwise - */ - get _needsDownload () { - // fail if last download occured less then 24 hours ago - if ((Date.now() - this._lastDownloadMS) > this._downloadIntervalMS) { - return true; - } - return false; - }, - - /** - * Create a new XMLHttpRequest that is anonymous, i.e., doesn't send cookies - */ - _newXHR() { - return new XMLHttpRequest({mozAnon: true}); - }, - - /** - * Reads directory links file and parses its content - * @return a promise resolved to an object with keys 'directory' and 'suggested', - * each containing a valid list of links, - * or {'directory': [], 'suggested': []} if read or parse fails. - */ - _readDirectoryLinksFile: function DirectoryLinksProvider_readDirectoryLinksFile() { - let emptyOutput = {directory: [], suggested: [], enhanced: []}; - return OS.File.read(this._directoryFilePath).then(binaryData => { - let output; - try { - let json = gTextDecoder.decode(binaryData); - let linksObj = JSON.parse(json); - output = {directory: linksObj.directory || [], - suggested: linksObj.suggested || [], - enhanced: linksObj.enhanced || []}; - } - catch (e) { - Cu.reportError(e); - } - return output || emptyOutput; - }, - error => { - Cu.reportError(error); - return emptyOutput; - }); - }, - - /** - * Translates link.time_limits to UTC miliseconds and sets - * link.startTime and link.endTime properties in link object - */ - _setupStartEndTime: function DirectoryLinksProvider_setupStartEndTime(link) { - // set start/end limits. Use ISO_8601 format: '2014-01-10T20:20:20.600Z' - // (details here http://en.wikipedia.org/wiki/ISO_8601) - // Note that if timezone is missing, FX will interpret as local time - // meaning that the server can sepecify any time, but if the capmaign - // needs to start at same time across multiple timezones, the server - // omits timezone indicator - if (!link.time_limits) { - return; - } - - let parsedTime; - if (link.time_limits.start) { - parsedTime = Date.parse(link.time_limits.start); - if (parsedTime && !isNaN(parsedTime)) { - link.startTime = parsedTime; - } - } - if (link.time_limits.end) { - parsedTime = Date.parse(link.time_limits.end); - if (parsedTime && !isNaN(parsedTime)) { - link.endTime = parsedTime; - } - } - }, - - /* - * Handles campaign timeout - */ - _onCampaignTimeout: function DirectoryLinksProvider_onCampaignTimeout() { - // _campaignTimeoutID is invalid here, so just set it to null - this._campaignTimeoutID = null; - this._updateSuggestedTile(); - }, - - /* - * Clears capmpaign timeout - */ - _clearCampaignTimeout: function DirectoryLinksProvider_clearCampaignTimeout() { - if (this._campaignTimeoutID) { - clearTimeout(this._campaignTimeoutID); - this._campaignTimeoutID = null; - } - }, - - /** - * Setup capmpaign timeout to recompute suggested tiles upon - * reaching soonest start or end time for the campaign - * @param timeout in milliseconds - */ - _setupCampaignTimeCheck: function DirectoryLinksProvider_setupCampaignTimeCheck(timeout) { - // sanity check - if (!timeout || timeout <= 0) { - return; - } - this._clearCampaignTimeout(); - // setup next timeout - this._campaignTimeoutID = setTimeout(this._onCampaignTimeout.bind(this), timeout); - }, - - /** - * Test link for campaign time limits: checks if link falls within start/end time - * and returns an object containing a use flag and the timeoutDate milliseconds - * when the link has to be re-checked for campaign start-ready or end-reach - * @param link - * @return object {use: true or false, timeoutDate: milliseconds or null} - */ - _testLinkForCampaignTimeLimits: function DirectoryLinksProvider_testLinkForCampaignTimeLimits(link) { - let currentTime = Date.now(); - // test for start time first - if (link.startTime && link.startTime > currentTime) { - // not yet ready for start - return {use: false, timeoutDate: link.startTime}; - } - // otherwise check for end time - if (link.endTime) { - // passed end time - if (link.endTime <= currentTime) { - return {use: false}; - } - // otherwise link is still ok, but we need to set timeoutDate - return {use: true, timeoutDate: link.endTime}; - } - // if we are here, the link is ok and no timeoutDate needed - return {use: true}; - }, - - /** - * Handles block on suggested tile: updates fake block url with current timestamp - */ - handleSuggestedTileBlock: function DirectoryLinksProvider_handleSuggestedTileBlock() { - this._updateFrequencyCapSettings({url: FAKE_SUGGESTED_BLOCK_URL}); - this._writeFrequencyCapFile(); - this._updateSuggestedTile(); - }, - - /** - * Checks if suggested tile is being blocked for the rest of "decay time" - * @return True if blocked, false otherwise - */ - _isSuggestedTileBlocked: function DirectoryLinksProvider__isSuggestedTileBlocked() { - let capObject = this._frequencyCaps[FAKE_SUGGESTED_BLOCK_URL]; - if (!capObject || !capObject.lastUpdated) { - // user never blocked suggested tile or lastUpdated is missing - return false; - } - // otherwise, make sure that enough time passed after suggested tile was blocked - return (capObject.lastUpdated + AFTER_SUGGESTED_BLOCK_DECAY_TIME) > Date.now(); - }, - - /** - * Report some action on a newtab page (view, click) - * @param sites Array of sites shown on newtab page - * @param action String of the behavior to report - * @param triggeringSiteIndex optional Int index of the site triggering action - * @return download promise - */ - reportSitesAction: function DirectoryLinksProvider_reportSitesAction(sites, action, triggeringSiteIndex) { - // Check if the suggested tile was shown - if (action == "view") { - sites.slice(0, triggeringSiteIndex + 1).filter(s => s).forEach(site => { - let {targetedSite, url} = site.link; - if (targetedSite) { - this._addFrequencyCapView(url); - } - }); - } - // any click action on a suggested tile should stop that tile suggestion - // click/block - user either removed a tile or went to a landing page - // pin - tile turned into history tile, should no longer be suggested - // unpin - the tile was pinned before, should not matter - else { - // suggested tile has targetedSite, or frecent_sites if it was pinned - let {frecent_sites, targetedSite, url} = sites[triggeringSiteIndex].link; - if (frecent_sites || targetedSite) { - this._setFrequencyCapClick(url); - } - } - - let newtabEnhanced = false; - let pingEndPoint = ""; - try { - newtabEnhanced = Services.prefs.getBoolPref(PREF_NEWTAB_ENHANCED); - pingEndPoint = Services.prefs.getCharPref(PREF_DIRECTORY_PING); - } - catch (ex) {} - - // Bug 1240245 - We no longer send pings, but frequency capping and fetching - // tests depend on the following actions, so references to PING remain. - let invalidAction = PING_ACTIONS.indexOf(action) == -1; - if (!newtabEnhanced || pingEndPoint == "" || invalidAction) { - return Promise.resolve(); - } - - return Task.spawn(function* () { - // since we updated views/clicks we need write _frequencyCaps to disk - yield this._writeFrequencyCapFile(); - // Use this as an opportunity to potentially fetch new links - yield this._fetchAndCacheLinksIfNecessary(); - }.bind(this)); - }, - - /** - * Get the enhanced link object for a link (whether history or directory) - */ - getEnhancedLink: function DirectoryLinksProvider_getEnhancedLink(link) { - // Use the provided link if it's already enhanced - return link.enhancedImageURI && link ? link : - this._enhancedLinks.get(NewTabUtils.extractSite(link.url)); - }, - - /** - * Check if a url's scheme is in a Set of allowed schemes and if the base - * domain is allowed. - * @param url to check - * @param allowed Set of allowed schemes - * @param checkBase boolean to check the base domain - */ - isURLAllowed(url, allowed, checkBase) { - // Assume no url is an allowed url - if (!url) { - return true; - } - - let scheme = "", base = ""; - try { - // A malformed url will not be allowed - let uri = Services.io.newURI(url, null, null); - scheme = uri.scheme; - - // URIs without base domains will be allowed - base = Services.eTLD.getBaseDomain(uri); - } - catch (ex) {} - // Require a scheme match and the base only if desired - return allowed.has(scheme) && (!checkBase || ALLOWED_URL_BASE.has(base)); - }, - - _escapeChars(text) { - let charMap = { - '&': '&', - '<': '<', - '>': '>', - '"': '"', - "'": ''' - }; - - return text.replace(/[&<>"']/g, (character) => charMap[character]); - }, - - /** - * Gets the current set of directory links. - * @param aCallback The function that the array of links is passed to. - */ - getLinks: function DirectoryLinksProvider_getLinks(aCallback) { - this._readDirectoryLinksFile().then(rawLinks => { - // Reset the cache of suggested tiles and enhanced images for this new set of links - this._enhancedLinks.clear(); - this._suggestedLinks.clear(); - this._clearCampaignTimeout(); - this._avoidInadjacentSites = false; - - // Only check base domain for images when using the default pref - let checkBase = !this.__linksURLModified; - let validityFilter = function(link) { - // Make sure the link url is allowed and images too if they exist - return this.isURLAllowed(link.url, ALLOWED_LINK_SCHEMES, false) && - (!link.imageURI || - this.isURLAllowed(link.imageURI, ALLOWED_IMAGE_SCHEMES, checkBase)) && - (!link.enhancedImageURI || - this.isURLAllowed(link.enhancedImageURI, ALLOWED_IMAGE_SCHEMES, checkBase)); - }.bind(this); - - rawLinks.suggested.filter(validityFilter).forEach((link, position) => { - // Suggested sites must have an adgroup name. - if (!link.adgroup_name) { - return; - } - - let sanitizeFlags = ParserUtils.SanitizerCidEmbedsOnly | - ParserUtils.SanitizerDropForms | - ParserUtils.SanitizerDropNonCSSPresentation; - - link.explanation = this._escapeChars(link.explanation ? ParserUtils.convertToPlainText(link.explanation, sanitizeFlags, 0) : ""); - link.targetedName = this._escapeChars(ParserUtils.convertToPlainText(link.adgroup_name, sanitizeFlags, 0)); - link.lastVisitDate = rawLinks.suggested.length - position; - // check if link wants to avoid inadjacent sites - if (link.check_inadjacency) { - this._avoidInadjacentSites = true; - } - - // We cache suggested tiles here but do not push any of them in the links list yet. - // The decision for which suggested tile to include will be made separately. - this._cacheSuggestedLinks(link); - this._updateFrequencyCapSettings(link); - }); - - rawLinks.enhanced.filter(validityFilter).forEach((link, position) => { - link.lastVisitDate = rawLinks.enhanced.length - position; - - // Stash the enhanced image for the site - if (link.enhancedImageURI) { - this._enhancedLinks.set(NewTabUtils.extractSite(link.url), link); - } - }); - - let links = rawLinks.directory.filter(validityFilter).map((link, position) => { - link.lastVisitDate = rawLinks.directory.length - position; - link.frecency = DIRECTORY_FRECENCY; - return link; - }); - - // Allow for one link suggestion on top of the default directory links - this.maxNumLinks = links.length + 1; - - // prune frequency caps of outdated urls - this._pruneFrequencyCapUrls(); - // write frequency caps object to disk asynchronously - this._writeFrequencyCapFile(); - - return links; - }).catch(ex => { - Cu.reportError(ex); - return []; - }).then(links => { - aCallback(links); - this._populatePlacesLinks(); - }); - }, - - init: function DirectoryLinksProvider_init() { - this._setDefaultEnhanced(); - this._addPrefsObserver(); - // setup directory file path and last download timestamp - this._directoryFilePath = OS.Path.join(OS.Constants.Path.localProfileDir, DIRECTORY_LINKS_FILE); - this._lastDownloadMS = 0; - - // setup frequency cap file path - this._frequencyCapFilePath = OS.Path.join(OS.Constants.Path.localProfileDir, FREQUENCY_CAP_FILE); - // setup inadjacent sites URL - this._inadjacentSitesUrl = INADJACENCY_SOURCE; - - NewTabUtils.placesProvider.addObserver(this); - NewTabUtils.links.addObserver(this); - - return Task.spawn(function*() { - // get the last modified time of the links file if it exists - let doesFileExists = yield OS.File.exists(this._directoryFilePath); - if (doesFileExists) { - let fileInfo = yield OS.File.stat(this._directoryFilePath); - this._lastDownloadMS = Date.parse(fileInfo.lastModificationDate); - } - // read frequency cap file - yield this._readFrequencyCapFile(); - // fetch directory on startup without force - yield this._fetchAndCacheLinksIfNecessary(); - // fecth inadjacent sites on startup - yield this._loadInadjacentSites(); - }.bind(this)); - }, - - _handleManyLinksChanged: function() { - this._topSitesWithSuggestedLinks.clear(); - this._suggestedLinks.forEach((suggestedLinks, site) => { - if (NewTabUtils.isTopPlacesSite(site)) { - this._topSitesWithSuggestedLinks.add(site); - } - }); - this._updateSuggestedTile(); - }, - - /** - * Updates _topSitesWithSuggestedLinks based on the link that was changed. - * - * @return true if _topSitesWithSuggestedLinks was modified, false otherwise. - */ - _handleLinkChanged: function(aLink) { - let changedLinkSite = NewTabUtils.extractSite(aLink.url); - let linkStored = this._topSitesWithSuggestedLinks.has(changedLinkSite); - - if (!NewTabUtils.isTopPlacesSite(changedLinkSite) && linkStored) { - this._topSitesWithSuggestedLinks.delete(changedLinkSite); - return true; - } - - if (this._suggestedLinks.has(changedLinkSite) && - NewTabUtils.isTopPlacesSite(changedLinkSite) && !linkStored) { - this._topSitesWithSuggestedLinks.add(changedLinkSite); - return true; - } - - // always run _updateSuggestedTile if aLink is inadjacent - // and there are tiles configured to avoid it - if (this._avoidInadjacentSites && this._isInadjacentLink(aLink)) { - return true; - } - - return false; - }, - - _populatePlacesLinks: function () { - NewTabUtils.links.populateProviderCache(NewTabUtils.placesProvider, () => { - this._handleManyLinksChanged(); - }); - }, - - onDeleteURI: function(aProvider, aLink) { - let {url} = aLink; - // remove clicked flag for that url and - // call observer upon disk write completion - this._removeTileClick(url).then(() => { - this._callObservers("onDeleteURI", url); - }); - }, - - onClearHistory: function() { - // remove all clicked flags and call observers upon file write - this._removeAllTileClicks().then(() => { - this._callObservers("onClearHistory"); - }); - }, - - onLinkChanged: function (aProvider, aLink) { - // Make sure NewTabUtils.links handles the notification first. - setTimeout(() => { - if (this._handleLinkChanged(aLink) || this._shouldUpdateSuggestedTile()) { - this._updateSuggestedTile(); - } - }, 0); - }, - - onManyLinksChanged: function () { - // Make sure NewTabUtils.links handles the notification first. - setTimeout(() => { - this._handleManyLinksChanged(); - }, 0); - }, - - _getCurrentTopSiteCount: function() { - let visibleTopSiteCount = 0; - let newTabLinks = NewTabUtils.links.getLinks(); - for (let link of newTabLinks.slice(0, MIN_VISIBLE_HISTORY_TILES)) { - // compute visibleTopSiteCount for suggested tiles - if (link && (link.type == "history" || link.type == "enhanced")) { - visibleTopSiteCount++; - } - } - // since newTabLinks are available, set _newTabHasInadjacentSite here - // note that _shouldUpdateSuggestedTile is called by _updateSuggestedTile - this._newTabHasInadjacentSite = this._avoidInadjacentSites && this._checkForInadjacentSites(newTabLinks); - - return visibleTopSiteCount; - }, - - _shouldUpdateSuggestedTile: function() { - let sortedLinks = NewTabUtils.getProviderLinks(this); - - let mostFrecentLink = {}; - if (sortedLinks && sortedLinks.length) { - mostFrecentLink = sortedLinks[0] - } - - let currTopSiteCount = this._getCurrentTopSiteCount(); - if ((!mostFrecentLink.targetedSite && currTopSiteCount >= MIN_VISIBLE_HISTORY_TILES) || - (mostFrecentLink.targetedSite && currTopSiteCount < MIN_VISIBLE_HISTORY_TILES)) { - // If mostFrecentLink has a targetedSite then mostFrecentLink is a suggested link. - // If we have enough history links (8+) to show a suggested tile and we are not - // already showing one, then we should update (to *attempt* to add a suggested tile). - // OR if we don't have enough history to show a suggested tile (<8) and we are - // currently showing one, we should update (to remove it). - return true; - } - - return false; - }, - - /** - * Chooses and returns a suggested tile based on a user's top sites - * that we have an available suggested tile for. - * - * @return the chosen suggested tile, or undefined if there isn't one - */ - _updateSuggestedTile: function() { - let sortedLinks = NewTabUtils.getProviderLinks(this); - - if (!sortedLinks) { - // If NewTabUtils.links.resetCache() is called before getting here, - // sortedLinks may be undefined. - return undefined; - } - - // Delete the current suggested tile, if one exists. - let initialLength = sortedLinks.length; - if (initialLength) { - let mostFrecentLink = sortedLinks[0]; - if (mostFrecentLink.targetedSite) { - this._callObservers("onLinkChanged", { - url: mostFrecentLink.url, - frecency: SUGGESTED_FRECENCY, - lastVisitDate: mostFrecentLink.lastVisitDate, - type: mostFrecentLink.type, - }, 0, true); - } - } - - if (this._topSitesWithSuggestedLinks.size == 0 || - !this._shouldUpdateSuggestedTile() || - this._isSuggestedTileBlocked()) { - // There are no potential suggested links we can show or not - // enough history for a suggested tile, or suggested tile was - // recently blocked and wait time interval has not decayed yet - return undefined; - } - - // Create a flat list of all possible links we can show as suggested. - // Note that many top sites may map to the same suggested links, but we only - // want to count each suggested link once (based on url), thus possibleLinks is a map - // from url to suggestedLink. Thus, each link has an equal chance of being chosen at - // random from flattenedLinks if it appears only once. - let nextTimeout; - let possibleLinks = new Map(); - let targetedSites = new Map(); - this._topSitesWithSuggestedLinks.forEach(topSiteWithSuggestedLink => { - let suggestedLinksMap = this._suggestedLinks.get(topSiteWithSuggestedLink); - suggestedLinksMap.forEach((suggestedLink, url) => { - // Skip this link if we've shown it too many times already - if (!this._testFrequencyCapLimits(url)) { - return; - } - - // as we iterate suggestedLinks, check for campaign start/end - // time limits, and set nextTimeout to the closest timestamp - let {use, timeoutDate} = this._testLinkForCampaignTimeLimits(suggestedLink); - // update nextTimeout is necessary - if (timeoutDate && (!nextTimeout || nextTimeout > timeoutDate)) { - nextTimeout = timeoutDate; - } - // Skip link if it falls outside campaign time limits - if (!use) { - return; - } - - // Skip link if it avoids inadjacent sites and newtab has one - if (suggestedLink.check_inadjacency && this._newTabHasInadjacentSite) { - return; - } - - possibleLinks.set(url, suggestedLink); - - // Keep a map of URL to targeted sites. We later use this to show the user - // what site they visited to trigger this suggestion. - if (!targetedSites.get(url)) { - targetedSites.set(url, []); - } - targetedSites.get(url).push(topSiteWithSuggestedLink); - }) - }); - - // setup timeout check for starting or ending campaigns - if (nextTimeout) { - this._setupCampaignTimeCheck(nextTimeout - Date.now()); - } - - // We might have run out of possible links to show - let numLinks = possibleLinks.size; - if (numLinks == 0) { - return undefined; - } - - let flattenedLinks = [...possibleLinks.values()]; - - // Choose our suggested link at random - let suggestedIndex = Math.floor(Math.random() * numLinks); - let chosenSuggestedLink = flattenedLinks[suggestedIndex]; - - // Add the suggested link to the front with some extra values - this._callObservers("onLinkChanged", Object.assign({ - frecency: SUGGESTED_FRECENCY, - - // Choose the first site a user has visited as the target. In the future, - // this should be the site with the highest frecency. However, we currently - // store frecency by URL not by site. - targetedSite: targetedSites.get(chosenSuggestedLink.url).length ? - targetedSites.get(chosenSuggestedLink.url)[0] : null - }, chosenSuggestedLink)); - return chosenSuggestedLink; - }, - - /** - * Loads inadjacent sites - * @return a promise resolved when lookup Set for sites is built - */ - _loadInadjacentSites: function DirectoryLinksProvider_loadInadjacentSites() { - return this._downloadJsonData(this._inadjacentSitesUrl).then(jsonString => { - let jsonObject = {}; - try { - jsonObject = JSON.parse(jsonString); - } - catch (e) { - Cu.reportError(e); - } - - this._inadjacentSites = new Set(jsonObject.domains); - }); - }, - - /** - * Genegrates hash suitable for looking up inadjacent site - * @param value to hsh - * @return hased value, base64-ed - */ - _generateHash: function DirectoryLinksProvider_generateHash(value) { - let byteArr = gUnicodeConverter.convertToByteArray(value); - gCryptoHash.init(gCryptoHash.MD5); - gCryptoHash.update(byteArr, byteArr.length); - return gCryptoHash.finish(true); - }, - - /** - * Checks if link belongs to inadjacent domain - * @param link to check - * @return true for inadjacent domains, false otherwise - */ - _isInadjacentLink: function DirectoryLinksProvider_isInadjacentLink(link) { - let baseDomain = link.baseDomain || NewTabUtils.extractSite(link.url || ""); - if (!baseDomain) { - return false; - } - // check if hashed domain is inadjacent - return this._inadjacentSites.has(this._generateHash(baseDomain)); - }, - - /** - * Checks if new tab has inadjacent site - * @param new tab links (or nothing, in which case NewTabUtils.links.getLinks() is called - * @return true if new tab shows has inadjacent site - */ - _checkForInadjacentSites: function DirectoryLinksProvider_checkForInadjacentSites(newTabLink) { - let links = newTabLink || NewTabUtils.links.getLinks(); - for (let link of links.slice(0, MAX_VISIBLE_HISTORY_TILES)) { - // check links against inadjacent list - specifically include ALL link types - if (this._isInadjacentLink(link)) { - return true; - } - } - return false; - }, - - /** - * Reads json file, parses its content, and returns resulting object - * @param json file path - * @param json object to return in case file read or parse fails - * @return a promise resolved to a valid object or undefined upon error - */ - _readJsonFile: Task.async(function* (filePath, nullObject) { - let jsonObj; - try { - let binaryData = yield OS.File.read(filePath); - let json = gTextDecoder.decode(binaryData); - jsonObj = JSON.parse(json); - } - catch (e) {} - return jsonObj || nullObject; - }), - - /** - * Loads frequency cap object from file and parses its content - * @return a promise resolved upon load completion - * on error or non-exstent file _frequencyCaps is set to empty object - */ - _readFrequencyCapFile: Task.async(function* () { - // set _frequencyCaps object to file's content or empty object - this._frequencyCaps = yield this._readJsonFile(this._frequencyCapFilePath, {}); - }), - - /** - * Saves frequency cap object to file - * @return a promise resolved upon file i/o completion - */ - _writeFrequencyCapFile: function DirectoryLinksProvider_writeFrequencyCapFile() { - let json = JSON.stringify(this._frequencyCaps || {}); - return OS.File.writeAtomic(this._frequencyCapFilePath, json, {tmpPath: this._frequencyCapFilePath + ".tmp"}); - }, - - /** - * Clears frequency cap object and writes empty json to file - * @return a promise resolved upon file i/o completion - */ - _clearFrequencyCap: function DirectoryLinksProvider_clearFrequencyCap() { - this._frequencyCaps = {}; - return this._writeFrequencyCapFile(); - }, - - /** - * updates frequency cap configuration for a link - */ - _updateFrequencyCapSettings: function DirectoryLinksProvider_updateFrequencyCapSettings(link) { - let capsObject = this._frequencyCaps[link.url]; - if (!capsObject) { - // create an object with empty counts - capsObject = { - dailyViews: 0, - totalViews: 0, - lastShownDate: 0, - }; - this._frequencyCaps[link.url] = capsObject; - } - // set last updated timestamp - capsObject.lastUpdated = Date.now(); - // check for link configuration - if (link.frequency_caps) { - capsObject.dailyCap = link.frequency_caps.daily || DEFAULT_DAILY_FREQUENCY_CAP; - capsObject.totalCap = link.frequency_caps.total || DEFAULT_TOTAL_FREQUENCY_CAP; - } - else { - // fallback to defaults - capsObject.dailyCap = DEFAULT_DAILY_FREQUENCY_CAP; - capsObject.totalCap = DEFAULT_TOTAL_FREQUENCY_CAP; - } - }, - - /** - * Prunes frequency cap objects for outdated links - * @param timeDetla milliseconds - * all cap objects with lastUpdated less than (now() - timeDelta) - * will be removed. This is done to remove frequency cap objects - * for unused tile urls - */ - _pruneFrequencyCapUrls: function DirectoryLinksProvider_pruneFrequencyCapUrls(timeDelta = DEFAULT_PRUNE_TIME_DELTA) { - let timeThreshold = Date.now() - timeDelta; - Object.keys(this._frequencyCaps).forEach(url => { - // remove url if it is not ignorable and wasn't updated for a while - if (!url.startsWith("ignore") && this._frequencyCaps[url].lastUpdated <= timeThreshold) { - delete this._frequencyCaps[url]; - } - }); - }, - - /** - * Checks if supplied timestamp happened today - * @param timestamp in milliseconds - * @return true if the timestamp was made today, false otherwise - */ - _wasToday: function DirectoryLinksProvider_wasToday(timestamp) { - let showOn = new Date(timestamp); - let today = new Date(); - // call timestamps identical if both day and month are same - return showOn.getDate() == today.getDate() && - showOn.getMonth() == today.getMonth() && - showOn.getYear() == today.getYear(); - }, - - /** - * adds some number of views for a url - * @param url String url of the suggested link - */ - _addFrequencyCapView: function DirectoryLinksProvider_addFrequencyCapView(url) { - let capObject = this._frequencyCaps[url]; - // sanity check - if (!capObject) { - return; - } - - // if the day is new: reset the daily counter and lastShownDate - if (!this._wasToday(capObject.lastShownDate)) { - capObject.dailyViews = 0; - // update lastShownDate - capObject.lastShownDate = Date.now(); - } - - // bump both daily and total counters - capObject.totalViews++; - capObject.dailyViews++; - - // if any of the caps is reached - update suggested tiles - if (capObject.totalViews >= capObject.totalCap || - capObject.dailyViews >= capObject.dailyCap) { - this._updateSuggestedTile(); - } - }, - - /** - * Sets clicked flag for link url - * @param url String url of the suggested link - */ - _setFrequencyCapClick(url) { - let capObject = this._frequencyCaps[url]; - // sanity check - if (!capObject) { - return; - } - capObject.clicked = true; - // and update suggested tiles, since current tile became invalid - this._updateSuggestedTile(); - }, - - /** - * Tests frequency cap limits for link url - * @param url String url of the suggested link - * @return true if link is viewable, false otherwise - */ - _testFrequencyCapLimits: function DirectoryLinksProvider_testFrequencyCapLimits(url) { - let capObject = this._frequencyCaps[url]; - // sanity check: if url is missing - do not show this tile - if (!capObject) { - return false; - } - - // check for clicked set or total views reached - if (capObject.clicked || capObject.totalViews >= capObject.totalCap) { - return false; - } - - // otherwise check if link is over daily views limit - if (this._wasToday(capObject.lastShownDate) && - capObject.dailyViews >= capObject.dailyCap) { - return false; - } - - // we passed all cap tests: return true - return true; - }, - - /** - * Removes clicked flag from frequency cap entry for tile landing url - * @param url String url of the suggested link - * @return promise resolved upon disk write completion - */ - _removeTileClick: function DirectoryLinksProvider_removeTileClick(url = "") { - // remove trailing slash, to accomodate Places sending site urls ending with '/' - let noTrailingSlashUrl = url.replace(/\/$/, ""); - let capObject = this._frequencyCaps[url] || this._frequencyCaps[noTrailingSlashUrl]; - // return resolved promise if capObject is not found - if (!capObject) { - return Promise.resolve(); - } - // otherwise remove clicked flag - delete capObject.clicked; - return this._writeFrequencyCapFile(); - }, - - /** - * Removes all clicked flags from frequency cap object - * @return promise resolved upon disk write completion - */ - _removeAllTileClicks: function DirectoryLinksProvider_removeAllTileClicks() { - Object.keys(this._frequencyCaps).forEach(url => { - delete this._frequencyCaps[url].clicked; - }); - return this._writeFrequencyCapFile(); - }, - - /** - * Return the object to its pre-init state - */ - reset: function DirectoryLinksProvider_reset() { - delete this.__linksURL; - this._removePrefsObserver(); - this._removeObservers(); - }, - - addObserver: function DirectoryLinksProvider_addObserver(aObserver) { - this._observers.add(aObserver); - }, - - removeObserver: function DirectoryLinksProvider_removeObserver(aObserver) { - this._observers.delete(aObserver); - }, - - _callObservers(methodName, ...args) { - for (let obs of this._observers) { - if (typeof(obs[methodName]) == "function") { - try { - obs[methodName](this, ...args); - } catch (err) { - Cu.reportError(err); - } - } - } - }, - - _removeObservers: function() { - this._observers.clear(); - } -}; diff --git a/basilisk/modules/moz.build b/basilisk/modules/moz.build index d043d47..cd8f2ce 100644 --- a/basilisk/modules/moz.build +++ b/basilisk/modules/moz.build @@ -16,7 +16,6 @@ EXTRA_JS_MODULES += [ 'ContentObservers.jsm', 'ContentSearch.jsm', 'ContentWebRTC.jsm', - 'DirectoryLinksProvider.jsm', 'E10SUtils.jsm', 'Feeds.jsm', 'FormSubmitObserver.jsm', |