{"action":"created","comment":{"url":"https://api.github.com/repos/symfony/symfony/pulls/comments/31392406","id":31392406,"diff_hunk":"@@ -11,249 +11,42 @@\n \n namespace Symfony\\Component\\HttpKernel\\Profiler;\n \n-class MongoDbProfilerStorage implements ProfilerStorageInterface\n-{\n-    protected $dsn;\n-    protected $lifetime;\n-    private $mongo;\n-\n-    /**\n-     * Constructor.\n-     *\n-     * @param string $dsn      A data source name\n-     * @param string $username Not used\n-     * @param string $password Not used\n-     * @param int    $lifetime The lifetime to use for the purge\n-     */\n-    public function __construct($dsn, $username = '', $password = '', $lifetime = 86400)\n-    {\n-        $this->dsn = $dsn;\n-        $this->lifetime = (int) $lifetime;\n-    }\n-\n-    /**\n-     * {@inheritdoc}\n-     */\n-    public function find($ip, $url, $limit, $method, $start = null, $end = null)\n-    {\n-        $cursor = $this->getMongo()->find($this->buildQuery($ip, $url, $method, $start, $end), array('_id', 'parent', 'ip', 'method', 'url', 'time', 'status_code'))->sort(array('time' => -1))->limit($limit);\n-\n-        $tokens = array();\n-        foreach ($cursor as $profile) {\n-            $tokens[] = $this->getData($profile);\n-        }\n-\n-        return $tokens;\n-    }\n-\n-    /**\n-     * {@inheritdoc}\n-     */\n-    public function purge()\n-    {\n-        $this->getMongo()->remove(array());\n-    }\n-\n-    /**\n-     * {@inheritdoc}\n-     */\n-    public function read($token)\n-    {\n-        $profile = $this->getMongo()->findOne(array('_id' => $token, 'data' => array('$exists' => true)));\n-\n-        if (null !== $profile) {\n-            $profile = $this->createProfileFromData($this->getData($profile));\n-        }\n-\n-        return $profile;\n-    }\n-\n-    /**\n-     * {@inheritdoc}\n-     */\n-    public function write(Profile $profile)\n-    {\n-        $this->cleanup();\n-\n-        $record = array(\n-            '_id' => $profile->getToken(),\n-            'parent' => $profile->getParentToken(),\n-            'data' => base64_encode(serialize($profile->getCollectors())),\n-            'ip' => $profile->getIp(),\n-            'method' => $profile->getMethod(),\n-            'url' => $profile->getUrl(),\n-            'time' => $profile->getTime(),\n-            'status_code' => $profile->getStatusCode(),\n-        );\n-\n-        $result = $this->getMongo()->update(array('_id' => $profile->getToken()), array_filter($record, function ($v) { return !empty($v); }), array('upsert' => true));\n-\n-        return (bool) (isset($result['ok']) ? $result['ok'] : $result);\n-    }\n-\n-    /**\n-     * Internal convenience method that returns the instance of the MongoDB Collection.\n-     *\n-     * @return \\MongoCollection\n-     *\n-     * @throws \\RuntimeException\n-     */\n-    protected function getMongo()\n-    {\n-        if (null !== $this->mongo) {\n-            return $this->mongo;\n-        }\n-\n-        if (!$parsedDsn = $this->parseDsn($this->dsn)) {\n-            throw new \\RuntimeException(sprintf('Please check your configuration. You are trying to use MongoDB with an invalid dsn \"%s\". The expected format is \"mongodb://[user:pass@]host/database/collection\"', $this->dsn));\n-        }\n-\n-        list($server, $database, $collection) = $parsedDsn;\n-        $mongoClass = version_compare(phpversion('mongo'), '1.3.0', '<') ? '\\Mongo' : '\\MongoClient';\n-        $mongo = new $mongoClass($server);\n-\n-        return $this->mongo = $mongo->selectCollection($database, $collection);\n-    }\n-\n-    /**\n-     * @param array $data\n-     *\n-     * @return Profile\n-     */\n-    protected function createProfileFromData(array $data)\n-    {\n-        $profile = $this->getProfile($data);\n-\n-        if ($data['parent']) {\n-            $parent = $this->getMongo()->findOne(array('_id' => $data['parent'], 'data' => array('$exists' => true)));\n-            if ($parent) {\n-                $profile->setParent($this->getProfile($this->getData($parent)));\n-            }\n-        }\n-\n-        $profile->setChildren($this->readChildren($data['token']));\n+use Symfony\\Component\\Profiler\\Storage\\MongoDbProfilerStorage as BaseMongoDbProfilerStorage;\n \n-        return $profile;\n-    }\n-\n-    /**\n-     * @param string $token\n-     *\n-     * @return Profile[] An array of Profile instances\n-     */\n-    protected function readChildren($token)\n-    {\n-        $profiles = array();\n-\n-        $cursor = $this->getMongo()->find(array('parent' => $token, 'data' => array('$exists' => true)));\n-        foreach ($cursor as $d) {\n-            $profiles[] = $this->getProfile($this->getData($d));\n-        }\n-\n-        return $profiles;\n-    }\n-\n-    protected function cleanup()\n-    {\n-        $this->getMongo()->remove(array('time' => array('$lt' => time() - $this->lifetime)));\n-    }\n-\n-    /**\n-     * @param string $ip\n-     * @param string $url\n-     * @param string $method\n-     * @param int    $start\n-     * @param int    $end\n-     *\n-     * @return array\n-     */\n-    private function buildQuery($ip, $url, $method, $start, $end)\n-    {\n-        $query = array();\n-\n-        if (!empty($ip)) {\n-            $query['ip'] = $ip;\n-        }\n-\n-        if (!empty($url)) {\n-            $query['url'] = $url;\n-        }\n-\n-        if (!empty($method)) {\n-            $query['method'] = $method;\n-        }\n-\n-        if (!empty($start) || !empty($end)) {\n-            $query['time'] = array();\n-        }\n-\n-        if (!empty($start)) {\n-            $query['time']['$gte'] = $start;\n-        }\n-\n-        if (!empty($end)) {\n-            $query['time']['$lte'] = $end;\n-        }\n-\n-        return $query;\n-    }\n-\n-    /**\n-     * @param array $data\n-     *\n-     * @return array\n-     */\n-    private function getData(array $data)\n-    {\n-        return array(\n-            'token' => $data['_id'],\n-            'parent' => isset($data['parent']) ? $data['parent'] : null,\n-            'ip' => isset($data['ip']) ? $data['ip'] : null,\n-            'method' => isset($data['method']) ? $data['method'] : null,\n-            'url' => isset($data['url']) ? $data['url'] : null,\n-            'time' => isset($data['time']) ? $data['time'] : null,\n-            'data' => isset($data['data']) ? $data['data'] : null,\n-            'status_code' => isset($data['status_code']) ? $data['status_code'] : null,\n-        );\n-    }\n-\n-    /**\n-     * @param array $data\n-     *\n-     * @return Profile\n-     */\n-    private function getProfile(array $data)\n+/**\n+ * Class MongoDbProfilerStorage\n+ * @package Symfony\\Component\\HttpKernel\\Profiler","path":"src/Symfony/Component/HttpKernel/Profiler/MongoDbProfilerStorage.php","position":219,"original_position":219,"commit_id":"66196fbb3a567b595580dba786af6fbf6abd9efd","original_commit_id":"66196fbb3a567b595580dba786af6fbf6abd9efd","user":{"login":"dosten","id":510842,"avatar_url":"https://avatars.githubusercontent.com/u/510842?v=3","gravatar_id":"","url":"https://api.github.com/users/dosten","html_url":"https://github.com/dosten","followers_url":"https://api.github.com/users/dosten/followers","following_url":"https://api.github.com/users/dosten/following{/other_user}","gists_url":"https://api.github.com/users/dosten/gists{/gist_id}","starred_url":"https://api.github.com/users/dosten/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/dosten/subscriptions","organizations_url":"https://api.github.com/users/dosten/orgs","repos_url":"https://api.github.com/users/dosten/repos","events_url":"https://api.github.com/users/dosten/events{/privacy}","received_events_url":"https://api.github.com/users/dosten/received_events","type":"User","site_admin":false},"body":"We don't use the `@package` tag","created_at":"2015-05-31T17:24:30Z","updated_at":"2015-05-31T17:24:30Z","html_url":"https://github.com/symfony/symfony/pull/14809#discussion_r31392406","pull_request_url":"https://api.github.com/repos/symfony/symfony/pulls/14809","_links":{"self":{"href":"https://api.github.com/repos/symfony/symfony/pulls/comments/31392406"},"html":{"href":"https://github.com/symfony/symfony/pull/14809#discussion_r31392406"},"pull_request":{"href":"https://api.github.com/repos/symfony/symfony/pulls/14809"}}},"pull_request":{"url":"https://api.github.com/repos/symfony/symfony/pulls/14809","id":36585512,"html_url":"https://github.com/symfony/symfony/pull/14809","diff_url":"https://github.com/symfony/symfony/pull/14809.diff","patch_url":"https://github.com/symfony/symfony/pull/14809.patch","issue_url":"https://api.github.com/repos/symfony/symfony/issues/14809","number":14809,"state":"open","locked":false,"title":"Extract the profiler to a new component","user":{"login":"jelte","id":799841,"avatar_url":"https://avatars.githubusercontent.com/u/799841?v=3","gravatar_id":"","url":"https://api.github.com/users/jelte","html_url":"https://github.com/jelte","followers_url":"https://api.github.com/users/jelte/followers","following_url":"https://api.github.com/users/jelte/following{/other_user}","gists_url":"https://api.github.com/users/jelte/gists{/gist_id}","starred_url":"https://api.github.com/users/jelte/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jelte/subscriptions","organizations_url":"https://api.github.com/users/jelte/orgs","repos_url":"https://api.github.com/users/jelte/repos","events_url":"https://api.github.com/users/jelte/events{/privacy}","received_events_url":"https://api.github.com/users/jelte/received_events","type":"User","site_admin":false},"body":"| Q             | A\r\n| ------------- | ---\r\n| Bug fix?      | no\r\n| New feature?  | yes\r\n| BC breaks?    | no\r\n| Deprecations? | yes\r\n| Tests pass?   | yes\r\n| Fixed tickets | n/a\r\n| License       | MIT\r\n| Doc PR        | not use how to handle documentation\r\n\r\n**This pull request is a replacement for https://github.com/symfony/symfony/pull/10374**\r\n\r\nThis pull request extracts the HTTP profiler from the HttpKernel component to a new dedicated component: Profiler.\r\n\r\nThe goals are to improve the general architecture and usability of the component as stated by @webmozart ( https://github.com/symfony/symfony/pull/10374#issuecomment-36616624 )\r\nas it stands now no BC is broken as the original DataCollectors are still supported by the new Profiler.\r\n\r\nNew DataCollectors and Profiler no longer require a Request.\r\nDataCollectors are should be able to collect data from other sources, which will prevent some ugly hacks that were previously required, they will still require to listen to events to collect the data, I don't see a way around this, but this doesn't seem a big issue.\r\n\r\nIf a DataCollector requires the Request, it should have the RequestStack and get it from there, the Responses can be added just like Controllers are added, by subscribing to the Kernel Events.\r\n\r\n```php\r\n$httpProfiler = new HttpProfiler($requestStack, $storageInterface);\r\n$httpProfiler->addCollector(new RequestDataCollector($requestStack));\r\n$httpProfiler->addCollector(new ExceptionDataCollector());\r\n$httpProfiler->addCollector(new FormDataCollector());\r\n\r\n// Runtime data is collected\r\n$profile = $httpProfiler->profile();\r\n\r\n$requestData = $profile->get('request');\r\n\r\n// Late data is collected\r\n$httpProfiler->save($profile);\r\n```\r\n\r\n**Ideas**\r\n- provide ConsoleProfiler, will require some interface changes to the WebProfiler or a console version\r\n\r\n**Todo's**\r\n- [ ] gather feedback for my changes\r\n- [ ] add additional tests to increase coverage.\r\n- [ ] add README.md\r\n- [ ] submit changes to the documentation\r\n- [x] Test with Symfony demo\r\n\r\nSpecial thanks to @stof & @dosten for helping me out on the initial pull request ( https://github.com/symfony/symfony/pull/14763 ) ","created_at":"2015-05-31T17:09:46Z","updated_at":"2015-05-31T17:24:30Z","closed_at":null,"merged_at":null,"merge_commit_sha":"b07b63a0f8c3848d555224ebb936083d90d190eb","assignee":null,"milestone":null,"commits_url":"https://api.github.com/repos/symfony/symfony/pulls/14809/commits","review_comments_url":"https://api.github.com/repos/symfony/symfony/pulls/14809/comments","review_comment_url":"https://api.github.com/repos/symfony/symfony/pulls/comments{/number}","comments_url":"https://api.github.com/repos/symfony/symfony/issues/14809/comments","statuses_url":"https://api.github.com/repos/symfony/symfony/statuses/66196fbb3a567b595580dba786af6fbf6abd9efd","head":{"label":"jelte:profiler","ref":"profiler","sha":"66196fbb3a567b595580dba786af6fbf6abd9efd","user":{"login":"jelte","id":799841,"avatar_url":"https://avatars.githubusercontent.com/u/799841?v=3","gravatar_id":"","url":"https://api.github.com/users/jelte","html_url":"https://github.com/jelte","followers_url":"https://api.github.com/users/jelte/followers","following_url":"https://api.github.com/users/jelte/following{/other_user}","gists_url":"https://api.github.com/users/jelte/gists{/gist_id}","starred_url":"https://api.github.com/users/jelte/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jelte/subscriptions","organizations_url":"https://api.github.com/users/jelte/orgs","repos_url":"https://api.github.com/users/jelte/repos","events_url":"https://api.github.com/users/jelte/events{/privacy}","received_events_url":"https://api.github.com/users/jelte/received_events","type":"User","site_admin":false},"repo":{"id":35941838,"name":"symfony","full_name":"jelte/symfony","owner":{"login":"jelte","id":799841,"avatar_url":"https://avatars.githubusercontent.com/u/799841?v=3","gravatar_id":"","url":"https://api.github.com/users/jelte","html_url":"https://github.com/jelte","followers_url":"https://api.github.com/users/jelte/followers","following_url":"https://api.github.com/users/jelte/following{/other_user}","gists_url":"https://api.github.com/users/jelte/gists{/gist_id}","starred_url":"https://api.github.com/users/jelte/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jelte/subscriptions","organizations_url":"https://api.github.com/users/jelte/orgs","repos_url":"https://api.github.com/users/jelte/repos","events_url":"https://api.github.com/users/jelte/events{/privacy}","received_events_url":"https://api.github.com/users/jelte/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/jelte/symfony","description":"The Symfony PHP framework","fork":true,"url":"https://api.github.com/repos/jelte/symfony","forks_url":"https://api.github.com/repos/jelte/symfony/forks","keys_url":"https://api.github.com/repos/jelte/symfony/keys{/key_id}","collaborators_url":"https://api.github.com/repos/jelte/symfony/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/jelte/symfony/teams","hooks_url":"https://api.github.com/repos/jelte/symfony/hooks","issue_events_url":"https://api.github.com/repos/jelte/symfony/issues/events{/number}","events_url":"https://api.github.com/repos/jelte/symfony/events","assignees_url":"https://api.github.com/repos/jelte/symfony/assignees{/user}","branches_url":"https://api.github.com/repos/jelte/symfony/branches{/branch}","tags_url":"https://api.github.com/repos/jelte/symfony/tags","blobs_url":"https://api.github.com/repos/jelte/symfony/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/jelte/symfony/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/jelte/symfony/git/refs{/sha}","trees_url":"https://api.github.com/repos/jelte/symfony/git/trees{/sha}","statuses_url":"https://api.github.com/repos/jelte/symfony/statuses/{sha}","languages_url":"https://api.github.com/repos/jelte/symfony/languages","stargazers_url":"https://api.github.com/repos/jelte/symfony/stargazers","contributors_url":"https://api.github.com/repos/jelte/symfony/contributors","subscribers_url":"https://api.github.com/repos/jelte/symfony/subscribers","subscription_url":"https://api.github.com/repos/jelte/symfony/subscription","commits_url":"https://api.github.com/repos/jelte/symfony/commits{/sha}","git_commits_url":"https://api.github.com/repos/jelte/symfony/git/commits{/sha}","comments_url":"https://api.github.com/repos/jelte/symfony/comments{/number}","issue_comment_url":"https://api.github.com/repos/jelte/symfony/issues/comments{/number}","contents_url":"https://api.github.com/repos/jelte/symfony/contents/{+path}","compare_url":"https://api.github.com/repos/jelte/symfony/compare/{base}...{head}","merges_url":"https://api.github.com/repos/jelte/symfony/merges","archive_url":"https://api.github.com/repos/jelte/symfony/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/jelte/symfony/downloads","issues_url":"https://api.github.com/repos/jelte/symfony/issues{/number}","pulls_url":"https://api.github.com/repos/jelte/symfony/pulls{/number}","milestones_url":"https://api.github.com/repos/jelte/symfony/milestones{/number}","notifications_url":"https://api.github.com/repos/jelte/symfony/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/jelte/symfony/labels{/name}","releases_url":"https://api.github.com/repos/jelte/symfony/releases{/id}","created_at":"2015-05-20T10:37:38Z","updated_at":"2015-05-20T10:37:55Z","pushed_at":"2015-05-31T17:07:58Z","git_url":"git://github.com/jelte/symfony.git","ssh_url":"git@github.com:jelte/symfony.git","clone_url":"https://github.com/jelte/symfony.git","svn_url":"https://github.com/jelte/symfony","homepage":"symfony.com","size":56960,"stargazers_count":0,"watchers_count":0,"language":"PHP","has_issues":false,"has_downloads":false,"has_wiki":false,"has_pages":false,"forks_count":0,"mirror_url":null,"open_issues_count":0,"forks":0,"open_issues":0,"watchers":0,"default_branch":"2.7"}},"base":{"label":"symfony:2.8","ref":"2.8","sha":"2983ecbf3d74900e49981cca002957aa88f8a74a","user":{"login":"symfony","id":143937,"avatar_url":"https://avatars.githubusercontent.com/u/143937?v=3","gravatar_id":"","url":"https://api.github.com/users/symfony","html_url":"https://github.com/symfony","followers_url":"https://api.github.com/users/symfony/followers","following_url":"https://api.github.com/users/symfony/following{/other_user}","gists_url":"https://api.github.com/users/symfony/gists{/gist_id}","starred_url":"https://api.github.com/users/symfony/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/symfony/subscriptions","organizations_url":"https://api.github.com/users/symfony/orgs","repos_url":"https://api.github.com/users/symfony/repos","events_url":"https://api.github.com/users/symfony/events{/privacy}","received_events_url":"https://api.github.com/users/symfony/received_events","type":"Organization","site_admin":false},"repo":{"id":458058,"name":"symfony","full_name":"symfony/symfony","owner":{"login":"symfony","id":143937,"avatar_url":"https://avatars.githubusercontent.com/u/143937?v=3","gravatar_id":"","url":"https://api.github.com/users/symfony","html_url":"https://github.com/symfony","followers_url":"https://api.github.com/users/symfony/followers","following_url":"https://api.github.com/users/symfony/following{/other_user}","gists_url":"https://api.github.com/users/symfony/gists{/gist_id}","starred_url":"https://api.github.com/users/symfony/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/symfony/subscriptions","organizations_url":"https://api.github.com/users/symfony/orgs","repos_url":"https://api.github.com/users/symfony/repos","events_url":"https://api.github.com/users/symfony/events{/privacy}","received_events_url":"https://api.github.com/users/symfony/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/symfony/symfony","description":"The Symfony PHP framework","fork":false,"url":"https://api.github.com/repos/symfony/symfony","forks_url":"https://api.github.com/repos/symfony/symfony/forks","keys_url":"https://api.github.com/repos/symfony/symfony/keys{/key_id}","collaborators_url":"https://api.github.com/repos/symfony/symfony/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/symfony/symfony/teams","hooks_url":"https://api.github.com/repos/symfony/symfony/hooks","issue_events_url":"https://api.github.com/repos/symfony/symfony/issues/events{/number}","events_url":"https://api.github.com/repos/symfony/symfony/events","assignees_url":"https://api.github.com/repos/symfony/symfony/assignees{/user}","branches_url":"https://api.github.com/repos/symfony/symfony/branches{/branch}","tags_url":"https://api.github.com/repos/symfony/symfony/tags","blobs_url":"https://api.github.com/repos/symfony/symfony/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/symfony/symfony/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/symfony/symfony/git/refs{/sha}","trees_url":"https://api.github.com/repos/symfony/symfony/git/trees{/sha}","statuses_url":"https://api.github.com/repos/symfony/symfony/statuses/{sha}","languages_url":"https://api.github.com/repos/symfony/symfony/languages","stargazers_url":"https://api.github.com/repos/symfony/symfony/stargazers","contributors_url":"https://api.github.com/repos/symfony/symfony/contributors","subscribers_url":"https://api.github.com/repos/symfony/symfony/subscribers","subscription_url":"https://api.github.com/repos/symfony/symfony/subscription","commits_url":"https://api.github.com/repos/symfony/symfony/commits{/sha}","git_commits_url":"https://api.github.com/repos/symfony/symfony/git/commits{/sha}","comments_url":"https://api.github.com/repos/symfony/symfony/comments{/number}","issue_comment_url":"https://api.github.com/repos/symfony/symfony/issues/comments{/number}","contents_url":"https://api.github.com/repos/symfony/symfony/contents/{+path}","compare_url":"https://api.github.com/repos/symfony/symfony/compare/{base}...{head}","merges_url":"https://api.github.com/repos/symfony/symfony/merges","archive_url":"https://api.github.com/repos/symfony/symfony/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/symfony/symfony/downloads","issues_url":"https://api.github.com/repos/symfony/symfony/issues{/number}","pulls_url":"https://api.github.com/repos/symfony/symfony/pulls{/number}","milestones_url":"https://api.github.com/repos/symfony/symfony/milestones{/number}","notifications_url":"https://api.github.com/repos/symfony/symfony/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/symfony/symfony/labels{/name}","releases_url":"https://api.github.com/repos/symfony/symfony/releases{/id}","created_at":"2010-01-04T14:21:21Z","updated_at":"2015-05-31T15:27:11Z","pushed_at":"2015-05-31T17:09:47Z","git_url":"git://github.com/symfony/symfony.git","ssh_url":"git@github.com:symfony/symfony.git","clone_url":"https://github.com/symfony/symfony.git","svn_url":"https://github.com/symfony/symfony","homepage":"symfony.com","size":1196606,"stargazers_count":10257,"watchers_count":10257,"language":"PHP","has_issues":true,"has_downloads":false,"has_wiki":false,"has_pages":false,"forks_count":4053,"mirror_url":null,"open_issues_count":846,"forks":4053,"open_issues":846,"watchers":10257,"default_branch":"2.7"}},"_links":{"self":{"href":"https://api.github.com/repos/symfony/symfony/pulls/14809"},"html":{"href":"https://github.com/symfony/symfony/pull/14809"},"issue":{"href":"https://api.github.com/repos/symfony/symfony/issues/14809"},"comments":{"href":"https://api.github.com/repos/symfony/symfony/issues/14809/comments"},"review_comments":{"href":"https://api.github.com/repos/symfony/symfony/pulls/14809/comments"},"review_comment":{"href":"https://api.github.com/repos/symfony/symfony/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/symfony/symfony/pulls/14809/commits"},"statuses":{"href":"https://api.github.com/repos/symfony/symfony/statuses/66196fbb3a567b595580dba786af6fbf6abd9efd"}}}}