Skip to content

Instantly share code, notes, and snippets.

@saikatharryc
Last active February 13, 2025 21:18
Show Gist options
  • Save saikatharryc/dab198acb9b346d511834534e79ada00 to your computer and use it in GitHub Desktop.
Save saikatharryc/dab198acb9b346d511834534e79ada00 to your computer and use it in GitHub Desktop.
Data-lake <> warehouse design possiblity
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1595.896769205729 1439.5754699707031" width="4787.6903076171875" height="4318.726409912109" filter="invert(93%) hue-rotate(180deg)"><!-- svg-source:excalidraw --><metadata><!-- payload-type:application/vnd.excalidraw+json --><!-- payload-version:2 --><!-- payload-start -->eyJ2ZXJzaW9uIjoiMSIsImVuY29kaW5nIjoiYnN0cmluZyIsImNvbXByZXNzZWQiOnRydWUsImVuY29kZWQiOiJ4nO19aXPbSLLt9/lcdTAwMTWIvjde9Ew04dqX+TIhS7I2a1+t51x1MDAxYlxukIRIStzERduN+e8vXHUwMDEztEWAKECkXGJt86iOdthcIlx0olCVmSe3k//7N8/7Y/DQXHL/+Kf3R3hfXHSajWovuPvjL/z9bdjrNzpteIlF/+53hr1K9M76YNDt//PLl/En/EqnNfpU2FxmW2F70If3/V/4t+f9b/QnvNKo4me3a3vru+2N+lx1MDAwZVx1MDAwZpvBj57o3G5XR1x1MDAxZo3e9PtmemFlXHUwMDEwtGvNcPzSPfyeXHUwMDFh4lMrlKCUcmYok08vP8DLJWakL1x0kcxYTblcdTAwMTTs6eW7RnVQxytQ6SvFrOJGaWq0pE9vqYeNWn1cdTAwMDDvkZL7zDBKhLBcZt/z9JbRLf3TI0+/6Vx1MDAwZnqd63C50+z08L7/i4b43/iuy0HlutbrXGbb1af3XGZ6QbvfXHJ68JjG77tsNJuHg4fo6vCo4bH+MfFcdTAwMWSnv1bAJn6f9Sn40lq9XHUwMDFk9nErxovsdINKY4BcdTAwMGaLkvEq8Fx1MDAwZbtcdTAwMWLVaNf+Z3xPvaBcdTAwMTVu4La1h83m069cdTAwMWLtaoib8UdAXHUwMDEz39au/vq231s+3k/+6zf/XHUwMDFl33tcdTAwMTjihalmTEghYvcyPnfCpH6702lHZ9BobVx0XHUwMDEzevyGRn9cdTAwMDXO3iC66mXQ7IfjLcBbW42dy/FcbofdajD4dSPcXG64XHUwMDE5aq1cdTAwMWU/4WajfT25/Gancj3+lr/FljVx1Fe1oJ1tVm9tXHUwMDFjtErfXHUwMDFmd5U63TpIXHUwMDFm9UF4P0ieckaVL1xmVcZcbslTZ9xK3ygmmNJSo1x1MDAwNKjUXHUwMDE5l8I31lq4XHUwMDA0I5RqatNHnC3OdMaZXHUwMDE27jOdePevw8tcdTAwMTRjXHUwMDA2VIRxnF0qWdbZpbAxhHJN2EtcdTAwMGXvk2yNpezpxO2VT/eq5dWWqjS4WT7ZbV5cdTAwMWOeLD+tJ3Hqgl6vc/fH0yv//vW3XCJFY3zS8YTDd25cdTAwMDWX10HseHTag8PGI95cdTAwMGUjid9+XHUwMDBiWo0m7qdMXFxjqdmo4bP9o1x1MDAxOV7Gjlx1MDAxOTzeQVx1MDAwMyzR08uDTnf8alx1MDAwNa5cdTAwMTc02mEvvemdXqPWaFx1MDAwN80j9/1cdTAwMDXDQecg7I/ucNBcdTAwMWKG8bWH679FifpM5miBwVxuvTsvy0ZY2pCtje7u6mHpe30qLUCkr1x1MDAwNYPz9VvSXHUwMDEzekBcdTAwMTifXHUwMDFiY6SwhlxiZdRYyH+rXHUwMDAxxXylreVUXHSiYp9+Ulx1MDAwMlx1MDAwYsOWpVx1MDAwNOT0SoAqxFx0klx1MDAxYeHQXHUwMDAyjKvJ3z5pXHUwMDAxqSygXHUwMDBmPf5YQUpgqWlcdTAwMDbtPapvQ6K6jVZ5yTb3zj+OXHUwMDEyWDo99H62V29hKT/bX3uNai38wCoh926LUVx1MDAxMDXa3D1fXHUwMDFhduud4fCEXHUwMDFlXHK/nZdbd1MjYi5cYiBeo7mBnVx1MDAwMS0wXHUwMDAxXHUwMDE2XHUwMDAwXGb7VluqleGWWqZcdTAwMWSA2HLQXHUwMDEzklx1MDAxYiFcdTAwMTmYJjE+kE+Kglx1MDAxMs58zohcdTAwMDLLZTmXdnyqXHUwMDE3iiOhONTciFx1MDAxOECvoSBpLkCsZVxuajypXHUwMDEzXHUwMDAyNkJcdTAwMTIpXG7XJ6p2cHG5Jdi50rXB4G5cdTAwMWQ27eG4IH1cIlx1MDAxOcB4aeNy83K83d2+XHUwMDBl68GDPl/bXHKXd+Xx9crw9CEtSGGz2ej2J8RIXHUwMDExXHUwMDAxXHUwMDA3nIPTSDhgM25cdTAwMTJixKxcdTAwMGYuXG5HYyxcdTAwMDS1SqSkSDKfXHUwMDEy8CuNoNqquMs4trbGV1x1MDAxNHaIMpDSXHUwMDA0rF/IUEKG9LQyxLJkiFxuXHUwMDA12k6YtP9cYi9cdTAwMWFmM4VcYj4hwVx1MDAxZI35VHNcdTAwMGKRXHUwMDEz4MVOrdw8Wb/p31x1MDAwZnfk2sPW/v7w+2H5oFx1MDAxZpOhv9yXnVx1MDAxYvDnXndcdTAwMGVcZpF73TW2r03t6HDt+PFEh3d2+bi3Zlx1MDAwYrhuufmjs3J7tlm7rJx19+qqsdu941x1MDAwNVxcl7SPwp2gXHUwMDE27K9Su3QxXGJcdTAwMGZcdTAwMGZXO/tcdTAwMDVcXHdcdTAwMGWdmntdu7onVzZcdTAwMWZ1e1N9p92NXHUwMDFmN19cdTAwMDe121x1MDAwMq57pVx1MDAwZURrbe2sPrQ/7jdbw+tt/l1cdTAwMTVmXHUwMDAzwHSJsaTOZVx1MDAwM9zSNIW3pajxKUq+YFbJuE9cdTAwMWaBTuVcdTAwMGLJmSRRQMVcYj5W3r8tXHUwMDAwXHUwMDEzvrRcdTAwMDCOpTTScpdcdTAwMDFYaPwsjW9mcLdcYiFcdTAwMTbOTTq8gpto9eRvn1S75cTC6/pFqr3I05vyiFx1MDAwZXls+17sXHUwMDAwVeBew16OXHUwMDBi1GpUq3HvIelcdTAwMDU9h54mXHUwMDFko/hNXHUwMDE341x1MDAwN+Xbslx0/ZKQXaa1XHUwMDBmXHUwMDFlXHUwMDBlMSC8jkhJyXCfXHUwMDE4LoVcdTAwMDVfncP5ScM3K31cdFJNpVx1MDAwNleKSO6ImFLuXHUwMDFibWHHLVFUXHUwMDEzXHUwMDFkyy0spDkhzUtz4zdGXHUwMDE5V5xcdTAwMTPmiqlcYpmZXHUwMDE1XHUwMDAwjG7Rky1YxjFFoZWMn+ppZbzbaUyiw/HfvPGJif7x9Pf/+cv57sxTij+l9Fx1MDAwMVx1MDAxZF8vZYSbQX+w3Gm1XHUwMDFhXHUwMDAzWOhcdTAwMWXeZErfXHUwMDBlgt7gK+xqo11L7t6vXHUwMDE038ZcdTAwMTRJjkh3VYb4XHUwMDAwMHEnqSBcdTAwMDY8KTC0VMTu/o9a0EXN5mvwr1x1MDAwMLZLXHUwMDA2i4vHLCNRuE/eaerwhO3q8/d7u7qlzs57Mlx1MDAxOJ7v7uy0XHUwMDA2t4fD07b7flx1MDAwNVOSKDhuXHUwMDFhPDsyRlx1MDAwNE/3S2e6veiBLqH2qodBSnzg5uOvTaq5sFnu3E2FgPKhe75cdTAwMWFcdTAwMTWwZq0t7Fx1MDAwZWyRmlCjlGifwc5pzsDPpUqlXHUwMDEzT5b64HpcdTAwMTnYY1x1MDAwMnZRuXKrxOecU1x1MDAwM1x1MDAwN0FcdKrix2ChRr2EXHUwMDFhXZ5bjcJmXHUwMDE52CruxEqCZyaoJJhSXHUwMDA2+1xceHL1g6jRrFOKP6X0XHUwMDAxfVx1MDAwYjWanyVKqCVQjVx1MDAxY4RTSInwk8eV0EgtKZ+AcdCUxN2Qd9Cg8ChB3YNNkmCSOfhVbGyYn25cdTAwMTa8LiO1NZxaMPpGq5lu+I106so3QjZcdTAwMWVZZX33orShT872xXFFpXVqVtGKtGj8rFx1MDAxNlozrEpJolMquM+lXHUwMDA0kaNcdTAwMTZMo1x1MDAwM51SJX1cdTAwMDPgXHUwMDE1NLJcdTAwMDVcdTAwMDFy5vK4JL4mYDNZylx1MDAwMV3o1YReXZ0/RM9BNzI4r1x1MDAwZbVKqZz87Ti6SFx1MDAxNJGWilx1MDAwMvP+z0VcdTAwMTf7pXPJz8iPk/vzciVYr57TXHUwMDFm1zfTRn1cdTAwMWVcdTAwMDanu1x1MDAxYnu9vTN7v09LtNL+djO8KCbqo1x1MDAxNKaR+Nhdnyvq415lSj7TUVx1MDAxZlx1MDAxME3rW1x1MDAwMVwipY0wnGialE1lQJeC2Fx1MDAxMtg1LCjjadlcdTAwMTTK59ZawrhwR31iJ3YhiVx0Sfw2fdhHg0cgqHE6hDSGMydEjoEhlMpSbV5cInJ5p1dxsGwvgTJPUZ+gXHUwMDE2toLrsOf9bG93qmHTg41ttMH2/mz/bJe8vc5cdTAwMDDuo1x1MDAxMTSbXHUwMDBmP9uDXqNWXHUwMDBie2HVu2tcZuo/28u9TvuqU/Y6vZ/tfqVcdTAwMWVWh014bVBcdTAwMGZcdTAwMDY/23fBg/9cdTAwMTFcdTAwMDJKz1x1MDAxOM1UQGn65+ElXHUwMDFmhzd+XHUwMDFhXvJheMlnUUycSpTLa0tLXHUwMDE3P+zDRXhZ75fuv20yR0GPM81IXHUwMDA1tb5cdTAwMDFvUlx1MDAwMiCyithcdCygfFx0/lx1MDAxN6VcXGOOkNh0ut7gW6imilx1MDAxMzTzZizOT1x1MDAxYccsTH+GwlkrILNcYo5cdTAwMTGAb5uq60HAYDMjUywqSlbKvKHtXHUwMDFmVlx1MDAxZa7s7nV5cKOXT1x1MDAxZm4v70/r3da0tn9oby566mT14oQ2z1x1MDAwZja37lqm3pvO9ude14h6r7q5s9FcdTAwMWJcdTAwMWP/WF66vN7dKV3tXHUwMDE2cN05sErudTcuNnuX5uF8faArndU7u7FdbV9cdTAwMTWFgaTm4Fx1MDAxOVx1MDAxNYOB3Ls9XHJcdTAwMDZcdTAwMTJYQiRcdTAwMDWjoHS0nSx9XHUwMDAw51x1MDAwNPxcbklcdTAwMDRjilx1MDAxYYBtKZUkXHUwMDA0llx1MDAxOFlhrcRqY2fxw1wi95Wlk9ZnKTXkXHUwMDA2TIZQzlJDlel4aNw9XHUwMDEx105cdTAwMDWBIGbBpZlcdTAwMGJcdTAwMDTx0odIfj1j09PJr1Lh6a/m6vJOa/9cIihVNlx1MDAxZfeX+1x1MDAxYvQw2LyaRn6FJb614MlQZTDyn4zaKlxur1KrQIiFYJqMpfvJg5HEx1xytdJcdTAwMDKs0PHyznjtktHMXHUwMDAykiZMXHUwMDExZVx1MDAxNvV/XHUwMDE50rw1vTRcdTAwMWJKOEA95epcdTAwMWWA/cxcdTAwMTRmalx1MDAxOSdUvkiY8yzda9XQzFGT8pxcdTAwMDVcdTAwMDWvkFEm58q+l7w+/+eXL3/+gJ+//2w/3dSXP7e34/+OfrWyMvEr+N36+uTvvC//8P+86nfaX+5bzb879Vx1MDAxYmW+XHUwMDAyqVx1MDAwNM0slaCaWJN41ztVO7/hs0gozeTOzKI181x1MDAwYsrysl1KMZ8qwZWhKIg6XHR7QOFxwiiAdq6UXHUwMDE2Ml3vI1x1MDAwNPdccoa2ueTSXHUwMDEwlyNGufQ51oRyXHUwMDBlSlx1MDAxM/Tv2J1bqM2E2vxeQK6LXHUwMDE4QsCldpV8MmIyXHUwMDBip+FcYoDp5EXWTT/nmF03XHUwMDBlO1xcN8rfl4LlsGaOzsvktPO6JXNPvy40k5YpXHUwMDAz+JM+/ePLpVZYWFwiLb+MyUtkp1xi4UJcdTAwMTluwFxyQ2eM03RJXHUwMDAy1v1cdTAwMTEhjVx1MDAwMFx1MDAxNW3B/4m/o6B8WvVKnoJcdTAwMTW7pKunhHdcdTAwMGY3t+tnp+euO8YkXHUwMDEyj3qfXHUwMDAx51x1MDAxOSMt+SQlXHTu8z5cdTAwMDW0NZr4QjFcdTAwMDCuksGfsWaqX93evlx1MDAwMExqKSaWNXip6XCZXHUwMDE0PpfUgvNcdTAwMDO+LbhI4ys8aWn1SeLz1aBfXHUwMDBm31gtn8xcdTAwMTChx6pMIZVL/4q8tlx1MDAxNfiP0IJLtpS0wnLzolqD38DwXHUwMDAwjn3f+9k+XGLu4E+4vLt1larEb1/bU31cdTAwMDbwTFwiurxFXHUwMDE047de3shh+V4+XHUwMDA0q5Wv31x1MDAxYmS/XHUwMDE3UuHwWzNy40aBeypcdTAwMDFfgSArSZMgrEQ56DwquTFcdTAwMDLbLEFRp1x1MDAwNZyAilx1MDAwMP1AhDFIXGJcdTAwMTGLT40lnDFfU604eK+YgP8ksah3XHUwMDEw+P1pcVhmbtxcYoGZOuFcblFxk915Q7lcdTAwMDEtzmyBnTev23IyRyD7eXxcdTAwMDdObTyMOldgWNy2tlx1MDAxZtdFtf1tq1xyPvjqj1x1MDAxZL60No31tSBa3GjAJrCplDE2IZxU+UxgTsOAl0RcdTAwMWNNcZr71MB6XHUwMDAwPGV1lrKF8c2SxYPpbS+FY4NFs06pk9lcdTAwMDUp1Fx1MDAwMqI1TFx1MDAxNWx8XHUwMDE1nFx1MDAwN0tmyWukjC/2Xa81h+7W8Fx1MDAxOU3uK7aGJ2+xXHUwMDE4g5rvXHUwMDBmPFtshmW6RFpLqFx1MDAwMuhMkpCZauNrS4SVXFwzrPN1hINcdTAwMTlcdTAwMThUjlx1MDAxZTNcdTAwMDObXHUwMDBigG5sc8eBXHKpffhfaiZcdTAwMTj6T7Fz96Gl+O1cdTAwMDNcdTAwMWKHc1x1MDAxYlTKNFawcOusNlx1MDAxMyaTYEJcdTAwMWKNXHUwMDE0WS9reHolizqF5VOYZCjG8l09hlx1MDAxYmFYu6S2clrp7Vx1MDAwZm6V7DWnliSrpE+45Fx1MDAxOLkwjKtkqVx1MDAwNkdcdTAwMWExw7WgXHUwMDE2XzU0JUiG+1x1MDAxOFxcXHUwMDA0RKpBXHUwMDFkSu1wPe3C+mVcdM5xXHUwMDAxgkM0xdi6s/o9u2aMgnLETv9cIlx1MDAwNee5iGDvfqWv2veloypt19Z39vbNRWNqJPpapVx1MDAxYcc7unt23zuttVx1MDAxZte6fXt2dFBaKaKZOPhR3a2Q3u3ej9VwsztYJerrLivguoP71lx1MDAwZb/ZPrlfP1+BJ3l7Rlb3itNLXHUwMDFhRL0gveTe7WlcdTAwMTC5tj5VgPUwXHUwMDFhKSablFx1MDAwNXlOJUnpY65DglaykbucVklmoZKyVNJcZsEwrNW3mlx1MDAxMupsYKR88rfjMjHsXHUwMDAxINq8KFx1MDAxYlHk8U0h8uVecNdcZns/25e/i05bwc92L6y5i03fOCz2jKmfxO7xxXijtXjJpVx1MDAxNIPl81VzXnpcdTAwMTIklPtacFxyPpqF3TNJWafCx1x1MDAwMnrsqdFYfe4oy6JcXPtcdTAwMWE1XHUwMDA16Fx1MDAwNGKQmMAh7Vx1MDAxOHwj0ihcdMCLq09S1vFcdTAwMGWyfzp/gpJcdTAwMTJJpVsjcJapXHUwMDExMM/HXHUwMDE4Zy8p90isJa1cdTAwMTLAbzPvn0PMPqb4U5o8oePLpWx2YTnEwK7atXr7633zaOtm+3rjhy6ReGgvlpHD5Fx1MDAxNCFcdTAwMTRcdTAwMWRhXG5utYi96SVcdLmpXHUwMDEyhvnFasnbg+emXHKSIWlqlKPlmkaxXHUwMDAytFbwJ5djfripbveN8oer3a/LO9ddunJhNi/2qnT3+LxXmqq0XHUwMDE1tKividbKXG4jtJho76FIXGZh4blQyWlEu5ZSolx1MDAxYd5BtOVCapLg7HpSoWJcdTAwMDGYspTm+SyAyUY9q9pVXHKX06pcZlx1MDAwZZ5RxFx1MDAxOFp4lKN11za7Z1x1MDAxN4df1Vx1MDAxZLnha1x1MDAwN8Pe7VL1w3sps0ZPUjBv9ei797N9XGJcdTAwMDfw2rvqlD9w/DXzTouBbqc/zlx1MDAwMrGyzC9bpH/eX1NcdTAwMTerm9vH0ylcdTAwMWRMjFhcdTAwMWExalwivWFC54ChXHUwMDAwjUKopJRcdTAwMGKlmXFEYIlcdTAwMDVHTiA7rCRcXJiYTMTq6X1cdTAwMDb6XGJPP0V+z1x1MDAwNYtChlx1MDAwZarNoINcdTAwMThVXHUwMDE477ZOp81m1zBwaySj8kVcdTAwMTgtV1x1MDAwN71ujlx1MDAxMXVcdTAwMDWNy8asuuJcYk9cdHhQLZDDP69cdTAwMDAoeH951V6n61x1MDAwNe2q11x1MDAxZlxmLy8zil9cdJhd7KHSQmgsW+eJd72TPplpNcXomMrV7Vx1MDAwNTlT5ZuOfVSNrZvzO7q2mdYxeMlUlsf6gItcclx1MDAwMGON5anJNFx1MDAwZvhcdTAwMGI+xY5kwUFJXHUwMDE4LVx1MDAxY5xcdTAwMDJcdTAwMTT0kMa8LVx1MDAwN12E/SFpJUN8xqLGNWI4kmJcYr5QM1x1MDAxOWqm7lYzs/iHVmA2VjN3uDoziatcdTAwMTDYqngssDBcdTAwMDfxxVxuolhcdTAwMDcx86RGXHUwMDFmT5/R8Vx1MDAwNVNKcGZcdTAwMTdx0qHJeGUmR+jJlcqo11x1MDAxMO3lxsP1xWUgLyvf+VqjU23RKYGH8VxyhyOkhWUyztI9XCIxXHUwMDA2Z1x1MDAwZlx1MDAwZlx1MDAwYuhcZspcXFxcXHUwMDA2XHUwMDE2qVxmXHUwMDE0koiAQ6hcdTAwMTV19vH5WHxMsXdcdTAwMTGOaryBeaFcdTAwMTFcdTAwMTJcdTAwMWGhMVx1MDAwM/BcdTAwMTBRIVx1MDAwNtPu8o3MXGYvXHUwMDAzpEmo0OpF7Fx1MDAwNnnA47xy1jW7ne7Opm6XV+VNc++yv/VxgMdKo1/pwMPw9jY2PCxqXHUwMDA0k41WOmh32lx1MDAwZi0wyl5j4GVBXHUwMDBm0Fx1MDAxNIwohVxy9CZcdTAwMTZnf0fkMeNyisFcdTAwMWX1g5PS5uVl6+vqyXJrpaGvXHUwMDBl1q9cdTAwMWWnxlx1MDAxZdpKw1x1MDAwMFlcdTAwMTBcZsol1VxmXHUwMDA2VSgnmoCrXHUwMDAzykanW2dcIlx1MDAwN1x1MDAwN6nkwFx1MDAwNaJUSOtwcIgvLDFKXHUwMDEyjVUoXG5cdTAwMTkhXHUwMDE3msataa7mx1x1MDAxZUpcdTAwMDOUdLo9OVx1MDAwM0yMQFwiJPpcIu3zOZBH5jnFn5LjiH5y6JHvb+anq7j0XHUwMDE5mjFOpLEqVqlcdTAwMWQpXHUwMDA1an2hsVx1MDAxMVxi9tdcdTAwMTLN09yRXHUwMDE4jGXgslx1MDAxOMVcdTAwMDV2RbrKzlxmMlxygJuOgVx1MDAwZnjun4VU4Fx1MDAxZEKv13PrXHUwMDA0zuHkU+PMV8lsnm2hXHSPhlxcXHUwMDE0XHUwMDA3SZ4rnrlcZvu338+/XHUwMDBl926H7etTTfnQfqdvhEiK1TdZXCKAP6X06S9S22Qlmy5cdTAwMWbq9YfHnSprit1cdTAwMWbVcGWTXHUwMDFkL9PYLsSSTSDkSipsTUeKXHUwMDAwPY7qeFx1MDAxZiNcdTAwMTlcdTAwMDZPllG4NyuVsVKzNFx1MDAxOSX1hcCglFx1MDAxMPBcdTAwMTZcIuWH7KZzXHUwMDFm96n8Q2FxriRcdTAwMTNGg9PAk/X8oL/BwiEyZlx1MDAxY4+fdahozeAhWsO1XHUwMDEySlx1MDAxOMFcdTAwMWS47bPUXHUwMDBmvT1Mu56lmY5Jqlx1MDAxNTxlh/K1maEgITmInVx1MDAxMK9cdTAwMDHIQK/PxfTSXHUwMDBmbkPvv//bK5W8Q/xr0P/Z9mFfb4bhwPs/3rBcdTAwMWb+bFc6rW5cdTAwMGZcdTAwMWVcbizJ+zP0a17tsdH98rNdXHUwMDBlQYv1vH476HZcdTAwMWYyQspvW270XGZQmnTw0ov3kmv33Ev3slZejFx1MDAwYpjPmZVcdTAwMGL3JKXIm0mxXHUwMDAwXHUwMDFkoFx1MDAxZk0m1rlCzlx1MDAxOSFcdTAwMTinPKK6S6lcdTAwMTIt4Vx1MDAxZKBsR4y38WGpMVx1MDAwZlx1MDAxMCeaWWZ5lOLi8pNUJ729ZmlcdTAwMTbgXHUwMDAwUktcdTAwMTgxaVx1MDAwMjvczezMXHUwMDE37DBcdTAwMGUkeFx1MDAxMaNtnsZ5XHUwMDAxPezrQLLMc4o/pfRcdTAwMTF9XHUwMDBiSDZcdTAwMDPkIZwxquCBXHUwMDEyJFx1MDAxZkRklsI80lx1MDAwN1NjVET4rjCcUzxGy2dcdTAwMDKN3TByMjBirTXgTFukpLMkXVLFfC7wRjG7ruKkvFx1MDAxZlx0pV2Itf7g8M7aQy5Pm7dk9/J7yUFM40BpRFlfUa2VXHUwMDA058uaXHQ+LzhpPtM45Vx1MDAwNOv3XFxcdTAwMTPuOWG+Qlx1MDAxN9tQJFxuZdZcdTAwMTHGp0z68JzhdFxiy1x1MDAxOLMxyLDQrVx03dqaXHUwMDFltFEpOdGCO+tcdTAwMDdUXHUwMDBlo1x1MDAxN1xiKJxmXbRcdTAwMTLF+lx1MDAxMWljxEQvY8dcdTAwMWFjl2ZcYndcdTAwMWXUQq/f7VxmvEZcdTAwMWJEXHRW0I9cdTAwMTLkSPvU6cEvK80hqlx1MDAwM1x1MDAwZtBM2Ltccqvj9yGL79Mlyp3OdVx1MDAwYkt3Ot1cdTAwMDE8i7+iXHUwMDBieG24brfXgTf34Ytb4ShcdTAwMWHOvEGjXHUwMDE19vE98Ki9xqV3h4hp2Kx61eg5IYSqRu/9XHUwMDE3fklcdTAwMTXA2og92MOve/BajfZwXHUwMDEwjr6jXHUwMDFjendcckBcXHjT1c6IQLjSXHUwMDAz2HXVKf/LjS2FzyzAX1x1MDAxMDZcdTAwMWOjy2PzSt+Xq+v/z50piDmstX+10z5jXHUwMDBml/L0bumh/70jzf5KWkFntdlyg5MrkJmCW7SbXHUwMDEzxPEggPD1XG5L9HEwM1dp5lxujdQ0XHUwMDAwnzCyXGanSjicaaV9ZVxmt5JcdTAwMWFQ0vSz1Oe/vZZuT4uAc8YuM0OEO1x1MDAwN5LTKmglbL7hXHUwMDA1JmCfi3aaw1x1MDAxNX7ROn5on9iDNT28aDWvK4/v3dI3XHUwMDA3S3LudWtf7fLKWvv6vCRcZtnbelxcZ0tkMN11U/g75WIoXCJcdTAwMDCzz2BcdTAwMWRztIl7V6aBe9xq3yB3mlx1MDAxMDidcpJcdTAwMDFcdTAwMDdDdliYiFx1MDAwNdJcdTAwMDZcdTAwMWKRU3pEXG7fYlxyP8mYOrpcYshlKY1cdTAwMTlcdTAwMDJyXGanvmrjLE9PV2w96Vx1MDAwN6klRpNZ8f6xXHUwMDE0ms5cdTAwMDftllx1MDAwNvWw/SE4rZ4xxSnijYlcdTAwMWIvJlx1MDAxOJavXHUwMDFhn2nV08h0XGLeXHUwMDE2+KWCTsx0XHUwMDEwOkrbcCk4ZYo75jshlFx1MDAxMEZcdGIlXHUwMDE2srmYXHUwMDAyKDh1XHUwMDFjqUjRM0a62LFMLKQ6IdU300KB7GBcdTAwMTgyXHUwMDFlcVwiuZNmPbtcdTAwMWNcdTAwMGJ2XHUwMDBmhfJFw+M/Rate5jnFn1L6iI6vlzLG79GrR8G+XHUwMDEybpCnUDFKXHUwMDFk+UnhI8UnuMxcdTAwMDSb4bh+XHUwMDA1ts98XZe4X42lfaBTOFx1MDAwN9POafp2ma+QXHUwMDAxXHUwMDFicFxmTuNkRn/I7r18bJirWFx1MDAwNXI0w7IsQaJmQpOVZiXwjpgyXHUwMDAy/iegW6kjY8mJryRlv6jvwcdyXHUwMDAwJKt8ZsDFXCLERq7YQrNmaNb+/JpcdTAwMTV2XHUwMDE0XHUwMDAwXHUwMDExc6U1efbodk0oXHUwMDE2Jdui85ovXHUwMDE4wPI6irWUfU6jl1NH9C006yyVXHUwMDE1SFx1MDAxMKg0R/CDrGApTVx1MDAxNbVcdTAwMTkzpoXAXHUwMDExSFhi8K6alVx1MDAxMuya4Fxu2Z9cdTAwMDGca1clXGLsh6JcdTAwMTRcdTAwMTm0mLBGmplu+I1Ua+l6b6dcdTAwMTO2r1cvXHUwMDFiq+s73/bo8jfj6FGsNoJWp12dUK6KXHUwMDE4XHUwMDFmhNFcdTAwMTCJQ0MmVCunSIBvuKHSXHUwMDEwnCaeUq2UYY9cdTAwMTFcdTAwMGXCwzSCXHUwMDA1gXKgVriKYL9nlS1GkmZp1sHcmlx1MDAxNavCcM6ss2KE5WRwNdw+eCVF9i4+XHUwMDE3waru19bs+dnVzmZvN1xitlfvV/ZcdTAwMGVuP0BEXGJ8dUnjXHUwMDA01nNFhNyrTMmmI1wipITxLdGCXHUwMDFhwriNydWI9FxcW59cdTAwMTFwOblRkjNlXHUwMDFkoymoz+FtUlPJYWe5g+bps7BcdTAwMTa8gyzORPNEwEQkRjrHuFx1MDAxOVWmpyhcZvhQOKyicE9x5lx1MDAxMzw+kL/b6tvVn+1hXHUwMDFmbvgjhIaesXApToB21Zu492KiQ/lqJ9eJUVT6XHUwMDAw7HD6uUSWkWRlfIlJ6lx1MDAwYkIkbFx1MDAxZFx1MDAwM3hEtcPUSlx0xlx1MDAxOE6MXHUwMDAwoMVEfPDsuO6S+8pQg8PhuVx1MDAwMZ9xYWsz5Pt2fi9GXHUwMDAxxuVKOYklqc7mOFx1MDAxN0YhkiRvmC06KF9vyVx1MDAxZt+avfXdhnrcXG5PyONLbOL718aXsoVcdTAwMDB/Usd/fL3UXHUwMDEyXHUwMDBi85DylVPC44DjXCKkXHUwMDEy1oKXROCRxiM1r1ZcdTAwMWI/tUdUXHUwMDAyXHUwMDE3LqJcblx1MDAwMGfI4sQry+dlsnojXHUwMDBmyH2+p0FZXHUwMDAycJRcdTAwMDGXVVuDKZqJ+V8lhl3nOKN5NHyGOVx1MDAxMm9cdTAwMTRcdTAwMWMoLIe3XHUwMDA2jp5cdTAwMTJEOYpYXHUwMDE32bcsPXw3PcyS4IZzXHUwMDEzn51cdTAwMWNcdTAwMWb+nqVuXHUwMDExO2vLXjT1ND9qhKlWMldcdTAwMDPz6n1cdTAwMTc2dFREk1F09LY461x1MDAxOXyTwlnu+y+IeemUsyPR3TTnV2f0cnuj1r4++Z6W6ayJMlx1MDAwMvsyXHUwMDE5ZimIIHFzXHUwMDFjPT5cdTAwMGJiLY1cdTAwMTRUcCznTUs16lx1MDAwNaI0kTqquFHaQYxCrfGRe1x1MDAwNVxmY8S+pFx1MDAxNrwoXHUwMDE5Uv44LdrKpvG2RFx1MDAxMdiv2JTPmPSTTOJMSlx1MDAxOZOCcPmpyFx1MDAxMWZcdTAwMWZomiNI+Tea67SAW5tDJcJcdHLTSkJcdTAwMDTsXHUwMDBl+LHplDZcdTAwMTfMZ1xunJpRZTx1SVx1MDAxMVx1MDAwMDWskVx1MDAxM0pyJKWmasEl4paiMqHTXHUwMDFiS1x1MDAwZc/TSKlcXMZS5lx1MDAwNFx1MDAwMpVcdTAwMDL0/DLf5FM085eyj2RcdTAwMTGfT1x1MDAxZuZnL8hwyKzQSCFg0FwiTX/BlFx1MDAxYSku6ZNLPpRwaZCmnCvDqUVcdTAwMTZcYkzSpVxcXHUwMDA24dvYjzHxPEvChUg8XHUwMDE3uLSk4CrDxVxyXHUwMDAx6Fx1MDAxN1x1MDAxYmlcdTAwMWXtXHUwMDE0XHUwMDBlfSSYmFx1MDAwMO1OOdjx1IOZ0U/KXHUwMDA3XHUwMDFjXHUwMDEzi8YknMKAOcdcblxi4+DUffGqKYGzZXHUpTI4jzS1bCvwIFx1MDAxOGzBhUeQZpso3P1KYLjo3lx1MDAwZsPac0byl9pKtEqNbmhizc9cblVcXCxcdTAwMTNyNFrD7JfLXHUwMDExqvFTdNnp6PY3+ofdsNJcYpopTVx1MDAwNTeTejHHMOvd3tn9Rjg4qTeax0dtwztcdTAwMDeyOo3XXG6IXHUwMDEzhENcYvQ5se0yWWpcdTAwMDY4yZeWg8tcdTAwMDOSiYOgUmZZXG7pXHUwMDFiovFcdTAwMTghI7SrXpQuOrgzzbCYoWBcdTAwMTR9RDiATqdVZY+jRtpcdTAwMDFcdTAwMDJKrfDUwOzIMuW1lrzT391cdTAwMWSXXHJsM1x1MDAxOTWB3FxmgyY8Y69SXHUwMDBm4eM9L7jEnuVBvdH3+oOw62PjR6NdXHT6IXaHVDtRL0lcdTAwMWSbV1x1MDAwNlx1MDAxZK/W8UC3XHUwMDBlOq3GY4DtJt5d8ODhVIYx+Vx1MDAxNX7JXz/b8Nm76Lu7vU45KDdcdTAwMWa8u15jXHUwMDEweoH3PWiVq1x1MDAwMSirRq1cdTAwMDbffNnrtLx62IvaSu7qjUr911x1MDAwN/GrQ+xgwc6TX80sYFx1MDAxOXx4W3lcdTAwMTitp1x1MDAxY1xmKvW/vNtG4PU7rVx1MDAxMJZcdTAwMTZcdTAwMGVDr1x1MDAwNbdUXHUwMDBlsWOlPfDKvUa1XHUwMDE24mdwVaNlXCJraDD4a9z80lx1MDAxYuIrIXauePXOsFx1MDAwNzdbXHUwMDBl+o1Kf3RLcG9I6TW6K/DE+41q9MR+ddVEXHUwMDBiQJNcdTAwMWV99me7z//55cufP+Dn71/+3N6GP1ZW4I/19b+X6Jd/+H9e9TvtL/et5t9/touIJbxaw9Li9Hya01PQbOBcXPKY50dcdTAwMTmCXHUwMDEzXHUwMDFhjYZcdTAwMTBGxFx1MDAwM7CjSYbMXHUwMDA3XHUwMDEwXGLGXHUwMDFjMJhcdTAwMDEw5qC4XUwyLNL4yflDOYJSSXE2qCuUo3KmhFx1MDAwYilcdTAwMDHWiFx1MDAxN5VWf1wihu1cdTAwMWNRuu2vXHUwMDA1u2FPn1x1MDAxMHLduP46rIXnx/tpUXKXelx1MDAxMYbVXFyCXHUwMDE4hlxy88QmRakkQFAkjpikXHUwMDAym1x1MDAxOKSjpFx1MDAwNJw8X3LOf7uqxNGt+GmQY7WDbvLbSo+aVnqy085cdTAwMWFcdTAwMGIokVx1MDAxZswhPcykZGpMT6+MpupN51x1MDAxOVx1MDAwNlx1MDAxYsNvm1dbX883ri3bLDW3xfrW0bQlXuXmj87K7dlm7bJy1t2rq8Zu945cdTAwMTfQTPhaXHUwMDEzPb6Z5sr55c7d/tHW3bevV/t7vY1lXcB1XHUwMDFmNlx1MDAxZtqXp3uV7Y3+9pY4Or+r9Lf6Rekmgv0ts/Cr5Ogm925P4c5SYqzPIyZcdTAwMGYhWXxcdTAwMGXAqFxiVT6rlzT1XHUwMDE1dnHyXy2QjjDzZyl1e1x1MDAwZq2kp3doqVx1MDAwMLthKXNcdTAwMTbvs3R25omf3jKlXHUwMDAwe1x1MDAxNe7QgkEzSs/VXHUwMDAyudkpj0ZcdTAwMTlWh8149vT98rDPmPlJn1xuXHUwMDE24Dnuv1x1MDAxOPSer4dz00eEXHUwMDBiXHUwMDFmQIJShFx1MDAxMquFnmiJXHUwMDFjVZfjIFOkPaHEUcJKuG8sqFx1MDAwNuSYVsw6Siu4QO9cdTAwMDBUh7bWgG2MUc4u5NxLyrmdRc6NXHUwMDA2nCipXHUwMDEzpDOVXHLSwVx1MDAwZpNG8Ffgg2ZcdTAwMDRcXLT3b9NJvLtEfcI1UzhuXHUwMDE3PEhsQ3vu86XMU/0qXHUwMDE3xGA4yFx1MDAxZVx1MDAwN/nSVoKZXHUwMDFjXy6FXHUwMDBmXG5LIOUrMC9Rc2Y5po4sINOIzyvd4ChxVNb4h2U24SR2XHRcdTAwMWUjJoZcYqFcdTAwMTRUXHUwMDAzNbFC7NHrXHUwMDEy2c5cZoFnrVx1MDAxNM7DSD2XXHUwMDE580fd7euwXHUwMDFlPOjztd1weVdcdTAwMWVfr1xmT1x1MDAxZjLWTFxiKD3DXGaHjTZcXNFEY1Fs1YxcdHB5JddGZnZ1JlctrCFcdTAwMDarUrA01VCbOFvwxUhGY+CxYFx1MDAwM5mxXHUwMDBl9uBPlz1KyGO+XHUwMDAwTZU9ypWmZ6+fg76LzVx1MDAxZe3IpYNvarfaPGLDezHsqJWbg6ngtlx1MDAxMVx1MDAwMlx1MDAxOVx1MDAwMSV4kkQlhlOPrDK3sHx4RYE3qWyMXG4wXHUwMDE2UjO+ZFx1MDAxYVx1MDAxZVx1MDAxMth2rHj8zFx1MDAwMzHfwVx1MDAwZS9Nb4ctmGBL3N4+pXmhMiFwXHUwMDFj3SvgbUVBccyDt5cxxu81O0H1XHUwMDBiglOMnIeXWEf4K/j+gbNcdTAwMTfT33ox4Ds/WJFfu8WQKJ5oJUdcdTAwMTWQk5XNXHUwMDFjs8RcZrxqkGRqpattXlwiXHUwMDBmJ0NaXCLs2zTK5VZT7uOwUc5cdHxcdTAwMGZcdTAwMTGfpG3+PaT+6yxpY1CrhrvTxpJlij2ocyFcdTAwMTQhhUv9XHUwMDFjI2VfXHUwMDBme8NT8o1AQlxiRLZcdTAwMTTcg+c+nn2iX+N6Kdn4UMh7VMXEuUDu3IhAl7I09lx1MDAwNuea2WhcdTAwMDFw7DRXMn6lPFx1MDAxNGpcdTAwMDWAW8tcdTAwMTlcdTAwMTaGJVx1MDAxMFx1MDAxNMAnpnFqXHUwMDFjw7pqXHQ/81x1MDAwMu/8weBJ4E017Fx1MDAwM8VIosBwoXEwIU+5QmxcdTAwMWRcdTAwMTGCXHUwMDE5QD+c04kpXHUwMDFk8EXvXHUwMDBlrdOnJ1x1MDAwZS8nv3DytVx1MDAxY6PE7rtcdTAwMTdSXHUwMDFk11x1MDAxZVx1MDAxZXeb7ctacCr261ORXHUwMDFhg4+H84qRMFx1MDAxZX1cdTAwMWE2kYCiXHUwMDE0TFx1MDAxMoHzXCJcdTAwMTg+0Xi/2W+TxOAtVoE940grb5gj/1x1MDAwNOiWcthhwUbF+/ST9EC+h0lanqH7XHUwMDA2zrm27rCvylxm+3JiLMpa4WRYTCpcdTAwMWLPYM43i+J31Vx1MDAwN5ZalFx1MDAwM+Sq7bQjlFx1MDAwN1x1MDAwMFx1MDAwZv7WR8m4bFS8VlCpXHUwMDAzevPwiHvjypBup9vvN6JqknBUlNLthaVKL8RbzmjsoT6yXGLjiCRcdTAwMDRgWn2IXHUwMDExhG//SIqByXR1rddcZirN5bvqyo05uLw5elxc6U2lkSRcdTAwMTL0WsItoZg6SrZcdJVcdTAwMTjocfCTkYlcdTAwMDf0kXREqMFm+lJSo60xSFx1MDAxMrPwhGdSQKvTKyAhMVx1MDAxOKHcee90LclTJSUjRIHielx1MDAwNUistXhcdTAwMTkk/q2BfstYJVx1MDAxOFx1MDAwNM1OzVx1MDAxYmWhWoFcdTAwMTfJXHQu7eN6wjPcezEyfrJUoWyvqbqCPzxuXFzbevdk92zqKjJLja9cdGahXHUwMDE416mS6ZK0wlx1MDAwN7RAXHUwMDE4Q4JcIsvSNdOCMlx1MDAxZttcdTAwMWKQ/90q4+pk0sznhONAVFx1MDAwZWBZiVx1MDAwNfDIlPtv81eRgWOhkEnVXHUwMDE5XHUwMDE5y9ZcdTAwMDfI4Fx1MDAwYuAy1tpeVFx1MDAxMdlcdTAwMWNcdTAwMDUgv/6WXajBXHR4YDNF3XIk6fDo+97148bK7n1cdTAwMTkkYedkdevqbCqWaiuVXHUwMDBmjiDYQWFcXEKkpVx1MDAxZlx1MDAxMb9ZQ1x1MDAxNFJZp4SIXHUwMDBi61x1MDAxM1x075AgiUouXHUwMDAyxzOKzdosISSNc2mpm54k5lqlhzlcdTAwMTmmuS6cZnF0hu1cXFx1MDAwNnOp2mq0+1jtXGZ70WziXHUwMDE4i1x1MDAxNkZfgz6Wgd/Vg8GvmdngOrejXHRcdTAwMTL1zlx1MDAxZL5UXHUwMDBln1xuJKpfWiFcdTAwMTivSt8rpOX+lczrq620XHUwMDE4Y7z/rXO2utfcuKjsi7P1ITtZ26vuTFfrXHUwMDE1TVPGkUNSXHUwMDAzmqNcdTAwMTOIWzHrg34mXHUwMDFhp5uCJU4nn5jQ8Fx1MDAwZcB0XHUwMDAwveF/I1x1MDAxY0UhXGapVlx1MDAxOI6ztlx1MDAwNqdTm08yMuM9dMr6XGZFIYozUP9cIp13wlx1MDAxN2WmTtFWXHUwMDEwbGR8hWTU3CplO2hcdTAwMDe16Nu8/4OjcPBcdTAwMDR5e81ggP1cdTAwMThcdTAwMTlcbsJcdTAwMDd/g3KFrXPC2jEl83sqjCnXUYz450OdZ9NSXG5AXHUwMDA0wVx1MDAxNldq5URcZlx1MDAxMLwqnyl02sBygZSn5Vx1MDAxZkRcdTAwMWLDh2Y0XHUwMDBlR3Lt6Oew1FdaI8tcdTAwMWFOv1wifFFcdTAwMTOWKf5cdTAwMWIz5KI1XHUwMDBllOPEXHUwMDE1XHUwMDAzpDqFM8ZcdTAwMTVhXGZcdFx1MDAxMu1r5KKx9vNcdTAwMDNUhGVcdTAwMWVJ/ElcdTAwMWTG8eVSuL+wNFC+t+wl00BcdTAwMDRLXHUwMDA1QI9cdTAwMTJMOzKRzokke9ltgto5P1x1MDAwYoRcdTAwMWN5kiDjmYk/XHUwMDEz6mNpiVx1MDAwNPdNXHUwMDE5wl2psVx1MDAxOXNA01x1MDAxN5whXHR14ie93OKTXtFIy2TWi7KcNX/q/NB5f/D9brPLg7XGzta5WPl2td2RaeuQXHUwMDExqeFcdTAwMTaHrTJwXHUwMDBlkfFcdTAwMWZcdTAwMDQq2Vx1MDAwZcBcdTAwMTXS/UshtFx1MDAwNlx1MDAwZoewdEjWXHUwMDE4XHUwMDFmXHUwMDBiUFx0+MvRRDVcdTAwMTcjtZBgZSy8LkZcdTAwMTOTPsngy2rQr7+1gdieP1QjMVxyxKhxXHUwMDEy/otM7iaGI1hcYn9cdTAwMTF1W26kRtVcdTAwMGUuLrdcdTAwMDQ7V7o2XHUwMDE43K3Dtj3EXHUwMDE5XHUwMDFiU1x1MDAxMObplSmom8B5iZfBzFx1MDAxNalcdGXr21x1MDAxMpNH593m0Vkt6N0sc96eQZJA62A4XHUwMDEyn6KwXHUwMDEzjLPgXvnI9WgoJVhcdTAwMWNcdTAwMWLr5ZtJkrhcdTAwMGa2I1xuiUqszuVcdTAwMGJJypKkvfklSVx1MDAxM0vAnKZcdJzQSNNMpmnwkiVcdTAwMTKhvCjmmXPWIydeXHUwMDE2c9bPzzeDJbpS7Vx1MDAxZp7q87tcdTAwMDd6+XD03THFIFx1MDAxZFJcdTAwMDAj4OM8VjC9XHUwMDA2U6pJkjJM0HFcdTAwMDOOXHUwMDFhVcxcbiXSNVx1MDAwNVTjfE2cS0FcdTAwMDSRmFpOXHUwMDFmc1x1MDAwMVxiyKBLXCJBqMD+sMUpzzrlhzPEXHUwMDEzmJGKXHUwMDBiIZ3z9LJHJWPdMsiBfYWygojGXcxwosdcdTAwMDf0lyN+XHJ+dFx1MDAxZvlcdTAwMWNcdTAwMWG90Kt3+uHPNoblkFx1MDAxNGLMzvCzXX6IhuaOykgxflx1MDAwN1tcdTAwMTdcdTAwMDYtXGbh9WPtVcmSXHUwMDAxXHUwMDAwmL9n0CtcdTAwMTWL0L5j3KHY5Vx1MDAxNlx1MDAxM57YPbji9GDtfmX9unF4VOnQXHUwMDBlXHUwMDE5fp1GlXBrcVJcdFWI+sFrmUhwUFBcdTAwMDOjSlx1MDAwMFx1MDAxOflcdTAwMDax4MVYmUhwbYjGT1x1MDAxYlwi4lx1MDAxND9Pylx1MDAwNCmswdFcdTAwMTJEW6MosZ+FbeI9tMnxXGbaRIN4UONcdTAwMWW8znkmQzDFMIK08fFcclx1MDAwNeFM0j5cbneCWrC/Su3SxSA8PFxc7excdTAwMTeFM3Gu9MtcYlx1MDAxNZ80VXB5XHUwMDFkYIqhXHL40as0h33k3DnDVD7//etOz1x1MDAwM9GFf1xcNochPC+XdCdke5SV+CXdI3KdXFyVRjQzSONnYUX0Q4xUf6fHUozqa6yt9G7apfVg/e54s36wes+2Klx1MDAwZYJcdTAwMTCH6tOYM1x1MDAwMW+bWEokXHUwMDE45vFD/zW/1PjIoqOx8pJK1/xSiqPQwVx1MDAxNVx1MDAxMFx1MDAwMqTNcofm+yw86O+h6WZcdTAwMTg4Y1x1MDAxNVK0UnfpQ3ZcdTAwMGY+YGCm6SuQymHVXHUwMDBipXOhplx1MDAxNZSY78F16NZcdTAwMTNcdTAwMWZcIifruMdihLa3tFx1MDAxNIZnl5vf+Xr3urp2v3Z7u+9w8114hfpcdTAwMWO5mUHkmMJcdTAwMTlsSaFl3PgkosVcdTAwMTBUXHUwMDE4omS6rolx8J5cdTAwMTjWZFx1MDAxYpzf5iQ659q3TGJVtsJmXHUwMDA28llcbpveQYrPZsArioHkmDiOj09cdTAwMTPP7u0jXFxpZePczoV5P4LH6VVeIMf/8Fx1MDAxYZeRXHRcdTAwMWNZUXBcZrZcdTAwMGa3vIh4b8Rq11x1MDAwMvnB4Uxe59LrtJtcdTAwMGZe3IFA/yHyXHUwMDBlwNY28Gh5ZdzRXHUwMDFl2srqsNVcdTAwMWRcdTAwMWLXyHh6bmVBfFxuulEoOM9gqrj4XHUwMDEwyuO9XHUwMDFlTDFcdTAwMWHqdnVLnZ33ZDA8393ZaVxyblx1MDAwZoenM1x1MDAwNFwiNffRI1wiuFx1MDAxYsIoNeFXMaF8wrDjXHUwMDFh/G9cdTAwMWO7nXarmPVhM5HqWWqJXHUwMDFjplx1MDAwZbeKXHUwMDEwXHUwMDFmp+vgXHUwMDE0Lf6JSPzeI+v7Y+5QpNLIlOjSXFwku7ZcZuxcdTAwMTTRRrPCXHT89sqne9XyaktVXHUwMDFh3Cyf7DYvXHUwMDBlT8bNLYkzOlx1MDAxM/nWUtNcZtp7VN+GRHVcdTAwMWKt8pJt7p1cdTAwMTdw3TkyXHUwMDEwudd9XY9TcTlTwXuOQsm/0bxcblx1MDAxMkmwklx1MDAxYpxGTDtcdTAwMDDw1Fx1MDAxMzNrJc6fx2m1OFx1MDAwNUw7dInVvo46xFxit0rEKDJi9SPMt6CsJDeKXHUwMDE5ocWifiRTk5RnKUlcdTAwMDXNr6hyhnt1tt9CXHUwMDAxc4I5l7RwwFx1MDAxM1Fcbs2UrHv6daFcdTAwMDUkQvqcXHUwMDEygefNXHUwMDEyuC1b3KdTR/m5q2WKxzNXS+mP4lqac8GHl1x1MDAxY2DHkEyHgJ9LrCDjXHUwMDE0gjdTey9SvMDyjDRKYlFMclx1MDAxMDvxQevgTClprIpGv6WewmtRXHUwMDA3XHUwMDEx2Fx1MDAxYiU0QVx1MDAwNSjBXHUwMDFiY85pXHUwMDFiXGZcdTAwMGJujFx1MDAxMlx1MDAxNjYq3pKey5YkXGKVXHUwMDAwsFx1MDAxOIumkFxumlxcMc50t1xurmo1XHUwMDE27qj/2OKVfMucZ5iEsTiTxETcQCY23DGyS+Cpg7YhXGZ7JySezzTGpTiwXHUwMDE5nHgrkExAuVx1MDAwMmjWp+Av4lhn8Fx1MDAxZFx1MDAxNV/0NmdcdTAwMWKmylxm8TSiMTzihLPx6Vx1MDAxOKlWXHSrLfJsvSRx8Cnsklx1MDAwNGVcdTAwMDIuXHUwMDFiQHrsUKZFfbaUOsbPXSxbNp673uuZpfwyt1x0s4TzQ8E3XHUwMDA1VIo3zzLo3mYlucNaRiVcdTAwMDTHZFwiWCPGXHUwMDEyRYdgpzR6W2CpwKumhrydnYIlc1x1MDAwMVx1MDAxZb/RXHUwMDFjuzxwQJSzqlx1MDAxNE6G0lx1MDAxY2tPXHKXfJolR1x1MDAxY3ZcdTAwMWG7+KjBkFx1MDAwMvzDJFx1MDAxN42zdVx1MDAxOVx1MDAxMlBcdTAwMWFOlcktLf3Ulsqu7smVzUfd3lTfaXfjx83XQe12KkulOJxIXHJcdTAwMThCI/9cdTAwMTOdnKlAOZbI4ixbLNxWbOwgjadj+tjTgVxmXGbCXG5uYvH5cclcZmBFwCCYXHUwMDFkgG9cdTAwMDBEsVxix2TaquosTlx1MDAxNKVcdTAwMTanxDv7+ijNKZoxnIA+Nq9DzPpcdTAwMDGsVZJcdTAwMWNKKFx1MDAxY/vBJeVcdTAwMWE0XHUwMDFmPLDnPl7KPtWvcsG0gLyF1ZrB1Vx1MDAwMHedgVx0p9iOXHUwMDAz7oSjUP5cdTAwMTU4SmmKonReo9VcXF3eae1fXHUwMDA0pcrG4/5yf4NcdTAwMWVcdTAwMDabV+5cdTAwMTXD7iqwKspQsFqSqVx1MDAxN7NDKdhyuFx1MDAxNlgnhk1zPL7CXHUwMDExXHUwMDBiK7ecaHCzLIfD8Vx1MDAxZktcdTAwMTW1ebrZOzs8uGlcdTAwMWMvd2pLreVL+3DvaDVcdTAwMGabzUa3P5E10MhQXGKPTzIrXHUwMDAwMU3mNqnEuT5cdTAwMDb7QC02gtI0gaHh2EtGXHK48thsLlx1MDAxY1bKfpKZze9hlWrTJlx0MoeVXHUwMDAwXHUwMDA2k5JL4bJVPP3bsamSWoOaLZKj4blZJZpcdTAwMWOGpWV7tMfYvahcdTAwMGXPttc318W0YfcrdSBaa2tn9aH9cb/ZXHUwMDFhXm/z7yr5LS9cbuefXHUwMDBmqo3b+jEnJycrJbojxOlmMCwonFx1MDAwZlpJUFlQ8bb76aXkPF3BoFx1MDAxNfUpw75cdTAwMDGNU14nRJxcdTAwMTJcdTAwMWbsJzL/gPRcbsVcdTAwMWNcdTAwMWOlzKeWgnVcIjhcdTAwMGZVcNcsy09TdfRcdTAwMGUyXp+hXlx1MDAwMVx1MDAxYy5cdTAwMDF75Fx1MDAxY8HOic2SZoNZI+xcdTAwMDEqXHUwMDFhd3KsgZxv9MfhfqxcXP395n08YyYna1x0XHUwMDEyd11Mgj9fg+U6k9L4OIFcdTAwMDV8cYF9Xsmwp0TxXHUwMDA2OVx1MDAwNuNcdTAwMGKAx+h0XHUwMDAxXHUwMDEynGKfcqGpgEuAM69cXF1GhPpcdTAwMDBcdTAwMTdcdTAwMDFAM1RcdTAwMDbks7RfvINAN6ZcdTAwMTdo5H3lTkZHmc1cdTAwMGbDMHAghC0whf+caV7aXHUwMDE2XHUwMDAx2SqTw1x1MDAxZDokq48n21xcrndnXHUwMDFhc/VBXHUwMDFj1OyjXsDHSykhXHUwMDE5Xy/1hN7enVx1MDAwNK9HXGKDXHUwMDBlNFx1MDAwN1x1MDAxZIGMizyemXqKXGIqarHCXHUwMDA3UX+MbzHP21x1MDAwMo9cdTAwMTGeXHUwMDA2XHUwMDBlXHUwMDAwXHUwMDA1hEB1koNcdTAwMTlcdTAwMDNdUlx1MDAxYlx1MDAxZVFtXHUwMDEyXGby581Ln8qfzFfWXHR/UmDBJNxcdTAwMDD2uIO/S7RrxVx1MDAxNvQmyFx1MDAxNFx1MDAwNyVcdTAwMTnjXHUwMDEyyfcvXHUwMDE5eM3gPaNfLuB5TfbWXHUwMDEzXHL+NSAqgE1cdTAwMTZ87JxcdTAwMTV/au/SrVx1MDAxOKZAneB++4A8pVx1MDAxMFx1MDAwNCfgTZKQUMxymyj6gGNcdTAwMTOZdVx1MDAxNKSRyItcdTAwMDfoXHUwMDE5XHKwgv1Y4M5ZzNTVXGa4k+BUP8acrEMss2pERuF/pVxu71x1MDAxMVx1MDAwNKhcdTAwMGKyPFfnzW57RJNcdTAwMTl64T8+XHUwMDAy/nxcdTAwMDb9TeJP9+1cdTAwMTdcdTAwMDNE+2uPX49cdTAwMGZcdTAwMDZL5aO7h9vmsdhvXHUwMDBmVq6nrjRcdTAwMDVcdTAwMDNcdTAwMDNmhoJoS4ohtlx0wWbc+piBUyDWXHUwMDEyZy+l5Npcblxm2WpqXHUwMDA0OJzaMkc1vFx1MDAwNCtMiGCcgtbGtviFlGdJ+bVbymcoM+VcdTAwMWHUMDLtO2TfZrqc1CCEYNK8IUq9Ylc737/y4PZcdTAwMDGM/sp+b7u3vGbfINCTe93gR3W3Qnq3ez9Ww83uYJWor7ussFx1MDAwMFx1MDAxMjxjPov7nSP27qc3hSk3ivlcbqBcIlx1MDAwMFx1MDAxZUnM5Hz4XHUwMDEyYyDQXHUwMDE4aLdaXHUwMDAzZE6zxUhcdTAwMDVgXG5Hx/JfVDCLXHUwMDAw0kxcIt6cwZAzROJWOIU5h5E0XCJn4JxcdTAwMTRe/smZMDbGe/JcdTAwMDJL/j1olavBR7Dhz1x1MDAxOM5JXHUwMDFiPnnjxVjvjbUzeXyxXFy6l1eaXHUwMDFmbC8/XHUwMDFjXHUwMDBmNlx1MDAxY2GkLOtNjC9B13OGnlx1MDAwYpGTI6tcZvONNVx1MDAxMlxcOWy/p45YksbBK0RcdTAwMTEpXCI+XHUwMDFh13xcdTAwMTC5XHUwMDEw5kxhbs1tr8EgICOncnJcdTAwMDTG6uhTpXTgJDOu7Utk/IVcdTAwMDZbmO63053u2Xld7NhG72zzpHR0Oq1hrVxmW+ub3ZWrjc79xrrSa99+7Fx1MDAxZe9cdTAwMTRkWCWzms406DZHXCLdq5zGsFJsuYItwfBcdTAwMTm20k1cYqPSz1x0o9A+OMhGK8ZcYsY3nES9XHUwMDBiYcxcdTAwMTLG9vSWXHUwMDE1a7JhXHUwMDBmnHnW+Fxc7Vx0qVx1MDAwM8DDldXiXHUwMDE16lc16IC5eHlXXHUwMDFl2kGr8y/vstPz+lx1MDAwM7j6R7Cxz5i3VMN49lx1MDAxYYoxt/luQ17WRnPiI/tcZtb5UezLTEq3xcpcdFx0cm05YHzLXHUwMDFjM2BcdTAwMDXz4dCBnZZKUsJcdTAwMWRdVJRRXHUwMDFmyaIlN4JiMc9iOGSmsHdmqFx1MDAwMERaTFx1MDAxYzboXHUwMDEw9lx1MDAxY5ZcdTAwMWLBLEbE2EdC0YVmV0pcXPpCXHRAfYwyzWliuN/8ny+lj/NzV6RE+0JcdTAwMDJcdTAwMTYlXFxcIln95KT3nFx1MDAwYqZAQmFcdTAwMTmbqdNcdTAwMTc4xFBKQuHMjFx1MDAxOCSYY1pcIuYvjFFcXEpsuSTCTpWywVx1MDAxMjgpXHUwMDAwo0tsYlwiXG5cdTAwMGV0gjKZgFx1MDAxYlx1MDAwMPBcdTAwMWSeXGJcdTAwMDX7pIlKl0bOmLTJ945iq6Y+XHUwMDE4TGEpJZZpONg2teTpV1xiXHUwMDE3kLj9XHUwMDFj41x1MDAwZnyyiVxmqyCxgN2Ap4KN7TlL/NRZmtPO42Nz+O2wXHUwMDFjNlx1MDAxZbaXe6K6cfTQnypLY4xvJKY7oz/5ZHWQXHUwMDAxfGmIXHUwMDA10cI/qXZcdTAwMTgpgq2RIHdcdTAwMDRcdE5pnDJjXHUwMDAxQaewSt3prVx1MDAxMmZcdTAwMWE1XHUwMDE3XHUwMDE5jl+mVdJMMErMa1x1MDAxOKXEXHUwMDA0olx1MDAxNyDQr1x1MDAxMZ1XeFx1MDAxYn1dXHUwMDAx4POViEXct1lcZr7MXHUwMDBmXHUwMDFm5+FLQFx1MDAwNL7GTH80qpOziVBcdTAwMGU1OFx1MDAwNUKD5FJcdTAwMDPbXHUwMDE0Z+f7LbvK+sziwFx1MDAxMfAm0IC66MSU9LFcdTAwMDaMwnVcdTAwMTR2XHUwMDA1Lca8ZIryzSxcdFdcdTAwMDaohHJnP6TDyXxyJ6WCXHUwMDFmIYpvMHn5qMVXbDBJXHUwMDFkvuc+nnmin7vc64HBqWFcdTAwMTGOiVx1MDAwMEVtXHLm4Vx1MDAwMVx1MDAxZlx1MDAxOSHjOMjZw0inbD2Hq1mA3Vx1MDAwNnRcdTAwMDZOhtNcdNhNfWKttlx1MDAxNvN56MGYeZHg1WO4XHUwMDExhrVLaiunld7+4FbJXtOJf1x1MDAwMVxugoMrLLi/XGbuMTbg6Fx1MDAwNVhcdTAwMTBcdTAwMTYhrMLaLFhlrJL56Vx1MDAxMcR/dJpX4T9cdTAwMDRcZlx1MDAwNnbVrtXbX++bR1s329dcdTAwMWI/dInsTp0goIxYn2tcZkxcdTAwMThcboh6XHUwMDAyXHUwMDExSu0rbVx1MDAxNXLWY9SCXHUwMDE4XHUwMDA3SSVHlktcdTAwMTAyjr2PUrtaQj5cdTAwMGIgfFx1MDAwN3q7ntuKzJAgwFiyMchX6DAuOXWnXHUwMDE0p3VcdTAwMTiMNr3AurwwQ7DXbe/LcKVSv/+x1lx1MDAxNe3Ggzi6WJk2QzC0N1x1MDAxNz11snpxQpvnXHUwMDA3m1t3LVPvJb/lRSn941x1MDAxZN09u++d1tqPa92+PTs6KK3cXHUwMDE2cN2HzYf25eleZXujv70ljs7vKv2t/nTXTdmntFx1MDAwMVx1MDAwN5thXG6ijnLvylx1MDAxNP4kZTism2BcdTAwMWSAXHUwMDEwWLw3Ob+UPas+pPQx1lx02oeNXHUwMDA2fqfVh1moj0z10Z9cdTAwMDGEMsplNDbLpSfS3c9PeoJcdTAwMWEuqHhcdTAwMTlcbs2ZdTH7XHUwMDExTjmUy73grlx1MDAxOfZ+ti87vd/jsn+2e2HN/1xiuY1nLPOk21x1MDAxOV+M92v0d3Ipxbig+Wopd9QgIFVwMqmgPOLFUlx1MDAxM0RxXFwgkVx1MDAxM1x1MDAwZVx1MDAwNbFcbmF3StiF8JFjgktcZlx1MDAxY1x0bLp3uKBa+5qAf4uZUGFcdTAwMTaTRnOkfzC99Cskc1FCOan8RTY1Llx1MDAwM0FV9EVcdM1nZN/K989wJN6Ng22IpErj2HpwJqV57uPZ5/k1rpeWjPH1UoChOK64aedcdTAwMDBcdTAwMTLfKk00uJ2YXHUwMDE5XHUwMDAzWPksJc+07Fx1MDAwNlx1MDAxNqlsMKSvqVAxiDB6VVxiqaJuOIDB4O7OPfgwX20nXHUwMDE2XGY7QllE7Fx1MDAwMl9v7MvJXHK4wel8yDfERaKN55evO/GTs8S38GWziGN/KaZETm50Q1x1MDAxMyueXHUwMDEwvFxcUUlcYstoXHSpq+XLzXOXz4HdKUc9qYsmPPXncPa+3Ovv7axcdTAwMWRtrtuzb1x1MDAwN6tX142Ls6vpcDZcdTAwMTe+xGhcdTAwMGVmU43lXHUwMDEzhlx1MDAxN+v4pGWg4znOmefEMeRbc+xiXHUwMDAyzVx1MDAwYjZg0dY9s6m9nd7U4rRlynmab1x1MDAxZc1wZjlcdTAwMDEyeVx1MDAwM6ZcdTAwMTKk+GAv4Vx1MDAwMNnG5SQvXHUwMDAw2keAVWtwv95cdTAwMTFuKVx1MDAwZcBcdTAwMGWrI3b0XHUwMDExUP3A2Zzpb71cdTAwMTh4Pbhv7fCb7ZP79fOV0lH19oys7jnq7l3wmkjuXHUwMDBiZJTSRlx1MDAxMuRuT0i5IT7YVK5hK7XBPE9KxpGdhXLLkLZOSWVcdTAwMWR931b7XHUwMDAwXHUwMDFlmNKgKZDd4bNcZpd8XHUwMDA3ib+bXuJcdTAwMDWG0VxyScNofE1mR+CYlVaRl6HrT5HfyTyR8386dZLfXHUwMDAyXGZPn+qI0jvxXHUwMDFm8lJ4SCdzXHUwMDFkXHUwMDEzhT1cdTAwMTOZXHUwMDBlO3dlz2r36/LOdZeuXFyYzYu9Kt09Pu+VMlx1MDAxNmkogHLQSlx1MDAxNOdvXHUwMDAz9ngpXHUwMDAyJtEkUWlcdTAwMDQ8KVx1MDAxMZvChj9YNsXeXHUwMDFi875a/ia/7j23XCKA8DmbO1x1MDAwNPW54UooJTTl0lx1MDAwNVx0XHUwMDE19S1cdTAwMWNd7Fx1MDAxYaRU00/SmjnxqbcwXHUwMDE3XHUwMDBm05tcdTAwMGJqwYtXXHUwMDE5XHUwMDE5XHUwMDFinlx1MDAwZdH8tlx1MDAxN1xcKUsplYXX9szeXHUwMDFm8TrmopR5XCJcdTAwMGL4eCl1lt/CYuRcdTAwMTe4x5QpTcZGXGKJudGz5saZ5bBQJJZcdTAwMDKtYCfofKc1XHUwMDBm6dV+Vlx1MDAxNXvHXHUwMDBlVm/aK2en693db0aE34lcdTAwMTLlafxurqSvmVx1MDAxNlhhouO9z5GCVVx1MDAxNLxuYjToYTBZ1jHuXTLuXHUwMDAzgLHgXGaqaFx1MDAxOFxcWsFK62uNZNYgh8Koz1x1MDAxMu1+XHUwMDA3XHUwMDA1+ziDgpVcdTAwMWN5aViGgs3uctfSXG5QXHIvaprL17DIzlx1MDAxM4u5vMBcdTAwMDdcdTAwMGZcdTAwMDbeoN7oY99LLYzPOYN3d7zbXHUwMDAwNlx1MDAwNFx0JJ7mlsEuh3/9XHUwMDFhk9rtdcpBufnghVxyeL1cdTAwMDdcdTAwMWbsPnidnlx1MDAxN1Sro4t2g0E9mnTWaYXeytd//WxcdTAwMWbteuXQ64W3jVx1MDAxMGTXa1x1MDAwNe1h0IQrlLxhf/S3wKuGXHUwMDE12Fx1MDAwNHiAXjnow5vgL/3GYFx1MDAxOFxm8Ff4vfAp+J7oKy9cdTAwMDNcdTAwMWPymlH3XHSKWcLxx1x0IaCveCxP/I6Rg/+0XHUwMDA3PnN842+/LOJcdTAwMWZBt3tcdTAwMTh1W/22c3/gTX5Nq5v/uox+sJIhUsWoasKonuXff/v3/1x1MDAwM7fPdVoifQ==<!-- payload-end --></metadata><defs><style class="style-fonts">
      @font-face { font-family: Excalifont; src: url(data:font/woff2;base64,d09GMgABAAAAACkoAA4AAAAASbgAACjRAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGiIblWIcgXYGYACBFBEICvAM0kwLgQYAATYCJAOCCAQgBYMYByAbezkjA8HGAQig+BrJ/vKAO6wY/gL42GgSIpAWDYbdoLe2N4Bo+JSP+KmfSNt/+RxaRkgyOzzN6b+7y13ixIyQhCQEDwkSPKJoCGJSvIUa0JZSxerKupr/jdpY11ll1nb90O73d15zeOI7zD+zd5dSAWOQF5B47WIRjXkshn2vlu5j7weXWsuWFMV4tEWi1BWNfd0eSI8oTuA4fvx4rWkLgpt+M622HF4B/P+os3r7rnNaOmCuPkKy+e3+/opeaqX2gSHjkCG0yUKS4cWBnTkgybpStQJSTH3WMwNDiWsIgqTcGXGlW60xhmZNpL830eUfiimVArSiLBxJuVtRouTXmwHmTRD//62lNtOynCtKQJkKByhcn68xu//w74RgN1OiWXWQsLpcgFUVgsyrUAcl3A2z3Cuhqu7zkVWiVX2Rta5Gub5smiXoBucinK+++hCnuzlzTfOe5RlxxkXLAAgAFAAEDEHkjXHo4kCMBBorAEg0DHCHR0kZQHjZ1doAhLetlfVA+FTa3gSEcAAAOUR9vG69IgEoDAh4oxO2IQH8U5DAax+3/X4TPtbXPHkD0wa7e1pu8DQbywWdfgFo2Pk/y67SzJIsXMKUzEtc1WJqnZJaqhoZ+lfKAzuusyPS9jXHrRS1Zainap0ZwbHpAlAj6ow5eegvakAdadeD0yA5yh6hrTNssnDahLOZmh7dZLSH5J0UADVVHV2504PH8Zhoy+igWmaYqkWyoS1VVaD9t0yx28iGa90vBH+FChBsdmhfbLLQ4/LaU5kGPxDJpuytsOEManWqNFSS/2YKiXduXfJHaampeogPiBwBFQMTCxufgJCYJy9SMnLeFJRU1Hz5CRREQydUmHBRosWIlSQCEc/TE+7NZHzkM5RJnI16Ohs3G2WUeWjHlmMBgAOGkQoegeeFsAkBhNQjjTUiEsbyIMRDJyLCLMQAAEqE8MxRxAaCjLKD69/VHAC8HAJtjIyB03jgZnR9BDCW/83mIJdXi/CAZL6NHKAxQR8ZTlzliXGvHs2TBCSIFoQ/RWotDLDBmj3givOmVIonhxY+VUs7sJPCpltZh6BwhtovVRh9c14hcUAyUwid4jApTExhEgqTUYRSoHyov6AvUzJ/itFRvDCKF0GJYjgJVFcGBBh8wxGQdgSLriIl9BUZGW5LTpp6O5EYRkYLNjpXrSRx65SzMZ/uq0sB+7W1ognQ5hjUBaIL9okSgHTKCWCaeDxDG3AWpRNT0q0NhBThwVBzBRJyDO2SmfpgGmzEdMO6hUs5ndI0h0+lYhqhTWgc4ldnKhi3DAAYrhkZgiJ0aXMAkNi/FeiE1luwK+S+lmN7ChgHUt2j819By4B0HgCwdSP2pidVKv0FAgC2Z9AVxenRxOgXpCh6o6DiJ5hOlHhWyTLk6p7TAKxZrRYgJLGRXapspdPS9NTn/Xo+7rdrXs4Byj1O+jgAplOyMCFvAfMdOZ0zQ7gAEd4aNBuG5dsAlzvn7rrvQ2/pPnXUOvHXWzTNPj8oONlXwkQpg3My2OxYdibHxGUlmCVt7qLytMzoCk/fSFmEbkZaakuhScdW8cJiaL7s9CyzUMxVJnE8mAUSP49gRpghP9Gemu9M1Bqjnw2azzb+2FGXiudan4+IPwEAsJ500OnmSRd59pOKJIkpXy/pT/ykc8gyvLOUkd7CBlp/rOWN2GR4Db8z0d9vfkN9/5vcYx+73zc/Cg89B6YJWW98RKp+cPJp5BdffNJ/sv6Zeb3qLqUWH79SxJ8KM50znXBc8dxD+ptgwaLzHF71Qia/BPLvf4+OJQyGK3oJOjbHKnYe6wNtxeOvAIwoLB4Iy0GWqdVarj0hAawCVMyKVRkvnpNfdaJix78ZG50qbNyV7ONXp4m2DT4ePas2rSa+1oiAn1WllmhaeMo7X7QVz1UUh4SQ8OOvFTTpeWjzLVA1q6DH+s2HWiTuTdXm98uipcU7WI8xpWtFnMhMSyhfzNM57rYSMdFzwUOjdnj5NIo+fJ/cZNHCUzn0JSI/rr1eAorZmSin65Rn6jOU62XCtTqdI43RquCQRUzwRRuBYn4dn9HkOiN9Ed9gXHcqGYhRcDdIAJ1ONosX0T6dj537sGrhaHSShRRpq/+ddxvkuV6nTw763CgHIga0yBJGSghXF2NXFVElMRZlVP4v6mfsbTLb11aUucF1+qdlGC4dq4LXbj/WjhJZNtto0Rm/rHdwlw/aa9Hx8+PK7ti+HL66atEs8X0g21aXp+98uH5u6yQ2CdXhnIuEq1/9xIKBdW0CPX8nY0J1JOVukErDS0fjKnRfb8RP4lx3r4N5gG1m8S9aPzx2SeSWSiReMJjzQPI+V0jqyivLvmSE33Rxvh5svVuSw0X/rc0gT29u4l51qSEPMgapRW5Gkx29lh9GH2BKEP4jatHRGCPdA1NeYrdpsSa5bk3sv3hC2ibmHzRJbaXApFEp5z4VfF71kAsns8c/CZ+KQd0ERVXA+UiWVSW4f4348YFR2yzJ4dM/FKFBnMgFIlWSmhmLZZIiAezuAnwEJaZD3QemwnxlbU2TM2RutHRTbsNsBYazTECkHYt8MJoAo1nYQMBGtQLwV931YIg92nrRv+IDgwUDsMZVToWkcFtkZJRIX/xzLc3JMDQRpq8EqohLEsCprUNtLw9eKZWzMGQZMLG92ep1ljFcem+8nRWtouJ1mFbDEGAB9s1p7Tj03AwOc8vw2BlZvKrCUwdhbzCdPEx/XNPOu8Z1WirIgfie9VQobUPFaHokJtRyQXVs31wEgxYRa47M5xXGCZicI2aDcR97XfRqjl+9HaCmIrRcC0U/5b3Ups1mpX/VBGncyLH9R1uyUaj4vMDctBScSNn83e+6jvmAsvhEGu6fqihAHAWyReuKZAH1TkEAshSp3S5zzadpMY2y59EN1V3vA+U3XcTpjxsWflEPbEL7UAGwTagbX4lqJecZzYPW8b4cxWBDOpOQMZj/+UHY5ZPeJC05cohVAFizGLx86YQO+RZKNZJGjaQTPa74Fr/tmNGrf8yXlOsXTvavZB170941P4LBYXBxw0ec8VMYumc1LTWw6zgYEXLMXXwRMwCri3D1PsWhWkEdzCrYYRafaaOov6RUL7dpixeoXBB9OS3KFaNMRhMAbEoRFtJv9PNWSZk6koUVYzMgZGARYQrh7BQDnKtOAZgmdNaDL3ZLmnDNxUlSHQkkRYpeOjBKvVZSbtMS19grly1cy5dksG3TLBYlFVPwEkjKFHosArMVRVjYtbRjORbGCmQZBR+BtE4Er2Qv/3JCZ9pNdonMok/yjo7UYwc3MEhrr9te0eSM2EoL2kgjiUqSERk5ELkFrrxqFmsbGvz25KcGcwEXHDHfUAJLkDj3DW0CHBrAJL49Knl0nO/eMniknJMhEkZ6kR5GfCc/v+8uc5pvKdPRz2B39yn8XPxXfhKf7WHcckM4XW6Pq/DVXVft4nl0NOS4zzVZKJE+3UVaMcEBA6g0ANM50obbYNmxHIyOZQleGPsWXFIsz5M4VClUJYmlcJXBZPggR8tPyAcGDKTDyFD8Emvz88xXuJa0RpHGeVNBCzc6AjOnt/JUb1NtGWxmA4SjCcUiPsPo/67CXMXOXGol1zHQLxSKJeEpkTHSKZQOzNL5zpcXARdfhse3kjoBvpDZm/JRCYyF8XC010xOswfifpUa5woy0+IDZvHTEeXIhmbXq1YFFqN7LLY+dpIEgEpVHgygaVbg6HHJDfbiJoMLIV3aJdswrlwTMucUM6Wm/18kZxR/V0kKio9ghIrT9nsyC6Mp7/uNOXrr+i7SukULIZNFdQnbm6ia8H9Nq7QXF7mQMoPTWtJXJvEZ5nKd3spV+62kEpDzBodBGyJmZH8UOTg3C1M/UqzFdcrp47R+0+0a8yfxS1IOagYbVlUwiAHeiYS7ZK2Oco7iPLc92rqpJR/0KT5NafwxIhtxeEnASjqZesg6DLwpzgO90Who4fWpIhoVgN8NFeRAjNt0N4nJ/Ys64Jk7ahySiratVHw0GdNdxG1v59LzoYvrP36O1YqwiCtXItuGjIFJetFWgC3eiPTY8MPvbJA4kSGVCwWVSNVsA+wNXwZIcxvH3PWodhxD8zzyVzmsmhhMKIox1ZGCeMsIcRnQgx4PEh41QNks1SSx9WSak72pSL1+cqDzwCN4eEeJcANpi4dcIGFGk6h5FLye4EWItdXQreg4/+GHTa3JMn2ytA+qInCv/7q8yBgnsMWncpiAOJEi1ZwdeUKWoD1JgGn/sSbktkpOJ7Ncljn46f1ZTBrVnF9ZXJ12AxLlRNvfJw/KikCMkJzuPcM5LdvtfRcOyjsePXd5wMCAJ6p4GgzgXhMjSK8oZHZEcrU/3duM7p6TW6qVpkkVliGRbbSLp38GSpTMPYM5dcw02zw00v5+uMMiwOQwm4UpwrGiQPv8QNA7SGcjVGjkGThE3jXcOPZjx3j6Ec04ZyRp47vJg4icKc9P/rjYPxmYjp9QRVWkm/CjIndoenpMNjgfObf11U0QiVb9hCGXSJ7HC0ndABODNWGBlfHpl+oUN0g1X+b7L07f4elyq5mMqnIIyi6RlNAGrL/2i6kqjq7mgdHFpiBG11mVIhKHmu8MbgKl9Wz3WV6oz9CEi4mBWzg63BaBo3qPv49WDnAEIKn47dzdpNmeUG8PaeoYXKlaGh7x845bJT5VsSG7kEnq2iuhMAwub66/Wl4uFe9o+CXTNlRxjtByJidReaAl115Rm37isY5NZFQrB3VDGYnbOq/TK2m+f38+xl3a2WC0qlhUKxDGqUWKYWWTLcuYmJA7fJFDnxFMh2QrqZj3mNcLFGHaf7+kwm2pqSFkSz1r6pqWa5xvPCfQk0sHYe+Yjx0ifVaAkBShS8XmYgIATEtaIEeafwm4Ti0faDR3mGygt9q/iMG4ii9DtUpnH30Gi1GQ1CCJslYo0z6fD9VxePRFKpfLloU0vIAFERxyXCKdPA4O26AwKfZjcN+TYlpLdnQs1yRjFDyJU/C/LDUjnCyF2EkaFdGozmExVREU/IqQHBxdmaE2rWpPqlGF/y91bZsrlrVkZ6GyJFi7oI1DEoehn9p4v8e+hv17jw+5wTtlL9AylqDkTCV870Tz4xWLaJR4mpkcq4haREoBMLkXW6vLKNfrIk+Lj6Yh97Ne/iyCwBcJHcwKpcGars2LYx4d8SMJ0klh4Q4KA8asKGg0FATIrlWqif5LJ5r48fDwg8hcPdTzAW/OtZWxSd7Iho1GeQhsUkQFTpfmxViCo9q0r+qTxyyjuoREPyAwAOPPdpJUcZp2WktSZ4i19yT+jZ9wKlUSZRtrJRLElMArK5TbbTofYWfJUqzVEQ0hArCzZ3/by71dKtDD/CHSwVlbNQAd+3Vecx6hWq3UIpVQkAH4sCdDpSHgEs4fAtv7k4pkWOCli/+4XjLJVP4CPXZpHZ4KBBMMRvLksR5yNHt9YS8T/bafzv+eDcYFzsP+z3AiVOqS0rWdMWdr5x2mWYVwyvntZAzixGEdOPfRLh/iMm1RTTLwEKOtx7fG7lw+700FARNJuSRYJ15bALT+AwWrZsWMv4P76pWUu6olBjsYLUFku1ynpyNcX3feIG1wnRQhITRWjaRj/3SsnUkLhhDvJNRLs2PbABW8HyStJTInur8d36boybRWJZLemGSgOiRLmaYZ+uXu5ZY/T08VDPDL5Rsv/fEmMuGsPDVcTyVFxAA6BgNSvYFEZ0t5fAAL/+MV6Iwr103ScJDTDGyGWqV9Es/XuMiiT0e5TXkd7akUG10YDKBjId3n+Nl+6ktDfDSPpxEBvYmgZycBWVUis+eDVTg+l2o1RZ8bvKdYfDyqNjGm+Ogr5XadJtFbfawjSnBKxF8Uv2kDMPViMavsSor/Es/Pq0/ImljwUqHsNPdrYs+LehBxe4W2kjV78LK2qmQKX1NQeXX+ggf4Vz7NZYdOI+Kqk5vSj2QQ4kvN5zG+zlyjWovc9/vcx0ij+joGnqF3s2q77JHNYEsRJEjpScwA4A7qpcQ/AhEj26VsSqgoZf4uwFfI/lMkS9Ff5RMevSuFSh3k4sIC1/pI46kMiUE22tPZa9dXkhq8c1VootGnZ9pQKXMHe+wnIOMVOYx1CpHKdXrI+96ci5SBlx1yEH1/bcRCH+9ynsl7GmF/9pU5YXMzA/oj3f1guNV7/AHBBDAIQHpJQdBWneI/i5oKm/BQqO+i7Jt7RtlFrEg2Kj4MHdstUabnDM+Ik+baogGhn/nc4PQ17F5MO4+F1UTa+OuL5nOi6xXLL0gvoYsRNvC1TH3BdtXzmqsyePXvwWsgHHUQ5hkgFYqKhBenRpkuKIXz5DCWxYNC8v+TDXoaOvDedA2Xm64O/0EVoYhl0hF6N/kkXfQrmrLqEqDEuvD+DwKYCJC+d03CrgSfuxv8OGl4hDFQ031PdqdJqWfO0CA0lKx0ZJm/5jLgIlkauXVnYHLHsjzjL/xdQnZLFTH8A4PEUDfYdBZbZ+f7k/VdJUT12MipllY+jcNE/QV3/nl7b2MKFgpCXKreBq6LE1P8E+g0cSIUA99RMsB6zy8DM07Tl3U0+/6T3DD2TqL+WaOo2HVWM7+2oKsSV/mn9JnNfzJQO0n9WKneg0Ln6rAUdWHv3cp37a95N0vfErTDL7DkbCJ92NCWUaOMKX8Cj22kFSI2/u1vHdcuXw/Djpy0cj9VLyPGgpQJ0y8PHWteZpISGf3x590pa41KJaOoLxaJZTuyLO3FDWfirMuIJmqJZfeLw/SLSV/T11xZuITSC2ZM4F9gLAJkXwopttRN7RNtx5sYG72yWrKW/sfyHjDo/z0jAFhTLTTjtq7Q09IgKxesIeZ4Bh84klENXmMhMlaIa34F7FM8dIiNG7vliV3tuzKiWJe11qgVH30vFiWuXUV1SkLQk2gHOdevD3+Q7JZiP1+2XPvWLJXvZxi1qIs7MqsvK2M20HCA7f1LOQFRxwgKohYkoSFiHJnlo/dSUy+3xXIQNbuZzmrbARVE1Cw0ADqovcXYMObJczzjsV8dxt8v2baj7FLuVFXPCLfEZ+hLC1im7NnSKOcmQl3lD1WjqeTi4ksgcM+xz/iFBxbjthYNw0ILWP5ZrmcYw9H6dPQgOe31j0uU2X5RHbalDRf1ed9rtATAZ7D+hCzQuATO8iFj/tUrLEH+C9oIHdtOvemNC0g/ml7+tmIUJYVpRvC/4tNwqWTkirMLB1YQ1vyTzfk03HYSXjW0cwCsWvbeuOLhY9H2PZuvjhR4Q1xICemkbqMh9JwyuLQ1+kaWNHLyxO9XXlbmzi2NOev37+3HRv3MJnR4Tb6E9dBD2zSEG0XpX6wcsbHLqUlwaxoIhBErriyrljtVhiix+KyBsr4c+YM0tlOg+bJYb/puhxNfanUvjdpeTWltECUo7oibHEiZIOFgXNDUs9iS30ennrKdlB2UPFLt2ZpovZVfNk5u/dM6835nLcE/y2wVgtmEvnWCwr96ounUP8rx/pC1C6YtkmgP+yWJJHs9VMeJB4hQr/3nHgMXHL7V1kb2Ok4hXT0kX3R1kbyDke2ceYDjtlCoAdtPjNJhCCPwHP0n5JR2qnqezfa6HtV/ffbs2WLLOawClUt0v9Bu4o8uWGKZp+yFKGzPAS733YqEUSDQUU/82e6kXBeT1mRCqywD3PVsMuUBpj1bUbGXvs+b5bpZlP2yY/vzLYFW8xt2AdQHzWg+zD4H8LUe3hIMguAy4XoazBy+tFgJkaH9DzW6ZIYTJWSwNlzdjb3AmqWmtp+OV2iCQHbQG5n5ria3eTMwA5MhyYLhrahB1tGc9NXnMVzi8i7kIm2cjKwANlxThRfnFglhEiaHL5sDUR18z5gIubSt1K48lt3rRUMGZlngLDBK6CqGiXlWn7HxdLPFhLqo9KLeEfU/Ci2Hbq5id820I3LiRgF9g17MrkBmJ7zqhUfdmstuQfxijq0jP+ptfDuR7IB/AauhmEXq66dNmVs4tfkjpjyjuLpNisGddBz8QGZ93TTfZ+6XqfDnwhozgw6gm8etNRnLCq8zSAV//fvSmrcuxRVqbBKPAsSNrUJYNFtml2BWWk8iHzhlTwhn+ituHYUPu1rcx45hKKPjbV41yQaTeISLduJlCHgn8Vw+RyN/FZF3vjZLB1S0gbRMm9vmbThT/It98sYvJVfuG70qGMs9FDNtf8/eSqqK0zJtmXg0LSQhu7w/v0mMt4Sfh4xxUB7OxHI2JaiI6efBNgp7OrPaha2IxecSzAR8bmax7j5qsKiIJ+n265zf9x0fvXiwX7hNGb5m7bpv0fiIiR0hyiMzcDbeLjP3+IdKfHVzlW8AUiS2eBwmHR43X/qmOvy2ex7upw5eqkjp9j7d68DdKm0xwF4ujF7RgaEpSIbHrUdx3XuHVnpcL7mau7OnMQ1k+pZOPGF4Jht8B8T5oKMhPNlapm90V9d31jkOxqQpsBbLQzZpZwqMbz//drHf8D6hpawQ5zCkWxhhSzlNTrkp4hIoxpWjRnBCITnfDGkGlmTiRzKQjBGLdD6JUatyJhDUb8DhrD6iS4mUOE1ot+JrG4lNwAzft8XXKDh9aI0/3zWLLi+Iywkm50JueBxh7aK/FDS0EmhEu0wCWSDqaSbBxAFvgsRzEQcvOL/WpYioEHA/mYAQOHuGCEqlEa0i31RW+1EpyBVEzBmuFmQE7mOcsXq0OP5HI1hI7TTG8eRQQqh/6fwkDqBnNR/ZErA9I+T7oUm+8577h2rl0ccYCxFqEbqZjkAWqE/6ZzPBgOHgL10NVAY0cjFsDK9eWnq7lY1qEA3KKfNaA/zAgtXZ7OACxVOD8WlmZbokyEJvvvioIk5bbmyMXs6WDhiVJLyagNIPwBkMKyQthZJw5SE7tojwfg7vjaEMBhOiO2ATK3D8e2ILc6FaSca189hoF4vgBJtVros/7ft11reME8bUGIPPAPazaesN91ZPWHQA3kVajyZB8ZbOBa6BeF5GvuPgkn9Ce/8Jtu4XJGbhH1101bFV/LYFfx98IFdcw5lzstIT39GHZGMBWzmdN4fp4DWd2E87UkkYduCC/nZqFHlhszgJIf5FAQSsGPp9bSCZtZOasOevnOe+hWIWMbfpD4UMysOyt7mXuecChqhqHhGpDwJfOa4/uJbgeqUfY5WuD8RntQO8L9Jj4VmLm9py5Mbw4CiI6JElcsVsl9vAWdlV5EdtCad3Tdf2lETvdALHUmBmjX72gIz/wT7wBTxHoYz7DWkd88rOX4vlcJu5ANc6vJ2+y3qKaIDAkT58fcRWLg61R4NoqHC0mJ7s0++f4ekom9XnBxVye0ZzuWLMbAkyQEGE1d6CRLmjqjA50O2VkENTWb8tnZrFC/lWZLnun50y1CXUNKvqoT37sw4nB3A2xyergndVd/WMPwNVrMJAyETKSxCtTHoIp6vPdOn1YULqicxNmdgmrJFVphj0txVxjiWCbNvrB1f5FTNMihU6flI0D0ipWHziMAyODDDbGA8MLy518hYBMrClxRxiKEaCd+KMU2Hek4AiLINJIvDXcvGeIK35wue/AQQnfX49k+ar3Ht4wsP4d1BNICarqiE4I2qPVihzuYLIkxnahepMrmO2rraEvKdMaUx/jbAC0i7/yXzmuv7UUcVoKVUg3DU+h4KZtpcjZWE118xbTnhPqIuiix5dpUkA5qft32cQ7M+sza4Elvz0CDAHIvwQdvdhTaarLcn2liW78nGt7IaeI/3+I3W7cix4rt/dgFAjk/UkKodCbMLthtHEMKmUxXmGfFJK6iAcgu3nIIuc7dGWafwX51uqO1GViLq8XWivd15gpj3sF7HHgWNv/hjQkm+b0F4spz/OZY+1rGdCkLSqB6X7WiuBAG6DU+R7x/K96UFTqrUh0NhzlQFKIP4xtDbdGpLZ6DM7xuOnzYdbXBpoNnJ6clmPHbSOvDVdWF3WbyCjQ/1wAeRi1WgOzgk9kSwmYRc2Jnq1DYXFpywqemGMaawERwRmXSWUgrJwV4NoBRqXhZ4KzWuRTPclOB4xnm/LfNem8wrwBrRyEbKtmY42kxzQVALOH7PJvAjQenrz9mbKbgoLNTwwoH/gs8H3BBJxww6EP19+jn4FrCEr45Y5WZ4RtbhKbmGtxP9lmcUS+uYlrSFM4Aq1SUvGnMqFGlv6qewVW4f5zGXXPvNmVCdpOkmPH8XbX///siJ1HRWGdBAG7n/gcajtYQT1cNX4Sh+BQ2TTO7wTI4gPvn9pzi5Ls8weUJWm4BZr9AlJK/65dg0E1kJ7F0nk53JqVjBxXRtfhWRCx32CJrfcZ8gYU97bw0iUDrOb6ilSE5MU8plQxjzfovBnC2n8NE3Thu/kXwreIsezdPXT1JVLsm/1W52BnxoU5a0s+J9Q7ozFJ3QKdaGXlzcT3I0hN9bSWZx8Lqj+nsHwNoM9kv1fJHwfwUlUchlWDzJCKl0roBJdGb6ftVyhLbLEaE1Gn5TpkdpQ2CfdVyf2j1Wxg5COc8WsmpM3wUXsgZGvWlH3c2omxw/ys54JqJAPOzxS8YzaDfqvC/JX8lJ48nz+Cloq7h1A/cv22S4pQvdzjT7mlgxTIeMnaE6lA5mFD03A6UZzjjXjaoWARK6w+yYEEQug9LlYhojzD5VTd5exliR+jHosFnssR1w9ikcSxwavIJdc37xkbVJoSG4WfaL7y4kMhv35H1sCFKnEz233Mq8x8kABdVyY9rScfuctZmsa7OMW+zwyTMiqrscrJ8aRGy8ib6z+ffiJOvQcbIre9Uz7Lhk6Wo+2huL5swrBHmbI1dsH32BpsXhi6oLuFMpUgjoOwSNdeEzDrUhh0ovgmNOP3aK1ocClpNQrvJIVhtLgbLHIkCD5MwzPbvxH0NTkYXdemgjd1XxCxnuVHRC7mrMdthMzKnXAJ+uyoqouLi2J/7R8vCUtXoVLy0W4HF3Dvau0vWVJC1i9E3fMrUo5+36/i5uWijP5Wrzz/piJtr0wkjzh9N90K1s47Gva6u3gCGn49eI+324O09zTvTeXM9/biz4UdQyq5wrSlvJDj7WNtrrg2XsWjL1iog0hRyb/Lb2s2JYOdWqiwlqpKQTHjS+cc1ivbq6N8wfPOCIzZ5uKJ+gkoAS9eD4ZfzcZsDtZtoi8xo0GQUopj3nOMvJKjoDbfcTkIiYuDV4ZHhK9OMpBCsupeZUSYQcoWUNGZ560uj48rbfJLdHRzrGqs4w7CqmJXexF6NyM7O1XAJF+U6pXLW2mtGLj3YBH4AmHoLrl38rzMD8651sf6qyhUn4k8wbkAMFRg3UaOJGJ5MNc2ntfFqo3DZcchsA0UeF83LN4fKktr9mt43JlDrZXzlZxjh8UwbS2gMEL9994Skl7+kpZDJd7tWFA2+3dBUUyshmL+V/vAlRPEd6Fz8ELPX9XXfmO0zjjZiBBHgzBwb514OAWo80/pHiNi+ulyzCOjfMVE43tfHofZGb5Xk5O0eamONLOcGmLcqiQJVzrdWKZz0uajlpAcxygvZ7coAv+kc9N/TMP7BX9Um5dbtQ83ENhYNUIZnt9sd11aQH4ayK2JM/pefHT6/OsNNNtuNOntELudxqCCRhcGPJjgHVi8UekXs0kdOE9w5AGyEZaqTmpQOFUrFaZ7w3tcIBeFm/iHjSXT8WTyF8KYfK3AV1csRc8H0XsJGog9Qx+tRNCrNJDO6ndE6Ab7CpRbIGfRXEpw/nFYZvePcjxPf2CHdHGik2f+vnQqoRxQi6U/bnnRhVl5sWM6abF0sA5cDkxJN0yi7E5dbMu6e9R+G58NrkNDgHhSbriZeAYTBIwq6qZxgLVQQdPjhFkxogwNysopWW75byXk7zaE01GiHTzY+mlOn9aBGQ++oN31gzv2wbZzrqh+qMSeyYzDbkACf+Q1oC7OL/az5zvcLV1frUHjep18QkD8RM626fxjXPFLyqbNdJEdRbXqbeRjduqIXlGUIDXlbOMjGELwcefDJEaHx+tB5tam5tvZ/2H4WMn7SWAKiHkLiBa5j++yrJS8aMdEo3jA2XeP01x8tvu0M04Itwvw9dFVYysD1/zWYyI43TYMg4qX5ITPbbOpXWDDWWPEk/kU/KobUjqlRTeCVjdeg4qTZ/lhabpuxn/h/t097KT8CwWRobxM4j98PFIQRxB/xu49stUlukDJMLhYt7BNtwMf5jiDB8Fg96jNAsbPSKn8HRyKrRzG2/38vy+YjZKFK5wsCn77HOXkFjKpaCVS10eGb176nosDXEiXNgCjFbWD0q99k/PXUcMZPFXo2GdgVuSTZlCY5it7IYIa/x/gSIdhWXIk5Bjlk4Hx70ITXt8vOPdT7cWvfr3WOaTnAhT0X08o0U2bx5g66/nK2+cVJJnq9iOLPPFn4meR8ruTJojWTmUcX316RruriAfpLlKGXL7iPH67k9Ab+krG/0Ir9DmoSelHhJ+rAzVPHMdMy60zqydY8d1sA+OX/81zVAyOyLZ1SKdB25TMHyUccmj+ZV8Nxw3u8tLuutof5hu3zAfspIzqVjQS5Y8pNeOSINghTIq2P1dmfoS0fN8QpU4Qa3/5lM8givZSZMF+6v0uFiq/el7Zi64h2dcOnNVXyhwHZrJ8+wFckgGFK4XQIuYBfWLF5/e8uzBezk/e9tm4Y/5tx6mY+uOSHHjSR74Sb1xliXDWrg84lfjHkaFzKwxYnjwBQ2Rkm+apmrWLpqhi4Y2wZiKyvCXM7J78J2MjELPuTZ0tZ85O9HYWnVfhTjNskTMn+l5JahyU0j60cjfoK2ZT0oNQwftLaEJclOc7dspzkyRO6oGOGK3p26ox9Um9qVWmfSrcp9UZk2OBnJnZhFwLaP0gU9i0ksNyLZ2tynSvHrNXM4PdIZbamWGQwjsZ9ldlR9rsHK4Dj2jS1p2S/c2QPhmPK1v1WCu6Q86CeZeWWrO5N8JBvfapKuVMkpR5MoDsSM3frZFygTlP4jyG4ylJAevR8141WPH/B8jJbQA+/fd6yd/yn4fmVqNs8SsSJ/DF8uTu+NaQv+Bo5TN/MNxn2ojoohx3kISMPKe64hRRyJm9A+8q9lDWl8l7v0283FGqf1r09AFZGismNpJfv5wFIp5GdhnNf61rlD00epEIN67XaxWyWO6KpcfVfSDjXgZkcI3ESnyWxzhGROYT7hfK9tCW25ylP2+8pnmjX2yX0V9cMiyz+msMENOGeO/RPwn1Kb2HZGXsslIObWT9C+Ju/z2zs+0LosO/f/Gxc8ExMYCTCxRDla2nAH+e/x4eSRCzk5chP/Og7mQ0a8AzYx/xbkcX7txcHslvcp6LA1OXOwTkBBAsHFILg8Oxzn/wJ1w8gj4z68clyJj0G+xDlWSorhtx4ehBvZs7sqsqTa8gsqaP37FoT7MCoZav6hwYen/6r8/wkobmjz2XAggCboZw2fmr/yKPWJeEMjIozUCAEx1+VkAAOD+jm/29ML/2bg/Fj0AEMAKjl+Opi2ZwoK/9zAXDINtGmWsGQLgT9x+KzhnBGSEulTgGQioshErTKaGwOUTGc9372oJQQjAmBvI3QXAX8jtwBsUQO0l2kGZ/tAR/8pIGonUSkH1Qu1H7E4DZs8yDgC8OymhTYgjFzSYYtpO0VCBNVDVX1hek7aQbwVEefLNNf78GyHMc/Q45p5yBJoCoV0rpjQQ2RyaCkRUxCebhNSLur6gKoSUCqg9IbCpPMqkbQxZ9hCf8DWzW2W1yU8AS4V/a5xjAE/Cy4OAFkQAQIMb47UQts/WwmgOr0X46V+Lo1C2FhVHgRh0FgCrWcqValCrygxN2gVyq1St40GUapV1UFu1ifZLLhXya31oatHssujSrMZLj0SH2grVC9GeOYKv9i1Ig7X5WqSzS3EhlYIvQ69F86Q16xKwVsVrtGMR5XxJETUdhi5YJtaWqmKFWpSaKQjQeJGwplSdtU1h5UQqsRMCKgRBwJ6mOxQA); }</style></defs><rect x="0" y="0" width="1595.896769205729" height="1439.5754699707031" fill="#ffffff"></rect><g stroke-linecap="round" transform="translate(10 353.93054344540514) rotate(0 57.83148193359375 276.64105224609375)"><path d="M28.92 0 C42.5 0.09, 58.41 0.15, 86.75 0 M28.92 0 C47.12 0.2, 66.71 -0.24, 86.75 0 M86.75 0 C105.09 -1.57, 113.96 8.72, 115.66 28.92 M86.75 0 C104.03 0.97, 114.64 10.7, 115.66 28.92 M115.66 28.92 C117.29 183.66, 116.45 337.47, 115.66 524.37 M115.66 28.92 C116.95 161.25, 116.98 292.82, 115.66 524.37 M115.66 524.37 C115.44 543.76, 105.48 553.39, 86.75 553.28 M115.66 524.37 C115.95 543.58, 103.78 554.54, 86.75 553.28 M86.75 553.28 C70.4 554.68, 50.51 552.51, 28.92 553.28 M86.75 553.28 C74.09 553.43, 59.99 552.8, 28.92 553.28 M28.92 553.28 C10.8 551.86, -0.26 545.46, 0 524.37 M28.92 553.28 C10.86 551.43, 0.89 541.38, 0 524.37 M0 524.37 C1.27 331.24, 0.73 137.8, 0 28.92 M0 524.37 C1.37 375.62, 1.3 227.09, 0 28.92 M0 28.92 C-0.99 9.74, 10.34 0.76, 28.92 0 M0 28.92 C0.03 8.48, 10.06 0.89, 28.92 0" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(46.28704833984375 543.5686456589467) rotate(0 27.449974060058594 12.5)"><text x="0" y="17.619999999999997" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="20px" fill="#1e1e1e" text-anchor="start" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">Kafka</text></g><g transform="translate(35.5478515625 687.819927397228) rotate(0 31.3399658203125 37.5)"><text x="0" y="17.619999999999997" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="20px" fill="#1e1e1e" text-anchor="start" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">AWS </text><text x="0" y="42.62" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="20px" fill="#1e1e1e" text-anchor="start" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">Event</text><text x="0" y="67.62" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="20px" fill="#1e1e1e" text-anchor="start" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">Bridge</text></g><g stroke-linecap="round" transform="translate(170.31409708658828 138.45189557756663) rotate(0 596.8376922607422 516.1603240966798)"><path d="M32 0 C420.61 -2.47, 810.64 -2.25, 1161.68 0 M32 0 C345.73 -3.24, 659.58 -3.2, 1161.68 0 M1161.68 0 C1182.72 -1.85, 1194.43 11.91, 1193.68 32 M1161.68 0 C1182.13 0.15, 1195.83 11.5, 1193.68 32 M1193.68 32 C1193.53 329.89, 1194.16 626.29, 1193.68 1000.32 M1193.68 32 C1196.3 312.41, 1196.12 592.6, 1193.68 1000.32 M1193.68 1000.32 C1192.97 1020.57, 1184.8 1032.79, 1161.68 1032.32 M1193.68 1000.32 C1194.78 1023.33, 1182.75 1031.78, 1161.68 1032.32 M1161.68 1032.32 C712.32 1032, 262.15 1032.87, 32 1032.32 M1161.68 1032.32 C746.31 1030.84, 331.79 1031, 32 1032.32 M32 1032.32 C9.03 1033.66, -0.29 1021.23, 0 1000.32 M32 1032.32 C10.36 1030.16, 1.89 1019.8, 0 1000.32 M0 1000.32 C-1.2 640.32, -1.88 281.32, 0 32 M0 1000.32 C-1.92 792.29, -1.82 584.39, 0 32 M0 32 C-0.3 9.17, 10.24 1.38, 32 0 M0 32 C-1.31 9.16, 11.85 -0.45, 32 0" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g stroke-linecap="round" transform="translate(434.1290719168526 668.8714149111789) rotate(0 26.053314208984375 39.307525634765625)"><path d="M15.46 3.2 C19.6 -0.18, 26.16 0.27, 31.31 1.85 C36.46 3.42, 42.85 6.92, 46.37 12.63 C49.89 18.34, 52.08 28.45, 52.43 36.11 C52.78 43.78, 51.27 52.05, 48.47 58.63 C45.68 65.2, 40.27 72.53, 35.66 75.55 C31.04 78.57, 25.63 78.52, 20.79 76.76 C15.94 75, 10.16 70.41, 6.59 64.98 C3.03 59.55, -0.02 51.72, -0.61 44.19 C-1.2 36.67, -0.01 26.77, 3.04 19.82 C6.1 12.87, 14.99 5.26, 17.72 2.47 C20.45 -0.33, 19.45 2.44, 19.41 3.05 M33.69 3.29 C38.55 5.13, 43.85 9.66, 46.95 15.55 C50.06 21.45, 52.18 30.94, 52.34 38.66 C52.49 46.39, 50.79 55.33, 47.87 61.9 C44.95 68.48, 39.97 75.42, 34.82 78.11 C29.67 80.81, 21.99 80.84, 16.97 78.09 C11.95 75.35, 7.42 67.89, 4.71 61.64 C1.99 55.39, 0.81 48.24, 0.67 40.58 C0.53 32.92, 0.99 21.89, 3.87 15.66 C6.75 9.43, 12.95 5.52, 17.95 3.19 C22.96 0.85, 31.26 1.67, 33.91 1.65 C36.56 1.63, 33.77 2.32, 33.85 3.08" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(447.9599231833115 695.8843226179378) rotate(0 12.29998779296875 12.5)"><text x="12.29998779296875" y="17.619999999999997" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="20px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">S3</text></g><g stroke-linecap="round"><g transform="translate(106.9814453125 556.3475232554592) rotate(0 47.792157854352695 -6.939973953085371)"><path d="M0.77 1.1 C16.69 -1.2, 80.52 -12.58, 96.49 -14.95 M-0.29 0.64 C15.47 -1.46, 79.91 -11.35, 96.01 -13.97" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(106.9814453125 556.3475232554592) rotate(0 47.792157854352695 -6.939973953085371)"><path d="M74.13 -1.88 C84.34 -5.08, 88.99 -9.51, 96.01 -13.97 M74.13 -1.88 C81.81 -6.92, 90.15 -10.09, 96.01 -13.97" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(106.9814453125 556.3475232554592) rotate(0 47.792157854352695 -6.939973953085371)"><path d="M71.48 -18.77 C82.54 -15.61, 88.18 -13.66, 96.01 -13.97 M71.48 -18.77 C80.15 -17.68, 89.46 -14.7, 96.01 -13.97" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g></g><mask></mask><g stroke-linecap="round"><g transform="translate(104.233154296875 746.646545679576) rotate(0 45.57340420260326 -0.16659070320820746)"><path d="M-0.73 -1.04 C14.4 -1.14, 76.45 0.2, 91.86 0.15 M1.09 1.03 C16.02 0.51, 76.26 -1.45, 91.29 -1.72" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(104.233154296875 746.646545679576) rotate(0 45.57340420260326 -0.16659070320820746)"><path d="M68.03 7.44 C75.4 5.17, 87.1 1.35, 91.29 -1.72 M68.03 7.44 C73.23 5.24, 78.12 2.62, 91.29 -1.72" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(104.233154296875 746.646545679576) rotate(0 45.57340420260326 -0.16659070320820746)"><path d="M67.58 -9.65 C75.23 -5.19, 87.1 -2.28, 91.29 -1.72 M67.58 -9.65 C72.98 -8.2, 77.98 -7.17, 91.29 -1.72" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g></g><mask></mask><g stroke-linecap="round" transform="translate(1420.0051066080728 496.07599022274894) rotate(0 82.94583129882812 175.35031127929688)"><path d="M32 0 C66.01 0.4, 99.66 0.13, 133.89 0 M32 0 C70.5 -0.05, 110.22 1.07, 133.89 0 M133.89 0 C153.82 -1.59, 165.3 11, 165.89 32 M133.89 0 C153.53 -2.23, 164.65 12.1, 165.89 32 M165.89 32 C163.68 123.01, 165.15 212.13, 165.89 318.7 M165.89 32 C167.06 107.72, 166.93 183.37, 165.89 318.7 M165.89 318.7 C166.49 341.49, 153.37 350.88, 133.89 350.7 M165.89 318.7 C165.88 339.56, 156.78 351.96, 133.89 350.7 M133.89 350.7 C112.68 348.37, 91.92 351.06, 32 350.7 M133.89 350.7 C93.9 351.78, 56.3 349.93, 32 350.7 M32 350.7 C12.17 351.32, -0.55 340.14, 0 318.7 M32 350.7 C8.87 348.87, 2.22 340.82, 0 318.7 M0 318.7 C-0.79 260.24, 0.41 200.13, 0 32 M0 318.7 C-1.77 257.81, -2 196.78, 0 32 M0 32 C0.86 10.88, 11.79 -1.83, 32 0 M0 32 C2.2 8.74, 9.46 1.83, 32 0" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(1429.750986735026 571.4263015020458) rotate(0 73.199951171875 100)"><text x="73.199951171875" y="17.619999999999997" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="20px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">Sagemaker </text><text x="73.199951171875" y="42.62" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="20px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">Model training</text><text x="73.199951171875" y="67.62" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="20px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic"></text><text x="73.199951171875" y="92.62" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="20px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">- Potentially</text><text x="73.199951171875" y="117.62" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="20px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">triggered with</text><text x="73.199951171875" y="142.62" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="20px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">Cronjob or</text><text x="73.199951171875" y="167.62" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="20px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">scheduled that</text><text x="73.199951171875" y="192.62" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="20px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">way.</text></g><g stroke-linecap="round" transform="translate(1249.6714172363281 632.8531610398062) rotate(0 43.285858154296875 42.5)"><path d="M53.49 0.63 C60.56 1.52, 67.91 6.96, 73.31 12.53 C78.71 18.1, 84.28 26.52, 85.9 34.05 C87.53 41.59, 85.97 50.48, 83.07 57.75 C80.17 65.01, 74.75 72.99, 68.49 77.64 C62.24 82.29, 53.33 85.34, 45.55 85.67 C37.78 85.99, 28.63 83.56, 21.86 79.59 C15.08 75.61, 8.6 68.6, 4.9 61.81 C1.21 55.03, -0.99 46.22, -0.3 38.87 C0.39 31.51, 4.16 23.63, 9.04 17.69 C13.92 11.75, 20.68 5.89, 28.99 3.23 C37.29 0.57, 53.38 1.51, 58.89 1.73 C64.4 1.95, 62.42 3.82, 62.03 4.54 M37.87 0.66 C45.41 -0.64, 56.63 0.92, 63.75 4.34 C70.86 7.76, 76.7 14.39, 80.58 21.2 C84.46 28.01, 87.1 37.47, 87.01 45.2 C86.92 52.94, 84.78 61.43, 80.03 67.59 C75.28 73.76, 66.1 79.35, 58.52 82.22 C50.93 85.08, 42.06 86.09, 34.52 84.81 C26.98 83.52, 19.06 79.63, 13.27 74.52 C7.49 69.4, 1.57 61.71, -0.2 54.13 C-1.96 46.55, 0.19 36.7, 2.7 29.01 C5.21 21.32, 9.05 12.66, 14.89 7.98 C20.72 3.31, 33.95 2.05, 37.71 0.95 C41.48 -0.14, 37.45 0.81, 37.47 1.4" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(1270.3595765846567 662.801122839378) rotate(0 22.489974975585938 12.5)"><text x="22.489974975585938" y="17.619999999999997" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="20px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">S3-3</text></g><g transform="translate(320.79695056733624 1250.35070946103) rotate(0 75.08699798583984 39.43648455130341)"><text x="0" y="11.117933724703462" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="12.619675056417098px" fill="#1e1e1e" text-anchor="start" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">- s3://(YYYY)</text><text x="0" y="26.892527545224834" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="12.619675056417098px" fill="#1e1e1e" text-anchor="start" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">         /(MM)</text><text x="0" y="42.667121365746205" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="12.619675056417098px" fill="#1e1e1e" text-anchor="start" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">            /(DD)</text><text x="0" y="58.44171518626757" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="12.619675056417098px" fill="#1e1e1e" text-anchor="start" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">             /(HH)</text><text x="0" y="74.21630900678895" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="12.619675056417098px" fill="#1e1e1e" text-anchor="start" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">              /*.(json/xml)</text></g><g mask="url(#mask-G2Q78gTSGUzV7ew9CUrG9)" stroke-linecap="round"><g transform="translate(491.9697269971166 717.7331776534338) rotate(0 221.9477667679041 67.68142168030224)"><path d="M0.05 -0.67 C73.66 21.56, 368.72 111.62, 442.7 134.2 M-1.38 1.6 C72.48 23.85, 370.7 112.75, 444.79 135.13" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(491.9697269971166 717.7331776534338) rotate(0 221.9477667679041 67.68142168030224)"><path d="M419.83 136.58 C428.41 134.02, 437.29 135.5, 444.79 135.13 M419.83 136.58 C425.28 135.89, 432.04 135.56, 444.79 135.13" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(491.9697269971166 717.7331776534338) rotate(0 221.9477667679041 67.68142168030224)"><path d="M424.74 120.2 C431.53 124.01, 438.5 131.85, 444.79 135.13 M424.74 120.2 C428.89 123.75, 434.38 127.63, 444.79 135.13" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g></g><mask id="mask-G2Q78gTSGUzV7ew9CUrG9"><rect x="0" y="0" fill="#fff" width="1035.8652605329248" height="953.0960210140383"></rect><rect x="686.7415217801574" y="755.4145993337361" fill="#000" width="54.35194396972656" height="60" opacity="1"></rect></mask><g transform="translate(686.7415217801574 755.4145993337361) rotate(0 26.931384620750293 29.551591121661474)"><text x="27.17597198486328" y="14.096" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="16px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">Reads </text><text x="27.17597198486328" y="34.096000000000004" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="16px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">Raw </text><text x="27.17597198486328" y="54.096000000000004" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="16px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">data</text></g><g stroke-linecap="round" transform="translate(690.7599138532368 509.3156840006508) rotate(0 250.2212524414062 311.35881551106775)"><path d="M32 0 C151.83 0.95, 273.75 0.44, 468.44 0 M468.44 0 C491.02 0.35, 498.52 12.37, 500.44 32 M500.44 32 C502.62 203.33, 502.08 373.29, 500.44 590.72 M500.44 590.72 C498.66 612.04, 489.26 623.12, 468.44 622.72 M468.44 622.72 C348.52 624.72, 227.28 623.33, 32 622.72 M32 622.72 C9.78 623.9, -0.68 611.88, 0 590.72 M0 590.72 C-1.51 466.11, -2.07 340.55, 0 32 M0 32 C-1.66 11.86, 10.73 -0.82, 32 0" stroke="#1e1e1e" stroke-width="2.5" fill="none" stroke-dasharray="8 10"></path></g><g transform="translate(730.192571730841 523.1824035644529) rotate(0 36.59197235107422 10)"><text x="0" y="14.096" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="16px" fill="#1e1e1e" text-anchor="start" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">AWS Glue</text></g><g stroke-linecap="round" transform="translate(936.8652605329248 818.2215677897135) rotate(0 60.21604410807288 78.57878621419272)"><path d="M30.11 0 C52.03 -1.86, 77.52 0.86, 90.32 0 M30.11 0 C51.09 -1.24, 71.28 0.16, 90.32 0 M90.32 0 C109.87 1.54, 118.83 8.87, 120.43 30.11 M90.32 0 C108.46 -2.18, 119.42 10.98, 120.43 30.11 M120.43 30.11 C119.25 57.58, 120.66 86.81, 120.43 127.05 M120.43 30.11 C119.8 67.78, 120.38 107.71, 120.43 127.05 M120.43 127.05 C122.19 146.39, 108.62 156.35, 90.32 157.16 M120.43 127.05 C121.93 145.48, 108.84 156.17, 90.32 157.16 M90.32 157.16 C67.28 158.39, 47.72 158.29, 30.11 157.16 M90.32 157.16 C78.07 156.75, 65.93 156.86, 30.11 157.16 M30.11 157.16 C11.45 158.35, -0.4 149.02, 0 127.05 M30.11 157.16 C9.24 155.22, -0.11 147.6, 0 127.05 M0 127.05 C1.83 99.55, 0.33 69.39, 0 30.11 M0 127.05 C-0.33 101.69, 1.21 75.7, 0 30.11 M0 30.11 C1.48 8.4, 9.41 0.28, 30.11 0 M0 30.11 C-1.26 11.06, 9.14 -1.81, 30.11 0" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g stroke-linecap="round" transform="translate(794.8406633649552 675.0994466145831) rotate(0 41.68406168619788 45)"><path d="M20.84 0 C28.97 -1.1, 37.33 0.42, 62.53 0 M62.53 0 C77.82 -0.82, 85.01 7.11, 83.37 20.84 M83.37 20.84 C80.97 34.08, 82.18 46.77, 83.37 69.16 M83.37 69.16 C83.19 84.6, 78.39 89.33, 62.53 90 M62.53 90 C51.78 91.75, 44.68 91.01, 20.84 90 M20.84 90 C7.34 90.45, 0.77 84.74, 0 69.16 M0 69.16 C0.41 58.17, -0.35 44.07, 0 20.84 M0 20.84 C1.14 7.97, 6.24 -0.81, 20.84 0" stroke="#1e1e1e" stroke-width="2.5" fill="none" stroke-dasharray="8 10"></path></g><g transform="translate(808.9727459862115 680.0994466145831) rotate(0 27.551979064941406 40)"><text x="27.551979064941406" y="14.096" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="16px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">Crawler</text><text x="27.551979064941406" y="34.096000000000004" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="16px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">for</text><text x="27.551979064941406" y="54.096000000000004" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="16px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">schema</text><text x="27.551979064941406" y="74.096" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="16px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">reg.</text></g><g stroke-linecap="round"><g transform="translate(1123.5490780784976 653.7670017047584) rotate(0 68.89354841544878 -4.47702932758183)"><path d="M-0.69 -0.04 C22.56 -1.47, 115.77 -7.82, 138.66 -9.14" stroke="#1e1e1e" stroke-width="2.5" fill="none" stroke-dasharray="8 10"></path></g><g transform="translate(1123.5490780784976 653.7670017047584) rotate(0 68.89354841544878 -4.47702932758183)"><path d="M115.75 0.88 C120.99 0.16, 126.02 -5.55, 138.66 -9.14" stroke="#1e1e1e" stroke-width="2.5" fill="none"></path></g><g transform="translate(1123.5490780784976 653.7670017047584) rotate(0 68.89354841544878 -4.47702932758183)"><path d="M114.67 -16.18 C120.07 -12.98, 125.35 -14.76, 138.66 -9.14" stroke="#1e1e1e" stroke-width="2.5" fill="none"></path></g></g><mask></mask><g transform="translate(959.5131283714659 822.5297139485674) rotate(0 36.50396728515625 20)"><text x="0" y="14.096" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="16px" fill="#1e1e1e" text-anchor="start" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">ETL </text><text x="0" y="34.096000000000004" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="16px" fill="#1e1e1e" text-anchor="start" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">Spark job</text></g><g transform="translate(946.0968973446238 881.4312235514321) rotate(0 54.832487575174355 12.615620930989593)"><text x="0" y="8.891489632161473" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="10.092496744791683px" fill="#1e1e1e" text-anchor="start" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">Transform </text><text x="0" y="21.507110563151077" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="10.092496744791683px" fill="#1e1e1e" text-anchor="start" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">(join , drop and stuff)</text></g><g stroke-linecap="round"><g transform="translate(939.3462175641744 871.5334167480468) rotate(0 56.03615315755212 0.11100260416665719)"><path d="M-0.65 -0.4 C18.01 -0.62, 93.97 -0.59, 112.58 -0.33 M1.21 -1.65 C19.7 -1.2, 93.2 0.75, 111.9 0.91" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g></g><mask></mask><g transform="translate(948.6450863792784 930.5158182779946) rotate(0 48.19800313313806 12.760258328861056)"><text x="0" y="8.993430070181267" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="10.20820666308884px" fill="#1e1e1e" text-anchor="start" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">Discover PII data </text><text x="0" y="21.753688399042318" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="10.20820666308884px" fill="#1e1e1e" text-anchor="start" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">and anonymize it </text></g><g stroke-linecap="round"><g transform="translate(939.6011817568824 922.4441426595051) rotate(0 54.81077067057299 -0.24543253580731061)"><path d="M0.37 0.04 C18.69 -0.16, 91.88 -0.49, 110.02 -0.46 M-0.89 -0.99 C17.29 -1.05, 91.1 1.23, 109.29 1.09" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g></g><mask></mask><g mask="url(#mask-84hrdJNIrtUYCAfkON-jO)" stroke-linecap="round"><g transform="translate(1065.0245419456844 858.9044328116667) rotate(0 91.61174317252835 -92.48560562082513)"><path d="M0.63 -0.46 C31.19 -30.97, 151.77 -153.54, 182.39 -184.14" stroke="#1e1e1e" stroke-width="2.5" fill="none" stroke-dasharray="8 10"></path></g><g transform="translate(1065.0245419456844 858.9044328116667) rotate(0 91.61174317252835 -92.48560562082513)"><path d="M171.93 -161.43 C173.63 -167.81, 178.07 -169.46, 182.39 -184.14" stroke="#1e1e1e" stroke-width="2.5" fill="none"></path></g><g transform="translate(1065.0245419456844 858.9044328116667) rotate(0 91.61174317252835 -92.48560562082513)"><path d="M159.78 -173.47 C164.03 -177.3, 171.1 -176.33, 182.39 -184.14" stroke="#1e1e1e" stroke-width="2.5" fill="none"></path></g></g><mask id="mask-84hrdJNIrtUYCAfkON-jO"><rect x="0" y="0" fill="#fff" width="1348.248028290741" height="1143.875644053317"></rect><rect x="1070.5163662949706" y="726.4188271908415" fill="#000" width="172.23983764648438" height="80" opacity="1"></rect></mask><g transform="translate(1070.5163662949708 726.4188271908415) rotate(0 86.01958917900924 40.187743229419)"><text x="86.11991882324219" y="14.096" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="16px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">save $$ -- Save as</text><text x="86.11991882324219" y="34.096000000000004" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="16px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">.parquet &amp; use</text><text x="86.11991882324219" y="54.096000000000004" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="16px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">compression (e.g gzip/</text><text x="86.11991882324219" y="74.096" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="16px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">better snappy)</text></g><g stroke-linecap="round"><g transform="translate(1341.75047374907 676.3505147298176) rotate(0 37.95723470052076 -0.2892964680989678)"><path d="M-0.01 0.05 C12.57 0.05, 62.45 0.61, 74.91 0.39 M-1.48 -0.97 C11.52 -1.33, 64.01 -1.34, 77.09 -1.23" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(1341.75047374907 676.3505147298176) rotate(0 37.95723470052076 -0.2892964680989678)"><path d="M53.58 7.25 C59.5 3.46, 66.89 1.1, 77.09 -1.23 M53.58 7.25 C59.37 5.78, 64.94 2.35, 77.09 -1.23" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(1341.75047374907 676.3505147298176) rotate(0 37.95723470052076 -0.2892964680989678)"><path d="M53.63 -9.85 C59.6 -9.37, 66.98 -7.46, 77.09 -1.23 M53.63 -9.85 C59.53 -7.19, 65.09 -6.48, 77.09 -1.23" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g></g><mask></mask><g transform="translate(899.4231247017062 1000.7108256022135) rotate(0 151.3036840858565 62.54966124611474)"><text x="0" y="12.595714641789039" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="14.297065427683359px" fill="#1e1e1e" text-anchor="start" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">- save $$ -- leverage spot instances and </text><text x="0" y="30.46704642639324" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="14.297065427683359px" fill="#1e1e1e" text-anchor="start" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">  or including reserved instances</text><text x="0" y="48.33837821099743" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="14.297065427683359px" fill="#1e1e1e" text-anchor="start" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">- leverage bookmark option, </text><text x="0" y="66.20970999560164" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="14.297065427683359px" fill="#1e1e1e" text-anchor="start" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">   not process same data 2 times, </text><text x="0" y="84.08104178020584" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="14.297065427683359px" fill="#1e1e1e" text-anchor="start" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">see if we could delete used data?</text><text x="0" y="101.95237356481003" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="14.297065427683359px" fill="#1e1e1e" text-anchor="start" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">- dont train every minute, </text><text x="0" y="119.82370534941424" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="14.297065427683359px" fill="#1e1e1e" text-anchor="start" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">  be wise and do with cron job?</text></g><g stroke-linecap="round" transform="translate(1217.98924328032 466.1747131347656) rotate(0 37.17692057291674 33.84419759114583)"><path d="M16.92 0 C25.46 -1, 35.31 -1.32, 57.43 0 M16.92 0 C29.03 -0.62, 43.46 -0.16, 57.43 0 M57.43 0 C66.94 -0.06, 72.92 5.85, 74.35 16.92 M57.43 0 C68.21 -0.79, 76.56 3.67, 74.35 16.92 M74.35 16.92 C74.92 28.65, 75.65 36.17, 74.35 50.77 M74.35 16.92 C73.96 27.06, 74.59 37.58, 74.35 50.77 M74.35 50.77 C74.3 63.44, 66.82 65.71, 57.43 67.69 M74.35 50.77 C76.54 62.26, 68.39 67.31, 57.43 67.69 M57.43 67.69 C47.81 66.2, 33.34 69.14, 16.92 67.69 M57.43 67.69 C44.42 68.46, 30.21 67.43, 16.92 67.69 M16.92 67.69 C5.87 68.26, 0.13 60.18, 0 50.77 M16.92 67.69 C5.66 66.93, -0.75 63.63, 0 50.77 M0 50.77 C0.12 43.44, 1.08 33.6, 0 16.92 M0 50.77 C-0.39 43.23, 0.9 33.55, 0 16.92 M0 16.92 C-0.42 6.52, 3.72 1.92, 16.92 0 M0 16.92 C1.67 6.81, 5.16 -0.73, 16.92 0" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(1227.6861833844866 490.0189107259115) rotate(0 27.47998046875 10)"><text x="27.47998046875" y="14.096" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="16px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">Athena</text></g><g stroke-linecap="round"><g transform="translate(1127.1680762881329 591.4598369854963) rotate(0 44.07432047526038 -51.16833910635491)"><path d="M-0.35 -0.56 C14.27 -17.33, 74.18 -84.68, 88.73 -101.66 M1.67 1.77 C16.09 -15.27, 73.49 -86.28, 88.08 -103.43" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(1127.1680762881329 591.4598369854963) rotate(0 44.07432047526038 -51.16833910635491)"><path d="M79.7 -79.87 C82.2 -87.96, 87.49 -99.98, 88.08 -103.43 M79.7 -79.87 C81.48 -85.83, 83.91 -93.88, 88.08 -103.43" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(1127.1680762881329 591.4598369854963) rotate(0 44.07432047526038 -51.16833910635491)"><path d="M66.52 -90.77 C74.01 -94.62, 84.38 -102.44, 88.08 -103.43 M66.52 -90.77 C72.25 -93.45, 78.56 -98.3, 88.08 -103.43" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g></g><mask></mask><g stroke-linecap="round"><g transform="translate(1291.9931495303204 631.8042297363281) rotate(0 -15.325602213541742 -48.14475504557291)"><path d="M-0.13 -0.88 C-4.97 -17.08, -24.57 -80.96, -29.75 -96.97 M-1.66 1.27 C-6.51 -14.8, -25.13 -79.59, -30.22 -95.79" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(1291.9931495303204 631.8042297363281) rotate(0 -15.325602213541742 -48.14475504557291)"><path d="M-15.3 -75.73 C-20.37 -79.03, -23.6 -86.21, -30.22 -95.79 M-15.3 -75.73 C-19.26 -80.8, -22.26 -86.44, -30.22 -95.79" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(1291.9931495303204 631.8042297363281) rotate(0 -15.325602213541742 -48.14475504557291)"><path d="M-31.68 -70.83 C-32.85 -75.29, -32.16 -83.64, -30.22 -95.79 M-31.68 -70.83 C-31.62 -76.97, -30.56 -83.82, -30.22 -95.79" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g></g><mask></mask><g stroke-linecap="round" transform="translate(1438.3501645042788 321.1226908365886) rotate(0 61.05318196614587 59.2108154296875)"><path d="M77.5 15 C88.96 28.3, 99.12 39.14, 106.61 45 M77.5 15 C85.48 24.09, 95.69 32.7, 106.61 45 M106.61 45 C121.81 60.9, 123.75 59.21, 106.61 75 M106.61 45 C123.08 59.95, 121.37 59.76, 106.61 75 M106.61 75 C95 87.63, 85.05 96.25, 77.5 103.42 M106.61 75 C98.13 83.89, 89.43 91.03, 77.5 103.42 M77.5 103.42 C62.76 120.27, 60.52 116.94, 46.5 103.42 M77.5 103.42 C61 118.45, 62.79 117.73, 46.5 103.42 M46.5 103.42 C40.21 96.23, 32.32 92.47, 15.5 75 M46.5 103.42 C36.39 93.39, 27.27 84.88, 15.5 75 M15.5 75 C1.87 58.12, -1.28 59.79, 15.5 45 M15.5 75 C1.75 62.28, -0.21 60.86, 15.5 45 M15.5 45 C21.76 40.38, 26.79 32.09, 46.5 15 M15.5 45 C22.41 39.73, 28.15 32.24, 46.5 15 M46.5 15 C61.48 -1.01, 63.04 -1.11, 77.5 15 M46.5 15 C60.04 1.36, 61.53 -0.53, 77.5 15" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(1478.7127769106917 360.22809855143237) rotate(0 20.663978576660156 20)"><text x="20.663978576660156" y="14.096" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="16px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">End</text><text x="20.663978576660156" y="34.096000000000004" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="16px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">users</text></g><g mask="url(#mask-gB9CDGnkZ-480PKzH2A0t)" stroke-linecap="round"><g transform="translate(1444.8502875385275 388.03051789229755) rotate(0 -77.65045214212444 41.840926966937175)"><path d="M-0.21 -0.66 C-25.97 13.25, -129.72 69.37, -155.54 83.58 M-1.78 1.6 C-27.64 15.7, -130.94 71.54, -156.62 85.06" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(1444.8502875385275 388.03051789229755) rotate(0 -77.65045214212444 41.840926966937175)"><path d="M-139.93 66.44 C-144.69 70.11, -147.44 74.86, -156.62 85.06 M-139.93 66.44 C-146.46 73.45, -151.91 80.15, -156.62 85.06" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(1444.8502875385275 388.03051789229755) rotate(0 -77.65045214212444 41.840926966937175)"><path d="M-131.87 81.52 C-138.42 81.85, -142.93 83.29, -156.62 85.06 M-131.87 81.52 C-141.34 82.9, -149.82 83.94, -156.62 85.06" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g></g><mask id="mask-gB9CDGnkZ-480PKzH2A0t"><rect x="0" y="0" fill="#fff" width="1700.1511918227764" height="571.7123718261719"></rect><rect x="1313.0798860555828" y="419.8714448592347" fill="#000" width="108.23989868164062" height="20" opacity="1"></rect></mask><g transform="translate(1313.0798860555828 419.8714448592347) rotate(0 53.35595393428105 10.357730947271932)"><text x="54.11994934082031" y="14.096" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="16px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">Explore data?</text></g><g stroke-linecap="round" transform="translate(670.2979997907366 1231.4896138509116) rotate(0 239.53352864583337 99.04292805989587)"><path d="M32 0 C127.57 -0.07, 224.67 -0.4, 447.07 0 M32 0 C175.21 -1.89, 318.76 -1.53, 447.07 0 M447.07 0 C468.99 -0.66, 479.4 10.78, 479.07 32 M447.07 0 C470.26 -1.47, 478.25 12.06, 479.07 32 M479.07 32 C478.62 82.93, 479.35 130.34, 479.07 166.09 M479.07 32 C479.48 83.24, 479.7 135.41, 479.07 166.09 M479.07 166.09 C481.02 185.73, 469.74 198.52, 447.07 198.09 M479.07 166.09 C480.15 187.15, 469.02 197.91, 447.07 198.09 M447.07 198.09 C337.09 195.53, 224.48 196.34, 32 198.09 M447.07 198.09 C299.69 196.74, 152.29 196.81, 32 198.09 M32 198.09 C8.77 198.31, 0.6 186.25, 0 166.09 M32 198.09 C11.97 197.7, -0.22 185.61, 0 166.09 M0 166.09 C0.53 136.61, -1.07 110.85, 0 32 M0 166.09 C-1.12 124.55, -0.38 82.81, 0 32 M0 32 C1.06 11.02, 9.01 1.28, 32 0 M0 32 C-0.26 10.69, 11.95 -1.12, 32 0" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g stroke-linecap="round"><g transform="translate(943.6450863792784 943.1760766068558) rotate(0 -171.13277180989587 193.62823265197582)"><path d="M0 0 C-99.84 0.92, -199.92 0.02, -326.27 0 M0 0 C-123.2 -0.47, -245.1 -0.4, -326.27 0 M-326.27 0 C-336.48 1.17, -343.14 5.15, -342.27 16 M-326.27 0 C-336.29 1.64, -340.56 4.3, -342.27 16 M-342.27 16 C-344.79 112.27, -343.75 207.35, -342.27 371.26 M-342.27 16 C-342.1 101.45, -342.68 186.2, -342.27 371.26 M-342.27 371.26 C-343.63 379.99, -335.75 385.76, -326.27 387.26 M-342.27 371.26 C-344.08 382.89, -338.29 386.09, -326.27 387.26 M-326.27 387.26 C-313.12 385.83, -300.54 386.71, -278.35 387.26 M-326.27 387.26 C-311.01 386.48, -294.28 387.42, -278.35 387.26" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(943.6450863792784 943.1760766068558) rotate(0 -171.13277180989587 193.62823265197582)"><path d="M-301.88 395.68 C-294.97 393.06, -288.31 389.18, -278.35 387.26 M-301.88 395.68 C-293.78 391.88, -283.74 388.81, -278.35 387.26" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(943.6450863792784 943.1760766068558) rotate(0 -171.13277180989587 193.62823265197582)"><path d="M-301.79 378.58 C-294.73 381.18, -288.1 382.53, -278.35 387.26 M-301.79 378.58 C-293.62 381.21, -283.62 384.58, -278.35 387.26" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g></g><mask></mask><g transform="translate(685.8598487490701 1245.02436319987) rotate(0 272.90374755859375 90)"><text x="0" y="14.096" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="16px" fill="#1e1e1e" text-anchor="start" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">- We could fit in data quality checker after this step.</text><text x="0" y="34.096000000000004" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="16px" fill="#1e1e1e" text-anchor="start" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">- incase we do not have to go customization way for anonymize data,</text><text x="0" y="54.096000000000004" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="16px" fill="#1e1e1e" text-anchor="start" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">we would probably write a Lambda trigger from here, </text><text x="0" y="74.096" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="16px" fill="#1e1e1e" text-anchor="start" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">which would do necessery processing. </text><text x="0" y="94.096" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="16px" fill="#1e1e1e" text-anchor="start" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">but in batch, via some queue may be event bridge. </text><text x="0" y="114.096" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="16px" fill="#1e1e1e" text-anchor="start" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">- in this format, we could run the job hourly basics, </text><text x="0" y="134.096" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="16px" fill="#1e1e1e" text-anchor="start" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">where it would consider the data from last hour</text><text x="0" y="154.096" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="16px" fill="#1e1e1e" text-anchor="start" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">s3://(YYYY)/(MM)/(DD)/(HH)-1/*.(json/xml)</text><text x="0" y="174.096" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="16px" fill="#1e1e1e" text-anchor="start" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic"></text></g><g stroke-linecap="round" transform="translate(943.5924537295386 811.5123291015625) rotate(0 60.21604410807288 78.57878621419272)"><path d="M30.11 0 C52.76 2.07, 77.47 -1.12, 90.32 0 M30.11 0 C47.09 0.04, 62.42 -0.12, 90.32 0 M90.32 0 C109.54 -0.19, 120.74 8.97, 120.43 30.11 M90.32 0 C108.69 0.21, 122.17 9.21, 120.43 30.11 M120.43 30.11 C118.79 50.49, 121.37 69.09, 120.43 127.05 M120.43 30.11 C120.91 68.45, 120.21 107.21, 120.43 127.05 M120.43 127.05 C121.43 146.41, 110.53 155.26, 90.32 157.16 M120.43 127.05 C122.51 149.18, 111.87 155.99, 90.32 157.16 M90.32 157.16 C68.84 156.74, 46.97 157.88, 30.11 157.16 M90.32 157.16 C72.97 156.55, 56.42 157.88, 30.11 157.16 M30.11 157.16 C8.18 156.16, 1.83 146.72, 0 127.05 M30.11 157.16 C11.81 155.58, -0.59 147.36, 0 127.05 M0 127.05 C-1.59 101.85, 1.38 77.31, 0 30.11 M0 127.05 C-0.03 104.71, -0.74 81.11, 0 30.11 M0 30.11 C0.79 10.75, 11.48 0.28, 30.11 0 M0 30.11 C0.86 9.47, 9.16 0.73, 30.11 0" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g stroke-linecap="round" transform="translate(858.1094418480279 218.83968098958337) rotate(0 96.76668294270848 90)"><path d="M121.25 22.75 C138.56 37.31, 154.99 54.18, 169.28 68.25 M169.28 68.25 C195.46 91.7, 192.08 92.94, 169.28 113.75 M169.28 113.75 C155.43 124.48, 144.73 136.42, 121.25 157.25 M121.25 157.25 C96.56 179.28, 97.2 180.93, 72.75 157.25 M72.75 157.25 C60.36 144.21, 47.59 131.84, 24.25 113.75 M24.25 113.75 C1.02 92.83, -1.37 89.51, 24.25 68.25 M24.25 68.25 C42.66 49.53, 64.43 33.68, 72.75 22.75 M72.75 22.75 C97.79 -1.06, 97.03 0.54, 121.25 22.75" stroke="#1e1e1e" stroke-width="2.5" fill="none" stroke-dasharray="1.5 8"></path></g><g transform="translate(919.1688163394017 288.83968098958337) rotate(0 35.82396697998047 20)"><text x="35.82396697998047" y="14.096" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="16px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">Job</text><text x="35.82396697998047" y="34.096000000000004" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="16px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">scheduler</text></g><g stroke-linecap="round"><g transform="translate(863.9760189964661 321.1243340695488) rotate(0 -201.9468164353146 170.85502158020344)"><path d="M0 0 C0.04 -0.11, -0.02 -0.29, 0 -0.52 M0 -0.52 C1.41 -0.5, 0.89 -0.7, -0.52 -1.04 M-0.52 -1.04 C-150.71 -3.51, -300.06 -2.66, -387.89 -1.04 M-387.89 -1.04 C-396.83 -1.49, -402.52 6.27, -403.89 14.96 M-403.89 14.96 C-404.02 86.19, -403.61 158.77, -403.89 342.75" stroke="#1e1e1e" stroke-width="2.5" fill="none" stroke-dasharray="1.5 8"></path></g><g transform="translate(863.9760189964661 321.1243340695488) rotate(0 -201.9468164353146 170.85502158020344)"><path d="M-412.43 319.25 C-408.84 326.84, -408.9 331.24, -403.89 342.75" stroke="#1e1e1e" stroke-width="2.5" fill="none" stroke-dasharray="1.5 6"></path></g><g transform="translate(863.9760189964661 321.1243340695488) rotate(0 -201.9468164353146 170.85502158020344)"><path d="M-395.33 319.26 C-396.31 326.68, -400.94 331.08, -403.89 342.75" stroke="#1e1e1e" stroke-width="2.5" fill="none" stroke-dasharray="1.5 6"></path></g></g><mask></mask><g transform="translate(673.8378760928201 299.5404561360677) rotate(0 64.26394653320312 20)"><text x="0" y="14.096" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="16px" fill="#1e1e1e" text-anchor="start" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">Check load/size </text><text x="0" y="34.096000000000004" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="16px" fill="#1e1e1e" text-anchor="start" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">before trigger</text></g><g stroke-linecap="round"><g transform="translate(954.7761247907365 403.83868088956336) rotate(0 17.510144042968932 206.84551652950205)"><path d="M0 0 C0.1 51.18, -1.17 101.34, 0 190.85 M0 190.85 C1.87 202.73, 3.34 208.52, 16 206.85 M16 206.85 C16.86 206.97, 17.64 206.67, 19.02 206.85 M19.02 206.85 C30.66 205.22, 36.47 212.26, 35.02 222.85 M35.02 222.85 C35.7 298.66, 32.45 373.59, 35.02 413.69" stroke="#1e1e1e" stroke-width="2.5" fill="none" stroke-dasharray="1.5 8"></path></g><g transform="translate(954.7761247907365 403.83868088956336) rotate(0 17.510144042968932 206.84551652950205)"><path d="M25.94 390.4 C29.56 396.59, 30.73 401.74, 35.02 413.69" stroke="#1e1e1e" stroke-width="2.5" fill="none" stroke-dasharray="1.5 6"></path></g><g transform="translate(954.7761247907365 403.83868088956336) rotate(0 17.510144042968932 206.84551652950205)"><path d="M43.04 390.01 C42.07 396.26, 38.64 401.52, 35.02 413.69" stroke="#1e1e1e" stroke-width="2.5" fill="none" stroke-dasharray="1.5 6"></path></g></g><mask></mask><g transform="translate(827.036810012091 523.9291381835938) rotate(0 107.98020172119135 22.065572102864557)"><text x="0" y="10.367876812065958" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="11.768305121527764px" fill="#1e1e1e" text-anchor="start" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">save $$ -- trigger job based on load </text><text x="0" y="25.078258213975662" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="11.768305121527764px" fill="#1e1e1e" text-anchor="start" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">on specific machine type , </text><text x="0" y="39.788639615885366" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="11.768305121527764px" fill="#1e1e1e" text-anchor="start" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">which popssibly we have pre-created?</text></g><g transform="translate(783.0643979027157 619.2793375651042) rotate(0 61.77593994140625 20)"><text x="0" y="14.096" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="16px" fill="#1e1e1e" text-anchor="start" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">trigger catalog </text><text x="0" y="34.096000000000004" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="16px" fill="#1e1e1e" text-anchor="start" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">schema creation</text></g><g stroke-linecap="round" transform="translate(748.5063331240701 44.85904947916663) rotate(0 206.05853271484364 36.15191141764325)"><path d="M18.08 0 C104.88 3.01, 193.98 1.92, 394.04 0 M394.04 0 C407.15 -0.28, 411.11 5.8, 412.12 18.08 M412.12 18.08 C413.5 27.51, 413.75 35.91, 412.12 54.23 M412.12 54.23 C411.06 68.23, 406.24 73.43, 394.04 72.3 M394.04 72.3 C271.11 74.06, 146.84 73.24, 18.08 72.3 M18.08 72.3 C7.73 73.84, -1.32 68.14, 0 54.23 M0 54.23 C-0.87 43.06, -1.73 31.08, 0 18.08 M0 18.08 C-0.08 7.89, 5.52 -1.3, 18.08 0" stroke="#1e1e1e" stroke-width="2.5" fill="none" stroke-dasharray="1.5 8"></path></g><g transform="translate(786.4008643740701 63.955342610676894) rotate(0 174.52786254882812 20)"><text x="0" y="14.096" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="16px" fill="#1e1e1e" text-anchor="start" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">Admins controlling more as to what </text><text x="0" y="34.096000000000004" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="16px" fill="#1e1e1e" text-anchor="start" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">and when and how to be scheduled/metrics ?</text></g><g transform="translate(839.4285834633506 10) rotate(0 123.71533561856427 10.181335449218693)"><text x="0" y="14.351610449218676" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="16.290136718749913px" fill="#1e1e1e" text-anchor="start" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">Management &amp; insight Platform</text></g><g stroke-linecap="round"><g transform="translate(954.464865838914 122.16287231445301) rotate(0 0.15562947591126886 45.838904387575184)"><path d="M0 0 C1.15 22.41, -2.21 39.71, 0.31 91.68" stroke="#1e1e1e" stroke-width="2.5" fill="none" stroke-dasharray="1.5 8"></path></g><g transform="translate(954.464865838914 122.16287231445301) rotate(0 0.15562947591126886 45.838904387575184)"><path d="M-8.82 68.41 C-5.37 75.53, -6.77 77.6, 0.31 91.68" stroke="#1e1e1e" stroke-width="2.5" fill="none" stroke-dasharray="1.5 6"></path></g><g transform="translate(954.464865838914 122.16287231445301) rotate(0 0.15562947591126886 45.838904387575184)"><path d="M8.27 67.98 C7.91 75.3, 2.71 77.47, 0.31 91.68" stroke="#1e1e1e" stroke-width="2.5" fill="none" stroke-dasharray="1.5 6"></path></g></g><mask></mask><g stroke-linecap="round" transform="translate(225.71792166573698 676.0576171874995) rotate(0 44.292154947916714 72.63497924804689)"><path d="M22.15 0 C33.08 1.77, 44.82 -1.25, 66.44 0 M66.44 0 C82.05 -1.46, 88.08 8.34, 88.58 22.15 M88.58 22.15 C89.83 61.08, 86.06 101.38, 88.58 123.12 M88.58 123.12 C87.9 138.98, 82.86 143.32, 66.44 145.27 M66.44 145.27 C51.75 143.91, 33.59 145.51, 22.15 145.27 M22.15 145.27 C9.35 143.91, 1.23 138.48, 0 123.12 M0 123.12 C0.87 86.43, -1.59 52.19, 0 22.15 M0 22.15 C0.11 8.2, 6.46 -1.57, 22.15 0" stroke="#1e1e1e" stroke-width="2.5" fill="none" stroke-dasharray="8 10"></path></g><g stroke-linecap="round" transform="translate(219.88764009021577 472.11859130859324) rotate(0 44.292154947916714 71.76464843750001)"><path d="M22.15 0 C40.01 1.29, 57.65 0.41, 66.44 0 M66.44 0 C82.29 -1.4, 87.28 7.65, 88.58 22.15 M88.58 22.15 C88.47 52.64, 88.21 87, 88.58 121.38 M88.58 121.38 C87.91 135.99, 82.07 141.74, 66.44 143.53 M66.44 143.53 C54.24 143.82, 44.58 142.15, 22.15 143.53 M22.15 143.53 C8.67 145.35, -1.55 137.09, 0 121.38 M0 121.38 C-2.46 92.08, -0.16 64.35, 0 22.15 M0 22.15 C-0.32 9.02, 5.86 -1.84, 22.15 0" stroke="#1e1e1e" stroke-width="2.5" fill="none" stroke-dasharray="8 10"></path></g><g transform="translate(232.63894217354937 762.8198140462234) rotate(0 88.84461352027364 22.490051269531307)"><text x="0" y="10.56732542317711" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="11.994694010416698px" fill="#1e1e1e" text-anchor="start" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">kinesis fire hose</text><text x="0" y="25.56069293619798" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="11.994694010416698px" fill="#1e1e1e" text-anchor="start" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">to batch the data </text><text x="0" y="40.55406044921885" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="11.994694010416698px" fill="#1e1e1e" text-anchor="start" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">by time/size and stream to s3</text></g><g transform="translate(229.22652762276817 494.5794169108068) rotate(0 87.53038024902341 27.682020399305472)"><text x="0" y="9.755143988715249" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="11.07280815972219px" fill="#1e1e1e" text-anchor="start" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">kafka connect cluster X </text><text x="0" y="23.596154188367983" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="11.07280815972219px" fill="#1e1e1e" text-anchor="start" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">s3 connector by confluence</text><text x="0" y="37.43716438802072" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="11.07280815972219px" fill="#1e1e1e" text-anchor="start" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">to batch the data by time/size </text><text x="0" y="51.278174587673455" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="11.07280815972219px" fill="#1e1e1e" text-anchor="start" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">and stream write to s3</text></g><g transform="translate(200.1735897972473 161.11019897460892) rotate(0 40.59196472167969 10)"><text x="0" y="14.096" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="16px" fill="#1e1e1e" text-anchor="start" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">Data Lake</text></g><g transform="translate(221.18028331938268 401.3376770019528) rotate(0 116.41072591145834 18.96271168016503)"><text x="0" y="8.909946128120206" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="10.113446229421346px" fill="#1e1e1e" text-anchor="start" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">* if the kafka is MSK </text><text x="0" y="21.551753914896885" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="10.113446229421346px" fill="#1e1e1e" text-anchor="start" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">we could make use of only kinesis firehose and </text><text x="0" y="34.193561701673566" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="10.113446229421346px" fill="#1e1e1e" text-anchor="start" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">single broker to dump the data to s3 </text></g><g stroke-linecap="round" transform="translate(203.5657610212054 393.40744018554653) rotate(0 64.97120157877606 250.22820027669272)"><path d="M32 0 C48.25 0.31, 61.12 -0.14, 97.94 0 M97.94 0 C120.78 1.26, 131.3 10.9, 129.94 32 M129.94 32 C129.79 191.97, 128.99 350.85, 129.94 468.46 M129.94 468.46 C128.02 488.85, 117.53 500.71, 97.94 500.46 M97.94 500.46 C82.66 500.83, 68.21 498.54, 32 500.46 M32 500.46 C9.15 500.1, -0.63 488.75, 0 468.46 M0 468.46 C-0.56 352.76, -0.93 238.22, 0 32 M0 32 C0.75 10.59, 9.07 -0.08, 32 0" stroke="#1e1e1e" stroke-width="2.5" fill="none" stroke-dasharray="1.5 8"></path></g><g stroke-linecap="round"><g transform="translate(338.5081641787575 587.0930548773865) rotate(0 48.856557019824095 46.451076931423735)"><path d="M0 0 C10.02 -1.58, 22.13 -0.05, 29.31 0 M29.31 0 C41.19 -0.55, 45.63 4.18, 45.31 16 M45.31 16 C45.27 28.44, 44.65 44.06, 45.31 76.9 M45.31 76.9 C46.77 89.08, 51.92 94.58, 61.31 92.9 M61.31 92.9 C70.82 92.82, 86.01 92.64, 97.71 92.9" stroke="#1e1e1e" stroke-width="2.5" fill="none" stroke-dasharray="1.5 8"></path></g><g transform="translate(338.5081641787575 587.0930548773865) rotate(0 48.856557019824095 46.451076931423735)"><path d="M74.12 101.17 C82.04 96.6, 92.11 95.17, 97.71 92.9" stroke="#1e1e1e" stroke-width="2.5" fill="none" stroke-dasharray="1.5 6"></path></g><g transform="translate(338.5081641787575 587.0930548773865) rotate(0 48.856557019824095 46.451076931423735)"><path d="M74.32 84.07 C82.27 85.63, 92.26 90.33, 97.71 92.9" stroke="#1e1e1e" stroke-width="2.5" fill="none" stroke-dasharray="1.5 6"></path></g></g><mask></mask><g stroke-linecap="round"><g transform="translate(319.30223156157047 730.951092965262) rotate(0 55.66319972968819 -4.584916396368158)"><path d="M0 0 C18.92 0.17, 36.64 0.22, 50.33 0 M50.33 0 C53.89 1.89, 53.29 -2.26, 54.91 -4.58 M54.91 -4.58 C54.91 -4.58, 54.91 -4.58, 54.91 -4.58 M54.91 -4.58 C53.17 -6.19, 55.82 -10.18, 59.5 -9.17 M59.5 -9.17 C69.35 -10.99, 83.62 -9.92, 111.33 -9.17" stroke="#1e1e1e" stroke-width="2.5" fill="none" stroke-dasharray="1.5 8"></path></g><g transform="translate(319.30223156157047 730.951092965262) rotate(0 55.66319972968819 -4.584916396368158)"><path d="M87.58 -1.36 C96.78 -4.1, 104.85 -6.88, 111.33 -9.17" stroke="#1e1e1e" stroke-width="2.5" fill="none" stroke-dasharray="1.5 6"></path></g><g transform="translate(319.30223156157047 730.951092965262) rotate(0 55.66319972968819 -4.584916396368158)"><path d="M88.11 -18.45 C97.27 -14.99, 105.15 -11.57, 111.33 -9.17" stroke="#1e1e1e" stroke-width="2.5" fill="none" stroke-dasharray="1.5 6"></path></g></g><mask></mask><g stroke-linecap="round"><g transform="translate(460.08238612583693 752.4862364427756) rotate(0 -23.897045462471908 246.43223650912722)"><path d="M0 0 C0.37 74.52, -1.25 147.61, 0 230.43 M0 230.43 C-1.18 242.24, -5.14 244.69, -16 246.43 M-16 246.43 C-21.92 247.63, -27.44 244.86, -31.79 246.43 M-31.79 246.43 C-41.66 247.56, -46.19 251.05, -47.79 262.43 M-47.79 262.43 C-48.96 338.35, -47.77 411.46, -47.79 492.86" stroke="#1e1e1e" stroke-width="2.5" fill="none" stroke-dasharray="1.5 8"></path></g><g transform="translate(460.08238612583693 752.4862364427756) rotate(0 -23.897045462471908 246.43223650912722)"><path d="M-56.41 469.4 C-53.48 478.58, -52.65 486.07, -47.79 492.86" stroke="#1e1e1e" stroke-width="2.5" fill="none" stroke-dasharray="1.5 6"></path></g><g transform="translate(460.08238612583693 752.4862364427756) rotate(0 -23.897045462471908 246.43223650912722)"><path d="M-39.31 469.35 C-41.8 478.52, -46.39 486.03, -47.79 492.86" stroke="#1e1e1e" stroke-width="2.5" fill="none" stroke-dasharray="1.5 6"></path></g></g><mask></mask><g stroke-linecap="round" transform="translate(565.3270118350081 488.99240112304716) rotate(0 41.63409423828125 49.5)"><path d="M53.56 1.93 C60.54 3.98, 68.05 11.98, 73.06 19.12 C78.07 26.26, 82.79 36.09, 83.61 44.78 C84.44 53.46, 81.36 63.4, 78.01 71.26 C74.66 79.11, 69.63 87.27, 63.51 91.88 C57.39 96.48, 48.77 99.08, 41.28 98.88 C33.79 98.68, 25.08 95.87, 18.59 90.68 C12.1 85.49, 5.34 76.04, 2.35 67.76 C-0.64 59.47, -0.81 49.51, 0.65 40.99 C2.12 32.48, 6.16 23.36, 11.12 16.67 C16.08 9.99, 22.39 2.98, 30.42 0.87 C38.45 -1.23, 54.05 3.09, 59.32 4.05 C64.59 5.02, 62.54 5.78, 62.01 6.65" stroke="#1e1e1e" stroke-width="2.5" fill="none" stroke-dasharray="1.5 8"></path></g><g transform="translate(590.9253626668487 528.490615454313) rotate(0 16.095993041992188 10)"><text x="16.095993041992188" y="14.096" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="16px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">SQS</text></g><g mask="url(#mask-j6R4mGGXhu9YxJmukM3L6)" stroke-linecap="round"><g transform="translate(488.67256292980846 690.5521748860681) rotate(0 50.067357102339315 -50.9294081228451)"><path d="M0 0 C26.08 0.49, 50.36 -1.41, 84.13 0 M84.13 0 C92.87 -1.39, 100.72 -5.1, 100.13 -16 M100.13 -16 C101.09 -37.61, 101.79 -59.9, 100.13 -101.86" stroke="#1e1e1e" stroke-width="2.5" fill="none" stroke-dasharray="1.5 8"></path></g><g transform="translate(488.67256292980846 690.5521748860681) rotate(0 50.067357102339315 -50.9294081228451)"><path d="M109.33 -78.61 C107.63 -84.85, 104.11 -93.67, 100.13 -101.86" stroke="#1e1e1e" stroke-width="2.5" fill="none" stroke-dasharray="1.5 6"></path></g><g transform="translate(488.67256292980846 690.5521748860681) rotate(0 50.067357102339315 -50.9294081228451)"><path d="M92.24 -78.14 C95.63 -84.56, 97.2 -93.52, 100.13 -101.86" stroke="#1e1e1e" stroke-width="2.5" fill="none" stroke-dasharray="1.5 6"></path></g></g><mask id="mask-j6R4mGGXhu9YxJmukM3L6"><rect x="0" y="0" fill="#fff" width="688.8072771344871" height="892.4109911317582"></rect><rect x="538.7753176007957" y="680.5521748860681" fill="#000" width="100.06391906738281" height="20" opacity="1"></rect></mask><g transform="translate(538.7753176007957 680.5521748860681) rotate(0 0.46187670738402176 -40.88818365030792)"><text x="50.031959533691406" y="14.096" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="16px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">On create e*</text></g><g stroke-linecap="round" transform="translate(673.246974400112 399.6734110514326) rotate(0 47.39735921223962 25.05021158854167)"><path d="M12.53 0 C40.9 -0.12, 67.12 0.1, 82.27 0 M82.27 0 C91.27 -1.42, 93.87 3.53, 94.79 12.53 M94.79 12.53 C96.17 18.63, 93.43 22.5, 94.79 37.58 M94.79 37.58 C92.98 47.61, 91.51 49.79, 82.27 50.1 M82.27 50.1 C68.81 50.97, 54.13 50.04, 12.53 50.1 M12.53 50.1 C5.31 49.54, -1.93 44.55, 0 37.58 M0 37.58 C0.93 28.22, 0.53 22.29, 0 12.53 M0 12.53 C-0.02 5.09, 5.42 -1.6, 12.53 0" stroke="#1e1e1e" stroke-width="2.5" fill="none" stroke-dasharray="1.5 8"></path></g><g transform="translate(692.5003669375469 414.72362263997434) rotate(0 28.143966674804688 10)"><text x="28.143966674804688" y="14.096" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="16px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">Lambda</text></g><g stroke-linecap="round" transform="translate(638.3847917829246 356.5325419108076) rotate(0 85.06030273437511 25)"><path d="M12.5 0 C55 -1.17, 100.52 -2.45, 157.62 0 M157.62 0 C167.04 1.66, 169.63 2.56, 170.12 12.5 M170.12 12.5 C169.05 18.3, 168.32 25.03, 170.12 37.5 M170.12 37.5 C171.13 46.8, 164.8 48.72, 157.62 50 M157.62 50 C124.69 50.71, 93 51.72, 12.5 50 M12.5 50 C2.65 51.07, 0.56 47.7, 0 37.5 M0 37.5 C0.51 26.68, -1.23 17.35, 0 12.5 M0 12.5 C-1.73 6.16, 3.95 1.61, 12.5 0" stroke="#1e1e1e" stroke-width="2.5" fill="none" stroke-dasharray="1.5 8"></path></g><g transform="translate(649.7491564069481 371.5325419108076) rotate(0 73.69593811035156 10)"><text x="73.69593811035156" y="14.096" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="16px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">Dynamo? for state</text></g><g stroke-linecap="round"><g transform="translate(560.7915140477401 546.1654764811201) rotate(0 35.995479069819964 -60.770926920572904)"><path d="M0 0 C-8.24 0.22, -11.87 -1.16, -19.46 0 M-19.46 0 C-28.76 1.42, -35.13 -5.42, -35.46 -16 M-35.46 -16 C-34.41 -49, -33.6 -83.4, -35.46 -105.54 M-35.46 -105.54 C-36.87 -116.81, -30.08 -121.57, -19.46 -121.54 M-19.46 -121.54 C23.67 -119.42, 67.97 -122.75, 107.46 -121.54" stroke="#1e1e1e" stroke-width="2.5" fill="none" stroke-dasharray="1.5 8"></path></g><g transform="translate(560.7915140477401 546.1654764811201) rotate(0 35.995479069819964 -60.770926920572904)"><path d="M83.93 -113.08 C89.87 -115.37, 100.54 -119.6, 107.46 -121.54" stroke="#1e1e1e" stroke-width="2.5" fill="none" stroke-dasharray="1.5 6"></path></g><g transform="translate(560.7915140477401 546.1654764811201) rotate(0 35.995479069819964 -60.770926920572904)"><path d="M83.99 -130.18 C89.89 -126.82, 100.54 -125.38, 107.46 -121.54" stroke="#1e1e1e" stroke-width="2.5" fill="none" stroke-dasharray="1.5 6"></path></g></g><mask></mask><g transform="translate(518.6625017438621 452.0501200358076) rotate(0 52.65596008300781 10)"><text x="0" y="14.096" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="16px" fill="#1e1e1e" text-anchor="start" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">Batch events</text></g><g stroke-linecap="round"><g transform="translate(720.5443336123516 454.77383422851597) rotate(0 34.64816487630179 132.61280619303358)"><path d="M0 0 C-2.86 73.8, -2.85 147.04, 0 249.23 M0 249.23 C1.81 261, 6.2 267.05, 16 265.23 M16 265.23 C36.47 266.32, 55.48 264.74, 69.3 265.23" stroke="#1e1e1e" stroke-width="2.5" fill="none" stroke-dasharray="1.5 8"></path></g><g transform="translate(720.5443336123516 454.77383422851597) rotate(0 34.64816487630179 132.61280619303358)"><path d="M45.8 273.76 C51.75 270.93, 58.72 267.59, 69.3 265.23" stroke="#1e1e1e" stroke-width="2.5" fill="none" stroke-dasharray="1.5 6"></path></g><g transform="translate(720.5443336123516 454.77383422851597) rotate(0 34.64816487630179 132.61280619303358)"><path d="M45.81 256.66 C51.59 258.9, 58.56 260.64, 69.3 265.23" stroke="#1e1e1e" stroke-width="2.5" fill="none" stroke-dasharray="1.5 6"></path></g></g><mask></mask><g stroke-linecap="round" transform="translate(1039.1809547061018 581.7514139811202) rotate(0 41.68406168619788 45)"><path d="M20.84 0 C31.91 -1.01, 43.72 -1.22, 62.53 0 M62.53 0 C77.83 1.66, 81.39 8.94, 83.37 20.84 M83.37 20.84 C82.86 30.79, 84.98 43.36, 83.37 69.16 M83.37 69.16 C84.89 82.99, 76.59 88.77, 62.53 90 M62.53 90 C49.66 89.92, 30.96 88.99, 20.84 90 M20.84 90 C7.29 90.9, -1.99 84.42, 0 69.16 M0 69.16 C-0.79 50.55, -1.37 32.58, 0 20.84 M0 20.84 C-1.7 5.98, 8.85 -1.31, 20.84 0" stroke="#1e1e1e" stroke-width="2.5" fill="none" stroke-dasharray="8 10"></path></g><g transform="translate(1053.3130373273582 586.7514139811202) rotate(0 27.551979064941406 40)"><text x="27.551979064941406" y="14.096" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="16px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">Crawler</text><text x="27.551979064941406" y="34.096000000000004" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="16px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">for</text><text x="27.551979064941406" y="54.096000000000004" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="16px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">schema</text><text x="27.551979064941406" y="74.096" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="16px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">reg.</text></g><g stroke-linecap="round"><g transform="translate(1048.4567725771954 299.04812545063635) rotate(0 22.093017578124773 138.85164426524193)"><path d="M0 0 C-0.02 33.52, 0.63 69.77, 0 107.05 M0 107.05 C-1.58 116.24, 4.58 123.85, 16 123.05 M16 123.05 C21.22 124.24, 25.59 122.37, 28.19 123.05 M28.19 123.05 C40.56 122.67, 45.62 130.37, 44.19 139.05 M44.19 139.05 C44.12 187.86, 44.71 239.03, 44.19 277.7" stroke="#1e1e1e" stroke-width="2.5" fill="none" stroke-dasharray="1.5 8"></path></g><g transform="translate(1048.4567725771954 299.04812545063635) rotate(0 22.093017578124773 138.85164426524193)"><path d="M35.77 254.16 C37.97 260.27, 41.38 269.05, 44.19 277.7" stroke="#1e1e1e" stroke-width="2.5" fill="none" stroke-dasharray="1.5 6"></path></g><g transform="translate(1048.4567725771954 299.04812545063635) rotate(0 22.093017578124773 138.85164426524193)"><path d="M52.87 254.26 C49.44 260.22, 47.24 268.97, 44.19 277.7" stroke="#1e1e1e" stroke-width="2.5" fill="none" stroke-dasharray="1.5 6"></path></g></g><mask></mask><g transform="translate(1064.3944353376123 356.8383890787763) rotate(0 136.50387573242188 10)"><text x="0" y="14.096" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="16px" fill="#1e1e1e" text-anchor="start" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">Triggers Transformed data schema</text></g><g stroke-linecap="round"><g transform="translate(883.2087867373509 719.9994466145831) rotate(0 41.606964111328466 48.76513366699216)"><path d="M0 0 C21.65 -0.72, 48.55 -0.79, 67.21 0 M67.21 0 C76.29 0.5, 81.45 4.55, 83.21 16 M83.21 16 C81.09 38.88, 82.91 64.96, 83.21 97.53" stroke="#1e1e1e" stroke-width="2.5" fill="none" stroke-dasharray="1.5 8"></path></g><g transform="translate(883.2087867373509 719.9994466145831) rotate(0 41.606964111328466 48.76513366699216)"><path d="M74.21 74.21 C75.47 81.92, 82.18 89.94, 83.21 97.53" stroke="#1e1e1e" stroke-width="2.5" fill="none" stroke-dasharray="1.5 6"></path></g><g transform="translate(883.2087867373509 719.9994466145831) rotate(0 41.606964111328466 48.76513366699216)"><path d="M91.31 73.88 C86.64 81.8, 87.41 89.94, 83.21 97.53" stroke="#1e1e1e" stroke-width="2.5" fill="none" stroke-dasharray="1.5 6"></path></g></g><mask></mask><g stroke-linecap="round"><g transform="translate(633.3847917829246 356.5325419108076) rotate(0 -70.69182332356775 -130.9548187255857)"><path d="M0 0 C-37.62 -1.27, -74.87 0.94, -125.38 0 M0 0 C-37.22 -0.61, -76.29 -1.58, -125.38 0 M-125.38 0 C-135.47 0.34, -142.39 -5.25, -141.38 -16 M-125.38 0 C-134.72 -1.63, -140.84 -3.92, -141.38 -16 M-141.38 -16 C-139.91 -84.73, -141.62 -150.68, -141.38 -261.91 M-141.38 -16 C-142.24 -104.79, -141.52 -195.27, -141.38 -261.91" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(633.3847917829246 356.5325419108076) rotate(0 -70.69182332356775 -130.9548187255857)"><path d="M-132.91 -238.39 C-136.28 -246.56, -139.48 -251.2, -141.38 -261.91 M-132.91 -238.39 C-134.89 -245.41, -138.7 -253.48, -141.38 -261.91" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(633.3847917829246 356.5325419108076) rotate(0 -70.69182332356775 -130.9548187255857)"><path d="M-150.01 -238.45 C-148.4 -246.61, -146.62 -251.23, -141.38 -261.91 M-150.01 -238.45 C-146.84 -245.35, -145.49 -253.4, -141.38 -261.91" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g></g><mask></mask><g transform="translate(195.53279186430473 26.922292073568542) rotate(0 261.56996663411456 29.8862211972434)"><text x="0" y="10.531904349908594" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="11.954488478897384px" fill="#1e1e1e" text-anchor="start" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">at this stage </text><text x="0" y="25.475014948530323" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="11.954488478897384px" fill="#1e1e1e" text-anchor="start" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">we could also validate the data file, </text><text x="0" y="40.41812554715205" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="11.954488478897384px" fill="#1e1e1e" text-anchor="start" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">and probably either copy or add this path to some DB?</text><text x="0" y="55.36123614577378" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="11.954488478897384px" fill="#1e1e1e" text-anchor="start" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">TO be reviewed manually - usually a decession based on situation and many other factors</text></g></svg>

Board link: https://excalidraw.com/#json=BoxxflVhiUmc9cKHsuQMo,LzNV9TRhr9T_WqvzM_STbA

Consideration

  • We do have some level of control over how the data enters to our system.
    • if not, we would create extra KAFKA where all the data lands in via a lambda possibly before they dumped in batch to s3 landing zone.
  • The Kafka in context probably is managed? (MSK)
    • if not - we need to use 2 different tools before it enters to s3 landing zone.
  • The PII data is not required during model training and safe to evict.
    • if not, we dont need to check the PII data, but encrypt end to end data when it stays within S3 and this decryption would be needed in sagemaker level as well. (Not recommended)

Flow

  1. We receive the data from managed kafka & event bridge, and they all go to Firehose. which then batched and streamed write to s3.
  2. In s3 we partition the data in multi level e.g ``` YYYY/ , MM/, DD/, HH/*.json/xml`
  3. On S3 object -create , we put events through SQS , through which , it triggers a lambda function, which checks the files created are valid or not , and if valid then triggers aws glue - crawler job, for us to have a schema, which could be used later in the ETL stage. Now if incase - there is a drift in schema , it glue creates new version, we could via cloudwatch get notified by which file its creating the diff, and take action. or we can follow string rules in schema.
  4. Now that we have all the data, we could spinup a glue - ETL job, which would load each batch of data either by the partition from s3 , e.g a hours whole data would be picked up and processed . here we could transform the data as per requirement , and not only that , we could add the PII data anonymization step here as well.
  5. Now that we transformed, anonymized the data , we can store this data into s3 again , possibly a different bucket, where it would store in partitioned format again, now in parquet format , (it reduces the size from json) and we can add extra layer of compression e.g (snappy)
  6. On the other side we could run another crawler job which would work same way as before (s3 create -> sqs -> trigger glue crawler in batch) and generate the schema , which can be used later in the athena if we want to expose or put this up for DS personnel to explore the transformed data.

Few more layers

Now, that we know what we have done just now, lets consider these

  • We have central cron job manager , which triggers - Spark ETL jobs - Because we create different machine type based jobs tuned for working hourse and non-working hours, - we trigger jobs every hour for next batch, and this centralize job scheduler would check how many files and what size it is of , and based on that it would trigger the necessery jobs, which would run in either small or large machine. (the more number of varities and granularity we would have , the better it would be interms of cost) - This scheduler/job manager can also trigger the aws glue crawler which would generate transformed data schema.
  • After S3 landing data , before ETL we are making some level of processing in batch, here we can validate the data and put them away if invalid , for later to check and also put through alerts. This step we can do in batch and parallel as much as possible and this segment can itself be a full fledge application design , here we need to keep eye on dead-letter-queue as well time to time so a lot of alerts.
  • The anonymization step is something we can do from the ETL step, where we could detect them and hash the PII data, by column. which is irreversable but stays same for same input , so relation is still possible to make up to some extent. things like address could be then partitioned in more granular form, and that way we could achive more data quality as well.

Why using these tools?

Well , instead of spark jobs , i could make use of something like airflow, which offers more cloud agnostic options and flexibility at many levels and interms of tooling cost would be lesser as well.

Looking at the Data lake , the cloud stack possibly already heavily in the AWS and on top of that a lot of connectors with sagemaker and s3 are readily available including the IAM permission granularity are some of it. if we look further in, AWS Glue offers not only features but well made integrations ready to start as well as the connecctivity between each component , including the starter kit which are something makes us to spend lesser man hours meaning we can start things up faster there with less time and meaning lesser cost.

In the kafka x event bridge i could have s3 connector for kafka and firehose for eventbridge to batch dump the data into s3, then one more extra component to monitor and manage, which is why i would prefer one solution that possibly would work best in this situation that is firehose. (if doable)

For Cron job scheuduler that triggers jobs, I would put that in a application backend code if we have EC2 instance where we run small set of services, if we have any toolong EKS cluster, even better we could have cron jobs there. Having AWS batch may be overkill for this.

What can go wrong and how should we deal with it?

Well, World is not so safe place, someone might just cut the big intercontinental wires that connects Europe to the world somewhere in the oscean and we go dark. ;)

There are a few pointers i see ,

  1. Data loss from S3 bucket? : solve by having timely
  2. (Kinesis ADF) Firehose goes down? : Alerting via cloudwatch is best we can do in this case.
  3. The pre-ETL job , (s3-sqs-lambda) fails, or SQS deadletter management : Alerting we could do best in this.
  4. This could be either triggerd from any kind of pipeline or our controlpane (may be EKS? via k8s jobs? or any CICD platform like jenkins. circle CI etc , ) and if not triggered in lets say within 5 hours we raise alert from cloudwatch.
  5. Things can go wrong in data processing or PII detection as well, we can have extra spark job to keep an eye on the processed data, and report as necessery, (s3-create > sqs > trigger spark job to check PII in batch or via lambda with custom solution)

Cost effectiveness

  • I can count on reserving the instances and using them and using spot insgtances in the whole process wherever permissabkle.
  • Making things parallel and in batch always saves time, we can take this principle wherever we see opportunity to put on.
  • Purge unwanted data, or if needed sometime in future, ccompress at bulk and store them in cold storage.
  • Make use of bookmarking in the ETL job so we do not process same job multiple times.
  • Use correct instance size for correct workload (create the ETL jobs on fly based on the size? not that for 1000 different type we cretae 1000 jobs and trigger them or maintain them, but have a set of max 10 jobs instead.)

Implementation cycle

In 2 week sprint Week #1 -

  • I believe we can put through the kafka x eventbridge via ADF firehose to the landing s3 first (needs cross team communication i suppose - async task)
  • Create a lambda that triggers the Crawler and validates data files in batch with s3 parsable inputs.
  • With IaC crete the ETL job and make it read from s3 and then process and then put the output into target s3 bucket.
  • Create another crawler which works on processed s3 data and also connects to athena
  • Create a job(may be in local) that triggers these ETL job and processed s3 crawler.
  • COMPLETE & VALIDATE : Crawlers creation, ETL job creation, s3 data landing zone.

Week #2 -

  • Create the full cycle of pre-ETL job, (s3-on-create -> SQS -> Lambda trigger -store state in dynamodb), manage the deadletter and cloudwatch for necessery alerting.
  • Deploy the pre-created Job into a k8s cluster and make sure its able to run and create ETL jobs on the fly (ondemand trigger as well as based on load), also able to trigger the post processing crawllers
  • Verify the PII data are not present in processed data and they are encrepted and compressed as file & querrible from Athena.
  • Put up cloudwatch alerts on Firehose, SQS, Lambda , Aws Glue ,
  • VALIDATE --

What kind of SLO would i be interested in?

(does not satisfy - send alert!!)

  • Dead-Letter-Queue from SQS is possibly less than 100 messages
  • Glue Crawler/Job must run successfully at least once every 4 hours.
  • Invalid files must not increase (2x) compared to the previous hour
  • Drift in schema (new version created?)
  • OPS-----
  • There would be more metrics we would be interested in , to look at the data input frequency , size of them, ETL processing ndoe usage , at what time , etc, usage of spot instances or reserved etc, these should be helping further tuning the system.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment