Skip to content

Instantly share code, notes, and snippets.

@dszakallas
Last active September 18, 2016 15:27
Show Gist options
  • Save dszakallas/cd9d4d08fdccd66cb4cef5bc6e096ac7 to your computer and use it in GitHub Desktop.
Save dszakallas/cd9d4d08fdccd66cb4cef5bc6e096ac7 to your computer and use it in GitHub Desktop.
Analyzing logging activity
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## The heartbeat of our logs\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Logentries draws a neat linechart to visualize your logging activity. This chart is great for seeing if there are any errors appearing after a change, so you see at a glance if it's worth to check the logs. Looking at one of our services, this chart caught my eye:\n",
"\n",
"![Entries](http://i.imgur.com/SXlgIb9.png)\n",
"\n",
"At first sight this doesn't say very much apart from the fact that there are large bumps appearing at every 2 minutes (that's the frequency of the vertical lines). Regarding the other bumps there's not much we can say as they kind of blend in and it's hard to tell what's going on. Are they random or periodic too?\n",
"\n",
"So i became curious and downloaded a 60 minute long log file to analyse."
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"library(ggplot2)\n",
"library(data.table)\n",
"\n",
"c <- read.csv(\"2016-04-04_181041_2016-04-04_191041.log\", header=FALSE, sep = \" \")\n",
"# We only need the timestamps of the logs\n",
"c <- c[,3]\n",
"c <- as.POSIXct(strptime(c, format=\"%Y-%m-%dT%H:%M:%OS\", tz=\"GMT\"))\n",
"# log span is ca. 60 minutes\n",
"span <- tail(c, n=1) - head(c, n=1)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"I create a histogram with 10 second breaks (i.e 6 bin/minute)"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"breaks <- floor(as.numeric(span, units=\"secs\")/10)\n",
"x.time <- hist(c, plot = FALSE, breaks=breaks)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"And apply Discrete Fourier Transform to the bins to get the frequency components:"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"collapsed": false
},
"outputs": [
{
"ename": "ERROR",
"evalue": "Error in file(con, \"rb\"): cannot open the connection\n",
"output_type": "error",
"traceback": [
"Error in file(con, \"rb\"): cannot open the connection\n"
]
},
{
"data": {
"image/png": "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Em6O0ggQIECAAAECBAgQKFdAQCrX22wECBAgQIAAAQIECCQsICAl3BylESBAgAABAgQIECBQroCAVK632QgQIECAAAECBAgQSFhAQEq4OUojQIAAAQIECBAgQKBcAQGpXG+zESBAgAABAgQIECCQsICAlHBzlEaAAAECBAgQIECAQLkCAlK53mYjQIAAAQIECBAgQCBhAQEp4eYojQABAgQIECBAgACBcgUEpHK9zUaAAAECBAgQIECAQMICAlLCzVEaAQIECBAgQIAAAQLlCghI5XqbjQABAgQIECBAgACBhAUEpISbozQCBAgQIECAAAECBMoVEJDK9TYbAQIECBAgQIAAAQIJCwhICTdHaQQIECBAgAABAgQIlCsgIJXrbTYCBAgQIECAAAECBBIWEJASbo7SCBAgQIAAAQIECBAoV0BAKtfbbAQIECBAgAABAgQIJCwgICXcHKURIECAAAECBAgQIFCugIBUrrfZCBAgQIAAAQIECBBIWEBASrg5SiNAgAABAgQIECBAoFwBAalcb7MRIECAAAECBAgQIJCwgICUcHOURoAAAQIECBAgQIBAuQICUrneZiNAgAABAgQIECBAIGEBASnh5iiNAAECBAgQIECAAIFyBcbKnc5sBAgQaIbA+Ph4z0ImJiZ6zjtDgAABAgQI1FPAK0j17JuqCRAgQIAAAQIECBAoQEBAKgDVkAQIECBAgAABAgQI1FNAQKpn31RNgAABAgQIECBAgEABAgJSAaiGJECAAAECBAgQIECgngICUj37pmoCBAgQIECAAAECBAoQEJAKQDUkAQIECBAgQIAAAQL1FBCQ6tk3VRMgQIAAAQIECBAgUICAgFQAqiEJECBAgAABAgQIEKingIBUz76pmgABAgQIECBAgACBAgQEpAJQDUmAAAECBAgQIECAQD0FBKR69k3VBAgQIECAAAECBAgUICAgFYBqSAIECBAgQIAAAQIE6ikgINWzb6omQIAAAQIECBAgQKAAAQGpAFRDEiBAgAABAgQIECBQTwEBqZ59UzUBAgQIECBAgAABAgUICEgFoBqSAAECBAgQIECAAIF6CghI9eybqgkQIECAAAECBAgQKEBAQCoA1ZAECBAgQIAAAQIECNRTQECqZ99UTYAAAQIECBAgQIBAAQICUgGohiRAgAABAgQIECBAoJ4CAlI9+6ZqAgQIECBAgAABAgQKEBCQCkA1JAECBAgQIECAAAEC9RQQkOrZN1UTIECAAAECBAgQIFCAgIBUAKohCRAgQIAAAQIECBCop4CAVM++qZoAAQIECBAgQIAAgQIEBKQCUA1JgAABAgQIECBAgEA9BQSkevZN1QQIECBAgAABAgQIFCAgIBWAakgCBAgQIECAAAECBOopICDVs2+qJkCAAAECBAgQIECgAAEBqQBUQxIgQIAAAQIECBAgUE8BAamefVM1AQIECBAgQIAAAQIFCAhIBaAakgABAgQIECBAgACBegoISPXsm6oJECBAgAABAgQIEChAQEAqANWQBAgQIECAAAECBAjUU0BAqmffVE2AAAECBAgQIECAQAECAlIBqIYkQIAAAQIECBAgQKCeAgJSPfumagIECBAgQIAAAQIEChAQkApANSQBAgQIECBAgAABAvUUEJDq2TdVEyBAgAABAgQIECBQgICAVACqIQkQIECAAAECBAgQqKeAgFTPvqmaAAECBAgQIECAAIECBASkAlANSYAAAQIECBAgQIBAPQUEpHr2TdUECBAgQIAAAQIECBQgICAVgGpIAgQIECBAgAABAgTqKSAg1bNvqiZAgAABAgQIECBAoAABAakAVEMSIECAAAECBAgQIFBPgbGUyv7xj38cvvKVr4R9+/aFF77wheHoo4/uKW/Pnj3h7rvvDvfee284+eSTw+mnnz6t6+PGDz/8cLjrrrvC8uXLw+rVq8OiRYt6xnCGAAECBAgQIECAAIH2CiTzCtKXvvSlcMEFF4Svf/3r4d///d/DH/zBH4RvfvObk52J4ejiiy8OV155ZfjhD38YrrnmmnDdddflvj5ueMMNN4Q1a9ZkAeumm24Kl1xySXj66acnx/ADAQIECBAgQIAAAQLtFkjiFaRdu3aFj370o+HNb35zeN3rXpd15L3vfW/4+Mc/Hl7wghdk52Og2bJlS7jxxhvDwoULw0MPPZSFnfPOOy+cdNJJYdD18ZWjiYmJcP3114dTTz017N69OwtccbwYvJwIECBAgAABAgQIECCQxCtI8dWht73tbeFVr3rVZEeWLVsWnnrqqcnzd955Zzj77LOzcBQvPO6448Ipp5wSbr/99mybQdevW7cuHHPMMVk4ijcYGxsL55xzzuTts0H8hwABAgQIECBAgACBVgsk8QrSvHnzwplnnpk14sknnwwxzPzzP/9zuOiiiyab8+ijj2YBZ/KCn/4QA88TTzyRXZTn+lWrVnXfPLv9hg0bwt69e8PMmc9kxX/8x3/MXm3q3vhzn/tcWLJkSfdFpf08Y8aMbK4YGp2qEYj7x5FHHlnN5GbNBBYsWBDmz5+frEaT94+4/8+ZMydZ+zYUFp/Ua/I+lnIPO/fB8RjkVL5A5/HZEUccUf7kZswEmvQYKL5rLc8piYDUXWj8bNG3v/3tLLz86q/+anZVfDtcDDL9ASWev//++7O3yx3s+jjIY489tt/tFy9enIWjjRs3hu7wEQ+Gs2bN6i7LzwQIEGitQPziHCcCBAgQINAWgeQCUvyMUPw2u/j5o/iFCrfccksWbGJ6jUGp+xTPx88jxTBzsOvjbWbPnn3A28fr+p8VGh8fD/Ff9ykGrM6rVd2Xl/FzDHLx2/biF0rkTb5l1NWmOeIzt1X1v03OB1prfOXi8MMPD9u2bQubN28+0CZJXNbk/WPp0qVh69atjj8V7WkrV66cfCKwohJaPW185To+zoifg3YqXyAef2IPOu/4Kb+Cds8YH1/Hb36O/k04xd/l+M61Qadn3lc2aMsSr4+/DG95y1tC/GzS1772tRBf0YnN6X9wtGnTphDvOAZdH0uPL80e6PbxlaO5c+eWuDpTESBAgAABAgQIECCQqkASAenBBx8Mv/M7vxMeeeSRSacdO3ZkAanz1o4TTzwxrF+/fvL6+EP8e0idzxUNuv6EE04I9913X8+rSHG8zu17BnaGAAECBAgQIECAAIFWCiQRkI4//vhw1FFHZV/1HT8P9Pjjj4ePfOQj4bDDDgtnnHFG1pj4N5LuuOOOLBTF0BTferdz585w7rnn5rr+rLPOyrZbu3Zt9rmjBx54INx2223Z2/ha2XmLJkCAAAECBAgQIEBgP4FkPoP0J3/yJ+Gqq64Kr371q7MAE7/G+wMf+MDklyfEoBT/RtKll16afZ4ovvJz+eWXZ5/NiasadH18G921114brr766hBDUnw/6/nnnx9Wr169H4oLCBAgQIAAAQIECBBop8CMn74ak9TXE8UPOsevM42fOTrQKb5qFD97NNXXPQ66Po4ZX6FasWJFz1d7H2iu7svilzRURdX5kob4ATlf0tDdlfJ+9iUN5Vn3z9T5kob4Aen+zxH2b1vm+f4vcol/iLqpJ1/SUG1nfUlDtf6+pKFa/86XNMTHbvHPsjiVK9DEL2nI8ycTknkFqdPuQUXHB0tThaM4xqDr4zbx7XxOBAgQIECAAAECBAgQ6BdI4jNI/UU5T4AAAQIECBAgQIAAgSoEBKQq1M1JgAABAgQIECBAgECSAgJSkm1RFAECBAgQIECAAAECVQgISFWom5MAAQIECBAgQIAAgSQFBKQk26IoAgQIECBAgAABAgSqEBCQqlA3JwECBAgQIECAAAECSQoISEm2RVEECBAgQIAAAQIECFQhICBVoW5OAgQIECBAgAABAgSSFBCQkmyLoggQIECAAAECBAgQqEJAQKpC3ZwECBAgQIAAAQIECCQpICAl2RZFESBAgAABAgQIECBQhYCAVIW6OQkQIECAAAECBAgQSFJAQEqyLYoiQIAAAQIECBAgQKAKAQGpCnVzEiBAgAABAgQIECCQpICAlGRbFEWAAAECBAgQIECAQBUCAlIV6uYkQIAAAQIECBAgQCBJAQEpybYoigABAgQIECBAgACBKgQEpCrUzUmAAAECBAgQIECAQJICAlKSbVEUAQIECBAgQIAAAQJVCAhIVaibkwABAgQIECBAgACBJAUEpCTboigCBAgQIECAAAECBKoQEJCqUDcnAQIECBAgQIAAAQJJCghISbZFUQQIECBAgAABAgQIVCEgIFWhbk4CBAgQIECAAAECBJIUEJCSbIuiCBAgQIAAAQIECBCoQkBAqkLdnAQIECBAgAABAgQIJCkgICXZFkURIECAAAECBAgQIFCFgIBUhbo5CRAgQIAAAQIECBBIUkBASrItiiJAgAABAgQIECBAoAoBAakKdXMSIECAAAECBAgQIJCkgICUZFsURYAAAQIECBAgQIBAFQICUhXq5iRAgAABAgQIECBAIEkBASnJtiiKAAECBAgQIECAAIEqBASkKtTNSYAAAQIECBAgQIBAkgICUpJtURQBAgQIECBAgAABAlUICEhVqJuTAAECBAgQIECAAIEkBQSkJNuiKAIECBAgQIAAAQIEqhAQkKpQNycBAgQIECBAgAABAkkKCEhJtkVRBAgQIECAAAECBAhUISAgVaFuTgIECBAgQIAAAQIEkhQQkJJsi6IIECBAgAABAgQIEKhCQECqQt2cBAgQIECAAAECBAgkKSAgJdkWRREgQIAAAQIECBAgUIWAgFSFujkJECBAgAABAgQIEEhSQEBKsi2KIkCAAAECBAgQIECgCgEBqQp1cxIgQIAAAQIECBAgkKSAgJRkWxRFgAABAgQIECBAgEAVAgJSFermJECAAAECBAgQIEAgSQEBKcm2KIoAAQIECBAgQIAAgSoEBKQq1M1JgAABAgQIECBAgECSAgJSkm1RFAECBAgQIECAAAECVQgISFWom5MAAQIECBAgQIAAgSQFBKQk26IoAgQIECBAgAABAgSqEBCQqlA3JwECBAgQIECAAAECSQoISEm2RVEECBAgQIAAAQIECFQhICBVoW5OAgQIECBAgAABAgSSFBCQkmyLoggQIECAAAECBAgQqEJAQKpC3ZwECBAgQIAAAQIECCQpICAl2RZFESBAgAABAgQIECBQhYCAVIW6OQkQIECAAAECBAgQSFJAQEqyLYoiQIAAAQIECBAgQKAKAQGpCnVzEiBAgAABAgQIECCQpICAlGRbFEWAAAECBAgQIECAQBUCAlIV6uYkQIAAAQIECBAgQCBJAQEpybYoigABAgQIECBAgACBKgQEpCrUzUmAAAECBAgQIECAQJICAlKSbVEUAQIECBAgQIAAAQJVCAhIVaibkwABAgQIECBAgACBJAUEpCTboigCBAgQIECAAAECBKoQEJCqUDcnAQIECBAgQIAAAQJJCghISbZFUQQIECBAgAABAgQIVCEgIFWhbk4CBAgQIECAAAECBJIUEJCSbIuiCBAgQIAAAQIECBCoQkBAqkLdnAQIECBAgAABAgQIJCkgICXZFkURIECAAAECBAgQIFCFgIBUhbo5CRAgQIAAAQIECBBIUkBASrItiiJAgAABAgQIECBAoAoBAakKdXMSIECAAAECBAgQIJCkgICUZFsURYAAAQIECBAgQIBAFQICUhXq5iRAgAABAgQIECBAIEkBASnJtiiKAAECBAgQIECAAIEqBASkKtTNSYAAAQIECBAgQIBAkgICUpJtURQBAgQIECBAgAABAlUICEhVqJuTAAECBAgQIECAAIEkBQSkJNuiKAIECBAgQIAAAQIEqhAQkKpQNycBAgQIECBAgAABAkkKCEhJtkVRBAgQIECAAAECBAhUISAgVaFuTgIECBAgQIAAAQIEkhQQkJJsi6IIECBAgAABAgQIEKhCQECqQt2cBAgQIECAAAECBAgkKSAgJdkWRREgQIAAAQIECBAgUIWAgFSFujkJECBAgAABAgQIEEhSQEBKsi2KIkCAAAECBAgQIECgCgEBqQp1cxIgQIAAAQIECBAgkKSAgJRkWxRFgAABAgQIECBAgEAVAgJSFermJECAAAECBAgQIEAgSQEBKcm2KIoAAQIECBAgQIAAgSoEBKQq1M1JgAABAgQIECBAgECSAgJSkm1RFAECBAgQIECAAAECVQgISFWom5MAAQIECBAgQIAAgSQFxpKsKsGiZs2aVVlVM2f+LMfGGvbt21dZHW2feGzMr0sV+0Dnd2/GjBkh5R6kXNuwfYvHIMefYRWHu33q+/9wq0v71nH/j/+a/Duecgc6j4Gi/969e1MutZG1xWNPPDVl/++sZ1CzPOIbJPTz6xctWhTyouYcMvdmnZ1ywYIFAlJutdFuGA/QixcvHu2gRssl0LlznDt3bvYgPdeNKtioyftHPAY5/lSwU3VN6RjUhVHyj/HJgXj/33mypuTpWz9d5zHQwoULW29RFUDc95tyH7dnz55cjAJSLqYQNm7cWFk4iTtlDGibN28Ou3btylmxzUYpcOSRR4ann356lEMaK6fAnDlzwuGHHx527NiR/Q7kvFnpmzV5/1i6dGnYunWr40/pe9XPJly5cmWId+pN3scqos017fz587NwtGXLllzb22i0AvH4E3sQH4d5BWm0tnlGi0/OLF++vDHHnxj28oRtn0HKs3fYhgABAgQIECBAgACBVggISK1os0USIECAAAECBAgQIJBHQEDKo2QbAgQIECBAgAABAgRaISAgtaLNFkmAAAECBAgQIECAQB4BASmPkm0IECBAgAABAgQIEGiFgIDUijZbJAECBAgQIECAAAECeQQEpDxKtiFAgAABAgQIECBAoBUCAlIr2myRBAgQIECAAAECBAjkERCQ8ijZhgABAgQIECBAgACBVggISK1os0USIECAAAECBAgQIJBHQEDKo2QbAgQIECBAgAABAgRaISAgtaLNFkmAAAECBAgQIECAQB4BASmPkm0IECBAgAABAgQIEGiFgIDUijZbJAECBAgQIECAAAECeQQEpDxKtiFAgAABAgQIECBAoBUCAlIr2myRBAgQIECAAAECBAjkERCQ8ijZhgABAgQIECBAgACBVggISK1os0USIECAAAECBAgQIJBHQEDKo2QbAgQIECBAgAABAgRaISAgtaLNFkmAAAECBAgQIECAQB4BASmPkm0IECBAgAABAgQIEGiFgIDUijZbJAECBAgQIECAAAECeQQEpDxKtiFAgAABAgQIECBAoBUCAlIr2myRBAgQIECAAAECBAjkERCQ8ijZhgABAgQIECBAgACBVggISK1os0USIECAAAECBAgQIJBHQEDKo2QbAgQIECBAgAABAgRaISAgtaLNFkmAAAECBAgQIECAQB4BASmPkm0IECBAgAABAgQIEGiFgIDUijZbJAECBAgQIECAAAECeQQEpDxKtiFAgAABAgQIECBAoBUCAlIr2myRBAgQIECAAAECBAjkERCQ8ijZhgABAgQIECBAgACBVggISK1os0USIECAAAECBAgQIJBHQEDKo2QbAgQIECBAgAABAgRaISAgtaLNFkmAAAECBAgQIECAQB4BASmPkm0IECBAgAABAgQIEGiFgIDUijZbJAECBAgQIECAAAECeQQEpDxKtiFAgAABAgQIECBAoBUCAlIr2myRBAgQIECAAAECBAjkERCQ8ijZhgABAgQIECBAgACBVggISK1os0USIECAAAECBAgQIJBHQEDKo2QbAgQIECBAgAABAgRaISAgtaLNFkmAAAECBAgQIECAQB4BASmPkm0IECBAgAABAgQIEGiFgIDUijZbJAECBAgQIECAAAECeQQEpDxKtiFAgAABAgQIECBAoBUCAlIr2myRBAgQIECAAAECBAjkERCQ8ijZhgABAgQIECBAgACBVggISK1os0USIECAAAECBAgQIJBHQEDKo2QbAgQIECBAgAABAgRaISAgtaLNFkmAAAECBAgQIECAQB4BASmPkm0IECBAgAABAgQIEGiFgIDUijZbJAECBAgQIECAAAECeQQEpDxKtiFAgAABAgQIECBAoBUCAlIr2myRBAgQIECAAAECBAjkERCQ8ijZhgABAgQIECBAgACBVggISK1os0USIECAAAECBAgQIJBHQEDKo2QbAgQIECBAgAABAgRaISAgtaLNFkmAAAECBAgQIECAQB4BASmPkm0IECBAgAABAgQIEGiFgIDUijZbJAECBAgQIECAAAECeQQEpDxKtiFAgAABAgQIECBAoBUCAlIr2myRBAgQIECAAAECBAjkERCQ8ijZhgABAgQIECBAgACBVggISK1os0USIECAAAECBAgQIJBHQEDKo2QbAgQIECBAgAABAgRaISAgtaLNFkmAAAECBAgQIECAQB4BASmPkm0IECBAgAABAgQIEGiFgIDUijZbJAECBAgQIECAAAECeQQEpDxKtiFAgAABAgQIECBAoBUCAlIr2myRBAgQIECAAAECBAjkERCQ8ijZhgABAgQIECBAgACBVggISK1os0USIECAAAECBAgQIJBHQEDKo2QbAgQIECBAgAABAgRaISAgtaLNFkmAAAECBAgQIECAQB4BASmPkm0IECBAgAABAgQIEGiFgIDUijZbJAECBAgQIECAAAECeQQEpDxKtiFAgAABAgQIECBAoBUCAlIr2myRBAgQIECAAAECBAjkERCQ8ijZhgABAgQIECBAgACBVggISK1os0USIECAAAECBAgQIJBHQEDKo2QbAgQIECBAgAABAgRaISAgtaLNFkmAAAECBAgQIECAQB4BASmPkm0IECBAgAABAgQIEGiFgIDUijZbJAECBAgQIECAAAECeQQEpDxKtiFAgAABAgQIECBAoBUCAlIr2myRBAgQIECAAAECBAjkERCQ8ijZhgABAgQIECBAgACBVggISK1os0USIECAAAECBAgQIJBHQEDKo2QbAgQIECBAgAABAgRaISAgtaLNFkmAAAECBAgQIECAQB4BASmPkm0IECBAgAABAgQIEGiFgIDUijZbJAECBAgQIECAAAECeQQEpDxKtiFAgAABAgQIECBAoBUCAlIr2myRBAgQIECAAAECBAjkERCQ8ijZhgABAgQIECBAgACBVggISK1os0USIECAAAECBAgQIJBHQEDKo2QbAgQIECBAgAABAgRaISAgtaLNFkmAAAECBAgQIECAQB4BASmPkm0IECBAgAABAgQIEGiFgIDUijZbJAECBAgQIECAAAECeQTG8mxU1jbbtm0Ld911V3jkkUfCKaecEp7//Of3TL1nz55w9913h3vvvTecfPLJ4fTTT5/W9XHjhx9+OJtj+fLlYfXq1WHRokU9YzhDgAABAgQIECBAgEB7BZJ5Benf/u3fwm/91m+Fz3/+8+G+++4L73jHO8IHP/jByc7EcHTxxReHK6+8Mvzwhz8M11xzTbjuuutyXx83vOGGG8KaNWuygHXTTTeFSy65JDz99NOTY/iBAAECBAgQIECAAIF2CyTxCtLevXvDJz/5ySwAvfa1r8068pWvfCVcdtll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gEAVAgJSFermJECAAAECBAgQIEAgSQEBKcm2KIoAAQIECBAgQIAAgSoEBKQq1M1JgAABAgQIECBAgECSAgJSkm1RFAECBAgQIECAAAECVQgISFWom5MAAQIECBAgQIAAgSQFBKQk26IoAgQIECBAgAABAgSqEBCQqlA3JwECBAgQIECAAAECSQoISEm2RVEECBAgQIAAAQIECFQhICBVoW5OAgQIECBAgAABAgSSFBCQkmyLoggQIECAAAECBAgQqEJAQKpC3ZwECBAgQIAAAQIECCQpICAl2RZFESBAgAABAgQIECBQhYCAVIW6OQkQIECAAAECBAgQSFJAQEqyLYoiQIAAAQIECBAgQKAKAQGpCnVzEiBAgAABAgQIECCQpICAlGRbFEWAAAECBAgQIECAQBUCAlIV6uYkQIAAAQIECBAgQCBJAQEpybYoigABAgQIECBAgACBKgQEpCrUzUmAAAECBAgQIECAQJICAlKSbVEUAQIECBAgQIAAAQJVCAhIVaibkwABAgQIECBAgACBJAUEpCTboigCBAgQIECAAAECBKoQEJCqUDcnAQIECBAgQIAAAQJJCghISbZFUQQIECBAgAABAgQIVCEgIFWhbk4CBAgQIECAAAECBJIUEJCSbIuiCBAgQIAAAQIECBCoQkBAqkLdnAQIECBAgAABAgQIJCkgICXZFkURIECAAAECBAgQIFCFgIBUhbo5CRAgQIAAAQIECBBIUmBsVFVt2rQp3HPPPWH9+vXhWc96VviVX/mVcPTRR49qeOMQIECAAAECBAgQIECgcIGRBKS/+Zu/Ce9617vCnj17egp+xSteEW6++eawfPnynsudIUCAAAECBAgQIECAQIoCQwekd7/73eGv//qvw4UXXpj9W7VqVfjxj38cvvnNb4brr78+vPjFLw5f//rXw7Jly1Jcv5oIECBAgAABAgQIECAwKTBUQNq3b1/45Cc/Ga666qpwxRVXTA4af/iN3/iN8Lu/+7vZW+0+//nPhzVr1vRc7wwBAgQIECBAgAABAgRSExjqSxruv//+8Nhjj4U3velNB1zXc57znBDfZnf77bcf8HoXEiBAgAABAgQIECBAICWBoQLScccdF+bMmRP+93//d8o1Pfroo+HYY4+d8npXECBAgAABAgQIECBAIBWBoQLSvHnzwp/+6Z+Giy66KKxbt65nTTt37gzXXHNNiK8yxeudCBAgQIAAAQIECBAgkLrA0J9Biq8exbfZvehFLwrPe97zwvHHHx+2bdsW7r333vDEE09k32D3mte8psfhX/7lX8Kzn/3snsucIUCAAAECBAgQIECAQNUCQwWkWPwPfvCD8Mu//MuT6/jRj36U/Rzffhf/Heg0Y8aMA13sMgIECBAgQIAAAQIECFQqMFRAikGn/611la7G5AQIECBAgAABAgQIEBhCYKjPIA0xr5sSIECAAAECBAgQIEAgOYGhXkHqXs2OHTvCxo0buy+a/HnRokVh4cKFk+f9QIAAAQIECBAgQIAAgRQFhn4F6etf/3r2GaQFCxaElStXHvDfBz7wgRTXriYCBAgQIECAAAECBAj0CAz9CtLll18evvvd74Y1a9aEVatWhVmzZvVMEM+87GUv2+8yFxAgQIAAAQIERi0wPj7eM+TExETPeWcIECAwSGCogBT/COyXv/zl8Pd///f+1tEgadcTIECAAAECBAgQIJC8wFBvsZs/f362wBUrViS/UAUSIECAAAECBAgQIEBgkMBQAWnp0qXhla98ZfYK0qCJXE+AAAECBAgQIECAAIHUBYZ6i11c3Gc/+9lwxhlnhJe85CXhzDPPDDE09Z9e+tKXZtf3X+48AQIECBAgQIAAAQIEUhIYOiB99KMfDd/5znfC3r17w1133XXAtV155ZUC0gFlXEiAAAECBAgQIECAQEoCQwWkXbt2hauuuir7mu93vetd4bTTTjvgt9gtX748pTWrhQABAgQIECBAgAABAgcUGCogff/73w9bt24Nf/EXfxHOP//8A07gQgIECBAgQIAAAQIECNRFYKgvafiFX/iFsHjx4iwk1WXB6iRAgAABAgQIECBAgMBUAkMFpPhHYS+77LJwxRVXhP/6r/+aag6XEyBAgAABAgQIECBAoBYCQ73Fbt++feGee+4JTz31VHjBC14QFi5cGI499tgwZ86cnsVfcskl4eKLL+65zBkCBAgQIECAAAECBAikJjBUQIqL+d73vhdOOumkg64rvtLkRIAAAQIECBAgQIAAgdQFhgpIM2bMCOvWrUt9jeojQIAAAQIECBAgQIBALoGhPoOUZ4YNGzZkfycpz7a2IUCAAAECBAgQIECAQJUCQwekH/zgB+H3fu/3wnOe85xw9NFHh5UrV2b/VqxYEZYsWRLi/2+88cYq12huAgQIECBAgAABAgQI5BIYOiCNj4+Hz3zmM+EnP/lJWLRoUfb/5z73uWHmzJlh8+bN4ZWvfGW48MILcxVjIwIECBAgQIAAAQIECFQpMFRA2rZtW/jSl74U3vrWt4aHH344/NVf/VXYu3dv+OIXvxgef/zx8Od//ufh/vvvDyeeeGKVazQ3AQIECBAgQIAAAQIEcgkMFZAeeOCBEL/q+7WvfW2IX9jw/Oc/P2zatGnyM0fvec97wtjYWJiYmMhVjI0IECBAgAABAgQIECBQpcBQAWnZsmVZ7fPnz8/+f8IJJ2R/A+lb3/rW5JpWr17tj8hOaviBAAECBAgQIECAAIGUBYYKSKtWrQqLFy8Ot956a7bG+PeO4ueP/uM//mNyzevXrw/z5s2bPO8HAgQIECBAgAABAgQIpCow1N9Biot6xzveEa6++upw3333hc997nPhVa96VXj/+98fjjrqqPDII4+E//zP/8w+m5QqgLoIECBAgAABAgQIECDQERg6IF122WVh+/bt4X/+53+yMd/5zndmX9Lwvve9Lzv/ghe8ILz85S/vzOf/BAgQIECAAAECBAgQSFZg6IA0e/bs7BWj+GUN8bR06dLw1a9+NfvcUfzq7zPOOCP7ooZkBRRGgAABAgQIECBAgACBnwsMHZA6kvFb7Dqn+FmkF77whZ2z/k+AAAECBAgQIECAAIFaCAz1JQ21WKEiCRAgQIAAAQIECBAgkFNAQMoJZTMCBAgQIECAAAECBJovICA1v8dWSIAAAQIECBAgQIBATgEBKSeUzQgQIECAAAECBAgQaL6AgNT8HlshAQIECBAgQIAAAQI5BQSknFA2I0CAAAECBAgQIECg+QIj+5rvplMtWrQozJxZTZ6Mf2sqnmINe/fubTp1kuuLX2N/2GGHJVlb04vq/N7NnTu3st/BPMZN3j/iMahNx58Uexn/fEaKdeX53ah6m2Hdon08DsX/O5Uv0HkMtHjx4vInN2Mm0KTjT97H0QJSzp0//tHbqk7xwXk8QMQadu/eXVUZrZ43Pjjfvn17qw2qWvzY2FiYN29e2LVrV9I9aPL+Ee8c23T8Sa2X8+fPz54cS62uqo4J0513WLfOkzPDjjPdum3/M4F4/In3Azt27Aj79u3DUrJAfAw6Z86cpO9/p0PS/XdbD3Y7AelgOl3XxQdnVf1ixoNzPMUa4j+nagR27txZzcRmzQTisz4p9yDl2obdhaJ9m44/KfYy3v+kWNew+1YZtx/WLT5Aj/+GHaeMtTZxjs4z/vEY1Pm5ietMdU3x1dMmHX/i73KeUzXvGctTmW0IECBAgAABAgQIECBQsoCAVDK46QgQIECAAAECBAgQSFdAQEq3NyojQIAAAQIECBAgQKBkAQGpZHDTESBAgAABAgQIECCQroCAlG5vVEaAAAECBAgQIECAQMkCAlLJ4KYjQIAAAQIECBAgQCBdAQEp3d6ojAABAgQIECBAgACBkgUEpJLBTUeAAAECBAgQIECAQLoCAlK6vVEZAQIECBAgQIAAAQIlCwhIJYObjgABAgQIECBAgACBdAUEpHR7ozICBAgQIECAAAECBEoWEJBKBjcdAQIECBAgQIAAAQLpCghI6fZGZQQIECBAgAABAgQIlCwgIJUMbjoCBAgQIECAAAECBNIVEJDS7Y3KCBAgQIAAAQIECBAoWUBAKhncdAQIECBAgAABAgQIpCsgIKXbG5URIECAAAECBAgQIFCygIBUMrjpCBAgQIAAAQIECBBIV0BASrc3KiNAgAABAgQIECBAoGQBAalkcNMRIECAAAECBAgQIJCugICUbm9URoAAAQIECBAgQIBAyQICUsngpiNAgAABAgQIECBAIF0BASnd3qiMAAECBAgQIECAAIGSBQSkksFNR4AAAQIECBAgQIBAugICUrq9URkBAgQIECBAgAABAiULCEglg5uOAAECBAgQIECAAIF0BQSkdHujMgIECBAgQIAAAQIEShYQkEoGNx0BAgQIECBAgAABAukKCEjp9kZlBAgQIECAAAECBAiULCAglQxuOgIECBAgQIAAAQIE0hUQkNLtjcoIECBAgAABAgQIEChZQEAqGdx0BAgQIECAAAECBAikKyAgpdsblREgQIAAAQIECBAgULLAWMnzmY5AqwXGx8cn1z8xMTH5sx8IECBAgAABAgTSEPAKUhp9UAUBAgQIECBAgAABAgkICEgJNEEJBAgQIECAAAECBAikISAgpdEHVRAgQIAAAQIECBAgkICAgJRAE5RAgAABAgQIECBAgEAaAgJSGn1QBQECBAgQIECAAAECCQgISAk0QQkECBAgQIAAAQIECKQhICCl0QdVECBAgAABAgQIECCQgICAlEATlECAAAECBAgQIECAQBoCAlIafVAFAQIECBAgQIAAAQIJCAhICTRBCQQIECBAgAABAgQIpCEgIKXRB1UQIECAAAECBAgQIJCAgICUQBOUQIAAAQIECBAgQIBAGgICUhp9UAUBAgQIECBAgAABAgkICEgJNEEJBAgQIECAAAECBAikISAgpdEHVRAgQIAAAQIECBAgkICAgJRAE5RAgAABAgQIECBAgEAaAgJSGn1QBQECBAgQIECAAAECCQgISAk0QQkECBAgQIAAAQIECKQhICCl0QdVECBAgAABAgQIECCQgICAlEATlECAAAECBAgQIECAQBoCAlIafVAFAQIECBAgQIAAAQIJCAhICTRBCQQIECBAgAABAgQIpCEgIKXRB1UQIECAAAECBAgQIJCAgICUQBOUQIAAAQIECBAgQIBAGgICUhp9UAUBAgQIECBAgAABAgkICEgJNEEJBAgQIECAAAECBAikISAgpdEHVRAgQIAAAQIECBAgkICAgJRAE5RAgAABAgQIECBAgEAaAgJSGn1QBQECBAgQIECAAAECCQgISAk0QQkECBAgQIAAAQIECKQhICCl0QdVECBAgAABAgQIECCQgICAlEATlECAAAECBAgQIECAQBoCAlIafVAFAQIECBAgQIAAAQIJCAhICTRBCQQIECBAgAABAgQIpCEgIKXRB1UQIECAAAECBAgQIJCAgICUQBOUQIAAAQIECBAgQIBAGgICUhp9UAUBAgQIECBAgAABAgkICEgJNEEJBAgQIECAAAECBAikISAgpdEHVRAgQIAAAQIECBAgkICAgJRAE5RAgAABAgQIECBAgEAaAgJSGn1QBQECBAgQIECAAAECCQgISAk0QQkECBAgQIAAAQIECKQhICCl0QdVECBAgAABAgQIECCQgICAlEATlECAAAECBAgQIECAQBoCAlIafVAFAQIECBAgQIAAAQIJCAhICTRBCQQIECBAgAABAgQIpCEgIKXRB1UQIECAAAECBAgQIJCAgICUQBOUQIAAAQIECBAgQIBAGgICUhp9UAUBAgQIECBAgAABAgkICEgJNEEJBAgQIECAAAECBAikISAgpdEHVRAgQIAAAQIECBAgkICAgJRAE5RAgAABAgQIECBAgEAaAgJSGn1QBQECBAgQIECAAAECCQgISAk0QQkECBAgQIAAAQIECKQhICCl0QdVECBAgAABAgQIECCQgICAlEATlECAAAECBAgQIECAQBoCAlIafVAFAQIECBAgQIAAAQIJCAhICTRBCQQIECBAgAABAgQIpCEgIKXRB1UQIECAAAECBAgQIJCAgICUQBOUQIAAAQIECBAgQIBAGgICUhp9UAUBAgQIECBAgAABAgkICEgJNEEJBAgQIECAAAECBAikISAgpdEHVRAgQIAAAQIECBAgkICAgJRAE5RAgAABAgQIECBAgEAaAgJSGn1QBQECBAgQIECAAAECCQgISAk0QQkECBAgQIAAAQIECKQhICCl0QdVECBAgAABAgQIECCQgICAlEATlECAAAECBAgQIECAQBoCY2mU0VvFV77ylbB48eJw2mmn9VyxZ8+ecPfdd4d77703nHzyyeH000+f1vVx44cffjjcddddYfny5WH16tVh0aJFPWM4Q4AAAQIECBAgQIBAewWSewUpBqArrrgiC0HdbYnh6OKLLw5XXnll+OEPfxiuueaacN11101uMuj6uOENN9wQ1qxZk4190003hUsuuSQ8/fTTk2P4gQABAgQIECBAgACBdgsk8wrS7t27swATQ8yMGTP260oMNFu2bAk33nhjWLhwYXjooYeysHPeeeeFk046KQy6Pr5yNDExEa6//vpw6qmnhjhfDFxxvPh/JwIECBAgQIAAAQIECCTzCtJtt90W/vVf/zW85z3vCccee+x+nbnzzjvD2WefnYWjeOVxxx0XTjnllHD77bdn2w66ft26deGYY47JwlG8wdjYWDjnnHMmb58N4j8ECBAgQIAAAQIECLRaIJlXkF7ykpeEc889NwsuH/nIR/ZryqOPPpoFnO4rYuB54oknsovyXL9q1arum2fjbdiwIezduzfMnPlMVoyvRt188809237sYx+r7PNKs2bNymo57LDDwr59+3rqcqYcgbh/HH744SOdbNTjjbS4hAbrvKI8f/78MGfOnIQq6y2lyf2MTyjFf205/qTYy3g/kGJdvb8FaZ4b1i0e/+NxaO7cuWkusOFVxWNPPC1btqzhK01zeXHfb9LxJ76DLM8pmYB0sANYXEwMMkuWLOlZUzx///33Z2+XO9j18UaPPfbYfrePXwQRw9HGjRt7fvEef/zx8O1vf7tnrniAnD17ds9lZZ/pHCTKntd8PxMYdf9HPV7T+xR/B+O/VE9N72ebjj8p9jI+SEmxrlR/H7vrGpVbysef7vU29edR9bGpPkWvq23+yQSkgzU2Jtd4YOpPffF8/DzSoOvj2LGxB7p9vG7BggXxf5OnP/qjPwrxX/cpBqzt27d3X1TazzHIxW/be/LJJ8OuXbtKm9dEzwgceeSRk69WPnPpcD/FfcppsEB81Sg+gbJ169awefPmwTeoaIsm93Pp0qWZf1uOP6n1cuXKlZNPBFa0e9d62mH7GV+9jo8z4uegncoXiMef2IP4jqH4pLZTuQLx8Xf85uf4QkQTTvF3OT6mG3RK9+nYrsrjM2exOf0PjjZt2hTiHceg6+NQRxxxxAFvH1+y9bJ5F7YfCRAgQIAAAQIECLRYoBYBKfbnxBNPDOvXr+9pVfx7SJ3PFQ26/oQTTgj33Xdfz6tIcbzO7XsGdoYAAQIECBAgQIAAgVYK1CYgXXDBBeGOO+7I/oZR/KDwLbfcEnbu3Jl9sUPs3KDrzzrrrKzBa9euzV6ifeCBB0L85rz4d5GcCBAgQIAAAQIECBAgEAVq8RmkWOgZZ5wRXve614VLL700+zxRfOXn8ssvn/xmuUHXx7fRXXvtteHqq68OMSTF97Oef/75YfXq1XF4JwIECBAgQIAAAQIECKQZkD71qU8dsDVvetObwhve8IYQP3sUP1PUfxp0/WmnnRZuvfXWEL+lbsWKFUl/I1b/2pwnQIAAAQIECBAgQKB4gdq8gtShiN9odaBwlPf6uN1RRx3V2dz/CRAgQIAAAQIECBAgMClQm88gTVbsBwIECBAgQIAAAQIECBQkICAVBGtYAgQIECBAgAABAgTqJyAg1a9nKiZAgAABAgQIECBAoCABAakgWMMSIECAAAECBAgQIFA/AQGpfj1TMQECBAgQIECAAAECBQkISAXBGpYAAQIECBAgQIAAgfoJCEj165mKCRAgQIAAAQIECBAoSEBAKgjWsAQIECBAgAABAgQI1E9AQKpfz1RMgAABAgQIECBAgEBBAgJSQbCGJUCAAAECBAgQIECgfgICUv16pmICBAgQIECAAAECBAoSEJAKgjUsAQIECBAgQIAAAQL1ExCQ6tczFRMgQIAAAQIECBAgUJCAgFQQrGEJECBAgAABAgQIEKifgIBUv56pmAABAgQIECBAgACBggQEpIJgDUuAAAECBAgQIECAQP0EBKT69UzFBAgQIECAAAECBAgUJCAgFQRrWAIECBAgQIAAAQIE6icgINWvZyomQIAAAQIECBAgQKAgAQGpIFjDEiBAgAABAgQIECBQPwEBqX49UzEBAgQIECBAgAABAgUJCEgFwRqWAAECBAgQIECAAIH6CQhI9euZigkQIECAAAECBAgQKEhgrKBxDUuAAAECBAgQqFxgfHx8soaJiYnJn/1AgACBqQS8gjSVjMsJECBAgAABAgQIEGidgFeQWtdyCyZAgACBQQJedRgk5HoCBAg0V8ArSM3trZURIECAAAECBAgQIDBNAQFpmmA2J0CAAAECBAgQIECguQICUnN7a2UECBAgQIAAAQIECExTQECaJpjNCRAgQIAAAQIECBBoroCA1NzeWhkBAgQIECBAgAABAtMUEJCmCWZzAgQIECBAgAABAgSaKyAgNbe3VkaAAAECBAgQIECAwDQFBKRpgtmcAAECBAgQIECAAIHmCghIze2tlREgQIAAAQIECBAgME0BAWmaYDYnQIAAAQJiPbxIAAAl1UlEQVQECBAgQKC5AgJSc3trZQQIECBAgAABAgQITFNAQJommM0JECBAgAABAgQIEGiugIDU3N5aGQECBAgQIECAAAEC0xQQkKYJZnMCBAgQIECAAAECBJorICA1t7dWRoAAAQIECBAgQIDANAUEpGmC2ZwAAQIECBAgQIAAgeYKCEjN7a2VESBAgAABAgQIECAwTQEBaZpgNidAgAABAgQIECBAoLkCAlJze2tlBAgQIECAAAECBAhMU0BAmiaYzQkQIECAAAECBAgQaK6AgNTc3loZAQIECBAgQIAAAQLTFBCQpglmcwIECBAgQIAAAQIEmisgIDW3t1ZGgAABAgQIECBAgMA0BQSkaYLZnAABAgQIECBAgACB5goISM3trZURIECAAAECBAgQIDBNAQFpmmA2J0CAAAECBAgQIECguQICUnN7a2UECBAgQIAAAQIECExTQECaJpjNCRAgQIAAAQIECBBoroCA1NzeWhkBAgQIECBAgAABAtMUGJvm9jYnQIAAgQMIjI+P91w6MTHRc94ZAgQIECBAoB4CXkGqR59USYAAAQIECBAgQIBACQICUgnIpiBAgAABAgQIECBAoB4CAlI9+qRKAgQIECBAgAABAgRKEBCQSkA2BQECBAgQIECAAAEC9RAQkOrRJ1USIECAAAECBAgQIFCCgIBUArIpCBAg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igkQIECAAAECBAgQmEJAQJoCxsUECBAgQIAAAQIECLRPQEBqX8+tmAABAgQIECBAgACBKQQEpClgXEyAAAECBAgQIECAQPsEBKT29dyKCRAgQIAAAQIECBCYQkBAmgLGxQQIECBAgAABAgQItE9AQGpfz62YAAECBAgQIECAAIEpBASkKWBcTIAAAQIECBAgQIBA+wQEpPb13IoJECBAgAABAgQIEJhCQECaAsbFBAgQIECAAAECBAi0T0BAal/PrZgAAQIECBAgQIAAgSkEBKQpYFxMgAABAgQIECBAgED7BASk9vXcigkQIECAAAECBAgQmEJAQJoCxsUECBAgQIAAAQIECLRPQEBqX8+tmAABAgQIECBAgACBKQQEpClgXEyAAAECBAgQIECAQPsEBKT29dyKCRAgQIAAAQIECBCYQkBAmgLGxQQIECBAgAABAgQItE9AQGpfz62YAAECBAgQIECAAIEpBASkKWBcTIAAAQIECBAgQIBA+wQEpPb13IoJECBAgAABAgQIEJhCQECaAsbFBAgQIECAAAECBAi0T0BAal/PrZgAAQIECBAgQIAAgSkEBKQpYFxMgAABAgQIECBAgED7BASk9vXcigkQIECAAAECBAgQmEJAQJoCxsUECBAgQIAAAQIECLRPYMa+n57at+x6rfjv/u7vwqc+9anw8Y9/PJx66qn1Kl61BIYU+OY3vxkuueSSMD4+Hv7wD/9wyNHcnED9BF760peG4447Lqxdu7Z+xauYwJACf/Znfxa+/OUvhy984QvhiCOOGHI0NyeQT8ArSPmcKt1q+/btYdOmTWH37t2V1mFyAlUIxP0+7v87duyoYnpzEqhcYOPGjWHLli2V16EAAlUIbNu2LbsP2Lt3bxXTm7OlAgJSSxtv2QQIECBAgAABAgQI7C8gIO1v4hICBAgQIECAAAECBFoqMNbSdddq2b/0S78Ufvu3fzscfvjhtapbsQRGIbBixYps/3/e8543iuGMQaB2Aq961atC/D1wItBGgRe96EVhwYIFYf78+W1cvjVXJOBLGiqCNy0BAgQIECBAgAABAukJeItdej1REQECBAgQIECAAAECFQkISBXBm5YAAQIECBAgQIAAgfQEfAYpvZ70VLR58+bw1a9+NcT/x/fhPvvZz+653hkCTRKI+/rWrVt7lvSLv/iL4dhjj80u27NnT7j77rvDvffeG04++eRw+umn92zrDIE6CsT9+tOf/nR4zWteE5YsWdKzhIcffjjcddddYfny5WH16tVh0aJFPde7j+jhcKaGAlPt/3Hf/trXvrbfiv7f//t/Yfbs2dnl9v/9eFwwIgGfQRoRZBHD/N///V+46KKLwoknnhhWrVqVBaW//Mu/DGeccUYR0xmTQKUC8U7y13/918PixYvD2Ngzz9285S1vyS6P11988cXh0UcfDfEPZ8YwFe8o3/GOd1Rat8kJDCsQ/xj4TTfdFG688cZwzDHHTA53ww03hE984hPhZS97WXjkkUfCT37yk/ChD30oLFu2LNvGfcQklR9qLDDV/n/nnXeGyy+/fL8/DjsxMZHdT9j/a9z0GpT+zKOQGhTbthLf+973hvjtRX/8x38cZsyYET75yU+Gv/3bvw2f/exns/Nt87DeZgv84Ac/CDt37gz/8A//cMBvbIwPIOMfy4wPIhcuXBgeeuihsGbNmnDeeeeFk046qdk4VtdIgccffzx88IMfDP/93/+93/riK0fxgeD1118fTj311OwPhccnCOL+H/8fT+4j9mNzQY0EDrb/x2V897vfDfFbfD/84Q8fcFX2/wOyuHBEAj6DNCLIUQ/z5JNPhu985zvZ1xvHcBRPv/mbv5k9ixjfXuREoGkC8c7wiCOOOGA4imuNzyaeffbZWTiK54877rhwyimnhNtvvz2edSJQO4H3ve99Yd++feH973//frWvW7cuezUphqN4iq+qnnPOOZP7u/uI/chcUDOBg+3/cSnxPmGqJ7/s/zVrdg3L9QpSok177LHHssq6324R/w7SnDlzwhNPPJE9q5Jo6coicEgC3/ve97K3TVx33XXZ2+fi24h+//d/P5x55pnZePGtdd2/D/HCeD7+PjgRqKPAu9/97nDUUUdlr4b21x/39/jW6u5T3N83bNgQ9u7dG9xHdMv4uY4CB9v/43piQJo7d26I2913330hfh71bW97W/Z7Yf+vY8frVbNXkBLtV7xzjAeG+K/7FD+f8fTTT3df5GcCjRC4//77w1NPPRWe+9znhne+853ZneBll12WfUh39+7d2QPD/g+wx/PxNk4E6igQw9FUp/gAsH9/j8f/GI42btyYfRbPfcRUei6vg8DB9v/45QvxdyA+IRA/avDmN7852+cvvfTS7K3WHiPVocP1rtEr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",
"text/plain": [
"plot without title"
]
},
"metadata": {
"image/svg+xml": {
"isolated": true
}
},
"output_type": "display_data"
}
],
"source": [
"x.freq <- fft(x.time$counts)\n",
"\n",
"spectrum <- function(X.k) {\n",
" plot.data <- data.table(bin=0:(length(X.k)/2-1), amp=head(Mod(X.k), n=length(X.k)/2))\n",
" plot.data[2:.N, amp:=2*amp]\n",
" \n",
" plot.data[bin>0] # Filter out the DC component\n",
"}\n",
"\n",
"spectrum <- spectrum(x.freq)\n",
"\n",
"ggplot(spectrum, aes(x=bin, y=amp)) + geom_bar(stat=\"identity\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Wow! The periodicity is so apparent it nearly gauges your eyes! But what are the exact frequencies?\n",
"\n",
"Let's filter the peaks:"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/html": [
"<table>\n",
"<thead><tr><th></th><th scope=col>bin</th><th scope=col>amp</th></tr></thead>\n",
"<tbody>\n",
"\t<tr><th scope=row>1</th><td>30</td><td>1338.389</td></tr>\n",
"\t<tr><th scope=row>2</th><td>60</td><td>3240.003</td></tr>\n",
"\t<tr><th scope=row>3</th><td>90</td><td>1994.452</td></tr>\n",
"\t<tr><th scope=row>4</th><td>120</td><td>1642.245</td></tr>\n",
"</tbody>\n",
"</table>\n"
],
"text/latex": [
"\\begin{tabular}{r|ll}\n",
" & bin & amp\\\\\n",
"\\hline\n",
"\t1 & 30 & 1338.389\\\\\n",
"\t2 & 60 & 3240.003\\\\\n",
"\t3 & 90 & 1994.452\\\\\n",
"\t4 & 120 & 1642.245\\\\\n",
"\\end{tabular}\n"
],
"text/plain": [
" bin amp\n",
"1: 30 1338.389\n",
"2: 60 3240.003\n",
"3: 90 1994.452\n",
"4: 120 1642.245"
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"spectrum[amp>1000]"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Multiples of 30 bins! That is..."
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/html": [
"2.00555555555556"
],
"text/latex": [
"2.00555555555556"
],
"text/markdown": [
"2.00555555555556"
],
"text/plain": [
"[1] 2.005556"
]
},
"execution_count": 6,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"freq.minutes = 6\n",
"1/((30*freq.minutes)/length(x.freq))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"That is very interesting. We found a base frequency of 2 minutes with a significant amplitude. That means the traffic to our service is indeed very periodic, not random."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "R",
"language": "R",
"name": "ir"
},
"language_info": {
"codemirror_mode": "r",
"file_extension": ".r",
"mimetype": "text/x-r-source",
"name": "R",
"pygments_lexer": "r",
"version": "3.2.3"
}
},
"nbformat": 4,
"nbformat_minor": 0
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment