{ "info": { "author": "Daniel Luca", "author_email": "daniel.luca@consensys.net", "bugtrack_url": null, "classifiers": [], "description": "# Karl\n\n[![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](https://opensource.org/licenses/MIT)\n[![CircleCI](https://circleci.com/gh/cleanunicorn/karl/tree/master.svg?style=shield)](https://circleci.com/gh/cleanunicorn/karl)\n[![Codacy Badge](https://api.codacy.com/project/badge/Grade/53bb3ba0ed50447698e775edd397baa7)](https://www.codacy.com/app/lucadanielcostin/karl)\n[![PyPI](https://img.shields.io/pypi/v/karl.svg)](https://pypi.org/project/karl/)\n[![Code style: black](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/ambv/black)\n[![Maintainability Rating](https://sonarcloud.io/api/project_badges/measure?project=cleanunicorn_karl&metric=sqale_rating)](https://sonarcloud.io/dashboard?id=cleanunicorn_karl)\n\nA monitor for smart contracts that checks for security vulnerabilities.\n\n![Karl Vreski](./static/karl-profile.jpg)\n\n## Install\n\nGet latest version of Karl.\n\n```console\n$ pip install --user karl\n```\n\nInstall [Ganache](https://truffleframework.com/ganache) with [npm](https://www.npmjs.com/get-npm) if you want Karl to test the found vulnerabilities in a sandbox (`--sandbox=true`, disabled by default), to reduce false positives.\n\n```console\n$ npm i -g ganache-cli\n```\n\n## Demo\n\nRunning locally with a specially crafted vulnerable contract:\n\n[![asciicast](https://asciinema.org/a/222983.svg)](https://asciinema.org/a/222983)\n\nRunning on the main net using [Infura](https://infura.io/):\n\n[![asciicast](https://asciinema.org/a/atfMqExP6RFXPzeza5adCozpg.svg)](https://asciinema.org/a/atfMqExP6RFXPzeza5adCozpg)\n\n### Description\nKarl will allow you to monitor a blockchain for vulnerable smart contracts that are being deployed.\n\nIt connects to the blockchain, monitors for new blocks and runs `mythril` for every new smart contract deployed.\n\nThe output can be displayed in the console, saved in files in a folder or POSTed to a URL.\n\nOutput can be:\n\n- **stdout** just posting the results to standard output\n- **folder** create a file for each vulnerable contract in a folder\n- **posturl** POST the results to an http endpoint\n\n### Help message\n\n```console\n$ karl --help\nusage: karl.py [-h]\n [--rpc HOST:PORT / ganache / infura-{mainnet, rinkeby, kovan, ropsten}]\n [--rpc-tls RPC_TLS] [--block NUMBER]\n [--output Can be one of: stdout, posturl, folder]\n [--posturl POSTURL] [--folder-output FOLDER_OUTPUT]\n [--sandbox SANDBOX] [--timeout SECONDS] [--tx-count NUMBER]\n [--modules [MODULES [MODULES ...]]]\n [--onchain-storage ONCHAIN_STORAGE]\n [--loop bound LOOP_BOUND] [--verbose] [--version]\n\nSmart contract monitor using Mythril to find exploits\n\noptional arguments:\n -h, --help show this help message and exit\n --version show program's version number and exit\n\nRPC options:\n --rpc HOST:PORT / ganache / infura-{mainnet, rinkeby, kovan, ropsten}\n Custom RPC settings (default: None)\n --rpc-tls RPC_TLS RPC connection over TLS (default: False)\n --block NUMBER Start from this block, otherwise start from latest\n (default: None)\n\nOutput:\n --output Can be one of: stdout, posturl, folder\n Where to send results (default: stdout)\n --posturl POSTURL Send results to a RESTful url [when using `--output\n posturl`] (default: None)\n --folder-output FOLDER_OUTPUT\n Save files to this folder [when using `--output\n folder`] (default: None)\n\nSandbox:\n --sandbox SANDBOX Test found transactions in a Ganache sandbox (default:\n False)\n\nScan options:\n --timeout SECONDS Scan timeout per contract (default: 600)\n --tx-count NUMBER Maximum number of transactions (default: 3)\n --modules [MODULES [MODULES ...]]\n Modules to use for scanning (default: ['ether_thief',\n 'suicide'])\n --onchain-storage ONCHAIN_STORAGE\n Whether onchain access should be done or not (default:\n True)\n --loop-bound LOOP_BOUND\n Bound on number of loop iterations\nVerbosity:\n --verbose, -v Set verbose (default: 4)\n```\n\n## Examples\n\n### Running against the **mainnet**\n\n```console\n$ karl --rpc infura-mainnet --rpc-tls true\nStdout initialized\nRunning\nScraping block 6745471\nScraping block 6745472\nScraping block 6745473\nAnalyzing 0xf8c065bB1DafC99eE5476a2b675FAC4a036a4B07\nScraping block 6745474\nAnalyzing 0xC9e044D76f211E84bA651b30BBA86758ca8017c7\nScraping block 6745475\nScraping block 6745476\nScraping block 6745477\nAnalyzing 0x19427b8FD32dfEc78393517Da416bC5C583E6065\n```\n\n### Running against **ganache** with **stdout** enabled\n\n```console\n$ karl --rpc ganache --output=stdout\nINFO:mythril.mythril:Using RPC settings: ('localhost', 8545, False)\nINFO:mythril.analysis.modules.suicide:Suicide module: Analyzing suicide instruction\nPOSSIBLE VULNERABILITY!\nInitial balance = 100000000000000000000, final balance = 100999999999999985722\n\nType = VulnerabilityType.KILL_AND_WITHDRAW\nDescription = Looks line anyone can kill this contract and steal its balance.\nTransactions = [{'from': '0x1dF62f291b2E969fB0849d99D9Ce41e2F137006e', 'to': '0x2F2B2FE9C08d39b1F1C22940a9850e2851F40f99', 'data': '0xcbf0b0c0bebebebebebebebebebebebe1dF62f291b2E969fB0849d99D9Ce41e2F137006e', 'value': 0}]\n```\n\n### Running against **ganache** with **posturl** enabled\n\n```console\n$ karl --rpc ganache --output=posturl --posturl=http://localhost:8080\nPosturl initialized\nRunning\nScraping block 5\nAnalyzing 0x4b8e80acaE3F0db32e5d35925EfaA97D477dBb70\n```\n\nAnd it will send this to the listening service\n\n```console\n$ nc -l 8080\nPOST / HTTP/1.1\nAccept-Encoding: identity\nContent-Type: application/x-www-form-urlencoded\nContent-Length: 725\nHost: localhost:8080\nUser-Agent: Python-urllib/3.7\nConnection: close\n\n{\n \"error\": null,\n \"issues\": [{\n \"address\": 722,\n \"contract\": \"0x4b8e80acaE3F0db32e5d35925EfaA97D477dBb70\",\n \"debug\": \"Transaction Sequence: {'1': {'calldata': '0x56885cd8', 'call_value': '0x0', 'caller': '0xaaaaaaaabbbbbbbbbcccccccddddddddeeeeeeee'}, '4': {'calldata': '0x6c343ffe', 'call_value': '0x0', 'caller': '0xaaaaaaaabbbbbbbbbcccccccddddddddeeeeeeee'}}\",\n \"description\": \"Arbitrary senders other than the contract creator can withdraw ETH from the contract account without previously having sent an equivalent amount of ETH to it. This is likely to be a vulnerability.\",\n \"function\": \"withdrawfunds()\",\n \"max_gas_used\": 1749,\n \"min_gas_used\": 1138,\n \"swc-id\": \"105\",\n \"title\": \"Ether thief\",\n \"type\": \"Warning\"\n }],\n \"success\": true\n}\n```\n\n## Running against the **mainnet** with **folder** output enabled\n\n```console\n$ karl --rpc infura-mainnet --output folder\n```\n\n## Troubleshooting\n\n### OpenSSL\n\nIf you get this error\n\n```error\n #include \n ^~~~~~~~~~~~~~~\ncompilation terminated.\nerror: command 'x86_64-linux-gnu-gcc' failed with exit status 1\n```\n\nYou must install the openssl source code libraries\n\n#### Ubuntu\n\n```console\n$ sudo apt-get install libssl-dev\n```\n\n## Credits\n\nThis tool is inspired by [Bernhard's](https://github.com/b-mueller/) initial prototyping and it heavily uses his project [Myth](https://github.com/ConsenSys/mythril-classic).", "description_content_type": "text/markdown", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "", "keywords": "", "license": "MIT", "maintainer": "", "maintainer_email": "", "name": "karl", "package_url": "https://pypi.org/project/karl/", "platform": "", "project_url": "https://pypi.org/project/karl/", "project_urls": null, "release_url": "https://pypi.org/project/karl/0.7.3/", "requires_dist": null, "requires_python": "", "summary": "", "version": "0.7.3" }, "last_serial": 5567940, "releases": { "0.1": [ { "comment_text": "", "digests": { "md5": "f3a4760c5adabc3385a3b694a73d02a2", "sha256": "e32a390cc440872a38470c77893b59f20cd2f78c9e1ac922a729ac95e937b8a0" }, "downloads": -1, "filename": "karl-0.1.tar.gz", "has_sig": false, "md5_digest": "f3a4760c5adabc3385a3b694a73d02a2", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 2134, "upload_time": "2018-11-20T16:33:30", "url": "https://files.pythonhosted.org/packages/42/eb/495ef865380fbcf7412d80ea459b8e4d9256136cf690ea12df89cf74caf6/karl-0.1.tar.gz" } ], "0.1dev": [ { "comment_text": "", "digests": { "md5": "5f74e0fdfd29a6a30327b92985618c38", "sha256": "6bde715e1dcb775d3c4cb7183d6e6874ba4bf7ad5c33f9087ddb8f782294e59c" }, "downloads": -1, "filename": "karl-0.1dev.tar.gz", "has_sig": false, "md5_digest": "5f74e0fdfd29a6a30327b92985618c38", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 613, "upload_time": "2018-11-20T03:42:38", "url": "https://files.pythonhosted.org/packages/62/b0/c067fcfaff9b941106a4b639e07a447dbc5f4a478c63e6cec536cec75ac9/karl-0.1dev.tar.gz" } ], "0.2.10": [ { "comment_text": "", "digests": { "md5": "7a6c9fc733483e5436acd9bbde6a2f37", "sha256": "9894f20b2e342cd36b49600e3c748affa9852fdeba64741e22533e88d7158cfb" }, "downloads": -1, "filename": "karl-0.2.10-py3-none-any.whl", "has_sig": false, "md5_digest": "7a6c9fc733483e5436acd9bbde6a2f37", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 8405, "upload_time": "2018-12-02T20:20:34", "url": "https://files.pythonhosted.org/packages/46/db/c75ee661d10e7a3aa49c3d1d05fdd34e008537fbcfee531fa66a55eea71f/karl-0.2.10-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "ffee7d39da2ceaf76d2beef4447a6bcd", "sha256": "ef929e25987e429d5c7e29d66f6d7ae95f44939681ee66c898bffc3497709aab" }, "downloads": -1, "filename": "karl-0.2.10.tar.gz", "has_sig": false, "md5_digest": "ffee7d39da2ceaf76d2beef4447a6bcd", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5911, "upload_time": "2018-12-02T20:20:36", "url": "https://files.pythonhosted.org/packages/a5/3b/d4569fd638c2ba8b1d9272bb619a3bc86b5fdccfe57b1634602d4848f2dd/karl-0.2.10.tar.gz" } ], "0.2.5": [ { "comment_text": "", "digests": { "md5": "fbf8ff29e24341f2d387b621559b50e0", "sha256": "c8a0cd8371070565ebb0da4a1cf13e9ed96346f95b52dd3ee7189fdd09911fe9" }, "downloads": -1, "filename": "karl-0.2.5-py3-none-any.whl", "has_sig": false, "md5_digest": "fbf8ff29e24341f2d387b621559b50e0", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 7188, "upload_time": "2018-11-21T12:20:50", "url": "https://files.pythonhosted.org/packages/7d/22/47e8ad1ae2b6af45d8592c71a73506bcbf6b0e52381387ff6238818140cb/karl-0.2.5-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "2cddfcd939e777a1fb3788d71ebaa4af", "sha256": "413ec99bb302216856a1d987082b5e9b7f373b9bfe6bf8ccecd4fc6e6d43f8ed" }, "downloads": -1, "filename": "karl-0.2.5.tar.gz", "has_sig": false, "md5_digest": "2cddfcd939e777a1fb3788d71ebaa4af", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5155, "upload_time": "2018-11-21T12:20:52", "url": "https://files.pythonhosted.org/packages/a2/22/3ae14b71d786a43b04c1d7af24ae098705b25b55121945e4a3f62f4f63f7/karl-0.2.5.tar.gz" } ], "0.2.6": [ { "comment_text": "", "digests": { "md5": "a8e65e47d2e5916175595bf3e64ad151", "sha256": "24032b0c824bd88caf495ac7296f7abf01b2ee8cefcdf888a02babb3cf1dc23f" }, "downloads": -1, "filename": "karl-0.2.6-py3-none-any.whl", "has_sig": false, "md5_digest": "a8e65e47d2e5916175595bf3e64ad151", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 5007, "upload_time": "2018-11-22T15:41:39", "url": "https://files.pythonhosted.org/packages/8e/01/f51ed19f975cdebff1e5905832042c088b6783a3bedf622034b007ae0d2f/karl-0.2.6-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "9f75d62157a7b7d0d40bf4426047ab39", "sha256": "c5eef8047f1c2f3cfa9fef99f535e0b34d0a681d0d9e70dfe58c1d8b4639ae54" }, "downloads": -1, "filename": "karl-0.2.6.tar.gz", "has_sig": false, "md5_digest": "9f75d62157a7b7d0d40bf4426047ab39", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5262, "upload_time": "2018-11-22T15:41:40", "url": "https://files.pythonhosted.org/packages/b4/5f/9e57138609647fb2cee1184a47bbaa323ab0cb0a2e87c5559ae724461cfa/karl-0.2.6.tar.gz" } ], "0.2.7": [ { "comment_text": "", "digests": { "md5": "ee311b03e9a38c899d8322a5f9889390", "sha256": "53839a3007bd640ec25ab147dd751a6d48f6e1a52cf28de9aa9d9f4ac66aec43" }, "downloads": -1, "filename": "karl-0.2.7-py3-none-any.whl", "has_sig": false, "md5_digest": "ee311b03e9a38c899d8322a5f9889390", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 8347, "upload_time": "2018-11-26T14:07:45", "url": "https://files.pythonhosted.org/packages/8e/f4/3eb6ce1355da69a68b96a42084a61147b20ccbed37554aa9644fdbbbac0c/karl-0.2.7-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "c077204d2127e24471d99174a1f6cca4", "sha256": "0bd4fcf862a2c96b5a9290eed4e34f044ca5c9d66fc91f9940697d6ad8e840a2" }, "downloads": -1, "filename": "karl-0.2.7.tar.gz", "has_sig": false, "md5_digest": "c077204d2127e24471d99174a1f6cca4", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5845, "upload_time": "2018-11-26T14:07:46", "url": "https://files.pythonhosted.org/packages/9b/29/9297bd7f055ebe651ca83222e3274678b429443edc8354208986caa28f8d/karl-0.2.7.tar.gz" } ], "0.2.8": [ { "comment_text": "", "digests": { "md5": "278a06c3cf4d06c07020ec60bb16a20a", "sha256": "c8f1cb7d8be60d540ad1bdf812791796530a37856b65ed1d3947a93c2025b853" }, "downloads": -1, "filename": "karl-0.2.8-py3-none-any.whl", "has_sig": false, "md5_digest": "278a06c3cf4d06c07020ec60bb16a20a", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 8326, "upload_time": "2018-11-26T17:07:50", "url": "https://files.pythonhosted.org/packages/fc/1a/1f9d5bc2bc935f0b7f2a6ff2ac387b4b69c0c7b3b5b52f34bd9993d2ddf4/karl-0.2.8-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "b574a792c482fa2d7f37fc4694902d56", "sha256": "048e9b221cc952e2377e72dbee3321d2be6a3c64285bbb4df49acb8d864e643c" }, "downloads": -1, "filename": "karl-0.2.8.tar.gz", "has_sig": false, "md5_digest": "b574a792c482fa2d7f37fc4694902d56", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5847, "upload_time": "2018-11-26T17:07:54", "url": "https://files.pythonhosted.org/packages/53/3f/ecb5987fedb2578ee85140b4bc769ee153b8367a593723b3db0c9a2e97aa/karl-0.2.8.tar.gz" } ], "0.2.9": [ { "comment_text": "", "digests": { "md5": "ddc96fe7ed3b56e9743fbec0b034e51c", "sha256": "76d40bce90974ad913fb113e3b5010c8d21e4838f53432543a50a006d40b2eb3" }, "downloads": -1, "filename": "karl-0.2.9-py3-none-any.whl", "has_sig": false, "md5_digest": "ddc96fe7ed3b56e9743fbec0b034e51c", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 8333, "upload_time": "2018-11-26T17:42:43", "url": "https://files.pythonhosted.org/packages/2b/6e/0a664119c166990a65ca3e5122a7dec437800af2f523c02c96d74991c796/karl-0.2.9-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "c97bf6aa52c9620a79911a40b213dc6a", "sha256": "6a4aa28bd612534d5e5152f50b295533699526734b206f1cdcbf9362c272ae5e" }, "downloads": -1, "filename": "karl-0.2.9.tar.gz", "has_sig": false, "md5_digest": "c97bf6aa52c9620a79911a40b213dc6a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5852, "upload_time": "2018-11-26T17:42:44", "url": "https://files.pythonhosted.org/packages/09/6a/ee35d20885b84db83e684b4ffb674df9b9239bd738a1061f40e1aeeeffe4/karl-0.2.9.tar.gz" } ], "0.3.2.dev0": [ { "comment_text": "", "digests": { "md5": "fcf039e0b8b1a5c0c27c6184b0449c7e", "sha256": "8599f51b9d7274967fd3323e3a5b1037a889e0e4323cf41f32f2324b32aa7ea7" }, "downloads": -1, "filename": "karl-0.3.2.dev0-py3-none-any.whl", "has_sig": false, "md5_digest": "fcf039e0b8b1a5c0c27c6184b0449c7e", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 12790, "upload_time": "2018-12-03T16:06:04", "url": "https://files.pythonhosted.org/packages/01/95/eba9118f645d8ab786363c8594116e51dead89ff0707cc365734e9bb12c0/karl-0.3.2.dev0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "56d57070a2d601a0c82660f8cc8bdbc4", "sha256": "df81d813fd7842b99bacbd5ebf60024d0e334fcf2efb6793b9d20f5f12e53410" }, "downloads": -1, "filename": "karl-0.3.2.dev0.tar.gz", "has_sig": false, "md5_digest": "56d57070a2d601a0c82660f8cc8bdbc4", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10648, "upload_time": "2018-12-03T16:06:05", "url": "https://files.pythonhosted.org/packages/42/a8/5658e59ebd67ce51fab1514f911a69e90058cfb57447f81d8a32b26f7b02/karl-0.3.2.dev0.tar.gz" } ], "0.3.2.dev1": [ { "comment_text": "", "digests": { "md5": "16d248599adcc0c122c874b04d32870c", "sha256": "ee837c2f8d5750431445dccd0edd3a9552f8cc6ff7bf4e014b90893ee0ea0699" }, "downloads": -1, "filename": "karl-0.3.2.dev1-py3-none-any.whl", "has_sig": false, "md5_digest": "16d248599adcc0c122c874b04d32870c", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 12790, "upload_time": "2018-12-03T16:26:47", "url": "https://files.pythonhosted.org/packages/bb/a5/1efd6b8275960b34902e512c339589a396c4442084160824a04641ebd157/karl-0.3.2.dev1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "ff04dd6362c96b32d75df8a13cddbeb0", "sha256": "79d0802ebbfc0fe2923fdc99e8cf057b3e6ec66e59fcbdc0f369156de5dfd57b" }, "downloads": -1, "filename": "karl-0.3.2.dev1.tar.gz", "has_sig": false, "md5_digest": "ff04dd6362c96b32d75df8a13cddbeb0", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10645, "upload_time": "2018-12-03T16:26:49", "url": "https://files.pythonhosted.org/packages/37/95/76fbb7be36873a2fc413588be2892fbad96af67b03a966ccb0f9bfd2e65f/karl-0.3.2.dev1.tar.gz" } ], "0.3.2.dev2": [ { "comment_text": "", "digests": { "md5": "d4538e0e9d6fe78cf03ad35ddffe81df", "sha256": "3f1502ca551962000138060b7394b047c09971b2abef9d39be374e7e7df3203b" }, "downloads": -1, "filename": "karl-0.3.2.dev2-py3-none-any.whl", "has_sig": false, "md5_digest": "d4538e0e9d6fe78cf03ad35ddffe81df", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 13094, "upload_time": "2018-12-04T21:16:35", "url": "https://files.pythonhosted.org/packages/22/34/265000b21bfdb931838709901ddc120b3949285704e493d1a492f78e98e5/karl-0.3.2.dev2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "763db300bba1ae7e7c8a28670dc586de", "sha256": "49ae97aaea648f94d8cbfe0fe1737b3395c0d7a2d37ab694b64d93fef589294b" }, "downloads": -1, "filename": "karl-0.3.2.dev2.tar.gz", "has_sig": false, "md5_digest": "763db300bba1ae7e7c8a28670dc586de", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10928, "upload_time": "2018-12-04T21:16:37", "url": "https://files.pythonhosted.org/packages/dc/46/3899d3dc904e3c01cbb7411b4cebf89e62ba7ebc68c5fb5cc7a5b2b8d4f1/karl-0.3.2.dev2.tar.gz" } ], "0.3.3.dev2": [ { "comment_text": "", "digests": { "md5": "36b7432431e2242f140b778446d42631", "sha256": "d8a2db67d7cdb034bd5aa7ead93f02c62d36aa33842f335da7b5d992295a2df4" }, "downloads": -1, "filename": "karl-0.3.3.dev2.tar.gz", "has_sig": false, "md5_digest": "36b7432431e2242f140b778446d42631", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 11378, "upload_time": "2018-12-12T19:23:57", "url": "https://files.pythonhosted.org/packages/79/f6/0b57c657c7ea4d3fc1bb44dd8b8799320223e5045c5c58942860262d51bc/karl-0.3.3.dev2.tar.gz" } ], "0.3.3.dev3": [ { "comment_text": "", "digests": { "md5": "8b0821916f7a1da8d82dcd2689a37713", "sha256": "de4337d1c1fd392766a94bf16d2d421f7515c88f83f27d6a3c1305a4d75dfd17" }, "downloads": -1, "filename": "karl-0.3.3.dev3.tar.gz", "has_sig": false, "md5_digest": "8b0821916f7a1da8d82dcd2689a37713", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 11374, "upload_time": "2018-12-12T19:26:14", "url": "https://files.pythonhosted.org/packages/38/d6/84d496d57aad1d9ff1f772dfbbbff45e79efd51adb4d69078e51c6535e0d/karl-0.3.3.dev3.tar.gz" } ], "0.4.0": [ { "comment_text": "", "digests": { "md5": "d200dd7507e6c899c6c6b25eca802dd4", "sha256": "ef742b6fc480f059649499cd8ffeb0b50a46d2cf792c4cecd7a62126dcacbfd7" }, "downloads": -1, "filename": "karl-0.4.0.tar.gz", "has_sig": false, "md5_digest": "d200dd7507e6c899c6c6b25eca802dd4", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 11367, "upload_time": "2018-12-12T19:28:34", "url": "https://files.pythonhosted.org/packages/b6/fb/1cfa591610df7053bf3266bb58d7e0e9f3324a2613140f0692a6d97eae1b/karl-0.4.0.tar.gz" } ], "0.4.1": [ { "comment_text": "", "digests": { "md5": "c7327d7afa419ee41709f3709199d707", "sha256": "d66588011145d59003c87a62bc50a9e7adf5c4a43bbed20f16abea6683b51fdc" }, "downloads": -1, "filename": "karl-0.4.1.tar.gz", "has_sig": false, "md5_digest": "c7327d7afa419ee41709f3709199d707", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 11367, "upload_time": "2018-12-12T19:36:03", "url": "https://files.pythonhosted.org/packages/47/cc/3fad28681131f231803662bfe7c9a585be6560ac1286707731ab6cb92fbb/karl-0.4.1.tar.gz" } ], "0.4.1.dev0": [ { "comment_text": "", "digests": { "md5": "40d5e2993fb63d781fb70fa70a276dd8", "sha256": "45929992dab6b6b66937ab9a3646dc3b4b4d71417a780b195088866ee28cd867" }, "downloads": -1, "filename": "karl-0.4.1.dev0.tar.gz", "has_sig": false, "md5_digest": "40d5e2993fb63d781fb70fa70a276dd8", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 11380, "upload_time": "2018-12-12T19:33:14", "url": "https://files.pythonhosted.org/packages/33/be/0911e1004b1875cb0e9e27774bffa421365f6768c41b1926ab7edfb04e4b/karl-0.4.1.dev0.tar.gz" } ], "0.4.11": [ { "comment_text": "", "digests": { "md5": "24920c47514fdf8748f53c427efc42de", "sha256": "8d2679d7cd99d7cdbde95ad6c6deb2821f50314af137d4719ca4510657a75008" }, "downloads": -1, "filename": "karl-0.4.11-py3-none-any.whl", "has_sig": false, "md5_digest": "24920c47514fdf8748f53c427efc42de", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 15255, "upload_time": "2019-04-02T14:29:24", "url": "https://files.pythonhosted.org/packages/8d/8a/ff8d349069c259e5c1aa92dfa5759c87372ad457a30ffdfb6979fc3d0ef6/karl-0.4.11-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "ad9f80fbf9807f79d89e885133312470", "sha256": "13be4e3d7e095df3bd0b723308fb70bbf212300e39938da9e07dee365b96ee8d" }, "downloads": -1, "filename": "karl-0.4.11.tar.gz", "has_sig": false, "md5_digest": "ad9f80fbf9807f79d89e885133312470", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 13753, "upload_time": "2019-04-02T14:29:26", "url": "https://files.pythonhosted.org/packages/2d/27/b42323ccd78b6fda150b086098430d6c5623e50cb5a95990c8b9eda3d1db/karl-0.4.11.tar.gz" } ], "0.4.12": [ { "comment_text": "", "digests": { "md5": "ecd45856012a6006ec6a693733312851", "sha256": "521f924d4391ca650eef52da4c161ee8d37cb089da298c9760553901b1428c2b" }, "downloads": -1, "filename": "karl-0.4.12.tar.gz", "has_sig": false, "md5_digest": "ecd45856012a6006ec6a693733312851", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 13694, "upload_time": "2019-04-02T14:54:38", "url": "https://files.pythonhosted.org/packages/7b/44/1f5d0f97fc5cb367a737637502c22a6bf64aea6bdd9674e9f89ef734ff0b/karl-0.4.12.tar.gz" } ], "0.4.13": [ { "comment_text": "", "digests": { "md5": "588389136372d770b0d3c7489380c39e", "sha256": "27fec0a6e7a6cf79292fdc01319a35ae280c53dae7037a7544f20c3746f467ec" }, "downloads": -1, "filename": "karl-0.4.13.tar.gz", "has_sig": false, "md5_digest": "588389136372d770b0d3c7489380c39e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 13703, "upload_time": "2019-04-02T14:59:51", "url": "https://files.pythonhosted.org/packages/45/eb/b95eb8ecdc6915ce26fc0480ecff35032f3f922b94c0b2350d0c76962a38/karl-0.4.13.tar.gz" } ], "0.4.2": [ { "comment_text": "", "digests": { "md5": "cdf95f1de8d9b25837c64b3449085c35", "sha256": "e26344573f6e9c77444671fccb2b3055234bb64a33ebab37e61edacf28d2a8dd" }, "downloads": -1, "filename": "karl-0.4.2.tar.gz", "has_sig": false, "md5_digest": "cdf95f1de8d9b25837c64b3449085c35", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 11632, "upload_time": "2018-12-12T19:46:16", "url": "https://files.pythonhosted.org/packages/ab/3e/f4180630de1654c036d2d852fbe6f8fb56ac283cf35cc4f7cf0627953da5/karl-0.4.2.tar.gz" } ], "0.4.7": [ { "comment_text": "", "digests": { "md5": "4c0bee390ef6bc843748b56226f60bd4", "sha256": "483c266e4597951b87ab25c683ab025094e639dd37ed2bbc3ce8736e4da0ca64" }, "downloads": -1, "filename": "karl-0.4.7-py3-none-any.whl", "has_sig": false, "md5_digest": "4c0bee390ef6bc843748b56226f60bd4", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 14782, "upload_time": "2019-01-23T10:01:20", "url": "https://files.pythonhosted.org/packages/44/8b/5ea01e8f92471502e9f1bd100ca29ee3d83b62cfec53db93946d56658f96/karl-0.4.7-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "57118d3938a93a42880ed0e6648cf594", "sha256": "76313333b5e25549047c38f997c14735c52ef0259c989d9c3c9a814df0ed7958" }, "downloads": -1, "filename": "karl-0.4.7.tar.gz", "has_sig": false, "md5_digest": "57118d3938a93a42880ed0e6648cf594", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 13340, "upload_time": "2019-01-23T10:01:22", "url": "https://files.pythonhosted.org/packages/99/5e/982a1d0f38bdac77c152771025ec7f117d476723ee55fdd1d09c26ee1462/karl-0.4.7.tar.gz" } ], "0.4.8": [ { "comment_text": "", "digests": { "md5": "3d2a13c1be0f68009756867ea9732820", "sha256": "25941100c6dfbe8c9f06f23d642aa80ad5e3fd7a543d5396d3d1f246941f91da" }, "downloads": -1, "filename": "karl-0.4.8-py3-none-any.whl", "has_sig": false, "md5_digest": "3d2a13c1be0f68009756867ea9732820", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 14921, "upload_time": "2019-01-24T12:27:27", "url": "https://files.pythonhosted.org/packages/1f/18/77d2f6b239f0387fcceb9352172a57ac816aedb6ad05dd2b328022934410/karl-0.4.8-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "2016746c8d8295abca15d192b15e1984", "sha256": "f0707f90c69a864423f086c347c94c1397c8837ac9bdf03f97c75afe28ad386c" }, "downloads": -1, "filename": "karl-0.4.8.tar.gz", "has_sig": false, "md5_digest": "2016746c8d8295abca15d192b15e1984", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 13625, "upload_time": "2019-01-24T12:27:29", "url": "https://files.pythonhosted.org/packages/bb/0e/d80d4bbd164553389b670eee8b0f83a906cbadb281ddaf1ad289e7f51a60/karl-0.4.8.tar.gz" } ], "0.4.9": [ { "comment_text": "", "digests": { "md5": "24087e6b01881295942f83011c402cee", "sha256": "9b2834a7c1813d14db7d373c9a9efd1744ad9be6e53580bc808661d861cd89b0" }, "downloads": -1, "filename": "karl-0.4.9.tar.gz", "has_sig": false, "md5_digest": "24087e6b01881295942f83011c402cee", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 13666, "upload_time": "2019-02-01T18:02:40", "url": "https://files.pythonhosted.org/packages/1b/0a/3e5bfe6d6ca72e784ec878dcc554cdebba6a4860a272f3363ccf13cbe7c1/karl-0.4.9.tar.gz" } ], "0.5.0": [ { "comment_text": "", "digests": { "md5": "0b2e8e409a8101f3c7239289f5cc9a2e", "sha256": "d166ea7f8087b57f68051626e11e74b15a6d1f69d10c665e67560ee75a5136d7" }, "downloads": -1, "filename": "karl-0.5.0-py3-none-any.whl", "has_sig": false, "md5_digest": "0b2e8e409a8101f3c7239289f5cc9a2e", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 15453, "upload_time": "2019-05-23T13:39:32", "url": "https://files.pythonhosted.org/packages/f5/f8/78ce5a911bc491ad459b455cb5f3ea8e0cad8d103df6b95b83b21079da4e/karl-0.5.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "93369477b7b7db0424fedfb4ef633f16", "sha256": "3a78fed7289ff253e2e2d97b6c6d88134d81ca9b7472917efa565ce389d7be14" }, "downloads": -1, "filename": "karl-0.5.0.tar.gz", "has_sig": false, "md5_digest": "93369477b7b7db0424fedfb4ef633f16", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 14063, "upload_time": "2019-05-23T13:39:33", "url": "https://files.pythonhosted.org/packages/7a/43/caa814c64586be65183511a43c83bdbf0d8433e667c959f66f92e4a507d0/karl-0.5.0.tar.gz" } ], "0.5.1": [ { "comment_text": "", "digests": { "md5": "79b68fc88777e1e663903374ec30dfac", "sha256": "71c4b1fe250866c6b01825192cf8cb83d597cd4e0edb2f3d5b1440ba84a3b945" }, "downloads": -1, "filename": "karl-0.5.1-py3-none-any.whl", "has_sig": false, "md5_digest": "79b68fc88777e1e663903374ec30dfac", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 15663, "upload_time": "2019-05-23T14:21:03", "url": "https://files.pythonhosted.org/packages/be/4f/cf2eb3059ff3ac6a87adbfbde085fe6ca0b1ec8f2c520df06ac31b3f890f/karl-0.5.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "6fa4a0d424e6779e05442a2a3ed29227", "sha256": "008143c9fe786a815550a1c5967922d1cfbd4b9e1b6b0c6203cd8feea85159a0" }, "downloads": -1, "filename": "karl-0.5.1.tar.gz", "has_sig": false, "md5_digest": "6fa4a0d424e6779e05442a2a3ed29227", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 14261, "upload_time": "2019-05-23T14:21:05", "url": "https://files.pythonhosted.org/packages/fa/c1/7be1bb397e5d3031b58c2793d8b63e424c285a3f5fa4d8e98890ac3a19e0/karl-0.5.1.tar.gz" } ], "0.5.2": [ { "comment_text": "", "digests": { "md5": "731aeba2c7c16385087d570faf950c16", "sha256": "a406bc232e999af71a7ad6249eed983dae8c5c174bfc655b05d1114d52c18978" }, "downloads": -1, "filename": "karl-0.5.2-py3-none-any.whl", "has_sig": false, "md5_digest": "731aeba2c7c16385087d570faf950c16", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 15697, "upload_time": "2019-05-25T15:38:17", "url": "https://files.pythonhosted.org/packages/f6/42/d0b673bfd8012f8a022b5783465eaa15fd9e9a21c09d1a021f1bb298145a/karl-0.5.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "1fb5aa64c2b045213eec54f5973f562a", "sha256": "eb299cba2f4027f09d411c5ba691cc44d468b7d700e2c6aec2fd2e8bd74b5ff1" }, "downloads": -1, "filename": "karl-0.5.2.tar.gz", "has_sig": false, "md5_digest": "1fb5aa64c2b045213eec54f5973f562a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 14330, "upload_time": "2019-05-25T15:38:19", "url": "https://files.pythonhosted.org/packages/ac/03/d38f7c6b0eab6a72621c44e8ad27cb0a7980909731245eaaac6ced8a890b/karl-0.5.2.tar.gz" } ], "0.5.4": [ { "comment_text": "", "digests": { "md5": "661ade6640ea306b3e71627d957dc617", "sha256": "2a7f0735792d8fad98b99adced25fb98c0fd90db63a5912967a1b83ba6bac2c6" }, "downloads": -1, "filename": "karl-0.5.4.tar.gz", "has_sig": false, "md5_digest": "661ade6640ea306b3e71627d957dc617", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 14223, "upload_time": "2019-05-31T13:58:21", "url": "https://files.pythonhosted.org/packages/93/23/eb4d383c0220607f4ca8e623edb066f7edc02a74c246601d2c7ebb39b694/karl-0.5.4.tar.gz" } ], "0.5.8": [ { "comment_text": "", "digests": { "md5": "f04de1f01e7b41f4957a83912b04fe1c", "sha256": "1c54bbaddf180f24cf2b55ae018369a5dc1db8ecf2fd912d792c944fbe038e76" }, "downloads": -1, "filename": "karl-0.5.8.tar.gz", "has_sig": false, "md5_digest": "f04de1f01e7b41f4957a83912b04fe1c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 14233, "upload_time": "2019-06-21T21:54:59", "url": "https://files.pythonhosted.org/packages/f2/26/7d146f3acc2092a463bae70826b91c605cd51da7bee79e0241020ac753e2/karl-0.5.8.tar.gz" } ], "0.5.9": [ { "comment_text": "", "digests": { "md5": "3cad5f4145fe9cfecf4ca8da5513e93e", "sha256": "48b7c13b79ed080a26be2522da6f6327768bb1f21901e0b415419c75b7a0c617" }, "downloads": -1, "filename": "karl-0.5.9.tar.gz", "has_sig": false, "md5_digest": "3cad5f4145fe9cfecf4ca8da5513e93e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 14221, "upload_time": "2019-07-01T10:29:56", "url": "https://files.pythonhosted.org/packages/e3/7e/e2522e64181ae38108afcf5f922d5d4671d70948fdaef69f4853430bd5a4/karl-0.5.9.tar.gz" } ], "0.6.0": [ { "comment_text": "", "digests": { "md5": "016a7dfca05bd987ec80413d942457ff", "sha256": "bffedbbdc082757edead8fca39044a862512f5a6bf1d83ba35e31f7fc72f09f1" }, "downloads": -1, "filename": "karl-0.6.0.tar.gz", "has_sig": false, "md5_digest": "016a7dfca05bd987ec80413d942457ff", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 14388, "upload_time": "2019-07-01T13:04:14", "url": "https://files.pythonhosted.org/packages/eb/c1/79452d1a8c6064ee64ddfe5d8960ae0f562d5a62d12220b9a184f95dd0b4/karl-0.6.0.tar.gz" } ], "0.6.1": [ { "comment_text": "", "digests": { "md5": "2e136b5a31d45f533a71a9afcbf93d6c", "sha256": "878b08e8a054c04aed9f88517f413c5414d0ab2b6a8b262c0dd7129e91ee338b" }, "downloads": -1, "filename": "karl-0.6.1.tar.gz", "has_sig": false, "md5_digest": "2e136b5a31d45f533a71a9afcbf93d6c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 14391, "upload_time": "2019-07-02T06:41:50", "url": "https://files.pythonhosted.org/packages/fb/bb/253de1945336b73e8fb527f8dc49c70b1f83edc21406d98c282c3bcb6aae/karl-0.6.1.tar.gz" } ], "0.6.2": [ { "comment_text": "", "digests": { "md5": "d96084586b7518134171dbf940385afa", "sha256": "203519a0b3f3ca0385cf89ec5af406a2d5cddc885d7c7b57ddbf505ef00f442e" }, "downloads": -1, "filename": "karl-0.6.2.tar.gz", "has_sig": false, "md5_digest": "d96084586b7518134171dbf940385afa", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 14362, "upload_time": "2019-07-02T09:21:27", "url": "https://files.pythonhosted.org/packages/af/5c/3a33d44b52adc687ff359482c2fc7f9d2c54af9888d0d44f71c1d94b18fd/karl-0.6.2.tar.gz" } ], "0.6.4": [ { "comment_text": "", "digests": { "md5": "4e915326474a2000a2f0d1aae1a7dda6", "sha256": "6e5eede28baed3577368b5a9b961142e638e9ec479b01e6812a468267a8da744" }, "downloads": -1, "filename": "karl-0.6.4.tar.gz", "has_sig": false, "md5_digest": "4e915326474a2000a2f0d1aae1a7dda6", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 14350, "upload_time": "2019-07-03T17:14:51", "url": "https://files.pythonhosted.org/packages/e1/0e/89808a44c37f6a601a7140e923f32beb6478f986787b2526ce4f7df21b3f/karl-0.6.4.tar.gz" } ], "0.6.5": [ { "comment_text": "", "digests": { "md5": "f578fe51c9834a3252a36afca882b8d4", "sha256": "9563b25118c776df099541e0a4e7b28e8135045acb238cf0f59c7ee1316e2ac7" }, "downloads": -1, "filename": "karl-0.6.5.tar.gz", "has_sig": false, "md5_digest": "f578fe51c9834a3252a36afca882b8d4", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 14420, "upload_time": "2019-07-06T09:09:22", "url": "https://files.pythonhosted.org/packages/6d/e0/38d75e2568c84905b8bb8a44c3ac1f8a94600d8471b307bafdae58252a85/karl-0.6.5.tar.gz" } ], "0.7.0": [ { "comment_text": "", "digests": { "md5": "1002fa05bba14d3097e250b4d816a1d9", "sha256": "054ca62f4d130b00e3f332dc876841429facf64733ba8b5bdab01da123a9c850" }, "downloads": -1, "filename": "karl-0.7.0.tar.gz", "has_sig": false, "md5_digest": "1002fa05bba14d3097e250b4d816a1d9", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 15439, "upload_time": "2019-07-06T10:24:26", "url": "https://files.pythonhosted.org/packages/03/3a/ff7e50b62cbf6c3602c7651db0dd1ab7123232fde1835e7bd7f31346a9ce/karl-0.7.0.tar.gz" } ], "0.7.1": [ { "comment_text": "", "digests": { "md5": "755e6784280f3a831a0a5492cfbdeab3", "sha256": "c3b088374851645d09aacc27bb81fd8ea6bfc56314d8da2319630f42205ebcbd" }, "downloads": -1, "filename": "karl-0.7.1.tar.gz", "has_sig": false, "md5_digest": "755e6784280f3a831a0a5492cfbdeab3", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 15443, "upload_time": "2019-07-09T08:42:19", "url": "https://files.pythonhosted.org/packages/ad/84/35f4d87d1486c1c36bd5ee3c4de6f978e954342463337d2d258a4e5caa8e/karl-0.7.1.tar.gz" } ], "0.7.2": [ { "comment_text": "", "digests": { "md5": "81a505f24fb88e81b94e39d2ad312494", "sha256": "5a41a59fd4aed67552243dd9197582668d5e3b2d9d93b99a0f3fd4f9c537a6c3" }, "downloads": -1, "filename": "karl-0.7.2.tar.gz", "has_sig": false, "md5_digest": "81a505f24fb88e81b94e39d2ad312494", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 15438, "upload_time": "2019-07-12T13:18:01", "url": "https://files.pythonhosted.org/packages/bb/2c/ac59e0ae607227eefeb37ce89d0c5428fe58f2e6f4446376b9c17a319b63/karl-0.7.2.tar.gz" } ], "0.7.3": [ { "comment_text": "", "digests": { "md5": "79b68f0f4b45f965d80a8596d8a2a31b", "sha256": "5d0905d1c42bdd738ea133e6834e6b6a3ad7ec3a2bed0b7788ce8ad253388949" }, "downloads": -1, "filename": "karl-0.7.3.tar.gz", "has_sig": false, "md5_digest": "79b68f0f4b45f965d80a8596d8a2a31b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 15441, "upload_time": "2019-07-22T15:14:36", "url": "https://files.pythonhosted.org/packages/97/55/453ee24ca504fcab6ee0a5485587c21914351776cbd74560ad8203a532f0/karl-0.7.3.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "79b68f0f4b45f965d80a8596d8a2a31b", "sha256": "5d0905d1c42bdd738ea133e6834e6b6a3ad7ec3a2bed0b7788ce8ad253388949" }, "downloads": -1, "filename": "karl-0.7.3.tar.gz", "has_sig": false, "md5_digest": "79b68f0f4b45f965d80a8596d8a2a31b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 15441, "upload_time": "2019-07-22T15:14:36", "url": "https://files.pythonhosted.org/packages/97/55/453ee24ca504fcab6ee0a5485587c21914351776cbd74560ad8203a532f0/karl-0.7.3.tar.gz" } ] }