{"_id":"ugly-adapter","_rev":"19-bdcd55eae2d2323f00b08905b15f4a6b","name":"ugly-adapter","description":"get promises out of standard callback APIs","dist-tags":{"latest":"1.3.1"},"versions":{"1.0.0":{"name":"ugly-adapter","version":"1.0.0","description":"get promises out of standard callback APIs","main":"index.js","scripts":{"test":"node node_modules/.bin/mocha --harmony"},"keywords":["promise","callback","es6","yield","thenable","yieldable"],"author":{"name":"gregreimer@gmail.com"},"license":"MIT","dependencies":{"native-or-bluebird":"^1.1.2"},"devDependencies":{"co":"^4.3.1","mocha":"^2.1.0"},"gitHead":"b1ee7a09fab5f0ff600c21164f144c1db090ad83","_id":"ugly-adapter@1.0.0","_shasum":"8b31a603cb87ba7c44f677089d4b547017c443d1","_from":".","_npmVersion":"2.5.1","_nodeVersion":"0.12.0","_npmUser":{"name":"greim","email":"gregreimer@gmail.com"},"maintainers":[{"name":"greim","email":"gregreimer@gmail.com"}],"dist":{"shasum":"8b31a603cb87ba7c44f677089d4b547017c443d1","tarball":"https://registry.npmjs.org/ugly-adapter/-/ugly-adapter-1.0.0.tgz","integrity":"sha512-s552OCSHVu0mi78FWOeZhzp6kGky+HN+3LVw51FVwji+6TL4307IhXyG9embY1x/ii/ayKZ+APa9pPsSDK8xwg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHFT1wWmkhlHsgBxWAxEwCBxrAO/dBAt6XgXmpZKTvW5AiAZ2XKoBwyLLM0+nILEGeHwF748dM0CFpn1t9/HE3pdGg=="}]}},"1.0.1":{"name":"ugly-adapter","version":"1.0.1","description":"get promises out of standard callback APIs","main":"index.js","scripts":{"test":"node node_modules/.bin/mocha --harmony"},"keywords":["promise","callback","es6","yield","thenable","yieldable"],"author":{"name":"gregreimer@gmail.com"},"license":"MIT","dependencies":{"native-or-bluebird":"^1.1.2"},"devDependencies":{"co":"^4.3.1","mocha":"^2.1.0"},"gitHead":"9281a06b2c9437f42464f6e30046de23ce7dd3e7","_id":"ugly-adapter@1.0.1","_shasum":"8788dbf4f39b5c16f3240c32984043307b6bb370","_from":".","_npmVersion":"2.5.1","_nodeVersion":"0.12.0","_npmUser":{"name":"greim","email":"gregreimer@gmail.com"},"maintainers":[{"name":"greim","email":"gregreimer@gmail.com"}],"dist":{"shasum":"8788dbf4f39b5c16f3240c32984043307b6bb370","tarball":"https://registry.npmjs.org/ugly-adapter/-/ugly-adapter-1.0.1.tgz","integrity":"sha512-yKkG86jY8DOeWKm06oiS79eL89wC721eS0Tx8B5ZH/HlcS7lfJdFs1B5KsdT1Jet3Xm0OSwjnWj9OajW1cF9nA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDhYPkgSPgrfpX5kp1ZI56/Km6eUwwuJTnBnSOwDyfnEAIgNMt2mFJNDqHlY9nTg6nZW3fu2oructN+Si5WkZPuh4o="}]}},"1.0.2":{"name":"ugly-adapter","version":"1.0.2","repository":{"type":"git","url":"https://github.com/greim/ugly-adapter"},"bugs":{"url":"https://github.com/greim/ugly-adapter/issues"},"description":"get promises out of standard callback APIs","main":"index.js","scripts":{"test":"node node_modules/.bin/mocha --harmony"},"keywords":["promise","callback","es6","yield","thenable","yieldable"],"author":{"name":"gregreimer@gmail.com"},"license":"MIT","dependencies":{"native-or-bluebird":"^1.1.2"},"devDependencies":{"co":"^4.3.1","mocha":"^2.1.0"},"gitHead":"8d16f01fea84e4adccfe21451a7f3114970622bc","homepage":"https://github.com/greim/ugly-adapter","_id":"ugly-adapter@1.0.2","_shasum":"05003a8253dd1a32b7350d4c8c7736c87dfcc4e7","_from":".","_npmVersion":"2.5.1","_nodeVersion":"0.12.0","_npmUser":{"name":"greim","email":"gregreimer@gmail.com"},"maintainers":[{"name":"greim","email":"gregreimer@gmail.com"}],"dist":{"shasum":"05003a8253dd1a32b7350d4c8c7736c87dfcc4e7","tarball":"https://registry.npmjs.org/ugly-adapter/-/ugly-adapter-1.0.2.tgz","integrity":"sha512-tiQSLnao87AzmzBT0qzGJP+LZBjnNREAx603OpI76b8fEa6W9wbAKooy9qvClDzpu2Go7wJEvDsM2ASWFTjy2w==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD6HV9jzNSNs7hHWM/+M6X0ocWFF9//+I3Jv8OldjkihgIgTYluSJkgbEmux2EKNyVEcVF4hUKz3szfvcO1ABTJAA8="}]}},"1.0.3":{"name":"ugly-adapter","version":"1.0.3","repository":{"type":"git","url":"https://github.com/greim/ugly-adapter"},"bugs":{"url":"https://github.com/greim/ugly-adapter/issues"},"description":"get promises out of standard callback APIs","main":"index.js","scripts":{"test":"node node_modules/.bin/mocha --harmony"},"keywords":["promise","callback","es6","yield","thenable","yieldable"],"author":{"name":"gregreimer@gmail.com"},"license":"MIT","dependencies":{"native-or-bluebird":"^1.1.2"},"devDependencies":{"co":"^4.3.1","mocha":"^2.1.0"},"gitHead":"cea835e39c04df7e36ee0165d10251f6dedcf506","homepage":"https://github.com/greim/ugly-adapter","_id":"ugly-adapter@1.0.3","_shasum":"7ca2dd6d66d71967a4ef3d3a2a9fe7b9c99c46a6","_from":".","_npmVersion":"2.5.1","_nodeVersion":"0.12.0","_npmUser":{"name":"greim","email":"gregreimer@gmail.com"},"maintainers":[{"name":"greim","email":"gregreimer@gmail.com"}],"dist":{"shasum":"7ca2dd6d66d71967a4ef3d3a2a9fe7b9c99c46a6","tarball":"https://registry.npmjs.org/ugly-adapter/-/ugly-adapter-1.0.3.tgz","integrity":"sha512-pBfbKJksgpS5opnGdCpvIUUy+Rsx9z14Uisf1ybyz2BcZxEv6d0oaUGNbvtrAAs1inmhjkQoglgnwXbzk7YGmA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBezO7TaFjIyNxow0L+pPvD/5v0NYmNzHEkT0G2Ko3Y/AiEAt7Ho7pw7cqQpWRQk5wl3yMkaw1k4kAUNjwoZdulUCNw="}]}},"1.0.4":{"name":"ugly-adapter","version":"1.0.4","repository":{"type":"git","url":"https://github.com/greim/ugly-adapter"},"bugs":{"url":"https://github.com/greim/ugly-adapter/issues"},"description":"get promises out of standard callback APIs","main":"index.js","scripts":{"test":"node node_modules/.bin/mocha --harmony"},"keywords":["promise","callback","es6","yield","thenable","yieldable"],"author":{"name":"gregreimer@gmail.com"},"license":"MIT","dependencies":{"native-or-bluebird":"^1.1.2"},"devDependencies":{"bluebird":"^2.9.12","co":"^4.3.1","mocha":"^2.1.0","numeral":"^1.5.3"},"gitHead":"d04500fcc6d4fff02f6524fdbbe0cdd1ce2e757a","homepage":"https://github.com/greim/ugly-adapter","_id":"ugly-adapter@1.0.4","_shasum":"613583c48aaeced7dd64b67871fbbc38b90fc275","_from":".","_npmVersion":"2.5.1","_nodeVersion":"0.12.0","_npmUser":{"name":"greim","email":"gregreimer@gmail.com"},"maintainers":[{"name":"greim","email":"gregreimer@gmail.com"}],"dist":{"shasum":"613583c48aaeced7dd64b67871fbbc38b90fc275","tarball":"https://registry.npmjs.org/ugly-adapter/-/ugly-adapter-1.0.4.tgz","integrity":"sha512-sUqTQbHb9rU6X4qc89N1L++hBPNLTid2mQz+eQ7BD+eDyLjWqEk2c81UlE25O8ukj/cH5dep53wXNCeCZbOo+Q==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDwShOztFkKY6KgP2ZqWCYZoipFNimxLwzu0vLLwj8VawIhAPG6knB9az5TgF1hulrpZOOuIvlql1Hgt6XnVwc4A/+0"}]}},"1.1.0":{"name":"ugly-adapter","version":"1.1.0","repository":{"type":"git","url":"https://github.com/greim/ugly-adapter"},"bugs":{"url":"https://github.com/greim/ugly-adapter/issues"},"description":"get promises out of standard callback APIs","main":"index.js","scripts":{"test":"node node_modules/.bin/mocha --harmony"},"keywords":["promise","callback","es6","yield","thenable","yieldable"],"author":{"name":"gregreimer@gmail.com"},"license":"MIT","dependencies":{"native-or-bluebird":"^1.1.2"},"devDependencies":{"bluebird":"^2.9.12","co":"^4.3.1","mocha":"^2.1.0","numeral":"^1.5.3"},"gitHead":"4f32c3170cfaecd0510fd996c9675b61c1defe29","homepage":"https://github.com/greim/ugly-adapter","_id":"ugly-adapter@1.1.0","_shasum":"9407faf55b63b6a472ad8d4639e2adeee3e55401","_from":".","_npmVersion":"2.7.4","_nodeVersion":"0.12.2","_npmUser":{"name":"greim","email":"gregreimer@gmail.com"},"maintainers":[{"name":"greim","email":"gregreimer@gmail.com"}],"dist":{"shasum":"9407faf55b63b6a472ad8d4639e2adeee3e55401","tarball":"https://registry.npmjs.org/ugly-adapter/-/ugly-adapter-1.1.0.tgz","integrity":"sha512-LliDEuKmDWrwOmwkJeXNcshFfdWAm5HyWkSBVf4E52bqFw2izvmi0LDrBs84+eDswRhVBFDhawxZJonzmRR6Ug==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIADVT2LzgiVJExayLE6eb/bQ7zlChZY6aORw3QcpM52nAiBdpcnAWk0E7Y88S4cnW+XxqR7ZokQQri4EfxsKuw6YNQ=="}]}},"1.1.1":{"name":"ugly-adapter","version":"1.1.1","repository":{"type":"git","url":"https://github.com/greim/ugly-adapter"},"bugs":{"url":"https://github.com/greim/ugly-adapter/issues"},"description":"get promises out of standard callback APIs","main":"index.js","scripts":{"test":"node node_modules/.bin/mocha --harmony"},"keywords":["promise","callback","es6","yield","thenable","yieldable"],"author":{"name":"gregreimer@gmail.com"},"license":"MIT","dependencies":{"native-or-bluebird":"^1.1.2"},"devDependencies":{"bluebird":"^2.9.12","co":"^4.3.1","mocha":"^2.1.0","numeral":"^1.5.3"},"gitHead":"48213df7ff1a83457211914c9581e2339d7fe543","homepage":"https://github.com/greim/ugly-adapter","_id":"ugly-adapter@1.1.1","_shasum":"31e7c3c940833ecc39eada225f8d0286569244df","_from":".","_npmVersion":"2.11.2","_nodeVersion":"0.12.5","_npmUser":{"name":"greim","email":"gregreimer@gmail.com"},"maintainers":[{"name":"greim","email":"gregreimer@gmail.com"}],"dist":{"shasum":"31e7c3c940833ecc39eada225f8d0286569244df","tarball":"https://registry.npmjs.org/ugly-adapter/-/ugly-adapter-1.1.1.tgz","integrity":"sha512-jT+Ian5AlAJ/a1antzXiHn+HPOx+fdAJ2paj4lDh+rkGIxfUv76BTHHz3cWJ/n35gVc2E7Op3JoXtKNXThNuag==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCPfl6f0I/mKhac1eAPr+P+QWNhgzOX2Ozi5trGxeNF5gIhAO5uum8AgGBZDbNXwQt/19kSr8QpN01wPekrVibDy6Vz"}]}},"1.2.0":{"name":"ugly-adapter","version":"1.2.0","repository":{"type":"git","url":"https://github.com/greim/ugly-adapter"},"bugs":{"url":"https://github.com/greim/ugly-adapter/issues"},"description":"get promises out of standard callback APIs","main":"index.js","scripts":{"test":"node node_modules/.bin/mocha --harmony"},"keywords":["promise","callback","es6","es2015","es7","es2016","yield","thenable","yieldable","thunk","async","await","promisify","promify"],"author":{"name":"gregreimer@gmail.com"},"license":"MIT","dependencies":{"native-or-bluebird":"^1.1.2"},"devDependencies":{"bluebird":"^2.9.12","co":"^4.3.1","mocha":"^2.1.0","numeral":"^1.5.3"},"gitHead":"b661f11db46de73f1a709dfe43d9e02675396a16","homepage":"https://github.com/greim/ugly-adapter","_id":"ugly-adapter@1.2.0","_shasum":"79d6d4d11aa0bf296cdcebb50873ed7dad5bd7a5","_from":".","_npmVersion":"2.14.4","_nodeVersion":"4.1.2","_npmUser":{"name":"greim","email":"gregreimer@gmail.com"},"maintainers":[{"name":"greim","email":"gregreimer@gmail.com"}],"dist":{"shasum":"79d6d4d11aa0bf296cdcebb50873ed7dad5bd7a5","tarball":"https://registry.npmjs.org/ugly-adapter/-/ugly-adapter-1.2.0.tgz","integrity":"sha512-ISoo8TgNMqy0J17RpdnhVbXA5P7A20l/3lv9JVK+15BHPKeQcaiH3TlXgqDPtHIm2nX9Kv7/G7/kuqkS8tXEQg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDqETocjgxthansGFyoXxki0LjGvEFnf3KZCd+vGqF8rwIgaFOYqsYb3+5jg4GOhs+DlVcDywBRBPS3+uFLmNscddc="}]}},"1.3.0":{"name":"ugly-adapter","version":"1.3.0","repository":{"type":"git","url":"git+https://github.com/greim/ugly-adapter.git"},"bugs":{"url":"https://github.com/greim/ugly-adapter/issues"},"description":"get promises out of standard callback APIs","main":"index.js","scripts":{"test":"mocha --compilers js:babel/register"},"keywords":["promise","callback","es6","es2015","es7","es2016","yield","thenable","yieldable","thunk","async","await","promisify","promify"],"author":{"name":"gregreimer@gmail.com"},"license":"MIT","dependencies":{"any-promise":"^0.2.0"},"devDependencies":{"babel":"^5.8.23","babel-eslint":"^5.0.0-beta6","bluebird":"^2.9.12","mocha":"^2.1.0","numeral":"^1.5.3"},"gitHead":"72ce30c4e59581d806c0fc0fe025e2142d50a317","homepage":"https://github.com/greim/ugly-adapter#readme","_id":"ugly-adapter@1.3.0","_shasum":"492e00f8d17d35ada15ad6faa8379b662633ea04","_from":".","_npmVersion":"2.14.12","_nodeVersion":"4.2.4","_npmUser":{"name":"greim","email":"gregreimer@gmail.com"},"dist":{"shasum":"492e00f8d17d35ada15ad6faa8379b662633ea04","tarball":"https://registry.npmjs.org/ugly-adapter/-/ugly-adapter-1.3.0.tgz","integrity":"sha512-mBiBEGey6HoW0ydRV6fxj+kOUf85RpJ5EVxGs1ROb/LcVkjSzYbqSGsAiexs7fBuLHqHkpSBdD3oBcXl7IRc3w==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDaZYJMTQYzqe5Fb0Y3/5JFm6xhE4iIyqRkRc+G9lyjpwIgYcRxHn/koHSngjr1SBq43MNfS4/L2x8PAHFggzXPH9o="}]},"maintainers":[{"name":"greim","email":"gregreimer@gmail.com"}]},"1.3.1":{"name":"ugly-adapter","version":"1.3.1","repository":{"type":"git","url":"git+https://github.com/greim/ugly-adapter.git"},"bugs":{"url":"https://github.com/greim/ugly-adapter/issues"},"description":"get promises out of standard callback APIs","main":"index.js","scripts":{"test":"mocha --compilers js:babel/register"},"keywords":["promise","callback","es6","es2015","es7","es2016","yield","thenable","yieldable","thunk","async","await","promisify","promify"],"author":{"name":"gregreimer@gmail.com"},"license":"MIT","dependencies":{"any-promise":"^1.0.0"},"devDependencies":{"babel":"^5.8.23","babel-eslint":"^5.0.0-beta6","bluebird":"^2.9.12","mocha":"^2.1.0","numeral":"^1.5.3"},"gitHead":"25d058a441f6e2037bf88f5003bb4a08c82e4812","homepage":"https://github.com/greim/ugly-adapter#readme","_id":"ugly-adapter@1.3.1","_shasum":"01ee5ee0773c60e76579420f268b7b9e34e7a89a","_from":".","_npmVersion":"2.14.12","_nodeVersion":"4.2.4","_npmUser":{"name":"greim","email":"gregreimer@gmail.com"},"dist":{"shasum":"01ee5ee0773c60e76579420f268b7b9e34e7a89a","tarball":"https://registry.npmjs.org/ugly-adapter/-/ugly-adapter-1.3.1.tgz","integrity":"sha512-3H8ldEzVWlWoTx43no07bHSgsQnuPxju3cYW/M8WiT3vEJjrQBaXOJ3dgBMVfCkdKkceFk7jjhn2Iko7O2zwkg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGgxr4Qzdom0AaQpMiUM25ER2JoJVz/Y/1SD47tYdfVDAiEA4PfeOPJxQfHUKPzMrVTzn5htJoYD8+UdRl0T6gqR7dA="}]},"maintainers":[{"name":"greim","email":"gregreimer@gmail.com"}]}},"readme":"# Universal Callback => Promise Adapter\n\nWith [Koa](http://koajs.com/) and [ES7 async functions](https://jakearchibald.com/2014/es7-async-functions/) gaining prominence, the JavaScript world is poised to transition to promises.\nThat means we need a sane way to *promisify* callback-based APIs.\nRather than importing lots of different promisification wrappers for each API, this lib provides a single way to promisify every API.\n\n## Install\n\n```bash\nnpm install ugly-adapter\n```\n\n## Use\n\n```js\nimport adapt from 'ugly-adapter';\n...\nvar data = await adapt(fs.readFile, './data.txt', 'utf8');\n```\n\nThis lib also exposes methods to make partial application easier.\nWhich is useful if you want to re-use an adapted version of a function.\n\n```js\nvar read = adapt.part(fs.readFile);\nvar data1 = await read('./data1', 'utf8');\nvar data2 = await read('./data2', 'utf8');\n```\n\n# API\n\n## Call a bare function: `adapt()`\n\nUseful when you don't think a function cares about `this`.\n\n```js\n// signature\nvar promise = adapt(<function>, ...args)\n\n// fs.readFile(path, enc, callback) example\nadapt(fs.readFile, './data.txt', 'utf8').then(...)\n```\n\n## Call a method on an object: `adapt.method()`\n\nUseful when you think a function definitely cares about `this`.\n\n```js\n// signature\nvar promise = adapt.method(<object>, <string>, ...args)\n\n// user.authenticate(opts, callback) example\nvar user = new User()\nadapt.method(user, 'authenticate', {\n  userName: userName,\n  password: password\n}).then(...)\n```\n\n## Partially apply a bare function: `adapt.part()`\n\n```js\n// signature\nvar fn = adapt.part(<function>, ...args)\n\n// example\nvar stat = adapt.part(fs.stat, './data.txt', 'utf8')\nstat().then(...)\n```\n\n## Partially apply a method on an object: `adapt.method.part()`\n\n```js\n// signature\nvar fn = adapt.method.part(<object>, <string>, ...args)\n\n// example\nvar user = new User()\nvar authenticate = adapt.method.part(user, 'authenticate')\nauthenticate({\n  userName: userName,\n  password: password\n}).then(...)\n```\n\nA note about partial application.\nYou can basically move the `)(` around willy-nilly.\n\n```js\n// these behave identically\nvar promise = adapt.part(a,b,c)()\nvar promise = adapt.part(a,b)(c)\nvar promise = adapt.part(a)(b,c)\nvar promise = adapt.part()(a,b,c)\n```\n\n## Promify a library: `adapt.promify(lib)`\n\nYou can promisify entire library modules, such as `fs`.\nIt will return an object with all the same properties and functions.\nThe functions have the same signature—sans callback—and return promises.\n\n```js\nvar adapt = require('ugly-adapter')\n  , callbackFs = require('fs')\n  , fs = adapt.promify(callbackFs);\n\nfs.stat(...).then(...);\n```\n\nThe above promifies every function in the `fs` module.\nIf you only want to promify a subset of functions, declare them in a whitelist.\n\n```js\nvar adapt = require('ugly-adapter')\n  , callbackFs = require('fs')\n  , fs = adapt.promify(callbackFs, 'stat', 'readFile');\n\nfs.stat(...).then(...);\nfs.readFile(...).then(...);\nfs.link(...).then(...); // error, wasn't in the whitelist!\n```\n\n# Async/Await Example\n\nNow that we can convert callbacks to promises, we can write async functions everywhere.\n\n```js\nasync function jsonReadFile(path, encoding) {\n  let data = await adapt(fs.readFile, encoding);\n  data = JSON.parse(data);\n  return data;\n}\n```\n\n# Any Promise\n\nUgly adapter uses [any-promise](https://github.com/kevinbeaty/any-promise) promises. This is something you can safely ignore and everything works normally. However, if you want to polyfill/replace your environment's Promise for whatever reason, this allows you swap in whatever conforming Promise you want and this library will use it.\n","maintainers":[{"name":"greim","email":"gregreimer@gmail.com"}],"time":{"modified":"2022-06-28T03:09:34.748Z","created":"2015-02-17T18:13:09.701Z","1.0.0":"2015-02-17T18:13:09.701Z","1.0.1":"2015-02-17T18:21:59.746Z","1.0.2":"2015-02-17T18:54:45.802Z","1.0.3":"2015-02-17T21:59:28.129Z","1.0.4":"2015-02-19T21:21:08.227Z","1.1.0":"2015-04-22T21:42:09.496Z","1.1.1":"2015-07-28T18:32:08.650Z","1.2.0":"2015-10-10T19:08:37.357Z","1.3.0":"2016-01-31T06:04:52.623Z","1.3.1":"2016-01-31T21:46:00.246Z"},"keywords":["promise","callback","es6","es2015","es7","es2016","yield","thenable","yieldable","thunk","async","await","promisify","promify"],"author":{"name":"gregreimer@gmail.com"},"license":"MIT","readmeFilename":"readme.md","homepage":"https://github.com/greim/ugly-adapter#readme","repository":{"type":"git","url":"git+https://github.com/greim/ugly-adapter.git"},"bugs":{"url":"https://github.com/greim/ugly-adapter/issues"},"users":{"s.e.todd":true,"x1011":true}}