[
  {
    "path": ".gitignore",
    "content": "# IntelliJ IDEA\n.idea\n*.iml\n*.ipr\n*.iws\nclasses\ngen-external-apklibs\n\n# Gradle\n.gradle\nbuild\ngradle.properties\n\n# Maven\ntarget\nrelease.properties\npom.xml.*\n\n# Java class files\n*.class\n\n# Local configuration file (sdk path, etc)\nlocal.properties\n\n*.prefs\n"
  },
  {
    "path": ".travis.yml",
    "content": "language: java\n\njdk:\n  - oraclejdk8\n\nscript:\n  - ./gradlew test\n"
  },
  {
    "path": "BenchmarkDemo/app/.gitignore",
    "content": "/build\n"
  },
  {
    "path": "BenchmarkDemo/app/build.gradle",
    "content": "buildscript {\n    repositories {\n        jcenter()\n    }\n    dependencies {\n        classpath 'com.android.tools.build:gradle:1.3.0'\n        classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8'\n    }\n}\n\napply plugin: 'com.android.application'\napply plugin: 'com.neenbedankt.android-apt'\n\nandroid {\n    compileSdkVersion 23\n    buildToolsVersion \"21.1.2\"\n\n    packagingOptions {\n        exclude 'META-INF/LICENSE'\n        exclude 'META-INF/NOTICE'\n    }\n    defaultConfig {\n        applicationId \"com.bluelinelabs.logansquare.demo\"\n        minSdkVersion 14\n        targetSdkVersion 23\n        versionCode 1\n        versionName \"1.0\"\n    }\n    buildTypes {\n        release {\n            minifyEnabled true\n            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'\n        }\n    }\n}\n\ndependencies {\n    compile fileTree(dir: 'libs', include: ['*.jar'])\n    compile 'com.android.support:appcompat-v7:23.1.1'\n\n    // LoganSquare annotation processor\n    apt 'com.bluelinelabs:logansquare-compiler:1.3.6'\n    // LoganSquare runtime library\n    compile 'com.bluelinelabs:logansquare:1.3.6'\n\n    // Jackson libraries for comparison\n    compile 'com.fasterxml.jackson.core:jackson-databind:2.5.1'\n    compile 'com.fasterxml.jackson.core:jackson-annotations:2.5.1'\n\n    // GSON library for comparison\n    compile 'com.google.code.gson:gson:2.3.1'\n\n    // Moshi library for camparison\n    compile 'com.squareup.moshi:moshi:1.0.0'\n}\n"
  },
  {
    "path": "BenchmarkDemo/app/proguard-rules.pro",
    "content": "# LoganSquare\n-keep class com.bluelinelabs.logansquare.** { *; }\n-keep @com.bluelinelabs.logansquare.annotation.JsonObject class *\n-keep class **$$JsonObjectMapper { *; }\n\n# Jackson\n-dontwarn org.w3c.dom.bootstrap.DOMImplementationRegistry\n"
  },
  {
    "path": "BenchmarkDemo/app/src/main/AndroidManifest.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    package=\"com.bluelinelabs.logansquare.demo\" >\n\n    <application\n        android:allowBackup=\"true\"\n        android:icon=\"@drawable/ic_launcher\"\n        android:label=\"@string/app_name\"\n        android:theme=\"@style/AppTheme\" >\n        <activity\n            android:name=\".MainActivity\"\n            android:label=\"@string/app_name\" >\n            <intent-filter>\n                <action android:name=\"android.intent.action.MAIN\" />\n\n                <category android:name=\"android.intent.category.LAUNCHER\" />\n            </intent-filter>\n        </activity>\n    </application>\n\n</manifest>\n"
  },
  {
    "path": "BenchmarkDemo/app/src/main/assets/largesample.json",
    "content": "{\"users\":[{\"_id\":\"54e1a1ce241b28aee7e39426\",\"index\":0,\"guid\":\"9f14ec80-2687-43b8-acf6-e9ca84df7e91\",\"is_active\":true,\"balance\":\"$3,528.39\",\"picture\":\"http://placehold.it/32x32\",\"age\":27,\"eye_color\":\"green\",\"name\":{\"first\":\"Rita\",\"last\":\"Nicholson\"},\"company\":\"INCUBUS\",\"email\":\"rita.nicholson@incubus.tv\",\"phone\":\"+1 (898) 459-2826\",\"address\":\"344 Homecrest Court, Valmy, Arkansas, 6518\",\"about\":\"Nostrud ipsum aute veniam minim consectetur labore occaecat aute nulla eiusmod tempor excepteur. Enim sit Lorem ut tempor nulla veniam aliqua reprehenderit aliqua. Dolore est sit sit esse anim occaecat ut in officia adipisicing aliqua veniam. Ipsum laboris fugiat nostrud magna velit.\\r\\n\",\"registered\":\"Wednesday, June 11, 2014 11:42 PM\",\"latitude\":22.854181,\"longitude\":-73.109415,\"tags\":[\"ad\",\"commodo\",\"in\",\"aute\",\"velit\",\"commodo\",\"eiusmod\"],\"range\":[0,1,2,3,4,5,6,7,8,9],\"friends\":[{\"id\":0,\"name\":\"Tameka Melendez\"},{\"id\":1,\"name\":\"Sondra Horn\"},{\"id\":2,\"name\":\"Nora Hendricks\"}],\"images\":[{\"id\":\"54e1a1ce058262f38b2a9bb7\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/289e4c3e-4cd2-48a5-a545-3433be395f5e\",\"description\":\"Ut enim officia fugiat qui magna exercitation.\"},{\"id\":\"54e1a1ce203ac08c791e37d5\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/a8417a7f-ac1d-4f1a-bbf8-1c1dc5180546\",\"description\":\"Veniam voluptate exercitation adipisicing mollit non eu eiusmod.\"},{\"id\":\"54e1a1ce60181cc0923fb7c3\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/e28f0eb7-0b86-46cc-a182-b8f2a5e046e8\",\"description\":\"Voluptate eiusmod elit cupidatat ipsum aute sit adipisicing reprehenderit.\"},{\"id\":\"54e1a1ce520ec3b4ad1918be\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/e2460992-0193-4acf-8454-52a02b2c27c2\",\"description\":\"Nisi ut et fugiat incididunt Lorem labore aliqua ipsum.\"},{\"id\":\"54e1a1cefb34466f91d2bd3d\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/d10263df-80c8-4253-8060-3e0e43bf7f3d\",\"description\":\"Ex cupidatat minim incididunt ea occaecat laborum.\"},{\"id\":\"54e1a1ceda63a82b8a417d9c\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/90805463-3085-4c12-b350-3de1aa40f676\",\"description\":\"Culpa laboris aliquip culpa nulla.\"},{\"id\":\"54e1a1ce836d64a89982de13\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/9f0a76a2-3b07-43a3-b7a4-7f42186ed564\",\"description\":\"Est voluptate Lorem sint reprehenderit quis id.\"},{\"id\":\"54e1a1cecfab99d0372dca1a\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/30c5be95-a0f1-445f-957a-74021e593bf1\",\"description\":\"Pariatur ipsum occaecat deserunt ipsum Lorem magna eu.\"}],\"greeting\":\"Hello, Rita! You have 9 unread messages.\",\"favorite_fruit\":\"banana\"},{\"_id\":\"54e1a1ce0b64e278be86b560\",\"index\":1,\"guid\":\"8a568662-5ba7-4470-b823-a54b31f555e2\",\"is_active\":true,\"balance\":\"$1,437.23\",\"picture\":\"http://placehold.it/32x32\",\"age\":24,\"eye_color\":\"green\",\"name\":{\"first\":\"Cabrera\",\"last\":\"Lynch\"},\"company\":\"NSPIRE\",\"email\":\"cabrera.lynch@nspire.biz\",\"phone\":\"+1 (966) 570-3332\",\"address\":\"588 Loring Avenue, Naomi, Illinois, 8909\",\"about\":\"Reprehenderit eiusmod eiusmod nisi ipsum aliquip. Incididunt sint elit elit ad tempor exercitation exercitation nostrud nisi eiusmod id sint sunt incididunt. Veniam mollit eiusmod tempor mollit nisi quis proident sint consequat eiusmod mollit amet. Eu anim laboris sit sit tempor et nostrud. Culpa fugiat nostrud adipisicing incididunt. Veniam est enim enim cupidatat esse ex eu magna ea. Laborum adipisicing labore non commodo exercitation incididunt proident est nulla.\\r\\n\",\"registered\":\"Saturday, April 26, 2014 7:59 PM\",\"latitude\":-73.551824,\"longitude\":-87.276824,\"tags\":[\"commodo\",\"do\",\"elit\",\"et\",\"ullamco\",\"deserunt\",\"id\"],\"range\":[0,1,2,3,4,5,6,7,8,9],\"friends\":[{\"id\":0,\"name\":\"Mercedes Hess\"},{\"id\":1,\"name\":\"Elinor Cervantes\"},{\"id\":2,\"name\":\"Krista Mathews\"}],\"images\":[{\"id\":\"54e1a1ce811a687075954fce\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/910be43a-aebd-4d3f-aba6-e2d44a51e60d\",\"description\":\"Mollit cillum ullamco deserunt veniam amet amet.\"},{\"id\":\"54e1a1ce355b81589c4d58a9\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/cc30b63d-9693-46b5-83ef-36a550d09aaf\",\"description\":\"Excepteur occaecat tempor eu anim anim culpa quis.\"},{\"id\":\"54e1a1ce91c35d48df131f1c\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/ae8f5006-3bb6-4580-b176-66ad72ba4dfa\",\"description\":\"Ex sint incididunt anim mollit magna qui ex incididunt aute ad incididunt irure.\"},{\"id\":\"54e1a1cedd292336af174855\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/53db6c74-22a1-46c8-969a-714ce1d80aa8\",\"description\":\"Cupidatat officia ea consequat do dolor sint veniam mollit enim proident aute.\"},{\"id\":\"54e1a1ce6089350f64800a20\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/deb8c6c9-cc99-436c-b5e5-ecd20d5e0c10\",\"description\":\"Ullamco reprehenderit nisi qui anim laborum.\"},{\"id\":\"54e1a1ce420f9a20235c22ef\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/844c8f13-d538-43c4-be8a-ad8aa1880c70\",\"description\":\"Anim aliquip do aliquip ea do Lorem fugiat pariatur ex eiusmod reprehenderit pariatur incididunt.\"},{\"id\":\"54e1a1cec0a7d0953257af72\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/b8e5d385-1b11-4fef-9152-35d6151aabc1\",\"description\":\"Esse culpa adipisicing labore cupidatat adipisicing dolor Lorem dolor culpa occaecat dolor voluptate.\"},{\"id\":\"54e1a1ce880005b8015d15a8\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/edd47863-5105-4340-8739-df00d10900fa\",\"description\":\"Reprehenderit aliqua nisi amet in Lorem eiusmod mollit ea laboris ex eiusmod ex.\"},{\"id\":\"54e1a1ce7b43e3237fd19ebd\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/679d6ebe-7b7f-477c-9291-06999a375a32\",\"description\":\"Sit commodo deserunt ipsum dolore eiusmod mollit consequat do labore ut cillum.\"},{\"id\":\"54e1a1ce72ab01526dfbeecf\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/de0d66ff-1858-480b-a149-d8af219c3383\",\"description\":\"Aute exercitation culpa sint cupidatat adipisicing.\"}],\"greeting\":\"Hello, Cabrera! You have 9 unread messages.\",\"favorite_fruit\":\"strawberry\"},{\"_id\":\"54e1a1ce433464e39d153f2d\",\"index\":2,\"guid\":\"59302bd2-7279-4d0b-81bf-5d6f6bbf0b98\",\"is_active\":false,\"balance\":\"$3,819.54\",\"picture\":\"http://placehold.it/32x32\",\"age\":26,\"eye_color\":\"brown\",\"name\":{\"first\":\"Lorraine\",\"last\":\"Buckley\"},\"company\":\"ORBIXTAR\",\"email\":\"lorraine.buckley@orbixtar.co.uk\",\"phone\":\"+1 (808) 539-3218\",\"address\":\"351 Indiana Place, Wollochet, California, 1157\",\"about\":\"In excepteur cupidatat ex elit labore magna dolor sunt aliquip nisi esse do Lorem. Cillum ullamco dolor ullamco in in sint dolore eu in aliqua aliquip laboris ad qui. Do Lorem laboris eu cillum do excepteur excepteur. Sunt eu culpa tempor enim consequat ea qui eiusmod est cillum eiusmod eu. Dolor cupidatat nisi ut consequat laborum ipsum proident ad quis anim voluptate. Aliqua eu nostrud reprehenderit cillum aliqua esse voluptate incididunt.\\r\\n\",\"registered\":\"Thursday, May 29, 2014 11:31 AM\",\"latitude\":-42.482423,\"longitude\":135.341533,\"tags\":[\"cupidatat\",\"officia\",\"exercitation\",\"irure\",\"eiusmod\",\"id\",\"velit\"],\"range\":[0,1,2,3,4,5,6,7,8,9],\"friends\":[{\"id\":0,\"name\":\"Mills Camacho\"},{\"id\":1,\"name\":\"Renee Shannon\"},{\"id\":2,\"name\":\"Lyons Lloyd\"}],\"images\":[{\"id\":\"54e1a1ce372289b0dbbe25de\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/85797292-4fdd-4b58-98ec-7c2b28a5b4b2\",\"description\":\"Qui voluptate nisi esse nulla cillum.\"},{\"id\":\"54e1a1ce9247b759adf8bb2f\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/e95d97b5-aad3-4481-abb9-a6409c39a37e\",\"description\":\"Laborum consequat culpa esse sit duis sit ex anim sunt irure exercitation.\"},{\"id\":\"54e1a1ce0eee612ca05bdae6\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/acec6d53-140e-48b8-87c1-44b7b2dc011d\",\"description\":\"Ullamco nulla excepteur officia est labore sint consectetur exercitation consectetur nulla esse non velit laboris.\"},{\"id\":\"54e1a1ceb9e42617b67fb2a2\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/e763f40a-e6c0-4a93-b37a-a48834a450f6\",\"description\":\"Nisi exercitation occaecat reprehenderit nostrud dolor deserunt duis.\"},{\"id\":\"54e1a1ce06e14cd281d1e091\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/69caf3cd-6e89-4fb4-981a-7b635bfda589\",\"description\":\"Sint duis nulla voluptate velit ut aute dolor veniam.\"},{\"id\":\"54e1a1ce3eca1077662573d4\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/93ec54af-0977-49b7-b1d5-ff80872577d7\",\"description\":\"Culpa nostrud et nostrud sint incididunt sunt.\"},{\"id\":\"54e1a1cefc4f665353795631\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/b666b1d8-f5ad-4252-bc8e-40527177b612\",\"description\":\"Minim velit aliqua minim ut veniam id eu do aliquip occaecat nisi culpa dolore.\"}],\"greeting\":\"Hello, Lorraine! You have 8 unread messages.\",\"favorite_fruit\":\"apple\"},{\"_id\":\"54e1a1cebfba6c9d1fd66f2e\",\"index\":3,\"guid\":\"1c995100-8513-45ea-8d4d-a3629f8a65fe\",\"is_active\":true,\"balance\":\"$1,372.53\",\"picture\":\"http://placehold.it/32x32\",\"age\":30,\"eye_color\":\"brown\",\"name\":{\"first\":\"Holmes\",\"last\":\"Vaughan\"},\"company\":\"BOILICON\",\"email\":\"holmes.vaughan@boilicon.org\",\"phone\":\"+1 (933) 519-2765\",\"address\":\"711 Ralph Avenue, Yonah, District Of Columbia, 9895\",\"about\":\"Lorem ad duis ullamco veniam consequat et anim amet ad enim ullamco enim. Proident in pariatur quis anim ullamco incididunt ea in sint mollit. Ea cillum occaecat aliqua mollit.\\r\\n\",\"registered\":\"Sunday, January 18, 2015 9:10 AM\",\"latitude\":-75.373464,\"longitude\":-122.47253,\"tags\":[\"velit\",\"magna\",\"adipisicing\",\"eu\",\"laborum\",\"irure\",\"labore\"],\"range\":[0,1,2,3,4,5,6,7,8,9],\"friends\":[{\"id\":0,\"name\":\"Lacey Lamb\"},{\"id\":1,\"name\":\"Mcgee Gates\"},{\"id\":2,\"name\":\"Knapp Macias\"}],\"images\":[{\"id\":\"54e1a1ce365547a839fb588c\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/73cd8330-a04d-4fdb-8534-ac8f0caca051\",\"description\":\"Labore incididunt sit sunt sint cillum laboris irure.\"},{\"id\":\"54e1a1cea76df5f551de917a\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/c5a9c7e0-826a-463a-ba43-acdadb8ad13a\",\"description\":\"Minim velit occaecat occaecat minim irure ut cupidatat enim aliquip dolor est.\"},{\"id\":\"54e1a1ce2647ced3fbdb4ceb\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/049b70dd-3a97-4571-b01c-a944591db60e\",\"description\":\"Minim et sint adipisicing incididunt excepteur commodo in esse eu commodo ipsum sit in officia.\"},{\"id\":\"54e1a1cec63b01a00a5d7120\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/4a8478a3-d16c-420e-b99c-d9505f8190c2\",\"description\":\"Aliqua fugiat irure velit nulla laborum aute sunt deserunt et adipisicing cupidatat excepteur.\"},{\"id\":\"54e1a1ceafcc4779d8acbdde\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/e02b8cfe-5acb-4286-97e7-0ab073a22916\",\"description\":\"Adipisicing do exercitation eu enim.\"},{\"id\":\"54e1a1ceecc545b9258dfde7\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/c4369522-63f3-4b55-95e0-081d93d84145\",\"description\":\"Tempor sit laboris voluptate deserunt officia est in.\"},{\"id\":\"54e1a1cede22aa6395146b70\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/8305947c-f9f4-4673-9407-bb41106df8c5\",\"description\":\"Enim dolor ut sint velit id cupidatat occaecat voluptate consequat adipisicing dolor.\"},{\"id\":\"54e1a1ce8586b3424b468228\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/ace2dc2f-9c22-4ea0-8db8-e4550f95c957\",\"description\":\"Voluptate amet labore voluptate id incididunt duis in sint consequat et sit nulla pariatur dolore.\"}],\"greeting\":\"Hello, Holmes! You have 5 unread messages.\",\"favorite_fruit\":\"apple\"},{\"_id\":\"54e1a1ce3b052d3186f82e49\",\"index\":4,\"guid\":\"a4f6ced6-9571-4667-b0e0-585dd9156b8a\",\"is_active\":false,\"balance\":\"$3,965.66\",\"picture\":\"http://placehold.it/32x32\",\"age\":21,\"eye_color\":\"blue\",\"name\":{\"first\":\"Spears\",\"last\":\"Buck\"},\"company\":\"BLUPLANET\",\"email\":\"spears.buck@bluplanet.info\",\"phone\":\"+1 (953) 443-2130\",\"address\":\"278 Veterans Avenue, Chamizal, Massachusetts, 1046\",\"about\":\"Elit deserunt pariatur esse dolor ullamco Lorem consectetur duis amet culpa. Nostrud minim cupidatat magna voluptate labore ut reprehenderit aliquip aliqua occaecat. Culpa incididunt anim aliqua deserunt commodo duis ut magna nisi tempor incididunt fugiat. Sint labore nisi aute excepteur veniam.\\r\\n\",\"registered\":\"Saturday, May 24, 2014 3:23 AM\",\"latitude\":-44.732095,\"longitude\":-178.722328,\"tags\":[\"eu\",\"elit\",\"fugiat\",\"aute\",\"est\",\"reprehenderit\",\"reprehenderit\"],\"range\":[0,1,2,3,4,5,6,7,8,9],\"friends\":[{\"id\":0,\"name\":\"Josefina Gallegos\"},{\"id\":1,\"name\":\"Beryl Roman\"},{\"id\":2,\"name\":\"Kim Mccall\"}],\"images\":[{\"id\":\"54e1a1ce6d4e71a4e98e5750\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/151a3b78-78c4-44f1-bf1e-2f1c8a556669\",\"description\":\"Commodo labore consectetur aliqua laborum aliquip nostrud sunt est et non minim.\"},{\"id\":\"54e1a1cecf1a2df65e5e040b\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/f0e1605d-5004-4b72-b731-169443a13433\",\"description\":\"Esse minim voluptate duis eiusmod do in sunt.\"},{\"id\":\"54e1a1cef67dea702df33c2d\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/36680a2b-bb13-4dda-be69-86054860595f\",\"description\":\"Commodo occaecat sit sint incididunt proident incididunt non velit culpa.\"},{\"id\":\"54e1a1cec3a5e2e0619976ec\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/1fe5b161-d65a-4863-a805-07aba8447624\",\"description\":\"Exercitation est amet esse ea voluptate ex dolore qui elit aliqua voluptate.\"},{\"id\":\"54e1a1ce8dfe8553814e6a06\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/d52b91ea-5294-4cc3-9f73-ac2a40ed3023\",\"description\":\"Qui ullamco culpa Lorem ut id amet aliqua aliqua cupidatat culpa est irure id.\"},{\"id\":\"54e1a1cee0e7962bcd13b049\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/bea26485-133b-47a3-ac70-b5c0f74a19d9\",\"description\":\"Amet ut excepteur aliquip irure dolor magna aliquip duis ad ut Lorem fugiat amet.\"},{\"id\":\"54e1a1cea14b96178b90d3b0\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/7dd7e5ea-ba7c-4325-88fc-435fbc830b7e\",\"description\":\"Est reprehenderit mollit officia incididunt.\"},{\"id\":\"54e1a1cee1b5acb8ff49987f\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/919a365c-85c9-4d07-9010-598b96ae0a0c\",\"description\":\"Nulla reprehenderit excepteur ipsum excepteur ipsum amet cupidatat laboris sit.\"},{\"id\":\"54e1a1cee30874a69115aed5\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/d19c7a9d-9677-475f-b6c8-1e7724394ecd\",\"description\":\"In pariatur enim enim commodo.\"},{\"id\":\"54e1a1ce9411ec5ad442d3ef\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/d3b9c067-d5e8-4335-aa7a-75dc62a3f7eb\",\"description\":\"Eiusmod ad quis veniam reprehenderit dolore non.\"},{\"id\":\"54e1a1ce15690cf6c6b7ac08\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/fdbed904-541e-4136-bb99-c15eccc47535\",\"description\":\"Officia tempor ea eiusmod est voluptate.\"},{\"id\":\"54e1a1ce5c541d6b7472979b\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/ea41d3b1-b617-4aa7-ba8e-277fcee603e0\",\"description\":\"Eiusmod dolor velit nostrud esse minim aute eiusmod id exercitation dolor qui dolore.\"}],\"greeting\":\"Hello, Spears! You have 8 unread messages.\",\"favorite_fruit\":\"banana\"},{\"_id\":\"54e1a1ced43de2be199e32fd\",\"index\":5,\"guid\":\"2f709055-33cd-43f8-a831-8ab44eabd23c\",\"is_active\":false,\"balance\":\"$2,706.17\",\"picture\":\"http://placehold.it/32x32\",\"age\":37,\"eye_color\":\"brown\",\"name\":{\"first\":\"Navarro\",\"last\":\"Graves\"},\"company\":\"QUARMONY\",\"email\":\"navarro.graves@quarmony.me\",\"phone\":\"+1 (861) 515-3436\",\"address\":\"853 Wakeman Place, Westerville, Wyoming, 4907\",\"about\":\"Adipisicing reprehenderit eiusmod exercitation nulla excepteur magna commodo duis. Officia nostrud et ex exercitation cupidatat pariatur exercitation nulla incididunt dolor voluptate aliquip dolor. Officia consequat eiusmod sint est reprehenderit amet do magna aliqua. Ea non fugiat anim ea. Qui commodo nulla cupidatat cupidatat minim aliquip anim consequat fugiat nostrud aute proident.\\r\\n\",\"registered\":\"Wednesday, October 1, 2014 1:55 PM\",\"latitude\":-85.054147,\"longitude\":-46.309354,\"tags\":[\"ut\",\"magna\",\"eiusmod\",\"pariatur\",\"enim\",\"labore\",\"duis\"],\"range\":[0,1,2,3,4,5,6,7,8,9],\"friends\":[{\"id\":0,\"name\":\"Rebecca Bolton\"},{\"id\":1,\"name\":\"Liliana Quinn\"},{\"id\":2,\"name\":\"Jennings Berg\"}],\"images\":[{\"id\":\"54e1a1ce841fa0b5cc8b0910\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/afb77171-a17f-4c5b-9876-fa49a8dc237d\",\"description\":\"Qui laboris et Lorem in magna quis occaecat amet dolore ullamco.\"},{\"id\":\"54e1a1ce7c2f49a1861bb56c\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/5e94306d-0e6a-41fa-ac02-0fd75f66363b\",\"description\":\"Labore qui adipisicing consequat pariatur nostrud sunt.\"},{\"id\":\"54e1a1ce08ccae57c7918ee1\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/9fe098c0-75cc-42fe-9fa8-93c1ba6d5afe\",\"description\":\"Dolor irure eu qui aute et ut deserunt officia commodo aute officia excepteur qui.\"},{\"id\":\"54e1a1ce4cb23bb78ec9dc73\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/ddcd53d9-c346-4207-b824-6b8fcb822e4c\",\"description\":\"Pariatur anim aliquip eu aliqua.\"},{\"id\":\"54e1a1ceec570e2e9946c387\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/70f7cd4a-da04-4985-858c-6d6e7f88d961\",\"description\":\"Cupidatat incididunt officia consequat aute in Lorem eiusmod laboris quis aliqua ea.\"}],\"greeting\":\"Hello, Navarro! You have 10 unread messages.\",\"favorite_fruit\":\"apple\"},{\"_id\":\"54e1a1ce783829584dabfabf\",\"index\":6,\"guid\":\"43830691-7a96-4b2e-9744-68f0d4bf70a4\",\"is_active\":false,\"balance\":\"$1,902.03\",\"picture\":\"http://placehold.it/32x32\",\"age\":31,\"eye_color\":\"blue\",\"name\":{\"first\":\"Maricela\",\"last\":\"Craft\"},\"company\":\"EYERIS\",\"email\":\"maricela.craft@eyeris.com\",\"phone\":\"+1 (980) 430-2487\",\"address\":\"478 Benson Avenue, Emory, Tennessee, 5191\",\"about\":\"Enim mollit nostrud consequat aliqua duis. Magna irure exercitation est voluptate aute incididunt adipisicing aute ipsum minim ut. Reprehenderit nisi nisi enim laborum cillum tempor nostrud aute enim qui labore veniam. Cupidatat eiusmod sunt aute do cupidatat ipsum sunt id consequat duis amet. Aute velit sit nostrud commodo exercitation quis labore. Non amet consequat aliquip sit qui non mollit laboris et minim laboris.\\r\\n\",\"registered\":\"Saturday, July 5, 2014 5:09 PM\",\"latitude\":-29.733653,\"longitude\":18.028892,\"tags\":[\"consectetur\",\"tempor\",\"fugiat\",\"eu\",\"irure\",\"deserunt\",\"eiusmod\"],\"range\":[0,1,2,3,4,5,6,7,8,9],\"friends\":[{\"id\":0,\"name\":\"Robles Chen\"},{\"id\":1,\"name\":\"Alissa Miller\"},{\"id\":2,\"name\":\"Patterson Tyler\"}],\"images\":[{\"id\":\"54e1a1ce907b6d3a04caf010\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/b998d262-a57a-43e8-a1b6-7ceaaa3ce064\",\"description\":\"Exercitation ex amet reprehenderit magna.\"},{\"id\":\"54e1a1ce2f4915a0912b54bb\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/f6af669e-d48c-4ecf-bcb4-0a14e9f3c7a4\",\"description\":\"Exercitation magna ex deserunt officia sunt occaecat tempor ullamco proident nisi qui ipsum.\"},{\"id\":\"54e1a1cece81a60aae562aae\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/1e0b80bc-1370-494c-ae3a-c95c8d8622f2\",\"description\":\"Sit dolore quis nulla fugiat ullamco fugiat cupidatat do.\"},{\"id\":\"54e1a1ce28f7b466e4f369eb\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/a4c9a1d2-e2a6-4dc9-bcda-65d3bcf24fe3\",\"description\":\"Qui sunt irure aliquip dolor.\"},{\"id\":\"54e1a1cebc36da2687075746\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/47309fd2-e764-452e-a791-972f1971d140\",\"description\":\"Qui ipsum reprehenderit id consectetur incididunt sint ut.\"},{\"id\":\"54e1a1cee00f273a25e3fb2d\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/41419927-0e63-47ef-9cf2-9157c843884a\",\"description\":\"Ut culpa fugiat duis aute aute.\"},{\"id\":\"54e1a1ce8eab84bd7b60d8d8\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/937e701e-342b-4c30-9f47-8499fa67275b\",\"description\":\"Veniam ut pariatur eu anim fugiat cupidatat aliquip.\"},{\"id\":\"54e1a1ce77fc2f6c8adf95c3\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/fff52b5b-5209-4185-96b7-07082a33cac7\",\"description\":\"Anim in id duis enim proident aliqua magna deserunt consectetur.\"},{\"id\":\"54e1a1cecfde7f0f40d886bf\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/3db53471-958c-45da-b239-40036e3966d9\",\"description\":\"Ea ut Lorem qui aliqua.\"}],\"greeting\":\"Hello, Maricela! You have 5 unread messages.\",\"favorite_fruit\":\"apple\"},{\"_id\":\"54e1a1ce6fd01b0e32f4f729\",\"index\":7,\"guid\":\"a9903ef0-59aa-4259-b5e1-d31d8419eed0\",\"is_active\":true,\"balance\":\"$1,129.26\",\"picture\":\"http://placehold.it/32x32\",\"age\":38,\"eye_color\":\"brown\",\"name\":{\"first\":\"Stephanie\",\"last\":\"Gross\"},\"company\":\"KEENGEN\",\"email\":\"stephanie.gross@keengen.biz\",\"phone\":\"+1 (953) 583-2235\",\"address\":\"635 Goodwin Place, Somerset, Palau, 1434\",\"about\":\"Ex veniam deserunt aliquip est nulla cupidatat duis dolor sint ad cupidatat consectetur deserunt veniam. Nostrud do dolor ut est adipisicing in sint reprehenderit proident. Nostrud ea ut eu est irure pariatur.\\r\\n\",\"registered\":\"Saturday, November 15, 2014 4:12 PM\",\"latitude\":-13.666943,\"longitude\":-107.244748,\"tags\":[\"velit\",\"reprehenderit\",\"veniam\",\"ea\",\"aute\",\"sunt\",\"et\"],\"range\":[0,1,2,3,4,5,6,7,8,9],\"friends\":[{\"id\":0,\"name\":\"Pate Finch\"},{\"id\":1,\"name\":\"Jenifer Austin\"},{\"id\":2,\"name\":\"Fitzgerald Palmer\"}],\"images\":[{\"id\":\"54e1a1ce38c762c0a36361b7\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/131581b9-3bda-406a-a0bf-8e9081691272\",\"description\":\"Id deserunt eiusmod in velit quis nisi sit minim magna.\"},{\"id\":\"54e1a1ce2c23681b4aab41a4\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/9bd729e2-38a0-4149-8fed-e28099b7c7e6\",\"description\":\"Sunt sunt ex minim ex.\"},{\"id\":\"54e1a1ce73634a3cfd1c2c18\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/b7c58e0c-ffa8-4eed-9639-bd0f044db6b8\",\"description\":\"Lorem id reprehenderit duis enim voluptate velit commodo ipsum aliquip cillum duis.\"},{\"id\":\"54e1a1ce69ee92087363bada\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/5045485b-714f-4913-ab47-fee8725416bb\",\"description\":\"Ea sit reprehenderit excepteur qui deserunt sint irure.\"},{\"id\":\"54e1a1ce8b1efc63d9d0028a\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/5373b73d-9a16-4e0b-87bb-21b1ef1e29c0\",\"description\":\"Exercitation minim proident duis incididunt anim.\"},{\"id\":\"54e1a1ce91e2f9e7051fe645\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/a0f8b80d-8639-4bc8-a747-c6c923144968\",\"description\":\"Sint esse nulla nostrud cillum ullamco enim dolor ut.\"},{\"id\":\"54e1a1ce3417385fb5e5f9ef\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/8bf0282d-3f4e-4b5a-91bb-342e55baa719\",\"description\":\"Ut eu id Lorem ea sunt enim incididunt magna anim anim dolor cillum dolore.\"},{\"id\":\"54e1a1ce07984e1dbf400bdb\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/a4a78883-3e74-49b8-b765-d446291cdc05\",\"description\":\"Sit deserunt est velit nostrud reprehenderit excepteur ea commodo elit et labore.\"},{\"id\":\"54e1a1ce150461fd453b016e\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/b4891bc1-a62d-4406-9872-ffc32b184390\",\"description\":\"Veniam sunt id duis officia.\"},{\"id\":\"54e1a1cee346ceebf893dd1d\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/72d288e9-40c3-4228-be36-900ee5bf3052\",\"description\":\"Dolor eu non cillum quis.\"},{\"id\":\"54e1a1ceadf972acad70c998\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/5ee608f4-9b62-4210-968b-57ca0f6d24db\",\"description\":\"Commodo aliquip excepteur sunt esse commodo fugiat exercitation enim.\"}],\"greeting\":\"Hello, Stephanie! You have 7 unread messages.\",\"favorite_fruit\":\"apple\"},{\"_id\":\"54e1a1ce07b75c28ac24927d\",\"index\":8,\"guid\":\"feb970eb-c003-4532-a056-292aee080920\",\"is_active\":false,\"balance\":\"$3,111.09\",\"picture\":\"http://placehold.it/32x32\",\"age\":20,\"eye_color\":\"green\",\"name\":{\"first\":\"Sharpe\",\"last\":\"Harrison\"},\"company\":\"ROOFORIA\",\"email\":\"sharpe.harrison@rooforia.io\",\"phone\":\"+1 (998) 459-2342\",\"address\":\"368 Lexington Avenue, Escondida, New Mexico, 6043\",\"about\":\"Eiusmod voluptate excepteur ad ad non proident pariatur ex duis reprehenderit irure. Excepteur laboris id sunt officia veniam nostrud sit nisi officia ullamco qui. Id tempor aliquip irure do Lorem dolor est et commodo. Cillum irure Lorem esse enim ex laborum minim esse proident Lorem. Tempor nostrud aliqua fugiat cillum ex ut esse consectetur pariatur incididunt nulla. Elit dolore culpa aliqua ea nostrud deserunt aliqua qui exercitation esse eu sunt non. Irure minim do ullamco aliqua.\\r\\n\",\"registered\":\"Thursday, July 10, 2014 2:37 PM\",\"latitude\":4.40716,\"longitude\":-149.816621,\"tags\":[\"proident\",\"sunt\",\"pariatur\",\"exercitation\",\"anim\",\"elit\",\"quis\"],\"range\":[0,1,2,3,4,5,6,7,8,9],\"friends\":[{\"id\":0,\"name\":\"Stephenson Preston\"},{\"id\":1,\"name\":\"Logan Marshall\"},{\"id\":2,\"name\":\"Brennan Donovan\"}],\"images\":[{\"id\":\"54e1a1ce0046ce0512185ae0\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/c253bc26-b9c2-441b-ad35-fcb1f454c8c6\",\"description\":\"Lorem ad voluptate minim eiusmod culpa id commodo duis nisi minim.\"},{\"id\":\"54e1a1cea3c1b37d54a6d4dd\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/e4475538-b986-45e0-85e4-ac7f00657780\",\"description\":\"Irure amet quis et consequat consequat in reprehenderit nulla duis laborum reprehenderit ea.\"}],\"greeting\":\"Hello, Sharpe! You have 7 unread messages.\",\"favorite_fruit\":\"banana\"},{\"_id\":\"54e1a1ce94a28d4b8c32f103\",\"index\":9,\"guid\":\"79393e7a-3682-42ca-a41e-d87659b5cfdb\",\"is_active\":false,\"balance\":\"$1,196.98\",\"picture\":\"http://placehold.it/32x32\",\"age\":24,\"eye_color\":\"blue\",\"name\":{\"first\":\"Gretchen\",\"last\":\"Gilmore\"},\"company\":\"INSECTUS\",\"email\":\"gretchen.gilmore@insectus.name\",\"phone\":\"+1 (911) 452-2760\",\"address\":\"855 Laurel Avenue, Harborton, Maryland, 8969\",\"about\":\"Reprehenderit sint nisi mollit cupidatat adipisicing pariatur occaecat ea do laborum. Do ex ad cupidatat sunt Lorem proident culpa enim ipsum amet anim. Voluptate esse enim ipsum ad in eu consectetur cupidatat laborum et in culpa. Ipsum proident pariatur adipisicing commodo veniam velit incididunt dolor irure eu non consequat officia. Sint et pariatur irure laborum cillum velit aliquip minim nulla reprehenderit reprehenderit reprehenderit dolore.\\r\\n\",\"registered\":\"Thursday, June 19, 2014 8:54 AM\",\"latitude\":-68.692024,\"longitude\":-147.288632,\"tags\":[\"proident\",\"laborum\",\"dolor\",\"proident\",\"veniam\",\"nulla\",\"consequat\"],\"range\":[0,1,2,3,4,5,6,7,8,9],\"friends\":[{\"id\":0,\"name\":\"Ramirez Kidd\"},{\"id\":1,\"name\":\"Parrish Hubbard\"},{\"id\":2,\"name\":\"English Cooper\"}],\"images\":[{\"id\":\"54e1a1ce0080ebc9c9e1a8b9\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/c96fdcfc-0fb8-4bae-8e9c-676c626f4221\",\"description\":\"Voluptate duis officia aliqua eiusmod reprehenderit consectetur nisi do cupidatat excepteur pariatur aliqua amet.\"},{\"id\":\"54e1a1cebb236fa6093fdf57\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/6054ab36-e15d-4a72-a67b-d8f17c86e5b5\",\"description\":\"Duis proident ut pariatur commodo eiusmod pariatur id.\"}],\"greeting\":\"Hello, Gretchen! You have 9 unread messages.\",\"favorite_fruit\":\"banana\"},{\"_id\":\"54e1a1cefbddff7c6ca66d10\",\"index\":10,\"guid\":\"4d848cca-22f6-46c9-9bbc-4169469edf4e\",\"is_active\":false,\"balance\":\"$3,975.89\",\"picture\":\"http://placehold.it/32x32\",\"age\":34,\"eye_color\":\"brown\",\"name\":{\"first\":\"West\",\"last\":\"Pennington\"},\"company\":\"METROZ\",\"email\":\"west.pennington@metroz.ca\",\"phone\":\"+1 (945) 539-2837\",\"address\":\"299 Oak Street, Beechmont, Arizona, 9001\",\"about\":\"Nostrud officia dolor veniam ea qui elit ut et officia fugiat occaecat. Ipsum velit in culpa eu nostrud id. Sint consectetur occaecat do ad sunt nulla. Commodo fugiat aute ipsum esse quis eiusmod nostrud. Reprehenderit magna labore reprehenderit reprehenderit culpa dolor tempor.\\r\\n\",\"registered\":\"Monday, December 8, 2014 2:26 PM\",\"latitude\":80.466036,\"longitude\":77.304738,\"tags\":[\"est\",\"esse\",\"cupidatat\",\"minim\",\"ullamco\",\"velit\",\"sunt\"],\"range\":[0,1,2,3,4,5,6,7,8,9],\"friends\":[{\"id\":0,\"name\":\"Liz Martin\"},{\"id\":1,\"name\":\"Skinner Dyer\"},{\"id\":2,\"name\":\"Kay Cardenas\"}],\"images\":[{\"id\":\"54e1a1ce407e0808025a7656\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/10e2401b-6e91-4311-8cbc-2d4ec443db80\",\"description\":\"Ad voluptate esse id nostrud minim do.\"},{\"id\":\"54e1a1ce0e895cd4473644b9\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/e694553e-dc6d-46df-a90f-ac54a6a4b6b2\",\"description\":\"Laboris mollit deserunt eiusmod ad voluptate esse pariatur.\"},{\"id\":\"54e1a1ceda64f72f3289cc1a\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/ccfde79e-b502-4dbd-b5b0-ee3ee310d929\",\"description\":\"Fugiat consectetur sunt voluptate incididunt tempor velit quis.\"},{\"id\":\"54e1a1ce722de049a229128f\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/d6262fee-8b49-42c2-b41b-11bb8fd4ebf9\",\"description\":\"Ut ullamco ad non occaecat veniam.\"},{\"id\":\"54e1a1ceaba5e8b558f1e223\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/f7ab850e-3930-4660-a588-d4a275e82b35\",\"description\":\"Voluptate sunt enim dolore sit dolore nostrud ex ut commodo eu et id.\"},{\"id\":\"54e1a1ce1394322bd996ffb6\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/e8d18763-060e-46e7-85ff-1f6ab0bee4f9\",\"description\":\"Est magna magna ex duis adipisicing consectetur exercitation et non laborum incididunt id anim.\"},{\"id\":\"54e1a1ce025a66e99777ba22\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/c63c9e77-98c7-45a7-87d5-1c988fb65541\",\"description\":\"Aliquip velit anim laboris non eiusmod dolor.\"},{\"id\":\"54e1a1ce7dd7b9bc86e66ff5\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/278f8da8-58d9-4a28-8716-6198ee035117\",\"description\":\"Ipsum labore amet aliqua consequat aliquip ullamco proident.\"}],\"greeting\":\"Hello, West! You have 8 unread messages.\",\"favorite_fruit\":\"banana\"},{\"_id\":\"54e1a1ce9515ad807dc3c713\",\"index\":11,\"guid\":\"70b42d6e-9957-4dcd-940a-738ae354c325\",\"is_active\":true,\"balance\":\"$2,251.24\",\"picture\":\"http://placehold.it/32x32\",\"age\":25,\"eye_color\":\"brown\",\"name\":{\"first\":\"England\",\"last\":\"Workman\"},\"company\":\"COLUMELLA\",\"email\":\"england.workman@columella.net\",\"phone\":\"+1 (953) 420-2758\",\"address\":\"179 Riverdale Avenue, Layhill, South Dakota, 9467\",\"about\":\"Consequat ea nulla elit magna voluptate elit officia consectetur labore ex. Laborum amet dolor aliqua elit eu cillum sit enim ex deserunt ad consequat tempor consequat. Ad sit adipisicing aliqua nulla exercitation.\\r\\n\",\"registered\":\"Friday, October 24, 2014 2:21 PM\",\"latitude\":15.800238,\"longitude\":-147.703116,\"tags\":[\"laborum\",\"minim\",\"ullamco\",\"et\",\"sit\",\"quis\",\"ipsum\"],\"range\":[0,1,2,3,4,5,6,7,8,9],\"friends\":[{\"id\":0,\"name\":\"Dean Mckenzie\"},{\"id\":1,\"name\":\"Alba Gentry\"},{\"id\":2,\"name\":\"Brady Bridges\"}],\"images\":[{\"id\":\"54e1a1ce85b1876a05aea483\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/3aaa3fd9-e4b0-495b-b019-35d5b520c681\",\"description\":\"Excepteur amet ea voluptate dolore mollit ullamco sunt.\"},{\"id\":\"54e1a1ce5e9722d1faf2d6b2\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/f4a7d4a8-2dbf-4fb2-a0e9-7acce8767ee9\",\"description\":\"Deserunt proident consequat pariatur do velit culpa nostrud exercitation.\"},{\"id\":\"54e1a1ced761c459ebece68e\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/c56022f6-1d53-4427-a724-8a13bc124756\",\"description\":\"Do fugiat veniam eiusmod Lorem sunt irure.\"},{\"id\":\"54e1a1cee81a735c3bb6b945\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/c788ef79-089e-4904-a1fd-a01eb8fb1017\",\"description\":\"Deserunt nisi cillum laboris elit officia occaecat Lorem ex aliqua labore officia ut.\"},{\"id\":\"54e1a1ce9e60a72ea93e715b\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/143a57d6-6d31-4eca-b002-8172d2d92b50\",\"description\":\"Veniam Lorem quis dolor adipisicing incididunt adipisicing laboris nisi duis elit dolore qui occaecat.\"},{\"id\":\"54e1a1ce9da2a80ac44935a8\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/e2e3b66a-8a1f-43c9-8440-1ee35146af46\",\"description\":\"Mollit et nulla ut esse irure nulla sunt.\"},{\"id\":\"54e1a1ce8ee3c9ecbc3e98ea\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/673fb156-a4f5-42e9-94d7-b0603b47a10c\",\"description\":\"Aliquip in proident dolor ex ullamco non ullamco do cupidatat sunt eu.\"},{\"id\":\"54e1a1ce68fcab1eb5e8bd25\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/b2c47936-fa09-499c-ad77-ab4cb41efd1b\",\"description\":\"Sint quis cillum sint aliquip ea adipisicing aliquip exercitation mollit culpa.\"},{\"id\":\"54e1a1ceeeec4d8e68fd80f7\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/c55eb689-91f2-4392-b3aa-062f3211f25c\",\"description\":\"Eiusmod non reprehenderit nisi aliqua anim nulla tempor ullamco adipisicing consectetur sint ipsum.\"},{\"id\":\"54e1a1ce31d9b8ce2e4527ba\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/8f3210dc-803d-4113-be9b-a376a2284770\",\"description\":\"Eiusmod ipsum exercitation do ex laboris id quis est quis.\"},{\"id\":\"54e1a1ce6ed8d0ddcd4675b8\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/f797a8ea-3564-434f-994c-dfbb70fb6895\",\"description\":\"Elit cillum dolor exercitation excepteur velit aliqua adipisicing exercitation proident cupidatat magna do cupidatat sunt.\"}],\"greeting\":\"Hello, England! You have 8 unread messages.\",\"favorite_fruit\":\"apple\"},{\"_id\":\"54e1a1ce84a2c2f2a098f44e\",\"index\":12,\"guid\":\"f67d8193-c2ba-4fbb-9e03-f6b4b45de132\",\"is_active\":true,\"balance\":\"$1,720.70\",\"picture\":\"http://placehold.it/32x32\",\"age\":25,\"eye_color\":\"blue\",\"name\":{\"first\":\"Jill\",\"last\":\"Kirby\"},\"company\":\"OVOLO\",\"email\":\"jill.kirby@ovolo.tv\",\"phone\":\"+1 (813) 469-3444\",\"address\":\"611 Front Street, Finzel, Northern Mariana Islands, 2060\",\"about\":\"Et ea consectetur do enim nostrud exercitation. Enim elit ipsum et velit labore. Enim laborum duis esse culpa amet irure.\\r\\n\",\"registered\":\"Friday, March 21, 2014 9:34 PM\",\"latitude\":-73.109901,\"longitude\":48.916236,\"tags\":[\"elit\",\"consectetur\",\"sit\",\"amet\",\"incididunt\",\"et\",\"occaecat\"],\"range\":[0,1,2,3,4,5,6,7,8,9],\"friends\":[{\"id\":0,\"name\":\"Myra Levy\"},{\"id\":1,\"name\":\"Chan Horton\"},{\"id\":2,\"name\":\"Hendrix Michael\"}],\"images\":[{\"id\":\"54e1a1ce53f957221c2e0f5e\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/0ceb6323-34c4-43c9-9333-eb0ea4ba0bff\",\"description\":\"Officia ut cillum quis qui laborum ullamco enim.\"},{\"id\":\"54e1a1ce4be0e020d5b07ae1\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/e1278f37-6d4b-42de-a82e-b32cc94853ee\",\"description\":\"Adipisicing sit aliquip labore ipsum incididunt occaecat proident ex eu.\"},{\"id\":\"54e1a1ce38e7b6251e0d8ad1\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/286a53fc-e868-4e3d-896a-62a0b47a4288\",\"description\":\"Officia laborum occaecat Lorem ad dolor.\"},{\"id\":\"54e1a1ceebf04d01c3335dbc\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/252521ba-2da2-4454-bbdc-770565f32569\",\"description\":\"Nulla ipsum dolor amet incididunt culpa.\"},{\"id\":\"54e1a1ce7179d92e0c36c8bf\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/51acb28d-c371-45f4-9d18-f6fd458bcbdd\",\"description\":\"Ipsum veniam incididunt mollit in mollit dolor incididunt anim.\"},{\"id\":\"54e1a1ceed8d3beabd568d2d\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/ef01cf56-8320-4ed3-b256-9a662ed45665\",\"description\":\"Consectetur adipisicing labore eu pariatur qui reprehenderit enim cillum dolor cupidatat.\"},{\"id\":\"54e1a1ce38d63e3726e16de2\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/a7fe6e38-87ba-4632-a24e-570397fa76f2\",\"description\":\"Duis ea labore reprehenderit amet ad cupidatat.\"},{\"id\":\"54e1a1ceecee3e4f0598ba3c\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/2e398ab5-833b-4856-8745-7ceb34ded50b\",\"description\":\"Fugiat laborum consequat duis esse et ea.\"},{\"id\":\"54e1a1ce1832d6899fe893a1\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/9219e357-2fed-42ad-9ff4-5afe0c888d0d\",\"description\":\"Do in quis reprehenderit incididunt tempor elit voluptate eiusmod.\"},{\"id\":\"54e1a1cec34d22c320759c10\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/73652241-15fd-4d06-98af-7a12ed2b2272\",\"description\":\"Labore irure do mollit non.\"}],\"greeting\":\"Hello, Jill! You have 9 unread messages.\",\"favorite_fruit\":\"strawberry\"},{\"_id\":\"54e1a1ce14cd35ecfd685b6f\",\"index\":13,\"guid\":\"598ae3d0-5ec5-4116-b072-ce939b5085c5\",\"is_active\":true,\"balance\":\"$3,509.15\",\"picture\":\"http://placehold.it/32x32\",\"age\":25,\"eye_color\":\"blue\",\"name\":{\"first\":\"Valerie\",\"last\":\"Oliver\"},\"company\":\"STRALUM\",\"email\":\"valerie.oliver@stralum.biz\",\"phone\":\"+1 (928) 441-2110\",\"address\":\"694 Suydam Place, Sparkill, Rhode Island, 506\",\"about\":\"Anim esse nulla velit enim duis ad cillum. Amet tempor ipsum irure velit labore sunt in Lorem quis consequat tempor in. Dolor ea ipsum quis laboris ad mollit amet laboris irure non Lorem qui. Eu minim exercitation ea veniam officia eu cupidatat mollit non nulla. Ullamco quis sit excepteur et et.\\r\\n\",\"registered\":\"Thursday, August 21, 2014 3:55 AM\",\"latitude\":18.968254,\"longitude\":-148.479649,\"tags\":[\"labore\",\"mollit\",\"do\",\"irure\",\"Lorem\",\"sit\",\"cupidatat\"],\"range\":[0,1,2,3,4,5,6,7,8,9],\"friends\":[{\"id\":0,\"name\":\"Malinda Burt\"},{\"id\":1,\"name\":\"Henderson Ballard\"},{\"id\":2,\"name\":\"Cotton Avila\"}],\"images\":[{\"id\":\"54e1a1ce8dfe2626bf3d01bb\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/259e88c8-c3b4-4e5a-a6d7-4b87c6d8238c\",\"description\":\"Incididunt proident minim voluptate duis.\"},{\"id\":\"54e1a1ce001f6b02afcab2bb\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/81b4788e-97ae-4adc-b8ba-97cd12b279a4\",\"description\":\"Labore dolor velit adipisicing ad aliqua.\"},{\"id\":\"54e1a1ce73dc071a19ece669\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/c7c6c3b6-d7ff-4a06-9f92-cf0e91056cbd\",\"description\":\"Cupidatat labore id ea elit incididunt nisi et esse minim ex voluptate.\"},{\"id\":\"54e1a1ceaa4ed9413fdb1651\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/c87768a2-3062-4111-9cff-a23129730827\",\"description\":\"Nisi Lorem proident excepteur ex mollit adipisicing.\"},{\"id\":\"54e1a1ce6e9f567ea117f8ab\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/0b7ed4c1-10e5-400b-8a6c-afc633ff99e8\",\"description\":\"Voluptate amet amet nulla ipsum aliqua exercitation incididunt enim.\"},{\"id\":\"54e1a1ce0cd7b741b68b3053\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/a6a37089-d358-4428-8507-90cd4b0e6cc2\",\"description\":\"Eiusmod labore laborum mollit ex duis cillum qui nulla magna proident dolore laboris culpa.\"},{\"id\":\"54e1a1ceff09cba096b26eca\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/0b498c77-0488-4c08-86eb-c727710fe821\",\"description\":\"Duis deserunt voluptate qui officia sint culpa irure mollit officia nisi est mollit.\"},{\"id\":\"54e1a1ced17042dcf30748cd\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/2c0e2433-fe23-40d2-8877-b9c020d5a57a\",\"description\":\"Non laboris in id non.\"},{\"id\":\"54e1a1ce7a61034d5fca856b\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/53895316-eb72-4be4-aa71-d8f657e28e15\",\"description\":\"Consequat consectetur ut mollit non dolore mollit incididunt.\"},{\"id\":\"54e1a1ce643c910b22494be8\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/6dc0babb-8daf-436d-8eef-7143cd0ea5ca\",\"description\":\"Qui nostrud fugiat sint dolore proident.\"}],\"greeting\":\"Hello, Valerie! You have 8 unread messages.\",\"favorite_fruit\":\"apple\"},{\"_id\":\"54e1a1ceae5c2d93834ea6f6\",\"index\":14,\"guid\":\"d55e637f-3bc6-4dbd-8cda-cffdc3ba2422\",\"is_active\":true,\"balance\":\"$2,479.99\",\"picture\":\"http://placehold.it/32x32\",\"age\":40,\"eye_color\":\"green\",\"name\":{\"first\":\"Lora\",\"last\":\"Farley\"},\"company\":\"PROTODYNE\",\"email\":\"lora.farley@protodyne.co.uk\",\"phone\":\"+1 (908) 400-2052\",\"address\":\"453 Folsom Place, Ironton, Idaho, 5511\",\"about\":\"Mollit veniam amet consequat occaecat mollit laboris irure. Commodo id nulla consequat aliquip officia do ea esse sunt excepteur laborum veniam Lorem. Ipsum sunt deserunt magna amet velit ullamco. Exercitation eu nisi enim nisi et sint esse duis eu aliquip. Amet minim aliquip exercitation magna irure. Minim sunt consequat anim incididunt cupidatat incididunt dolor qui ipsum et esse cupidatat.\\r\\n\",\"registered\":\"Saturday, August 9, 2014 3:04 AM\",\"latitude\":-44.0081,\"longitude\":93.265839,\"tags\":[\"amet\",\"culpa\",\"aliqua\",\"aliquip\",\"veniam\",\"dolore\",\"eiusmod\"],\"range\":[0,1,2,3,4,5,6,7,8,9],\"friends\":[{\"id\":0,\"name\":\"Cindy Mcleod\"},{\"id\":1,\"name\":\"Janie Shields\"},{\"id\":2,\"name\":\"Wood Richardson\"}],\"images\":[{\"id\":\"54e1a1cecbfe322bd1917ab2\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/f25ab727-165a-48b7-a024-ccca94ebc626\",\"description\":\"Incididunt anim qui anim eiusmod amet commodo reprehenderit eu enim.\"},{\"id\":\"54e1a1ce423b049407bb5c0f\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/f787d7e9-5c96-4ce7-ae4e-cd7721873761\",\"description\":\"Ea aute officia adipisicing ea enim elit mollit cupidatat sunt.\"},{\"id\":\"54e1a1cecdef20dc5ffbf7b4\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/baf768ea-1974-4050-98db-58e399f6300d\",\"description\":\"Occaecat sit anim enim est commodo velit quis dolore.\"},{\"id\":\"54e1a1ce9f575baf8400a93e\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/a802fdcd-6836-4142-9a9a-cd241c874afb\",\"description\":\"Adipisicing nisi qui nisi nulla ullamco adipisicing aliqua consectetur.\"},{\"id\":\"54e1a1ce7c97204f26c430a2\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/d357c646-8ac6-4748-bc04-ac8027fd5749\",\"description\":\"Dolor exercitation anim ex consectetur do incididunt deserunt Lorem.\"},{\"id\":\"54e1a1ce4e32ab41417cf6ca\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/ded5e54a-24d8-4b38-9456-fa44090c5ab1\",\"description\":\"Ut reprehenderit nisi exercitation aliquip.\"},{\"id\":\"54e1a1cee219b346cfc6ca8b\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/c329019e-7897-45b9-82f6-3d8b0b674688\",\"description\":\"Culpa culpa esse reprehenderit proident commodo commodo ut nostrud aute fugiat id.\"},{\"id\":\"54e1a1ceda701b7592849092\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/d23aead3-d620-47bc-abd2-73af5329f643\",\"description\":\"Velit culpa amet ex pariatur do dolore elit dolore fugiat id proident id.\"},{\"id\":\"54e1a1ce5f9e5e4429f49386\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/6ed447cd-c1b9-4e25-b943-40b6ee853ab9\",\"description\":\"Sunt proident commodo quis reprehenderit consequat enim.\"},{\"id\":\"54e1a1ce2f9ca2421090b7d1\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/6337707e-b8ff-4e9f-8d2b-96aef1fa8360\",\"description\":\"Deserunt sint aute aliquip deserunt eu culpa velit amet in esse.\"}],\"greeting\":\"Hello, Lora! You have 5 unread messages.\",\"favorite_fruit\":\"strawberry\"},{\"_id\":\"54e1a1cee3d83a31e9101d3d\",\"index\":15,\"guid\":\"b4d4c220-195a-4c94-b711-01ec0f32ad8f\",\"is_active\":false,\"balance\":\"$1,214.96\",\"picture\":\"http://placehold.it/32x32\",\"age\":31,\"eye_color\":\"brown\",\"name\":{\"first\":\"Bates\",\"last\":\"Morin\"},\"company\":\"PEARLESSA\",\"email\":\"bates.morin@pearlessa.org\",\"phone\":\"+1 (926) 528-2174\",\"address\":\"939 Lewis Place, Thynedale, Alabama, 7709\",\"about\":\"Ea Lorem consectetur ea laboris deserunt. Non dolor ullamco deserunt deserunt ut elit in amet excepteur minim nostrud voluptate. Culpa id velit amet id ullamco eiusmod incididunt velit. Veniam proident sit laboris Lorem dolore labore esse sunt anim tempor occaecat dolore. Anim ex qui tempor dolor officia in. Ea deserunt laboris laborum aute nisi ullamco quis elit minim in laboris esse velit quis. Aliquip quis minim minim aliquip consectetur occaecat consectetur ullamco aute dolor.\\r\\n\",\"registered\":\"Tuesday, January 20, 2015 8:53 PM\",\"latitude\":40.995095,\"longitude\":49.397523,\"tags\":[\"nisi\",\"non\",\"sint\",\"aliqua\",\"occaecat\",\"incididunt\",\"est\"],\"range\":[0,1,2,3,4,5,6,7,8,9],\"friends\":[{\"id\":0,\"name\":\"Curry Sanders\"},{\"id\":1,\"name\":\"Irwin Burgess\"},{\"id\":2,\"name\":\"Jackson Arnold\"}],\"images\":[{\"id\":\"54e1a1ceed7b60299196ef0b\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/0ae2638e-0435-422d-9fa4-0c915087778c\",\"description\":\"Reprehenderit ipsum eiusmod enim ullamco id ex nostrud.\"},{\"id\":\"54e1a1ce6dcbcfb603a1b3e9\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/e163a9b0-7d11-4326-8b20-c9d756120012\",\"description\":\"Tempor et mollit laborum ut incididunt et fugiat magna elit dolor aliquip enim.\"},{\"id\":\"54e1a1cedb9bb69ad85886bb\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/3b51b0e0-2f0b-4ae0-b9d5-92e3924fd1ec\",\"description\":\"Enim non nostrud amet Lorem officia esse Lorem.\"},{\"id\":\"54e1a1ce6fb597f1a232ebda\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/d1e52264-831a-47a1-b8c6-84b109f4c26f\",\"description\":\"Adipisicing sint et elit exercitation.\"},{\"id\":\"54e1a1ced799882ac9ece1a4\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/40a48f50-ba51-4cba-8a27-a5b1284a79ee\",\"description\":\"Nisi adipisicing et culpa proident fugiat.\"},{\"id\":\"54e1a1cee2af41694688943f\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/bb4104c3-5ac9-4ebf-b874-f2baab7c1601\",\"description\":\"In enim ipsum irure ut elit adipisicing nisi labore sint cillum tempor esse.\"},{\"id\":\"54e1a1ce0da1d326ef40a5f3\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/9b6f7746-b287-4593-8079-096b52fa0273\",\"description\":\"Nulla elit deserunt laboris laborum ut laboris fugiat.\"},{\"id\":\"54e1a1ceaf5dfa30dc6a186c\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/5fa6e580-9fae-4d4d-be30-8518cecb97f5\",\"description\":\"Ex elit do occaecat amet reprehenderit qui et Lorem.\"},{\"id\":\"54e1a1ce9ec781a498dc3758\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/3a716b9d-460c-4dcf-87f4-1be116142022\",\"description\":\"Eiusmod excepteur irure ea consectetur do.\"},{\"id\":\"54e1a1ce98e0c872fb5c8c59\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/2ac19cee-dd98-4eb7-972d-079dde198740\",\"description\":\"Est incididunt sint veniam est ipsum irure elit do in sint do.\"}],\"greeting\":\"Hello, Bates! You have 7 unread messages.\",\"favorite_fruit\":\"apple\"},{\"_id\":\"54e1a1ceeb8d196aa93479ac\",\"index\":16,\"guid\":\"a9f62720-5616-43a9-a9d6-5e81e9709151\",\"is_active\":true,\"balance\":\"$1,164.18\",\"picture\":\"http://placehold.it/32x32\",\"age\":40,\"eye_color\":\"blue\",\"name\":{\"first\":\"Mcleod\",\"last\":\"Reed\"},\"company\":\"ACRUEX\",\"email\":\"mcleod.reed@acruex.info\",\"phone\":\"+1 (833) 545-3301\",\"address\":\"170 Bayview Place, Lavalette, Pennsylvania, 2524\",\"about\":\"Ut anim nisi in reprehenderit minim velit cupidatat ad minim ipsum elit. Aliqua ad incididunt ex cupidatat. Duis proident dolore Lorem excepteur cillum eu exercitation mollit enim et. Aliquip cillum aliquip proident in laborum amet ea ad. Mollit magna laboris id eiusmod laborum non voluptate quis sit Lorem fugiat.\\r\\n\",\"registered\":\"Thursday, November 20, 2014 4:32 AM\",\"latitude\":14.36151,\"longitude\":72.383009,\"tags\":[\"ut\",\"eu\",\"proident\",\"exercitation\",\"exercitation\",\"nulla\",\"ipsum\"],\"range\":[0,1,2,3,4,5,6,7,8,9],\"friends\":[{\"id\":0,\"name\":\"Myrtle Hopper\"},{\"id\":1,\"name\":\"Murphy Wilkinson\"},{\"id\":2,\"name\":\"Morin Sweeney\"}],\"images\":[{\"id\":\"54e1a1ce73598c74d520edef\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/669c3da4-aa2b-4048-a4d2-4227e0379311\",\"description\":\"Anim fugiat sunt qui pariatur mollit esse mollit est adipisicing veniam minim commodo.\"},{\"id\":\"54e1a1ce6ff7d3769bd14738\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/b2327d50-12e5-43fa-97a1-1a712768f96f\",\"description\":\"Nostrud irure sit officia velit non quis minim labore.\"},{\"id\":\"54e1a1ce0388b996e1d00446\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/6c33d92d-635a-4302-9d17-2a8183d6f66f\",\"description\":\"Exercitation velit non consequat consequat exercitation irure consectetur.\"},{\"id\":\"54e1a1cec0ea2c101a2b25d3\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/abcc7aed-3774-4aab-a6cb-fe27f9dfad5d\",\"description\":\"Reprehenderit magna nulla culpa velit laboris occaecat esse duis ut eu aute et anim.\"},{\"id\":\"54e1a1ceef3111011070f178\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/8b7f6514-e363-4216-8f6e-11b39461b3c6\",\"description\":\"Amet officia esse quis cupidatat.\"},{\"id\":\"54e1a1ce3733b6184552917a\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/fb1b87b7-c335-4d65-878f-f12a510c0a8c\",\"description\":\"Proident nisi exercitation elit ullamco laboris officia ea ut ex adipisicing.\"},{\"id\":\"54e1a1ced13d50bdec35c26b\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/bdeadb7b-1ef3-4ddc-93ba-aab01de1745a\",\"description\":\"Quis ex ea eu proident minim id laborum adipisicing ipsum nostrud sunt fugiat aute duis.\"},{\"id\":\"54e1a1cea2539d6004203ba5\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/a7ac0870-bf57-4560-8e76-eaba336ec343\",\"description\":\"Labore irure consequat labore exercitation deserunt Lorem veniam anim nostrud duis reprehenderit.\"},{\"id\":\"54e1a1cee696f08cd1a902ec\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/67b3f839-44b2-4924-a4f0-676746bcdf7d\",\"description\":\"Quis incididunt aliqua est amet ad ut mollit minim aliqua nostrud voluptate qui tempor esse.\"},{\"id\":\"54e1a1ce0f6c35328b4a2740\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/fb1cd562-886f-4191-9bd7-c5f8a9b99ed3\",\"description\":\"Minim aliqua amet consectetur esse esse reprehenderit labore amet.\"},{\"id\":\"54e1a1ce3331c212a92d7b63\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/b4e131f5-9713-4ec9-a759-c198a1d72ebe\",\"description\":\"Est duis officia pariatur in non voluptate duis consequat pariatur et.\"},{\"id\":\"54e1a1ce5fdcd1a30e70a89e\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/98ade992-fbe4-4d0d-b4cc-b7ce470a33cd\",\"description\":\"Est tempor exercitation anim voluptate est non aliquip minim labore labore anim consequat amet.\"}],\"greeting\":\"Hello, Mcleod! You have 9 unread messages.\",\"favorite_fruit\":\"banana\"},{\"_id\":\"54e1a1ce731f12b526fdb645\",\"index\":17,\"guid\":\"f20bc938-2271-4b88-8fce-9f2152364c85\",\"is_active\":false,\"balance\":\"$3,482.87\",\"picture\":\"http://placehold.it/32x32\",\"age\":37,\"eye_color\":\"green\",\"name\":{\"first\":\"Petersen\",\"last\":\"Kerr\"},\"company\":\"PULZE\",\"email\":\"petersen.kerr@pulze.me\",\"phone\":\"+1 (880) 514-3527\",\"address\":\"988 Canarsie Road, Kilbourne, Oregon, 3513\",\"about\":\"Aute proident eu laborum magna minim in. In aliqua est est consequat deserunt aliquip adipisicing pariatur amet Lorem ad. Incididunt deserunt ullamco nulla in veniam enim nulla duis anim excepteur veniam reprehenderit. Tempor adipisicing laborum sunt Lorem consequat minim pariatur tempor commodo deserunt officia nostrud duis consectetur. Reprehenderit cillum velit sit tempor dolore fugiat. Ut nisi nulla eu cupidatat qui culpa velit sint incididunt. Labore ipsum non incididunt in est minim sit veniam officia ea ad dolor sunt.\\r\\n\",\"registered\":\"Monday, June 2, 2014 10:38 AM\",\"latitude\":78.149782,\"longitude\":86.585177,\"tags\":[\"aute\",\"id\",\"dolore\",\"et\",\"ea\",\"non\",\"veniam\"],\"range\":[0,1,2,3,4,5,6,7,8,9],\"friends\":[{\"id\":0,\"name\":\"Lucia Garner\"},{\"id\":1,\"name\":\"Stefanie Jennings\"},{\"id\":2,\"name\":\"Annie Gardner\"}],\"images\":[{\"id\":\"54e1a1ce2996fb815e4363a5\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/ebb04abd-bf22-4d1e-bab8-b3d124744ebc\",\"description\":\"Dolor incididunt Lorem mollit consectetur esse ut sunt.\"},{\"id\":\"54e1a1cee73c11e50c55e31d\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/5d2c073c-edad-40a0-8603-a639d9d76dab\",\"description\":\"Non nostrud incididunt consequat dolor dolor sit cupidatat ipsum.\"},{\"id\":\"54e1a1ce4d0faa089b8c6295\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/12f6f77e-ed27-45e7-8f8b-a8d07ef90846\",\"description\":\"Non dolor velit nulla laborum deserunt voluptate eu nostrud irure veniam.\"},{\"id\":\"54e1a1ce22434fd1fe378986\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/10c9da09-8153-4bb4-8669-a7507006114c\",\"description\":\"Cupidatat labore velit ut commodo minim cillum laborum pariatur proident.\"},{\"id\":\"54e1a1cebf927cfcb0255337\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/e3304db2-6513-466d-b6fd-c12424c51270\",\"description\":\"Sit cupidatat sit dolor sit.\"},{\"id\":\"54e1a1cec421b648e92ca064\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/d45958de-dd8b-414e-86a5-a935839b5351\",\"description\":\"Laborum cillum anim cupidatat adipisicing deserunt elit occaecat minim eiusmod culpa officia in.\"},{\"id\":\"54e1a1ce7b548c015d05e5a2\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/4b80bb8f-2a9e-44a9-9603-3542286b4516\",\"description\":\"Voluptate occaecat fugiat labore in ea.\"},{\"id\":\"54e1a1ce3518c18b69faf1d8\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/3189aead-2f50-41aa-927a-ffe88cd88ac8\",\"description\":\"Nostrud dolor velit excepteur aliqua.\"},{\"id\":\"54e1a1ce12cd43be16aee9b5\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/87ffcf4d-7744-4a27-99f8-8bf31a960af7\",\"description\":\"Dolor mollit reprehenderit et exercitation fugiat cupidatat eu sit.\"}],\"greeting\":\"Hello, Petersen! You have 7 unread messages.\",\"favorite_fruit\":\"banana\"},{\"_id\":\"54e1a1cefce03c3a8906c98c\",\"index\":18,\"guid\":\"7d014629-d1c6-45b5-85c4-621a4791d6dd\",\"is_active\":false,\"balance\":\"$2,881.87\",\"picture\":\"http://placehold.it/32x32\",\"age\":34,\"eye_color\":\"brown\",\"name\":{\"first\":\"Harriett\",\"last\":\"Abbott\"},\"company\":\"RENOVIZE\",\"email\":\"harriett.abbott@renovize.com\",\"phone\":\"+1 (921) 410-3375\",\"address\":\"886 Bath Avenue, Deseret, Minnesota, 4482\",\"about\":\"Nisi laborum nisi mollit exercitation fugiat fugiat sunt minim tempor et. Labore laboris duis proident minim proident qui et aliquip amet eu nulla. Occaecat cupidatat minim irure esse mollit ut aliquip.\\r\\n\",\"registered\":\"Monday, November 10, 2014 11:32 PM\",\"latitude\":-75.706227,\"longitude\":30.528807,\"tags\":[\"laboris\",\"sunt\",\"nostrud\",\"et\",\"non\",\"reprehenderit\",\"proident\"],\"range\":[0,1,2,3,4,5,6,7,8,9],\"friends\":[{\"id\":0,\"name\":\"Joann Meyer\"},{\"id\":1,\"name\":\"Hannah Nash\"},{\"id\":2,\"name\":\"Baird Gomez\"}],\"images\":[{\"id\":\"54e1a1cebcb4f51015bacbb8\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/01645359-bf74-4dea-a113-bc825a2595c1\",\"description\":\"Deserunt minim qui dolor occaecat id enim labore excepteur ullamco dolore commodo anim est.\"},{\"id\":\"54e1a1ce3e410d56ed077087\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/9db206ee-7ae6-4ebe-8958-ff8340128478\",\"description\":\"Voluptate labore reprehenderit pariatur ullamco proident eu sint commodo sit do ullamco laborum laboris proident.\"},{\"id\":\"54e1a1ce8a5d3954b4764c72\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/b549b477-dfc2-4032-afab-5ed676154674\",\"description\":\"Irure ex nulla consequat proident nulla ut laboris esse do commodo.\"},{\"id\":\"54e1a1ce5a0398b81fc97956\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/67d8a982-14d3-4308-814d-7fa9593a008a\",\"description\":\"Nostrud occaecat cupidatat deserunt eiusmod anim adipisicing amet exercitation tempor Lorem consectetur ea labore labore.\"},{\"id\":\"54e1a1ced64984c1b5c03c8b\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/bbeee224-079a-485e-8c78-ecd6cc21ed5f\",\"description\":\"Excepteur aliqua esse dolor amet pariatur incididunt minim adipisicing consectetur dolor enim velit.\"},{\"id\":\"54e1a1cee96222238d89f9ed\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/b441672e-21c5-41e8-b996-e5dc3fc429f9\",\"description\":\"Consequat in amet quis reprehenderit adipisicing veniam exercitation amet excepteur minim duis eu consectetur in.\"},{\"id\":\"54e1a1cec935ca03fcacabd7\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/4f509fce-8526-422a-acf3-adbc3ffb07c4\",\"description\":\"Labore reprehenderit mollit labore quis laboris ullamco quis.\"},{\"id\":\"54e1a1ce5b1bd7211d392564\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/6dd49fc6-c5fa-4576-a958-8791adec5cf7\",\"description\":\"Sit ad ullamco irure ad do sit do ullamco do aute ex exercitation et deserunt.\"}],\"greeting\":\"Hello, Harriett! You have 10 unread messages.\",\"favorite_fruit\":\"apple\"},{\"_id\":\"54e1a1ce2e83e128d0d3f914\",\"index\":19,\"guid\":\"4c7baa5e-8ff4-437c-b6e9-862e47094208\",\"is_active\":true,\"balance\":\"$2,287.42\",\"picture\":\"http://placehold.it/32x32\",\"age\":20,\"eye_color\":\"green\",\"name\":{\"first\":\"Marianne\",\"last\":\"Dawson\"},\"company\":\"AVIT\",\"email\":\"marianne.dawson@avit.biz\",\"phone\":\"+1 (893) 427-3434\",\"address\":\"714 Dictum Court, Denio, Colorado, 1244\",\"about\":\"Exercitation officia pariatur commodo laboris proident magna velit qui consequat dolor officia non pariatur. Ex ullamco ut cupidatat pariatur occaecat exercitation. Est aute fugiat pariatur est aliqua. Quis labore mollit officia adipisicing cillum sit duis eu occaecat minim. Id fugiat esse ex dolore non aliqua proident eiusmod veniam cillum commodo nostrud incididunt irure. Ipsum est ut consequat fugiat laborum magna non do ipsum deserunt et est.\\r\\n\",\"registered\":\"Tuesday, January 7, 2014 1:33 PM\",\"latitude\":8.096266,\"longitude\":121.598689,\"tags\":[\"incididunt\",\"amet\",\"minim\",\"voluptate\",\"sint\",\"cupidatat\",\"ut\"],\"range\":[0,1,2,3,4,5,6,7,8,9],\"friends\":[{\"id\":0,\"name\":\"Twila Houston\"},{\"id\":1,\"name\":\"Hall Dean\"},{\"id\":2,\"name\":\"Hurst Carson\"}],\"images\":[{\"id\":\"54e1a1cedcade02d7d7068ae\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/35b2082d-27d9-47b8-bade-c7f63ca22dd8\",\"description\":\"Sit irure pariatur excepteur nulla pariatur cupidatat.\"},{\"id\":\"54e1a1ce142c5ea5364b623c\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/0006753f-3ed0-475c-b159-900c8529b010\",\"description\":\"Qui irure consequat voluptate amet proident.\"},{\"id\":\"54e1a1ce366c2a3a8a6d4f50\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/19e86fe2-460c-439f-b020-a1042bd0bbb7\",\"description\":\"Mollit culpa ut reprehenderit non quis.\"},{\"id\":\"54e1a1ceb21923859be09cc2\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/d84afd70-e2c6-4b05-bfd1-634a9a1311c7\",\"description\":\"In et cillum minim elit Lorem cillum aute ea.\"},{\"id\":\"54e1a1ce824af81715cec65b\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/0eded9a6-05e6-443d-93a5-dd39d7430073\",\"description\":\"Cupidatat ea fugiat irure voluptate sunt.\"},{\"id\":\"54e1a1ce8d7f3812731bc6a4\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/d1a331d2-09cb-47a6-a9bc-1e3916465637\",\"description\":\"Consectetur nulla consequat mollit ea voluptate nostrud cillum aliquip officia ipsum est do.\"},{\"id\":\"54e1a1cea52b8e82b72b9206\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/f4804867-1d66-419b-bd72-18e80bdcb343\",\"description\":\"Qui quis sint id do culpa nisi in amet dolor adipisicing proident.\"}],\"greeting\":\"Hello, Marianne! You have 10 unread messages.\",\"favorite_fruit\":\"banana\"},{\"_id\":\"54e1a1ce6687770482f3f5af\",\"index\":20,\"guid\":\"4cdac1c0-4e3a-417f-8238-76abcc96890a\",\"is_active\":true,\"balance\":\"$2,216.01\",\"picture\":\"http://placehold.it/32x32\",\"age\":37,\"eye_color\":\"green\",\"name\":{\"first\":\"Tia\",\"last\":\"Perez\"},\"company\":\"LOVEPAD\",\"email\":\"tia.perez@lovepad.io\",\"phone\":\"+1 (858) 565-2690\",\"address\":\"666 Lake Street, Chesterfield, Virgin Islands, 5246\",\"about\":\"Dolor consectetur cupidatat officia ex duis labore magna magna. Consequat incididunt adipisicing in nisi ut exercitation ea ad tempor. Laboris ullamco sunt nulla pariatur ea sunt.\\r\\n\",\"registered\":\"Wednesday, June 4, 2014 12:40 PM\",\"latitude\":0.825276,\"longitude\":174.652894,\"tags\":[\"mollit\",\"duis\",\"est\",\"commodo\",\"ea\",\"aute\",\"amet\"],\"range\":[0,1,2,3,4,5,6,7,8,9],\"friends\":[{\"id\":0,\"name\":\"Wall Robinson\"},{\"id\":1,\"name\":\"Lopez Walker\"},{\"id\":2,\"name\":\"Julia Short\"}],\"images\":[{\"id\":\"54e1a1ce287aea74b22ff9b7\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/faeff59f-e9d9-4aa1-9481-7a8e1cfa2bdf\",\"description\":\"Ex officia ad proident velit do cillum labore et eu eu pariatur do fugiat.\"},{\"id\":\"54e1a1ce1fb513a16d2229f7\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/6224cda8-4f3e-4141-94a2-e82fb46cf1a0\",\"description\":\"Dolore amet excepteur veniam non anim ex voluptate ad anim ad occaecat et.\"},{\"id\":\"54e1a1cec55837d5743f490e\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/d5d7e5e5-2078-45fc-88d9-248f36531cd0\",\"description\":\"In cupidatat consequat nulla ut fugiat cillum commodo nulla qui Lorem aliqua.\"},{\"id\":\"54e1a1ce6e495b3d048ef0d5\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/7941a4fa-706b-458b-a42b-64067efd51bc\",\"description\":\"Anim officia irure mollit veniam non velit nostrud id ea.\"},{\"id\":\"54e1a1ce4dc580826ebe936f\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/fa449e7d-a723-403e-935f-0076761b2984\",\"description\":\"Laboris proident officia enim anim eu nisi consectetur exercitation pariatur culpa irure ipsum anim.\"},{\"id\":\"54e1a1ce424784a54debe556\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/a089c180-c703-4f94-a70f-42fa375c230c\",\"description\":\"Voluptate et quis exercitation dolore minim elit officia laborum.\"}],\"greeting\":\"Hello, Tia! You have 8 unread messages.\",\"favorite_fruit\":\"banana\"},{\"_id\":\"54e1a1ce48968aa0984082ab\",\"index\":21,\"guid\":\"5c5b7b36-8844-4a2e-95a5-57eac8579e18\",\"is_active\":true,\"balance\":\"$1,821.58\",\"picture\":\"http://placehold.it/32x32\",\"age\":31,\"eye_color\":\"green\",\"name\":{\"first\":\"Woodward\",\"last\":\"Hicks\"},\"company\":\"SLAMBDA\",\"email\":\"woodward.hicks@slambda.name\",\"phone\":\"+1 (926) 527-2362\",\"address\":\"147 Grove Street, Riner, Florida, 3557\",\"about\":\"Consectetur est voluptate velit incididunt fugiat ullamco labore irure ullamco anim enim proident tempor laboris. Aute ut aliquip cillum ut sunt amet tempor aute magna exercitation occaecat amet nostrud. Velit sunt ad ut qui aliqua eu reprehenderit. Ipsum velit tempor id aute officia ex reprehenderit elit reprehenderit reprehenderit incididunt reprehenderit adipisicing nisi. Mollit laboris quis commodo exercitation. Sunt ea magna minim magna ea eiusmod sint est reprehenderit esse duis id aliquip.\\r\\n\",\"registered\":\"Thursday, May 8, 2014 7:58 AM\",\"latitude\":-42.423855,\"longitude\":2.812114,\"tags\":[\"enim\",\"fugiat\",\"cupidatat\",\"dolore\",\"irure\",\"aliquip\",\"non\"],\"range\":[0,1,2,3,4,5,6,7,8,9],\"friends\":[{\"id\":0,\"name\":\"Carrie Espinoza\"},{\"id\":1,\"name\":\"Sandoval Schultz\"},{\"id\":2,\"name\":\"Kelley Hodges\"}],\"images\":[{\"id\":\"54e1a1cee59c20262380b0d9\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/fbe949e4-d56c-4076-83d4-35ac5da3f525\",\"description\":\"Excepteur occaecat consequat pariatur consectetur consequat sunt est.\"},{\"id\":\"54e1a1ceab24cb14ac306e36\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/e7f40966-9b1b-49e8-8da4-3d9de22bd567\",\"description\":\"Reprehenderit culpa in fugiat elit duis sint sit quis exercitation enim.\"},{\"id\":\"54e1a1ceb1f436c184ea2786\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/3312b08e-c7ee-4d99-8aea-9ec67dc7e1e8\",\"description\":\"Ullamco eu qui excepteur consequat qui aliquip est magna proident occaecat duis sunt occaecat est.\"},{\"id\":\"54e1a1ce383845b874aaf3f8\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/1b05117f-0a03-47d1-99cd-41daaed647da\",\"description\":\"Ad ea cupidatat velit reprehenderit est officia excepteur Lorem deserunt cupidatat cupidatat culpa occaecat.\"},{\"id\":\"54e1a1ce9acb8fdafa003859\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/cde28c2e-402a-44ea-acfd-1b87531f2df4\",\"description\":\"Et commodo tempor ex aliqua ut proident aliquip mollit aliqua sit non adipisicing ex.\"}],\"greeting\":\"Hello, Woodward! You have 8 unread messages.\",\"favorite_fruit\":\"banana\"},{\"_id\":\"54e1a1cebbd588fc7df43155\",\"index\":22,\"guid\":\"374a140c-298a-416a-a33d-02ff33c60e12\",\"is_active\":false,\"balance\":\"$3,811.09\",\"picture\":\"http://placehold.it/32x32\",\"age\":32,\"eye_color\":\"green\",\"name\":{\"first\":\"Jefferson\",\"last\":\"Gill\"},\"company\":\"ISOLOGIA\",\"email\":\"jefferson.gill@isologia.ca\",\"phone\":\"+1 (999) 448-2370\",\"address\":\"803 Boerum Place, Brownsville, North Dakota, 6575\",\"about\":\"Dolore esse fugiat sit cupidatat occaecat. Veniam duis aute do aliqua ipsum. Occaecat id voluptate ex ipsum labore Lorem irure ex. Excepteur dolore dolor eu irure ut aliqua proident elit eu tempor magna. Qui tempor duis ipsum ipsum reprehenderit enim in est mollit adipisicing est veniam. Dolor proident sunt veniam quis cillum adipisicing consectetur est consequat ea aliqua sunt sint ad. Consequat voluptate dolor reprehenderit dolor minim culpa laborum ex eiusmod cupidatat.\\r\\n\",\"registered\":\"Saturday, September 6, 2014 6:19 AM\",\"latitude\":-87.491617,\"longitude\":34.235035,\"tags\":[\"proident\",\"ullamco\",\"et\",\"excepteur\",\"amet\",\"dolore\",\"occaecat\"],\"range\":[0,1,2,3,4,5,6,7,8,9],\"friends\":[{\"id\":0,\"name\":\"Young Hardy\"},{\"id\":1,\"name\":\"Mcconnell Irwin\"},{\"id\":2,\"name\":\"Elsa Holland\"}],\"images\":[{\"id\":\"54e1a1ce9bfd27a77264a415\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/3c079cf4-d661-491d-9763-5e33132ab693\",\"description\":\"Fugiat irure pariatur duis officia dolor aliqua duis laborum reprehenderit.\"},{\"id\":\"54e1a1cef3205c8d4d15a656\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/503252d1-24d8-4268-9908-e39a0bb4d2af\",\"description\":\"Do nostrud eiusmod proident ut magna dolor incididunt.\"},{\"id\":\"54e1a1ce8ed2821bade3f96f\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/203a24b4-807d-4435-adce-2325c744665c\",\"description\":\"Ut eiusmod adipisicing officia aute adipisicing minim irure est sunt cupidatat eiusmod aute esse.\"},{\"id\":\"54e1a1ced1509d228c930d42\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/3a3f7d26-0ad4-400d-baad-5fe846f84ac6\",\"description\":\"Aliqua consequat ex nisi velit consectetur officia officia.\"},{\"id\":\"54e1a1ce453c0fe58fc07063\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/e12c0239-cb8c-4a83-9e49-d40d58b3f545\",\"description\":\"Adipisicing voluptate ad do officia Lorem.\"},{\"id\":\"54e1a1ce87e12f90f812b350\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/69081704-b17d-40b0-8e3c-7d9b8de9cc00\",\"description\":\"Nisi officia sint minim voluptate veniam culpa reprehenderit consequat eiusmod.\"},{\"id\":\"54e1a1ce0446c02dd9cf3ac9\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/6dc9a85f-fe7e-4714-b54b-d944a620369c\",\"description\":\"Et proident aliqua mollit mollit cupidatat consectetur anim labore in cillum reprehenderit laborum ad nostrud.\"}],\"greeting\":\"Hello, Jefferson! You have 9 unread messages.\",\"favorite_fruit\":\"strawberry\"},{\"_id\":\"54e1a1ce809898f6293dda7e\",\"index\":23,\"guid\":\"8150586d-c8e1-4e6f-90ac-0eefdc459980\",\"is_active\":true,\"balance\":\"$3,431.61\",\"picture\":\"http://placehold.it/32x32\",\"age\":25,\"eye_color\":\"green\",\"name\":{\"first\":\"Beard\",\"last\":\"Rodriquez\"},\"company\":\"SHOPABOUT\",\"email\":\"beard.rodriquez@shopabout.net\",\"phone\":\"+1 (865) 412-3219\",\"address\":\"143 Mayfair Drive, Homeworth, Montana, 2208\",\"about\":\"Est eiusmod proident excepteur cupidatat quis consequat aliquip occaecat. Sint enim adipisicing qui eu commodo eiusmod anim consequat. Mollit incididunt ea aliquip nostrud irure anim voluptate quis nostrud exercitation velit laboris voluptate aute.\\r\\n\",\"registered\":\"Wednesday, June 25, 2014 6:05 AM\",\"latitude\":20.040284,\"longitude\":154.690201,\"tags\":[\"culpa\",\"reprehenderit\",\"cillum\",\"eu\",\"magna\",\"commodo\",\"mollit\"],\"range\":[0,1,2,3,4,5,6,7,8,9],\"friends\":[{\"id\":0,\"name\":\"Susanna Stevenson\"},{\"id\":1,\"name\":\"Wiley Mcneil\"},{\"id\":2,\"name\":\"Reyna Atkins\"}],\"images\":[{\"id\":\"54e1a1cee90ccb3046cec95d\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/87fe80bf-0c48-4a4a-b287-76e76bd20901\",\"description\":\"Mollit sint est elit commodo magna fugiat.\"},{\"id\":\"54e1a1cee77120930ca285fb\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/b7b4bc14-e6ad-4edf-b91d-13ba83aae907\",\"description\":\"Sunt voluptate ad adipisicing eu amet sint qui.\"},{\"id\":\"54e1a1ce5053c6a428e30b77\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/4996fe65-30a0-4f26-8028-dc9b339e2ab6\",\"description\":\"In do officia incididunt laboris do consectetur labore commodo excepteur Lorem esse mollit.\"},{\"id\":\"54e1a1ce7e8929796d67d125\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/63aed59b-083e-4668-9524-7bba5f809869\",\"description\":\"Ad ex consectetur ut ipsum.\"},{\"id\":\"54e1a1cea75ae82e954e53e0\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/59b26705-f3c1-42c5-b5ad-ce4be008d6bd\",\"description\":\"Reprehenderit commodo occaecat ea dolor.\"},{\"id\":\"54e1a1ceadeef1a5a295d202\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/604c3e7a-9464-475a-8445-ea70f23d8dc2\",\"description\":\"Consequat dolor anim deserunt id id ea duis ad minim.\"},{\"id\":\"54e1a1ce01ea4c2f59838492\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/6f1dd5de-3877-4bf4-9a38-afd33898fd09\",\"description\":\"Enim est incididunt esse eu consequat ea anim cillum dolor incididunt cupidatat reprehenderit.\"},{\"id\":\"54e1a1cef5f2ba4e36674416\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/8b10f878-d851-4daf-aa6e-bd95e3f295fa\",\"description\":\"Tempor irure sunt exercitation ex irure id adipisicing aliqua occaecat proident esse qui adipisicing do.\"},{\"id\":\"54e1a1ce0a4e780b02dfda7d\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/658558be-aa5c-4456-8b3c-b6fe0dbfffca\",\"description\":\"Veniam eu irure est exercitation ipsum nostrud et eiusmod.\"},{\"id\":\"54e1a1cec8f44bce67f51899\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/e18347c8-a251-4903-b4dd-30fae71b6dab\",\"description\":\"Dolore consequat esse eiusmod quis consectetur est.\"},{\"id\":\"54e1a1ce03be17717c757ba8\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/9bef143a-fccc-4a46-8007-64d2772003e6\",\"description\":\"Ullamco pariatur ad ut ut ipsum qui ipsum aliqua sint voluptate irure fugiat.\"},{\"id\":\"54e1a1cec02a22d9517bf10b\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/5ec68ce1-6507-4943-ae1c-38ea62e0bd8b\",\"description\":\"Ipsum anim qui enim do sint labore reprehenderit qui in in.\"}],\"greeting\":\"Hello, Beard! You have 5 unread messages.\",\"favorite_fruit\":\"strawberry\"},{\"_id\":\"54e1a1ceb4deb8ed64787fb6\",\"index\":24,\"guid\":\"e7f73ebb-277c-4470-b5b3-ea46520c25c0\",\"is_active\":true,\"balance\":\"$3,766.66\",\"picture\":\"http://placehold.it/32x32\",\"age\":33,\"eye_color\":\"blue\",\"name\":{\"first\":\"Laura\",\"last\":\"Curtis\"},\"company\":\"XELEGYL\",\"email\":\"laura.curtis@xelegyl.tv\",\"phone\":\"+1 (959) 445-3030\",\"address\":\"755 Bridge Street, Franklin, American Samoa, 2356\",\"about\":\"Ullamco enim dolore irure nulla. Occaecat et id reprehenderit eiusmod excepteur sit deserunt minim do in voluptate exercitation occaecat anim. Duis velit incididunt irure occaecat proident do. Consectetur esse adipisicing velit reprehenderit.\\r\\n\",\"registered\":\"Friday, November 14, 2014 1:43 AM\",\"latitude\":-28.504623,\"longitude\":-81.591404,\"tags\":[\"enim\",\"exercitation\",\"nostrud\",\"cillum\",\"officia\",\"cupidatat\",\"exercitation\"],\"range\":[0,1,2,3,4,5,6,7,8,9],\"friends\":[{\"id\":0,\"name\":\"Gina Hanson\"},{\"id\":1,\"name\":\"Willie Buckner\"},{\"id\":2,\"name\":\"Elba Finley\"}],\"images\":[{\"id\":\"54e1a1ce53f69cf13c7cce9d\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/21752813-a565-43b1-b26b-cf021106a008\",\"description\":\"Pariatur Lorem enim aute officia sit culpa adipisicing culpa fugiat amet esse.\"},{\"id\":\"54e1a1ce2764de74efbca040\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/79576616-fba2-4ba3-b1eb-14c3a09d9479\",\"description\":\"Sunt sint consectetur esse enim aliqua proident nisi ullamco consectetur nisi consectetur.\"}],\"greeting\":\"Hello, Laura! You have 10 unread messages.\",\"favorite_fruit\":\"strawberry\"},{\"_id\":\"54e1a1ce700cfb112ee5e551\",\"index\":25,\"guid\":\"83a59003-cfd4-462a-9bfc-3c839a1fa076\",\"is_active\":true,\"balance\":\"$2,165.18\",\"picture\":\"http://placehold.it/32x32\",\"age\":30,\"eye_color\":\"green\",\"name\":{\"first\":\"Kathy\",\"last\":\"Briggs\"},\"company\":\"ZENTILITY\",\"email\":\"kathy.briggs@zentility.biz\",\"phone\":\"+1 (808) 593-2281\",\"address\":\"875 Chestnut Avenue, Trinway, Nebraska, 5995\",\"about\":\"Dolore nulla commodo laboris magna ut. Culpa dolore eiusmod id ea pariatur. Quis aliqua ad incididunt aliqua sit laboris magna nostrud ullamco est ipsum sit enim sint. Pariatur consectetur esse dolore occaecat et duis proident amet eu excepteur esse cupidatat. Labore officia aute nostrud excepteur eiusmod dolor enim irure dolore dolor. Amet ad ex laborum aliquip tempor laboris ad veniam eiusmod Lorem amet do.\\r\\n\",\"registered\":\"Friday, August 15, 2014 7:50 PM\",\"latitude\":48.706922,\"longitude\":7.336769,\"tags\":[\"anim\",\"consectetur\",\"mollit\",\"laboris\",\"esse\",\"tempor\",\"ex\"],\"range\":[0,1,2,3,4,5,6,7,8,9],\"friends\":[{\"id\":0,\"name\":\"Maude Dickson\"},{\"id\":1,\"name\":\"Janis Brewer\"},{\"id\":2,\"name\":\"Geneva Barr\"}],\"images\":[{\"id\":\"54e1a1ce651551f1ade98910\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/665d4a9d-75b6-4367-900d-e8fe21b85b0e\",\"description\":\"Eiusmod sit sit laborum mollit aliqua excepteur consequat amet.\"},{\"id\":\"54e1a1cece0953f33b508f24\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/90f92282-1649-4816-a777-8f5539a810d1\",\"description\":\"Veniam sunt eu laborum velit aliquip cillum exercitation amet eiusmod ad aliquip duis et.\"},{\"id\":\"54e1a1ceeef643f2053e49f6\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/22bd6cc4-fdac-4264-8e46-8ab5ca7af15d\",\"description\":\"Lorem aliqua ut nostrud exercitation elit duis.\"},{\"id\":\"54e1a1ce15bdb44196273d9c\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/70268544-eb7f-4cef-8699-bdd8303892ad\",\"description\":\"Culpa aliquip culpa dolor laborum quis anim anim adipisicing minim officia.\"},{\"id\":\"54e1a1ceb9b56fda7ddea7f0\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/6ed92de6-2dba-4763-84c7-0b8e9fe85cba\",\"description\":\"Mollit esse ea laborum laborum ullamco quis est sit voluptate quis ad.\"},{\"id\":\"54e1a1ceb4d0be65bcb372a0\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/68317855-152c-479c-9f45-2331b8cab23a\",\"description\":\"Officia est deserunt eiusmod nisi excepteur exercitation enim deserunt.\"},{\"id\":\"54e1a1ce5ac6abd1f2388c5f\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/3a3eb01a-c348-47f6-89f2-fed613cd98c4\",\"description\":\"Elit aliquip minim fugiat do eiusmod sit ea tempor culpa labore velit ex tempor.\"}],\"greeting\":\"Hello, Kathy! You have 10 unread messages.\",\"favorite_fruit\":\"strawberry\"},{\"_id\":\"54e1a1ced24766bb9292a22b\",\"index\":26,\"guid\":\"a97f3eba-d7c2-4d1f-a3ab-a482556d8a76\",\"is_active\":false,\"balance\":\"$1,629.14\",\"picture\":\"http://placehold.it/32x32\",\"age\":39,\"eye_color\":\"green\",\"name\":{\"first\":\"Campos\",\"last\":\"Norris\"},\"company\":\"TECHTRIX\",\"email\":\"campos.norris@techtrix.co.uk\",\"phone\":\"+1 (913) 417-3478\",\"address\":\"156 Kent Street, Florence, Indiana, 4776\",\"about\":\"Eiusmod minim excepteur do ipsum enim reprehenderit. Labore nulla laboris incididunt quis officia aliqua exercitation occaecat officia excepteur esse voluptate excepteur ullamco. Anim in magna aliqua sunt elit. Nostrud consequat ea veniam in culpa consectetur consectetur. Sunt amet aliqua aute laboris eu quis dolor.\\r\\n\",\"registered\":\"Friday, August 1, 2014 10:32 AM\",\"latitude\":87.946736,\"longitude\":-55.498016,\"tags\":[\"ut\",\"eiusmod\",\"sint\",\"exercitation\",\"sit\",\"excepteur\",\"eiusmod\"],\"range\":[0,1,2,3,4,5,6,7,8,9],\"friends\":[{\"id\":0,\"name\":\"Donna Cobb\"},{\"id\":1,\"name\":\"Thomas Simon\"},{\"id\":2,\"name\":\"Morgan Shaffer\"}],\"images\":[{\"id\":\"54e1a1ce8438b02348622bd8\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/ce74f131-96fc-44f6-99b1-315431c84255\",\"description\":\"Ex eu duis eiusmod nostrud proident mollit ipsum excepteur anim consectetur sunt dolor qui dolore.\"},{\"id\":\"54e1a1ce18a78a26c36bdd53\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/73e410dd-a817-4e25-924d-31c0a1aafd7f\",\"description\":\"Laborum laborum Lorem eu pariatur.\"},{\"id\":\"54e1a1cecf7a8a3885d45ae8\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/9bf3e127-f8e6-4bf1-8983-7e190a3b1536\",\"description\":\"Amet Lorem ullamco est nisi duis minim.\"},{\"id\":\"54e1a1ce2ab919eee6213d6b\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/1fa2d52f-6bd1-4716-85de-ed574e372856\",\"description\":\"Laboris mollit magna duis duis culpa irure laboris anim.\"},{\"id\":\"54e1a1cef1e8b95dfe0d0c58\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/97c0aece-8328-49d6-bdc6-c0210d34b6d9\",\"description\":\"Ut irure adipisicing aliqua minim id aute dolor sint.\"},{\"id\":\"54e1a1ce4dd7f1839ce451d5\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/f51d65d9-38c9-459d-ae4a-53b6e7945863\",\"description\":\"Incididunt officia nisi deserunt incididunt ad veniam Lorem anim proident pariatur fugiat ut ea.\"},{\"id\":\"54e1a1ce9f0642f8cc3943ad\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/2b6afac7-1a66-416d-92ae-a4563586b354\",\"description\":\"Dolore nostrud id in cillum laboris est duis sit non laborum consectetur enim quis.\"},{\"id\":\"54e1a1ce2fddd7d728d8e484\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/ea8598b8-bf5c-42d5-8534-f06d191eff87\",\"description\":\"Eu aute anim consectetur nulla voluptate amet sunt aliquip eiusmod.\"},{\"id\":\"54e1a1ce2aa039d417b574e7\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/9ffa3153-ba6e-4de6-b2b6-35c275489b0e\",\"description\":\"Pariatur labore anim proident in enim nostrud nostrud Lorem consectetur est sunt adipisicing eiusmod.\"},{\"id\":\"54e1a1ce5ff7b42f217a42a9\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/2b347cd0-53fd-4884-8a52-c69adb62c419\",\"description\":\"Veniam anim fugiat nulla eiusmod ipsum exercitation ullamco sunt.\"},{\"id\":\"54e1a1ceb010bf8572a68d66\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/3a2d79a5-8d98-43bc-bfe9-a239a3da1017\",\"description\":\"Cupidatat est ad deserunt eiusmod aliqua.\"},{\"id\":\"54e1a1ce7a1ef0bc021ecc57\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/15fb0f44-e462-4d3a-81e7-b56f944f7c61\",\"description\":\"Et elit amet proident occaecat officia quis irure amet ullamco nulla irure.\"}],\"greeting\":\"Hello, Campos! You have 10 unread messages.\",\"favorite_fruit\":\"apple\"},{\"_id\":\"54e1a1ce02536955ee78e2c8\",\"index\":27,\"guid\":\"7127769e-0f42-41d1-ade0-129fec632b61\",\"is_active\":false,\"balance\":\"$2,928.51\",\"picture\":\"http://placehold.it/32x32\",\"age\":36,\"eye_color\":\"green\",\"name\":{\"first\":\"Terry\",\"last\":\"Rollins\"},\"company\":\"ZOARERE\",\"email\":\"terry.rollins@zoarere.org\",\"phone\":\"+1 (896) 406-2884\",\"address\":\"526 Maple Street, Graball, Kentucky, 312\",\"about\":\"Ipsum occaecat anim do qui cupidatat eiusmod duis ea aute aliquip minim. Ullamco id ad aute officia enim commodo cillum minim exercitation ex excepteur anim deserunt sit. Magna velit irure irure quis ex id quis duis id pariatur exercitation. Ut incididunt commodo amet exercitation qui non eiusmod amet occaecat magna laboris aliquip laboris non. Fugiat pariatur laboris proident elit sit qui occaecat cillum officia pariatur eu. Sunt est elit duis non. Et pariatur officia do duis eu cupidatat.\\r\\n\",\"registered\":\"Tuesday, December 30, 2014 2:07 PM\",\"latitude\":17.457999,\"longitude\":-168.245311,\"tags\":[\"anim\",\"nostrud\",\"eu\",\"Lorem\",\"adipisicing\",\"cupidatat\",\"quis\"],\"range\":[0,1,2,3,4,5,6,7,8,9],\"friends\":[{\"id\":0,\"name\":\"Mcdaniel Maynard\"},{\"id\":1,\"name\":\"Jacklyn Cox\"},{\"id\":2,\"name\":\"Karina Pace\"}],\"images\":[{\"id\":\"54e1a1ceff1066935ed30a7c\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/0b64b249-2a91-496b-a844-bd0c0802068a\",\"description\":\"Culpa non fugiat laboris Lorem esse non Lorem id anim occaecat commodo labore nulla.\"},{\"id\":\"54e1a1ceba427234af09988b\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/6779c401-c3bc-440d-bf6d-acd6bd8da77a\",\"description\":\"Elit est proident ea aliquip non ipsum nostrud cillum dolor laborum quis esse occaecat.\"},{\"id\":\"54e1a1ce7dade6d0fb172074\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/e71ac2fd-f085-4816-8fe0-a61aa6f414d6\",\"description\":\"Voluptate velit elit fugiat laborum ipsum et.\"},{\"id\":\"54e1a1ce1053ca4a4cf2152f\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/98e8e571-2ef7-4c13-9950-c2cd441d7ed0\",\"description\":\"Aliqua ad amet eiusmod minim labore nisi eiusmod quis sint enim.\"},{\"id\":\"54e1a1ce5dd7b3eab65a3efa\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/cd89f0a2-487b-488e-a246-0afe75259b26\",\"description\":\"Pariatur voluptate dolor eiusmod pariatur consectetur sint sit irure qui.\"}],\"greeting\":\"Hello, Terry! You have 6 unread messages.\",\"favorite_fruit\":\"strawberry\"},{\"_id\":\"54e1a1ce07b03129c83f1d0f\",\"index\":28,\"guid\":\"a4f89640-da5b-4c25-a7de-a98b88299c6c\",\"is_active\":false,\"balance\":\"$2,261.36\",\"picture\":\"http://placehold.it/32x32\",\"age\":27,\"eye_color\":\"brown\",\"name\":{\"first\":\"Earlene\",\"last\":\"Baird\"},\"company\":\"COMBOGENE\",\"email\":\"earlene.baird@combogene.info\",\"phone\":\"+1 (900) 448-3856\",\"address\":\"117 Aitken Place, Comptche, Maine, 8570\",\"about\":\"Occaecat ex ea ea commodo quis proident ex incididunt quis eiusmod. Mollit ipsum cillum eu velit quis reprehenderit reprehenderit ea reprehenderit ullamco reprehenderit. Commodo exercitation ex commodo pariatur proident nisi amet sint reprehenderit enim proident sit proident cupidatat.\\r\\n\",\"registered\":\"Thursday, April 24, 2014 7:24 PM\",\"latitude\":31.308042,\"longitude\":-114.786318,\"tags\":[\"eu\",\"officia\",\"in\",\"et\",\"et\",\"dolore\",\"laboris\"],\"range\":[0,1,2,3,4,5,6,7,8,9],\"friends\":[{\"id\":0,\"name\":\"Ware Galloway\"},{\"id\":1,\"name\":\"Bette Jefferson\"},{\"id\":2,\"name\":\"Hines Booker\"}],\"images\":[{\"id\":\"54e1a1ce525fd5e2b4e6c5f0\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/8ea02ea6-2015-46b2-b8c9-18450561dd40\",\"description\":\"Ipsum reprehenderit irure eiusmod ipsum irure eiusmod veniam nisi dolor minim veniam officia aute.\"},{\"id\":\"54e1a1ce61fd2a91a2ebb095\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/63b8dc50-2d02-442b-a06b-51776ac6195e\",\"description\":\"Ut ea proident tempor id tempor consectetur enim nostrud est dolor enim.\"},{\"id\":\"54e1a1ce478c843220f300cf\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/dbb1dfed-6dc7-4eab-97c5-3557f0549f35\",\"description\":\"Ea amet deserunt nulla fugiat elit.\"},{\"id\":\"54e1a1cede61a093a8170bb3\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/3055f5fd-43ff-4040-a9c9-4cc4ca1e187a\",\"description\":\"Ipsum duis elit excepteur dolore sint anim amet.\"},{\"id\":\"54e1a1cee77a071bcb565b14\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/a8f82b44-04b4-4f63-8134-3a06a1eaed51\",\"description\":\"Officia dolor elit sit irure do aliqua consectetur laborum incididunt.\"},{\"id\":\"54e1a1ce03c69e523f2314b0\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/dc8f6852-7034-47f5-abdb-70516b115d15\",\"description\":\"Adipisicing sint consequat dolore excepteur incididunt mollit veniam.\"},{\"id\":\"54e1a1cef0758019b8210b52\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/6b8287d5-49d0-4451-9df0-43892d364573\",\"description\":\"Esse proident ipsum dolor sit ea sunt qui ipsum laboris ad cupidatat.\"},{\"id\":\"54e1a1ce6af006c19cd70a7e\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/3da1fe39-af41-4987-92fd-0094820c9b2a\",\"description\":\"Ex pariatur velit sit reprehenderit anim laborum do nostrud consequat mollit adipisicing reprehenderit.\"},{\"id\":\"54e1a1cea048a72f923a3ee2\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/8b8560dd-fc1e-4fcb-9556-462db1511b05\",\"description\":\"Excepteur culpa ea magna voluptate commodo.\"}],\"greeting\":\"Hello, Earlene! You have 7 unread messages.\",\"favorite_fruit\":\"apple\"},{\"_id\":\"54e1a1ce273abafb5d77ab55\",\"index\":29,\"guid\":\"201a34ae-e916-49a5-a55e-64c6e5aa2e8f\",\"is_active\":true,\"balance\":\"$1,093.32\",\"picture\":\"http://placehold.it/32x32\",\"age\":40,\"eye_color\":\"green\",\"name\":{\"first\":\"Berry\",\"last\":\"Roy\"},\"company\":\"CEPRENE\",\"email\":\"berry.roy@ceprene.me\",\"phone\":\"+1 (808) 481-2677\",\"address\":\"694 Woods Place, Fresno, Utah, 2964\",\"about\":\"Lorem aute quis est culpa ullamco amet aliquip excepteur adipisicing tempor ad in minim. Officia dolor ut elit nisi aliqua commodo do mollit officia irure laboris duis ullamco deserunt. Laborum consequat esse proident magna anim laborum eu voluptate.\\r\\n\",\"registered\":\"Saturday, November 8, 2014 5:21 PM\",\"latitude\":45.977406,\"longitude\":124.299292,\"tags\":[\"deserunt\",\"est\",\"sit\",\"eiusmod\",\"ipsum\",\"deserunt\",\"Lorem\"],\"range\":[0,1,2,3,4,5,6,7,8,9],\"friends\":[{\"id\":0,\"name\":\"Little Young\"},{\"id\":1,\"name\":\"Alberta Cote\"},{\"id\":2,\"name\":\"Weaver Kent\"}],\"images\":[{\"id\":\"54e1a1ce294413d1ebc706de\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/b5931197-3de7-4b41-97a3-cf7eac685748\",\"description\":\"Dolore amet velit adipisicing elit cillum ipsum reprehenderit velit sunt dolor in adipisicing laboris.\"},{\"id\":\"54e1a1cea31346fcaee16e1c\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/8c71a248-8cb6-4d94-bbf7-baabbbdb8463\",\"description\":\"Excepteur labore amet id enim nostrud nulla dolor reprehenderit qui dolore occaecat aliqua.\"},{\"id\":\"54e1a1ce024aa3ff3a7d6c01\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/38e47f44-4bc5-4d88-a488-4940415d900b\",\"description\":\"Proident Lorem laboris pariatur pariatur tempor eiusmod voluptate.\"},{\"id\":\"54e1a1ce3df1ef9f6d1d254f\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/9ad7d8d7-c364-4c25-8b94-f65f33796497\",\"description\":\"Mollit consequat non do mollit commodo incididunt ea sint ut anim ea aliqua nostrud sint.\"},{\"id\":\"54e1a1ce43f95c6f25de9557\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/08d796c9-68db-4bf3-84d7-060738aac449\",\"description\":\"Qui nostrud occaecat duis qui ea Lorem incididunt amet tempor sit aliquip.\"},{\"id\":\"54e1a1ce4fed4b86fa5a6eef\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/68726e18-9931-418d-a3bf-6413c908ab0f\",\"description\":\"Ullamco minim nulla ea proident deserunt enim esse incididunt minim mollit.\"},{\"id\":\"54e1a1cee91f7287a7979a62\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/5b43467d-7c1c-4d34-9617-2015f9a8b139\",\"description\":\"Aliquip quis duis deserunt ex fugiat consectetur aute ipsum dolore culpa id elit.\"},{\"id\":\"54e1a1ce2266c3e78a71620d\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/584ee4b8-65d5-4352-a122-191315eb79e3\",\"description\":\"Culpa Lorem ipsum quis id do dolore eu Lorem.\"},{\"id\":\"54e1a1ce65f53651411d1c15\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/e35c8c03-eaac-49bf-b731-c23e1a092f68\",\"description\":\"Pariatur duis ad magna labore reprehenderit ex.\"},{\"id\":\"54e1a1ce3db34e8457304e31\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/32e3cdc7-3594-44ea-8039-31fc80cc1825\",\"description\":\"Aliquip quis ea magna elit id anim.\"},{\"id\":\"54e1a1ce1adec172611ecca7\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/677ee1a4-b11d-4314-9e79-2de1c6a8876b\",\"description\":\"Fugiat labore excepteur excepteur enim sint reprehenderit dolore amet tempor adipisicing deserunt nulla.\"},{\"id\":\"54e1a1ceb2c377e404b02234\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/839f6fb3-28a1-4e93-91fb-710375ba2b68\",\"description\":\"Labore et nulla aute consequat id labore veniam dolore.\"},{\"id\":\"54e1a1cec38ddda28a0dee0e\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/bfbd9a1d-b299-496e-ad50-c5a704ba2f11\",\"description\":\"Eiusmod et et est in duis sit ea sint laborum officia elit.\"}],\"greeting\":\"Hello, Berry! You have 10 unread messages.\",\"favorite_fruit\":\"strawberry\"},{\"_id\":\"54e1a1ce32c4f6b43b33739a\",\"index\":30,\"guid\":\"35a3cd88-20d0-42b8-9b8c-387cf71345c1\",\"is_active\":true,\"balance\":\"$1,111.01\",\"picture\":\"http://placehold.it/32x32\",\"age\":23,\"eye_color\":\"green\",\"name\":{\"first\":\"Trina\",\"last\":\"Hayes\"},\"company\":\"IMMUNICS\",\"email\":\"trina.hayes@immunics.com\",\"phone\":\"+1 (868) 592-3814\",\"address\":\"872 Milton Street, Hollymead, Marshall Islands, 3138\",\"about\":\"Irure dolor consectetur id voluptate anim pariatur tempor incididunt occaecat cupidatat irure adipisicing. Est voluptate laboris aliqua id quis Lorem commodo. Enim sit consectetur incididunt elit enim pariatur voluptate nulla irure aliquip anim cillum.\\r\\n\",\"registered\":\"Thursday, July 3, 2014 6:04 PM\",\"latitude\":48.720429,\"longitude\":4.570857,\"tags\":[\"ad\",\"sunt\",\"dolore\",\"tempor\",\"duis\",\"incididunt\",\"exercitation\"],\"range\":[0,1,2,3,4,5,6,7,8,9],\"friends\":[{\"id\":0,\"name\":\"Kane Mclaughlin\"},{\"id\":1,\"name\":\"Augusta Gamble\"},{\"id\":2,\"name\":\"Deena Zamora\"}],\"images\":[{\"id\":\"54e1a1ce8b90c8d956707a2b\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/634dfb33-55d9-4feb-a326-31d436b1bb7f\",\"description\":\"Ea quis laborum sint pariatur voluptate eu esse elit ex exercitation qui tempor anim magna.\"},{\"id\":\"54e1a1ce3c1496b084598e86\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/82aaf1e5-f712-4eb7-a5d3-2114e4f9f919\",\"description\":\"Officia ullamco eiusmod eiusmod aliquip voluptate adipisicing cupidatat Lorem.\"},{\"id\":\"54e1a1ce5436d771ef09add0\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/7e0337ae-1033-40d6-b952-d6f20d86ad09\",\"description\":\"Fugiat labore officia do incididunt commodo excepteur do commodo quis dolore excepteur commodo consectetur.\"},{\"id\":\"54e1a1ce473d20f713d0d17d\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/983c48ba-e6ba-4e01-8a21-3023844e0f8c\",\"description\":\"Fugiat laborum nostrud occaecat excepteur tempor quis deserunt sit.\"},{\"id\":\"54e1a1ce58d523b489e5d516\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/7b54aeca-72ee-450c-a24b-8c2c6e6b4b44\",\"description\":\"Ad velit irure sunt elit.\"},{\"id\":\"54e1a1ceb04aa2f6457d7256\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/42017198-371e-4930-9e2c-1af81707161a\",\"description\":\"Minim amet laboris aute fugiat tempor tempor ut adipisicing.\"},{\"id\":\"54e1a1ce03bd86854f2b8532\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/6f3cce4b-566a-45d9-b75a-daf33bbe4f06\",\"description\":\"Sit labore nostrud adipisicing nulla excepteur et aliqua reprehenderit deserunt velit.\"}],\"greeting\":\"Hello, Trina! You have 5 unread messages.\",\"favorite_fruit\":\"strawberry\"},{\"_id\":\"54e1a1cec401f5db2b871f0a\",\"index\":31,\"guid\":\"43f53af2-361e-49c2-b74a-b45c75e71670\",\"is_active\":false,\"balance\":\"$3,264.34\",\"picture\":\"http://placehold.it/32x32\",\"age\":29,\"eye_color\":\"green\",\"name\":{\"first\":\"Sybil\",\"last\":\"Marquez\"},\"company\":\"CENTICE\",\"email\":\"sybil.marquez@centice.biz\",\"phone\":\"+1 (800) 543-3311\",\"address\":\"892 Ross Street, Gouglersville, Vermont, 2973\",\"about\":\"Esse pariatur nostrud aute minim anim. Non elit irure incididunt ea sit ea dolore ut. Aliquip id id aliquip nostrud qui fugiat velit eu. Voluptate dolore culpa do esse nisi cillum tempor eu veniam ea in magna irure. Dolore nostrud adipisicing nostrud id eu. Qui aliqua consequat aliquip incididunt eiusmod velit. Quis anim culpa eu eiusmod ut.\\r\\n\",\"registered\":\"Friday, March 21, 2014 12:04 PM\",\"latitude\":11.826195,\"longitude\":-90.812319,\"tags\":[\"pariatur\",\"consectetur\",\"labore\",\"do\",\"tempor\",\"cillum\",\"minim\"],\"range\":[0,1,2,3,4,5,6,7,8,9],\"friends\":[{\"id\":0,\"name\":\"Glover William\"},{\"id\":1,\"name\":\"Mckinney Greene\"},{\"id\":2,\"name\":\"Dominguez Peters\"}],\"images\":[{\"id\":\"54e1a1ce03d6657caf5a06ae\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/2a36437b-12e0-4819-add4-6a67657f603e\",\"description\":\"In sunt cupidatat qui elit qui ullamco ad sint consequat ullamco sint occaecat.\"},{\"id\":\"54e1a1ce30c798419ccf2519\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/dce613f0-39e4-4206-9fc0-4775cda2eaa4\",\"description\":\"Cillum tempor aliquip magna quis.\"},{\"id\":\"54e1a1cee1426d90e730dd32\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/7a2a0495-4b62-4e29-b221-f7f28e027a01\",\"description\":\"Id ipsum sit velit sit mollit.\"},{\"id\":\"54e1a1ce2d98a04626f9f429\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/1d927e28-0a3c-4ee5-8464-f2b38a64a5f5\",\"description\":\"Culpa ipsum deserunt tempor laboris reprehenderit proident fugiat ex aliquip.\"},{\"id\":\"54e1a1cef28878aa1066dda1\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/53ef5c1d-acf6-4215-9e75-097306dad851\",\"description\":\"Veniam veniam minim aliqua exercitation enim eiusmod ea aute occaecat.\"},{\"id\":\"54e1a1ce6efeaa14ac99c10a\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/2d591e56-75e0-41bb-95c4-c8223c911cd9\",\"description\":\"Lorem reprehenderit nulla sunt eiusmod exercitation eu exercitation reprehenderit est.\"},{\"id\":\"54e1a1ce50d2026979d5d2a5\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/323bc9c3-63e2-41a5-b747-506486f8f48b\",\"description\":\"Aute in esse eiusmod veniam irure do commodo eu elit exercitation.\"},{\"id\":\"54e1a1ce53f008bc6af16281\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/7fc8921d-8dd0-47b4-a731-d0888caf744a\",\"description\":\"Sint do nisi duis do id magna fugiat qui irure exercitation nostrud.\"},{\"id\":\"54e1a1ce4972335270beec42\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/9db5ae1a-50a3-4f00-9fa9-6cf6f2beaad4\",\"description\":\"Dolor do deserunt sint consequat elit commodo elit ex elit incididunt deserunt velit nulla.\"},{\"id\":\"54e1a1ce7520fbdf8ab72eae\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/beb1600e-1377-4e0b-b397-0c94f3243dc8\",\"description\":\"Veniam sint amet nulla irure.\"},{\"id\":\"54e1a1cec30c110bf28ae205\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/f23a5c20-40e8-4e52-99a4-92b7bd7c28e7\",\"description\":\"Laboris nisi magna et pariatur elit duis cupidatat Lorem dolor consequat pariatur nostrud enim.\"},{\"id\":\"54e1a1ce9969a4283dc25ede\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/1e4d3012-60f5-43f1-ae4e-0484a3216b92\",\"description\":\"Proident veniam ad occaecat proident exercitation sunt eiusmod velit qui aliqua.\"},{\"id\":\"54e1a1ceffe22c04295c10aa\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/a605e7db-c3dc-470c-bc1f-a46e171712ff\",\"description\":\"Eiusmod dolore deserunt laborum ea.\"}],\"greeting\":\"Hello, Sybil! You have 10 unread messages.\",\"favorite_fruit\":\"strawberry\"},{\"_id\":\"54e1a1ce491730a57d8a56ce\",\"index\":32,\"guid\":\"b945d165-7113-4634-b30d-a6007c48305c\",\"is_active\":false,\"balance\":\"$1,253.17\",\"picture\":\"http://placehold.it/32x32\",\"age\":35,\"eye_color\":\"green\",\"name\":{\"first\":\"Sawyer\",\"last\":\"Morton\"},\"company\":\"SINGAVERA\",\"email\":\"sawyer.morton@singavera.io\",\"phone\":\"+1 (979) 462-3704\",\"address\":\"587 Estate Road, Shaft, New York, 608\",\"about\":\"Irure exercitation eiusmod enim minim velit. Minim adipisicing cillum aliqua minim adipisicing est sunt. Eu ut culpa elit consequat minim deserunt ullamco sint officia. Mollit proident veniam fugiat esse.\\r\\n\",\"registered\":\"Thursday, January 9, 2014 11:14 PM\",\"latitude\":-17.991163,\"longitude\":40.091708,\"tags\":[\"aliquip\",\"velit\",\"cupidatat\",\"incididunt\",\"ut\",\"non\",\"velit\"],\"range\":[0,1,2,3,4,5,6,7,8,9],\"friends\":[{\"id\":0,\"name\":\"Rosanna Mcdaniel\"},{\"id\":1,\"name\":\"Poole Medina\"},{\"id\":2,\"name\":\"Michael Moreno\"}],\"images\":[{\"id\":\"54e1a1cea50671cd176fcd6b\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/7ba6b863-124c-4b98-805f-1dc6d688a9cf\",\"description\":\"Commodo enim proident proident proident.\"},{\"id\":\"54e1a1ce83125b154aa4e0bc\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/c768e7a7-aae9-4230-b685-251a71a01f6e\",\"description\":\"Culpa elit consequat excepteur culpa nulla do sint qui labore qui.\"}],\"greeting\":\"Hello, Sawyer! You have 7 unread messages.\",\"favorite_fruit\":\"apple\"},{\"_id\":\"54e1a1ce83a80a49e65c74cd\",\"index\":33,\"guid\":\"e5244ad9-5272-4eb3-a820-732746761caf\",\"is_active\":true,\"balance\":\"$3,573.62\",\"picture\":\"http://placehold.it/32x32\",\"age\":40,\"eye_color\":\"blue\",\"name\":{\"first\":\"Wolfe\",\"last\":\"Tate\"},\"company\":\"ACCUFARM\",\"email\":\"wolfe.tate@accufarm.name\",\"phone\":\"+1 (865) 573-3908\",\"address\":\"959 Doughty Street, Duryea, Iowa, 435\",\"about\":\"Sit id excepteur occaecat elit reprehenderit proident aliquip voluptate. Ad sunt ad proident nulla ut id adipisicing. Commodo enim pariatur ex elit labore do. Reprehenderit Lorem incididunt dolore officia cupidatat dolor quis nulla ad.\\r\\n\",\"registered\":\"Tuesday, December 30, 2014 6:16 PM\",\"latitude\":-69.467468,\"longitude\":-91.513068,\"tags\":[\"officia\",\"adipisicing\",\"id\",\"in\",\"ullamco\",\"mollit\",\"sint\"],\"range\":[0,1,2,3,4,5,6,7,8,9],\"friends\":[{\"id\":0,\"name\":\"Buck Day\"},{\"id\":1,\"name\":\"Barrett Burnett\"},{\"id\":2,\"name\":\"Arlene Winters\"}],\"images\":[{\"id\":\"54e1a1ce24517f81c8e11323\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/6f8df67a-4856-4b8d-95a5-137a5324259a\",\"description\":\"Pariatur do anim aliqua duis esse culpa nisi pariatur occaecat laborum.\"},{\"id\":\"54e1a1ceba5b5785378810ee\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/128f6174-c5b6-41e0-a8f0-f4b52bd7ae9a\",\"description\":\"Eu excepteur nostrud ipsum esse non deserunt tempor excepteur enim consectetur.\"},{\"id\":\"54e1a1ce549d9abc5cc47407\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/7fdcd5ad-6fdb-474a-a451-c432aafbd6ed\",\"description\":\"Quis officia qui ea magna est non cillum dolore veniam mollit consectetur ut in et.\"},{\"id\":\"54e1a1ce2d53893162258aed\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/f58b555f-ebd8-4ed5-8a74-2f81c738e472\",\"description\":\"Dolor proident tempor cupidatat aliquip mollit enim ullamco elit.\"},{\"id\":\"54e1a1ce88ad63f156d81f29\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/ee3bc7ff-fa34-427d-a4e8-189122c9895d\",\"description\":\"Occaecat occaecat officia laboris occaecat laborum aliqua non culpa.\"},{\"id\":\"54e1a1ce33e0bfa25a50a5ea\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/637e2816-205e-42d3-9442-1141a9a5a4b9\",\"description\":\"Occaecat dolore tempor cupidatat consectetur commodo officia consequat ad laborum cillum ad veniam qui quis.\"},{\"id\":\"54e1a1ceb41f9bef093cc0c2\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/ad9faf57-109f-4fb0-b62b-a129fdfdaadb\",\"description\":\"Nostrud officia qui proident irure ex eu.\"},{\"id\":\"54e1a1ce9e1625178487c683\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/80442a39-1e74-4dea-ae2d-7e6a3d71e362\",\"description\":\"Ut dolor dolore aliquip ea.\"},{\"id\":\"54e1a1ce03fe7e96f101a8cc\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/717cb4a5-62bd-4026-acf3-8a3bb859d960\",\"description\":\"Id in sint mollit exercitation.\"},{\"id\":\"54e1a1ce7df1626cb2b7e170\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/fd7372c3-564f-4cd8-9f6e-871c8cf851ad\",\"description\":\"Non esse sunt labore amet anim ullamco proident laborum id incididunt.\"},{\"id\":\"54e1a1ce915c62a0cbef5be3\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/32604611-96c6-49a3-9154-8e8b766b8f67\",\"description\":\"Amet velit ullamco ex id esse sit culpa mollit non fugiat.\"},{\"id\":\"54e1a1cebb2c80cba08e2bce\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/c79082c9-89db-48f2-8b20-1ad16cdb5f54\",\"description\":\"Exercitation dolor mollit anim cupidatat elit aute tempor amet nostrud voluptate est officia.\"},{\"id\":\"54e1a1ce30c0ca4aeccfaf67\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/ad511441-2955-44dc-a091-33bab2e18b8e\",\"description\":\"Pariatur magna veniam cupidatat do amet aliquip nulla cupidatat commodo.\"}],\"greeting\":\"Hello, Wolfe! You have 9 unread messages.\",\"favorite_fruit\":\"strawberry\"},{\"_id\":\"54e1a1ce1fc172686930168c\",\"index\":34,\"guid\":\"12c48fc2-cd20-4c26-8b55-3a6780087127\",\"is_active\":true,\"balance\":\"$1,553.56\",\"picture\":\"http://placehold.it/32x32\",\"age\":30,\"eye_color\":\"green\",\"name\":{\"first\":\"Frank\",\"last\":\"Hernandez\"},\"company\":\"ECLIPSENT\",\"email\":\"frank.hernandez@eclipsent.ca\",\"phone\":\"+1 (847) 545-3887\",\"address\":\"912 Cypress Court, Chestnut, Georgia, 2278\",\"about\":\"Deserunt officia labore dolore ipsum deserunt. Irure nulla ullamco aute eiusmod eiusmod eiusmod officia et laborum. Irure ullamco ullamco sunt aliqua nostrud dolor occaecat duis. Ad nostrud qui labore aliqua aliquip laboris exercitation ex officia anim mollit ipsum qui enim. Nulla deserunt culpa anim non duis ad. Excepteur ullamco enim eu consequat non excepteur velit eiusmod aliquip in anim ad exercitation.\\r\\n\",\"registered\":\"Wednesday, January 21, 2015 4:54 PM\",\"latitude\":-34.039611,\"longitude\":55.204416,\"tags\":[\"magna\",\"ipsum\",\"nostrud\",\"ullamco\",\"elit\",\"tempor\",\"fugiat\"],\"range\":[0,1,2,3,4,5,6,7,8,9],\"friends\":[{\"id\":0,\"name\":\"Lydia Padilla\"},{\"id\":1,\"name\":\"Shawn Silva\"},{\"id\":2,\"name\":\"Dionne Lambert\"}],\"images\":[{\"id\":\"54e1a1ce8f8fe2d2b2841417\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/ce508935-22ca-4b44-9523-9e3565cf685d\",\"description\":\"Deserunt mollit sint ipsum nulla ullamco qui tempor mollit magna ea non.\"},{\"id\":\"54e1a1ce5ebeb6bcfab87b37\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/fcad30c5-4431-47a6-af28-c9003c73d787\",\"description\":\"Reprehenderit ea tempor ea proident culpa.\"}],\"greeting\":\"Hello, Frank! You have 9 unread messages.\",\"favorite_fruit\":\"banana\"},{\"_id\":\"54e1a1ce3077af3221a25c01\",\"index\":35,\"guid\":\"f64415ad-dccd-4846-bf64-019c7142dc4d\",\"is_active\":false,\"balance\":\"$3,549.87\",\"picture\":\"http://placehold.it/32x32\",\"age\":27,\"eye_color\":\"blue\",\"name\":{\"first\":\"Levy\",\"last\":\"Sharpe\"},\"company\":\"ENTALITY\",\"email\":\"levy.sharpe@entality.net\",\"phone\":\"+1 (820) 533-2235\",\"address\":\"592 Brightwater Court, Juntura, Virginia, 8017\",\"about\":\"Duis Lorem proident amet ex et elit sit irure irure irure adipisicing. Nostrud nostrud ipsum Lorem officia adipisicing commodo aliquip. Ut labore enim dolor anim mollit labore consectetur et exercitation est esse adipisicing. Consectetur ullamco ex aliqua proident labore sunt reprehenderit nisi anim. Veniam sint velit dolor do ex nisi tempor ea cupidatat ad nisi commodo mollit.\\r\\n\",\"registered\":\"Tuesday, October 21, 2014 9:34 PM\",\"latitude\":-17.082418,\"longitude\":13.502254,\"tags\":[\"dolor\",\"consectetur\",\"et\",\"magna\",\"reprehenderit\",\"ex\",\"Lorem\"],\"range\":[0,1,2,3,4,5,6,7,8,9],\"friends\":[{\"id\":0,\"name\":\"Matilda Foley\"},{\"id\":1,\"name\":\"Jeanine Schwartz\"},{\"id\":2,\"name\":\"Melody Mclean\"}],\"images\":[{\"id\":\"54e1a1ce0dd811dd90b64380\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/fa699687-5add-4839-a349-ca0686237804\",\"description\":\"Ipsum ea eiusmod dolore anim do do voluptate mollit minim exercitation aute qui magna.\"},{\"id\":\"54e1a1ce9169ad9e86ecc513\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/2b86b2ae-7405-4687-86f0-a0ef3d41aa52\",\"description\":\"Ad eiusmod aute nostrud consectetur laborum laborum eiusmod amet magna adipisicing ad ullamco est aliquip.\"},{\"id\":\"54e1a1ce0e7478d52ecbe6e6\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/c2b6df9b-7ef6-46a3-9219-7ee28c0684da\",\"description\":\"Reprehenderit laborum dolore anim quis velit consequat enim nisi excepteur magna magna.\"},{\"id\":\"54e1a1ceeada2a410c18eda6\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/c55b0ee7-c18c-4e43-9090-6a1853a84ab3\",\"description\":\"Incididunt do ex occaecat fugiat anim esse eu ex aliquip reprehenderit veniam sunt.\"},{\"id\":\"54e1a1ce3e9520c6939ce2b3\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/514ab16d-68bf-4932-96fe-966c255776a4\",\"description\":\"Ad dolore irure amet consequat qui amet est in quis velit.\"},{\"id\":\"54e1a1ce28d2417681da07c6\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/20ba90d9-6ab0-4f81-af87-dfd82dd2430d\",\"description\":\"Cillum elit qui ullamco velit sit dolore.\"},{\"id\":\"54e1a1ce737d2478291dbb1e\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/7c0385a2-8e8c-4e9a-a6ac-335337bab76d\",\"description\":\"Irure enim officia quis dolore ipsum adipisicing tempor proident reprehenderit consectetur sunt.\"}],\"greeting\":\"Hello, Levy! You have 6 unread messages.\",\"favorite_fruit\":\"apple\"},{\"_id\":\"54e1a1ce12ef8e272da9c81d\",\"index\":36,\"guid\":\"69982780-0997-460f-ac92-7d2de913179e\",\"is_active\":true,\"balance\":\"$1,895.57\",\"picture\":\"http://placehold.it/32x32\",\"age\":25,\"eye_color\":\"green\",\"name\":{\"first\":\"Mueller\",\"last\":\"Beck\"},\"company\":\"UTARA\",\"email\":\"mueller.beck@utara.tv\",\"phone\":\"+1 (940) 587-2528\",\"address\":\"739 Grand Street, Greer, New Jersey, 3187\",\"about\":\"Occaecat amet proident sint reprehenderit officia. Anim laboris et aute aliqua. Ipsum ad laboris deserunt eu id. Est ut anim sint nulla proident qui est cupidatat cillum id magna.\\r\\n\",\"registered\":\"Tuesday, April 1, 2014 4:51 AM\",\"latitude\":42.254791,\"longitude\":-4.576435,\"tags\":[\"tempor\",\"commodo\",\"anim\",\"fugiat\",\"aliqua\",\"qui\",\"mollit\"],\"range\":[0,1,2,3,4,5,6,7,8,9],\"friends\":[{\"id\":0,\"name\":\"Massey Baker\"},{\"id\":1,\"name\":\"Larson Booth\"},{\"id\":2,\"name\":\"Althea Weeks\"}],\"images\":[{\"id\":\"54e1a1ce62d58e0e4c840755\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/62ffe911-fa54-491c-b132-5d4bece83063\",\"description\":\"Exercitation duis eiusmod enim culpa laborum sit nostrud sunt esse.\"},{\"id\":\"54e1a1ce82bdf7ea50952d77\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/c3933aaa-9c1e-47ad-8b4f-da3fe15722d7\",\"description\":\"Sint proident anim id incididunt sint ea deserunt incididunt minim magna irure incididunt.\"},{\"id\":\"54e1a1ce824ea3f600357119\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/8d396156-ea2c-48cf-b6a8-32329f7a1734\",\"description\":\"Esse labore ut cillum cupidatat exercitation voluptate mollit consectetur.\"},{\"id\":\"54e1a1cea778cc48fc939adb\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/e8662277-f457-4eea-90b7-b4ce66a13d52\",\"description\":\"Reprehenderit ea cupidatat aute qui velit duis anim cillum.\"},{\"id\":\"54e1a1cea7b55635155a7079\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/ca8c2e7e-926d-4871-a78e-85e638e40c88\",\"description\":\"Labore ea culpa quis incididunt irure.\"}],\"greeting\":\"Hello, Mueller! You have 10 unread messages.\",\"favorite_fruit\":\"apple\"},{\"_id\":\"54e1a1ce7da2005f773b3597\",\"index\":37,\"guid\":\"7ad8809e-b8b4-4235-8a4e-e88cee88cd1a\",\"is_active\":true,\"balance\":\"$1,816.98\",\"picture\":\"http://placehold.it/32x32\",\"age\":22,\"eye_color\":\"blue\",\"name\":{\"first\":\"Roxie\",\"last\":\"Rosario\"},\"company\":\"COMVEX\",\"email\":\"roxie.rosario@comvex.biz\",\"phone\":\"+1 (905) 503-3417\",\"address\":\"846 Highland Boulevard, Charco, Puerto Rico, 2579\",\"about\":\"Dolor fugiat dolore cupidatat excepteur. Culpa labore fugiat anim id eiusmod. Consectetur mollit in dolor ullamco est fugiat commodo proident enim veniam incididunt proident laboris. Commodo dolor non irure velit velit. Occaecat ex adipisicing voluptate ut magna do fugiat culpa labore in.\\r\\n\",\"registered\":\"Saturday, February 8, 2014 9:25 AM\",\"latitude\":66.381815,\"longitude\":170.162574,\"tags\":[\"ex\",\"irure\",\"qui\",\"laboris\",\"quis\",\"enim\",\"nulla\"],\"range\":[0,1,2,3,4,5,6,7,8,9],\"friends\":[{\"id\":0,\"name\":\"Long Rodriguez\"},{\"id\":1,\"name\":\"Zimmerman Holmes\"},{\"id\":2,\"name\":\"Jacobs Bishop\"}],\"images\":[{\"id\":\"54e1a1cee96d230fb653420f\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/eea61df2-e760-46a4-a287-70e5d144c4da\",\"description\":\"Ipsum ut ex ullamco aliqua sunt elit amet amet enim nisi eu.\"},{\"id\":\"54e1a1ce6a6481724d7dd938\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/1c125b46-5ca5-4e5d-bcc0-26f705a59386\",\"description\":\"Sint fugiat occaecat cupidatat Lorem nisi exercitation ipsum minim.\"},{\"id\":\"54e1a1ceafe78772d4cb1d1b\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/7b802155-17a3-4dd3-b829-4c8b136d7774\",\"description\":\"Cillum et aliqua ad sint quis aliquip fugiat ad qui.\"}],\"greeting\":\"Hello, Roxie! You have 7 unread messages.\",\"favorite_fruit\":\"banana\"},{\"_id\":\"54e1a1ced8cbc1f3ff63eb0e\",\"index\":38,\"guid\":\"b81ef6bd-de89-4188-97d3-4ce8883f31fa\",\"is_active\":false,\"balance\":\"$3,622.89\",\"picture\":\"http://placehold.it/32x32\",\"age\":33,\"eye_color\":\"brown\",\"name\":{\"first\":\"Mara\",\"last\":\"Howell\"},\"company\":\"ZENTRY\",\"email\":\"mara.howell@zentry.co.uk\",\"phone\":\"+1 (812) 516-2751\",\"address\":\"601 Bliss Terrace, Jamestown, Michigan, 4663\",\"about\":\"Tempor reprehenderit voluptate minim ipsum. Sit labore do aliquip enim excepteur proident consequat ut nisi nostrud ea. Exercitation aliqua commodo ex sint.\\r\\n\",\"registered\":\"Sunday, November 2, 2014 9:56 PM\",\"latitude\":25.139826,\"longitude\":-153.733168,\"tags\":[\"consequat\",\"ullamco\",\"irure\",\"voluptate\",\"pariatur\",\"aute\",\"dolor\"],\"range\":[0,1,2,3,4,5,6,7,8,9],\"friends\":[{\"id\":0,\"name\":\"Shelley Oneal\"},{\"id\":1,\"name\":\"Isabel Jenkins\"},{\"id\":2,\"name\":\"Davis Glass\"}],\"images\":[{\"id\":\"54e1a1ce246246a017eb5c20\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/817ea052-840d-4466-8f1d-f6d74d4d6411\",\"description\":\"Dolore qui eiusmod cillum pariatur.\"},{\"id\":\"54e1a1ce1249bf80273460d8\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/42b022cb-a4f8-4d89-9193-1306faf3460a\",\"description\":\"Veniam sint occaecat dolore est occaecat proident sint magna officia quis dolore.\"},{\"id\":\"54e1a1ce9164a99226868092\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/c428000a-eb72-44eb-a977-1409b07b7017\",\"description\":\"Cupidatat elit tempor consectetur officia.\"},{\"id\":\"54e1a1cecca8be9b30d21f48\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/048dee16-994c-44d9-a9a8-6f2431d13621\",\"description\":\"Dolor excepteur anim id duis elit mollit aute fugiat sint quis irure officia sunt.\"},{\"id\":\"54e1a1cef28a412c1c875d11\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/072fe483-e29c-4a5c-afd0-2ed023fa9ef6\",\"description\":\"Esse ullamco dolor eu esse ut anim dolor non id anim eu minim ipsum.\"},{\"id\":\"54e1a1ce8b0aeb71bff410d1\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/94fee08e-c646-45c8-9c3f-39e638f01224\",\"description\":\"Sit sunt dolor eu in qui culpa tempor officia adipisicing labore culpa sint.\"},{\"id\":\"54e1a1cebdaf5036c71bde93\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/304c0edd-959f-4c21-a7fc-ee1742aa3dbc\",\"description\":\"Velit aliquip ex ut excepteur culpa velit.\"},{\"id\":\"54e1a1ce14a32d390754d42e\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/2a5f8878-f521-4505-8756-b9407ae9713f\",\"description\":\"Nostrud voluptate eiusmod non et sint.\"},{\"id\":\"54e1a1ce39c27a7dd71cf61e\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/9c6e9f22-1029-40de-8cd6-9b81683b255e\",\"description\":\"Tempor non culpa amet sint anim laboris quis.\"},{\"id\":\"54e1a1ce1dddf6886c3e4b9d\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/824f9b51-a600-47a5-8b73-1247ce43393b\",\"description\":\"Ut elit aliquip non in qui reprehenderit veniam velit quis dolor consectetur cillum ullamco.\"}],\"greeting\":\"Hello, Mara! You have 10 unread messages.\",\"favorite_fruit\":\"banana\"},{\"_id\":\"54e1a1ce5217352ddd3bfaa4\",\"index\":39,\"guid\":\"10d6585a-3870-477f-8888-a93de3b322ce\",\"is_active\":false,\"balance\":\"$2,802.51\",\"picture\":\"http://placehold.it/32x32\",\"age\":39,\"eye_color\":\"blue\",\"name\":{\"first\":\"Wynn\",\"last\":\"Roberts\"},\"company\":\"HIVEDOM\",\"email\":\"wynn.roberts@hivedom.org\",\"phone\":\"+1 (810) 515-3614\",\"address\":\"658 Blake Court, Hall, Wisconsin, 3819\",\"about\":\"Id pariatur magna qui anim do Lorem mollit reprehenderit. Proident commodo Lorem qui excepteur ullamco officia do cupidatat ullamco. Exercitation dolore et duis aliquip laborum nostrud. Officia Lorem ut et nostrud sit consectetur ex. Cupidatat aliquip aliqua anim nisi eu quis.\\r\\n\",\"registered\":\"Saturday, October 25, 2014 9:50 AM\",\"latitude\":-46.328531,\"longitude\":134.465046,\"tags\":[\"minim\",\"fugiat\",\"incididunt\",\"incididunt\",\"sint\",\"laboris\",\"mollit\"],\"range\":[0,1,2,3,4,5,6,7,8,9],\"friends\":[{\"id\":0,\"name\":\"Potter Warren\"},{\"id\":1,\"name\":\"Stanley Myers\"},{\"id\":2,\"name\":\"Helena Morgan\"}],\"images\":[{\"id\":\"54e1a1ceef1d05d7ef434779\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/20589c0e-24fc-49ea-9e49-193460532c93\",\"description\":\"Pariatur do nostrud laborum ut ullamco anim aliquip officia dolore sunt Lorem.\"},{\"id\":\"54e1a1cefbb9973d973709cd\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/5b939caa-b424-4c1d-bf4c-f0be7f636fde\",\"description\":\"Id aute aute incididunt sint veniam.\"},{\"id\":\"54e1a1cedd166920e45d15ca\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/0e987eab-517c-4f91-b167-a7789edfe07e\",\"description\":\"Culpa anim voluptate sint exercitation duis dolore laboris.\"},{\"id\":\"54e1a1cef9e8918d1d4c7289\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/5db6f51e-c581-434a-b55f-d724b4120fa1\",\"description\":\"Ea nisi ipsum sit pariatur labore adipisicing ipsum tempor reprehenderit sint in pariatur velit cillum.\"}],\"greeting\":\"Hello, Wynn! You have 7 unread messages.\",\"favorite_fruit\":\"banana\"},{\"_id\":\"54e1a1cee972c36ba3147462\",\"index\":40,\"guid\":\"6746e229-1cb1-4ef0-b86d-a17f55b0cc8b\",\"is_active\":false,\"balance\":\"$3,174.12\",\"picture\":\"http://placehold.it/32x32\",\"age\":21,\"eye_color\":\"green\",\"name\":{\"first\":\"Jackie\",\"last\":\"Herrera\"},\"company\":\"QUINEX\",\"email\":\"jackie.herrera@quinex.info\",\"phone\":\"+1 (995) 542-2823\",\"address\":\"904 Beacon Court, Cotopaxi, Nevada, 7481\",\"about\":\"Ea magna sint veniam labore voluptate consectetur voluptate nostrud ipsum consequat aliqua. Consectetur fugiat reprehenderit ex aute ipsum ut cillum adipisicing ex cupidatat. Eiusmod sunt commodo est ullamco. Non sunt Lorem incididunt veniam velit qui nulla irure nulla exercitation do Lorem et et. Incididunt labore enim anim laboris consectetur. Aliquip do ad sunt eiusmod irure enim sint sunt consectetur aute exercitation ullamco. Ullamco fugiat veniam irure dolor sint sint occaecat et consequat duis sit.\\r\\n\",\"registered\":\"Wednesday, February 5, 2014 7:44 PM\",\"latitude\":-63.714795,\"longitude\":-38.620658,\"tags\":[\"tempor\",\"nostrud\",\"esse\",\"aliqua\",\"aute\",\"commodo\",\"ex\"],\"range\":[0,1,2,3,4,5,6,7,8,9],\"friends\":[{\"id\":0,\"name\":\"Freida Vinson\"},{\"id\":1,\"name\":\"Greene Henson\"},{\"id\":2,\"name\":\"Richardson Hester\"}],\"images\":[{\"id\":\"54e1a1ce6c4c619c39198670\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/4346d28e-096f-4cdc-a347-b8ce265dd39c\",\"description\":\"Do anim elit laboris deserunt.\"},{\"id\":\"54e1a1ce73561b153a44fc40\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/5ecbeb7c-a06a-4e4a-b4cb-5c27c7c7b212\",\"description\":\"Et veniam mollit id incididunt ex eiusmod excepteur nostrud cillum et.\"},{\"id\":\"54e1a1ce696b86dd2b58c964\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/92ffa34d-56d0-4c8b-87c8-6d85f0be7d4f\",\"description\":\"Laborum Lorem nostrud aute eiusmod culpa laborum ad do minim qui irure sunt fugiat do.\"},{\"id\":\"54e1a1ce760ba19a761e8ab9\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/6f28e695-dc56-4443-81e4-b6586d4556e6\",\"description\":\"Sit laboris in id ex aute fugiat nisi do consequat pariatur labore velit reprehenderit exercitation.\"},{\"id\":\"54e1a1ce0a020a744d041b86\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/0b2af913-ebc0-44b2-9eda-29a7b3211ee5\",\"description\":\"Commodo eiusmod Lorem veniam voluptate amet excepteur cupidatat esse quis eiusmod dolor velit.\"},{\"id\":\"54e1a1ce44aa62b3e695ed7e\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/b57ee6c1-40b6-4525-b5fe-1ef003fcf4d9\",\"description\":\"Adipisicing proident ex ex minim excepteur voluptate ea aliqua est aute.\"},{\"id\":\"54e1a1ce6140a72e4ae04325\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/8639511b-eecd-4655-83ad-14f9eac56b82\",\"description\":\"Et veniam esse magna ipsum ut officia voluptate non dolore.\"},{\"id\":\"54e1a1cede7ea7534d467c15\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/f3fe0d3f-b660-4ccd-aaac-587b2307d7e1\",\"description\":\"Est nostrud excepteur pariatur ullamco commodo quis.\"},{\"id\":\"54e1a1ce952b96d23d10358e\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/6fbd9edd-d9e1-4430-9f19-28f4f23ce52e\",\"description\":\"Minim ullamco est non laborum veniam velit.\"},{\"id\":\"54e1a1cef02d7de47cfda0ca\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/7c701bd5-06fa-4b0a-b3c7-d916fe335047\",\"description\":\"Sit excepteur elit ullamco officia aliqua reprehenderit ullamco quis tempor.\"}],\"greeting\":\"Hello, Jackie! You have 9 unread messages.\",\"favorite_fruit\":\"banana\"},{\"_id\":\"54e1a1ce05df642141b0d356\",\"index\":41,\"guid\":\"957a41aa-bcdf-41c3-8802-63bb42d4b581\",\"is_active\":false,\"balance\":\"$1,642.86\",\"picture\":\"http://placehold.it/32x32\",\"age\":26,\"eye_color\":\"green\",\"name\":{\"first\":\"Rasmussen\",\"last\":\"Nolan\"},\"company\":\"ZILLADYNE\",\"email\":\"rasmussen.nolan@zilladyne.me\",\"phone\":\"+1 (917) 589-3299\",\"address\":\"557 Judge Street, Gardiner, North Carolina, 9290\",\"about\":\"Mollit consectetur fugiat reprehenderit anim ad aliqua. Proident dolor quis est cillum ea. Lorem do proident Lorem incididunt qui quis voluptate nulla eiusmod est dolor laborum mollit nulla. Esse Lorem enim ex consequat aute eu amet sit enim. Aute exercitation veniam sit pariatur do in quis velit.\\r\\n\",\"registered\":\"Wednesday, January 14, 2015 5:05 PM\",\"latitude\":-26.490055,\"longitude\":-156.365803,\"tags\":[\"exercitation\",\"amet\",\"eu\",\"occaecat\",\"pariatur\",\"eu\",\"dolore\"],\"range\":[0,1,2,3,4,5,6,7,8,9],\"friends\":[{\"id\":0,\"name\":\"Lamb Monroe\"},{\"id\":1,\"name\":\"Elisa Vaughn\"},{\"id\":2,\"name\":\"Katy Stanley\"}],\"images\":[{\"id\":\"54e1a1cefef15b0c7981ea13\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/7419f3ff-e9a8-49c4-9a9c-a616909203f4\",\"description\":\"Ex dolore veniam nostrud in culpa.\"},{\"id\":\"54e1a1ce5f9da6667184593f\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/5ba6913f-d6c0-4262-be36-324ef6447ff1\",\"description\":\"Non elit minim deserunt sit.\"},{\"id\":\"54e1a1ced3877416d0999077\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/ec897315-270a-4fee-9b05-5f9e1283f5e5\",\"description\":\"Mollit ut commodo amet aliquip ad exercitation reprehenderit ipsum eiusmod voluptate eu proident.\"},{\"id\":\"54e1a1ce8565009f25fd8fb4\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/3533e471-fed1-4daf-a0ab-448db9e00753\",\"description\":\"Laborum esse eu laborum ad laboris.\"},{\"id\":\"54e1a1ce6aa046686c3dd6a5\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/3ea09082-4e52-490f-9b34-3d1eef2844ab\",\"description\":\"Aliquip enim nisi dolor elit magna excepteur aute nulla voluptate ipsum laborum fugiat commodo nostrud.\"},{\"id\":\"54e1a1cea8fc6774b3940694\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/693db185-8bf0-4b2b-8c13-a3f254dbd4de\",\"description\":\"Aute adipisicing in in esse officia velit exercitation est.\"},{\"id\":\"54e1a1ce7a7d6599acf1b47d\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/9ab0586b-b28a-43a0-9638-f6cfa5f0ef0a\",\"description\":\"Adipisicing veniam nulla occaecat nulla.\"},{\"id\":\"54e1a1ceab79ece5b32a6047\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/6f75f871-dbad-4d61-a84d-b0786a398347\",\"description\":\"Non cillum elit id tempor.\"},{\"id\":\"54e1a1ce4dee80071b4b77d8\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/177732eb-a9a3-47dc-9659-c3c199f7abb0\",\"description\":\"Nulla elit aliquip tempor labore consectetur aute mollit deserunt qui magna laboris qui.\"},{\"id\":\"54e1a1ce0515613f2462b0d4\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/1f15612f-e72b-4336-90b0-a4e93a224be1\",\"description\":\"Ut culpa nostrud nulla minim occaecat voluptate sint veniam veniam amet.\"},{\"id\":\"54e1a1cef46e8efa5bd816ac\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/9c2d696f-85d7-4cb9-981f-92e50f911149\",\"description\":\"Dolore incididunt elit qui incididunt.\"}],\"greeting\":\"Hello, Rasmussen! You have 5 unread messages.\",\"favorite_fruit\":\"strawberry\"},{\"_id\":\"54e1a1ce129e9aec440be8b7\",\"index\":42,\"guid\":\"0efb6466-2eb5-4660-accc-dbc662546e6f\",\"is_active\":true,\"balance\":\"$1,584.81\",\"picture\":\"http://placehold.it/32x32\",\"age\":39,\"eye_color\":\"green\",\"name\":{\"first\":\"Burt\",\"last\":\"Holloway\"},\"company\":\"BUZZNESS\",\"email\":\"burt.holloway@buzzness.com\",\"phone\":\"+1 (861) 460-3397\",\"address\":\"650 Louisiana Avenue, Onton, Oklahoma, 8996\",\"about\":\"Lorem laborum fugiat minim nulla ut et. Elit occaecat nostrud duis incididunt minim et occaecat commodo commodo occaecat aute labore. Excepteur consequat ipsum ipsum id cillum incididunt. Ea magna quis ad duis magna officia ipsum commodo excepteur. Occaecat eu ullamco quis ullamco sint duis pariatur quis minim commodo. Excepteur quis eiusmod minim eu occaecat qui mollit.\\r\\n\",\"registered\":\"Monday, April 28, 2014 3:02 PM\",\"latitude\":69.726499,\"longitude\":-27.107761,\"tags\":[\"deserunt\",\"irure\",\"qui\",\"labore\",\"velit\",\"laborum\",\"consequat\"],\"range\":[0,1,2,3,4,5,6,7,8,9],\"friends\":[{\"id\":0,\"name\":\"Margaret Mullen\"},{\"id\":1,\"name\":\"Dodson Roth\"},{\"id\":2,\"name\":\"Warren Ward\"}],\"images\":[{\"id\":\"54e1a1ce8f062b2f1f794f05\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/33b7aa19-740a-4fbd-9af8-049d64ab0641\",\"description\":\"Enim exercitation enim ullamco amet irure quis amet aliqua mollit eu.\"},{\"id\":\"54e1a1ceb201d0a15fc2eedb\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/01f73b05-72af-44ba-838e-ae955688f7a9\",\"description\":\"Lorem et dolore do est occaecat.\"},{\"id\":\"54e1a1ce86c4d3901838893d\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/70716afb-b79f-44a6-b07a-3ef3ee6f91f3\",\"description\":\"Quis veniam voluptate sit velit dolor aute in adipisicing.\"},{\"id\":\"54e1a1ced3fef54d0f61c152\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/eb522f02-9473-405f-871a-edb742d1de9b\",\"description\":\"Occaecat enim pariatur consequat irure aute cillum qui.\"}],\"greeting\":\"Hello, Burt! You have 5 unread messages.\",\"favorite_fruit\":\"banana\"},{\"_id\":\"54e1a1cedcc07159206db94f\",\"index\":43,\"guid\":\"97fec9f2-9b3e-4a89-b145-29032cc46c07\",\"is_active\":true,\"balance\":\"$3,023.00\",\"picture\":\"http://placehold.it/32x32\",\"age\":32,\"eye_color\":\"brown\",\"name\":{\"first\":\"Margery\",\"last\":\"Perkins\"},\"company\":\"TINGLES\",\"email\":\"margery.perkins@tingles.biz\",\"phone\":\"+1 (912) 456-2238\",\"address\":\"139 Lester Court, Cucumber, Kansas, 1192\",\"about\":\"Lorem ad dolor in et cupidatat laboris laborum. Commodo id aliquip sint do. Adipisicing sit aute do sint ex nisi ullamco occaecat. Eu qui dolor Lorem dolore elit velit. Nulla sint anim commodo mollit do Lorem reprehenderit cupidatat minim excepteur et pariatur labore.\\r\\n\",\"registered\":\"Saturday, August 9, 2014 5:29 PM\",\"latitude\":-66.9207,\"longitude\":151.737338,\"tags\":[\"veniam\",\"laboris\",\"cupidatat\",\"reprehenderit\",\"incididunt\",\"aliquip\",\"ad\"],\"range\":[0,1,2,3,4,5,6,7,8,9],\"friends\":[{\"id\":0,\"name\":\"Booker Potter\"},{\"id\":1,\"name\":\"Earline Kelly\"},{\"id\":2,\"name\":\"Lancaster Ewing\"}],\"images\":[{\"id\":\"54e1a1ceb0b4e2ef77b790c7\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/41d35e03-86f0-464d-916c-ffc015a26700\",\"description\":\"Ipsum qui laboris culpa aliqua consectetur non duis.\"},{\"id\":\"54e1a1ce4adfcd284f7cab9f\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/48ae148f-bc51-4ff9-b07b-084e148dd4ae\",\"description\":\"Amet Lorem ut ullamco deserunt excepteur amet non do deserunt tempor voluptate dolore officia reprehenderit.\"},{\"id\":\"54e1a1ce75060a9baba6ee45\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/ca29f1ce-d960-49a5-98b0-c4ad0794c0c4\",\"description\":\"Nulla ut aliqua est ut consectetur laborum in ullamco nisi ad.\"},{\"id\":\"54e1a1cee63edfd718a8d7b4\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/12c49b64-c211-4800-84ca-fd4e13c3a0e4\",\"description\":\"Ipsum elit in in excepteur aliquip pariatur Lorem ut sunt cillum consequat ad laboris.\"},{\"id\":\"54e1a1ce1eb134390c81e48f\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/97d2eac8-e2af-4c2b-bd50-2494d05625ea\",\"description\":\"Officia adipisicing ex duis incididunt nostrud elit irure culpa sint.\"},{\"id\":\"54e1a1ceca71af9743e02d51\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/63c92428-bfeb-4d24-a6b5-0fc2b89cf25f\",\"description\":\"Consequat reprehenderit aliquip laborum cupidatat elit dolor cillum quis quis voluptate.\"},{\"id\":\"54e1a1ce289e5f36c6dbbd5f\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/6e7405de-09bd-4014-99fe-53a6550b2bc7\",\"description\":\"Excepteur nisi Lorem consequat officia quis amet aute duis consequat consectetur sit.\"},{\"id\":\"54e1a1cedb557af01c6a085e\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/46be3876-efe8-4516-9b11-6b548bd3a0d0\",\"description\":\"Ex in est irure nostrud nulla occaecat do ad et culpa in nisi reprehenderit.\"},{\"id\":\"54e1a1ce46e364229fd3338a\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/8a7c8691-c163-48b3-82fe-a549abe5079e\",\"description\":\"Duis quis proident quis cupidatat ea quis voluptate fugiat nostrud.\"},{\"id\":\"54e1a1cebef54b6705152a91\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/87461805-607b-4e94-acdc-8f472ac38142\",\"description\":\"Ut ad aliqua reprehenderit enim ullamco sunt laboris aliqua est.\"},{\"id\":\"54e1a1ce4e6c31a1a5dc6c6a\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/6a3f71e2-4b20-46bb-bba8-b307c86d671e\",\"description\":\"Eiusmod deserunt ipsum laborum aliquip cillum velit eu labore sit.\"}],\"greeting\":\"Hello, Margery! You have 5 unread messages.\",\"favorite_fruit\":\"strawberry\"},{\"_id\":\"54e1a1ce689e77c6100944ff\",\"index\":44,\"guid\":\"65ccee1a-62f1-4d72-bcf5-762d7b015ce1\",\"is_active\":false,\"balance\":\"$3,050.33\",\"picture\":\"http://placehold.it/32x32\",\"age\":32,\"eye_color\":\"brown\",\"name\":{\"first\":\"Barlow\",\"last\":\"Lara\"},\"company\":\"SUPPORTAL\",\"email\":\"barlow.lara@supportal.io\",\"phone\":\"+1 (936) 506-2442\",\"address\":\"838 Baltic Street, Ruckersville, Ohio, 3974\",\"about\":\"Amet velit nulla ipsum id aute ad sint minim ipsum ea cupidatat magna. Laborum ipsum nulla sunt adipisicing est sint ipsum. Commodo laboris nisi consequat duis reprehenderit. Ea non sit occaecat magna. Lorem aute ut in esse consectetur aliqua voluptate consequat laboris aute.\\r\\n\",\"registered\":\"Monday, December 22, 2014 5:45 AM\",\"latitude\":41.73875,\"longitude\":-140.88558,\"tags\":[\"deserunt\",\"dolore\",\"sit\",\"laboris\",\"culpa\",\"sit\",\"nulla\"],\"range\":[0,1,2,3,4,5,6,7,8,9],\"friends\":[{\"id\":0,\"name\":\"Gregory Faulkner\"},{\"id\":1,\"name\":\"Bobbi Garza\"},{\"id\":2,\"name\":\"Elsie Richmond\"}],\"images\":[{\"id\":\"54e1a1ce6a1f3368ec35362b\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/790167ae-25e0-46f6-b621-58bf880652d1\",\"description\":\"Pariatur veniam sit pariatur minim aliqua.\"},{\"id\":\"54e1a1cee4659633244b147b\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/dee8578c-57a5-4a8b-bda2-4e89df6ed810\",\"description\":\"Ad enim sunt commodo aute aliquip labore occaecat duis ad ea velit aliqua.\"},{\"id\":\"54e1a1ce23749893319cd1af\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/a417e044-cc00-4c3c-89c3-bb9caed6bf11\",\"description\":\"Qui elit tempor velit culpa ad quis.\"},{\"id\":\"54e1a1ceb2931123276481cb\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/ea70dc37-2caf-4398-9a53-4627575b26bd\",\"description\":\"Velit adipisicing Lorem magna deserunt veniam deserunt quis ipsum ea quis.\"},{\"id\":\"54e1a1ce2ec499b1f5980cee\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/170253b2-cb82-423a-9268-694041fdc59e\",\"description\":\"Nostrud adipisicing qui enim cillum ex dolor proident.\"},{\"id\":\"54e1a1ce4a2bfed293a5abaa\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/a6050b8f-9e69-41d7-a699-16da71618d35\",\"description\":\"Anim ipsum esse cillum veniam quis id non ut laborum.\"},{\"id\":\"54e1a1ce4db0767b9a8beef6\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/43d20a71-f7c1-4e3e-aeff-8a52f8c8d118\",\"description\":\"Laborum ullamco qui culpa occaecat voluptate cillum eiusmod ipsum ipsum.\"},{\"id\":\"54e1a1ced50335e79f688918\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/1183a4f7-9624-4518-b891-a1c9d37f42cc\",\"description\":\"Amet voluptate est cupidatat ad.\"},{\"id\":\"54e1a1ce76d9800e1e019aa8\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/612a3aa1-7c14-48e2-b88f-970bf67a0172\",\"description\":\"Anim do fugiat sit commodo quis nulla voluptate esse.\"}],\"greeting\":\"Hello, Barlow! You have 8 unread messages.\",\"favorite_fruit\":\"apple\"},{\"_id\":\"54e1a1cec47626ca542ae747\",\"index\":45,\"guid\":\"6fd9a45f-4bd1-4b76-8fba-5ddf55324f69\",\"is_active\":true,\"balance\":\"$1,364.13\",\"picture\":\"http://placehold.it/32x32\",\"age\":22,\"eye_color\":\"green\",\"name\":{\"first\":\"Reva\",\"last\":\"Keller\"},\"company\":\"HATOLOGY\",\"email\":\"reva.keller@hatology.name\",\"phone\":\"+1 (840) 550-2817\",\"address\":\"750 Utica Avenue, Hiko, New Hampshire, 5817\",\"about\":\"Anim cillum elit esse sint minim anim id ad anim dolore est nulla. Sint amet ipsum minim laboris id qui eiusmod deserunt. Velit magna ullamco sunt exercitation. Quis elit nostrud elit velit enim culpa irure mollit excepteur consectetur laboris enim ex deserunt. Consequat quis Lorem dolore officia officia laboris quis occaecat tempor.\\r\\n\",\"registered\":\"Tuesday, June 10, 2014 7:53 PM\",\"latitude\":-59.895863,\"longitude\":111.361039,\"tags\":[\"veniam\",\"magna\",\"non\",\"et\",\"deserunt\",\"Lorem\",\"ut\"],\"range\":[0,1,2,3,4,5,6,7,8,9],\"friends\":[{\"id\":0,\"name\":\"Stokes Ryan\"},{\"id\":1,\"name\":\"Aisha Mccarty\"},{\"id\":2,\"name\":\"Anastasia Clark\"}],\"images\":[{\"id\":\"54e1a1ce99360f06df9f6ecc\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/f1861e4c-f64d-4bd9-b6ef-23e433a9857e\",\"description\":\"Laboris do id et Lorem laboris ut aliqua ullamco pariatur.\"},{\"id\":\"54e1a1cef7620692bfff5eaa\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/e9b1e65d-39c9-4ea6-aabd-493e7a267315\",\"description\":\"Aliquip irure officia nostrud nulla duis officia sit.\"},{\"id\":\"54e1a1ce94c228e7fca32a6e\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/7ad8517c-d943-4611-a981-c22b3dd82a35\",\"description\":\"Laborum minim Lorem quis ex sint consequat officia.\"},{\"id\":\"54e1a1ced04b65e8a3087e7b\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/5f95d469-b1ba-4ff4-aba7-a316509f6254\",\"description\":\"Aliqua labore quis incididunt elit in enim occaecat duis exercitation elit nisi et sunt.\"},{\"id\":\"54e1a1ceb4bf04dad3424110\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/d60fdc44-d64a-470a-be5c-64501c95b5f4\",\"description\":\"Laboris sint esse tempor magna sunt ullamco eiusmod excepteur fugiat eu.\"},{\"id\":\"54e1a1ce00a5ca8d6edfb2d3\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/e0353a6a-25df-4212-89c8-7a85afda601c\",\"description\":\"Enim aute Lorem elit dolor reprehenderit.\"},{\"id\":\"54e1a1ced866c96c732d17bb\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/3093cf8a-b4e2-4483-9d22-a7471e20e2ab\",\"description\":\"Do magna laborum mollit ipsum consectetur veniam pariatur sint.\"},{\"id\":\"54e1a1ce801bf3edf51fbe95\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/1fe8ae5f-7e3b-4463-9e1c-a2aec64f9a72\",\"description\":\"Ea id cillum est exercitation irure et consectetur excepteur culpa reprehenderit cupidatat est.\"},{\"id\":\"54e1a1cee0567bee56feed58\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/26252b07-682c-4c4d-921f-18e92988c6b5\",\"description\":\"In amet nostrud eu eu ullamco.\"}],\"greeting\":\"Hello, Reva! You have 8 unread messages.\",\"favorite_fruit\":\"strawberry\"},{\"_id\":\"54e1a1ce1da3e0db6a25e513\",\"index\":46,\"guid\":\"4e7b4083-3fe8-4c23-bfe0-b7a0a4ea147c\",\"is_active\":false,\"balance\":\"$2,763.66\",\"picture\":\"http://placehold.it/32x32\",\"age\":40,\"eye_color\":\"brown\",\"name\":{\"first\":\"Blanchard\",\"last\":\"Moses\"},\"company\":\"ENOMEN\",\"email\":\"blanchard.moses@enomen.ca\",\"phone\":\"+1 (849) 585-2426\",\"address\":\"756 Seigel Court, Darrtown, Washington, 6144\",\"about\":\"Anim cupidatat cupidatat ut aute anim occaecat aliqua nostrud. Occaecat duis sunt aute irure excepteur sint officia laboris veniam officia eu nostrud culpa voluptate. Magna eiusmod et et cillum elit commodo elit labore sunt elit adipisicing elit proident. Ad non proident sint est qui aliqua sunt veniam ad id. Labore magna eiusmod et id. Excepteur incididunt cillum dolore enim officia labore adipisicing enim voluptate.\\r\\n\",\"registered\":\"Thursday, January 22, 2015 1:56 PM\",\"latitude\":-88.044165,\"longitude\":-123.373985,\"tags\":[\"non\",\"velit\",\"deserunt\",\"pariatur\",\"labore\",\"dolor\",\"elit\"],\"range\":[0,1,2,3,4,5,6,7,8,9],\"friends\":[{\"id\":0,\"name\":\"Rowe Becker\"},{\"id\":1,\"name\":\"Queen Bonner\"},{\"id\":2,\"name\":\"Lea Burns\"}],\"images\":[{\"id\":\"54e1a1cef63ceaaf9d2a17f0\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/dc53c288-1d39-453c-83e7-4bfaf43af56c\",\"description\":\"Officia aliqua anim eu officia excepteur consequat cupidatat cillum laborum ad fugiat veniam est duis.\"},{\"id\":\"54e1a1ce3ae655737a5e5c08\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/102f03c6-f2a4-49b6-a47a-5df537f96bc2\",\"description\":\"Ea cillum eu cillum adipisicing quis sint consequat.\"},{\"id\":\"54e1a1cea25b5769efc653f0\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/384d95ce-a97e-4918-a8c6-68cda5a38f84\",\"description\":\"Officia nostrud nulla adipisicing ipsum consequat consectetur.\"},{\"id\":\"54e1a1ce0125d683ee2402fe\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/45c78f61-63c6-4ef4-b1db-f72a84667b6c\",\"description\":\"Deserunt consequat veniam qui ut nisi Lorem deserunt occaecat dolor.\"}],\"greeting\":\"Hello, Blanchard! You have 7 unread messages.\",\"favorite_fruit\":\"banana\"},{\"_id\":\"54e1a1cea252fdf195c466f9\",\"index\":47,\"guid\":\"53d6360e-81f6-4726-a3fc-31b4d3b865f2\",\"is_active\":true,\"balance\":\"$3,437.97\",\"picture\":\"http://placehold.it/32x32\",\"age\":32,\"eye_color\":\"blue\",\"name\":{\"first\":\"Downs\",\"last\":\"Copeland\"},\"company\":\"ELITA\",\"email\":\"downs.copeland@elita.net\",\"phone\":\"+1 (826) 435-3828\",\"address\":\"551 Canda Avenue, Veyo, Missouri, 1831\",\"about\":\"Voluptate incididunt enim nostrud amet tempor tempor ex nisi aute et quis ullamco. Adipisicing excepteur exercitation magna cillum excepteur sit nisi ullamco. Qui cupidatat sit magna pariatur consectetur adipisicing ipsum reprehenderit esse dolore ad eiusmod cillum. Occaecat velit ex adipisicing eu velit cupidatat irure sit dolore est nulla in eu. Magna esse in minim aliquip mollit labore magna duis incididunt et magna. Commodo consequat ut eiusmod nisi occaecat sit qui ea adipisicing ut. Irure cupidatat amet commodo commodo do et sint ipsum nostrud nulla sint enim consequat.\\r\\n\",\"registered\":\"Monday, April 21, 2014 6:02 AM\",\"latitude\":25.565496,\"longitude\":161.624913,\"tags\":[\"labore\",\"eiusmod\",\"ullamco\",\"laboris\",\"aute\",\"magna\",\"dolore\"],\"range\":[0,1,2,3,4,5,6,7,8,9],\"friends\":[{\"id\":0,\"name\":\"Mcintyre Navarro\"},{\"id\":1,\"name\":\"Millie Garrett\"},{\"id\":2,\"name\":\"Willa Caldwell\"}],\"images\":[{\"id\":\"54e1a1ce1efad8d850c97016\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/5d994148-56fa-42ef-ae58-6bb9e74fab0f\",\"description\":\"Lorem exercitation laborum do duis fugiat ea voluptate dolore aliquip eiusmod.\"},{\"id\":\"54e1a1ce12115605ac7ddfe6\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/d65379b0-a85a-4e4a-9b95-028edd58f03d\",\"description\":\"Magna incididunt ut labore ut nulla ipsum proident est mollit eiusmod magna consectetur et deserunt.\"},{\"id\":\"54e1a1ce5ae958455c79e8c9\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/bc0fbab0-6587-4d1e-97a4-e57b2fde4d51\",\"description\":\"Aute est et officia sunt exercitation in non est aliqua nostrud ad excepteur consequat.\"}],\"greeting\":\"Hello, Downs! You have 7 unread messages.\",\"favorite_fruit\":\"apple\"},{\"_id\":\"54e1a1ce9f2e4b47420bc962\",\"index\":48,\"guid\":\"d865e06d-1c97-4777-85c1-df93db99d421\",\"is_active\":true,\"balance\":\"$1,863.96\",\"picture\":\"http://placehold.it/32x32\",\"age\":38,\"eye_color\":\"brown\",\"name\":{\"first\":\"Bowen\",\"last\":\"Morris\"},\"company\":\"ROCKABYE\",\"email\":\"bowen.morris@rockabye.tv\",\"phone\":\"+1 (986) 598-3877\",\"address\":\"690 Bedford Place, Bennett, West Virginia, 7767\",\"about\":\"Commodo commodo eiusmod amet duis culpa laborum occaecat. Ipsum velit culpa aliquip tempor officia. Excepteur id Lorem culpa nostrud proident amet dolore elit aute. Nisi dolore qui laboris adipisicing magna. Ad incididunt cupidatat adipisicing commodo anim sit duis laborum magna et incididunt laborum eu magna. Qui esse adipisicing ad aliquip ut velit.\\r\\n\",\"registered\":\"Monday, September 15, 2014 4:29 PM\",\"latitude\":56.080269,\"longitude\":111.862638,\"tags\":[\"quis\",\"esse\",\"eu\",\"esse\",\"nisi\",\"est\",\"dolore\"],\"range\":[0,1,2,3,4,5,6,7,8,9],\"friends\":[{\"id\":0,\"name\":\"Woods Edwards\"},{\"id\":1,\"name\":\"Charlene Ferguson\"},{\"id\":2,\"name\":\"Aurelia Wilson\"}],\"images\":[{\"id\":\"54e1a1ce992b49d673f43589\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/01cfc7b0-6065-48ff-9f99-2eebe2d198ad\",\"description\":\"Proident id laborum aliqua pariatur eiusmod cillum quis pariatur fugiat.\"},{\"id\":\"54e1a1ce2e7998875be0314a\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/48aee68c-fe46-4cac-85b3-70df918b0702\",\"description\":\"Ut pariatur incididunt deserunt ullamco commodo quis est nostrud eu excepteur elit dolore.\"},{\"id\":\"54e1a1ce022914f6eb80458e\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/8e2bcd9c-0050-44f8-94af-27db95479620\",\"description\":\"Duis fugiat magna laboris et tempor.\"},{\"id\":\"54e1a1ce4ee81df4fe80123c\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/c240c208-d89a-4c96-a133-65ae76af3696\",\"description\":\"Pariatur tempor aliqua in reprehenderit magna eu nulla do amet proident ex in.\"},{\"id\":\"54e1a1ce352e9f945bc1df3b\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/f155fa83-9863-4429-8718-6d4916cad1e2\",\"description\":\"Commodo ullamco laborum aute amet sit elit quis Lorem irure ut magna amet fugiat.\"},{\"id\":\"54e1a1ce9a039d8fb78f9eab\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/afa53b56-d86e-43da-97e9-1b7924ccf78f\",\"description\":\"Occaecat ea velit aute veniam.\"},{\"id\":\"54e1a1ce24eb4bbfcf72c0fe\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/445b4117-dd4a-4012-8790-6011c4d7d4de\",\"description\":\"Culpa anim deserunt laborum commodo ullamco ad ex sunt cillum ut.\"},{\"id\":\"54e1a1ce3be038d7b7348fab\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/af2698f1-649e-4d45-ab60-96980b220ef5\",\"description\":\"In laboris adipisicing irure ea.\"},{\"id\":\"54e1a1ce01cd20134fd805be\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/15624e4e-d951-4c33-948c-2f2ba48f9516\",\"description\":\"Non ut fugiat nisi nisi amet esse sunt.\"},{\"id\":\"54e1a1ce598ea849dda2558c\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/f3bd9ea1-0738-4ed9-b15d-46239cb94db7\",\"description\":\"Tempor nostrud proident non excepteur tempor anim magna in velit exercitation voluptate do aliqua.\"},{\"id\":\"54e1a1cec33316c74d61b9e9\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/361f2fa2-514c-433a-9010-e6e372d72f00\",\"description\":\"Sint adipisicing et pariatur ad minim laborum in.\"},{\"id\":\"54e1a1cee9ca068b917b937e\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/2889d29c-7e43-4736-bb0a-ca30a5e1414d\",\"description\":\"Est irure dolore minim reprehenderit est minim est officia.\"}],\"greeting\":\"Hello, Bowen! You have 10 unread messages.\",\"favorite_fruit\":\"strawberry\"},{\"_id\":\"54e1a1ceddfb09a0a95b3965\",\"index\":49,\"guid\":\"f8de31cb-e834-4b84-b467-aaabf501ebe6\",\"is_active\":false,\"balance\":\"$3,030.83\",\"picture\":\"http://placehold.it/32x32\",\"age\":34,\"eye_color\":\"green\",\"name\":{\"first\":\"Hicks\",\"last\":\"Kelley\"},\"company\":\"KOZGENE\",\"email\":\"hicks.kelley@kozgene.biz\",\"phone\":\"+1 (864) 509-3976\",\"address\":\"159 Clymer Street, Imperial, Guam, 985\",\"about\":\"Reprehenderit voluptate ut elit magna officia et culpa aliqua elit. Deserunt commodo amet deserunt dolore ullamco commodo proident mollit voluptate nulla. Dolore ut labore tempor anim laboris consectetur ea reprehenderit est.\\r\\n\",\"registered\":\"Saturday, May 24, 2014 4:19 AM\",\"latitude\":-57.926311,\"longitude\":102.166125,\"tags\":[\"adipisicing\",\"ipsum\",\"reprehenderit\",\"enim\",\"nisi\",\"minim\",\"culpa\"],\"range\":[0,1,2,3,4,5,6,7,8,9],\"friends\":[{\"id\":0,\"name\":\"Patsy Chaney\"},{\"id\":1,\"name\":\"Theresa Mathis\"},{\"id\":2,\"name\":\"Catalina Casey\"}],\"images\":[{\"id\":\"54e1a1cebe6d822c03c225c4\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/24da84c7-924a-4405-98a4-48be4d889d5a\",\"description\":\"Excepteur ex ex eiusmod amet sit.\"},{\"id\":\"54e1a1ce8af4e19d40701dc1\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/e01df3a9-5594-4b08-93d5-9b7d789177c0\",\"description\":\"Tempor irure laboris elit reprehenderit sunt magna proident eu nisi occaecat.\"},{\"id\":\"54e1a1ce471fe9f023bbcc36\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/f9edb280-0d93-4af1-a582-981d3fcf26fc\",\"description\":\"Elit incididunt ut ad cupidatat occaecat eiusmod cillum ut id.\"},{\"id\":\"54e1a1ce155fe83a60e0549f\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/316b3bb0-32cd-460e-a4ba-3e0730167182\",\"description\":\"Ea labore ad dolore nostrud sunt est non labore dolore aute labore est quis.\"},{\"id\":\"54e1a1ce19f6d5ca0850ef69\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/2a46db6f-0019-4c65-9543-4f63561da67d\",\"description\":\"Proident in laborum aliqua deserunt voluptate consequat enim adipisicing non.\"},{\"id\":\"54e1a1ce003f7ee1a0610faf\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/24972569-e7d8-40b9-9f49-78762a5ff0cb\",\"description\":\"Proident excepteur fugiat irure elit sit proident tempor Lorem reprehenderit laboris dolor aliqua esse ea.\"},{\"id\":\"54e1a1ce917980034c107ae6\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/e3540dec-b3f3-4d64-bf1e-3bba5b0159cc\",\"description\":\"Voluptate amet quis enim cillum.\"},{\"id\":\"54e1a1ce3a7ee6d4d515f938\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/207299be-c4f8-4b48-910b-1c7904cfcfa8\",\"description\":\"Voluptate pariatur duis ad ad nostrud labore.\"}],\"greeting\":\"Hello, Hicks! You have 9 unread messages.\",\"favorite_fruit\":\"apple\"},{\"_id\":\"54e1a1ce936497e5d390a9b3\",\"index\":50,\"guid\":\"4f0f03e3-28c8-4a83-a84f-c2a5915bc5f9\",\"is_active\":false,\"balance\":\"$3,330.76\",\"picture\":\"http://placehold.it/32x32\",\"age\":33,\"eye_color\":\"brown\",\"name\":{\"first\":\"Emerson\",\"last\":\"Lucas\"},\"company\":\"SNACKTION\",\"email\":\"emerson.lucas@snacktion.co.uk\",\"phone\":\"+1 (980) 401-3365\",\"address\":\"347 Garden Place, Calverton, Connecticut, 3339\",\"about\":\"Aliquip sit anim dolor veniam tempor adipisicing. Aliqua nisi nisi commodo sint do Lorem exercitation commodo dolor laboris mollit aute. Cillum enim deserunt tempor irure enim eu nostrud ipsum officia labore.\\r\\n\",\"registered\":\"Tuesday, January 21, 2014 10:58 AM\",\"latitude\":-25.597905,\"longitude\":78.985218,\"tags\":[\"nisi\",\"incididunt\",\"ex\",\"veniam\",\"officia\",\"occaecat\",\"veniam\"],\"range\":[0,1,2,3,4,5,6,7,8,9],\"friends\":[{\"id\":0,\"name\":\"Rhodes Gay\"},{\"id\":1,\"name\":\"Flynn Pearson\"},{\"id\":2,\"name\":\"Haynes Richards\"}],\"images\":[{\"id\":\"54e1a1cea19c774a7e3232e6\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/b7fa2d91-f432-4392-a58a-f1ef4bfe4974\",\"description\":\"Exercitation nulla pariatur nostrud occaecat ad eu labore commodo aute ipsum nulla mollit.\"},{\"id\":\"54e1a1ceef8c132f1e6842c4\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/59081bd2-d194-464e-9ad9-7979355570ab\",\"description\":\"Irure in ullamco id adipisicing consequat Lorem occaecat excepteur.\"},{\"id\":\"54e1a1ce11d773663f7881d6\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/9a809e7c-4883-47f4-83e9-fc6f64a087da\",\"description\":\"Sunt ea excepteur ea eiusmod aute labore.\"},{\"id\":\"54e1a1cee2a7aa8ccde56786\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/0cde2a1c-50bb-4831-888c-94bb3adb44e2\",\"description\":\"Officia eu voluptate do id occaecat cillum sint ea adipisicing id incididunt do est.\"},{\"id\":\"54e1a1ce5ec16f159e86a833\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/6d059587-18cc-47ec-abca-f6da970c8d1c\",\"description\":\"Qui tempor aliqua magna ad occaecat occaecat sint fugiat reprehenderit.\"},{\"id\":\"54e1a1ceafadd41392f47960\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/7898e070-860a-4798-9dca-914ac0632879\",\"description\":\"Laborum nostrud aute ullamco anim reprehenderit commodo nulla cillum pariatur voluptate.\"}],\"greeting\":\"Hello, Emerson! You have 10 unread messages.\",\"favorite_fruit\":\"banana\"},{\"_id\":\"54e1a1cea7d5442ddb0cdee9\",\"index\":51,\"guid\":\"bc7f935f-e175-485d-94a8-4d051db9f658\",\"is_active\":true,\"balance\":\"$2,368.64\",\"picture\":\"http://placehold.it/32x32\",\"age\":30,\"eye_color\":\"green\",\"name\":{\"first\":\"Norris\",\"last\":\"Robbins\"},\"company\":\"ECOSYS\",\"email\":\"norris.robbins@ecosys.org\",\"phone\":\"+1 (861) 571-2739\",\"address\":\"336 Lott Place, Jacksonwald, Delaware, 5264\",\"about\":\"Id consequat et commodo tempor duis deserunt et ad excepteur. Minim do consequat do qui nulla mollit magna amet incididunt anim. Laborum duis labore anim ullamco est irure. Velit ea cillum qui labore nisi anim veniam cupidatat est non non anim consequat. Est laboris ad eu eu cillum.\\r\\n\",\"registered\":\"Monday, June 23, 2014 1:49 PM\",\"latitude\":-72.272448,\"longitude\":52.861321,\"tags\":[\"est\",\"in\",\"ullamco\",\"enim\",\"amet\",\"magna\",\"aute\"],\"range\":[0,1,2,3,4,5,6,7,8,9],\"friends\":[{\"id\":0,\"name\":\"Dixie Leach\"},{\"id\":1,\"name\":\"Gallegos Higgins\"},{\"id\":2,\"name\":\"Pena Matthews\"}],\"images\":[{\"id\":\"54e1a1ceae332288647e405c\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/658406d8-9502-446c-8892-efe39fb64ce3\",\"description\":\"Nostrud consequat officia magna excepteur ex laboris eu excepteur voluptate pariatur do consectetur do officia.\"},{\"id\":\"54e1a1ce1b3793d28355cf13\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/4877cee5-963d-48ca-9bda-f69f7f96d025\",\"description\":\"Cillum deserunt non laboris aliqua dolore consectetur ullamco commodo eiusmod.\"}],\"greeting\":\"Hello, Norris! You have 10 unread messages.\",\"favorite_fruit\":\"strawberry\"},{\"_id\":\"54e1a1ce40bbbaf0080d87b8\",\"index\":52,\"guid\":\"4a66796d-8cda-4017-b8e3-9884109f07d4\",\"is_active\":true,\"balance\":\"$2,488.63\",\"picture\":\"http://placehold.it/32x32\",\"age\":25,\"eye_color\":\"blue\",\"name\":{\"first\":\"Bean\",\"last\":\"Boone\"},\"company\":\"PROWASTE\",\"email\":\"bean.boone@prowaste.info\",\"phone\":\"+1 (953) 510-3855\",\"address\":\"971 Albemarle Road, Deercroft, Texas, 9418\",\"about\":\"Aute fugiat fugiat ut commodo. Fugiat ullamco culpa consequat amet exercitation voluptate. Lorem magna laboris irure fugiat.\\r\\n\",\"registered\":\"Saturday, September 20, 2014 11:02 AM\",\"latitude\":27.727405,\"longitude\":129.293253,\"tags\":[\"non\",\"reprehenderit\",\"commodo\",\"labore\",\"enim\",\"est\",\"mollit\"],\"range\":[0,1,2,3,4,5,6,7,8,9],\"friends\":[{\"id\":0,\"name\":\"Beverley Rogers\"},{\"id\":1,\"name\":\"Rosemary Turner\"},{\"id\":2,\"name\":\"Barnes Munoz\"}],\"images\":[{\"id\":\"54e1a1ce16b727a8b5fc6260\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/4121103e-c123-4565-9ebd-4e13a9e1fd01\",\"description\":\"Ipsum magna laboris est mollit.\"},{\"id\":\"54e1a1cee66962b031fdb63a\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/211a0413-1bbb-4a6c-9aff-324d1fd4a7f2\",\"description\":\"Eu laboris ad ut occaecat anim nulla exercitation consequat minim deserunt.\"},{\"id\":\"54e1a1cee9f10282147f89f5\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/7925baeb-25e4-4b89-9854-bbc8020ff2c5\",\"description\":\"Velit voluptate adipisicing elit occaecat cillum.\"},{\"id\":\"54e1a1ce9a34664528892573\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/f7c494fb-4f81-4e87-bdda-3cf93b649a6c\",\"description\":\"Ad qui et enim est ipsum sint ad aliqua reprehenderit.\"}],\"greeting\":\"Hello, Bean! You have 8 unread messages.\",\"favorite_fruit\":\"strawberry\"},{\"_id\":\"54e1a1ce6a256de13ed7ebe5\",\"index\":53,\"guid\":\"237a42b7-8216-4973-bead-5d945e033ae4\",\"is_active\":true,\"balance\":\"$2,070.56\",\"picture\":\"http://placehold.it/32x32\",\"age\":27,\"eye_color\":\"brown\",\"name\":{\"first\":\"Huffman\",\"last\":\"Grimes\"},\"company\":\"ENJOLA\",\"email\":\"huffman.grimes@enjola.me\",\"phone\":\"+1 (842) 551-2029\",\"address\":\"284 Kent Avenue, Brutus, Mississippi, 7691\",\"about\":\"Enim proident adipisicing anim aute ex elit ut Lorem aliqua incididunt qui. Irure enim anim labore aute sit. Excepteur in cupidatat elit do laboris cupidatat exercitation ad excepteur duis aute consequat. Labore sit sit excepteur est dolor incididunt non reprehenderit sunt tempor. Laborum tempor amet est minim. Anim aliqua incididunt id cillum reprehenderit magna ut ex enim magna velit et. Laboris in proident ex deserunt.\\r\\n\",\"registered\":\"Wednesday, September 24, 2014 3:31 PM\",\"latitude\":2.886137,\"longitude\":163.799774,\"tags\":[\"ea\",\"Lorem\",\"commodo\",\"reprehenderit\",\"commodo\",\"ullamco\",\"esse\"],\"range\":[0,1,2,3,4,5,6,7,8,9],\"friends\":[{\"id\":0,\"name\":\"Ivy Green\"},{\"id\":1,\"name\":\"Snow Christensen\"},{\"id\":2,\"name\":\"Maritza Brock\"}],\"images\":[{\"id\":\"54e1a1ce506731e5aee8ec32\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/3f4bf68b-4fe4-4cca-95df-10759fc25c0b\",\"description\":\"Id qui velit magna in sunt.\"},{\"id\":\"54e1a1ce8fc7a65ae47b5143\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/fe92b35e-6d11-4d35-b969-cb5808e79984\",\"description\":\"Velit sint elit occaecat aliquip occaecat amet Lorem tempor.\"},{\"id\":\"54e1a1ce4d78af05cecbf151\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/4eb1ba3f-e9bf-49d8-b955-b66a8b0efb4d\",\"description\":\"Adipisicing esse exercitation aute dolor deserunt dolore et adipisicing.\"},{\"id\":\"54e1a1cea59495d7a0aee767\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/61d2e180-01bf-4a04-af59-b98498ee5ab4\",\"description\":\"Adipisicing minim irure dolore pariatur voluptate laboris ipsum.\"},{\"id\":\"54e1a1ce67480c60a007718e\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/d2a99ab0-1949-4026-bb2f-439985067486\",\"description\":\"Dolor aliqua adipisicing eiusmod dolore exercitation pariatur duis laborum.\"},{\"id\":\"54e1a1ce42fac2830bc58442\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/12e6dc00-7b72-42e8-a569-70a3e86e6079\",\"description\":\"Incididunt excepteur in nostrud ea exercitation.\"},{\"id\":\"54e1a1ce9151b5cbd252f1ec\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/2e6c8cda-1773-443f-b4a0-37f2fff8a9c2\",\"description\":\"Incididunt esse adipisicing incididunt nulla cillum cillum.\"},{\"id\":\"54e1a1ce938195e658f2dd87\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/02b634ad-a2bc-4423-9642-bae47872b97c\",\"description\":\"Duis in culpa mollit non consequat labore sit mollit aute.\"},{\"id\":\"54e1a1ce0dbce2b4f86bf8b9\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/fe4c5917-a865-4c25-b985-bf8e8bddcc7b\",\"description\":\"Duis cillum veniam fugiat sint eiusmod fugiat cupidatat fugiat qui.\"},{\"id\":\"54e1a1ced75f009dda4822d9\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/40e4594f-c554-49a2-bbc6-2f85e44e211a\",\"description\":\"Ullamco nostrud in excepteur velit ea cupidatat aute ea ipsum.\"},{\"id\":\"54e1a1ce88c6ba1cbd83e651\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/b5e2f4be-1f1f-4c55-8051-28c93312c599\",\"description\":\"Minim eu aliqua voluptate laboris est aliqua commodo pariatur ipsum sit duis eiusmod et.\"},{\"id\":\"54e1a1cea444c7ccd01c47c3\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/04293d49-aeeb-4010-963e-74ccafec61b1\",\"description\":\"Pariatur mollit eiusmod minim in elit enim ad.\"},{\"id\":\"54e1a1ce4dc2b67933790d72\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/16e1d7db-872b-4856-abc2-61aeb8b21ab1\",\"description\":\"Magna anim duis dolor do esse proident est eu ea pariatur ipsum eu aliquip excepteur.\"}],\"greeting\":\"Hello, Huffman! You have 10 unread messages.\",\"favorite_fruit\":\"apple\"},{\"_id\":\"54e1a1ce23478f89bb6afa5d\",\"index\":54,\"guid\":\"2b77315b-6d96-4376-8fcd-fd7bcee07a81\",\"is_active\":true,\"balance\":\"$2,466.77\",\"picture\":\"http://placehold.it/32x32\",\"age\":21,\"eye_color\":\"blue\",\"name\":{\"first\":\"Antoinette\",\"last\":\"Mcgowan\"},\"company\":\"SKYPLEX\",\"email\":\"antoinette.mcgowan@skyplex.com\",\"phone\":\"+1 (900) 499-3179\",\"address\":\"394 Cornelia Street, Corinne, South Carolina, 6280\",\"about\":\"Aliqua in pariatur voluptate cupidatat magna anim ut. Nulla in id laboris commodo commodo ex aute proident labore dolor. Magna do tempor anim id elit. Aliqua ullamco sit aliquip nisi ea ex. Est esse id id magna elit. Reprehenderit officia amet consectetur incididunt in ut Lorem. Deserunt et proident esse ut.\\r\\n\",\"registered\":\"Saturday, January 25, 2014 4:32 PM\",\"latitude\":42.584156,\"longitude\":69.351138,\"tags\":[\"sint\",\"laboris\",\"Lorem\",\"deserunt\",\"sit\",\"elit\",\"dolore\"],\"range\":[0,1,2,3,4,5,6,7,8,9],\"friends\":[{\"id\":0,\"name\":\"Bennett Noel\"},{\"id\":1,\"name\":\"Kristy Harris\"},{\"id\":2,\"name\":\"Rena Gould\"}],\"images\":[{\"id\":\"54e1a1ce4e023766fcad8495\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/d039eaf2-a24f-4feb-a086-1ad23bd00cc0\",\"description\":\"Ullamco aliqua culpa adipisicing velit proident ipsum ullamco ut occaecat.\"},{\"id\":\"54e1a1ce12077226494d7439\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/547f3eb2-cea1-47b3-8048-ab33978ad8fc\",\"description\":\"Reprehenderit minim veniam nisi in aute.\"}],\"greeting\":\"Hello, Antoinette! You have 6 unread messages.\",\"favorite_fruit\":\"apple\"},{\"_id\":\"54e1a1ceafb84bca64f3e88c\",\"index\":55,\"guid\":\"e7f3a3ac-461d-4a27-bcd8-91a2077da383\",\"is_active\":true,\"balance\":\"$2,704.71\",\"picture\":\"http://placehold.it/32x32\",\"age\":39,\"eye_color\":\"blue\",\"name\":{\"first\":\"Daisy\",\"last\":\"Mcclure\"},\"company\":\"MANGLO\",\"email\":\"daisy.mcclure@manglo.biz\",\"phone\":\"+1 (848) 567-3660\",\"address\":\"429 Ferris Street, Hollins, Federated States Of Micronesia, 7828\",\"about\":\"Commodo excepteur adipisicing voluptate commodo et. Nostrud labore culpa laboris proident proident dolor. Cillum irure do magna qui tempor est. Anim pariatur est ullamco occaecat ut in excepteur mollit non ad. Eiusmod non labore esse tempor non consectetur consectetur ullamco velit esse reprehenderit consectetur anim. Ad proident culpa dolor quis aliqua anim tempor.\\r\\n\",\"registered\":\"Saturday, June 21, 2014 4:37 AM\",\"latitude\":68.190288,\"longitude\":60.549138,\"tags\":[\"velit\",\"dolor\",\"nisi\",\"in\",\"id\",\"tempor\",\"duis\"],\"range\":[0,1,2,3,4,5,6,7,8,9],\"friends\":[{\"id\":0,\"name\":\"Sandy Trevino\"},{\"id\":1,\"name\":\"Dyer Cooley\"},{\"id\":2,\"name\":\"Frye Key\"}],\"images\":[{\"id\":\"54e1a1ce14015c6ffc20d287\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/18a3cb8d-5366-4881-aad2-8af1b30f1a7b\",\"description\":\"Culpa mollit pariatur commodo amet in.\"},{\"id\":\"54e1a1ce7c81519954fc8404\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/88e01d13-913c-449b-90b0-44c516007213\",\"description\":\"Velit nostrud nulla incididunt ex aute laborum ea irure.\"}],\"greeting\":\"Hello, Daisy! You have 6 unread messages.\",\"favorite_fruit\":\"strawberry\"},{\"_id\":\"54e1a1cef3874da287186e89\",\"index\":56,\"guid\":\"dfc33191-964a-4fdf-a68f-31fff8fa0015\",\"is_active\":false,\"balance\":\"$2,205.09\",\"picture\":\"http://placehold.it/32x32\",\"age\":22,\"eye_color\":\"brown\",\"name\":{\"first\":\"Essie\",\"last\":\"Carter\"},\"company\":\"DEVILTOE\",\"email\":\"essie.carter@deviltoe.io\",\"phone\":\"+1 (802) 404-3556\",\"address\":\"789 Gates Avenue, Ballico, Louisiana, 320\",\"about\":\"Ea officia amet pariatur et ullamco esse. Elit proident esse reprehenderit ipsum cupidatat aute tempor enim et et pariatur quis. Occaecat exercitation voluptate sint do laborum duis magna officia ut dolor non nostrud anim. Ullamco tempor pariatur et consectetur nisi esse ullamco. Enim reprehenderit do ea nulla magna ea est sit aliqua proident veniam pariatur.\\r\\n\",\"registered\":\"Monday, September 22, 2014 12:54 AM\",\"latitude\":-89.525054,\"longitude\":103.7377,\"tags\":[\"commodo\",\"non\",\"quis\",\"dolor\",\"aute\",\"pariatur\",\"sint\"],\"range\":[0,1,2,3,4,5,6,7,8,9],\"friends\":[{\"id\":0,\"name\":\"Kaitlin Dale\"},{\"id\":1,\"name\":\"Therese Patterson\"},{\"id\":2,\"name\":\"Jolene Weiss\"}],\"images\":[{\"id\":\"54e1a1ce52e77937bc10e963\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/dd761222-641f-436b-a8fb-4f23da6bb2e0\",\"description\":\"Culpa irure fugiat irure dolore esse reprehenderit anim mollit aliquip est cillum culpa.\"},{\"id\":\"54e1a1cef2ec773c79b7a885\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/5039d1e0-8210-4898-8882-d77fd1ad3d77\",\"description\":\"Reprehenderit Lorem deserunt ex deserunt anim veniam ullamco Lorem commodo id mollit minim ut commodo.\"},{\"id\":\"54e1a1cee896ebcdbb6b7065\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/0a7d68ed-009b-4d97-8452-33ad2ec0376e\",\"description\":\"Ex duis sint incididunt pariatur ut laboris id nulla consectetur laboris amet duis.\"},{\"id\":\"54e1a1ce7d85ed346039e6e2\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/17897eb5-51c2-430f-b14f-41afccb1ca8e\",\"description\":\"Labore mollit eu ut mollit aliquip incididunt ea laborum minim magna quis eu sint velit.\"},{\"id\":\"54e1a1ce456257d28a3a6a9b\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/6f2c8aa8-47b0-4d22-9209-3e13d913c123\",\"description\":\"Elit adipisicing ea consequat mollit culpa duis pariatur irure mollit.\"},{\"id\":\"54e1a1ce6be40d28e94396ff\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/7b1fceff-2223-4583-879a-17f39e55c219\",\"description\":\"Non veniam deserunt labore duis amet ipsum laboris proident dolor reprehenderit eiusmod commodo.\"},{\"id\":\"54e1a1ce4ca2a4c298dc1b33\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/08bca02f-efa4-4d59-9e70-6fdf95f5f09c\",\"description\":\"Adipisicing sit deserunt voluptate laboris non ad exercitation enim magna deserunt labore ut sit adipisicing.\"},{\"id\":\"54e1a1ce554d4d340e173feb\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/385e30c8-bce2-41d2-9cbf-05f92742f5bd\",\"description\":\"Labore anim labore minim id.\"}],\"greeting\":\"Hello, Essie! You have 5 unread messages.\",\"favorite_fruit\":\"banana\"},{\"_id\":\"54e1a1ce219a23cf6def4dde\",\"index\":57,\"guid\":\"fcdc6ef3-fd9a-495d-95d1-2281d5083ecd\",\"is_active\":false,\"balance\":\"$1,527.72\",\"picture\":\"http://placehold.it/32x32\",\"age\":32,\"eye_color\":\"green\",\"name\":{\"first\":\"Patrick\",\"last\":\"Mcconnell\"},\"company\":\"KANGLE\",\"email\":\"patrick.mcconnell@kangle.name\",\"phone\":\"+1 (961) 523-2879\",\"address\":\"271 Berriman Street, Ebro, Hawaii, 8379\",\"about\":\"Laborum labore aliquip aliqua ea do. Magna consectetur commodo reprehenderit elit velit deserunt velit Lorem non velit nulla sit exercitation. Labore excepteur esse mollit consequat aliqua. Velit do labore eiusmod dolore ea. Ullamco sit anim in reprehenderit tempor. Amet velit proident esse nostrud nostrud deserunt elit consequat irure. Dolore cillum aute reprehenderit incididunt ad ad anim aute deserunt magna quis ea.\\r\\n\",\"registered\":\"Monday, November 24, 2014 3:14 AM\",\"latitude\":61.411044,\"longitude\":149.564082,\"tags\":[\"consequat\",\"veniam\",\"consectetur\",\"consectetur\",\"dolore\",\"laboris\",\"amet\"],\"range\":[0,1,2,3,4,5,6,7,8,9],\"friends\":[{\"id\":0,\"name\":\"Kaufman Saunders\"},{\"id\":1,\"name\":\"Howard Ware\"},{\"id\":2,\"name\":\"Leanna Bell\"}],\"images\":[{\"id\":\"54e1a1cebedbdff12efd2476\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/050a1e6d-970f-41ad-8e5c-9b902c8f6b77\",\"description\":\"Id enim eiusmod consectetur consectetur exercitation dolore magna ea eu voluptate.\"},{\"id\":\"54e1a1ce92842417ee214f46\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/2df34549-30d4-4101-b130-28292f79deb7\",\"description\":\"Non mollit quis deserunt est id culpa elit ipsum sit laborum aute exercitation.\"},{\"id\":\"54e1a1ce0b72bc35c621f2fe\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/eae0ba0e-48f1-4134-b6b3-e5eea363f4b4\",\"description\":\"Consectetur elit dolore culpa quis occaecat ex voluptate cupidatat ex.\"},{\"id\":\"54e1a1ce9b5c3c8036191db4\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/0c960638-082b-4941-a269-f209bc15a190\",\"description\":\"In quis ipsum aliquip sint eiusmod quis et in irure.\"},{\"id\":\"54e1a1ce5ff94f87dc80591a\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/4ebb8fb5-2ea9-477e-b995-e38b3796be53\",\"description\":\"Voluptate aliqua magna consectetur anim veniam.\"},{\"id\":\"54e1a1ceb843c2025696dc2b\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/cc888b5a-14e8-4d37-b3b0-96881d2d858c\",\"description\":\"Proident ea nisi nostrud irure enim consequat elit mollit labore nostrud qui.\"},{\"id\":\"54e1a1cedb45588f9c29a6dc\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/b8fdb1d9-bc59-455b-917c-44cec195e0cf\",\"description\":\"Eu et ex proident dolor magna aliqua eiusmod voluptate culpa adipisicing.\"},{\"id\":\"54e1a1cecfd6d7fde3510a39\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/22603d80-2850-4db5-8ed7-057d4122d095\",\"description\":\"Et aliqua exercitation dolor officia nulla do occaecat veniam officia.\"},{\"id\":\"54e1a1ced8132db617e23794\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/15cde252-ec6a-4d27-b34c-a73dd0d95912\",\"description\":\"Id incididunt aliquip ullamco irure proident proident magna culpa voluptate do aliqua exercitation id.\"},{\"id\":\"54e1a1ce76117bb0cfa56e4e\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/c938dd7f-97c2-487d-b276-8ea58eee1df5\",\"description\":\"Officia non ex fugiat exercitation enim deserunt.\"},{\"id\":\"54e1a1ce1130c69c662047c9\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/ebb5acd3-7502-4fe0-b37d-e926727a3d2e\",\"description\":\"Nisi dolore exercitation veniam do ex et amet.\"}],\"greeting\":\"Hello, Patrick! You have 7 unread messages.\",\"favorite_fruit\":\"banana\"},{\"_id\":\"54e1a1cee67760808d7f6612\",\"index\":58,\"guid\":\"3408cc41-2126-4139-b3a4-357dff9be409\",\"is_active\":false,\"balance\":\"$1,809.26\",\"picture\":\"http://placehold.it/32x32\",\"age\":40,\"eye_color\":\"blue\",\"name\":{\"first\":\"Greer\",\"last\":\"Mcpherson\"},\"company\":\"ZOLARITY\",\"email\":\"greer.mcpherson@zolarity.ca\",\"phone\":\"+1 (945) 500-3028\",\"address\":\"192 Danforth Street, Reno, Arkansas, 1432\",\"about\":\"Fugiat nostrud sint commodo consectetur irure in. Reprehenderit velit ut do ut incididunt et eiusmod in fugiat culpa. Ea elit eiusmod id ut enim aliquip ex ullamco et labore.\\r\\n\",\"registered\":\"Thursday, April 10, 2014 9:12 PM\",\"latitude\":-87.642886,\"longitude\":-147.781649,\"tags\":[\"ipsum\",\"laboris\",\"in\",\"in\",\"qui\",\"eiusmod\",\"commodo\"],\"range\":[0,1,2,3,4,5,6,7,8,9],\"friends\":[{\"id\":0,\"name\":\"Mays Payne\"},{\"id\":1,\"name\":\"Camille Rodgers\"},{\"id\":2,\"name\":\"Gay Schmidt\"}],\"images\":[{\"id\":\"54e1a1ce3515b2ed0cb04cfa\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/7c75e940-ee55-4d2f-a737-e9b5d524decc\",\"description\":\"Ullamco eu tempor nulla cupidatat dolor veniam quis nisi.\"},{\"id\":\"54e1a1cee7e41ac5015f162b\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/e9d179cb-a1df-4b2c-a2c2-738d8ebe63d6\",\"description\":\"Laboris nulla reprehenderit ad officia in non nisi laborum amet.\"},{\"id\":\"54e1a1ce4964b4f645fbbb44\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/71745ded-4a23-45a5-aade-341cc010d6d0\",\"description\":\"Ex aute veniam voluptate proident eiusmod est aliquip deserunt ad et ipsum qui id.\"},{\"id\":\"54e1a1cec3c0a95e823793ab\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/6f29573a-c660-4a3d-aae3-4b9aa24c1282\",\"description\":\"Deserunt quis exercitation consequat dolore sint ipsum ea in.\"},{\"id\":\"54e1a1ce28d4398cd913301a\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/521b1daa-765f-4815-b315-8bcf2264c50b\",\"description\":\"Cillum ea aute irure irure.\"}],\"greeting\":\"Hello, Greer! You have 8 unread messages.\",\"favorite_fruit\":\"strawberry\"},{\"_id\":\"54e1a1cea9a4195f5b787249\",\"index\":59,\"guid\":\"d877b73e-f6dd-4eba-9661-f45a1fad883b\",\"is_active\":true,\"balance\":\"$1,101.04\",\"picture\":\"http://placehold.it/32x32\",\"age\":33,\"eye_color\":\"blue\",\"name\":{\"first\":\"Kirby\",\"last\":\"Contreras\"},\"company\":\"GLUID\",\"email\":\"kirby.contreras@gluid.net\",\"phone\":\"+1 (869) 514-3420\",\"address\":\"524 Grace Court, Allentown, Illinois, 7418\",\"about\":\"Laboris cillum voluptate velit mollit officia. Irure reprehenderit aliquip fugiat ad dolor aute nulla aute anim excepteur do. Irure excepteur velit quis veniam pariatur commodo ea. Et ullamco elit mollit velit voluptate laborum. Eiusmod ullamco nulla nostrud aute pariatur nisi laborum sit magna nostrud reprehenderit culpa proident. In ad enim tempor anim ut dolor qui eu.\\r\\n\",\"registered\":\"Monday, September 1, 2014 11:38 AM\",\"latitude\":32.562235,\"longitude\":-56.519713,\"tags\":[\"cupidatat\",\"duis\",\"ullamco\",\"quis\",\"laboris\",\"ullamco\",\"ullamco\"],\"range\":[0,1,2,3,4,5,6,7,8,9],\"friends\":[{\"id\":0,\"name\":\"Bolton Todd\"},{\"id\":1,\"name\":\"Estelle Woods\"},{\"id\":2,\"name\":\"Harmon Byrd\"}],\"images\":[{\"id\":\"54e1a1cea03405b7e1f0fc8f\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/3a399171-318d-4820-89e4-78a48d867b6a\",\"description\":\"Sint culpa sit voluptate laboris consequat enim Lorem sint velit qui exercitation.\"},{\"id\":\"54e1a1ced0c4af00fe5bd410\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/57c8703d-0f66-43d6-9afc-5dde312600d9\",\"description\":\"Mollit ut labore proident excepteur cupidatat consectetur sit id enim aute excepteur nulla fugiat ad.\"},{\"id\":\"54e1a1ceca066c151bbe1779\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/94c24acf-8b6d-44ef-8d3a-70c061f2bc42\",\"description\":\"Esse enim veniam magna non aliqua deserunt ullamco est velit nostrud veniam ex eu.\"},{\"id\":\"54e1a1ce090e90a7ab1a3cc7\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/a48114c3-2f35-4e01-a461-6795f9a6ded6\",\"description\":\"Ex ad est consectetur voluptate.\"},{\"id\":\"54e1a1ceef5a4af2f8d5b2cd\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/9b1c91f5-4a6d-4d65-b69f-3fd725b18c96\",\"description\":\"Ad incididunt qui do aliquip exercitation do.\"},{\"id\":\"54e1a1ce1f6c810a82251898\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/5b7de814-5d4b-4ee4-a3b2-941a3f922c7f\",\"description\":\"Labore esse consequat Lorem laborum tempor nostrud ut sunt nisi occaecat Lorem.\"},{\"id\":\"54e1a1ce0b0a5bf33b4cc6f5\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/16d437dc-b606-4d2b-80f8-79e3450a9699\",\"description\":\"Excepteur sunt do labore eiusmod.\"},{\"id\":\"54e1a1ce14c59ff1c475ee02\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/16caf571-5f33-4e52-be24-6f05129dc925\",\"description\":\"In adipisicing ullamco do eiusmod.\"},{\"id\":\"54e1a1cecb04df6e7e883677\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/b84d33b5-7fe2-4417-8368-3f9409788d23\",\"description\":\"Id sit Lorem do adipisicing proident sit officia labore et sunt consectetur culpa culpa.\"},{\"id\":\"54e1a1ce79bf8972763f7154\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/ef31ee2d-7fd4-4ded-9e21-549cd30271cb\",\"description\":\"Reprehenderit dolor excepteur ipsum laborum laborum esse mollit minim Lorem pariatur Lorem.\"},{\"id\":\"54e1a1ce8f61fb44ed852587\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/1d712d47-acf5-49b3-aa28-6433afffbb05\",\"description\":\"Velit minim do ad tempor ex ut anim est ut.\"},{\"id\":\"54e1a1ce850859bdec72d4ad\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/f5a3803a-8d97-417e-ad28-1be3a3e89820\",\"description\":\"Magna aliqua culpa fugiat ipsum reprehenderit nisi magna veniam Lorem excepteur amet aute cupidatat cupidatat.\"}],\"greeting\":\"Hello, Kirby! You have 5 unread messages.\",\"favorite_fruit\":\"apple\"}],\"status\":\"success\",\"is_real_json\":false}"
  },
  {
    "path": "BenchmarkDemo/app/src/main/assets/mediumsample.json",
    "content": "{\"users\":[{\"_id\":\"54e1a204a9fdb3ecc2492728\",\"index\":0,\"guid\":\"fc13e42c-1285-435c-beea-f978bdeb808e\",\"is_active\":false,\"balance\":\"$2,266.76\",\"picture\":\"http://placehold.it/32x32\",\"age\":40,\"eye_color\":\"green\",\"name\":{\"first\":\"Elise\",\"last\":\"Lopez\"},\"company\":\"DATACATOR\",\"email\":\"elise.lopez@datacator.net\",\"phone\":\"+1 (881) 409-2092\",\"address\":\"191 Ditmars Street, Imperial, New Jersey, 6880\",\"about\":\"Incididunt esse laborum labore occaecat ea officia dolore proident consectetur elit ut exercitation. Et adipisicing id ad consectetur aute aliquip consequat fugiat cupidatat velit labore veniam. Eu consequat culpa nisi esse aute exercitation culpa et aliquip dolore aute reprehenderit irure. Magna aliquip adipisicing qui aute. Sunt aliquip excepteur exercitation occaecat. Ad veniam et reprehenderit culpa tempor culpa Lorem proident aliquip deserunt consectetur. Pariatur est dolore esse aliquip tempor quis culpa eiusmod consequat laborum minim nisi.\\r\\n\",\"registered\":\"Wednesday, April 23, 2014 3:46 PM\",\"latitude\":0.561726,\"longitude\":-161.91028,\"tags\":[\"adipisicing\",\"officia\",\"excepteur\",\"esse\",\"nisi\",\"mollit\",\"eu\"],\"range\":[0,1,2,3,4,5,6,7,8,9],\"friends\":[{\"id\":0,\"name\":\"Burt Norman\"},{\"id\":1,\"name\":\"Marcella Bartlett\"},{\"id\":2,\"name\":\"Ebony Mcbride\"}],\"images\":[{\"id\":\"54e1a2040e8cff91ca7d4a5f\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/efb9dbd8-77d1-4cfe-8faa-7b6903abddd3\",\"description\":\"Excepteur labore eu pariatur nulla sunt laboris laboris ad adipisicing aute dolor sit occaecat enim.\"},{\"id\":\"54e1a204d0519d912d762e4c\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/c90ee399-224f-42c1-a9bc-d61ffa0e0d1e\",\"description\":\"Occaecat cillum cillum aliquip incididunt in velit nulla nulla minim.\"},{\"id\":\"54e1a20466caebfebf189778\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/df63765c-f895-4786-bbdd-afd0b0e0280d\",\"description\":\"Id id et elit ad commodo ipsum consectetur aliqua ea exercitation ex cillum.\"},{\"id\":\"54e1a204ef1bee1b78e4018d\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/8cc522b6-32d2-47b3-901a-41a0255b1f88\",\"description\":\"Esse ullamco et voluptate et incididunt dolor mollit fugiat id ipsum.\"},{\"id\":\"54e1a2043feb3c2b509c9c12\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/a1822162-7a58-4484-88b8-0ecefeee8d80\",\"description\":\"Aute voluptate elit duis ipsum est exercitation esse ea dolore qui aliqua ut consectetur.\"}],\"greeting\":\"Hello, Elise! You have 7 unread messages.\",\"favorite_fruit\":\"strawberry\"},{\"_id\":\"54e1a2041d041012d109e0c2\",\"index\":1,\"guid\":\"54986b4b-1ea0-4e05-98d8-4c874b4d06dd\",\"is_active\":true,\"balance\":\"$3,668.07\",\"picture\":\"http://placehold.it/32x32\",\"age\":26,\"eye_color\":\"blue\",\"name\":{\"first\":\"Lois\",\"last\":\"Griffin\"},\"company\":\"SOLGAN\",\"email\":\"lois.griffin@solgan.info\",\"phone\":\"+1 (899) 543-3181\",\"address\":\"539 Willoughby Avenue, Brady, Rhode Island, 8212\",\"about\":\"Minim non et et id dolore anim ea in nisi excepteur cillum qui Lorem. Tempor dolore voluptate voluptate qui exercitation proident. Mollit fugiat veniam dolore sit aliquip eu aute occaecat proident pariatur aliquip do id.\\r\\n\",\"registered\":\"Thursday, March 6, 2014 7:30 PM\",\"latitude\":-48.87311,\"longitude\":-16.098083,\"tags\":[\"aute\",\"incididunt\",\"veniam\",\"aute\",\"reprehenderit\",\"incididunt\",\"excepteur\"],\"range\":[0,1,2,3,4,5,6,7,8,9],\"friends\":[{\"id\":0,\"name\":\"Tamara Daniel\"},{\"id\":1,\"name\":\"Richards Andrews\"},{\"id\":2,\"name\":\"Tate Sloan\"}],\"images\":[{\"id\":\"54e1a2044ecac58ecb25bb41\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/b28b839b-37c7-46cb-b79b-227320cd6e09\",\"description\":\"Ullamco reprehenderit irure occaecat nulla nostrud.\"},{\"id\":\"54e1a204d863eb67fb966abe\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/8af148cc-556f-4257-9198-cdec3fc5eeb1\",\"description\":\"Est amet reprehenderit sunt aute pariatur excepteur nisi cillum ipsum velit ea magna tempor ipsum.\"},{\"id\":\"54e1a2046dde891b23ef65df\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/b5e2d293-7359-425c-a0f4-c03d0aa80f47\",\"description\":\"Mollit tempor nulla eu pariatur ipsum ipsum do mollit aliquip exercitation ex et.\"},{\"id\":\"54e1a204d66089670f6621be\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/73bdd75e-b320-4177-8978-d6c2ba686515\",\"description\":\"Id proident aliqua incididunt laborum velit officia.\"},{\"id\":\"54e1a204f2160ae9562f4ce6\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/30e33458-4e5b-4afb-90aa-011652bd88ff\",\"description\":\"Veniam exercitation voluptate enim pariatur ipsum exercitation sit consectetur sit esse aute anim.\"},{\"id\":\"54e1a204ed9db05e269f5090\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/10148dcf-11df-4cea-8ebc-6e796161c284\",\"description\":\"Nostrud laborum exercitation cillum Lorem eu consequat in Lorem.\"},{\"id\":\"54e1a204f0ffc804f3ccb8cf\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/4c5bf78a-d453-4d2f-a4a1-f21a0c7879fb\",\"description\":\"Veniam commodo do est reprehenderit.\"},{\"id\":\"54e1a2046b3d3ee96537c00b\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/d52833f6-81c7-426f-833f-4f3d99309a69\",\"description\":\"Reprehenderit pariatur consectetur Lorem ex esse ea proident veniam nostrud nulla fugiat sit exercitation.\"},{\"id\":\"54e1a204141be794f5e756a4\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/bf658684-07f5-442b-8067-8851c44b499e\",\"description\":\"Consequat do ex eiusmod voluptate proident labore ea.\"},{\"id\":\"54e1a2042b9dc014673002b3\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/a887f516-9384-4e5a-b956-e250afd68885\",\"description\":\"Pariatur reprehenderit incididunt consequat officia cupidatat consequat.\"}],\"greeting\":\"Hello, Lois! You have 10 unread messages.\",\"favorite_fruit\":\"apple\"},{\"_id\":\"54e1a2040e09e4cbf19615a8\",\"index\":2,\"guid\":\"6f9d5496-5f5c-4105-ab20-6f858fb6bdf1\",\"is_active\":false,\"balance\":\"$3,604.93\",\"picture\":\"http://placehold.it/32x32\",\"age\":33,\"eye_color\":\"brown\",\"name\":{\"first\":\"Arnold\",\"last\":\"Avery\"},\"company\":\"ZBOO\",\"email\":\"arnold.avery@zboo.org\",\"phone\":\"+1 (868) 584-2085\",\"address\":\"169 Laurel Avenue, Marshall, Vermont, 7640\",\"about\":\"Fugiat non veniam minim cupidatat sunt culpa. Mollit amet non ad cillum laborum veniam in eiusmod. Sit non ad consequat labore. Laborum anim nostrud id aute. Do sunt sint reprehenderit ex anim minim dolore aliqua veniam.\\r\\n\",\"registered\":\"Thursday, October 30, 2014 9:47 AM\",\"latitude\":26.089997,\"longitude\":74.588284,\"tags\":[\"non\",\"veniam\",\"laboris\",\"dolor\",\"fugiat\",\"velit\",\"nulla\"],\"range\":[0,1,2,3,4,5,6,7,8,9],\"friends\":[{\"id\":0,\"name\":\"Valentine Klein\"},{\"id\":1,\"name\":\"Sheree Dodson\"},{\"id\":2,\"name\":\"Autumn Wiggins\"}],\"images\":[{\"id\":\"54e1a2045bf2d23879956c11\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/ddffecf2-ccdf-4bd0-bc1e-84a664b61e70\",\"description\":\"Velit exercitation sit ullamco ea veniam aute eu ipsum.\"},{\"id\":\"54e1a204972f07fdb48c4729\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/d1c06e32-02bf-4f94-9c21-ce081d34cfd0\",\"description\":\"Esse qui qui sint mollit deserunt ex nostrud velit irure fugiat non esse voluptate.\"},{\"id\":\"54e1a2040ce5771e5b0e5137\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/e1496482-a271-4b4e-8ea8-a1f1d183b3b6\",\"description\":\"Duis consequat incididunt officia incididunt.\"},{\"id\":\"54e1a204731db2668c4ef3c0\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/6d876e66-c30e-4635-931e-fe9612909a2a\",\"description\":\"Labore commodo dolor officia amet Lorem nulla commodo anim dolor aliqua sit adipisicing est.\"}],\"greeting\":\"Hello, Arnold! You have 6 unread messages.\",\"favorite_fruit\":\"apple\"},{\"_id\":\"54e1a20464becc31b70cafb5\",\"index\":3,\"guid\":\"c0965c65-0cfe-471c-900c-3e4a1b9f9048\",\"is_active\":false,\"balance\":\"$3,820.30\",\"picture\":\"http://placehold.it/32x32\",\"age\":21,\"eye_color\":\"blue\",\"name\":{\"first\":\"Morris\",\"last\":\"Kinney\"},\"company\":\"XYQAG\",\"email\":\"morris.kinney@xyqag.ca\",\"phone\":\"+1 (861) 556-3834\",\"address\":\"782 Lafayette Avenue, Caledonia, Delaware, 7030\",\"about\":\"In nisi in eu do magna nostrud labore esse qui deserunt. Aliqua id officia proident cupidatat sint sint sit voluptate eiusmod consectetur laboris. Occaecat ut consectetur elit in non quis Lorem mollit officia. Aute occaecat occaecat elit nisi mollit aliquip fugiat culpa laborum aute. Ullamco aliquip eiusmod laborum elit aute dolor officia eiusmod culpa. Deserunt do consequat sit cillum eiusmod anim. Qui ea minim elit amet anim culpa occaecat ullamco ea pariatur.\\r\\n\",\"registered\":\"Thursday, January 2, 2014 7:26 AM\",\"latitude\":27.771269,\"longitude\":22.154834,\"tags\":[\"officia\",\"enim\",\"sunt\",\"aliqua\",\"qui\",\"magna\",\"minim\"],\"range\":[0,1,2,3,4,5,6,7,8,9],\"friends\":[{\"id\":0,\"name\":\"Marylou Gonzales\"},{\"id\":1,\"name\":\"Cherie Berry\"},{\"id\":2,\"name\":\"Randolph Donovan\"}],\"images\":[{\"id\":\"54e1a2049b68b72b659adc64\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/39f521ed-ad0f-4b3f-b6f1-137b56c07c87\",\"description\":\"Do nisi in tempor tempor ea mollit do cillum laborum culpa proident.\"},{\"id\":\"54e1a204447447828085d5b4\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/7f96afb0-2bf8-465f-a7b6-57c5d04387ae\",\"description\":\"Esse incididunt fugiat velit cupidatat esse mollit.\"},{\"id\":\"54e1a204d8ac147cffb67c2e\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/9dd72b9f-0931-4bb1-8896-02ea2f3f6bdf\",\"description\":\"Sit aliqua pariatur et cillum.\"},{\"id\":\"54e1a2049fc91ac0d2042103\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/410d469c-d824-47ca-a2c0-7445ca088bff\",\"description\":\"Dolor fugiat laboris ea pariatur ut ea quis nisi occaecat incididunt.\"},{\"id\":\"54e1a20447300e29cc0d3dc4\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/82cd371b-e83f-4fff-afe9-5ce88dfa05fc\",\"description\":\"Proident dolor amet amet ut consectetur proident sunt proident occaecat in elit irure anim.\"},{\"id\":\"54e1a2045f5b719bae06a546\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/898d969b-cfbf-4fb8-bfb8-c153fc7794df\",\"description\":\"Est tempor eu culpa mollit in voluptate consequat qui ad ad est.\"},{\"id\":\"54e1a2045e5739b92dbfd4a9\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/c4068c56-9559-4c03-92e9-d1f15eee9776\",\"description\":\"Cupidatat ut et proident mollit ea deserunt.\"},{\"id\":\"54e1a2049a180cf3cd884fb0\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/d8b926b1-dbc0-45b3-bad1-2ad499139b67\",\"description\":\"Veniam mollit Lorem id ad.\"},{\"id\":\"54e1a2049b148f7763db6ef0\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/ea3009b8-4435-4709-bf52-30bfa384d4fe\",\"description\":\"Nostrud culpa enim esse eu laboris sunt.\"},{\"id\":\"54e1a204027b2e373459665a\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/435efabb-2ca0-4f33-a02e-0062c96fa304\",\"description\":\"Reprehenderit exercitation sint commodo voluptate magna ea aute dolor tempor dolore elit sint duis.\"},{\"id\":\"54e1a204bec9106702efe591\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/0d873bb6-2b52-498a-a2b8-32ff8cd1da48\",\"description\":\"Veniam sit elit reprehenderit adipisicing.\"},{\"id\":\"54e1a204a7af266f9fa11e3e\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/9f3ee0a0-6940-42c8-a323-e282b104f4af\",\"description\":\"Nisi id cupidatat reprehenderit voluptate ipsum consequat dolor eiusmod cillum voluptate commodo qui anim id.\"}],\"greeting\":\"Hello, Morris! You have 5 unread messages.\",\"favorite_fruit\":\"banana\"},{\"_id\":\"54e1a2046cd145888dee19ac\",\"index\":4,\"guid\":\"993d48ab-d2e7-46ed-ba4f-ccaa8162e803\",\"is_active\":true,\"balance\":\"$2,208.24\",\"picture\":\"http://placehold.it/32x32\",\"age\":35,\"eye_color\":\"green\",\"name\":{\"first\":\"Mcneil\",\"last\":\"Boyd\"},\"company\":\"PROTODYNE\",\"email\":\"mcneil.boyd@protodyne.co.uk\",\"phone\":\"+1 (853) 502-2770\",\"address\":\"359 Bergen Street, Grahamtown, West Virginia, 5496\",\"about\":\"Quis dolore proident quis sit sunt ullamco tempor tempor dolor. Cillum voluptate proident ad est aliquip. Quis aliqua eu velit qui. Nisi ut dolore ullamco ea sit. Sint irure eiusmod excepteur aliquip elit. Labore quis est ea qui magna occaecat. Ullamco excepteur anim excepteur adipisicing ex do enim Lorem ullamco veniam sunt Lorem.\\r\\n\",\"registered\":\"Friday, May 30, 2014 12:34 PM\",\"latitude\":-23.533614,\"longitude\":-140.484897,\"tags\":[\"fugiat\",\"nisi\",\"do\",\"adipisicing\",\"consectetur\",\"excepteur\",\"incididunt\"],\"range\":[0,1,2,3,4,5,6,7,8,9],\"friends\":[{\"id\":0,\"name\":\"Robinson Delaney\"},{\"id\":1,\"name\":\"Alvarado Madden\"},{\"id\":2,\"name\":\"Harriett Bell\"}],\"images\":[{\"id\":\"54e1a2043fadc2d71d421b09\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/0a7b6fb3-b53a-4721-a4ce-fa41d4f83d02\",\"description\":\"Consectetur ex aliquip sunt cupidatat tempor excepteur dolore velit commodo laboris commodo aute.\"},{\"id\":\"54e1a204b69cd4d34ce4147e\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/a4002182-54c5-4a2d-973e-8b8428df0c40\",\"description\":\"Lorem anim ullamco id esse aute commodo commodo mollit est ipsum nisi irure ex.\"},{\"id\":\"54e1a2042b124ad18645cc09\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/32176e3f-6320-4c53-a204-7d809f4436ab\",\"description\":\"Est veniam irure nulla ut.\"},{\"id\":\"54e1a20430f7b2c0f5fad872\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/2c28c69c-6201-4417-8df1-dbfa89ee863e\",\"description\":\"Labore minim eu exercitation consequat.\"},{\"id\":\"54e1a204a69c9fa81f6e1e1e\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/4712ea55-e874-4110-a89a-e13b698eff7b\",\"description\":\"Adipisicing ipsum exercitation amet magna nostrud et ullamco exercitation in qui quis ullamco elit.\"},{\"id\":\"54e1a2041000fbe80ee66b08\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/fbf70d12-f2d5-4495-a3d6-4163d0dc3368\",\"description\":\"Pariatur cillum esse ipsum voluptate aliquip ut.\"},{\"id\":\"54e1a204ca2aaeaffa59ec47\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/fe07138b-f49e-4f7d-88f2-70b71cf92983\",\"description\":\"Reprehenderit nisi minim occaecat irure amet veniam et irure duis ea voluptate pariatur minim.\"},{\"id\":\"54e1a20475d7818c7b2afaf7\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/af36f7bb-4e65-4823-9b3d-fb65bce44a81\",\"description\":\"Culpa aliquip sint ipsum aliquip aute aute quis labore voluptate voluptate adipisicing incididunt.\"},{\"id\":\"54e1a204fe2262217cc24156\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/b956577a-0ce0-480f-acfb-5c642e7cdd1b\",\"description\":\"Magna sunt ullamco aute est tempor cillum reprehenderit officia sunt ullamco id.\"}],\"greeting\":\"Hello, Mcneil! You have 6 unread messages.\",\"favorite_fruit\":\"banana\"},{\"_id\":\"54e1a2049be46a9e27462f2f\",\"index\":5,\"guid\":\"3bfbd0ae-fde5-4467-a3cb-2c8be1b624f7\",\"is_active\":true,\"balance\":\"$1,521.07\",\"picture\":\"http://placehold.it/32x32\",\"age\":28,\"eye_color\":\"green\",\"name\":{\"first\":\"Martina\",\"last\":\"Patton\"},\"company\":\"KEGULAR\",\"email\":\"martina.patton@kegular.biz\",\"phone\":\"+1 (964) 413-2035\",\"address\":\"615 Columbia Place, Harleigh, Northern Mariana Islands, 4162\",\"about\":\"Quis commodo sunt velit nostrud. Enim ut ipsum magna esse ad occaecat aliquip. Cillum enim ipsum exercitation velit dolor tempor tempor. Ea dolor duis enim occaecat ipsum non minim tempor nostrud. Velit nisi fugiat elit in aute et culpa magna non ex Lorem. Tempor aliquip fugiat occaecat ad occaecat aliqua non sunt.\\r\\n\",\"registered\":\"Monday, January 6, 2014 11:24 AM\",\"latitude\":33.883821,\"longitude\":-148.735935,\"tags\":[\"deserunt\",\"proident\",\"ad\",\"laborum\",\"id\",\"exercitation\",\"tempor\"],\"range\":[0,1,2,3,4,5,6,7,8,9],\"friends\":[{\"id\":0,\"name\":\"Burks Barr\"},{\"id\":1,\"name\":\"Drake Long\"},{\"id\":2,\"name\":\"Mari Ochoa\"}],\"images\":[{\"id\":\"54e1a204148a95ee3dabb1c2\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/7c3804a2-ce08-44ef-976d-502df44add9d\",\"description\":\"Nisi ut ipsum anim quis excepteur aute excepteur pariatur velit sunt occaecat aute commodo proident.\"},{\"id\":\"54e1a204566e3047b98a1bc4\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/daf24602-c166-41c0-b730-f9d5c14d4d8b\",\"description\":\"Magna anim cupidatat veniam fugiat laborum.\"},{\"id\":\"54e1a204ec98a562d6c4c9a3\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/61a078d8-ea35-4486-8ecc-90fd7a957b6d\",\"description\":\"Est sint adipisicing deserunt fugiat exercitation.\"},{\"id\":\"54e1a204d130afa03bb453bf\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/252238ae-58c4-4687-9931-f1dee979f98a\",\"description\":\"Ut non sunt deserunt est dolore commodo irure non.\"},{\"id\":\"54e1a204e6b0d68678a4bb3d\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/c0b2f50c-548a-434b-ae4c-68086b42b2cf\",\"description\":\"Dolore adipisicing minim labore reprehenderit anim tempor nisi veniam anim dolor ullamco anim excepteur.\"},{\"id\":\"54e1a20461b3f020e0e8c280\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/1d3f9a77-43d7-4289-9884-a1edbee09b07\",\"description\":\"Elit et duis et Lorem quis occaecat pariatur minim culpa ex commodo eu.\"},{\"id\":\"54e1a20400c2d60a6470ea7f\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/d59450bb-c947-4d70-a9d3-3dbd8f453c03\",\"description\":\"Anim ipsum incididunt adipisicing pariatur id sunt.\"},{\"id\":\"54e1a204c3521b0450149638\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/03b6876f-353c-486f-ab01-8d55a90efbd6\",\"description\":\"Aliqua excepteur adipisicing tempor culpa reprehenderit in ut sint velit dolore culpa dolore.\"},{\"id\":\"54e1a204622a067e04bf6fe3\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/76747277-cd82-4c95-a50f-25e104ff9f24\",\"description\":\"Irure elit anim nulla ea ex adipisicing nisi consequat enim.\"},{\"id\":\"54e1a2040e3cd6cf355b3bfd\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/da25bc44-e531-47c3-97a3-aab40be464a9\",\"description\":\"Nulla est excepteur irure eiusmod.\"},{\"id\":\"54e1a204b01f9703a0c0c369\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/ee44b0f0-4351-4a70-a783-5fdf7a822ee5\",\"description\":\"Non do duis dolore et ea ullamco.\"}],\"greeting\":\"Hello, Martina! You have 7 unread messages.\",\"favorite_fruit\":\"apple\"},{\"_id\":\"54e1a2040254583a00e8a0ad\",\"index\":6,\"guid\":\"9b976786-9bbf-4fca-9577-bc9bbc781403\",\"is_active\":false,\"balance\":\"$2,825.62\",\"picture\":\"http://placehold.it/32x32\",\"age\":27,\"eye_color\":\"blue\",\"name\":{\"first\":\"Flossie\",\"last\":\"Warren\"},\"company\":\"VIDTO\",\"email\":\"flossie.warren@vidto.me\",\"phone\":\"+1 (868) 526-2416\",\"address\":\"423 Junius Street, Albrightsville, New York, 2726\",\"about\":\"Veniam in voluptate eiusmod labore duis adipisicing qui pariatur tempor. Occaecat pariatur ut sunt ad aliqua aliqua. Ea mollit enim sint voluptate. Reprehenderit eu reprehenderit deserunt qui id laborum occaecat eu veniam dolor esse cillum consectetur. Amet esse eu ad elit minim eu anim sunt fugiat adipisicing consequat.\\r\\n\",\"registered\":\"Thursday, April 17, 2014 1:34 AM\",\"latitude\":-49.961415,\"longitude\":4.090035,\"tags\":[\"laborum\",\"ex\",\"est\",\"aliqua\",\"Lorem\",\"laborum\",\"laborum\"],\"range\":[0,1,2,3,4,5,6,7,8,9],\"friends\":[{\"id\":0,\"name\":\"Dixon Patel\"},{\"id\":1,\"name\":\"Iva Lane\"},{\"id\":2,\"name\":\"Teresa Franks\"}],\"images\":[{\"id\":\"54e1a2040191df2403ad3ebf\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/73cf327d-e7b3-473a-98bd-4f4b9d26a14b\",\"description\":\"Minim pariatur consequat labore do adipisicing dolore exercitation amet ut deserunt qui Lorem magna.\"},{\"id\":\"54e1a20421f8556886bc3b6f\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/5caad5af-c88d-4530-a182-e49acdde8971\",\"description\":\"Eiusmod minim sunt ipsum anim fugiat Lorem cillum do magna cupidatat.\"},{\"id\":\"54e1a20458ec92953c784d28\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/864d6fe8-a7cf-4940-87ab-20607da97447\",\"description\":\"Duis qui in ullamco nostrud nisi deserunt anim cillum deserunt.\"},{\"id\":\"54e1a204d387c66ba9794ad9\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/d7e388af-b848-49f4-bd1d-ff3884a9834f\",\"description\":\"Incididunt ipsum occaecat nisi dolore do tempor.\"},{\"id\":\"54e1a204202a7495f6a0da31\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/e60281a6-332e-4406-89b2-a9e788d110da\",\"description\":\"Deserunt labore nisi magna do nulla nisi aute cupidatat proident ad occaecat.\"},{\"id\":\"54e1a204787e0e30d0e35ce4\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/2b934243-82b9-4a8b-ad7d-01dab7559435\",\"description\":\"Esse quis nulla ad et do amet.\"},{\"id\":\"54e1a20455fb4de89981cd46\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/cca71c5b-c2bb-44c0-8796-6650b1e99f6b\",\"description\":\"Amet anim minim commodo sint ea aute proident aliquip consectetur excepteur non nulla.\"},{\"id\":\"54e1a20434b1e6b591c5e366\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/36de445f-23a2-47fb-89d8-8dd0d7ff83c0\",\"description\":\"Veniam consequat aliquip voluptate in velit.\"},{\"id\":\"54e1a204a9368eb4b4bd1a5f\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/326b6040-d725-4618-b8eb-38ab8617550d\",\"description\":\"Ea ad dolor nostrud magna eu sit nisi do nisi et ut cupidatat excepteur officia.\"}],\"greeting\":\"Hello, Flossie! You have 8 unread messages.\",\"favorite_fruit\":\"banana\"},{\"_id\":\"54e1a2048bb454f0a5ac8bde\",\"index\":7,\"guid\":\"72a91cb6-7c27-4f34-82f5-14db8296047f\",\"is_active\":true,\"balance\":\"$3,118.69\",\"picture\":\"http://placehold.it/32x32\",\"age\":26,\"eye_color\":\"green\",\"name\":{\"first\":\"Lillie\",\"last\":\"Burks\"},\"company\":\"PLUTORQUE\",\"email\":\"lillie.burks@plutorque.us\",\"phone\":\"+1 (910) 536-3488\",\"address\":\"293 Stoddard Place, Statenville, Maryland, 116\",\"about\":\"Minim proident ut fugiat dolore occaecat esse eu dolor magna duis officia. Officia duis tempor dolore minim fugiat. Consequat ex occaecat nostrud ullamco. Aliqua incididunt sit labore aute amet. Ut est aliqua commodo adipisicing quis magna dolore sit do quis aliqua.\\r\\n\",\"registered\":\"Tuesday, August 19, 2014 10:04 PM\",\"latitude\":-47.941124,\"longitude\":-173.005552,\"tags\":[\"minim\",\"dolor\",\"excepteur\",\"minim\",\"velit\",\"sit\",\"dolor\"],\"range\":[0,1,2,3,4,5,6,7,8,9],\"friends\":[{\"id\":0,\"name\":\"Harrison Kaufman\"},{\"id\":1,\"name\":\"Marjorie Davenport\"},{\"id\":2,\"name\":\"Judy Wagner\"}],\"images\":[{\"id\":\"54e1a20466363226901ee72f\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/6a731a8a-f00a-4f25-a15f-2b6e5f799ea0\",\"description\":\"Sunt aliquip consequat aliqua tempor dolore pariatur esse consectetur ex.\"},{\"id\":\"54e1a20473e1165ea1c2cc28\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/868419f5-3af9-4830-929e-39bf185a45c7\",\"description\":\"Nulla et amet cupidatat eu culpa duis consectetur ullamco nulla eu deserunt ipsum.\"},{\"id\":\"54e1a204fdb7e4543536c3e0\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/6307a8fa-9914-4d96-9729-08e6c648b182\",\"description\":\"Voluptate velit cillum tempor consectetur veniam laboris adipisicing cillum deserunt proident laboris anim non cupidatat.\"},{\"id\":\"54e1a20446310c30e1572301\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/2a7ab70d-b695-40fe-93bc-e184560f6ad3\",\"description\":\"Nostrud consectetur adipisicing labore anim ipsum ex laboris.\"},{\"id\":\"54e1a2049daaf3135430cb2d\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/056293f0-1276-426f-8341-294c0123e47d\",\"description\":\"Occaecat anim ullamco ea aliqua amet culpa ut esse velit nostrud irure sunt velit.\"},{\"id\":\"54e1a204030d8cacd972dda4\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/8b24ed04-1d7a-4410-8d96-54caf670810c\",\"description\":\"Elit nulla nulla velit reprehenderit consequat anim excepteur voluptate magna excepteur.\"},{\"id\":\"54e1a20463dfe7c44d5ed592\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/c096e657-6812-4c6f-8289-0df89d2a7acd\",\"description\":\"Sit sit minim dolor in commodo ut nulla est labore deserunt sunt magna fugiat.\"},{\"id\":\"54e1a2041cec1ae775b7f386\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/f4024faf-1f96-46f1-9ffb-c11cbddfda36\",\"description\":\"Elit quis ullamco labore quis sunt anim cupidatat voluptate laborum sint irure commodo mollit.\"},{\"id\":\"54e1a20481f1dfc3dc0aedc6\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/568f0565-1d11-4726-b877-f1be39ed3e4d\",\"description\":\"Id Lorem excepteur laboris sint cupidatat magna occaecat ea incididunt.\"},{\"id\":\"54e1a2048aaf83f6d5400e3d\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/cd8f7e63-8abe-434c-b805-9babee4fe7dd\",\"description\":\"Ut dolore ad nisi cillum mollit.\"},{\"id\":\"54e1a2045224f34efaeb9f80\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/b8f4e233-e294-4895-9759-27176527d02f\",\"description\":\"Incididunt laboris est qui cupidatat pariatur officia qui ullamco voluptate.\"},{\"id\":\"54e1a2043f99cbf05e4851fe\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/21bdbacb-da2e-473a-b78c-d1045a3033cc\",\"description\":\"Nulla sunt nostrud sunt cillum magna minim Lorem veniam.\"}],\"greeting\":\"Hello, Lillie! You have 7 unread messages.\",\"favorite_fruit\":\"apple\"},{\"_id\":\"54e1a204d5aab291b492796b\",\"index\":8,\"guid\":\"a339098d-b961-449e-8fc0-32ef90c77086\",\"is_active\":true,\"balance\":\"$1,568.48\",\"picture\":\"http://placehold.it/32x32\",\"age\":24,\"eye_color\":\"blue\",\"name\":{\"first\":\"Kitty\",\"last\":\"Bailey\"},\"company\":\"BOINK\",\"email\":\"kitty.bailey@boink.io\",\"phone\":\"+1 (975) 442-2301\",\"address\":\"811 Murdock Court, Hollins, Alaska, 4695\",\"about\":\"Esse reprehenderit tempor laboris nostrud. Cillum adipisicing ut ea minim laborum qui eu consequat qui cupidatat cupidatat reprehenderit nisi. Consectetur occaecat fugiat pariatur sunt aliqua ut.\\r\\n\",\"registered\":\"Thursday, May 8, 2014 1:42 AM\",\"latitude\":-8.217496,\"longitude\":-137.05907,\"tags\":[\"Lorem\",\"tempor\",\"quis\",\"aliqua\",\"esse\",\"enim\",\"velit\"],\"range\":[0,1,2,3,4,5,6,7,8,9],\"friends\":[{\"id\":0,\"name\":\"Little Potts\"},{\"id\":1,\"name\":\"Valerie Moore\"},{\"id\":2,\"name\":\"Johnnie Gillespie\"}],\"images\":[{\"id\":\"54e1a204db32e579058d1608\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/9ae53875-64de-4403-a0ea-ef72b01de8cb\",\"description\":\"Id occaecat veniam commodo dolor.\"},{\"id\":\"54e1a204237af148165f5c0d\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/fe832e99-009d-42b9-b856-2c335caf1057\",\"description\":\"Nulla consequat in fugiat minim laborum Lorem aliquip eu amet dolore qui adipisicing.\"},{\"id\":\"54e1a204377aa44ac6aac74c\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/5536d59b-9a19-476e-b14f-86793e47c7b9\",\"description\":\"Aliqua fugiat reprehenderit sit irure sit voluptate sint ex aliquip tempor voluptate officia incididunt.\"},{\"id\":\"54e1a2045b6393a42eda4618\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/7e5f178b-ea0b-4fdc-bc0f-4e1e15197262\",\"description\":\"Minim nostrud sint veniam nisi aliqua laborum quis irure cupidatat nulla fugiat officia.\"},{\"id\":\"54e1a204dd302e6fe50a005a\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/fc8c16fd-5f19-4281-8ef8-bed179c8230b\",\"description\":\"Sunt minim occaecat ex id amet.\"},{\"id\":\"54e1a204da334ba9298254ed\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/608bfa21-cb48-4090-adc3-73599379192c\",\"description\":\"Irure non et nostrud ipsum in est cillum culpa.\"},{\"id\":\"54e1a204c50757cc375429ff\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/475a906b-d7d7-420a-8ab2-6e344cb765ac\",\"description\":\"Proident Lorem laborum do elit culpa excepteur officia eu Lorem excepteur.\"},{\"id\":\"54e1a2048fcbda5596efefea\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/92ac8e2a-34ce-481b-9b38-4f71e0695fee\",\"description\":\"Magna Lorem est voluptate enim fugiat incididunt qui esse ex velit pariatur nostrud labore.\"}],\"greeting\":\"Hello, Kitty! You have 9 unread messages.\",\"favorite_fruit\":\"apple\"},{\"_id\":\"54e1a2045bf21ab6a48136a1\",\"index\":9,\"guid\":\"0dc4870a-1044-4bbf-9a79-d590b2498009\",\"is_active\":false,\"balance\":\"$2,669.86\",\"picture\":\"http://placehold.it/32x32\",\"age\":33,\"eye_color\":\"green\",\"name\":{\"first\":\"Lindsey\",\"last\":\"Brooks\"},\"company\":\"CRUSTATIA\",\"email\":\"lindsey.brooks@crustatia.com\",\"phone\":\"+1 (816) 529-3968\",\"address\":\"701 Hamilton Avenue, Ona, North Dakota, 3885\",\"about\":\"Proident laborum cupidatat adipisicing non ea dolore irure nulla commodo incididunt eiusmod dolor proident do. Dolor ex aliqua commodo do incididunt adipisicing adipisicing id magna do sint enim. Consequat ipsum eu excepteur irure Lorem.\\r\\n\",\"registered\":\"Friday, June 27, 2014 11:32 PM\",\"latitude\":-7.004335,\"longitude\":-122.127942,\"tags\":[\"irure\",\"duis\",\"mollit\",\"eu\",\"ipsum\",\"ea\",\"officia\"],\"range\":[0,1,2,3,4,5,6,7,8,9],\"friends\":[{\"id\":0,\"name\":\"Georgina Gray\"},{\"id\":1,\"name\":\"Annette Neal\"},{\"id\":2,\"name\":\"Walsh Deleon\"}],\"images\":[{\"id\":\"54e1a204725ad3eb8da07f5e\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/62372fc4-0a8b-4040-838d-8b561860668a\",\"description\":\"Aute ad amet ipsum magna irure ea aliqua nostrud est aliquip.\"},{\"id\":\"54e1a204d8800c958920e371\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/cdd9d7dc-2cee-44b3-8b62-63a490f06dc7\",\"description\":\"Consequat mollit consequat esse ad deserunt aute proident dolor magna.\"}],\"greeting\":\"Hello, Lindsey! You have 10 unread messages.\",\"favorite_fruit\":\"banana\"},{\"_id\":\"54e1a204f19a7a3741ecfd9f\",\"index\":10,\"guid\":\"ca3ecb3a-914d-44a0-a4dd-57eae5779bc0\",\"is_active\":true,\"balance\":\"$2,345.46\",\"picture\":\"http://placehold.it/32x32\",\"age\":27,\"eye_color\":\"green\",\"name\":{\"first\":\"Nixon\",\"last\":\"Chandler\"},\"company\":\"LIQUICOM\",\"email\":\"nixon.chandler@liquicom.name\",\"phone\":\"+1 (997) 452-3087\",\"address\":\"664 Prince Street, Wheaton, District Of Columbia, 4382\",\"about\":\"Nisi excepteur culpa veniam reprehenderit tempor laborum ex excepteur deserunt consectetur amet quis proident qui. Nostrud eiusmod dolor minim officia aute elit sit pariatur consectetur tempor amet. Culpa minim in nisi fugiat sunt labore nisi deserunt adipisicing aliquip aliqua dolor. Anim qui nisi sunt commodo sit nulla incididunt amet voluptate ad laboris ex.\\r\\n\",\"registered\":\"Tuesday, May 27, 2014 6:08 AM\",\"latitude\":-44.323327,\"longitude\":-82.236605,\"tags\":[\"veniam\",\"consequat\",\"labore\",\"Lorem\",\"excepteur\",\"aliqua\",\"laboris\"],\"range\":[0,1,2,3,4,5,6,7,8,9],\"friends\":[{\"id\":0,\"name\":\"Pollard Farrell\"},{\"id\":1,\"name\":\"Bridgett Figueroa\"},{\"id\":2,\"name\":\"Mcgowan Rivers\"}],\"images\":[{\"id\":\"54e1a204099718c89e39209e\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/fba179fb-a0dc-4e6b-a451-a9f9f879c059\",\"description\":\"Culpa esse elit sit esse velit nulla elit anim.\"},{\"id\":\"54e1a204786dfa2a7e842499\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/a997cd1a-ca26-46cc-ace7-8200e3d468e1\",\"description\":\"Dolor adipisicing culpa laborum ut dolore commodo in adipisicing deserunt aliqua reprehenderit.\"}],\"greeting\":\"Hello, Nixon! You have 10 unread messages.\",\"favorite_fruit\":\"strawberry\"},{\"_id\":\"54e1a2044c544a3737b2dfa6\",\"index\":11,\"guid\":\"81fdb943-d80d-439b-bc64-846f4c0b343d\",\"is_active\":false,\"balance\":\"$1,733.84\",\"picture\":\"http://placehold.it/32x32\",\"age\":22,\"eye_color\":\"blue\",\"name\":{\"first\":\"Lauren\",\"last\":\"Randolph\"},\"company\":\"DECRATEX\",\"email\":\"lauren.randolph@decratex.biz\",\"phone\":\"+1 (965) 569-3887\",\"address\":\"146 Lorimer Street, Dupuyer, Massachusetts, 1387\",\"about\":\"Tempor Lorem sit nostrud aute quis mollit voluptate commodo irure. Non dolor cillum in nisi incididunt dolore. Duis excepteur mollit labore exercitation sint cillum cupidatat voluptate tempor laboris. Ad anim aliqua est irure. Culpa consectetur dolor quis aute irure deserunt consequat aliquip occaecat aute elit cupidatat eiusmod ut. Et quis est eiusmod magna aliquip occaecat. Duis consequat ea cupidatat Lorem irure laborum culpa nulla voluptate.\\r\\n\",\"registered\":\"Friday, January 10, 2014 12:35 AM\",\"latitude\":80.593715,\"longitude\":-102.683865,\"tags\":[\"incididunt\",\"esse\",\"ipsum\",\"enim\",\"consequat\",\"officia\",\"ex\"],\"range\":[0,1,2,3,4,5,6,7,8,9],\"friends\":[{\"id\":0,\"name\":\"Haney Oneill\"},{\"id\":1,\"name\":\"Bowen Chambers\"},{\"id\":2,\"name\":\"Brandie Newman\"}],\"images\":[{\"id\":\"54e1a2041ad7ae2d9d04a1bf\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/66f18f57-3410-4508-aa6f-5e4b08480e10\",\"description\":\"Ullamco amet duis reprehenderit laboris amet.\"},{\"id\":\"54e1a204f47e17b6b48cb758\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/493e0133-ffb5-4ba7-a557-d2292ad58d69\",\"description\":\"Amet nulla adipisicing est do reprehenderit occaecat consequat nulla ipsum amet.\"},{\"id\":\"54e1a2041e23de552133c588\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/4f8c3e1c-40f3-4354-84b4-3ed2d041f6b6\",\"description\":\"Amet qui ex excepteur nulla nisi dolor nostrud aliquip dolore exercitation nisi.\"},{\"id\":\"54e1a204de55b31a2bafa28a\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/af6e11c8-d765-4632-bea3-8af6c9244709\",\"description\":\"Fugiat consectetur cillum qui mollit ex quis non duis occaecat occaecat Lorem.\"},{\"id\":\"54e1a20452e24c11e162cb31\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/32f9fddd-ab15-4a61-b796-6b60e3acd55c\",\"description\":\"Eiusmod commodo ad irure sint laboris pariatur sint ad sunt nisi est.\"},{\"id\":\"54e1a204ecaa3489a3603ee5\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/3fa0df7b-e3d4-4749-8ee6-430073308b44\",\"description\":\"Sunt cillum consequat proident ullamco ad ad.\"},{\"id\":\"54e1a2047af936924ffb1c38\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/9628a46a-0a93-4688-b80a-a60ab6fbf814\",\"description\":\"Sunt dolor sunt occaecat consequat adipisicing ipsum amet ut proident magna do fugiat consequat aliquip.\"},{\"id\":\"54e1a2048e1e382445317fdc\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/dc101aa5-f6d2-47a4-8d33-efd42dd5a345\",\"description\":\"Cupidatat eiusmod dolore tempor cillum nostrud et nisi mollit et nisi do ad.\"}],\"greeting\":\"Hello, Lauren! You have 5 unread messages.\",\"favorite_fruit\":\"banana\"},{\"_id\":\"54e1a2043a17445c7d5c3143\",\"index\":12,\"guid\":\"e5cf1683-c7f7-4a09-8464-43f515328d6d\",\"is_active\":true,\"balance\":\"$3,744.35\",\"picture\":\"http://placehold.it/32x32\",\"age\":27,\"eye_color\":\"brown\",\"name\":{\"first\":\"Lena\",\"last\":\"Cash\"},\"company\":\"ENQUILITY\",\"email\":\"lena.cash@enquility.net\",\"phone\":\"+1 (887) 511-3916\",\"address\":\"556 Roebling Street, Saticoy, Idaho, 6423\",\"about\":\"Minim cupidatat nulla eu cillum aliquip do. Exercitation sint duis cillum non nulla. Quis laborum incididunt sunt duis irure occaecat proident veniam nisi. Nostrud sint consequat reprehenderit aliquip in nulla aute minim laborum anim veniam. Adipisicing est veniam et commodo. Sunt ex aliqua cupidatat culpa ex adipisicing adipisicing nulla pariatur. Eiusmod aliquip ex eu laboris mollit ipsum dolor eu qui ut labore pariatur nulla.\\r\\n\",\"registered\":\"Friday, February 13, 2015 8:12 AM\",\"latitude\":4.761905,\"longitude\":-133.186767,\"tags\":[\"laboris\",\"esse\",\"fugiat\",\"veniam\",\"cillum\",\"magna\",\"cillum\"],\"range\":[0,1,2,3,4,5,6,7,8,9],\"friends\":[{\"id\":0,\"name\":\"Mcmillan Horn\"},{\"id\":1,\"name\":\"Cantu Byers\"},{\"id\":2,\"name\":\"Ruthie Cohen\"}],\"images\":[{\"id\":\"54e1a20483d7bec96a328743\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/087921ec-4148-47db-833f-d3d7ea24cc1f\",\"description\":\"Sunt cillum incididunt sit consectetur ad qui excepteur dolor sint reprehenderit enim ea.\"},{\"id\":\"54e1a2044bb3828aa7d77266\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/225ba636-c82e-4e47-af02-a6004d254046\",\"description\":\"Cupidatat sunt occaecat aliqua minim labore fugiat Lorem magna aliquip duis.\"},{\"id\":\"54e1a2044415f44b35d1691a\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/05de9058-357e-42c9-bfda-4472fa6254af\",\"description\":\"Ut duis minim aliqua ea cupidatat tempor nostrud.\"},{\"id\":\"54e1a204d39fec48d13f2dc9\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/22537a69-c878-4028-8a0e-89037033282a\",\"description\":\"Mollit commodo non consectetur consequat excepteur excepteur minim in Lorem nisi incididunt cupidatat sint adipisicing.\"},{\"id\":\"54e1a204c7ae291bf1dca7e9\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/03e77e6b-7694-4ffe-a4e1-14e127b24c35\",\"description\":\"Cillum ex occaecat nostrud est culpa excepteur aliquip amet.\"},{\"id\":\"54e1a204e963228796c458c6\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/84b1eb62-1e72-4f26-8d43-0f6f90da59b7\",\"description\":\"Quis nisi tempor minim officia voluptate aute magna.\"},{\"id\":\"54e1a204b35afea1bb6aeb68\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/1a4169b2-d1ab-4a2e-9350-e6be8ccea7e7\",\"description\":\"Excepteur dolore adipisicing ea deserunt eu reprehenderit eiusmod duis ad aliquip magna deserunt ut non.\"},{\"id\":\"54e1a2041957d1f43c2844af\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/917fd9e5-ce58-43ab-8b81-0feda196a077\",\"description\":\"Aute enim eu eiusmod non cillum ad elit magna officia.\"}],\"greeting\":\"Hello, Lena! You have 6 unread messages.\",\"favorite_fruit\":\"strawberry\"},{\"_id\":\"54e1a204c8342cc1de4dbb51\",\"index\":13,\"guid\":\"49e49b62-22c7-465d-b1d3-4ba41b90f91b\",\"is_active\":true,\"balance\":\"$1,364.53\",\"picture\":\"http://placehold.it/32x32\",\"age\":30,\"eye_color\":\"green\",\"name\":{\"first\":\"Peggy\",\"last\":\"Glover\"},\"company\":\"DYMI\",\"email\":\"peggy.glover@dymi.info\",\"phone\":\"+1 (927) 403-3721\",\"address\":\"578 Whitwell Place, Crown, Palau, 6820\",\"about\":\"Reprehenderit quis nostrud voluptate ullamco laborum incididunt culpa aliqua non sit. Deserunt nulla quis magna ullamco laborum sunt excepteur eiusmod. Veniam est id qui id eiusmod commodo consequat ad incididunt esse. Minim ipsum elit pariatur magna id elit sunt voluptate occaecat non est culpa cupidatat.\\r\\n\",\"registered\":\"Monday, November 24, 2014 1:16 AM\",\"latitude\":-26.726352,\"longitude\":39.406411,\"tags\":[\"eu\",\"amet\",\"ipsum\",\"non\",\"officia\",\"aliquip\",\"aliquip\"],\"range\":[0,1,2,3,4,5,6,7,8,9],\"friends\":[{\"id\":0,\"name\":\"Keller Knox\"},{\"id\":1,\"name\":\"Kristine Ramsey\"},{\"id\":2,\"name\":\"Carmella Lee\"}],\"images\":[{\"id\":\"54e1a2045167eda9ec4c5c50\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/a995bba2-ad58-4fbe-aa45-2d83cf1da912\",\"description\":\"Amet nisi culpa sit amet cupidatat.\"},{\"id\":\"54e1a204fc8dbbe37762354e\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/2c5fdc60-f1d4-405f-8db0-c83a538e7683\",\"description\":\"Nostrud do et labore aliqua nisi sit et amet do.\"},{\"id\":\"54e1a20427d8df080abd58e6\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/e8d1f99a-8993-4613-aa92-1421e74dbb70\",\"description\":\"Cupidatat esse tempor enim aute commodo ipsum occaecat incididunt nisi deserunt voluptate commodo duis pariatur.\"},{\"id\":\"54e1a204137ceffdebc6dcc2\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/86c9bd92-81a3-47e1-9407-958233fe588d\",\"description\":\"Ut id velit ut et.\"},{\"id\":\"54e1a204c4ce3cbdde24a317\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/cb0fc24f-c789-4e5b-b036-baf9bde8c4fe\",\"description\":\"Occaecat in amet cupidatat dolore nisi nostrud nulla excepteur.\"},{\"id\":\"54e1a204b98333a6d4c1d417\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/ccdb272b-2d1f-432e-ab0f-4a4e1dfb93c6\",\"description\":\"Pariatur id sint dolore qui enim sunt ad Lorem nulla.\"},{\"id\":\"54e1a204a5571a51344db5d0\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/19434f4c-8de9-417c-a0d1-4dcda2c2c882\",\"description\":\"Velit culpa irure ipsum duis velit aute nisi et cupidatat sint culpa et do.\"},{\"id\":\"54e1a2041e314b01a757d063\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/86f4ce83-30f2-40af-87b0-ca10f38e4e12\",\"description\":\"Tempor velit cillum consectetur non.\"},{\"id\":\"54e1a204f32bef3fa03c8769\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/3d1234eb-31e2-4dcc-a9d8-9e61457a1a1d\",\"description\":\"Anim voluptate consectetur Lorem reprehenderit occaecat id voluptate commodo id ut voluptate labore pariatur.\"}],\"greeting\":\"Hello, Peggy! You have 9 unread messages.\",\"favorite_fruit\":\"banana\"},{\"_id\":\"54e1a204cb72781f9b50fe06\",\"index\":14,\"guid\":\"a61bd3e3-ca82-45e1-b795-f0ae0e221a1c\",\"is_active\":false,\"balance\":\"$2,234.29\",\"picture\":\"http://placehold.it/32x32\",\"age\":23,\"eye_color\":\"blue\",\"name\":{\"first\":\"Gabriela\",\"last\":\"Beasley\"},\"company\":\"APEX\",\"email\":\"gabriela.beasley@apex.org\",\"phone\":\"+1 (832) 590-2568\",\"address\":\"408 Hancock Street, Baker, Colorado, 9162\",\"about\":\"Non minim reprehenderit aliqua aute ullamco duis occaecat. Aliquip dolor ut ad ad tempor dolor quis voluptate. Deserunt exercitation enim exercitation velit. In mollit veniam proident laboris excepteur incididunt officia minim. Lorem amet ex ex adipisicing elit officia ullamco. Cillum magna incididunt sint nostrud cillum qui reprehenderit ea consequat minim.\\r\\n\",\"registered\":\"Friday, January 30, 2015 1:57 PM\",\"latitude\":21.924746,\"longitude\":-53.441414,\"tags\":[\"tempor\",\"ad\",\"cillum\",\"do\",\"elit\",\"cupidatat\",\"ad\"],\"range\":[0,1,2,3,4,5,6,7,8,9],\"friends\":[{\"id\":0,\"name\":\"Dyer Greer\"},{\"id\":1,\"name\":\"Fanny Estrada\"},{\"id\":2,\"name\":\"Woodward Hawkins\"}],\"images\":[{\"id\":\"54e1a204b5b982147eb754b5\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/20b8c86e-e0c3-41ff-822f-b3746ca94352\",\"description\":\"Minim cupidatat cupidatat do irure tempor pariatur est ipsum enim nisi officia esse.\"},{\"id\":\"54e1a204e6e04aa319163995\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/6f502adb-445c-42e7-8213-ef2ea2b03be4\",\"description\":\"Ipsum id tempor ex officia commodo culpa non ex in.\"},{\"id\":\"54e1a204daaa73c82865d787\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/5e3674ff-dc19-47a8-a3bf-21e1ad61c9d7\",\"description\":\"Minim aliquip nostrud nisi cillum eiusmod ut reprehenderit consectetur qui nostrud reprehenderit nostrud consectetur.\"}],\"greeting\":\"Hello, Gabriela! You have 9 unread messages.\",\"favorite_fruit\":\"banana\"},{\"_id\":\"54e1a204f3fda49777cf04a0\",\"index\":15,\"guid\":\"1119d36a-6fc3-4e5e-b2e6-ed9e5f488624\",\"is_active\":true,\"balance\":\"$3,942.81\",\"picture\":\"http://placehold.it/32x32\",\"age\":40,\"eye_color\":\"brown\",\"name\":{\"first\":\"Kaufman\",\"last\":\"Harding\"},\"company\":\"ECSTASIA\",\"email\":\"kaufman.harding@ecstasia.ca\",\"phone\":\"+1 (890) 569-2917\",\"address\":\"781 Polhemus Place, Leroy, Connecticut, 9425\",\"about\":\"Ea aliqua qui commodo magna eiusmod sit adipisicing sint exercitation fugiat aute voluptate dolor cillum. Esse et amet culpa ea minim anim aliquip officia ut occaecat laboris fugiat. Consequat qui enim excepteur pariatur duis ad. Ipsum eu proident reprehenderit elit minim consequat sint aliquip ea incididunt. Qui consectetur ad reprehenderit elit esse.\\r\\n\",\"registered\":\"Monday, August 11, 2014 9:22 AM\",\"latitude\":44.917063,\"longitude\":67.50841,\"tags\":[\"culpa\",\"proident\",\"ut\",\"sint\",\"sint\",\"fugiat\",\"commodo\"],\"range\":[0,1,2,3,4,5,6,7,8,9],\"friends\":[{\"id\":0,\"name\":\"Erma Barlow\"},{\"id\":1,\"name\":\"Magdalena Sykes\"},{\"id\":2,\"name\":\"Small Cannon\"}],\"images\":[{\"id\":\"54e1a2047760c3920c8ead52\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/e944a5e1-5799-47e9-84e3-c95815b04a47\",\"description\":\"Minim aliquip tempor sint sit veniam deserunt veniam aliquip.\"},{\"id\":\"54e1a20441533055e61795c4\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/dfa58ad5-4a72-4106-b614-2a20108b6872\",\"description\":\"Ullamco id nisi velit magna non nisi anim aute.\"},{\"id\":\"54e1a204b1cdfa4d3f2442d5\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/65996dff-0556-4108-ae72-75d5fb5bfdce\",\"description\":\"Anim aliquip sit proident laboris do labore non occaecat deserunt.\"},{\"id\":\"54e1a204e88099d7dac1846b\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/72124fa7-8be1-4647-b82c-870423a88329\",\"description\":\"Nisi incididunt occaecat nostrud minim.\"}],\"greeting\":\"Hello, Kaufman! You have 6 unread messages.\",\"favorite_fruit\":\"strawberry\"},{\"_id\":\"54e1a2042cc149567e24c718\",\"index\":16,\"guid\":\"460a8000-5ffc-4bfb-bb41-da48a147ca59\",\"is_active\":true,\"balance\":\"$1,308.74\",\"picture\":\"http://placehold.it/32x32\",\"age\":31,\"eye_color\":\"brown\",\"name\":{\"first\":\"Joann\",\"last\":\"Noble\"},\"company\":\"NSPIRE\",\"email\":\"joann.noble@nspire.co.uk\",\"phone\":\"+1 (897) 462-3034\",\"address\":\"810 Diamond Street, Shepardsville, Michigan, 5332\",\"about\":\"Consequat ut Lorem dolor nulla incididunt eu ipsum. Anim duis consectetur cupidatat exercitation id proident veniam sit sint commodo nisi nostrud ipsum. Ipsum aliqua reprehenderit amet est id excepteur. Dolore in consectetur ut cillum mollit anim ullamco tempor non voluptate. Aliqua ex fugiat tempor sint non. Reprehenderit sint do laborum commodo deserunt occaecat consectetur consectetur nostrud ut. Labore sit et adipisicing officia excepteur.\\r\\n\",\"registered\":\"Monday, January 12, 2015 7:09 PM\",\"latitude\":53.493384,\"longitude\":-93.829806,\"tags\":[\"magna\",\"duis\",\"labore\",\"deserunt\",\"ullamco\",\"ut\",\"sunt\"],\"range\":[0,1,2,3,4,5,6,7,8,9],\"friends\":[{\"id\":0,\"name\":\"Tanisha Mejia\"},{\"id\":1,\"name\":\"Kathy Pacheco\"},{\"id\":2,\"name\":\"Lou Hess\"}],\"images\":[{\"id\":\"54e1a2045feab039ba38fd41\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/c299917f-ebc4-40fe-92a1-dab4230879d6\",\"description\":\"Adipisicing nostrud mollit proident culpa laboris laboris incididunt pariatur ad consectetur.\"},{\"id\":\"54e1a2046ba827702e26d6b7\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/5e9dddbf-4185-403d-97f3-ee45539cef89\",\"description\":\"Excepteur irure incididunt pariatur excepteur officia labore laboris laborum ut.\"},{\"id\":\"54e1a20475aac1e4a6157988\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/73321e68-6934-4c54-814a-ef611a1e068f\",\"description\":\"Id aliqua sunt adipisicing elit veniam.\"},{\"id\":\"54e1a2040d22b8a920dd2f1d\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/e6ce3bdc-2c7c-4c8a-95cf-fe6ed188b891\",\"description\":\"Cillum ullamco duis esse ea amet reprehenderit aute sit proident.\"},{\"id\":\"54e1a204dcacaa512b800a5b\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/625d3674-09a3-46c6-ad94-1a191c2ad251\",\"description\":\"Veniam non incididunt velit ullamco est laborum amet dolor ea aliqua nostrud ut.\"}],\"greeting\":\"Hello, Joann! You have 7 unread messages.\",\"favorite_fruit\":\"apple\"},{\"_id\":\"54e1a2049e8527ca7b2c8d1f\",\"index\":17,\"guid\":\"bcdc48a5-a5bf-4c7d-ac3f-985778f76dad\",\"is_active\":true,\"balance\":\"$1,914.27\",\"picture\":\"http://placehold.it/32x32\",\"age\":27,\"eye_color\":\"blue\",\"name\":{\"first\":\"Hooper\",\"last\":\"Blair\"},\"company\":\"DRAGBOT\",\"email\":\"hooper.blair@dragbot.biz\",\"phone\":\"+1 (878) 593-2922\",\"address\":\"796 Highland Avenue, Bagtown, Guam, 9922\",\"about\":\"Laboris fugiat dolor est esse ipsum qui sint non dolor ad anim tempor nulla esse. Commodo irure commodo qui laboris ex cupidatat nisi ad quis sint nisi esse nisi. Deserunt nulla ullamco minim commodo reprehenderit laborum do excepteur do velit duis occaecat labore quis.\\r\\n\",\"registered\":\"Tuesday, May 6, 2014 1:15 AM\",\"latitude\":25.611189,\"longitude\":-129.122479,\"tags\":[\"adipisicing\",\"ea\",\"laboris\",\"et\",\"veniam\",\"laborum\",\"eu\"],\"range\":[0,1,2,3,4,5,6,7,8,9],\"friends\":[{\"id\":0,\"name\":\"Bobbie Reed\"},{\"id\":1,\"name\":\"Castaneda Brennan\"},{\"id\":2,\"name\":\"Oconnor Bush\"}],\"images\":[{\"id\":\"54e1a204dd26c7f775abfcdf\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/ae707edd-133d-45ca-9c76-fa7e10e82ec9\",\"description\":\"Incididunt anim reprehenderit dolor amet commodo occaecat proident aute amet cupidatat nisi sint nostrud mollit.\"},{\"id\":\"54e1a204630ae96039bf6bd2\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/f300e3a5-a46c-436e-943d-5e1a64b09d10\",\"description\":\"Qui occaecat adipisicing commodo ad eu aliquip culpa sint.\"},{\"id\":\"54e1a2048e30ebd4156dfd17\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/e92bea24-c80e-46bc-86ac-7e2aa5ac57dc\",\"description\":\"Dolore eiusmod incididunt dolor est commodo nisi commodo duis aliquip mollit.\"},{\"id\":\"54e1a20442216f2d581dc3a0\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/14b3f674-7fdc-49c0-b717-4004451cb378\",\"description\":\"Deserunt voluptate aliqua elit eu ex proident cillum elit exercitation eu voluptate sunt culpa.\"},{\"id\":\"54e1a204bdfbaf7c402f0d24\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/c79277eb-7454-4af6-9678-afb70896f04d\",\"description\":\"Laboris incididunt occaecat reprehenderit veniam ut aliqua qui aute esse anim qui.\"},{\"id\":\"54e1a204217174ddef0418c1\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/8a1f17b7-d93f-4522-a3cd-7c892dad6ef9\",\"description\":\"Laborum sunt sit fugiat minim esse cupidatat commodo.\"},{\"id\":\"54e1a204ca8232547fd333d1\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/865d4ea6-00d7-4e03-b662-b09e92224d96\",\"description\":\"Ad minim occaecat proident sint sint aliqua labore.\"},{\"id\":\"54e1a2047f26469f0ea7aca2\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/31966b51-5e24-48b6-b439-de8ee32673ce\",\"description\":\"Lorem pariatur qui id esse dolore.\"},{\"id\":\"54e1a2049b6c6de3bca7c826\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/48c0ec58-e9d7-46b5-84e3-fdd52ec7c74b\",\"description\":\"Incididunt est non reprehenderit quis.\"},{\"id\":\"54e1a204480f3c673a27643c\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/12e535fd-5402-4826-8e85-1deb76fb006e\",\"description\":\"Non anim do adipisicing voluptate quis consectetur mollit do nostrud.\"},{\"id\":\"54e1a204537436bc08ba2d6b\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/580d72a6-a4e5-4047-917b-6a0685da258a\",\"description\":\"Officia elit reprehenderit enim pariatur consectetur adipisicing.\"}],\"greeting\":\"Hello, Hooper! You have 7 unread messages.\",\"favorite_fruit\":\"banana\"},{\"_id\":\"54e1a20422d519bac269584f\",\"index\":18,\"guid\":\"4218da17-2135-4d90-b981-f2910499b031\",\"is_active\":false,\"balance\":\"$3,570.43\",\"picture\":\"http://placehold.it/32x32\",\"age\":32,\"eye_color\":\"green\",\"name\":{\"first\":\"Zelma\",\"last\":\"Manning\"},\"company\":\"ZOGAK\",\"email\":\"zelma.manning@zogak.me\",\"phone\":\"+1 (897) 473-2320\",\"address\":\"504 Buffalo Avenue, Sheatown, Texas, 8956\",\"about\":\"Laboris exercitation irure ad ea Lorem eiusmod esse occaecat. Laborum reprehenderit nulla amet aliquip cupidatat laboris ipsum irure dolore. Nostrud voluptate cillum ea laboris ea et mollit adipisicing. Ea ex officia Lorem veniam adipisicing. Cupidatat aute irure culpa sit culpa elit velit.\\r\\n\",\"registered\":\"Sunday, April 13, 2014 7:01 AM\",\"latitude\":-26.175323,\"longitude\":-125.233294,\"tags\":[\"quis\",\"do\",\"aliqua\",\"labore\",\"aute\",\"ipsum\",\"adipisicing\"],\"range\":[0,1,2,3,4,5,6,7,8,9],\"friends\":[{\"id\":0,\"name\":\"Reese Harper\"},{\"id\":1,\"name\":\"Gertrude Walsh\"},{\"id\":2,\"name\":\"Janie Bentley\"}],\"images\":[{\"id\":\"54e1a20487141609bb6fb126\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/0d48daf9-7d00-43e4-acc1-5a938b91c328\",\"description\":\"Mollit irure et veniam amet pariatur Lorem velit veniam.\"},{\"id\":\"54e1a204405e2006fc97fd23\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/d08ce4c6-ba9d-4fb8-a30c-b93a401ce47b\",\"description\":\"Pariatur ea do sit commodo est est laborum ullamco ea veniam labore dolore cillum amet.\"},{\"id\":\"54e1a2040b3feb761810eeb2\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/7c954520-30ad-46eb-9722-20abbf28b6be\",\"description\":\"Duis cillum sunt magna sint exercitation aliquip aliqua nostrud cillum duis velit.\"},{\"id\":\"54e1a20448f360885a340422\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/ebd07540-d87a-4edb-8b44-3649fc919f2a\",\"description\":\"In minim magna veniam duis occaecat deserunt eu.\"}],\"greeting\":\"Hello, Zelma! You have 7 unread messages.\",\"favorite_fruit\":\"strawberry\"},{\"_id\":\"54e1a204048957d56fcd7032\",\"index\":19,\"guid\":\"a2710724-de35-45ae-acc6-32acc212a055\",\"is_active\":false,\"balance\":\"$3,282.07\",\"picture\":\"http://placehold.it/32x32\",\"age\":29,\"eye_color\":\"brown\",\"name\":{\"first\":\"Tamera\",\"last\":\"Winters\"},\"company\":\"BIFLEX\",\"email\":\"tamera.winters@biflex.us\",\"phone\":\"+1 (875) 593-2006\",\"address\":\"778 Knickerbocker Avenue, Cavalero, Utah, 6781\",\"about\":\"Eiusmod laborum nisi consectetur laborum culpa excepteur cupidatat incididunt ea aliquip. Pariatur Lorem elit consectetur do deserunt. Veniam voluptate irure sint est consectetur minim occaecat anim aliqua. Proident pariatur cillum id commodo dolore deserunt qui mollit sit occaecat irure Lorem. Nostrud nostrud minim proident ea laborum sit deserunt consequat mollit.\\r\\n\",\"registered\":\"Monday, January 6, 2014 6:22 AM\",\"latitude\":-64.000389,\"longitude\":4.937974,\"tags\":[\"sint\",\"labore\",\"reprehenderit\",\"id\",\"culpa\",\"culpa\",\"voluptate\"],\"range\":[0,1,2,3,4,5,6,7,8,9],\"friends\":[{\"id\":0,\"name\":\"Mollie William\"},{\"id\":1,\"name\":\"Diana Camacho\"},{\"id\":2,\"name\":\"Sherrie Peterson\"}],\"images\":[{\"id\":\"54e1a2042c142cc42bec08f0\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/7ffede44-950c-45a7-b8e9-25e647e0fcb6\",\"description\":\"Aliqua id occaecat incididunt proident mollit culpa cillum mollit sunt enim dolore nulla aliquip irure.\"},{\"id\":\"54e1a2047fbca3d38fb50e5d\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/8fbf9048-1db3-48a6-92ef-1c8a428095a6\",\"description\":\"Adipisicing exercitation culpa incididunt incididunt.\"},{\"id\":\"54e1a20467507d9b5a7d5d9f\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/88d7cfc6-37c7-4abc-b8ab-64e0c930f134\",\"description\":\"Est proident velit tempor fugiat dolore magna Lorem culpa.\"},{\"id\":\"54e1a204ca8570bd0a290f66\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/43029c4f-16e6-4db7-b36d-736cd3f9a690\",\"description\":\"Quis non id consequat velit tempor.\"},{\"id\":\"54e1a204c1e351d4f447b068\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/e3e11a91-114a-436e-814f-ccc9848e1fa0\",\"description\":\"Sint mollit nulla culpa sint id commodo cillum.\"},{\"id\":\"54e1a204d72dc6d88af69709\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/90eca6b3-278b-4dd3-b1da-a856a6869f74\",\"description\":\"Quis amet pariatur nostrud mollit ipsum qui nostrud.\"},{\"id\":\"54e1a204859e109d253bb749\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/63f79977-0f2d-4e58-ace9-73b44b01ef6d\",\"description\":\"Culpa mollit nulla fugiat exercitation ea cillum est nisi consequat voluptate.\"},{\"id\":\"54e1a204c0cc0b399b638938\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/a896eda9-2913-4065-98a8-9de211c2cd5b\",\"description\":\"Laboris cillum ad consectetur est dolore proident magna dolor aute nostrud irure.\"}],\"greeting\":\"Hello, Tamera! You have 6 unread messages.\",\"favorite_fruit\":\"apple\"}],\"status\":\"success\",\"is_real_json\":false}"
  },
  {
    "path": "BenchmarkDemo/app/src/main/assets/smallsample.json",
    "content": "{\"users\":[{\"_id\":\"54e1a22ad6924676519714b6\",\"index\":0,\"guid\":\"790e09fc-59f7-48f7-8806-5831602a205a\",\"is_active\":true,\"balance\":\"$1,831.34\",\"picture\":\"http://placehold.it/32x32\",\"age\":38,\"eye_color\":\"green\",\"name\":{\"first\":\"Boone\",\"last\":\"Cohen\"},\"company\":\"ZINCA\",\"email\":\"boone.cohen@zinca.net\",\"phone\":\"+1 (851) 464-3636\",\"address\":\"433 Bergen Court, Gallina, New Mexico, 2974\",\"about\":\"Excepteur et cupidatat consequat irure irure ipsum tempor nostrud mollit sunt quis officia veniam voluptate. Lorem do incididunt voluptate velit sunt pariatur in nostrud eu ex eu deserunt reprehenderit. Elit duis Lorem elit sint nulla cupidatat eu ipsum pariatur consequat cillum. Sint ex dolor enim occaecat eu. Ipsum voluptate do voluptate Lorem nostrud adipisicing qui sunt eu nisi laboris amet.\\r\\n\",\"registered\":\"Wednesday, June 25, 2014 2:09 PM\",\"latitude\":78.882912,\"longitude\":-107.230173,\"tags\":[\"ex\",\"aliqua\",\"consectetur\",\"sint\",\"velit\",\"aliqua\",\"consectetur\"],\"range\":[0,1,2,3,4,5,6,7,8,9],\"friends\":[{\"id\":0,\"name\":\"Karla West\"},{\"id\":1,\"name\":\"Marion Valencia\"},{\"id\":2,\"name\":\"Catalina Vasquez\"}],\"images\":[{\"id\":\"54e1a22ae60628fcfe1ae3ac\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/03e40ca9-1ae2-4c7e-903b-3ea250f9c72f\",\"description\":\"Eiusmod nulla incididunt consequat irure aliqua reprehenderit qui consequat qui ea officia nostrud sit.\"},{\"id\":\"54e1a22a320cc4797ee58c77\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/873fe8e8-df60-48af-9516-34b2156af71d\",\"description\":\"Sunt reprehenderit nisi est incididunt duis aliqua quis commodo tempor laborum.\"},{\"id\":\"54e1a22a554630dab8ce1d77\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/8be5c184-d82e-4c16-a614-d93b349141b1\",\"description\":\"Sint labore ullamco ut consectetur sunt reprehenderit quis minim dolor.\"},{\"id\":\"54e1a22adca1ed33247f23cd\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/a65e84e8-d6e0-436b-a68d-5aed0ebac496\",\"description\":\"Pariatur nostrud nostrud ea fugiat commodo nostrud.\"},{\"id\":\"54e1a22ab8f2cdef240f526a\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/cd7eae0b-5461-41a5-87b7-b5025e4f2eb9\",\"description\":\"Ipsum irure cillum non ea.\"},{\"id\":\"54e1a22af45c8be3437764f2\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/e57d0372-cad7-422a-8ead-9c570f670e51\",\"description\":\"Occaecat labore enim non irure officia.\"},{\"id\":\"54e1a22ae5219968b9b113e2\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/b3ca2076-1d27-4d62-b89d-e36f4f748b99\",\"description\":\"Id ex irure Lorem sunt aute eiusmod non.\"},{\"id\":\"54e1a22aeca65b09f1019958\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/2b41b7a1-dd01-4ce3-b85b-45baf37d5d71\",\"description\":\"Sunt dolore ad esse deserunt veniam do magna est adipisicing commodo sunt non.\"},{\"id\":\"54e1a22a8985fbbb32eb709e\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/a173ad95-b7f9-4bf6-9468-34d58db4799f\",\"description\":\"Ea ut id fugiat incididunt in aute in deserunt cillum fugiat esse sint ullamco veniam.\"},{\"id\":\"54e1a22a988a9ad35ddcdd46\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/1afd7d1e-57c9-4411-b5db-c596c39f3de5\",\"description\":\"Esse eiusmod ut aliquip quis velit do culpa laboris et labore velit.\"},{\"id\":\"54e1a22a2dd686c82ed6a7b9\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/df6ae4a7-f05d-4ccd-8b86-4dd2fdc5edd2\",\"description\":\"Dolore aute quis occaecat magna ipsum pariatur laboris est tempor tempor ullamco nostrud.\"}],\"greeting\":\"Hello, Boone! You have 6 unread messages.\",\"favorite_fruit\":\"strawberry\"},{\"_id\":\"54e1a22ad9bf674139fcc687\",\"index\":1,\"guid\":\"49ad3811-b182-41c9-8dc5-e46b19ecc8a1\",\"is_active\":true,\"balance\":\"$2,304.21\",\"picture\":\"http://placehold.it/32x32\",\"age\":24,\"eye_color\":\"brown\",\"name\":{\"first\":\"Isabella\",\"last\":\"Crosby\"},\"company\":\"INSURESYS\",\"email\":\"isabella.crosby@insuresys.org\",\"phone\":\"+1 (971) 533-2604\",\"address\":\"387 Charles Place, Henrietta, New Hampshire, 5684\",\"about\":\"Enim nulla id Lorem aute nulla veniam deserunt sunt consequat ad minim. Irure ipsum et minim non ullamco cillum pariatur excepteur. Consectetur dolor veniam non elit excepteur dolore ullamco sint.\\r\\n\",\"registered\":\"Friday, August 1, 2014 10:08 AM\",\"latitude\":-39.839074,\"longitude\":-76.593139,\"tags\":[\"elit\",\"et\",\"consequat\",\"ipsum\",\"pariatur\",\"consequat\",\"ad\"],\"range\":[0,1,2,3,4,5,6,7,8,9],\"friends\":[{\"id\":0,\"name\":\"Hays Patrick\"},{\"id\":1,\"name\":\"Bass Hahn\"},{\"id\":2,\"name\":\"Ava Cash\"}],\"images\":[{\"id\":\"54e1a22a5c5b01ba8dcdc89e\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/36908dbb-083f-417c-9f3d-5eb1d42aacc6\",\"description\":\"Proident ipsum ullamco laborum quis ad duis ut non occaecat nulla nulla et non ut.\"},{\"id\":\"54e1a22a7f15b9feb4a414d5\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/72d1c745-879b-4cc4-aa5d-687c84724703\",\"description\":\"Nisi veniam enim ea ex labore dolor aliquip.\"},{\"id\":\"54e1a22a4c18ed8653236c4d\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/337fedce-7e1b-459c-85b7-f5293144b492\",\"description\":\"Deserunt reprehenderit ad irure adipisicing in incididunt cupidatat magna occaecat reprehenderit.\"},{\"id\":\"54e1a22ab568045bf3447b59\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/506a2007-9d9c-48bf-b6b2-8a3361adf25b\",\"description\":\"Id occaecat cupidatat et deserunt reprehenderit velit.\"},{\"id\":\"54e1a22a405c5f2c77582268\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/ed8c1f61-baae-427d-afa0-3082eddc7a8e\",\"description\":\"Cillum labore excepteur consectetur anim anim aute.\"}],\"greeting\":\"Hello, Isabella! You have 10 unread messages.\",\"favorite_fruit\":\"strawberry\"},{\"_id\":\"54e1a22a0787f385c70d74f4\",\"index\":2,\"guid\":\"9dd61b09-c3bb-4737-82b4-009871f5a7c1\",\"is_active\":false,\"balance\":\"$2,806.70\",\"picture\":\"http://placehold.it/32x32\",\"age\":40,\"eye_color\":\"blue\",\"name\":{\"first\":\"Huffman\",\"last\":\"Burns\"},\"company\":\"DATAGEN\",\"email\":\"huffman.burns@datagen.biz\",\"phone\":\"+1 (901) 470-2747\",\"address\":\"507 Railroad Avenue, Hasty, South Carolina, 8384\",\"about\":\"Nisi elit do officia Lorem aliquip mollit ullamco ex ullamco nisi aute. Non adipisicing esse nostrud ullamco enim nisi minim sit velit cupidatat sunt anim duis. Consequat magna occaecat id culpa sint laboris incididunt consequat deserunt. Ullamco adipisicing sint non duis. Culpa aliqua reprehenderit magna aliquip exercitation culpa adipisicing excepteur aliqua pariatur velit. Consectetur dolor tempor veniam sit in cillum ad sint.\\r\\n\",\"registered\":\"Monday, April 7, 2014 5:55 AM\",\"latitude\":-59.578091,\"longitude\":-90.524566,\"tags\":[\"culpa\",\"laborum\",\"fugiat\",\"amet\",\"pariatur\",\"tempor\",\"velit\"],\"range\":[0,1,2,3,4,5,6,7,8,9],\"friends\":[{\"id\":0,\"name\":\"Elise Orr\"},{\"id\":1,\"name\":\"Gale Barker\"},{\"id\":2,\"name\":\"Gallegos Robertson\"}],\"images\":[{\"id\":\"54e1a22a060fc9da4791360a\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/6f2d79b2-c195-492d-b980-f78d74641f82\",\"description\":\"Et enim enim cupidatat pariatur minim dolore non labore irure enim.\"},{\"id\":\"54e1a22a607119ec0c817455\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/a0a7162e-eb72-4440-b923-06bccecb73a2\",\"description\":\"Nostrud qui eiusmod ea ipsum et reprehenderit ipsum nisi.\"},{\"id\":\"54e1a22a6a7703751e660c50\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/673329b0-1aeb-4dab-91e0-e53bc85f210c\",\"description\":\"Fugiat ea est eu adipisicing.\"}],\"greeting\":\"Hello, Huffman! You have 10 unread messages.\",\"favorite_fruit\":\"banana\"},{\"_id\":\"54e1a22a3c61a85848d8c8c7\",\"index\":3,\"guid\":\"db3ac507-927c-4528-b200-ff6e73f0cf9d\",\"is_active\":true,\"balance\":\"$2,973.84\",\"picture\":\"http://placehold.it/32x32\",\"age\":20,\"eye_color\":\"brown\",\"name\":{\"first\":\"Chang\",\"last\":\"Sandoval\"},\"company\":\"ZUVY\",\"email\":\"chang.sandoval@zuvy.biz\",\"phone\":\"+1 (902) 600-3655\",\"address\":\"296 Wogan Terrace, Germanton, Wisconsin, 3912\",\"about\":\"Non sint deserunt id duis. Exercitation exercitation eu voluptate sunt officia non ad minim laboris cillum fugiat id consectetur incididunt. Labore consectetur aliquip magna et ullamco non.\\r\\n\",\"registered\":\"Monday, August 4, 2014 9:29 AM\",\"latitude\":69.306174,\"longitude\":119.146103,\"tags\":[\"magna\",\"ullamco\",\"dolor\",\"exercitation\",\"elit\",\"tempor\",\"velit\"],\"range\":[0,1,2,3,4,5,6,7,8,9],\"friends\":[{\"id\":0,\"name\":\"Stevens Myers\"},{\"id\":1,\"name\":\"Earnestine Hernandez\"},{\"id\":2,\"name\":\"Rosie Delaney\"}],\"images\":[{\"id\":\"54e1a22a0f82837d96693f02\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/06081076-a9f7-4f86-99c8-fa98df3615d6\",\"description\":\"Lorem officia ex consequat labore dolor ex enim cillum deserunt ut magna.\"},{\"id\":\"54e1a22ac2b43c427e8b9adf\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/5b710d28-8aa6-42da-9efb-2787d1cb068a\",\"description\":\"Aute sit in culpa id nisi dolore sunt velit.\"},{\"id\":\"54e1a22a8c7aab1411d9ef20\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/a7978ae5-aa27-4344-a72c-d8ec2cdde4a6\",\"description\":\"Dolor officia velit pariatur ipsum velit.\"},{\"id\":\"54e1a22aa274f89a823b75c5\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/c067fbd0-b15c-424f-8c7a-e4e1f8095888\",\"description\":\"Dolor exercitation enim Lorem ad Lorem consectetur occaecat culpa ex officia sint ad.\"},{\"id\":\"54e1a22a3c6d2d5c94cb9732\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/cf8713ca-eb87-4eab-9b2c-812c92a589b1\",\"description\":\"Nisi nulla labore excepteur nisi nostrud occaecat cupidatat qui officia esse officia irure aute ut.\"},{\"id\":\"54e1a22a08aee5eb00c08d2e\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/48c87556-ec1c-4b82-a22e-1fb662da7b4c\",\"description\":\"Id sunt culpa esse ex culpa velit proident.\"},{\"id\":\"54e1a22abf59c3aef6c37bdb\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/606b4f84-f87d-40ec-abd7-493656fb7260\",\"description\":\"Consequat mollit duis in ullamco amet.\"},{\"id\":\"54e1a22a585b31de792f5834\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/358c4481-1692-47d2-b3ba-c9759620bcf9\",\"description\":\"Elit velit veniam ullamco fugiat irure labore fugiat anim ex nisi velit aliqua duis ipsum.\"},{\"id\":\"54e1a22a4b082e2dc85eef54\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/062a1c6f-1e23-4231-ac12-c820476d4834\",\"description\":\"Ullamco labore incididunt ex enim culpa nulla laborum nisi id Lorem velit.\"},{\"id\":\"54e1a22a0754053be5aa81f9\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/ba7f3fef-dedc-4a28-8f82-c1b1f6db7550\",\"description\":\"Ut veniam ipsum adipisicing officia nostrud quis veniam proident voluptate ad labore officia.\"}],\"greeting\":\"Hello, Chang! You have 8 unread messages.\",\"favorite_fruit\":\"strawberry\"},{\"_id\":\"54e1a22a652d3ed2c6a006a0\",\"index\":4,\"guid\":\"b7d58c02-e8bf-4a6b-bbb8-4420b20e9c19\",\"is_active\":false,\"balance\":\"$1,610.72\",\"picture\":\"http://placehold.it/32x32\",\"age\":40,\"eye_color\":\"brown\",\"name\":{\"first\":\"Wise\",\"last\":\"Phillips\"},\"company\":\"UNCORP\",\"email\":\"wise.phillips@uncorp.com\",\"phone\":\"+1 (934) 449-3985\",\"address\":\"204 Linden Boulevard, Weedville, Alabama, 6181\",\"about\":\"Pariatur exercitation Lorem nisi dolore excepteur elit. In sint cupidatat commodo aute duis voluptate do laborum eu occaecat laboris magna. Veniam cupidatat deserunt et exercitation aute aliquip quis dolor aliquip.\\r\\n\",\"registered\":\"Wednesday, December 10, 2014 4:59 AM\",\"latitude\":78.508249,\"longitude\":-112.823955,\"tags\":[\"do\",\"mollit\",\"duis\",\"id\",\"cillum\",\"duis\",\"tempor\"],\"range\":[0,1,2,3,4,5,6,7,8,9],\"friends\":[{\"id\":0,\"name\":\"Acevedo Williamson\"},{\"id\":1,\"name\":\"Jacquelyn Burks\"},{\"id\":2,\"name\":\"Odessa Wynn\"}],\"images\":[{\"id\":\"54e1a22a1f9a924f1e855ec3\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/bafe8677-37c8-45ca-acb6-93f8c613f9d0\",\"description\":\"Esse nulla irure aliqua duis mollit sunt.\"},{\"id\":\"54e1a22a9bb90970a491bc9a\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/f354b747-27b3-4102-b7cb-2fb1921fc059\",\"description\":\"Ut laborum id velit exercitation deserunt.\"}],\"greeting\":\"Hello, Wise! You have 7 unread messages.\",\"favorite_fruit\":\"apple\"},{\"_id\":\"54e1a22a0e0efd533f6f59b8\",\"index\":5,\"guid\":\"2df6de3a-b369-4663-bc1f-58dc44c50d5f\",\"is_active\":false,\"balance\":\"$3,166.77\",\"picture\":\"http://placehold.it/32x32\",\"age\":28,\"eye_color\":\"blue\",\"name\":{\"first\":\"Phillips\",\"last\":\"Lara\"},\"company\":\"ZEDALIS\",\"email\":\"phillips.lara@zedalis.io\",\"phone\":\"+1 (993) 442-3971\",\"address\":\"155 Suydam Place, Thynedale, Hawaii, 8505\",\"about\":\"Est irure elit commodo ut. Ad laboris et officia nisi qui non proident pariatur eiusmod ut dolor consectetur adipisicing elit. Magna aliqua exercitation id consectetur velit sit laboris.\\r\\n\",\"registered\":\"Tuesday, April 29, 2014 2:23 PM\",\"latitude\":-87.782792,\"longitude\":-138.457571,\"tags\":[\"reprehenderit\",\"quis\",\"cillum\",\"consectetur\",\"aliqua\",\"exercitation\",\"est\"],\"range\":[0,1,2,3,4,5,6,7,8,9],\"friends\":[{\"id\":0,\"name\":\"Stephens Bright\"},{\"id\":1,\"name\":\"Pena Berger\"},{\"id\":2,\"name\":\"Agnes Herring\"}],\"images\":[{\"id\":\"54e1a22a69e61a81e3f87de2\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/29105551-a8b1-41bc-a9b1-353ff1b7c4e3\",\"description\":\"Ullamco deserunt reprehenderit consectetur ut.\"},{\"id\":\"54e1a22ac78870a80b6a565c\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/43ea1882-5b95-4e68-84ad-290fd55fdd43\",\"description\":\"Eiusmod veniam voluptate pariatur eu fugiat incididunt incididunt et voluptate nulla.\"},{\"id\":\"54e1a22a2be741ba661cba13\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/255117dd-69b9-4fd2-b479-3ec716aa5107\",\"description\":\"Voluptate enim occaecat aliqua quis cupidatat sunt commodo exercitation enim cillum.\"},{\"id\":\"54e1a22a91a13183c022accf\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/5f54d200-a484-4a9c-87ed-3e164680bd4c\",\"description\":\"Ea qui exercitation sint velit occaecat deserunt deserunt veniam ea officia cillum fugiat irure.\"},{\"id\":\"54e1a22aa8382731def01c2b\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/5c511fe6-4414-481a-b35c-041b0fffdbcd\",\"description\":\"Fugiat adipisicing eu labore ad veniam.\"},{\"id\":\"54e1a22a4953a9fe1163eab7\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/48f2a377-d999-4b73-867e-760436a55d76\",\"description\":\"Exercitation ullamco consectetur minim anim amet.\"},{\"id\":\"54e1a22a2723dc52f77ade70\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/feb77a61-50a7-433d-b5fa-9b161f607eb1\",\"description\":\"Amet adipisicing eiusmod aliquip deserunt nostrud consequat sint.\"},{\"id\":\"54e1a22a628de63f5df9393d\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/f4556966-d19e-44e5-95f3-677efe13aeee\",\"description\":\"Elit minim Lorem tempor cupidatat nostrud consequat labore fugiat eiusmod ea eiusmod.\"},{\"id\":\"54e1a22a1625bc8c31c9211a\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/bc1dfd35-89ac-4cc1-b16d-f075e17d1e2b\",\"description\":\"Incididunt et fugiat Lorem excepteur aute nisi.\"},{\"id\":\"54e1a22a06f2b2f4e5129853\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/196b569d-539b-4269-9cc3-e3d2c19eace6\",\"description\":\"Nostrud sunt velit esse excepteur.\"},{\"id\":\"54e1a22a574c1241f4f1a071\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/22993c43-304a-440e-aba2-90866a5524db\",\"description\":\"Aliqua laborum ut sint adipisicing laborum.\"}],\"greeting\":\"Hello, Phillips! You have 10 unread messages.\",\"favorite_fruit\":\"apple\"},{\"_id\":\"54e1a22aff9388e7a1c21895\",\"index\":6,\"guid\":\"5b97c1e0-c59c-45af-a578-28d47a8d9d8a\",\"is_active\":true,\"balance\":\"$1,379.60\",\"picture\":\"http://placehold.it/32x32\",\"age\":22,\"eye_color\":\"blue\",\"name\":{\"first\":\"Wendy\",\"last\":\"Tyler\"},\"company\":\"ZYTRAC\",\"email\":\"wendy.tyler@zytrac.me\",\"phone\":\"+1 (834) 463-3084\",\"address\":\"783 Woodrow Court, Orick, Oregon, 1697\",\"about\":\"Proident occaecat commodo pariatur consectetur quis irure incididunt nostrud velit eiusmod velit. Ea amet ipsum officia quis. Anim proident duis reprehenderit ipsum reprehenderit mollit excepteur sunt qui. Lorem dolor exercitation labore fugiat. Sint ex ad dolor commodo mollit non deserunt aliqua. Irure proident sunt excepteur proident aute nisi veniam nulla commodo non qui duis ad elit. Ullamco cupidatat mollit id quis dolore qui.\\r\\n\",\"registered\":\"Tuesday, November 11, 2014 5:19 AM\",\"latitude\":32.167726,\"longitude\":141.044715,\"tags\":[\"laborum\",\"anim\",\"tempor\",\"tempor\",\"officia\",\"amet\",\"dolore\"],\"range\":[0,1,2,3,4,5,6,7,8,9],\"friends\":[{\"id\":0,\"name\":\"Frye Ramsey\"},{\"id\":1,\"name\":\"Rosetta Moon\"},{\"id\":2,\"name\":\"Audra Cotton\"}],\"images\":[{\"id\":\"54e1a22a9a84b2ebab5b515d\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/721ace31-7eab-4397-85de-7d5475dee1a9\",\"description\":\"Ullamco non nulla ullamco deserunt proident eiusmod qui.\"},{\"id\":\"54e1a22a03ba198851b5d17e\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/f60851c9-e076-466d-85bc-805ca0cc07e4\",\"description\":\"Deserunt ex enim cupidatat duis aute voluptate ullamco quis excepteur quis est nisi nisi dolore.\"},{\"id\":\"54e1a22ae7ca39474a6e7315\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/fcf0605e-7249-47b5-be68-b1126c8b39fc\",\"description\":\"Exercitation id quis enim est labore veniam velit enim exercitation magna incididunt est fugiat minim.\"},{\"id\":\"54e1a22a8212f47dbe70c0b3\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/425bdb12-d12a-46b7-a0a4-51a6771ebd25\",\"description\":\"Aliquip eu aliquip mollit tempor pariatur excepteur ad consequat commodo nostrud enim aliqua.\"},{\"id\":\"54e1a22a1dace3b56b7640e5\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/17a9570b-0a49-4bfe-bc8d-655e2d4beb1c\",\"description\":\"Commodo Lorem proident labore in occaecat voluptate do exercitation elit labore laborum dolor aute ea.\"},{\"id\":\"54e1a22a59be069a649d867e\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/b39ffcbc-7d9e-4e87-901d-7fd2422311ce\",\"description\":\"Fugiat excepteur quis enim quis laboris reprehenderit aliquip officia officia ad consectetur cillum.\"},{\"id\":\"54e1a22a18be9a32a847be88\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/f847c6ef-98cf-44ad-b489-87e1bde12355\",\"description\":\"Laborum amet voluptate ea eiusmod ipsum excepteur proident Lorem dolor aliqua.\"},{\"id\":\"54e1a22ab176cd0ffdd431a5\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/32917868-e8e1-4777-aed1-06d4284ae651\",\"description\":\"Reprehenderit magna duis in ad amet ex officia incididunt eu fugiat voluptate pariatur ad do.\"},{\"id\":\"54e1a22a9009469f02d379ea\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/328f3b34-150a-485c-bdd5-9099481e5cf1\",\"description\":\"Nostrud minim ea ex reprehenderit.\"}],\"greeting\":\"Hello, Wendy! You have 9 unread messages.\",\"favorite_fruit\":\"strawberry\"}],\"status\":\"success\",\"is_real_json\":false}"
  },
  {
    "path": "BenchmarkDemo/app/src/main/assets/tinysample.json",
    "content": "{\"users\":[{\"_id\":\"54e1a2497ec861adfaf279dc\",\"index\":0,\"guid\":\"bb1f1b8b-eeb2-41ea-bcb6-a0fec0118696\",\"is_active\":false,\"balance\":\"$3,111.24\",\"picture\":\"http://placehold.it/32x32\",\"age\":27,\"eye_color\":\"green\",\"name\":{\"first\":\"Lora\",\"last\":\"Peterson\"},\"company\":\"ZENTIME\",\"email\":\"lora.peterson@zentime.tv\",\"phone\":\"+1 (846) 533-3429\",\"address\":\"337 Jay Street, Nadine, Alaska, 3511\",\"about\":\"Do id reprehenderit ipsum ullamco nulla cillum. Est cupidatat minim est voluptate pariatur consequat ut aliquip deserunt proident sit officia consectetur tempor. In sunt officia ea elit proident commodo deserunt.\\r\\n\",\"registered\":\"Monday, October 13, 2014 11:00 AM\",\"latitude\":-68.438885,\"longitude\":99.273798,\"tags\":[\"cupidatat\",\"in\",\"aliquip\",\"occaecat\",\"fugiat\",\"dolore\",\"eu\"],\"range\":[0,1,2,3,4,5,6,7,8,9],\"friends\":[{\"id\":0,\"name\":\"Holden Huber\"},{\"id\":1,\"name\":\"Perry Dawson\"},{\"id\":2,\"name\":\"Santiago Lester\"}],\"images\":[{\"id\":\"54e1a2491c441c02dda9e1a2\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/ff10e184-ad03-49a5-8776-60d69027a85f\",\"description\":\"Quis adipisicing aute exercitation veniam aliquip do laboris dolore esse ipsum.\"},{\"id\":\"54e1a2499ffbcff833aa697f\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/ee68a15b-beda-4b62-abf1-e051789df5e2\",\"description\":\"Culpa magna cupidatat incididunt laboris labore ex esse.\"},{\"id\":\"54e1a2494bea0bb68c18f323\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/9039ffd6-65e5-4326-99b8-d0fafadfaf01\",\"description\":\"Et qui ipsum duis nostrud pariatur Lorem aliqua laborum aliqua proident dolor.\"},{\"id\":\"54e1a2497377f96a7eee39c8\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/a60e8c5d-3cc1-41a0-ba8f-29d427adef8e\",\"description\":\"Ut consectetur eiusmod aute non excepteur irure nostrud eu est consequat amet nulla dolor.\"},{\"id\":\"54e1a24994f29c027081368c\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/4944823f-684f-4dee-9a99-1d4e663516b7\",\"description\":\"Adipisicing est ex ut velit veniam ut laboris ipsum aute ut enim Lorem sunt.\"},{\"id\":\"54e1a249d38a45c01e2683df\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/09f13d0e-9659-4897-ac27-db84301f58e1\",\"description\":\"Tempor voluptate nostrud tempor amet ipsum exercitation dolor.\"},{\"id\":\"54e1a249baf69dd62ce8b44d\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/dfd78293-ac0b-48b7-bf8c-66e2672de3b5\",\"description\":\"Velit ea cillum exercitation deserunt nostrud reprehenderit et occaecat et mollit proident culpa ad.\"},{\"id\":\"54e1a2499c3d7eea438271fd\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/b7c16d08-40a1-4df8-9499-e7d189d26333\",\"description\":\"Pariatur dolor cupidatat non nulla pariatur adipisicing labore nulla laborum ea.\"},{\"id\":\"54e1a24994dda9614f6ffcb6\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/d104650f-0546-4cbd-a62b-5be257436f99\",\"description\":\"Voluptate et amet est ad exercitation magna labore commodo id eu in ad.\"},{\"id\":\"54e1a249b4d394b66e425c95\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/2b35b0f6-655d-4b47-a753-0d9395fdf25b\",\"description\":\"Irure nisi consequat eiusmod quis consectetur nostrud nisi dolore eu proident deserunt.\"},{\"id\":\"54e1a249ca5c304c909a2de2\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/676ac6bf-1ce7-4529-b544-bab7b663942d\",\"description\":\"Amet officia laboris aliqua officia exercitation sunt mollit.\"},{\"id\":\"54e1a249727d8bb2963c53dc\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/217d1692-bdb8-4162-9f32-7deeb55d9220\",\"description\":\"Adipisicing ad incididunt duis ullamco Lorem quis qui ipsum laborum.\"},{\"id\":\"54e1a24979ac053841fe5e58\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/9e8b323d-0e09-4086-a934-38e3aef0a13f\",\"description\":\"Ad excepteur excepteur dolore consectetur do laborum.\"}],\"greeting\":\"Hello, Lora! You have 6 unread messages.\",\"favorite_fruit\":\"banana\"},{\"_id\":\"54e1a249b907885ff759e7e8\",\"index\":1,\"guid\":\"1d27a869-a26d-4166-922c-b489846906ba\",\"is_active\":true,\"balance\":\"$3,489.60\",\"picture\":\"http://placehold.it/32x32\",\"age\":21,\"eye_color\":\"brown\",\"name\":{\"first\":\"Davenport\",\"last\":\"Wolfe\"},\"company\":\"RODEOMAD\",\"email\":\"davenport.wolfe@rodeomad.net\",\"phone\":\"+1 (857) 530-2371\",\"address\":\"457 Lewis Avenue, Linwood, Missouri, 9359\",\"about\":\"Pariatur culpa consectetur et non velit est consequat nostrud qui duis dolore quis. Labore veniam sit est laboris laboris cillum tempor voluptate laboris sit cillum ad. Qui ut nulla ipsum magna non officia aliquip duis pariatur laborum sint deserunt minim velit. Sit aliqua veniam cillum tempor nostrud mollit aliqua excepteur sit. Reprehenderit esse eu eu amet elit laborum ea culpa incididunt id in aliquip. Mollit laborum enim laborum commodo sit magna deserunt deserunt. Nisi sit id ipsum ut id quis pariatur amet.\\r\\n\",\"registered\":\"Monday, November 10, 2014 6:53 PM\",\"latitude\":14.868645,\"longitude\":-21.366905,\"tags\":[\"do\",\"non\",\"aliquip\",\"irure\",\"amet\",\"incididunt\",\"Lorem\"],\"range\":[0,1,2,3,4,5,6,7,8,9],\"friends\":[{\"id\":0,\"name\":\"Audra Perkins\"},{\"id\":1,\"name\":\"Cash Cox\"},{\"id\":2,\"name\":\"Judy Herring\"}],\"images\":[{\"id\":\"54e1a2499292c61097fe2f48\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/f3a79781-13db-4417-a232-e56b83c8e937\",\"description\":\"Excepteur pariatur fugiat commodo veniam nisi commodo dolore.\"},{\"id\":\"54e1a2499a198fc52c8015d3\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/79dfd649-8769-4048-a223-04ae4ce966d9\",\"description\":\"Non mollit nulla mollit proident occaecat.\"},{\"id\":\"54e1a249d6343f73eef71ad3\",\"format\":\"<ReferenceError: png is not defined>\",\"url\":\"http://ourimageserver/152298f7-151b-40ae-a84f-b780942f5035\",\"description\":\"Id adipisicing est anim duis quis dolor.\"}],\"greeting\":\"Hello, Davenport! You have 7 unread messages.\",\"favorite_fruit\":\"banana\"}],\"status\":\"success\",\"is_real_json\":false}"
  },
  {
    "path": "BenchmarkDemo/app/src/main/java/com/bluelinelabs/logansquare/demo/MainActivity.java",
    "content": "package com.bluelinelabs.logansquare.demo;\n\nimport android.app.AlertDialog;\nimport android.os.AsyncTask;\nimport android.os.Bundle;\nimport android.support.v7.app.ActionBarActivity;\nimport android.view.View;\nimport android.view.View.OnClickListener;\n\nimport com.bluelinelabs.logansquare.LoganSquare;\nimport com.bluelinelabs.logansquare.demo.model.Response;\nimport com.bluelinelabs.logansquare.demo.parsetasks.GsonParser;\nimport com.bluelinelabs.logansquare.demo.parsetasks.JacksonDatabindParser;\nimport com.bluelinelabs.logansquare.demo.parsetasks.LoganSquareParser;\nimport com.bluelinelabs.logansquare.demo.parsetasks.MoshiParser;\nimport com.bluelinelabs.logansquare.demo.parsetasks.ParseResult;\nimport com.bluelinelabs.logansquare.demo.parsetasks.Parser;\nimport com.bluelinelabs.logansquare.demo.parsetasks.Parser.ParseListener;\nimport com.bluelinelabs.logansquare.demo.serializetasks.GsonSerializer;\nimport com.bluelinelabs.logansquare.demo.serializetasks.JacksonDatabindSerializer;\nimport com.bluelinelabs.logansquare.demo.serializetasks.LoganSquareSerializer;\nimport com.bluelinelabs.logansquare.demo.serializetasks.MoshiSerializer;\nimport com.bluelinelabs.logansquare.demo.serializetasks.SerializeResult;\nimport com.bluelinelabs.logansquare.demo.serializetasks.Serializer;\nimport com.bluelinelabs.logansquare.demo.serializetasks.Serializer.SerializeListener;\nimport com.bluelinelabs.logansquare.demo.widget.BarChart;\nimport com.fasterxml.jackson.databind.ObjectMapper;\nimport com.google.gson.Gson;\n\nimport com.squareup.moshi.Moshi;\nimport java.io.BufferedReader;\nimport java.io.InputStream;\nimport java.io.InputStreamReader;\nimport java.util.ArrayList;\nimport java.util.List;\n\n/**\n * This is a test app we wrote in 10 minutes. Please do not write code like this, kiddos.\n */\npublic class MainActivity extends ActionBarActivity {\n\n    private static final int ITERATIONS = 20;\n\n    private BarChart mBarChart;\n    private List<String> mJsonStringsToParse;\n    private List<Response> mResponsesToSerialize;\n\n    private final ParseListener mParseListener = new ParseListener() {\n        @Override\n        public void onComplete(Parser parser, ParseResult parseResult) {\n            addBarData(parser, parseResult);\n        }\n    };\n    private final SerializeListener mSerializeListener = new SerializeListener() {\n        @Override\n        public void onComplete(Serializer serializer, SerializeResult serializeResult) {\n            addBarData(serializer, serializeResult);\n        }\n    };\n\n    @Override\n    protected void onCreate(Bundle savedInstanceState) {\n        super.onCreate(savedInstanceState);\n        setContentView(R.layout.activity_main);\n\n        mJsonStringsToParse = readJsonFromFile();\n        mResponsesToSerialize = getResponsesToParse();\n\n        mBarChart = (BarChart)findViewById(R.id.bar_chart);\n        mBarChart.setColumnTitles(new String[] {\"GSON\", \"Jackson\", \"LoganSquare\", \"Moshi\"});\n\n        findViewById(R.id.btn_parse_tests).setOnClickListener(new OnClickListener() {\n            @Override\n            public void onClick(View v) {\n                performParseTests();\n            }\n        });\n\n        findViewById(R.id.btn_serialize_tests).setOnClickListener(new OnClickListener() {\n            @Override\n            public void onClick(View v) {\n                performSerializeTests();\n            }\n        });\n    }\n\n    private void performParseTests() {\n        mBarChart.clear();\n        mBarChart.setSections(new String[] {\"Parse 60 items\", \"Parse 20 items\", \"Parse 7 items\", \"Parse 2 items\"});\n\n        Gson gson = new Gson();\n        ObjectMapper objectMapper = new ObjectMapper();\n        Moshi moshi = new Moshi.Builder().build();\n        List<Parser> parsers = new ArrayList<>();\n        for (String jsonString : mJsonStringsToParse) {\n            for (int iteration = 0; iteration < ITERATIONS; iteration++) {\n                parsers.add(new GsonParser(mParseListener, jsonString, gson));\n                parsers.add(new JacksonDatabindParser(mParseListener, jsonString, objectMapper));\n                parsers.add(new MoshiParser(mParseListener, jsonString, moshi));\n                parsers.add(new LoganSquareParser(mParseListener, jsonString));\n            }\n        }\n\n        for (Parser parser : parsers) {\n            parser.executeOnExecutor(AsyncTask.SERIAL_EXECUTOR);\n        }\n    }\n\n    private void performSerializeTests() {\n        mBarChart.clear();\n        mBarChart.setSections(new String[] {\"Serialize 60 items\", \"Serialize 20 items\", \"Serialize 7 items\", \"Serialize 2 items\"});\n\n        Gson gson = new Gson();\n        ObjectMapper objectMapper = new ObjectMapper();\n        Moshi moshi = new Moshi.Builder().build();\n        List<Serializer> serializers = new ArrayList<>();\n        for (Response response : mResponsesToSerialize) {\n            for (int iteration = 0; iteration < ITERATIONS; iteration++) {\n                serializers.add(new GsonSerializer(mSerializeListener, response, gson));\n                serializers.add(new JacksonDatabindSerializer(mSerializeListener, response, objectMapper));\n                serializers.add(new LoganSquareSerializer(mSerializeListener, response));\n                serializers.add(new MoshiSerializer(mSerializeListener, response, moshi));\n            }\n        }\n\n        for (Serializer serializer : serializers) {\n            serializer.executeOnExecutor(AsyncTask.SERIAL_EXECUTOR);\n        }\n    }\n\n    private void addBarData(Parser parser, ParseResult parseResult) {\n        int section;\n        switch (parseResult.objectsParsed) {\n            case 60:\n                section = 0;\n                break;\n            case 20:\n                section = 1;\n                break;\n            case 7:\n                section = 2;\n                break;\n            case 2:\n                section = 3;\n                break;\n            default:\n                section = -1;\n                break;\n        }\n\n        if (parser instanceof GsonParser) {\n            mBarChart.addTiming(section, 0, parseResult.runDuration / 1000f);\n        } else if (parser instanceof JacksonDatabindParser) {\n            mBarChart.addTiming(section, 1, parseResult.runDuration / 1000f);\n        } else if (parser instanceof LoganSquareParser) {\n            mBarChart.addTiming(section, 2, parseResult.runDuration / 1000f);\n        } else if (parser instanceof MoshiParser) {\n            mBarChart.addTiming(section, 3, parseResult.runDuration / 1000f);\n        }\n    }\n\n    private void addBarData(Serializer serializer, SerializeResult serializeResult) {\n        int section;\n        switch (serializeResult.objectsParsed) {\n            case 60:\n                section = 0;\n                break;\n            case 20:\n                section = 1;\n                break;\n            case 7:\n                section = 2;\n                break;\n            case 2:\n                section = 3;\n                break;\n            default:\n                section = -1;\n                break;\n        }\n\n        if (serializer instanceof GsonSerializer) {\n            mBarChart.addTiming(section, 0, serializeResult.runDuration / 1000f);\n        } else if (serializer instanceof JacksonDatabindSerializer) {\n            mBarChart.addTiming(section, 1, serializeResult.runDuration / 1000f);\n        } else if (serializer instanceof LoganSquareSerializer) {\n            mBarChart.addTiming(section, 2, serializeResult.runDuration / 1000f);\n        } else if (serializer instanceof MoshiSerializer) {\n            mBarChart.addTiming(section, 3, serializeResult.runDuration / 1000f);\n        }\n    }\n\n    private List<Response> getResponsesToParse() {\n        List<Response> responses = new ArrayList<>();\n\n        try {\n            for (String jsonString : mJsonStringsToParse) {\n                responses.add(LoganSquare.parse(jsonString, Response.class));\n            }\n        } catch (Exception e) {\n            new AlertDialog.Builder(this)\n                    .setTitle(\"Error\")\n                    .setMessage(\"The serializable objects were not able to load properly. These tests won't work until you completely kill this demo app and restart it.\")\n                    .setPositiveButton(\"OK\", null)\n                    .show();\n        }\n\n        return responses;\n    }\n\n    private List<String> readJsonFromFile() {\n        List<String> strings = new ArrayList<>();\n\n        strings.add(readFile(\"largesample.json\"));\n        strings.add(readFile(\"mediumsample.json\"));\n        strings.add(readFile(\"smallsample.json\"));\n        strings.add(readFile(\"tinysample.json\"));\n\n        return strings;\n    }\n\n    private String readFile(String filename) {\n        StringBuilder sb = new StringBuilder();\n\n        try {\n            InputStream json = getAssets().open(filename);\n            BufferedReader in = new BufferedReader(new InputStreamReader(json, \"UTF-8\"));\n\n            String str;\n            while ((str = in.readLine()) != null) {\n                sb.append(str);\n            }\n\n            in.close();\n        } catch (Exception e) {\n            new AlertDialog.Builder(this)\n                    .setTitle(\"Error\")\n                    .setMessage(\n                        \"The JSON file was not able to load properly. These tests won't work until you completely kill this demo app and restart it.\")\n                    .setPositiveButton(\"OK\", null)\n                    .show();\n        }\n\n        return sb.toString();\n    }\n}\n"
  },
  {
    "path": "BenchmarkDemo/app/src/main/java/com/bluelinelabs/logansquare/demo/model/Friend.java",
    "content": "package com.bluelinelabs.logansquare.demo.model;\n\nimport com.bluelinelabs.logansquare.annotation.JsonField;\nimport com.bluelinelabs.logansquare.annotation.JsonObject;\n\n@JsonObject\npublic class Friend {\n\n    @JsonField\n    public int id;\n\n    @JsonField\n    public String name;\n}\n"
  },
  {
    "path": "BenchmarkDemo/app/src/main/java/com/bluelinelabs/logansquare/demo/model/Image.java",
    "content": "package com.bluelinelabs.logansquare.demo.model;\n\nimport com.bluelinelabs.logansquare.annotation.JsonField;\nimport com.bluelinelabs.logansquare.annotation.JsonObject;\n\n@JsonObject\npublic class Image {\n\n    @JsonField\n    public String id;\n\n    @JsonField\n    public String format;\n\n    @JsonField\n    public String url;\n\n    @JsonField\n    public String description;\n\n}\n"
  },
  {
    "path": "BenchmarkDemo/app/src/main/java/com/bluelinelabs/logansquare/demo/model/Name.java",
    "content": "package com.bluelinelabs.logansquare.demo.model;\n\nimport com.bluelinelabs.logansquare.annotation.JsonField;\nimport com.bluelinelabs.logansquare.annotation.JsonObject;\n\n@JsonObject\npublic class Name {\n\n    @JsonField\n    public String first;\n\n    @JsonField\n    public String last;\n}\n"
  },
  {
    "path": "BenchmarkDemo/app/src/main/java/com/bluelinelabs/logansquare/demo/model/Response.java",
    "content": "package com.bluelinelabs.logansquare.demo.model;\n\nimport com.bluelinelabs.logansquare.annotation.JsonField;\nimport com.bluelinelabs.logansquare.annotation.JsonObject;\nimport com.fasterxml.jackson.annotation.JsonProperty;\nimport com.google.gson.annotations.SerializedName;\n\nimport java.util.List;\n\n@JsonObject\npublic class Response {\n\n    @JsonField\n    public List<User> users;\n\n    @JsonField\n    public String status;\n\n    @SerializedName(\"is_real_json\") // Annotation needed for GSON\n    @JsonProperty(\"is_real_json\") // Annotation needed for Jackson Databind\n    @JsonField(name = \"is_real_json\")\n    public boolean isRealJson;\n}\n"
  },
  {
    "path": "BenchmarkDemo/app/src/main/java/com/bluelinelabs/logansquare/demo/model/User.java",
    "content": "package com.bluelinelabs.logansquare.demo.model;\n\nimport com.bluelinelabs.logansquare.annotation.JsonField;\nimport com.bluelinelabs.logansquare.annotation.JsonObject;\nimport com.fasterxml.jackson.annotation.JsonProperty;\nimport com.google.gson.annotations.SerializedName;\n\nimport java.util.List;\n\n@JsonObject\npublic class User {\n\n    @SerializedName(\"_id\") // Annotation needed for GSON\n    @JsonProperty(\"_id\")\n    @JsonField(name = \"_id\")\n    public String id;\n\n    @JsonField\n    public int index;\n\n    @JsonField\n    public String guid;\n\n    @SerializedName(\"is_active\") // Annotation needed for GSON\n    @JsonProperty(\"is_active\") // Annotation needed for Jackson Databind\n    @JsonField(name = \"is_active\")\n    public boolean isActive;\n\n    @JsonField\n    public String balance;\n\n    @SerializedName(\"picture\") // Annotation needed for GSON\n    @JsonProperty(\"picture\") // Annotation needed for Jackson Databind\n    @JsonField(name = \"picture\")\n    public String pictureUrl;\n\n    @JsonField\n    public int age;\n\n    @JsonField\n    public Name name;\n\n    @JsonField\n    public String company;\n\n    @JsonField\n    public String email;\n\n    @JsonField\n    public String address;\n\n    @JsonField\n    public String about;\n\n    @JsonField\n    public String registered;\n\n    @JsonField\n    public double latitude;\n\n    @JsonField\n    public double longitude;\n\n    @JsonField\n    public List<String> tags;\n\n    @JsonField\n    public List<Integer> range;\n\n    @JsonField\n    public List<Friend> friends;\n\n    @JsonField\n    public List<Image> images;\n\n    @JsonField\n    public String greeting;\n\n    @SerializedName(\"favorite_fruit\") // Annotation needed for GSON\n    @JsonProperty(\"favorite_fruit\") // Annotation needed for Jackson Databind\n    @JsonField(name = \"favorite_fruit\")\n    public String favoriteFruit;\n\n    @SerializedName(\"eye_color\") // Annotation needed for GSON\n    @JsonProperty(\"eye_color\") // Annotation needed for Jackson Databind\n    @JsonField(name = \"eye_color\")\n    public String eyeColor;\n\n    @JsonField\n    public String phone;\n}\n"
  },
  {
    "path": "BenchmarkDemo/app/src/main/java/com/bluelinelabs/logansquare/demo/parsetasks/GsonParser.java",
    "content": "package com.bluelinelabs.logansquare.demo.parsetasks;\n\nimport com.bluelinelabs.logansquare.demo.model.Response;\nimport com.google.gson.Gson;\n\npublic class GsonParser extends Parser {\n\n    private final Gson gson;\n\n    public GsonParser(ParseListener parseListener, String jsonString, Gson gson) {\n        super(parseListener, jsonString);\n        this.gson = gson;\n    }\n\n    @Override\n    protected int parse(String json) {\n        try {\n            Response response = gson.fromJson(json, Response.class);\n            return response.users.size();\n        } catch (Exception e) {\n            return 0;\n        } finally {\n            System.gc();\n        }\n    }\n\n}\n"
  },
  {
    "path": "BenchmarkDemo/app/src/main/java/com/bluelinelabs/logansquare/demo/parsetasks/JacksonDatabindParser.java",
    "content": "package com.bluelinelabs.logansquare.demo.parsetasks;\n\nimport com.bluelinelabs.logansquare.demo.model.Response;\nimport com.fasterxml.jackson.databind.ObjectMapper;\n\npublic class JacksonDatabindParser extends Parser {\n\n    private final ObjectMapper objectMapper;\n\n    public JacksonDatabindParser(ParseListener parseListener, String jsonString, ObjectMapper objectMapper) {\n        super(parseListener, jsonString);\n        this.objectMapper = objectMapper;\n    }\n\n    @Override\n    protected int parse(String json) {\n        try {\n            Response response = objectMapper.readValue(json, Response.class);\n            return response.users.size();\n        } catch (Exception e) {\n            return 0;\n        } finally {\n            System.gc();\n        }\n    }\n\n}\n"
  },
  {
    "path": "BenchmarkDemo/app/src/main/java/com/bluelinelabs/logansquare/demo/parsetasks/LoganSquareParser.java",
    "content": "package com.bluelinelabs.logansquare.demo.parsetasks;\n\nimport com.bluelinelabs.logansquare.LoganSquare;\nimport com.bluelinelabs.logansquare.demo.model.Response;\n\npublic class LoganSquareParser extends Parser {\n\n    public LoganSquareParser(ParseListener parseListener, String jsonString) {\n        super(parseListener, jsonString);\n    }\n\n    @Override\n    protected int parse(String json) {\n        try {\n            Response response = LoganSquare.parse(json, Response.class);\n            return response.users.size();\n        } catch (Exception e) {\n            return 0;\n        } finally {\n            System.gc();\n        }\n    }\n\n}\n"
  },
  {
    "path": "BenchmarkDemo/app/src/main/java/com/bluelinelabs/logansquare/demo/parsetasks/MoshiParser.java",
    "content": "package com.bluelinelabs.logansquare.demo.parsetasks;\n\nimport com.bluelinelabs.logansquare.demo.model.Response;\nimport com.squareup.moshi.Moshi;\n\npublic class MoshiParser extends Parser {\n\n    private final Moshi moshi;\n\n    public MoshiParser(Parser.ParseListener parseListener, String jsonString, Moshi moshi) {\n        super(parseListener, jsonString);\n        this.moshi = moshi;\n    }\n\n    @Override\n    protected int parse(String json) {\n        try {\n            return moshi.adapter(Response.class).fromJson(json).users.size();\n        } catch (Exception e) {\n            return 0;\n        } finally {\n            System.gc();\n        }\n    }\n\n}\n"
  },
  {
    "path": "BenchmarkDemo/app/src/main/java/com/bluelinelabs/logansquare/demo/parsetasks/ParseResult.java",
    "content": "package com.bluelinelabs.logansquare.demo.parsetasks;\n\npublic class ParseResult {\n\n    public long runDuration;\n    public int objectsParsed;\n\n    public ParseResult(long runDuration, int objectsParsed) {\n        this.runDuration = runDuration;\n        this.objectsParsed = objectsParsed;\n    }\n\n}\n"
  },
  {
    "path": "BenchmarkDemo/app/src/main/java/com/bluelinelabs/logansquare/demo/parsetasks/Parser.java",
    "content": "package com.bluelinelabs.logansquare.demo.parsetasks;\n\nimport android.os.AsyncTask;\n\nimport java.util.concurrent.TimeUnit;\n\npublic abstract class Parser extends AsyncTask<Void, Void, ParseResult> {\n\n    public interface ParseListener {\n        void onComplete(Parser parser, ParseResult parseResult);\n    }\n\n    private final ParseListener mParseListener;\n    private final String mJsonString;\n\n    protected Parser(ParseListener parseListener, String jsonString) {\n        mParseListener = parseListener;\n        mJsonString = jsonString;\n    }\n\n    @Override\n    protected ParseResult doInBackground(Void... params) {\n        System.gc();\n        long startTime = System.nanoTime();\n        int objectCount = parse(mJsonString);\n        long endTime = System.nanoTime();\n        long duration = TimeUnit.NANOSECONDS.toMicros(endTime - startTime);\n\n        return new ParseResult(duration, objectCount);\n    }\n\n    @Override\n    protected void onPostExecute(ParseResult parseResult) {\n        mParseListener.onComplete(this, parseResult);\n    }\n\n    protected abstract int parse(String json);\n}\n"
  },
  {
    "path": "BenchmarkDemo/app/src/main/java/com/bluelinelabs/logansquare/demo/serializetasks/GsonSerializer.java",
    "content": "package com.bluelinelabs.logansquare.demo.serializetasks;\n\nimport com.bluelinelabs.logansquare.demo.model.Response;\nimport com.google.gson.Gson;\n\npublic class GsonSerializer extends Serializer {\n\n    private final Gson gson;\n\n    public GsonSerializer(SerializeListener parseListener, Response response, Gson gson) {\n        super(parseListener, response);\n        this.gson = gson;\n    }\n\n    @Override\n    protected String serialize(Response response) {\n        try {\n            return gson.toJson(response);\n        } catch (Exception e) {\n            return null;\n        } finally {\n            System.gc();\n        }\n    }\n}\n"
  },
  {
    "path": "BenchmarkDemo/app/src/main/java/com/bluelinelabs/logansquare/demo/serializetasks/JacksonDatabindSerializer.java",
    "content": "package com.bluelinelabs.logansquare.demo.serializetasks;\n\nimport com.bluelinelabs.logansquare.demo.model.Response;\nimport com.fasterxml.jackson.databind.ObjectMapper;\n\npublic class JacksonDatabindSerializer extends Serializer {\n\n    private final ObjectMapper objectMapper;\n\n    public JacksonDatabindSerializer(SerializeListener parseListener, Response response, ObjectMapper objectMapper) {\n        super(parseListener, response);\n        this.objectMapper = objectMapper;\n    }\n\n    @Override\n    protected String serialize(Response response) {\n        try {\n            return objectMapper.writeValueAsString(response);\n        } catch (Exception e) {\n            return null;\n        } finally {\n            System.gc();\n        }\n    }\n}\n"
  },
  {
    "path": "BenchmarkDemo/app/src/main/java/com/bluelinelabs/logansquare/demo/serializetasks/LoganSquareSerializer.java",
    "content": "package com.bluelinelabs.logansquare.demo.serializetasks;\n\nimport com.bluelinelabs.logansquare.LoganSquare;\nimport com.bluelinelabs.logansquare.demo.model.Response;\n\npublic class LoganSquareSerializer extends Serializer {\n\n    public LoganSquareSerializer(SerializeListener parseListener, Response response) {\n        super(parseListener, response);\n    }\n\n    @Override\n    protected String serialize(Response response) {\n        try {\n            return LoganSquare.serialize(response);\n        } catch (Exception e) {\n            return null;\n        } finally {\n            System.gc();\n        }\n    }\n}\n"
  },
  {
    "path": "BenchmarkDemo/app/src/main/java/com/bluelinelabs/logansquare/demo/serializetasks/MoshiSerializer.java",
    "content": "package com.bluelinelabs.logansquare.demo.serializetasks;\n\nimport com.bluelinelabs.logansquare.demo.model.Response;\nimport com.squareup.moshi.Moshi;\n\npublic class MoshiSerializer extends Serializer {\n\n    private final Moshi moshi;\n\n    public MoshiSerializer(Serializer.SerializeListener parseListener, Response response, Moshi moshi) {\n        super(parseListener, response);\n        this.moshi = moshi;\n    }\n\n    @Override\n    protected String serialize(Response response) {\n        try {\n            return moshi.adapter(Response.class).toJson(response);\n        } catch (Exception e) {\n            return null;\n        } finally {\n           System.gc();\n        }\n    }\n\n}\n"
  },
  {
    "path": "BenchmarkDemo/app/src/main/java/com/bluelinelabs/logansquare/demo/serializetasks/SerializeResult.java",
    "content": "package com.bluelinelabs.logansquare.demo.serializetasks;\n\npublic class SerializeResult {\n\n    public long runDuration;\n    public int objectsParsed;\n\n    public SerializeResult(long runDuration, int objectsSerialized) {\n        this.runDuration = runDuration;\n        this.objectsParsed = objectsSerialized;\n    }\n\n}\n"
  },
  {
    "path": "BenchmarkDemo/app/src/main/java/com/bluelinelabs/logansquare/demo/serializetasks/Serializer.java",
    "content": "package com.bluelinelabs.logansquare.demo.serializetasks;\n\nimport android.os.AsyncTask;\n\nimport com.bluelinelabs.logansquare.demo.model.Response;\n\nimport java.util.concurrent.TimeUnit;\n\npublic abstract class Serializer extends AsyncTask<Void, Void, SerializeResult> {\n\n    public interface SerializeListener {\n        void onComplete(Serializer serializer, SerializeResult serializeResult);\n    }\n\n    private final SerializeListener mParseListener;\n    private final Response mResponse;\n\n    protected Serializer(SerializeListener parseListener, Response response) {\n        mParseListener = parseListener;\n        mResponse = response;\n    }\n\n    @Override\n    protected SerializeResult doInBackground(Void... params) {\n        System.gc();\n        long startTime = System.nanoTime();\n        serialize(mResponse);\n        long endTime = System.nanoTime();\n        long duration = TimeUnit.NANOSECONDS.toMicros(endTime - startTime);\n\n        return new SerializeResult(duration, mResponse.users.size());\n    }\n\n    @Override\n    protected void onPostExecute(SerializeResult parseResult) {\n        mParseListener.onComplete(this, parseResult);\n    }\n\n    protected abstract String serialize(Response response);\n}\n"
  },
  {
    "path": "BenchmarkDemo/app/src/main/java/com/bluelinelabs/logansquare/demo/widget/BarChart.java",
    "content": "package com.bluelinelabs.logansquare.demo.widget;\n\nimport android.content.Context;\nimport android.graphics.Canvas;\nimport android.graphics.Paint;\nimport android.graphics.Rect;\nimport android.text.TextPaint;\nimport android.text.TextUtils;\nimport android.util.AttributeSet;\nimport android.view.View;\n\nimport java.util.ArrayList;\nimport java.util.Collections;\nimport java.util.List;\n\n/** Hacked together barchart view for this demo. Please do not take this as an example of a good way to do things. */\npublic class BarChart extends View {\n\n    private static final int SECTION_COUNT = 4;\n    private static final int COLUMNS_PER_SECTION = 4;\n\n    private final Section[] mSections = new Section[SECTION_COUNT];\n    private final Rect mTextBounds = new Rect();\n\n    private final Paint[] mPaints = new Paint[COLUMNS_PER_SECTION];\n    private TextPaint mTextPaint;\n    private int mColumnHeight;\n    private int mColumnPadding;\n    private int mSectionPadding;\n    private int mDividerHeight;\n    private int mTextPadding;\n\n    public BarChart(Context context) {\n        super(context);\n        init(context);\n    }\n\n    public BarChart(Context context, AttributeSet attrs) {\n        super(context, attrs);\n        init(context);\n    }\n\n    public BarChart(Context context, AttributeSet attrs, int defStyleAttr) {\n        super(context, attrs, defStyleAttr);\n        init(context);\n    }\n\n    private void init(Context context) {\n        final float density = context.getResources().getDisplayMetrics().density;\n\n        mPaints[0] = new Paint();\n        mPaints[0].setColor(0xfff5d391);\n\n        mPaints[1] = new Paint();\n        mPaints[1].setColor(0xffa9e8fe);\n\n        mPaints[2] = new Paint();\n        mPaints[2].setColor(0xffe9969c);\n\n        mPaints[3] = new Paint();\n        mPaints[3].setColor(0xffb5d951);\n\n        mTextPaint = new TextPaint();\n        mTextPaint.setColor(0xff555555);\n        mTextPaint.setAntiAlias(true);\n        mTextPaint.setTextSize(density * 12);\n\n        mColumnHeight = (int)(density * 20);\n        mColumnPadding = (int)(density * 2);\n        mSectionPadding = (int)(density * 24);\n        mDividerHeight = (int)(density * 2);\n        mTextPadding = (int)(density * 4);\n\n        for (int i = 0; i < SECTION_COUNT; i++) {\n            mSections[i] = new Section();\n        }\n    }\n\n    public void setSections(String[] titles) {\n        for (int i = 0; i < titles.length; i++) {\n            mSections[i].title = titles[i];\n        }\n    }\n\n    public void setColumnTitles(String[] titles) {\n        for (Section section : mSections) {\n            for (int i = 0; i < titles.length; i++) {\n                section.columns[i].title = titles[i];\n            }\n        }\n    }\n\n    public void clear() {\n        for (Section section : mSections) {\n            section.title = \"\";\n\n            for (Column column : section.columns) {\n                column.timings.clear();\n            }\n        }\n        invalidate();\n    }\n\n    public void addTiming(int section, int column, float timing) {\n        mSections[section].columns[column].addTiming(timing);\n        invalidate();\n    }\n\n    @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {\n        final int width = MeasureSpec.getSize(widthMeasureSpec);\n        final int height = SECTION_COUNT * mSectionPadding + SECTION_COUNT * COLUMNS_PER_SECTION * (mColumnPadding + mColumnHeight);\n        setMeasuredDimension(width, height);\n    }\n\n    @Override\n    protected void onDraw(Canvas canvas) {\n        super.onDraw(canvas);\n\n        final int height = getMeasuredHeight();\n        final int width = getMeasuredWidth();\n\n        final int heightAfterPadding = height  - mSectionPadding * SECTION_COUNT - (SECTION_COUNT * COLUMNS_PER_SECTION - 1) * mColumnPadding;\n        final int columnHeight = heightAfterPadding / (SECTION_COUNT * COLUMNS_PER_SECTION);\n\n        float[] maxTimings = new float[SECTION_COUNT];\n        for (int sectionIndex = 0; sectionIndex < SECTION_COUNT; sectionIndex++) {\n            Section section = mSections[sectionIndex];\n            float maxMs = 0;\n            for (Column column : section.columns) {\n                maxMs = Math.max(maxMs, column.getMedianTiming());\n            }\n            maxTimings[sectionIndex] = maxMs;\n        }\n\n        int currentY = mSectionPadding;\n        for (int sectionIndex = 0; sectionIndex < SECTION_COUNT; sectionIndex++) {\n            Section section = mSections[sectionIndex];\n\n            canvas.drawLine(0, currentY - mDividerHeight, width, currentY, mTextPaint);\n            canvas.drawText(section.title, mTextPadding, currentY - mTextPaint.descent(), mTextPaint);\n\n            float maxMs = maxTimings[sectionIndex];\n            if (maxMs > 0) {\n                for (int columnIndex = 0; columnIndex < COLUMNS_PER_SECTION; columnIndex++) {\n                    Column column = section.columns[columnIndex];\n                    int columnWidth = (int)(width * column.getMedianTiming() / maxMs);\n                    canvas.drawRect(0, currentY, columnWidth, currentY + columnHeight, mPaints[columnIndex]);\n\n                    String columnTitle = column.getTitle();\n                    if (!TextUtils.isEmpty(columnTitle)) {\n                        mTextPaint.getTextBounds(columnTitle, 0, columnTitle.length(), mTextBounds);\n                        canvas.drawText(columnTitle, mTextPadding, currentY + columnHeight / 2 - mTextBounds.exactCenterY(), mTextPaint);\n                    }\n\n                    currentY += columnHeight + mColumnPadding;\n                }\n                currentY += mSectionPadding;\n            }\n        }\n    }\n\n    public static class Section {\n\n        public String title;\n        private final Column[] columns;\n\n        public Section() {\n            title = \"\";\n            columns = new Column[] {new Column(), new Column(), new Column(),  new Column()};\n        }\n    }\n\n    public static class Column {\n\n        public String title;\n        private List<Float> timings = new ArrayList<>();\n\n        public String getTitle() {\n            if (timings.size() > 0) {\n                float minTime = timings.get(0);\n                float medianTime = timings.get(timings.size() / 2);\n                float maxTime = timings.get(timings.size() - 1);\n\n                return String.format(\"%s (median: %.2fms, min: %.2fms, max: %.2fms\", title, medianTime, minTime, maxTime);\n            } else {\n                return title;\n            }\n        }\n\n        public float getMedianTiming() {\n            if (timings.size() > 0) {\n                return timings.get(timings.size() / 2);\n            } else {\n                return 0;\n            }\n        }\n\n        public void addTiming(float timing) {\n            timings.add(timing);\n            Collections.sort(timings);\n        }\n    }\n\n}\n"
  },
  {
    "path": "BenchmarkDemo/app/src/main/res/layout/activity_main.xml",
    "content": "<LinearLayout\n    xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:tools=\"http://schemas.android.com/tools\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"match_parent\"\n    android:orientation=\"vertical\"\n    tools:context=\".MainActivity\">\n\n    <TextView\n        android:text=\"@string/value_prop\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        android:paddingLeft=\"@dimen/activity_horizontal_margin\"\n        android:paddingRight=\"@dimen/activity_horizontal_margin\"\n        android:paddingTop=\"@dimen/activity_vertical_margin\"\n        />\n\n    <LinearLayout\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\">\n\n        <Button\n            android:id=\"@+id/btn_parse_tests\"\n            android:layout_width=\"0dp\"\n            android:layout_height=\"wrap_content\"\n            android:layout_weight=\"1\"\n            android:layout_marginLeft=\"@dimen/activity_horizontal_margin\"\n            android:layout_marginRight=\"@dimen/activity_horizontal_margin\"\n            android:text=\"@string/parse_benchmark\"\n            />\n\n        <Button\n            android:id=\"@+id/btn_serialize_tests\"\n            android:layout_width=\"0dp\"\n            android:layout_height=\"wrap_content\"\n            android:layout_weight=\"1\"\n            android:layout_marginLeft=\"@dimen/activity_horizontal_margin\"\n            android:layout_marginRight=\"@dimen/activity_horizontal_margin\"\n            android:text=\"@string/serialize_benchmark\"\n            />\n    </LinearLayout>\n\n    <ScrollView\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\">\n\n        <com.bluelinelabs.logansquare.demo.widget.BarChart\n            android:id=\"@+id/bar_chart\"\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"wrap_content\"\n            android:layout_marginLeft=\"8dp\"\n            android:layout_marginRight=\"8dp\"\n            />\n\n    </ScrollView>\n\n</LinearLayout>\n"
  },
  {
    "path": "BenchmarkDemo/app/src/main/res/values/dimens.xml",
    "content": "<resources>\n    <!-- Default screen margins, per the Android Design guidelines. -->\n    <dimen name=\"activity_horizontal_margin\">16dp</dimen>\n    <dimen name=\"activity_vertical_margin\">16dp</dimen>\n</resources>\n"
  },
  {
    "path": "BenchmarkDemo/app/src/main/res/values/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n\n    <string name=\"app_name\">LoganSquare Demo</string>\n    <string name=\"value_prop\">Welcome to the demo of LoganSquare! Just hit the \"Parse Benchmark\" or \"Serialize Benchmark\" button to see how our library stacks up against the library you\\'re probably using now.</string>\n    <string name=\"parse_benchmark\">Parse Benchmark</string>\n    <string name=\"serialize_benchmark\">Serialize Benchmark</string>\n\n</resources>\n"
  },
  {
    "path": "BenchmarkDemo/app/src/main/res/values/styles.xml",
    "content": "<resources>\n\n    <!-- Base application theme. -->\n    <style name=\"AppTheme\" parent=\"Theme.AppCompat.Light.DarkActionBar\">\n        <!-- Customize your theme here. -->\n    </style>\n\n</resources>\n"
  },
  {
    "path": "BenchmarkDemo/app/src/main/res/values-w820dp/dimens.xml",
    "content": "<resources>\n    <!-- Example customization of dimensions originally defined in res/values/dimens.xml\n         (such as screen margins) for screens with more than 820dp of available width. This\n         would include 7\" and 10\" devices in landscape (~960dp and ~1280dp respectively). -->\n    <dimen name=\"activity_horizontal_margin\">64dp</dimen>\n</resources>\n"
  },
  {
    "path": "BenchmarkDemo/build.gradle",
    "content": "// Top-level build file where you can add configuration options common to all sub-projects/modules.\n\nbuildscript {\n    repositories {\n        jcenter()\n    }\n    dependencies {\n        classpath 'com.android.tools.build:gradle:1.3.0'\n\n        // NOTE: Do not place your application dependencies here; they belong\n        // in the individual module build.gradle files\n    }\n}\n\nallprojects {\n    repositories {\n        jcenter()\n        mavenLocal()\n    }\n}\n"
  },
  {
    "path": "BenchmarkDemo/gradle/wrapper/gradle-wrapper.properties",
    "content": "#Wed Apr 10 15:27:10 PDT 2013\ndistributionBase=GRADLE_USER_HOME\ndistributionPath=wrapper/dists\nzipStoreBase=GRADLE_USER_HOME\nzipStorePath=wrapper/dists\ndistributionUrl=https\\://services.gradle.org/distributions/gradle-2.4-all.zip\n"
  },
  {
    "path": "BenchmarkDemo/gradlew",
    "content": "#!/usr/bin/env bash\n\n##############################################################################\n##\n##  Gradle start up script for UN*X\n##\n##############################################################################\n\n# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.\nDEFAULT_JVM_OPTS=\"\"\n\nAPP_NAME=\"Gradle\"\nAPP_BASE_NAME=`basename \"$0\"`\n\n# Use the maximum available, or set MAX_FD != -1 to use that value.\nMAX_FD=\"maximum\"\n\nwarn ( ) {\n    echo \"$*\"\n}\n\ndie ( ) {\n    echo\n    echo \"$*\"\n    echo\n    exit 1\n}\n\n# OS specific support (must be 'true' or 'false').\ncygwin=false\nmsys=false\ndarwin=false\ncase \"`uname`\" in\n  CYGWIN* )\n    cygwin=true\n    ;;\n  Darwin* )\n    darwin=true\n    ;;\n  MINGW* )\n    msys=true\n    ;;\nesac\n\n# For Cygwin, ensure paths are in UNIX format before anything is touched.\nif $cygwin ; then\n    [ -n \"$JAVA_HOME\" ] && JAVA_HOME=`cygpath --unix \"$JAVA_HOME\"`\nfi\n\n# Attempt to set APP_HOME\n# Resolve links: $0 may be a link\nPRG=\"$0\"\n# Need this for relative symlinks.\nwhile [ -h \"$PRG\" ] ; do\n    ls=`ls -ld \"$PRG\"`\n    link=`expr \"$ls\" : '.*-> \\(.*\\)$'`\n    if expr \"$link\" : '/.*' > /dev/null; then\n        PRG=\"$link\"\n    else\n        PRG=`dirname \"$PRG\"`\"/$link\"\n    fi\ndone\nSAVED=\"`pwd`\"\ncd \"`dirname \\\"$PRG\\\"`/\" >&-\nAPP_HOME=\"`pwd -P`\"\ncd \"$SAVED\" >&-\n\nCLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar\n\n# Determine the Java command to use to start the JVM.\nif [ -n \"$JAVA_HOME\" ] ; then\n    if [ -x \"$JAVA_HOME/jre/sh/java\" ] ; then\n        # IBM's JDK on AIX uses strange locations for the executables\n        JAVACMD=\"$JAVA_HOME/jre/sh/java\"\n    else\n        JAVACMD=\"$JAVA_HOME/bin/java\"\n    fi\n    if [ ! -x \"$JAVACMD\" ] ; then\n        die \"ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME\n\nPlease set the JAVA_HOME variable in your environment to match the\nlocation of your Java installation.\"\n    fi\nelse\n    JAVACMD=\"java\"\n    which java >/dev/null 2>&1 || die \"ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.\n\nPlease set the JAVA_HOME variable in your environment to match the\nlocation of your Java installation.\"\nfi\n\n# Increase the maximum file descriptors if we can.\nif [ \"$cygwin\" = \"false\" -a \"$darwin\" = \"false\" ] ; then\n    MAX_FD_LIMIT=`ulimit -H -n`\n    if [ $? -eq 0 ] ; then\n        if [ \"$MAX_FD\" = \"maximum\" -o \"$MAX_FD\" = \"max\" ] ; then\n            MAX_FD=\"$MAX_FD_LIMIT\"\n        fi\n        ulimit -n $MAX_FD\n        if [ $? -ne 0 ] ; then\n            warn \"Could not set maximum file descriptor limit: $MAX_FD\"\n        fi\n    else\n        warn \"Could not query maximum file descriptor limit: $MAX_FD_LIMIT\"\n    fi\nfi\n\n# For Darwin, add options to specify how the application appears in the dock\nif $darwin; then\n    GRADLE_OPTS=\"$GRADLE_OPTS \\\"-Xdock:name=$APP_NAME\\\" \\\"-Xdock:icon=$APP_HOME/media/gradle.icns\\\"\"\nfi\n\n# For Cygwin, switch paths to Windows format before running java\nif $cygwin ; then\n    APP_HOME=`cygpath --path --mixed \"$APP_HOME\"`\n    CLASSPATH=`cygpath --path --mixed \"$CLASSPATH\"`\n\n    # We build the pattern for arguments to be converted via cygpath\n    ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`\n    SEP=\"\"\n    for dir in $ROOTDIRSRAW ; do\n        ROOTDIRS=\"$ROOTDIRS$SEP$dir\"\n        SEP=\"|\"\n    done\n    OURCYGPATTERN=\"(^($ROOTDIRS))\"\n    # Add a user-defined pattern to the cygpath arguments\n    if [ \"$GRADLE_CYGPATTERN\" != \"\" ] ; then\n        OURCYGPATTERN=\"$OURCYGPATTERN|($GRADLE_CYGPATTERN)\"\n    fi\n    # Now convert the arguments - kludge to limit ourselves to /bin/sh\n    i=0\n    for arg in \"$@\" ; do\n        CHECK=`echo \"$arg\"|egrep -c \"$OURCYGPATTERN\" -`\n        CHECK2=`echo \"$arg\"|egrep -c \"^-\"`                                 ### Determine if an option\n\n        if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then                    ### Added a condition\n            eval `echo args$i`=`cygpath --path --ignore --mixed \"$arg\"`\n        else\n            eval `echo args$i`=\"\\\"$arg\\\"\"\n        fi\n        i=$((i+1))\n    done\n    case $i in\n        (0) set -- ;;\n        (1) set -- \"$args0\" ;;\n        (2) set -- \"$args0\" \"$args1\" ;;\n        (3) set -- \"$args0\" \"$args1\" \"$args2\" ;;\n        (4) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" ;;\n        (5) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" ;;\n        (6) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" \"$args5\" ;;\n        (7) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" \"$args5\" \"$args6\" ;;\n        (8) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" \"$args5\" \"$args6\" \"$args7\" ;;\n        (9) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" \"$args5\" \"$args6\" \"$args7\" \"$args8\" ;;\n    esac\nfi\n\n# Split up the JVM_OPTS And GRADLE_OPTS values into an array, following the shell quoting and substitution rules\nfunction splitJvmOpts() {\n    JVM_OPTS=(\"$@\")\n}\neval splitJvmOpts $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS\nJVM_OPTS[${#JVM_OPTS[*]}]=\"-Dorg.gradle.appname=$APP_BASE_NAME\"\n\nexec \"$JAVACMD\" \"${JVM_OPTS[@]}\" -classpath \"$CLASSPATH\" org.gradle.wrapper.GradleWrapperMain \"$@\"\n"
  },
  {
    "path": "BenchmarkDemo/gradlew.bat",
    "content": "@if \"%DEBUG%\" == \"\" @echo off\r\n@rem ##########################################################################\r\n@rem\r\n@rem  Gradle startup script for Windows\r\n@rem\r\n@rem ##########################################################################\r\n\r\n@rem Set local scope for the variables with windows NT shell\r\nif \"%OS%\"==\"Windows_NT\" setlocal\r\n\r\n@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.\r\nset DEFAULT_JVM_OPTS=\r\n\r\nset DIRNAME=%~dp0\r\nif \"%DIRNAME%\" == \"\" set DIRNAME=.\r\nset APP_BASE_NAME=%~n0\r\nset APP_HOME=%DIRNAME%\r\n\r\n@rem Find java.exe\r\nif defined JAVA_HOME goto findJavaFromJavaHome\r\n\r\nset JAVA_EXE=java.exe\r\n%JAVA_EXE% -version >NUL 2>&1\r\nif \"%ERRORLEVEL%\" == \"0\" goto init\r\n\r\necho.\r\necho ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.\r\necho.\r\necho Please set the JAVA_HOME variable in your environment to match the\r\necho location of your Java installation.\r\n\r\ngoto fail\r\n\r\n:findJavaFromJavaHome\r\nset JAVA_HOME=%JAVA_HOME:\"=%\r\nset JAVA_EXE=%JAVA_HOME%/bin/java.exe\r\n\r\nif exist \"%JAVA_EXE%\" goto init\r\n\r\necho.\r\necho ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%\r\necho.\r\necho Please set the JAVA_HOME variable in your environment to match the\r\necho location of your Java installation.\r\n\r\ngoto fail\r\n\r\n:init\r\n@rem Get command-line arguments, handling Windowz variants\r\n\r\nif not \"%OS%\" == \"Windows_NT\" goto win9xME_args\r\nif \"%@eval[2+2]\" == \"4\" goto 4NT_args\r\n\r\n:win9xME_args\r\n@rem Slurp the command line arguments.\r\nset CMD_LINE_ARGS=\r\nset _SKIP=2\r\n\r\n:win9xME_args_slurp\r\nif \"x%~1\" == \"x\" goto execute\r\n\r\nset CMD_LINE_ARGS=%*\r\ngoto execute\r\n\r\n:4NT_args\r\n@rem Get arguments from the 4NT Shell from JP Software\r\nset CMD_LINE_ARGS=%$\r\n\r\n:execute\r\n@rem Setup the command line\r\n\r\nset CLASSPATH=%APP_HOME%\\gradle\\wrapper\\gradle-wrapper.jar\r\n\r\n@rem Execute Gradle\r\n\"%JAVA_EXE%\" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% \"-Dorg.gradle.appname=%APP_BASE_NAME%\" -classpath \"%CLASSPATH%\" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS%\r\n\r\n:end\r\n@rem End local scope for the variables with windows NT shell\r\nif \"%ERRORLEVEL%\"==\"0\" goto mainEnd\r\n\r\n:fail\r\nrem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of\r\nrem the _cmd.exe /c_ return code!\r\nif  not \"\" == \"%GRADLE_EXIT_CONSOLE%\" exit 1\r\nexit /b 1\r\n\r\n:mainEnd\r\nif \"%OS%\"==\"Windows_NT\" endlocal\r\n\r\n:omega\r\n"
  },
  {
    "path": "BenchmarkDemo/settings.gradle",
    "content": "include ':app'\n"
  },
  {
    "path": "CHANGELOG.md",
    "content": "## 1.1.0\n\n* Added support for only parsing or only serializing certain fields using the `@JsonIgnore` annotation's new `ignorePolicy` parameter.\n* Potentially breaking change: Added support for optionally serializing null fields in an object using the `serializeNullObjects` parameter in the `@JsonObject`. The default is `false` (null fields will not be serialized). LoganSquare 1.0.x always serialized these, so if you're expecting them to be serialized, set this to `true` for your `@JsonObject`s.\n* Potentially breaking change: Added support for optionally serializing null elements in a collection or array using the `serializeNullCollectionElements` parameter in the `@JsonObject`. The default is `false` (null fields will not be serialized). LoganSquare 1.0.x always serialized these, so if you're expecting them to be serialized, set this to `true` for your `@JsonObject`s.\n\n## 1.0.4\n\n* Added support for parsing arrays\n* Squashed some more bugs\n\n## 1.0.3\n\n* Added support for naming policies, which alleviate the need to add `name` parameters to all of your `@JsonField` annotations if your API follows a certain naming scheme.\n* Added support for different field detection policies. The default policy is `ANNOTATIONS_ONLY`, which tells LoganSquare to only parse and serialize fields that have been annotated as `@JsonField`s. Other options are `NONPRIVATE_FIELDS` and `NONPRIVATE_FIELDS_AND_ACCESSORS`, which tell LoganSquare to use all non-private fields and all non-private fields and accessors, respectively, even if they aren't annotated as a `@JsonField`. Fields can be excluded using `@JsonIgnore`.\n* Squashed some bugs.\n\n## 1.0.1\n\n* Just simplified some annotations before the general public tried it out.\n\n## 1.0.0\n\n* First release."
  },
  {
    "path": "LICENSE.txt",
    "content": "\n                                 Apache License\n                           Version 2.0, January 2004\n                        http://www.apache.org/licenses/\n\n   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\n\n   1. Definitions.\n\n      \"License\" shall mean the terms and conditions for use, reproduction,\n      and distribution as defined by Sections 1 through 9 of this document.\n\n      \"Licensor\" shall mean the copyright owner or entity authorized by\n      the copyright owner that is granting the License.\n\n      \"Legal Entity\" shall mean the union of the acting entity and all\n      other entities that control, are controlled by, or are under common\n      control with that entity. For the purposes of this definition,\n      \"control\" means (i) the power, direct or indirect, to cause the\n      direction or management of such entity, whether by contract or\n      otherwise, or (ii) ownership of fifty percent (50%) or more of the\n      outstanding shares, or (iii) beneficial ownership of such entity.\n\n      \"You\" (or \"Your\") shall mean an individual or Legal Entity\n      exercising permissions granted by this License.\n\n      \"Source\" form shall mean the preferred form for making modifications,\n      including but not limited to software source code, documentation\n      source, and configuration files.\n\n      \"Object\" form shall mean any form resulting from mechanical\n      transformation or translation of a Source form, including but\n      not limited to compiled object code, generated documentation,\n      and conversions to other media types.\n\n      \"Work\" shall mean the work of authorship, whether in Source or\n      Object form, made available under the License, as indicated by a\n      copyright notice that is included in or attached to the work\n      (an example is provided in the Appendix below).\n\n      \"Derivative Works\" shall mean any work, whether in Source or Object\n      form, that is based on (or derived from) the Work and for which the\n      editorial revisions, annotations, elaborations, or other modifications\n      represent, as a whole, an original work of authorship. For the purposes\n      of this License, Derivative Works shall not include works that remain\n      separable from, or merely link (or bind by name) to the interfaces of,\n      the Work and Derivative Works thereof.\n\n      \"Contribution\" shall mean any work of authorship, including\n      the original version of the Work and any modifications or additions\n      to that Work or Derivative Works thereof, that is intentionally\n      submitted to Licensor for inclusion in the Work by the copyright owner\n      or by an individual or Legal Entity authorized to submit on behalf of\n      the copyright owner. For the purposes of this definition, \"submitted\"\n      means any form of electronic, verbal, or written communication sent\n      to the Licensor or its representatives, including but not limited to\n      communication on electronic mailing lists, source code control systems,\n      and issue tracking systems that are managed by, or on behalf of, the\n      Licensor for the purpose of discussing and improving the Work, but\n      excluding communication that is conspicuously marked or otherwise\n      designated in writing by the copyright owner as \"Not a Contribution.\"\n\n      \"Contributor\" shall mean Licensor and any individual or Legal Entity\n      on behalf of whom a Contribution has been received by Licensor and\n      subsequently incorporated within the Work.\n\n   2. Grant of Copyright License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      copyright license to reproduce, prepare Derivative Works of,\n      publicly display, publicly perform, sublicense, and distribute the\n      Work and such Derivative Works in Source or Object form.\n\n   3. Grant of Patent License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      (except as stated in this section) patent license to make, have made,\n      use, offer to sell, sell, import, and otherwise transfer the Work,\n      where such license applies only to those patent claims licensable\n      by such Contributor that are necessarily infringed by their\n      Contribution(s) alone or by combination of their Contribution(s)\n      with the Work to which such Contribution(s) was submitted. If You\n      institute patent litigation against any entity (including a\n      cross-claim or counterclaim in a lawsuit) alleging that the Work\n      or a Contribution incorporated within the Work constitutes direct\n      or contributory patent infringement, then any patent licenses\n      granted to You under this License for that Work shall terminate\n      as of the date such litigation is filed.\n\n   4. Redistribution. You may reproduce and distribute copies of the\n      Work or Derivative Works thereof in any medium, with or without\n      modifications, and in Source or Object form, provided that You\n      meet the following conditions:\n\n      (a) You must give any other recipients of the Work or\n          Derivative Works a copy of this License; and\n\n      (b) You must cause any modified files to carry prominent notices\n          stating that You changed the files; and\n\n      (c) You must retain, in the Source form of any Derivative Works\n          that You distribute, all copyright, patent, trademark, and\n          attribution notices from the Source form of the Work,\n          excluding those notices that do not pertain to any part of\n          the Derivative Works; and\n\n      (d) If the Work includes a \"NOTICE\" text file as part of its\n          distribution, then any Derivative Works that You distribute must\n          include a readable copy of the attribution notices contained\n          within such NOTICE file, excluding those notices that do not\n          pertain to any part of the Derivative Works, in at least one\n          of the following places: within a NOTICE text file distributed\n          as part of the Derivative Works; within the Source form or\n          documentation, if provided along with the Derivative Works; or,\n          within a display generated by the Derivative Works, if and\n          wherever such third-party notices normally appear. The contents\n          of the NOTICE file are for informational purposes only and\n          do not modify the License. You may add Your own attribution\n          notices within Derivative Works that You distribute, alongside\n          or as an addendum to the NOTICE text from the Work, provided\n          that such additional attribution notices cannot be construed\n          as modifying the License.\n\n      You may add Your own copyright statement to Your modifications and\n      may provide additional or different license terms and conditions\n      for use, reproduction, or distribution of Your modifications, or\n      for any such Derivative Works as a whole, provided Your use,\n      reproduction, and distribution of the Work otherwise complies with\n      the conditions stated in this License.\n\n   5. Submission of Contributions. Unless You explicitly state otherwise,\n      any Contribution intentionally submitted for inclusion in the Work\n      by You to the Licensor shall be under the terms and conditions of\n      this License, without any additional terms or conditions.\n      Notwithstanding the above, nothing herein shall supersede or modify\n      the terms of any separate license agreement you may have executed\n      with Licensor regarding such Contributions.\n\n   6. Trademarks. This License does not grant permission to use the trade\n      names, trademarks, service marks, or product names of the Licensor,\n      except as required for reasonable and customary use in describing the\n      origin of the Work and reproducing the content of the NOTICE file.\n\n   7. Disclaimer of Warranty. Unless required by applicable law or\n      agreed to in writing, Licensor provides the Work (and each\n      Contributor provides its Contributions) on an \"AS IS\" BASIS,\n      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or\n      implied, including, without limitation, any warranties or conditions\n      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A\n      PARTICULAR PURPOSE. You are solely responsible for determining the\n      appropriateness of using or redistributing the Work and assume any\n      risks associated with Your exercise of permissions under this License.\n\n   8. Limitation of Liability. In no event and under no legal theory,\n      whether in tort (including negligence), contract, or otherwise,\n      unless required by applicable law (such as deliberate and grossly\n      negligent acts) or agreed to in writing, shall any Contributor be\n      liable to You for damages, including any direct, indirect, special,\n      incidental, or consequential damages of any character arising as a\n      result of this License or out of the use or inability to use the\n      Work (including but not limited to damages for loss of goodwill,\n      work stoppage, computer failure or malfunction, or any and all\n      other commercial damages or losses), even if such Contributor\n      has been advised of the possibility of such damages.\n\n   9. Accepting Warranty or Additional Liability. While redistributing\n      the Work or Derivative Works thereof, You may choose to offer,\n      and charge a fee for, acceptance of support, warranty, indemnity,\n      or other liability obligations and/or rights consistent with this\n      License. However, in accepting such obligations, You may act only\n      on Your own behalf and on Your sole responsibility, not on behalf\n      of any other Contributor, and only if You agree to indemnify,\n      defend, and hold each Contributor harmless for any liability\n      incurred by, or claims asserted against, such Contributor by reason\n      of your accepting any such warranty or additional liability.\n\n   END OF TERMS AND CONDITIONS\n\n   APPENDIX: How to apply the Apache License to your work.\n\n      To apply the Apache License to your work, attach the following\n      boilerplate notice, with the fields enclosed by brackets \"[]\"\n      replaced with your own identifying information. (Don't include\n      the brackets!)  The text should be enclosed in the appropriate\n      comment syntax for the file format. We also recommend that a\n      file or class name and description of purpose be included on the\n      same \"printed page\" as the copyright notice for easier\n      identification within third-party archives.\n\n   Copyright [yyyy] [name of copyright owner]\n\n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n\n       http://www.apache.org/licenses/LICENSE-2.0\n\n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n"
  },
  {
    "path": "README.md",
    "content": "[![Android Arsenal](https://img.shields.io/badge/Android%20Arsenal-LoganSquare-brightgreen.svg?style=flat)](https://android-arsenal.com/details/1/1550) [![Android Weekly](https://img.shields.io/badge/Android%20Weekly-141-blue.svg?style=flat)](http://androidweekly.net/issues/issue-141) [![Travis Build](https://travis-ci.org/bluelinelabs/LoganSquare.svg)](https://travis-ci.org/bluelinelabs/LoganSquare)\n\n#LoganSquare\n\nThe fastest JSON parsing and serializing library available for Android. Based on Jackson's streaming API, LoganSquare is able to consistently outperform GSON and Jackson's Databind library by 400% or more<sup>[1](#1)</sup>. By relying on compile-time annotation processing to generate code, you know that your JSON will parse and serialize faster than any other method available.\n\nBy using this library, you'll be able to utilize the power of Jackson's streaming API without having to code tedius, low-level code involving `JsonParser`s or `JsonGenerator`s. Instead, just annotate your model objects as a `@JsonObject` and your fields as `@JsonField`s and we'll do the heavy lifting for you.\n\nDon't believe it could improve upon Jackson Databind's or GSON's performance that much? Well, then check out the nifty graphs below for yourself. Not convinced? Feel free to build and run the BenchmarkDemo app included in this repository.\n\n<a name=\"1\"></a>\n*<sup>1</sup> <sub>Note: Our \"400% or more\" performance improvement metric was determined using ART. While LoganSquare still comes out on top with Dalvik, it seems as though the comparison is much closer. The benchmarks shown are actual screenshots taken from a 2nd gen Moto X.<sub>*\n\n![Benchmarks](docs/benchmarks.jpg)\n\n##Download\n\nNote that Gradle is the only supported build configuration for LoganSquare. To add the library to your app's build.gradle file.\n\n```groovy\nbuildscript {\n    repositories {\n        jcenter()\n    }\n    dependencies {\n        classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8'\n    }\n}\napply plugin: 'com.neenbedankt.android-apt'\n\ndependencies {\n    apt 'com.bluelinelabs:logansquare-compiler:1.3.6'\n    compile 'com.bluelinelabs:logansquare:1.3.6'\n}\n\n```\nFor the curious, the buildscript and apply plugin lines add the [apt plugin](https://bitbucket.org/hvisser/android-apt), which is what allows us to do compile-time annotation processing. The first dependency is what tells Gradle to process your JSON annotations, and the second dependency is our tiny 19kb runtime library that interfaces with the generated code for you.\n\n##Usage\n\nUsing LoganSquare is about as easy as it gets. Here are a few docs to get you started:\n\n * [Creating your models](docs/Models.md)\n * [Parsing from JSON](docs/Parsing.md)\n * [Serializing to JSON](docs/Serializing.md)\n * [Supporting custom types](docs/TypeConverters.md)\n\n##Proguard\nLike all libraries that generate dynamic code, Proguard might think some classes are unused and remove them. To prevent this, the following lines can be added to your proguard config file.\n\n```\n-keep class com.bluelinelabs.logansquare.** { *; }\n-keep @com.bluelinelabs.logansquare.annotation.JsonObject class *\n-keep class **$$JsonObjectMapper { *; }\n```\n\n##Why LoganSquare?\n\nWe're BlueLine Labs, a mobile app development company based in Chicago. We love this city so much that we named our company after the blue line of the iconic 'L.' And what's one of the most popular stops on the blue line? Well, that would be Logan Square of course. Does it have anything to do with JSON? Nope, but we're okay with that.\n\n##Props\n\n * [Jackson's streaming API](https://github.com/FasterXML/jackson-core) for being a super-fast, awesome base for this project.\n * [Instagram's ig-json-parser](https://github.com/Instagram/ig-json-parser) for giving us the idea for this project.\n * [Jake Wharton's Butterknife](https://github.com/JakeWharton/butterknife) for being a great reference for annotation processing and code generation.\n\n##License\n\n    Copyright 2015 BlueLine Labs, Inc.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n       http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n\n"
  },
  {
    "path": "build.gradle",
    "content": "buildscript {\n    repositories {\n        jcenter()\n    }\n    dependencies {\n        classpath 'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.4'\n    }\n}\n\nallprojects {\n    apply plugin: 'idea'\n\n    group = 'com.bluelinelabs'\n    version = '1.3.6'\n}\n\nsubprojects {\n    apply plugin: 'java'\n    apply plugin: 'maven-publish'\n    apply plugin: 'com.jfrog.bintray'\n\n    sourceCompatibility = 1.7\n    targetCompatibility = 1.7\n\n    task sourcesJar(type: Jar, dependsOn: classes) {\n        classifier = 'sources'\n        from sourceSets.main.allSource\n    }\n\n    task javadocJar(type: Jar, dependsOn: javadoc) {\n        classifier = 'javadoc'\n        from javadoc.destinationDir\n    }\n\n    artifacts {\n        archives sourcesJar, javadocJar\n    }\n\n    repositories {\n        jcenter()\n    }\n\n    publishing {\n        publications {\n            mavenJava(MavenPublication) {\n                from components.java\n                artifact sourcesJar\n                artifact javadocJar\n                artifactId project.ext.artifactId\n\n                pom.withXml {\n                    def node = asNode()\n                    node.appendNode('name', 'LoganSquare')\n                    node.appendNode('description', 'Screaming fast JSON parsing and serialization library for Android.')\n                    node.appendNode('url', 'https://github.com/bluelinelabs/LoganSquare')\n\n                    def organizationNode = node.appendNode('organization')\n                    organizationNode.appendNode('name', 'BlueLine Labs')\n                    organizationNode.appendNode('url', 'http://bluelinelabs.com')\n\n                    def scmNode = node.appendNode('scm')\n                    scmNode.appendNode('connection', 'scm:git:https://github.com/bluelinelabs/LoganSquare')\n                    scmNode.appendNode('developerConnection', 'scm:git:https://github.com/bluelinelabs/LoganSquare')\n                    scmNode.appendNode('url', 'https://github.com/bluelinelabs/LoganSquare')\n\n                    def developersNode = node.appendNode('developers')\n                    def ericNode = developersNode.appendNode('developer')\n                    ericNode.appendNode('id', 'erickuck')\n                    ericNode.appendNode('name', 'Eric Kuck')\n\n                    def licensesNode = node.appendNode('licenses')\n                    def licenseNode = licensesNode.appendNode('license')\n                    licenseNode.appendNode('name', 'Apache 2.0')\n                    licenseNode.appendNode('url', 'http://www.apache.org/licenses/LICENSE-2.0.txt')\n\n                }\n            }\n        }\n    }\n\n    bintray {\n        user = project.hasProperty('bintray_username') ? bintray_username : ''\n        key = project.hasProperty('bintray_api_key') ? bintray_api_key : ''\n        publications = ['mavenJava']\n\n        dryRun = false\n        publish = false\n\n        pkg {\n            repo = 'bluelinelabs'\n            userOrg = 'bluelinelabs'\n            name = 'LoganSquare'\n            desc = 'Screaming fast JSON parsing and serialization library for Android.'\n            websiteUrl = 'https://github.com/bluelinelabs/LoganSquare'\n            issueTrackerUrl = 'https://github.com/bluelinelabs/LoganSquare/issues'\n            vcsUrl = 'https://github.com/bluelinelabs/LoganSquare'\n            licenses = ['Apache-2.0']\n            labels = ['json', 'android', 'parser', 'serializer', 'jackson']\n            publicDownloadNumbers = true\n            version {\n                name = project.version\n                gpg {\n                    sign = true\n                    passphrase = project.hasProperty('bintray_gpg_passphrase') ? bintray_gpg_passphrase : ''\n                }\n                mavenCentralSync {\n                    sync = false\n                    user = project.hasProperty('maven_central_username') ? maven_central_username : ''\n                    password = project.hasProperty('maven_central_password') ? maven_central_password : ''\n                    close = '1'\n                }\n            }\n        }\n    }\n}\n\ntask wrapper(type: Wrapper) {\n    gradleVersion = '2.9'\n}\n"
  },
  {
    "path": "core/build.gradle",
    "content": "apply plugin: 'java'\n\next.artifactId = 'logansquare'\n\ndependencies {\n    compile 'com.fasterxml.jackson.core:jackson-core:2.5.1'\n}\n"
  },
  {
    "path": "core/src/main/java/com/bluelinelabs/logansquare/Constants.java",
    "content": "package com.bluelinelabs.logansquare;\n\npublic class Constants {\n\n    /** The suffix that will be added to all generated classes */\n    public static final String MAPPER_CLASS_SUFFIX = \"$$JsonObjectMapper\";\n\n}\n"
  },
  {
    "path": "core/src/main/java/com/bluelinelabs/logansquare/JsonMapper.java",
    "content": "package com.bluelinelabs.logansquare;\n\nimport com.fasterxml.jackson.core.JsonGenerator;\nimport com.fasterxml.jackson.core.JsonParser;\nimport com.fasterxml.jackson.core.JsonToken;\n\nimport java.io.IOException;\nimport java.io.InputStream;\nimport java.io.OutputStream;\nimport java.io.StringWriter;\nimport java.util.ArrayList;\nimport java.util.HashMap;\nimport java.util.List;\nimport java.util.Map;\n\n/** The class that handles all parsing and serialization of @JsonObject's */\npublic abstract class JsonMapper<T> {\n\n    /**\n     * Parse an object from a pre-configured JsonParser object.\n     *\n     * @param jsonParser The pre-configured JsonParser\n     */\n    public abstract T parse(JsonParser jsonParser) throws IOException;\n\n    /**\n     * Parse a single field from a pre-configured JsonParser object into a T instance.\n     *\n     * @param instance The instance of the object that the JsonParser should parse into\n     * @param fieldName The name of the field that should be parsed\n     * @param jsonParser The pre-configured JsonParser\n     */\n    public abstract void parseField(T instance, String fieldName, JsonParser jsonParser) throws IOException;\n\n    /**\n     * Serialize an object to a pre-configured JsonGenerator object.\n     *\n     * @param object The object to serialize.\n     * @param generator The pre-configured JsonGenerator being written to.\n     * @param writeStartAndEnd True if writeStartObject() should be called before and writeEndObject() should be called after serializing. False if not.\n     */\n    public abstract void serialize(T object, JsonGenerator generator, boolean writeStartAndEnd) throws IOException;\n\n    /**\n     * Parse an object from an InputStream.\n     *\n     * @param is The InputStream, most likely from your networking library.\n     */\n    public T parse(InputStream is) throws IOException {\n        JsonParser jsonParser = LoganSquare.JSON_FACTORY.createParser(is);\n        jsonParser.nextToken();\n        return parse(jsonParser);\n    }\n\n    /**\n     * Parse an object from a byte array. Note: parsing from an InputStream should be preferred over parsing from a byte array if possible.\n     *\n     * @param byteArray The byte array being parsed.\n     */\n    public T parse(byte[] byteArray) throws IOException {\n        JsonParser jsonParser = LoganSquare.JSON_FACTORY.createParser(byteArray);\n        jsonParser.nextToken();\n        return parse(jsonParser);\n    }\n\n    /**\n     * Parse an object from a char array. Note: parsing from an InputStream should be preferred over parsing from a char array if possible.\n     *\n     * @param charArray The char array being parsed.\n     */\n    public T parse(char[] charArray) throws IOException {\n        JsonParser jsonParser = LoganSquare.JSON_FACTORY.createParser(charArray);\n        jsonParser.nextToken();\n        return parse(jsonParser);\n    }\n\n    /**\n     * Parse an object from a String. Note: parsing from an InputStream should be preferred over parsing from a String if possible.\n     *\n     * @param jsonString The JSON string being parsed.\n     */\n    public T parse(String jsonString) throws IOException {\n        JsonParser jsonParser = LoganSquare.JSON_FACTORY.createParser(jsonString);\n        jsonParser.nextToken();\n        return parse(jsonParser);\n    }\n\n    /**\n     * Parse a list of objects from an InputStream.\n     *\n     * @param is The inputStream, most likely from your networking library.\n     */\n    public List<T> parseList(InputStream is) throws IOException {\n        JsonParser jsonParser = LoganSquare.JSON_FACTORY.createParser(is);\n        jsonParser.nextToken();\n        return parseList(jsonParser);\n    }\n\n    /**\n     * Parse a list of objects from a byte array. Note: parsing from an InputStream should be preferred over parsing from a byte array if possible.\n     *\n     * @param byteArray The inputStream, most likely from your networking library.\n     */\n    public List<T> parseList(byte[] byteArray) throws IOException {\n        JsonParser jsonParser = LoganSquare.JSON_FACTORY.createParser(byteArray);\n        jsonParser.nextToken();\n        return parseList(jsonParser);\n    }\n\n    /**\n     * Parse a list of objects from a char array. Note: parsing from an InputStream should be preferred over parsing from a char array if possible.\n     *\n     * @param charArray The char array, most likely from your networking library.\n     */\n    public List<T> parseList(char[] charArray) throws IOException {\n        JsonParser jsonParser = LoganSquare.JSON_FACTORY.createParser(charArray);\n        jsonParser.nextToken();\n        return parseList(jsonParser);\n    }\n\n    /**\n     * Parse a list of objects from a String. Note: parsing from an InputStream should be preferred over parsing from a String if possible.\n     *\n     * @param jsonString The JSON string being parsed.\n     */\n    public List<T> parseList(String jsonString) throws IOException {\n        JsonParser jsonParser = LoganSquare.JSON_FACTORY.createParser(jsonString);\n        jsonParser.nextToken();\n        return parseList(jsonParser);\n    }\n\n    /**\n     * Parse a list of objects from a JsonParser.\n     *\n     * @param jsonParser The JsonParser, preconfigured to be at the START_ARRAY token.\n     */\n    public List<T> parseList(JsonParser jsonParser) throws IOException {\n        List<T> list = new ArrayList<>();\n        if (jsonParser.getCurrentToken() == JsonToken.START_ARRAY) {\n            while (jsonParser.nextToken() != JsonToken.END_ARRAY) {\n                list.add(parse(jsonParser));\n            }\n        }\n        return list;\n    }\n\n    /**\n     * Parse a map of objects from an InputStream.\n     *\n     * @param is The inputStream, most likely from your networking library.\n     */\n    public Map<String, T> parseMap(InputStream is) throws IOException {\n        JsonParser jsonParser = LoganSquare.JSON_FACTORY.createParser(is);\n        jsonParser.nextToken();\n        return parseMap(jsonParser);\n    }\n\n    /**\n     * Parse a map of objects from a byte array. Note: parsing from an InputStream should be preferred over parsing from a byte array if possible.\n     *\n     * @param byteArray The byte array string being parsed.\n     */\n    public Map<String, T> parseMap(byte[] byteArray) throws IOException {\n        JsonParser jsonParser = LoganSquare.JSON_FACTORY.createParser(byteArray);\n        jsonParser.nextToken();\n        return parseMap(jsonParser);\n    }\n\n    /**\n     * Parse a map of objects from a char array. Note: parsing from an InputStream should be preferred over parsing from a char array if possible.\n     *\n     * @param charArray The char array being parsed.\n     */\n    public Map<String, T> parseMap(char[] charArray) throws IOException {\n        JsonParser jsonParser = LoganSquare.JSON_FACTORY.createParser(charArray);\n        jsonParser.nextToken();\n        return parseMap(jsonParser);\n    }\n\n    /**\n     * Parse a map of objects from a String. Note: parsing from an InputStream should be preferred over parsing from a String if possible.\n     *\n     * @param jsonString The JSON string being parsed.\n     */\n    public Map<String, T> parseMap(String jsonString) throws IOException {\n        JsonParser jsonParser = LoganSquare.JSON_FACTORY.createParser(jsonString);\n        jsonParser.nextToken();\n        return parseMap(jsonParser);\n    }\n\n    /**\n     * Parse a map of objects from a JsonParser.\n     *\n     * @param jsonParser The JsonParser, preconfigured to be at the START_ARRAY token.\n     */\n    public Map<String, T> parseMap(JsonParser jsonParser) throws IOException {\n        HashMap<String, T> map = new HashMap<String, T>();\n        while (jsonParser.nextToken() != JsonToken.END_OBJECT) {\n            String key = jsonParser.getText();\n            jsonParser.nextToken();\n            if (jsonParser.getCurrentToken() == JsonToken.VALUE_NULL) {\n                map.put(key, null);\n            } else{\n                map.put(key, parse(jsonParser));\n            }\n        }\n        return map;\n    }\n\n    /**\n     * Serialize an object to a JSON String.\n     *\n     * @param object The object to serialize.\n     */\n    public String serialize(T object) throws IOException {\n        StringWriter sw = new StringWriter();\n        JsonGenerator jsonGenerator = LoganSquare.JSON_FACTORY.createGenerator(sw);\n        serialize(object, jsonGenerator, true);\n        jsonGenerator.close();\n        return sw.toString();\n    }\n\n    /**\n     * Serialize an object to an OutputStream.\n     *\n     * @param object The object to serialize.\n     * @param os The OutputStream being written to.\n     */\n    public void serialize(T object, OutputStream os) throws IOException {\n        JsonGenerator jsonGenerator = LoganSquare.JSON_FACTORY.createGenerator(os);\n        serialize(object, jsonGenerator, true);\n        jsonGenerator.close();\n    }\n\n    /**\n     * Serialize a list of objects to a JSON String.\n     *\n     * @param list The list of objects to serialize.\n     */\n    public String serialize(List<T> list) throws IOException {\n        StringWriter sw = new StringWriter();\n        JsonGenerator jsonGenerator = LoganSquare.JSON_FACTORY.createGenerator(sw);\n        serialize(list, jsonGenerator);\n        jsonGenerator.close();\n        return sw.toString();\n    }\n\n    /**\n     * Serialize a list of objects to an OutputStream.\n     *\n     * @param list The list of objects to serialize.\n     * @param os The OutputStream to which the list should be serialized\n     */\n    public void serialize(List<T> list, OutputStream os) throws IOException {\n        JsonGenerator jsonGenerator = LoganSquare.JSON_FACTORY.createGenerator(os);\n        serialize(list, jsonGenerator);\n        jsonGenerator.close();\n    }\n\n    /**\n     * Serialize a list of objects to a JsonGenerator.\n     *\n     * @param list The list of objects to serialize.\n     * @param jsonGenerator The JsonGenerator to which the list should be serialized\n     */\n    public void serialize(List<T> list, JsonGenerator jsonGenerator) throws IOException {\n        jsonGenerator.writeStartArray();\n        for (T object : list) {\n            if (object != null) {\n                serialize(object, jsonGenerator, true);\n            } else {\n                jsonGenerator.writeNull();\n            }\n        }\n        jsonGenerator.writeEndArray();\n    }\n\n    /**\n     * Serialize a list of objects to a JSON String.\n     *\n     * @param map The map of objects to serialize.\n     */\n    public String serialize(Map<String, T> map) throws IOException {\n        StringWriter sw = new StringWriter();\n        JsonGenerator jsonGenerator = LoganSquare.JSON_FACTORY.createGenerator(sw);\n        serialize(map, jsonGenerator);\n        jsonGenerator.close();\n        return sw.toString();\n    }\n\n    /**\n     * Serialize a list of objects to an OutputStream.\n     *\n     * @param map The map of objects to serialize.\n     * @param os The OutputStream to which the list should be serialized\n     */\n    public void serialize(Map<String, T> map, OutputStream os) throws IOException {\n        JsonGenerator jsonGenerator = LoganSquare.JSON_FACTORY.createGenerator(os);\n        serialize(map, jsonGenerator);\n        jsonGenerator.close();\n    }\n\n    /**\n     * Serialize a list of objects to a JsonGenerator.\n     *\n     * @param map The map of objects to serialize.\n     * @param jsonGenerator The JsonGenerator to which the list should be serialized\n     */\n    public void serialize(Map<String, T> map, JsonGenerator jsonGenerator) throws IOException {\n        jsonGenerator.writeStartObject();\n        for (Map.Entry<String, T> entry : map.entrySet()) {\n            jsonGenerator.writeFieldName(entry.getKey());\n            if (entry.getValue() == null) {\n                jsonGenerator.writeNull();\n            } else {\n                serialize(entry.getValue(), jsonGenerator, true);\n            }\n        }\n        jsonGenerator.writeEndObject();\n    }\n}"
  },
  {
    "path": "core/src/main/java/com/bluelinelabs/logansquare/LoganSquare.java",
    "content": "package com.bluelinelabs.logansquare;\n\nimport com.bluelinelabs.logansquare.internal.objectmappers.BooleanMapper;\nimport com.bluelinelabs.logansquare.internal.objectmappers.DoubleMapper;\nimport com.bluelinelabs.logansquare.internal.objectmappers.FloatMapper;\nimport com.bluelinelabs.logansquare.internal.objectmappers.IntegerMapper;\nimport com.bluelinelabs.logansquare.internal.objectmappers.ListMapper;\nimport com.bluelinelabs.logansquare.internal.objectmappers.LongMapper;\nimport com.bluelinelabs.logansquare.internal.objectmappers.MapMapper;\nimport com.bluelinelabs.logansquare.internal.objectmappers.ObjectMapper;\nimport com.bluelinelabs.logansquare.internal.objectmappers.StringMapper;\nimport com.bluelinelabs.logansquare.typeconverters.DefaultCalendarConverter;\nimport com.bluelinelabs.logansquare.typeconverters.DefaultDateConverter;\nimport com.bluelinelabs.logansquare.typeconverters.TypeConverter;\nimport com.bluelinelabs.logansquare.util.SimpleArrayMap;\nimport com.fasterxml.jackson.core.JsonFactory;\n\nimport java.io.IOException;\nimport java.io.InputStream;\nimport java.io.OutputStream;\nimport java.lang.reflect.Constructor;\nimport java.util.ArrayList;\nimport java.util.Calendar;\nimport java.util.Date;\nimport java.util.HashMap;\nimport java.util.List;\nimport java.util.Map;\nimport java.util.concurrent.ConcurrentHashMap;\n\n/** The point of all interaction with this library. */\npublic class LoganSquare {\n\n    private static final ListMapper LIST_MAPPER = new ListMapper();\n    private static final MapMapper MAP_MAPPER = new MapMapper();\n\n    private static final Map<Class, JsonMapper> OBJECT_MAPPERS = new ConcurrentHashMap<Class, JsonMapper>();\n    static {\n        OBJECT_MAPPERS.put(String.class, new StringMapper());\n        OBJECT_MAPPERS.put(Integer.class, new IntegerMapper());\n        OBJECT_MAPPERS.put(Long.class, new LongMapper());\n        OBJECT_MAPPERS.put(Float.class, new FloatMapper());\n        OBJECT_MAPPERS.put(Double.class, new DoubleMapper());\n        OBJECT_MAPPERS.put(Boolean.class, new BooleanMapper());\n        OBJECT_MAPPERS.put(Object.class, new ObjectMapper());\n        OBJECT_MAPPERS.put(List.class, LIST_MAPPER);\n        OBJECT_MAPPERS.put(ArrayList.class, LIST_MAPPER);\n        OBJECT_MAPPERS.put(Map.class, MAP_MAPPER);\n        OBJECT_MAPPERS.put(HashMap.class, MAP_MAPPER);\n    }\n\n    private static final ConcurrentHashMap<ParameterizedType, JsonMapper> PARAMETERIZED_OBJECT_MAPPERS = new ConcurrentHashMap<ParameterizedType, JsonMapper>();\n\n    private static final SimpleArrayMap<Class, TypeConverter> TYPE_CONVERTERS = new SimpleArrayMap<>();\n    static {\n        registerTypeConverter(Date.class, new DefaultDateConverter());\n        registerTypeConverter(Calendar.class, new DefaultCalendarConverter());\n    }\n\n    /** The JsonFactory that should be used throughout the entire app. */\n    public static final JsonFactory JSON_FACTORY = new JsonFactory();\n\n    /**\n     * Parse an object from an InputStream.\n     *\n     * @param is The InputStream, most likely from your networking library.\n     * @param jsonObjectClass The @JsonObject class to parse the InputStream into\n     */\n    public static <E> E parse(InputStream is, Class<E> jsonObjectClass) throws IOException {\n        return mapperFor(jsonObjectClass).parse(is);\n    }\n\n    /**\n     * Parse an object from a String. Note: parsing from an InputStream should be preferred over parsing from a String if possible.\n     *\n     * @param jsonString The JSON string being parsed.\n     * @param jsonObjectClass The @JsonObject class to parse the InputStream into\n     */\n    public static <E> E parse(String jsonString, Class<E> jsonObjectClass) throws IOException {\n        return mapperFor(jsonObjectClass).parse(jsonString);\n    }\n\n    /**\n     * Parse a parameterized object from an InputStream.\n     *\n     * @param is The InputStream, most likely from your networking library.\n     * @param jsonObjectType The ParameterizedType describing the object. Ex: LoganSquare.parse(is, new ParameterizedType&lt;MyModel&lt;OtherModel&gt;&gt;() { });\n     */\n    public static <E> E parse(InputStream is, ParameterizedType<E> jsonObjectType) throws IOException {\n        return mapperFor(jsonObjectType).parse(is);\n    }\n\n    /**\n     * Parse a parameterized object from a String. Note: parsing from an InputStream should be preferred over parsing from a String if possible.\n     *\n     * @param jsonString The JSON string being parsed.\n     * @param jsonObjectType The ParameterizedType describing the object. Ex: LoganSquare.parse(is, new ParameterizedType&lt;MyModel&lt;OtherModel&gt;&gt;() { });\n     */\n    public static <E> E parse(String jsonString, ParameterizedType<E> jsonObjectType) throws IOException {\n        return mapperFor(jsonObjectType).parse(jsonString);\n    }\n\n    /**\n     * Parse a list of objects from an InputStream.\n     *\n     * @param is The inputStream, most likely from your networking library.\n     * @param jsonObjectClass The @JsonObject class to parse the InputStream into\n     */\n    public static <E> List<E> parseList(InputStream is, Class<E> jsonObjectClass) throws IOException {\n        return mapperFor(jsonObjectClass).parseList(is);\n    }\n\n    /**\n     * Parse a list of objects from a String. Note: parsing from an InputStream should be preferred over parsing from a String if possible.\n     *\n     * @param jsonString The JSON string being parsed.\n     * @param jsonObjectClass The @JsonObject class to parse the InputStream into\n     */\n    public static <E> List<E> parseList(String jsonString, Class<E> jsonObjectClass) throws IOException {\n        return mapperFor(jsonObjectClass).parseList(jsonString);\n    }\n\n    /**\n     * Parse a map of objects from an InputStream.\n     *\n     * @param is The inputStream, most likely from your networking library.\n     * @param jsonObjectClass The @JsonObject class to parse the InputStream into\n     */\n    public static <E> Map<String, E> parseMap(InputStream is, Class<E> jsonObjectClass) throws IOException {\n        return mapperFor(jsonObjectClass).parseMap(is);\n    }\n\n    /**\n     * Parse a map of objects from a String. Note: parsing from an InputStream should be preferred over parsing from a String if possible.\n     *\n     * @param jsonString The JSON string being parsed.\n     * @param jsonObjectClass The @JsonObject class to parse the InputStream into\n     */\n    public static <E> Map<String, E> parseMap(String jsonString, Class<E> jsonObjectClass) throws IOException {\n        return mapperFor(jsonObjectClass).parseMap(jsonString);\n    }\n\n    /**\n     * Serialize an object to a JSON String.\n     *\n     * @param object The object to serialize.\n     */\n    @SuppressWarnings(\"unchecked\")\n    public static <E> String serialize(E object) throws IOException {\n        return mapperFor((Class<E>)object.getClass()).serialize(object);\n    }\n\n    /**\n     * Serialize an object to an OutputStream.\n     *\n     * @param object The object to serialize.\n     * @param os The OutputStream being written to.\n     */\n    @SuppressWarnings(\"unchecked\")\n    public static <E> void serialize(E object, OutputStream os) throws IOException {\n        mapperFor((Class<E>)object.getClass()).serialize(object, os);\n    }\n\n    /**\n     * Serialize a parameterized object to a JSON String.\n     *\n     * @param object The object to serialize.\n     * @param parameterizedType The ParameterizedType describing the object. Ex: LoganSquare.serialize(object, new ParameterizedType&lt;MyModel&lt;OtherModel&gt;&gt;() { });\n     */\n    @SuppressWarnings(\"unchecked\")\n    public static <E> String serialize(E object, ParameterizedType<E> parameterizedType) throws IOException {\n        return mapperFor(parameterizedType).serialize(object);\n    }\n\n    /**\n     * Serialize a parameterized  object to an OutputStream.\n     *\n     * @param object The object to serialize.\n     * @param parameterizedType The ParameterizedType describing the object. Ex: LoganSquare.serialize(object, new ParameterizedType&lt;MyModel&lt;OtherModel&gt;&gt;() { }, os);\n     * @param os The OutputStream being written to.\n     */\n    @SuppressWarnings(\"unchecked\")\n    public static <E> void serialize(E object, ParameterizedType<E> parameterizedType, OutputStream os) throws IOException {\n        mapperFor(parameterizedType).serialize(object, os);\n    }\n\n    /**\n     * Serialize a list of objects to a JSON String.\n     *\n     * @param list The list of objects to serialize.\n     * @param jsonObjectClass The @JsonObject class of the list elements\n     */\n    public static <E> String serialize(List<E> list, Class<E> jsonObjectClass) throws IOException {\n        return mapperFor(jsonObjectClass).serialize(list);\n    }\n\n    /**\n     * Serialize a list of objects to an OutputStream.\n     *\n     * @param list The list of objects to serialize.\n     * @param os The OutputStream to which the list should be serialized\n     * @param jsonObjectClass The @JsonObject class of the list elements\n     */\n    public static <E> void serialize(List<E> list, OutputStream os, Class<E> jsonObjectClass) throws IOException {\n        mapperFor(jsonObjectClass).serialize(list, os);\n    }\n\n    /**\n     * Serialize a map of objects to a JSON String.\n     *\n     * @param map The map of objects to serialize.\n     * @param jsonObjectClass The @JsonObject class of the list elements\n     */\n    public static <E> String serialize(Map<String, E> map, Class<E> jsonObjectClass) throws IOException {\n        return mapperFor(jsonObjectClass).serialize(map);\n    }\n\n    /**\n     * Serialize a map of objects to an OutputStream.\n     *\n     * @param map The map of objects to serialize.\n     * @param os The OutputStream to which the list should be serialized\n     * @param jsonObjectClass The @JsonObject class of the list elements\n     */\n    public static <E> void serialize(Map<String, E> map, OutputStream os, Class<E> jsonObjectClass) throws IOException {\n        mapperFor(jsonObjectClass).serialize(map, os);\n    }\n\n    @SuppressWarnings(\"unchecked\")\n    /*package*/ static <E> JsonMapper<E> getMapper(Class<E> cls) {\n        JsonMapper<E> mapper = OBJECT_MAPPERS.get(cls);\n        if (mapper == null) {\n            // The only way the mapper wouldn't already be loaded into OBJECT_MAPPERS is if it was compiled separately, but let's handle it anyway\n            try {\n                Class<?> mapperClass = Class.forName(cls.getName() + Constants.MAPPER_CLASS_SUFFIX);\n                mapper = (JsonMapper<E>)mapperClass.newInstance();\n                OBJECT_MAPPERS.put(cls, mapper);\n            } catch (Exception ignored) { }\n        }\n        return mapper;\n    }\n\n    @SuppressWarnings(\"unchecked\")\n    private static <E> JsonMapper<E> getMapper(ParameterizedType<E> type, SimpleArrayMap<ParameterizedType, JsonMapper> partialMappers) {\n        if (type.typeParameters.size() == 0) {\n            return getMapper((Class<E>)type.rawType);\n        }\n\n        if (partialMappers == null) {\n            partialMappers = new SimpleArrayMap<ParameterizedType, JsonMapper>();\n        }\n\n        if (partialMappers.containsKey(type)) {\n            return partialMappers.get(type);\n        } else if (PARAMETERIZED_OBJECT_MAPPERS.containsKey(type)) {\n            return PARAMETERIZED_OBJECT_MAPPERS.get(type);\n        } else {\n            try {\n                Class<?> mapperClass = Class.forName(type.rawType.getName() + Constants.MAPPER_CLASS_SUFFIX);\n                Constructor constructor = mapperClass.getDeclaredConstructors()[0];\n                Object[] args = new Object[2 + type.typeParameters.size()];\n                args[0] = type;\n                args[args.length - 1] = partialMappers;\n                for (int i = 0; i < type.typeParameters.size(); i++) {\n                    args[i + 1] = type.typeParameters.get(i);\n                }\n                JsonMapper<E> mapper = (JsonMapper<E>)constructor.newInstance(args);\n                PARAMETERIZED_OBJECT_MAPPERS.put(type, mapper);\n                return mapper;\n            } catch (Exception ignored) {\n                return null;\n            }\n        }\n    }\n\n    /**\n     * Returns whether or not LoganSquare can handle a given class.\n     *\n     * @param cls The class for which support is being checked.\n     */\n    @SuppressWarnings(\"unchecked\")\n    public static boolean supports(Class cls) {\n        return getMapper(cls) != null;\n    }\n\n    /**\n     * Returns whether or not LoganSquare can handle a given ParameterizedType.\n     *\n     * @param type The ParameterizedType for which support is being checked.\n     */\n    @SuppressWarnings(\"unchecked\")\n    public static boolean supports(ParameterizedType type) {\n        return getMapper(type, null) != null;\n    }\n\n    /**\n     * Returns a JsonMapper for a given class that has been annotated with @JsonObject.\n     *\n     * @param cls The class for which the JsonMapper should be fetched.\n     */\n    public static <E> JsonMapper<E> mapperFor(Class<E> cls) throws NoSuchMapperException {\n        JsonMapper<E> mapper = getMapper(cls);\n\n        if (mapper == null) {\n            throw new NoSuchMapperException(cls);\n        } else {\n            return mapper;\n        }\n    }\n\n    /**\n     * Returns a JsonMapper for a given class that has been annotated with @JsonObject.\n     *\n     * @param type The ParameterizedType for which the JsonMapper should be fetched.\n     */\n    @SuppressWarnings(\"unchecked\")\n    public static <E> JsonMapper<E> mapperFor(ParameterizedType<E> type) throws NoSuchMapperException {\n        return mapperFor(type, null);\n    }\n\n    public static <E> JsonMapper<E> mapperFor(ParameterizedType<E> type, SimpleArrayMap<ParameterizedType, JsonMapper> partialMappers) throws NoSuchMapperException {\n        JsonMapper<E> mapper = getMapper(type, partialMappers);\n        if (mapper == null) {\n            throw new NoSuchMapperException(type.rawType);\n        } else {\n            return mapper;\n        }\n    }\n\n    /**\n     * Returns a TypeConverter for a given class.\n     *\n     * @param cls The class for which the TypeConverter should be fetched.\n     */\n    @SuppressWarnings(\"unchecked\")\n    public static <E> TypeConverter<E> typeConverterFor(Class<E> cls) throws NoSuchTypeConverterException {\n        TypeConverter<E> typeConverter = TYPE_CONVERTERS.get(cls);\n        if (typeConverter == null) {\n            throw new NoSuchTypeConverterException(cls);\n        }\n        return typeConverter;\n    }\n\n    /**\n     * Register a new TypeConverter for parsing and serialization.\n     *\n     * @param cls The class for which the TypeConverter should be used.\n     * @param converter The TypeConverter\n     */\n    public static <E> void registerTypeConverter(Class<E> cls, TypeConverter<E> converter) {\n        TYPE_CONVERTERS.put(cls, converter);\n    }\n}\n"
  },
  {
    "path": "core/src/main/java/com/bluelinelabs/logansquare/NoSuchMapperException.java",
    "content": "package com.bluelinelabs.logansquare;\n\n/**\n * The exception that will be thrown in the event that LoganSquare.mapperFor() is\n * called with a class that hasn't been declared as a @JsonObject.\n */\npublic class NoSuchMapperException extends RuntimeException {\n\n    public NoSuchMapperException(Class cls) {\n        super(\"Class \" + cls.getCanonicalName() + \" could not be mapped to a JSON object. Perhaps it hasn't been annotated with @JsonObject?\");\n    }\n\n}\n"
  },
  {
    "path": "core/src/main/java/com/bluelinelabs/logansquare/NoSuchTypeConverterException.java",
    "content": "package com.bluelinelabs.logansquare;\n\n/**\n * The exception that will be thrown in the event that LoganSquare.typeConverterFor() is\n * called with a class that doesn't have a defined TypeConverter.\n */\npublic class NoSuchTypeConverterException extends RuntimeException {\n\n    public NoSuchTypeConverterException(Class cls) {\n        super(\"Class \" + cls.getCanonicalName() + \" does not having a TypeConverter defined. TypeConverters can be added using LoganSquare.registerTypeConverter().\");\n    }\n\n}\n"
  },
  {
    "path": "core/src/main/java/com/bluelinelabs/logansquare/ParameterizedType.java",
    "content": "package com.bluelinelabs.logansquare;\n\nimport java.lang.reflect.Array;\nimport java.lang.reflect.GenericArrayType;\nimport java.lang.reflect.Type;\nimport java.lang.reflect.TypeVariable;\nimport java.lang.reflect.WildcardType;\nimport java.util.ArrayList;\nimport java.util.List;\n\npublic abstract class ParameterizedType<T> {\n    public final Class rawType;\n    public final List<ParameterizedType> typeParameters;\n\n    public ParameterizedType() {\n        Type superclass = getClass().getGenericSuperclass();\n        if (superclass instanceof Class) {\n            throw new RuntimeException(\"ParameterizedType objects must be instantiated with a type parameter. Ex: new ParameterizedType<MyModel<MyOtherModel>>() { }\");\n        }\n\n        Type type = ((java.lang.reflect.ParameterizedType)superclass).getActualTypeArguments()[0];\n\n        rawType = getRawType(type);\n        typeParameters = new ArrayList<>();\n        addTypeParameters(type);\n    }\n\n    private ParameterizedType(Type type) {\n        rawType = getRawType(type);\n        typeParameters = new ArrayList<>();\n        addTypeParameters(type);\n    }\n\n    private void addTypeParameters(Type type) {\n        if (type instanceof java.lang.reflect.ParameterizedType) {\n            Type[] actualTypeArguments = ((java.lang.reflect.ParameterizedType)type).getActualTypeArguments();\n            if (actualTypeArguments != null) {\n                for (Type typeArgument : actualTypeArguments) {\n                    typeParameters.add(new ConcreteParameterizedType(typeArgument));\n                }\n            }\n        }\n    }\n\n    private Class getRawType(Type type) {\n        if (type instanceof Class) {\n            return (Class)type;\n        } else if (type instanceof java.lang.reflect.ParameterizedType) {\n            return (Class)(((java.lang.reflect.ParameterizedType)type).getRawType());\n        } else if (type instanceof TypeVariable) {\n            return Object.class;\n        } else if (type instanceof WildcardType) {\n            return getRawType(((WildcardType)type).getUpperBounds()[0]);\n        } else if (type instanceof GenericArrayType) {\n            return Array.newInstance(getRawType(((GenericArrayType)type).getGenericComponentType()), 0).getClass();\n        } else {\n            throw new RuntimeException(\"Invalid type passed: \" + type);\n        }\n    }\n\n    @Override\n    public boolean equals(Object o) {\n        if (this == o) {\n            return true;\n        } else if (o == null || getClass() != o.getClass()) {\n            return false;\n        } else {\n            ParameterizedType<?> that = (ParameterizedType<?>)o;\n\n            if (!rawType.equals(that.rawType)) {\n                return false;\n            }\n            return typeParameters.equals(that.typeParameters);\n        }\n    }\n\n    @Override\n    public int hashCode() {\n        int result = rawType.hashCode();\n        result = 31 * result + typeParameters.hashCode();\n        return result;\n    }\n\n    static class ConcreteParameterizedType<T> extends ParameterizedType<T> {\n        public ConcreteParameterizedType(Type type) {\n            super(type);\n        }\n    }\n}"
  },
  {
    "path": "core/src/main/java/com/bluelinelabs/logansquare/annotation/JsonField.java",
    "content": "package com.bluelinelabs.logansquare.annotation;\n\nimport java.lang.annotation.Retention;\nimport java.lang.annotation.Target;\n\nimport static java.lang.annotation.ElementType.FIELD;\nimport static java.lang.annotation.RetentionPolicy.CLASS;\n\n/**\n * Declare that a variable should be parsed/serialized.\n * <pre><code>\n * {@literal @}JsonField(name = \"random_variable_name\")\n * public String randomVariableName;\n * </code></pre>\n */\n@Target(FIELD)\n@Retention(CLASS)\npublic @interface JsonField {\n\n    /**\n     * The name(s) of this field in JSON. Use an array if this could be represented by multiple names.\n     * Note that using this field will override the enclosing JsonObject's fieldNamingPolicy.\n     */\n    String[] name() default {};\n\n    /** The TypeConverter that will be used to parse/serialize this variable. */\n    Class typeConverter() default void.class;\n\n}\n"
  },
  {
    "path": "core/src/main/java/com/bluelinelabs/logansquare/annotation/JsonIgnore.java",
    "content": "package com.bluelinelabs.logansquare.annotation;\n\nimport java.lang.annotation.Retention;\nimport java.lang.annotation.Target;\n\nimport static java.lang.annotation.ElementType.FIELD;\nimport static java.lang.annotation.RetentionPolicy.CLASS;\n\n/**\n * Declare that a variable should NOT be parsed/serialized when using a fieldDetectionPolicy other than\n * ANNOTATIONS_ONLY.\n * <pre><code>\n * {@literal @}JsonIgnore\n * public String variableIDontWantParsedOrSerialized;\n * </code></pre>\n */\n@Target(FIELD)\n@Retention(CLASS)\npublic @interface JsonIgnore {\n\n    public enum IgnorePolicy {\n        /** This field will be ignored for both parsing and serializing. */\n        PARSE_AND_SERIALIZE,\n\n        /** This field will be ignored for parsing, but will still be serialized. */\n        PARSE_ONLY,\n\n        /** This field will be ignored for serializing, but will still be parsed. */\n        SERIALIZE_ONLY\n    }\n\n    /**\n     * Allows control over whether a field should be parsed and/or serialized or not\n     */\n    IgnorePolicy ignorePolicy() default IgnorePolicy.PARSE_AND_SERIALIZE;\n}\n"
  },
  {
    "path": "core/src/main/java/com/bluelinelabs/logansquare/annotation/JsonObject.java",
    "content": "package com.bluelinelabs.logansquare.annotation;\n\nimport java.lang.annotation.Retention;\nimport java.lang.annotation.Target;\n\nimport static java.lang.annotation.ElementType.TYPE;\nimport static java.lang.annotation.RetentionPolicy.CLASS;\n\n/**\n * Declare that a Java object is parsable and serializable.\n * <pre><code>\n * {@literal @}JsonObject\n * public class MyClass {\n *     ...\n * }\n * </code></pre>\n */\n@Target(TYPE)\n@Retention(CLASS)\npublic @interface JsonObject {\n\n    public enum FieldDetectionPolicy {\n        /** Only parse and serialize fields annotated with @JsonField */\n        ANNOTATIONS_ONLY,\n\n        /**\n         * Parse and serialize all non-private fields that haven't been\n         * annotated with @JsonIgnore.\n         */\n        NONPRIVATE_FIELDS,\n\n        /**\n         * Parse and serialize all non-private fields and accessors that\n         * haven't been annotated with @JsonIgnore.\n         */\n        NONPRIVATE_FIELDS_AND_ACCESSORS\n    }\n\n    public enum FieldNamingPolicy {\n        /**\n         * Use the Java variable's name, unless the 'name' parameter is\n         * passed into the @JsonField annotation\n         */\n        FIELD_NAME,\n\n        /**\n         * Use the Java variable's name converted to lower case separated by\n         * underscores, unless the 'name' parameter is passed into the @JsonField\n         * annotation\n         */\n        LOWER_CASE_WITH_UNDERSCORES\n    }\n\n    /**\n     * Allows control over which fields will be used by LoganSquare for parsing and\n     * serializing. By default, only fields annotated with @JsonField will be used.\n     */\n    FieldDetectionPolicy fieldDetectionPolicy() default FieldDetectionPolicy.ANNOTATIONS_ONLY;\n\n    /**\n     * Allows control over what field names LoganSquare expects in the JSON when parsing\n     * and how the fields are named while serializing. By default, field names match\n     * the name of the Java variable unless the 'name' parameter is passed into a\n     * field's @JsonField annotation.\n     */\n    FieldNamingPolicy fieldNamingPolicy() default FieldNamingPolicy.FIELD_NAME;\n\n    /**\n     * Allows control over whether or not null fields are serialized. Defaults to false.\n     */\n    boolean serializeNullObjects() default false;\n\n    /**\n     * Allows control over whether or not null collection and array elements are serialized. Defaults to false.\n     */\n    boolean serializeNullCollectionElements() default false;\n}\n"
  },
  {
    "path": "core/src/main/java/com/bluelinelabs/logansquare/annotation/OnJsonParseComplete.java",
    "content": "package com.bluelinelabs.logansquare.annotation;\n\nimport java.lang.annotation.Retention;\nimport java.lang.annotation.Target;\n\nimport static java.lang.annotation.ElementType.METHOD;\nimport static java.lang.annotation.RetentionPolicy.CLASS;\n\n/**\n * Declare that a method should be called once a class has been parsed from JSON.\n * <pre><code>\n * {@literal @}OnJsonParseComplete\n * public void postParseMethod() {\n *     ...\n * }\n * </code></pre>\n */\n@Target(METHOD)\n@Retention(CLASS)\npublic @interface OnJsonParseComplete { }"
  },
  {
    "path": "core/src/main/java/com/bluelinelabs/logansquare/annotation/OnPreJsonSerialize.java",
    "content": "package com.bluelinelabs.logansquare.annotation;\n\nimport java.lang.annotation.Retention;\nimport java.lang.annotation.Target;\n\nimport static java.lang.annotation.ElementType.METHOD;\nimport static java.lang.annotation.RetentionPolicy.CLASS;\n\n/**\n * Declare that a method should be called before a class is serialized to JSON.\n * <pre><code>\n * {@literal @}OnPreJsonSerialize\n * public void preSerializeMethod() {\n *     ...\n * }\n * </code></pre>\n */\n@Target(METHOD)\n@Retention(CLASS)\npublic @interface OnPreJsonSerialize { }"
  },
  {
    "path": "core/src/main/java/com/bluelinelabs/logansquare/internal/objectmappers/BooleanMapper.java",
    "content": "package com.bluelinelabs.logansquare.internal.objectmappers;\n\nimport com.bluelinelabs.logansquare.JsonMapper;\nimport com.fasterxml.jackson.core.JsonGenerator;\nimport com.fasterxml.jackson.core.JsonParser;\nimport com.fasterxml.jackson.core.JsonToken;\n\nimport java.io.IOException;\n\n/**\n * Built-in mapper for Boolean objects\n */\npublic class BooleanMapper extends JsonMapper<Boolean> {\n\n    @Override\n    public Boolean parse(JsonParser jsonParser) throws IOException {\n        if (jsonParser.getCurrentToken() == JsonToken.VALUE_NULL) {\n            return null;\n        } else {\n            return jsonParser.getBooleanValue();\n        }\n    }\n\n    @Override\n    public void parseField(Boolean instance, String fieldName, JsonParser jsonParser) throws IOException { }\n\n    @Override\n    public void serialize(Boolean object, JsonGenerator generator, boolean writeStartAndEnd) throws IOException {\n        generator.writeBoolean(object);\n    }\n}\n"
  },
  {
    "path": "core/src/main/java/com/bluelinelabs/logansquare/internal/objectmappers/DoubleMapper.java",
    "content": "package com.bluelinelabs.logansquare.internal.objectmappers;\n\nimport com.bluelinelabs.logansquare.JsonMapper;\nimport com.fasterxml.jackson.core.JsonGenerator;\nimport com.fasterxml.jackson.core.JsonParser;\nimport com.fasterxml.jackson.core.JsonToken;\n\nimport java.io.IOException;\n\n/**\n * Built-in mapper for Double objects\n */\npublic class DoubleMapper extends JsonMapper<Double> {\n\n    @Override\n    public Double parse(JsonParser jsonParser) throws IOException {\n        if (jsonParser.getCurrentToken() == JsonToken.VALUE_NULL) {\n            return null;\n        } else {\n            return jsonParser.getDoubleValue();\n        }\n    }\n\n    @Override\n    public void parseField(Double instance, String fieldName, JsonParser jsonParser) throws IOException { }\n\n    @Override\n    public void serialize(Double object, JsonGenerator generator, boolean writeStartAndEnd) throws IOException {\n        generator.writeNumber(object);\n    }\n}\n"
  },
  {
    "path": "core/src/main/java/com/bluelinelabs/logansquare/internal/objectmappers/FloatMapper.java",
    "content": "package com.bluelinelabs.logansquare.internal.objectmappers;\n\nimport com.bluelinelabs.logansquare.JsonMapper;\nimport com.fasterxml.jackson.core.JsonGenerator;\nimport com.fasterxml.jackson.core.JsonParser;\nimport com.fasterxml.jackson.core.JsonToken;\n\nimport java.io.IOException;\n\n/**\n * Built-in mapper for Float objects\n */\npublic class FloatMapper extends JsonMapper<Float> {\n\n    @Override\n    public Float parse(JsonParser jsonParser) throws IOException {\n        if (jsonParser.getCurrentToken() == JsonToken.VALUE_NULL) {\n            return null;\n        } else {\n            return jsonParser.getFloatValue();\n        }\n    }\n\n    @Override\n    public void parseField(Float instance, String fieldName, JsonParser jsonParser) throws IOException { }\n\n    @Override\n    public void serialize(Float object, JsonGenerator generator, boolean writeStartAndEnd) throws IOException {\n        generator.writeNumber(object);\n    }\n}\n"
  },
  {
    "path": "core/src/main/java/com/bluelinelabs/logansquare/internal/objectmappers/IntegerMapper.java",
    "content": "package com.bluelinelabs.logansquare.internal.objectmappers;\n\nimport com.bluelinelabs.logansquare.JsonMapper;\nimport com.fasterxml.jackson.core.JsonGenerator;\nimport com.fasterxml.jackson.core.JsonParser;\nimport com.fasterxml.jackson.core.JsonToken;\n\nimport java.io.IOException;\n\n/**\n * Built-in mapper for Integer objects\n */\npublic class IntegerMapper extends JsonMapper<Integer> {\n\n    @Override\n    public Integer parse(JsonParser jsonParser) throws IOException {\n        if (jsonParser.getCurrentToken() == JsonToken.VALUE_NULL) {\n            return null;\n        } else {\n            return jsonParser.getIntValue();\n        }\n    }\n\n    @Override\n    public void parseField(Integer instance, String fieldName, JsonParser jsonParser) throws IOException { }\n\n    @Override\n    public void serialize(Integer object, JsonGenerator generator, boolean writeStartAndEnd) throws IOException {\n        generator.writeNumber(object);\n    }\n}\n"
  },
  {
    "path": "core/src/main/java/com/bluelinelabs/logansquare/internal/objectmappers/ListMapper.java",
    "content": "package com.bluelinelabs.logansquare.internal.objectmappers;\n\nimport com.bluelinelabs.logansquare.JsonMapper;\nimport com.bluelinelabs.logansquare.LoganSquare;\nimport com.fasterxml.jackson.core.JsonGenerator;\nimport com.fasterxml.jackson.core.JsonParser;\n\nimport java.io.IOException;\nimport java.util.List;\n\n/**\n * Built-in mapper for List objects of an unknown type\n */\npublic class ListMapper extends JsonMapper<List<Object>> {\n\n    @Override\n    public List<Object> parse(JsonParser jsonParser) throws IOException {\n        return LoganSquare.mapperFor(Object.class).parseList(jsonParser);\n    }\n\n    @Override\n    public void parseField(List<Object> instance, String fieldName, JsonParser jsonParser) throws IOException { }\n\n    @Override\n    public void serialize(List<Object> list, JsonGenerator generator, boolean writeStartAndEnd) throws IOException {\n        LoganSquare.mapperFor(Object.class).serialize(list, generator);\n    }\n\n}\n"
  },
  {
    "path": "core/src/main/java/com/bluelinelabs/logansquare/internal/objectmappers/LongMapper.java",
    "content": "package com.bluelinelabs.logansquare.internal.objectmappers;\n\nimport com.bluelinelabs.logansquare.JsonMapper;\nimport com.fasterxml.jackson.core.JsonGenerator;\nimport com.fasterxml.jackson.core.JsonParser;\nimport com.fasterxml.jackson.core.JsonToken;\n\nimport java.io.IOException;\n\n/**\n * Built-in mapper for Long objects\n */\npublic class LongMapper extends JsonMapper<Long> {\n\n    @Override\n    public Long parse(JsonParser jsonParser) throws IOException {\n        if (jsonParser.getCurrentToken() == JsonToken.VALUE_NULL) {\n            return null;\n        } else {\n            return jsonParser.getLongValue();\n        }\n    }\n\n    @Override\n    public void parseField(Long instance, String fieldName, JsonParser jsonParser) throws IOException { }\n\n    @Override\n    public void serialize(Long object, JsonGenerator generator, boolean writeStartAndEnd) throws IOException {\n        generator.writeNumber(object);\n    }\n}\n"
  },
  {
    "path": "core/src/main/java/com/bluelinelabs/logansquare/internal/objectmappers/MapMapper.java",
    "content": "package com.bluelinelabs.logansquare.internal.objectmappers;\n\nimport com.bluelinelabs.logansquare.JsonMapper;\nimport com.bluelinelabs.logansquare.LoganSquare;\nimport com.fasterxml.jackson.core.JsonGenerator;\nimport com.fasterxml.jackson.core.JsonParser;\n\nimport java.io.IOException;\nimport java.util.Map;\n\n/**\n * Built-in mapper for Map objects of a unknown value types\n */\npublic class MapMapper extends JsonMapper<Map<String, Object>> {\n\n    @Override\n    public Map<String, Object> parse(JsonParser jsonParser) throws IOException {\n        return LoganSquare.mapperFor(Object.class).parseMap(jsonParser);\n    }\n\n    @Override\n    public void parseField(Map<String, Object> instance, String fieldName, JsonParser jsonParser) throws IOException { }\n\n    @Override\n    public void serialize(Map<String, Object> map, JsonGenerator generator, boolean writeStartAndEnd) throws IOException {\n        LoganSquare.mapperFor(Object.class).serialize(map, generator);\n    }\n\n}\n"
  },
  {
    "path": "core/src/main/java/com/bluelinelabs/logansquare/internal/objectmappers/ObjectMapper.java",
    "content": "package com.bluelinelabs.logansquare.internal.objectmappers;\n\nimport com.bluelinelabs.logansquare.JsonMapper;\nimport com.bluelinelabs.logansquare.LoganSquare;\nimport com.fasterxml.jackson.core.JsonGenerator;\nimport com.fasterxml.jackson.core.JsonParser;\n\nimport java.io.IOException;\nimport java.util.List;\nimport java.util.Map;\n\n/**\n * Built-in mapper for unknown types\n */\npublic class ObjectMapper extends JsonMapper<Object> {\n\n    @Override\n    public Object parse(JsonParser jsonParser) throws IOException {\n        switch (jsonParser.getCurrentToken()) {\n            case VALUE_NULL:\n                return null;\n            case VALUE_FALSE:\n                return false;\n            case VALUE_TRUE:\n                return true;\n            case VALUE_NUMBER_FLOAT:\n                return jsonParser.getDoubleValue();\n            case VALUE_NUMBER_INT:\n                return jsonParser.getLongValue();\n            case VALUE_STRING:\n                return jsonParser.getText();\n            case VALUE_EMBEDDED_OBJECT:\n                return LoganSquare.mapperFor(Map.class).parse(jsonParser);\n            case START_OBJECT:\n                return LoganSquare.mapperFor(Map.class).parse(jsonParser);\n            case START_ARRAY:\n                return LoganSquare.mapperFor(List.class).parse(jsonParser);\n            default:\n                throw new RuntimeException(\"Invalid json token encountered: \" + jsonParser.getCurrentToken());\n        }\n    }\n\n    @Override\n    public void parseField(Object instance, String fieldName, JsonParser jsonParser) throws IOException { }\n\n    @Override\n    public void serialize(Object value, JsonGenerator generator, boolean writeStartAndEnd) throws IOException {\n        if (value == null) {\n            generator.writeNull();\n        } else if (value instanceof String) {\n            generator.writeString((String)value);\n        } else if (value instanceof Integer) {\n            generator.writeNumber((Integer)value);\n        } else if (value instanceof Long) {\n            generator.writeNumber((Long)value);\n        } else if (value instanceof Float) {\n            generator.writeNumber((Float)value);\n        } else if (value instanceof Double) {\n            generator.writeNumber((Double)value);\n        } else if (value instanceof Boolean) {\n            generator.writeBoolean((Boolean)value);\n        } else if (value instanceof List) {\n            LoganSquare.mapperFor(List.class).serialize((List<Object>)value, generator, writeStartAndEnd);\n        } else if (value instanceof Map) {\n            LoganSquare.mapperFor(Map.class).serialize((Map<String, Object>)value, generator, writeStartAndEnd);\n        } else {\n            Class valueClass = value.getClass();\n            JsonMapper jsonMapper = LoganSquare.mapperFor(valueClass);\n\n            if (jsonMapper != null) {\n                if (writeStartAndEnd) {\n                    generator.writeStartObject();\n                }\n\n                jsonMapper.serialize(value, generator, false);\n\n                if (writeStartAndEnd) {\n                    generator.writeEndObject();\n                }\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "core/src/main/java/com/bluelinelabs/logansquare/internal/objectmappers/StringMapper.java",
    "content": "package com.bluelinelabs.logansquare.internal.objectmappers;\n\nimport com.bluelinelabs.logansquare.JsonMapper;\nimport com.fasterxml.jackson.core.JsonGenerator;\nimport com.fasterxml.jackson.core.JsonParser;\n\nimport java.io.IOException;\n\n/**\n * Built-in mapper for String objects\n */\npublic class StringMapper extends JsonMapper<String> {\n\n    @Override\n    public String parse(JsonParser jsonParser) throws IOException {\n        return jsonParser.getText();\n    }\n\n    @Override\n    public void parseField(String instance, String fieldName, JsonParser jsonParser) throws IOException { }\n\n    @Override\n    public void serialize(String object, JsonGenerator generator, boolean writeStartAndEnd) throws IOException {\n        generator.writeString(object);\n    }\n}\n"
  },
  {
    "path": "core/src/main/java/com/bluelinelabs/logansquare/typeconverters/BooleanBasedTypeConverter.java",
    "content": "package com.bluelinelabs.logansquare.typeconverters;\n\nimport com.fasterxml.jackson.core.JsonGenerator;\nimport com.fasterxml.jackson.core.JsonParser;\n\nimport java.io.IOException;\n\npublic abstract class BooleanBasedTypeConverter<T> implements TypeConverter<T> {\n\n    /**\n     * Called to convert a boolean into an object of type T.\n     *\n     * @param b The boolean parsed from JSON.\n     */\n    public abstract T getFromBoolean(boolean b);\n\n    /**\n     * Called to convert a an object of type T into a boolean.\n     *\n     * @param object The object being converted.\n     */\n    public abstract boolean convertToBoolean(T object);\n\n    @Override\n    public T parse(JsonParser jsonParser) throws IOException {\n        return getFromBoolean(jsonParser.getValueAsBoolean());\n    }\n\n    @Override\n    public void serialize(T object, String fieldName, boolean writeFieldNameForObject, JsonGenerator jsonGenerator) throws IOException {\n        if (fieldName != null) {\n            jsonGenerator.writeBooleanField(fieldName, convertToBoolean(object));\n        } else {\n            jsonGenerator.writeBoolean(convertToBoolean(object));\n        }\n    }\n\n}\n"
  },
  {
    "path": "core/src/main/java/com/bluelinelabs/logansquare/typeconverters/CalendarTypeConverter.java",
    "content": "package com.bluelinelabs.logansquare.typeconverters;\n\nimport com.fasterxml.jackson.core.JsonGenerator;\nimport com.fasterxml.jackson.core.JsonParser;\n\nimport java.io.IOException;\nimport java.text.DateFormat;\nimport java.text.ParseException;\nimport java.util.Calendar;\n\npublic abstract class CalendarTypeConverter implements TypeConverter<Calendar> {\n\n    // DateFormat is not thread-safe, so wrap it in a ThreadLocal\n    private final ThreadLocal<DateFormat> mDateFormat = new ThreadLocal<DateFormat>(){\n        @Override\n        protected DateFormat initialValue() {\n            return getDateFormat();\n        }\n    };\n\n    @Override\n    public Calendar parse(JsonParser jsonParser) throws IOException {\n        String dateString = jsonParser.getValueAsString(null);\n        try {\n            Calendar calendar = Calendar.getInstance();\n            calendar.setTime(mDateFormat.get().parse(dateString));\n            return calendar;\n        } catch (ParseException e) {\n            return null;\n        }\n    }\n\n    @Override\n    public void serialize(Calendar object, String fieldName, boolean writeFieldNameForObject, JsonGenerator jsonGenerator) throws IOException {\n        if (fieldName != null) {\n            jsonGenerator.writeStringField(fieldName, mDateFormat.get().format(object.getTimeInMillis()));\n        } else {\n            jsonGenerator.writeString(mDateFormat.get().format(object.getTimeInMillis()));\n        }\n    }\n\n    /** Called to get the DateFormat used to parse and serialize objects */\n    public abstract DateFormat getDateFormat();\n\n}\n"
  },
  {
    "path": "core/src/main/java/com/bluelinelabs/logansquare/typeconverters/DateTypeConverter.java",
    "content": "package com.bluelinelabs.logansquare.typeconverters;\n\nimport com.fasterxml.jackson.core.JsonGenerator;\nimport com.fasterxml.jackson.core.JsonParser;\n\nimport java.io.IOException;\nimport java.text.DateFormat;\nimport java.text.ParseException;\nimport java.util.Date;\n\npublic abstract class DateTypeConverter implements TypeConverter<Date> {\n\n    // DateFormat is not thread-safe, so wrap it in a ThreadLocal\n    private final ThreadLocal<DateFormat> mDateFormat = new ThreadLocal<DateFormat>(){\n        @Override\n        protected DateFormat initialValue() {\n            return getDateFormat();\n        }\n    };\n\n    @Override\n    public Date parse(JsonParser jsonParser) throws IOException {\n        String dateString = jsonParser.getValueAsString(null);\n        if (dateString != null) {\n            try {\n                return mDateFormat.get().parse(dateString);\n            } catch (ParseException e) {\n                return null;\n            }\n        } else {\n            return null;\n        }\n    }\n\n    @Override\n    public void serialize(Date object, String fieldName, boolean writeFieldNameForObject, JsonGenerator jsonGenerator) throws IOException {\n        if (fieldName != null && object != null) {\n            jsonGenerator.writeStringField(fieldName, mDateFormat.get().format(object));\n        } else if (object != null) {\n            jsonGenerator.writeString(mDateFormat.get().format(object));\n        } else {\n            if (fieldName != null) {\n                jsonGenerator.writeFieldName(fieldName);\n            }\n            jsonGenerator.writeNull();\n        }\n    }\n\n    /** Called to get the DateFormat used to parse and serialize objects */\n    public abstract DateFormat getDateFormat();\n\n}\n"
  },
  {
    "path": "core/src/main/java/com/bluelinelabs/logansquare/typeconverters/DefaultCalendarConverter.java",
    "content": "package com.bluelinelabs.logansquare.typeconverters;\n\nimport java.text.DateFormat;\n\n/** The default CalendarTypeConverter implementation. Attempts to parse ISO8601-formatted dates. */\npublic class DefaultCalendarConverter extends CalendarTypeConverter {\n\n    private DateFormat mDateFormat;\n\n    public DefaultCalendarConverter() {\n        mDateFormat = new DefaultDateFormatter();\n    }\n\n    public DateFormat getDateFormat() {\n        return mDateFormat;\n    }\n\n}\n"
  },
  {
    "path": "core/src/main/java/com/bluelinelabs/logansquare/typeconverters/DefaultDateConverter.java",
    "content": "package com.bluelinelabs.logansquare.typeconverters;\n\nimport java.text.DateFormat;\n\n/** The default DateTypeConverter implementation. Attempts to parse ISO8601-formatted dates. */\npublic class DefaultDateConverter extends DateTypeConverter {\n\n    public DateFormat getDateFormat() {\n        return new DefaultDateFormatter();\n    }\n\n}\n"
  },
  {
    "path": "core/src/main/java/com/bluelinelabs/logansquare/typeconverters/DefaultDateFormatter.java",
    "content": "package com.bluelinelabs.logansquare.typeconverters;\n\nimport java.text.ParseException;\nimport java.text.ParsePosition;\nimport java.text.SimpleDateFormat;\nimport java.util.Date;\nimport java.util.Locale;\nimport java.util.TimeZone;\n\n/** Attempt at making a DateFormat that can actually parse ISO 8601 dates correctly */\npublic class DefaultDateFormatter extends SimpleDateFormat {\n\n    public DefaultDateFormatter() {\n        super(\"yyyy-MM-dd'T'HH:mm:ss.SSSZ\", Locale.US);\n        setTimeZone(TimeZone.getTimeZone(\"UTC\"));\n    }\n\n    /** Replace ending Z's with +0000 so Java's SimpleDateFormat can handle it correctly */\n    private String getFixedInputString(String input) {\n        return input != null ? input.replaceAll(\"Z$\", \"+0000\") : null;\n    }\n\n    @Override\n    public Date parse(String string) throws ParseException {\n        return super.parse(getFixedInputString(string));\n    }\n\n    @Override\n    public Object parseObject(String string, ParsePosition position) {\n        return super.parseObject(getFixedInputString(string), position);\n    }\n\n    @Override\n    public Object parseObject(String string) throws ParseException {\n        return super.parseObject(getFixedInputString(string));\n    }\n\n    @Override\n    public Date parse(String string, ParsePosition position) {\n        return super.parse(getFixedInputString(string), position);\n    }\n}"
  },
  {
    "path": "core/src/main/java/com/bluelinelabs/logansquare/typeconverters/DoubleBasedTypeConverter.java",
    "content": "package com.bluelinelabs.logansquare.typeconverters;\n\nimport com.fasterxml.jackson.core.JsonGenerator;\nimport com.fasterxml.jackson.core.JsonParser;\n\nimport java.io.IOException;\n\npublic abstract class DoubleBasedTypeConverter<T> implements TypeConverter<T> {\n\n    /**\n     * Called to convert a double into an object of type T.\n     *\n     * @param d The double parsed from JSON.\n     */\n    public abstract T getFromDouble(double d);\n\n    /**\n     * Called to convert a an object of type T into a double.\n     *\n     * @param object The object being converted.\n     */\n    public abstract double convertToDouble(T object);\n\n    @Override\n    public T parse(JsonParser jsonParser) throws IOException {\n        return getFromDouble(jsonParser.getValueAsDouble());\n    }\n\n    @Override\n    public void serialize(T object, String fieldName, boolean writeFieldNameForObject, JsonGenerator jsonGenerator) throws IOException {\n        if (fieldName != null) {\n            jsonGenerator.writeNumberField(fieldName, convertToDouble(object));\n        } else {\n            jsonGenerator.writeNumber(convertToDouble(object));\n        }\n    }\n\n}\n"
  },
  {
    "path": "core/src/main/java/com/bluelinelabs/logansquare/typeconverters/EnumValueTypeConverter.java",
    "content": "package com.bluelinelabs.logansquare.typeconverters;\n\npublic class EnumValueTypeConverter<T extends Enum<T>> extends StringBasedTypeConverter<T> {\n\n    private Class<T> mClass;\n\n    public EnumValueTypeConverter(Class<T> cls) {\n        mClass = cls;\n    }\n\n    @Override\n    public T getFromString(String string) {\n        return Enum.valueOf(mClass, convertString(string, true));\n    }\n\n    @Override\n    public String convertToString(T object) {\n        return convertString(object.toString(), false);\n    }\n\n    public String convertString(String string, boolean forParse) {\n        return string;\n    }\n\n}\n"
  },
  {
    "path": "core/src/main/java/com/bluelinelabs/logansquare/typeconverters/FloatBasedTypeConverter.java",
    "content": "package com.bluelinelabs.logansquare.typeconverters;\n\nimport com.fasterxml.jackson.core.JsonGenerator;\nimport com.fasterxml.jackson.core.JsonParser;\n\nimport java.io.IOException;\n\npublic abstract class FloatBasedTypeConverter<T> implements TypeConverter<T> {\n\n    /**\n     * Called to convert a float into an object of type T.\n     *\n     * @param f The float parsed from JSON.\n     */\n    public abstract T getFromFloat(float f);\n\n    /**\n     * Called to convert a an object of type T into a float.\n     *\n     * @param object The object being converted.\n     */\n    public abstract float convertToFloat(T object);\n\n    @Override\n    public T parse(JsonParser jsonParser) throws IOException {\n        return getFromFloat((float) jsonParser.getValueAsDouble());\n    }\n\n    @Override\n    public void serialize(T object, String fieldName, boolean writeFieldNameForObject, JsonGenerator jsonGenerator) throws IOException {\n        if (fieldName != null) {\n            jsonGenerator.writeNumberField(fieldName, convertToFloat(object));\n        } else {\n            jsonGenerator.writeNumber(convertToFloat(object));\n        }\n    }\n\n}\n"
  },
  {
    "path": "core/src/main/java/com/bluelinelabs/logansquare/typeconverters/IntBasedTypeConverter.java",
    "content": "package com.bluelinelabs.logansquare.typeconverters;\n\nimport com.fasterxml.jackson.core.JsonGenerator;\nimport com.fasterxml.jackson.core.JsonParser;\n\nimport java.io.IOException;\n\npublic abstract class IntBasedTypeConverter<T> implements TypeConverter<T> {\n\n    /**\n     * Called to convert an int into an object of type T.\n     *\n     * @param i The int parsed from JSON.\n     */\n    public abstract T getFromInt(int i);\n\n    /**\n     * Called to convert a an object of type T into an int.\n     *\n     * @param object The object being converted.\n     */\n    public abstract int convertToInt(T object);\n\n    @Override\n    public T parse(JsonParser jsonParser) throws IOException {\n        return getFromInt(jsonParser.getValueAsInt());\n    }\n\n    @Override\n    public void serialize(T object, String fieldName, boolean writeFieldNameForObject, JsonGenerator jsonGenerator) throws IOException {\n        if (fieldName != null) {\n            jsonGenerator.writeNumberField(fieldName, convertToInt(object));\n        } else {\n            jsonGenerator.writeNumber(convertToInt(object));\n        }\n    }\n\n}\n"
  },
  {
    "path": "core/src/main/java/com/bluelinelabs/logansquare/typeconverters/LongBasedTypeConverter.java",
    "content": "package com.bluelinelabs.logansquare.typeconverters;\n\nimport com.fasterxml.jackson.core.JsonGenerator;\nimport com.fasterxml.jackson.core.JsonParser;\n\nimport java.io.IOException;\n\npublic abstract class LongBasedTypeConverter<T> implements TypeConverter<T> {\n\n    /**\n     * Called to convert a long into an object of type T.\n     *\n     * @param l The long parsed from JSON.\n     */\n    public abstract T getFromLong(long l);\n\n    /**\n     * Called to convert a an object of type T into a long.\n     *\n     * @param object The object being converted.\n     */\n    public abstract long convertToLong(T object);\n\n    @Override\n    public T parse(JsonParser jsonParser) throws IOException {\n        return getFromLong(jsonParser.getValueAsLong());\n    }\n\n    @Override\n    public void serialize(T object, String fieldName, boolean writeFieldNameForObject, JsonGenerator jsonGenerator) throws IOException {\n        if (fieldName != null) {\n            jsonGenerator.writeNumberField(fieldName, convertToLong(object));\n        } else {\n            jsonGenerator.writeNumber(convertToLong(object));\n        }\n    }\n\n}\n"
  },
  {
    "path": "core/src/main/java/com/bluelinelabs/logansquare/typeconverters/StringBasedTypeConverter.java",
    "content": "package com.bluelinelabs.logansquare.typeconverters;\n\nimport com.fasterxml.jackson.core.JsonGenerator;\nimport com.fasterxml.jackson.core.JsonParser;\n\nimport java.io.IOException;\n\npublic abstract class StringBasedTypeConverter<T> implements TypeConverter<T> {\n\n    /**\n     * Called to convert a String into an object of type T.\n     *\n     * @param string The String parsed from JSON.\n     */\n    public abstract T getFromString(String string);\n\n    /**\n     * Called to convert a an object of type T into a String.\n     *\n     * @param object The object being converted.\n     */\n    public abstract String convertToString(T object);\n\n    @Override\n    public T parse(JsonParser jsonParser) throws IOException {\n        return getFromString(jsonParser.getValueAsString(null));\n    }\n\n    @Override\n    public void serialize(T object, String fieldName, boolean writeFieldNameForObject, JsonGenerator jsonGenerator) throws IOException {\n        if (fieldName != null) {\n            jsonGenerator.writeStringField(fieldName, convertToString(object));\n        } else {\n            jsonGenerator.writeString(convertToString(object));\n        }\n    }\n\n}\n"
  },
  {
    "path": "core/src/main/java/com/bluelinelabs/logansquare/typeconverters/TypeConverter.java",
    "content": "package com.bluelinelabs.logansquare.typeconverters;\n\nimport com.fasterxml.jackson.core.JsonGenerator;\nimport com.fasterxml.jackson.core.JsonParser;\n\nimport java.io.IOException;\n\n/** Implement this interface in order to create a way to custom parse and serialize @JsonFields */\npublic interface TypeConverter<T> {\n\n    /**\n     * Called to parse the current object in the jsonParser to an object of type T\n     *\n     * @param jsonParser The JsonParser that is pre-configured for this field.\n     */\n    T parse(JsonParser jsonParser) throws IOException;\n\n    /**\n     * Called to serialize an object of type T to JSON using the JsonGenerator and field name.\n     *\n     * @param object The object to serialize\n     * @param fieldName The JSON field name of the object when it is serialized\n     * @param writeFieldNameForObject If true, you're responsible for calling jsonGenerator.writeFieldName(fieldName) before writing the field\n     * @param jsonGenerator The JsonGenerator object to which the object should be written\n     */\n    void serialize(T object, String fieldName, boolean writeFieldNameForObject, JsonGenerator jsonGenerator) throws IOException;\n\n}\n"
  },
  {
    "path": "core/src/main/java/com/bluelinelabs/logansquare/util/SimpleArrayMap.java",
    "content": "/*\n * Copyright (C) 2013 The Android Open Source Project\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\npackage com.bluelinelabs.logansquare.util;\n\nimport java.util.Map;\n\n/**\n * Base implementation of ArrayMap that doesn't include any standard Java\n * container API interoperability.  These features are generally heavier-weight ways\n * to interact with the container, so discouraged, but they can be useful to make it\n * easier to use as a drop-in replacement for HashMap.  If you don't need them, this\n * class can be preferrable since it doesn't bring in any of the implementation of those\n * APIs, allowing that code to be stripped by ProGuard.\n */\npublic class SimpleArrayMap<K, V> {\n\n    static final int[] EMPTY_INTS = new int[0];\n    static final Object[] EMPTY_OBJECTS = new Object[0];\n\n    /**\n     * The minimum amount by which the capacity of a ArrayMap will increase.\n     * This is tuned to be relatively space-efficient.\n     */\n    private static final int BASE_SIZE = 4;\n\n    /**\n     * Maximum number of entries to have in array caches.\n     */\n    private static final int CACHE_SIZE = 10;\n\n    /**\n     * Caches of small array objects to avoid spamming garbage.  The cache\n     * Object[] variable is a pointer to a linked list of array objects.\n     * The first entry in the array is a pointer to the next array in the\n     * list; the second entry is a pointer to the int[] hash code array for it.\n     */\n    static Object[] mBaseCache;\n    static int mBaseCacheSize;\n    static Object[] mTwiceBaseCache;\n    static int mTwiceBaseCacheSize;\n\n    int[] mHashes;\n    Object[] mArray;\n    int mSize;\n\n    int indexOf(Object key, int hash) {\n        final int N = mSize;\n\n        // Important fast case: if nothing is in here, nothing to look for.\n        if (N == 0) {\n            return ~0;\n        }\n\n        int index = binarySearch(mHashes, N, hash);\n\n        // If the hash code wasn't found, then we have no entry for this key.\n        if (index < 0) {\n            return index;\n        }\n\n        // If the key at the returned index matches, that's what we want.\n        if (key.equals(mArray[index<<1])) {\n            return index;\n        }\n\n        // Search for a matching key after the index.\n        int end;\n        for (end = index + 1; end < N && mHashes[end] == hash; end++) {\n            if (key.equals(mArray[end << 1])) return end;\n        }\n\n        // Search for a matching key before the index.\n        for (int i = index - 1; i >= 0 && mHashes[i] == hash; i--) {\n            if (key.equals(mArray[i << 1])) return i;\n        }\n\n        // Key not found -- return negative value indicating where a\n        // new entry for this key should go.  We use the end of the\n        // hash chain to reduce the number of array entries that will\n        // need to be copied when inserting.\n        return ~end;\n    }\n\n    int indexOfNull() {\n        final int N = mSize;\n\n        // Important fast case: if nothing is in here, nothing to look for.\n        if (N == 0) {\n            return ~0;\n        }\n\n        int index = binarySearch(mHashes, N, 0);\n\n        // If the hash code wasn't found, then we have no entry for this key.\n        if (index < 0) {\n            return index;\n        }\n\n        // If the key at the returned index matches, that's what we want.\n        if (null == mArray[index<<1]) {\n            return index;\n        }\n\n        // Search for a matching key after the index.\n        int end;\n        for (end = index + 1; end < N && mHashes[end] == 0; end++) {\n            if (null == mArray[end << 1]) return end;\n        }\n\n        // Search for a matching key before the index.\n        for (int i = index - 1; i >= 0 && mHashes[i] == 0; i--) {\n            if (null == mArray[i << 1]) return i;\n        }\n\n        // Key not found -- return negative value indicating where a\n        // new entry for this key should go.  We use the end of the\n        // hash chain to reduce the number of array entries that will\n        // need to be copied when inserting.\n        return ~end;\n    }\n\n    private void allocArrays(final int size) {\n        if (size == (BASE_SIZE*2)) {\n            synchronized (SimpleArrayMap.class) {\n                if (mTwiceBaseCache != null) {\n                    final Object[] array = mTwiceBaseCache;\n                    mArray = array;\n                    mTwiceBaseCache = (Object[])array[0];\n                    mHashes = (int[])array[1];\n                    array[0] = array[1] = null;\n                    mTwiceBaseCacheSize--;\n                    return;\n                }\n            }\n        } else if (size == BASE_SIZE) {\n            synchronized (SimpleArrayMap.class) {\n                if (mBaseCache != null) {\n                    final Object[] array = mBaseCache;\n                    mArray = array;\n                    mBaseCache = (Object[])array[0];\n                    mHashes = (int[])array[1];\n                    array[0] = array[1] = null;\n                    mBaseCacheSize--;\n                    return;\n                }\n            }\n        }\n\n        mHashes = new int[size];\n        mArray = new Object[size<<1];\n    }\n\n    private static void freeArrays(final int[] hashes, final Object[] array, final int size) {\n        if (hashes.length == (BASE_SIZE*2)) {\n            synchronized (SimpleArrayMap.class) {\n                if (mTwiceBaseCacheSize < CACHE_SIZE) {\n                    array[0] = mTwiceBaseCache;\n                    array[1] = hashes;\n                    for (int i=(size<<1)-1; i>=2; i--) {\n                        array[i] = null;\n                    }\n                    mTwiceBaseCache = array;\n                    mTwiceBaseCacheSize++;\n                }\n            }\n        } else if (hashes.length == BASE_SIZE) {\n            synchronized (SimpleArrayMap.class) {\n                if (mBaseCacheSize < CACHE_SIZE) {\n                    array[0] = mBaseCache;\n                    array[1] = hashes;\n                    for (int i=(size<<1)-1; i>=2; i--) {\n                        array[i] = null;\n                    }\n                    mBaseCache = array;\n                    mBaseCacheSize++;\n                }\n            }\n        }\n    }\n\n    /**\n     * Create a new empty ArrayMap.  The default capacity of an array map is 0, and\n     * will grow once items are added to it.\n     */\n    public SimpleArrayMap() {\n        mHashes = EMPTY_INTS;\n        mArray = EMPTY_OBJECTS;\n        mSize = 0;\n    }\n\n    /**\n     * Create a new ArrayMap with a given initial capacity.\n     */\n    public SimpleArrayMap(int capacity) {\n        if (capacity == 0) {\n            mHashes = EMPTY_INTS;\n            mArray = EMPTY_OBJECTS;\n        } else {\n            allocArrays(capacity);\n        }\n        mSize = 0;\n    }\n\n    /**\n     * Create a new ArrayMap with the mappings from the given ArrayMap.\n     */\n    public SimpleArrayMap(SimpleArrayMap map) {\n        this();\n        if (map != null) {\n            putAll(map);\n        }\n    }\n\n    /**\n     * Make the array map empty.  All storage is released.\n     */\n    public void clear() {\n        if (mSize != 0) {\n            freeArrays(mHashes, mArray, mSize);\n            mHashes = EMPTY_INTS;\n            mArray = EMPTY_OBJECTS;\n            mSize = 0;\n        }\n    }\n\n    /**\n     * Ensure the array map can hold at least <var>minimumCapacity</var>\n     * items.\n     */\n    public void ensureCapacity(int minimumCapacity) {\n        if (mHashes.length < minimumCapacity) {\n            final int[] ohashes = mHashes;\n            final Object[] oarray = mArray;\n            allocArrays(minimumCapacity);\n            if (mSize > 0) {\n                System.arraycopy(ohashes, 0, mHashes, 0, mSize);\n                System.arraycopy(oarray, 0, mArray, 0, mSize<<1);\n            }\n            freeArrays(ohashes, oarray, mSize);\n        }\n    }\n\n    /**\n     * Check whether a key exists in the array.\n     *\n     * @param key The key to search for.\n     * @return Returns true if the key exists, else false.\n     */\n    public boolean containsKey(Object key) {\n        return indexOfKey(key) >= 0;\n    }\n\n    /**\n     * Returns the index of a key in the set.\n     *\n     * @param key The key to search for.\n     * @return Returns the index of the key if it exists, else a negative integer.\n     */\n    public int indexOfKey(Object key) {\n        return key == null ? indexOfNull() : indexOf(key, key.hashCode());\n    }\n\n    int indexOfValue(Object value) {\n        final int N = mSize*2;\n        final Object[] array = mArray;\n        if (value == null) {\n            for (int i=1; i<N; i+=2) {\n                if (array[i] == null) {\n                    return i>>1;\n                }\n            }\n        } else {\n            for (int i=1; i<N; i+=2) {\n                if (value.equals(array[i])) {\n                    return i>>1;\n                }\n            }\n        }\n        return -1;\n    }\n\n    /**\n     * Check whether a value exists in the array.  This requires a linear search\n     * through the entire array.\n     *\n     * @param value The value to search for.\n     * @return Returns true if the value exists, else false.\n     */\n    public boolean containsValue(Object value) {\n        return indexOfValue(value) >= 0;\n    }\n\n    /**\n     * Retrieve a value from the array.\n     * @param key The key of the value to retrieve.\n     * @return Returns the value associated with the given key,\n     * or null if there is no such key.\n     */\n    public V get(Object key) {\n        final int index = indexOfKey(key);\n        return index >= 0 ? (V)mArray[(index<<1)+1] : null;\n    }\n\n    /**\n     * Return the key at the given index in the array.\n     * @param index The desired index, must be between 0 and {@link #size()}-1.\n     * @return Returns the key stored at the given index.\n     */\n    public K keyAt(int index) {\n        return (K)mArray[index << 1];\n    }\n\n    /**\n     * Return the value at the given index in the array.\n     * @param index The desired index, must be between 0 and {@link #size()}-1.\n     * @return Returns the value stored at the given index.\n     */\n    public V valueAt(int index) {\n        return (V)mArray[(index << 1) + 1];\n    }\n\n    /**\n     * Set the value at a given index in the array.\n     * @param index The desired index, must be between 0 and {@link #size()}-1.\n     * @param value The new value to store at this index.\n     * @return Returns the previous value at the given index.\n     */\n    public V setValueAt(int index, V value) {\n        index = (index << 1) + 1;\n        V old = (V)mArray[index];\n        mArray[index] = value;\n        return old;\n    }\n\n    /**\n     * Return true if the array map contains no items.\n     */\n    public boolean isEmpty() {\n        return mSize <= 0;\n    }\n\n    /**\n     * Add a new value to the array map.\n     * @param key The key under which to store the value.  <b>Must not be null.</b>  If\n     * this key already exists in the array, its value will be replaced.\n     * @param value The value to store for the given key.\n     * @return Returns the old value that was stored for the given key, or null if there\n     * was no such key.\n     */\n    public V put(K key, V value) {\n        final int hash;\n        int index;\n        if (key == null) {\n            hash = 0;\n            index = indexOfNull();\n        } else {\n            hash = key.hashCode();\n            index = indexOf(key, hash);\n        }\n        if (index >= 0) {\n            index = (index<<1) + 1;\n            final V old = (V)mArray[index];\n            mArray[index] = value;\n            return old;\n        }\n\n        index = ~index;\n        if (mSize >= mHashes.length) {\n            final int n = mSize >= (BASE_SIZE*2) ? (mSize+(mSize>>1))\n                    : (mSize >= BASE_SIZE ? (BASE_SIZE*2) : BASE_SIZE);\n\n            final int[] ohashes = mHashes;\n            final Object[] oarray = mArray;\n            allocArrays(n);\n\n            if (mHashes.length > 0) {\n                System.arraycopy(ohashes, 0, mHashes, 0, ohashes.length);\n                System.arraycopy(oarray, 0, mArray, 0, oarray.length);\n            }\n\n            freeArrays(ohashes, oarray, mSize);\n        }\n\n        if (index < mSize) {\n            System.arraycopy(mHashes, index, mHashes, index + 1, mSize - index);\n            System.arraycopy(mArray, index << 1, mArray, (index + 1) << 1, (mSize - index) << 1);\n        }\n\n        mHashes[index] = hash;\n        mArray[index<<1] = key;\n        mArray[(index<<1)+1] = value;\n        mSize++;\n        return null;\n    }\n\n    /**\n     * Perform a {@link #put(Object, Object)} of all key/value pairs in <var>array</var>\n     * @param array The array whose contents are to be retrieved.\n     */\n    public void putAll(SimpleArrayMap<? extends K, ? extends V> array) {\n        final int N = array.mSize;\n        ensureCapacity(mSize + N);\n        if (mSize == 0) {\n            if (N > 0) {\n                System.arraycopy(array.mHashes, 0, mHashes, 0, N);\n                System.arraycopy(array.mArray, 0, mArray, 0, N<<1);\n                mSize = N;\n            }\n        } else {\n            for (int i=0; i<N; i++) {\n                put(array.keyAt(i), array.valueAt(i));\n            }\n        }\n    }\n\n    /**\n     * Remove an existing key from the array map.\n     * @param key The key of the mapping to remove.\n     * @return Returns the value that was stored under the key, or null if there\n     * was no such key.\n     */\n    public V remove(Object key) {\n        final int index = indexOfKey(key);\n        if (index >= 0) {\n            return removeAt(index);\n        }\n\n        return null;\n    }\n\n    /**\n     * Remove the key/value mapping at the given index.\n     * @param index The desired index, must be between 0 and {@link #size()}-1.\n     * @return Returns the value that was stored at this index.\n     */\n    public V removeAt(int index) {\n        final Object old = mArray[(index << 1) + 1];\n        if (mSize <= 1) {\n            // Now empty.\n            freeArrays(mHashes, mArray, mSize);\n            mHashes = EMPTY_INTS;\n            mArray = EMPTY_OBJECTS;\n            mSize = 0;\n        } else {\n            if (mHashes.length > (BASE_SIZE*2) && mSize < mHashes.length/3) {\n                // Shrunk enough to reduce size of arrays.  We don't allow it to\n                // shrink smaller than (BASE_SIZE*2) to avoid flapping between\n                // that and BASE_SIZE.\n                final int n = mSize > (BASE_SIZE*2) ? (mSize + (mSize>>1)) : (BASE_SIZE*2);\n\n                final int[] ohashes = mHashes;\n                final Object[] oarray = mArray;\n                allocArrays(n);\n\n                mSize--;\n                if (index > 0) {\n                    System.arraycopy(ohashes, 0, mHashes, 0, index);\n                    System.arraycopy(oarray, 0, mArray, 0, index << 1);\n                }\n                if (index < mSize) {\n                    System.arraycopy(ohashes, index + 1, mHashes, index, mSize - index);\n                    System.arraycopy(oarray, (index + 1) << 1, mArray, index << 1,\n                            (mSize - index) << 1);\n                }\n            } else {\n                mSize--;\n                if (index < mSize) {\n                    System.arraycopy(mHashes, index + 1, mHashes, index, mSize - index);\n                    System.arraycopy(mArray, (index + 1) << 1, mArray, index << 1,\n                            (mSize - index) << 1);\n                }\n                mArray[mSize << 1] = null;\n                mArray[(mSize << 1) + 1] = null;\n            }\n        }\n        return (V)old;\n    }\n\n    /**\n     * Return the number of items in this array map.\n     */\n    public int size() {\n        return mSize;\n    }\n\n    /**\n     * {@inheritDoc}\n     *\n     * <p>This implementation returns false if the object is not a map, or\n     * if the maps have different sizes. Otherwise, for each key in this map,\n     * values of both maps are compared. If the values for any key are not\n     * equal, the method returns false, otherwise it returns true.\n     */\n    @Override\n    public boolean equals(Object object) {\n        if (this == object) {\n            return true;\n        }\n        if (object instanceof Map) {\n            Map<?, ?> map = (Map<?, ?>) object;\n            if (size() != map.size()) {\n                return false;\n            }\n\n            try {\n                for (int i=0; i<mSize; i++) {\n                    K key = keyAt(i);\n                    V mine = valueAt(i);\n                    Object theirs = map.get(key);\n                    if (mine == null) {\n                        if (theirs != null || !map.containsKey(key)) {\n                            return false;\n                        }\n                    } else if (!mine.equals(theirs)) {\n                        return false;\n                    }\n                }\n            } catch (NullPointerException ignored) {\n                return false;\n            } catch (ClassCastException ignored) {\n                return false;\n            }\n            return true;\n        }\n        return false;\n    }\n\n    /**\n     * {@inheritDoc}\n     */\n    @Override\n    public int hashCode() {\n        final int[] hashes = mHashes;\n        final Object[] array = mArray;\n        int result = 0;\n        for (int i = 0, v = 1, s = mSize; i < s; i++, v+=2) {\n            Object value = array[v];\n            result += hashes[i] ^ (value == null ? 0 : value.hashCode());\n        }\n        return result;\n    }\n\n    /**\n     * {@inheritDoc}\n     *\n     * <p>This implementation composes a string by iterating over its mappings. If\n     * this map contains itself as a key or a value, the string \"(this Map)\"\n     * will appear in its place.\n     */\n    @Override\n    public String toString() {\n        if (isEmpty()) {\n            return \"{}\";\n        }\n\n        StringBuilder buffer = new StringBuilder(mSize * 28);\n        buffer.append('{');\n        for (int i=0; i<mSize; i++) {\n            if (i > 0) {\n                buffer.append(\", \");\n            }\n            Object key = keyAt(i);\n            if (key != this) {\n                buffer.append(key);\n            } else {\n                buffer.append(\"(this Map)\");\n            }\n            buffer.append('=');\n            Object value = valueAt(i);\n            if (value != this) {\n                buffer.append(value);\n            } else {\n                buffer.append(\"(this Map)\");\n            }\n        }\n        buffer.append('}');\n        return buffer.toString();\n    }\n\n    static int binarySearch(int[] array, int size, int value) {\n        int lo = 0;\n        int hi = size - 1;\n\n        while (lo <= hi) {\n            int mid = (lo + hi) >>> 1;\n            int midVal = array[mid];\n\n            if (midVal < value) {\n                lo = mid + 1;\n            } else if (midVal > value) {\n                hi = mid - 1;\n            } else {\n                return mid;  // value found\n            }\n        }\n        return ~lo;  // value not present\n    }\n}"
  },
  {
    "path": "docs/AnnotationsOnlyModel.md",
    "content": "##Annotating Every Field (Recommended)\n\n###Sample Model\n\n```java\n@JsonObject\npublic class Image {\n\n    /*\n     * Standard field declaration.\n     */\n    @JsonField\n    public String format;\n    \n    /*\n     * Note: passing the name parameter into @JsonField will cause\n     * LoganSquare to use \"_id\" in JSON parsing and processing instead \n     * of \"imageId\".\n     */\n    @JsonField(name = \"_id\")\n    public int imageId;\n\n    @JsonField\n    public String url;\n\n    @JsonField\n    public String description;\n    \n    /*\n     * Note that even though this is a package-local field,\n     * LoganSquare can parse and serialize it without issue.\n     */\n    @JsonField(name = \"similar_images\")\n    List<Image> similarImages;\n    \n    /*\n     * Note that since this field isn't annotated as a\n     * @JsonField, LoganSquare will ignore it when parsing\n     * and serializing this class.\n     */\n    public int nonJsonField;\n    \n    /*\n     * Since this is a private field, LoganSquare will use \n     * the getter and setter to parse and serialize this one.\n     * If the either the getter or setter are not present, \n     * you're gonna have a bad time.\n     */\n    @JsonField\n    private int privateInt;\n    \n    public int getPrivateInt() {\n        return privateInt;\n    }\n    \n    public void setPrivateInt(int i) {\n        privateInt = i;\n    }\n    \n    /*\n     * Optional callback method to do something when your\n     * object is done parsing.\n     */\n    @OnJsonParseComplete void onParseComplete() {\n        // Do some fancy post-processing stuff after parsing here\n    }\n    \n    /*\n     * Optional callback method to do something before your\n     * object serializes.\n     */\n    @OnPreJsonSerialize void onPreSerialize() {\n        // Do some fancy pre-processing stuff before serializing here\n    }\n    \n}\n\n```"
  },
  {
    "path": "docs/Models.md",
    "content": "##Model Creation\n\n###Sample Models\n\nLoganSquare provides a few robust ways to create your models. Sample models for each strategy are provided below:\n\n * [Annotating every field](AnnotationsOnlyModel.md)\n  * This is the recommended type of model. It requires writing more annotations, but it's less error prone.\n * [Include all public and package-local fields](PrivateFieldsModel.md)\n  * This strategy will assume that all of your public and package-local fields should be parsed and serialized. You'll have to write way less annotations, but errors will occur if you have any fields that can't be converted to or from JSON using a registered `TypeConverter`.\n * [Include all public and package-local field AND accessors](PrivateFieldsAndAccessorsModel.md)\n  * This uses the same concept as the above stretegy, but also includes any private fields that have both a getter and a setter.\n\n###Field Naming Policies\n\nBy default, LoganSquare assumes that the JSON field name will match your Java variable's name unless the `name` parameter has been used in the field's `@JsonField` annotation. This can be changed by passing another value into the `@JsonObject` annotation's `fieldNamingPolicy` variable. \n\nCurrently the only options are `FIELD_NAME`, which is the default described above, and `LOWER_CASE_WITH_UNDERSCORES`, which will cause LoganSquare to assume that your JSON fields are named the same as your java variable names, except converted to lower case with undercore notation instead of camel case.\n\n###Serializing Null Values\n\nBy default, LoganSquare will not serialize `null` values or collection elements into your JSON object. To change this, set the `@JsonObject` annotation's `serializeNullObjects` and/or `serializeNullCollectionElements` to `true`."
  },
  {
    "path": "docs/Parsing.md",
    "content": "##Parsing JSON\n\nJSON can be parsed from an `InputStream` or a `String`. If you're getting your JSON directly from your networking library, you should be able to use an `InputStream` to avoid converting it to a String for no reason. Here's a sample:\n\n```java\n    // Parse from an InputStream\n    InputStream is = ...;\n    Image imageFromInputStream = LoganSquare.parse(is, Image.class);\n    \n    // Parse from a String\n    String jsonString = ...;\n    Image imageFromString = LoganSquare.parse(jsonString, Image.class); \n```"
  },
  {
    "path": "docs/PrivateFieldsAndAccessorsModel.md",
    "content": "##Non-private Fields And Accessors Detection Policy\n\n###Sample Model\n\n```java\n/*\n * To have LoganSquare detect all non-private fields and \n * accessors, even if they aren't annotated as @JsonFields, \n * set the fieldDetectionPolicy of the @JsonObject.\n */\n@JsonObject(fieldDetectionPolicy = FieldDetectionPolicy.NONPRIVATE_FIELDS_AND_ACCESSORS)\npublic class Image {\n\n    /*\n     * Standard field declaration.\n     */\n    public String format;\n    \n    /*\n     * If you want to have a variable with a different name\n     * than the JSON field, you'll still have to annotate it like so.\n     */\n    @JsonField(name = \"_id\")\n    public int imageId;\n\n    public String url;\n\n    public String description;\n    \n    /*\n     * Note that even though this is a package-local field,\n     * LoganSquare can parse and serialize it without issue.\n     */\n    List<Image> similarImages;\n    \n    /*\n     * Note that since this field is annotated with\n     * @JsonIgnore, LoganSquare will ignore it when parsing\n     * and serializing this class.\n     */\n    @JsonIgnore\n    public int nonJsonField;\n    \n    /*\n     * Since this is a private field, LoganSquare will use \n     * the getter and setter to parse and serialize this one.\n     * If either the getter or setter are not present, this\n     * field will be ignored.\n     */\n    private int privateInt;\n    \n    public int getPrivateInt() {\n        return privateInt;\n    }\n    \n    public void setPrivateInt(int i) {\n        privateInt = i;\n    }\n          \n    /*\n     * Optional callback method to do something when your\n     * object is done parsing.\n     */\n    @OnJsonParseComplete void onParseComplete() {\n        // Do some fancy post-processing stuff after parsing here\n    }\n    \n    /*\n     * Optional callback method to do something before your\n     * object serializes.\n     */\n    @OnPreJsonSerialize void onPreSerialize() {\n        // Do some fancy pre-processing stuff before serializing here\n    }\n}\n\n```"
  },
  {
    "path": "docs/PrivateFieldsModel.md",
    "content": "##Non-private Field Detection Policy\n\n###Sample Model\n\n```java\n/*\n * To have LoganSquare detect all non-private fields, even if they\n * aren't annotated as @JsonFields, set the fieldDetectionPolicy of\n * the @JsonObject.\n */\n@JsonObject(fieldDetectionPolicy = FieldDetectionPolicy.NONPRIVATE_FIELDS)\npublic class Image {\n\n    /*\n     * Standard field declaration.\n     */\n    public String format;\n    \n    /*\n     * If you want to have a variable with a different name\n     * than the JSON field, you'll still have to annotate it like so.\n     */\n    @JsonField(name = \"_id\")\n    public int imageId;\n\n    public String url;\n\n    public String description;\n    \n    /*\n     * Note that even though this is a package-local field,\n     * LoganSquare can parse and serialize it without issue.\n     */\n    List<Image> similarImages;\n    \n    /*\n     * Note that since this field is annotated with\n     * @JsonIgnore, LoganSquare will ignore it when parsing\n     * and serializing this class.\n     */\n    @JsonIgnore\n    public int nonJsonField;\n    \n    /*\n     * Since this is a private field, LoganSquare will ignore it\n     * due to the field detection policy.\n     */\n    private int privateInt;\n    \n    public int getPrivateInt() {\n        return privateInt;\n    }\n    \n    public void setPrivateInt(int i) {\n        privateInt = i;\n    }\n        \n    /*\n     * Optional callback method to do something when your\n     * object is done parsing.\n     */\n    @OnJsonParseComplete void onParseComplete() {\n        // Do some fancy post-processing stuff after parsing here\n    }\n    \n    /*\n     * Optional callback method to do something before your\n     * object serializes.\n     */\n    @OnPreJsonSerialize void onPreSerialize() {\n        // Do some fancy pre-processing stuff before serializing here\n    }\n}\n\n```"
  },
  {
    "path": "docs/Serializing.md",
    "content": "##Serializing JSON\n\nLoganSquare can serialize objects to an `OutputStream` or a `String`. Here's a sample:\n\n```java\n    // Serialize it to an OutputStream\n    OutputStream os = ...;\n    LoganSquare.serialize(image, os);\n    \n    // Serialize it to a String\n    String jsonString = LoganSquare.serialize(image);\n```"
  },
  {
    "path": "docs/TypeConverters.md",
    "content": "##Type Support\n\n###Types with Built-in Support\n\nBy default, the following types are supported by LoganSquare:\n\n* any object using the `@JsonObject` annotation\n* int and Integer\n* long and Long\n* float and Float\n* double and Double\n* boolean and Boolean\n* String\n* Date (if formatted using the ISO 8601 standard: `yyyy-MM-dd'T'HH:mm:ss.SSSZ`)\n\nAdditionally, the following collections are supported:\n\n* Lists\n * ArrayList\n * LinkedList\n* Sets\n * HashSet \n* Queues\n * ArrayDeque\n* Deques\n * ArrayDeque\n* Maps (with Strings as keys)\n * HashMap\n * TreeMap\n * LinkedHashMap \n* Array (Not technically a Collection, but still supported. Note that Lists are preferred to arrays when possible.)\n\n###Support for Additional Types\n\nAny Java object can be supported by LoganSquare, even if they don't fall into the above categories. To add support for your own types, you'll need to extend one of the built-in `TypeConverter` classes. You can register your custom type converters using one of the two following ways:\n\n#### For global `TypeConverter`s (used in many places)\n\n```java\nLoganSquare.registerTypeConverter(Date.class, new YourConverter());\n```\n\n#### For `TypeConverter`s that should only be used for certain variables\n\nHint: This method is especially useful for handling multiple Date formats!\n\n```java\n@JsonObject\npublic class ModelObject {\n    @JsonField(typeConverter = YourConverter.class)\n    public Date speciallyConvertedDate;\n}\n```\n\n###Example `TypeConverter`s\n\n####`TypeConverter` for a custom date format\n\n```java\npublic class TimeOnlyDateConverter extends DateTypeConverter {\n\n    private DateFormat mDateFormat;\n\n    public TimeOnlyDateConverter() {\n        mDateFormat = new SimpleDateFormat(\"HH:mm\");\n    }\n\n    public DateFormat getDateFormat() {\n        return mDateFormat;\n    }\n\n}\n```\n\n####`TypeConverter` for an enum, where the JSON contains an int\n\n```java\npublic enum TestEnum {\n    VALUE_1, VALUE_2, VALUE_3\n}\n    \npublic class TimeOnlyDateConverter extends IntBasedTypeConverter<TestEnum> {\n    @Override\n    public TestEnum getFromInt(int i) {\n        return TestEnum.values()[i];\n    }\n    \n    public int convertToInt(TestEnum object) {\n        return Arrays.asList(TestEnum.values()).indexOf(TestEnum.VALUE_1);\n    }\n\n}\n```\n\n####`TypeConverter` for an enum, where the JSON contains a String\n\n```java\npublic enum TestEnum {\n    VALUE_1, VALUE_2, VALUE_3\n}\n\npublic class EnumConverter extends StringBasedTypeConverter<TestEnum> {\n    @Override\n    public TestEnum getFromString(String s) {\n        TestEnum.valueOf(s);\n    }\n    \n    public String convertToString(TestEnum object) {\n        return object.toString();\n    }\n\n}\n```\n"
  },
  {
    "path": "gradle/wrapper/gradle-wrapper.properties",
    "content": "#Sat Nov 28 17:57:26 CST 2015\ndistributionBase=GRADLE_USER_HOME\ndistributionPath=wrapper/dists\nzipStoreBase=GRADLE_USER_HOME\nzipStorePath=wrapper/dists\ndistributionUrl=https\\://services.gradle.org/distributions/gradle-2.9-bin.zip\n"
  },
  {
    "path": "gradlew",
    "content": "#!/usr/bin/env bash\n\n##############################################################################\n##\n##  Gradle start up script for UN*X\n##\n##############################################################################\n\n# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.\nDEFAULT_JVM_OPTS=\"\"\n\nAPP_NAME=\"Gradle\"\nAPP_BASE_NAME=`basename \"$0\"`\n\n# Use the maximum available, or set MAX_FD != -1 to use that value.\nMAX_FD=\"maximum\"\n\nwarn ( ) {\n    echo \"$*\"\n}\n\ndie ( ) {\n    echo\n    echo \"$*\"\n    echo\n    exit 1\n}\n\n# OS specific support (must be 'true' or 'false').\ncygwin=false\nmsys=false\ndarwin=false\ncase \"`uname`\" in\n  CYGWIN* )\n    cygwin=true\n    ;;\n  Darwin* )\n    darwin=true\n    ;;\n  MINGW* )\n    msys=true\n    ;;\nesac\n\n# Attempt to set APP_HOME\n# Resolve links: $0 may be a link\nPRG=\"$0\"\n# Need this for relative symlinks.\nwhile [ -h \"$PRG\" ] ; do\n    ls=`ls -ld \"$PRG\"`\n    link=`expr \"$ls\" : '.*-> \\(.*\\)$'`\n    if expr \"$link\" : '/.*' > /dev/null; then\n        PRG=\"$link\"\n    else\n        PRG=`dirname \"$PRG\"`\"/$link\"\n    fi\ndone\nSAVED=\"`pwd`\"\ncd \"`dirname \\\"$PRG\\\"`/\" >&-\nAPP_HOME=\"`pwd -P`\"\ncd \"$SAVED\" >&-\n\nCLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar\n\n# Determine the Java command to use to start the JVM.\nif [ -n \"$JAVA_HOME\" ] ; then\n    if [ -x \"$JAVA_HOME/jre/sh/java\" ] ; then\n        # IBM's JDK on AIX uses strange locations for the executables\n        JAVACMD=\"$JAVA_HOME/jre/sh/java\"\n    else\n        JAVACMD=\"$JAVA_HOME/bin/java\"\n    fi\n    if [ ! -x \"$JAVACMD\" ] ; then\n        die \"ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME\n\nPlease set the JAVA_HOME variable in your environment to match the\nlocation of your Java installation.\"\n    fi\nelse\n    JAVACMD=\"java\"\n    which java >/dev/null 2>&1 || die \"ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.\n\nPlease set the JAVA_HOME variable in your environment to match the\nlocation of your Java installation.\"\nfi\n\n# Increase the maximum file descriptors if we can.\nif [ \"$cygwin\" = \"false\" -a \"$darwin\" = \"false\" ] ; then\n    MAX_FD_LIMIT=`ulimit -H -n`\n    if [ $? -eq 0 ] ; then\n        if [ \"$MAX_FD\" = \"maximum\" -o \"$MAX_FD\" = \"max\" ] ; then\n            MAX_FD=\"$MAX_FD_LIMIT\"\n        fi\n        ulimit -n $MAX_FD\n        if [ $? -ne 0 ] ; then\n            warn \"Could not set maximum file descriptor limit: $MAX_FD\"\n        fi\n    else\n        warn \"Could not query maximum file descriptor limit: $MAX_FD_LIMIT\"\n    fi\nfi\n\n# For Darwin, add options to specify how the application appears in the dock\nif $darwin; then\n    GRADLE_OPTS=\"$GRADLE_OPTS \\\"-Xdock:name=$APP_NAME\\\" \\\"-Xdock:icon=$APP_HOME/media/gradle.icns\\\"\"\nfi\n\n# For Cygwin, switch paths to Windows format before running java\nif $cygwin ; then\n    APP_HOME=`cygpath --path --mixed \"$APP_HOME\"`\n    CLASSPATH=`cygpath --path --mixed \"$CLASSPATH\"`\n    JAVACMD=`cygpath --unix \"$JAVACMD\"`\n\n    # We build the pattern for arguments to be converted via cygpath\n    ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`\n    SEP=\"\"\n    for dir in $ROOTDIRSRAW ; do\n        ROOTDIRS=\"$ROOTDIRS$SEP$dir\"\n        SEP=\"|\"\n    done\n    OURCYGPATTERN=\"(^($ROOTDIRS))\"\n    # Add a user-defined pattern to the cygpath arguments\n    if [ \"$GRADLE_CYGPATTERN\" != \"\" ] ; then\n        OURCYGPATTERN=\"$OURCYGPATTERN|($GRADLE_CYGPATTERN)\"\n    fi\n    # Now convert the arguments - kludge to limit ourselves to /bin/sh\n    i=0\n    for arg in \"$@\" ; do\n        CHECK=`echo \"$arg\"|egrep -c \"$OURCYGPATTERN\" -`\n        CHECK2=`echo \"$arg\"|egrep -c \"^-\"`                                 ### Determine if an option\n\n        if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then                    ### Added a condition\n            eval `echo args$i`=`cygpath --path --ignore --mixed \"$arg\"`\n        else\n            eval `echo args$i`=\"\\\"$arg\\\"\"\n        fi\n        i=$((i+1))\n    done\n    case $i in\n        (0) set -- ;;\n        (1) set -- \"$args0\" ;;\n        (2) set -- \"$args0\" \"$args1\" ;;\n        (3) set -- \"$args0\" \"$args1\" \"$args2\" ;;\n        (4) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" ;;\n        (5) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" ;;\n        (6) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" \"$args5\" ;;\n        (7) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" \"$args5\" \"$args6\" ;;\n        (8) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" \"$args5\" \"$args6\" \"$args7\" ;;\n        (9) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" \"$args5\" \"$args6\" \"$args7\" \"$args8\" ;;\n    esac\nfi\n\n# Split up the JVM_OPTS And GRADLE_OPTS values into an array, following the shell quoting and substitution rules\nfunction splitJvmOpts() {\n    JVM_OPTS=(\"$@\")\n}\neval splitJvmOpts $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS\nJVM_OPTS[${#JVM_OPTS[*]}]=\"-Dorg.gradle.appname=$APP_BASE_NAME\"\n\nexec \"$JAVACMD\" \"${JVM_OPTS[@]}\" -classpath \"$CLASSPATH\" org.gradle.wrapper.GradleWrapperMain \"$@\"\n"
  },
  {
    "path": "gradlew.bat",
    "content": "@if \"%DEBUG%\" == \"\" @echo off\r\n@rem ##########################################################################\r\n@rem\r\n@rem  Gradle startup script for Windows\r\n@rem\r\n@rem ##########################################################################\r\n\r\n@rem Set local scope for the variables with windows NT shell\r\nif \"%OS%\"==\"Windows_NT\" setlocal\r\n\r\n@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.\r\nset DEFAULT_JVM_OPTS=\r\n\r\nset DIRNAME=%~dp0\r\nif \"%DIRNAME%\" == \"\" set DIRNAME=.\r\nset APP_BASE_NAME=%~n0\r\nset APP_HOME=%DIRNAME%\r\n\r\n@rem Find java.exe\r\nif defined JAVA_HOME goto findJavaFromJavaHome\r\n\r\nset JAVA_EXE=java.exe\r\n%JAVA_EXE% -version >NUL 2>&1\r\nif \"%ERRORLEVEL%\" == \"0\" goto init\r\n\r\necho.\r\necho ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.\r\necho.\r\necho Please set the JAVA_HOME variable in your environment to match the\r\necho location of your Java installation.\r\n\r\ngoto fail\r\n\r\n:findJavaFromJavaHome\r\nset JAVA_HOME=%JAVA_HOME:\"=%\r\nset JAVA_EXE=%JAVA_HOME%/bin/java.exe\r\n\r\nif exist \"%JAVA_EXE%\" goto init\r\n\r\necho.\r\necho ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%\r\necho.\r\necho Please set the JAVA_HOME variable in your environment to match the\r\necho location of your Java installation.\r\n\r\ngoto fail\r\n\r\n:init\r\n@rem Get command-line arguments, handling Windowz variants\r\n\r\nif not \"%OS%\" == \"Windows_NT\" goto win9xME_args\r\nif \"%@eval[2+2]\" == \"4\" goto 4NT_args\r\n\r\n:win9xME_args\r\n@rem Slurp the command line arguments.\r\nset CMD_LINE_ARGS=\r\nset _SKIP=2\r\n\r\n:win9xME_args_slurp\r\nif \"x%~1\" == \"x\" goto execute\r\n\r\nset CMD_LINE_ARGS=%*\r\ngoto execute\r\n\r\n:4NT_args\r\n@rem Get arguments from the 4NT Shell from JP Software\r\nset CMD_LINE_ARGS=%$\r\n\r\n:execute\r\n@rem Setup the command line\r\n\r\nset CLASSPATH=%APP_HOME%\\gradle\\wrapper\\gradle-wrapper.jar\r\n\r\n@rem Execute Gradle\r\n\"%JAVA_EXE%\" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% \"-Dorg.gradle.appname=%APP_BASE_NAME%\" -classpath \"%CLASSPATH%\" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS%\r\n\r\n:end\r\n@rem End local scope for the variables with windows NT shell\r\nif \"%ERRORLEVEL%\"==\"0\" goto mainEnd\r\n\r\n:fail\r\nrem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of\r\nrem the _cmd.exe /c_ return code!\r\nif  not \"\" == \"%GRADLE_EXIT_CONSOLE%\" exit 1\r\nexit /b 1\r\n\r\n:mainEnd\r\nif \"%OS%\"==\"Windows_NT\" endlocal\r\n\r\n:omega\r\n"
  },
  {
    "path": "processor/build.gradle",
    "content": "apply plugin: 'java'\n\nrepositories {\n    jcenter()\n}\n\next.artifactId = 'logansquare-compiler'\n\ndependencies {\n    compile 'org.apache.commons:commons-lang3:3.2'\n    compile 'com.squareup:javapoet:1.2.0'\n    compile project(':core')\n\n    testCompile files(\"${System.properties['java.home']}/../lib/tools.jar\")\n    testCompile 'junit:junit:4.12'\n    testCompile 'com.google.testing.compile:compile-testing:0.6'\n}\n"
  },
  {
    "path": "processor/src/main/java/com/bluelinelabs/logansquare/processor/JsonAnnotationProcessor.java",
    "content": "package com.bluelinelabs.logansquare.processor;\n\nimport com.bluelinelabs.logansquare.processor.processor.Processor;\n\nimport java.io.IOException;\nimport java.io.PrintWriter;\nimport java.io.StringWriter;\nimport java.io.Writer;\nimport java.util.HashMap;\nimport java.util.LinkedHashSet;\nimport java.util.List;\nimport java.util.Map;\nimport java.util.Set;\n\nimport javax.annotation.processing.AbstractProcessor;\nimport javax.annotation.processing.Filer;\nimport javax.annotation.processing.ProcessingEnvironment;\nimport javax.annotation.processing.RoundEnvironment;\nimport javax.lang.model.SourceVersion;\nimport javax.lang.model.element.TypeElement;\nimport javax.lang.model.util.Elements;\nimport javax.lang.model.util.Types;\nimport javax.tools.JavaFileObject;\n\nimport static javax.tools.Diagnostic.Kind.ERROR;\n\npublic class JsonAnnotationProcessor extends AbstractProcessor {\n    private Elements mElementUtils;\n    private Types mTypeUtils;\n    private Filer mFiler;\n    private List<Processor> mProcessors;\n    private Map<String, JsonObjectHolder> mJsonObjectMap;\n\n    @Override\n    public synchronized void init(ProcessingEnvironment env) {\n        super.init(env);\n\n        mElementUtils = env.getElementUtils();\n        mTypeUtils = env.getTypeUtils();\n        mFiler = env.getFiler();\n        mJsonObjectMap = new HashMap<>();\n        mProcessors = Processor.allProcessors(processingEnv);\n    }\n\n    @Override\n    public Set<String> getSupportedAnnotationTypes() {\n        Set<String> supportTypes = new LinkedHashSet<>();\n        for (Processor processor : mProcessors) {\n            supportTypes.add(processor.getAnnotation().getCanonicalName());\n        }\n        return supportTypes;\n    }\n\n    @Override\n    public SourceVersion getSupportedSourceVersion() {\n        return SourceVersion.latestSupported();\n    }\n\n    @Override\n    public boolean process(Set<? extends TypeElement> elements, RoundEnvironment env) {\n        try {\n            for (Processor processor : mProcessors) {\n                processor.findAndParseObjects(env, mJsonObjectMap, mElementUtils, mTypeUtils);\n            }\n\n            for (Map.Entry<String, JsonObjectHolder> entry : mJsonObjectMap.entrySet()) {\n                String fqcn = entry.getKey();\n                JsonObjectHolder jsonObjectHolder = entry.getValue();\n\n                if (!jsonObjectHolder.fileCreated) {\n                    jsonObjectHolder.fileCreated = true;\n\n                    try {\n                        JavaFileObject jfo = mFiler.createSourceFile(fqcn);\n                        Writer writer = jfo.openWriter();\n                        writer.write(new ObjectMapperInjector(jsonObjectHolder).getJavaClassFile());\n                        writer.flush();\n                        writer.close();\n                    } catch (IOException e) {\n                        error(fqcn, \"Exception occurred while attempting to write injector for type %s. Exception message: %s\", fqcn, e.getMessage());\n                    }\n                }\n            }\n\n            return true;\n        } catch (Throwable e) {\n            StringWriter stackTrace = new StringWriter();\n            e.printStackTrace(new PrintWriter(stackTrace));\n            error(\"Exception while processing Json classes. Stack trace incoming:\\n%s\", stackTrace.toString());\n            return false;\n        }\n    }\n\n    private void error(String message, Object... args) {\n        processingEnv.getMessager().printMessage(ERROR, String.format(message, args));\n    }\n}\n"
  },
  {
    "path": "processor/src/main/java/com/bluelinelabs/logansquare/processor/JsonFieldHolder.java",
    "content": "package com.bluelinelabs.logansquare.processor;\n\nimport com.bluelinelabs.logansquare.processor.type.Type;\nimport com.bluelinelabs.logansquare.processor.type.collection.CollectionType;\nimport com.bluelinelabs.logansquare.processor.type.field.ParameterizedTypeField;\n\nimport java.util.ArrayList;\nimport java.util.List;\n\nimport javax.lang.model.element.Element;\nimport javax.lang.model.element.ExecutableElement;\nimport javax.lang.model.element.TypeElement;\nimport javax.lang.model.type.TypeKind;\nimport javax.lang.model.type.TypeMirror;\nimport javax.lang.model.util.ElementFilter;\nimport javax.lang.model.util.Elements;\nimport javax.lang.model.util.Types;\n\npublic class JsonFieldHolder {\n\n    public String[] fieldName;\n    public String setterMethod;\n    public String getterMethod;\n    public boolean shouldParse;\n    public boolean shouldSerialize;\n    public Type type;\n\n    public String fill(Element element, Elements elements, Types types, String[] fieldNames, TypeMirror typeConverterType, JsonObjectHolder objectHolder, boolean shouldParse, boolean shouldSerialize) {\n        if (fieldNames == null || fieldNames.length == 0) {\n            String defaultFieldName = element.getSimpleName().toString();\n\n            switch (objectHolder.fieldNamingPolicy) {\n                case LOWER_CASE_WITH_UNDERSCORES:\n                    defaultFieldName = TextUtils.toLowerCaseWithUnderscores(defaultFieldName);\n                    break;\n            }\n\n            fieldNames = new String[] { defaultFieldName };\n        }\n        fieldName = fieldNames;\n\n        this.shouldParse = shouldParse;\n        this.shouldSerialize = shouldSerialize;\n\n        setterMethod = getSetter(element, elements);\n        getterMethod = getGetter(element, elements);\n\n        type = Type.typeFor(element.asType(), typeConverterType, elements, types);\n        return ensureValidType(type, element);\n    }\n\n    private String ensureValidType(Type type, Element element) {\n        if (type == null) {\n            return \"Type could not be determined for \" + element.toString();\n        } else {\n            if (type instanceof CollectionType) {\n                for (Type parameterType : type.parameterTypes) {\n                    String errorMessage = ensureValidType(parameterType, element);\n                    if (errorMessage != null) {\n                        return errorMessage;\n                    }\n                }\n            }\n\n            return null;\n        }\n    }\n\n    public static String getGetter(Element element, Elements elements) {\n        TypeElement enclosingElement = (TypeElement) element.getEnclosingElement();\n\n        TypeKind elementTypeKind = element.asType().getKind();\n\n        String elementName = element.getSimpleName().toString();\n        String elementNameLowerCase = elementName.toLowerCase();\n\n        List<String> possibleMethodNames = new ArrayList<>();\n        possibleMethodNames.add(\"get\" + elementNameLowerCase);\n        if (elementTypeKind == TypeKind.BOOLEAN) {\n            possibleMethodNames.add(\"is\" + elementNameLowerCase);\n            possibleMethodNames.add(\"has\" + elementNameLowerCase);\n            possibleMethodNames.add(elementNameLowerCase);\n        }\n\n        // Handle the case where variables are named in the form mVariableName instead of just variableName\n        if (elementName.length() > 1 && elementName.charAt(0) == 'm' && (elementName.charAt(1) >= 'A' && elementName.charAt(1) <= 'Z')) {\n            possibleMethodNames.add(\"get\" + elementNameLowerCase.substring(1));\n            if (elementTypeKind == TypeKind.BOOLEAN) {\n                possibleMethodNames.add(\"is\" + elementNameLowerCase.substring(1));\n                possibleMethodNames.add(\"has\" + elementNameLowerCase.substring(1));\n                possibleMethodNames.add(elementNameLowerCase.substring(1));\n            }\n        }\n\n        List<? extends Element> elementMembers = elements.getAllMembers(enclosingElement);\n        List<ExecutableElement> elementMethods = ElementFilter.methodsIn(elementMembers);\n        for (ExecutableElement methodElement : elementMethods) {\n            if (methodElement.getParameters().size() == 0) {\n                String methodNameString = methodElement.getSimpleName().toString();\n                String methodNameLowerCase = methodNameString.toLowerCase();\n\n                if (possibleMethodNames.contains(methodNameLowerCase)) {\n                    if (methodElement.getParameters().size() == 0) {\n                        if (methodElement.getReturnType().toString().equals(element.asType().toString())) {\n                            return methodNameString;\n                        }\n                    }\n                }\n            }\n        }\n\n        return null;\n    }\n\n    public static String getSetter(Element element, Elements elements) {\n        TypeElement enclosingElement = (TypeElement) element.getEnclosingElement();\n\n        String elementName = element.getSimpleName().toString();\n        String elementNameLowerCase = elementName.toLowerCase();\n\n        List<String> possibleMethodNames = new ArrayList<>();\n        possibleMethodNames.add(\"set\" + elementNameLowerCase);\n\n        // Handle the case where variables are named in the form mVariableName instead of just variableName\n        if (elementName.length() > 1 && elementName.charAt(0) == 'm' && (elementName.charAt(1) >= 'A' && elementName.charAt(1) <= 'Z')) {\n            possibleMethodNames.add(\"set\" + elementNameLowerCase.substring(1));\n        }\n\n        List<? extends Element> elementMembers = elements.getAllMembers(enclosingElement);\n        List<ExecutableElement> elementMethods = ElementFilter.methodsIn(elementMembers);\n        for (ExecutableElement methodElement : elementMethods) {\n            String methodNameString = methodElement.getSimpleName().toString();\n            String methodNameLowerCase = methodNameString.toLowerCase();\n\n            if (possibleMethodNames.contains(methodNameLowerCase)) {\n                if (methodElement.getParameters().size() == 1) {\n                    if (methodElement.getParameters().get(0).asType().toString().equals(element.asType().toString())) {\n                        return methodNameString;\n                    }\n                }\n            }\n        }\n\n        return null;\n    }\n\n    public boolean hasSetter() {\n        return !TextUtils.isEmpty(setterMethod);\n    }\n\n    public boolean hasGetter() {\n        return !TextUtils.isEmpty(getterMethod);\n    }\n\n    public boolean isGenericType() {\n        return isGenericType(type);\n    }\n\n    private boolean isGenericType(Type type) {\n        if (type instanceof ParameterizedTypeField) {\n            return true;\n        } else {\n            for (Type parameterizedType : type.parameterTypes) {\n                if (isGenericType(parameterizedType)) {\n                    return true;\n                }\n            }\n            return false;\n        }\n    }\n}\n"
  },
  {
    "path": "processor/src/main/java/com/bluelinelabs/logansquare/processor/JsonObjectHolder.java",
    "content": "package com.bluelinelabs.logansquare.processor;\n\nimport com.bluelinelabs.logansquare.annotation.JsonObject.FieldDetectionPolicy;\nimport com.bluelinelabs.logansquare.annotation.JsonObject.FieldNamingPolicy;\nimport com.squareup.javapoet.ClassName;\nimport com.squareup.javapoet.ParameterizedTypeName;\nimport com.squareup.javapoet.TypeName;\nimport com.squareup.javapoet.TypeVariableName;\n\nimport java.util.ArrayList;\nimport java.util.List;\nimport java.util.Map;\nimport java.util.TreeMap;\n\nimport javax.lang.model.element.TypeParameterElement;\n\npublic class JsonObjectHolder {\n\n    public final String packageName;\n    public final String injectedClassName;\n    public final TypeName objectTypeName;\n    public final boolean isAbstractClass;\n    public final TypeName parentTypeName;\n    public final List<? extends TypeParameterElement> parentTypeParameters;\n    public final List<String> parentUsedTypeParameters;\n    public final FieldDetectionPolicy fieldDetectionPolicy;\n    public final FieldNamingPolicy fieldNamingPolicy;\n    public final boolean serializeNullObjects;\n    public final boolean serializeNullCollectionElements;\n    public final List<? extends TypeParameterElement> typeParameters;\n    public String onCompleteCallback;\n    public String preSerializeCallback;\n\n    // Using a TreeMap now to keep the entries sorted. This ensures that code is\n    // always written the exact same way, no matter which JDK you're using.\n    public final Map<String, JsonFieldHolder> fieldMap = new TreeMap<>();\n    public boolean fileCreated;\n\n    public boolean hasParentClass() {\n        return parentTypeName != null;\n    }\n\n    public TypeName getParameterizedParentTypeName() {\n        if (parentUsedTypeParameters.size() > 0) {\n            List<TypeName> usedParameters = new ArrayList<>();\n            for (String parameter : parentUsedTypeParameters) {\n                if (parameter.indexOf(\".\") > 0) {\n                    usedParameters.add(ClassName.bestGuess(parameter));\n                } else {\n                    usedParameters.add(TypeVariableName.get(parameter));\n                }\n            }\n            return ParameterizedTypeName.get((ClassName)parentTypeName, usedParameters.toArray(new TypeName[usedParameters.size()]));\n        } else {\n            return parentTypeName;\n        }\n    }\n\n    private JsonObjectHolder(JsonObjectHolderBuilder builder) {\n        packageName = builder.packageName;\n        injectedClassName = builder.injectedClassName;\n        objectTypeName = builder.objectTypeName;\n        isAbstractClass = builder.isAbstractClass;\n        parentTypeName = builder.parentTypeName;\n        parentTypeParameters = builder.parentTypeParameters;\n        parentUsedTypeParameters = builder.parentUsedTypeParameters;\n        fieldDetectionPolicy = builder.fieldDetectionPolicy;\n        fieldNamingPolicy = builder.fieldNamingPolicy;\n        serializeNullObjects = builder.serializeNullObjects;\n        serializeNullCollectionElements = builder.serializeNullCollectionElements;\n        typeParameters = builder.typeParameters;\n    }\n\n    public static class JsonObjectHolderBuilder {\n        private String packageName;\n        private String injectedClassName;\n        private TypeName objectTypeName;\n        private boolean isAbstractClass;\n        private TypeName parentTypeName;\n        private List<? extends TypeParameterElement> parentTypeParameters;\n        private List<String> parentUsedTypeParameters;\n        private FieldDetectionPolicy fieldDetectionPolicy;\n        private FieldNamingPolicy fieldNamingPolicy;\n        private boolean serializeNullObjects;\n        private boolean serializeNullCollectionElements;\n        private List<? extends TypeParameterElement> typeParameters;\n\n        public JsonObjectHolderBuilder setPackageName(String packageName) {\n            this.packageName = packageName;\n            return this;\n        }\n\n        public JsonObjectHolderBuilder setInjectedClassName(String injectedClassName) {\n            this.injectedClassName = injectedClassName;\n            return this;\n        }\n\n        public JsonObjectHolderBuilder setObjectTypeName(TypeName objectTypeName) {\n            this.objectTypeName = objectTypeName;\n            return this;\n        }\n\n        public JsonObjectHolderBuilder setIsAbstractClass(boolean isAbstractClass) {\n            this.isAbstractClass = isAbstractClass;\n            return this;\n        }\n\n        public JsonObjectHolderBuilder setParentTypeName(TypeName parentTypeName) {\n            this.parentTypeName = parentTypeName;\n            return this;\n        }\n\n        public JsonObjectHolderBuilder setParentTypeParameters(List<? extends TypeParameterElement> parentTypeParameters) {\n            this.parentTypeParameters = parentTypeParameters;\n            return this;\n        }\n\n        public JsonObjectHolderBuilder setParentUsedTypeParameters(List<String> parentUsedTypeParameters) {\n            this.parentUsedTypeParameters = parentUsedTypeParameters;\n            return this;\n        }\n\n        public JsonObjectHolderBuilder setFieldDetectionPolicy(FieldDetectionPolicy fieldDetectionPolicy) {\n            this.fieldDetectionPolicy = fieldDetectionPolicy;\n            return this;\n        }\n\n        public JsonObjectHolderBuilder setFieldNamingPolicy(FieldNamingPolicy fieldNamingPolicy) {\n            this.fieldNamingPolicy = fieldNamingPolicy;\n            return this;\n        }\n\n        public JsonObjectHolderBuilder setSerializeNullObjects(boolean serializeNullObjects) {\n            this.serializeNullObjects = serializeNullObjects;\n            return this;\n        }\n\n        public JsonObjectHolderBuilder setSerializeNullCollectionElements(boolean serializeNullCollectionElements) {\n            this.serializeNullCollectionElements = serializeNullCollectionElements;\n            return this;\n        }\n\n        public JsonObjectHolderBuilder setTypeParameters(List<? extends TypeParameterElement> typeParameters) {\n            this.typeParameters = typeParameters;\n            return this;\n        }\n\n        public JsonObjectHolder build() {\n            return new JsonObjectHolder(this);\n        }\n    }\n}\n"
  },
  {
    "path": "processor/src/main/java/com/bluelinelabs/logansquare/processor/ObjectMapperInjector.java",
    "content": "package com.bluelinelabs.logansquare.processor;\n\nimport com.bluelinelabs.logansquare.JsonMapper;\nimport com.bluelinelabs.logansquare.LoganSquare;\nimport com.bluelinelabs.logansquare.ParameterizedType;\nimport com.bluelinelabs.logansquare.processor.type.Type;\nimport com.bluelinelabs.logansquare.processor.type.Type.ClassNameObjectMapper;\nimport com.bluelinelabs.logansquare.processor.type.field.ParameterizedTypeField;\nimport com.bluelinelabs.logansquare.processor.type.field.TypeConverterFieldType;\nimport com.bluelinelabs.logansquare.typeconverters.TypeConverter;\nimport com.bluelinelabs.logansquare.util.SimpleArrayMap;\nimport com.fasterxml.jackson.core.JsonGenerator;\nimport com.fasterxml.jackson.core.JsonParser;\nimport com.fasterxml.jackson.core.JsonToken;\nimport com.squareup.javapoet.AnnotationSpec;\nimport com.squareup.javapoet.ClassName;\nimport com.squareup.javapoet.FieldSpec;\nimport com.squareup.javapoet.JavaFile;\nimport com.squareup.javapoet.MethodSpec;\nimport com.squareup.javapoet.ParameterizedTypeName;\nimport com.squareup.javapoet.TypeName;\nimport com.squareup.javapoet.TypeSpec;\nimport com.squareup.javapoet.TypeVariableName;\n\nimport java.io.IOException;\nimport java.util.ArrayList;\nimport java.util.HashSet;\nimport java.util.List;\nimport java.util.Map;\nimport java.util.Set;\n\nimport javax.lang.model.element.Modifier;\nimport javax.lang.model.element.TypeParameterElement;\nimport javax.lang.model.type.TypeVariable;\n\npublic class ObjectMapperInjector {\n\n    public static final String PARENT_OBJECT_MAPPER_VARIABLE_NAME = \"parentObjectMapper\";\n    public static final String JSON_PARSER_VARIABLE_NAME = \"jsonParser\";\n    public static final String JSON_GENERATOR_VARIABLE_NAME = \"jsonGenerator\";\n\n    private final JsonObjectHolder mJsonObjectHolder;\n\n    public ObjectMapperInjector(JsonObjectHolder jsonObjectHolder) {\n        mJsonObjectHolder = jsonObjectHolder;\n    }\n\n    public String getJavaClassFile() {\n        try {\n            return JavaFile.builder(mJsonObjectHolder.packageName, getTypeSpec()).build().toString();\n        } catch (Exception e) {\n            e.printStackTrace();\n            return null;\n        }\n    }\n\n    private TypeSpec getTypeSpec() {\n        TypeSpec.Builder builder = TypeSpec.classBuilder(mJsonObjectHolder.injectedClassName).addModifiers(Modifier.PUBLIC, Modifier.FINAL);\n\n        builder.addAnnotation(AnnotationSpec.builder(SuppressWarnings.class).addMember(\"value\", \"\\\"unsafe,unchecked\\\"\").build());\n\n        builder.superclass(ParameterizedTypeName.get(ClassName.get(JsonMapper.class), mJsonObjectHolder.objectTypeName));\n\n        for (TypeParameterElement typeParameterElement : mJsonObjectHolder.typeParameters) {\n            builder.addTypeVariable(TypeVariableName.get((TypeVariable)typeParameterElement.asType()));\n        }\n\n        if (mJsonObjectHolder.hasParentClass()) {\n            FieldSpec.Builder parentMapperBuilder;\n\n            if (mJsonObjectHolder.parentTypeParameters.size() == 0) {\n                parentMapperBuilder = FieldSpec.builder(ParameterizedTypeName.get(ClassName.get(JsonMapper.class), mJsonObjectHolder.parentTypeName), PARENT_OBJECT_MAPPER_VARIABLE_NAME)\n                        .addModifiers(Modifier.PRIVATE, Modifier.STATIC, Modifier.FINAL)\n                        .initializer(\"$T.mapperFor($T.class)\", LoganSquare.class, mJsonObjectHolder.parentTypeName);\n            } else {\n                parentMapperBuilder = FieldSpec.builder(ParameterizedTypeName.get(ClassName.get(JsonMapper.class), mJsonObjectHolder.getParameterizedParentTypeName()), PARENT_OBJECT_MAPPER_VARIABLE_NAME)\n                        .addModifiers(Modifier.PRIVATE);\n\n                if (mJsonObjectHolder.typeParameters.size() == 0) {\n                    parentMapperBuilder.initializer(\"$T.mapperFor(new $T<$T>() { })\", LoganSquare.class, ParameterizedType.class, mJsonObjectHolder.getParameterizedParentTypeName());\n                }\n            }\n\n            builder.addField(parentMapperBuilder.build());\n        }\n\n        // TypeConverters could be expensive to create, so just use one per class\n        Set<ClassName> typeConvertersUsed = new HashSet<>();\n        for (JsonFieldHolder fieldHolder : mJsonObjectHolder.fieldMap.values()) {\n            if (fieldHolder.type instanceof TypeConverterFieldType) {\n                typeConvertersUsed.add(((TypeConverterFieldType)fieldHolder.type).getTypeConverterClassName());\n            }\n        }\n        for (ClassName typeConverter : typeConvertersUsed) {\n            builder.addField(FieldSpec.builder(typeConverter, getStaticFinalTypeConverterVariableName(typeConverter))\n                    .addModifiers(Modifier.PROTECTED, Modifier.STATIC, Modifier.FINAL)\n                    .initializer(\"new $T()\", typeConverter)\n                    .build());\n        }\n\n        MethodSpec.Builder constructorBuilder = MethodSpec.constructorBuilder().addModifiers(Modifier.PUBLIC);\n        List<String> createdJsonMappers = new ArrayList<>();\n\n        if (mJsonObjectHolder.typeParameters.size() > 0) {\n            constructorBuilder.addParameter(ClassName.get(ParameterizedType.class), \"type\");\n            constructorBuilder.addStatement(\"partialMappers.put(type, this)\");\n\n            for (TypeParameterElement typeParameterElement : mJsonObjectHolder.typeParameters) {\n                final String typeName = typeParameterElement.getSimpleName().toString();\n                final String typeArgumentName = typeName + \"Type\";\n                final String jsonMapperVariableName = getJsonMapperVariableNameForTypeParameter(typeName);\n\n                if (!createdJsonMappers.contains(jsonMapperVariableName)) {\n                    createdJsonMappers.add(jsonMapperVariableName);\n\n                    // Add a JsonMapper reference\n                    builder.addField(FieldSpec.builder(ParameterizedTypeName.get(ClassName.get(JsonMapper.class), TypeVariableName.get(typeName)), jsonMapperVariableName)\n                            .addModifiers(Modifier.PRIVATE, Modifier.FINAL)\n                            .build());\n\n                    constructorBuilder.addParameter(ClassName.get(ParameterizedType.class), typeArgumentName);\n                    constructorBuilder.addStatement(\"$L = $T.mapperFor($L, partialMappers)\", jsonMapperVariableName, LoganSquare.class, typeArgumentName);\n                }\n            }\n            constructorBuilder.addParameter(ParameterizedTypeName.get(ClassName.get(SimpleArrayMap.class), ClassName.get(ParameterizedType.class), ClassName.get(JsonMapper.class)), \"partialMappers\");\n        }\n\n        for (JsonFieldHolder jsonFieldHolder : mJsonObjectHolder.fieldMap.values()) {\n            if (jsonFieldHolder.type instanceof ParameterizedTypeField) {\n                final String jsonMapperVariableName = getJsonMapperVariableNameForTypeParameter(((ParameterizedTypeField)jsonFieldHolder.type).getParameterName());\n\n                if (!createdJsonMappers.contains(jsonMapperVariableName)) {\n                    ParameterizedTypeName parameterizedType = ParameterizedTypeName.get(ClassName.get(JsonMapper.class), jsonFieldHolder.type.getTypeName());\n\n                    createdJsonMappers.add(jsonMapperVariableName);\n                    builder.addField(FieldSpec.builder(parameterizedType, jsonMapperVariableName)\n                            .addModifiers(Modifier.PRIVATE, Modifier.FINAL)\n                            .build());\n\n                    String typeName = jsonMapperVariableName + \"Type\";\n                    constructorBuilder.addStatement(\"$T $L = new $T<$T>() { }\", ParameterizedType.class, typeName, ParameterizedType.class, jsonFieldHolder.type.getTypeName());\n\n                    if (mJsonObjectHolder.typeParameters.size() > 0) {\n                        constructorBuilder.beginControlFlow(\"if ($L.equals(type))\", typeName);\n                        constructorBuilder.addStatement(\"$L = ($T)this\", jsonMapperVariableName, JsonMapper.class);\n                        constructorBuilder.nextControlFlow(\"else\");\n                        constructorBuilder.addStatement(\"$L = $T.mapperFor($L, partialMappers)\", jsonMapperVariableName, LoganSquare.class, typeName);\n                        constructorBuilder.endControlFlow();\n                    } else {\n                        constructorBuilder.addStatement(\"$L = $T.mapperFor($L)\", jsonMapperVariableName, LoganSquare.class, typeName);\n                    }\n                }\n            }\n        }\n\n        if (createdJsonMappers.size() > 0) {\n            if (mJsonObjectHolder.hasParentClass()) {\n                constructorBuilder.addStatement(\"$L = $T.mapperFor(new $T<$T>() { })\", PARENT_OBJECT_MAPPER_VARIABLE_NAME, LoganSquare.class, ParameterizedType.class, mJsonObjectHolder.getParameterizedParentTypeName());\n            }\n            builder.addMethod(constructorBuilder.build());\n        }\n\n        builder.addMethod(getParseMethod());\n        builder.addMethod(getParseFieldMethod());\n        builder.addMethod(getSerializeMethod());\n        addUsedJsonMapperVariables(builder);\n        addUsedTypeConverterMethods(builder);\n\n        return builder.build();\n    }\n\n    private MethodSpec getParseMethod() {\n        MethodSpec.Builder builder = MethodSpec.methodBuilder(\"parse\")\n                .addAnnotation(Override.class)\n                .addModifiers(Modifier.PUBLIC)\n                .returns(mJsonObjectHolder.objectTypeName)\n                .addParameter(JsonParser.class, JSON_PARSER_VARIABLE_NAME)\n                .addException(IOException.class);\n\n        if (!mJsonObjectHolder.isAbstractClass) {\n            builder.addStatement(\"$T instance = new $T()\", mJsonObjectHolder.objectTypeName, mJsonObjectHolder.objectTypeName)\n                    .beginControlFlow(\"if ($L.getCurrentToken() == null)\", JSON_PARSER_VARIABLE_NAME)\n                    .addStatement(\"$L.nextToken()\", JSON_PARSER_VARIABLE_NAME)\n                    .endControlFlow()\n                    .beginControlFlow(\"if ($L.getCurrentToken() != $T.START_OBJECT)\", JSON_PARSER_VARIABLE_NAME, JsonToken.class)\n                    .addStatement(\"$L.skipChildren()\", JSON_PARSER_VARIABLE_NAME)\n                    .addStatement(\"return null\")\n                    .endControlFlow()\n                    .beginControlFlow(\"while ($L.nextToken() != $T.END_OBJECT)\", JSON_PARSER_VARIABLE_NAME, JsonToken.class)\n                    .addStatement(\"String fieldName = $L.getCurrentName()\", JSON_PARSER_VARIABLE_NAME)\n                    .addStatement(\"$L.nextToken()\", JSON_PARSER_VARIABLE_NAME)\n                    .addStatement(\"parseField(instance, fieldName, $L)\", JSON_PARSER_VARIABLE_NAME)\n                    .addStatement(\"$L.skipChildren()\", JSON_PARSER_VARIABLE_NAME)\n                    .endControlFlow();\n\n            if (!TextUtils.isEmpty(mJsonObjectHolder.onCompleteCallback)) {\n                builder.addStatement(\"instance.$L()\", mJsonObjectHolder.onCompleteCallback);\n            }\n\n            builder.addStatement(\"return instance\");\n        } else {\n            builder.addStatement(\"return null\");\n        }\n\n        return builder.build();\n    }\n\n    private MethodSpec getParseFieldMethod() {\n        MethodSpec.Builder builder = MethodSpec.methodBuilder(\"parseField\")\n                .addAnnotation(Override.class)\n                .addModifiers(Modifier.PUBLIC)\n                .addParameter(mJsonObjectHolder.objectTypeName, \"instance\")\n                .addParameter(String.class, \"fieldName\")\n                .addParameter(JsonParser.class, JSON_PARSER_VARIABLE_NAME)\n                .addException(IOException.class);\n\n        int parseFieldLines = addParseFieldLines(builder);\n\n        if (mJsonObjectHolder.hasParentClass()) {\n            if (parseFieldLines > 0) {\n                builder.nextControlFlow(\"else\");\n                builder.addStatement(\"$L.parseField(instance, fieldName, $L)\", PARENT_OBJECT_MAPPER_VARIABLE_NAME, JSON_PARSER_VARIABLE_NAME);\n            } else {\n                builder.addStatement(\"$L.parseField(instance, fieldName, $L)\", PARENT_OBJECT_MAPPER_VARIABLE_NAME, JSON_PARSER_VARIABLE_NAME);\n            }\n        }\n\n        if (parseFieldLines > 0) {\n            builder.endControlFlow();\n        }\n\n        return builder.build();\n    }\n\n    private MethodSpec getSerializeMethod() {\n        MethodSpec.Builder builder = MethodSpec.methodBuilder(\"serialize\")\n                .addAnnotation(Override.class)\n                .addModifiers(Modifier.PUBLIC)\n                .addParameter(mJsonObjectHolder.objectTypeName, \"object\")\n                .addParameter(JsonGenerator.class, JSON_GENERATOR_VARIABLE_NAME)\n                .addParameter(boolean.class, \"writeStartAndEnd\")\n                .addException(IOException.class);\n\n        insertSerializeStatements(builder);\n\n        return builder.build();\n    }\n\n    private void insertSerializeStatements(MethodSpec.Builder builder) {\n        if (!TextUtils.isEmpty(mJsonObjectHolder.preSerializeCallback)) {\n            builder.addStatement(\"object.$L()\", mJsonObjectHolder.preSerializeCallback);\n        }\n\n        builder\n                .beginControlFlow(\"if (writeStartAndEnd)\")\n                .addStatement(\"$L.writeStartObject()\", JSON_GENERATOR_VARIABLE_NAME)\n                .endControlFlow();\n\n        List<String> processedFields = new ArrayList<>(mJsonObjectHolder.fieldMap.size());\n        for (Map.Entry<String, JsonFieldHolder> entry : mJsonObjectHolder.fieldMap.entrySet()) {\n            JsonFieldHolder fieldHolder = entry.getValue();\n\n            if (fieldHolder.shouldSerialize) {\n                String getter;\n                if (fieldHolder.hasGetter()) {\n                    getter = \"object.\" + fieldHolder.getterMethod + \"()\";\n                } else {\n                    getter = \"object.\" + entry.getKey();\n                }\n\n                fieldHolder.type.serialize(builder, 1, fieldHolder.fieldName[0], processedFields, getter, true, true, mJsonObjectHolder.serializeNullObjects, mJsonObjectHolder.serializeNullCollectionElements);\n            }\n        }\n\n        if (mJsonObjectHolder.hasParentClass()) {\n            builder.addStatement(\"$L.serialize(object, $L, false)\", PARENT_OBJECT_MAPPER_VARIABLE_NAME, JSON_GENERATOR_VARIABLE_NAME);\n        }\n\n        builder\n                .beginControlFlow(\"if (writeStartAndEnd)\")\n                .addStatement(\"$L.writeEndObject()\", JSON_GENERATOR_VARIABLE_NAME)\n                .endControlFlow();\n    }\n\n    private int addParseFieldLines(MethodSpec.Builder builder) {\n        int entryCount = 0;\n        for (Map.Entry<String, JsonFieldHolder> entry : mJsonObjectHolder.fieldMap.entrySet()) {\n            JsonFieldHolder fieldHolder = entry.getValue();\n\n            if (fieldHolder.shouldParse) {\n                List<Object> args = new ArrayList<>();\n                StringBuilder ifStatement = new StringBuilder();\n                boolean isFirst = true;\n                for (String fieldName : fieldHolder.fieldName) {\n                    if (isFirst) {\n                        isFirst = false;\n                    } else {\n                        ifStatement.append(\" || \");\n                    }\n                    ifStatement.append(\"$S.equals(fieldName)\");\n                    args.add(fieldName);\n                }\n\n                if (entryCount == 0) {\n                    builder.beginControlFlow(\"if (\" + ifStatement.toString() + \")\", args.toArray(new Object[args.size()]));\n                } else {\n                    builder.nextControlFlow(\"else if (\" + ifStatement.toString() + \")\", args.toArray(new Object[args.size()]));\n                }\n\n                String setter;\n                Object[] stringFormatArgs;\n                if (fieldHolder.hasSetter()) {\n                    setter = \"instance.$L($L)\";\n                    stringFormatArgs = new Object[] { fieldHolder.setterMethod };\n                } else {\n                    setter = \"instance.$L = $L\";\n                    stringFormatArgs = new Object[] { entry.getKey() };\n                }\n\n                if (fieldHolder.type != null) {\n                    setFieldHolderJsonMapperVariableName(fieldHolder.type);\n                    fieldHolder.type.parse(builder, 1, setter, stringFormatArgs);\n                }\n\n                entryCount++;\n            }\n        }\n        return entryCount;\n    }\n\n    private void addUsedJsonMapperVariables(TypeSpec.Builder builder) {\n        Set<ClassNameObjectMapper> usedJsonObjectMappers = new HashSet<>();\n\n        for (JsonFieldHolder holder : mJsonObjectHolder.fieldMap.values()) {\n            usedJsonObjectMappers.addAll(holder.type.getUsedJsonObjectMappers());\n        }\n\n        for (ClassNameObjectMapper usedJsonObjectMapper : usedJsonObjectMappers) {\n            builder.addField(FieldSpec.builder(ParameterizedTypeName.get(ClassName.get(JsonMapper.class), usedJsonObjectMapper.className), getMapperVariableName(usedJsonObjectMapper.objectMapper))\n                    .addModifiers(Modifier.PRIVATE, Modifier.STATIC, Modifier.FINAL)\n                    .initializer(\"$T.mapperFor($T.class)\", LoganSquare.class, usedJsonObjectMapper.className)\n                    .build()\n            );\n        }\n    }\n\n    private void addUsedTypeConverterMethods(TypeSpec.Builder builder) {\n        Set<TypeName> usedTypeConverters = new HashSet<>();\n\n        for (JsonFieldHolder holder : mJsonObjectHolder.fieldMap.values()) {\n            usedTypeConverters.addAll(holder.type.getUsedTypeConverters());\n        }\n\n        for (TypeName usedTypeConverter : usedTypeConverters) {\n            final String variableName = getTypeConverterVariableName(usedTypeConverter);\n            builder.addField(FieldSpec.builder(ParameterizedTypeName.get(ClassName.get(TypeConverter.class), usedTypeConverter), variableName)\n                    .addModifiers(Modifier.PRIVATE, Modifier.STATIC)\n                    .build()\n            );\n\n            builder.addMethod(MethodSpec.methodBuilder(getTypeConverterGetter(usedTypeConverter))\n                    .addModifiers(Modifier.PRIVATE, Modifier.STATIC, Modifier.FINAL)\n                    .returns(ParameterizedTypeName.get(ClassName.get(TypeConverter.class), usedTypeConverter))\n                    .beginControlFlow(\"if ($L == null)\", variableName)\n                    .addStatement(\"$L = $T.typeConverterFor($T.class)\", variableName, LoganSquare.class, usedTypeConverter)\n                    .endControlFlow()\n                    .addStatement(\"return $L\", variableName)\n                    .build()\n            );\n        }\n    }\n\n    private String getJsonMapperVariableNameForTypeParameter(String typeName) {\n        String typeNameHash = \"\" + typeName.hashCode();\n        typeNameHash = typeNameHash.replaceAll(\"-\", \"m\");\n        return \"m\" + typeNameHash + \"ClassJsonMapper\";\n    }\n\n    public static String getStaticFinalTypeConverterVariableName(TypeName typeName) {\n        return typeName.toString().replaceAll(\"\\\\.\", \"_\").replaceAll(\"\\\\$\", \"_\").toUpperCase();\n    }\n\n    public static String getTypeConverterVariableName(TypeName typeName) {\n        return typeName.toString().replaceAll(\"\\\\.\", \"_\").replaceAll(\"\\\\$\", \"_\") + \"_type_converter\";\n    }\n\n    private void setFieldHolderJsonMapperVariableName(Type type) {\n        if (type instanceof ParameterizedTypeField) {\n            ParameterizedTypeField parameterizedType = (ParameterizedTypeField)type;\n            parameterizedType.setJsonMapperVariableName(getJsonMapperVariableNameForTypeParameter(parameterizedType.getParameterName()));\n        }\n\n        for (Type subType : type.parameterTypes) {\n            setFieldHolderJsonMapperVariableName(subType);\n        }\n    }\n\n    public static String getMapperVariableName(Class cls) {\n        return getMapperVariableName(cls.getCanonicalName());\n    }\n\n    public static String getMapperVariableName(String fullyQualifiedClassName) {\n        return fullyQualifiedClassName.replaceAll(\"\\\\.\", \"_\").replaceAll(\"\\\\$\", \"_\").toUpperCase();\n    }\n\n    public static String getTypeConverterGetter(TypeName typeName) {\n        return \"get\" + getTypeConverterVariableName(typeName);\n    }\n\n}\n"
  },
  {
    "path": "processor/src/main/java/com/bluelinelabs/logansquare/processor/TextUtils.java",
    "content": "package com.bluelinelabs.logansquare.processor;\n\nimport java.util.Collections;\nimport java.util.List;\n\npublic class TextUtils {\n\n    public static boolean isEmpty(String string) {\n        return string == null || string.length() == 0;\n    }\n\n    public static String toUniqueFieldNameVariable(String fieldName, List<String> processedFieldNames) {\n        fieldName = fieldName.replaceAll(\"[^a-zA-Z0-9]\", \"_\");\n        int frequency = Collections.frequency(processedFieldNames, fieldName);\n        processedFieldNames.add(fieldName);\n        return (frequency > 0) ? fieldName + frequency : fieldName;\n    }\n\n    public static String toUpperCaseWithUnderscores(String className) {\n        StringBuilder sb = new StringBuilder();\n        for (char c : className.toCharArray()) {\n            if (c >= 'A' && c <= 'Z' && sb.length() > 0) {\n                sb.append('_').append(c);\n            } else {\n                sb.append(Character.toUpperCase(c));\n            }\n        }\n\n        return sb.toString();\n    }\n\n    public static String toLowerCaseWithUnderscores(String className) {\n        StringBuilder sb = new StringBuilder();\n        for (char c : className.toCharArray()) {\n            if (c >= 'A' && c <= 'Z' && sb.length() > 0) {\n                sb.append('_');\n            }\n            sb.append(Character.toLowerCase(c));\n        }\n\n        return sb.toString();\n    }\n\n}\n"
  },
  {
    "path": "processor/src/main/java/com/bluelinelabs/logansquare/processor/TypeUtils.java",
    "content": "package com.bluelinelabs.logansquare.processor;\n\nimport com.bluelinelabs.logansquare.Constants;\nimport com.squareup.javapoet.ClassName;\n\nimport java.util.List;\n\nimport javax.lang.model.element.TypeElement;\nimport javax.lang.model.type.DeclaredType;\nimport javax.lang.model.type.TypeMirror;\nimport javax.lang.model.util.Elements;\n\npublic class TypeUtils {\n\n    public static String getSimpleClassName(TypeElement type, String packageName) {\n        return type.getQualifiedName().toString().substring(packageName.length() + 1).replace('.', '$');\n    }\n\n    public static String getInjectedFQCN(TypeElement type, Elements elements) {\n        String packageName = elements.getPackageOf(type).getQualifiedName().toString();\n        return packageName + \".\" + getSimpleClassName(type, packageName) + Constants.MAPPER_CLASS_SUFFIX;\n    }\n\n    public static String getInjectedFQCN(ClassName className) {\n        StringBuilder name = new StringBuilder();\n        for (String part : className.simpleNames()) {\n            if (name.length() > 0) {\n                name.append(\"$\");\n            }\n            name.append(part);\n        }\n        return className.packageName() + \".\" + name.toString() + Constants.MAPPER_CLASS_SUFFIX;\n    }\n\n    @SuppressWarnings(\"unchecked\")\n    public static List<TypeMirror> getParameterizedTypes(TypeMirror typeMirror) {\n        if (!(typeMirror instanceof DeclaredType)) {\n            return null;\n        }\n\n        DeclaredType declaredType = (DeclaredType)typeMirror;\n        return (List<TypeMirror>)declaredType.getTypeArguments();\n    }\n}\n"
  },
  {
    "path": "processor/src/main/java/com/bluelinelabs/logansquare/processor/processor/JsonFieldProcessor.java",
    "content": "package com.bluelinelabs.logansquare.processor.processor;\n\nimport com.bluelinelabs.logansquare.annotation.JsonField;\nimport com.bluelinelabs.logansquare.annotation.JsonIgnore;\nimport com.bluelinelabs.logansquare.annotation.JsonIgnore.IgnorePolicy;\nimport com.bluelinelabs.logansquare.annotation.JsonObject;\nimport com.bluelinelabs.logansquare.processor.JsonFieldHolder;\nimport com.bluelinelabs.logansquare.processor.JsonObjectHolder;\nimport com.bluelinelabs.logansquare.processor.TextUtils;\nimport com.bluelinelabs.logansquare.processor.TypeUtils;\nimport com.bluelinelabs.logansquare.typeconverters.TypeConverter;\n\nimport java.io.PrintWriter;\nimport java.io.StringWriter;\nimport java.lang.annotation.Annotation;\nimport java.util.List;\nimport java.util.Map;\n\nimport javax.annotation.processing.ProcessingEnvironment;\nimport javax.annotation.processing.RoundEnvironment;\nimport javax.lang.model.element.Element;\nimport javax.lang.model.element.ElementKind;\nimport javax.lang.model.element.ExecutableElement;\nimport javax.lang.model.element.Modifier;\nimport javax.lang.model.element.TypeElement;\nimport javax.lang.model.type.MirroredTypeException;\nimport javax.lang.model.type.TypeMirror;\nimport javax.lang.model.util.Elements;\nimport javax.lang.model.util.Types;\n\nimport static javax.lang.model.element.Modifier.PRIVATE;\n\npublic class JsonFieldProcessor extends Processor {\n\n    public JsonFieldProcessor(ProcessingEnvironment processingEnv) {\n        super(processingEnv);\n    }\n\n    @Override\n    public Class getAnnotation() {\n        return JsonField.class;\n    }\n\n    @Override\n    public void findAndParseObjects(RoundEnvironment env, Map<String, JsonObjectHolder> jsonObjectMap, Elements elements, Types types) {\n        for (Element element : env.getElementsAnnotatedWith(JsonField.class)) {\n            try {\n                processJsonFieldAnnotation(element, jsonObjectMap, elements, types);\n            } catch (Exception e) {\n                StringWriter stackTrace = new StringWriter();\n                e.printStackTrace(new PrintWriter(stackTrace));\n\n                error(element, \"Unable to generate injector for %s. Stack trace incoming:\\n%s\", JsonField.class, stackTrace.toString());\n            }\n        }\n    }\n\n    private void processJsonFieldAnnotation(Element element, Map<String, JsonObjectHolder> jsonObjectMap, Elements elements, Types types) {\n        if (!isJsonFieldFieldAnnotationValid(element, elements)) {\n            return;\n        }\n\n        TypeElement enclosingElement = (TypeElement)element.getEnclosingElement();\n\n        JsonObjectHolder objectHolder = jsonObjectMap.get(TypeUtils.getInjectedFQCN(enclosingElement, elements));\n        JsonFieldHolder fieldHolder = objectHolder.fieldMap.get(element.getSimpleName().toString());\n\n        if (fieldHolder == null) {\n            fieldHolder = new JsonFieldHolder();\n            objectHolder.fieldMap.put(element.getSimpleName().toString(), fieldHolder);\n        }\n\n        JsonField annotation = element.getAnnotation(JsonField.class);\n\n        TypeMirror typeConverterType;\n        try {\n            typeConverterType = mProcessingEnv.getElementUtils().getTypeElement(annotation.typeConverter().getCanonicalName()).asType();\n        } catch (MirroredTypeException mte) {\n            typeConverterType = mte.getTypeMirror();\n        }\n\n        String[] fieldName = annotation.name();\n\n        JsonIgnore ignoreAnnotation = element.getAnnotation(JsonIgnore.class);\n        boolean shouldParse = ignoreAnnotation == null || ignoreAnnotation.ignorePolicy() == IgnorePolicy.SERIALIZE_ONLY;\n        boolean shouldSerialize = ignoreAnnotation == null || ignoreAnnotation.ignorePolicy() == IgnorePolicy.PARSE_ONLY;\n\n        String error = fieldHolder.fill(element, elements, types, fieldName, typeConverterType, objectHolder, shouldParse, shouldSerialize);\n        if (!TextUtils.isEmpty(error)) {\n            error(element, error);\n        }\n\n        ensureTypeConverterClassValid(typeConverterType, elements, types);\n    }\n\n    private boolean isJsonFieldFieldAnnotationValid(Element element, Elements elements) {\n        TypeElement enclosingElement = (TypeElement) element.getEnclosingElement();\n\n        Annotation objectAnnotation = enclosingElement.getAnnotation(JsonObject.class);\n        if (objectAnnotation == null) {\n            error(enclosingElement, \"%s: @%s fields can only be in classes annotated with @%s.\", enclosingElement.getQualifiedName(), JsonField.class.getSimpleName(), JsonObject.class.getSimpleName());\n            return false;\n        }\n\n        if (element.getModifiers().contains(PRIVATE) && (TextUtils.isEmpty(JsonFieldHolder.getGetter(element, elements)) || TextUtils.isEmpty(JsonFieldHolder.getSetter(element, elements)))) {\n            error(element, \"@%s annotation can only be used on private fields if both getter and setter are present.\", JsonField.class.getSimpleName());\n            return false;\n        }\n\n        return true;\n    }\n\n    private boolean ensureTypeConverterClassValid(TypeMirror typeConverterClassMirror, Elements elements, Types types) {\n        TypeElement typeConverterElement = elements.getTypeElement(typeConverterClassMirror.toString());\n\n        if (typeConverterElement != null) {\n            boolean isTypeConverterType = false;\n            TypeElement element = typeConverterElement;\n\n            while (!isTypeConverterType && element != null) {\n                for (TypeMirror iface : element.getInterfaces()) {\n                    if (types.erasure(iface).toString().equals(TypeConverter.class.getCanonicalName())) {\n                        isTypeConverterType = true;\n                    }\n                }\n\n                TypeMirror superClassMirror = element.getSuperclass();\n                if (superClassMirror != null) {\n                    superClassMirror = types.erasure(superClassMirror);\n\n                    element = elements.getTypeElement(superClassMirror.toString());\n                } else {\n                    element = null;\n                }\n            }\n\n            if (!isTypeConverterType) {\n                error(element, \"TypeConverter elements must implement the TypeConverter interface or extend from one of the convenience helpers (ie StringBasedTypeConverter or DateTypeConverter).\");\n                return false;\n            }\n\n            boolean constructorIsDeclared = false;\n            boolean hasAccessibleConstructor = false;\n            List<? extends Element> enclosedElements = typeConverterElement.getEnclosedElements();\n            for (Element enclosedElement : enclosedElements) {\n                ElementKind enclosedElementKind = enclosedElement.getKind();\n                if (enclosedElementKind == ElementKind.CONSTRUCTOR) {\n                    constructorIsDeclared = true;\n                    if (!enclosedElement.getModifiers().contains(Modifier.PRIVATE)) {\n                        ExecutableElement executableElement = (ExecutableElement)enclosedElement;\n\n                        if (executableElement.getParameters().size() == 0) {\n                            hasAccessibleConstructor = true;\n                        }\n                    }\n                }\n            }\n\n            if (constructorIsDeclared && !hasAccessibleConstructor) {\n                error(element, \"TypeConverter classes must have a non-private zero argument constructor.\");\n                return false;\n            }\n        }\n\n        return true;\n    }\n\n}\n"
  },
  {
    "path": "processor/src/main/java/com/bluelinelabs/logansquare/processor/processor/JsonObjectProcessor.java",
    "content": "package com.bluelinelabs.logansquare.processor.processor;\n\nimport com.bluelinelabs.logansquare.Constants;\nimport com.bluelinelabs.logansquare.annotation.JsonIgnore;\nimport com.bluelinelabs.logansquare.annotation.JsonIgnore.IgnorePolicy;\nimport com.bluelinelabs.logansquare.annotation.JsonObject;\nimport com.bluelinelabs.logansquare.annotation.JsonObject.FieldDetectionPolicy;\nimport com.bluelinelabs.logansquare.processor.JsonFieldHolder;\nimport com.bluelinelabs.logansquare.processor.JsonObjectHolder;\nimport com.bluelinelabs.logansquare.processor.JsonObjectHolder.JsonObjectHolderBuilder;\nimport com.bluelinelabs.logansquare.processor.TextUtils;\nimport com.bluelinelabs.logansquare.processor.TypeUtils;\nimport com.squareup.javapoet.ClassName;\nimport com.squareup.javapoet.TypeName;\n\nimport java.io.PrintWriter;\nimport java.io.StringWriter;\nimport java.util.ArrayList;\nimport java.util.Arrays;\nimport java.util.List;\nimport java.util.Map;\nimport java.util.Set;\n\nimport javax.annotation.processing.ProcessingEnvironment;\nimport javax.annotation.processing.RoundEnvironment;\nimport javax.lang.model.element.Element;\nimport javax.lang.model.element.ElementKind;\nimport javax.lang.model.element.Modifier;\nimport javax.lang.model.element.TypeElement;\nimport javax.lang.model.element.TypeParameterElement;\nimport javax.lang.model.type.TypeKind;\nimport javax.lang.model.type.TypeMirror;\nimport javax.lang.model.util.Elements;\nimport javax.lang.model.util.Types;\n\nimport static javax.lang.model.element.Modifier.ABSTRACT;\nimport static javax.lang.model.element.Modifier.PRIVATE;\n\npublic class JsonObjectProcessor extends Processor {\n\n    public JsonObjectProcessor(ProcessingEnvironment processingEnv) {\n        super(processingEnv);\n    }\n\n    @Override\n    public Class getAnnotation() {\n        return JsonObject.class;\n    }\n\n    @Override\n    public void findAndParseObjects(RoundEnvironment env, Map<String, JsonObjectHolder> jsonObjectMap, Elements elements, Types types) {\n        for (Element element : env.getElementsAnnotatedWith(JsonObject.class)) {\n            try {\n                processJsonObjectAnnotation(element, jsonObjectMap, elements, types);\n            } catch (Exception e) {\n                StringWriter stackTrace = new StringWriter();\n                e.printStackTrace(new PrintWriter(stackTrace));\n\n                error(element, \"Unable to generate injector for %s. Stack trace incoming:\\n%s\", JsonObject.class, stackTrace.toString());\n            }\n        }\n    }\n\n    private void processJsonObjectAnnotation(Element element, Map<String, JsonObjectHolder> jsonObjectMap, Elements elements, Types types) {\n        TypeElement typeElement = (TypeElement)element;\n\n        if (element.getModifiers().contains(PRIVATE)) {\n            error(element, \"%s: %s annotation can't be used on private classes.\", typeElement.getQualifiedName(), JsonObject.class.getSimpleName());\n        }\n\n        JsonObjectHolder holder = jsonObjectMap.get(TypeUtils.getInjectedFQCN(typeElement, elements));\n        if (holder == null) {\n            String packageName = elements.getPackageOf(typeElement).getQualifiedName().toString();\n            String objectClassName = TypeUtils.getSimpleClassName(typeElement, packageName);\n            String injectedSimpleClassName = objectClassName + Constants.MAPPER_CLASS_SUFFIX;\n            boolean abstractClass = element.getModifiers().contains(ABSTRACT);\n            List<? extends TypeParameterElement> parentTypeParameters = new ArrayList<>();\n            List<String> parentUsedTypeParameters = new ArrayList<>();\n            TypeName parentClassName = null;\n\n            TypeMirror superclass = typeElement.getSuperclass();\n            if (superclass.getKind() != TypeKind.NONE) {\n                TypeElement superclassElement = (TypeElement)types.asElement(superclass);\n                if (superclassElement.getAnnotation(JsonObject.class) != null) {\n                    if (superclassElement.getTypeParameters() != null) {\n                        parentTypeParameters = superclassElement.getTypeParameters();\n                    }\n\n                    String superclassName = superclass.toString();\n                    int indexOfTypeParamStart = superclassName.indexOf(\"<\");\n                    if (indexOfTypeParamStart > 0) {\n                        String typeParams = superclassName.substring(indexOfTypeParamStart + 1, superclassName.length() - 1);\n                        parentUsedTypeParameters = Arrays.asList(typeParams.split(\"\\\\s*,\\\\s*\"));\n                    }\n                }\n            }\n            while (superclass.getKind() != TypeKind.NONE) {\n                TypeElement superclassElement = (TypeElement)types.asElement(superclass);\n\n                if (superclassElement.getAnnotation(JsonObject.class) != null) {\n                    String superclassPackageName = elements.getPackageOf(superclassElement).getQualifiedName().toString();\n                    parentClassName = ClassName.get(superclassPackageName, TypeUtils.getSimpleClassName(superclassElement, superclassPackageName));\n                    break;\n                }\n\n                superclass = superclassElement.getSuperclass();\n            }\n\n            JsonObject annotation = element.getAnnotation(JsonObject.class);\n\n            holder = new JsonObjectHolderBuilder()\n                    .setPackageName(packageName)\n                    .setInjectedClassName(injectedSimpleClassName)\n                    .setObjectTypeName(TypeName.get(typeElement.asType()))\n                    .setIsAbstractClass(abstractClass)\n                    .setParentTypeName(parentClassName)\n                    .setParentTypeParameters(parentTypeParameters)\n                    .setParentUsedTypeParameters(parentUsedTypeParameters)\n                    .setFieldDetectionPolicy(annotation.fieldDetectionPolicy())\n                    .setFieldNamingPolicy(annotation.fieldNamingPolicy())\n                    .setSerializeNullObjects(annotation.serializeNullObjects())\n                    .setSerializeNullCollectionElements(annotation.serializeNullCollectionElements())\n                    .setTypeParameters(typeElement.getTypeParameters())\n                    .build();\n\n            FieldDetectionPolicy fieldDetectionPolicy = annotation.fieldDetectionPolicy();\n            if (fieldDetectionPolicy == FieldDetectionPolicy.NONPRIVATE_FIELDS || fieldDetectionPolicy == FieldDetectionPolicy.NONPRIVATE_FIELDS_AND_ACCESSORS) {\n                addAllNonPrivateFields(element, elements, types, holder);\n            }\n            if (fieldDetectionPolicy == FieldDetectionPolicy.NONPRIVATE_FIELDS_AND_ACCESSORS) {\n                addAllNonPrivateAccessors(element, elements, types, holder);\n            }\n\n            jsonObjectMap.put(TypeUtils.getInjectedFQCN(typeElement, elements), holder);\n        }\n    }\n\n    private void addAllNonPrivateFields(Element element, Elements elements, Types types, JsonObjectHolder objectHolder) {\n        List<? extends Element> enclosedElements = element.getEnclosedElements();\n        for (Element enclosedElement : enclosedElements) {\n            ElementKind enclosedElementKind = enclosedElement.getKind();\n            if (enclosedElementKind == ElementKind.FIELD) {\n                Set<Modifier> modifiers = enclosedElement.getModifiers();\n                if (!modifiers.contains(Modifier.PRIVATE) && !modifiers.contains(Modifier.PROTECTED) && !modifiers.contains(Modifier.TRANSIENT) && !modifiers.contains(Modifier.STATIC)) {\n                    createOrUpdateFieldHolder(enclosedElement, elements, types, objectHolder);\n                }\n            }\n        }\n    }\n\n    private void addAllNonPrivateAccessors(Element element, Elements elements, Types types, JsonObjectHolder objectHolder) {\n        List<? extends Element> enclosedElements = element.getEnclosedElements();\n        for (Element enclosedElement : enclosedElements) {\n            ElementKind enclosedElementKind = enclosedElement.getKind();\n            if (enclosedElementKind == ElementKind.FIELD) {\n                Set<Modifier> modifiers = enclosedElement.getModifiers();\n\n                if (modifiers.contains(Modifier.PRIVATE) && !modifiers.contains(Modifier.TRANSIENT) && !modifiers.contains(Modifier.STATIC)) {\n\n                    String getter = JsonFieldHolder.getGetter(enclosedElement, elements);\n                    String setter = JsonFieldHolder.getSetter(enclosedElement, elements);\n\n                    if (!TextUtils.isEmpty(getter) && !TextUtils.isEmpty(setter)) {\n                        createOrUpdateFieldHolder(enclosedElement, elements, types, objectHolder);\n                    }\n                }\n            }\n        }\n    }\n\n    private void createOrUpdateFieldHolder(Element element, Elements elements, Types types, JsonObjectHolder objectHolder) {\n        JsonIgnore ignoreAnnotation = element.getAnnotation(JsonIgnore.class);\n        boolean shouldParse = ignoreAnnotation == null || ignoreAnnotation.ignorePolicy() == IgnorePolicy.SERIALIZE_ONLY;\n        boolean shouldSerialize = ignoreAnnotation == null || ignoreAnnotation.ignorePolicy() == IgnorePolicy.PARSE_ONLY;\n\n        if (shouldParse || shouldSerialize) {\n            JsonFieldHolder fieldHolder = objectHolder.fieldMap.get(element.getSimpleName().toString());\n            if (fieldHolder == null) {\n                fieldHolder = new JsonFieldHolder();\n                objectHolder.fieldMap.put(element.getSimpleName().toString(), fieldHolder);\n            }\n\n            String error = fieldHolder.fill(element, elements, types, null, null, objectHolder, shouldParse, shouldSerialize);\n            if (!TextUtils.isEmpty(error)) {\n                error(element, error);\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "processor/src/main/java/com/bluelinelabs/logansquare/processor/processor/MethodProcessor.java",
    "content": "package com.bluelinelabs.logansquare.processor.processor;\n\nimport com.bluelinelabs.logansquare.annotation.JsonObject;\n\nimport javax.annotation.processing.ProcessingEnvironment;\nimport javax.lang.model.element.AnnotationMirror;\nimport javax.lang.model.element.Element;\nimport javax.lang.model.element.ExecutableElement;\nimport javax.lang.model.element.TypeElement;\nimport java.util.List;\n\npublic abstract class MethodProcessor extends Processor {\n\n    protected MethodProcessor(ProcessingEnvironment processingEnv) {\n        super(processingEnv);\n    }\n\n    public boolean isCallbackMethodAnnotationValid(Element element, String annotationName) {\n        TypeElement enclosingElement = (TypeElement)element.getEnclosingElement();\n\n        if (enclosingElement.getAnnotation(JsonObject.class) == null) {\n            error(enclosingElement, \"%s: @%s methods can only be in classes annotated with @%s.\", enclosingElement.getQualifiedName(), annotationName, JsonObject.class.getSimpleName());\n            return false;\n        }\n\n        ExecutableElement executableElement = (ExecutableElement)element;\n        if (executableElement.getParameters().size() > 0) {\n            error(element, \"%s: @%s methods must not take any parameters.\", enclosingElement.getQualifiedName(), annotationName);\n            return false;\n        }\n\n        List<? extends Element> allElements = enclosingElement.getEnclosedElements();\n        int methodInstances = 0;\n        for (Element enclosedElement : allElements) {\n            for (AnnotationMirror am : enclosedElement.getAnnotationMirrors()) {\n                if (am.getAnnotationType().asElement().getSimpleName().toString().equals(annotationName)) {\n                    methodInstances++;\n                }\n            }\n        }\n        if (methodInstances != 1) {\n            error(element, \"%s: There can only be one @%s method per class.\", enclosingElement.getQualifiedName(), annotationName);\n            return false;\n        }\n\n        return true;\n    }\n\n}\n"
  },
  {
    "path": "processor/src/main/java/com/bluelinelabs/logansquare/processor/processor/OnJsonParseCompleteProcessor.java",
    "content": "package com.bluelinelabs.logansquare.processor.processor;\n\nimport com.bluelinelabs.logansquare.annotation.OnJsonParseComplete;\nimport com.bluelinelabs.logansquare.processor.JsonObjectHolder;\nimport com.bluelinelabs.logansquare.processor.TypeUtils;\n\nimport javax.annotation.processing.ProcessingEnvironment;\nimport javax.annotation.processing.RoundEnvironment;\nimport javax.lang.model.element.Element;\nimport javax.lang.model.element.ExecutableElement;\nimport javax.lang.model.element.TypeElement;\nimport javax.lang.model.util.Elements;\nimport javax.lang.model.util.Types;\nimport java.io.PrintWriter;\nimport java.io.StringWriter;\nimport java.util.Map;\n\npublic class OnJsonParseCompleteProcessor extends MethodProcessor {\n\n    public OnJsonParseCompleteProcessor(ProcessingEnvironment processingEnv) {\n        super(processingEnv);\n    }\n\n    @Override\n    public Class getAnnotation() {\n        return OnJsonParseComplete.class;\n    }\n\n    @Override\n    public void findAndParseObjects(RoundEnvironment env, Map<String, JsonObjectHolder> jsonObjectMap, Elements elements, Types types) {\n        for (Element element : env.getElementsAnnotatedWith(OnJsonParseComplete.class)) {\n            try {\n                processOnCompleteMethodAnnotation(element, jsonObjectMap, elements);\n            } catch (Exception e) {\n                StringWriter stackTrace = new StringWriter();\n                e.printStackTrace(new PrintWriter(stackTrace));\n\n                error(element, \"Unable to generate injector for %s. Stack trace incoming:\\n%s\", OnJsonParseComplete.class, stackTrace.toString());\n            }\n        }\n    }\n\n    private void processOnCompleteMethodAnnotation(Element element, Map<String, JsonObjectHolder> jsonObjectMap, Elements elements) throws Exception {\n        if (!isCallbackMethodAnnotationValid(element, OnJsonParseComplete.class.getSimpleName())) {\n            return;\n        }\n\n        TypeElement enclosingElement = (TypeElement) element.getEnclosingElement();\n        ExecutableElement executableElement = (ExecutableElement)element;\n        JsonObjectHolder objectHolder = jsonObjectMap.get(TypeUtils.getInjectedFQCN(enclosingElement, elements));\n        objectHolder.onCompleteCallback = executableElement.getSimpleName().toString();\n    }\n}\n"
  },
  {
    "path": "processor/src/main/java/com/bluelinelabs/logansquare/processor/processor/OnPreSerializeProcessor.java",
    "content": "package com.bluelinelabs.logansquare.processor.processor;\n\nimport com.bluelinelabs.logansquare.annotation.OnPreJsonSerialize;\nimport com.bluelinelabs.logansquare.processor.JsonObjectHolder;\nimport com.bluelinelabs.logansquare.processor.TypeUtils;\n\nimport javax.annotation.processing.ProcessingEnvironment;\nimport javax.annotation.processing.RoundEnvironment;\nimport javax.lang.model.element.Element;\nimport javax.lang.model.element.ExecutableElement;\nimport javax.lang.model.element.TypeElement;\nimport javax.lang.model.util.Elements;\nimport javax.lang.model.util.Types;\nimport java.io.PrintWriter;\nimport java.io.StringWriter;\nimport java.util.Map;\n\npublic class OnPreSerializeProcessor extends MethodProcessor {\n\n    public OnPreSerializeProcessor(ProcessingEnvironment processingEnv) {\n        super(processingEnv);\n    }\n\n    @Override\n    public Class getAnnotation() {\n        return OnPreJsonSerialize.class;\n    }\n\n    @Override\n    public void findAndParseObjects(RoundEnvironment env, Map<String, JsonObjectHolder> jsonObjectMap, Elements elements, Types types) {\n        for (Element element : env.getElementsAnnotatedWith(OnPreJsonSerialize.class)) {\n            try {\n                processOnPreJsonSerializeMethodAnnotation(element, jsonObjectMap, elements);\n            } catch (Exception e) {\n                StringWriter stackTrace = new StringWriter();\n                e.printStackTrace(new PrintWriter(stackTrace));\n\n                error(element, \"Unable to generate injector for %s. Stack trace incoming:\\n%s\", OnPreJsonSerialize.class, stackTrace.toString());\n            }\n        }\n    }\n\n    private void processOnPreJsonSerializeMethodAnnotation(Element element, Map<String, JsonObjectHolder> jsonObjectMap, Elements elements) throws Exception {\n        if (!isCallbackMethodAnnotationValid(element, OnPreJsonSerialize.class.getSimpleName())) {\n            return;\n        }\n\n        TypeElement enclosingElement = (TypeElement) element.getEnclosingElement();\n        ExecutableElement executableElement = (ExecutableElement)element;\n        JsonObjectHolder objectHolder = jsonObjectMap.get(TypeUtils.getInjectedFQCN(enclosingElement, elements));\n        objectHolder.preSerializeCallback = executableElement.getSimpleName().toString();\n    }\n}\n"
  },
  {
    "path": "processor/src/main/java/com/bluelinelabs/logansquare/processor/processor/Processor.java",
    "content": "package com.bluelinelabs.logansquare.processor.processor;\n\nimport com.bluelinelabs.logansquare.processor.JsonObjectHolder;\n\nimport javax.annotation.processing.ProcessingEnvironment;\nimport javax.annotation.processing.RoundEnvironment;\nimport javax.lang.model.element.Element;\nimport javax.lang.model.util.Elements;\nimport javax.lang.model.util.Types;\nimport java.util.ArrayList;\nimport java.util.List;\nimport java.util.Map;\n\nimport static javax.tools.Diagnostic.Kind.ERROR;\n\npublic abstract class Processor {\n\n    protected ProcessingEnvironment mProcessingEnv;\n\n    protected Processor(ProcessingEnvironment processingEnv) {\n        mProcessingEnv = processingEnv;\n    }\n\n    public abstract Class getAnnotation();\n    public abstract void findAndParseObjects(RoundEnvironment env, Map<String, JsonObjectHolder> jsonObjectMap, Elements elements, Types types);\n\n    public static List<Processor> allProcessors(ProcessingEnvironment processingEnvironment) {\n        List<Processor> list = new ArrayList<>();\n        list.add(new JsonObjectProcessor(processingEnvironment));\n        list.add(new OnJsonParseCompleteProcessor(processingEnvironment));\n        list.add(new OnPreSerializeProcessor(processingEnvironment));\n        list.add(new JsonFieldProcessor(processingEnvironment));\n        return list;\n    }\n\n    public void error(Element element, String message, Object... args) {\n        mProcessingEnv.getMessager().printMessage(ERROR, String.format(message, args), element);\n    }\n}\n"
  },
  {
    "path": "processor/src/main/java/com/bluelinelabs/logansquare/processor/type/Type.java",
    "content": "package com.bluelinelabs.logansquare.processor.type;\n\nimport com.bluelinelabs.logansquare.processor.type.collection.ArrayCollectionType;\nimport com.bluelinelabs.logansquare.processor.type.collection.CollectionType;\nimport com.bluelinelabs.logansquare.processor.type.field.FieldType;\nimport com.bluelinelabs.logansquare.processor.type.field.ParameterizedTypeField;\nimport com.squareup.javapoet.ClassName;\nimport com.squareup.javapoet.MethodSpec;\nimport com.squareup.javapoet.TypeName;\n\nimport java.util.ArrayList;\nimport java.util.Collections;\nimport java.util.HashSet;\nimport java.util.List;\nimport java.util.Set;\n\nimport javax.lang.model.type.ArrayType;\nimport javax.lang.model.type.TypeMirror;\nimport javax.lang.model.util.Elements;\nimport javax.lang.model.util.Types;\n\npublic abstract class Type {\n\n    public final List<Type> parameterTypes;\n\n    public abstract TypeName getTypeName();\n    public abstract String getParameterizedTypeString();\n    public abstract Object[] getParameterizedTypeStringArgs();\n    public abstract void parse(MethodSpec.Builder builder, int depth, String setter, Object... setterFormatArgs);\n    public abstract void serialize(MethodSpec.Builder builder, int depth, String fieldName, List<String> processedFieldNames, String getter, boolean isObjectProperty, boolean checkIfNull, boolean writeIfNull, boolean writeCollectionElementIfNull);\n\n    public Type() {\n        parameterTypes = new ArrayList<>();\n    }\n\n    public static Type typeFor(TypeMirror typeMirror, TypeMirror typeConverterType, Elements elements, Types types) {\n        TypeMirror genericClassTypeMirror = types.erasure(typeMirror);\n        boolean hasTypeConverter = typeConverterType != null && !typeConverterType.toString().equals(\"void\");\n\n        Type type;\n        if (!hasTypeConverter && typeMirror instanceof ArrayType) {\n            TypeMirror arrayTypeMirror = ((ArrayType)typeMirror).getComponentType();\n            type = new ArrayCollectionType(Type.typeFor(arrayTypeMirror, null, elements, types));\n        } else if (!hasTypeConverter && !genericClassTypeMirror.toString().equals(typeMirror.toString())) {\n            type = CollectionType.collectionTypeFor(typeMirror, genericClassTypeMirror, elements, types);\n\n            if (type == null) {\n                if (typeMirror.toString().contains(\"?\")) {\n                    throw new RuntimeException(\"Generic types with wildcards are currently not supported by LoganSquare.\");\n                }\n                try {\n                    type = new ParameterizedTypeField(TypeName.get(typeMirror));\n                } catch (Exception ignored) { }\n            }\n        } else {\n            type = FieldType.fieldTypeFor(typeMirror, typeConverterType, elements, types);\n        }\n\n        return type;\n    }\n\n    protected Object[] expandStringArgs(Object... args) {\n        List<Object> argList = new ArrayList<>();\n        for (Object arg : args) {\n            if (arg instanceof Object[]) {\n                Collections.addAll(argList, (Object[])arg);\n            } else {\n                argList.add(arg);\n            }\n        }\n\n        return argList.toArray(new Object[argList.size()]);\n    }\n\n    public void addParameterTypes(List<TypeMirror> parameterTypes, Elements elements, Types types) {\n        for (TypeMirror typeMirror : parameterTypes) {\n            addParameterType(typeMirror, elements, types);\n        }\n    }\n\n    public void addParameterType(TypeMirror parameterType, Elements elements, Types types) {\n        parameterTypes.add(Type.typeFor(parameterType, null, elements, types));\n    }\n\n    public Set<ClassNameObjectMapper> getUsedJsonObjectMappers() {\n        Set<ClassNameObjectMapper> set = new HashSet<>();\n        for (Type parameterType : parameterTypes) {\n            set.addAll(parameterType.getUsedJsonObjectMappers());\n        }\n        return set;\n    }\n\n    public Set<TypeName> getUsedTypeConverters() {\n        Set<TypeName> set = new HashSet<>();\n        for (Type parameterType : parameterTypes) {\n            set.addAll(parameterType.getUsedTypeConverters());\n        }\n        return set;\n    }\n\n    public static class ClassNameObjectMapper {\n        public final ClassName className;\n        public final String objectMapper;\n\n        public ClassNameObjectMapper(ClassName className, String objectMapper) {\n            this.className = className;\n            this.objectMapper = objectMapper;\n        }\n\n        @Override\n        public boolean equals(Object o) {\n            if (this == o) {\n                return true;\n            } else if (o == null || getClass() != o.getClass()) {\n                return false;\n            } else {\n                return objectMapper.equals(((ClassNameObjectMapper)o).objectMapper);\n            }\n        }\n\n        @Override\n        public int hashCode() {\n            return objectMapper.hashCode();\n        }\n    }\n}\n"
  },
  {
    "path": "processor/src/main/java/com/bluelinelabs/logansquare/processor/type/collection/ArrayCollectionType.java",
    "content": "package com.bluelinelabs.logansquare.processor.type.collection;\n\nimport com.bluelinelabs.logansquare.processor.TextUtils;\nimport com.bluelinelabs.logansquare.processor.type.Type;\nimport com.fasterxml.jackson.core.JsonToken;\nimport com.squareup.javapoet.ArrayTypeName;\nimport com.squareup.javapoet.MethodSpec;\nimport com.squareup.javapoet.MethodSpec.Builder;\nimport com.squareup.javapoet.TypeName;\n\nimport java.util.ArrayList;\nimport java.util.List;\nimport java.util.Set;\n\nimport static com.bluelinelabs.logansquare.processor.ObjectMapperInjector.JSON_GENERATOR_VARIABLE_NAME;\nimport static com.bluelinelabs.logansquare.processor.ObjectMapperInjector.JSON_PARSER_VARIABLE_NAME;\n\npublic class ArrayCollectionType extends CollectionType {\n\n    private final Type arrayType;\n\n    public ArrayCollectionType(Type arrayType) {\n        this.arrayType = arrayType;\n    }\n\n    @Override\n    public TypeName getTypeName() {\n        return ArrayTypeName.of(arrayType.getTypeName());\n    }\n\n    @Override\n    public String getParameterizedTypeString() {\n        return arrayType.getParameterizedTypeString() + \"[]\";\n    }\n\n    @Override\n    public Object[] getParameterizedTypeStringArgs() {\n        return arrayType.getParameterizedTypeStringArgs();\n    }\n\n    @Override\n    public void parse(Builder builder, int depth, String setter, Object... setterFormatArgs) {\n        TypeName fieldType = arrayType.getTypeName();\n        final String collectionVarName = \"collection\" + depth;\n\n        final String instanceCreator = String.format(\"$T<%s> $L = new $T<%s>()\", arrayType.getParameterizedTypeString(), arrayType.getParameterizedTypeString());\n        final Object[] instanceCreatorArgs = expandStringArgs(List.class, arrayType.getParameterizedTypeStringArgs(), collectionVarName, ArrayList.class, arrayType.getParameterizedTypeStringArgs());\n\n        builder.beginControlFlow(\"if ($L.getCurrentToken() == $T.START_ARRAY)\", JSON_PARSER_VARIABLE_NAME, JsonToken.class)\n                .addStatement(instanceCreator, instanceCreatorArgs)\n                .beginControlFlow(\"while ($L.nextToken() != $T.END_ARRAY)\", JSON_PARSER_VARIABLE_NAME, JsonToken.class);\n\n        if (!fieldType.isPrimitive()) {\n            final String valueVarName = \"value\" + depth;\n\n            builder.addStatement(\"$T $L\", arrayType.getTypeName(), valueVarName);\n            arrayType.parse(builder, depth + 1, \"$L = $L\", valueVarName);\n\n            builder.addStatement(\"$L.add($L)\", collectionVarName, valueVarName);\n        } else {\n            arrayType.parse(builder, depth + 1, \"$L.add($L)\", collectionVarName);\n        }\n\n        builder.endControlFlow();\n\n        if (fieldType.isPrimitive()) {\n            builder\n                    .addStatement(\"$T[] array = new $T[$L.size()]\", fieldType, fieldType, collectionVarName)\n                    .addStatement(\"int i = 0\")\n                    .beginControlFlow(\"for ($T value : $L)\", fieldType, collectionVarName)\n                    .addStatement(\"array[i++] = value\")\n                    .endControlFlow();\n        } else {\n            builder.addStatement(\"$T[] array = $L.toArray(new $T[$L.size()])\", fieldType, collectionVarName, fieldType, collectionVarName);\n        }\n\n        builder\n                .addStatement(setter, expandStringArgs(setterFormatArgs, \"array\"))\n                .nextControlFlow(\"else\")\n                .addStatement(setter, expandStringArgs(setterFormatArgs, \"null\"))\n                .endControlFlow();\n    }\n\n    @Override\n    public void serialize(MethodSpec.Builder builder, int depth, String fieldName, List<String> processedFieldNames, String getter, boolean isObjectProperty, boolean checkIfNull, boolean writeIfNull, boolean writeCollectionElementIfNull) {\n        final String cleanFieldName = TextUtils.toUniqueFieldNameVariable(fieldName, processedFieldNames);\n        final String collectionVariableName = \"lslocal\" + cleanFieldName;\n        final String elementVarName = \"element\" + depth;\n\n        final String instanceCreator;\n        final Object[] instanceCreatorArgs;\n        final String forLine;\n        final Object[] forLineArgs;\n        if (arrayType.getTypeName().isPrimitive()) {\n            instanceCreator = \"final $T[] $L = $L\";\n            instanceCreatorArgs = expandStringArgs(arrayType.getTypeName(), collectionVariableName, getter);\n            forLine = \"for ($T $L : $L)\";\n            forLineArgs = expandStringArgs(arrayType.getTypeName(), elementVarName, collectionVariableName);\n        } else {\n            instanceCreator = String.format(\"final %s[] $L = $L\", arrayType.getParameterizedTypeString());\n            instanceCreatorArgs = expandStringArgs(arrayType.getParameterizedTypeStringArgs(), collectionVariableName, getter);\n            forLine = String.format(\"for (%s $L : $L)\", arrayType.getParameterizedTypeString());\n            forLineArgs = expandStringArgs(arrayType.getParameterizedTypeStringArgs(), elementVarName, collectionVariableName);\n        }\n\n        builder\n                .addStatement(instanceCreator, instanceCreatorArgs)\n                .beginControlFlow(\"if ($L != null)\", collectionVariableName);\n\n        if (isObjectProperty) {\n            builder.addStatement(\"$L.writeFieldName($S)\", JSON_GENERATOR_VARIABLE_NAME, fieldName);\n        }\n\n        builder\n                .addStatement(\"$L.writeStartArray()\", JSON_GENERATOR_VARIABLE_NAME)\n                .beginControlFlow(forLine, forLineArgs);\n\n        if (!arrayType.getTypeName().isPrimitive()) {\n            builder.beginControlFlow(\"if ($L != null)\", elementVarName);\n        }\n\n        arrayType.serialize(builder, depth + 1, collectionVariableName + \"Element\", processedFieldNames, elementVarName, false, false, false, writeCollectionElementIfNull);\n\n        if (!arrayType.getTypeName().isPrimitive()) {\n            if (writeCollectionElementIfNull) {\n                builder\n                        .nextControlFlow(\"else\")\n                        .addStatement(\"$L.writeNull()\", JSON_GENERATOR_VARIABLE_NAME);\n            }\n            builder.endControlFlow();\n        }\n\n        builder\n                .endControlFlow()\n                .addStatement(\"$L.writeEndArray()\", JSON_GENERATOR_VARIABLE_NAME)\n                .endControlFlow();\n    }\n\n    @Override\n    public Set<ClassNameObjectMapper> getUsedJsonObjectMappers() {\n        Set<ClassNameObjectMapper> mappers = super.getUsedJsonObjectMappers();\n        mappers.addAll(arrayType.getUsedJsonObjectMappers());\n        return mappers;\n    }\n}\n"
  },
  {
    "path": "processor/src/main/java/com/bluelinelabs/logansquare/processor/type/collection/ArrayListCollectionType.java",
    "content": "package com.bluelinelabs.logansquare.processor.type.collection;\n\nimport com.squareup.javapoet.ClassName;\nimport com.squareup.javapoet.TypeName;\n\nimport java.util.ArrayList;\n\npublic class ArrayListCollectionType extends ListCollectionType {\n\n    public ArrayListCollectionType(ClassName className) {\n        super(className);\n    }\n\n    @Override\n    public TypeName getTypeName() {\n        return ClassName.get(ArrayList.class);\n    }\n\n}\n"
  },
  {
    "path": "processor/src/main/java/com/bluelinelabs/logansquare/processor/type/collection/CollectionType.java",
    "content": "package com.bluelinelabs.logansquare.processor.type.collection;\n\nimport com.bluelinelabs.logansquare.processor.TypeUtils;\nimport com.bluelinelabs.logansquare.processor.type.Type;\nimport com.squareup.javapoet.ClassName;\n\nimport javax.lang.model.type.TypeMirror;\nimport javax.lang.model.util.Elements;\nimport javax.lang.model.util.Types;\n\npublic abstract class CollectionType extends Type {\n\n    public static CollectionType collectionTypeFor(TypeMirror typeMirror, TypeMirror genericClassTypeMirror, Elements elements, Types types) {\n        CollectionType collectionType = null;\n        \n        String typeMirrorInfo = genericClassTypeMirror.toString().replaceAll(\"<.*>\", \"\");\n        \n        switch (typeMirrorInfo) {\n            case \"java.util.List\":\n            case \"java.util.ArrayList\":\n                collectionType = new ArrayListCollectionType(ClassName.bestGuess(typeMirrorInfo));\n                break;\n            case \"java.util.LinkedList\":\n                collectionType = new LinkedListCollectionType(ClassName.bestGuess(typeMirrorInfo));\n                break;\n            case \"java.util.Map\":\n            case \"java.util.HashMap\":\n                collectionType = new HashMapCollectionType(ClassName.bestGuess(typeMirrorInfo));\n                break;\n            case \"java.util.TreeMap\":\n                collectionType = new TreeMapCollectionType(ClassName.bestGuess(typeMirrorInfo));\n                break;\n            case \"java.util.LinkedHashMap\":\n                collectionType = new LinkedHashMapCollectionType(ClassName.bestGuess(typeMirrorInfo));\n                break;\n            case \"java.util.Set\":\n            case \"java.util.HashSet\":\n                collectionType = new SetCollectionType(ClassName.bestGuess(typeMirrorInfo));\n                break;\n            case \"java.util.Queue\":\n            case \"java.util.Deque\":\n            case \"java.util.ArrayDeque\":\n                collectionType = new QueueCollectionType(ClassName.bestGuess(typeMirrorInfo));\n                break;\n        }\n\n        if (collectionType != null) {\n            collectionType.addParameterTypes(TypeUtils.getParameterizedTypes(typeMirror), elements, types);\n        }\n\n        return collectionType;\n    }\n\n}\n"
  },
  {
    "path": "processor/src/main/java/com/bluelinelabs/logansquare/processor/type/collection/HashMapCollectionType.java",
    "content": "package com.bluelinelabs.logansquare.processor.type.collection;\n\nimport com.squareup.javapoet.ClassName;\nimport com.squareup.javapoet.TypeName;\n\nimport java.util.HashMap;\n\npublic class HashMapCollectionType extends MapCollectionType {\n\n    public HashMapCollectionType(ClassName className) {\n        super(className);\n    }\n\n    @Override\n    public TypeName getTypeName() {\n        return ClassName.get(HashMap.class);\n    }\n\n}\n"
  },
  {
    "path": "processor/src/main/java/com/bluelinelabs/logansquare/processor/type/collection/LinkedHashMapCollectionType.java",
    "content": "package com.bluelinelabs.logansquare.processor.type.collection;\n\nimport com.squareup.javapoet.ClassName;\nimport com.squareup.javapoet.TypeName;\n\nimport java.util.LinkedHashMap;\n\npublic class LinkedHashMapCollectionType extends MapCollectionType {\n\n    public LinkedHashMapCollectionType(ClassName className) {\n        super(className);\n    }\n\n    @Override\n    public TypeName getTypeName() {\n        return ClassName.get(LinkedHashMap.class);\n    }\n\n}\n"
  },
  {
    "path": "processor/src/main/java/com/bluelinelabs/logansquare/processor/type/collection/LinkedListCollectionType.java",
    "content": "package com.bluelinelabs.logansquare.processor.type.collection;\n\nimport com.squareup.javapoet.ClassName;\nimport com.squareup.javapoet.TypeName;\n\nimport java.util.LinkedList;\n\npublic class LinkedListCollectionType extends ListCollectionType {\n\n    public LinkedListCollectionType(ClassName className) {\n        super(className);\n    }\n\n    @Override\n    public TypeName getTypeName() {\n        return ClassName.get(LinkedList.class);\n    }\n}\n"
  },
  {
    "path": "processor/src/main/java/com/bluelinelabs/logansquare/processor/type/collection/ListCollectionType.java",
    "content": "package com.bluelinelabs.logansquare.processor.type.collection;\n\nimport com.squareup.javapoet.ClassName;\n\nimport java.util.List;\n\npublic abstract class ListCollectionType extends SingleParameterCollectionType {\n\n    private final ClassName mClassName;\n\n    public ListCollectionType(ClassName className) {\n        mClassName = className;\n    }\n\n    @Override\n    public String getParameterizedTypeString() {\n        return \"$T<\" + parameterTypes.get(0).getParameterizedTypeString() + \">\";\n    }\n\n    @Override\n    public Object[] getParameterizedTypeStringArgs() {\n        return expandStringArgs(mClassName, parameterTypes.get(0).getParameterizedTypeStringArgs());\n    }\n\n    @Override\n    public Class getGenericClass() {\n        return List.class;\n    }\n\n}\n"
  },
  {
    "path": "processor/src/main/java/com/bluelinelabs/logansquare/processor/type/collection/MapCollectionType.java",
    "content": "package com.bluelinelabs.logansquare.processor.type.collection;\n\nimport com.bluelinelabs.logansquare.processor.TextUtils;\nimport com.bluelinelabs.logansquare.processor.type.Type;\nimport com.fasterxml.jackson.core.JsonToken;\nimport com.squareup.javapoet.ClassName;\nimport com.squareup.javapoet.MethodSpec;\nimport com.squareup.javapoet.MethodSpec.Builder;\n\nimport java.util.List;\nimport java.util.Map;\n\nimport static com.bluelinelabs.logansquare.processor.ObjectMapperInjector.JSON_GENERATOR_VARIABLE_NAME;\nimport static com.bluelinelabs.logansquare.processor.ObjectMapperInjector.JSON_PARSER_VARIABLE_NAME;\n\npublic abstract class MapCollectionType extends CollectionType {\n\n    private final ClassName mClassName;\n\n    public MapCollectionType(ClassName className) {\n        mClassName = className;\n    }\n\n    @Override\n    public String getParameterizedTypeString() {\n        return \"$T<$T, \" + parameterTypes.get(1).getParameterizedTypeString() + \">\";\n    }\n\n    @Override\n    public Object[] getParameterizedTypeStringArgs() {\n        return expandStringArgs(mClassName, String.class, parameterTypes.get(1).getParameterizedTypeStringArgs());\n    }\n\n    @Override\n    public void parse(Builder builder, int depth, String setter, Object... setterFormatArgs) {\n        Type parameterType = parameterTypes.get(1);\n\n        final String mapVariableName = \"map\" + depth;\n        final String keyVariableName = \"key\" + depth;\n\n        final String instanceCreator = String.format(\"$T<$T, %s> $L = new $T<$T, %s>()\", parameterType.getParameterizedTypeString(), parameterType.getParameterizedTypeString());\n        final Object[] instanceCreatorArgs = expandStringArgs(getTypeName(), String.class, parameterType.getParameterizedTypeStringArgs(), mapVariableName, getTypeName(), String.class, parameterType.getParameterizedTypeStringArgs());\n\n        builder.beginControlFlow(\"if ($L.getCurrentToken() == $T.START_OBJECT)\", JSON_PARSER_VARIABLE_NAME, JsonToken.class)\n                .addStatement(instanceCreator, instanceCreatorArgs)\n                .beginControlFlow(\"while ($L.nextToken() != $T.END_OBJECT)\", JSON_PARSER_VARIABLE_NAME, JsonToken.class)\n                .addStatement(\"$T $L = $L.getText()\", String.class, keyVariableName, JSON_PARSER_VARIABLE_NAME)\n                .addStatement(\"$L.nextToken()\", JSON_PARSER_VARIABLE_NAME)\n                .beginControlFlow(\"if ($L.getCurrentToken() == $T.VALUE_NULL)\", JSON_PARSER_VARIABLE_NAME, JsonToken.class)\n                .addStatement(\"$L.put($L, null)\", mapVariableName, keyVariableName)\n                .nextControlFlow(\"else\");\n\n        parameterType.parse(builder, depth + 1, \"$L.put($L, $L)\", mapVariableName, keyVariableName);\n\n        builder\n                .endControlFlow()\n                .endControlFlow()\n                .addStatement(setter, expandStringArgs(setterFormatArgs, mapVariableName))\n                .nextControlFlow(\"else\")\n                .addStatement(setter, expandStringArgs(setterFormatArgs, \"null\"))\n                .endControlFlow();\n    }\n\n    @Override\n    public void serialize(MethodSpec.Builder builder, int depth, String fieldName, List<String> processedFieldNames, String getter, boolean isObjectProperty, boolean checkIfNull, boolean writeIfNull, boolean writeCollectionElementIfNull) {\n        Type parameterType = parameterTypes.get(1);\n        final String cleanFieldName = TextUtils.toUniqueFieldNameVariable(fieldName, processedFieldNames);\n        final String mapVariableName = \"lslocal\" + cleanFieldName;\n        final String entryVariableName = \"entry\" + depth;\n\n        final String instanceCreator = String.format(\"final $T<$T, %s> $L = $L\", parameterType.getParameterizedTypeString());\n        final Object[] instanceCreatorArgs = expandStringArgs(Map.class, String.class, parameterType.getParameterizedTypeStringArgs(), mapVariableName, getter);\n\n        final String forLine = String.format(\"for ($T<$T, %s> $L : $L.entrySet())\", parameterType.getParameterizedTypeString());\n        final Object[] forLineArgs = expandStringArgs(Map.Entry.class, String.class, parameterType.getParameterizedTypeStringArgs(), entryVariableName, mapVariableName);\n\n        builder\n                .addStatement(instanceCreator, instanceCreatorArgs)\n                .beginControlFlow(\"if ($L != null)\", mapVariableName);\n\n        if (isObjectProperty) {\n            builder.addStatement(\"$L.writeFieldName($S)\", JSON_GENERATOR_VARIABLE_NAME, fieldName);\n        }\n\n        builder\n                .addStatement(\"$L.writeStartObject()\", JSON_GENERATOR_VARIABLE_NAME)\n                .beginControlFlow(forLine, forLineArgs)\n                .addStatement(\"$L.writeFieldName($L.getKey().toString())\", JSON_GENERATOR_VARIABLE_NAME, entryVariableName)\n                .beginControlFlow(\"if ($L.getValue() != null)\", entryVariableName);\n\n        parameterType.serialize(builder, depth + 1, mapVariableName + \"Element\", processedFieldNames, entryVariableName + \".getValue()\", false, false, true, writeCollectionElementIfNull);\n\n        if (writeCollectionElementIfNull) {\n            builder\n                    .nextControlFlow(\"else\")\n                    .addStatement(\"$L.writeNull()\", JSON_GENERATOR_VARIABLE_NAME);\n        }\n\n        builder\n                .endControlFlow()\n                .endControlFlow()\n                .addStatement(\"$L.writeEndObject()\", JSON_GENERATOR_VARIABLE_NAME)\n                .endControlFlow();\n    }\n}\n"
  },
  {
    "path": "processor/src/main/java/com/bluelinelabs/logansquare/processor/type/collection/QueueCollectionType.java",
    "content": "package com.bluelinelabs.logansquare.processor.type.collection;\n\nimport com.squareup.javapoet.ClassName;\nimport com.squareup.javapoet.TypeName;\n\nimport java.util.ArrayDeque;\nimport java.util.Queue;\n\npublic class QueueCollectionType extends SingleParameterCollectionType {\n\n    private final ClassName mClassName;\n\n    public QueueCollectionType(ClassName className) {\n        mClassName = className;\n    }\n\n    @Override\n    public TypeName getTypeName() {\n        return ClassName.get(ArrayDeque.class);\n    }\n\n    @Override\n    public String getParameterizedTypeString() {\n        return \"$T<\" + parameterTypes.get(0).getParameterizedTypeString() + \">\";\n    }\n\n    @Override\n    public Object[] getParameterizedTypeStringArgs() {\n        return expandStringArgs(mClassName, parameterTypes.get(0).getParameterizedTypeStringArgs());\n    }\n\n    @Override\n    public Class getGenericClass() {\n        return Queue.class;\n    }\n}\n"
  },
  {
    "path": "processor/src/main/java/com/bluelinelabs/logansquare/processor/type/collection/SetCollectionType.java",
    "content": "package com.bluelinelabs.logansquare.processor.type.collection;\n\nimport com.squareup.javapoet.ClassName;\nimport com.squareup.javapoet.TypeName;\n\nimport java.util.HashSet;\nimport java.util.Set;\n\npublic class SetCollectionType extends SingleParameterCollectionType {\n\n    private final ClassName mClassName;\n\n    public SetCollectionType(ClassName className) {\n        mClassName = className;\n    }\n\n    @Override\n    public TypeName getTypeName() {\n        return ClassName.get(HashSet.class);\n    }\n\n    @Override\n    public String getParameterizedTypeString() {\n        return \"$T<\" + parameterTypes.get(0).getParameterizedTypeString() + \">\";\n    }\n\n    @Override\n    public Object[] getParameterizedTypeStringArgs() {\n        return expandStringArgs(Set.class, parameterTypes.get(0).getParameterizedTypeStringArgs());\n    }\n\n    @Override\n    public Class getGenericClass() {\n        return Set.class;\n    }\n\n}\n"
  },
  {
    "path": "processor/src/main/java/com/bluelinelabs/logansquare/processor/type/collection/SingleParameterCollectionType.java",
    "content": "package com.bluelinelabs.logansquare.processor.type.collection;\n\nimport com.bluelinelabs.logansquare.processor.TextUtils;\nimport com.bluelinelabs.logansquare.processor.type.Type;\nimport com.fasterxml.jackson.core.JsonToken;\nimport com.squareup.javapoet.MethodSpec;\nimport com.squareup.javapoet.MethodSpec.Builder;\n\nimport java.util.List;\nimport java.util.Set;\n\nimport static com.bluelinelabs.logansquare.processor.ObjectMapperInjector.JSON_GENERATOR_VARIABLE_NAME;\nimport static com.bluelinelabs.logansquare.processor.ObjectMapperInjector.JSON_PARSER_VARIABLE_NAME;\n\npublic abstract class SingleParameterCollectionType extends CollectionType {\n\n    public abstract Class getGenericClass();\n\n    @Override\n    public void parse(Builder builder, int depth, String setter, Object... setterFormatArgs) {\n        Type parameterType = parameterTypes.get(0);\n\n        final String collectionVarName = \"collection\" + depth;\n        final String valueVarName = \"value\" + depth;\n\n        final String instanceCreator = String.format(\"$T<%s> $L = new $T<%s>()\", parameterType.getParameterizedTypeString(), parameterType.getParameterizedTypeString());\n        final Object[] instanceCreatorArgs = expandStringArgs(getTypeName(), parameterType.getParameterizedTypeStringArgs(), collectionVarName, getTypeName(), parameterType.getParameterizedTypeStringArgs());\n\n        builder.beginControlFlow(\"if ($L.getCurrentToken() == $T.START_ARRAY)\", JSON_PARSER_VARIABLE_NAME, JsonToken.class)\n                .addStatement(instanceCreator, instanceCreatorArgs)\n                .beginControlFlow(\"while ($L.nextToken() != $T.END_ARRAY)\", JSON_PARSER_VARIABLE_NAME, JsonToken.class)\n                .addStatement(\"$T $L\", parameterType.getTypeName(), valueVarName);\n\n        parameterType.parse(builder, depth + 1, \"$L = $L\", valueVarName);\n\n        builder\n                .addStatement(\"$L.add($L)\", collectionVarName, valueVarName)\n                .endControlFlow();\n\n        builder\n                .addStatement(setter, expandStringArgs(setterFormatArgs, collectionVarName))\n                .nextControlFlow(\"else\")\n                .addStatement(setter, expandStringArgs(setterFormatArgs, \"null\"))\n                .endControlFlow();\n    }\n\n    @Override\n    public void serialize(MethodSpec.Builder builder, int depth, String fieldName, List<String> processedFieldNames, String getter, boolean isObjectProperty, boolean checkIfNull, boolean writeIfNull, boolean writeCollectionElementIfNull) {\n        Type parameterType = parameterTypes.get(0);\n        final String cleanFieldName = TextUtils.toUniqueFieldNameVariable(fieldName, processedFieldNames);\n        final String collectionVariableName = \"lslocal\" + cleanFieldName;\n        final String elementVarName = \"element\" + depth;\n\n        final String instanceCreator = String.format(\"final $T<%s> $L = $L\", parameterType.getParameterizedTypeString());\n        final Object[] instanceCreatorArgs = expandStringArgs(getGenericClass(), parameterType.getParameterizedTypeStringArgs(), collectionVariableName, getter);\n\n        final String forLine = String.format(\"for (%s $L : $L)\", parameterType.getParameterizedTypeString());\n        final Object[] forLineArgs = expandStringArgs(parameterType.getParameterizedTypeStringArgs(), elementVarName, collectionVariableName);\n\n        builder\n                .addStatement(instanceCreator, instanceCreatorArgs)\n                .beginControlFlow(\"if ($L != null)\", collectionVariableName);\n\n        if (isObjectProperty) {\n            builder.addStatement(\"$L.writeFieldName($S)\", JSON_GENERATOR_VARIABLE_NAME, fieldName);\n        }\n\n        builder\n                .addStatement(\"$L.writeStartArray()\", JSON_GENERATOR_VARIABLE_NAME)\n                .beginControlFlow(forLine, forLineArgs)\n                .beginControlFlow(\"if ($L != null)\", elementVarName);\n\n        parameterType.serialize(builder, depth + 1, collectionVariableName + \"Element\", processedFieldNames, elementVarName, false, false, false, writeCollectionElementIfNull);\n\n        if (writeCollectionElementIfNull) {\n            builder\n                    .nextControlFlow(\"else\")\n                    .addStatement(\"$L.writeNull()\", JSON_GENERATOR_VARIABLE_NAME);\n        }\n\n            builder\n                .endControlFlow()\n                .endControlFlow()\n                .addStatement(\"$L.writeEndArray()\", JSON_GENERATOR_VARIABLE_NAME)\n                .endControlFlow();\n    }\n\n}\n"
  },
  {
    "path": "processor/src/main/java/com/bluelinelabs/logansquare/processor/type/collection/TreeMapCollectionType.java",
    "content": "package com.bluelinelabs.logansquare.processor.type.collection;\n\nimport com.squareup.javapoet.ClassName;\nimport com.squareup.javapoet.TypeName;\n\nimport java.util.TreeMap;\n\npublic class TreeMapCollectionType extends MapCollectionType {\n\n    public TreeMapCollectionType(ClassName className) {\n        super(className);\n    }\n\n    @Override\n    public TypeName getTypeName() {\n        return ClassName.get(TreeMap.class);\n    }\n\n}\n"
  },
  {
    "path": "processor/src/main/java/com/bluelinelabs/logansquare/processor/type/field/BooleanFieldType.java",
    "content": "package com.bluelinelabs.logansquare.processor.type.field;\n\nimport com.fasterxml.jackson.core.JsonToken;\nimport com.squareup.javapoet.ClassName;\nimport com.squareup.javapoet.MethodSpec.Builder;\nimport com.squareup.javapoet.TypeName;\n\nimport java.util.List;\n\nimport static com.bluelinelabs.logansquare.processor.ObjectMapperInjector.JSON_GENERATOR_VARIABLE_NAME;\nimport static com.bluelinelabs.logansquare.processor.ObjectMapperInjector.JSON_PARSER_VARIABLE_NAME;\n\npublic class BooleanFieldType extends FieldType {\n\n    protected boolean isPrimitive;\n\n    public BooleanFieldType(boolean isPrimitive) {\n        this.isPrimitive = isPrimitive;\n    }\n\n    @Override\n    public TypeName getTypeName() {\n        return (isPrimitive ? TypeName.BOOLEAN : ClassName.get(Boolean.class));\n    }\n\n    @Override\n    public TypeName getNonPrimitiveTypeName() {\n        return ClassName.get(Boolean.class);\n    }\n\n    @Override\n    public void parse(Builder builder, int depth, String setter, Object... setterFormatArgs) {\n        if (isPrimitive) {\n            setter = replaceLastLiteral(setter, \"$L.getValueAsBoolean()\");\n            builder.addStatement(setter, expandStringArgs(setterFormatArgs, JSON_PARSER_VARIABLE_NAME));\n        } else {\n            setter = replaceLastLiteral(setter, \"$L.getCurrentToken() == $T.VALUE_NULL ? null : Boolean.valueOf($L.getValueAsBoolean())\");\n            builder.addStatement(setter, expandStringArgs(setterFormatArgs, JSON_PARSER_VARIABLE_NAME, JsonToken.class, JSON_PARSER_VARIABLE_NAME));\n        }\n    }\n\n    @Override\n    public void serialize(Builder builder, int depth, String fieldName, List<String> processedFieldNames, String getter, boolean isObjectProperty, boolean checkIfNull, boolean writeIfNull, boolean writeCollectionElementIfNull) {\n        if (!isPrimitive && checkIfNull) {\n            builder.beginControlFlow(\"if ($L != null)\", getter);\n        }\n\n        if (isObjectProperty) {\n            builder.addStatement(\"$L.writeBooleanField($S, $L)\", JSON_GENERATOR_VARIABLE_NAME, fieldName, getter);\n        } else {\n            builder.addStatement(\"$L.writeBoolean($L)\", JSON_GENERATOR_VARIABLE_NAME, getter);\n        }\n\n        if (!isPrimitive && checkIfNull) {\n            if (writeIfNull) {\n                builder.nextControlFlow(\"else\");\n\n                if (isObjectProperty) {\n                    builder.addStatement(\"$L.writeFieldName($S)\", JSON_GENERATOR_VARIABLE_NAME, fieldName);\n                }\n                builder.addStatement(\"$L.writeNull()\", JSON_GENERATOR_VARIABLE_NAME);\n            }\n\n            builder.endControlFlow();\n        }\n    }\n}\n"
  },
  {
    "path": "processor/src/main/java/com/bluelinelabs/logansquare/processor/type/field/ByteFieldType.java",
    "content": "package com.bluelinelabs.logansquare.processor.type.field;\n\nimport com.fasterxml.jackson.core.JsonToken;\nimport com.squareup.javapoet.ClassName;\nimport com.squareup.javapoet.MethodSpec.Builder;\nimport com.squareup.javapoet.TypeName;\n\nimport static com.bluelinelabs.logansquare.processor.ObjectMapperInjector.JSON_PARSER_VARIABLE_NAME;\n\npublic class ByteFieldType extends NumberFieldType {\n\n    public ByteFieldType(boolean isPrimitive) {\n        super(isPrimitive);\n    }\n\n    @Override\n    public TypeName getTypeName() {\n        return (isPrimitive ? TypeName.BYTE : ClassName.get(Byte.class));\n    }\n\n    @Override\n    public TypeName getNonPrimitiveTypeName() {\n        return ClassName.get(Byte.class);\n    }\n\n    @Override\n    public void parse(Builder builder, int depth, String setter, Object... setterFormatArgs) {\n        if (isPrimitive) {\n            setter = replaceLastLiteral(setter, \"(byte)$L.getValueAsInt()\");\n            builder.addStatement(setter, expandStringArgs(setterFormatArgs, JSON_PARSER_VARIABLE_NAME));\n        } else {\n            setter = replaceLastLiteral(setter, \"$L.getCurrentToken() == $T.VALUE_NULL ? null : Byte.valueOf((byte)$L.getValueAsInt())\");\n            builder.addStatement(setter, expandStringArgs(setterFormatArgs, JSON_PARSER_VARIABLE_NAME, JsonToken.class, JSON_PARSER_VARIABLE_NAME));\n        }\n    }\n}\n"
  },
  {
    "path": "processor/src/main/java/com/bluelinelabs/logansquare/processor/type/field/DoubleFieldType.java",
    "content": "package com.bluelinelabs.logansquare.processor.type.field;\n\nimport com.fasterxml.jackson.core.JsonToken;\nimport com.squareup.javapoet.ClassName;\nimport com.squareup.javapoet.MethodSpec.Builder;\nimport com.squareup.javapoet.TypeName;\n\nimport static com.bluelinelabs.logansquare.processor.ObjectMapperInjector.JSON_PARSER_VARIABLE_NAME;\n\npublic class DoubleFieldType extends NumberFieldType {\n\n    public DoubleFieldType(boolean isPrimitive) {\n        super(isPrimitive);\n    }\n\n    @Override\n    public TypeName getTypeName() {\n        return (isPrimitive ? TypeName.DOUBLE : ClassName.get(Double.class));\n    }\n\n    @Override\n    public TypeName getNonPrimitiveTypeName() {\n        return ClassName.get(Double.class);\n    }\n\n    @Override\n    public void parse(Builder builder, int depth, String setter, Object... setterFormatArgs) {\n        if (isPrimitive) {\n            setter = replaceLastLiteral(setter, \"$L.getValueAsDouble()\");\n            builder.addStatement(setter, expandStringArgs(setterFormatArgs, JSON_PARSER_VARIABLE_NAME));\n        } else {\n            setter = replaceLastLiteral(setter, \"$L.getCurrentToken() == $T.VALUE_NULL ? null : Double.valueOf($L.getValueAsDouble())\");\n            builder.addStatement(setter, expandStringArgs(setterFormatArgs, JSON_PARSER_VARIABLE_NAME, JsonToken.class, JSON_PARSER_VARIABLE_NAME));\n        }\n    }\n}\n"
  },
  {
    "path": "processor/src/main/java/com/bluelinelabs/logansquare/processor/type/field/DynamicFieldType.java",
    "content": "package com.bluelinelabs.logansquare.processor.type.field;\n\nimport com.bluelinelabs.logansquare.LoganSquare;\nimport com.squareup.javapoet.MethodSpec.Builder;\nimport com.squareup.javapoet.TypeName;\n\nimport java.util.List;\nimport java.util.Set;\n\nimport static com.bluelinelabs.logansquare.processor.ObjectMapperInjector.JSON_GENERATOR_VARIABLE_NAME;\nimport static com.bluelinelabs.logansquare.processor.ObjectMapperInjector.JSON_PARSER_VARIABLE_NAME;\n\npublic class DynamicFieldType extends FieldType {\n\n    private TypeName mTypeName;\n\n    public DynamicFieldType(TypeName typeName) {\n        mTypeName = typeName;\n    }\n\n    @Override\n    public TypeName getTypeName() {\n        return mTypeName;\n    }\n\n    @Override\n    public TypeName getNonPrimitiveTypeName() {\n        return mTypeName;\n    }\n\n    @Override\n    public void parse(Builder builder, int depth, String setter, Object... setterFormatArgs) {\n        setter = replaceLastLiteral(setter, \"$T.typeConverterFor($T.class).parse($L)\");\n        builder.addStatement(setter, expandStringArgs(setterFormatArgs, LoganSquare.class, mTypeName, JSON_PARSER_VARIABLE_NAME));\n    }\n\n    @Override\n    public void serialize(Builder builder, int depth, String fieldName, List<String> processedFieldNames, String getter, boolean isObjectProperty, boolean checkIfNull, boolean writeIfNull, boolean writeCollectionElementIfNull) {\n        if (!mTypeName.isPrimitive() && checkIfNull) {\n            builder.beginControlFlow(\"if ($L != null)\", getter);\n        }\n\n        builder.addStatement(\"$T.typeConverterFor($T.class).serialize($L, $S, $L, $L)\", LoganSquare.class, mTypeName, getter, isObjectProperty\n                ? fieldName : null, isObjectProperty, JSON_GENERATOR_VARIABLE_NAME);\n\n        if (!mTypeName.isPrimitive() && checkIfNull) {\n            if (writeIfNull) {\n                builder.nextControlFlow(\"else\");\n\n                if (isObjectProperty) {\n                    builder.addStatement(\"$L.writeFieldName($S)\", JSON_GENERATOR_VARIABLE_NAME, fieldName);\n                }\n                builder.addStatement(\"$L.writeNull()\", JSON_GENERATOR_VARIABLE_NAME);\n            }\n            builder.endControlFlow();\n        }\n    }\n\n    @Override\n    public Set<TypeName> getUsedTypeConverters() {\n        Set<TypeName> set = super.getUsedTypeConverters();\n        set.add(mTypeName);\n        return set;\n    }\n}\n"
  },
  {
    "path": "processor/src/main/java/com/bluelinelabs/logansquare/processor/type/field/FieldType.java",
    "content": "package com.bluelinelabs.logansquare.processor.type.field;\n\nimport com.bluelinelabs.logansquare.annotation.JsonObject;\nimport com.bluelinelabs.logansquare.processor.type.Type;\nimport com.squareup.javapoet.ClassName;\nimport com.squareup.javapoet.TypeName;\n\nimport java.lang.annotation.Annotation;\n\nimport javax.lang.model.type.DeclaredType;\nimport javax.lang.model.type.TypeKind;\nimport javax.lang.model.type.TypeMirror;\nimport javax.lang.model.util.Elements;\nimport javax.lang.model.util.Types;\n\npublic abstract class FieldType extends Type {\n\n    public abstract TypeName getNonPrimitiveTypeName();\n\n    @Override\n    public String getParameterizedTypeString() {\n        return \"$T\";\n    }\n\n    @Override\n    public Object[] getParameterizedTypeStringArgs() {\n        return new Object[] { getNonPrimitiveTypeName() };\n    }\n\n    public static FieldType fieldTypeFor(TypeMirror typeMirror, TypeMirror typeConverterType, Elements elements, Types types) {\n        if (typeMirror != null) {\n            if (typeConverterType != null && !\"void\".equals(typeConverterType.toString())) {\n                return new TypeConverterFieldType(TypeName.get(typeMirror), ClassName.bestGuess(typeConverterType.toString()));\n            } else if (typeMirror.getKind() == TypeKind.BOOLEAN) {\n                return new BooleanFieldType(true);\n            } else if (Boolean.class.getCanonicalName().equals(typeMirror.toString())) {\n                return new BooleanFieldType(false);\n            } else if (typeMirror.getKind() == TypeKind.BYTE) {\n                return new ByteFieldType(true);\n            } else if (Byte.class.getCanonicalName().equals(typeMirror.toString())) {\n                return new ByteFieldType(false);\n            } else if (typeMirror.getKind() == TypeKind.INT) {\n                return new IntegerFieldType(true);\n            } else if (Integer.class.getCanonicalName().equals(typeMirror.toString())) {\n                return new IntegerFieldType(false);\n            } else if (typeMirror.getKind() == TypeKind.LONG) {\n                return new LongFieldType(true);\n            } else if (Long.class.getCanonicalName().equals(typeMirror.toString())) {\n                return new LongFieldType(false);\n            } else if (typeMirror.getKind() == TypeKind.FLOAT) {\n                return new FloatFieldType(true);\n            } else if (Float.class.getCanonicalName().equals(typeMirror.toString())) {\n                return new FloatFieldType(false);\n            } else if (typeMirror.getKind() == TypeKind.DOUBLE) {\n                return new DoubleFieldType(true);\n            } else if (Double.class.getCanonicalName().equals(typeMirror.toString())) {\n                return new DoubleFieldType(false);\n            } else if (String.class.getCanonicalName().equals(typeMirror.toString())) {\n                return new StringFieldType();\n            } else if (Object.class.getCanonicalName().equals(typeMirror.toString())) {\n                return new UnknownFieldType();\n            } else if (typeMirror instanceof DeclaredType) {\n                Annotation annotation = ((DeclaredType) typeMirror).asElement().getAnnotation(JsonObject.class);\n                if (annotation != null) {\n                    return new JsonFieldType(ClassName.bestGuess(typeMirror.toString()));\n                }\n            }\n\n            return new DynamicFieldType(TypeName.get(typeMirror));\n        } else {\n            return null;\n        }\n    }\n\n    protected static String replaceLastLiteral(String string, String replacement) {\n        int pos = string.lastIndexOf(\"$L\");\n        if (pos > -1) {\n            return string.substring(0, pos)\n                    + replacement\n                    + string.substring(pos + 2, string.length());\n        } else {\n            return string;\n        }\n    }\n}\n"
  },
  {
    "path": "processor/src/main/java/com/bluelinelabs/logansquare/processor/type/field/FloatFieldType.java",
    "content": "package com.bluelinelabs.logansquare.processor.type.field;\n\nimport com.fasterxml.jackson.core.JsonToken;\nimport com.squareup.javapoet.ClassName;\nimport com.squareup.javapoet.MethodSpec.Builder;\nimport com.squareup.javapoet.TypeName;\n\nimport static com.bluelinelabs.logansquare.processor.ObjectMapperInjector.JSON_PARSER_VARIABLE_NAME;\n\npublic class FloatFieldType extends NumberFieldType {\n\n    public FloatFieldType(boolean isPrimitive) {\n        super(isPrimitive);\n    }\n\n    @Override\n    public TypeName getTypeName() {\n        return (isPrimitive ? TypeName.FLOAT : ClassName.get(Float.class));\n    }\n\n    @Override\n    public TypeName getNonPrimitiveTypeName() {\n        return ClassName.get(Float.class);\n    }\n\n    @Override\n    public void parse(Builder builder, int depth, String setter, Object... setterFormatArgs) {\n        if (isPrimitive) {\n            setter = replaceLastLiteral(setter, \"(float)$L.getValueAsDouble()\");\n            builder.addStatement(setter, expandStringArgs(setterFormatArgs, JSON_PARSER_VARIABLE_NAME));\n        } else {\n            setter = replaceLastLiteral(setter, \"$L.getCurrentToken() == $T.VALUE_NULL ? null : new Float($L.getValueAsDouble())\");\n            builder.addStatement(setter, expandStringArgs(setterFormatArgs, JSON_PARSER_VARIABLE_NAME, JsonToken.class, JSON_PARSER_VARIABLE_NAME));\n        }\n    }\n}\n"
  },
  {
    "path": "processor/src/main/java/com/bluelinelabs/logansquare/processor/type/field/IntegerFieldType.java",
    "content": "package com.bluelinelabs.logansquare.processor.type.field;\n\nimport com.fasterxml.jackson.core.JsonToken;\nimport com.squareup.javapoet.ClassName;\nimport com.squareup.javapoet.MethodSpec.Builder;\nimport com.squareup.javapoet.TypeName;\n\nimport static com.bluelinelabs.logansquare.processor.ObjectMapperInjector.JSON_PARSER_VARIABLE_NAME;\n\npublic class IntegerFieldType extends NumberFieldType {\n\n    public IntegerFieldType(boolean isPrimitive) {\n        super(isPrimitive);\n    }\n\n    @Override\n    public TypeName getTypeName() {\n        return (isPrimitive ? TypeName.INT : ClassName.get(Integer.class));\n    }\n\n    @Override\n    public TypeName getNonPrimitiveTypeName() {\n        return ClassName.get(Integer.class);\n    }\n\n    @Override\n    public void parse(Builder builder, int depth, String setter, Object... setterFormatArgs) {\n        if (isPrimitive) {\n            setter = replaceLastLiteral(setter, \"$L.getValueAsInt()\");\n            builder.addStatement(setter, expandStringArgs(setterFormatArgs, JSON_PARSER_VARIABLE_NAME));\n        } else {\n            setter = replaceLastLiteral(setter, \"$L.getCurrentToken() == $T.VALUE_NULL ? null : Integer.valueOf($L.getValueAsInt())\");\n            builder.addStatement(setter, expandStringArgs(setterFormatArgs, JSON_PARSER_VARIABLE_NAME, JsonToken.class, JSON_PARSER_VARIABLE_NAME));\n        }\n    }\n}\n"
  },
  {
    "path": "processor/src/main/java/com/bluelinelabs/logansquare/processor/type/field/JsonFieldType.java",
    "content": "package com.bluelinelabs.logansquare.processor.type.field;\n\nimport com.bluelinelabs.logansquare.Constants;\nimport com.bluelinelabs.logansquare.processor.ObjectMapperInjector;\nimport com.squareup.javapoet.ClassName;\nimport com.squareup.javapoet.MethodSpec.Builder;\nimport com.squareup.javapoet.TypeName;\n\nimport java.util.List;\nimport java.util.Set;\n\nimport static com.bluelinelabs.logansquare.processor.ObjectMapperInjector.JSON_GENERATOR_VARIABLE_NAME;\nimport static com.bluelinelabs.logansquare.processor.ObjectMapperInjector.JSON_PARSER_VARIABLE_NAME;\n\npublic class JsonFieldType extends FieldType {\n\n    private final ClassName mClassName;\n    private final String mMapperClassName;\n    private final String mMapperVariableName;\n\n    public JsonFieldType(ClassName className) {\n        mClassName = className;\n        mMapperClassName = mClassName.toString() + Constants.MAPPER_CLASS_SUFFIX;\n        mMapperVariableName = ObjectMapperInjector.getMapperVariableName(mMapperClassName);\n    }\n\n    @Override\n    public TypeName getTypeName() {\n        return mClassName;\n    }\n\n    @Override\n    public TypeName getNonPrimitiveTypeName() {\n        return mClassName;\n    }\n\n    @Override\n    public void parse(Builder builder, int depth, String setter, Object... setterFormatArgs) {\n        setter = replaceLastLiteral(setter, \"$L.parse($L)\");\n        builder.addStatement(setter, expandStringArgs(setterFormatArgs, mMapperVariableName, JSON_PARSER_VARIABLE_NAME));\n    }\n\n    @Override\n    public void serialize(Builder builder, int depth, String fieldName, List<String> processedFieldNames, String getter, boolean isObjectProperty, boolean checkIfNull, boolean writeIfNull, boolean writeCollectionElementIfNull) {\n\n        if (checkIfNull) {\n            builder.beginControlFlow(\"if ($L != null)\", getter);\n        }\n\n        if (isObjectProperty) {\n            builder.addStatement(\"$L.writeFieldName($S)\", JSON_GENERATOR_VARIABLE_NAME, fieldName);\n        }\n\n        builder.addStatement(\"$L.serialize($L, $L, true)\", mMapperVariableName, getter, JSON_GENERATOR_VARIABLE_NAME);\n\n        if (checkIfNull) {\n            if (writeIfNull) {\n                builder.nextControlFlow(\"else\");\n\n                if (isObjectProperty) {\n                    builder.addStatement(\"$L.writeFieldName($S)\", JSON_GENERATOR_VARIABLE_NAME, fieldName);\n                }\n                builder.addStatement(\"$L.writeNull()\", JSON_GENERATOR_VARIABLE_NAME);\n            }\n\n            builder.endControlFlow();\n        }\n    }\n\n    @Override\n    public Set<ClassNameObjectMapper> getUsedJsonObjectMappers() {\n        Set<ClassNameObjectMapper> set = super.getUsedJsonObjectMappers();\n        set.add(new ClassNameObjectMapper(mClassName, mMapperClassName));\n        return set;\n    }\n}\n"
  },
  {
    "path": "processor/src/main/java/com/bluelinelabs/logansquare/processor/type/field/LongFieldType.java",
    "content": "package com.bluelinelabs.logansquare.processor.type.field;\n\nimport com.fasterxml.jackson.core.JsonToken;\nimport com.squareup.javapoet.ClassName;\nimport com.squareup.javapoet.MethodSpec.Builder;\nimport com.squareup.javapoet.TypeName;\n\nimport static com.bluelinelabs.logansquare.processor.ObjectMapperInjector.JSON_PARSER_VARIABLE_NAME;\n\npublic class LongFieldType extends NumberFieldType {\n\n    public LongFieldType(boolean isPrimitive) {\n        super(isPrimitive);\n    }\n\n    @Override\n    public TypeName getTypeName() {\n        return (isPrimitive ? TypeName.LONG : ClassName.get(Long.class));\n    }\n\n    @Override\n    public TypeName getNonPrimitiveTypeName() {\n        return ClassName.get(Long.class);\n    }\n\n    @Override\n    public void parse(Builder builder, int depth, String setter, Object... setterFormatArgs) {\n        if (isPrimitive) {\n            setter = replaceLastLiteral(setter, \"$L.getValueAsLong()\");\n            builder.addStatement(setter, expandStringArgs(setterFormatArgs, JSON_PARSER_VARIABLE_NAME));\n        } else {\n            setter = replaceLastLiteral(setter, \"$L.getCurrentToken() == $T.VALUE_NULL ? null : Long.valueOf($L.getValueAsLong())\");\n            builder.addStatement(setter, expandStringArgs(setterFormatArgs, JSON_PARSER_VARIABLE_NAME, JsonToken.class, JSON_PARSER_VARIABLE_NAME));\n        }\n    }\n}\n"
  },
  {
    "path": "processor/src/main/java/com/bluelinelabs/logansquare/processor/type/field/NumberFieldType.java",
    "content": "package com.bluelinelabs.logansquare.processor.type.field;\n\nimport com.squareup.javapoet.MethodSpec.Builder;\n\nimport java.util.List;\n\nimport static com.bluelinelabs.logansquare.processor.ObjectMapperInjector.JSON_GENERATOR_VARIABLE_NAME;\n\npublic abstract class NumberFieldType extends FieldType {\n\n    protected boolean isPrimitive;\n\n    public NumberFieldType(boolean isPrimitive) {\n        this.isPrimitive = isPrimitive;\n    }\n\n    @Override\n    public void serialize(Builder builder, int depth, String fieldName, List<String> processedFieldNames, String getter, boolean isObjectProperty, boolean checkIfNull, boolean writeIfNull, boolean writeCollectionElementIfNull) {\n        if (!isPrimitive && checkIfNull) {\n            builder.beginControlFlow(\"if ($L != null)\", getter);\n        }\n\n        if (isObjectProperty) {\n            builder.addStatement(\"$L.writeNumberField($S, $L)\", JSON_GENERATOR_VARIABLE_NAME, fieldName, getter);\n        } else {\n            builder.addStatement(\"$L.writeNumber($L)\", JSON_GENERATOR_VARIABLE_NAME, getter);\n        }\n\n        if (!isPrimitive && checkIfNull) {\n            if (writeIfNull) {\n                builder.nextControlFlow(\"else\");\n\n                if (isObjectProperty) {\n                    builder.addStatement(\"$L.writeFieldName($S)\", JSON_GENERATOR_VARIABLE_NAME, fieldName);\n                }\n                builder.addStatement(\"$L.writeNull()\", JSON_GENERATOR_VARIABLE_NAME);\n            }\n\n            builder.endControlFlow();\n        }\n    }\n\n}\n"
  },
  {
    "path": "processor/src/main/java/com/bluelinelabs/logansquare/processor/type/field/ParameterizedTypeField.java",
    "content": "package com.bluelinelabs.logansquare.processor.type.field;\n\nimport com.bluelinelabs.logansquare.processor.type.Type;\nimport com.squareup.javapoet.MethodSpec;\nimport com.squareup.javapoet.MethodSpec.Builder;\nimport com.squareup.javapoet.TypeName;\n\nimport java.util.ArrayList;\nimport java.util.List;\n\nimport static com.bluelinelabs.logansquare.processor.ObjectMapperInjector.JSON_GENERATOR_VARIABLE_NAME;\nimport static com.bluelinelabs.logansquare.processor.ObjectMapperInjector.JSON_PARSER_VARIABLE_NAME;\n\npublic class ParameterizedTypeField extends FieldType {\n\n    private final TypeName mTypeName;\n    private String mJsonMapperVariableName;\n\n    public ParameterizedTypeField(TypeName typeName) {\n        mTypeName = typeName;\n    }\n\n    @Override\n    public void parse(Builder builder, int depth, String setter, Object... setterFormatArgs) {\n        setter = replaceLastLiteral(setter, String.format(\"%s.parse($L)\", mJsonMapperVariableName));\n        builder.addStatement(setter, expandStringArgs(setterFormatArgs, JSON_PARSER_VARIABLE_NAME));\n    }\n\n    @Override\n    public void serialize(Builder builder, int depth, String fieldName, List<String> processedFieldNames, String getter, boolean isObjectProperty, boolean checkIfNull, boolean writeIfNull, boolean writeCollectionElementIfNull) {\n        if (checkIfNull) {\n            builder.beginControlFlow(\"if ($L != null)\", getter);\n        }\n\n        if (isObjectProperty) {\n            builder.addStatement(\"$L.writeFieldName($S)\", JSON_GENERATOR_VARIABLE_NAME, fieldName);\n        }\n        builder.addStatement(\"$L.serialize($L, $L, true)\", mJsonMapperVariableName, getter, JSON_GENERATOR_VARIABLE_NAME);\n\n        if (checkIfNull) {\n            if (writeIfNull) {\n                builder.nextControlFlow(\"else\");\n\n                if (isObjectProperty) {\n                    builder.addStatement(\"$L.writeFieldName($S)\", JSON_GENERATOR_VARIABLE_NAME, fieldName);\n                }\n                builder.addStatement(\"$L.writeNull()\", JSON_GENERATOR_VARIABLE_NAME);\n            }\n            builder.endControlFlow();\n        }\n    }\n\n    @Override\n    public String getParameterizedTypeString() {\n        if (parameterTypes.size() > 0) {\n            StringBuilder string = new StringBuilder(\"$T<\");\n            for (int i = 0; i < parameterTypes.size(); i++) {\n                if (i > 0) {\n                    string.append(\", \");\n                }\n                string.append(parameterTypes.get(i).getParameterizedTypeString());\n            }\n            string.append('>');\n            return string.toString();\n        } else {\n            return \"$T\";\n        }\n    }\n\n    @Override\n    public Object[] getParameterizedTypeStringArgs() {\n        List<Object> args = new ArrayList<>();\n\n        args.add(mTypeName);\n\n        for (Type parameterType : parameterTypes) {\n            args.add(parameterType.getParameterizedTypeStringArgs());\n        }\n\n        return args.toArray(new Object[args.size()]);\n    }\n\n    @Override\n    public TypeName getNonPrimitiveTypeName() {\n        return mTypeName;\n    }\n\n    @Override\n    public TypeName getTypeName() {\n        return mTypeName;\n    }\n\n    public void setJsonMapperVariableName(String jsonMapperVariableName) {\n        mJsonMapperVariableName = jsonMapperVariableName;\n    }\n\n    public String getParameterName() {\n        return mTypeName.toString();\n    }\n}\n"
  },
  {
    "path": "processor/src/main/java/com/bluelinelabs/logansquare/processor/type/field/StringFieldType.java",
    "content": "package com.bluelinelabs.logansquare.processor.type.field;\n\nimport com.squareup.javapoet.ClassName;\nimport com.squareup.javapoet.MethodSpec.Builder;\nimport com.squareup.javapoet.TypeName;\n\nimport java.util.List;\n\nimport static com.bluelinelabs.logansquare.processor.ObjectMapperInjector.JSON_GENERATOR_VARIABLE_NAME;\nimport static com.bluelinelabs.logansquare.processor.ObjectMapperInjector.JSON_PARSER_VARIABLE_NAME;\n\npublic class StringFieldType extends FieldType {\n\n    @Override\n    public TypeName getTypeName() {\n        return ClassName.get(String.class);\n    }\n\n    @Override\n    public TypeName getNonPrimitiveTypeName() {\n        return ClassName.get(String.class);\n    }\n\n    @Override\n    public void parse(Builder builder, int depth, String setter, Object... setterFormatArgs) {\n        setter = replaceLastLiteral(setter, \"$L.getValueAsString(null)\");\n        builder.addStatement(setter, expandStringArgs(setterFormatArgs, JSON_PARSER_VARIABLE_NAME));\n    }\n\n    @Override\n    public void serialize(Builder builder, int depth, String fieldName, List<String> processedFieldNames, String getter, boolean isObjectProperty, boolean checkIfNull, boolean writeIfNull, boolean writeCollectionElementIfNull) {\n        if (checkIfNull) {\n            builder.beginControlFlow(\"if ($L != null)\", getter);\n        }\n\n        if (isObjectProperty) {\n            builder.addStatement(\"$L.writeStringField($S, $L)\", JSON_GENERATOR_VARIABLE_NAME, fieldName, getter);\n        } else {\n            builder.addStatement(\"$L.writeString($L)\", JSON_GENERATOR_VARIABLE_NAME, getter);\n        }\n\n        if (checkIfNull) {\n            if (writeIfNull) {\n                builder.nextControlFlow(\"else\");\n\n                if (isObjectProperty) {\n                    builder.addStatement(\"$L.writeFieldName($S)\", JSON_GENERATOR_VARIABLE_NAME, fieldName);\n                }\n                builder.addStatement(\"$L.writeNull()\", JSON_GENERATOR_VARIABLE_NAME);\n            }\n\n            builder.endControlFlow();\n        }\n    }\n}\n"
  },
  {
    "path": "processor/src/main/java/com/bluelinelabs/logansquare/processor/type/field/TypeConverterFieldType.java",
    "content": "package com.bluelinelabs.logansquare.processor.type.field;\n\nimport com.bluelinelabs.logansquare.processor.ObjectMapperInjector;\nimport com.squareup.javapoet.ClassName;\nimport com.squareup.javapoet.MethodSpec.Builder;\nimport com.squareup.javapoet.TypeName;\n\nimport java.util.List;\n\nimport static com.bluelinelabs.logansquare.processor.ObjectMapperInjector.JSON_GENERATOR_VARIABLE_NAME;\nimport static com.bluelinelabs.logansquare.processor.ObjectMapperInjector.JSON_PARSER_VARIABLE_NAME;\n\npublic class TypeConverterFieldType extends FieldType {\n\n    private TypeName mTypeName;\n    private ClassName mTypeConverter;\n\n    public TypeConverterFieldType(TypeName typeName, ClassName typeConverterClassName) {\n        mTypeName = typeName;\n        mTypeConverter = typeConverterClassName;\n    }\n\n    @Override\n    public TypeName getTypeName() {\n        return mTypeName;\n    }\n\n    @Override\n    public TypeName getNonPrimitiveTypeName() {\n        return mTypeName;\n    }\n\n    public ClassName getTypeConverterClassName() {\n        return mTypeConverter;\n    }\n\n    @Override\n    public void parse(Builder builder, int depth, String setter, Object... setterFormatArgs) {\n        setter = replaceLastLiteral(setter, \"$L.parse($L)\");\n        builder.addStatement(setter, expandStringArgs(setterFormatArgs, ObjectMapperInjector.getStaticFinalTypeConverterVariableName(mTypeConverter), JSON_PARSER_VARIABLE_NAME));\n    }\n\n    @Override\n    public void serialize(Builder builder, int depth, String fieldName, List<String> processedFieldNames, String getter, boolean isObjectProperty, boolean checkIfNull, boolean writeIfNull, boolean writeCollectionElementIfNull) {\n        builder.addStatement(\"$L.serialize($L, $S, $L, $L)\", ObjectMapperInjector.getStaticFinalTypeConverterVariableName(mTypeConverter), getter, fieldName, isObjectProperty, JSON_GENERATOR_VARIABLE_NAME);\n    }\n}\n"
  },
  {
    "path": "processor/src/main/java/com/bluelinelabs/logansquare/processor/type/field/UnknownFieldType.java",
    "content": "package com.bluelinelabs.logansquare.processor.type.field;\n\nimport com.bluelinelabs.logansquare.internal.objectmappers.ObjectMapper;\nimport com.bluelinelabs.logansquare.processor.ObjectMapperInjector;\nimport com.squareup.javapoet.ClassName;\nimport com.squareup.javapoet.MethodSpec.Builder;\nimport com.squareup.javapoet.TypeName;\n\nimport java.util.List;\nimport java.util.Set;\n\nimport static com.bluelinelabs.logansquare.processor.ObjectMapperInjector.JSON_GENERATOR_VARIABLE_NAME;\nimport static com.bluelinelabs.logansquare.processor.ObjectMapperInjector.JSON_PARSER_VARIABLE_NAME;\n\npublic class UnknownFieldType extends FieldType {\n\n    @Override\n    public TypeName getTypeName() {\n        return ClassName.get(Object.class);\n    }\n\n    @Override\n    public TypeName getNonPrimitiveTypeName() {\n        return ClassName.get(Object.class);\n    }\n\n    @Override\n    public void parse(Builder builder, int depth, String setter, Object... setterFormatArgs) {\n        setter = replaceLastLiteral(setter, \"$L.parse($L)\");\n        builder.addStatement(setter, expandStringArgs(setterFormatArgs, ObjectMapperInjector.getMapperVariableName(ObjectMapper.class), JSON_PARSER_VARIABLE_NAME));\n    }\n\n    @Override\n    public void serialize(Builder builder, int depth, String fieldName, List<String> processedFieldNames, String getter, boolean isObjectProperty, boolean checkIfNull, boolean writeIfNull, boolean writeCollectionElementIfNull) {\n        if (checkIfNull) {\n            builder.beginControlFlow(\"if ($L != null)\", getter);\n        }\n\n        builder.addStatement(\"$L.serialize($L, $L, $L)\", ObjectMapperInjector.getMapperVariableName(ObjectMapper.class), getter, JSON_GENERATOR_VARIABLE_NAME, isObjectProperty);\n\n        if (checkIfNull) {\n            if (writeIfNull) {\n                builder.nextControlFlow(\"else\");\n\n                if (isObjectProperty) {\n                    builder.addStatement(\"$L.writeFieldName($S)\", JSON_GENERATOR_VARIABLE_NAME, fieldName);\n                }\n                builder.addStatement(\"$L.writeNull()\", JSON_GENERATOR_VARIABLE_NAME);\n            }\n\n            builder.endControlFlow();\n        }\n    }\n\n    @Override\n    public Set<ClassNameObjectMapper> getUsedJsonObjectMappers() {\n        Set<ClassNameObjectMapper> set = super.getUsedJsonObjectMappers();\n        set.add(new ClassNameObjectMapper(ClassName.get(Object.class), ObjectMapper.class.getCanonicalName()));\n        return set;\n    }\n}\n"
  },
  {
    "path": "processor/src/main/resources/META-INF/services/javax.annotation.processing.Processor",
    "content": "com.bluelinelabs.logansquare.processor.JsonAnnotationProcessor"
  },
  {
    "path": "processor/src/test/java/com/bluelinelabs/logansquare/processor/AbstractParentTest.java",
    "content": "package com.bluelinelabs.logansquare.processor;\n\nimport com.google.testing.compile.JavaFileObjects;\nimport org.junit.Test;\n\nimport static com.google.common.truth.Truth.ASSERT;\nimport static com.google.testing.compile.JavaSourceSubjectFactory.javaSource;\n\npublic class AbstractParentTest {\n\n    @Test\n    public void generatedSource() {\n        ASSERT.about(javaSource())\n                .that(JavaFileObjects.forResource(\"model/good/AbstractParentModel.java\"))\n                .processedWith(new JsonAnnotationProcessor())\n                .compilesWithoutError()\n                .and()\n                .generatesSources(JavaFileObjects.forResource(\"generated/AbstractParentModel$$JsonObjectMapper.java\"));\n    }\n}\n"
  },
  {
    "path": "processor/src/test/java/com/bluelinelabs/logansquare/processor/DateModelTest.java",
    "content": "package com.bluelinelabs.logansquare.processor;\n\nimport com.google.testing.compile.JavaFileObjects;\nimport org.junit.Test;\n\nimport static com.google.common.truth.Truth.ASSERT;\nimport static com.google.testing.compile.JavaSourceSubjectFactory.javaSource;\n\npublic class DateModelTest {\n\n    @Test\n    public void generatedSource() {\n        ASSERT.about(javaSource())\n                .that(JavaFileObjects.forResource(\"model/good/DateModel.java\"))\n                .processedWith(new JsonAnnotationProcessor())\n                .compilesWithoutError()\n                .and()\n                .generatesSources(JavaFileObjects.forResource(\"generated/DateModel$$JsonObjectMapper.java\"));\n    }\n}\n"
  },
  {
    "path": "processor/src/test/java/com/bluelinelabs/logansquare/processor/EnumModelTest.java",
    "content": "package com.bluelinelabs.logansquare.processor;\n\nimport com.google.testing.compile.JavaFileObjects;\nimport org.junit.Test;\n\nimport static com.google.common.truth.Truth.ASSERT;\nimport static com.google.testing.compile.JavaSourceSubjectFactory.javaSource;\n\npublic class EnumModelTest {\n\n    @Test\n    public void generatedSource() {\n        ASSERT.about(javaSource())\n                .that(JavaFileObjects.forResource(\"model/good/EnumModel.java\"))\n                .processedWith(new JsonAnnotationProcessor())\n                .compilesWithoutError()\n                .and()\n                .generatesSources(JavaFileObjects.forResource(\"generated/EnumModel$$JsonObjectMapper.java\"));\n    }\n}\n"
  },
  {
    "path": "processor/src/test/java/com/bluelinelabs/logansquare/processor/LowerCaseNamingPolicyTest.java",
    "content": "package com.bluelinelabs.logansquare.processor;\n\nimport com.google.testing.compile.JavaFileObjects;\nimport org.junit.Test;\n\nimport static com.google.common.truth.Truth.ASSERT;\nimport static com.google.testing.compile.JavaSourceSubjectFactory.javaSource;\n\npublic class LowerCaseNamingPolicyTest {\n\n    @Test\n    public void generatedSource() {\n        ASSERT.about(javaSource())\n                .that(JavaFileObjects.forResource(\"model/good/LowerCaseNamingPolicyModel.java\"))\n                .processedWith(new JsonAnnotationProcessor())\n                .compilesWithoutError()\n                .and()\n                .generatesSources(JavaFileObjects.forResource(\"generated/LowerCaseNamingPolicyModel$$JsonObjectMapper.java\"));\n    }\n}\n"
  },
  {
    "path": "processor/src/test/java/com/bluelinelabs/logansquare/processor/MultipleFieldNamesModelTest.java",
    "content": "package com.bluelinelabs.logansquare.processor;\n\nimport com.google.testing.compile.JavaFileObjects;\nimport org.junit.Test;\n\nimport static com.google.common.truth.Truth.ASSERT;\nimport static com.google.testing.compile.JavaSourceSubjectFactory.javaSource;\n\npublic class MultipleFieldNamesModelTest {\n\n    @Test\n    public void generatedSource() {\n        ASSERT.about(javaSource())\n                .that(JavaFileObjects.forResource(\"model/good/MultipleFieldNamesModel.java\"))\n                .processedWith(new JsonAnnotationProcessor())\n                .compilesWithoutError()\n                .and()\n                .generatesSources(JavaFileObjects.forResource(\"generated/MultipleFieldNamesModel$$JsonObjectMapper.java\"));\n    }\n}\n"
  },
  {
    "path": "processor/src/test/java/com/bluelinelabs/logansquare/processor/NegativeTests.java",
    "content": "package com.bluelinelabs.logansquare.processor;\n\nimport com.google.testing.compile.JavaFileObjects;\nimport org.junit.Test;\n\nimport static com.google.common.truth.Truth.ASSERT;\nimport static com.google.testing.compile.JavaSourceSubjectFactory.javaSource;\n\npublic class NegativeTests {\n\n    @Test\n    public void fieldWithoutObject() {\n        ASSERT.about(javaSource())\n                .that(JavaFileObjects.forResource(\"model/bad/FieldWithoutObjectModel.java\"))\n                .processedWith(new JsonAnnotationProcessor())\n                .failsToCompile()\n                .withErrorContaining(\"@JsonField fields can only be in classes annotated with @JsonObject.\");\n    }\n\n    @Test\n    public void privateField() {\n        ASSERT.about(javaSource())\n                .that(JavaFileObjects.forResource(\"model/bad/PrivateFieldModelWithoutAccessors.java\"))\n                .processedWith(new JsonAnnotationProcessor())\n                .failsToCompile()\n                .withErrorContaining(\"@JsonField annotation can only be used on private fields if both getter and setter are present.\");\n    }\n\n    @Test\n    public void invalidTypeConverter() {\n        ASSERT.about(javaSource())\n                .that(JavaFileObjects.forResource(\"model/bad/InvalidTypeConverterModel.java\"))\n                .processedWith(new JsonAnnotationProcessor())\n                .failsToCompile()\n                .withErrorContaining(\"TypeConverter elements must implement the TypeConverter interface or extend from one of the convenience helpers\");\n    }\n\n    @Test\n    public void methodObject() {\n        ASSERT.about(javaSource())\n                .that(JavaFileObjects.forResource(\"model/bad/MethodWithoutObjectModel.java\"))\n                .processedWith(new JsonAnnotationProcessor())\n                .failsToCompile()\n                .withErrorContaining(\"@OnJsonParseComplete methods can only be in classes annotated with @JsonObject.\");\n    }\n\n    @Test\n    public void methodWithArgs() {\n        ASSERT.about(javaSource())\n                .that(JavaFileObjects.forResource(\"model/bad/MethodWithArgsModel.java\"))\n                .processedWith(new JsonAnnotationProcessor())\n                .failsToCompile()\n                .withErrorContaining(\"@OnJsonParseComplete methods must not take any parameters.\");\n    }\n\n    @Test\n    public void multipleMethods() {\n        ASSERT.about(javaSource())\n                .that(JavaFileObjects.forResource(\"model/bad/MultipleMethodsModel.java\"))\n                .processedWith(new JsonAnnotationProcessor())\n                .failsToCompile()\n                .withErrorContaining(\"There can only be one @OnJsonParseComplete method per class\");\n    }\n}\n"
  },
  {
    "path": "processor/src/test/java/com/bluelinelabs/logansquare/processor/NestedCollectionModelTest.java",
    "content": "package com.bluelinelabs.logansquare.processor;\n\nimport com.google.testing.compile.JavaFileObjects;\nimport org.junit.Test;\n\nimport static com.google.common.truth.Truth.ASSERT;\nimport static com.google.testing.compile.JavaSourceSubjectFactory.javaSource;\n\npublic class NestedCollectionModelTest {\n\n    @Test\n    public void generatedSource() {\n        ASSERT.about(javaSource())\n                .that(JavaFileObjects.forResource(\"model/good/NestedCollectionModel.java\"))\n                .processedWith(new JsonAnnotationProcessor())\n                .compilesWithoutError()\n                .and()\n                .generatesSources(JavaFileObjects.forResource(\"generated/NestedCollectionModel$$JsonObjectMapper.java\"));\n    }\n}\n"
  },
  {
    "path": "processor/src/test/java/com/bluelinelabs/logansquare/processor/NonPrivateFieldsAndAccessorsDetectionPolicyTest.java",
    "content": "package com.bluelinelabs.logansquare.processor;\n\nimport com.google.testing.compile.JavaFileObjects;\nimport org.junit.Test;\n\nimport static com.google.common.truth.Truth.ASSERT;\nimport static com.google.testing.compile.JavaSourceSubjectFactory.javaSource;\n\npublic class NonPrivateFieldsAndAccessorsDetectionPolicyTest {\n\n    @Test\n    public void generatedSource() {\n        ASSERT.about(javaSource())\n                .that(JavaFileObjects.forResource(\"model/good/NonPrivateFieldsAndAccessorsFieldDetectionPolicyModel.java\"))\n                .processedWith(new JsonAnnotationProcessor())\n                .compilesWithoutError()\n                .and()\n                .generatesSources(JavaFileObjects.forResource(\"generated/NonPrivateFieldsAndAccessorsFieldDetectionPolicyModel$$JsonObjectMapper.java\"));\n    }\n}\n"
  },
  {
    "path": "processor/src/test/java/com/bluelinelabs/logansquare/processor/NonPrivateFieldsDetectionPolicyTest.java",
    "content": "package com.bluelinelabs.logansquare.processor;\n\nimport com.google.testing.compile.JavaFileObjects;\nimport org.junit.Test;\n\nimport static com.google.common.truth.Truth.ASSERT;\nimport static com.google.testing.compile.JavaSourceSubjectFactory.javaSource;\n\npublic class NonPrivateFieldsDetectionPolicyTest {\n\n    @Test\n    public void generatedSource() {\n        ASSERT.about(javaSource())\n                .that(JavaFileObjects.forResource(\"model/good/NonPrivateFieldsFieldDetectionPolicyModel.java\"))\n                .processedWith(new JsonAnnotationProcessor())\n                .compilesWithoutError()\n                .and()\n                .generatesSources(JavaFileObjects.forResource(\"generated/NonPrivateFieldsFieldDetectionPolicyModel$$JsonObjectMapper.java\"));\n    }\n}\n"
  },
  {
    "path": "processor/src/test/java/com/bluelinelabs/logansquare/processor/ParentModelTest.java",
    "content": "package com.bluelinelabs.logansquare.processor;\n\nimport com.google.testing.compile.JavaFileObjects;\nimport org.junit.Test;\n\nimport static com.google.common.truth.Truth.ASSERT;\nimport static com.google.testing.compile.JavaSourceSubjectFactory.javaSource;\n\npublic class ParentModelTest {\n\n    @Test\n    public void generatedSource() {\n        ASSERT.about(javaSource())\n                .that(JavaFileObjects.forResource(\"model/good/ParentModel.java\"))\n                .processedWith(new JsonAnnotationProcessor())\n                .compilesWithoutError()\n                .and()\n                .generatesSources(JavaFileObjects.forResource(\"generated/ParentModel$$JsonObjectMapper.java\"));\n    }\n}\n"
  },
  {
    "path": "processor/src/test/java/com/bluelinelabs/logansquare/processor/PrePostProcessingModelTest.java",
    "content": "package com.bluelinelabs.logansquare.processor;\n\nimport com.google.testing.compile.JavaFileObjects;\nimport org.junit.Test;\n\nimport static com.google.common.truth.Truth.ASSERT;\nimport static com.google.testing.compile.JavaSourceSubjectFactory.javaSource;\n\npublic class PrePostProcessingModelTest {\n\n    @Test\n    public void generatedSource() {\n        ASSERT.about(javaSource())\n                .that(JavaFileObjects.forResource(\"model/good/PrePostProcessingModel.java\"))\n                .processedWith(new JsonAnnotationProcessor())\n                .compilesWithoutError()\n                .and()\n                .generatesSources(JavaFileObjects.forResource(\"generated/PrePostProcessingModel$$JsonObjectMapper.java\"));\n    }\n}\n"
  },
  {
    "path": "processor/src/test/java/com/bluelinelabs/logansquare/processor/PrivateFieldModelTest.java",
    "content": "package com.bluelinelabs.logansquare.processor;\n\nimport com.google.testing.compile.JavaFileObjects;\nimport org.junit.Test;\n\nimport static com.google.common.truth.Truth.ASSERT;\nimport static com.google.testing.compile.JavaSourceSubjectFactory.javaSource;\n\npublic class PrivateFieldModelTest {\n\n    @Test\n    public void generatedSource() {\n        ASSERT.about(javaSource())\n                .that(JavaFileObjects.forResource(\"model/good/PrivateFieldModel.java\"))\n                .processedWith(new JsonAnnotationProcessor())\n                .compilesWithoutError()\n                .and()\n                .generatesSources(JavaFileObjects.forResource(\"generated/PrivateFieldModel$$JsonObjectMapper.java\"));\n    }\n}\n"
  },
  {
    "path": "processor/src/test/java/com/bluelinelabs/logansquare/processor/RoundTripTests.java",
    "content": "package com.bluelinelabs.logansquare.processor;\n\nimport com.bluelinelabs.logansquare.LoganSquare;\nimport com.bluelinelabs.logansquare.ParameterizedType;\nimport com.bluelinelabs.logansquare.processor.model.EnumListModel;\nimport com.bluelinelabs.logansquare.processor.model.EnumListModel.LsEnumTestConverter;\nimport com.bluelinelabs.logansquare.processor.model.EnumListModel.TestEnum;\nimport com.bluelinelabs.logansquare.processor.model.ExternalModel;\nimport com.bluelinelabs.logansquare.processor.model.NestedCollectionModel;\nimport com.bluelinelabs.logansquare.processor.model.SimpleGenericModel;\nimport com.bluelinelabs.logansquare.processor.model.SimpleGenericModelWithExtends;\nimport com.bluelinelabs.logansquare.processor.model.SimpleGenericStringModel;\nimport com.bluelinelabs.logansquare.processor.model.SimpleModel;\nimport com.bluelinelabs.logansquare.processor.model.SimpleModelWithGenericField;\nimport com.bluelinelabs.logansquare.processor.model.SimpleModelWithoutNullObjects;\nimport com.bluelinelabs.logansquare.processor.model.TwoParamGenericModel;\nimport com.bluelinelabs.logansquare.processor.model.TwoParamGenericWithStringModel;\n\nimport org.junit.Test;\n\nimport java.util.ArrayList;\nimport java.util.HashMap;\nimport java.util.HashSet;\nimport java.util.List;\nimport java.util.Map;\nimport java.util.Set;\nimport java.util.TreeMap;\nimport java.util.UUID;\n\nimport static com.google.common.truth.Truth.ASSERT;\n\npublic class RoundTripTests {\n\n    @Test\n    public void stringList() {\n        String json = \"[\\\"test1\\\",\\\"test2\\\",\\\"test3\\\",\\\"test4\\\"]\";\n\n        String reserialized = null;\n        try {\n            List<String> list = LoganSquare.parseList(json, String.class);\n            reserialized = LoganSquare.serialize(list, String.class);\n        } catch (Exception ignored) { }\n\n        ASSERT.that(json.equals(reserialized)).isTrue();\n    }\n\n    @Test\n    public void intList() {\n        String json = \"[1,2,3,4,5,6]\";\n\n        String reserialized = null;\n        try {\n            List<Integer> list = LoganSquare.parseList(json, Integer.class);\n            reserialized = LoganSquare.serialize(list, Integer.class);\n        } catch (Exception ignored) { }\n\n        ASSERT.that(json.equals(reserialized)).isTrue();\n    }\n\n    @Test\n    public void floatList() {\n        String json = \"[1.4,2.0,3.0,4.0,5.03,6.2]\";\n\n        String reserialized = null;\n        try {\n            List<Float> list = LoganSquare.parseList(json, Float.class);\n            reserialized = LoganSquare.serialize(list, Float.class);\n        } catch (Exception ignored) { }\n\n        ASSERT.that(json.equals(reserialized)).isTrue();\n    }\n\n    @Test\n    public void booleanList() {\n        String json = \"[true,false,false,false,true]\";\n\n        String reserialized = null;\n        try {\n            List<Boolean> list = LoganSquare.parseList(json, Boolean.class);\n            reserialized = LoganSquare.serialize(list, Boolean.class);\n        } catch (Exception ignored) { }\n\n        ASSERT.that(json.equals(reserialized)).isTrue();\n    }\n\n    @Test\n    public void mixedObjectList() {\n        String json = \"[true,1,1.0,\\\"test1\\\",false,1000,1000000000,\\\"test2\\\",{\\\"subkey1\\\":1,\\\"subkey2\\\":\\\"string\\\"},[1,2,3]]\";\n\n        String reserialized = null;\n        try {\n            List<Object> list = LoganSquare.parseList(json, Object.class);\n            reserialized = LoganSquare.serialize(list, Object.class);\n        } catch (Exception ignored) { }\n\n        ASSERT.that(json.equals(reserialized)).isTrue();\n    }\n\n    @Test\n    public void stringMap() {\n        String json = \"{\\\"key1\\\":\\\"val1\\\",\\\"key2\\\":\\\"val2\\\",\\\"key3\\\":\\\"val3\\\"}\";\n\n        String reserialized = null;\n        try {\n            Map<String, String> map = new TreeMap<>(LoganSquare.parseMap(json, String.class));\n            reserialized = LoganSquare.serialize(map, String.class);\n        } catch (Exception ignored) { }\n\n        ASSERT.that(json.equals(reserialized)).isTrue();\n    }\n\n    @Test\n    public void intMap() {\n        String json = \"{\\\"key1\\\":1,\\\"key2\\\":2,\\\"key3\\\":3}\";\n\n        String reserialized = null;\n        try {\n            Map<String, Integer> map = new TreeMap<>(LoganSquare.parseMap(json, Integer.class));\n            reserialized = LoganSquare.serialize(map, Integer.class);\n        } catch (Exception ignored) { }\n\n        ASSERT.that(json.equals(reserialized)).isTrue();\n    }\n\n    @Test\n    public void floatMap() {\n        String json = \"{\\\"key1\\\":1.4,\\\"key2\\\":2.0,\\\"key3\\\":3.224}\";\n\n        String reserialized = null;\n        try {\n            Map<String, Float> map = new TreeMap<>(LoganSquare.parseMap(json, Float.class));\n            reserialized = LoganSquare.serialize(map, Float.class);\n        } catch (Exception ignored) { }\n\n        ASSERT.that(json.equals(reserialized)).isTrue();\n    }\n\n    @Test\n    public void booleanMap() {\n        String json = \"{\\\"key1\\\":true,\\\"key2\\\":true,\\\"key3\\\":false}\";\n\n        String reserialized = null;\n        try {\n            Map<String, Boolean> map = new TreeMap<>(LoganSquare.parseMap(json, Boolean.class));\n            reserialized = LoganSquare.serialize(map, Boolean.class);\n        } catch (Exception ignored) { }\n\n        ASSERT.that(json.equals(reserialized)).isTrue();\n    }\n\n    @Test\n    public void mixedObjectMap() {\n        String json = \"{\\\"key1\\\":true,\\\"key2\\\":1,\\\"key3\\\":1.02,\\\"key4\\\":1002020,\\\"key5\\\":\\\"test2\\\",\\\"key6\\\":{\\\"subkey1\\\":1,\\\"subkey2\\\":\\\"string\\\"},\\\"key7\\\":[1,2,3]}\";\n\n        String reserialized = null;\n        try {\n            Map<String, Object> map = new TreeMap<>(LoganSquare.parseMap(json, Object.class));\n            reserialized = LoganSquare.serialize(map, Object.class);\n        } catch (Exception ignored) { }\n\n        ASSERT.that(json.equals(reserialized)).isTrue();\n    }\n\n    @Test\n    public void simpleGenericObject() {\n        String json = \"{\\\"date\\\":\\\"2015-02-21T18:45:50.748+0000\\\",\\\"string\\\":\\\"testString\\\",\\\"test_double\\\":342.0,\\\"test_double_obj\\\":345.0,\\\"test_float\\\":898.0,\\\"test_float_obj\\\":382.0,\\\"test_int\\\":32,\\\"test_int_obj\\\":323,\\\"test_long\\\":932,\\\"test_long_obj\\\":3920,\\\"test_nested_generic\\\":{\\\"test_double\\\":0.0,\\\"test_float\\\":0.2,\\\"test_int\\\":10,\\\"test_long\\\":0},\\\"test_string\\\":\\\"anotherTestString\\\",\\\"test_t\\\":\\\"generic string!\\\"}\";\n\n        String reserialized = null;\n        try {\n            ParameterizedType<SimpleGenericModel<String>> parameterizedType = new ParameterizedType<SimpleGenericModel<String>>() { };\n            SimpleGenericModel<String> simpleModel = LoganSquare.parse(json, parameterizedType);\n            reserialized = LoganSquare.serialize(simpleModel, parameterizedType);\n        } catch (Exception ignored) { }\n\n        ASSERT.that(json.equals(reserialized)).isTrue();\n    }\n\n    @Test\n    public void simpleGenericStringObject() {\n        String json = \"{\\\"date\\\":\\\"2015-02-21T18:45:50.748+0000\\\",\\\"string\\\":\\\"testString\\\",\\\"test_double\\\":342.0,\\\"test_double_obj\\\":345.0,\\\"test_float\\\":898.0,\\\"test_float_obj\\\":382.0,\\\"test_int\\\":32,\\\"test_int_obj\\\":323,\\\"test_long\\\":932,\\\"test_long_obj\\\":3920,\\\"test_nested_generic\\\":{\\\"test_double\\\":0.0,\\\"test_float\\\":0.2,\\\"test_int\\\":10,\\\"test_long\\\":0},\\\"test_string\\\":\\\"anotherTestString\\\",\\\"test_t\\\":\\\"generic string!\\\"}\";\n\n        String reserialized = null;\n        try {\n            SimpleGenericStringModel model = LoganSquare.parse(json, SimpleGenericStringModel.class);\n            reserialized = LoganSquare.serialize(model);\n        } catch (Exception ignored) { }\n\n        ASSERT.that(json.equals(reserialized)).isTrue();\n    }\n\n    @Test\n    public void simpleModelWithGenericField() {\n        String json = \"{\\\"generic_model\\\":{\\\"date\\\":\\\"2015-02-21T18:45:50.748+0000\\\",\\\"string\\\":\\\"testString\\\",\\\"test_double\\\":342.0,\\\"test_double_obj\\\":345.0,\\\"test_float\\\":898.0,\\\"test_float_obj\\\":382.0,\\\"test_int\\\":32,\\\"test_int_obj\\\":323,\\\"test_long\\\":932,\\\"test_long_obj\\\":3920,\\\"test_nested_generic\\\":{\\\"test_double\\\":0.0,\\\"test_float\\\":0.2,\\\"test_int\\\":10,\\\"test_long\\\":0},\\\"test_string\\\":\\\"anotherTestString\\\",\\\"test_t\\\":\\\"generic string!\\\"},\\\"string\\\":\\\"hi\\\"}\";\n\n        String reserialized = null;\n        try {\n            SimpleModelWithGenericField model = LoganSquare.parse(json, SimpleModelWithGenericField.class);\n            reserialized = LoganSquare.serialize(model);\n        } catch (Exception ignored) { }\n\n        ASSERT.that(json.equals(reserialized)).isTrue();\n    }\n\n    @Test\n    public void simpleGenericExtendsStringObject() {\n        String json = \"{\\\"date\\\":\\\"2015-02-21T18:45:50.748+0000\\\",\\\"string\\\":\\\"testString\\\",\\\"test_double\\\":342.0,\\\"test_double_obj\\\":345.0,\\\"test_float\\\":898.0,\\\"test_float_obj\\\":382.0,\\\"test_int\\\":32,\\\"test_int_obj\\\":323,\\\"test_long\\\":932,\\\"test_long_obj\\\":3920,\\\"test_string\\\":\\\"anotherTestString\\\",\\\"test_t\\\":\\\"generic string!\\\"}\";\n\n        String reserialized = null;\n        try {\n            ParameterizedType<SimpleGenericModelWithExtends<String>> parameterizedType = new ParameterizedType<SimpleGenericModelWithExtends<String>>() { };\n            SimpleGenericModelWithExtends<String> model = LoganSquare.parse(json, parameterizedType);\n            reserialized = LoganSquare.serialize(model, parameterizedType);\n        } catch (Exception ignored) { }\n\n        ASSERT.that(json.equals(reserialized)).isTrue();\n    }\n\n    @Test\n    public void simpleGenericGenericObject() {\n        String json = \"{\\\"date\\\":\\\"2015-02-21T18:45:50.748+0000\\\",\\\"string\\\":\\\"testString\\\",\\\"test_double\\\":342.0,\\\"test_double_obj\\\":345.0,\\\"test_float\\\":898.0,\\\"test_float_obj\\\":382.0,\\\"test_int\\\":32,\\\"test_int_obj\\\":323,\\\"test_long\\\":932,\\\"test_long_obj\\\":3920,\\\"test_string\\\":\\\"anotherTestString\\\",\\\"test_t\\\":{\\\"date\\\":\\\"2015-02-21T18:45:50.748+0000\\\",\\\"string\\\":\\\"testString\\\",\\\"test_double\\\":342.0,\\\"test_double_obj\\\":345.0,\\\"test_float\\\":898.0,\\\"test_float_obj\\\":382.0,\\\"test_int\\\":32,\\\"test_int_obj\\\":323,\\\"test_long\\\":932,\\\"test_long_obj\\\":3920,\\\"test_string\\\":\\\"anotherTestString\\\",\\\"test_t\\\":\\\"generic string!\\\"}}\";\n\n        String reserialized = null;\n        try {\n            ParameterizedType<SimpleGenericModel<SimpleGenericModel<String>>> parameterizedType = new ParameterizedType<SimpleGenericModel<SimpleGenericModel<String>>>() { };\n            SimpleGenericModel<SimpleGenericModel<String>> simpleModel = LoganSquare.parse(json, parameterizedType);\n            reserialized = LoganSquare.serialize(simpleModel, parameterizedType);\n        } catch (Exception ignored) { }\n\n        ASSERT.that(json.equals(reserialized)).isTrue();\n    }\n\n    @Test\n    public void twoParamGenericModelObject() {\n        String json = \"{\\\"t_list\\\":[\\\"a\\\",\\\"b\\\"],\\\"test_k\\\":1,\\\"test_t\\\":\\\"hello\\\"}\";\n\n        String reserialized = null;\n        try {\n            ParameterizedType<TwoParamGenericModel<String, Integer>> parameterizedType = new ParameterizedType<TwoParamGenericModel<String, Integer>>() { };\n            TwoParamGenericModel<String, Integer> model = LoganSquare.parse(json, parameterizedType);\n            reserialized = LoganSquare.serialize(model, parameterizedType);\n        } catch (Exception ignored) { }\n\n        ASSERT.that(json.equals(reserialized)).isTrue();\n    }\n\n    @Test\n    public void twoParamGenericWithStringModelObject() {\n        String json = \"{\\\"t_list\\\":[\\\"a\\\",\\\"b\\\"],\\\"test_k\\\":1,\\\"test_t\\\":\\\"hello\\\"}\";\n\n        String reserialized = null;\n        try {\n            ParameterizedType<TwoParamGenericWithStringModel<Integer>> parameterizedType = new ParameterizedType<TwoParamGenericWithStringModel<Integer>>() { };\n            TwoParamGenericWithStringModel<Integer> model = LoganSquare.parse(json, parameterizedType);\n            reserialized = LoganSquare.serialize(model, parameterizedType);\n        } catch (Exception ignored) { }\n\n        ASSERT.that(json.equals(reserialized)).isTrue();\n    }\n\n    @Test\n    public void simpleObject() {\n        String json = \"{\\\"date\\\":\\\"2015-02-21T18:45:50.748+0000\\\",\\\"object_map\\\":{\\\"key2\\\":2,\\\"key\\\":\\\"value\\\"},\\\"primitiveByteArray\\\":[1,2,3],\\\"primitiveIntArray\\\":[1,3,5],\\\"string\\\":\\\"testString\\\",\\\"test_double\\\":342.0,\\\"test_double_obj\\\":345.0,\\\"test_float\\\":898.0,\\\"test_float_obj\\\":382.0,\\\"test_int\\\":32,\\\"test_int_obj\\\":323,\\\"test_long\\\":932,\\\"test_long_obj\\\":3920,\\\"test_string\\\":\\\"anotherTestString\\\"}\";\n\n        String reserialized = null;\n        try {\n            SimpleModel simpleModel = LoganSquare.parse(json, SimpleModel.class);\n            reserialized = LoganSquare.serialize(simpleModel);\n        } catch (Exception ignored) { }\n\n        ASSERT.that(json.equals(reserialized)).isTrue();\n    }\n\n    @Test\n    public void externalObject() {\n        String json = \"{\\\"string\\\":\\\"I am a very good string.\\\"}\";\n\n        String reserialized = null;\n        try {\n            ExternalModel simpleModel = LoganSquare.parse(json, ExternalModel.class);\n            reserialized = LoganSquare.serialize(simpleModel);\n        } catch (Exception ignored) { }\n\n        ASSERT.that(json.equals(reserialized)).isTrue();\n    }\n\n    @Test\n    public void enumList() {\n        String json = \"{\\\"enum_array\\\":[\\\"TWO\\\",\\\"ONE\\\"],\\\"enum_list\\\":[\\\"ONE\\\",\\\"TWO\\\",\\\"ONE\\\"],\\\"enum_map\\\":{\\\"key\\\":\\\"ONE\\\"},\\\"enum_obj\\\":\\\"ONE\\\"}\";\n\n        String serialized = null;\n        try {\n            LoganSquare.registerTypeConverter(TestEnum.class, new LsEnumTestConverter());\n            EnumListModel test = LoganSquare.parse(json, EnumListModel.class);\n            serialized = LoganSquare.serialize(test);\n        } catch (Exception ignored) { }\n\n        ASSERT.that(json.equals(serialized)).isTrue();\n    }\n\n    @Test\n    public void simpleObjectList() {\n        String json = \"[{\\\"date\\\":\\\"2015-02-21T18:45:50.748+0000\\\",\\\"string\\\":\\\"testString\\\",\\\"test_double\\\":342.0,\\\"test_double_obj\\\":345.0,\\\"test_float\\\":898.0,\\\"test_float_obj\\\":382.0,\\\"test_int\\\":32,\\\"test_int_obj\\\":323,\\\"test_long\\\":932,\\\"test_long_obj\\\":3920,\\\"test_string\\\":\\\"anotherTestString\\\"},\" +\n                \"{\\\"date\\\":\\\"2015-02-22T18:45:50.748+0000\\\",\\\"string\\\":\\\"testString2\\\",\\\"test_double\\\":342.0,\\\"test_double_obj\\\":345.0,\\\"test_float\\\":898.0,\\\"test_float_obj\\\":382.0,\\\"test_int\\\":32,\\\"test_int_obj\\\":323,\\\"test_long\\\":932,\\\"test_long_obj\\\":3920,\\\"test_string\\\":\\\"anotherTestString\\\"}]\";\n\n        String reserialized = null;\n        try {\n            List<SimpleModel> simpleModels = LoganSquare.parseList(json, SimpleModel.class);\n            reserialized = LoganSquare.serialize(simpleModels, SimpleModel.class);\n        } catch (Exception ignored) { }\n\n        ASSERT.that(json.equals(reserialized)).isTrue();\n    }\n\n    @Test\n    public void simpleObjectListWithNulls() {\n        String json = \"[{\\\"date\\\":\\\"2015-02-21T18:45:50.748+0000\\\",\\\"string\\\":\\\"testString\\\",\\\"test_double\\\":342.0,\\\"test_double_obj\\\":345.0,\\\"test_float\\\":898.0,\\\"test_float_obj\\\":382.0,\\\"test_int\\\":32,\\\"test_int_obj\\\":323,\\\"test_long\\\":932,\\\"test_long_obj\\\":3920,\\\"test_string\\\":\\\"anotherTestString\\\"},\" +\n                \"{\\\"date\\\":\\\"2015-02-22T18:45:50.748+0000\\\",\\\"string\\\":\\\"testString2\\\",\\\"test_double\\\":342.0,\\\"test_double_obj\\\":345.0,\\\"test_float\\\":898.0,\\\"test_float_obj\\\":382.0,\\\"test_int\\\":32,\\\"test_int_obj\\\":323,\\\"test_long\\\":932,\\\"test_long_obj\\\":3920,\\\"test_string\\\":\\\"anotherTestString\\\"},\" +\n                \"{\\\"date\\\":null,\\\"string\\\":\\\"testString2\\\",\\\"test_double\\\":342.0,\\\"test_double_obj\\\":null,\\\"test_float\\\":898.0,\\\"test_float_obj\\\":null,\\\"test_int\\\":32,\\\"test_int_obj\\\":null,\\\"test_long\\\":932,\\\"test_long_obj\\\":null,\\\"test_string\\\":null},\" +\n                \"null,\" +\n                \"null]\";\n\n        String reserialized = null;\n        try {\n            List<SimpleModel> simpleModels = LoganSquare.parseList(json, SimpleModel.class);\n            reserialized = LoganSquare.serialize(simpleModels, SimpleModel.class);\n        } catch (Exception ignored) { }\n\n        ASSERT.that(json.equals(reserialized)).isTrue();\n    }\n\n    @Test\n    public void simpleObjectMap() {\n        String json = \"{\\\"obj1\\\":{\\\"date\\\":\\\"2015-02-21T18:45:50.748+0000\\\",\\\"string\\\":\\\"testString\\\",\\\"test_double\\\":342.0,\\\"test_double_obj\\\":345.0,\\\"test_float\\\":898.0,\\\"test_float_obj\\\":382.0,\\\"test_int\\\":32,\\\"test_int_obj\\\":323,\\\"test_long\\\":932,\\\"test_long_obj\\\":3920,\\\"test_string\\\":\\\"anotherTestString\\\"},\" +\n                \"\\\"obj2\\\":{\\\"date\\\":\\\"2015-02-22T18:45:50.748+0000\\\",\\\"string\\\":\\\"testString2\\\",\\\"test_double\\\":342.0,\\\"test_double_obj\\\":345.0,\\\"test_float\\\":898.0,\\\"test_float_obj\\\":382.0,\\\"test_int\\\":32,\\\"test_int_obj\\\":323,\\\"test_long\\\":932,\\\"test_long_obj\\\":3920,\\\"test_string\\\":\\\"anotherTestString\\\"}}\";\n\n        String reserialized = null;\n        try {\n            Map<String, SimpleModel> simpleModelMap = new TreeMap<>(LoganSquare.parseMap(json, SimpleModel.class));\n            reserialized = LoganSquare.serialize(simpleModelMap, SimpleModel.class);\n        } catch (Exception ignored) { }\n\n        ASSERT.that(json.equals(reserialized)).isTrue();\n    }\n\n    @Test\n    public void simpleObjectMapWithNulls() {\n        String json = \"{\\\"obj1\\\":{\\\"date\\\":\\\"2015-02-21T18:45:50.748+0000\\\",\\\"string\\\":\\\"testString\\\",\\\"test_double\\\":342.0,\\\"test_double_obj\\\":345.0,\\\"test_float\\\":898.0,\\\"test_float_obj\\\":382.0,\\\"test_int\\\":32,\\\"test_int_obj\\\":323,\\\"test_long\\\":932,\\\"test_long_obj\\\":3920,\\\"test_string\\\":\\\"anotherTestString\\\"},\" +\n                \"\\\"obj2\\\":{\\\"date\\\":\\\"2015-02-22T18:45:50.748+0000\\\",\\\"string\\\":\\\"testString2\\\",\\\"test_double\\\":342.0,\\\"test_double_obj\\\":345.0,\\\"test_float\\\":898.0,\\\"test_float_obj\\\":382.0,\\\"test_int\\\":32,\\\"test_int_obj\\\":323,\\\"test_long\\\":932,\\\"test_long_obj\\\":3920,\\\"test_string\\\":\\\"anotherTestString\\\"},\" +\n                \"\\\"obj3\\\":{\\\"date\\\":null,\\\"string\\\":\\\"testString2\\\",\\\"test_double\\\":342.0,\\\"test_double_obj\\\":null,\\\"test_float\\\":898.0,\\\"test_float_obj\\\":null,\\\"test_int\\\":32,\\\"test_int_obj\\\":null,\\\"test_long\\\":932,\\\"test_long_obj\\\":null,\\\"test_string\\\":null},\" +\n                \"\\\"obj4\\\":null}\";\n\n        String reserialized = null;\n        try {\n            Map<String, SimpleModel> simpleModelMap = LoganSquare.parseMap(json, SimpleModel.class);\n            TreeMap<String, SimpleModel> sortedMap = new TreeMap<>();\n            sortedMap.put(\"obj1\", simpleModelMap.get(\"obj1\"));\n            sortedMap.put(\"obj2\", simpleModelMap.get(\"obj2\"));\n            sortedMap.put(\"obj3\", simpleModelMap.get(\"obj3\"));\n            sortedMap.put(\"obj4\", simpleModelMap.get(\"obj4\"));\n\n            reserialized = LoganSquare.serialize(sortedMap, SimpleModel.class);\n        } catch (Exception ignored) { }\n\n        ASSERT.that(json.equals(reserialized)).isTrue();\n    }\n\n    @Test\n    public void simpleObjectMapWithoutNulls() {\n        String json = \"{\\\"obj1\\\":{\\\"date\\\":\\\"2015-02-21T18:45:50.748+0000\\\",\\\"string\\\":\\\"testString\\\",\\\"test_double\\\":342.0,\\\"test_double_obj\\\":345.0,\\\"test_float\\\":898.0,\\\"test_float_obj\\\":382.0,\\\"test_int\\\":32,\\\"test_int_obj\\\":323,\\\"test_long\\\":932,\\\"test_long_obj\\\":3920,\\\"test_string\\\":\\\"anotherTestString\\\"},\" +\n                \"\\\"obj2\\\":{\\\"date\\\":\\\"2015-02-22T18:45:50.748+0000\\\",\\\"string\\\":\\\"testString2\\\",\\\"test_double\\\":342.0,\\\"test_double_obj\\\":345.0,\\\"test_float\\\":898.0,\\\"test_float_obj\\\":382.0,\\\"test_int\\\":32,\\\"test_int_obj\\\":323,\\\"test_long\\\":932,\\\"test_long_obj\\\":3920,\\\"test_string\\\":\\\"anotherTestString\\\"},\" +\n                \"\\\"obj3\\\":{\\\"string\\\":\\\"testString2\\\",\\\"test_double\\\":342.0,\\\"test_float\\\":898.0,\\\"test_int\\\":32,\\\"test_long\\\":932},\" +\n                \"\\\"obj4\\\":null}\";\n\n        String reserialized = null;\n        try {\n            Map<String, SimpleModelWithoutNullObjects> simpleModelMap = LoganSquare.parseMap(json, SimpleModelWithoutNullObjects.class);\n            TreeMap<String, SimpleModelWithoutNullObjects> sortedMap = new TreeMap<>();\n            sortedMap.put(\"obj1\", simpleModelMap.get(\"obj1\"));\n            sortedMap.put(\"obj2\", simpleModelMap.get(\"obj2\"));\n            sortedMap.put(\"obj3\", simpleModelMap.get(\"obj3\"));\n            sortedMap.put(\"obj4\", simpleModelMap.get(\"obj4\"));\n\n            reserialized = LoganSquare.serialize(sortedMap, SimpleModelWithoutNullObjects.class);\n        } catch (Exception ignored) { }\n\n        ASSERT.that(json.equals(reserialized)).isTrue();\n    }\n\n    @SuppressWarnings(\"unchecked\")\n    @Test\n    public void nestedCollection() {\n        List<ArrayList<Set<Map<String, List<String>>>>>[] array = (List<ArrayList<Set<Map<String, List<String>>>>>[])new List<?>[] {getStringListMapSetArrayListList() };\n\n        NestedCollectionModel model = new NestedCollectionModel();\n        model.crazyCollection = array;\n\n        String json = null;\n        try {\n            json = LoganSquare.serialize(model);\n        } catch (Exception e) {\n            e.printStackTrace();\n        }\n\n        ASSERT.that(json).isNotNull();\n\n        NestedCollectionModel reconstructedModel = null;\n        try {\n            reconstructedModel = LoganSquare.parse(json, NestedCollectionModel.class);\n        } catch (Exception ignored) { }\n\n        // Comparing the json doesn't work so well on arrays, since they could be reordered. We'll compare the output instead.\n        ASSERT.that(model.equals(reconstructedModel)).isTrue();\n    }\n\n    private List<String> getStringList() {\n        List<String> list = new ArrayList<>();\n        list.add(UUID.randomUUID().toString());\n        list.add(UUID.randomUUID().toString());\n        return list;\n    }\n\n    private Map<String, List<String>> getStringListMap() {\n        Map<String, List<String>> map = new HashMap<>();\n        map.put(UUID.randomUUID().toString(), getStringList());\n        map.put(UUID.randomUUID().toString(), getStringList());\n        return map;\n    }\n\n    private Set<Map<String, List<String>>> getStringListMapSet() {\n        Set<Map<String, List<String>>> set = new HashSet<>();\n        set.add(getStringListMap());\n        set.add(getStringListMap());\n        set.add(getStringListMap());\n        return set;\n    }\n\n    private ArrayList<Set<Map<String, List<String>>>> getStringListMapSetArrayList() {\n        ArrayList<Set<Map<String, List<String>>>> list = new ArrayList<>();\n        list.add(getStringListMapSet());\n        list.add(getStringListMapSet());\n        return list;\n    }\n\n    private List<ArrayList<Set<Map<String, List<String>>>>> getStringListMapSetArrayListList() {\n        List<ArrayList<Set<Map<String, List<String>>>>> list = new ArrayList<>();\n        list.add(getStringListMapSetArrayList());\n        list.add(getStringListMapSetArrayList());\n        return list;\n    }\n}\n"
  },
  {
    "path": "processor/src/test/java/com/bluelinelabs/logansquare/processor/SimpleCollectionModelTest.java",
    "content": "package com.bluelinelabs.logansquare.processor;\n\nimport com.google.testing.compile.JavaFileObjects;\nimport org.junit.Test;\n\nimport static com.google.common.truth.Truth.ASSERT;\nimport static com.google.testing.compile.JavaSourceSubjectFactory.javaSource;\n\npublic class SimpleCollectionModelTest {\n\n    @Test\n    public void generatedSource() {\n        ASSERT.about(javaSource())\n                .that(JavaFileObjects.forResource(\"model/good/SimpleCollectionModel.java\"))\n                .processedWith(new JsonAnnotationProcessor())\n                .compilesWithoutError()\n                .and()\n                .generatesSources(JavaFileObjects.forResource(\"generated/SimpleCollectionModel$$JsonObjectMapper.java\"));\n    }\n}\n"
  },
  {
    "path": "processor/src/test/java/com/bluelinelabs/logansquare/processor/SimpleGenericExtendsStringModelTest.java",
    "content": "package com.bluelinelabs.logansquare.processor;\n\nimport com.google.testing.compile.JavaFileObjects;\n\nimport org.junit.Test;\n\nimport static com.google.common.truth.Truth.ASSERT;\nimport static com.google.testing.compile.JavaSourceSubjectFactory.javaSource;\n\npublic class SimpleGenericExtendsStringModelTest {\n\n    @Test\n    public void generatedSource() {\n        ASSERT.about(javaSource())\n                .that(JavaFileObjects.forResource(\"model/good/SimpleGenericModelWithExtends.java\"))\n                .processedWith(new JsonAnnotationProcessor())\n                .compilesWithoutError()\n                .and()\n                .generatesSources(JavaFileObjects.forResource(\"generated/SimpleGenericModelWithExtends$$JsonObjectMapper.java\"));\n    }\n}\n"
  },
  {
    "path": "processor/src/test/java/com/bluelinelabs/logansquare/processor/SimpleGenericModelTest.java",
    "content": "package com.bluelinelabs.logansquare.processor;\n\nimport com.google.testing.compile.JavaFileObjects;\n\nimport org.junit.Test;\n\nimport static com.google.common.truth.Truth.ASSERT;\nimport static com.google.testing.compile.JavaSourceSubjectFactory.javaSource;\n\npublic class SimpleGenericModelTest {\n\n    @Test\n    public void generatedSource() {\n        ASSERT.about(javaSource())\n                .that(JavaFileObjects.forResource(\"model/good/SimpleGenericModel.java\"))\n                .processedWith(new JsonAnnotationProcessor())\n                .compilesWithoutError()\n                .and()\n                .generatesSources(JavaFileObjects.forResource(\"generated/SimpleGenericModel$$JsonObjectMapper.java\"));\n    }\n}\n"
  },
  {
    "path": "processor/src/test/java/com/bluelinelabs/logansquare/processor/SimpleModelTest.java",
    "content": "package com.bluelinelabs.logansquare.processor;\n\nimport com.google.testing.compile.JavaFileObjects;\n\nimport org.junit.Test;\n\nimport static com.google.common.truth.Truth.ASSERT;\nimport static com.google.testing.compile.JavaSourceSubjectFactory.javaSource;\n\npublic class SimpleModelTest {\n\n    @Test\n    public void generatedSource() {\n        ASSERT.about(javaSource())\n                .that(JavaFileObjects.forResource(\"model/good/SimpleModel.java\"))\n                .processedWith(new JsonAnnotationProcessor())\n                .compilesWithoutError()\n                .and()\n                .generatesSources(JavaFileObjects.forResource(\"generated/SimpleModel$$JsonObjectMapper.java\"));\n    }\n}\n"
  },
  {
    "path": "processor/src/test/java/com/bluelinelabs/logansquare/processor/SimpleWrapperModelTest.java",
    "content": "package com.bluelinelabs.logansquare.processor;\n\nimport com.bluelinelabs.logansquare.annotation.JsonField;\nimport com.bluelinelabs.logansquare.annotation.JsonObject;\nimport com.google.testing.compile.JavaFileObjects;\nimport org.junit.Test;\n\nimport static com.google.common.truth.Truth.ASSERT;\nimport static com.google.testing.compile.JavaSourceSubjectFactory.javaSource;\n\npublic class SimpleWrapperModelTest {\n\n    @Test\n    public void generatedSource() {\n        ASSERT.about(javaSource())\n                .that(JavaFileObjects.forResource(\"model/good/SimpleWrapperModel.java\"))\n                .processedWith(new JsonAnnotationProcessor())\n                .compilesWithoutError()\n                .and()\n                .generatesSources(JavaFileObjects.forResource(\"generated/SimpleWrapperModel$$JsonObjectMapper.java\"));\n    }\n}\n"
  },
  {
    "path": "processor/src/test/java/com/bluelinelabs/logansquare/processor/WhitespaceFieldNameModelTest.java",
    "content": "package com.bluelinelabs.logansquare.processor;\n\nimport com.google.testing.compile.JavaFileObjects;\nimport org.junit.Test;\n\nimport static com.google.common.truth.Truth.ASSERT;\nimport static com.google.testing.compile.JavaSourceSubjectFactory.javaSource;\n\npublic class WhitespaceFieldNameModelTest {\n\n    @Test\n    public void generatedSource() {\n        ASSERT.about(javaSource())\n                .that(JavaFileObjects.forResource(\"model/good/WhitespaceFieldNameModel.java\"))\n                .processedWith(new JsonAnnotationProcessor())\n                .compilesWithoutError()\n                .and()\n                .generatesSources(JavaFileObjects.forResource(\"generated/WhitespaceFieldNameModel$$JsonObjectMapper.java\"));\n    }\n}\n"
  },
  {
    "path": "processor/src/test/java/com/bluelinelabs/logansquare/processor/model/EnumListModel.java",
    "content": "package com.bluelinelabs.logansquare.processor.model;\n\nimport com.bluelinelabs.logansquare.annotation.JsonField;\nimport com.bluelinelabs.logansquare.annotation.JsonObject;\nimport com.bluelinelabs.logansquare.typeconverters.StringBasedTypeConverter;\n\nimport java.util.List;\nimport java.util.Map;\n\n@JsonObject\npublic class EnumListModel {\n\n    public enum TestEnum {\n        ONE, TWO\n    }\n\n    @JsonField(name = \"enum_obj\")\n    TestEnum enumObj;\n\n    @JsonField(name = \"enum_list\")\n    List<TestEnum> enumList;\n\n    @JsonField(name = \"enum_array\")\n    TestEnum[] enumArray;\n\n    @JsonField(name = \"enum_map\")\n    Map<String, TestEnum> enumMap;\n\n    public static class LsEnumTestConverter extends StringBasedTypeConverter<TestEnum> {\n        @Override\n        public TestEnum getFromString(String string) {\n            return TestEnum.valueOf(string);\n        }\n\n        @Override\n        public String convertToString(TestEnum testEnum) {\n            return testEnum.toString();\n        }\n    }\n}"
  },
  {
    "path": "processor/src/test/java/com/bluelinelabs/logansquare/processor/model/ExternalModel$$JsonObjectMapper.java",
    "content": "package com.bluelinelabs.logansquare.processor.model;\n\nimport com.bluelinelabs.logansquare.JsonMapper;\nimport com.fasterxml.jackson.core.JsonGenerator;\nimport com.fasterxml.jackson.core.JsonParser;\nimport com.fasterxml.jackson.core.JsonToken;\nimport java.io.IOException;\nimport java.lang.Override;\nimport java.lang.String;\nimport java.lang.SuppressWarnings;\n\n@SuppressWarnings(\"unsafe,unchecked\")\npublic final class ExternalModel$$JsonObjectMapper extends JsonMapper<ExternalModel> {\n  @Override\n  public ExternalModel parse(JsonParser jsonParser) throws IOException {\n    ExternalModel instance = new ExternalModel();\n    if (jsonParser.getCurrentToken() == null) {\n      jsonParser.nextToken();\n    }\n    if (jsonParser.getCurrentToken() != JsonToken.START_OBJECT) {\n      jsonParser.skipChildren();\n      return null;\n    }\n    while (jsonParser.nextToken() != JsonToken.END_OBJECT) {\n      String fieldName = jsonParser.getCurrentName();\n      jsonParser.nextToken();\n      parseField(instance, fieldName, jsonParser);\n      jsonParser.skipChildren();\n    }\n    return instance;\n  }\n\n  @Override\n  public void parseField(ExternalModel instance, String fieldName, JsonParser jsonParser) throws IOException {\n    if (\"string\".equals(fieldName)) {\n      instance.string = jsonParser.getValueAsString(null);\n    }\n  }\n\n  @Override\n  public void serialize(ExternalModel object, JsonGenerator jsonGenerator, boolean writeStartAndEnd) throws IOException {\n    if (writeStartAndEnd) {\n      jsonGenerator.writeStartObject();\n    }\n    if (object.string != null) {\n      jsonGenerator.writeStringField(\"string\", object.string);\n    } else {\n      jsonGenerator.writeFieldName(\"string\");\n      jsonGenerator.writeNull();\n    }\n    if (writeStartAndEnd) {\n      jsonGenerator.writeEndObject();\n    }\n  }\n}\n"
  },
  {
    "path": "processor/src/test/java/com/bluelinelabs/logansquare/processor/model/ExternalModel.java",
    "content": "package com.bluelinelabs.logansquare.processor.model;\n\n// Note: intentionally not annotated so we can test loading external JsonObjectMappers\npublic class ExternalModel {\n\n    public String string;\n\n}\n"
  },
  {
    "path": "processor/src/test/java/com/bluelinelabs/logansquare/processor/model/NestedCollectionModel.java",
    "content": "package com.bluelinelabs.logansquare.processor.model;\n\nimport com.bluelinelabs.logansquare.annotation.JsonField;\nimport com.bluelinelabs.logansquare.annotation.JsonObject;\n\nimport java.util.ArrayList;\nimport java.util.Arrays;\nimport java.util.Date;\nimport java.util.List;\nimport java.util.Map;\nimport java.util.Set;\n\n@JsonObject\npublic class NestedCollectionModel {\n\n    @JsonField\n    public List<ArrayList<Set<Map<String, List<String>>>>>[] crazyCollection;\n\n    @Override\n    public boolean equals(Object o) {\n        if (this == o) {\n            return true;\n        } else if (o == null || getClass() != o.getClass()) {\n            return false;\n        }\n\n        return Arrays.equals(crazyCollection, ((NestedCollectionModel)o).crazyCollection);\n\n    }\n\n    @Override\n    public int hashCode() {\n        return crazyCollection != null ? Arrays.hashCode(crazyCollection) : 0;\n    }\n}\n"
  },
  {
    "path": "processor/src/test/java/com/bluelinelabs/logansquare/processor/model/SimpleExtendedModel.java",
    "content": "package com.bluelinelabs.logansquare.processor.model;\n\nimport com.bluelinelabs.logansquare.annotation.JsonField;\nimport com.bluelinelabs.logansquare.annotation.JsonObject;\n\n@JsonObject\npublic class SimpleExtendedModel extends SimpleModel {\n\n    @JsonField\n    public int extendedInt;\n\n}\n"
  },
  {
    "path": "processor/src/test/java/com/bluelinelabs/logansquare/processor/model/SimpleGenericModel.java",
    "content": "package com.bluelinelabs.logansquare.processor.model;\n\nimport com.bluelinelabs.logansquare.annotation.JsonField;\nimport com.bluelinelabs.logansquare.annotation.JsonObject;\n\nimport java.util.Date;\n\n@JsonObject\npublic class SimpleGenericModel<T> {\n\n    @JsonField\n    public String string;\n\n    @JsonField\n    public Date date;\n\n    @JsonField(name = \"test_int\")\n    public int testInt;\n\n    @JsonField(name = \"test_long\")\n    public long testLong;\n\n    @JsonField(name = \"test_float\")\n    public float testFloat;\n\n    @JsonField(name = \"test_double\")\n    public double testDouble;\n\n    @JsonField(name = \"test_string\")\n    public String testString;\n\n    @JsonField(name = \"test_int_obj\")\n    public Integer testIntObj;\n\n    @JsonField(name = \"test_long_obj\")\n    public Long testLongObj;\n\n    @JsonField(name = \"test_float_obj\")\n    public Float testFloatObj;\n\n    @JsonField(name = \"test_double_obj\")\n    public Double testDoubleObj;\n\n    @JsonField(name = \"test_t\")\n    public T testT;\n\n    @JsonField(name = \"test_nested_generic\")\n    public SimpleGenericModel<String> testNestedGeneric;\n\n}\n"
  },
  {
    "path": "processor/src/test/java/com/bluelinelabs/logansquare/processor/model/SimpleGenericModelWithExtends.java",
    "content": "package com.bluelinelabs.logansquare.processor.model;\n\nimport com.bluelinelabs.logansquare.annotation.JsonField;\nimport com.bluelinelabs.logansquare.annotation.JsonObject;\n\nimport java.util.Date;\n\n@JsonObject\npublic class SimpleGenericModelWithExtends<T extends String> {\n\n    @JsonField\n    public String string;\n\n    @JsonField\n    public Date date;\n\n    @JsonField(name = \"test_int\")\n    public int testInt;\n\n    @JsonField(name = \"test_long\")\n    public long testLong;\n\n    @JsonField(name = \"test_float\")\n    public float testFloat;\n\n    @JsonField(name = \"test_double\")\n    public double testDouble;\n\n    @JsonField(name = \"test_string\")\n    public String testString;\n\n    @JsonField(name = \"test_int_obj\")\n    public Integer testIntObj;\n\n    @JsonField(name = \"test_long_obj\")\n    public Long testLongObj;\n\n    @JsonField(name = \"test_float_obj\")\n    public Float testFloatObj;\n\n    @JsonField(name = \"test_double_obj\")\n    public Double testDoubleObj;\n\n    @JsonField(name = \"test_t\")\n    public T testT;\n\n}\n"
  },
  {
    "path": "processor/src/test/java/com/bluelinelabs/logansquare/processor/model/SimpleGenericStringModel.java",
    "content": "package com.bluelinelabs.logansquare.processor.model;\n\nimport com.bluelinelabs.logansquare.annotation.JsonField;\nimport com.bluelinelabs.logansquare.annotation.JsonObject;\n\n@JsonObject\npublic class SimpleGenericStringModel extends SimpleGenericModel<String> {\n\n    @JsonField\n    public String anotherString;\n\n}\n"
  },
  {
    "path": "processor/src/test/java/com/bluelinelabs/logansquare/processor/model/SimpleModel.java",
    "content": "package com.bluelinelabs.logansquare.processor.model;\n\nimport com.bluelinelabs.logansquare.annotation.JsonField;\nimport com.bluelinelabs.logansquare.annotation.JsonObject;\n\nimport java.util.Date;\nimport java.util.Map;\n\n@JsonObject(serializeNullObjects = true)\npublic class SimpleModel {\n\n    @JsonField\n    public byte[] primitiveByteArray;\n\n    @JsonField\n    public int[] primitiveIntArray;\n\n    @JsonField\n    public String string;\n\n    @JsonField\n    public Date date;\n\n    @JsonField(name = \"test_int\")\n    public int testInt;\n\n    @JsonField(name = \"test_long\")\n    public long testLong;\n\n    @JsonField(name = \"test_float\")\n    public float testFloat;\n\n    @JsonField(name = \"test_double\")\n    public double testDouble;\n\n    @JsonField(name = \"test_string\")\n    public String testString;\n\n    @JsonField(name = \"test_int_obj\")\n    public Integer testIntObj;\n\n    @JsonField(name = \"test_long_obj\")\n    public Long testLongObj;\n\n    @JsonField(name = \"test_float_obj\")\n    public Float testFloatObj;\n\n    @JsonField(name = \"test_double_obj\")\n    public Double testDoubleObj;\n\n    @JsonField(name = \"object_map\")\n    public Map<String, Object> objectMap;\n}\n"
  },
  {
    "path": "processor/src/test/java/com/bluelinelabs/logansquare/processor/model/SimpleModelWithGenericField.java",
    "content": "package com.bluelinelabs.logansquare.processor.model;\n\nimport com.bluelinelabs.logansquare.annotation.JsonField;\nimport com.bluelinelabs.logansquare.annotation.JsonObject;\nimport com.bluelinelabs.logansquare.annotation.JsonObject.FieldNamingPolicy;\n\n@JsonObject(serializeNullObjects = true, fieldNamingPolicy = FieldNamingPolicy.LOWER_CASE_WITH_UNDERSCORES)\npublic class SimpleModelWithGenericField {\n\n    @JsonField\n    public String string;\n\n    @JsonField\n    public SimpleGenericModel<String> genericModel;\n\n}\n"
  },
  {
    "path": "processor/src/test/java/com/bluelinelabs/logansquare/processor/model/SimpleModelWithoutNullObjects.java",
    "content": "package com.bluelinelabs.logansquare.processor.model;\n\nimport com.bluelinelabs.logansquare.annotation.JsonField;\nimport com.bluelinelabs.logansquare.annotation.JsonObject;\n\nimport java.util.Date;\n\n@JsonObject\npublic class SimpleModelWithoutNullObjects {\n\n    @JsonField\n    public String string;\n\n    @JsonField\n    public Date date;\n\n    @JsonField(name = \"test_int\")\n    public int testInt;\n\n    @JsonField(name = \"test_long\")\n    public long testLong;\n\n    @JsonField(name = \"test_float\")\n    public float testFloat;\n\n    @JsonField(name = \"test_double\")\n    public double testDouble;\n\n    @JsonField(name = \"test_string\")\n    public String testString;\n\n    @JsonField(name = \"test_int_obj\")\n    public Integer testIntObj;\n\n    @JsonField(name = \"test_long_obj\")\n    public Long testLongObj;\n\n    @JsonField(name = \"test_float_obj\")\n    public Float testFloatObj;\n\n    @JsonField(name = \"test_double_obj\")\n    public Double testDoubleObj;\n}\n"
  },
  {
    "path": "processor/src/test/java/com/bluelinelabs/logansquare/processor/model/TwoParamGenericModel.java",
    "content": "package com.bluelinelabs.logansquare.processor.model;\n\nimport com.bluelinelabs.logansquare.annotation.JsonField;\nimport com.bluelinelabs.logansquare.annotation.JsonObject;\n\nimport java.util.List;\n\n@JsonObject\npublic class TwoParamGenericModel<T, K> {\n\n    @JsonField(name = \"test_t\")\n    public T testT;\n\n    @JsonField(name = \"test_k\")\n    public K testK;\n\n    @JsonField(name = \"t_list\")\n    public List<T> tList;\n\n    @JsonField(name = \"k_list\")\n    public List<K> kList;\n\n    @JsonField(name = \"test_nested_generic\")\n    public TwoParamGenericModel<String, Integer> testNestedGeneric;\n\n    @JsonField(name = \"test_nested_generic_integer\")\n    public TwoParamGenericModel<T, Integer> testNestedGenericInteger;\n\n    @JsonField(name = \"test_nested_string_generic\")\n    public TwoParamGenericModel<String, T> testNestedStringGeneric;\n\n}\n"
  },
  {
    "path": "processor/src/test/java/com/bluelinelabs/logansquare/processor/model/TwoParamGenericWithStringModel.java",
    "content": "package com.bluelinelabs.logansquare.processor.model;\n\nimport com.bluelinelabs.logansquare.annotation.JsonObject;\n\n@JsonObject\npublic class TwoParamGenericWithStringModel<K> extends TwoParamGenericModel<String, K> {\n\n}\n"
  },
  {
    "path": "processor/src/test/resources/generated/AbstractParentModel$$JsonObjectMapper.java",
    "content": "package com.bluelinelabs.logansquare.processor;\n\nimport com.bluelinelabs.logansquare.JsonMapper;\nimport com.fasterxml.jackson.core.JsonGenerator;\nimport com.fasterxml.jackson.core.JsonParser;\nimport java.io.IOException;\nimport java.lang.Override;\nimport java.lang.String;\nimport java.lang.SuppressWarnings;\n\n@SuppressWarnings(\"unsafe,unchecked\")\npublic final class AbstractParentModel$$JsonObjectMapper extends JsonMapper<AbstractParentModel> {\n    @Override\n    public AbstractParentModel parse(JsonParser jsonParser) throws IOException {\n        return null;\n    }\n\n    @Override\n    public void parseField(AbstractParentModel instance, String fieldName, JsonParser jsonParser) throws IOException {\n        if (\"parentTestInt\".equals(fieldName)) {\n            instance.parentTestInt = jsonParser.getValueAsInt();\n        }\n    }\n\n    @Override\n    public void serialize(AbstractParentModel object, JsonGenerator jsonGenerator, boolean writeStartAndEnd) throws IOException {\n        if (writeStartAndEnd) {\n            jsonGenerator.writeStartObject();\n        }\n        jsonGenerator.writeNumberField(\"parentTestInt\", object.parentTestInt);\n        if (writeStartAndEnd) {\n            jsonGenerator.writeEndObject();\n        }\n    }\n}\n"
  },
  {
    "path": "processor/src/test/resources/generated/DateModel$$JsonObjectMapper.java",
    "content": "package com.bluelinelabs.logansquare.processor;\n\nimport com.bluelinelabs.logansquare.JsonMapper;\nimport com.fasterxml.jackson.core.JsonGenerator;\nimport com.fasterxml.jackson.core.JsonParser;\nimport java.io.IOException;\nimport java.lang.Override;\nimport java.lang.String;\nimport java.lang.SuppressWarnings;\n\n@SuppressWarnings(\"unsafe,unchecked\")\npublic final class DateModel$$JsonObjectMapper extends JsonMapper<DateModel> {\n    protected static final DateModel.MyDateTypeConverter COM_BLUELINELABS_LOGANSQUARE_PROCESSOR_DATEMODEL_MYDATETYPECONVERTER = new DateModel.MyDateTypeConverter();\n\n    @Override\n    public DateModel parse(JsonParser jsonParser) throws IOException {\n        return null;\n    }\n\n    @Override\n    public void parseField(DateModel instance, String fieldName, JsonParser jsonParser) throws IOException {\n        if (\"date\".equals(fieldName)) {\n            instance.date = COM_BLUELINELABS_LOGANSQUARE_PROCESSOR_DATEMODEL_MYDATETYPECONVERTER.parse(jsonParser);\n        }\n    }\n\n    @Override\n    public void serialize(DateModel object, JsonGenerator jsonGenerator, boolean writeStartAndEnd) throws IOException {\n        if (writeStartAndEnd) {\n            jsonGenerator.writeStartObject();\n        }\n        COM_BLUELINELABS_LOGANSQUARE_PROCESSOR_DATEMODEL_MYDATETYPECONVERTER.serialize(object.date, \"date\", true, jsonGenerator);\n        if (writeStartAndEnd) {\n            jsonGenerator.writeEndObject();\n        }\n    }\n}"
  },
  {
    "path": "processor/src/test/resources/generated/EnumModel$$JsonObjectMapper.java",
    "content": "package com.bluelinelabs.logansquare.processor;\n\nimport com.bluelinelabs.logansquare.JsonMapper;\nimport com.fasterxml.jackson.core.JsonGenerator;\nimport com.fasterxml.jackson.core.JsonParser;\nimport java.io.IOException;\nimport java.lang.Override;\nimport java.lang.String;\nimport java.lang.SuppressWarnings;\n\n@SuppressWarnings(\"unsafe,unchecked\")\npublic final class EnumModel$$JsonObjectMapper extends JsonMapper<EnumModel> {\n    protected static final EnumModel.EnumTypeConverter COM_BLUELINELABS_LOGANSQUARE_PROCESSOR_ENUMMODEL_ENUMTYPECONVERTER = new EnumModel.EnumTypeConverter();\n\n    @Override\n    public EnumModel parse(JsonParser jsonParser) throws IOException {\n        return null;\n    }\n\n    @Override\n    public void parseField(EnumModel instance, String fieldName, JsonParser jsonParser) throws IOException {\n        if (\"enum\".equals(fieldName)) {\n            instance.myEnum = COM_BLUELINELABS_LOGANSQUARE_PROCESSOR_ENUMMODEL_ENUMTYPECONVERTER.parse(jsonParser);\n        }\n    }\n\n    @Override\n    public void serialize(EnumModel object, JsonGenerator jsonGenerator, boolean writeStartAndEnd) throws IOException {\n        if (writeStartAndEnd) {\n            jsonGenerator.writeStartObject();\n        }\n        COM_BLUELINELABS_LOGANSQUARE_PROCESSOR_ENUMMODEL_ENUMTYPECONVERTER.serialize(object.myEnum, \"enum\", true, jsonGenerator);\n        if (writeStartAndEnd) {\n            jsonGenerator.writeEndObject();\n        }\n    }\n}"
  },
  {
    "path": "processor/src/test/resources/generated/LowerCaseNamingPolicyModel$$JsonObjectMapper.java",
    "content": "package com.bluelinelabs.logansquare.processor;\n\nimport com.bluelinelabs.logansquare.JsonMapper;\nimport com.fasterxml.jackson.core.JsonGenerator;\nimport com.fasterxml.jackson.core.JsonParser;\nimport com.fasterxml.jackson.core.JsonToken;\nimport java.io.IOException;\nimport java.lang.Override;\nimport java.lang.String;\nimport java.lang.SuppressWarnings;\nimport java.util.ArrayList;\nimport java.util.List;\n\n@SuppressWarnings(\"unsafe,unchecked\")\npublic final class LowerCaseNamingPolicyModel$$JsonObjectMapper extends JsonMapper<LowerCaseNamingPolicyModel> {\n    @Override\n    public LowerCaseNamingPolicyModel parse(JsonParser jsonParser) throws IOException {\n        LowerCaseNamingPolicyModel instance = new LowerCaseNamingPolicyModel();\n        if (jsonParser.getCurrentToken() == null) {\n            jsonParser.nextToken();\n        }\n        if (jsonParser.getCurrentToken() != JsonToken.START_OBJECT) {\n            jsonParser.skipChildren();\n            return null;\n        }\n        while (jsonParser.nextToken() != JsonToken.END_OBJECT) {\n            String fieldName = jsonParser.getCurrentName();\n            jsonParser.nextToken();\n            parseField(instance, fieldName, jsonParser);\n            jsonParser.skipChildren();\n        }\n        return instance;\n    }\n\n    @Override\n    public void parseField(LowerCaseNamingPolicyModel instance, String fieldName, JsonParser jsonParser) throws IOException {\n        if (\"camel_case_list\".equals(fieldName)) {\n            if (jsonParser.getCurrentToken() == JsonToken.START_ARRAY) {\n                ArrayList<String> collection1 = new ArrayList<String>();\n                while (jsonParser.nextToken() != JsonToken.END_ARRAY) {\n                    String value1;\n                    value1 = jsonParser.getValueAsString(null);\n                    collection1.add(value1);\n                }\n                instance.camelCaseList = collection1;\n            } else{\n                instance.camelCaseList = null;\n            }\n        } else if (\"camel_case_string\".equals(fieldName)){\n            instance.camelCaseString = jsonParser.getValueAsString(null);\n        }\n    }\n\n    @Override\n    public void serialize(LowerCaseNamingPolicyModel object, JsonGenerator jsonGenerator, boolean writeStartAndEnd) throws IOException {\n        if (writeStartAndEnd) {\n            jsonGenerator.writeStartObject();\n        }\n        final List<String> lslocalcamel_case_list = object.camelCaseList;\n        if (lslocalcamel_case_list != null) {\n            jsonGenerator.writeFieldName(\"camel_case_list\");\n            jsonGenerator.writeStartArray();\n            for (String element1 : lslocalcamel_case_list) {\n                if (element1 != null) {\n                    jsonGenerator.writeString(element1);\n                }\n            }\n            jsonGenerator.writeEndArray();\n        }\n        if (object.camelCaseString != null) {\n            jsonGenerator.writeStringField(\"camel_case_string\", object.camelCaseString);\n        }\n        if (writeStartAndEnd) {\n            jsonGenerator.writeEndObject();\n        }\n    }\n}"
  },
  {
    "path": "processor/src/test/resources/generated/MultipleFieldNamesModel$$JsonObjectMapper.java",
    "content": "package com.bluelinelabs.logansquare.processor;\n\nimport com.bluelinelabs.logansquare.JsonMapper;\nimport com.fasterxml.jackson.core.JsonGenerator;\nimport com.fasterxml.jackson.core.JsonParser;\nimport com.fasterxml.jackson.core.JsonToken;\nimport java.io.IOException;\nimport java.lang.Override;\nimport java.lang.String;\nimport java.lang.SuppressWarnings;\n\n@SuppressWarnings(\"unsafe,unchecked\")\npublic final class MultipleFieldNamesModel$$JsonObjectMapper extends JsonMapper<MultipleFieldNamesModel> {\n    @Override\n    public MultipleFieldNamesModel parse(JsonParser jsonParser) throws IOException {\n        MultipleFieldNamesModel instance = new MultipleFieldNamesModel();\n        if (jsonParser.getCurrentToken() == null) {\n            jsonParser.nextToken();\n        }\n        if (jsonParser.getCurrentToken() != JsonToken.START_OBJECT) {\n            jsonParser.skipChildren();\n            return null;\n        }\n        while (jsonParser.nextToken() != JsonToken.END_OBJECT) {\n            String fieldName = jsonParser.getCurrentName();\n            jsonParser.nextToken();\n            parseField(instance, fieldName, jsonParser);\n            jsonParser.skipChildren();\n        }\n        return instance;\n    }\n\n    @Override\n    public void parseField(MultipleFieldNamesModel instance, String fieldName, JsonParser jsonParser) throws IOException {\n        if (\"possible_double_name_1\".equals(fieldName) || \"possible_double_name_2\".equals(fieldName)) {\n            instance.testDouble = jsonParser.getValueAsDouble();\n        } else if (\"possible_float_name_1\".equals(fieldName) || \"possible_float_name_2\".equals(fieldName)){\n            instance.testFloat = (float)jsonParser.getValueAsDouble();\n        } else if (\"possible_int_name_1\".equals(fieldName) || \"possible_int_name_2\".equals(fieldName)){\n            instance.testInt = jsonParser.getValueAsInt();\n        } else if (\"possible_long_name_1\".equals(fieldName) || \"possible_long_name_2\".equals(fieldName)){\n            instance.testLong = jsonParser.getValueAsLong();\n        } else if (\"possible_string_name_1\".equals(fieldName) || \"possible_string_name_2\".equals(fieldName)){\n            instance.testString = jsonParser.getValueAsString(null);\n        }\n    }\n\n    @Override\n    public void serialize(MultipleFieldNamesModel object, JsonGenerator jsonGenerator, boolean writeStartAndEnd) throws IOException {\n        if (writeStartAndEnd) {\n            jsonGenerator.writeStartObject();\n        }\n        jsonGenerator.writeNumberField(\"possible_double_name_1\", object.testDouble);\n        jsonGenerator.writeNumberField(\"possible_float_name_1\", object.testFloat);\n        jsonGenerator.writeNumberField(\"possible_int_name_1\", object.testInt);\n        jsonGenerator.writeNumberField(\"possible_long_name_1\", object.testLong);\n        if (object.testString != null) {\n            jsonGenerator.writeStringField(\"possible_string_name_1\", object.testString);\n        }\n        if (writeStartAndEnd) {\n            jsonGenerator.writeEndObject();\n        }\n    }\n}"
  },
  {
    "path": "processor/src/test/resources/generated/NestedCollectionModel$$JsonObjectMapper.java",
    "content": "package model.good;\n\nimport com.bluelinelabs.logansquare.JsonMapper;\nimport com.bluelinelabs.logansquare.LoganSquare;\nimport com.fasterxml.jackson.core.JsonGenerator;\nimport com.fasterxml.jackson.core.JsonParser;\nimport com.fasterxml.jackson.core.JsonToken;\nimport java.io.IOException;\nimport java.lang.Override;\nimport java.lang.String;\nimport java.lang.SuppressWarnings;\nimport java.util.ArrayDeque;\nimport java.util.ArrayList;\nimport java.util.HashMap;\nimport java.util.HashSet;\nimport java.util.List;\nimport java.util.Map;\nimport java.util.Queue;\nimport java.util.Set;\n\n@SuppressWarnings(\"unsafe,unchecked\")\npublic final class NestedCollectionModel$$JsonObjectMapper extends JsonMapper<NestedCollectionModel> {\n    private static final JsonMapper<NestedCollectionModel.ModelForCollection> MODEL_GOOD_NESTEDCOLLECTIONMODEL_MODELFORCOLLECTION__JSONOBJECTMAPPER = LoganSquare.mapperFor(NestedCollectionModel.ModelForCollection.class);\n\n    @Override\n    public NestedCollectionModel parse(JsonParser jsonParser) throws IOException {\n        NestedCollectionModel instance = new NestedCollectionModel();\n        if (jsonParser.getCurrentToken() == null) {\n            jsonParser.nextToken();\n        }\n        if (jsonParser.getCurrentToken() != JsonToken.START_OBJECT) {\n            jsonParser.skipChildren();\n            return null;\n        }\n        while (jsonParser.nextToken() != JsonToken.END_OBJECT) {\n            String fieldName = jsonParser.getCurrentName();\n            jsonParser.nextToken();\n            parseField(instance, fieldName, jsonParser);\n            jsonParser.skipChildren();\n        }\n        return instance;\n    }\n\n    @Override\n    public void parseField(NestedCollectionModel instance, String fieldName, JsonParser jsonParser) throws IOException {\n        if (\"arrayList\".equals(fieldName)) {\n            if (jsonParser.getCurrentToken() == JsonToken.START_ARRAY) {\n                ArrayList<String[]> collection1 = new ArrayList<String[]>();\n                while (jsonParser.nextToken() != JsonToken.END_ARRAY) {\n                    String[] value1;\n                    if (jsonParser.getCurrentToken() == JsonToken.START_ARRAY) {\n                        List<String> collection2 = new ArrayList<String>();\n                        while (jsonParser.nextToken() != JsonToken.END_ARRAY) {\n                            String value2;\n                            value2 = jsonParser.getValueAsString(null);\n                            collection2.add(value2);\n                        }\n                        String[] array = collection2.toArray(new String[collection2.size()]);\n                        value1 = array;\n                    } else{\n                        value1 = null;\n                    }\n                    collection1.add(value1);\n                }\n                instance.arrayList = collection1;\n            } else{\n                instance.arrayList = null;\n            }\n        } else if (\"complexArray\".equals(fieldName)){\n            if (jsonParser.getCurrentToken() == JsonToken.START_ARRAY) {\n                ArrayList<List<Map<String, NestedCollectionModel.ModelForCollection>>[]> collection1 = new ArrayList<List<Map<String, NestedCollectionModel.ModelForCollection>>[]>();\n                while (jsonParser.nextToken() != JsonToken.END_ARRAY) {\n                    ArrayList[] value1;\n                    if (jsonParser.getCurrentToken() == JsonToken.START_ARRAY) {\n                        List<List<Map<String, NestedCollectionModel.ModelForCollection>>> collection2 = new ArrayList<List<Map<String, NestedCollectionModel.ModelForCollection>>>();\n                        while (jsonParser.nextToken() != JsonToken.END_ARRAY) {\n                            ArrayList value2;\n                            if (jsonParser.getCurrentToken() == JsonToken.START_ARRAY) {\n                                ArrayList<Map<String, NestedCollectionModel.ModelForCollection>> collection3 = new ArrayList<Map<String, NestedCollectionModel.ModelForCollection>>();\n                                while (jsonParser.nextToken() != JsonToken.END_ARRAY) {\n                                    HashMap value3;\n                                    if (jsonParser.getCurrentToken() == JsonToken.START_OBJECT) {\n                                        HashMap<String, NestedCollectionModel.ModelForCollection> map4 = new HashMap<String, NestedCollectionModel.ModelForCollection>();\n                                        while (jsonParser.nextToken() != JsonToken.END_OBJECT) {\n                                            String key4 = jsonParser.getText();\n                                            jsonParser.nextToken();\n                                            if (jsonParser.getCurrentToken() == JsonToken.VALUE_NULL) {\n                                                map4.put(key4, null);\n                                            } else{\n                                                map4.put(key4, MODEL_GOOD_NESTEDCOLLECTIONMODEL_MODELFORCOLLECTION__JSONOBJECTMAPPER.parse(jsonParser));                                            }\n                                        }\n                                        value3 = map4;\n                                    } else{\n                                        value3 = null;\n                                    }\n                                    collection3.add(value3);\n                                }\n                                value2 = collection3;\n                            } else{\n                                value2 = null;\n                            }\n                            collection2.add(value2);\n                        }\n                        ArrayList[] array = collection2.toArray(new ArrayList[collection2.size()]);\n                        value1 = array;\n                    } else{\n                        value1 = null;\n                    }\n                    collection1.add(value1);\n                }\n                instance.complexArray = collection1;\n            } else{\n                instance.complexArray = null;\n            }\n        } else if (\"complexerArray\".equals(fieldName)){\n            if (jsonParser.getCurrentToken() == JsonToken.START_ARRAY) {\n                ArrayList<List<Map<String, NestedCollectionModel.ModelForCollection[]>>[]> collection1 = new ArrayList<List<Map<String, NestedCollectionModel.ModelForCollection[]>>[]>();\n                while (jsonParser.nextToken() != JsonToken.END_ARRAY) {\n                    ArrayList[] value1;\n                    if (jsonParser.getCurrentToken() == JsonToken.START_ARRAY) {\n                        List<List<Map<String, NestedCollectionModel.ModelForCollection[]>>> collection2 = new ArrayList<List<Map<String, NestedCollectionModel.ModelForCollection[]>>>();\n                        while (jsonParser.nextToken() != JsonToken.END_ARRAY) {\n                            ArrayList value2;\n                            if (jsonParser.getCurrentToken() == JsonToken.START_ARRAY) {\n                                ArrayList<Map<String, NestedCollectionModel.ModelForCollection[]>> collection3 = new ArrayList<Map<String, NestedCollectionModel.ModelForCollection[]>>();\n                                while (jsonParser.nextToken() != JsonToken.END_ARRAY) {\n                                    HashMap value3;\n                                    if (jsonParser.getCurrentToken() == JsonToken.START_OBJECT) {\n                                        HashMap<String, NestedCollectionModel.ModelForCollection[]> map4 = new HashMap<String, NestedCollectionModel.ModelForCollection[]>();\n                                        while (jsonParser.nextToken() != JsonToken.END_OBJECT) {\n                                            String key4 = jsonParser.getText();\n                                            jsonParser.nextToken();\n                                            if (jsonParser.getCurrentToken() == JsonToken.VALUE_NULL) {\n                                                map4.put(key4, null);\n                                            } else{\n                                                if (jsonParser.getCurrentToken() == JsonToken.START_ARRAY) {\n                                                    List<NestedCollectionModel.ModelForCollection> collection5 = new ArrayList<NestedCollectionModel.ModelForCollection>();\n                                                    while (jsonParser.nextToken() != JsonToken.END_ARRAY) {\n                                                        NestedCollectionModel.ModelForCollection value5;\n                                                        value5 = MODEL_GOOD_NESTEDCOLLECTIONMODEL_MODELFORCOLLECTION__JSONOBJECTMAPPER.parse(jsonParser);\n                                                        collection5.add(value5);\n                                                    }\n                                                    NestedCollectionModel.ModelForCollection[] array = collection5.toArray(new NestedCollectionModel.ModelForCollection[collection5.size()]);\n                                                    map4.put(key4, array);\n                                                } else{\n                                                    map4.put(key4, null);\n                                                }\n                                            }\n                                        }\n                                        value3 = map4;\n                                    } else{\n                                        value3 = null;\n                                    }\n                                    collection3.add(value3);\n                                }\n                                value2 = collection3;\n                            } else{\n                                value2 = null;\n                            }\n                            collection2.add(value2);\n                        }\n                        ArrayList[] array = collection2.toArray(new ArrayList[collection2.size()]);\n                        value1 = array;\n                    } else{\n                        value1 = null;\n                    }\n                    collection1.add(value1);\n                }\n                instance.complexerArray = collection1;\n            } else{\n                instance.complexerArray = null;\n            }\n        } else if (\"dontKnowWhatImDoingList\".equals(fieldName)){\n            if (jsonParser.getCurrentToken() == JsonToken.START_ARRAY) {\n                ArrayList<List<List<ArrayList<NestedCollectionModel.ModelForCollection>>>> collection1 = new ArrayList<List<List<ArrayList<NestedCollectionModel.ModelForCollection>>>>();\n                while (jsonParser.nextToken() != JsonToken.END_ARRAY) {\n                    ArrayList value1;\n                    if (jsonParser.getCurrentToken() == JsonToken.START_ARRAY) {\n                        ArrayList<List<ArrayList<NestedCollectionModel.ModelForCollection>>> collection2 = new ArrayList<List<ArrayList<NestedCollectionModel.ModelForCollection>>>();\n                        while (jsonParser.nextToken() != JsonToken.END_ARRAY) {\n                            ArrayList value2;\n                            if (jsonParser.getCurrentToken() == JsonToken.START_ARRAY) {\n                                ArrayList<ArrayList<NestedCollectionModel.ModelForCollection>> collection3 = new ArrayList<ArrayList<NestedCollectionModel.ModelForCollection>>();\n                                while (jsonParser.nextToken() != JsonToken.END_ARRAY) {\n                                    ArrayList value3;\n                                    if (jsonParser.getCurrentToken() == JsonToken.START_ARRAY) {\n                                        ArrayList<NestedCollectionModel.ModelForCollection> collection4 = new ArrayList<NestedCollectionModel.ModelForCollection>();\n                                        while (jsonParser.nextToken() != JsonToken.END_ARRAY) {\n                                            NestedCollectionModel.ModelForCollection value4;\n                                            value4 = MODEL_GOOD_NESTEDCOLLECTIONMODEL_MODELFORCOLLECTION__JSONOBJECTMAPPER.parse(jsonParser);\n                                            collection4.add(value4);\n                                        }\n                                        value3 = collection4;\n                                    } else{\n                                        value3 = null;\n                                    }\n                                    collection3.add(value3);\n                                }\n                                value2 = collection3;\n                            } else{\n                                value2 = null;\n                            }\n                            collection2.add(value2);\n                        }\n                        value1 = collection2;\n                    } else{\n                        value1 = null;\n                    }\n                    collection1.add(value1);\n                }\n                instance.dontKnowWhatImDoingList = collection1;\n            } else{\n                instance.dontKnowWhatImDoingList = null;\n            }\n        } else if (\"dontKnowWhatImDoingMap\".equals(fieldName)){\n            if (jsonParser.getCurrentToken() == JsonToken.START_OBJECT) {\n                HashMap<String, Map<String, ArrayList<List<Map<String, NestedCollectionModel.ModelForCollection>>>>> map1 = new HashMap<String, Map<String, ArrayList<List<Map<String, NestedCollectionModel.ModelForCollection>>>>>();\n                while (jsonParser.nextToken() != JsonToken.END_OBJECT) {\n                    String key1 = jsonParser.getText();\n                    jsonParser.nextToken();\n                    if (jsonParser.getCurrentToken() == JsonToken.VALUE_NULL) {\n                        map1.put(key1, null);\n                    } else{\n                        if (jsonParser.getCurrentToken() == JsonToken.START_OBJECT) {\n                            HashMap<String, ArrayList<List<Map<String, NestedCollectionModel.ModelForCollection>>>> map2 = new HashMap<String, ArrayList<List<Map<String, NestedCollectionModel.ModelForCollection>>>>();\n                            while (jsonParser.nextToken() != JsonToken.END_OBJECT) {\n                                String key2 = jsonParser.getText();\n                                jsonParser.nextToken();\n                                if (jsonParser.getCurrentToken() == JsonToken.VALUE_NULL) {\n                                    map2.put(key2, null);\n                                } else{\n                                    if (jsonParser.getCurrentToken() == JsonToken.START_ARRAY) {\n                                        ArrayList<List<Map<String, NestedCollectionModel.ModelForCollection>>> collection3 = new ArrayList<List<Map<String, NestedCollectionModel.ModelForCollection>>>();\n                                        while (jsonParser.nextToken() != JsonToken.END_ARRAY) {\n                                            ArrayList value3;\n                                            if (jsonParser.getCurrentToken() == JsonToken.START_ARRAY) {\n                                                ArrayList<Map<String, NestedCollectionModel.ModelForCollection>> collection4 = new ArrayList<Map<String, NestedCollectionModel.ModelForCollection>>();\n                                                while (jsonParser.nextToken() != JsonToken.END_ARRAY) {\n                                                    HashMap value4;\n                                                    if (jsonParser.getCurrentToken() == JsonToken.START_OBJECT) {\n                                                        HashMap<String, NestedCollectionModel.ModelForCollection> map5 = new HashMap<String, NestedCollectionModel.ModelForCollection>();\n                                                        while (jsonParser.nextToken() != JsonToken.END_OBJECT) {\n                                                            String key5 = jsonParser.getText();\n                                                            jsonParser.nextToken();\n                                                            if (jsonParser.getCurrentToken() == JsonToken.VALUE_NULL) {\n                                                                map5.put(key5, null);\n                                                            } else{\n                                                                map5.put(key5, MODEL_GOOD_NESTEDCOLLECTIONMODEL_MODELFORCOLLECTION__JSONOBJECTMAPPER.parse(jsonParser));\n                                                            }\n                                                        }\n                                                        value4 = map5;\n                                                    } else{\n                                                        value4 = null;\n                                                    }\n                                                    collection4.add(value4);\n                                                }\n                                                value3 = collection4;\n                                            } else{\n                                                value3 = null;\n                                            }\n                                            collection3.add(value3);\n                                        }\n                                        map2.put(key2, collection3);\n                                    } else{\n                                        map2.put(key2, null);\n                                    }\n                                }\n                            }\n                            map1.put(key1, map2);\n                        } else{\n                            map1.put(key1, null);\n                        }\n                    }\n                }\n                instance.dontKnowWhatImDoingMap = map1;\n            } else{\n                instance.dontKnowWhatImDoingMap = null;\n            }\n        } else if (\"model_deque\".equals(fieldName)){\n            if (jsonParser.getCurrentToken() == JsonToken.START_ARRAY) {\n                ArrayDeque<List<NestedCollectionModel.ModelForCollection>> collection1 = new ArrayDeque<List<NestedCollectionModel.ModelForCollection>>();\n                while (jsonParser.nextToken() != JsonToken.END_ARRAY) {\n                    ArrayList value1;\n                    if (jsonParser.getCurrentToken() == JsonToken.START_ARRAY) {\n                        ArrayList<NestedCollectionModel.ModelForCollection> collection2 = new ArrayList<NestedCollectionModel.ModelForCollection>();\n                        while (jsonParser.nextToken() != JsonToken.END_ARRAY) {\n                            NestedCollectionModel.ModelForCollection value2;\n                            value2 = MODEL_GOOD_NESTEDCOLLECTIONMODEL_MODELFORCOLLECTION__JSONOBJECTMAPPER.parse(jsonParser);\n                            collection2.add(value2);\n                        }\n                        value1 = collection2;\n                    } else{\n                        value1 = null;\n                    }\n                    collection1.add(value1);\n                }\n                instance.modelForCollectionDeque = collection1;\n            } else{\n                instance.modelForCollectionDeque = null;\n            }\n        } else if (\"model_list\".equals(fieldName)){\n            if (jsonParser.getCurrentToken() == JsonToken.START_ARRAY) {\n                ArrayList<List<NestedCollectionModel.ModelForCollection>> collection1 = new ArrayList<List<NestedCollectionModel.ModelForCollection>>();\n                while (jsonParser.nextToken() != JsonToken.END_ARRAY) {\n                    ArrayList value1;\n                    if (jsonParser.getCurrentToken() == JsonToken.START_ARRAY) {\n                        ArrayList<NestedCollectionModel.ModelForCollection> collection2 = new ArrayList<NestedCollectionModel.ModelForCollection>();\n                        while (jsonParser.nextToken() != JsonToken.END_ARRAY) {\n                            NestedCollectionModel.ModelForCollection value2;\n                            value2 = MODEL_GOOD_NESTEDCOLLECTIONMODEL_MODELFORCOLLECTION__JSONOBJECTMAPPER.parse(jsonParser);\n                            collection2.add(value2);\n                        }\n                        value1 = collection2;\n                    } else{\n                        value1 = null;\n                    }\n                    collection1.add(value1);\n                }\n                instance.modelForCollectionList = collection1;\n            } else{\n                instance.modelForCollectionList = null;\n            }\n        } else if (\"model_map\".equals(fieldName)){\n            if (jsonParser.getCurrentToken() == JsonToken.START_OBJECT) {\n                HashMap<String, List<NestedCollectionModel.ModelForCollection>> map1 = new HashMap<String, List<NestedCollectionModel.ModelForCollection>>();\n                while (jsonParser.nextToken() != JsonToken.END_OBJECT) {\n                    String key1 = jsonParser.getText();\n                    jsonParser.nextToken();\n                    if (jsonParser.getCurrentToken() == JsonToken.VALUE_NULL) {\n                        map1.put(key1, null);\n                    } else{\n                        if (jsonParser.getCurrentToken() == JsonToken.START_ARRAY) {\n                            ArrayList<NestedCollectionModel.ModelForCollection> collection2 = new ArrayList<NestedCollectionModel.ModelForCollection>();\n                            while (jsonParser.nextToken() != JsonToken.END_ARRAY) {\n                                NestedCollectionModel.ModelForCollection value2;\n                                value2 = MODEL_GOOD_NESTEDCOLLECTIONMODEL_MODELFORCOLLECTION__JSONOBJECTMAPPER.parse(jsonParser);\n                                collection2.add(value2);\n                            }\n                            map1.put(key1, collection2);\n                        } else{\n                            map1.put(key1, null);\n                        }\n                    }\n                }\n                instance.modelForCollectionMap = map1;\n            } else{\n                instance.modelForCollectionMap = null;\n            }\n        } else if (\"model_queue\".equals(fieldName)){\n            if (jsonParser.getCurrentToken() == JsonToken.START_ARRAY) {\n                ArrayDeque<List<NestedCollectionModel.ModelForCollection>> collection1 = new ArrayDeque<List<NestedCollectionModel.ModelForCollection>>();\n                while (jsonParser.nextToken() != JsonToken.END_ARRAY) {\n                    ArrayList value1;\n                    if (jsonParser.getCurrentToken() == JsonToken.START_ARRAY) {\n                        ArrayList<NestedCollectionModel.ModelForCollection> collection2 = new ArrayList<NestedCollectionModel.ModelForCollection>();\n                        while (jsonParser.nextToken() != JsonToken.END_ARRAY) {\n                            NestedCollectionModel.ModelForCollection value2;\n                            value2 = MODEL_GOOD_NESTEDCOLLECTIONMODEL_MODELFORCOLLECTION__JSONOBJECTMAPPER.parse(jsonParser);\n                            collection2.add(value2);\n                        }\n                        value1 = collection2;\n                    } else{\n                        value1 = null;\n                    }\n                    collection1.add(value1);\n                }\n                instance.modelForCollectionQueue = collection1;\n            } else{\n                instance.modelForCollectionQueue = null;\n            }\n        } else if (\"model_set\".equals(fieldName)){\n            if (jsonParser.getCurrentToken() == JsonToken.START_ARRAY) {\n                HashSet<List<NestedCollectionModel.ModelForCollection>> collection1 = new HashSet<List<NestedCollectionModel.ModelForCollection>>();\n                while (jsonParser.nextToken() != JsonToken.END_ARRAY) {\n                    ArrayList value1;\n                    if (jsonParser.getCurrentToken() == JsonToken.START_ARRAY) {\n                        ArrayList<NestedCollectionModel.ModelForCollection> collection2 = new ArrayList<NestedCollectionModel.ModelForCollection>();\n                        while (jsonParser.nextToken() != JsonToken.END_ARRAY) {\n                            NestedCollectionModel.ModelForCollection value2;\n                            value2 = MODEL_GOOD_NESTEDCOLLECTIONMODEL_MODELFORCOLLECTION__JSONOBJECTMAPPER.parse(jsonParser);\n                            collection2.add(value2);\n                        }\n                        value1 = collection2;\n                    } else{\n                        value1 = null;\n                    }\n                    collection1.add(value1);\n                }\n                instance.modelForCollectionSet = collection1;\n            } else{\n                instance.modelForCollectionSet = null;\n            }\n        }\n    }\n\n    @Override\n    public void serialize(NestedCollectionModel object, JsonGenerator jsonGenerator, boolean writeStartAndEnd) throws IOException {\n        if (writeStartAndEnd) {\n            jsonGenerator.writeStartObject();\n        }\n        final List<String[]> lslocalarrayList = object.arrayList;\n        if (lslocalarrayList != null) {\n            jsonGenerator.writeFieldName(\"arrayList\");\n            jsonGenerator.writeStartArray();\n            for (String[] element1 : lslocalarrayList) {\n                if (element1 != null) {\n                    final String[] lslocallslocalarrayListElement = element1;\n                    if (lslocallslocalarrayListElement != null) {\n                        jsonGenerator.writeStartArray();\n                        for (String element2 : lslocallslocalarrayListElement) {\n                            if (element2 != null) {\n                                jsonGenerator.writeString(element2);\n                            }\n                        }\n                        jsonGenerator.writeEndArray();\n                    }\n                }\n            }\n            jsonGenerator.writeEndArray();\n        }\n        final List<List<Map<String, NestedCollectionModel.ModelForCollection>>[]> lslocalcomplexArray = object.complexArray;\n        if (lslocalcomplexArray != null) {\n            jsonGenerator.writeFieldName(\"complexArray\");\n            jsonGenerator.writeStartArray();\n            for (List<Map<String, NestedCollectionModel.ModelForCollection>>[] element1 : lslocalcomplexArray) {\n                if (element1 != null) {\n                    final List<Map<String, NestedCollectionModel.ModelForCollection>>[] lslocallslocalcomplexArrayElement = element1;\n                    if (lslocallslocalcomplexArrayElement != null) {\n                        jsonGenerator.writeStartArray();\n                        for (List<Map<String, NestedCollectionModel.ModelForCollection>> element2 : lslocallslocalcomplexArrayElement) {\n                            if (element2 != null) {\n                                final List<Map<String, NestedCollectionModel.ModelForCollection>> lslocallslocallslocalcomplexArrayElementElement = element2;\n                                if (lslocallslocallslocalcomplexArrayElementElement != null) {\n                                    jsonGenerator.writeStartArray();\n                                    for (Map<String, NestedCollectionModel.ModelForCollection> element3 : lslocallslocallslocalcomplexArrayElementElement) {\n                                        if (element3 != null) {\n                                            final Map<String, NestedCollectionModel.ModelForCollection> lslocallslocallslocallslocalcomplexArrayElementElementElement = element3;\n                                            if (lslocallslocallslocallslocalcomplexArrayElementElementElement != null) {\n                                                jsonGenerator.writeStartObject();\n                                                for (Map.Entry<String, NestedCollectionModel.ModelForCollection> entry4 : lslocallslocallslocallslocalcomplexArrayElementElementElement.entrySet()) {\n                                                    jsonGenerator.writeFieldName(entry4.getKey().toString());\n                                                    if (entry4.getValue() != null) {\n                                                        MODEL_GOOD_NESTEDCOLLECTIONMODEL_MODELFORCOLLECTION__JSONOBJECTMAPPER.serialize(entry4.getValue(), jsonGenerator, true);\n                                                    }\n                                                }\n                                                jsonGenerator.writeEndObject();\n                                            }\n                                        }\n                                    }\n                                    jsonGenerator.writeEndArray();\n                                }\n                            }\n                        }\n                        jsonGenerator.writeEndArray();\n                    }\n                }\n            }\n            jsonGenerator.writeEndArray();\n        }\n        final List<List<Map<String, NestedCollectionModel.ModelForCollection[]>>[]> lslocalcomplexerArray = object.complexerArray;\n        if (lslocalcomplexerArray != null) {\n            jsonGenerator.writeFieldName(\"complexerArray\");\n            jsonGenerator.writeStartArray();\n            for (List<Map<String, NestedCollectionModel.ModelForCollection[]>>[] element1 : lslocalcomplexerArray) {\n                if (element1 != null) {\n                    final List<Map<String, NestedCollectionModel.ModelForCollection[]>>[] lslocallslocalcomplexerArrayElement = element1;\n                    if (lslocallslocalcomplexerArrayElement != null) {\n                        jsonGenerator.writeStartArray();\n                        for (List<Map<String, NestedCollectionModel.ModelForCollection[]>> element2 : lslocallslocalcomplexerArrayElement) {\n                            if (element2 != null) {\n                                final List<Map<String, NestedCollectionModel.ModelForCollection[]>> lslocallslocallslocalcomplexerArrayElementElement = element2;\n                                if (lslocallslocallslocalcomplexerArrayElementElement != null) {\n                                    jsonGenerator.writeStartArray();\n                                    for (Map<String, NestedCollectionModel.ModelForCollection[]> element3 : lslocallslocallslocalcomplexerArrayElementElement) {\n                                        if (element3 != null) {\n                                            final Map<String, NestedCollectionModel.ModelForCollection[]> lslocallslocallslocallslocalcomplexerArrayElementElementElement = element3;\n                                            if (lslocallslocallslocallslocalcomplexerArrayElementElementElement != null) {\n                                                jsonGenerator.writeStartObject();\n                                                for (Map.Entry<String, NestedCollectionModel.ModelForCollection[]> entry4 : lslocallslocallslocallslocalcomplexerArrayElementElementElement.entrySet()) {\n                                                    jsonGenerator.writeFieldName(entry4.getKey().toString());\n                                                    if (entry4.getValue() != null) {\n                                                        final NestedCollectionModel.ModelForCollection[] lslocallslocallslocallslocallslocalcomplexerArrayElementElementElementElement = entry4.getValue();\n                                                        if (lslocallslocallslocallslocallslocalcomplexerArrayElementElementElementElement != null) {\n                                                            jsonGenerator.writeStartArray();\n                                                            for (NestedCollectionModel.ModelForCollection element5 : lslocallslocallslocallslocallslocalcomplexerArrayElementElementElementElement) {\n                                                                if (element5 != null) {\n                                                                    MODEL_GOOD_NESTEDCOLLECTIONMODEL_MODELFORCOLLECTION__JSONOBJECTMAPPER.serialize(element5, jsonGenerator, true);\n                                                                }\n                                                            }\n                                                            jsonGenerator.writeEndArray();\n                                                        }\n                                                    }\n                                                }\n                                                jsonGenerator.writeEndObject();\n                                            }\n                                        }\n                                    }\n                                    jsonGenerator.writeEndArray();\n                                }\n                            }\n                        }\n                        jsonGenerator.writeEndArray();\n                    }\n                }\n            }\n            jsonGenerator.writeEndArray();\n        }\n        final List<List<List<ArrayList<NestedCollectionModel.ModelForCollection>>>> lslocaldontKnowWhatImDoingList = object.dontKnowWhatImDoingList;\n        if (lslocaldontKnowWhatImDoingList != null) {\n            jsonGenerator.writeFieldName(\"dontKnowWhatImDoingList\");\n            jsonGenerator.writeStartArray();\n            for (List<List<ArrayList<NestedCollectionModel.ModelForCollection>>> element1 : lslocaldontKnowWhatImDoingList) {\n                if (element1 != null) {\n                    final List<List<ArrayList<NestedCollectionModel.ModelForCollection>>> lslocallslocaldontKnowWhatImDoingListElement = element1;\n                    if (lslocallslocaldontKnowWhatImDoingListElement != null) {\n                        jsonGenerator.writeStartArray();\n                        for (List<ArrayList<NestedCollectionModel.ModelForCollection>> element2 : lslocallslocaldontKnowWhatImDoingListElement) {\n                            if (element2 != null) {\n                                final List<ArrayList<NestedCollectionModel.ModelForCollection>> lslocallslocallslocaldontKnowWhatImDoingListElementElement = element2;\n                                if (lslocallslocallslocaldontKnowWhatImDoingListElementElement != null) {\n                                    jsonGenerator.writeStartArray();\n                                    for (ArrayList<NestedCollectionModel.ModelForCollection> element3 : lslocallslocallslocaldontKnowWhatImDoingListElementElement) {\n                                        if (element3 != null) {\n                                            final List<NestedCollectionModel.ModelForCollection> lslocallslocallslocallslocaldontKnowWhatImDoingListElementElementElement = element3;\n                                            if (lslocallslocallslocallslocaldontKnowWhatImDoingListElementElementElement != null) {\n                                                jsonGenerator.writeStartArray();\n                                                for (NestedCollectionModel.ModelForCollection element4 : lslocallslocallslocallslocaldontKnowWhatImDoingListElementElementElement) {\n                                                    if (element4 != null) {\n                                                        MODEL_GOOD_NESTEDCOLLECTIONMODEL_MODELFORCOLLECTION__JSONOBJECTMAPPER.serialize(element4, jsonGenerator, true);\n                                                    }\n                                                }\n                                                jsonGenerator.writeEndArray();\n                                            }\n                                        }\n                                    }\n                                    jsonGenerator.writeEndArray();\n                                }\n                            }\n                        }\n                        jsonGenerator.writeEndArray();\n                    }\n                }\n            }\n            jsonGenerator.writeEndArray();\n        }\n        final Map<String, Map<String, ArrayList<List<Map<String, NestedCollectionModel.ModelForCollection>>>>> lslocaldontKnowWhatImDoingMap = object.dontKnowWhatImDoingMap;\n        if (lslocaldontKnowWhatImDoingMap != null) {\n            jsonGenerator.writeFieldName(\"dontKnowWhatImDoingMap\");\n            jsonGenerator.writeStartObject();\n            for (Map.Entry<String, Map<String, ArrayList<List<Map<String, NestedCollectionModel.ModelForCollection>>>>> entry1 : lslocaldontKnowWhatImDoingMap.entrySet()) {\n                jsonGenerator.writeFieldName(entry1.getKey().toString());\n                if (entry1.getValue() != null) {\n                    final Map<String, ArrayList<List<Map<String, NestedCollectionModel.ModelForCollection>>>> lslocallslocaldontKnowWhatImDoingMapElement = entry1.getValue();\n                    if (lslocallslocaldontKnowWhatImDoingMapElement != null) {\n                        jsonGenerator.writeStartObject();\n                        for (Map.Entry<String, ArrayList<List<Map<String, NestedCollectionModel.ModelForCollection>>>> entry2 : lslocallslocaldontKnowWhatImDoingMapElement.entrySet()) {\n                            jsonGenerator.writeFieldName(entry2.getKey().toString());\n                            if (entry2.getValue() != null) {\n                                final List<List<Map<String, NestedCollectionModel.ModelForCollection>>> lslocallslocallslocaldontKnowWhatImDoingMapElementElement = entry2.getValue();\n                                if (lslocallslocallslocaldontKnowWhatImDoingMapElementElement != null) {\n                                    jsonGenerator.writeStartArray();\n                                    for (List<Map<String, NestedCollectionModel.ModelForCollection>> element3 : lslocallslocallslocaldontKnowWhatImDoingMapElementElement) {\n                                        if (element3 != null) {\n                                            final List<Map<String, NestedCollectionModel.ModelForCollection>> lslocallslocallslocallslocaldontKnowWhatImDoingMapElementElementElement = element3;\n                                            if (lslocallslocallslocallslocaldontKnowWhatImDoingMapElementElementElement != null) {\n                                                jsonGenerator.writeStartArray();\n                                                for (Map<String, NestedCollectionModel.ModelForCollection> element4 : lslocallslocallslocallslocaldontKnowWhatImDoingMapElementElementElement) {\n                                                    if (element4 != null) {\n                                                        final Map<String, NestedCollectionModel.ModelForCollection> lslocallslocallslocallslocallslocaldontKnowWhatImDoingMapElementElementElementElement = element4;\n                                                        if (lslocallslocallslocallslocallslocaldontKnowWhatImDoingMapElementElementElementElement != null) {\n                                                            jsonGenerator.writeStartObject();\n                                                            for (Map.Entry<String, NestedCollectionModel.ModelForCollection> entry5 : lslocallslocallslocallslocallslocaldontKnowWhatImDoingMapElementElementElementElement.entrySet()) {\n                                                                jsonGenerator.writeFieldName(entry5.getKey().toString());\n                                                                if (entry5.getValue() != null) {\n                                                                    MODEL_GOOD_NESTEDCOLLECTIONMODEL_MODELFORCOLLECTION__JSONOBJECTMAPPER.serialize(entry5.getValue(), jsonGenerator, true);\n                                                                }\n                                                            }\n                                                            jsonGenerator.writeEndObject();\n                                                        }\n                                                    }\n                                                }\n                                                jsonGenerator.writeEndArray();\n                                            }\n                                        }\n                                    }\n                                    jsonGenerator.writeEndArray();\n                                }\n                            }\n                        }\n                        jsonGenerator.writeEndObject();\n                    }\n                }\n            }\n            jsonGenerator.writeEndObject();\n        }\n        final Queue<List<NestedCollectionModel.ModelForCollection>> lslocalmodel_deque = object.modelForCollectionDeque;\n        if (lslocalmodel_deque != null) {\n            jsonGenerator.writeFieldName(\"model_deque\");\n            jsonGenerator.writeStartArray();\n            for (List<NestedCollectionModel.ModelForCollection> element1 : lslocalmodel_deque) {\n                if (element1 != null) {\n                    final List<NestedCollectionModel.ModelForCollection> lslocallslocalmodel_dequeElement = element1;\n                    if (lslocallslocalmodel_dequeElement != null) {\n                        jsonGenerator.writeStartArray();\n                        for (NestedCollectionModel.ModelForCollection element2 : lslocallslocalmodel_dequeElement) {\n                            if (element2 != null) {\n                                MODEL_GOOD_NESTEDCOLLECTIONMODEL_MODELFORCOLLECTION__JSONOBJECTMAPPER.serialize(element2, jsonGenerator, true);\n                            }\n                        }\n                        jsonGenerator.writeEndArray();\n                    }\n                }\n            }\n            jsonGenerator.writeEndArray();\n        }\n        final List<List<NestedCollectionModel.ModelForCollection>> lslocalmodel_list = object.modelForCollectionList;\n        if (lslocalmodel_list != null) {\n            jsonGenerator.writeFieldName(\"model_list\");\n            jsonGenerator.writeStartArray();\n            for (List<NestedCollectionModel.ModelForCollection> element1 : lslocalmodel_list) {\n                if (element1 != null) {\n                    final List<NestedCollectionModel.ModelForCollection> lslocallslocalmodel_listElement = element1;\n                    if (lslocallslocalmodel_listElement != null) {\n                        jsonGenerator.writeStartArray();\n                        for (NestedCollectionModel.ModelForCollection element2 : lslocallslocalmodel_listElement) {\n                            if (element2 != null) {\n                                MODEL_GOOD_NESTEDCOLLECTIONMODEL_MODELFORCOLLECTION__JSONOBJECTMAPPER.serialize(element2, jsonGenerator, true);\n                            }\n                        }\n                        jsonGenerator.writeEndArray();\n                    }\n                }\n            }\n            jsonGenerator.writeEndArray();\n        }\n        final Map<String, List<NestedCollectionModel.ModelForCollection>> lslocalmodel_map = object.modelForCollectionMap;\n        if (lslocalmodel_map != null) {\n            jsonGenerator.writeFieldName(\"model_map\");\n            jsonGenerator.writeStartObject();\n            for (Map.Entry<String, List<NestedCollectionModel.ModelForCollection>> entry1 : lslocalmodel_map.entrySet()) {\n                jsonGenerator.writeFieldName(entry1.getKey().toString());\n                if (entry1.getValue() != null) {\n                    final List<NestedCollectionModel.ModelForCollection> lslocallslocalmodel_mapElement = entry1.getValue();\n                    if (lslocallslocalmodel_mapElement != null) {\n                        jsonGenerator.writeStartArray();\n                        for (NestedCollectionModel.ModelForCollection element2 : lslocallslocalmodel_mapElement) {\n                            if (element2 != null) {\n                                MODEL_GOOD_NESTEDCOLLECTIONMODEL_MODELFORCOLLECTION__JSONOBJECTMAPPER.serialize(element2, jsonGenerator, true);\n                            }\n                        }\n                        jsonGenerator.writeEndArray();\n                    }\n                }\n            }\n            jsonGenerator.writeEndObject();\n        }\n        final Queue<List<NestedCollectionModel.ModelForCollection>> lslocalmodel_queue = object.modelForCollectionQueue;\n        if (lslocalmodel_queue != null) {\n            jsonGenerator.writeFieldName(\"model_queue\");\n            jsonGenerator.writeStartArray();\n            for (List<NestedCollectionModel.ModelForCollection> element1 : lslocalmodel_queue) {\n                if (element1 != null) {\n                    final List<NestedCollectionModel.ModelForCollection> lslocallslocalmodel_queueElement = element1;\n                    if (lslocallslocalmodel_queueElement != null) {\n                        jsonGenerator.writeStartArray();\n                        for (NestedCollectionModel.ModelForCollection element2 : lslocallslocalmodel_queueElement) {\n                            if (element2 != null) {\n                                MODEL_GOOD_NESTEDCOLLECTIONMODEL_MODELFORCOLLECTION__JSONOBJECTMAPPER.serialize(element2, jsonGenerator, true);\n                            }\n                        }\n                        jsonGenerator.writeEndArray();\n                    }\n                }\n            }\n            jsonGenerator.writeEndArray();\n        }\n        final Set<List<NestedCollectionModel.ModelForCollection>> lslocalmodel_set = object.modelForCollectionSet;\n        if (lslocalmodel_set != null) {\n            jsonGenerator.writeFieldName(\"model_set\");\n            jsonGenerator.writeStartArray();\n            for (List<NestedCollectionModel.ModelForCollection> element1 : lslocalmodel_set) {\n                if (element1 != null) {\n                    final List<NestedCollectionModel.ModelForCollection> lslocallslocalmodel_setElement = element1;\n                    if (lslocallslocalmodel_setElement != null) {\n                        jsonGenerator.writeStartArray();\n                        for (NestedCollectionModel.ModelForCollection element2 : lslocallslocalmodel_setElement) {\n                            if (element2 != null) {\n                                MODEL_GOOD_NESTEDCOLLECTIONMODEL_MODELFORCOLLECTION__JSONOBJECTMAPPER.serialize(element2, jsonGenerator, true);\n                            }\n                        }\n                        jsonGenerator.writeEndArray();\n                    }\n                }\n            }\n            jsonGenerator.writeEndArray();\n        }\n        if (writeStartAndEnd) {\n            jsonGenerator.writeEndObject();\n        }\n    }\n}\n"
  },
  {
    "path": "processor/src/test/resources/generated/NonPrivateFieldsAndAccessorsFieldDetectionPolicyModel$$JsonObjectMapper.java",
    "content": "package com.bluelinelabs.logansquare.demo.model;\n\nimport com.bluelinelabs.logansquare.JsonMapper;\nimport com.fasterxml.jackson.core.JsonGenerator;\nimport com.fasterxml.jackson.core.JsonParser;\nimport com.fasterxml.jackson.core.JsonToken;\nimport java.io.IOException;\nimport java.lang.Override;\nimport java.lang.String;\nimport java.lang.SuppressWarnings;\nimport java.util.ArrayList;\nimport java.util.List;\n\n@SuppressWarnings(\"unsafe,unchecked\")\npublic final class NonPrivateFieldsAndAccessorsFieldDetectionPolicyModel$$JsonObjectMapper extends JsonMapper<NonPrivateFieldsAndAccessorsFieldDetectionPolicyModel> {\n    @Override\n    public NonPrivateFieldsAndAccessorsFieldDetectionPolicyModel parse(JsonParser jsonParser) throws IOException {\n        NonPrivateFieldsAndAccessorsFieldDetectionPolicyModel instance = new NonPrivateFieldsAndAccessorsFieldDetectionPolicyModel();\n        if (jsonParser.getCurrentToken() == null) {\n            jsonParser.nextToken();\n        }\n        if (jsonParser.getCurrentToken() != JsonToken.START_OBJECT) {\n            jsonParser.skipChildren();\n            return null;\n        }\n        while (jsonParser.nextToken() != JsonToken.END_OBJECT) {\n            String fieldName = jsonParser.getCurrentName();\n            jsonParser.nextToken();\n            parseField(instance, fieldName, jsonParser);\n            jsonParser.skipChildren();\n        }\n        return instance;\n    }\n\n    @Override\n    public void parseField(NonPrivateFieldsAndAccessorsFieldDetectionPolicyModel instance, String fieldName, JsonParser jsonParser) throws IOException {\n        if (\"annotated_string\".equals(fieldName)) {\n            instance.annotatedString = jsonParser.getValueAsString(null);\n        } else if (\"intToIgnoreForSerialization\".equals(fieldName)){\n            instance.intToIgnoreForSerialization = jsonParser.getValueAsInt();\n        } else if (\"nonAnnotatedList\".equals(fieldName)){\n            if (jsonParser.getCurrentToken() == JsonToken.START_ARRAY) {\n                ArrayList<String> collection1 = new ArrayList<String>();\n                while (jsonParser.nextToken() != JsonToken.END_ARRAY) {\n                    String value1;\n                    value1 = jsonParser.getValueAsString(null);\n                    collection1.add(value1);\n                }\n                instance.nonAnnotatedList = collection1;\n            } else {\n                instance.nonAnnotatedList = null;\n            }\n        } else if (\"nonAnnotatedPrivateInt\".equals(fieldName)){\n            instance.setNonAnnotatedPrivateInt(jsonParser.getValueAsInt());\n        } else if (\"nonAnnotatedString\".equals(fieldName)){\n            instance.nonAnnotatedString = jsonParser.getValueAsString(null);\n        } else if (\"privateStaticIntToInclude\".equals(fieldName)){\n            instance.setPrivateStaticIntToInclude(jsonParser.getValueAsInt());\n        } else if (\"privateTransientIntToInclude\".equals(fieldName)){\n            instance.setPrivateTransientIntToInclude(jsonParser.getValueAsInt());\n        } else if (\"staticIntToInclude\".equals(fieldName)){\n            instance.staticIntToInclude = jsonParser.getValueAsInt();\n        } else if (\"transientIntToInclude\".equals(fieldName)){\n            instance.transientIntToInclude = jsonParser.getValueAsInt();\n        }\n    }\n\n    @Override\n    public void serialize(NonPrivateFieldsAndAccessorsFieldDetectionPolicyModel object, JsonGenerator jsonGenerator, boolean writeStartAndEnd) throws IOException {\n        if (writeStartAndEnd) {\n            jsonGenerator.writeStartObject();\n        }\n        if (object.annotatedString != null) {\n            jsonGenerator.writeStringField(\"annotated_string\", object.annotatedString);\n        }\n        jsonGenerator.writeNumberField(\"intToIgnoreForParse\", object.intToIgnoreForParse);\n        final List<String> lslocalnonAnnotatedList = object.nonAnnotatedList;\n        if (lslocalnonAnnotatedList != null) {\n            jsonGenerator.writeFieldName(\"nonAnnotatedList\");\n            jsonGenerator.writeStartArray();\n            for (String element1 : lslocalnonAnnotatedList) {\n                if (element1 != null) {\n                    jsonGenerator.writeString(element1);\n                }\n            }\n            jsonGenerator.writeEndArray();\n        }\n        jsonGenerator.writeNumberField(\"nonAnnotatedPrivateInt\", object.getNonAnnotatedPrivateInt());\n        if (object.nonAnnotatedString != null) {\n            jsonGenerator.writeStringField(\"nonAnnotatedString\", object.nonAnnotatedString);\n        }\n        jsonGenerator.writeNumberField(\"privateStaticIntToInclude\", object.getPrivateStaticIntToInclude());\n        jsonGenerator.writeNumberField(\"privateTransientIntToInclude\", object.getPrivateTransientIntToInclude());\n        jsonGenerator.writeNumberField(\"staticIntToInclude\", object.staticIntToInclude);\n        jsonGenerator.writeNumberField(\"transientIntToInclude\", object.transientIntToInclude);\n        if (writeStartAndEnd) {\n            jsonGenerator.writeEndObject();\n        }\n    }\n}"
  },
  {
    "path": "processor/src/test/resources/generated/NonPrivateFieldsFieldDetectionPolicyModel$$JsonObjectMapper.java",
    "content": "package com.bluelinelabs.logansquare.demo.model;\n\nimport com.bluelinelabs.logansquare.JsonMapper;\nimport com.fasterxml.jackson.core.JsonGenerator;\nimport com.fasterxml.jackson.core.JsonParser;\nimport com.fasterxml.jackson.core.JsonToken;\nimport java.io.IOException;\nimport java.lang.Override;\nimport java.lang.String;\nimport java.lang.SuppressWarnings;\nimport java.util.ArrayList;\nimport java.util.List;\n\n@SuppressWarnings(\"unsafe,unchecked\")\npublic final class NonPrivateFieldsFieldDetectionPolicyModel$$JsonObjectMapper extends JsonMapper<NonPrivateFieldsFieldDetectionPolicyModel> {\n    @Override\n    public NonPrivateFieldsFieldDetectionPolicyModel parse(JsonParser jsonParser) throws IOException {\n        NonPrivateFieldsFieldDetectionPolicyModel instance = new NonPrivateFieldsFieldDetectionPolicyModel();\n        if (jsonParser.getCurrentToken() == null) {\n            jsonParser.nextToken();\n        }\n        if (jsonParser.getCurrentToken() != JsonToken.START_OBJECT) {\n            jsonParser.skipChildren();\n            return null;\n        }\n        while (jsonParser.nextToken() != JsonToken.END_OBJECT) {\n            String fieldName = jsonParser.getCurrentName();\n            jsonParser.nextToken();\n            parseField(instance, fieldName, jsonParser);\n            jsonParser.skipChildren();\n        }\n        return instance;\n    }\n\n    @Override\n    public void parseField(NonPrivateFieldsFieldDetectionPolicyModel instance, String fieldName, JsonParser jsonParser) throws IOException {\n        if (\"annotated_string\".equals(fieldName)) {\n            instance.annotatedString = jsonParser.getValueAsString(null);\n        } else if (\"intToIgnoreForSerialization\".equals(fieldName)){\n            instance.intToIgnoreForSerialization = jsonParser.getValueAsInt();\n        } else if (\"nonAnnotatedList\".equals(fieldName)){\n            if (jsonParser.getCurrentToken() == JsonToken.START_ARRAY) {\n                ArrayList<String> collection1 = new ArrayList<String>();\n                while (jsonParser.nextToken() != JsonToken.END_ARRAY) {\n                    String value1;\n                    value1 = jsonParser.getValueAsString(null);\n                    collection1.add(value1);\n                }\n                instance.nonAnnotatedList = collection1;\n            } else {\n                instance.nonAnnotatedList = null;\n            }\n        } else if (\"nonAnnotatedString\".equals(fieldName)){\n            instance.nonAnnotatedString = jsonParser.getValueAsString(null);\n        } else if (\"staticIntToInclude\".equals(fieldName)){\n            instance.staticIntToInclude = jsonParser.getValueAsInt();\n        } else if (\"transientIntToInclude\".equals(fieldName)){\n            instance.transientIntToInclude = jsonParser.getValueAsInt();\n        }\n    }\n\n    @Override\n    public void serialize(NonPrivateFieldsFieldDetectionPolicyModel object, JsonGenerator jsonGenerator, boolean writeStartAndEnd) throws IOException {\n        if (writeStartAndEnd) {\n            jsonGenerator.writeStartObject();\n        }\n        if (object.annotatedString != null) {\n            jsonGenerator.writeStringField(\"annotated_string\", object.annotatedString);\n        }\n        jsonGenerator.writeNumberField(\"intToIgnoreForParse\", object.intToIgnoreForParse);\n        final List<String> lslocalnonAnnotatedList = object.nonAnnotatedList;\n        if (lslocalnonAnnotatedList != null) {\n            jsonGenerator.writeFieldName(\"nonAnnotatedList\");\n            jsonGenerator.writeStartArray();\n            for (String element1 : lslocalnonAnnotatedList) {\n                if (element1 != null) {\n                    jsonGenerator.writeString(element1);\n                }\n            }\n            jsonGenerator.writeEndArray();\n        }\n        if (object.nonAnnotatedString != null) {\n            jsonGenerator.writeStringField(\"nonAnnotatedString\", object.nonAnnotatedString);\n        }\n        jsonGenerator.writeNumberField(\"staticIntToInclude\", object.staticIntToInclude);\n        jsonGenerator.writeNumberField(\"transientIntToInclude\", object.transientIntToInclude);\n        if (writeStartAndEnd) {\n            jsonGenerator.writeEndObject();\n        }\n    }\n}"
  },
  {
    "path": "processor/src/test/resources/generated/ParentModel$$JsonObjectMapper.java",
    "content": "package com.bluelinelabs.logansquare.processor;\n\nimport com.bluelinelabs.logansquare.JsonMapper;\nimport com.fasterxml.jackson.core.JsonGenerator;\nimport com.fasterxml.jackson.core.JsonParser;\nimport com.fasterxml.jackson.core.JsonToken;\nimport java.io.IOException;\nimport java.lang.Override;\nimport java.lang.String;\nimport java.lang.SuppressWarnings;\n\n@SuppressWarnings(\"unsafe,unchecked\")\npublic final class ParentModel$$JsonObjectMapper extends JsonMapper<ParentModel> {\n    @Override\n    public ParentModel parse(JsonParser jsonParser) throws IOException {\n        ParentModel instance = new ParentModel();\n        if (jsonParser.getCurrentToken() == null) {\n            jsonParser.nextToken();\n        }\n        if (jsonParser.getCurrentToken() != JsonToken.START_OBJECT) {\n            jsonParser.skipChildren();\n            return null;\n        }\n        while (jsonParser.nextToken() != JsonToken.END_OBJECT) {\n            String fieldName = jsonParser.getCurrentName();\n            jsonParser.nextToken();\n            parseField(instance, fieldName, jsonParser);\n            jsonParser.skipChildren();\n        }\n        return instance;\n    }\n\n    @Override\n    public void parseField(ParentModel instance, String fieldName, JsonParser jsonParser) throws IOException {\n        if (\"parentTestInt\".equals(fieldName)) {\n            instance.parentTestInt = jsonParser.getValueAsInt();\n        }\n    }\n\n    @Override\n    public void serialize(ParentModel object, JsonGenerator jsonGenerator, boolean writeStartAndEnd) throws IOException {\n        if (writeStartAndEnd) {\n            jsonGenerator.writeStartObject();\n        }\n        jsonGenerator.writeNumberField(\"parentTestInt\", object.parentTestInt);\n        if (writeStartAndEnd) {\n            jsonGenerator.writeEndObject();\n        }\n    }\n}\n"
  },
  {
    "path": "processor/src/test/resources/generated/PrePostProcessingModel$$JsonObjectMapper.java",
    "content": "package com.bluelinelabs.logansquare.processor;\n\nimport com.bluelinelabs.logansquare.JsonMapper;\nimport com.fasterxml.jackson.core.JsonGenerator;\nimport com.fasterxml.jackson.core.JsonParser;\nimport com.fasterxml.jackson.core.JsonToken;\nimport java.io.IOException;\nimport java.lang.Override;\nimport java.lang.String;\nimport java.lang.SuppressWarnings;\n\n@SuppressWarnings(\"unsafe,unchecked\")\npublic final class PrePostProcessingModel$$JsonObjectMapper extends JsonMapper<PrePostProcessingModel> {\n    @Override\n    public PrePostProcessingModel parse(JsonParser jsonParser) throws IOException {\n        PrePostProcessingModel instance = new PrePostProcessingModel();\n        if (jsonParser.getCurrentToken() == null) {\n            jsonParser.nextToken();\n        }\n        if (jsonParser.getCurrentToken() != JsonToken.START_OBJECT) {\n            jsonParser.skipChildren();\n            return null;\n        }\n        while (jsonParser.nextToken() != JsonToken.END_OBJECT) {\n            String fieldName = jsonParser.getCurrentName();\n            jsonParser.nextToken();\n            parseField(instance, fieldName, jsonParser);\n            jsonParser.skipChildren();\n        }\n        instance.onParseComplete();\n        return instance;\n    }\n\n    @Override\n    public void parseField(PrePostProcessingModel instance, String fieldName, JsonParser jsonParser) throws IOException {\n        if (\"unformatted_string\".equals(fieldName)) {\n            instance.unformattedString = jsonParser.getValueAsString(null);\n        }\n    }\n\n    @Override\n    public void serialize(PrePostProcessingModel object, JsonGenerator jsonGenerator, boolean writeStartAndEnd) throws IOException {\n        object.onPreSerialize();\n        if (writeStartAndEnd) {\n            jsonGenerator.writeStartObject();\n        }\n        if (object.unformattedString != null) {\n            jsonGenerator.writeStringField(\"unformatted_string\", object.unformattedString);\n        }\n        if (writeStartAndEnd) {\n            jsonGenerator.writeEndObject();\n        }\n    }\n}\n"
  },
  {
    "path": "processor/src/test/resources/generated/PrivateFieldModel$$JsonObjectMapper.java",
    "content": "package com.bluelinelabs.logansquare.processor;\n\nimport com.bluelinelabs.logansquare.JsonMapper;\nimport com.fasterxml.jackson.core.JsonGenerator;\nimport com.fasterxml.jackson.core.JsonParser;\nimport com.fasterxml.jackson.core.JsonToken;\nimport java.io.IOException;\nimport java.lang.Override;\nimport java.lang.String;\nimport java.lang.SuppressWarnings;\nimport java.util.ArrayList;\nimport java.util.HashMap;\nimport java.util.List;\nimport java.util.Map;\n\n@SuppressWarnings(\"unsafe,unchecked\")\npublic final class PrivateFieldModel$$JsonObjectMapper extends JsonMapper<PrivateFieldModel> {\n    @Override\n    public PrivateFieldModel parse(JsonParser jsonParser) throws IOException {\n        PrivateFieldModel instance = new PrivateFieldModel();\n        if (jsonParser.getCurrentToken() == null) {\n            jsonParser.nextToken();\n        }\n        if (jsonParser.getCurrentToken() != JsonToken.START_OBJECT) {\n            jsonParser.skipChildren();\n            return null;\n        }\n        while (jsonParser.nextToken() != JsonToken.END_OBJECT) {\n            String fieldName = jsonParser.getCurrentName();\n            jsonParser.nextToken();\n            parseField(instance, fieldName, jsonParser);\n            jsonParser.skipChildren();\n        }\n        return instance;\n    }\n\n    @Override\n    public void parseField(PrivateFieldModel instance, String fieldName, JsonParser jsonParser) throws IOException {\n        if (\"string_to_test_m_vars\".equals(fieldName)) {\n            instance.setStringThatStartsWithM(jsonParser.getValueAsString(null));\n        } else if (\"privateBoolean\".equals(fieldName)){\n            instance.setPrivateBoolean(jsonParser.getValueAsBoolean());\n        } else if (\"privateList\".equals(fieldName)){\n            if (jsonParser.getCurrentToken() == JsonToken.START_ARRAY) {\n                ArrayList<String> collection1 = new ArrayList<String>();\n                while (jsonParser.nextToken() != JsonToken.END_ARRAY) {\n                    String value1;\n                    value1 = jsonParser.getValueAsString(null);\n                    collection1.add(value1);\n                }\n                instance.setPrivateList(collection1);\n            } else {\n                instance.setPrivateList(null);\n            }\n        } else if (\"privateMap\".equals(fieldName)){\n            if (jsonParser.getCurrentToken() == JsonToken.START_OBJECT) {\n                HashMap<String, String> map1 = new HashMap<String, String>();\n                while (jsonParser.nextToken() != JsonToken.END_OBJECT) {\n                    String key1 = jsonParser.getText();\n                    jsonParser.nextToken();\n                    if (jsonParser.getCurrentToken() == JsonToken.VALUE_NULL) {\n                        map1.put(key1, null);\n                    } else{\n                        map1.put(key1, jsonParser.getValueAsString(null));\n                    }\n                }\n                instance.setPrivateMap(map1);\n            } else {\n                instance.setPrivateMap(null);\n            }\n        } else if (\"private_named_string\".equals(fieldName)){\n            instance.setPrivateNamedString(jsonParser.getValueAsString(null));\n        } else if (\"privateString\".equals(fieldName)){\n            instance.setPrivateString(jsonParser.getValueAsString(null));\n        }\n    }\n\n    @Override\n    public void serialize(PrivateFieldModel object, JsonGenerator jsonGenerator, boolean writeStartAndEnd) throws IOException {\n        if (writeStartAndEnd) {\n            jsonGenerator.writeStartObject();\n        }\n        if (object.getStringThatStartsWithM() != null) {\n            jsonGenerator.writeStringField(\"string_to_test_m_vars\", object.getStringThatStartsWithM());\n        }\n        jsonGenerator.writeBooleanField(\"privateBoolean\", object.isPrivateBoolean());\n        final List<String> lslocalprivateList = object.getPrivateList();\n        if (lslocalprivateList != null) {\n            jsonGenerator.writeFieldName(\"privateList\");\n            jsonGenerator.writeStartArray();\n            for (String element1 : lslocalprivateList) {\n                if (element1 != null) {\n                    jsonGenerator.writeString(element1);\n                }\n            }\n            jsonGenerator.writeEndArray();\n        }\n        final Map<String, String> lslocalprivateMap = object.getPrivateMap();\n        if (lslocalprivateMap != null) {\n            jsonGenerator.writeFieldName(\"privateMap\");\n            jsonGenerator.writeStartObject();\n            for (Map.Entry<String, String> entry1 : lslocalprivateMap.entrySet()) {\n                jsonGenerator.writeFieldName(entry1.getKey().toString());\n                if (entry1.getValue() != null) {\n                    jsonGenerator.writeString(entry1.getValue());\n                }\n            }\n            jsonGenerator.writeEndObject();\n        }\n        if (object.getPrivateNamedString() != null) {\n            jsonGenerator.writeStringField(\"private_named_string\", object.getPrivateNamedString());\n        }\n        if (object.getPrivateString() != null) {\n            jsonGenerator.writeStringField(\"privateString\", object.getPrivateString());\n        }\n        if (writeStartAndEnd) {\n            jsonGenerator.writeEndObject();\n        }\n    }\n}"
  },
  {
    "path": "processor/src/test/resources/generated/SimpleCollectionModel$$JsonObjectMapper.java",
    "content": "package com.bluelinelabs.logansquare.processor;\n\nimport com.bluelinelabs.logansquare.JsonMapper;\nimport com.bluelinelabs.logansquare.LoganSquare;\nimport com.fasterxml.jackson.core.JsonGenerator;\nimport com.fasterxml.jackson.core.JsonParser;\nimport com.fasterxml.jackson.core.JsonToken;\nimport java.io.IOException;\nimport java.lang.Integer;\nimport java.lang.Override;\nimport java.lang.String;\nimport java.lang.SuppressWarnings;\nimport java.util.ArrayDeque;\nimport java.util.ArrayList;\nimport java.util.HashMap;\nimport java.util.HashSet;\nimport java.util.LinkedHashMap;\nimport java.util.LinkedList;\nimport java.util.List;\nimport java.util.Map;\nimport java.util.Queue;\nimport java.util.Set;\nimport java.util.TreeMap;\n\n@SuppressWarnings(\"unsafe,unchecked\")\npublic final class SimpleCollectionModel$$JsonObjectMapper extends JsonMapper<SimpleCollectionModel> {\n    private static final JsonMapper<SimpleCollectionModel.ModelForCollection> COM_BLUELINELABS_LOGANSQUARE_PROCESSOR_SIMPLECOLLECTIONMODEL_MODELFORCOLLECTION__JSONOBJECTMAPPER = LoganSquare.mapperFor(SimpleCollectionModel.ModelForCollection.class);\n\n    @Override\n    public SimpleCollectionModel parse(JsonParser jsonParser) throws IOException {\n        SimpleCollectionModel instance = new SimpleCollectionModel();\n        if (jsonParser.getCurrentToken() == null) {\n            jsonParser.nextToken();\n        }\n        if (jsonParser.getCurrentToken() != JsonToken.START_OBJECT) {\n            jsonParser.skipChildren();\n            return null;\n        }\n        while (jsonParser.nextToken() != JsonToken.END_OBJECT) {\n            String fieldName = jsonParser.getCurrentName();\n            jsonParser.nextToken();\n            parseField(instance, fieldName, jsonParser);\n            jsonParser.skipChildren();\n        }\n        return instance;\n    }\n\n    @Override\n    public void parseField(SimpleCollectionModel instance, String fieldName, JsonParser jsonParser) throws IOException {\n        if (\"model_array\".equals(fieldName)) {\n            if (jsonParser.getCurrentToken() == JsonToken.START_ARRAY) {\n                List<SimpleCollectionModel.ModelForCollection> collection1 = new ArrayList<SimpleCollectionModel.ModelForCollection>();\n                while (jsonParser.nextToken() != JsonToken.END_ARRAY) {\n                    SimpleCollectionModel.ModelForCollection value1;\n                    value1 = COM_BLUELINELABS_LOGANSQUARE_PROCESSOR_SIMPLECOLLECTIONMODEL_MODELFORCOLLECTION__JSONOBJECTMAPPER.parse(jsonParser);\n                    collection1.add(value1);\n                }\n                SimpleCollectionModel.ModelForCollection[] array = collection1.toArray(new SimpleCollectionModel.ModelForCollection[collection1.size()]);\n                instance.modelForCollectionArray = array;\n            } else{\n                instance.modelForCollectionArray = null;\n            }\n        } else if (\"model_array_list\".equals(fieldName)){\n            if (jsonParser.getCurrentToken() == JsonToken.START_ARRAY) {\n                ArrayList<SimpleCollectionModel.ModelForCollection> collection1 = new ArrayList<SimpleCollectionModel.ModelForCollection>();\n                while (jsonParser.nextToken() != JsonToken.END_ARRAY) {\n                    SimpleCollectionModel.ModelForCollection value1;\n                    value1 = COM_BLUELINELABS_LOGANSQUARE_PROCESSOR_SIMPLECOLLECTIONMODEL_MODELFORCOLLECTION__JSONOBJECTMAPPER.parse(jsonParser);\n                    collection1.add(value1);\n                }\n                instance.modelForCollectionArrayList = collection1;\n            } else{\n                instance.modelForCollectionArrayList = null;\n            }\n        } else if (\"model_deque\".equals(fieldName)){\n            if (jsonParser.getCurrentToken() == JsonToken.START_ARRAY) {\n                ArrayDeque<SimpleCollectionModel.ModelForCollection> collection1 = new ArrayDeque<SimpleCollectionModel.ModelForCollection>();\n                while (jsonParser.nextToken() != JsonToken.END_ARRAY) {\n                    SimpleCollectionModel.ModelForCollection value1;\n                    value1 = COM_BLUELINELABS_LOGANSQUARE_PROCESSOR_SIMPLECOLLECTIONMODEL_MODELFORCOLLECTION__JSONOBJECTMAPPER.parse(jsonParser);\n                    collection1.add(value1);\n                }\n                instance.modelForCollectionDeque = collection1;\n            } else{\n                instance.modelForCollectionDeque = null;\n            }\n        } else if (\"model_hash_map\".equals(fieldName)){\n            if (jsonParser.getCurrentToken() == JsonToken.START_OBJECT) {\n                HashMap<String, SimpleCollectionModel.ModelForCollection> map1 = new HashMap<String, SimpleCollectionModel.ModelForCollection>();\n                while (jsonParser.nextToken() != JsonToken.END_OBJECT) {\n                    String key1 = jsonParser.getText();\n                    jsonParser.nextToken();\n                    if (jsonParser.getCurrentToken() == JsonToken.VALUE_NULL) {\n                        map1.put(key1, null);\n                    } else{\n                        map1.put(key1, COM_BLUELINELABS_LOGANSQUARE_PROCESSOR_SIMPLECOLLECTIONMODEL_MODELFORCOLLECTION__JSONOBJECTMAPPER.parse(jsonParser));\n                    }\n                }\n                instance.modelForCollectionHashMap = map1;\n            } else{\n                instance.modelForCollectionHashMap = null;\n            }\n        } else if (\"model_linked_hash_map\".equals(fieldName)){\n            if (jsonParser.getCurrentToken() == JsonToken.START_OBJECT) {\n                LinkedHashMap<String, SimpleCollectionModel.ModelForCollection> map1 = new LinkedHashMap<String, SimpleCollectionModel.ModelForCollection>();\n                while (jsonParser.nextToken() != JsonToken.END_OBJECT) {\n                    String key1 = jsonParser.getText();\n                    jsonParser.nextToken();\n                    if (jsonParser.getCurrentToken() == JsonToken.VALUE_NULL) {\n                        map1.put(key1, null);\n                    } else{\n                        map1.put(key1, COM_BLUELINELABS_LOGANSQUARE_PROCESSOR_SIMPLECOLLECTIONMODEL_MODELFORCOLLECTION__JSONOBJECTMAPPER.parse(jsonParser));\n                    }\n                }\n                instance.modelForCollectionLinkedHashMap = map1;\n            } else{\n                instance.modelForCollectionLinkedHashMap = null;\n            }\n        } else if (\"model_linked_list\".equals(fieldName)){\n            if (jsonParser.getCurrentToken() == JsonToken.START_ARRAY) {\n                LinkedList<SimpleCollectionModel.ModelForCollection> collection1 = new LinkedList<SimpleCollectionModel.ModelForCollection>();\n                while (jsonParser.nextToken() != JsonToken.END_ARRAY) {\n                    SimpleCollectionModel.ModelForCollection value1;\n                    value1 = COM_BLUELINELABS_LOGANSQUARE_PROCESSOR_SIMPLECOLLECTIONMODEL_MODELFORCOLLECTION__JSONOBJECTMAPPER.parse(jsonParser);\n                    collection1.add(value1);\n                }\n                instance.modelForCollectionLinkedList = collection1;\n            } else{\n                instance.modelForCollectionLinkedList = null;\n            }\n        } else if (\"model_list\".equals(fieldName)){\n            if (jsonParser.getCurrentToken() == JsonToken.START_ARRAY) {\n                ArrayList<SimpleCollectionModel.ModelForCollection> collection1 = new ArrayList<SimpleCollectionModel.ModelForCollection>();\n                while (jsonParser.nextToken() != JsonToken.END_ARRAY) {\n                    SimpleCollectionModel.ModelForCollection value1;\n                    value1 = COM_BLUELINELABS_LOGANSQUARE_PROCESSOR_SIMPLECOLLECTIONMODEL_MODELFORCOLLECTION__JSONOBJECTMAPPER.parse(jsonParser);\n                    collection1.add(value1);\n                }\n                instance.modelForCollectionList = collection1;\n            } else{\n                instance.modelForCollectionList = null;\n            }\n        } else if (\"model_map\".equals(fieldName)){\n            if (jsonParser.getCurrentToken() == JsonToken.START_OBJECT) {\n                HashMap<String, SimpleCollectionModel.ModelForCollection> map1 = new HashMap<String, SimpleCollectionModel.ModelForCollection>();\n                while (jsonParser.nextToken() != JsonToken.END_OBJECT) {\n                    String key1 = jsonParser.getText();\n                    jsonParser.nextToken();\n                    if (jsonParser.getCurrentToken() == JsonToken.VALUE_NULL) {\n                        map1.put(key1, null);\n                    } else{\n                        map1.put(key1, COM_BLUELINELABS_LOGANSQUARE_PROCESSOR_SIMPLECOLLECTIONMODEL_MODELFORCOLLECTION__JSONOBJECTMAPPER.parse(jsonParser));\n                    }\n                }\n                instance.modelForCollectionMap = map1;\n            } else{\n                instance.modelForCollectionMap = null;\n            }\n        } else if (\"model_queue\".equals(fieldName)){\n            if (jsonParser.getCurrentToken() == JsonToken.START_ARRAY) {\n                ArrayDeque<SimpleCollectionModel.ModelForCollection> collection1 = new ArrayDeque<SimpleCollectionModel.ModelForCollection>();\n                while (jsonParser.nextToken() != JsonToken.END_ARRAY) {\n                    SimpleCollectionModel.ModelForCollection value1;\n                    value1 = COM_BLUELINELABS_LOGANSQUARE_PROCESSOR_SIMPLECOLLECTIONMODEL_MODELFORCOLLECTION__JSONOBJECTMAPPER.parse(jsonParser);\n                    collection1.add(value1);\n                }\n                instance.modelForCollectionQueue = collection1;\n            } else{\n                instance.modelForCollectionQueue = null;\n            }\n        } else if (\"model_set\".equals(fieldName)){\n            if (jsonParser.getCurrentToken() == JsonToken.START_ARRAY) {\n                HashSet<SimpleCollectionModel.ModelForCollection> collection1 = new HashSet<SimpleCollectionModel.ModelForCollection>();\n                while (jsonParser.nextToken() != JsonToken.END_ARRAY) {\n                    SimpleCollectionModel.ModelForCollection value1;\n                    value1 = COM_BLUELINELABS_LOGANSQUARE_PROCESSOR_SIMPLECOLLECTIONMODEL_MODELFORCOLLECTION__JSONOBJECTMAPPER.parse(jsonParser);\n                    collection1.add(value1);\n                }\n                instance.modelForCollectionSet = collection1;\n            } else{\n                instance.modelForCollectionSet = null;\n            }\n        } else if (\"model_tree_map\".equals(fieldName)){\n            if (jsonParser.getCurrentToken() == JsonToken.START_OBJECT) {\n                TreeMap<String, SimpleCollectionModel.ModelForCollection> map1 = new TreeMap<String, SimpleCollectionModel.ModelForCollection>();\n                while (jsonParser.nextToken() != JsonToken.END_OBJECT) {\n                    String key1 = jsonParser.getText();\n                    jsonParser.nextToken();\n                    if (jsonParser.getCurrentToken() == JsonToken.VALUE_NULL) {\n                        map1.put(key1, null);\n                    } else{\n                        map1.put(key1, COM_BLUELINELABS_LOGANSQUARE_PROCESSOR_SIMPLECOLLECTIONMODEL_MODELFORCOLLECTION__JSONOBJECTMAPPER.parse(jsonParser));\n                    }\n                }\n                instance.modelForCollectionTreeMap = map1;\n            } else{\n                instance.modelForCollectionTreeMap = null;\n            }\n        } else if (\"primitive_array\".equals(fieldName)){\n            if (jsonParser.getCurrentToken() == JsonToken.START_ARRAY) {\n                List<Integer> collection1 = new ArrayList<Integer>();\n                while (jsonParser.nextToken() != JsonToken.END_ARRAY) {\n                    collection1.add(jsonParser.getValueAsInt());\n                }\n                int[] array = new int[collection1.size()];\n                int i = 0;\n                for (int value : collection1) {\n                    array[i++] = value;\n                }\n                instance.primitiveArray = array;\n            } else{\n                instance.primitiveArray = null;\n            }\n        }\n    }\n\n    @Override\n    public void serialize(SimpleCollectionModel object, JsonGenerator jsonGenerator, boolean writeStartAndEnd) throws IOException {\n        if (writeStartAndEnd) {\n            jsonGenerator.writeStartObject();\n        }\n        final SimpleCollectionModel.ModelForCollection[] lslocalmodel_array = object.modelForCollectionArray;\n        if (lslocalmodel_array != null) {\n            jsonGenerator.writeFieldName(\"model_array\");\n            jsonGenerator.writeStartArray();\n            for (SimpleCollectionModel.ModelForCollection element1 : lslocalmodel_array) {\n                if (element1 != null) {\n                    COM_BLUELINELABS_LOGANSQUARE_PROCESSOR_SIMPLECOLLECTIONMODEL_MODELFORCOLLECTION__JSONOBJECTMAPPER.serialize(element1, jsonGenerator, true);\n                }\n            }\n            jsonGenerator.writeEndArray();\n        }\n        final List<SimpleCollectionModel.ModelForCollection> lslocalmodel_array_list = object.modelForCollectionArrayList;\n        if (lslocalmodel_array_list != null) {\n            jsonGenerator.writeFieldName(\"model_array_list\");\n            jsonGenerator.writeStartArray();\n            for (SimpleCollectionModel.ModelForCollection element1 : lslocalmodel_array_list) {\n                if (element1 != null) {\n                    COM_BLUELINELABS_LOGANSQUARE_PROCESSOR_SIMPLECOLLECTIONMODEL_MODELFORCOLLECTION__JSONOBJECTMAPPER.serialize(element1, jsonGenerator, true);\n                }\n            }\n            jsonGenerator.writeEndArray();\n        }\n        final Queue<SimpleCollectionModel.ModelForCollection> lslocalmodel_deque = object.modelForCollectionDeque;\n        if (lslocalmodel_deque != null) {\n            jsonGenerator.writeFieldName(\"model_deque\");\n            jsonGenerator.writeStartArray();\n            for (SimpleCollectionModel.ModelForCollection element1 : lslocalmodel_deque) {\n                if (element1 != null) {\n                    COM_BLUELINELABS_LOGANSQUARE_PROCESSOR_SIMPLECOLLECTIONMODEL_MODELFORCOLLECTION__JSONOBJECTMAPPER.serialize(element1, jsonGenerator, true);\n                }\n            }\n            jsonGenerator.writeEndArray();\n        }\n        final Map<String, SimpleCollectionModel.ModelForCollection> lslocalmodel_hash_map = object.modelForCollectionHashMap;\n        if (lslocalmodel_hash_map != null) {\n            jsonGenerator.writeFieldName(\"model_hash_map\");\n            jsonGenerator.writeStartObject();\n            for (Map.Entry<String, SimpleCollectionModel.ModelForCollection> entry1 : lslocalmodel_hash_map.entrySet()) {\n                jsonGenerator.writeFieldName(entry1.getKey().toString());\n                if (entry1.getValue() != null) {\n                    COM_BLUELINELABS_LOGANSQUARE_PROCESSOR_SIMPLECOLLECTIONMODEL_MODELFORCOLLECTION__JSONOBJECTMAPPER.serialize(entry1.getValue(), jsonGenerator, true);\n                }\n            }\n            jsonGenerator.writeEndObject();\n        }\n        final Map<String, SimpleCollectionModel.ModelForCollection> lslocalmodel_linked_hash_map = object.modelForCollectionLinkedHashMap;\n        if (lslocalmodel_linked_hash_map != null) {\n            jsonGenerator.writeFieldName(\"model_linked_hash_map\");\n            jsonGenerator.writeStartObject();\n            for (Map.Entry<String, SimpleCollectionModel.ModelForCollection> entry1 : lslocalmodel_linked_hash_map.entrySet()) {\n                jsonGenerator.writeFieldName(entry1.getKey().toString());\n                if (entry1.getValue() != null) {\n                    COM_BLUELINELABS_LOGANSQUARE_PROCESSOR_SIMPLECOLLECTIONMODEL_MODELFORCOLLECTION__JSONOBJECTMAPPER.serialize(entry1.getValue(), jsonGenerator, true);\n                }\n            }\n            jsonGenerator.writeEndObject();\n        }\n        final List<SimpleCollectionModel.ModelForCollection> lslocalmodel_linked_list = object.modelForCollectionLinkedList;\n        if (lslocalmodel_linked_list != null) {\n            jsonGenerator.writeFieldName(\"model_linked_list\");\n            jsonGenerator.writeStartArray();\n            for (SimpleCollectionModel.ModelForCollection element1 : lslocalmodel_linked_list) {\n                if (element1 != null) {\n                    COM_BLUELINELABS_LOGANSQUARE_PROCESSOR_SIMPLECOLLECTIONMODEL_MODELFORCOLLECTION__JSONOBJECTMAPPER.serialize(element1, jsonGenerator, true);\n                }\n            }\n            jsonGenerator.writeEndArray();\n        }\n        final List<SimpleCollectionModel.ModelForCollection> lslocalmodel_list = object.modelForCollectionList;\n        if (lslocalmodel_list != null) {\n            jsonGenerator.writeFieldName(\"model_list\");\n            jsonGenerator.writeStartArray();\n            for (SimpleCollectionModel.ModelForCollection element1 : lslocalmodel_list) {\n                if (element1 != null) {\n                    COM_BLUELINELABS_LOGANSQUARE_PROCESSOR_SIMPLECOLLECTIONMODEL_MODELFORCOLLECTION__JSONOBJECTMAPPER.serialize(element1, jsonGenerator, true);\n                }\n            }\n            jsonGenerator.writeEndArray();\n        }\n        final Map<String, SimpleCollectionModel.ModelForCollection> lslocalmodel_map = object.modelForCollectionMap;\n        if (lslocalmodel_map != null) {\n            jsonGenerator.writeFieldName(\"model_map\");\n            jsonGenerator.writeStartObject();\n            for (Map.Entry<String, SimpleCollectionModel.ModelForCollection> entry1 : lslocalmodel_map.entrySet()) {\n                jsonGenerator.writeFieldName(entry1.getKey().toString());\n                if (entry1.getValue() != null) {\n                    COM_BLUELINELABS_LOGANSQUARE_PROCESSOR_SIMPLECOLLECTIONMODEL_MODELFORCOLLECTION__JSONOBJECTMAPPER.serialize(entry1.getValue(), jsonGenerator, true);\n                }\n            }\n            jsonGenerator.writeEndObject();\n        }\n        final Queue<SimpleCollectionModel.ModelForCollection> lslocalmodel_queue = object.modelForCollectionQueue;\n        if (lslocalmodel_queue != null) {\n            jsonGenerator.writeFieldName(\"model_queue\");\n            jsonGenerator.writeStartArray();\n            for (SimpleCollectionModel.ModelForCollection element1 : lslocalmodel_queue) {\n                if (element1 != null) {\n                    COM_BLUELINELABS_LOGANSQUARE_PROCESSOR_SIMPLECOLLECTIONMODEL_MODELFORCOLLECTION__JSONOBJECTMAPPER.serialize(element1, jsonGenerator, true);\n                }\n            }\n            jsonGenerator.writeEndArray();\n        }\n        final Set<SimpleCollectionModel.ModelForCollection> lslocalmodel_set = object.modelForCollectionSet;\n        if (lslocalmodel_set != null) {\n            jsonGenerator.writeFieldName(\"model_set\");\n            jsonGenerator.writeStartArray();\n            for (SimpleCollectionModel.ModelForCollection element1 : lslocalmodel_set) {\n                if (element1 != null) {\n                    COM_BLUELINELABS_LOGANSQUARE_PROCESSOR_SIMPLECOLLECTIONMODEL_MODELFORCOLLECTION__JSONOBJECTMAPPER.serialize(element1, jsonGenerator, true);\n                }\n            }\n            jsonGenerator.writeEndArray();\n        }\n        final Map<String, SimpleCollectionModel.ModelForCollection> lslocalmodel_tree_map = object.modelForCollectionTreeMap;\n        if (lslocalmodel_tree_map != null) {\n            jsonGenerator.writeFieldName(\"model_tree_map\");\n            jsonGenerator.writeStartObject();\n            for (Map.Entry<String, SimpleCollectionModel.ModelForCollection> entry1 : lslocalmodel_tree_map.entrySet()) {\n                jsonGenerator.writeFieldName(entry1.getKey().toString());\n                if (entry1.getValue() != null) {\n                    COM_BLUELINELABS_LOGANSQUARE_PROCESSOR_SIMPLECOLLECTIONMODEL_MODELFORCOLLECTION__JSONOBJECTMAPPER.serialize(entry1.getValue(), jsonGenerator, true);\n                }\n            }\n            jsonGenerator.writeEndObject();\n        }\n        final int[] lslocalprimitive_array = object.primitiveArray;\n        if (lslocalprimitive_array != null) {\n            jsonGenerator.writeFieldName(\"primitive_array\");\n            jsonGenerator.writeStartArray();\n            for (int element1 : lslocalprimitive_array) {\n                jsonGenerator.writeNumber(element1);\n            }\n            jsonGenerator.writeEndArray();\n        }\n        if (writeStartAndEnd) {\n            jsonGenerator.writeEndObject();\n        }\n    }\n}\n"
  },
  {
    "path": "processor/src/test/resources/generated/SimpleGenericModel$$JsonObjectMapper.java",
    "content": "package com.bluelinelabs.logansquare.processor;\n\nimport com.bluelinelabs.logansquare.JsonMapper;\nimport com.bluelinelabs.logansquare.LoganSquare;\nimport com.bluelinelabs.logansquare.ParameterizedType;\nimport com.bluelinelabs.logansquare.typeconverters.TypeConverter;\nimport com.bluelinelabs.logansquare.util.SimpleArrayMap;\nimport com.fasterxml.jackson.core.JsonGenerator;\nimport com.fasterxml.jackson.core.JsonParser;\nimport com.fasterxml.jackson.core.JsonToken;\nimport java.io.IOException;\nimport java.lang.Override;\nimport java.lang.String;\nimport java.lang.SuppressWarnings;\nimport java.util.Date;\n\n@SuppressWarnings(\"unsafe,unchecked\")\npublic final class SimpleGenericModel$$JsonObjectMapper<T> extends JsonMapper<SimpleGenericModel<T>> {\n  private static TypeConverter<Date> java_util_Date_type_converter;\n\n  private final JsonMapper<T> m84ClassJsonMapper;\n\n  public SimpleGenericModel$$JsonObjectMapper(ParameterizedType type, ParameterizedType TType, SimpleArrayMap<ParameterizedType, JsonMapper> partialMappers) {\n    partialMappers.put(type, this);\n    m84ClassJsonMapper = LoganSquare.mapperFor(TType, partialMappers);\n  }\n\n  @Override\n  public SimpleGenericModel<T> parse(JsonParser jsonParser) throws IOException {\n    SimpleGenericModel<T> instance = new SimpleGenericModel<T>();\n    if (jsonParser.getCurrentToken() == null) {\n      jsonParser.nextToken();\n    }\n    if (jsonParser.getCurrentToken() != JsonToken.START_OBJECT) {\n      jsonParser.skipChildren();\n      return null;\n    }\n    while (jsonParser.nextToken() != JsonToken.END_OBJECT) {\n      String fieldName = jsonParser.getCurrentName();\n      jsonParser.nextToken();\n      parseField(instance, fieldName, jsonParser);\n      jsonParser.skipChildren();\n    }\n    return instance;\n  }\n\n  @Override\n  public void parseField(SimpleGenericModel<T> instance, String fieldName, JsonParser jsonParser) throws IOException {\n    if (\"date\".equals(fieldName)) {\n      instance.date = getjava_util_Date_type_converter().parse(jsonParser);\n    } else if (\"string\".equals(fieldName)) {\n      instance.string = jsonParser.getValueAsString(null);\n    } else if (\"test_double\".equals(fieldName)) {\n      instance.testDouble = jsonParser.getValueAsDouble();\n    } else if (\"test_double_obj\".equals(fieldName)) {\n      instance.testDoubleObj = jsonParser.getCurrentToken() == JsonToken.VALUE_NULL ? null : Double.valueOf(jsonParser.getValueAsDouble());\n    } else if (\"test_float\".equals(fieldName)) {\n      instance.testFloat = (float)jsonParser.getValueAsDouble();\n    } else if (\"test_float_obj\".equals(fieldName)) {\n      instance.testFloatObj = jsonParser.getCurrentToken() == JsonToken.VALUE_NULL ? null : new Float(jsonParser.getValueAsDouble());\n    } else if (\"test_int\".equals(fieldName)) {\n      instance.testInt = jsonParser.getValueAsInt();\n    } else if (\"test_int_obj\".equals(fieldName)) {\n      instance.testIntObj = jsonParser.getCurrentToken() == JsonToken.VALUE_NULL ? null : Integer.valueOf(jsonParser.getValueAsInt());\n    } else if (\"test_long\".equals(fieldName)) {\n      instance.testLong = jsonParser.getValueAsLong();\n    } else if (\"test_long_obj\".equals(fieldName)) {\n      instance.testLongObj = jsonParser.getCurrentToken() == JsonToken.VALUE_NULL ? null : Long.valueOf(jsonParser.getValueAsLong());\n    } else if (\"test_string\".equals(fieldName)) {\n      instance.testString = jsonParser.getValueAsString(null);\n    } else if (\"test_t\".equals(fieldName)) {\n      instance.testT = m84ClassJsonMapper.parse(jsonParser);\n    }\n  }\n\n  @Override\n  public void serialize(SimpleGenericModel<T> object, JsonGenerator jsonGenerator, boolean writeStartAndEnd) throws IOException {\n    if (writeStartAndEnd) {\n      jsonGenerator.writeStartObject();\n    }\n    if (object.date != null) {\n      getjava_util_Date_type_converter().serialize(object.date, \"date\", true, jsonGenerator);\n    }\n    if (object.string != null) {\n      jsonGenerator.writeStringField(\"string\", object.string);\n    }\n    jsonGenerator.writeNumberField(\"test_double\", object.testDouble);\n    if (object.testDoubleObj != null) {\n      jsonGenerator.writeNumberField(\"test_double_obj\", object.testDoubleObj);\n    }\n    jsonGenerator.writeNumberField(\"test_float\", object.testFloat);\n    if (object.testFloatObj != null) {\n      jsonGenerator.writeNumberField(\"test_float_obj\", object.testFloatObj);\n    }\n    jsonGenerator.writeNumberField(\"test_int\", object.testInt);\n    if (object.testIntObj != null) {\n      jsonGenerator.writeNumberField(\"test_int_obj\", object.testIntObj);\n    }\n    jsonGenerator.writeNumberField(\"test_long\", object.testLong);\n    if (object.testLongObj != null) {\n      jsonGenerator.writeNumberField(\"test_long_obj\", object.testLongObj);\n    }\n    if (object.testString != null) {\n      jsonGenerator.writeStringField(\"test_string\", object.testString);\n    }\n    if (object.testT != null) {\n      jsonGenerator.writeFieldName(\"test_t\");\n      m84ClassJsonMapper.serialize(object.testT, jsonGenerator, true);\n    }\n    if (writeStartAndEnd) {\n      jsonGenerator.writeEndObject();\n    }\n  }\n\n  private static final TypeConverter<Date> getjava_util_Date_type_converter() {\n    if (java_util_Date_type_converter == null) {\n      java_util_Date_type_converter = LoganSquare.typeConverterFor(Date.class);\n    }\n    return java_util_Date_type_converter;\n  }\n}"
  },
  {
    "path": "processor/src/test/resources/generated/SimpleGenericModelWithExtends$$JsonObjectMapper.java",
    "content": "package com.bluelinelabs.logansquare.processor;\n\nimport com.bluelinelabs.logansquare.JsonMapper;\nimport com.bluelinelabs.logansquare.LoganSquare;\nimport com.bluelinelabs.logansquare.ParameterizedType;\nimport com.bluelinelabs.logansquare.typeconverters.TypeConverter;\nimport com.bluelinelabs.logansquare.util.SimpleArrayMap;\nimport com.fasterxml.jackson.core.JsonGenerator;\nimport com.fasterxml.jackson.core.JsonParser;\nimport com.fasterxml.jackson.core.JsonToken;\nimport java.io.IOException;\nimport java.lang.Override;\nimport java.lang.String;\nimport java.lang.SuppressWarnings;\nimport java.util.Date;\n\n@SuppressWarnings(\"unsafe,unchecked\")\npublic final class SimpleGenericModelWithExtends$$JsonObjectMapper<T extends String> extends JsonMapper<SimpleGenericModelWithExtends<T>> {\n  private static TypeConverter<Date> java_util_Date_type_converter;\n\n  private final JsonMapper<T> m84ClassJsonMapper;\n\n  public SimpleGenericModelWithExtends$$JsonObjectMapper(ParameterizedType type, ParameterizedType TType, SimpleArrayMap<ParameterizedType, JsonMapper> partialMappers) {\n    partialMappers.put(type, this);\n    m84ClassJsonMapper = LoganSquare.mapperFor(TType, partialMappers);\n  }\n\n  @Override\n  public SimpleGenericModelWithExtends<T> parse(JsonParser jsonParser) throws IOException {\n    SimpleGenericModelWithExtends<T> instance = new SimpleGenericModelWithExtends<T>();\n    if (jsonParser.getCurrentToken() == null) {\n      jsonParser.nextToken();\n    }\n    if (jsonParser.getCurrentToken() != JsonToken.START_OBJECT) {\n      jsonParser.skipChildren();\n      return null;\n    }\n    while (jsonParser.nextToken() != JsonToken.END_OBJECT) {\n      String fieldName = jsonParser.getCurrentName();\n      jsonParser.nextToken();\n      parseField(instance, fieldName, jsonParser);\n      jsonParser.skipChildren();\n    }\n    return instance;\n  }\n\n  @Override\n  public void parseField(SimpleGenericModelWithExtends<T> instance, String fieldName, JsonParser jsonParser) throws IOException {\n    if (\"date\".equals(fieldName)) {\n      instance.date = getjava_util_Date_type_converter().parse(jsonParser);\n    } else if (\"string\".equals(fieldName)) {\n      instance.string = jsonParser.getValueAsString(null);\n    } else if (\"test_double\".equals(fieldName)) {\n      instance.testDouble = jsonParser.getValueAsDouble();\n    } else if (\"test_double_obj\".equals(fieldName)) {\n      instance.testDoubleObj = jsonParser.getCurrentToken() == JsonToken.VALUE_NULL ? null : Double.valueOf(jsonParser.getValueAsDouble());\n    } else if (\"test_float\".equals(fieldName)) {\n      instance.testFloat = (float)jsonParser.getValueAsDouble();\n    } else if (\"test_float_obj\".equals(fieldName)) {\n      instance.testFloatObj = jsonParser.getCurrentToken() == JsonToken.VALUE_NULL ? null : new Float(jsonParser.getValueAsDouble());\n    } else if (\"test_int\".equals(fieldName)) {\n      instance.testInt = jsonParser.getValueAsInt();\n    } else if (\"test_int_obj\".equals(fieldName)) {\n      instance.testIntObj = jsonParser.getCurrentToken() == JsonToken.VALUE_NULL ? null : Integer.valueOf(jsonParser.getValueAsInt());\n    } else if (\"test_long\".equals(fieldName)) {\n      instance.testLong = jsonParser.getValueAsLong();\n    } else if (\"test_long_obj\".equals(fieldName)) {\n      instance.testLongObj = jsonParser.getCurrentToken() == JsonToken.VALUE_NULL ? null : Long.valueOf(jsonParser.getValueAsLong());\n    } else if (\"test_string\".equals(fieldName)) {\n      instance.testString = jsonParser.getValueAsString(null);\n    } else if (\"test_t\".equals(fieldName)) {\n      instance.testT = m84ClassJsonMapper.parse(jsonParser);\n    }\n  }\n\n  @Override\n  public void serialize(SimpleGenericModelWithExtends<T> object, JsonGenerator jsonGenerator, boolean writeStartAndEnd) throws IOException {\n    if (writeStartAndEnd) {\n      jsonGenerator.writeStartObject();\n    }\n    if (object.date != null) {\n      getjava_util_Date_type_converter().serialize(object.date, \"date\", true, jsonGenerator);\n    }\n    if (object.string != null) {\n      jsonGenerator.writeStringField(\"string\", object.string);\n    }\n    jsonGenerator.writeNumberField(\"test_double\", object.testDouble);\n    if (object.testDoubleObj != null) {\n      jsonGenerator.writeNumberField(\"test_double_obj\", object.testDoubleObj);\n    }\n    jsonGenerator.writeNumberField(\"test_float\", object.testFloat);\n    if (object.testFloatObj != null) {\n      jsonGenerator.writeNumberField(\"test_float_obj\", object.testFloatObj);\n    }\n    jsonGenerator.writeNumberField(\"test_int\", object.testInt);\n    if (object.testIntObj != null) {\n      jsonGenerator.writeNumberField(\"test_int_obj\", object.testIntObj);\n    }\n    jsonGenerator.writeNumberField(\"test_long\", object.testLong);\n    if (object.testLongObj != null) {\n      jsonGenerator.writeNumberField(\"test_long_obj\", object.testLongObj);\n    }\n    if (object.testString != null) {\n      jsonGenerator.writeStringField(\"test_string\", object.testString);\n    }\n    if (object.testT != null) {\n      jsonGenerator.writeFieldName(\"test_t\");\n      m84ClassJsonMapper.serialize(object.testT, jsonGenerator, true);\n    }\n    if (writeStartAndEnd) {\n      jsonGenerator.writeEndObject();\n    }\n  }\n\n  private static final TypeConverter<Date> getjava_util_Date_type_converter() {\n    if (java_util_Date_type_converter == null) {\n      java_util_Date_type_converter = LoganSquare.typeConverterFor(Date.class);\n    }\n    return java_util_Date_type_converter;\n  }\n}"
  },
  {
    "path": "processor/src/test/resources/generated/SimpleModel$$JsonObjectMapper.java",
    "content": "package com.bluelinelabs.logansquare.processor;\n\nimport com.bluelinelabs.logansquare.JsonMapper;\nimport com.bluelinelabs.logansquare.LoganSquare;\nimport com.bluelinelabs.logansquare.typeconverters.TypeConverter;\nimport com.fasterxml.jackson.core.JsonGenerator;\nimport com.fasterxml.jackson.core.JsonParser;\nimport com.fasterxml.jackson.core.JsonToken;\nimport java.io.IOException;\nimport java.lang.Object;\nimport java.lang.Override;\nimport java.lang.String;\nimport java.lang.SuppressWarnings;\nimport java.util.ArrayList;\nimport java.util.Date;\nimport java.util.HashMap;\nimport java.util.List;\nimport java.util.Map;\n\n@SuppressWarnings(\"unsafe,unchecked\")\npublic final class SimpleModel$$JsonObjectMapper extends JsonMapper<SimpleModel> {\n    private static final JsonMapper<Object> COM_BLUELINELABS_LOGANSQUARE_INTERNAL_OBJECTMAPPERS_OBJECTMAPPER = LoganSquare.mapperFor(Object.class);\n\n    private static TypeConverter<Date> java_util_Date_type_converter;\n\n    @Override\n    public SimpleModel parse(JsonParser jsonParser) throws IOException {\n        SimpleModel instance = new SimpleModel();\n        if (jsonParser.getCurrentToken() == null) {\n            jsonParser.nextToken();\n        }\n        if (jsonParser.getCurrentToken() != JsonToken.START_OBJECT) {\n            jsonParser.skipChildren();\n            return null;\n        }\n        while (jsonParser.nextToken() != JsonToken.END_OBJECT) {\n            String fieldName = jsonParser.getCurrentName();\n            jsonParser.nextToken();\n            parseField(instance, fieldName, jsonParser);\n            jsonParser.skipChildren();\n        }\n        return instance;\n    }\n\n    @Override\n    public void parseField(SimpleModel instance, String fieldName, JsonParser jsonParser) throws IOException {\n        if (\"date\".equals(fieldName)) {\n            instance.date = getjava_util_Date_type_converter().parse(jsonParser);\n        } else if (\"intToIgnoreForSerialization\".equals(fieldName)){\n            instance.intToIgnoreForSerialization = jsonParser.getValueAsInt();\n        } else if (\"object-array-with-dashes\".equals(fieldName)) {\n            if (jsonParser.getCurrentToken() == JsonToken.START_ARRAY) {\n                List<Object> collection1 = new ArrayList<Object>();\n                while (jsonParser.nextToken() != JsonToken.END_ARRAY) {\n                    Object value1;\n                    value1 = COM_BLUELINELABS_LOGANSQUARE_INTERNAL_OBJECTMAPPERS_OBJECTMAPPER.parse(jsonParser);\n                    collection1.add(value1);\n                }\n                Object[] array = collection1.toArray(new Object[collection1.size()]);\n                instance.objectArrayWithDashes = array;\n            } else {\n                instance.objectArrayWithDashes = null;\n            }\n        } else if (\"object-list-with-dashes\".equals(fieldName)) {\n            if (jsonParser.getCurrentToken() == JsonToken.START_ARRAY) {\n                ArrayList<Object> collection1 = new ArrayList<Object>();\n                while (jsonParser.nextToken() != JsonToken.END_ARRAY) {\n                    Object value1;\n                    value1 = COM_BLUELINELABS_LOGANSQUARE_INTERNAL_OBJECTMAPPERS_OBJECTMAPPER.parse(jsonParser);\n                    collection1.add(value1);\n                }\n                instance.objectListWithDashes = collection1;\n            } else {\n                instance.objectListWithDashes = null;\n            }\n        } else if (\"object_map\".equals(fieldName)) {\n            if (jsonParser.getCurrentToken() == JsonToken.START_OBJECT) {\n                HashMap<String, Object> map1 = new HashMap<String, Object>();\n                while (jsonParser.nextToken() != JsonToken.END_OBJECT) {\n                    String key1 = jsonParser.getText();\n                    jsonParser.nextToken();\n                    if (jsonParser.getCurrentToken() == JsonToken.VALUE_NULL) {\n                        map1.put(key1, null);\n                    } else {\n                        map1.put(key1, COM_BLUELINELABS_LOGANSQUARE_INTERNAL_OBJECTMAPPERS_OBJECTMAPPER.parse(jsonParser));\n                    }\n                }\n                instance.objectMap = map1;\n            } else {\n                instance.objectMap = null;\n            }\n        } else if (\"object-map-with-dashes\".equals(fieldName)) {\n            if (jsonParser.getCurrentToken() == JsonToken.START_OBJECT) {\n                HashMap<String, Object> map1 = new HashMap<String, Object>();\n                while (jsonParser.nextToken() != JsonToken.END_OBJECT) {\n                    String key1 = jsonParser.getText();\n                    jsonParser.nextToken();\n                    if (jsonParser.getCurrentToken() == JsonToken.VALUE_NULL) {\n                        map1.put(key1, null);\n                    } else {\n                        map1.put(key1, COM_BLUELINELABS_LOGANSQUARE_INTERNAL_OBJECTMAPPERS_OBJECTMAPPER.parse(jsonParser));\n                    }\n                }\n                instance.objectMapWithDashes = map1;\n            } else {\n                instance.objectMapWithDashes = null;\n            }\n        } else if (\"string\".equals(fieldName)){\n            instance.string = jsonParser.getValueAsString(null);\n        } else if (\"test_double\".equals(fieldName)){\n            instance.testDouble = jsonParser.getValueAsDouble();\n        } else if (\"test_double_obj\".equals(fieldName)){\n            instance.testDoubleObj = jsonParser.getCurrentToken() == JsonToken.VALUE_NULL ? null : Double.valueOf(jsonParser.getValueAsDouble());\n        } else if (\"test_float\".equals(fieldName)){\n            instance.testFloat = (float)jsonParser.getValueAsDouble();\n        } else if (\"test_float_obj\".equals(fieldName)){\n            instance.testFloatObj = jsonParser.getCurrentToken() == JsonToken.VALUE_NULL ? null : new Float(jsonParser.getValueAsDouble());\n        } else if (\"test_int\".equals(fieldName)){\n            instance.testInt = jsonParser.getValueAsInt();\n        } else if (\"test_int_obj\".equals(fieldName)){\n            instance.testIntObj = jsonParser.getCurrentToken() == JsonToken.VALUE_NULL ? null : Integer.valueOf(jsonParser.getValueAsInt());\n        } else if (\"test_long\".equals(fieldName)){\n            instance.testLong = jsonParser.getValueAsLong();\n        } else if (\"test_long_obj\".equals(fieldName)){\n            instance.testLongObj = jsonParser.getCurrentToken() == JsonToken.VALUE_NULL ? null : Long.valueOf(jsonParser.getValueAsLong());\n        } else if (\"test_string\".equals(fieldName)){\n            instance.testString = jsonParser.getValueAsString(null);\n        }\n    }\n\n    @Override\n    public void serialize(SimpleModel object, JsonGenerator jsonGenerator, boolean writeStartAndEnd) throws IOException {\n        if (writeStartAndEnd) {\n            jsonGenerator.writeStartObject();\n        }\n        if (object.date != null) {\n            getjava_util_Date_type_converter().serialize(object.date, \"date\", true, jsonGenerator);\n        }\n        jsonGenerator.writeNumberField(\"intToIgnoreForParse\", object.intToIgnoreForParse);\n        final Object[] lslocalobject_array_with_dashes = object.objectArrayWithDashes;\n        if (lslocalobject_array_with_dashes != null) {\n            jsonGenerator.writeFieldName(\"object-array-with-dashes\");\n            jsonGenerator.writeStartArray();\n            for (Object element1 : lslocalobject_array_with_dashes) {\n                if (element1 != null) {\n                    COM_BLUELINELABS_LOGANSQUARE_INTERNAL_OBJECTMAPPERS_OBJECTMAPPER.serialize(element1, jsonGenerator, false);\n                }\n            }\n            jsonGenerator.writeEndArray();\n        }\n        final List<Object> lslocalobject_list_with_dashes = object.objectListWithDashes;\n        if (lslocalobject_list_with_dashes != null) {\n            jsonGenerator.writeFieldName(\"object-list-with-dashes\");\n            jsonGenerator.writeStartArray();\n            for (Object element1 : lslocalobject_list_with_dashes) {\n                if (element1 != null) {\n                    COM_BLUELINELABS_LOGANSQUARE_INTERNAL_OBJECTMAPPERS_OBJECTMAPPER.serialize(element1, jsonGenerator, false);\n                }\n            }\n            jsonGenerator.writeEndArray();\n        }\n        final Map<String, Object> lslocalobject_map = object.objectMap;\n        if (lslocalobject_map != null) {\n            jsonGenerator.writeFieldName(\"object_map\");\n            jsonGenerator.writeStartObject();\n            for (Map.Entry<String, Object> entry1 : lslocalobject_map.entrySet()) {\n                jsonGenerator.writeFieldName(entry1.getKey().toString());\n                if (entry1.getValue() != null) {\n                    COM_BLUELINELABS_LOGANSQUARE_INTERNAL_OBJECTMAPPERS_OBJECTMAPPER.serialize(entry1.getValue(), jsonGenerator, false);\n                }\n            }\n            jsonGenerator.writeEndObject();\n        }\n        final Map<String, Object> lslocalobject_map_with_dashes = object.objectMapWithDashes;\n        if (lslocalobject_map_with_dashes != null) {\n            jsonGenerator.writeFieldName(\"object-map-with-dashes\");\n            jsonGenerator.writeStartObject();\n            for (Map.Entry<String, Object> entry1 : lslocalobject_map_with_dashes.entrySet()) {\n                jsonGenerator.writeFieldName(entry1.getKey().toString());\n                if (entry1.getValue() != null) {\n                    COM_BLUELINELABS_LOGANSQUARE_INTERNAL_OBJECTMAPPERS_OBJECTMAPPER.serialize(entry1.getValue(), jsonGenerator, false);\n                }\n            }\n            jsonGenerator.writeEndObject();\n        }\n        if (object.string != null) {\n            jsonGenerator.writeStringField(\"string\", object.string);\n        }\n        jsonGenerator.writeNumberField(\"test_double\", object.testDouble);\n        if (object.testDoubleObj != null) {\n            jsonGenerator.writeNumberField(\"test_double_obj\", object.testDoubleObj);\n        }\n        jsonGenerator.writeNumberField(\"test_float\", object.testFloat);\n        if (object.testFloatObj != null) {\n            jsonGenerator.writeNumberField(\"test_float_obj\", object.testFloatObj);\n        }\n        jsonGenerator.writeNumberField(\"test_int\", object.testInt);\n        if (object.testIntObj != null) {\n            jsonGenerator.writeNumberField(\"test_int_obj\", object.testIntObj);\n        }\n        jsonGenerator.writeNumberField(\"test_long\", object.testLong);\n        if (object.testLongObj != null) {\n            jsonGenerator.writeNumberField(\"test_long_obj\", object.testLongObj);\n        }\n        if (object.testString != null) {\n            jsonGenerator.writeStringField(\"test_string\", object.testString);\n        }\n        if (writeStartAndEnd) {\n            jsonGenerator.writeEndObject();\n        }\n    }\n\n    private static final TypeConverter<Date> getjava_util_Date_type_converter() {\n        if (java_util_Date_type_converter == null) {\n            java_util_Date_type_converter = LoganSquare.typeConverterFor(Date.class);\n        }\n        return java_util_Date_type_converter;\n    }\n}\n"
  },
  {
    "path": "processor/src/test/resources/generated/SimpleWrapperModel$$JsonObjectMapper.java",
    "content": "package com.bluelinelabs.logansquare.processor;\n\nimport com.bluelinelabs.logansquare.JsonMapper;\nimport com.bluelinelabs.logansquare.LoganSquare;\nimport com.fasterxml.jackson.core.JsonGenerator;\nimport com.fasterxml.jackson.core.JsonParser;\nimport com.fasterxml.jackson.core.JsonToken;\nimport java.io.IOException;\nimport java.lang.Override;\nimport java.lang.String;\nimport java.lang.SuppressWarnings;\n\n@SuppressWarnings(\"unsafe,unchecked\")\npublic final class SimpleWrapperModel$$JsonObjectMapper extends JsonMapper<SimpleWrapperModel> {\n    private static final JsonMapper<SimpleWrapperModel.WrappedClass> COM_BLUELINELABS_LOGANSQUARE_PROCESSOR_SIMPLEWRAPPERMODEL_WRAPPEDCLASS__JSONOBJECTMAPPER = LoganSquare.mapperFor(SimpleWrapperModel.WrappedClass.class);\n\n    @Override\n    public SimpleWrapperModel parse(JsonParser jsonParser) throws IOException {\n        SimpleWrapperModel instance = new SimpleWrapperModel();\n        if (jsonParser.getCurrentToken() == null) {\n            jsonParser.nextToken();\n        }\n        if (jsonParser.getCurrentToken() != JsonToken.START_OBJECT) {\n            jsonParser.skipChildren();\n            return null;\n        }\n        while (jsonParser.nextToken() != JsonToken.END_OBJECT) {\n            String fieldName = jsonParser.getCurrentName();\n            jsonParser.nextToken();\n            parseField(instance, fieldName, jsonParser);\n            jsonParser.skipChildren();\n        }\n        return instance;\n    }\n\n    @Override\n    public void parseField(SimpleWrapperModel instance, String fieldName, JsonParser jsonParser) throws IOException {\n        if (\"wrappedObject\".equals(fieldName)) {\n            instance.wrappedObject = COM_BLUELINELABS_LOGANSQUARE_PROCESSOR_SIMPLEWRAPPERMODEL_WRAPPEDCLASS__JSONOBJECTMAPPER.parse(jsonParser);\n        }\n    }\n\n    @Override\n    public void serialize(SimpleWrapperModel object, JsonGenerator jsonGenerator, boolean writeStartAndEnd) throws IOException {\n        if (writeStartAndEnd) {\n            jsonGenerator.writeStartObject();\n        }\n        if (object.wrappedObject != null) {\n            jsonGenerator.writeFieldName(\"wrappedObject\");\n            COM_BLUELINELABS_LOGANSQUARE_PROCESSOR_SIMPLEWRAPPERMODEL_WRAPPEDCLASS__JSONOBJECTMAPPER.serialize(object.wrappedObject, jsonGenerator, true);\n        }\n        if (writeStartAndEnd) {\n            jsonGenerator.writeEndObject();\n        }\n    }\n}\n"
  },
  {
    "path": "processor/src/test/resources/generated/WhitespaceFieldNameModel$$JsonObjectMapper.java",
    "content": "package com.bluelinelabs.logansquare.processor.model;\n\nimport com.bluelinelabs.logansquare.JsonMapper;\nimport com.fasterxml.jackson.core.JsonGenerator;\nimport com.fasterxml.jackson.core.JsonParser;\nimport com.fasterxml.jackson.core.JsonToken;\nimport java.io.IOException;\nimport java.lang.Override;\nimport java.lang.String;\nimport java.lang.SuppressWarnings;\nimport java.util.ArrayList;\nimport java.util.HashMap;\nimport java.util.List;\nimport java.util.Map;\n\n@SuppressWarnings(\"unsafe,unchecked\")\npublic final class WhitespaceFieldNameModel$$JsonObjectMapper extends JsonMapper<WhitespaceFieldNameModel> {\n  @Override\n  public WhitespaceFieldNameModel parse(JsonParser jsonParser) throws IOException {\n    WhitespaceFieldNameModel instance = new WhitespaceFieldNameModel();\n    if (jsonParser.getCurrentToken() == null) {\n      jsonParser.nextToken();\n    }\n    if (jsonParser.getCurrentToken() != JsonToken.START_OBJECT) {\n      jsonParser.skipChildren();\n      return null;\n    }\n    while (jsonParser.nextToken() != JsonToken.END_OBJECT) {\n      String fieldName = jsonParser.getCurrentName();\n      jsonParser.nextToken();\n      parseField(instance, fieldName, jsonParser);\n      jsonParser.skipChildren();\n    }\n    return instance;\n  }\n\n  @Override\n  public void parseField(WhitespaceFieldNameModel instance, String fieldName, JsonParser jsonParser) throws IOException {\n    if (\"Address Lines\".equals(fieldName)) {\n      if (jsonParser.getCurrentToken() == JsonToken.START_ARRAY) {\n        ArrayList<String> collection1 = new ArrayList<String>();\n        while (jsonParser.nextToken() != JsonToken.END_ARRAY) {\n          String value1;\n          value1 = jsonParser.getValueAsString(null);\n          collection1.add(value1);\n        }\n        instance.addressLines = collection1;\n      } else{\n        instance.addressLines = null;\n      }\n    } else if (\"Address-Lines\".equals(fieldName)){\n      if (jsonParser.getCurrentToken() == JsonToken.START_ARRAY) {\n        ArrayList<String> collection1 = new ArrayList<String>();\n        while (jsonParser.nextToken() != JsonToken.END_ARRAY) {\n          String value1;\n          value1 = jsonParser.getValueAsString(null);\n          collection1.add(value1);\n        }\n        instance.addressLinesDuplicate = collection1;\n      } else{\n        instance.addressLinesDuplicate = null;\n      }\n    } else if (\"All Contacts\".equals(fieldName)){\n      if (jsonParser.getCurrentToken() == JsonToken.START_OBJECT) {\n        HashMap<String, String> map1 = new HashMap<String, String>();\n        while (jsonParser.nextToken() != JsonToken.END_OBJECT) {\n          String key1 = jsonParser.getText();\n          jsonParser.nextToken();\n          if (jsonParser.getCurrentToken() == JsonToken.VALUE_NULL) {\n            map1.put(key1, null);\n          } else{\n            map1.put(key1, jsonParser.getValueAsString(null));\n          }\n        }\n        instance.allContacts = map1;\n      } else{\n        instance.allContacts = null;\n      }\n    } else if (\"Full Name\".equals(fieldName)){\n      instance.fullName = jsonParser.getValueAsString(null);\n    } else if (\"Pet Names\".equals(fieldName)){\n      if (jsonParser.getCurrentToken() == JsonToken.START_ARRAY) {\n        List<String> collection1 = new ArrayList<String>();\n        while (jsonParser.nextToken() != JsonToken.END_ARRAY) {\n          String value1;\n          value1 = jsonParser.getValueAsString(null);\n          collection1.add(value1);\n        }\n        String[] array = collection1.toArray(new String[collection1.size()]);\n        instance.petNames = array;\n      } else{\n        instance.petNames = null;\n      }\n    }\n  }\n\n  @Override\n  public void serialize(WhitespaceFieldNameModel object, JsonGenerator jsonGenerator, boolean writeStartAndEnd) throws IOException {\n    if (writeStartAndEnd) {\n      jsonGenerator.writeStartObject();\n    }\n    final List<String> lslocalAddress_Lines = object.addressLines;\n    if (lslocalAddress_Lines != null) {\n      jsonGenerator.writeFieldName(\"Address Lines\");\n      jsonGenerator.writeStartArray();\n      for (String element1 : lslocalAddress_Lines) {\n        if (element1 != null) {\n          jsonGenerator.writeString(element1);\n        }\n      }\n      jsonGenerator.writeEndArray();\n    }\n    final List<String> lslocalAddress_Lines1 = object.addressLinesDuplicate;\n    if (lslocalAddress_Lines1 != null) {\n      jsonGenerator.writeFieldName(\"Address-Lines\");\n      jsonGenerator.writeStartArray();\n      for (String element1 : lslocalAddress_Lines1) {\n        if (element1 != null) {\n          jsonGenerator.writeString(element1);\n        }\n      }\n      jsonGenerator.writeEndArray();\n    }\n    final Map<String, String> lslocalAll_Contacts = object.allContacts;\n    if (lslocalAll_Contacts != null) {\n      jsonGenerator.writeFieldName(\"All Contacts\");\n      jsonGenerator.writeStartObject();\n      for (Map.Entry<String, String> entry1 : lslocalAll_Contacts.entrySet()) {\n        jsonGenerator.writeFieldName(entry1.getKey().toString());\n        if (entry1.getValue() != null) {\n          jsonGenerator.writeString(entry1.getValue());\n        }\n      }\n      jsonGenerator.writeEndObject();\n    }\n    if (object.fullName != null) {\n      jsonGenerator.writeStringField(\"Full Name\", object.fullName);\n    }\n    final String[] lslocalPet_Names = object.petNames;\n    if (lslocalPet_Names != null) {\n      jsonGenerator.writeFieldName(\"Pet Names\");\n      jsonGenerator.writeStartArray();\n      for (String element1 : lslocalPet_Names) {\n        if (element1 != null) {\n          jsonGenerator.writeString(element1);\n        }\n      }\n      jsonGenerator.writeEndArray();\n    }\n    if (writeStartAndEnd) {\n      jsonGenerator.writeEndObject();\n    }\n  }\n}\n"
  },
  {
    "path": "processor/src/test/resources/model/bad/FieldWithoutObjectModel.java",
    "content": "package com.bluelinelabs.logansquare.processor.bad;\n\nimport com.bluelinelabs.logansquare.annotation.JsonField;\n\npublic class FieldWithoutObjectModel {\n\n    @JsonField\n    public String string;\n\n}\n"
  },
  {
    "path": "processor/src/test/resources/model/bad/GenericModel.java",
    "content": "package model.bad;\n\nimport com.bluelinelabs.logansquare.annotation.JsonField;\nimport com.bluelinelabs.logansquare.annotation.JsonObject;\n\n@JsonObject\npublic abstract class GenericModel<T> {\n\n    @JsonField\n    public String string;\n\n}\n"
  },
  {
    "path": "processor/src/test/resources/model/bad/InvalidTypeConverterModel.java",
    "content": "package com.bluelinelabs.logansquare.processor.bad;\n\nimport com.bluelinelabs.logansquare.annotation.JsonField;\nimport com.bluelinelabs.logansquare.annotation.JsonObject;\n\n@JsonObject\npublic class InvalidTypeConverterModel {\n\n    @JsonField(typeConverter = InvalidTypeConverter.class)\n    public UnsupportedType unsupportedType;\n\n    public static class UnsupportedType { }\n\n    public static class InvalidTypeConverter {\n\n    }\n}\n"
  },
  {
    "path": "processor/src/test/resources/model/bad/MethodWithArgsModel.java",
    "content": "package com.bluelinelabs.logansquare.processor.bad;\n\nimport com.bluelinelabs.logansquare.annotation.JsonObject;\nimport com.bluelinelabs.logansquare.annotation.OnJsonParseComplete;\n\n@JsonObject\npublic class MethodWithArgsModel {\n\n    @OnJsonParseComplete\n    public void onParseComplete(String someArg) {\n\n    }\n\n}\n"
  },
  {
    "path": "processor/src/test/resources/model/bad/MethodWithoutObjectModel.java",
    "content": "package com.bluelinelabs.logansquare.processor.bad;\n\nimport com.bluelinelabs.logansquare.annotation.OnJsonParseComplete;\n\npublic class MethodWithoutObjectModel {\n\n\n    @OnJsonParseComplete\n    public void onParseComplete() {\n\n    }\n\n}\n"
  },
  {
    "path": "processor/src/test/resources/model/bad/MultipleMethodsModel.java",
    "content": "package com.bluelinelabs.logansquare.processor.bad;\n\nimport com.bluelinelabs.logansquare.annotation.JsonObject;\nimport com.bluelinelabs.logansquare.annotation.OnJsonParseComplete;\n\n@JsonObject\npublic class MultipleMethodsModel {\n\n    @OnJsonParseComplete\n    public void onParseComplete() {\n\n    }\n\n    @OnJsonParseComplete\n    public void secondOnParseComplete() {\n\n    }\n\n}\n"
  },
  {
    "path": "processor/src/test/resources/model/bad/PrivateFieldModelWithoutAccessors.java",
    "content": "package com.bluelinelabs.logansquare.processor.bad;\n\nimport com.bluelinelabs.logansquare.annotation.JsonField;\nimport com.bluelinelabs.logansquare.annotation.JsonObject;\n\n@JsonObject\npublic class PrivateFieldModelWithoutAccessors {\n\n    @JsonField\n    private String string;\n\n}\n"
  },
  {
    "path": "processor/src/test/resources/model/good/AbstractParentModel.java",
    "content": "package com.bluelinelabs.logansquare.processor;\n\nimport com.bluelinelabs.logansquare.annotation.JsonField;\nimport com.bluelinelabs.logansquare.annotation.JsonObject;\n\n@JsonObject\npublic abstract class AbstractParentModel {\n\n    @JsonField\n    public int parentTestInt;\n\n}\n"
  },
  {
    "path": "processor/src/test/resources/model/good/DateModel.java",
    "content": "package com.bluelinelabs.logansquare.processor;\n\nimport com.bluelinelabs.logansquare.annotation.JsonField;\nimport com.bluelinelabs.logansquare.annotation.JsonObject;\nimport com.bluelinelabs.logansquare.typeconverters.DateTypeConverter;\nimport java.util.Date;\nimport java.text.DateFormat;\nimport java.text.SimpleDateFormat;\n\n@JsonObject\npublic abstract class DateModel {\n\n    @JsonField(typeConverter = MyDateTypeConverter.class)\n    public Date date;\n\n    public static class MyDateTypeConverter extends DateTypeConverter {\n        private DateFormat mDateFormat;\n\n        public MyDateTypeConverter(){\n            mDateFormat = new SimpleDateFormat(\"yyy-MM-dd'T'HH:mm:ss.SSSZ\");\n        }\n\n        @Override\n        public DateFormat getDateFormat() {\n            return mDateFormat;\n        }\n\n    }\n}"
  },
  {
    "path": "processor/src/test/resources/model/good/EnumModel.java",
    "content": "package com.bluelinelabs.logansquare.processor;\n\nimport com.bluelinelabs.logansquare.annotation.JsonField;\nimport com.bluelinelabs.logansquare.annotation.JsonObject;\nimport com.bluelinelabs.logansquare.typeconverters.StringBasedTypeConverter;\n\n@JsonObject\npublic abstract class EnumModel {\n\n    public enum MyEnum {\n        VALUE_1,\n        VALUE_2,\n        VALUE_3\n    }\n\n    @JsonField(name = \"enum\", typeConverter = EnumTypeConverter.class)\n    public MyEnum myEnum;\n\n    public static class EnumTypeConverter extends StringBasedTypeConverter<MyEnum> {\n        @Override\n        public MyEnum getFromString(String string) {\n            switch (string) {\n                case \"value1\":\n                    return MyEnum.VALUE_1;\n                case \"value2\":\n                    return MyEnum.VALUE_2;\n                case \"value3\":\n                    return MyEnum.VALUE_3;\n                default:\n                    return null;\n            }\n        }\n\n        @Override\n        public String convertToString(MyEnum object) {\n            switch (object) {\n                case VALUE_1:\n                    return \"value1\";\n                case VALUE_2:\n                    return \"value2\";\n                case VALUE_3:\n                    return \"value3\";\n                default:\n                    return null;\n            }\n        }\n    }\n}"
  },
  {
    "path": "processor/src/test/resources/model/good/LowerCaseNamingPolicyModel.java",
    "content": "package com.bluelinelabs.logansquare.processor;\n\nimport com.bluelinelabs.logansquare.annotation.JsonField;\nimport com.bluelinelabs.logansquare.annotation.JsonObject;\nimport com.bluelinelabs.logansquare.annotation.JsonObject.FieldNamingPolicy;\nimport com.bluelinelabs.logansquare.typeconverters.StringBasedTypeConverter;\n\nimport java.util.List;\n\n@JsonObject(fieldNamingPolicy = FieldNamingPolicy.LOWER_CASE_WITH_UNDERSCORES)\npublic class LowerCaseNamingPolicyModel {\n\n    @JsonField\n    public String camelCaseString;\n\n    @JsonField\n    public List<String> camelCaseList;\n\n}\n"
  },
  {
    "path": "processor/src/test/resources/model/good/MultipleFieldNamesModel.java",
    "content": "package com.bluelinelabs.logansquare.processor;\n\nimport com.bluelinelabs.logansquare.annotation.JsonField;\nimport com.bluelinelabs.logansquare.annotation.JsonObject;\n\n@JsonObject\npublic class MultipleFieldNamesModel {\n\n    @JsonField(name = {\"possible_int_name_1\", \"possible_int_name_2\"})\n    public int testInt;\n\n    @JsonField(name = {\"possible_long_name_1\", \"possible_long_name_2\"})\n    public long testLong;\n\n    @JsonField(name = {\"possible_float_name_1\", \"possible_float_name_2\"})\n    public float testFloat;\n\n    @JsonField(name = {\"possible_double_name_1\", \"possible_double_name_2\"})\n    public double testDouble;\n\n    @JsonField(name = {\"possible_string_name_1\", \"possible_string_name_2\"})\n    public String testString;\n\n}\n"
  },
  {
    "path": "processor/src/test/resources/model/good/NestedCollectionModel.java",
    "content": "package model.good;\n\nimport com.bluelinelabs.logansquare.annotation.JsonField;\nimport com.bluelinelabs.logansquare.annotation.JsonObject;\n\nimport java.util.ArrayList;\nimport java.util.Deque;\nimport java.util.List;\nimport java.util.Map;\nimport java.util.Queue;\nimport java.util.Set;\n\n@JsonObject\npublic class NestedCollectionModel {\n\n    @JsonField(name = \"model_list\")\n    public List<List<ModelForCollection>> modelForCollectionList;\n\n    @JsonField(name = \"model_set\")\n    public Set<List<ModelForCollection>> modelForCollectionSet;\n\n    @JsonField(name = \"model_queue\")\n    public Queue<List<ModelForCollection>> modelForCollectionQueue;\n\n    @JsonField(name = \"model_deque\")\n    public Deque<List<ModelForCollection>> modelForCollectionDeque;\n\n    @JsonField(name = \"model_map\")\n    public Map<String, List<ModelForCollection>> modelForCollectionMap;\n\n    @JsonField\n    public List<String[]> arrayList;\n\n    @JsonField\n    public List<List<Map<String, ModelForCollection>>[]> complexArray;\n\n    @JsonField\n    public List<List<Map<String, ModelForCollection[]>>[]> complexerArray;\n\n    @JsonField\n    public Map<String, Map<String, ArrayList<List<Map<String, ModelForCollection>>>>> dontKnowWhatImDoingMap;\n\n    @JsonField\n    public List<List<List<ArrayList<ModelForCollection>>>> dontKnowWhatImDoingList;\n\n    @JsonObject\n    public static class ModelForCollection {\n\n        @JsonField\n        public String name;\n\n    }\n}"
  },
  {
    "path": "processor/src/test/resources/model/good/NonPrivateFieldsAndAccessorsFieldDetectionPolicyModel.java",
    "content": "package com.bluelinelabs.logansquare.demo.model;\n\nimport com.bluelinelabs.logansquare.annotation.JsonField;\nimport com.bluelinelabs.logansquare.annotation.JsonIgnore;\nimport com.bluelinelabs.logansquare.annotation.JsonIgnore.IgnorePolicy;\nimport com.bluelinelabs.logansquare.annotation.JsonObject;\nimport com.bluelinelabs.logansquare.annotation.JsonObject.FieldDetectionPolicy;\n\nimport java.util.List;\n\n@JsonObject(fieldDetectionPolicy = FieldDetectionPolicy.NONPRIVATE_FIELDS_AND_ACCESSORS)\npublic class NonPrivateFieldsAndAccessorsFieldDetectionPolicyModel {\n\n    public String nonAnnotatedString;\n\n    public List<String> nonAnnotatedList;\n\n    private int nonAnnotatedPrivateInt;\n\n    @JsonField(name = \"annotated_string\")\n    public String annotatedString;\n\n    @JsonIgnore\n    public int intToIgnore;\n\n    @JsonIgnore(ignorePolicy = IgnorePolicy.PARSE_AND_SERIALIZE)\n    public int intToIgnoreForBoth;\n\n    @JsonIgnore(ignorePolicy = IgnorePolicy.PARSE_ONLY)\n    public int intToIgnoreForParse;\n\n    @JsonIgnore(ignorePolicy = IgnorePolicy.SERIALIZE_ONLY)\n    public int intToIgnoreForSerialization;\n\n    public transient int transientIntToIgnore;\n\n    public static int staticIntToIgnore;\n\n    @JsonField\n    public transient int transientIntToInclude;\n\n    @JsonField\n    public static int staticIntToInclude;\n\n    @JsonField\n    private transient int privateTransientIntToInclude;\n\n    @JsonField\n    private static int privateStaticIntToInclude;\n\n    public int getNonAnnotatedPrivateInt() {\n        return nonAnnotatedPrivateInt;\n    }\n\n    public void setNonAnnotatedPrivateInt(int nonAnnotatedPrivateInt) {\n        this.nonAnnotatedPrivateInt = nonAnnotatedPrivateInt;\n    }\n\n    public int getPrivateTransientIntToInclude() {\n        return privateTransientIntToInclude;\n    }\n\n    public void setPrivateTransientIntToInclude(int privateTransientIntToInclude) {\n        this.privateTransientIntToInclude = privateTransientIntToInclude;\n    }\n\n    public static int getPrivateStaticIntToInclude() {\n        return privateStaticIntToInclude;\n    }\n\n    public static void setPrivateStaticIntToInclude(int privateStaticIntToInclude) {\n        NonPrivateFieldsAndAccessorsFieldDetectionPolicyModel.privateStaticIntToInclude = privateStaticIntToInclude;\n    }\n}\n"
  },
  {
    "path": "processor/src/test/resources/model/good/NonPrivateFieldsFieldDetectionPolicyModel.java",
    "content": "package com.bluelinelabs.logansquare.demo.model;\n\nimport com.bluelinelabs.logansquare.annotation.JsonField;\nimport com.bluelinelabs.logansquare.annotation.JsonIgnore;\nimport com.bluelinelabs.logansquare.annotation.JsonIgnore.IgnorePolicy;\nimport com.bluelinelabs.logansquare.annotation.JsonObject;\nimport com.bluelinelabs.logansquare.annotation.JsonObject.FieldDetectionPolicy;\n\nimport java.util.List;\n\n@JsonObject(fieldDetectionPolicy = FieldDetectionPolicy.NONPRIVATE_FIELDS)\npublic class NonPrivateFieldsFieldDetectionPolicyModel {\n\n    public String nonAnnotatedString;\n\n    public List<String> nonAnnotatedList;\n\n    private int nonAnnotatedPrivateInt;\n\n    @JsonField(name = \"annotated_string\")\n    public String annotatedString;\n\n    @JsonIgnore\n    public int intToIgnore;\n\n    @JsonIgnore(ignorePolicy = IgnorePolicy.PARSE_AND_SERIALIZE)\n    public int intToIgnoreForBoth;\n\n    @JsonIgnore(ignorePolicy = IgnorePolicy.PARSE_ONLY)\n    public int intToIgnoreForParse;\n\n    @JsonIgnore(ignorePolicy = IgnorePolicy.SERIALIZE_ONLY)\n    public int intToIgnoreForSerialization;\n\n    public transient int transientIntToIgnore;\n\n    public static int staticIntToIgnore;\n\n    @JsonField\n    public transient int transientIntToInclude;\n\n    @JsonField\n    public static int staticIntToInclude;\n\n    public int getNonAnnotatedPrivateInt() {\n        return nonAnnotatedPrivateInt;\n    }\n\n    public void setNonAnnotatedPrivateInt(int nonAnnotatedPrivateInt) {\n        this.nonAnnotatedPrivateInt = nonAnnotatedPrivateInt;\n    }\n}\n"
  },
  {
    "path": "processor/src/test/resources/model/good/ParentModel.java",
    "content": "package com.bluelinelabs.logansquare.processor;\n\nimport com.bluelinelabs.logansquare.annotation.JsonField;\nimport com.bluelinelabs.logansquare.annotation.JsonObject;\n\n@JsonObject\npublic class ParentModel {\n\n    @JsonField\n    public int parentTestInt;\n\n}\n"
  },
  {
    "path": "processor/src/test/resources/model/good/PrePostProcessingModel.java",
    "content": "package com.bluelinelabs.logansquare.processor;\n\nimport com.bluelinelabs.logansquare.annotation.JsonField;\nimport com.bluelinelabs.logansquare.annotation.JsonObject;\nimport com.bluelinelabs.logansquare.annotation.OnJsonParseComplete;\nimport com.bluelinelabs.logansquare.annotation.OnPreJsonSerialize;\n\n@JsonObject\npublic class PrePostProcessingModel {\n\n    @JsonField(name = \"unformatted_string\")\n    public String unformattedString;\n\n    public String formattedString;\n\n    @OnPreJsonSerialize\n    public void onPreSerialize() {\n        unformattedString = formattedString.toLowerCase();\n    }\n\n    @OnJsonParseComplete\n    public void onParseComplete() {\n        formattedString = formattedString.toUpperCase();\n    }\n}\n"
  },
  {
    "path": "processor/src/test/resources/model/good/PrivateFieldModel.java",
    "content": "package com.bluelinelabs.logansquare.processor;\n\nimport com.bluelinelabs.logansquare.annotation.JsonField;\nimport com.bluelinelabs.logansquare.annotation.JsonObject;\n\nimport java.util.List;\nimport java.util.Map;\n\n@JsonObject\npublic class PrivateFieldModel {\n\n    @JsonField\n    private String privateString;\n\n    @JsonField(name = \"private_named_string\")\n    private String privateNamedString;\n\n    @JsonField\n    private boolean privateBoolean;\n\n    @JsonField\n    private List<String> privateList;\n\n    @JsonField\n    private Map<String, String> privateMap;\n\n    @JsonField(name = \"string_to_test_m_vars\")\n    private String mStringThatStartsWithM;\n\n    public String getPrivateString() {\n        return privateString;\n    }\n\n    public void setPrivateString(String privateString) {\n        this.privateString = privateString;\n    }\n\n    public String getPrivateNamedString() {\n        return privateNamedString;\n    }\n\n    public void setPrivateNamedString(String privateNamedString) {\n        this.privateNamedString = privateNamedString;\n    }\n\n    public boolean isPrivateBoolean() {\n        return privateBoolean;\n    }\n\n    public void setPrivateBoolean(boolean privateBoolean) {\n        this.privateBoolean = privateBoolean;\n    }\n\n    public List<String> getPrivateList() {\n        return privateList;\n    }\n\n    public void setPrivateList(List<String> privateList) {\n        this.privateList = privateList;\n    }\n\n    public Map<String, String> getPrivateMap() {\n        return privateMap;\n    }\n\n    public void setPrivateMap(Map<String, String> privateMap) {\n        this.privateMap = privateMap;\n    }\n\n    public String getStringThatStartsWithM() {\n        return mStringThatStartsWithM;\n    }\n\n    public void setStringThatStartsWithM(String stringThatStartsWithM) {\n        mStringThatStartsWithM = stringThatStartsWithM;\n    }\n}\n"
  },
  {
    "path": "processor/src/test/resources/model/good/SimpleCollectionModel.java",
    "content": "package com.bluelinelabs.logansquare.processor;\n\nimport com.bluelinelabs.logansquare.annotation.JsonField;\nimport com.bluelinelabs.logansquare.annotation.JsonObject;\n\nimport java.util.Deque;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.LinkedList;\nimport java.util.Map;\nimport java.util.HashMap;\nimport java.util.TreeMap;\nimport java.util.LinkedHashMap;\nimport java.util.Queue;\nimport java.util.Set;\n\n@JsonObject\npublic class SimpleCollectionModel {\n\n    @JsonField(name = \"primitive_array\")\n    public int[] primitiveArray;\n\n    @JsonField(name = \"model_list\")\n    public List<ModelForCollection> modelForCollectionList;\n\n    @JsonField(name = \"model_array_list\")\n    public ArrayList<ModelForCollection> modelForCollectionArrayList;\n\n    @JsonField(name = \"model_linked_list\")\n    public LinkedList<ModelForCollection> modelForCollectionLinkedList;\n\n    @JsonField(name = \"model_set\")\n    public Set<ModelForCollection> modelForCollectionSet;\n\n    @JsonField(name = \"model_queue\")\n    public Queue<ModelForCollection> modelForCollectionQueue;\n\n    @JsonField(name = \"model_deque\")\n    public Deque<ModelForCollection> modelForCollectionDeque;\n\n    @JsonField(name = \"model_map\")\n    public Map<String, ModelForCollection> modelForCollectionMap;\n\n    @JsonField(name = \"model_hash_map\")\n    public HashMap<String, ModelForCollection> modelForCollectionHashMap;\n\n    @JsonField(name = \"model_tree_map\")\n    public TreeMap<String, ModelForCollection> modelForCollectionTreeMap;\n\n    @JsonField(name = \"model_linked_hash_map\")\n    public LinkedHashMap<String, ModelForCollection> modelForCollectionLinkedHashMap;\n\n    @JsonField(name = \"model_array\")\n    public ModelForCollection[] modelForCollectionArray;\n\n    @JsonObject\n    public static class ModelForCollection {\n\n        @JsonField\n        public String name;\n\n    }\n}"
  },
  {
    "path": "processor/src/test/resources/model/good/SimpleGenericModel.java",
    "content": "package com.bluelinelabs.logansquare.processor;\n\nimport com.bluelinelabs.logansquare.annotation.JsonField;\nimport com.bluelinelabs.logansquare.annotation.JsonObject;\n\nimport java.util.Date;\n\n@JsonObject\npublic class SimpleGenericModel<T> {\n\n    @JsonField\n    public String string;\n\n    @JsonField\n    public Date date;\n\n    @JsonField(name = \"test_int\")\n    public int testInt;\n\n    @JsonField(name = \"test_long\")\n    public long testLong;\n\n    @JsonField(name = \"test_float\")\n    public float testFloat;\n\n    @JsonField(name = \"test_double\")\n    public double testDouble;\n\n    @JsonField(name = \"test_string\")\n    public String testString;\n\n    @JsonField(name = \"test_int_obj\")\n    public Integer testIntObj;\n\n    @JsonField(name = \"test_long_obj\")\n    public Long testLongObj;\n\n    @JsonField(name = \"test_float_obj\")\n    public Float testFloatObj;\n\n    @JsonField(name = \"test_double_obj\")\n    public Double testDoubleObj;\n\n    @JsonField(name = \"test_t\")\n    public T testT;\n}\n"
  },
  {
    "path": "processor/src/test/resources/model/good/SimpleGenericModelWithExtends.java",
    "content": "package com.bluelinelabs.logansquare.processor;\n\nimport com.bluelinelabs.logansquare.annotation.JsonField;\nimport com.bluelinelabs.logansquare.annotation.JsonObject;\n\nimport java.util.Date;\n\n@JsonObject\npublic class SimpleGenericModelWithExtends<T extends String> {\n\n    @JsonField\n    public String string;\n\n    @JsonField\n    public Date date;\n\n    @JsonField(name = \"test_int\")\n    public int testInt;\n\n    @JsonField(name = \"test_long\")\n    public long testLong;\n\n    @JsonField(name = \"test_float\")\n    public float testFloat;\n\n    @JsonField(name = \"test_double\")\n    public double testDouble;\n\n    @JsonField(name = \"test_string\")\n    public String testString;\n\n    @JsonField(name = \"test_int_obj\")\n    public Integer testIntObj;\n\n    @JsonField(name = \"test_long_obj\")\n    public Long testLongObj;\n\n    @JsonField(name = \"test_float_obj\")\n    public Float testFloatObj;\n\n    @JsonField(name = \"test_double_obj\")\n    public Double testDoubleObj;\n\n    @JsonField(name = \"test_t\")\n    public T testT;\n\n}\n"
  },
  {
    "path": "processor/src/test/resources/model/good/SimpleGenericStringModel.java",
    "content": "package com.bluelinelabs.logansquare.processor;\n\nimport com.bluelinelabs.logansquare.annotation.JsonField;\nimport com.bluelinelabs.logansquare.annotation.JsonObject;\n\nimport java.util.Date;\n\n@JsonObject\npublic class SimpleGenericStringModel extends SimpleGenericModel<String> {\n\n}\n"
  },
  {
    "path": "processor/src/test/resources/model/good/SimpleModel.java",
    "content": "package com.bluelinelabs.logansquare.processor;\n\nimport com.bluelinelabs.logansquare.annotation.JsonField;\nimport com.bluelinelabs.logansquare.annotation.JsonIgnore;\nimport com.bluelinelabs.logansquare.annotation.JsonIgnore.IgnorePolicy;\nimport com.bluelinelabs.logansquare.annotation.JsonObject;\n\nimport java.util.Date;\nimport java.util.List;\nimport java.util.Map;\n\n@JsonObject\npublic class SimpleModel {\n\n    @JsonField\n    public String string;\n\n    @JsonField\n    public Date date;\n\n    @JsonField(name = \"test_int\")\n    public int testInt;\n\n    @JsonField(name = \"test_long\")\n    public long testLong;\n\n    @JsonField(name = \"test_float\")\n    public float testFloat;\n\n    @JsonField(name = \"test_double\")\n    public double testDouble;\n\n    @JsonField(name = \"test_string\")\n    public String testString;\n\n    @JsonField(name = \"test_int_obj\")\n    public Integer testIntObj;\n\n    @JsonField(name = \"test_long_obj\")\n    public Long testLongObj;\n\n    @JsonField(name = \"test_float_obj\")\n    public Float testFloatObj;\n\n    @JsonField(name = \"test_double_obj\")\n    public Double testDoubleObj;\n\n    @JsonIgnore\n    @JsonField\n    public int intToIgnore;\n\n    @JsonIgnore(ignorePolicy = IgnorePolicy.PARSE_AND_SERIALIZE)\n    @JsonField\n    public int intToIgnoreForBoth;\n\n    @JsonIgnore(ignorePolicy = IgnorePolicy.PARSE_ONLY)\n    @JsonField\n    public int intToIgnoreForParse;\n\n    @JsonIgnore(ignorePolicy = IgnorePolicy.SERIALIZE_ONLY)\n    @JsonField\n    public int intToIgnoreForSerialization;\n\n    @JsonField(name = \"object_map\")\n    public Map<String, Object> objectMap;\n\n    @JsonField(name = \"object-map-with-dashes\")\n    public Map<String, Object> objectMapWithDashes;\n\n    @JsonField(name = \"object-list-with-dashes\")\n    public List<Object> objectListWithDashes;\n\n    @JsonField(name = \"object-array-with-dashes\")\n    public Object[] objectArrayWithDashes;\n}\n"
  },
  {
    "path": "processor/src/test/resources/model/good/SimpleWrapperModel.java",
    "content": "package com.bluelinelabs.logansquare.processor;\n\nimport com.bluelinelabs.logansquare.annotation.JsonField;\nimport com.bluelinelabs.logansquare.annotation.JsonObject;\n\n@JsonObject\npublic class SimpleWrapperModel {\n\n    @JsonField\n    public WrappedClass wrappedObject;\n\n    @JsonObject\n    public static class WrappedClass {\n\n        @JsonField\n        public String wrappedString;\n    }\n\n}\n"
  },
  {
    "path": "processor/src/test/resources/model/good/WhitespaceFieldNameModel.java",
    "content": "package com.bluelinelabs.logansquare.processor.model;\n\nimport com.bluelinelabs.logansquare.annotation.JsonField;\nimport com.bluelinelabs.logansquare.annotation.JsonObject;\n\nimport java.util.List;\nimport java.util.Map;\n\n@JsonObject\npublic class WhitespaceFieldNameModel {\n\n    @JsonField(name = \"Full Name\")\n    public String fullName;\n\n    @JsonField(name = \"Address Lines\")\n    public List<String> addressLines;\n\n    @JsonField(name = \"Pet Names\")\n    public String[] petNames;\n\n    @JsonField(name = \"Address-Lines\")\n    public List<String> addressLinesDuplicate;\n\n    @JsonField(name = \"All Contacts\")\n    public Map<String, String> allContacts;\n}\n"
  },
  {
    "path": "settings.gradle",
    "content": "include 'core'\ninclude 'processor'"
  }
]